diff --git a/lib/apis.js b/lib/apis.js index ee1dfb7..5e9542d 100644 --- a/lib/apis.js +++ b/lib/apis.js @@ -528,24 +528,24 @@ module.exports.create = function (xconfx, apiFactories, apiDeps) { function daplieTel() { return twilioTel().then(function (twilio) { - function sms(opts) { - // opts = { to, from, body } - return new apiDeps.Promise(function (resolve, reject) { - twilio.sendSms(opts, function (err, resp) { - if (err) { - reject(err); - return; - } + function sms(opts) { + // opts = { to, from, body } + return new apiDeps.Promise(function (resolve, reject) { + twilio.sendSms(opts, function (err, resp) { + if (err) { + reject(err); + return; + } - resolve(resp); - }); - }); - } + resolve(resp); + }); + }); + } - return { - sms: sms - , mms: function () { throw new Error('MMS Not Implemented'); } - }; + return { + sms: sms + , mms: function () { throw new Error('MMS Not Implemented'); } + }; }); } diff --git a/lib/com.daplie.walnut/index.js b/lib/com.daplie.walnut/index.js index d3e4f09..692a5b4 100644 --- a/lib/com.daplie.walnut/index.js +++ b/lib/com.daplie.walnut/index.js @@ -1,69 +1,69 @@ /******/ (function(modules) { // webpackBootstrap -/******/ // The module cache -/******/ var installedModules = {}; +/******/ // The module cache +/******/ var installedModules = {}; /******/ -/******/ // The require function -/******/ function __webpack_require__(moduleId) { +/******/ // 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: {} -/******/ }; +/******/ // 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__); +/******/ // Execute the module function +/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); /******/ -/******/ // Flag the module as loaded -/******/ module.l = true; +/******/ // Flag the module as loaded +/******/ module.l = true; /******/ -/******/ // Return the exports of the module -/******/ return module.exports; -/******/ } +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } /******/ /******/ -/******/ // expose the modules object (__webpack_modules__) -/******/ __webpack_require__.m = modules; +/******/ // expose the modules object (__webpack_modules__) +/******/ __webpack_require__.m = modules; /******/ -/******/ // expose the module cache -/******/ __webpack_require__.c = installedModules; +/******/ // expose the module cache +/******/ __webpack_require__.c = installedModules; /******/ -/******/ // identity function for calling harmony imports with the correct context -/******/ __webpack_require__.i = function(value) { return value; }; +/******/ // identity function for calling harmony imports with the correct context +/******/ __webpack_require__.i = function(value) { return value; }; /******/ -/******/ // define getter function for harmony exports -/******/ __webpack_require__.d = function(exports, name, getter) { -/******/ if(!__webpack_require__.o(exports, name)) { -/******/ Object.defineProperty(exports, name, { -/******/ configurable: false, -/******/ enumerable: true, -/******/ get: getter -/******/ }); -/******/ } -/******/ }; +/******/ // define getter function for harmony exports +/******/ __webpack_require__.d = function(exports, name, getter) { +/******/ if(!__webpack_require__.o(exports, name)) { +/******/ Object.defineProperty(exports, name, { +/******/ configurable: false, +/******/ enumerable: true, +/******/ get: getter +/******/ }); +/******/ } +/******/ }; /******/ -/******/ // 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; -/******/ }; +/******/ // 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); }; +/******/ // Object.prototype.hasOwnProperty.call +/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; /******/ -/******/ // __webpack_public_path__ -/******/ __webpack_require__.p = ""; +/******/ // __webpack_public_path__ +/******/ __webpack_require__.p = ""; /******/ -/******/ // Load entry module and return exports -/******/ return __webpack_require__(__webpack_require__.s = 276); +/******/ // Load entry module and return exports +/******/ return __webpack_require__(__webpack_require__.s = 276); /******/ }) /************************************************************************/ /******/ ([ @@ -407,7 +407,7 @@ module.exports = warning; * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. * - * + * */ @@ -466,81 +466,81 @@ var hasOwnProperty = Object.prototype.hasOwnProperty; var propIsEnumerable = Object.prototype.propertyIsEnumerable; function toObject(val) { - if (val === null || val === undefined) { - throw new TypeError('Object.assign cannot be called with null or undefined'); - } + if (val === null || val === undefined) { + throw new TypeError('Object.assign cannot be called with null or undefined'); + } - return Object(val); + return Object(val); } function shouldUseNative() { - try { - if (!Object.assign) { - return false; - } + try { + if (!Object.assign) { + return false; + } - // Detect buggy property enumeration order in older V8 versions. + // Detect buggy property enumeration order in older V8 versions. - // https://bugs.chromium.org/p/v8/issues/detail?id=4118 - var test1 = new String('abc'); // eslint-disable-line no-new-wrappers - test1[5] = 'de'; - if (Object.getOwnPropertyNames(test1)[0] === '5') { - return false; - } + // https://bugs.chromium.org/p/v8/issues/detail?id=4118 + var test1 = new String('abc'); // eslint-disable-line no-new-wrappers + test1[5] = 'de'; + if (Object.getOwnPropertyNames(test1)[0] === '5') { + return false; + } - // https://bugs.chromium.org/p/v8/issues/detail?id=3056 - var test2 = {}; - for (var i = 0; i < 10; i++) { - test2['_' + String.fromCharCode(i)] = i; - } - var order2 = Object.getOwnPropertyNames(test2).map(function (n) { - return test2[n]; - }); - if (order2.join('') !== '0123456789') { - return false; - } + // https://bugs.chromium.org/p/v8/issues/detail?id=3056 + var test2 = {}; + for (var i = 0; i < 10; i++) { + test2['_' + String.fromCharCode(i)] = i; + } + var order2 = Object.getOwnPropertyNames(test2).map(function (n) { + return test2[n]; + }); + if (order2.join('') !== '0123456789') { + return false; + } - // https://bugs.chromium.org/p/v8/issues/detail?id=3056 - var test3 = {}; - 'abcdefghijklmnopqrst'.split('').forEach(function (letter) { - test3[letter] = letter; - }); - if (Object.keys(Object.assign({}, test3)).join('') !== 'abcdefghijklmnopqrst') { - return false; - } + // https://bugs.chromium.org/p/v8/issues/detail?id=3056 + var test3 = {}; + 'abcdefghijklmnopqrst'.split('').forEach(function (letter) { + test3[letter] = letter; + }); + if (Object.keys(Object.assign({}, test3)).join('') !== 'abcdefghijklmnopqrst') { + return false; + } - return true; - } catch (err) { - // We don't expect any of the above to throw, but better to be safe. - return false; - } + return true; + } catch (err) { + // We don't expect any of the above to throw, but better to be safe. + return false; + } } module.exports = shouldUseNative() ? Object.assign : function (target, source) { - var from; - var to = toObject(target); - var symbols; + var from; + var to = toObject(target); + var symbols; - for (var s = 1; s < arguments.length; s++) { - from = Object(arguments[s]); + for (var s = 1; s < arguments.length; s++) { + from = Object(arguments[s]); - for (var key in from) { - if (hasOwnProperty.call(from, key)) { - to[key] = from[key]; - } - } + for (var key in from) { + if (hasOwnProperty.call(from, key)) { + to[key] = from[key]; + } + } - if (getOwnPropertySymbols) { - symbols = getOwnPropertySymbols(from); - for (var i = 0; i < symbols.length; i++) { - if (propIsEnumerable.call(from, symbols[i])) { - to[symbols[i]] = from[symbols[i]]; - } - } - } - } + if (getOwnPropertySymbols) { + symbols = getOwnPropertySymbols(from); + for (var i = 0; i < symbols.length; i++) { + if (propIsEnumerable.call(from, symbols[i])) { + to[symbols[i]] = from[symbols[i]]; + } + } + } + } - return to; + return to; }; /***/ }), @@ -834,7 +834,7 @@ if (process.env.NODE_ENV !== 'production') { * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. * - * + * */ @@ -1222,7 +1222,7 @@ module.exports = ReactComponentTreeHook; * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. * - * + * */ function makeEmptyFunction(arg) { @@ -1264,7 +1264,7 @@ module.exports = emptyFunction; * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. * - * + * */ @@ -1642,7 +1642,7 @@ module.exports = ReactUpdates; * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. * - * + * */ @@ -2164,7 +2164,7 @@ module.exports = DOMProperty; * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. * - * + * */ @@ -3124,7 +3124,7 @@ module.exports = React; * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. * - * + * */ @@ -3905,7 +3905,7 @@ module.exports = emptyObject; * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. * - * + * */ @@ -4570,7 +4570,7 @@ module.exports = SyntheticMouseEvent; * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. * - * + * */ @@ -5034,7 +5034,7 @@ module.exports = setInnerHTML; * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. * - * + * */ @@ -5067,7 +5067,7 @@ module.exports = canDefineProperty; * of patent rights can be found in the PATENTS file in the same directory. * * @typechecks - * + * */ /*eslint-disable no-self-compare */ @@ -5920,7 +5920,7 @@ module.exports = EventPluginUtils; * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. * - * + * */ @@ -6128,7 +6128,7 @@ module.exports = LinkedValueUtils; * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. * - * + * */ @@ -6178,7 +6178,7 @@ module.exports = ReactComponentEnvironment; * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. * - * + * */ @@ -8556,7 +8556,7 @@ module.exports = CSSProperty; * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. * - * + * */ @@ -9186,7 +9186,7 @@ module.exports = ReactEmptyComponent; * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. * - * + * */ @@ -9959,7 +9959,7 @@ module.exports = ReactMount; * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. * - * + * */ @@ -10005,7 +10005,7 @@ module.exports = ReactNodeTypes; * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. * - * + * */ @@ -10057,7 +10057,7 @@ module.exports = ViewportMetrics; * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. * - * + * */ @@ -10121,7 +10121,7 @@ module.exports = accumulateInto; * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. * - * + * */ @@ -10494,7 +10494,7 @@ module.exports = instantiateReactComponent; * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. * - * + * */ @@ -11137,7 +11137,7 @@ function wrapMapToPropsConstant(getConstant) { // dependsOnOwnProps is used by createMapToPropsProxy to determine whether to pass props as args // to the mapToProps function being wrapped. It is also used by makePurePropsSelector to determine // whether mapToProps needs to be invoked when props have changed. -// +// // A length of one signals that mapToProps does not depend on props from the parent component. // A length of zero is assumed to mean mapToProps is getting args via arguments or ...args and // therefore not reporting its length accurately.. @@ -11147,16 +11147,16 @@ function getDependsOnOwnProps(mapToProps) { // Used by whenMapStateToPropsIsFunction and whenMapDispatchToPropsIsFunction, // this function wraps mapToProps in a proxy function which does several things: -// +// // * Detects whether the mapToProps function being called depends on props, which // is used by selectorFactory to decide if it should reinvoke on props changes. -// +// // * On first call, handles mapToProps if returns another function, and treats that // new function as the true mapToProps for subsequent calls. -// +// // * On first call, verifies the first result is a plain object, in order to warn // the developer that their mapToProps function is not returning a valid result. -// +// function wrapMapToPropsFunc(mapToProps, methodName) { return function initProxySelector(dispatch, _ref) { var displayName = _ref.displayName; @@ -11724,7 +11724,7 @@ module.exports = { * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. * - * + * */ @@ -12113,7 +12113,7 @@ module.exports = ReactNoopUpdateQueue; * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. * - * + * */ @@ -12510,15 +12510,15 @@ var g; // This works in non-strict mode g = function () { - return this; + return this; }(); try { - // This works if eval is allowed (see CSP) - g = g || Function("return this")() || (1, eval)("this"); + // This works if eval is allowed (see CSP) + g = g || Function("return this")() || (1, eval)("this"); } catch (e) { - // This works if the window reference is available - if ((typeof window === "undefined" ? "undefined" : _typeof(window)) === "object") g = window; + // This works if the window reference is available + if ((typeof window === "undefined" ? "undefined" : _typeof(window)) === "object") g = window; } // g can still be undefined, but nothing to do about it... @@ -13784,7 +13784,7 @@ module.exports = camelizeStyleName; * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. * - * + * */ var isTextNode = __webpack_require__(128); @@ -14342,7 +14342,7 @@ module.exports = isTextNode; * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. * - * + * * @typechecks static-only */ @@ -21055,7 +21055,7 @@ module.exports = ReactDOMUnknownPropertyHook; * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. * - * + * */ @@ -21588,7 +21588,7 @@ module.exports = { * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. * - * + * */ @@ -21810,7 +21810,7 @@ module.exports = ReactEventListener; * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. * - * + * */ @@ -21888,7 +21888,7 @@ module.exports = ReactInjection; * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. * - * + * */ @@ -22438,7 +22438,7 @@ module.exports = ReactMultiChild; * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. * - * + * */ @@ -22537,7 +22537,7 @@ module.exports = ReactOwner; * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. * - * + * */ @@ -22752,7 +22752,7 @@ module.exports = ReactReconcileTransaction; * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. * - * + * */ @@ -22944,7 +22944,7 @@ module.exports = ReactServerRenderingTransaction; * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. * - * + * */ @@ -23607,7 +23607,7 @@ module.exports = SelectEventPlugin; * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. * - * + * */ @@ -24330,7 +24330,7 @@ module.exports = SyntheticWheelEvent; * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. * - * + * */ @@ -24625,7 +24625,7 @@ module.exports = findDOMNode; * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. * - * + * */ @@ -24826,7 +24826,7 @@ module.exports = getEventKey; * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. * - * + * */ @@ -25344,7 +25344,7 @@ function _objectWithoutProperties(obj, keys) { selectorFactory, which has the signature: (dispatch, options) => (nextState, nextOwnProps) => nextFinalProps - + connect passes its args to connectAdvanced as options, which will in turn pass them to selectorFactory each time a Connect component instance is instantiated or hot reloaded. @@ -27482,7 +27482,7 @@ function pathToRegexp(path, keys, options) { * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. * - * + * */ @@ -27546,7 +27546,7 @@ module.exports = KeyEscapeUtils; * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. * - * + * */ @@ -28034,7 +28034,7 @@ module.exports = ReactDOMFactories; * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. * - * + * */ @@ -28089,7 +28089,7 @@ module.exports = factory(isValidElement); * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. * - * + * */ @@ -28253,7 +28253,7 @@ module.exports = factory(Component, isValidElement, ReactNoopUpdateQueue); * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. * - * + * */ @@ -28910,25 +28910,25 @@ exports['default'] = result; Object.defineProperty(exports, "__esModule", { - value: true + value: true }); exports['default'] = symbolObservablePonyfill; function symbolObservablePonyfill(root) { - var result; - var _Symbol = root.Symbol; + var result; + var _Symbol = root.Symbol; - if (typeof _Symbol === 'function') { - if (_Symbol.observable) { - result = _Symbol.observable; - } else { - result = _Symbol('observable'); - _Symbol.observable = result; - } - } else { - result = '@@observable'; - } + if (typeof _Symbol === 'function') { + if (_Symbol.observable) { + result = _Symbol.observable; + } else { + result = _Symbol('observable'); + _Symbol.observable = result; + } + } else { + result = '@@observable'; + } - return result; + return result; }; /***/ }), @@ -28991,26 +28991,26 @@ exports.default = valueEqual; module.exports = function (module) { - if (!module.webpackPolyfill) { - module.deprecate = function () {}; - module.paths = []; - // module.parent = undefined by default - if (!module.children) module.children = []; - Object.defineProperty(module, "loaded", { - enumerable: true, - get: function get() { - return module.l; - } - }); - Object.defineProperty(module, "id", { - enumerable: true, - get: function get() { - return module.i; - } - }); - module.webpackPolyfill = 1; - } - return module; + if (!module.webpackPolyfill) { + module.deprecate = function () {}; + module.paths = []; + // module.parent = undefined by default + if (!module.children) module.children = []; + Object.defineProperty(module, "loaded", { + enumerable: true, + get: function get() { + return module.l; + } + }); + Object.defineProperty(module, "id", { + enumerable: true, + get: function get() { + return module.i; + } + }); + module.webpackPolyfill = 1; + } + return module; }; /***/ }), @@ -30094,4 +30094,4 @@ exports.default = { /***/ }) /******/ ]); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAgNDg5MWNmNWI1ZThhZTEyNDI2YTciLCJ3ZWJwYWNrOi8vLy4vfi9wcm9jZXNzL2Jyb3dzZXIuanMiLCJ3ZWJwYWNrOi8vLy4vfi9mYmpzL2xpYi9pbnZhcmlhbnQuanMiLCJ3ZWJwYWNrOi8vLy4vfi9mYmpzL2xpYi93YXJuaW5nLmpzIiwid2VicGFjazovLy8uL34vcmVhY3QtZG9tL2xpYi9yZWFjdFByb2RJbnZhcmlhbnQuanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFjdC9yZWFjdC5qcyIsIndlYnBhY2s6Ly8vLi9+L29iamVjdC1hc3NpZ24vaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFjdC1kb20vbGliL1JlYWN0RE9NQ29tcG9uZW50VHJlZS5qcyIsIndlYnBhY2s6Ly8vLi9+L2ZianMvbGliL0V4ZWN1dGlvbkVudmlyb25tZW50LmpzIiwid2VicGFjazovLy8uL34vcHJvcC10eXBlcy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0L2xpYi9SZWFjdENvbXBvbmVudFRyZWVIb29rLmpzIiwid2VicGFjazovLy8uL34vZmJqcy9saWIvZW1wdHlGdW5jdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LWRvbS9saWIvUmVhY3RJbnN0cnVtZW50YXRpb24uanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFjdC1yb3V0ZXIvZXMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFjdC1yZWR1eC9lcy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LWRvbS9saWIvUmVhY3RVcGRhdGVzLmpzIiwid2VicGFjazovLy8uL34vcmVhY3QvbGliL1JlYWN0Q3VycmVudE93bmVyLmpzIiwid2VicGFjazovLy8uL34vcmVhY3QtZG9tL2xpYi9TeW50aGV0aWNFdmVudC5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LWRvbS9saWIvRE9NUHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFjdC1kb20vbGliL1Bvb2xlZENsYXNzLmpzIiwid2VicGFjazovLy8uL34vcmVhY3QvbGliL1JlYWN0RWxlbWVudC5qcyIsIndlYnBhY2s6Ly8vLi9+L3dhcm5pbmcvYnJvd3Nlci5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LWRvbS9saWIvRE9NTGF6eVRyZWUuanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFjdC1kb20vbGliL1JlYWN0UmVjb25jaWxlci5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0L2xpYi9SZWFjdC5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0L2xpYi9yZWFjdFByb2RJbnZhcmlhbnQuanMiLCJ3ZWJwYWNrOi8vLy4vfi9oaXN0b3J5L1BhdGhVdGlscy5qcyIsIndlYnBhY2s6Ly8vLi9+L2ludmFyaWFudC9icm93c2VyLmpzIiwid2VicGFjazovLy8uL34vcmVhY3QtZG9tL2xpYi9FdmVudFBsdWdpbkh1Yi5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LWRvbS9saWIvRXZlbnRQcm9wYWdhdG9ycy5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LWRvbS9saWIvUmVhY3RJbnN0YW5jZU1hcC5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LWRvbS9saWIvU3ludGhldGljVUlFdmVudC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9jb250ZW50L2l0ZW0tbGlzdC5qc3giLCJ3ZWJwYWNrOi8vLy4vfi9mYmpzL2xpYi9lbXB0eU9iamVjdC5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LWRvbS9saWIvRXZlbnRQbHVnaW5SZWdpc3RyeS5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LWRvbS9saWIvUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyLmpzIiwid2VicGFjazovLy8uL34vcmVhY3QtZG9tL2xpYi9TeW50aGV0aWNNb3VzZUV2ZW50LmpzIiwid2VicGFjazovLy8uL34vcmVhY3QtZG9tL2xpYi9UcmFuc2FjdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LWRvbS9saWIvZXNjYXBlVGV4dENvbnRlbnRGb3JCcm93c2VyLmpzIiwid2VicGFjazovLy8uL34vcmVhY3QtZG9tL2xpYi9zZXRJbm5lckhUTUwuanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFjdC9saWIvY2FuRGVmaW5lUHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vLy4vfi9mYmpzL2xpYi9zaGFsbG93RXF1YWwuanMiLCJ3ZWJwYWNrOi8vLy4vfi9oaXN0b3J5L0xvY2F0aW9uVXRpbHMuanMiLCJ3ZWJwYWNrOi8vLy4vfi9oaXN0b3J5L2NyZWF0ZVRyYW5zaXRpb25NYW5hZ2VyLmpzIiwid2VicGFjazovLy8uL34vbG9kYXNoLWVzL2lzUGxhaW5PYmplY3QuanMiLCJ3ZWJwYWNrOi8vLy4vfi9wcm9wLXR5cGVzL2xpYi9SZWFjdFByb3BUeXBlc1NlY3JldC5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LWRvbS9saWIvRE9NQ2hpbGRyZW5PcGVyYXRpb25zLmpzIiwid2VicGFjazovLy8uL34vcmVhY3QtZG9tL2xpYi9ET01OYW1lc3BhY2VzLmpzIiwid2VicGFjazovLy8uL34vcmVhY3QtZG9tL2xpYi9FdmVudFBsdWdpblV0aWxzLmpzIiwid2VicGFjazovLy8uL34vcmVhY3QtZG9tL2xpYi9LZXlFc2NhcGVVdGlscy5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LWRvbS9saWIvTGlua2VkVmFsdWVVdGlscy5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LWRvbS9saWIvUmVhY3RDb21wb25lbnRFbnZpcm9ubWVudC5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LWRvbS9saWIvUmVhY3RFcnJvclV0aWxzLmpzIiwid2VicGFjazovLy8uL34vcmVhY3QtZG9tL2xpYi9SZWFjdFVwZGF0ZVF1ZXVlLmpzIiwid2VicGFjazovLy8uL34vcmVhY3QtZG9tL2xpYi9jcmVhdGVNaWNyb3NvZnRVbnNhZmVMb2NhbEZ1bmN0aW9uLmpzIiwid2VicGFjazovLy8uL34vcmVhY3QtZG9tL2xpYi9nZXRFdmVudENoYXJDb2RlLmpzIiwid2VicGFjazovLy8uL34vcmVhY3QtZG9tL2xpYi9nZXRFdmVudE1vZGlmaWVyU3RhdGUuanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFjdC1kb20vbGliL2dldEV2ZW50VGFyZ2V0LmpzIiwid2VicGFjazovLy8uL34vcmVhY3QtZG9tL2xpYi9pc0V2ZW50U3VwcG9ydGVkLmpzIiwid2VicGFjazovLy8uL34vcmVhY3QtZG9tL2xpYi9zaG91bGRVcGRhdGVSZWFjdENvbXBvbmVudC5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LWRvbS9saWIvdmFsaWRhdGVET01OZXN0aW5nLmpzIiwid2VicGFjazovLy8uL34vcmVhY3QtcmVkdXgvZXMvdXRpbHMvd2FybmluZy5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LXJvdXRlci9lcy9Sb3V0ZXIuanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFjdC1yb3V0ZXIvZXMvbWF0Y2hQYXRoLmpzIiwid2VicGFjazovLy8uL34vcmVhY3QvbGliL2xvd1ByaW9yaXR5V2FybmluZy5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlZHV4L2VzL2luZGV4LmpzIiwid2VicGFjazovLy8uL34vZmJqcy9saWIvRXZlbnRMaXN0ZW5lci5qcyIsIndlYnBhY2s6Ly8vLi9+L2ZianMvbGliL2ZvY3VzTm9kZS5qcyIsIndlYnBhY2s6Ly8vLi9+L2ZianMvbGliL2dldEFjdGl2ZUVsZW1lbnQuanMiLCJ3ZWJwYWNrOi8vLy4vfi9oaXN0b3J5L0RPTVV0aWxzLmpzIiwid2VicGFjazovLy8uL34vaG9pc3Qtbm9uLXJlYWN0LXN0YXRpY3MvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vfi9sb2Rhc2gtZXMvX1N5bWJvbC5qcyIsIndlYnBhY2s6Ly8vLi9+L3Byb3AtdHlwZXMvZmFjdG9yeS5qcyIsIndlYnBhY2s6Ly8vLi9+L3Byb3AtdHlwZXMvZmFjdG9yeVdpdGhUeXBlQ2hlY2tlcnMuanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFjdC1kb20vbGliL0NTU1Byb3BlcnR5LmpzIiwid2VicGFjazovLy8uL34vcmVhY3QtZG9tL2xpYi9DYWxsYmFja1F1ZXVlLmpzIiwid2VicGFjazovLy8uL34vcmVhY3QtZG9tL2xpYi9ET01Qcm9wZXJ0eU9wZXJhdGlvbnMuanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFjdC1kb20vbGliL1JlYWN0RE9NQ29tcG9uZW50RmxhZ3MuanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFjdC1kb20vbGliL1JlYWN0RE9NU2VsZWN0LmpzIiwid2VicGFjazovLy8uL34vcmVhY3QtZG9tL2xpYi9SZWFjdEVtcHR5Q29tcG9uZW50LmpzIiwid2VicGFjazovLy8uL34vcmVhY3QtZG9tL2xpYi9SZWFjdEZlYXR1cmVGbGFncy5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LWRvbS9saWIvUmVhY3RIb3N0Q29tcG9uZW50LmpzIiwid2VicGFjazovLy8uL34vcmVhY3QtZG9tL2xpYi9SZWFjdElucHV0U2VsZWN0aW9uLmpzIiwid2VicGFjazovLy8uL34vcmVhY3QtZG9tL2xpYi9SZWFjdE1vdW50LmpzIiwid2VicGFjazovLy8uL34vcmVhY3QtZG9tL2xpYi9SZWFjdE5vZGVUeXBlcy5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LWRvbS9saWIvUmVhY3RQcm9wVHlwZXNTZWNyZXQuanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFjdC1kb20vbGliL1ZpZXdwb3J0TWV0cmljcy5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LWRvbS9saWIvYWNjdW11bGF0ZUludG8uanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFjdC1kb20vbGliL2ZvckVhY2hBY2N1bXVsYXRlZC5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LWRvbS9saWIvZ2V0SG9zdENvbXBvbmVudEZyb21Db21wb3NpdGUuanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFjdC1kb20vbGliL2dldFRleHRDb250ZW50QWNjZXNzb3IuanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFjdC1kb20vbGliL2lucHV0VmFsdWVUcmFja2luZy5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LWRvbS9saWIvaW5zdGFudGlhdGVSZWFjdENvbXBvbmVudC5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LWRvbS9saWIvaXNUZXh0SW5wdXRFbGVtZW50LmpzIiwid2VicGFjazovLy8uL34vcmVhY3QtZG9tL2xpYi9zZXRUZXh0Q29udGVudC5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LWRvbS9saWIvdHJhdmVyc2VBbGxDaGlsZHJlbi5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LXJlZHV4L2VzL2NvbXBvbmVudHMvY29ubmVjdEFkdmFuY2VkLmpzIiwid2VicGFjazovLy8uL34vcmVhY3QtcmVkdXgvZXMvY29ubmVjdC93cmFwTWFwVG9Qcm9wcy5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LXJlZHV4L2VzL3V0aWxzL1Byb3BUeXBlcy5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LXJlZHV4L2VzL3V0aWxzL3ZlcmlmeVBsYWluT2JqZWN0LmpzIiwid2VicGFjazovLy8uL34vcmVhY3Qtcm91dGVyLWRvbS9lcy9MaW5rLmpzIiwid2VicGFjazovLy8uL34vcmVhY3Qtcm91dGVyL2VzL1JvdXRlLmpzIiwid2VicGFjazovLy8uL34vcmVhY3QvbGliL1JlYWN0QmFzZUNsYXNzZXMuanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFjdC9saWIvUmVhY3RFbGVtZW50U3ltYm9sLmpzIiwid2VicGFjazovLy8uL34vcmVhY3QvbGliL1JlYWN0RWxlbWVudFZhbGlkYXRvci5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0L2xpYi9SZWFjdE5vb3BVcGRhdGVRdWV1ZS5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0L2xpYi9nZXRJdGVyYXRvckZuLmpzIiwid2VicGFjazovLy8uL34vcmVkdXgvZXMvY29tcG9zZS5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlZHV4L2VzL2NyZWF0ZVN0b3JlLmpzIiwid2VicGFjazovLy8uL34vcmVkdXgvZXMvdXRpbHMvd2FybmluZy5qcyIsIndlYnBhY2s6Ly8vKHdlYnBhY2spL2J1aWxkaW4vZ2xvYmFsLmpzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL25hdmlnYXRpb24vYm90dG9tLW5hdi5qc3giLCJ3ZWJwYWNrOi8vLy4vc3JjL3V0aWwvZ2V0UGF0aC5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LWRvbS9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LXJvdXRlci1kb20vZXMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvbWFpbi5qc3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvbmF2aWdhdGlvbi9tZW51LmpzeCIsIndlYnBhY2s6Ly8vLi9zcmMvcmVkdWNlcnMvbWFpbi5qcyIsIndlYnBhY2s6Ly8vLi9+L2NyZWF0ZS1yZWFjdC1jbGFzcy9mYWN0b3J5LmpzIiwid2VicGFjazovLy8uL34vZmJqcy9saWIvY2FtZWxpemUuanMiLCJ3ZWJwYWNrOi8vLy4vfi9mYmpzL2xpYi9jYW1lbGl6ZVN0eWxlTmFtZS5qcyIsIndlYnBhY2s6Ly8vLi9+L2ZianMvbGliL2NvbnRhaW5zTm9kZS5qcyIsIndlYnBhY2s6Ly8vLi9+L2ZianMvbGliL2NyZWF0ZUFycmF5RnJvbU1peGVkLmpzIiwid2VicGFjazovLy8uL34vZmJqcy9saWIvY3JlYXRlTm9kZXNGcm9tTWFya3VwLmpzIiwid2VicGFjazovLy8uL34vZmJqcy9saWIvZ2V0TWFya3VwV3JhcC5qcyIsIndlYnBhY2s6Ly8vLi9+L2ZianMvbGliL2dldFVuYm91bmRlZFNjcm9sbFBvc2l0aW9uLmpzIiwid2VicGFjazovLy8uL34vZmJqcy9saWIvaHlwaGVuYXRlLmpzIiwid2VicGFjazovLy8uL34vZmJqcy9saWIvaHlwaGVuYXRlU3R5bGVOYW1lLmpzIiwid2VicGFjazovLy8uL34vZmJqcy9saWIvaXNOb2RlLmpzIiwid2VicGFjazovLy8uL34vZmJqcy9saWIvaXNUZXh0Tm9kZS5qcyIsIndlYnBhY2s6Ly8vLi9+L2ZianMvbGliL21lbW9pemVTdHJpbmdPbmx5LmpzIiwid2VicGFjazovLy8uL34vZmJqcy9saWIvcGVyZm9ybWFuY2UuanMiLCJ3ZWJwYWNrOi8vLy4vfi9mYmpzL2xpYi9wZXJmb3JtYW5jZU5vdy5qcyIsIndlYnBhY2s6Ly8vLi9+L2hpc3RvcnkvY3JlYXRlQnJvd3Nlckhpc3RvcnkuanMiLCJ3ZWJwYWNrOi8vLy4vfi9oaXN0b3J5L2NyZWF0ZUhhc2hIaXN0b3J5LmpzIiwid2VicGFjazovLy8uL34vaGlzdG9yeS9jcmVhdGVNZW1vcnlIaXN0b3J5LmpzIiwid2VicGFjazovLy8uL34vbG9kYXNoLWVzL19iYXNlR2V0VGFnLmpzIiwid2VicGFjazovLy8uL34vbG9kYXNoLWVzL19mcmVlR2xvYmFsLmpzIiwid2VicGFjazovLy8uL34vbG9kYXNoLWVzL19nZXRQcm90b3R5cGUuanMiLCJ3ZWJwYWNrOi8vLy4vfi9sb2Rhc2gtZXMvX2dldFJhd1RhZy5qcyIsIndlYnBhY2s6Ly8vLi9+L2xvZGFzaC1lcy9fb2JqZWN0VG9TdHJpbmcuanMiLCJ3ZWJwYWNrOi8vLy4vfi9sb2Rhc2gtZXMvX292ZXJBcmcuanMiLCJ3ZWJwYWNrOi8vLy4vfi9sb2Rhc2gtZXMvX3Jvb3QuanMiLCJ3ZWJwYWNrOi8vLy4vfi9sb2Rhc2gtZXMvaXNPYmplY3RMaWtlLmpzIiwid2VicGFjazovLy8uL34vcHJvcC10eXBlcy9jaGVja1Byb3BUeXBlcy5qcyIsIndlYnBhY2s6Ly8vLi9+L3Byb3AtdHlwZXMvZmFjdG9yeVdpdGhUaHJvd2luZ1NoaW1zLmpzIiwid2VicGFjazovLy8uL34vcmVhY3QtZG9tL2xpYi9BUklBRE9NUHJvcGVydHlDb25maWcuanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFjdC1kb20vbGliL0F1dG9Gb2N1c1V0aWxzLmpzIiwid2VicGFjazovLy8uL34vcmVhY3QtZG9tL2xpYi9CZWZvcmVJbnB1dEV2ZW50UGx1Z2luLmpzIiwid2VicGFjazovLy8uL34vcmVhY3QtZG9tL2xpYi9DU1NQcm9wZXJ0eU9wZXJhdGlvbnMuanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFjdC1kb20vbGliL0NoYW5nZUV2ZW50UGx1Z2luLmpzIiwid2VicGFjazovLy8uL34vcmVhY3QtZG9tL2xpYi9EYW5nZXIuanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFjdC1kb20vbGliL0RlZmF1bHRFdmVudFBsdWdpbk9yZGVyLmpzIiwid2VicGFjazovLy8uL34vcmVhY3QtZG9tL2xpYi9FbnRlckxlYXZlRXZlbnRQbHVnaW4uanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFjdC1kb20vbGliL0ZhbGxiYWNrQ29tcG9zaXRpb25TdGF0ZS5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LWRvbS9saWIvSFRNTERPTVByb3BlcnR5Q29uZmlnLmpzIiwid2VicGFjazovLy8uL34vcmVhY3QtZG9tL2xpYi9SZWFjdENoaWxkUmVjb25jaWxlci5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LWRvbS9saWIvUmVhY3RDb21wb25lbnRCcm93c2VyRW52aXJvbm1lbnQuanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFjdC1kb20vbGliL1JlYWN0Q29tcG9zaXRlQ29tcG9uZW50LmpzIiwid2VicGFjazovLy8uL34vcmVhY3QtZG9tL2xpYi9SZWFjdERPTS5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LWRvbS9saWIvUmVhY3RET01Db21wb25lbnQuanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFjdC1kb20vbGliL1JlYWN0RE9NQ29udGFpbmVySW5mby5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LWRvbS9saWIvUmVhY3RET01FbXB0eUNvbXBvbmVudC5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LWRvbS9saWIvUmVhY3RET01GZWF0dXJlRmxhZ3MuanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFjdC1kb20vbGliL1JlYWN0RE9NSURPcGVyYXRpb25zLmpzIiwid2VicGFjazovLy8uL34vcmVhY3QtZG9tL2xpYi9SZWFjdERPTUlucHV0LmpzIiwid2VicGFjazovLy8uL34vcmVhY3QtZG9tL2xpYi9SZWFjdERPTUludmFsaWRBUklBSG9vay5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LWRvbS9saWIvUmVhY3RET01OdWxsSW5wdXRWYWx1ZVByb3BIb29rLmpzIiwid2VicGFjazovLy8uL34vcmVhY3QtZG9tL2xpYi9SZWFjdERPTU9wdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LWRvbS9saWIvUmVhY3RET01TZWxlY3Rpb24uanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFjdC1kb20vbGliL1JlYWN0RE9NVGV4dENvbXBvbmVudC5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LWRvbS9saWIvUmVhY3RET01UZXh0YXJlYS5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LWRvbS9saWIvUmVhY3RET01UcmVlVHJhdmVyc2FsLmpzIiwid2VicGFjazovLy8uL34vcmVhY3QtZG9tL2xpYi9SZWFjdERPTVVua25vd25Qcm9wZXJ0eUhvb2suanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFjdC1kb20vbGliL1JlYWN0RGVidWdUb29sLmpzIiwid2VicGFjazovLy8uL34vcmVhY3QtZG9tL2xpYi9SZWFjdERlZmF1bHRCYXRjaGluZ1N0cmF0ZWd5LmpzIiwid2VicGFjazovLy8uL34vcmVhY3QtZG9tL2xpYi9SZWFjdERlZmF1bHRJbmplY3Rpb24uanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFjdC1kb20vbGliL1JlYWN0RWxlbWVudFN5bWJvbC5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LWRvbS9saWIvUmVhY3RFdmVudEVtaXR0ZXJNaXhpbi5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LWRvbS9saWIvUmVhY3RFdmVudExpc3RlbmVyLmpzIiwid2VicGFjazovLy8uL34vcmVhY3QtZG9tL2xpYi9SZWFjdEhvc3RPcGVyYXRpb25IaXN0b3J5SG9vay5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LWRvbS9saWIvUmVhY3RJbmplY3Rpb24uanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFjdC1kb20vbGliL1JlYWN0SW52YWxpZFNldFN0YXRlV2FybmluZ0hvb2suanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFjdC1kb20vbGliL1JlYWN0TWFya3VwQ2hlY2tzdW0uanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFjdC1kb20vbGliL1JlYWN0TXVsdGlDaGlsZC5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LWRvbS9saWIvUmVhY3RPd25lci5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LWRvbS9saWIvUmVhY3RQcm9wVHlwZUxvY2F0aW9uTmFtZXMuanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFjdC1kb20vbGliL1JlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb24uanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFjdC1kb20vbGliL1JlYWN0UmVmLmpzIiwid2VicGFjazovLy8uL34vcmVhY3QtZG9tL2xpYi9SZWFjdFNlcnZlclJlbmRlcmluZ1RyYW5zYWN0aW9uLmpzIiwid2VicGFjazovLy8uL34vcmVhY3QtZG9tL2xpYi9SZWFjdFNlcnZlclVwZGF0ZVF1ZXVlLmpzIiwid2VicGFjazovLy8uL34vcmVhY3QtZG9tL2xpYi9SZWFjdFZlcnNpb24uanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFjdC1kb20vbGliL1NWR0RPTVByb3BlcnR5Q29uZmlnLmpzIiwid2VicGFjazovLy8uL34vcmVhY3QtZG9tL2xpYi9TZWxlY3RFdmVudFBsdWdpbi5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LWRvbS9saWIvU2ltcGxlRXZlbnRQbHVnaW4uanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFjdC1kb20vbGliL1N5bnRoZXRpY0FuaW1hdGlvbkV2ZW50LmpzIiwid2VicGFjazovLy8uL34vcmVhY3QtZG9tL2xpYi9TeW50aGV0aWNDbGlwYm9hcmRFdmVudC5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LWRvbS9saWIvU3ludGhldGljQ29tcG9zaXRpb25FdmVudC5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LWRvbS9saWIvU3ludGhldGljRHJhZ0V2ZW50LmpzIiwid2VicGFjazovLy8uL34vcmVhY3QtZG9tL2xpYi9TeW50aGV0aWNGb2N1c0V2ZW50LmpzIiwid2VicGFjazovLy8uL34vcmVhY3QtZG9tL2xpYi9TeW50aGV0aWNJbnB1dEV2ZW50LmpzIiwid2VicGFjazovLy8uL34vcmVhY3QtZG9tL2xpYi9TeW50aGV0aWNLZXlib2FyZEV2ZW50LmpzIiwid2VicGFjazovLy8uL34vcmVhY3QtZG9tL2xpYi9TeW50aGV0aWNUb3VjaEV2ZW50LmpzIiwid2VicGFjazovLy8uL34vcmVhY3QtZG9tL2xpYi9TeW50aGV0aWNUcmFuc2l0aW9uRXZlbnQuanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFjdC1kb20vbGliL1N5bnRoZXRpY1doZWVsRXZlbnQuanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFjdC1kb20vbGliL2FkbGVyMzIuanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFjdC1kb20vbGliL2NoZWNrUmVhY3RUeXBlU3BlYy5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LWRvbS9saWIvZGFuZ2Vyb3VzU3R5bGVWYWx1ZS5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LWRvbS9saWIvZmluZERPTU5vZGUuanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFjdC1kb20vbGliL2ZsYXR0ZW5DaGlsZHJlbi5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LWRvbS9saWIvZ2V0RXZlbnRLZXkuanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFjdC1kb20vbGliL2dldEl0ZXJhdG9yRm4uanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFjdC1kb20vbGliL2dldE5vZGVGb3JDaGFyYWN0ZXJPZmZzZXQuanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFjdC1kb20vbGliL2dldFZlbmRvclByZWZpeGVkRXZlbnROYW1lLmpzIiwid2VicGFjazovLy8uL34vcmVhY3QtZG9tL2xpYi9xdW90ZUF0dHJpYnV0ZVZhbHVlRm9yQnJvd3Nlci5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LWRvbS9saWIvcmVuZGVyU3VidHJlZUludG9Db250YWluZXIuanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFjdC1maWxlLWlucHV0L2xpYi9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LXJlZHV4L2VzL2NvbXBvbmVudHMvUHJvdmlkZXIuanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFjdC1yZWR1eC9lcy9jb25uZWN0L2Nvbm5lY3QuanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFjdC1yZWR1eC9lcy9jb25uZWN0L21hcERpc3BhdGNoVG9Qcm9wcy5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LXJlZHV4L2VzL2Nvbm5lY3QvbWFwU3RhdGVUb1Byb3BzLmpzIiwid2VicGFjazovLy8uL34vcmVhY3QtcmVkdXgvZXMvY29ubmVjdC9tZXJnZVByb3BzLmpzIiwid2VicGFjazovLy8uL34vcmVhY3QtcmVkdXgvZXMvY29ubmVjdC9zZWxlY3RvckZhY3RvcnkuanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFjdC1yZWR1eC9lcy9jb25uZWN0L3ZlcmlmeVN1YnNlbGVjdG9ycy5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LXJlZHV4L2VzL3V0aWxzL1N1YnNjcmlwdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LXJlZHV4L2VzL3V0aWxzL3NoYWxsb3dFcXVhbC5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LXJvdXRlci1kb20vZXMvQnJvd3NlclJvdXRlci5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LXJvdXRlci1kb20vZXMvSGFzaFJvdXRlci5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LXJvdXRlci1kb20vZXMvTWVtb3J5Um91dGVyLmpzIiwid2VicGFjazovLy8uL34vcmVhY3Qtcm91dGVyLWRvbS9lcy9OYXZMaW5rLmpzIiwid2VicGFjazovLy8uL34vcmVhY3Qtcm91dGVyLWRvbS9lcy9Qcm9tcHQuanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFjdC1yb3V0ZXItZG9tL2VzL1JlZGlyZWN0LmpzIiwid2VicGFjazovLy8uL34vcmVhY3Qtcm91dGVyLWRvbS9lcy9Sb3V0ZS5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LXJvdXRlci1kb20vZXMvUm91dGVyLmpzIiwid2VicGFjazovLy8uL34vcmVhY3Qtcm91dGVyLWRvbS9lcy9TdGF0aWNSb3V0ZXIuanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFjdC1yb3V0ZXItZG9tL2VzL1N3aXRjaC5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LXJvdXRlci1kb20vZXMvbWF0Y2hQYXRoLmpzIiwid2VicGFjazovLy8uL34vcmVhY3Qtcm91dGVyLWRvbS9lcy93aXRoUm91dGVyLmpzIiwid2VicGFjazovLy8uL34vcmVhY3Qtcm91dGVyL2VzL01lbW9yeVJvdXRlci5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LXJvdXRlci9lcy9Qcm9tcHQuanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFjdC1yb3V0ZXIvZXMvUmVkaXJlY3QuanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFjdC1yb3V0ZXIvZXMvU3RhdGljUm91dGVyLmpzIiwid2VicGFjazovLy8uL34vcmVhY3Qtcm91dGVyL2VzL1N3aXRjaC5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LXJvdXRlci9lcy93aXRoUm91dGVyLmpzIiwid2VicGFjazovLy8uL34vcmVhY3Qtcm91dGVyL34vaXNhcnJheS9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LXJvdXRlci9+L3BhdGgtdG8tcmVnZXhwL2luZGV4LmpzIiwid2VicGFjazovLy8uL34vcmVhY3QvbGliL0tleUVzY2FwZVV0aWxzLmpzIiwid2VicGFjazovLy8uL34vcmVhY3QvbGliL1Bvb2xlZENsYXNzLmpzIiwid2VicGFjazovLy8uL34vcmVhY3QvbGliL1JlYWN0Q2hpbGRyZW4uanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFjdC9saWIvUmVhY3RET01GYWN0b3JpZXMuanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFjdC9saWIvUmVhY3RQcm9wVHlwZUxvY2F0aW9uTmFtZXMuanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFjdC9saWIvUmVhY3RQcm9wVHlwZXMuanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFjdC9saWIvUmVhY3RQcm9wVHlwZXNTZWNyZXQuanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFjdC9saWIvUmVhY3RWZXJzaW9uLmpzIiwid2VicGFjazovLy8uL34vcmVhY3QvbGliL2NoZWNrUmVhY3RUeXBlU3BlYy5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0L2xpYi9jcmVhdGVDbGFzcy5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0L2xpYi9nZXROZXh0RGVidWdJRC5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0L2xpYi9vbmx5Q2hpbGQuanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFjdC9saWIvdHJhdmVyc2VBbGxDaGlsZHJlbi5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlZHV4L2VzL2FwcGx5TWlkZGxld2FyZS5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlZHV4L2VzL2JpbmRBY3Rpb25DcmVhdG9ycy5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlZHV4L2VzL2NvbWJpbmVSZWR1Y2Vycy5qcyIsIndlYnBhY2s6Ly8vLi9+L3Jlc29sdmUtcGF0aG5hbWUvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vfi9zeW1ib2wtb2JzZXJ2YWJsZS9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9+L3N5bWJvbC1vYnNlcnZhYmxlL2xpYi9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9+L3N5bWJvbC1vYnNlcnZhYmxlL2xpYi9wb255ZmlsbC5qcyIsIndlYnBhY2s6Ly8vLi9+L3ZhbHVlLWVxdWFsL2luZGV4LmpzIiwid2VicGFjazovLy8od2VicGFjaykvYnVpbGRpbi9tb2R1bGUuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvY29udGVudC9maWxlLWxpc3QuanN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL2NvbnRlbnQvZm9sZGVyLWxpc3QuanN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL2NvbnRlbnQvaXRlbS5qc3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvY29udGVudC9tdXNpYy1saXN0LmpzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9jb250ZW50L3Bob3RvLWxpc3QuanN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL2NvbnRlbnQvc2hhcmVkLWxpc3QuanN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL25hdmlnYXRpb24vYnJlYWRjcnVtYnMuanN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL25hdmlnYXRpb24vZGlzcGxheS1tZW51LmpzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9uYXZpZ2F0aW9uL3RvcC1uYXYuanN4Iiwid2VicGFjazovLy8uL3NyYy9pbmRleC5qc3giLCJ3ZWJwYWNrOi8vLy4vc3RhdGUuanMiXSwibmFtZXMiOlsicHJvY2VzcyIsIm1vZHVsZSIsImV4cG9ydHMiLCJjYWNoZWRTZXRUaW1lb3V0IiwiY2FjaGVkQ2xlYXJUaW1lb3V0IiwiZGVmYXVsdFNldFRpbW91dCIsIkVycm9yIiwiZGVmYXVsdENsZWFyVGltZW91dCIsInNldFRpbWVvdXQiLCJlIiwiY2xlYXJUaW1lb3V0IiwicnVuVGltZW91dCIsImZ1biIsImNhbGwiLCJydW5DbGVhclRpbWVvdXQiLCJtYXJrZXIiLCJxdWV1ZSIsImRyYWluaW5nIiwiY3VycmVudFF1ZXVlIiwicXVldWVJbmRleCIsImNsZWFuVXBOZXh0VGljayIsImxlbmd0aCIsImNvbmNhdCIsImRyYWluUXVldWUiLCJ0aW1lb3V0IiwibGVuIiwicnVuIiwibmV4dFRpY2siLCJhcmdzIiwiQXJyYXkiLCJhcmd1bWVudHMiLCJpIiwicHVzaCIsIkl0ZW0iLCJhcnJheSIsInByb3RvdHlwZSIsImFwcGx5IiwidGl0bGUiLCJicm93c2VyIiwiZW52IiwiYXJndiIsInZlcnNpb24iLCJ2ZXJzaW9ucyIsIm5vb3AiLCJvbiIsImFkZExpc3RlbmVyIiwib25jZSIsIm9mZiIsInJlbW92ZUxpc3RlbmVyIiwicmVtb3ZlQWxsTGlzdGVuZXJzIiwiZW1pdCIsInByZXBlbmRMaXN0ZW5lciIsInByZXBlbmRPbmNlTGlzdGVuZXIiLCJsaXN0ZW5lcnMiLCJuYW1lIiwiYmluZGluZyIsImN3ZCIsImNoZGlyIiwiZGlyIiwidW1hc2siLCJ2YWxpZGF0ZUZvcm1hdCIsImZvcm1hdCIsIk5PREVfRU5WIiwidW5kZWZpbmVkIiwiaW52YXJpYW50IiwiY29uZGl0aW9uIiwiYSIsImIiLCJjIiwiZCIsImYiLCJlcnJvciIsImFyZ0luZGV4IiwicmVwbGFjZSIsImZyYW1lc1RvUG9wIiwiZW1wdHlGdW5jdGlvbiIsInJlcXVpcmUiLCJ3YXJuaW5nIiwicHJpbnRXYXJuaW5nIiwiX2xlbiIsIl9rZXkiLCJtZXNzYWdlIiwiY29uc29sZSIsIngiLCJpbmRleE9mIiwiX2xlbjIiLCJfa2V5MiIsInJlYWN0UHJvZEludmFyaWFudCIsImNvZGUiLCJhcmdDb3VudCIsImFyZ0lkeCIsImVuY29kZVVSSUNvbXBvbmVudCIsImdldE93blByb3BlcnR5U3ltYm9scyIsIk9iamVjdCIsImhhc093blByb3BlcnR5IiwicHJvcElzRW51bWVyYWJsZSIsInByb3BlcnR5SXNFbnVtZXJhYmxlIiwidG9PYmplY3QiLCJ2YWwiLCJUeXBlRXJyb3IiLCJzaG91bGRVc2VOYXRpdmUiLCJhc3NpZ24iLCJ0ZXN0MSIsIlN0cmluZyIsImdldE93blByb3BlcnR5TmFtZXMiLCJ0ZXN0MiIsImZyb21DaGFyQ29kZSIsIm9yZGVyMiIsIm1hcCIsIm4iLCJqb2luIiwidGVzdDMiLCJzcGxpdCIsImZvckVhY2giLCJsZXR0ZXIiLCJrZXlzIiwiZXJyIiwidGFyZ2V0Iiwic291cmNlIiwiZnJvbSIsInRvIiwic3ltYm9scyIsInMiLCJrZXkiLCJfcHJvZEludmFyaWFudCIsIkRPTVByb3BlcnR5IiwiUmVhY3RET01Db21wb25lbnRGbGFncyIsIkFUVFJfTkFNRSIsIklEX0FUVFJJQlVURV9OQU1FIiwiRmxhZ3MiLCJpbnRlcm5hbEluc3RhbmNlS2V5IiwiTWF0aCIsInJhbmRvbSIsInRvU3RyaW5nIiwic2xpY2UiLCJzaG91bGRQcmVjYWNoZU5vZGUiLCJub2RlIiwibm9kZUlEIiwibm9kZVR5cGUiLCJnZXRBdHRyaWJ1dGUiLCJub2RlVmFsdWUiLCJnZXRSZW5kZXJlZEhvc3RPclRleHRGcm9tQ29tcG9uZW50IiwiY29tcG9uZW50IiwicmVuZGVyZWQiLCJfcmVuZGVyZWRDb21wb25lbnQiLCJwcmVjYWNoZU5vZGUiLCJpbnN0IiwiaG9zdEluc3QiLCJfaG9zdE5vZGUiLCJ1bmNhY2hlTm9kZSIsInByZWNhY2hlQ2hpbGROb2RlcyIsIl9mbGFncyIsImhhc0NhY2hlZENoaWxkTm9kZXMiLCJjaGlsZHJlbiIsIl9yZW5kZXJlZENoaWxkcmVuIiwiY2hpbGROb2RlIiwiZmlyc3RDaGlsZCIsIm91dGVyIiwiY2hpbGRJbnN0IiwiY2hpbGRJRCIsIl9kb21JRCIsIm5leHRTaWJsaW5nIiwiZ2V0Q2xvc2VzdEluc3RhbmNlRnJvbU5vZGUiLCJwYXJlbnRzIiwicGFyZW50Tm9kZSIsImNsb3Nlc3QiLCJwb3AiLCJnZXRJbnN0YW5jZUZyb21Ob2RlIiwiZ2V0Tm9kZUZyb21JbnN0YW5jZSIsIl9ob3N0UGFyZW50IiwiUmVhY3RET01Db21wb25lbnRUcmVlIiwiY2FuVXNlRE9NIiwid2luZG93IiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50IiwiRXhlY3V0aW9uRW52aXJvbm1lbnQiLCJjYW5Vc2VXb3JrZXJzIiwiV29ya2VyIiwiY2FuVXNlRXZlbnRMaXN0ZW5lcnMiLCJhZGRFdmVudExpc3RlbmVyIiwiYXR0YWNoRXZlbnQiLCJjYW5Vc2VWaWV3cG9ydCIsInNjcmVlbiIsImlzSW5Xb3JrZXIiLCJSRUFDVF9FTEVNRU5UX1RZUEUiLCJTeW1ib2wiLCJmb3IiLCJpc1ZhbGlkRWxlbWVudCIsIm9iamVjdCIsIiQkdHlwZW9mIiwidGhyb3dPbkRpcmVjdEFjY2VzcyIsIlJlYWN0Q3VycmVudE93bmVyIiwiaXNOYXRpdmUiLCJmbiIsImZ1bmNUb1N0cmluZyIsIkZ1bmN0aW9uIiwicmVJc05hdGl2ZSIsIlJlZ0V4cCIsInRlc3QiLCJjYW5Vc2VDb2xsZWN0aW9ucyIsIk1hcCIsIlNldCIsInNldEl0ZW0iLCJnZXRJdGVtIiwicmVtb3ZlSXRlbSIsImdldEl0ZW1JRHMiLCJhZGRSb290IiwicmVtb3ZlUm9vdCIsImdldFJvb3RJRHMiLCJpdGVtTWFwIiwicm9vdElEU2V0IiwiaWQiLCJpdGVtIiwic2V0IiwiZ2V0IiwiYWRkIiwiaXRlbUJ5S2V5Iiwicm9vdEJ5S2V5IiwiZ2V0S2V5RnJvbUlEIiwiZ2V0SURGcm9tS2V5IiwicGFyc2VJbnQiLCJzdWJzdHIiLCJ1bm1vdW50ZWRJRHMiLCJwdXJnZURlZXAiLCJjaGlsZElEcyIsImRlc2NyaWJlQ29tcG9uZW50RnJhbWUiLCJvd25lck5hbWUiLCJmaWxlTmFtZSIsImxpbmVOdW1iZXIiLCJnZXREaXNwbGF5TmFtZSIsImVsZW1lbnQiLCJ0eXBlIiwiZGlzcGxheU5hbWUiLCJkZXNjcmliZUlEIiwiUmVhY3RDb21wb25lbnRUcmVlSG9vayIsImdldEVsZW1lbnQiLCJvd25lcklEIiwiZ2V0T3duZXJJRCIsIl9zb3VyY2UiLCJvblNldENoaWxkcmVuIiwibmV4dENoaWxkSURzIiwibmV4dENoaWxkSUQiLCJuZXh0Q2hpbGQiLCJpc01vdW50ZWQiLCJwYXJlbnRJRCIsIm9uQmVmb3JlTW91bnRDb21wb25lbnQiLCJ0ZXh0IiwidXBkYXRlQ291bnQiLCJvbkJlZm9yZVVwZGF0ZUNvbXBvbmVudCIsIm9uTW91bnRDb21wb25lbnQiLCJpc1Jvb3QiLCJvblVwZGF0ZUNvbXBvbmVudCIsIm9uVW5tb3VudENvbXBvbmVudCIsInB1cmdlVW5tb3VudGVkQ29tcG9uZW50cyIsIl9wcmV2ZW50UHVyZ2luZyIsImdldEN1cnJlbnRTdGFja0FkZGVuZHVtIiwidG9wRWxlbWVudCIsImluZm8iLCJvd25lciIsIl9vd25lciIsImdldE5hbWUiLCJjdXJyZW50T3duZXIiLCJjdXJyZW50IiwiX2RlYnVnSUQiLCJnZXRTdGFja0FkZGVuZHVtQnlJRCIsImdldFBhcmVudElEIiwiZ2V0Q2hpbGRJRHMiLCJnZXRTb3VyY2UiLCJnZXRUZXh0IiwiZ2V0VXBkYXRlQ291bnQiLCJnZXRSZWdpc3RlcmVkSURzIiwicHVzaE5vblN0YW5kYXJkV2FybmluZ1N0YWNrIiwiaXNDcmVhdGluZ0VsZW1lbnQiLCJjdXJyZW50U291cmNlIiwicmVhY3RTdGFjayIsInN0YWNrIiwicG9wTm9uU3RhbmRhcmRXYXJuaW5nU3RhY2siLCJyZWFjdFN0YWNrRW5kIiwibWFrZUVtcHR5RnVuY3Rpb24iLCJhcmciLCJ0aGF0UmV0dXJucyIsInRoYXRSZXR1cm5zRmFsc2UiLCJ0aGF0UmV0dXJuc1RydWUiLCJ0aGF0UmV0dXJuc051bGwiLCJ0aGF0UmV0dXJuc1RoaXMiLCJ0aGF0UmV0dXJuc0FyZ3VtZW50IiwiZGVidWdUb29sIiwiUmVhY3REZWJ1Z1Rvb2wiLCJNZW1vcnlSb3V0ZXIiLCJQcm9tcHQiLCJSZWRpcmVjdCIsIlJvdXRlIiwiUm91dGVyIiwiU3RhdGljUm91dGVyIiwiU3dpdGNoIiwibWF0Y2hQYXRoIiwid2l0aFJvdXRlciIsIlByb3ZpZGVyIiwiY3JlYXRlUHJvdmlkZXIiLCJjb25uZWN0QWR2YW5jZWQiLCJjb25uZWN0IiwiX2Fzc2lnbiIsIkNhbGxiYWNrUXVldWUiLCJQb29sZWRDbGFzcyIsIlJlYWN0RmVhdHVyZUZsYWdzIiwiUmVhY3RSZWNvbmNpbGVyIiwiVHJhbnNhY3Rpb24iLCJkaXJ0eUNvbXBvbmVudHMiLCJ1cGRhdGVCYXRjaE51bWJlciIsImFzYXBDYWxsYmFja1F1ZXVlIiwiZ2V0UG9vbGVkIiwiYXNhcEVucXVldWVkIiwiYmF0Y2hpbmdTdHJhdGVneSIsImVuc3VyZUluamVjdGVkIiwiUmVhY3RVcGRhdGVzIiwiUmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvbiIsIk5FU1RFRF9VUERBVEVTIiwiaW5pdGlhbGl6ZSIsImRpcnR5Q29tcG9uZW50c0xlbmd0aCIsImNsb3NlIiwic3BsaWNlIiwiZmx1c2hCYXRjaGVkVXBkYXRlcyIsIlVQREFURV9RVUVVRUlORyIsImNhbGxiYWNrUXVldWUiLCJyZXNldCIsIm5vdGlmeUFsbCIsIlRSQU5TQUNUSU9OX1dSQVBQRVJTIiwiUmVhY3RVcGRhdGVzRmx1c2hUcmFuc2FjdGlvbiIsInJlaW5pdGlhbGl6ZVRyYW5zYWN0aW9uIiwicmVjb25jaWxlVHJhbnNhY3Rpb24iLCJnZXRUcmFuc2FjdGlvbldyYXBwZXJzIiwiZGVzdHJ1Y3RvciIsInJlbGVhc2UiLCJwZXJmb3JtIiwibWV0aG9kIiwic2NvcGUiLCJhZGRQb29saW5nVG8iLCJiYXRjaGVkVXBkYXRlcyIsImNhbGxiYWNrIiwibW91bnRPcmRlckNvbXBhcmF0b3IiLCJjMSIsImMyIiwiX21vdW50T3JkZXIiLCJydW5CYXRjaGVkVXBkYXRlcyIsInRyYW5zYWN0aW9uIiwic29ydCIsImNhbGxiYWNrcyIsIl9wZW5kaW5nQ2FsbGJhY2tzIiwibWFya2VyTmFtZSIsImxvZ1RvcExldmVsUmVuZGVycyIsIm5hbWVkQ29tcG9uZW50IiwiX2N1cnJlbnRFbGVtZW50IiwiaXNSZWFjdFRvcExldmVsV3JhcHBlciIsInRpbWUiLCJwZXJmb3JtVXBkYXRlSWZOZWNlc3NhcnkiLCJ0aW1lRW5kIiwiaiIsImVucXVldWUiLCJnZXRQdWJsaWNJbnN0YW5jZSIsImVucXVldWVVcGRhdGUiLCJpc0JhdGNoaW5nVXBkYXRlcyIsIl91cGRhdGVCYXRjaE51bWJlciIsImFzYXAiLCJjb250ZXh0IiwiUmVhY3RVcGRhdGVzSW5qZWN0aW9uIiwiaW5qZWN0UmVjb25jaWxlVHJhbnNhY3Rpb24iLCJSZWNvbmNpbGVUcmFuc2FjdGlvbiIsImluamVjdEJhdGNoaW5nU3RyYXRlZ3kiLCJfYmF0Y2hpbmdTdHJhdGVneSIsImluamVjdGlvbiIsImRpZFdhcm5Gb3JBZGRlZE5ld1Byb3BlcnR5IiwiaXNQcm94eVN1cHBvcnRlZCIsIlByb3h5Iiwic2hvdWxkQmVSZWxlYXNlZFByb3BlcnRpZXMiLCJFdmVudEludGVyZmFjZSIsImN1cnJlbnRUYXJnZXQiLCJldmVudFBoYXNlIiwiYnViYmxlcyIsImNhbmNlbGFibGUiLCJ0aW1lU3RhbXAiLCJldmVudCIsIkRhdGUiLCJub3ciLCJkZWZhdWx0UHJldmVudGVkIiwiaXNUcnVzdGVkIiwiU3ludGhldGljRXZlbnQiLCJkaXNwYXRjaENvbmZpZyIsInRhcmdldEluc3QiLCJuYXRpdmVFdmVudCIsIm5hdGl2ZUV2ZW50VGFyZ2V0IiwicHJldmVudERlZmF1bHQiLCJzdG9wUHJvcGFnYXRpb24iLCJfdGFyZ2V0SW5zdCIsIkludGVyZmFjZSIsImNvbnN0cnVjdG9yIiwicHJvcE5hbWUiLCJub3JtYWxpemUiLCJyZXR1cm5WYWx1ZSIsImlzRGVmYXVsdFByZXZlbnRlZCIsImlzUHJvcGFnYXRpb25TdG9wcGVkIiwiY2FuY2VsQnViYmxlIiwicGVyc2lzdCIsImlzUGVyc2lzdGVudCIsImRlZmluZVByb3BlcnR5IiwiZ2V0UG9vbGVkV2FybmluZ1Byb3BlcnR5RGVmaW5pdGlvbiIsImNvbnN0cnVjdCIsImNyZWF0ZSIsInRoYXQiLCJwcm9wIiwidmFsdWUiLCJhdWdtZW50Q2xhc3MiLCJDbGFzcyIsIlN1cGVyIiwiRSIsImZvdXJBcmd1bWVudFBvb2xlciIsImdldFZhbCIsImlzRnVuY3Rpb24iLCJjb25maWd1cmFibGUiLCJhY3Rpb24iLCJ3YXJuIiwicmVzdWx0Iiwid2FybmluZ0NvbmRpdGlvbiIsImNoZWNrTWFzayIsImJpdG1hc2siLCJET01Qcm9wZXJ0eUluamVjdGlvbiIsIk1VU1RfVVNFX1BST1BFUlRZIiwiSEFTX0JPT0xFQU5fVkFMVUUiLCJIQVNfTlVNRVJJQ19WQUxVRSIsIkhBU19QT1NJVElWRV9OVU1FUklDX1ZBTFVFIiwiSEFTX09WRVJMT0FERURfQk9PTEVBTl9WQUxVRSIsImluamVjdERPTVByb3BlcnR5Q29uZmlnIiwiZG9tUHJvcGVydHlDb25maWciLCJJbmplY3Rpb24iLCJQcm9wZXJ0aWVzIiwiRE9NQXR0cmlidXRlTmFtZXNwYWNlcyIsIkRPTUF0dHJpYnV0ZU5hbWVzIiwiRE9NUHJvcGVydHlOYW1lcyIsIkRPTU11dGF0aW9uTWV0aG9kcyIsImlzQ3VzdG9tQXR0cmlidXRlIiwiX2lzQ3VzdG9tQXR0cmlidXRlRnVuY3Rpb25zIiwicHJvcGVydGllcyIsImxvd2VyQ2FzZWQiLCJ0b0xvd2VyQ2FzZSIsInByb3BDb25maWciLCJwcm9wZXJ0eUluZm8iLCJhdHRyaWJ1dGVOYW1lIiwiYXR0cmlidXRlTmFtZXNwYWNlIiwicHJvcGVydHlOYW1lIiwibXV0YXRpb25NZXRob2QiLCJtdXN0VXNlUHJvcGVydHkiLCJoYXNCb29sZWFuVmFsdWUiLCJoYXNOdW1lcmljVmFsdWUiLCJoYXNQb3NpdGl2ZU51bWVyaWNWYWx1ZSIsImhhc092ZXJsb2FkZWRCb29sZWFuVmFsdWUiLCJnZXRQb3NzaWJsZVN0YW5kYXJkTmFtZSIsIkFUVFJJQlVURV9OQU1FX1NUQVJUX0NIQVIiLCJST09UX0FUVFJJQlVURV9OQU1FIiwiQVRUUklCVVRFX05BTUVfQ0hBUiIsImF1dG9mb2N1cyIsImlzQ3VzdG9tQXR0cmlidXRlRm4iLCJvbmVBcmd1bWVudFBvb2xlciIsImNvcHlGaWVsZHNGcm9tIiwiS2xhc3MiLCJpbnN0YW5jZVBvb2wiLCJpbnN0YW5jZSIsInR3b0FyZ3VtZW50UG9vbGVyIiwiYTEiLCJhMiIsInRocmVlQXJndW1lbnRQb29sZXIiLCJhMyIsImE0Iiwic3RhbmRhcmRSZWxlYXNlciIsInBvb2xTaXplIiwiREVGQVVMVF9QT09MX1NJWkUiLCJERUZBVUxUX1BPT0xFUiIsIkNvcHlDb25zdHJ1Y3RvciIsInBvb2xlciIsIk5ld0tsYXNzIiwiY2FuRGVmaW5lUHJvcGVydHkiLCJSRVNFUlZFRF9QUk9QUyIsInJlZiIsIl9fc2VsZiIsIl9fc291cmNlIiwic3BlY2lhbFByb3BLZXlXYXJuaW5nU2hvd24iLCJzcGVjaWFsUHJvcFJlZldhcm5pbmdTaG93biIsImhhc1ZhbGlkUmVmIiwiY29uZmlnIiwiZ2V0dGVyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiaXNSZWFjdFdhcm5pbmciLCJoYXNWYWxpZEtleSIsImRlZmluZUtleVByb3BXYXJuaW5nR2V0dGVyIiwicHJvcHMiLCJ3YXJuQWJvdXRBY2Nlc3NpbmdLZXkiLCJkZWZpbmVSZWZQcm9wV2FybmluZ0dldHRlciIsIndhcm5BYm91dEFjY2Vzc2luZ1JlZiIsIlJlYWN0RWxlbWVudCIsInNlbGYiLCJfc3RvcmUiLCJlbnVtZXJhYmxlIiwid3JpdGFibGUiLCJ2YWxpZGF0ZWQiLCJfc2VsZiIsImZyZWV6ZSIsImNoaWxkcmVuTGVuZ3RoIiwiY2hpbGRBcnJheSIsImRlZmF1bHRQcm9wcyIsImNyZWF0ZUZhY3RvcnkiLCJmYWN0b3J5IiwiYmluZCIsImNsb25lQW5kUmVwbGFjZUtleSIsIm9sZEVsZW1lbnQiLCJuZXdLZXkiLCJuZXdFbGVtZW50IiwiY2xvbmVFbGVtZW50IiwiRE9NTmFtZXNwYWNlcyIsInNldElubmVySFRNTCIsImNyZWF0ZU1pY3Jvc29mdFVuc2FmZUxvY2FsRnVuY3Rpb24iLCJzZXRUZXh0Q29udGVudCIsIkVMRU1FTlRfTk9ERV9UWVBFIiwiRE9DVU1FTlRfRlJBR01FTlRfTk9ERV9UWVBFIiwiZW5hYmxlTGF6eSIsImRvY3VtZW50TW9kZSIsIm5hdmlnYXRvciIsInVzZXJBZ2VudCIsImluc2VydFRyZWVDaGlsZHJlbiIsInRyZWUiLCJpbnNlcnRUcmVlQmVmb3JlIiwiaHRtbCIsInJlZmVyZW5jZU5vZGUiLCJub2RlTmFtZSIsIm5hbWVzcGFjZVVSSSIsImluc2VydEJlZm9yZSIsInJlcGxhY2VDaGlsZFdpdGhUcmVlIiwib2xkTm9kZSIsIm5ld1RyZWUiLCJyZXBsYWNlQ2hpbGQiLCJxdWV1ZUNoaWxkIiwicGFyZW50VHJlZSIsImNoaWxkVHJlZSIsImFwcGVuZENoaWxkIiwicXVldWVIVE1MIiwicXVldWVUZXh0IiwiRE9NTGF6eVRyZWUiLCJSZWFjdFJlZiIsIlJlYWN0SW5zdHJ1bWVudGF0aW9uIiwiYXR0YWNoUmVmcyIsIm1vdW50Q29tcG9uZW50IiwiaW50ZXJuYWxJbnN0YW5jZSIsImhvc3RQYXJlbnQiLCJob3N0Q29udGFpbmVySW5mbyIsInBhcmVudERlYnVnSUQiLCJtYXJrdXAiLCJnZXRSZWFjdE1vdW50UmVhZHkiLCJnZXRIb3N0Tm9kZSIsInVubW91bnRDb21wb25lbnQiLCJzYWZlbHkiLCJvbkJlZm9yZVVubW91bnRDb21wb25lbnQiLCJkZXRhY2hSZWZzIiwicmVjZWl2ZUNvbXBvbmVudCIsIm5leHRFbGVtZW50IiwicHJldkVsZW1lbnQiLCJfY29udGV4dCIsInJlZnNDaGFuZ2VkIiwic2hvdWxkVXBkYXRlUmVmcyIsIlJlYWN0QmFzZUNsYXNzZXMiLCJSZWFjdENoaWxkcmVuIiwiUmVhY3RET01GYWN0b3JpZXMiLCJSZWFjdFByb3BUeXBlcyIsIlJlYWN0VmVyc2lvbiIsImNyZWF0ZVJlYWN0Q2xhc3MiLCJvbmx5Q2hpbGQiLCJsb3dQcmlvcml0eVdhcm5pbmciLCJSZWFjdEVsZW1lbnRWYWxpZGF0b3IiLCJkaWRXYXJuUHJvcFR5cGVzRGVwcmVjYXRlZCIsIl9fc3ByZWFkIiwiY3JlYXRlTWl4aW4iLCJtaXhpbiIsIndhcm5lZEZvclNwcmVhZCIsIndhcm5lZEZvckNyZWF0ZU1peGluIiwiUmVhY3QiLCJDaGlsZHJlbiIsImNvdW50IiwidG9BcnJheSIsIm9ubHkiLCJDb21wb25lbnQiLCJQdXJlQ29tcG9uZW50IiwiUHJvcFR5cGVzIiwiY3JlYXRlQ2xhc3MiLCJET00iLCJ3YXJuZWRGb3JDcmVhdGVDbGFzcyIsIndhcm5lZEZvckZhY3RvcmllcyIsIl9fZXNNb2R1bGUiLCJhZGRMZWFkaW5nU2xhc2giLCJwYXRoIiwiY2hhckF0Iiwic3RyaXBMZWFkaW5nU2xhc2giLCJoYXNCYXNlbmFtZSIsInByZWZpeCIsInN0cmlwQmFzZW5hbWUiLCJzdHJpcFRyYWlsaW5nU2xhc2giLCJwYXJzZVBhdGgiLCJwYXRobmFtZSIsInNlYXJjaCIsImhhc2giLCJoYXNoSW5kZXgiLCJzZWFyY2hJbmRleCIsImNyZWF0ZVBhdGgiLCJsb2NhdGlvbiIsIkV2ZW50UGx1Z2luUmVnaXN0cnkiLCJFdmVudFBsdWdpblV0aWxzIiwiUmVhY3RFcnJvclV0aWxzIiwiYWNjdW11bGF0ZUludG8iLCJmb3JFYWNoQWNjdW11bGF0ZWQiLCJsaXN0ZW5lckJhbmsiLCJldmVudFF1ZXVlIiwiZXhlY3V0ZURpc3BhdGNoZXNBbmRSZWxlYXNlIiwic2ltdWxhdGVkIiwiZXhlY3V0ZURpc3BhdGNoZXNJbk9yZGVyIiwiZXhlY3V0ZURpc3BhdGNoZXNBbmRSZWxlYXNlU2ltdWxhdGVkIiwiZXhlY3V0ZURpc3BhdGNoZXNBbmRSZWxlYXNlVG9wTGV2ZWwiLCJnZXREaWN0aW9uYXJ5S2V5IiwiX3Jvb3ROb2RlSUQiLCJpc0ludGVyYWN0aXZlIiwidGFnIiwic2hvdWxkUHJldmVudE1vdXNlRXZlbnQiLCJkaXNhYmxlZCIsIkV2ZW50UGx1Z2luSHViIiwiaW5qZWN0RXZlbnRQbHVnaW5PcmRlciIsImluamVjdEV2ZW50UGx1Z2luc0J5TmFtZSIsInB1dExpc3RlbmVyIiwicmVnaXN0cmF0aW9uTmFtZSIsImxpc3RlbmVyIiwiYmFua0ZvclJlZ2lzdHJhdGlvbk5hbWUiLCJQbHVnaW5Nb2R1bGUiLCJyZWdpc3RyYXRpb25OYW1lTW9kdWxlcyIsImRpZFB1dExpc3RlbmVyIiwiZ2V0TGlzdGVuZXIiLCJkZWxldGVMaXN0ZW5lciIsIndpbGxEZWxldGVMaXN0ZW5lciIsImRlbGV0ZUFsbExpc3RlbmVycyIsImV4dHJhY3RFdmVudHMiLCJ0b3BMZXZlbFR5cGUiLCJldmVudHMiLCJwbHVnaW5zIiwicG9zc2libGVQbHVnaW4iLCJleHRyYWN0ZWRFdmVudHMiLCJlbnF1ZXVlRXZlbnRzIiwicHJvY2Vzc0V2ZW50UXVldWUiLCJwcm9jZXNzaW5nRXZlbnRRdWV1ZSIsInJldGhyb3dDYXVnaHRFcnJvciIsIl9fcHVyZ2UiLCJfX2dldExpc3RlbmVyQmFuayIsImxpc3RlbmVyQXRQaGFzZSIsInByb3BhZ2F0aW9uUGhhc2UiLCJwaGFzZWRSZWdpc3RyYXRpb25OYW1lcyIsImFjY3VtdWxhdGVEaXJlY3Rpb25hbERpc3BhdGNoZXMiLCJwaGFzZSIsIl9kaXNwYXRjaExpc3RlbmVycyIsIl9kaXNwYXRjaEluc3RhbmNlcyIsImFjY3VtdWxhdGVUd29QaGFzZURpc3BhdGNoZXNTaW5nbGUiLCJ0cmF2ZXJzZVR3b1BoYXNlIiwiYWNjdW11bGF0ZVR3b1BoYXNlRGlzcGF0Y2hlc1NpbmdsZVNraXBUYXJnZXQiLCJwYXJlbnRJbnN0IiwiZ2V0UGFyZW50SW5zdGFuY2UiLCJhY2N1bXVsYXRlRGlzcGF0Y2hlcyIsImlnbm9yZWREaXJlY3Rpb24iLCJhY2N1bXVsYXRlRGlyZWN0RGlzcGF0Y2hlc1NpbmdsZSIsImFjY3VtdWxhdGVUd29QaGFzZURpc3BhdGNoZXMiLCJhY2N1bXVsYXRlVHdvUGhhc2VEaXNwYXRjaGVzU2tpcFRhcmdldCIsImFjY3VtdWxhdGVFbnRlckxlYXZlRGlzcGF0Y2hlcyIsImxlYXZlIiwiZW50ZXIiLCJ0cmF2ZXJzZUVudGVyTGVhdmUiLCJhY2N1bXVsYXRlRGlyZWN0RGlzcGF0Y2hlcyIsIkV2ZW50UHJvcGFnYXRvcnMiLCJSZWFjdEluc3RhbmNlTWFwIiwicmVtb3ZlIiwiX3JlYWN0SW50ZXJuYWxJbnN0YW5jZSIsImhhcyIsImdldEV2ZW50VGFyZ2V0IiwiVUlFdmVudEludGVyZmFjZSIsInZpZXciLCJkb2MiLCJvd25lckRvY3VtZW50IiwiZGVmYXVsdFZpZXciLCJwYXJlbnRXaW5kb3ciLCJkZXRhaWwiLCJTeW50aGV0aWNVSUV2ZW50IiwiZGlzcGF0Y2hNYXJrZXIiLCJJdGVtTGlzdCIsIml0ZW1zIiwiaGVhZGVyRXh0cmFzIiwiaGFuZGxlSXRlbUNsaWNrIiwiZWxlbWVudHMiLCJpZHgiLCJlbXB0eU9iamVjdCIsImV2ZW50UGx1Z2luT3JkZXIiLCJuYW1lc1RvUGx1Z2lucyIsInJlY29tcHV0ZVBsdWdpbk9yZGVyaW5nIiwicGx1Z2luTmFtZSIsInBsdWdpbk1vZHVsZSIsInBsdWdpbkluZGV4IiwicHVibGlzaGVkRXZlbnRzIiwiZXZlbnRUeXBlcyIsImV2ZW50TmFtZSIsInB1Ymxpc2hFdmVudEZvclBsdWdpbiIsImV2ZW50TmFtZURpc3BhdGNoQ29uZmlncyIsInBoYXNlTmFtZSIsInBoYXNlZFJlZ2lzdHJhdGlvbk5hbWUiLCJwdWJsaXNoUmVnaXN0cmF0aW9uTmFtZSIsInJlZ2lzdHJhdGlvbk5hbWVEZXBlbmRlbmNpZXMiLCJkZXBlbmRlbmNpZXMiLCJsb3dlckNhc2VkTmFtZSIsInBvc3NpYmxlUmVnaXN0cmF0aW9uTmFtZXMiLCJvbmRibGNsaWNrIiwiaW5qZWN0ZWRFdmVudFBsdWdpbk9yZGVyIiwiaW5qZWN0ZWROYW1lc1RvUGx1Z2lucyIsImlzT3JkZXJpbmdEaXJ0eSIsImdldFBsdWdpbk1vZHVsZUZvckV2ZW50IiwiX3Jlc2V0RXZlbnRQbHVnaW5zIiwiUmVhY3RFdmVudEVtaXR0ZXJNaXhpbiIsIlZpZXdwb3J0TWV0cmljcyIsImdldFZlbmRvclByZWZpeGVkRXZlbnROYW1lIiwiaXNFdmVudFN1cHBvcnRlZCIsImhhc0V2ZW50UGFnZVhZIiwiYWxyZWFkeUxpc3RlbmluZ1RvIiwiaXNNb25pdG9yaW5nU2Nyb2xsVmFsdWUiLCJyZWFjdFRvcExpc3RlbmVyc0NvdW50ZXIiLCJ0b3BFdmVudE1hcHBpbmciLCJ0b3BBYm9ydCIsInRvcEFuaW1hdGlvbkVuZCIsInRvcEFuaW1hdGlvbkl0ZXJhdGlvbiIsInRvcEFuaW1hdGlvblN0YXJ0IiwidG9wQmx1ciIsInRvcENhblBsYXkiLCJ0b3BDYW5QbGF5VGhyb3VnaCIsInRvcENoYW5nZSIsInRvcENsaWNrIiwidG9wQ29tcG9zaXRpb25FbmQiLCJ0b3BDb21wb3NpdGlvblN0YXJ0IiwidG9wQ29tcG9zaXRpb25VcGRhdGUiLCJ0b3BDb250ZXh0TWVudSIsInRvcENvcHkiLCJ0b3BDdXQiLCJ0b3BEb3VibGVDbGljayIsInRvcERyYWciLCJ0b3BEcmFnRW5kIiwidG9wRHJhZ0VudGVyIiwidG9wRHJhZ0V4aXQiLCJ0b3BEcmFnTGVhdmUiLCJ0b3BEcmFnT3ZlciIsInRvcERyYWdTdGFydCIsInRvcERyb3AiLCJ0b3BEdXJhdGlvbkNoYW5nZSIsInRvcEVtcHRpZWQiLCJ0b3BFbmNyeXB0ZWQiLCJ0b3BFbmRlZCIsInRvcEVycm9yIiwidG9wRm9jdXMiLCJ0b3BJbnB1dCIsInRvcEtleURvd24iLCJ0b3BLZXlQcmVzcyIsInRvcEtleVVwIiwidG9wTG9hZGVkRGF0YSIsInRvcExvYWRlZE1ldGFkYXRhIiwidG9wTG9hZFN0YXJ0IiwidG9wTW91c2VEb3duIiwidG9wTW91c2VNb3ZlIiwidG9wTW91c2VPdXQiLCJ0b3BNb3VzZU92ZXIiLCJ0b3BNb3VzZVVwIiwidG9wUGFzdGUiLCJ0b3BQYXVzZSIsInRvcFBsYXkiLCJ0b3BQbGF5aW5nIiwidG9wUHJvZ3Jlc3MiLCJ0b3BSYXRlQ2hhbmdlIiwidG9wU2Nyb2xsIiwidG9wU2Vla2VkIiwidG9wU2Vla2luZyIsInRvcFNlbGVjdGlvbkNoYW5nZSIsInRvcFN0YWxsZWQiLCJ0b3BTdXNwZW5kIiwidG9wVGV4dElucHV0IiwidG9wVGltZVVwZGF0ZSIsInRvcFRvdWNoQ2FuY2VsIiwidG9wVG91Y2hFbmQiLCJ0b3BUb3VjaE1vdmUiLCJ0b3BUb3VjaFN0YXJ0IiwidG9wVHJhbnNpdGlvbkVuZCIsInRvcFZvbHVtZUNoYW5nZSIsInRvcFdhaXRpbmciLCJ0b3BXaGVlbCIsInRvcExpc3RlbmVyc0lES2V5IiwiZ2V0TGlzdGVuaW5nRm9yRG9jdW1lbnQiLCJtb3VudEF0IiwiUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyIiwiUmVhY3RFdmVudExpc3RlbmVyIiwiaW5qZWN0UmVhY3RFdmVudExpc3RlbmVyIiwic2V0SGFuZGxlVG9wTGV2ZWwiLCJoYW5kbGVUb3BMZXZlbCIsInNldEVuYWJsZWQiLCJlbmFibGVkIiwiaXNFbmFibGVkIiwibGlzdGVuVG8iLCJjb250ZW50RG9jdW1lbnRIYW5kbGUiLCJpc0xpc3RlbmluZyIsImRlcGVuZGVuY3kiLCJ0cmFwQnViYmxlZEV2ZW50IiwidHJhcENhcHR1cmVkRXZlbnQiLCJXSU5ET1dfSEFORExFIiwiaGFuZGxlckJhc2VOYW1lIiwiaGFuZGxlIiwic3VwcG9ydHNFdmVudFBhZ2VYWSIsImNyZWF0ZUV2ZW50IiwiZXYiLCJlbnN1cmVTY3JvbGxWYWx1ZU1vbml0b3JpbmciLCJyZWZyZXNoIiwicmVmcmVzaFNjcm9sbFZhbHVlcyIsIm1vbml0b3JTY3JvbGxWYWx1ZSIsImdldEV2ZW50TW9kaWZpZXJTdGF0ZSIsIk1vdXNlRXZlbnRJbnRlcmZhY2UiLCJzY3JlZW5YIiwic2NyZWVuWSIsImNsaWVudFgiLCJjbGllbnRZIiwiY3RybEtleSIsInNoaWZ0S2V5IiwiYWx0S2V5IiwibWV0YUtleSIsImdldE1vZGlmaWVyU3RhdGUiLCJidXR0b24iLCJidXR0b25zIiwicmVsYXRlZFRhcmdldCIsImZyb21FbGVtZW50Iiwic3JjRWxlbWVudCIsInRvRWxlbWVudCIsInBhZ2VYIiwiY3VycmVudFNjcm9sbExlZnQiLCJwYWdlWSIsImN1cnJlbnRTY3JvbGxUb3AiLCJTeW50aGV0aWNNb3VzZUV2ZW50IiwiT0JTRVJWRURfRVJST1IiLCJUcmFuc2FjdGlvbkltcGwiLCJ0cmFuc2FjdGlvbldyYXBwZXJzIiwid3JhcHBlckluaXREYXRhIiwiX2lzSW5UcmFuc2FjdGlvbiIsImlzSW5UcmFuc2FjdGlvbiIsImVycm9yVGhyb3duIiwicmV0IiwiaW5pdGlhbGl6ZUFsbCIsImNsb3NlQWxsIiwic3RhcnRJbmRleCIsIndyYXBwZXIiLCJpbml0RGF0YSIsIm1hdGNoSHRtbFJlZ0V4cCIsImVzY2FwZUh0bWwiLCJzdHJpbmciLCJzdHIiLCJtYXRjaCIsImV4ZWMiLCJlc2NhcGUiLCJpbmRleCIsImxhc3RJbmRleCIsImNoYXJDb2RlQXQiLCJzdWJzdHJpbmciLCJlc2NhcGVUZXh0Q29udGVudEZvckJyb3dzZXIiLCJXSElURVNQQUNFX1RFU1QiLCJOT05WSVNJQkxFX1RFU1QiLCJyZXVzYWJsZVNWR0NvbnRhaW5lciIsInN2ZyIsImlubmVySFRNTCIsInN2Z05vZGUiLCJ0ZXN0RWxlbWVudCIsInRleHROb2RlIiwiZGF0YSIsInJlbW92ZUNoaWxkIiwiZGVsZXRlRGF0YSIsImlzIiwieSIsInNoYWxsb3dFcXVhbCIsIm9iakEiLCJvYmpCIiwia2V5c0EiLCJrZXlzQiIsImxvY2F0aW9uc0FyZUVxdWFsIiwiY3JlYXRlTG9jYXRpb24iLCJfZXh0ZW5kcyIsIl9yZXNvbHZlUGF0aG5hbWUiLCJfcmVzb2x2ZVBhdGhuYW1lMiIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfdmFsdWVFcXVhbCIsIl92YWx1ZUVxdWFsMiIsIl9QYXRoVXRpbHMiLCJvYmoiLCJkZWZhdWx0Iiwic3RhdGUiLCJjdXJyZW50TG9jYXRpb24iLCJkZWNvZGVVUkkiLCJVUklFcnJvciIsIl93YXJuaW5nIiwiX3dhcm5pbmcyIiwiY3JlYXRlVHJhbnNpdGlvbk1hbmFnZXIiLCJwcm9tcHQiLCJzZXRQcm9tcHQiLCJuZXh0UHJvbXB0IiwiY29uZmlybVRyYW5zaXRpb25UbyIsImdldFVzZXJDb25maXJtYXRpb24iLCJhcHBlbmRMaXN0ZW5lciIsImlzQWN0aXZlIiwiZmlsdGVyIiwibm90aWZ5TGlzdGVuZXJzIiwib2JqZWN0VGFnIiwiZnVuY1Byb3RvIiwib2JqZWN0UHJvdG8iLCJvYmplY3RDdG9yU3RyaW5nIiwiaXNQbGFpbk9iamVjdCIsInByb3RvIiwiQ3RvciIsIlJlYWN0UHJvcFR5cGVzU2VjcmV0IiwiRGFuZ2VyIiwiZ2V0Tm9kZUFmdGVyIiwiaXNBcnJheSIsImluc2VydENoaWxkQXQiLCJpbnNlcnRMYXp5VHJlZUNoaWxkQXQiLCJtb3ZlQ2hpbGQiLCJtb3ZlRGVsaW1pdGVkVGV4dCIsImNsb3NpbmdDb21tZW50IiwicmVtb3ZlRGVsaW1pdGVkVGV4dCIsIm9wZW5pbmdDb21tZW50IiwibmV4dE5vZGUiLCJzdGFydE5vZGUiLCJyZXBsYWNlRGVsaW1pdGVkVGV4dCIsInN0cmluZ1RleHQiLCJub2RlQWZ0ZXJDb21tZW50IiwiY3JlYXRlVGV4dE5vZGUiLCJvbkhvc3RPcGVyYXRpb24iLCJpbnN0YW5jZUlEIiwicGF5bG9hZCIsImRhbmdlcm91c2x5UmVwbGFjZU5vZGVXaXRoTWFya3VwIiwib2xkQ2hpbGQiLCJwcmV2SW5zdGFuY2UiLCJuZXh0SW5zdGFuY2UiLCJET01DaGlsZHJlbk9wZXJhdGlvbnMiLCJwcm9jZXNzVXBkYXRlcyIsInVwZGF0ZXMiLCJwYXJlbnROb2RlRGVidWdJRCIsImsiLCJ1cGRhdGUiLCJjb250ZW50IiwiYWZ0ZXJOb2RlIiwidG9JbmRleCIsImZyb21Ob2RlIiwiZnJvbUluZGV4IiwibWF0aG1sIiwiQ29tcG9uZW50VHJlZSIsIlRyZWVUcmF2ZXJzYWwiLCJpbmplY3RDb21wb25lbnRUcmVlIiwiSW5qZWN0ZWQiLCJpbmplY3RUcmVlVHJhdmVyc2FsIiwiaXNBbmNlc3RvciIsImdldExvd2VzdENvbW1vbkFuY2VzdG9yIiwiaXNFbmRpc2giLCJpc01vdmVpc2giLCJpc1N0YXJ0aXNoIiwidmFsaWRhdGVFdmVudERpc3BhdGNoZXMiLCJkaXNwYXRjaExpc3RlbmVycyIsImRpc3BhdGNoSW5zdGFuY2VzIiwibGlzdGVuZXJzSXNBcnIiLCJsaXN0ZW5lcnNMZW4iLCJpbnN0YW5jZXNJc0FyciIsImluc3RhbmNlc0xlbiIsImV4ZWN1dGVEaXNwYXRjaCIsImludm9rZUd1YXJkZWRDYWxsYmFja1dpdGhDYXRjaCIsImludm9rZUd1YXJkZWRDYWxsYmFjayIsImV4ZWN1dGVEaXNwYXRjaGVzSW5PcmRlclN0b3BBdFRydWVJbXBsIiwiZXhlY3V0ZURpc3BhdGNoZXNJbk9yZGVyU3RvcEF0VHJ1ZSIsImV4ZWN1dGVEaXJlY3REaXNwYXRjaCIsImRpc3BhdGNoTGlzdGVuZXIiLCJkaXNwYXRjaEluc3RhbmNlIiwicmVzIiwiaGFzRGlzcGF0Y2hlcyIsImFyZ0Zyb20iLCJhcmdUbyIsImVzY2FwZVJlZ2V4IiwiZXNjYXBlckxvb2t1cCIsImVzY2FwZWRTdHJpbmciLCJ1bmVzY2FwZSIsInVuZXNjYXBlUmVnZXgiLCJ1bmVzY2FwZXJMb29rdXAiLCJrZXlTdWJzdHJpbmciLCJLZXlFc2NhcGVVdGlscyIsInByb3BUeXBlc0ZhY3RvcnkiLCJoYXNSZWFkT25seVZhbHVlIiwiY2hlY2tib3giLCJpbWFnZSIsImhpZGRlbiIsInJhZGlvIiwic3VibWl0IiwiX2Fzc2VydFNpbmdsZUxpbmsiLCJpbnB1dFByb3BzIiwiY2hlY2tlZExpbmsiLCJ2YWx1ZUxpbmsiLCJfYXNzZXJ0VmFsdWVMaW5rIiwib25DaGFuZ2UiLCJfYXNzZXJ0Q2hlY2tlZExpbmsiLCJjaGVja2VkIiwicHJvcFR5cGVzIiwiY29tcG9uZW50TmFtZSIsInJlYWRPbmx5IiwiZnVuYyIsImxvZ2dlZFR5cGVGYWlsdXJlcyIsImdldERlY2xhcmF0aW9uRXJyb3JBZGRlbmR1bSIsIkxpbmtlZFZhbHVlVXRpbHMiLCJjaGVja1Byb3BUeXBlcyIsInRhZ05hbWUiLCJhZGRlbmR1bSIsImdldFZhbHVlIiwiZ2V0Q2hlY2tlZCIsImV4ZWN1dGVPbkNoYW5nZSIsInJlcXVlc3RDaGFuZ2UiLCJpbmplY3RlZCIsIlJlYWN0Q29tcG9uZW50RW52aXJvbm1lbnQiLCJyZXBsYWNlTm9kZVdpdGhNYXJrdXAiLCJwcm9jZXNzQ2hpbGRyZW5VcGRhdGVzIiwiaW5qZWN0RW52aXJvbm1lbnQiLCJlbnZpcm9ubWVudCIsImNhdWdodEVycm9yIiwiZGlzcGF0Y2hFdmVudCIsImZha2VOb2RlIiwiYm91bmRGdW5jIiwiZXZ0VHlwZSIsImV2dCIsImluaXRFdmVudCIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJmb3JtYXRVbmV4cGVjdGVkQXJndW1lbnQiLCJnZXRJbnRlcm5hbEluc3RhbmNlUmVhZHlGb3JVcGRhdGUiLCJwdWJsaWNJbnN0YW5jZSIsImNhbGxlck5hbWUiLCJjdG9yIiwiUmVhY3RVcGRhdGVRdWV1ZSIsIl93YXJuZWRBYm91dFJlZnNJblJlbmRlciIsImVucXVldWVDYWxsYmFjayIsInZhbGlkYXRlQ2FsbGJhY2siLCJlbnF1ZXVlQ2FsbGJhY2tJbnRlcm5hbCIsImVucXVldWVGb3JjZVVwZGF0ZSIsIl9wZW5kaW5nRm9yY2VVcGRhdGUiLCJlbnF1ZXVlUmVwbGFjZVN0YXRlIiwiY29tcGxldGVTdGF0ZSIsIl9wZW5kaW5nU3RhdGVRdWV1ZSIsIl9wZW5kaW5nUmVwbGFjZVN0YXRlIiwiZW5xdWV1ZVNldFN0YXRlIiwicGFydGlhbFN0YXRlIiwib25TZXRTdGF0ZSIsImVucXVldWVFbGVtZW50SW50ZXJuYWwiLCJuZXh0Q29udGV4dCIsIl9wZW5kaW5nRWxlbWVudCIsIk1TQXBwIiwiZXhlY1Vuc2FmZUxvY2FsRnVuY3Rpb24iLCJhcmcwIiwiYXJnMSIsImFyZzIiLCJhcmczIiwiZ2V0RXZlbnRDaGFyQ29kZSIsImNoYXJDb2RlIiwia2V5Q29kZSIsIm1vZGlmaWVyS2V5VG9Qcm9wIiwiQWx0IiwiQ29udHJvbCIsIk1ldGEiLCJTaGlmdCIsIm1vZGlmaWVyU3RhdGVHZXR0ZXIiLCJrZXlBcmciLCJzeW50aGV0aWNFdmVudCIsImtleVByb3AiLCJjb3JyZXNwb25kaW5nVXNlRWxlbWVudCIsInVzZUhhc0ZlYXR1cmUiLCJpbXBsZW1lbnRhdGlvbiIsImhhc0ZlYXR1cmUiLCJldmVudE5hbWVTdWZmaXgiLCJjYXB0dXJlIiwiaXNTdXBwb3J0ZWQiLCJzZXRBdHRyaWJ1dGUiLCJzaG91bGRVcGRhdGVSZWFjdENvbXBvbmVudCIsInByZXZFbXB0eSIsIm5leHRFbXB0eSIsInByZXZUeXBlIiwibmV4dFR5cGUiLCJ2YWxpZGF0ZURPTU5lc3RpbmciLCJzcGVjaWFsVGFncyIsImluU2NvcGVUYWdzIiwiYnV0dG9uU2NvcGVUYWdzIiwiaW1wbGllZEVuZFRhZ3MiLCJlbXB0eUFuY2VzdG9ySW5mbyIsImZvcm1UYWciLCJhVGFnSW5TY29wZSIsImJ1dHRvblRhZ0luU2NvcGUiLCJub2JyVGFnSW5TY29wZSIsInBUYWdJbkJ1dHRvblNjb3BlIiwibGlzdEl0ZW1UYWdBdXRvY2xvc2luZyIsImRsSXRlbVRhZ0F1dG9jbG9zaW5nIiwidXBkYXRlZEFuY2VzdG9ySW5mbyIsIm9sZEluZm8iLCJhbmNlc3RvckluZm8iLCJpc1RhZ1ZhbGlkV2l0aFBhcmVudCIsInBhcmVudFRhZyIsImZpbmRJbnZhbGlkQW5jZXN0b3JGb3JUYWciLCJmaW5kT3duZXJTdGFjayIsInJldmVyc2UiLCJkaWRXYXJuIiwiY2hpbGRUYWciLCJjaGlsZFRleHQiLCJjaGlsZEluc3RhbmNlIiwicGFyZW50SW5mbyIsImludmFsaWRQYXJlbnQiLCJpbnZhbGlkQW5jZXN0b3IiLCJwcm9ibGVtYXRpYyIsImFuY2VzdG9yVGFnIiwiYW5jZXN0b3JJbnN0YW5jZSIsImNoaWxkT3duZXIiLCJhbmNlc3Rvck93bmVyIiwiY2hpbGRPd25lcnMiLCJhbmNlc3Rvck93bmVycyIsIm1pblN0YWNrTGVuIiwibWluIiwiZGVlcGVzdENvbW1vbiIsIlVOS05PV04iLCJjaGlsZE93bmVyTmFtZXMiLCJhbmNlc3Rvck93bmVyTmFtZXMiLCJvd25lckluZm8iLCJ3YXJuS2V5IiwidGFnRGlzcGxheU5hbWUiLCJ3aGl0ZXNwYWNlSW5mbyIsImlzVGFnVmFsaWRJbkNvbnRleHQiLCJfY2xhc3NDYWxsQ2hlY2siLCJDb25zdHJ1Y3RvciIsIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwiUmVmZXJlbmNlRXJyb3IiLCJfaW5oZXJpdHMiLCJzdWJDbGFzcyIsInN1cGVyQ2xhc3MiLCJzZXRQcm90b3R5cGVPZiIsIl9fcHJvdG9fXyIsIl9SZWFjdCRDb21wb25lbnQiLCJfdGVtcCIsIl90aGlzIiwiX3JldCIsImNvbXB1dGVNYXRjaCIsImhpc3RvcnkiLCJnZXRDaGlsZENvbnRleHQiLCJyb3V0ZXIiLCJyb3V0ZSIsInVybCIsInBhcmFtcyIsImlzRXhhY3QiLCJjb21wb25lbnRXaWxsTW91bnQiLCJfdGhpczIiLCJfcHJvcHMiLCJ1bmxpc3RlbiIsImxpc3RlbiIsInNldFN0YXRlIiwiY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyIsIm5leHRQcm9wcyIsImNvbXBvbmVudFdpbGxVbm1vdW50IiwicmVuZGVyIiwiaXNSZXF1aXJlZCIsImNvbnRleHRUeXBlcyIsImNoaWxkQ29udGV4dFR5cGVzIiwicGF0dGVybkNhY2hlIiwiY2FjaGVMaW1pdCIsImNhY2hlQ291bnQiLCJjb21waWxlUGF0aCIsInBhdHRlcm4iLCJvcHRpb25zIiwiY2FjaGVLZXkiLCJlbmQiLCJzdHJpY3QiLCJjYWNoZSIsInJlIiwiY29tcGlsZWRQYXR0ZXJuIiwiX29wdGlvbnMiLCJfb3B0aW9ucyRwYXRoIiwiX29wdGlvbnMkZXhhY3QiLCJleGFjdCIsIl9vcHRpb25zJHN0cmljdCIsIl9jb21waWxlUGF0aCIsInZhbHVlcyIsInJlZHVjZSIsIm1lbW8iLCJpc0NydXNoZWQiLCJjcmVhdGVTdG9yZSIsImNvbWJpbmVSZWR1Y2VycyIsImJpbmRBY3Rpb25DcmVhdG9ycyIsImFwcGx5TWlkZGxld2FyZSIsImNvbXBvc2UiLCJFdmVudExpc3RlbmVyIiwiZXZlbnRUeXBlIiwiZGV0YWNoRXZlbnQiLCJyZWdpc3RlckRlZmF1bHQiLCJmb2N1c05vZGUiLCJmb2N1cyIsImdldEFjdGl2ZUVsZW1lbnQiLCJhY3RpdmVFbGVtZW50IiwiYm9keSIsImdldENvbmZpcm1hdGlvbiIsImNvbmZpcm0iLCJzdXBwb3J0c0hpc3RvcnkiLCJ1YSIsInN1cHBvcnRzUG9wU3RhdGVPbkhhc2hDaGFuZ2UiLCJzdXBwb3J0c0dvV2l0aG91dFJlbG9hZFVzaW5nSGFzaCIsImlzRXh0cmFuZW91c1BvcHN0YXRlRXZlbnQiLCJSRUFDVF9TVEFUSUNTIiwiZ2V0RGVmYXVsdFByb3BzIiwibWl4aW5zIiwiS05PV05fU1RBVElDUyIsImNhbGxlciIsImFyaXR5IiwiaXNHZXRPd25Qcm9wZXJ0eVN5bWJvbHNBdmFpbGFibGUiLCJob2lzdE5vblJlYWN0U3RhdGljcyIsInRhcmdldENvbXBvbmVudCIsInNvdXJjZUNvbXBvbmVudCIsImN1c3RvbVN0YXRpY3MiLCJJVEVSQVRPUl9TWU1CT0wiLCJpdGVyYXRvciIsIkZBVVhfSVRFUkFUT1JfU1lNQk9MIiwiZ2V0SXRlcmF0b3JGbiIsIm1heWJlSXRlcmFibGUiLCJpdGVyYXRvckZuIiwiQU5PTllNT1VTIiwiY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIiLCJib29sIiwibnVtYmVyIiwic3ltYm9sIiwiYW55IiwiY3JlYXRlQW55VHlwZUNoZWNrZXIiLCJhcnJheU9mIiwiY3JlYXRlQXJyYXlPZlR5cGVDaGVja2VyIiwiY3JlYXRlRWxlbWVudFR5cGVDaGVja2VyIiwiaW5zdGFuY2VPZiIsImNyZWF0ZUluc3RhbmNlVHlwZUNoZWNrZXIiLCJjcmVhdGVOb2RlQ2hlY2tlciIsIm9iamVjdE9mIiwiY3JlYXRlT2JqZWN0T2ZUeXBlQ2hlY2tlciIsIm9uZU9mIiwiY3JlYXRlRW51bVR5cGVDaGVja2VyIiwib25lT2ZUeXBlIiwiY3JlYXRlVW5pb25UeXBlQ2hlY2tlciIsInNoYXBlIiwiY3JlYXRlU2hhcGVUeXBlQ2hlY2tlciIsIlByb3BUeXBlRXJyb3IiLCJjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlciIsInZhbGlkYXRlIiwibWFudWFsUHJvcFR5cGVDYWxsQ2FjaGUiLCJtYW51YWxQcm9wVHlwZVdhcm5pbmdDb3VudCIsImNoZWNrVHlwZSIsInByb3BGdWxsTmFtZSIsInNlY3JldCIsImNoYWluZWRDaGVja1R5cGUiLCJleHBlY3RlZFR5cGUiLCJwcm9wVmFsdWUiLCJwcm9wVHlwZSIsImdldFByb3BUeXBlIiwicHJlY2lzZVR5cGUiLCJnZXRQcmVjaXNlVHlwZSIsInR5cGVDaGVja2VyIiwiZXhwZWN0ZWRDbGFzcyIsImV4cGVjdGVkQ2xhc3NOYW1lIiwiYWN0dWFsQ2xhc3NOYW1lIiwiZ2V0Q2xhc3NOYW1lIiwiZXhwZWN0ZWRWYWx1ZXMiLCJ2YWx1ZXNTdHJpbmciLCJKU09OIiwic3RyaW5naWZ5IiwiYXJyYXlPZlR5cGVDaGVja2VycyIsImNoZWNrZXIiLCJnZXRQb3N0Zml4Rm9yVHlwZVdhcm5pbmciLCJpc05vZGUiLCJzaGFwZVR5cGVzIiwiZXZlcnkiLCJzdGVwIiwiZW50cmllcyIsIm5leHQiLCJkb25lIiwiZW50cnkiLCJpc1N5bWJvbCIsImlzVW5pdGxlc3NOdW1iZXIiLCJhbmltYXRpb25JdGVyYXRpb25Db3VudCIsImJvcmRlckltYWdlT3V0c2V0IiwiYm9yZGVySW1hZ2VTbGljZSIsImJvcmRlckltYWdlV2lkdGgiLCJib3hGbGV4IiwiYm94RmxleEdyb3VwIiwiYm94T3JkaW5hbEdyb3VwIiwiY29sdW1uQ291bnQiLCJmbGV4IiwiZmxleEdyb3ciLCJmbGV4UG9zaXRpdmUiLCJmbGV4U2hyaW5rIiwiZmxleE5lZ2F0aXZlIiwiZmxleE9yZGVyIiwiZ3JpZFJvdyIsImdyaWRSb3dFbmQiLCJncmlkUm93U3BhbiIsImdyaWRSb3dTdGFydCIsImdyaWRDb2x1bW4iLCJncmlkQ29sdW1uRW5kIiwiZ3JpZENvbHVtblNwYW4iLCJncmlkQ29sdW1uU3RhcnQiLCJmb250V2VpZ2h0IiwibGluZUNsYW1wIiwibGluZUhlaWdodCIsIm9wYWNpdHkiLCJvcmRlciIsIm9ycGhhbnMiLCJ0YWJTaXplIiwid2lkb3dzIiwiekluZGV4Iiwiem9vbSIsImZpbGxPcGFjaXR5IiwiZmxvb2RPcGFjaXR5Iiwic3RvcE9wYWNpdHkiLCJzdHJva2VEYXNoYXJyYXkiLCJzdHJva2VEYXNob2Zmc2V0Iiwic3Ryb2tlTWl0ZXJsaW1pdCIsInN0cm9rZU9wYWNpdHkiLCJzdHJva2VXaWR0aCIsInByZWZpeEtleSIsInRvVXBwZXJDYXNlIiwicHJlZml4ZXMiLCJzaG9ydGhhbmRQcm9wZXJ0eUV4cGFuc2lvbnMiLCJiYWNrZ3JvdW5kIiwiYmFja2dyb3VuZEF0dGFjaG1lbnQiLCJiYWNrZ3JvdW5kQ29sb3IiLCJiYWNrZ3JvdW5kSW1hZ2UiLCJiYWNrZ3JvdW5kUG9zaXRpb25YIiwiYmFja2dyb3VuZFBvc2l0aW9uWSIsImJhY2tncm91bmRSZXBlYXQiLCJiYWNrZ3JvdW5kUG9zaXRpb24iLCJib3JkZXIiLCJib3JkZXJXaWR0aCIsImJvcmRlclN0eWxlIiwiYm9yZGVyQ29sb3IiLCJib3JkZXJCb3R0b20iLCJib3JkZXJCb3R0b21XaWR0aCIsImJvcmRlckJvdHRvbVN0eWxlIiwiYm9yZGVyQm90dG9tQ29sb3IiLCJib3JkZXJMZWZ0IiwiYm9yZGVyTGVmdFdpZHRoIiwiYm9yZGVyTGVmdFN0eWxlIiwiYm9yZGVyTGVmdENvbG9yIiwiYm9yZGVyUmlnaHQiLCJib3JkZXJSaWdodFdpZHRoIiwiYm9yZGVyUmlnaHRTdHlsZSIsImJvcmRlclJpZ2h0Q29sb3IiLCJib3JkZXJUb3AiLCJib3JkZXJUb3BXaWR0aCIsImJvcmRlclRvcFN0eWxlIiwiYm9yZGVyVG9wQ29sb3IiLCJmb250IiwiZm9udFN0eWxlIiwiZm9udFZhcmlhbnQiLCJmb250U2l6ZSIsImZvbnRGYW1pbHkiLCJvdXRsaW5lIiwib3V0bGluZVdpZHRoIiwib3V0bGluZVN0eWxlIiwib3V0bGluZUNvbG9yIiwiQ1NTUHJvcGVydHkiLCJfY2FsbGJhY2tzIiwiX2NvbnRleHRzIiwiX2FyZyIsImNvbnRleHRzIiwiY2hlY2twb2ludCIsInJvbGxiYWNrIiwicXVvdGVBdHRyaWJ1dGVWYWx1ZUZvckJyb3dzZXIiLCJWQUxJRF9BVFRSSUJVVEVfTkFNRV9SRUdFWCIsImlsbGVnYWxBdHRyaWJ1dGVOYW1lQ2FjaGUiLCJ2YWxpZGF0ZWRBdHRyaWJ1dGVOYW1lQ2FjaGUiLCJpc0F0dHJpYnV0ZU5hbWVTYWZlIiwic2hvdWxkSWdub3JlVmFsdWUiLCJpc05hTiIsIkRPTVByb3BlcnR5T3BlcmF0aW9ucyIsImNyZWF0ZU1hcmt1cEZvcklEIiwic2V0QXR0cmlidXRlRm9ySUQiLCJjcmVhdGVNYXJrdXBGb3JSb290Iiwic2V0QXR0cmlidXRlRm9yUm9vdCIsImNyZWF0ZU1hcmt1cEZvclByb3BlcnR5IiwiY3JlYXRlTWFya3VwRm9yQ3VzdG9tQXR0cmlidXRlIiwic2V0VmFsdWVGb3JQcm9wZXJ0eSIsImRlbGV0ZVZhbHVlRm9yUHJvcGVydHkiLCJuYW1lc3BhY2UiLCJzZXRBdHRyaWJ1dGVOUyIsInNldFZhbHVlRm9yQXR0cmlidXRlIiwicmVtb3ZlQXR0cmlidXRlIiwiZGVsZXRlVmFsdWVGb3JBdHRyaWJ1dGUiLCJkaWRXYXJuVmFsdWVMaW5rIiwiZGlkV2FyblZhbHVlRGVmYXVsdFZhbHVlIiwidXBkYXRlT3B0aW9uc0lmUGVuZGluZ1VwZGF0ZUFuZE1vdW50ZWQiLCJfd3JhcHBlclN0YXRlIiwicGVuZGluZ1VwZGF0ZSIsInVwZGF0ZU9wdGlvbnMiLCJCb29sZWFuIiwibXVsdGlwbGUiLCJ2YWx1ZVByb3BOYW1lcyIsImNoZWNrU2VsZWN0UHJvcFR5cGVzIiwic2VsZWN0ZWRWYWx1ZSIsInNlbGVjdGVkIiwiUmVhY3RET01TZWxlY3QiLCJnZXRIb3N0UHJvcHMiLCJtb3VudFdyYXBwZXIiLCJpbml0aWFsVmFsdWUiLCJkZWZhdWx0VmFsdWUiLCJfaGFuZGxlQ2hhbmdlIiwid2FzTXVsdGlwbGUiLCJnZXRTZWxlY3RWYWx1ZUNvbnRleHQiLCJwb3N0VXBkYXRlV3JhcHBlciIsImVtcHR5Q29tcG9uZW50RmFjdG9yeSIsIlJlYWN0RW1wdHlDb21wb25lbnRJbmplY3Rpb24iLCJpbmplY3RFbXB0eUNvbXBvbmVudEZhY3RvcnkiLCJSZWFjdEVtcHR5Q29tcG9uZW50IiwiaW5zdGFudGlhdGUiLCJnZW5lcmljQ29tcG9uZW50Q2xhc3MiLCJ0ZXh0Q29tcG9uZW50Q2xhc3MiLCJSZWFjdEhvc3RDb21wb25lbnRJbmplY3Rpb24iLCJpbmplY3RHZW5lcmljQ29tcG9uZW50Q2xhc3MiLCJjb21wb25lbnRDbGFzcyIsImluamVjdFRleHRDb21wb25lbnRDbGFzcyIsImNyZWF0ZUludGVybmFsQ29tcG9uZW50IiwiY3JlYXRlSW5zdGFuY2VGb3JUZXh0IiwiaXNUZXh0Q29tcG9uZW50IiwiUmVhY3RIb3N0Q29tcG9uZW50IiwiUmVhY3RET01TZWxlY3Rpb24iLCJjb250YWluc05vZGUiLCJpc0luRG9jdW1lbnQiLCJkb2N1bWVudEVsZW1lbnQiLCJSZWFjdElucHV0U2VsZWN0aW9uIiwiaGFzU2VsZWN0aW9uQ2FwYWJpbGl0aWVzIiwiZWxlbSIsImNvbnRlbnRFZGl0YWJsZSIsImdldFNlbGVjdGlvbkluZm9ybWF0aW9uIiwiZm9jdXNlZEVsZW0iLCJzZWxlY3Rpb25SYW5nZSIsImdldFNlbGVjdGlvbiIsInJlc3RvcmVTZWxlY3Rpb24iLCJwcmlvclNlbGVjdGlvbkluZm9ybWF0aW9uIiwiY3VyRm9jdXNlZEVsZW0iLCJwcmlvckZvY3VzZWRFbGVtIiwicHJpb3JTZWxlY3Rpb25SYW5nZSIsInNldFNlbGVjdGlvbiIsImlucHV0Iiwic2VsZWN0aW9uIiwic3RhcnQiLCJzZWxlY3Rpb25TdGFydCIsInNlbGVjdGlvbkVuZCIsInJhbmdlIiwiY3JlYXRlUmFuZ2UiLCJwYXJlbnRFbGVtZW50IiwibW92ZVN0YXJ0IiwibW92ZUVuZCIsImdldE9mZnNldHMiLCJvZmZzZXRzIiwiY3JlYXRlVGV4dFJhbmdlIiwiY29sbGFwc2UiLCJzZWxlY3QiLCJzZXRPZmZzZXRzIiwiUmVhY3RET01Db250YWluZXJJbmZvIiwiUmVhY3RET01GZWF0dXJlRmxhZ3MiLCJSZWFjdE1hcmt1cENoZWNrc3VtIiwiaW5zdGFudGlhdGVSZWFjdENvbXBvbmVudCIsIlJPT1RfQVRUUl9OQU1FIiwiRE9DX05PREVfVFlQRSIsImluc3RhbmNlc0J5UmVhY3RSb290SUQiLCJmaXJzdERpZmZlcmVuY2VJbmRleCIsInN0cmluZzEiLCJzdHJpbmcyIiwibWluTGVuIiwiZ2V0UmVhY3RSb290RWxlbWVudEluQ29udGFpbmVyIiwiY29udGFpbmVyIiwiaW50ZXJuYWxHZXRJRCIsIm1vdW50Q29tcG9uZW50SW50b05vZGUiLCJ3cmFwcGVySW5zdGFuY2UiLCJzaG91bGRSZXVzZU1hcmt1cCIsIndyYXBwZWRFbGVtZW50IiwiY2hpbGQiLCJfdG9wTGV2ZWxXcmFwcGVyIiwiUmVhY3RNb3VudCIsIl9tb3VudEltYWdlSW50b05vZGUiLCJiYXRjaGVkTW91bnRDb21wb25lbnRJbnRvTm9kZSIsImNvbXBvbmVudEluc3RhbmNlIiwidXNlQ3JlYXRlRWxlbWVudCIsInVubW91bnRDb21wb25lbnRGcm9tTm9kZSIsIm9uQmVnaW5GbHVzaCIsIm9uRW5kRmx1c2giLCJsYXN0Q2hpbGQiLCJoYXNOb25Sb290UmVhY3RDaGlsZCIsInJvb3RFbCIsIm5vZGVJc1JlbmRlcmVkQnlPdGhlckluc3RhbmNlIiwiaXNSZWFjdE5vZGUiLCJpc1ZhbGlkQ29udGFpbmVyIiwiaGFzQXR0cmlidXRlIiwiZ2V0SG9zdFJvb3RJbnN0YW5jZUluQ29udGFpbmVyIiwicHJldkhvc3RJbnN0YW5jZSIsImdldFRvcExldmVsV3JhcHBlckluQ29udGFpbmVyIiwicm9vdCIsIl9ob3N0Q29udGFpbmVySW5mbyIsInRvcExldmVsUm9vdENvdW50ZXIiLCJUb3BMZXZlbFdyYXBwZXIiLCJyb290SUQiLCJpc1JlYWN0Q29tcG9uZW50IiwiX2luc3RhbmNlc0J5UmVhY3RSb290SUQiLCJzY3JvbGxNb25pdG9yIiwicmVuZGVyQ2FsbGJhY2siLCJfdXBkYXRlUm9vdENvbXBvbmVudCIsInByZXZDb21wb25lbnQiLCJfcmVuZGVyTmV3Um9vdENvbXBvbmVudCIsIndyYXBwZXJJRCIsIl9pbnN0YW5jZSIsInJlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyIiwicGFyZW50Q29tcG9uZW50IiwiX3JlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyIiwibmV4dFdyYXBwZWRFbGVtZW50IiwiX3Byb2Nlc3NDaGlsZENvbnRleHQiLCJwcmV2V3JhcHBlZEVsZW1lbnQiLCJwdWJsaWNJbnN0IiwidXBkYXRlZENhbGxiYWNrIiwidW5tb3VudENvbXBvbmVudEF0Tm9kZSIsInJlYWN0Um9vdEVsZW1lbnQiLCJjb250YWluZXJIYXNSZWFjdE1hcmt1cCIsImNvbnRhaW5lckhhc05vblJvb3RSZWFjdENoaWxkIiwicm9vdEVsZW1lbnRTaWJsaW5nIiwiaXNDb250YWluZXJSZWFjdFJvb3QiLCJyb290RWxlbWVudCIsImNhblJldXNlTWFya3VwIiwiY2hlY2tzdW0iLCJDSEVDS1NVTV9BVFRSX05BTUUiLCJyb290TWFya3VwIiwib3V0ZXJIVE1MIiwibm9ybWFsaXplZE1hcmt1cCIsIm5vcm1hbGl6ZXIiLCJjb250ZW50RG9jdW1lbnQiLCJ3cml0ZSIsImRpZmZJbmRleCIsImRpZmZlcmVuY2UiLCJob3N0Tm9kZSIsIlJlYWN0Tm9kZVR5cGVzIiwiSE9TVCIsIkNPTVBPU0lURSIsIkVNUFRZIiwiZ2V0VHlwZSIsInNjcm9sbFBvc2l0aW9uIiwiYXJyIiwiY2IiLCJnZXRIb3N0Q29tcG9uZW50RnJvbUNvbXBvc2l0ZSIsIl9yZW5kZXJlZE5vZGVUeXBlIiwiY29udGVudEtleSIsImdldFRleHRDb250ZW50QWNjZXNzb3IiLCJpc0NoZWNrYWJsZSIsImdldFRyYWNrZXIiLCJ2YWx1ZVRyYWNrZXIiLCJhdHRhY2hUcmFja2VyIiwidHJhY2tlciIsImRldGFjaFRyYWNrZXIiLCJnZXRWYWx1ZUZyb21Ob2RlIiwiaW5wdXRWYWx1ZVRyYWNraW5nIiwiX2dldFRyYWNrZXJGcm9tTm9kZSIsInRyYWNrIiwidmFsdWVGaWVsZCIsImRlc2NyaXB0b3IiLCJjdXJyZW50VmFsdWUiLCJzZXRWYWx1ZSIsInN0b3BUcmFja2luZyIsInVwZGF0ZVZhbHVlSWZDaGFuZ2VkIiwibGFzdFZhbHVlIiwibmV4dFZhbHVlIiwiUmVhY3RDb21wb3NpdGVDb21wb25lbnQiLCJnZXROZXh0RGVidWdJRCIsIlJlYWN0Q29tcG9zaXRlQ29tcG9uZW50V3JhcHBlciIsImlzSW50ZXJuYWxDb21wb25lbnRUeXBlIiwic2hvdWxkSGF2ZURlYnVnSUQiLCJnZXROYXRpdmVOb2RlIiwiX21vdW50SW5kZXgiLCJfbW91bnRJbWFnZSIsInByZXZlbnRFeHRlbnNpb25zIiwiX2luc3RhbnRpYXRlUmVhY3RDb21wb25lbnQiLCJzdXBwb3J0ZWRJbnB1dFR5cGVzIiwiY29sb3IiLCJkYXRlIiwiZGF0ZXRpbWUiLCJlbWFpbCIsIm1vbnRoIiwicGFzc3dvcmQiLCJ0ZWwiLCJ3ZWVrIiwiaXNUZXh0SW5wdXRFbGVtZW50IiwidGV4dENvbnRlbnQiLCJTRVBBUkFUT1IiLCJTVUJTRVBBUkFUT1IiLCJkaWRXYXJuQWJvdXRNYXBzIiwiZ2V0Q29tcG9uZW50S2V5IiwidHJhdmVyc2VBbGxDaGlsZHJlbkltcGwiLCJuYW1lU29GYXIiLCJ0cmF2ZXJzZUNvbnRleHQiLCJuZXh0TmFtZSIsInN1YnRyZWVDb3VudCIsIm5leHROYW1lUHJlZml4IiwiaWkiLCJtYXBzQXNDaGlsZHJlbkFkZGVuZHVtIiwibWFwc0FzQ2hpbGRyZW5Pd25lck5hbWUiLCJfaXNSZWFjdEVsZW1lbnQiLCJjaGlsZHJlblN0cmluZyIsInRyYXZlcnNlQWxsQ2hpbGRyZW4iLCJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCJob3RSZWxvYWRpbmdWZXJzaW9uIiwiZHVtbXlTdGF0ZSIsIm1ha2VTZWxlY3RvclN0YXRlZnVsIiwic291cmNlU2VsZWN0b3IiLCJzdG9yZSIsInNlbGVjdG9yIiwicnVuQ29tcG9uZW50U2VsZWN0b3IiLCJnZXRTdGF0ZSIsInNob3VsZENvbXBvbmVudFVwZGF0ZSIsInNlbGVjdG9yRmFjdG9yeSIsIl9jb250ZXh0VHlwZXMiLCJfY2hpbGRDb250ZXh0VHlwZXMiLCJfcmVmIiwiX3JlZiRnZXREaXNwbGF5TmFtZSIsIl9yZWYkbWV0aG9kTmFtZSIsIm1ldGhvZE5hbWUiLCJfcmVmJHJlbmRlckNvdW50UHJvcCIsInJlbmRlckNvdW50UHJvcCIsIl9yZWYkc2hvdWxkSGFuZGxlU3RhdCIsInNob3VsZEhhbmRsZVN0YXRlQ2hhbmdlcyIsIl9yZWYkc3RvcmVLZXkiLCJzdG9yZUtleSIsIl9yZWYkd2l0aFJlZiIsIndpdGhSZWYiLCJjb25uZWN0T3B0aW9ucyIsInN1YnNjcmlwdGlvbktleSIsIndyYXBXaXRoQ29ubmVjdCIsIldyYXBwZWRDb21wb25lbnQiLCJ3cmFwcGVkQ29tcG9uZW50TmFtZSIsInNlbGVjdG9yRmFjdG9yeU9wdGlvbnMiLCJDb25uZWN0IiwiX0NvbXBvbmVudCIsInJlbmRlckNvdW50IiwicHJvcHNNb2RlIiwic2V0V3JhcHBlZEluc3RhbmNlIiwiaW5pdFNlbGVjdG9yIiwiaW5pdFN1YnNjcmlwdGlvbiIsIl9yZWYyIiwic3Vic2NyaXB0aW9uIiwiY29tcG9uZW50RGlkTW91bnQiLCJ0cnlTdWJzY3JpYmUiLCJmb3JjZVVwZGF0ZSIsInRyeVVuc3Vic2NyaWJlIiwibm90aWZ5TmVzdGVkU3VicyIsImdldFdyYXBwZWRJbnN0YW5jZSIsIndyYXBwZWRJbnN0YW5jZSIsImRpc3BhdGNoIiwicGFyZW50U3ViIiwib25TdGF0ZUNoYW5nZSIsImNvbXBvbmVudERpZFVwZGF0ZSIsIm5vdGlmeU5lc3RlZFN1YnNPbkNvbXBvbmVudERpZFVwZGF0ZSIsImlzU3Vic2NyaWJlZCIsImFkZEV4dHJhUHJvcHMiLCJ3aXRoRXh0cmFzIiwiY29tcG9uZW50V2lsbFVwZGF0ZSIsIndyYXBNYXBUb1Byb3BzQ29uc3RhbnQiLCJnZXREZXBlbmRzT25Pd25Qcm9wcyIsIndyYXBNYXBUb1Byb3BzRnVuYyIsImdldENvbnN0YW50IiwiaW5pdENvbnN0YW50U2VsZWN0b3IiLCJjb25zdGFudCIsImNvbnN0YW50U2VsZWN0b3IiLCJkZXBlbmRzT25Pd25Qcm9wcyIsIm1hcFRvUHJvcHMiLCJpbml0UHJveHlTZWxlY3RvciIsInByb3h5IiwibWFwVG9Qcm9wc1Byb3h5Iiwic3RhdGVPckRpc3BhdGNoIiwib3duUHJvcHMiLCJkZXRlY3RGYWN0b3J5QW5kVmVyaWZ5Iiwic3Vic2NyaXB0aW9uU2hhcGUiLCJzdG9yZVNoYXBlIiwic3Vic2NyaWJlIiwidmVyaWZ5UGxhaW5PYmplY3QiLCJpc01vZGlmaWVkRXZlbnQiLCJMaW5rIiwiaGFuZGxlQ2xpY2siLCJvbkNsaWNrIiwiX3RoaXMkcHJvcHMiLCJocmVmIiwiY3JlYXRlSHJlZiIsImNvbXB1dGVkTWF0Y2giLCJfcHJvcHMyIiwiX2NvbnRleHQkcm91dGVyIiwic3RhdGljQ29udGV4dCIsIlJlYWN0Tm9vcFVwZGF0ZVF1ZXVlIiwiUmVhY3RDb21wb25lbnQiLCJ1cGRhdGVyIiwicmVmcyIsImRlcHJlY2F0ZWRBUElzIiwicmVwbGFjZVN0YXRlIiwiZGVmaW5lRGVwcmVjYXRpb25XYXJuaW5nIiwiZm5OYW1lIiwiUmVhY3RQdXJlQ29tcG9uZW50IiwiQ29tcG9uZW50RHVtbXkiLCJpc1B1cmVSZWFjdENvbXBvbmVudCIsImNoZWNrUmVhY3RUeXBlU3BlYyIsImdldFNvdXJjZUluZm9FcnJvckFkZGVuZHVtIiwiZWxlbWVudFByb3BzIiwib3duZXJIYXNLZXlVc2VXYXJuaW5nIiwiZ2V0Q3VycmVudENvbXBvbmVudEVycm9ySW5mbyIsInBhcmVudFR5cGUiLCJwYXJlbnROYW1lIiwidmFsaWRhdGVFeHBsaWNpdEtleSIsIm1lbW9pemVyIiwidW5pcXVlS2V5IiwiY3VycmVudENvbXBvbmVudEVycm9ySW5mbyIsInZhbGlkYXRlQ2hpbGRLZXlzIiwidmFsaWRhdGVQcm9wVHlwZXMiLCJpc1JlYWN0Q2xhc3NBcHByb3ZlZCIsInZhbGlkVHlwZSIsInNvdXJjZUluZm8iLCJ2YWxpZGF0ZWRGYWN0b3J5Iiwid2Fybk5vb3AiLCJmdW5jcyIsImxhc3QiLCJyZXN0IiwicmVkdWNlUmlnaHQiLCJjb21wb3NlZCIsIkFjdGlvblR5cGVzIiwiSU5JVCIsInJlZHVjZXIiLCJwcmVsb2FkZWRTdGF0ZSIsImVuaGFuY2VyIiwiY3VycmVudFJlZHVjZXIiLCJjdXJyZW50U3RhdGUiLCJjdXJyZW50TGlzdGVuZXJzIiwibmV4dExpc3RlbmVycyIsImlzRGlzcGF0Y2hpbmciLCJlbnN1cmVDYW5NdXRhdGVOZXh0TGlzdGVuZXJzIiwidW5zdWJzY3JpYmUiLCJyZXBsYWNlUmVkdWNlciIsIm5leHRSZWR1Y2VyIiwib2JzZXJ2YWJsZSIsIm91dGVyU3Vic2NyaWJlIiwib2JzZXJ2ZXIiLCJvYnNlcnZlU3RhdGUiLCJnIiwiZXZhbCIsIkJvdHRvbU5hdiIsImZvb3Rlckl0ZW1zIiwiaWNvbk1hcCIsImZpbGVzIiwicGhvdG9zIiwic2hhcmVkIiwibXVzaWMiLCJtZW51IiwiZm9vdGVyRWxlbWVudHMiLCJnZXRQYXRoIiwidHJhdmVyc2UiLCJvcmlnaW4iLCJwcm9wbGlzdCIsInNoaWZ0IiwiY29udGVudHMiLCJmaW5kIiwiY3VycmVudFBhdGgiLCJmaWxlc3lzdGVtIiwiQnJvd3NlclJvdXRlciIsIkhhc2hSb3V0ZXIiLCJOYXZMaW5rIiwiaXRlbUxpc3RzIiwiTWFpbiIsImN1cnJlbnRMaXN0IiwiTWVudSIsInNlbGVjdE1vZGUiLCJ0b2dnbGVTZWxlY3Rpb24iLCJzZWxlY3Rpb25Nb2RlIiwibmF2aWdhdGVUbyIsIl9pbnZhcmlhbnQiLCJNSVhJTlNfS0VZIiwiaWRlbnRpdHkiLCJSZWFjdFByb3BUeXBlTG9jYXRpb25OYW1lcyIsImNoaWxkQ29udGV4dCIsImluamVjdGVkTWl4aW5zIiwiUmVhY3RDbGFzc0ludGVyZmFjZSIsInN0YXRpY3MiLCJnZXRJbml0aWFsU3RhdGUiLCJ1cGRhdGVDb21wb25lbnQiLCJSRVNFUlZFRF9TUEVDX0tFWVMiLCJtaXhTcGVjSW50b0NvbXBvbmVudCIsInZhbGlkYXRlVHlwZURlZiIsImNyZWF0ZU1lcmdlZFJlc3VsdEZ1bmN0aW9uIiwibWl4U3RhdGljU3BlY0ludG9Db21wb25lbnQiLCJhdXRvYmluZCIsInR5cGVEZWYiLCJ2YWxpZGF0ZU1ldGhvZE92ZXJyaWRlIiwiaXNBbHJlYWR5RGVmaW5lZCIsInNwZWNQb2xpY3kiLCJSZWFjdENsYXNzTWl4aW4iLCJzcGVjIiwidHlwZW9mU3BlYyIsImlzTWl4aW5WYWxpZCIsImF1dG9CaW5kUGFpcnMiLCJfX3JlYWN0QXV0b0JpbmRQYWlycyIsInByb3BlcnR5IiwiaXNSZWFjdENsYXNzTWV0aG9kIiwic2hvdWxkQXV0b0JpbmQiLCJjcmVhdGVDaGFpbmVkRnVuY3Rpb24iLCJpc1Jlc2VydmVkIiwiaXNJbmhlcml0ZWQiLCJtZXJnZUludG9XaXRoTm9EdXBsaWNhdGVLZXlzIiwib25lIiwidHdvIiwibWVyZ2VkUmVzdWx0IiwiY2hhaW5lZEZ1bmN0aW9uIiwiYmluZEF1dG9CaW5kTWV0aG9kIiwiYm91bmRNZXRob2QiLCJfX3JlYWN0Qm91bmRDb250ZXh0IiwiX19yZWFjdEJvdW5kTWV0aG9kIiwiX19yZWFjdEJvdW5kQXJndW1lbnRzIiwiX2JpbmQiLCJuZXdUaGlzIiwicmVib3VuZE1ldGhvZCIsImJpbmRBdXRvQmluZE1ldGhvZHMiLCJwYWlycyIsImF1dG9CaW5kS2V5IiwiSXNNb3VudGVkUHJlTWl4aW4iLCJfX2lzTW91bnRlZCIsIklzTW91bnRlZFBvc3RNaXhpbiIsIm5ld1N0YXRlIiwiX19kaWRXYXJuSXNNb3VudGVkIiwiUmVhY3RDbGFzc0NvbXBvbmVudCIsImluaXRpYWxTdGF0ZSIsIl9pc01vY2tGdW5jdGlvbiIsImNvbXBvbmVudFNob3VsZFVwZGF0ZSIsImNvbXBvbmVudFdpbGxSZWNpZXZlUHJvcHMiLCJfaHlwaGVuUGF0dGVybiIsImNhbWVsaXplIiwiXyIsImNoYXJhY3RlciIsIm1zUGF0dGVybiIsImNhbWVsaXplU3R5bGVOYW1lIiwiaXNUZXh0Tm9kZSIsIm91dGVyTm9kZSIsImlubmVyTm9kZSIsImNvbnRhaW5zIiwiY29tcGFyZURvY3VtZW50UG9zaXRpb24iLCJjYWxsZWUiLCJoYXNBcnJheU5hdHVyZSIsImNyZWF0ZUFycmF5RnJvbU1peGVkIiwiZ2V0TWFya3VwV3JhcCIsImR1bW15Tm9kZSIsIm5vZGVOYW1lUGF0dGVybiIsImdldE5vZGVOYW1lIiwibm9kZU5hbWVNYXRjaCIsImNyZWF0ZU5vZGVzRnJvbU1hcmt1cCIsImhhbmRsZVNjcmlwdCIsIndyYXAiLCJ3cmFwRGVwdGgiLCJzY3JpcHRzIiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJub2RlcyIsImNoaWxkTm9kZXMiLCJzaG91bGRXcmFwIiwic2VsZWN0V3JhcCIsInRhYmxlV3JhcCIsInRyV3JhcCIsInN2Z1dyYXAiLCJtYXJrdXBXcmFwIiwic3ZnRWxlbWVudHMiLCJnZXRVbmJvdW5kZWRTY3JvbGxQb3NpdGlvbiIsInNjcm9sbGFibGUiLCJXaW5kb3ciLCJwYWdlWE9mZnNldCIsInNjcm9sbExlZnQiLCJwYWdlWU9mZnNldCIsInNjcm9sbFRvcCIsIl91cHBlcmNhc2VQYXR0ZXJuIiwiaHlwaGVuYXRlIiwiaHlwaGVuYXRlU3R5bGVOYW1lIiwiTm9kZSIsIm1lbW9pemVTdHJpbmdPbmx5IiwicGVyZm9ybWFuY2UiLCJtc1BlcmZvcm1hbmNlIiwid2Via2l0UGVyZm9ybWFuY2UiLCJwZXJmb3JtYW5jZU5vdyIsIl90eXBlb2YiLCJfaW52YXJpYW50MiIsIl9Mb2NhdGlvblV0aWxzIiwiX2NyZWF0ZVRyYW5zaXRpb25NYW5hZ2VyIiwiX2NyZWF0ZVRyYW5zaXRpb25NYW5hZ2VyMiIsIl9ET01VdGlscyIsIlBvcFN0YXRlRXZlbnQiLCJIYXNoQ2hhbmdlRXZlbnQiLCJnZXRIaXN0b3J5U3RhdGUiLCJjcmVhdGVCcm93c2VySGlzdG9yeSIsImdsb2JhbEhpc3RvcnkiLCJjYW5Vc2VIaXN0b3J5IiwibmVlZHNIYXNoQ2hhbmdlTGlzdGVuZXIiLCJfcHJvcHMkZm9yY2VSZWZyZXNoIiwiZm9yY2VSZWZyZXNoIiwiX3Byb3BzJGdldFVzZXJDb25maXJtIiwiX3Byb3BzJGtleUxlbmd0aCIsImtleUxlbmd0aCIsImJhc2VuYW1lIiwiZ2V0RE9NTG9jYXRpb24iLCJoaXN0b3J5U3RhdGUiLCJfd2luZG93JGxvY2F0aW9uIiwiY3JlYXRlS2V5IiwidHJhbnNpdGlvbk1hbmFnZXIiLCJuZXh0U3RhdGUiLCJoYW5kbGVQb3BTdGF0ZSIsImhhbmRsZVBvcCIsImhhbmRsZUhhc2hDaGFuZ2UiLCJmb3JjZU5leHRQb3AiLCJvayIsInJldmVydFBvcCIsImZyb21Mb2NhdGlvbiIsInRvTG9jYXRpb24iLCJhbGxLZXlzIiwiZGVsdGEiLCJnbyIsImluaXRpYWxMb2NhdGlvbiIsInB1c2hTdGF0ZSIsInByZXZJbmRleCIsIm5leHRLZXlzIiwiZ29CYWNrIiwiZ29Gb3J3YXJkIiwibGlzdGVuZXJDb3VudCIsImNoZWNrRE9NTGlzdGVuZXJzIiwiaXNCbG9ja2VkIiwiYmxvY2siLCJ1bmJsb2NrIiwiSGFzaFBhdGhDb2RlcnMiLCJoYXNoYmFuZyIsImVuY29kZVBhdGgiLCJkZWNvZGVQYXRoIiwibm9zbGFzaCIsInNsYXNoIiwiZ2V0SGFzaFBhdGgiLCJwdXNoSGFzaFBhdGgiLCJyZXBsYWNlSGFzaFBhdGgiLCJjcmVhdGVIYXNoSGlzdG9yeSIsImNhbkdvV2l0aG91dFJlbG9hZCIsIl9wcm9wcyRoYXNoVHlwZSIsImhhc2hUeXBlIiwiX0hhc2hQYXRoQ29kZXJzJGhhc2hUIiwiaWdub3JlUGF0aCIsImVuY29kZWRQYXRoIiwicHJldkxvY2F0aW9uIiwiYWxsUGF0aHMiLCJsYXN0SW5kZXhPZiIsImhhc2hDaGFuZ2VkIiwibmV4dFBhdGhzIiwiY2xhbXAiLCJsb3dlckJvdW5kIiwidXBwZXJCb3VuZCIsIm1heCIsImNyZWF0ZU1lbW9yeUhpc3RvcnkiLCJfcHJvcHMkaW5pdGlhbEVudHJpZXMiLCJpbml0aWFsRW50cmllcyIsIl9wcm9wcyRpbml0aWFsSW5kZXgiLCJpbml0aWFsSW5kZXgiLCJuZXh0SW5kZXgiLCJuZXh0RW50cmllcyIsImNhbkdvIiwibnVsbFRhZyIsInVuZGVmaW5lZFRhZyIsInN5bVRvU3RyaW5nVGFnIiwidG9TdHJpbmdUYWciLCJiYXNlR2V0VGFnIiwiZnJlZUdsb2JhbCIsImdsb2JhbCIsImdldFByb3RvdHlwZSIsImdldFByb3RvdHlwZU9mIiwibmF0aXZlT2JqZWN0VG9TdHJpbmciLCJnZXRSYXdUYWciLCJpc093biIsInVubWFza2VkIiwib2JqZWN0VG9TdHJpbmciLCJvdmVyQXJnIiwidHJhbnNmb3JtIiwiZnJlZVNlbGYiLCJpc09iamVjdExpa2UiLCJ0eXBlU3BlY3MiLCJnZXRTdGFjayIsInR5cGVTcGVjTmFtZSIsImV4Iiwic2hpbSIsImdldFNoaW0iLCJBUklBRE9NUHJvcGVydHlDb25maWciLCJBdXRvRm9jdXNVdGlscyIsImZvY3VzRE9NQ29tcG9uZW50IiwiRmFsbGJhY2tDb21wb3NpdGlvblN0YXRlIiwiU3ludGhldGljQ29tcG9zaXRpb25FdmVudCIsIlN5bnRoZXRpY0lucHV0RXZlbnQiLCJFTkRfS0VZQ09ERVMiLCJTVEFSVF9LRVlDT0RFIiwiY2FuVXNlQ29tcG9zaXRpb25FdmVudCIsImNhblVzZVRleHRJbnB1dEV2ZW50IiwiaXNQcmVzdG8iLCJ1c2VGYWxsYmFja0NvbXBvc2l0aW9uRGF0YSIsIm9wZXJhIiwiU1BBQ0VCQVJfQ09ERSIsIlNQQUNFQkFSX0NIQVIiLCJiZWZvcmVJbnB1dCIsImJ1YmJsZWQiLCJjYXB0dXJlZCIsImNvbXBvc2l0aW9uRW5kIiwiY29tcG9zaXRpb25TdGFydCIsImNvbXBvc2l0aW9uVXBkYXRlIiwiaGFzU3BhY2VLZXlwcmVzcyIsImlzS2V5cHJlc3NDb21tYW5kIiwiZ2V0Q29tcG9zaXRpb25FdmVudFR5cGUiLCJpc0ZhbGxiYWNrQ29tcG9zaXRpb25TdGFydCIsImlzRmFsbGJhY2tDb21wb3NpdGlvbkVuZCIsImdldERhdGFGcm9tQ3VzdG9tRXZlbnQiLCJjdXJyZW50Q29tcG9zaXRpb24iLCJleHRyYWN0Q29tcG9zaXRpb25FdmVudCIsImZhbGxiYWNrRGF0YSIsImdldERhdGEiLCJjdXN0b21EYXRhIiwiZ2V0TmF0aXZlQmVmb3JlSW5wdXRDaGFycyIsIndoaWNoIiwiY2hhcnMiLCJnZXRGYWxsYmFja0JlZm9yZUlucHV0Q2hhcnMiLCJleHRyYWN0QmVmb3JlSW5wdXRFdmVudCIsIkJlZm9yZUlucHV0RXZlbnRQbHVnaW4iLCJkYW5nZXJvdXNTdHlsZVZhbHVlIiwicHJvY2Vzc1N0eWxlTmFtZSIsInN0eWxlTmFtZSIsImhhc1Nob3J0aGFuZFByb3BlcnR5QnVnIiwic3R5bGVGbG9hdEFjY2Vzc29yIiwidGVtcFN0eWxlIiwic3R5bGUiLCJjc3NGbG9hdCIsImJhZFZlbmRvcmVkU3R5bGVOYW1lUGF0dGVybiIsImJhZFN0eWxlVmFsdWVXaXRoU2VtaWNvbG9uUGF0dGVybiIsIndhcm5lZFN0eWxlTmFtZXMiLCJ3YXJuZWRTdHlsZVZhbHVlcyIsIndhcm5lZEZvck5hTlZhbHVlIiwid2Fybkh5cGhlbmF0ZWRTdHlsZU5hbWUiLCJjaGVja1JlbmRlck1lc3NhZ2UiLCJ3YXJuQmFkVmVuZG9yZWRTdHlsZU5hbWUiLCJ3YXJuU3R5bGVWYWx1ZVdpdGhTZW1pY29sb24iLCJ3YXJuU3R5bGVWYWx1ZUlzTmFOIiwid2FyblZhbGlkU3R5bGUiLCJDU1NQcm9wZXJ0eU9wZXJhdGlvbnMiLCJjcmVhdGVNYXJrdXBGb3JTdHlsZXMiLCJzdHlsZXMiLCJzZXJpYWxpemVkIiwiaXNDdXN0b21Qcm9wZXJ0eSIsInN0eWxlVmFsdWUiLCJzZXRWYWx1ZUZvclN0eWxlcyIsInNldFByb3BlcnR5IiwiZXhwYW5zaW9uIiwiaW5kaXZpZHVhbFN0eWxlTmFtZSIsImNoYW5nZSIsImNyZWF0ZUFuZEFjY3VtdWxhdGVDaGFuZ2VFdmVudCIsImFjdGl2ZUVsZW1lbnRJbnN0Iiwic2hvdWxkVXNlQ2hhbmdlRXZlbnQiLCJkb2VzQ2hhbmdlRXZlbnRCdWJibGUiLCJtYW51YWxEaXNwYXRjaENoYW5nZUV2ZW50IiwicnVuRXZlbnRJbkJhdGNoIiwic3RhcnRXYXRjaGluZ0ZvckNoYW5nZUV2ZW50SUU4Iiwic3RvcFdhdGNoaW5nRm9yQ2hhbmdlRXZlbnRJRTgiLCJnZXRJbnN0SWZWYWx1ZUNoYW5nZWQiLCJ1cGRhdGVkIiwiQ2hhbmdlRXZlbnRQbHVnaW4iLCJfYWxsb3dTaW11bGF0ZWRQYXNzVGhyb3VnaCIsImdldFRhcmdldEluc3RGb3JDaGFuZ2VFdmVudCIsImhhbmRsZUV2ZW50c0ZvckNoYW5nZUV2ZW50SUU4IiwiaXNJbnB1dEV2ZW50U3VwcG9ydGVkIiwic3RhcnRXYXRjaGluZ0ZvclZhbHVlQ2hhbmdlIiwiaGFuZGxlUHJvcGVydHlDaGFuZ2UiLCJzdG9wV2F0Y2hpbmdGb3JWYWx1ZUNoYW5nZSIsImhhbmRsZUV2ZW50c0ZvcklucHV0RXZlbnRQb2x5ZmlsbCIsImdldFRhcmdldEluc3RGb3JJbnB1dEV2ZW50UG9seWZpbGwiLCJzaG91bGRVc2VDbGlja0V2ZW50IiwiZ2V0VGFyZ2V0SW5zdEZvckNsaWNrRXZlbnQiLCJnZXRUYXJnZXRJbnN0Rm9ySW5wdXRPckNoYW5nZUV2ZW50IiwiaGFuZGxlQ29udHJvbGxlZElucHV0Qmx1ciIsImNvbnRyb2xsZWQiLCJfaXNJbnB1dEV2ZW50U3VwcG9ydGVkIiwidGFyZ2V0Tm9kZSIsImdldFRhcmdldEluc3RGdW5jIiwiaGFuZGxlRXZlbnRGdW5jIiwibmV3Q2hpbGQiLCJEZWZhdWx0RXZlbnRQbHVnaW5PcmRlciIsIm1vdXNlRW50ZXIiLCJtb3VzZUxlYXZlIiwiRW50ZXJMZWF2ZUV2ZW50UGx1Z2luIiwid2luIiwicmVsYXRlZCIsInRvTm9kZSIsIl9yb290IiwiX3N0YXJ0VGV4dCIsIl9mYWxsYmFja1RleHQiLCJzdGFydFZhbHVlIiwic3RhcnRMZW5ndGgiLCJlbmRWYWx1ZSIsImVuZExlbmd0aCIsIm1pbkVuZCIsInNsaWNlVGFpbCIsIkhUTUxET01Qcm9wZXJ0eUNvbmZpZyIsImFjY2VwdCIsImFjY2VwdENoYXJzZXQiLCJhY2Nlc3NLZXkiLCJhbGxvd0Z1bGxTY3JlZW4iLCJhbGxvd1RyYW5zcGFyZW5jeSIsImFsdCIsImFzIiwiYXN5bmMiLCJhdXRvQ29tcGxldGUiLCJhdXRvUGxheSIsImNlbGxQYWRkaW5nIiwiY2VsbFNwYWNpbmciLCJjaGFyU2V0IiwiY2hhbGxlbmdlIiwiY2l0ZSIsImNsYXNzSUQiLCJjbGFzc05hbWUiLCJjb2xzIiwiY29sU3BhbiIsImNvbnRleHRNZW51IiwiY29udHJvbHMiLCJjb29yZHMiLCJjcm9zc09yaWdpbiIsImRhdGVUaW1lIiwiZGVmZXIiLCJkb3dubG9hZCIsImRyYWdnYWJsZSIsImVuY1R5cGUiLCJmb3JtIiwiZm9ybUFjdGlvbiIsImZvcm1FbmNUeXBlIiwiZm9ybU1ldGhvZCIsImZvcm1Ob1ZhbGlkYXRlIiwiZm9ybVRhcmdldCIsImZyYW1lQm9yZGVyIiwiaGVhZGVycyIsImhlaWdodCIsImhpZ2giLCJocmVmTGFuZyIsImh0bWxGb3IiLCJodHRwRXF1aXYiLCJpY29uIiwiaW5wdXRNb2RlIiwiaW50ZWdyaXR5Iiwia2V5UGFyYW1zIiwia2V5VHlwZSIsImtpbmQiLCJsYWJlbCIsImxhbmciLCJsaXN0IiwibG9vcCIsImxvdyIsIm1hbmlmZXN0IiwibWFyZ2luSGVpZ2h0IiwibWFyZ2luV2lkdGgiLCJtYXhMZW5ndGgiLCJtZWRpYSIsIm1lZGlhR3JvdXAiLCJtaW5MZW5ndGgiLCJtdXRlZCIsIm5vbmNlIiwibm9WYWxpZGF0ZSIsIm9wZW4iLCJvcHRpbXVtIiwicGxhY2Vob2xkZXIiLCJwbGF5c0lubGluZSIsInBvc3RlciIsInByZWxvYWQiLCJwcm9maWxlIiwicmFkaW9Hcm91cCIsInJlZmVycmVyUG9saWN5IiwicmVsIiwicmVxdWlyZWQiLCJyZXZlcnNlZCIsInJvbGUiLCJyb3dzIiwicm93U3BhbiIsInNhbmRib3giLCJzY29wZWQiLCJzY3JvbGxpbmciLCJzZWFtbGVzcyIsInNpemUiLCJzaXplcyIsInNwYW4iLCJzcGVsbENoZWNrIiwic3JjIiwic3JjRG9jIiwic3JjTGFuZyIsInNyY1NldCIsInN1bW1hcnkiLCJ0YWJJbmRleCIsInVzZU1hcCIsIndpZHRoIiwid21vZGUiLCJhYm91dCIsImRhdGF0eXBlIiwiaW5saXN0IiwicmVzb3VyY2UiLCJ2b2NhYiIsImF1dG9DYXBpdGFsaXplIiwiYXV0b0NvcnJlY3QiLCJhdXRvU2F2ZSIsIml0ZW1Qcm9wIiwiaXRlbVNjb3BlIiwiaXRlbVR5cGUiLCJpdGVtSUQiLCJpdGVtUmVmIiwicmVzdWx0cyIsInNlY3VyaXR5IiwidW5zZWxlY3RhYmxlIiwidmFsaWRpdHkiLCJiYWRJbnB1dCIsImluc3RhbnRpYXRlQ2hpbGQiLCJjaGlsZEluc3RhbmNlcyIsInNlbGZEZWJ1Z0lEIiwia2V5VW5pcXVlIiwiUmVhY3RDaGlsZFJlY29uY2lsZXIiLCJpbnN0YW50aWF0ZUNoaWxkcmVuIiwibmVzdGVkQ2hpbGROb2RlcyIsImNoaWxkSW5zdHMiLCJ1cGRhdGVDaGlsZHJlbiIsInByZXZDaGlsZHJlbiIsIm5leHRDaGlsZHJlbiIsIm1vdW50SW1hZ2VzIiwicmVtb3ZlZE5vZGVzIiwicHJldkNoaWxkIiwibmV4dENoaWxkSW5zdGFuY2UiLCJuZXh0Q2hpbGRNb3VudEltYWdlIiwidW5tb3VudENoaWxkcmVuIiwicmVuZGVyZWRDaGlsZHJlbiIsInJlbmRlcmVkQ2hpbGQiLCJSZWFjdERPTUlET3BlcmF0aW9ucyIsIlJlYWN0Q29tcG9uZW50QnJvd3NlckVudmlyb25tZW50IiwiZGFuZ2Vyb3VzbHlQcm9jZXNzQ2hpbGRyZW5VcGRhdGVzIiwiQ29tcG9zaXRlVHlwZXMiLCJJbXB1cmVDbGFzcyIsIlB1cmVDbGFzcyIsIlN0YXRlbGVzc0Z1bmN0aW9uYWwiLCJTdGF0ZWxlc3NDb21wb25lbnQiLCJ3YXJuSWZJbnZhbGlkRWxlbWVudCIsInNob3VsZENvbnN0cnVjdCIsImlzUHVyZUNvbXBvbmVudCIsIm1lYXN1cmVMaWZlQ3ljbGVQZXJmIiwiZGVidWdJRCIsInRpbWVyVHlwZSIsIm9uQmVnaW5MaWZlQ3ljbGVUaW1lciIsIm9uRW5kTGlmZUN5Y2xlVGltZXIiLCJuZXh0TW91bnRJRCIsIl9jb21wb3NpdGVUeXBlIiwiX2NhbGxlZENvbXBvbmVudFdpbGxVbm1vdW50IiwicHVibGljUHJvcHMiLCJwdWJsaWNDb250ZXh0IiwiX3Byb2Nlc3NDb250ZXh0IiwidXBkYXRlUXVldWUiLCJnZXRVcGRhdGVRdWV1ZSIsImRvQ29uc3RydWN0IiwiX2NvbnN0cnVjdENvbXBvbmVudCIsInJlbmRlcmVkRWxlbWVudCIsInByb3BzTXV0YXRlZCIsImNvbXBvbmVudERpZFVubW91bnQiLCJ1bnN0YWJsZV9oYW5kbGVFcnJvciIsInBlcmZvcm1Jbml0aWFsTW91bnRXaXRoRXJyb3JIYW5kbGluZyIsInBlcmZvcm1Jbml0aWFsTW91bnQiLCJfY29uc3RydWN0Q29tcG9uZW50V2l0aG91dE93bmVyIiwiX3Byb2Nlc3NQZW5kaW5nU3RhdGUiLCJfcmVuZGVyVmFsaWRhdGVkQ29tcG9uZW50IiwiY2hpbGREZWJ1Z0lEcyIsIl9tYXNrQ29udGV4dCIsIm1hc2tlZENvbnRleHQiLCJjb250ZXh0TmFtZSIsIl9jaGVja0NvbnRleHRUeXBlcyIsImN1cnJlbnRDb250ZXh0Iiwib25CZWdpblByb2Nlc3NpbmdDaGlsZENvbnRleHQiLCJvbkVuZFByb2Nlc3NpbmdDaGlsZENvbnRleHQiLCJwcmV2Q29udGV4dCIsInByZXZQYXJlbnRFbGVtZW50IiwibmV4dFBhcmVudEVsZW1lbnQiLCJwcmV2VW5tYXNrZWRDb250ZXh0IiwibmV4dFVubWFza2VkQ29udGV4dCIsIndpbGxSZWNlaXZlIiwicHJldlByb3BzIiwic2hvdWxkVXBkYXRlIiwiX3BlcmZvcm1Db21wb25lbnRVcGRhdGUiLCJwYXJ0aWFsIiwidW5tYXNrZWRDb250ZXh0IiwiaGFzQ29tcG9uZW50RGlkVXBkYXRlIiwicHJldlN0YXRlIiwiX3VwZGF0ZVJlbmRlcmVkQ29tcG9uZW50IiwicHJldkNvbXBvbmVudEluc3RhbmNlIiwicHJldlJlbmRlcmVkRWxlbWVudCIsIm5leHRSZW5kZXJlZEVsZW1lbnQiLCJvbGRIb3N0Tm9kZSIsIm5leHRNYXJrdXAiLCJfcmVwbGFjZU5vZGVXaXRoTWFya3VwIiwiX3JlbmRlclZhbGlkYXRlZENvbXBvbmVudFdpdGhvdXRPd25lck9yQ29udGV4dCIsImF0dGFjaFJlZiIsInB1YmxpY0NvbXBvbmVudEluc3RhbmNlIiwiZGV0YWNoUmVmIiwiUmVhY3REZWZhdWx0SW5qZWN0aW9uIiwiZmluZERPTU5vZGUiLCJpbmplY3QiLCJSZWFjdERPTSIsInVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzIiwidW5zdGFibGVfcmVuZGVyU3VidHJlZUludG9Db250YWluZXIiLCJfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18iLCJNb3VudCIsIlJlY29uY2lsZXIiLCJ0b3AiLCJzaG93RmlsZVVybE1lc3NhZ2UiLCJwcm90b2NvbCIsImRlYnVnIiwidGVzdEZ1bmMiLCJ0ZXN0Rm4iLCJpZUNvbXBhdGliaWxpdHlNb2RlIiwiZXhwZWN0ZWRGZWF0dXJlcyIsInRyaW0iLCJSZWFjdERPTVVua25vd25Qcm9wZXJ0eUhvb2siLCJSZWFjdERPTU51bGxJbnB1dFZhbHVlUHJvcEhvb2siLCJSZWFjdERPTUludmFsaWRBUklBSG9vayIsImFkZEhvb2siLCJSZWFjdERPTUlucHV0IiwiUmVhY3RET01PcHRpb24iLCJSZWFjdERPTVRleHRhcmVhIiwiUmVhY3RNdWx0aUNoaWxkIiwiUmVhY3RTZXJ2ZXJSZW5kZXJpbmdUcmFuc2FjdGlvbiIsImdldE5vZGUiLCJDT05URU5UX1RZUEVTIiwiU1RZTEUiLCJIVE1MIiwiZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwiLCJzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmciLCJET0NfRlJBR01FTlRfVFlQRSIsImZyaWVuZGx5U3RyaW5naWZ5Iiwia2V5RXNjYXBlZCIsInN0eWxlTXV0YXRpb25XYXJuaW5nIiwiY2hlY2tBbmRXYXJuRm9yTXV0YXRlZFN0eWxlIiwic3R5bGUxIiwic3R5bGUyIiwiX3RhZyIsImFzc2VydFZhbGlkUHJvcHMiLCJ2b2lkRWxlbWVudFRhZ3MiLCJvbkZvY3VzSW4iLCJvbkZvY3VzT3V0IiwiZW5xdWV1ZVB1dExpc3RlbmVyIiwiY29udGFpbmVySW5mbyIsImlzRG9jdW1lbnRGcmFnbWVudCIsIl9ub2RlIiwiX293bmVyRG9jdW1lbnQiLCJsaXN0ZW5lclRvUHV0IiwiaW5wdXRQb3N0TW91bnQiLCJwb3N0TW91bnRXcmFwcGVyIiwidGV4dGFyZWFQb3N0TW91bnQiLCJvcHRpb25Qb3N0TW91bnQiLCJzZXRBbmRWYWxpZGF0ZUNvbnRlbnRDaGlsZERldiIsImhhc0V4aXN0aW5nQ29udGVudCIsIl9jb250ZW50RGVidWdJRCIsImNvbnRlbnREZWJ1Z0lEIiwiX2FuY2VzdG9ySW5mbyIsIm1lZGlhRXZlbnRzIiwidHJhY2tJbnB1dFZhbHVlIiwidHJhcEJ1YmJsZWRFdmVudHNMb2NhbCIsInBvc3RVcGRhdGVTZWxlY3RXcmFwcGVyIiwib21pdHRlZENsb3NlVGFncyIsImFyZWEiLCJiYXNlIiwiYnIiLCJjb2wiLCJlbWJlZCIsImhyIiwiaW1nIiwia2V5Z2VuIiwibGluayIsIm1ldGEiLCJwYXJhbSIsIndiciIsIm5ld2xpbmVFYXRpbmdUYWdzIiwibGlzdGluZyIsInByZSIsInRleHRhcmVhIiwibWVudWl0ZW0iLCJWQUxJRF9UQUdfUkVHRVgiLCJ2YWxpZGF0ZWRUYWdDYWNoZSIsInZhbGlkYXRlRGFuZ2Vyb3VzVGFnIiwiaXNDdXN0b21Db21wb25lbnQiLCJnbG9iYWxJZENvdW50ZXIiLCJSZWFjdERPTUNvbXBvbmVudCIsIl9uYW1lc3BhY2VVUkkiLCJfcHJldmlvdXNTdHlsZSIsIl9wcmV2aW91c1N0eWxlQ29weSIsIk1peGluIiwiX2lkQ291bnRlciIsIm1vdW50SW1hZ2UiLCJlbCIsImRpdiIsImNyZWF0ZUVsZW1lbnROUyIsIl91cGRhdGVET01Qcm9wZXJ0aWVzIiwibGF6eVRyZWUiLCJfY3JlYXRlSW5pdGlhbENoaWxkcmVuIiwidGFnT3BlbiIsIl9jcmVhdGVPcGVuVGFnTWFya3VwQW5kUHV0TGlzdGVuZXJzIiwidGFnQ29udGVudCIsIl9jcmVhdGVDb250ZW50TWFya3VwIiwiYXV0b0ZvY3VzIiwicHJvcEtleSIsInJlbmRlclRvU3RhdGljTWFya3VwIiwiX19odG1sIiwiY29udGVudFRvVXNlIiwiY2hpbGRyZW5Ub1VzZSIsIm1vdW50Q2hpbGRyZW4iLCJsYXN0UHJvcHMiLCJfdXBkYXRlRE9NQ2hpbGRyZW4iLCJ1cGRhdGVXcmFwcGVyIiwic3R5bGVVcGRhdGVzIiwibGFzdFN0eWxlIiwibmV4dFByb3AiLCJsYXN0UHJvcCIsImxhc3RDb250ZW50IiwibmV4dENvbnRlbnQiLCJsYXN0SHRtbCIsIm5leHRIdG1sIiwibGFzdENoaWxkcmVuIiwibGFzdEhhc0NvbnRlbnRPckh0bWwiLCJuZXh0SGFzQ29udGVudE9ySHRtbCIsInVwZGF0ZVRleHRDb250ZW50IiwidXBkYXRlTWFya3VwIiwidG9wTGV2ZWxXcmFwcGVyIiwiUmVhY3RET01FbXB0eUNvbXBvbmVudCIsImRvbUlEIiwiY3JlYXRlQ29tbWVudCIsInVzZUZpYmVyIiwiZGlkV2FybkNoZWNrZWRMaW5rIiwiZGlkV2FybkNoZWNrZWREZWZhdWx0Q2hlY2tlZCIsImRpZFdhcm5Db250cm9sbGVkVG9VbmNvbnRyb2xsZWQiLCJkaWRXYXJuVW5jb250cm9sbGVkVG9Db250cm9sbGVkIiwiZm9yY2VVcGRhdGVJZk1vdW50ZWQiLCJpc0NvbnRyb2xsZWQiLCJ1c2VzQ2hlY2tlZCIsImhvc3RQcm9wcyIsImRlZmF1bHRDaGVja2VkIiwiaW5pdGlhbENoZWNrZWQiLCJ2YWx1ZUFzTnVtYmVyIiwicGFyc2VGbG9hdCIsInJvb3ROb2RlIiwicXVlcnlSb290IiwiZ3JvdXAiLCJxdWVyeVNlbGVjdG9yQWxsIiwib3RoZXJOb2RlIiwib3RoZXJJbnN0YW5jZSIsIndhcm5lZFByb3BlcnRpZXMiLCJyQVJJQSIsInZhbGlkYXRlUHJvcGVydHkiLCJzdGFuZGFyZE5hbWUiLCJ3YXJuSW52YWxpZEFSSUFQcm9wcyIsImludmFsaWRQcm9wcyIsImlzVmFsaWQiLCJ1bmtub3duUHJvcFN0cmluZyIsImhhbmRsZUVsZW1lbnQiLCJkaWRXYXJuVmFsdWVOdWxsIiwiZGlkV2FybkludmFsaWRPcHRpb25DaGlsZHJlbiIsImZsYXR0ZW5DaGlsZHJlbiIsInNlbGVjdFZhbHVlIiwic2VsZWN0UGFyZW50IiwiZ2V0Tm9kZUZvckNoYXJhY3Rlck9mZnNldCIsImlzQ29sbGFwc2VkIiwiYW5jaG9yTm9kZSIsImFuY2hvck9mZnNldCIsImZvY3VzT2Zmc2V0IiwiZ2V0SUVPZmZzZXRzIiwic2VsZWN0ZWRSYW5nZSIsInNlbGVjdGVkTGVuZ3RoIiwiZnJvbVN0YXJ0IiwiZHVwbGljYXRlIiwibW92ZVRvRWxlbWVudFRleHQiLCJzZXRFbmRQb2ludCIsInN0YXJ0T2Zmc2V0IiwiZW5kT2Zmc2V0IiwiZ2V0TW9kZXJuT2Zmc2V0cyIsInJhbmdlQ291bnQiLCJjdXJyZW50UmFuZ2UiLCJnZXRSYW5nZUF0Iiwic3RhcnRDb250YWluZXIiLCJlbmRDb250YWluZXIiLCJpc1NlbGVjdGlvbkNvbGxhcHNlZCIsInJhbmdlTGVuZ3RoIiwidGVtcFJhbmdlIiwiY2xvbmVSYW5nZSIsInNlbGVjdE5vZGVDb250ZW50cyIsInNldEVuZCIsImlzVGVtcFJhbmdlQ29sbGFwc2VkIiwiZGV0ZWN0aW9uUmFuZ2UiLCJzZXRTdGFydCIsImlzQmFja3dhcmQiLCJjb2xsYXBzZWQiLCJzZXRJRU9mZnNldHMiLCJzZXRNb2Rlcm5PZmZzZXRzIiwiZXh0ZW5kIiwidGVtcCIsInN0YXJ0TWFya2VyIiwiZW5kTWFya2VyIiwib2Zmc2V0IiwicmVtb3ZlQWxsUmFuZ2VzIiwiYWRkUmFuZ2UiLCJ1c2VJRU9mZnNldHMiLCJSZWFjdERPTVRleHRDb21wb25lbnQiLCJfc3RyaW5nVGV4dCIsIl9jbG9zaW5nQ29tbWVudCIsIl9jb21tZW50Tm9kZXMiLCJvcGVuaW5nVmFsdWUiLCJjbG9zaW5nVmFsdWUiLCJjcmVhdGVEb2N1bWVudEZyYWdtZW50IiwiZXNjYXBlZFRleHQiLCJuZXh0VGV4dCIsIm5leHRTdHJpbmdUZXh0IiwiY29tbWVudE5vZGVzIiwiZGlkV2FyblZhbERlZmF1bHRWYWwiLCJuZXdWYWx1ZSIsImluc3RBIiwiaW5zdEIiLCJkZXB0aEEiLCJ0ZW1wQSIsImRlcHRoQiIsInRlbXBCIiwiZGVwdGgiLCJjb21tb24iLCJwYXRoRnJvbSIsInBhdGhUbyIsInJlYWN0UHJvcHMiLCJ3YXJuVW5rbm93blByb3BlcnRpZXMiLCJ1bmtub3duUHJvcHMiLCJSZWFjdEludmFsaWRTZXRTdGF0ZVdhcm5pbmdIb29rIiwiUmVhY3RIb3N0T3BlcmF0aW9uSGlzdG9yeUhvb2siLCJob29rcyIsImRpZEhvb2tUaHJvd0ZvckV2ZW50IiwiY2FsbEhvb2siLCJhcmc0IiwiYXJnNSIsImVtaXRFdmVudCIsImhvb2siLCJpc1Byb2ZpbGluZyIsImZsdXNoSGlzdG9yeSIsImxpZmVDeWNsZVRpbWVyU3RhY2siLCJjdXJyZW50Rmx1c2hOZXN0aW5nIiwiY3VycmVudEZsdXNoTWVhc3VyZW1lbnRzIiwiY3VycmVudEZsdXNoU3RhcnRUaW1lIiwiY3VycmVudFRpbWVyRGVidWdJRCIsImN1cnJlbnRUaW1lclN0YXJ0VGltZSIsImN1cnJlbnRUaW1lck5lc3RlZEZsdXNoRHVyYXRpb24iLCJjdXJyZW50VGltZXJUeXBlIiwibGlmZUN5Y2xlVGltZXJIYXNXYXJuZWQiLCJjbGVhckhpc3RvcnkiLCJnZXRUcmVlU25hcHNob3QiLCJyZWdpc3RlcmVkSURzIiwicmVzZXRNZWFzdXJlbWVudHMiLCJwcmV2aW91c1N0YXJ0VGltZSIsInByZXZpb3VzTWVhc3VyZW1lbnRzIiwicHJldmlvdXNPcGVyYXRpb25zIiwiZ2V0SGlzdG9yeSIsImR1cmF0aW9uIiwibWVhc3VyZW1lbnRzIiwib3BlcmF0aW9ucyIsInRyZWVTbmFwc2hvdCIsImNoZWNrRGVidWdJRCIsImFsbG93Um9vdCIsImJlZ2luTGlmZUN5Y2xlVGltZXIiLCJlbmRMaWZlQ3ljbGVUaW1lciIsInBhdXNlQ3VycmVudExpZmVDeWNsZVRpbWVyIiwiY3VycmVudFRpbWVyIiwic3RhcnRUaW1lIiwibmVzdGVkRmx1c2hTdGFydFRpbWUiLCJyZXN1bWVDdXJyZW50TGlmZUN5Y2xlVGltZXIiLCJfbGlmZUN5Y2xlVGltZXJTdGFjayQiLCJuZXN0ZWRGbHVzaER1cmF0aW9uIiwibGFzdE1hcmtUaW1lU3RhbXAiLCJjYW5Vc2VQZXJmb3JtYW5jZU1lYXN1cmUiLCJtYXJrIiwiY2xlYXJNYXJrcyIsIm1lYXN1cmUiLCJjbGVhck1lYXN1cmVzIiwic2hvdWxkTWFyayIsImlzSG9zdEVsZW1lbnQiLCJtYXJrQmVnaW4iLCJtYXJrVHlwZSIsIm1hcmtOYW1lIiwibWFya0VuZCIsIm1lYXN1cmVtZW50TmFtZSIsInJlbW92ZUhvb2siLCJiZWdpblByb2ZpbGluZyIsImVuZFByb2ZpbGluZyIsImdldEZsdXNoSGlzdG9yeSIsIm9wZXJhdGlvbiIsIm9uVGVzdEV2ZW50IiwiYWRkRGV2dG9vbCIsInJlbW92ZURldnRvb2wiLCJSRVNFVF9CQVRDSEVEX1VQREFURVMiLCJSZWFjdERlZmF1bHRCYXRjaGluZ1N0cmF0ZWd5IiwiRkxVU0hfQkFUQ0hFRF9VUERBVEVTIiwiUmVhY3REZWZhdWx0QmF0Y2hpbmdTdHJhdGVneVRyYW5zYWN0aW9uIiwiYWxyZWFkeUJhdGNoaW5nVXBkYXRlcyIsIlJlYWN0RE9NVHJlZVRyYXZlcnNhbCIsIlJlYWN0SW5qZWN0aW9uIiwiU1ZHRE9NUHJvcGVydHlDb25maWciLCJTZWxlY3RFdmVudFBsdWdpbiIsIlNpbXBsZUV2ZW50UGx1Z2luIiwiYWxyZWFkeUluamVjdGVkIiwiRXZlbnRFbWl0dGVyIiwiSG9zdENvbXBvbmVudCIsIkVtcHR5Q29tcG9uZW50IiwiVXBkYXRlcyIsInJ1bkV2ZW50UXVldWVJbkJhdGNoIiwiZmluZFBhcmVudCIsIlRvcExldmVsQ2FsbGJhY2tCb29rS2VlcGluZyIsImFuY2VzdG9ycyIsImhhbmRsZVRvcExldmVsSW1wbCIsImJvb2tLZWVwaW5nIiwiYW5jZXN0b3IiLCJfaGFuZGxlVG9wTGV2ZWwiLCJzY3JvbGxWYWx1ZU1vbml0b3IiLCJfZW5hYmxlZCIsIl9wcmV2ZW50Q2xlYXJpbmciLCJwcm9jZXNzaW5nQ2hpbGRDb250ZXh0Iiwid2FybkludmFsaWRTZXRTdGF0ZSIsImFkbGVyMzIiLCJUQUdfRU5EIiwiQ09NTUVOVF9TVEFSVCIsImFkZENoZWNrc3VtVG9NYXJrdXAiLCJleGlzdGluZ0NoZWNrc3VtIiwibWFya3VwQ2hlY2tzdW0iLCJtYWtlSW5zZXJ0TWFya3VwIiwibWFrZU1vdmUiLCJtYWtlUmVtb3ZlIiwibWFrZVNldE1hcmt1cCIsIm1ha2VUZXh0Q29udGVudCIsInByb2Nlc3NRdWV1ZSIsInNldENoaWxkcmVuRm9ySW5zdHJ1bWVudGF0aW9uIiwiZ2V0RGVidWdJRCIsImludGVybmFsIiwiX3JlY29uY2lsZXJJbnN0YW50aWF0ZUNoaWxkcmVuIiwibmVzdGVkQ2hpbGRyZW4iLCJfcmVjb25jaWxlclVwZGF0ZUNoaWxkcmVuIiwibmV4dE5lc3RlZENoaWxkcmVuRWxlbWVudHMiLCJfdXBkYXRlQ2hpbGRyZW4iLCJuZXh0TW91bnRJbmRleCIsImxhc3RQbGFjZWROb2RlIiwiX21vdW50Q2hpbGRBdEluZGV4IiwiX3VubW91bnRDaGlsZCIsImNyZWF0ZUNoaWxkIiwiaXNWYWxpZE93bmVyIiwiUmVhY3RPd25lciIsImFkZENvbXBvbmVudEFzUmVmVG8iLCJyZW1vdmVDb21wb25lbnRBc1JlZkZyb20iLCJvd25lclB1YmxpY0luc3RhbmNlIiwiU0VMRUNUSU9OX1JFU1RPUkFUSU9OIiwiRVZFTlRfU1VQUFJFU1NJT04iLCJjdXJyZW50bHlFbmFibGVkIiwicHJldmlvdXNseUVuYWJsZWQiLCJPTl9ET01fUkVBRFlfUVVFVUVJTkciLCJyZWFjdE1vdW50UmVhZHkiLCJwcmV2UmVmIiwicHJldk93bmVyIiwibmV4dFJlZiIsIm5leHRPd25lciIsIlJlYWN0U2VydmVyVXBkYXRlUXVldWUiLCJub29wQ2FsbGJhY2tRdWV1ZSIsIk5TIiwieGxpbmsiLCJ4bWwiLCJBVFRSUyIsImFjY2VudEhlaWdodCIsImFjY3VtdWxhdGUiLCJhZGRpdGl2ZSIsImFsaWdubWVudEJhc2VsaW5lIiwiYWxsb3dSZW9yZGVyIiwiYWxwaGFiZXRpYyIsImFtcGxpdHVkZSIsImFyYWJpY0Zvcm0iLCJhc2NlbnQiLCJhdHRyaWJ1dGVUeXBlIiwiYXV0b1JldmVyc2UiLCJhemltdXRoIiwiYmFzZUZyZXF1ZW5jeSIsImJhc2VQcm9maWxlIiwiYmFzZWxpbmVTaGlmdCIsImJib3giLCJiZWdpbiIsImJpYXMiLCJieSIsImNhbGNNb2RlIiwiY2FwSGVpZ2h0IiwiY2xpcCIsImNsaXBQYXRoIiwiY2xpcFJ1bGUiLCJjbGlwUGF0aFVuaXRzIiwiY29sb3JJbnRlcnBvbGF0aW9uIiwiY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVycyIsImNvbG9yUHJvZmlsZSIsImNvbG9yUmVuZGVyaW5nIiwiY29udGVudFNjcmlwdFR5cGUiLCJjb250ZW50U3R5bGVUeXBlIiwiY3Vyc29yIiwiY3giLCJjeSIsImRlY2VsZXJhdGUiLCJkZXNjZW50IiwiZGlmZnVzZUNvbnN0YW50IiwiZGlyZWN0aW9uIiwiZGlzcGxheSIsImRpdmlzb3IiLCJkb21pbmFudEJhc2VsaW5lIiwiZHVyIiwiZHgiLCJkeSIsImVkZ2VNb2RlIiwiZWxldmF0aW9uIiwiZW5hYmxlQmFja2dyb3VuZCIsImV4cG9uZW50IiwiZXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCIsImZpbGwiLCJmaWxsUnVsZSIsImZpbHRlclJlcyIsImZpbHRlclVuaXRzIiwiZmxvb2RDb2xvciIsImZvY3VzYWJsZSIsImZvbnRTaXplQWRqdXN0IiwiZm9udFN0cmV0Y2giLCJmeCIsImZ5IiwiZzEiLCJnMiIsImdseXBoTmFtZSIsImdseXBoT3JpZW50YXRpb25Ib3Jpem9udGFsIiwiZ2x5cGhPcmllbnRhdGlvblZlcnRpY2FsIiwiZ2x5cGhSZWYiLCJncmFkaWVudFRyYW5zZm9ybSIsImdyYWRpZW50VW5pdHMiLCJoYW5naW5nIiwiaG9yaXpBZHZYIiwiaG9yaXpPcmlnaW5YIiwiaWRlb2dyYXBoaWMiLCJpbWFnZVJlbmRlcmluZyIsImluMiIsImludGVyY2VwdCIsImsxIiwiazIiLCJrMyIsIms0Iiwia2VybmVsTWF0cml4Iiwia2VybmVsVW5pdExlbmd0aCIsImtlcm5pbmciLCJrZXlQb2ludHMiLCJrZXlTcGxpbmVzIiwia2V5VGltZXMiLCJsZW5ndGhBZGp1c3QiLCJsZXR0ZXJTcGFjaW5nIiwibGlnaHRpbmdDb2xvciIsImxpbWl0aW5nQ29uZUFuZ2xlIiwibG9jYWwiLCJtYXJrZXJFbmQiLCJtYXJrZXJNaWQiLCJtYXJrZXJTdGFydCIsIm1hcmtlckhlaWdodCIsIm1hcmtlclVuaXRzIiwibWFya2VyV2lkdGgiLCJtYXNrIiwibWFza0NvbnRlbnRVbml0cyIsIm1hc2tVbml0cyIsIm1hdGhlbWF0aWNhbCIsIm1vZGUiLCJudW1PY3RhdmVzIiwib3BlcmF0b3IiLCJvcmllbnQiLCJvcmllbnRhdGlvbiIsIm92ZXJmbG93Iiwib3ZlcmxpbmVQb3NpdGlvbiIsIm92ZXJsaW5lVGhpY2tuZXNzIiwicGFpbnRPcmRlciIsInBhbm9zZTEiLCJwYXRoTGVuZ3RoIiwicGF0dGVybkNvbnRlbnRVbml0cyIsInBhdHRlcm5UcmFuc2Zvcm0iLCJwYXR0ZXJuVW5pdHMiLCJwb2ludGVyRXZlbnRzIiwicG9pbnRzIiwicG9pbnRzQXRYIiwicG9pbnRzQXRZIiwicG9pbnRzQXRaIiwicHJlc2VydmVBbHBoYSIsInByZXNlcnZlQXNwZWN0UmF0aW8iLCJwcmltaXRpdmVVbml0cyIsInIiLCJyYWRpdXMiLCJyZWZYIiwicmVmWSIsInJlbmRlcmluZ0ludGVudCIsInJlcGVhdENvdW50IiwicmVwZWF0RHVyIiwicmVxdWlyZWRFeHRlbnNpb25zIiwicmVxdWlyZWRGZWF0dXJlcyIsInJlc3RhcnQiLCJyb3RhdGUiLCJyeCIsInJ5Iiwic2NhbGUiLCJzZWVkIiwic2hhcGVSZW5kZXJpbmciLCJzbG9wZSIsInNwYWNpbmciLCJzcGVjdWxhckNvbnN0YW50Iiwic3BlY3VsYXJFeHBvbmVudCIsInNwZWVkIiwic3ByZWFkTWV0aG9kIiwic3RkRGV2aWF0aW9uIiwic3RlbWgiLCJzdGVtdiIsInN0aXRjaFRpbGVzIiwic3RvcENvbG9yIiwic3RyaWtldGhyb3VnaFBvc2l0aW9uIiwic3RyaWtldGhyb3VnaFRoaWNrbmVzcyIsInN0cm9rZSIsInN0cm9rZUxpbmVjYXAiLCJzdHJva2VMaW5lam9pbiIsInN1cmZhY2VTY2FsZSIsInN5c3RlbUxhbmd1YWdlIiwidGFibGVWYWx1ZXMiLCJ0YXJnZXRYIiwidGFyZ2V0WSIsInRleHRBbmNob3IiLCJ0ZXh0RGVjb3JhdGlvbiIsInRleHRSZW5kZXJpbmciLCJ0ZXh0TGVuZ3RoIiwidTEiLCJ1MiIsInVuZGVybGluZVBvc2l0aW9uIiwidW5kZXJsaW5lVGhpY2tuZXNzIiwidW5pY29kZSIsInVuaWNvZGVCaWRpIiwidW5pY29kZVJhbmdlIiwidW5pdHNQZXJFbSIsInZBbHBoYWJldGljIiwidkhhbmdpbmciLCJ2SWRlb2dyYXBoaWMiLCJ2TWF0aGVtYXRpY2FsIiwidmVjdG9yRWZmZWN0IiwidmVydEFkdlkiLCJ2ZXJ0T3JpZ2luWCIsInZlcnRPcmlnaW5ZIiwidmlld0JveCIsInZpZXdUYXJnZXQiLCJ2aXNpYmlsaXR5Iiwid2lkdGhzIiwid29yZFNwYWNpbmciLCJ3cml0aW5nTW9kZSIsInhIZWlnaHQiLCJ4MSIsIngyIiwieENoYW5uZWxTZWxlY3RvciIsInhsaW5rQWN0dWF0ZSIsInhsaW5rQXJjcm9sZSIsInhsaW5rSHJlZiIsInhsaW5rUm9sZSIsInhsaW5rU2hvdyIsInhsaW5rVGl0bGUiLCJ4bGlua1R5cGUiLCJ4bWxCYXNlIiwieG1sbnMiLCJ4bWxuc1hsaW5rIiwieG1sTGFuZyIsInhtbFNwYWNlIiwieTEiLCJ5MiIsInlDaGFubmVsU2VsZWN0b3IiLCJ6Iiwiem9vbUFuZFBhbiIsInNraXBTZWxlY3Rpb25DaGFuZ2VFdmVudCIsImxhc3RTZWxlY3Rpb24iLCJtb3VzZURvd24iLCJoYXNMaXN0ZW5lciIsImJvdW5kaW5nVG9wIiwibGVmdCIsImJvdW5kaW5nTGVmdCIsImNvbnN0cnVjdFNlbGVjdEV2ZW50IiwiY3VycmVudFNlbGVjdGlvbiIsIlN5bnRoZXRpY0FuaW1hdGlvbkV2ZW50IiwiU3ludGhldGljQ2xpcGJvYXJkRXZlbnQiLCJTeW50aGV0aWNGb2N1c0V2ZW50IiwiU3ludGhldGljS2V5Ym9hcmRFdmVudCIsIlN5bnRoZXRpY0RyYWdFdmVudCIsIlN5bnRoZXRpY1RvdWNoRXZlbnQiLCJTeW50aGV0aWNUcmFuc2l0aW9uRXZlbnQiLCJTeW50aGV0aWNXaGVlbEV2ZW50IiwidG9wTGV2ZWxFdmVudHNUb0Rpc3BhdGNoQ29uZmlnIiwiY2FwaXRhbGl6ZWRFdmVudCIsIm9uRXZlbnQiLCJ0b3BFdmVudCIsIm9uQ2xpY2tMaXN0ZW5lcnMiLCJFdmVudENvbnN0cnVjdG9yIiwiQW5pbWF0aW9uRXZlbnRJbnRlcmZhY2UiLCJhbmltYXRpb25OYW1lIiwiZWxhcHNlZFRpbWUiLCJwc2V1ZG9FbGVtZW50IiwiQ2xpcGJvYXJkRXZlbnRJbnRlcmZhY2UiLCJjbGlwYm9hcmREYXRhIiwiQ29tcG9zaXRpb25FdmVudEludGVyZmFjZSIsIkRyYWdFdmVudEludGVyZmFjZSIsImRhdGFUcmFuc2ZlciIsIkZvY3VzRXZlbnRJbnRlcmZhY2UiLCJJbnB1dEV2ZW50SW50ZXJmYWNlIiwiZ2V0RXZlbnRLZXkiLCJLZXlib2FyZEV2ZW50SW50ZXJmYWNlIiwicmVwZWF0IiwibG9jYWxlIiwiVG91Y2hFdmVudEludGVyZmFjZSIsInRvdWNoZXMiLCJ0YXJnZXRUb3VjaGVzIiwiY2hhbmdlZFRvdWNoZXMiLCJUcmFuc2l0aW9uRXZlbnRJbnRlcmZhY2UiLCJXaGVlbEV2ZW50SW50ZXJmYWNlIiwiZGVsdGFYIiwid2hlZWxEZWx0YVgiLCJkZWx0YVkiLCJ3aGVlbERlbHRhWSIsIndoZWVsRGVsdGEiLCJkZWx0YVoiLCJkZWx0YU1vZGUiLCJNT0QiLCJsIiwibSIsImNvbXBvbmVudFN0YWNrSW5mbyIsInN0eWxlV2FybmluZ3MiLCJpc0VtcHR5IiwiaXNOb25OdW1lcmljIiwid2FybmVkIiwid2FybmluZ3MiLCJjb21wb25lbnRPckVsZW1lbnQiLCJmbGF0dGVuU2luZ2xlQ2hpbGRJbnRvQ29udGV4dCIsIm5vcm1hbGl6ZUtleSIsIkVzYyIsIlNwYWNlYmFyIiwiTGVmdCIsIlVwIiwiUmlnaHQiLCJEb3duIiwiRGVsIiwiV2luIiwiQXBwcyIsIlNjcm9sbCIsIk1velByaW50YWJsZUtleSIsInRyYW5zbGF0ZVRvS2V5IiwiZ2V0TGVhZk5vZGUiLCJnZXRTaWJsaW5nTm9kZSIsIm5vZGVTdGFydCIsIm5vZGVFbmQiLCJtYWtlUHJlZml4TWFwIiwic3R5bGVQcm9wIiwidmVuZG9yUHJlZml4ZXMiLCJhbmltYXRpb25lbmQiLCJhbmltYXRpb25pdGVyYXRpb24iLCJhbmltYXRpb25zdGFydCIsInRyYW5zaXRpb25lbmQiLCJwcmVmaXhlZEV2ZW50TmFtZXMiLCJhbmltYXRpb24iLCJ0cmFuc2l0aW9uIiwicHJlZml4TWFwIiwiRmlsZUlucHV0IiwicGFyZW50IiwicG9zaXRpb24iLCJmaWxlIiwiaGFuZGxlQ2hhbmdlIiwiZGlkV2FybkFib3V0UmVjZWl2aW5nU3RvcmUiLCJ3YXJuQWJvdXRSZWNlaXZpbmdTdG9yZSIsIl9Qcm92aWRlciRjaGlsZENvbnRleCIsInN1YktleSIsImNyZWF0ZUNvbm5lY3QiLCJmYWN0b3JpZXMiLCJzdHJpY3RFcXVhbCIsIl9yZWYkY29ubmVjdEhPQyIsImNvbm5lY3RIT0MiLCJfcmVmJG1hcFN0YXRlVG9Qcm9wc0YiLCJtYXBTdGF0ZVRvUHJvcHNGYWN0b3JpZXMiLCJfcmVmJG1hcERpc3BhdGNoVG9Qcm8iLCJtYXBEaXNwYXRjaFRvUHJvcHNGYWN0b3JpZXMiLCJfcmVmJG1lcmdlUHJvcHNGYWN0b3IiLCJtZXJnZVByb3BzRmFjdG9yaWVzIiwiX3JlZiRzZWxlY3RvckZhY3RvcnkiLCJtYXBTdGF0ZVRvUHJvcHMiLCJtYXBEaXNwYXRjaFRvUHJvcHMiLCJtZXJnZVByb3BzIiwiX3JlZjIkcHVyZSIsInB1cmUiLCJfcmVmMiRhcmVTdGF0ZXNFcXVhbCIsImFyZVN0YXRlc0VxdWFsIiwiX3JlZjIkYXJlT3duUHJvcHNFcXVhIiwiYXJlT3duUHJvcHNFcXVhbCIsIl9yZWYyJGFyZVN0YXRlUHJvcHNFcSIsImFyZVN0YXRlUHJvcHNFcXVhbCIsIl9yZWYyJGFyZU1lcmdlZFByb3BzRSIsImFyZU1lcmdlZFByb3BzRXF1YWwiLCJleHRyYU9wdGlvbnMiLCJpbml0TWFwU3RhdGVUb1Byb3BzIiwiaW5pdE1hcERpc3BhdGNoVG9Qcm9wcyIsImluaXRNZXJnZVByb3BzIiwid2hlbk1hcERpc3BhdGNoVG9Qcm9wc0lzRnVuY3Rpb24iLCJ3aGVuTWFwRGlzcGF0Y2hUb1Byb3BzSXNNaXNzaW5nIiwid2hlbk1hcERpc3BhdGNoVG9Qcm9wc0lzT2JqZWN0Iiwid2hlbk1hcFN0YXRlVG9Qcm9wc0lzRnVuY3Rpb24iLCJ3aGVuTWFwU3RhdGVUb1Byb3BzSXNNaXNzaW5nIiwiZGVmYXVsdE1lcmdlUHJvcHMiLCJ3cmFwTWVyZ2VQcm9wc0Z1bmMiLCJ3aGVuTWVyZ2VQcm9wc0lzRnVuY3Rpb24iLCJ3aGVuTWVyZ2VQcm9wc0lzT21pdHRlZCIsInN0YXRlUHJvcHMiLCJkaXNwYXRjaFByb3BzIiwiaW5pdE1lcmdlUHJvcHNQcm94eSIsImhhc1J1bk9uY2UiLCJtZXJnZWRQcm9wcyIsIm1lcmdlUHJvcHNQcm94eSIsIm5leHRNZXJnZWRQcm9wcyIsImltcHVyZUZpbmFsUHJvcHNTZWxlY3RvckZhY3RvcnkiLCJwdXJlRmluYWxQcm9wc1NlbGVjdG9yRmFjdG9yeSIsImZpbmFsUHJvcHNTZWxlY3RvckZhY3RvcnkiLCJpbXB1cmVGaW5hbFByb3BzU2VsZWN0b3IiLCJoYXNSdW5BdExlYXN0T25jZSIsImhhbmRsZUZpcnN0Q2FsbCIsImZpcnN0U3RhdGUiLCJmaXJzdE93blByb3BzIiwiaGFuZGxlTmV3UHJvcHNBbmROZXdTdGF0ZSIsImhhbmRsZU5ld1Byb3BzIiwiaGFuZGxlTmV3U3RhdGUiLCJuZXh0U3RhdGVQcm9wcyIsInN0YXRlUHJvcHNDaGFuZ2VkIiwiaGFuZGxlU3Vic2VxdWVudENhbGxzIiwibmV4dE93blByb3BzIiwicHJvcHNDaGFuZ2VkIiwic3RhdGVDaGFuZ2VkIiwicHVyZUZpbmFsUHJvcHNTZWxlY3RvciIsInZlcmlmeVN1YnNlbGVjdG9ycyIsInZlcmlmeSIsIkNMRUFSRUQiLCJudWxsTGlzdGVuZXJzIiwibm90aWZ5IiwiY3JlYXRlTGlzdGVuZXJDb2xsZWN0aW9uIiwiY2xlYXIiLCJTdWJzY3JpcHRpb24iLCJhZGROZXN0ZWRTdWIiLCJoYXNPd24iLCJhY3RpdmVDbGFzc05hbWUiLCJhY3RpdmVTdHlsZSIsImdldElzQWN0aXZlIiwiZW5hYmxlIiwiZGlzYWJsZSIsIndoZW4iLCJpc1N0YXRpYyIsIm5vcm1hbGl6ZUxvY2F0aW9uIiwiX29iamVjdCRwYXRobmFtZSIsIl9vYmplY3Qkc2VhcmNoIiwiX29iamVjdCRoYXNoIiwiYWRkQmFzZW5hbWUiLCJjcmVhdGVVUkwiLCJzdGF0aWNIYW5kbGVyIiwiaGFuZGxlUHVzaCIsImhhbmRsZVJlcGxhY2UiLCJfdGhpcyRwcm9wczIiLCJoYW5kbGVMaXN0ZW4iLCJoYW5kbGVCbG9jayIsIl9lbGVtZW50JHByb3BzIiwicGF0aFByb3AiLCJDIiwid3JhcHBlZENvbXBvbmVudFJlZiIsInJlbWFpbmluZ1Byb3BzIiwicm91dGVDb21wb25lbnRQcm9wcyIsImlzYXJyYXkiLCJwYXRoVG9SZWdleHAiLCJwYXJzZSIsImNvbXBpbGUiLCJ0b2tlbnNUb0Z1bmN0aW9uIiwidG9rZW5zVG9SZWdFeHAiLCJQQVRIX1JFR0VYUCIsInRva2VucyIsImRlZmF1bHREZWxpbWl0ZXIiLCJkZWxpbWl0ZXIiLCJlc2NhcGVkIiwibW9kaWZpZXIiLCJhc3RlcmlzayIsIm9wdGlvbmFsIiwiZXNjYXBlR3JvdXAiLCJlc2NhcGVTdHJpbmciLCJlbmNvZGVVUklDb21wb25lbnRQcmV0dHkiLCJlbmNvZGVVUkkiLCJlbmNvZGVBc3RlcmlzayIsIm1hdGNoZXMiLCJvcHRzIiwiZW5jb2RlIiwicHJldHR5IiwidG9rZW4iLCJzZWdtZW50IiwiYXR0YWNoS2V5cyIsImZsYWdzIiwic2Vuc2l0aXZlIiwicmVnZXhwVG9SZWdleHAiLCJncm91cHMiLCJhcnJheVRvUmVnZXhwIiwicGFydHMiLCJyZWdleHAiLCJzdHJpbmdUb1JlZ2V4cCIsImVuZHNXaXRoRGVsaW1pdGVyIiwidXNlclByb3ZpZGVkS2V5RXNjYXBlUmVnZXgiLCJlc2NhcGVVc2VyUHJvdmlkZWRLZXkiLCJGb3JFYWNoQm9va0tlZXBpbmciLCJmb3JFYWNoRnVuY3Rpb24iLCJmb3JFYWNoQ29udGV4dCIsImZvckVhY2hTaW5nbGVDaGlsZCIsImZvckVhY2hDaGlsZHJlbiIsImZvckVhY2hGdW5jIiwiTWFwQm9va0tlZXBpbmciLCJtYXBSZXN1bHQiLCJrZXlQcmVmaXgiLCJtYXBGdW5jdGlvbiIsIm1hcENvbnRleHQiLCJtYXBTaW5nbGVDaGlsZEludG9Db250ZXh0IiwiY2hpbGRLZXkiLCJtYXBwZWRDaGlsZCIsIm1hcEludG9XaXRoS2V5UHJlZml4SW50ZXJuYWwiLCJlc2NhcGVkUHJlZml4IiwibWFwQ2hpbGRyZW4iLCJmb3JFYWNoU2luZ2xlQ2hpbGREdW1teSIsImNvdW50Q2hpbGRyZW4iLCJjcmVhdGVET01GYWN0b3J5IiwiYWJiciIsImFkZHJlc3MiLCJhcnRpY2xlIiwiYXNpZGUiLCJhdWRpbyIsImJkaSIsImJkbyIsImJpZyIsImJsb2NrcXVvdGUiLCJjYW52YXMiLCJjYXB0aW9uIiwiY29sZ3JvdXAiLCJkYXRhbGlzdCIsImRkIiwiZGVsIiwiZGV0YWlscyIsImRmbiIsImRpYWxvZyIsImRsIiwiZHQiLCJlbSIsImZpZWxkc2V0IiwiZmlnY2FwdGlvbiIsImZpZ3VyZSIsImZvb3RlciIsImgxIiwiaDIiLCJoMyIsImg0IiwiaDUiLCJoNiIsImhlYWQiLCJoZWFkZXIiLCJoZ3JvdXAiLCJpZnJhbWUiLCJpbnMiLCJrYmQiLCJsZWdlbmQiLCJsaSIsIm1haW4iLCJtZXRlciIsIm5hdiIsIm5vc2NyaXB0Iiwib2wiLCJvcHRncm91cCIsIm9wdGlvbiIsIm91dHB1dCIsInAiLCJwaWN0dXJlIiwicHJvZ3Jlc3MiLCJxIiwicnAiLCJydCIsInJ1YnkiLCJzYW1wIiwic2NyaXB0Iiwic2VjdGlvbiIsInNtYWxsIiwic3Ryb25nIiwic3ViIiwic3VwIiwidGFibGUiLCJ0Ym9keSIsInRkIiwidGZvb3QiLCJ0aCIsInRoZWFkIiwidHIiLCJ1IiwidWwiLCJ2aWRlbyIsImNpcmNsZSIsImRlZnMiLCJlbGxpcHNlIiwibGluZSIsImxpbmVhckdyYWRpZW50IiwicG9seWdvbiIsInBvbHlsaW5lIiwicmFkaWFsR3JhZGllbnQiLCJyZWN0Iiwic3RvcCIsInRzcGFuIiwiX3JlcXVpcmUiLCJfcmVxdWlyZTIiLCJuZXh0RGVidWdJRCIsIm1pZGRsZXdhcmVzIiwiX2Rpc3BhdGNoIiwiY2hhaW4iLCJtaWRkbGV3YXJlQVBJIiwibWlkZGxld2FyZSIsImJpbmRBY3Rpb25DcmVhdG9yIiwiYWN0aW9uQ3JlYXRvciIsImFjdGlvbkNyZWF0b3JzIiwiYm91bmRBY3Rpb25DcmVhdG9ycyIsImdldFVuZGVmaW5lZFN0YXRlRXJyb3JNZXNzYWdlIiwiYWN0aW9uVHlwZSIsImFjdGlvbk5hbWUiLCJnZXRVbmV4cGVjdGVkU3RhdGVTaGFwZVdhcm5pbmdNZXNzYWdlIiwiaW5wdXRTdGF0ZSIsInJlZHVjZXJzIiwidW5leHBlY3RlZEtleUNhY2hlIiwicmVkdWNlcktleXMiLCJhcmd1bWVudE5hbWUiLCJ1bmV4cGVjdGVkS2V5cyIsImFzc2VydFJlZHVjZXJTYW5pdHkiLCJmaW5hbFJlZHVjZXJzIiwiZmluYWxSZWR1Y2VyS2V5cyIsInNhbml0eUVycm9yIiwiY29tYmluYXRpb24iLCJ3YXJuaW5nTWVzc2FnZSIsImhhc0NoYW5nZWQiLCJwcmV2aW91c1N0YXRlRm9yS2V5IiwibmV4dFN0YXRlRm9yS2V5IiwiZXJyb3JNZXNzYWdlIiwiaXNBYnNvbHV0ZSIsInNwbGljZU9uZSIsInJlc29sdmVQYXRobmFtZSIsInRvUGFydHMiLCJmcm9tUGFydHMiLCJpc1RvQWJzIiwiaXNGcm9tQWJzIiwibXVzdEVuZEFicyIsImhhc1RyYWlsaW5nU2xhc2giLCJ1cCIsInBhcnQiLCJ1bnNoaWZ0IiwiX3BvbnlmaWxsIiwiX3BvbnlmaWxsMiIsInN5bWJvbE9ic2VydmFibGVQb255ZmlsbCIsIl9TeW1ib2wiLCJ2YWx1ZUVxdWFsIiwiYVR5cGUiLCJiVHlwZSIsImFWYWx1ZSIsInZhbHVlT2YiLCJiVmFsdWUiLCJhS2V5cyIsImJLZXlzIiwid2VicGFja1BvbHlmaWxsIiwiZGVwcmVjYXRlIiwicGF0aHMiLCJnZXRGaWxlcyIsImZzIiwiZ2V0Rm9sZGVycyIsImZvbGRlciIsImdldEltYWdlUGF0aCIsImNyZWF0ZUNsaWNrSGFuZGxlciIsImVsZW1lbnRTdHlsZSIsImJhY2tncm91bmRTaXplIiwiZ2V0TXVzaWMiLCJnZXRQaG90b3MiLCJnZXRTaGFyZWQiLCJCcmVhZGNydW1icyIsImNydW1icyIsImN1cnJlbnRMaW5rIiwiY3J1bWIiLCJEaXNwbGF5TWVudSIsIlRvcE5hdiIsInF1ZXJ5c3RyaW5nIiwic2VhcmNoQnlRdWVyeSIsImdldEVsZW1lbnRCeUlkIiwiYW5vbiIsInVzZXJncm91cCIsInNwZWNpZmljVXNlciJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxtREFBMkMsY0FBYzs7QUFFekQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxtQ0FB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QU0sS0FGSTtBQUdWQyxtQkFBVyxJQUhEO0FBSVZDLHNCQUFjO0FBSko7QUFOZCxLQWxnQlEsRUErZ0JSO0FBQ0UzNkQsdUJBQWlCLGNBRG5CO0FBRUVnYixnQkFBVSxFQUZaO0FBR0Vqc0QsYUFBTyw2QkFIVDtBQUlFOGdELFlBQU0sWUFKUjtBQUtFNTBDLFlBQU0sTUFMUjtBQU1FZ2tGLGtCQUFZO0FBQ1ZyaUYsZUFBTyxJQURHO0FBRVY2OUYsY0FBTSxLQUZJO0FBR1ZDLG1CQUFXLElBSEQ7QUFJVkMsc0JBQWM7QUFKSjtBQU5kLEtBL2dCUSxDQURBO0FBZ2lCVnovQyxpQkFBYTtBQWhpQkgsR0FGQyxFIiwiZmlsZSI6ImluZGV4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gaWRlbnRpdHkgZnVuY3Rpb24gZm9yIGNhbGxpbmcgaGFybW9ueSBpbXBvcnRzIHdpdGggdGhlIGNvcnJlY3QgY29udGV4dFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5pID0gZnVuY3Rpb24odmFsdWUpIHsgcmV0dXJuIHZhbHVlOyB9O1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHtcbiBcdFx0XHRcdGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gXHRcdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuIFx0XHRcdFx0Z2V0OiBnZXR0ZXJcbiBcdFx0XHR9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSAyNzYpO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIHdlYnBhY2svYm9vdHN0cmFwIDQ4OTFjZjViNWU4YWUxMjQyNmE3IiwiLy8gc2hpbSBmb3IgdXNpbmcgcHJvY2VzcyBpbiBicm93c2VyXG52YXIgcHJvY2VzcyA9IG1vZHVsZS5leHBvcnRzID0ge307XG5cbi8vIGNhY2hlZCBmcm9tIHdoYXRldmVyIGdsb2JhbCBpcyBwcmVzZW50IHNvIHRoYXQgdGVzdCBydW5uZXJzIHRoYXQgc3R1YiBpdFxuLy8gZG9uJ3QgYnJlYWsgdGhpbmdzLiAgQnV0IHdlIG5lZWQgdG8gd3JhcCBpdCBpbiBhIHRyeSBjYXRjaCBpbiBjYXNlIGl0IGlzXG4vLyB3cmFwcGVkIGluIHN0cmljdCBtb2RlIGNvZGUgd2hpY2ggZG9lc24ndCBkZWZpbmUgYW55IGdsb2JhbHMuICBJdCdzIGluc2lkZSBhXG4vLyBmdW5jdGlvbiBiZWNhdXNlIHRyeS9jYXRjaGVzIGRlb3B0aW1pemUgaW4gY2VydGFpbiBlbmdpbmVzLlxuXG52YXIgY2FjaGVkU2V0VGltZW91dDtcbnZhciBjYWNoZWRDbGVhclRpbWVvdXQ7XG5cbmZ1bmN0aW9uIGRlZmF1bHRTZXRUaW1vdXQoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdzZXRUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkJyk7XG59XG5mdW5jdGlvbiBkZWZhdWx0Q2xlYXJUaW1lb3V0ICgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2NsZWFyVGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCcpO1xufVxuKGZ1bmN0aW9uICgpIHtcbiAgICB0cnkge1xuICAgICAgICBpZiAodHlwZW9mIHNldFRpbWVvdXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBzZXRUaW1lb3V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IGRlZmF1bHRTZXRUaW1vdXQ7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBkZWZhdWx0U2V0VGltb3V0O1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBpZiAodHlwZW9mIGNsZWFyVGltZW91dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gY2xlYXJUaW1lb3V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gZGVmYXVsdENsZWFyVGltZW91dDtcbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gZGVmYXVsdENsZWFyVGltZW91dDtcbiAgICB9XG59ICgpKVxuZnVuY3Rpb24gcnVuVGltZW91dChmdW4pIHtcbiAgICBpZiAoY2FjaGVkU2V0VGltZW91dCA9PT0gc2V0VGltZW91dCkge1xuICAgICAgICAvL25vcm1hbCBlbnZpcm9tZW50cyBpbiBzYW5lIHNpdHVhdGlvbnNcbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9XG4gICAgLy8gaWYgc2V0VGltZW91dCB3YXNuJ3QgYXZhaWxhYmxlIGJ1dCB3YXMgbGF0dGVyIGRlZmluZWRcbiAgICBpZiAoKGNhY2hlZFNldFRpbWVvdXQgPT09IGRlZmF1bHRTZXRUaW1vdXQgfHwgIWNhY2hlZFNldFRpbWVvdXQpICYmIHNldFRpbWVvdXQpIHtcbiAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IHNldFRpbWVvdXQ7XG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIC8vIHdoZW4gd2hlbiBzb21lYm9keSBoYXMgc2NyZXdlZCB3aXRoIHNldFRpbWVvdXQgYnV0IG5vIEkuRS4gbWFkZG5lc3NcbiAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9IGNhdGNoKGUpe1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gV2hlbiB3ZSBhcmUgaW4gSS5FLiBidXQgdGhlIHNjcmlwdCBoYXMgYmVlbiBldmFsZWQgc28gSS5FLiBkb2Vzbid0IHRydXN0IHRoZSBnbG9iYWwgb2JqZWN0IHdoZW4gY2FsbGVkIG5vcm1hbGx5XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dC5jYWxsKG51bGwsIGZ1biwgMCk7XG4gICAgICAgIH0gY2F0Y2goZSl7XG4gICAgICAgICAgICAvLyBzYW1lIGFzIGFib3ZlIGJ1dCB3aGVuIGl0J3MgYSB2ZXJzaW9uIG9mIEkuRS4gdGhhdCBtdXN0IGhhdmUgdGhlIGdsb2JhbCBvYmplY3QgZm9yICd0aGlzJywgaG9wZnVsbHkgb3VyIGNvbnRleHQgY29ycmVjdCBvdGhlcndpc2UgaXQgd2lsbCB0aHJvdyBhIGdsb2JhbCBlcnJvclxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQuY2FsbCh0aGlzLCBmdW4sIDApO1xuICAgICAgICB9XG4gICAgfVxuXG5cbn1cbmZ1bmN0aW9uIHJ1bkNsZWFyVGltZW91dChtYXJrZXIpIHtcbiAgICBpZiAoY2FjaGVkQ2xlYXJUaW1lb3V0ID09PSBjbGVhclRpbWVvdXQpIHtcbiAgICAgICAgLy9ub3JtYWwgZW52aXJvbWVudHMgaW4gc2FuZSBzaXR1YXRpb25zXG4gICAgICAgIHJldHVybiBjbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9XG4gICAgLy8gaWYgY2xlYXJUaW1lb3V0IHdhc24ndCBhdmFpbGFibGUgYnV0IHdhcyBsYXR0ZXIgZGVmaW5lZFxuICAgIGlmICgoY2FjaGVkQ2xlYXJUaW1lb3V0ID09PSBkZWZhdWx0Q2xlYXJUaW1lb3V0IHx8ICFjYWNoZWRDbGVhclRpbWVvdXQpICYmIGNsZWFyVGltZW91dCkge1xuICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBjbGVhclRpbWVvdXQ7XG4gICAgICAgIHJldHVybiBjbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gd2hlbiB3aGVuIHNvbWVib2R5IGhhcyBzY3Jld2VkIHdpdGggc2V0VGltZW91dCBidXQgbm8gSS5FLiBtYWRkbmVzc1xuICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfSBjYXRjaCAoZSl7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBXaGVuIHdlIGFyZSBpbiBJLkUuIGJ1dCB0aGUgc2NyaXB0IGhhcyBiZWVuIGV2YWxlZCBzbyBJLkUuIGRvZXNuJ3QgIHRydXN0IHRoZSBnbG9iYWwgb2JqZWN0IHdoZW4gY2FsbGVkIG5vcm1hbGx5XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0LmNhbGwobnVsbCwgbWFya2VyKTtcbiAgICAgICAgfSBjYXRjaCAoZSl7XG4gICAgICAgICAgICAvLyBzYW1lIGFzIGFib3ZlIGJ1dCB3aGVuIGl0J3MgYSB2ZXJzaW9uIG9mIEkuRS4gdGhhdCBtdXN0IGhhdmUgdGhlIGdsb2JhbCBvYmplY3QgZm9yICd0aGlzJywgaG9wZnVsbHkgb3VyIGNvbnRleHQgY29ycmVjdCBvdGhlcndpc2UgaXQgd2lsbCB0aHJvdyBhIGdsb2JhbCBlcnJvci5cbiAgICAgICAgICAgIC8vIFNvbWUgdmVyc2lvbnMgb2YgSS5FLiBoYXZlIGRpZmZlcmVudCBydWxlcyBmb3IgY2xlYXJUaW1lb3V0IHZzIHNldFRpbWVvdXRcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQuY2FsbCh0aGlzLCBtYXJrZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG5cblxufVxudmFyIHF1ZXVlID0gW107XG52YXIgZHJhaW5pbmcgPSBmYWxzZTtcbnZhciBjdXJyZW50UXVldWU7XG52YXIgcXVldWVJbmRleCA9IC0xO1xuXG5mdW5jdGlvbiBjbGVhblVwTmV4dFRpY2soKSB7XG4gICAgaWYgKCFkcmFpbmluZyB8fCAhY3VycmVudFF1ZXVlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBpZiAoY3VycmVudFF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBxdWV1ZSA9IGN1cnJlbnRRdWV1ZS5jb25jYXQocXVldWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICB9XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBkcmFpblF1ZXVlKCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBkcmFpblF1ZXVlKCkge1xuICAgIGlmIChkcmFpbmluZykge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciB0aW1lb3V0ID0gcnVuVGltZW91dChjbGVhblVwTmV4dFRpY2spO1xuICAgIGRyYWluaW5nID0gdHJ1ZTtcblxuICAgIHZhciBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgd2hpbGUobGVuKSB7XG4gICAgICAgIGN1cnJlbnRRdWV1ZSA9IHF1ZXVlO1xuICAgICAgICBxdWV1ZSA9IFtdO1xuICAgICAgICB3aGlsZSAoKytxdWV1ZUluZGV4IDwgbGVuKSB7XG4gICAgICAgICAgICBpZiAoY3VycmVudFF1ZXVlKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFF1ZXVlW3F1ZXVlSW5kZXhdLnJ1bigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICAgICAgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIH1cbiAgICBjdXJyZW50UXVldWUgPSBudWxsO1xuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgcnVuQ2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xufVxuXG5wcm9jZXNzLm5leHRUaWNrID0gZnVuY3Rpb24gKGZ1bikge1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGggLSAxKTtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGFyZ3NbaSAtIDFdID0gYXJndW1lbnRzW2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHF1ZXVlLnB1c2gobmV3IEl0ZW0oZnVuLCBhcmdzKSk7XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCA9PT0gMSAmJiAhZHJhaW5pbmcpIHtcbiAgICAgICAgcnVuVGltZW91dChkcmFpblF1ZXVlKTtcbiAgICB9XG59O1xuXG4vLyB2OCBsaWtlcyBwcmVkaWN0aWJsZSBvYmplY3RzXG5mdW5jdGlvbiBJdGVtKGZ1biwgYXJyYXkpIHtcbiAgICB0aGlzLmZ1biA9IGZ1bjtcbiAgICB0aGlzLmFycmF5ID0gYXJyYXk7XG59XG5JdGVtLnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5mdW4uYXBwbHkobnVsbCwgdGhpcy5hcnJheSk7XG59O1xucHJvY2Vzcy50aXRsZSA9ICdicm93c2VyJztcbnByb2Nlc3MuYnJvd3NlciA9IHRydWU7XG5wcm9jZXNzLmVudiA9IHt9O1xucHJvY2Vzcy5hcmd2ID0gW107XG5wcm9jZXNzLnZlcnNpb24gPSAnJzsgLy8gZW1wdHkgc3RyaW5nIHRvIGF2b2lkIHJlZ2V4cCBpc3N1ZXNcbnByb2Nlc3MudmVyc2lvbnMgPSB7fTtcblxuZnVuY3Rpb24gbm9vcCgpIHt9XG5cbnByb2Nlc3Mub24gPSBub29wO1xucHJvY2Vzcy5hZGRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLm9uY2UgPSBub29wO1xucHJvY2Vzcy5vZmYgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUFsbExpc3RlbmVycyA9IG5vb3A7XG5wcm9jZXNzLmVtaXQgPSBub29wO1xucHJvY2Vzcy5wcmVwZW5kTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5wcmVwZW5kT25jZUxpc3RlbmVyID0gbm9vcDtcblxucHJvY2Vzcy5saXN0ZW5lcnMgPSBmdW5jdGlvbiAobmFtZSkgeyByZXR1cm4gW10gfVxuXG5wcm9jZXNzLmJpbmRpbmcgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5cbnByb2Nlc3MuY3dkID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gJy8nIH07XG5wcm9jZXNzLmNoZGlyID0gZnVuY3Rpb24gKGRpcikge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xucHJvY2Vzcy51bWFzayA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gMDsgfTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcHJvY2Vzcy9icm93c2VyLmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbi8qKlxuICogVXNlIGludmFyaWFudCgpIHRvIGFzc2VydCBzdGF0ZSB3aGljaCB5b3VyIHByb2dyYW0gYXNzdW1lcyB0byBiZSB0cnVlLlxuICpcbiAqIFByb3ZpZGUgc3ByaW50Zi1zdHlsZSBmb3JtYXQgKG9ubHkgJXMgaXMgc3VwcG9ydGVkKSBhbmQgYXJndW1lbnRzXG4gKiB0byBwcm92aWRlIGluZm9ybWF0aW9uIGFib3V0IHdoYXQgYnJva2UgYW5kIHdoYXQgeW91IHdlcmVcbiAqIGV4cGVjdGluZy5cbiAqXG4gKiBUaGUgaW52YXJpYW50IG1lc3NhZ2Ugd2lsbCBiZSBzdHJpcHBlZCBpbiBwcm9kdWN0aW9uLCBidXQgdGhlIGludmFyaWFudFxuICogd2lsbCByZW1haW4gdG8gZW5zdXJlIGxvZ2ljIGRvZXMgbm90IGRpZmZlciBpbiBwcm9kdWN0aW9uLlxuICovXG5cbnZhciB2YWxpZGF0ZUZvcm1hdCA9IGZ1bmN0aW9uIHZhbGlkYXRlRm9ybWF0KGZvcm1hdCkge307XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHZhbGlkYXRlRm9ybWF0ID0gZnVuY3Rpb24gdmFsaWRhdGVGb3JtYXQoZm9ybWF0KSB7XG4gICAgaWYgKGZvcm1hdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFyaWFudCByZXF1aXJlcyBhbiBlcnJvciBtZXNzYWdlIGFyZ3VtZW50Jyk7XG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiBpbnZhcmlhbnQoY29uZGl0aW9uLCBmb3JtYXQsIGEsIGIsIGMsIGQsIGUsIGYpIHtcbiAgdmFsaWRhdGVGb3JtYXQoZm9ybWF0KTtcblxuICBpZiAoIWNvbmRpdGlvbikge1xuICAgIHZhciBlcnJvcjtcbiAgICBpZiAoZm9ybWF0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGVycm9yID0gbmV3IEVycm9yKCdNaW5pZmllZCBleGNlcHRpb24gb2NjdXJyZWQ7IHVzZSB0aGUgbm9uLW1pbmlmaWVkIGRldiBlbnZpcm9ubWVudCAnICsgJ2ZvciB0aGUgZnVsbCBlcnJvciBtZXNzYWdlIGFuZCBhZGRpdGlvbmFsIGhlbHBmdWwgd2FybmluZ3MuJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBhcmdzID0gW2EsIGIsIGMsIGQsIGUsIGZdO1xuICAgICAgdmFyIGFyZ0luZGV4ID0gMDtcbiAgICAgIGVycm9yID0gbmV3IEVycm9yKGZvcm1hdC5yZXBsYWNlKC8lcy9nLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBhcmdzW2FyZ0luZGV4KytdO1xuICAgICAgfSkpO1xuICAgICAgZXJyb3IubmFtZSA9ICdJbnZhcmlhbnQgVmlvbGF0aW9uJztcbiAgICB9XG5cbiAgICBlcnJvci5mcmFtZXNUb1BvcCA9IDE7IC8vIHdlIGRvbid0IGNhcmUgYWJvdXQgaW52YXJpYW50J3Mgb3duIGZyYW1lXG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpbnZhcmlhbnQ7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9mYmpzL2xpYi9pbnZhcmlhbnQuanMiLCIvKipcbiAqIENvcHlyaWdodCAyMDE0LTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgZW1wdHlGdW5jdGlvbiA9IHJlcXVpcmUoJy4vZW1wdHlGdW5jdGlvbicpO1xuXG4vKipcbiAqIFNpbWlsYXIgdG8gaW52YXJpYW50IGJ1dCBvbmx5IGxvZ3MgYSB3YXJuaW5nIGlmIHRoZSBjb25kaXRpb24gaXMgbm90IG1ldC5cbiAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gbG9nIGlzc3VlcyBpbiBkZXZlbG9wbWVudCBlbnZpcm9ubWVudHMgaW4gY3JpdGljYWxcbiAqIHBhdGhzLiBSZW1vdmluZyB0aGUgbG9nZ2luZyBjb2RlIGZvciBwcm9kdWN0aW9uIGVudmlyb25tZW50cyB3aWxsIGtlZXAgdGhlXG4gKiBzYW1lIGxvZ2ljIGFuZCBmb2xsb3cgdGhlIHNhbWUgY29kZSBwYXRocy5cbiAqL1xuXG52YXIgd2FybmluZyA9IGVtcHR5RnVuY3Rpb247XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHByaW50V2FybmluZyA9IGZ1bmN0aW9uIHByaW50V2FybmluZyhmb3JtYXQpIHtcbiAgICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgICBhcmdzW19rZXkgLSAxXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICAgIH1cblxuICAgICAgdmFyIGFyZ0luZGV4ID0gMDtcbiAgICAgIHZhciBtZXNzYWdlID0gJ1dhcm5pbmc6ICcgKyBmb3JtYXQucmVwbGFjZSgvJXMvZywgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gYXJnc1thcmdJbmRleCsrXTtcbiAgICAgIH0pO1xuICAgICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBjb25zb2xlLmVycm9yKG1lc3NhZ2UpO1xuICAgICAgfVxuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gLS0tIFdlbGNvbWUgdG8gZGVidWdnaW5nIFJlYWN0IC0tLVxuICAgICAgICAvLyBUaGlzIGVycm9yIHdhcyB0aHJvd24gYXMgYSBjb252ZW5pZW5jZSBzbyB0aGF0IHlvdSBjYW4gdXNlIHRoaXMgc3RhY2tcbiAgICAgICAgLy8gdG8gZmluZCB0aGUgY2FsbHNpdGUgdGhhdCBjYXVzZWQgdGhpcyB3YXJuaW5nIHRvIGZpcmUuXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgICAgIH0gY2F0Y2ggKHgpIHt9XG4gICAgfTtcblxuICAgIHdhcm5pbmcgPSBmdW5jdGlvbiB3YXJuaW5nKGNvbmRpdGlvbiwgZm9ybWF0KSB7XG4gICAgICBpZiAoZm9ybWF0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdgd2FybmluZyhjb25kaXRpb24sIGZvcm1hdCwgLi4uYXJncylgIHJlcXVpcmVzIGEgd2FybmluZyAnICsgJ21lc3NhZ2UgYXJndW1lbnQnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGZvcm1hdC5pbmRleE9mKCdGYWlsZWQgQ29tcG9zaXRlIHByb3BUeXBlOiAnKSA9PT0gMCkge1xuICAgICAgICByZXR1cm47IC8vIElnbm9yZSBDb21wb3NpdGVDb21wb25lbnQgcHJvcHR5cGUgY2hlY2suXG4gICAgICB9XG5cbiAgICAgIGlmICghY29uZGl0aW9uKSB7XG4gICAgICAgIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IEFycmF5KF9sZW4yID4gMiA/IF9sZW4yIC0gMiA6IDApLCBfa2V5MiA9IDI7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcbiAgICAgICAgICBhcmdzW19rZXkyIC0gMl0gPSBhcmd1bWVudHNbX2tleTJdO1xuICAgICAgICB9XG5cbiAgICAgICAgcHJpbnRXYXJuaW5nLmFwcGx5KHVuZGVmaW5lZCwgW2Zvcm1hdF0uY29uY2F0KGFyZ3MpKTtcbiAgICAgIH1cbiAgICB9O1xuICB9KSgpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHdhcm5pbmc7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9mYmpzL2xpYi93YXJuaW5nLmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIFxuICovXG4ndXNlIHN0cmljdCc7XG5cbi8qKlxuICogV0FSTklORzogRE8gTk9UIG1hbnVhbGx5IHJlcXVpcmUgdGhpcyBtb2R1bGUuXG4gKiBUaGlzIGlzIGEgcmVwbGFjZW1lbnQgZm9yIGBpbnZhcmlhbnQoLi4uKWAgdXNlZCBieSB0aGUgZXJyb3IgY29kZSBzeXN0ZW1cbiAqIGFuZCB3aWxsIF9vbmx5XyBiZSByZXF1aXJlZCBieSB0aGUgY29ycmVzcG9uZGluZyBiYWJlbCBwYXNzLlxuICogSXQgYWx3YXlzIHRocm93cy5cbiAqL1xuXG5mdW5jdGlvbiByZWFjdFByb2RJbnZhcmlhbnQoY29kZSkge1xuICB2YXIgYXJnQ291bnQgPSBhcmd1bWVudHMubGVuZ3RoIC0gMTtcblxuICB2YXIgbWVzc2FnZSA9ICdNaW5pZmllZCBSZWFjdCBlcnJvciAjJyArIGNvZGUgKyAnOyB2aXNpdCAnICsgJ2h0dHA6Ly9mYWNlYm9vay5naXRodWIuaW8vcmVhY3QvZG9jcy9lcnJvci1kZWNvZGVyLmh0bWw/aW52YXJpYW50PScgKyBjb2RlO1xuXG4gIGZvciAodmFyIGFyZ0lkeCA9IDA7IGFyZ0lkeCA8IGFyZ0NvdW50OyBhcmdJZHgrKykge1xuICAgIG1lc3NhZ2UgKz0gJyZhcmdzW109JyArIGVuY29kZVVSSUNvbXBvbmVudChhcmd1bWVudHNbYXJnSWR4ICsgMV0pO1xuICB9XG5cbiAgbWVzc2FnZSArPSAnIGZvciB0aGUgZnVsbCBtZXNzYWdlIG9yIHVzZSB0aGUgbm9uLW1pbmlmaWVkIGRldiBlbnZpcm9ubWVudCcgKyAnIGZvciBmdWxsIGVycm9ycyBhbmQgYWRkaXRpb25hbCBoZWxwZnVsIHdhcm5pbmdzLic7XG5cbiAgdmFyIGVycm9yID0gbmV3IEVycm9yKG1lc3NhZ2UpO1xuICBlcnJvci5uYW1lID0gJ0ludmFyaWFudCBWaW9sYXRpb24nO1xuICBlcnJvci5mcmFtZXNUb1BvcCA9IDE7IC8vIHdlIGRvbid0IGNhcmUgYWJvdXQgcmVhY3RQcm9kSW52YXJpYW50J3Mgb3duIGZyYW1lXG5cbiAgdGhyb3cgZXJyb3I7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcmVhY3RQcm9kSW52YXJpYW50O1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QtZG9tL2xpYi9yZWFjdFByb2RJbnZhcmlhbnQuanMiLCIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9saWIvUmVhY3QnKTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QvcmVhY3QuanMiLCIvKlxub2JqZWN0LWFzc2lnblxuKGMpIFNpbmRyZSBTb3JodXNcbkBsaWNlbnNlIE1JVFxuKi9cblxuJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cbnZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xudmFyIGhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBwcm9wSXNFbnVtZXJhYmxlID0gT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcblxuZnVuY3Rpb24gdG9PYmplY3QodmFsKSB7XG5cdGlmICh2YWwgPT09IG51bGwgfHwgdmFsID09PSB1bmRlZmluZWQpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdPYmplY3QuYXNzaWduIGNhbm5vdCBiZSBjYWxsZWQgd2l0aCBudWxsIG9yIHVuZGVmaW5lZCcpO1xuXHR9XG5cblx0cmV0dXJuIE9iamVjdCh2YWwpO1xufVxuXG5mdW5jdGlvbiBzaG91bGRVc2VOYXRpdmUoKSB7XG5cdHRyeSB7XG5cdFx0aWYgKCFPYmplY3QuYXNzaWduKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gRGV0ZWN0IGJ1Z2d5IHByb3BlcnR5IGVudW1lcmF0aW9uIG9yZGVyIGluIG9sZGVyIFY4IHZlcnNpb25zLlxuXG5cdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9NDExOFxuXHRcdHZhciB0ZXN0MSA9IG5ldyBTdHJpbmcoJ2FiYycpOyAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXctd3JhcHBlcnNcblx0XHR0ZXN0MVs1XSA9ICdkZSc7XG5cdFx0aWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRlc3QxKVswXSA9PT0gJzUnKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzA1NlxuXHRcdHZhciB0ZXN0MiA9IHt9O1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgMTA7IGkrKykge1xuXHRcdFx0dGVzdDJbJ18nICsgU3RyaW5nLmZyb21DaGFyQ29kZShpKV0gPSBpO1xuXHRcdH1cblx0XHR2YXIgb3JkZXIyID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGVzdDIpLm1hcChmdW5jdGlvbiAobikge1xuXHRcdFx0cmV0dXJuIHRlc3QyW25dO1xuXHRcdH0pO1xuXHRcdGlmIChvcmRlcjIuam9pbignJykgIT09ICcwMTIzNDU2Nzg5Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTMwNTZcblx0XHR2YXIgdGVzdDMgPSB7fTtcblx0XHQnYWJjZGVmZ2hpamtsbW5vcHFyc3QnLnNwbGl0KCcnKS5mb3JFYWNoKGZ1bmN0aW9uIChsZXR0ZXIpIHtcblx0XHRcdHRlc3QzW2xldHRlcl0gPSBsZXR0ZXI7XG5cdFx0fSk7XG5cdFx0aWYgKE9iamVjdC5rZXlzKE9iamVjdC5hc3NpZ24oe30sIHRlc3QzKSkuam9pbignJykgIT09XG5cdFx0XHRcdCdhYmNkZWZnaGlqa2xtbm9wcXJzdCcpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0Ly8gV2UgZG9uJ3QgZXhwZWN0IGFueSBvZiB0aGUgYWJvdmUgdG8gdGhyb3csIGJ1dCBiZXR0ZXIgdG8gYmUgc2FmZS5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzaG91bGRVc2VOYXRpdmUoKSA/IE9iamVjdC5hc3NpZ24gOiBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UpIHtcblx0dmFyIGZyb207XG5cdHZhciB0byA9IHRvT2JqZWN0KHRhcmdldCk7XG5cdHZhciBzeW1ib2xzO1xuXG5cdGZvciAodmFyIHMgPSAxOyBzIDwgYXJndW1lbnRzLmxlbmd0aDsgcysrKSB7XG5cdFx0ZnJvbSA9IE9iamVjdChhcmd1bWVudHNbc10pO1xuXG5cdFx0Zm9yICh2YXIga2V5IGluIGZyb20pIHtcblx0XHRcdGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGZyb20sIGtleSkpIHtcblx0XHRcdFx0dG9ba2V5XSA9IGZyb21ba2V5XTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG5cdFx0XHRzeW1ib2xzID0gZ2V0T3duUHJvcGVydHlTeW1ib2xzKGZyb20pO1xuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBzeW1ib2xzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGlmIChwcm9wSXNFbnVtZXJhYmxlLmNhbGwoZnJvbSwgc3ltYm9sc1tpXSkpIHtcblx0XHRcdFx0XHR0b1tzeW1ib2xzW2ldXSA9IGZyb21bc3ltYm9sc1tpXV07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gdG87XG59O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9vYmplY3QtYXNzaWduL2luZGV4LmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIF9wcm9kSW52YXJpYW50ID0gcmVxdWlyZSgnLi9yZWFjdFByb2RJbnZhcmlhbnQnKTtcblxudmFyIERPTVByb3BlcnR5ID0gcmVxdWlyZSgnLi9ET01Qcm9wZXJ0eScpO1xudmFyIFJlYWN0RE9NQ29tcG9uZW50RmxhZ3MgPSByZXF1aXJlKCcuL1JlYWN0RE9NQ29tcG9uZW50RmxhZ3MnKTtcblxudmFyIGludmFyaWFudCA9IHJlcXVpcmUoJ2ZianMvbGliL2ludmFyaWFudCcpO1xuXG52YXIgQVRUUl9OQU1FID0gRE9NUHJvcGVydHkuSURfQVRUUklCVVRFX05BTUU7XG52YXIgRmxhZ3MgPSBSZWFjdERPTUNvbXBvbmVudEZsYWdzO1xuXG52YXIgaW50ZXJuYWxJbnN0YW5jZUtleSA9ICdfX3JlYWN0SW50ZXJuYWxJbnN0YW5jZSQnICsgTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc2xpY2UoMik7XG5cbi8qKlxuICogQ2hlY2sgaWYgYSBnaXZlbiBub2RlIHNob3VsZCBiZSBjYWNoZWQuXG4gKi9cbmZ1bmN0aW9uIHNob3VsZFByZWNhY2hlTm9kZShub2RlLCBub2RlSUQpIHtcbiAgcmV0dXJuIG5vZGUubm9kZVR5cGUgPT09IDEgJiYgbm9kZS5nZXRBdHRyaWJ1dGUoQVRUUl9OQU1FKSA9PT0gU3RyaW5nKG5vZGVJRCkgfHwgbm9kZS5ub2RlVHlwZSA9PT0gOCAmJiBub2RlLm5vZGVWYWx1ZSA9PT0gJyByZWFjdC10ZXh0OiAnICsgbm9kZUlEICsgJyAnIHx8IG5vZGUubm9kZVR5cGUgPT09IDggJiYgbm9kZS5ub2RlVmFsdWUgPT09ICcgcmVhY3QtZW1wdHk6ICcgKyBub2RlSUQgKyAnICc7XG59XG5cbi8qKlxuICogRHJpbGwgZG93biAodGhyb3VnaCBjb21wb3NpdGVzIGFuZCBlbXB0eSBjb21wb25lbnRzKSB1bnRpbCB3ZSBnZXQgYSBob3N0IG9yXG4gKiBob3N0IHRleHQgY29tcG9uZW50LlxuICpcbiAqIFRoaXMgaXMgcHJldHR5IHBvbHltb3JwaGljIGJ1dCB1bmF2b2lkYWJsZSB3aXRoIHRoZSBjdXJyZW50IHN0cnVjdHVyZSB3ZSBoYXZlXG4gKiBmb3IgYF9yZW5kZXJlZENoaWxkcmVuYC5cbiAqL1xuZnVuY3Rpb24gZ2V0UmVuZGVyZWRIb3N0T3JUZXh0RnJvbUNvbXBvbmVudChjb21wb25lbnQpIHtcbiAgdmFyIHJlbmRlcmVkO1xuICB3aGlsZSAocmVuZGVyZWQgPSBjb21wb25lbnQuX3JlbmRlcmVkQ29tcG9uZW50KSB7XG4gICAgY29tcG9uZW50ID0gcmVuZGVyZWQ7XG4gIH1cbiAgcmV0dXJuIGNvbXBvbmVudDtcbn1cblxuLyoqXG4gKiBQb3B1bGF0ZSBgX2hvc3ROb2RlYCBvbiB0aGUgcmVuZGVyZWQgaG9zdC90ZXh0IGNvbXBvbmVudCB3aXRoIHRoZSBnaXZlblxuICogRE9NIG5vZGUuIFRoZSBwYXNzZWQgYGluc3RgIGNhbiBiZSBhIGNvbXBvc2l0ZS5cbiAqL1xuZnVuY3Rpb24gcHJlY2FjaGVOb2RlKGluc3QsIG5vZGUpIHtcbiAgdmFyIGhvc3RJbnN0ID0gZ2V0UmVuZGVyZWRIb3N0T3JUZXh0RnJvbUNvbXBvbmVudChpbnN0KTtcbiAgaG9zdEluc3QuX2hvc3ROb2RlID0gbm9kZTtcbiAgbm9kZVtpbnRlcm5hbEluc3RhbmNlS2V5XSA9IGhvc3RJbnN0O1xufVxuXG5mdW5jdGlvbiB1bmNhY2hlTm9kZShpbnN0KSB7XG4gIHZhciBub2RlID0gaW5zdC5faG9zdE5vZGU7XG4gIGlmIChub2RlKSB7XG4gICAgZGVsZXRlIG5vZGVbaW50ZXJuYWxJbnN0YW5jZUtleV07XG4gICAgaW5zdC5faG9zdE5vZGUgPSBudWxsO1xuICB9XG59XG5cbi8qKlxuICogUG9wdWxhdGUgYF9ob3N0Tm9kZWAgb24gZWFjaCBjaGlsZCBvZiBgaW5zdGAsIGFzc3VtaW5nIHRoYXQgdGhlIGNoaWxkcmVuXG4gKiBtYXRjaCB1cCB3aXRoIHRoZSBET00gKGVsZW1lbnQpIGNoaWxkcmVuIG9mIGBub2RlYC5cbiAqXG4gKiBXZSBjYWNoZSBlbnRpcmUgbGV2ZWxzIGF0IG9uY2UgdG8gYXZvaWQgYW4gbl4yIHByb2JsZW0gd2hlcmUgd2UgYWNjZXNzIHRoZVxuICogY2hpbGRyZW4gb2YgYSBub2RlIHNlcXVlbnRpYWxseSBhbmQgaGF2ZSB0byB3YWxrIGZyb20gdGhlIHN0YXJ0IHRvIG91ciB0YXJnZXRcbiAqIG5vZGUgZXZlcnkgdGltZS5cbiAqXG4gKiBTaW5jZSB3ZSB1cGRhdGUgYF9yZW5kZXJlZENoaWxkcmVuYCBhbmQgdGhlIGFjdHVhbCBET00gYXQgKHNsaWdodGx5KVxuICogZGlmZmVyZW50IHRpbWVzLCB3ZSBjb3VsZCByYWNlIGhlcmUgYW5kIHNlZSBhIG5ld2VyIGBfcmVuZGVyZWRDaGlsZHJlbmAgdGhhblxuICogdGhlIERPTSBub2RlcyB3ZSBzZWUuIFRvIGF2b2lkIHRoaXMsIFJlYWN0TXVsdGlDaGlsZCBjYWxsc1xuICogYHByZXBhcmVUb01hbmFnZUNoaWxkcmVuYCBiZWZvcmUgd2UgY2hhbmdlIGBfcmVuZGVyZWRDaGlsZHJlbmAsIGF0IHdoaWNoXG4gKiB0aW1lIHRoZSBjb250YWluZXIncyBjaGlsZCBub2RlcyBhcmUgYWx3YXlzIGNhY2hlZCAodW50aWwgaXQgdW5tb3VudHMpLlxuICovXG5mdW5jdGlvbiBwcmVjYWNoZUNoaWxkTm9kZXMoaW5zdCwgbm9kZSkge1xuICBpZiAoaW5zdC5fZmxhZ3MgJiBGbGFncy5oYXNDYWNoZWRDaGlsZE5vZGVzKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHZhciBjaGlsZHJlbiA9IGluc3QuX3JlbmRlcmVkQ2hpbGRyZW47XG4gIHZhciBjaGlsZE5vZGUgPSBub2RlLmZpcnN0Q2hpbGQ7XG4gIG91dGVyOiBmb3IgKHZhciBuYW1lIGluIGNoaWxkcmVuKSB7XG4gICAgaWYgKCFjaGlsZHJlbi5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIHZhciBjaGlsZEluc3QgPSBjaGlsZHJlbltuYW1lXTtcbiAgICB2YXIgY2hpbGRJRCA9IGdldFJlbmRlcmVkSG9zdE9yVGV4dEZyb21Db21wb25lbnQoY2hpbGRJbnN0KS5fZG9tSUQ7XG4gICAgaWYgKGNoaWxkSUQgPT09IDApIHtcbiAgICAgIC8vIFdlJ3JlIGN1cnJlbnRseSB1bm1vdW50aW5nIHRoaXMgY2hpbGQgaW4gUmVhY3RNdWx0aUNoaWxkOyBza2lwIGl0LlxuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIC8vIFdlIGFzc3VtZSB0aGUgY2hpbGQgbm9kZXMgYXJlIGluIHRoZSBzYW1lIG9yZGVyIGFzIHRoZSBjaGlsZCBpbnN0YW5jZXMuXG4gICAgZm9yICg7IGNoaWxkTm9kZSAhPT0gbnVsbDsgY2hpbGROb2RlID0gY2hpbGROb2RlLm5leHRTaWJsaW5nKSB7XG4gICAgICBpZiAoc2hvdWxkUHJlY2FjaGVOb2RlKGNoaWxkTm9kZSwgY2hpbGRJRCkpIHtcbiAgICAgICAgcHJlY2FjaGVOb2RlKGNoaWxkSW5zdCwgY2hpbGROb2RlKTtcbiAgICAgICAgY29udGludWUgb3V0ZXI7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIFdlIHJlYWNoZWQgdGhlIGVuZCBvZiB0aGUgRE9NIGNoaWxkcmVuIHdpdGhvdXQgZmluZGluZyBhbiBJRCBtYXRjaC5cbiAgICAhZmFsc2UgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAnVW5hYmxlIHRvIGZpbmQgZWxlbWVudCB3aXRoIElEICVzLicsIGNoaWxkSUQpIDogX3Byb2RJbnZhcmlhbnQoJzMyJywgY2hpbGRJRCkgOiB2b2lkIDA7XG4gIH1cbiAgaW5zdC5fZmxhZ3MgfD0gRmxhZ3MuaGFzQ2FjaGVkQ2hpbGROb2Rlcztcbn1cblxuLyoqXG4gKiBHaXZlbiBhIERPTSBub2RlLCByZXR1cm4gdGhlIGNsb3Nlc3QgUmVhY3RET01Db21wb25lbnQgb3JcbiAqIFJlYWN0RE9NVGV4dENvbXBvbmVudCBpbnN0YW5jZSBhbmNlc3Rvci5cbiAqL1xuZnVuY3Rpb24gZ2V0Q2xvc2VzdEluc3RhbmNlRnJvbU5vZGUobm9kZSkge1xuICBpZiAobm9kZVtpbnRlcm5hbEluc3RhbmNlS2V5XSkge1xuICAgIHJldHVybiBub2RlW2ludGVybmFsSW5zdGFuY2VLZXldO1xuICB9XG5cbiAgLy8gV2FsayB1cCB0aGUgdHJlZSB1bnRpbCB3ZSBmaW5kIGFuIGFuY2VzdG9yIHdob3NlIGluc3RhbmNlIHdlIGhhdmUgY2FjaGVkLlxuICB2YXIgcGFyZW50cyA9IFtdO1xuICB3aGlsZSAoIW5vZGVbaW50ZXJuYWxJbnN0YW5jZUtleV0pIHtcbiAgICBwYXJlbnRzLnB1c2gobm9kZSk7XG4gICAgaWYgKG5vZGUucGFyZW50Tm9kZSkge1xuICAgICAgbm9kZSA9IG5vZGUucGFyZW50Tm9kZTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVG9wIG9mIHRoZSB0cmVlLiBUaGlzIG5vZGUgbXVzdCBub3QgYmUgcGFydCBvZiBhIFJlYWN0IHRyZWUgKG9yIGlzXG4gICAgICAvLyB1bm1vdW50ZWQsIHBvdGVudGlhbGx5KS5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHZhciBjbG9zZXN0O1xuICB2YXIgaW5zdDtcbiAgZm9yICg7IG5vZGUgJiYgKGluc3QgPSBub2RlW2ludGVybmFsSW5zdGFuY2VLZXldKTsgbm9kZSA9IHBhcmVudHMucG9wKCkpIHtcbiAgICBjbG9zZXN0ID0gaW5zdDtcbiAgICBpZiAocGFyZW50cy5sZW5ndGgpIHtcbiAgICAgIHByZWNhY2hlQ2hpbGROb2RlcyhpbnN0LCBub2RlKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gY2xvc2VzdDtcbn1cblxuLyoqXG4gKiBHaXZlbiBhIERPTSBub2RlLCByZXR1cm4gdGhlIFJlYWN0RE9NQ29tcG9uZW50IG9yIFJlYWN0RE9NVGV4dENvbXBvbmVudFxuICogaW5zdGFuY2UsIG9yIG51bGwgaWYgdGhlIG5vZGUgd2FzIG5vdCByZW5kZXJlZCBieSB0aGlzIFJlYWN0LlxuICovXG5mdW5jdGlvbiBnZXRJbnN0YW5jZUZyb21Ob2RlKG5vZGUpIHtcbiAgdmFyIGluc3QgPSBnZXRDbG9zZXN0SW5zdGFuY2VGcm9tTm9kZShub2RlKTtcbiAgaWYgKGluc3QgIT0gbnVsbCAmJiBpbnN0Ll9ob3N0Tm9kZSA9PT0gbm9kZSkge1xuICAgIHJldHVybiBpbnN0O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbi8qKlxuICogR2l2ZW4gYSBSZWFjdERPTUNvbXBvbmVudCBvciBSZWFjdERPTVRleHRDb21wb25lbnQsIHJldHVybiB0aGUgY29ycmVzcG9uZGluZ1xuICogRE9NIG5vZGUuXG4gKi9cbmZ1bmN0aW9uIGdldE5vZGVGcm9tSW5zdGFuY2UoaW5zdCkge1xuICAvLyBXaXRob3V0IHRoaXMgZmlyc3QgaW52YXJpYW50LCBwYXNzaW5nIGEgbm9uLURPTS1jb21wb25lbnQgdHJpZ2dlcnMgdGhlIG5leHRcbiAgLy8gaW52YXJpYW50IGZvciBhIG1pc3NpbmcgcGFyZW50LCB3aGljaCBpcyBzdXBlciBjb25mdXNpbmcuXG4gICEoaW5zdC5faG9zdE5vZGUgIT09IHVuZGVmaW5lZCkgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAnZ2V0Tm9kZUZyb21JbnN0YW5jZTogSW52YWxpZCBhcmd1bWVudC4nKSA6IF9wcm9kSW52YXJpYW50KCczMycpIDogdm9pZCAwO1xuXG4gIGlmIChpbnN0Ll9ob3N0Tm9kZSkge1xuICAgIHJldHVybiBpbnN0Ll9ob3N0Tm9kZTtcbiAgfVxuXG4gIC8vIFdhbGsgdXAgdGhlIHRyZWUgdW50aWwgd2UgZmluZCBhbiBhbmNlc3RvciB3aG9zZSBET00gbm9kZSB3ZSBoYXZlIGNhY2hlZC5cbiAgdmFyIHBhcmVudHMgPSBbXTtcbiAgd2hpbGUgKCFpbnN0Ll9ob3N0Tm9kZSkge1xuICAgIHBhcmVudHMucHVzaChpbnN0KTtcbiAgICAhaW5zdC5faG9zdFBhcmVudCA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICdSZWFjdCBET00gdHJlZSByb290IHNob3VsZCBhbHdheXMgaGF2ZSBhIG5vZGUgcmVmZXJlbmNlLicpIDogX3Byb2RJbnZhcmlhbnQoJzM0JykgOiB2b2lkIDA7XG4gICAgaW5zdCA9IGluc3QuX2hvc3RQYXJlbnQ7XG4gIH1cblxuICAvLyBOb3cgcGFyZW50cyBjb250YWlucyBlYWNoIGFuY2VzdG9yIHRoYXQgZG9lcyAqbm90KiBoYXZlIGEgY2FjaGVkIG5hdGl2ZVxuICAvLyBub2RlLCBhbmQgYGluc3RgIGlzIHRoZSBkZWVwZXN0IGFuY2VzdG9yIHRoYXQgZG9lcy5cbiAgZm9yICg7IHBhcmVudHMubGVuZ3RoOyBpbnN0ID0gcGFyZW50cy5wb3AoKSkge1xuICAgIHByZWNhY2hlQ2hpbGROb2RlcyhpbnN0LCBpbnN0Ll9ob3N0Tm9kZSk7XG4gIH1cblxuICByZXR1cm4gaW5zdC5faG9zdE5vZGU7XG59XG5cbnZhciBSZWFjdERPTUNvbXBvbmVudFRyZWUgPSB7XG4gIGdldENsb3Nlc3RJbnN0YW5jZUZyb21Ob2RlOiBnZXRDbG9zZXN0SW5zdGFuY2VGcm9tTm9kZSxcbiAgZ2V0SW5zdGFuY2VGcm9tTm9kZTogZ2V0SW5zdGFuY2VGcm9tTm9kZSxcbiAgZ2V0Tm9kZUZyb21JbnN0YW5jZTogZ2V0Tm9kZUZyb21JbnN0YW5jZSxcbiAgcHJlY2FjaGVDaGlsZE5vZGVzOiBwcmVjYWNoZUNoaWxkTm9kZXMsXG4gIHByZWNhY2hlTm9kZTogcHJlY2FjaGVOb2RlLFxuICB1bmNhY2hlTm9kZTogdW5jYWNoZU5vZGVcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RET01Db21wb25lbnRUcmVlO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QtZG9tL2xpYi9SZWFjdERPTUNvbXBvbmVudFRyZWUuanMiLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIGNhblVzZURPTSA9ICEhKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5kb2N1bWVudCAmJiB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCk7XG5cbi8qKlxuICogU2ltcGxlLCBsaWdodHdlaWdodCBtb2R1bGUgYXNzaXN0aW5nIHdpdGggdGhlIGRldGVjdGlvbiBhbmQgY29udGV4dCBvZlxuICogV29ya2VyLiBIZWxwcyBhdm9pZCBjaXJjdWxhciBkZXBlbmRlbmNpZXMgYW5kIGFsbG93cyBjb2RlIHRvIHJlYXNvbiBhYm91dFxuICogd2hldGhlciBvciBub3QgdGhleSBhcmUgaW4gYSBXb3JrZXIsIGV2ZW4gaWYgdGhleSBuZXZlciBpbmNsdWRlIHRoZSBtYWluXG4gKiBgUmVhY3RXb3JrZXJgIGRlcGVuZGVuY3kuXG4gKi9cbnZhciBFeGVjdXRpb25FbnZpcm9ubWVudCA9IHtcblxuICBjYW5Vc2VET006IGNhblVzZURPTSxcblxuICBjYW5Vc2VXb3JrZXJzOiB0eXBlb2YgV29ya2VyICE9PSAndW5kZWZpbmVkJyxcblxuICBjYW5Vc2VFdmVudExpc3RlbmVyczogY2FuVXNlRE9NICYmICEhKHdpbmRvdy5hZGRFdmVudExpc3RlbmVyIHx8IHdpbmRvdy5hdHRhY2hFdmVudCksXG5cbiAgY2FuVXNlVmlld3BvcnQ6IGNhblVzZURPTSAmJiAhIXdpbmRvdy5zY3JlZW4sXG5cbiAgaXNJbldvcmtlcjogIWNhblVzZURPTSAvLyBGb3Igbm93LCB0aGlzIGlzIHRydWUgLSBtaWdodCBjaGFuZ2UgaW4gdGhlIGZ1dHVyZS5cblxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBFeGVjdXRpb25FbnZpcm9ubWVudDtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L2ZianMvbGliL0V4ZWN1dGlvbkVudmlyb25tZW50LmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKi9cblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgdmFyIFJFQUNUX0VMRU1FTlRfVFlQRSA9ICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmXG4gICAgU3ltYm9sLmZvciAmJlxuICAgIFN5bWJvbC5mb3IoJ3JlYWN0LmVsZW1lbnQnKSkgfHxcbiAgICAweGVhYzc7XG5cbiAgdmFyIGlzVmFsaWRFbGVtZW50ID0gZnVuY3Rpb24ob2JqZWN0KSB7XG4gICAgcmV0dXJuIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnICYmXG4gICAgICBvYmplY3QgIT09IG51bGwgJiZcbiAgICAgIG9iamVjdC4kJHR5cGVvZiA9PT0gUkVBQ1RfRUxFTUVOVF9UWVBFO1xuICB9O1xuXG4gIC8vIEJ5IGV4cGxpY2l0bHkgdXNpbmcgYHByb3AtdHlwZXNgIHlvdSBhcmUgb3B0aW5nIGludG8gbmV3IGRldmVsb3BtZW50IGJlaGF2aW9yLlxuICAvLyBodHRwOi8vZmIubWUvcHJvcC10eXBlcy1pbi1wcm9kXG4gIHZhciB0aHJvd09uRGlyZWN0QWNjZXNzID0gdHJ1ZTtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2ZhY3RvcnlXaXRoVHlwZUNoZWNrZXJzJykoaXNWYWxpZEVsZW1lbnQsIHRocm93T25EaXJlY3RBY2Nlc3MpO1xufSBlbHNlIHtcbiAgLy8gQnkgZXhwbGljaXRseSB1c2luZyBgcHJvcC10eXBlc2AgeW91IGFyZSBvcHRpbmcgaW50byBuZXcgcHJvZHVjdGlvbiBiZWhhdmlvci5cbiAgLy8gaHR0cDovL2ZiLm1lL3Byb3AtdHlwZXMtaW4tcHJvZFxuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vZmFjdG9yeVdpdGhUaHJvd2luZ1NoaW1zJykoKTtcbn1cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcHJvcC10eXBlcy9pbmRleC5qcyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTYtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIFxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIF9wcm9kSW52YXJpYW50ID0gcmVxdWlyZSgnLi9yZWFjdFByb2RJbnZhcmlhbnQnKTtcblxudmFyIFJlYWN0Q3VycmVudE93bmVyID0gcmVxdWlyZSgnLi9SZWFjdEN1cnJlbnRPd25lcicpO1xuXG52YXIgaW52YXJpYW50ID0gcmVxdWlyZSgnZmJqcy9saWIvaW52YXJpYW50Jyk7XG52YXIgd2FybmluZyA9IHJlcXVpcmUoJ2ZianMvbGliL3dhcm5pbmcnKTtcblxuZnVuY3Rpb24gaXNOYXRpdmUoZm4pIHtcbiAgLy8gQmFzZWQgb24gaXNOYXRpdmUoKSBmcm9tIExvZGFzaFxuICB2YXIgZnVuY1RvU3RyaW5nID0gRnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nO1xuICB2YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuICB2YXIgcmVJc05hdGl2ZSA9IFJlZ0V4cCgnXicgKyBmdW5jVG9TdHJpbmdcbiAgLy8gVGFrZSBhbiBleGFtcGxlIG5hdGl2ZSBmdW5jdGlvbiBzb3VyY2UgZm9yIGNvbXBhcmlzb25cbiAgLmNhbGwoaGFzT3duUHJvcGVydHlcbiAgLy8gU3RyaXAgcmVnZXggY2hhcmFjdGVycyBzbyB3ZSBjYW4gdXNlIGl0IGZvciByZWdleFxuICApLnJlcGxhY2UoL1tcXFxcXiQuKis/KClbXFxde318XS9nLCAnXFxcXCQmJ1xuICAvLyBSZW1vdmUgaGFzT3duUHJvcGVydHkgZnJvbSB0aGUgdGVtcGxhdGUgdG8gbWFrZSBpdCBnZW5lcmljXG4gICkucmVwbGFjZSgvaGFzT3duUHJvcGVydHl8KGZ1bmN0aW9uKS4qPyg/PVxcXFxcXCgpfCBmb3IgLis/KD89XFxcXFxcXSkvZywgJyQxLio/JykgKyAnJCcpO1xuICB0cnkge1xuICAgIHZhciBzb3VyY2UgPSBmdW5jVG9TdHJpbmcuY2FsbChmbik7XG4gICAgcmV0dXJuIHJlSXNOYXRpdmUudGVzdChzb3VyY2UpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxudmFyIGNhblVzZUNvbGxlY3Rpb25zID1cbi8vIEFycmF5LmZyb21cbnR5cGVvZiBBcnJheS5mcm9tID09PSAnZnVuY3Rpb24nICYmXG4vLyBNYXBcbnR5cGVvZiBNYXAgPT09ICdmdW5jdGlvbicgJiYgaXNOYXRpdmUoTWFwKSAmJlxuLy8gTWFwLnByb3RvdHlwZS5rZXlzXG5NYXAucHJvdG90eXBlICE9IG51bGwgJiYgdHlwZW9mIE1hcC5wcm90b3R5cGUua2V5cyA9PT0gJ2Z1bmN0aW9uJyAmJiBpc05hdGl2ZShNYXAucHJvdG90eXBlLmtleXMpICYmXG4vLyBTZXRcbnR5cGVvZiBTZXQgPT09ICdmdW5jdGlvbicgJiYgaXNOYXRpdmUoU2V0KSAmJlxuLy8gU2V0LnByb3RvdHlwZS5rZXlzXG5TZXQucHJvdG90eXBlICE9IG51bGwgJiYgdHlwZW9mIFNldC5wcm90b3R5cGUua2V5cyA9PT0gJ2Z1bmN0aW9uJyAmJiBpc05hdGl2ZShTZXQucHJvdG90eXBlLmtleXMpO1xuXG52YXIgc2V0SXRlbTtcbnZhciBnZXRJdGVtO1xudmFyIHJlbW92ZUl0ZW07XG52YXIgZ2V0SXRlbUlEcztcbnZhciBhZGRSb290O1xudmFyIHJlbW92ZVJvb3Q7XG52YXIgZ2V0Um9vdElEcztcblxuaWYgKGNhblVzZUNvbGxlY3Rpb25zKSB7XG4gIHZhciBpdGVtTWFwID0gbmV3IE1hcCgpO1xuICB2YXIgcm9vdElEU2V0ID0gbmV3IFNldCgpO1xuXG4gIHNldEl0ZW0gPSBmdW5jdGlvbiAoaWQsIGl0ZW0pIHtcbiAgICBpdGVtTWFwLnNldChpZCwgaXRlbSk7XG4gIH07XG4gIGdldEl0ZW0gPSBmdW5jdGlvbiAoaWQpIHtcbiAgICByZXR1cm4gaXRlbU1hcC5nZXQoaWQpO1xuICB9O1xuICByZW1vdmVJdGVtID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgaXRlbU1hcFsnZGVsZXRlJ10oaWQpO1xuICB9O1xuICBnZXRJdGVtSURzID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBBcnJheS5mcm9tKGl0ZW1NYXAua2V5cygpKTtcbiAgfTtcblxuICBhZGRSb290ID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgcm9vdElEU2V0LmFkZChpZCk7XG4gIH07XG4gIHJlbW92ZVJvb3QgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICByb290SURTZXRbJ2RlbGV0ZSddKGlkKTtcbiAgfTtcbiAgZ2V0Um9vdElEcyA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gQXJyYXkuZnJvbShyb290SURTZXQua2V5cygpKTtcbiAgfTtcbn0gZWxzZSB7XG4gIHZhciBpdGVtQnlLZXkgPSB7fTtcbiAgdmFyIHJvb3RCeUtleSA9IHt9O1xuXG4gIC8vIFVzZSBub24tbnVtZXJpYyBrZXlzIHRvIHByZXZlbnQgVjggcGVyZm9ybWFuY2UgaXNzdWVzOlxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvcHVsbC83MjMyXG4gIHZhciBnZXRLZXlGcm9tSUQgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICByZXR1cm4gJy4nICsgaWQ7XG4gIH07XG4gIHZhciBnZXRJREZyb21LZXkgPSBmdW5jdGlvbiAoa2V5KSB7XG4gICAgcmV0dXJuIHBhcnNlSW50KGtleS5zdWJzdHIoMSksIDEwKTtcbiAgfTtcblxuICBzZXRJdGVtID0gZnVuY3Rpb24gKGlkLCBpdGVtKSB7XG4gICAgdmFyIGtleSA9IGdldEtleUZyb21JRChpZCk7XG4gICAgaXRlbUJ5S2V5W2tleV0gPSBpdGVtO1xuICB9O1xuICBnZXRJdGVtID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgdmFyIGtleSA9IGdldEtleUZyb21JRChpZCk7XG4gICAgcmV0dXJuIGl0ZW1CeUtleVtrZXldO1xuICB9O1xuICByZW1vdmVJdGVtID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgdmFyIGtleSA9IGdldEtleUZyb21JRChpZCk7XG4gICAgZGVsZXRlIGl0ZW1CeUtleVtrZXldO1xuICB9O1xuICBnZXRJdGVtSURzID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhpdGVtQnlLZXkpLm1hcChnZXRJREZyb21LZXkpO1xuICB9O1xuXG4gIGFkZFJvb3QgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICB2YXIga2V5ID0gZ2V0S2V5RnJvbUlEKGlkKTtcbiAgICByb290QnlLZXlba2V5XSA9IHRydWU7XG4gIH07XG4gIHJlbW92ZVJvb3QgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICB2YXIga2V5ID0gZ2V0S2V5RnJvbUlEKGlkKTtcbiAgICBkZWxldGUgcm9vdEJ5S2V5W2tleV07XG4gIH07XG4gIGdldFJvb3RJRHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHJvb3RCeUtleSkubWFwKGdldElERnJvbUtleSk7XG4gIH07XG59XG5cbnZhciB1bm1vdW50ZWRJRHMgPSBbXTtcblxuZnVuY3Rpb24gcHVyZ2VEZWVwKGlkKSB7XG4gIHZhciBpdGVtID0gZ2V0SXRlbShpZCk7XG4gIGlmIChpdGVtKSB7XG4gICAgdmFyIGNoaWxkSURzID0gaXRlbS5jaGlsZElEcztcblxuICAgIHJlbW92ZUl0ZW0oaWQpO1xuICAgIGNoaWxkSURzLmZvckVhY2gocHVyZ2VEZWVwKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBkZXNjcmliZUNvbXBvbmVudEZyYW1lKG5hbWUsIHNvdXJjZSwgb3duZXJOYW1lKSB7XG4gIHJldHVybiAnXFxuICAgIGluICcgKyAobmFtZSB8fCAnVW5rbm93bicpICsgKHNvdXJjZSA/ICcgKGF0ICcgKyBzb3VyY2UuZmlsZU5hbWUucmVwbGFjZSgvXi4qW1xcXFxcXC9dLywgJycpICsgJzonICsgc291cmNlLmxpbmVOdW1iZXIgKyAnKScgOiBvd25lck5hbWUgPyAnIChjcmVhdGVkIGJ5ICcgKyBvd25lck5hbWUgKyAnKScgOiAnJyk7XG59XG5cbmZ1bmN0aW9uIGdldERpc3BsYXlOYW1lKGVsZW1lbnQpIHtcbiAgaWYgKGVsZW1lbnQgPT0gbnVsbCkge1xuICAgIHJldHVybiAnI2VtcHR5JztcbiAgfSBlbHNlIGlmICh0eXBlb2YgZWxlbWVudCA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIGVsZW1lbnQgPT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuICcjdGV4dCc7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGVsZW1lbnQudHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZWxlbWVudC50eXBlO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBlbGVtZW50LnR5cGUuZGlzcGxheU5hbWUgfHwgZWxlbWVudC50eXBlLm5hbWUgfHwgJ1Vua25vd24nO1xuICB9XG59XG5cbmZ1bmN0aW9uIGRlc2NyaWJlSUQoaWQpIHtcbiAgdmFyIG5hbWUgPSBSZWFjdENvbXBvbmVudFRyZWVIb29rLmdldERpc3BsYXlOYW1lKGlkKTtcbiAgdmFyIGVsZW1lbnQgPSBSZWFjdENvbXBvbmVudFRyZWVIb29rLmdldEVsZW1lbnQoaWQpO1xuICB2YXIgb3duZXJJRCA9IFJlYWN0Q29tcG9uZW50VHJlZUhvb2suZ2V0T3duZXJJRChpZCk7XG4gIHZhciBvd25lck5hbWU7XG4gIGlmIChvd25lcklEKSB7XG4gICAgb3duZXJOYW1lID0gUmVhY3RDb21wb25lbnRUcmVlSG9vay5nZXREaXNwbGF5TmFtZShvd25lcklEKTtcbiAgfVxuICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyhlbGVtZW50LCAnUmVhY3RDb21wb25lbnRUcmVlSG9vazogTWlzc2luZyBSZWFjdCBlbGVtZW50IGZvciBkZWJ1Z0lEICVzIHdoZW4gJyArICdidWlsZGluZyBzdGFjaycsIGlkKSA6IHZvaWQgMDtcbiAgcmV0dXJuIGRlc2NyaWJlQ29tcG9uZW50RnJhbWUobmFtZSwgZWxlbWVudCAmJiBlbGVtZW50Ll9zb3VyY2UsIG93bmVyTmFtZSk7XG59XG5cbnZhciBSZWFjdENvbXBvbmVudFRyZWVIb29rID0ge1xuICBvblNldENoaWxkcmVuOiBmdW5jdGlvbiAoaWQsIG5leHRDaGlsZElEcykge1xuICAgIHZhciBpdGVtID0gZ2V0SXRlbShpZCk7XG4gICAgIWl0ZW0gPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAnSXRlbSBtdXN0IGhhdmUgYmVlbiBzZXQnKSA6IF9wcm9kSW52YXJpYW50KCcxNDQnKSA6IHZvaWQgMDtcbiAgICBpdGVtLmNoaWxkSURzID0gbmV4dENoaWxkSURzO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuZXh0Q2hpbGRJRHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBuZXh0Q2hpbGRJRCA9IG5leHRDaGlsZElEc1tpXTtcbiAgICAgIHZhciBuZXh0Q2hpbGQgPSBnZXRJdGVtKG5leHRDaGlsZElEKTtcbiAgICAgICFuZXh0Q2hpbGQgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAnRXhwZWN0ZWQgaG9vayBldmVudHMgdG8gZmlyZSBmb3IgdGhlIGNoaWxkIGJlZm9yZSBpdHMgcGFyZW50IGluY2x1ZGVzIGl0IGluIG9uU2V0Q2hpbGRyZW4oKS4nKSA6IF9wcm9kSW52YXJpYW50KCcxNDAnKSA6IHZvaWQgMDtcbiAgICAgICEobmV4dENoaWxkLmNoaWxkSURzICE9IG51bGwgfHwgdHlwZW9mIG5leHRDaGlsZC5lbGVtZW50ICE9PSAnb2JqZWN0JyB8fCBuZXh0Q2hpbGQuZWxlbWVudCA9PSBudWxsKSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICdFeHBlY3RlZCBvblNldENoaWxkcmVuKCkgdG8gZmlyZSBmb3IgYSBjb250YWluZXIgY2hpbGQgYmVmb3JlIGl0cyBwYXJlbnQgaW5jbHVkZXMgaXQgaW4gb25TZXRDaGlsZHJlbigpLicpIDogX3Byb2RJbnZhcmlhbnQoJzE0MScpIDogdm9pZCAwO1xuICAgICAgIW5leHRDaGlsZC5pc01vdW50ZWQgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAnRXhwZWN0ZWQgb25Nb3VudENvbXBvbmVudCgpIHRvIGZpcmUgZm9yIHRoZSBjaGlsZCBiZWZvcmUgaXRzIHBhcmVudCBpbmNsdWRlcyBpdCBpbiBvblNldENoaWxkcmVuKCkuJykgOiBfcHJvZEludmFyaWFudCgnNzEnKSA6IHZvaWQgMDtcbiAgICAgIGlmIChuZXh0Q2hpbGQucGFyZW50SUQgPT0gbnVsbCkge1xuICAgICAgICBuZXh0Q2hpbGQucGFyZW50SUQgPSBpZDtcbiAgICAgICAgLy8gVE9ETzogVGhpcyBzaG91bGRuJ3QgYmUgbmVjZXNzYXJ5IGJ1dCBtb3VudGluZyBhIG5ldyByb290IGR1cmluZyBpblxuICAgICAgICAvLyBjb21wb25lbnRXaWxsTW91bnQgY3VycmVudGx5IGNhdXNlcyBub3QteWV0LW1vdW50ZWQgY29tcG9uZW50cyB0b1xuICAgICAgICAvLyBiZSBwdXJnZWQgZnJvbSBvdXIgdHJlZSBkYXRhIHNvIHRoZWlyIHBhcmVudCBpZCBpcyBtaXNzaW5nLlxuICAgICAgfVxuICAgICAgIShuZXh0Q2hpbGQucGFyZW50SUQgPT09IGlkKSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICdFeHBlY3RlZCBvbkJlZm9yZU1vdW50Q29tcG9uZW50KCkgcGFyZW50IGFuZCBvblNldENoaWxkcmVuKCkgdG8gYmUgY29uc2lzdGVudCAoJXMgaGFzIHBhcmVudHMgJXMgYW5kICVzKS4nLCBuZXh0Q2hpbGRJRCwgbmV4dENoaWxkLnBhcmVudElELCBpZCkgOiBfcHJvZEludmFyaWFudCgnMTQyJywgbmV4dENoaWxkSUQsIG5leHRDaGlsZC5wYXJlbnRJRCwgaWQpIDogdm9pZCAwO1xuICAgIH1cbiAgfSxcbiAgb25CZWZvcmVNb3VudENvbXBvbmVudDogZnVuY3Rpb24gKGlkLCBlbGVtZW50LCBwYXJlbnRJRCkge1xuICAgIHZhciBpdGVtID0ge1xuICAgICAgZWxlbWVudDogZWxlbWVudCxcbiAgICAgIHBhcmVudElEOiBwYXJlbnRJRCxcbiAgICAgIHRleHQ6IG51bGwsXG4gICAgICBjaGlsZElEczogW10sXG4gICAgICBpc01vdW50ZWQ6IGZhbHNlLFxuICAgICAgdXBkYXRlQ291bnQ6IDBcbiAgICB9O1xuICAgIHNldEl0ZW0oaWQsIGl0ZW0pO1xuICB9LFxuICBvbkJlZm9yZVVwZGF0ZUNvbXBvbmVudDogZnVuY3Rpb24gKGlkLCBlbGVtZW50KSB7XG4gICAgdmFyIGl0ZW0gPSBnZXRJdGVtKGlkKTtcbiAgICBpZiAoIWl0ZW0gfHwgIWl0ZW0uaXNNb3VudGVkKSB7XG4gICAgICAvLyBXZSBtYXkgZW5kIHVwIGhlcmUgYXMgYSByZXN1bHQgb2Ygc2V0U3RhdGUoKSBpbiBjb21wb25lbnRXaWxsVW5tb3VudCgpLlxuICAgICAgLy8gSW4gdGhpcyBjYXNlLCBpZ25vcmUgdGhlIGVsZW1lbnQuXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGl0ZW0uZWxlbWVudCA9IGVsZW1lbnQ7XG4gIH0sXG4gIG9uTW91bnRDb21wb25lbnQ6IGZ1bmN0aW9uIChpZCkge1xuICAgIHZhciBpdGVtID0gZ2V0SXRlbShpZCk7XG4gICAgIWl0ZW0gPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAnSXRlbSBtdXN0IGhhdmUgYmVlbiBzZXQnKSA6IF9wcm9kSW52YXJpYW50KCcxNDQnKSA6IHZvaWQgMDtcbiAgICBpdGVtLmlzTW91bnRlZCA9IHRydWU7XG4gICAgdmFyIGlzUm9vdCA9IGl0ZW0ucGFyZW50SUQgPT09IDA7XG4gICAgaWYgKGlzUm9vdCkge1xuICAgICAgYWRkUm9vdChpZCk7XG4gICAgfVxuICB9LFxuICBvblVwZGF0ZUNvbXBvbmVudDogZnVuY3Rpb24gKGlkKSB7XG4gICAgdmFyIGl0ZW0gPSBnZXRJdGVtKGlkKTtcbiAgICBpZiAoIWl0ZW0gfHwgIWl0ZW0uaXNNb3VudGVkKSB7XG4gICAgICAvLyBXZSBtYXkgZW5kIHVwIGhlcmUgYXMgYSByZXN1bHQgb2Ygc2V0U3RhdGUoKSBpbiBjb21wb25lbnRXaWxsVW5tb3VudCgpLlxuICAgICAgLy8gSW4gdGhpcyBjYXNlLCBpZ25vcmUgdGhlIGVsZW1lbnQuXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGl0ZW0udXBkYXRlQ291bnQrKztcbiAgfSxcbiAgb25Vbm1vdW50Q29tcG9uZW50OiBmdW5jdGlvbiAoaWQpIHtcbiAgICB2YXIgaXRlbSA9IGdldEl0ZW0oaWQpO1xuICAgIGlmIChpdGVtKSB7XG4gICAgICAvLyBXZSBuZWVkIHRvIGNoZWNrIGlmIGl0IGV4aXN0cy5cbiAgICAgIC8vIGBpdGVtYCBtaWdodCBub3QgZXhpc3QgaWYgaXQgaXMgaW5zaWRlIGFuIGVycm9yIGJvdW5kYXJ5LCBhbmQgYSBzaWJsaW5nXG4gICAgICAvLyBlcnJvciBib3VuZGFyeSBjaGlsZCB0aHJldyB3aGlsZSBtb3VudGluZy4gVGhlbiB0aGlzIGluc3RhbmNlIG5ldmVyXG4gICAgICAvLyBnb3QgYSBjaGFuY2UgdG8gbW91bnQsIGJ1dCBpdCBzdGlsbCBnZXRzIGFuIHVubW91bnRpbmcgZXZlbnQgZHVyaW5nXG4gICAgICAvLyB0aGUgZXJyb3IgYm91bmRhcnkgY2xlYW51cC5cbiAgICAgIGl0ZW0uaXNNb3VudGVkID0gZmFsc2U7XG4gICAgICB2YXIgaXNSb290ID0gaXRlbS5wYXJlbnRJRCA9PT0gMDtcbiAgICAgIGlmIChpc1Jvb3QpIHtcbiAgICAgICAgcmVtb3ZlUm9vdChpZCk7XG4gICAgICB9XG4gICAgfVxuICAgIHVubW91bnRlZElEcy5wdXNoKGlkKTtcbiAgfSxcbiAgcHVyZ2VVbm1vdW50ZWRDb21wb25lbnRzOiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKFJlYWN0Q29tcG9uZW50VHJlZUhvb2suX3ByZXZlbnRQdXJnaW5nKSB7XG4gICAgICAvLyBTaG91bGQgb25seSBiZSB1c2VkIGZvciB0ZXN0aW5nLlxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdW5tb3VudGVkSURzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaWQgPSB1bm1vdW50ZWRJRHNbaV07XG4gICAgICBwdXJnZURlZXAoaWQpO1xuICAgIH1cbiAgICB1bm1vdW50ZWRJRHMubGVuZ3RoID0gMDtcbiAgfSxcbiAgaXNNb3VudGVkOiBmdW5jdGlvbiAoaWQpIHtcbiAgICB2YXIgaXRlbSA9IGdldEl0ZW0oaWQpO1xuICAgIHJldHVybiBpdGVtID8gaXRlbS5pc01vdW50ZWQgOiBmYWxzZTtcbiAgfSxcbiAgZ2V0Q3VycmVudFN0YWNrQWRkZW5kdW06IGZ1bmN0aW9uICh0b3BFbGVtZW50KSB7XG4gICAgdmFyIGluZm8gPSAnJztcbiAgICBpZiAodG9wRWxlbWVudCkge1xuICAgICAgdmFyIG5hbWUgPSBnZXREaXNwbGF5TmFtZSh0b3BFbGVtZW50KTtcbiAgICAgIHZhciBvd25lciA9IHRvcEVsZW1lbnQuX293bmVyO1xuICAgICAgaW5mbyArPSBkZXNjcmliZUNvbXBvbmVudEZyYW1lKG5hbWUsIHRvcEVsZW1lbnQuX3NvdXJjZSwgb3duZXIgJiYgb3duZXIuZ2V0TmFtZSgpKTtcbiAgICB9XG5cbiAgICB2YXIgY3VycmVudE93bmVyID0gUmVhY3RDdXJyZW50T3duZXIuY3VycmVudDtcbiAgICB2YXIgaWQgPSBjdXJyZW50T3duZXIgJiYgY3VycmVudE93bmVyLl9kZWJ1Z0lEO1xuXG4gICAgaW5mbyArPSBSZWFjdENvbXBvbmVudFRyZWVIb29rLmdldFN0YWNrQWRkZW5kdW1CeUlEKGlkKTtcbiAgICByZXR1cm4gaW5mbztcbiAgfSxcbiAgZ2V0U3RhY2tBZGRlbmR1bUJ5SUQ6IGZ1bmN0aW9uIChpZCkge1xuICAgIHZhciBpbmZvID0gJyc7XG4gICAgd2hpbGUgKGlkKSB7XG4gICAgICBpbmZvICs9IGRlc2NyaWJlSUQoaWQpO1xuICAgICAgaWQgPSBSZWFjdENvbXBvbmVudFRyZWVIb29rLmdldFBhcmVudElEKGlkKTtcbiAgICB9XG4gICAgcmV0dXJuIGluZm87XG4gIH0sXG4gIGdldENoaWxkSURzOiBmdW5jdGlvbiAoaWQpIHtcbiAgICB2YXIgaXRlbSA9IGdldEl0ZW0oaWQpO1xuICAgIHJldHVybiBpdGVtID8gaXRlbS5jaGlsZElEcyA6IFtdO1xuICB9LFxuICBnZXREaXNwbGF5TmFtZTogZnVuY3Rpb24gKGlkKSB7XG4gICAgdmFyIGVsZW1lbnQgPSBSZWFjdENvbXBvbmVudFRyZWVIb29rLmdldEVsZW1lbnQoaWQpO1xuICAgIGlmICghZWxlbWVudCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBnZXREaXNwbGF5TmFtZShlbGVtZW50KTtcbiAgfSxcbiAgZ2V0RWxlbWVudDogZnVuY3Rpb24gKGlkKSB7XG4gICAgdmFyIGl0ZW0gPSBnZXRJdGVtKGlkKTtcbiAgICByZXR1cm4gaXRlbSA/IGl0ZW0uZWxlbWVudCA6IG51bGw7XG4gIH0sXG4gIGdldE93bmVySUQ6IGZ1bmN0aW9uIChpZCkge1xuICAgIHZhciBlbGVtZW50ID0gUmVhY3RDb21wb25lbnRUcmVlSG9vay5nZXRFbGVtZW50KGlkKTtcbiAgICBpZiAoIWVsZW1lbnQgfHwgIWVsZW1lbnQuX293bmVyKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGVsZW1lbnQuX293bmVyLl9kZWJ1Z0lEO1xuICB9LFxuICBnZXRQYXJlbnRJRDogZnVuY3Rpb24gKGlkKSB7XG4gICAgdmFyIGl0ZW0gPSBnZXRJdGVtKGlkKTtcbiAgICByZXR1cm4gaXRlbSA/IGl0ZW0ucGFyZW50SUQgOiBudWxsO1xuICB9LFxuICBnZXRTb3VyY2U6IGZ1bmN0aW9uIChpZCkge1xuICAgIHZhciBpdGVtID0gZ2V0SXRlbShpZCk7XG4gICAgdmFyIGVsZW1lbnQgPSBpdGVtID8gaXRlbS5lbGVtZW50IDogbnVsbDtcbiAgICB2YXIgc291cmNlID0gZWxlbWVudCAhPSBudWxsID8gZWxlbWVudC5fc291cmNlIDogbnVsbDtcbiAgICByZXR1cm4gc291cmNlO1xuICB9LFxuICBnZXRUZXh0OiBmdW5jdGlvbiAoaWQpIHtcbiAgICB2YXIgZWxlbWVudCA9IFJlYWN0Q29tcG9uZW50VHJlZUhvb2suZ2V0RWxlbWVudChpZCk7XG4gICAgaWYgKHR5cGVvZiBlbGVtZW50ID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZWxlbWVudCA9PT0gJ251bWJlcicpIHtcbiAgICAgIHJldHVybiAnJyArIGVsZW1lbnQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfSxcbiAgZ2V0VXBkYXRlQ291bnQ6IGZ1bmN0aW9uIChpZCkge1xuICAgIHZhciBpdGVtID0gZ2V0SXRlbShpZCk7XG4gICAgcmV0dXJuIGl0ZW0gPyBpdGVtLnVwZGF0ZUNvdW50IDogMDtcbiAgfSxcblxuXG4gIGdldFJvb3RJRHM6IGdldFJvb3RJRHMsXG4gIGdldFJlZ2lzdGVyZWRJRHM6IGdldEl0ZW1JRHMsXG5cbiAgcHVzaE5vblN0YW5kYXJkV2FybmluZ1N0YWNrOiBmdW5jdGlvbiAoaXNDcmVhdGluZ0VsZW1lbnQsIGN1cnJlbnRTb3VyY2UpIHtcbiAgICBpZiAodHlwZW9mIGNvbnNvbGUucmVhY3RTdGFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBzdGFjayA9IFtdO1xuICAgIHZhciBjdXJyZW50T3duZXIgPSBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50O1xuICAgIHZhciBpZCA9IGN1cnJlbnRPd25lciAmJiBjdXJyZW50T3duZXIuX2RlYnVnSUQ7XG5cbiAgICB0cnkge1xuICAgICAgaWYgKGlzQ3JlYXRpbmdFbGVtZW50KSB7XG4gICAgICAgIHN0YWNrLnB1c2goe1xuICAgICAgICAgIG5hbWU6IGlkID8gUmVhY3RDb21wb25lbnRUcmVlSG9vay5nZXREaXNwbGF5TmFtZShpZCkgOiBudWxsLFxuICAgICAgICAgIGZpbGVOYW1lOiBjdXJyZW50U291cmNlID8gY3VycmVudFNvdXJjZS5maWxlTmFtZSA6IG51bGwsXG4gICAgICAgICAgbGluZU51bWJlcjogY3VycmVudFNvdXJjZSA/IGN1cnJlbnRTb3VyY2UubGluZU51bWJlciA6IG51bGxcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHdoaWxlIChpZCkge1xuICAgICAgICB2YXIgZWxlbWVudCA9IFJlYWN0Q29tcG9uZW50VHJlZUhvb2suZ2V0RWxlbWVudChpZCk7XG4gICAgICAgIHZhciBwYXJlbnRJRCA9IFJlYWN0Q29tcG9uZW50VHJlZUhvb2suZ2V0UGFyZW50SUQoaWQpO1xuICAgICAgICB2YXIgb3duZXJJRCA9IFJlYWN0Q29tcG9uZW50VHJlZUhvb2suZ2V0T3duZXJJRChpZCk7XG4gICAgICAgIHZhciBvd25lck5hbWUgPSBvd25lcklEID8gUmVhY3RDb21wb25lbnRUcmVlSG9vay5nZXREaXNwbGF5TmFtZShvd25lcklEKSA6IG51bGw7XG4gICAgICAgIHZhciBzb3VyY2UgPSBlbGVtZW50ICYmIGVsZW1lbnQuX3NvdXJjZTtcbiAgICAgICAgc3RhY2sucHVzaCh7XG4gICAgICAgICAgbmFtZTogb3duZXJOYW1lLFxuICAgICAgICAgIGZpbGVOYW1lOiBzb3VyY2UgPyBzb3VyY2UuZmlsZU5hbWUgOiBudWxsLFxuICAgICAgICAgIGxpbmVOdW1iZXI6IHNvdXJjZSA/IHNvdXJjZS5saW5lTnVtYmVyIDogbnVsbFxuICAgICAgICB9KTtcbiAgICAgICAgaWQgPSBwYXJlbnRJRDtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIEludGVybmFsIHN0YXRlIGlzIG1lc3NlZCB1cC5cbiAgICAgIC8vIFN0b3AgYnVpbGRpbmcgdGhlIHN0YWNrIChpdCdzIGp1c3QgYSBuaWNlIHRvIGhhdmUpLlxuICAgIH1cblxuICAgIGNvbnNvbGUucmVhY3RTdGFjayhzdGFjayk7XG4gIH0sXG4gIHBvcE5vblN0YW5kYXJkV2FybmluZ1N0YWNrOiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHR5cGVvZiBjb25zb2xlLnJlYWN0U3RhY2tFbmQgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc29sZS5yZWFjdFN0YWNrRW5kKCk7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RDb21wb25lbnRUcmVlSG9vaztcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3JlYWN0L2xpYi9SZWFjdENvbXBvbmVudFRyZWVIb29rLmpzIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBcbiAqL1xuXG5mdW5jdGlvbiBtYWtlRW1wdHlGdW5jdGlvbihhcmcpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gYXJnO1xuICB9O1xufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gYWNjZXB0cyBhbmQgZGlzY2FyZHMgaW5wdXRzOyBpdCBoYXMgbm8gc2lkZSBlZmZlY3RzLiBUaGlzIGlzXG4gKiBwcmltYXJpbHkgdXNlZnVsIGlkaW9tYXRpY2FsbHkgZm9yIG92ZXJyaWRhYmxlIGZ1bmN0aW9uIGVuZHBvaW50cyB3aGljaFxuICogYWx3YXlzIG5lZWQgdG8gYmUgY2FsbGFibGUsIHNpbmNlIEpTIGxhY2tzIGEgbnVsbC1jYWxsIGlkaW9tIGFsYSBDb2NvYS5cbiAqL1xudmFyIGVtcHR5RnVuY3Rpb24gPSBmdW5jdGlvbiBlbXB0eUZ1bmN0aW9uKCkge307XG5cbmVtcHR5RnVuY3Rpb24udGhhdFJldHVybnMgPSBtYWtlRW1wdHlGdW5jdGlvbjtcbmVtcHR5RnVuY3Rpb24udGhhdFJldHVybnNGYWxzZSA9IG1ha2VFbXB0eUZ1bmN0aW9uKGZhbHNlKTtcbmVtcHR5RnVuY3Rpb24udGhhdFJldHVybnNUcnVlID0gbWFrZUVtcHR5RnVuY3Rpb24odHJ1ZSk7XG5lbXB0eUZ1bmN0aW9uLnRoYXRSZXR1cm5zTnVsbCA9IG1ha2VFbXB0eUZ1bmN0aW9uKG51bGwpO1xuZW1wdHlGdW5jdGlvbi50aGF0UmV0dXJuc1RoaXMgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzO1xufTtcbmVtcHR5RnVuY3Rpb24udGhhdFJldHVybnNBcmd1bWVudCA9IGZ1bmN0aW9uIChhcmcpIHtcbiAgcmV0dXJuIGFyZztcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZW1wdHlGdW5jdGlvbjtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L2ZianMvbGliL2VtcHR5RnVuY3Rpb24uanMiLCIvKipcbiAqIENvcHlyaWdodCAyMDE2LXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbi8vIFRydXN0IHRoZSBkZXZlbG9wZXIgdG8gb25seSB1c2UgUmVhY3RJbnN0cnVtZW50YXRpb24gd2l0aCBhIF9fREVWX18gY2hlY2tcblxudmFyIGRlYnVnVG9vbCA9IG51bGw7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHZhciBSZWFjdERlYnVnVG9vbCA9IHJlcXVpcmUoJy4vUmVhY3REZWJ1Z1Rvb2wnKTtcbiAgZGVidWdUb29sID0gUmVhY3REZWJ1Z1Rvb2w7XG59XG5cbm1vZHVsZS5leHBvcnRzID0geyBkZWJ1Z1Rvb2w6IGRlYnVnVG9vbCB9O1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QtZG9tL2xpYi9SZWFjdEluc3RydW1lbnRhdGlvbi5qcyIsImltcG9ydCBfTWVtb3J5Um91dGVyIGZyb20gJy4vTWVtb3J5Um91dGVyJztcbmV4cG9ydCB7IF9NZW1vcnlSb3V0ZXIgYXMgTWVtb3J5Um91dGVyIH07XG5pbXBvcnQgX1Byb21wdCBmcm9tICcuL1Byb21wdCc7XG5leHBvcnQgeyBfUHJvbXB0IGFzIFByb21wdCB9O1xuaW1wb3J0IF9SZWRpcmVjdCBmcm9tICcuL1JlZGlyZWN0JztcbmV4cG9ydCB7IF9SZWRpcmVjdCBhcyBSZWRpcmVjdCB9O1xuaW1wb3J0IF9Sb3V0ZSBmcm9tICcuL1JvdXRlJztcbmV4cG9ydCB7IF9Sb3V0ZSBhcyBSb3V0ZSB9O1xuaW1wb3J0IF9Sb3V0ZXIgZnJvbSAnLi9Sb3V0ZXInO1xuZXhwb3J0IHsgX1JvdXRlciBhcyBSb3V0ZXIgfTtcbmltcG9ydCBfU3RhdGljUm91dGVyIGZyb20gJy4vU3RhdGljUm91dGVyJztcbmV4cG9ydCB7IF9TdGF0aWNSb3V0ZXIgYXMgU3RhdGljUm91dGVyIH07XG5pbXBvcnQgX1N3aXRjaCBmcm9tICcuL1N3aXRjaCc7XG5leHBvcnQgeyBfU3dpdGNoIGFzIFN3aXRjaCB9O1xuaW1wb3J0IF9tYXRjaFBhdGggZnJvbSAnLi9tYXRjaFBhdGgnO1xuZXhwb3J0IHsgX21hdGNoUGF0aCBhcyBtYXRjaFBhdGggfTtcbmltcG9ydCBfd2l0aFJvdXRlciBmcm9tICcuL3dpdGhSb3V0ZXInO1xuZXhwb3J0IHsgX3dpdGhSb3V0ZXIgYXMgd2l0aFJvdXRlciB9O1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3Qtcm91dGVyL2VzL2luZGV4LmpzIiwiaW1wb3J0IFByb3ZpZGVyLCB7IGNyZWF0ZVByb3ZpZGVyIH0gZnJvbSAnLi9jb21wb25lbnRzL1Byb3ZpZGVyJztcbmltcG9ydCBjb25uZWN0QWR2YW5jZWQgZnJvbSAnLi9jb21wb25lbnRzL2Nvbm5lY3RBZHZhbmNlZCc7XG5pbXBvcnQgY29ubmVjdCBmcm9tICcuL2Nvbm5lY3QvY29ubmVjdCc7XG5cbmV4cG9ydCB7IFByb3ZpZGVyLCBjcmVhdGVQcm92aWRlciwgY29ubmVjdEFkdmFuY2VkLCBjb25uZWN0IH07XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1yZWR1eC9lcy9pbmRleC5qcyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBfcHJvZEludmFyaWFudCA9IHJlcXVpcmUoJy4vcmVhY3RQcm9kSW52YXJpYW50JyksXG4gICAgX2Fzc2lnbiA9IHJlcXVpcmUoJ29iamVjdC1hc3NpZ24nKTtcblxudmFyIENhbGxiYWNrUXVldWUgPSByZXF1aXJlKCcuL0NhbGxiYWNrUXVldWUnKTtcbnZhciBQb29sZWRDbGFzcyA9IHJlcXVpcmUoJy4vUG9vbGVkQ2xhc3MnKTtcbnZhciBSZWFjdEZlYXR1cmVGbGFncyA9IHJlcXVpcmUoJy4vUmVhY3RGZWF0dXJlRmxhZ3MnKTtcbnZhciBSZWFjdFJlY29uY2lsZXIgPSByZXF1aXJlKCcuL1JlYWN0UmVjb25jaWxlcicpO1xudmFyIFRyYW5zYWN0aW9uID0gcmVxdWlyZSgnLi9UcmFuc2FjdGlvbicpO1xuXG52YXIgaW52YXJpYW50ID0gcmVxdWlyZSgnZmJqcy9saWIvaW52YXJpYW50Jyk7XG5cbnZhciBkaXJ0eUNvbXBvbmVudHMgPSBbXTtcbnZhciB1cGRhdGVCYXRjaE51bWJlciA9IDA7XG52YXIgYXNhcENhbGxiYWNrUXVldWUgPSBDYWxsYmFja1F1ZXVlLmdldFBvb2xlZCgpO1xudmFyIGFzYXBFbnF1ZXVlZCA9IGZhbHNlO1xuXG52YXIgYmF0Y2hpbmdTdHJhdGVneSA9IG51bGw7XG5cbmZ1bmN0aW9uIGVuc3VyZUluamVjdGVkKCkge1xuICAhKFJlYWN0VXBkYXRlcy5SZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9uICYmIGJhdGNoaW5nU3RyYXRlZ3kpID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IGludmFyaWFudChmYWxzZSwgJ1JlYWN0VXBkYXRlczogbXVzdCBpbmplY3QgYSByZWNvbmNpbGUgdHJhbnNhY3Rpb24gY2xhc3MgYW5kIGJhdGNoaW5nIHN0cmF0ZWd5JykgOiBfcHJvZEludmFyaWFudCgnMTIzJykgOiB2b2lkIDA7XG59XG5cbnZhciBORVNURURfVVBEQVRFUyA9IHtcbiAgaW5pdGlhbGl6ZTogZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZGlydHlDb21wb25lbnRzTGVuZ3RoID0gZGlydHlDb21wb25lbnRzLmxlbmd0aDtcbiAgfSxcbiAgY2xvc2U6IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAodGhpcy5kaXJ0eUNvbXBvbmVudHNMZW5ndGggIT09IGRpcnR5Q29tcG9uZW50cy5sZW5ndGgpIHtcbiAgICAgIC8vIEFkZGl0aW9uYWwgdXBkYXRlcyB3ZXJlIGVucXVldWVkIGJ5IGNvbXBvbmVudERpZFVwZGF0ZSBoYW5kbGVycyBvclxuICAgICAgLy8gc2ltaWxhcjsgYmVmb3JlIG91ciBvd24gVVBEQVRFX1FVRVVFSU5HIHdyYXBwZXIgY2xvc2VzLCB3ZSB3YW50IHRvIHJ1blxuICAgICAgLy8gdGhlc2UgbmV3IHVwZGF0ZXMgc28gdGhhdCBpZiBBJ3MgY29tcG9uZW50RGlkVXBkYXRlIGNhbGxzIHNldFN0YXRlIG9uXG4gICAgICAvLyBCLCBCIHdpbGwgdXBkYXRlIGJlZm9yZSB0aGUgY2FsbGJhY2sgQSdzIHVwZGF0ZXIgcHJvdmlkZWQgd2hlbiBjYWxsaW5nXG4gICAgICAvLyBzZXRTdGF0ZS5cbiAgICAgIGRpcnR5Q29tcG9uZW50cy5zcGxpY2UoMCwgdGhpcy5kaXJ0eUNvbXBvbmVudHNMZW5ndGgpO1xuICAgICAgZmx1c2hCYXRjaGVkVXBkYXRlcygpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkaXJ0eUNvbXBvbmVudHMubGVuZ3RoID0gMDtcbiAgICB9XG4gIH1cbn07XG5cbnZhciBVUERBVEVfUVVFVUVJTkcgPSB7XG4gIGluaXRpYWxpemU6IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmNhbGxiYWNrUXVldWUucmVzZXQoKTtcbiAgfSxcbiAgY2xvc2U6IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmNhbGxiYWNrUXVldWUubm90aWZ5QWxsKCk7XG4gIH1cbn07XG5cbnZhciBUUkFOU0FDVElPTl9XUkFQUEVSUyA9IFtORVNURURfVVBEQVRFUywgVVBEQVRFX1FVRVVFSU5HXTtcblxuZnVuY3Rpb24gUmVhY3RVcGRhdGVzRmx1c2hUcmFuc2FjdGlvbigpIHtcbiAgdGhpcy5yZWluaXRpYWxpemVUcmFuc2FjdGlvbigpO1xuICB0aGlzLmRpcnR5Q29tcG9uZW50c0xlbmd0aCA9IG51bGw7XG4gIHRoaXMuY2FsbGJhY2tRdWV1ZSA9IENhbGxiYWNrUXVldWUuZ2V0UG9vbGVkKCk7XG4gIHRoaXMucmVjb25jaWxlVHJhbnNhY3Rpb24gPSBSZWFjdFVwZGF0ZXMuUmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvbi5nZXRQb29sZWQoXG4gIC8qIHVzZUNyZWF0ZUVsZW1lbnQgKi90cnVlKTtcbn1cblxuX2Fzc2lnbihSZWFjdFVwZGF0ZXNGbHVzaFRyYW5zYWN0aW9uLnByb3RvdHlwZSwgVHJhbnNhY3Rpb24sIHtcbiAgZ2V0VHJhbnNhY3Rpb25XcmFwcGVyczogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBUUkFOU0FDVElPTl9XUkFQUEVSUztcbiAgfSxcblxuICBkZXN0cnVjdG9yOiBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5kaXJ0eUNvbXBvbmVudHNMZW5ndGggPSBudWxsO1xuICAgIENhbGxiYWNrUXVldWUucmVsZWFzZSh0aGlzLmNhbGxiYWNrUXVldWUpO1xuICAgIHRoaXMuY2FsbGJhY2tRdWV1ZSA9IG51bGw7XG4gICAgUmVhY3RVcGRhdGVzLlJlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb24ucmVsZWFzZSh0aGlzLnJlY29uY2lsZVRyYW5zYWN0aW9uKTtcbiAgICB0aGlzLnJlY29uY2lsZVRyYW5zYWN0aW9uID0gbnVsbDtcbiAgfSxcblxuICBwZXJmb3JtOiBmdW5jdGlvbiAobWV0aG9kLCBzY29wZSwgYSkge1xuICAgIC8vIEVzc2VudGlhbGx5IGNhbGxzIGB0aGlzLnJlY29uY2lsZVRyYW5zYWN0aW9uLnBlcmZvcm0obWV0aG9kLCBzY29wZSwgYSlgXG4gICAgLy8gd2l0aCB0aGlzIHRyYW5zYWN0aW9uJ3Mgd3JhcHBlcnMgYXJvdW5kIGl0LlxuICAgIHJldHVybiBUcmFuc2FjdGlvbi5wZXJmb3JtLmNhbGwodGhpcywgdGhpcy5yZWNvbmNpbGVUcmFuc2FjdGlvbi5wZXJmb3JtLCB0aGlzLnJlY29uY2lsZVRyYW5zYWN0aW9uLCBtZXRob2QsIHNjb3BlLCBhKTtcbiAgfVxufSk7XG5cblBvb2xlZENsYXNzLmFkZFBvb2xpbmdUbyhSZWFjdFVwZGF0ZXNGbHVzaFRyYW5zYWN0aW9uKTtcblxuZnVuY3Rpb24gYmF0Y2hlZFVwZGF0ZXMoY2FsbGJhY2ssIGEsIGIsIGMsIGQsIGUpIHtcbiAgZW5zdXJlSW5qZWN0ZWQoKTtcbiAgcmV0dXJuIGJhdGNoaW5nU3RyYXRlZ3kuYmF0Y2hlZFVwZGF0ZXMoY2FsbGJhY2ssIGEsIGIsIGMsIGQsIGUpO1xufVxuXG4vKipcbiAqIEFycmF5IGNvbXBhcmF0b3IgZm9yIFJlYWN0Q29tcG9uZW50cyBieSBtb3VudCBvcmRlcmluZy5cbiAqXG4gKiBAcGFyYW0ge1JlYWN0Q29tcG9uZW50fSBjMSBmaXJzdCBjb21wb25lbnQgeW91J3JlIGNvbXBhcmluZ1xuICogQHBhcmFtIHtSZWFjdENvbXBvbmVudH0gYzIgc2Vjb25kIGNvbXBvbmVudCB5b3UncmUgY29tcGFyaW5nXG4gKiBAcmV0dXJuIHtudW1iZXJ9IFJldHVybiB2YWx1ZSB1c2FibGUgYnkgQXJyYXkucHJvdG90eXBlLnNvcnQoKS5cbiAqL1xuZnVuY3Rpb24gbW91bnRPcmRlckNvbXBhcmF0b3IoYzEsIGMyKSB7XG4gIHJldHVybiBjMS5fbW91bnRPcmRlciAtIGMyLl9tb3VudE9yZGVyO1xufVxuXG5mdW5jdGlvbiBydW5CYXRjaGVkVXBkYXRlcyh0cmFuc2FjdGlvbikge1xuICB2YXIgbGVuID0gdHJhbnNhY3Rpb24uZGlydHlDb21wb25lbnRzTGVuZ3RoO1xuICAhKGxlbiA9PT0gZGlydHlDb21wb25lbnRzLmxlbmd0aCkgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAnRXhwZWN0ZWQgZmx1c2ggdHJhbnNhY3Rpb25cXCdzIHN0b3JlZCBkaXJ0eS1jb21wb25lbnRzIGxlbmd0aCAoJXMpIHRvIG1hdGNoIGRpcnR5LWNvbXBvbmVudHMgYXJyYXkgbGVuZ3RoICglcykuJywgbGVuLCBkaXJ0eUNvbXBvbmVudHMubGVuZ3RoKSA6IF9wcm9kSW52YXJpYW50KCcxMjQnLCBsZW4sIGRpcnR5Q29tcG9uZW50cy5sZW5ndGgpIDogdm9pZCAwO1xuXG4gIC8vIFNpbmNlIHJlY29uY2lsaW5nIGEgY29tcG9uZW50IGhpZ2hlciBpbiB0aGUgb3duZXIgaGllcmFyY2h5IHVzdWFsbHkgKG5vdFxuICAvLyBhbHdheXMgLS0gc2VlIHNob3VsZENvbXBvbmVudFVwZGF0ZSgpKSB3aWxsIHJlY29uY2lsZSBjaGlsZHJlbiwgcmVjb25jaWxlXG4gIC8vIHRoZW0gYmVmb3JlIHRoZWlyIGNoaWxkcmVuIGJ5IHNvcnRpbmcgdGhlIGFycmF5LlxuICBkaXJ0eUNvbXBvbmVudHMuc29ydChtb3VudE9yZGVyQ29tcGFyYXRvcik7XG5cbiAgLy8gQW55IHVwZGF0ZXMgZW5xdWV1ZWQgd2hpbGUgcmVjb25jaWxpbmcgbXVzdCBiZSBwZXJmb3JtZWQgYWZ0ZXIgdGhpcyBlbnRpcmVcbiAgLy8gYmF0Y2guIE90aGVyd2lzZSwgaWYgZGlydHlDb21wb25lbnRzIGlzIFtBLCBCXSB3aGVyZSBBIGhhcyBjaGlsZHJlbiBCIGFuZFxuICAvLyBDLCBCIGNvdWxkIHVwZGF0ZSB0d2ljZSBpbiBhIHNpbmdsZSBiYXRjaCBpZiBDJ3MgcmVuZGVyIGVucXVldWVzIGFuIHVwZGF0ZVxuICAvLyB0byBCIChzaW5jZSBCIHdvdWxkIGhhdmUgYWxyZWFkeSB1cGRhdGVkLCB3ZSBzaG91bGQgc2tpcCBpdCwgYW5kIHRoZSBvbmx5XG4gIC8vIHdheSB3ZSBjYW4ga25vdyB0byBkbyBzbyBpcyBieSBjaGVja2luZyB0aGUgYmF0Y2ggY291bnRlcikuXG4gIHVwZGF0ZUJhdGNoTnVtYmVyKys7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgIC8vIElmIGEgY29tcG9uZW50IGlzIHVubW91bnRlZCBiZWZvcmUgcGVuZGluZyBjaGFuZ2VzIGFwcGx5LCBpdCB3aWxsIHN0aWxsXG4gICAgLy8gYmUgaGVyZSwgYnV0IHdlIGFzc3VtZSB0aGF0IGl0IGhhcyBjbGVhcmVkIGl0cyBfcGVuZGluZ0NhbGxiYWNrcyBhbmRcbiAgICAvLyB0aGF0IHBlcmZvcm1VcGRhdGVJZk5lY2Vzc2FyeSBpcyBhIG5vb3AuXG4gICAgdmFyIGNvbXBvbmVudCA9IGRpcnR5Q29tcG9uZW50c1tpXTtcblxuICAgIC8vIElmIHBlcmZvcm1VcGRhdGVJZk5lY2Vzc2FyeSBoYXBwZW5zIHRvIGVucXVldWUgYW55IG5ldyB1cGRhdGVzLCB3ZVxuICAgIC8vIHNob3VsZG4ndCBleGVjdXRlIHRoZSBjYWxsYmFja3MgdW50aWwgdGhlIG5leHQgcmVuZGVyIGhhcHBlbnMsIHNvXG4gICAgLy8gc3Rhc2ggdGhlIGNhbGxiYWNrcyBmaXJzdFxuICAgIHZhciBjYWxsYmFja3MgPSBjb21wb25lbnQuX3BlbmRpbmdDYWxsYmFja3M7XG4gICAgY29tcG9uZW50Ll9wZW5kaW5nQ2FsbGJhY2tzID0gbnVsbDtcblxuICAgIHZhciBtYXJrZXJOYW1lO1xuICAgIGlmIChSZWFjdEZlYXR1cmVGbGFncy5sb2dUb3BMZXZlbFJlbmRlcnMpIHtcbiAgICAgIHZhciBuYW1lZENvbXBvbmVudCA9IGNvbXBvbmVudDtcbiAgICAgIC8vIER1Y2sgdHlwZSBUb3BMZXZlbFdyYXBwZXIuIFRoaXMgaXMgcHJvYmFibHkgYWx3YXlzIHRydWUuXG4gICAgICBpZiAoY29tcG9uZW50Ll9jdXJyZW50RWxlbWVudC50eXBlLmlzUmVhY3RUb3BMZXZlbFdyYXBwZXIpIHtcbiAgICAgICAgbmFtZWRDb21wb25lbnQgPSBjb21wb25lbnQuX3JlbmRlcmVkQ29tcG9uZW50O1xuICAgICAgfVxuICAgICAgbWFya2VyTmFtZSA9ICdSZWFjdCB1cGRhdGU6ICcgKyBuYW1lZENvbXBvbmVudC5nZXROYW1lKCk7XG4gICAgICBjb25zb2xlLnRpbWUobWFya2VyTmFtZSk7XG4gICAgfVxuXG4gICAgUmVhY3RSZWNvbmNpbGVyLnBlcmZvcm1VcGRhdGVJZk5lY2Vzc2FyeShjb21wb25lbnQsIHRyYW5zYWN0aW9uLnJlY29uY2lsZVRyYW5zYWN0aW9uLCB1cGRhdGVCYXRjaE51bWJlcik7XG5cbiAgICBpZiAobWFya2VyTmFtZSkge1xuICAgICAgY29uc29sZS50aW1lRW5kKG1hcmtlck5hbWUpO1xuICAgIH1cblxuICAgIGlmIChjYWxsYmFja3MpIHtcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgY2FsbGJhY2tzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIHRyYW5zYWN0aW9uLmNhbGxiYWNrUXVldWUuZW5xdWV1ZShjYWxsYmFja3Nbal0sIGNvbXBvbmVudC5nZXRQdWJsaWNJbnN0YW5jZSgpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxudmFyIGZsdXNoQmF0Y2hlZFVwZGF0ZXMgPSBmdW5jdGlvbiAoKSB7XG4gIC8vIFJlYWN0VXBkYXRlc0ZsdXNoVHJhbnNhY3Rpb24ncyB3cmFwcGVycyB3aWxsIGNsZWFyIHRoZSBkaXJ0eUNvbXBvbmVudHNcbiAgLy8gYXJyYXkgYW5kIHBlcmZvcm0gYW55IHVwZGF0ZXMgZW5xdWV1ZWQgYnkgbW91bnQtcmVhZHkgaGFuZGxlcnMgKGkuZS4sXG4gIC8vIGNvbXBvbmVudERpZFVwZGF0ZSkgYnV0IHdlIG5lZWQgdG8gY2hlY2sgaGVyZSB0b28gaW4gb3JkZXIgdG8gY2F0Y2hcbiAgLy8gdXBkYXRlcyBlbnF1ZXVlZCBieSBzZXRTdGF0ZSBjYWxsYmFja3MgYW5kIGFzYXAgY2FsbHMuXG4gIHdoaWxlIChkaXJ0eUNvbXBvbmVudHMubGVuZ3RoIHx8IGFzYXBFbnF1ZXVlZCkge1xuICAgIGlmIChkaXJ0eUNvbXBvbmVudHMubGVuZ3RoKSB7XG4gICAgICB2YXIgdHJhbnNhY3Rpb24gPSBSZWFjdFVwZGF0ZXNGbHVzaFRyYW5zYWN0aW9uLmdldFBvb2xlZCgpO1xuICAgICAgdHJhbnNhY3Rpb24ucGVyZm9ybShydW5CYXRjaGVkVXBkYXRlcywgbnVsbCwgdHJhbnNhY3Rpb24pO1xuICAgICAgUmVhY3RVcGRhdGVzRmx1c2hUcmFuc2FjdGlvbi5yZWxlYXNlKHRyYW5zYWN0aW9uKTtcbiAgICB9XG5cbiAgICBpZiAoYXNhcEVucXVldWVkKSB7XG4gICAgICBhc2FwRW5xdWV1ZWQgPSBmYWxzZTtcbiAgICAgIHZhciBxdWV1ZSA9IGFzYXBDYWxsYmFja1F1ZXVlO1xuICAgICAgYXNhcENhbGxiYWNrUXVldWUgPSBDYWxsYmFja1F1ZXVlLmdldFBvb2xlZCgpO1xuICAgICAgcXVldWUubm90aWZ5QWxsKCk7XG4gICAgICBDYWxsYmFja1F1ZXVlLnJlbGVhc2UocXVldWUpO1xuICAgIH1cbiAgfVxufTtcblxuLyoqXG4gKiBNYXJrIGEgY29tcG9uZW50IGFzIG5lZWRpbmcgYSByZXJlbmRlciwgYWRkaW5nIGFuIG9wdGlvbmFsIGNhbGxiYWNrIHRvIGFcbiAqIGxpc3Qgb2YgZnVuY3Rpb25zIHdoaWNoIHdpbGwgYmUgZXhlY3V0ZWQgb25jZSB0aGUgcmVyZW5kZXIgb2NjdXJzLlxuICovXG5mdW5jdGlvbiBlbnF1ZXVlVXBkYXRlKGNvbXBvbmVudCkge1xuICBlbnN1cmVJbmplY3RlZCgpO1xuXG4gIC8vIFZhcmlvdXMgcGFydHMgb2Ygb3VyIGNvZGUgKHN1Y2ggYXMgUmVhY3RDb21wb3NpdGVDb21wb25lbnQnc1xuICAvLyBfcmVuZGVyVmFsaWRhdGVkQ29tcG9uZW50KSBhc3N1bWUgdGhhdCBjYWxscyB0byByZW5kZXIgYXJlbid0IG5lc3RlZDtcbiAgLy8gdmVyaWZ5IHRoYXQgdGhhdCdzIHRoZSBjYXNlLiAoVGhpcyBpcyBjYWxsZWQgYnkgZWFjaCB0b3AtbGV2ZWwgdXBkYXRlXG4gIC8vIGZ1bmN0aW9uLCBsaWtlIHNldFN0YXRlLCBmb3JjZVVwZGF0ZSwgZXRjLjsgY3JlYXRpb24gYW5kXG4gIC8vIGRlc3RydWN0aW9uIG9mIHRvcC1sZXZlbCBjb21wb25lbnRzIGlzIGd1YXJkZWQgaW4gUmVhY3RNb3VudC4pXG5cbiAgaWYgKCFiYXRjaGluZ1N0cmF0ZWd5LmlzQmF0Y2hpbmdVcGRhdGVzKSB7XG4gICAgYmF0Y2hpbmdTdHJhdGVneS5iYXRjaGVkVXBkYXRlcyhlbnF1ZXVlVXBkYXRlLCBjb21wb25lbnQpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGRpcnR5Q29tcG9uZW50cy5wdXNoKGNvbXBvbmVudCk7XG4gIGlmIChjb21wb25lbnQuX3VwZGF0ZUJhdGNoTnVtYmVyID09IG51bGwpIHtcbiAgICBjb21wb25lbnQuX3VwZGF0ZUJhdGNoTnVtYmVyID0gdXBkYXRlQmF0Y2hOdW1iZXIgKyAxO1xuICB9XG59XG5cbi8qKlxuICogRW5xdWV1ZSBhIGNhbGxiYWNrIHRvIGJlIHJ1biBhdCB0aGUgZW5kIG9mIHRoZSBjdXJyZW50IGJhdGNoaW5nIGN5Y2xlLiBUaHJvd3NcbiAqIGlmIG5vIHVwZGF0ZXMgYXJlIGN1cnJlbnRseSBiZWluZyBwZXJmb3JtZWQuXG4gKi9cbmZ1bmN0aW9uIGFzYXAoY2FsbGJhY2ssIGNvbnRleHQpIHtcbiAgIWJhdGNoaW5nU3RyYXRlZ3kuaXNCYXRjaGluZ1VwZGF0ZXMgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAnUmVhY3RVcGRhdGVzLmFzYXA6IENhblxcJ3QgZW5xdWV1ZSBhbiBhc2FwIGNhbGxiYWNrIGluIGEgY29udGV4dCB3aGVyZXVwZGF0ZXMgYXJlIG5vdCBiZWluZyBiYXRjaGVkLicpIDogX3Byb2RJbnZhcmlhbnQoJzEyNScpIDogdm9pZCAwO1xuICBhc2FwQ2FsbGJhY2tRdWV1ZS5lbnF1ZXVlKGNhbGxiYWNrLCBjb250ZXh0KTtcbiAgYXNhcEVucXVldWVkID0gdHJ1ZTtcbn1cblxudmFyIFJlYWN0VXBkYXRlc0luamVjdGlvbiA9IHtcbiAgaW5qZWN0UmVjb25jaWxlVHJhbnNhY3Rpb246IGZ1bmN0aW9uIChSZWNvbmNpbGVUcmFuc2FjdGlvbikge1xuICAgICFSZWNvbmNpbGVUcmFuc2FjdGlvbiA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICdSZWFjdFVwZGF0ZXM6IG11c3QgcHJvdmlkZSBhIHJlY29uY2lsZSB0cmFuc2FjdGlvbiBjbGFzcycpIDogX3Byb2RJbnZhcmlhbnQoJzEyNicpIDogdm9pZCAwO1xuICAgIFJlYWN0VXBkYXRlcy5SZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9uID0gUmVjb25jaWxlVHJhbnNhY3Rpb247XG4gIH0sXG5cbiAgaW5qZWN0QmF0Y2hpbmdTdHJhdGVneTogZnVuY3Rpb24gKF9iYXRjaGluZ1N0cmF0ZWd5KSB7XG4gICAgIV9iYXRjaGluZ1N0cmF0ZWd5ID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IGludmFyaWFudChmYWxzZSwgJ1JlYWN0VXBkYXRlczogbXVzdCBwcm92aWRlIGEgYmF0Y2hpbmcgc3RyYXRlZ3knKSA6IF9wcm9kSW52YXJpYW50KCcxMjcnKSA6IHZvaWQgMDtcbiAgICAhKHR5cGVvZiBfYmF0Y2hpbmdTdHJhdGVneS5iYXRjaGVkVXBkYXRlcyA9PT0gJ2Z1bmN0aW9uJykgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAnUmVhY3RVcGRhdGVzOiBtdXN0IHByb3ZpZGUgYSBiYXRjaGVkVXBkYXRlcygpIGZ1bmN0aW9uJykgOiBfcHJvZEludmFyaWFudCgnMTI4JykgOiB2b2lkIDA7XG4gICAgISh0eXBlb2YgX2JhdGNoaW5nU3RyYXRlZ3kuaXNCYXRjaGluZ1VwZGF0ZXMgPT09ICdib29sZWFuJykgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAnUmVhY3RVcGRhdGVzOiBtdXN0IHByb3ZpZGUgYW4gaXNCYXRjaGluZ1VwZGF0ZXMgYm9vbGVhbiBhdHRyaWJ1dGUnKSA6IF9wcm9kSW52YXJpYW50KCcxMjknKSA6IHZvaWQgMDtcbiAgICBiYXRjaGluZ1N0cmF0ZWd5ID0gX2JhdGNoaW5nU3RyYXRlZ3k7XG4gIH1cbn07XG5cbnZhciBSZWFjdFVwZGF0ZXMgPSB7XG4gIC8qKlxuICAgKiBSZWFjdCByZWZlcmVuY2VzIGBSZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9uYCB1c2luZyB0aGlzIHByb3BlcnR5IGluIG9yZGVyXG4gICAqIHRvIGFsbG93IGRlcGVuZGVuY3kgaW5qZWN0aW9uLlxuICAgKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIFJlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb246IG51bGwsXG5cbiAgYmF0Y2hlZFVwZGF0ZXM6IGJhdGNoZWRVcGRhdGVzLFxuICBlbnF1ZXVlVXBkYXRlOiBlbnF1ZXVlVXBkYXRlLFxuICBmbHVzaEJhdGNoZWRVcGRhdGVzOiBmbHVzaEJhdGNoZWRVcGRhdGVzLFxuICBpbmplY3Rpb246IFJlYWN0VXBkYXRlc0luamVjdGlvbixcbiAgYXNhcDogYXNhcFxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdFVwZGF0ZXM7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1kb20vbGliL1JlYWN0VXBkYXRlcy5qcyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIFxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBLZWVwcyB0cmFjayBvZiB0aGUgY3VycmVudCBvd25lci5cbiAqXG4gKiBUaGUgY3VycmVudCBvd25lciBpcyB0aGUgY29tcG9uZW50IHdobyBzaG91bGQgb3duIGFueSBjb21wb25lbnRzIHRoYXQgYXJlXG4gKiBjdXJyZW50bHkgYmVpbmcgY29uc3RydWN0ZWQuXG4gKi9cbnZhciBSZWFjdEN1cnJlbnRPd25lciA9IHtcbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKiBAdHlwZSB7UmVhY3RDb21wb25lbnR9XG4gICAqL1xuICBjdXJyZW50OiBudWxsXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0Q3VycmVudE93bmVyO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QvbGliL1JlYWN0Q3VycmVudE93bmVyLmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIF9hc3NpZ24gPSByZXF1aXJlKCdvYmplY3QtYXNzaWduJyk7XG5cbnZhciBQb29sZWRDbGFzcyA9IHJlcXVpcmUoJy4vUG9vbGVkQ2xhc3MnKTtcblxudmFyIGVtcHR5RnVuY3Rpb24gPSByZXF1aXJlKCdmYmpzL2xpYi9lbXB0eUZ1bmN0aW9uJyk7XG52YXIgd2FybmluZyA9IHJlcXVpcmUoJ2ZianMvbGliL3dhcm5pbmcnKTtcblxudmFyIGRpZFdhcm5Gb3JBZGRlZE5ld1Byb3BlcnR5ID0gZmFsc2U7XG52YXIgaXNQcm94eVN1cHBvcnRlZCA9IHR5cGVvZiBQcm94eSA9PT0gJ2Z1bmN0aW9uJztcblxudmFyIHNob3VsZEJlUmVsZWFzZWRQcm9wZXJ0aWVzID0gWydkaXNwYXRjaENvbmZpZycsICdfdGFyZ2V0SW5zdCcsICduYXRpdmVFdmVudCcsICdpc0RlZmF1bHRQcmV2ZW50ZWQnLCAnaXNQcm9wYWdhdGlvblN0b3BwZWQnLCAnX2Rpc3BhdGNoTGlzdGVuZXJzJywgJ19kaXNwYXRjaEluc3RhbmNlcyddO1xuXG4vKipcbiAqIEBpbnRlcmZhY2UgRXZlbnRcbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTMtRXZlbnRzL1xuICovXG52YXIgRXZlbnRJbnRlcmZhY2UgPSB7XG4gIHR5cGU6IG51bGwsXG4gIHRhcmdldDogbnVsbCxcbiAgLy8gY3VycmVudFRhcmdldCBpcyBzZXQgd2hlbiBkaXNwYXRjaGluZzsgbm8gdXNlIGluIGNvcHlpbmcgaXQgaGVyZVxuICBjdXJyZW50VGFyZ2V0OiBlbXB0eUZ1bmN0aW9uLnRoYXRSZXR1cm5zTnVsbCxcbiAgZXZlbnRQaGFzZTogbnVsbCxcbiAgYnViYmxlczogbnVsbCxcbiAgY2FuY2VsYWJsZTogbnVsbCxcbiAgdGltZVN0YW1wOiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICByZXR1cm4gZXZlbnQudGltZVN0YW1wIHx8IERhdGUubm93KCk7XG4gIH0sXG4gIGRlZmF1bHRQcmV2ZW50ZWQ6IG51bGwsXG4gIGlzVHJ1c3RlZDogbnVsbFxufTtcblxuLyoqXG4gKiBTeW50aGV0aWMgZXZlbnRzIGFyZSBkaXNwYXRjaGVkIGJ5IGV2ZW50IHBsdWdpbnMsIHR5cGljYWxseSBpbiByZXNwb25zZSB0byBhXG4gKiB0b3AtbGV2ZWwgZXZlbnQgZGVsZWdhdGlvbiBoYW5kbGVyLlxuICpcbiAqIFRoZXNlIHN5c3RlbXMgc2hvdWxkIGdlbmVyYWxseSB1c2UgcG9vbGluZyB0byByZWR1Y2UgdGhlIGZyZXF1ZW5jeSBvZiBnYXJiYWdlXG4gKiBjb2xsZWN0aW9uLiBUaGUgc3lzdGVtIHNob3VsZCBjaGVjayBgaXNQZXJzaXN0ZW50YCB0byBkZXRlcm1pbmUgd2hldGhlciB0aGVcbiAqIGV2ZW50IHNob3VsZCBiZSByZWxlYXNlZCBpbnRvIHRoZSBwb29sIGFmdGVyIGJlaW5nIGRpc3BhdGNoZWQuIFVzZXJzIHRoYXRcbiAqIG5lZWQgYSBwZXJzaXN0ZWQgZXZlbnQgc2hvdWxkIGludm9rZSBgcGVyc2lzdGAuXG4gKlxuICogU3ludGhldGljIGV2ZW50cyAoYW5kIHN1YmNsYXNzZXMpIGltcGxlbWVudCB0aGUgRE9NIExldmVsIDMgRXZlbnRzIEFQSSBieVxuICogbm9ybWFsaXppbmcgYnJvd3NlciBxdWlya3MuIFN1YmNsYXNzZXMgZG8gbm90IG5lY2Vzc2FyaWx5IGhhdmUgdG8gaW1wbGVtZW50IGFcbiAqIERPTSBpbnRlcmZhY2U7IGN1c3RvbSBhcHBsaWNhdGlvbi1zcGVjaWZpYyBldmVudHMgY2FuIGFsc28gc3ViY2xhc3MgdGhpcy5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gZGlzcGF0Y2hDb25maWcgQ29uZmlndXJhdGlvbiB1c2VkIHRvIGRpc3BhdGNoIHRoaXMgZXZlbnQuXG4gKiBAcGFyYW0geyp9IHRhcmdldEluc3QgTWFya2VyIGlkZW50aWZ5aW5nIHRoZSBldmVudCB0YXJnZXQuXG4gKiBAcGFyYW0ge29iamVjdH0gbmF0aXZlRXZlbnQgTmF0aXZlIGJyb3dzZXIgZXZlbnQuXG4gKiBAcGFyYW0ge0RPTUV2ZW50VGFyZ2V0fSBuYXRpdmVFdmVudFRhcmdldCBUYXJnZXQgbm9kZS5cbiAqL1xuZnVuY3Rpb24gU3ludGhldGljRXZlbnQoZGlzcGF0Y2hDb25maWcsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCkge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIC8vIHRoZXNlIGhhdmUgYSBnZXR0ZXIvc2V0dGVyIGZvciB3YXJuaW5nc1xuICAgIGRlbGV0ZSB0aGlzLm5hdGl2ZUV2ZW50O1xuICAgIGRlbGV0ZSB0aGlzLnByZXZlbnREZWZhdWx0O1xuICAgIGRlbGV0ZSB0aGlzLnN0b3BQcm9wYWdhdGlvbjtcbiAgfVxuXG4gIHRoaXMuZGlzcGF0Y2hDb25maWcgPSBkaXNwYXRjaENvbmZpZztcbiAgdGhpcy5fdGFyZ2V0SW5zdCA9IHRhcmdldEluc3Q7XG4gIHRoaXMubmF0aXZlRXZlbnQgPSBuYXRpdmVFdmVudDtcblxuICB2YXIgSW50ZXJmYWNlID0gdGhpcy5jb25zdHJ1Y3Rvci5JbnRlcmZhY2U7XG4gIGZvciAodmFyIHByb3BOYW1lIGluIEludGVyZmFjZSkge1xuICAgIGlmICghSW50ZXJmYWNlLmhhc093blByb3BlcnR5KHByb3BOYW1lKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBkZWxldGUgdGhpc1twcm9wTmFtZV07IC8vIHRoaXMgaGFzIGEgZ2V0dGVyL3NldHRlciBmb3Igd2FybmluZ3NcbiAgICB9XG4gICAgdmFyIG5vcm1hbGl6ZSA9IEludGVyZmFjZVtwcm9wTmFtZV07XG4gICAgaWYgKG5vcm1hbGl6ZSkge1xuICAgICAgdGhpc1twcm9wTmFtZV0gPSBub3JtYWxpemUobmF0aXZlRXZlbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAocHJvcE5hbWUgPT09ICd0YXJnZXQnKSB7XG4gICAgICAgIHRoaXMudGFyZ2V0ID0gbmF0aXZlRXZlbnRUYXJnZXQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzW3Byb3BOYW1lXSA9IG5hdGl2ZUV2ZW50W3Byb3BOYW1lXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB2YXIgZGVmYXVsdFByZXZlbnRlZCA9IG5hdGl2ZUV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQgIT0gbnVsbCA/IG5hdGl2ZUV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQgOiBuYXRpdmVFdmVudC5yZXR1cm5WYWx1ZSA9PT0gZmFsc2U7XG4gIGlmIChkZWZhdWx0UHJldmVudGVkKSB7XG4gICAgdGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQgPSBlbXB0eUZ1bmN0aW9uLnRoYXRSZXR1cm5zVHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLmlzRGVmYXVsdFByZXZlbnRlZCA9IGVtcHR5RnVuY3Rpb24udGhhdFJldHVybnNGYWxzZTtcbiAgfVxuICB0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkID0gZW1wdHlGdW5jdGlvbi50aGF0UmV0dXJuc0ZhbHNlO1xuICByZXR1cm4gdGhpcztcbn1cblxuX2Fzc2lnbihTeW50aGV0aWNFdmVudC5wcm90b3R5cGUsIHtcbiAgcHJldmVudERlZmF1bHQ6IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmRlZmF1bHRQcmV2ZW50ZWQgPSB0cnVlO1xuICAgIHZhciBldmVudCA9IHRoaXMubmF0aXZlRXZlbnQ7XG4gICAgaWYgKCFldmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChldmVudC5wcmV2ZW50RGVmYXVsdCkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB2YWxpZC10eXBlb2ZcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBldmVudC5yZXR1cm5WYWx1ZSAhPT0gJ3Vua25vd24nKSB7XG4gICAgICBldmVudC5yZXR1cm5WYWx1ZSA9IGZhbHNlO1xuICAgIH1cbiAgICB0aGlzLmlzRGVmYXVsdFByZXZlbnRlZCA9IGVtcHR5RnVuY3Rpb24udGhhdFJldHVybnNUcnVlO1xuICB9LFxuXG4gIHN0b3BQcm9wYWdhdGlvbjogZnVuY3Rpb24gKCkge1xuICAgIHZhciBldmVudCA9IHRoaXMubmF0aXZlRXZlbnQ7XG4gICAgaWYgKCFldmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChldmVudC5zdG9wUHJvcGFnYXRpb24pIHtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHZhbGlkLXR5cGVvZlxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGV2ZW50LmNhbmNlbEJ1YmJsZSAhPT0gJ3Vua25vd24nKSB7XG4gICAgICAvLyBUaGUgQ2hhbmdlRXZlbnRQbHVnaW4gcmVnaXN0ZXJzIGEgXCJwcm9wZXJ0eWNoYW5nZVwiIGV2ZW50IGZvclxuICAgICAgLy8gSUUuIFRoaXMgZXZlbnQgZG9lcyBub3Qgc3VwcG9ydCBidWJibGluZyBvciBjYW5jZWxsaW5nLCBhbmRcbiAgICAgIC8vIGFueSByZWZlcmVuY2VzIHRvIGNhbmNlbEJ1YmJsZSB0aHJvdyBcIk1lbWJlciBub3QgZm91bmRcIi4gIEFcbiAgICAgIC8vIHR5cGVvZiBjaGVjayBvZiBcInVua25vd25cIiBjaXJjdW12ZW50cyB0aGlzIGlzc3VlIChhbmQgaXMgYWxzb1xuICAgICAgLy8gSUUgc3BlY2lmaWMpLlxuICAgICAgZXZlbnQuY2FuY2VsQnViYmxlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkID0gZW1wdHlGdW5jdGlvbi50aGF0UmV0dXJuc1RydWU7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFdlIHJlbGVhc2UgYWxsIGRpc3BhdGNoZWQgYFN5bnRoZXRpY0V2ZW50YHMgYWZ0ZXIgZWFjaCBldmVudCBsb29wLCBhZGRpbmdcbiAgICogdGhlbSBiYWNrIGludG8gdGhlIHBvb2wuIFRoaXMgYWxsb3dzIGEgd2F5IHRvIGhvbGQgb250byBhIHJlZmVyZW5jZSB0aGF0XG4gICAqIHdvbid0IGJlIGFkZGVkIGJhY2sgaW50byB0aGUgcG9vbC5cbiAgICovXG4gIHBlcnNpc3Q6IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmlzUGVyc2lzdGVudCA9IGVtcHR5RnVuY3Rpb24udGhhdFJldHVybnNUcnVlO1xuICB9LFxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhpcyBldmVudCBzaG91bGQgYmUgcmVsZWFzZWQgYmFjayBpbnRvIHRoZSBwb29sLlxuICAgKlxuICAgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHRoaXMgc2hvdWxkIG5vdCBiZSByZWxlYXNlZCwgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgKi9cbiAgaXNQZXJzaXN0ZW50OiBlbXB0eUZ1bmN0aW9uLnRoYXRSZXR1cm5zRmFsc2UsXG5cbiAgLyoqXG4gICAqIGBQb29sZWRDbGFzc2AgbG9va3MgZm9yIGBkZXN0cnVjdG9yYCBvbiBlYWNoIGluc3RhbmNlIGl0IHJlbGVhc2VzLlxuICAgKi9cbiAgZGVzdHJ1Y3RvcjogZnVuY3Rpb24gKCkge1xuICAgIHZhciBJbnRlcmZhY2UgPSB0aGlzLmNvbnN0cnVjdG9yLkludGVyZmFjZTtcbiAgICBmb3IgKHZhciBwcm9wTmFtZSBpbiBJbnRlcmZhY2UpIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBwcm9wTmFtZSwgZ2V0UG9vbGVkV2FybmluZ1Byb3BlcnR5RGVmaW5pdGlvbihwcm9wTmFtZSwgSW50ZXJmYWNlW3Byb3BOYW1lXSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpc1twcm9wTmFtZV0gPSBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNob3VsZEJlUmVsZWFzZWRQcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzW3Nob3VsZEJlUmVsZWFzZWRQcm9wZXJ0aWVzW2ldXSA9IG51bGw7XG4gICAgfVxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ25hdGl2ZUV2ZW50JywgZ2V0UG9vbGVkV2FybmluZ1Byb3BlcnR5RGVmaW5pdGlvbignbmF0aXZlRXZlbnQnLCBudWxsKSk7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ3ByZXZlbnREZWZhdWx0JywgZ2V0UG9vbGVkV2FybmluZ1Byb3BlcnR5RGVmaW5pdGlvbigncHJldmVudERlZmF1bHQnLCBlbXB0eUZ1bmN0aW9uKSk7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ3N0b3BQcm9wYWdhdGlvbicsIGdldFBvb2xlZFdhcm5pbmdQcm9wZXJ0eURlZmluaXRpb24oJ3N0b3BQcm9wYWdhdGlvbicsIGVtcHR5RnVuY3Rpb24pKTtcbiAgICB9XG4gIH1cbn0pO1xuXG5TeW50aGV0aWNFdmVudC5JbnRlcmZhY2UgPSBFdmVudEludGVyZmFjZTtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgaWYgKGlzUHJveHlTdXBwb3J0ZWQpIHtcbiAgICAvKmVzbGludC1kaXNhYmxlIG5vLWZ1bmMtYXNzaWduICovXG4gICAgU3ludGhldGljRXZlbnQgPSBuZXcgUHJveHkoU3ludGhldGljRXZlbnQsIHtcbiAgICAgIGNvbnN0cnVjdDogZnVuY3Rpb24gKHRhcmdldCwgYXJncykge1xuICAgICAgICByZXR1cm4gdGhpcy5hcHBseSh0YXJnZXQsIE9iamVjdC5jcmVhdGUodGFyZ2V0LnByb3RvdHlwZSksIGFyZ3MpO1xuICAgICAgfSxcbiAgICAgIGFwcGx5OiBmdW5jdGlvbiAoY29uc3RydWN0b3IsIHRoYXQsIGFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm94eShjb25zdHJ1Y3Rvci5hcHBseSh0aGF0LCBhcmdzKSwge1xuICAgICAgICAgIHNldDogZnVuY3Rpb24gKHRhcmdldCwgcHJvcCwgdmFsdWUpIHtcbiAgICAgICAgICAgIGlmIChwcm9wICE9PSAnaXNQZXJzaXN0ZW50JyAmJiAhdGFyZ2V0LmNvbnN0cnVjdG9yLkludGVyZmFjZS5oYXNPd25Qcm9wZXJ0eShwcm9wKSAmJiBzaG91bGRCZVJlbGVhc2VkUHJvcGVydGllcy5pbmRleE9mKHByb3ApID09PSAtMSkge1xuICAgICAgICAgICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyhkaWRXYXJuRm9yQWRkZWROZXdQcm9wZXJ0eSB8fCB0YXJnZXQuaXNQZXJzaXN0ZW50KCksIFwiVGhpcyBzeW50aGV0aWMgZXZlbnQgaXMgcmV1c2VkIGZvciBwZXJmb3JtYW5jZSByZWFzb25zLiBJZiB5b3UncmUgXCIgKyBcInNlZWluZyB0aGlzLCB5b3UncmUgYWRkaW5nIGEgbmV3IHByb3BlcnR5IGluIHRoZSBzeW50aGV0aWMgZXZlbnQgb2JqZWN0LiBcIiArICdUaGUgcHJvcGVydHkgaXMgbmV2ZXIgcmVsZWFzZWQuIFNlZSAnICsgJ2h0dHBzOi8vZmIubWUvcmVhY3QtZXZlbnQtcG9vbGluZyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4nKSA6IHZvaWQgMDtcbiAgICAgICAgICAgICAgZGlkV2FybkZvckFkZGVkTmV3UHJvcGVydHkgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGFyZ2V0W3Byb3BdID0gdmFsdWU7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIC8qZXNsaW50LWVuYWJsZSBuby1mdW5jLWFzc2lnbiAqL1xuICB9XG59XG4vKipcbiAqIEhlbHBlciB0byByZWR1Y2UgYm9pbGVycGxhdGUgd2hlbiBjcmVhdGluZyBzdWJjbGFzc2VzLlxuICpcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IENsYXNzXG4gKiBAcGFyYW0gez9vYmplY3R9IEludGVyZmFjZVxuICovXG5TeW50aGV0aWNFdmVudC5hdWdtZW50Q2xhc3MgPSBmdW5jdGlvbiAoQ2xhc3MsIEludGVyZmFjZSkge1xuICB2YXIgU3VwZXIgPSB0aGlzO1xuXG4gIHZhciBFID0gZnVuY3Rpb24gKCkge307XG4gIEUucHJvdG90eXBlID0gU3VwZXIucHJvdG90eXBlO1xuICB2YXIgcHJvdG90eXBlID0gbmV3IEUoKTtcblxuICBfYXNzaWduKHByb3RvdHlwZSwgQ2xhc3MucHJvdG90eXBlKTtcbiAgQ2xhc3MucHJvdG90eXBlID0gcHJvdG90eXBlO1xuICBDbGFzcy5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDbGFzcztcblxuICBDbGFzcy5JbnRlcmZhY2UgPSBfYXNzaWduKHt9LCBTdXBlci5JbnRlcmZhY2UsIEludGVyZmFjZSk7XG4gIENsYXNzLmF1Z21lbnRDbGFzcyA9IFN1cGVyLmF1Z21lbnRDbGFzcztcblxuICBQb29sZWRDbGFzcy5hZGRQb29saW5nVG8oQ2xhc3MsIFBvb2xlZENsYXNzLmZvdXJBcmd1bWVudFBvb2xlcik7XG59O1xuXG5Qb29sZWRDbGFzcy5hZGRQb29saW5nVG8oU3ludGhldGljRXZlbnQsIFBvb2xlZENsYXNzLmZvdXJBcmd1bWVudFBvb2xlcik7XG5cbm1vZHVsZS5leHBvcnRzID0gU3ludGhldGljRXZlbnQ7XG5cbi8qKlxuICAqIEhlbHBlciB0byBudWxsaWZ5IHN5bnRoZXRpY0V2ZW50IGluc3RhbmNlIHByb3BlcnRpZXMgd2hlbiBkZXN0cnVjdGluZ1xuICAqXG4gICogQHBhcmFtIHtvYmplY3R9IFN5bnRoZXRpY0V2ZW50XG4gICogQHBhcmFtIHtTdHJpbmd9IHByb3BOYW1lXG4gICogQHJldHVybiB7b2JqZWN0fSBkZWZpbmVQcm9wZXJ0eSBvYmplY3RcbiAgKi9cbmZ1bmN0aW9uIGdldFBvb2xlZFdhcm5pbmdQcm9wZXJ0eURlZmluaXRpb24ocHJvcE5hbWUsIGdldFZhbCkge1xuICB2YXIgaXNGdW5jdGlvbiA9IHR5cGVvZiBnZXRWYWwgPT09ICdmdW5jdGlvbic7XG4gIHJldHVybiB7XG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIHNldDogc2V0LFxuICAgIGdldDogZ2V0XG4gIH07XG5cbiAgZnVuY3Rpb24gc2V0KHZhbCkge1xuICAgIHZhciBhY3Rpb24gPSBpc0Z1bmN0aW9uID8gJ3NldHRpbmcgdGhlIG1ldGhvZCcgOiAnc2V0dGluZyB0aGUgcHJvcGVydHknO1xuICAgIHdhcm4oYWN0aW9uLCAnVGhpcyBpcyBlZmZlY3RpdmVseSBhIG5vLW9wJyk7XG4gICAgcmV0dXJuIHZhbDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldCgpIHtcbiAgICB2YXIgYWN0aW9uID0gaXNGdW5jdGlvbiA/ICdhY2Nlc3NpbmcgdGhlIG1ldGhvZCcgOiAnYWNjZXNzaW5nIHRoZSBwcm9wZXJ0eSc7XG4gICAgdmFyIHJlc3VsdCA9IGlzRnVuY3Rpb24gPyAnVGhpcyBpcyBhIG5vLW9wIGZ1bmN0aW9uJyA6ICdUaGlzIGlzIHNldCB0byBudWxsJztcbiAgICB3YXJuKGFjdGlvbiwgcmVzdWx0KTtcbiAgICByZXR1cm4gZ2V0VmFsO1xuICB9XG5cbiAgZnVuY3Rpb24gd2FybihhY3Rpb24sIHJlc3VsdCkge1xuICAgIHZhciB3YXJuaW5nQ29uZGl0aW9uID0gZmFsc2U7XG4gICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcod2FybmluZ0NvbmRpdGlvbiwgXCJUaGlzIHN5bnRoZXRpYyBldmVudCBpcyByZXVzZWQgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMuIElmIHlvdSdyZSBzZWVpbmcgdGhpcywgXCIgKyBcInlvdSdyZSAlcyBgJXNgIG9uIGEgcmVsZWFzZWQvbnVsbGlmaWVkIHN5bnRoZXRpYyBldmVudC4gJXMuIFwiICsgJ0lmIHlvdSBtdXN0IGtlZXAgdGhlIG9yaWdpbmFsIHN5bnRoZXRpYyBldmVudCBhcm91bmQsIHVzZSBldmVudC5wZXJzaXN0KCkuICcgKyAnU2VlIGh0dHBzOi8vZmIubWUvcmVhY3QtZXZlbnQtcG9vbGluZyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4nLCBhY3Rpb24sIHByb3BOYW1lLCByZXN1bHQpIDogdm9pZCAwO1xuICB9XG59XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1kb20vbGliL1N5bnRoZXRpY0V2ZW50LmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIF9wcm9kSW52YXJpYW50ID0gcmVxdWlyZSgnLi9yZWFjdFByb2RJbnZhcmlhbnQnKTtcblxudmFyIGludmFyaWFudCA9IHJlcXVpcmUoJ2ZianMvbGliL2ludmFyaWFudCcpO1xuXG5mdW5jdGlvbiBjaGVja01hc2sodmFsdWUsIGJpdG1hc2spIHtcbiAgcmV0dXJuICh2YWx1ZSAmIGJpdG1hc2spID09PSBiaXRtYXNrO1xufVxuXG52YXIgRE9NUHJvcGVydHlJbmplY3Rpb24gPSB7XG4gIC8qKlxuICAgKiBNYXBwaW5nIGZyb20gbm9ybWFsaXplZCwgY2FtZWxjYXNlZCBwcm9wZXJ0eSBuYW1lcyB0byBhIGNvbmZpZ3VyYXRpb24gdGhhdFxuICAgKiBzcGVjaWZpZXMgaG93IHRoZSBhc3NvY2lhdGVkIERPTSBwcm9wZXJ0eSBzaG91bGQgYmUgYWNjZXNzZWQgb3IgcmVuZGVyZWQuXG4gICAqL1xuICBNVVNUX1VTRV9QUk9QRVJUWTogMHgxLFxuICBIQVNfQk9PTEVBTl9WQUxVRTogMHg0LFxuICBIQVNfTlVNRVJJQ19WQUxVRTogMHg4LFxuICBIQVNfUE9TSVRJVkVfTlVNRVJJQ19WQUxVRTogMHgxMCB8IDB4OCxcbiAgSEFTX09WRVJMT0FERURfQk9PTEVBTl9WQUxVRTogMHgyMCxcblxuICAvKipcbiAgICogSW5qZWN0IHNvbWUgc3BlY2lhbGl6ZWQga25vd2xlZGdlIGFib3V0IHRoZSBET00uIFRoaXMgdGFrZXMgYSBjb25maWcgb2JqZWN0XG4gICAqIHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICAgKlxuICAgKiBpc0N1c3RvbUF0dHJpYnV0ZTogZnVuY3Rpb24gdGhhdCBnaXZlbiBhbiBhdHRyaWJ1dGUgbmFtZSB3aWxsIHJldHVybiB0cnVlXG4gICAqIGlmIGl0IGNhbiBiZSBpbnNlcnRlZCBpbnRvIHRoZSBET00gdmVyYmF0aW0uIFVzZWZ1bCBmb3IgZGF0YS0qIG9yIGFyaWEtKlxuICAgKiBhdHRyaWJ1dGVzIHdoZXJlIGl0J3MgaW1wb3NzaWJsZSB0byBlbnVtZXJhdGUgYWxsIG9mIHRoZSBwb3NzaWJsZVxuICAgKiBhdHRyaWJ1dGUgbmFtZXMsXG4gICAqXG4gICAqIFByb3BlcnRpZXM6IG9iamVjdCBtYXBwaW5nIERPTSBwcm9wZXJ0eSBuYW1lIHRvIG9uZSBvZiB0aGVcbiAgICogRE9NUHJvcGVydHlJbmplY3Rpb24gY29uc3RhbnRzIG9yIG51bGwuIElmIHlvdXIgYXR0cmlidXRlIGlzbid0IGluIGhlcmUsXG4gICAqIGl0IHdvbid0IGdldCB3cml0dGVuIHRvIHRoZSBET00uXG4gICAqXG4gICAqIERPTUF0dHJpYnV0ZU5hbWVzOiBvYmplY3QgbWFwcGluZyBSZWFjdCBhdHRyaWJ1dGUgbmFtZSB0byB0aGUgRE9NXG4gICAqIGF0dHJpYnV0ZSBuYW1lLiBBdHRyaWJ1dGUgbmFtZXMgbm90IHNwZWNpZmllZCB1c2UgdGhlICoqbG93ZXJjYXNlKipcbiAgICogbm9ybWFsaXplZCBuYW1lLlxuICAgKlxuICAgKiBET01BdHRyaWJ1dGVOYW1lc3BhY2VzOiBvYmplY3QgbWFwcGluZyBSZWFjdCBhdHRyaWJ1dGUgbmFtZSB0byB0aGUgRE9NXG4gICAqIGF0dHJpYnV0ZSBuYW1lc3BhY2UgVVJMLiAoQXR0cmlidXRlIG5hbWVzIG5vdCBzcGVjaWZpZWQgdXNlIG5vIG5hbWVzcGFjZS4pXG4gICAqXG4gICAqIERPTVByb3BlcnR5TmFtZXM6IHNpbWlsYXIgdG8gRE9NQXR0cmlidXRlTmFtZXMgYnV0IGZvciBET00gcHJvcGVydGllcy5cbiAgICogUHJvcGVydHkgbmFtZXMgbm90IHNwZWNpZmllZCB1c2UgdGhlIG5vcm1hbGl6ZWQgbmFtZS5cbiAgICpcbiAgICogRE9NTXV0YXRpb25NZXRob2RzOiBQcm9wZXJ0aWVzIHRoYXQgcmVxdWlyZSBzcGVjaWFsIG11dGF0aW9uIG1ldGhvZHMuIElmXG4gICAqIGB2YWx1ZWAgaXMgdW5kZWZpbmVkLCB0aGUgbXV0YXRpb24gbWV0aG9kIHNob3VsZCB1bnNldCB0aGUgcHJvcGVydHkuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBkb21Qcm9wZXJ0eUNvbmZpZyB0aGUgY29uZmlnIGFzIGRlc2NyaWJlZCBhYm92ZS5cbiAgICovXG4gIGluamVjdERPTVByb3BlcnR5Q29uZmlnOiBmdW5jdGlvbiAoZG9tUHJvcGVydHlDb25maWcpIHtcbiAgICB2YXIgSW5qZWN0aW9uID0gRE9NUHJvcGVydHlJbmplY3Rpb247XG4gICAgdmFyIFByb3BlcnRpZXMgPSBkb21Qcm9wZXJ0eUNvbmZpZy5Qcm9wZXJ0aWVzIHx8IHt9O1xuICAgIHZhciBET01BdHRyaWJ1dGVOYW1lc3BhY2VzID0gZG9tUHJvcGVydHlDb25maWcuRE9NQXR0cmlidXRlTmFtZXNwYWNlcyB8fCB7fTtcbiAgICB2YXIgRE9NQXR0cmlidXRlTmFtZXMgPSBkb21Qcm9wZXJ0eUNvbmZpZy5ET01BdHRyaWJ1dGVOYW1lcyB8fCB7fTtcbiAgICB2YXIgRE9NUHJvcGVydHlOYW1lcyA9IGRvbVByb3BlcnR5Q29uZmlnLkRPTVByb3BlcnR5TmFtZXMgfHwge307XG4gICAgdmFyIERPTU11dGF0aW9uTWV0aG9kcyA9IGRvbVByb3BlcnR5Q29uZmlnLkRPTU11dGF0aW9uTWV0aG9kcyB8fCB7fTtcblxuICAgIGlmIChkb21Qcm9wZXJ0eUNvbmZpZy5pc0N1c3RvbUF0dHJpYnV0ZSkge1xuICAgICAgRE9NUHJvcGVydHkuX2lzQ3VzdG9tQXR0cmlidXRlRnVuY3Rpb25zLnB1c2goZG9tUHJvcGVydHlDb25maWcuaXNDdXN0b21BdHRyaWJ1dGUpO1xuICAgIH1cblxuICAgIGZvciAodmFyIHByb3BOYW1lIGluIFByb3BlcnRpZXMpIHtcbiAgICAgICEhRE9NUHJvcGVydHkucHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eShwcm9wTmFtZSkgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAnaW5qZWN0RE9NUHJvcGVydHlDb25maWcoLi4uKTogWW91XFwncmUgdHJ5aW5nIHRvIGluamVjdCBET00gcHJvcGVydHkgXFwnJXNcXCcgd2hpY2ggaGFzIGFscmVhZHkgYmVlbiBpbmplY3RlZC4gWW91IG1heSBiZSBhY2NpZGVudGFsbHkgaW5qZWN0aW5nIHRoZSBzYW1lIERPTSBwcm9wZXJ0eSBjb25maWcgdHdpY2UsIG9yIHlvdSBtYXkgYmUgaW5qZWN0aW5nIHR3byBjb25maWdzIHRoYXQgaGF2ZSBjb25mbGljdGluZyBwcm9wZXJ0eSBuYW1lcy4nLCBwcm9wTmFtZSkgOiBfcHJvZEludmFyaWFudCgnNDgnLCBwcm9wTmFtZSkgOiB2b2lkIDA7XG5cbiAgICAgIHZhciBsb3dlckNhc2VkID0gcHJvcE5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICAgIHZhciBwcm9wQ29uZmlnID0gUHJvcGVydGllc1twcm9wTmFtZV07XG5cbiAgICAgIHZhciBwcm9wZXJ0eUluZm8gPSB7XG4gICAgICAgIGF0dHJpYnV0ZU5hbWU6IGxvd2VyQ2FzZWQsXG4gICAgICAgIGF0dHJpYnV0ZU5hbWVzcGFjZTogbnVsbCxcbiAgICAgICAgcHJvcGVydHlOYW1lOiBwcm9wTmFtZSxcbiAgICAgICAgbXV0YXRpb25NZXRob2Q6IG51bGwsXG5cbiAgICAgICAgbXVzdFVzZVByb3BlcnR5OiBjaGVja01hc2socHJvcENvbmZpZywgSW5qZWN0aW9uLk1VU1RfVVNFX1BST1BFUlRZKSxcbiAgICAgICAgaGFzQm9vbGVhblZhbHVlOiBjaGVja01hc2socHJvcENvbmZpZywgSW5qZWN0aW9uLkhBU19CT09MRUFOX1ZBTFVFKSxcbiAgICAgICAgaGFzTnVtZXJpY1ZhbHVlOiBjaGVja01hc2socHJvcENvbmZpZywgSW5qZWN0aW9uLkhBU19OVU1FUklDX1ZBTFVFKSxcbiAgICAgICAgaGFzUG9zaXRpdmVOdW1lcmljVmFsdWU6IGNoZWNrTWFzayhwcm9wQ29uZmlnLCBJbmplY3Rpb24uSEFTX1BPU0lUSVZFX05VTUVSSUNfVkFMVUUpLFxuICAgICAgICBoYXNPdmVybG9hZGVkQm9vbGVhblZhbHVlOiBjaGVja01hc2socHJvcENvbmZpZywgSW5qZWN0aW9uLkhBU19PVkVSTE9BREVEX0JPT0xFQU5fVkFMVUUpXG4gICAgICB9O1xuICAgICAgIShwcm9wZXJ0eUluZm8uaGFzQm9vbGVhblZhbHVlICsgcHJvcGVydHlJbmZvLmhhc051bWVyaWNWYWx1ZSArIHByb3BlcnR5SW5mby5oYXNPdmVybG9hZGVkQm9vbGVhblZhbHVlIDw9IDEpID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IGludmFyaWFudChmYWxzZSwgJ0RPTVByb3BlcnR5OiBWYWx1ZSBjYW4gYmUgb25lIG9mIGJvb2xlYW4sIG92ZXJsb2FkZWQgYm9vbGVhbiwgb3IgbnVtZXJpYyB2YWx1ZSwgYnV0IG5vdCBhIGNvbWJpbmF0aW9uOiAlcycsIHByb3BOYW1lKSA6IF9wcm9kSW52YXJpYW50KCc1MCcsIHByb3BOYW1lKSA6IHZvaWQgMDtcblxuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgRE9NUHJvcGVydHkuZ2V0UG9zc2libGVTdGFuZGFyZE5hbWVbbG93ZXJDYXNlZF0gPSBwcm9wTmFtZTtcbiAgICAgIH1cblxuICAgICAgaWYgKERPTUF0dHJpYnV0ZU5hbWVzLmhhc093blByb3BlcnR5KHByb3BOYW1lKSkge1xuICAgICAgICB2YXIgYXR0cmlidXRlTmFtZSA9IERPTUF0dHJpYnV0ZU5hbWVzW3Byb3BOYW1lXTtcbiAgICAgICAgcHJvcGVydHlJbmZvLmF0dHJpYnV0ZU5hbWUgPSBhdHRyaWJ1dGVOYW1lO1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgIERPTVByb3BlcnR5LmdldFBvc3NpYmxlU3RhbmRhcmROYW1lW2F0dHJpYnV0ZU5hbWVdID0gcHJvcE5hbWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKERPTUF0dHJpYnV0ZU5hbWVzcGFjZXMuaGFzT3duUHJvcGVydHkocHJvcE5hbWUpKSB7XG4gICAgICAgIHByb3BlcnR5SW5mby5hdHRyaWJ1dGVOYW1lc3BhY2UgPSBET01BdHRyaWJ1dGVOYW1lc3BhY2VzW3Byb3BOYW1lXTtcbiAgICAgIH1cblxuICAgICAgaWYgKERPTVByb3BlcnR5TmFtZXMuaGFzT3duUHJvcGVydHkocHJvcE5hbWUpKSB7XG4gICAgICAgIHByb3BlcnR5SW5mby5wcm9wZXJ0eU5hbWUgPSBET01Qcm9wZXJ0eU5hbWVzW3Byb3BOYW1lXTtcbiAgICAgIH1cblxuICAgICAgaWYgKERPTU11dGF0aW9uTWV0aG9kcy5oYXNPd25Qcm9wZXJ0eShwcm9wTmFtZSkpIHtcbiAgICAgICAgcHJvcGVydHlJbmZvLm11dGF0aW9uTWV0aG9kID0gRE9NTXV0YXRpb25NZXRob2RzW3Byb3BOYW1lXTtcbiAgICAgIH1cblxuICAgICAgRE9NUHJvcGVydHkucHJvcGVydGllc1twcm9wTmFtZV0gPSBwcm9wZXJ0eUluZm87XG4gICAgfVxuICB9XG59O1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuICovXG52YXIgQVRUUklCVVRFX05BTUVfU1RBUlRfQ0hBUiA9ICc6QS1aX2EtelxcXFx1MDBDMC1cXFxcdTAwRDZcXFxcdTAwRDgtXFxcXHUwMEY2XFxcXHUwMEY4LVxcXFx1MDJGRlxcXFx1MDM3MC1cXFxcdTAzN0RcXFxcdTAzN0YtXFxcXHUxRkZGXFxcXHUyMDBDLVxcXFx1MjAwRFxcXFx1MjA3MC1cXFxcdTIxOEZcXFxcdTJDMDAtXFxcXHUyRkVGXFxcXHUzMDAxLVxcXFx1RDdGRlxcXFx1RjkwMC1cXFxcdUZEQ0ZcXFxcdUZERjAtXFxcXHVGRkZEJztcbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiAqL1xuXG4vKipcbiAqIERPTVByb3BlcnR5IGV4cG9ydHMgbG9va3VwIG9iamVjdHMgdGhhdCBjYW4gYmUgdXNlZCBsaWtlIGZ1bmN0aW9uczpcbiAqXG4gKiAgID4gRE9NUHJvcGVydHkuaXNWYWxpZFsnaWQnXVxuICogICB0cnVlXG4gKiAgID4gRE9NUHJvcGVydHkuaXNWYWxpZFsnZm9vYmFyJ11cbiAqICAgdW5kZWZpbmVkXG4gKlxuICogQWx0aG91Z2ggdGhpcyBtYXkgYmUgY29uZnVzaW5nLCBpdCBwZXJmb3JtcyBiZXR0ZXIgaW4gZ2VuZXJhbC5cbiAqXG4gKiBAc2VlIGh0dHA6Ly9qc3BlcmYuY29tL2tleS1leGlzdHNcbiAqIEBzZWUgaHR0cDovL2pzcGVyZi5jb20va2V5LW1pc3NpbmdcbiAqL1xudmFyIERPTVByb3BlcnR5ID0ge1xuICBJRF9BVFRSSUJVVEVfTkFNRTogJ2RhdGEtcmVhY3RpZCcsXG4gIFJPT1RfQVRUUklCVVRFX05BTUU6ICdkYXRhLXJlYWN0cm9vdCcsXG5cbiAgQVRUUklCVVRFX05BTUVfU1RBUlRfQ0hBUjogQVRUUklCVVRFX05BTUVfU1RBUlRfQ0hBUixcbiAgQVRUUklCVVRFX05BTUVfQ0hBUjogQVRUUklCVVRFX05BTUVfU1RBUlRfQ0hBUiArICdcXFxcLS4wLTlcXFxcdTAwQjdcXFxcdTAzMDAtXFxcXHUwMzZGXFxcXHUyMDNGLVxcXFx1MjA0MCcsXG5cbiAgLyoqXG4gICAqIE1hcCBmcm9tIHByb3BlcnR5IFwic3RhbmRhcmQgbmFtZVwiIHRvIGFuIG9iamVjdCB3aXRoIGluZm8gYWJvdXQgaG93IHRvIHNldFxuICAgKiB0aGUgcHJvcGVydHkgaW4gdGhlIERPTS4gRWFjaCBvYmplY3QgY29udGFpbnM6XG4gICAqXG4gICAqIGF0dHJpYnV0ZU5hbWU6XG4gICAqICAgVXNlZCB3aGVuIHJlbmRlcmluZyBtYXJrdXAgb3Igd2l0aCBgKkF0dHJpYnV0ZSgpYC5cbiAgICogYXR0cmlidXRlTmFtZXNwYWNlXG4gICAqIHByb3BlcnR5TmFtZTpcbiAgICogICBVc2VkIG9uIERPTSBub2RlIGluc3RhbmNlcy4gKFRoaXMgaW5jbHVkZXMgcHJvcGVydGllcyB0aGF0IG11dGF0ZSBkdWUgdG9cbiAgICogICBleHRlcm5hbCBmYWN0b3JzLilcbiAgICogbXV0YXRpb25NZXRob2Q6XG4gICAqICAgSWYgbm9uLW51bGwsIHVzZWQgaW5zdGVhZCBvZiB0aGUgcHJvcGVydHkgb3IgYHNldEF0dHJpYnV0ZSgpYCBhZnRlclxuICAgKiAgIGluaXRpYWwgcmVuZGVyLlxuICAgKiBtdXN0VXNlUHJvcGVydHk6XG4gICAqICAgV2hldGhlciB0aGUgcHJvcGVydHkgbXVzdCBiZSBhY2Nlc3NlZCBhbmQgbXV0YXRlZCBhcyBhbiBvYmplY3QgcHJvcGVydHkuXG4gICAqIGhhc0Jvb2xlYW5WYWx1ZTpcbiAgICogICBXaGV0aGVyIHRoZSBwcm9wZXJ0eSBzaG91bGQgYmUgcmVtb3ZlZCB3aGVuIHNldCB0byBhIGZhbHNleSB2YWx1ZS5cbiAgICogaGFzTnVtZXJpY1ZhbHVlOlxuICAgKiAgIFdoZXRoZXIgdGhlIHByb3BlcnR5IG11c3QgYmUgbnVtZXJpYyBvciBwYXJzZSBhcyBhIG51bWVyaWMgYW5kIHNob3VsZCBiZVxuICAgKiAgIHJlbW92ZWQgd2hlbiBzZXQgdG8gYSBmYWxzZXkgdmFsdWUuXG4gICAqIGhhc1Bvc2l0aXZlTnVtZXJpY1ZhbHVlOlxuICAgKiAgIFdoZXRoZXIgdGhlIHByb3BlcnR5IG11c3QgYmUgcG9zaXRpdmUgbnVtZXJpYyBvciBwYXJzZSBhcyBhIHBvc2l0aXZlXG4gICAqICAgbnVtZXJpYyBhbmQgc2hvdWxkIGJlIHJlbW92ZWQgd2hlbiBzZXQgdG8gYSBmYWxzZXkgdmFsdWUuXG4gICAqIGhhc092ZXJsb2FkZWRCb29sZWFuVmFsdWU6XG4gICAqICAgV2hldGhlciB0aGUgcHJvcGVydHkgY2FuIGJlIHVzZWQgYXMgYSBmbGFnIGFzIHdlbGwgYXMgd2l0aCBhIHZhbHVlLlxuICAgKiAgIFJlbW92ZWQgd2hlbiBzdHJpY3RseSBlcXVhbCB0byBmYWxzZTsgcHJlc2VudCB3aXRob3V0IGEgdmFsdWUgd2hlblxuICAgKiAgIHN0cmljdGx5IGVxdWFsIHRvIHRydWU7IHByZXNlbnQgd2l0aCBhIHZhbHVlIG90aGVyd2lzZS5cbiAgICovXG4gIHByb3BlcnRpZXM6IHt9LFxuXG4gIC8qKlxuICAgKiBNYXBwaW5nIGZyb20gbG93ZXJjYXNlIHByb3BlcnR5IG5hbWVzIHRvIHRoZSBwcm9wZXJseSBjYXNlZCB2ZXJzaW9uLCB1c2VkXG4gICAqIHRvIHdhcm4gaW4gdGhlIGNhc2Ugb2YgbWlzc2luZyBwcm9wZXJ0aWVzLiBBdmFpbGFibGUgb25seSBpbiBfX0RFVl9fLlxuICAgKlxuICAgKiBhdXRvZm9jdXMgaXMgcHJlZGVmaW5lZCwgYmVjYXVzZSBhZGRpbmcgaXQgdG8gdGhlIHByb3BlcnR5IHdoaXRlbGlzdFxuICAgKiBjYXVzZXMgdW5pbnRlbmRlZCBzaWRlIGVmZmVjdHMuXG4gICAqXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICBnZXRQb3NzaWJsZVN0YW5kYXJkTmFtZTogcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHsgYXV0b2ZvY3VzOiAnYXV0b0ZvY3VzJyB9IDogbnVsbCxcblxuICAvKipcbiAgICogQWxsIG9mIHRoZSBpc0N1c3RvbUF0dHJpYnV0ZSgpIGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiBpbmplY3RlZC5cbiAgICovXG4gIF9pc0N1c3RvbUF0dHJpYnV0ZUZ1bmN0aW9uczogW10sXG5cbiAgLyoqXG4gICAqIENoZWNrcyB3aGV0aGVyIGEgcHJvcGVydHkgbmFtZSBpcyBhIGN1c3RvbSBhdHRyaWJ1dGUuXG4gICAqIEBtZXRob2RcbiAgICovXG4gIGlzQ3VzdG9tQXR0cmlidXRlOiBmdW5jdGlvbiAoYXR0cmlidXRlTmFtZSkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgRE9NUHJvcGVydHkuX2lzQ3VzdG9tQXR0cmlidXRlRnVuY3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaXNDdXN0b21BdHRyaWJ1dGVGbiA9IERPTVByb3BlcnR5Ll9pc0N1c3RvbUF0dHJpYnV0ZUZ1bmN0aW9uc1tpXTtcbiAgICAgIGlmIChpc0N1c3RvbUF0dHJpYnV0ZUZuKGF0dHJpYnV0ZU5hbWUpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG5cbiAgaW5qZWN0aW9uOiBET01Qcm9wZXJ0eUluamVjdGlvblxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBET01Qcm9wZXJ0eTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3JlYWN0LWRvbS9saWIvRE9NUHJvcGVydHkuanMiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBfcHJvZEludmFyaWFudCA9IHJlcXVpcmUoJy4vcmVhY3RQcm9kSW52YXJpYW50Jyk7XG5cbnZhciBpbnZhcmlhbnQgPSByZXF1aXJlKCdmYmpzL2xpYi9pbnZhcmlhbnQnKTtcblxuLyoqXG4gKiBTdGF0aWMgcG9vbGVycy4gU2V2ZXJhbCBjdXN0b20gdmVyc2lvbnMgZm9yIGVhY2ggcG90ZW50aWFsIG51bWJlciBvZlxuICogYXJndW1lbnRzLiBBIGNvbXBsZXRlbHkgZ2VuZXJpYyBwb29sZXIgaXMgZWFzeSB0byBpbXBsZW1lbnQsIGJ1dCB3b3VsZFxuICogcmVxdWlyZSBhY2Nlc3NpbmcgdGhlIGBhcmd1bWVudHNgIG9iamVjdC4gSW4gZWFjaCBvZiB0aGVzZSwgYHRoaXNgIHJlZmVycyB0b1xuICogdGhlIENsYXNzIGl0c2VsZiwgbm90IGFuIGluc3RhbmNlLiBJZiBhbnkgb3RoZXJzIGFyZSBuZWVkZWQsIHNpbXBseSBhZGQgdGhlbVxuICogaGVyZSwgb3IgaW4gdGhlaXIgb3duIGZpbGVzLlxuICovXG52YXIgb25lQXJndW1lbnRQb29sZXIgPSBmdW5jdGlvbiAoY29weUZpZWxkc0Zyb20pIHtcbiAgdmFyIEtsYXNzID0gdGhpcztcbiAgaWYgKEtsYXNzLmluc3RhbmNlUG9vbC5sZW5ndGgpIHtcbiAgICB2YXIgaW5zdGFuY2UgPSBLbGFzcy5pbnN0YW5jZVBvb2wucG9wKCk7XG4gICAgS2xhc3MuY2FsbChpbnN0YW5jZSwgY29weUZpZWxkc0Zyb20pO1xuICAgIHJldHVybiBpbnN0YW5jZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbmV3IEtsYXNzKGNvcHlGaWVsZHNGcm9tKTtcbiAgfVxufTtcblxudmFyIHR3b0FyZ3VtZW50UG9vbGVyID0gZnVuY3Rpb24gKGExLCBhMikge1xuICB2YXIgS2xhc3MgPSB0aGlzO1xuICBpZiAoS2xhc3MuaW5zdGFuY2VQb29sLmxlbmd0aCkge1xuICAgIHZhciBpbnN0YW5jZSA9IEtsYXNzLmluc3RhbmNlUG9vbC5wb3AoKTtcbiAgICBLbGFzcy5jYWxsKGluc3RhbmNlLCBhMSwgYTIpO1xuICAgIHJldHVybiBpbnN0YW5jZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbmV3IEtsYXNzKGExLCBhMik7XG4gIH1cbn07XG5cbnZhciB0aHJlZUFyZ3VtZW50UG9vbGVyID0gZnVuY3Rpb24gKGExLCBhMiwgYTMpIHtcbiAgdmFyIEtsYXNzID0gdGhpcztcbiAgaWYgKEtsYXNzLmluc3RhbmNlUG9vbC5sZW5ndGgpIHtcbiAgICB2YXIgaW5zdGFuY2UgPSBLbGFzcy5pbnN0YW5jZVBvb2wucG9wKCk7XG4gICAgS2xhc3MuY2FsbChpbnN0YW5jZSwgYTEsIGEyLCBhMyk7XG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBuZXcgS2xhc3MoYTEsIGEyLCBhMyk7XG4gIH1cbn07XG5cbnZhciBmb3VyQXJndW1lbnRQb29sZXIgPSBmdW5jdGlvbiAoYTEsIGEyLCBhMywgYTQpIHtcbiAgdmFyIEtsYXNzID0gdGhpcztcbiAgaWYgKEtsYXNzLmluc3RhbmNlUG9vbC5sZW5ndGgpIHtcbiAgICB2YXIgaW5zdGFuY2UgPSBLbGFzcy5pbnN0YW5jZVBvb2wucG9wKCk7XG4gICAgS2xhc3MuY2FsbChpbnN0YW5jZSwgYTEsIGEyLCBhMywgYTQpO1xuICAgIHJldHVybiBpbnN0YW5jZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbmV3IEtsYXNzKGExLCBhMiwgYTMsIGE0KTtcbiAgfVxufTtcblxudmFyIHN0YW5kYXJkUmVsZWFzZXIgPSBmdW5jdGlvbiAoaW5zdGFuY2UpIHtcbiAgdmFyIEtsYXNzID0gdGhpcztcbiAgIShpbnN0YW5jZSBpbnN0YW5jZW9mIEtsYXNzKSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICdUcnlpbmcgdG8gcmVsZWFzZSBhbiBpbnN0YW5jZSBpbnRvIGEgcG9vbCBvZiBhIGRpZmZlcmVudCB0eXBlLicpIDogX3Byb2RJbnZhcmlhbnQoJzI1JykgOiB2b2lkIDA7XG4gIGluc3RhbmNlLmRlc3RydWN0b3IoKTtcbiAgaWYgKEtsYXNzLmluc3RhbmNlUG9vbC5sZW5ndGggPCBLbGFzcy5wb29sU2l6ZSkge1xuICAgIEtsYXNzLmluc3RhbmNlUG9vbC5wdXNoKGluc3RhbmNlKTtcbiAgfVxufTtcblxudmFyIERFRkFVTFRfUE9PTF9TSVpFID0gMTA7XG52YXIgREVGQVVMVF9QT09MRVIgPSBvbmVBcmd1bWVudFBvb2xlcjtcblxuLyoqXG4gKiBBdWdtZW50cyBgQ29weUNvbnN0cnVjdG9yYCB0byBiZSBhIHBvb2xhYmxlIGNsYXNzLCBhdWdtZW50aW5nIG9ubHkgdGhlIGNsYXNzXG4gKiBpdHNlbGYgKHN0YXRpY2FsbHkpIG5vdCBhZGRpbmcgYW55IHByb3RvdHlwaWNhbCBmaWVsZHMuIEFueSBDb3B5Q29uc3RydWN0b3JcbiAqIHlvdSBnaXZlIHRoaXMgbWF5IGhhdmUgYSBgcG9vbFNpemVgIHByb3BlcnR5LCBhbmQgd2lsbCBsb29rIGZvciBhXG4gKiBwcm90b3R5cGljYWwgYGRlc3RydWN0b3JgIG9uIGluc3RhbmNlcy5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBDb3B5Q29uc3RydWN0b3IgQ29uc3RydWN0b3IgdGhhdCBjYW4gYmUgdXNlZCB0byByZXNldC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHBvb2xlciBDdXN0b21pemFibGUgcG9vbGVyLlxuICovXG52YXIgYWRkUG9vbGluZ1RvID0gZnVuY3Rpb24gKENvcHlDb25zdHJ1Y3RvciwgcG9vbGVyKSB7XG4gIC8vIENhc3RpbmcgYXMgYW55IHNvIHRoYXQgZmxvdyBpZ25vcmVzIHRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb24gYW5kIHRydXN0c1xuICAvLyBpdCB0byBtYXRjaCB0aGUgdHlwZSB3ZSBkZWNsYXJlZFxuICB2YXIgTmV3S2xhc3MgPSBDb3B5Q29uc3RydWN0b3I7XG4gIE5ld0tsYXNzLmluc3RhbmNlUG9vbCA9IFtdO1xuICBOZXdLbGFzcy5nZXRQb29sZWQgPSBwb29sZXIgfHwgREVGQVVMVF9QT09MRVI7XG4gIGlmICghTmV3S2xhc3MucG9vbFNpemUpIHtcbiAgICBOZXdLbGFzcy5wb29sU2l6ZSA9IERFRkFVTFRfUE9PTF9TSVpFO1xuICB9XG4gIE5ld0tsYXNzLnJlbGVhc2UgPSBzdGFuZGFyZFJlbGVhc2VyO1xuICByZXR1cm4gTmV3S2xhc3M7XG59O1xuXG52YXIgUG9vbGVkQ2xhc3MgPSB7XG4gIGFkZFBvb2xpbmdUbzogYWRkUG9vbGluZ1RvLFxuICBvbmVBcmd1bWVudFBvb2xlcjogb25lQXJndW1lbnRQb29sZXIsXG4gIHR3b0FyZ3VtZW50UG9vbGVyOiB0d29Bcmd1bWVudFBvb2xlcixcbiAgdGhyZWVBcmd1bWVudFBvb2xlcjogdGhyZWVBcmd1bWVudFBvb2xlcixcbiAgZm91ckFyZ3VtZW50UG9vbGVyOiBmb3VyQXJndW1lbnRQb29sZXJcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUG9vbGVkQ2xhc3M7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1kb20vbGliL1Bvb2xlZENsYXNzLmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxNC1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIF9hc3NpZ24gPSByZXF1aXJlKCdvYmplY3QtYXNzaWduJyk7XG5cbnZhciBSZWFjdEN1cnJlbnRPd25lciA9IHJlcXVpcmUoJy4vUmVhY3RDdXJyZW50T3duZXInKTtcblxudmFyIHdhcm5pbmcgPSByZXF1aXJlKCdmYmpzL2xpYi93YXJuaW5nJyk7XG52YXIgY2FuRGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL2NhbkRlZmluZVByb3BlcnR5Jyk7XG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuXG52YXIgUkVBQ1RfRUxFTUVOVF9UWVBFID0gcmVxdWlyZSgnLi9SZWFjdEVsZW1lbnRTeW1ib2wnKTtcblxudmFyIFJFU0VSVkVEX1BST1BTID0ge1xuICBrZXk6IHRydWUsXG4gIHJlZjogdHJ1ZSxcbiAgX19zZWxmOiB0cnVlLFxuICBfX3NvdXJjZTogdHJ1ZVxufTtcblxudmFyIHNwZWNpYWxQcm9wS2V5V2FybmluZ1Nob3duLCBzcGVjaWFsUHJvcFJlZldhcm5pbmdTaG93bjtcblxuZnVuY3Rpb24gaGFzVmFsaWRSZWYoY29uZmlnKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoY29uZmlnLCAncmVmJykpIHtcbiAgICAgIHZhciBnZXR0ZXIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGNvbmZpZywgJ3JlZicpLmdldDtcbiAgICAgIGlmIChnZXR0ZXIgJiYgZ2V0dGVyLmlzUmVhY3RXYXJuaW5nKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNvbmZpZy5yZWYgIT09IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gaGFzVmFsaWRLZXkoY29uZmlnKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoY29uZmlnLCAna2V5JykpIHtcbiAgICAgIHZhciBnZXR0ZXIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGNvbmZpZywgJ2tleScpLmdldDtcbiAgICAgIGlmIChnZXR0ZXIgJiYgZ2V0dGVyLmlzUmVhY3RXYXJuaW5nKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNvbmZpZy5rZXkgIT09IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gZGVmaW5lS2V5UHJvcFdhcm5pbmdHZXR0ZXIocHJvcHMsIGRpc3BsYXlOYW1lKSB7XG4gIHZhciB3YXJuQWJvdXRBY2Nlc3NpbmdLZXkgPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCFzcGVjaWFsUHJvcEtleVdhcm5pbmdTaG93bikge1xuICAgICAgc3BlY2lhbFByb3BLZXlXYXJuaW5nU2hvd24gPSB0cnVlO1xuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcoZmFsc2UsICclczogYGtleWAgaXMgbm90IGEgcHJvcC4gVHJ5aW5nIHRvIGFjY2VzcyBpdCB3aWxsIHJlc3VsdCAnICsgJ2luIGB1bmRlZmluZWRgIGJlaW5nIHJldHVybmVkLiBJZiB5b3UgbmVlZCB0byBhY2Nlc3MgdGhlIHNhbWUgJyArICd2YWx1ZSB3aXRoaW4gdGhlIGNoaWxkIGNvbXBvbmVudCwgeW91IHNob3VsZCBwYXNzIGl0IGFzIGEgZGlmZmVyZW50ICcgKyAncHJvcC4gKGh0dHBzOi8vZmIubWUvcmVhY3Qtc3BlY2lhbC1wcm9wcyknLCBkaXNwbGF5TmFtZSkgOiB2b2lkIDA7XG4gICAgfVxuICB9O1xuICB3YXJuQWJvdXRBY2Nlc3NpbmdLZXkuaXNSZWFjdFdhcm5pbmcgPSB0cnVlO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkocHJvcHMsICdrZXknLCB7XG4gICAgZ2V0OiB3YXJuQWJvdXRBY2Nlc3NpbmdLZXksXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0pO1xufVxuXG5mdW5jdGlvbiBkZWZpbmVSZWZQcm9wV2FybmluZ0dldHRlcihwcm9wcywgZGlzcGxheU5hbWUpIHtcbiAgdmFyIHdhcm5BYm91dEFjY2Vzc2luZ1JlZiA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIXNwZWNpYWxQcm9wUmVmV2FybmluZ1Nob3duKSB7XG4gICAgICBzcGVjaWFsUHJvcFJlZldhcm5pbmdTaG93biA9IHRydWU7XG4gICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyhmYWxzZSwgJyVzOiBgcmVmYCBpcyBub3QgYSBwcm9wLiBUcnlpbmcgdG8gYWNjZXNzIGl0IHdpbGwgcmVzdWx0ICcgKyAnaW4gYHVuZGVmaW5lZGAgYmVpbmcgcmV0dXJuZWQuIElmIHlvdSBuZWVkIHRvIGFjY2VzcyB0aGUgc2FtZSAnICsgJ3ZhbHVlIHdpdGhpbiB0aGUgY2hpbGQgY29tcG9uZW50LCB5b3Ugc2hvdWxkIHBhc3MgaXQgYXMgYSBkaWZmZXJlbnQgJyArICdwcm9wLiAoaHR0cHM6Ly9mYi5tZS9yZWFjdC1zcGVjaWFsLXByb3BzKScsIGRpc3BsYXlOYW1lKSA6IHZvaWQgMDtcbiAgICB9XG4gIH07XG4gIHdhcm5BYm91dEFjY2Vzc2luZ1JlZi5pc1JlYWN0V2FybmluZyA9IHRydWU7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm9wcywgJ3JlZicsIHtcbiAgICBnZXQ6IHdhcm5BYm91dEFjY2Vzc2luZ1JlZixcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSk7XG59XG5cbi8qKlxuICogRmFjdG9yeSBtZXRob2QgdG8gY3JlYXRlIGEgbmV3IFJlYWN0IGVsZW1lbnQuIFRoaXMgbm8gbG9uZ2VyIGFkaGVyZXMgdG9cbiAqIHRoZSBjbGFzcyBwYXR0ZXJuLCBzbyBkbyBub3QgdXNlIG5ldyB0byBjYWxsIGl0LiBBbHNvLCBubyBpbnN0YW5jZW9mIGNoZWNrXG4gKiB3aWxsIHdvcmsuIEluc3RlYWQgdGVzdCAkJHR5cGVvZiBmaWVsZCBhZ2FpbnN0IFN5bWJvbC5mb3IoJ3JlYWN0LmVsZW1lbnQnKSB0byBjaGVja1xuICogaWYgc29tZXRoaW5nIGlzIGEgUmVhY3QgRWxlbWVudC5cbiAqXG4gKiBAcGFyYW0geyp9IHR5cGVcbiAqIEBwYXJhbSB7Kn0ga2V5XG4gKiBAcGFyYW0ge3N0cmluZ3xvYmplY3R9IHJlZlxuICogQHBhcmFtIHsqfSBzZWxmIEEgKnRlbXBvcmFyeSogaGVscGVyIHRvIGRldGVjdCBwbGFjZXMgd2hlcmUgYHRoaXNgIGlzXG4gKiBkaWZmZXJlbnQgZnJvbSB0aGUgYG93bmVyYCB3aGVuIFJlYWN0LmNyZWF0ZUVsZW1lbnQgaXMgY2FsbGVkLCBzbyB0aGF0IHdlXG4gKiBjYW4gd2Fybi4gV2Ugd2FudCB0byBnZXQgcmlkIG9mIG93bmVyIGFuZCByZXBsYWNlIHN0cmluZyBgcmVmYHMgd2l0aCBhcnJvd1xuICogZnVuY3Rpb25zLCBhbmQgYXMgbG9uZyBhcyBgdGhpc2AgYW5kIG93bmVyIGFyZSB0aGUgc2FtZSwgdGhlcmUgd2lsbCBiZSBub1xuICogY2hhbmdlIGluIGJlaGF2aW9yLlxuICogQHBhcmFtIHsqfSBzb3VyY2UgQW4gYW5ub3RhdGlvbiBvYmplY3QgKGFkZGVkIGJ5IGEgdHJhbnNwaWxlciBvciBvdGhlcndpc2UpXG4gKiBpbmRpY2F0aW5nIGZpbGVuYW1lLCBsaW5lIG51bWJlciwgYW5kL29yIG90aGVyIGluZm9ybWF0aW9uLlxuICogQHBhcmFtIHsqfSBvd25lclxuICogQHBhcmFtIHsqfSBwcm9wc1xuICogQGludGVybmFsXG4gKi9cbnZhciBSZWFjdEVsZW1lbnQgPSBmdW5jdGlvbiAodHlwZSwga2V5LCByZWYsIHNlbGYsIHNvdXJjZSwgb3duZXIsIHByb3BzKSB7XG4gIHZhciBlbGVtZW50ID0ge1xuICAgIC8vIFRoaXMgdGFnIGFsbG93IHVzIHRvIHVuaXF1ZWx5IGlkZW50aWZ5IHRoaXMgYXMgYSBSZWFjdCBFbGVtZW50XG4gICAgJCR0eXBlb2Y6IFJFQUNUX0VMRU1FTlRfVFlQRSxcblxuICAgIC8vIEJ1aWx0LWluIHByb3BlcnRpZXMgdGhhdCBiZWxvbmcgb24gdGhlIGVsZW1lbnRcbiAgICB0eXBlOiB0eXBlLFxuICAgIGtleToga2V5LFxuICAgIHJlZjogcmVmLFxuICAgIHByb3BzOiBwcm9wcyxcblxuICAgIC8vIFJlY29yZCB0aGUgY29tcG9uZW50IHJlc3BvbnNpYmxlIGZvciBjcmVhdGluZyB0aGlzIGVsZW1lbnQuXG4gICAgX293bmVyOiBvd25lclxuICB9O1xuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgLy8gVGhlIHZhbGlkYXRpb24gZmxhZyBpcyBjdXJyZW50bHkgbXV0YXRpdmUuIFdlIHB1dCBpdCBvblxuICAgIC8vIGFuIGV4dGVybmFsIGJhY2tpbmcgc3RvcmUgc28gdGhhdCB3ZSBjYW4gZnJlZXplIHRoZSB3aG9sZSBvYmplY3QuXG4gICAgLy8gVGhpcyBjYW4gYmUgcmVwbGFjZWQgd2l0aCBhIFdlYWtNYXAgb25jZSB0aGV5IGFyZSBpbXBsZW1lbnRlZCBpblxuICAgIC8vIGNvbW1vbmx5IHVzZWQgZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnRzLlxuICAgIGVsZW1lbnQuX3N0b3JlID0ge307XG5cbiAgICAvLyBUbyBtYWtlIGNvbXBhcmluZyBSZWFjdEVsZW1lbnRzIGVhc2llciBmb3IgdGVzdGluZyBwdXJwb3Nlcywgd2UgbWFrZVxuICAgIC8vIHRoZSB2YWxpZGF0aW9uIGZsYWcgbm9uLWVudW1lcmFibGUgKHdoZXJlIHBvc3NpYmxlLCB3aGljaCBzaG91bGRcbiAgICAvLyBpbmNsdWRlIGV2ZXJ5IGVudmlyb25tZW50IHdlIHJ1biB0ZXN0cyBpbiksIHNvIHRoZSB0ZXN0IGZyYW1ld29ya1xuICAgIC8vIGlnbm9yZXMgaXQuXG4gICAgaWYgKGNhbkRlZmluZVByb3BlcnR5KSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZWxlbWVudC5fc3RvcmUsICd2YWxpZGF0ZWQnLCB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgdmFsdWU6IGZhbHNlXG4gICAgICB9KTtcbiAgICAgIC8vIHNlbGYgYW5kIHNvdXJjZSBhcmUgREVWIG9ubHkgcHJvcGVydGllcy5cbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlbGVtZW50LCAnX3NlbGYnLCB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICAgIHZhbHVlOiBzZWxmXG4gICAgICB9KTtcbiAgICAgIC8vIFR3byBlbGVtZW50cyBjcmVhdGVkIGluIHR3byBkaWZmZXJlbnQgcGxhY2VzIHNob3VsZCBiZSBjb25zaWRlcmVkXG4gICAgICAvLyBlcXVhbCBmb3IgdGVzdGluZyBwdXJwb3NlcyBhbmQgdGhlcmVmb3JlIHdlIGhpZGUgaXQgZnJvbSBlbnVtZXJhdGlvbi5cbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlbGVtZW50LCAnX3NvdXJjZScsIHtcbiAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgICAgdmFsdWU6IHNvdXJjZVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVsZW1lbnQuX3N0b3JlLnZhbGlkYXRlZCA9IGZhbHNlO1xuICAgICAgZWxlbWVudC5fc2VsZiA9IHNlbGY7XG4gICAgICBlbGVtZW50Ll9zb3VyY2UgPSBzb3VyY2U7XG4gICAgfVxuICAgIGlmIChPYmplY3QuZnJlZXplKSB7XG4gICAgICBPYmplY3QuZnJlZXplKGVsZW1lbnQucHJvcHMpO1xuICAgICAgT2JqZWN0LmZyZWV6ZShlbGVtZW50KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZWxlbWVudDtcbn07XG5cbi8qKlxuICogQ3JlYXRlIGFuZCByZXR1cm4gYSBuZXcgUmVhY3RFbGVtZW50IG9mIHRoZSBnaXZlbiB0eXBlLlxuICogU2VlIGh0dHBzOi8vZmFjZWJvb2suZ2l0aHViLmlvL3JlYWN0L2RvY3MvdG9wLWxldmVsLWFwaS5odG1sI3JlYWN0LmNyZWF0ZWVsZW1lbnRcbiAqL1xuUmVhY3RFbGVtZW50LmNyZWF0ZUVsZW1lbnQgPSBmdW5jdGlvbiAodHlwZSwgY29uZmlnLCBjaGlsZHJlbikge1xuICB2YXIgcHJvcE5hbWU7XG5cbiAgLy8gUmVzZXJ2ZWQgbmFtZXMgYXJlIGV4dHJhY3RlZFxuICB2YXIgcHJvcHMgPSB7fTtcblxuICB2YXIga2V5ID0gbnVsbDtcbiAgdmFyIHJlZiA9IG51bGw7XG4gIHZhciBzZWxmID0gbnVsbDtcbiAgdmFyIHNvdXJjZSA9IG51bGw7XG5cbiAgaWYgKGNvbmZpZyAhPSBudWxsKSB7XG4gICAgaWYgKGhhc1ZhbGlkUmVmKGNvbmZpZykpIHtcbiAgICAgIHJlZiA9IGNvbmZpZy5yZWY7XG4gICAgfVxuICAgIGlmIChoYXNWYWxpZEtleShjb25maWcpKSB7XG4gICAgICBrZXkgPSAnJyArIGNvbmZpZy5rZXk7XG4gICAgfVxuXG4gICAgc2VsZiA9IGNvbmZpZy5fX3NlbGYgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBjb25maWcuX19zZWxmO1xuICAgIHNvdXJjZSA9IGNvbmZpZy5fX3NvdXJjZSA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IGNvbmZpZy5fX3NvdXJjZTtcbiAgICAvLyBSZW1haW5pbmcgcHJvcGVydGllcyBhcmUgYWRkZWQgdG8gYSBuZXcgcHJvcHMgb2JqZWN0XG4gICAgZm9yIChwcm9wTmFtZSBpbiBjb25maWcpIHtcbiAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbmZpZywgcHJvcE5hbWUpICYmICFSRVNFUlZFRF9QUk9QUy5oYXNPd25Qcm9wZXJ0eShwcm9wTmFtZSkpIHtcbiAgICAgICAgcHJvcHNbcHJvcE5hbWVdID0gY29uZmlnW3Byb3BOYW1lXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBDaGlsZHJlbiBjYW4gYmUgbW9yZSB0aGFuIG9uZSBhcmd1bWVudCwgYW5kIHRob3NlIGFyZSB0cmFuc2ZlcnJlZCBvbnRvXG4gIC8vIHRoZSBuZXdseSBhbGxvY2F0ZWQgcHJvcHMgb2JqZWN0LlxuICB2YXIgY2hpbGRyZW5MZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoIC0gMjtcbiAgaWYgKGNoaWxkcmVuTGVuZ3RoID09PSAxKSB7XG4gICAgcHJvcHMuY2hpbGRyZW4gPSBjaGlsZHJlbjtcbiAgfSBlbHNlIGlmIChjaGlsZHJlbkxlbmd0aCA+IDEpIHtcbiAgICB2YXIgY2hpbGRBcnJheSA9IEFycmF5KGNoaWxkcmVuTGVuZ3RoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuTGVuZ3RoOyBpKyspIHtcbiAgICAgIGNoaWxkQXJyYXlbaV0gPSBhcmd1bWVudHNbaSArIDJdO1xuICAgIH1cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKE9iamVjdC5mcmVlemUpIHtcbiAgICAgICAgT2JqZWN0LmZyZWV6ZShjaGlsZEFycmF5KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcHJvcHMuY2hpbGRyZW4gPSBjaGlsZEFycmF5O1xuICB9XG5cbiAgLy8gUmVzb2x2ZSBkZWZhdWx0IHByb3BzXG4gIGlmICh0eXBlICYmIHR5cGUuZGVmYXVsdFByb3BzKSB7XG4gICAgdmFyIGRlZmF1bHRQcm9wcyA9IHR5cGUuZGVmYXVsdFByb3BzO1xuICAgIGZvciAocHJvcE5hbWUgaW4gZGVmYXVsdFByb3BzKSB7XG4gICAgICBpZiAocHJvcHNbcHJvcE5hbWVdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcHJvcHNbcHJvcE5hbWVdID0gZGVmYXVsdFByb3BzW3Byb3BOYW1lXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBpZiAoa2V5IHx8IHJlZikge1xuICAgICAgaWYgKHR5cGVvZiBwcm9wcy4kJHR5cGVvZiA9PT0gJ3VuZGVmaW5lZCcgfHwgcHJvcHMuJCR0eXBlb2YgIT09IFJFQUNUX0VMRU1FTlRfVFlQRSkge1xuICAgICAgICB2YXIgZGlzcGxheU5hbWUgPSB0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJyA/IHR5cGUuZGlzcGxheU5hbWUgfHwgdHlwZS5uYW1lIHx8ICdVbmtub3duJyA6IHR5cGU7XG4gICAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgICBkZWZpbmVLZXlQcm9wV2FybmluZ0dldHRlcihwcm9wcywgZGlzcGxheU5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZWYpIHtcbiAgICAgICAgICBkZWZpbmVSZWZQcm9wV2FybmluZ0dldHRlcihwcm9wcywgZGlzcGxheU5hbWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBSZWFjdEVsZW1lbnQodHlwZSwga2V5LCByZWYsIHNlbGYsIHNvdXJjZSwgUmVhY3RDdXJyZW50T3duZXIuY3VycmVudCwgcHJvcHMpO1xufTtcblxuLyoqXG4gKiBSZXR1cm4gYSBmdW5jdGlvbiB0aGF0IHByb2R1Y2VzIFJlYWN0RWxlbWVudHMgb2YgYSBnaXZlbiB0eXBlLlxuICogU2VlIGh0dHBzOi8vZmFjZWJvb2suZ2l0aHViLmlvL3JlYWN0L2RvY3MvdG9wLWxldmVsLWFwaS5odG1sI3JlYWN0LmNyZWF0ZWZhY3RvcnlcbiAqL1xuUmVhY3RFbGVtZW50LmNyZWF0ZUZhY3RvcnkgPSBmdW5jdGlvbiAodHlwZSkge1xuICB2YXIgZmFjdG9yeSA9IFJlYWN0RWxlbWVudC5jcmVhdGVFbGVtZW50LmJpbmQobnVsbCwgdHlwZSk7XG4gIC8vIEV4cG9zZSB0aGUgdHlwZSBvbiB0aGUgZmFjdG9yeSBhbmQgdGhlIHByb3RvdHlwZSBzbyB0aGF0IGl0IGNhbiBiZVxuICAvLyBlYXNpbHkgYWNjZXNzZWQgb24gZWxlbWVudHMuIEUuZy4gYDxGb28gLz4udHlwZSA9PT0gRm9vYC5cbiAgLy8gVGhpcyBzaG91bGQgbm90IGJlIG5hbWVkIGBjb25zdHJ1Y3RvcmAgc2luY2UgdGhpcyBtYXkgbm90IGJlIHRoZSBmdW5jdGlvblxuICAvLyB0aGF0IGNyZWF0ZWQgdGhlIGVsZW1lbnQsIGFuZCBpdCBtYXkgbm90IGV2ZW4gYmUgYSBjb25zdHJ1Y3Rvci5cbiAgLy8gTGVnYWN5IGhvb2sgVE9ETzogV2FybiBpZiB0aGlzIGlzIGFjY2Vzc2VkXG4gIGZhY3RvcnkudHlwZSA9IHR5cGU7XG4gIHJldHVybiBmYWN0b3J5O1xufTtcblxuUmVhY3RFbGVtZW50LmNsb25lQW5kUmVwbGFjZUtleSA9IGZ1bmN0aW9uIChvbGRFbGVtZW50LCBuZXdLZXkpIHtcbiAgdmFyIG5ld0VsZW1lbnQgPSBSZWFjdEVsZW1lbnQob2xkRWxlbWVudC50eXBlLCBuZXdLZXksIG9sZEVsZW1lbnQucmVmLCBvbGRFbGVtZW50Ll9zZWxmLCBvbGRFbGVtZW50Ll9zb3VyY2UsIG9sZEVsZW1lbnQuX293bmVyLCBvbGRFbGVtZW50LnByb3BzKTtcblxuICByZXR1cm4gbmV3RWxlbWVudDtcbn07XG5cbi8qKlxuICogQ2xvbmUgYW5kIHJldHVybiBhIG5ldyBSZWFjdEVsZW1lbnQgdXNpbmcgZWxlbWVudCBhcyB0aGUgc3RhcnRpbmcgcG9pbnQuXG4gKiBTZWUgaHR0cHM6Ly9mYWNlYm9vay5naXRodWIuaW8vcmVhY3QvZG9jcy90b3AtbGV2ZWwtYXBpLmh0bWwjcmVhY3QuY2xvbmVlbGVtZW50XG4gKi9cblJlYWN0RWxlbWVudC5jbG9uZUVsZW1lbnQgPSBmdW5jdGlvbiAoZWxlbWVudCwgY29uZmlnLCBjaGlsZHJlbikge1xuICB2YXIgcHJvcE5hbWU7XG5cbiAgLy8gT3JpZ2luYWwgcHJvcHMgYXJlIGNvcGllZFxuICB2YXIgcHJvcHMgPSBfYXNzaWduKHt9LCBlbGVtZW50LnByb3BzKTtcblxuICAvLyBSZXNlcnZlZCBuYW1lcyBhcmUgZXh0cmFjdGVkXG4gIHZhciBrZXkgPSBlbGVtZW50LmtleTtcbiAgdmFyIHJlZiA9IGVsZW1lbnQucmVmO1xuICAvLyBTZWxmIGlzIHByZXNlcnZlZCBzaW5jZSB0aGUgb3duZXIgaXMgcHJlc2VydmVkLlxuICB2YXIgc2VsZiA9IGVsZW1lbnQuX3NlbGY7XG4gIC8vIFNvdXJjZSBpcyBwcmVzZXJ2ZWQgc2luY2UgY2xvbmVFbGVtZW50IGlzIHVubGlrZWx5IHRvIGJlIHRhcmdldGVkIGJ5IGFcbiAgLy8gdHJhbnNwaWxlciwgYW5kIHRoZSBvcmlnaW5hbCBzb3VyY2UgaXMgcHJvYmFibHkgYSBiZXR0ZXIgaW5kaWNhdG9yIG9mIHRoZVxuICAvLyB0cnVlIG93bmVyLlxuICB2YXIgc291cmNlID0gZWxlbWVudC5fc291cmNlO1xuXG4gIC8vIE93bmVyIHdpbGwgYmUgcHJlc2VydmVkLCB1bmxlc3MgcmVmIGlzIG92ZXJyaWRkZW5cbiAgdmFyIG93bmVyID0gZWxlbWVudC5fb3duZXI7XG5cbiAgaWYgKGNvbmZpZyAhPSBudWxsKSB7XG4gICAgaWYgKGhhc1ZhbGlkUmVmKGNvbmZpZykpIHtcbiAgICAgIC8vIFNpbGVudGx5IHN0ZWFsIHRoZSByZWYgZnJvbSB0aGUgcGFyZW50LlxuICAgICAgcmVmID0gY29uZmlnLnJlZjtcbiAgICAgIG93bmVyID0gUmVhY3RDdXJyZW50T3duZXIuY3VycmVudDtcbiAgICB9XG4gICAgaWYgKGhhc1ZhbGlkS2V5KGNvbmZpZykpIHtcbiAgICAgIGtleSA9ICcnICsgY29uZmlnLmtleTtcbiAgICB9XG5cbiAgICAvLyBSZW1haW5pbmcgcHJvcGVydGllcyBvdmVycmlkZSBleGlzdGluZyBwcm9wc1xuICAgIHZhciBkZWZhdWx0UHJvcHM7XG4gICAgaWYgKGVsZW1lbnQudHlwZSAmJiBlbGVtZW50LnR5cGUuZGVmYXVsdFByb3BzKSB7XG4gICAgICBkZWZhdWx0UHJvcHMgPSBlbGVtZW50LnR5cGUuZGVmYXVsdFByb3BzO1xuICAgIH1cbiAgICBmb3IgKHByb3BOYW1lIGluIGNvbmZpZykge1xuICAgICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoY29uZmlnLCBwcm9wTmFtZSkgJiYgIVJFU0VSVkVEX1BST1BTLmhhc093blByb3BlcnR5KHByb3BOYW1lKSkge1xuICAgICAgICBpZiAoY29uZmlnW3Byb3BOYW1lXSA9PT0gdW5kZWZpbmVkICYmIGRlZmF1bHRQcm9wcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgLy8gUmVzb2x2ZSBkZWZhdWx0IHByb3BzXG4gICAgICAgICAgcHJvcHNbcHJvcE5hbWVdID0gZGVmYXVsdFByb3BzW3Byb3BOYW1lXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwcm9wc1twcm9wTmFtZV0gPSBjb25maWdbcHJvcE5hbWVdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gQ2hpbGRyZW4gY2FuIGJlIG1vcmUgdGhhbiBvbmUgYXJndW1lbnQsIGFuZCB0aG9zZSBhcmUgdHJhbnNmZXJyZWQgb250b1xuICAvLyB0aGUgbmV3bHkgYWxsb2NhdGVkIHByb3BzIG9iamVjdC5cbiAgdmFyIGNoaWxkcmVuTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aCAtIDI7XG4gIGlmIChjaGlsZHJlbkxlbmd0aCA9PT0gMSkge1xuICAgIHByb3BzLmNoaWxkcmVuID0gY2hpbGRyZW47XG4gIH0gZWxzZSBpZiAoY2hpbGRyZW5MZW5ndGggPiAxKSB7XG4gICAgdmFyIGNoaWxkQXJyYXkgPSBBcnJheShjaGlsZHJlbkxlbmd0aCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbkxlbmd0aDsgaSsrKSB7XG4gICAgICBjaGlsZEFycmF5W2ldID0gYXJndW1lbnRzW2kgKyAyXTtcbiAgICB9XG4gICAgcHJvcHMuY2hpbGRyZW4gPSBjaGlsZEFycmF5O1xuICB9XG5cbiAgcmV0dXJuIFJlYWN0RWxlbWVudChlbGVtZW50LnR5cGUsIGtleSwgcmVmLCBzZWxmLCBzb3VyY2UsIG93bmVyLCBwcm9wcyk7XG59O1xuXG4vKipcbiAqIFZlcmlmaWVzIHRoZSBvYmplY3QgaXMgYSBSZWFjdEVsZW1lbnQuXG4gKiBTZWUgaHR0cHM6Ly9mYWNlYm9vay5naXRodWIuaW8vcmVhY3QvZG9jcy90b3AtbGV2ZWwtYXBpLmh0bWwjcmVhY3QuaXN2YWxpZGVsZW1lbnRcbiAqIEBwYXJhbSB7P29iamVjdH0gb2JqZWN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIGBvYmplY3RgIGlzIGEgdmFsaWQgY29tcG9uZW50LlxuICogQGZpbmFsXG4gKi9cblJlYWN0RWxlbWVudC5pc1ZhbGlkRWxlbWVudCA9IGZ1bmN0aW9uIChvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnICYmIG9iamVjdCAhPT0gbnVsbCAmJiBvYmplY3QuJCR0eXBlb2YgPT09IFJFQUNUX0VMRU1FTlRfVFlQRTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RFbGVtZW50O1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QvbGliL1JlYWN0RWxlbWVudC5qcyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTQtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBTaW1pbGFyIHRvIGludmFyaWFudCBidXQgb25seSBsb2dzIGEgd2FybmluZyBpZiB0aGUgY29uZGl0aW9uIGlzIG5vdCBtZXQuXG4gKiBUaGlzIGNhbiBiZSB1c2VkIHRvIGxvZyBpc3N1ZXMgaW4gZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnRzIGluIGNyaXRpY2FsXG4gKiBwYXRocy4gUmVtb3ZpbmcgdGhlIGxvZ2dpbmcgY29kZSBmb3IgcHJvZHVjdGlvbiBlbnZpcm9ubWVudHMgd2lsbCBrZWVwIHRoZVxuICogc2FtZSBsb2dpYyBhbmQgZm9sbG93IHRoZSBzYW1lIGNvZGUgcGF0aHMuXG4gKi9cblxudmFyIHdhcm5pbmcgPSBmdW5jdGlvbigpIHt9O1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICB3YXJuaW5nID0gZnVuY3Rpb24oY29uZGl0aW9uLCBmb3JtYXQsIGFyZ3MpIHtcbiAgICB2YXIgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICBhcmdzID0gbmV3IEFycmF5KGxlbiA+IDIgPyBsZW4gLSAyIDogMCk7XG4gICAgZm9yICh2YXIga2V5ID0gMjsga2V5IDwgbGVuOyBrZXkrKykge1xuICAgICAgYXJnc1trZXkgLSAyXSA9IGFyZ3VtZW50c1trZXldO1xuICAgIH1cbiAgICBpZiAoZm9ybWF0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ2B3YXJuaW5nKGNvbmRpdGlvbiwgZm9ybWF0LCAuLi5hcmdzKWAgcmVxdWlyZXMgYSB3YXJuaW5nICcgK1xuICAgICAgICAnbWVzc2FnZSBhcmd1bWVudCdcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKGZvcm1hdC5sZW5ndGggPCAxMCB8fCAoL15bc1xcV10qJC8pLnRlc3QoZm9ybWF0KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnVGhlIHdhcm5pbmcgZm9ybWF0IHNob3VsZCBiZSBhYmxlIHRvIHVuaXF1ZWx5IGlkZW50aWZ5IHRoaXMgJyArXG4gICAgICAgICd3YXJuaW5nLiBQbGVhc2UsIHVzZSBhIG1vcmUgZGVzY3JpcHRpdmUgZm9ybWF0IHRoYW46ICcgKyBmb3JtYXRcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKCFjb25kaXRpb24pIHtcbiAgICAgIHZhciBhcmdJbmRleCA9IDA7XG4gICAgICB2YXIgbWVzc2FnZSA9ICdXYXJuaW5nOiAnICtcbiAgICAgICAgZm9ybWF0LnJlcGxhY2UoLyVzL2csIGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHJldHVybiBhcmdzW2FyZ0luZGV4KytdO1xuICAgICAgICB9KTtcbiAgICAgIGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihtZXNzYWdlKTtcbiAgICAgIH1cbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIFRoaXMgZXJyb3Igd2FzIHRocm93biBhcyBhIGNvbnZlbmllbmNlIHNvIHRoYXQgeW91IGNhbiB1c2UgdGhpcyBzdGFja1xuICAgICAgICAvLyB0byBmaW5kIHRoZSBjYWxsc2l0ZSB0aGF0IGNhdXNlZCB0aGlzIHdhcm5pbmcgdG8gZmlyZS5cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xuICAgICAgfSBjYXRjaCh4KSB7fVxuICAgIH1cbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB3YXJuaW5nO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi93YXJuaW5nL2Jyb3dzZXIuanMiLCIvKipcbiAqIENvcHlyaWdodCAyMDE1LXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgRE9NTmFtZXNwYWNlcyA9IHJlcXVpcmUoJy4vRE9NTmFtZXNwYWNlcycpO1xudmFyIHNldElubmVySFRNTCA9IHJlcXVpcmUoJy4vc2V0SW5uZXJIVE1MJyk7XG5cbnZhciBjcmVhdGVNaWNyb3NvZnRVbnNhZmVMb2NhbEZ1bmN0aW9uID0gcmVxdWlyZSgnLi9jcmVhdGVNaWNyb3NvZnRVbnNhZmVMb2NhbEZ1bmN0aW9uJyk7XG52YXIgc2V0VGV4dENvbnRlbnQgPSByZXF1aXJlKCcuL3NldFRleHRDb250ZW50Jyk7XG5cbnZhciBFTEVNRU5UX05PREVfVFlQRSA9IDE7XG52YXIgRE9DVU1FTlRfRlJBR01FTlRfTk9ERV9UWVBFID0gMTE7XG5cbi8qKlxuICogSW4gSUUgKDgtMTEpIGFuZCBFZGdlLCBhcHBlbmRpbmcgbm9kZXMgd2l0aCBubyBjaGlsZHJlbiBpcyBkcmFtYXRpY2FsbHlcbiAqIGZhc3RlciB0aGFuIGFwcGVuZGluZyBhIGZ1bGwgc3VidHJlZSwgc28gd2UgZXNzZW50aWFsbHkgcXVldWUgdXAgdGhlXG4gKiAuYXBwZW5kQ2hpbGQgY2FsbHMgaGVyZSBhbmQgYXBwbHkgdGhlbSBzbyBlYWNoIG5vZGUgaXMgYWRkZWQgdG8gaXRzIHBhcmVudFxuICogYmVmb3JlIGFueSBjaGlsZHJlbiBhcmUgYWRkZWQuXG4gKlxuICogSW4gb3RoZXIgYnJvd3NlcnMsIGRvaW5nIHNvIGlzIHNsb3dlciBvciBuZXV0cmFsIGNvbXBhcmVkIHRvIHRoZSBvdGhlciBvcmRlclxuICogKGluIEZpcmVmb3gsIHR3aWNlIGFzIHNsb3cpIHNvIHdlIG9ubHkgZG8gdGhpcyBpbnZlcnNpb24gaW4gSUUuXG4gKlxuICogU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zcGljeWovaW5uZXJodG1sLXZzLWNyZWF0ZWVsZW1lbnQtdnMtY2xvbmVub2RlLlxuICovXG52YXIgZW5hYmxlTGF6eSA9IHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGRvY3VtZW50LmRvY3VtZW50TW9kZSA9PT0gJ251bWJlcicgfHwgdHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIG5hdmlnYXRvci51c2VyQWdlbnQgPT09ICdzdHJpbmcnICYmIC9cXGJFZGdlXFwvXFxkLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xuXG5mdW5jdGlvbiBpbnNlcnRUcmVlQ2hpbGRyZW4odHJlZSkge1xuICBpZiAoIWVuYWJsZUxhenkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIG5vZGUgPSB0cmVlLm5vZGU7XG4gIHZhciBjaGlsZHJlbiA9IHRyZWUuY2hpbGRyZW47XG4gIGlmIChjaGlsZHJlbi5sZW5ndGgpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpbnNlcnRUcmVlQmVmb3JlKG5vZGUsIGNoaWxkcmVuW2ldLCBudWxsKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAodHJlZS5odG1sICE9IG51bGwpIHtcbiAgICBzZXRJbm5lckhUTUwobm9kZSwgdHJlZS5odG1sKTtcbiAgfSBlbHNlIGlmICh0cmVlLnRleHQgIT0gbnVsbCkge1xuICAgIHNldFRleHRDb250ZW50KG5vZGUsIHRyZWUudGV4dCk7XG4gIH1cbn1cblxudmFyIGluc2VydFRyZWVCZWZvcmUgPSBjcmVhdGVNaWNyb3NvZnRVbnNhZmVMb2NhbEZ1bmN0aW9uKGZ1bmN0aW9uIChwYXJlbnROb2RlLCB0cmVlLCByZWZlcmVuY2VOb2RlKSB7XG4gIC8vIERvY3VtZW50RnJhZ21lbnRzIGFyZW4ndCBhY3R1YWxseSBwYXJ0IG9mIHRoZSBET00gYWZ0ZXIgaW5zZXJ0aW9uIHNvXG4gIC8vIGFwcGVuZGluZyBjaGlsZHJlbiB3b24ndCB1cGRhdGUgdGhlIERPTS4gV2UgbmVlZCB0byBlbnN1cmUgdGhlIGZyYWdtZW50XG4gIC8vIGlzIHByb3Blcmx5IHBvcHVsYXRlZCBmaXJzdCwgYnJlYWtpbmcgb3V0IG9mIG91ciBsYXp5IGFwcHJvYWNoIGZvciBqdXN0XG4gIC8vIHRoaXMgbGV2ZWwuIEFsc28sIHNvbWUgPG9iamVjdD4gcGx1Z2lucyAobGlrZSBGbGFzaCBQbGF5ZXIpIHdpbGwgcmVhZFxuICAvLyA8cGFyYW0+IG5vZGVzIGltbWVkaWF0ZWx5IHVwb24gaW5zZXJ0aW9uIGludG8gdGhlIERPTSwgc28gPG9iamVjdD5cbiAgLy8gbXVzdCBhbHNvIGJlIHBvcHVsYXRlZCBwcmlvciB0byBpbnNlcnRpb24gaW50byB0aGUgRE9NLlxuICBpZiAodHJlZS5ub2RlLm5vZGVUeXBlID09PSBET0NVTUVOVF9GUkFHTUVOVF9OT0RFX1RZUEUgfHwgdHJlZS5ub2RlLm5vZGVUeXBlID09PSBFTEVNRU5UX05PREVfVFlQRSAmJiB0cmVlLm5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ29iamVjdCcgJiYgKHRyZWUubm9kZS5uYW1lc3BhY2VVUkkgPT0gbnVsbCB8fCB0cmVlLm5vZGUubmFtZXNwYWNlVVJJID09PSBET01OYW1lc3BhY2VzLmh0bWwpKSB7XG4gICAgaW5zZXJ0VHJlZUNoaWxkcmVuKHRyZWUpO1xuICAgIHBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRyZWUubm9kZSwgcmVmZXJlbmNlTm9kZSk7XG4gIH0gZWxzZSB7XG4gICAgcGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodHJlZS5ub2RlLCByZWZlcmVuY2VOb2RlKTtcbiAgICBpbnNlcnRUcmVlQ2hpbGRyZW4odHJlZSk7XG4gIH1cbn0pO1xuXG5mdW5jdGlvbiByZXBsYWNlQ2hpbGRXaXRoVHJlZShvbGROb2RlLCBuZXdUcmVlKSB7XG4gIG9sZE5vZGUucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQobmV3VHJlZS5ub2RlLCBvbGROb2RlKTtcbiAgaW5zZXJ0VHJlZUNoaWxkcmVuKG5ld1RyZWUpO1xufVxuXG5mdW5jdGlvbiBxdWV1ZUNoaWxkKHBhcmVudFRyZWUsIGNoaWxkVHJlZSkge1xuICBpZiAoZW5hYmxlTGF6eSkge1xuICAgIHBhcmVudFRyZWUuY2hpbGRyZW4ucHVzaChjaGlsZFRyZWUpO1xuICB9IGVsc2Uge1xuICAgIHBhcmVudFRyZWUubm9kZS5hcHBlbmRDaGlsZChjaGlsZFRyZWUubm9kZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcXVldWVIVE1MKHRyZWUsIGh0bWwpIHtcbiAgaWYgKGVuYWJsZUxhenkpIHtcbiAgICB0cmVlLmh0bWwgPSBodG1sO1xuICB9IGVsc2Uge1xuICAgIHNldElubmVySFRNTCh0cmVlLm5vZGUsIGh0bWwpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHF1ZXVlVGV4dCh0cmVlLCB0ZXh0KSB7XG4gIGlmIChlbmFibGVMYXp5KSB7XG4gICAgdHJlZS50ZXh0ID0gdGV4dDtcbiAgfSBlbHNlIHtcbiAgICBzZXRUZXh0Q29udGVudCh0cmVlLm5vZGUsIHRleHQpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICByZXR1cm4gdGhpcy5ub2RlLm5vZGVOYW1lO1xufVxuXG5mdW5jdGlvbiBET01MYXp5VHJlZShub2RlKSB7XG4gIHJldHVybiB7XG4gICAgbm9kZTogbm9kZSxcbiAgICBjaGlsZHJlbjogW10sXG4gICAgaHRtbDogbnVsbCxcbiAgICB0ZXh0OiBudWxsLFxuICAgIHRvU3RyaW5nOiB0b1N0cmluZ1xuICB9O1xufVxuXG5ET01MYXp5VHJlZS5pbnNlcnRUcmVlQmVmb3JlID0gaW5zZXJ0VHJlZUJlZm9yZTtcbkRPTUxhenlUcmVlLnJlcGxhY2VDaGlsZFdpdGhUcmVlID0gcmVwbGFjZUNoaWxkV2l0aFRyZWU7XG5ET01MYXp5VHJlZS5xdWV1ZUNoaWxkID0gcXVldWVDaGlsZDtcbkRPTUxhenlUcmVlLnF1ZXVlSFRNTCA9IHF1ZXVlSFRNTDtcbkRPTUxhenlUcmVlLnF1ZXVlVGV4dCA9IHF1ZXVlVGV4dDtcblxubW9kdWxlLmV4cG9ydHMgPSBET01MYXp5VHJlZTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3JlYWN0LWRvbS9saWIvRE9NTGF6eVRyZWUuanMiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUmVhY3RSZWYgPSByZXF1aXJlKCcuL1JlYWN0UmVmJyk7XG52YXIgUmVhY3RJbnN0cnVtZW50YXRpb24gPSByZXF1aXJlKCcuL1JlYWN0SW5zdHJ1bWVudGF0aW9uJyk7XG5cbnZhciB3YXJuaW5nID0gcmVxdWlyZSgnZmJqcy9saWIvd2FybmluZycpO1xuXG4vKipcbiAqIEhlbHBlciB0byBjYWxsIFJlYWN0UmVmLmF0dGFjaFJlZnMgd2l0aCB0aGlzIGNvbXBvc2l0ZSBjb21wb25lbnQsIHNwbGl0IG91dFxuICogdG8gYXZvaWQgYWxsb2NhdGlvbnMgaW4gdGhlIHRyYW5zYWN0aW9uIG1vdW50LXJlYWR5IHF1ZXVlLlxuICovXG5mdW5jdGlvbiBhdHRhY2hSZWZzKCkge1xuICBSZWFjdFJlZi5hdHRhY2hSZWZzKHRoaXMsIHRoaXMuX2N1cnJlbnRFbGVtZW50KTtcbn1cblxudmFyIFJlYWN0UmVjb25jaWxlciA9IHtcbiAgLyoqXG4gICAqIEluaXRpYWxpemVzIHRoZSBjb21wb25lbnQsIHJlbmRlcnMgbWFya3VwLCBhbmQgcmVnaXN0ZXJzIGV2ZW50IGxpc3RlbmVycy5cbiAgICpcbiAgICogQHBhcmFtIHtSZWFjdENvbXBvbmVudH0gaW50ZXJuYWxJbnN0YW5jZVxuICAgKiBAcGFyYW0ge1JlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb258UmVhY3RTZXJ2ZXJSZW5kZXJpbmdUcmFuc2FjdGlvbn0gdHJhbnNhY3Rpb25cbiAgICogQHBhcmFtIHs/b2JqZWN0fSB0aGUgY29udGFpbmluZyBob3N0IGNvbXBvbmVudCBpbnN0YW5jZVxuICAgKiBAcGFyYW0gez9vYmplY3R9IGluZm8gYWJvdXQgdGhlIGhvc3QgY29udGFpbmVyXG4gICAqIEByZXR1cm4gez9zdHJpbmd9IFJlbmRlcmVkIG1hcmt1cCB0byBiZSBpbnNlcnRlZCBpbnRvIHRoZSBET00uXG4gICAqIEBmaW5hbFxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIG1vdW50Q29tcG9uZW50OiBmdW5jdGlvbiAoaW50ZXJuYWxJbnN0YW5jZSwgdHJhbnNhY3Rpb24sIGhvc3RQYXJlbnQsIGhvc3RDb250YWluZXJJbmZvLCBjb250ZXh0LCBwYXJlbnREZWJ1Z0lEKSAvLyAwIGluIHByb2R1Y3Rpb24gYW5kIGZvciByb290c1xuICB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmIChpbnRlcm5hbEluc3RhbmNlLl9kZWJ1Z0lEICE9PSAwKSB7XG4gICAgICAgIFJlYWN0SW5zdHJ1bWVudGF0aW9uLmRlYnVnVG9vbC5vbkJlZm9yZU1vdW50Q29tcG9uZW50KGludGVybmFsSW5zdGFuY2UuX2RlYnVnSUQsIGludGVybmFsSW5zdGFuY2UuX2N1cnJlbnRFbGVtZW50LCBwYXJlbnREZWJ1Z0lEKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdmFyIG1hcmt1cCA9IGludGVybmFsSW5zdGFuY2UubW91bnRDb21wb25lbnQodHJhbnNhY3Rpb24sIGhvc3RQYXJlbnQsIGhvc3RDb250YWluZXJJbmZvLCBjb250ZXh0LCBwYXJlbnREZWJ1Z0lEKTtcbiAgICBpZiAoaW50ZXJuYWxJbnN0YW5jZS5fY3VycmVudEVsZW1lbnQgJiYgaW50ZXJuYWxJbnN0YW5jZS5fY3VycmVudEVsZW1lbnQucmVmICE9IG51bGwpIHtcbiAgICAgIHRyYW5zYWN0aW9uLmdldFJlYWN0TW91bnRSZWFkeSgpLmVucXVldWUoYXR0YWNoUmVmcywgaW50ZXJuYWxJbnN0YW5jZSk7XG4gICAgfVxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBpZiAoaW50ZXJuYWxJbnN0YW5jZS5fZGVidWdJRCAhPT0gMCkge1xuICAgICAgICBSZWFjdEluc3RydW1lbnRhdGlvbi5kZWJ1Z1Rvb2wub25Nb3VudENvbXBvbmVudChpbnRlcm5hbEluc3RhbmNlLl9kZWJ1Z0lEKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1hcmt1cDtcbiAgfSxcblxuICAvKipcbiAgICogUmV0dXJucyBhIHZhbHVlIHRoYXQgY2FuIGJlIHBhc3NlZCB0b1xuICAgKiBSZWFjdENvbXBvbmVudEVudmlyb25tZW50LnJlcGxhY2VOb2RlV2l0aE1hcmt1cC5cbiAgICovXG4gIGdldEhvc3ROb2RlOiBmdW5jdGlvbiAoaW50ZXJuYWxJbnN0YW5jZSkge1xuICAgIHJldHVybiBpbnRlcm5hbEluc3RhbmNlLmdldEhvc3ROb2RlKCk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFJlbGVhc2VzIGFueSByZXNvdXJjZXMgYWxsb2NhdGVkIGJ5IGBtb3VudENvbXBvbmVudGAuXG4gICAqXG4gICAqIEBmaW5hbFxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHVubW91bnRDb21wb25lbnQ6IGZ1bmN0aW9uIChpbnRlcm5hbEluc3RhbmNlLCBzYWZlbHkpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKGludGVybmFsSW5zdGFuY2UuX2RlYnVnSUQgIT09IDApIHtcbiAgICAgICAgUmVhY3RJbnN0cnVtZW50YXRpb24uZGVidWdUb29sLm9uQmVmb3JlVW5tb3VudENvbXBvbmVudChpbnRlcm5hbEluc3RhbmNlLl9kZWJ1Z0lEKTtcbiAgICAgIH1cbiAgICB9XG4gICAgUmVhY3RSZWYuZGV0YWNoUmVmcyhpbnRlcm5hbEluc3RhbmNlLCBpbnRlcm5hbEluc3RhbmNlLl9jdXJyZW50RWxlbWVudCk7XG4gICAgaW50ZXJuYWxJbnN0YW5jZS51bm1vdW50Q29tcG9uZW50KHNhZmVseSk7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmIChpbnRlcm5hbEluc3RhbmNlLl9kZWJ1Z0lEICE9PSAwKSB7XG4gICAgICAgIFJlYWN0SW5zdHJ1bWVudGF0aW9uLmRlYnVnVG9vbC5vblVubW91bnRDb21wb25lbnQoaW50ZXJuYWxJbnN0YW5jZS5fZGVidWdJRCk7XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIC8qKlxuICAgKiBVcGRhdGUgYSBjb21wb25lbnQgdXNpbmcgYSBuZXcgZWxlbWVudC5cbiAgICpcbiAgICogQHBhcmFtIHtSZWFjdENvbXBvbmVudH0gaW50ZXJuYWxJbnN0YW5jZVxuICAgKiBAcGFyYW0ge1JlYWN0RWxlbWVudH0gbmV4dEVsZW1lbnRcbiAgICogQHBhcmFtIHtSZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9ufSB0cmFuc2FjdGlvblxuICAgKiBAcGFyYW0ge29iamVjdH0gY29udGV4dFxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHJlY2VpdmVDb21wb25lbnQ6IGZ1bmN0aW9uIChpbnRlcm5hbEluc3RhbmNlLCBuZXh0RWxlbWVudCwgdHJhbnNhY3Rpb24sIGNvbnRleHQpIHtcbiAgICB2YXIgcHJldkVsZW1lbnQgPSBpbnRlcm5hbEluc3RhbmNlLl9jdXJyZW50RWxlbWVudDtcblxuICAgIGlmIChuZXh0RWxlbWVudCA9PT0gcHJldkVsZW1lbnQgJiYgY29udGV4dCA9PT0gaW50ZXJuYWxJbnN0YW5jZS5fY29udGV4dCkge1xuICAgICAgLy8gU2luY2UgZWxlbWVudHMgYXJlIGltbXV0YWJsZSBhZnRlciB0aGUgb3duZXIgaXMgcmVuZGVyZWQsXG4gICAgICAvLyB3ZSBjYW4gZG8gYSBjaGVhcCBpZGVudGl0eSBjb21wYXJlIGhlcmUgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgaXMgYVxuICAgICAgLy8gc3VwZXJmbHVvdXMgcmVjb25jaWxlLiBJdCdzIHBvc3NpYmxlIGZvciBzdGF0ZSB0byBiZSBtdXRhYmxlIGJ1dCBzdWNoXG4gICAgICAvLyBjaGFuZ2Ugc2hvdWxkIHRyaWdnZXIgYW4gdXBkYXRlIG9mIHRoZSBvd25lciB3aGljaCB3b3VsZCByZWNyZWF0ZVxuICAgICAgLy8gdGhlIGVsZW1lbnQuIFdlIGV4cGxpY2l0bHkgY2hlY2sgZm9yIHRoZSBleGlzdGVuY2Ugb2YgYW4gb3duZXIgc2luY2VcbiAgICAgIC8vIGl0J3MgcG9zc2libGUgZm9yIGFuIGVsZW1lbnQgY3JlYXRlZCBvdXRzaWRlIGEgY29tcG9zaXRlIHRvIGJlXG4gICAgICAvLyBkZWVwbHkgbXV0YXRlZCBhbmQgcmV1c2VkLlxuXG4gICAgICAvLyBUT0RPOiBCYWlsaW5nIG91dCBlYXJseSBpcyBqdXN0IGEgcGVyZiBvcHRpbWl6YXRpb24gcmlnaHQ/XG4gICAgICAvLyBUT0RPOiBSZW1vdmluZyB0aGUgcmV0dXJuIHN0YXRlbWVudCBzaG91bGQgYWZmZWN0IGNvcnJlY3RuZXNzP1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBpZiAoaW50ZXJuYWxJbnN0YW5jZS5fZGVidWdJRCAhPT0gMCkge1xuICAgICAgICBSZWFjdEluc3RydW1lbnRhdGlvbi5kZWJ1Z1Rvb2wub25CZWZvcmVVcGRhdGVDb21wb25lbnQoaW50ZXJuYWxJbnN0YW5jZS5fZGVidWdJRCwgbmV4dEVsZW1lbnQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciByZWZzQ2hhbmdlZCA9IFJlYWN0UmVmLnNob3VsZFVwZGF0ZVJlZnMocHJldkVsZW1lbnQsIG5leHRFbGVtZW50KTtcblxuICAgIGlmIChyZWZzQ2hhbmdlZCkge1xuICAgICAgUmVhY3RSZWYuZGV0YWNoUmVmcyhpbnRlcm5hbEluc3RhbmNlLCBwcmV2RWxlbWVudCk7XG4gICAgfVxuXG4gICAgaW50ZXJuYWxJbnN0YW5jZS5yZWNlaXZlQ29tcG9uZW50KG5leHRFbGVtZW50LCB0cmFuc2FjdGlvbiwgY29udGV4dCk7XG5cbiAgICBpZiAocmVmc0NoYW5nZWQgJiYgaW50ZXJuYWxJbnN0YW5jZS5fY3VycmVudEVsZW1lbnQgJiYgaW50ZXJuYWxJbnN0YW5jZS5fY3VycmVudEVsZW1lbnQucmVmICE9IG51bGwpIHtcbiAgICAgIHRyYW5zYWN0aW9uLmdldFJlYWN0TW91bnRSZWFkeSgpLmVucXVldWUoYXR0YWNoUmVmcywgaW50ZXJuYWxJbnN0YW5jZSk7XG4gICAgfVxuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmIChpbnRlcm5hbEluc3RhbmNlLl9kZWJ1Z0lEICE9PSAwKSB7XG4gICAgICAgIFJlYWN0SW5zdHJ1bWVudGF0aW9uLmRlYnVnVG9vbC5vblVwZGF0ZUNvbXBvbmVudChpbnRlcm5hbEluc3RhbmNlLl9kZWJ1Z0lEKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgLyoqXG4gICAqIEZsdXNoIGFueSBkaXJ0eSBjaGFuZ2VzIGluIGEgY29tcG9uZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0Q29tcG9uZW50fSBpbnRlcm5hbEluc3RhbmNlXG4gICAqIEBwYXJhbSB7UmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvbn0gdHJhbnNhY3Rpb25cbiAgICogQGludGVybmFsXG4gICAqL1xuICBwZXJmb3JtVXBkYXRlSWZOZWNlc3Nhcnk6IGZ1bmN0aW9uIChpbnRlcm5hbEluc3RhbmNlLCB0cmFuc2FjdGlvbiwgdXBkYXRlQmF0Y2hOdW1iZXIpIHtcbiAgICBpZiAoaW50ZXJuYWxJbnN0YW5jZS5fdXBkYXRlQmF0Y2hOdW1iZXIgIT09IHVwZGF0ZUJhdGNoTnVtYmVyKSB7XG4gICAgICAvLyBUaGUgY29tcG9uZW50J3MgZW5xdWV1ZWQgYmF0Y2ggbnVtYmVyIHNob3VsZCBhbHdheXMgYmUgdGhlIGN1cnJlbnRcbiAgICAgIC8vIGJhdGNoIG9yIHRoZSBmb2xsb3dpbmcgb25lLlxuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcoaW50ZXJuYWxJbnN0YW5jZS5fdXBkYXRlQmF0Y2hOdW1iZXIgPT0gbnVsbCB8fCBpbnRlcm5hbEluc3RhbmNlLl91cGRhdGVCYXRjaE51bWJlciA9PT0gdXBkYXRlQmF0Y2hOdW1iZXIgKyAxLCAncGVyZm9ybVVwZGF0ZUlmTmVjZXNzYXJ5OiBVbmV4cGVjdGVkIGJhdGNoIG51bWJlciAoY3VycmVudCAlcywgJyArICdwZW5kaW5nICVzKScsIHVwZGF0ZUJhdGNoTnVtYmVyLCBpbnRlcm5hbEluc3RhbmNlLl91cGRhdGVCYXRjaE51bWJlcikgOiB2b2lkIDA7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBpZiAoaW50ZXJuYWxJbnN0YW5jZS5fZGVidWdJRCAhPT0gMCkge1xuICAgICAgICBSZWFjdEluc3RydW1lbnRhdGlvbi5kZWJ1Z1Rvb2wub25CZWZvcmVVcGRhdGVDb21wb25lbnQoaW50ZXJuYWxJbnN0YW5jZS5fZGVidWdJRCwgaW50ZXJuYWxJbnN0YW5jZS5fY3VycmVudEVsZW1lbnQpO1xuICAgICAgfVxuICAgIH1cbiAgICBpbnRlcm5hbEluc3RhbmNlLnBlcmZvcm1VcGRhdGVJZk5lY2Vzc2FyeSh0cmFuc2FjdGlvbik7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmIChpbnRlcm5hbEluc3RhbmNlLl9kZWJ1Z0lEICE9PSAwKSB7XG4gICAgICAgIFJlYWN0SW5zdHJ1bWVudGF0aW9uLmRlYnVnVG9vbC5vblVwZGF0ZUNvbXBvbmVudChpbnRlcm5hbEluc3RhbmNlLl9kZWJ1Z0lEKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RSZWNvbmNpbGVyO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QtZG9tL2xpYi9SZWFjdFJlY29uY2lsZXIuanMiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgX2Fzc2lnbiA9IHJlcXVpcmUoJ29iamVjdC1hc3NpZ24nKTtcblxudmFyIFJlYWN0QmFzZUNsYXNzZXMgPSByZXF1aXJlKCcuL1JlYWN0QmFzZUNsYXNzZXMnKTtcbnZhciBSZWFjdENoaWxkcmVuID0gcmVxdWlyZSgnLi9SZWFjdENoaWxkcmVuJyk7XG52YXIgUmVhY3RET01GYWN0b3JpZXMgPSByZXF1aXJlKCcuL1JlYWN0RE9NRmFjdG9yaWVzJyk7XG52YXIgUmVhY3RFbGVtZW50ID0gcmVxdWlyZSgnLi9SZWFjdEVsZW1lbnQnKTtcbnZhciBSZWFjdFByb3BUeXBlcyA9IHJlcXVpcmUoJy4vUmVhY3RQcm9wVHlwZXMnKTtcbnZhciBSZWFjdFZlcnNpb24gPSByZXF1aXJlKCcuL1JlYWN0VmVyc2lvbicpO1xuXG52YXIgY3JlYXRlUmVhY3RDbGFzcyA9IHJlcXVpcmUoJy4vY3JlYXRlQ2xhc3MnKTtcbnZhciBvbmx5Q2hpbGQgPSByZXF1aXJlKCcuL29ubHlDaGlsZCcpO1xuXG52YXIgY3JlYXRlRWxlbWVudCA9IFJlYWN0RWxlbWVudC5jcmVhdGVFbGVtZW50O1xudmFyIGNyZWF0ZUZhY3RvcnkgPSBSZWFjdEVsZW1lbnQuY3JlYXRlRmFjdG9yeTtcbnZhciBjbG9uZUVsZW1lbnQgPSBSZWFjdEVsZW1lbnQuY2xvbmVFbGVtZW50O1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICB2YXIgbG93UHJpb3JpdHlXYXJuaW5nID0gcmVxdWlyZSgnLi9sb3dQcmlvcml0eVdhcm5pbmcnKTtcbiAgdmFyIGNhbkRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9jYW5EZWZpbmVQcm9wZXJ0eScpO1xuICB2YXIgUmVhY3RFbGVtZW50VmFsaWRhdG9yID0gcmVxdWlyZSgnLi9SZWFjdEVsZW1lbnRWYWxpZGF0b3InKTtcbiAgdmFyIGRpZFdhcm5Qcm9wVHlwZXNEZXByZWNhdGVkID0gZmFsc2U7XG4gIGNyZWF0ZUVsZW1lbnQgPSBSZWFjdEVsZW1lbnRWYWxpZGF0b3IuY3JlYXRlRWxlbWVudDtcbiAgY3JlYXRlRmFjdG9yeSA9IFJlYWN0RWxlbWVudFZhbGlkYXRvci5jcmVhdGVGYWN0b3J5O1xuICBjbG9uZUVsZW1lbnQgPSBSZWFjdEVsZW1lbnRWYWxpZGF0b3IuY2xvbmVFbGVtZW50O1xufVxuXG52YXIgX19zcHJlYWQgPSBfYXNzaWduO1xudmFyIGNyZWF0ZU1peGluID0gZnVuY3Rpb24gKG1peGluKSB7XG4gIHJldHVybiBtaXhpbjtcbn07XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHZhciB3YXJuZWRGb3JTcHJlYWQgPSBmYWxzZTtcbiAgdmFyIHdhcm5lZEZvckNyZWF0ZU1peGluID0gZmFsc2U7XG4gIF9fc3ByZWFkID0gZnVuY3Rpb24gKCkge1xuICAgIGxvd1ByaW9yaXR5V2FybmluZyh3YXJuZWRGb3JTcHJlYWQsICdSZWFjdC5fX3NwcmVhZCBpcyBkZXByZWNhdGVkIGFuZCBzaG91bGQgbm90IGJlIHVzZWQuIFVzZSAnICsgJ09iamVjdC5hc3NpZ24gZGlyZWN0bHkgb3IgYW5vdGhlciBoZWxwZXIgZnVuY3Rpb24gd2l0aCBzaW1pbGFyICcgKyAnc2VtYW50aWNzLiBZb3UgbWF5IGJlIHNlZWluZyB0aGlzIHdhcm5pbmcgZHVlIHRvIHlvdXIgY29tcGlsZXIuICcgKyAnU2VlIGh0dHBzOi8vZmIubWUvcmVhY3Qtc3ByZWFkLWRlcHJlY2F0aW9uIGZvciBtb3JlIGRldGFpbHMuJyk7XG4gICAgd2FybmVkRm9yU3ByZWFkID0gdHJ1ZTtcbiAgICByZXR1cm4gX2Fzc2lnbi5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICB9O1xuXG4gIGNyZWF0ZU1peGluID0gZnVuY3Rpb24gKG1peGluKSB7XG4gICAgbG93UHJpb3JpdHlXYXJuaW5nKHdhcm5lZEZvckNyZWF0ZU1peGluLCAnUmVhY3QuY3JlYXRlTWl4aW4gaXMgZGVwcmVjYXRlZCBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkLiAnICsgJ0luIFJlYWN0IHYxNi4wLCBpdCB3aWxsIGJlIHJlbW92ZWQuICcgKyAnWW91IGNhbiB1c2UgdGhpcyBtaXhpbiBkaXJlY3RseSBpbnN0ZWFkLiAnICsgJ1NlZSBodHRwczovL2ZiLm1lL2NyZWF0ZW1peGluLXdhcy1uZXZlci1pbXBsZW1lbnRlZCBmb3IgbW9yZSBpbmZvLicpO1xuICAgIHdhcm5lZEZvckNyZWF0ZU1peGluID0gdHJ1ZTtcbiAgICByZXR1cm4gbWl4aW47XG4gIH07XG59XG5cbnZhciBSZWFjdCA9IHtcbiAgLy8gTW9kZXJuXG5cbiAgQ2hpbGRyZW46IHtcbiAgICBtYXA6IFJlYWN0Q2hpbGRyZW4ubWFwLFxuICAgIGZvckVhY2g6IFJlYWN0Q2hpbGRyZW4uZm9yRWFjaCxcbiAgICBjb3VudDogUmVhY3RDaGlsZHJlbi5jb3VudCxcbiAgICB0b0FycmF5OiBSZWFjdENoaWxkcmVuLnRvQXJyYXksXG4gICAgb25seTogb25seUNoaWxkXG4gIH0sXG5cbiAgQ29tcG9uZW50OiBSZWFjdEJhc2VDbGFzc2VzLkNvbXBvbmVudCxcbiAgUHVyZUNvbXBvbmVudDogUmVhY3RCYXNlQ2xhc3Nlcy5QdXJlQ29tcG9uZW50LFxuXG4gIGNyZWF0ZUVsZW1lbnQ6IGNyZWF0ZUVsZW1lbnQsXG4gIGNsb25lRWxlbWVudDogY2xvbmVFbGVtZW50LFxuICBpc1ZhbGlkRWxlbWVudDogUmVhY3RFbGVtZW50LmlzVmFsaWRFbGVtZW50LFxuXG4gIC8vIENsYXNzaWNcblxuICBQcm9wVHlwZXM6IFJlYWN0UHJvcFR5cGVzLFxuICBjcmVhdGVDbGFzczogY3JlYXRlUmVhY3RDbGFzcyxcbiAgY3JlYXRlRmFjdG9yeTogY3JlYXRlRmFjdG9yeSxcbiAgY3JlYXRlTWl4aW46IGNyZWF0ZU1peGluLFxuXG4gIC8vIFRoaXMgbG9va3MgRE9NIHNwZWNpZmljIGJ1dCB0aGVzZSBhcmUgYWN0dWFsbHkgaXNvbW9ycGhpYyBoZWxwZXJzXG4gIC8vIHNpbmNlIHRoZXkgYXJlIGp1c3QgZ2VuZXJhdGluZyBET00gc3RyaW5ncy5cbiAgRE9NOiBSZWFjdERPTUZhY3RvcmllcyxcblxuICB2ZXJzaW9uOiBSZWFjdFZlcnNpb24sXG5cbiAgLy8gRGVwcmVjYXRlZCBob29rIGZvciBKU1ggc3ByZWFkLCBkb24ndCB1c2UgdGhpcyBmb3IgYW55dGhpbmcuXG4gIF9fc3ByZWFkOiBfX3NwcmVhZFxufTtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgdmFyIHdhcm5lZEZvckNyZWF0ZUNsYXNzID0gZmFsc2U7XG4gIGlmIChjYW5EZWZpbmVQcm9wZXJ0eSkge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShSZWFjdCwgJ1Byb3BUeXBlcycsIHtcbiAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICBsb3dQcmlvcml0eVdhcm5pbmcoZGlkV2FyblByb3BUeXBlc0RlcHJlY2F0ZWQsICdBY2Nlc3NpbmcgUHJvcFR5cGVzIHZpYSB0aGUgbWFpbiBSZWFjdCBwYWNrYWdlIGlzIGRlcHJlY2F0ZWQsJyArICcgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiAgUmVhY3QgdjE2LjAuJyArICcgVXNlIHRoZSBsYXRlc3QgYXZhaWxhYmxlIHYxNS4qIHByb3AtdHlwZXMgcGFja2FnZSBmcm9tIG5wbSBpbnN0ZWFkLicgKyAnIEZvciBpbmZvIG9uIHVzYWdlLCBjb21wYXRpYmlsaXR5LCBtaWdyYXRpb24gYW5kIG1vcmUsIHNlZSAnICsgJ2h0dHBzOi8vZmIubWUvcHJvcC10eXBlcy1kb2NzJyk7XG4gICAgICAgIGRpZFdhcm5Qcm9wVHlwZXNEZXByZWNhdGVkID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIFJlYWN0UHJvcFR5cGVzO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFJlYWN0LCAnY3JlYXRlQ2xhc3MnLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbG93UHJpb3JpdHlXYXJuaW5nKHdhcm5lZEZvckNyZWF0ZUNsYXNzLCAnQWNjZXNzaW5nIGNyZWF0ZUNsYXNzIHZpYSB0aGUgbWFpbiBSZWFjdCBwYWNrYWdlIGlzIGRlcHJlY2F0ZWQsJyArICcgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBSZWFjdCB2MTYuMC4nICsgXCIgVXNlIGEgcGxhaW4gSmF2YVNjcmlwdCBjbGFzcyBpbnN0ZWFkLiBJZiB5b3UncmUgbm90IHlldCBcIiArICdyZWFkeSB0byBtaWdyYXRlLCBjcmVhdGUtcmVhY3QtY2xhc3MgdjE1LiogaXMgYXZhaWxhYmxlICcgKyAnb24gbnBtIGFzIGEgdGVtcG9yYXJ5LCBkcm9wLWluIHJlcGxhY2VtZW50LiAnICsgJ0ZvciBtb3JlIGluZm8gc2VlIGh0dHBzOi8vZmIubWUvcmVhY3QtY3JlYXRlLWNsYXNzJyk7XG4gICAgICAgIHdhcm5lZEZvckNyZWF0ZUNsYXNzID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZVJlYWN0Q2xhc3M7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvLyBSZWFjdC5ET00gZmFjdG9yaWVzIGFyZSBkZXByZWNhdGVkLiBXcmFwIHRoZXNlIG1ldGhvZHMgc28gdGhhdFxuICAvLyBpbnZvY2F0aW9ucyBvZiB0aGUgUmVhY3QuRE9NIG5hbWVzcGFjZSBhbmQgYWxlcnQgdXNlcnMgdG8gc3dpdGNoXG4gIC8vIHRvIHRoZSBgcmVhY3QtZG9tLWZhY3Rvcmllc2AgcGFja2FnZS5cbiAgUmVhY3QuRE9NID0ge307XG4gIHZhciB3YXJuZWRGb3JGYWN0b3JpZXMgPSBmYWxzZTtcbiAgT2JqZWN0LmtleXMoUmVhY3RET01GYWN0b3JpZXMpLmZvckVhY2goZnVuY3Rpb24gKGZhY3RvcnkpIHtcbiAgICBSZWFjdC5ET01bZmFjdG9yeV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoIXdhcm5lZEZvckZhY3Rvcmllcykge1xuICAgICAgICBsb3dQcmlvcml0eVdhcm5pbmcoZmFsc2UsICdBY2Nlc3NpbmcgZmFjdG9yaWVzIGxpa2UgUmVhY3QuRE9NLiVzIGhhcyBiZWVuIGRlcHJlY2F0ZWQgJyArICdhbmQgd2lsbCBiZSByZW1vdmVkIGluIHYxNi4wKy4gVXNlIHRoZSAnICsgJ3JlYWN0LWRvbS1mYWN0b3JpZXMgcGFja2FnZSBpbnN0ZWFkLiAnICsgJyBWZXJzaW9uIDEuMCBwcm92aWRlcyBhIGRyb3AtaW4gcmVwbGFjZW1lbnQuJyArICcgRm9yIG1vcmUgaW5mbywgc2VlIGh0dHBzOi8vZmIubWUvcmVhY3QtZG9tLWZhY3RvcmllcycsIGZhY3RvcnkpO1xuICAgICAgICB3YXJuZWRGb3JGYWN0b3JpZXMgPSB0cnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFJlYWN0RE9NRmFjdG9yaWVzW2ZhY3RvcnldLmFwcGx5KFJlYWN0RE9NRmFjdG9yaWVzLCBhcmd1bWVudHMpO1xuICAgIH07XG4gIH0pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0O1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QvbGliL1JlYWN0LmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIFxuICovXG4ndXNlIHN0cmljdCc7XG5cbi8qKlxuICogV0FSTklORzogRE8gTk9UIG1hbnVhbGx5IHJlcXVpcmUgdGhpcyBtb2R1bGUuXG4gKiBUaGlzIGlzIGEgcmVwbGFjZW1lbnQgZm9yIGBpbnZhcmlhbnQoLi4uKWAgdXNlZCBieSB0aGUgZXJyb3IgY29kZSBzeXN0ZW1cbiAqIGFuZCB3aWxsIF9vbmx5XyBiZSByZXF1aXJlZCBieSB0aGUgY29ycmVzcG9uZGluZyBiYWJlbCBwYXNzLlxuICogSXQgYWx3YXlzIHRocm93cy5cbiAqL1xuXG5mdW5jdGlvbiByZWFjdFByb2RJbnZhcmlhbnQoY29kZSkge1xuICB2YXIgYXJnQ291bnQgPSBhcmd1bWVudHMubGVuZ3RoIC0gMTtcblxuICB2YXIgbWVzc2FnZSA9ICdNaW5pZmllZCBSZWFjdCBlcnJvciAjJyArIGNvZGUgKyAnOyB2aXNpdCAnICsgJ2h0dHA6Ly9mYWNlYm9vay5naXRodWIuaW8vcmVhY3QvZG9jcy9lcnJvci1kZWNvZGVyLmh0bWw/aW52YXJpYW50PScgKyBjb2RlO1xuXG4gIGZvciAodmFyIGFyZ0lkeCA9IDA7IGFyZ0lkeCA8IGFyZ0NvdW50OyBhcmdJZHgrKykge1xuICAgIG1lc3NhZ2UgKz0gJyZhcmdzW109JyArIGVuY29kZVVSSUNvbXBvbmVudChhcmd1bWVudHNbYXJnSWR4ICsgMV0pO1xuICB9XG5cbiAgbWVzc2FnZSArPSAnIGZvciB0aGUgZnVsbCBtZXNzYWdlIG9yIHVzZSB0aGUgbm9uLW1pbmlmaWVkIGRldiBlbnZpcm9ubWVudCcgKyAnIGZvciBmdWxsIGVycm9ycyBhbmQgYWRkaXRpb25hbCBoZWxwZnVsIHdhcm5pbmdzLic7XG5cbiAgdmFyIGVycm9yID0gbmV3IEVycm9yKG1lc3NhZ2UpO1xuICBlcnJvci5uYW1lID0gJ0ludmFyaWFudCBWaW9sYXRpb24nO1xuICBlcnJvci5mcmFtZXNUb1BvcCA9IDE7IC8vIHdlIGRvbid0IGNhcmUgYWJvdXQgcmVhY3RQcm9kSW52YXJpYW50J3Mgb3duIGZyYW1lXG5cbiAgdGhyb3cgZXJyb3I7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcmVhY3RQcm9kSW52YXJpYW50O1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QvbGliL3JlYWN0UHJvZEludmFyaWFudC5qcyIsIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbnZhciBhZGRMZWFkaW5nU2xhc2ggPSBleHBvcnRzLmFkZExlYWRpbmdTbGFzaCA9IGZ1bmN0aW9uIGFkZExlYWRpbmdTbGFzaChwYXRoKSB7XG4gIHJldHVybiBwYXRoLmNoYXJBdCgwKSA9PT0gJy8nID8gcGF0aCA6ICcvJyArIHBhdGg7XG59O1xuXG52YXIgc3RyaXBMZWFkaW5nU2xhc2ggPSBleHBvcnRzLnN0cmlwTGVhZGluZ1NsYXNoID0gZnVuY3Rpb24gc3RyaXBMZWFkaW5nU2xhc2gocGF0aCkge1xuICByZXR1cm4gcGF0aC5jaGFyQXQoMCkgPT09ICcvJyA/IHBhdGguc3Vic3RyKDEpIDogcGF0aDtcbn07XG5cbnZhciBoYXNCYXNlbmFtZSA9IGV4cG9ydHMuaGFzQmFzZW5hbWUgPSBmdW5jdGlvbiBoYXNCYXNlbmFtZShwYXRoLCBwcmVmaXgpIHtcbiAgcmV0dXJuIG5ldyBSZWdFeHAoJ14nICsgcHJlZml4ICsgJyhcXFxcL3xcXFxcP3wjfCQpJywgJ2knKS50ZXN0KHBhdGgpO1xufTtcblxudmFyIHN0cmlwQmFzZW5hbWUgPSBleHBvcnRzLnN0cmlwQmFzZW5hbWUgPSBmdW5jdGlvbiBzdHJpcEJhc2VuYW1lKHBhdGgsIHByZWZpeCkge1xuICByZXR1cm4gaGFzQmFzZW5hbWUocGF0aCwgcHJlZml4KSA/IHBhdGguc3Vic3RyKHByZWZpeC5sZW5ndGgpIDogcGF0aDtcbn07XG5cbnZhciBzdHJpcFRyYWlsaW5nU2xhc2ggPSBleHBvcnRzLnN0cmlwVHJhaWxpbmdTbGFzaCA9IGZ1bmN0aW9uIHN0cmlwVHJhaWxpbmdTbGFzaChwYXRoKSB7XG4gIHJldHVybiBwYXRoLmNoYXJBdChwYXRoLmxlbmd0aCAtIDEpID09PSAnLycgPyBwYXRoLnNsaWNlKDAsIC0xKSA6IHBhdGg7XG59O1xuXG52YXIgcGFyc2VQYXRoID0gZXhwb3J0cy5wYXJzZVBhdGggPSBmdW5jdGlvbiBwYXJzZVBhdGgocGF0aCkge1xuICB2YXIgcGF0aG5hbWUgPSBwYXRoIHx8ICcvJztcbiAgdmFyIHNlYXJjaCA9ICcnO1xuICB2YXIgaGFzaCA9ICcnO1xuXG4gIHZhciBoYXNoSW5kZXggPSBwYXRobmFtZS5pbmRleE9mKCcjJyk7XG4gIGlmIChoYXNoSW5kZXggIT09IC0xKSB7XG4gICAgaGFzaCA9IHBhdGhuYW1lLnN1YnN0cihoYXNoSW5kZXgpO1xuICAgIHBhdGhuYW1lID0gcGF0aG5hbWUuc3Vic3RyKDAsIGhhc2hJbmRleCk7XG4gIH1cblxuICB2YXIgc2VhcmNoSW5kZXggPSBwYXRobmFtZS5pbmRleE9mKCc/Jyk7XG4gIGlmIChzZWFyY2hJbmRleCAhPT0gLTEpIHtcbiAgICBzZWFyY2ggPSBwYXRobmFtZS5zdWJzdHIoc2VhcmNoSW5kZXgpO1xuICAgIHBhdGhuYW1lID0gcGF0aG5hbWUuc3Vic3RyKDAsIHNlYXJjaEluZGV4KTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgcGF0aG5hbWU6IHBhdGhuYW1lLFxuICAgIHNlYXJjaDogc2VhcmNoID09PSAnPycgPyAnJyA6IHNlYXJjaCxcbiAgICBoYXNoOiBoYXNoID09PSAnIycgPyAnJyA6IGhhc2hcbiAgfTtcbn07XG5cbnZhciBjcmVhdGVQYXRoID0gZXhwb3J0cy5jcmVhdGVQYXRoID0gZnVuY3Rpb24gY3JlYXRlUGF0aChsb2NhdGlvbikge1xuICB2YXIgcGF0aG5hbWUgPSBsb2NhdGlvbi5wYXRobmFtZSxcbiAgICAgIHNlYXJjaCA9IGxvY2F0aW9uLnNlYXJjaCxcbiAgICAgIGhhc2ggPSBsb2NhdGlvbi5oYXNoO1xuXG5cbiAgdmFyIHBhdGggPSBwYXRobmFtZSB8fCAnLyc7XG5cbiAgaWYgKHNlYXJjaCAmJiBzZWFyY2ggIT09ICc/JykgcGF0aCArPSBzZWFyY2guY2hhckF0KDApID09PSAnPycgPyBzZWFyY2ggOiAnPycgKyBzZWFyY2g7XG5cbiAgaWYgKGhhc2ggJiYgaGFzaCAhPT0gJyMnKSBwYXRoICs9IGhhc2guY2hhckF0KDApID09PSAnIycgPyBoYXNoIDogJyMnICsgaGFzaDtcblxuICByZXR1cm4gcGF0aDtcbn07XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9oaXN0b3J5L1BhdGhVdGlscy5qcyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBVc2UgaW52YXJpYW50KCkgdG8gYXNzZXJ0IHN0YXRlIHdoaWNoIHlvdXIgcHJvZ3JhbSBhc3N1bWVzIHRvIGJlIHRydWUuXG4gKlxuICogUHJvdmlkZSBzcHJpbnRmLXN0eWxlIGZvcm1hdCAob25seSAlcyBpcyBzdXBwb3J0ZWQpIGFuZCBhcmd1bWVudHNcbiAqIHRvIHByb3ZpZGUgaW5mb3JtYXRpb24gYWJvdXQgd2hhdCBicm9rZSBhbmQgd2hhdCB5b3Ugd2VyZVxuICogZXhwZWN0aW5nLlxuICpcbiAqIFRoZSBpbnZhcmlhbnQgbWVzc2FnZSB3aWxsIGJlIHN0cmlwcGVkIGluIHByb2R1Y3Rpb24sIGJ1dCB0aGUgaW52YXJpYW50XG4gKiB3aWxsIHJlbWFpbiB0byBlbnN1cmUgbG9naWMgZG9lcyBub3QgZGlmZmVyIGluIHByb2R1Y3Rpb24uXG4gKi9cblxudmFyIGludmFyaWFudCA9IGZ1bmN0aW9uKGNvbmRpdGlvbiwgZm9ybWF0LCBhLCBiLCBjLCBkLCBlLCBmKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgaWYgKGZvcm1hdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFyaWFudCByZXF1aXJlcyBhbiBlcnJvciBtZXNzYWdlIGFyZ3VtZW50Jyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKCFjb25kaXRpb24pIHtcbiAgICB2YXIgZXJyb3I7XG4gICAgaWYgKGZvcm1hdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBlcnJvciA9IG5ldyBFcnJvcihcbiAgICAgICAgJ01pbmlmaWVkIGV4Y2VwdGlvbiBvY2N1cnJlZDsgdXNlIHRoZSBub24tbWluaWZpZWQgZGV2IGVudmlyb25tZW50ICcgK1xuICAgICAgICAnZm9yIHRoZSBmdWxsIGVycm9yIG1lc3NhZ2UgYW5kIGFkZGl0aW9uYWwgaGVscGZ1bCB3YXJuaW5ncy4nXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgYXJncyA9IFthLCBiLCBjLCBkLCBlLCBmXTtcbiAgICAgIHZhciBhcmdJbmRleCA9IDA7XG4gICAgICBlcnJvciA9IG5ldyBFcnJvcihcbiAgICAgICAgZm9ybWF0LnJlcGxhY2UoLyVzL2csIGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJnc1thcmdJbmRleCsrXTsgfSlcbiAgICAgICk7XG4gICAgICBlcnJvci5uYW1lID0gJ0ludmFyaWFudCBWaW9sYXRpb24nO1xuICAgIH1cblxuICAgIGVycm9yLmZyYW1lc1RvUG9wID0gMTsgLy8gd2UgZG9uJ3QgY2FyZSBhYm91dCBpbnZhcmlhbnQncyBvd24gZnJhbWVcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBpbnZhcmlhbnQ7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L2ludmFyaWFudC9icm93c2VyLmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIF9wcm9kSW52YXJpYW50ID0gcmVxdWlyZSgnLi9yZWFjdFByb2RJbnZhcmlhbnQnKTtcblxudmFyIEV2ZW50UGx1Z2luUmVnaXN0cnkgPSByZXF1aXJlKCcuL0V2ZW50UGx1Z2luUmVnaXN0cnknKTtcbnZhciBFdmVudFBsdWdpblV0aWxzID0gcmVxdWlyZSgnLi9FdmVudFBsdWdpblV0aWxzJyk7XG52YXIgUmVhY3RFcnJvclV0aWxzID0gcmVxdWlyZSgnLi9SZWFjdEVycm9yVXRpbHMnKTtcblxudmFyIGFjY3VtdWxhdGVJbnRvID0gcmVxdWlyZSgnLi9hY2N1bXVsYXRlSW50bycpO1xudmFyIGZvckVhY2hBY2N1bXVsYXRlZCA9IHJlcXVpcmUoJy4vZm9yRWFjaEFjY3VtdWxhdGVkJyk7XG52YXIgaW52YXJpYW50ID0gcmVxdWlyZSgnZmJqcy9saWIvaW52YXJpYW50Jyk7XG5cbi8qKlxuICogSW50ZXJuYWwgc3RvcmUgZm9yIGV2ZW50IGxpc3RlbmVyc1xuICovXG52YXIgbGlzdGVuZXJCYW5rID0ge307XG5cbi8qKlxuICogSW50ZXJuYWwgcXVldWUgb2YgZXZlbnRzIHRoYXQgaGF2ZSBhY2N1bXVsYXRlZCB0aGVpciBkaXNwYXRjaGVzIGFuZCBhcmVcbiAqIHdhaXRpbmcgdG8gaGF2ZSB0aGVpciBkaXNwYXRjaGVzIGV4ZWN1dGVkLlxuICovXG52YXIgZXZlbnRRdWV1ZSA9IG51bGw7XG5cbi8qKlxuICogRGlzcGF0Y2hlcyBhbiBldmVudCBhbmQgcmVsZWFzZXMgaXQgYmFjayBpbnRvIHRoZSBwb29sLCB1bmxlc3MgcGVyc2lzdGVudC5cbiAqXG4gKiBAcGFyYW0gez9vYmplY3R9IGV2ZW50IFN5bnRoZXRpYyBldmVudCB0byBiZSBkaXNwYXRjaGVkLlxuICogQHBhcmFtIHtib29sZWFufSBzaW11bGF0ZWQgSWYgdGhlIGV2ZW50IGlzIHNpbXVsYXRlZCAoY2hhbmdlcyBleG4gYmVoYXZpb3IpXG4gKiBAcHJpdmF0ZVxuICovXG52YXIgZXhlY3V0ZURpc3BhdGNoZXNBbmRSZWxlYXNlID0gZnVuY3Rpb24gKGV2ZW50LCBzaW11bGF0ZWQpIHtcbiAgaWYgKGV2ZW50KSB7XG4gICAgRXZlbnRQbHVnaW5VdGlscy5leGVjdXRlRGlzcGF0Y2hlc0luT3JkZXIoZXZlbnQsIHNpbXVsYXRlZCk7XG5cbiAgICBpZiAoIWV2ZW50LmlzUGVyc2lzdGVudCgpKSB7XG4gICAgICBldmVudC5jb25zdHJ1Y3Rvci5yZWxlYXNlKGV2ZW50KTtcbiAgICB9XG4gIH1cbn07XG52YXIgZXhlY3V0ZURpc3BhdGNoZXNBbmRSZWxlYXNlU2ltdWxhdGVkID0gZnVuY3Rpb24gKGUpIHtcbiAgcmV0dXJuIGV4ZWN1dGVEaXNwYXRjaGVzQW5kUmVsZWFzZShlLCB0cnVlKTtcbn07XG52YXIgZXhlY3V0ZURpc3BhdGNoZXNBbmRSZWxlYXNlVG9wTGV2ZWwgPSBmdW5jdGlvbiAoZSkge1xuICByZXR1cm4gZXhlY3V0ZURpc3BhdGNoZXNBbmRSZWxlYXNlKGUsIGZhbHNlKTtcbn07XG5cbnZhciBnZXREaWN0aW9uYXJ5S2V5ID0gZnVuY3Rpb24gKGluc3QpIHtcbiAgLy8gUHJldmVudHMgVjggcGVyZm9ybWFuY2UgaXNzdWU6XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9wdWxsLzcyMzJcbiAgcmV0dXJuICcuJyArIGluc3QuX3Jvb3ROb2RlSUQ7XG59O1xuXG5mdW5jdGlvbiBpc0ludGVyYWN0aXZlKHRhZykge1xuICByZXR1cm4gdGFnID09PSAnYnV0dG9uJyB8fCB0YWcgPT09ICdpbnB1dCcgfHwgdGFnID09PSAnc2VsZWN0JyB8fCB0YWcgPT09ICd0ZXh0YXJlYSc7XG59XG5cbmZ1bmN0aW9uIHNob3VsZFByZXZlbnRNb3VzZUV2ZW50KG5hbWUsIHR5cGUsIHByb3BzKSB7XG4gIHN3aXRjaCAobmFtZSkge1xuICAgIGNhc2UgJ29uQ2xpY2snOlxuICAgIGNhc2UgJ29uQ2xpY2tDYXB0dXJlJzpcbiAgICBjYXNlICdvbkRvdWJsZUNsaWNrJzpcbiAgICBjYXNlICdvbkRvdWJsZUNsaWNrQ2FwdHVyZSc6XG4gICAgY2FzZSAnb25Nb3VzZURvd24nOlxuICAgIGNhc2UgJ29uTW91c2VEb3duQ2FwdHVyZSc6XG4gICAgY2FzZSAnb25Nb3VzZU1vdmUnOlxuICAgIGNhc2UgJ29uTW91c2VNb3ZlQ2FwdHVyZSc6XG4gICAgY2FzZSAnb25Nb3VzZVVwJzpcbiAgICBjYXNlICdvbk1vdXNlVXBDYXB0dXJlJzpcbiAgICAgIHJldHVybiAhIShwcm9wcy5kaXNhYmxlZCAmJiBpc0ludGVyYWN0aXZlKHR5cGUpKTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8qKlxuICogVGhpcyBpcyBhIHVuaWZpZWQgaW50ZXJmYWNlIGZvciBldmVudCBwbHVnaW5zIHRvIGJlIGluc3RhbGxlZCBhbmQgY29uZmlndXJlZC5cbiAqXG4gKiBFdmVudCBwbHVnaW5zIGNhbiBpbXBsZW1lbnQgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICpcbiAqICAgYGV4dHJhY3RFdmVudHNgIHtmdW5jdGlvbihzdHJpbmcsIERPTUV2ZW50VGFyZ2V0LCBzdHJpbmcsIG9iamVjdCk6ICp9XG4gKiAgICAgUmVxdWlyZWQuIFdoZW4gYSB0b3AtbGV2ZWwgZXZlbnQgaXMgZmlyZWQsIHRoaXMgbWV0aG9kIGlzIGV4cGVjdGVkIHRvXG4gKiAgICAgZXh0cmFjdCBzeW50aGV0aWMgZXZlbnRzIHRoYXQgd2lsbCBpbiB0dXJuIGJlIHF1ZXVlZCBhbmQgZGlzcGF0Y2hlZC5cbiAqXG4gKiAgIGBldmVudFR5cGVzYCB7b2JqZWN0fVxuICogICAgIE9wdGlvbmFsLCBwbHVnaW5zIHRoYXQgZmlyZSBldmVudHMgbXVzdCBwdWJsaXNoIGEgbWFwcGluZyBvZiByZWdpc3RyYXRpb25cbiAqICAgICBuYW1lcyB0aGF0IGFyZSB1c2VkIHRvIHJlZ2lzdGVyIGxpc3RlbmVycy4gVmFsdWVzIG9mIHRoaXMgbWFwcGluZyBtdXN0XG4gKiAgICAgYmUgb2JqZWN0cyB0aGF0IGNvbnRhaW4gYHJlZ2lzdHJhdGlvbk5hbWVgIG9yIGBwaGFzZWRSZWdpc3RyYXRpb25OYW1lc2AuXG4gKlxuICogICBgZXhlY3V0ZURpc3BhdGNoYCB7ZnVuY3Rpb24ob2JqZWN0LCBmdW5jdGlvbiwgc3RyaW5nKX1cbiAqICAgICBPcHRpb25hbCwgYWxsb3dzIHBsdWdpbnMgdG8gb3ZlcnJpZGUgaG93IGFuIGV2ZW50IGdldHMgZGlzcGF0Y2hlZC4gQnlcbiAqICAgICBkZWZhdWx0LCB0aGUgbGlzdGVuZXIgaXMgc2ltcGx5IGludm9rZWQuXG4gKlxuICogRWFjaCBwbHVnaW4gdGhhdCBpcyBpbmplY3RlZCBpbnRvIGBFdmVudHNQbHVnaW5IdWJgIGlzIGltbWVkaWF0ZWx5IG9wZXJhYmxlLlxuICpcbiAqIEBwdWJsaWNcbiAqL1xudmFyIEV2ZW50UGx1Z2luSHViID0ge1xuICAvKipcbiAgICogTWV0aG9kcyBmb3IgaW5qZWN0aW5nIGRlcGVuZGVuY2llcy5cbiAgICovXG4gIGluamVjdGlvbjoge1xuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7YXJyYXl9IEluamVjdGVkRXZlbnRQbHVnaW5PcmRlclxuICAgICAqIEBwdWJsaWNcbiAgICAgKi9cbiAgICBpbmplY3RFdmVudFBsdWdpbk9yZGVyOiBFdmVudFBsdWdpblJlZ2lzdHJ5LmluamVjdEV2ZW50UGx1Z2luT3JkZXIsXG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gaW5qZWN0ZWROYW1lc1RvUGx1Z2lucyBNYXAgZnJvbSBuYW1lcyB0byBwbHVnaW4gbW9kdWxlcy5cbiAgICAgKi9cbiAgICBpbmplY3RFdmVudFBsdWdpbnNCeU5hbWU6IEV2ZW50UGx1Z2luUmVnaXN0cnkuaW5qZWN0RXZlbnRQbHVnaW5zQnlOYW1lXG4gIH0sXG5cbiAgLyoqXG4gICAqIFN0b3JlcyBgbGlzdGVuZXJgIGF0IGBsaXN0ZW5lckJhbmtbcmVnaXN0cmF0aW9uTmFtZV1ba2V5XWAuIElzIGlkZW1wb3RlbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBpbnN0IFRoZSBpbnN0YW5jZSwgd2hpY2ggaXMgdGhlIHNvdXJjZSBvZiBldmVudHMuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByZWdpc3RyYXRpb25OYW1lIE5hbWUgb2YgbGlzdGVuZXIgKGUuZy4gYG9uQ2xpY2tgKS5cbiAgICogQHBhcmFtIHtmdW5jdGlvbn0gbGlzdGVuZXIgVGhlIGNhbGxiYWNrIHRvIHN0b3JlLlxuICAgKi9cbiAgcHV0TGlzdGVuZXI6IGZ1bmN0aW9uIChpbnN0LCByZWdpc3RyYXRpb25OYW1lLCBsaXN0ZW5lcikge1xuICAgICEodHlwZW9mIGxpc3RlbmVyID09PSAnZnVuY3Rpb24nKSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICdFeHBlY3RlZCAlcyBsaXN0ZW5lciB0byBiZSBhIGZ1bmN0aW9uLCBpbnN0ZWFkIGdvdCB0eXBlICVzJywgcmVnaXN0cmF0aW9uTmFtZSwgdHlwZW9mIGxpc3RlbmVyKSA6IF9wcm9kSW52YXJpYW50KCc5NCcsIHJlZ2lzdHJhdGlvbk5hbWUsIHR5cGVvZiBsaXN0ZW5lcikgOiB2b2lkIDA7XG5cbiAgICB2YXIga2V5ID0gZ2V0RGljdGlvbmFyeUtleShpbnN0KTtcbiAgICB2YXIgYmFua0ZvclJlZ2lzdHJhdGlvbk5hbWUgPSBsaXN0ZW5lckJhbmtbcmVnaXN0cmF0aW9uTmFtZV0gfHwgKGxpc3RlbmVyQmFua1tyZWdpc3RyYXRpb25OYW1lXSA9IHt9KTtcbiAgICBiYW5rRm9yUmVnaXN0cmF0aW9uTmFtZVtrZXldID0gbGlzdGVuZXI7XG5cbiAgICB2YXIgUGx1Z2luTW9kdWxlID0gRXZlbnRQbHVnaW5SZWdpc3RyeS5yZWdpc3RyYXRpb25OYW1lTW9kdWxlc1tyZWdpc3RyYXRpb25OYW1lXTtcbiAgICBpZiAoUGx1Z2luTW9kdWxlICYmIFBsdWdpbk1vZHVsZS5kaWRQdXRMaXN0ZW5lcikge1xuICAgICAgUGx1Z2luTW9kdWxlLmRpZFB1dExpc3RlbmVyKGluc3QsIHJlZ2lzdHJhdGlvbk5hbWUsIGxpc3RlbmVyKTtcbiAgICB9XG4gIH0sXG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBpbnN0IFRoZSBpbnN0YW5jZSwgd2hpY2ggaXMgdGhlIHNvdXJjZSBvZiBldmVudHMuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByZWdpc3RyYXRpb25OYW1lIE5hbWUgb2YgbGlzdGVuZXIgKGUuZy4gYG9uQ2xpY2tgKS5cbiAgICogQHJldHVybiB7P2Z1bmN0aW9ufSBUaGUgc3RvcmVkIGNhbGxiYWNrLlxuICAgKi9cbiAgZ2V0TGlzdGVuZXI6IGZ1bmN0aW9uIChpbnN0LCByZWdpc3RyYXRpb25OYW1lKSB7XG4gICAgLy8gVE9ETzogc2hvdWxkUHJldmVudE1vdXNlRXZlbnQgaXMgRE9NLXNwZWNpZmljIGFuZCBkZWZpbml0ZWx5IHNob3VsZCBub3RcbiAgICAvLyBsaXZlIGhlcmU7IG5lZWRzIHRvIGJlIG1vdmVkIHRvIGEgYmV0dGVyIHBsYWNlIHNvb25cbiAgICB2YXIgYmFua0ZvclJlZ2lzdHJhdGlvbk5hbWUgPSBsaXN0ZW5lckJhbmtbcmVnaXN0cmF0aW9uTmFtZV07XG4gICAgaWYgKHNob3VsZFByZXZlbnRNb3VzZUV2ZW50KHJlZ2lzdHJhdGlvbk5hbWUsIGluc3QuX2N1cnJlbnRFbGVtZW50LnR5cGUsIGluc3QuX2N1cnJlbnRFbGVtZW50LnByb3BzKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHZhciBrZXkgPSBnZXREaWN0aW9uYXJ5S2V5KGluc3QpO1xuICAgIHJldHVybiBiYW5rRm9yUmVnaXN0cmF0aW9uTmFtZSAmJiBiYW5rRm9yUmVnaXN0cmF0aW9uTmFtZVtrZXldO1xuICB9LFxuXG4gIC8qKlxuICAgKiBEZWxldGVzIGEgbGlzdGVuZXIgZnJvbSB0aGUgcmVnaXN0cmF0aW9uIGJhbmsuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBpbnN0IFRoZSBpbnN0YW5jZSwgd2hpY2ggaXMgdGhlIHNvdXJjZSBvZiBldmVudHMuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByZWdpc3RyYXRpb25OYW1lIE5hbWUgb2YgbGlzdGVuZXIgKGUuZy4gYG9uQ2xpY2tgKS5cbiAgICovXG4gIGRlbGV0ZUxpc3RlbmVyOiBmdW5jdGlvbiAoaW5zdCwgcmVnaXN0cmF0aW9uTmFtZSkge1xuICAgIHZhciBQbHVnaW5Nb2R1bGUgPSBFdmVudFBsdWdpblJlZ2lzdHJ5LnJlZ2lzdHJhdGlvbk5hbWVNb2R1bGVzW3JlZ2lzdHJhdGlvbk5hbWVdO1xuICAgIGlmIChQbHVnaW5Nb2R1bGUgJiYgUGx1Z2luTW9kdWxlLndpbGxEZWxldGVMaXN0ZW5lcikge1xuICAgICAgUGx1Z2luTW9kdWxlLndpbGxEZWxldGVMaXN0ZW5lcihpbnN0LCByZWdpc3RyYXRpb25OYW1lKTtcbiAgICB9XG5cbiAgICB2YXIgYmFua0ZvclJlZ2lzdHJhdGlvbk5hbWUgPSBsaXN0ZW5lckJhbmtbcmVnaXN0cmF0aW9uTmFtZV07XG4gICAgLy8gVE9ETzogVGhpcyBzaG91bGQgbmV2ZXIgYmUgbnVsbCAtLSB3aGVuIGlzIGl0P1xuICAgIGlmIChiYW5rRm9yUmVnaXN0cmF0aW9uTmFtZSkge1xuICAgICAgdmFyIGtleSA9IGdldERpY3Rpb25hcnlLZXkoaW5zdCk7XG4gICAgICBkZWxldGUgYmFua0ZvclJlZ2lzdHJhdGlvbk5hbWVba2V5XTtcbiAgICB9XG4gIH0sXG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgYWxsIGxpc3RlbmVycyBmb3IgdGhlIERPTSBlbGVtZW50IHdpdGggdGhlIHN1cHBsaWVkIElELlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gaW5zdCBUaGUgaW5zdGFuY2UsIHdoaWNoIGlzIHRoZSBzb3VyY2Ugb2YgZXZlbnRzLlxuICAgKi9cbiAgZGVsZXRlQWxsTGlzdGVuZXJzOiBmdW5jdGlvbiAoaW5zdCkge1xuICAgIHZhciBrZXkgPSBnZXREaWN0aW9uYXJ5S2V5KGluc3QpO1xuICAgIGZvciAodmFyIHJlZ2lzdHJhdGlvbk5hbWUgaW4gbGlzdGVuZXJCYW5rKSB7XG4gICAgICBpZiAoIWxpc3RlbmVyQmFuay5oYXNPd25Qcm9wZXJ0eShyZWdpc3RyYXRpb25OYW1lKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFsaXN0ZW5lckJhbmtbcmVnaXN0cmF0aW9uTmFtZV1ba2V5XSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgdmFyIFBsdWdpbk1vZHVsZSA9IEV2ZW50UGx1Z2luUmVnaXN0cnkucmVnaXN0cmF0aW9uTmFtZU1vZHVsZXNbcmVnaXN0cmF0aW9uTmFtZV07XG4gICAgICBpZiAoUGx1Z2luTW9kdWxlICYmIFBsdWdpbk1vZHVsZS53aWxsRGVsZXRlTGlzdGVuZXIpIHtcbiAgICAgICAgUGx1Z2luTW9kdWxlLndpbGxEZWxldGVMaXN0ZW5lcihpbnN0LCByZWdpc3RyYXRpb25OYW1lKTtcbiAgICAgIH1cblxuICAgICAgZGVsZXRlIGxpc3RlbmVyQmFua1tyZWdpc3RyYXRpb25OYW1lXVtrZXldO1xuICAgIH1cbiAgfSxcblxuICAvKipcbiAgICogQWxsb3dzIHJlZ2lzdGVyZWQgcGx1Z2lucyBhbiBvcHBvcnR1bml0eSB0byBleHRyYWN0IGV2ZW50cyBmcm9tIHRvcC1sZXZlbFxuICAgKiBuYXRpdmUgYnJvd3NlciBldmVudHMuXG4gICAqXG4gICAqIEByZXR1cm4geyp9IEFuIGFjY3VtdWxhdGlvbiBvZiBzeW50aGV0aWMgZXZlbnRzLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGV4dHJhY3RFdmVudHM6IGZ1bmN0aW9uICh0b3BMZXZlbFR5cGUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCkge1xuICAgIHZhciBldmVudHM7XG4gICAgdmFyIHBsdWdpbnMgPSBFdmVudFBsdWdpblJlZ2lzdHJ5LnBsdWdpbnM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwbHVnaW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAvLyBOb3QgZXZlcnkgcGx1Z2luIGluIHRoZSBvcmRlcmluZyBtYXkgYmUgbG9hZGVkIGF0IHJ1bnRpbWUuXG4gICAgICB2YXIgcG9zc2libGVQbHVnaW4gPSBwbHVnaW5zW2ldO1xuICAgICAgaWYgKHBvc3NpYmxlUGx1Z2luKSB7XG4gICAgICAgIHZhciBleHRyYWN0ZWRFdmVudHMgPSBwb3NzaWJsZVBsdWdpbi5leHRyYWN0RXZlbnRzKHRvcExldmVsVHlwZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KTtcbiAgICAgICAgaWYgKGV4dHJhY3RlZEV2ZW50cykge1xuICAgICAgICAgIGV2ZW50cyA9IGFjY3VtdWxhdGVJbnRvKGV2ZW50cywgZXh0cmFjdGVkRXZlbnRzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZXZlbnRzO1xuICB9LFxuXG4gIC8qKlxuICAgKiBFbnF1ZXVlcyBhIHN5bnRoZXRpYyBldmVudCB0aGF0IHNob3VsZCBiZSBkaXNwYXRjaGVkIHdoZW5cbiAgICogYHByb2Nlc3NFdmVudFF1ZXVlYCBpcyBpbnZva2VkLlxuICAgKlxuICAgKiBAcGFyYW0geyp9IGV2ZW50cyBBbiBhY2N1bXVsYXRpb24gb2Ygc3ludGhldGljIGV2ZW50cy5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBlbnF1ZXVlRXZlbnRzOiBmdW5jdGlvbiAoZXZlbnRzKSB7XG4gICAgaWYgKGV2ZW50cykge1xuICAgICAgZXZlbnRRdWV1ZSA9IGFjY3VtdWxhdGVJbnRvKGV2ZW50UXVldWUsIGV2ZW50cyk7XG4gICAgfVxuICB9LFxuXG4gIC8qKlxuICAgKiBEaXNwYXRjaGVzIGFsbCBzeW50aGV0aWMgZXZlbnRzIG9uIHRoZSBldmVudCBxdWV1ZS5cbiAgICpcbiAgICogQGludGVybmFsXG4gICAqL1xuICBwcm9jZXNzRXZlbnRRdWV1ZTogZnVuY3Rpb24gKHNpbXVsYXRlZCkge1xuICAgIC8vIFNldCBgZXZlbnRRdWV1ZWAgdG8gbnVsbCBiZWZvcmUgcHJvY2Vzc2luZyBpdCBzbyB0aGF0IHdlIGNhbiB0ZWxsIGlmIG1vcmVcbiAgICAvLyBldmVudHMgZ2V0IGVucXVldWVkIHdoaWxlIHByb2Nlc3NpbmcuXG4gICAgdmFyIHByb2Nlc3NpbmdFdmVudFF1ZXVlID0gZXZlbnRRdWV1ZTtcbiAgICBldmVudFF1ZXVlID0gbnVsbDtcbiAgICBpZiAoc2ltdWxhdGVkKSB7XG4gICAgICBmb3JFYWNoQWNjdW11bGF0ZWQocHJvY2Vzc2luZ0V2ZW50UXVldWUsIGV4ZWN1dGVEaXNwYXRjaGVzQW5kUmVsZWFzZVNpbXVsYXRlZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvckVhY2hBY2N1bXVsYXRlZChwcm9jZXNzaW5nRXZlbnRRdWV1ZSwgZXhlY3V0ZURpc3BhdGNoZXNBbmRSZWxlYXNlVG9wTGV2ZWwpO1xuICAgIH1cbiAgICAhIWV2ZW50UXVldWUgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAncHJvY2Vzc0V2ZW50UXVldWUoKTogQWRkaXRpb25hbCBldmVudHMgd2VyZSBlbnF1ZXVlZCB3aGlsZSBwcm9jZXNzaW5nIGFuIGV2ZW50IHF1ZXVlLiBTdXBwb3J0IGZvciB0aGlzIGhhcyBub3QgeWV0IGJlZW4gaW1wbGVtZW50ZWQuJykgOiBfcHJvZEludmFyaWFudCgnOTUnKSA6IHZvaWQgMDtcbiAgICAvLyBUaGlzIHdvdWxkIGJlIGEgZ29vZCB0aW1lIHRvIHJldGhyb3cgaWYgYW55IG9mIHRoZSBldmVudCBoYW5kbGVycyB0aHJldy5cbiAgICBSZWFjdEVycm9yVXRpbHMucmV0aHJvd0NhdWdodEVycm9yKCk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFRoZXNlIGFyZSBuZWVkZWQgZm9yIHRlc3RzIG9ubHkuIERvIG5vdCB1c2UhXG4gICAqL1xuICBfX3B1cmdlOiBmdW5jdGlvbiAoKSB7XG4gICAgbGlzdGVuZXJCYW5rID0ge307XG4gIH0sXG5cbiAgX19nZXRMaXN0ZW5lckJhbms6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gbGlzdGVuZXJCYW5rO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEV2ZW50UGx1Z2luSHViO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QtZG9tL2xpYi9FdmVudFBsdWdpbkh1Yi5qcyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBFdmVudFBsdWdpbkh1YiA9IHJlcXVpcmUoJy4vRXZlbnRQbHVnaW5IdWInKTtcbnZhciBFdmVudFBsdWdpblV0aWxzID0gcmVxdWlyZSgnLi9FdmVudFBsdWdpblV0aWxzJyk7XG5cbnZhciBhY2N1bXVsYXRlSW50byA9IHJlcXVpcmUoJy4vYWNjdW11bGF0ZUludG8nKTtcbnZhciBmb3JFYWNoQWNjdW11bGF0ZWQgPSByZXF1aXJlKCcuL2ZvckVhY2hBY2N1bXVsYXRlZCcpO1xudmFyIHdhcm5pbmcgPSByZXF1aXJlKCdmYmpzL2xpYi93YXJuaW5nJyk7XG5cbnZhciBnZXRMaXN0ZW5lciA9IEV2ZW50UGx1Z2luSHViLmdldExpc3RlbmVyO1xuXG4vKipcbiAqIFNvbWUgZXZlbnQgdHlwZXMgaGF2ZSBhIG5vdGlvbiBvZiBkaWZmZXJlbnQgcmVnaXN0cmF0aW9uIG5hbWVzIGZvciBkaWZmZXJlbnRcbiAqIFwicGhhc2VzXCIgb2YgcHJvcGFnYXRpb24uIFRoaXMgZmluZHMgbGlzdGVuZXJzIGJ5IGEgZ2l2ZW4gcGhhc2UuXG4gKi9cbmZ1bmN0aW9uIGxpc3RlbmVyQXRQaGFzZShpbnN0LCBldmVudCwgcHJvcGFnYXRpb25QaGFzZSkge1xuICB2YXIgcmVnaXN0cmF0aW9uTmFtZSA9IGV2ZW50LmRpc3BhdGNoQ29uZmlnLnBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzW3Byb3BhZ2F0aW9uUGhhc2VdO1xuICByZXR1cm4gZ2V0TGlzdGVuZXIoaW5zdCwgcmVnaXN0cmF0aW9uTmFtZSk7XG59XG5cbi8qKlxuICogVGFncyBhIGBTeW50aGV0aWNFdmVudGAgd2l0aCBkaXNwYXRjaGVkIGxpc3RlbmVycy4gQ3JlYXRpbmcgdGhpcyBmdW5jdGlvblxuICogaGVyZSwgYWxsb3dzIHVzIHRvIG5vdCBoYXZlIHRvIGJpbmQgb3IgY3JlYXRlIGZ1bmN0aW9ucyBmb3IgZWFjaCBldmVudC5cbiAqIE11dGF0aW5nIHRoZSBldmVudCdzIG1lbWJlcnMgYWxsb3dzIHVzIHRvIG5vdCBoYXZlIHRvIGNyZWF0ZSBhIHdyYXBwaW5nXG4gKiBcImRpc3BhdGNoXCIgb2JqZWN0IHRoYXQgcGFpcnMgdGhlIGV2ZW50IHdpdGggdGhlIGxpc3RlbmVyLlxuICovXG5mdW5jdGlvbiBhY2N1bXVsYXRlRGlyZWN0aW9uYWxEaXNwYXRjaGVzKGluc3QsIHBoYXNlLCBldmVudCkge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKGluc3QsICdEaXNwYXRjaGluZyBpbnN0IG11c3Qgbm90IGJlIG51bGwnKSA6IHZvaWQgMDtcbiAgfVxuICB2YXIgbGlzdGVuZXIgPSBsaXN0ZW5lckF0UGhhc2UoaW5zdCwgZXZlbnQsIHBoYXNlKTtcbiAgaWYgKGxpc3RlbmVyKSB7XG4gICAgZXZlbnQuX2Rpc3BhdGNoTGlzdGVuZXJzID0gYWNjdW11bGF0ZUludG8oZXZlbnQuX2Rpc3BhdGNoTGlzdGVuZXJzLCBsaXN0ZW5lcik7XG4gICAgZXZlbnQuX2Rpc3BhdGNoSW5zdGFuY2VzID0gYWNjdW11bGF0ZUludG8oZXZlbnQuX2Rpc3BhdGNoSW5zdGFuY2VzLCBpbnN0KTtcbiAgfVxufVxuXG4vKipcbiAqIENvbGxlY3QgZGlzcGF0Y2hlcyAobXVzdCBiZSBlbnRpcmVseSBjb2xsZWN0ZWQgYmVmb3JlIGRpc3BhdGNoaW5nIC0gc2VlIHVuaXRcbiAqIHRlc3RzKS4gTGF6aWx5IGFsbG9jYXRlIHRoZSBhcnJheSB0byBjb25zZXJ2ZSBtZW1vcnkuICBXZSBtdXN0IGxvb3AgdGhyb3VnaFxuICogZWFjaCBldmVudCBhbmQgcGVyZm9ybSB0aGUgdHJhdmVyc2FsIGZvciBlYWNoIG9uZS4gV2UgY2Fubm90IHBlcmZvcm0gYVxuICogc2luZ2xlIHRyYXZlcnNhbCBmb3IgdGhlIGVudGlyZSBjb2xsZWN0aW9uIG9mIGV2ZW50cyBiZWNhdXNlIGVhY2ggZXZlbnQgbWF5XG4gKiBoYXZlIGEgZGlmZmVyZW50IHRhcmdldC5cbiAqL1xuZnVuY3Rpb24gYWNjdW11bGF0ZVR3b1BoYXNlRGlzcGF0Y2hlc1NpbmdsZShldmVudCkge1xuICBpZiAoZXZlbnQgJiYgZXZlbnQuZGlzcGF0Y2hDb25maWcucGhhc2VkUmVnaXN0cmF0aW9uTmFtZXMpIHtcbiAgICBFdmVudFBsdWdpblV0aWxzLnRyYXZlcnNlVHdvUGhhc2UoZXZlbnQuX3RhcmdldEluc3QsIGFjY3VtdWxhdGVEaXJlY3Rpb25hbERpc3BhdGNoZXMsIGV2ZW50KTtcbiAgfVxufVxuXG4vKipcbiAqIFNhbWUgYXMgYGFjY3VtdWxhdGVUd29QaGFzZURpc3BhdGNoZXNTaW5nbGVgLCBidXQgc2tpcHMgb3ZlciB0aGUgdGFyZ2V0SUQuXG4gKi9cbmZ1bmN0aW9uIGFjY3VtdWxhdGVUd29QaGFzZURpc3BhdGNoZXNTaW5nbGVTa2lwVGFyZ2V0KGV2ZW50KSB7XG4gIGlmIChldmVudCAmJiBldmVudC5kaXNwYXRjaENvbmZpZy5waGFzZWRSZWdpc3RyYXRpb25OYW1lcykge1xuICAgIHZhciB0YXJnZXRJbnN0ID0gZXZlbnQuX3RhcmdldEluc3Q7XG4gICAgdmFyIHBhcmVudEluc3QgPSB0YXJnZXRJbnN0ID8gRXZlbnRQbHVnaW5VdGlscy5nZXRQYXJlbnRJbnN0YW5jZSh0YXJnZXRJbnN0KSA6IG51bGw7XG4gICAgRXZlbnRQbHVnaW5VdGlscy50cmF2ZXJzZVR3b1BoYXNlKHBhcmVudEluc3QsIGFjY3VtdWxhdGVEaXJlY3Rpb25hbERpc3BhdGNoZXMsIGV2ZW50KTtcbiAgfVxufVxuXG4vKipcbiAqIEFjY3VtdWxhdGVzIHdpdGhvdXQgcmVnYXJkIHRvIGRpcmVjdGlvbiwgZG9lcyBub3QgbG9vayBmb3IgcGhhc2VkXG4gKiByZWdpc3RyYXRpb24gbmFtZXMuIFNhbWUgYXMgYGFjY3VtdWxhdGVEaXJlY3REaXNwYXRjaGVzU2luZ2xlYCBidXQgd2l0aG91dFxuICogcmVxdWlyaW5nIHRoYXQgdGhlIGBkaXNwYXRjaE1hcmtlcmAgYmUgdGhlIHNhbWUgYXMgdGhlIGRpc3BhdGNoZWQgSUQuXG4gKi9cbmZ1bmN0aW9uIGFjY3VtdWxhdGVEaXNwYXRjaGVzKGluc3QsIGlnbm9yZWREaXJlY3Rpb24sIGV2ZW50KSB7XG4gIGlmIChldmVudCAmJiBldmVudC5kaXNwYXRjaENvbmZpZy5yZWdpc3RyYXRpb25OYW1lKSB7XG4gICAgdmFyIHJlZ2lzdHJhdGlvbk5hbWUgPSBldmVudC5kaXNwYXRjaENvbmZpZy5yZWdpc3RyYXRpb25OYW1lO1xuICAgIHZhciBsaXN0ZW5lciA9IGdldExpc3RlbmVyKGluc3QsIHJlZ2lzdHJhdGlvbk5hbWUpO1xuICAgIGlmIChsaXN0ZW5lcikge1xuICAgICAgZXZlbnQuX2Rpc3BhdGNoTGlzdGVuZXJzID0gYWNjdW11bGF0ZUludG8oZXZlbnQuX2Rpc3BhdGNoTGlzdGVuZXJzLCBsaXN0ZW5lcik7XG4gICAgICBldmVudC5fZGlzcGF0Y2hJbnN0YW5jZXMgPSBhY2N1bXVsYXRlSW50byhldmVudC5fZGlzcGF0Y2hJbnN0YW5jZXMsIGluc3QpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEFjY3VtdWxhdGVzIGRpc3BhdGNoZXMgb24gYW4gYFN5bnRoZXRpY0V2ZW50YCwgYnV0IG9ubHkgZm9yIHRoZVxuICogYGRpc3BhdGNoTWFya2VyYC5cbiAqIEBwYXJhbSB7U3ludGhldGljRXZlbnR9IGV2ZW50XG4gKi9cbmZ1bmN0aW9uIGFjY3VtdWxhdGVEaXJlY3REaXNwYXRjaGVzU2luZ2xlKGV2ZW50KSB7XG4gIGlmIChldmVudCAmJiBldmVudC5kaXNwYXRjaENvbmZpZy5yZWdpc3RyYXRpb25OYW1lKSB7XG4gICAgYWNjdW11bGF0ZURpc3BhdGNoZXMoZXZlbnQuX3RhcmdldEluc3QsIG51bGwsIGV2ZW50KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBhY2N1bXVsYXRlVHdvUGhhc2VEaXNwYXRjaGVzKGV2ZW50cykge1xuICBmb3JFYWNoQWNjdW11bGF0ZWQoZXZlbnRzLCBhY2N1bXVsYXRlVHdvUGhhc2VEaXNwYXRjaGVzU2luZ2xlKTtcbn1cblxuZnVuY3Rpb24gYWNjdW11bGF0ZVR3b1BoYXNlRGlzcGF0Y2hlc1NraXBUYXJnZXQoZXZlbnRzKSB7XG4gIGZvckVhY2hBY2N1bXVsYXRlZChldmVudHMsIGFjY3VtdWxhdGVUd29QaGFzZURpc3BhdGNoZXNTaW5nbGVTa2lwVGFyZ2V0KTtcbn1cblxuZnVuY3Rpb24gYWNjdW11bGF0ZUVudGVyTGVhdmVEaXNwYXRjaGVzKGxlYXZlLCBlbnRlciwgZnJvbSwgdG8pIHtcbiAgRXZlbnRQbHVnaW5VdGlscy50cmF2ZXJzZUVudGVyTGVhdmUoZnJvbSwgdG8sIGFjY3VtdWxhdGVEaXNwYXRjaGVzLCBsZWF2ZSwgZW50ZXIpO1xufVxuXG5mdW5jdGlvbiBhY2N1bXVsYXRlRGlyZWN0RGlzcGF0Y2hlcyhldmVudHMpIHtcbiAgZm9yRWFjaEFjY3VtdWxhdGVkKGV2ZW50cywgYWNjdW11bGF0ZURpcmVjdERpc3BhdGNoZXNTaW5nbGUpO1xufVxuXG4vKipcbiAqIEEgc21hbGwgc2V0IG9mIHByb3BhZ2F0aW9uIHBhdHRlcm5zLCBlYWNoIG9mIHdoaWNoIHdpbGwgYWNjZXB0IGEgc21hbGwgYW1vdW50XG4gKiBvZiBpbmZvcm1hdGlvbiwgYW5kIGdlbmVyYXRlIGEgc2V0IG9mIFwiZGlzcGF0Y2ggcmVhZHkgZXZlbnQgb2JqZWN0c1wiIC0gd2hpY2hcbiAqIGFyZSBzZXRzIG9mIGV2ZW50cyB0aGF0IGhhdmUgYWxyZWFkeSBiZWVuIGFubm90YXRlZCB3aXRoIGEgc2V0IG9mIGRpc3BhdGNoZWRcbiAqIGxpc3RlbmVyIGZ1bmN0aW9ucy9pZHMuIFRoZSBBUEkgaXMgZGVzaWduZWQgdGhpcyB3YXkgdG8gZGlzY291cmFnZSB0aGVzZVxuICogcHJvcGFnYXRpb24gc3RyYXRlZ2llcyBmcm9tIGFjdHVhbGx5IGV4ZWN1dGluZyB0aGUgZGlzcGF0Y2hlcywgc2luY2Ugd2VcbiAqIGFsd2F5cyB3YW50IHRvIGNvbGxlY3QgdGhlIGVudGlyZSBzZXQgb2YgZGlzcGF0Y2hlcyBiZWZvcmUgZXhlY3V0aW5nIGV2ZW50IGFcbiAqIHNpbmdsZSBvbmUuXG4gKlxuICogQGNvbnN0cnVjdG9yIEV2ZW50UHJvcGFnYXRvcnNcbiAqL1xudmFyIEV2ZW50UHJvcGFnYXRvcnMgPSB7XG4gIGFjY3VtdWxhdGVUd29QaGFzZURpc3BhdGNoZXM6IGFjY3VtdWxhdGVUd29QaGFzZURpc3BhdGNoZXMsXG4gIGFjY3VtdWxhdGVUd29QaGFzZURpc3BhdGNoZXNTa2lwVGFyZ2V0OiBhY2N1bXVsYXRlVHdvUGhhc2VEaXNwYXRjaGVzU2tpcFRhcmdldCxcbiAgYWNjdW11bGF0ZURpcmVjdERpc3BhdGNoZXM6IGFjY3VtdWxhdGVEaXJlY3REaXNwYXRjaGVzLFxuICBhY2N1bXVsYXRlRW50ZXJMZWF2ZURpc3BhdGNoZXM6IGFjY3VtdWxhdGVFbnRlckxlYXZlRGlzcGF0Y2hlc1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBFdmVudFByb3BhZ2F0b3JzO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QtZG9tL2xpYi9FdmVudFByb3BhZ2F0b3JzLmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBgUmVhY3RJbnN0YW5jZU1hcGAgbWFpbnRhaW5zIGEgbWFwcGluZyBmcm9tIGEgcHVibGljIGZhY2luZyBzdGF0ZWZ1bFxuICogaW5zdGFuY2UgKGtleSkgYW5kIHRoZSBpbnRlcm5hbCByZXByZXNlbnRhdGlvbiAodmFsdWUpLiBUaGlzIGFsbG93cyBwdWJsaWNcbiAqIG1ldGhvZHMgdG8gYWNjZXB0IHRoZSB1c2VyIGZhY2luZyBpbnN0YW5jZSBhcyBhbiBhcmd1bWVudCBhbmQgbWFwIHRoZW0gYmFja1xuICogdG8gaW50ZXJuYWwgbWV0aG9kcy5cbiAqL1xuXG4vLyBUT0RPOiBSZXBsYWNlIHRoaXMgd2l0aCBFUzY6IHZhciBSZWFjdEluc3RhbmNlTWFwID0gbmV3IE1hcCgpO1xuXG52YXIgUmVhY3RJbnN0YW5jZU1hcCA9IHtcbiAgLyoqXG4gICAqIFRoaXMgQVBJIHNob3VsZCBiZSBjYWxsZWQgYGRlbGV0ZWAgYnV0IHdlJ2QgaGF2ZSB0byBtYWtlIHN1cmUgdG8gYWx3YXlzXG4gICAqIHRyYW5zZm9ybSB0aGVzZSB0byBzdHJpbmdzIGZvciBJRSBzdXBwb3J0LiBXaGVuIHRoaXMgdHJhbnNmb3JtIGlzIGZ1bGx5XG4gICAqIHN1cHBvcnRlZCB3ZSBjYW4gcmVuYW1lIGl0LlxuICAgKi9cbiAgcmVtb3ZlOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAga2V5Ll9yZWFjdEludGVybmFsSW5zdGFuY2UgPSB1bmRlZmluZWQ7XG4gIH0sXG5cbiAgZ2V0OiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgcmV0dXJuIGtleS5fcmVhY3RJbnRlcm5hbEluc3RhbmNlO1xuICB9LFxuXG4gIGhhczogZnVuY3Rpb24gKGtleSkge1xuICAgIHJldHVybiBrZXkuX3JlYWN0SW50ZXJuYWxJbnN0YW5jZSAhPT0gdW5kZWZpbmVkO1xuICB9LFxuXG4gIHNldDogZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICBrZXkuX3JlYWN0SW50ZXJuYWxJbnN0YW5jZSA9IHZhbHVlO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0SW5zdGFuY2VNYXA7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1kb20vbGliL1JlYWN0SW5zdGFuY2VNYXAuanMiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgU3ludGhldGljRXZlbnQgPSByZXF1aXJlKCcuL1N5bnRoZXRpY0V2ZW50Jyk7XG5cbnZhciBnZXRFdmVudFRhcmdldCA9IHJlcXVpcmUoJy4vZ2V0RXZlbnRUYXJnZXQnKTtcblxuLyoqXG4gKiBAaW50ZXJmYWNlIFVJRXZlbnRcbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTMtRXZlbnRzL1xuICovXG52YXIgVUlFdmVudEludGVyZmFjZSA9IHtcbiAgdmlldzogZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgaWYgKGV2ZW50LnZpZXcpIHtcbiAgICAgIHJldHVybiBldmVudC52aWV3O1xuICAgIH1cblxuICAgIHZhciB0YXJnZXQgPSBnZXRFdmVudFRhcmdldChldmVudCk7XG4gICAgaWYgKHRhcmdldC53aW5kb3cgPT09IHRhcmdldCkge1xuICAgICAgLy8gdGFyZ2V0IGlzIGEgd2luZG93IG9iamVjdFxuICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9XG5cbiAgICB2YXIgZG9jID0gdGFyZ2V0Lm93bmVyRG9jdW1lbnQ7XG4gICAgLy8gVE9ETzogRmlndXJlIG91dCB3aHkgYG93bmVyRG9jdW1lbnRgIGlzIHNvbWV0aW1lcyB1bmRlZmluZWQgaW4gSUU4LlxuICAgIGlmIChkb2MpIHtcbiAgICAgIHJldHVybiBkb2MuZGVmYXVsdFZpZXcgfHwgZG9jLnBhcmVudFdpbmRvdztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHdpbmRvdztcbiAgICB9XG4gIH0sXG4gIGRldGFpbDogZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgcmV0dXJuIGV2ZW50LmRldGFpbCB8fCAwO1xuICB9XG59O1xuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSBkaXNwYXRjaENvbmZpZyBDb25maWd1cmF0aW9uIHVzZWQgdG8gZGlzcGF0Y2ggdGhpcyBldmVudC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBkaXNwYXRjaE1hcmtlciBNYXJrZXIgaWRlbnRpZnlpbmcgdGhlIGV2ZW50IHRhcmdldC5cbiAqIEBwYXJhbSB7b2JqZWN0fSBuYXRpdmVFdmVudCBOYXRpdmUgYnJvd3NlciBldmVudC5cbiAqIEBleHRlbmRzIHtTeW50aGV0aWNFdmVudH1cbiAqL1xuZnVuY3Rpb24gU3ludGhldGljVUlFdmVudChkaXNwYXRjaENvbmZpZywgZGlzcGF0Y2hNYXJrZXIsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCkge1xuICByZXR1cm4gU3ludGhldGljRXZlbnQuY2FsbCh0aGlzLCBkaXNwYXRjaENvbmZpZywgZGlzcGF0Y2hNYXJrZXIsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCk7XG59XG5cblN5bnRoZXRpY0V2ZW50LmF1Z21lbnRDbGFzcyhTeW50aGV0aWNVSUV2ZW50LCBVSUV2ZW50SW50ZXJmYWNlKTtcblxubW9kdWxlLmV4cG9ydHMgPSBTeW50aGV0aWNVSUV2ZW50O1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QtZG9tL2xpYi9TeW50aGV0aWNVSUV2ZW50LmpzIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBJdGVtIGZyb20gJy4vaXRlbSc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEl0ZW1MaXN0KHtpdGVtcywgdGl0bGUsIGhlYWRlckV4dHJhcywgaGFuZGxlSXRlbUNsaWNrfSkge1xuICBjb25zdCBlbGVtZW50cyA9IGl0ZW1zLm1hcCgoaXRlbSwgaWR4KSA9PiA8SXRlbSBpdGVtPXtpdGVtfSBrZXk9e2lkeH0gc2VsZWN0TW9kZT17ZmFsc2V9IGhhbmRsZUNsaWNrPXtoYW5kbGVJdGVtQ2xpY2sgfHwgKCgpPT57fSl9IC8+KTtcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXt0aXRsZS50b0xvd2VyQ2FzZSgpfT5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHt0aXRsZS50b0xvd2VyQ2FzZSgpfS1pbnRyb2AgfT5cbiAgICAgICAgPHNwYW4+e3RpdGxlfTwvc3Bhbj5cbiAgICAgICAge2hlYWRlckV4dHJhcyB8fCAnJ31cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb250ZW50XCI+XG4gICAgICAgIHtlbGVtZW50c31cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApO1xufVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2NvbXBvbmVudHMvY29udGVudC9pdGVtLWxpc3QuanN4IiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBlbXB0eU9iamVjdCA9IHt9O1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBPYmplY3QuZnJlZXplKGVtcHR5T2JqZWN0KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBlbXB0eU9iamVjdDtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L2ZianMvbGliL2VtcHR5T2JqZWN0LmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgX3Byb2RJbnZhcmlhbnQgPSByZXF1aXJlKCcuL3JlYWN0UHJvZEludmFyaWFudCcpO1xuXG52YXIgaW52YXJpYW50ID0gcmVxdWlyZSgnZmJqcy9saWIvaW52YXJpYW50Jyk7XG5cbi8qKlxuICogSW5qZWN0YWJsZSBvcmRlcmluZyBvZiBldmVudCBwbHVnaW5zLlxuICovXG52YXIgZXZlbnRQbHVnaW5PcmRlciA9IG51bGw7XG5cbi8qKlxuICogSW5qZWN0YWJsZSBtYXBwaW5nIGZyb20gbmFtZXMgdG8gZXZlbnQgcGx1Z2luIG1vZHVsZXMuXG4gKi9cbnZhciBuYW1lc1RvUGx1Z2lucyA9IHt9O1xuXG4vKipcbiAqIFJlY29tcHV0ZXMgdGhlIHBsdWdpbiBsaXN0IHVzaW5nIHRoZSBpbmplY3RlZCBwbHVnaW5zIGFuZCBwbHVnaW4gb3JkZXJpbmcuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gcmVjb21wdXRlUGx1Z2luT3JkZXJpbmcoKSB7XG4gIGlmICghZXZlbnRQbHVnaW5PcmRlcikge1xuICAgIC8vIFdhaXQgdW50aWwgYW4gYGV2ZW50UGx1Z2luT3JkZXJgIGlzIGluamVjdGVkLlxuICAgIHJldHVybjtcbiAgfVxuICBmb3IgKHZhciBwbHVnaW5OYW1lIGluIG5hbWVzVG9QbHVnaW5zKSB7XG4gICAgdmFyIHBsdWdpbk1vZHVsZSA9IG5hbWVzVG9QbHVnaW5zW3BsdWdpbk5hbWVdO1xuICAgIHZhciBwbHVnaW5JbmRleCA9IGV2ZW50UGx1Z2luT3JkZXIuaW5kZXhPZihwbHVnaW5OYW1lKTtcbiAgICAhKHBsdWdpbkluZGV4ID4gLTEpID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IGludmFyaWFudChmYWxzZSwgJ0V2ZW50UGx1Z2luUmVnaXN0cnk6IENhbm5vdCBpbmplY3QgZXZlbnQgcGx1Z2lucyB0aGF0IGRvIG5vdCBleGlzdCBpbiB0aGUgcGx1Z2luIG9yZGVyaW5nLCBgJXNgLicsIHBsdWdpbk5hbWUpIDogX3Byb2RJbnZhcmlhbnQoJzk2JywgcGx1Z2luTmFtZSkgOiB2b2lkIDA7XG4gICAgaWYgKEV2ZW50UGx1Z2luUmVnaXN0cnkucGx1Z2luc1twbHVnaW5JbmRleF0pIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICAhcGx1Z2luTW9kdWxlLmV4dHJhY3RFdmVudHMgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAnRXZlbnRQbHVnaW5SZWdpc3RyeTogRXZlbnQgcGx1Z2lucyBtdXN0IGltcGxlbWVudCBhbiBgZXh0cmFjdEV2ZW50c2AgbWV0aG9kLCBidXQgYCVzYCBkb2VzIG5vdC4nLCBwbHVnaW5OYW1lKSA6IF9wcm9kSW52YXJpYW50KCc5NycsIHBsdWdpbk5hbWUpIDogdm9pZCAwO1xuICAgIEV2ZW50UGx1Z2luUmVnaXN0cnkucGx1Z2luc1twbHVnaW5JbmRleF0gPSBwbHVnaW5Nb2R1bGU7XG4gICAgdmFyIHB1Ymxpc2hlZEV2ZW50cyA9IHBsdWdpbk1vZHVsZS5ldmVudFR5cGVzO1xuICAgIGZvciAodmFyIGV2ZW50TmFtZSBpbiBwdWJsaXNoZWRFdmVudHMpIHtcbiAgICAgICFwdWJsaXNoRXZlbnRGb3JQbHVnaW4ocHVibGlzaGVkRXZlbnRzW2V2ZW50TmFtZV0sIHBsdWdpbk1vZHVsZSwgZXZlbnROYW1lKSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICdFdmVudFBsdWdpblJlZ2lzdHJ5OiBGYWlsZWQgdG8gcHVibGlzaCBldmVudCBgJXNgIGZvciBwbHVnaW4gYCVzYC4nLCBldmVudE5hbWUsIHBsdWdpbk5hbWUpIDogX3Byb2RJbnZhcmlhbnQoJzk4JywgZXZlbnROYW1lLCBwbHVnaW5OYW1lKSA6IHZvaWQgMDtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBQdWJsaXNoZXMgYW4gZXZlbnQgc28gdGhhdCBpdCBjYW4gYmUgZGlzcGF0Y2hlZCBieSB0aGUgc3VwcGxpZWQgcGx1Z2luLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBkaXNwYXRjaENvbmZpZyBEaXNwYXRjaCBjb25maWd1cmF0aW9uIGZvciB0aGUgZXZlbnQuXG4gKiBAcGFyYW0ge29iamVjdH0gUGx1Z2luTW9kdWxlIFBsdWdpbiBwdWJsaXNoaW5nIHRoZSBldmVudC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdGhlIGV2ZW50IHdhcyBzdWNjZXNzZnVsbHkgcHVibGlzaGVkLlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gcHVibGlzaEV2ZW50Rm9yUGx1Z2luKGRpc3BhdGNoQ29uZmlnLCBwbHVnaW5Nb2R1bGUsIGV2ZW50TmFtZSkge1xuICAhIUV2ZW50UGx1Z2luUmVnaXN0cnkuZXZlbnROYW1lRGlzcGF0Y2hDb25maWdzLmhhc093blByb3BlcnR5KGV2ZW50TmFtZSkgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAnRXZlbnRQbHVnaW5IdWI6IE1vcmUgdGhhbiBvbmUgcGx1Z2luIGF0dGVtcHRlZCB0byBwdWJsaXNoIHRoZSBzYW1lIGV2ZW50IG5hbWUsIGAlc2AuJywgZXZlbnROYW1lKSA6IF9wcm9kSW52YXJpYW50KCc5OScsIGV2ZW50TmFtZSkgOiB2b2lkIDA7XG4gIEV2ZW50UGx1Z2luUmVnaXN0cnkuZXZlbnROYW1lRGlzcGF0Y2hDb25maWdzW2V2ZW50TmFtZV0gPSBkaXNwYXRjaENvbmZpZztcblxuICB2YXIgcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXMgPSBkaXNwYXRjaENvbmZpZy5waGFzZWRSZWdpc3RyYXRpb25OYW1lcztcbiAgaWYgKHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzKSB7XG4gICAgZm9yICh2YXIgcGhhc2VOYW1lIGluIHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzKSB7XG4gICAgICBpZiAocGhhc2VkUmVnaXN0cmF0aW9uTmFtZXMuaGFzT3duUHJvcGVydHkocGhhc2VOYW1lKSkge1xuICAgICAgICB2YXIgcGhhc2VkUmVnaXN0cmF0aW9uTmFtZSA9IHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzW3BoYXNlTmFtZV07XG4gICAgICAgIHB1Ymxpc2hSZWdpc3RyYXRpb25OYW1lKHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWUsIHBsdWdpbk1vZHVsZSwgZXZlbnROYW1lKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gZWxzZSBpZiAoZGlzcGF0Y2hDb25maWcucmVnaXN0cmF0aW9uTmFtZSkge1xuICAgIHB1Ymxpc2hSZWdpc3RyYXRpb25OYW1lKGRpc3BhdGNoQ29uZmlnLnJlZ2lzdHJhdGlvbk5hbWUsIHBsdWdpbk1vZHVsZSwgZXZlbnROYW1lKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogUHVibGlzaGVzIGEgcmVnaXN0cmF0aW9uIG5hbWUgdGhhdCBpcyB1c2VkIHRvIGlkZW50aWZ5IGRpc3BhdGNoZWQgZXZlbnRzIGFuZFxuICogY2FuIGJlIHVzZWQgd2l0aCBgRXZlbnRQbHVnaW5IdWIucHV0TGlzdGVuZXJgIHRvIHJlZ2lzdGVyIGxpc3RlbmVycy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVnaXN0cmF0aW9uTmFtZSBSZWdpc3RyYXRpb24gbmFtZSB0byBhZGQuXG4gKiBAcGFyYW0ge29iamVjdH0gUGx1Z2luTW9kdWxlIFBsdWdpbiBwdWJsaXNoaW5nIHRoZSBldmVudC5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHB1Ymxpc2hSZWdpc3RyYXRpb25OYW1lKHJlZ2lzdHJhdGlvbk5hbWUsIHBsdWdpbk1vZHVsZSwgZXZlbnROYW1lKSB7XG4gICEhRXZlbnRQbHVnaW5SZWdpc3RyeS5yZWdpc3RyYXRpb25OYW1lTW9kdWxlc1tyZWdpc3RyYXRpb25OYW1lXSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICdFdmVudFBsdWdpbkh1YjogTW9yZSB0aGFuIG9uZSBwbHVnaW4gYXR0ZW1wdGVkIHRvIHB1Ymxpc2ggdGhlIHNhbWUgcmVnaXN0cmF0aW9uIG5hbWUsIGAlc2AuJywgcmVnaXN0cmF0aW9uTmFtZSkgOiBfcHJvZEludmFyaWFudCgnMTAwJywgcmVnaXN0cmF0aW9uTmFtZSkgOiB2b2lkIDA7XG4gIEV2ZW50UGx1Z2luUmVnaXN0cnkucmVnaXN0cmF0aW9uTmFtZU1vZHVsZXNbcmVnaXN0cmF0aW9uTmFtZV0gPSBwbHVnaW5Nb2R1bGU7XG4gIEV2ZW50UGx1Z2luUmVnaXN0cnkucmVnaXN0cmF0aW9uTmFtZURlcGVuZGVuY2llc1tyZWdpc3RyYXRpb25OYW1lXSA9IHBsdWdpbk1vZHVsZS5ldmVudFR5cGVzW2V2ZW50TmFtZV0uZGVwZW5kZW5jaWVzO1xuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgdmFyIGxvd2VyQ2FzZWROYW1lID0gcmVnaXN0cmF0aW9uTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIEV2ZW50UGx1Z2luUmVnaXN0cnkucG9zc2libGVSZWdpc3RyYXRpb25OYW1lc1tsb3dlckNhc2VkTmFtZV0gPSByZWdpc3RyYXRpb25OYW1lO1xuXG4gICAgaWYgKHJlZ2lzdHJhdGlvbk5hbWUgPT09ICdvbkRvdWJsZUNsaWNrJykge1xuICAgICAgRXZlbnRQbHVnaW5SZWdpc3RyeS5wb3NzaWJsZVJlZ2lzdHJhdGlvbk5hbWVzLm9uZGJsY2xpY2sgPSByZWdpc3RyYXRpb25OYW1lO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFJlZ2lzdGVycyBwbHVnaW5zIHNvIHRoYXQgdGhleSBjYW4gZXh0cmFjdCBhbmQgZGlzcGF0Y2ggZXZlbnRzLlxuICpcbiAqIEBzZWUge0V2ZW50UGx1Z2luSHVifVxuICovXG52YXIgRXZlbnRQbHVnaW5SZWdpc3RyeSA9IHtcbiAgLyoqXG4gICAqIE9yZGVyZWQgbGlzdCBvZiBpbmplY3RlZCBwbHVnaW5zLlxuICAgKi9cbiAgcGx1Z2luczogW10sXG5cbiAgLyoqXG4gICAqIE1hcHBpbmcgZnJvbSBldmVudCBuYW1lIHRvIGRpc3BhdGNoIGNvbmZpZ1xuICAgKi9cbiAgZXZlbnROYW1lRGlzcGF0Y2hDb25maWdzOiB7fSxcblxuICAvKipcbiAgICogTWFwcGluZyBmcm9tIHJlZ2lzdHJhdGlvbiBuYW1lIHRvIHBsdWdpbiBtb2R1bGVcbiAgICovXG4gIHJlZ2lzdHJhdGlvbk5hbWVNb2R1bGVzOiB7fSxcblxuICAvKipcbiAgICogTWFwcGluZyBmcm9tIHJlZ2lzdHJhdGlvbiBuYW1lIHRvIGV2ZW50IG5hbWVcbiAgICovXG4gIHJlZ2lzdHJhdGlvbk5hbWVEZXBlbmRlbmNpZXM6IHt9LFxuXG4gIC8qKlxuICAgKiBNYXBwaW5nIGZyb20gbG93ZXJjYXNlIHJlZ2lzdHJhdGlvbiBuYW1lcyB0byB0aGUgcHJvcGVybHkgY2FzZWQgdmVyc2lvbixcbiAgICogdXNlZCB0byB3YXJuIGluIHRoZSBjYXNlIG9mIG1pc3NpbmcgZXZlbnQgaGFuZGxlcnMuIEF2YWlsYWJsZVxuICAgKiBvbmx5IGluIF9fREVWX18uXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICBwb3NzaWJsZVJlZ2lzdHJhdGlvbk5hbWVzOiBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8ge30gOiBudWxsLFxuICAvLyBUcnVzdCB0aGUgZGV2ZWxvcGVyIHRvIG9ubHkgdXNlIHBvc3NpYmxlUmVnaXN0cmF0aW9uTmFtZXMgaW4gX19ERVZfX1xuXG4gIC8qKlxuICAgKiBJbmplY3RzIGFuIG9yZGVyaW5nIG9mIHBsdWdpbnMgKGJ5IHBsdWdpbiBuYW1lKS4gVGhpcyBhbGxvd3MgdGhlIG9yZGVyaW5nXG4gICAqIHRvIGJlIGRlY291cGxlZCBmcm9tIGluamVjdGlvbiBvZiB0aGUgYWN0dWFsIHBsdWdpbnMgc28gdGhhdCBvcmRlcmluZyBpc1xuICAgKiBhbHdheXMgZGV0ZXJtaW5pc3RpYyByZWdhcmRsZXNzIG9mIHBhY2thZ2luZywgb24tdGhlLWZseSBpbmplY3Rpb24sIGV0Yy5cbiAgICpcbiAgICogQHBhcmFtIHthcnJheX0gSW5qZWN0ZWRFdmVudFBsdWdpbk9yZGVyXG4gICAqIEBpbnRlcm5hbFxuICAgKiBAc2VlIHtFdmVudFBsdWdpbkh1Yi5pbmplY3Rpb24uaW5qZWN0RXZlbnRQbHVnaW5PcmRlcn1cbiAgICovXG4gIGluamVjdEV2ZW50UGx1Z2luT3JkZXI6IGZ1bmN0aW9uIChpbmplY3RlZEV2ZW50UGx1Z2luT3JkZXIpIHtcbiAgICAhIWV2ZW50UGx1Z2luT3JkZXIgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAnRXZlbnRQbHVnaW5SZWdpc3RyeTogQ2Fubm90IGluamVjdCBldmVudCBwbHVnaW4gb3JkZXJpbmcgbW9yZSB0aGFuIG9uY2UuIFlvdSBhcmUgbGlrZWx5IHRyeWluZyB0byBsb2FkIG1vcmUgdGhhbiBvbmUgY29weSBvZiBSZWFjdC4nKSA6IF9wcm9kSW52YXJpYW50KCcxMDEnKSA6IHZvaWQgMDtcbiAgICAvLyBDbG9uZSB0aGUgb3JkZXJpbmcgc28gaXQgY2Fubm90IGJlIGR5bmFtaWNhbGx5IG11dGF0ZWQuXG4gICAgZXZlbnRQbHVnaW5PcmRlciA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGluamVjdGVkRXZlbnRQbHVnaW5PcmRlcik7XG4gICAgcmVjb21wdXRlUGx1Z2luT3JkZXJpbmcoKTtcbiAgfSxcblxuICAvKipcbiAgICogSW5qZWN0cyBwbHVnaW5zIHRvIGJlIHVzZWQgYnkgYEV2ZW50UGx1Z2luSHViYC4gVGhlIHBsdWdpbiBuYW1lcyBtdXN0IGJlXG4gICAqIGluIHRoZSBvcmRlcmluZyBpbmplY3RlZCBieSBgaW5qZWN0RXZlbnRQbHVnaW5PcmRlcmAuXG4gICAqXG4gICAqIFBsdWdpbnMgY2FuIGJlIGluamVjdGVkIGFzIHBhcnQgb2YgcGFnZSBpbml0aWFsaXphdGlvbiBvciBvbi10aGUtZmx5LlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gaW5qZWN0ZWROYW1lc1RvUGx1Z2lucyBNYXAgZnJvbSBuYW1lcyB0byBwbHVnaW4gbW9kdWxlcy5cbiAgICogQGludGVybmFsXG4gICAqIEBzZWUge0V2ZW50UGx1Z2luSHViLmluamVjdGlvbi5pbmplY3RFdmVudFBsdWdpbnNCeU5hbWV9XG4gICAqL1xuICBpbmplY3RFdmVudFBsdWdpbnNCeU5hbWU6IGZ1bmN0aW9uIChpbmplY3RlZE5hbWVzVG9QbHVnaW5zKSB7XG4gICAgdmFyIGlzT3JkZXJpbmdEaXJ0eSA9IGZhbHNlO1xuICAgIGZvciAodmFyIHBsdWdpbk5hbWUgaW4gaW5qZWN0ZWROYW1lc1RvUGx1Z2lucykge1xuICAgICAgaWYgKCFpbmplY3RlZE5hbWVzVG9QbHVnaW5zLmhhc093blByb3BlcnR5KHBsdWdpbk5hbWUpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgdmFyIHBsdWdpbk1vZHVsZSA9IGluamVjdGVkTmFtZXNUb1BsdWdpbnNbcGx1Z2luTmFtZV07XG4gICAgICBpZiAoIW5hbWVzVG9QbHVnaW5zLmhhc093blByb3BlcnR5KHBsdWdpbk5hbWUpIHx8IG5hbWVzVG9QbHVnaW5zW3BsdWdpbk5hbWVdICE9PSBwbHVnaW5Nb2R1bGUpIHtcbiAgICAgICAgISFuYW1lc1RvUGx1Z2luc1twbHVnaW5OYW1lXSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICdFdmVudFBsdWdpblJlZ2lzdHJ5OiBDYW5ub3QgaW5qZWN0IHR3byBkaWZmZXJlbnQgZXZlbnQgcGx1Z2lucyB1c2luZyB0aGUgc2FtZSBuYW1lLCBgJXNgLicsIHBsdWdpbk5hbWUpIDogX3Byb2RJbnZhcmlhbnQoJzEwMicsIHBsdWdpbk5hbWUpIDogdm9pZCAwO1xuICAgICAgICBuYW1lc1RvUGx1Z2luc1twbHVnaW5OYW1lXSA9IHBsdWdpbk1vZHVsZTtcbiAgICAgICAgaXNPcmRlcmluZ0RpcnR5ID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGlzT3JkZXJpbmdEaXJ0eSkge1xuICAgICAgcmVjb21wdXRlUGx1Z2luT3JkZXJpbmcoKTtcbiAgICB9XG4gIH0sXG5cbiAgLyoqXG4gICAqIExvb2tzIHVwIHRoZSBwbHVnaW4gZm9yIHRoZSBzdXBwbGllZCBldmVudC5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEEgc3ludGhldGljIGV2ZW50LlxuICAgKiBAcmV0dXJuIHs/b2JqZWN0fSBUaGUgcGx1Z2luIHRoYXQgY3JlYXRlZCB0aGUgc3VwcGxpZWQgZXZlbnQuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZ2V0UGx1Z2luTW9kdWxlRm9yRXZlbnQ6IGZ1bmN0aW9uIChldmVudCkge1xuICAgIHZhciBkaXNwYXRjaENvbmZpZyA9IGV2ZW50LmRpc3BhdGNoQ29uZmlnO1xuICAgIGlmIChkaXNwYXRjaENvbmZpZy5yZWdpc3RyYXRpb25OYW1lKSB7XG4gICAgICByZXR1cm4gRXZlbnRQbHVnaW5SZWdpc3RyeS5yZWdpc3RyYXRpb25OYW1lTW9kdWxlc1tkaXNwYXRjaENvbmZpZy5yZWdpc3RyYXRpb25OYW1lXSB8fCBudWxsO1xuICAgIH1cbiAgICBpZiAoZGlzcGF0Y2hDb25maWcucGhhc2VkUmVnaXN0cmF0aW9uTmFtZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gcHVsbGluZyBwaGFzZWRSZWdpc3RyYXRpb25OYW1lcyBvdXQgb2YgZGlzcGF0Y2hDb25maWcgaGVscHMgRmxvdyBzZWVcbiAgICAgIC8vIHRoYXQgaXQgaXMgbm90IHVuZGVmaW5lZC5cbiAgICAgIHZhciBwaGFzZWRSZWdpc3RyYXRpb25OYW1lcyA9IGRpc3BhdGNoQ29uZmlnLnBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzO1xuXG4gICAgICBmb3IgKHZhciBwaGFzZSBpbiBwaGFzZWRSZWdpc3RyYXRpb25OYW1lcykge1xuICAgICAgICBpZiAoIXBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzLmhhc093blByb3BlcnR5KHBoYXNlKSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHZhciBwbHVnaW5Nb2R1bGUgPSBFdmVudFBsdWdpblJlZ2lzdHJ5LnJlZ2lzdHJhdGlvbk5hbWVNb2R1bGVzW3BoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzW3BoYXNlXV07XG4gICAgICAgIGlmIChwbHVnaW5Nb2R1bGUpIHtcbiAgICAgICAgICByZXR1cm4gcGx1Z2luTW9kdWxlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9LFxuXG4gIC8qKlxuICAgKiBFeHBvc2VkIGZvciB1bml0IHRlc3RpbmcuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfcmVzZXRFdmVudFBsdWdpbnM6IGZ1bmN0aW9uICgpIHtcbiAgICBldmVudFBsdWdpbk9yZGVyID0gbnVsbDtcbiAgICBmb3IgKHZhciBwbHVnaW5OYW1lIGluIG5hbWVzVG9QbHVnaW5zKSB7XG4gICAgICBpZiAobmFtZXNUb1BsdWdpbnMuaGFzT3duUHJvcGVydHkocGx1Z2luTmFtZSkpIHtcbiAgICAgICAgZGVsZXRlIG5hbWVzVG9QbHVnaW5zW3BsdWdpbk5hbWVdO1xuICAgICAgfVxuICAgIH1cbiAgICBFdmVudFBsdWdpblJlZ2lzdHJ5LnBsdWdpbnMubGVuZ3RoID0gMDtcblxuICAgIHZhciBldmVudE5hbWVEaXNwYXRjaENvbmZpZ3MgPSBFdmVudFBsdWdpblJlZ2lzdHJ5LmV2ZW50TmFtZURpc3BhdGNoQ29uZmlncztcbiAgICBmb3IgKHZhciBldmVudE5hbWUgaW4gZXZlbnROYW1lRGlzcGF0Y2hDb25maWdzKSB7XG4gICAgICBpZiAoZXZlbnROYW1lRGlzcGF0Y2hDb25maWdzLmhhc093blByb3BlcnR5KGV2ZW50TmFtZSkpIHtcbiAgICAgICAgZGVsZXRlIGV2ZW50TmFtZURpc3BhdGNoQ29uZmlnc1tldmVudE5hbWVdO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciByZWdpc3RyYXRpb25OYW1lTW9kdWxlcyA9IEV2ZW50UGx1Z2luUmVnaXN0cnkucmVnaXN0cmF0aW9uTmFtZU1vZHVsZXM7XG4gICAgZm9yICh2YXIgcmVnaXN0cmF0aW9uTmFtZSBpbiByZWdpc3RyYXRpb25OYW1lTW9kdWxlcykge1xuICAgICAgaWYgKHJlZ2lzdHJhdGlvbk5hbWVNb2R1bGVzLmhhc093blByb3BlcnR5KHJlZ2lzdHJhdGlvbk5hbWUpKSB7XG4gICAgICAgIGRlbGV0ZSByZWdpc3RyYXRpb25OYW1lTW9kdWxlc1tyZWdpc3RyYXRpb25OYW1lXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgdmFyIHBvc3NpYmxlUmVnaXN0cmF0aW9uTmFtZXMgPSBFdmVudFBsdWdpblJlZ2lzdHJ5LnBvc3NpYmxlUmVnaXN0cmF0aW9uTmFtZXM7XG4gICAgICBmb3IgKHZhciBsb3dlckNhc2VkTmFtZSBpbiBwb3NzaWJsZVJlZ2lzdHJhdGlvbk5hbWVzKSB7XG4gICAgICAgIGlmIChwb3NzaWJsZVJlZ2lzdHJhdGlvbk5hbWVzLmhhc093blByb3BlcnR5KGxvd2VyQ2FzZWROYW1lKSkge1xuICAgICAgICAgIGRlbGV0ZSBwb3NzaWJsZVJlZ2lzdHJhdGlvbk5hbWVzW2xvd2VyQ2FzZWROYW1lXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBFdmVudFBsdWdpblJlZ2lzdHJ5O1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QtZG9tL2xpYi9FdmVudFBsdWdpblJlZ2lzdHJ5LmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIF9hc3NpZ24gPSByZXF1aXJlKCdvYmplY3QtYXNzaWduJyk7XG5cbnZhciBFdmVudFBsdWdpblJlZ2lzdHJ5ID0gcmVxdWlyZSgnLi9FdmVudFBsdWdpblJlZ2lzdHJ5Jyk7XG52YXIgUmVhY3RFdmVudEVtaXR0ZXJNaXhpbiA9IHJlcXVpcmUoJy4vUmVhY3RFdmVudEVtaXR0ZXJNaXhpbicpO1xudmFyIFZpZXdwb3J0TWV0cmljcyA9IHJlcXVpcmUoJy4vVmlld3BvcnRNZXRyaWNzJyk7XG5cbnZhciBnZXRWZW5kb3JQcmVmaXhlZEV2ZW50TmFtZSA9IHJlcXVpcmUoJy4vZ2V0VmVuZG9yUHJlZml4ZWRFdmVudE5hbWUnKTtcbnZhciBpc0V2ZW50U3VwcG9ydGVkID0gcmVxdWlyZSgnLi9pc0V2ZW50U3VwcG9ydGVkJyk7XG5cbi8qKlxuICogU3VtbWFyeSBvZiBgUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyYCBldmVudCBoYW5kbGluZzpcbiAqXG4gKiAgLSBUb3AtbGV2ZWwgZGVsZWdhdGlvbiBpcyB1c2VkIHRvIHRyYXAgbW9zdCBuYXRpdmUgYnJvd3NlciBldmVudHMuIFRoaXNcbiAqICAgIG1heSBvbmx5IG9jY3VyIGluIHRoZSBtYWluIHRocmVhZCBhbmQgaXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mXG4gKiAgICBSZWFjdEV2ZW50TGlzdGVuZXIsIHdoaWNoIGlzIGluamVjdGVkIGFuZCBjYW4gdGhlcmVmb3JlIHN1cHBvcnQgcGx1Z2dhYmxlXG4gKiAgICBldmVudCBzb3VyY2VzLiBUaGlzIGlzIHRoZSBvbmx5IHdvcmsgdGhhdCBvY2N1cnMgaW4gdGhlIG1haW4gdGhyZWFkLlxuICpcbiAqICAtIFdlIG5vcm1hbGl6ZSBhbmQgZGUtZHVwbGljYXRlIGV2ZW50cyB0byBhY2NvdW50IGZvciBicm93c2VyIHF1aXJrcy4gVGhpc1xuICogICAgbWF5IGJlIGRvbmUgaW4gdGhlIHdvcmtlciB0aHJlYWQuXG4gKlxuICogIC0gRm9yd2FyZCB0aGVzZSBuYXRpdmUgZXZlbnRzICh3aXRoIHRoZSBhc3NvY2lhdGVkIHRvcC1sZXZlbCB0eXBlIHVzZWQgdG9cbiAqICAgIHRyYXAgaXQpIHRvIGBFdmVudFBsdWdpbkh1YmAsIHdoaWNoIGluIHR1cm4gd2lsbCBhc2sgcGx1Z2lucyBpZiB0aGV5IHdhbnRcbiAqICAgIHRvIGV4dHJhY3QgYW55IHN5bnRoZXRpYyBldmVudHMuXG4gKlxuICogIC0gVGhlIGBFdmVudFBsdWdpbkh1YmAgd2lsbCB0aGVuIHByb2Nlc3MgZWFjaCBldmVudCBieSBhbm5vdGF0aW5nIHRoZW0gd2l0aFxuICogICAgXCJkaXNwYXRjaGVzXCIsIGEgc2VxdWVuY2Ugb2YgbGlzdGVuZXJzIGFuZCBJRHMgdGhhdCBjYXJlIGFib3V0IHRoYXQgZXZlbnQuXG4gKlxuICogIC0gVGhlIGBFdmVudFBsdWdpbkh1YmAgdGhlbiBkaXNwYXRjaGVzIHRoZSBldmVudHMuXG4gKlxuICogT3ZlcnZpZXcgb2YgUmVhY3QgYW5kIHRoZSBldmVudCBzeXN0ZW06XG4gKlxuICogKy0tLS0tLS0tLS0tLSsgICAgLlxuICogfCAgICBET00gICAgIHwgICAgLlxuICogKy0tLS0tLS0tLS0tLSsgICAgLlxuICogICAgICAgfCAgICAgICAgICAgLlxuICogICAgICAgdiAgICAgICAgICAgLlxuICogKy0tLS0tLS0tLS0tLSsgICAgLlxuICogfCBSZWFjdEV2ZW50IHwgICAgLlxuICogfCAgTGlzdGVuZXIgIHwgICAgLlxuICogKy0tLS0tLS0tLS0tLSsgICAgLiAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0rXG4gKiAgICAgICB8ICAgICAgICAgICAuICAgICAgICAgICAgICAgKy0tLS0tLS0tK3xTaW1wbGVFdmVudHxcbiAqICAgICAgIHwgICAgICAgICAgIC4gICAgICAgICAgICAgICB8ICAgICAgICAgfFBsdWdpbiAgICAgfFxuICogKy0tLS0tfC0tLS0tLSsgICAgLiAgICAgICAgICAgICAgIHYgICAgICAgICArLS0tLS0tLS0tLS0rXG4gKiB8ICAgICB8ICAgICAgfCAgICAuICAgICstLS0tLS0tLS0tLS0tLSsgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0rXG4gKiB8ICAgICArLS0tLS0tLS0tLS0uLS0tPnxFdmVudFBsdWdpbkh1YnwgICAgICAgICAgICAgICAgICAgIHwgICAgRXZlbnQgICB8XG4gKiB8ICAgICAgICAgICAgfCAgICAuICAgIHwgICAgICAgICAgICAgIHwgICAgICstLS0tLS0tLS0tLSsgIHwgUHJvcGFnYXRvcnN8XG4gKiB8IFJlYWN0RXZlbnQgfCAgICAuICAgIHwgICAgICAgICAgICAgIHwgICAgIHxUYXBFdmVudCAgIHwgIHwtLS0tLS0tLS0tLS18XG4gKiB8ICBFbWl0dGVyICAgfCAgICAuICAgIHwgICAgICAgICAgICAgIHw8LS0tK3xQbHVnaW4gICAgIHwgIHxvdGhlciBwbHVnaW58XG4gKiB8ICAgICAgICAgICAgfCAgICAuICAgIHwgICAgICAgICAgICAgIHwgICAgICstLS0tLS0tLS0tLSsgIHwgIHV0aWxpdGllcyB8XG4gKiB8ICAgICArLS0tLS0tLS0tLS0uLS0tPnwgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0rXG4gKiB8ICAgICB8ICAgICAgfCAgICAuICAgICstLS0tLS0tLS0tLS0tLStcbiAqICstLS0tLXwtLS0tLS0rICAgIC4gICAgICAgICAgICAgICAgXiAgICAgICAgKy0tLS0tLS0tLS0tK1xuICogICAgICAgfCAgICAgICAgICAgLiAgICAgICAgICAgICAgICB8ICAgICAgICB8RW50ZXIvTGVhdmV8XG4gKiAgICAgICArICAgICAgICAgICAuICAgICAgICAgICAgICAgICstLS0tLS0tK3xQbHVnaW4gICAgIHxcbiAqICstLS0tLS0tLS0tLS0tKyAgIC4gICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tK1xuICogfCBhcHBsaWNhdGlvbiB8ICAgLlxuICogfC0tLS0tLS0tLS0tLS18ICAgLlxuICogfCAgICAgICAgICAgICB8ICAgLlxuICogfCAgICAgICAgICAgICB8ICAgLlxuICogKy0tLS0tLS0tLS0tLS0rICAgLlxuICogICAgICAgICAgICAgICAgICAgLlxuICogICAgUmVhY3QgQ29yZSAgICAgLiAgR2VuZXJhbCBQdXJwb3NlIEV2ZW50IFBsdWdpbiBTeXN0ZW1cbiAqL1xuXG52YXIgaGFzRXZlbnRQYWdlWFk7XG52YXIgYWxyZWFkeUxpc3RlbmluZ1RvID0ge307XG52YXIgaXNNb25pdG9yaW5nU2Nyb2xsVmFsdWUgPSBmYWxzZTtcbnZhciByZWFjdFRvcExpc3RlbmVyc0NvdW50ZXIgPSAwO1xuXG4vLyBGb3IgZXZlbnRzIGxpa2UgJ3N1Ym1pdCcgd2hpY2ggZG9uJ3QgY29uc2lzdGVudGx5IGJ1YmJsZSAod2hpY2ggd2UgdHJhcCBhdCBhXG4vLyBsb3dlciBub2RlIHRoYW4gYGRvY3VtZW50YCksIGJpbmRpbmcgYXQgYGRvY3VtZW50YCB3b3VsZCBjYXVzZSBkdXBsaWNhdGVcbi8vIGV2ZW50cyBzbyB3ZSBkb24ndCBpbmNsdWRlIHRoZW0gaGVyZVxudmFyIHRvcEV2ZW50TWFwcGluZyA9IHtcbiAgdG9wQWJvcnQ6ICdhYm9ydCcsXG4gIHRvcEFuaW1hdGlvbkVuZDogZ2V0VmVuZG9yUHJlZml4ZWRFdmVudE5hbWUoJ2FuaW1hdGlvbmVuZCcpIHx8ICdhbmltYXRpb25lbmQnLFxuICB0b3BBbmltYXRpb25JdGVyYXRpb246IGdldFZlbmRvclByZWZpeGVkRXZlbnROYW1lKCdhbmltYXRpb25pdGVyYXRpb24nKSB8fCAnYW5pbWF0aW9uaXRlcmF0aW9uJyxcbiAgdG9wQW5pbWF0aW9uU3RhcnQ6IGdldFZlbmRvclByZWZpeGVkRXZlbnROYW1lKCdhbmltYXRpb25zdGFydCcpIHx8ICdhbmltYXRpb25zdGFydCcsXG4gIHRvcEJsdXI6ICdibHVyJyxcbiAgdG9wQ2FuUGxheTogJ2NhbnBsYXknLFxuICB0b3BDYW5QbGF5VGhyb3VnaDogJ2NhbnBsYXl0aHJvdWdoJyxcbiAgdG9wQ2hhbmdlOiAnY2hhbmdlJyxcbiAgdG9wQ2xpY2s6ICdjbGljaycsXG4gIHRvcENvbXBvc2l0aW9uRW5kOiAnY29tcG9zaXRpb25lbmQnLFxuICB0b3BDb21wb3NpdGlvblN0YXJ0OiAnY29tcG9zaXRpb25zdGFydCcsXG4gIHRvcENvbXBvc2l0aW9uVXBkYXRlOiAnY29tcG9zaXRpb251cGRhdGUnLFxuICB0b3BDb250ZXh0TWVudTogJ2NvbnRleHRtZW51JyxcbiAgdG9wQ29weTogJ2NvcHknLFxuICB0b3BDdXQ6ICdjdXQnLFxuICB0b3BEb3VibGVDbGljazogJ2RibGNsaWNrJyxcbiAgdG9wRHJhZzogJ2RyYWcnLFxuICB0b3BEcmFnRW5kOiAnZHJhZ2VuZCcsXG4gIHRvcERyYWdFbnRlcjogJ2RyYWdlbnRlcicsXG4gIHRvcERyYWdFeGl0OiAnZHJhZ2V4aXQnLFxuICB0b3BEcmFnTGVhdmU6ICdkcmFnbGVhdmUnLFxuICB0b3BEcmFnT3ZlcjogJ2RyYWdvdmVyJyxcbiAgdG9wRHJhZ1N0YXJ0OiAnZHJhZ3N0YXJ0JyxcbiAgdG9wRHJvcDogJ2Ryb3AnLFxuICB0b3BEdXJhdGlvbkNoYW5nZTogJ2R1cmF0aW9uY2hhbmdlJyxcbiAgdG9wRW1wdGllZDogJ2VtcHRpZWQnLFxuICB0b3BFbmNyeXB0ZWQ6ICdlbmNyeXB0ZWQnLFxuICB0b3BFbmRlZDogJ2VuZGVkJyxcbiAgdG9wRXJyb3I6ICdlcnJvcicsXG4gIHRvcEZvY3VzOiAnZm9jdXMnLFxuICB0b3BJbnB1dDogJ2lucHV0JyxcbiAgdG9wS2V5RG93bjogJ2tleWRvd24nLFxuICB0b3BLZXlQcmVzczogJ2tleXByZXNzJyxcbiAgdG9wS2V5VXA6ICdrZXl1cCcsXG4gIHRvcExvYWRlZERhdGE6ICdsb2FkZWRkYXRhJyxcbiAgdG9wTG9hZGVkTWV0YWRhdGE6ICdsb2FkZWRtZXRhZGF0YScsXG4gIHRvcExvYWRTdGFydDogJ2xvYWRzdGFydCcsXG4gIHRvcE1vdXNlRG93bjogJ21vdXNlZG93bicsXG4gIHRvcE1vdXNlTW92ZTogJ21vdXNlbW92ZScsXG4gIHRvcE1vdXNlT3V0OiAnbW91c2VvdXQnLFxuICB0b3BNb3VzZU92ZXI6ICdtb3VzZW92ZXInLFxuICB0b3BNb3VzZVVwOiAnbW91c2V1cCcsXG4gIHRvcFBhc3RlOiAncGFzdGUnLFxuICB0b3BQYXVzZTogJ3BhdXNlJyxcbiAgdG9wUGxheTogJ3BsYXknLFxuICB0b3BQbGF5aW5nOiAncGxheWluZycsXG4gIHRvcFByb2dyZXNzOiAncHJvZ3Jlc3MnLFxuICB0b3BSYXRlQ2hhbmdlOiAncmF0ZWNoYW5nZScsXG4gIHRvcFNjcm9sbDogJ3Njcm9sbCcsXG4gIHRvcFNlZWtlZDogJ3NlZWtlZCcsXG4gIHRvcFNlZWtpbmc6ICdzZWVraW5nJyxcbiAgdG9wU2VsZWN0aW9uQ2hhbmdlOiAnc2VsZWN0aW9uY2hhbmdlJyxcbiAgdG9wU3RhbGxlZDogJ3N0YWxsZWQnLFxuICB0b3BTdXNwZW5kOiAnc3VzcGVuZCcsXG4gIHRvcFRleHRJbnB1dDogJ3RleHRJbnB1dCcsXG4gIHRvcFRpbWVVcGRhdGU6ICd0aW1ldXBkYXRlJyxcbiAgdG9wVG91Y2hDYW5jZWw6ICd0b3VjaGNhbmNlbCcsXG4gIHRvcFRvdWNoRW5kOiAndG91Y2hlbmQnLFxuICB0b3BUb3VjaE1vdmU6ICd0b3VjaG1vdmUnLFxuICB0b3BUb3VjaFN0YXJ0OiAndG91Y2hzdGFydCcsXG4gIHRvcFRyYW5zaXRpb25FbmQ6IGdldFZlbmRvclByZWZpeGVkRXZlbnROYW1lKCd0cmFuc2l0aW9uZW5kJykgfHwgJ3RyYW5zaXRpb25lbmQnLFxuICB0b3BWb2x1bWVDaGFuZ2U6ICd2b2x1bWVjaGFuZ2UnLFxuICB0b3BXYWl0aW5nOiAnd2FpdGluZycsXG4gIHRvcFdoZWVsOiAnd2hlZWwnXG59O1xuXG4vKipcbiAqIFRvIGVuc3VyZSBubyBjb25mbGljdHMgd2l0aCBvdGhlciBwb3RlbnRpYWwgUmVhY3QgaW5zdGFuY2VzIG9uIHRoZSBwYWdlXG4gKi9cbnZhciB0b3BMaXN0ZW5lcnNJREtleSA9ICdfcmVhY3RMaXN0ZW5lcnNJRCcgKyBTdHJpbmcoTWF0aC5yYW5kb20oKSkuc2xpY2UoMik7XG5cbmZ1bmN0aW9uIGdldExpc3RlbmluZ0ZvckRvY3VtZW50KG1vdW50QXQpIHtcbiAgLy8gSW4gSUU4LCBgbW91bnRBdGAgaXMgYSBob3N0IG9iamVjdCBhbmQgZG9lc24ndCBoYXZlIGBoYXNPd25Qcm9wZXJ0eWBcbiAgLy8gZGlyZWN0bHkuXG4gIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vdW50QXQsIHRvcExpc3RlbmVyc0lES2V5KSkge1xuICAgIG1vdW50QXRbdG9wTGlzdGVuZXJzSURLZXldID0gcmVhY3RUb3BMaXN0ZW5lcnNDb3VudGVyKys7XG4gICAgYWxyZWFkeUxpc3RlbmluZ1RvW21vdW50QXRbdG9wTGlzdGVuZXJzSURLZXldXSA9IHt9O1xuICB9XG4gIHJldHVybiBhbHJlYWR5TGlzdGVuaW5nVG9bbW91bnRBdFt0b3BMaXN0ZW5lcnNJREtleV1dO1xufVxuXG4vKipcbiAqIGBSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXJgIGlzIHVzZWQgdG8gYXR0YWNoIHRvcC1sZXZlbCBldmVudCBsaXN0ZW5lcnMuIEZvclxuICogZXhhbXBsZTpcbiAqXG4gKiAgIEV2ZW50UGx1Z2luSHViLnB1dExpc3RlbmVyKCdteUlEJywgJ29uQ2xpY2snLCBteUZ1bmN0aW9uKTtcbiAqXG4gKiBUaGlzIHdvdWxkIGFsbG9jYXRlIGEgXCJyZWdpc3RyYXRpb25cIiBvZiBgKCdvbkNsaWNrJywgbXlGdW5jdGlvbilgIG9uICdteUlEJy5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqL1xudmFyIFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlciA9IF9hc3NpZ24oe30sIFJlYWN0RXZlbnRFbWl0dGVyTWl4aW4sIHtcbiAgLyoqXG4gICAqIEluamVjdGFibGUgZXZlbnQgYmFja2VuZFxuICAgKi9cbiAgUmVhY3RFdmVudExpc3RlbmVyOiBudWxsLFxuXG4gIGluamVjdGlvbjoge1xuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBSZWFjdEV2ZW50TGlzdGVuZXJcbiAgICAgKi9cbiAgICBpbmplY3RSZWFjdEV2ZW50TGlzdGVuZXI6IGZ1bmN0aW9uIChSZWFjdEV2ZW50TGlzdGVuZXIpIHtcbiAgICAgIFJlYWN0RXZlbnRMaXN0ZW5lci5zZXRIYW5kbGVUb3BMZXZlbChSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXIuaGFuZGxlVG9wTGV2ZWwpO1xuICAgICAgUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyLlJlYWN0RXZlbnRMaXN0ZW5lciA9IFJlYWN0RXZlbnRMaXN0ZW5lcjtcbiAgICB9XG4gIH0sXG5cbiAgLyoqXG4gICAqIFNldHMgd2hldGhlciBvciBub3QgYW55IGNyZWF0ZWQgY2FsbGJhY2tzIHNob3VsZCBiZSBlbmFibGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGVuYWJsZWQgVHJ1ZSBpZiBjYWxsYmFja3Mgc2hvdWxkIGJlIGVuYWJsZWQuXG4gICAqL1xuICBzZXRFbmFibGVkOiBmdW5jdGlvbiAoZW5hYmxlZCkge1xuICAgIGlmIChSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXIuUmVhY3RFdmVudExpc3RlbmVyKSB7XG4gICAgICBSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXIuUmVhY3RFdmVudExpc3RlbmVyLnNldEVuYWJsZWQoZW5hYmxlZCk7XG4gICAgfVxuICB9LFxuXG4gIC8qKlxuICAgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIGNhbGxiYWNrcyBhcmUgZW5hYmxlZC5cbiAgICovXG4gIGlzRW5hYmxlZDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiAhIShSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXIuUmVhY3RFdmVudExpc3RlbmVyICYmIFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlci5SZWFjdEV2ZW50TGlzdGVuZXIuaXNFbmFibGVkKCkpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBXZSBsaXN0ZW4gZm9yIGJ1YmJsZWQgdG91Y2ggZXZlbnRzIG9uIHRoZSBkb2N1bWVudCBvYmplY3QuXG4gICAqXG4gICAqIEZpcmVmb3ggdjguMDEgKGFuZCBwb3NzaWJseSBvdGhlcnMpIGV4aGliaXRlZCBzdHJhbmdlIGJlaGF2aW9yIHdoZW5cbiAgICogbW91bnRpbmcgYG9ubW91c2Vtb3ZlYCBldmVudHMgYXQgc29tZSBub2RlIHRoYXQgd2FzIG5vdCB0aGUgZG9jdW1lbnRcbiAgICogZWxlbWVudC4gVGhlIHN5bXB0b21zIHdlcmUgdGhhdCBpZiB5b3VyIG1vdXNlIGlzIG5vdCBtb3Zpbmcgb3ZlciBzb21ldGhpbmdcbiAgICogY29udGFpbmVkIHdpdGhpbiB0aGF0IG1vdW50IHBvaW50IChmb3IgZXhhbXBsZSBvbiB0aGUgYmFja2dyb3VuZCkgdGhlXG4gICAqIHRvcC1sZXZlbCBsaXN0ZW5lcnMgZm9yIGBvbm1vdXNlbW92ZWAgd29uJ3QgYmUgY2FsbGVkLiBIb3dldmVyLCBpZiB5b3VcbiAgICogcmVnaXN0ZXIgdGhlIGBtb3VzZW1vdmVgIG9uIHRoZSBkb2N1bWVudCBvYmplY3QsIHRoZW4gaXQgd2lsbCBvZiBjb3Vyc2VcbiAgICogY2F0Y2ggYWxsIGBtb3VzZW1vdmVgcy4gVGhpcyBhbG9uZyB3aXRoIGlPUyBxdWlya3MsIGp1c3RpZmllcyByZXN0cmljdGluZ1xuICAgKiB0b3AtbGV2ZWwgbGlzdGVuZXJzIHRvIHRoZSBkb2N1bWVudCBvYmplY3Qgb25seSwgYXQgbGVhc3QgZm9yIHRoZXNlXG4gICAqIG1vdmVtZW50IHR5cGVzIG9mIGV2ZW50cyBhbmQgcG9zc2libHkgYWxsIGV2ZW50cy5cbiAgICpcbiAgICogQHNlZSBodHRwOi8vd3d3LnF1aXJrc21vZGUub3JnL2Jsb2cvYXJjaGl2ZXMvMjAxMC8wOS9jbGlja19ldmVudF9kZWwuaHRtbFxuICAgKlxuICAgKiBBbHNvLCBga2V5dXBgL2BrZXlwcmVzc2AvYGtleWRvd25gIGRvIG5vdCBidWJibGUgdG8gdGhlIHdpbmRvdyBvbiBJRSwgYnV0XG4gICAqIHRoZXkgYnViYmxlIHRvIGRvY3VtZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcmVnaXN0cmF0aW9uTmFtZSBOYW1lIG9mIGxpc3RlbmVyIChlLmcuIGBvbkNsaWNrYCkuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBjb250ZW50RG9jdW1lbnRIYW5kbGUgRG9jdW1lbnQgd2hpY2ggb3ducyB0aGUgY29udGFpbmVyXG4gICAqL1xuICBsaXN0ZW5UbzogZnVuY3Rpb24gKHJlZ2lzdHJhdGlvbk5hbWUsIGNvbnRlbnREb2N1bWVudEhhbmRsZSkge1xuICAgIHZhciBtb3VudEF0ID0gY29udGVudERvY3VtZW50SGFuZGxlO1xuICAgIHZhciBpc0xpc3RlbmluZyA9IGdldExpc3RlbmluZ0ZvckRvY3VtZW50KG1vdW50QXQpO1xuICAgIHZhciBkZXBlbmRlbmNpZXMgPSBFdmVudFBsdWdpblJlZ2lzdHJ5LnJlZ2lzdHJhdGlvbk5hbWVEZXBlbmRlbmNpZXNbcmVnaXN0cmF0aW9uTmFtZV07XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRlcGVuZGVuY2llcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGRlcGVuZGVuY3kgPSBkZXBlbmRlbmNpZXNbaV07XG4gICAgICBpZiAoIShpc0xpc3RlbmluZy5oYXNPd25Qcm9wZXJ0eShkZXBlbmRlbmN5KSAmJiBpc0xpc3RlbmluZ1tkZXBlbmRlbmN5XSkpIHtcbiAgICAgICAgaWYgKGRlcGVuZGVuY3kgPT09ICd0b3BXaGVlbCcpIHtcbiAgICAgICAgICBpZiAoaXNFdmVudFN1cHBvcnRlZCgnd2hlZWwnKSkge1xuICAgICAgICAgICAgUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyLlJlYWN0RXZlbnRMaXN0ZW5lci50cmFwQnViYmxlZEV2ZW50KCd0b3BXaGVlbCcsICd3aGVlbCcsIG1vdW50QXQpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoaXNFdmVudFN1cHBvcnRlZCgnbW91c2V3aGVlbCcpKSB7XG4gICAgICAgICAgICBSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXIuUmVhY3RFdmVudExpc3RlbmVyLnRyYXBCdWJibGVkRXZlbnQoJ3RvcFdoZWVsJywgJ21vdXNld2hlZWwnLCBtb3VudEF0KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gRmlyZWZveCBuZWVkcyB0byBjYXB0dXJlIGEgZGlmZmVyZW50IG1vdXNlIHNjcm9sbCBldmVudC5cbiAgICAgICAgICAgIC8vIEBzZWUgaHR0cDovL3d3dy5xdWlya3Ntb2RlLm9yZy9kb20vZXZlbnRzL3Rlc3RzL3Njcm9sbC5odG1sXG4gICAgICAgICAgICBSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXIuUmVhY3RFdmVudExpc3RlbmVyLnRyYXBCdWJibGVkRXZlbnQoJ3RvcFdoZWVsJywgJ0RPTU1vdXNlU2Nyb2xsJywgbW91bnRBdCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGRlcGVuZGVuY3kgPT09ICd0b3BTY3JvbGwnKSB7XG4gICAgICAgICAgaWYgKGlzRXZlbnRTdXBwb3J0ZWQoJ3Njcm9sbCcsIHRydWUpKSB7XG4gICAgICAgICAgICBSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXIuUmVhY3RFdmVudExpc3RlbmVyLnRyYXBDYXB0dXJlZEV2ZW50KCd0b3BTY3JvbGwnLCAnc2Nyb2xsJywgbW91bnRBdCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlci5SZWFjdEV2ZW50TGlzdGVuZXIudHJhcEJ1YmJsZWRFdmVudCgndG9wU2Nyb2xsJywgJ3Njcm9sbCcsIFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlci5SZWFjdEV2ZW50TGlzdGVuZXIuV0lORE9XX0hBTkRMRSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGRlcGVuZGVuY3kgPT09ICd0b3BGb2N1cycgfHwgZGVwZW5kZW5jeSA9PT0gJ3RvcEJsdXInKSB7XG4gICAgICAgICAgaWYgKGlzRXZlbnRTdXBwb3J0ZWQoJ2ZvY3VzJywgdHJ1ZSkpIHtcbiAgICAgICAgICAgIFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlci5SZWFjdEV2ZW50TGlzdGVuZXIudHJhcENhcHR1cmVkRXZlbnQoJ3RvcEZvY3VzJywgJ2ZvY3VzJywgbW91bnRBdCk7XG4gICAgICAgICAgICBSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXIuUmVhY3RFdmVudExpc3RlbmVyLnRyYXBDYXB0dXJlZEV2ZW50KCd0b3BCbHVyJywgJ2JsdXInLCBtb3VudEF0KTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGlzRXZlbnRTdXBwb3J0ZWQoJ2ZvY3VzaW4nKSkge1xuICAgICAgICAgICAgLy8gSUUgaGFzIGBmb2N1c2luYCBhbmQgYGZvY3Vzb3V0YCBldmVudHMgd2hpY2ggYnViYmxlLlxuICAgICAgICAgICAgLy8gQHNlZSBodHRwOi8vd3d3LnF1aXJrc21vZGUub3JnL2Jsb2cvYXJjaGl2ZXMvMjAwOC8wNC9kZWxlZ2F0aW5nX3RoZS5odG1sXG4gICAgICAgICAgICBSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXIuUmVhY3RFdmVudExpc3RlbmVyLnRyYXBCdWJibGVkRXZlbnQoJ3RvcEZvY3VzJywgJ2ZvY3VzaW4nLCBtb3VudEF0KTtcbiAgICAgICAgICAgIFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlci5SZWFjdEV2ZW50TGlzdGVuZXIudHJhcEJ1YmJsZWRFdmVudCgndG9wQmx1cicsICdmb2N1c291dCcsIG1vdW50QXQpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIHRvIG1ha2Ugc3VyZSBibHVyIGFuZCBmb2N1cyBldmVudCBsaXN0ZW5lcnMgYXJlIG9ubHkgYXR0YWNoZWQgb25jZVxuICAgICAgICAgIGlzTGlzdGVuaW5nLnRvcEJsdXIgPSB0cnVlO1xuICAgICAgICAgIGlzTGlzdGVuaW5nLnRvcEZvY3VzID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmICh0b3BFdmVudE1hcHBpbmcuaGFzT3duUHJvcGVydHkoZGVwZW5kZW5jeSkpIHtcbiAgICAgICAgICBSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXIuUmVhY3RFdmVudExpc3RlbmVyLnRyYXBCdWJibGVkRXZlbnQoZGVwZW5kZW5jeSwgdG9wRXZlbnRNYXBwaW5nW2RlcGVuZGVuY3ldLCBtb3VudEF0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlzTGlzdGVuaW5nW2RlcGVuZGVuY3ldID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgdHJhcEJ1YmJsZWRFdmVudDogZnVuY3Rpb24gKHRvcExldmVsVHlwZSwgaGFuZGxlckJhc2VOYW1lLCBoYW5kbGUpIHtcbiAgICByZXR1cm4gUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyLlJlYWN0RXZlbnRMaXN0ZW5lci50cmFwQnViYmxlZEV2ZW50KHRvcExldmVsVHlwZSwgaGFuZGxlckJhc2VOYW1lLCBoYW5kbGUpO1xuICB9LFxuXG4gIHRyYXBDYXB0dXJlZEV2ZW50OiBmdW5jdGlvbiAodG9wTGV2ZWxUeXBlLCBoYW5kbGVyQmFzZU5hbWUsIGhhbmRsZSkge1xuICAgIHJldHVybiBSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXIuUmVhY3RFdmVudExpc3RlbmVyLnRyYXBDYXB0dXJlZEV2ZW50KHRvcExldmVsVHlwZSwgaGFuZGxlckJhc2VOYW1lLCBoYW5kbGUpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBQcm90ZWN0IGFnYWluc3QgZG9jdW1lbnQuY3JlYXRlRXZlbnQoKSByZXR1cm5pbmcgbnVsbFxuICAgKiBTb21lIHBvcHVwIGJsb2NrZXIgZXh0ZW5zaW9ucyBhcHBlYXIgdG8gZG8gdGhpczpcbiAgICogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy82ODg3XG4gICAqL1xuICBzdXBwb3J0c0V2ZW50UGFnZVhZOiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCFkb2N1bWVudC5jcmVhdGVFdmVudCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB2YXIgZXYgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnTW91c2VFdmVudCcpO1xuICAgIHJldHVybiBldiAhPSBudWxsICYmICdwYWdlWCcgaW4gZXY7XG4gIH0sXG5cbiAgLyoqXG4gICAqIExpc3RlbnMgdG8gd2luZG93IHNjcm9sbCBhbmQgcmVzaXplIGV2ZW50cy4gV2UgY2FjaGUgc2Nyb2xsIHZhbHVlcyBzbyB0aGF0XG4gICAqIGFwcGxpY2F0aW9uIGNvZGUgY2FuIGFjY2VzcyB0aGVtIHdpdGhvdXQgdHJpZ2dlcmluZyByZWZsb3dzLlxuICAgKlxuICAgKiBWaWV3cG9ydE1ldHJpY3MgaXMgb25seSB1c2VkIGJ5IFN5bnRoZXRpY01vdXNlL1RvdWNoRXZlbnQgYW5kIG9ubHkgd2hlblxuICAgKiBwYWdlWC9wYWdlWSBpc24ndCBzdXBwb3J0ZWQgKGxlZ2FjeSBicm93c2VycykuXG4gICAqXG4gICAqIE5PVEU6IFNjcm9sbCBldmVudHMgZG8gbm90IGJ1YmJsZS5cbiAgICpcbiAgICogQHNlZSBodHRwOi8vd3d3LnF1aXJrc21vZGUub3JnL2RvbS9ldmVudHMvc2Nyb2xsLmh0bWxcbiAgICovXG4gIGVuc3VyZVNjcm9sbFZhbHVlTW9uaXRvcmluZzogZnVuY3Rpb24gKCkge1xuICAgIGlmIChoYXNFdmVudFBhZ2VYWSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBoYXNFdmVudFBhZ2VYWSA9IFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlci5zdXBwb3J0c0V2ZW50UGFnZVhZKCk7XG4gICAgfVxuICAgIGlmICghaGFzRXZlbnRQYWdlWFkgJiYgIWlzTW9uaXRvcmluZ1Njcm9sbFZhbHVlKSB7XG4gICAgICB2YXIgcmVmcmVzaCA9IFZpZXdwb3J0TWV0cmljcy5yZWZyZXNoU2Nyb2xsVmFsdWVzO1xuICAgICAgUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyLlJlYWN0RXZlbnRMaXN0ZW5lci5tb25pdG9yU2Nyb2xsVmFsdWUocmVmcmVzaCk7XG4gICAgICBpc01vbml0b3JpbmdTY3JvbGxWYWx1ZSA9IHRydWU7XG4gICAgfVxuICB9XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXI7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1kb20vbGliL1JlYWN0QnJvd3NlckV2ZW50RW1pdHRlci5qcyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBTeW50aGV0aWNVSUV2ZW50ID0gcmVxdWlyZSgnLi9TeW50aGV0aWNVSUV2ZW50Jyk7XG52YXIgVmlld3BvcnRNZXRyaWNzID0gcmVxdWlyZSgnLi9WaWV3cG9ydE1ldHJpY3MnKTtcblxudmFyIGdldEV2ZW50TW9kaWZpZXJTdGF0ZSA9IHJlcXVpcmUoJy4vZ2V0RXZlbnRNb2RpZmllclN0YXRlJyk7XG5cbi8qKlxuICogQGludGVyZmFjZSBNb3VzZUV2ZW50XG4gKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0zLUV2ZW50cy9cbiAqL1xudmFyIE1vdXNlRXZlbnRJbnRlcmZhY2UgPSB7XG4gIHNjcmVlblg6IG51bGwsXG4gIHNjcmVlblk6IG51bGwsXG4gIGNsaWVudFg6IG51bGwsXG4gIGNsaWVudFk6IG51bGwsXG4gIGN0cmxLZXk6IG51bGwsXG4gIHNoaWZ0S2V5OiBudWxsLFxuICBhbHRLZXk6IG51bGwsXG4gIG1ldGFLZXk6IG51bGwsXG4gIGdldE1vZGlmaWVyU3RhdGU6IGdldEV2ZW50TW9kaWZpZXJTdGF0ZSxcbiAgYnV0dG9uOiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAvLyBXZWJraXQsIEZpcmVmb3gsIElFOStcbiAgICAvLyB3aGljaDogIDEgMiAzXG4gICAgLy8gYnV0dG9uOiAwIDEgMiAoc3RhbmRhcmQpXG4gICAgdmFyIGJ1dHRvbiA9IGV2ZW50LmJ1dHRvbjtcbiAgICBpZiAoJ3doaWNoJyBpbiBldmVudCkge1xuICAgICAgcmV0dXJuIGJ1dHRvbjtcbiAgICB9XG4gICAgLy8gSUU8OVxuICAgIC8vIHdoaWNoOiAgdW5kZWZpbmVkXG4gICAgLy8gYnV0dG9uOiAwIDAgMFxuICAgIC8vIGJ1dHRvbjogMSA0IDIgKG9ubW91c2V1cClcbiAgICByZXR1cm4gYnV0dG9uID09PSAyID8gMiA6IGJ1dHRvbiA9PT0gNCA/IDEgOiAwO1xuICB9LFxuICBidXR0b25zOiBudWxsLFxuICByZWxhdGVkVGFyZ2V0OiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICByZXR1cm4gZXZlbnQucmVsYXRlZFRhcmdldCB8fCAoZXZlbnQuZnJvbUVsZW1lbnQgPT09IGV2ZW50LnNyY0VsZW1lbnQgPyBldmVudC50b0VsZW1lbnQgOiBldmVudC5mcm9tRWxlbWVudCk7XG4gIH0sXG4gIC8vIFwiUHJvcHJpZXRhcnlcIiBJbnRlcmZhY2UuXG4gIHBhZ2VYOiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICByZXR1cm4gJ3BhZ2VYJyBpbiBldmVudCA/IGV2ZW50LnBhZ2VYIDogZXZlbnQuY2xpZW50WCArIFZpZXdwb3J0TWV0cmljcy5jdXJyZW50U2Nyb2xsTGVmdDtcbiAgfSxcbiAgcGFnZVk6IGZ1bmN0aW9uIChldmVudCkge1xuICAgIHJldHVybiAncGFnZVknIGluIGV2ZW50ID8gZXZlbnQucGFnZVkgOiBldmVudC5jbGllbnRZICsgVmlld3BvcnRNZXRyaWNzLmN1cnJlbnRTY3JvbGxUb3A7XG4gIH1cbn07XG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IGRpc3BhdGNoQ29uZmlnIENvbmZpZ3VyYXRpb24gdXNlZCB0byBkaXNwYXRjaCB0aGlzIGV2ZW50LlxuICogQHBhcmFtIHtzdHJpbmd9IGRpc3BhdGNoTWFya2VyIE1hcmtlciBpZGVudGlmeWluZyB0aGUgZXZlbnQgdGFyZ2V0LlxuICogQHBhcmFtIHtvYmplY3R9IG5hdGl2ZUV2ZW50IE5hdGl2ZSBicm93c2VyIGV2ZW50LlxuICogQGV4dGVuZHMge1N5bnRoZXRpY1VJRXZlbnR9XG4gKi9cbmZ1bmN0aW9uIFN5bnRoZXRpY01vdXNlRXZlbnQoZGlzcGF0Y2hDb25maWcsIGRpc3BhdGNoTWFya2VyLCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpIHtcbiAgcmV0dXJuIFN5bnRoZXRpY1VJRXZlbnQuY2FsbCh0aGlzLCBkaXNwYXRjaENvbmZpZywgZGlzcGF0Y2hNYXJrZXIsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCk7XG59XG5cblN5bnRoZXRpY1VJRXZlbnQuYXVnbWVudENsYXNzKFN5bnRoZXRpY01vdXNlRXZlbnQsIE1vdXNlRXZlbnRJbnRlcmZhY2UpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN5bnRoZXRpY01vdXNlRXZlbnQ7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1kb20vbGliL1N5bnRoZXRpY01vdXNlRXZlbnQuanMiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBfcHJvZEludmFyaWFudCA9IHJlcXVpcmUoJy4vcmVhY3RQcm9kSW52YXJpYW50Jyk7XG5cbnZhciBpbnZhcmlhbnQgPSByZXF1aXJlKCdmYmpzL2xpYi9pbnZhcmlhbnQnKTtcblxudmFyIE9CU0VSVkVEX0VSUk9SID0ge307XG5cbi8qKlxuICogYFRyYW5zYWN0aW9uYCBjcmVhdGVzIGEgYmxhY2sgYm94IHRoYXQgaXMgYWJsZSB0byB3cmFwIGFueSBtZXRob2Qgc3VjaCB0aGF0XG4gKiBjZXJ0YWluIGludmFyaWFudHMgYXJlIG1haW50YWluZWQgYmVmb3JlIGFuZCBhZnRlciB0aGUgbWV0aG9kIGlzIGludm9rZWRcbiAqIChFdmVuIGlmIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24gd2hpbGUgaW52b2tpbmcgdGhlIHdyYXBwZWQgbWV0aG9kKS4gV2hvZXZlclxuICogaW5zdGFudGlhdGVzIGEgdHJhbnNhY3Rpb24gY2FuIHByb3ZpZGUgZW5mb3JjZXJzIG9mIHRoZSBpbnZhcmlhbnRzIGF0XG4gKiBjcmVhdGlvbiB0aW1lLiBUaGUgYFRyYW5zYWN0aW9uYCBjbGFzcyBpdHNlbGYgd2lsbCBzdXBwbHkgb25lIGFkZGl0aW9uYWxcbiAqIGF1dG9tYXRpYyBpbnZhcmlhbnQgZm9yIHlvdSAtIHRoZSBpbnZhcmlhbnQgdGhhdCBhbnkgdHJhbnNhY3Rpb24gaW5zdGFuY2VcbiAqIHNob3VsZCBub3QgYmUgcnVuIHdoaWxlIGl0IGlzIGFscmVhZHkgYmVpbmcgcnVuLiBZb3Ugd291bGQgdHlwaWNhbGx5IGNyZWF0ZSBhXG4gKiBzaW5nbGUgaW5zdGFuY2Ugb2YgYSBgVHJhbnNhY3Rpb25gIGZvciByZXVzZSBtdWx0aXBsZSB0aW1lcywgdGhhdCBwb3RlbnRpYWxseVxuICogaXMgdXNlZCB0byB3cmFwIHNldmVyYWwgZGlmZmVyZW50IG1ldGhvZHMuIFdyYXBwZXJzIGFyZSBleHRyZW1lbHkgc2ltcGxlIC1cbiAqIHRoZXkgb25seSByZXF1aXJlIGltcGxlbWVudGluZyB0d28gbWV0aG9kcy5cbiAqXG4gKiA8cHJlPlxuICogICAgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJzIChpbmplY3RlZCBhdCBjcmVhdGlvbiB0aW1lKVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgICAgICAgICtcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICB8XG4gKiAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tK1xuICogICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgIHYgICAgICAgIHwgICAgICAgICAgICAgIHxcbiAqICAgICAgICAgICAgICAgICAgICB8ICAgICAgKy0tLS0tLS0tLS0tLS0tLSsgICB8ICAgICAgICAgICAgICB8XG4gKiAgICAgICAgICAgICAgICAgICAgfCAgICstLXwgICAgd3JhcHBlcjEgICB8LS0tfC0tLS0rICAgICAgICAgfFxuICogICAgICAgICAgICAgICAgICAgIHwgICB8ICArLS0tLS0tLS0tLS0tLS0tKyAgIHYgICAgfCAgICAgICAgIHxcbiAqICAgICAgICAgICAgICAgICAgICB8ICAgfCAgICAgICAgICArLS0tLS0tLS0tLS0tLSsgIHwgICAgICAgICB8XG4gKiAgICAgICAgICAgICAgICAgICAgfCAgIHwgICAgICstLS0tfCAgIHdyYXBwZXIyICB8LS0tLS0tLS0rICAgfFxuICogICAgICAgICAgICAgICAgICAgIHwgICB8ICAgICB8ICAgICstLS0tLS0tLS0tLS0tKyAgfCAgICAgfCAgIHxcbiAqICAgICAgICAgICAgICAgICAgICB8ICAgfCAgICAgfCAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgICB8XG4gKiAgICAgICAgICAgICAgICAgICAgfCAgIHYgICAgIHYgICAgICAgICAgICAgICAgICAgICB2ICAgICB2ICAgfCB3cmFwcGVyXG4gKiAgICAgICAgICAgICAgICAgICAgfCArLS0tKyArLS0tKyAgICstLS0tLS0tLS0rICAgKy0tLSsgKy0tLSsgfCBpbnZhcmlhbnRzXG4gKiBwZXJmb3JtKGFueU1ldGhvZCkgfCB8ICAgfCB8ICAgfCAgIHwgICAgICAgICB8ICAgfCAgIHwgfCAgIHwgfCBtYWludGFpbmVkXG4gKiArLS0tLS0tLS0tLS0tLS0tLS0+fC18LS0tfC18LS0tfC0tPnxhbnlNZXRob2R8LS0tfC0tLXwtfC0tLXwtfC0tLS0tLS0tPlxuICogICAgICAgICAgICAgICAgICAgIHwgfCAgIHwgfCAgIHwgICB8ICAgICAgICAgfCAgIHwgICB8IHwgICB8IHxcbiAqICAgICAgICAgICAgICAgICAgICB8IHwgICB8IHwgICB8ICAgfCAgICAgICAgIHwgICB8ICAgfCB8ICAgfCB8XG4gKiAgICAgICAgICAgICAgICAgICAgfCB8ICAgfCB8ICAgfCAgIHwgICAgICAgICB8ICAgfCAgIHwgfCAgIHwgfFxuICogICAgICAgICAgICAgICAgICAgIHwgKy0tLSsgKy0tLSsgICArLS0tLS0tLS0tKyAgICstLS0rICstLS0rIHxcbiAqICAgICAgICAgICAgICAgICAgICB8ICBpbml0aWFsaXplICAgICAgICAgICAgICAgICAgICBjbG9zZSAgICB8XG4gKiAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICogPC9wcmU+XG4gKlxuICogVXNlIGNhc2VzOlxuICogLSBQcmVzZXJ2aW5nIHRoZSBpbnB1dCBzZWxlY3Rpb24gcmFuZ2VzIGJlZm9yZS9hZnRlciByZWNvbmNpbGlhdGlvbi5cbiAqICAgUmVzdG9yaW5nIHNlbGVjdGlvbiBldmVuIGluIHRoZSBldmVudCBvZiBhbiB1bmV4cGVjdGVkIGVycm9yLlxuICogLSBEZWFjdGl2YXRpbmcgZXZlbnRzIHdoaWxlIHJlYXJyYW5naW5nIHRoZSBET00sIHByZXZlbnRpbmcgYmx1cnMvZm9jdXNlcyxcbiAqICAgd2hpbGUgZ3VhcmFudGVlaW5nIHRoYXQgYWZ0ZXJ3YXJkcywgdGhlIGV2ZW50IHN5c3RlbSBpcyByZWFjdGl2YXRlZC5cbiAqIC0gRmx1c2hpbmcgYSBxdWV1ZSBvZiBjb2xsZWN0ZWQgRE9NIG11dGF0aW9ucyB0byB0aGUgbWFpbiBVSSB0aHJlYWQgYWZ0ZXIgYVxuICogICByZWNvbmNpbGlhdGlvbiB0YWtlcyBwbGFjZSBpbiBhIHdvcmtlciB0aHJlYWQuXG4gKiAtIEludm9raW5nIGFueSBjb2xsZWN0ZWQgYGNvbXBvbmVudERpZFVwZGF0ZWAgY2FsbGJhY2tzIGFmdGVyIHJlbmRlcmluZyBuZXdcbiAqICAgY29udGVudC5cbiAqIC0gKEZ1dHVyZSB1c2UgY2FzZSk6IFdyYXBwaW5nIHBhcnRpY3VsYXIgZmx1c2hlcyBvZiB0aGUgYFJlYWN0V29ya2VyYCBxdWV1ZVxuICogICB0byBwcmVzZXJ2ZSB0aGUgYHNjcm9sbFRvcGAgKGFuIGF1dG9tYXRpYyBzY3JvbGwgYXdhcmUgRE9NKS5cbiAqIC0gKEZ1dHVyZSB1c2UgY2FzZSk6IExheW91dCBjYWxjdWxhdGlvbnMgYmVmb3JlIGFuZCBhZnRlciBET00gdXBkYXRlcy5cbiAqXG4gKiBUcmFuc2FjdGlvbmFsIHBsdWdpbiBBUEk6XG4gKiAtIEEgbW9kdWxlIHRoYXQgaGFzIGFuIGBpbml0aWFsaXplYCBtZXRob2QgdGhhdCByZXR1cm5zIGFueSBwcmVjb21wdXRhdGlvbi5cbiAqIC0gYW5kIGEgYGNsb3NlYCBtZXRob2QgdGhhdCBhY2NlcHRzIHRoZSBwcmVjb21wdXRhdGlvbi4gYGNsb3NlYCBpcyBpbnZva2VkXG4gKiAgIHdoZW4gdGhlIHdyYXBwZWQgcHJvY2VzcyBpcyBjb21wbGV0ZWQsIG9yIGhhcyBmYWlsZWQuXG4gKlxuICogQHBhcmFtIHtBcnJheTxUcmFuc2FjdGlvbmFsV3JhcHBlcj59IHRyYW5zYWN0aW9uV3JhcHBlciBXcmFwcGVyIG1vZHVsZXNcbiAqIHRoYXQgaW1wbGVtZW50IGBpbml0aWFsaXplYCBhbmQgYGNsb3NlYC5cbiAqIEByZXR1cm4ge1RyYW5zYWN0aW9ufSBTaW5nbGUgdHJhbnNhY3Rpb24gZm9yIHJldXNlIGluIHRocmVhZC5cbiAqXG4gKiBAY2xhc3MgVHJhbnNhY3Rpb25cbiAqL1xudmFyIFRyYW5zYWN0aW9uSW1wbCA9IHtcbiAgLyoqXG4gICAqIFNldHMgdXAgdGhpcyBpbnN0YW5jZSBzbyB0aGF0IGl0IGlzIHByZXBhcmVkIGZvciBjb2xsZWN0aW5nIG1ldHJpY3MuIERvZXNcbiAgICogc28gc3VjaCB0aGF0IHRoaXMgc2V0dXAgbWV0aG9kIG1heSBiZSB1c2VkIG9uIGFuIGluc3RhbmNlIHRoYXQgaXMgYWxyZWFkeVxuICAgKiBpbml0aWFsaXplZCwgaW4gYSB3YXkgdGhhdCBkb2VzIG5vdCBjb25zdW1lIGFkZGl0aW9uYWwgbWVtb3J5IHVwb24gcmV1c2UuXG4gICAqIFRoYXQgY2FuIGJlIHVzZWZ1bCBpZiB5b3UgZGVjaWRlIHRvIG1ha2UgeW91ciBzdWJjbGFzcyBvZiB0aGlzIG1peGluIGFcbiAgICogXCJQb29sZWRDbGFzc1wiLlxuICAgKi9cbiAgcmVpbml0aWFsaXplVHJhbnNhY3Rpb246IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLnRyYW5zYWN0aW9uV3JhcHBlcnMgPSB0aGlzLmdldFRyYW5zYWN0aW9uV3JhcHBlcnMoKTtcbiAgICBpZiAodGhpcy53cmFwcGVySW5pdERhdGEpIHtcbiAgICAgIHRoaXMud3JhcHBlckluaXREYXRhLmxlbmd0aCA9IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMud3JhcHBlckluaXREYXRhID0gW107XG4gICAgfVxuICAgIHRoaXMuX2lzSW5UcmFuc2FjdGlvbiA9IGZhbHNlO1xuICB9LFxuXG4gIF9pc0luVHJhbnNhY3Rpb246IGZhbHNlLFxuXG4gIC8qKlxuICAgKiBAYWJzdHJhY3RcbiAgICogQHJldHVybiB7QXJyYXk8VHJhbnNhY3Rpb25XcmFwcGVyPn0gQXJyYXkgb2YgdHJhbnNhY3Rpb24gd3JhcHBlcnMuXG4gICAqL1xuICBnZXRUcmFuc2FjdGlvbldyYXBwZXJzOiBudWxsLFxuXG4gIGlzSW5UcmFuc2FjdGlvbjogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiAhIXRoaXMuX2lzSW5UcmFuc2FjdGlvbjtcbiAgfSxcblxuICAvKiBlc2xpbnQtZGlzYWJsZSBzcGFjZS1iZWZvcmUtZnVuY3Rpb24tcGFyZW4gKi9cblxuICAvKipcbiAgICogRXhlY3V0ZXMgdGhlIGZ1bmN0aW9uIHdpdGhpbiBhIHNhZmV0eSB3aW5kb3cuIFVzZSB0aGlzIGZvciB0aGUgdG9wIGxldmVsXG4gICAqIG1ldGhvZHMgdGhhdCByZXN1bHQgaW4gbGFyZ2UgYW1vdW50cyBvZiBjb21wdXRhdGlvbi9tdXRhdGlvbnMgdGhhdCB3b3VsZFxuICAgKiBuZWVkIHRvIGJlIHNhZmV0eSBjaGVja2VkLiBUaGUgb3B0aW9uYWwgYXJndW1lbnRzIGhlbHBzIHByZXZlbnQgdGhlIG5lZWRcbiAgICogdG8gYmluZCBpbiBtYW55IGNhc2VzLlxuICAgKlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBtZXRob2QgTWVtYmVyIG9mIHNjb3BlIHRvIGNhbGwuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBzY29wZSBTY29wZSB0byBpbnZva2UgZnJvbS5cbiAgICogQHBhcmFtIHtPYmplY3Q/PX0gYSBBcmd1bWVudCB0byBwYXNzIHRvIHRoZSBtZXRob2QuXG4gICAqIEBwYXJhbSB7T2JqZWN0Pz19IGIgQXJndW1lbnQgdG8gcGFzcyB0byB0aGUgbWV0aG9kLlxuICAgKiBAcGFyYW0ge09iamVjdD89fSBjIEFyZ3VtZW50IHRvIHBhc3MgdG8gdGhlIG1ldGhvZC5cbiAgICogQHBhcmFtIHtPYmplY3Q/PX0gZCBBcmd1bWVudCB0byBwYXNzIHRvIHRoZSBtZXRob2QuXG4gICAqIEBwYXJhbSB7T2JqZWN0Pz19IGUgQXJndW1lbnQgdG8gcGFzcyB0byB0aGUgbWV0aG9kLlxuICAgKiBAcGFyYW0ge09iamVjdD89fSBmIEFyZ3VtZW50IHRvIHBhc3MgdG8gdGhlIG1ldGhvZC5cbiAgICpcbiAgICogQHJldHVybiB7Kn0gUmV0dXJuIHZhbHVlIGZyb20gYG1ldGhvZGAuXG4gICAqL1xuICBwZXJmb3JtOiBmdW5jdGlvbiAobWV0aG9kLCBzY29wZSwgYSwgYiwgYywgZCwgZSwgZikge1xuICAgIC8qIGVzbGludC1lbmFibGUgc3BhY2UtYmVmb3JlLWZ1bmN0aW9uLXBhcmVuICovXG4gICAgISF0aGlzLmlzSW5UcmFuc2FjdGlvbigpID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IGludmFyaWFudChmYWxzZSwgJ1RyYW5zYWN0aW9uLnBlcmZvcm0oLi4uKTogQ2Fubm90IGluaXRpYWxpemUgYSB0cmFuc2FjdGlvbiB3aGVuIHRoZXJlIGlzIGFscmVhZHkgYW4gb3V0c3RhbmRpbmcgdHJhbnNhY3Rpb24uJykgOiBfcHJvZEludmFyaWFudCgnMjcnKSA6IHZvaWQgMDtcbiAgICB2YXIgZXJyb3JUaHJvd247XG4gICAgdmFyIHJldDtcbiAgICB0cnkge1xuICAgICAgdGhpcy5faXNJblRyYW5zYWN0aW9uID0gdHJ1ZTtcbiAgICAgIC8vIENhdGNoaW5nIGVycm9ycyBtYWtlcyBkZWJ1Z2dpbmcgbW9yZSBkaWZmaWN1bHQsIHNvIHdlIHN0YXJ0IHdpdGhcbiAgICAgIC8vIGVycm9yVGhyb3duIHNldCB0byB0cnVlIGJlZm9yZSBzZXR0aW5nIGl0IHRvIGZhbHNlIGFmdGVyIGNhbGxpbmdcbiAgICAgIC8vIGNsb3NlIC0tIGlmIGl0J3Mgc3RpbGwgc2V0IHRvIHRydWUgaW4gdGhlIGZpbmFsbHkgYmxvY2ssIGl0IG1lYW5zXG4gICAgICAvLyBvbmUgb2YgdGhlc2UgY2FsbHMgdGhyZXcuXG4gICAgICBlcnJvclRocm93biA9IHRydWU7XG4gICAgICB0aGlzLmluaXRpYWxpemVBbGwoMCk7XG4gICAgICByZXQgPSBtZXRob2QuY2FsbChzY29wZSwgYSwgYiwgYywgZCwgZSwgZik7XG4gICAgICBlcnJvclRocm93biA9IGZhbHNlO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoZXJyb3JUaHJvd24pIHtcbiAgICAgICAgICAvLyBJZiBgbWV0aG9kYCB0aHJvd3MsIHByZWZlciB0byBzaG93IHRoYXQgc3RhY2sgdHJhY2Ugb3ZlciBhbnkgdGhyb3duXG4gICAgICAgICAgLy8gYnkgaW52b2tpbmcgYGNsb3NlQWxsYC5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5jbG9zZUFsbCgwKTtcbiAgICAgICAgICB9IGNhdGNoIChlcnIpIHt9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gU2luY2UgYG1ldGhvZGAgZGlkbid0IHRocm93LCB3ZSBkb24ndCB3YW50IHRvIHNpbGVuY2UgdGhlIGV4Y2VwdGlvblxuICAgICAgICAgIC8vIGhlcmUuXG4gICAgICAgICAgdGhpcy5jbG9zZUFsbCgwKTtcbiAgICAgICAgfVxuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdGhpcy5faXNJblRyYW5zYWN0aW9uID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXQ7XG4gIH0sXG5cbiAgaW5pdGlhbGl6ZUFsbDogZnVuY3Rpb24gKHN0YXJ0SW5kZXgpIHtcbiAgICB2YXIgdHJhbnNhY3Rpb25XcmFwcGVycyA9IHRoaXMudHJhbnNhY3Rpb25XcmFwcGVycztcbiAgICBmb3IgKHZhciBpID0gc3RhcnRJbmRleDsgaSA8IHRyYW5zYWN0aW9uV3JhcHBlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciB3cmFwcGVyID0gdHJhbnNhY3Rpb25XcmFwcGVyc1tpXTtcbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIENhdGNoaW5nIGVycm9ycyBtYWtlcyBkZWJ1Z2dpbmcgbW9yZSBkaWZmaWN1bHQsIHNvIHdlIHN0YXJ0IHdpdGggdGhlXG4gICAgICAgIC8vIE9CU0VSVkVEX0VSUk9SIHN0YXRlIGJlZm9yZSBvdmVyd3JpdGluZyBpdCB3aXRoIHRoZSByZWFsIHJldHVybiB2YWx1ZVxuICAgICAgICAvLyBvZiBpbml0aWFsaXplIC0tIGlmIGl0J3Mgc3RpbGwgc2V0IHRvIE9CU0VSVkVEX0VSUk9SIGluIHRoZSBmaW5hbGx5XG4gICAgICAgIC8vIGJsb2NrLCBpdCBtZWFucyB3cmFwcGVyLmluaXRpYWxpemUgdGhyZXcuXG4gICAgICAgIHRoaXMud3JhcHBlckluaXREYXRhW2ldID0gT0JTRVJWRURfRVJST1I7XG4gICAgICAgIHRoaXMud3JhcHBlckluaXREYXRhW2ldID0gd3JhcHBlci5pbml0aWFsaXplID8gd3JhcHBlci5pbml0aWFsaXplLmNhbGwodGhpcykgOiBudWxsO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgaWYgKHRoaXMud3JhcHBlckluaXREYXRhW2ldID09PSBPQlNFUlZFRF9FUlJPUikge1xuICAgICAgICAgIC8vIFRoZSBpbml0aWFsaXplciBmb3Igd3JhcHBlciBpIHRocmV3IGFuIGVycm9yOyBpbml0aWFsaXplIHRoZVxuICAgICAgICAgIC8vIHJlbWFpbmluZyB3cmFwcGVycyBidXQgc2lsZW5jZSBhbnkgZXhjZXB0aW9ucyBmcm9tIHRoZW0gdG8gZW5zdXJlXG4gICAgICAgICAgLy8gdGhhdCB0aGUgZmlyc3QgZXJyb3IgaXMgdGhlIG9uZSB0byBidWJibGUgdXAuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMuaW5pdGlhbGl6ZUFsbChpICsgMSk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyKSB7fVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIC8qKlxuICAgKiBJbnZva2VzIGVhY2ggb2YgYHRoaXMudHJhbnNhY3Rpb25XcmFwcGVycy5jbG9zZVtpXWAgZnVuY3Rpb25zLCBwYXNzaW5nIGludG9cbiAgICogdGhlbSB0aGUgcmVzcGVjdGl2ZSByZXR1cm4gdmFsdWVzIG9mIGB0aGlzLnRyYW5zYWN0aW9uV3JhcHBlcnMuaW5pdFtpXWBcbiAgICogKGBjbG9zZWBycyB0aGF0IGNvcnJlc3BvbmQgdG8gaW5pdGlhbGl6ZXJzIHRoYXQgZmFpbGVkIHdpbGwgbm90IGJlXG4gICAqIGludm9rZWQpLlxuICAgKi9cbiAgY2xvc2VBbGw6IGZ1bmN0aW9uIChzdGFydEluZGV4KSB7XG4gICAgIXRoaXMuaXNJblRyYW5zYWN0aW9uKCkgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAnVHJhbnNhY3Rpb24uY2xvc2VBbGwoKTogQ2Fubm90IGNsb3NlIHRyYW5zYWN0aW9uIHdoZW4gbm9uZSBhcmUgb3Blbi4nKSA6IF9wcm9kSW52YXJpYW50KCcyOCcpIDogdm9pZCAwO1xuICAgIHZhciB0cmFuc2FjdGlvbldyYXBwZXJzID0gdGhpcy50cmFuc2FjdGlvbldyYXBwZXJzO1xuICAgIGZvciAodmFyIGkgPSBzdGFydEluZGV4OyBpIDwgdHJhbnNhY3Rpb25XcmFwcGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHdyYXBwZXIgPSB0cmFuc2FjdGlvbldyYXBwZXJzW2ldO1xuICAgICAgdmFyIGluaXREYXRhID0gdGhpcy53cmFwcGVySW5pdERhdGFbaV07XG4gICAgICB2YXIgZXJyb3JUaHJvd247XG4gICAgICB0cnkge1xuICAgICAgICAvLyBDYXRjaGluZyBlcnJvcnMgbWFrZXMgZGVidWdnaW5nIG1vcmUgZGlmZmljdWx0LCBzbyB3ZSBzdGFydCB3aXRoXG4gICAgICAgIC8vIGVycm9yVGhyb3duIHNldCB0byB0cnVlIGJlZm9yZSBzZXR0aW5nIGl0IHRvIGZhbHNlIGFmdGVyIGNhbGxpbmdcbiAgICAgICAgLy8gY2xvc2UgLS0gaWYgaXQncyBzdGlsbCBzZXQgdG8gdHJ1ZSBpbiB0aGUgZmluYWxseSBibG9jaywgaXQgbWVhbnNcbiAgICAgICAgLy8gd3JhcHBlci5jbG9zZSB0aHJldy5cbiAgICAgICAgZXJyb3JUaHJvd24gPSB0cnVlO1xuICAgICAgICBpZiAoaW5pdERhdGEgIT09IE9CU0VSVkVEX0VSUk9SICYmIHdyYXBwZXIuY2xvc2UpIHtcbiAgICAgICAgICB3cmFwcGVyLmNsb3NlLmNhbGwodGhpcywgaW5pdERhdGEpO1xuICAgICAgICB9XG4gICAgICAgIGVycm9yVGhyb3duID0gZmFsc2U7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBpZiAoZXJyb3JUaHJvd24pIHtcbiAgICAgICAgICAvLyBUaGUgY2xvc2VyIGZvciB3cmFwcGVyIGkgdGhyZXcgYW4gZXJyb3I7IGNsb3NlIHRoZSByZW1haW5pbmdcbiAgICAgICAgICAvLyB3cmFwcGVycyBidXQgc2lsZW5jZSBhbnkgZXhjZXB0aW9ucyBmcm9tIHRoZW0gdG8gZW5zdXJlIHRoYXQgdGhlXG4gICAgICAgICAgLy8gZmlyc3QgZXJyb3IgaXMgdGhlIG9uZSB0byBidWJibGUgdXAuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2VBbGwoaSArIDEpO1xuICAgICAgICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy53cmFwcGVySW5pdERhdGEubGVuZ3RoID0gMDtcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBUcmFuc2FjdGlvbkltcGw7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1kb20vbGliL1RyYW5zYWN0aW9uLmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxNi1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQmFzZWQgb24gdGhlIGVzY2FwZS1odG1sIGxpYnJhcnksIHdoaWNoIGlzIHVzZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlIGJlbG93OlxuICpcbiAqIENvcHlyaWdodCAoYykgMjAxMi0yMDEzIFRKIEhvbG93YXljaHVrXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTUgQW5kcmVhcyBMdWJiZVxuICogQ29weXJpZ2h0IChjKSAyMDE1IFRpYW5jaGVuZyBcIlRpbW90aHlcIiBHdVxuICpcbiAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZ1xuICogYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4gKiAnU29mdHdhcmUnKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4gKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4gKiBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG9cbiAqIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0b1xuICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuICpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlXG4gKiBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgJ0FTIElTJywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCxcbiAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULlxuICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTllcbiAqIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsXG4gKiBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRVxuICogU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4gKlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuLy8gY29kZSBjb3BpZWQgYW5kIG1vZGlmaWVkIGZyb20gZXNjYXBlLWh0bWxcbi8qKlxuICogTW9kdWxlIHZhcmlhYmxlcy5cbiAqIEBwcml2YXRlXG4gKi9cblxudmFyIG1hdGNoSHRtbFJlZ0V4cCA9IC9bXCInJjw+XS87XG5cbi8qKlxuICogRXNjYXBlIHNwZWNpYWwgY2hhcmFjdGVycyBpbiB0aGUgZ2l2ZW4gc3RyaW5nIG9mIGh0bWwuXG4gKlxuICogQHBhcmFtICB7c3RyaW5nfSBzdHJpbmcgVGhlIHN0cmluZyB0byBlc2NhcGUgZm9yIGluc2VydGluZyBpbnRvIEhUTUxcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqIEBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiBlc2NhcGVIdG1sKHN0cmluZykge1xuICB2YXIgc3RyID0gJycgKyBzdHJpbmc7XG4gIHZhciBtYXRjaCA9IG1hdGNoSHRtbFJlZ0V4cC5leGVjKHN0cik7XG5cbiAgaWYgKCFtYXRjaCkge1xuICAgIHJldHVybiBzdHI7XG4gIH1cblxuICB2YXIgZXNjYXBlO1xuICB2YXIgaHRtbCA9ICcnO1xuICB2YXIgaW5kZXggPSAwO1xuICB2YXIgbGFzdEluZGV4ID0gMDtcblxuICBmb3IgKGluZGV4ID0gbWF0Y2guaW5kZXg7IGluZGV4IDwgc3RyLmxlbmd0aDsgaW5kZXgrKykge1xuICAgIHN3aXRjaCAoc3RyLmNoYXJDb2RlQXQoaW5kZXgpKSB7XG4gICAgICBjYXNlIDM0OlxuICAgICAgICAvLyBcIlxuICAgICAgICBlc2NhcGUgPSAnJnF1b3Q7JztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDM4OlxuICAgICAgICAvLyAmXG4gICAgICAgIGVzY2FwZSA9ICcmYW1wOyc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAzOTpcbiAgICAgICAgLy8gJ1xuICAgICAgICBlc2NhcGUgPSAnJiN4Mjc7JzsgLy8gbW9kaWZpZWQgZnJvbSBlc2NhcGUtaHRtbDsgdXNlZCB0byBiZSAnJiMzOSdcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDYwOlxuICAgICAgICAvLyA8XG4gICAgICAgIGVzY2FwZSA9ICcmbHQ7JztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDYyOlxuICAgICAgICAvLyA+XG4gICAgICAgIGVzY2FwZSA9ICcmZ3Q7JztcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAobGFzdEluZGV4ICE9PSBpbmRleCkge1xuICAgICAgaHRtbCArPSBzdHIuc3Vic3RyaW5nKGxhc3RJbmRleCwgaW5kZXgpO1xuICAgIH1cblxuICAgIGxhc3RJbmRleCA9IGluZGV4ICsgMTtcbiAgICBodG1sICs9IGVzY2FwZTtcbiAgfVxuXG4gIHJldHVybiBsYXN0SW5kZXggIT09IGluZGV4ID8gaHRtbCArIHN0ci5zdWJzdHJpbmcobGFzdEluZGV4LCBpbmRleCkgOiBodG1sO1xufVxuLy8gZW5kIGNvZGUgY29waWVkIGFuZCBtb2RpZmllZCBmcm9tIGVzY2FwZS1odG1sXG5cbi8qKlxuICogRXNjYXBlcyB0ZXh0IHRvIHByZXZlbnQgc2NyaXB0aW5nIGF0dGFja3MuXG4gKlxuICogQHBhcmFtIHsqfSB0ZXh0IFRleHQgdmFsdWUgdG8gZXNjYXBlLlxuICogQHJldHVybiB7c3RyaW5nfSBBbiBlc2NhcGVkIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gZXNjYXBlVGV4dENvbnRlbnRGb3JCcm93c2VyKHRleHQpIHtcbiAgaWYgKHR5cGVvZiB0ZXh0ID09PSAnYm9vbGVhbicgfHwgdHlwZW9mIHRleHQgPT09ICdudW1iZXInKSB7XG4gICAgLy8gdGhpcyBzaG9ydGNpcmN1aXQgaGVscHMgcGVyZiBmb3IgdHlwZXMgdGhhdCB3ZSBrbm93IHdpbGwgbmV2ZXIgaGF2ZVxuICAgIC8vIHNwZWNpYWwgY2hhcmFjdGVycywgZXNwZWNpYWxseSBnaXZlbiB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgdXNlZCBvZnRlblxuICAgIC8vIGZvciBudW1lcmljIGRvbSBpZHMuXG4gICAgcmV0dXJuICcnICsgdGV4dDtcbiAgfVxuICByZXR1cm4gZXNjYXBlSHRtbCh0ZXh0KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBlc2NhcGVUZXh0Q29udGVudEZvckJyb3dzZXI7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1kb20vbGliL2VzY2FwZVRleHRDb250ZW50Rm9yQnJvd3Nlci5qcyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBFeGVjdXRpb25FbnZpcm9ubWVudCA9IHJlcXVpcmUoJ2ZianMvbGliL0V4ZWN1dGlvbkVudmlyb25tZW50Jyk7XG52YXIgRE9NTmFtZXNwYWNlcyA9IHJlcXVpcmUoJy4vRE9NTmFtZXNwYWNlcycpO1xuXG52YXIgV0hJVEVTUEFDRV9URVNUID0gL15bIFxcclxcblxcdFxcZl0vO1xudmFyIE5PTlZJU0lCTEVfVEVTVCA9IC88KCEtLXxsaW5rfG5vc2NyaXB0fG1ldGF8c2NyaXB0fHN0eWxlKVsgXFxyXFxuXFx0XFxmXFwvPl0vO1xuXG52YXIgY3JlYXRlTWljcm9zb2Z0VW5zYWZlTG9jYWxGdW5jdGlvbiA9IHJlcXVpcmUoJy4vY3JlYXRlTWljcm9zb2Z0VW5zYWZlTG9jYWxGdW5jdGlvbicpO1xuXG4vLyBTVkcgdGVtcCBjb250YWluZXIgZm9yIElFIGxhY2tpbmcgaW5uZXJIVE1MXG52YXIgcmV1c2FibGVTVkdDb250YWluZXI7XG5cbi8qKlxuICogU2V0IHRoZSBpbm5lckhUTUwgcHJvcGVydHkgb2YgYSBub2RlLCBlbnN1cmluZyB0aGF0IHdoaXRlc3BhY2UgaXMgcHJlc2VydmVkXG4gKiBldmVuIGluIElFOC5cbiAqXG4gKiBAcGFyYW0ge0RPTUVsZW1lbnR9IG5vZGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBodG1sXG4gKiBAaW50ZXJuYWxcbiAqL1xudmFyIHNldElubmVySFRNTCA9IGNyZWF0ZU1pY3Jvc29mdFVuc2FmZUxvY2FsRnVuY3Rpb24oZnVuY3Rpb24gKG5vZGUsIGh0bWwpIHtcbiAgLy8gSUUgZG9lcyBub3QgaGF2ZSBpbm5lckhUTUwgZm9yIFNWRyBub2Rlcywgc28gaW5zdGVhZCB3ZSBpbmplY3QgdGhlXG4gIC8vIG5ldyBtYXJrdXAgaW4gYSB0ZW1wIG5vZGUgYW5kIHRoZW4gbW92ZSB0aGUgY2hpbGQgbm9kZXMgYWNyb3NzIGludG9cbiAgLy8gdGhlIHRhcmdldCBub2RlXG4gIGlmIChub2RlLm5hbWVzcGFjZVVSSSA9PT0gRE9NTmFtZXNwYWNlcy5zdmcgJiYgISgnaW5uZXJIVE1MJyBpbiBub2RlKSkge1xuICAgIHJldXNhYmxlU1ZHQ29udGFpbmVyID0gcmV1c2FibGVTVkdDb250YWluZXIgfHwgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgcmV1c2FibGVTVkdDb250YWluZXIuaW5uZXJIVE1MID0gJzxzdmc+JyArIGh0bWwgKyAnPC9zdmc+JztcbiAgICB2YXIgc3ZnTm9kZSA9IHJldXNhYmxlU1ZHQ29udGFpbmVyLmZpcnN0Q2hpbGQ7XG4gICAgd2hpbGUgKHN2Z05vZGUuZmlyc3RDaGlsZCkge1xuICAgICAgbm9kZS5hcHBlbmRDaGlsZChzdmdOb2RlLmZpcnN0Q2hpbGQpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBub2RlLmlubmVySFRNTCA9IGh0bWw7XG4gIH1cbn0pO1xuXG5pZiAoRXhlY3V0aW9uRW52aXJvbm1lbnQuY2FuVXNlRE9NKSB7XG4gIC8vIElFODogV2hlbiB1cGRhdGluZyBhIGp1c3QgY3JlYXRlZCBub2RlIHdpdGggaW5uZXJIVE1MIG9ubHkgbGVhZGluZ1xuICAvLyB3aGl0ZXNwYWNlIGlzIHJlbW92ZWQuIFdoZW4gdXBkYXRpbmcgYW4gZXhpc3Rpbmcgbm9kZSB3aXRoIGlubmVySFRNTFxuICAvLyB3aGl0ZXNwYWNlIGluIHJvb3QgVGV4dE5vZGVzIGlzIGFsc28gY29sbGFwc2VkLlxuICAvLyBAc2VlIHF1aXJrc21vZGUub3JnL2J1Z3JlcG9ydHMvYXJjaGl2ZXMvMjAwNC8xMS9pbm5lcmh0bWxfYW5kX3QuaHRtbFxuXG4gIC8vIEZlYXR1cmUgZGV0ZWN0aW9uOyBvbmx5IElFOCBpcyBrbm93biB0byBiZWhhdmUgaW1wcm9wZXJseSBsaWtlIHRoaXMuXG4gIHZhciB0ZXN0RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICB0ZXN0RWxlbWVudC5pbm5lckhUTUwgPSAnICc7XG4gIGlmICh0ZXN0RWxlbWVudC5pbm5lckhUTUwgPT09ICcnKSB7XG4gICAgc2V0SW5uZXJIVE1MID0gZnVuY3Rpb24gKG5vZGUsIGh0bWwpIHtcbiAgICAgIC8vIE1hZ2ljIHRoZW9yeTogSUU4IHN1cHBvc2VkbHkgZGlmZmVyZW50aWF0ZXMgYmV0d2VlbiBhZGRlZCBhbmQgdXBkYXRlZFxuICAgICAgLy8gbm9kZXMgd2hlbiBwcm9jZXNzaW5nIGlubmVySFRNTCwgaW5uZXJIVE1MIG9uIHVwZGF0ZWQgbm9kZXMgc3VmZmVyc1xuICAgICAgLy8gZnJvbSB3b3JzZSB3aGl0ZXNwYWNlIGJlaGF2aW9yLiBSZS1hZGRpbmcgYSBub2RlIGxpa2UgdGhpcyB0cmlnZ2Vyc1xuICAgICAgLy8gdGhlIGluaXRpYWwgYW5kIG1vcmUgZmF2b3JhYmxlIHdoaXRlc3BhY2UgYmVoYXZpb3IuXG4gICAgICAvLyBUT0RPOiBXaGF0IHRvIGRvIG9uIGEgZGV0YWNoZWQgbm9kZT9cbiAgICAgIGlmIChub2RlLnBhcmVudE5vZGUpIHtcbiAgICAgICAgbm9kZS5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChub2RlLCBub2RlKTtcbiAgICAgIH1cblxuICAgICAgLy8gV2UgYWxzbyBpbXBsZW1lbnQgYSB3b3JrYXJvdW5kIGZvciBub24tdmlzaWJsZSB0YWdzIGRpc2FwcGVhcmluZyBpbnRvXG4gICAgICAvLyB0aGluIGFpciBvbiBJRTgsIHRoaXMgb25seSBoYXBwZW5zIGlmIHRoZXJlIGlzIG5vIHZpc2libGUgdGV4dFxuICAgICAgLy8gaW4tZnJvbnQgb2YgdGhlIG5vbi12aXNpYmxlIHRhZ3MuIFBpZ2d5YmFjayBvbiB0aGUgd2hpdGVzcGFjZSBmaXhcbiAgICAgIC8vIGFuZCBzaW1wbHkgY2hlY2sgaWYgYW55IG5vbi12aXNpYmxlIHRhZ3MgYXBwZWFyIGluIHRoZSBzb3VyY2UuXG4gICAgICBpZiAoV0hJVEVTUEFDRV9URVNULnRlc3QoaHRtbCkgfHwgaHRtbFswXSA9PT0gJzwnICYmIE5PTlZJU0lCTEVfVEVTVC50ZXN0KGh0bWwpKSB7XG4gICAgICAgIC8vIFJlY292ZXIgbGVhZGluZyB3aGl0ZXNwYWNlIGJ5IHRlbXBvcmFyaWx5IHByZXBlbmRpbmcgYW55IGNoYXJhY3Rlci5cbiAgICAgICAgLy8gXFx1RkVGRiBoYXMgdGhlIHBvdGVudGlhbCBhZHZhbnRhZ2Ugb2YgYmVpbmcgemVyby13aWR0aC9pbnZpc2libGUuXG4gICAgICAgIC8vIFVnbGlmeUpTIGRyb3BzIFUrRkVGRiBjaGFycyB3aGVuIHBhcnNpbmcsIHNvIHVzZSBTdHJpbmcuZnJvbUNoYXJDb2RlXG4gICAgICAgIC8vIGluIGhvcGVzIHRoYXQgdGhpcyBpcyBwcmVzZXJ2ZWQgZXZlbiBpZiBcIlxcdUZFRkZcIiBpcyB0cmFuc2Zvcm1lZCB0b1xuICAgICAgICAvLyB0aGUgYWN0dWFsIFVuaWNvZGUgY2hhcmFjdGVyIChieSBCYWJlbCwgZm9yIGV4YW1wbGUpLlxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbWlzaG9vL1VnbGlmeUpTMi9ibG9iL3YyLjQuMjAvbGliL3BhcnNlLmpzI0wyMTZcbiAgICAgICAgbm9kZS5pbm5lckhUTUwgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4ZmVmZikgKyBodG1sO1xuXG4gICAgICAgIC8vIGRlbGV0ZURhdGEgbGVhdmVzIGFuIGVtcHR5IGBUZXh0Tm9kZWAgd2hpY2ggb2Zmc2V0cyB0aGUgaW5kZXggb2YgYWxsXG4gICAgICAgIC8vIGNoaWxkcmVuLiBEZWZpbml0ZWx5IHdhbnQgdG8gYXZvaWQgdGhpcy5cbiAgICAgICAgdmFyIHRleHROb2RlID0gbm9kZS5maXJzdENoaWxkO1xuICAgICAgICBpZiAodGV4dE5vZGUuZGF0YS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICBub2RlLnJlbW92ZUNoaWxkKHRleHROb2RlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0ZXh0Tm9kZS5kZWxldGVEYXRhKDAsIDEpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBub2RlLmlubmVySFRNTCA9IGh0bWw7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuICB0ZXN0RWxlbWVudCA9IG51bGw7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0SW5uZXJIVE1MO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QtZG9tL2xpYi9zZXRJbm5lckhUTUwuanMiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBjYW5EZWZpbmVQcm9wZXJ0eSA9IGZhbHNlO1xuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgdHJ5IHtcbiAgICAvLyAkRmxvd0ZpeE1lIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9mbG93L2lzc3Vlcy8yODVcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sICd4JywgeyBnZXQ6IGZ1bmN0aW9uICgpIHt9IH0pO1xuICAgIGNhbkRlZmluZVByb3BlcnR5ID0gdHJ1ZTtcbiAgfSBjYXRjaCAoeCkge1xuICAgIC8vIElFIHdpbGwgZmFpbCBvbiBkZWZpbmVQcm9wZXJ0eVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2FuRGVmaW5lUHJvcGVydHk7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC9saWIvY2FuRGVmaW5lUHJvcGVydHkuanMiLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHR5cGVjaGVja3NcbiAqIFxuICovXG5cbi8qZXNsaW50LWRpc2FibGUgbm8tc2VsZi1jb21wYXJlICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIGhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBpbmxpbmVkIE9iamVjdC5pcyBwb2x5ZmlsbCB0byBhdm9pZCByZXF1aXJpbmcgY29uc3VtZXJzIHNoaXAgdGhlaXIgb3duXG4gKiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9PYmplY3QvaXNcbiAqL1xuZnVuY3Rpb24gaXMoeCwgeSkge1xuICAvLyBTYW1lVmFsdWUgYWxnb3JpdGhtXG4gIGlmICh4ID09PSB5KSB7XG4gICAgLy8gU3RlcHMgMS01LCA3LTEwXG4gICAgLy8gU3RlcHMgNi5iLTYuZTogKzAgIT0gLTBcbiAgICAvLyBBZGRlZCB0aGUgbm9uemVybyB5IGNoZWNrIHRvIG1ha2UgRmxvdyBoYXBweSwgYnV0IGl0IGlzIHJlZHVuZGFudFxuICAgIHJldHVybiB4ICE9PSAwIHx8IHkgIT09IDAgfHwgMSAvIHggPT09IDEgLyB5O1xuICB9IGVsc2Uge1xuICAgIC8vIFN0ZXAgNi5hOiBOYU4gPT0gTmFOXG4gICAgcmV0dXJuIHggIT09IHggJiYgeSAhPT0geTtcbiAgfVxufVxuXG4vKipcbiAqIFBlcmZvcm1zIGVxdWFsaXR5IGJ5IGl0ZXJhdGluZyB0aHJvdWdoIGtleXMgb24gYW4gb2JqZWN0IGFuZCByZXR1cm5pbmcgZmFsc2VcbiAqIHdoZW4gYW55IGtleSBoYXMgdmFsdWVzIHdoaWNoIGFyZSBub3Qgc3RyaWN0bHkgZXF1YWwgYmV0d2VlbiB0aGUgYXJndW1lbnRzLlxuICogUmV0dXJucyB0cnVlIHdoZW4gdGhlIHZhbHVlcyBvZiBhbGwga2V5cyBhcmUgc3RyaWN0bHkgZXF1YWwuXG4gKi9cbmZ1bmN0aW9uIHNoYWxsb3dFcXVhbChvYmpBLCBvYmpCKSB7XG4gIGlmIChpcyhvYmpBLCBvYmpCKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBvYmpBICE9PSAnb2JqZWN0JyB8fCBvYmpBID09PSBudWxsIHx8IHR5cGVvZiBvYmpCICE9PSAnb2JqZWN0JyB8fCBvYmpCID09PSBudWxsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIGtleXNBID0gT2JqZWN0LmtleXMob2JqQSk7XG4gIHZhciBrZXlzQiA9IE9iamVjdC5rZXlzKG9iakIpO1xuXG4gIGlmIChrZXlzQS5sZW5ndGggIT09IGtleXNCLmxlbmd0aCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIFRlc3QgZm9yIEEncyBrZXlzIGRpZmZlcmVudCBmcm9tIEIuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwga2V5c0EubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoIWhhc093blByb3BlcnR5LmNhbGwob2JqQiwga2V5c0FbaV0pIHx8ICFpcyhvYmpBW2tleXNBW2ldXSwgb2JqQltrZXlzQVtpXV0pKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2hhbGxvd0VxdWFsO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vZmJqcy9saWIvc2hhbGxvd0VxdWFsLmpzIiwiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5sb2NhdGlvbnNBcmVFcXVhbCA9IGV4cG9ydHMuY3JlYXRlTG9jYXRpb24gPSB1bmRlZmluZWQ7XG5cbnZhciBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07XG5cbnZhciBfcmVzb2x2ZVBhdGhuYW1lID0gcmVxdWlyZSgncmVzb2x2ZS1wYXRobmFtZScpO1xuXG52YXIgX3Jlc29sdmVQYXRobmFtZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9yZXNvbHZlUGF0aG5hbWUpO1xuXG52YXIgX3ZhbHVlRXF1YWwgPSByZXF1aXJlKCd2YWx1ZS1lcXVhbCcpO1xuXG52YXIgX3ZhbHVlRXF1YWwyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfdmFsdWVFcXVhbCk7XG5cbnZhciBfUGF0aFV0aWxzID0gcmVxdWlyZSgnLi9QYXRoVXRpbHMnKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxudmFyIGNyZWF0ZUxvY2F0aW9uID0gZXhwb3J0cy5jcmVhdGVMb2NhdGlvbiA9IGZ1bmN0aW9uIGNyZWF0ZUxvY2F0aW9uKHBhdGgsIHN0YXRlLCBrZXksIGN1cnJlbnRMb2NhdGlvbikge1xuICB2YXIgbG9jYXRpb24gPSB2b2lkIDA7XG4gIGlmICh0eXBlb2YgcGF0aCA9PT0gJ3N0cmluZycpIHtcbiAgICAvLyBUd28tYXJnIGZvcm06IHB1c2gocGF0aCwgc3RhdGUpXG4gICAgbG9jYXRpb24gPSAoMCwgX1BhdGhVdGlscy5wYXJzZVBhdGgpKHBhdGgpO1xuICAgIGxvY2F0aW9uLnN0YXRlID0gc3RhdGU7XG4gIH0gZWxzZSB7XG4gICAgLy8gT25lLWFyZyBmb3JtOiBwdXNoKGxvY2F0aW9uKVxuICAgIGxvY2F0aW9uID0gX2V4dGVuZHMoe30sIHBhdGgpO1xuXG4gICAgaWYgKGxvY2F0aW9uLnBhdGhuYW1lID09PSB1bmRlZmluZWQpIGxvY2F0aW9uLnBhdGhuYW1lID0gJyc7XG5cbiAgICBpZiAobG9jYXRpb24uc2VhcmNoKSB7XG4gICAgICBpZiAobG9jYXRpb24uc2VhcmNoLmNoYXJBdCgwKSAhPT0gJz8nKSBsb2NhdGlvbi5zZWFyY2ggPSAnPycgKyBsb2NhdGlvbi5zZWFyY2g7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvY2F0aW9uLnNlYXJjaCA9ICcnO1xuICAgIH1cblxuICAgIGlmIChsb2NhdGlvbi5oYXNoKSB7XG4gICAgICBpZiAobG9jYXRpb24uaGFzaC5jaGFyQXQoMCkgIT09ICcjJykgbG9jYXRpb24uaGFzaCA9ICcjJyArIGxvY2F0aW9uLmhhc2g7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvY2F0aW9uLmhhc2ggPSAnJztcbiAgICB9XG5cbiAgICBpZiAoc3RhdGUgIT09IHVuZGVmaW5lZCAmJiBsb2NhdGlvbi5zdGF0ZSA9PT0gdW5kZWZpbmVkKSBsb2NhdGlvbi5zdGF0ZSA9IHN0YXRlO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBsb2NhdGlvbi5wYXRobmFtZSA9IGRlY29kZVVSSShsb2NhdGlvbi5wYXRobmFtZSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBpZiAoZSBpbnN0YW5jZW9mIFVSSUVycm9yKSB7XG4gICAgICB0aHJvdyBuZXcgVVJJRXJyb3IoJ1BhdGhuYW1lIFwiJyArIGxvY2F0aW9uLnBhdGhuYW1lICsgJ1wiIGNvdWxkIG5vdCBiZSBkZWNvZGVkLiAnICsgJ1RoaXMgaXMgbGlrZWx5IGNhdXNlZCBieSBhbiBpbnZhbGlkIHBlcmNlbnQtZW5jb2RpbmcuJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IGU7XG4gICAgfVxuICB9XG5cbiAgaWYgKGtleSkgbG9jYXRpb24ua2V5ID0ga2V5O1xuXG4gIGlmIChjdXJyZW50TG9jYXRpb24pIHtcbiAgICAvLyBSZXNvbHZlIGluY29tcGxldGUvcmVsYXRpdmUgcGF0aG5hbWUgcmVsYXRpdmUgdG8gY3VycmVudCBsb2NhdGlvbi5cbiAgICBpZiAoIWxvY2F0aW9uLnBhdGhuYW1lKSB7XG4gICAgICBsb2NhdGlvbi5wYXRobmFtZSA9IGN1cnJlbnRMb2NhdGlvbi5wYXRobmFtZTtcbiAgICB9IGVsc2UgaWYgKGxvY2F0aW9uLnBhdGhuYW1lLmNoYXJBdCgwKSAhPT0gJy8nKSB7XG4gICAgICBsb2NhdGlvbi5wYXRobmFtZSA9ICgwLCBfcmVzb2x2ZVBhdGhuYW1lMi5kZWZhdWx0KShsb2NhdGlvbi5wYXRobmFtZSwgY3VycmVudExvY2F0aW9uLnBhdGhuYW1lKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gV2hlbiB0aGVyZSBpcyBubyBwcmlvciBsb2NhdGlvbiBhbmQgcGF0aG5hbWUgaXMgZW1wdHksIHNldCBpdCB0byAvXG4gICAgaWYgKCFsb2NhdGlvbi5wYXRobmFtZSkge1xuICAgICAgbG9jYXRpb24ucGF0aG5hbWUgPSAnLyc7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGxvY2F0aW9uO1xufTtcblxudmFyIGxvY2F0aW9uc0FyZUVxdWFsID0gZXhwb3J0cy5sb2NhdGlvbnNBcmVFcXVhbCA9IGZ1bmN0aW9uIGxvY2F0aW9uc0FyZUVxdWFsKGEsIGIpIHtcbiAgcmV0dXJuIGEucGF0aG5hbWUgPT09IGIucGF0aG5hbWUgJiYgYS5zZWFyY2ggPT09IGIuc2VhcmNoICYmIGEuaGFzaCA9PT0gYi5oYXNoICYmIGEua2V5ID09PSBiLmtleSAmJiAoMCwgX3ZhbHVlRXF1YWwyLmRlZmF1bHQpKGEuc3RhdGUsIGIuc3RhdGUpO1xufTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L2hpc3RvcnkvTG9jYXRpb25VdGlscy5qcyIsIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxudmFyIF93YXJuaW5nID0gcmVxdWlyZSgnd2FybmluZycpO1xuXG52YXIgX3dhcm5pbmcyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfd2FybmluZyk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbnZhciBjcmVhdGVUcmFuc2l0aW9uTWFuYWdlciA9IGZ1bmN0aW9uIGNyZWF0ZVRyYW5zaXRpb25NYW5hZ2VyKCkge1xuICB2YXIgcHJvbXB0ID0gbnVsbDtcblxuICB2YXIgc2V0UHJvbXB0ID0gZnVuY3Rpb24gc2V0UHJvbXB0KG5leHRQcm9tcHQpIHtcbiAgICAoMCwgX3dhcm5pbmcyLmRlZmF1bHQpKHByb21wdCA9PSBudWxsLCAnQSBoaXN0b3J5IHN1cHBvcnRzIG9ubHkgb25lIHByb21wdCBhdCBhIHRpbWUnKTtcblxuICAgIHByb21wdCA9IG5leHRQcm9tcHQ7XG5cbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKHByb21wdCA9PT0gbmV4dFByb21wdCkgcHJvbXB0ID0gbnVsbDtcbiAgICB9O1xuICB9O1xuXG4gIHZhciBjb25maXJtVHJhbnNpdGlvblRvID0gZnVuY3Rpb24gY29uZmlybVRyYW5zaXRpb25Ubyhsb2NhdGlvbiwgYWN0aW9uLCBnZXRVc2VyQ29uZmlybWF0aW9uLCBjYWxsYmFjaykge1xuICAgIC8vIFRPRE86IElmIGFub3RoZXIgdHJhbnNpdGlvbiBzdGFydHMgd2hpbGUgd2UncmUgc3RpbGwgY29uZmlybWluZ1xuICAgIC8vIHRoZSBwcmV2aW91cyBvbmUsIHdlIG1heSBlbmQgdXAgaW4gYSB3ZWlyZCBzdGF0ZS4gRmlndXJlIG91dCB0aGVcbiAgICAvLyBiZXN0IHdheSB0byBoYW5kbGUgdGhpcy5cbiAgICBpZiAocHJvbXB0ICE9IG51bGwpIHtcbiAgICAgIHZhciByZXN1bHQgPSB0eXBlb2YgcHJvbXB0ID09PSAnZnVuY3Rpb24nID8gcHJvbXB0KGxvY2F0aW9uLCBhY3Rpb24pIDogcHJvbXB0O1xuXG4gICAgICBpZiAodHlwZW9mIHJlc3VsdCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBnZXRVc2VyQ29uZmlybWF0aW9uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgZ2V0VXNlckNvbmZpcm1hdGlvbihyZXN1bHQsIGNhbGxiYWNrKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAoMCwgX3dhcm5pbmcyLmRlZmF1bHQpKGZhbHNlLCAnQSBoaXN0b3J5IG5lZWRzIGEgZ2V0VXNlckNvbmZpcm1hdGlvbiBmdW5jdGlvbiBpbiBvcmRlciB0byB1c2UgYSBwcm9tcHQgbWVzc2FnZScpO1xuXG4gICAgICAgICAgY2FsbGJhY2sodHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFJldHVybiBmYWxzZSBmcm9tIGEgdHJhbnNpdGlvbiBob29rIHRvIGNhbmNlbCB0aGUgdHJhbnNpdGlvbi5cbiAgICAgICAgY2FsbGJhY2socmVzdWx0ICE9PSBmYWxzZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNhbGxiYWNrKHRydWUpO1xuICAgIH1cbiAgfTtcblxuICB2YXIgbGlzdGVuZXJzID0gW107XG5cbiAgdmFyIGFwcGVuZExpc3RlbmVyID0gZnVuY3Rpb24gYXBwZW5kTGlzdGVuZXIoZm4pIHtcbiAgICB2YXIgaXNBY3RpdmUgPSB0cnVlO1xuXG4gICAgdmFyIGxpc3RlbmVyID0gZnVuY3Rpb24gbGlzdGVuZXIoKSB7XG4gICAgICBpZiAoaXNBY3RpdmUpIGZuLmFwcGx5KHVuZGVmaW5lZCwgYXJndW1lbnRzKTtcbiAgICB9O1xuXG4gICAgbGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpO1xuXG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlzQWN0aXZlID0gZmFsc2U7XG4gICAgICBsaXN0ZW5lcnMgPSBsaXN0ZW5lcnMuZmlsdGVyKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgIHJldHVybiBpdGVtICE9PSBsaXN0ZW5lcjtcbiAgICAgIH0pO1xuICAgIH07XG4gIH07XG5cbiAgdmFyIG5vdGlmeUxpc3RlbmVycyA9IGZ1bmN0aW9uIG5vdGlmeUxpc3RlbmVycygpIHtcbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICBsaXN0ZW5lcnMuZm9yRWFjaChmdW5jdGlvbiAobGlzdGVuZXIpIHtcbiAgICAgIHJldHVybiBsaXN0ZW5lci5hcHBseSh1bmRlZmluZWQsIGFyZ3MpO1xuICAgIH0pO1xuICB9O1xuXG4gIHJldHVybiB7XG4gICAgc2V0UHJvbXB0OiBzZXRQcm9tcHQsXG4gICAgY29uZmlybVRyYW5zaXRpb25UbzogY29uZmlybVRyYW5zaXRpb25UbyxcbiAgICBhcHBlbmRMaXN0ZW5lcjogYXBwZW5kTGlzdGVuZXIsXG4gICAgbm90aWZ5TGlzdGVuZXJzOiBub3RpZnlMaXN0ZW5lcnNcbiAgfTtcbn07XG5cbmV4cG9ydHMuZGVmYXVsdCA9IGNyZWF0ZVRyYW5zaXRpb25NYW5hZ2VyO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vaGlzdG9yeS9jcmVhdGVUcmFuc2l0aW9uTWFuYWdlci5qcyIsImltcG9ydCBiYXNlR2V0VGFnIGZyb20gJy4vX2Jhc2VHZXRUYWcuanMnO1xuaW1wb3J0IGdldFByb3RvdHlwZSBmcm9tICcuL19nZXRQcm90b3R5cGUuanMnO1xuaW1wb3J0IGlzT2JqZWN0TGlrZSBmcm9tICcuL2lzT2JqZWN0TGlrZS5qcyc7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RUYWcgPSAnW29iamVjdCBPYmplY3RdJztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIGZ1bmNQcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZSxcbiAgICBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIHJlc29sdmUgdGhlIGRlY29tcGlsZWQgc291cmNlIG9mIGZ1bmN0aW9ucy4gKi9cbnZhciBmdW5jVG9TdHJpbmcgPSBmdW5jUHJvdG8udG9TdHJpbmc7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKiBVc2VkIHRvIGluZmVyIHRoZSBgT2JqZWN0YCBjb25zdHJ1Y3Rvci4gKi9cbnZhciBvYmplY3RDdG9yU3RyaW5nID0gZnVuY1RvU3RyaW5nLmNhbGwoT2JqZWN0KTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHBsYWluIG9iamVjdCwgdGhhdCBpcywgYW4gb2JqZWN0IGNyZWF0ZWQgYnkgdGhlXG4gKiBgT2JqZWN0YCBjb25zdHJ1Y3RvciBvciBvbmUgd2l0aCBhIGBbW1Byb3RvdHlwZV1dYCBvZiBgbnVsbGAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjguMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBwbGFpbiBvYmplY3QsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gRm9vKCkge1xuICogICB0aGlzLmEgPSAxO1xuICogfVxuICpcbiAqIF8uaXNQbGFpbk9iamVjdChuZXcgRm9vKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc1BsYWluT2JqZWN0KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNQbGFpbk9iamVjdCh7ICd4JzogMCwgJ3knOiAwIH0pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNQbGFpbk9iamVjdChPYmplY3QuY3JlYXRlKG51bGwpKTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh2YWx1ZSkge1xuICBpZiAoIWlzT2JqZWN0TGlrZSh2YWx1ZSkgfHwgYmFzZUdldFRhZyh2YWx1ZSkgIT0gb2JqZWN0VGFnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBwcm90byA9IGdldFByb3RvdHlwZSh2YWx1ZSk7XG4gIGlmIChwcm90byA9PT0gbnVsbCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHZhciBDdG9yID0gaGFzT3duUHJvcGVydHkuY2FsbChwcm90bywgJ2NvbnN0cnVjdG9yJykgJiYgcHJvdG8uY29uc3RydWN0b3I7XG4gIHJldHVybiB0eXBlb2YgQ3RvciA9PSAnZnVuY3Rpb24nICYmIEN0b3IgaW5zdGFuY2VvZiBDdG9yICYmXG4gICAgZnVuY1RvU3RyaW5nLmNhbGwoQ3RvcikgPT0gb2JqZWN0Q3RvclN0cmluZztcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNQbGFpbk9iamVjdDtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vbG9kYXNoLWVzL2lzUGxhaW5PYmplY3QuanMiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBSZWFjdFByb3BUeXBlc1NlY3JldCA9ICdTRUNSRVRfRE9fTk9UX1BBU1NfVEhJU19PUl9ZT1VfV0lMTF9CRV9GSVJFRCc7XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RQcm9wVHlwZXNTZWNyZXQ7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3Byb3AtdHlwZXMvbGliL1JlYWN0UHJvcFR5cGVzU2VjcmV0LmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIERPTUxhenlUcmVlID0gcmVxdWlyZSgnLi9ET01MYXp5VHJlZScpO1xudmFyIERhbmdlciA9IHJlcXVpcmUoJy4vRGFuZ2VyJyk7XG52YXIgUmVhY3RET01Db21wb25lbnRUcmVlID0gcmVxdWlyZSgnLi9SZWFjdERPTUNvbXBvbmVudFRyZWUnKTtcbnZhciBSZWFjdEluc3RydW1lbnRhdGlvbiA9IHJlcXVpcmUoJy4vUmVhY3RJbnN0cnVtZW50YXRpb24nKTtcblxudmFyIGNyZWF0ZU1pY3Jvc29mdFVuc2FmZUxvY2FsRnVuY3Rpb24gPSByZXF1aXJlKCcuL2NyZWF0ZU1pY3Jvc29mdFVuc2FmZUxvY2FsRnVuY3Rpb24nKTtcbnZhciBzZXRJbm5lckhUTUwgPSByZXF1aXJlKCcuL3NldElubmVySFRNTCcpO1xudmFyIHNldFRleHRDb250ZW50ID0gcmVxdWlyZSgnLi9zZXRUZXh0Q29udGVudCcpO1xuXG5mdW5jdGlvbiBnZXROb2RlQWZ0ZXIocGFyZW50Tm9kZSwgbm9kZSkge1xuICAvLyBTcGVjaWFsIGNhc2UgZm9yIHRleHQgY29tcG9uZW50cywgd2hpY2ggcmV0dXJuIFtvcGVuLCBjbG9zZV0gY29tbWVudHNcbiAgLy8gZnJvbSBnZXRIb3N0Tm9kZS5cbiAgaWYgKEFycmF5LmlzQXJyYXkobm9kZSkpIHtcbiAgICBub2RlID0gbm9kZVsxXTtcbiAgfVxuICByZXR1cm4gbm9kZSA/IG5vZGUubmV4dFNpYmxpbmcgOiBwYXJlbnROb2RlLmZpcnN0Q2hpbGQ7XG59XG5cbi8qKlxuICogSW5zZXJ0cyBgY2hpbGROb2RlYCBhcyBhIGNoaWxkIG9mIGBwYXJlbnROb2RlYCBhdCB0aGUgYGluZGV4YC5cbiAqXG4gKiBAcGFyYW0ge0RPTUVsZW1lbnR9IHBhcmVudE5vZGUgUGFyZW50IG5vZGUgaW4gd2hpY2ggdG8gaW5zZXJ0LlxuICogQHBhcmFtIHtET01FbGVtZW50fSBjaGlsZE5vZGUgQ2hpbGQgbm9kZSB0byBpbnNlcnQuXG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXggSW5kZXggYXQgd2hpY2ggdG8gaW5zZXJ0IHRoZSBjaGlsZC5cbiAqIEBpbnRlcm5hbFxuICovXG52YXIgaW5zZXJ0Q2hpbGRBdCA9IGNyZWF0ZU1pY3Jvc29mdFVuc2FmZUxvY2FsRnVuY3Rpb24oZnVuY3Rpb24gKHBhcmVudE5vZGUsIGNoaWxkTm9kZSwgcmVmZXJlbmNlTm9kZSkge1xuICAvLyBXZSByZWx5IGV4Y2x1c2l2ZWx5IG9uIGBpbnNlcnRCZWZvcmUobm9kZSwgbnVsbClgIGluc3RlYWQgb2YgYWxzbyB1c2luZ1xuICAvLyBgYXBwZW5kQ2hpbGQobm9kZSlgLiAoVXNpbmcgYHVuZGVmaW5lZGAgaXMgbm90IGFsbG93ZWQgYnkgYWxsIGJyb3dzZXJzIHNvXG4gIC8vIHdlIGFyZSBjYXJlZnVsIHRvIHVzZSBgbnVsbGAuKVxuICBwYXJlbnROb2RlLmluc2VydEJlZm9yZShjaGlsZE5vZGUsIHJlZmVyZW5jZU5vZGUpO1xufSk7XG5cbmZ1bmN0aW9uIGluc2VydExhenlUcmVlQ2hpbGRBdChwYXJlbnROb2RlLCBjaGlsZFRyZWUsIHJlZmVyZW5jZU5vZGUpIHtcbiAgRE9NTGF6eVRyZWUuaW5zZXJ0VHJlZUJlZm9yZShwYXJlbnROb2RlLCBjaGlsZFRyZWUsIHJlZmVyZW5jZU5vZGUpO1xufVxuXG5mdW5jdGlvbiBtb3ZlQ2hpbGQocGFyZW50Tm9kZSwgY2hpbGROb2RlLCByZWZlcmVuY2VOb2RlKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGNoaWxkTm9kZSkpIHtcbiAgICBtb3ZlRGVsaW1pdGVkVGV4dChwYXJlbnROb2RlLCBjaGlsZE5vZGVbMF0sIGNoaWxkTm9kZVsxXSwgcmVmZXJlbmNlTm9kZSk7XG4gIH0gZWxzZSB7XG4gICAgaW5zZXJ0Q2hpbGRBdChwYXJlbnROb2RlLCBjaGlsZE5vZGUsIHJlZmVyZW5jZU5vZGUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUNoaWxkKHBhcmVudE5vZGUsIGNoaWxkTm9kZSkge1xuICBpZiAoQXJyYXkuaXNBcnJheShjaGlsZE5vZGUpKSB7XG4gICAgdmFyIGNsb3NpbmdDb21tZW50ID0gY2hpbGROb2RlWzFdO1xuICAgIGNoaWxkTm9kZSA9IGNoaWxkTm9kZVswXTtcbiAgICByZW1vdmVEZWxpbWl0ZWRUZXh0KHBhcmVudE5vZGUsIGNoaWxkTm9kZSwgY2xvc2luZ0NvbW1lbnQpO1xuICAgIHBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoY2xvc2luZ0NvbW1lbnQpO1xuICB9XG4gIHBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoY2hpbGROb2RlKTtcbn1cblxuZnVuY3Rpb24gbW92ZURlbGltaXRlZFRleHQocGFyZW50Tm9kZSwgb3BlbmluZ0NvbW1lbnQsIGNsb3NpbmdDb21tZW50LCByZWZlcmVuY2VOb2RlKSB7XG4gIHZhciBub2RlID0gb3BlbmluZ0NvbW1lbnQ7XG4gIHdoaWxlICh0cnVlKSB7XG4gICAgdmFyIG5leHROb2RlID0gbm9kZS5uZXh0U2libGluZztcbiAgICBpbnNlcnRDaGlsZEF0KHBhcmVudE5vZGUsIG5vZGUsIHJlZmVyZW5jZU5vZGUpO1xuICAgIGlmIChub2RlID09PSBjbG9zaW5nQ29tbWVudCkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIG5vZGUgPSBuZXh0Tm9kZTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZW1vdmVEZWxpbWl0ZWRUZXh0KHBhcmVudE5vZGUsIHN0YXJ0Tm9kZSwgY2xvc2luZ0NvbW1lbnQpIHtcbiAgd2hpbGUgKHRydWUpIHtcbiAgICB2YXIgbm9kZSA9IHN0YXJ0Tm9kZS5uZXh0U2libGluZztcbiAgICBpZiAobm9kZSA9PT0gY2xvc2luZ0NvbW1lbnQpIHtcbiAgICAgIC8vIFRoZSBjbG9zaW5nIGNvbW1lbnQgaXMgcmVtb3ZlZCBieSBSZWFjdE11bHRpQ2hpbGQuXG4gICAgICBicmVhaztcbiAgICB9IGVsc2Uge1xuICAgICAgcGFyZW50Tm9kZS5yZW1vdmVDaGlsZChub2RlKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVwbGFjZURlbGltaXRlZFRleHQob3BlbmluZ0NvbW1lbnQsIGNsb3NpbmdDb21tZW50LCBzdHJpbmdUZXh0KSB7XG4gIHZhciBwYXJlbnROb2RlID0gb3BlbmluZ0NvbW1lbnQucGFyZW50Tm9kZTtcbiAgdmFyIG5vZGVBZnRlckNvbW1lbnQgPSBvcGVuaW5nQ29tbWVudC5uZXh0U2libGluZztcbiAgaWYgKG5vZGVBZnRlckNvbW1lbnQgPT09IGNsb3NpbmdDb21tZW50KSB7XG4gICAgLy8gVGhlcmUgYXJlIG5vIHRleHQgbm9kZXMgYmV0d2VlbiB0aGUgb3BlbmluZyBhbmQgY2xvc2luZyBjb21tZW50czsgaW5zZXJ0XG4gICAgLy8gYSBuZXcgb25lIGlmIHN0cmluZ1RleHQgaXNuJ3QgZW1wdHkuXG4gICAgaWYgKHN0cmluZ1RleHQpIHtcbiAgICAgIGluc2VydENoaWxkQXQocGFyZW50Tm9kZSwgZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoc3RyaW5nVGV4dCksIG5vZGVBZnRlckNvbW1lbnQpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAoc3RyaW5nVGV4dCkge1xuICAgICAgLy8gU2V0IHRoZSB0ZXh0IGNvbnRlbnQgb2YgdGhlIGZpcnN0IG5vZGUgYWZ0ZXIgdGhlIG9wZW5pbmcgY29tbWVudCwgYW5kXG4gICAgICAvLyByZW1vdmUgYWxsIGZvbGxvd2luZyBub2RlcyB1cCB1bnRpbCB0aGUgY2xvc2luZyBjb21tZW50LlxuICAgICAgc2V0VGV4dENvbnRlbnQobm9kZUFmdGVyQ29tbWVudCwgc3RyaW5nVGV4dCk7XG4gICAgICByZW1vdmVEZWxpbWl0ZWRUZXh0KHBhcmVudE5vZGUsIG5vZGVBZnRlckNvbW1lbnQsIGNsb3NpbmdDb21tZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVtb3ZlRGVsaW1pdGVkVGV4dChwYXJlbnROb2RlLCBvcGVuaW5nQ29tbWVudCwgY2xvc2luZ0NvbW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgUmVhY3RJbnN0cnVtZW50YXRpb24uZGVidWdUb29sLm9uSG9zdE9wZXJhdGlvbih7XG4gICAgICBpbnN0YW5jZUlEOiBSZWFjdERPTUNvbXBvbmVudFRyZWUuZ2V0SW5zdGFuY2VGcm9tTm9kZShvcGVuaW5nQ29tbWVudCkuX2RlYnVnSUQsXG4gICAgICB0eXBlOiAncmVwbGFjZSB0ZXh0JyxcbiAgICAgIHBheWxvYWQ6IHN0cmluZ1RleHRcbiAgICB9KTtcbiAgfVxufVxuXG52YXIgZGFuZ2Vyb3VzbHlSZXBsYWNlTm9kZVdpdGhNYXJrdXAgPSBEYW5nZXIuZGFuZ2Vyb3VzbHlSZXBsYWNlTm9kZVdpdGhNYXJrdXA7XG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBkYW5nZXJvdXNseVJlcGxhY2VOb2RlV2l0aE1hcmt1cCA9IGZ1bmN0aW9uIChvbGRDaGlsZCwgbWFya3VwLCBwcmV2SW5zdGFuY2UpIHtcbiAgICBEYW5nZXIuZGFuZ2Vyb3VzbHlSZXBsYWNlTm9kZVdpdGhNYXJrdXAob2xkQ2hpbGQsIG1hcmt1cCk7XG4gICAgaWYgKHByZXZJbnN0YW5jZS5fZGVidWdJRCAhPT0gMCkge1xuICAgICAgUmVhY3RJbnN0cnVtZW50YXRpb24uZGVidWdUb29sLm9uSG9zdE9wZXJhdGlvbih7XG4gICAgICAgIGluc3RhbmNlSUQ6IHByZXZJbnN0YW5jZS5fZGVidWdJRCxcbiAgICAgICAgdHlwZTogJ3JlcGxhY2Ugd2l0aCcsXG4gICAgICAgIHBheWxvYWQ6IG1hcmt1cC50b1N0cmluZygpXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIG5leHRJbnN0YW5jZSA9IFJlYWN0RE9NQ29tcG9uZW50VHJlZS5nZXRJbnN0YW5jZUZyb21Ob2RlKG1hcmt1cC5ub2RlKTtcbiAgICAgIGlmIChuZXh0SW5zdGFuY2UuX2RlYnVnSUQgIT09IDApIHtcbiAgICAgICAgUmVhY3RJbnN0cnVtZW50YXRpb24uZGVidWdUb29sLm9uSG9zdE9wZXJhdGlvbih7XG4gICAgICAgICAgaW5zdGFuY2VJRDogbmV4dEluc3RhbmNlLl9kZWJ1Z0lELFxuICAgICAgICAgIHR5cGU6ICdtb3VudCcsXG4gICAgICAgICAgcGF5bG9hZDogbWFya3VwLnRvU3RyaW5nKClcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9O1xufVxuXG4vKipcbiAqIE9wZXJhdGlvbnMgZm9yIHVwZGF0aW5nIHdpdGggRE9NIGNoaWxkcmVuLlxuICovXG52YXIgRE9NQ2hpbGRyZW5PcGVyYXRpb25zID0ge1xuICBkYW5nZXJvdXNseVJlcGxhY2VOb2RlV2l0aE1hcmt1cDogZGFuZ2Vyb3VzbHlSZXBsYWNlTm9kZVdpdGhNYXJrdXAsXG5cbiAgcmVwbGFjZURlbGltaXRlZFRleHQ6IHJlcGxhY2VEZWxpbWl0ZWRUZXh0LFxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIGEgY29tcG9uZW50J3MgY2hpbGRyZW4gYnkgcHJvY2Vzc2luZyBhIHNlcmllcyBvZiB1cGRhdGVzLiBUaGVcbiAgICogdXBkYXRlIGNvbmZpZ3VyYXRpb25zIGFyZSBlYWNoIGV4cGVjdGVkIHRvIGhhdmUgYSBgcGFyZW50Tm9kZWAgcHJvcGVydHkuXG4gICAqXG4gICAqIEBwYXJhbSB7YXJyYXk8b2JqZWN0Pn0gdXBkYXRlcyBMaXN0IG9mIHVwZGF0ZSBjb25maWd1cmF0aW9ucy5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBwcm9jZXNzVXBkYXRlczogZnVuY3Rpb24gKHBhcmVudE5vZGUsIHVwZGF0ZXMpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgdmFyIHBhcmVudE5vZGVEZWJ1Z0lEID0gUmVhY3RET01Db21wb25lbnRUcmVlLmdldEluc3RhbmNlRnJvbU5vZGUocGFyZW50Tm9kZSkuX2RlYnVnSUQ7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgayA9IDA7IGsgPCB1cGRhdGVzLmxlbmd0aDsgaysrKSB7XG4gICAgICB2YXIgdXBkYXRlID0gdXBkYXRlc1trXTtcbiAgICAgIHN3aXRjaCAodXBkYXRlLnR5cGUpIHtcbiAgICAgICAgY2FzZSAnSU5TRVJUX01BUktVUCc6XG4gICAgICAgICAgaW5zZXJ0TGF6eVRyZWVDaGlsZEF0KHBhcmVudE5vZGUsIHVwZGF0ZS5jb250ZW50LCBnZXROb2RlQWZ0ZXIocGFyZW50Tm9kZSwgdXBkYXRlLmFmdGVyTm9kZSkpO1xuICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgICBSZWFjdEluc3RydW1lbnRhdGlvbi5kZWJ1Z1Rvb2wub25Ib3N0T3BlcmF0aW9uKHtcbiAgICAgICAgICAgICAgaW5zdGFuY2VJRDogcGFyZW50Tm9kZURlYnVnSUQsXG4gICAgICAgICAgICAgIHR5cGU6ICdpbnNlcnQgY2hpbGQnLFxuICAgICAgICAgICAgICBwYXlsb2FkOiB7XG4gICAgICAgICAgICAgICAgdG9JbmRleDogdXBkYXRlLnRvSW5kZXgsXG4gICAgICAgICAgICAgICAgY29udGVudDogdXBkYXRlLmNvbnRlbnQudG9TdHJpbmcoKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ01PVkVfRVhJU1RJTkcnOlxuICAgICAgICAgIG1vdmVDaGlsZChwYXJlbnROb2RlLCB1cGRhdGUuZnJvbU5vZGUsIGdldE5vZGVBZnRlcihwYXJlbnROb2RlLCB1cGRhdGUuYWZ0ZXJOb2RlKSk7XG4gICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICAgIFJlYWN0SW5zdHJ1bWVudGF0aW9uLmRlYnVnVG9vbC5vbkhvc3RPcGVyYXRpb24oe1xuICAgICAgICAgICAgICBpbnN0YW5jZUlEOiBwYXJlbnROb2RlRGVidWdJRCxcbiAgICAgICAgICAgICAgdHlwZTogJ21vdmUgY2hpbGQnLFxuICAgICAgICAgICAgICBwYXlsb2FkOiB7IGZyb21JbmRleDogdXBkYXRlLmZyb21JbmRleCwgdG9JbmRleDogdXBkYXRlLnRvSW5kZXggfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdTRVRfTUFSS1VQJzpcbiAgICAgICAgICBzZXRJbm5lckhUTUwocGFyZW50Tm9kZSwgdXBkYXRlLmNvbnRlbnQpO1xuICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgICBSZWFjdEluc3RydW1lbnRhdGlvbi5kZWJ1Z1Rvb2wub25Ib3N0T3BlcmF0aW9uKHtcbiAgICAgICAgICAgICAgaW5zdGFuY2VJRDogcGFyZW50Tm9kZURlYnVnSUQsXG4gICAgICAgICAgICAgIHR5cGU6ICdyZXBsYWNlIGNoaWxkcmVuJyxcbiAgICAgICAgICAgICAgcGF5bG9hZDogdXBkYXRlLmNvbnRlbnQudG9TdHJpbmcoKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdURVhUX0NPTlRFTlQnOlxuICAgICAgICAgIHNldFRleHRDb250ZW50KHBhcmVudE5vZGUsIHVwZGF0ZS5jb250ZW50KTtcbiAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgUmVhY3RJbnN0cnVtZW50YXRpb24uZGVidWdUb29sLm9uSG9zdE9wZXJhdGlvbih7XG4gICAgICAgICAgICAgIGluc3RhbmNlSUQ6IHBhcmVudE5vZGVEZWJ1Z0lELFxuICAgICAgICAgICAgICB0eXBlOiAncmVwbGFjZSB0ZXh0JyxcbiAgICAgICAgICAgICAgcGF5bG9hZDogdXBkYXRlLmNvbnRlbnQudG9TdHJpbmcoKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdSRU1PVkVfTk9ERSc6XG4gICAgICAgICAgcmVtb3ZlQ2hpbGQocGFyZW50Tm9kZSwgdXBkYXRlLmZyb21Ob2RlKTtcbiAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgUmVhY3RJbnN0cnVtZW50YXRpb24uZGVidWdUb29sLm9uSG9zdE9wZXJhdGlvbih7XG4gICAgICAgICAgICAgIGluc3RhbmNlSUQ6IHBhcmVudE5vZGVEZWJ1Z0lELFxuICAgICAgICAgICAgICB0eXBlOiAncmVtb3ZlIGNoaWxkJyxcbiAgICAgICAgICAgICAgcGF5bG9hZDogeyBmcm9tSW5kZXg6IHVwZGF0ZS5mcm9tSW5kZXggfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBET01DaGlsZHJlbk9wZXJhdGlvbnM7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1kb20vbGliL0RPTUNoaWxkcmVuT3BlcmF0aW9ucy5qcyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBET01OYW1lc3BhY2VzID0ge1xuICBodG1sOiAnaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCcsXG4gIG1hdGhtbDogJ2h0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aC9NYXRoTUwnLFxuICBzdmc6ICdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zydcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gRE9NTmFtZXNwYWNlcztcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3JlYWN0LWRvbS9saWIvRE9NTmFtZXNwYWNlcy5qcyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBfcHJvZEludmFyaWFudCA9IHJlcXVpcmUoJy4vcmVhY3RQcm9kSW52YXJpYW50Jyk7XG5cbnZhciBSZWFjdEVycm9yVXRpbHMgPSByZXF1aXJlKCcuL1JlYWN0RXJyb3JVdGlscycpO1xuXG52YXIgaW52YXJpYW50ID0gcmVxdWlyZSgnZmJqcy9saWIvaW52YXJpYW50Jyk7XG52YXIgd2FybmluZyA9IHJlcXVpcmUoJ2ZianMvbGliL3dhcm5pbmcnKTtcblxuLyoqXG4gKiBJbmplY3RlZCBkZXBlbmRlbmNpZXM6XG4gKi9cblxuLyoqXG4gKiAtIGBDb21wb25lbnRUcmVlYDogW3JlcXVpcmVkXSBNb2R1bGUgdGhhdCBjYW4gY29udmVydCBiZXR3ZWVuIFJlYWN0IGluc3RhbmNlc1xuICogICBhbmQgYWN0dWFsIG5vZGUgcmVmZXJlbmNlcy5cbiAqL1xudmFyIENvbXBvbmVudFRyZWU7XG52YXIgVHJlZVRyYXZlcnNhbDtcbnZhciBpbmplY3Rpb24gPSB7XG4gIGluamVjdENvbXBvbmVudFRyZWU6IGZ1bmN0aW9uIChJbmplY3RlZCkge1xuICAgIENvbXBvbmVudFRyZWUgPSBJbmplY3RlZDtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcoSW5qZWN0ZWQgJiYgSW5qZWN0ZWQuZ2V0Tm9kZUZyb21JbnN0YW5jZSAmJiBJbmplY3RlZC5nZXRJbnN0YW5jZUZyb21Ob2RlLCAnRXZlbnRQbHVnaW5VdGlscy5pbmplY3Rpb24uaW5qZWN0Q29tcG9uZW50VHJlZSguLi4pOiBJbmplY3RlZCAnICsgJ21vZHVsZSBpcyBtaXNzaW5nIGdldE5vZGVGcm9tSW5zdGFuY2Ugb3IgZ2V0SW5zdGFuY2VGcm9tTm9kZS4nKSA6IHZvaWQgMDtcbiAgICB9XG4gIH0sXG4gIGluamVjdFRyZWVUcmF2ZXJzYWw6IGZ1bmN0aW9uIChJbmplY3RlZCkge1xuICAgIFRyZWVUcmF2ZXJzYWwgPSBJbmplY3RlZDtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcoSW5qZWN0ZWQgJiYgSW5qZWN0ZWQuaXNBbmNlc3RvciAmJiBJbmplY3RlZC5nZXRMb3dlc3RDb21tb25BbmNlc3RvciwgJ0V2ZW50UGx1Z2luVXRpbHMuaW5qZWN0aW9uLmluamVjdFRyZWVUcmF2ZXJzYWwoLi4uKTogSW5qZWN0ZWQgJyArICdtb2R1bGUgaXMgbWlzc2luZyBpc0FuY2VzdG9yIG9yIGdldExvd2VzdENvbW1vbkFuY2VzdG9yLicpIDogdm9pZCAwO1xuICAgIH1cbiAgfVxufTtcblxuZnVuY3Rpb24gaXNFbmRpc2godG9wTGV2ZWxUeXBlKSB7XG4gIHJldHVybiB0b3BMZXZlbFR5cGUgPT09ICd0b3BNb3VzZVVwJyB8fCB0b3BMZXZlbFR5cGUgPT09ICd0b3BUb3VjaEVuZCcgfHwgdG9wTGV2ZWxUeXBlID09PSAndG9wVG91Y2hDYW5jZWwnO1xufVxuXG5mdW5jdGlvbiBpc01vdmVpc2godG9wTGV2ZWxUeXBlKSB7XG4gIHJldHVybiB0b3BMZXZlbFR5cGUgPT09ICd0b3BNb3VzZU1vdmUnIHx8IHRvcExldmVsVHlwZSA9PT0gJ3RvcFRvdWNoTW92ZSc7XG59XG5mdW5jdGlvbiBpc1N0YXJ0aXNoKHRvcExldmVsVHlwZSkge1xuICByZXR1cm4gdG9wTGV2ZWxUeXBlID09PSAndG9wTW91c2VEb3duJyB8fCB0b3BMZXZlbFR5cGUgPT09ICd0b3BUb3VjaFN0YXJ0Jztcbn1cblxudmFyIHZhbGlkYXRlRXZlbnREaXNwYXRjaGVzO1xuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgdmFsaWRhdGVFdmVudERpc3BhdGNoZXMgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICB2YXIgZGlzcGF0Y2hMaXN0ZW5lcnMgPSBldmVudC5fZGlzcGF0Y2hMaXN0ZW5lcnM7XG4gICAgdmFyIGRpc3BhdGNoSW5zdGFuY2VzID0gZXZlbnQuX2Rpc3BhdGNoSW5zdGFuY2VzO1xuXG4gICAgdmFyIGxpc3RlbmVyc0lzQXJyID0gQXJyYXkuaXNBcnJheShkaXNwYXRjaExpc3RlbmVycyk7XG4gICAgdmFyIGxpc3RlbmVyc0xlbiA9IGxpc3RlbmVyc0lzQXJyID8gZGlzcGF0Y2hMaXN0ZW5lcnMubGVuZ3RoIDogZGlzcGF0Y2hMaXN0ZW5lcnMgPyAxIDogMDtcblxuICAgIHZhciBpbnN0YW5jZXNJc0FyciA9IEFycmF5LmlzQXJyYXkoZGlzcGF0Y2hJbnN0YW5jZXMpO1xuICAgIHZhciBpbnN0YW5jZXNMZW4gPSBpbnN0YW5jZXNJc0FyciA/IGRpc3BhdGNoSW5zdGFuY2VzLmxlbmd0aCA6IGRpc3BhdGNoSW5zdGFuY2VzID8gMSA6IDA7XG5cbiAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyhpbnN0YW5jZXNJc0FyciA9PT0gbGlzdGVuZXJzSXNBcnIgJiYgaW5zdGFuY2VzTGVuID09PSBsaXN0ZW5lcnNMZW4sICdFdmVudFBsdWdpblV0aWxzOiBJbnZhbGlkIGBldmVudGAuJykgOiB2b2lkIDA7XG4gIH07XG59XG5cbi8qKlxuICogRGlzcGF0Y2ggdGhlIGV2ZW50IHRvIHRoZSBsaXN0ZW5lci5cbiAqIEBwYXJhbSB7U3ludGhldGljRXZlbnR9IGV2ZW50IFN5bnRoZXRpY0V2ZW50IHRvIGhhbmRsZVxuICogQHBhcmFtIHtib29sZWFufSBzaW11bGF0ZWQgSWYgdGhlIGV2ZW50IGlzIHNpbXVsYXRlZCAoY2hhbmdlcyBleG4gYmVoYXZpb3IpXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBsaXN0ZW5lciBBcHBsaWNhdGlvbi1sZXZlbCBjYWxsYmFja1xuICogQHBhcmFtIHsqfSBpbnN0IEludGVybmFsIGNvbXBvbmVudCBpbnN0YW5jZVxuICovXG5mdW5jdGlvbiBleGVjdXRlRGlzcGF0Y2goZXZlbnQsIHNpbXVsYXRlZCwgbGlzdGVuZXIsIGluc3QpIHtcbiAgdmFyIHR5cGUgPSBldmVudC50eXBlIHx8ICd1bmtub3duLWV2ZW50JztcbiAgZXZlbnQuY3VycmVudFRhcmdldCA9IEV2ZW50UGx1Z2luVXRpbHMuZ2V0Tm9kZUZyb21JbnN0YW5jZShpbnN0KTtcbiAgaWYgKHNpbXVsYXRlZCkge1xuICAgIFJlYWN0RXJyb3JVdGlscy5pbnZva2VHdWFyZGVkQ2FsbGJhY2tXaXRoQ2F0Y2godHlwZSwgbGlzdGVuZXIsIGV2ZW50KTtcbiAgfSBlbHNlIHtcbiAgICBSZWFjdEVycm9yVXRpbHMuaW52b2tlR3VhcmRlZENhbGxiYWNrKHR5cGUsIGxpc3RlbmVyLCBldmVudCk7XG4gIH1cbiAgZXZlbnQuY3VycmVudFRhcmdldCA9IG51bGw7XG59XG5cbi8qKlxuICogU3RhbmRhcmQvc2ltcGxlIGl0ZXJhdGlvbiB0aHJvdWdoIGFuIGV2ZW50J3MgY29sbGVjdGVkIGRpc3BhdGNoZXMuXG4gKi9cbmZ1bmN0aW9uIGV4ZWN1dGVEaXNwYXRjaGVzSW5PcmRlcihldmVudCwgc2ltdWxhdGVkKSB7XG4gIHZhciBkaXNwYXRjaExpc3RlbmVycyA9IGV2ZW50Ll9kaXNwYXRjaExpc3RlbmVycztcbiAgdmFyIGRpc3BhdGNoSW5zdGFuY2VzID0gZXZlbnQuX2Rpc3BhdGNoSW5zdGFuY2VzO1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIHZhbGlkYXRlRXZlbnREaXNwYXRjaGVzKGV2ZW50KTtcbiAgfVxuICBpZiAoQXJyYXkuaXNBcnJheShkaXNwYXRjaExpc3RlbmVycykpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRpc3BhdGNoTGlzdGVuZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIC8vIExpc3RlbmVycyBhbmQgSW5zdGFuY2VzIGFyZSB0d28gcGFyYWxsZWwgYXJyYXlzIHRoYXQgYXJlIGFsd2F5cyBpbiBzeW5jLlxuICAgICAgZXhlY3V0ZURpc3BhdGNoKGV2ZW50LCBzaW11bGF0ZWQsIGRpc3BhdGNoTGlzdGVuZXJzW2ldLCBkaXNwYXRjaEluc3RhbmNlc1tpXSk7XG4gICAgfVxuICB9IGVsc2UgaWYgKGRpc3BhdGNoTGlzdGVuZXJzKSB7XG4gICAgZXhlY3V0ZURpc3BhdGNoKGV2ZW50LCBzaW11bGF0ZWQsIGRpc3BhdGNoTGlzdGVuZXJzLCBkaXNwYXRjaEluc3RhbmNlcyk7XG4gIH1cbiAgZXZlbnQuX2Rpc3BhdGNoTGlzdGVuZXJzID0gbnVsbDtcbiAgZXZlbnQuX2Rpc3BhdGNoSW5zdGFuY2VzID0gbnVsbDtcbn1cblxuLyoqXG4gKiBTdGFuZGFyZC9zaW1wbGUgaXRlcmF0aW9uIHRocm91Z2ggYW4gZXZlbnQncyBjb2xsZWN0ZWQgZGlzcGF0Y2hlcywgYnV0IHN0b3BzXG4gKiBhdCB0aGUgZmlyc3QgZGlzcGF0Y2ggZXhlY3V0aW9uIHJldHVybmluZyB0cnVlLCBhbmQgcmV0dXJucyB0aGF0IGlkLlxuICpcbiAqIEByZXR1cm4gez9zdHJpbmd9IGlkIG9mIHRoZSBmaXJzdCBkaXNwYXRjaCBleGVjdXRpb24gd2hvJ3MgbGlzdGVuZXIgcmV0dXJuc1xuICogdHJ1ZSwgb3IgbnVsbCBpZiBubyBsaXN0ZW5lciByZXR1cm5lZCB0cnVlLlxuICovXG5mdW5jdGlvbiBleGVjdXRlRGlzcGF0Y2hlc0luT3JkZXJTdG9wQXRUcnVlSW1wbChldmVudCkge1xuICB2YXIgZGlzcGF0Y2hMaXN0ZW5lcnMgPSBldmVudC5fZGlzcGF0Y2hMaXN0ZW5lcnM7XG4gIHZhciBkaXNwYXRjaEluc3RhbmNlcyA9IGV2ZW50Ll9kaXNwYXRjaEluc3RhbmNlcztcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICB2YWxpZGF0ZUV2ZW50RGlzcGF0Y2hlcyhldmVudCk7XG4gIH1cbiAgaWYgKEFycmF5LmlzQXJyYXkoZGlzcGF0Y2hMaXN0ZW5lcnMpKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkaXNwYXRjaExpc3RlbmVycy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkKCkpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICAvLyBMaXN0ZW5lcnMgYW5kIEluc3RhbmNlcyBhcmUgdHdvIHBhcmFsbGVsIGFycmF5cyB0aGF0IGFyZSBhbHdheXMgaW4gc3luYy5cbiAgICAgIGlmIChkaXNwYXRjaExpc3RlbmVyc1tpXShldmVudCwgZGlzcGF0Y2hJbnN0YW5jZXNbaV0pKSB7XG4gICAgICAgIHJldHVybiBkaXNwYXRjaEluc3RhbmNlc1tpXTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSBpZiAoZGlzcGF0Y2hMaXN0ZW5lcnMpIHtcbiAgICBpZiAoZGlzcGF0Y2hMaXN0ZW5lcnMoZXZlbnQsIGRpc3BhdGNoSW5zdGFuY2VzKSkge1xuICAgICAgcmV0dXJuIGRpc3BhdGNoSW5zdGFuY2VzO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiBAc2VlIGV4ZWN1dGVEaXNwYXRjaGVzSW5PcmRlclN0b3BBdFRydWVJbXBsXG4gKi9cbmZ1bmN0aW9uIGV4ZWN1dGVEaXNwYXRjaGVzSW5PcmRlclN0b3BBdFRydWUoZXZlbnQpIHtcbiAgdmFyIHJldCA9IGV4ZWN1dGVEaXNwYXRjaGVzSW5PcmRlclN0b3BBdFRydWVJbXBsKGV2ZW50KTtcbiAgZXZlbnQuX2Rpc3BhdGNoSW5zdGFuY2VzID0gbnVsbDtcbiAgZXZlbnQuX2Rpc3BhdGNoTGlzdGVuZXJzID0gbnVsbDtcbiAgcmV0dXJuIHJldDtcbn1cblxuLyoqXG4gKiBFeGVjdXRpb24gb2YgYSBcImRpcmVjdFwiIGRpc3BhdGNoIC0gdGhlcmUgbXVzdCBiZSBhdCBtb3N0IG9uZSBkaXNwYXRjaFxuICogYWNjdW11bGF0ZWQgb24gdGhlIGV2ZW50IG9yIGl0IGlzIGNvbnNpZGVyZWQgYW4gZXJyb3IuIEl0IGRvZXNuJ3QgcmVhbGx5IG1ha2VcbiAqIHNlbnNlIGZvciBhbiBldmVudCB3aXRoIG11bHRpcGxlIGRpc3BhdGNoZXMgKGJ1YmJsZWQpIHRvIGtlZXAgdHJhY2sgb2YgdGhlXG4gKiByZXR1cm4gdmFsdWVzIGF0IGVhY2ggZGlzcGF0Y2ggZXhlY3V0aW9uLCBidXQgaXQgZG9lcyB0ZW5kIHRvIG1ha2Ugc2Vuc2Ugd2hlblxuICogZGVhbGluZyB3aXRoIFwiZGlyZWN0XCIgZGlzcGF0Y2hlcy5cbiAqXG4gKiBAcmV0dXJuIHsqfSBUaGUgcmV0dXJuIHZhbHVlIG9mIGV4ZWN1dGluZyB0aGUgc2luZ2xlIGRpc3BhdGNoLlxuICovXG5mdW5jdGlvbiBleGVjdXRlRGlyZWN0RGlzcGF0Y2goZXZlbnQpIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICB2YWxpZGF0ZUV2ZW50RGlzcGF0Y2hlcyhldmVudCk7XG4gIH1cbiAgdmFyIGRpc3BhdGNoTGlzdGVuZXIgPSBldmVudC5fZGlzcGF0Y2hMaXN0ZW5lcnM7XG4gIHZhciBkaXNwYXRjaEluc3RhbmNlID0gZXZlbnQuX2Rpc3BhdGNoSW5zdGFuY2VzO1xuICAhIUFycmF5LmlzQXJyYXkoZGlzcGF0Y2hMaXN0ZW5lcikgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAnZXhlY3V0ZURpcmVjdERpc3BhdGNoKC4uLik6IEludmFsaWQgYGV2ZW50YC4nKSA6IF9wcm9kSW52YXJpYW50KCcxMDMnKSA6IHZvaWQgMDtcbiAgZXZlbnQuY3VycmVudFRhcmdldCA9IGRpc3BhdGNoTGlzdGVuZXIgPyBFdmVudFBsdWdpblV0aWxzLmdldE5vZGVGcm9tSW5zdGFuY2UoZGlzcGF0Y2hJbnN0YW5jZSkgOiBudWxsO1xuICB2YXIgcmVzID0gZGlzcGF0Y2hMaXN0ZW5lciA/IGRpc3BhdGNoTGlzdGVuZXIoZXZlbnQpIDogbnVsbDtcbiAgZXZlbnQuY3VycmVudFRhcmdldCA9IG51bGw7XG4gIGV2ZW50Ll9kaXNwYXRjaExpc3RlbmVycyA9IG51bGw7XG4gIGV2ZW50Ll9kaXNwYXRjaEluc3RhbmNlcyA9IG51bGw7XG4gIHJldHVybiByZXM7XG59XG5cbi8qKlxuICogQHBhcmFtIHtTeW50aGV0aWNFdmVudH0gZXZlbnRcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWZmIG51bWJlciBvZiBkaXNwYXRjaGVzIGFjY3VtdWxhdGVkIGlzIGdyZWF0ZXIgdGhhbiAwLlxuICovXG5mdW5jdGlvbiBoYXNEaXNwYXRjaGVzKGV2ZW50KSB7XG4gIHJldHVybiAhIWV2ZW50Ll9kaXNwYXRjaExpc3RlbmVycztcbn1cblxuLyoqXG4gKiBHZW5lcmFsIHV0aWxpdGllcyB0aGF0IGFyZSB1c2VmdWwgaW4gY3JlYXRpbmcgY3VzdG9tIEV2ZW50IFBsdWdpbnMuXG4gKi9cbnZhciBFdmVudFBsdWdpblV0aWxzID0ge1xuICBpc0VuZGlzaDogaXNFbmRpc2gsXG4gIGlzTW92ZWlzaDogaXNNb3ZlaXNoLFxuICBpc1N0YXJ0aXNoOiBpc1N0YXJ0aXNoLFxuXG4gIGV4ZWN1dGVEaXJlY3REaXNwYXRjaDogZXhlY3V0ZURpcmVjdERpc3BhdGNoLFxuICBleGVjdXRlRGlzcGF0Y2hlc0luT3JkZXI6IGV4ZWN1dGVEaXNwYXRjaGVzSW5PcmRlcixcbiAgZXhlY3V0ZURpc3BhdGNoZXNJbk9yZGVyU3RvcEF0VHJ1ZTogZXhlY3V0ZURpc3BhdGNoZXNJbk9yZGVyU3RvcEF0VHJ1ZSxcbiAgaGFzRGlzcGF0Y2hlczogaGFzRGlzcGF0Y2hlcyxcblxuICBnZXRJbnN0YW5jZUZyb21Ob2RlOiBmdW5jdGlvbiAobm9kZSkge1xuICAgIHJldHVybiBDb21wb25lbnRUcmVlLmdldEluc3RhbmNlRnJvbU5vZGUobm9kZSk7XG4gIH0sXG4gIGdldE5vZGVGcm9tSW5zdGFuY2U6IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgcmV0dXJuIENvbXBvbmVudFRyZWUuZ2V0Tm9kZUZyb21JbnN0YW5jZShub2RlKTtcbiAgfSxcbiAgaXNBbmNlc3RvcjogZnVuY3Rpb24gKGEsIGIpIHtcbiAgICByZXR1cm4gVHJlZVRyYXZlcnNhbC5pc0FuY2VzdG9yKGEsIGIpO1xuICB9LFxuICBnZXRMb3dlc3RDb21tb25BbmNlc3RvcjogZnVuY3Rpb24gKGEsIGIpIHtcbiAgICByZXR1cm4gVHJlZVRyYXZlcnNhbC5nZXRMb3dlc3RDb21tb25BbmNlc3RvcihhLCBiKTtcbiAgfSxcbiAgZ2V0UGFyZW50SW5zdGFuY2U6IGZ1bmN0aW9uIChpbnN0KSB7XG4gICAgcmV0dXJuIFRyZWVUcmF2ZXJzYWwuZ2V0UGFyZW50SW5zdGFuY2UoaW5zdCk7XG4gIH0sXG4gIHRyYXZlcnNlVHdvUGhhc2U6IGZ1bmN0aW9uICh0YXJnZXQsIGZuLCBhcmcpIHtcbiAgICByZXR1cm4gVHJlZVRyYXZlcnNhbC50cmF2ZXJzZVR3b1BoYXNlKHRhcmdldCwgZm4sIGFyZyk7XG4gIH0sXG4gIHRyYXZlcnNlRW50ZXJMZWF2ZTogZnVuY3Rpb24gKGZyb20sIHRvLCBmbiwgYXJnRnJvbSwgYXJnVG8pIHtcbiAgICByZXR1cm4gVHJlZVRyYXZlcnNhbC50cmF2ZXJzZUVudGVyTGVhdmUoZnJvbSwgdG8sIGZuLCBhcmdGcm9tLCBhcmdUbyk7XG4gIH0sXG5cbiAgaW5qZWN0aW9uOiBpbmplY3Rpb25cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gRXZlbnRQbHVnaW5VdGlscztcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3JlYWN0LWRvbS9saWIvRXZlbnRQbHVnaW5VdGlscy5qcyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIFxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBFc2NhcGUgYW5kIHdyYXAga2V5IHNvIGl0IGlzIHNhZmUgdG8gdXNlIGFzIGEgcmVhY3RpZFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgdG8gYmUgZXNjYXBlZC5cbiAqIEByZXR1cm4ge3N0cmluZ30gdGhlIGVzY2FwZWQga2V5LlxuICovXG5cbmZ1bmN0aW9uIGVzY2FwZShrZXkpIHtcbiAgdmFyIGVzY2FwZVJlZ2V4ID0gL1s9Ol0vZztcbiAgdmFyIGVzY2FwZXJMb29rdXAgPSB7XG4gICAgJz0nOiAnPTAnLFxuICAgICc6JzogJz0yJ1xuICB9O1xuICB2YXIgZXNjYXBlZFN0cmluZyA9ICgnJyArIGtleSkucmVwbGFjZShlc2NhcGVSZWdleCwgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgcmV0dXJuIGVzY2FwZXJMb29rdXBbbWF0Y2hdO1xuICB9KTtcblxuICByZXR1cm4gJyQnICsgZXNjYXBlZFN0cmluZztcbn1cblxuLyoqXG4gKiBVbmVzY2FwZSBhbmQgdW53cmFwIGtleSBmb3IgaHVtYW4tcmVhZGFibGUgZGlzcGxheVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgdG8gdW5lc2NhcGUuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IHRoZSB1bmVzY2FwZWQga2V5LlxuICovXG5mdW5jdGlvbiB1bmVzY2FwZShrZXkpIHtcbiAgdmFyIHVuZXNjYXBlUmVnZXggPSAvKD0wfD0yKS9nO1xuICB2YXIgdW5lc2NhcGVyTG9va3VwID0ge1xuICAgICc9MCc6ICc9JyxcbiAgICAnPTInOiAnOidcbiAgfTtcbiAgdmFyIGtleVN1YnN0cmluZyA9IGtleVswXSA9PT0gJy4nICYmIGtleVsxXSA9PT0gJyQnID8ga2V5LnN1YnN0cmluZygyKSA6IGtleS5zdWJzdHJpbmcoMSk7XG5cbiAgcmV0dXJuICgnJyArIGtleVN1YnN0cmluZykucmVwbGFjZSh1bmVzY2FwZVJlZ2V4LCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICByZXR1cm4gdW5lc2NhcGVyTG9va3VwW21hdGNoXTtcbiAgfSk7XG59XG5cbnZhciBLZXlFc2NhcGVVdGlscyA9IHtcbiAgZXNjYXBlOiBlc2NhcGUsXG4gIHVuZXNjYXBlOiB1bmVzY2FwZVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBLZXlFc2NhcGVVdGlscztcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3JlYWN0LWRvbS9saWIvS2V5RXNjYXBlVXRpbHMuanMiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgX3Byb2RJbnZhcmlhbnQgPSByZXF1aXJlKCcuL3JlYWN0UHJvZEludmFyaWFudCcpO1xuXG52YXIgUmVhY3RQcm9wVHlwZXNTZWNyZXQgPSByZXF1aXJlKCcuL1JlYWN0UHJvcFR5cGVzU2VjcmV0Jyk7XG52YXIgcHJvcFR5cGVzRmFjdG9yeSA9IHJlcXVpcmUoJ3Byb3AtdHlwZXMvZmFjdG9yeScpO1xuXG52YXIgUmVhY3QgPSByZXF1aXJlKCdyZWFjdC9saWIvUmVhY3QnKTtcbnZhciBQcm9wVHlwZXMgPSBwcm9wVHlwZXNGYWN0b3J5KFJlYWN0LmlzVmFsaWRFbGVtZW50KTtcblxudmFyIGludmFyaWFudCA9IHJlcXVpcmUoJ2ZianMvbGliL2ludmFyaWFudCcpO1xudmFyIHdhcm5pbmcgPSByZXF1aXJlKCdmYmpzL2xpYi93YXJuaW5nJyk7XG5cbnZhciBoYXNSZWFkT25seVZhbHVlID0ge1xuICBidXR0b246IHRydWUsXG4gIGNoZWNrYm94OiB0cnVlLFxuICBpbWFnZTogdHJ1ZSxcbiAgaGlkZGVuOiB0cnVlLFxuICByYWRpbzogdHJ1ZSxcbiAgcmVzZXQ6IHRydWUsXG4gIHN1Ym1pdDogdHJ1ZVxufTtcblxuZnVuY3Rpb24gX2Fzc2VydFNpbmdsZUxpbmsoaW5wdXRQcm9wcykge1xuICAhKGlucHV0UHJvcHMuY2hlY2tlZExpbmsgPT0gbnVsbCB8fCBpbnB1dFByb3BzLnZhbHVlTGluayA9PSBudWxsKSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICdDYW5ub3QgcHJvdmlkZSBhIGNoZWNrZWRMaW5rIGFuZCBhIHZhbHVlTGluay4gSWYgeW91IHdhbnQgdG8gdXNlIGNoZWNrZWRMaW5rLCB5b3UgcHJvYmFibHkgZG9uXFwndCB3YW50IHRvIHVzZSB2YWx1ZUxpbmsgYW5kIHZpY2UgdmVyc2EuJykgOiBfcHJvZEludmFyaWFudCgnODcnKSA6IHZvaWQgMDtcbn1cbmZ1bmN0aW9uIF9hc3NlcnRWYWx1ZUxpbmsoaW5wdXRQcm9wcykge1xuICBfYXNzZXJ0U2luZ2xlTGluayhpbnB1dFByb3BzKTtcbiAgIShpbnB1dFByb3BzLnZhbHVlID09IG51bGwgJiYgaW5wdXRQcm9wcy5vbkNoYW5nZSA9PSBudWxsKSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICdDYW5ub3QgcHJvdmlkZSBhIHZhbHVlTGluayBhbmQgYSB2YWx1ZSBvciBvbkNoYW5nZSBldmVudC4gSWYgeW91IHdhbnQgdG8gdXNlIHZhbHVlIG9yIG9uQ2hhbmdlLCB5b3UgcHJvYmFibHkgZG9uXFwndCB3YW50IHRvIHVzZSB2YWx1ZUxpbmsuJykgOiBfcHJvZEludmFyaWFudCgnODgnKSA6IHZvaWQgMDtcbn1cblxuZnVuY3Rpb24gX2Fzc2VydENoZWNrZWRMaW5rKGlucHV0UHJvcHMpIHtcbiAgX2Fzc2VydFNpbmdsZUxpbmsoaW5wdXRQcm9wcyk7XG4gICEoaW5wdXRQcm9wcy5jaGVja2VkID09IG51bGwgJiYgaW5wdXRQcm9wcy5vbkNoYW5nZSA9PSBudWxsKSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICdDYW5ub3QgcHJvdmlkZSBhIGNoZWNrZWRMaW5rIGFuZCBhIGNoZWNrZWQgcHJvcGVydHkgb3Igb25DaGFuZ2UgZXZlbnQuIElmIHlvdSB3YW50IHRvIHVzZSBjaGVja2VkIG9yIG9uQ2hhbmdlLCB5b3UgcHJvYmFibHkgZG9uXFwndCB3YW50IHRvIHVzZSBjaGVja2VkTGluaycpIDogX3Byb2RJbnZhcmlhbnQoJzg5JykgOiB2b2lkIDA7XG59XG5cbnZhciBwcm9wVHlwZXMgPSB7XG4gIHZhbHVlOiBmdW5jdGlvbiAocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lKSB7XG4gICAgaWYgKCFwcm9wc1twcm9wTmFtZV0gfHwgaGFzUmVhZE9ubHlWYWx1ZVtwcm9wcy50eXBlXSB8fCBwcm9wcy5vbkNoYW5nZSB8fCBwcm9wcy5yZWFkT25seSB8fCBwcm9wcy5kaXNhYmxlZCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBuZXcgRXJyb3IoJ1lvdSBwcm92aWRlZCBhIGB2YWx1ZWAgcHJvcCB0byBhIGZvcm0gZmllbGQgd2l0aG91dCBhbiAnICsgJ2BvbkNoYW5nZWAgaGFuZGxlci4gVGhpcyB3aWxsIHJlbmRlciBhIHJlYWQtb25seSBmaWVsZC4gSWYgJyArICd0aGUgZmllbGQgc2hvdWxkIGJlIG11dGFibGUgdXNlIGBkZWZhdWx0VmFsdWVgLiBPdGhlcndpc2UsICcgKyAnc2V0IGVpdGhlciBgb25DaGFuZ2VgIG9yIGByZWFkT25seWAuJyk7XG4gIH0sXG4gIGNoZWNrZWQ6IGZ1bmN0aW9uIChwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUpIHtcbiAgICBpZiAoIXByb3BzW3Byb3BOYW1lXSB8fCBwcm9wcy5vbkNoYW5nZSB8fCBwcm9wcy5yZWFkT25seSB8fCBwcm9wcy5kaXNhYmxlZCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBuZXcgRXJyb3IoJ1lvdSBwcm92aWRlZCBhIGBjaGVja2VkYCBwcm9wIHRvIGEgZm9ybSBmaWVsZCB3aXRob3V0IGFuICcgKyAnYG9uQ2hhbmdlYCBoYW5kbGVyLiBUaGlzIHdpbGwgcmVuZGVyIGEgcmVhZC1vbmx5IGZpZWxkLiBJZiAnICsgJ3RoZSBmaWVsZCBzaG91bGQgYmUgbXV0YWJsZSB1c2UgYGRlZmF1bHRDaGVja2VkYC4gT3RoZXJ3aXNlLCAnICsgJ3NldCBlaXRoZXIgYG9uQ2hhbmdlYCBvciBgcmVhZE9ubHlgLicpO1xuICB9LFxuICBvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmNcbn07XG5cbnZhciBsb2dnZWRUeXBlRmFpbHVyZXMgPSB7fTtcbmZ1bmN0aW9uIGdldERlY2xhcmF0aW9uRXJyb3JBZGRlbmR1bShvd25lcikge1xuICBpZiAob3duZXIpIHtcbiAgICB2YXIgbmFtZSA9IG93bmVyLmdldE5hbWUoKTtcbiAgICBpZiAobmFtZSkge1xuICAgICAgcmV0dXJuICcgQ2hlY2sgdGhlIHJlbmRlciBtZXRob2Qgb2YgYCcgKyBuYW1lICsgJ2AuJztcbiAgICB9XG4gIH1cbiAgcmV0dXJuICcnO1xufVxuXG4vKipcbiAqIFByb3ZpZGUgYSBsaW5rZWQgYHZhbHVlYCBhdHRyaWJ1dGUgZm9yIGNvbnRyb2xsZWQgZm9ybXMuIFlvdSBzaG91bGQgbm90IHVzZVxuICogdGhpcyBvdXRzaWRlIG9mIHRoZSBSZWFjdERPTSBjb250cm9sbGVkIGZvcm0gY29tcG9uZW50cy5cbiAqL1xudmFyIExpbmtlZFZhbHVlVXRpbHMgPSB7XG4gIGNoZWNrUHJvcFR5cGVzOiBmdW5jdGlvbiAodGFnTmFtZSwgcHJvcHMsIG93bmVyKSB7XG4gICAgZm9yICh2YXIgcHJvcE5hbWUgaW4gcHJvcFR5cGVzKSB7XG4gICAgICBpZiAocHJvcFR5cGVzLmhhc093blByb3BlcnR5KHByb3BOYW1lKSkge1xuICAgICAgICB2YXIgZXJyb3IgPSBwcm9wVHlwZXNbcHJvcE5hbWVdKHByb3BzLCBwcm9wTmFtZSwgdGFnTmFtZSwgJ3Byb3AnLCBudWxsLCBSZWFjdFByb3BUeXBlc1NlY3JldCk7XG4gICAgICB9XG4gICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciAmJiAhKGVycm9yLm1lc3NhZ2UgaW4gbG9nZ2VkVHlwZUZhaWx1cmVzKSkge1xuICAgICAgICAvLyBPbmx5IG1vbml0b3IgdGhpcyBmYWlsdXJlIG9uY2UgYmVjYXVzZSB0aGVyZSB0ZW5kcyB0byBiZSBhIGxvdCBvZiB0aGVcbiAgICAgICAgLy8gc2FtZSBlcnJvci5cbiAgICAgICAgbG9nZ2VkVHlwZUZhaWx1cmVzW2Vycm9yLm1lc3NhZ2VdID0gdHJ1ZTtcblxuICAgICAgICB2YXIgYWRkZW5kdW0gPSBnZXREZWNsYXJhdGlvbkVycm9yQWRkZW5kdW0ob3duZXIpO1xuICAgICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyhmYWxzZSwgJ0ZhaWxlZCBmb3JtIHByb3BUeXBlOiAlcyVzJywgZXJyb3IubWVzc2FnZSwgYWRkZW5kdW0pIDogdm9pZCAwO1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IGlucHV0UHJvcHMgUHJvcHMgZm9yIGZvcm0gY29tcG9uZW50XG4gICAqIEByZXR1cm4geyp9IGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlucHV0IGVpdGhlciBmcm9tIHZhbHVlIHByb3Agb3IgbGluay5cbiAgICovXG4gIGdldFZhbHVlOiBmdW5jdGlvbiAoaW5wdXRQcm9wcykge1xuICAgIGlmIChpbnB1dFByb3BzLnZhbHVlTGluaykge1xuICAgICAgX2Fzc2VydFZhbHVlTGluayhpbnB1dFByb3BzKTtcbiAgICAgIHJldHVybiBpbnB1dFByb3BzLnZhbHVlTGluay52YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGlucHV0UHJvcHMudmFsdWU7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBpbnB1dFByb3BzIFByb3BzIGZvciBmb3JtIGNvbXBvbmVudFxuICAgKiBAcmV0dXJuIHsqfSBjdXJyZW50IGNoZWNrZWQgc3RhdHVzIG9mIHRoZSBpbnB1dCBlaXRoZXIgZnJvbSBjaGVja2VkIHByb3BcbiAgICogICAgICAgICAgICAgb3IgbGluay5cbiAgICovXG4gIGdldENoZWNrZWQ6IGZ1bmN0aW9uIChpbnB1dFByb3BzKSB7XG4gICAgaWYgKGlucHV0UHJvcHMuY2hlY2tlZExpbmspIHtcbiAgICAgIF9hc3NlcnRDaGVja2VkTGluayhpbnB1dFByb3BzKTtcbiAgICAgIHJldHVybiBpbnB1dFByb3BzLmNoZWNrZWRMaW5rLnZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gaW5wdXRQcm9wcy5jaGVja2VkO1xuICB9LFxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gaW5wdXRQcm9wcyBQcm9wcyBmb3IgZm9ybSBjb21wb25lbnRcbiAgICogQHBhcmFtIHtTeW50aGV0aWNFdmVudH0gZXZlbnQgY2hhbmdlIGV2ZW50IHRvIGhhbmRsZVxuICAgKi9cbiAgZXhlY3V0ZU9uQ2hhbmdlOiBmdW5jdGlvbiAoaW5wdXRQcm9wcywgZXZlbnQpIHtcbiAgICBpZiAoaW5wdXRQcm9wcy52YWx1ZUxpbmspIHtcbiAgICAgIF9hc3NlcnRWYWx1ZUxpbmsoaW5wdXRQcm9wcyk7XG4gICAgICByZXR1cm4gaW5wdXRQcm9wcy52YWx1ZUxpbmsucmVxdWVzdENoYW5nZShldmVudC50YXJnZXQudmFsdWUpO1xuICAgIH0gZWxzZSBpZiAoaW5wdXRQcm9wcy5jaGVja2VkTGluaykge1xuICAgICAgX2Fzc2VydENoZWNrZWRMaW5rKGlucHV0UHJvcHMpO1xuICAgICAgcmV0dXJuIGlucHV0UHJvcHMuY2hlY2tlZExpbmsucmVxdWVzdENoYW5nZShldmVudC50YXJnZXQuY2hlY2tlZCk7XG4gICAgfSBlbHNlIGlmIChpbnB1dFByb3BzLm9uQ2hhbmdlKSB7XG4gICAgICByZXR1cm4gaW5wdXRQcm9wcy5vbkNoYW5nZS5jYWxsKHVuZGVmaW5lZCwgZXZlbnQpO1xuICAgIH1cbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBMaW5rZWRWYWx1ZVV0aWxzO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QtZG9tL2xpYi9MaW5rZWRWYWx1ZVV0aWxzLmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxNC1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgX3Byb2RJbnZhcmlhbnQgPSByZXF1aXJlKCcuL3JlYWN0UHJvZEludmFyaWFudCcpO1xuXG52YXIgaW52YXJpYW50ID0gcmVxdWlyZSgnZmJqcy9saWIvaW52YXJpYW50Jyk7XG5cbnZhciBpbmplY3RlZCA9IGZhbHNlO1xuXG52YXIgUmVhY3RDb21wb25lbnRFbnZpcm9ubWVudCA9IHtcbiAgLyoqXG4gICAqIE9wdGlvbmFsbHkgaW5qZWN0YWJsZSBob29rIGZvciBzd2FwcGluZyBvdXQgbW91bnQgaW1hZ2VzIGluIHRoZSBtaWRkbGUgb2ZcbiAgICogdGhlIHRyZWUuXG4gICAqL1xuICByZXBsYWNlTm9kZVdpdGhNYXJrdXA6IG51bGwsXG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsbHkgaW5qZWN0YWJsZSBob29rIGZvciBwcm9jZXNzaW5nIGEgcXVldWUgb2YgY2hpbGQgdXBkYXRlcy4gV2lsbFxuICAgKiBsYXRlciBtb3ZlIGludG8gTXVsdGlDaGlsZENvbXBvbmVudHMuXG4gICAqL1xuICBwcm9jZXNzQ2hpbGRyZW5VcGRhdGVzOiBudWxsLFxuXG4gIGluamVjdGlvbjoge1xuICAgIGluamVjdEVudmlyb25tZW50OiBmdW5jdGlvbiAoZW52aXJvbm1lbnQpIHtcbiAgICAgICEhaW5qZWN0ZWQgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAnUmVhY3RDb21wb3NpdGVDb21wb25lbnQ6IGluamVjdEVudmlyb25tZW50KCkgY2FuIG9ubHkgYmUgY2FsbGVkIG9uY2UuJykgOiBfcHJvZEludmFyaWFudCgnMTA0JykgOiB2b2lkIDA7XG4gICAgICBSZWFjdENvbXBvbmVudEVudmlyb25tZW50LnJlcGxhY2VOb2RlV2l0aE1hcmt1cCA9IGVudmlyb25tZW50LnJlcGxhY2VOb2RlV2l0aE1hcmt1cDtcbiAgICAgIFJlYWN0Q29tcG9uZW50RW52aXJvbm1lbnQucHJvY2Vzc0NoaWxkcmVuVXBkYXRlcyA9IGVudmlyb25tZW50LnByb2Nlc3NDaGlsZHJlblVwZGF0ZXM7XG4gICAgICBpbmplY3RlZCA9IHRydWU7XG4gICAgfVxuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0Q29tcG9uZW50RW52aXJvbm1lbnQ7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1kb20vbGliL1JlYWN0Q29tcG9uZW50RW52aXJvbm1lbnQuanMiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBjYXVnaHRFcnJvciA9IG51bGw7XG5cbi8qKlxuICogQ2FsbCBhIGZ1bmN0aW9uIHdoaWxlIGd1YXJkaW5nIGFnYWluc3QgZXJyb3JzIHRoYXQgaGFwcGVucyB3aXRoaW4gaXQuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgb2YgdGhlIGd1YXJkIHRvIHVzZSBmb3IgbG9nZ2luZyBvciBkZWJ1Z2dpbmdcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGludm9rZVxuICogQHBhcmFtIHsqfSBhIEZpcnN0IGFyZ3VtZW50XG4gKiBAcGFyYW0geyp9IGIgU2Vjb25kIGFyZ3VtZW50XG4gKi9cbmZ1bmN0aW9uIGludm9rZUd1YXJkZWRDYWxsYmFjayhuYW1lLCBmdW5jLCBhKSB7XG4gIHRyeSB7XG4gICAgZnVuYyhhKTtcbiAgfSBjYXRjaCAoeCkge1xuICAgIGlmIChjYXVnaHRFcnJvciA9PT0gbnVsbCkge1xuICAgICAgY2F1Z2h0RXJyb3IgPSB4O1xuICAgIH1cbiAgfVxufVxuXG52YXIgUmVhY3RFcnJvclV0aWxzID0ge1xuICBpbnZva2VHdWFyZGVkQ2FsbGJhY2s6IGludm9rZUd1YXJkZWRDYWxsYmFjayxcblxuICAvKipcbiAgICogSW52b2tlZCBieSBSZWFjdFRlc3RVdGlscy5TaW11bGF0ZSBzbyB0aGF0IGFueSBlcnJvcnMgdGhyb3duIGJ5IHRoZSBldmVudFxuICAgKiBoYW5kbGVyIGFyZSBzdXJlIHRvIGJlIHJldGhyb3duIGJ5IHJldGhyb3dDYXVnaHRFcnJvci5cbiAgICovXG4gIGludm9rZUd1YXJkZWRDYWxsYmFja1dpdGhDYXRjaDogaW52b2tlR3VhcmRlZENhbGxiYWNrLFxuXG4gIC8qKlxuICAgKiBEdXJpbmcgZXhlY3V0aW9uIG9mIGd1YXJkZWQgZnVuY3Rpb25zIHdlIHdpbGwgY2FwdHVyZSB0aGUgZmlyc3QgZXJyb3Igd2hpY2hcbiAgICogd2Ugd2lsbCByZXRocm93IHRvIGJlIGhhbmRsZWQgYnkgdGhlIHRvcCBsZXZlbCBlcnJvciBoYW5kbGVyLlxuICAgKi9cbiAgcmV0aHJvd0NhdWdodEVycm9yOiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGNhdWdodEVycm9yKSB7XG4gICAgICB2YXIgZXJyb3IgPSBjYXVnaHRFcnJvcjtcbiAgICAgIGNhdWdodEVycm9yID0gbnVsbDtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxufTtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgLyoqXG4gICAqIFRvIGhlbHAgZGV2ZWxvcG1lbnQgd2UgY2FuIGdldCBiZXR0ZXIgZGV2dG9vbHMgaW50ZWdyYXRpb24gYnkgc2ltdWxhdGluZyBhXG4gICAqIHJlYWwgYnJvd3NlciBldmVudC5cbiAgICovXG4gIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygd2luZG93LmRpc3BhdGNoRXZlbnQgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgZG9jdW1lbnQuY3JlYXRlRXZlbnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICB2YXIgZmFrZU5vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdyZWFjdCcpO1xuICAgIFJlYWN0RXJyb3JVdGlscy5pbnZva2VHdWFyZGVkQ2FsbGJhY2sgPSBmdW5jdGlvbiAobmFtZSwgZnVuYywgYSkge1xuICAgICAgdmFyIGJvdW5kRnVuYyA9IGZ1bmMuYmluZChudWxsLCBhKTtcbiAgICAgIHZhciBldnRUeXBlID0gJ3JlYWN0LScgKyBuYW1lO1xuICAgICAgZmFrZU5vZGUuYWRkRXZlbnRMaXN0ZW5lcihldnRUeXBlLCBib3VuZEZ1bmMsIGZhbHNlKTtcbiAgICAgIHZhciBldnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnRXZlbnQnKTtcbiAgICAgIGV2dC5pbml0RXZlbnQoZXZ0VHlwZSwgZmFsc2UsIGZhbHNlKTtcbiAgICAgIGZha2VOb2RlLmRpc3BhdGNoRXZlbnQoZXZ0KTtcbiAgICAgIGZha2VOb2RlLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZ0VHlwZSwgYm91bmRGdW5jLCBmYWxzZSk7XG4gICAgfTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0RXJyb3JVdGlscztcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3JlYWN0LWRvbS9saWIvUmVhY3RFcnJvclV0aWxzLmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxNS1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIF9wcm9kSW52YXJpYW50ID0gcmVxdWlyZSgnLi9yZWFjdFByb2RJbnZhcmlhbnQnKTtcblxudmFyIFJlYWN0Q3VycmVudE93bmVyID0gcmVxdWlyZSgncmVhY3QvbGliL1JlYWN0Q3VycmVudE93bmVyJyk7XG52YXIgUmVhY3RJbnN0YW5jZU1hcCA9IHJlcXVpcmUoJy4vUmVhY3RJbnN0YW5jZU1hcCcpO1xudmFyIFJlYWN0SW5zdHJ1bWVudGF0aW9uID0gcmVxdWlyZSgnLi9SZWFjdEluc3RydW1lbnRhdGlvbicpO1xudmFyIFJlYWN0VXBkYXRlcyA9IHJlcXVpcmUoJy4vUmVhY3RVcGRhdGVzJyk7XG5cbnZhciBpbnZhcmlhbnQgPSByZXF1aXJlKCdmYmpzL2xpYi9pbnZhcmlhbnQnKTtcbnZhciB3YXJuaW5nID0gcmVxdWlyZSgnZmJqcy9saWIvd2FybmluZycpO1xuXG5mdW5jdGlvbiBlbnF1ZXVlVXBkYXRlKGludGVybmFsSW5zdGFuY2UpIHtcbiAgUmVhY3RVcGRhdGVzLmVucXVldWVVcGRhdGUoaW50ZXJuYWxJbnN0YW5jZSk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVuZXhwZWN0ZWRBcmd1bWVudChhcmcpIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgYXJnO1xuICBpZiAodHlwZSAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gdHlwZTtcbiAgfVxuICB2YXIgZGlzcGxheU5hbWUgPSBhcmcuY29uc3RydWN0b3IgJiYgYXJnLmNvbnN0cnVjdG9yLm5hbWUgfHwgdHlwZTtcbiAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhhcmcpO1xuICBpZiAoa2V5cy5sZW5ndGggPiAwICYmIGtleXMubGVuZ3RoIDwgMjApIHtcbiAgICByZXR1cm4gZGlzcGxheU5hbWUgKyAnIChrZXlzOiAnICsga2V5cy5qb2luKCcsICcpICsgJyknO1xuICB9XG4gIHJldHVybiBkaXNwbGF5TmFtZTtcbn1cblxuZnVuY3Rpb24gZ2V0SW50ZXJuYWxJbnN0YW5jZVJlYWR5Rm9yVXBkYXRlKHB1YmxpY0luc3RhbmNlLCBjYWxsZXJOYW1lKSB7XG4gIHZhciBpbnRlcm5hbEluc3RhbmNlID0gUmVhY3RJbnN0YW5jZU1hcC5nZXQocHVibGljSW5zdGFuY2UpO1xuICBpZiAoIWludGVybmFsSW5zdGFuY2UpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgdmFyIGN0b3IgPSBwdWJsaWNJbnN0YW5jZS5jb25zdHJ1Y3RvcjtcbiAgICAgIC8vIE9ubHkgd2FybiB3aGVuIHdlIGhhdmUgYSBjYWxsZXJOYW1lLiBPdGhlcndpc2Ugd2Ugc2hvdWxkIGJlIHNpbGVudC5cbiAgICAgIC8vIFdlJ3JlIHByb2JhYmx5IGNhbGxpbmcgZnJvbSBlbnF1ZXVlQ2FsbGJhY2suIFdlIGRvbid0IHdhbnQgdG8gd2FyblxuICAgICAgLy8gdGhlcmUgYmVjYXVzZSB3ZSBhbHJlYWR5IHdhcm5lZCBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgbGlmZWN5Y2xlIG1ldGhvZC5cbiAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKCFjYWxsZXJOYW1lLCAnJXMoLi4uKTogQ2FuIG9ubHkgdXBkYXRlIGEgbW91bnRlZCBvciBtb3VudGluZyBjb21wb25lbnQuICcgKyAnVGhpcyB1c3VhbGx5IG1lYW5zIHlvdSBjYWxsZWQgJXMoKSBvbiBhbiB1bm1vdW50ZWQgY29tcG9uZW50LiAnICsgJ1RoaXMgaXMgYSBuby1vcC4gUGxlYXNlIGNoZWNrIHRoZSBjb2RlIGZvciB0aGUgJXMgY29tcG9uZW50LicsIGNhbGxlck5hbWUsIGNhbGxlck5hbWUsIGN0b3IgJiYgKGN0b3IuZGlzcGxheU5hbWUgfHwgY3Rvci5uYW1lKSB8fCAnUmVhY3RDbGFzcycpIDogdm9pZCAwO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcoUmVhY3RDdXJyZW50T3duZXIuY3VycmVudCA9PSBudWxsLCAnJXMoLi4uKTogQ2Fubm90IHVwZGF0ZSBkdXJpbmcgYW4gZXhpc3Rpbmcgc3RhdGUgdHJhbnNpdGlvbiAoc3VjaCBhcyAnICsgXCJ3aXRoaW4gYHJlbmRlcmAgb3IgYW5vdGhlciBjb21wb25lbnQncyBjb25zdHJ1Y3RvcikuIFJlbmRlciBtZXRob2RzIFwiICsgJ3Nob3VsZCBiZSBhIHB1cmUgZnVuY3Rpb24gb2YgcHJvcHMgYW5kIHN0YXRlOyBjb25zdHJ1Y3RvciAnICsgJ3NpZGUtZWZmZWN0cyBhcmUgYW4gYW50aS1wYXR0ZXJuLCBidXQgY2FuIGJlIG1vdmVkIHRvICcgKyAnYGNvbXBvbmVudFdpbGxNb3VudGAuJywgY2FsbGVyTmFtZSkgOiB2b2lkIDA7XG4gIH1cblxuICByZXR1cm4gaW50ZXJuYWxJbnN0YW5jZTtcbn1cblxuLyoqXG4gKiBSZWFjdFVwZGF0ZVF1ZXVlIGFsbG93cyBmb3Igc3RhdGUgdXBkYXRlcyB0byBiZSBzY2hlZHVsZWQgaW50byBhIGxhdGVyXG4gKiByZWNvbmNpbGlhdGlvbiBzdGVwLlxuICovXG52YXIgUmVhY3RVcGRhdGVRdWV1ZSA9IHtcbiAgLyoqXG4gICAqIENoZWNrcyB3aGV0aGVyIG9yIG5vdCB0aGlzIGNvbXBvc2l0ZSBjb21wb25lbnQgaXMgbW91bnRlZC5cbiAgICogQHBhcmFtIHtSZWFjdENsYXNzfSBwdWJsaWNJbnN0YW5jZSBUaGUgaW5zdGFuY2Ugd2Ugd2FudCB0byB0ZXN0LlxuICAgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIG1vdW50ZWQsIGZhbHNlIG90aGVyd2lzZS5cbiAgICogQHByb3RlY3RlZFxuICAgKiBAZmluYWxcbiAgICovXG4gIGlzTW91bnRlZDogZnVuY3Rpb24gKHB1YmxpY0luc3RhbmNlKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIHZhciBvd25lciA9IFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQ7XG4gICAgICBpZiAob3duZXIgIT09IG51bGwpIHtcbiAgICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcob3duZXIuX3dhcm5lZEFib3V0UmVmc0luUmVuZGVyLCAnJXMgaXMgYWNjZXNzaW5nIGlzTW91bnRlZCBpbnNpZGUgaXRzIHJlbmRlcigpIGZ1bmN0aW9uLiAnICsgJ3JlbmRlcigpIHNob3VsZCBiZSBhIHB1cmUgZnVuY3Rpb24gb2YgcHJvcHMgYW5kIHN0YXRlLiBJdCBzaG91bGQgJyArICduZXZlciBhY2Nlc3Mgc29tZXRoaW5nIHRoYXQgcmVxdWlyZXMgc3RhbGUgZGF0YSBmcm9tIHRoZSBwcmV2aW91cyAnICsgJ3JlbmRlciwgc3VjaCBhcyByZWZzLiBNb3ZlIHRoaXMgbG9naWMgdG8gY29tcG9uZW50RGlkTW91bnQgYW5kICcgKyAnY29tcG9uZW50RGlkVXBkYXRlIGluc3RlYWQuJywgb3duZXIuZ2V0TmFtZSgpIHx8ICdBIGNvbXBvbmVudCcpIDogdm9pZCAwO1xuICAgICAgICBvd25lci5fd2FybmVkQWJvdXRSZWZzSW5SZW5kZXIgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICB2YXIgaW50ZXJuYWxJbnN0YW5jZSA9IFJlYWN0SW5zdGFuY2VNYXAuZ2V0KHB1YmxpY0luc3RhbmNlKTtcbiAgICBpZiAoaW50ZXJuYWxJbnN0YW5jZSkge1xuICAgICAgLy8gRHVyaW5nIGNvbXBvbmVudFdpbGxNb3VudCBhbmQgcmVuZGVyIHRoaXMgd2lsbCBzdGlsbCBiZSBudWxsIGJ1dCBhZnRlclxuICAgICAgLy8gdGhhdCB3aWxsIGFsd2F5cyByZW5kZXIgdG8gc29tZXRoaW5nLiBBdCBsZWFzdCBmb3Igbm93LiBTbyB3ZSBjYW4gdXNlXG4gICAgICAvLyB0aGlzIGhhY2suXG4gICAgICByZXR1cm4gISFpbnRlcm5hbEluc3RhbmNlLl9yZW5kZXJlZENvbXBvbmVudDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfSxcblxuICAvKipcbiAgICogRW5xdWV1ZSBhIGNhbGxiYWNrIHRoYXQgd2lsbCBiZSBleGVjdXRlZCBhZnRlciBhbGwgdGhlIHBlbmRpbmcgdXBkYXRlc1xuICAgKiBoYXZlIHByb2Nlc3NlZC5cbiAgICpcbiAgICogQHBhcmFtIHtSZWFjdENsYXNzfSBwdWJsaWNJbnN0YW5jZSBUaGUgaW5zdGFuY2UgdG8gdXNlIGFzIGB0aGlzYCBjb250ZXh0LlxuICAgKiBAcGFyYW0gez9mdW5jdGlvbn0gY2FsbGJhY2sgQ2FsbGVkIGFmdGVyIHN0YXRlIGlzIHVwZGF0ZWQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjYWxsZXJOYW1lIE5hbWUgb2YgdGhlIGNhbGxpbmcgZnVuY3Rpb24gaW4gdGhlIHB1YmxpYyBBUEkuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZW5xdWV1ZUNhbGxiYWNrOiBmdW5jdGlvbiAocHVibGljSW5zdGFuY2UsIGNhbGxiYWNrLCBjYWxsZXJOYW1lKSB7XG4gICAgUmVhY3RVcGRhdGVRdWV1ZS52YWxpZGF0ZUNhbGxiYWNrKGNhbGxiYWNrLCBjYWxsZXJOYW1lKTtcbiAgICB2YXIgaW50ZXJuYWxJbnN0YW5jZSA9IGdldEludGVybmFsSW5zdGFuY2VSZWFkeUZvclVwZGF0ZShwdWJsaWNJbnN0YW5jZSk7XG5cbiAgICAvLyBQcmV2aW91c2x5IHdlIHdvdWxkIHRocm93IGFuIGVycm9yIGlmIHdlIGRpZG4ndCBoYXZlIGFuIGludGVybmFsXG4gICAgLy8gaW5zdGFuY2UuIFNpbmNlIHdlIHdhbnQgdG8gbWFrZSBpdCBhIG5vLW9wIGluc3RlYWQsIHdlIG1pcnJvciB0aGUgc2FtZVxuICAgIC8vIGJlaGF2aW9yIHdlIGhhdmUgaW4gb3RoZXIgZW5xdWV1ZSogbWV0aG9kcy5cbiAgICAvLyBXZSBhbHNvIG5lZWQgdG8gaWdub3JlIGNhbGxiYWNrcyBpbiBjb21wb25lbnRXaWxsTW91bnQuIFNlZVxuICAgIC8vIGVucXVldWVVcGRhdGVzLlxuICAgIGlmICghaW50ZXJuYWxJbnN0YW5jZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGludGVybmFsSW5zdGFuY2UuX3BlbmRpbmdDYWxsYmFja3MpIHtcbiAgICAgIGludGVybmFsSW5zdGFuY2UuX3BlbmRpbmdDYWxsYmFja3MucHVzaChjYWxsYmFjayk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGludGVybmFsSW5zdGFuY2UuX3BlbmRpbmdDYWxsYmFja3MgPSBbY2FsbGJhY2tdO1xuICAgIH1cbiAgICAvLyBUT0RPOiBUaGUgY2FsbGJhY2sgaGVyZSBpcyBpZ25vcmVkIHdoZW4gc2V0U3RhdGUgaXMgY2FsbGVkIGZyb21cbiAgICAvLyBjb21wb25lbnRXaWxsTW91bnQuIEVpdGhlciBmaXggaXQgb3IgZGlzYWxsb3cgZG9pbmcgc28gY29tcGxldGVseSBpblxuICAgIC8vIGZhdm9yIG9mIGdldEluaXRpYWxTdGF0ZS4gQWx0ZXJuYXRpdmVseSwgd2UgY2FuIGRpc2FsbG93XG4gICAgLy8gY29tcG9uZW50V2lsbE1vdW50IGR1cmluZyBzZXJ2ZXItc2lkZSByZW5kZXJpbmcuXG4gICAgZW5xdWV1ZVVwZGF0ZShpbnRlcm5hbEluc3RhbmNlKTtcbiAgfSxcblxuICBlbnF1ZXVlQ2FsbGJhY2tJbnRlcm5hbDogZnVuY3Rpb24gKGludGVybmFsSW5zdGFuY2UsIGNhbGxiYWNrKSB7XG4gICAgaWYgKGludGVybmFsSW5zdGFuY2UuX3BlbmRpbmdDYWxsYmFja3MpIHtcbiAgICAgIGludGVybmFsSW5zdGFuY2UuX3BlbmRpbmdDYWxsYmFja3MucHVzaChjYWxsYmFjayk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGludGVybmFsSW5zdGFuY2UuX3BlbmRpbmdDYWxsYmFja3MgPSBbY2FsbGJhY2tdO1xuICAgIH1cbiAgICBlbnF1ZXVlVXBkYXRlKGludGVybmFsSW5zdGFuY2UpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBGb3JjZXMgYW4gdXBkYXRlLiBUaGlzIHNob3VsZCBvbmx5IGJlIGludm9rZWQgd2hlbiBpdCBpcyBrbm93biB3aXRoXG4gICAqIGNlcnRhaW50eSB0aGF0IHdlIGFyZSAqKm5vdCoqIGluIGEgRE9NIHRyYW5zYWN0aW9uLlxuICAgKlxuICAgKiBZb3UgbWF5IHdhbnQgdG8gY2FsbCB0aGlzIHdoZW4geW91IGtub3cgdGhhdCBzb21lIGRlZXBlciBhc3BlY3Qgb2YgdGhlXG4gICAqIGNvbXBvbmVudCdzIHN0YXRlIGhhcyBjaGFuZ2VkIGJ1dCBgc2V0U3RhdGVgIHdhcyBub3QgY2FsbGVkLlxuICAgKlxuICAgKiBUaGlzIHdpbGwgbm90IGludm9rZSBgc2hvdWxkQ29tcG9uZW50VXBkYXRlYCwgYnV0IGl0IHdpbGwgaW52b2tlXG4gICAqIGBjb21wb25lbnRXaWxsVXBkYXRlYCBhbmQgYGNvbXBvbmVudERpZFVwZGF0ZWAuXG4gICAqXG4gICAqIEBwYXJhbSB7UmVhY3RDbGFzc30gcHVibGljSW5zdGFuY2UgVGhlIGluc3RhbmNlIHRoYXQgc2hvdWxkIHJlcmVuZGVyLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGVucXVldWVGb3JjZVVwZGF0ZTogZnVuY3Rpb24gKHB1YmxpY0luc3RhbmNlKSB7XG4gICAgdmFyIGludGVybmFsSW5zdGFuY2UgPSBnZXRJbnRlcm5hbEluc3RhbmNlUmVhZHlGb3JVcGRhdGUocHVibGljSW5zdGFuY2UsICdmb3JjZVVwZGF0ZScpO1xuXG4gICAgaWYgKCFpbnRlcm5hbEluc3RhbmNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaW50ZXJuYWxJbnN0YW5jZS5fcGVuZGluZ0ZvcmNlVXBkYXRlID0gdHJ1ZTtcblxuICAgIGVucXVldWVVcGRhdGUoaW50ZXJuYWxJbnN0YW5jZSk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFJlcGxhY2VzIGFsbCBvZiB0aGUgc3RhdGUuIEFsd2F5cyB1c2UgdGhpcyBvciBgc2V0U3RhdGVgIHRvIG11dGF0ZSBzdGF0ZS5cbiAgICogWW91IHNob3VsZCB0cmVhdCBgdGhpcy5zdGF0ZWAgYXMgaW1tdXRhYmxlLlxuICAgKlxuICAgKiBUaGVyZSBpcyBubyBndWFyYW50ZWUgdGhhdCBgdGhpcy5zdGF0ZWAgd2lsbCBiZSBpbW1lZGlhdGVseSB1cGRhdGVkLCBzb1xuICAgKiBhY2Nlc3NpbmcgYHRoaXMuc3RhdGVgIGFmdGVyIGNhbGxpbmcgdGhpcyBtZXRob2QgbWF5IHJldHVybiB0aGUgb2xkIHZhbHVlLlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0Q2xhc3N9IHB1YmxpY0luc3RhbmNlIFRoZSBpbnN0YW5jZSB0aGF0IHNob3VsZCByZXJlbmRlci5cbiAgICogQHBhcmFtIHtvYmplY3R9IGNvbXBsZXRlU3RhdGUgTmV4dCBzdGF0ZS5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBlbnF1ZXVlUmVwbGFjZVN0YXRlOiBmdW5jdGlvbiAocHVibGljSW5zdGFuY2UsIGNvbXBsZXRlU3RhdGUsIGNhbGxiYWNrKSB7XG4gICAgdmFyIGludGVybmFsSW5zdGFuY2UgPSBnZXRJbnRlcm5hbEluc3RhbmNlUmVhZHlGb3JVcGRhdGUocHVibGljSW5zdGFuY2UsICdyZXBsYWNlU3RhdGUnKTtcblxuICAgIGlmICghaW50ZXJuYWxJbnN0YW5jZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGludGVybmFsSW5zdGFuY2UuX3BlbmRpbmdTdGF0ZVF1ZXVlID0gW2NvbXBsZXRlU3RhdGVdO1xuICAgIGludGVybmFsSW5zdGFuY2UuX3BlbmRpbmdSZXBsYWNlU3RhdGUgPSB0cnVlO1xuXG4gICAgLy8gRnV0dXJlLXByb29mIDE1LjVcbiAgICBpZiAoY2FsbGJhY2sgIT09IHVuZGVmaW5lZCAmJiBjYWxsYmFjayAhPT0gbnVsbCkge1xuICAgICAgUmVhY3RVcGRhdGVRdWV1ZS52YWxpZGF0ZUNhbGxiYWNrKGNhbGxiYWNrLCAncmVwbGFjZVN0YXRlJyk7XG4gICAgICBpZiAoaW50ZXJuYWxJbnN0YW5jZS5fcGVuZGluZ0NhbGxiYWNrcykge1xuICAgICAgICBpbnRlcm5hbEluc3RhbmNlLl9wZW5kaW5nQ2FsbGJhY2tzLnB1c2goY2FsbGJhY2spO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW50ZXJuYWxJbnN0YW5jZS5fcGVuZGluZ0NhbGxiYWNrcyA9IFtjYWxsYmFja107XG4gICAgICB9XG4gICAgfVxuXG4gICAgZW5xdWV1ZVVwZGF0ZShpbnRlcm5hbEluc3RhbmNlKTtcbiAgfSxcblxuICAvKipcbiAgICogU2V0cyBhIHN1YnNldCBvZiB0aGUgc3RhdGUuIFRoaXMgb25seSBleGlzdHMgYmVjYXVzZSBfcGVuZGluZ1N0YXRlIGlzXG4gICAqIGludGVybmFsLiBUaGlzIHByb3ZpZGVzIGEgbWVyZ2luZyBzdHJhdGVneSB0aGF0IGlzIG5vdCBhdmFpbGFibGUgdG8gZGVlcFxuICAgKiBwcm9wZXJ0aWVzIHdoaWNoIGlzIGNvbmZ1c2luZy4gVE9ETzogRXhwb3NlIHBlbmRpbmdTdGF0ZSBvciBkb24ndCB1c2UgaXRcbiAgICogZHVyaW5nIHRoZSBtZXJnZS5cbiAgICpcbiAgICogQHBhcmFtIHtSZWFjdENsYXNzfSBwdWJsaWNJbnN0YW5jZSBUaGUgaW5zdGFuY2UgdGhhdCBzaG91bGQgcmVyZW5kZXIuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBwYXJ0aWFsU3RhdGUgTmV4dCBwYXJ0aWFsIHN0YXRlIHRvIGJlIG1lcmdlZCB3aXRoIHN0YXRlLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGVucXVldWVTZXRTdGF0ZTogZnVuY3Rpb24gKHB1YmxpY0luc3RhbmNlLCBwYXJ0aWFsU3RhdGUpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgUmVhY3RJbnN0cnVtZW50YXRpb24uZGVidWdUb29sLm9uU2V0U3RhdGUoKTtcbiAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKHBhcnRpYWxTdGF0ZSAhPSBudWxsLCAnc2V0U3RhdGUoLi4uKTogWW91IHBhc3NlZCBhbiB1bmRlZmluZWQgb3IgbnVsbCBzdGF0ZSBvYmplY3Q7ICcgKyAnaW5zdGVhZCwgdXNlIGZvcmNlVXBkYXRlKCkuJykgOiB2b2lkIDA7XG4gICAgfVxuXG4gICAgdmFyIGludGVybmFsSW5zdGFuY2UgPSBnZXRJbnRlcm5hbEluc3RhbmNlUmVhZHlGb3JVcGRhdGUocHVibGljSW5zdGFuY2UsICdzZXRTdGF0ZScpO1xuXG4gICAgaWYgKCFpbnRlcm5hbEluc3RhbmNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHF1ZXVlID0gaW50ZXJuYWxJbnN0YW5jZS5fcGVuZGluZ1N0YXRlUXVldWUgfHwgKGludGVybmFsSW5zdGFuY2UuX3BlbmRpbmdTdGF0ZVF1ZXVlID0gW10pO1xuICAgIHF1ZXVlLnB1c2gocGFydGlhbFN0YXRlKTtcblxuICAgIGVucXVldWVVcGRhdGUoaW50ZXJuYWxJbnN0YW5jZSk7XG4gIH0sXG5cbiAgZW5xdWV1ZUVsZW1lbnRJbnRlcm5hbDogZnVuY3Rpb24gKGludGVybmFsSW5zdGFuY2UsIG5leHRFbGVtZW50LCBuZXh0Q29udGV4dCkge1xuICAgIGludGVybmFsSW5zdGFuY2UuX3BlbmRpbmdFbGVtZW50ID0gbmV4dEVsZW1lbnQ7XG4gICAgLy8gVE9ETzogaW50cm9kdWNlIF9wZW5kaW5nQ29udGV4dCBpbnN0ZWFkIG9mIHNldHRpbmcgaXQgZGlyZWN0bHkuXG4gICAgaW50ZXJuYWxJbnN0YW5jZS5fY29udGV4dCA9IG5leHRDb250ZXh0O1xuICAgIGVucXVldWVVcGRhdGUoaW50ZXJuYWxJbnN0YW5jZSk7XG4gIH0sXG5cbiAgdmFsaWRhdGVDYWxsYmFjazogZnVuY3Rpb24gKGNhbGxiYWNrLCBjYWxsZXJOYW1lKSB7XG4gICAgISghY2FsbGJhY2sgfHwgdHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICclcyguLi4pOiBFeHBlY3RlZCB0aGUgbGFzdCBvcHRpb25hbCBgY2FsbGJhY2tgIGFyZ3VtZW50IHRvIGJlIGEgZnVuY3Rpb24uIEluc3RlYWQgcmVjZWl2ZWQ6ICVzLicsIGNhbGxlck5hbWUsIGZvcm1hdFVuZXhwZWN0ZWRBcmd1bWVudChjYWxsYmFjaykpIDogX3Byb2RJbnZhcmlhbnQoJzEyMicsIGNhbGxlck5hbWUsIGZvcm1hdFVuZXhwZWN0ZWRBcmd1bWVudChjYWxsYmFjaykpIDogdm9pZCAwO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0VXBkYXRlUXVldWU7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1kb20vbGliL1JlYWN0VXBkYXRlUXVldWUuanMiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuLyogZ2xvYmFscyBNU0FwcCAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbi8qKlxuICogQ3JlYXRlIGEgZnVuY3Rpb24gd2hpY2ggaGFzICd1bnNhZmUnIHByaXZpbGVnZXMgKHJlcXVpcmVkIGJ5IHdpbmRvd3M4IGFwcHMpXG4gKi9cblxudmFyIGNyZWF0ZU1pY3Jvc29mdFVuc2FmZUxvY2FsRnVuY3Rpb24gPSBmdW5jdGlvbiAoZnVuYykge1xuICBpZiAodHlwZW9mIE1TQXBwICE9PSAndW5kZWZpbmVkJyAmJiBNU0FwcC5leGVjVW5zYWZlTG9jYWxGdW5jdGlvbikge1xuICAgIHJldHVybiBmdW5jdGlvbiAoYXJnMCwgYXJnMSwgYXJnMiwgYXJnMykge1xuICAgICAgTVNBcHAuZXhlY1Vuc2FmZUxvY2FsRnVuY3Rpb24oZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gZnVuYyhhcmcwLCBhcmcxLCBhcmcyLCBhcmczKTtcbiAgICAgIH0pO1xuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGZ1bmM7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlTWljcm9zb2Z0VW5zYWZlTG9jYWxGdW5jdGlvbjtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3JlYWN0LWRvbS9saWIvY3JlYXRlTWljcm9zb2Z0VW5zYWZlTG9jYWxGdW5jdGlvbi5qcyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbi8qKlxuICogYGNoYXJDb2RlYCByZXByZXNlbnRzIHRoZSBhY3R1YWwgXCJjaGFyYWN0ZXIgY29kZVwiIGFuZCBpcyBzYWZlIHRvIHVzZSB3aXRoXG4gKiBgU3RyaW5nLmZyb21DaGFyQ29kZWAuIEFzIHN1Y2gsIG9ubHkga2V5cyB0aGF0IGNvcnJlc3BvbmQgdG8gcHJpbnRhYmxlXG4gKiBjaGFyYWN0ZXJzIHByb2R1Y2UgYSB2YWxpZCBgY2hhckNvZGVgLCB0aGUgb25seSBleGNlcHRpb24gdG8gdGhpcyBpcyBFbnRlci5cbiAqIFRoZSBUYWIta2V5IGlzIGNvbnNpZGVyZWQgbm9uLXByaW50YWJsZSBhbmQgZG9lcyBub3QgaGF2ZSBhIGBjaGFyQ29kZWAsXG4gKiBwcmVzdW1hYmx5IGJlY2F1c2UgaXQgZG9lcyBub3QgcHJvZHVjZSBhIHRhYi1jaGFyYWN0ZXIgaW4gYnJvd3NlcnMuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IG5hdGl2ZUV2ZW50IE5hdGl2ZSBicm93c2VyIGV2ZW50LlxuICogQHJldHVybiB7bnVtYmVyfSBOb3JtYWxpemVkIGBjaGFyQ29kZWAgcHJvcGVydHkuXG4gKi9cblxuZnVuY3Rpb24gZ2V0RXZlbnRDaGFyQ29kZShuYXRpdmVFdmVudCkge1xuICB2YXIgY2hhckNvZGU7XG4gIHZhciBrZXlDb2RlID0gbmF0aXZlRXZlbnQua2V5Q29kZTtcblxuICBpZiAoJ2NoYXJDb2RlJyBpbiBuYXRpdmVFdmVudCkge1xuICAgIGNoYXJDb2RlID0gbmF0aXZlRXZlbnQuY2hhckNvZGU7XG5cbiAgICAvLyBGRiBkb2VzIG5vdCBzZXQgYGNoYXJDb2RlYCBmb3IgdGhlIEVudGVyLWtleSwgY2hlY2sgYWdhaW5zdCBga2V5Q29kZWAuXG4gICAgaWYgKGNoYXJDb2RlID09PSAwICYmIGtleUNvZGUgPT09IDEzKSB7XG4gICAgICBjaGFyQ29kZSA9IDEzO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBJRTggZG9lcyBub3QgaW1wbGVtZW50IGBjaGFyQ29kZWAsIGJ1dCBga2V5Q29kZWAgaGFzIHRoZSBjb3JyZWN0IHZhbHVlLlxuICAgIGNoYXJDb2RlID0ga2V5Q29kZTtcbiAgfVxuXG4gIC8vIFNvbWUgbm9uLXByaW50YWJsZSBrZXlzIGFyZSByZXBvcnRlZCBpbiBgY2hhckNvZGVgL2BrZXlDb2RlYCwgZGlzY2FyZCB0aGVtLlxuICAvLyBNdXN0IG5vdCBkaXNjYXJkIHRoZSAobm9uLSlwcmludGFibGUgRW50ZXIta2V5LlxuICBpZiAoY2hhckNvZGUgPj0gMzIgfHwgY2hhckNvZGUgPT09IDEzKSB7XG4gICAgcmV0dXJuIGNoYXJDb2RlO1xuICB9XG5cbiAgcmV0dXJuIDA7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0RXZlbnRDaGFyQ29kZTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3JlYWN0LWRvbS9saWIvZ2V0RXZlbnRDaGFyQ29kZS5qcyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbi8qKlxuICogVHJhbnNsYXRpb24gZnJvbSBtb2RpZmllciBrZXkgdG8gdGhlIGFzc29jaWF0ZWQgcHJvcGVydHkgaW4gdGhlIGV2ZW50LlxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1FdmVudHMvI2tleXMtTW9kaWZpZXJzXG4gKi9cblxudmFyIG1vZGlmaWVyS2V5VG9Qcm9wID0ge1xuICBBbHQ6ICdhbHRLZXknLFxuICBDb250cm9sOiAnY3RybEtleScsXG4gIE1ldGE6ICdtZXRhS2V5JyxcbiAgU2hpZnQ6ICdzaGlmdEtleSdcbn07XG5cbi8vIElFOCBkb2VzIG5vdCBpbXBsZW1lbnQgZ2V0TW9kaWZpZXJTdGF0ZSBzbyB3ZSBzaW1wbHkgbWFwIGl0IHRvIHRoZSBvbmx5XG4vLyBtb2RpZmllciBrZXlzIGV4cG9zZWQgYnkgdGhlIGV2ZW50IGl0c2VsZiwgZG9lcyBub3Qgc3VwcG9ydCBMb2NrLWtleXMuXG4vLyBDdXJyZW50bHksIGFsbCBtYWpvciBicm93c2VycyBleGNlcHQgQ2hyb21lIHNlZW1zIHRvIHN1cHBvcnQgTG9jay1rZXlzLlxuZnVuY3Rpb24gbW9kaWZpZXJTdGF0ZUdldHRlcihrZXlBcmcpIHtcbiAgdmFyIHN5bnRoZXRpY0V2ZW50ID0gdGhpcztcbiAgdmFyIG5hdGl2ZUV2ZW50ID0gc3ludGhldGljRXZlbnQubmF0aXZlRXZlbnQ7XG4gIGlmIChuYXRpdmVFdmVudC5nZXRNb2RpZmllclN0YXRlKSB7XG4gICAgcmV0dXJuIG5hdGl2ZUV2ZW50LmdldE1vZGlmaWVyU3RhdGUoa2V5QXJnKTtcbiAgfVxuICB2YXIga2V5UHJvcCA9IG1vZGlmaWVyS2V5VG9Qcm9wW2tleUFyZ107XG4gIHJldHVybiBrZXlQcm9wID8gISFuYXRpdmVFdmVudFtrZXlQcm9wXSA6IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBnZXRFdmVudE1vZGlmaWVyU3RhdGUobmF0aXZlRXZlbnQpIHtcbiAgcmV0dXJuIG1vZGlmaWVyU3RhdGVHZXR0ZXI7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0RXZlbnRNb2RpZmllclN0YXRlO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QtZG9tL2xpYi9nZXRFdmVudE1vZGlmaWVyU3RhdGUuanMiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIEdldHMgdGhlIHRhcmdldCBub2RlIGZyb20gYSBuYXRpdmUgYnJvd3NlciBldmVudCBieSBhY2NvdW50aW5nIGZvclxuICogaW5jb25zaXN0ZW5jaWVzIGluIGJyb3dzZXIgRE9NIEFQSXMuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IG5hdGl2ZUV2ZW50IE5hdGl2ZSBicm93c2VyIGV2ZW50LlxuICogQHJldHVybiB7RE9NRXZlbnRUYXJnZXR9IFRhcmdldCBub2RlLlxuICovXG5cbmZ1bmN0aW9uIGdldEV2ZW50VGFyZ2V0KG5hdGl2ZUV2ZW50KSB7XG4gIHZhciB0YXJnZXQgPSBuYXRpdmVFdmVudC50YXJnZXQgfHwgbmF0aXZlRXZlbnQuc3JjRWxlbWVudCB8fCB3aW5kb3c7XG5cbiAgLy8gTm9ybWFsaXplIFNWRyA8dXNlPiBlbGVtZW50IGV2ZW50cyAjNDk2M1xuICBpZiAodGFyZ2V0LmNvcnJlc3BvbmRpbmdVc2VFbGVtZW50KSB7XG4gICAgdGFyZ2V0ID0gdGFyZ2V0LmNvcnJlc3BvbmRpbmdVc2VFbGVtZW50O1xuICB9XG5cbiAgLy8gU2FmYXJpIG1heSBmaXJlIGV2ZW50cyBvbiB0ZXh0IG5vZGVzIChOb2RlLlRFWFRfTk9ERSBpcyAzKS5cbiAgLy8gQHNlZSBodHRwOi8vd3d3LnF1aXJrc21vZGUub3JnL2pzL2V2ZW50c19wcm9wZXJ0aWVzLmh0bWxcbiAgcmV0dXJuIHRhcmdldC5ub2RlVHlwZSA9PT0gMyA/IHRhcmdldC5wYXJlbnROb2RlIDogdGFyZ2V0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEV2ZW50VGFyZ2V0O1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QtZG9tL2xpYi9nZXRFdmVudFRhcmdldC5qcyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBFeGVjdXRpb25FbnZpcm9ubWVudCA9IHJlcXVpcmUoJ2ZianMvbGliL0V4ZWN1dGlvbkVudmlyb25tZW50Jyk7XG5cbnZhciB1c2VIYXNGZWF0dXJlO1xuaWYgKEV4ZWN1dGlvbkVudmlyb25tZW50LmNhblVzZURPTSkge1xuICB1c2VIYXNGZWF0dXJlID0gZG9jdW1lbnQuaW1wbGVtZW50YXRpb24gJiYgZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uaGFzRmVhdHVyZSAmJlxuICAvLyBhbHdheXMgcmV0dXJucyB0cnVlIGluIG5ld2VyIGJyb3dzZXJzIGFzIHBlciB0aGUgc3RhbmRhcmQuXG4gIC8vIEBzZWUgaHR0cDovL2RvbS5zcGVjLndoYXR3Zy5vcmcvI2RvbS1kb21pbXBsZW1lbnRhdGlvbi1oYXNmZWF0dXJlXG4gIGRvY3VtZW50LmltcGxlbWVudGF0aW9uLmhhc0ZlYXR1cmUoJycsICcnKSAhPT0gdHJ1ZTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYW4gZXZlbnQgaXMgc3VwcG9ydGVkIGluIHRoZSBjdXJyZW50IGV4ZWN1dGlvbiBlbnZpcm9ubWVudC5cbiAqXG4gKiBOT1RFOiBUaGlzIHdpbGwgbm90IHdvcmsgY29ycmVjdGx5IGZvciBub24tZ2VuZXJpYyBldmVudHMgc3VjaCBhcyBgY2hhbmdlYCxcbiAqIGByZXNldGAsIGBsb2FkYCwgYGVycm9yYCwgYW5kIGBzZWxlY3RgLlxuICpcbiAqIEJvcnJvd3MgZnJvbSBNb2Rlcm5penIuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50TmFtZVN1ZmZpeCBFdmVudCBuYW1lLCBlLmcuIFwiY2xpY2tcIi5cbiAqIEBwYXJhbSB7P2Jvb2xlYW59IGNhcHR1cmUgQ2hlY2sgaWYgdGhlIGNhcHR1cmUgcGhhc2UgaXMgc3VwcG9ydGVkLlxuICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgZXZlbnQgaXMgc3VwcG9ydGVkLlxuICogQGludGVybmFsXG4gKiBAbGljZW5zZSBNb2Rlcm5penIgMy4wLjBwcmUgKEN1c3RvbSBCdWlsZCkgfCBNSVRcbiAqL1xuZnVuY3Rpb24gaXNFdmVudFN1cHBvcnRlZChldmVudE5hbWVTdWZmaXgsIGNhcHR1cmUpIHtcbiAgaWYgKCFFeGVjdXRpb25FbnZpcm9ubWVudC5jYW5Vc2VET00gfHwgY2FwdHVyZSAmJiAhKCdhZGRFdmVudExpc3RlbmVyJyBpbiBkb2N1bWVudCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgZXZlbnROYW1lID0gJ29uJyArIGV2ZW50TmFtZVN1ZmZpeDtcbiAgdmFyIGlzU3VwcG9ydGVkID0gZXZlbnROYW1lIGluIGRvY3VtZW50O1xuXG4gIGlmICghaXNTdXBwb3J0ZWQpIHtcbiAgICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKGV2ZW50TmFtZSwgJ3JldHVybjsnKTtcbiAgICBpc1N1cHBvcnRlZCA9IHR5cGVvZiBlbGVtZW50W2V2ZW50TmFtZV0gPT09ICdmdW5jdGlvbic7XG4gIH1cblxuICBpZiAoIWlzU3VwcG9ydGVkICYmIHVzZUhhc0ZlYXR1cmUgJiYgZXZlbnROYW1lU3VmZml4ID09PSAnd2hlZWwnKSB7XG4gICAgLy8gVGhpcyBpcyB0aGUgb25seSB3YXkgdG8gdGVzdCBzdXBwb3J0IGZvciB0aGUgYHdoZWVsYCBldmVudCBpbiBJRTkrLlxuICAgIGlzU3VwcG9ydGVkID0gZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uaGFzRmVhdHVyZSgnRXZlbnRzLndoZWVsJywgJzMuMCcpO1xuICB9XG5cbiAgcmV0dXJuIGlzU3VwcG9ydGVkO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzRXZlbnRTdXBwb3J0ZWQ7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1kb20vbGliL2lzRXZlbnRTdXBwb3J0ZWQuanMiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIEdpdmVuIGEgYHByZXZFbGVtZW50YCBhbmQgYG5leHRFbGVtZW50YCwgZGV0ZXJtaW5lcyBpZiB0aGUgZXhpc3RpbmdcbiAqIGluc3RhbmNlIHNob3VsZCBiZSB1cGRhdGVkIGFzIG9wcG9zZWQgdG8gYmVpbmcgZGVzdHJveWVkIG9yIHJlcGxhY2VkIGJ5IGEgbmV3XG4gKiBpbnN0YW5jZS4gQm90aCBhcmd1bWVudHMgYXJlIGVsZW1lbnRzLiBUaGlzIGVuc3VyZXMgdGhhdCB0aGlzIGxvZ2ljIGNhblxuICogb3BlcmF0ZSBvbiBzdGF0ZWxlc3MgdHJlZXMgd2l0aG91dCBhbnkgYmFja2luZyBpbnN0YW5jZS5cbiAqXG4gKiBAcGFyYW0gez9vYmplY3R9IHByZXZFbGVtZW50XG4gKiBAcGFyYW0gez9vYmplY3R9IG5leHRFbGVtZW50XG4gKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHRoZSBleGlzdGluZyBpbnN0YW5jZSBzaG91bGQgYmUgdXBkYXRlZC5cbiAqIEBwcm90ZWN0ZWRcbiAqL1xuXG5mdW5jdGlvbiBzaG91bGRVcGRhdGVSZWFjdENvbXBvbmVudChwcmV2RWxlbWVudCwgbmV4dEVsZW1lbnQpIHtcbiAgdmFyIHByZXZFbXB0eSA9IHByZXZFbGVtZW50ID09PSBudWxsIHx8IHByZXZFbGVtZW50ID09PSBmYWxzZTtcbiAgdmFyIG5leHRFbXB0eSA9IG5leHRFbGVtZW50ID09PSBudWxsIHx8IG5leHRFbGVtZW50ID09PSBmYWxzZTtcbiAgaWYgKHByZXZFbXB0eSB8fCBuZXh0RW1wdHkpIHtcbiAgICByZXR1cm4gcHJldkVtcHR5ID09PSBuZXh0RW1wdHk7XG4gIH1cblxuICB2YXIgcHJldlR5cGUgPSB0eXBlb2YgcHJldkVsZW1lbnQ7XG4gIHZhciBuZXh0VHlwZSA9IHR5cGVvZiBuZXh0RWxlbWVudDtcbiAgaWYgKHByZXZUeXBlID09PSAnc3RyaW5nJyB8fCBwcmV2VHlwZSA9PT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gbmV4dFR5cGUgPT09ICdzdHJpbmcnIHx8IG5leHRUeXBlID09PSAnbnVtYmVyJztcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbmV4dFR5cGUgPT09ICdvYmplY3QnICYmIHByZXZFbGVtZW50LnR5cGUgPT09IG5leHRFbGVtZW50LnR5cGUgJiYgcHJldkVsZW1lbnQua2V5ID09PSBuZXh0RWxlbWVudC5rZXk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzaG91bGRVcGRhdGVSZWFjdENvbXBvbmVudDtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3JlYWN0LWRvbS9saWIvc2hvdWxkVXBkYXRlUmVhY3RDb21wb25lbnQuanMiLCIvKipcbiAqIENvcHlyaWdodCAyMDE1LXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgX2Fzc2lnbiA9IHJlcXVpcmUoJ29iamVjdC1hc3NpZ24nKTtcblxudmFyIGVtcHR5RnVuY3Rpb24gPSByZXF1aXJlKCdmYmpzL2xpYi9lbXB0eUZ1bmN0aW9uJyk7XG52YXIgd2FybmluZyA9IHJlcXVpcmUoJ2ZianMvbGliL3dhcm5pbmcnKTtcblxudmFyIHZhbGlkYXRlRE9NTmVzdGluZyA9IGVtcHR5RnVuY3Rpb247XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIC8vIFRoaXMgdmFsaWRhdGlvbiBjb2RlIHdhcyB3cml0dGVuIGJhc2VkIG9uIHRoZSBIVE1MNSBwYXJzaW5nIHNwZWM6XG4gIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI2hhcy1hbi1lbGVtZW50LWluLXNjb3BlXG4gIC8vXG4gIC8vIE5vdGU6IHRoaXMgZG9lcyBub3QgY2F0Y2ggYWxsIGludmFsaWQgbmVzdGluZywgbm9yIGRvZXMgaXQgdHJ5IHRvIChhcyBpdCdzXG4gIC8vIG5vdCBjbGVhciB3aGF0IHByYWN0aWNhbCBiZW5lZml0IGRvaW5nIHNvIHByb3ZpZGVzKTsgaW5zdGVhZCwgd2Ugd2FybiBvbmx5XG4gIC8vIGZvciBjYXNlcyB3aGVyZSB0aGUgcGFyc2VyIHdpbGwgZ2l2ZSBhIHBhcnNlIHRyZWUgZGlmZmVyaW5nIGZyb20gd2hhdCBSZWFjdFxuICAvLyBpbnRlbmRlZC4gRm9yIGV4YW1wbGUsIDxiPjxkaXY+PC9kaXY+PC9iPiBpcyBpbnZhbGlkIGJ1dCB3ZSBkb24ndCB3YXJuXG4gIC8vIGJlY2F1c2UgaXQgc3RpbGwgcGFyc2VzIGNvcnJlY3RseTsgd2UgZG8gd2FybiBmb3Igb3RoZXIgY2FzZXMgbGlrZSBuZXN0ZWRcbiAgLy8gPHA+IHRhZ3Mgd2hlcmUgdGhlIGJlZ2lubmluZyBvZiB0aGUgc2Vjb25kIGVsZW1lbnQgaW1wbGljaXRseSBjbG9zZXMgdGhlXG4gIC8vIGZpcnN0LCBjYXVzaW5nIGEgY29uZnVzaW5nIG1lc3MuXG5cbiAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjc3BlY2lhbFxuICB2YXIgc3BlY2lhbFRhZ3MgPSBbJ2FkZHJlc3MnLCAnYXBwbGV0JywgJ2FyZWEnLCAnYXJ0aWNsZScsICdhc2lkZScsICdiYXNlJywgJ2Jhc2Vmb250JywgJ2Jnc291bmQnLCAnYmxvY2txdW90ZScsICdib2R5JywgJ2JyJywgJ2J1dHRvbicsICdjYXB0aW9uJywgJ2NlbnRlcicsICdjb2wnLCAnY29sZ3JvdXAnLCAnZGQnLCAnZGV0YWlscycsICdkaXInLCAnZGl2JywgJ2RsJywgJ2R0JywgJ2VtYmVkJywgJ2ZpZWxkc2V0JywgJ2ZpZ2NhcHRpb24nLCAnZmlndXJlJywgJ2Zvb3RlcicsICdmb3JtJywgJ2ZyYW1lJywgJ2ZyYW1lc2V0JywgJ2gxJywgJ2gyJywgJ2gzJywgJ2g0JywgJ2g1JywgJ2g2JywgJ2hlYWQnLCAnaGVhZGVyJywgJ2hncm91cCcsICdocicsICdodG1sJywgJ2lmcmFtZScsICdpbWcnLCAnaW5wdXQnLCAnaXNpbmRleCcsICdsaScsICdsaW5rJywgJ2xpc3RpbmcnLCAnbWFpbicsICdtYXJxdWVlJywgJ21lbnUnLCAnbWVudWl0ZW0nLCAnbWV0YScsICduYXYnLCAnbm9lbWJlZCcsICdub2ZyYW1lcycsICdub3NjcmlwdCcsICdvYmplY3QnLCAnb2wnLCAncCcsICdwYXJhbScsICdwbGFpbnRleHQnLCAncHJlJywgJ3NjcmlwdCcsICdzZWN0aW9uJywgJ3NlbGVjdCcsICdzb3VyY2UnLCAnc3R5bGUnLCAnc3VtbWFyeScsICd0YWJsZScsICd0Ym9keScsICd0ZCcsICd0ZW1wbGF0ZScsICd0ZXh0YXJlYScsICd0Zm9vdCcsICd0aCcsICd0aGVhZCcsICd0aXRsZScsICd0cicsICd0cmFjaycsICd1bCcsICd3YnInLCAneG1wJ107XG5cbiAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjaGFzLWFuLWVsZW1lbnQtaW4tc2NvcGVcbiAgdmFyIGluU2NvcGVUYWdzID0gWydhcHBsZXQnLCAnY2FwdGlvbicsICdodG1sJywgJ3RhYmxlJywgJ3RkJywgJ3RoJywgJ21hcnF1ZWUnLCAnb2JqZWN0JywgJ3RlbXBsYXRlJyxcblxuICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNodG1sLWludGVncmF0aW9uLXBvaW50XG4gIC8vIFRPRE86IERpc3Rpbmd1aXNoIGJ5IG5hbWVzcGFjZSBoZXJlIC0tIGZvciA8dGl0bGU+LCBpbmNsdWRpbmcgaXQgaGVyZVxuICAvLyBlcnJzIG9uIHRoZSBzaWRlIG9mIGZld2VyIHdhcm5pbmdzXG4gICdmb3JlaWduT2JqZWN0JywgJ2Rlc2MnLCAndGl0bGUnXTtcblxuICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNoYXMtYW4tZWxlbWVudC1pbi1idXR0b24tc2NvcGVcbiAgdmFyIGJ1dHRvblNjb3BlVGFncyA9IGluU2NvcGVUYWdzLmNvbmNhdChbJ2J1dHRvbiddKTtcblxuICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNnZW5lcmF0ZS1pbXBsaWVkLWVuZC10YWdzXG4gIHZhciBpbXBsaWVkRW5kVGFncyA9IFsnZGQnLCAnZHQnLCAnbGknLCAnb3B0aW9uJywgJ29wdGdyb3VwJywgJ3AnLCAncnAnLCAncnQnXTtcblxuICB2YXIgZW1wdHlBbmNlc3RvckluZm8gPSB7XG4gICAgY3VycmVudDogbnVsbCxcblxuICAgIGZvcm1UYWc6IG51bGwsXG4gICAgYVRhZ0luU2NvcGU6IG51bGwsXG4gICAgYnV0dG9uVGFnSW5TY29wZTogbnVsbCxcbiAgICBub2JyVGFnSW5TY29wZTogbnVsbCxcbiAgICBwVGFnSW5CdXR0b25TY29wZTogbnVsbCxcblxuICAgIGxpc3RJdGVtVGFnQXV0b2Nsb3Npbmc6IG51bGwsXG4gICAgZGxJdGVtVGFnQXV0b2Nsb3Npbmc6IG51bGxcbiAgfTtcblxuICB2YXIgdXBkYXRlZEFuY2VzdG9ySW5mbyA9IGZ1bmN0aW9uIChvbGRJbmZvLCB0YWcsIGluc3RhbmNlKSB7XG4gICAgdmFyIGFuY2VzdG9ySW5mbyA9IF9hc3NpZ24oe30sIG9sZEluZm8gfHwgZW1wdHlBbmNlc3RvckluZm8pO1xuICAgIHZhciBpbmZvID0geyB0YWc6IHRhZywgaW5zdGFuY2U6IGluc3RhbmNlIH07XG5cbiAgICBpZiAoaW5TY29wZVRhZ3MuaW5kZXhPZih0YWcpICE9PSAtMSkge1xuICAgICAgYW5jZXN0b3JJbmZvLmFUYWdJblNjb3BlID0gbnVsbDtcbiAgICAgIGFuY2VzdG9ySW5mby5idXR0b25UYWdJblNjb3BlID0gbnVsbDtcbiAgICAgIGFuY2VzdG9ySW5mby5ub2JyVGFnSW5TY29wZSA9IG51bGw7XG4gICAgfVxuICAgIGlmIChidXR0b25TY29wZVRhZ3MuaW5kZXhPZih0YWcpICE9PSAtMSkge1xuICAgICAgYW5jZXN0b3JJbmZvLnBUYWdJbkJ1dHRvblNjb3BlID0gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBTZWUgcnVsZXMgZm9yICdsaScsICdkZCcsICdkdCcgc3RhcnQgdGFncyBpblxuICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI3BhcnNpbmctbWFpbi1pbmJvZHlcbiAgICBpZiAoc3BlY2lhbFRhZ3MuaW5kZXhPZih0YWcpICE9PSAtMSAmJiB0YWcgIT09ICdhZGRyZXNzJyAmJiB0YWcgIT09ICdkaXYnICYmIHRhZyAhPT0gJ3AnKSB7XG4gICAgICBhbmNlc3RvckluZm8ubGlzdEl0ZW1UYWdBdXRvY2xvc2luZyA9IG51bGw7XG4gICAgICBhbmNlc3RvckluZm8uZGxJdGVtVGFnQXV0b2Nsb3NpbmcgPSBudWxsO1xuICAgIH1cblxuICAgIGFuY2VzdG9ySW5mby5jdXJyZW50ID0gaW5mbztcblxuICAgIGlmICh0YWcgPT09ICdmb3JtJykge1xuICAgICAgYW5jZXN0b3JJbmZvLmZvcm1UYWcgPSBpbmZvO1xuICAgIH1cbiAgICBpZiAodGFnID09PSAnYScpIHtcbiAgICAgIGFuY2VzdG9ySW5mby5hVGFnSW5TY29wZSA9IGluZm87XG4gICAgfVxuICAgIGlmICh0YWcgPT09ICdidXR0b24nKSB7XG4gICAgICBhbmNlc3RvckluZm8uYnV0dG9uVGFnSW5TY29wZSA9IGluZm87XG4gICAgfVxuICAgIGlmICh0YWcgPT09ICdub2JyJykge1xuICAgICAgYW5jZXN0b3JJbmZvLm5vYnJUYWdJblNjb3BlID0gaW5mbztcbiAgICB9XG4gICAgaWYgKHRhZyA9PT0gJ3AnKSB7XG4gICAgICBhbmNlc3RvckluZm8ucFRhZ0luQnV0dG9uU2NvcGUgPSBpbmZvO1xuICAgIH1cbiAgICBpZiAodGFnID09PSAnbGknKSB7XG4gICAgICBhbmNlc3RvckluZm8ubGlzdEl0ZW1UYWdBdXRvY2xvc2luZyA9IGluZm87XG4gICAgfVxuICAgIGlmICh0YWcgPT09ICdkZCcgfHwgdGFnID09PSAnZHQnKSB7XG4gICAgICBhbmNlc3RvckluZm8uZGxJdGVtVGFnQXV0b2Nsb3NpbmcgPSBpbmZvO1xuICAgIH1cblxuICAgIHJldHVybiBhbmNlc3RvckluZm87XG4gIH07XG5cbiAgLyoqXG4gICAqIFJldHVybnMgd2hldGhlclxuICAgKi9cbiAgdmFyIGlzVGFnVmFsaWRXaXRoUGFyZW50ID0gZnVuY3Rpb24gKHRhZywgcGFyZW50VGFnKSB7XG4gICAgLy8gRmlyc3QsIGxldCdzIGNoZWNrIGlmIHdlJ3JlIGluIGFuIHVudXN1YWwgcGFyc2luZyBtb2RlLi4uXG4gICAgc3dpdGNoIChwYXJlbnRUYWcpIHtcbiAgICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI3BhcnNpbmctbWFpbi1pbnNlbGVjdFxuICAgICAgY2FzZSAnc2VsZWN0JzpcbiAgICAgICAgcmV0dXJuIHRhZyA9PT0gJ29wdGlvbicgfHwgdGFnID09PSAnb3B0Z3JvdXAnIHx8IHRhZyA9PT0gJyN0ZXh0JztcbiAgICAgIGNhc2UgJ29wdGdyb3VwJzpcbiAgICAgICAgcmV0dXJuIHRhZyA9PT0gJ29wdGlvbicgfHwgdGFnID09PSAnI3RleHQnO1xuICAgICAgLy8gU3RyaWN0bHkgc3BlYWtpbmcsIHNlZWluZyBhbiA8b3B0aW9uPiBkb2Vzbid0IG1lYW4gd2UncmUgaW4gYSA8c2VsZWN0PlxuICAgICAgLy8gYnV0XG4gICAgICBjYXNlICdvcHRpb24nOlxuICAgICAgICByZXR1cm4gdGFnID09PSAnI3RleHQnO1xuICAgICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjcGFyc2luZy1tYWluLWludGRcbiAgICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI3BhcnNpbmctbWFpbi1pbmNhcHRpb25cbiAgICAgIC8vIE5vIHNwZWNpYWwgYmVoYXZpb3Igc2luY2UgdGhlc2UgcnVsZXMgZmFsbCBiYWNrIHRvIFwiaW4gYm9keVwiIG1vZGUgZm9yXG4gICAgICAvLyBhbGwgZXhjZXB0IHNwZWNpYWwgdGFibGUgbm9kZXMgd2hpY2ggY2F1c2UgYmFkIHBhcnNpbmcgYmVoYXZpb3IgYW55d2F5LlxuXG4gICAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNwYXJzaW5nLW1haW4taW50clxuICAgICAgY2FzZSAndHInOlxuICAgICAgICByZXR1cm4gdGFnID09PSAndGgnIHx8IHRhZyA9PT0gJ3RkJyB8fCB0YWcgPT09ICdzdHlsZScgfHwgdGFnID09PSAnc2NyaXB0JyB8fCB0YWcgPT09ICd0ZW1wbGF0ZSc7XG4gICAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNwYXJzaW5nLW1haW4taW50Ym9keVxuICAgICAgY2FzZSAndGJvZHknOlxuICAgICAgY2FzZSAndGhlYWQnOlxuICAgICAgY2FzZSAndGZvb3QnOlxuICAgICAgICByZXR1cm4gdGFnID09PSAndHInIHx8IHRhZyA9PT0gJ3N0eWxlJyB8fCB0YWcgPT09ICdzY3JpcHQnIHx8IHRhZyA9PT0gJ3RlbXBsYXRlJztcbiAgICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI3BhcnNpbmctbWFpbi1pbmNvbGdyb3VwXG4gICAgICBjYXNlICdjb2xncm91cCc6XG4gICAgICAgIHJldHVybiB0YWcgPT09ICdjb2wnIHx8IHRhZyA9PT0gJ3RlbXBsYXRlJztcbiAgICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI3BhcnNpbmctbWFpbi1pbnRhYmxlXG4gICAgICBjYXNlICd0YWJsZSc6XG4gICAgICAgIHJldHVybiB0YWcgPT09ICdjYXB0aW9uJyB8fCB0YWcgPT09ICdjb2xncm91cCcgfHwgdGFnID09PSAndGJvZHknIHx8IHRhZyA9PT0gJ3Rmb290JyB8fCB0YWcgPT09ICd0aGVhZCcgfHwgdGFnID09PSAnc3R5bGUnIHx8IHRhZyA9PT0gJ3NjcmlwdCcgfHwgdGFnID09PSAndGVtcGxhdGUnO1xuICAgICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjcGFyc2luZy1tYWluLWluaGVhZFxuICAgICAgY2FzZSAnaGVhZCc6XG4gICAgICAgIHJldHVybiB0YWcgPT09ICdiYXNlJyB8fCB0YWcgPT09ICdiYXNlZm9udCcgfHwgdGFnID09PSAnYmdzb3VuZCcgfHwgdGFnID09PSAnbGluaycgfHwgdGFnID09PSAnbWV0YScgfHwgdGFnID09PSAndGl0bGUnIHx8IHRhZyA9PT0gJ25vc2NyaXB0JyB8fCB0YWcgPT09ICdub2ZyYW1lcycgfHwgdGFnID09PSAnc3R5bGUnIHx8IHRhZyA9PT0gJ3NjcmlwdCcgfHwgdGFnID09PSAndGVtcGxhdGUnO1xuICAgICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc2VtYW50aWNzLmh0bWwjdGhlLWh0bWwtZWxlbWVudFxuICAgICAgY2FzZSAnaHRtbCc6XG4gICAgICAgIHJldHVybiB0YWcgPT09ICdoZWFkJyB8fCB0YWcgPT09ICdib2R5JztcbiAgICAgIGNhc2UgJyNkb2N1bWVudCc6XG4gICAgICAgIHJldHVybiB0YWcgPT09ICdodG1sJztcbiAgICB9XG5cbiAgICAvLyBQcm9iYWJseSBpbiB0aGUgXCJpbiBib2R5XCIgcGFyc2luZyBtb2RlLCBzbyB3ZSBvdXRsYXcgb25seSB0YWcgY29tYm9zXG4gICAgLy8gd2hlcmUgdGhlIHBhcnNpbmcgcnVsZXMgY2F1c2UgaW1wbGljaXQgb3BlbnMgb3IgY2xvc2VzIHRvIGJlIGFkZGVkLlxuICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI3BhcnNpbmctbWFpbi1pbmJvZHlcbiAgICBzd2l0Y2ggKHRhZykge1xuICAgICAgY2FzZSAnaDEnOlxuICAgICAgY2FzZSAnaDInOlxuICAgICAgY2FzZSAnaDMnOlxuICAgICAgY2FzZSAnaDQnOlxuICAgICAgY2FzZSAnaDUnOlxuICAgICAgY2FzZSAnaDYnOlxuICAgICAgICByZXR1cm4gcGFyZW50VGFnICE9PSAnaDEnICYmIHBhcmVudFRhZyAhPT0gJ2gyJyAmJiBwYXJlbnRUYWcgIT09ICdoMycgJiYgcGFyZW50VGFnICE9PSAnaDQnICYmIHBhcmVudFRhZyAhPT0gJ2g1JyAmJiBwYXJlbnRUYWcgIT09ICdoNic7XG5cbiAgICAgIGNhc2UgJ3JwJzpcbiAgICAgIGNhc2UgJ3J0JzpcbiAgICAgICAgcmV0dXJuIGltcGxpZWRFbmRUYWdzLmluZGV4T2YocGFyZW50VGFnKSA9PT0gLTE7XG5cbiAgICAgIGNhc2UgJ2JvZHknOlxuICAgICAgY2FzZSAnY2FwdGlvbic6XG4gICAgICBjYXNlICdjb2wnOlxuICAgICAgY2FzZSAnY29sZ3JvdXAnOlxuICAgICAgY2FzZSAnZnJhbWUnOlxuICAgICAgY2FzZSAnaGVhZCc6XG4gICAgICBjYXNlICdodG1sJzpcbiAgICAgIGNhc2UgJ3Rib2R5JzpcbiAgICAgIGNhc2UgJ3RkJzpcbiAgICAgIGNhc2UgJ3Rmb290JzpcbiAgICAgIGNhc2UgJ3RoJzpcbiAgICAgIGNhc2UgJ3RoZWFkJzpcbiAgICAgIGNhc2UgJ3RyJzpcbiAgICAgICAgLy8gVGhlc2UgdGFncyBhcmUgb25seSB2YWxpZCB3aXRoIGEgZmV3IHBhcmVudHMgdGhhdCBoYXZlIHNwZWNpYWwgY2hpbGRcbiAgICAgICAgLy8gcGFyc2luZyBydWxlcyAtLSBpZiB3ZSdyZSBkb3duIGhlcmUsIHRoZW4gbm9uZSBvZiB0aG9zZSBtYXRjaGVkIGFuZFxuICAgICAgICAvLyBzbyB3ZSBhbGxvdyBpdCBvbmx5IGlmIHdlIGRvbid0IGtub3cgd2hhdCB0aGUgcGFyZW50IGlzLCBhcyBhbGwgb3RoZXJcbiAgICAgICAgLy8gY2FzZXMgYXJlIGludmFsaWQuXG4gICAgICAgIHJldHVybiBwYXJlbnRUYWcgPT0gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcblxuICAvKipcbiAgICogUmV0dXJucyB3aGV0aGVyXG4gICAqL1xuICB2YXIgZmluZEludmFsaWRBbmNlc3RvckZvclRhZyA9IGZ1bmN0aW9uICh0YWcsIGFuY2VzdG9ySW5mbykge1xuICAgIHN3aXRjaCAodGFnKSB7XG4gICAgICBjYXNlICdhZGRyZXNzJzpcbiAgICAgIGNhc2UgJ2FydGljbGUnOlxuICAgICAgY2FzZSAnYXNpZGUnOlxuICAgICAgY2FzZSAnYmxvY2txdW90ZSc6XG4gICAgICBjYXNlICdjZW50ZXInOlxuICAgICAgY2FzZSAnZGV0YWlscyc6XG4gICAgICBjYXNlICdkaWFsb2cnOlxuICAgICAgY2FzZSAnZGlyJzpcbiAgICAgIGNhc2UgJ2Rpdic6XG4gICAgICBjYXNlICdkbCc6XG4gICAgICBjYXNlICdmaWVsZHNldCc6XG4gICAgICBjYXNlICdmaWdjYXB0aW9uJzpcbiAgICAgIGNhc2UgJ2ZpZ3VyZSc6XG4gICAgICBjYXNlICdmb290ZXInOlxuICAgICAgY2FzZSAnaGVhZGVyJzpcbiAgICAgIGNhc2UgJ2hncm91cCc6XG4gICAgICBjYXNlICdtYWluJzpcbiAgICAgIGNhc2UgJ21lbnUnOlxuICAgICAgY2FzZSAnbmF2JzpcbiAgICAgIGNhc2UgJ29sJzpcbiAgICAgIGNhc2UgJ3AnOlxuICAgICAgY2FzZSAnc2VjdGlvbic6XG4gICAgICBjYXNlICdzdW1tYXJ5JzpcbiAgICAgIGNhc2UgJ3VsJzpcbiAgICAgIGNhc2UgJ3ByZSc6XG4gICAgICBjYXNlICdsaXN0aW5nJzpcbiAgICAgIGNhc2UgJ3RhYmxlJzpcbiAgICAgIGNhc2UgJ2hyJzpcbiAgICAgIGNhc2UgJ3htcCc6XG4gICAgICBjYXNlICdoMSc6XG4gICAgICBjYXNlICdoMic6XG4gICAgICBjYXNlICdoMyc6XG4gICAgICBjYXNlICdoNCc6XG4gICAgICBjYXNlICdoNSc6XG4gICAgICBjYXNlICdoNic6XG4gICAgICAgIHJldHVybiBhbmNlc3RvckluZm8ucFRhZ0luQnV0dG9uU2NvcGU7XG5cbiAgICAgIGNhc2UgJ2Zvcm0nOlxuICAgICAgICByZXR1cm4gYW5jZXN0b3JJbmZvLmZvcm1UYWcgfHwgYW5jZXN0b3JJbmZvLnBUYWdJbkJ1dHRvblNjb3BlO1xuXG4gICAgICBjYXNlICdsaSc6XG4gICAgICAgIHJldHVybiBhbmNlc3RvckluZm8ubGlzdEl0ZW1UYWdBdXRvY2xvc2luZztcblxuICAgICAgY2FzZSAnZGQnOlxuICAgICAgY2FzZSAnZHQnOlxuICAgICAgICByZXR1cm4gYW5jZXN0b3JJbmZvLmRsSXRlbVRhZ0F1dG9jbG9zaW5nO1xuXG4gICAgICBjYXNlICdidXR0b24nOlxuICAgICAgICByZXR1cm4gYW5jZXN0b3JJbmZvLmJ1dHRvblRhZ0luU2NvcGU7XG5cbiAgICAgIGNhc2UgJ2EnOlxuICAgICAgICAvLyBTcGVjIHNheXMgc29tZXRoaW5nIGFib3V0IHN0b3JpbmcgYSBsaXN0IG9mIG1hcmtlcnMsIGJ1dCBpdCBzb3VuZHNcbiAgICAgICAgLy8gZXF1aXZhbGVudCB0byB0aGlzIGNoZWNrLlxuICAgICAgICByZXR1cm4gYW5jZXN0b3JJbmZvLmFUYWdJblNjb3BlO1xuXG4gICAgICBjYXNlICdub2JyJzpcbiAgICAgICAgcmV0dXJuIGFuY2VzdG9ySW5mby5ub2JyVGFnSW5TY29wZTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfTtcblxuICAvKipcbiAgICogR2l2ZW4gYSBSZWFjdENvbXBvc2l0ZUNvbXBvbmVudCBpbnN0YW5jZSwgcmV0dXJuIGEgbGlzdCBvZiBpdHMgcmVjdXJzaXZlXG4gICAqIG93bmVycywgc3RhcnRpbmcgYXQgdGhlIHJvb3QgYW5kIGVuZGluZyB3aXRoIHRoZSBpbnN0YW5jZSBpdHNlbGYuXG4gICAqL1xuICB2YXIgZmluZE93bmVyU3RhY2sgPSBmdW5jdGlvbiAoaW5zdGFuY2UpIHtcbiAgICBpZiAoIWluc3RhbmNlKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgdmFyIHN0YWNrID0gW107XG4gICAgZG8ge1xuICAgICAgc3RhY2sucHVzaChpbnN0YW5jZSk7XG4gICAgfSB3aGlsZSAoaW5zdGFuY2UgPSBpbnN0YW5jZS5fY3VycmVudEVsZW1lbnQuX293bmVyKTtcbiAgICBzdGFjay5yZXZlcnNlKCk7XG4gICAgcmV0dXJuIHN0YWNrO1xuICB9O1xuXG4gIHZhciBkaWRXYXJuID0ge307XG5cbiAgdmFsaWRhdGVET01OZXN0aW5nID0gZnVuY3Rpb24gKGNoaWxkVGFnLCBjaGlsZFRleHQsIGNoaWxkSW5zdGFuY2UsIGFuY2VzdG9ySW5mbykge1xuICAgIGFuY2VzdG9ySW5mbyA9IGFuY2VzdG9ySW5mbyB8fCBlbXB0eUFuY2VzdG9ySW5mbztcbiAgICB2YXIgcGFyZW50SW5mbyA9IGFuY2VzdG9ySW5mby5jdXJyZW50O1xuICAgIHZhciBwYXJlbnRUYWcgPSBwYXJlbnRJbmZvICYmIHBhcmVudEluZm8udGFnO1xuXG4gICAgaWYgKGNoaWxkVGV4dCAhPSBudWxsKSB7XG4gICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyhjaGlsZFRhZyA9PSBudWxsLCAndmFsaWRhdGVET01OZXN0aW5nOiB3aGVuIGNoaWxkVGV4dCBpcyBwYXNzZWQsIGNoaWxkVGFnIHNob3VsZCBiZSBudWxsJykgOiB2b2lkIDA7XG4gICAgICBjaGlsZFRhZyA9ICcjdGV4dCc7XG4gICAgfVxuXG4gICAgdmFyIGludmFsaWRQYXJlbnQgPSBpc1RhZ1ZhbGlkV2l0aFBhcmVudChjaGlsZFRhZywgcGFyZW50VGFnKSA/IG51bGwgOiBwYXJlbnRJbmZvO1xuICAgIHZhciBpbnZhbGlkQW5jZXN0b3IgPSBpbnZhbGlkUGFyZW50ID8gbnVsbCA6IGZpbmRJbnZhbGlkQW5jZXN0b3JGb3JUYWcoY2hpbGRUYWcsIGFuY2VzdG9ySW5mbyk7XG4gICAgdmFyIHByb2JsZW1hdGljID0gaW52YWxpZFBhcmVudCB8fCBpbnZhbGlkQW5jZXN0b3I7XG5cbiAgICBpZiAocHJvYmxlbWF0aWMpIHtcbiAgICAgIHZhciBhbmNlc3RvclRhZyA9IHByb2JsZW1hdGljLnRhZztcbiAgICAgIHZhciBhbmNlc3Rvckluc3RhbmNlID0gcHJvYmxlbWF0aWMuaW5zdGFuY2U7XG5cbiAgICAgIHZhciBjaGlsZE93bmVyID0gY2hpbGRJbnN0YW5jZSAmJiBjaGlsZEluc3RhbmNlLl9jdXJyZW50RWxlbWVudC5fb3duZXI7XG4gICAgICB2YXIgYW5jZXN0b3JPd25lciA9IGFuY2VzdG9ySW5zdGFuY2UgJiYgYW5jZXN0b3JJbnN0YW5jZS5fY3VycmVudEVsZW1lbnQuX293bmVyO1xuXG4gICAgICB2YXIgY2hpbGRPd25lcnMgPSBmaW5kT3duZXJTdGFjayhjaGlsZE93bmVyKTtcbiAgICAgIHZhciBhbmNlc3Rvck93bmVycyA9IGZpbmRPd25lclN0YWNrKGFuY2VzdG9yT3duZXIpO1xuXG4gICAgICB2YXIgbWluU3RhY2tMZW4gPSBNYXRoLm1pbihjaGlsZE93bmVycy5sZW5ndGgsIGFuY2VzdG9yT3duZXJzLmxlbmd0aCk7XG4gICAgICB2YXIgaTtcblxuICAgICAgdmFyIGRlZXBlc3RDb21tb24gPSAtMTtcbiAgICAgIGZvciAoaSA9IDA7IGkgPCBtaW5TdGFja0xlbjsgaSsrKSB7XG4gICAgICAgIGlmIChjaGlsZE93bmVyc1tpXSA9PT0gYW5jZXN0b3JPd25lcnNbaV0pIHtcbiAgICAgICAgICBkZWVwZXN0Q29tbW9uID0gaTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgVU5LTk9XTiA9ICcodW5rbm93biknO1xuICAgICAgdmFyIGNoaWxkT3duZXJOYW1lcyA9IGNoaWxkT3duZXJzLnNsaWNlKGRlZXBlc3RDb21tb24gKyAxKS5tYXAoZnVuY3Rpb24gKGluc3QpIHtcbiAgICAgICAgcmV0dXJuIGluc3QuZ2V0TmFtZSgpIHx8IFVOS05PV047XG4gICAgICB9KTtcbiAgICAgIHZhciBhbmNlc3Rvck93bmVyTmFtZXMgPSBhbmNlc3Rvck93bmVycy5zbGljZShkZWVwZXN0Q29tbW9uICsgMSkubWFwKGZ1bmN0aW9uIChpbnN0KSB7XG4gICAgICAgIHJldHVybiBpbnN0LmdldE5hbWUoKSB8fCBVTktOT1dOO1xuICAgICAgfSk7XG4gICAgICB2YXIgb3duZXJJbmZvID0gW10uY29uY2F0KFxuICAgICAgLy8gSWYgdGhlIHBhcmVudCBhbmQgY2hpbGQgaW5zdGFuY2VzIGhhdmUgYSBjb21tb24gb3duZXIgYW5jZXN0b3IsIHN0YXJ0XG4gICAgICAvLyB3aXRoIHRoYXQgLS0gb3RoZXJ3aXNlIHdlIGp1c3Qgc3RhcnQgd2l0aCB0aGUgcGFyZW50J3Mgb3duZXJzLlxuICAgICAgZGVlcGVzdENvbW1vbiAhPT0gLTEgPyBjaGlsZE93bmVyc1tkZWVwZXN0Q29tbW9uXS5nZXROYW1lKCkgfHwgVU5LTk9XTiA6IFtdLCBhbmNlc3Rvck93bmVyTmFtZXMsIGFuY2VzdG9yVGFnLFxuICAgICAgLy8gSWYgd2UncmUgd2FybmluZyBhYm91dCBhbiBpbnZhbGlkIChub24tcGFyZW50KSBhbmNlc3RyeSwgYWRkICcuLi4nXG4gICAgICBpbnZhbGlkQW5jZXN0b3IgPyBbJy4uLiddIDogW10sIGNoaWxkT3duZXJOYW1lcywgY2hpbGRUYWcpLmpvaW4oJyA+ICcpO1xuXG4gICAgICB2YXIgd2FybktleSA9ICEhaW52YWxpZFBhcmVudCArICd8JyArIGNoaWxkVGFnICsgJ3wnICsgYW5jZXN0b3JUYWcgKyAnfCcgKyBvd25lckluZm87XG4gICAgICBpZiAoZGlkV2Fyblt3YXJuS2V5XSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBkaWRXYXJuW3dhcm5LZXldID0gdHJ1ZTtcblxuICAgICAgdmFyIHRhZ0Rpc3BsYXlOYW1lID0gY2hpbGRUYWc7XG4gICAgICB2YXIgd2hpdGVzcGFjZUluZm8gPSAnJztcbiAgICAgIGlmIChjaGlsZFRhZyA9PT0gJyN0ZXh0Jykge1xuICAgICAgICBpZiAoL1xcUy8udGVzdChjaGlsZFRleHQpKSB7XG4gICAgICAgICAgdGFnRGlzcGxheU5hbWUgPSAnVGV4dCBub2Rlcyc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGFnRGlzcGxheU5hbWUgPSAnV2hpdGVzcGFjZSB0ZXh0IG5vZGVzJztcbiAgICAgICAgICB3aGl0ZXNwYWNlSW5mbyA9IFwiIE1ha2Ugc3VyZSB5b3UgZG9uJ3QgaGF2ZSBhbnkgZXh0cmEgd2hpdGVzcGFjZSBiZXR3ZWVuIHRhZ3Mgb24gXCIgKyAnZWFjaCBsaW5lIG9mIHlvdXIgc291cmNlIGNvZGUuJztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGFnRGlzcGxheU5hbWUgPSAnPCcgKyBjaGlsZFRhZyArICc+JztcbiAgICAgIH1cblxuICAgICAgaWYgKGludmFsaWRQYXJlbnQpIHtcbiAgICAgICAgdmFyIGluZm8gPSAnJztcbiAgICAgICAgaWYgKGFuY2VzdG9yVGFnID09PSAndGFibGUnICYmIGNoaWxkVGFnID09PSAndHInKSB7XG4gICAgICAgICAgaW5mbyArPSAnIEFkZCBhIDx0Ym9keT4gdG8geW91ciBjb2RlIHRvIG1hdGNoIHRoZSBET00gdHJlZSBnZW5lcmF0ZWQgYnkgJyArICd0aGUgYnJvd3Nlci4nO1xuICAgICAgICB9XG4gICAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKGZhbHNlLCAndmFsaWRhdGVET01OZXN0aW5nKC4uLik6ICVzIGNhbm5vdCBhcHBlYXIgYXMgYSBjaGlsZCBvZiA8JXM+LiVzICcgKyAnU2VlICVzLiVzJywgdGFnRGlzcGxheU5hbWUsIGFuY2VzdG9yVGFnLCB3aGl0ZXNwYWNlSW5mbywgb3duZXJJbmZvLCBpbmZvKSA6IHZvaWQgMDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKGZhbHNlLCAndmFsaWRhdGVET01OZXN0aW5nKC4uLik6ICVzIGNhbm5vdCBhcHBlYXIgYXMgYSBkZXNjZW5kYW50IG9mICcgKyAnPCVzPi4gU2VlICVzLicsIHRhZ0Rpc3BsYXlOYW1lLCBhbmNlc3RvclRhZywgb3duZXJJbmZvKSA6IHZvaWQgMDtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgdmFsaWRhdGVET01OZXN0aW5nLnVwZGF0ZWRBbmNlc3RvckluZm8gPSB1cGRhdGVkQW5jZXN0b3JJbmZvO1xuXG4gIC8vIEZvciB0ZXN0aW5nXG4gIHZhbGlkYXRlRE9NTmVzdGluZy5pc1RhZ1ZhbGlkSW5Db250ZXh0ID0gZnVuY3Rpb24gKHRhZywgYW5jZXN0b3JJbmZvKSB7XG4gICAgYW5jZXN0b3JJbmZvID0gYW5jZXN0b3JJbmZvIHx8IGVtcHR5QW5jZXN0b3JJbmZvO1xuICAgIHZhciBwYXJlbnRJbmZvID0gYW5jZXN0b3JJbmZvLmN1cnJlbnQ7XG4gICAgdmFyIHBhcmVudFRhZyA9IHBhcmVudEluZm8gJiYgcGFyZW50SW5mby50YWc7XG4gICAgcmV0dXJuIGlzVGFnVmFsaWRXaXRoUGFyZW50KHRhZywgcGFyZW50VGFnKSAmJiAhZmluZEludmFsaWRBbmNlc3RvckZvclRhZyh0YWcsIGFuY2VzdG9ySW5mbyk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdmFsaWRhdGVET01OZXN0aW5nO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QtZG9tL2xpYi92YWxpZGF0ZURPTU5lc3RpbmcuanMiLCIvKipcbiAqIFByaW50cyBhIHdhcm5pbmcgaW4gdGhlIGNvbnNvbGUgaWYgaXQgZXhpc3RzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlIFRoZSB3YXJuaW5nIG1lc3NhZ2UuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gd2FybmluZyhtZXNzYWdlKSB7XG4gIC8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnNvbGUgKi9cbiAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgY29uc29sZS5lcnJvciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNvbnNvbGUuZXJyb3IobWVzc2FnZSk7XG4gIH1cbiAgLyogZXNsaW50LWVuYWJsZSBuby1jb25zb2xlICovXG4gIHRyeSB7XG4gICAgLy8gVGhpcyBlcnJvciB3YXMgdGhyb3duIGFzIGEgY29udmVuaWVuY2Ugc28gdGhhdCBpZiB5b3UgZW5hYmxlXG4gICAgLy8gXCJicmVhayBvbiBhbGwgZXhjZXB0aW9uc1wiIGluIHlvdXIgY29uc29sZSxcbiAgICAvLyBpdCB3b3VsZCBwYXVzZSB0aGUgZXhlY3V0aW9uIGF0IHRoaXMgbGluZS5cbiAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgLyogZXNsaW50LWRpc2FibGUgbm8tZW1wdHkgKi9cbiAgfSBjYXRjaCAoZSkge31cbiAgLyogZXNsaW50LWVuYWJsZSBuby1lbXB0eSAqL1xufVxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QtcmVkdXgvZXMvdXRpbHMvd2FybmluZy5qcyIsInZhciBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKCFzZWxmKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gY2FsbCAmJiAodHlwZW9mIGNhbGwgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikgPyBjYWxsIDogc2VsZjsgfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcIiArIHR5cGVvZiBzdXBlckNsYXNzKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCBlbnVtZXJhYmxlOiBmYWxzZSwgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKSA6IHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7IH1cblxuaW1wb3J0IHdhcm5pbmcgZnJvbSAnd2FybmluZyc7XG5pbXBvcnQgaW52YXJpYW50IGZyb20gJ2ludmFyaWFudCc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcblxuLyoqXG4gKiBUaGUgcHVibGljIEFQSSBmb3IgcHV0dGluZyBoaXN0b3J5IG9uIGNvbnRleHQuXG4gKi9cblxudmFyIFJvdXRlciA9IGZ1bmN0aW9uIChfUmVhY3QkQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhSb3V0ZXIsIF9SZWFjdCRDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIFJvdXRlcigpIHtcbiAgICB2YXIgX3RlbXAsIF90aGlzLCBfcmV0O1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFJvdXRlcik7XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICByZXR1cm4gX3JldCA9IChfdGVtcCA9IChfdGhpcyA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIF9SZWFjdCRDb21wb25lbnQuY2FsbC5hcHBseShfUmVhY3QkQ29tcG9uZW50LCBbdGhpc10uY29uY2F0KGFyZ3MpKSksIF90aGlzKSwgX3RoaXMuc3RhdGUgPSB7XG4gICAgICBtYXRjaDogX3RoaXMuY29tcHV0ZU1hdGNoKF90aGlzLnByb3BzLmhpc3RvcnkubG9jYXRpb24ucGF0aG5hbWUpXG4gICAgfSwgX3RlbXApLCBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihfdGhpcywgX3JldCk7XG4gIH1cblxuICBSb3V0ZXIucHJvdG90eXBlLmdldENoaWxkQ29udGV4dCA9IGZ1bmN0aW9uIGdldENoaWxkQ29udGV4dCgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcm91dGVyOiBfZXh0ZW5kcyh7fSwgdGhpcy5jb250ZXh0LnJvdXRlciwge1xuICAgICAgICBoaXN0b3J5OiB0aGlzLnByb3BzLmhpc3RvcnksXG4gICAgICAgIHJvdXRlOiB7XG4gICAgICAgICAgbG9jYXRpb246IHRoaXMucHJvcHMuaGlzdG9yeS5sb2NhdGlvbixcbiAgICAgICAgICBtYXRjaDogdGhpcy5zdGF0ZS5tYXRjaFxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH07XG4gIH07XG5cbiAgUm91dGVyLnByb3RvdHlwZS5jb21wdXRlTWF0Y2ggPSBmdW5jdGlvbiBjb21wdXRlTWF0Y2gocGF0aG5hbWUpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGF0aDogJy8nLFxuICAgICAgdXJsOiAnLycsXG4gICAgICBwYXJhbXM6IHt9LFxuICAgICAgaXNFeGFjdDogcGF0aG5hbWUgPT09ICcvJ1xuICAgIH07XG4gIH07XG5cbiAgUm91dGVyLnByb3RvdHlwZS5jb21wb25lbnRXaWxsTW91bnQgPSBmdW5jdGlvbiBjb21wb25lbnRXaWxsTW91bnQoKSB7XG4gICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICB2YXIgX3Byb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgY2hpbGRyZW4gPSBfcHJvcHMuY2hpbGRyZW4sXG4gICAgICAgIGhpc3RvcnkgPSBfcHJvcHMuaGlzdG9yeTtcblxuXG4gICAgaW52YXJpYW50KGNoaWxkcmVuID09IG51bGwgfHwgUmVhY3QuQ2hpbGRyZW4uY291bnQoY2hpbGRyZW4pID09PSAxLCAnQSA8Um91dGVyPiBtYXkgaGF2ZSBvbmx5IG9uZSBjaGlsZCBlbGVtZW50Jyk7XG5cbiAgICAvLyBEbyB0aGlzIGhlcmUgc28gd2UgY2FuIHNldFN0YXRlIHdoZW4gYSA8UmVkaXJlY3Q+IGNoYW5nZXMgdGhlXG4gICAgLy8gbG9jYXRpb24gaW4gY29tcG9uZW50V2lsbE1vdW50LiBUaGlzIGhhcHBlbnMgZS5nLiB3aGVuIGRvaW5nXG4gICAgLy8gc2VydmVyIHJlbmRlcmluZyB1c2luZyBhIDxTdGF0aWNSb3V0ZXI+LlxuICAgIHRoaXMudW5saXN0ZW4gPSBoaXN0b3J5Lmxpc3RlbihmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpczIuc2V0U3RhdGUoe1xuICAgICAgICBtYXRjaDogX3RoaXMyLmNvbXB1dGVNYXRjaChoaXN0b3J5LmxvY2F0aW9uLnBhdGhuYW1lKVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG5cbiAgUm91dGVyLnByb3RvdHlwZS5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzID0gZnVuY3Rpb24gY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXh0UHJvcHMpIHtcbiAgICB3YXJuaW5nKHRoaXMucHJvcHMuaGlzdG9yeSA9PT0gbmV4dFByb3BzLmhpc3RvcnksICdZb3UgY2Fubm90IGNoYW5nZSA8Um91dGVyIGhpc3Rvcnk+Jyk7XG4gIH07XG5cbiAgUm91dGVyLnByb3RvdHlwZS5jb21wb25lbnRXaWxsVW5tb3VudCA9IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIHRoaXMudW5saXN0ZW4oKTtcbiAgfTtcblxuICBSb3V0ZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICB2YXIgY2hpbGRyZW4gPSB0aGlzLnByb3BzLmNoaWxkcmVuO1xuXG4gICAgcmV0dXJuIGNoaWxkcmVuID8gUmVhY3QuQ2hpbGRyZW4ub25seShjaGlsZHJlbikgOiBudWxsO1xuICB9O1xuXG4gIHJldHVybiBSb3V0ZXI7XG59KFJlYWN0LkNvbXBvbmVudCk7XG5cblJvdXRlci5wcm9wVHlwZXMgPSB7XG4gIGhpc3Rvcnk6IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZCxcbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlXG59O1xuUm91dGVyLmNvbnRleHRUeXBlcyA9IHtcbiAgcm91dGVyOiBQcm9wVHlwZXMub2JqZWN0XG59O1xuUm91dGVyLmNoaWxkQ29udGV4dFR5cGVzID0ge1xuICByb3V0ZXI6IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZFxufTtcblxuXG5leHBvcnQgZGVmYXVsdCBSb3V0ZXI7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1yb3V0ZXIvZXMvUm91dGVyLmpzIiwiaW1wb3J0IHBhdGhUb1JlZ2V4cCBmcm9tICdwYXRoLXRvLXJlZ2V4cCc7XG5cbnZhciBwYXR0ZXJuQ2FjaGUgPSB7fTtcbnZhciBjYWNoZUxpbWl0ID0gMTAwMDA7XG52YXIgY2FjaGVDb3VudCA9IDA7XG5cbnZhciBjb21waWxlUGF0aCA9IGZ1bmN0aW9uIGNvbXBpbGVQYXRoKHBhdHRlcm4sIG9wdGlvbnMpIHtcbiAgdmFyIGNhY2hlS2V5ID0gJycgKyBvcHRpb25zLmVuZCArIG9wdGlvbnMuc3RyaWN0O1xuICB2YXIgY2FjaGUgPSBwYXR0ZXJuQ2FjaGVbY2FjaGVLZXldIHx8IChwYXR0ZXJuQ2FjaGVbY2FjaGVLZXldID0ge30pO1xuXG4gIGlmIChjYWNoZVtwYXR0ZXJuXSkgcmV0dXJuIGNhY2hlW3BhdHRlcm5dO1xuXG4gIHZhciBrZXlzID0gW107XG4gIHZhciByZSA9IHBhdGhUb1JlZ2V4cChwYXR0ZXJuLCBrZXlzLCBvcHRpb25zKTtcbiAgdmFyIGNvbXBpbGVkUGF0dGVybiA9IHsgcmU6IHJlLCBrZXlzOiBrZXlzIH07XG5cbiAgaWYgKGNhY2hlQ291bnQgPCBjYWNoZUxpbWl0KSB7XG4gICAgY2FjaGVbcGF0dGVybl0gPSBjb21waWxlZFBhdHRlcm47XG4gICAgY2FjaGVDb3VudCsrO1xuICB9XG5cbiAgcmV0dXJuIGNvbXBpbGVkUGF0dGVybjtcbn07XG5cbi8qKlxuICogUHVibGljIEFQSSBmb3IgbWF0Y2hpbmcgYSBVUkwgcGF0aG5hbWUgdG8gYSBwYXRoIHBhdHRlcm4uXG4gKi9cbnZhciBtYXRjaFBhdGggPSBmdW5jdGlvbiBtYXRjaFBhdGgocGF0aG5hbWUpIHtcbiAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuXG4gIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ3N0cmluZycpIG9wdGlvbnMgPSB7IHBhdGg6IG9wdGlvbnMgfTtcblxuICB2YXIgX29wdGlvbnMgPSBvcHRpb25zLFxuICAgICAgX29wdGlvbnMkcGF0aCA9IF9vcHRpb25zLnBhdGgsXG4gICAgICBwYXRoID0gX29wdGlvbnMkcGF0aCA9PT0gdW5kZWZpbmVkID8gJy8nIDogX29wdGlvbnMkcGF0aCxcbiAgICAgIF9vcHRpb25zJGV4YWN0ID0gX29wdGlvbnMuZXhhY3QsXG4gICAgICBleGFjdCA9IF9vcHRpb25zJGV4YWN0ID09PSB1bmRlZmluZWQgPyBmYWxzZSA6IF9vcHRpb25zJGV4YWN0LFxuICAgICAgX29wdGlvbnMkc3RyaWN0ID0gX29wdGlvbnMuc3RyaWN0LFxuICAgICAgc3RyaWN0ID0gX29wdGlvbnMkc3RyaWN0ID09PSB1bmRlZmluZWQgPyBmYWxzZSA6IF9vcHRpb25zJHN0cmljdDtcblxuICB2YXIgX2NvbXBpbGVQYXRoID0gY29tcGlsZVBhdGgocGF0aCwgeyBlbmQ6IGV4YWN0LCBzdHJpY3Q6IHN0cmljdCB9KSxcbiAgICAgIHJlID0gX2NvbXBpbGVQYXRoLnJlLFxuICAgICAga2V5cyA9IF9jb21waWxlUGF0aC5rZXlzO1xuXG4gIHZhciBtYXRjaCA9IHJlLmV4ZWMocGF0aG5hbWUpO1xuXG4gIGlmICghbWF0Y2gpIHJldHVybiBudWxsO1xuXG4gIHZhciB1cmwgPSBtYXRjaFswXSxcbiAgICAgIHZhbHVlcyA9IG1hdGNoLnNsaWNlKDEpO1xuXG4gIHZhciBpc0V4YWN0ID0gcGF0aG5hbWUgPT09IHVybDtcblxuICBpZiAoZXhhY3QgJiYgIWlzRXhhY3QpIHJldHVybiBudWxsO1xuXG4gIHJldHVybiB7XG4gICAgcGF0aDogcGF0aCwgLy8gdGhlIHBhdGggcGF0dGVybiB1c2VkIHRvIG1hdGNoXG4gICAgdXJsOiBwYXRoID09PSAnLycgJiYgdXJsID09PSAnJyA/ICcvJyA6IHVybCwgLy8gdGhlIG1hdGNoZWQgcG9ydGlvbiBvZiB0aGUgVVJMXG4gICAgaXNFeGFjdDogaXNFeGFjdCwgLy8gd2hldGhlciBvciBub3Qgd2UgbWF0Y2hlZCBleGFjdGx5XG4gICAgcGFyYW1zOiBrZXlzLnJlZHVjZShmdW5jdGlvbiAobWVtbywga2V5LCBpbmRleCkge1xuICAgICAgbWVtb1trZXkubmFtZV0gPSB2YWx1ZXNbaW5kZXhdO1xuICAgICAgcmV0dXJuIG1lbW87XG4gICAgfSwge30pXG4gIH07XG59O1xuXG5leHBvcnQgZGVmYXVsdCBtYXRjaFBhdGg7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1yb3V0ZXIvZXMvbWF0Y2hQYXRoLmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxNC0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBGb3JrZWQgZnJvbSBmYmpzL3dhcm5pbmc6XG4gKiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svZmJqcy9ibG9iL2U2NmJhMjBhZDViZTQzM2ViNTQ0MjNmMmIwOTdkODI5MzI0ZDlkZTYvcGFja2FnZXMvZmJqcy9zcmMvX19mb3Jrc19fL3dhcm5pbmcuanNcbiAqXG4gKiBPbmx5IGNoYW5nZSBpcyB3ZSB1c2UgY29uc29sZS53YXJuIGluc3RlYWQgb2YgY29uc29sZS5lcnJvcixcbiAqIGFuZCBkbyBub3RoaW5nIHdoZW4gJ2NvbnNvbGUnIGlzIG5vdCBzdXBwb3J0ZWQuXG4gKiBUaGlzIHJlYWxseSBzaW1wbGlmaWVzIHRoZSBjb2RlLlxuICogLS0tXG4gKiBTaW1pbGFyIHRvIGludmFyaWFudCBidXQgb25seSBsb2dzIGEgd2FybmluZyBpZiB0aGUgY29uZGl0aW9uIGlzIG5vdCBtZXQuXG4gKiBUaGlzIGNhbiBiZSB1c2VkIHRvIGxvZyBpc3N1ZXMgaW4gZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnRzIGluIGNyaXRpY2FsXG4gKiBwYXRocy4gUmVtb3ZpbmcgdGhlIGxvZ2dpbmcgY29kZSBmb3IgcHJvZHVjdGlvbiBlbnZpcm9ubWVudHMgd2lsbCBrZWVwIHRoZVxuICogc2FtZSBsb2dpYyBhbmQgZm9sbG93IHRoZSBzYW1lIGNvZGUgcGF0aHMuXG4gKi9cblxudmFyIGxvd1ByaW9yaXR5V2FybmluZyA9IGZ1bmN0aW9uICgpIHt9O1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICB2YXIgcHJpbnRXYXJuaW5nID0gZnVuY3Rpb24gKGZvcm1hdCkge1xuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5IC0gMV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgdmFyIGFyZ0luZGV4ID0gMDtcbiAgICB2YXIgbWVzc2FnZSA9ICdXYXJuaW5nOiAnICsgZm9ybWF0LnJlcGxhY2UoLyVzL2csIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBhcmdzW2FyZ0luZGV4KytdO1xuICAgIH0pO1xuICAgIGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGNvbnNvbGUud2FybihtZXNzYWdlKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIC8vIC0tLSBXZWxjb21lIHRvIGRlYnVnZ2luZyBSZWFjdCAtLS1cbiAgICAgIC8vIFRoaXMgZXJyb3Igd2FzIHRocm93biBhcyBhIGNvbnZlbmllbmNlIHNvIHRoYXQgeW91IGNhbiB1c2UgdGhpcyBzdGFja1xuICAgICAgLy8gdG8gZmluZCB0aGUgY2FsbHNpdGUgdGhhdCBjYXVzZWQgdGhpcyB3YXJuaW5nIHRvIGZpcmUuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgfSBjYXRjaCAoeCkge31cbiAgfTtcblxuICBsb3dQcmlvcml0eVdhcm5pbmcgPSBmdW5jdGlvbiAoY29uZGl0aW9uLCBmb3JtYXQpIHtcbiAgICBpZiAoZm9ybWF0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignYHdhcm5pbmcoY29uZGl0aW9uLCBmb3JtYXQsIC4uLmFyZ3MpYCByZXF1aXJlcyBhIHdhcm5pbmcgJyArICdtZXNzYWdlIGFyZ3VtZW50Jyk7XG4gICAgfVxuICAgIGlmICghY29uZGl0aW9uKSB7XG4gICAgICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBBcnJheShfbGVuMiA+IDIgPyBfbGVuMiAtIDIgOiAwKSwgX2tleTIgPSAyOyBfa2V5MiA8IF9sZW4yOyBfa2V5MisrKSB7XG4gICAgICAgIGFyZ3NbX2tleTIgLSAyXSA9IGFyZ3VtZW50c1tfa2V5Ml07XG4gICAgICB9XG5cbiAgICAgIHByaW50V2FybmluZy5hcHBseSh1bmRlZmluZWQsIFtmb3JtYXRdLmNvbmNhdChhcmdzKSk7XG4gICAgfVxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxvd1ByaW9yaXR5V2FybmluZztcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3JlYWN0L2xpYi9sb3dQcmlvcml0eVdhcm5pbmcuanMiLCJpbXBvcnQgY3JlYXRlU3RvcmUgZnJvbSAnLi9jcmVhdGVTdG9yZSc7XG5pbXBvcnQgY29tYmluZVJlZHVjZXJzIGZyb20gJy4vY29tYmluZVJlZHVjZXJzJztcbmltcG9ydCBiaW5kQWN0aW9uQ3JlYXRvcnMgZnJvbSAnLi9iaW5kQWN0aW9uQ3JlYXRvcnMnO1xuaW1wb3J0IGFwcGx5TWlkZGxld2FyZSBmcm9tICcuL2FwcGx5TWlkZGxld2FyZSc7XG5pbXBvcnQgY29tcG9zZSBmcm9tICcuL2NvbXBvc2UnO1xuaW1wb3J0IHdhcm5pbmcgZnJvbSAnLi91dGlscy93YXJuaW5nJztcblxuLypcbiogVGhpcyBpcyBhIGR1bW15IGZ1bmN0aW9uIHRvIGNoZWNrIGlmIHRoZSBmdW5jdGlvbiBuYW1lIGhhcyBiZWVuIGFsdGVyZWQgYnkgbWluaWZpY2F0aW9uLlxuKiBJZiB0aGUgZnVuY3Rpb24gaGFzIGJlZW4gbWluaWZpZWQgYW5kIE5PREVfRU5WICE9PSAncHJvZHVjdGlvbicsIHdhcm4gdGhlIHVzZXIuXG4qL1xuZnVuY3Rpb24gaXNDcnVzaGVkKCkge31cblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgdHlwZW9mIGlzQ3J1c2hlZC5uYW1lID09PSAnc3RyaW5nJyAmJiBpc0NydXNoZWQubmFtZSAhPT0gJ2lzQ3J1c2hlZCcpIHtcbiAgd2FybmluZygnWW91IGFyZSBjdXJyZW50bHkgdXNpbmcgbWluaWZpZWQgY29kZSBvdXRzaWRlIG9mIE5PREVfRU5WID09PSBcXCdwcm9kdWN0aW9uXFwnLiAnICsgJ1RoaXMgbWVhbnMgdGhhdCB5b3UgYXJlIHJ1bm5pbmcgYSBzbG93ZXIgZGV2ZWxvcG1lbnQgYnVpbGQgb2YgUmVkdXguICcgKyAnWW91IGNhbiB1c2UgbG9vc2UtZW52aWZ5IChodHRwczovL2dpdGh1Yi5jb20vemVydG9zaC9sb29zZS1lbnZpZnkpIGZvciBicm93c2VyaWZ5ICcgKyAnb3IgRGVmaW5lUGx1Z2luIGZvciB3ZWJwYWNrIChodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzMwMDMwMDMxKSAnICsgJ3RvIGVuc3VyZSB5b3UgaGF2ZSB0aGUgY29ycmVjdCBjb2RlIGZvciB5b3VyIHByb2R1Y3Rpb24gYnVpbGQuJyk7XG59XG5cbmV4cG9ydCB7IGNyZWF0ZVN0b3JlLCBjb21iaW5lUmVkdWNlcnMsIGJpbmRBY3Rpb25DcmVhdG9ycywgYXBwbHlNaWRkbGV3YXJlLCBjb21wb3NlIH07XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWR1eC9lcy9pbmRleC5qcyIsIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqXG4gKiBAdHlwZWNoZWNrc1xuICovXG5cbnZhciBlbXB0eUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9lbXB0eUZ1bmN0aW9uJyk7XG5cbi8qKlxuICogVXBzdHJlYW0gdmVyc2lvbiBvZiBldmVudCBsaXN0ZW5lci4gRG9lcyBub3QgdGFrZSBpbnRvIGFjY291bnQgc3BlY2lmaWNcbiAqIG5hdHVyZSBvZiBwbGF0Zm9ybS5cbiAqL1xudmFyIEV2ZW50TGlzdGVuZXIgPSB7XG4gIC8qKlxuICAgKiBMaXN0ZW4gdG8gRE9NIGV2ZW50cyBkdXJpbmcgdGhlIGJ1YmJsZSBwaGFzZS5cbiAgICpcbiAgICogQHBhcmFtIHtET01FdmVudFRhcmdldH0gdGFyZ2V0IERPTSBlbGVtZW50IHRvIHJlZ2lzdGVyIGxpc3RlbmVyIG9uLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnRUeXBlIEV2ZW50IHR5cGUsIGUuZy4gJ2NsaWNrJyBvciAnbW91c2VvdmVyJy5cbiAgICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sgQ2FsbGJhY2sgZnVuY3Rpb24uXG4gICAqIEByZXR1cm4ge29iamVjdH0gT2JqZWN0IHdpdGggYSBgcmVtb3ZlYCBtZXRob2QuXG4gICAqL1xuICBsaXN0ZW46IGZ1bmN0aW9uIGxpc3Rlbih0YXJnZXQsIGV2ZW50VHlwZSwgY2FsbGJhY2spIHtcbiAgICBpZiAodGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIpIHtcbiAgICAgIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgY2FsbGJhY2ssIGZhbHNlKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHJlbW92ZTogZnVuY3Rpb24gcmVtb3ZlKCkge1xuICAgICAgICAgIHRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgY2FsbGJhY2ssIGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKHRhcmdldC5hdHRhY2hFdmVudCkge1xuICAgICAgdGFyZ2V0LmF0dGFjaEV2ZW50KCdvbicgKyBldmVudFR5cGUsIGNhbGxiYWNrKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHJlbW92ZTogZnVuY3Rpb24gcmVtb3ZlKCkge1xuICAgICAgICAgIHRhcmdldC5kZXRhY2hFdmVudCgnb24nICsgZXZlbnRUeXBlLCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICB9LFxuXG4gIC8qKlxuICAgKiBMaXN0ZW4gdG8gRE9NIGV2ZW50cyBkdXJpbmcgdGhlIGNhcHR1cmUgcGhhc2UuXG4gICAqXG4gICAqIEBwYXJhbSB7RE9NRXZlbnRUYXJnZXR9IHRhcmdldCBET00gZWxlbWVudCB0byByZWdpc3RlciBsaXN0ZW5lciBvbi5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50VHlwZSBFdmVudCB0eXBlLCBlLmcuICdjbGljaycgb3IgJ21vdXNlb3ZlcicuXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrIENhbGxiYWNrIGZ1bmN0aW9uLlxuICAgKiBAcmV0dXJuIHtvYmplY3R9IE9iamVjdCB3aXRoIGEgYHJlbW92ZWAgbWV0aG9kLlxuICAgKi9cbiAgY2FwdHVyZTogZnVuY3Rpb24gY2FwdHVyZSh0YXJnZXQsIGV2ZW50VHlwZSwgY2FsbGJhY2spIHtcbiAgICBpZiAodGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIpIHtcbiAgICAgIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgY2FsbGJhY2ssIHRydWUpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcmVtb3ZlOiBmdW5jdGlvbiByZW1vdmUoKSB7XG4gICAgICAgICAgdGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBjYWxsYmFjaywgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0F0dGVtcHRlZCB0byBsaXN0ZW4gdG8gZXZlbnRzIGR1cmluZyB0aGUgY2FwdHVyZSBwaGFzZSBvbiBhICcgKyAnYnJvd3NlciB0aGF0IGRvZXMgbm90IHN1cHBvcnQgdGhlIGNhcHR1cmUgcGhhc2UuIFlvdXIgYXBwbGljYXRpb24gJyArICd3aWxsIG5vdCByZWNlaXZlIHNvbWUgZXZlbnRzLicpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcmVtb3ZlOiBlbXB0eUZ1bmN0aW9uXG4gICAgICB9O1xuICAgIH1cbiAgfSxcblxuICByZWdpc3RlckRlZmF1bHQ6IGZ1bmN0aW9uIHJlZ2lzdGVyRGVmYXVsdCgpIHt9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEV2ZW50TGlzdGVuZXI7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9mYmpzL2xpYi9FdmVudExpc3RlbmVyLmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbi8qKlxuICogQHBhcmFtIHtET01FbGVtZW50fSBub2RlIGlucHV0L3RleHRhcmVhIHRvIGZvY3VzXG4gKi9cblxuZnVuY3Rpb24gZm9jdXNOb2RlKG5vZGUpIHtcbiAgLy8gSUU4IGNhbiB0aHJvdyBcIkNhbid0IG1vdmUgZm9jdXMgdG8gdGhlIGNvbnRyb2wgYmVjYXVzZSBpdCBpcyBpbnZpc2libGUsXG4gIC8vIG5vdCBlbmFibGVkLCBvciBvZiBhIHR5cGUgdGhhdCBkb2VzIG5vdCBhY2NlcHQgdGhlIGZvY3VzLlwiIGZvciBhbGwga2luZHMgb2ZcbiAgLy8gcmVhc29ucyB0aGF0IGFyZSB0b28gZXhwZW5zaXZlIGFuZCBmcmFnaWxlIHRvIHRlc3QuXG4gIHRyeSB7XG4gICAgbm9kZS5mb2N1cygpO1xuICB9IGNhdGNoIChlKSB7fVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZvY3VzTm9kZTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L2ZianMvbGliL2ZvY3VzTm9kZS5qcyIsIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEB0eXBlY2hlY2tzXG4gKi9cblxuLyogZXNsaW50LWRpc2FibGUgZmItd3d3L3R5cGVvZi11bmRlZmluZWQgKi9cblxuLyoqXG4gKiBTYW1lIGFzIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgYnV0IHdyYXBzIGluIGEgdHJ5LWNhdGNoIGJsb2NrLiBJbiBJRSBpdCBpc1xuICogbm90IHNhZmUgdG8gY2FsbCBkb2N1bWVudC5hY3RpdmVFbGVtZW50IGlmIHRoZXJlIGlzIG5vdGhpbmcgZm9jdXNlZC5cbiAqXG4gKiBUaGUgYWN0aXZlRWxlbWVudCB3aWxsIGJlIG51bGwgb25seSBpZiB0aGUgZG9jdW1lbnQgb3IgZG9jdW1lbnQgYm9keSBpcyBub3RcbiAqIHlldCBkZWZpbmVkLlxuICpcbiAqIEBwYXJhbSB7P0RPTURvY3VtZW50fSBkb2MgRGVmYXVsdHMgdG8gY3VycmVudCBkb2N1bWVudC5cbiAqIEByZXR1cm4gez9ET01FbGVtZW50fVxuICovXG5mdW5jdGlvbiBnZXRBY3RpdmVFbGVtZW50KGRvYykgLyo/RE9NRWxlbWVudCove1xuICBkb2MgPSBkb2MgfHwgKHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcgPyBkb2N1bWVudCA6IHVuZGVmaW5lZCk7XG4gIGlmICh0eXBlb2YgZG9jID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHRyeSB7XG4gICAgcmV0dXJuIGRvYy5hY3RpdmVFbGVtZW50IHx8IGRvYy5ib2R5O1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGRvYy5ib2R5O1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QWN0aXZlRWxlbWVudDtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L2ZianMvbGliL2dldEFjdGl2ZUVsZW1lbnQuanMiLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG52YXIgY2FuVXNlRE9NID0gZXhwb3J0cy5jYW5Vc2VET00gPSAhISh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuZG9jdW1lbnQgJiYgd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpO1xuXG52YXIgYWRkRXZlbnRMaXN0ZW5lciA9IGV4cG9ydHMuYWRkRXZlbnRMaXN0ZW5lciA9IGZ1bmN0aW9uIGFkZEV2ZW50TGlzdGVuZXIobm9kZSwgZXZlbnQsIGxpc3RlbmVyKSB7XG4gIHJldHVybiBub2RlLmFkZEV2ZW50TGlzdGVuZXIgPyBub2RlLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnQsIGxpc3RlbmVyLCBmYWxzZSkgOiBub2RlLmF0dGFjaEV2ZW50KCdvbicgKyBldmVudCwgbGlzdGVuZXIpO1xufTtcblxudmFyIHJlbW92ZUV2ZW50TGlzdGVuZXIgPSBleHBvcnRzLnJlbW92ZUV2ZW50TGlzdGVuZXIgPSBmdW5jdGlvbiByZW1vdmVFdmVudExpc3RlbmVyKG5vZGUsIGV2ZW50LCBsaXN0ZW5lcikge1xuICByZXR1cm4gbm9kZS5yZW1vdmVFdmVudExpc3RlbmVyID8gbm9kZS5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50LCBsaXN0ZW5lciwgZmFsc2UpIDogbm9kZS5kZXRhY2hFdmVudCgnb24nICsgZXZlbnQsIGxpc3RlbmVyKTtcbn07XG5cbnZhciBnZXRDb25maXJtYXRpb24gPSBleHBvcnRzLmdldENvbmZpcm1hdGlvbiA9IGZ1bmN0aW9uIGdldENvbmZpcm1hdGlvbihtZXNzYWdlLCBjYWxsYmFjaykge1xuICByZXR1cm4gY2FsbGJhY2sod2luZG93LmNvbmZpcm0obWVzc2FnZSkpO1xufTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1hbGVydFxuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgSFRNTDUgaGlzdG9yeSBBUEkgaXMgc3VwcG9ydGVkLiBUYWtlbiBmcm9tIE1vZGVybml6ci5cbiAqXG4gKiBodHRwczovL2dpdGh1Yi5jb20vTW9kZXJuaXpyL01vZGVybml6ci9ibG9iL21hc3Rlci9MSUNFTlNFXG4gKiBodHRwczovL2dpdGh1Yi5jb20vTW9kZXJuaXpyL01vZGVybml6ci9ibG9iL21hc3Rlci9mZWF0dXJlLWRldGVjdHMvaGlzdG9yeS5qc1xuICogY2hhbmdlZCB0byBhdm9pZCBmYWxzZSBuZWdhdGl2ZXMgZm9yIFdpbmRvd3MgUGhvbmVzOiBodHRwczovL2dpdGh1Yi5jb20vcmVhY3Rqcy9yZWFjdC1yb3V0ZXIvaXNzdWVzLzU4NlxuICovXG52YXIgc3VwcG9ydHNIaXN0b3J5ID0gZXhwb3J0cy5zdXBwb3J0c0hpc3RvcnkgPSBmdW5jdGlvbiBzdXBwb3J0c0hpc3RvcnkoKSB7XG4gIHZhciB1YSA9IHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50O1xuXG4gIGlmICgodWEuaW5kZXhPZignQW5kcm9pZCAyLicpICE9PSAtMSB8fCB1YS5pbmRleE9mKCdBbmRyb2lkIDQuMCcpICE9PSAtMSkgJiYgdWEuaW5kZXhPZignTW9iaWxlIFNhZmFyaScpICE9PSAtMSAmJiB1YS5pbmRleE9mKCdDaHJvbWUnKSA9PT0gLTEgJiYgdWEuaW5kZXhPZignV2luZG93cyBQaG9uZScpID09PSAtMSkgcmV0dXJuIGZhbHNlO1xuXG4gIHJldHVybiB3aW5kb3cuaGlzdG9yeSAmJiAncHVzaFN0YXRlJyBpbiB3aW5kb3cuaGlzdG9yeTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIGJyb3dzZXIgZmlyZXMgcG9wc3RhdGUgb24gaGFzaCBjaGFuZ2UuXG4gKiBJRTEwIGFuZCBJRTExIGRvIG5vdC5cbiAqL1xudmFyIHN1cHBvcnRzUG9wU3RhdGVPbkhhc2hDaGFuZ2UgPSBleHBvcnRzLnN1cHBvcnRzUG9wU3RhdGVPbkhhc2hDaGFuZ2UgPSBmdW5jdGlvbiBzdXBwb3J0c1BvcFN0YXRlT25IYXNoQ2hhbmdlKCkge1xuICByZXR1cm4gd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZignVHJpZGVudCcpID09PSAtMTtcbn07XG5cbi8qKlxuICogUmV0dXJucyBmYWxzZSBpZiB1c2luZyBnbyhuKSB3aXRoIGhhc2ggaGlzdG9yeSBjYXVzZXMgYSBmdWxsIHBhZ2UgcmVsb2FkLlxuICovXG52YXIgc3VwcG9ydHNHb1dpdGhvdXRSZWxvYWRVc2luZ0hhc2ggPSBleHBvcnRzLnN1cHBvcnRzR29XaXRob3V0UmVsb2FkVXNpbmdIYXNoID0gZnVuY3Rpb24gc3VwcG9ydHNHb1dpdGhvdXRSZWxvYWRVc2luZ0hhc2goKSB7XG4gIHJldHVybiB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCdGaXJlZm94JykgPT09IC0xO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgYSBnaXZlbiBwb3BzdGF0ZSBldmVudCBpcyBhbiBleHRyYW5lb3VzIFdlYktpdCBldmVudC5cbiAqIEFjY291bnRzIGZvciB0aGUgZmFjdCB0aGF0IENocm9tZSBvbiBpT1MgZmlyZXMgcmVhbCBwb3BzdGF0ZSBldmVudHNcbiAqIGNvbnRhaW5pbmcgdW5kZWZpbmVkIHN0YXRlIHdoZW4gcHJlc3NpbmcgdGhlIGJhY2sgYnV0dG9uLlxuICovXG52YXIgaXNFeHRyYW5lb3VzUG9wc3RhdGVFdmVudCA9IGV4cG9ydHMuaXNFeHRyYW5lb3VzUG9wc3RhdGVFdmVudCA9IGZ1bmN0aW9uIGlzRXh0cmFuZW91c1BvcHN0YXRlRXZlbnQoZXZlbnQpIHtcbiAgcmV0dXJuIGV2ZW50LnN0YXRlID09PSB1bmRlZmluZWQgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCdDcmlPUycpID09PSAtMTtcbn07XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9oaXN0b3J5L0RPTVV0aWxzLmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxNSwgWWFob28hIEluYy5cbiAqIENvcHlyaWdodHMgbGljZW5zZWQgdW5kZXIgdGhlIE5ldyBCU0QgTGljZW5zZS4gU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiAqL1xuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUkVBQ1RfU1RBVElDUyA9IHtcbiAgICBjaGlsZENvbnRleHRUeXBlczogdHJ1ZSxcbiAgICBjb250ZXh0VHlwZXM6IHRydWUsXG4gICAgZGVmYXVsdFByb3BzOiB0cnVlLFxuICAgIGRpc3BsYXlOYW1lOiB0cnVlLFxuICAgIGdldERlZmF1bHRQcm9wczogdHJ1ZSxcbiAgICBtaXhpbnM6IHRydWUsXG4gICAgcHJvcFR5cGVzOiB0cnVlLFxuICAgIHR5cGU6IHRydWVcbn07XG5cbnZhciBLTk9XTl9TVEFUSUNTID0ge1xuICAgIG5hbWU6IHRydWUsXG4gICAgbGVuZ3RoOiB0cnVlLFxuICAgIHByb3RvdHlwZTogdHJ1ZSxcbiAgICBjYWxsZXI6IHRydWUsXG4gICAgYXJndW1lbnRzOiB0cnVlLFxuICAgIGFyaXR5OiB0cnVlXG59O1xuXG52YXIgaXNHZXRPd25Qcm9wZXJ0eVN5bWJvbHNBdmFpbGFibGUgPSB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gJ2Z1bmN0aW9uJztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBob2lzdE5vblJlYWN0U3RhdGljcyh0YXJnZXRDb21wb25lbnQsIHNvdXJjZUNvbXBvbmVudCwgY3VzdG9tU3RhdGljcykge1xuICAgIGlmICh0eXBlb2Ygc291cmNlQ29tcG9uZW50ICE9PSAnc3RyaW5nJykgeyAvLyBkb24ndCBob2lzdCBvdmVyIHN0cmluZyAoaHRtbCkgY29tcG9uZW50c1xuICAgICAgICB2YXIga2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHNvdXJjZUNvbXBvbmVudCk7XG5cbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgaWYgKGlzR2V0T3duUHJvcGVydHlTeW1ib2xzQXZhaWxhYmxlKSB7XG4gICAgICAgICAgICBrZXlzID0ga2V5cy5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2VDb21wb25lbnQpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgaWYgKCFSRUFDVF9TVEFUSUNTW2tleXNbaV1dICYmICFLTk9XTl9TVEFUSUNTW2tleXNbaV1dICYmICghY3VzdG9tU3RhdGljcyB8fCAhY3VzdG9tU3RhdGljc1trZXlzW2ldXSkpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXRDb21wb25lbnRba2V5c1tpXV0gPSBzb3VyY2VDb21wb25lbnRba2V5c1tpXV07XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcblxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0YXJnZXRDb21wb25lbnQ7XG59O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9ob2lzdC1ub24tcmVhY3Qtc3RhdGljcy9pbmRleC5qcyIsImltcG9ydCByb290IGZyb20gJy4vX3Jvb3QuanMnO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBTeW1ib2wgPSByb290LlN5bWJvbDtcblxuZXhwb3J0IGRlZmF1bHQgU3ltYm9sO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9sb2Rhc2gtZXMvX1N5bWJvbC5qcyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuLy8gUmVhY3QgMTUuNSByZWZlcmVuY2VzIHRoaXMgbW9kdWxlLCBhbmQgYXNzdW1lcyBQcm9wVHlwZXMgYXJlIHN0aWxsIGNhbGxhYmxlIGluIHByb2R1Y3Rpb24uXG4vLyBUaGVyZWZvcmUgd2UgcmUtZXhwb3J0IGRldmVsb3BtZW50LW9ubHkgdmVyc2lvbiB3aXRoIGFsbCB0aGUgUHJvcFR5cGVzIGNoZWNrcyBoZXJlLlxuLy8gSG93ZXZlciBpZiBvbmUgaXMgbWlncmF0aW5nIHRvIHRoZSBgcHJvcC10eXBlc2AgbnBtIGxpYnJhcnksIHRoZXkgd2lsbCBnbyB0aHJvdWdoIHRoZVxuLy8gYGluZGV4LmpzYCBlbnRyeSBwb2ludCwgYW5kIGl0IHdpbGwgYnJhbmNoIGRlcGVuZGluZyBvbiB0aGUgZW52aXJvbm1lbnQuXG52YXIgZmFjdG9yeSA9IHJlcXVpcmUoJy4vZmFjdG9yeVdpdGhUeXBlQ2hlY2tlcnMnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXNWYWxpZEVsZW1lbnQpIHtcbiAgLy8gSXQgaXMgc3RpbGwgYWxsb3dlZCBpbiAxNS41LlxuICB2YXIgdGhyb3dPbkRpcmVjdEFjY2VzcyA9IGZhbHNlO1xuICByZXR1cm4gZmFjdG9yeShpc1ZhbGlkRWxlbWVudCwgdGhyb3dPbkRpcmVjdEFjY2Vzcyk7XG59O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9wcm9wLXR5cGVzL2ZhY3RvcnkuanMiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBlbXB0eUZ1bmN0aW9uID0gcmVxdWlyZSgnZmJqcy9saWIvZW1wdHlGdW5jdGlvbicpO1xudmFyIGludmFyaWFudCA9IHJlcXVpcmUoJ2ZianMvbGliL2ludmFyaWFudCcpO1xudmFyIHdhcm5pbmcgPSByZXF1aXJlKCdmYmpzL2xpYi93YXJuaW5nJyk7XG5cbnZhciBSZWFjdFByb3BUeXBlc1NlY3JldCA9IHJlcXVpcmUoJy4vbGliL1JlYWN0UHJvcFR5cGVzU2VjcmV0Jyk7XG52YXIgY2hlY2tQcm9wVHlwZXMgPSByZXF1aXJlKCcuL2NoZWNrUHJvcFR5cGVzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXNWYWxpZEVsZW1lbnQsIHRocm93T25EaXJlY3RBY2Nlc3MpIHtcbiAgLyogZ2xvYmFsIFN5bWJvbCAqL1xuICB2YXIgSVRFUkFUT1JfU1lNQk9MID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wuaXRlcmF0b3I7XG4gIHZhciBGQVVYX0lURVJBVE9SX1NZTUJPTCA9ICdAQGl0ZXJhdG9yJzsgLy8gQmVmb3JlIFN5bWJvbCBzcGVjLlxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBpdGVyYXRvciBtZXRob2QgZnVuY3Rpb24gY29udGFpbmVkIG9uIHRoZSBpdGVyYWJsZSBvYmplY3QuXG4gICAqXG4gICAqIEJlIHN1cmUgdG8gaW52b2tlIHRoZSBmdW5jdGlvbiB3aXRoIHRoZSBpdGVyYWJsZSBhcyBjb250ZXh0OlxuICAgKlxuICAgKiAgICAgdmFyIGl0ZXJhdG9yRm4gPSBnZXRJdGVyYXRvckZuKG15SXRlcmFibGUpO1xuICAgKiAgICAgaWYgKGl0ZXJhdG9yRm4pIHtcbiAgICogICAgICAgdmFyIGl0ZXJhdG9yID0gaXRlcmF0b3JGbi5jYWxsKG15SXRlcmFibGUpO1xuICAgKiAgICAgICAuLi5cbiAgICogICAgIH1cbiAgICpcbiAgICogQHBhcmFtIHs/b2JqZWN0fSBtYXliZUl0ZXJhYmxlXG4gICAqIEByZXR1cm4gez9mdW5jdGlvbn1cbiAgICovXG4gIGZ1bmN0aW9uIGdldEl0ZXJhdG9yRm4obWF5YmVJdGVyYWJsZSkge1xuICAgIHZhciBpdGVyYXRvckZuID0gbWF5YmVJdGVyYWJsZSAmJiAoSVRFUkFUT1JfU1lNQk9MICYmIG1heWJlSXRlcmFibGVbSVRFUkFUT1JfU1lNQk9MXSB8fCBtYXliZUl0ZXJhYmxlW0ZBVVhfSVRFUkFUT1JfU1lNQk9MXSk7XG4gICAgaWYgKHR5cGVvZiBpdGVyYXRvckZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gaXRlcmF0b3JGbjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ29sbGVjdGlvbiBvZiBtZXRob2RzIHRoYXQgYWxsb3cgZGVjbGFyYXRpb24gYW5kIHZhbGlkYXRpb24gb2YgcHJvcHMgdGhhdCBhcmVcbiAgICogc3VwcGxpZWQgdG8gUmVhY3QgY29tcG9uZW50cy4gRXhhbXBsZSB1c2FnZTpcbiAgICpcbiAgICogICB2YXIgUHJvcHMgPSByZXF1aXJlKCdSZWFjdFByb3BUeXBlcycpO1xuICAgKiAgIHZhciBNeUFydGljbGUgPSBSZWFjdC5jcmVhdGVDbGFzcyh7XG4gICAqICAgICBwcm9wVHlwZXM6IHtcbiAgICogICAgICAgLy8gQW4gb3B0aW9uYWwgc3RyaW5nIHByb3AgbmFtZWQgXCJkZXNjcmlwdGlvblwiLlxuICAgKiAgICAgICBkZXNjcmlwdGlvbjogUHJvcHMuc3RyaW5nLFxuICAgKlxuICAgKiAgICAgICAvLyBBIHJlcXVpcmVkIGVudW0gcHJvcCBuYW1lZCBcImNhdGVnb3J5XCIuXG4gICAqICAgICAgIGNhdGVnb3J5OiBQcm9wcy5vbmVPZihbJ05ld3MnLCdQaG90b3MnXSkuaXNSZXF1aXJlZCxcbiAgICpcbiAgICogICAgICAgLy8gQSBwcm9wIG5hbWVkIFwiZGlhbG9nXCIgdGhhdCByZXF1aXJlcyBhbiBpbnN0YW5jZSBvZiBEaWFsb2cuXG4gICAqICAgICAgIGRpYWxvZzogUHJvcHMuaW5zdGFuY2VPZihEaWFsb2cpLmlzUmVxdWlyZWRcbiAgICogICAgIH0sXG4gICAqICAgICByZW5kZXI6IGZ1bmN0aW9uKCkgeyAuLi4gfVxuICAgKiAgIH0pO1xuICAgKlxuICAgKiBBIG1vcmUgZm9ybWFsIHNwZWNpZmljYXRpb24gb2YgaG93IHRoZXNlIG1ldGhvZHMgYXJlIHVzZWQ6XG4gICAqXG4gICAqICAgdHlwZSA6PSBhcnJheXxib29sfGZ1bmN8b2JqZWN0fG51bWJlcnxzdHJpbmd8b25lT2YoWy4uLl0pfGluc3RhbmNlT2YoLi4uKVxuICAgKiAgIGRlY2wgOj0gUmVhY3RQcm9wVHlwZXMue3R5cGV9KC5pc1JlcXVpcmVkKT9cbiAgICpcbiAgICogRWFjaCBhbmQgZXZlcnkgZGVjbGFyYXRpb24gcHJvZHVjZXMgYSBmdW5jdGlvbiB3aXRoIHRoZSBzYW1lIHNpZ25hdHVyZS4gVGhpc1xuICAgKiBhbGxvd3MgdGhlIGNyZWF0aW9uIG9mIGN1c3RvbSB2YWxpZGF0aW9uIGZ1bmN0aW9ucy4gRm9yIGV4YW1wbGU6XG4gICAqXG4gICAqICB2YXIgTXlMaW5rID0gUmVhY3QuY3JlYXRlQ2xhc3Moe1xuICAgKiAgICBwcm9wVHlwZXM6IHtcbiAgICogICAgICAvLyBBbiBvcHRpb25hbCBzdHJpbmcgb3IgVVJJIHByb3AgbmFtZWQgXCJocmVmXCIuXG4gICAqICAgICAgaHJlZjogZnVuY3Rpb24ocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lKSB7XG4gICAqICAgICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgKiAgICAgICAgaWYgKHByb3BWYWx1ZSAhPSBudWxsICYmIHR5cGVvZiBwcm9wVmFsdWUgIT09ICdzdHJpbmcnICYmXG4gICAqICAgICAgICAgICAgIShwcm9wVmFsdWUgaW5zdGFuY2VvZiBVUkkpKSB7XG4gICAqICAgICAgICAgIHJldHVybiBuZXcgRXJyb3IoXG4gICAqICAgICAgICAgICAgJ0V4cGVjdGVkIGEgc3RyaW5nIG9yIGFuIFVSSSBmb3IgJyArIHByb3BOYW1lICsgJyBpbiAnICtcbiAgICogICAgICAgICAgICBjb21wb25lbnROYW1lXG4gICAqICAgICAgICAgICk7XG4gICAqICAgICAgICB9XG4gICAqICAgICAgfVxuICAgKiAgICB9LFxuICAgKiAgICByZW5kZXI6IGZ1bmN0aW9uKCkgey4uLn1cbiAgICogIH0pO1xuICAgKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG5cbiAgdmFyIEFOT05ZTU9VUyA9ICc8PGFub255bW91cz4+JztcblxuICAvLyBJbXBvcnRhbnQhXG4gIC8vIEtlZXAgdGhpcyBsaXN0IGluIHN5bmMgd2l0aCBwcm9kdWN0aW9uIHZlcnNpb24gaW4gYC4vZmFjdG9yeVdpdGhUaHJvd2luZ1NoaW1zLmpzYC5cbiAgdmFyIFJlYWN0UHJvcFR5cGVzID0ge1xuICAgIGFycmF5OiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignYXJyYXknKSxcbiAgICBib29sOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignYm9vbGVhbicpLFxuICAgIGZ1bmM6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdmdW5jdGlvbicpLFxuICAgIG51bWJlcjogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ251bWJlcicpLFxuICAgIG9iamVjdDogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ29iamVjdCcpLFxuICAgIHN0cmluZzogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ3N0cmluZycpLFxuICAgIHN5bWJvbDogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ3N5bWJvbCcpLFxuXG4gICAgYW55OiBjcmVhdGVBbnlUeXBlQ2hlY2tlcigpLFxuICAgIGFycmF5T2Y6IGNyZWF0ZUFycmF5T2ZUeXBlQ2hlY2tlcixcbiAgICBlbGVtZW50OiBjcmVhdGVFbGVtZW50VHlwZUNoZWNrZXIoKSxcbiAgICBpbnN0YW5jZU9mOiBjcmVhdGVJbnN0YW5jZVR5cGVDaGVja2VyLFxuICAgIG5vZGU6IGNyZWF0ZU5vZGVDaGVja2VyKCksXG4gICAgb2JqZWN0T2Y6IGNyZWF0ZU9iamVjdE9mVHlwZUNoZWNrZXIsXG4gICAgb25lT2Y6IGNyZWF0ZUVudW1UeXBlQ2hlY2tlcixcbiAgICBvbmVPZlR5cGU6IGNyZWF0ZVVuaW9uVHlwZUNoZWNrZXIsXG4gICAgc2hhcGU6IGNyZWF0ZVNoYXBlVHlwZUNoZWNrZXJcbiAgfTtcblxuICAvKipcbiAgICogaW5saW5lZCBPYmplY3QuaXMgcG9seWZpbGwgdG8gYXZvaWQgcmVxdWlyaW5nIGNvbnN1bWVycyBzaGlwIHRoZWlyIG93blxuICAgKiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9PYmplY3QvaXNcbiAgICovXG4gIC8qZXNsaW50LWRpc2FibGUgbm8tc2VsZi1jb21wYXJlKi9cbiAgZnVuY3Rpb24gaXMoeCwgeSkge1xuICAgIC8vIFNhbWVWYWx1ZSBhbGdvcml0aG1cbiAgICBpZiAoeCA9PT0geSkge1xuICAgICAgLy8gU3RlcHMgMS01LCA3LTEwXG4gICAgICAvLyBTdGVwcyA2LmItNi5lOiArMCAhPSAtMFxuICAgICAgcmV0dXJuIHggIT09IDAgfHwgMSAvIHggPT09IDEgLyB5O1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTdGVwIDYuYTogTmFOID09IE5hTlxuICAgICAgcmV0dXJuIHggIT09IHggJiYgeSAhPT0geTtcbiAgICB9XG4gIH1cbiAgLyplc2xpbnQtZW5hYmxlIG5vLXNlbGYtY29tcGFyZSovXG5cbiAgLyoqXG4gICAqIFdlIHVzZSBhbiBFcnJvci1saWtlIG9iamVjdCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBhcyBwZW9wbGUgbWF5IGNhbGxcbiAgICogUHJvcFR5cGVzIGRpcmVjdGx5IGFuZCBpbnNwZWN0IHRoZWlyIG91dHB1dC4gSG93ZXZlciwgd2UgZG9uJ3QgdXNlIHJlYWxcbiAgICogRXJyb3JzIGFueW1vcmUuIFdlIGRvbid0IGluc3BlY3QgdGhlaXIgc3RhY2sgYW55d2F5LCBhbmQgY3JlYXRpbmcgdGhlbVxuICAgKiBpcyBwcm9oaWJpdGl2ZWx5IGV4cGVuc2l2ZSBpZiB0aGV5IGFyZSBjcmVhdGVkIHRvbyBvZnRlbiwgc3VjaCBhcyB3aGF0XG4gICAqIGhhcHBlbnMgaW4gb25lT2ZUeXBlKCkgZm9yIGFueSB0eXBlIGJlZm9yZSB0aGUgb25lIHRoYXQgbWF0Y2hlZC5cbiAgICovXG4gIGZ1bmN0aW9uIFByb3BUeXBlRXJyb3IobWVzc2FnZSkge1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgdGhpcy5zdGFjayA9ICcnO1xuICB9XG4gIC8vIE1ha2UgYGluc3RhbmNlb2YgRXJyb3JgIHN0aWxsIHdvcmsgZm9yIHJldHVybmVkIGVycm9ycy5cbiAgUHJvcFR5cGVFcnJvci5wcm90b3R5cGUgPSBFcnJvci5wcm90b3R5cGU7XG5cbiAgZnVuY3Rpb24gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgdmFyIG1hbnVhbFByb3BUeXBlQ2FsbENhY2hlID0ge307XG4gICAgICB2YXIgbWFudWFsUHJvcFR5cGVXYXJuaW5nQ291bnQgPSAwO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjaGVja1R5cGUoaXNSZXF1aXJlZCwgcHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lLCBzZWNyZXQpIHtcbiAgICAgIGNvbXBvbmVudE5hbWUgPSBjb21wb25lbnROYW1lIHx8IEFOT05ZTU9VUztcbiAgICAgIHByb3BGdWxsTmFtZSA9IHByb3BGdWxsTmFtZSB8fCBwcm9wTmFtZTtcblxuICAgICAgaWYgKHNlY3JldCAhPT0gUmVhY3RQcm9wVHlwZXNTZWNyZXQpIHtcbiAgICAgICAgaWYgKHRocm93T25EaXJlY3RBY2Nlc3MpIHtcbiAgICAgICAgICAvLyBOZXcgYmVoYXZpb3Igb25seSBmb3IgdXNlcnMgb2YgYHByb3AtdHlwZXNgIHBhY2thZ2VcbiAgICAgICAgICBpbnZhcmlhbnQoXG4gICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgICdDYWxsaW5nIFByb3BUeXBlcyB2YWxpZGF0b3JzIGRpcmVjdGx5IGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGBwcm9wLXR5cGVzYCBwYWNrYWdlLiAnICtcbiAgICAgICAgICAgICdVc2UgYFByb3BUeXBlcy5jaGVja1Byb3BUeXBlcygpYCB0byBjYWxsIHRoZW0uICcgK1xuICAgICAgICAgICAgJ1JlYWQgbW9yZSBhdCBodHRwOi8vZmIubWUvdXNlLWNoZWNrLXByb3AtdHlwZXMnXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIC8vIE9sZCBiZWhhdmlvciBmb3IgcGVvcGxlIHVzaW5nIFJlYWN0LlByb3BUeXBlc1xuICAgICAgICAgIHZhciBjYWNoZUtleSA9IGNvbXBvbmVudE5hbWUgKyAnOicgKyBwcm9wTmFtZTtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAhbWFudWFsUHJvcFR5cGVDYWxsQ2FjaGVbY2FjaGVLZXldICYmXG4gICAgICAgICAgICAvLyBBdm9pZCBzcGFtbWluZyB0aGUgY29uc29sZSBiZWNhdXNlIHRoZXkgYXJlIG9mdGVuIG5vdCBhY3Rpb25hYmxlIGV4Y2VwdCBmb3IgbGliIGF1dGhvcnNcbiAgICAgICAgICAgIG1hbnVhbFByb3BUeXBlV2FybmluZ0NvdW50IDwgM1xuICAgICAgICAgICkge1xuICAgICAgICAgICAgd2FybmluZyhcbiAgICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAgICdZb3UgYXJlIG1hbnVhbGx5IGNhbGxpbmcgYSBSZWFjdC5Qcm9wVHlwZXMgdmFsaWRhdGlvbiAnICtcbiAgICAgICAgICAgICAgJ2Z1bmN0aW9uIGZvciB0aGUgYCVzYCBwcm9wIG9uIGAlc2AuIFRoaXMgaXMgZGVwcmVjYXRlZCAnICtcbiAgICAgICAgICAgICAgJ2FuZCB3aWxsIHRocm93IGluIHRoZSBzdGFuZGFsb25lIGBwcm9wLXR5cGVzYCBwYWNrYWdlLiAnICtcbiAgICAgICAgICAgICAgJ1lvdSBtYXkgYmUgc2VlaW5nIHRoaXMgd2FybmluZyBkdWUgdG8gYSB0aGlyZC1wYXJ0eSBQcm9wVHlwZXMgJyArXG4gICAgICAgICAgICAgICdsaWJyYXJ5LiBTZWUgaHR0cHM6Ly9mYi5tZS9yZWFjdC13YXJuaW5nLWRvbnQtY2FsbC1wcm9wdHlwZXMgJyArICdmb3IgZGV0YWlscy4nLFxuICAgICAgICAgICAgICBwcm9wRnVsbE5hbWUsXG4gICAgICAgICAgICAgIGNvbXBvbmVudE5hbWVcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBtYW51YWxQcm9wVHlwZUNhbGxDYWNoZVtjYWNoZUtleV0gPSB0cnVlO1xuICAgICAgICAgICAgbWFudWFsUHJvcFR5cGVXYXJuaW5nQ291bnQrKztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChwcm9wc1twcm9wTmFtZV0gPT0gbnVsbCkge1xuICAgICAgICBpZiAoaXNSZXF1aXJlZCkge1xuICAgICAgICAgIGlmIChwcm9wc1twcm9wTmFtZV0gPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignVGhlICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBpcyBtYXJrZWQgYXMgcmVxdWlyZWQgJyArICgnaW4gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGJ1dCBpdHMgdmFsdWUgaXMgYG51bGxgLicpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdUaGUgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIGlzIG1hcmtlZCBhcyByZXF1aXJlZCBpbiAnICsgKCdgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgYnV0IGl0cyB2YWx1ZSBpcyBgdW5kZWZpbmVkYC4nKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgY2hhaW5lZENoZWNrVHlwZSA9IGNoZWNrVHlwZS5iaW5kKG51bGwsIGZhbHNlKTtcbiAgICBjaGFpbmVkQ2hlY2tUeXBlLmlzUmVxdWlyZWQgPSBjaGVja1R5cGUuYmluZChudWxsLCB0cnVlKTtcblxuICAgIHJldHVybiBjaGFpbmVkQ2hlY2tUeXBlO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoZXhwZWN0ZWRUeXBlKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lLCBzZWNyZXQpIHtcbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgICAgaWYgKHByb3BUeXBlICE9PSBleHBlY3RlZFR5cGUpIHtcbiAgICAgICAgLy8gYHByb3BWYWx1ZWAgYmVpbmcgaW5zdGFuY2Ugb2YsIHNheSwgZGF0ZS9yZWdleHAsIHBhc3MgdGhlICdvYmplY3QnXG4gICAgICAgIC8vIGNoZWNrLCBidXQgd2UgY2FuIG9mZmVyIGEgbW9yZSBwcmVjaXNlIGVycm9yIG1lc3NhZ2UgaGVyZSByYXRoZXIgdGhhblxuICAgICAgICAvLyAnb2YgdHlwZSBgb2JqZWN0YCcuXG4gICAgICAgIHZhciBwcmVjaXNlVHlwZSA9IGdldFByZWNpc2VUeXBlKHByb3BWYWx1ZSk7XG5cbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlICcgKyAoJ2AnICsgcHJlY2lzZVR5cGUgKyAnYCBzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgJykgKyAoJ2AnICsgZXhwZWN0ZWRUeXBlICsgJ2AuJykpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVBbnlUeXBlQ2hlY2tlcigpIHtcbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIoZW1wdHlGdW5jdGlvbi50aGF0UmV0dXJuc051bGwpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlQXJyYXlPZlR5cGVDaGVja2VyKHR5cGVDaGVja2VyKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICBpZiAodHlwZW9mIHR5cGVDaGVja2VyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignUHJvcGVydHkgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiBjb21wb25lbnQgYCcgKyBjb21wb25lbnROYW1lICsgJ2AgaGFzIGludmFsaWQgUHJvcFR5cGUgbm90YXRpb24gaW5zaWRlIGFycmF5T2YuJyk7XG4gICAgICB9XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHByb3BWYWx1ZSkpIHtcbiAgICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlICcgKyAoJ2AnICsgcHJvcFR5cGUgKyAnYCBzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYW4gYXJyYXkuJykpO1xuICAgICAgfVxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wVmFsdWUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGVycm9yID0gdHlwZUNoZWNrZXIocHJvcFZhbHVlLCBpLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lICsgJ1snICsgaSArICddJywgUmVhY3RQcm9wVHlwZXNTZWNyZXQpO1xuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVFbGVtZW50VHlwZUNoZWNrZXIoKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgaWYgKCFpc1ZhbGlkRWxlbWVudChwcm9wVmFsdWUpKSB7XG4gICAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIHByb3BUeXBlICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGEgc2luZ2xlIFJlYWN0RWxlbWVudC4nKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUluc3RhbmNlVHlwZUNoZWNrZXIoZXhwZWN0ZWRDbGFzcykge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgaWYgKCEocHJvcHNbcHJvcE5hbWVdIGluc3RhbmNlb2YgZXhwZWN0ZWRDbGFzcykpIHtcbiAgICAgICAgdmFyIGV4cGVjdGVkQ2xhc3NOYW1lID0gZXhwZWN0ZWRDbGFzcy5uYW1lIHx8IEFOT05ZTU9VUztcbiAgICAgICAgdmFyIGFjdHVhbENsYXNzTmFtZSA9IGdldENsYXNzTmFtZShwcm9wc1twcm9wTmFtZV0pO1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBhY3R1YWxDbGFzc05hbWUgKyAnYCBzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgJykgKyAoJ2luc3RhbmNlIG9mIGAnICsgZXhwZWN0ZWRDbGFzc05hbWUgKyAnYC4nKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUVudW1UeXBlQ2hlY2tlcihleHBlY3RlZFZhbHVlcykge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShleHBlY3RlZFZhbHVlcykpIHtcbiAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKGZhbHNlLCAnSW52YWxpZCBhcmd1bWVudCBzdXBwbGllZCB0byBvbmVPZiwgZXhwZWN0ZWQgYW4gaW5zdGFuY2Ugb2YgYXJyYXkuJykgOiB2b2lkIDA7XG4gICAgICByZXR1cm4gZW1wdHlGdW5jdGlvbi50aGF0UmV0dXJuc051bGw7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBleHBlY3RlZFZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoaXMocHJvcFZhbHVlLCBleHBlY3RlZFZhbHVlc1tpXSkpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgdmFsdWVzU3RyaW5nID0gSlNPTi5zdHJpbmdpZnkoZXhwZWN0ZWRWYWx1ZXMpO1xuICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB2YWx1ZSBgJyArIHByb3BWYWx1ZSArICdgICcgKyAoJ3N1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBvbmUgb2YgJyArIHZhbHVlc1N0cmluZyArICcuJykpO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlT2JqZWN0T2ZUeXBlQ2hlY2tlcih0eXBlQ2hlY2tlcikge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgaWYgKHR5cGVvZiB0eXBlQ2hlY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ1Byb3BlcnR5IGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgY29tcG9uZW50IGAnICsgY29tcG9uZW50TmFtZSArICdgIGhhcyBpbnZhbGlkIFByb3BUeXBlIG5vdGF0aW9uIGluc2lkZSBvYmplY3RPZi4nKTtcbiAgICAgIH1cbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgICAgaWYgKHByb3BUeXBlICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBwcm9wVHlwZSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBhbiBvYmplY3QuJykpO1xuICAgICAgfVxuICAgICAgZm9yICh2YXIga2V5IGluIHByb3BWYWx1ZSkge1xuICAgICAgICBpZiAocHJvcFZhbHVlLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgICB2YXIgZXJyb3IgPSB0eXBlQ2hlY2tlcihwcm9wVmFsdWUsIGtleSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSArICcuJyArIGtleSwgUmVhY3RQcm9wVHlwZXNTZWNyZXQpO1xuICAgICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZVVuaW9uVHlwZUNoZWNrZXIoYXJyYXlPZlR5cGVDaGVja2Vycykge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShhcnJheU9mVHlwZUNoZWNrZXJzKSkge1xuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcoZmFsc2UsICdJbnZhbGlkIGFyZ3VtZW50IHN1cHBsaWVkIHRvIG9uZU9mVHlwZSwgZXhwZWN0ZWQgYW4gaW5zdGFuY2Ugb2YgYXJyYXkuJykgOiB2b2lkIDA7XG4gICAgICByZXR1cm4gZW1wdHlGdW5jdGlvbi50aGF0UmV0dXJuc051bGw7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheU9mVHlwZUNoZWNrZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgY2hlY2tlciA9IGFycmF5T2ZUeXBlQ2hlY2tlcnNbaV07XG4gICAgICBpZiAodHlwZW9mIGNoZWNrZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgd2FybmluZyhcbiAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAnSW52YWxpZCBhcmd1bWVudCBzdXBwbGlkIHRvIG9uZU9mVHlwZS4gRXhwZWN0ZWQgYW4gYXJyYXkgb2YgY2hlY2sgZnVuY3Rpb25zLCBidXQgJyArXG4gICAgICAgICAgJ3JlY2VpdmVkICVzIGF0IGluZGV4ICVzLicsXG4gICAgICAgICAgZ2V0UG9zdGZpeEZvclR5cGVXYXJuaW5nKGNoZWNrZXIpLFxuICAgICAgICAgIGlcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIGVtcHR5RnVuY3Rpb24udGhhdFJldHVybnNOdWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheU9mVHlwZUNoZWNrZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBjaGVja2VyID0gYXJyYXlPZlR5cGVDaGVja2Vyc1tpXTtcbiAgICAgICAgaWYgKGNoZWNrZXIocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lLCBSZWFjdFByb3BUeXBlc1NlY3JldCkgPT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agc3VwcGxpZWQgdG8gJyArICgnYCcgKyBjb21wb25lbnROYW1lICsgJ2AuJykpO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlTm9kZUNoZWNrZXIoKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICBpZiAoIWlzTm9kZShwcm9wc1twcm9wTmFtZV0pKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agc3VwcGxpZWQgdG8gJyArICgnYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGEgUmVhY3ROb2RlLicpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlU2hhcGVUeXBlQ2hlY2tlcihzaGFwZVR5cGVzKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICAgIGlmIChwcm9wVHlwZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlIGAnICsgcHJvcFR5cGUgKyAnYCAnICsgKCdzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYG9iamVjdGAuJykpO1xuICAgICAgfVxuICAgICAgZm9yICh2YXIga2V5IGluIHNoYXBlVHlwZXMpIHtcbiAgICAgICAgdmFyIGNoZWNrZXIgPSBzaGFwZVR5cGVzW2tleV07XG4gICAgICAgIGlmICghY2hlY2tlcikge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHZhciBlcnJvciA9IGNoZWNrZXIocHJvcFZhbHVlLCBrZXksIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUgKyAnLicgKyBrZXksIFJlYWN0UHJvcFR5cGVzU2VjcmV0KTtcbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzTm9kZShwcm9wVmFsdWUpIHtcbiAgICBzd2l0Y2ggKHR5cGVvZiBwcm9wVmFsdWUpIHtcbiAgICAgIGNhc2UgJ251bWJlcic6XG4gICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgY2FzZSAndW5kZWZpbmVkJzpcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICBjYXNlICdib29sZWFuJzpcbiAgICAgICAgcmV0dXJuICFwcm9wVmFsdWU7XG4gICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShwcm9wVmFsdWUpKSB7XG4gICAgICAgICAgcmV0dXJuIHByb3BWYWx1ZS5ldmVyeShpc05vZGUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcm9wVmFsdWUgPT09IG51bGwgfHwgaXNWYWxpZEVsZW1lbnQocHJvcFZhbHVlKSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGl0ZXJhdG9yRm4gPSBnZXRJdGVyYXRvckZuKHByb3BWYWx1ZSk7XG4gICAgICAgIGlmIChpdGVyYXRvckZuKSB7XG4gICAgICAgICAgdmFyIGl0ZXJhdG9yID0gaXRlcmF0b3JGbi5jYWxsKHByb3BWYWx1ZSk7XG4gICAgICAgICAgdmFyIHN0ZXA7XG4gICAgICAgICAgaWYgKGl0ZXJhdG9yRm4gIT09IHByb3BWYWx1ZS5lbnRyaWVzKSB7XG4gICAgICAgICAgICB3aGlsZSAoIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lKSB7XG4gICAgICAgICAgICAgIGlmICghaXNOb2RlKHN0ZXAudmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIEl0ZXJhdG9yIHdpbGwgcHJvdmlkZSBlbnRyeSBbayx2XSB0dXBsZXMgcmF0aGVyIHRoYW4gdmFsdWVzLlxuICAgICAgICAgICAgd2hpbGUgKCEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZSkge1xuICAgICAgICAgICAgICB2YXIgZW50cnkgPSBzdGVwLnZhbHVlO1xuICAgICAgICAgICAgICBpZiAoZW50cnkpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWlzTm9kZShlbnRyeVsxXSkpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaXNTeW1ib2wocHJvcFR5cGUsIHByb3BWYWx1ZSkge1xuICAgIC8vIE5hdGl2ZSBTeW1ib2wuXG4gICAgaWYgKHByb3BUeXBlID09PSAnc3ltYm9sJykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gMTkuNC4zLjUgU3ltYm9sLnByb3RvdHlwZVtAQHRvU3RyaW5nVGFnXSA9PT0gJ1N5bWJvbCdcbiAgICBpZiAocHJvcFZhbHVlWydAQHRvU3RyaW5nVGFnJ10gPT09ICdTeW1ib2wnKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBGYWxsYmFjayBmb3Igbm9uLXNwZWMgY29tcGxpYW50IFN5bWJvbHMgd2hpY2ggYXJlIHBvbHlmaWxsZWQuXG4gICAgaWYgKHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgcHJvcFZhbHVlIGluc3RhbmNlb2YgU3ltYm9sKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBFcXVpdmFsZW50IG9mIGB0eXBlb2ZgIGJ1dCB3aXRoIHNwZWNpYWwgaGFuZGxpbmcgZm9yIGFycmF5IGFuZCByZWdleHAuXG4gIGZ1bmN0aW9uIGdldFByb3BUeXBlKHByb3BWYWx1ZSkge1xuICAgIHZhciBwcm9wVHlwZSA9IHR5cGVvZiBwcm9wVmFsdWU7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkocHJvcFZhbHVlKSkge1xuICAgICAgcmV0dXJuICdhcnJheSc7XG4gICAgfVxuICAgIGlmIChwcm9wVmFsdWUgaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgIC8vIE9sZCB3ZWJraXRzIChhdCBsZWFzdCB1bnRpbCBBbmRyb2lkIDQuMCkgcmV0dXJuICdmdW5jdGlvbicgcmF0aGVyIHRoYW5cbiAgICAgIC8vICdvYmplY3QnIGZvciB0eXBlb2YgYSBSZWdFeHAuIFdlJ2xsIG5vcm1hbGl6ZSB0aGlzIGhlcmUgc28gdGhhdCAvYmxhL1xuICAgICAgLy8gcGFzc2VzIFByb3BUeXBlcy5vYmplY3QuXG4gICAgICByZXR1cm4gJ29iamVjdCc7XG4gICAgfVxuICAgIGlmIChpc1N5bWJvbChwcm9wVHlwZSwgcHJvcFZhbHVlKSkge1xuICAgICAgcmV0dXJuICdzeW1ib2wnO1xuICAgIH1cbiAgICByZXR1cm4gcHJvcFR5cGU7XG4gIH1cblxuICAvLyBUaGlzIGhhbmRsZXMgbW9yZSB0eXBlcyB0aGFuIGBnZXRQcm9wVHlwZWAuIE9ubHkgdXNlZCBmb3IgZXJyb3IgbWVzc2FnZXMuXG4gIC8vIFNlZSBgY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXJgLlxuICBmdW5jdGlvbiBnZXRQcmVjaXNlVHlwZShwcm9wVmFsdWUpIHtcbiAgICBpZiAodHlwZW9mIHByb3BWYWx1ZSA9PT0gJ3VuZGVmaW5lZCcgfHwgcHJvcFZhbHVlID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gJycgKyBwcm9wVmFsdWU7XG4gICAgfVxuICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XG4gICAgaWYgKHByb3BUeXBlID09PSAnb2JqZWN0Jykge1xuICAgICAgaWYgKHByb3BWYWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgcmV0dXJuICdkYXRlJztcbiAgICAgIH0gZWxzZSBpZiAocHJvcFZhbHVlIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICAgIHJldHVybiAncmVnZXhwJztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHByb3BUeXBlO1xuICB9XG5cbiAgLy8gUmV0dXJucyBhIHN0cmluZyB0aGF0IGlzIHBvc3RmaXhlZCB0byBhIHdhcm5pbmcgYWJvdXQgYW4gaW52YWxpZCB0eXBlLlxuICAvLyBGb3IgZXhhbXBsZSwgXCJ1bmRlZmluZWRcIiBvciBcIm9mIHR5cGUgYXJyYXlcIlxuICBmdW5jdGlvbiBnZXRQb3N0Zml4Rm9yVHlwZVdhcm5pbmcodmFsdWUpIHtcbiAgICB2YXIgdHlwZSA9IGdldFByZWNpc2VUeXBlKHZhbHVlKTtcbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgJ2FycmF5JzpcbiAgICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICAgIHJldHVybiAnYW4gJyArIHR5cGU7XG4gICAgICBjYXNlICdib29sZWFuJzpcbiAgICAgIGNhc2UgJ2RhdGUnOlxuICAgICAgY2FzZSAncmVnZXhwJzpcbiAgICAgICAgcmV0dXJuICdhICcgKyB0eXBlO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHR5cGU7XG4gICAgfVxuICB9XG5cbiAgLy8gUmV0dXJucyBjbGFzcyBuYW1lIG9mIHRoZSBvYmplY3QsIGlmIGFueS5cbiAgZnVuY3Rpb24gZ2V0Q2xhc3NOYW1lKHByb3BWYWx1ZSkge1xuICAgIGlmICghcHJvcFZhbHVlLmNvbnN0cnVjdG9yIHx8ICFwcm9wVmFsdWUuY29uc3RydWN0b3IubmFtZSkge1xuICAgICAgcmV0dXJuIEFOT05ZTU9VUztcbiAgICB9XG4gICAgcmV0dXJuIHByb3BWYWx1ZS5jb25zdHJ1Y3Rvci5uYW1lO1xuICB9XG5cbiAgUmVhY3RQcm9wVHlwZXMuY2hlY2tQcm9wVHlwZXMgPSBjaGVja1Byb3BUeXBlcztcbiAgUmVhY3RQcm9wVHlwZXMuUHJvcFR5cGVzID0gUmVhY3RQcm9wVHlwZXM7XG5cbiAgcmV0dXJuIFJlYWN0UHJvcFR5cGVzO1xufTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcHJvcC10eXBlcy9mYWN0b3J5V2l0aFR5cGVDaGVja2Vycy5qcyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbi8qKlxuICogQ1NTIHByb3BlcnRpZXMgd2hpY2ggYWNjZXB0IG51bWJlcnMgYnV0IGFyZSBub3QgaW4gdW5pdHMgb2YgXCJweFwiLlxuICovXG5cbnZhciBpc1VuaXRsZXNzTnVtYmVyID0ge1xuICBhbmltYXRpb25JdGVyYXRpb25Db3VudDogdHJ1ZSxcbiAgYm9yZGVySW1hZ2VPdXRzZXQ6IHRydWUsXG4gIGJvcmRlckltYWdlU2xpY2U6IHRydWUsXG4gIGJvcmRlckltYWdlV2lkdGg6IHRydWUsXG4gIGJveEZsZXg6IHRydWUsXG4gIGJveEZsZXhHcm91cDogdHJ1ZSxcbiAgYm94T3JkaW5hbEdyb3VwOiB0cnVlLFxuICBjb2x1bW5Db3VudDogdHJ1ZSxcbiAgZmxleDogdHJ1ZSxcbiAgZmxleEdyb3c6IHRydWUsXG4gIGZsZXhQb3NpdGl2ZTogdHJ1ZSxcbiAgZmxleFNocmluazogdHJ1ZSxcbiAgZmxleE5lZ2F0aXZlOiB0cnVlLFxuICBmbGV4T3JkZXI6IHRydWUsXG4gIGdyaWRSb3c6IHRydWUsXG4gIGdyaWRSb3dFbmQ6IHRydWUsXG4gIGdyaWRSb3dTcGFuOiB0cnVlLFxuICBncmlkUm93U3RhcnQ6IHRydWUsXG4gIGdyaWRDb2x1bW46IHRydWUsXG4gIGdyaWRDb2x1bW5FbmQ6IHRydWUsXG4gIGdyaWRDb2x1bW5TcGFuOiB0cnVlLFxuICBncmlkQ29sdW1uU3RhcnQ6IHRydWUsXG4gIGZvbnRXZWlnaHQ6IHRydWUsXG4gIGxpbmVDbGFtcDogdHJ1ZSxcbiAgbGluZUhlaWdodDogdHJ1ZSxcbiAgb3BhY2l0eTogdHJ1ZSxcbiAgb3JkZXI6IHRydWUsXG4gIG9ycGhhbnM6IHRydWUsXG4gIHRhYlNpemU6IHRydWUsXG4gIHdpZG93czogdHJ1ZSxcbiAgekluZGV4OiB0cnVlLFxuICB6b29tOiB0cnVlLFxuXG4gIC8vIFNWRy1yZWxhdGVkIHByb3BlcnRpZXNcbiAgZmlsbE9wYWNpdHk6IHRydWUsXG4gIGZsb29kT3BhY2l0eTogdHJ1ZSxcbiAgc3RvcE9wYWNpdHk6IHRydWUsXG4gIHN0cm9rZURhc2hhcnJheTogdHJ1ZSxcbiAgc3Ryb2tlRGFzaG9mZnNldDogdHJ1ZSxcbiAgc3Ryb2tlTWl0ZXJsaW1pdDogdHJ1ZSxcbiAgc3Ryb2tlT3BhY2l0eTogdHJ1ZSxcbiAgc3Ryb2tlV2lkdGg6IHRydWVcbn07XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHByZWZpeCB2ZW5kb3Itc3BlY2lmaWMgcHJlZml4LCBlZzogV2Via2l0XG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IHN0eWxlIG5hbWUsIGVnOiB0cmFuc2l0aW9uRHVyYXRpb25cbiAqIEByZXR1cm4ge3N0cmluZ30gc3R5bGUgbmFtZSBwcmVmaXhlZCB3aXRoIGBwcmVmaXhgLCBwcm9wZXJseSBjYW1lbENhc2VkLCBlZzpcbiAqIFdlYmtpdFRyYW5zaXRpb25EdXJhdGlvblxuICovXG5mdW5jdGlvbiBwcmVmaXhLZXkocHJlZml4LCBrZXkpIHtcbiAgcmV0dXJuIHByZWZpeCArIGtleS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIGtleS5zdWJzdHJpbmcoMSk7XG59XG5cbi8qKlxuICogU3VwcG9ydCBzdHlsZSBuYW1lcyB0aGF0IG1heSBjb21lIHBhc3NlZCBpbiBwcmVmaXhlZCBieSBhZGRpbmcgcGVybXV0YXRpb25zXG4gKiBvZiB2ZW5kb3IgcHJlZml4ZXMuXG4gKi9cbnZhciBwcmVmaXhlcyA9IFsnV2Via2l0JywgJ21zJywgJ01veicsICdPJ107XG5cbi8vIFVzaW5nIE9iamVjdC5rZXlzIGhlcmUsIG9yIGVsc2UgdGhlIHZhbmlsbGEgZm9yLWluIGxvb3AgbWFrZXMgSUU4IGdvIGludG8gYW5cbi8vIGluZmluaXRlIGxvb3AsIGJlY2F1c2UgaXQgaXRlcmF0ZXMgb3ZlciB0aGUgbmV3bHkgYWRkZWQgcHJvcHMgdG9vLlxuT2JqZWN0LmtleXMoaXNVbml0bGVzc051bWJlcikuZm9yRWFjaChmdW5jdGlvbiAocHJvcCkge1xuICBwcmVmaXhlcy5mb3JFYWNoKGZ1bmN0aW9uIChwcmVmaXgpIHtcbiAgICBpc1VuaXRsZXNzTnVtYmVyW3ByZWZpeEtleShwcmVmaXgsIHByb3ApXSA9IGlzVW5pdGxlc3NOdW1iZXJbcHJvcF07XG4gIH0pO1xufSk7XG5cbi8qKlxuICogTW9zdCBzdHlsZSBwcm9wZXJ0aWVzIGNhbiBiZSB1bnNldCBieSBkb2luZyAuc3R5bGVbcHJvcF0gPSAnJyBidXQgSUU4XG4gKiBkb2Vzbid0IGxpa2UgZG9pbmcgdGhhdCB3aXRoIHNob3J0aGFuZCBwcm9wZXJ0aWVzIHNvIGZvciB0aGUgcHJvcGVydGllcyB0aGF0XG4gKiBJRTggYnJlYWtzIG9uLCB3aGljaCBhcmUgbGlzdGVkIGhlcmUsIHdlIGluc3RlYWQgdW5zZXQgZWFjaCBvZiB0aGVcbiAqIGluZGl2aWR1YWwgcHJvcGVydGllcy4gU2VlIGh0dHA6Ly9idWdzLmpxdWVyeS5jb20vdGlja2V0LzEyMzg1LlxuICogVGhlIDQtdmFsdWUgJ2Nsb2NrJyBwcm9wZXJ0aWVzIGxpa2UgbWFyZ2luLCBwYWRkaW5nLCBib3JkZXItd2lkdGggc2VlbSB0b1xuICogYmVoYXZlIHdpdGhvdXQgYW55IHByb2JsZW1zLiBDdXJpb3VzbHksIGxpc3Qtc3R5bGUgd29ya3MgdG9vIHdpdGhvdXQgYW55XG4gKiBzcGVjaWFsIHByb2RkaW5nLlxuICovXG52YXIgc2hvcnRoYW5kUHJvcGVydHlFeHBhbnNpb25zID0ge1xuICBiYWNrZ3JvdW5kOiB7XG4gICAgYmFja2dyb3VuZEF0dGFjaG1lbnQ6IHRydWUsXG4gICAgYmFja2dyb3VuZENvbG9yOiB0cnVlLFxuICAgIGJhY2tncm91bmRJbWFnZTogdHJ1ZSxcbiAgICBiYWNrZ3JvdW5kUG9zaXRpb25YOiB0cnVlLFxuICAgIGJhY2tncm91bmRQb3NpdGlvblk6IHRydWUsXG4gICAgYmFja2dyb3VuZFJlcGVhdDogdHJ1ZVxuICB9LFxuICBiYWNrZ3JvdW5kUG9zaXRpb246IHtcbiAgICBiYWNrZ3JvdW5kUG9zaXRpb25YOiB0cnVlLFxuICAgIGJhY2tncm91bmRQb3NpdGlvblk6IHRydWVcbiAgfSxcbiAgYm9yZGVyOiB7XG4gICAgYm9yZGVyV2lkdGg6IHRydWUsXG4gICAgYm9yZGVyU3R5bGU6IHRydWUsXG4gICAgYm9yZGVyQ29sb3I6IHRydWVcbiAgfSxcbiAgYm9yZGVyQm90dG9tOiB7XG4gICAgYm9yZGVyQm90dG9tV2lkdGg6IHRydWUsXG4gICAgYm9yZGVyQm90dG9tU3R5bGU6IHRydWUsXG4gICAgYm9yZGVyQm90dG9tQ29sb3I6IHRydWVcbiAgfSxcbiAgYm9yZGVyTGVmdDoge1xuICAgIGJvcmRlckxlZnRXaWR0aDogdHJ1ZSxcbiAgICBib3JkZXJMZWZ0U3R5bGU6IHRydWUsXG4gICAgYm9yZGVyTGVmdENvbG9yOiB0cnVlXG4gIH0sXG4gIGJvcmRlclJpZ2h0OiB7XG4gICAgYm9yZGVyUmlnaHRXaWR0aDogdHJ1ZSxcbiAgICBib3JkZXJSaWdodFN0eWxlOiB0cnVlLFxuICAgIGJvcmRlclJpZ2h0Q29sb3I6IHRydWVcbiAgfSxcbiAgYm9yZGVyVG9wOiB7XG4gICAgYm9yZGVyVG9wV2lkdGg6IHRydWUsXG4gICAgYm9yZGVyVG9wU3R5bGU6IHRydWUsXG4gICAgYm9yZGVyVG9wQ29sb3I6IHRydWVcbiAgfSxcbiAgZm9udDoge1xuICAgIGZvbnRTdHlsZTogdHJ1ZSxcbiAgICBmb250VmFyaWFudDogdHJ1ZSxcbiAgICBmb250V2VpZ2h0OiB0cnVlLFxuICAgIGZvbnRTaXplOiB0cnVlLFxuICAgIGxpbmVIZWlnaHQ6IHRydWUsXG4gICAgZm9udEZhbWlseTogdHJ1ZVxuICB9LFxuICBvdXRsaW5lOiB7XG4gICAgb3V0bGluZVdpZHRoOiB0cnVlLFxuICAgIG91dGxpbmVTdHlsZTogdHJ1ZSxcbiAgICBvdXRsaW5lQ29sb3I6IHRydWVcbiAgfVxufTtcblxudmFyIENTU1Byb3BlcnR5ID0ge1xuICBpc1VuaXRsZXNzTnVtYmVyOiBpc1VuaXRsZXNzTnVtYmVyLFxuICBzaG9ydGhhbmRQcm9wZXJ0eUV4cGFuc2lvbnM6IHNob3J0aGFuZFByb3BlcnR5RXhwYW5zaW9uc1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBDU1NQcm9wZXJ0eTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3JlYWN0LWRvbS9saWIvQ1NTUHJvcGVydHkuanMiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBfcHJvZEludmFyaWFudCA9IHJlcXVpcmUoJy4vcmVhY3RQcm9kSW52YXJpYW50Jyk7XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbnZhciBQb29sZWRDbGFzcyA9IHJlcXVpcmUoJy4vUG9vbGVkQ2xhc3MnKTtcblxudmFyIGludmFyaWFudCA9IHJlcXVpcmUoJ2ZianMvbGliL2ludmFyaWFudCcpO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgcHNldWRvLWV2ZW50IG1vZHVsZSB0byBoZWxwIGtlZXAgdHJhY2sgb2YgY29tcG9uZW50cyB3YWl0aW5nIHRvXG4gKiBiZSBub3RpZmllZCB3aGVuIHRoZWlyIERPTSByZXByZXNlbnRhdGlvbnMgYXJlIGF2YWlsYWJsZSBmb3IgdXNlLlxuICpcbiAqIFRoaXMgaW1wbGVtZW50cyBgUG9vbGVkQ2xhc3NgLCBzbyB5b3Ugc2hvdWxkIG5ldmVyIG5lZWQgdG8gaW5zdGFudGlhdGUgdGhpcy5cbiAqIEluc3RlYWQsIHVzZSBgQ2FsbGJhY2tRdWV1ZS5nZXRQb29sZWQoKWAuXG4gKlxuICogQGNsYXNzIFJlYWN0TW91bnRSZWFkeVxuICogQGltcGxlbWVudHMgUG9vbGVkQ2xhc3NcbiAqIEBpbnRlcm5hbFxuICovXG5cbnZhciBDYWxsYmFja1F1ZXVlID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBDYWxsYmFja1F1ZXVlKGFyZykge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBDYWxsYmFja1F1ZXVlKTtcblxuICAgIHRoaXMuX2NhbGxiYWNrcyA9IG51bGw7XG4gICAgdGhpcy5fY29udGV4dHMgPSBudWxsO1xuICAgIHRoaXMuX2FyZyA9IGFyZztcbiAgfVxuXG4gIC8qKlxuICAgKiBFbnF1ZXVlcyBhIGNhbGxiYWNrIHRvIGJlIGludm9rZWQgd2hlbiBgbm90aWZ5QWxsYCBpcyBpbnZva2VkLlxuICAgKlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayBJbnZva2VkIHdoZW4gYG5vdGlmeUFsbGAgaXMgaW52b2tlZC5cbiAgICogQHBhcmFtIHs/b2JqZWN0fSBjb250ZXh0IENvbnRleHQgdG8gY2FsbCBgY2FsbGJhY2tgIHdpdGguXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cblxuXG4gIENhbGxiYWNrUXVldWUucHJvdG90eXBlLmVucXVldWUgPSBmdW5jdGlvbiBlbnF1ZXVlKGNhbGxiYWNrLCBjb250ZXh0KSB7XG4gICAgdGhpcy5fY2FsbGJhY2tzID0gdGhpcy5fY2FsbGJhY2tzIHx8IFtdO1xuICAgIHRoaXMuX2NhbGxiYWNrcy5wdXNoKGNhbGxiYWNrKTtcbiAgICB0aGlzLl9jb250ZXh0cyA9IHRoaXMuX2NvbnRleHRzIHx8IFtdO1xuICAgIHRoaXMuX2NvbnRleHRzLnB1c2goY29udGV4dCk7XG4gIH07XG5cbiAgLyoqXG4gICAqIEludm9rZXMgYWxsIGVucXVldWVkIGNhbGxiYWNrcyBhbmQgY2xlYXJzIHRoZSBxdWV1ZS4gVGhpcyBpcyBpbnZva2VkIGFmdGVyXG4gICAqIHRoZSBET00gcmVwcmVzZW50YXRpb24gb2YgYSBjb21wb25lbnQgaGFzIGJlZW4gY3JlYXRlZCBvciB1cGRhdGVkLlxuICAgKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG5cblxuICBDYWxsYmFja1F1ZXVlLnByb3RvdHlwZS5ub3RpZnlBbGwgPSBmdW5jdGlvbiBub3RpZnlBbGwoKSB7XG4gICAgdmFyIGNhbGxiYWNrcyA9IHRoaXMuX2NhbGxiYWNrcztcbiAgICB2YXIgY29udGV4dHMgPSB0aGlzLl9jb250ZXh0cztcbiAgICB2YXIgYXJnID0gdGhpcy5fYXJnO1xuICAgIGlmIChjYWxsYmFja3MgJiYgY29udGV4dHMpIHtcbiAgICAgICEoY2FsbGJhY2tzLmxlbmd0aCA9PT0gY29udGV4dHMubGVuZ3RoKSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICdNaXNtYXRjaGVkIGxpc3Qgb2YgY29udGV4dHMgaW4gY2FsbGJhY2sgcXVldWUnKSA6IF9wcm9kSW52YXJpYW50KCcyNCcpIDogdm9pZCAwO1xuICAgICAgdGhpcy5fY2FsbGJhY2tzID0gbnVsbDtcbiAgICAgIHRoaXMuX2NvbnRleHRzID0gbnVsbDtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2FsbGJhY2tzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNhbGxiYWNrc1tpXS5jYWxsKGNvbnRleHRzW2ldLCBhcmcpO1xuICAgICAgfVxuICAgICAgY2FsbGJhY2tzLmxlbmd0aCA9IDA7XG4gICAgICBjb250ZXh0cy5sZW5ndGggPSAwO1xuICAgIH1cbiAgfTtcblxuICBDYWxsYmFja1F1ZXVlLnByb3RvdHlwZS5jaGVja3BvaW50ID0gZnVuY3Rpb24gY2hlY2twb2ludCgpIHtcbiAgICByZXR1cm4gdGhpcy5fY2FsbGJhY2tzID8gdGhpcy5fY2FsbGJhY2tzLmxlbmd0aCA6IDA7XG4gIH07XG5cbiAgQ2FsbGJhY2tRdWV1ZS5wcm90b3R5cGUucm9sbGJhY2sgPSBmdW5jdGlvbiByb2xsYmFjayhsZW4pIHtcbiAgICBpZiAodGhpcy5fY2FsbGJhY2tzICYmIHRoaXMuX2NvbnRleHRzKSB7XG4gICAgICB0aGlzLl9jYWxsYmFja3MubGVuZ3RoID0gbGVuO1xuICAgICAgdGhpcy5fY29udGV4dHMubGVuZ3RoID0gbGVuO1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogUmVzZXRzIHRoZSBpbnRlcm5hbCBxdWV1ZS5cbiAgICpcbiAgICogQGludGVybmFsXG4gICAqL1xuXG5cbiAgQ2FsbGJhY2tRdWV1ZS5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiByZXNldCgpIHtcbiAgICB0aGlzLl9jYWxsYmFja3MgPSBudWxsO1xuICAgIHRoaXMuX2NvbnRleHRzID0gbnVsbDtcbiAgfTtcblxuICAvKipcbiAgICogYFBvb2xlZENsYXNzYCBsb29rcyBmb3IgdGhpcy5cbiAgICovXG5cblxuICBDYWxsYmFja1F1ZXVlLnByb3RvdHlwZS5kZXN0cnVjdG9yID0gZnVuY3Rpb24gZGVzdHJ1Y3RvcigpIHtcbiAgICB0aGlzLnJlc2V0KCk7XG4gIH07XG5cbiAgcmV0dXJuIENhbGxiYWNrUXVldWU7XG59KCk7XG5cbm1vZHVsZS5leHBvcnRzID0gUG9vbGVkQ2xhc3MuYWRkUG9vbGluZ1RvKENhbGxiYWNrUXVldWUpO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QtZG9tL2xpYi9DYWxsYmFja1F1ZXVlLmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIERPTVByb3BlcnR5ID0gcmVxdWlyZSgnLi9ET01Qcm9wZXJ0eScpO1xudmFyIFJlYWN0RE9NQ29tcG9uZW50VHJlZSA9IHJlcXVpcmUoJy4vUmVhY3RET01Db21wb25lbnRUcmVlJyk7XG52YXIgUmVhY3RJbnN0cnVtZW50YXRpb24gPSByZXF1aXJlKCcuL1JlYWN0SW5zdHJ1bWVudGF0aW9uJyk7XG5cbnZhciBxdW90ZUF0dHJpYnV0ZVZhbHVlRm9yQnJvd3NlciA9IHJlcXVpcmUoJy4vcXVvdGVBdHRyaWJ1dGVWYWx1ZUZvckJyb3dzZXInKTtcbnZhciB3YXJuaW5nID0gcmVxdWlyZSgnZmJqcy9saWIvd2FybmluZycpO1xuXG52YXIgVkFMSURfQVRUUklCVVRFX05BTUVfUkVHRVggPSBuZXcgUmVnRXhwKCdeWycgKyBET01Qcm9wZXJ0eS5BVFRSSUJVVEVfTkFNRV9TVEFSVF9DSEFSICsgJ11bJyArIERPTVByb3BlcnR5LkFUVFJJQlVURV9OQU1FX0NIQVIgKyAnXSokJyk7XG52YXIgaWxsZWdhbEF0dHJpYnV0ZU5hbWVDYWNoZSA9IHt9O1xudmFyIHZhbGlkYXRlZEF0dHJpYnV0ZU5hbWVDYWNoZSA9IHt9O1xuXG5mdW5jdGlvbiBpc0F0dHJpYnV0ZU5hbWVTYWZlKGF0dHJpYnV0ZU5hbWUpIHtcbiAgaWYgKHZhbGlkYXRlZEF0dHJpYnV0ZU5hbWVDYWNoZS5oYXNPd25Qcm9wZXJ0eShhdHRyaWJ1dGVOYW1lKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmIChpbGxlZ2FsQXR0cmlidXRlTmFtZUNhY2hlLmhhc093blByb3BlcnR5KGF0dHJpYnV0ZU5hbWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChWQUxJRF9BVFRSSUJVVEVfTkFNRV9SRUdFWC50ZXN0KGF0dHJpYnV0ZU5hbWUpKSB7XG4gICAgdmFsaWRhdGVkQXR0cmlidXRlTmFtZUNhY2hlW2F0dHJpYnV0ZU5hbWVdID0gdHJ1ZTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpbGxlZ2FsQXR0cmlidXRlTmFtZUNhY2hlW2F0dHJpYnV0ZU5hbWVdID0gdHJ1ZTtcbiAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcoZmFsc2UsICdJbnZhbGlkIGF0dHJpYnV0ZSBuYW1lOiBgJXNgJywgYXR0cmlidXRlTmFtZSkgOiB2b2lkIDA7XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gc2hvdWxkSWdub3JlVmFsdWUocHJvcGVydHlJbmZvLCB2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgPT0gbnVsbCB8fCBwcm9wZXJ0eUluZm8uaGFzQm9vbGVhblZhbHVlICYmICF2YWx1ZSB8fCBwcm9wZXJ0eUluZm8uaGFzTnVtZXJpY1ZhbHVlICYmIGlzTmFOKHZhbHVlKSB8fCBwcm9wZXJ0eUluZm8uaGFzUG9zaXRpdmVOdW1lcmljVmFsdWUgJiYgdmFsdWUgPCAxIHx8IHByb3BlcnR5SW5mby5oYXNPdmVybG9hZGVkQm9vbGVhblZhbHVlICYmIHZhbHVlID09PSBmYWxzZTtcbn1cblxuLyoqXG4gKiBPcGVyYXRpb25zIGZvciBkZWFsaW5nIHdpdGggRE9NIHByb3BlcnRpZXMuXG4gKi9cbnZhciBET01Qcm9wZXJ0eU9wZXJhdGlvbnMgPSB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIG1hcmt1cCBmb3IgdGhlIElEIHByb3BlcnR5LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gaWQgVW5lc2NhcGVkIElELlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9IE1hcmt1cCBzdHJpbmcuXG4gICAqL1xuICBjcmVhdGVNYXJrdXBGb3JJRDogZnVuY3Rpb24gKGlkKSB7XG4gICAgcmV0dXJuIERPTVByb3BlcnR5LklEX0FUVFJJQlVURV9OQU1FICsgJz0nICsgcXVvdGVBdHRyaWJ1dGVWYWx1ZUZvckJyb3dzZXIoaWQpO1xuICB9LFxuXG4gIHNldEF0dHJpYnV0ZUZvcklEOiBmdW5jdGlvbiAobm9kZSwgaWQpIHtcbiAgICBub2RlLnNldEF0dHJpYnV0ZShET01Qcm9wZXJ0eS5JRF9BVFRSSUJVVEVfTkFNRSwgaWQpO1xuICB9LFxuXG4gIGNyZWF0ZU1hcmt1cEZvclJvb3Q6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gRE9NUHJvcGVydHkuUk9PVF9BVFRSSUJVVEVfTkFNRSArICc9XCJcIic7XG4gIH0sXG5cbiAgc2V0QXR0cmlidXRlRm9yUm9vdDogZnVuY3Rpb24gKG5vZGUpIHtcbiAgICBub2RlLnNldEF0dHJpYnV0ZShET01Qcm9wZXJ0eS5ST09UX0FUVFJJQlVURV9OQU1FLCAnJyk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgbWFya3VwIGZvciBhIHByb3BlcnR5LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICAgKiBAcGFyYW0geyp9IHZhbHVlXG4gICAqIEByZXR1cm4gez9zdHJpbmd9IE1hcmt1cCBzdHJpbmcsIG9yIG51bGwgaWYgdGhlIHByb3BlcnR5IHdhcyBpbnZhbGlkLlxuICAgKi9cbiAgY3JlYXRlTWFya3VwRm9yUHJvcGVydHk6IGZ1bmN0aW9uIChuYW1lLCB2YWx1ZSkge1xuICAgIHZhciBwcm9wZXJ0eUluZm8gPSBET01Qcm9wZXJ0eS5wcm9wZXJ0aWVzLmhhc093blByb3BlcnR5KG5hbWUpID8gRE9NUHJvcGVydHkucHJvcGVydGllc1tuYW1lXSA6IG51bGw7XG4gICAgaWYgKHByb3BlcnR5SW5mbykge1xuICAgICAgaWYgKHNob3VsZElnbm9yZVZhbHVlKHByb3BlcnR5SW5mbywgdmFsdWUpKSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICAgIH1cbiAgICAgIHZhciBhdHRyaWJ1dGVOYW1lID0gcHJvcGVydHlJbmZvLmF0dHJpYnV0ZU5hbWU7XG4gICAgICBpZiAocHJvcGVydHlJbmZvLmhhc0Jvb2xlYW5WYWx1ZSB8fCBwcm9wZXJ0eUluZm8uaGFzT3ZlcmxvYWRlZEJvb2xlYW5WYWx1ZSAmJiB2YWx1ZSA9PT0gdHJ1ZSkge1xuICAgICAgICByZXR1cm4gYXR0cmlidXRlTmFtZSArICc9XCJcIic7XG4gICAgICB9XG4gICAgICByZXR1cm4gYXR0cmlidXRlTmFtZSArICc9JyArIHF1b3RlQXR0cmlidXRlVmFsdWVGb3JCcm93c2VyKHZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKERPTVByb3BlcnR5LmlzQ3VzdG9tQXR0cmlidXRlKG5hbWUpKSB7XG4gICAgICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgICB9XG4gICAgICByZXR1cm4gbmFtZSArICc9JyArIHF1b3RlQXR0cmlidXRlVmFsdWVGb3JCcm93c2VyKHZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH0sXG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgbWFya3VwIGZvciBhIGN1c3RvbSBwcm9wZXJ0eS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICogQHBhcmFtIHsqfSB2YWx1ZVxuICAgKiBAcmV0dXJuIHtzdHJpbmd9IE1hcmt1cCBzdHJpbmcsIG9yIGVtcHR5IHN0cmluZyBpZiB0aGUgcHJvcGVydHkgd2FzIGludmFsaWQuXG4gICAqL1xuICBjcmVhdGVNYXJrdXBGb3JDdXN0b21BdHRyaWJ1dGU6IGZ1bmN0aW9uIChuYW1lLCB2YWx1ZSkge1xuICAgIGlmICghaXNBdHRyaWJ1dGVOYW1lU2FmZShuYW1lKSB8fCB2YWx1ZSA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIHJldHVybiBuYW1lICsgJz0nICsgcXVvdGVBdHRyaWJ1dGVWYWx1ZUZvckJyb3dzZXIodmFsdWUpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSB2YWx1ZSBmb3IgYSBwcm9wZXJ0eSBvbiBhIG5vZGUuXG4gICAqXG4gICAqIEBwYXJhbSB7RE9NRWxlbWVudH0gbm9kZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICAgKiBAcGFyYW0geyp9IHZhbHVlXG4gICAqL1xuICBzZXRWYWx1ZUZvclByb3BlcnR5OiBmdW5jdGlvbiAobm9kZSwgbmFtZSwgdmFsdWUpIHtcbiAgICB2YXIgcHJvcGVydHlJbmZvID0gRE9NUHJvcGVydHkucHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eShuYW1lKSA/IERPTVByb3BlcnR5LnByb3BlcnRpZXNbbmFtZV0gOiBudWxsO1xuICAgIGlmIChwcm9wZXJ0eUluZm8pIHtcbiAgICAgIHZhciBtdXRhdGlvbk1ldGhvZCA9IHByb3BlcnR5SW5mby5tdXRhdGlvbk1ldGhvZDtcbiAgICAgIGlmIChtdXRhdGlvbk1ldGhvZCkge1xuICAgICAgICBtdXRhdGlvbk1ldGhvZChub2RlLCB2YWx1ZSk7XG4gICAgICB9IGVsc2UgaWYgKHNob3VsZElnbm9yZVZhbHVlKHByb3BlcnR5SW5mbywgdmFsdWUpKSB7XG4gICAgICAgIHRoaXMuZGVsZXRlVmFsdWVGb3JQcm9wZXJ0eShub2RlLCBuYW1lKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSBlbHNlIGlmIChwcm9wZXJ0eUluZm8ubXVzdFVzZVByb3BlcnR5KSB7XG4gICAgICAgIC8vIENvbnRyYXJ5IHRvIGBzZXRBdHRyaWJ1dGVgLCBvYmplY3QgcHJvcGVydGllcyBhcmUgcHJvcGVybHlcbiAgICAgICAgLy8gYHRvU3RyaW5nYGVkIGJ5IElFOC85LlxuICAgICAgICBub2RlW3Byb3BlcnR5SW5mby5wcm9wZXJ0eU5hbWVdID0gdmFsdWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgYXR0cmlidXRlTmFtZSA9IHByb3BlcnR5SW5mby5hdHRyaWJ1dGVOYW1lO1xuICAgICAgICB2YXIgbmFtZXNwYWNlID0gcHJvcGVydHlJbmZvLmF0dHJpYnV0ZU5hbWVzcGFjZTtcbiAgICAgICAgLy8gYHNldEF0dHJpYnV0ZWAgd2l0aCBvYmplY3RzIGJlY29tZXMgb25seSBgW29iamVjdF1gIGluIElFOC85LFxuICAgICAgICAvLyAoJycgKyB2YWx1ZSkgbWFrZXMgaXQgb3V0cHV0IHRoZSBjb3JyZWN0IHRvU3RyaW5nKCktdmFsdWUuXG4gICAgICAgIGlmIChuYW1lc3BhY2UpIHtcbiAgICAgICAgICBub2RlLnNldEF0dHJpYnV0ZU5TKG5hbWVzcGFjZSwgYXR0cmlidXRlTmFtZSwgJycgKyB2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAocHJvcGVydHlJbmZvLmhhc0Jvb2xlYW5WYWx1ZSB8fCBwcm9wZXJ0eUluZm8uaGFzT3ZlcmxvYWRlZEJvb2xlYW5WYWx1ZSAmJiB2YWx1ZSA9PT0gdHJ1ZSkge1xuICAgICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUsICcnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBub2RlLnNldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lLCAnJyArIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoRE9NUHJvcGVydHkuaXNDdXN0b21BdHRyaWJ1dGUobmFtZSkpIHtcbiAgICAgIERPTVByb3BlcnR5T3BlcmF0aW9ucy5zZXRWYWx1ZUZvckF0dHJpYnV0ZShub2RlLCBuYW1lLCB2YWx1ZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIHZhciBwYXlsb2FkID0ge307XG4gICAgICBwYXlsb2FkW25hbWVdID0gdmFsdWU7XG4gICAgICBSZWFjdEluc3RydW1lbnRhdGlvbi5kZWJ1Z1Rvb2wub25Ib3N0T3BlcmF0aW9uKHtcbiAgICAgICAgaW5zdGFuY2VJRDogUmVhY3RET01Db21wb25lbnRUcmVlLmdldEluc3RhbmNlRnJvbU5vZGUobm9kZSkuX2RlYnVnSUQsXG4gICAgICAgIHR5cGU6ICd1cGRhdGUgYXR0cmlidXRlJyxcbiAgICAgICAgcGF5bG9hZDogcGF5bG9hZFxuICAgICAgfSk7XG4gICAgfVxuICB9LFxuXG4gIHNldFZhbHVlRm9yQXR0cmlidXRlOiBmdW5jdGlvbiAobm9kZSwgbmFtZSwgdmFsdWUpIHtcbiAgICBpZiAoIWlzQXR0cmlidXRlTmFtZVNhZmUobmFtZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICAgIG5vZGUucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBub2RlLnNldEF0dHJpYnV0ZShuYW1lLCAnJyArIHZhbHVlKTtcbiAgICB9XG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgdmFyIHBheWxvYWQgPSB7fTtcbiAgICAgIHBheWxvYWRbbmFtZV0gPSB2YWx1ZTtcbiAgICAgIFJlYWN0SW5zdHJ1bWVudGF0aW9uLmRlYnVnVG9vbC5vbkhvc3RPcGVyYXRpb24oe1xuICAgICAgICBpbnN0YW5jZUlEOiBSZWFjdERPTUNvbXBvbmVudFRyZWUuZ2V0SW5zdGFuY2VGcm9tTm9kZShub2RlKS5fZGVidWdJRCxcbiAgICAgICAgdHlwZTogJ3VwZGF0ZSBhdHRyaWJ1dGUnLFxuICAgICAgICBwYXlsb2FkOiBwYXlsb2FkXG4gICAgICB9KTtcbiAgICB9XG4gIH0sXG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgYW4gYXR0cmlidXRlcyBmcm9tIGEgbm9kZS5cbiAgICpcbiAgICogQHBhcmFtIHtET01FbGVtZW50fSBub2RlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gICAqL1xuICBkZWxldGVWYWx1ZUZvckF0dHJpYnV0ZTogZnVuY3Rpb24gKG5vZGUsIG5hbWUpIHtcbiAgICBub2RlLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgUmVhY3RJbnN0cnVtZW50YXRpb24uZGVidWdUb29sLm9uSG9zdE9wZXJhdGlvbih7XG4gICAgICAgIGluc3RhbmNlSUQ6IFJlYWN0RE9NQ29tcG9uZW50VHJlZS5nZXRJbnN0YW5jZUZyb21Ob2RlKG5vZGUpLl9kZWJ1Z0lELFxuICAgICAgICB0eXBlOiAncmVtb3ZlIGF0dHJpYnV0ZScsXG4gICAgICAgIHBheWxvYWQ6IG5hbWVcbiAgICAgIH0pO1xuICAgIH1cbiAgfSxcblxuICAvKipcbiAgICogRGVsZXRlcyB0aGUgdmFsdWUgZm9yIGEgcHJvcGVydHkgb24gYSBub2RlLlxuICAgKlxuICAgKiBAcGFyYW0ge0RPTUVsZW1lbnR9IG5vZGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICovXG4gIGRlbGV0ZVZhbHVlRm9yUHJvcGVydHk6IGZ1bmN0aW9uIChub2RlLCBuYW1lKSB7XG4gICAgdmFyIHByb3BlcnR5SW5mbyA9IERPTVByb3BlcnR5LnByb3BlcnRpZXMuaGFzT3duUHJvcGVydHkobmFtZSkgPyBET01Qcm9wZXJ0eS5wcm9wZXJ0aWVzW25hbWVdIDogbnVsbDtcbiAgICBpZiAocHJvcGVydHlJbmZvKSB7XG4gICAgICB2YXIgbXV0YXRpb25NZXRob2QgPSBwcm9wZXJ0eUluZm8ubXV0YXRpb25NZXRob2Q7XG4gICAgICBpZiAobXV0YXRpb25NZXRob2QpIHtcbiAgICAgICAgbXV0YXRpb25NZXRob2Qobm9kZSwgdW5kZWZpbmVkKTtcbiAgICAgIH0gZWxzZSBpZiAocHJvcGVydHlJbmZvLm11c3RVc2VQcm9wZXJ0eSkge1xuICAgICAgICB2YXIgcHJvcE5hbWUgPSBwcm9wZXJ0eUluZm8ucHJvcGVydHlOYW1lO1xuICAgICAgICBpZiAocHJvcGVydHlJbmZvLmhhc0Jvb2xlYW5WYWx1ZSkge1xuICAgICAgICAgIG5vZGVbcHJvcE5hbWVdID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbm9kZVtwcm9wTmFtZV0gPSAnJztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbm9kZS5yZW1vdmVBdHRyaWJ1dGUocHJvcGVydHlJbmZvLmF0dHJpYnV0ZU5hbWUpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoRE9NUHJvcGVydHkuaXNDdXN0b21BdHRyaWJ1dGUobmFtZSkpIHtcbiAgICAgIG5vZGUucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICAgIH1cblxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBSZWFjdEluc3RydW1lbnRhdGlvbi5kZWJ1Z1Rvb2wub25Ib3N0T3BlcmF0aW9uKHtcbiAgICAgICAgaW5zdGFuY2VJRDogUmVhY3RET01Db21wb25lbnRUcmVlLmdldEluc3RhbmNlRnJvbU5vZGUobm9kZSkuX2RlYnVnSUQsXG4gICAgICAgIHR5cGU6ICdyZW1vdmUgYXR0cmlidXRlJyxcbiAgICAgICAgcGF5bG9hZDogbmFtZVxuICAgICAgfSk7XG4gICAgfVxuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IERPTVByb3BlcnR5T3BlcmF0aW9ucztcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3JlYWN0LWRvbS9saWIvRE9NUHJvcGVydHlPcGVyYXRpb25zLmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxNS1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0RE9NQ29tcG9uZW50RmxhZ3MgPSB7XG4gIGhhc0NhY2hlZENoaWxkTm9kZXM6IDEgPDwgMFxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdERPTUNvbXBvbmVudEZsYWdzO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QtZG9tL2xpYi9SZWFjdERPTUNvbXBvbmVudEZsYWdzLmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIF9hc3NpZ24gPSByZXF1aXJlKCdvYmplY3QtYXNzaWduJyk7XG5cbnZhciBMaW5rZWRWYWx1ZVV0aWxzID0gcmVxdWlyZSgnLi9MaW5rZWRWYWx1ZVV0aWxzJyk7XG52YXIgUmVhY3RET01Db21wb25lbnRUcmVlID0gcmVxdWlyZSgnLi9SZWFjdERPTUNvbXBvbmVudFRyZWUnKTtcbnZhciBSZWFjdFVwZGF0ZXMgPSByZXF1aXJlKCcuL1JlYWN0VXBkYXRlcycpO1xuXG52YXIgd2FybmluZyA9IHJlcXVpcmUoJ2ZianMvbGliL3dhcm5pbmcnKTtcblxudmFyIGRpZFdhcm5WYWx1ZUxpbmsgPSBmYWxzZTtcbnZhciBkaWRXYXJuVmFsdWVEZWZhdWx0VmFsdWUgPSBmYWxzZTtcblxuZnVuY3Rpb24gdXBkYXRlT3B0aW9uc0lmUGVuZGluZ1VwZGF0ZUFuZE1vdW50ZWQoKSB7XG4gIGlmICh0aGlzLl9yb290Tm9kZUlEICYmIHRoaXMuX3dyYXBwZXJTdGF0ZS5wZW5kaW5nVXBkYXRlKSB7XG4gICAgdGhpcy5fd3JhcHBlclN0YXRlLnBlbmRpbmdVcGRhdGUgPSBmYWxzZTtcblxuICAgIHZhciBwcm9wcyA9IHRoaXMuX2N1cnJlbnRFbGVtZW50LnByb3BzO1xuICAgIHZhciB2YWx1ZSA9IExpbmtlZFZhbHVlVXRpbHMuZ2V0VmFsdWUocHJvcHMpO1xuXG4gICAgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICAgIHVwZGF0ZU9wdGlvbnModGhpcywgQm9vbGVhbihwcm9wcy5tdWx0aXBsZSksIHZhbHVlKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0RGVjbGFyYXRpb25FcnJvckFkZGVuZHVtKG93bmVyKSB7XG4gIGlmIChvd25lcikge1xuICAgIHZhciBuYW1lID0gb3duZXIuZ2V0TmFtZSgpO1xuICAgIGlmIChuYW1lKSB7XG4gICAgICByZXR1cm4gJyBDaGVjayB0aGUgcmVuZGVyIG1ldGhvZCBvZiBgJyArIG5hbWUgKyAnYC4nO1xuICAgIH1cbiAgfVxuICByZXR1cm4gJyc7XG59XG5cbnZhciB2YWx1ZVByb3BOYW1lcyA9IFsndmFsdWUnLCAnZGVmYXVsdFZhbHVlJ107XG5cbi8qKlxuICogVmFsaWRhdGlvbiBmdW5jdGlvbiBmb3IgYHZhbHVlYCBhbmQgYGRlZmF1bHRWYWx1ZWAuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBjaGVja1NlbGVjdFByb3BUeXBlcyhpbnN0LCBwcm9wcykge1xuICB2YXIgb3duZXIgPSBpbnN0Ll9jdXJyZW50RWxlbWVudC5fb3duZXI7XG4gIExpbmtlZFZhbHVlVXRpbHMuY2hlY2tQcm9wVHlwZXMoJ3NlbGVjdCcsIHByb3BzLCBvd25lcik7XG5cbiAgaWYgKHByb3BzLnZhbHVlTGluayAhPT0gdW5kZWZpbmVkICYmICFkaWRXYXJuVmFsdWVMaW5rKSB7XG4gICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcoZmFsc2UsICdgdmFsdWVMaW5rYCBwcm9wIG9uIGBzZWxlY3RgIGlzIGRlcHJlY2F0ZWQ7IHNldCBgdmFsdWVgIGFuZCBgb25DaGFuZ2VgIGluc3RlYWQuJykgOiB2b2lkIDA7XG4gICAgZGlkV2FyblZhbHVlTGluayA9IHRydWU7XG4gIH1cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlUHJvcE5hbWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHByb3BOYW1lID0gdmFsdWVQcm9wTmFtZXNbaV07XG4gICAgaWYgKHByb3BzW3Byb3BOYW1lXSA9PSBudWxsKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgdmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5KHByb3BzW3Byb3BOYW1lXSk7XG4gICAgaWYgKHByb3BzLm11bHRpcGxlICYmICFpc0FycmF5KSB7XG4gICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyhmYWxzZSwgJ1RoZSBgJXNgIHByb3Agc3VwcGxpZWQgdG8gPHNlbGVjdD4gbXVzdCBiZSBhbiBhcnJheSBpZiAnICsgJ2BtdWx0aXBsZWAgaXMgdHJ1ZS4lcycsIHByb3BOYW1lLCBnZXREZWNsYXJhdGlvbkVycm9yQWRkZW5kdW0ob3duZXIpKSA6IHZvaWQgMDtcbiAgICB9IGVsc2UgaWYgKCFwcm9wcy5tdWx0aXBsZSAmJiBpc0FycmF5KSB7XG4gICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyhmYWxzZSwgJ1RoZSBgJXNgIHByb3Agc3VwcGxpZWQgdG8gPHNlbGVjdD4gbXVzdCBiZSBhIHNjYWxhciAnICsgJ3ZhbHVlIGlmIGBtdWx0aXBsZWAgaXMgZmFsc2UuJXMnLCBwcm9wTmFtZSwgZ2V0RGVjbGFyYXRpb25FcnJvckFkZGVuZHVtKG93bmVyKSkgOiB2b2lkIDA7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQHBhcmFtIHtSZWFjdERPTUNvbXBvbmVudH0gaW5zdFxuICogQHBhcmFtIHtib29sZWFufSBtdWx0aXBsZVxuICogQHBhcmFtIHsqfSBwcm9wVmFsdWUgQSBzdHJpbmdhYmxlICh3aXRoIGBtdWx0aXBsZWAsIGEgbGlzdCBvZiBzdHJpbmdhYmxlcykuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiB1cGRhdGVPcHRpb25zKGluc3QsIG11bHRpcGxlLCBwcm9wVmFsdWUpIHtcbiAgdmFyIHNlbGVjdGVkVmFsdWUsIGk7XG4gIHZhciBvcHRpb25zID0gUmVhY3RET01Db21wb25lbnRUcmVlLmdldE5vZGVGcm9tSW5zdGFuY2UoaW5zdCkub3B0aW9ucztcblxuICBpZiAobXVsdGlwbGUpIHtcbiAgICBzZWxlY3RlZFZhbHVlID0ge307XG4gICAgZm9yIChpID0gMDsgaSA8IHByb3BWYWx1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgc2VsZWN0ZWRWYWx1ZVsnJyArIHByb3BWYWx1ZVtpXV0gPSB0cnVlO1xuICAgIH1cbiAgICBmb3IgKGkgPSAwOyBpIDwgb3B0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHNlbGVjdGVkID0gc2VsZWN0ZWRWYWx1ZS5oYXNPd25Qcm9wZXJ0eShvcHRpb25zW2ldLnZhbHVlKTtcbiAgICAgIGlmIChvcHRpb25zW2ldLnNlbGVjdGVkICE9PSBzZWxlY3RlZCkge1xuICAgICAgICBvcHRpb25zW2ldLnNlbGVjdGVkID0gc2VsZWN0ZWQ7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIERvIG5vdCBzZXQgYHNlbGVjdC52YWx1ZWAgYXMgZXhhY3QgYmVoYXZpb3IgaXNuJ3QgY29uc2lzdGVudCBhY3Jvc3MgYWxsXG4gICAgLy8gYnJvd3NlcnMgZm9yIGFsbCBjYXNlcy5cbiAgICBzZWxlY3RlZFZhbHVlID0gJycgKyBwcm9wVmFsdWU7XG4gICAgZm9yIChpID0gMDsgaSA8IG9wdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChvcHRpb25zW2ldLnZhbHVlID09PSBzZWxlY3RlZFZhbHVlKSB7XG4gICAgICAgIG9wdGlvbnNbaV0uc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChvcHRpb25zLmxlbmd0aCkge1xuICAgICAgb3B0aW9uc1swXS5zZWxlY3RlZCA9IHRydWU7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogSW1wbGVtZW50cyBhIDxzZWxlY3Q+IGhvc3QgY29tcG9uZW50IHRoYXQgYWxsb3dzIG9wdGlvbmFsbHkgc2V0dGluZyB0aGVcbiAqIHByb3BzIGB2YWx1ZWAgYW5kIGBkZWZhdWx0VmFsdWVgLiBJZiBgbXVsdGlwbGVgIGlzIGZhbHNlLCB0aGUgcHJvcCBtdXN0IGJlIGFcbiAqIHN0cmluZ2FibGUuIElmIGBtdWx0aXBsZWAgaXMgdHJ1ZSwgdGhlIHByb3AgbXVzdCBiZSBhbiBhcnJheSBvZiBzdHJpbmdhYmxlcy5cbiAqXG4gKiBJZiBgdmFsdWVgIGlzIG5vdCBzdXBwbGllZCAob3IgbnVsbC91bmRlZmluZWQpLCB1c2VyIGFjdGlvbnMgdGhhdCBjaGFuZ2UgdGhlXG4gKiBzZWxlY3RlZCBvcHRpb24gd2lsbCB0cmlnZ2VyIHVwZGF0ZXMgdG8gdGhlIHJlbmRlcmVkIG9wdGlvbnMuXG4gKlxuICogSWYgaXQgaXMgc3VwcGxpZWQgKGFuZCBub3QgbnVsbC91bmRlZmluZWQpLCB0aGUgcmVuZGVyZWQgb3B0aW9ucyB3aWxsIG5vdFxuICogdXBkYXRlIGluIHJlc3BvbnNlIHRvIHVzZXIgYWN0aW9ucy4gSW5zdGVhZCwgdGhlIGB2YWx1ZWAgcHJvcCBtdXN0IGNoYW5nZSBpblxuICogb3JkZXIgZm9yIHRoZSByZW5kZXJlZCBvcHRpb25zIHRvIHVwZGF0ZS5cbiAqXG4gKiBJZiBgZGVmYXVsdFZhbHVlYCBpcyBwcm92aWRlZCwgYW55IG9wdGlvbnMgd2l0aCB0aGUgc3VwcGxpZWQgdmFsdWVzIHdpbGwgYmVcbiAqIHNlbGVjdGVkLlxuICovXG52YXIgUmVhY3RET01TZWxlY3QgPSB7XG4gIGdldEhvc3RQcm9wczogZnVuY3Rpb24gKGluc3QsIHByb3BzKSB7XG4gICAgcmV0dXJuIF9hc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICBvbkNoYW5nZTogaW5zdC5fd3JhcHBlclN0YXRlLm9uQ2hhbmdlLFxuICAgICAgdmFsdWU6IHVuZGVmaW5lZFxuICAgIH0pO1xuICB9LFxuXG4gIG1vdW50V3JhcHBlcjogZnVuY3Rpb24gKGluc3QsIHByb3BzKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGNoZWNrU2VsZWN0UHJvcFR5cGVzKGluc3QsIHByb3BzKTtcbiAgICB9XG5cbiAgICB2YXIgdmFsdWUgPSBMaW5rZWRWYWx1ZVV0aWxzLmdldFZhbHVlKHByb3BzKTtcbiAgICBpbnN0Ll93cmFwcGVyU3RhdGUgPSB7XG4gICAgICBwZW5kaW5nVXBkYXRlOiBmYWxzZSxcbiAgICAgIGluaXRpYWxWYWx1ZTogdmFsdWUgIT0gbnVsbCA/IHZhbHVlIDogcHJvcHMuZGVmYXVsdFZhbHVlLFxuICAgICAgbGlzdGVuZXJzOiBudWxsLFxuICAgICAgb25DaGFuZ2U6IF9oYW5kbGVDaGFuZ2UuYmluZChpbnN0KSxcbiAgICAgIHdhc011bHRpcGxlOiBCb29sZWFuKHByb3BzLm11bHRpcGxlKVxuICAgIH07XG5cbiAgICBpZiAocHJvcHMudmFsdWUgIT09IHVuZGVmaW5lZCAmJiBwcm9wcy5kZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCAmJiAhZGlkV2FyblZhbHVlRGVmYXVsdFZhbHVlKSB7XG4gICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyhmYWxzZSwgJ1NlbGVjdCBlbGVtZW50cyBtdXN0IGJlIGVpdGhlciBjb250cm9sbGVkIG9yIHVuY29udHJvbGxlZCAnICsgJyhzcGVjaWZ5IGVpdGhlciB0aGUgdmFsdWUgcHJvcCwgb3IgdGhlIGRlZmF1bHRWYWx1ZSBwcm9wLCBidXQgbm90ICcgKyAnYm90aCkuIERlY2lkZSBiZXR3ZWVuIHVzaW5nIGEgY29udHJvbGxlZCBvciB1bmNvbnRyb2xsZWQgc2VsZWN0ICcgKyAnZWxlbWVudCBhbmQgcmVtb3ZlIG9uZSBvZiB0aGVzZSBwcm9wcy4gTW9yZSBpbmZvOiAnICsgJ2h0dHBzOi8vZmIubWUvcmVhY3QtY29udHJvbGxlZC1jb21wb25lbnRzJykgOiB2b2lkIDA7XG4gICAgICBkaWRXYXJuVmFsdWVEZWZhdWx0VmFsdWUgPSB0cnVlO1xuICAgIH1cbiAgfSxcblxuICBnZXRTZWxlY3RWYWx1ZUNvbnRleHQ6IGZ1bmN0aW9uIChpbnN0KSB7XG4gICAgLy8gUmVhY3RET01PcHRpb24gbG9va3MgYXQgdGhpcyBpbml0aWFsIHZhbHVlIHNvIHRoZSBpbml0aWFsIGdlbmVyYXRlZFxuICAgIC8vIG1hcmt1cCBoYXMgY29ycmVjdCBgc2VsZWN0ZWRgIGF0dHJpYnV0ZXNcbiAgICByZXR1cm4gaW5zdC5fd3JhcHBlclN0YXRlLmluaXRpYWxWYWx1ZTtcbiAgfSxcblxuICBwb3N0VXBkYXRlV3JhcHBlcjogZnVuY3Rpb24gKGluc3QpIHtcbiAgICB2YXIgcHJvcHMgPSBpbnN0Ll9jdXJyZW50RWxlbWVudC5wcm9wcztcblxuICAgIC8vIEFmdGVyIHRoZSBpbml0aWFsIG1vdW50LCB3ZSBjb250cm9sIHNlbGVjdGVkLW5lc3MgbWFudWFsbHkgc28gZG9uJ3QgcGFzc1xuICAgIC8vIHRoaXMgdmFsdWUgZG93blxuICAgIGluc3QuX3dyYXBwZXJTdGF0ZS5pbml0aWFsVmFsdWUgPSB1bmRlZmluZWQ7XG5cbiAgICB2YXIgd2FzTXVsdGlwbGUgPSBpbnN0Ll93cmFwcGVyU3RhdGUud2FzTXVsdGlwbGU7XG4gICAgaW5zdC5fd3JhcHBlclN0YXRlLndhc011bHRpcGxlID0gQm9vbGVhbihwcm9wcy5tdWx0aXBsZSk7XG5cbiAgICB2YXIgdmFsdWUgPSBMaW5rZWRWYWx1ZVV0aWxzLmdldFZhbHVlKHByb3BzKTtcbiAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgICAgaW5zdC5fd3JhcHBlclN0YXRlLnBlbmRpbmdVcGRhdGUgPSBmYWxzZTtcbiAgICAgIHVwZGF0ZU9wdGlvbnMoaW5zdCwgQm9vbGVhbihwcm9wcy5tdWx0aXBsZSksIHZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKHdhc011bHRpcGxlICE9PSBCb29sZWFuKHByb3BzLm11bHRpcGxlKSkge1xuICAgICAgLy8gRm9yIHNpbXBsaWNpdHksIHJlYXBwbHkgYGRlZmF1bHRWYWx1ZWAgaWYgYG11bHRpcGxlYCBpcyB0b2dnbGVkLlxuICAgICAgaWYgKHByb3BzLmRlZmF1bHRWYWx1ZSAhPSBudWxsKSB7XG4gICAgICAgIHVwZGF0ZU9wdGlvbnMoaW5zdCwgQm9vbGVhbihwcm9wcy5tdWx0aXBsZSksIHByb3BzLmRlZmF1bHRWYWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBSZXZlcnQgdGhlIHNlbGVjdCBiYWNrIHRvIGl0cyBkZWZhdWx0IHVuc2VsZWN0ZWQgc3RhdGUuXG4gICAgICAgIHVwZGF0ZU9wdGlvbnMoaW5zdCwgQm9vbGVhbihwcm9wcy5tdWx0aXBsZSksIHByb3BzLm11bHRpcGxlID8gW10gOiAnJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG59O1xuXG5mdW5jdGlvbiBfaGFuZGxlQ2hhbmdlKGV2ZW50KSB7XG4gIHZhciBwcm9wcyA9IHRoaXMuX2N1cnJlbnRFbGVtZW50LnByb3BzO1xuICB2YXIgcmV0dXJuVmFsdWUgPSBMaW5rZWRWYWx1ZVV0aWxzLmV4ZWN1dGVPbkNoYW5nZShwcm9wcywgZXZlbnQpO1xuXG4gIGlmICh0aGlzLl9yb290Tm9kZUlEKSB7XG4gICAgdGhpcy5fd3JhcHBlclN0YXRlLnBlbmRpbmdVcGRhdGUgPSB0cnVlO1xuICB9XG4gIFJlYWN0VXBkYXRlcy5hc2FwKHVwZGF0ZU9wdGlvbnNJZlBlbmRpbmdVcGRhdGVBbmRNb3VudGVkLCB0aGlzKTtcbiAgcmV0dXJuIHJldHVyblZhbHVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0RE9NU2VsZWN0O1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QtZG9tL2xpYi9SZWFjdERPTVNlbGVjdC5qcyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBlbXB0eUNvbXBvbmVudEZhY3Rvcnk7XG5cbnZhciBSZWFjdEVtcHR5Q29tcG9uZW50SW5qZWN0aW9uID0ge1xuICBpbmplY3RFbXB0eUNvbXBvbmVudEZhY3Rvcnk6IGZ1bmN0aW9uIChmYWN0b3J5KSB7XG4gICAgZW1wdHlDb21wb25lbnRGYWN0b3J5ID0gZmFjdG9yeTtcbiAgfVxufTtcblxudmFyIFJlYWN0RW1wdHlDb21wb25lbnQgPSB7XG4gIGNyZWF0ZTogZnVuY3Rpb24gKGluc3RhbnRpYXRlKSB7XG4gICAgcmV0dXJuIGVtcHR5Q29tcG9uZW50RmFjdG9yeShpbnN0YW50aWF0ZSk7XG4gIH1cbn07XG5cblJlYWN0RW1wdHlDb21wb25lbnQuaW5qZWN0aW9uID0gUmVhY3RFbXB0eUNvbXBvbmVudEluamVjdGlvbjtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdEVtcHR5Q29tcG9uZW50O1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QtZG9tL2xpYi9SZWFjdEVtcHR5Q29tcG9uZW50LmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUmVhY3RGZWF0dXJlRmxhZ3MgPSB7XG4gIC8vIFdoZW4gdHJ1ZSwgY2FsbCBjb25zb2xlLnRpbWUoKSBiZWZvcmUgYW5kIC50aW1lRW5kKCkgYWZ0ZXIgZWFjaCB0b3AtbGV2ZWxcbiAgLy8gcmVuZGVyIChib3RoIGluaXRpYWwgcmVuZGVycyBhbmQgdXBkYXRlcykuIFVzZWZ1bCB3aGVuIGxvb2tpbmcgYXQgcHJvZC1tb2RlXG4gIC8vIHRpbWVsaW5lIHByb2ZpbGVzIGluIENocm9tZSwgZm9yIGV4YW1wbGUuXG4gIGxvZ1RvcExldmVsUmVuZGVyczogZmFsc2Vcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RGZWF0dXJlRmxhZ3M7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1kb20vbGliL1JlYWN0RmVhdHVyZUZsYWdzLmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxNC1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIF9wcm9kSW52YXJpYW50ID0gcmVxdWlyZSgnLi9yZWFjdFByb2RJbnZhcmlhbnQnKTtcblxudmFyIGludmFyaWFudCA9IHJlcXVpcmUoJ2ZianMvbGliL2ludmFyaWFudCcpO1xuXG52YXIgZ2VuZXJpY0NvbXBvbmVudENsYXNzID0gbnVsbDtcbnZhciB0ZXh0Q29tcG9uZW50Q2xhc3MgPSBudWxsO1xuXG52YXIgUmVhY3RIb3N0Q29tcG9uZW50SW5qZWN0aW9uID0ge1xuICAvLyBUaGlzIGFjY2VwdHMgYSBjbGFzcyB0aGF0IHJlY2VpdmVzIHRoZSB0YWcgc3RyaW5nLiBUaGlzIGlzIGEgY2F0Y2ggYWxsXG4gIC8vIHRoYXQgY2FuIHJlbmRlciBhbnkga2luZCBvZiB0YWcuXG4gIGluamVjdEdlbmVyaWNDb21wb25lbnRDbGFzczogZnVuY3Rpb24gKGNvbXBvbmVudENsYXNzKSB7XG4gICAgZ2VuZXJpY0NvbXBvbmVudENsYXNzID0gY29tcG9uZW50Q2xhc3M7XG4gIH0sXG4gIC8vIFRoaXMgYWNjZXB0cyBhIHRleHQgY29tcG9uZW50IGNsYXNzIHRoYXQgdGFrZXMgdGhlIHRleHQgc3RyaW5nIHRvIGJlXG4gIC8vIHJlbmRlcmVkIGFzIHByb3BzLlxuICBpbmplY3RUZXh0Q29tcG9uZW50Q2xhc3M6IGZ1bmN0aW9uIChjb21wb25lbnRDbGFzcykge1xuICAgIHRleHRDb21wb25lbnRDbGFzcyA9IGNvbXBvbmVudENsYXNzO1xuICB9XG59O1xuXG4vKipcbiAqIEdldCBhIGhvc3QgaW50ZXJuYWwgY29tcG9uZW50IGNsYXNzIGZvciBhIHNwZWNpZmljIHRhZy5cbiAqXG4gKiBAcGFyYW0ge1JlYWN0RWxlbWVudH0gZWxlbWVudCBUaGUgZWxlbWVudCB0byBjcmVhdGUuXG4gKiBAcmV0dXJuIHtmdW5jdGlvbn0gVGhlIGludGVybmFsIGNsYXNzIGNvbnN0cnVjdG9yIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBjcmVhdGVJbnRlcm5hbENvbXBvbmVudChlbGVtZW50KSB7XG4gICFnZW5lcmljQ29tcG9uZW50Q2xhc3MgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAnVGhlcmUgaXMgbm8gcmVnaXN0ZXJlZCBjb21wb25lbnQgZm9yIHRoZSB0YWcgJXMnLCBlbGVtZW50LnR5cGUpIDogX3Byb2RJbnZhcmlhbnQoJzExMScsIGVsZW1lbnQudHlwZSkgOiB2b2lkIDA7XG4gIHJldHVybiBuZXcgZ2VuZXJpY0NvbXBvbmVudENsYXNzKGVsZW1lbnQpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7UmVhY3RUZXh0fSB0ZXh0XG4gKiBAcmV0dXJuIHtSZWFjdENvbXBvbmVudH1cbiAqL1xuZnVuY3Rpb24gY3JlYXRlSW5zdGFuY2VGb3JUZXh0KHRleHQpIHtcbiAgcmV0dXJuIG5ldyB0ZXh0Q29tcG9uZW50Q2xhc3ModGV4dCk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtSZWFjdENvbXBvbmVudH0gY29tcG9uZW50XG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc1RleHRDb21wb25lbnQoY29tcG9uZW50KSB7XG4gIHJldHVybiBjb21wb25lbnQgaW5zdGFuY2VvZiB0ZXh0Q29tcG9uZW50Q2xhc3M7XG59XG5cbnZhciBSZWFjdEhvc3RDb21wb25lbnQgPSB7XG4gIGNyZWF0ZUludGVybmFsQ29tcG9uZW50OiBjcmVhdGVJbnRlcm5hbENvbXBvbmVudCxcbiAgY3JlYXRlSW5zdGFuY2VGb3JUZXh0OiBjcmVhdGVJbnN0YW5jZUZvclRleHQsXG4gIGlzVGV4dENvbXBvbmVudDogaXNUZXh0Q29tcG9uZW50LFxuICBpbmplY3Rpb246IFJlYWN0SG9zdENvbXBvbmVudEluamVjdGlvblxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdEhvc3RDb21wb25lbnQ7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1kb20vbGliL1JlYWN0SG9zdENvbXBvbmVudC5qcyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBSZWFjdERPTVNlbGVjdGlvbiA9IHJlcXVpcmUoJy4vUmVhY3RET01TZWxlY3Rpb24nKTtcblxudmFyIGNvbnRhaW5zTm9kZSA9IHJlcXVpcmUoJ2ZianMvbGliL2NvbnRhaW5zTm9kZScpO1xudmFyIGZvY3VzTm9kZSA9IHJlcXVpcmUoJ2ZianMvbGliL2ZvY3VzTm9kZScpO1xudmFyIGdldEFjdGl2ZUVsZW1lbnQgPSByZXF1aXJlKCdmYmpzL2xpYi9nZXRBY3RpdmVFbGVtZW50Jyk7XG5cbmZ1bmN0aW9uIGlzSW5Eb2N1bWVudChub2RlKSB7XG4gIHJldHVybiBjb250YWluc05vZGUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCBub2RlKTtcbn1cblxuLyoqXG4gKiBAUmVhY3RJbnB1dFNlbGVjdGlvbjogUmVhY3QgaW5wdXQgc2VsZWN0aW9uIG1vZHVsZS4gQmFzZWQgb24gU2VsZWN0aW9uLmpzLFxuICogYnV0IG1vZGlmaWVkIHRvIGJlIHN1aXRhYmxlIGZvciByZWFjdCBhbmQgaGFzIGEgY291cGxlIG9mIGJ1ZyBmaXhlcyAoZG9lc24ndFxuICogYXNzdW1lIGJ1dHRvbnMgaGF2ZSByYW5nZSBzZWxlY3Rpb25zIGFsbG93ZWQpLlxuICogSW5wdXQgc2VsZWN0aW9uIG1vZHVsZSBmb3IgUmVhY3QuXG4gKi9cbnZhciBSZWFjdElucHV0U2VsZWN0aW9uID0ge1xuICBoYXNTZWxlY3Rpb25DYXBhYmlsaXRpZXM6IGZ1bmN0aW9uIChlbGVtKSB7XG4gICAgdmFyIG5vZGVOYW1lID0gZWxlbSAmJiBlbGVtLm5vZGVOYW1lICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICByZXR1cm4gbm9kZU5hbWUgJiYgKG5vZGVOYW1lID09PSAnaW5wdXQnICYmIGVsZW0udHlwZSA9PT0gJ3RleHQnIHx8IG5vZGVOYW1lID09PSAndGV4dGFyZWEnIHx8IGVsZW0uY29udGVudEVkaXRhYmxlID09PSAndHJ1ZScpO1xuICB9LFxuXG4gIGdldFNlbGVjdGlvbkluZm9ybWF0aW9uOiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGZvY3VzZWRFbGVtID0gZ2V0QWN0aXZlRWxlbWVudCgpO1xuICAgIHJldHVybiB7XG4gICAgICBmb2N1c2VkRWxlbTogZm9jdXNlZEVsZW0sXG4gICAgICBzZWxlY3Rpb25SYW5nZTogUmVhY3RJbnB1dFNlbGVjdGlvbi5oYXNTZWxlY3Rpb25DYXBhYmlsaXRpZXMoZm9jdXNlZEVsZW0pID8gUmVhY3RJbnB1dFNlbGVjdGlvbi5nZXRTZWxlY3Rpb24oZm9jdXNlZEVsZW0pIDogbnVsbFxuICAgIH07XG4gIH0sXG5cbiAgLyoqXG4gICAqIEByZXN0b3JlU2VsZWN0aW9uOiBJZiBhbnkgc2VsZWN0aW9uIGluZm9ybWF0aW9uIHdhcyBwb3RlbnRpYWxseSBsb3N0LFxuICAgKiByZXN0b3JlIGl0LiBUaGlzIGlzIHVzZWZ1bCB3aGVuIHBlcmZvcm1pbmcgb3BlcmF0aW9ucyB0aGF0IGNvdWxkIHJlbW92ZSBkb21cbiAgICogbm9kZXMgYW5kIHBsYWNlIHRoZW0gYmFjayBpbiwgcmVzdWx0aW5nIGluIGZvY3VzIGJlaW5nIGxvc3QuXG4gICAqL1xuICByZXN0b3JlU2VsZWN0aW9uOiBmdW5jdGlvbiAocHJpb3JTZWxlY3Rpb25JbmZvcm1hdGlvbikge1xuICAgIHZhciBjdXJGb2N1c2VkRWxlbSA9IGdldEFjdGl2ZUVsZW1lbnQoKTtcbiAgICB2YXIgcHJpb3JGb2N1c2VkRWxlbSA9IHByaW9yU2VsZWN0aW9uSW5mb3JtYXRpb24uZm9jdXNlZEVsZW07XG4gICAgdmFyIHByaW9yU2VsZWN0aW9uUmFuZ2UgPSBwcmlvclNlbGVjdGlvbkluZm9ybWF0aW9uLnNlbGVjdGlvblJhbmdlO1xuICAgIGlmIChjdXJGb2N1c2VkRWxlbSAhPT0gcHJpb3JGb2N1c2VkRWxlbSAmJiBpc0luRG9jdW1lbnQocHJpb3JGb2N1c2VkRWxlbSkpIHtcbiAgICAgIGlmIChSZWFjdElucHV0U2VsZWN0aW9uLmhhc1NlbGVjdGlvbkNhcGFiaWxpdGllcyhwcmlvckZvY3VzZWRFbGVtKSkge1xuICAgICAgICBSZWFjdElucHV0U2VsZWN0aW9uLnNldFNlbGVjdGlvbihwcmlvckZvY3VzZWRFbGVtLCBwcmlvclNlbGVjdGlvblJhbmdlKTtcbiAgICAgIH1cbiAgICAgIGZvY3VzTm9kZShwcmlvckZvY3VzZWRFbGVtKTtcbiAgICB9XG4gIH0sXG5cbiAgLyoqXG4gICAqIEBnZXRTZWxlY3Rpb246IEdldHMgdGhlIHNlbGVjdGlvbiBib3VuZHMgb2YgYSBmb2N1c2VkIHRleHRhcmVhLCBpbnB1dCBvclxuICAgKiBjb250ZW50RWRpdGFibGUgbm9kZS5cbiAgICogLUBpbnB1dDogTG9vayB1cCBzZWxlY3Rpb24gYm91bmRzIG9mIHRoaXMgaW5wdXRcbiAgICogLUByZXR1cm4ge3N0YXJ0OiBzZWxlY3Rpb25TdGFydCwgZW5kOiBzZWxlY3Rpb25FbmR9XG4gICAqL1xuICBnZXRTZWxlY3Rpb246IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgIHZhciBzZWxlY3Rpb247XG5cbiAgICBpZiAoJ3NlbGVjdGlvblN0YXJ0JyBpbiBpbnB1dCkge1xuICAgICAgLy8gTW9kZXJuIGJyb3dzZXIgd2l0aCBpbnB1dCBvciB0ZXh0YXJlYS5cbiAgICAgIHNlbGVjdGlvbiA9IHtcbiAgICAgICAgc3RhcnQ6IGlucHV0LnNlbGVjdGlvblN0YXJ0LFxuICAgICAgICBlbmQ6IGlucHV0LnNlbGVjdGlvbkVuZFxuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKGRvY3VtZW50LnNlbGVjdGlvbiAmJiBpbnB1dC5ub2RlTmFtZSAmJiBpbnB1dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSAnaW5wdXQnKSB7XG4gICAgICAvLyBJRTggaW5wdXQuXG4gICAgICB2YXIgcmFuZ2UgPSBkb2N1bWVudC5zZWxlY3Rpb24uY3JlYXRlUmFuZ2UoKTtcbiAgICAgIC8vIFRoZXJlIGNhbiBvbmx5IGJlIG9uZSBzZWxlY3Rpb24gcGVyIGRvY3VtZW50IGluIElFLCBzbyBpdCBtdXN0XG4gICAgICAvLyBiZSBpbiBvdXIgZWxlbWVudC5cbiAgICAgIGlmIChyYW5nZS5wYXJlbnRFbGVtZW50KCkgPT09IGlucHV0KSB7XG4gICAgICAgIHNlbGVjdGlvbiA9IHtcbiAgICAgICAgICBzdGFydDogLXJhbmdlLm1vdmVTdGFydCgnY2hhcmFjdGVyJywgLWlucHV0LnZhbHVlLmxlbmd0aCksXG4gICAgICAgICAgZW5kOiAtcmFuZ2UubW92ZUVuZCgnY2hhcmFjdGVyJywgLWlucHV0LnZhbHVlLmxlbmd0aClcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQ29udGVudCBlZGl0YWJsZSBvciBvbGQgSUUgdGV4dGFyZWEuXG4gICAgICBzZWxlY3Rpb24gPSBSZWFjdERPTVNlbGVjdGlvbi5nZXRPZmZzZXRzKGlucHV0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gc2VsZWN0aW9uIHx8IHsgc3RhcnQ6IDAsIGVuZDogMCB9O1xuICB9LFxuXG4gIC8qKlxuICAgKiBAc2V0U2VsZWN0aW9uOiBTZXRzIHRoZSBzZWxlY3Rpb24gYm91bmRzIG9mIGEgdGV4dGFyZWEgb3IgaW5wdXQgYW5kIGZvY3VzZXNcbiAgICogdGhlIGlucHV0LlxuICAgKiAtQGlucHV0ICAgICBTZXQgc2VsZWN0aW9uIGJvdW5kcyBvZiB0aGlzIGlucHV0IG9yIHRleHRhcmVhXG4gICAqIC1Ab2Zmc2V0cyAgIE9iamVjdCBvZiBzYW1lIGZvcm0gdGhhdCBpcyByZXR1cm5lZCBmcm9tIGdldCpcbiAgICovXG4gIHNldFNlbGVjdGlvbjogZnVuY3Rpb24gKGlucHV0LCBvZmZzZXRzKSB7XG4gICAgdmFyIHN0YXJ0ID0gb2Zmc2V0cy5zdGFydDtcbiAgICB2YXIgZW5kID0gb2Zmc2V0cy5lbmQ7XG4gICAgaWYgKGVuZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBlbmQgPSBzdGFydDtcbiAgICB9XG5cbiAgICBpZiAoJ3NlbGVjdGlvblN0YXJ0JyBpbiBpbnB1dCkge1xuICAgICAgaW5wdXQuc2VsZWN0aW9uU3RhcnQgPSBzdGFydDtcbiAgICAgIGlucHV0LnNlbGVjdGlvbkVuZCA9IE1hdGgubWluKGVuZCwgaW5wdXQudmFsdWUubGVuZ3RoKTtcbiAgICB9IGVsc2UgaWYgKGRvY3VtZW50LnNlbGVjdGlvbiAmJiBpbnB1dC5ub2RlTmFtZSAmJiBpbnB1dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSAnaW5wdXQnKSB7XG4gICAgICB2YXIgcmFuZ2UgPSBpbnB1dC5jcmVhdGVUZXh0UmFuZ2UoKTtcbiAgICAgIHJhbmdlLmNvbGxhcHNlKHRydWUpO1xuICAgICAgcmFuZ2UubW92ZVN0YXJ0KCdjaGFyYWN0ZXInLCBzdGFydCk7XG4gICAgICByYW5nZS5tb3ZlRW5kKCdjaGFyYWN0ZXInLCBlbmQgLSBzdGFydCk7XG4gICAgICByYW5nZS5zZWxlY3QoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgUmVhY3RET01TZWxlY3Rpb24uc2V0T2Zmc2V0cyhpbnB1dCwgb2Zmc2V0cyk7XG4gICAgfVxuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0SW5wdXRTZWxlY3Rpb247XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1kb20vbGliL1JlYWN0SW5wdXRTZWxlY3Rpb24uanMiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgX3Byb2RJbnZhcmlhbnQgPSByZXF1aXJlKCcuL3JlYWN0UHJvZEludmFyaWFudCcpO1xuXG52YXIgRE9NTGF6eVRyZWUgPSByZXF1aXJlKCcuL0RPTUxhenlUcmVlJyk7XG52YXIgRE9NUHJvcGVydHkgPSByZXF1aXJlKCcuL0RPTVByb3BlcnR5Jyk7XG52YXIgUmVhY3QgPSByZXF1aXJlKCdyZWFjdC9saWIvUmVhY3QnKTtcbnZhciBSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCcuL1JlYWN0QnJvd3NlckV2ZW50RW1pdHRlcicpO1xudmFyIFJlYWN0Q3VycmVudE93bmVyID0gcmVxdWlyZSgncmVhY3QvbGliL1JlYWN0Q3VycmVudE93bmVyJyk7XG52YXIgUmVhY3RET01Db21wb25lbnRUcmVlID0gcmVxdWlyZSgnLi9SZWFjdERPTUNvbXBvbmVudFRyZWUnKTtcbnZhciBSZWFjdERPTUNvbnRhaW5lckluZm8gPSByZXF1aXJlKCcuL1JlYWN0RE9NQ29udGFpbmVySW5mbycpO1xudmFyIFJlYWN0RE9NRmVhdHVyZUZsYWdzID0gcmVxdWlyZSgnLi9SZWFjdERPTUZlYXR1cmVGbGFncycpO1xudmFyIFJlYWN0RmVhdHVyZUZsYWdzID0gcmVxdWlyZSgnLi9SZWFjdEZlYXR1cmVGbGFncycpO1xudmFyIFJlYWN0SW5zdGFuY2VNYXAgPSByZXF1aXJlKCcuL1JlYWN0SW5zdGFuY2VNYXAnKTtcbnZhciBSZWFjdEluc3RydW1lbnRhdGlvbiA9IHJlcXVpcmUoJy4vUmVhY3RJbnN0cnVtZW50YXRpb24nKTtcbnZhciBSZWFjdE1hcmt1cENoZWNrc3VtID0gcmVxdWlyZSgnLi9SZWFjdE1hcmt1cENoZWNrc3VtJyk7XG52YXIgUmVhY3RSZWNvbmNpbGVyID0gcmVxdWlyZSgnLi9SZWFjdFJlY29uY2lsZXInKTtcbnZhciBSZWFjdFVwZGF0ZVF1ZXVlID0gcmVxdWlyZSgnLi9SZWFjdFVwZGF0ZVF1ZXVlJyk7XG52YXIgUmVhY3RVcGRhdGVzID0gcmVxdWlyZSgnLi9SZWFjdFVwZGF0ZXMnKTtcblxudmFyIGVtcHR5T2JqZWN0ID0gcmVxdWlyZSgnZmJqcy9saWIvZW1wdHlPYmplY3QnKTtcbnZhciBpbnN0YW50aWF0ZVJlYWN0Q29tcG9uZW50ID0gcmVxdWlyZSgnLi9pbnN0YW50aWF0ZVJlYWN0Q29tcG9uZW50Jyk7XG52YXIgaW52YXJpYW50ID0gcmVxdWlyZSgnZmJqcy9saWIvaW52YXJpYW50Jyk7XG52YXIgc2V0SW5uZXJIVE1MID0gcmVxdWlyZSgnLi9zZXRJbm5lckhUTUwnKTtcbnZhciBzaG91bGRVcGRhdGVSZWFjdENvbXBvbmVudCA9IHJlcXVpcmUoJy4vc2hvdWxkVXBkYXRlUmVhY3RDb21wb25lbnQnKTtcbnZhciB3YXJuaW5nID0gcmVxdWlyZSgnZmJqcy9saWIvd2FybmluZycpO1xuXG52YXIgQVRUUl9OQU1FID0gRE9NUHJvcGVydHkuSURfQVRUUklCVVRFX05BTUU7XG52YXIgUk9PVF9BVFRSX05BTUUgPSBET01Qcm9wZXJ0eS5ST09UX0FUVFJJQlVURV9OQU1FO1xuXG52YXIgRUxFTUVOVF9OT0RFX1RZUEUgPSAxO1xudmFyIERPQ19OT0RFX1RZUEUgPSA5O1xudmFyIERPQ1VNRU5UX0ZSQUdNRU5UX05PREVfVFlQRSA9IDExO1xuXG52YXIgaW5zdGFuY2VzQnlSZWFjdFJvb3RJRCA9IHt9O1xuXG4vKipcbiAqIEZpbmRzIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgY2hhcmFjdGVyXG4gKiB0aGF0J3Mgbm90IGNvbW1vbiBiZXR3ZWVuIHRoZSB0d28gZ2l2ZW4gc3RyaW5ncy5cbiAqXG4gKiBAcmV0dXJuIHtudW1iZXJ9IHRoZSBpbmRleCBvZiB0aGUgY2hhcmFjdGVyIHdoZXJlIHRoZSBzdHJpbmdzIGRpdmVyZ2VcbiAqL1xuZnVuY3Rpb24gZmlyc3REaWZmZXJlbmNlSW5kZXgoc3RyaW5nMSwgc3RyaW5nMikge1xuICB2YXIgbWluTGVuID0gTWF0aC5taW4oc3RyaW5nMS5sZW5ndGgsIHN0cmluZzIubGVuZ3RoKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBtaW5MZW47IGkrKykge1xuICAgIGlmIChzdHJpbmcxLmNoYXJBdChpKSAhPT0gc3RyaW5nMi5jaGFyQXQoaSkpIHtcbiAgICAgIHJldHVybiBpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gc3RyaW5nMS5sZW5ndGggPT09IHN0cmluZzIubGVuZ3RoID8gLTEgOiBtaW5MZW47XG59XG5cbi8qKlxuICogQHBhcmFtIHtET01FbGVtZW50fERPTURvY3VtZW50fSBjb250YWluZXIgRE9NIGVsZW1lbnQgdGhhdCBtYXkgY29udGFpblxuICogYSBSZWFjdCBjb21wb25lbnRcbiAqIEByZXR1cm4gez8qfSBET00gZWxlbWVudCB0aGF0IG1heSBoYXZlIHRoZSByZWFjdFJvb3QgSUQsIG9yIG51bGwuXG4gKi9cbmZ1bmN0aW9uIGdldFJlYWN0Um9vdEVsZW1lbnRJbkNvbnRhaW5lcihjb250YWluZXIpIHtcbiAgaWYgKCFjb250YWluZXIpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlmIChjb250YWluZXIubm9kZVR5cGUgPT09IERPQ19OT0RFX1RZUEUpIHtcbiAgICByZXR1cm4gY29udGFpbmVyLmRvY3VtZW50RWxlbWVudDtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gY29udGFpbmVyLmZpcnN0Q2hpbGQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gaW50ZXJuYWxHZXRJRChub2RlKSB7XG4gIC8vIElmIG5vZGUgaXMgc29tZXRoaW5nIGxpa2UgYSB3aW5kb3csIGRvY3VtZW50LCBvciB0ZXh0IG5vZGUsIG5vbmUgb2ZcbiAgLy8gd2hpY2ggc3VwcG9ydCBhdHRyaWJ1dGVzIG9yIGEgLmdldEF0dHJpYnV0ZSBtZXRob2QsIGdyYWNlZnVsbHkgcmV0dXJuXG4gIC8vIHRoZSBlbXB0eSBzdHJpbmcsIGFzIGlmIHRoZSBhdHRyaWJ1dGUgd2VyZSBtaXNzaW5nLlxuICByZXR1cm4gbm9kZS5nZXRBdHRyaWJ1dGUgJiYgbm9kZS5nZXRBdHRyaWJ1dGUoQVRUUl9OQU1FKSB8fCAnJztcbn1cblxuLyoqXG4gKiBNb3VudHMgdGhpcyBjb21wb25lbnQgYW5kIGluc2VydHMgaXQgaW50byB0aGUgRE9NLlxuICpcbiAqIEBwYXJhbSB7UmVhY3RDb21wb25lbnR9IGNvbXBvbmVudEluc3RhbmNlIFRoZSBpbnN0YW5jZSB0byBtb3VudC5cbiAqIEBwYXJhbSB7RE9NRWxlbWVudH0gY29udGFpbmVyIERPTSBlbGVtZW50IHRvIG1vdW50IGludG8uXG4gKiBAcGFyYW0ge1JlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb259IHRyYW5zYWN0aW9uXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHNob3VsZFJldXNlTWFya3VwIElmIHRydWUsIGRvIG5vdCBpbnNlcnQgbWFya3VwXG4gKi9cbmZ1bmN0aW9uIG1vdW50Q29tcG9uZW50SW50b05vZGUod3JhcHBlckluc3RhbmNlLCBjb250YWluZXIsIHRyYW5zYWN0aW9uLCBzaG91bGRSZXVzZU1hcmt1cCwgY29udGV4dCkge1xuICB2YXIgbWFya2VyTmFtZTtcbiAgaWYgKFJlYWN0RmVhdHVyZUZsYWdzLmxvZ1RvcExldmVsUmVuZGVycykge1xuICAgIHZhciB3cmFwcGVkRWxlbWVudCA9IHdyYXBwZXJJbnN0YW5jZS5fY3VycmVudEVsZW1lbnQucHJvcHMuY2hpbGQ7XG4gICAgdmFyIHR5cGUgPSB3cmFwcGVkRWxlbWVudC50eXBlO1xuICAgIG1hcmtlck5hbWUgPSAnUmVhY3QgbW91bnQ6ICcgKyAodHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnID8gdHlwZSA6IHR5cGUuZGlzcGxheU5hbWUgfHwgdHlwZS5uYW1lKTtcbiAgICBjb25zb2xlLnRpbWUobWFya2VyTmFtZSk7XG4gIH1cblxuICB2YXIgbWFya3VwID0gUmVhY3RSZWNvbmNpbGVyLm1vdW50Q29tcG9uZW50KHdyYXBwZXJJbnN0YW5jZSwgdHJhbnNhY3Rpb24sIG51bGwsIFJlYWN0RE9NQ29udGFpbmVySW5mbyh3cmFwcGVySW5zdGFuY2UsIGNvbnRhaW5lciksIGNvbnRleHQsIDAgLyogcGFyZW50RGVidWdJRCAqL1xuICApO1xuXG4gIGlmIChtYXJrZXJOYW1lKSB7XG4gICAgY29uc29sZS50aW1lRW5kKG1hcmtlck5hbWUpO1xuICB9XG5cbiAgd3JhcHBlckluc3RhbmNlLl9yZW5kZXJlZENvbXBvbmVudC5fdG9wTGV2ZWxXcmFwcGVyID0gd3JhcHBlckluc3RhbmNlO1xuICBSZWFjdE1vdW50Ll9tb3VudEltYWdlSW50b05vZGUobWFya3VwLCBjb250YWluZXIsIHdyYXBwZXJJbnN0YW5jZSwgc2hvdWxkUmV1c2VNYXJrdXAsIHRyYW5zYWN0aW9uKTtcbn1cblxuLyoqXG4gKiBCYXRjaGVkIG1vdW50LlxuICpcbiAqIEBwYXJhbSB7UmVhY3RDb21wb25lbnR9IGNvbXBvbmVudEluc3RhbmNlIFRoZSBpbnN0YW5jZSB0byBtb3VudC5cbiAqIEBwYXJhbSB7RE9NRWxlbWVudH0gY29udGFpbmVyIERPTSBlbGVtZW50IHRvIG1vdW50IGludG8uXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHNob3VsZFJldXNlTWFya3VwIElmIHRydWUsIGRvIG5vdCBpbnNlcnQgbWFya3VwXG4gKi9cbmZ1bmN0aW9uIGJhdGNoZWRNb3VudENvbXBvbmVudEludG9Ob2RlKGNvbXBvbmVudEluc3RhbmNlLCBjb250YWluZXIsIHNob3VsZFJldXNlTWFya3VwLCBjb250ZXh0KSB7XG4gIHZhciB0cmFuc2FjdGlvbiA9IFJlYWN0VXBkYXRlcy5SZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9uLmdldFBvb2xlZChcbiAgLyogdXNlQ3JlYXRlRWxlbWVudCAqL1xuICAhc2hvdWxkUmV1c2VNYXJrdXAgJiYgUmVhY3RET01GZWF0dXJlRmxhZ3MudXNlQ3JlYXRlRWxlbWVudCk7XG4gIHRyYW5zYWN0aW9uLnBlcmZvcm0obW91bnRDb21wb25lbnRJbnRvTm9kZSwgbnVsbCwgY29tcG9uZW50SW5zdGFuY2UsIGNvbnRhaW5lciwgdHJhbnNhY3Rpb24sIHNob3VsZFJldXNlTWFya3VwLCBjb250ZXh0KTtcbiAgUmVhY3RVcGRhdGVzLlJlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb24ucmVsZWFzZSh0cmFuc2FjdGlvbik7XG59XG5cbi8qKlxuICogVW5tb3VudHMgYSBjb21wb25lbnQgYW5kIHJlbW92ZXMgaXQgZnJvbSB0aGUgRE9NLlxuICpcbiAqIEBwYXJhbSB7UmVhY3RDb21wb25lbnR9IGluc3RhbmNlIFJlYWN0IGNvbXBvbmVudCBpbnN0YW5jZS5cbiAqIEBwYXJhbSB7RE9NRWxlbWVudH0gY29udGFpbmVyIERPTSBlbGVtZW50IHRvIHVubW91bnQgZnJvbS5cbiAqIEBmaW5hbFxuICogQGludGVybmFsXG4gKiBAc2VlIHtSZWFjdE1vdW50LnVubW91bnRDb21wb25lbnRBdE5vZGV9XG4gKi9cbmZ1bmN0aW9uIHVubW91bnRDb21wb25lbnRGcm9tTm9kZShpbnN0YW5jZSwgY29udGFpbmVyLCBzYWZlbHkpIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBSZWFjdEluc3RydW1lbnRhdGlvbi5kZWJ1Z1Rvb2wub25CZWdpbkZsdXNoKCk7XG4gIH1cbiAgUmVhY3RSZWNvbmNpbGVyLnVubW91bnRDb21wb25lbnQoaW5zdGFuY2UsIHNhZmVseSk7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgUmVhY3RJbnN0cnVtZW50YXRpb24uZGVidWdUb29sLm9uRW5kRmx1c2goKTtcbiAgfVxuXG4gIGlmIChjb250YWluZXIubm9kZVR5cGUgPT09IERPQ19OT0RFX1RZUEUpIHtcbiAgICBjb250YWluZXIgPSBjb250YWluZXIuZG9jdW1lbnRFbGVtZW50O1xuICB9XG5cbiAgLy8gaHR0cDovL2pzcGVyZi5jb20vZW1wdHlpbmctYS1ub2RlXG4gIHdoaWxlIChjb250YWluZXIubGFzdENoaWxkKSB7XG4gICAgY29udGFpbmVyLnJlbW92ZUNoaWxkKGNvbnRhaW5lci5sYXN0Q2hpbGQpO1xuICB9XG59XG5cbi8qKlxuICogVHJ1ZSBpZiB0aGUgc3VwcGxpZWQgRE9NIG5vZGUgaGFzIGEgZGlyZWN0IFJlYWN0LXJlbmRlcmVkIGNoaWxkIHRoYXQgaXNcbiAqIG5vdCBhIFJlYWN0IHJvb3QgZWxlbWVudC4gVXNlZnVsIGZvciB3YXJuaW5nIGluIGByZW5kZXJgLFxuICogYHVubW91bnRDb21wb25lbnRBdE5vZGVgLCBldGMuXG4gKlxuICogQHBhcmFtIHs/RE9NRWxlbWVudH0gbm9kZSBUaGUgY2FuZGlkYXRlIERPTSBub2RlLlxuICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgRE9NIGVsZW1lbnQgY29udGFpbnMgYSBkaXJlY3QgY2hpbGQgdGhhdCB3YXNcbiAqIHJlbmRlcmVkIGJ5IFJlYWN0IGJ1dCBpcyBub3QgYSByb290IGVsZW1lbnQuXG4gKiBAaW50ZXJuYWxcbiAqL1xuZnVuY3Rpb24gaGFzTm9uUm9vdFJlYWN0Q2hpbGQoY29udGFpbmVyKSB7XG4gIHZhciByb290RWwgPSBnZXRSZWFjdFJvb3RFbGVtZW50SW5Db250YWluZXIoY29udGFpbmVyKTtcbiAgaWYgKHJvb3RFbCkge1xuICAgIHZhciBpbnN0ID0gUmVhY3RET01Db21wb25lbnRUcmVlLmdldEluc3RhbmNlRnJvbU5vZGUocm9vdEVsKTtcbiAgICByZXR1cm4gISEoaW5zdCAmJiBpbnN0Ll9ob3N0UGFyZW50KTtcbiAgfVxufVxuXG4vKipcbiAqIFRydWUgaWYgdGhlIHN1cHBsaWVkIERPTSBub2RlIGlzIGEgUmVhY3QgRE9NIGVsZW1lbnQgYW5kXG4gKiBpdCBoYXMgYmVlbiByZW5kZXJlZCBieSBhbm90aGVyIGNvcHkgb2YgUmVhY3QuXG4gKlxuICogQHBhcmFtIHs/RE9NRWxlbWVudH0gbm9kZSBUaGUgY2FuZGlkYXRlIERPTSBub2RlLlxuICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgRE9NIGhhcyBiZWVuIHJlbmRlcmVkIGJ5IGFub3RoZXIgY29weSBvZiBSZWFjdFxuICogQGludGVybmFsXG4gKi9cbmZ1bmN0aW9uIG5vZGVJc1JlbmRlcmVkQnlPdGhlckluc3RhbmNlKGNvbnRhaW5lcikge1xuICB2YXIgcm9vdEVsID0gZ2V0UmVhY3RSb290RWxlbWVudEluQ29udGFpbmVyKGNvbnRhaW5lcik7XG4gIHJldHVybiAhIShyb290RWwgJiYgaXNSZWFjdE5vZGUocm9vdEVsKSAmJiAhUmVhY3RET01Db21wb25lbnRUcmVlLmdldEluc3RhbmNlRnJvbU5vZGUocm9vdEVsKSk7XG59XG5cbi8qKlxuICogVHJ1ZSBpZiB0aGUgc3VwcGxpZWQgRE9NIG5vZGUgaXMgYSB2YWxpZCBub2RlIGVsZW1lbnQuXG4gKlxuICogQHBhcmFtIHs/RE9NRWxlbWVudH0gbm9kZSBUaGUgY2FuZGlkYXRlIERPTSBub2RlLlxuICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgRE9NIGlzIGEgdmFsaWQgRE9NIG5vZGUuXG4gKiBAaW50ZXJuYWxcbiAqL1xuZnVuY3Rpb24gaXNWYWxpZENvbnRhaW5lcihub2RlKSB7XG4gIHJldHVybiAhIShub2RlICYmIChub2RlLm5vZGVUeXBlID09PSBFTEVNRU5UX05PREVfVFlQRSB8fCBub2RlLm5vZGVUeXBlID09PSBET0NfTk9ERV9UWVBFIHx8IG5vZGUubm9kZVR5cGUgPT09IERPQ1VNRU5UX0ZSQUdNRU5UX05PREVfVFlQRSkpO1xufVxuXG4vKipcbiAqIFRydWUgaWYgdGhlIHN1cHBsaWVkIERPTSBub2RlIGlzIGEgdmFsaWQgUmVhY3Qgbm9kZSBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSB7P0RPTUVsZW1lbnR9IG5vZGUgVGhlIGNhbmRpZGF0ZSBET00gbm9kZS5cbiAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdGhlIERPTSBpcyBhIHZhbGlkIFJlYWN0IERPTSBub2RlLlxuICogQGludGVybmFsXG4gKi9cbmZ1bmN0aW9uIGlzUmVhY3ROb2RlKG5vZGUpIHtcbiAgcmV0dXJuIGlzVmFsaWRDb250YWluZXIobm9kZSkgJiYgKG5vZGUuaGFzQXR0cmlidXRlKFJPT1RfQVRUUl9OQU1FKSB8fCBub2RlLmhhc0F0dHJpYnV0ZShBVFRSX05BTUUpKTtcbn1cblxuZnVuY3Rpb24gZ2V0SG9zdFJvb3RJbnN0YW5jZUluQ29udGFpbmVyKGNvbnRhaW5lcikge1xuICB2YXIgcm9vdEVsID0gZ2V0UmVhY3RSb290RWxlbWVudEluQ29udGFpbmVyKGNvbnRhaW5lcik7XG4gIHZhciBwcmV2SG9zdEluc3RhbmNlID0gcm9vdEVsICYmIFJlYWN0RE9NQ29tcG9uZW50VHJlZS5nZXRJbnN0YW5jZUZyb21Ob2RlKHJvb3RFbCk7XG4gIHJldHVybiBwcmV2SG9zdEluc3RhbmNlICYmICFwcmV2SG9zdEluc3RhbmNlLl9ob3N0UGFyZW50ID8gcHJldkhvc3RJbnN0YW5jZSA6IG51bGw7XG59XG5cbmZ1bmN0aW9uIGdldFRvcExldmVsV3JhcHBlckluQ29udGFpbmVyKGNvbnRhaW5lcikge1xuICB2YXIgcm9vdCA9IGdldEhvc3RSb290SW5zdGFuY2VJbkNvbnRhaW5lcihjb250YWluZXIpO1xuICByZXR1cm4gcm9vdCA/IHJvb3QuX2hvc3RDb250YWluZXJJbmZvLl90b3BMZXZlbFdyYXBwZXIgOiBudWxsO1xufVxuXG4vKipcbiAqIFRlbXBvcmFyeSAoPykgaGFjayBzbyB0aGF0IHdlIGNhbiBzdG9yZSBhbGwgdG9wLWxldmVsIHBlbmRpbmcgdXBkYXRlcyBvblxuICogY29tcG9zaXRlcyBpbnN0ZWFkIG9mIGhhdmluZyB0byB3b3JyeSBhYm91dCBkaWZmZXJlbnQgdHlwZXMgb2YgY29tcG9uZW50c1xuICogaGVyZS5cbiAqL1xudmFyIHRvcExldmVsUm9vdENvdW50ZXIgPSAxO1xudmFyIFRvcExldmVsV3JhcHBlciA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5yb290SUQgPSB0b3BMZXZlbFJvb3RDb3VudGVyKys7XG59O1xuVG9wTGV2ZWxXcmFwcGVyLnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50ID0ge307XG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBUb3BMZXZlbFdyYXBwZXIuZGlzcGxheU5hbWUgPSAnVG9wTGV2ZWxXcmFwcGVyJztcbn1cblRvcExldmVsV3JhcHBlci5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5wcm9wcy5jaGlsZDtcbn07XG5Ub3BMZXZlbFdyYXBwZXIuaXNSZWFjdFRvcExldmVsV3JhcHBlciA9IHRydWU7XG5cbi8qKlxuICogTW91bnRpbmcgaXMgdGhlIHByb2Nlc3Mgb2YgaW5pdGlhbGl6aW5nIGEgUmVhY3QgY29tcG9uZW50IGJ5IGNyZWF0aW5nIGl0c1xuICogcmVwcmVzZW50YXRpdmUgRE9NIGVsZW1lbnRzIGFuZCBpbnNlcnRpbmcgdGhlbSBpbnRvIGEgc3VwcGxpZWQgYGNvbnRhaW5lcmAuXG4gKiBBbnkgcHJpb3IgY29udGVudCBpbnNpZGUgYGNvbnRhaW5lcmAgaXMgZGVzdHJveWVkIGluIHRoZSBwcm9jZXNzLlxuICpcbiAqICAgUmVhY3RNb3VudC5yZW5kZXIoXG4gKiAgICAgY29tcG9uZW50LFxuICogICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb250YWluZXInKVxuICogICApO1xuICpcbiAqICAgPGRpdiBpZD1cImNvbnRhaW5lclwiPiAgICAgICAgICAgICAgICAgICA8LS0gU3VwcGxpZWQgYGNvbnRhaW5lcmAuXG4gKiAgICAgPGRpdiBkYXRhLXJlYWN0aWQ9XCIuM1wiPiAgICAgICAgICAgICAgPC0tIFJlbmRlcmVkIHJlYWN0Um9vdCBvZiBSZWFjdFxuICogICAgICAgLy8gLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50LlxuICogICAgIDwvZGl2PlxuICogICA8L2Rpdj5cbiAqXG4gKiBJbnNpZGUgb2YgYGNvbnRhaW5lcmAsIHRoZSBmaXJzdCBlbGVtZW50IHJlbmRlcmVkIGlzIHRoZSBcInJlYWN0Um9vdFwiLlxuICovXG52YXIgUmVhY3RNb3VudCA9IHtcbiAgVG9wTGV2ZWxXcmFwcGVyOiBUb3BMZXZlbFdyYXBwZXIsXG5cbiAgLyoqXG4gICAqIFVzZWQgYnkgZGV2dG9vbHMuIFRoZSBrZXlzIGFyZSBub3QgaW1wb3J0YW50LlxuICAgKi9cbiAgX2luc3RhbmNlc0J5UmVhY3RSb290SUQ6IGluc3RhbmNlc0J5UmVhY3RSb290SUQsXG5cbiAgLyoqXG4gICAqIFRoaXMgaXMgYSBob29rIHByb3ZpZGVkIHRvIHN1cHBvcnQgcmVuZGVyaW5nIFJlYWN0IGNvbXBvbmVudHMgd2hpbGVcbiAgICogZW5zdXJpbmcgdGhhdCB0aGUgYXBwYXJlbnQgc2Nyb2xsIHBvc2l0aW9uIG9mIGl0cyBgY29udGFpbmVyYCBkb2VzIG5vdFxuICAgKiBjaGFuZ2UuXG4gICAqXG4gICAqIEBwYXJhbSB7RE9NRWxlbWVudH0gY29udGFpbmVyIFRoZSBgY29udGFpbmVyYCBiZWluZyByZW5kZXJlZCBpbnRvLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSByZW5kZXJDYWxsYmFjayBUaGlzIG11c3QgYmUgY2FsbGVkIG9uY2UgdG8gZG8gdGhlIHJlbmRlci5cbiAgICovXG4gIHNjcm9sbE1vbml0b3I6IGZ1bmN0aW9uIChjb250YWluZXIsIHJlbmRlckNhbGxiYWNrKSB7XG4gICAgcmVuZGVyQ2FsbGJhY2soKTtcbiAgfSxcblxuICAvKipcbiAgICogVGFrZSBhIGNvbXBvbmVudCB0aGF0J3MgYWxyZWFkeSBtb3VudGVkIGludG8gdGhlIERPTSBhbmQgcmVwbGFjZSBpdHMgcHJvcHNcbiAgICogQHBhcmFtIHtSZWFjdENvbXBvbmVudH0gcHJldkNvbXBvbmVudCBjb21wb25lbnQgaW5zdGFuY2UgYWxyZWFkeSBpbiB0aGUgRE9NXG4gICAqIEBwYXJhbSB7UmVhY3RFbGVtZW50fSBuZXh0RWxlbWVudCBjb21wb25lbnQgaW5zdGFuY2UgdG8gcmVuZGVyXG4gICAqIEBwYXJhbSB7RE9NRWxlbWVudH0gY29udGFpbmVyIGNvbnRhaW5lciB0byByZW5kZXIgaW50b1xuICAgKiBAcGFyYW0gez9mdW5jdGlvbn0gY2FsbGJhY2sgZnVuY3Rpb24gdHJpZ2dlcmVkIG9uIGNvbXBsZXRpb25cbiAgICovXG4gIF91cGRhdGVSb290Q29tcG9uZW50OiBmdW5jdGlvbiAocHJldkNvbXBvbmVudCwgbmV4dEVsZW1lbnQsIG5leHRDb250ZXh0LCBjb250YWluZXIsIGNhbGxiYWNrKSB7XG4gICAgUmVhY3RNb3VudC5zY3JvbGxNb25pdG9yKGNvbnRhaW5lciwgZnVuY3Rpb24gKCkge1xuICAgICAgUmVhY3RVcGRhdGVRdWV1ZS5lbnF1ZXVlRWxlbWVudEludGVybmFsKHByZXZDb21wb25lbnQsIG5leHRFbGVtZW50LCBuZXh0Q29udGV4dCk7XG4gICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgUmVhY3RVcGRhdGVRdWV1ZS5lbnF1ZXVlQ2FsbGJhY2tJbnRlcm5hbChwcmV2Q29tcG9uZW50LCBjYWxsYmFjayk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gcHJldkNvbXBvbmVudDtcbiAgfSxcblxuICAvKipcbiAgICogUmVuZGVyIGEgbmV3IGNvbXBvbmVudCBpbnRvIHRoZSBET00uIEhvb2tlZCBieSBob29rcyFcbiAgICpcbiAgICogQHBhcmFtIHtSZWFjdEVsZW1lbnR9IG5leHRFbGVtZW50IGVsZW1lbnQgdG8gcmVuZGVyXG4gICAqIEBwYXJhbSB7RE9NRWxlbWVudH0gY29udGFpbmVyIGNvbnRhaW5lciB0byByZW5kZXIgaW50b1xuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNob3VsZFJldXNlTWFya3VwIGlmIHdlIHNob3VsZCBza2lwIHRoZSBtYXJrdXAgaW5zZXJ0aW9uXG4gICAqIEByZXR1cm4ge1JlYWN0Q29tcG9uZW50fSBuZXh0Q29tcG9uZW50XG4gICAqL1xuICBfcmVuZGVyTmV3Um9vdENvbXBvbmVudDogZnVuY3Rpb24gKG5leHRFbGVtZW50LCBjb250YWluZXIsIHNob3VsZFJldXNlTWFya3VwLCBjb250ZXh0KSB7XG4gICAgLy8gVmFyaW91cyBwYXJ0cyBvZiBvdXIgY29kZSAoc3VjaCBhcyBSZWFjdENvbXBvc2l0ZUNvbXBvbmVudCdzXG4gICAgLy8gX3JlbmRlclZhbGlkYXRlZENvbXBvbmVudCkgYXNzdW1lIHRoYXQgY2FsbHMgdG8gcmVuZGVyIGFyZW4ndCBuZXN0ZWQ7XG4gICAgLy8gdmVyaWZ5IHRoYXQgdGhhdCdzIHRoZSBjYXNlLlxuICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQgPT0gbnVsbCwgJ19yZW5kZXJOZXdSb290Q29tcG9uZW50KCk6IFJlbmRlciBtZXRob2RzIHNob3VsZCBiZSBhIHB1cmUgZnVuY3Rpb24gJyArICdvZiBwcm9wcyBhbmQgc3RhdGU7IHRyaWdnZXJpbmcgbmVzdGVkIGNvbXBvbmVudCB1cGRhdGVzIGZyb20gJyArICdyZW5kZXIgaXMgbm90IGFsbG93ZWQuIElmIG5lY2Vzc2FyeSwgdHJpZ2dlciBuZXN0ZWQgdXBkYXRlcyBpbiAnICsgJ2NvbXBvbmVudERpZFVwZGF0ZS4gQ2hlY2sgdGhlIHJlbmRlciBtZXRob2Qgb2YgJXMuJywgUmVhY3RDdXJyZW50T3duZXIuY3VycmVudCAmJiBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50LmdldE5hbWUoKSB8fCAnUmVhY3RDb21wb3NpdGVDb21wb25lbnQnKSA6IHZvaWQgMDtcblxuICAgICFpc1ZhbGlkQ29udGFpbmVyKGNvbnRhaW5lcikgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAnX3JlZ2lzdGVyQ29tcG9uZW50KC4uLik6IFRhcmdldCBjb250YWluZXIgaXMgbm90IGEgRE9NIGVsZW1lbnQuJykgOiBfcHJvZEludmFyaWFudCgnMzcnKSA6IHZvaWQgMDtcblxuICAgIFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlci5lbnN1cmVTY3JvbGxWYWx1ZU1vbml0b3JpbmcoKTtcbiAgICB2YXIgY29tcG9uZW50SW5zdGFuY2UgPSBpbnN0YW50aWF0ZVJlYWN0Q29tcG9uZW50KG5leHRFbGVtZW50LCBmYWxzZSk7XG5cbiAgICAvLyBUaGUgaW5pdGlhbCByZW5kZXIgaXMgc3luY2hyb25vdXMgYnV0IGFueSB1cGRhdGVzIHRoYXQgaGFwcGVuIGR1cmluZ1xuICAgIC8vIHJlbmRlcmluZywgaW4gY29tcG9uZW50V2lsbE1vdW50IG9yIGNvbXBvbmVudERpZE1vdW50LCB3aWxsIGJlIGJhdGNoZWRcbiAgICAvLyBhY2NvcmRpbmcgdG8gdGhlIGN1cnJlbnQgYmF0Y2hpbmcgc3RyYXRlZ3kuXG5cbiAgICBSZWFjdFVwZGF0ZXMuYmF0Y2hlZFVwZGF0ZXMoYmF0Y2hlZE1vdW50Q29tcG9uZW50SW50b05vZGUsIGNvbXBvbmVudEluc3RhbmNlLCBjb250YWluZXIsIHNob3VsZFJldXNlTWFya3VwLCBjb250ZXh0KTtcblxuICAgIHZhciB3cmFwcGVySUQgPSBjb21wb25lbnRJbnN0YW5jZS5faW5zdGFuY2Uucm9vdElEO1xuICAgIGluc3RhbmNlc0J5UmVhY3RSb290SURbd3JhcHBlcklEXSA9IGNvbXBvbmVudEluc3RhbmNlO1xuXG4gICAgcmV0dXJuIGNvbXBvbmVudEluc3RhbmNlO1xuICB9LFxuXG4gIC8qKlxuICAgKiBSZW5kZXJzIGEgUmVhY3QgY29tcG9uZW50IGludG8gdGhlIERPTSBpbiB0aGUgc3VwcGxpZWQgYGNvbnRhaW5lcmAuXG4gICAqXG4gICAqIElmIHRoZSBSZWFjdCBjb21wb25lbnQgd2FzIHByZXZpb3VzbHkgcmVuZGVyZWQgaW50byBgY29udGFpbmVyYCwgdGhpcyB3aWxsXG4gICAqIHBlcmZvcm0gYW4gdXBkYXRlIG9uIGl0IGFuZCBvbmx5IG11dGF0ZSB0aGUgRE9NIGFzIG5lY2Vzc2FyeSB0byByZWZsZWN0IHRoZVxuICAgKiBsYXRlc3QgUmVhY3QgY29tcG9uZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0Q29tcG9uZW50fSBwYXJlbnRDb21wb25lbnQgVGhlIGNvbmNlcHR1YWwgcGFyZW50IG9mIHRoaXMgcmVuZGVyIHRyZWUuXG4gICAqIEBwYXJhbSB7UmVhY3RFbGVtZW50fSBuZXh0RWxlbWVudCBDb21wb25lbnQgZWxlbWVudCB0byByZW5kZXIuXG4gICAqIEBwYXJhbSB7RE9NRWxlbWVudH0gY29udGFpbmVyIERPTSBlbGVtZW50IHRvIHJlbmRlciBpbnRvLlxuICAgKiBAcGFyYW0gez9mdW5jdGlvbn0gY2FsbGJhY2sgZnVuY3Rpb24gdHJpZ2dlcmVkIG9uIGNvbXBsZXRpb25cbiAgICogQHJldHVybiB7UmVhY3RDb21wb25lbnR9IENvbXBvbmVudCBpbnN0YW5jZSByZW5kZXJlZCBpbiBgY29udGFpbmVyYC5cbiAgICovXG4gIHJlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyOiBmdW5jdGlvbiAocGFyZW50Q29tcG9uZW50LCBuZXh0RWxlbWVudCwgY29udGFpbmVyLCBjYWxsYmFjaykge1xuICAgICEocGFyZW50Q29tcG9uZW50ICE9IG51bGwgJiYgUmVhY3RJbnN0YW5jZU1hcC5oYXMocGFyZW50Q29tcG9uZW50KSkgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAncGFyZW50Q29tcG9uZW50IG11c3QgYmUgYSB2YWxpZCBSZWFjdCBDb21wb25lbnQnKSA6IF9wcm9kSW52YXJpYW50KCczOCcpIDogdm9pZCAwO1xuICAgIHJldHVybiBSZWFjdE1vdW50Ll9yZW5kZXJTdWJ0cmVlSW50b0NvbnRhaW5lcihwYXJlbnRDb21wb25lbnQsIG5leHRFbGVtZW50LCBjb250YWluZXIsIGNhbGxiYWNrKTtcbiAgfSxcblxuICBfcmVuZGVyU3VidHJlZUludG9Db250YWluZXI6IGZ1bmN0aW9uIChwYXJlbnRDb21wb25lbnQsIG5leHRFbGVtZW50LCBjb250YWluZXIsIGNhbGxiYWNrKSB7XG4gICAgUmVhY3RVcGRhdGVRdWV1ZS52YWxpZGF0ZUNhbGxiYWNrKGNhbGxiYWNrLCAnUmVhY3RET00ucmVuZGVyJyk7XG4gICAgIVJlYWN0LmlzVmFsaWRFbGVtZW50KG5leHRFbGVtZW50KSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICdSZWFjdERPTS5yZW5kZXIoKTogSW52YWxpZCBjb21wb25lbnQgZWxlbWVudC4lcycsIHR5cGVvZiBuZXh0RWxlbWVudCA9PT0gJ3N0cmluZycgPyBcIiBJbnN0ZWFkIG9mIHBhc3NpbmcgYSBzdHJpbmcgbGlrZSAnZGl2JywgcGFzcyBcIiArIFwiUmVhY3QuY3JlYXRlRWxlbWVudCgnZGl2Jykgb3IgPGRpdiAvPi5cIiA6IHR5cGVvZiBuZXh0RWxlbWVudCA9PT0gJ2Z1bmN0aW9uJyA/ICcgSW5zdGVhZCBvZiBwYXNzaW5nIGEgY2xhc3MgbGlrZSBGb28sIHBhc3MgJyArICdSZWFjdC5jcmVhdGVFbGVtZW50KEZvbykgb3IgPEZvbyAvPi4nIDogLy8gQ2hlY2sgaWYgaXQgcXVhY2tzIGxpa2UgYW4gZWxlbWVudFxuICAgIG5leHRFbGVtZW50ICE9IG51bGwgJiYgbmV4dEVsZW1lbnQucHJvcHMgIT09IHVuZGVmaW5lZCA/ICcgVGhpcyBtYXkgYmUgY2F1c2VkIGJ5IHVuaW50ZW50aW9uYWxseSBsb2FkaW5nIHR3byBpbmRlcGVuZGVudCAnICsgJ2NvcGllcyBvZiBSZWFjdC4nIDogJycpIDogX3Byb2RJbnZhcmlhbnQoJzM5JywgdHlwZW9mIG5leHRFbGVtZW50ID09PSAnc3RyaW5nJyA/IFwiIEluc3RlYWQgb2YgcGFzc2luZyBhIHN0cmluZyBsaWtlICdkaXYnLCBwYXNzIFwiICsgXCJSZWFjdC5jcmVhdGVFbGVtZW50KCdkaXYnKSBvciA8ZGl2IC8+LlwiIDogdHlwZW9mIG5leHRFbGVtZW50ID09PSAnZnVuY3Rpb24nID8gJyBJbnN0ZWFkIG9mIHBhc3NpbmcgYSBjbGFzcyBsaWtlIEZvbywgcGFzcyAnICsgJ1JlYWN0LmNyZWF0ZUVsZW1lbnQoRm9vKSBvciA8Rm9vIC8+LicgOiBuZXh0RWxlbWVudCAhPSBudWxsICYmIG5leHRFbGVtZW50LnByb3BzICE9PSB1bmRlZmluZWQgPyAnIFRoaXMgbWF5IGJlIGNhdXNlZCBieSB1bmludGVudGlvbmFsbHkgbG9hZGluZyB0d28gaW5kZXBlbmRlbnQgJyArICdjb3BpZXMgb2YgUmVhY3QuJyA6ICcnKSA6IHZvaWQgMDtcblxuICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKCFjb250YWluZXIgfHwgIWNvbnRhaW5lci50YWdOYW1lIHx8IGNvbnRhaW5lci50YWdOYW1lLnRvVXBwZXJDYXNlKCkgIT09ICdCT0RZJywgJ3JlbmRlcigpOiBSZW5kZXJpbmcgY29tcG9uZW50cyBkaXJlY3RseSBpbnRvIGRvY3VtZW50LmJvZHkgaXMgJyArICdkaXNjb3VyYWdlZCwgc2luY2UgaXRzIGNoaWxkcmVuIGFyZSBvZnRlbiBtYW5pcHVsYXRlZCBieSB0aGlyZC1wYXJ0eSAnICsgJ3NjcmlwdHMgYW5kIGJyb3dzZXIgZXh0ZW5zaW9ucy4gVGhpcyBtYXkgbGVhZCB0byBzdWJ0bGUgJyArICdyZWNvbmNpbGlhdGlvbiBpc3N1ZXMuIFRyeSByZW5kZXJpbmcgaW50byBhIGNvbnRhaW5lciBlbGVtZW50IGNyZWF0ZWQgJyArICdmb3IgeW91ciBhcHAuJykgOiB2b2lkIDA7XG5cbiAgICB2YXIgbmV4dFdyYXBwZWRFbGVtZW50ID0gUmVhY3QuY3JlYXRlRWxlbWVudChUb3BMZXZlbFdyYXBwZXIsIHtcbiAgICAgIGNoaWxkOiBuZXh0RWxlbWVudFxuICAgIH0pO1xuXG4gICAgdmFyIG5leHRDb250ZXh0O1xuICAgIGlmIChwYXJlbnRDb21wb25lbnQpIHtcbiAgICAgIHZhciBwYXJlbnRJbnN0ID0gUmVhY3RJbnN0YW5jZU1hcC5nZXQocGFyZW50Q29tcG9uZW50KTtcbiAgICAgIG5leHRDb250ZXh0ID0gcGFyZW50SW5zdC5fcHJvY2Vzc0NoaWxkQ29udGV4dChwYXJlbnRJbnN0Ll9jb250ZXh0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV4dENvbnRleHQgPSBlbXB0eU9iamVjdDtcbiAgICB9XG5cbiAgICB2YXIgcHJldkNvbXBvbmVudCA9IGdldFRvcExldmVsV3JhcHBlckluQ29udGFpbmVyKGNvbnRhaW5lcik7XG5cbiAgICBpZiAocHJldkNvbXBvbmVudCkge1xuICAgICAgdmFyIHByZXZXcmFwcGVkRWxlbWVudCA9IHByZXZDb21wb25lbnQuX2N1cnJlbnRFbGVtZW50O1xuICAgICAgdmFyIHByZXZFbGVtZW50ID0gcHJldldyYXBwZWRFbGVtZW50LnByb3BzLmNoaWxkO1xuICAgICAgaWYgKHNob3VsZFVwZGF0ZVJlYWN0Q29tcG9uZW50KHByZXZFbGVtZW50LCBuZXh0RWxlbWVudCkpIHtcbiAgICAgICAgdmFyIHB1YmxpY0luc3QgPSBwcmV2Q29tcG9uZW50Ll9yZW5kZXJlZENvbXBvbmVudC5nZXRQdWJsaWNJbnN0YW5jZSgpO1xuICAgICAgICB2YXIgdXBkYXRlZENhbGxiYWNrID0gY2FsbGJhY2sgJiYgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGNhbGxiYWNrLmNhbGwocHVibGljSW5zdCk7XG4gICAgICAgIH07XG4gICAgICAgIFJlYWN0TW91bnQuX3VwZGF0ZVJvb3RDb21wb25lbnQocHJldkNvbXBvbmVudCwgbmV4dFdyYXBwZWRFbGVtZW50LCBuZXh0Q29udGV4dCwgY29udGFpbmVyLCB1cGRhdGVkQ2FsbGJhY2spO1xuICAgICAgICByZXR1cm4gcHVibGljSW5zdDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIFJlYWN0TW91bnQudW5tb3VudENvbXBvbmVudEF0Tm9kZShjb250YWluZXIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciByZWFjdFJvb3RFbGVtZW50ID0gZ2V0UmVhY3RSb290RWxlbWVudEluQ29udGFpbmVyKGNvbnRhaW5lcik7XG4gICAgdmFyIGNvbnRhaW5lckhhc1JlYWN0TWFya3VwID0gcmVhY3RSb290RWxlbWVudCAmJiAhIWludGVybmFsR2V0SUQocmVhY3RSb290RWxlbWVudCk7XG4gICAgdmFyIGNvbnRhaW5lckhhc05vblJvb3RSZWFjdENoaWxkID0gaGFzTm9uUm9vdFJlYWN0Q2hpbGQoY29udGFpbmVyKTtcblxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyghY29udGFpbmVySGFzTm9uUm9vdFJlYWN0Q2hpbGQsICdyZW5kZXIoLi4uKTogUmVwbGFjaW5nIFJlYWN0LXJlbmRlcmVkIGNoaWxkcmVuIHdpdGggYSBuZXcgcm9vdCAnICsgJ2NvbXBvbmVudC4gSWYgeW91IGludGVuZGVkIHRvIHVwZGF0ZSB0aGUgY2hpbGRyZW4gb2YgdGhpcyBub2RlLCAnICsgJ3lvdSBzaG91bGQgaW5zdGVhZCBoYXZlIHRoZSBleGlzdGluZyBjaGlsZHJlbiB1cGRhdGUgdGhlaXIgc3RhdGUgJyArICdhbmQgcmVuZGVyIHRoZSBuZXcgY29tcG9uZW50cyBpbnN0ZWFkIG9mIGNhbGxpbmcgUmVhY3RET00ucmVuZGVyLicpIDogdm9pZCAwO1xuXG4gICAgICBpZiAoIWNvbnRhaW5lckhhc1JlYWN0TWFya3VwIHx8IHJlYWN0Um9vdEVsZW1lbnQubmV4dFNpYmxpbmcpIHtcbiAgICAgICAgdmFyIHJvb3RFbGVtZW50U2libGluZyA9IHJlYWN0Um9vdEVsZW1lbnQ7XG4gICAgICAgIHdoaWxlIChyb290RWxlbWVudFNpYmxpbmcpIHtcbiAgICAgICAgICBpZiAoaW50ZXJuYWxHZXRJRChyb290RWxlbWVudFNpYmxpbmcpKSB7XG4gICAgICAgICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyhmYWxzZSwgJ3JlbmRlcigpOiBUYXJnZXQgbm9kZSBoYXMgbWFya3VwIHJlbmRlcmVkIGJ5IFJlYWN0LCBidXQgdGhlcmUgJyArICdhcmUgdW5yZWxhdGVkIG5vZGVzIGFzIHdlbGwuIFRoaXMgaXMgbW9zdCBjb21tb25seSBjYXVzZWQgYnkgJyArICd3aGl0ZS1zcGFjZSBpbnNlcnRlZCBhcm91bmQgc2VydmVyLXJlbmRlcmVkIG1hcmt1cC4nKSA6IHZvaWQgMDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICByb290RWxlbWVudFNpYmxpbmcgPSByb290RWxlbWVudFNpYmxpbmcubmV4dFNpYmxpbmc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgc2hvdWxkUmV1c2VNYXJrdXAgPSBjb250YWluZXJIYXNSZWFjdE1hcmt1cCAmJiAhcHJldkNvbXBvbmVudCAmJiAhY29udGFpbmVySGFzTm9uUm9vdFJlYWN0Q2hpbGQ7XG4gICAgdmFyIGNvbXBvbmVudCA9IFJlYWN0TW91bnQuX3JlbmRlck5ld1Jvb3RDb21wb25lbnQobmV4dFdyYXBwZWRFbGVtZW50LCBjb250YWluZXIsIHNob3VsZFJldXNlTWFya3VwLCBuZXh0Q29udGV4dCkuX3JlbmRlcmVkQ29tcG9uZW50LmdldFB1YmxpY0luc3RhbmNlKCk7XG4gICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICBjYWxsYmFjay5jYWxsKGNvbXBvbmVudCk7XG4gICAgfVxuICAgIHJldHVybiBjb21wb25lbnQ7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgYSBSZWFjdCBjb21wb25lbnQgaW50byB0aGUgRE9NIGluIHRoZSBzdXBwbGllZCBgY29udGFpbmVyYC5cbiAgICogU2VlIGh0dHBzOi8vZmFjZWJvb2suZ2l0aHViLmlvL3JlYWN0L2RvY3MvdG9wLWxldmVsLWFwaS5odG1sI3JlYWN0ZG9tLnJlbmRlclxuICAgKlxuICAgKiBJZiB0aGUgUmVhY3QgY29tcG9uZW50IHdhcyBwcmV2aW91c2x5IHJlbmRlcmVkIGludG8gYGNvbnRhaW5lcmAsIHRoaXMgd2lsbFxuICAgKiBwZXJmb3JtIGFuIHVwZGF0ZSBvbiBpdCBhbmQgb25seSBtdXRhdGUgdGhlIERPTSBhcyBuZWNlc3NhcnkgdG8gcmVmbGVjdCB0aGVcbiAgICogbGF0ZXN0IFJlYWN0IGNvbXBvbmVudC5cbiAgICpcbiAgICogQHBhcmFtIHtSZWFjdEVsZW1lbnR9IG5leHRFbGVtZW50IENvbXBvbmVudCBlbGVtZW50IHRvIHJlbmRlci5cbiAgICogQHBhcmFtIHtET01FbGVtZW50fSBjb250YWluZXIgRE9NIGVsZW1lbnQgdG8gcmVuZGVyIGludG8uXG4gICAqIEBwYXJhbSB7P2Z1bmN0aW9ufSBjYWxsYmFjayBmdW5jdGlvbiB0cmlnZ2VyZWQgb24gY29tcGxldGlvblxuICAgKiBAcmV0dXJuIHtSZWFjdENvbXBvbmVudH0gQ29tcG9uZW50IGluc3RhbmNlIHJlbmRlcmVkIGluIGBjb250YWluZXJgLlxuICAgKi9cbiAgcmVuZGVyOiBmdW5jdGlvbiAobmV4dEVsZW1lbnQsIGNvbnRhaW5lciwgY2FsbGJhY2spIHtcbiAgICByZXR1cm4gUmVhY3RNb3VudC5fcmVuZGVyU3VidHJlZUludG9Db250YWluZXIobnVsbCwgbmV4dEVsZW1lbnQsIGNvbnRhaW5lciwgY2FsbGJhY2spO1xuICB9LFxuXG4gIC8qKlxuICAgKiBVbm1vdW50cyBhbmQgZGVzdHJveXMgdGhlIFJlYWN0IGNvbXBvbmVudCByZW5kZXJlZCBpbiB0aGUgYGNvbnRhaW5lcmAuXG4gICAqIFNlZSBodHRwczovL2ZhY2Vib29rLmdpdGh1Yi5pby9yZWFjdC9kb2NzL3RvcC1sZXZlbC1hcGkuaHRtbCNyZWFjdGRvbS51bm1vdW50Y29tcG9uZW50YXRub2RlXG4gICAqXG4gICAqIEBwYXJhbSB7RE9NRWxlbWVudH0gY29udGFpbmVyIERPTSBlbGVtZW50IGNvbnRhaW5pbmcgYSBSZWFjdCBjb21wb25lbnQuXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgYSBjb21wb25lbnQgd2FzIGZvdW5kIGluIGFuZCB1bm1vdW50ZWQgZnJvbVxuICAgKiAgICAgICAgICAgICAgICAgICBgY29udGFpbmVyYFxuICAgKi9cbiAgdW5tb3VudENvbXBvbmVudEF0Tm9kZTogZnVuY3Rpb24gKGNvbnRhaW5lcikge1xuICAgIC8vIFZhcmlvdXMgcGFydHMgb2Ygb3VyIGNvZGUgKHN1Y2ggYXMgUmVhY3RDb21wb3NpdGVDb21wb25lbnQnc1xuICAgIC8vIF9yZW5kZXJWYWxpZGF0ZWRDb21wb25lbnQpIGFzc3VtZSB0aGF0IGNhbGxzIHRvIHJlbmRlciBhcmVuJ3QgbmVzdGVkO1xuICAgIC8vIHZlcmlmeSB0aGF0IHRoYXQncyB0aGUgY2FzZS4gKFN0cmljdGx5IHNwZWFraW5nLCB1bm1vdW50aW5nIHdvbid0IGNhdXNlIGFcbiAgICAvLyByZW5kZXIgYnV0IHdlIHN0aWxsIGRvbid0IGV4cGVjdCB0byBiZSBpbiBhIHJlbmRlciBjYWxsIGhlcmUuKVxuICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQgPT0gbnVsbCwgJ3VubW91bnRDb21wb25lbnRBdE5vZGUoKTogUmVuZGVyIG1ldGhvZHMgc2hvdWxkIGJlIGEgcHVyZSBmdW5jdGlvbiAnICsgJ29mIHByb3BzIGFuZCBzdGF0ZTsgdHJpZ2dlcmluZyBuZXN0ZWQgY29tcG9uZW50IHVwZGF0ZXMgZnJvbSByZW5kZXIgJyArICdpcyBub3QgYWxsb3dlZC4gSWYgbmVjZXNzYXJ5LCB0cmlnZ2VyIG5lc3RlZCB1cGRhdGVzIGluICcgKyAnY29tcG9uZW50RGlkVXBkYXRlLiBDaGVjayB0aGUgcmVuZGVyIG1ldGhvZCBvZiAlcy4nLCBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50ICYmIFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQuZ2V0TmFtZSgpIHx8ICdSZWFjdENvbXBvc2l0ZUNvbXBvbmVudCcpIDogdm9pZCAwO1xuXG4gICAgIWlzVmFsaWRDb250YWluZXIoY29udGFpbmVyKSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICd1bm1vdW50Q29tcG9uZW50QXROb2RlKC4uLik6IFRhcmdldCBjb250YWluZXIgaXMgbm90IGEgRE9NIGVsZW1lbnQuJykgOiBfcHJvZEludmFyaWFudCgnNDAnKSA6IHZvaWQgMDtcblxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyghbm9kZUlzUmVuZGVyZWRCeU90aGVySW5zdGFuY2UoY29udGFpbmVyKSwgXCJ1bm1vdW50Q29tcG9uZW50QXROb2RlKCk6IFRoZSBub2RlIHlvdSdyZSBhdHRlbXB0aW5nIHRvIHVubW91bnQgXCIgKyAnd2FzIHJlbmRlcmVkIGJ5IGFub3RoZXIgY29weSBvZiBSZWFjdC4nKSA6IHZvaWQgMDtcbiAgICB9XG5cbiAgICB2YXIgcHJldkNvbXBvbmVudCA9IGdldFRvcExldmVsV3JhcHBlckluQ29udGFpbmVyKGNvbnRhaW5lcik7XG4gICAgaWYgKCFwcmV2Q29tcG9uZW50KSB7XG4gICAgICAvLyBDaGVjayBpZiB0aGUgbm9kZSBiZWluZyB1bm1vdW50ZWQgd2FzIHJlbmRlcmVkIGJ5IFJlYWN0LCBidXQgaXNuJ3QgYVxuICAgICAgLy8gcm9vdCBub2RlLlxuICAgICAgdmFyIGNvbnRhaW5lckhhc05vblJvb3RSZWFjdENoaWxkID0gaGFzTm9uUm9vdFJlYWN0Q2hpbGQoY29udGFpbmVyKTtcblxuICAgICAgLy8gQ2hlY2sgaWYgdGhlIGNvbnRhaW5lciBpdHNlbGYgaXMgYSBSZWFjdCByb290IG5vZGUuXG4gICAgICB2YXIgaXNDb250YWluZXJSZWFjdFJvb3QgPSBjb250YWluZXIubm9kZVR5cGUgPT09IDEgJiYgY29udGFpbmVyLmhhc0F0dHJpYnV0ZShST09UX0FUVFJfTkFNRSk7XG5cbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKCFjb250YWluZXJIYXNOb25Sb290UmVhY3RDaGlsZCwgXCJ1bm1vdW50Q29tcG9uZW50QXROb2RlKCk6IFRoZSBub2RlIHlvdSdyZSBhdHRlbXB0aW5nIHRvIHVubW91bnQgXCIgKyAnd2FzIHJlbmRlcmVkIGJ5IFJlYWN0IGFuZCBpcyBub3QgYSB0b3AtbGV2ZWwgY29udGFpbmVyLiAlcycsIGlzQ29udGFpbmVyUmVhY3RSb290ID8gJ1lvdSBtYXkgaGF2ZSBhY2NpZGVudGFsbHkgcGFzc2VkIGluIGEgUmVhY3Qgcm9vdCBub2RlIGluc3RlYWQgJyArICdvZiBpdHMgY29udGFpbmVyLicgOiAnSW5zdGVhZCwgaGF2ZSB0aGUgcGFyZW50IGNvbXBvbmVudCB1cGRhdGUgaXRzIHN0YXRlIGFuZCAnICsgJ3JlcmVuZGVyIGluIG9yZGVyIHRvIHJlbW92ZSB0aGlzIGNvbXBvbmVudC4nKSA6IHZvaWQgMDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBkZWxldGUgaW5zdGFuY2VzQnlSZWFjdFJvb3RJRFtwcmV2Q29tcG9uZW50Ll9pbnN0YW5jZS5yb290SURdO1xuICAgIFJlYWN0VXBkYXRlcy5iYXRjaGVkVXBkYXRlcyh1bm1vdW50Q29tcG9uZW50RnJvbU5vZGUsIHByZXZDb21wb25lbnQsIGNvbnRhaW5lciwgZmFsc2UpO1xuICAgIHJldHVybiB0cnVlO1xuICB9LFxuXG4gIF9tb3VudEltYWdlSW50b05vZGU6IGZ1bmN0aW9uIChtYXJrdXAsIGNvbnRhaW5lciwgaW5zdGFuY2UsIHNob3VsZFJldXNlTWFya3VwLCB0cmFuc2FjdGlvbikge1xuICAgICFpc1ZhbGlkQ29udGFpbmVyKGNvbnRhaW5lcikgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAnbW91bnRDb21wb25lbnRJbnRvTm9kZSguLi4pOiBUYXJnZXQgY29udGFpbmVyIGlzIG5vdCB2YWxpZC4nKSA6IF9wcm9kSW52YXJpYW50KCc0MScpIDogdm9pZCAwO1xuXG4gICAgaWYgKHNob3VsZFJldXNlTWFya3VwKSB7XG4gICAgICB2YXIgcm9vdEVsZW1lbnQgPSBnZXRSZWFjdFJvb3RFbGVtZW50SW5Db250YWluZXIoY29udGFpbmVyKTtcbiAgICAgIGlmIChSZWFjdE1hcmt1cENoZWNrc3VtLmNhblJldXNlTWFya3VwKG1hcmt1cCwgcm9vdEVsZW1lbnQpKSB7XG4gICAgICAgIFJlYWN0RE9NQ29tcG9uZW50VHJlZS5wcmVjYWNoZU5vZGUoaW5zdGFuY2UsIHJvb3RFbGVtZW50KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGNoZWNrc3VtID0gcm9vdEVsZW1lbnQuZ2V0QXR0cmlidXRlKFJlYWN0TWFya3VwQ2hlY2tzdW0uQ0hFQ0tTVU1fQVRUUl9OQU1FKTtcbiAgICAgICAgcm9vdEVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKFJlYWN0TWFya3VwQ2hlY2tzdW0uQ0hFQ0tTVU1fQVRUUl9OQU1FKTtcblxuICAgICAgICB2YXIgcm9vdE1hcmt1cCA9IHJvb3RFbGVtZW50Lm91dGVySFRNTDtcbiAgICAgICAgcm9vdEVsZW1lbnQuc2V0QXR0cmlidXRlKFJlYWN0TWFya3VwQ2hlY2tzdW0uQ0hFQ0tTVU1fQVRUUl9OQU1FLCBjaGVja3N1bSk7XG5cbiAgICAgICAgdmFyIG5vcm1hbGl6ZWRNYXJrdXAgPSBtYXJrdXA7XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgLy8gYmVjYXVzZSByb290TWFya3VwIGlzIHJldHJpZXZlZCBmcm9tIHRoZSBET00sIHZhcmlvdXMgbm9ybWFsaXphdGlvbnNcbiAgICAgICAgICAvLyB3aWxsIGhhdmUgb2NjdXJyZWQgd2hpY2ggd2lsbCBub3QgYmUgcHJlc2VudCBpbiBgbWFya3VwYC4gSGVyZSxcbiAgICAgICAgICAvLyBpbnNlcnQgbWFya3VwIGludG8gYSA8ZGl2PiBvciA8aWZyYW1lPiBkZXBlbmRpbmcgb24gdGhlIGNvbnRhaW5lclxuICAgICAgICAgIC8vIHR5cGUgdG8gcGVyZm9ybSB0aGUgc2FtZSBub3JtYWxpemF0aW9ucyBiZWZvcmUgY29tcGFyaW5nLlxuICAgICAgICAgIHZhciBub3JtYWxpemVyO1xuICAgICAgICAgIGlmIChjb250YWluZXIubm9kZVR5cGUgPT09IEVMRU1FTlRfTk9ERV9UWVBFKSB7XG4gICAgICAgICAgICBub3JtYWxpemVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBub3JtYWxpemVyLmlubmVySFRNTCA9IG1hcmt1cDtcbiAgICAgICAgICAgIG5vcm1hbGl6ZWRNYXJrdXAgPSBub3JtYWxpemVyLmlubmVySFRNTDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbm9ybWFsaXplciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lmcmFtZScpO1xuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChub3JtYWxpemVyKTtcbiAgICAgICAgICAgIG5vcm1hbGl6ZXIuY29udGVudERvY3VtZW50LndyaXRlKG1hcmt1cCk7XG4gICAgICAgICAgICBub3JtYWxpemVkTWFya3VwID0gbm9ybWFsaXplci5jb250ZW50RG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50Lm91dGVySFRNTDtcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQobm9ybWFsaXplcik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGRpZmZJbmRleCA9IGZpcnN0RGlmZmVyZW5jZUluZGV4KG5vcm1hbGl6ZWRNYXJrdXAsIHJvb3RNYXJrdXApO1xuICAgICAgICB2YXIgZGlmZmVyZW5jZSA9ICcgKGNsaWVudCkgJyArIG5vcm1hbGl6ZWRNYXJrdXAuc3Vic3RyaW5nKGRpZmZJbmRleCAtIDIwLCBkaWZmSW5kZXggKyAyMCkgKyAnXFxuIChzZXJ2ZXIpICcgKyByb290TWFya3VwLnN1YnN0cmluZyhkaWZmSW5kZXggLSAyMCwgZGlmZkluZGV4ICsgMjApO1xuXG4gICAgICAgICEoY29udGFpbmVyLm5vZGVUeXBlICE9PSBET0NfTk9ERV9UWVBFKSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICdZb3VcXCdyZSB0cnlpbmcgdG8gcmVuZGVyIGEgY29tcG9uZW50IHRvIHRoZSBkb2N1bWVudCB1c2luZyBzZXJ2ZXIgcmVuZGVyaW5nIGJ1dCB0aGUgY2hlY2tzdW0gd2FzIGludmFsaWQuIFRoaXMgdXN1YWxseSBtZWFucyB5b3UgcmVuZGVyZWQgYSBkaWZmZXJlbnQgY29tcG9uZW50IHR5cGUgb3IgcHJvcHMgb24gdGhlIGNsaWVudCBmcm9tIHRoZSBvbmUgb24gdGhlIHNlcnZlciwgb3IgeW91ciByZW5kZXIoKSBtZXRob2RzIGFyZSBpbXB1cmUuIFJlYWN0IGNhbm5vdCBoYW5kbGUgdGhpcyBjYXNlIGR1ZSB0byBjcm9zcy1icm93c2VyIHF1aXJrcyBieSByZW5kZXJpbmcgYXQgdGhlIGRvY3VtZW50IHJvb3QuIFlvdSBzaG91bGQgbG9vayBmb3IgZW52aXJvbm1lbnQgZGVwZW5kZW50IGNvZGUgaW4geW91ciBjb21wb25lbnRzIGFuZCBlbnN1cmUgdGhlIHByb3BzIGFyZSB0aGUgc2FtZSBjbGllbnQgYW5kIHNlcnZlciBzaWRlOlxcbiVzJywgZGlmZmVyZW5jZSkgOiBfcHJvZEludmFyaWFudCgnNDInLCBkaWZmZXJlbmNlKSA6IHZvaWQgMDtcblxuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKGZhbHNlLCAnUmVhY3QgYXR0ZW1wdGVkIHRvIHJldXNlIG1hcmt1cCBpbiBhIGNvbnRhaW5lciBidXQgdGhlICcgKyAnY2hlY2tzdW0gd2FzIGludmFsaWQuIFRoaXMgZ2VuZXJhbGx5IG1lYW5zIHRoYXQgeW91IGFyZSAnICsgJ3VzaW5nIHNlcnZlciByZW5kZXJpbmcgYW5kIHRoZSBtYXJrdXAgZ2VuZXJhdGVkIG9uIHRoZSAnICsgJ3NlcnZlciB3YXMgbm90IHdoYXQgdGhlIGNsaWVudCB3YXMgZXhwZWN0aW5nLiBSZWFjdCBpbmplY3RlZCAnICsgJ25ldyBtYXJrdXAgdG8gY29tcGVuc2F0ZSB3aGljaCB3b3JrcyBidXQgeW91IGhhdmUgbG9zdCBtYW55ICcgKyAnb2YgdGhlIGJlbmVmaXRzIG9mIHNlcnZlciByZW5kZXJpbmcuIEluc3RlYWQsIGZpZ3VyZSBvdXQgJyArICd3aHkgdGhlIG1hcmt1cCBiZWluZyBnZW5lcmF0ZWQgaXMgZGlmZmVyZW50IG9uIHRoZSBjbGllbnQgJyArICdvciBzZXJ2ZXI6XFxuJXMnLCBkaWZmZXJlbmNlKSA6IHZvaWQgMDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgICEoY29udGFpbmVyLm5vZGVUeXBlICE9PSBET0NfTk9ERV9UWVBFKSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICdZb3VcXCdyZSB0cnlpbmcgdG8gcmVuZGVyIGEgY29tcG9uZW50IHRvIHRoZSBkb2N1bWVudCBidXQgeW91IGRpZG5cXCd0IHVzZSBzZXJ2ZXIgcmVuZGVyaW5nLiBXZSBjYW5cXCd0IGRvIHRoaXMgd2l0aG91dCB1c2luZyBzZXJ2ZXIgcmVuZGVyaW5nIGR1ZSB0byBjcm9zcy1icm93c2VyIHF1aXJrcy4gU2VlIFJlYWN0RE9NU2VydmVyLnJlbmRlclRvU3RyaW5nKCkgZm9yIHNlcnZlciByZW5kZXJpbmcuJykgOiBfcHJvZEludmFyaWFudCgnNDMnKSA6IHZvaWQgMDtcblxuICAgIGlmICh0cmFuc2FjdGlvbi51c2VDcmVhdGVFbGVtZW50KSB7XG4gICAgICB3aGlsZSAoY29udGFpbmVyLmxhc3RDaGlsZCkge1xuICAgICAgICBjb250YWluZXIucmVtb3ZlQ2hpbGQoY29udGFpbmVyLmxhc3RDaGlsZCk7XG4gICAgICB9XG4gICAgICBET01MYXp5VHJlZS5pbnNlcnRUcmVlQmVmb3JlKGNvbnRhaW5lciwgbWFya3VwLCBudWxsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2V0SW5uZXJIVE1MKGNvbnRhaW5lciwgbWFya3VwKTtcbiAgICAgIFJlYWN0RE9NQ29tcG9uZW50VHJlZS5wcmVjYWNoZU5vZGUoaW5zdGFuY2UsIGNvbnRhaW5lci5maXJzdENoaWxkKTtcbiAgICB9XG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgdmFyIGhvc3ROb2RlID0gUmVhY3RET01Db21wb25lbnRUcmVlLmdldEluc3RhbmNlRnJvbU5vZGUoY29udGFpbmVyLmZpcnN0Q2hpbGQpO1xuICAgICAgaWYgKGhvc3ROb2RlLl9kZWJ1Z0lEICE9PSAwKSB7XG4gICAgICAgIFJlYWN0SW5zdHJ1bWVudGF0aW9uLmRlYnVnVG9vbC5vbkhvc3RPcGVyYXRpb24oe1xuICAgICAgICAgIGluc3RhbmNlSUQ6IGhvc3ROb2RlLl9kZWJ1Z0lELFxuICAgICAgICAgIHR5cGU6ICdtb3VudCcsXG4gICAgICAgICAgcGF5bG9hZDogbWFya3VwLnRvU3RyaW5nKClcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0TW91bnQ7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1kb20vbGliL1JlYWN0TW91bnQuanMiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBfcHJvZEludmFyaWFudCA9IHJlcXVpcmUoJy4vcmVhY3RQcm9kSW52YXJpYW50Jyk7XG5cbnZhciBSZWFjdCA9IHJlcXVpcmUoJ3JlYWN0L2xpYi9SZWFjdCcpO1xuXG52YXIgaW52YXJpYW50ID0gcmVxdWlyZSgnZmJqcy9saWIvaW52YXJpYW50Jyk7XG5cbnZhciBSZWFjdE5vZGVUeXBlcyA9IHtcbiAgSE9TVDogMCxcbiAgQ09NUE9TSVRFOiAxLFxuICBFTVBUWTogMixcblxuICBnZXRUeXBlOiBmdW5jdGlvbiAobm9kZSkge1xuICAgIGlmIChub2RlID09PSBudWxsIHx8IG5vZGUgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm4gUmVhY3ROb2RlVHlwZXMuRU1QVFk7XG4gICAgfSBlbHNlIGlmIChSZWFjdC5pc1ZhbGlkRWxlbWVudChub2RlKSkge1xuICAgICAgaWYgKHR5cGVvZiBub2RlLnR5cGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIFJlYWN0Tm9kZVR5cGVzLkNPTVBPU0lURTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBSZWFjdE5vZGVUeXBlcy5IT1NUO1xuICAgICAgfVxuICAgIH1cbiAgICAhZmFsc2UgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAnVW5leHBlY3RlZCBub2RlOiAlcycsIG5vZGUpIDogX3Byb2RJbnZhcmlhbnQoJzI2Jywgbm9kZSkgOiB2b2lkIDA7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3ROb2RlVHlwZXM7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1kb20vbGliL1JlYWN0Tm9kZVR5cGVzLmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUmVhY3RQcm9wVHlwZXNTZWNyZXQgPSAnU0VDUkVUX0RPX05PVF9QQVNTX1RISVNfT1JfWU9VX1dJTExfQkVfRklSRUQnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0UHJvcFR5cGVzU2VjcmV0O1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QtZG9tL2xpYi9SZWFjdFByb3BUeXBlc1NlY3JldC5qcyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBWaWV3cG9ydE1ldHJpY3MgPSB7XG4gIGN1cnJlbnRTY3JvbGxMZWZ0OiAwLFxuXG4gIGN1cnJlbnRTY3JvbGxUb3A6IDAsXG5cbiAgcmVmcmVzaFNjcm9sbFZhbHVlczogZnVuY3Rpb24gKHNjcm9sbFBvc2l0aW9uKSB7XG4gICAgVmlld3BvcnRNZXRyaWNzLmN1cnJlbnRTY3JvbGxMZWZ0ID0gc2Nyb2xsUG9zaXRpb24ueDtcbiAgICBWaWV3cG9ydE1ldHJpY3MuY3VycmVudFNjcm9sbFRvcCA9IHNjcm9sbFBvc2l0aW9uLnk7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gVmlld3BvcnRNZXRyaWNzO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QtZG9tL2xpYi9WaWV3cG9ydE1ldHJpY3MuanMiLCIvKipcbiAqIENvcHlyaWdodCAyMDE0LXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBfcHJvZEludmFyaWFudCA9IHJlcXVpcmUoJy4vcmVhY3RQcm9kSW52YXJpYW50Jyk7XG5cbnZhciBpbnZhcmlhbnQgPSByZXF1aXJlKCdmYmpzL2xpYi9pbnZhcmlhbnQnKTtcblxuLyoqXG4gKiBBY2N1bXVsYXRlcyBpdGVtcyB0aGF0IG11c3Qgbm90IGJlIG51bGwgb3IgdW5kZWZpbmVkIGludG8gdGhlIGZpcnN0IG9uZS4gVGhpc1xuICogaXMgdXNlZCB0byBjb25zZXJ2ZSBtZW1vcnkgYnkgYXZvaWRpbmcgYXJyYXkgYWxsb2NhdGlvbnMsIGFuZCB0aHVzIHNhY3JpZmljZXNcbiAqIEFQSSBjbGVhbm5lc3MuIFNpbmNlIGBjdXJyZW50YCBjYW4gYmUgbnVsbCBiZWZvcmUgYmVpbmcgcGFzc2VkIGluIGFuZCBub3RcbiAqIG51bGwgYWZ0ZXIgdGhpcyBmdW5jdGlvbiwgbWFrZSBzdXJlIHRvIGFzc2lnbiBpdCBiYWNrIHRvIGBjdXJyZW50YDpcbiAqXG4gKiBgYSA9IGFjY3VtdWxhdGVJbnRvKGEsIGIpO2BcbiAqXG4gKiBUaGlzIEFQSSBzaG91bGQgYmUgc3BhcmluZ2x5IHVzZWQuIFRyeSBgYWNjdW11bGF0ZWAgZm9yIHNvbWV0aGluZyBjbGVhbmVyLlxuICpcbiAqIEByZXR1cm4geyp8YXJyYXk8Kj59IEFuIGFjY3VtdWxhdGlvbiBvZiBpdGVtcy5cbiAqL1xuXG5mdW5jdGlvbiBhY2N1bXVsYXRlSW50byhjdXJyZW50LCBuZXh0KSB7XG4gICEobmV4dCAhPSBudWxsKSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICdhY2N1bXVsYXRlSW50byguLi4pOiBBY2N1bXVsYXRlZCBpdGVtcyBtdXN0IG5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZC4nKSA6IF9wcm9kSW52YXJpYW50KCczMCcpIDogdm9pZCAwO1xuXG4gIGlmIChjdXJyZW50ID09IG51bGwpIHtcbiAgICByZXR1cm4gbmV4dDtcbiAgfVxuXG4gIC8vIEJvdGggYXJlIG5vdCBlbXB0eS4gV2FybmluZzogTmV2ZXIgY2FsbCB4LmNvbmNhdCh5KSB3aGVuIHlvdSBhcmUgbm90XG4gIC8vIGNlcnRhaW4gdGhhdCB4IGlzIGFuIEFycmF5ICh4IGNvdWxkIGJlIGEgc3RyaW5nIHdpdGggY29uY2F0IG1ldGhvZCkuXG4gIGlmIChBcnJheS5pc0FycmF5KGN1cnJlbnQpKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkobmV4dCkpIHtcbiAgICAgIGN1cnJlbnQucHVzaC5hcHBseShjdXJyZW50LCBuZXh0KTtcbiAgICAgIHJldHVybiBjdXJyZW50O1xuICAgIH1cbiAgICBjdXJyZW50LnB1c2gobmV4dCk7XG4gICAgcmV0dXJuIGN1cnJlbnQ7XG4gIH1cblxuICBpZiAoQXJyYXkuaXNBcnJheShuZXh0KSkge1xuICAgIC8vIEEgYml0IHRvbyBkYW5nZXJvdXMgdG8gbXV0YXRlIGBuZXh0YC5cbiAgICByZXR1cm4gW2N1cnJlbnRdLmNvbmNhdChuZXh0KTtcbiAgfVxuXG4gIHJldHVybiBbY3VycmVudCwgbmV4dF07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYWNjdW11bGF0ZUludG87XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1kb20vbGliL2FjY3VtdWxhdGVJbnRvLmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIEBwYXJhbSB7YXJyYXl9IGFyciBhbiBcImFjY3VtdWxhdGlvblwiIG9mIGl0ZW1zIHdoaWNoIGlzIGVpdGhlciBhbiBBcnJheSBvclxuICogYSBzaW5nbGUgaXRlbS4gVXNlZnVsIHdoZW4gcGFpcmVkIHdpdGggdGhlIGBhY2N1bXVsYXRlYCBtb2R1bGUuIFRoaXMgaXMgYVxuICogc2ltcGxlIHV0aWxpdHkgdGhhdCBhbGxvd3MgdXMgdG8gcmVhc29uIGFib3V0IGEgY29sbGVjdGlvbiBvZiBpdGVtcywgYnV0XG4gKiBoYW5kbGluZyB0aGUgY2FzZSB3aGVuIHRoZXJlIGlzIGV4YWN0bHkgb25lIGl0ZW0gKGFuZCB3ZSBkbyBub3QgbmVlZCB0b1xuICogYWxsb2NhdGUgYW4gYXJyYXkpLlxuICovXG5cbmZ1bmN0aW9uIGZvckVhY2hBY2N1bXVsYXRlZChhcnIsIGNiLCBzY29wZSkge1xuICBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSB7XG4gICAgYXJyLmZvckVhY2goY2IsIHNjb3BlKTtcbiAgfSBlbHNlIGlmIChhcnIpIHtcbiAgICBjYi5jYWxsKHNjb3BlLCBhcnIpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZm9yRWFjaEFjY3VtdWxhdGVkO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QtZG9tL2xpYi9mb3JFYWNoQWNjdW11bGF0ZWQuanMiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUmVhY3ROb2RlVHlwZXMgPSByZXF1aXJlKCcuL1JlYWN0Tm9kZVR5cGVzJyk7XG5cbmZ1bmN0aW9uIGdldEhvc3RDb21wb25lbnRGcm9tQ29tcG9zaXRlKGluc3QpIHtcbiAgdmFyIHR5cGU7XG5cbiAgd2hpbGUgKCh0eXBlID0gaW5zdC5fcmVuZGVyZWROb2RlVHlwZSkgPT09IFJlYWN0Tm9kZVR5cGVzLkNPTVBPU0lURSkge1xuICAgIGluc3QgPSBpbnN0Ll9yZW5kZXJlZENvbXBvbmVudDtcbiAgfVxuXG4gIGlmICh0eXBlID09PSBSZWFjdE5vZGVUeXBlcy5IT1NUKSB7XG4gICAgcmV0dXJuIGluc3QuX3JlbmRlcmVkQ29tcG9uZW50O1xuICB9IGVsc2UgaWYgKHR5cGUgPT09IFJlYWN0Tm9kZVR5cGVzLkVNUFRZKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRIb3N0Q29tcG9uZW50RnJvbUNvbXBvc2l0ZTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3JlYWN0LWRvbS9saWIvZ2V0SG9zdENvbXBvbmVudEZyb21Db21wb3NpdGUuanMiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgRXhlY3V0aW9uRW52aXJvbm1lbnQgPSByZXF1aXJlKCdmYmpzL2xpYi9FeGVjdXRpb25FbnZpcm9ubWVudCcpO1xuXG52YXIgY29udGVudEtleSA9IG51bGw7XG5cbi8qKlxuICogR2V0cyB0aGUga2V5IHVzZWQgdG8gYWNjZXNzIHRleHQgY29udGVudCBvbiBhIERPTSBub2RlLlxuICpcbiAqIEByZXR1cm4gez9zdHJpbmd9IEtleSB1c2VkIHRvIGFjY2VzcyB0ZXh0IGNvbnRlbnQuXG4gKiBAaW50ZXJuYWxcbiAqL1xuZnVuY3Rpb24gZ2V0VGV4dENvbnRlbnRBY2Nlc3NvcigpIHtcbiAgaWYgKCFjb250ZW50S2V5ICYmIEV4ZWN1dGlvbkVudmlyb25tZW50LmNhblVzZURPTSkge1xuICAgIC8vIFByZWZlciB0ZXh0Q29udGVudCB0byBpbm5lclRleHQgYmVjYXVzZSBtYW55IGJyb3dzZXJzIHN1cHBvcnQgYm90aCBidXRcbiAgICAvLyBTVkcgPHRleHQ+IGVsZW1lbnRzIGRvbid0IHN1cHBvcnQgaW5uZXJUZXh0IGV2ZW4gd2hlbiA8ZGl2PiBkb2VzLlxuICAgIGNvbnRlbnRLZXkgPSAndGV4dENvbnRlbnQnIGluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCA/ICd0ZXh0Q29udGVudCcgOiAnaW5uZXJUZXh0JztcbiAgfVxuICByZXR1cm4gY29udGVudEtleTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRUZXh0Q29udGVudEFjY2Vzc29yO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QtZG9tL2xpYi9nZXRUZXh0Q29udGVudEFjY2Vzc29yLmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0RE9NQ29tcG9uZW50VHJlZSA9IHJlcXVpcmUoJy4vUmVhY3RET01Db21wb25lbnRUcmVlJyk7XG5cbmZ1bmN0aW9uIGlzQ2hlY2thYmxlKGVsZW0pIHtcbiAgdmFyIHR5cGUgPSBlbGVtLnR5cGU7XG4gIHZhciBub2RlTmFtZSA9IGVsZW0ubm9kZU5hbWU7XG4gIHJldHVybiBub2RlTmFtZSAmJiBub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSAnaW5wdXQnICYmICh0eXBlID09PSAnY2hlY2tib3gnIHx8IHR5cGUgPT09ICdyYWRpbycpO1xufVxuXG5mdW5jdGlvbiBnZXRUcmFja2VyKGluc3QpIHtcbiAgcmV0dXJuIGluc3QuX3dyYXBwZXJTdGF0ZS52YWx1ZVRyYWNrZXI7XG59XG5cbmZ1bmN0aW9uIGF0dGFjaFRyYWNrZXIoaW5zdCwgdHJhY2tlcikge1xuICBpbnN0Ll93cmFwcGVyU3RhdGUudmFsdWVUcmFja2VyID0gdHJhY2tlcjtcbn1cblxuZnVuY3Rpb24gZGV0YWNoVHJhY2tlcihpbnN0KSB7XG4gIGRlbGV0ZSBpbnN0Ll93cmFwcGVyU3RhdGUudmFsdWVUcmFja2VyO1xufVxuXG5mdW5jdGlvbiBnZXRWYWx1ZUZyb21Ob2RlKG5vZGUpIHtcbiAgdmFyIHZhbHVlO1xuICBpZiAobm9kZSkge1xuICAgIHZhbHVlID0gaXNDaGVja2FibGUobm9kZSkgPyAnJyArIG5vZGUuY2hlY2tlZCA6IG5vZGUudmFsdWU7XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG52YXIgaW5wdXRWYWx1ZVRyYWNraW5nID0ge1xuICAvLyBleHBvc2VkIGZvciB0ZXN0aW5nXG4gIF9nZXRUcmFja2VyRnJvbU5vZGU6IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgcmV0dXJuIGdldFRyYWNrZXIoUmVhY3RET01Db21wb25lbnRUcmVlLmdldEluc3RhbmNlRnJvbU5vZGUobm9kZSkpO1xuICB9LFxuXG5cbiAgdHJhY2s6IGZ1bmN0aW9uIChpbnN0KSB7XG4gICAgaWYgKGdldFRyYWNrZXIoaW5zdCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgbm9kZSA9IFJlYWN0RE9NQ29tcG9uZW50VHJlZS5nZXROb2RlRnJvbUluc3RhbmNlKGluc3QpO1xuICAgIHZhciB2YWx1ZUZpZWxkID0gaXNDaGVja2FibGUobm9kZSkgPyAnY2hlY2tlZCcgOiAndmFsdWUnO1xuICAgIHZhciBkZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihub2RlLmNvbnN0cnVjdG9yLnByb3RvdHlwZSwgdmFsdWVGaWVsZCk7XG5cbiAgICB2YXIgY3VycmVudFZhbHVlID0gJycgKyBub2RlW3ZhbHVlRmllbGRdO1xuXG4gICAgLy8gaWYgc29tZW9uZSBoYXMgYWxyZWFkeSBkZWZpbmVkIGEgdmFsdWUgb3IgU2FmYXJpLCB0aGVuIGJhaWxcbiAgICAvLyBhbmQgZG9uJ3QgdHJhY2sgdmFsdWUgd2lsbCBjYXVzZSBvdmVyIHJlcG9ydGluZyBvZiBjaGFuZ2VzLFxuICAgIC8vIGJ1dCBpdCdzIGJldHRlciB0aGVuIGEgaGFyZCBmYWlsdXJlXG4gICAgLy8gKG5lZWRlZCBmb3IgY2VydGFpbiB0ZXN0cyB0aGF0IHNweU9uIGlucHV0IHZhbHVlcyBhbmQgU2FmYXJpKVxuICAgIGlmIChub2RlLmhhc093blByb3BlcnR5KHZhbHVlRmllbGQpIHx8IHR5cGVvZiBkZXNjcmlwdG9yLmdldCAhPT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgZGVzY3JpcHRvci5zZXQgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobm9kZSwgdmFsdWVGaWVsZCwge1xuICAgICAgZW51bWVyYWJsZTogZGVzY3JpcHRvci5lbnVtZXJhYmxlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBkZXNjcmlwdG9yLmdldC5jYWxsKHRoaXMpO1xuICAgICAgfSxcbiAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIGN1cnJlbnRWYWx1ZSA9ICcnICsgdmFsdWU7XG4gICAgICAgIGRlc2NyaXB0b3Iuc2V0LmNhbGwodGhpcywgdmFsdWUpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgYXR0YWNoVHJhY2tlcihpbnN0LCB7XG4gICAgICBnZXRWYWx1ZTogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gY3VycmVudFZhbHVlO1xuICAgICAgfSxcbiAgICAgIHNldFZhbHVlOiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgY3VycmVudFZhbHVlID0gJycgKyB2YWx1ZTtcbiAgICAgIH0sXG4gICAgICBzdG9wVHJhY2tpbmc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZGV0YWNoVHJhY2tlcihpbnN0KTtcbiAgICAgICAgZGVsZXRlIG5vZGVbdmFsdWVGaWVsZF07XG4gICAgICB9XG4gICAgfSk7XG4gIH0sXG5cbiAgdXBkYXRlVmFsdWVJZkNoYW5nZWQ6IGZ1bmN0aW9uIChpbnN0KSB7XG4gICAgaWYgKCFpbnN0KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHZhciB0cmFja2VyID0gZ2V0VHJhY2tlcihpbnN0KTtcblxuICAgIGlmICghdHJhY2tlcikge1xuICAgICAgaW5wdXRWYWx1ZVRyYWNraW5nLnRyYWNrKGluc3QpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgdmFyIGxhc3RWYWx1ZSA9IHRyYWNrZXIuZ2V0VmFsdWUoKTtcbiAgICB2YXIgbmV4dFZhbHVlID0gZ2V0VmFsdWVGcm9tTm9kZShSZWFjdERPTUNvbXBvbmVudFRyZWUuZ2V0Tm9kZUZyb21JbnN0YW5jZShpbnN0KSk7XG5cbiAgICBpZiAobmV4dFZhbHVlICE9PSBsYXN0VmFsdWUpIHtcbiAgICAgIHRyYWNrZXIuc2V0VmFsdWUobmV4dFZhbHVlKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgc3RvcFRyYWNraW5nOiBmdW5jdGlvbiAoaW5zdCkge1xuICAgIHZhciB0cmFja2VyID0gZ2V0VHJhY2tlcihpbnN0KTtcbiAgICBpZiAodHJhY2tlcikge1xuICAgICAgdHJhY2tlci5zdG9wVHJhY2tpbmcoKTtcbiAgICB9XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gaW5wdXRWYWx1ZVRyYWNraW5nO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QtZG9tL2xpYi9pbnB1dFZhbHVlVHJhY2tpbmcuanMiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgX3Byb2RJbnZhcmlhbnQgPSByZXF1aXJlKCcuL3JlYWN0UHJvZEludmFyaWFudCcpLFxuICAgIF9hc3NpZ24gPSByZXF1aXJlKCdvYmplY3QtYXNzaWduJyk7XG5cbnZhciBSZWFjdENvbXBvc2l0ZUNvbXBvbmVudCA9IHJlcXVpcmUoJy4vUmVhY3RDb21wb3NpdGVDb21wb25lbnQnKTtcbnZhciBSZWFjdEVtcHR5Q29tcG9uZW50ID0gcmVxdWlyZSgnLi9SZWFjdEVtcHR5Q29tcG9uZW50Jyk7XG52YXIgUmVhY3RIb3N0Q29tcG9uZW50ID0gcmVxdWlyZSgnLi9SZWFjdEhvc3RDb21wb25lbnQnKTtcblxudmFyIGdldE5leHREZWJ1Z0lEID0gcmVxdWlyZSgncmVhY3QvbGliL2dldE5leHREZWJ1Z0lEJyk7XG52YXIgaW52YXJpYW50ID0gcmVxdWlyZSgnZmJqcy9saWIvaW52YXJpYW50Jyk7XG52YXIgd2FybmluZyA9IHJlcXVpcmUoJ2ZianMvbGliL3dhcm5pbmcnKTtcblxuLy8gVG8gYXZvaWQgYSBjeWNsaWMgZGVwZW5kZW5jeSwgd2UgY3JlYXRlIHRoZSBmaW5hbCBjbGFzcyBpbiB0aGlzIG1vZHVsZVxudmFyIFJlYWN0Q29tcG9zaXRlQ29tcG9uZW50V3JhcHBlciA9IGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gIHRoaXMuY29uc3RydWN0KGVsZW1lbnQpO1xufTtcblxuZnVuY3Rpb24gZ2V0RGVjbGFyYXRpb25FcnJvckFkZGVuZHVtKG93bmVyKSB7XG4gIGlmIChvd25lcikge1xuICAgIHZhciBuYW1lID0gb3duZXIuZ2V0TmFtZSgpO1xuICAgIGlmIChuYW1lKSB7XG4gICAgICByZXR1cm4gJyBDaGVjayB0aGUgcmVuZGVyIG1ldGhvZCBvZiBgJyArIG5hbWUgKyAnYC4nO1xuICAgIH1cbiAgfVxuICByZXR1cm4gJyc7XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgdGhlIHR5cGUgcmVmZXJlbmNlIGlzIGEga25vd24gaW50ZXJuYWwgdHlwZS4gSS5lLiBub3QgYSB1c2VyXG4gKiBwcm92aWRlZCBjb21wb3NpdGUgdHlwZS5cbiAqXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSB0eXBlXG4gKiBAcmV0dXJuIHtib29sZWFufSBSZXR1cm5zIHRydWUgaWYgdGhpcyBpcyBhIHZhbGlkIGludGVybmFsIHR5cGUuXG4gKi9cbmZ1bmN0aW9uIGlzSW50ZXJuYWxDb21wb25lbnRUeXBlKHR5cGUpIHtcbiAgcmV0dXJuIHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiB0eXBlLnByb3RvdHlwZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHR5cGUucHJvdG90eXBlLm1vdW50Q29tcG9uZW50ID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiB0eXBlLnByb3RvdHlwZS5yZWNlaXZlQ29tcG9uZW50ID09PSAnZnVuY3Rpb24nO1xufVxuXG4vKipcbiAqIEdpdmVuIGEgUmVhY3ROb2RlLCBjcmVhdGUgYW4gaW5zdGFuY2UgdGhhdCB3aWxsIGFjdHVhbGx5IGJlIG1vdW50ZWQuXG4gKlxuICogQHBhcmFtIHtSZWFjdE5vZGV9IG5vZGVcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gc2hvdWxkSGF2ZURlYnVnSURcbiAqIEByZXR1cm4ge29iamVjdH0gQSBuZXcgaW5zdGFuY2Ugb2YgdGhlIGVsZW1lbnQncyBjb25zdHJ1Y3Rvci5cbiAqIEBwcm90ZWN0ZWRcbiAqL1xuZnVuY3Rpb24gaW5zdGFudGlhdGVSZWFjdENvbXBvbmVudChub2RlLCBzaG91bGRIYXZlRGVidWdJRCkge1xuICB2YXIgaW5zdGFuY2U7XG5cbiAgaWYgKG5vZGUgPT09IG51bGwgfHwgbm9kZSA9PT0gZmFsc2UpIHtcbiAgICBpbnN0YW5jZSA9IFJlYWN0RW1wdHlDb21wb25lbnQuY3JlYXRlKGluc3RhbnRpYXRlUmVhY3RDb21wb25lbnQpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBub2RlID09PSAnb2JqZWN0Jykge1xuICAgIHZhciBlbGVtZW50ID0gbm9kZTtcbiAgICB2YXIgdHlwZSA9IGVsZW1lbnQudHlwZTtcbiAgICBpZiAodHlwZW9mIHR5cGUgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHR5cGUgIT09ICdzdHJpbmcnKSB7XG4gICAgICB2YXIgaW5mbyA9ICcnO1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgaWYgKHR5cGUgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcgJiYgdHlwZSAhPT0gbnVsbCAmJiBPYmplY3Qua2V5cyh0eXBlKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICBpbmZvICs9ICcgWW91IGxpa2VseSBmb3Jnb3QgdG8gZXhwb3J0IHlvdXIgY29tcG9uZW50IGZyb20gdGhlIGZpbGUgJyArIFwiaXQncyBkZWZpbmVkIGluLlwiO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpbmZvICs9IGdldERlY2xhcmF0aW9uRXJyb3JBZGRlbmR1bShlbGVtZW50Ll9vd25lcik7XG4gICAgICAhZmFsc2UgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAnRWxlbWVudCB0eXBlIGlzIGludmFsaWQ6IGV4cGVjdGVkIGEgc3RyaW5nIChmb3IgYnVpbHQtaW4gY29tcG9uZW50cykgb3IgYSBjbGFzcy9mdW5jdGlvbiAoZm9yIGNvbXBvc2l0ZSBjb21wb25lbnRzKSBidXQgZ290OiAlcy4lcycsIHR5cGUgPT0gbnVsbCA/IHR5cGUgOiB0eXBlb2YgdHlwZSwgaW5mbykgOiBfcHJvZEludmFyaWFudCgnMTMwJywgdHlwZSA9PSBudWxsID8gdHlwZSA6IHR5cGVvZiB0eXBlLCBpbmZvKSA6IHZvaWQgMDtcbiAgICB9XG5cbiAgICAvLyBTcGVjaWFsIGNhc2Ugc3RyaW5nIHZhbHVlc1xuICAgIGlmICh0eXBlb2YgZWxlbWVudC50eXBlID09PSAnc3RyaW5nJykge1xuICAgICAgaW5zdGFuY2UgPSBSZWFjdEhvc3RDb21wb25lbnQuY3JlYXRlSW50ZXJuYWxDb21wb25lbnQoZWxlbWVudCk7XG4gICAgfSBlbHNlIGlmIChpc0ludGVybmFsQ29tcG9uZW50VHlwZShlbGVtZW50LnR5cGUpKSB7XG4gICAgICAvLyBUaGlzIGlzIHRlbXBvcmFyaWx5IGF2YWlsYWJsZSBmb3IgY3VzdG9tIGNvbXBvbmVudHMgdGhhdCBhcmUgbm90IHN0cmluZ1xuICAgICAgLy8gcmVwcmVzZW50YXRpb25zLiBJLmUuIEFSVC4gT25jZSB0aG9zZSBhcmUgdXBkYXRlZCB0byB1c2UgdGhlIHN0cmluZ1xuICAgICAgLy8gcmVwcmVzZW50YXRpb24sIHdlIGNhbiBkcm9wIHRoaXMgY29kZSBwYXRoLlxuICAgICAgaW5zdGFuY2UgPSBuZXcgZWxlbWVudC50eXBlKGVsZW1lbnQpO1xuXG4gICAgICAvLyBXZSByZW5hbWVkIHRoaXMuIEFsbG93IHRoZSBvbGQgbmFtZSBmb3IgY29tcGF0LiA6KFxuICAgICAgaWYgKCFpbnN0YW5jZS5nZXRIb3N0Tm9kZSkge1xuICAgICAgICBpbnN0YW5jZS5nZXRIb3N0Tm9kZSA9IGluc3RhbmNlLmdldE5hdGl2ZU5vZGU7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGluc3RhbmNlID0gbmV3IFJlYWN0Q29tcG9zaXRlQ29tcG9uZW50V3JhcHBlcihlbGVtZW50KTtcbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZW9mIG5vZGUgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBub2RlID09PSAnbnVtYmVyJykge1xuICAgIGluc3RhbmNlID0gUmVhY3RIb3N0Q29tcG9uZW50LmNyZWF0ZUluc3RhbmNlRm9yVGV4dChub2RlKTtcbiAgfSBlbHNlIHtcbiAgICAhZmFsc2UgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAnRW5jb3VudGVyZWQgaW52YWxpZCBSZWFjdCBub2RlIG9mIHR5cGUgJXMnLCB0eXBlb2Ygbm9kZSkgOiBfcHJvZEludmFyaWFudCgnMTMxJywgdHlwZW9mIG5vZGUpIDogdm9pZCAwO1xuICB9XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyh0eXBlb2YgaW5zdGFuY2UubW91bnRDb21wb25lbnQgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGluc3RhbmNlLnJlY2VpdmVDb21wb25lbnQgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGluc3RhbmNlLmdldEhvc3ROb2RlID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBpbnN0YW5jZS51bm1vdW50Q29tcG9uZW50ID09PSAnZnVuY3Rpb24nLCAnT25seSBSZWFjdCBDb21wb25lbnRzIGNhbiBiZSBtb3VudGVkLicpIDogdm9pZCAwO1xuICB9XG5cbiAgLy8gVGhlc2UgdHdvIGZpZWxkcyBhcmUgdXNlZCBieSB0aGUgRE9NIGFuZCBBUlQgZGlmZmluZyBhbGdvcml0aG1zXG4gIC8vIHJlc3BlY3RpdmVseS4gSW5zdGVhZCBvZiB1c2luZyBleHBhbmRvcyBvbiBjb21wb25lbnRzLCB3ZSBzaG91bGQgYmVcbiAgLy8gc3RvcmluZyB0aGUgc3RhdGUgbmVlZGVkIGJ5IHRoZSBkaWZmaW5nIGFsZ29yaXRobXMgZWxzZXdoZXJlLlxuICBpbnN0YW5jZS5fbW91bnRJbmRleCA9IDA7XG4gIGluc3RhbmNlLl9tb3VudEltYWdlID0gbnVsbDtcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGluc3RhbmNlLl9kZWJ1Z0lEID0gc2hvdWxkSGF2ZURlYnVnSUQgPyBnZXROZXh0RGVidWdJRCgpIDogMDtcbiAgfVxuXG4gIC8vIEludGVybmFsIGluc3RhbmNlcyBzaG91bGQgZnVsbHkgY29uc3RydWN0ZWQgYXQgdGhpcyBwb2ludCwgc28gdGhleSBzaG91bGRcbiAgLy8gbm90IGdldCBhbnkgbmV3IGZpZWxkcyBhZGRlZCB0byB0aGVtIGF0IHRoaXMgcG9pbnQuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgaWYgKE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucykge1xuICAgICAgT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKGluc3RhbmNlKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gaW5zdGFuY2U7XG59XG5cbl9hc3NpZ24oUmVhY3RDb21wb3NpdGVDb21wb25lbnRXcmFwcGVyLnByb3RvdHlwZSwgUmVhY3RDb21wb3NpdGVDb21wb25lbnQsIHtcbiAgX2luc3RhbnRpYXRlUmVhY3RDb21wb25lbnQ6IGluc3RhbnRpYXRlUmVhY3RDb21wb25lbnRcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGluc3RhbnRpYXRlUmVhY3RDb21wb25lbnQ7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1kb20vbGliL2luc3RhbnRpYXRlUmVhY3RDb21wb25lbnQuanMiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbi8qKlxuICogQHNlZSBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrL211bHRpcGFnZS90aGUtaW5wdXQtZWxlbWVudC5odG1sI2lucHV0LXR5cGUtYXR0ci1zdW1tYXJ5XG4gKi9cblxudmFyIHN1cHBvcnRlZElucHV0VHlwZXMgPSB7XG4gIGNvbG9yOiB0cnVlLFxuICBkYXRlOiB0cnVlLFxuICBkYXRldGltZTogdHJ1ZSxcbiAgJ2RhdGV0aW1lLWxvY2FsJzogdHJ1ZSxcbiAgZW1haWw6IHRydWUsXG4gIG1vbnRoOiB0cnVlLFxuICBudW1iZXI6IHRydWUsXG4gIHBhc3N3b3JkOiB0cnVlLFxuICByYW5nZTogdHJ1ZSxcbiAgc2VhcmNoOiB0cnVlLFxuICB0ZWw6IHRydWUsXG4gIHRleHQ6IHRydWUsXG4gIHRpbWU6IHRydWUsXG4gIHVybDogdHJ1ZSxcbiAgd2VlazogdHJ1ZVxufTtcblxuZnVuY3Rpb24gaXNUZXh0SW5wdXRFbGVtZW50KGVsZW0pIHtcbiAgdmFyIG5vZGVOYW1lID0gZWxlbSAmJiBlbGVtLm5vZGVOYW1lICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcblxuICBpZiAobm9kZU5hbWUgPT09ICdpbnB1dCcpIHtcbiAgICByZXR1cm4gISFzdXBwb3J0ZWRJbnB1dFR5cGVzW2VsZW0udHlwZV07XG4gIH1cblxuICBpZiAobm9kZU5hbWUgPT09ICd0ZXh0YXJlYScpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc1RleHRJbnB1dEVsZW1lbnQ7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1kb20vbGliL2lzVGV4dElucHV0RWxlbWVudC5qcyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBFeGVjdXRpb25FbnZpcm9ubWVudCA9IHJlcXVpcmUoJ2ZianMvbGliL0V4ZWN1dGlvbkVudmlyb25tZW50Jyk7XG52YXIgZXNjYXBlVGV4dENvbnRlbnRGb3JCcm93c2VyID0gcmVxdWlyZSgnLi9lc2NhcGVUZXh0Q29udGVudEZvckJyb3dzZXInKTtcbnZhciBzZXRJbm5lckhUTUwgPSByZXF1aXJlKCcuL3NldElubmVySFRNTCcpO1xuXG4vKipcbiAqIFNldCB0aGUgdGV4dENvbnRlbnQgcHJvcGVydHkgb2YgYSBub2RlLCBlbnN1cmluZyB0aGF0IHdoaXRlc3BhY2UgaXMgcHJlc2VydmVkXG4gKiBldmVuIGluIElFOC4gaW5uZXJUZXh0IGlzIGEgcG9vciBzdWJzdGl0dXRlIGZvciB0ZXh0Q29udGVudCBhbmQsIGFtb25nIG1hbnlcbiAqIGlzc3VlcywgaW5zZXJ0cyA8YnI+IGluc3RlYWQgb2YgdGhlIGxpdGVyYWwgbmV3bGluZSBjaGFycy4gaW5uZXJIVE1MIGJlaGF2ZXNcbiAqIGFzIGl0IHNob3VsZC5cbiAqXG4gKiBAcGFyYW0ge0RPTUVsZW1lbnR9IG5vZGVcbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0XG4gKiBAaW50ZXJuYWxcbiAqL1xudmFyIHNldFRleHRDb250ZW50ID0gZnVuY3Rpb24gKG5vZGUsIHRleHQpIHtcbiAgaWYgKHRleHQpIHtcbiAgICB2YXIgZmlyc3RDaGlsZCA9IG5vZGUuZmlyc3RDaGlsZDtcblxuICAgIGlmIChmaXJzdENoaWxkICYmIGZpcnN0Q2hpbGQgPT09IG5vZGUubGFzdENoaWxkICYmIGZpcnN0Q2hpbGQubm9kZVR5cGUgPT09IDMpIHtcbiAgICAgIGZpcnN0Q2hpbGQubm9kZVZhbHVlID0gdGV4dDtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cbiAgbm9kZS50ZXh0Q29udGVudCA9IHRleHQ7XG59O1xuXG5pZiAoRXhlY3V0aW9uRW52aXJvbm1lbnQuY2FuVXNlRE9NKSB7XG4gIGlmICghKCd0ZXh0Q29udGVudCcgaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSkge1xuICAgIHNldFRleHRDb250ZW50ID0gZnVuY3Rpb24gKG5vZGUsIHRleHQpIHtcbiAgICAgIGlmIChub2RlLm5vZGVUeXBlID09PSAzKSB7XG4gICAgICAgIG5vZGUubm9kZVZhbHVlID0gdGV4dDtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgc2V0SW5uZXJIVE1MKG5vZGUsIGVzY2FwZVRleHRDb250ZW50Rm9yQnJvd3Nlcih0ZXh0KSk7XG4gICAgfTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNldFRleHRDb250ZW50O1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QtZG9tL2xpYi9zZXRUZXh0Q29udGVudC5qcyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBfcHJvZEludmFyaWFudCA9IHJlcXVpcmUoJy4vcmVhY3RQcm9kSW52YXJpYW50Jyk7XG5cbnZhciBSZWFjdEN1cnJlbnRPd25lciA9IHJlcXVpcmUoJ3JlYWN0L2xpYi9SZWFjdEN1cnJlbnRPd25lcicpO1xudmFyIFJFQUNUX0VMRU1FTlRfVFlQRSA9IHJlcXVpcmUoJy4vUmVhY3RFbGVtZW50U3ltYm9sJyk7XG5cbnZhciBnZXRJdGVyYXRvckZuID0gcmVxdWlyZSgnLi9nZXRJdGVyYXRvckZuJyk7XG52YXIgaW52YXJpYW50ID0gcmVxdWlyZSgnZmJqcy9saWIvaW52YXJpYW50Jyk7XG52YXIgS2V5RXNjYXBlVXRpbHMgPSByZXF1aXJlKCcuL0tleUVzY2FwZVV0aWxzJyk7XG52YXIgd2FybmluZyA9IHJlcXVpcmUoJ2ZianMvbGliL3dhcm5pbmcnKTtcblxudmFyIFNFUEFSQVRPUiA9ICcuJztcbnZhciBTVUJTRVBBUkFUT1IgPSAnOic7XG5cbi8qKlxuICogVGhpcyBpcyBpbmxpbmVkIGZyb20gUmVhY3RFbGVtZW50IHNpbmNlIHRoaXMgZmlsZSBpcyBzaGFyZWQgYmV0d2VlblxuICogaXNvbW9ycGhpYyBhbmQgcmVuZGVyZXJzLiBXZSBjb3VsZCBleHRyYWN0IHRoaXMgdG8gYVxuICpcbiAqL1xuXG4vKipcbiAqIFRPRE86IFRlc3QgdGhhdCBhIHNpbmdsZSBjaGlsZCBhbmQgYW4gYXJyYXkgd2l0aCBvbmUgaXRlbSBoYXZlIHRoZSBzYW1lIGtleVxuICogcGF0dGVybi5cbiAqL1xuXG52YXIgZGlkV2FybkFib3V0TWFwcyA9IGZhbHNlO1xuXG4vKipcbiAqIEdlbmVyYXRlIGEga2V5IHN0cmluZyB0aGF0IGlkZW50aWZpZXMgYSBjb21wb25lbnQgd2l0aGluIGEgc2V0LlxuICpcbiAqIEBwYXJhbSB7Kn0gY29tcG9uZW50IEEgY29tcG9uZW50IHRoYXQgY291bGQgY29udGFpbiBhIG1hbnVhbCBrZXkuXG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXggSW5kZXggdGhhdCBpcyB1c2VkIGlmIGEgbWFudWFsIGtleSBpcyBub3QgcHJvdmlkZWQuXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGdldENvbXBvbmVudEtleShjb21wb25lbnQsIGluZGV4KSB7XG4gIC8vIERvIHNvbWUgdHlwZWNoZWNraW5nIGhlcmUgc2luY2Ugd2UgY2FsbCB0aGlzIGJsaW5kbHkuIFdlIHdhbnQgdG8gZW5zdXJlXG4gIC8vIHRoYXQgd2UgZG9uJ3QgYmxvY2sgcG90ZW50aWFsIGZ1dHVyZSBFUyBBUElzLlxuICBpZiAoY29tcG9uZW50ICYmIHR5cGVvZiBjb21wb25lbnQgPT09ICdvYmplY3QnICYmIGNvbXBvbmVudC5rZXkgIT0gbnVsbCkge1xuICAgIC8vIEV4cGxpY2l0IGtleVxuICAgIHJldHVybiBLZXlFc2NhcGVVdGlscy5lc2NhcGUoY29tcG9uZW50LmtleSk7XG4gIH1cbiAgLy8gSW1wbGljaXQga2V5IGRldGVybWluZWQgYnkgdGhlIGluZGV4IGluIHRoZSBzZXRcbiAgcmV0dXJuIGluZGV4LnRvU3RyaW5nKDM2KTtcbn1cblxuLyoqXG4gKiBAcGFyYW0gez8qfSBjaGlsZHJlbiBDaGlsZHJlbiB0cmVlIGNvbnRhaW5lci5cbiAqIEBwYXJhbSB7IXN0cmluZ30gbmFtZVNvRmFyIE5hbWUgb2YgdGhlIGtleSBwYXRoIHNvIGZhci5cbiAqIEBwYXJhbSB7IWZ1bmN0aW9ufSBjYWxsYmFjayBDYWxsYmFjayB0byBpbnZva2Ugd2l0aCBlYWNoIGNoaWxkIGZvdW5kLlxuICogQHBhcmFtIHs/Kn0gdHJhdmVyc2VDb250ZXh0IFVzZWQgdG8gcGFzcyBpbmZvcm1hdGlvbiB0aHJvdWdob3V0IHRoZSB0cmF2ZXJzYWxcbiAqIHByb2Nlc3MuXG4gKiBAcmV0dXJuIHshbnVtYmVyfSBUaGUgbnVtYmVyIG9mIGNoaWxkcmVuIGluIHRoaXMgc3VidHJlZS5cbiAqL1xuZnVuY3Rpb24gdHJhdmVyc2VBbGxDaGlsZHJlbkltcGwoY2hpbGRyZW4sIG5hbWVTb0ZhciwgY2FsbGJhY2ssIHRyYXZlcnNlQ29udGV4dCkge1xuICB2YXIgdHlwZSA9IHR5cGVvZiBjaGlsZHJlbjtcblxuICBpZiAodHlwZSA9PT0gJ3VuZGVmaW5lZCcgfHwgdHlwZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgLy8gQWxsIG9mIHRoZSBhYm92ZSBhcmUgcGVyY2VpdmVkIGFzIG51bGwuXG4gICAgY2hpbGRyZW4gPSBudWxsO1xuICB9XG5cbiAgaWYgKGNoaWxkcmVuID09PSBudWxsIHx8IHR5cGUgPT09ICdzdHJpbmcnIHx8IHR5cGUgPT09ICdudW1iZXInIHx8XG4gIC8vIFRoZSBmb2xsb3dpbmcgaXMgaW5saW5lZCBmcm9tIFJlYWN0RWxlbWVudC4gVGhpcyBtZWFucyB3ZSBjYW4gb3B0aW1pemVcbiAgLy8gc29tZSBjaGVja3MuIFJlYWN0IEZpYmVyIGFsc28gaW5saW5lcyB0aGlzIGxvZ2ljIGZvciBzaW1pbGFyIHB1cnBvc2VzLlxuICB0eXBlID09PSAnb2JqZWN0JyAmJiBjaGlsZHJlbi4kJHR5cGVvZiA9PT0gUkVBQ1RfRUxFTUVOVF9UWVBFKSB7XG4gICAgY2FsbGJhY2sodHJhdmVyc2VDb250ZXh0LCBjaGlsZHJlbixcbiAgICAvLyBJZiBpdCdzIHRoZSBvbmx5IGNoaWxkLCB0cmVhdCB0aGUgbmFtZSBhcyBpZiBpdCB3YXMgd3JhcHBlZCBpbiBhbiBhcnJheVxuICAgIC8vIHNvIHRoYXQgaXQncyBjb25zaXN0ZW50IGlmIHRoZSBudW1iZXIgb2YgY2hpbGRyZW4gZ3Jvd3MuXG4gICAgbmFtZVNvRmFyID09PSAnJyA/IFNFUEFSQVRPUiArIGdldENvbXBvbmVudEtleShjaGlsZHJlbiwgMCkgOiBuYW1lU29GYXIpO1xuICAgIHJldHVybiAxO1xuICB9XG5cbiAgdmFyIGNoaWxkO1xuICB2YXIgbmV4dE5hbWU7XG4gIHZhciBzdWJ0cmVlQ291bnQgPSAwOyAvLyBDb3VudCBvZiBjaGlsZHJlbiBmb3VuZCBpbiB0aGUgY3VycmVudCBzdWJ0cmVlLlxuICB2YXIgbmV4dE5hbWVQcmVmaXggPSBuYW1lU29GYXIgPT09ICcnID8gU0VQQVJBVE9SIDogbmFtZVNvRmFyICsgU1VCU0VQQVJBVE9SO1xuXG4gIGlmIChBcnJheS5pc0FycmF5KGNoaWxkcmVuKSkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNoaWxkID0gY2hpbGRyZW5baV07XG4gICAgICBuZXh0TmFtZSA9IG5leHROYW1lUHJlZml4ICsgZ2V0Q29tcG9uZW50S2V5KGNoaWxkLCBpKTtcbiAgICAgIHN1YnRyZWVDb3VudCArPSB0cmF2ZXJzZUFsbENoaWxkcmVuSW1wbChjaGlsZCwgbmV4dE5hbWUsIGNhbGxiYWNrLCB0cmF2ZXJzZUNvbnRleHQpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB2YXIgaXRlcmF0b3JGbiA9IGdldEl0ZXJhdG9yRm4oY2hpbGRyZW4pO1xuICAgIGlmIChpdGVyYXRvckZuKSB7XG4gICAgICB2YXIgaXRlcmF0b3IgPSBpdGVyYXRvckZuLmNhbGwoY2hpbGRyZW4pO1xuICAgICAgdmFyIHN0ZXA7XG4gICAgICBpZiAoaXRlcmF0b3JGbiAhPT0gY2hpbGRyZW4uZW50cmllcykge1xuICAgICAgICB2YXIgaWkgPSAwO1xuICAgICAgICB3aGlsZSAoIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lKSB7XG4gICAgICAgICAgY2hpbGQgPSBzdGVwLnZhbHVlO1xuICAgICAgICAgIG5leHROYW1lID0gbmV4dE5hbWVQcmVmaXggKyBnZXRDb21wb25lbnRLZXkoY2hpbGQsIGlpKyspO1xuICAgICAgICAgIHN1YnRyZWVDb3VudCArPSB0cmF2ZXJzZUFsbENoaWxkcmVuSW1wbChjaGlsZCwgbmV4dE5hbWUsIGNhbGxiYWNrLCB0cmF2ZXJzZUNvbnRleHQpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgIHZhciBtYXBzQXNDaGlsZHJlbkFkZGVuZHVtID0gJyc7XG4gICAgICAgICAgaWYgKFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQpIHtcbiAgICAgICAgICAgIHZhciBtYXBzQXNDaGlsZHJlbk93bmVyTmFtZSA9IFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQuZ2V0TmFtZSgpO1xuICAgICAgICAgICAgaWYgKG1hcHNBc0NoaWxkcmVuT3duZXJOYW1lKSB7XG4gICAgICAgICAgICAgIG1hcHNBc0NoaWxkcmVuQWRkZW5kdW0gPSAnIENoZWNrIHRoZSByZW5kZXIgbWV0aG9kIG9mIGAnICsgbWFwc0FzQ2hpbGRyZW5Pd25lck5hbWUgKyAnYC4nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyhkaWRXYXJuQWJvdXRNYXBzLCAnVXNpbmcgTWFwcyBhcyBjaGlsZHJlbiBpcyBub3QgeWV0IGZ1bGx5IHN1cHBvcnRlZC4gSXQgaXMgYW4gJyArICdleHBlcmltZW50YWwgZmVhdHVyZSB0aGF0IG1pZ2h0IGJlIHJlbW92ZWQuIENvbnZlcnQgaXQgdG8gYSAnICsgJ3NlcXVlbmNlIC8gaXRlcmFibGUgb2Yga2V5ZWQgUmVhY3RFbGVtZW50cyBpbnN0ZWFkLiVzJywgbWFwc0FzQ2hpbGRyZW5BZGRlbmR1bSkgOiB2b2lkIDA7XG4gICAgICAgICAgZGlkV2FybkFib3V0TWFwcyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgLy8gSXRlcmF0b3Igd2lsbCBwcm92aWRlIGVudHJ5IFtrLHZdIHR1cGxlcyByYXRoZXIgdGhhbiB2YWx1ZXMuXG4gICAgICAgIHdoaWxlICghKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmUpIHtcbiAgICAgICAgICB2YXIgZW50cnkgPSBzdGVwLnZhbHVlO1xuICAgICAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICAgICAgY2hpbGQgPSBlbnRyeVsxXTtcbiAgICAgICAgICAgIG5leHROYW1lID0gbmV4dE5hbWVQcmVmaXggKyBLZXlFc2NhcGVVdGlscy5lc2NhcGUoZW50cnlbMF0pICsgU1VCU0VQQVJBVE9SICsgZ2V0Q29tcG9uZW50S2V5KGNoaWxkLCAwKTtcbiAgICAgICAgICAgIHN1YnRyZWVDb3VudCArPSB0cmF2ZXJzZUFsbENoaWxkcmVuSW1wbChjaGlsZCwgbmV4dE5hbWUsIGNhbGxiYWNrLCB0cmF2ZXJzZUNvbnRleHQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHZhciBhZGRlbmR1bSA9ICcnO1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgYWRkZW5kdW0gPSAnIElmIHlvdSBtZWFudCB0byByZW5kZXIgYSBjb2xsZWN0aW9uIG9mIGNoaWxkcmVuLCB1c2UgYW4gYXJyYXkgJyArICdpbnN0ZWFkIG9yIHdyYXAgdGhlIG9iamVjdCB1c2luZyBjcmVhdGVGcmFnbWVudChvYmplY3QpIGZyb20gdGhlICcgKyAnUmVhY3QgYWRkLW9ucy4nO1xuICAgICAgICBpZiAoY2hpbGRyZW4uX2lzUmVhY3RFbGVtZW50KSB7XG4gICAgICAgICAgYWRkZW5kdW0gPSBcIiBJdCBsb29rcyBsaWtlIHlvdSdyZSB1c2luZyBhbiBlbGVtZW50IGNyZWF0ZWQgYnkgYSBkaWZmZXJlbnQgXCIgKyAndmVyc2lvbiBvZiBSZWFjdC4gTWFrZSBzdXJlIHRvIHVzZSBvbmx5IG9uZSBjb3B5IG9mIFJlYWN0Lic7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQpIHtcbiAgICAgICAgICB2YXIgbmFtZSA9IFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQuZ2V0TmFtZSgpO1xuICAgICAgICAgIGlmIChuYW1lKSB7XG4gICAgICAgICAgICBhZGRlbmR1bSArPSAnIENoZWNrIHRoZSByZW5kZXIgbWV0aG9kIG9mIGAnICsgbmFtZSArICdgLic7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICB2YXIgY2hpbGRyZW5TdHJpbmcgPSBTdHJpbmcoY2hpbGRyZW4pO1xuICAgICAgIWZhbHNlID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IGludmFyaWFudChmYWxzZSwgJ09iamVjdHMgYXJlIG5vdCB2YWxpZCBhcyBhIFJlYWN0IGNoaWxkIChmb3VuZDogJXMpLiVzJywgY2hpbGRyZW5TdHJpbmcgPT09ICdbb2JqZWN0IE9iamVjdF0nID8gJ29iamVjdCB3aXRoIGtleXMgeycgKyBPYmplY3Qua2V5cyhjaGlsZHJlbikuam9pbignLCAnKSArICd9JyA6IGNoaWxkcmVuU3RyaW5nLCBhZGRlbmR1bSkgOiBfcHJvZEludmFyaWFudCgnMzEnLCBjaGlsZHJlblN0cmluZyA9PT0gJ1tvYmplY3QgT2JqZWN0XScgPyAnb2JqZWN0IHdpdGgga2V5cyB7JyArIE9iamVjdC5rZXlzKGNoaWxkcmVuKS5qb2luKCcsICcpICsgJ30nIDogY2hpbGRyZW5TdHJpbmcsIGFkZGVuZHVtKSA6IHZvaWQgMDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3VidHJlZUNvdW50O1xufVxuXG4vKipcbiAqIFRyYXZlcnNlcyBjaGlsZHJlbiB0aGF0IGFyZSB0eXBpY2FsbHkgc3BlY2lmaWVkIGFzIGBwcm9wcy5jaGlsZHJlbmAsIGJ1dFxuICogbWlnaHQgYWxzbyBiZSBzcGVjaWZpZWQgdGhyb3VnaCBhdHRyaWJ1dGVzOlxuICpcbiAqIC0gYHRyYXZlcnNlQWxsQ2hpbGRyZW4odGhpcy5wcm9wcy5jaGlsZHJlbiwgLi4uKWBcbiAqIC0gYHRyYXZlcnNlQWxsQ2hpbGRyZW4odGhpcy5wcm9wcy5sZWZ0UGFuZWxDaGlsZHJlbiwgLi4uKWBcbiAqXG4gKiBUaGUgYHRyYXZlcnNlQ29udGV4dGAgaXMgYW4gb3B0aW9uYWwgYXJndW1lbnQgdGhhdCBpcyBwYXNzZWQgdGhyb3VnaCB0aGVcbiAqIGVudGlyZSB0cmF2ZXJzYWwuIEl0IGNhbiBiZSB1c2VkIHRvIHN0b3JlIGFjY3VtdWxhdGlvbnMgb3IgYW55dGhpbmcgZWxzZSB0aGF0XG4gKiB0aGUgY2FsbGJhY2sgbWlnaHQgZmluZCByZWxldmFudC5cbiAqXG4gKiBAcGFyYW0gez8qfSBjaGlsZHJlbiBDaGlsZHJlbiB0cmVlIG9iamVjdC5cbiAqIEBwYXJhbSB7IWZ1bmN0aW9ufSBjYWxsYmFjayBUbyBpbnZva2UgdXBvbiB0cmF2ZXJzaW5nIGVhY2ggY2hpbGQuXG4gKiBAcGFyYW0gez8qfSB0cmF2ZXJzZUNvbnRleHQgQ29udGV4dCBmb3IgdHJhdmVyc2FsLlxuICogQHJldHVybiB7IW51bWJlcn0gVGhlIG51bWJlciBvZiBjaGlsZHJlbiBpbiB0aGlzIHN1YnRyZWUuXG4gKi9cbmZ1bmN0aW9uIHRyYXZlcnNlQWxsQ2hpbGRyZW4oY2hpbGRyZW4sIGNhbGxiYWNrLCB0cmF2ZXJzZUNvbnRleHQpIHtcbiAgaWYgKGNoaWxkcmVuID09IG51bGwpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIHJldHVybiB0cmF2ZXJzZUFsbENoaWxkcmVuSW1wbChjaGlsZHJlbiwgJycsIGNhbGxiYWNrLCB0cmF2ZXJzZUNvbnRleHQpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHRyYXZlcnNlQWxsQ2hpbGRyZW47XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1kb20vbGliL3RyYXZlcnNlQWxsQ2hpbGRyZW4uanMiLCJ2YXIgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmICghc2VsZikgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIGNhbGwgJiYgKHR5cGVvZiBjYWxsID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpID8gY2FsbCA6IHNlbGY7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXCIgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcykgOiBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhvYmosIGtleXMpIHsgdmFyIHRhcmdldCA9IHt9OyBmb3IgKHZhciBpIGluIG9iaikgeyBpZiAoa2V5cy5pbmRleE9mKGkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGkpKSBjb250aW51ZTsgdGFyZ2V0W2ldID0gb2JqW2ldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IGhvaXN0U3RhdGljcyBmcm9tICdob2lzdC1ub24tcmVhY3Qtc3RhdGljcyc7XG5pbXBvcnQgaW52YXJpYW50IGZyb20gJ2ludmFyaWFudCc7XG5pbXBvcnQgeyBDb21wb25lbnQsIGNyZWF0ZUVsZW1lbnQgfSBmcm9tICdyZWFjdCc7XG5cbmltcG9ydCBTdWJzY3JpcHRpb24gZnJvbSAnLi4vdXRpbHMvU3Vic2NyaXB0aW9uJztcbmltcG9ydCB7IHN0b3JlU2hhcGUsIHN1YnNjcmlwdGlvblNoYXBlIH0gZnJvbSAnLi4vdXRpbHMvUHJvcFR5cGVzJztcblxudmFyIGhvdFJlbG9hZGluZ1ZlcnNpb24gPSAwO1xudmFyIGR1bW15U3RhdGUgPSB7fTtcbmZ1bmN0aW9uIG5vb3AoKSB7fVxuZnVuY3Rpb24gbWFrZVNlbGVjdG9yU3RhdGVmdWwoc291cmNlU2VsZWN0b3IsIHN0b3JlKSB7XG4gIC8vIHdyYXAgdGhlIHNlbGVjdG9yIGluIGFuIG9iamVjdCB0aGF0IHRyYWNrcyBpdHMgcmVzdWx0cyBiZXR3ZWVuIHJ1bnMuXG4gIHZhciBzZWxlY3RvciA9IHtcbiAgICBydW46IGZ1bmN0aW9uIHJ1bkNvbXBvbmVudFNlbGVjdG9yKHByb3BzKSB7XG4gICAgICB0cnkge1xuICAgICAgICB2YXIgbmV4dFByb3BzID0gc291cmNlU2VsZWN0b3Ioc3RvcmUuZ2V0U3RhdGUoKSwgcHJvcHMpO1xuICAgICAgICBpZiAobmV4dFByb3BzICE9PSBzZWxlY3Rvci5wcm9wcyB8fCBzZWxlY3Rvci5lcnJvcikge1xuICAgICAgICAgIHNlbGVjdG9yLnNob3VsZENvbXBvbmVudFVwZGF0ZSA9IHRydWU7XG4gICAgICAgICAgc2VsZWN0b3IucHJvcHMgPSBuZXh0UHJvcHM7XG4gICAgICAgICAgc2VsZWN0b3IuZXJyb3IgPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBzZWxlY3Rvci5zaG91bGRDb21wb25lbnRVcGRhdGUgPSB0cnVlO1xuICAgICAgICBzZWxlY3Rvci5lcnJvciA9IGVycm9yO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICByZXR1cm4gc2VsZWN0b3I7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNvbm5lY3RBZHZhbmNlZChcbi8qXG4gIHNlbGVjdG9yRmFjdG9yeSBpcyBhIGZ1bmMgdGhhdCBpcyByZXNwb25zaWJsZSBmb3IgcmV0dXJuaW5nIHRoZSBzZWxlY3RvciBmdW5jdGlvbiB1c2VkIHRvXG4gIGNvbXB1dGUgbmV3IHByb3BzIGZyb20gc3RhdGUsIHByb3BzLCBhbmQgZGlzcGF0Y2guIEZvciBleGFtcGxlOlxuICAgICBleHBvcnQgZGVmYXVsdCBjb25uZWN0QWR2YW5jZWQoKGRpc3BhdGNoLCBvcHRpb25zKSA9PiAoc3RhdGUsIHByb3BzKSA9PiAoe1xuICAgICAgdGhpbmc6IHN0YXRlLnRoaW5nc1twcm9wcy50aGluZ0lkXSxcbiAgICAgIHNhdmVUaGluZzogZmllbGRzID0+IGRpc3BhdGNoKGFjdGlvbkNyZWF0b3JzLnNhdmVUaGluZyhwcm9wcy50aGluZ0lkLCBmaWVsZHMpKSxcbiAgICB9KSkoWW91ckNvbXBvbmVudClcbiAgIEFjY2VzcyB0byBkaXNwYXRjaCBpcyBwcm92aWRlZCB0byB0aGUgZmFjdG9yeSBzbyBzZWxlY3RvckZhY3RvcmllcyBjYW4gYmluZCBhY3Rpb25DcmVhdG9yc1xuICBvdXRzaWRlIG9mIHRoZWlyIHNlbGVjdG9yIGFzIGFuIG9wdGltaXphdGlvbi4gT3B0aW9ucyBwYXNzZWQgdG8gY29ubmVjdEFkdmFuY2VkIGFyZSBwYXNzZWQgdG9cbiAgdGhlIHNlbGVjdG9yRmFjdG9yeSwgYWxvbmcgd2l0aCBkaXNwbGF5TmFtZSBhbmQgV3JhcHBlZENvbXBvbmVudCwgYXMgdGhlIHNlY29uZCBhcmd1bWVudC5cbiAgIE5vdGUgdGhhdCBzZWxlY3RvckZhY3RvcnkgaXMgcmVzcG9uc2libGUgZm9yIGFsbCBjYWNoaW5nL21lbW9pemF0aW9uIG9mIGluYm91bmQgYW5kIG91dGJvdW5kXG4gIHByb3BzLiBEbyBub3QgdXNlIGNvbm5lY3RBZHZhbmNlZCBkaXJlY3RseSB3aXRob3V0IG1lbW9pemluZyByZXN1bHRzIGJldHdlZW4gY2FsbHMgdG8geW91clxuICBzZWxlY3Rvciwgb3RoZXJ3aXNlIHRoZSBDb25uZWN0IGNvbXBvbmVudCB3aWxsIHJlLXJlbmRlciBvbiBldmVyeSBzdGF0ZSBvciBwcm9wcyBjaGFuZ2UuXG4qL1xuc2VsZWN0b3JGYWN0b3J5KSB7XG4gIHZhciBfY29udGV4dFR5cGVzLCBfY2hpbGRDb250ZXh0VHlwZXM7XG5cbiAgdmFyIF9yZWYgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9LFxuICAgICAgX3JlZiRnZXREaXNwbGF5TmFtZSA9IF9yZWYuZ2V0RGlzcGxheU5hbWUsXG4gICAgICBnZXREaXNwbGF5TmFtZSA9IF9yZWYkZ2V0RGlzcGxheU5hbWUgPT09IHVuZGVmaW5lZCA/IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgcmV0dXJuICdDb25uZWN0QWR2YW5jZWQoJyArIG5hbWUgKyAnKSc7XG4gIH0gOiBfcmVmJGdldERpc3BsYXlOYW1lLFxuICAgICAgX3JlZiRtZXRob2ROYW1lID0gX3JlZi5tZXRob2ROYW1lLFxuICAgICAgbWV0aG9kTmFtZSA9IF9yZWYkbWV0aG9kTmFtZSA9PT0gdW5kZWZpbmVkID8gJ2Nvbm5lY3RBZHZhbmNlZCcgOiBfcmVmJG1ldGhvZE5hbWUsXG4gICAgICBfcmVmJHJlbmRlckNvdW50UHJvcCA9IF9yZWYucmVuZGVyQ291bnRQcm9wLFxuICAgICAgcmVuZGVyQ291bnRQcm9wID0gX3JlZiRyZW5kZXJDb3VudFByb3AgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IF9yZWYkcmVuZGVyQ291bnRQcm9wLFxuICAgICAgX3JlZiRzaG91bGRIYW5kbGVTdGF0ID0gX3JlZi5zaG91bGRIYW5kbGVTdGF0ZUNoYW5nZXMsXG4gICAgICBzaG91bGRIYW5kbGVTdGF0ZUNoYW5nZXMgPSBfcmVmJHNob3VsZEhhbmRsZVN0YXQgPT09IHVuZGVmaW5lZCA/IHRydWUgOiBfcmVmJHNob3VsZEhhbmRsZVN0YXQsXG4gICAgICBfcmVmJHN0b3JlS2V5ID0gX3JlZi5zdG9yZUtleSxcbiAgICAgIHN0b3JlS2V5ID0gX3JlZiRzdG9yZUtleSA9PT0gdW5kZWZpbmVkID8gJ3N0b3JlJyA6IF9yZWYkc3RvcmVLZXksXG4gICAgICBfcmVmJHdpdGhSZWYgPSBfcmVmLndpdGhSZWYsXG4gICAgICB3aXRoUmVmID0gX3JlZiR3aXRoUmVmID09PSB1bmRlZmluZWQgPyBmYWxzZSA6IF9yZWYkd2l0aFJlZixcbiAgICAgIGNvbm5lY3RPcHRpb25zID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFsnZ2V0RGlzcGxheU5hbWUnLCAnbWV0aG9kTmFtZScsICdyZW5kZXJDb3VudFByb3AnLCAnc2hvdWxkSGFuZGxlU3RhdGVDaGFuZ2VzJywgJ3N0b3JlS2V5JywgJ3dpdGhSZWYnXSk7XG5cbiAgdmFyIHN1YnNjcmlwdGlvbktleSA9IHN0b3JlS2V5ICsgJ1N1YnNjcmlwdGlvbic7XG4gIHZhciB2ZXJzaW9uID0gaG90UmVsb2FkaW5nVmVyc2lvbisrO1xuXG4gIHZhciBjb250ZXh0VHlwZXMgPSAoX2NvbnRleHRUeXBlcyA9IHt9LCBfY29udGV4dFR5cGVzW3N0b3JlS2V5XSA9IHN0b3JlU2hhcGUsIF9jb250ZXh0VHlwZXNbc3Vic2NyaXB0aW9uS2V5XSA9IHN1YnNjcmlwdGlvblNoYXBlLCBfY29udGV4dFR5cGVzKTtcbiAgdmFyIGNoaWxkQ29udGV4dFR5cGVzID0gKF9jaGlsZENvbnRleHRUeXBlcyA9IHt9LCBfY2hpbGRDb250ZXh0VHlwZXNbc3Vic2NyaXB0aW9uS2V5XSA9IHN1YnNjcmlwdGlvblNoYXBlLCBfY2hpbGRDb250ZXh0VHlwZXMpO1xuXG4gIHJldHVybiBmdW5jdGlvbiB3cmFwV2l0aENvbm5lY3QoV3JhcHBlZENvbXBvbmVudCkge1xuICAgIGludmFyaWFudCh0eXBlb2YgV3JhcHBlZENvbXBvbmVudCA9PSAnZnVuY3Rpb24nLCAnWW91IG11c3QgcGFzcyBhIGNvbXBvbmVudCB0byB0aGUgZnVuY3Rpb24gcmV0dXJuZWQgYnkgJyArICgnY29ubmVjdC4gSW5zdGVhZCByZWNlaXZlZCAnICsgSlNPTi5zdHJpbmdpZnkoV3JhcHBlZENvbXBvbmVudCkpKTtcblxuICAgIHZhciB3cmFwcGVkQ29tcG9uZW50TmFtZSA9IFdyYXBwZWRDb21wb25lbnQuZGlzcGxheU5hbWUgfHwgV3JhcHBlZENvbXBvbmVudC5uYW1lIHx8ICdDb21wb25lbnQnO1xuXG4gICAgdmFyIGRpc3BsYXlOYW1lID0gZ2V0RGlzcGxheU5hbWUod3JhcHBlZENvbXBvbmVudE5hbWUpO1xuXG4gICAgdmFyIHNlbGVjdG9yRmFjdG9yeU9wdGlvbnMgPSBfZXh0ZW5kcyh7fSwgY29ubmVjdE9wdGlvbnMsIHtcbiAgICAgIGdldERpc3BsYXlOYW1lOiBnZXREaXNwbGF5TmFtZSxcbiAgICAgIG1ldGhvZE5hbWU6IG1ldGhvZE5hbWUsXG4gICAgICByZW5kZXJDb3VudFByb3A6IHJlbmRlckNvdW50UHJvcCxcbiAgICAgIHNob3VsZEhhbmRsZVN0YXRlQ2hhbmdlczogc2hvdWxkSGFuZGxlU3RhdGVDaGFuZ2VzLFxuICAgICAgc3RvcmVLZXk6IHN0b3JlS2V5LFxuICAgICAgd2l0aFJlZjogd2l0aFJlZixcbiAgICAgIGRpc3BsYXlOYW1lOiBkaXNwbGF5TmFtZSxcbiAgICAgIHdyYXBwZWRDb21wb25lbnROYW1lOiB3cmFwcGVkQ29tcG9uZW50TmFtZSxcbiAgICAgIFdyYXBwZWRDb21wb25lbnQ6IFdyYXBwZWRDb21wb25lbnRcbiAgICB9KTtcblxuICAgIHZhciBDb25uZWN0ID0gZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgICAgIF9pbmhlcml0cyhDb25uZWN0LCBfQ29tcG9uZW50KTtcblxuICAgICAgZnVuY3Rpb24gQ29ubmVjdChwcm9wcywgY29udGV4dCkge1xuICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgQ29ubmVjdCk7XG5cbiAgICAgICAgdmFyIF90aGlzID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgX0NvbXBvbmVudC5jYWxsKHRoaXMsIHByb3BzLCBjb250ZXh0KSk7XG5cbiAgICAgICAgX3RoaXMudmVyc2lvbiA9IHZlcnNpb247XG4gICAgICAgIF90aGlzLnN0YXRlID0ge307XG4gICAgICAgIF90aGlzLnJlbmRlckNvdW50ID0gMDtcbiAgICAgICAgX3RoaXMuc3RvcmUgPSBwcm9wc1tzdG9yZUtleV0gfHwgY29udGV4dFtzdG9yZUtleV07XG4gICAgICAgIF90aGlzLnByb3BzTW9kZSA9IEJvb2xlYW4ocHJvcHNbc3RvcmVLZXldKTtcbiAgICAgICAgX3RoaXMuc2V0V3JhcHBlZEluc3RhbmNlID0gX3RoaXMuc2V0V3JhcHBlZEluc3RhbmNlLmJpbmQoX3RoaXMpO1xuXG4gICAgICAgIGludmFyaWFudChfdGhpcy5zdG9yZSwgJ0NvdWxkIG5vdCBmaW5kIFwiJyArIHN0b3JlS2V5ICsgJ1wiIGluIGVpdGhlciB0aGUgY29udGV4dCBvciBwcm9wcyBvZiAnICsgKCdcIicgKyBkaXNwbGF5TmFtZSArICdcIi4gRWl0aGVyIHdyYXAgdGhlIHJvb3QgY29tcG9uZW50IGluIGEgPFByb3ZpZGVyPiwgJykgKyAoJ29yIGV4cGxpY2l0bHkgcGFzcyBcIicgKyBzdG9yZUtleSArICdcIiBhcyBhIHByb3AgdG8gXCInICsgZGlzcGxheU5hbWUgKyAnXCIuJykpO1xuXG4gICAgICAgIF90aGlzLmluaXRTZWxlY3RvcigpO1xuICAgICAgICBfdGhpcy5pbml0U3Vic2NyaXB0aW9uKCk7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICAgIH1cblxuICAgICAgQ29ubmVjdC5wcm90b3R5cGUuZ2V0Q2hpbGRDb250ZXh0ID0gZnVuY3Rpb24gZ2V0Q2hpbGRDb250ZXh0KCkge1xuICAgICAgICB2YXIgX3JlZjI7XG5cbiAgICAgICAgLy8gSWYgdGhpcyBjb21wb25lbnQgcmVjZWl2ZWQgc3RvcmUgZnJvbSBwcm9wcywgaXRzIHN1YnNjcmlwdGlvbiBzaG91bGQgYmUgdHJhbnNwYXJlbnRcbiAgICAgICAgLy8gdG8gYW55IGRlc2NlbmRhbnRzIHJlY2VpdmluZyBzdG9yZStzdWJzY3JpcHRpb24gZnJvbSBjb250ZXh0OyBpdCBwYXNzZXMgYWxvbmdcbiAgICAgICAgLy8gc3Vic2NyaXB0aW9uIHBhc3NlZCB0byBpdC4gT3RoZXJ3aXNlLCBpdCBzaGFkb3dzIHRoZSBwYXJlbnQgc3Vic2NyaXB0aW9uLCB3aGljaCBhbGxvd3NcbiAgICAgICAgLy8gQ29ubmVjdCB0byBjb250cm9sIG9yZGVyaW5nIG9mIG5vdGlmaWNhdGlvbnMgdG8gZmxvdyB0b3AtZG93bi5cbiAgICAgICAgdmFyIHN1YnNjcmlwdGlvbiA9IHRoaXMucHJvcHNNb2RlID8gbnVsbCA6IHRoaXMuc3Vic2NyaXB0aW9uO1xuICAgICAgICByZXR1cm4gX3JlZjIgPSB7fSwgX3JlZjJbc3Vic2NyaXB0aW9uS2V5XSA9IHN1YnNjcmlwdGlvbiB8fCB0aGlzLmNvbnRleHRbc3Vic2NyaXB0aW9uS2V5XSwgX3JlZjI7XG4gICAgICB9O1xuXG4gICAgICBDb25uZWN0LnByb3RvdHlwZS5jb21wb25lbnREaWRNb3VudCA9IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgICBpZiAoIXNob3VsZEhhbmRsZVN0YXRlQ2hhbmdlcykgcmV0dXJuO1xuXG4gICAgICAgIC8vIGNvbXBvbmVudFdpbGxNb3VudCBmaXJlcyBkdXJpbmcgc2VydmVyIHNpZGUgcmVuZGVyaW5nLCBidXQgY29tcG9uZW50RGlkTW91bnQgYW5kXG4gICAgICAgIC8vIGNvbXBvbmVudFdpbGxVbm1vdW50IGRvIG5vdC4gQmVjYXVzZSBvZiB0aGlzLCB0cnlTdWJzY3JpYmUgaGFwcGVucyBkdXJpbmcgLi4uZGlkTW91bnQuXG4gICAgICAgIC8vIE90aGVyd2lzZSwgdW5zdWJzY3JpcHRpb24gd291bGQgbmV2ZXIgdGFrZSBwbGFjZSBkdXJpbmcgU1NSLCBjYXVzaW5nIGEgbWVtb3J5IGxlYWsuXG4gICAgICAgIC8vIFRvIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSBhIGNoaWxkIGNvbXBvbmVudCBtYXkgaGF2ZSB0cmlnZ2VyZWQgYSBzdGF0ZSBjaGFuZ2UgYnlcbiAgICAgICAgLy8gZGlzcGF0Y2hpbmcgYW4gYWN0aW9uIGluIGl0cyBjb21wb25lbnRXaWxsTW91bnQsIHdlIGhhdmUgdG8gcmUtcnVuIHRoZSBzZWxlY3QgYW5kIG1heWJlXG4gICAgICAgIC8vIHJlLXJlbmRlci5cbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24udHJ5U3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuc2VsZWN0b3IucnVuKHRoaXMucHJvcHMpO1xuICAgICAgICBpZiAodGhpcy5zZWxlY3Rvci5zaG91bGRDb21wb25lbnRVcGRhdGUpIHRoaXMuZm9yY2VVcGRhdGUoKTtcbiAgICAgIH07XG5cbiAgICAgIENvbm5lY3QucHJvdG90eXBlLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgPSBmdW5jdGlvbiBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG5leHRQcm9wcykge1xuICAgICAgICB0aGlzLnNlbGVjdG9yLnJ1bihuZXh0UHJvcHMpO1xuICAgICAgfTtcblxuICAgICAgQ29ubmVjdC5wcm90b3R5cGUuc2hvdWxkQ29tcG9uZW50VXBkYXRlID0gZnVuY3Rpb24gc2hvdWxkQ29tcG9uZW50VXBkYXRlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3Rvci5zaG91bGRDb21wb25lbnRVcGRhdGU7XG4gICAgICB9O1xuXG4gICAgICBDb25uZWN0LnByb3RvdHlwZS5jb21wb25lbnRXaWxsVW5tb3VudCA9IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgICBpZiAodGhpcy5zdWJzY3JpcHRpb24pIHRoaXMuc3Vic2NyaXB0aW9uLnRyeVVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gbnVsbDtcbiAgICAgICAgdGhpcy5ub3RpZnlOZXN0ZWRTdWJzID0gbm9vcDtcbiAgICAgICAgdGhpcy5zdG9yZSA9IG51bGw7XG4gICAgICAgIHRoaXMuc2VsZWN0b3IucnVuID0gbm9vcDtcbiAgICAgICAgdGhpcy5zZWxlY3Rvci5zaG91bGRDb21wb25lbnRVcGRhdGUgPSBmYWxzZTtcbiAgICAgIH07XG5cbiAgICAgIENvbm5lY3QucHJvdG90eXBlLmdldFdyYXBwZWRJbnN0YW5jZSA9IGZ1bmN0aW9uIGdldFdyYXBwZWRJbnN0YW5jZSgpIHtcbiAgICAgICAgaW52YXJpYW50KHdpdGhSZWYsICdUbyBhY2Nlc3MgdGhlIHdyYXBwZWQgaW5zdGFuY2UsIHlvdSBuZWVkIHRvIHNwZWNpZnkgJyArICgneyB3aXRoUmVmOiB0cnVlIH0gaW4gdGhlIG9wdGlvbnMgYXJndW1lbnQgb2YgdGhlICcgKyBtZXRob2ROYW1lICsgJygpIGNhbGwuJykpO1xuICAgICAgICByZXR1cm4gdGhpcy53cmFwcGVkSW5zdGFuY2U7XG4gICAgICB9O1xuXG4gICAgICBDb25uZWN0LnByb3RvdHlwZS5zZXRXcmFwcGVkSW5zdGFuY2UgPSBmdW5jdGlvbiBzZXRXcmFwcGVkSW5zdGFuY2UocmVmKSB7XG4gICAgICAgIHRoaXMud3JhcHBlZEluc3RhbmNlID0gcmVmO1xuICAgICAgfTtcblxuICAgICAgQ29ubmVjdC5wcm90b3R5cGUuaW5pdFNlbGVjdG9yID0gZnVuY3Rpb24gaW5pdFNlbGVjdG9yKCkge1xuICAgICAgICB2YXIgc291cmNlU2VsZWN0b3IgPSBzZWxlY3RvckZhY3RvcnkodGhpcy5zdG9yZS5kaXNwYXRjaCwgc2VsZWN0b3JGYWN0b3J5T3B0aW9ucyk7XG4gICAgICAgIHRoaXMuc2VsZWN0b3IgPSBtYWtlU2VsZWN0b3JTdGF0ZWZ1bChzb3VyY2VTZWxlY3RvciwgdGhpcy5zdG9yZSk7XG4gICAgICAgIHRoaXMuc2VsZWN0b3IucnVuKHRoaXMucHJvcHMpO1xuICAgICAgfTtcblxuICAgICAgQ29ubmVjdC5wcm90b3R5cGUuaW5pdFN1YnNjcmlwdGlvbiA9IGZ1bmN0aW9uIGluaXRTdWJzY3JpcHRpb24oKSB7XG4gICAgICAgIGlmICghc2hvdWxkSGFuZGxlU3RhdGVDaGFuZ2VzKSByZXR1cm47XG5cbiAgICAgICAgLy8gcGFyZW50U3ViJ3Mgc291cmNlIHNob3VsZCBtYXRjaCB3aGVyZSBzdG9yZSBjYW1lIGZyb206IHByb3BzIHZzLiBjb250ZXh0LiBBIGNvbXBvbmVudFxuICAgICAgICAvLyBjb25uZWN0ZWQgdG8gdGhlIHN0b3JlIHZpYSBwcm9wcyBzaG91bGRuJ3QgdXNlIHN1YnNjcmlwdGlvbiBmcm9tIGNvbnRleHQsIG9yIHZpY2UgdmVyc2EuXG4gICAgICAgIHZhciBwYXJlbnRTdWIgPSAodGhpcy5wcm9wc01vZGUgPyB0aGlzLnByb3BzIDogdGhpcy5jb250ZXh0KVtzdWJzY3JpcHRpb25LZXldO1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24odGhpcy5zdG9yZSwgcGFyZW50U3ViLCB0aGlzLm9uU3RhdGVDaGFuZ2UuYmluZCh0aGlzKSk7XG5cbiAgICAgICAgLy8gYG5vdGlmeU5lc3RlZFN1YnNgIGlzIGR1cGxpY2F0ZWQgdG8gaGFuZGxlIHRoZSBjYXNlIHdoZXJlIHRoZSBjb21wb25lbnQgaXMgIHVubW91bnRlZCBpblxuICAgICAgICAvLyB0aGUgbWlkZGxlIG9mIHRoZSBub3RpZmljYXRpb24gbG9vcCwgd2hlcmUgYHRoaXMuc3Vic2NyaXB0aW9uYCB3aWxsIHRoZW4gYmUgbnVsbC4gQW5cbiAgICAgICAgLy8gZXh0cmEgbnVsbCBjaGVjayBldmVyeSBjaGFuZ2UgY2FuIGJlIGF2b2lkZWQgYnkgY29weWluZyB0aGUgbWV0aG9kIG9udG8gYHRoaXNgIGFuZCB0aGVuXG4gICAgICAgIC8vIHJlcGxhY2luZyBpdCB3aXRoIGEgbm8tb3Agb24gdW5tb3VudC4gVGhpcyBjYW4gcHJvYmFibHkgYmUgYXZvaWRlZCBpZiBTdWJzY3JpcHRpb24nc1xuICAgICAgICAvLyBsaXN0ZW5lcnMgbG9naWMgaXMgY2hhbmdlZCB0byBub3QgY2FsbCBsaXN0ZW5lcnMgdGhhdCBoYXZlIGJlZW4gdW5zdWJzY3JpYmVkIGluIHRoZVxuICAgICAgICAvLyBtaWRkbGUgb2YgdGhlIG5vdGlmaWNhdGlvbiBsb29wLlxuICAgICAgICB0aGlzLm5vdGlmeU5lc3RlZFN1YnMgPSB0aGlzLnN1YnNjcmlwdGlvbi5ub3RpZnlOZXN0ZWRTdWJzLmJpbmQodGhpcy5zdWJzY3JpcHRpb24pO1xuICAgICAgfTtcblxuICAgICAgQ29ubmVjdC5wcm90b3R5cGUub25TdGF0ZUNoYW5nZSA9IGZ1bmN0aW9uIG9uU3RhdGVDaGFuZ2UoKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0b3IucnVuKHRoaXMucHJvcHMpO1xuXG4gICAgICAgIGlmICghdGhpcy5zZWxlY3Rvci5zaG91bGRDb21wb25lbnRVcGRhdGUpIHtcbiAgICAgICAgICB0aGlzLm5vdGlmeU5lc3RlZFN1YnMoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmNvbXBvbmVudERpZFVwZGF0ZSA9IHRoaXMubm90aWZ5TmVzdGVkU3Vic09uQ29tcG9uZW50RGlkVXBkYXRlO1xuICAgICAgICAgIHRoaXMuc2V0U3RhdGUoZHVtbXlTdGF0ZSk7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIENvbm5lY3QucHJvdG90eXBlLm5vdGlmeU5lc3RlZFN1YnNPbkNvbXBvbmVudERpZFVwZGF0ZSA9IGZ1bmN0aW9uIG5vdGlmeU5lc3RlZFN1YnNPbkNvbXBvbmVudERpZFVwZGF0ZSgpIHtcbiAgICAgICAgLy8gYGNvbXBvbmVudERpZFVwZGF0ZWAgaXMgY29uZGl0aW9uYWxseSBpbXBsZW1lbnRlZCB3aGVuIGBvblN0YXRlQ2hhbmdlYCBkZXRlcm1pbmVzIGl0XG4gICAgICAgIC8vIG5lZWRzIHRvIG5vdGlmeSBuZXN0ZWQgc3Vicy4gT25jZSBjYWxsZWQsIGl0IHVuaW1wbGVtZW50cyBpdHNlbGYgdW50aWwgZnVydGhlciBzdGF0ZVxuICAgICAgICAvLyBjaGFuZ2VzIG9jY3VyLiBEb2luZyBpdCB0aGlzIHdheSB2cyBoYXZpbmcgYSBwZXJtYW5lbnQgYGNvbXBvbmVudERpZE1vdW50YCB0aGF0IGRvZXNcbiAgICAgICAgLy8gYSBib29sZWFuIGNoZWNrIGV2ZXJ5IHRpbWUgYXZvaWRzIGFuIGV4dHJhIG1ldGhvZCBjYWxsIG1vc3Qgb2YgdGhlIHRpbWUsIHJlc3VsdGluZ1xuICAgICAgICAvLyBpbiBzb21lIHBlcmYgYm9vc3QuXG4gICAgICAgIHRoaXMuY29tcG9uZW50RGlkVXBkYXRlID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLm5vdGlmeU5lc3RlZFN1YnMoKTtcbiAgICAgIH07XG5cbiAgICAgIENvbm5lY3QucHJvdG90eXBlLmlzU3Vic2NyaWJlZCA9IGZ1bmN0aW9uIGlzU3Vic2NyaWJlZCgpIHtcbiAgICAgICAgcmV0dXJuIEJvb2xlYW4odGhpcy5zdWJzY3JpcHRpb24pICYmIHRoaXMuc3Vic2NyaXB0aW9uLmlzU3Vic2NyaWJlZCgpO1xuICAgICAgfTtcblxuICAgICAgQ29ubmVjdC5wcm90b3R5cGUuYWRkRXh0cmFQcm9wcyA9IGZ1bmN0aW9uIGFkZEV4dHJhUHJvcHMocHJvcHMpIHtcbiAgICAgICAgaWYgKCF3aXRoUmVmICYmICFyZW5kZXJDb3VudFByb3AgJiYgISh0aGlzLnByb3BzTW9kZSAmJiB0aGlzLnN1YnNjcmlwdGlvbikpIHJldHVybiBwcm9wcztcbiAgICAgICAgLy8gbWFrZSBhIHNoYWxsb3cgY29weSBzbyB0aGF0IGZpZWxkcyBhZGRlZCBkb24ndCBsZWFrIHRvIHRoZSBvcmlnaW5hbCBzZWxlY3Rvci5cbiAgICAgICAgLy8gdGhpcyBpcyBlc3BlY2lhbGx5IGltcG9ydGFudCBmb3IgJ3JlZicgc2luY2UgdGhhdCdzIGEgcmVmZXJlbmNlIGJhY2sgdG8gdGhlIGNvbXBvbmVudFxuICAgICAgICAvLyBpbnN0YW5jZS4gYSBzaW5nbGV0b24gbWVtb2l6ZWQgc2VsZWN0b3Igd291bGQgdGhlbiBiZSBob2xkaW5nIGEgcmVmZXJlbmNlIHRvIHRoZVxuICAgICAgICAvLyBpbnN0YW5jZSwgcHJldmVudGluZyB0aGUgaW5zdGFuY2UgZnJvbSBiZWluZyBnYXJiYWdlIGNvbGxlY3RlZCwgYW5kIHRoYXQgd291bGQgYmUgYmFkXG4gICAgICAgIHZhciB3aXRoRXh0cmFzID0gX2V4dGVuZHMoe30sIHByb3BzKTtcbiAgICAgICAgaWYgKHdpdGhSZWYpIHdpdGhFeHRyYXMucmVmID0gdGhpcy5zZXRXcmFwcGVkSW5zdGFuY2U7XG4gICAgICAgIGlmIChyZW5kZXJDb3VudFByb3ApIHdpdGhFeHRyYXNbcmVuZGVyQ291bnRQcm9wXSA9IHRoaXMucmVuZGVyQ291bnQrKztcbiAgICAgICAgaWYgKHRoaXMucHJvcHNNb2RlICYmIHRoaXMuc3Vic2NyaXB0aW9uKSB3aXRoRXh0cmFzW3N1YnNjcmlwdGlvbktleV0gPSB0aGlzLnN1YnNjcmlwdGlvbjtcbiAgICAgICAgcmV0dXJuIHdpdGhFeHRyYXM7XG4gICAgICB9O1xuXG4gICAgICBDb25uZWN0LnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICAgIHZhciBzZWxlY3RvciA9IHRoaXMuc2VsZWN0b3I7XG4gICAgICAgIHNlbGVjdG9yLnNob3VsZENvbXBvbmVudFVwZGF0ZSA9IGZhbHNlO1xuXG4gICAgICAgIGlmIChzZWxlY3Rvci5lcnJvcikge1xuICAgICAgICAgIHRocm93IHNlbGVjdG9yLmVycm9yO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBjcmVhdGVFbGVtZW50KFdyYXBwZWRDb21wb25lbnQsIHRoaXMuYWRkRXh0cmFQcm9wcyhzZWxlY3Rvci5wcm9wcykpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gQ29ubmVjdDtcbiAgICB9KENvbXBvbmVudCk7XG5cbiAgICBDb25uZWN0LldyYXBwZWRDb21wb25lbnQgPSBXcmFwcGVkQ29tcG9uZW50O1xuICAgIENvbm5lY3QuZGlzcGxheU5hbWUgPSBkaXNwbGF5TmFtZTtcbiAgICBDb25uZWN0LmNoaWxkQ29udGV4dFR5cGVzID0gY2hpbGRDb250ZXh0VHlwZXM7XG4gICAgQ29ubmVjdC5jb250ZXh0VHlwZXMgPSBjb250ZXh0VHlwZXM7XG4gICAgQ29ubmVjdC5wcm9wVHlwZXMgPSBjb250ZXh0VHlwZXM7XG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgQ29ubmVjdC5wcm90b3R5cGUuY29tcG9uZW50V2lsbFVwZGF0ZSA9IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVcGRhdGUoKSB7XG4gICAgICAgIC8vIFdlIGFyZSBob3QgcmVsb2FkaW5nIVxuICAgICAgICBpZiAodGhpcy52ZXJzaW9uICE9PSB2ZXJzaW9uKSB7XG4gICAgICAgICAgdGhpcy52ZXJzaW9uID0gdmVyc2lvbjtcbiAgICAgICAgICB0aGlzLmluaXRTZWxlY3RvcigpO1xuXG4gICAgICAgICAgaWYgKHRoaXMuc3Vic2NyaXB0aW9uKSB0aGlzLnN1YnNjcmlwdGlvbi50cnlVbnN1YnNjcmliZSgpO1xuICAgICAgICAgIHRoaXMuaW5pdFN1YnNjcmlwdGlvbigpO1xuICAgICAgICAgIGlmIChzaG91bGRIYW5kbGVTdGF0ZUNoYW5nZXMpIHRoaXMuc3Vic2NyaXB0aW9uLnRyeVN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiBob2lzdFN0YXRpY3MoQ29ubmVjdCwgV3JhcHBlZENvbXBvbmVudCk7XG4gIH07XG59XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1yZWR1eC9lcy9jb21wb25lbnRzL2Nvbm5lY3RBZHZhbmNlZC5qcyIsImltcG9ydCB2ZXJpZnlQbGFpbk9iamVjdCBmcm9tICcuLi91dGlscy92ZXJpZnlQbGFpbk9iamVjdCc7XG5cbmV4cG9ydCBmdW5jdGlvbiB3cmFwTWFwVG9Qcm9wc0NvbnN0YW50KGdldENvbnN0YW50KSB7XG4gIHJldHVybiBmdW5jdGlvbiBpbml0Q29uc3RhbnRTZWxlY3RvcihkaXNwYXRjaCwgb3B0aW9ucykge1xuICAgIHZhciBjb25zdGFudCA9IGdldENvbnN0YW50KGRpc3BhdGNoLCBvcHRpb25zKTtcblxuICAgIGZ1bmN0aW9uIGNvbnN0YW50U2VsZWN0b3IoKSB7XG4gICAgICByZXR1cm4gY29uc3RhbnQ7XG4gICAgfVxuICAgIGNvbnN0YW50U2VsZWN0b3IuZGVwZW5kc09uT3duUHJvcHMgPSBmYWxzZTtcbiAgICByZXR1cm4gY29uc3RhbnRTZWxlY3RvcjtcbiAgfTtcbn1cblxuLy8gZGVwZW5kc09uT3duUHJvcHMgaXMgdXNlZCBieSBjcmVhdGVNYXBUb1Byb3BzUHJveHkgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdG8gcGFzcyBwcm9wcyBhcyBhcmdzXG4vLyB0byB0aGUgbWFwVG9Qcm9wcyBmdW5jdGlvbiBiZWluZyB3cmFwcGVkLiBJdCBpcyBhbHNvIHVzZWQgYnkgbWFrZVB1cmVQcm9wc1NlbGVjdG9yIHRvIGRldGVybWluZVxuLy8gd2hldGhlciBtYXBUb1Byb3BzIG5lZWRzIHRvIGJlIGludm9rZWQgd2hlbiBwcm9wcyBoYXZlIGNoYW5nZWQuXG4vLyBcbi8vIEEgbGVuZ3RoIG9mIG9uZSBzaWduYWxzIHRoYXQgbWFwVG9Qcm9wcyBkb2VzIG5vdCBkZXBlbmQgb24gcHJvcHMgZnJvbSB0aGUgcGFyZW50IGNvbXBvbmVudC5cbi8vIEEgbGVuZ3RoIG9mIHplcm8gaXMgYXNzdW1lZCB0byBtZWFuIG1hcFRvUHJvcHMgaXMgZ2V0dGluZyBhcmdzIHZpYSBhcmd1bWVudHMgb3IgLi4uYXJncyBhbmRcbi8vIHRoZXJlZm9yZSBub3QgcmVwb3J0aW5nIGl0cyBsZW5ndGggYWNjdXJhdGVseS4uXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVwZW5kc09uT3duUHJvcHMobWFwVG9Qcm9wcykge1xuICByZXR1cm4gbWFwVG9Qcm9wcy5kZXBlbmRzT25Pd25Qcm9wcyAhPT0gbnVsbCAmJiBtYXBUb1Byb3BzLmRlcGVuZHNPbk93blByb3BzICE9PSB1bmRlZmluZWQgPyBCb29sZWFuKG1hcFRvUHJvcHMuZGVwZW5kc09uT3duUHJvcHMpIDogbWFwVG9Qcm9wcy5sZW5ndGggIT09IDE7XG59XG5cbi8vIFVzZWQgYnkgd2hlbk1hcFN0YXRlVG9Qcm9wc0lzRnVuY3Rpb24gYW5kIHdoZW5NYXBEaXNwYXRjaFRvUHJvcHNJc0Z1bmN0aW9uLFxuLy8gdGhpcyBmdW5jdGlvbiB3cmFwcyBtYXBUb1Byb3BzIGluIGEgcHJveHkgZnVuY3Rpb24gd2hpY2ggZG9lcyBzZXZlcmFsIHRoaW5nczpcbi8vIFxuLy8gICogRGV0ZWN0cyB3aGV0aGVyIHRoZSBtYXBUb1Byb3BzIGZ1bmN0aW9uIGJlaW5nIGNhbGxlZCBkZXBlbmRzIG9uIHByb3BzLCB3aGljaFxuLy8gICAgaXMgdXNlZCBieSBzZWxlY3RvckZhY3RvcnkgdG8gZGVjaWRlIGlmIGl0IHNob3VsZCByZWludm9rZSBvbiBwcm9wcyBjaGFuZ2VzLlxuLy8gICAgXG4vLyAgKiBPbiBmaXJzdCBjYWxsLCBoYW5kbGVzIG1hcFRvUHJvcHMgaWYgcmV0dXJucyBhbm90aGVyIGZ1bmN0aW9uLCBhbmQgdHJlYXRzIHRoYXRcbi8vICAgIG5ldyBmdW5jdGlvbiBhcyB0aGUgdHJ1ZSBtYXBUb1Byb3BzIGZvciBzdWJzZXF1ZW50IGNhbGxzLlxuLy8gICAgXG4vLyAgKiBPbiBmaXJzdCBjYWxsLCB2ZXJpZmllcyB0aGUgZmlyc3QgcmVzdWx0IGlzIGEgcGxhaW4gb2JqZWN0LCBpbiBvcmRlciB0byB3YXJuXG4vLyAgICB0aGUgZGV2ZWxvcGVyIHRoYXQgdGhlaXIgbWFwVG9Qcm9wcyBmdW5jdGlvbiBpcyBub3QgcmV0dXJuaW5nIGEgdmFsaWQgcmVzdWx0LlxuLy8gICAgXG5leHBvcnQgZnVuY3Rpb24gd3JhcE1hcFRvUHJvcHNGdW5jKG1hcFRvUHJvcHMsIG1ldGhvZE5hbWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGluaXRQcm94eVNlbGVjdG9yKGRpc3BhdGNoLCBfcmVmKSB7XG4gICAgdmFyIGRpc3BsYXlOYW1lID0gX3JlZi5kaXNwbGF5TmFtZTtcblxuICAgIHZhciBwcm94eSA9IGZ1bmN0aW9uIG1hcFRvUHJvcHNQcm94eShzdGF0ZU9yRGlzcGF0Y2gsIG93blByb3BzKSB7XG4gICAgICByZXR1cm4gcHJveHkuZGVwZW5kc09uT3duUHJvcHMgPyBwcm94eS5tYXBUb1Byb3BzKHN0YXRlT3JEaXNwYXRjaCwgb3duUHJvcHMpIDogcHJveHkubWFwVG9Qcm9wcyhzdGF0ZU9yRGlzcGF0Y2gpO1xuICAgIH07XG5cbiAgICAvLyBhbGxvdyBkZXRlY3RGYWN0b3J5QW5kVmVyaWZ5IHRvIGdldCBvd25Qcm9wc1xuICAgIHByb3h5LmRlcGVuZHNPbk93blByb3BzID0gdHJ1ZTtcblxuICAgIHByb3h5Lm1hcFRvUHJvcHMgPSBmdW5jdGlvbiBkZXRlY3RGYWN0b3J5QW5kVmVyaWZ5KHN0YXRlT3JEaXNwYXRjaCwgb3duUHJvcHMpIHtcbiAgICAgIHByb3h5Lm1hcFRvUHJvcHMgPSBtYXBUb1Byb3BzO1xuICAgICAgcHJveHkuZGVwZW5kc09uT3duUHJvcHMgPSBnZXREZXBlbmRzT25Pd25Qcm9wcyhtYXBUb1Byb3BzKTtcbiAgICAgIHZhciBwcm9wcyA9IHByb3h5KHN0YXRlT3JEaXNwYXRjaCwgb3duUHJvcHMpO1xuXG4gICAgICBpZiAodHlwZW9mIHByb3BzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHByb3h5Lm1hcFRvUHJvcHMgPSBwcm9wcztcbiAgICAgICAgcHJveHkuZGVwZW5kc09uT3duUHJvcHMgPSBnZXREZXBlbmRzT25Pd25Qcm9wcyhwcm9wcyk7XG4gICAgICAgIHByb3BzID0gcHJveHkoc3RhdGVPckRpc3BhdGNoLCBvd25Qcm9wcyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB2ZXJpZnlQbGFpbk9iamVjdChwcm9wcywgZGlzcGxheU5hbWUsIG1ldGhvZE5hbWUpO1xuXG4gICAgICByZXR1cm4gcHJvcHM7XG4gICAgfTtcblxuICAgIHJldHVybiBwcm94eTtcbiAgfTtcbn1cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3JlYWN0LXJlZHV4L2VzL2Nvbm5lY3Qvd3JhcE1hcFRvUHJvcHMuanMiLCJpbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuXG5leHBvcnQgdmFyIHN1YnNjcmlwdGlvblNoYXBlID0gUHJvcFR5cGVzLnNoYXBlKHtcbiAgdHJ5U3Vic2NyaWJlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICB0cnlVbnN1YnNjcmliZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgbm90aWZ5TmVzdGVkU3ViczogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgaXNTdWJzY3JpYmVkOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkXG59KTtcblxuZXhwb3J0IHZhciBzdG9yZVNoYXBlID0gUHJvcFR5cGVzLnNoYXBlKHtcbiAgc3Vic2NyaWJlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBkaXNwYXRjaDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgZ2V0U3RhdGU6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWRcbn0pO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QtcmVkdXgvZXMvdXRpbHMvUHJvcFR5cGVzLmpzIiwiaW1wb3J0IGlzUGxhaW5PYmplY3QgZnJvbSAnbG9kYXNoLWVzL2lzUGxhaW5PYmplY3QnO1xuaW1wb3J0IHdhcm5pbmcgZnJvbSAnLi93YXJuaW5nJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdmVyaWZ5UGxhaW5PYmplY3QodmFsdWUsIGRpc3BsYXlOYW1lLCBtZXRob2ROYW1lKSB7XG4gIGlmICghaXNQbGFpbk9iamVjdCh2YWx1ZSkpIHtcbiAgICB3YXJuaW5nKG1ldGhvZE5hbWUgKyAnKCkgaW4gJyArIGRpc3BsYXlOYW1lICsgJyBtdXN0IHJldHVybiBhIHBsYWluIG9iamVjdC4gSW5zdGVhZCByZWNlaXZlZCAnICsgdmFsdWUgKyAnLicpO1xuICB9XG59XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1yZWR1eC9lcy91dGlscy92ZXJpZnlQbGFpbk9iamVjdC5qcyIsInZhciBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhvYmosIGtleXMpIHsgdmFyIHRhcmdldCA9IHt9OyBmb3IgKHZhciBpIGluIG9iaikgeyBpZiAoa2V5cy5pbmRleE9mKGkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGkpKSBjb250aW51ZTsgdGFyZ2V0W2ldID0gb2JqW2ldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoIXNlbGYpIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBjYWxsICYmICh0eXBlb2YgY2FsbCA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSA/IGNhbGwgOiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFwiICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfVxuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcblxudmFyIGlzTW9kaWZpZWRFdmVudCA9IGZ1bmN0aW9uIGlzTW9kaWZpZWRFdmVudChldmVudCkge1xuICByZXR1cm4gISEoZXZlbnQubWV0YUtleSB8fCBldmVudC5hbHRLZXkgfHwgZXZlbnQuY3RybEtleSB8fCBldmVudC5zaGlmdEtleSk7XG59O1xuXG4vKipcbiAqIFRoZSBwdWJsaWMgQVBJIGZvciByZW5kZXJpbmcgYSBoaXN0b3J5LWF3YXJlIDxhPi5cbiAqL1xuXG52YXIgTGluayA9IGZ1bmN0aW9uIChfUmVhY3QkQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhMaW5rLCBfUmVhY3QkQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBMaW5rKCkge1xuICAgIHZhciBfdGVtcCwgX3RoaXMsIF9yZXQ7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgTGluayk7XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICByZXR1cm4gX3JldCA9IChfdGVtcCA9IChfdGhpcyA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIF9SZWFjdCRDb21wb25lbnQuY2FsbC5hcHBseShfUmVhY3QkQ29tcG9uZW50LCBbdGhpc10uY29uY2F0KGFyZ3MpKSksIF90aGlzKSwgX3RoaXMuaGFuZGxlQ2xpY2sgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIGlmIChfdGhpcy5wcm9wcy5vbkNsaWNrKSBfdGhpcy5wcm9wcy5vbkNsaWNrKGV2ZW50KTtcblxuICAgICAgaWYgKCFldmVudC5kZWZhdWx0UHJldmVudGVkICYmIC8vIG9uQ2xpY2sgcHJldmVudGVkIGRlZmF1bHRcbiAgICAgIGV2ZW50LmJ1dHRvbiA9PT0gMCAmJiAvLyBpZ25vcmUgcmlnaHQgY2xpY2tzXG4gICAgICAhX3RoaXMucHJvcHMudGFyZ2V0ICYmIC8vIGxldCBicm93c2VyIGhhbmRsZSBcInRhcmdldD1fYmxhbmtcIiBldGMuXG4gICAgICAhaXNNb2RpZmllZEV2ZW50KGV2ZW50KSAvLyBpZ25vcmUgY2xpY2tzIHdpdGggbW9kaWZpZXIga2V5c1xuICAgICAgKSB7XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAgIHZhciBoaXN0b3J5ID0gX3RoaXMuY29udGV4dC5yb3V0ZXIuaGlzdG9yeTtcbiAgICAgICAgICB2YXIgX3RoaXMkcHJvcHMgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgICAgICAgcmVwbGFjZSA9IF90aGlzJHByb3BzLnJlcGxhY2UsXG4gICAgICAgICAgICAgIHRvID0gX3RoaXMkcHJvcHMudG87XG5cblxuICAgICAgICAgIGlmIChyZXBsYWNlKSB7XG4gICAgICAgICAgICBoaXN0b3J5LnJlcGxhY2UodG8pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBoaXN0b3J5LnB1c2godG8pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sIF90ZW1wKSwgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oX3RoaXMsIF9yZXQpO1xuICB9XG5cbiAgTGluay5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgIHZhciBfcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICByZXBsYWNlID0gX3Byb3BzLnJlcGxhY2UsXG4gICAgICAgIHRvID0gX3Byb3BzLnRvLFxuICAgICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcHJvcHMsIFsncmVwbGFjZScsICd0byddKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuXG4gICAgdmFyIGhyZWYgPSB0aGlzLmNvbnRleHQucm91dGVyLmhpc3RvcnkuY3JlYXRlSHJlZih0eXBlb2YgdG8gPT09ICdzdHJpbmcnID8geyBwYXRobmFtZTogdG8gfSA6IHRvKTtcblxuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KCdhJywgX2V4dGVuZHMoe30sIHByb3BzLCB7IG9uQ2xpY2s6IHRoaXMuaGFuZGxlQ2xpY2ssIGhyZWY6IGhyZWYgfSkpO1xuICB9O1xuXG4gIHJldHVybiBMaW5rO1xufShSZWFjdC5Db21wb25lbnQpO1xuXG5MaW5rLnByb3BUeXBlcyA9IHtcbiAgb25DbGljazogUHJvcFR5cGVzLmZ1bmMsXG4gIHRhcmdldDogUHJvcFR5cGVzLnN0cmluZyxcbiAgcmVwbGFjZTogUHJvcFR5cGVzLmJvb2wsXG4gIHRvOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMub2JqZWN0XSkuaXNSZXF1aXJlZFxufTtcbkxpbmsuZGVmYXVsdFByb3BzID0ge1xuICByZXBsYWNlOiBmYWxzZVxufTtcbkxpbmsuY29udGV4dFR5cGVzID0ge1xuICByb3V0ZXI6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgaGlzdG9yeTogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgIHB1c2g6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgICByZXBsYWNlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgICAgY3JlYXRlSHJlZjogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZFxuICAgIH0pLmlzUmVxdWlyZWRcbiAgfSkuaXNSZXF1aXJlZFxufTtcblxuXG5leHBvcnQgZGVmYXVsdCBMaW5rO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3Qtcm91dGVyLWRvbS9lcy9MaW5rLmpzIiwidmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoIXNlbGYpIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBjYWxsICYmICh0eXBlb2YgY2FsbCA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSA/IGNhbGwgOiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFwiICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfVxuXG5pbXBvcnQgd2FybmluZyBmcm9tICd3YXJuaW5nJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IG1hdGNoUGF0aCBmcm9tICcuL21hdGNoUGF0aCc7XG5cbi8qKlxuICogVGhlIHB1YmxpYyBBUEkgZm9yIG1hdGNoaW5nIGEgc2luZ2xlIHBhdGggYW5kIHJlbmRlcmluZy5cbiAqL1xuXG52YXIgUm91dGUgPSBmdW5jdGlvbiAoX1JlYWN0JENvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoUm91dGUsIF9SZWFjdCRDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIFJvdXRlKCkge1xuICAgIHZhciBfdGVtcCwgX3RoaXMsIF9yZXQ7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgUm91dGUpO1xuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgcmV0dXJuIF9yZXQgPSAoX3RlbXAgPSAoX3RoaXMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCBfUmVhY3QkQ29tcG9uZW50LmNhbGwuYXBwbHkoX1JlYWN0JENvbXBvbmVudCwgW3RoaXNdLmNvbmNhdChhcmdzKSkpLCBfdGhpcyksIF90aGlzLnN0YXRlID0ge1xuICAgICAgbWF0Y2g6IF90aGlzLmNvbXB1dGVNYXRjaChfdGhpcy5wcm9wcywgX3RoaXMuY29udGV4dC5yb3V0ZXIpXG4gICAgfSwgX3RlbXApLCBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihfdGhpcywgX3JldCk7XG4gIH1cblxuICBSb3V0ZS5wcm90b3R5cGUuZ2V0Q2hpbGRDb250ZXh0ID0gZnVuY3Rpb24gZ2V0Q2hpbGRDb250ZXh0KCkge1xuICAgIHJldHVybiB7XG4gICAgICByb3V0ZXI6IF9leHRlbmRzKHt9LCB0aGlzLmNvbnRleHQucm91dGVyLCB7XG4gICAgICAgIHJvdXRlOiB7XG4gICAgICAgICAgbG9jYXRpb246IHRoaXMucHJvcHMubG9jYXRpb24gfHwgdGhpcy5jb250ZXh0LnJvdXRlci5yb3V0ZS5sb2NhdGlvbixcbiAgICAgICAgICBtYXRjaDogdGhpcy5zdGF0ZS5tYXRjaFxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH07XG4gIH07XG5cbiAgUm91dGUucHJvdG90eXBlLmNvbXB1dGVNYXRjaCA9IGZ1bmN0aW9uIGNvbXB1dGVNYXRjaChfcmVmLCBfcmVmMikge1xuICAgIHZhciBjb21wdXRlZE1hdGNoID0gX3JlZi5jb21wdXRlZE1hdGNoLFxuICAgICAgICBsb2NhdGlvbiA9IF9yZWYubG9jYXRpb24sXG4gICAgICAgIHBhdGggPSBfcmVmLnBhdGgsXG4gICAgICAgIHN0cmljdCA9IF9yZWYuc3RyaWN0LFxuICAgICAgICBleGFjdCA9IF9yZWYuZXhhY3Q7XG4gICAgdmFyIHJvdXRlID0gX3JlZjIucm91dGU7XG5cbiAgICBpZiAoY29tcHV0ZWRNYXRjaCkgcmV0dXJuIGNvbXB1dGVkTWF0Y2g7IC8vIDxTd2l0Y2g+IGFscmVhZHkgY29tcHV0ZWQgdGhlIG1hdGNoIGZvciB1c1xuXG4gICAgdmFyIHBhdGhuYW1lID0gKGxvY2F0aW9uIHx8IHJvdXRlLmxvY2F0aW9uKS5wYXRobmFtZTtcblxuICAgIHJldHVybiBwYXRoID8gbWF0Y2hQYXRoKHBhdGhuYW1lLCB7IHBhdGg6IHBhdGgsIHN0cmljdDogc3RyaWN0LCBleGFjdDogZXhhY3QgfSkgOiByb3V0ZS5tYXRjaDtcbiAgfTtcblxuICBSb3V0ZS5wcm90b3R5cGUuY29tcG9uZW50V2lsbE1vdW50ID0gZnVuY3Rpb24gY29tcG9uZW50V2lsbE1vdW50KCkge1xuICAgIHZhciBfcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICBjb21wb25lbnQgPSBfcHJvcHMuY29tcG9uZW50LFxuICAgICAgICByZW5kZXIgPSBfcHJvcHMucmVuZGVyLFxuICAgICAgICBjaGlsZHJlbiA9IF9wcm9wcy5jaGlsZHJlbjtcblxuXG4gICAgd2FybmluZyghKGNvbXBvbmVudCAmJiByZW5kZXIpLCAnWW91IHNob3VsZCBub3QgdXNlIDxSb3V0ZSBjb21wb25lbnQ+IGFuZCA8Um91dGUgcmVuZGVyPiBpbiB0aGUgc2FtZSByb3V0ZTsgPFJvdXRlIHJlbmRlcj4gd2lsbCBiZSBpZ25vcmVkJyk7XG5cbiAgICB3YXJuaW5nKCEoY29tcG9uZW50ICYmIGNoaWxkcmVuKSwgJ1lvdSBzaG91bGQgbm90IHVzZSA8Um91dGUgY29tcG9uZW50PiBhbmQgPFJvdXRlIGNoaWxkcmVuPiBpbiB0aGUgc2FtZSByb3V0ZTsgPFJvdXRlIGNoaWxkcmVuPiB3aWxsIGJlIGlnbm9yZWQnKTtcblxuICAgIHdhcm5pbmcoIShyZW5kZXIgJiYgY2hpbGRyZW4pLCAnWW91IHNob3VsZCBub3QgdXNlIDxSb3V0ZSByZW5kZXI+IGFuZCA8Um91dGUgY2hpbGRyZW4+IGluIHRoZSBzYW1lIHJvdXRlOyA8Um91dGUgY2hpbGRyZW4+IHdpbGwgYmUgaWdub3JlZCcpO1xuICB9O1xuXG4gIFJvdXRlLnByb3RvdHlwZS5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzID0gZnVuY3Rpb24gY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXh0UHJvcHMsIG5leHRDb250ZXh0KSB7XG4gICAgd2FybmluZyghKG5leHRQcm9wcy5sb2NhdGlvbiAmJiAhdGhpcy5wcm9wcy5sb2NhdGlvbiksICc8Um91dGU+IGVsZW1lbnRzIHNob3VsZCBub3QgY2hhbmdlIGZyb20gdW5jb250cm9sbGVkIHRvIGNvbnRyb2xsZWQgKG9yIHZpY2UgdmVyc2EpLiBZb3UgaW5pdGlhbGx5IHVzZWQgbm8gXCJsb2NhdGlvblwiIHByb3AgYW5kIHRoZW4gcHJvdmlkZWQgb25lIG9uIGEgc3Vic2VxdWVudCByZW5kZXIuJyk7XG5cbiAgICB3YXJuaW5nKCEoIW5leHRQcm9wcy5sb2NhdGlvbiAmJiB0aGlzLnByb3BzLmxvY2F0aW9uKSwgJzxSb3V0ZT4gZWxlbWVudHMgc2hvdWxkIG5vdCBjaGFuZ2UgZnJvbSBjb250cm9sbGVkIHRvIHVuY29udHJvbGxlZCAob3IgdmljZSB2ZXJzYSkuIFlvdSBwcm92aWRlZCBhIFwibG9jYXRpb25cIiBwcm9wIGluaXRpYWxseSBidXQgb21pdHRlZCBpdCBvbiBhIHN1YnNlcXVlbnQgcmVuZGVyLicpO1xuXG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBtYXRjaDogdGhpcy5jb21wdXRlTWF0Y2gobmV4dFByb3BzLCBuZXh0Q29udGV4dC5yb3V0ZXIpXG4gICAgfSk7XG4gIH07XG5cbiAgUm91dGUucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICB2YXIgbWF0Y2ggPSB0aGlzLnN0YXRlLm1hdGNoO1xuICAgIHZhciBfcHJvcHMyID0gdGhpcy5wcm9wcyxcbiAgICAgICAgY2hpbGRyZW4gPSBfcHJvcHMyLmNoaWxkcmVuLFxuICAgICAgICBjb21wb25lbnQgPSBfcHJvcHMyLmNvbXBvbmVudCxcbiAgICAgICAgcmVuZGVyID0gX3Byb3BzMi5yZW5kZXI7XG4gICAgdmFyIF9jb250ZXh0JHJvdXRlciA9IHRoaXMuY29udGV4dC5yb3V0ZXIsXG4gICAgICAgIGhpc3RvcnkgPSBfY29udGV4dCRyb3V0ZXIuaGlzdG9yeSxcbiAgICAgICAgcm91dGUgPSBfY29udGV4dCRyb3V0ZXIucm91dGUsXG4gICAgICAgIHN0YXRpY0NvbnRleHQgPSBfY29udGV4dCRyb3V0ZXIuc3RhdGljQ29udGV4dDtcblxuICAgIHZhciBsb2NhdGlvbiA9IHRoaXMucHJvcHMubG9jYXRpb24gfHwgcm91dGUubG9jYXRpb247XG4gICAgdmFyIHByb3BzID0geyBtYXRjaDogbWF0Y2gsIGxvY2F0aW9uOiBsb2NhdGlvbiwgaGlzdG9yeTogaGlzdG9yeSwgc3RhdGljQ29udGV4dDogc3RhdGljQ29udGV4dCB9O1xuXG4gICAgcmV0dXJuIGNvbXBvbmVudCA/IC8vIGNvbXBvbmVudCBwcm9wIGdldHMgZmlyc3QgcHJpb3JpdHksIG9ubHkgY2FsbGVkIGlmIHRoZXJlJ3MgYSBtYXRjaFxuICAgIG1hdGNoID8gUmVhY3QuY3JlYXRlRWxlbWVudChjb21wb25lbnQsIHByb3BzKSA6IG51bGwgOiByZW5kZXIgPyAvLyByZW5kZXIgcHJvcCBpcyBuZXh0LCBvbmx5IGNhbGxlZCBpZiB0aGVyZSdzIGEgbWF0Y2hcbiAgICBtYXRjaCA/IHJlbmRlcihwcm9wcykgOiBudWxsIDogY2hpbGRyZW4gPyAvLyBjaGlsZHJlbiBjb21lIGxhc3QsIGFsd2F5cyBjYWxsZWRcbiAgICB0eXBlb2YgY2hpbGRyZW4gPT09ICdmdW5jdGlvbicgPyBjaGlsZHJlbihwcm9wcykgOiAhQXJyYXkuaXNBcnJheShjaGlsZHJlbikgfHwgY2hpbGRyZW4ubGVuZ3RoID8gLy8gUHJlYWN0IGRlZmF1bHRzIHRvIGVtcHR5IGNoaWxkcmVuIGFycmF5XG4gICAgUmVhY3QuQ2hpbGRyZW4ub25seShjaGlsZHJlbikgOiBudWxsIDogbnVsbDtcbiAgfTtcblxuICByZXR1cm4gUm91dGU7XG59KFJlYWN0LkNvbXBvbmVudCk7XG5cblJvdXRlLnByb3BUeXBlcyA9IHtcbiAgY29tcHV0ZWRNYXRjaDogUHJvcFR5cGVzLm9iamVjdCwgLy8gcHJpdmF0ZSwgZnJvbSA8U3dpdGNoPlxuICBwYXRoOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBleGFjdDogUHJvcFR5cGVzLmJvb2wsXG4gIHN0cmljdDogUHJvcFR5cGVzLmJvb2wsXG4gIGNvbXBvbmVudDogUHJvcFR5cGVzLmZ1bmMsXG4gIHJlbmRlcjogUHJvcFR5cGVzLmZ1bmMsXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm5vZGVdKSxcbiAgbG9jYXRpb246IFByb3BUeXBlcy5vYmplY3Rcbn07XG5Sb3V0ZS5jb250ZXh0VHlwZXMgPSB7XG4gIHJvdXRlcjogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBoaXN0b3J5OiBQcm9wVHlwZXMub2JqZWN0LmlzUmVxdWlyZWQsXG4gICAgcm91dGU6IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZCxcbiAgICBzdGF0aWNDb250ZXh0OiBQcm9wVHlwZXMub2JqZWN0XG4gIH0pXG59O1xuUm91dGUuY2hpbGRDb250ZXh0VHlwZXMgPSB7XG4gIHJvdXRlcjogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkXG59O1xuXG5cbmV4cG9ydCBkZWZhdWx0IFJvdXRlO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3Qtcm91dGVyL2VzL1JvdXRlLmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIF9wcm9kSW52YXJpYW50ID0gcmVxdWlyZSgnLi9yZWFjdFByb2RJbnZhcmlhbnQnKSxcbiAgICBfYXNzaWduID0gcmVxdWlyZSgnb2JqZWN0LWFzc2lnbicpO1xuXG52YXIgUmVhY3ROb29wVXBkYXRlUXVldWUgPSByZXF1aXJlKCcuL1JlYWN0Tm9vcFVwZGF0ZVF1ZXVlJyk7XG5cbnZhciBjYW5EZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vY2FuRGVmaW5lUHJvcGVydHknKTtcbnZhciBlbXB0eU9iamVjdCA9IHJlcXVpcmUoJ2ZianMvbGliL2VtcHR5T2JqZWN0Jyk7XG52YXIgaW52YXJpYW50ID0gcmVxdWlyZSgnZmJqcy9saWIvaW52YXJpYW50Jyk7XG52YXIgbG93UHJpb3JpdHlXYXJuaW5nID0gcmVxdWlyZSgnLi9sb3dQcmlvcml0eVdhcm5pbmcnKTtcblxuLyoqXG4gKiBCYXNlIGNsYXNzIGhlbHBlcnMgZm9yIHRoZSB1cGRhdGluZyBzdGF0ZSBvZiBhIGNvbXBvbmVudC5cbiAqL1xuZnVuY3Rpb24gUmVhY3RDb21wb25lbnQocHJvcHMsIGNvbnRleHQsIHVwZGF0ZXIpIHtcbiAgdGhpcy5wcm9wcyA9IHByb3BzO1xuICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuICB0aGlzLnJlZnMgPSBlbXB0eU9iamVjdDtcbiAgLy8gV2UgaW5pdGlhbGl6ZSB0aGUgZGVmYXVsdCB1cGRhdGVyIGJ1dCB0aGUgcmVhbCBvbmUgZ2V0cyBpbmplY3RlZCBieSB0aGVcbiAgLy8gcmVuZGVyZXIuXG4gIHRoaXMudXBkYXRlciA9IHVwZGF0ZXIgfHwgUmVhY3ROb29wVXBkYXRlUXVldWU7XG59XG5cblJlYWN0Q29tcG9uZW50LnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50ID0ge307XG5cbi8qKlxuICogU2V0cyBhIHN1YnNldCBvZiB0aGUgc3RhdGUuIEFsd2F5cyB1c2UgdGhpcyB0byBtdXRhdGVcbiAqIHN0YXRlLiBZb3Ugc2hvdWxkIHRyZWF0IGB0aGlzLnN0YXRlYCBhcyBpbW11dGFibGUuXG4gKlxuICogVGhlcmUgaXMgbm8gZ3VhcmFudGVlIHRoYXQgYHRoaXMuc3RhdGVgIHdpbGwgYmUgaW1tZWRpYXRlbHkgdXBkYXRlZCwgc29cbiAqIGFjY2Vzc2luZyBgdGhpcy5zdGF0ZWAgYWZ0ZXIgY2FsbGluZyB0aGlzIG1ldGhvZCBtYXkgcmV0dXJuIHRoZSBvbGQgdmFsdWUuXG4gKlxuICogVGhlcmUgaXMgbm8gZ3VhcmFudGVlIHRoYXQgY2FsbHMgdG8gYHNldFN0YXRlYCB3aWxsIHJ1biBzeW5jaHJvbm91c2x5LFxuICogYXMgdGhleSBtYXkgZXZlbnR1YWxseSBiZSBiYXRjaGVkIHRvZ2V0aGVyLiAgWW91IGNhbiBwcm92aWRlIGFuIG9wdGlvbmFsXG4gKiBjYWxsYmFjayB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQgd2hlbiB0aGUgY2FsbCB0byBzZXRTdGF0ZSBpcyBhY3R1YWxseVxuICogY29tcGxldGVkLlxuICpcbiAqIFdoZW4gYSBmdW5jdGlvbiBpcyBwcm92aWRlZCB0byBzZXRTdGF0ZSwgaXQgd2lsbCBiZSBjYWxsZWQgYXQgc29tZSBwb2ludCBpblxuICogdGhlIGZ1dHVyZSAobm90IHN5bmNocm9ub3VzbHkpLiBJdCB3aWxsIGJlIGNhbGxlZCB3aXRoIHRoZSB1cCB0byBkYXRlXG4gKiBjb21wb25lbnQgYXJndW1lbnRzIChzdGF0ZSwgcHJvcHMsIGNvbnRleHQpLiBUaGVzZSB2YWx1ZXMgY2FuIGJlIGRpZmZlcmVudFxuICogZnJvbSB0aGlzLiogYmVjYXVzZSB5b3VyIGZ1bmN0aW9uIG1heSBiZSBjYWxsZWQgYWZ0ZXIgcmVjZWl2ZVByb3BzIGJ1dCBiZWZvcmVcbiAqIHNob3VsZENvbXBvbmVudFVwZGF0ZSwgYW5kIHRoaXMgbmV3IHN0YXRlLCBwcm9wcywgYW5kIGNvbnRleHQgd2lsbCBub3QgeWV0IGJlXG4gKiBhc3NpZ25lZCB0byB0aGlzLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fGZ1bmN0aW9ufSBwYXJ0aWFsU3RhdGUgTmV4dCBwYXJ0aWFsIHN0YXRlIG9yIGZ1bmN0aW9uIHRvXG4gKiAgICAgICAgcHJvZHVjZSBuZXh0IHBhcnRpYWwgc3RhdGUgdG8gYmUgbWVyZ2VkIHdpdGggY3VycmVudCBzdGF0ZS5cbiAqIEBwYXJhbSB7P2Z1bmN0aW9ufSBjYWxsYmFjayBDYWxsZWQgYWZ0ZXIgc3RhdGUgaXMgdXBkYXRlZC5cbiAqIEBmaW5hbFxuICogQHByb3RlY3RlZFxuICovXG5SZWFjdENvbXBvbmVudC5wcm90b3R5cGUuc2V0U3RhdGUgPSBmdW5jdGlvbiAocGFydGlhbFN0YXRlLCBjYWxsYmFjaykge1xuICAhKHR5cGVvZiBwYXJ0aWFsU3RhdGUgPT09ICdvYmplY3QnIHx8IHR5cGVvZiBwYXJ0aWFsU3RhdGUgPT09ICdmdW5jdGlvbicgfHwgcGFydGlhbFN0YXRlID09IG51bGwpID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IGludmFyaWFudChmYWxzZSwgJ3NldFN0YXRlKC4uLik6IHRha2VzIGFuIG9iamVjdCBvZiBzdGF0ZSB2YXJpYWJsZXMgdG8gdXBkYXRlIG9yIGEgZnVuY3Rpb24gd2hpY2ggcmV0dXJucyBhbiBvYmplY3Qgb2Ygc3RhdGUgdmFyaWFibGVzLicpIDogX3Byb2RJbnZhcmlhbnQoJzg1JykgOiB2b2lkIDA7XG4gIHRoaXMudXBkYXRlci5lbnF1ZXVlU2V0U3RhdGUodGhpcywgcGFydGlhbFN0YXRlKTtcbiAgaWYgKGNhbGxiYWNrKSB7XG4gICAgdGhpcy51cGRhdGVyLmVucXVldWVDYWxsYmFjayh0aGlzLCBjYWxsYmFjaywgJ3NldFN0YXRlJyk7XG4gIH1cbn07XG5cbi8qKlxuICogRm9yY2VzIGFuIHVwZGF0ZS4gVGhpcyBzaG91bGQgb25seSBiZSBpbnZva2VkIHdoZW4gaXQgaXMga25vd24gd2l0aFxuICogY2VydGFpbnR5IHRoYXQgd2UgYXJlICoqbm90KiogaW4gYSBET00gdHJhbnNhY3Rpb24uXG4gKlxuICogWW91IG1heSB3YW50IHRvIGNhbGwgdGhpcyB3aGVuIHlvdSBrbm93IHRoYXQgc29tZSBkZWVwZXIgYXNwZWN0IG9mIHRoZVxuICogY29tcG9uZW50J3Mgc3RhdGUgaGFzIGNoYW5nZWQgYnV0IGBzZXRTdGF0ZWAgd2FzIG5vdCBjYWxsZWQuXG4gKlxuICogVGhpcyB3aWxsIG5vdCBpbnZva2UgYHNob3VsZENvbXBvbmVudFVwZGF0ZWAsIGJ1dCBpdCB3aWxsIGludm9rZVxuICogYGNvbXBvbmVudFdpbGxVcGRhdGVgIGFuZCBgY29tcG9uZW50RGlkVXBkYXRlYC5cbiAqXG4gKiBAcGFyYW0gez9mdW5jdGlvbn0gY2FsbGJhY2sgQ2FsbGVkIGFmdGVyIHVwZGF0ZSBpcyBjb21wbGV0ZS5cbiAqIEBmaW5hbFxuICogQHByb3RlY3RlZFxuICovXG5SZWFjdENvbXBvbmVudC5wcm90b3R5cGUuZm9yY2VVcGRhdGUgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgdGhpcy51cGRhdGVyLmVucXVldWVGb3JjZVVwZGF0ZSh0aGlzKTtcbiAgaWYgKGNhbGxiYWNrKSB7XG4gICAgdGhpcy51cGRhdGVyLmVucXVldWVDYWxsYmFjayh0aGlzLCBjYWxsYmFjaywgJ2ZvcmNlVXBkYXRlJyk7XG4gIH1cbn07XG5cbi8qKlxuICogRGVwcmVjYXRlZCBBUElzLiBUaGVzZSBBUElzIHVzZWQgdG8gZXhpc3Qgb24gY2xhc3NpYyBSZWFjdCBjbGFzc2VzIGJ1dCBzaW5jZVxuICogd2Ugd291bGQgbGlrZSB0byBkZXByZWNhdGUgdGhlbSwgd2UncmUgbm90IGdvaW5nIHRvIG1vdmUgdGhlbSBvdmVyIHRvIHRoaXNcbiAqIG1vZGVybiBiYXNlIGNsYXNzLiBJbnN0ZWFkLCB3ZSBkZWZpbmUgYSBnZXR0ZXIgdGhhdCB3YXJucyBpZiBpdCdzIGFjY2Vzc2VkLlxuICovXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICB2YXIgZGVwcmVjYXRlZEFQSXMgPSB7XG4gICAgaXNNb3VudGVkOiBbJ2lzTW91bnRlZCcsICdJbnN0ZWFkLCBtYWtlIHN1cmUgdG8gY2xlYW4gdXAgc3Vic2NyaXB0aW9ucyBhbmQgcGVuZGluZyByZXF1ZXN0cyBpbiAnICsgJ2NvbXBvbmVudFdpbGxVbm1vdW50IHRvIHByZXZlbnQgbWVtb3J5IGxlYWtzLiddLFxuICAgIHJlcGxhY2VTdGF0ZTogWydyZXBsYWNlU3RhdGUnLCAnUmVmYWN0b3IgeW91ciBjb2RlIHRvIHVzZSBzZXRTdGF0ZSBpbnN0ZWFkIChzZWUgJyArICdodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzMyMzYpLiddXG4gIH07XG4gIHZhciBkZWZpbmVEZXByZWNhdGlvbldhcm5pbmcgPSBmdW5jdGlvbiAobWV0aG9kTmFtZSwgaW5mbykge1xuICAgIGlmIChjYW5EZWZpbmVQcm9wZXJ0eSkge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFJlYWN0Q29tcG9uZW50LnByb3RvdHlwZSwgbWV0aG9kTmFtZSwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBsb3dQcmlvcml0eVdhcm5pbmcoZmFsc2UsICclcyguLi4pIGlzIGRlcHJlY2F0ZWQgaW4gcGxhaW4gSmF2YVNjcmlwdCBSZWFjdCBjbGFzc2VzLiAlcycsIGluZm9bMF0sIGluZm9bMV0pO1xuICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcbiAgZm9yICh2YXIgZm5OYW1lIGluIGRlcHJlY2F0ZWRBUElzKSB7XG4gICAgaWYgKGRlcHJlY2F0ZWRBUElzLmhhc093blByb3BlcnR5KGZuTmFtZSkpIHtcbiAgICAgIGRlZmluZURlcHJlY2F0aW9uV2FybmluZyhmbk5hbWUsIGRlcHJlY2F0ZWRBUElzW2ZuTmFtZV0pO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEJhc2UgY2xhc3MgaGVscGVycyBmb3IgdGhlIHVwZGF0aW5nIHN0YXRlIG9mIGEgY29tcG9uZW50LlxuICovXG5mdW5jdGlvbiBSZWFjdFB1cmVDb21wb25lbnQocHJvcHMsIGNvbnRleHQsIHVwZGF0ZXIpIHtcbiAgLy8gRHVwbGljYXRlZCBmcm9tIFJlYWN0Q29tcG9uZW50LlxuICB0aGlzLnByb3BzID0gcHJvcHM7XG4gIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gIHRoaXMucmVmcyA9IGVtcHR5T2JqZWN0O1xuICAvLyBXZSBpbml0aWFsaXplIHRoZSBkZWZhdWx0IHVwZGF0ZXIgYnV0IHRoZSByZWFsIG9uZSBnZXRzIGluamVjdGVkIGJ5IHRoZVxuICAvLyByZW5kZXJlci5cbiAgdGhpcy51cGRhdGVyID0gdXBkYXRlciB8fCBSZWFjdE5vb3BVcGRhdGVRdWV1ZTtcbn1cblxuZnVuY3Rpb24gQ29tcG9uZW50RHVtbXkoKSB7fVxuQ29tcG9uZW50RHVtbXkucHJvdG90eXBlID0gUmVhY3RDb21wb25lbnQucHJvdG90eXBlO1xuUmVhY3RQdXJlQ29tcG9uZW50LnByb3RvdHlwZSA9IG5ldyBDb21wb25lbnREdW1teSgpO1xuUmVhY3RQdXJlQ29tcG9uZW50LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJlYWN0UHVyZUNvbXBvbmVudDtcbi8vIEF2b2lkIGFuIGV4dHJhIHByb3RvdHlwZSBqdW1wIGZvciB0aGVzZSBtZXRob2RzLlxuX2Fzc2lnbihSZWFjdFB1cmVDb21wb25lbnQucHJvdG90eXBlLCBSZWFjdENvbXBvbmVudC5wcm90b3R5cGUpO1xuUmVhY3RQdXJlQ29tcG9uZW50LnByb3RvdHlwZS5pc1B1cmVSZWFjdENvbXBvbmVudCA9IHRydWU7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBDb21wb25lbnQ6IFJlYWN0Q29tcG9uZW50LFxuICBQdXJlQ29tcG9uZW50OiBSZWFjdFB1cmVDb21wb25lbnRcbn07XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC9saWIvUmVhY3RCYXNlQ2xhc3Nlcy5qcyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIFxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuLy8gVGhlIFN5bWJvbCB1c2VkIHRvIHRhZyB0aGUgUmVhY3RFbGVtZW50IHR5cGUuIElmIHRoZXJlIGlzIG5vIG5hdGl2ZSBTeW1ib2xcbi8vIG5vciBwb2x5ZmlsbCwgdGhlbiBhIHBsYWluIG51bWJlciBpcyB1c2VkIGZvciBwZXJmb3JtYW5jZS5cblxudmFyIFJFQUNUX0VMRU1FTlRfVFlQRSA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sWydmb3InXSAmJiBTeW1ib2xbJ2ZvciddKCdyZWFjdC5lbGVtZW50JykgfHwgMHhlYWM3O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJFQUNUX0VMRU1FTlRfVFlQRTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3JlYWN0L2xpYi9SZWFjdEVsZW1lbnRTeW1ib2wuanMiLCIvKipcbiAqIENvcHlyaWdodCAyMDE0LXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuLyoqXG4gKiBSZWFjdEVsZW1lbnRWYWxpZGF0b3IgcHJvdmlkZXMgYSB3cmFwcGVyIGFyb3VuZCBhIGVsZW1lbnQgZmFjdG9yeVxuICogd2hpY2ggdmFsaWRhdGVzIHRoZSBwcm9wcyBwYXNzZWQgdG8gdGhlIGVsZW1lbnQuIFRoaXMgaXMgaW50ZW5kZWQgdG8gYmVcbiAqIHVzZWQgb25seSBpbiBERVYgYW5kIGNvdWxkIGJlIHJlcGxhY2VkIGJ5IGEgc3RhdGljIHR5cGUgY2hlY2tlciBmb3IgbGFuZ3VhZ2VzXG4gKiB0aGF0IHN1cHBvcnQgaXQuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUmVhY3RDdXJyZW50T3duZXIgPSByZXF1aXJlKCcuL1JlYWN0Q3VycmVudE93bmVyJyk7XG52YXIgUmVhY3RDb21wb25lbnRUcmVlSG9vayA9IHJlcXVpcmUoJy4vUmVhY3RDb21wb25lbnRUcmVlSG9vaycpO1xudmFyIFJlYWN0RWxlbWVudCA9IHJlcXVpcmUoJy4vUmVhY3RFbGVtZW50Jyk7XG5cbnZhciBjaGVja1JlYWN0VHlwZVNwZWMgPSByZXF1aXJlKCcuL2NoZWNrUmVhY3RUeXBlU3BlYycpO1xuXG52YXIgY2FuRGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL2NhbkRlZmluZVByb3BlcnR5Jyk7XG52YXIgZ2V0SXRlcmF0b3JGbiA9IHJlcXVpcmUoJy4vZ2V0SXRlcmF0b3JGbicpO1xudmFyIHdhcm5pbmcgPSByZXF1aXJlKCdmYmpzL2xpYi93YXJuaW5nJyk7XG52YXIgbG93UHJpb3JpdHlXYXJuaW5nID0gcmVxdWlyZSgnLi9sb3dQcmlvcml0eVdhcm5pbmcnKTtcblxuZnVuY3Rpb24gZ2V0RGVjbGFyYXRpb25FcnJvckFkZGVuZHVtKCkge1xuICBpZiAoUmVhY3RDdXJyZW50T3duZXIuY3VycmVudCkge1xuICAgIHZhciBuYW1lID0gUmVhY3RDdXJyZW50T3duZXIuY3VycmVudC5nZXROYW1lKCk7XG4gICAgaWYgKG5hbWUpIHtcbiAgICAgIHJldHVybiAnIENoZWNrIHRoZSByZW5kZXIgbWV0aG9kIG9mIGAnICsgbmFtZSArICdgLic7XG4gICAgfVxuICB9XG4gIHJldHVybiAnJztcbn1cblxuZnVuY3Rpb24gZ2V0U291cmNlSW5mb0Vycm9yQWRkZW5kdW0oZWxlbWVudFByb3BzKSB7XG4gIGlmIChlbGVtZW50UHJvcHMgIT09IG51bGwgJiYgZWxlbWVudFByb3BzICE9PSB1bmRlZmluZWQgJiYgZWxlbWVudFByb3BzLl9fc291cmNlICE9PSB1bmRlZmluZWQpIHtcbiAgICB2YXIgc291cmNlID0gZWxlbWVudFByb3BzLl9fc291cmNlO1xuICAgIHZhciBmaWxlTmFtZSA9IHNvdXJjZS5maWxlTmFtZS5yZXBsYWNlKC9eLipbXFxcXFxcL10vLCAnJyk7XG4gICAgdmFyIGxpbmVOdW1iZXIgPSBzb3VyY2UubGluZU51bWJlcjtcbiAgICByZXR1cm4gJyBDaGVjayB5b3VyIGNvZGUgYXQgJyArIGZpbGVOYW1lICsgJzonICsgbGluZU51bWJlciArICcuJztcbiAgfVxuICByZXR1cm4gJyc7XG59XG5cbi8qKlxuICogV2FybiBpZiB0aGVyZSdzIG5vIGtleSBleHBsaWNpdGx5IHNldCBvbiBkeW5hbWljIGFycmF5cyBvZiBjaGlsZHJlbiBvclxuICogb2JqZWN0IGtleXMgYXJlIG5vdCB2YWxpZC4gVGhpcyBhbGxvd3MgdXMgdG8ga2VlcCB0cmFjayBvZiBjaGlsZHJlbiBiZXR3ZWVuXG4gKiB1cGRhdGVzLlxuICovXG52YXIgb3duZXJIYXNLZXlVc2VXYXJuaW5nID0ge307XG5cbmZ1bmN0aW9uIGdldEN1cnJlbnRDb21wb25lbnRFcnJvckluZm8ocGFyZW50VHlwZSkge1xuICB2YXIgaW5mbyA9IGdldERlY2xhcmF0aW9uRXJyb3JBZGRlbmR1bSgpO1xuXG4gIGlmICghaW5mbykge1xuICAgIHZhciBwYXJlbnROYW1lID0gdHlwZW9mIHBhcmVudFR5cGUgPT09ICdzdHJpbmcnID8gcGFyZW50VHlwZSA6IHBhcmVudFR5cGUuZGlzcGxheU5hbWUgfHwgcGFyZW50VHlwZS5uYW1lO1xuICAgIGlmIChwYXJlbnROYW1lKSB7XG4gICAgICBpbmZvID0gJyBDaGVjayB0aGUgdG9wLWxldmVsIHJlbmRlciBjYWxsIHVzaW5nIDwnICsgcGFyZW50TmFtZSArICc+Lic7XG4gICAgfVxuICB9XG4gIHJldHVybiBpbmZvO1xufVxuXG4vKipcbiAqIFdhcm4gaWYgdGhlIGVsZW1lbnQgZG9lc24ndCBoYXZlIGFuIGV4cGxpY2l0IGtleSBhc3NpZ25lZCB0byBpdC5cbiAqIFRoaXMgZWxlbWVudCBpcyBpbiBhbiBhcnJheS4gVGhlIGFycmF5IGNvdWxkIGdyb3cgYW5kIHNocmluayBvciBiZVxuICogcmVvcmRlcmVkLiBBbGwgY2hpbGRyZW4gdGhhdCBoYXZlbid0IGFscmVhZHkgYmVlbiB2YWxpZGF0ZWQgYXJlIHJlcXVpcmVkIHRvXG4gKiBoYXZlIGEgXCJrZXlcIiBwcm9wZXJ0eSBhc3NpZ25lZCB0byBpdC4gRXJyb3Igc3RhdHVzZXMgYXJlIGNhY2hlZCBzbyBhIHdhcm5pbmdcbiAqIHdpbGwgb25seSBiZSBzaG93biBvbmNlLlxuICpcbiAqIEBpbnRlcm5hbFxuICogQHBhcmFtIHtSZWFjdEVsZW1lbnR9IGVsZW1lbnQgRWxlbWVudCB0aGF0IHJlcXVpcmVzIGEga2V5LlxuICogQHBhcmFtIHsqfSBwYXJlbnRUeXBlIGVsZW1lbnQncyBwYXJlbnQncyB0eXBlLlxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUV4cGxpY2l0S2V5KGVsZW1lbnQsIHBhcmVudFR5cGUpIHtcbiAgaWYgKCFlbGVtZW50Ll9zdG9yZSB8fCBlbGVtZW50Ll9zdG9yZS52YWxpZGF0ZWQgfHwgZWxlbWVudC5rZXkgIT0gbnVsbCkge1xuICAgIHJldHVybjtcbiAgfVxuICBlbGVtZW50Ll9zdG9yZS52YWxpZGF0ZWQgPSB0cnVlO1xuXG4gIHZhciBtZW1vaXplciA9IG93bmVySGFzS2V5VXNlV2FybmluZy51bmlxdWVLZXkgfHwgKG93bmVySGFzS2V5VXNlV2FybmluZy51bmlxdWVLZXkgPSB7fSk7XG5cbiAgdmFyIGN1cnJlbnRDb21wb25lbnRFcnJvckluZm8gPSBnZXRDdXJyZW50Q29tcG9uZW50RXJyb3JJbmZvKHBhcmVudFR5cGUpO1xuICBpZiAobWVtb2l6ZXJbY3VycmVudENvbXBvbmVudEVycm9ySW5mb10pIHtcbiAgICByZXR1cm47XG4gIH1cbiAgbWVtb2l6ZXJbY3VycmVudENvbXBvbmVudEVycm9ySW5mb10gPSB0cnVlO1xuXG4gIC8vIFVzdWFsbHkgdGhlIGN1cnJlbnQgb3duZXIgaXMgdGhlIG9mZmVuZGVyLCBidXQgaWYgaXQgYWNjZXB0cyBjaGlsZHJlbiBhcyBhXG4gIC8vIHByb3BlcnR5LCBpdCBtYXkgYmUgdGhlIGNyZWF0b3Igb2YgdGhlIGNoaWxkIHRoYXQncyByZXNwb25zaWJsZSBmb3JcbiAgLy8gYXNzaWduaW5nIGl0IGEga2V5LlxuICB2YXIgY2hpbGRPd25lciA9ICcnO1xuICBpZiAoZWxlbWVudCAmJiBlbGVtZW50Ll9vd25lciAmJiBlbGVtZW50Ll9vd25lciAhPT0gUmVhY3RDdXJyZW50T3duZXIuY3VycmVudCkge1xuICAgIC8vIEdpdmUgdGhlIGNvbXBvbmVudCB0aGF0IG9yaWdpbmFsbHkgY3JlYXRlZCB0aGlzIGNoaWxkLlxuICAgIGNoaWxkT3duZXIgPSAnIEl0IHdhcyBwYXNzZWQgYSBjaGlsZCBmcm9tICcgKyBlbGVtZW50Ll9vd25lci5nZXROYW1lKCkgKyAnLic7XG4gIH1cblxuICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyhmYWxzZSwgJ0VhY2ggY2hpbGQgaW4gYW4gYXJyYXkgb3IgaXRlcmF0b3Igc2hvdWxkIGhhdmUgYSB1bmlxdWUgXCJrZXlcIiBwcm9wLicgKyAnJXMlcyBTZWUgaHR0cHM6Ly9mYi5tZS9yZWFjdC13YXJuaW5nLWtleXMgZm9yIG1vcmUgaW5mb3JtYXRpb24uJXMnLCBjdXJyZW50Q29tcG9uZW50RXJyb3JJbmZvLCBjaGlsZE93bmVyLCBSZWFjdENvbXBvbmVudFRyZWVIb29rLmdldEN1cnJlbnRTdGFja0FkZGVuZHVtKGVsZW1lbnQpKSA6IHZvaWQgMDtcbn1cblxuLyoqXG4gKiBFbnN1cmUgdGhhdCBldmVyeSBlbGVtZW50IGVpdGhlciBpcyBwYXNzZWQgaW4gYSBzdGF0aWMgbG9jYXRpb24sIGluIGFuXG4gKiBhcnJheSB3aXRoIGFuIGV4cGxpY2l0IGtleXMgcHJvcGVydHkgZGVmaW5lZCwgb3IgaW4gYW4gb2JqZWN0IGxpdGVyYWxcbiAqIHdpdGggdmFsaWQga2V5IHByb3BlcnR5LlxuICpcbiAqIEBpbnRlcm5hbFxuICogQHBhcmFtIHtSZWFjdE5vZGV9IG5vZGUgU3RhdGljYWxseSBwYXNzZWQgY2hpbGQgb2YgYW55IHR5cGUuXG4gKiBAcGFyYW0geyp9IHBhcmVudFR5cGUgbm9kZSdzIHBhcmVudCdzIHR5cGUuXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlQ2hpbGRLZXlzKG5vZGUsIHBhcmVudFR5cGUpIHtcbiAgaWYgKHR5cGVvZiBub2RlICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoQXJyYXkuaXNBcnJheShub2RlKSkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZS5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGNoaWxkID0gbm9kZVtpXTtcbiAgICAgIGlmIChSZWFjdEVsZW1lbnQuaXNWYWxpZEVsZW1lbnQoY2hpbGQpKSB7XG4gICAgICAgIHZhbGlkYXRlRXhwbGljaXRLZXkoY2hpbGQsIHBhcmVudFR5cGUpO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIGlmIChSZWFjdEVsZW1lbnQuaXNWYWxpZEVsZW1lbnQobm9kZSkpIHtcbiAgICAvLyBUaGlzIGVsZW1lbnQgd2FzIHBhc3NlZCBpbiBhIHZhbGlkIGxvY2F0aW9uLlxuICAgIGlmIChub2RlLl9zdG9yZSkge1xuICAgICAgbm9kZS5fc3RvcmUudmFsaWRhdGVkID0gdHJ1ZTtcbiAgICB9XG4gIH0gZWxzZSBpZiAobm9kZSkge1xuICAgIHZhciBpdGVyYXRvckZuID0gZ2V0SXRlcmF0b3JGbihub2RlKTtcbiAgICAvLyBFbnRyeSBpdGVyYXRvcnMgcHJvdmlkZSBpbXBsaWNpdCBrZXlzLlxuICAgIGlmIChpdGVyYXRvckZuKSB7XG4gICAgICBpZiAoaXRlcmF0b3JGbiAhPT0gbm9kZS5lbnRyaWVzKSB7XG4gICAgICAgIHZhciBpdGVyYXRvciA9IGl0ZXJhdG9yRm4uY2FsbChub2RlKTtcbiAgICAgICAgdmFyIHN0ZXA7XG4gICAgICAgIHdoaWxlICghKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmUpIHtcbiAgICAgICAgICBpZiAoUmVhY3RFbGVtZW50LmlzVmFsaWRFbGVtZW50KHN0ZXAudmFsdWUpKSB7XG4gICAgICAgICAgICB2YWxpZGF0ZUV4cGxpY2l0S2V5KHN0ZXAudmFsdWUsIHBhcmVudFR5cGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEdpdmVuIGFuIGVsZW1lbnQsIHZhbGlkYXRlIHRoYXQgaXRzIHByb3BzIGZvbGxvdyB0aGUgcHJvcFR5cGVzIGRlZmluaXRpb24sXG4gKiBwcm92aWRlZCBieSB0aGUgdHlwZS5cbiAqXG4gKiBAcGFyYW0ge1JlYWN0RWxlbWVudH0gZWxlbWVudFxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZVByb3BUeXBlcyhlbGVtZW50KSB7XG4gIHZhciBjb21wb25lbnRDbGFzcyA9IGVsZW1lbnQudHlwZTtcbiAgaWYgKHR5cGVvZiBjb21wb25lbnRDbGFzcyAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybjtcbiAgfVxuICB2YXIgbmFtZSA9IGNvbXBvbmVudENsYXNzLmRpc3BsYXlOYW1lIHx8IGNvbXBvbmVudENsYXNzLm5hbWU7XG4gIGlmIChjb21wb25lbnRDbGFzcy5wcm9wVHlwZXMpIHtcbiAgICBjaGVja1JlYWN0VHlwZVNwZWMoY29tcG9uZW50Q2xhc3MucHJvcFR5cGVzLCBlbGVtZW50LnByb3BzLCAncHJvcCcsIG5hbWUsIGVsZW1lbnQsIG51bGwpO1xuICB9XG4gIGlmICh0eXBlb2YgY29tcG9uZW50Q2xhc3MuZ2V0RGVmYXVsdFByb3BzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcoY29tcG9uZW50Q2xhc3MuZ2V0RGVmYXVsdFByb3BzLmlzUmVhY3RDbGFzc0FwcHJvdmVkLCAnZ2V0RGVmYXVsdFByb3BzIGlzIG9ubHkgdXNlZCBvbiBjbGFzc2ljIFJlYWN0LmNyZWF0ZUNsYXNzICcgKyAnZGVmaW5pdGlvbnMuIFVzZSBhIHN0YXRpYyBwcm9wZXJ0eSBuYW1lZCBgZGVmYXVsdFByb3BzYCBpbnN0ZWFkLicpIDogdm9pZCAwO1xuICB9XG59XG5cbnZhciBSZWFjdEVsZW1lbnRWYWxpZGF0b3IgPSB7XG4gIGNyZWF0ZUVsZW1lbnQ6IGZ1bmN0aW9uICh0eXBlLCBwcm9wcywgY2hpbGRyZW4pIHtcbiAgICB2YXIgdmFsaWRUeXBlID0gdHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nO1xuICAgIC8vIFdlIHdhcm4gaW4gdGhpcyBjYXNlIGJ1dCBkb24ndCB0aHJvdy4gV2UgZXhwZWN0IHRoZSBlbGVtZW50IGNyZWF0aW9uIHRvXG4gICAgLy8gc3VjY2VlZCBhbmQgdGhlcmUgd2lsbCBsaWtlbHkgYmUgZXJyb3JzIGluIHJlbmRlci5cbiAgICBpZiAoIXZhbGlkVHlwZSkge1xuICAgICAgaWYgKHR5cGVvZiB0eXBlICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiB0eXBlICE9PSAnc3RyaW5nJykge1xuICAgICAgICB2YXIgaW5mbyA9ICcnO1xuICAgICAgICBpZiAodHlwZSA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiB0eXBlID09PSAnb2JqZWN0JyAmJiB0eXBlICE9PSBudWxsICYmIE9iamVjdC5rZXlzKHR5cGUpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIGluZm8gKz0gJyBZb3UgbGlrZWx5IGZvcmdvdCB0byBleHBvcnQgeW91ciBjb21wb25lbnQgZnJvbSB0aGUgZmlsZSAnICsgXCJpdCdzIGRlZmluZWQgaW4uXCI7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgc291cmNlSW5mbyA9IGdldFNvdXJjZUluZm9FcnJvckFkZGVuZHVtKHByb3BzKTtcbiAgICAgICAgaWYgKHNvdXJjZUluZm8pIHtcbiAgICAgICAgICBpbmZvICs9IHNvdXJjZUluZm87XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaW5mbyArPSBnZXREZWNsYXJhdGlvbkVycm9yQWRkZW5kdW0oKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGluZm8gKz0gUmVhY3RDb21wb25lbnRUcmVlSG9vay5nZXRDdXJyZW50U3RhY2tBZGRlbmR1bSgpO1xuXG4gICAgICAgIHZhciBjdXJyZW50U291cmNlID0gcHJvcHMgIT09IG51bGwgJiYgcHJvcHMgIT09IHVuZGVmaW5lZCAmJiBwcm9wcy5fX3NvdXJjZSAhPT0gdW5kZWZpbmVkID8gcHJvcHMuX19zb3VyY2UgOiBudWxsO1xuICAgICAgICBSZWFjdENvbXBvbmVudFRyZWVIb29rLnB1c2hOb25TdGFuZGFyZFdhcm5pbmdTdGFjayh0cnVlLCBjdXJyZW50U291cmNlKTtcbiAgICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcoZmFsc2UsICdSZWFjdC5jcmVhdGVFbGVtZW50OiB0eXBlIGlzIGludmFsaWQgLS0gZXhwZWN0ZWQgYSBzdHJpbmcgKGZvciAnICsgJ2J1aWx0LWluIGNvbXBvbmVudHMpIG9yIGEgY2xhc3MvZnVuY3Rpb24gKGZvciBjb21wb3NpdGUgJyArICdjb21wb25lbnRzKSBidXQgZ290OiAlcy4lcycsIHR5cGUgPT0gbnVsbCA/IHR5cGUgOiB0eXBlb2YgdHlwZSwgaW5mbykgOiB2b2lkIDA7XG4gICAgICAgIFJlYWN0Q29tcG9uZW50VHJlZUhvb2sucG9wTm9uU3RhbmRhcmRXYXJuaW5nU3RhY2soKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgZWxlbWVudCA9IFJlYWN0RWxlbWVudC5jcmVhdGVFbGVtZW50LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cbiAgICAvLyBUaGUgcmVzdWx0IGNhbiBiZSBudWxsaXNoIGlmIGEgbW9jayBvciBhIGN1c3RvbSBmdW5jdGlvbiBpcyB1c2VkLlxuICAgIC8vIFRPRE86IERyb3AgdGhpcyB3aGVuIHRoZXNlIGFyZSBubyBsb25nZXIgYWxsb3dlZCBhcyB0aGUgdHlwZSBhcmd1bWVudC5cbiAgICBpZiAoZWxlbWVudCA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gZWxlbWVudDtcbiAgICB9XG5cbiAgICAvLyBTa2lwIGtleSB3YXJuaW5nIGlmIHRoZSB0eXBlIGlzbid0IHZhbGlkIHNpbmNlIG91ciBrZXkgdmFsaWRhdGlvbiBsb2dpY1xuICAgIC8vIGRvZXNuJ3QgZXhwZWN0IGEgbm9uLXN0cmluZy9mdW5jdGlvbiB0eXBlIGFuZCBjYW4gdGhyb3cgY29uZnVzaW5nIGVycm9ycy5cbiAgICAvLyBXZSBkb24ndCB3YW50IGV4Y2VwdGlvbiBiZWhhdmlvciB0byBkaWZmZXIgYmV0d2VlbiBkZXYgYW5kIHByb2QuXG4gICAgLy8gKFJlbmRlcmluZyB3aWxsIHRocm93IHdpdGggYSBoZWxwZnVsIG1lc3NhZ2UgYW5kIGFzIHNvb24gYXMgdGhlIHR5cGUgaXNcbiAgICAvLyBmaXhlZCwgdGhlIGtleSB3YXJuaW5ncyB3aWxsIGFwcGVhci4pXG4gICAgaWYgKHZhbGlkVHlwZSkge1xuICAgICAgZm9yICh2YXIgaSA9IDI7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFsaWRhdGVDaGlsZEtleXMoYXJndW1lbnRzW2ldLCB0eXBlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YWxpZGF0ZVByb3BUeXBlcyhlbGVtZW50KTtcblxuICAgIHJldHVybiBlbGVtZW50O1xuICB9LFxuXG4gIGNyZWF0ZUZhY3Rvcnk6IGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgdmFyIHZhbGlkYXRlZEZhY3RvcnkgPSBSZWFjdEVsZW1lbnRWYWxpZGF0b3IuY3JlYXRlRWxlbWVudC5iaW5kKG51bGwsIHR5cGUpO1xuICAgIC8vIExlZ2FjeSBob29rIFRPRE86IFdhcm4gaWYgdGhpcyBpcyBhY2Nlc3NlZFxuICAgIHZhbGlkYXRlZEZhY3RvcnkudHlwZSA9IHR5cGU7XG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKGNhbkRlZmluZVByb3BlcnR5KSB7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh2YWxpZGF0ZWRGYWN0b3J5LCAndHlwZScsIHtcbiAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxvd1ByaW9yaXR5V2FybmluZyhmYWxzZSwgJ0ZhY3RvcnkudHlwZSBpcyBkZXByZWNhdGVkLiBBY2Nlc3MgdGhlIGNsYXNzIGRpcmVjdGx5ICcgKyAnYmVmb3JlIHBhc3NpbmcgaXQgdG8gY3JlYXRlRmFjdG9yeS4nKTtcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAndHlwZScsIHtcbiAgICAgICAgICAgICAgdmFsdWU6IHR5cGVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHR5cGU7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdmFsaWRhdGVkRmFjdG9yeTtcbiAgfSxcblxuICBjbG9uZUVsZW1lbnQ6IGZ1bmN0aW9uIChlbGVtZW50LCBwcm9wcywgY2hpbGRyZW4pIHtcbiAgICB2YXIgbmV3RWxlbWVudCA9IFJlYWN0RWxlbWVudC5jbG9uZUVsZW1lbnQuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICBmb3IgKHZhciBpID0gMjsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFsaWRhdGVDaGlsZEtleXMoYXJndW1lbnRzW2ldLCBuZXdFbGVtZW50LnR5cGUpO1xuICAgIH1cbiAgICB2YWxpZGF0ZVByb3BUeXBlcyhuZXdFbGVtZW50KTtcbiAgICByZXR1cm4gbmV3RWxlbWVudDtcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdEVsZW1lbnRWYWxpZGF0b3I7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC9saWIvUmVhY3RFbGVtZW50VmFsaWRhdG9yLmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxNS1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIHdhcm5pbmcgPSByZXF1aXJlKCdmYmpzL2xpYi93YXJuaW5nJyk7XG5cbmZ1bmN0aW9uIHdhcm5Ob29wKHB1YmxpY0luc3RhbmNlLCBjYWxsZXJOYW1lKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgdmFyIGNvbnN0cnVjdG9yID0gcHVibGljSW5zdGFuY2UuY29uc3RydWN0b3I7XG4gICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcoZmFsc2UsICclcyguLi4pOiBDYW4gb25seSB1cGRhdGUgYSBtb3VudGVkIG9yIG1vdW50aW5nIGNvbXBvbmVudC4gJyArICdUaGlzIHVzdWFsbHkgbWVhbnMgeW91IGNhbGxlZCAlcygpIG9uIGFuIHVubW91bnRlZCBjb21wb25lbnQuICcgKyAnVGhpcyBpcyBhIG5vLW9wLiBQbGVhc2UgY2hlY2sgdGhlIGNvZGUgZm9yIHRoZSAlcyBjb21wb25lbnQuJywgY2FsbGVyTmFtZSwgY2FsbGVyTmFtZSwgY29uc3RydWN0b3IgJiYgKGNvbnN0cnVjdG9yLmRpc3BsYXlOYW1lIHx8IGNvbnN0cnVjdG9yLm5hbWUpIHx8ICdSZWFjdENsYXNzJykgOiB2b2lkIDA7XG4gIH1cbn1cblxuLyoqXG4gKiBUaGlzIGlzIHRoZSBhYnN0cmFjdCBBUEkgZm9yIGFuIHVwZGF0ZSBxdWV1ZS5cbiAqL1xudmFyIFJlYWN0Tm9vcFVwZGF0ZVF1ZXVlID0ge1xuICAvKipcbiAgICogQ2hlY2tzIHdoZXRoZXIgb3Igbm90IHRoaXMgY29tcG9zaXRlIGNvbXBvbmVudCBpcyBtb3VudGVkLlxuICAgKiBAcGFyYW0ge1JlYWN0Q2xhc3N9IHB1YmxpY0luc3RhbmNlIFRoZSBpbnN0YW5jZSB3ZSB3YW50IHRvIHRlc3QuXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgbW91bnRlZCwgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgKiBAcHJvdGVjdGVkXG4gICAqIEBmaW5hbFxuICAgKi9cbiAgaXNNb3VudGVkOiBmdW5jdGlvbiAocHVibGljSW5zdGFuY2UpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEVucXVldWUgYSBjYWxsYmFjayB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQgYWZ0ZXIgYWxsIHRoZSBwZW5kaW5nIHVwZGF0ZXNcbiAgICogaGF2ZSBwcm9jZXNzZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7UmVhY3RDbGFzc30gcHVibGljSW5zdGFuY2UgVGhlIGluc3RhbmNlIHRvIHVzZSBhcyBgdGhpc2AgY29udGV4dC5cbiAgICogQHBhcmFtIHs/ZnVuY3Rpb259IGNhbGxiYWNrIENhbGxlZCBhZnRlciBzdGF0ZSBpcyB1cGRhdGVkLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGVucXVldWVDYWxsYmFjazogZnVuY3Rpb24gKHB1YmxpY0luc3RhbmNlLCBjYWxsYmFjaykge30sXG5cbiAgLyoqXG4gICAqIEZvcmNlcyBhbiB1cGRhdGUuIFRoaXMgc2hvdWxkIG9ubHkgYmUgaW52b2tlZCB3aGVuIGl0IGlzIGtub3duIHdpdGhcbiAgICogY2VydGFpbnR5IHRoYXQgd2UgYXJlICoqbm90KiogaW4gYSBET00gdHJhbnNhY3Rpb24uXG4gICAqXG4gICAqIFlvdSBtYXkgd2FudCB0byBjYWxsIHRoaXMgd2hlbiB5b3Uga25vdyB0aGF0IHNvbWUgZGVlcGVyIGFzcGVjdCBvZiB0aGVcbiAgICogY29tcG9uZW50J3Mgc3RhdGUgaGFzIGNoYW5nZWQgYnV0IGBzZXRTdGF0ZWAgd2FzIG5vdCBjYWxsZWQuXG4gICAqXG4gICAqIFRoaXMgd2lsbCBub3QgaW52b2tlIGBzaG91bGRDb21wb25lbnRVcGRhdGVgLCBidXQgaXQgd2lsbCBpbnZva2VcbiAgICogYGNvbXBvbmVudFdpbGxVcGRhdGVgIGFuZCBgY29tcG9uZW50RGlkVXBkYXRlYC5cbiAgICpcbiAgICogQHBhcmFtIHtSZWFjdENsYXNzfSBwdWJsaWNJbnN0YW5jZSBUaGUgaW5zdGFuY2UgdGhhdCBzaG91bGQgcmVyZW5kZXIuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZW5xdWV1ZUZvcmNlVXBkYXRlOiBmdW5jdGlvbiAocHVibGljSW5zdGFuY2UpIHtcbiAgICB3YXJuTm9vcChwdWJsaWNJbnN0YW5jZSwgJ2ZvcmNlVXBkYXRlJyk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFJlcGxhY2VzIGFsbCBvZiB0aGUgc3RhdGUuIEFsd2F5cyB1c2UgdGhpcyBvciBgc2V0U3RhdGVgIHRvIG11dGF0ZSBzdGF0ZS5cbiAgICogWW91IHNob3VsZCB0cmVhdCBgdGhpcy5zdGF0ZWAgYXMgaW1tdXRhYmxlLlxuICAgKlxuICAgKiBUaGVyZSBpcyBubyBndWFyYW50ZWUgdGhhdCBgdGhpcy5zdGF0ZWAgd2lsbCBiZSBpbW1lZGlhdGVseSB1cGRhdGVkLCBzb1xuICAgKiBhY2Nlc3NpbmcgYHRoaXMuc3RhdGVgIGFmdGVyIGNhbGxpbmcgdGhpcyBtZXRob2QgbWF5IHJldHVybiB0aGUgb2xkIHZhbHVlLlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0Q2xhc3N9IHB1YmxpY0luc3RhbmNlIFRoZSBpbnN0YW5jZSB0aGF0IHNob3VsZCByZXJlbmRlci5cbiAgICogQHBhcmFtIHtvYmplY3R9IGNvbXBsZXRlU3RhdGUgTmV4dCBzdGF0ZS5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBlbnF1ZXVlUmVwbGFjZVN0YXRlOiBmdW5jdGlvbiAocHVibGljSW5zdGFuY2UsIGNvbXBsZXRlU3RhdGUpIHtcbiAgICB3YXJuTm9vcChwdWJsaWNJbnN0YW5jZSwgJ3JlcGxhY2VTdGF0ZScpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBTZXRzIGEgc3Vic2V0IG9mIHRoZSBzdGF0ZS4gVGhpcyBvbmx5IGV4aXN0cyBiZWNhdXNlIF9wZW5kaW5nU3RhdGUgaXNcbiAgICogaW50ZXJuYWwuIFRoaXMgcHJvdmlkZXMgYSBtZXJnaW5nIHN0cmF0ZWd5IHRoYXQgaXMgbm90IGF2YWlsYWJsZSB0byBkZWVwXG4gICAqIHByb3BlcnRpZXMgd2hpY2ggaXMgY29uZnVzaW5nLiBUT0RPOiBFeHBvc2UgcGVuZGluZ1N0YXRlIG9yIGRvbid0IHVzZSBpdFxuICAgKiBkdXJpbmcgdGhlIG1lcmdlLlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0Q2xhc3N9IHB1YmxpY0luc3RhbmNlIFRoZSBpbnN0YW5jZSB0aGF0IHNob3VsZCByZXJlbmRlci5cbiAgICogQHBhcmFtIHtvYmplY3R9IHBhcnRpYWxTdGF0ZSBOZXh0IHBhcnRpYWwgc3RhdGUgdG8gYmUgbWVyZ2VkIHdpdGggc3RhdGUuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZW5xdWV1ZVNldFN0YXRlOiBmdW5jdGlvbiAocHVibGljSW5zdGFuY2UsIHBhcnRpYWxTdGF0ZSkge1xuICAgIHdhcm5Ob29wKHB1YmxpY0luc3RhbmNlLCAnc2V0U3RhdGUnKTtcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdE5vb3BVcGRhdGVRdWV1ZTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3JlYWN0L2xpYi9SZWFjdE5vb3BVcGRhdGVRdWV1ZS5qcyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIFxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuLyogZ2xvYmFsIFN5bWJvbCAqL1xuXG52YXIgSVRFUkFUT1JfU1lNQk9MID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wuaXRlcmF0b3I7XG52YXIgRkFVWF9JVEVSQVRPUl9TWU1CT0wgPSAnQEBpdGVyYXRvcic7IC8vIEJlZm9yZSBTeW1ib2wgc3BlYy5cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBpdGVyYXRvciBtZXRob2QgZnVuY3Rpb24gY29udGFpbmVkIG9uIHRoZSBpdGVyYWJsZSBvYmplY3QuXG4gKlxuICogQmUgc3VyZSB0byBpbnZva2UgdGhlIGZ1bmN0aW9uIHdpdGggdGhlIGl0ZXJhYmxlIGFzIGNvbnRleHQ6XG4gKlxuICogICAgIHZhciBpdGVyYXRvckZuID0gZ2V0SXRlcmF0b3JGbihteUl0ZXJhYmxlKTtcbiAqICAgICBpZiAoaXRlcmF0b3JGbikge1xuICogICAgICAgdmFyIGl0ZXJhdG9yID0gaXRlcmF0b3JGbi5jYWxsKG15SXRlcmFibGUpO1xuICogICAgICAgLi4uXG4gKiAgICAgfVxuICpcbiAqIEBwYXJhbSB7P29iamVjdH0gbWF5YmVJdGVyYWJsZVxuICogQHJldHVybiB7P2Z1bmN0aW9ufVxuICovXG5mdW5jdGlvbiBnZXRJdGVyYXRvckZuKG1heWJlSXRlcmFibGUpIHtcbiAgdmFyIGl0ZXJhdG9yRm4gPSBtYXliZUl0ZXJhYmxlICYmIChJVEVSQVRPUl9TWU1CT0wgJiYgbWF5YmVJdGVyYWJsZVtJVEVSQVRPUl9TWU1CT0xdIHx8IG1heWJlSXRlcmFibGVbRkFVWF9JVEVSQVRPUl9TWU1CT0xdKTtcbiAgaWYgKHR5cGVvZiBpdGVyYXRvckZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIGl0ZXJhdG9yRm47XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRJdGVyYXRvckZuO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QvbGliL2dldEl0ZXJhdG9yRm4uanMiLCIvKipcbiAqIENvbXBvc2VzIHNpbmdsZS1hcmd1bWVudCBmdW5jdGlvbnMgZnJvbSByaWdodCB0byBsZWZ0LiBUaGUgcmlnaHRtb3N0XG4gKiBmdW5jdGlvbiBjYW4gdGFrZSBtdWx0aXBsZSBhcmd1bWVudHMgYXMgaXQgcHJvdmlkZXMgdGhlIHNpZ25hdHVyZSBmb3JcbiAqIHRoZSByZXN1bHRpbmcgY29tcG9zaXRlIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSB7Li4uRnVuY3Rpb259IGZ1bmNzIFRoZSBmdW5jdGlvbnMgdG8gY29tcG9zZS5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gQSBmdW5jdGlvbiBvYnRhaW5lZCBieSBjb21wb3NpbmcgdGhlIGFyZ3VtZW50IGZ1bmN0aW9uc1xuICogZnJvbSByaWdodCB0byBsZWZ0LiBGb3IgZXhhbXBsZSwgY29tcG9zZShmLCBnLCBoKSBpcyBpZGVudGljYWwgdG8gZG9pbmdcbiAqICguLi5hcmdzKSA9PiBmKGcoaCguLi5hcmdzKSkpLlxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNvbXBvc2UoKSB7XG4gIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBmdW5jcyA9IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgIGZ1bmNzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICB9XG5cbiAgaWYgKGZ1bmNzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBmdW5jdGlvbiAoYXJnKSB7XG4gICAgICByZXR1cm4gYXJnO1xuICAgIH07XG4gIH1cblxuICBpZiAoZnVuY3MubGVuZ3RoID09PSAxKSB7XG4gICAgcmV0dXJuIGZ1bmNzWzBdO1xuICB9XG5cbiAgdmFyIGxhc3QgPSBmdW5jc1tmdW5jcy5sZW5ndGggLSAxXTtcbiAgdmFyIHJlc3QgPSBmdW5jcy5zbGljZSgwLCAtMSk7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHJlc3QucmVkdWNlUmlnaHQoZnVuY3Rpb24gKGNvbXBvc2VkLCBmKSB7XG4gICAgICByZXR1cm4gZihjb21wb3NlZCk7XG4gICAgfSwgbGFzdC5hcHBseSh1bmRlZmluZWQsIGFyZ3VtZW50cykpO1xuICB9O1xufVxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVkdXgvZXMvY29tcG9zZS5qcyIsImltcG9ydCBpc1BsYWluT2JqZWN0IGZyb20gJ2xvZGFzaC1lcy9pc1BsYWluT2JqZWN0JztcbmltcG9ydCAkJG9ic2VydmFibGUgZnJvbSAnc3ltYm9sLW9ic2VydmFibGUnO1xuXG4vKipcbiAqIFRoZXNlIGFyZSBwcml2YXRlIGFjdGlvbiB0eXBlcyByZXNlcnZlZCBieSBSZWR1eC5cbiAqIEZvciBhbnkgdW5rbm93biBhY3Rpb25zLCB5b3UgbXVzdCByZXR1cm4gdGhlIGN1cnJlbnQgc3RhdGUuXG4gKiBJZiB0aGUgY3VycmVudCBzdGF0ZSBpcyB1bmRlZmluZWQsIHlvdSBtdXN0IHJldHVybiB0aGUgaW5pdGlhbCBzdGF0ZS5cbiAqIERvIG5vdCByZWZlcmVuY2UgdGhlc2UgYWN0aW9uIHR5cGVzIGRpcmVjdGx5IGluIHlvdXIgY29kZS5cbiAqL1xuZXhwb3J0IHZhciBBY3Rpb25UeXBlcyA9IHtcbiAgSU5JVDogJ0BAcmVkdXgvSU5JVCdcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhIFJlZHV4IHN0b3JlIHRoYXQgaG9sZHMgdGhlIHN0YXRlIHRyZWUuXG4gKiBUaGUgb25seSB3YXkgdG8gY2hhbmdlIHRoZSBkYXRhIGluIHRoZSBzdG9yZSBpcyB0byBjYWxsIGBkaXNwYXRjaCgpYCBvbiBpdC5cbiAqXG4gKiBUaGVyZSBzaG91bGQgb25seSBiZSBhIHNpbmdsZSBzdG9yZSBpbiB5b3VyIGFwcC4gVG8gc3BlY2lmeSBob3cgZGlmZmVyZW50XG4gKiBwYXJ0cyBvZiB0aGUgc3RhdGUgdHJlZSByZXNwb25kIHRvIGFjdGlvbnMsIHlvdSBtYXkgY29tYmluZSBzZXZlcmFsIHJlZHVjZXJzXG4gKiBpbnRvIGEgc2luZ2xlIHJlZHVjZXIgZnVuY3Rpb24gYnkgdXNpbmcgYGNvbWJpbmVSZWR1Y2Vyc2AuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcmVkdWNlciBBIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgbmV4dCBzdGF0ZSB0cmVlLCBnaXZlblxuICogdGhlIGN1cnJlbnQgc3RhdGUgdHJlZSBhbmQgdGhlIGFjdGlvbiB0byBoYW5kbGUuXG4gKlxuICogQHBhcmFtIHthbnl9IFtwcmVsb2FkZWRTdGF0ZV0gVGhlIGluaXRpYWwgc3RhdGUuIFlvdSBtYXkgb3B0aW9uYWxseSBzcGVjaWZ5IGl0XG4gKiB0byBoeWRyYXRlIHRoZSBzdGF0ZSBmcm9tIHRoZSBzZXJ2ZXIgaW4gdW5pdmVyc2FsIGFwcHMsIG9yIHRvIHJlc3RvcmUgYVxuICogcHJldmlvdXNseSBzZXJpYWxpemVkIHVzZXIgc2Vzc2lvbi5cbiAqIElmIHlvdSB1c2UgYGNvbWJpbmVSZWR1Y2Vyc2AgdG8gcHJvZHVjZSB0aGUgcm9vdCByZWR1Y2VyIGZ1bmN0aW9uLCB0aGlzIG11c3QgYmVcbiAqIGFuIG9iamVjdCB3aXRoIHRoZSBzYW1lIHNoYXBlIGFzIGBjb21iaW5lUmVkdWNlcnNgIGtleXMuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZW5oYW5jZXIgVGhlIHN0b3JlIGVuaGFuY2VyLiBZb3UgbWF5IG9wdGlvbmFsbHkgc3BlY2lmeSBpdFxuICogdG8gZW5oYW5jZSB0aGUgc3RvcmUgd2l0aCB0aGlyZC1wYXJ0eSBjYXBhYmlsaXRpZXMgc3VjaCBhcyBtaWRkbGV3YXJlLFxuICogdGltZSB0cmF2ZWwsIHBlcnNpc3RlbmNlLCBldGMuIFRoZSBvbmx5IHN0b3JlIGVuaGFuY2VyIHRoYXQgc2hpcHMgd2l0aCBSZWR1eFxuICogaXMgYGFwcGx5TWlkZGxld2FyZSgpYC5cbiAqXG4gKiBAcmV0dXJucyB7U3RvcmV9IEEgUmVkdXggc3RvcmUgdGhhdCBsZXRzIHlvdSByZWFkIHRoZSBzdGF0ZSwgZGlzcGF0Y2ggYWN0aW9uc1xuICogYW5kIHN1YnNjcmliZSB0byBjaGFuZ2VzLlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjcmVhdGVTdG9yZShyZWR1Y2VyLCBwcmVsb2FkZWRTdGF0ZSwgZW5oYW5jZXIpIHtcbiAgdmFyIF9yZWYyO1xuXG4gIGlmICh0eXBlb2YgcHJlbG9hZGVkU3RhdGUgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGVuaGFuY2VyID09PSAndW5kZWZpbmVkJykge1xuICAgIGVuaGFuY2VyID0gcHJlbG9hZGVkU3RhdGU7XG4gICAgcHJlbG9hZGVkU3RhdGUgPSB1bmRlZmluZWQ7XG4gIH1cblxuICBpZiAodHlwZW9mIGVuaGFuY2VyICE9PSAndW5kZWZpbmVkJykge1xuICAgIGlmICh0eXBlb2YgZW5oYW5jZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgdGhlIGVuaGFuY2VyIHRvIGJlIGEgZnVuY3Rpb24uJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGVuaGFuY2VyKGNyZWF0ZVN0b3JlKShyZWR1Y2VyLCBwcmVsb2FkZWRTdGF0ZSk7XG4gIH1cblxuICBpZiAodHlwZW9mIHJlZHVjZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIHRoZSByZWR1Y2VyIHRvIGJlIGEgZnVuY3Rpb24uJyk7XG4gIH1cblxuICB2YXIgY3VycmVudFJlZHVjZXIgPSByZWR1Y2VyO1xuICB2YXIgY3VycmVudFN0YXRlID0gcHJlbG9hZGVkU3RhdGU7XG4gIHZhciBjdXJyZW50TGlzdGVuZXJzID0gW107XG4gIHZhciBuZXh0TGlzdGVuZXJzID0gY3VycmVudExpc3RlbmVycztcbiAgdmFyIGlzRGlzcGF0Y2hpbmcgPSBmYWxzZTtcblxuICBmdW5jdGlvbiBlbnN1cmVDYW5NdXRhdGVOZXh0TGlzdGVuZXJzKCkge1xuICAgIGlmIChuZXh0TGlzdGVuZXJzID09PSBjdXJyZW50TGlzdGVuZXJzKSB7XG4gICAgICBuZXh0TGlzdGVuZXJzID0gY3VycmVudExpc3RlbmVycy5zbGljZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZWFkcyB0aGUgc3RhdGUgdHJlZSBtYW5hZ2VkIGJ5IHRoZSBzdG9yZS5cbiAgICpcbiAgICogQHJldHVybnMge2FueX0gVGhlIGN1cnJlbnQgc3RhdGUgdHJlZSBvZiB5b3VyIGFwcGxpY2F0aW9uLlxuICAgKi9cbiAgZnVuY3Rpb24gZ2V0U3RhdGUoKSB7XG4gICAgcmV0dXJuIGN1cnJlbnRTdGF0ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgY2hhbmdlIGxpc3RlbmVyLiBJdCB3aWxsIGJlIGNhbGxlZCBhbnkgdGltZSBhbiBhY3Rpb24gaXMgZGlzcGF0Y2hlZCxcbiAgICogYW5kIHNvbWUgcGFydCBvZiB0aGUgc3RhdGUgdHJlZSBtYXkgcG90ZW50aWFsbHkgaGF2ZSBjaGFuZ2VkLiBZb3UgbWF5IHRoZW5cbiAgICogY2FsbCBgZ2V0U3RhdGUoKWAgdG8gcmVhZCB0aGUgY3VycmVudCBzdGF0ZSB0cmVlIGluc2lkZSB0aGUgY2FsbGJhY2suXG4gICAqXG4gICAqIFlvdSBtYXkgY2FsbCBgZGlzcGF0Y2goKWAgZnJvbSBhIGNoYW5nZSBsaXN0ZW5lciwgd2l0aCB0aGUgZm9sbG93aW5nXG4gICAqIGNhdmVhdHM6XG4gICAqXG4gICAqIDEuIFRoZSBzdWJzY3JpcHRpb25zIGFyZSBzbmFwc2hvdHRlZCBqdXN0IGJlZm9yZSBldmVyeSBgZGlzcGF0Y2goKWAgY2FsbC5cbiAgICogSWYgeW91IHN1YnNjcmliZSBvciB1bnN1YnNjcmliZSB3aGlsZSB0aGUgbGlzdGVuZXJzIGFyZSBiZWluZyBpbnZva2VkLCB0aGlzXG4gICAqIHdpbGwgbm90IGhhdmUgYW55IGVmZmVjdCBvbiB0aGUgYGRpc3BhdGNoKClgIHRoYXQgaXMgY3VycmVudGx5IGluIHByb2dyZXNzLlxuICAgKiBIb3dldmVyLCB0aGUgbmV4dCBgZGlzcGF0Y2goKWAgY2FsbCwgd2hldGhlciBuZXN0ZWQgb3Igbm90LCB3aWxsIHVzZSBhIG1vcmVcbiAgICogcmVjZW50IHNuYXBzaG90IG9mIHRoZSBzdWJzY3JpcHRpb24gbGlzdC5cbiAgICpcbiAgICogMi4gVGhlIGxpc3RlbmVyIHNob3VsZCBub3QgZXhwZWN0IHRvIHNlZSBhbGwgc3RhdGUgY2hhbmdlcywgYXMgdGhlIHN0YXRlXG4gICAqIG1pZ2h0IGhhdmUgYmVlbiB1cGRhdGVkIG11bHRpcGxlIHRpbWVzIGR1cmluZyBhIG5lc3RlZCBgZGlzcGF0Y2goKWAgYmVmb3JlXG4gICAqIHRoZSBsaXN0ZW5lciBpcyBjYWxsZWQuIEl0IGlzLCBob3dldmVyLCBndWFyYW50ZWVkIHRoYXQgYWxsIHN1YnNjcmliZXJzXG4gICAqIHJlZ2lzdGVyZWQgYmVmb3JlIHRoZSBgZGlzcGF0Y2goKWAgc3RhcnRlZCB3aWxsIGJlIGNhbGxlZCB3aXRoIHRoZSBsYXRlc3RcbiAgICogc3RhdGUgYnkgdGhlIHRpbWUgaXQgZXhpdHMuXG4gICAqXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGxpc3RlbmVyIEEgY2FsbGJhY2sgdG8gYmUgaW52b2tlZCBvbiBldmVyeSBkaXNwYXRjaC5cbiAgICogQHJldHVybnMge0Z1bmN0aW9ufSBBIGZ1bmN0aW9uIHRvIHJlbW92ZSB0aGlzIGNoYW5nZSBsaXN0ZW5lci5cbiAgICovXG4gIGZ1bmN0aW9uIHN1YnNjcmliZShsaXN0ZW5lcikge1xuICAgIGlmICh0eXBlb2YgbGlzdGVuZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgbGlzdGVuZXIgdG8gYmUgYSBmdW5jdGlvbi4nKTtcbiAgICB9XG5cbiAgICB2YXIgaXNTdWJzY3JpYmVkID0gdHJ1ZTtcblxuICAgIGVuc3VyZUNhbk11dGF0ZU5leHRMaXN0ZW5lcnMoKTtcbiAgICBuZXh0TGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpO1xuXG4gICAgcmV0dXJuIGZ1bmN0aW9uIHVuc3Vic2NyaWJlKCkge1xuICAgICAgaWYgKCFpc1N1YnNjcmliZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpc1N1YnNjcmliZWQgPSBmYWxzZTtcblxuICAgICAgZW5zdXJlQ2FuTXV0YXRlTmV4dExpc3RlbmVycygpO1xuICAgICAgdmFyIGluZGV4ID0gbmV4dExpc3RlbmVycy5pbmRleE9mKGxpc3RlbmVyKTtcbiAgICAgIG5leHRMaXN0ZW5lcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIERpc3BhdGNoZXMgYW4gYWN0aW9uLiBJdCBpcyB0aGUgb25seSB3YXkgdG8gdHJpZ2dlciBhIHN0YXRlIGNoYW5nZS5cbiAgICpcbiAgICogVGhlIGByZWR1Y2VyYCBmdW5jdGlvbiwgdXNlZCB0byBjcmVhdGUgdGhlIHN0b3JlLCB3aWxsIGJlIGNhbGxlZCB3aXRoIHRoZVxuICAgKiBjdXJyZW50IHN0YXRlIHRyZWUgYW5kIHRoZSBnaXZlbiBgYWN0aW9uYC4gSXRzIHJldHVybiB2YWx1ZSB3aWxsXG4gICAqIGJlIGNvbnNpZGVyZWQgdGhlICoqbmV4dCoqIHN0YXRlIG9mIHRoZSB0cmVlLCBhbmQgdGhlIGNoYW5nZSBsaXN0ZW5lcnNcbiAgICogd2lsbCBiZSBub3RpZmllZC5cbiAgICpcbiAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb25seSBzdXBwb3J0cyBwbGFpbiBvYmplY3QgYWN0aW9ucy4gSWYgeW91IHdhbnQgdG9cbiAgICogZGlzcGF0Y2ggYSBQcm9taXNlLCBhbiBPYnNlcnZhYmxlLCBhIHRodW5rLCBvciBzb21ldGhpbmcgZWxzZSwgeW91IG5lZWQgdG9cbiAgICogd3JhcCB5b3VyIHN0b3JlIGNyZWF0aW5nIGZ1bmN0aW9uIGludG8gdGhlIGNvcnJlc3BvbmRpbmcgbWlkZGxld2FyZS4gRm9yXG4gICAqIGV4YW1wbGUsIHNlZSB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIGByZWR1eC10aHVua2AgcGFja2FnZS4gRXZlbiB0aGVcbiAgICogbWlkZGxld2FyZSB3aWxsIGV2ZW50dWFsbHkgZGlzcGF0Y2ggcGxhaW4gb2JqZWN0IGFjdGlvbnMgdXNpbmcgdGhpcyBtZXRob2QuXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBhY3Rpb24gQSBwbGFpbiBvYmplY3QgcmVwcmVzZW50aW5nIOKAnHdoYXQgY2hhbmdlZOKAnS4gSXQgaXNcbiAgICogYSBnb29kIGlkZWEgdG8ga2VlcCBhY3Rpb25zIHNlcmlhbGl6YWJsZSBzbyB5b3UgY2FuIHJlY29yZCBhbmQgcmVwbGF5IHVzZXJcbiAgICogc2Vzc2lvbnMsIG9yIHVzZSB0aGUgdGltZSB0cmF2ZWxsaW5nIGByZWR1eC1kZXZ0b29sc2AuIEFuIGFjdGlvbiBtdXN0IGhhdmVcbiAgICogYSBgdHlwZWAgcHJvcGVydHkgd2hpY2ggbWF5IG5vdCBiZSBgdW5kZWZpbmVkYC4gSXQgaXMgYSBnb29kIGlkZWEgdG8gdXNlXG4gICAqIHN0cmluZyBjb25zdGFudHMgZm9yIGFjdGlvbiB0eXBlcy5cbiAgICpcbiAgICogQHJldHVybnMge09iamVjdH0gRm9yIGNvbnZlbmllbmNlLCB0aGUgc2FtZSBhY3Rpb24gb2JqZWN0IHlvdSBkaXNwYXRjaGVkLlxuICAgKlxuICAgKiBOb3RlIHRoYXQsIGlmIHlvdSB1c2UgYSBjdXN0b20gbWlkZGxld2FyZSwgaXQgbWF5IHdyYXAgYGRpc3BhdGNoKClgIHRvXG4gICAqIHJldHVybiBzb21ldGhpbmcgZWxzZSAoZm9yIGV4YW1wbGUsIGEgUHJvbWlzZSB5b3UgY2FuIGF3YWl0KS5cbiAgICovXG4gIGZ1bmN0aW9uIGRpc3BhdGNoKGFjdGlvbikge1xuICAgIGlmICghaXNQbGFpbk9iamVjdChhY3Rpb24pKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FjdGlvbnMgbXVzdCBiZSBwbGFpbiBvYmplY3RzLiAnICsgJ1VzZSBjdXN0b20gbWlkZGxld2FyZSBmb3IgYXN5bmMgYWN0aW9ucy4nKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGFjdGlvbi50eXBlID09PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBY3Rpb25zIG1heSBub3QgaGF2ZSBhbiB1bmRlZmluZWQgXCJ0eXBlXCIgcHJvcGVydHkuICcgKyAnSGF2ZSB5b3UgbWlzc3BlbGxlZCBhIGNvbnN0YW50PycpO1xuICAgIH1cblxuICAgIGlmIChpc0Rpc3BhdGNoaW5nKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlZHVjZXJzIG1heSBub3QgZGlzcGF0Y2ggYWN0aW9ucy4nKTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgaXNEaXNwYXRjaGluZyA9IHRydWU7XG4gICAgICBjdXJyZW50U3RhdGUgPSBjdXJyZW50UmVkdWNlcihjdXJyZW50U3RhdGUsIGFjdGlvbik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlzRGlzcGF0Y2hpbmcgPSBmYWxzZTtcbiAgICB9XG5cbiAgICB2YXIgbGlzdGVuZXJzID0gY3VycmVudExpc3RlbmVycyA9IG5leHRMaXN0ZW5lcnM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0ZW5lcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGxpc3RlbmVyc1tpXSgpO1xuICAgIH1cblxuICAgIHJldHVybiBhY3Rpb247XG4gIH1cblxuICAvKipcbiAgICogUmVwbGFjZXMgdGhlIHJlZHVjZXIgY3VycmVudGx5IHVzZWQgYnkgdGhlIHN0b3JlIHRvIGNhbGN1bGF0ZSB0aGUgc3RhdGUuXG4gICAqXG4gICAqIFlvdSBtaWdodCBuZWVkIHRoaXMgaWYgeW91ciBhcHAgaW1wbGVtZW50cyBjb2RlIHNwbGl0dGluZyBhbmQgeW91IHdhbnQgdG9cbiAgICogbG9hZCBzb21lIG9mIHRoZSByZWR1Y2VycyBkeW5hbWljYWxseS4gWW91IG1pZ2h0IGFsc28gbmVlZCB0aGlzIGlmIHlvdVxuICAgKiBpbXBsZW1lbnQgYSBob3QgcmVsb2FkaW5nIG1lY2hhbmlzbSBmb3IgUmVkdXguXG4gICAqXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IG5leHRSZWR1Y2VyIFRoZSByZWR1Y2VyIGZvciB0aGUgc3RvcmUgdG8gdXNlIGluc3RlYWQuXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgZnVuY3Rpb24gcmVwbGFjZVJlZHVjZXIobmV4dFJlZHVjZXIpIHtcbiAgICBpZiAodHlwZW9mIG5leHRSZWR1Y2VyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIHRoZSBuZXh0UmVkdWNlciB0byBiZSBhIGZ1bmN0aW9uLicpO1xuICAgIH1cblxuICAgIGN1cnJlbnRSZWR1Y2VyID0gbmV4dFJlZHVjZXI7XG4gICAgZGlzcGF0Y2goeyB0eXBlOiBBY3Rpb25UeXBlcy5JTklUIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEludGVyb3BlcmFiaWxpdHkgcG9pbnQgZm9yIG9ic2VydmFibGUvcmVhY3RpdmUgbGlicmFyaWVzLlxuICAgKiBAcmV0dXJucyB7b2JzZXJ2YWJsZX0gQSBtaW5pbWFsIG9ic2VydmFibGUgb2Ygc3RhdGUgY2hhbmdlcy5cbiAgICogRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSB0aGUgb2JzZXJ2YWJsZSBwcm9wb3NhbDpcbiAgICogaHR0cHM6Ly9naXRodWIuY29tL3plbnBhcnNpbmcvZXMtb2JzZXJ2YWJsZVxuICAgKi9cbiAgZnVuY3Rpb24gb2JzZXJ2YWJsZSgpIHtcbiAgICB2YXIgX3JlZjtcblxuICAgIHZhciBvdXRlclN1YnNjcmliZSA9IHN1YnNjcmliZTtcbiAgICByZXR1cm4gX3JlZiA9IHtcbiAgICAgIC8qKlxuICAgICAgICogVGhlIG1pbmltYWwgb2JzZXJ2YWJsZSBzdWJzY3JpcHRpb24gbWV0aG9kLlxuICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9ic2VydmVyIEFueSBvYmplY3QgdGhhdCBjYW4gYmUgdXNlZCBhcyBhbiBvYnNlcnZlci5cbiAgICAgICAqIFRoZSBvYnNlcnZlciBvYmplY3Qgc2hvdWxkIGhhdmUgYSBgbmV4dGAgbWV0aG9kLlxuICAgICAgICogQHJldHVybnMge3N1YnNjcmlwdGlvbn0gQW4gb2JqZWN0IHdpdGggYW4gYHVuc3Vic2NyaWJlYCBtZXRob2QgdGhhdCBjYW5cbiAgICAgICAqIGJlIHVzZWQgdG8gdW5zdWJzY3JpYmUgdGhlIG9ic2VydmFibGUgZnJvbSB0aGUgc3RvcmUsIGFuZCBwcmV2ZW50IGZ1cnRoZXJcbiAgICAgICAqIGVtaXNzaW9uIG9mIHZhbHVlcyBmcm9tIHRoZSBvYnNlcnZhYmxlLlxuICAgICAgICovXG4gICAgICBzdWJzY3JpYmU6IGZ1bmN0aW9uIHN1YnNjcmliZShvYnNlcnZlcikge1xuICAgICAgICBpZiAodHlwZW9mIG9ic2VydmVyICE9PSAnb2JqZWN0Jykge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIHRoZSBvYnNlcnZlciB0byBiZSBhbiBvYmplY3QuJyk7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBvYnNlcnZlU3RhdGUoKSB7XG4gICAgICAgICAgaWYgKG9ic2VydmVyLm5leHQpIHtcbiAgICAgICAgICAgIG9ic2VydmVyLm5leHQoZ2V0U3RhdGUoKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgb2JzZXJ2ZVN0YXRlKCk7XG4gICAgICAgIHZhciB1bnN1YnNjcmliZSA9IG91dGVyU3Vic2NyaWJlKG9ic2VydmVTdGF0ZSk7XG4gICAgICAgIHJldHVybiB7IHVuc3Vic2NyaWJlOiB1bnN1YnNjcmliZSB9O1xuICAgICAgfVxuICAgIH0sIF9yZWZbJCRvYnNlcnZhYmxlXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sIF9yZWY7XG4gIH1cblxuICAvLyBXaGVuIGEgc3RvcmUgaXMgY3JlYXRlZCwgYW4gXCJJTklUXCIgYWN0aW9uIGlzIGRpc3BhdGNoZWQgc28gdGhhdCBldmVyeVxuICAvLyByZWR1Y2VyIHJldHVybnMgdGhlaXIgaW5pdGlhbCBzdGF0ZS4gVGhpcyBlZmZlY3RpdmVseSBwb3B1bGF0ZXNcbiAgLy8gdGhlIGluaXRpYWwgc3RhdGUgdHJlZS5cbiAgZGlzcGF0Y2goeyB0eXBlOiBBY3Rpb25UeXBlcy5JTklUIH0pO1xuXG4gIHJldHVybiBfcmVmMiA9IHtcbiAgICBkaXNwYXRjaDogZGlzcGF0Y2gsXG4gICAgc3Vic2NyaWJlOiBzdWJzY3JpYmUsXG4gICAgZ2V0U3RhdGU6IGdldFN0YXRlLFxuICAgIHJlcGxhY2VSZWR1Y2VyOiByZXBsYWNlUmVkdWNlclxuICB9LCBfcmVmMlskJG9ic2VydmFibGVdID0gb2JzZXJ2YWJsZSwgX3JlZjI7XG59XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWR1eC9lcy9jcmVhdGVTdG9yZS5qcyIsIi8qKlxuICogUHJpbnRzIGEgd2FybmluZyBpbiB0aGUgY29uc29sZSBpZiBpdCBleGlzdHMuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2UgVGhlIHdhcm5pbmcgbWVzc2FnZS5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB3YXJuaW5nKG1lc3NhZ2UpIHtcbiAgLyogZXNsaW50LWRpc2FibGUgbm8tY29uc29sZSAqL1xuICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBjb25zb2xlLmVycm9yID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY29uc29sZS5lcnJvcihtZXNzYWdlKTtcbiAgfVxuICAvKiBlc2xpbnQtZW5hYmxlIG5vLWNvbnNvbGUgKi9cbiAgdHJ5IHtcbiAgICAvLyBUaGlzIGVycm9yIHdhcyB0aHJvd24gYXMgYSBjb252ZW5pZW5jZSBzbyB0aGF0IGlmIHlvdSBlbmFibGVcbiAgICAvLyBcImJyZWFrIG9uIGFsbCBleGNlcHRpb25zXCIgaW4geW91ciBjb25zb2xlLFxuICAgIC8vIGl0IHdvdWxkIHBhdXNlIHRoZSBleGVjdXRpb24gYXQgdGhpcyBsaW5lLlxuICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby1lbXB0eSAqL1xuICB9IGNhdGNoIChlKSB7fVxuICAvKiBlc2xpbnQtZW5hYmxlIG5vLWVtcHR5ICovXG59XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWR1eC9lcy91dGlscy93YXJuaW5nLmpzIiwidmFyIGc7XHJcblxyXG4vLyBUaGlzIHdvcmtzIGluIG5vbi1zdHJpY3QgbW9kZVxyXG5nID0gKGZ1bmN0aW9uKCkge1xyXG5cdHJldHVybiB0aGlzO1xyXG59KSgpO1xyXG5cclxudHJ5IHtcclxuXHQvLyBUaGlzIHdvcmtzIGlmIGV2YWwgaXMgYWxsb3dlZCAoc2VlIENTUClcclxuXHRnID0gZyB8fCBGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCkgfHwgKDEsZXZhbCkoXCJ0aGlzXCIpO1xyXG59IGNhdGNoKGUpIHtcclxuXHQvLyBUaGlzIHdvcmtzIGlmIHRoZSB3aW5kb3cgcmVmZXJlbmNlIGlzIGF2YWlsYWJsZVxyXG5cdGlmKHR5cGVvZiB3aW5kb3cgPT09IFwib2JqZWN0XCIpXHJcblx0XHRnID0gd2luZG93O1xyXG59XHJcblxyXG4vLyBnIGNhbiBzdGlsbCBiZSB1bmRlZmluZWQsIGJ1dCBub3RoaW5nIHRvIGRvIGFib3V0IGl0Li4uXHJcbi8vIFdlIHJldHVybiB1bmRlZmluZWQsIGluc3RlYWQgb2Ygbm90aGluZyBoZXJlLCBzbyBpdCdzXHJcbi8vIGVhc2llciB0byBoYW5kbGUgdGhpcyBjYXNlLiBpZighZ2xvYmFsKSB7IC4uLn1cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gZztcclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vICh3ZWJwYWNrKS9idWlsZGluL2dsb2JhbC5qcyIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbiAgY29uc3QgZm9vdGVySXRlbXMgPSBbXCJGaWxlc1wiLFwiUGhvdG9zXCIsXCJTaGFyZWRcIixcIk11c2ljXCIsXCJNZW51XCJdO1xuICBjb25zdCBpY29uTWFwID0ge1xuICBmaWxlczogJ2ZhLWZvbGRlcicsXG4gIHBob3RvczogJ2ZhLXBpY3R1cmUtbycsXG4gIHNoYXJlZDogJ2ZhLXVzZXJzJyxcbiAgbXVzaWM6ICdmYS1tdXNpYycsXG4gIG1lbnU6ICdmYS1iYXJzJ1xuICB9O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBCb3R0b21OYXYoe2xvY2F0aW9ufSkge1xuXG4gIGNvbnN0IGZvb3RlckVsZW1lbnRzID0gZm9vdGVySXRlbXMubWFwKCAoaXRlbSwgaW5kZXgpID0+IHtcbiAgICByZXR1cm4gKFxuICAgICAgPGxpXG4gICAgICAgIGNsYXNzTmFtZT17XCJmb290ZXItaXRlbSBcIiArIChsb2NhdGlvbiA9PT0gaXRlbS50b0xvd2VyQ2FzZSgpICYmIFwiZm9vdGVyLWxpLWFjdGl2ZVwiKX1cbiAgICAgICAga2V5PXtpbmRleH1cbiAgICAgID5cbiAgICAgIDxhIGhyZWY9e1wiLyMvXCIgKyBpdGVtLnRvTG93ZXJDYXNlKCl9PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17XCJ0ZXN0LWRpdiBcIiArIChpbmRleCA9PT0gMiAmJiBcIm1pZGRsZS1idXR0b25cIil9PlxuICAgICAgICAgIDxpIGNsYXNzTmFtZT17YGZhICR7aWNvbk1hcFtpdGVtLnRvTG93ZXJDYXNlKCldfSBmYS0yeCBmb290ZXItZmFgfSBhcmlhLWhpZGRlbj1cInRydWVcIi8+XG4gICAgICAgICAgPHNwYW4+e2luZGV4IDwgNCA/IGl0ZW0gOiBcIlwifTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2E+XG4gICAgICA8L2xpPlxuICAgIClcbiAgfSApXG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cImZvb3RlclwiPlxuICAgICAgPHVsIGNsYXNzTmFtZT1cImZvb3Rlcm1lbnVcIj5cbiAgICAgICAge2Zvb3RlckVsZW1lbnRzfVxuICAgICAgPC91bD5cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9jb21wb25lbnRzL25hdmlnYXRpb24vYm90dG9tLW5hdi5qc3giLCJmdW5jdGlvbiB0cmF2ZXJzZShvcmlnaW4sIHByb3BsaXN0KSB7XG4gIGlmIChwcm9wbGlzdC5sZW5ndGgpIHtcbiAgICBsZXQgcHJvcCA9IHByb3BsaXN0LnNoaWZ0KCk7XG4gICAgcmV0dXJuIHRyYXZlcnNlKG9yaWdpbi5jb250ZW50cy5maW5kKGl0ZW0gPT4gaXRlbS50aXRsZSA9PT0gcHJvcCksIHByb3BsaXN0KTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gb3JpZ2luO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFBhdGggKHN0YXRlKSB7XG4gIHJldHVybiAoc3RhdGUuY3VycmVudFBhdGggPyB0cmF2ZXJzZShzdGF0ZS5maWxlc3lzdGVtLCBzdGF0ZS5jdXJyZW50UGF0aC5zcGxpdCgnLycpLnNsaWNlKDEpKSA6IHN0YXRlLmZpbGVzeXN0ZW0pLmNvbnRlbnRzO1xufVxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy91dGlsL2dldFBhdGguanMiLCIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9saWIvUmVhY3RET00nKTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QtZG9tL2luZGV4LmpzIiwiaW1wb3J0IF9Ccm93c2VyUm91dGVyIGZyb20gJy4vQnJvd3NlclJvdXRlcic7XG5leHBvcnQgeyBfQnJvd3NlclJvdXRlciBhcyBCcm93c2VyUm91dGVyIH07XG5pbXBvcnQgX0hhc2hSb3V0ZXIgZnJvbSAnLi9IYXNoUm91dGVyJztcbmV4cG9ydCB7IF9IYXNoUm91dGVyIGFzIEhhc2hSb3V0ZXIgfTtcbmltcG9ydCBfTGluayBmcm9tICcuL0xpbmsnO1xuZXhwb3J0IHsgX0xpbmsgYXMgTGluayB9O1xuaW1wb3J0IF9NZW1vcnlSb3V0ZXIgZnJvbSAnLi9NZW1vcnlSb3V0ZXInO1xuZXhwb3J0IHsgX01lbW9yeVJvdXRlciBhcyBNZW1vcnlSb3V0ZXIgfTtcbmltcG9ydCBfTmF2TGluayBmcm9tICcuL05hdkxpbmsnO1xuZXhwb3J0IHsgX05hdkxpbmsgYXMgTmF2TGluayB9O1xuaW1wb3J0IF9Qcm9tcHQgZnJvbSAnLi9Qcm9tcHQnO1xuZXhwb3J0IHsgX1Byb21wdCBhcyBQcm9tcHQgfTtcbmltcG9ydCBfUmVkaXJlY3QgZnJvbSAnLi9SZWRpcmVjdCc7XG5leHBvcnQgeyBfUmVkaXJlY3QgYXMgUmVkaXJlY3QgfTtcbmltcG9ydCBfUm91dGUgZnJvbSAnLi9Sb3V0ZSc7XG5leHBvcnQgeyBfUm91dGUgYXMgUm91dGUgfTtcbmltcG9ydCBfUm91dGVyIGZyb20gJy4vUm91dGVyJztcbmV4cG9ydCB7IF9Sb3V0ZXIgYXMgUm91dGVyIH07XG5pbXBvcnQgX1N0YXRpY1JvdXRlciBmcm9tICcuL1N0YXRpY1JvdXRlcic7XG5leHBvcnQgeyBfU3RhdGljUm91dGVyIGFzIFN0YXRpY1JvdXRlciB9O1xuaW1wb3J0IF9Td2l0Y2ggZnJvbSAnLi9Td2l0Y2gnO1xuZXhwb3J0IHsgX1N3aXRjaCBhcyBTd2l0Y2ggfTtcbmltcG9ydCBfbWF0Y2hQYXRoIGZyb20gJy4vbWF0Y2hQYXRoJztcbmV4cG9ydCB7IF9tYXRjaFBhdGggYXMgbWF0Y2hQYXRoIH07XG5pbXBvcnQgX3dpdGhSb3V0ZXIgZnJvbSAnLi93aXRoUm91dGVyJztcbmV4cG9ydCB7IF93aXRoUm91dGVyIGFzIHdpdGhSb3V0ZXIgfTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3JlYWN0LXJvdXRlci1kb20vZXMvaW5kZXguanMiLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtjb25uZWN0fSBmcm9tICdyZWFjdC1yZWR1eCc7XG5cbmltcG9ydCBUb3BOYXYgZnJvbSAnLi9uYXZpZ2F0aW9uL3RvcC1uYXYnO1xuaW1wb3J0IEJvdHRvbU5hdiBmcm9tICcuL25hdmlnYXRpb24vYm90dG9tLW5hdic7XG5pbXBvcnQgQnJlYWRjcnVtYnMgZnJvbSAnLi9uYXZpZ2F0aW9uL2JyZWFkY3J1bWJzJztcbmltcG9ydCBEaXNwbGF5TWVudSBmcm9tICcuL25hdmlnYXRpb24vZGlzcGxheS1tZW51JztcblxuaW1wb3J0IEZvbGRlckxpc3QgZnJvbSAnLi9jb250ZW50L2ZvbGRlci1saXN0JztcbmltcG9ydCBGaWxlTGlzdCBmcm9tICcuL2NvbnRlbnQvZmlsZS1saXN0JztcbmltcG9ydCBQaG90b0xpc3QgZnJvbSAnLi9jb250ZW50L3Bob3RvLWxpc3QnO1xuaW1wb3J0IFNoYXJlZExpc3QgZnJvbSAnLi9jb250ZW50L3NoYXJlZC1saXN0JztcbmltcG9ydCBNdXNpY0xpc3QgZnJvbSAnLi9jb250ZW50L211c2ljLWxpc3QnO1xuXG5cbmNvbnN0IGl0ZW1MaXN0cyA9IHtcbiAgZmlsZXM6IEZpbGVMaXN0LFxuICBwaG90b3M6IFBob3RvTGlzdCxcbiAgc2hhcmVkOiBTaGFyZWRMaXN0LFxuICBtdXNpYzogTXVzaWNMaXN0XG59O1xuXG5jb25zdCBNYWluID0gZnVuY3Rpb24gKHtsb2NhdGlvbn0pIHtcbiAgY29uc3QgY3VycmVudExpc3QgPSBsb2NhdGlvbi5wYXRobmFtZS5zcGxpdCgnLycpWzFdIHx8ICdmaWxlcyc7XG4gIHJldHVybiAoXG4gICAgPGRpdj5cbiAgICAgIDxUb3BOYXYgLz5cblxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJzcGFjZXJcIi8+XG4gICAgICA8QnJlYWRjcnVtYnMvPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJyZXN1bHRzXCI+XG4gICAgICAgIDxEaXNwbGF5TWVudSAvPlxuXG4gICAgICAgIDxGb2xkZXJMaXN0Lz5cbiAgICAgICAge1JlYWN0LmNyZWF0ZUVsZW1lbnQoaXRlbUxpc3RzW2N1cnJlbnRMaXN0XSl9XG4gICAgICAgIDxCb3R0b21OYXYgbG9jYXRpb249e2N1cnJlbnRMaXN0fSAvPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjb25uZWN0KCgpID0+ICh7fSksICgpID0+ICh7fSkpKE1haW4pO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9jb21wb25lbnRzL21haW4uanN4IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcblxuaW1wb3J0IEJvdHRvbU5hdiBmcm9tICcuL2JvdHRvbS1uYXYnO1xuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIE1lbnUoe2xvY2F0aW9ufSkge1xuICBjb25zdCBjdXJyZW50TGlzdCA9IGxvY2F0aW9uLnBhdGhuYW1lLnNwbGl0KCcvJylbMV0gfHwgJ2ZpbGVzJztcbiAgcmV0dXJuIChcbiAgICA8ZGl2PlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJtZW51LWhlYWRlclwiPlxuICAgICAgICA8aW1nIGNsYXNzTmFtZT1cIm1lbnUtaGVhZGVyLWxvZ29cIiBzcmM9XCIuL2xvZ29zL2RhcGxpZS1sb2dvLWdyYXkuc3ZnXCIvPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWVudS1jb250YWluZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtZW51LWl0ZW1cIj5cbiAgICAgICAgICA8aW1nIGNsYXNzTmFtZT1cIm1lbnUtaW1nLXBsYWNlaG9sZGVyXCIgc3JjPVwiLi9pY29ucy9mb2xkZXIuc3ZnXCIvPlxuICAgICAgICAgICAgPGgzPkZpbGVzPC9oMz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWVudS1pdGVtXCI+XG4gICAgICAgICAgPGltZyBjbGFzc05hbWU9XCJtZW51LWltZy1wbGFjZWhvbGRlclwiIHNyYz1cIi4vaWNvbnMvcHJvZmlsZS5wbmdcIi8+XG4gICAgICAgICAgICA8aDM+UHJvZmlsZTwvaDM+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1lbnUtaXRlbVwiPlxuICAgICAgICAgIDxpbWcgY2xhc3NOYW1lPVwibWVudS1pbWctcGxhY2Vob2xkZXJcIiBzcmM9XCIuL2ljb25zL25ldHdvcmsucG5nXCIvPlxuICAgICAgICAgICAgPGgzPk5ldHdvcms8L2gzPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtZW51LWl0ZW1cIj5cbiAgICAgICAgICA8aW1nIGNsYXNzTmFtZT1cIm1lbnUtaW1nLXBsYWNlaG9sZGVyXCIgc3JjPVwiLi9pY29ucy9zdG9yYWdlLXVzYWdlLnBuZ1wiLz5cbiAgICAgICAgICAgIDxoMz5TdG9yYWdlIFVzYWdlPC9oMz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWVudS1pdGVtXCI+XG4gICAgICAgICAgPGltZyBjbGFzc05hbWU9XCJtZW51LWltZy1wbGFjZWhvbGRlclwiIHNyYz1cIi4vaWNvbnMvbm90aWZpY2F0aW9ucy5wbmdcIi8+XG4gICAgICAgICAgICA8aDM+Tm90aWZpY2F0aW9uczwvaDM+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1lbnUtaXRlbVwiPlxuICAgICAgICAgIDxpbWcgY2xhc3NOYW1lPVwibWVudS1pbWctcGxhY2Vob2xkZXJcIiBzcmM9XCIuL2ljb25zL3NldHRpbmdzLnBuZ1wiLz5cbiAgICAgICAgICAgIDxoMz5TZXR0aW5nczwvaDM+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8Qm90dG9tTmF2IGxvY2F0aW9uPXtjdXJyZW50TGlzdH0gLz5cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9jb21wb25lbnRzL25hdmlnYXRpb24vbWVudS5qc3giLCJpbXBvcnQgaW5pdGlhbFN0YXRlIGZyb20gJy4uLy4uL3N0YXRlJztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlZHVjZShzdGF0ZSwgYWN0aW9uKSB7XG4gICd1c2Ugc3RyaWN0JztcblxuICBpZiAoIXN0YXRlKSB7XG4gICAgcmV0dXJuIGluaXRpYWxTdGF0ZTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgc2VsZWN0TW9kZTogdG9nZ2xlU2VsZWN0aW9uKHN0YXRlLnNlbGVjdGlvbk1vZGUsIGFjdGlvbiksXG4gICAgY3VycmVudFBhdGg6IG5hdmlnYXRlVG8oc3RhdGUuY3VycmVudFBhdGgsIGFjdGlvbiksXG4gICAgZmlsZXN5c3RlbTogc3RhdGUuZmlsZXN5c3RlbVxuICB9O1xufVxuXG5mdW5jdGlvbiB0b2dnbGVTZWxlY3Rpb24oc3RhdGUsIGFjdGlvbikge1xuICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gICAgY2FzZSAnc3RhcnQtc2VsZWN0aW9uJzpcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIGNhc2UgJ2NhbmNlbC1zZWxlY3Rpb24nOlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlO1xufVxuXG5mdW5jdGlvbiBuYXZpZ2F0ZVRvKHN0YXRlLCBhY3Rpb24pIHtcbiAgcmV0dXJuIGFjdGlvbi50eXBlID09PSAnbmF2aWdhdGUtdG8nID8gYWN0aW9uLnBheWxvYWQucGF0aCA6IHN0YXRlO1xufVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3JlZHVjZXJzL21haW4uanMiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgX2Fzc2lnbiA9IHJlcXVpcmUoJ29iamVjdC1hc3NpZ24nKTtcblxudmFyIGVtcHR5T2JqZWN0ID0gcmVxdWlyZSgnZmJqcy9saWIvZW1wdHlPYmplY3QnKTtcbnZhciBfaW52YXJpYW50ID0gcmVxdWlyZSgnZmJqcy9saWIvaW52YXJpYW50Jyk7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHZhciB3YXJuaW5nID0gcmVxdWlyZSgnZmJqcy9saWIvd2FybmluZycpO1xufVxuXG52YXIgTUlYSU5TX0tFWSA9ICdtaXhpbnMnO1xuXG4vLyBIZWxwZXIgZnVuY3Rpb24gdG8gYWxsb3cgdGhlIGNyZWF0aW9uIG9mIGFub255bW91cyBmdW5jdGlvbnMgd2hpY2ggZG8gbm90XG4vLyBoYXZlIC5uYW1lIHNldCB0byB0aGUgbmFtZSBvZiB0aGUgdmFyaWFibGUgYmVpbmcgYXNzaWduZWQgdG8uXG5mdW5jdGlvbiBpZGVudGl0eShmbikge1xuICByZXR1cm4gZm47XG59XG5cbnZhciBSZWFjdFByb3BUeXBlTG9jYXRpb25OYW1lcztcbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIFJlYWN0UHJvcFR5cGVMb2NhdGlvbk5hbWVzID0ge1xuICAgIHByb3A6ICdwcm9wJyxcbiAgICBjb250ZXh0OiAnY29udGV4dCcsXG4gICAgY2hpbGRDb250ZXh0OiAnY2hpbGQgY29udGV4dCdcbiAgfTtcbn0gZWxzZSB7XG4gIFJlYWN0UHJvcFR5cGVMb2NhdGlvbk5hbWVzID0ge307XG59XG5cbmZ1bmN0aW9uIGZhY3RvcnkoUmVhY3RDb21wb25lbnQsIGlzVmFsaWRFbGVtZW50LCBSZWFjdE5vb3BVcGRhdGVRdWV1ZSkge1xuICAvKipcbiAgICogUG9saWNpZXMgdGhhdCBkZXNjcmliZSBtZXRob2RzIGluIGBSZWFjdENsYXNzSW50ZXJmYWNlYC5cbiAgICovXG5cbiAgdmFyIGluamVjdGVkTWl4aW5zID0gW107XG5cbiAgLyoqXG4gICAqIENvbXBvc2l0ZSBjb21wb25lbnRzIGFyZSBoaWdoZXItbGV2ZWwgY29tcG9uZW50cyB0aGF0IGNvbXBvc2Ugb3RoZXIgY29tcG9zaXRlXG4gICAqIG9yIGhvc3QgY29tcG9uZW50cy5cbiAgICpcbiAgICogVG8gY3JlYXRlIGEgbmV3IHR5cGUgb2YgYFJlYWN0Q2xhc3NgLCBwYXNzIGEgc3BlY2lmaWNhdGlvbiBvZlxuICAgKiB5b3VyIG5ldyBjbGFzcyB0byBgUmVhY3QuY3JlYXRlQ2xhc3NgLiBUaGUgb25seSByZXF1aXJlbWVudCBvZiB5b3VyIGNsYXNzXG4gICAqIHNwZWNpZmljYXRpb24gaXMgdGhhdCB5b3UgaW1wbGVtZW50IGEgYHJlbmRlcmAgbWV0aG9kLlxuICAgKlxuICAgKiAgIHZhciBNeUNvbXBvbmVudCA9IFJlYWN0LmNyZWF0ZUNsYXNzKHtcbiAgICogICAgIHJlbmRlcjogZnVuY3Rpb24oKSB7XG4gICAqICAgICAgIHJldHVybiA8ZGl2PkhlbGxvIFdvcmxkPC9kaXY+O1xuICAgKiAgICAgfVxuICAgKiAgIH0pO1xuICAgKlxuICAgKiBUaGUgY2xhc3Mgc3BlY2lmaWNhdGlvbiBzdXBwb3J0cyBhIHNwZWNpZmljIHByb3RvY29sIG9mIG1ldGhvZHMgdGhhdCBoYXZlXG4gICAqIHNwZWNpYWwgbWVhbmluZyAoZS5nLiBgcmVuZGVyYCkuIFNlZSBgUmVhY3RDbGFzc0ludGVyZmFjZWAgZm9yXG4gICAqIG1vcmUgdGhlIGNvbXByZWhlbnNpdmUgcHJvdG9jb2wuIEFueSBvdGhlciBwcm9wZXJ0aWVzIGFuZCBtZXRob2RzIGluIHRoZVxuICAgKiBjbGFzcyBzcGVjaWZpY2F0aW9uIHdpbGwgYmUgYXZhaWxhYmxlIG9uIHRoZSBwcm90b3R5cGUuXG4gICAqXG4gICAqIEBpbnRlcmZhY2UgUmVhY3RDbGFzc0ludGVyZmFjZVxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHZhciBSZWFjdENsYXNzSW50ZXJmYWNlID0ge1xuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIE1peGluIG9iamVjdHMgdG8gaW5jbHVkZSB3aGVuIGRlZmluaW5nIHlvdXIgY29tcG9uZW50LlxuICAgICAqXG4gICAgICogQHR5cGUge2FycmF5fVxuICAgICAqIEBvcHRpb25hbFxuICAgICAqL1xuICAgIG1peGluczogJ0RFRklORV9NQU5ZJyxcblxuICAgIC8qKlxuICAgICAqIEFuIG9iamVjdCBjb250YWluaW5nIHByb3BlcnRpZXMgYW5kIG1ldGhvZHMgdGhhdCBzaG91bGQgYmUgZGVmaW5lZCBvblxuICAgICAqIHRoZSBjb21wb25lbnQncyBjb25zdHJ1Y3RvciBpbnN0ZWFkIG9mIGl0cyBwcm90b3R5cGUgKHN0YXRpYyBtZXRob2RzKS5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtvYmplY3R9XG4gICAgICogQG9wdGlvbmFsXG4gICAgICovXG4gICAgc3RhdGljczogJ0RFRklORV9NQU5ZJyxcblxuICAgIC8qKlxuICAgICAqIERlZmluaXRpb24gb2YgcHJvcCB0eXBlcyBmb3IgdGhpcyBjb21wb25lbnQuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7b2JqZWN0fVxuICAgICAqIEBvcHRpb25hbFxuICAgICAqL1xuICAgIHByb3BUeXBlczogJ0RFRklORV9NQU5ZJyxcblxuICAgIC8qKlxuICAgICAqIERlZmluaXRpb24gb2YgY29udGV4dCB0eXBlcyBmb3IgdGhpcyBjb21wb25lbnQuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7b2JqZWN0fVxuICAgICAqIEBvcHRpb25hbFxuICAgICAqL1xuICAgIGNvbnRleHRUeXBlczogJ0RFRklORV9NQU5ZJyxcblxuICAgIC8qKlxuICAgICAqIERlZmluaXRpb24gb2YgY29udGV4dCB0eXBlcyB0aGlzIGNvbXBvbmVudCBzZXRzIGZvciBpdHMgY2hpbGRyZW4uXG4gICAgICpcbiAgICAgKiBAdHlwZSB7b2JqZWN0fVxuICAgICAqIEBvcHRpb25hbFxuICAgICAqL1xuICAgIGNoaWxkQ29udGV4dFR5cGVzOiAnREVGSU5FX01BTlknLFxuXG4gICAgLy8gPT09PSBEZWZpbml0aW9uIG1ldGhvZHMgPT09PVxuXG4gICAgLyoqXG4gICAgICogSW52b2tlZCB3aGVuIHRoZSBjb21wb25lbnQgaXMgbW91bnRlZC4gVmFsdWVzIGluIHRoZSBtYXBwaW5nIHdpbGwgYmUgc2V0IG9uXG4gICAgICogYHRoaXMucHJvcHNgIGlmIHRoYXQgcHJvcCBpcyBub3Qgc3BlY2lmaWVkIChpLmUuIHVzaW5nIGFuIGBpbmAgY2hlY2spLlxuICAgICAqXG4gICAgICogVGhpcyBtZXRob2QgaXMgaW52b2tlZCBiZWZvcmUgYGdldEluaXRpYWxTdGF0ZWAgYW5kIHRoZXJlZm9yZSBjYW5ub3QgcmVseVxuICAgICAqIG9uIGB0aGlzLnN0YXRlYCBvciB1c2UgYHRoaXMuc2V0U3RhdGVgLlxuICAgICAqXG4gICAgICogQHJldHVybiB7b2JqZWN0fVxuICAgICAqIEBvcHRpb25hbFxuICAgICAqL1xuICAgIGdldERlZmF1bHRQcm9wczogJ0RFRklORV9NQU5ZX01FUkdFRCcsXG5cbiAgICAvKipcbiAgICAgKiBJbnZva2VkIG9uY2UgYmVmb3JlIHRoZSBjb21wb25lbnQgaXMgbW91bnRlZC4gVGhlIHJldHVybiB2YWx1ZSB3aWxsIGJlIHVzZWRcbiAgICAgKiBhcyB0aGUgaW5pdGlhbCB2YWx1ZSBvZiBgdGhpcy5zdGF0ZWAuXG4gICAgICpcbiAgICAgKiAgIGdldEluaXRpYWxTdGF0ZTogZnVuY3Rpb24oKSB7XG4gICAgICogICAgIHJldHVybiB7XG4gICAgICogICAgICAgaXNPbjogZmFsc2UsXG4gICAgICogICAgICAgZm9vQmF6OiBuZXcgQmF6Rm9vKClcbiAgICAgKiAgICAgfVxuICAgICAqICAgfVxuICAgICAqXG4gICAgICogQHJldHVybiB7b2JqZWN0fVxuICAgICAqIEBvcHRpb25hbFxuICAgICAqL1xuICAgIGdldEluaXRpYWxTdGF0ZTogJ0RFRklORV9NQU5ZX01FUkdFRCcsXG5cbiAgICAvKipcbiAgICAgKiBAcmV0dXJuIHtvYmplY3R9XG4gICAgICogQG9wdGlvbmFsXG4gICAgICovXG4gICAgZ2V0Q2hpbGRDb250ZXh0OiAnREVGSU5FX01BTllfTUVSR0VEJyxcblxuICAgIC8qKlxuICAgICAqIFVzZXMgcHJvcHMgZnJvbSBgdGhpcy5wcm9wc2AgYW5kIHN0YXRlIGZyb20gYHRoaXMuc3RhdGVgIHRvIHJlbmRlciB0aGVcbiAgICAgKiBzdHJ1Y3R1cmUgb2YgdGhlIGNvbXBvbmVudC5cbiAgICAgKlxuICAgICAqIE5vIGd1YXJhbnRlZXMgYXJlIG1hZGUgYWJvdXQgd2hlbiBvciBob3cgb2Z0ZW4gdGhpcyBtZXRob2QgaXMgaW52b2tlZCwgc29cbiAgICAgKiBpdCBtdXN0IG5vdCBoYXZlIHNpZGUgZWZmZWN0cy5cbiAgICAgKlxuICAgICAqICAgcmVuZGVyOiBmdW5jdGlvbigpIHtcbiAgICAgKiAgICAgdmFyIG5hbWUgPSB0aGlzLnByb3BzLm5hbWU7XG4gICAgICogICAgIHJldHVybiA8ZGl2PkhlbGxvLCB7bmFtZX0hPC9kaXY+O1xuICAgICAqICAgfVxuICAgICAqXG4gICAgICogQHJldHVybiB7UmVhY3RDb21wb25lbnR9XG4gICAgICogQHJlcXVpcmVkXG4gICAgICovXG4gICAgcmVuZGVyOiAnREVGSU5FX09OQ0UnLFxuXG4gICAgLy8gPT09PSBEZWxlZ2F0ZSBtZXRob2RzID09PT1cblxuICAgIC8qKlxuICAgICAqIEludm9rZWQgd2hlbiB0aGUgY29tcG9uZW50IGlzIGluaXRpYWxseSBjcmVhdGVkIGFuZCBhYm91dCB0byBiZSBtb3VudGVkLlxuICAgICAqIFRoaXMgbWF5IGhhdmUgc2lkZSBlZmZlY3RzLCBidXQgYW55IGV4dGVybmFsIHN1YnNjcmlwdGlvbnMgb3IgZGF0YSBjcmVhdGVkXG4gICAgICogYnkgdGhpcyBtZXRob2QgbXVzdCBiZSBjbGVhbmVkIHVwIGluIGBjb21wb25lbnRXaWxsVW5tb3VudGAuXG4gICAgICpcbiAgICAgKiBAb3B0aW9uYWxcbiAgICAgKi9cbiAgICBjb21wb25lbnRXaWxsTW91bnQ6ICdERUZJTkVfTUFOWScsXG5cbiAgICAvKipcbiAgICAgKiBJbnZva2VkIHdoZW4gdGhlIGNvbXBvbmVudCBoYXMgYmVlbiBtb3VudGVkIGFuZCBoYXMgYSBET00gcmVwcmVzZW50YXRpb24uXG4gICAgICogSG93ZXZlciwgdGhlcmUgaXMgbm8gZ3VhcmFudGVlIHRoYXQgdGhlIERPTSBub2RlIGlzIGluIHRoZSBkb2N1bWVudC5cbiAgICAgKlxuICAgICAqIFVzZSB0aGlzIGFzIGFuIG9wcG9ydHVuaXR5IHRvIG9wZXJhdGUgb24gdGhlIERPTSB3aGVuIHRoZSBjb21wb25lbnQgaGFzXG4gICAgICogYmVlbiBtb3VudGVkIChpbml0aWFsaXplZCBhbmQgcmVuZGVyZWQpIGZvciB0aGUgZmlyc3QgdGltZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7RE9NRWxlbWVudH0gcm9vdE5vZGUgRE9NIGVsZW1lbnQgcmVwcmVzZW50aW5nIHRoZSBjb21wb25lbnQuXG4gICAgICogQG9wdGlvbmFsXG4gICAgICovXG4gICAgY29tcG9uZW50RGlkTW91bnQ6ICdERUZJTkVfTUFOWScsXG5cbiAgICAvKipcbiAgICAgKiBJbnZva2VkIGJlZm9yZSB0aGUgY29tcG9uZW50IHJlY2VpdmVzIG5ldyBwcm9wcy5cbiAgICAgKlxuICAgICAqIFVzZSB0aGlzIGFzIGFuIG9wcG9ydHVuaXR5IHRvIHJlYWN0IHRvIGEgcHJvcCB0cmFuc2l0aW9uIGJ5IHVwZGF0aW5nIHRoZVxuICAgICAqIHN0YXRlIHVzaW5nIGB0aGlzLnNldFN0YXRlYC4gQ3VycmVudCBwcm9wcyBhcmUgYWNjZXNzZWQgdmlhIGB0aGlzLnByb3BzYC5cbiAgICAgKlxuICAgICAqICAgY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wczogZnVuY3Rpb24obmV4dFByb3BzLCBuZXh0Q29udGV4dCkge1xuICAgICAqICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgKiAgICAgICBsaWtlc0luY3JlYXNpbmc6IG5leHRQcm9wcy5saWtlQ291bnQgPiB0aGlzLnByb3BzLmxpa2VDb3VudFxuICAgICAqICAgICB9KTtcbiAgICAgKiAgIH1cbiAgICAgKlxuICAgICAqIE5PVEU6IFRoZXJlIGlzIG5vIGVxdWl2YWxlbnQgYGNvbXBvbmVudFdpbGxSZWNlaXZlU3RhdGVgLiBBbiBpbmNvbWluZyBwcm9wXG4gICAgICogdHJhbnNpdGlvbiBtYXkgY2F1c2UgYSBzdGF0ZSBjaGFuZ2UsIGJ1dCB0aGUgb3Bwb3NpdGUgaXMgbm90IHRydWUuIElmIHlvdVxuICAgICAqIG5lZWQgaXQsIHlvdSBhcmUgcHJvYmFibHkgbG9va2luZyBmb3IgYGNvbXBvbmVudFdpbGxVcGRhdGVgLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtvYmplY3R9IG5leHRQcm9wc1xuICAgICAqIEBvcHRpb25hbFxuICAgICAqL1xuICAgIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHM6ICdERUZJTkVfTUFOWScsXG5cbiAgICAvKipcbiAgICAgKiBJbnZva2VkIHdoaWxlIGRlY2lkaW5nIGlmIHRoZSBjb21wb25lbnQgc2hvdWxkIGJlIHVwZGF0ZWQgYXMgYSByZXN1bHQgb2ZcbiAgICAgKiByZWNlaXZpbmcgbmV3IHByb3BzLCBzdGF0ZSBhbmQvb3IgY29udGV4dC5cbiAgICAgKlxuICAgICAqIFVzZSB0aGlzIGFzIGFuIG9wcG9ydHVuaXR5IHRvIGByZXR1cm4gZmFsc2VgIHdoZW4geW91J3JlIGNlcnRhaW4gdGhhdCB0aGVcbiAgICAgKiB0cmFuc2l0aW9uIHRvIHRoZSBuZXcgcHJvcHMvc3RhdGUvY29udGV4dCB3aWxsIG5vdCByZXF1aXJlIGEgY29tcG9uZW50XG4gICAgICogdXBkYXRlLlxuICAgICAqXG4gICAgICogICBzaG91bGRDb21wb25lbnRVcGRhdGU6IGZ1bmN0aW9uKG5leHRQcm9wcywgbmV4dFN0YXRlLCBuZXh0Q29udGV4dCkge1xuICAgICAqICAgICByZXR1cm4gIWVxdWFsKG5leHRQcm9wcywgdGhpcy5wcm9wcykgfHxcbiAgICAgKiAgICAgICAhZXF1YWwobmV4dFN0YXRlLCB0aGlzLnN0YXRlKSB8fFxuICAgICAqICAgICAgICFlcXVhbChuZXh0Q29udGV4dCwgdGhpcy5jb250ZXh0KTtcbiAgICAgKiAgIH1cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBuZXh0UHJvcHNcbiAgICAgKiBAcGFyYW0gez9vYmplY3R9IG5leHRTdGF0ZVxuICAgICAqIEBwYXJhbSB7P29iamVjdH0gbmV4dENvbnRleHRcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHRoZSBjb21wb25lbnQgc2hvdWxkIHVwZGF0ZS5cbiAgICAgKiBAb3B0aW9uYWxcbiAgICAgKi9cbiAgICBzaG91bGRDb21wb25lbnRVcGRhdGU6ICdERUZJTkVfT05DRScsXG5cbiAgICAvKipcbiAgICAgKiBJbnZva2VkIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBhYm91dCB0byB1cGRhdGUgZHVlIHRvIGEgdHJhbnNpdGlvbiBmcm9tXG4gICAgICogYHRoaXMucHJvcHNgLCBgdGhpcy5zdGF0ZWAgYW5kIGB0aGlzLmNvbnRleHRgIHRvIGBuZXh0UHJvcHNgLCBgbmV4dFN0YXRlYFxuICAgICAqIGFuZCBgbmV4dENvbnRleHRgLlxuICAgICAqXG4gICAgICogVXNlIHRoaXMgYXMgYW4gb3Bwb3J0dW5pdHkgdG8gcGVyZm9ybSBwcmVwYXJhdGlvbiBiZWZvcmUgYW4gdXBkYXRlIG9jY3Vycy5cbiAgICAgKlxuICAgICAqIE5PVEU6IFlvdSAqKmNhbm5vdCoqIHVzZSBgdGhpcy5zZXRTdGF0ZSgpYCBpbiB0aGlzIG1ldGhvZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBuZXh0UHJvcHNcbiAgICAgKiBAcGFyYW0gez9vYmplY3R9IG5leHRTdGF0ZVxuICAgICAqIEBwYXJhbSB7P29iamVjdH0gbmV4dENvbnRleHRcbiAgICAgKiBAcGFyYW0ge1JlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb259IHRyYW5zYWN0aW9uXG4gICAgICogQG9wdGlvbmFsXG4gICAgICovXG4gICAgY29tcG9uZW50V2lsbFVwZGF0ZTogJ0RFRklORV9NQU5ZJyxcblxuICAgIC8qKlxuICAgICAqIEludm9rZWQgd2hlbiB0aGUgY29tcG9uZW50J3MgRE9NIHJlcHJlc2VudGF0aW9uIGhhcyBiZWVuIHVwZGF0ZWQuXG4gICAgICpcbiAgICAgKiBVc2UgdGhpcyBhcyBhbiBvcHBvcnR1bml0eSB0byBvcGVyYXRlIG9uIHRoZSBET00gd2hlbiB0aGUgY29tcG9uZW50IGhhc1xuICAgICAqIGJlZW4gdXBkYXRlZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBwcmV2UHJvcHNcbiAgICAgKiBAcGFyYW0gez9vYmplY3R9IHByZXZTdGF0ZVxuICAgICAqIEBwYXJhbSB7P29iamVjdH0gcHJldkNvbnRleHRcbiAgICAgKiBAcGFyYW0ge0RPTUVsZW1lbnR9IHJvb3ROb2RlIERPTSBlbGVtZW50IHJlcHJlc2VudGluZyB0aGUgY29tcG9uZW50LlxuICAgICAqIEBvcHRpb25hbFxuICAgICAqL1xuICAgIGNvbXBvbmVudERpZFVwZGF0ZTogJ0RFRklORV9NQU5ZJyxcblxuICAgIC8qKlxuICAgICAqIEludm9rZWQgd2hlbiB0aGUgY29tcG9uZW50IGlzIGFib3V0IHRvIGJlIHJlbW92ZWQgZnJvbSBpdHMgcGFyZW50IGFuZCBoYXZlXG4gICAgICogaXRzIERPTSByZXByZXNlbnRhdGlvbiBkZXN0cm95ZWQuXG4gICAgICpcbiAgICAgKiBVc2UgdGhpcyBhcyBhbiBvcHBvcnR1bml0eSB0byBkZWFsbG9jYXRlIGFueSBleHRlcm5hbCByZXNvdXJjZXMuXG4gICAgICpcbiAgICAgKiBOT1RFOiBUaGVyZSBpcyBubyBgY29tcG9uZW50RGlkVW5tb3VudGAgc2luY2UgeW91ciBjb21wb25lbnQgd2lsbCBoYXZlIGJlZW5cbiAgICAgKiBkZXN0cm95ZWQgYnkgdGhhdCBwb2ludC5cbiAgICAgKlxuICAgICAqIEBvcHRpb25hbFxuICAgICAqL1xuICAgIGNvbXBvbmVudFdpbGxVbm1vdW50OiAnREVGSU5FX01BTlknLFxuXG4gICAgLy8gPT09PSBBZHZhbmNlZCBtZXRob2RzID09PT1cblxuICAgIC8qKlxuICAgICAqIFVwZGF0ZXMgdGhlIGNvbXBvbmVudCdzIGN1cnJlbnRseSBtb3VudGVkIERPTSByZXByZXNlbnRhdGlvbi5cbiAgICAgKlxuICAgICAqIEJ5IGRlZmF1bHQsIHRoaXMgaW1wbGVtZW50cyBSZWFjdCdzIHJlbmRlcmluZyBhbmQgcmVjb25jaWxpYXRpb24gYWxnb3JpdGhtLlxuICAgICAqIFNvcGhpc3RpY2F0ZWQgY2xpZW50cyBtYXkgd2lzaCB0byBvdmVycmlkZSB0aGlzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtSZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9ufSB0cmFuc2FjdGlvblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqIEBvdmVycmlkYWJsZVxuICAgICAqL1xuICAgIHVwZGF0ZUNvbXBvbmVudDogJ09WRVJSSURFX0JBU0UnXG4gIH07XG5cbiAgLyoqXG4gICAqIE1hcHBpbmcgZnJvbSBjbGFzcyBzcGVjaWZpY2F0aW9uIGtleXMgdG8gc3BlY2lhbCBwcm9jZXNzaW5nIGZ1bmN0aW9ucy5cbiAgICpcbiAgICogQWx0aG91Z2ggdGhlc2UgYXJlIGRlY2xhcmVkIGxpa2UgaW5zdGFuY2UgcHJvcGVydGllcyBpbiB0aGUgc3BlY2lmaWNhdGlvblxuICAgKiB3aGVuIGRlZmluaW5nIGNsYXNzZXMgdXNpbmcgYFJlYWN0LmNyZWF0ZUNsYXNzYCwgdGhleSBhcmUgYWN0dWFsbHkgc3RhdGljXG4gICAqIGFuZCBhcmUgYWNjZXNzaWJsZSBvbiB0aGUgY29uc3RydWN0b3IgaW5zdGVhZCBvZiB0aGUgcHJvdG90eXBlLiBEZXNwaXRlXG4gICAqIGJlaW5nIHN0YXRpYywgdGhleSBtdXN0IGJlIGRlZmluZWQgb3V0c2lkZSBvZiB0aGUgXCJzdGF0aWNzXCIga2V5IHVuZGVyXG4gICAqIHdoaWNoIGFsbCBvdGhlciBzdGF0aWMgbWV0aG9kcyBhcmUgZGVmaW5lZC5cbiAgICovXG4gIHZhciBSRVNFUlZFRF9TUEVDX0tFWVMgPSB7XG4gICAgZGlzcGxheU5hbWU6IGZ1bmN0aW9uKENvbnN0cnVjdG9yLCBkaXNwbGF5TmFtZSkge1xuICAgICAgQ29uc3RydWN0b3IuZGlzcGxheU5hbWUgPSBkaXNwbGF5TmFtZTtcbiAgICB9LFxuICAgIG1peGluczogZnVuY3Rpb24oQ29uc3RydWN0b3IsIG1peGlucykge1xuICAgICAgaWYgKG1peGlucykge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1peGlucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIG1peFNwZWNJbnRvQ29tcG9uZW50KENvbnN0cnVjdG9yLCBtaXhpbnNbaV0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBjaGlsZENvbnRleHRUeXBlczogZnVuY3Rpb24oQ29uc3RydWN0b3IsIGNoaWxkQ29udGV4dFR5cGVzKSB7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICB2YWxpZGF0ZVR5cGVEZWYoQ29uc3RydWN0b3IsIGNoaWxkQ29udGV4dFR5cGVzLCAnY2hpbGRDb250ZXh0Jyk7XG4gICAgICB9XG4gICAgICBDb25zdHJ1Y3Rvci5jaGlsZENvbnRleHRUeXBlcyA9IF9hc3NpZ24oXG4gICAgICAgIHt9LFxuICAgICAgICBDb25zdHJ1Y3Rvci5jaGlsZENvbnRleHRUeXBlcyxcbiAgICAgICAgY2hpbGRDb250ZXh0VHlwZXNcbiAgICAgICk7XG4gICAgfSxcbiAgICBjb250ZXh0VHlwZXM6IGZ1bmN0aW9uKENvbnN0cnVjdG9yLCBjb250ZXh0VHlwZXMpIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIHZhbGlkYXRlVHlwZURlZihDb25zdHJ1Y3RvciwgY29udGV4dFR5cGVzLCAnY29udGV4dCcpO1xuICAgICAgfVxuICAgICAgQ29uc3RydWN0b3IuY29udGV4dFR5cGVzID0gX2Fzc2lnbihcbiAgICAgICAge30sXG4gICAgICAgIENvbnN0cnVjdG9yLmNvbnRleHRUeXBlcyxcbiAgICAgICAgY29udGV4dFR5cGVzXG4gICAgICApO1xuICAgIH0sXG4gICAgLyoqXG4gICAgICogU3BlY2lhbCBjYXNlIGdldERlZmF1bHRQcm9wcyB3aGljaCBzaG91bGQgbW92ZSBpbnRvIHN0YXRpY3MgYnV0IHJlcXVpcmVzXG4gICAgICogYXV0b21hdGljIG1lcmdpbmcuXG4gICAgICovXG4gICAgZ2V0RGVmYXVsdFByb3BzOiBmdW5jdGlvbihDb25zdHJ1Y3RvciwgZ2V0RGVmYXVsdFByb3BzKSB7XG4gICAgICBpZiAoQ29uc3RydWN0b3IuZ2V0RGVmYXVsdFByb3BzKSB7XG4gICAgICAgIENvbnN0cnVjdG9yLmdldERlZmF1bHRQcm9wcyA9IGNyZWF0ZU1lcmdlZFJlc3VsdEZ1bmN0aW9uKFxuICAgICAgICAgIENvbnN0cnVjdG9yLmdldERlZmF1bHRQcm9wcyxcbiAgICAgICAgICBnZXREZWZhdWx0UHJvcHNcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIENvbnN0cnVjdG9yLmdldERlZmF1bHRQcm9wcyA9IGdldERlZmF1bHRQcm9wcztcbiAgICAgIH1cbiAgICB9LFxuICAgIHByb3BUeXBlczogZnVuY3Rpb24oQ29uc3RydWN0b3IsIHByb3BUeXBlcykge1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgdmFsaWRhdGVUeXBlRGVmKENvbnN0cnVjdG9yLCBwcm9wVHlwZXMsICdwcm9wJyk7XG4gICAgICB9XG4gICAgICBDb25zdHJ1Y3Rvci5wcm9wVHlwZXMgPSBfYXNzaWduKHt9LCBDb25zdHJ1Y3Rvci5wcm9wVHlwZXMsIHByb3BUeXBlcyk7XG4gICAgfSxcbiAgICBzdGF0aWNzOiBmdW5jdGlvbihDb25zdHJ1Y3Rvciwgc3RhdGljcykge1xuICAgICAgbWl4U3RhdGljU3BlY0ludG9Db21wb25lbnQoQ29uc3RydWN0b3IsIHN0YXRpY3MpO1xuICAgIH0sXG4gICAgYXV0b2JpbmQ6IGZ1bmN0aW9uKCkge31cbiAgfTtcblxuICBmdW5jdGlvbiB2YWxpZGF0ZVR5cGVEZWYoQ29uc3RydWN0b3IsIHR5cGVEZWYsIGxvY2F0aW9uKSB7XG4gICAgZm9yICh2YXIgcHJvcE5hbWUgaW4gdHlwZURlZikge1xuICAgICAgaWYgKHR5cGVEZWYuaGFzT3duUHJvcGVydHkocHJvcE5hbWUpKSB7XG4gICAgICAgIC8vIHVzZSBhIHdhcm5pbmcgaW5zdGVhZCBvZiBhbiBfaW52YXJpYW50IHNvIGNvbXBvbmVudHNcbiAgICAgICAgLy8gZG9uJ3Qgc2hvdyB1cCBpbiBwcm9kIGJ1dCBvbmx5IGluIF9fREVWX19cbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICB3YXJuaW5nKFxuICAgICAgICAgICAgdHlwZW9mIHR5cGVEZWZbcHJvcE5hbWVdID09PSAnZnVuY3Rpb24nLFxuICAgICAgICAgICAgJyVzOiAlcyB0eXBlIGAlc2AgaXMgaW52YWxpZDsgaXQgbXVzdCBiZSBhIGZ1bmN0aW9uLCB1c3VhbGx5IGZyb20gJyArXG4gICAgICAgICAgICAgICdSZWFjdC5Qcm9wVHlwZXMuJyxcbiAgICAgICAgICAgIENvbnN0cnVjdG9yLmRpc3BsYXlOYW1lIHx8ICdSZWFjdENsYXNzJyxcbiAgICAgICAgICAgIFJlYWN0UHJvcFR5cGVMb2NhdGlvbk5hbWVzW2xvY2F0aW9uXSxcbiAgICAgICAgICAgIHByb3BOYW1lXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHZhbGlkYXRlTWV0aG9kT3ZlcnJpZGUoaXNBbHJlYWR5RGVmaW5lZCwgbmFtZSkge1xuICAgIHZhciBzcGVjUG9saWN5ID0gUmVhY3RDbGFzc0ludGVyZmFjZS5oYXNPd25Qcm9wZXJ0eShuYW1lKVxuICAgICAgPyBSZWFjdENsYXNzSW50ZXJmYWNlW25hbWVdXG4gICAgICA6IG51bGw7XG5cbiAgICAvLyBEaXNhbGxvdyBvdmVycmlkaW5nIG9mIGJhc2UgY2xhc3MgbWV0aG9kcyB1bmxlc3MgZXhwbGljaXRseSBhbGxvd2VkLlxuICAgIGlmIChSZWFjdENsYXNzTWl4aW4uaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgIF9pbnZhcmlhbnQoXG4gICAgICAgIHNwZWNQb2xpY3kgPT09ICdPVkVSUklERV9CQVNFJyxcbiAgICAgICAgJ1JlYWN0Q2xhc3NJbnRlcmZhY2U6IFlvdSBhcmUgYXR0ZW1wdGluZyB0byBvdmVycmlkZSAnICtcbiAgICAgICAgICAnYCVzYCBmcm9tIHlvdXIgY2xhc3Mgc3BlY2lmaWNhdGlvbi4gRW5zdXJlIHRoYXQgeW91ciBtZXRob2QgbmFtZXMgJyArXG4gICAgICAgICAgJ2RvIG5vdCBvdmVybGFwIHdpdGggUmVhY3QgbWV0aG9kcy4nLFxuICAgICAgICBuYW1lXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIERpc2FsbG93IGRlZmluaW5nIG1ldGhvZHMgbW9yZSB0aGFuIG9uY2UgdW5sZXNzIGV4cGxpY2l0bHkgYWxsb3dlZC5cbiAgICBpZiAoaXNBbHJlYWR5RGVmaW5lZCkge1xuICAgICAgX2ludmFyaWFudChcbiAgICAgICAgc3BlY1BvbGljeSA9PT0gJ0RFRklORV9NQU5ZJyB8fCBzcGVjUG9saWN5ID09PSAnREVGSU5FX01BTllfTUVSR0VEJyxcbiAgICAgICAgJ1JlYWN0Q2xhc3NJbnRlcmZhY2U6IFlvdSBhcmUgYXR0ZW1wdGluZyB0byBkZWZpbmUgJyArXG4gICAgICAgICAgJ2Alc2Agb24geW91ciBjb21wb25lbnQgbW9yZSB0aGFuIG9uY2UuIFRoaXMgY29uZmxpY3QgbWF5IGJlIGR1ZSAnICtcbiAgICAgICAgICAndG8gYSBtaXhpbi4nLFxuICAgICAgICBuYW1lXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBNaXhpbiBoZWxwZXIgd2hpY2ggaGFuZGxlcyBwb2xpY3kgdmFsaWRhdGlvbiBhbmQgcmVzZXJ2ZWRcbiAgICogc3BlY2lmaWNhdGlvbiBrZXlzIHdoZW4gYnVpbGRpbmcgUmVhY3QgY2xhc3Nlcy5cbiAgICovXG4gIGZ1bmN0aW9uIG1peFNwZWNJbnRvQ29tcG9uZW50KENvbnN0cnVjdG9yLCBzcGVjKSB7XG4gICAgaWYgKCFzcGVjKSB7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICB2YXIgdHlwZW9mU3BlYyA9IHR5cGVvZiBzcGVjO1xuICAgICAgICB2YXIgaXNNaXhpblZhbGlkID0gdHlwZW9mU3BlYyA9PT0gJ29iamVjdCcgJiYgc3BlYyAhPT0gbnVsbDtcblxuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgIHdhcm5pbmcoXG4gICAgICAgICAgICBpc01peGluVmFsaWQsXG4gICAgICAgICAgICBcIiVzOiBZb3UncmUgYXR0ZW1wdGluZyB0byBpbmNsdWRlIGEgbWl4aW4gdGhhdCBpcyBlaXRoZXIgbnVsbCBcIiArXG4gICAgICAgICAgICAgICdvciBub3QgYW4gb2JqZWN0LiBDaGVjayB0aGUgbWl4aW5zIGluY2x1ZGVkIGJ5IHRoZSBjb21wb25lbnQsICcgK1xuICAgICAgICAgICAgICAnYXMgd2VsbCBhcyBhbnkgbWl4aW5zIHRoZXkgaW5jbHVkZSB0aGVtc2VsdmVzLiAnICtcbiAgICAgICAgICAgICAgJ0V4cGVjdGVkIG9iamVjdCBidXQgZ290ICVzLicsXG4gICAgICAgICAgICBDb25zdHJ1Y3Rvci5kaXNwbGF5TmFtZSB8fCAnUmVhY3RDbGFzcycsXG4gICAgICAgICAgICBzcGVjID09PSBudWxsID8gbnVsbCA6IHR5cGVvZlNwZWNcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBfaW52YXJpYW50KFxuICAgICAgdHlwZW9mIHNwZWMgIT09ICdmdW5jdGlvbicsXG4gICAgICBcIlJlYWN0Q2xhc3M6IFlvdSdyZSBhdHRlbXB0aW5nIHRvIFwiICtcbiAgICAgICAgJ3VzZSBhIGNvbXBvbmVudCBjbGFzcyBvciBmdW5jdGlvbiBhcyBhIG1peGluLiBJbnN0ZWFkLCBqdXN0IHVzZSBhICcgK1xuICAgICAgICAncmVndWxhciBvYmplY3QuJ1xuICAgICk7XG4gICAgX2ludmFyaWFudChcbiAgICAgICFpc1ZhbGlkRWxlbWVudChzcGVjKSxcbiAgICAgIFwiUmVhY3RDbGFzczogWW91J3JlIGF0dGVtcHRpbmcgdG8gXCIgK1xuICAgICAgICAndXNlIGEgY29tcG9uZW50IGFzIGEgbWl4aW4uIEluc3RlYWQsIGp1c3QgdXNlIGEgcmVndWxhciBvYmplY3QuJ1xuICAgICk7XG5cbiAgICB2YXIgcHJvdG8gPSBDb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG4gICAgdmFyIGF1dG9CaW5kUGFpcnMgPSBwcm90by5fX3JlYWN0QXV0b0JpbmRQYWlycztcblxuICAgIC8vIEJ5IGhhbmRsaW5nIG1peGlucyBiZWZvcmUgYW55IG90aGVyIHByb3BlcnRpZXMsIHdlIGVuc3VyZSB0aGUgc2FtZVxuICAgIC8vIGNoYWluaW5nIG9yZGVyIGlzIGFwcGxpZWQgdG8gbWV0aG9kcyB3aXRoIERFRklORV9NQU5ZIHBvbGljeSwgd2hldGhlclxuICAgIC8vIG1peGlucyBhcmUgbGlzdGVkIGJlZm9yZSBvciBhZnRlciB0aGVzZSBtZXRob2RzIGluIHRoZSBzcGVjLlxuICAgIGlmIChzcGVjLmhhc093blByb3BlcnR5KE1JWElOU19LRVkpKSB7XG4gICAgICBSRVNFUlZFRF9TUEVDX0tFWVMubWl4aW5zKENvbnN0cnVjdG9yLCBzcGVjLm1peGlucyk7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgbmFtZSBpbiBzcGVjKSB7XG4gICAgICBpZiAoIXNwZWMuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChuYW1lID09PSBNSVhJTlNfS0VZKSB7XG4gICAgICAgIC8vIFdlIGhhdmUgYWxyZWFkeSBoYW5kbGVkIG1peGlucyBpbiBhIHNwZWNpYWwgY2FzZSBhYm92ZS5cbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHZhciBwcm9wZXJ0eSA9IHNwZWNbbmFtZV07XG4gICAgICB2YXIgaXNBbHJlYWR5RGVmaW5lZCA9IHByb3RvLmhhc093blByb3BlcnR5KG5hbWUpO1xuICAgICAgdmFsaWRhdGVNZXRob2RPdmVycmlkZShpc0FscmVhZHlEZWZpbmVkLCBuYW1lKTtcblxuICAgICAgaWYgKFJFU0VSVkVEX1NQRUNfS0VZUy5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuICAgICAgICBSRVNFUlZFRF9TUEVDX0tFWVNbbmFtZV0oQ29uc3RydWN0b3IsIHByb3BlcnR5KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFNldHVwIG1ldGhvZHMgb24gcHJvdG90eXBlOlxuICAgICAgICAvLyBUaGUgZm9sbG93aW5nIG1lbWJlciBtZXRob2RzIHNob3VsZCBub3QgYmUgYXV0b21hdGljYWxseSBib3VuZDpcbiAgICAgICAgLy8gMS4gRXhwZWN0ZWQgUmVhY3RDbGFzcyBtZXRob2RzIChpbiB0aGUgXCJpbnRlcmZhY2VcIikuXG4gICAgICAgIC8vIDIuIE92ZXJyaWRkZW4gbWV0aG9kcyAodGhhdCB3ZXJlIG1peGVkIGluKS5cbiAgICAgICAgdmFyIGlzUmVhY3RDbGFzc01ldGhvZCA9IFJlYWN0Q2xhc3NJbnRlcmZhY2UuaGFzT3duUHJvcGVydHkobmFtZSk7XG4gICAgICAgIHZhciBpc0Z1bmN0aW9uID0gdHlwZW9mIHByb3BlcnR5ID09PSAnZnVuY3Rpb24nO1xuICAgICAgICB2YXIgc2hvdWxkQXV0b0JpbmQgPVxuICAgICAgICAgIGlzRnVuY3Rpb24gJiZcbiAgICAgICAgICAhaXNSZWFjdENsYXNzTWV0aG9kICYmXG4gICAgICAgICAgIWlzQWxyZWFkeURlZmluZWQgJiZcbiAgICAgICAgICBzcGVjLmF1dG9iaW5kICE9PSBmYWxzZTtcblxuICAgICAgICBpZiAoc2hvdWxkQXV0b0JpbmQpIHtcbiAgICAgICAgICBhdXRvQmluZFBhaXJzLnB1c2gobmFtZSwgcHJvcGVydHkpO1xuICAgICAgICAgIHByb3RvW25hbWVdID0gcHJvcGVydHk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKGlzQWxyZWFkeURlZmluZWQpIHtcbiAgICAgICAgICAgIHZhciBzcGVjUG9saWN5ID0gUmVhY3RDbGFzc0ludGVyZmFjZVtuYW1lXTtcblxuICAgICAgICAgICAgLy8gVGhlc2UgY2FzZXMgc2hvdWxkIGFscmVhZHkgYmUgY2F1Z2h0IGJ5IHZhbGlkYXRlTWV0aG9kT3ZlcnJpZGUuXG4gICAgICAgICAgICBfaW52YXJpYW50KFxuICAgICAgICAgICAgICBpc1JlYWN0Q2xhc3NNZXRob2QgJiZcbiAgICAgICAgICAgICAgICAoc3BlY1BvbGljeSA9PT0gJ0RFRklORV9NQU5ZX01FUkdFRCcgfHxcbiAgICAgICAgICAgICAgICAgIHNwZWNQb2xpY3kgPT09ICdERUZJTkVfTUFOWScpLFxuICAgICAgICAgICAgICAnUmVhY3RDbGFzczogVW5leHBlY3RlZCBzcGVjIHBvbGljeSAlcyBmb3Iga2V5ICVzICcgK1xuICAgICAgICAgICAgICAgICd3aGVuIG1peGluZyBpbiBjb21wb25lbnQgc3BlY3MuJyxcbiAgICAgICAgICAgICAgc3BlY1BvbGljeSxcbiAgICAgICAgICAgICAgbmFtZVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgLy8gRm9yIG1ldGhvZHMgd2hpY2ggYXJlIGRlZmluZWQgbW9yZSB0aGFuIG9uY2UsIGNhbGwgdGhlIGV4aXN0aW5nXG4gICAgICAgICAgICAvLyBtZXRob2RzIGJlZm9yZSBjYWxsaW5nIHRoZSBuZXcgcHJvcGVydHksIG1lcmdpbmcgaWYgYXBwcm9wcmlhdGUuXG4gICAgICAgICAgICBpZiAoc3BlY1BvbGljeSA9PT0gJ0RFRklORV9NQU5ZX01FUkdFRCcpIHtcbiAgICAgICAgICAgICAgcHJvdG9bbmFtZV0gPSBjcmVhdGVNZXJnZWRSZXN1bHRGdW5jdGlvbihwcm90b1tuYW1lXSwgcHJvcGVydHkpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChzcGVjUG9saWN5ID09PSAnREVGSU5FX01BTlknKSB7XG4gICAgICAgICAgICAgIHByb3RvW25hbWVdID0gY3JlYXRlQ2hhaW5lZEZ1bmN0aW9uKHByb3RvW25hbWVdLCBwcm9wZXJ0eSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHByb3RvW25hbWVdID0gcHJvcGVydHk7XG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgICAvLyBBZGQgdmVyYm9zZSBkaXNwbGF5TmFtZSB0byB0aGUgZnVuY3Rpb24sIHdoaWNoIGhlbHBzIHdoZW4gbG9va2luZ1xuICAgICAgICAgICAgICAvLyBhdCBwcm9maWxpbmcgdG9vbHMuXG4gICAgICAgICAgICAgIGlmICh0eXBlb2YgcHJvcGVydHkgPT09ICdmdW5jdGlvbicgJiYgc3BlYy5kaXNwbGF5TmFtZSkge1xuICAgICAgICAgICAgICAgIHByb3RvW25hbWVdLmRpc3BsYXlOYW1lID0gc3BlYy5kaXNwbGF5TmFtZSArICdfJyArIG5hbWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBtaXhTdGF0aWNTcGVjSW50b0NvbXBvbmVudChDb25zdHJ1Y3Rvciwgc3RhdGljcykge1xuICAgIGlmICghc3RhdGljcykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBmb3IgKHZhciBuYW1lIGluIHN0YXRpY3MpIHtcbiAgICAgIHZhciBwcm9wZXJ0eSA9IHN0YXRpY3NbbmFtZV07XG4gICAgICBpZiAoIXN0YXRpY3MuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHZhciBpc1Jlc2VydmVkID0gbmFtZSBpbiBSRVNFUlZFRF9TUEVDX0tFWVM7XG4gICAgICBfaW52YXJpYW50KFxuICAgICAgICAhaXNSZXNlcnZlZCxcbiAgICAgICAgJ1JlYWN0Q2xhc3M6IFlvdSBhcmUgYXR0ZW1wdGluZyB0byBkZWZpbmUgYSByZXNlcnZlZCAnICtcbiAgICAgICAgICAncHJvcGVydHksIGAlc2AsIHRoYXQgc2hvdWxkblxcJ3QgYmUgb24gdGhlIFwic3RhdGljc1wiIGtleS4gRGVmaW5lIGl0ICcgK1xuICAgICAgICAgICdhcyBhbiBpbnN0YW5jZSBwcm9wZXJ0eSBpbnN0ZWFkOyBpdCB3aWxsIHN0aWxsIGJlIGFjY2Vzc2libGUgb24gdGhlICcgK1xuICAgICAgICAgICdjb25zdHJ1Y3Rvci4nLFxuICAgICAgICBuYW1lXG4gICAgICApO1xuXG4gICAgICB2YXIgaXNJbmhlcml0ZWQgPSBuYW1lIGluIENvbnN0cnVjdG9yO1xuICAgICAgX2ludmFyaWFudChcbiAgICAgICAgIWlzSW5oZXJpdGVkLFxuICAgICAgICAnUmVhY3RDbGFzczogWW91IGFyZSBhdHRlbXB0aW5nIHRvIGRlZmluZSAnICtcbiAgICAgICAgICAnYCVzYCBvbiB5b3VyIGNvbXBvbmVudCBtb3JlIHRoYW4gb25jZS4gVGhpcyBjb25mbGljdCBtYXkgYmUgJyArXG4gICAgICAgICAgJ2R1ZSB0byBhIG1peGluLicsXG4gICAgICAgIG5hbWVcbiAgICAgICk7XG4gICAgICBDb25zdHJ1Y3RvcltuYW1lXSA9IHByb3BlcnR5O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBNZXJnZSB0d28gb2JqZWN0cywgYnV0IHRocm93IGlmIGJvdGggY29udGFpbiB0aGUgc2FtZSBrZXkuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvbmUgVGhlIGZpcnN0IG9iamVjdCwgd2hpY2ggaXMgbXV0YXRlZC5cbiAgICogQHBhcmFtIHtvYmplY3R9IHR3byBUaGUgc2Vjb25kIG9iamVjdFxuICAgKiBAcmV0dXJuIHtvYmplY3R9IG9uZSBhZnRlciBpdCBoYXMgYmVlbiBtdXRhdGVkIHRvIGNvbnRhaW4gZXZlcnl0aGluZyBpbiB0d28uXG4gICAqL1xuICBmdW5jdGlvbiBtZXJnZUludG9XaXRoTm9EdXBsaWNhdGVLZXlzKG9uZSwgdHdvKSB7XG4gICAgX2ludmFyaWFudChcbiAgICAgIG9uZSAmJiB0d28gJiYgdHlwZW9mIG9uZSA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIHR3byA9PT0gJ29iamVjdCcsXG4gICAgICAnbWVyZ2VJbnRvV2l0aE5vRHVwbGljYXRlS2V5cygpOiBDYW5ub3QgbWVyZ2Ugbm9uLW9iamVjdHMuJ1xuICAgICk7XG5cbiAgICBmb3IgKHZhciBrZXkgaW4gdHdvKSB7XG4gICAgICBpZiAodHdvLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgX2ludmFyaWFudChcbiAgICAgICAgICBvbmVba2V5XSA9PT0gdW5kZWZpbmVkLFxuICAgICAgICAgICdtZXJnZUludG9XaXRoTm9EdXBsaWNhdGVLZXlzKCk6ICcgK1xuICAgICAgICAgICAgJ1RyaWVkIHRvIG1lcmdlIHR3byBvYmplY3RzIHdpdGggdGhlIHNhbWUga2V5OiBgJXNgLiBUaGlzIGNvbmZsaWN0ICcgK1xuICAgICAgICAgICAgJ21heSBiZSBkdWUgdG8gYSBtaXhpbjsgaW4gcGFydGljdWxhciwgdGhpcyBtYXkgYmUgY2F1c2VkIGJ5IHR3byAnICtcbiAgICAgICAgICAgICdnZXRJbml0aWFsU3RhdGUoKSBvciBnZXREZWZhdWx0UHJvcHMoKSBtZXRob2RzIHJldHVybmluZyBvYmplY3RzICcgK1xuICAgICAgICAgICAgJ3dpdGggY2xhc2hpbmcga2V5cy4nLFxuICAgICAgICAgIGtleVxuICAgICAgICApO1xuICAgICAgICBvbmVba2V5XSA9IHR3b1trZXldO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb25lO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGludm9rZXMgdHdvIGZ1bmN0aW9ucyBhbmQgbWVyZ2VzIHRoZWlyIHJldHVybiB2YWx1ZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb259IG9uZSBGdW5jdGlvbiB0byBpbnZva2UgZmlyc3QuXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb259IHR3byBGdW5jdGlvbiB0byBpbnZva2Ugc2Vjb25kLlxuICAgKiBAcmV0dXJuIHtmdW5jdGlvbn0gRnVuY3Rpb24gdGhhdCBpbnZva2VzIHRoZSB0d28gYXJndW1lbnQgZnVuY3Rpb25zLlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZnVuY3Rpb24gY3JlYXRlTWVyZ2VkUmVzdWx0RnVuY3Rpb24ob25lLCB0d28pIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gbWVyZ2VkUmVzdWx0KCkge1xuICAgICAgdmFyIGEgPSBvbmUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgIHZhciBiID0gdHdvLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICBpZiAoYSA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBiO1xuICAgICAgfSBlbHNlIGlmIChiID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIGE7XG4gICAgICB9XG4gICAgICB2YXIgYyA9IHt9O1xuICAgICAgbWVyZ2VJbnRvV2l0aE5vRHVwbGljYXRlS2V5cyhjLCBhKTtcbiAgICAgIG1lcmdlSW50b1dpdGhOb0R1cGxpY2F0ZUtleXMoYywgYik7XG4gICAgICByZXR1cm4gYztcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGludm9rZXMgdHdvIGZ1bmN0aW9ucyBhbmQgaWdub3JlcyB0aGVpciByZXR1cm4gdmFsZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb259IG9uZSBGdW5jdGlvbiB0byBpbnZva2UgZmlyc3QuXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb259IHR3byBGdW5jdGlvbiB0byBpbnZva2Ugc2Vjb25kLlxuICAgKiBAcmV0dXJuIHtmdW5jdGlvbn0gRnVuY3Rpb24gdGhhdCBpbnZva2VzIHRoZSB0d28gYXJndW1lbnQgZnVuY3Rpb25zLlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZnVuY3Rpb24gY3JlYXRlQ2hhaW5lZEZ1bmN0aW9uKG9uZSwgdHdvKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIGNoYWluZWRGdW5jdGlvbigpIHtcbiAgICAgIG9uZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgdHdvLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCaW5kcyBhIG1ldGhvZCB0byB0aGUgY29tcG9uZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gY29tcG9uZW50IENvbXBvbmVudCB3aG9zZSBtZXRob2QgaXMgZ29pbmcgdG8gYmUgYm91bmQuXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb259IG1ldGhvZCBNZXRob2QgdG8gYmUgYm91bmQuXG4gICAqIEByZXR1cm4ge2Z1bmN0aW9ufSBUaGUgYm91bmQgbWV0aG9kLlxuICAgKi9cbiAgZnVuY3Rpb24gYmluZEF1dG9CaW5kTWV0aG9kKGNvbXBvbmVudCwgbWV0aG9kKSB7XG4gICAgdmFyIGJvdW5kTWV0aG9kID0gbWV0aG9kLmJpbmQoY29tcG9uZW50KTtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgYm91bmRNZXRob2QuX19yZWFjdEJvdW5kQ29udGV4dCA9IGNvbXBvbmVudDtcbiAgICAgIGJvdW5kTWV0aG9kLl9fcmVhY3RCb3VuZE1ldGhvZCA9IG1ldGhvZDtcbiAgICAgIGJvdW5kTWV0aG9kLl9fcmVhY3RCb3VuZEFyZ3VtZW50cyA9IG51bGw7XG4gICAgICB2YXIgY29tcG9uZW50TmFtZSA9IGNvbXBvbmVudC5jb25zdHJ1Y3Rvci5kaXNwbGF5TmFtZTtcbiAgICAgIHZhciBfYmluZCA9IGJvdW5kTWV0aG9kLmJpbmQ7XG4gICAgICBib3VuZE1ldGhvZC5iaW5kID0gZnVuY3Rpb24obmV3VGhpcykge1xuICAgICAgICBmb3IgKFxuICAgICAgICAgIHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCxcbiAgICAgICAgICAgIGFyZ3MgPSBBcnJheShfbGVuID4gMSA/IF9sZW4gLSAxIDogMCksXG4gICAgICAgICAgICBfa2V5ID0gMTtcbiAgICAgICAgICBfa2V5IDwgX2xlbjtcbiAgICAgICAgICBfa2V5KytcbiAgICAgICAgKSB7XG4gICAgICAgICAgYXJnc1tfa2V5IC0gMV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBVc2VyIGlzIHRyeWluZyB0byBiaW5kKCkgYW4gYXV0b2JvdW5kIG1ldGhvZDsgd2UgZWZmZWN0aXZlbHkgd2lsbFxuICAgICAgICAvLyBpZ25vcmUgdGhlIHZhbHVlIG9mIFwidGhpc1wiIHRoYXQgdGhlIHVzZXIgaXMgdHJ5aW5nIHRvIHVzZSwgc29cbiAgICAgICAgLy8gbGV0J3Mgd2Fybi5cbiAgICAgICAgaWYgKG5ld1RoaXMgIT09IGNvbXBvbmVudCAmJiBuZXdUaGlzICE9PSBudWxsKSB7XG4gICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICAgIHdhcm5pbmcoXG4gICAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgICAnYmluZCgpOiBSZWFjdCBjb21wb25lbnQgbWV0aG9kcyBtYXkgb25seSBiZSBib3VuZCB0byB0aGUgJyArXG4gICAgICAgICAgICAgICAgJ2NvbXBvbmVudCBpbnN0YW5jZS4gU2VlICVzJyxcbiAgICAgICAgICAgICAgY29tcG9uZW50TmFtZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoIWFyZ3MubGVuZ3RoKSB7XG4gICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICAgIHdhcm5pbmcoXG4gICAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgICAnYmluZCgpOiBZb3UgYXJlIGJpbmRpbmcgYSBjb21wb25lbnQgbWV0aG9kIHRvIHRoZSBjb21wb25lbnQuICcgK1xuICAgICAgICAgICAgICAgICdSZWFjdCBkb2VzIHRoaXMgZm9yIHlvdSBhdXRvbWF0aWNhbGx5IGluIGEgaGlnaC1wZXJmb3JtYW5jZSAnICtcbiAgICAgICAgICAgICAgICAnd2F5LCBzbyB5b3UgY2FuIHNhZmVseSByZW1vdmUgdGhpcyBjYWxsLiBTZWUgJXMnLFxuICAgICAgICAgICAgICBjb21wb25lbnROYW1lXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gYm91bmRNZXRob2Q7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHJlYm91bmRNZXRob2QgPSBfYmluZC5hcHBseShib3VuZE1ldGhvZCwgYXJndW1lbnRzKTtcbiAgICAgICAgcmVib3VuZE1ldGhvZC5fX3JlYWN0Qm91bmRDb250ZXh0ID0gY29tcG9uZW50O1xuICAgICAgICByZWJvdW5kTWV0aG9kLl9fcmVhY3RCb3VuZE1ldGhvZCA9IG1ldGhvZDtcbiAgICAgICAgcmVib3VuZE1ldGhvZC5fX3JlYWN0Qm91bmRBcmd1bWVudHMgPSBhcmdzO1xuICAgICAgICByZXR1cm4gcmVib3VuZE1ldGhvZDtcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBib3VuZE1ldGhvZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBCaW5kcyBhbGwgYXV0by1ib3VuZCBtZXRob2RzIGluIGEgY29tcG9uZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gY29tcG9uZW50IENvbXBvbmVudCB3aG9zZSBtZXRob2QgaXMgZ29pbmcgdG8gYmUgYm91bmQuXG4gICAqL1xuICBmdW5jdGlvbiBiaW5kQXV0b0JpbmRNZXRob2RzKGNvbXBvbmVudCkge1xuICAgIHZhciBwYWlycyA9IGNvbXBvbmVudC5fX3JlYWN0QXV0b0JpbmRQYWlycztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhaXJzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgICB2YXIgYXV0b0JpbmRLZXkgPSBwYWlyc1tpXTtcbiAgICAgIHZhciBtZXRob2QgPSBwYWlyc1tpICsgMV07XG4gICAgICBjb21wb25lbnRbYXV0b0JpbmRLZXldID0gYmluZEF1dG9CaW5kTWV0aG9kKGNvbXBvbmVudCwgbWV0aG9kKTtcbiAgICB9XG4gIH1cblxuICB2YXIgSXNNb3VudGVkUHJlTWl4aW4gPSB7XG4gICAgY29tcG9uZW50RGlkTW91bnQ6IGZ1bmN0aW9uKCkge1xuICAgICAgdGhpcy5fX2lzTW91bnRlZCA9IHRydWU7XG4gICAgfVxuICB9O1xuXG4gIHZhciBJc01vdW50ZWRQb3N0TWl4aW4gPSB7XG4gICAgY29tcG9uZW50V2lsbFVubW91bnQ6IGZ1bmN0aW9uKCkge1xuICAgICAgdGhpcy5fX2lzTW91bnRlZCA9IGZhbHNlO1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogQWRkIG1vcmUgdG8gdGhlIFJlYWN0Q2xhc3MgYmFzZSBjbGFzcy4gVGhlc2UgYXJlIGFsbCBsZWdhY3kgZmVhdHVyZXMgYW5kXG4gICAqIHRoZXJlZm9yZSBub3QgYWxyZWFkeSBwYXJ0IG9mIHRoZSBtb2Rlcm4gUmVhY3RDb21wb25lbnQuXG4gICAqL1xuICB2YXIgUmVhY3RDbGFzc01peGluID0ge1xuICAgIC8qKlxuICAgICAqIFRPRE86IFRoaXMgd2lsbCBiZSBkZXByZWNhdGVkIGJlY2F1c2Ugc3RhdGUgc2hvdWxkIGFsd2F5cyBrZWVwIGEgY29uc2lzdGVudFxuICAgICAqIHR5cGUgc2lnbmF0dXJlIGFuZCB0aGUgb25seSB1c2UgY2FzZSBmb3IgdGhpcywgaXMgdG8gYXZvaWQgdGhhdC5cbiAgICAgKi9cbiAgICByZXBsYWNlU3RhdGU6IGZ1bmN0aW9uKG5ld1N0YXRlLCBjYWxsYmFjaykge1xuICAgICAgdGhpcy51cGRhdGVyLmVucXVldWVSZXBsYWNlU3RhdGUodGhpcywgbmV3U3RhdGUsIGNhbGxiYWNrKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIHdoZXRoZXIgb3Igbm90IHRoaXMgY29tcG9zaXRlIGNvbXBvbmVudCBpcyBtb3VudGVkLlxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgbW91bnRlZCwgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgKiBAZmluYWxcbiAgICAgKi9cbiAgICBpc01vdW50ZWQ6IGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgd2FybmluZyhcbiAgICAgICAgICB0aGlzLl9fZGlkV2FybklzTW91bnRlZCxcbiAgICAgICAgICAnJXM6IGlzTW91bnRlZCBpcyBkZXByZWNhdGVkLiBJbnN0ZWFkLCBtYWtlIHN1cmUgdG8gY2xlYW4gdXAgJyArXG4gICAgICAgICAgICAnc3Vic2NyaXB0aW9ucyBhbmQgcGVuZGluZyByZXF1ZXN0cyBpbiBjb21wb25lbnRXaWxsVW5tb3VudCB0byAnICtcbiAgICAgICAgICAgICdwcmV2ZW50IG1lbW9yeSBsZWFrcy4nLFxuICAgICAgICAgICh0aGlzLmNvbnN0cnVjdG9yICYmIHRoaXMuY29uc3RydWN0b3IuZGlzcGxheU5hbWUpIHx8XG4gICAgICAgICAgICB0aGlzLm5hbWUgfHxcbiAgICAgICAgICAgICdDb21wb25lbnQnXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuX19kaWRXYXJuSXNNb3VudGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiAhIXRoaXMuX19pc01vdW50ZWQ7XG4gICAgfVxuICB9O1xuXG4gIHZhciBSZWFjdENsYXNzQ29tcG9uZW50ID0gZnVuY3Rpb24oKSB7fTtcbiAgX2Fzc2lnbihcbiAgICBSZWFjdENsYXNzQ29tcG9uZW50LnByb3RvdHlwZSxcbiAgICBSZWFjdENvbXBvbmVudC5wcm90b3R5cGUsXG4gICAgUmVhY3RDbGFzc01peGluXG4gICk7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBjb21wb3NpdGUgY29tcG9uZW50IGNsYXNzIGdpdmVuIGEgY2xhc3Mgc3BlY2lmaWNhdGlvbi5cbiAgICogU2VlIGh0dHBzOi8vZmFjZWJvb2suZ2l0aHViLmlvL3JlYWN0L2RvY3MvdG9wLWxldmVsLWFwaS5odG1sI3JlYWN0LmNyZWF0ZWNsYXNzXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBzcGVjIENsYXNzIHNwZWNpZmljYXRpb24gKHdoaWNoIG11c3QgZGVmaW5lIGByZW5kZXJgKS5cbiAgICogQHJldHVybiB7ZnVuY3Rpb259IENvbXBvbmVudCBjb25zdHJ1Y3RvciBmdW5jdGlvbi5cbiAgICogQHB1YmxpY1xuICAgKi9cbiAgZnVuY3Rpb24gY3JlYXRlQ2xhc3Moc3BlYykge1xuICAgIC8vIFRvIGtlZXAgb3VyIHdhcm5pbmdzIG1vcmUgdW5kZXJzdGFuZGFibGUsIHdlJ2xsIHVzZSBhIGxpdHRsZSBoYWNrIGhlcmUgdG9cbiAgICAvLyBlbnN1cmUgdGhhdCBDb25zdHJ1Y3Rvci5uYW1lICE9PSAnQ29uc3RydWN0b3InLiBUaGlzIG1ha2VzIHN1cmUgd2UgZG9uJ3RcbiAgICAvLyB1bm5lY2Vzc2FyaWx5IGlkZW50aWZ5IGEgY2xhc3Mgd2l0aG91dCBkaXNwbGF5TmFtZSBhcyAnQ29uc3RydWN0b3InLlxuICAgIHZhciBDb25zdHJ1Y3RvciA9IGlkZW50aXR5KGZ1bmN0aW9uKHByb3BzLCBjb250ZXh0LCB1cGRhdGVyKSB7XG4gICAgICAvLyBUaGlzIGNvbnN0cnVjdG9yIGdldHMgb3ZlcnJpZGRlbiBieSBtb2Nrcy4gVGhlIGFyZ3VtZW50IGlzIHVzZWRcbiAgICAgIC8vIGJ5IG1vY2tzIHRvIGFzc2VydCBvbiB3aGF0IGdldHMgbW91bnRlZC5cblxuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgd2FybmluZyhcbiAgICAgICAgICB0aGlzIGluc3RhbmNlb2YgQ29uc3RydWN0b3IsXG4gICAgICAgICAgJ1NvbWV0aGluZyBpcyBjYWxsaW5nIGEgUmVhY3QgY29tcG9uZW50IGRpcmVjdGx5LiBVc2UgYSBmYWN0b3J5IG9yICcgK1xuICAgICAgICAgICAgJ0pTWCBpbnN0ZWFkLiBTZWU6IGh0dHBzOi8vZmIubWUvcmVhY3QtbGVnYWN5ZmFjdG9yeSdcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgLy8gV2lyZSB1cCBhdXRvLWJpbmRpbmdcbiAgICAgIGlmICh0aGlzLl9fcmVhY3RBdXRvQmluZFBhaXJzLmxlbmd0aCkge1xuICAgICAgICBiaW5kQXV0b0JpbmRNZXRob2RzKHRoaXMpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnByb3BzID0gcHJvcHM7XG4gICAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuICAgICAgdGhpcy5yZWZzID0gZW1wdHlPYmplY3Q7XG4gICAgICB0aGlzLnVwZGF0ZXIgPSB1cGRhdGVyIHx8IFJlYWN0Tm9vcFVwZGF0ZVF1ZXVlO1xuXG4gICAgICB0aGlzLnN0YXRlID0gbnVsbDtcblxuICAgICAgLy8gUmVhY3RDbGFzc2VzIGRvZXNuJ3QgaGF2ZSBjb25zdHJ1Y3RvcnMuIEluc3RlYWQsIHRoZXkgdXNlIHRoZVxuICAgICAgLy8gZ2V0SW5pdGlhbFN0YXRlIGFuZCBjb21wb25lbnRXaWxsTW91bnQgbWV0aG9kcyBmb3IgaW5pdGlhbGl6YXRpb24uXG5cbiAgICAgIHZhciBpbml0aWFsU3RhdGUgPSB0aGlzLmdldEluaXRpYWxTdGF0ZSA/IHRoaXMuZ2V0SW5pdGlhbFN0YXRlKCkgOiBudWxsO1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgLy8gV2UgYWxsb3cgYXV0by1tb2NrcyB0byBwcm9jZWVkIGFzIGlmIHRoZXkncmUgcmV0dXJuaW5nIG51bGwuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBpbml0aWFsU3RhdGUgPT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgIHRoaXMuZ2V0SW5pdGlhbFN0YXRlLl9pc01vY2tGdW5jdGlvblxuICAgICAgICApIHtcbiAgICAgICAgICAvLyBUaGlzIGlzIHByb2JhYmx5IGJhZCBwcmFjdGljZS4gQ29uc2lkZXIgd2FybmluZyBoZXJlIGFuZFxuICAgICAgICAgIC8vIGRlcHJlY2F0aW5nIHRoaXMgY29udmVuaWVuY2UuXG4gICAgICAgICAgaW5pdGlhbFN0YXRlID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgX2ludmFyaWFudChcbiAgICAgICAgdHlwZW9mIGluaXRpYWxTdGF0ZSA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkoaW5pdGlhbFN0YXRlKSxcbiAgICAgICAgJyVzLmdldEluaXRpYWxTdGF0ZSgpOiBtdXN0IHJldHVybiBhbiBvYmplY3Qgb3IgbnVsbCcsXG4gICAgICAgIENvbnN0cnVjdG9yLmRpc3BsYXlOYW1lIHx8ICdSZWFjdENvbXBvc2l0ZUNvbXBvbmVudCdcbiAgICAgICk7XG5cbiAgICAgIHRoaXMuc3RhdGUgPSBpbml0aWFsU3RhdGU7XG4gICAgfSk7XG4gICAgQ29uc3RydWN0b3IucHJvdG90eXBlID0gbmV3IFJlYWN0Q2xhc3NDb21wb25lbnQoKTtcbiAgICBDb25zdHJ1Y3Rvci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDb25zdHJ1Y3RvcjtcbiAgICBDb25zdHJ1Y3Rvci5wcm90b3R5cGUuX19yZWFjdEF1dG9CaW5kUGFpcnMgPSBbXTtcblxuICAgIGluamVjdGVkTWl4aW5zLmZvckVhY2gobWl4U3BlY0ludG9Db21wb25lbnQuYmluZChudWxsLCBDb25zdHJ1Y3RvcikpO1xuXG4gICAgbWl4U3BlY0ludG9Db21wb25lbnQoQ29uc3RydWN0b3IsIElzTW91bnRlZFByZU1peGluKTtcbiAgICBtaXhTcGVjSW50b0NvbXBvbmVudChDb25zdHJ1Y3Rvciwgc3BlYyk7XG4gICAgbWl4U3BlY0ludG9Db21wb25lbnQoQ29uc3RydWN0b3IsIElzTW91bnRlZFBvc3RNaXhpbik7XG5cbiAgICAvLyBJbml0aWFsaXplIHRoZSBkZWZhdWx0UHJvcHMgcHJvcGVydHkgYWZ0ZXIgYWxsIG1peGlucyBoYXZlIGJlZW4gbWVyZ2VkLlxuICAgIGlmIChDb25zdHJ1Y3Rvci5nZXREZWZhdWx0UHJvcHMpIHtcbiAgICAgIENvbnN0cnVjdG9yLmRlZmF1bHRQcm9wcyA9IENvbnN0cnVjdG9yLmdldERlZmF1bHRQcm9wcygpO1xuICAgIH1cblxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAvLyBUaGlzIGlzIGEgdGFnIHRvIGluZGljYXRlIHRoYXQgdGhlIHVzZSBvZiB0aGVzZSBtZXRob2QgbmFtZXMgaXMgb2ssXG4gICAgICAvLyBzaW5jZSBpdCdzIHVzZWQgd2l0aCBjcmVhdGVDbGFzcy4gSWYgaXQncyBub3QsIHRoZW4gaXQncyBsaWtlbHkgYVxuICAgICAgLy8gbWlzdGFrZSBzbyB3ZSdsbCB3YXJuIHlvdSB0byB1c2UgdGhlIHN0YXRpYyBwcm9wZXJ0eSwgcHJvcGVydHlcbiAgICAgIC8vIGluaXRpYWxpemVyIG9yIGNvbnN0cnVjdG9yIHJlc3BlY3RpdmVseS5cbiAgICAgIGlmIChDb25zdHJ1Y3Rvci5nZXREZWZhdWx0UHJvcHMpIHtcbiAgICAgICAgQ29uc3RydWN0b3IuZ2V0RGVmYXVsdFByb3BzLmlzUmVhY3RDbGFzc0FwcHJvdmVkID0ge307XG4gICAgICB9XG4gICAgICBpZiAoQ29uc3RydWN0b3IucHJvdG90eXBlLmdldEluaXRpYWxTdGF0ZSkge1xuICAgICAgICBDb25zdHJ1Y3Rvci5wcm90b3R5cGUuZ2V0SW5pdGlhbFN0YXRlLmlzUmVhY3RDbGFzc0FwcHJvdmVkID0ge307XG4gICAgICB9XG4gICAgfVxuXG4gICAgX2ludmFyaWFudChcbiAgICAgIENvbnN0cnVjdG9yLnByb3RvdHlwZS5yZW5kZXIsXG4gICAgICAnY3JlYXRlQ2xhc3MoLi4uKTogQ2xhc3Mgc3BlY2lmaWNhdGlvbiBtdXN0IGltcGxlbWVudCBhIGByZW5kZXJgIG1ldGhvZC4nXG4gICAgKTtcblxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICB3YXJuaW5nKFxuICAgICAgICAhQ29uc3RydWN0b3IucHJvdG90eXBlLmNvbXBvbmVudFNob3VsZFVwZGF0ZSxcbiAgICAgICAgJyVzIGhhcyBhIG1ldGhvZCBjYWxsZWQgJyArXG4gICAgICAgICAgJ2NvbXBvbmVudFNob3VsZFVwZGF0ZSgpLiBEaWQgeW91IG1lYW4gc2hvdWxkQ29tcG9uZW50VXBkYXRlKCk/ICcgK1xuICAgICAgICAgICdUaGUgbmFtZSBpcyBwaHJhc2VkIGFzIGEgcXVlc3Rpb24gYmVjYXVzZSB0aGUgZnVuY3Rpb24gaXMgJyArXG4gICAgICAgICAgJ2V4cGVjdGVkIHRvIHJldHVybiBhIHZhbHVlLicsXG4gICAgICAgIHNwZWMuZGlzcGxheU5hbWUgfHwgJ0EgY29tcG9uZW50J1xuICAgICAgKTtcbiAgICAgIHdhcm5pbmcoXG4gICAgICAgICFDb25zdHJ1Y3Rvci5wcm90b3R5cGUuY29tcG9uZW50V2lsbFJlY2lldmVQcm9wcyxcbiAgICAgICAgJyVzIGhhcyBhIG1ldGhvZCBjYWxsZWQgJyArXG4gICAgICAgICAgJ2NvbXBvbmVudFdpbGxSZWNpZXZlUHJvcHMoKS4gRGlkIHlvdSBtZWFuIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMoKT8nLFxuICAgICAgICBzcGVjLmRpc3BsYXlOYW1lIHx8ICdBIGNvbXBvbmVudCdcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gUmVkdWNlIHRpbWUgc3BlbnQgZG9pbmcgbG9va3VwcyBieSBzZXR0aW5nIHRoZXNlIG9uIHRoZSBwcm90b3R5cGUuXG4gICAgZm9yICh2YXIgbWV0aG9kTmFtZSBpbiBSZWFjdENsYXNzSW50ZXJmYWNlKSB7XG4gICAgICBpZiAoIUNvbnN0cnVjdG9yLnByb3RvdHlwZVttZXRob2ROYW1lXSkge1xuICAgICAgICBDb25zdHJ1Y3Rvci5wcm90b3R5cGVbbWV0aG9kTmFtZV0gPSBudWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBDb25zdHJ1Y3RvcjtcbiAgfVxuXG4gIHJldHVybiBjcmVhdGVDbGFzcztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9jcmVhdGUtcmVhY3QtY2xhc3MvZmFjdG9yeS5qcyIsIlwidXNlIHN0cmljdFwiO1xuXG4vKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHR5cGVjaGVja3NcbiAqL1xuXG52YXIgX2h5cGhlblBhdHRlcm4gPSAvLSguKS9nO1xuXG4vKipcbiAqIENhbWVsY2FzZXMgYSBoeXBoZW5hdGVkIHN0cmluZywgZm9yIGV4YW1wbGU6XG4gKlxuICogICA+IGNhbWVsaXplKCdiYWNrZ3JvdW5kLWNvbG9yJylcbiAqICAgPCBcImJhY2tncm91bmRDb2xvclwiXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZ1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBjYW1lbGl6ZShzdHJpbmcpIHtcbiAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKF9oeXBoZW5QYXR0ZXJuLCBmdW5jdGlvbiAoXywgY2hhcmFjdGVyKSB7XG4gICAgcmV0dXJuIGNoYXJhY3Rlci50b1VwcGVyQ2FzZSgpO1xuICB9KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjYW1lbGl6ZTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L2ZianMvbGliL2NhbWVsaXplLmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEB0eXBlY2hlY2tzXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgY2FtZWxpemUgPSByZXF1aXJlKCcuL2NhbWVsaXplJyk7XG5cbnZhciBtc1BhdHRlcm4gPSAvXi1tcy0vO1xuXG4vKipcbiAqIENhbWVsY2FzZXMgYSBoeXBoZW5hdGVkIENTUyBwcm9wZXJ0eSBuYW1lLCBmb3IgZXhhbXBsZTpcbiAqXG4gKiAgID4gY2FtZWxpemVTdHlsZU5hbWUoJ2JhY2tncm91bmQtY29sb3InKVxuICogICA8IFwiYmFja2dyb3VuZENvbG9yXCJcbiAqICAgPiBjYW1lbGl6ZVN0eWxlTmFtZSgnLW1vei10cmFuc2l0aW9uJylcbiAqICAgPCBcIk1velRyYW5zaXRpb25cIlxuICogICA+IGNhbWVsaXplU3R5bGVOYW1lKCctbXMtdHJhbnNpdGlvbicpXG4gKiAgIDwgXCJtc1RyYW5zaXRpb25cIlxuICpcbiAqIEFzIEFuZGkgU21pdGggc3VnZ2VzdHNcbiAqIChodHRwOi8vd3d3LmFuZGlzbWl0aC5jb20vYmxvZy8yMDEyLzAyL21vZGVybml6ci1wcmVmaXhlZC8pLCBhbiBgLW1zYCBwcmVmaXhcbiAqIGlzIGNvbnZlcnRlZCB0byBsb3dlcmNhc2UgYG1zYC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGNhbWVsaXplU3R5bGVOYW1lKHN0cmluZykge1xuICByZXR1cm4gY2FtZWxpemUoc3RyaW5nLnJlcGxhY2UobXNQYXR0ZXJuLCAnbXMtJykpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNhbWVsaXplU3R5bGVOYW1lO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vZmJqcy9saWIvY2FtZWxpemVTdHlsZU5hbWUuanMiLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBcbiAqL1xuXG52YXIgaXNUZXh0Tm9kZSA9IHJlcXVpcmUoJy4vaXNUZXh0Tm9kZScpO1xuXG4vKmVzbGludC1kaXNhYmxlIG5vLWJpdHdpc2UgKi9cblxuLyoqXG4gKiBDaGVja3MgaWYgYSBnaXZlbiBET00gbm9kZSBjb250YWlucyBvciBpcyBhbm90aGVyIERPTSBub2RlLlxuICovXG5mdW5jdGlvbiBjb250YWluc05vZGUob3V0ZXJOb2RlLCBpbm5lck5vZGUpIHtcbiAgaWYgKCFvdXRlck5vZGUgfHwgIWlubmVyTm9kZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSBlbHNlIGlmIChvdXRlck5vZGUgPT09IGlubmVyTm9kZSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9IGVsc2UgaWYgKGlzVGV4dE5vZGUob3V0ZXJOb2RlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSBlbHNlIGlmIChpc1RleHROb2RlKGlubmVyTm9kZSkpIHtcbiAgICByZXR1cm4gY29udGFpbnNOb2RlKG91dGVyTm9kZSwgaW5uZXJOb2RlLnBhcmVudE5vZGUpO1xuICB9IGVsc2UgaWYgKCdjb250YWlucycgaW4gb3V0ZXJOb2RlKSB7XG4gICAgcmV0dXJuIG91dGVyTm9kZS5jb250YWlucyhpbm5lck5vZGUpO1xuICB9IGVsc2UgaWYgKG91dGVyTm9kZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbikge1xuICAgIHJldHVybiAhIShvdXRlck5vZGUuY29tcGFyZURvY3VtZW50UG9zaXRpb24oaW5uZXJOb2RlKSAmIDE2KTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjb250YWluc05vZGU7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9mYmpzL2xpYi9jb250YWluc05vZGUuanMiLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAdHlwZWNoZWNrc1xuICovXG5cbnZhciBpbnZhcmlhbnQgPSByZXF1aXJlKCcuL2ludmFyaWFudCcpO1xuXG4vKipcbiAqIENvbnZlcnQgYXJyYXktbGlrZSBvYmplY3RzIHRvIGFycmF5cy5cbiAqXG4gKiBUaGlzIEFQSSBhc3N1bWVzIHRoZSBjYWxsZXIga25vd3MgdGhlIGNvbnRlbnRzIG9mIHRoZSBkYXRhIHR5cGUuIEZvciBsZXNzXG4gKiB3ZWxsIGRlZmluZWQgaW5wdXRzIHVzZSBjcmVhdGVBcnJheUZyb21NaXhlZC5cbiAqXG4gKiBAcGFyYW0ge29iamVjdHxmdW5jdGlvbnxmaWxlbGlzdH0gb2JqXG4gKiBAcmV0dXJuIHthcnJheX1cbiAqL1xuZnVuY3Rpb24gdG9BcnJheShvYmopIHtcbiAgdmFyIGxlbmd0aCA9IG9iai5sZW5ndGg7XG5cbiAgLy8gU29tZSBicm93c2VycyBidWlsdGluIG9iamVjdHMgY2FuIHJlcG9ydCB0eXBlb2YgJ2Z1bmN0aW9uJyAoZS5nLiBOb2RlTGlzdFxuICAvLyBpbiBvbGQgdmVyc2lvbnMgb2YgU2FmYXJpKS5cbiAgISghQXJyYXkuaXNBcnJheShvYmopICYmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyB8fCB0eXBlb2Ygb2JqID09PSAnZnVuY3Rpb24nKSkgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAndG9BcnJheTogQXJyYXktbGlrZSBvYmplY3QgZXhwZWN0ZWQnKSA6IGludmFyaWFudChmYWxzZSkgOiB2b2lkIDA7XG5cbiAgISh0eXBlb2YgbGVuZ3RoID09PSAnbnVtYmVyJykgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAndG9BcnJheTogT2JqZWN0IG5lZWRzIGEgbGVuZ3RoIHByb3BlcnR5JykgOiBpbnZhcmlhbnQoZmFsc2UpIDogdm9pZCAwO1xuXG4gICEobGVuZ3RoID09PSAwIHx8IGxlbmd0aCAtIDEgaW4gb2JqKSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICd0b0FycmF5OiBPYmplY3Qgc2hvdWxkIGhhdmUga2V5cyBmb3IgaW5kaWNlcycpIDogaW52YXJpYW50KGZhbHNlKSA6IHZvaWQgMDtcblxuICAhKHR5cGVvZiBvYmouY2FsbGVlICE9PSAnZnVuY3Rpb24nKSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICd0b0FycmF5OiBPYmplY3QgY2FuXFwndCBiZSBgYXJndW1lbnRzYC4gVXNlIHJlc3QgcGFyYW1zICcgKyAnKGZ1bmN0aW9uKC4uLmFyZ3MpIHt9KSBvciBBcnJheS5mcm9tKCkgaW5zdGVhZC4nKSA6IGludmFyaWFudChmYWxzZSkgOiB2b2lkIDA7XG5cbiAgLy8gT2xkIElFIGRvZXNuJ3QgZ2l2ZSBjb2xsZWN0aW9ucyBhY2Nlc3MgdG8gaGFzT3duUHJvcGVydHkuIEFzc3VtZSBpbnB1dHNcbiAgLy8gd2l0aG91dCBtZXRob2Qgd2lsbCB0aHJvdyBkdXJpbmcgdGhlIHNsaWNlIGNhbGwgYW5kIHNraXAgc3RyYWlnaHQgdG8gdGhlXG4gIC8vIGZhbGxiYWNrLlxuICBpZiAob2JqLmhhc093blByb3BlcnR5KSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChvYmopO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIElFIDwgOSBkb2VzIG5vdCBzdXBwb3J0IEFycmF5I3NsaWNlIG9uIGNvbGxlY3Rpb25zIG9iamVjdHNcbiAgICB9XG4gIH1cblxuICAvLyBGYWxsIGJhY2sgdG8gY29weWluZyBrZXkgYnkga2V5LiBUaGlzIGFzc3VtZXMgYWxsIGtleXMgaGF2ZSBhIHZhbHVlLFxuICAvLyBzbyB3aWxsIG5vdCBwcmVzZXJ2ZSBzcGFyc2VseSBwb3B1bGF0ZWQgaW5wdXRzLlxuICB2YXIgcmV0ID0gQXJyYXkobGVuZ3RoKTtcbiAgZm9yICh2YXIgaWkgPSAwOyBpaSA8IGxlbmd0aDsgaWkrKykge1xuICAgIHJldFtpaV0gPSBvYmpbaWldO1xuICB9XG4gIHJldHVybiByZXQ7XG59XG5cbi8qKlxuICogUGVyZm9ybSBhIGhldXJpc3RpYyB0ZXN0IHRvIGRldGVybWluZSBpZiBhbiBvYmplY3QgaXMgXCJhcnJheS1saWtlXCIuXG4gKlxuICogICBBIG1vbmsgYXNrZWQgSm9zaHUsIGEgWmVuIG1hc3RlciwgXCJIYXMgYSBkb2cgQnVkZGhhIG5hdHVyZT9cIlxuICogICBKb3NodSByZXBsaWVkOiBcIk11LlwiXG4gKlxuICogVGhpcyBmdW5jdGlvbiBkZXRlcm1pbmVzIGlmIGl0cyBhcmd1bWVudCBoYXMgXCJhcnJheSBuYXR1cmVcIjogaXQgcmV0dXJuc1xuICogdHJ1ZSBpZiB0aGUgYXJndW1lbnQgaXMgYW4gYWN0dWFsIGFycmF5LCBhbiBgYXJndW1lbnRzJyBvYmplY3QsIG9yIGFuXG4gKiBIVE1MQ29sbGVjdGlvbiAoZS5nLiBub2RlLmNoaWxkTm9kZXMgb3Igbm9kZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgpKS5cbiAqXG4gKiBJdCB3aWxsIHJldHVybiBmYWxzZSBmb3Igb3RoZXIgYXJyYXktbGlrZSBvYmplY3RzIGxpa2UgRmlsZWxpc3QuXG4gKlxuICogQHBhcmFtIHsqfSBvYmpcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGhhc0FycmF5TmF0dXJlKG9iaikge1xuICByZXR1cm4gKFxuICAgIC8vIG5vdCBudWxsL2ZhbHNlXG4gICAgISFvYmogJiYgKFxuICAgIC8vIGFycmF5cyBhcmUgb2JqZWN0cywgTm9kZUxpc3RzIGFyZSBmdW5jdGlvbnMgaW4gU2FmYXJpXG4gICAgdHlwZW9mIG9iaiA9PSAnb2JqZWN0JyB8fCB0eXBlb2Ygb2JqID09ICdmdW5jdGlvbicpICYmXG4gICAgLy8gcXVhY2tzIGxpa2UgYW4gYXJyYXlcbiAgICAnbGVuZ3RoJyBpbiBvYmogJiZcbiAgICAvLyBub3Qgd2luZG93XG4gICAgISgnc2V0SW50ZXJ2YWwnIGluIG9iaikgJiZcbiAgICAvLyBubyBET00gbm9kZSBzaG91bGQgYmUgY29uc2lkZXJlZCBhbiBhcnJheS1saWtlXG4gICAgLy8gYSAnc2VsZWN0JyBlbGVtZW50IGhhcyAnbGVuZ3RoJyBhbmQgJ2l0ZW0nIHByb3BlcnRpZXMgb24gSUU4XG4gICAgdHlwZW9mIG9iai5ub2RlVHlwZSAhPSAnbnVtYmVyJyAmJiAoXG4gICAgLy8gYSByZWFsIGFycmF5XG4gICAgQXJyYXkuaXNBcnJheShvYmopIHx8XG4gICAgLy8gYXJndW1lbnRzXG4gICAgJ2NhbGxlZScgaW4gb2JqIHx8XG4gICAgLy8gSFRNTENvbGxlY3Rpb24vTm9kZUxpc3RcbiAgICAnaXRlbScgaW4gb2JqKVxuICApO1xufVxuXG4vKipcbiAqIEVuc3VyZSB0aGF0IHRoZSBhcmd1bWVudCBpcyBhbiBhcnJheSBieSB3cmFwcGluZyBpdCBpbiBhbiBhcnJheSBpZiBpdCBpcyBub3QuXG4gKiBDcmVhdGVzIGEgY29weSBvZiB0aGUgYXJndW1lbnQgaWYgaXQgaXMgYWxyZWFkeSBhbiBhcnJheS5cbiAqXG4gKiBUaGlzIGlzIG1vc3RseSB1c2VmdWwgaWRpb21hdGljYWxseTpcbiAqXG4gKiAgIHZhciBjcmVhdGVBcnJheUZyb21NaXhlZCA9IHJlcXVpcmUoJ2NyZWF0ZUFycmF5RnJvbU1peGVkJyk7XG4gKlxuICogICBmdW5jdGlvbiB0YWtlc09uZU9yTW9yZVRoaW5ncyh0aGluZ3MpIHtcbiAqICAgICB0aGluZ3MgPSBjcmVhdGVBcnJheUZyb21NaXhlZCh0aGluZ3MpO1xuICogICAgIC4uLlxuICogICB9XG4gKlxuICogVGhpcyBhbGxvd3MgeW91IHRvIHRyZWF0IGB0aGluZ3MnIGFzIGFuIGFycmF5LCBidXQgYWNjZXB0IHNjYWxhcnMgaW4gdGhlIEFQSS5cbiAqXG4gKiBJZiB5b3UgbmVlZCB0byBjb252ZXJ0IGFuIGFycmF5LWxpa2Ugb2JqZWN0LCBsaWtlIGBhcmd1bWVudHNgLCBpbnRvIGFuIGFycmF5XG4gKiB1c2UgdG9BcnJheSBpbnN0ZWFkLlxuICpcbiAqIEBwYXJhbSB7Kn0gb2JqXG4gKiBAcmV0dXJuIHthcnJheX1cbiAqL1xuZnVuY3Rpb24gY3JlYXRlQXJyYXlGcm9tTWl4ZWQob2JqKSB7XG4gIGlmICghaGFzQXJyYXlOYXR1cmUob2JqKSkge1xuICAgIHJldHVybiBbb2JqXTtcbiAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcbiAgICByZXR1cm4gb2JqLnNsaWNlKCk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHRvQXJyYXkob2JqKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZUFycmF5RnJvbU1peGVkO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vZmJqcy9saWIvY3JlYXRlQXJyYXlGcm9tTWl4ZWQuanMiLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAdHlwZWNoZWNrc1xuICovXG5cbi8qZXNsaW50LWRpc2FibGUgZmItd3d3L3Vuc2FmZS1odG1sKi9cblxudmFyIEV4ZWN1dGlvbkVudmlyb25tZW50ID0gcmVxdWlyZSgnLi9FeGVjdXRpb25FbnZpcm9ubWVudCcpO1xuXG52YXIgY3JlYXRlQXJyYXlGcm9tTWl4ZWQgPSByZXF1aXJlKCcuL2NyZWF0ZUFycmF5RnJvbU1peGVkJyk7XG52YXIgZ2V0TWFya3VwV3JhcCA9IHJlcXVpcmUoJy4vZ2V0TWFya3VwV3JhcCcpO1xudmFyIGludmFyaWFudCA9IHJlcXVpcmUoJy4vaW52YXJpYW50Jyk7XG5cbi8qKlxuICogRHVtbXkgY29udGFpbmVyIHVzZWQgdG8gcmVuZGVyIGFsbCBtYXJrdXAuXG4gKi9cbnZhciBkdW1teU5vZGUgPSBFeGVjdXRpb25FbnZpcm9ubWVudC5jYW5Vc2VET00gPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSA6IG51bGw7XG5cbi8qKlxuICogUGF0dGVybiB1c2VkIGJ5IGBnZXROb2RlTmFtZWAuXG4gKi9cbnZhciBub2RlTmFtZVBhdHRlcm4gPSAvXlxccyo8KFxcdyspLztcblxuLyoqXG4gKiBFeHRyYWN0cyB0aGUgYG5vZGVOYW1lYCBvZiB0aGUgZmlyc3QgZWxlbWVudCBpbiBhIHN0cmluZyBvZiBtYXJrdXAuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1hcmt1cCBTdHJpbmcgb2YgbWFya3VwLlxuICogQHJldHVybiB7P3N0cmluZ30gTm9kZSBuYW1lIG9mIHRoZSBzdXBwbGllZCBtYXJrdXAuXG4gKi9cbmZ1bmN0aW9uIGdldE5vZGVOYW1lKG1hcmt1cCkge1xuICB2YXIgbm9kZU5hbWVNYXRjaCA9IG1hcmt1cC5tYXRjaChub2RlTmFtZVBhdHRlcm4pO1xuICByZXR1cm4gbm9kZU5hbWVNYXRjaCAmJiBub2RlTmFtZU1hdGNoWzFdLnRvTG93ZXJDYXNlKCk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBjb250YWluaW5nIHRoZSBub2RlcyByZW5kZXJlZCBmcm9tIHRoZSBzdXBwbGllZCBtYXJrdXAuIFRoZVxuICogb3B0aW9uYWxseSBzdXBwbGllZCBgaGFuZGxlU2NyaXB0YCBmdW5jdGlvbiB3aWxsIGJlIGludm9rZWQgb25jZSBmb3IgZWFjaFxuICogPHNjcmlwdD4gZWxlbWVudCB0aGF0IGlzIHJlbmRlcmVkLiBJZiBubyBgaGFuZGxlU2NyaXB0YCBmdW5jdGlvbiBpcyBzdXBwbGllZCxcbiAqIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24gaWYgYW55IDxzY3JpcHQ+IGVsZW1lbnRzIGFyZSByZW5kZXJlZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbWFya3VwIEEgc3RyaW5nIG9mIHZhbGlkIEhUTUwgbWFya3VwLlxuICogQHBhcmFtIHs/ZnVuY3Rpb259IGhhbmRsZVNjcmlwdCBJbnZva2VkIG9uY2UgZm9yIGVhY2ggcmVuZGVyZWQgPHNjcmlwdD4uXG4gKiBAcmV0dXJuIHthcnJheTxET01FbGVtZW50fERPTVRleHROb2RlPn0gQW4gYXJyYXkgb2YgcmVuZGVyZWQgbm9kZXMuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZU5vZGVzRnJvbU1hcmt1cChtYXJrdXAsIGhhbmRsZVNjcmlwdCkge1xuICB2YXIgbm9kZSA9IGR1bW15Tm9kZTtcbiAgISEhZHVtbXlOb2RlID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IGludmFyaWFudChmYWxzZSwgJ2NyZWF0ZU5vZGVzRnJvbU1hcmt1cCBkdW1teSBub3QgaW5pdGlhbGl6ZWQnKSA6IGludmFyaWFudChmYWxzZSkgOiB2b2lkIDA7XG4gIHZhciBub2RlTmFtZSA9IGdldE5vZGVOYW1lKG1hcmt1cCk7XG5cbiAgdmFyIHdyYXAgPSBub2RlTmFtZSAmJiBnZXRNYXJrdXBXcmFwKG5vZGVOYW1lKTtcbiAgaWYgKHdyYXApIHtcbiAgICBub2RlLmlubmVySFRNTCA9IHdyYXBbMV0gKyBtYXJrdXAgKyB3cmFwWzJdO1xuXG4gICAgdmFyIHdyYXBEZXB0aCA9IHdyYXBbMF07XG4gICAgd2hpbGUgKHdyYXBEZXB0aC0tKSB7XG4gICAgICBub2RlID0gbm9kZS5sYXN0Q2hpbGQ7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIG5vZGUuaW5uZXJIVE1MID0gbWFya3VwO1xuICB9XG5cbiAgdmFyIHNjcmlwdHMgPSBub2RlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzY3JpcHQnKTtcbiAgaWYgKHNjcmlwdHMubGVuZ3RoKSB7XG4gICAgIWhhbmRsZVNjcmlwdCA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICdjcmVhdGVOb2Rlc0Zyb21NYXJrdXAoLi4uKTogVW5leHBlY3RlZCA8c2NyaXB0PiBlbGVtZW50IHJlbmRlcmVkLicpIDogaW52YXJpYW50KGZhbHNlKSA6IHZvaWQgMDtcbiAgICBjcmVhdGVBcnJheUZyb21NaXhlZChzY3JpcHRzKS5mb3JFYWNoKGhhbmRsZVNjcmlwdCk7XG4gIH1cblxuICB2YXIgbm9kZXMgPSBBcnJheS5mcm9tKG5vZGUuY2hpbGROb2Rlcyk7XG4gIHdoaWxlIChub2RlLmxhc3RDaGlsZCkge1xuICAgIG5vZGUucmVtb3ZlQ2hpbGQobm9kZS5sYXN0Q2hpbGQpO1xuICB9XG4gIHJldHVybiBub2Rlcztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVOb2Rlc0Zyb21NYXJrdXA7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9mYmpzL2xpYi9jcmVhdGVOb2Rlc0Zyb21NYXJrdXAuanMiLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuLyplc2xpbnQtZGlzYWJsZSBmYi13d3cvdW5zYWZlLWh0bWwgKi9cblxudmFyIEV4ZWN1dGlvbkVudmlyb25tZW50ID0gcmVxdWlyZSgnLi9FeGVjdXRpb25FbnZpcm9ubWVudCcpO1xuXG52YXIgaW52YXJpYW50ID0gcmVxdWlyZSgnLi9pbnZhcmlhbnQnKTtcblxuLyoqXG4gKiBEdW1teSBjb250YWluZXIgdXNlZCB0byBkZXRlY3Qgd2hpY2ggd3JhcHMgYXJlIG5lY2Vzc2FyeS5cbiAqL1xudmFyIGR1bW15Tm9kZSA9IEV4ZWN1dGlvbkVudmlyb25tZW50LmNhblVzZURPTSA/IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpIDogbnVsbDtcblxuLyoqXG4gKiBTb21lIGJyb3dzZXJzIGNhbm5vdCB1c2UgYGlubmVySFRNTGAgdG8gcmVuZGVyIGNlcnRhaW4gZWxlbWVudHMgc3RhbmRhbG9uZSxcbiAqIHNvIHdlIHdyYXAgdGhlbSwgcmVuZGVyIHRoZSB3cmFwcGVkIG5vZGVzLCB0aGVuIGV4dHJhY3QgdGhlIGRlc2lyZWQgbm9kZS5cbiAqXG4gKiBJbiBJRTgsIGNlcnRhaW4gZWxlbWVudHMgY2Fubm90IHJlbmRlciBhbG9uZSwgc28gd3JhcCBhbGwgZWxlbWVudHMgKCcqJykuXG4gKi9cblxudmFyIHNob3VsZFdyYXAgPSB7fTtcblxudmFyIHNlbGVjdFdyYXAgPSBbMSwgJzxzZWxlY3QgbXVsdGlwbGU9XCJ0cnVlXCI+JywgJzwvc2VsZWN0PiddO1xudmFyIHRhYmxlV3JhcCA9IFsxLCAnPHRhYmxlPicsICc8L3RhYmxlPiddO1xudmFyIHRyV3JhcCA9IFszLCAnPHRhYmxlPjx0Ym9keT48dHI+JywgJzwvdHI+PC90Ym9keT48L3RhYmxlPiddO1xuXG52YXIgc3ZnV3JhcCA9IFsxLCAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+JywgJzwvc3ZnPiddO1xuXG52YXIgbWFya3VwV3JhcCA9IHtcbiAgJyonOiBbMSwgJz88ZGl2PicsICc8L2Rpdj4nXSxcblxuICAnYXJlYSc6IFsxLCAnPG1hcD4nLCAnPC9tYXA+J10sXG4gICdjb2wnOiBbMiwgJzx0YWJsZT48dGJvZHk+PC90Ym9keT48Y29sZ3JvdXA+JywgJzwvY29sZ3JvdXA+PC90YWJsZT4nXSxcbiAgJ2xlZ2VuZCc6IFsxLCAnPGZpZWxkc2V0PicsICc8L2ZpZWxkc2V0PiddLFxuICAncGFyYW0nOiBbMSwgJzxvYmplY3Q+JywgJzwvb2JqZWN0PiddLFxuICAndHInOiBbMiwgJzx0YWJsZT48dGJvZHk+JywgJzwvdGJvZHk+PC90YWJsZT4nXSxcblxuICAnb3B0Z3JvdXAnOiBzZWxlY3RXcmFwLFxuICAnb3B0aW9uJzogc2VsZWN0V3JhcCxcblxuICAnY2FwdGlvbic6IHRhYmxlV3JhcCxcbiAgJ2NvbGdyb3VwJzogdGFibGVXcmFwLFxuICAndGJvZHknOiB0YWJsZVdyYXAsXG4gICd0Zm9vdCc6IHRhYmxlV3JhcCxcbiAgJ3RoZWFkJzogdGFibGVXcmFwLFxuXG4gICd0ZCc6IHRyV3JhcCxcbiAgJ3RoJzogdHJXcmFwXG59O1xuXG4vLyBJbml0aWFsaXplIHRoZSBTVkcgZWxlbWVudHMgc2luY2Ugd2Uga25vdyB0aGV5J2xsIGFsd2F5cyBuZWVkIHRvIGJlIHdyYXBwZWRcbi8vIGNvbnNpc3RlbnRseS4gSWYgdGhleSBhcmUgY3JlYXRlZCBpbnNpZGUgYSA8ZGl2PiB0aGV5IHdpbGwgYmUgaW5pdGlhbGl6ZWQgaW5cbi8vIHRoZSB3cm9uZyBuYW1lc3BhY2UgKGFuZCB3aWxsIG5vdCBkaXNwbGF5KS5cbnZhciBzdmdFbGVtZW50cyA9IFsnY2lyY2xlJywgJ2NsaXBQYXRoJywgJ2RlZnMnLCAnZWxsaXBzZScsICdnJywgJ2ltYWdlJywgJ2xpbmUnLCAnbGluZWFyR3JhZGllbnQnLCAnbWFzaycsICdwYXRoJywgJ3BhdHRlcm4nLCAncG9seWdvbicsICdwb2x5bGluZScsICdyYWRpYWxHcmFkaWVudCcsICdyZWN0JywgJ3N0b3AnLCAndGV4dCcsICd0c3BhbiddO1xuc3ZnRWxlbWVudHMuZm9yRWFjaChmdW5jdGlvbiAobm9kZU5hbWUpIHtcbiAgbWFya3VwV3JhcFtub2RlTmFtZV0gPSBzdmdXcmFwO1xuICBzaG91bGRXcmFwW25vZGVOYW1lXSA9IHRydWU7XG59KTtcblxuLyoqXG4gKiBHZXRzIHRoZSBtYXJrdXAgd3JhcCBjb25maWd1cmF0aW9uIGZvciB0aGUgc3VwcGxpZWQgYG5vZGVOYW1lYC5cbiAqXG4gKiBOT1RFOiBUaGlzIGxhemlseSBkZXRlY3RzIHdoaWNoIHdyYXBzIGFyZSBuZWNlc3NhcnkgZm9yIHRoZSBjdXJyZW50IGJyb3dzZXIuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG5vZGVOYW1lIExvd2VyY2FzZSBgbm9kZU5hbWVgLlxuICogQHJldHVybiB7P2FycmF5fSBNYXJrdXAgd3JhcCBjb25maWd1cmF0aW9uLCBpZiBhcHBsaWNhYmxlLlxuICovXG5mdW5jdGlvbiBnZXRNYXJrdXBXcmFwKG5vZGVOYW1lKSB7XG4gICEhIWR1bW15Tm9kZSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICdNYXJrdXAgd3JhcHBpbmcgbm9kZSBub3QgaW5pdGlhbGl6ZWQnKSA6IGludmFyaWFudChmYWxzZSkgOiB2b2lkIDA7XG4gIGlmICghbWFya3VwV3JhcC5oYXNPd25Qcm9wZXJ0eShub2RlTmFtZSkpIHtcbiAgICBub2RlTmFtZSA9ICcqJztcbiAgfVxuICBpZiAoIXNob3VsZFdyYXAuaGFzT3duUHJvcGVydHkobm9kZU5hbWUpKSB7XG4gICAgaWYgKG5vZGVOYW1lID09PSAnKicpIHtcbiAgICAgIGR1bW15Tm9kZS5pbm5lckhUTUwgPSAnPGxpbmsgLz4nO1xuICAgIH0gZWxzZSB7XG4gICAgICBkdW1teU5vZGUuaW5uZXJIVE1MID0gJzwnICsgbm9kZU5hbWUgKyAnPjwvJyArIG5vZGVOYW1lICsgJz4nO1xuICAgIH1cbiAgICBzaG91bGRXcmFwW25vZGVOYW1lXSA9ICFkdW1teU5vZGUuZmlyc3RDaGlsZDtcbiAgfVxuICByZXR1cm4gc2hvdWxkV3JhcFtub2RlTmFtZV0gPyBtYXJrdXBXcmFwW25vZGVOYW1lXSA6IG51bGw7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0TWFya3VwV3JhcDtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L2ZianMvbGliL2dldE1hcmt1cFdyYXAuanMiLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHR5cGVjaGVja3NcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbi8qKlxuICogR2V0cyB0aGUgc2Nyb2xsIHBvc2l0aW9uIG9mIHRoZSBzdXBwbGllZCBlbGVtZW50IG9yIHdpbmRvdy5cbiAqXG4gKiBUaGUgcmV0dXJuIHZhbHVlcyBhcmUgdW5ib3VuZGVkLCB1bmxpa2UgYGdldFNjcm9sbFBvc2l0aW9uYC4gVGhpcyBtZWFucyB0aGV5XG4gKiBtYXkgYmUgbmVnYXRpdmUgb3IgZXhjZWVkIHRoZSBlbGVtZW50IGJvdW5kYXJpZXMgKHdoaWNoIGlzIHBvc3NpYmxlIHVzaW5nXG4gKiBpbmVydGlhbCBzY3JvbGxpbmcpLlxuICpcbiAqIEBwYXJhbSB7RE9NV2luZG93fERPTUVsZW1lbnR9IHNjcm9sbGFibGVcbiAqIEByZXR1cm4ge29iamVjdH0gTWFwIHdpdGggYHhgIGFuZCBgeWAga2V5cy5cbiAqL1xuXG5mdW5jdGlvbiBnZXRVbmJvdW5kZWRTY3JvbGxQb3NpdGlvbihzY3JvbGxhYmxlKSB7XG4gIGlmIChzY3JvbGxhYmxlLldpbmRvdyAmJiBzY3JvbGxhYmxlIGluc3RhbmNlb2Ygc2Nyb2xsYWJsZS5XaW5kb3cpIHtcbiAgICByZXR1cm4ge1xuICAgICAgeDogc2Nyb2xsYWJsZS5wYWdlWE9mZnNldCB8fCBzY3JvbGxhYmxlLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0LFxuICAgICAgeTogc2Nyb2xsYWJsZS5wYWdlWU9mZnNldCB8fCBzY3JvbGxhYmxlLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3BcbiAgICB9O1xuICB9XG4gIHJldHVybiB7XG4gICAgeDogc2Nyb2xsYWJsZS5zY3JvbGxMZWZ0LFxuICAgIHk6IHNjcm9sbGFibGUuc2Nyb2xsVG9wXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0VW5ib3VuZGVkU2Nyb2xsUG9zaXRpb247XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9mYmpzL2xpYi9nZXRVbmJvdW5kZWRTY3JvbGxQb3NpdGlvbi5qcyIsIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEB0eXBlY2hlY2tzXG4gKi9cblxudmFyIF91cHBlcmNhc2VQYXR0ZXJuID0gLyhbQS1aXSkvZztcblxuLyoqXG4gKiBIeXBoZW5hdGVzIGEgY2FtZWxjYXNlZCBzdHJpbmcsIGZvciBleGFtcGxlOlxuICpcbiAqICAgPiBoeXBoZW5hdGUoJ2JhY2tncm91bmRDb2xvcicpXG4gKiAgIDwgXCJiYWNrZ3JvdW5kLWNvbG9yXCJcbiAqXG4gKiBGb3IgQ1NTIHN0eWxlIG5hbWVzLCB1c2UgYGh5cGhlbmF0ZVN0eWxlTmFtZWAgaW5zdGVhZCB3aGljaCB3b3JrcyBwcm9wZXJseVxuICogd2l0aCBhbGwgdmVuZG9yIHByZWZpeGVzLCBpbmNsdWRpbmcgYG1zYC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGh5cGhlbmF0ZShzdHJpbmcpIHtcbiAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKF91cHBlcmNhc2VQYXR0ZXJuLCAnLSQxJykudG9Mb3dlckNhc2UoKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoeXBoZW5hdGU7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9mYmpzL2xpYi9oeXBoZW5hdGUuanMiLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHR5cGVjaGVja3NcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBoeXBoZW5hdGUgPSByZXF1aXJlKCcuL2h5cGhlbmF0ZScpO1xuXG52YXIgbXNQYXR0ZXJuID0gL15tcy0vO1xuXG4vKipcbiAqIEh5cGhlbmF0ZXMgYSBjYW1lbGNhc2VkIENTUyBwcm9wZXJ0eSBuYW1lLCBmb3IgZXhhbXBsZTpcbiAqXG4gKiAgID4gaHlwaGVuYXRlU3R5bGVOYW1lKCdiYWNrZ3JvdW5kQ29sb3InKVxuICogICA8IFwiYmFja2dyb3VuZC1jb2xvclwiXG4gKiAgID4gaHlwaGVuYXRlU3R5bGVOYW1lKCdNb3pUcmFuc2l0aW9uJylcbiAqICAgPCBcIi1tb3otdHJhbnNpdGlvblwiXG4gKiAgID4gaHlwaGVuYXRlU3R5bGVOYW1lKCdtc1RyYW5zaXRpb24nKVxuICogICA8IFwiLW1zLXRyYW5zaXRpb25cIlxuICpcbiAqIEFzIE1vZGVybml6ciBzdWdnZXN0cyAoaHR0cDovL21vZGVybml6ci5jb20vZG9jcy8jcHJlZml4ZWQpLCBhbiBgbXNgIHByZWZpeFxuICogaXMgY29udmVydGVkIHRvIGAtbXMtYC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGh5cGhlbmF0ZVN0eWxlTmFtZShzdHJpbmcpIHtcbiAgcmV0dXJuIGh5cGhlbmF0ZShzdHJpbmcpLnJlcGxhY2UobXNQYXR0ZXJuLCAnLW1zLScpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGh5cGhlbmF0ZVN0eWxlTmFtZTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L2ZianMvbGliL2h5cGhlbmF0ZVN0eWxlTmFtZS5qcyIsIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEB0eXBlY2hlY2tzXG4gKi9cblxuLyoqXG4gKiBAcGFyYW0geyp9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGNoZWNrLlxuICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciBvciBub3QgdGhlIG9iamVjdCBpcyBhIERPTSBub2RlLlxuICovXG5mdW5jdGlvbiBpc05vZGUob2JqZWN0KSB7XG4gIHZhciBkb2MgPSBvYmplY3QgPyBvYmplY3Qub3duZXJEb2N1bWVudCB8fCBvYmplY3QgOiBkb2N1bWVudDtcbiAgdmFyIGRlZmF1bHRWaWV3ID0gZG9jLmRlZmF1bHRWaWV3IHx8IHdpbmRvdztcbiAgcmV0dXJuICEhKG9iamVjdCAmJiAodHlwZW9mIGRlZmF1bHRWaWV3Lk5vZGUgPT09ICdmdW5jdGlvbicgPyBvYmplY3QgaW5zdGFuY2VvZiBkZWZhdWx0Vmlldy5Ob2RlIDogdHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG9iamVjdC5ub2RlVHlwZSA9PT0gJ251bWJlcicgJiYgdHlwZW9mIG9iamVjdC5ub2RlTmFtZSA9PT0gJ3N0cmluZycpKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc05vZGU7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9mYmpzL2xpYi9pc05vZGUuanMiLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAdHlwZWNoZWNrc1xuICovXG5cbnZhciBpc05vZGUgPSByZXF1aXJlKCcuL2lzTm9kZScpO1xuXG4vKipcbiAqIEBwYXJhbSB7Kn0gb2JqZWN0IFRoZSBvYmplY3QgdG8gY2hlY2suXG4gKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIG9yIG5vdCB0aGUgb2JqZWN0IGlzIGEgRE9NIHRleHQgbm9kZS5cbiAqL1xuZnVuY3Rpb24gaXNUZXh0Tm9kZShvYmplY3QpIHtcbiAgcmV0dXJuIGlzTm9kZShvYmplY3QpICYmIG9iamVjdC5ub2RlVHlwZSA9PSAzO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzVGV4dE5vZGU7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9mYmpzL2xpYi9pc1RleHROb2RlLmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIFxuICogQHR5cGVjaGVja3Mgc3RhdGljLW9ubHlcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbi8qKlxuICogTWVtb2l6ZXMgdGhlIHJldHVybiB2YWx1ZSBvZiBhIGZ1bmN0aW9uIHRoYXQgYWNjZXB0cyBvbmUgc3RyaW5nIGFyZ3VtZW50LlxuICovXG5cbmZ1bmN0aW9uIG1lbW9pemVTdHJpbmdPbmx5KGNhbGxiYWNrKSB7XG4gIHZhciBjYWNoZSA9IHt9O1xuICByZXR1cm4gZnVuY3Rpb24gKHN0cmluZykge1xuICAgIGlmICghY2FjaGUuaGFzT3duUHJvcGVydHkoc3RyaW5nKSkge1xuICAgICAgY2FjaGVbc3RyaW5nXSA9IGNhbGxiYWNrLmNhbGwodGhpcywgc3RyaW5nKTtcbiAgICB9XG4gICAgcmV0dXJuIGNhY2hlW3N0cmluZ107XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWVtb2l6ZVN0cmluZ09ubHk7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9mYmpzL2xpYi9tZW1vaXplU3RyaW5nT25seS5qcyIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAdHlwZWNoZWNrc1xuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIEV4ZWN1dGlvbkVudmlyb25tZW50ID0gcmVxdWlyZSgnLi9FeGVjdXRpb25FbnZpcm9ubWVudCcpO1xuXG52YXIgcGVyZm9ybWFuY2U7XG5cbmlmIChFeGVjdXRpb25FbnZpcm9ubWVudC5jYW5Vc2VET00pIHtcbiAgcGVyZm9ybWFuY2UgPSB3aW5kb3cucGVyZm9ybWFuY2UgfHwgd2luZG93Lm1zUGVyZm9ybWFuY2UgfHwgd2luZG93LndlYmtpdFBlcmZvcm1hbmNlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHBlcmZvcm1hbmNlIHx8IHt9O1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vZmJqcy9saWIvcGVyZm9ybWFuY2UuanMiLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAdHlwZWNoZWNrc1xuICovXG5cbnZhciBwZXJmb3JtYW5jZSA9IHJlcXVpcmUoJy4vcGVyZm9ybWFuY2UnKTtcblxudmFyIHBlcmZvcm1hbmNlTm93O1xuXG4vKipcbiAqIERldGVjdCBpZiB3ZSBjYW4gdXNlIGB3aW5kb3cucGVyZm9ybWFuY2Uubm93KClgIGFuZCBncmFjZWZ1bGx5IGZhbGxiYWNrIHRvXG4gKiBgRGF0ZS5ub3coKWAgaWYgaXQgZG9lc24ndCBleGlzdC4gV2UgbmVlZCB0byBzdXBwb3J0IEZpcmVmb3ggPCAxNSBmb3Igbm93XG4gKiBiZWNhdXNlIG9mIEZhY2Vib29rJ3MgdGVzdGluZyBpbmZyYXN0cnVjdHVyZS5cbiAqL1xuaWYgKHBlcmZvcm1hbmNlLm5vdykge1xuICBwZXJmb3JtYW5jZU5vdyA9IGZ1bmN0aW9uIHBlcmZvcm1hbmNlTm93KCkge1xuICAgIHJldHVybiBwZXJmb3JtYW5jZS5ub3coKTtcbiAgfTtcbn0gZWxzZSB7XG4gIHBlcmZvcm1hbmNlTm93ID0gZnVuY3Rpb24gcGVyZm9ybWFuY2VOb3coKSB7XG4gICAgcmV0dXJuIERhdGUubm93KCk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcGVyZm9ybWFuY2VOb3c7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9mYmpzL2xpYi9wZXJmb3JtYW5jZU5vdy5qcyIsIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxudmFyIF90eXBlb2YgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIiA/IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH0gOiBmdW5jdGlvbiAob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9O1xuXG52YXIgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xuXG52YXIgX3dhcm5pbmcgPSByZXF1aXJlKCd3YXJuaW5nJyk7XG5cbnZhciBfd2FybmluZzIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF93YXJuaW5nKTtcblxudmFyIF9pbnZhcmlhbnQgPSByZXF1aXJlKCdpbnZhcmlhbnQnKTtcblxudmFyIF9pbnZhcmlhbnQyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfaW52YXJpYW50KTtcblxudmFyIF9Mb2NhdGlvblV0aWxzID0gcmVxdWlyZSgnLi9Mb2NhdGlvblV0aWxzJyk7XG5cbnZhciBfUGF0aFV0aWxzID0gcmVxdWlyZSgnLi9QYXRoVXRpbHMnKTtcblxudmFyIF9jcmVhdGVUcmFuc2l0aW9uTWFuYWdlciA9IHJlcXVpcmUoJy4vY3JlYXRlVHJhbnNpdGlvbk1hbmFnZXInKTtcblxudmFyIF9jcmVhdGVUcmFuc2l0aW9uTWFuYWdlcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9jcmVhdGVUcmFuc2l0aW9uTWFuYWdlcik7XG5cbnZhciBfRE9NVXRpbHMgPSByZXF1aXJlKCcuL0RPTVV0aWxzJyk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbnZhciBQb3BTdGF0ZUV2ZW50ID0gJ3BvcHN0YXRlJztcbnZhciBIYXNoQ2hhbmdlRXZlbnQgPSAnaGFzaGNoYW5nZSc7XG5cbnZhciBnZXRIaXN0b3J5U3RhdGUgPSBmdW5jdGlvbiBnZXRIaXN0b3J5U3RhdGUoKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHdpbmRvdy5oaXN0b3J5LnN0YXRlIHx8IHt9O1xuICB9IGNhdGNoIChlKSB7XG4gICAgLy8gSUUgMTEgc29tZXRpbWVzIHRocm93cyB3aGVuIGFjY2Vzc2luZyB3aW5kb3cuaGlzdG9yeS5zdGF0ZVxuICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vUmVhY3RUcmFpbmluZy9oaXN0b3J5L3B1bGwvMjg5XG4gICAgcmV0dXJuIHt9O1xuICB9XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBoaXN0b3J5IG9iamVjdCB0aGF0IHVzZXMgdGhlIEhUTUw1IGhpc3RvcnkgQVBJIGluY2x1ZGluZ1xuICogcHVzaFN0YXRlLCByZXBsYWNlU3RhdGUsIGFuZCB0aGUgcG9wc3RhdGUgZXZlbnQuXG4gKi9cbnZhciBjcmVhdGVCcm93c2VySGlzdG9yeSA9IGZ1bmN0aW9uIGNyZWF0ZUJyb3dzZXJIaXN0b3J5KCkge1xuICB2YXIgcHJvcHMgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9O1xuXG4gICgwLCBfaW52YXJpYW50Mi5kZWZhdWx0KShfRE9NVXRpbHMuY2FuVXNlRE9NLCAnQnJvd3NlciBoaXN0b3J5IG5lZWRzIGEgRE9NJyk7XG5cbiAgdmFyIGdsb2JhbEhpc3RvcnkgPSB3aW5kb3cuaGlzdG9yeTtcbiAgdmFyIGNhblVzZUhpc3RvcnkgPSAoMCwgX0RPTVV0aWxzLnN1cHBvcnRzSGlzdG9yeSkoKTtcbiAgdmFyIG5lZWRzSGFzaENoYW5nZUxpc3RlbmVyID0gISgwLCBfRE9NVXRpbHMuc3VwcG9ydHNQb3BTdGF0ZU9uSGFzaENoYW5nZSkoKTtcblxuICB2YXIgX3Byb3BzJGZvcmNlUmVmcmVzaCA9IHByb3BzLmZvcmNlUmVmcmVzaCxcbiAgICAgIGZvcmNlUmVmcmVzaCA9IF9wcm9wcyRmb3JjZVJlZnJlc2ggPT09IHVuZGVmaW5lZCA/IGZhbHNlIDogX3Byb3BzJGZvcmNlUmVmcmVzaCxcbiAgICAgIF9wcm9wcyRnZXRVc2VyQ29uZmlybSA9IHByb3BzLmdldFVzZXJDb25maXJtYXRpb24sXG4gICAgICBnZXRVc2VyQ29uZmlybWF0aW9uID0gX3Byb3BzJGdldFVzZXJDb25maXJtID09PSB1bmRlZmluZWQgPyBfRE9NVXRpbHMuZ2V0Q29uZmlybWF0aW9uIDogX3Byb3BzJGdldFVzZXJDb25maXJtLFxuICAgICAgX3Byb3BzJGtleUxlbmd0aCA9IHByb3BzLmtleUxlbmd0aCxcbiAgICAgIGtleUxlbmd0aCA9IF9wcm9wcyRrZXlMZW5ndGggPT09IHVuZGVmaW5lZCA/IDYgOiBfcHJvcHMka2V5TGVuZ3RoO1xuXG4gIHZhciBiYXNlbmFtZSA9IHByb3BzLmJhc2VuYW1lID8gKDAsIF9QYXRoVXRpbHMuc3RyaXBUcmFpbGluZ1NsYXNoKSgoMCwgX1BhdGhVdGlscy5hZGRMZWFkaW5nU2xhc2gpKHByb3BzLmJhc2VuYW1lKSkgOiAnJztcblxuICB2YXIgZ2V0RE9NTG9jYXRpb24gPSBmdW5jdGlvbiBnZXRET01Mb2NhdGlvbihoaXN0b3J5U3RhdGUpIHtcbiAgICB2YXIgX3JlZiA9IGhpc3RvcnlTdGF0ZSB8fCB7fSxcbiAgICAgICAga2V5ID0gX3JlZi5rZXksXG4gICAgICAgIHN0YXRlID0gX3JlZi5zdGF0ZTtcblxuICAgIHZhciBfd2luZG93JGxvY2F0aW9uID0gd2luZG93LmxvY2F0aW9uLFxuICAgICAgICBwYXRobmFtZSA9IF93aW5kb3ckbG9jYXRpb24ucGF0aG5hbWUsXG4gICAgICAgIHNlYXJjaCA9IF93aW5kb3ckbG9jYXRpb24uc2VhcmNoLFxuICAgICAgICBoYXNoID0gX3dpbmRvdyRsb2NhdGlvbi5oYXNoO1xuXG5cbiAgICB2YXIgcGF0aCA9IHBhdGhuYW1lICsgc2VhcmNoICsgaGFzaDtcblxuICAgICgwLCBfd2FybmluZzIuZGVmYXVsdCkoIWJhc2VuYW1lIHx8ICgwLCBfUGF0aFV0aWxzLmhhc0Jhc2VuYW1lKShwYXRoLCBiYXNlbmFtZSksICdZb3UgYXJlIGF0dGVtcHRpbmcgdG8gdXNlIGEgYmFzZW5hbWUgb24gYSBwYWdlIHdob3NlIFVSTCBwYXRoIGRvZXMgbm90IGJlZ2luICcgKyAnd2l0aCB0aGUgYmFzZW5hbWUuIEV4cGVjdGVkIHBhdGggXCInICsgcGF0aCArICdcIiB0byBiZWdpbiB3aXRoIFwiJyArIGJhc2VuYW1lICsgJ1wiLicpO1xuXG4gICAgaWYgKGJhc2VuYW1lKSBwYXRoID0gKDAsIF9QYXRoVXRpbHMuc3RyaXBCYXNlbmFtZSkocGF0aCwgYmFzZW5hbWUpO1xuXG4gICAgcmV0dXJuICgwLCBfTG9jYXRpb25VdGlscy5jcmVhdGVMb2NhdGlvbikocGF0aCwgc3RhdGUsIGtleSk7XG4gIH07XG5cbiAgdmFyIGNyZWF0ZUtleSA9IGZ1bmN0aW9uIGNyZWF0ZUtleSgpIHtcbiAgICByZXR1cm4gTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyKDIsIGtleUxlbmd0aCk7XG4gIH07XG5cbiAgdmFyIHRyYW5zaXRpb25NYW5hZ2VyID0gKDAsIF9jcmVhdGVUcmFuc2l0aW9uTWFuYWdlcjIuZGVmYXVsdCkoKTtcblxuICB2YXIgc2V0U3RhdGUgPSBmdW5jdGlvbiBzZXRTdGF0ZShuZXh0U3RhdGUpIHtcbiAgICBfZXh0ZW5kcyhoaXN0b3J5LCBuZXh0U3RhdGUpO1xuXG4gICAgaGlzdG9yeS5sZW5ndGggPSBnbG9iYWxIaXN0b3J5Lmxlbmd0aDtcblxuICAgIHRyYW5zaXRpb25NYW5hZ2VyLm5vdGlmeUxpc3RlbmVycyhoaXN0b3J5LmxvY2F0aW9uLCBoaXN0b3J5LmFjdGlvbik7XG4gIH07XG5cbiAgdmFyIGhhbmRsZVBvcFN0YXRlID0gZnVuY3Rpb24gaGFuZGxlUG9wU3RhdGUoZXZlbnQpIHtcbiAgICAvLyBJZ25vcmUgZXh0cmFuZW91cyBwb3BzdGF0ZSBldmVudHMgaW4gV2ViS2l0LlxuICAgIGlmICgoMCwgX0RPTVV0aWxzLmlzRXh0cmFuZW91c1BvcHN0YXRlRXZlbnQpKGV2ZW50KSkgcmV0dXJuO1xuXG4gICAgaGFuZGxlUG9wKGdldERPTUxvY2F0aW9uKGV2ZW50LnN0YXRlKSk7XG4gIH07XG5cbiAgdmFyIGhhbmRsZUhhc2hDaGFuZ2UgPSBmdW5jdGlvbiBoYW5kbGVIYXNoQ2hhbmdlKCkge1xuICAgIGhhbmRsZVBvcChnZXRET01Mb2NhdGlvbihnZXRIaXN0b3J5U3RhdGUoKSkpO1xuICB9O1xuXG4gIHZhciBmb3JjZU5leHRQb3AgPSBmYWxzZTtcblxuICB2YXIgaGFuZGxlUG9wID0gZnVuY3Rpb24gaGFuZGxlUG9wKGxvY2F0aW9uKSB7XG4gICAgaWYgKGZvcmNlTmV4dFBvcCkge1xuICAgICAgZm9yY2VOZXh0UG9wID0gZmFsc2U7XG4gICAgICBzZXRTdGF0ZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgYWN0aW9uID0gJ1BPUCc7XG5cbiAgICAgIHRyYW5zaXRpb25NYW5hZ2VyLmNvbmZpcm1UcmFuc2l0aW9uVG8obG9jYXRpb24sIGFjdGlvbiwgZ2V0VXNlckNvbmZpcm1hdGlvbiwgZnVuY3Rpb24gKG9rKSB7XG4gICAgICAgIGlmIChvaykge1xuICAgICAgICAgIHNldFN0YXRlKHsgYWN0aW9uOiBhY3Rpb24sIGxvY2F0aW9uOiBsb2NhdGlvbiB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXZlcnRQb3AobG9jYXRpb24pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgdmFyIHJldmVydFBvcCA9IGZ1bmN0aW9uIHJldmVydFBvcChmcm9tTG9jYXRpb24pIHtcbiAgICB2YXIgdG9Mb2NhdGlvbiA9IGhpc3RvcnkubG9jYXRpb247XG5cbiAgICAvLyBUT0RPOiBXZSBjb3VsZCBwcm9iYWJseSBtYWtlIHRoaXMgbW9yZSByZWxpYWJsZSBieVxuICAgIC8vIGtlZXBpbmcgYSBsaXN0IG9mIGtleXMgd2UndmUgc2VlbiBpbiBzZXNzaW9uU3RvcmFnZS5cbiAgICAvLyBJbnN0ZWFkLCB3ZSBqdXN0IGRlZmF1bHQgdG8gMCBmb3Iga2V5cyB3ZSBkb24ndCBrbm93LlxuXG4gICAgdmFyIHRvSW5kZXggPSBhbGxLZXlzLmluZGV4T2YodG9Mb2NhdGlvbi5rZXkpO1xuXG4gICAgaWYgKHRvSW5kZXggPT09IC0xKSB0b0luZGV4ID0gMDtcblxuICAgIHZhciBmcm9tSW5kZXggPSBhbGxLZXlzLmluZGV4T2YoZnJvbUxvY2F0aW9uLmtleSk7XG5cbiAgICBpZiAoZnJvbUluZGV4ID09PSAtMSkgZnJvbUluZGV4ID0gMDtcblxuICAgIHZhciBkZWx0YSA9IHRvSW5kZXggLSBmcm9tSW5kZXg7XG5cbiAgICBpZiAoZGVsdGEpIHtcbiAgICAgIGZvcmNlTmV4dFBvcCA9IHRydWU7XG4gICAgICBnbyhkZWx0YSk7XG4gICAgfVxuICB9O1xuXG4gIHZhciBpbml0aWFsTG9jYXRpb24gPSBnZXRET01Mb2NhdGlvbihnZXRIaXN0b3J5U3RhdGUoKSk7XG4gIHZhciBhbGxLZXlzID0gW2luaXRpYWxMb2NhdGlvbi5rZXldO1xuXG4gIC8vIFB1YmxpYyBpbnRlcmZhY2VcblxuICB2YXIgY3JlYXRlSHJlZiA9IGZ1bmN0aW9uIGNyZWF0ZUhyZWYobG9jYXRpb24pIHtcbiAgICByZXR1cm4gYmFzZW5hbWUgKyAoMCwgX1BhdGhVdGlscy5jcmVhdGVQYXRoKShsb2NhdGlvbik7XG4gIH07XG5cbiAgdmFyIHB1c2ggPSBmdW5jdGlvbiBwdXNoKHBhdGgsIHN0YXRlKSB7XG4gICAgKDAsIF93YXJuaW5nMi5kZWZhdWx0KSghKCh0eXBlb2YgcGF0aCA9PT0gJ3VuZGVmaW5lZCcgPyAndW5kZWZpbmVkJyA6IF90eXBlb2YocGF0aCkpID09PSAnb2JqZWN0JyAmJiBwYXRoLnN0YXRlICE9PSB1bmRlZmluZWQgJiYgc3RhdGUgIT09IHVuZGVmaW5lZCksICdZb3Ugc2hvdWxkIGF2b2lkIHByb3ZpZGluZyBhIDJuZCBzdGF0ZSBhcmd1bWVudCB0byBwdXNoIHdoZW4gdGhlIDFzdCAnICsgJ2FyZ3VtZW50IGlzIGEgbG9jYXRpb24tbGlrZSBvYmplY3QgdGhhdCBhbHJlYWR5IGhhcyBzdGF0ZTsgaXQgaXMgaWdub3JlZCcpO1xuXG4gICAgdmFyIGFjdGlvbiA9ICdQVVNIJztcbiAgICB2YXIgbG9jYXRpb24gPSAoMCwgX0xvY2F0aW9uVXRpbHMuY3JlYXRlTG9jYXRpb24pKHBhdGgsIHN0YXRlLCBjcmVhdGVLZXkoKSwgaGlzdG9yeS5sb2NhdGlvbik7XG5cbiAgICB0cmFuc2l0aW9uTWFuYWdlci5jb25maXJtVHJhbnNpdGlvblRvKGxvY2F0aW9uLCBhY3Rpb24sIGdldFVzZXJDb25maXJtYXRpb24sIGZ1bmN0aW9uIChvaykge1xuICAgICAgaWYgKCFvaykgcmV0dXJuO1xuXG4gICAgICB2YXIgaHJlZiA9IGNyZWF0ZUhyZWYobG9jYXRpb24pO1xuICAgICAgdmFyIGtleSA9IGxvY2F0aW9uLmtleSxcbiAgICAgICAgICBzdGF0ZSA9IGxvY2F0aW9uLnN0YXRlO1xuXG5cbiAgICAgIGlmIChjYW5Vc2VIaXN0b3J5KSB7XG4gICAgICAgIGdsb2JhbEhpc3RvcnkucHVzaFN0YXRlKHsga2V5OiBrZXksIHN0YXRlOiBzdGF0ZSB9LCBudWxsLCBocmVmKTtcblxuICAgICAgICBpZiAoZm9yY2VSZWZyZXNoKSB7XG4gICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSBocmVmO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciBwcmV2SW5kZXggPSBhbGxLZXlzLmluZGV4T2YoaGlzdG9yeS5sb2NhdGlvbi5rZXkpO1xuICAgICAgICAgIHZhciBuZXh0S2V5cyA9IGFsbEtleXMuc2xpY2UoMCwgcHJldkluZGV4ID09PSAtMSA/IDAgOiBwcmV2SW5kZXggKyAxKTtcblxuICAgICAgICAgIG5leHRLZXlzLnB1c2gobG9jYXRpb24ua2V5KTtcbiAgICAgICAgICBhbGxLZXlzID0gbmV4dEtleXM7XG5cbiAgICAgICAgICBzZXRTdGF0ZSh7IGFjdGlvbjogYWN0aW9uLCBsb2NhdGlvbjogbG9jYXRpb24gfSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgICgwLCBfd2FybmluZzIuZGVmYXVsdCkoc3RhdGUgPT09IHVuZGVmaW5lZCwgJ0Jyb3dzZXIgaGlzdG9yeSBjYW5ub3QgcHVzaCBzdGF0ZSBpbiBicm93c2VycyB0aGF0IGRvIG5vdCBzdXBwb3J0IEhUTUw1IGhpc3RvcnknKTtcblxuICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IGhyZWY7XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG5cbiAgdmFyIHJlcGxhY2UgPSBmdW5jdGlvbiByZXBsYWNlKHBhdGgsIHN0YXRlKSB7XG4gICAgKDAsIF93YXJuaW5nMi5kZWZhdWx0KSghKCh0eXBlb2YgcGF0aCA9PT0gJ3VuZGVmaW5lZCcgPyAndW5kZWZpbmVkJyA6IF90eXBlb2YocGF0aCkpID09PSAnb2JqZWN0JyAmJiBwYXRoLnN0YXRlICE9PSB1bmRlZmluZWQgJiYgc3RhdGUgIT09IHVuZGVmaW5lZCksICdZb3Ugc2hvdWxkIGF2b2lkIHByb3ZpZGluZyBhIDJuZCBzdGF0ZSBhcmd1bWVudCB0byByZXBsYWNlIHdoZW4gdGhlIDFzdCAnICsgJ2FyZ3VtZW50IGlzIGEgbG9jYXRpb24tbGlrZSBvYmplY3QgdGhhdCBhbHJlYWR5IGhhcyBzdGF0ZTsgaXQgaXMgaWdub3JlZCcpO1xuXG4gICAgdmFyIGFjdGlvbiA9ICdSRVBMQUNFJztcbiAgICB2YXIgbG9jYXRpb24gPSAoMCwgX0xvY2F0aW9uVXRpbHMuY3JlYXRlTG9jYXRpb24pKHBhdGgsIHN0YXRlLCBjcmVhdGVLZXkoKSwgaGlzdG9yeS5sb2NhdGlvbik7XG5cbiAgICB0cmFuc2l0aW9uTWFuYWdlci5jb25maXJtVHJhbnNpdGlvblRvKGxvY2F0aW9uLCBhY3Rpb24sIGdldFVzZXJDb25maXJtYXRpb24sIGZ1bmN0aW9uIChvaykge1xuICAgICAgaWYgKCFvaykgcmV0dXJuO1xuXG4gICAgICB2YXIgaHJlZiA9IGNyZWF0ZUhyZWYobG9jYXRpb24pO1xuICAgICAgdmFyIGtleSA9IGxvY2F0aW9uLmtleSxcbiAgICAgICAgICBzdGF0ZSA9IGxvY2F0aW9uLnN0YXRlO1xuXG5cbiAgICAgIGlmIChjYW5Vc2VIaXN0b3J5KSB7XG4gICAgICAgIGdsb2JhbEhpc3RvcnkucmVwbGFjZVN0YXRlKHsga2V5OiBrZXksIHN0YXRlOiBzdGF0ZSB9LCBudWxsLCBocmVmKTtcblxuICAgICAgICBpZiAoZm9yY2VSZWZyZXNoKSB7XG4gICAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlcGxhY2UoaHJlZik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIHByZXZJbmRleCA9IGFsbEtleXMuaW5kZXhPZihoaXN0b3J5LmxvY2F0aW9uLmtleSk7XG5cbiAgICAgICAgICBpZiAocHJldkluZGV4ICE9PSAtMSkgYWxsS2V5c1twcmV2SW5kZXhdID0gbG9jYXRpb24ua2V5O1xuXG4gICAgICAgICAgc2V0U3RhdGUoeyBhY3Rpb246IGFjdGlvbiwgbG9jYXRpb246IGxvY2F0aW9uIH0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAoMCwgX3dhcm5pbmcyLmRlZmF1bHQpKHN0YXRlID09PSB1bmRlZmluZWQsICdCcm93c2VyIGhpc3RvcnkgY2Fubm90IHJlcGxhY2Ugc3RhdGUgaW4gYnJvd3NlcnMgdGhhdCBkbyBub3Qgc3VwcG9ydCBIVE1MNSBoaXN0b3J5Jyk7XG5cbiAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlcGxhY2UoaHJlZik7XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG5cbiAgdmFyIGdvID0gZnVuY3Rpb24gZ28obikge1xuICAgIGdsb2JhbEhpc3RvcnkuZ28obik7XG4gIH07XG5cbiAgdmFyIGdvQmFjayA9IGZ1bmN0aW9uIGdvQmFjaygpIHtcbiAgICByZXR1cm4gZ28oLTEpO1xuICB9O1xuXG4gIHZhciBnb0ZvcndhcmQgPSBmdW5jdGlvbiBnb0ZvcndhcmQoKSB7XG4gICAgcmV0dXJuIGdvKDEpO1xuICB9O1xuXG4gIHZhciBsaXN0ZW5lckNvdW50ID0gMDtcblxuICB2YXIgY2hlY2tET01MaXN0ZW5lcnMgPSBmdW5jdGlvbiBjaGVja0RPTUxpc3RlbmVycyhkZWx0YSkge1xuICAgIGxpc3RlbmVyQ291bnQgKz0gZGVsdGE7XG5cbiAgICBpZiAobGlzdGVuZXJDb3VudCA9PT0gMSkge1xuICAgICAgKDAsIF9ET01VdGlscy5hZGRFdmVudExpc3RlbmVyKSh3aW5kb3csIFBvcFN0YXRlRXZlbnQsIGhhbmRsZVBvcFN0YXRlKTtcblxuICAgICAgaWYgKG5lZWRzSGFzaENoYW5nZUxpc3RlbmVyKSAoMCwgX0RPTVV0aWxzLmFkZEV2ZW50TGlzdGVuZXIpKHdpbmRvdywgSGFzaENoYW5nZUV2ZW50LCBoYW5kbGVIYXNoQ2hhbmdlKTtcbiAgICB9IGVsc2UgaWYgKGxpc3RlbmVyQ291bnQgPT09IDApIHtcbiAgICAgICgwLCBfRE9NVXRpbHMucmVtb3ZlRXZlbnRMaXN0ZW5lcikod2luZG93LCBQb3BTdGF0ZUV2ZW50LCBoYW5kbGVQb3BTdGF0ZSk7XG5cbiAgICAgIGlmIChuZWVkc0hhc2hDaGFuZ2VMaXN0ZW5lcikgKDAsIF9ET01VdGlscy5yZW1vdmVFdmVudExpc3RlbmVyKSh3aW5kb3csIEhhc2hDaGFuZ2VFdmVudCwgaGFuZGxlSGFzaENoYW5nZSk7XG4gICAgfVxuICB9O1xuXG4gIHZhciBpc0Jsb2NrZWQgPSBmYWxzZTtcblxuICB2YXIgYmxvY2sgPSBmdW5jdGlvbiBibG9jaygpIHtcbiAgICB2YXIgcHJvbXB0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiBmYWxzZTtcblxuICAgIHZhciB1bmJsb2NrID0gdHJhbnNpdGlvbk1hbmFnZXIuc2V0UHJvbXB0KHByb21wdCk7XG5cbiAgICBpZiAoIWlzQmxvY2tlZCkge1xuICAgICAgY2hlY2tET01MaXN0ZW5lcnMoMSk7XG4gICAgICBpc0Jsb2NrZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoaXNCbG9ja2VkKSB7XG4gICAgICAgIGlzQmxvY2tlZCA9IGZhbHNlO1xuICAgICAgICBjaGVja0RPTUxpc3RlbmVycygtMSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB1bmJsb2NrKCk7XG4gICAgfTtcbiAgfTtcblxuICB2YXIgbGlzdGVuID0gZnVuY3Rpb24gbGlzdGVuKGxpc3RlbmVyKSB7XG4gICAgdmFyIHVubGlzdGVuID0gdHJhbnNpdGlvbk1hbmFnZXIuYXBwZW5kTGlzdGVuZXIobGlzdGVuZXIpO1xuICAgIGNoZWNrRE9NTGlzdGVuZXJzKDEpO1xuXG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNoZWNrRE9NTGlzdGVuZXJzKC0xKTtcbiAgICAgIHVubGlzdGVuKCk7XG4gICAgfTtcbiAgfTtcblxuICB2YXIgaGlzdG9yeSA9IHtcbiAgICBsZW5ndGg6IGdsb2JhbEhpc3RvcnkubGVuZ3RoLFxuICAgIGFjdGlvbjogJ1BPUCcsXG4gICAgbG9jYXRpb246IGluaXRpYWxMb2NhdGlvbixcbiAgICBjcmVhdGVIcmVmOiBjcmVhdGVIcmVmLFxuICAgIHB1c2g6IHB1c2gsXG4gICAgcmVwbGFjZTogcmVwbGFjZSxcbiAgICBnbzogZ28sXG4gICAgZ29CYWNrOiBnb0JhY2ssXG4gICAgZ29Gb3J3YXJkOiBnb0ZvcndhcmQsXG4gICAgYmxvY2s6IGJsb2NrLFxuICAgIGxpc3RlbjogbGlzdGVuXG4gIH07XG5cbiAgcmV0dXJuIGhpc3Rvcnk7XG59O1xuXG5leHBvcnRzLmRlZmF1bHQgPSBjcmVhdGVCcm93c2VySGlzdG9yeTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L2hpc3RvcnkvY3JlYXRlQnJvd3Nlckhpc3RvcnkuanMiLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cbnZhciBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07XG5cbnZhciBfd2FybmluZyA9IHJlcXVpcmUoJ3dhcm5pbmcnKTtcblxudmFyIF93YXJuaW5nMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3dhcm5pbmcpO1xuXG52YXIgX2ludmFyaWFudCA9IHJlcXVpcmUoJ2ludmFyaWFudCcpO1xuXG52YXIgX2ludmFyaWFudDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9pbnZhcmlhbnQpO1xuXG52YXIgX0xvY2F0aW9uVXRpbHMgPSByZXF1aXJlKCcuL0xvY2F0aW9uVXRpbHMnKTtcblxudmFyIF9QYXRoVXRpbHMgPSByZXF1aXJlKCcuL1BhdGhVdGlscycpO1xuXG52YXIgX2NyZWF0ZVRyYW5zaXRpb25NYW5hZ2VyID0gcmVxdWlyZSgnLi9jcmVhdGVUcmFuc2l0aW9uTWFuYWdlcicpO1xuXG52YXIgX2NyZWF0ZVRyYW5zaXRpb25NYW5hZ2VyMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2NyZWF0ZVRyYW5zaXRpb25NYW5hZ2VyKTtcblxudmFyIF9ET01VdGlscyA9IHJlcXVpcmUoJy4vRE9NVXRpbHMnKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxudmFyIEhhc2hDaGFuZ2VFdmVudCA9ICdoYXNoY2hhbmdlJztcblxudmFyIEhhc2hQYXRoQ29kZXJzID0ge1xuICBoYXNoYmFuZzoge1xuICAgIGVuY29kZVBhdGg6IGZ1bmN0aW9uIGVuY29kZVBhdGgocGF0aCkge1xuICAgICAgcmV0dXJuIHBhdGguY2hhckF0KDApID09PSAnIScgPyBwYXRoIDogJyEvJyArICgwLCBfUGF0aFV0aWxzLnN0cmlwTGVhZGluZ1NsYXNoKShwYXRoKTtcbiAgICB9LFxuICAgIGRlY29kZVBhdGg6IGZ1bmN0aW9uIGRlY29kZVBhdGgocGF0aCkge1xuICAgICAgcmV0dXJuIHBhdGguY2hhckF0KDApID09PSAnIScgPyBwYXRoLnN1YnN0cigxKSA6IHBhdGg7XG4gICAgfVxuICB9LFxuICBub3NsYXNoOiB7XG4gICAgZW5jb2RlUGF0aDogX1BhdGhVdGlscy5zdHJpcExlYWRpbmdTbGFzaCxcbiAgICBkZWNvZGVQYXRoOiBfUGF0aFV0aWxzLmFkZExlYWRpbmdTbGFzaFxuICB9LFxuICBzbGFzaDoge1xuICAgIGVuY29kZVBhdGg6IF9QYXRoVXRpbHMuYWRkTGVhZGluZ1NsYXNoLFxuICAgIGRlY29kZVBhdGg6IF9QYXRoVXRpbHMuYWRkTGVhZGluZ1NsYXNoXG4gIH1cbn07XG5cbnZhciBnZXRIYXNoUGF0aCA9IGZ1bmN0aW9uIGdldEhhc2hQYXRoKCkge1xuICAvLyBXZSBjYW4ndCB1c2Ugd2luZG93LmxvY2F0aW9uLmhhc2ggaGVyZSBiZWNhdXNlIGl0J3Mgbm90XG4gIC8vIGNvbnNpc3RlbnQgYWNyb3NzIGJyb3dzZXJzIC0gRmlyZWZveCB3aWxsIHByZS1kZWNvZGUgaXQhXG4gIHZhciBocmVmID0gd2luZG93LmxvY2F0aW9uLmhyZWY7XG4gIHZhciBoYXNoSW5kZXggPSBocmVmLmluZGV4T2YoJyMnKTtcbiAgcmV0dXJuIGhhc2hJbmRleCA9PT0gLTEgPyAnJyA6IGhyZWYuc3Vic3RyaW5nKGhhc2hJbmRleCArIDEpO1xufTtcblxudmFyIHB1c2hIYXNoUGF0aCA9IGZ1bmN0aW9uIHB1c2hIYXNoUGF0aChwYXRoKSB7XG4gIHJldHVybiB3aW5kb3cubG9jYXRpb24uaGFzaCA9IHBhdGg7XG59O1xuXG52YXIgcmVwbGFjZUhhc2hQYXRoID0gZnVuY3Rpb24gcmVwbGFjZUhhc2hQYXRoKHBhdGgpIHtcbiAgdmFyIGhhc2hJbmRleCA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluZGV4T2YoJyMnKTtcblxuICB3aW5kb3cubG9jYXRpb24ucmVwbGFjZSh3aW5kb3cubG9jYXRpb24uaHJlZi5zbGljZSgwLCBoYXNoSW5kZXggPj0gMCA/IGhhc2hJbmRleCA6IDApICsgJyMnICsgcGF0aCk7XG59O1xuXG52YXIgY3JlYXRlSGFzaEhpc3RvcnkgPSBmdW5jdGlvbiBjcmVhdGVIYXNoSGlzdG9yeSgpIHtcbiAgdmFyIHByb3BzID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcblxuICAoMCwgX2ludmFyaWFudDIuZGVmYXVsdCkoX0RPTVV0aWxzLmNhblVzZURPTSwgJ0hhc2ggaGlzdG9yeSBuZWVkcyBhIERPTScpO1xuXG4gIHZhciBnbG9iYWxIaXN0b3J5ID0gd2luZG93Lmhpc3Rvcnk7XG4gIHZhciBjYW5Hb1dpdGhvdXRSZWxvYWQgPSAoMCwgX0RPTVV0aWxzLnN1cHBvcnRzR29XaXRob3V0UmVsb2FkVXNpbmdIYXNoKSgpO1xuXG4gIHZhciBfcHJvcHMkZ2V0VXNlckNvbmZpcm0gPSBwcm9wcy5nZXRVc2VyQ29uZmlybWF0aW9uLFxuICAgICAgZ2V0VXNlckNvbmZpcm1hdGlvbiA9IF9wcm9wcyRnZXRVc2VyQ29uZmlybSA9PT0gdW5kZWZpbmVkID8gX0RPTVV0aWxzLmdldENvbmZpcm1hdGlvbiA6IF9wcm9wcyRnZXRVc2VyQ29uZmlybSxcbiAgICAgIF9wcm9wcyRoYXNoVHlwZSA9IHByb3BzLmhhc2hUeXBlLFxuICAgICAgaGFzaFR5cGUgPSBfcHJvcHMkaGFzaFR5cGUgPT09IHVuZGVmaW5lZCA/ICdzbGFzaCcgOiBfcHJvcHMkaGFzaFR5cGU7XG5cbiAgdmFyIGJhc2VuYW1lID0gcHJvcHMuYmFzZW5hbWUgPyAoMCwgX1BhdGhVdGlscy5zdHJpcFRyYWlsaW5nU2xhc2gpKCgwLCBfUGF0aFV0aWxzLmFkZExlYWRpbmdTbGFzaCkocHJvcHMuYmFzZW5hbWUpKSA6ICcnO1xuXG4gIHZhciBfSGFzaFBhdGhDb2RlcnMkaGFzaFQgPSBIYXNoUGF0aENvZGVyc1toYXNoVHlwZV0sXG4gICAgICBlbmNvZGVQYXRoID0gX0hhc2hQYXRoQ29kZXJzJGhhc2hULmVuY29kZVBhdGgsXG4gICAgICBkZWNvZGVQYXRoID0gX0hhc2hQYXRoQ29kZXJzJGhhc2hULmRlY29kZVBhdGg7XG5cblxuICB2YXIgZ2V0RE9NTG9jYXRpb24gPSBmdW5jdGlvbiBnZXRET01Mb2NhdGlvbigpIHtcbiAgICB2YXIgcGF0aCA9IGRlY29kZVBhdGgoZ2V0SGFzaFBhdGgoKSk7XG5cbiAgICAoMCwgX3dhcm5pbmcyLmRlZmF1bHQpKCFiYXNlbmFtZSB8fCAoMCwgX1BhdGhVdGlscy5oYXNCYXNlbmFtZSkocGF0aCwgYmFzZW5hbWUpLCAnWW91IGFyZSBhdHRlbXB0aW5nIHRvIHVzZSBhIGJhc2VuYW1lIG9uIGEgcGFnZSB3aG9zZSBVUkwgcGF0aCBkb2VzIG5vdCBiZWdpbiAnICsgJ3dpdGggdGhlIGJhc2VuYW1lLiBFeHBlY3RlZCBwYXRoIFwiJyArIHBhdGggKyAnXCIgdG8gYmVnaW4gd2l0aCBcIicgKyBiYXNlbmFtZSArICdcIi4nKTtcblxuICAgIGlmIChiYXNlbmFtZSkgcGF0aCA9ICgwLCBfUGF0aFV0aWxzLnN0cmlwQmFzZW5hbWUpKHBhdGgsIGJhc2VuYW1lKTtcblxuICAgIHJldHVybiAoMCwgX0xvY2F0aW9uVXRpbHMuY3JlYXRlTG9jYXRpb24pKHBhdGgpO1xuICB9O1xuXG4gIHZhciB0cmFuc2l0aW9uTWFuYWdlciA9ICgwLCBfY3JlYXRlVHJhbnNpdGlvbk1hbmFnZXIyLmRlZmF1bHQpKCk7XG5cbiAgdmFyIHNldFN0YXRlID0gZnVuY3Rpb24gc2V0U3RhdGUobmV4dFN0YXRlKSB7XG4gICAgX2V4dGVuZHMoaGlzdG9yeSwgbmV4dFN0YXRlKTtcblxuICAgIGhpc3RvcnkubGVuZ3RoID0gZ2xvYmFsSGlzdG9yeS5sZW5ndGg7XG5cbiAgICB0cmFuc2l0aW9uTWFuYWdlci5ub3RpZnlMaXN0ZW5lcnMoaGlzdG9yeS5sb2NhdGlvbiwgaGlzdG9yeS5hY3Rpb24pO1xuICB9O1xuXG4gIHZhciBmb3JjZU5leHRQb3AgPSBmYWxzZTtcbiAgdmFyIGlnbm9yZVBhdGggPSBudWxsO1xuXG4gIHZhciBoYW5kbGVIYXNoQ2hhbmdlID0gZnVuY3Rpb24gaGFuZGxlSGFzaENoYW5nZSgpIHtcbiAgICB2YXIgcGF0aCA9IGdldEhhc2hQYXRoKCk7XG4gICAgdmFyIGVuY29kZWRQYXRoID0gZW5jb2RlUGF0aChwYXRoKTtcblxuICAgIGlmIChwYXRoICE9PSBlbmNvZGVkUGF0aCkge1xuICAgICAgLy8gRW5zdXJlIHdlIGFsd2F5cyBoYXZlIGEgcHJvcGVybHktZW5jb2RlZCBoYXNoLlxuICAgICAgcmVwbGFjZUhhc2hQYXRoKGVuY29kZWRQYXRoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGxvY2F0aW9uID0gZ2V0RE9NTG9jYXRpb24oKTtcbiAgICAgIHZhciBwcmV2TG9jYXRpb24gPSBoaXN0b3J5LmxvY2F0aW9uO1xuXG4gICAgICBpZiAoIWZvcmNlTmV4dFBvcCAmJiAoMCwgX0xvY2F0aW9uVXRpbHMubG9jYXRpb25zQXJlRXF1YWwpKHByZXZMb2NhdGlvbiwgbG9jYXRpb24pKSByZXR1cm47IC8vIEEgaGFzaGNoYW5nZSBkb2Vzbid0IGFsd2F5cyA9PSBsb2NhdGlvbiBjaGFuZ2UuXG5cbiAgICAgIGlmIChpZ25vcmVQYXRoID09PSAoMCwgX1BhdGhVdGlscy5jcmVhdGVQYXRoKShsb2NhdGlvbikpIHJldHVybjsgLy8gSWdub3JlIHRoaXMgY2hhbmdlOyB3ZSBhbHJlYWR5IHNldFN0YXRlIGluIHB1c2gvcmVwbGFjZS5cblxuICAgICAgaWdub3JlUGF0aCA9IG51bGw7XG5cbiAgICAgIGhhbmRsZVBvcChsb2NhdGlvbik7XG4gICAgfVxuICB9O1xuXG4gIHZhciBoYW5kbGVQb3AgPSBmdW5jdGlvbiBoYW5kbGVQb3AobG9jYXRpb24pIHtcbiAgICBpZiAoZm9yY2VOZXh0UG9wKSB7XG4gICAgICBmb3JjZU5leHRQb3AgPSBmYWxzZTtcbiAgICAgIHNldFN0YXRlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBhY3Rpb24gPSAnUE9QJztcblxuICAgICAgdHJhbnNpdGlvbk1hbmFnZXIuY29uZmlybVRyYW5zaXRpb25Ubyhsb2NhdGlvbiwgYWN0aW9uLCBnZXRVc2VyQ29uZmlybWF0aW9uLCBmdW5jdGlvbiAob2spIHtcbiAgICAgICAgaWYgKG9rKSB7XG4gICAgICAgICAgc2V0U3RhdGUoeyBhY3Rpb246IGFjdGlvbiwgbG9jYXRpb246IGxvY2F0aW9uIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldmVydFBvcChsb2NhdGlvbik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICB2YXIgcmV2ZXJ0UG9wID0gZnVuY3Rpb24gcmV2ZXJ0UG9wKGZyb21Mb2NhdGlvbikge1xuICAgIHZhciB0b0xvY2F0aW9uID0gaGlzdG9yeS5sb2NhdGlvbjtcblxuICAgIC8vIFRPRE86IFdlIGNvdWxkIHByb2JhYmx5IG1ha2UgdGhpcyBtb3JlIHJlbGlhYmxlIGJ5XG4gICAgLy8ga2VlcGluZyBhIGxpc3Qgb2YgcGF0aHMgd2UndmUgc2VlbiBpbiBzZXNzaW9uU3RvcmFnZS5cbiAgICAvLyBJbnN0ZWFkLCB3ZSBqdXN0IGRlZmF1bHQgdG8gMCBmb3IgcGF0aHMgd2UgZG9uJ3Qga25vdy5cblxuICAgIHZhciB0b0luZGV4ID0gYWxsUGF0aHMubGFzdEluZGV4T2YoKDAsIF9QYXRoVXRpbHMuY3JlYXRlUGF0aCkodG9Mb2NhdGlvbikpO1xuXG4gICAgaWYgKHRvSW5kZXggPT09IC0xKSB0b0luZGV4ID0gMDtcblxuICAgIHZhciBmcm9tSW5kZXggPSBhbGxQYXRocy5sYXN0SW5kZXhPZigoMCwgX1BhdGhVdGlscy5jcmVhdGVQYXRoKShmcm9tTG9jYXRpb24pKTtcblxuICAgIGlmIChmcm9tSW5kZXggPT09IC0xKSBmcm9tSW5kZXggPSAwO1xuXG4gICAgdmFyIGRlbHRhID0gdG9JbmRleCAtIGZyb21JbmRleDtcblxuICAgIGlmIChkZWx0YSkge1xuICAgICAgZm9yY2VOZXh0UG9wID0gdHJ1ZTtcbiAgICAgIGdvKGRlbHRhKTtcbiAgICB9XG4gIH07XG5cbiAgLy8gRW5zdXJlIHRoZSBoYXNoIGlzIGVuY29kZWQgcHJvcGVybHkgYmVmb3JlIGRvaW5nIGFueXRoaW5nIGVsc2UuXG4gIHZhciBwYXRoID0gZ2V0SGFzaFBhdGgoKTtcbiAgdmFyIGVuY29kZWRQYXRoID0gZW5jb2RlUGF0aChwYXRoKTtcblxuICBpZiAocGF0aCAhPT0gZW5jb2RlZFBhdGgpIHJlcGxhY2VIYXNoUGF0aChlbmNvZGVkUGF0aCk7XG5cbiAgdmFyIGluaXRpYWxMb2NhdGlvbiA9IGdldERPTUxvY2F0aW9uKCk7XG4gIHZhciBhbGxQYXRocyA9IFsoMCwgX1BhdGhVdGlscy5jcmVhdGVQYXRoKShpbml0aWFsTG9jYXRpb24pXTtcblxuICAvLyBQdWJsaWMgaW50ZXJmYWNlXG5cbiAgdmFyIGNyZWF0ZUhyZWYgPSBmdW5jdGlvbiBjcmVhdGVIcmVmKGxvY2F0aW9uKSB7XG4gICAgcmV0dXJuICcjJyArIGVuY29kZVBhdGgoYmFzZW5hbWUgKyAoMCwgX1BhdGhVdGlscy5jcmVhdGVQYXRoKShsb2NhdGlvbikpO1xuICB9O1xuXG4gIHZhciBwdXNoID0gZnVuY3Rpb24gcHVzaChwYXRoLCBzdGF0ZSkge1xuICAgICgwLCBfd2FybmluZzIuZGVmYXVsdCkoc3RhdGUgPT09IHVuZGVmaW5lZCwgJ0hhc2ggaGlzdG9yeSBjYW5ub3QgcHVzaCBzdGF0ZTsgaXQgaXMgaWdub3JlZCcpO1xuXG4gICAgdmFyIGFjdGlvbiA9ICdQVVNIJztcbiAgICB2YXIgbG9jYXRpb24gPSAoMCwgX0xvY2F0aW9uVXRpbHMuY3JlYXRlTG9jYXRpb24pKHBhdGgsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBoaXN0b3J5LmxvY2F0aW9uKTtcblxuICAgIHRyYW5zaXRpb25NYW5hZ2VyLmNvbmZpcm1UcmFuc2l0aW9uVG8obG9jYXRpb24sIGFjdGlvbiwgZ2V0VXNlckNvbmZpcm1hdGlvbiwgZnVuY3Rpb24gKG9rKSB7XG4gICAgICBpZiAoIW9rKSByZXR1cm47XG5cbiAgICAgIHZhciBwYXRoID0gKDAsIF9QYXRoVXRpbHMuY3JlYXRlUGF0aCkobG9jYXRpb24pO1xuICAgICAgdmFyIGVuY29kZWRQYXRoID0gZW5jb2RlUGF0aChiYXNlbmFtZSArIHBhdGgpO1xuICAgICAgdmFyIGhhc2hDaGFuZ2VkID0gZ2V0SGFzaFBhdGgoKSAhPT0gZW5jb2RlZFBhdGg7XG5cbiAgICAgIGlmIChoYXNoQ2hhbmdlZCkge1xuICAgICAgICAvLyBXZSBjYW5ub3QgdGVsbCBpZiBhIGhhc2hjaGFuZ2Ugd2FzIGNhdXNlZCBieSBhIFBVU0gsIHNvIHdlJ2RcbiAgICAgICAgLy8gcmF0aGVyIHNldFN0YXRlIGhlcmUgYW5kIGlnbm9yZSB0aGUgaGFzaGNoYW5nZS4gVGhlIGNhdmVhdCBoZXJlXG4gICAgICAgIC8vIGlzIHRoYXQgb3RoZXIgaGFzaCBoaXN0b3JpZXMgaW4gdGhlIHBhZ2Ugd2lsbCBjb25zaWRlciBpdCBhIFBPUC5cbiAgICAgICAgaWdub3JlUGF0aCA9IHBhdGg7XG4gICAgICAgIHB1c2hIYXNoUGF0aChlbmNvZGVkUGF0aCk7XG5cbiAgICAgICAgdmFyIHByZXZJbmRleCA9IGFsbFBhdGhzLmxhc3RJbmRleE9mKCgwLCBfUGF0aFV0aWxzLmNyZWF0ZVBhdGgpKGhpc3RvcnkubG9jYXRpb24pKTtcbiAgICAgICAgdmFyIG5leHRQYXRocyA9IGFsbFBhdGhzLnNsaWNlKDAsIHByZXZJbmRleCA9PT0gLTEgPyAwIDogcHJldkluZGV4ICsgMSk7XG5cbiAgICAgICAgbmV4dFBhdGhzLnB1c2gocGF0aCk7XG4gICAgICAgIGFsbFBhdGhzID0gbmV4dFBhdGhzO1xuXG4gICAgICAgIHNldFN0YXRlKHsgYWN0aW9uOiBhY3Rpb24sIGxvY2F0aW9uOiBsb2NhdGlvbiB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgICgwLCBfd2FybmluZzIuZGVmYXVsdCkoZmFsc2UsICdIYXNoIGhpc3RvcnkgY2Fubm90IFBVU0ggdGhlIHNhbWUgcGF0aDsgYSBuZXcgZW50cnkgd2lsbCBub3QgYmUgYWRkZWQgdG8gdGhlIGhpc3Rvcnkgc3RhY2snKTtcblxuICAgICAgICBzZXRTdGF0ZSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuXG4gIHZhciByZXBsYWNlID0gZnVuY3Rpb24gcmVwbGFjZShwYXRoLCBzdGF0ZSkge1xuICAgICgwLCBfd2FybmluZzIuZGVmYXVsdCkoc3RhdGUgPT09IHVuZGVmaW5lZCwgJ0hhc2ggaGlzdG9yeSBjYW5ub3QgcmVwbGFjZSBzdGF0ZTsgaXQgaXMgaWdub3JlZCcpO1xuXG4gICAgdmFyIGFjdGlvbiA9ICdSRVBMQUNFJztcbiAgICB2YXIgbG9jYXRpb24gPSAoMCwgX0xvY2F0aW9uVXRpbHMuY3JlYXRlTG9jYXRpb24pKHBhdGgsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBoaXN0b3J5LmxvY2F0aW9uKTtcblxuICAgIHRyYW5zaXRpb25NYW5hZ2VyLmNvbmZpcm1UcmFuc2l0aW9uVG8obG9jYXRpb24sIGFjdGlvbiwgZ2V0VXNlckNvbmZpcm1hdGlvbiwgZnVuY3Rpb24gKG9rKSB7XG4gICAgICBpZiAoIW9rKSByZXR1cm47XG5cbiAgICAgIHZhciBwYXRoID0gKDAsIF9QYXRoVXRpbHMuY3JlYXRlUGF0aCkobG9jYXRpb24pO1xuICAgICAgdmFyIGVuY29kZWRQYXRoID0gZW5jb2RlUGF0aChiYXNlbmFtZSArIHBhdGgpO1xuICAgICAgdmFyIGhhc2hDaGFuZ2VkID0gZ2V0SGFzaFBhdGgoKSAhPT0gZW5jb2RlZFBhdGg7XG5cbiAgICAgIGlmIChoYXNoQ2hhbmdlZCkge1xuICAgICAgICAvLyBXZSBjYW5ub3QgdGVsbCBpZiBhIGhhc2hjaGFuZ2Ugd2FzIGNhdXNlZCBieSBhIFJFUExBQ0UsIHNvIHdlJ2RcbiAgICAgICAgLy8gcmF0aGVyIHNldFN0YXRlIGhlcmUgYW5kIGlnbm9yZSB0aGUgaGFzaGNoYW5nZS4gVGhlIGNhdmVhdCBoZXJlXG4gICAgICAgIC8vIGlzIHRoYXQgb3RoZXIgaGFzaCBoaXN0b3JpZXMgaW4gdGhlIHBhZ2Ugd2lsbCBjb25zaWRlciBpdCBhIFBPUC5cbiAgICAgICAgaWdub3JlUGF0aCA9IHBhdGg7XG4gICAgICAgIHJlcGxhY2VIYXNoUGF0aChlbmNvZGVkUGF0aCk7XG4gICAgICB9XG5cbiAgICAgIHZhciBwcmV2SW5kZXggPSBhbGxQYXRocy5pbmRleE9mKCgwLCBfUGF0aFV0aWxzLmNyZWF0ZVBhdGgpKGhpc3RvcnkubG9jYXRpb24pKTtcblxuICAgICAgaWYgKHByZXZJbmRleCAhPT0gLTEpIGFsbFBhdGhzW3ByZXZJbmRleF0gPSBwYXRoO1xuXG4gICAgICBzZXRTdGF0ZSh7IGFjdGlvbjogYWN0aW9uLCBsb2NhdGlvbjogbG9jYXRpb24gfSk7XG4gICAgfSk7XG4gIH07XG5cbiAgdmFyIGdvID0gZnVuY3Rpb24gZ28obikge1xuICAgICgwLCBfd2FybmluZzIuZGVmYXVsdCkoY2FuR29XaXRob3V0UmVsb2FkLCAnSGFzaCBoaXN0b3J5IGdvKG4pIGNhdXNlcyBhIGZ1bGwgcGFnZSByZWxvYWQgaW4gdGhpcyBicm93c2VyJyk7XG5cbiAgICBnbG9iYWxIaXN0b3J5LmdvKG4pO1xuICB9O1xuXG4gIHZhciBnb0JhY2sgPSBmdW5jdGlvbiBnb0JhY2soKSB7XG4gICAgcmV0dXJuIGdvKC0xKTtcbiAgfTtcblxuICB2YXIgZ29Gb3J3YXJkID0gZnVuY3Rpb24gZ29Gb3J3YXJkKCkge1xuICAgIHJldHVybiBnbygxKTtcbiAgfTtcblxuICB2YXIgbGlzdGVuZXJDb3VudCA9IDA7XG5cbiAgdmFyIGNoZWNrRE9NTGlzdGVuZXJzID0gZnVuY3Rpb24gY2hlY2tET01MaXN0ZW5lcnMoZGVsdGEpIHtcbiAgICBsaXN0ZW5lckNvdW50ICs9IGRlbHRhO1xuXG4gICAgaWYgKGxpc3RlbmVyQ291bnQgPT09IDEpIHtcbiAgICAgICgwLCBfRE9NVXRpbHMuYWRkRXZlbnRMaXN0ZW5lcikod2luZG93LCBIYXNoQ2hhbmdlRXZlbnQsIGhhbmRsZUhhc2hDaGFuZ2UpO1xuICAgIH0gZWxzZSBpZiAobGlzdGVuZXJDb3VudCA9PT0gMCkge1xuICAgICAgKDAsIF9ET01VdGlscy5yZW1vdmVFdmVudExpc3RlbmVyKSh3aW5kb3csIEhhc2hDaGFuZ2VFdmVudCwgaGFuZGxlSGFzaENoYW5nZSk7XG4gICAgfVxuICB9O1xuXG4gIHZhciBpc0Jsb2NrZWQgPSBmYWxzZTtcblxuICB2YXIgYmxvY2sgPSBmdW5jdGlvbiBibG9jaygpIHtcbiAgICB2YXIgcHJvbXB0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiBmYWxzZTtcblxuICAgIHZhciB1bmJsb2NrID0gdHJhbnNpdGlvbk1hbmFnZXIuc2V0UHJvbXB0KHByb21wdCk7XG5cbiAgICBpZiAoIWlzQmxvY2tlZCkge1xuICAgICAgY2hlY2tET01MaXN0ZW5lcnMoMSk7XG4gICAgICBpc0Jsb2NrZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoaXNCbG9ja2VkKSB7XG4gICAgICAgIGlzQmxvY2tlZCA9IGZhbHNlO1xuICAgICAgICBjaGVja0RPTUxpc3RlbmVycygtMSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB1bmJsb2NrKCk7XG4gICAgfTtcbiAgfTtcblxuICB2YXIgbGlzdGVuID0gZnVuY3Rpb24gbGlzdGVuKGxpc3RlbmVyKSB7XG4gICAgdmFyIHVubGlzdGVuID0gdHJhbnNpdGlvbk1hbmFnZXIuYXBwZW5kTGlzdGVuZXIobGlzdGVuZXIpO1xuICAgIGNoZWNrRE9NTGlzdGVuZXJzKDEpO1xuXG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNoZWNrRE9NTGlzdGVuZXJzKC0xKTtcbiAgICAgIHVubGlzdGVuKCk7XG4gICAgfTtcbiAgfTtcblxuICB2YXIgaGlzdG9yeSA9IHtcbiAgICBsZW5ndGg6IGdsb2JhbEhpc3RvcnkubGVuZ3RoLFxuICAgIGFjdGlvbjogJ1BPUCcsXG4gICAgbG9jYXRpb246IGluaXRpYWxMb2NhdGlvbixcbiAgICBjcmVhdGVIcmVmOiBjcmVhdGVIcmVmLFxuICAgIHB1c2g6IHB1c2gsXG4gICAgcmVwbGFjZTogcmVwbGFjZSxcbiAgICBnbzogZ28sXG4gICAgZ29CYWNrOiBnb0JhY2ssXG4gICAgZ29Gb3J3YXJkOiBnb0ZvcndhcmQsXG4gICAgYmxvY2s6IGJsb2NrLFxuICAgIGxpc3RlbjogbGlzdGVuXG4gIH07XG5cbiAgcmV0dXJuIGhpc3Rvcnk7XG59O1xuXG5leHBvcnRzLmRlZmF1bHQgPSBjcmVhdGVIYXNoSGlzdG9yeTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L2hpc3RvcnkvY3JlYXRlSGFzaEhpc3RvcnkuanMiLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cbnZhciBfdHlwZW9mID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIgPyBmdW5jdGlvbiAob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9IDogZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTtcblxudmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcblxudmFyIF93YXJuaW5nID0gcmVxdWlyZSgnd2FybmluZycpO1xuXG52YXIgX3dhcm5pbmcyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfd2FybmluZyk7XG5cbnZhciBfUGF0aFV0aWxzID0gcmVxdWlyZSgnLi9QYXRoVXRpbHMnKTtcblxudmFyIF9Mb2NhdGlvblV0aWxzID0gcmVxdWlyZSgnLi9Mb2NhdGlvblV0aWxzJyk7XG5cbnZhciBfY3JlYXRlVHJhbnNpdGlvbk1hbmFnZXIgPSByZXF1aXJlKCcuL2NyZWF0ZVRyYW5zaXRpb25NYW5hZ2VyJyk7XG5cbnZhciBfY3JlYXRlVHJhbnNpdGlvbk1hbmFnZXIyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY3JlYXRlVHJhbnNpdGlvbk1hbmFnZXIpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG52YXIgY2xhbXAgPSBmdW5jdGlvbiBjbGFtcChuLCBsb3dlckJvdW5kLCB1cHBlckJvdW5kKSB7XG4gIHJldHVybiBNYXRoLm1pbihNYXRoLm1heChuLCBsb3dlckJvdW5kKSwgdXBwZXJCb3VuZCk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBoaXN0b3J5IG9iamVjdCB0aGF0IHN0b3JlcyBsb2NhdGlvbnMgaW4gbWVtb3J5LlxuICovXG52YXIgY3JlYXRlTWVtb3J5SGlzdG9yeSA9IGZ1bmN0aW9uIGNyZWF0ZU1lbW9yeUhpc3RvcnkoKSB7XG4gIHZhciBwcm9wcyA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge307XG4gIHZhciBnZXRVc2VyQ29uZmlybWF0aW9uID0gcHJvcHMuZ2V0VXNlckNvbmZpcm1hdGlvbixcbiAgICAgIF9wcm9wcyRpbml0aWFsRW50cmllcyA9IHByb3BzLmluaXRpYWxFbnRyaWVzLFxuICAgICAgaW5pdGlhbEVudHJpZXMgPSBfcHJvcHMkaW5pdGlhbEVudHJpZXMgPT09IHVuZGVmaW5lZCA/IFsnLyddIDogX3Byb3BzJGluaXRpYWxFbnRyaWVzLFxuICAgICAgX3Byb3BzJGluaXRpYWxJbmRleCA9IHByb3BzLmluaXRpYWxJbmRleCxcbiAgICAgIGluaXRpYWxJbmRleCA9IF9wcm9wcyRpbml0aWFsSW5kZXggPT09IHVuZGVmaW5lZCA/IDAgOiBfcHJvcHMkaW5pdGlhbEluZGV4LFxuICAgICAgX3Byb3BzJGtleUxlbmd0aCA9IHByb3BzLmtleUxlbmd0aCxcbiAgICAgIGtleUxlbmd0aCA9IF9wcm9wcyRrZXlMZW5ndGggPT09IHVuZGVmaW5lZCA/IDYgOiBfcHJvcHMka2V5TGVuZ3RoO1xuXG5cbiAgdmFyIHRyYW5zaXRpb25NYW5hZ2VyID0gKDAsIF9jcmVhdGVUcmFuc2l0aW9uTWFuYWdlcjIuZGVmYXVsdCkoKTtcblxuICB2YXIgc2V0U3RhdGUgPSBmdW5jdGlvbiBzZXRTdGF0ZShuZXh0U3RhdGUpIHtcbiAgICBfZXh0ZW5kcyhoaXN0b3J5LCBuZXh0U3RhdGUpO1xuXG4gICAgaGlzdG9yeS5sZW5ndGggPSBoaXN0b3J5LmVudHJpZXMubGVuZ3RoO1xuXG4gICAgdHJhbnNpdGlvbk1hbmFnZXIubm90aWZ5TGlzdGVuZXJzKGhpc3RvcnkubG9jYXRpb24sIGhpc3RvcnkuYWN0aW9uKTtcbiAgfTtcblxuICB2YXIgY3JlYXRlS2V5ID0gZnVuY3Rpb24gY3JlYXRlS2V5KCkge1xuICAgIHJldHVybiBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHIoMiwga2V5TGVuZ3RoKTtcbiAgfTtcblxuICB2YXIgaW5kZXggPSBjbGFtcChpbml0aWFsSW5kZXgsIDAsIGluaXRpYWxFbnRyaWVzLmxlbmd0aCAtIDEpO1xuICB2YXIgZW50cmllcyA9IGluaXRpYWxFbnRyaWVzLm1hcChmdW5jdGlvbiAoZW50cnkpIHtcbiAgICByZXR1cm4gdHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJyA/ICgwLCBfTG9jYXRpb25VdGlscy5jcmVhdGVMb2NhdGlvbikoZW50cnksIHVuZGVmaW5lZCwgY3JlYXRlS2V5KCkpIDogKDAsIF9Mb2NhdGlvblV0aWxzLmNyZWF0ZUxvY2F0aW9uKShlbnRyeSwgdW5kZWZpbmVkLCBlbnRyeS5rZXkgfHwgY3JlYXRlS2V5KCkpO1xuICB9KTtcblxuICAvLyBQdWJsaWMgaW50ZXJmYWNlXG5cbiAgdmFyIGNyZWF0ZUhyZWYgPSBfUGF0aFV0aWxzLmNyZWF0ZVBhdGg7XG5cbiAgdmFyIHB1c2ggPSBmdW5jdGlvbiBwdXNoKHBhdGgsIHN0YXRlKSB7XG4gICAgKDAsIF93YXJuaW5nMi5kZWZhdWx0KSghKCh0eXBlb2YgcGF0aCA9PT0gJ3VuZGVmaW5lZCcgPyAndW5kZWZpbmVkJyA6IF90eXBlb2YocGF0aCkpID09PSAnb2JqZWN0JyAmJiBwYXRoLnN0YXRlICE9PSB1bmRlZmluZWQgJiYgc3RhdGUgIT09IHVuZGVmaW5lZCksICdZb3Ugc2hvdWxkIGF2b2lkIHByb3ZpZGluZyBhIDJuZCBzdGF0ZSBhcmd1bWVudCB0byBwdXNoIHdoZW4gdGhlIDFzdCAnICsgJ2FyZ3VtZW50IGlzIGEgbG9jYXRpb24tbGlrZSBvYmplY3QgdGhhdCBhbHJlYWR5IGhhcyBzdGF0ZTsgaXQgaXMgaWdub3JlZCcpO1xuXG4gICAgdmFyIGFjdGlvbiA9ICdQVVNIJztcbiAgICB2YXIgbG9jYXRpb24gPSAoMCwgX0xvY2F0aW9uVXRpbHMuY3JlYXRlTG9jYXRpb24pKHBhdGgsIHN0YXRlLCBjcmVhdGVLZXkoKSwgaGlzdG9yeS5sb2NhdGlvbik7XG5cbiAgICB0cmFuc2l0aW9uTWFuYWdlci5jb25maXJtVHJhbnNpdGlvblRvKGxvY2F0aW9uLCBhY3Rpb24sIGdldFVzZXJDb25maXJtYXRpb24sIGZ1bmN0aW9uIChvaykge1xuICAgICAgaWYgKCFvaykgcmV0dXJuO1xuXG4gICAgICB2YXIgcHJldkluZGV4ID0gaGlzdG9yeS5pbmRleDtcbiAgICAgIHZhciBuZXh0SW5kZXggPSBwcmV2SW5kZXggKyAxO1xuXG4gICAgICB2YXIgbmV4dEVudHJpZXMgPSBoaXN0b3J5LmVudHJpZXMuc2xpY2UoMCk7XG4gICAgICBpZiAobmV4dEVudHJpZXMubGVuZ3RoID4gbmV4dEluZGV4KSB7XG4gICAgICAgIG5leHRFbnRyaWVzLnNwbGljZShuZXh0SW5kZXgsIG5leHRFbnRyaWVzLmxlbmd0aCAtIG5leHRJbmRleCwgbG9jYXRpb24pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV4dEVudHJpZXMucHVzaChsb2NhdGlvbik7XG4gICAgICB9XG5cbiAgICAgIHNldFN0YXRlKHtcbiAgICAgICAgYWN0aW9uOiBhY3Rpb24sXG4gICAgICAgIGxvY2F0aW9uOiBsb2NhdGlvbixcbiAgICAgICAgaW5kZXg6IG5leHRJbmRleCxcbiAgICAgICAgZW50cmllczogbmV4dEVudHJpZXNcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuXG4gIHZhciByZXBsYWNlID0gZnVuY3Rpb24gcmVwbGFjZShwYXRoLCBzdGF0ZSkge1xuICAgICgwLCBfd2FybmluZzIuZGVmYXVsdCkoISgodHlwZW9mIHBhdGggPT09ICd1bmRlZmluZWQnID8gJ3VuZGVmaW5lZCcgOiBfdHlwZW9mKHBhdGgpKSA9PT0gJ29iamVjdCcgJiYgcGF0aC5zdGF0ZSAhPT0gdW5kZWZpbmVkICYmIHN0YXRlICE9PSB1bmRlZmluZWQpLCAnWW91IHNob3VsZCBhdm9pZCBwcm92aWRpbmcgYSAybmQgc3RhdGUgYXJndW1lbnQgdG8gcmVwbGFjZSB3aGVuIHRoZSAxc3QgJyArICdhcmd1bWVudCBpcyBhIGxvY2F0aW9uLWxpa2Ugb2JqZWN0IHRoYXQgYWxyZWFkeSBoYXMgc3RhdGU7IGl0IGlzIGlnbm9yZWQnKTtcblxuICAgIHZhciBhY3Rpb24gPSAnUkVQTEFDRSc7XG4gICAgdmFyIGxvY2F0aW9uID0gKDAsIF9Mb2NhdGlvblV0aWxzLmNyZWF0ZUxvY2F0aW9uKShwYXRoLCBzdGF0ZSwgY3JlYXRlS2V5KCksIGhpc3RvcnkubG9jYXRpb24pO1xuXG4gICAgdHJhbnNpdGlvbk1hbmFnZXIuY29uZmlybVRyYW5zaXRpb25Ubyhsb2NhdGlvbiwgYWN0aW9uLCBnZXRVc2VyQ29uZmlybWF0aW9uLCBmdW5jdGlvbiAob2spIHtcbiAgICAgIGlmICghb2spIHJldHVybjtcblxuICAgICAgaGlzdG9yeS5lbnRyaWVzW2hpc3RvcnkuaW5kZXhdID0gbG9jYXRpb247XG5cbiAgICAgIHNldFN0YXRlKHsgYWN0aW9uOiBhY3Rpb24sIGxvY2F0aW9uOiBsb2NhdGlvbiB9KTtcbiAgICB9KTtcbiAgfTtcblxuICB2YXIgZ28gPSBmdW5jdGlvbiBnbyhuKSB7XG4gICAgdmFyIG5leHRJbmRleCA9IGNsYW1wKGhpc3RvcnkuaW5kZXggKyBuLCAwLCBoaXN0b3J5LmVudHJpZXMubGVuZ3RoIC0gMSk7XG5cbiAgICB2YXIgYWN0aW9uID0gJ1BPUCc7XG4gICAgdmFyIGxvY2F0aW9uID0gaGlzdG9yeS5lbnRyaWVzW25leHRJbmRleF07XG5cbiAgICB0cmFuc2l0aW9uTWFuYWdlci5jb25maXJtVHJhbnNpdGlvblRvKGxvY2F0aW9uLCBhY3Rpb24sIGdldFVzZXJDb25maXJtYXRpb24sIGZ1bmN0aW9uIChvaykge1xuICAgICAgaWYgKG9rKSB7XG4gICAgICAgIHNldFN0YXRlKHtcbiAgICAgICAgICBhY3Rpb246IGFjdGlvbixcbiAgICAgICAgICBsb2NhdGlvbjogbG9jYXRpb24sXG4gICAgICAgICAgaW5kZXg6IG5leHRJbmRleFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIE1pbWljIHRoZSBiZWhhdmlvciBvZiBET00gaGlzdG9yaWVzIGJ5XG4gICAgICAgIC8vIGNhdXNpbmcgYSByZW5kZXIgYWZ0ZXIgYSBjYW5jZWxsZWQgUE9QLlxuICAgICAgICBzZXRTdGF0ZSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuXG4gIHZhciBnb0JhY2sgPSBmdW5jdGlvbiBnb0JhY2soKSB7XG4gICAgcmV0dXJuIGdvKC0xKTtcbiAgfTtcblxuICB2YXIgZ29Gb3J3YXJkID0gZnVuY3Rpb24gZ29Gb3J3YXJkKCkge1xuICAgIHJldHVybiBnbygxKTtcbiAgfTtcblxuICB2YXIgY2FuR28gPSBmdW5jdGlvbiBjYW5HbyhuKSB7XG4gICAgdmFyIG5leHRJbmRleCA9IGhpc3RvcnkuaW5kZXggKyBuO1xuICAgIHJldHVybiBuZXh0SW5kZXggPj0gMCAmJiBuZXh0SW5kZXggPCBoaXN0b3J5LmVudHJpZXMubGVuZ3RoO1xuICB9O1xuXG4gIHZhciBibG9jayA9IGZ1bmN0aW9uIGJsb2NrKCkge1xuICAgIHZhciBwcm9tcHQgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IGZhbHNlO1xuICAgIHJldHVybiB0cmFuc2l0aW9uTWFuYWdlci5zZXRQcm9tcHQocHJvbXB0KTtcbiAgfTtcblxuICB2YXIgbGlzdGVuID0gZnVuY3Rpb24gbGlzdGVuKGxpc3RlbmVyKSB7XG4gICAgcmV0dXJuIHRyYW5zaXRpb25NYW5hZ2VyLmFwcGVuZExpc3RlbmVyKGxpc3RlbmVyKTtcbiAgfTtcblxuICB2YXIgaGlzdG9yeSA9IHtcbiAgICBsZW5ndGg6IGVudHJpZXMubGVuZ3RoLFxuICAgIGFjdGlvbjogJ1BPUCcsXG4gICAgbG9jYXRpb246IGVudHJpZXNbaW5kZXhdLFxuICAgIGluZGV4OiBpbmRleCxcbiAgICBlbnRyaWVzOiBlbnRyaWVzLFxuICAgIGNyZWF0ZUhyZWY6IGNyZWF0ZUhyZWYsXG4gICAgcHVzaDogcHVzaCxcbiAgICByZXBsYWNlOiByZXBsYWNlLFxuICAgIGdvOiBnbyxcbiAgICBnb0JhY2s6IGdvQmFjayxcbiAgICBnb0ZvcndhcmQ6IGdvRm9yd2FyZCxcbiAgICBjYW5HbzogY2FuR28sXG4gICAgYmxvY2s6IGJsb2NrLFxuICAgIGxpc3RlbjogbGlzdGVuXG4gIH07XG5cbiAgcmV0dXJuIGhpc3Rvcnk7XG59O1xuXG5leHBvcnRzLmRlZmF1bHQgPSBjcmVhdGVNZW1vcnlIaXN0b3J5O1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vaGlzdG9yeS9jcmVhdGVNZW1vcnlIaXN0b3J5LmpzIiwiaW1wb3J0IFN5bWJvbCBmcm9tICcuL19TeW1ib2wuanMnO1xuaW1wb3J0IGdldFJhd1RhZyBmcm9tICcuL19nZXRSYXdUYWcuanMnO1xuaW1wb3J0IG9iamVjdFRvU3RyaW5nIGZyb20gJy4vX29iamVjdFRvU3RyaW5nLmpzJztcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIG51bGxUYWcgPSAnW29iamVjdCBOdWxsXScsXG4gICAgdW5kZWZpbmVkVGFnID0gJ1tvYmplY3QgVW5kZWZpbmVkXSc7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHN5bVRvU3RyaW5nVGFnID0gU3ltYm9sID8gU3ltYm9sLnRvU3RyaW5nVGFnIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBnZXRUYWdgIHdpdGhvdXQgZmFsbGJhY2tzIGZvciBidWdneSBlbnZpcm9ubWVudHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgYHRvU3RyaW5nVGFnYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUdldFRhZyh2YWx1ZSkge1xuICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgIHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkVGFnIDogbnVsbFRhZztcbiAgfVxuICByZXR1cm4gKHN5bVRvU3RyaW5nVGFnICYmIHN5bVRvU3RyaW5nVGFnIGluIE9iamVjdCh2YWx1ZSkpXG4gICAgPyBnZXRSYXdUYWcodmFsdWUpXG4gICAgOiBvYmplY3RUb1N0cmluZyh2YWx1ZSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VHZXRUYWc7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L2xvZGFzaC1lcy9fYmFzZUdldFRhZy5qcyIsIi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZ2xvYmFsYCBmcm9tIE5vZGUuanMuICovXG52YXIgZnJlZUdsb2JhbCA9IHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsICYmIGdsb2JhbC5PYmplY3QgPT09IE9iamVjdCAmJiBnbG9iYWw7XG5cbmV4cG9ydCBkZWZhdWx0IGZyZWVHbG9iYWw7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L2xvZGFzaC1lcy9fZnJlZUdsb2JhbC5qcyIsImltcG9ydCBvdmVyQXJnIGZyb20gJy4vX292ZXJBcmcuanMnO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBnZXRQcm90b3R5cGUgPSBvdmVyQXJnKE9iamVjdC5nZXRQcm90b3R5cGVPZiwgT2JqZWN0KTtcblxuZXhwb3J0IGRlZmF1bHQgZ2V0UHJvdG90eXBlO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9sb2Rhc2gtZXMvX2dldFByb3RvdHlwZS5qcyIsImltcG9ydCBTeW1ib2wgZnJvbSAnLi9fU3ltYm9sLmpzJztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBVc2VkIHRvIHJlc29sdmUgdGhlXG4gKiBbYHRvU3RyaW5nVGFnYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZylcbiAqIG9mIHZhbHVlcy5cbiAqL1xudmFyIG5hdGl2ZU9iamVjdFRvU3RyaW5nID0gb2JqZWN0UHJvdG8udG9TdHJpbmc7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHN5bVRvU3RyaW5nVGFnID0gU3ltYm9sID8gU3ltYm9sLnRvU3RyaW5nVGFnIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUdldFRhZ2Agd2hpY2ggaWdub3JlcyBgU3ltYm9sLnRvU3RyaW5nVGFnYCB2YWx1ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgcmF3IGB0b1N0cmluZ1RhZ2AuXG4gKi9cbmZ1bmN0aW9uIGdldFJhd1RhZyh2YWx1ZSkge1xuICB2YXIgaXNPd24gPSBoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBzeW1Ub1N0cmluZ1RhZyksXG4gICAgICB0YWcgPSB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ107XG5cbiAgdHJ5IHtcbiAgICB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ10gPSB1bmRlZmluZWQ7XG4gICAgdmFyIHVubWFza2VkID0gdHJ1ZTtcbiAgfSBjYXRjaCAoZSkge31cblxuICB2YXIgcmVzdWx0ID0gbmF0aXZlT2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSk7XG4gIGlmICh1bm1hc2tlZCkge1xuICAgIGlmIChpc093bikge1xuICAgICAgdmFsdWVbc3ltVG9TdHJpbmdUYWddID0gdGFnO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWxldGUgdmFsdWVbc3ltVG9TdHJpbmdUYWddO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBnZXRSYXdUYWc7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L2xvZGFzaC1lcy9fZ2V0UmF3VGFnLmpzIiwiLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqXG4gKiBVc2VkIHRvIHJlc29sdmUgdGhlXG4gKiBbYHRvU3RyaW5nVGFnYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZylcbiAqIG9mIHZhbHVlcy5cbiAqL1xudmFyIG5hdGl2ZU9iamVjdFRvU3RyaW5nID0gb2JqZWN0UHJvdG8udG9TdHJpbmc7XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIHN0cmluZyB1c2luZyBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgc3RyaW5nLlxuICovXG5mdW5jdGlvbiBvYmplY3RUb1N0cmluZyh2YWx1ZSkge1xuICByZXR1cm4gbmF0aXZlT2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IG9iamVjdFRvU3RyaW5nO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9sb2Rhc2gtZXMvX29iamVjdFRvU3RyaW5nLmpzIiwiLyoqXG4gKiBDcmVhdGVzIGEgdW5hcnkgZnVuY3Rpb24gdGhhdCBpbnZva2VzIGBmdW5jYCB3aXRoIGl0cyBhcmd1bWVudCB0cmFuc2Zvcm1lZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gd3JhcC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHRyYW5zZm9ybSBUaGUgYXJndW1lbnQgdHJhbnNmb3JtLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIG92ZXJBcmcoZnVuYywgdHJhbnNmb3JtKSB7XG4gIHJldHVybiBmdW5jdGlvbihhcmcpIHtcbiAgICByZXR1cm4gZnVuYyh0cmFuc2Zvcm0oYXJnKSk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IG92ZXJBcmc7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L2xvZGFzaC1lcy9fb3ZlckFyZy5qcyIsImltcG9ydCBmcmVlR2xvYmFsIGZyb20gJy4vX2ZyZWVHbG9iYWwuanMnO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYHNlbGZgLiAqL1xudmFyIGZyZWVTZWxmID0gdHlwZW9mIHNlbGYgPT0gJ29iamVjdCcgJiYgc2VsZiAmJiBzZWxmLk9iamVjdCA9PT0gT2JqZWN0ICYmIHNlbGY7XG5cbi8qKiBVc2VkIGFzIGEgcmVmZXJlbmNlIHRvIHRoZSBnbG9iYWwgb2JqZWN0LiAqL1xudmFyIHJvb3QgPSBmcmVlR2xvYmFsIHx8IGZyZWVTZWxmIHx8IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG5cbmV4cG9ydCBkZWZhdWx0IHJvb3Q7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L2xvZGFzaC1lcy9fcm9vdC5qcyIsIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UuIEEgdmFsdWUgaXMgb2JqZWN0LWxpa2UgaWYgaXQncyBub3QgYG51bGxgXG4gKiBhbmQgaGFzIGEgYHR5cGVvZmAgcmVzdWx0IG9mIFwib2JqZWN0XCIuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc09iamVjdExpa2Uoe30pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdExpa2UoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc09iamVjdExpa2UobnVsbCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc09iamVjdExpa2UodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgdHlwZW9mIHZhbHVlID09ICdvYmplY3QnO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc09iamVjdExpa2U7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L2xvZGFzaC1lcy9pc09iamVjdExpa2UuanMiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHZhciBpbnZhcmlhbnQgPSByZXF1aXJlKCdmYmpzL2xpYi9pbnZhcmlhbnQnKTtcbiAgdmFyIHdhcm5pbmcgPSByZXF1aXJlKCdmYmpzL2xpYi93YXJuaW5nJyk7XG4gIHZhciBSZWFjdFByb3BUeXBlc1NlY3JldCA9IHJlcXVpcmUoJy4vbGliL1JlYWN0UHJvcFR5cGVzU2VjcmV0Jyk7XG4gIHZhciBsb2dnZWRUeXBlRmFpbHVyZXMgPSB7fTtcbn1cblxuLyoqXG4gKiBBc3NlcnQgdGhhdCB0aGUgdmFsdWVzIG1hdGNoIHdpdGggdGhlIHR5cGUgc3BlY3MuXG4gKiBFcnJvciBtZXNzYWdlcyBhcmUgbWVtb3JpemVkIGFuZCB3aWxsIG9ubHkgYmUgc2hvd24gb25jZS5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gdHlwZVNwZWNzIE1hcCBvZiBuYW1lIHRvIGEgUmVhY3RQcm9wVHlwZVxuICogQHBhcmFtIHtvYmplY3R9IHZhbHVlcyBSdW50aW1lIHZhbHVlcyB0aGF0IG5lZWQgdG8gYmUgdHlwZS1jaGVja2VkXG4gKiBAcGFyYW0ge3N0cmluZ30gbG9jYXRpb24gZS5nLiBcInByb3BcIiwgXCJjb250ZXh0XCIsIFwiY2hpbGQgY29udGV4dFwiXG4gKiBAcGFyYW0ge3N0cmluZ30gY29tcG9uZW50TmFtZSBOYW1lIG9mIHRoZSBjb21wb25lbnQgZm9yIGVycm9yIG1lc3NhZ2VzLlxuICogQHBhcmFtIHs/RnVuY3Rpb259IGdldFN0YWNrIFJldHVybnMgdGhlIGNvbXBvbmVudCBzdGFjay5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGNoZWNrUHJvcFR5cGVzKHR5cGVTcGVjcywgdmFsdWVzLCBsb2NhdGlvbiwgY29tcG9uZW50TmFtZSwgZ2V0U3RhY2spIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBmb3IgKHZhciB0eXBlU3BlY05hbWUgaW4gdHlwZVNwZWNzKSB7XG4gICAgICBpZiAodHlwZVNwZWNzLmhhc093blByb3BlcnR5KHR5cGVTcGVjTmFtZSkpIHtcbiAgICAgICAgdmFyIGVycm9yO1xuICAgICAgICAvLyBQcm9wIHR5cGUgdmFsaWRhdGlvbiBtYXkgdGhyb3cuIEluIGNhc2UgdGhleSBkbywgd2UgZG9uJ3Qgd2FudCB0b1xuICAgICAgICAvLyBmYWlsIHRoZSByZW5kZXIgcGhhc2Ugd2hlcmUgaXQgZGlkbid0IGZhaWwgYmVmb3JlLiBTbyB3ZSBsb2cgaXQuXG4gICAgICAgIC8vIEFmdGVyIHRoZXNlIGhhdmUgYmVlbiBjbGVhbmVkIHVwLCB3ZSdsbCBsZXQgdGhlbSB0aHJvdy5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyBUaGlzIGlzIGludGVudGlvbmFsbHkgYW4gaW52YXJpYW50IHRoYXQgZ2V0cyBjYXVnaHQuIEl0J3MgdGhlIHNhbWVcbiAgICAgICAgICAvLyBiZWhhdmlvciBhcyB3aXRob3V0IHRoaXMgc3RhdGVtZW50IGV4Y2VwdCB3aXRoIGEgYmV0dGVyIG1lc3NhZ2UuXG4gICAgICAgICAgaW52YXJpYW50KHR5cGVvZiB0eXBlU3BlY3NbdHlwZVNwZWNOYW1lXSA9PT0gJ2Z1bmN0aW9uJywgJyVzOiAlcyB0eXBlIGAlc2AgaXMgaW52YWxpZDsgaXQgbXVzdCBiZSBhIGZ1bmN0aW9uLCB1c3VhbGx5IGZyb20gJyArICdSZWFjdC5Qcm9wVHlwZXMuJywgY29tcG9uZW50TmFtZSB8fCAnUmVhY3QgY2xhc3MnLCBsb2NhdGlvbiwgdHlwZVNwZWNOYW1lKTtcbiAgICAgICAgICBlcnJvciA9IHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdKHZhbHVlcywgdHlwZVNwZWNOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgbnVsbCwgUmVhY3RQcm9wVHlwZXNTZWNyZXQpO1xuICAgICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICAgIGVycm9yID0gZXg7XG4gICAgICAgIH1cbiAgICAgICAgd2FybmluZyghZXJyb3IgfHwgZXJyb3IgaW5zdGFuY2VvZiBFcnJvciwgJyVzOiB0eXBlIHNwZWNpZmljYXRpb24gb2YgJXMgYCVzYCBpcyBpbnZhbGlkOyB0aGUgdHlwZSBjaGVja2VyICcgKyAnZnVuY3Rpb24gbXVzdCByZXR1cm4gYG51bGxgIG9yIGFuIGBFcnJvcmAgYnV0IHJldHVybmVkIGEgJXMuICcgKyAnWW91IG1heSBoYXZlIGZvcmdvdHRlbiB0byBwYXNzIGFuIGFyZ3VtZW50IHRvIHRoZSB0eXBlIGNoZWNrZXIgJyArICdjcmVhdG9yIChhcnJheU9mLCBpbnN0YW5jZU9mLCBvYmplY3RPZiwgb25lT2YsIG9uZU9mVHlwZSwgYW5kICcgKyAnc2hhcGUgYWxsIHJlcXVpcmUgYW4gYXJndW1lbnQpLicsIGNvbXBvbmVudE5hbWUgfHwgJ1JlYWN0IGNsYXNzJywgbG9jYXRpb24sIHR5cGVTcGVjTmFtZSwgdHlwZW9mIGVycm9yKTtcbiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgJiYgIShlcnJvci5tZXNzYWdlIGluIGxvZ2dlZFR5cGVGYWlsdXJlcykpIHtcbiAgICAgICAgICAvLyBPbmx5IG1vbml0b3IgdGhpcyBmYWlsdXJlIG9uY2UgYmVjYXVzZSB0aGVyZSB0ZW5kcyB0byBiZSBhIGxvdCBvZiB0aGVcbiAgICAgICAgICAvLyBzYW1lIGVycm9yLlxuICAgICAgICAgIGxvZ2dlZFR5cGVGYWlsdXJlc1tlcnJvci5tZXNzYWdlXSA9IHRydWU7XG5cbiAgICAgICAgICB2YXIgc3RhY2sgPSBnZXRTdGFjayA/IGdldFN0YWNrKCkgOiAnJztcblxuICAgICAgICAgIHdhcm5pbmcoZmFsc2UsICdGYWlsZWQgJXMgdHlwZTogJXMlcycsIGxvY2F0aW9uLCBlcnJvci5tZXNzYWdlLCBzdGFjayAhPSBudWxsID8gc3RhY2sgOiAnJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjaGVja1Byb3BUeXBlcztcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcHJvcC10eXBlcy9jaGVja1Byb3BUeXBlcy5qcyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIGVtcHR5RnVuY3Rpb24gPSByZXF1aXJlKCdmYmpzL2xpYi9lbXB0eUZ1bmN0aW9uJyk7XG52YXIgaW52YXJpYW50ID0gcmVxdWlyZSgnZmJqcy9saWIvaW52YXJpYW50Jyk7XG52YXIgUmVhY3RQcm9wVHlwZXNTZWNyZXQgPSByZXF1aXJlKCcuL2xpYi9SZWFjdFByb3BUeXBlc1NlY3JldCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkge1xuICBmdW5jdGlvbiBzaGltKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwgc2VjcmV0KSB7XG4gICAgaWYgKHNlY3JldCA9PT0gUmVhY3RQcm9wVHlwZXNTZWNyZXQpIHtcbiAgICAgIC8vIEl0IGlzIHN0aWxsIHNhZmUgd2hlbiBjYWxsZWQgZnJvbSBSZWFjdC5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaW52YXJpYW50KFxuICAgICAgZmFsc2UsXG4gICAgICAnQ2FsbGluZyBQcm9wVHlwZXMgdmFsaWRhdG9ycyBkaXJlY3RseSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBgcHJvcC10eXBlc2AgcGFja2FnZS4gJyArXG4gICAgICAnVXNlIFByb3BUeXBlcy5jaGVja1Byb3BUeXBlcygpIHRvIGNhbGwgdGhlbS4gJyArXG4gICAgICAnUmVhZCBtb3JlIGF0IGh0dHA6Ly9mYi5tZS91c2UtY2hlY2stcHJvcC10eXBlcydcbiAgICApO1xuICB9O1xuICBzaGltLmlzUmVxdWlyZWQgPSBzaGltO1xuICBmdW5jdGlvbiBnZXRTaGltKCkge1xuICAgIHJldHVybiBzaGltO1xuICB9O1xuICAvLyBJbXBvcnRhbnQhXG4gIC8vIEtlZXAgdGhpcyBsaXN0IGluIHN5bmMgd2l0aCBwcm9kdWN0aW9uIHZlcnNpb24gaW4gYC4vZmFjdG9yeVdpdGhUeXBlQ2hlY2tlcnMuanNgLlxuICB2YXIgUmVhY3RQcm9wVHlwZXMgPSB7XG4gICAgYXJyYXk6IHNoaW0sXG4gICAgYm9vbDogc2hpbSxcbiAgICBmdW5jOiBzaGltLFxuICAgIG51bWJlcjogc2hpbSxcbiAgICBvYmplY3Q6IHNoaW0sXG4gICAgc3RyaW5nOiBzaGltLFxuICAgIHN5bWJvbDogc2hpbSxcblxuICAgIGFueTogc2hpbSxcbiAgICBhcnJheU9mOiBnZXRTaGltLFxuICAgIGVsZW1lbnQ6IHNoaW0sXG4gICAgaW5zdGFuY2VPZjogZ2V0U2hpbSxcbiAgICBub2RlOiBzaGltLFxuICAgIG9iamVjdE9mOiBnZXRTaGltLFxuICAgIG9uZU9mOiBnZXRTaGltLFxuICAgIG9uZU9mVHlwZTogZ2V0U2hpbSxcbiAgICBzaGFwZTogZ2V0U2hpbVxuICB9O1xuXG4gIFJlYWN0UHJvcFR5cGVzLmNoZWNrUHJvcFR5cGVzID0gZW1wdHlGdW5jdGlvbjtcbiAgUmVhY3RQcm9wVHlwZXMuUHJvcFR5cGVzID0gUmVhY3RQcm9wVHlwZXM7XG5cbiAgcmV0dXJuIFJlYWN0UHJvcFR5cGVzO1xufTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcHJvcC10eXBlcy9mYWN0b3J5V2l0aFRocm93aW5nU2hpbXMuanMiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgQVJJQURPTVByb3BlcnR5Q29uZmlnID0ge1xuICBQcm9wZXJ0aWVzOiB7XG4gICAgLy8gR2xvYmFsIFN0YXRlcyBhbmQgUHJvcGVydGllc1xuICAgICdhcmlhLWN1cnJlbnQnOiAwLCAvLyBzdGF0ZVxuICAgICdhcmlhLWRldGFpbHMnOiAwLFxuICAgICdhcmlhLWRpc2FibGVkJzogMCwgLy8gc3RhdGVcbiAgICAnYXJpYS1oaWRkZW4nOiAwLCAvLyBzdGF0ZVxuICAgICdhcmlhLWludmFsaWQnOiAwLCAvLyBzdGF0ZVxuICAgICdhcmlhLWtleXNob3J0Y3V0cyc6IDAsXG4gICAgJ2FyaWEtbGFiZWwnOiAwLFxuICAgICdhcmlhLXJvbGVkZXNjcmlwdGlvbic6IDAsXG4gICAgLy8gV2lkZ2V0IEF0dHJpYnV0ZXNcbiAgICAnYXJpYS1hdXRvY29tcGxldGUnOiAwLFxuICAgICdhcmlhLWNoZWNrZWQnOiAwLFxuICAgICdhcmlhLWV4cGFuZGVkJzogMCxcbiAgICAnYXJpYS1oYXNwb3B1cCc6IDAsXG4gICAgJ2FyaWEtbGV2ZWwnOiAwLFxuICAgICdhcmlhLW1vZGFsJzogMCxcbiAgICAnYXJpYS1tdWx0aWxpbmUnOiAwLFxuICAgICdhcmlhLW11bHRpc2VsZWN0YWJsZSc6IDAsXG4gICAgJ2FyaWEtb3JpZW50YXRpb24nOiAwLFxuICAgICdhcmlhLXBsYWNlaG9sZGVyJzogMCxcbiAgICAnYXJpYS1wcmVzc2VkJzogMCxcbiAgICAnYXJpYS1yZWFkb25seSc6IDAsXG4gICAgJ2FyaWEtcmVxdWlyZWQnOiAwLFxuICAgICdhcmlhLXNlbGVjdGVkJzogMCxcbiAgICAnYXJpYS1zb3J0JzogMCxcbiAgICAnYXJpYS12YWx1ZW1heCc6IDAsXG4gICAgJ2FyaWEtdmFsdWVtaW4nOiAwLFxuICAgICdhcmlhLXZhbHVlbm93JzogMCxcbiAgICAnYXJpYS12YWx1ZXRleHQnOiAwLFxuICAgIC8vIExpdmUgUmVnaW9uIEF0dHJpYnV0ZXNcbiAgICAnYXJpYS1hdG9taWMnOiAwLFxuICAgICdhcmlhLWJ1c3knOiAwLFxuICAgICdhcmlhLWxpdmUnOiAwLFxuICAgICdhcmlhLXJlbGV2YW50JzogMCxcbiAgICAvLyBEcmFnLWFuZC1Ecm9wIEF0dHJpYnV0ZXNcbiAgICAnYXJpYS1kcm9wZWZmZWN0JzogMCxcbiAgICAnYXJpYS1ncmFiYmVkJzogMCxcbiAgICAvLyBSZWxhdGlvbnNoaXAgQXR0cmlidXRlc1xuICAgICdhcmlhLWFjdGl2ZWRlc2NlbmRhbnQnOiAwLFxuICAgICdhcmlhLWNvbGNvdW50JzogMCxcbiAgICAnYXJpYS1jb2xpbmRleCc6IDAsXG4gICAgJ2FyaWEtY29sc3Bhbic6IDAsXG4gICAgJ2FyaWEtY29udHJvbHMnOiAwLFxuICAgICdhcmlhLWRlc2NyaWJlZGJ5JzogMCxcbiAgICAnYXJpYS1lcnJvcm1lc3NhZ2UnOiAwLFxuICAgICdhcmlhLWZsb3d0byc6IDAsXG4gICAgJ2FyaWEtbGFiZWxsZWRieSc6IDAsXG4gICAgJ2FyaWEtb3ducyc6IDAsXG4gICAgJ2FyaWEtcG9zaW5zZXQnOiAwLFxuICAgICdhcmlhLXJvd2NvdW50JzogMCxcbiAgICAnYXJpYS1yb3dpbmRleCc6IDAsXG4gICAgJ2FyaWEtcm93c3Bhbic6IDAsXG4gICAgJ2FyaWEtc2V0c2l6ZSc6IDBcbiAgfSxcbiAgRE9NQXR0cmlidXRlTmFtZXM6IHt9LFxuICBET01Qcm9wZXJ0eU5hbWVzOiB7fVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBBUklBRE9NUHJvcGVydHlDb25maWc7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1kb20vbGliL0FSSUFET01Qcm9wZXJ0eUNvbmZpZy5qcyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBSZWFjdERPTUNvbXBvbmVudFRyZWUgPSByZXF1aXJlKCcuL1JlYWN0RE9NQ29tcG9uZW50VHJlZScpO1xuXG52YXIgZm9jdXNOb2RlID0gcmVxdWlyZSgnZmJqcy9saWIvZm9jdXNOb2RlJyk7XG5cbnZhciBBdXRvRm9jdXNVdGlscyA9IHtcbiAgZm9jdXNET01Db21wb25lbnQ6IGZ1bmN0aW9uICgpIHtcbiAgICBmb2N1c05vZGUoUmVhY3RET01Db21wb25lbnRUcmVlLmdldE5vZGVGcm9tSW5zdGFuY2UodGhpcykpO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEF1dG9Gb2N1c1V0aWxzO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QtZG9tL2xpYi9BdXRvRm9jdXNVdGlscy5qcyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIEV2ZW50UHJvcGFnYXRvcnMgPSByZXF1aXJlKCcuL0V2ZW50UHJvcGFnYXRvcnMnKTtcbnZhciBFeGVjdXRpb25FbnZpcm9ubWVudCA9IHJlcXVpcmUoJ2ZianMvbGliL0V4ZWN1dGlvbkVudmlyb25tZW50Jyk7XG52YXIgRmFsbGJhY2tDb21wb3NpdGlvblN0YXRlID0gcmVxdWlyZSgnLi9GYWxsYmFja0NvbXBvc2l0aW9uU3RhdGUnKTtcbnZhciBTeW50aGV0aWNDb21wb3NpdGlvbkV2ZW50ID0gcmVxdWlyZSgnLi9TeW50aGV0aWNDb21wb3NpdGlvbkV2ZW50Jyk7XG52YXIgU3ludGhldGljSW5wdXRFdmVudCA9IHJlcXVpcmUoJy4vU3ludGhldGljSW5wdXRFdmVudCcpO1xuXG52YXIgRU5EX0tFWUNPREVTID0gWzksIDEzLCAyNywgMzJdOyAvLyBUYWIsIFJldHVybiwgRXNjLCBTcGFjZVxudmFyIFNUQVJUX0tFWUNPREUgPSAyMjk7XG5cbnZhciBjYW5Vc2VDb21wb3NpdGlvbkV2ZW50ID0gRXhlY3V0aW9uRW52aXJvbm1lbnQuY2FuVXNlRE9NICYmICdDb21wb3NpdGlvbkV2ZW50JyBpbiB3aW5kb3c7XG5cbnZhciBkb2N1bWVudE1vZGUgPSBudWxsO1xuaWYgKEV4ZWN1dGlvbkVudmlyb25tZW50LmNhblVzZURPTSAmJiAnZG9jdW1lbnRNb2RlJyBpbiBkb2N1bWVudCkge1xuICBkb2N1bWVudE1vZGUgPSBkb2N1bWVudC5kb2N1bWVudE1vZGU7XG59XG5cbi8vIFdlYmtpdCBvZmZlcnMgYSB2ZXJ5IHVzZWZ1bCBgdGV4dElucHV0YCBldmVudCB0aGF0IGNhbiBiZSB1c2VkIHRvXG4vLyBkaXJlY3RseSByZXByZXNlbnQgYGJlZm9yZUlucHV0YC4gVGhlIElFIGB0ZXh0aW5wdXRgIGV2ZW50IGlzIG5vdCBhc1xuLy8gdXNlZnVsLCBzbyB3ZSBkb24ndCB1c2UgaXQuXG52YXIgY2FuVXNlVGV4dElucHV0RXZlbnQgPSBFeGVjdXRpb25FbnZpcm9ubWVudC5jYW5Vc2VET00gJiYgJ1RleHRFdmVudCcgaW4gd2luZG93ICYmICFkb2N1bWVudE1vZGUgJiYgIWlzUHJlc3RvKCk7XG5cbi8vIEluIElFOSssIHdlIGhhdmUgYWNjZXNzIHRvIGNvbXBvc2l0aW9uIGV2ZW50cywgYnV0IHRoZSBkYXRhIHN1cHBsaWVkXG4vLyBieSB0aGUgbmF0aXZlIGNvbXBvc2l0aW9uZW5kIGV2ZW50IG1heSBiZSBpbmNvcnJlY3QuIEphcGFuZXNlIGlkZW9ncmFwaGljXG4vLyBzcGFjZXMsIGZvciBpbnN0YW5jZSAoXFx1MzAwMCkgYXJlIG5vdCByZWNvcmRlZCBjb3JyZWN0bHkuXG52YXIgdXNlRmFsbGJhY2tDb21wb3NpdGlvbkRhdGEgPSBFeGVjdXRpb25FbnZpcm9ubWVudC5jYW5Vc2VET00gJiYgKCFjYW5Vc2VDb21wb3NpdGlvbkV2ZW50IHx8IGRvY3VtZW50TW9kZSAmJiBkb2N1bWVudE1vZGUgPiA4ICYmIGRvY3VtZW50TW9kZSA8PSAxMSk7XG5cbi8qKlxuICogT3BlcmEgPD0gMTIgaW5jbHVkZXMgVGV4dEV2ZW50IGluIHdpbmRvdywgYnV0IGRvZXMgbm90IGZpcmVcbiAqIHRleHQgaW5wdXQgZXZlbnRzLiBSZWx5IG9uIGtleXByZXNzIGluc3RlYWQuXG4gKi9cbmZ1bmN0aW9uIGlzUHJlc3RvKCkge1xuICB2YXIgb3BlcmEgPSB3aW5kb3cub3BlcmE7XG4gIHJldHVybiB0eXBlb2Ygb3BlcmEgPT09ICdvYmplY3QnICYmIHR5cGVvZiBvcGVyYS52ZXJzaW9uID09PSAnZnVuY3Rpb24nICYmIHBhcnNlSW50KG9wZXJhLnZlcnNpb24oKSwgMTApIDw9IDEyO1xufVxuXG52YXIgU1BBQ0VCQVJfQ09ERSA9IDMyO1xudmFyIFNQQUNFQkFSX0NIQVIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKFNQQUNFQkFSX0NPREUpO1xuXG4vLyBFdmVudHMgYW5kIHRoZWlyIGNvcnJlc3BvbmRpbmcgcHJvcGVydHkgbmFtZXMuXG52YXIgZXZlbnRUeXBlcyA9IHtcbiAgYmVmb3JlSW5wdXQ6IHtcbiAgICBwaGFzZWRSZWdpc3RyYXRpb25OYW1lczoge1xuICAgICAgYnViYmxlZDogJ29uQmVmb3JlSW5wdXQnLFxuICAgICAgY2FwdHVyZWQ6ICdvbkJlZm9yZUlucHV0Q2FwdHVyZSdcbiAgICB9LFxuICAgIGRlcGVuZGVuY2llczogWyd0b3BDb21wb3NpdGlvbkVuZCcsICd0b3BLZXlQcmVzcycsICd0b3BUZXh0SW5wdXQnLCAndG9wUGFzdGUnXVxuICB9LFxuICBjb21wb3NpdGlvbkVuZDoge1xuICAgIHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOiB7XG4gICAgICBidWJibGVkOiAnb25Db21wb3NpdGlvbkVuZCcsXG4gICAgICBjYXB0dXJlZDogJ29uQ29tcG9zaXRpb25FbmRDYXB0dXJlJ1xuICAgIH0sXG4gICAgZGVwZW5kZW5jaWVzOiBbJ3RvcEJsdXInLCAndG9wQ29tcG9zaXRpb25FbmQnLCAndG9wS2V5RG93bicsICd0b3BLZXlQcmVzcycsICd0b3BLZXlVcCcsICd0b3BNb3VzZURvd24nXVxuICB9LFxuICBjb21wb3NpdGlvblN0YXJ0OiB7XG4gICAgcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6IHtcbiAgICAgIGJ1YmJsZWQ6ICdvbkNvbXBvc2l0aW9uU3RhcnQnLFxuICAgICAgY2FwdHVyZWQ6ICdvbkNvbXBvc2l0aW9uU3RhcnRDYXB0dXJlJ1xuICAgIH0sXG4gICAgZGVwZW5kZW5jaWVzOiBbJ3RvcEJsdXInLCAndG9wQ29tcG9zaXRpb25TdGFydCcsICd0b3BLZXlEb3duJywgJ3RvcEtleVByZXNzJywgJ3RvcEtleVVwJywgJ3RvcE1vdXNlRG93biddXG4gIH0sXG4gIGNvbXBvc2l0aW9uVXBkYXRlOiB7XG4gICAgcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6IHtcbiAgICAgIGJ1YmJsZWQ6ICdvbkNvbXBvc2l0aW9uVXBkYXRlJyxcbiAgICAgIGNhcHR1cmVkOiAnb25Db21wb3NpdGlvblVwZGF0ZUNhcHR1cmUnXG4gICAgfSxcbiAgICBkZXBlbmRlbmNpZXM6IFsndG9wQmx1cicsICd0b3BDb21wb3NpdGlvblVwZGF0ZScsICd0b3BLZXlEb3duJywgJ3RvcEtleVByZXNzJywgJ3RvcEtleVVwJywgJ3RvcE1vdXNlRG93biddXG4gIH1cbn07XG5cbi8vIFRyYWNrIHdoZXRoZXIgd2UndmUgZXZlciBoYW5kbGVkIGEga2V5cHJlc3Mgb24gdGhlIHNwYWNlIGtleS5cbnZhciBoYXNTcGFjZUtleXByZXNzID0gZmFsc2U7XG5cbi8qKlxuICogUmV0dXJuIHdoZXRoZXIgYSBuYXRpdmUga2V5cHJlc3MgZXZlbnQgaXMgYXNzdW1lZCB0byBiZSBhIGNvbW1hbmQuXG4gKiBUaGlzIGlzIHJlcXVpcmVkIGJlY2F1c2UgRmlyZWZveCBmaXJlcyBga2V5cHJlc3NgIGV2ZW50cyBmb3Iga2V5IGNvbW1hbmRzXG4gKiAoY3V0LCBjb3B5LCBzZWxlY3QtYWxsLCBldGMuKSBldmVuIHRob3VnaCBubyBjaGFyYWN0ZXIgaXMgaW5zZXJ0ZWQuXG4gKi9cbmZ1bmN0aW9uIGlzS2V5cHJlc3NDb21tYW5kKG5hdGl2ZUV2ZW50KSB7XG4gIHJldHVybiAobmF0aXZlRXZlbnQuY3RybEtleSB8fCBuYXRpdmVFdmVudC5hbHRLZXkgfHwgbmF0aXZlRXZlbnQubWV0YUtleSkgJiZcbiAgLy8gY3RybEtleSAmJiBhbHRLZXkgaXMgZXF1aXZhbGVudCB0byBBbHRHciwgYW5kIGlzIG5vdCBhIGNvbW1hbmQuXG4gICEobmF0aXZlRXZlbnQuY3RybEtleSAmJiBuYXRpdmVFdmVudC5hbHRLZXkpO1xufVxuXG4vKipcbiAqIFRyYW5zbGF0ZSBuYXRpdmUgdG9wIGxldmVsIGV2ZW50cyBpbnRvIGV2ZW50IHR5cGVzLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0b3BMZXZlbFR5cGVcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqL1xuZnVuY3Rpb24gZ2V0Q29tcG9zaXRpb25FdmVudFR5cGUodG9wTGV2ZWxUeXBlKSB7XG4gIHN3aXRjaCAodG9wTGV2ZWxUeXBlKSB7XG4gICAgY2FzZSAndG9wQ29tcG9zaXRpb25TdGFydCc6XG4gICAgICByZXR1cm4gZXZlbnRUeXBlcy5jb21wb3NpdGlvblN0YXJ0O1xuICAgIGNhc2UgJ3RvcENvbXBvc2l0aW9uRW5kJzpcbiAgICAgIHJldHVybiBldmVudFR5cGVzLmNvbXBvc2l0aW9uRW5kO1xuICAgIGNhc2UgJ3RvcENvbXBvc2l0aW9uVXBkYXRlJzpcbiAgICAgIHJldHVybiBldmVudFR5cGVzLmNvbXBvc2l0aW9uVXBkYXRlO1xuICB9XG59XG5cbi8qKlxuICogRG9lcyBvdXIgZmFsbGJhY2sgYmVzdC1ndWVzcyBtb2RlbCB0aGluayB0aGlzIGV2ZW50IHNpZ25pZmllcyB0aGF0XG4gKiBjb21wb3NpdGlvbiBoYXMgYmVndW4/XG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHRvcExldmVsVHlwZVxuICogQHBhcmFtIHtvYmplY3R9IG5hdGl2ZUV2ZW50XG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc0ZhbGxiYWNrQ29tcG9zaXRpb25TdGFydCh0b3BMZXZlbFR5cGUsIG5hdGl2ZUV2ZW50KSB7XG4gIHJldHVybiB0b3BMZXZlbFR5cGUgPT09ICd0b3BLZXlEb3duJyAmJiBuYXRpdmVFdmVudC5rZXlDb2RlID09PSBTVEFSVF9LRVlDT0RFO1xufVxuXG4vKipcbiAqIERvZXMgb3VyIGZhbGxiYWNrIG1vZGUgdGhpbmsgdGhhdCB0aGlzIGV2ZW50IGlzIHRoZSBlbmQgb2YgY29tcG9zaXRpb24/XG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHRvcExldmVsVHlwZVxuICogQHBhcmFtIHtvYmplY3R9IG5hdGl2ZUV2ZW50XG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc0ZhbGxiYWNrQ29tcG9zaXRpb25FbmQodG9wTGV2ZWxUeXBlLCBuYXRpdmVFdmVudCkge1xuICBzd2l0Y2ggKHRvcExldmVsVHlwZSkge1xuICAgIGNhc2UgJ3RvcEtleVVwJzpcbiAgICAgIC8vIENvbW1hbmQga2V5cyBpbnNlcnQgb3IgY2xlYXIgSU1FIGlucHV0LlxuICAgICAgcmV0dXJuIEVORF9LRVlDT0RFUy5pbmRleE9mKG5hdGl2ZUV2ZW50LmtleUNvZGUpICE9PSAtMTtcbiAgICBjYXNlICd0b3BLZXlEb3duJzpcbiAgICAgIC8vIEV4cGVjdCBJTUUga2V5Q29kZSBvbiBlYWNoIGtleWRvd24uIElmIHdlIGdldCBhbnkgb3RoZXJcbiAgICAgIC8vIGNvZGUgd2UgbXVzdCBoYXZlIGV4aXRlZCBlYXJsaWVyLlxuICAgICAgcmV0dXJuIG5hdGl2ZUV2ZW50LmtleUNvZGUgIT09IFNUQVJUX0tFWUNPREU7XG4gICAgY2FzZSAndG9wS2V5UHJlc3MnOlxuICAgIGNhc2UgJ3RvcE1vdXNlRG93bic6XG4gICAgY2FzZSAndG9wQmx1cic6XG4gICAgICAvLyBFdmVudHMgYXJlIG5vdCBwb3NzaWJsZSB3aXRob3V0IGNhbmNlbGxpbmcgSU1FLlxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG4vKipcbiAqIEdvb2dsZSBJbnB1dCBUb29scyBwcm92aWRlcyBjb21wb3NpdGlvbiBkYXRhIHZpYSBhIEN1c3RvbUV2ZW50LFxuICogd2l0aCB0aGUgYGRhdGFgIHByb3BlcnR5IHBvcHVsYXRlZCBpbiB0aGUgYGRldGFpbGAgb2JqZWN0LiBJZiB0aGlzXG4gKiBpcyBhdmFpbGFibGUgb24gdGhlIGV2ZW50IG9iamVjdCwgdXNlIGl0LiBJZiBub3QsIHRoaXMgaXMgYSBwbGFpblxuICogY29tcG9zaXRpb24gZXZlbnQgYW5kIHdlIGhhdmUgbm90aGluZyBzcGVjaWFsIHRvIGV4dHJhY3QuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IG5hdGl2ZUV2ZW50XG4gKiBAcmV0dXJuIHs/c3RyaW5nfVxuICovXG5mdW5jdGlvbiBnZXREYXRhRnJvbUN1c3RvbUV2ZW50KG5hdGl2ZUV2ZW50KSB7XG4gIHZhciBkZXRhaWwgPSBuYXRpdmVFdmVudC5kZXRhaWw7XG4gIGlmICh0eXBlb2YgZGV0YWlsID09PSAnb2JqZWN0JyAmJiAnZGF0YScgaW4gZGV0YWlsKSB7XG4gICAgcmV0dXJuIGRldGFpbC5kYXRhO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG4vLyBUcmFjayB0aGUgY3VycmVudCBJTUUgY29tcG9zaXRpb24gZmFsbGJhY2sgb2JqZWN0LCBpZiBhbnkuXG52YXIgY3VycmVudENvbXBvc2l0aW9uID0gbnVsbDtcblxuLyoqXG4gKiBAcmV0dXJuIHs/b2JqZWN0fSBBIFN5bnRoZXRpY0NvbXBvc2l0aW9uRXZlbnQuXG4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RDb21wb3NpdGlvbkV2ZW50KHRvcExldmVsVHlwZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KSB7XG4gIHZhciBldmVudFR5cGU7XG4gIHZhciBmYWxsYmFja0RhdGE7XG5cbiAgaWYgKGNhblVzZUNvbXBvc2l0aW9uRXZlbnQpIHtcbiAgICBldmVudFR5cGUgPSBnZXRDb21wb3NpdGlvbkV2ZW50VHlwZSh0b3BMZXZlbFR5cGUpO1xuICB9IGVsc2UgaWYgKCFjdXJyZW50Q29tcG9zaXRpb24pIHtcbiAgICBpZiAoaXNGYWxsYmFja0NvbXBvc2l0aW9uU3RhcnQodG9wTGV2ZWxUeXBlLCBuYXRpdmVFdmVudCkpIHtcbiAgICAgIGV2ZW50VHlwZSA9IGV2ZW50VHlwZXMuY29tcG9zaXRpb25TdGFydDtcbiAgICB9XG4gIH0gZWxzZSBpZiAoaXNGYWxsYmFja0NvbXBvc2l0aW9uRW5kKHRvcExldmVsVHlwZSwgbmF0aXZlRXZlbnQpKSB7XG4gICAgZXZlbnRUeXBlID0gZXZlbnRUeXBlcy5jb21wb3NpdGlvbkVuZDtcbiAgfVxuXG4gIGlmICghZXZlbnRUeXBlKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpZiAodXNlRmFsbGJhY2tDb21wb3NpdGlvbkRhdGEpIHtcbiAgICAvLyBUaGUgY3VycmVudCBjb21wb3NpdGlvbiBpcyBzdG9yZWQgc3RhdGljYWxseSBhbmQgbXVzdCBub3QgYmVcbiAgICAvLyBvdmVyd3JpdHRlbiB3aGlsZSBjb21wb3NpdGlvbiBjb250aW51ZXMuXG4gICAgaWYgKCFjdXJyZW50Q29tcG9zaXRpb24gJiYgZXZlbnRUeXBlID09PSBldmVudFR5cGVzLmNvbXBvc2l0aW9uU3RhcnQpIHtcbiAgICAgIGN1cnJlbnRDb21wb3NpdGlvbiA9IEZhbGxiYWNrQ29tcG9zaXRpb25TdGF0ZS5nZXRQb29sZWQobmF0aXZlRXZlbnRUYXJnZXQpO1xuICAgIH0gZWxzZSBpZiAoZXZlbnRUeXBlID09PSBldmVudFR5cGVzLmNvbXBvc2l0aW9uRW5kKSB7XG4gICAgICBpZiAoY3VycmVudENvbXBvc2l0aW9uKSB7XG4gICAgICAgIGZhbGxiYWNrRGF0YSA9IGN1cnJlbnRDb21wb3NpdGlvbi5nZXREYXRhKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdmFyIGV2ZW50ID0gU3ludGhldGljQ29tcG9zaXRpb25FdmVudC5nZXRQb29sZWQoZXZlbnRUeXBlLCB0YXJnZXRJbnN0LCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpO1xuXG4gIGlmIChmYWxsYmFja0RhdGEpIHtcbiAgICAvLyBJbmplY3QgZGF0YSBnZW5lcmF0ZWQgZnJvbSBmYWxsYmFjayBwYXRoIGludG8gdGhlIHN5bnRoZXRpYyBldmVudC5cbiAgICAvLyBUaGlzIG1hdGNoZXMgdGhlIHByb3BlcnR5IG9mIG5hdGl2ZSBDb21wb3NpdGlvbkV2ZW50SW50ZXJmYWNlLlxuICAgIGV2ZW50LmRhdGEgPSBmYWxsYmFja0RhdGE7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGN1c3RvbURhdGEgPSBnZXREYXRhRnJvbUN1c3RvbUV2ZW50KG5hdGl2ZUV2ZW50KTtcbiAgICBpZiAoY3VzdG9tRGF0YSAhPT0gbnVsbCkge1xuICAgICAgZXZlbnQuZGF0YSA9IGN1c3RvbURhdGE7XG4gICAgfVxuICB9XG5cbiAgRXZlbnRQcm9wYWdhdG9ycy5hY2N1bXVsYXRlVHdvUGhhc2VEaXNwYXRjaGVzKGV2ZW50KTtcbiAgcmV0dXJuIGV2ZW50O1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB0b3BMZXZlbFR5cGUgUmVjb3JkIGZyb20gYEV2ZW50Q29uc3RhbnRzYC5cbiAqIEBwYXJhbSB7b2JqZWN0fSBuYXRpdmVFdmVudCBOYXRpdmUgYnJvd3NlciBldmVudC5cbiAqIEByZXR1cm4gez9zdHJpbmd9IFRoZSBzdHJpbmcgY29ycmVzcG9uZGluZyB0byB0aGlzIGBiZWZvcmVJbnB1dGAgZXZlbnQuXG4gKi9cbmZ1bmN0aW9uIGdldE5hdGl2ZUJlZm9yZUlucHV0Q2hhcnModG9wTGV2ZWxUeXBlLCBuYXRpdmVFdmVudCkge1xuICBzd2l0Y2ggKHRvcExldmVsVHlwZSkge1xuICAgIGNhc2UgJ3RvcENvbXBvc2l0aW9uRW5kJzpcbiAgICAgIHJldHVybiBnZXREYXRhRnJvbUN1c3RvbUV2ZW50KG5hdGl2ZUV2ZW50KTtcbiAgICBjYXNlICd0b3BLZXlQcmVzcyc6XG4gICAgICAvKipcbiAgICAgICAqIElmIG5hdGl2ZSBgdGV4dElucHV0YCBldmVudHMgYXJlIGF2YWlsYWJsZSwgb3VyIGdvYWwgaXMgdG8gbWFrZVxuICAgICAgICogdXNlIG9mIHRoZW0uIEhvd2V2ZXIsIHRoZXJlIGlzIGEgc3BlY2lhbCBjYXNlOiB0aGUgc3BhY2ViYXIga2V5LlxuICAgICAgICogSW4gV2Via2l0LCBwcmV2ZW50aW5nIGRlZmF1bHQgb24gYSBzcGFjZWJhciBgdGV4dElucHV0YCBldmVudFxuICAgICAgICogY2FuY2VscyBjaGFyYWN0ZXIgaW5zZXJ0aW9uLCBidXQgaXQgKmFsc28qIGNhdXNlcyB0aGUgYnJvd3NlclxuICAgICAgICogdG8gZmFsbCBiYWNrIHRvIGl0cyBkZWZhdWx0IHNwYWNlYmFyIGJlaGF2aW9yIG9mIHNjcm9sbGluZyB0aGVcbiAgICAgICAqIHBhZ2UuXG4gICAgICAgKlxuICAgICAgICogVHJhY2tpbmcgYXQ6XG4gICAgICAgKiBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9MzU1MTAzXG4gICAgICAgKlxuICAgICAgICogVG8gYXZvaWQgdGhpcyBpc3N1ZSwgdXNlIHRoZSBrZXlwcmVzcyBldmVudCBhcyBpZiBubyBgdGV4dElucHV0YFxuICAgICAgICogZXZlbnQgaXMgYXZhaWxhYmxlLlxuICAgICAgICovXG4gICAgICB2YXIgd2hpY2ggPSBuYXRpdmVFdmVudC53aGljaDtcbiAgICAgIGlmICh3aGljaCAhPT0gU1BBQ0VCQVJfQ09ERSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgaGFzU3BhY2VLZXlwcmVzcyA9IHRydWU7XG4gICAgICByZXR1cm4gU1BBQ0VCQVJfQ0hBUjtcblxuICAgIGNhc2UgJ3RvcFRleHRJbnB1dCc6XG4gICAgICAvLyBSZWNvcmQgdGhlIGNoYXJhY3RlcnMgdG8gYmUgYWRkZWQgdG8gdGhlIERPTS5cbiAgICAgIHZhciBjaGFycyA9IG5hdGl2ZUV2ZW50LmRhdGE7XG5cbiAgICAgIC8vIElmIGl0J3MgYSBzcGFjZWJhciBjaGFyYWN0ZXIsIGFzc3VtZSB0aGF0IHdlIGhhdmUgYWxyZWFkeSBoYW5kbGVkXG4gICAgICAvLyBpdCBhdCB0aGUga2V5cHJlc3MgbGV2ZWwgYW5kIGJhaWwgaW1tZWRpYXRlbHkuIEFuZHJvaWQgQ2hyb21lXG4gICAgICAvLyBkb2Vzbid0IGdpdmUgdXMga2V5Y29kZXMsIHNvIHdlIG5lZWQgdG8gYmxhY2tsaXN0IGl0LlxuICAgICAgaWYgKGNoYXJzID09PSBTUEFDRUJBUl9DSEFSICYmIGhhc1NwYWNlS2V5cHJlc3MpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjaGFycztcblxuICAgIGRlZmF1bHQ6XG4gICAgICAvLyBGb3Igb3RoZXIgbmF0aXZlIGV2ZW50IHR5cGVzLCBkbyBub3RoaW5nLlxuICAgICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuLyoqXG4gKiBGb3IgYnJvd3NlcnMgdGhhdCBkbyBub3QgcHJvdmlkZSB0aGUgYHRleHRJbnB1dGAgZXZlbnQsIGV4dHJhY3QgdGhlXG4gKiBhcHByb3ByaWF0ZSBzdHJpbmcgdG8gdXNlIGZvciBTeW50aGV0aWNJbnB1dEV2ZW50LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0b3BMZXZlbFR5cGUgUmVjb3JkIGZyb20gYEV2ZW50Q29uc3RhbnRzYC5cbiAqIEBwYXJhbSB7b2JqZWN0fSBuYXRpdmVFdmVudCBOYXRpdmUgYnJvd3NlciBldmVudC5cbiAqIEByZXR1cm4gez9zdHJpbmd9IFRoZSBmYWxsYmFjayBzdHJpbmcgZm9yIHRoaXMgYGJlZm9yZUlucHV0YCBldmVudC5cbiAqL1xuZnVuY3Rpb24gZ2V0RmFsbGJhY2tCZWZvcmVJbnB1dENoYXJzKHRvcExldmVsVHlwZSwgbmF0aXZlRXZlbnQpIHtcbiAgLy8gSWYgd2UgYXJlIGN1cnJlbnRseSBjb21wb3NpbmcgKElNRSkgYW5kIHVzaW5nIGEgZmFsbGJhY2sgdG8gZG8gc28sXG4gIC8vIHRyeSB0byBleHRyYWN0IHRoZSBjb21wb3NlZCBjaGFyYWN0ZXJzIGZyb20gdGhlIGZhbGxiYWNrIG9iamVjdC5cbiAgLy8gSWYgY29tcG9zaXRpb24gZXZlbnQgaXMgYXZhaWxhYmxlLCB3ZSBleHRyYWN0IGEgc3RyaW5nIG9ubHkgYXRcbiAgLy8gY29tcG9zaXRpb25ldmVudCwgb3RoZXJ3aXNlIGV4dHJhY3QgaXQgYXQgZmFsbGJhY2sgZXZlbnRzLlxuICBpZiAoY3VycmVudENvbXBvc2l0aW9uKSB7XG4gICAgaWYgKHRvcExldmVsVHlwZSA9PT0gJ3RvcENvbXBvc2l0aW9uRW5kJyB8fCAhY2FuVXNlQ29tcG9zaXRpb25FdmVudCAmJiBpc0ZhbGxiYWNrQ29tcG9zaXRpb25FbmQodG9wTGV2ZWxUeXBlLCBuYXRpdmVFdmVudCkpIHtcbiAgICAgIHZhciBjaGFycyA9IGN1cnJlbnRDb21wb3NpdGlvbi5nZXREYXRhKCk7XG4gICAgICBGYWxsYmFja0NvbXBvc2l0aW9uU3RhdGUucmVsZWFzZShjdXJyZW50Q29tcG9zaXRpb24pO1xuICAgICAgY3VycmVudENvbXBvc2l0aW9uID0gbnVsbDtcbiAgICAgIHJldHVybiBjaGFycztcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBzd2l0Y2ggKHRvcExldmVsVHlwZSkge1xuICAgIGNhc2UgJ3RvcFBhc3RlJzpcbiAgICAgIC8vIElmIGEgcGFzdGUgZXZlbnQgb2NjdXJzIGFmdGVyIGEga2V5cHJlc3MsIHRocm93IG91dCB0aGUgaW5wdXRcbiAgICAgIC8vIGNoYXJzLiBQYXN0ZSBldmVudHMgc2hvdWxkIG5vdCBsZWFkIHRvIEJlZm9yZUlucHV0IGV2ZW50cy5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIGNhc2UgJ3RvcEtleVByZXNzJzpcbiAgICAgIC8qKlxuICAgICAgICogQXMgb2YgdjI3LCBGaXJlZm94IG1heSBmaXJlIGtleXByZXNzIGV2ZW50cyBldmVuIHdoZW4gbm8gY2hhcmFjdGVyXG4gICAgICAgKiB3aWxsIGJlIGluc2VydGVkLiBBIGZldyBwb3NzaWJpbGl0aWVzOlxuICAgICAgICpcbiAgICAgICAqIC0gYHdoaWNoYCBpcyBgMGAuIEFycm93IGtleXMsIEVzYyBrZXksIGV0Yy5cbiAgICAgICAqXG4gICAgICAgKiAtIGB3aGljaGAgaXMgdGhlIHByZXNzZWQga2V5IGNvZGUsIGJ1dCBubyBjaGFyIGlzIGF2YWlsYWJsZS5cbiAgICAgICAqICAgRXg6ICdBbHRHciArIGRgIGluIFBvbGlzaC4gVGhlcmUgaXMgbm8gbW9kaWZpZWQgY2hhcmFjdGVyIGZvclxuICAgICAgICogICB0aGlzIGtleSBjb21iaW5hdGlvbiBhbmQgbm8gY2hhcmFjdGVyIGlzIGluc2VydGVkIGludG8gdGhlXG4gICAgICAgKiAgIGRvY3VtZW50LCBidXQgRkYgZmlyZXMgdGhlIGtleXByZXNzIGZvciBjaGFyIGNvZGUgYDEwMGAgYW55d2F5LlxuICAgICAgICogICBObyBgaW5wdXRgIGV2ZW50IHdpbGwgb2NjdXIuXG4gICAgICAgKlxuICAgICAgICogLSBgd2hpY2hgIGlzIHRoZSBwcmVzc2VkIGtleSBjb2RlLCBidXQgYSBjb21tYW5kIGNvbWJpbmF0aW9uIGlzXG4gICAgICAgKiAgIGJlaW5nIHVzZWQuIEV4OiBgQ21kK0NgLiBObyBjaGFyYWN0ZXIgaXMgaW5zZXJ0ZWQsIGFuZCBub1xuICAgICAgICogICBgaW5wdXRgIGV2ZW50IHdpbGwgb2NjdXIuXG4gICAgICAgKi9cbiAgICAgIGlmIChuYXRpdmVFdmVudC53aGljaCAmJiAhaXNLZXlwcmVzc0NvbW1hbmQobmF0aXZlRXZlbnQpKSB7XG4gICAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKG5hdGl2ZUV2ZW50LndoaWNoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIGNhc2UgJ3RvcENvbXBvc2l0aW9uRW5kJzpcbiAgICAgIHJldHVybiB1c2VGYWxsYmFja0NvbXBvc2l0aW9uRGF0YSA/IG51bGwgOiBuYXRpdmVFdmVudC5kYXRhO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG4vKipcbiAqIEV4dHJhY3QgYSBTeW50aGV0aWNJbnB1dEV2ZW50IGZvciBgYmVmb3JlSW5wdXRgLCBiYXNlZCBvbiBlaXRoZXIgbmF0aXZlXG4gKiBgdGV4dElucHV0YCBvciBmYWxsYmFjayBiZWhhdmlvci5cbiAqXG4gKiBAcmV0dXJuIHs/b2JqZWN0fSBBIFN5bnRoZXRpY0lucHV0RXZlbnQuXG4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RCZWZvcmVJbnB1dEV2ZW50KHRvcExldmVsVHlwZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KSB7XG4gIHZhciBjaGFycztcblxuICBpZiAoY2FuVXNlVGV4dElucHV0RXZlbnQpIHtcbiAgICBjaGFycyA9IGdldE5hdGl2ZUJlZm9yZUlucHV0Q2hhcnModG9wTGV2ZWxUeXBlLCBuYXRpdmVFdmVudCk7XG4gIH0gZWxzZSB7XG4gICAgY2hhcnMgPSBnZXRGYWxsYmFja0JlZm9yZUlucHV0Q2hhcnModG9wTGV2ZWxUeXBlLCBuYXRpdmVFdmVudCk7XG4gIH1cblxuICAvLyBJZiBubyBjaGFyYWN0ZXJzIGFyZSBiZWluZyBpbnNlcnRlZCwgbm8gQmVmb3JlSW5wdXQgZXZlbnQgc2hvdWxkXG4gIC8vIGJlIGZpcmVkLlxuICBpZiAoIWNoYXJzKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB2YXIgZXZlbnQgPSBTeW50aGV0aWNJbnB1dEV2ZW50LmdldFBvb2xlZChldmVudFR5cGVzLmJlZm9yZUlucHV0LCB0YXJnZXRJbnN0LCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpO1xuXG4gIGV2ZW50LmRhdGEgPSBjaGFycztcbiAgRXZlbnRQcm9wYWdhdG9ycy5hY2N1bXVsYXRlVHdvUGhhc2VEaXNwYXRjaGVzKGV2ZW50KTtcbiAgcmV0dXJuIGV2ZW50O1xufVxuXG4vKipcbiAqIENyZWF0ZSBhbiBgb25CZWZvcmVJbnB1dGAgZXZlbnQgdG8gbWF0Y2hcbiAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTMvV0QtRE9NLUxldmVsLTMtRXZlbnRzLTIwMTMxMTA1LyNldmVudHMtaW5wdXRldmVudHMuXG4gKlxuICogVGhpcyBldmVudCBwbHVnaW4gaXMgYmFzZWQgb24gdGhlIG5hdGl2ZSBgdGV4dElucHV0YCBldmVudFxuICogYXZhaWxhYmxlIGluIENocm9tZSwgU2FmYXJpLCBPcGVyYSwgYW5kIElFLiBUaGlzIGV2ZW50IGZpcmVzIGFmdGVyXG4gKiBgb25LZXlQcmVzc2AgYW5kIGBvbkNvbXBvc2l0aW9uRW5kYCwgYnV0IGJlZm9yZSBgb25JbnB1dGAuXG4gKlxuICogYGJlZm9yZUlucHV0YCBpcyBzcGVjJ2QgYnV0IG5vdCBpbXBsZW1lbnRlZCBpbiBhbnkgYnJvd3NlcnMsIGFuZFxuICogdGhlIGBpbnB1dGAgZXZlbnQgZG9lcyBub3QgcHJvdmlkZSBhbnkgdXNlZnVsIGluZm9ybWF0aW9uIGFib3V0IHdoYXQgaGFzXG4gKiBhY3R1YWxseSBiZWVuIGFkZGVkLCBjb250cmFyeSB0byB0aGUgc3BlYy4gVGh1cywgYHRleHRJbnB1dGAgaXMgdGhlIGJlc3RcbiAqIGF2YWlsYWJsZSBldmVudCB0byBpZGVudGlmeSB0aGUgY2hhcmFjdGVycyB0aGF0IGhhdmUgYWN0dWFsbHkgYmVlbiBpbnNlcnRlZFxuICogaW50byB0aGUgdGFyZ2V0IG5vZGUuXG4gKlxuICogVGhpcyBwbHVnaW4gaXMgYWxzbyByZXNwb25zaWJsZSBmb3IgZW1pdHRpbmcgYGNvbXBvc2l0aW9uYCBldmVudHMsIHRodXNcbiAqIGFsbG93aW5nIHVzIHRvIHNoYXJlIGNvbXBvc2l0aW9uIGZhbGxiYWNrIGNvZGUgZm9yIGJvdGggYGJlZm9yZUlucHV0YCBhbmRcbiAqIGBjb21wb3NpdGlvbmAgZXZlbnQgdHlwZXMuXG4gKi9cbnZhciBCZWZvcmVJbnB1dEV2ZW50UGx1Z2luID0ge1xuICBldmVudFR5cGVzOiBldmVudFR5cGVzLFxuXG4gIGV4dHJhY3RFdmVudHM6IGZ1bmN0aW9uICh0b3BMZXZlbFR5cGUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCkge1xuICAgIHJldHVybiBbZXh0cmFjdENvbXBvc2l0aW9uRXZlbnQodG9wTGV2ZWxUeXBlLCB0YXJnZXRJbnN0LCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpLCBleHRyYWN0QmVmb3JlSW5wdXRFdmVudCh0b3BMZXZlbFR5cGUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCldO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEJlZm9yZUlucHV0RXZlbnRQbHVnaW47XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1kb20vbGliL0JlZm9yZUlucHV0RXZlbnRQbHVnaW4uanMiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgQ1NTUHJvcGVydHkgPSByZXF1aXJlKCcuL0NTU1Byb3BlcnR5Jyk7XG52YXIgRXhlY3V0aW9uRW52aXJvbm1lbnQgPSByZXF1aXJlKCdmYmpzL2xpYi9FeGVjdXRpb25FbnZpcm9ubWVudCcpO1xudmFyIFJlYWN0SW5zdHJ1bWVudGF0aW9uID0gcmVxdWlyZSgnLi9SZWFjdEluc3RydW1lbnRhdGlvbicpO1xuXG52YXIgY2FtZWxpemVTdHlsZU5hbWUgPSByZXF1aXJlKCdmYmpzL2xpYi9jYW1lbGl6ZVN0eWxlTmFtZScpO1xudmFyIGRhbmdlcm91c1N0eWxlVmFsdWUgPSByZXF1aXJlKCcuL2Rhbmdlcm91c1N0eWxlVmFsdWUnKTtcbnZhciBoeXBoZW5hdGVTdHlsZU5hbWUgPSByZXF1aXJlKCdmYmpzL2xpYi9oeXBoZW5hdGVTdHlsZU5hbWUnKTtcbnZhciBtZW1vaXplU3RyaW5nT25seSA9IHJlcXVpcmUoJ2ZianMvbGliL21lbW9pemVTdHJpbmdPbmx5Jyk7XG52YXIgd2FybmluZyA9IHJlcXVpcmUoJ2ZianMvbGliL3dhcm5pbmcnKTtcblxudmFyIHByb2Nlc3NTdHlsZU5hbWUgPSBtZW1vaXplU3RyaW5nT25seShmdW5jdGlvbiAoc3R5bGVOYW1lKSB7XG4gIHJldHVybiBoeXBoZW5hdGVTdHlsZU5hbWUoc3R5bGVOYW1lKTtcbn0pO1xuXG52YXIgaGFzU2hvcnRoYW5kUHJvcGVydHlCdWcgPSBmYWxzZTtcbnZhciBzdHlsZUZsb2F0QWNjZXNzb3IgPSAnY3NzRmxvYXQnO1xuaWYgKEV4ZWN1dGlvbkVudmlyb25tZW50LmNhblVzZURPTSkge1xuICB2YXIgdGVtcFN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jykuc3R5bGU7XG4gIHRyeSB7XG4gICAgLy8gSUU4IHRocm93cyBcIkludmFsaWQgYXJndW1lbnQuXCIgaWYgcmVzZXR0aW5nIHNob3J0aGFuZCBzdHlsZSBwcm9wZXJ0aWVzLlxuICAgIHRlbXBTdHlsZS5mb250ID0gJyc7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBoYXNTaG9ydGhhbmRQcm9wZXJ0eUJ1ZyA9IHRydWU7XG4gIH1cbiAgLy8gSUU4IG9ubHkgc3VwcG9ydHMgYWNjZXNzaW5nIGNzc0Zsb2F0IChzdGFuZGFyZCkgYXMgc3R5bGVGbG9hdFxuICBpZiAoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLmNzc0Zsb2F0ID09PSB1bmRlZmluZWQpIHtcbiAgICBzdHlsZUZsb2F0QWNjZXNzb3IgPSAnc3R5bGVGbG9hdCc7XG4gIH1cbn1cblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgLy8gJ21zVHJhbnNmb3JtJyBpcyBjb3JyZWN0LCBidXQgdGhlIG90aGVyIHByZWZpeGVzIHNob3VsZCBiZSBjYXBpdGFsaXplZFxuICB2YXIgYmFkVmVuZG9yZWRTdHlsZU5hbWVQYXR0ZXJuID0gL14oPzp3ZWJraXR8bW96fG8pW0EtWl0vO1xuXG4gIC8vIHN0eWxlIHZhbHVlcyBzaG91bGRuJ3QgY29udGFpbiBhIHNlbWljb2xvblxuICB2YXIgYmFkU3R5bGVWYWx1ZVdpdGhTZW1pY29sb25QYXR0ZXJuID0gLztcXHMqJC87XG5cbiAgdmFyIHdhcm5lZFN0eWxlTmFtZXMgPSB7fTtcbiAgdmFyIHdhcm5lZFN0eWxlVmFsdWVzID0ge307XG4gIHZhciB3YXJuZWRGb3JOYU5WYWx1ZSA9IGZhbHNlO1xuXG4gIHZhciB3YXJuSHlwaGVuYXRlZFN0eWxlTmFtZSA9IGZ1bmN0aW9uIChuYW1lLCBvd25lcikge1xuICAgIGlmICh3YXJuZWRTdHlsZU5hbWVzLmhhc093blByb3BlcnR5KG5hbWUpICYmIHdhcm5lZFN0eWxlTmFtZXNbbmFtZV0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB3YXJuZWRTdHlsZU5hbWVzW25hbWVdID0gdHJ1ZTtcbiAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyhmYWxzZSwgJ1Vuc3VwcG9ydGVkIHN0eWxlIHByb3BlcnR5ICVzLiBEaWQgeW91IG1lYW4gJXM/JXMnLCBuYW1lLCBjYW1lbGl6ZVN0eWxlTmFtZShuYW1lKSwgY2hlY2tSZW5kZXJNZXNzYWdlKG93bmVyKSkgOiB2b2lkIDA7XG4gIH07XG5cbiAgdmFyIHdhcm5CYWRWZW5kb3JlZFN0eWxlTmFtZSA9IGZ1bmN0aW9uIChuYW1lLCBvd25lcikge1xuICAgIGlmICh3YXJuZWRTdHlsZU5hbWVzLmhhc093blByb3BlcnR5KG5hbWUpICYmIHdhcm5lZFN0eWxlTmFtZXNbbmFtZV0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB3YXJuZWRTdHlsZU5hbWVzW25hbWVdID0gdHJ1ZTtcbiAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyhmYWxzZSwgJ1Vuc3VwcG9ydGVkIHZlbmRvci1wcmVmaXhlZCBzdHlsZSBwcm9wZXJ0eSAlcy4gRGlkIHlvdSBtZWFuICVzPyVzJywgbmFtZSwgbmFtZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIG5hbWUuc2xpY2UoMSksIGNoZWNrUmVuZGVyTWVzc2FnZShvd25lcikpIDogdm9pZCAwO1xuICB9O1xuXG4gIHZhciB3YXJuU3R5bGVWYWx1ZVdpdGhTZW1pY29sb24gPSBmdW5jdGlvbiAobmFtZSwgdmFsdWUsIG93bmVyKSB7XG4gICAgaWYgKHdhcm5lZFN0eWxlVmFsdWVzLmhhc093blByb3BlcnR5KHZhbHVlKSAmJiB3YXJuZWRTdHlsZVZhbHVlc1t2YWx1ZV0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB3YXJuZWRTdHlsZVZhbHVlc1t2YWx1ZV0gPSB0cnVlO1xuICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKGZhbHNlLCBcIlN0eWxlIHByb3BlcnR5IHZhbHVlcyBzaG91bGRuJ3QgY29udGFpbiBhIHNlbWljb2xvbi4lcyBcIiArICdUcnkgXCIlczogJXNcIiBpbnN0ZWFkLicsIGNoZWNrUmVuZGVyTWVzc2FnZShvd25lciksIG5hbWUsIHZhbHVlLnJlcGxhY2UoYmFkU3R5bGVWYWx1ZVdpdGhTZW1pY29sb25QYXR0ZXJuLCAnJykpIDogdm9pZCAwO1xuICB9O1xuXG4gIHZhciB3YXJuU3R5bGVWYWx1ZUlzTmFOID0gZnVuY3Rpb24gKG5hbWUsIHZhbHVlLCBvd25lcikge1xuICAgIGlmICh3YXJuZWRGb3JOYU5WYWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHdhcm5lZEZvck5hTlZhbHVlID0gdHJ1ZTtcbiAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyhmYWxzZSwgJ2BOYU5gIGlzIGFuIGludmFsaWQgdmFsdWUgZm9yIHRoZSBgJXNgIGNzcyBzdHlsZSBwcm9wZXJ0eS4lcycsIG5hbWUsIGNoZWNrUmVuZGVyTWVzc2FnZShvd25lcikpIDogdm9pZCAwO1xuICB9O1xuXG4gIHZhciBjaGVja1JlbmRlck1lc3NhZ2UgPSBmdW5jdGlvbiAob3duZXIpIHtcbiAgICBpZiAob3duZXIpIHtcbiAgICAgIHZhciBuYW1lID0gb3duZXIuZ2V0TmFtZSgpO1xuICAgICAgaWYgKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuICcgQ2hlY2sgdGhlIHJlbmRlciBtZXRob2Qgb2YgYCcgKyBuYW1lICsgJ2AuJztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuICcnO1xuICB9O1xuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICAgKiBAcGFyYW0geyp9IHZhbHVlXG4gICAqIEBwYXJhbSB7UmVhY3RET01Db21wb25lbnR9IGNvbXBvbmVudFxuICAgKi9cbiAgdmFyIHdhcm5WYWxpZFN0eWxlID0gZnVuY3Rpb24gKG5hbWUsIHZhbHVlLCBjb21wb25lbnQpIHtcbiAgICB2YXIgb3duZXI7XG4gICAgaWYgKGNvbXBvbmVudCkge1xuICAgICAgb3duZXIgPSBjb21wb25lbnQuX2N1cnJlbnRFbGVtZW50Ll9vd25lcjtcbiAgICB9XG4gICAgaWYgKG5hbWUuaW5kZXhPZignLScpID4gLTEpIHtcbiAgICAgIHdhcm5IeXBoZW5hdGVkU3R5bGVOYW1lKG5hbWUsIG93bmVyKTtcbiAgICB9IGVsc2UgaWYgKGJhZFZlbmRvcmVkU3R5bGVOYW1lUGF0dGVybi50ZXN0KG5hbWUpKSB7XG4gICAgICB3YXJuQmFkVmVuZG9yZWRTdHlsZU5hbWUobmFtZSwgb3duZXIpO1xuICAgIH0gZWxzZSBpZiAoYmFkU3R5bGVWYWx1ZVdpdGhTZW1pY29sb25QYXR0ZXJuLnRlc3QodmFsdWUpKSB7XG4gICAgICB3YXJuU3R5bGVWYWx1ZVdpdGhTZW1pY29sb24obmFtZSwgdmFsdWUsIG93bmVyKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiBpc05hTih2YWx1ZSkpIHtcbiAgICAgIHdhcm5TdHlsZVZhbHVlSXNOYU4obmFtZSwgdmFsdWUsIG93bmVyKTtcbiAgICB9XG4gIH07XG59XG5cbi8qKlxuICogT3BlcmF0aW9ucyBmb3IgZGVhbGluZyB3aXRoIENTUyBwcm9wZXJ0aWVzLlxuICovXG52YXIgQ1NTUHJvcGVydHlPcGVyYXRpb25zID0ge1xuICAvKipcbiAgICogU2VyaWFsaXplcyBhIG1hcHBpbmcgb2Ygc3R5bGUgcHJvcGVydGllcyBmb3IgdXNlIGFzIGlubGluZSBzdHlsZXM6XG4gICAqXG4gICAqICAgPiBjcmVhdGVNYXJrdXBGb3JTdHlsZXMoe3dpZHRoOiAnMjAwcHgnLCBoZWlnaHQ6IDB9KVxuICAgKiAgIFwid2lkdGg6MjAwcHg7aGVpZ2h0OjA7XCJcbiAgICpcbiAgICogVW5kZWZpbmVkIHZhbHVlcyBhcmUgaWdub3JlZCBzbyB0aGF0IGRlY2xhcmF0aXZlIHByb2dyYW1taW5nIGlzIGVhc2llci5cbiAgICogVGhlIHJlc3VsdCBzaG91bGQgYmUgSFRNTC1lc2NhcGVkIGJlZm9yZSBpbnNlcnRpb24gaW50byB0aGUgRE9NLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gc3R5bGVzXG4gICAqIEBwYXJhbSB7UmVhY3RET01Db21wb25lbnR9IGNvbXBvbmVudFxuICAgKiBAcmV0dXJuIHs/c3RyaW5nfVxuICAgKi9cbiAgY3JlYXRlTWFya3VwRm9yU3R5bGVzOiBmdW5jdGlvbiAoc3R5bGVzLCBjb21wb25lbnQpIHtcbiAgICB2YXIgc2VyaWFsaXplZCA9ICcnO1xuICAgIGZvciAodmFyIHN0eWxlTmFtZSBpbiBzdHlsZXMpIHtcbiAgICAgIGlmICghc3R5bGVzLmhhc093blByb3BlcnR5KHN0eWxlTmFtZSkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICB2YXIgaXNDdXN0b21Qcm9wZXJ0eSA9IHN0eWxlTmFtZS5pbmRleE9mKCctLScpID09PSAwO1xuICAgICAgdmFyIHN0eWxlVmFsdWUgPSBzdHlsZXNbc3R5bGVOYW1lXTtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGlmICghaXNDdXN0b21Qcm9wZXJ0eSkge1xuICAgICAgICAgIHdhcm5WYWxpZFN0eWxlKHN0eWxlTmFtZSwgc3R5bGVWYWx1ZSwgY29tcG9uZW50KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHN0eWxlVmFsdWUgIT0gbnVsbCkge1xuICAgICAgICBzZXJpYWxpemVkICs9IHByb2Nlc3NTdHlsZU5hbWUoc3R5bGVOYW1lKSArICc6JztcbiAgICAgICAgc2VyaWFsaXplZCArPSBkYW5nZXJvdXNTdHlsZVZhbHVlKHN0eWxlTmFtZSwgc3R5bGVWYWx1ZSwgY29tcG9uZW50LCBpc0N1c3RvbVByb3BlcnR5KSArICc7JztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHNlcmlhbGl6ZWQgfHwgbnVsbDtcbiAgfSxcblxuICAvKipcbiAgICogU2V0cyB0aGUgdmFsdWUgZm9yIG11bHRpcGxlIHN0eWxlcyBvbiBhIG5vZGUuICBJZiBhIHZhbHVlIGlzIHNwZWNpZmllZCBhc1xuICAgKiAnJyAoZW1wdHkgc3RyaW5nKSwgdGhlIGNvcnJlc3BvbmRpbmcgc3R5bGUgcHJvcGVydHkgd2lsbCBiZSB1bnNldC5cbiAgICpcbiAgICogQHBhcmFtIHtET01FbGVtZW50fSBub2RlXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBzdHlsZXNcbiAgICogQHBhcmFtIHtSZWFjdERPTUNvbXBvbmVudH0gY29tcG9uZW50XG4gICAqL1xuICBzZXRWYWx1ZUZvclN0eWxlczogZnVuY3Rpb24gKG5vZGUsIHN0eWxlcywgY29tcG9uZW50KSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIFJlYWN0SW5zdHJ1bWVudGF0aW9uLmRlYnVnVG9vbC5vbkhvc3RPcGVyYXRpb24oe1xuICAgICAgICBpbnN0YW5jZUlEOiBjb21wb25lbnQuX2RlYnVnSUQsXG4gICAgICAgIHR5cGU6ICd1cGRhdGUgc3R5bGVzJyxcbiAgICAgICAgcGF5bG9hZDogc3R5bGVzXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB2YXIgc3R5bGUgPSBub2RlLnN0eWxlO1xuICAgIGZvciAodmFyIHN0eWxlTmFtZSBpbiBzdHlsZXMpIHtcbiAgICAgIGlmICghc3R5bGVzLmhhc093blByb3BlcnR5KHN0eWxlTmFtZSkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICB2YXIgaXNDdXN0b21Qcm9wZXJ0eSA9IHN0eWxlTmFtZS5pbmRleE9mKCctLScpID09PSAwO1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgaWYgKCFpc0N1c3RvbVByb3BlcnR5KSB7XG4gICAgICAgICAgd2FyblZhbGlkU3R5bGUoc3R5bGVOYW1lLCBzdHlsZXNbc3R5bGVOYW1lXSwgY29tcG9uZW50KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdmFyIHN0eWxlVmFsdWUgPSBkYW5nZXJvdXNTdHlsZVZhbHVlKHN0eWxlTmFtZSwgc3R5bGVzW3N0eWxlTmFtZV0sIGNvbXBvbmVudCwgaXNDdXN0b21Qcm9wZXJ0eSk7XG4gICAgICBpZiAoc3R5bGVOYW1lID09PSAnZmxvYXQnIHx8IHN0eWxlTmFtZSA9PT0gJ2Nzc0Zsb2F0Jykge1xuICAgICAgICBzdHlsZU5hbWUgPSBzdHlsZUZsb2F0QWNjZXNzb3I7XG4gICAgICB9XG4gICAgICBpZiAoaXNDdXN0b21Qcm9wZXJ0eSkge1xuICAgICAgICBzdHlsZS5zZXRQcm9wZXJ0eShzdHlsZU5hbWUsIHN0eWxlVmFsdWUpO1xuICAgICAgfSBlbHNlIGlmIChzdHlsZVZhbHVlKSB7XG4gICAgICAgIHN0eWxlW3N0eWxlTmFtZV0gPSBzdHlsZVZhbHVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGV4cGFuc2lvbiA9IGhhc1Nob3J0aGFuZFByb3BlcnR5QnVnICYmIENTU1Byb3BlcnR5LnNob3J0aGFuZFByb3BlcnR5RXhwYW5zaW9uc1tzdHlsZU5hbWVdO1xuICAgICAgICBpZiAoZXhwYW5zaW9uKSB7XG4gICAgICAgICAgLy8gU2hvcnRoYW5kIHByb3BlcnR5IHRoYXQgSUU4IHdvbid0IGxpa2UgdW5zZXR0aW5nLCBzbyB1bnNldCBlYWNoXG4gICAgICAgICAgLy8gY29tcG9uZW50IHRvIHBsYWNhdGUgaXRcbiAgICAgICAgICBmb3IgKHZhciBpbmRpdmlkdWFsU3R5bGVOYW1lIGluIGV4cGFuc2lvbikge1xuICAgICAgICAgICAgc3R5bGVbaW5kaXZpZHVhbFN0eWxlTmFtZV0gPSAnJztcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3R5bGVbc3R5bGVOYW1lXSA9ICcnO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IENTU1Byb3BlcnR5T3BlcmF0aW9ucztcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3JlYWN0LWRvbS9saWIvQ1NTUHJvcGVydHlPcGVyYXRpb25zLmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIEV2ZW50UGx1Z2luSHViID0gcmVxdWlyZSgnLi9FdmVudFBsdWdpbkh1YicpO1xudmFyIEV2ZW50UHJvcGFnYXRvcnMgPSByZXF1aXJlKCcuL0V2ZW50UHJvcGFnYXRvcnMnKTtcbnZhciBFeGVjdXRpb25FbnZpcm9ubWVudCA9IHJlcXVpcmUoJ2ZianMvbGliL0V4ZWN1dGlvbkVudmlyb25tZW50Jyk7XG52YXIgUmVhY3RET01Db21wb25lbnRUcmVlID0gcmVxdWlyZSgnLi9SZWFjdERPTUNvbXBvbmVudFRyZWUnKTtcbnZhciBSZWFjdFVwZGF0ZXMgPSByZXF1aXJlKCcuL1JlYWN0VXBkYXRlcycpO1xudmFyIFN5bnRoZXRpY0V2ZW50ID0gcmVxdWlyZSgnLi9TeW50aGV0aWNFdmVudCcpO1xuXG52YXIgaW5wdXRWYWx1ZVRyYWNraW5nID0gcmVxdWlyZSgnLi9pbnB1dFZhbHVlVHJhY2tpbmcnKTtcbnZhciBnZXRFdmVudFRhcmdldCA9IHJlcXVpcmUoJy4vZ2V0RXZlbnRUYXJnZXQnKTtcbnZhciBpc0V2ZW50U3VwcG9ydGVkID0gcmVxdWlyZSgnLi9pc0V2ZW50U3VwcG9ydGVkJyk7XG52YXIgaXNUZXh0SW5wdXRFbGVtZW50ID0gcmVxdWlyZSgnLi9pc1RleHRJbnB1dEVsZW1lbnQnKTtcblxudmFyIGV2ZW50VHlwZXMgPSB7XG4gIGNoYW5nZToge1xuICAgIHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOiB7XG4gICAgICBidWJibGVkOiAnb25DaGFuZ2UnLFxuICAgICAgY2FwdHVyZWQ6ICdvbkNoYW5nZUNhcHR1cmUnXG4gICAgfSxcbiAgICBkZXBlbmRlbmNpZXM6IFsndG9wQmx1cicsICd0b3BDaGFuZ2UnLCAndG9wQ2xpY2snLCAndG9wRm9jdXMnLCAndG9wSW5wdXQnLCAndG9wS2V5RG93bicsICd0b3BLZXlVcCcsICd0b3BTZWxlY3Rpb25DaGFuZ2UnXVxuICB9XG59O1xuXG5mdW5jdGlvbiBjcmVhdGVBbmRBY2N1bXVsYXRlQ2hhbmdlRXZlbnQoaW5zdCwgbmF0aXZlRXZlbnQsIHRhcmdldCkge1xuICB2YXIgZXZlbnQgPSBTeW50aGV0aWNFdmVudC5nZXRQb29sZWQoZXZlbnRUeXBlcy5jaGFuZ2UsIGluc3QsIG5hdGl2ZUV2ZW50LCB0YXJnZXQpO1xuICBldmVudC50eXBlID0gJ2NoYW5nZSc7XG4gIEV2ZW50UHJvcGFnYXRvcnMuYWNjdW11bGF0ZVR3b1BoYXNlRGlzcGF0Y2hlcyhldmVudCk7XG4gIHJldHVybiBldmVudDtcbn1cbi8qKlxuICogRm9yIElFIHNoaW1zXG4gKi9cbnZhciBhY3RpdmVFbGVtZW50ID0gbnVsbDtcbnZhciBhY3RpdmVFbGVtZW50SW5zdCA9IG51bGw7XG5cbi8qKlxuICogU0VDVElPTjogaGFuZGxlIGBjaGFuZ2VgIGV2ZW50XG4gKi9cbmZ1bmN0aW9uIHNob3VsZFVzZUNoYW5nZUV2ZW50KGVsZW0pIHtcbiAgdmFyIG5vZGVOYW1lID0gZWxlbS5ub2RlTmFtZSAmJiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG4gIHJldHVybiBub2RlTmFtZSA9PT0gJ3NlbGVjdCcgfHwgbm9kZU5hbWUgPT09ICdpbnB1dCcgJiYgZWxlbS50eXBlID09PSAnZmlsZSc7XG59XG5cbnZhciBkb2VzQ2hhbmdlRXZlbnRCdWJibGUgPSBmYWxzZTtcbmlmIChFeGVjdXRpb25FbnZpcm9ubWVudC5jYW5Vc2VET00pIHtcbiAgLy8gU2VlIGBoYW5kbGVDaGFuZ2VgIGNvbW1lbnQgYmVsb3dcbiAgZG9lc0NoYW5nZUV2ZW50QnViYmxlID0gaXNFdmVudFN1cHBvcnRlZCgnY2hhbmdlJykgJiYgKCFkb2N1bWVudC5kb2N1bWVudE1vZGUgfHwgZG9jdW1lbnQuZG9jdW1lbnRNb2RlID4gOCk7XG59XG5cbmZ1bmN0aW9uIG1hbnVhbERpc3BhdGNoQ2hhbmdlRXZlbnQobmF0aXZlRXZlbnQpIHtcbiAgdmFyIGV2ZW50ID0gY3JlYXRlQW5kQWNjdW11bGF0ZUNoYW5nZUV2ZW50KGFjdGl2ZUVsZW1lbnRJbnN0LCBuYXRpdmVFdmVudCwgZ2V0RXZlbnRUYXJnZXQobmF0aXZlRXZlbnQpKTtcblxuICAvLyBJZiBjaGFuZ2UgYW5kIHByb3BlcnR5Y2hhbmdlIGJ1YmJsZWQsIHdlJ2QganVzdCBiaW5kIHRvIGl0IGxpa2UgYWxsIHRoZVxuICAvLyBvdGhlciBldmVudHMgYW5kIGhhdmUgaXQgZ28gdGhyb3VnaCBSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXIuIFNpbmNlIGl0XG4gIC8vIGRvZXNuJ3QsIHdlIG1hbnVhbGx5IGxpc3RlbiBmb3IgdGhlIGV2ZW50cyBhbmQgc28gd2UgaGF2ZSB0byBlbnF1ZXVlIGFuZFxuICAvLyBwcm9jZXNzIHRoZSBhYnN0cmFjdCBldmVudCBtYW51YWxseS5cbiAgLy9cbiAgLy8gQmF0Y2hpbmcgaXMgbmVjZXNzYXJ5IGhlcmUgaW4gb3JkZXIgdG8gZW5zdXJlIHRoYXQgYWxsIGV2ZW50IGhhbmRsZXJzIHJ1blxuICAvLyBiZWZvcmUgdGhlIG5leHQgcmVyZW5kZXIgKGluY2x1ZGluZyBldmVudCBoYW5kbGVycyBhdHRhY2hlZCB0byBhbmNlc3RvclxuICAvLyBlbGVtZW50cyBpbnN0ZWFkIG9mIGRpcmVjdGx5IG9uIHRoZSBpbnB1dCkuIFdpdGhvdXQgdGhpcywgY29udHJvbGxlZFxuICAvLyBjb21wb25lbnRzIGRvbid0IHdvcmsgcHJvcGVybHkgaW4gY29uanVuY3Rpb24gd2l0aCBldmVudCBidWJibGluZyBiZWNhdXNlXG4gIC8vIHRoZSBjb21wb25lbnQgaXMgcmVyZW5kZXJlZCBhbmQgdGhlIHZhbHVlIHJldmVydGVkIGJlZm9yZSBhbGwgdGhlIGV2ZW50XG4gIC8vIGhhbmRsZXJzIGNhbiBydW4uIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzcwOC5cbiAgUmVhY3RVcGRhdGVzLmJhdGNoZWRVcGRhdGVzKHJ1bkV2ZW50SW5CYXRjaCwgZXZlbnQpO1xufVxuXG5mdW5jdGlvbiBydW5FdmVudEluQmF0Y2goZXZlbnQpIHtcbiAgRXZlbnRQbHVnaW5IdWIuZW5xdWV1ZUV2ZW50cyhldmVudCk7XG4gIEV2ZW50UGx1Z2luSHViLnByb2Nlc3NFdmVudFF1ZXVlKGZhbHNlKTtcbn1cblxuZnVuY3Rpb24gc3RhcnRXYXRjaGluZ0ZvckNoYW5nZUV2ZW50SUU4KHRhcmdldCwgdGFyZ2V0SW5zdCkge1xuICBhY3RpdmVFbGVtZW50ID0gdGFyZ2V0O1xuICBhY3RpdmVFbGVtZW50SW5zdCA9IHRhcmdldEluc3Q7XG4gIGFjdGl2ZUVsZW1lbnQuYXR0YWNoRXZlbnQoJ29uY2hhbmdlJywgbWFudWFsRGlzcGF0Y2hDaGFuZ2VFdmVudCk7XG59XG5cbmZ1bmN0aW9uIHN0b3BXYXRjaGluZ0ZvckNoYW5nZUV2ZW50SUU4KCkge1xuICBpZiAoIWFjdGl2ZUVsZW1lbnQpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgYWN0aXZlRWxlbWVudC5kZXRhY2hFdmVudCgnb25jaGFuZ2UnLCBtYW51YWxEaXNwYXRjaENoYW5nZUV2ZW50KTtcbiAgYWN0aXZlRWxlbWVudCA9IG51bGw7XG4gIGFjdGl2ZUVsZW1lbnRJbnN0ID0gbnVsbDtcbn1cblxuZnVuY3Rpb24gZ2V0SW5zdElmVmFsdWVDaGFuZ2VkKHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50KSB7XG4gIHZhciB1cGRhdGVkID0gaW5wdXRWYWx1ZVRyYWNraW5nLnVwZGF0ZVZhbHVlSWZDaGFuZ2VkKHRhcmdldEluc3QpO1xuICB2YXIgc2ltdWxhdGVkID0gbmF0aXZlRXZlbnQuc2ltdWxhdGVkID09PSB0cnVlICYmIENoYW5nZUV2ZW50UGx1Z2luLl9hbGxvd1NpbXVsYXRlZFBhc3NUaHJvdWdoO1xuXG4gIGlmICh1cGRhdGVkIHx8IHNpbXVsYXRlZCkge1xuICAgIHJldHVybiB0YXJnZXRJbnN0O1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldFRhcmdldEluc3RGb3JDaGFuZ2VFdmVudCh0b3BMZXZlbFR5cGUsIHRhcmdldEluc3QpIHtcbiAgaWYgKHRvcExldmVsVHlwZSA9PT0gJ3RvcENoYW5nZScpIHtcbiAgICByZXR1cm4gdGFyZ2V0SW5zdDtcbiAgfVxufVxuXG5mdW5jdGlvbiBoYW5kbGVFdmVudHNGb3JDaGFuZ2VFdmVudElFOCh0b3BMZXZlbFR5cGUsIHRhcmdldCwgdGFyZ2V0SW5zdCkge1xuICBpZiAodG9wTGV2ZWxUeXBlID09PSAndG9wRm9jdXMnKSB7XG4gICAgLy8gc3RvcFdhdGNoaW5nKCkgc2hvdWxkIGJlIGEgbm9vcCBoZXJlIGJ1dCB3ZSBjYWxsIGl0IGp1c3QgaW4gY2FzZSB3ZVxuICAgIC8vIG1pc3NlZCBhIGJsdXIgZXZlbnQgc29tZWhvdy5cbiAgICBzdG9wV2F0Y2hpbmdGb3JDaGFuZ2VFdmVudElFOCgpO1xuICAgIHN0YXJ0V2F0Y2hpbmdGb3JDaGFuZ2VFdmVudElFOCh0YXJnZXQsIHRhcmdldEluc3QpO1xuICB9IGVsc2UgaWYgKHRvcExldmVsVHlwZSA9PT0gJ3RvcEJsdXInKSB7XG4gICAgc3RvcFdhdGNoaW5nRm9yQ2hhbmdlRXZlbnRJRTgoKTtcbiAgfVxufVxuXG4vKipcbiAqIFNFQ1RJT046IGhhbmRsZSBgaW5wdXRgIGV2ZW50XG4gKi9cbnZhciBpc0lucHV0RXZlbnRTdXBwb3J0ZWQgPSBmYWxzZTtcbmlmIChFeGVjdXRpb25FbnZpcm9ubWVudC5jYW5Vc2VET00pIHtcbiAgLy8gSUU5IGNsYWltcyB0byBzdXBwb3J0IHRoZSBpbnB1dCBldmVudCBidXQgZmFpbHMgdG8gdHJpZ2dlciBpdCB3aGVuXG4gIC8vIGRlbGV0aW5nIHRleHQsIHNvIHdlIGlnbm9yZSBpdHMgaW5wdXQgZXZlbnRzLlxuXG4gIGlzSW5wdXRFdmVudFN1cHBvcnRlZCA9IGlzRXZlbnRTdXBwb3J0ZWQoJ2lucHV0JykgJiYgKCEoJ2RvY3VtZW50TW9kZScgaW4gZG9jdW1lbnQpIHx8IGRvY3VtZW50LmRvY3VtZW50TW9kZSA+IDkpO1xufVxuXG4vKipcbiAqIChGb3IgSUUgPD05KSBTdGFydHMgdHJhY2tpbmcgcHJvcGVydHljaGFuZ2UgZXZlbnRzIG9uIHRoZSBwYXNzZWQtaW4gZWxlbWVudFxuICogYW5kIG92ZXJyaWRlIHRoZSB2YWx1ZSBwcm9wZXJ0eSBzbyB0aGF0IHdlIGNhbiBkaXN0aW5ndWlzaCB1c2VyIGV2ZW50cyBmcm9tXG4gKiB2YWx1ZSBjaGFuZ2VzIGluIEpTLlxuICovXG5mdW5jdGlvbiBzdGFydFdhdGNoaW5nRm9yVmFsdWVDaGFuZ2UodGFyZ2V0LCB0YXJnZXRJbnN0KSB7XG4gIGFjdGl2ZUVsZW1lbnQgPSB0YXJnZXQ7XG4gIGFjdGl2ZUVsZW1lbnRJbnN0ID0gdGFyZ2V0SW5zdDtcbiAgYWN0aXZlRWxlbWVudC5hdHRhY2hFdmVudCgnb25wcm9wZXJ0eWNoYW5nZScsIGhhbmRsZVByb3BlcnR5Q2hhbmdlKTtcbn1cblxuLyoqXG4gKiAoRm9yIElFIDw9OSkgUmVtb3ZlcyB0aGUgZXZlbnQgbGlzdGVuZXJzIGZyb20gdGhlIGN1cnJlbnRseS10cmFja2VkIGVsZW1lbnQsXG4gKiBpZiBhbnkgZXhpc3RzLlxuICovXG5mdW5jdGlvbiBzdG9wV2F0Y2hpbmdGb3JWYWx1ZUNoYW5nZSgpIHtcbiAgaWYgKCFhY3RpdmVFbGVtZW50KSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGFjdGl2ZUVsZW1lbnQuZGV0YWNoRXZlbnQoJ29ucHJvcGVydHljaGFuZ2UnLCBoYW5kbGVQcm9wZXJ0eUNoYW5nZSk7XG5cbiAgYWN0aXZlRWxlbWVudCA9IG51bGw7XG4gIGFjdGl2ZUVsZW1lbnRJbnN0ID0gbnVsbDtcbn1cblxuLyoqXG4gKiAoRm9yIElFIDw9OSkgSGFuZGxlcyBhIHByb3BlcnR5Y2hhbmdlIGV2ZW50LCBzZW5kaW5nIGEgYGNoYW5nZWAgZXZlbnQgaWZcbiAqIHRoZSB2YWx1ZSBvZiB0aGUgYWN0aXZlIGVsZW1lbnQgaGFzIGNoYW5nZWQuXG4gKi9cbmZ1bmN0aW9uIGhhbmRsZVByb3BlcnR5Q2hhbmdlKG5hdGl2ZUV2ZW50KSB7XG4gIGlmIChuYXRpdmVFdmVudC5wcm9wZXJ0eU5hbWUgIT09ICd2YWx1ZScpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKGdldEluc3RJZlZhbHVlQ2hhbmdlZChhY3RpdmVFbGVtZW50SW5zdCwgbmF0aXZlRXZlbnQpKSB7XG4gICAgbWFudWFsRGlzcGF0Y2hDaGFuZ2VFdmVudChuYXRpdmVFdmVudCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaGFuZGxlRXZlbnRzRm9ySW5wdXRFdmVudFBvbHlmaWxsKHRvcExldmVsVHlwZSwgdGFyZ2V0LCB0YXJnZXRJbnN0KSB7XG4gIGlmICh0b3BMZXZlbFR5cGUgPT09ICd0b3BGb2N1cycpIHtcbiAgICAvLyBJbiBJRTgsIHdlIGNhbiBjYXB0dXJlIGFsbW9zdCBhbGwgLnZhbHVlIGNoYW5nZXMgYnkgYWRkaW5nIGFcbiAgICAvLyBwcm9wZXJ0eWNoYW5nZSBoYW5kbGVyIGFuZCBsb29raW5nIGZvciBldmVudHMgd2l0aCBwcm9wZXJ0eU5hbWVcbiAgICAvLyBlcXVhbCB0byAndmFsdWUnXG4gICAgLy8gSW4gSUU5LCBwcm9wZXJ0eWNoYW5nZSBmaXJlcyBmb3IgbW9zdCBpbnB1dCBldmVudHMgYnV0IGlzIGJ1Z2d5IGFuZFxuICAgIC8vIGRvZXNuJ3QgZmlyZSB3aGVuIHRleHQgaXMgZGVsZXRlZCwgYnV0IGNvbnZlbmllbnRseSwgc2VsZWN0aW9uY2hhbmdlXG4gICAgLy8gYXBwZWFycyB0byBmaXJlIGluIGFsbCBvZiB0aGUgcmVtYWluaW5nIGNhc2VzIHNvIHdlIGNhdGNoIHRob3NlIGFuZFxuICAgIC8vIGZvcndhcmQgdGhlIGV2ZW50IGlmIHRoZSB2YWx1ZSBoYXMgY2hhbmdlZFxuICAgIC8vIEluIGVpdGhlciBjYXNlLCB3ZSBkb24ndCB3YW50IHRvIGNhbGwgdGhlIGV2ZW50IGhhbmRsZXIgaWYgdGhlIHZhbHVlXG4gICAgLy8gaXMgY2hhbmdlZCBmcm9tIEpTIHNvIHdlIHJlZGVmaW5lIGEgc2V0dGVyIGZvciBgLnZhbHVlYCB0aGF0IHVwZGF0ZXNcbiAgICAvLyBvdXIgYWN0aXZlRWxlbWVudFZhbHVlIHZhcmlhYmxlLCBhbGxvd2luZyB1cyB0byBpZ25vcmUgdGhvc2UgY2hhbmdlc1xuICAgIC8vXG4gICAgLy8gc3RvcFdhdGNoaW5nKCkgc2hvdWxkIGJlIGEgbm9vcCBoZXJlIGJ1dCB3ZSBjYWxsIGl0IGp1c3QgaW4gY2FzZSB3ZVxuICAgIC8vIG1pc3NlZCBhIGJsdXIgZXZlbnQgc29tZWhvdy5cbiAgICBzdG9wV2F0Y2hpbmdGb3JWYWx1ZUNoYW5nZSgpO1xuICAgIHN0YXJ0V2F0Y2hpbmdGb3JWYWx1ZUNoYW5nZSh0YXJnZXQsIHRhcmdldEluc3QpO1xuICB9IGVsc2UgaWYgKHRvcExldmVsVHlwZSA9PT0gJ3RvcEJsdXInKSB7XG4gICAgc3RvcFdhdGNoaW5nRm9yVmFsdWVDaGFuZ2UoKTtcbiAgfVxufVxuXG4vLyBGb3IgSUU4IGFuZCBJRTkuXG5mdW5jdGlvbiBnZXRUYXJnZXRJbnN0Rm9ySW5wdXRFdmVudFBvbHlmaWxsKHRvcExldmVsVHlwZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQpIHtcbiAgaWYgKHRvcExldmVsVHlwZSA9PT0gJ3RvcFNlbGVjdGlvbkNoYW5nZScgfHwgdG9wTGV2ZWxUeXBlID09PSAndG9wS2V5VXAnIHx8IHRvcExldmVsVHlwZSA9PT0gJ3RvcEtleURvd24nKSB7XG4gICAgLy8gT24gdGhlIHNlbGVjdGlvbmNoYW5nZSBldmVudCwgdGhlIHRhcmdldCBpcyBqdXN0IGRvY3VtZW50IHdoaWNoIGlzbid0XG4gICAgLy8gaGVscGZ1bCBmb3IgdXMgc28ganVzdCBjaGVjayBhY3RpdmVFbGVtZW50IGluc3RlYWQuXG4gICAgLy9cbiAgICAvLyA5OSUgb2YgdGhlIHRpbWUsIGtleWRvd24gYW5kIGtleXVwIGFyZW4ndCBuZWNlc3NhcnkuIElFOCBmYWlscyB0byBmaXJlXG4gICAgLy8gcHJvcGVydHljaGFuZ2Ugb24gdGhlIGZpcnN0IGlucHV0IGV2ZW50IGFmdGVyIHNldHRpbmcgYHZhbHVlYCBmcm9tIGFcbiAgICAvLyBzY3JpcHQgYW5kIGZpcmVzIG9ubHkga2V5ZG93biwga2V5cHJlc3MsIGtleXVwLiBDYXRjaGluZyBrZXl1cCB1c3VhbGx5XG4gICAgLy8gZ2V0cyBpdCBhbmQgY2F0Y2hpbmcga2V5ZG93biBsZXRzIHVzIGZpcmUgYW4gZXZlbnQgZm9yIHRoZSBmaXJzdFxuICAgIC8vIGtleXN0cm9rZSBpZiB1c2VyIGRvZXMgYSBrZXkgcmVwZWF0IChpdCdsbCBiZSBhIGxpdHRsZSBkZWxheWVkOiByaWdodFxuICAgIC8vIGJlZm9yZSB0aGUgc2Vjb25kIGtleXN0cm9rZSkuIE90aGVyIGlucHV0IG1ldGhvZHMgKGUuZy4sIHBhc3RlKSBzZWVtIHRvXG4gICAgLy8gZmlyZSBzZWxlY3Rpb25jaGFuZ2Ugbm9ybWFsbHkuXG4gICAgcmV0dXJuIGdldEluc3RJZlZhbHVlQ2hhbmdlZChhY3RpdmVFbGVtZW50SW5zdCwgbmF0aXZlRXZlbnQpO1xuICB9XG59XG5cbi8qKlxuICogU0VDVElPTjogaGFuZGxlIGBjbGlja2AgZXZlbnRcbiAqL1xuZnVuY3Rpb24gc2hvdWxkVXNlQ2xpY2tFdmVudChlbGVtKSB7XG4gIC8vIFVzZSB0aGUgYGNsaWNrYCBldmVudCB0byBkZXRlY3QgY2hhbmdlcyB0byBjaGVja2JveCBhbmQgcmFkaW8gaW5wdXRzLlxuICAvLyBUaGlzIGFwcHJvYWNoIHdvcmtzIGFjcm9zcyBhbGwgYnJvd3NlcnMsIHdoZXJlYXMgYGNoYW5nZWAgZG9lcyBub3QgZmlyZVxuICAvLyB1bnRpbCBgYmx1cmAgaW4gSUU4LlxuICB2YXIgbm9kZU5hbWUgPSBlbGVtLm5vZGVOYW1lO1xuICByZXR1cm4gbm9kZU5hbWUgJiYgbm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ2lucHV0JyAmJiAoZWxlbS50eXBlID09PSAnY2hlY2tib3gnIHx8IGVsZW0udHlwZSA9PT0gJ3JhZGlvJyk7XG59XG5cbmZ1bmN0aW9uIGdldFRhcmdldEluc3RGb3JDbGlja0V2ZW50KHRvcExldmVsVHlwZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQpIHtcbiAgaWYgKHRvcExldmVsVHlwZSA9PT0gJ3RvcENsaWNrJykge1xuICAgIHJldHVybiBnZXRJbnN0SWZWYWx1ZUNoYW5nZWQodGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldFRhcmdldEluc3RGb3JJbnB1dE9yQ2hhbmdlRXZlbnQodG9wTGV2ZWxUeXBlLCB0YXJnZXRJbnN0LCBuYXRpdmVFdmVudCkge1xuICBpZiAodG9wTGV2ZWxUeXBlID09PSAndG9wSW5wdXQnIHx8IHRvcExldmVsVHlwZSA9PT0gJ3RvcENoYW5nZScpIHtcbiAgICByZXR1cm4gZ2V0SW5zdElmVmFsdWVDaGFuZ2VkKHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBoYW5kbGVDb250cm9sbGVkSW5wdXRCbHVyKGluc3QsIG5vZGUpIHtcbiAgLy8gVE9ETzogSW4gSUUsIGluc3QgaXMgb2NjYXNpb25hbGx5IG51bGwuIFdoeT9cbiAgaWYgKGluc3QgPT0gbnVsbCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIEZpYmVyIGFuZCBSZWFjdERPTSBrZWVwIHdyYXBwZXIgc3RhdGUgaW4gc2VwYXJhdGUgcGxhY2VzXG4gIHZhciBzdGF0ZSA9IGluc3QuX3dyYXBwZXJTdGF0ZSB8fCBub2RlLl93cmFwcGVyU3RhdGU7XG5cbiAgaWYgKCFzdGF0ZSB8fCAhc3RhdGUuY29udHJvbGxlZCB8fCBub2RlLnR5cGUgIT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gSWYgY29udHJvbGxlZCwgYXNzaWduIHRoZSB2YWx1ZSBhdHRyaWJ1dGUgdG8gdGhlIGN1cnJlbnQgdmFsdWUgb24gYmx1clxuICB2YXIgdmFsdWUgPSAnJyArIG5vZGUudmFsdWU7XG4gIGlmIChub2RlLmdldEF0dHJpYnV0ZSgndmFsdWUnKSAhPT0gdmFsdWUpIHtcbiAgICBub2RlLnNldEF0dHJpYnV0ZSgndmFsdWUnLCB2YWx1ZSk7XG4gIH1cbn1cblxuLyoqXG4gKiBUaGlzIHBsdWdpbiBjcmVhdGVzIGFuIGBvbkNoYW5nZWAgZXZlbnQgdGhhdCBub3JtYWxpemVzIGNoYW5nZSBldmVudHNcbiAqIGFjcm9zcyBmb3JtIGVsZW1lbnRzLiBUaGlzIGV2ZW50IGZpcmVzIGF0IGEgdGltZSB3aGVuIGl0J3MgcG9zc2libGUgdG9cbiAqIGNoYW5nZSB0aGUgZWxlbWVudCdzIHZhbHVlIHdpdGhvdXQgc2VlaW5nIGEgZmxpY2tlci5cbiAqXG4gKiBTdXBwb3J0ZWQgZWxlbWVudHMgYXJlOlxuICogLSBpbnB1dCAoc2VlIGBpc1RleHRJbnB1dEVsZW1lbnRgKVxuICogLSB0ZXh0YXJlYVxuICogLSBzZWxlY3RcbiAqL1xudmFyIENoYW5nZUV2ZW50UGx1Z2luID0ge1xuICBldmVudFR5cGVzOiBldmVudFR5cGVzLFxuXG4gIF9hbGxvd1NpbXVsYXRlZFBhc3NUaHJvdWdoOiB0cnVlLFxuICBfaXNJbnB1dEV2ZW50U3VwcG9ydGVkOiBpc0lucHV0RXZlbnRTdXBwb3J0ZWQsXG5cbiAgZXh0cmFjdEV2ZW50czogZnVuY3Rpb24gKHRvcExldmVsVHlwZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KSB7XG4gICAgdmFyIHRhcmdldE5vZGUgPSB0YXJnZXRJbnN0ID8gUmVhY3RET01Db21wb25lbnRUcmVlLmdldE5vZGVGcm9tSW5zdGFuY2UodGFyZ2V0SW5zdCkgOiB3aW5kb3c7XG5cbiAgICB2YXIgZ2V0VGFyZ2V0SW5zdEZ1bmMsIGhhbmRsZUV2ZW50RnVuYztcbiAgICBpZiAoc2hvdWxkVXNlQ2hhbmdlRXZlbnQodGFyZ2V0Tm9kZSkpIHtcbiAgICAgIGlmIChkb2VzQ2hhbmdlRXZlbnRCdWJibGUpIHtcbiAgICAgICAgZ2V0VGFyZ2V0SW5zdEZ1bmMgPSBnZXRUYXJnZXRJbnN0Rm9yQ2hhbmdlRXZlbnQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBoYW5kbGVFdmVudEZ1bmMgPSBoYW5kbGVFdmVudHNGb3JDaGFuZ2VFdmVudElFODtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGlzVGV4dElucHV0RWxlbWVudCh0YXJnZXROb2RlKSkge1xuICAgICAgaWYgKGlzSW5wdXRFdmVudFN1cHBvcnRlZCkge1xuICAgICAgICBnZXRUYXJnZXRJbnN0RnVuYyA9IGdldFRhcmdldEluc3RGb3JJbnB1dE9yQ2hhbmdlRXZlbnQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBnZXRUYXJnZXRJbnN0RnVuYyA9IGdldFRhcmdldEluc3RGb3JJbnB1dEV2ZW50UG9seWZpbGw7XG4gICAgICAgIGhhbmRsZUV2ZW50RnVuYyA9IGhhbmRsZUV2ZW50c0ZvcklucHV0RXZlbnRQb2x5ZmlsbDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHNob3VsZFVzZUNsaWNrRXZlbnQodGFyZ2V0Tm9kZSkpIHtcbiAgICAgIGdldFRhcmdldEluc3RGdW5jID0gZ2V0VGFyZ2V0SW5zdEZvckNsaWNrRXZlbnQ7XG4gICAgfVxuXG4gICAgaWYgKGdldFRhcmdldEluc3RGdW5jKSB7XG4gICAgICB2YXIgaW5zdCA9IGdldFRhcmdldEluc3RGdW5jKHRvcExldmVsVHlwZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQpO1xuICAgICAgaWYgKGluc3QpIHtcbiAgICAgICAgdmFyIGV2ZW50ID0gY3JlYXRlQW5kQWNjdW11bGF0ZUNoYW5nZUV2ZW50KGluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCk7XG4gICAgICAgIHJldHVybiBldmVudDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaGFuZGxlRXZlbnRGdW5jKSB7XG4gICAgICBoYW5kbGVFdmVudEZ1bmModG9wTGV2ZWxUeXBlLCB0YXJnZXROb2RlLCB0YXJnZXRJbnN0KTtcbiAgICB9XG5cbiAgICAvLyBXaGVuIGJsdXJyaW5nLCBzZXQgdGhlIHZhbHVlIGF0dHJpYnV0ZSBmb3IgbnVtYmVyIGlucHV0c1xuICAgIGlmICh0b3BMZXZlbFR5cGUgPT09ICd0b3BCbHVyJykge1xuICAgICAgaGFuZGxlQ29udHJvbGxlZElucHV0Qmx1cih0YXJnZXRJbnN0LCB0YXJnZXROb2RlKTtcbiAgICB9XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gQ2hhbmdlRXZlbnRQbHVnaW47XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1kb20vbGliL0NoYW5nZUV2ZW50UGx1Z2luLmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIF9wcm9kSW52YXJpYW50ID0gcmVxdWlyZSgnLi9yZWFjdFByb2RJbnZhcmlhbnQnKTtcblxudmFyIERPTUxhenlUcmVlID0gcmVxdWlyZSgnLi9ET01MYXp5VHJlZScpO1xudmFyIEV4ZWN1dGlvbkVudmlyb25tZW50ID0gcmVxdWlyZSgnZmJqcy9saWIvRXhlY3V0aW9uRW52aXJvbm1lbnQnKTtcblxudmFyIGNyZWF0ZU5vZGVzRnJvbU1hcmt1cCA9IHJlcXVpcmUoJ2ZianMvbGliL2NyZWF0ZU5vZGVzRnJvbU1hcmt1cCcpO1xudmFyIGVtcHR5RnVuY3Rpb24gPSByZXF1aXJlKCdmYmpzL2xpYi9lbXB0eUZ1bmN0aW9uJyk7XG52YXIgaW52YXJpYW50ID0gcmVxdWlyZSgnZmJqcy9saWIvaW52YXJpYW50Jyk7XG5cbnZhciBEYW5nZXIgPSB7XG4gIC8qKlxuICAgKiBSZXBsYWNlcyBhIG5vZGUgd2l0aCBhIHN0cmluZyBvZiBtYXJrdXAgYXQgaXRzIGN1cnJlbnQgcG9zaXRpb24gd2l0aGluIGl0c1xuICAgKiBwYXJlbnQuIFRoZSBtYXJrdXAgbXVzdCByZW5kZXIgaW50byBhIHNpbmdsZSByb290IG5vZGUuXG4gICAqXG4gICAqIEBwYXJhbSB7RE9NRWxlbWVudH0gb2xkQ2hpbGQgQ2hpbGQgbm9kZSB0byByZXBsYWNlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbWFya3VwIE1hcmt1cCB0byByZW5kZXIgaW4gcGxhY2Ugb2YgdGhlIGNoaWxkIG5vZGUuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZGFuZ2Vyb3VzbHlSZXBsYWNlTm9kZVdpdGhNYXJrdXA6IGZ1bmN0aW9uIChvbGRDaGlsZCwgbWFya3VwKSB7XG4gICAgIUV4ZWN1dGlvbkVudmlyb25tZW50LmNhblVzZURPTSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICdkYW5nZXJvdXNseVJlcGxhY2VOb2RlV2l0aE1hcmt1cCguLi4pOiBDYW5ub3QgcmVuZGVyIG1hcmt1cCBpbiBhIHdvcmtlciB0aHJlYWQuIE1ha2Ugc3VyZSBgd2luZG93YCBhbmQgYGRvY3VtZW50YCBhcmUgYXZhaWxhYmxlIGdsb2JhbGx5IGJlZm9yZSByZXF1aXJpbmcgUmVhY3Qgd2hlbiB1bml0IHRlc3Rpbmcgb3IgdXNlIFJlYWN0RE9NU2VydmVyLnJlbmRlclRvU3RyaW5nKCkgZm9yIHNlcnZlciByZW5kZXJpbmcuJykgOiBfcHJvZEludmFyaWFudCgnNTYnKSA6IHZvaWQgMDtcbiAgICAhbWFya3VwID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IGludmFyaWFudChmYWxzZSwgJ2Rhbmdlcm91c2x5UmVwbGFjZU5vZGVXaXRoTWFya3VwKC4uLik6IE1pc3NpbmcgbWFya3VwLicpIDogX3Byb2RJbnZhcmlhbnQoJzU3JykgOiB2b2lkIDA7XG4gICAgIShvbGRDaGlsZC5ub2RlTmFtZSAhPT0gJ0hUTUwnKSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICdkYW5nZXJvdXNseVJlcGxhY2VOb2RlV2l0aE1hcmt1cCguLi4pOiBDYW5ub3QgcmVwbGFjZSBtYXJrdXAgb2YgdGhlIDxodG1sPiBub2RlLiBUaGlzIGlzIGJlY2F1c2UgYnJvd3NlciBxdWlya3MgbWFrZSB0aGlzIHVucmVsaWFibGUgYW5kL29yIHNsb3cuIElmIHlvdSB3YW50IHRvIHJlbmRlciB0byB0aGUgcm9vdCB5b3UgbXVzdCB1c2Ugc2VydmVyIHJlbmRlcmluZy4gU2VlIFJlYWN0RE9NU2VydmVyLnJlbmRlclRvU3RyaW5nKCkuJykgOiBfcHJvZEludmFyaWFudCgnNTgnKSA6IHZvaWQgMDtcblxuICAgIGlmICh0eXBlb2YgbWFya3VwID09PSAnc3RyaW5nJykge1xuICAgICAgdmFyIG5ld0NoaWxkID0gY3JlYXRlTm9kZXNGcm9tTWFya3VwKG1hcmt1cCwgZW1wdHlGdW5jdGlvbilbMF07XG4gICAgICBvbGRDaGlsZC5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChuZXdDaGlsZCwgb2xkQ2hpbGQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBET01MYXp5VHJlZS5yZXBsYWNlQ2hpbGRXaXRoVHJlZShvbGRDaGlsZCwgbWFya3VwKTtcbiAgICB9XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gRGFuZ2VyO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QtZG9tL2xpYi9EYW5nZXIuanMiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIE1vZHVsZSB0aGF0IGlzIGluamVjdGFibGUgaW50byBgRXZlbnRQbHVnaW5IdWJgLCB0aGF0IHNwZWNpZmllcyBhXG4gKiBkZXRlcm1pbmlzdGljIG9yZGVyaW5nIG9mIGBFdmVudFBsdWdpbmBzLiBBIGNvbnZlbmllbnQgd2F5IHRvIHJlYXNvbiBhYm91dFxuICogcGx1Z2lucywgd2l0aG91dCBoYXZpbmcgdG8gcGFja2FnZSBldmVyeSBvbmUgb2YgdGhlbS4gVGhpcyBpcyBiZXR0ZXIgdGhhblxuICogaGF2aW5nIHBsdWdpbnMgYmUgb3JkZXJlZCBpbiB0aGUgc2FtZSBvcmRlciB0aGF0IHRoZXkgYXJlIGluamVjdGVkIGJlY2F1c2VcbiAqIHRoYXQgb3JkZXJpbmcgd291bGQgYmUgaW5mbHVlbmNlZCBieSB0aGUgcGFja2FnaW5nIG9yZGVyLlxuICogYFJlc3BvbmRlckV2ZW50UGx1Z2luYCBtdXN0IG9jY3VyIGJlZm9yZSBgU2ltcGxlRXZlbnRQbHVnaW5gIHNvIHRoYXRcbiAqIHByZXZlbnRpbmcgZGVmYXVsdCBvbiBldmVudHMgaXMgY29udmVuaWVudCBpbiBgU2ltcGxlRXZlbnRQbHVnaW5gIGhhbmRsZXJzLlxuICovXG5cbnZhciBEZWZhdWx0RXZlbnRQbHVnaW5PcmRlciA9IFsnUmVzcG9uZGVyRXZlbnRQbHVnaW4nLCAnU2ltcGxlRXZlbnRQbHVnaW4nLCAnVGFwRXZlbnRQbHVnaW4nLCAnRW50ZXJMZWF2ZUV2ZW50UGx1Z2luJywgJ0NoYW5nZUV2ZW50UGx1Z2luJywgJ1NlbGVjdEV2ZW50UGx1Z2luJywgJ0JlZm9yZUlucHV0RXZlbnRQbHVnaW4nXTtcblxubW9kdWxlLmV4cG9ydHMgPSBEZWZhdWx0RXZlbnRQbHVnaW5PcmRlcjtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3JlYWN0LWRvbS9saWIvRGVmYXVsdEV2ZW50UGx1Z2luT3JkZXIuanMiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgRXZlbnRQcm9wYWdhdG9ycyA9IHJlcXVpcmUoJy4vRXZlbnRQcm9wYWdhdG9ycycpO1xudmFyIFJlYWN0RE9NQ29tcG9uZW50VHJlZSA9IHJlcXVpcmUoJy4vUmVhY3RET01Db21wb25lbnRUcmVlJyk7XG52YXIgU3ludGhldGljTW91c2VFdmVudCA9IHJlcXVpcmUoJy4vU3ludGhldGljTW91c2VFdmVudCcpO1xuXG52YXIgZXZlbnRUeXBlcyA9IHtcbiAgbW91c2VFbnRlcjoge1xuICAgIHJlZ2lzdHJhdGlvbk5hbWU6ICdvbk1vdXNlRW50ZXInLFxuICAgIGRlcGVuZGVuY2llczogWyd0b3BNb3VzZU91dCcsICd0b3BNb3VzZU92ZXInXVxuICB9LFxuICBtb3VzZUxlYXZlOiB7XG4gICAgcmVnaXN0cmF0aW9uTmFtZTogJ29uTW91c2VMZWF2ZScsXG4gICAgZGVwZW5kZW5jaWVzOiBbJ3RvcE1vdXNlT3V0JywgJ3RvcE1vdXNlT3ZlciddXG4gIH1cbn07XG5cbnZhciBFbnRlckxlYXZlRXZlbnRQbHVnaW4gPSB7XG4gIGV2ZW50VHlwZXM6IGV2ZW50VHlwZXMsXG5cbiAgLyoqXG4gICAqIEZvciBhbG1vc3QgZXZlcnkgaW50ZXJhY3Rpb24gd2UgY2FyZSBhYm91dCwgdGhlcmUgd2lsbCBiZSBib3RoIGEgdG9wLWxldmVsXG4gICAqIGBtb3VzZW92ZXJgIGFuZCBgbW91c2VvdXRgIGV2ZW50IHRoYXQgb2NjdXJzLiBPbmx5IHVzZSBgbW91c2VvdXRgIHNvIHRoYXRcbiAgICogd2UgZG8gbm90IGV4dHJhY3QgZHVwbGljYXRlIGV2ZW50cy4gSG93ZXZlciwgbW92aW5nIHRoZSBtb3VzZSBpbnRvIHRoZVxuICAgKiBicm93c2VyIGZyb20gb3V0c2lkZSB3aWxsIG5vdCBmaXJlIGEgYG1vdXNlb3V0YCBldmVudC4gSW4gdGhpcyBjYXNlLCB3ZSB1c2VcbiAgICogdGhlIGBtb3VzZW92ZXJgIHRvcC1sZXZlbCBldmVudC5cbiAgICovXG4gIGV4dHJhY3RFdmVudHM6IGZ1bmN0aW9uICh0b3BMZXZlbFR5cGUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCkge1xuICAgIGlmICh0b3BMZXZlbFR5cGUgPT09ICd0b3BNb3VzZU92ZXInICYmIChuYXRpdmVFdmVudC5yZWxhdGVkVGFyZ2V0IHx8IG5hdGl2ZUV2ZW50LmZyb21FbGVtZW50KSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGlmICh0b3BMZXZlbFR5cGUgIT09ICd0b3BNb3VzZU91dCcgJiYgdG9wTGV2ZWxUeXBlICE9PSAndG9wTW91c2VPdmVyJykge1xuICAgICAgLy8gTXVzdCBub3QgYmUgYSBtb3VzZSBpbiBvciBtb3VzZSBvdXQgLSBpZ25vcmluZy5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHZhciB3aW47XG4gICAgaWYgKG5hdGl2ZUV2ZW50VGFyZ2V0LndpbmRvdyA9PT0gbmF0aXZlRXZlbnRUYXJnZXQpIHtcbiAgICAgIC8vIGBuYXRpdmVFdmVudFRhcmdldGAgaXMgcHJvYmFibHkgYSB3aW5kb3cgb2JqZWN0LlxuICAgICAgd2luID0gbmF0aXZlRXZlbnRUYXJnZXQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRPRE86IEZpZ3VyZSBvdXQgd2h5IGBvd25lckRvY3VtZW50YCBpcyBzb21ldGltZXMgdW5kZWZpbmVkIGluIElFOC5cbiAgICAgIHZhciBkb2MgPSBuYXRpdmVFdmVudFRhcmdldC5vd25lckRvY3VtZW50O1xuICAgICAgaWYgKGRvYykge1xuICAgICAgICB3aW4gPSBkb2MuZGVmYXVsdFZpZXcgfHwgZG9jLnBhcmVudFdpbmRvdztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdpbiA9IHdpbmRvdztcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgZnJvbTtcbiAgICB2YXIgdG87XG4gICAgaWYgKHRvcExldmVsVHlwZSA9PT0gJ3RvcE1vdXNlT3V0Jykge1xuICAgICAgZnJvbSA9IHRhcmdldEluc3Q7XG4gICAgICB2YXIgcmVsYXRlZCA9IG5hdGl2ZUV2ZW50LnJlbGF0ZWRUYXJnZXQgfHwgbmF0aXZlRXZlbnQudG9FbGVtZW50O1xuICAgICAgdG8gPSByZWxhdGVkID8gUmVhY3RET01Db21wb25lbnRUcmVlLmdldENsb3Nlc3RJbnN0YW5jZUZyb21Ob2RlKHJlbGF0ZWQpIDogbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTW92aW5nIHRvIGEgbm9kZSBmcm9tIG91dHNpZGUgdGhlIHdpbmRvdy5cbiAgICAgIGZyb20gPSBudWxsO1xuICAgICAgdG8gPSB0YXJnZXRJbnN0O1xuICAgIH1cblxuICAgIGlmIChmcm9tID09PSB0bykge1xuICAgICAgLy8gTm90aGluZyBwZXJ0YWlucyB0byBvdXIgbWFuYWdlZCBjb21wb25lbnRzLlxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgdmFyIGZyb21Ob2RlID0gZnJvbSA9PSBudWxsID8gd2luIDogUmVhY3RET01Db21wb25lbnRUcmVlLmdldE5vZGVGcm9tSW5zdGFuY2UoZnJvbSk7XG4gICAgdmFyIHRvTm9kZSA9IHRvID09IG51bGwgPyB3aW4gOiBSZWFjdERPTUNvbXBvbmVudFRyZWUuZ2V0Tm9kZUZyb21JbnN0YW5jZSh0byk7XG5cbiAgICB2YXIgbGVhdmUgPSBTeW50aGV0aWNNb3VzZUV2ZW50LmdldFBvb2xlZChldmVudFR5cGVzLm1vdXNlTGVhdmUsIGZyb20sIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCk7XG4gICAgbGVhdmUudHlwZSA9ICdtb3VzZWxlYXZlJztcbiAgICBsZWF2ZS50YXJnZXQgPSBmcm9tTm9kZTtcbiAgICBsZWF2ZS5yZWxhdGVkVGFyZ2V0ID0gdG9Ob2RlO1xuXG4gICAgdmFyIGVudGVyID0gU3ludGhldGljTW91c2VFdmVudC5nZXRQb29sZWQoZXZlbnRUeXBlcy5tb3VzZUVudGVyLCB0bywgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KTtcbiAgICBlbnRlci50eXBlID0gJ21vdXNlZW50ZXInO1xuICAgIGVudGVyLnRhcmdldCA9IHRvTm9kZTtcbiAgICBlbnRlci5yZWxhdGVkVGFyZ2V0ID0gZnJvbU5vZGU7XG5cbiAgICBFdmVudFByb3BhZ2F0b3JzLmFjY3VtdWxhdGVFbnRlckxlYXZlRGlzcGF0Y2hlcyhsZWF2ZSwgZW50ZXIsIGZyb20sIHRvKTtcblxuICAgIHJldHVybiBbbGVhdmUsIGVudGVyXTtcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBFbnRlckxlYXZlRXZlbnRQbHVnaW47XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1kb20vbGliL0VudGVyTGVhdmVFdmVudFBsdWdpbi5qcyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBfYXNzaWduID0gcmVxdWlyZSgnb2JqZWN0LWFzc2lnbicpO1xuXG52YXIgUG9vbGVkQ2xhc3MgPSByZXF1aXJlKCcuL1Bvb2xlZENsYXNzJyk7XG5cbnZhciBnZXRUZXh0Q29udGVudEFjY2Vzc29yID0gcmVxdWlyZSgnLi9nZXRUZXh0Q29udGVudEFjY2Vzc29yJyk7XG5cbi8qKlxuICogVGhpcyBoZWxwZXIgY2xhc3Mgc3RvcmVzIGluZm9ybWF0aW9uIGFib3V0IHRleHQgY29udGVudCBvZiBhIHRhcmdldCBub2RlLFxuICogYWxsb3dpbmcgY29tcGFyaXNvbiBvZiBjb250ZW50IGJlZm9yZSBhbmQgYWZ0ZXIgYSBnaXZlbiBldmVudC5cbiAqXG4gKiBJZGVudGlmeSB0aGUgbm9kZSB3aGVyZSBzZWxlY3Rpb24gY3VycmVudGx5IGJlZ2lucywgdGhlbiBvYnNlcnZlXG4gKiBib3RoIGl0cyB0ZXh0IGNvbnRlbnQgYW5kIGl0cyBjdXJyZW50IHBvc2l0aW9uIGluIHRoZSBET00uIFNpbmNlIHRoZVxuICogYnJvd3NlciBtYXkgbmF0aXZlbHkgcmVwbGFjZSB0aGUgdGFyZ2V0IG5vZGUgZHVyaW5nIGNvbXBvc2l0aW9uLCB3ZSBjYW5cbiAqIHVzZSBpdHMgcG9zaXRpb24gdG8gZmluZCBpdHMgcmVwbGFjZW1lbnQuXG4gKlxuICogQHBhcmFtIHtET01FdmVudFRhcmdldH0gcm9vdFxuICovXG5mdW5jdGlvbiBGYWxsYmFja0NvbXBvc2l0aW9uU3RhdGUocm9vdCkge1xuICB0aGlzLl9yb290ID0gcm9vdDtcbiAgdGhpcy5fc3RhcnRUZXh0ID0gdGhpcy5nZXRUZXh0KCk7XG4gIHRoaXMuX2ZhbGxiYWNrVGV4dCA9IG51bGw7XG59XG5cbl9hc3NpZ24oRmFsbGJhY2tDb21wb3NpdGlvblN0YXRlLnByb3RvdHlwZSwge1xuICBkZXN0cnVjdG9yOiBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5fcm9vdCA9IG51bGw7XG4gICAgdGhpcy5fc3RhcnRUZXh0ID0gbnVsbDtcbiAgICB0aGlzLl9mYWxsYmFja1RleHQgPSBudWxsO1xuICB9LFxuXG4gIC8qKlxuICAgKiBHZXQgY3VycmVudCB0ZXh0IG9mIGlucHV0LlxuICAgKlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuICBnZXRUZXh0OiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCd2YWx1ZScgaW4gdGhpcy5fcm9vdCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3Jvb3QudmFsdWU7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9yb290W2dldFRleHRDb250ZW50QWNjZXNzb3IoKV07XG4gIH0sXG5cbiAgLyoqXG4gICAqIERldGVybWluZSB0aGUgZGlmZmVyaW5nIHN1YnN0cmluZyBiZXR3ZWVuIHRoZSBpbml0aWFsbHkgc3RvcmVkXG4gICAqIHRleHQgY29udGVudCBhbmQgdGhlIGN1cnJlbnQgY29udGVudC5cbiAgICpcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cbiAgZ2V0RGF0YTogZnVuY3Rpb24gKCkge1xuICAgIGlmICh0aGlzLl9mYWxsYmFja1RleHQpIHtcbiAgICAgIHJldHVybiB0aGlzLl9mYWxsYmFja1RleHQ7XG4gICAgfVxuXG4gICAgdmFyIHN0YXJ0O1xuICAgIHZhciBzdGFydFZhbHVlID0gdGhpcy5fc3RhcnRUZXh0O1xuICAgIHZhciBzdGFydExlbmd0aCA9IHN0YXJ0VmFsdWUubGVuZ3RoO1xuICAgIHZhciBlbmQ7XG4gICAgdmFyIGVuZFZhbHVlID0gdGhpcy5nZXRUZXh0KCk7XG4gICAgdmFyIGVuZExlbmd0aCA9IGVuZFZhbHVlLmxlbmd0aDtcblxuICAgIGZvciAoc3RhcnQgPSAwOyBzdGFydCA8IHN0YXJ0TGVuZ3RoOyBzdGFydCsrKSB7XG4gICAgICBpZiAoc3RhcnRWYWx1ZVtzdGFydF0gIT09IGVuZFZhbHVlW3N0YXJ0XSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgbWluRW5kID0gc3RhcnRMZW5ndGggLSBzdGFydDtcbiAgICBmb3IgKGVuZCA9IDE7IGVuZCA8PSBtaW5FbmQ7IGVuZCsrKSB7XG4gICAgICBpZiAoc3RhcnRWYWx1ZVtzdGFydExlbmd0aCAtIGVuZF0gIT09IGVuZFZhbHVlW2VuZExlbmd0aCAtIGVuZF0pIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHNsaWNlVGFpbCA9IGVuZCA+IDEgPyAxIC0gZW5kIDogdW5kZWZpbmVkO1xuICAgIHRoaXMuX2ZhbGxiYWNrVGV4dCA9IGVuZFZhbHVlLnNsaWNlKHN0YXJ0LCBzbGljZVRhaWwpO1xuICAgIHJldHVybiB0aGlzLl9mYWxsYmFja1RleHQ7XG4gIH1cbn0pO1xuXG5Qb29sZWRDbGFzcy5hZGRQb29saW5nVG8oRmFsbGJhY2tDb21wb3NpdGlvblN0YXRlKTtcblxubW9kdWxlLmV4cG9ydHMgPSBGYWxsYmFja0NvbXBvc2l0aW9uU3RhdGU7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1kb20vbGliL0ZhbGxiYWNrQ29tcG9zaXRpb25TdGF0ZS5qcyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBET01Qcm9wZXJ0eSA9IHJlcXVpcmUoJy4vRE9NUHJvcGVydHknKTtcblxudmFyIE1VU1RfVVNFX1BST1BFUlRZID0gRE9NUHJvcGVydHkuaW5qZWN0aW9uLk1VU1RfVVNFX1BST1BFUlRZO1xudmFyIEhBU19CT09MRUFOX1ZBTFVFID0gRE9NUHJvcGVydHkuaW5qZWN0aW9uLkhBU19CT09MRUFOX1ZBTFVFO1xudmFyIEhBU19OVU1FUklDX1ZBTFVFID0gRE9NUHJvcGVydHkuaW5qZWN0aW9uLkhBU19OVU1FUklDX1ZBTFVFO1xudmFyIEhBU19QT1NJVElWRV9OVU1FUklDX1ZBTFVFID0gRE9NUHJvcGVydHkuaW5qZWN0aW9uLkhBU19QT1NJVElWRV9OVU1FUklDX1ZBTFVFO1xudmFyIEhBU19PVkVSTE9BREVEX0JPT0xFQU5fVkFMVUUgPSBET01Qcm9wZXJ0eS5pbmplY3Rpb24uSEFTX09WRVJMT0FERURfQk9PTEVBTl9WQUxVRTtcblxudmFyIEhUTUxET01Qcm9wZXJ0eUNvbmZpZyA9IHtcbiAgaXNDdXN0b21BdHRyaWJ1dGU6IFJlZ0V4cC5wcm90b3R5cGUudGVzdC5iaW5kKG5ldyBSZWdFeHAoJ14oZGF0YXxhcmlhKS1bJyArIERPTVByb3BlcnR5LkFUVFJJQlVURV9OQU1FX0NIQVIgKyAnXSokJykpLFxuICBQcm9wZXJ0aWVzOiB7XG4gICAgLyoqXG4gICAgICogU3RhbmRhcmQgUHJvcGVydGllc1xuICAgICAqL1xuICAgIGFjY2VwdDogMCxcbiAgICBhY2NlcHRDaGFyc2V0OiAwLFxuICAgIGFjY2Vzc0tleTogMCxcbiAgICBhY3Rpb246IDAsXG4gICAgYWxsb3dGdWxsU2NyZWVuOiBIQVNfQk9PTEVBTl9WQUxVRSxcbiAgICBhbGxvd1RyYW5zcGFyZW5jeTogMCxcbiAgICBhbHQ6IDAsXG4gICAgLy8gc3BlY2lmaWVzIHRhcmdldCBjb250ZXh0IGZvciBsaW5rcyB3aXRoIGBwcmVsb2FkYCB0eXBlXG4gICAgYXM6IDAsXG4gICAgYXN5bmM6IEhBU19CT09MRUFOX1ZBTFVFLFxuICAgIGF1dG9Db21wbGV0ZTogMCxcbiAgICAvLyBhdXRvRm9jdXMgaXMgcG9seWZpbGxlZC9ub3JtYWxpemVkIGJ5IEF1dG9Gb2N1c1V0aWxzXG4gICAgLy8gYXV0b0ZvY3VzOiBIQVNfQk9PTEVBTl9WQUxVRSxcbiAgICBhdXRvUGxheTogSEFTX0JPT0xFQU5fVkFMVUUsXG4gICAgY2FwdHVyZTogSEFTX0JPT0xFQU5fVkFMVUUsXG4gICAgY2VsbFBhZGRpbmc6IDAsXG4gICAgY2VsbFNwYWNpbmc6IDAsXG4gICAgY2hhclNldDogMCxcbiAgICBjaGFsbGVuZ2U6IDAsXG4gICAgY2hlY2tlZDogTVVTVF9VU0VfUFJPUEVSVFkgfCBIQVNfQk9PTEVBTl9WQUxVRSxcbiAgICBjaXRlOiAwLFxuICAgIGNsYXNzSUQ6IDAsXG4gICAgY2xhc3NOYW1lOiAwLFxuICAgIGNvbHM6IEhBU19QT1NJVElWRV9OVU1FUklDX1ZBTFVFLFxuICAgIGNvbFNwYW46IDAsXG4gICAgY29udGVudDogMCxcbiAgICBjb250ZW50RWRpdGFibGU6IDAsXG4gICAgY29udGV4dE1lbnU6IDAsXG4gICAgY29udHJvbHM6IEhBU19CT09MRUFOX1ZBTFVFLFxuICAgIGNvb3JkczogMCxcbiAgICBjcm9zc09yaWdpbjogMCxcbiAgICBkYXRhOiAwLCAvLyBGb3IgYDxvYmplY3QgLz5gIGFjdHMgYXMgYHNyY2AuXG4gICAgZGF0ZVRpbWU6IDAsXG4gICAgJ2RlZmF1bHQnOiBIQVNfQk9PTEVBTl9WQUxVRSxcbiAgICBkZWZlcjogSEFTX0JPT0xFQU5fVkFMVUUsXG4gICAgZGlyOiAwLFxuICAgIGRpc2FibGVkOiBIQVNfQk9PTEVBTl9WQUxVRSxcbiAgICBkb3dubG9hZDogSEFTX09WRVJMT0FERURfQk9PTEVBTl9WQUxVRSxcbiAgICBkcmFnZ2FibGU6IDAsXG4gICAgZW5jVHlwZTogMCxcbiAgICBmb3JtOiAwLFxuICAgIGZvcm1BY3Rpb246IDAsXG4gICAgZm9ybUVuY1R5cGU6IDAsXG4gICAgZm9ybU1ldGhvZDogMCxcbiAgICBmb3JtTm9WYWxpZGF0ZTogSEFTX0JPT0xFQU5fVkFMVUUsXG4gICAgZm9ybVRhcmdldDogMCxcbiAgICBmcmFtZUJvcmRlcjogMCxcbiAgICBoZWFkZXJzOiAwLFxuICAgIGhlaWdodDogMCxcbiAgICBoaWRkZW46IEhBU19CT09MRUFOX1ZBTFVFLFxuICAgIGhpZ2g6IDAsXG4gICAgaHJlZjogMCxcbiAgICBocmVmTGFuZzogMCxcbiAgICBodG1sRm9yOiAwLFxuICAgIGh0dHBFcXVpdjogMCxcbiAgICBpY29uOiAwLFxuICAgIGlkOiAwLFxuICAgIGlucHV0TW9kZTogMCxcbiAgICBpbnRlZ3JpdHk6IDAsXG4gICAgaXM6IDAsXG4gICAga2V5UGFyYW1zOiAwLFxuICAgIGtleVR5cGU6IDAsXG4gICAga2luZDogMCxcbiAgICBsYWJlbDogMCxcbiAgICBsYW5nOiAwLFxuICAgIGxpc3Q6IDAsXG4gICAgbG9vcDogSEFTX0JPT0xFQU5fVkFMVUUsXG4gICAgbG93OiAwLFxuICAgIG1hbmlmZXN0OiAwLFxuICAgIG1hcmdpbkhlaWdodDogMCxcbiAgICBtYXJnaW5XaWR0aDogMCxcbiAgICBtYXg6IDAsXG4gICAgbWF4TGVuZ3RoOiAwLFxuICAgIG1lZGlhOiAwLFxuICAgIG1lZGlhR3JvdXA6IDAsXG4gICAgbWV0aG9kOiAwLFxuICAgIG1pbjogMCxcbiAgICBtaW5MZW5ndGg6IDAsXG4gICAgLy8gQ2F1dGlvbjsgYG9wdGlvbi5zZWxlY3RlZGAgaXMgbm90IHVwZGF0ZWQgaWYgYHNlbGVjdC5tdWx0aXBsZWAgaXNcbiAgICAvLyBkaXNhYmxlZCB3aXRoIGByZW1vdmVBdHRyaWJ1dGVgLlxuICAgIG11bHRpcGxlOiBNVVNUX1VTRV9QUk9QRVJUWSB8IEhBU19CT09MRUFOX1ZBTFVFLFxuICAgIG11dGVkOiBNVVNUX1VTRV9QUk9QRVJUWSB8IEhBU19CT09MRUFOX1ZBTFVFLFxuICAgIG5hbWU6IDAsXG4gICAgbm9uY2U6IDAsXG4gICAgbm9WYWxpZGF0ZTogSEFTX0JPT0xFQU5fVkFMVUUsXG4gICAgb3BlbjogSEFTX0JPT0xFQU5fVkFMVUUsXG4gICAgb3B0aW11bTogMCxcbiAgICBwYXR0ZXJuOiAwLFxuICAgIHBsYWNlaG9sZGVyOiAwLFxuICAgIHBsYXlzSW5saW5lOiBIQVNfQk9PTEVBTl9WQUxVRSxcbiAgICBwb3N0ZXI6IDAsXG4gICAgcHJlbG9hZDogMCxcbiAgICBwcm9maWxlOiAwLFxuICAgIHJhZGlvR3JvdXA6IDAsXG4gICAgcmVhZE9ubHk6IEhBU19CT09MRUFOX1ZBTFVFLFxuICAgIHJlZmVycmVyUG9saWN5OiAwLFxuICAgIHJlbDogMCxcbiAgICByZXF1aXJlZDogSEFTX0JPT0xFQU5fVkFMVUUsXG4gICAgcmV2ZXJzZWQ6IEhBU19CT09MRUFOX1ZBTFVFLFxuICAgIHJvbGU6IDAsXG4gICAgcm93czogSEFTX1BPU0lUSVZFX05VTUVSSUNfVkFMVUUsXG4gICAgcm93U3BhbjogSEFTX05VTUVSSUNfVkFMVUUsXG4gICAgc2FuZGJveDogMCxcbiAgICBzY29wZTogMCxcbiAgICBzY29wZWQ6IEhBU19CT09MRUFOX1ZBTFVFLFxuICAgIHNjcm9sbGluZzogMCxcbiAgICBzZWFtbGVzczogSEFTX0JPT0xFQU5fVkFMVUUsXG4gICAgc2VsZWN0ZWQ6IE1VU1RfVVNFX1BST1BFUlRZIHwgSEFTX0JPT0xFQU5fVkFMVUUsXG4gICAgc2hhcGU6IDAsXG4gICAgc2l6ZTogSEFTX1BPU0lUSVZFX05VTUVSSUNfVkFMVUUsXG4gICAgc2l6ZXM6IDAsXG4gICAgc3BhbjogSEFTX1BPU0lUSVZFX05VTUVSSUNfVkFMVUUsXG4gICAgc3BlbGxDaGVjazogMCxcbiAgICBzcmM6IDAsXG4gICAgc3JjRG9jOiAwLFxuICAgIHNyY0xhbmc6IDAsXG4gICAgc3JjU2V0OiAwLFxuICAgIHN0YXJ0OiBIQVNfTlVNRVJJQ19WQUxVRSxcbiAgICBzdGVwOiAwLFxuICAgIHN0eWxlOiAwLFxuICAgIHN1bW1hcnk6IDAsXG4gICAgdGFiSW5kZXg6IDAsXG4gICAgdGFyZ2V0OiAwLFxuICAgIHRpdGxlOiAwLFxuICAgIC8vIFNldHRpbmcgLnR5cGUgdGhyb3dzIG9uIG5vbi08aW5wdXQ+IHRhZ3NcbiAgICB0eXBlOiAwLFxuICAgIHVzZU1hcDogMCxcbiAgICB2YWx1ZTogMCxcbiAgICB3aWR0aDogMCxcbiAgICB3bW9kZTogMCxcbiAgICB3cmFwOiAwLFxuXG4gICAgLyoqXG4gICAgICogUkRGYSBQcm9wZXJ0aWVzXG4gICAgICovXG4gICAgYWJvdXQ6IDAsXG4gICAgZGF0YXR5cGU6IDAsXG4gICAgaW5saXN0OiAwLFxuICAgIHByZWZpeDogMCxcbiAgICAvLyBwcm9wZXJ0eSBpcyBhbHNvIHN1cHBvcnRlZCBmb3IgT3BlbkdyYXBoIGluIG1ldGEgdGFncy5cbiAgICBwcm9wZXJ0eTogMCxcbiAgICByZXNvdXJjZTogMCxcbiAgICAndHlwZW9mJzogMCxcbiAgICB2b2NhYjogMCxcblxuICAgIC8qKlxuICAgICAqIE5vbi1zdGFuZGFyZCBQcm9wZXJ0aWVzXG4gICAgICovXG4gICAgLy8gYXV0b0NhcGl0YWxpemUgYW5kIGF1dG9Db3JyZWN0IGFyZSBzdXBwb3J0ZWQgaW4gTW9iaWxlIFNhZmFyaSBmb3JcbiAgICAvLyBrZXlib2FyZCBoaW50cy5cbiAgICBhdXRvQ2FwaXRhbGl6ZTogMCxcbiAgICBhdXRvQ29ycmVjdDogMCxcbiAgICAvLyBhdXRvU2F2ZSBhbGxvd3MgV2ViS2l0L0JsaW5rIHRvIHBlcnNpc3QgdmFsdWVzIG9mIGlucHV0IGZpZWxkcyBvbiBwYWdlIHJlbG9hZHNcbiAgICBhdXRvU2F2ZTogMCxcbiAgICAvLyBjb2xvciBpcyBmb3IgU2FmYXJpIG1hc2staWNvbiBsaW5rXG4gICAgY29sb3I6IDAsXG4gICAgLy8gaXRlbVByb3AsIGl0ZW1TY29wZSwgaXRlbVR5cGUgYXJlIGZvclxuICAgIC8vIE1pY3JvZGF0YSBzdXBwb3J0LiBTZWUgaHR0cDovL3NjaGVtYS5vcmcvZG9jcy9ncy5odG1sXG4gICAgaXRlbVByb3A6IDAsXG4gICAgaXRlbVNjb3BlOiBIQVNfQk9PTEVBTl9WQUxVRSxcbiAgICBpdGVtVHlwZTogMCxcbiAgICAvLyBpdGVtSUQgYW5kIGl0ZW1SZWYgYXJlIGZvciBNaWNyb2RhdGEgc3VwcG9ydCBhcyB3ZWxsIGJ1dFxuICAgIC8vIG9ubHkgc3BlY2lmaWVkIGluIHRoZSBXSEFUV0cgc3BlYyBkb2N1bWVudC4gU2VlXG4gICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvbWljcm9kYXRhLmh0bWwjbWljcm9kYXRhLWRvbS1hcGlcbiAgICBpdGVtSUQ6IDAsXG4gICAgaXRlbVJlZjogMCxcbiAgICAvLyByZXN1bHRzIHNob3cgbG9va2luZyBnbGFzcyBpY29uIGFuZCByZWNlbnQgc2VhcmNoZXMgb24gaW5wdXRcbiAgICAvLyBzZWFyY2ggZmllbGRzIGluIFdlYktpdC9CbGlua1xuICAgIHJlc3VsdHM6IDAsXG4gICAgLy8gSUUtb25seSBhdHRyaWJ1dGUgdGhhdCBzcGVjaWZpZXMgc2VjdXJpdHkgcmVzdHJpY3Rpb25zIG9uIGFuIGlmcmFtZVxuICAgIC8vIGFzIGFuIGFsdGVybmF0aXZlIHRvIHRoZSBzYW5kYm94IGF0dHJpYnV0ZSBvbiBJRTwxMFxuICAgIHNlY3VyaXR5OiAwLFxuICAgIC8vIElFLW9ubHkgYXR0cmlidXRlIHRoYXQgY29udHJvbHMgZm9jdXMgYmVoYXZpb3JcbiAgICB1bnNlbGVjdGFibGU6IDBcbiAgfSxcbiAgRE9NQXR0cmlidXRlTmFtZXM6IHtcbiAgICBhY2NlcHRDaGFyc2V0OiAnYWNjZXB0LWNoYXJzZXQnLFxuICAgIGNsYXNzTmFtZTogJ2NsYXNzJyxcbiAgICBodG1sRm9yOiAnZm9yJyxcbiAgICBodHRwRXF1aXY6ICdodHRwLWVxdWl2J1xuICB9LFxuICBET01Qcm9wZXJ0eU5hbWVzOiB7fSxcbiAgRE9NTXV0YXRpb25NZXRob2RzOiB7XG4gICAgdmFsdWU6IGZ1bmN0aW9uIChub2RlLCB2YWx1ZSkge1xuICAgICAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIG5vZGUucmVtb3ZlQXR0cmlidXRlKCd2YWx1ZScpO1xuICAgICAgfVxuXG4gICAgICAvLyBOdW1iZXIgaW5wdXRzIGdldCBzcGVjaWFsIHRyZWF0bWVudCBkdWUgdG8gc29tZSBlZGdlIGNhc2VzIGluXG4gICAgICAvLyBDaHJvbWUuIExldCBldmVyeXRoaW5nIGVsc2UgYXNzaWduIHRoZSB2YWx1ZSBhdHRyaWJ1dGUgYXMgbm9ybWFsLlxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy83MjUzI2lzc3VlY29tbWVudC0yMzYwNzQzMjZcbiAgICAgIGlmIChub2RlLnR5cGUgIT09ICdudW1iZXInIHx8IG5vZGUuaGFzQXR0cmlidXRlKCd2YWx1ZScpID09PSBmYWxzZSkge1xuICAgICAgICBub2RlLnNldEF0dHJpYnV0ZSgndmFsdWUnLCAnJyArIHZhbHVlKTtcbiAgICAgIH0gZWxzZSBpZiAobm9kZS52YWxpZGl0eSAmJiAhbm9kZS52YWxpZGl0eS5iYWRJbnB1dCAmJiBub2RlLm93bmVyRG9jdW1lbnQuYWN0aXZlRWxlbWVudCAhPT0gbm9kZSkge1xuICAgICAgICAvLyBEb24ndCBhc3NpZ24gYW4gYXR0cmlidXRlIGlmIHZhbGlkYXRpb24gcmVwb3J0cyBiYWRcbiAgICAgICAgLy8gaW5wdXQuIENocm9tZSB3aWxsIGNsZWFyIHRoZSB2YWx1ZS4gQWRkaXRpb25hbGx5LCBkb24ndFxuICAgICAgICAvLyBvcGVyYXRlIG9uIGlucHV0cyB0aGF0IGhhdmUgZm9jdXMsIG90aGVyd2lzZSBDaHJvbWUgbWlnaHRcbiAgICAgICAgLy8gc3RyaXAgb2ZmIHRyYWlsaW5nIGRlY2ltYWwgcGxhY2VzIGFuZCBjYXVzZSB0aGUgdXNlcidzXG4gICAgICAgIC8vIGN1cnNvciBwb3NpdGlvbiB0byBqdW1wIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGlucHV0LlxuICAgICAgICAvL1xuICAgICAgICAvLyBJbiBSZWFjdERPTUlucHV0LCB3ZSBoYXZlIGFuIG9uQmx1ciBldmVudCB0aGF0IHdpbGwgdHJpZ2dlclxuICAgICAgICAvLyB0aGlzIGZ1bmN0aW9uIGFnYWluIHdoZW4gZm9jdXMgaXMgbG9zdC5cbiAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoJ3ZhbHVlJywgJycgKyB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEhUTUxET01Qcm9wZXJ0eUNvbmZpZztcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3JlYWN0LWRvbS9saWIvSFRNTERPTVByb3BlcnR5Q29uZmlnLmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxNC1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0UmVjb25jaWxlciA9IHJlcXVpcmUoJy4vUmVhY3RSZWNvbmNpbGVyJyk7XG5cbnZhciBpbnN0YW50aWF0ZVJlYWN0Q29tcG9uZW50ID0gcmVxdWlyZSgnLi9pbnN0YW50aWF0ZVJlYWN0Q29tcG9uZW50Jyk7XG52YXIgS2V5RXNjYXBlVXRpbHMgPSByZXF1aXJlKCcuL0tleUVzY2FwZVV0aWxzJyk7XG52YXIgc2hvdWxkVXBkYXRlUmVhY3RDb21wb25lbnQgPSByZXF1aXJlKCcuL3Nob3VsZFVwZGF0ZVJlYWN0Q29tcG9uZW50Jyk7XG52YXIgdHJhdmVyc2VBbGxDaGlsZHJlbiA9IHJlcXVpcmUoJy4vdHJhdmVyc2VBbGxDaGlsZHJlbicpO1xudmFyIHdhcm5pbmcgPSByZXF1aXJlKCdmYmpzL2xpYi93YXJuaW5nJyk7XG5cbnZhciBSZWFjdENvbXBvbmVudFRyZWVIb29rO1xuXG5pZiAodHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnICYmIHByb2Nlc3MuZW52ICYmIHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAndGVzdCcpIHtcbiAgLy8gVGVtcG9yYXJ5IGhhY2suXG4gIC8vIElubGluZSByZXF1aXJlcyBkb24ndCB3b3JrIHdlbGwgd2l0aCBKZXN0OlxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzcyNDBcbiAgLy8gUmVtb3ZlIHRoZSBpbmxpbmUgcmVxdWlyZXMgd2hlbiB3ZSBkb24ndCBuZWVkIHRoZW0gYW55bW9yZTpcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L3B1bGwvNzE3OFxuICBSZWFjdENvbXBvbmVudFRyZWVIb29rID0gcmVxdWlyZSgncmVhY3QvbGliL1JlYWN0Q29tcG9uZW50VHJlZUhvb2snKTtcbn1cblxuZnVuY3Rpb24gaW5zdGFudGlhdGVDaGlsZChjaGlsZEluc3RhbmNlcywgY2hpbGQsIG5hbWUsIHNlbGZEZWJ1Z0lEKSB7XG4gIC8vIFdlIGZvdW5kIGEgY29tcG9uZW50IGluc3RhbmNlLlxuICB2YXIga2V5VW5pcXVlID0gY2hpbGRJbnN0YW5jZXNbbmFtZV0gPT09IHVuZGVmaW5lZDtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBpZiAoIVJlYWN0Q29tcG9uZW50VHJlZUhvb2spIHtcbiAgICAgIFJlYWN0Q29tcG9uZW50VHJlZUhvb2sgPSByZXF1aXJlKCdyZWFjdC9saWIvUmVhY3RDb21wb25lbnRUcmVlSG9vaycpO1xuICAgIH1cbiAgICBpZiAoIWtleVVuaXF1ZSkge1xuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcoZmFsc2UsICdmbGF0dGVuQ2hpbGRyZW4oLi4uKTogRW5jb3VudGVyZWQgdHdvIGNoaWxkcmVuIHdpdGggdGhlIHNhbWUga2V5LCAnICsgJ2Alc2AuIENoaWxkIGtleXMgbXVzdCBiZSB1bmlxdWU7IHdoZW4gdHdvIGNoaWxkcmVuIHNoYXJlIGEga2V5LCBvbmx5ICcgKyAndGhlIGZpcnN0IGNoaWxkIHdpbGwgYmUgdXNlZC4lcycsIEtleUVzY2FwZVV0aWxzLnVuZXNjYXBlKG5hbWUpLCBSZWFjdENvbXBvbmVudFRyZWVIb29rLmdldFN0YWNrQWRkZW5kdW1CeUlEKHNlbGZEZWJ1Z0lEKSkgOiB2b2lkIDA7XG4gICAgfVxuICB9XG4gIGlmIChjaGlsZCAhPSBudWxsICYmIGtleVVuaXF1ZSkge1xuICAgIGNoaWxkSW5zdGFuY2VzW25hbWVdID0gaW5zdGFudGlhdGVSZWFjdENvbXBvbmVudChjaGlsZCwgdHJ1ZSk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZWFjdENoaWxkUmVjb25jaWxlciBwcm92aWRlcyBoZWxwZXJzIGZvciBpbml0aWFsaXppbmcgb3IgdXBkYXRpbmcgYSBzZXQgb2ZcbiAqIGNoaWxkcmVuLiBJdHMgb3V0cHV0IGlzIHN1aXRhYmxlIGZvciBwYXNzaW5nIGl0IG9udG8gUmVhY3RNdWx0aUNoaWxkIHdoaWNoXG4gKiBkb2VzIGRpZmZlZCByZW9yZGVyaW5nIGFuZCBpbnNlcnRpb24uXG4gKi9cbnZhciBSZWFjdENoaWxkUmVjb25jaWxlciA9IHtcbiAgLyoqXG4gICAqIEdlbmVyYXRlcyBhIFwibW91bnQgaW1hZ2VcIiBmb3IgZWFjaCBvZiB0aGUgc3VwcGxpZWQgY2hpbGRyZW4uIEluIHRoZSBjYXNlXG4gICAqIG9mIGBSZWFjdERPTUNvbXBvbmVudGAsIGEgbW91bnQgaW1hZ2UgaXMgYSBzdHJpbmcgb2YgbWFya3VwLlxuICAgKlxuICAgKiBAcGFyYW0gez9vYmplY3R9IG5lc3RlZENoaWxkTm9kZXMgTmVzdGVkIGNoaWxkIG1hcHMuXG4gICAqIEByZXR1cm4gez9vYmplY3R9IEEgc2V0IG9mIGNoaWxkIGluc3RhbmNlcy5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBpbnN0YW50aWF0ZUNoaWxkcmVuOiBmdW5jdGlvbiAobmVzdGVkQ2hpbGROb2RlcywgdHJhbnNhY3Rpb24sIGNvbnRleHQsIHNlbGZEZWJ1Z0lEKSAvLyAwIGluIHByb2R1Y3Rpb24gYW5kIGZvciByb290c1xuICB7XG4gICAgaWYgKG5lc3RlZENoaWxkTm9kZXMgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHZhciBjaGlsZEluc3RhbmNlcyA9IHt9O1xuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIHRyYXZlcnNlQWxsQ2hpbGRyZW4obmVzdGVkQ2hpbGROb2RlcywgZnVuY3Rpb24gKGNoaWxkSW5zdHMsIGNoaWxkLCBuYW1lKSB7XG4gICAgICAgIHJldHVybiBpbnN0YW50aWF0ZUNoaWxkKGNoaWxkSW5zdHMsIGNoaWxkLCBuYW1lLCBzZWxmRGVidWdJRCk7XG4gICAgICB9LCBjaGlsZEluc3RhbmNlcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRyYXZlcnNlQWxsQ2hpbGRyZW4obmVzdGVkQ2hpbGROb2RlcywgaW5zdGFudGlhdGVDaGlsZCwgY2hpbGRJbnN0YW5jZXMpO1xuICAgIH1cbiAgICByZXR1cm4gY2hpbGRJbnN0YW5jZXM7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIHJlbmRlcmVkIGNoaWxkcmVuIGFuZCByZXR1cm5zIGEgbmV3IHNldCBvZiBjaGlsZHJlbi5cbiAgICpcbiAgICogQHBhcmFtIHs/b2JqZWN0fSBwcmV2Q2hpbGRyZW4gUHJldmlvdXNseSBpbml0aWFsaXplZCBzZXQgb2YgY2hpbGRyZW4uXG4gICAqIEBwYXJhbSB7P29iamVjdH0gbmV4dENoaWxkcmVuIEZsYXQgY2hpbGQgZWxlbWVudCBtYXBzLlxuICAgKiBAcGFyYW0ge1JlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb259IHRyYW5zYWN0aW9uXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBjb250ZXh0XG4gICAqIEByZXR1cm4gez9vYmplY3R9IEEgbmV3IHNldCBvZiBjaGlsZCBpbnN0YW5jZXMuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgdXBkYXRlQ2hpbGRyZW46IGZ1bmN0aW9uIChwcmV2Q2hpbGRyZW4sIG5leHRDaGlsZHJlbiwgbW91bnRJbWFnZXMsIHJlbW92ZWROb2RlcywgdHJhbnNhY3Rpb24sIGhvc3RQYXJlbnQsIGhvc3RDb250YWluZXJJbmZvLCBjb250ZXh0LCBzZWxmRGVidWdJRCkgLy8gMCBpbiBwcm9kdWN0aW9uIGFuZCBmb3Igcm9vdHNcbiAge1xuICAgIC8vIFdlIGN1cnJlbnRseSBkb24ndCBoYXZlIGEgd2F5IHRvIHRyYWNrIG1vdmVzIGhlcmUgYnV0IGlmIHdlIHVzZSBpdGVyYXRvcnNcbiAgICAvLyBpbnN0ZWFkIG9mIGZvci4uaW4gd2UgY2FuIHppcCB0aGUgaXRlcmF0b3JzIGFuZCBjaGVjayBpZiBhbiBpdGVtIGhhc1xuICAgIC8vIG1vdmVkLlxuICAgIC8vIFRPRE86IElmIG5vdGhpbmcgaGFzIGNoYW5nZWQsIHJldHVybiB0aGUgcHJldkNoaWxkcmVuIG9iamVjdCBzbyB0aGF0IHdlXG4gICAgLy8gY2FuIHF1aWNrbHkgYmFpbG91dCBpZiBub3RoaW5nIGhhcyBjaGFuZ2VkLlxuICAgIGlmICghbmV4dENoaWxkcmVuICYmICFwcmV2Q2hpbGRyZW4pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIG5hbWU7XG4gICAgdmFyIHByZXZDaGlsZDtcbiAgICBmb3IgKG5hbWUgaW4gbmV4dENoaWxkcmVuKSB7XG4gICAgICBpZiAoIW5leHRDaGlsZHJlbi5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHByZXZDaGlsZCA9IHByZXZDaGlsZHJlbiAmJiBwcmV2Q2hpbGRyZW5bbmFtZV07XG4gICAgICB2YXIgcHJldkVsZW1lbnQgPSBwcmV2Q2hpbGQgJiYgcHJldkNoaWxkLl9jdXJyZW50RWxlbWVudDtcbiAgICAgIHZhciBuZXh0RWxlbWVudCA9IG5leHRDaGlsZHJlbltuYW1lXTtcbiAgICAgIGlmIChwcmV2Q2hpbGQgIT0gbnVsbCAmJiBzaG91bGRVcGRhdGVSZWFjdENvbXBvbmVudChwcmV2RWxlbWVudCwgbmV4dEVsZW1lbnQpKSB7XG4gICAgICAgIFJlYWN0UmVjb25jaWxlci5yZWNlaXZlQ29tcG9uZW50KHByZXZDaGlsZCwgbmV4dEVsZW1lbnQsIHRyYW5zYWN0aW9uLCBjb250ZXh0KTtcbiAgICAgICAgbmV4dENoaWxkcmVuW25hbWVdID0gcHJldkNoaWxkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHByZXZDaGlsZCkge1xuICAgICAgICAgIHJlbW92ZWROb2Rlc1tuYW1lXSA9IFJlYWN0UmVjb25jaWxlci5nZXRIb3N0Tm9kZShwcmV2Q2hpbGQpO1xuICAgICAgICAgIFJlYWN0UmVjb25jaWxlci51bm1vdW50Q29tcG9uZW50KHByZXZDaGlsZCwgZmFsc2UpO1xuICAgICAgICB9XG4gICAgICAgIC8vIFRoZSBjaGlsZCBtdXN0IGJlIGluc3RhbnRpYXRlZCBiZWZvcmUgaXQncyBtb3VudGVkLlxuICAgICAgICB2YXIgbmV4dENoaWxkSW5zdGFuY2UgPSBpbnN0YW50aWF0ZVJlYWN0Q29tcG9uZW50KG5leHRFbGVtZW50LCB0cnVlKTtcbiAgICAgICAgbmV4dENoaWxkcmVuW25hbWVdID0gbmV4dENoaWxkSW5zdGFuY2U7XG4gICAgICAgIC8vIENyZWF0aW5nIG1vdW50IGltYWdlIG5vdyBlbnN1cmVzIHJlZnMgYXJlIHJlc29sdmVkIGluIHJpZ2h0IG9yZGVyXG4gICAgICAgIC8vIChzZWUgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L3B1bGwvNzEwMSBmb3IgZXhwbGFuYXRpb24pLlxuICAgICAgICB2YXIgbmV4dENoaWxkTW91bnRJbWFnZSA9IFJlYWN0UmVjb25jaWxlci5tb3VudENvbXBvbmVudChuZXh0Q2hpbGRJbnN0YW5jZSwgdHJhbnNhY3Rpb24sIGhvc3RQYXJlbnQsIGhvc3RDb250YWluZXJJbmZvLCBjb250ZXh0LCBzZWxmRGVidWdJRCk7XG4gICAgICAgIG1vdW50SW1hZ2VzLnB1c2gobmV4dENoaWxkTW91bnRJbWFnZSk7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIFVubW91bnQgY2hpbGRyZW4gdGhhdCBhcmUgbm8gbG9uZ2VyIHByZXNlbnQuXG4gICAgZm9yIChuYW1lIGluIHByZXZDaGlsZHJlbikge1xuICAgICAgaWYgKHByZXZDaGlsZHJlbi5oYXNPd25Qcm9wZXJ0eShuYW1lKSAmJiAhKG5leHRDaGlsZHJlbiAmJiBuZXh0Q2hpbGRyZW4uaGFzT3duUHJvcGVydHkobmFtZSkpKSB7XG4gICAgICAgIHByZXZDaGlsZCA9IHByZXZDaGlsZHJlbltuYW1lXTtcbiAgICAgICAgcmVtb3ZlZE5vZGVzW25hbWVdID0gUmVhY3RSZWNvbmNpbGVyLmdldEhvc3ROb2RlKHByZXZDaGlsZCk7XG4gICAgICAgIFJlYWN0UmVjb25jaWxlci51bm1vdW50Q29tcG9uZW50KHByZXZDaGlsZCwgZmFsc2UpO1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICAvKipcbiAgICogVW5tb3VudHMgYWxsIHJlbmRlcmVkIGNoaWxkcmVuLiBUaGlzIHNob3VsZCBiZSB1c2VkIHRvIGNsZWFuIHVwIGNoaWxkcmVuXG4gICAqIHdoZW4gdGhpcyBjb21wb25lbnQgaXMgdW5tb3VudGVkLlxuICAgKlxuICAgKiBAcGFyYW0gez9vYmplY3R9IHJlbmRlcmVkQ2hpbGRyZW4gUHJldmlvdXNseSBpbml0aWFsaXplZCBzZXQgb2YgY2hpbGRyZW4uXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgdW5tb3VudENoaWxkcmVuOiBmdW5jdGlvbiAocmVuZGVyZWRDaGlsZHJlbiwgc2FmZWx5KSB7XG4gICAgZm9yICh2YXIgbmFtZSBpbiByZW5kZXJlZENoaWxkcmVuKSB7XG4gICAgICBpZiAocmVuZGVyZWRDaGlsZHJlbi5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuICAgICAgICB2YXIgcmVuZGVyZWRDaGlsZCA9IHJlbmRlcmVkQ2hpbGRyZW5bbmFtZV07XG4gICAgICAgIFJlYWN0UmVjb25jaWxlci51bm1vdW50Q29tcG9uZW50KHJlbmRlcmVkQ2hpbGQsIHNhZmVseSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0Q2hpbGRSZWNvbmNpbGVyO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QtZG9tL2xpYi9SZWFjdENoaWxkUmVjb25jaWxlci5qcyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBET01DaGlsZHJlbk9wZXJhdGlvbnMgPSByZXF1aXJlKCcuL0RPTUNoaWxkcmVuT3BlcmF0aW9ucycpO1xudmFyIFJlYWN0RE9NSURPcGVyYXRpb25zID0gcmVxdWlyZSgnLi9SZWFjdERPTUlET3BlcmF0aW9ucycpO1xuXG4vKipcbiAqIEFic3RyYWN0cyBhd2F5IGFsbCBmdW5jdGlvbmFsaXR5IG9mIHRoZSByZWNvbmNpbGVyIHRoYXQgcmVxdWlyZXMga25vd2xlZGdlIG9mXG4gKiB0aGUgYnJvd3NlciBjb250ZXh0LiBUT0RPOiBUaGVzZSBjYWxsZXJzIHNob3VsZCBiZSByZWZhY3RvcmVkIHRvIGF2b2lkIHRoZVxuICogbmVlZCBmb3IgdGhpcyBpbmplY3Rpb24uXG4gKi9cbnZhciBSZWFjdENvbXBvbmVudEJyb3dzZXJFbnZpcm9ubWVudCA9IHtcbiAgcHJvY2Vzc0NoaWxkcmVuVXBkYXRlczogUmVhY3RET01JRE9wZXJhdGlvbnMuZGFuZ2Vyb3VzbHlQcm9jZXNzQ2hpbGRyZW5VcGRhdGVzLFxuXG4gIHJlcGxhY2VOb2RlV2l0aE1hcmt1cDogRE9NQ2hpbGRyZW5PcGVyYXRpb25zLmRhbmdlcm91c2x5UmVwbGFjZU5vZGVXaXRoTWFya3VwXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0Q29tcG9uZW50QnJvd3NlckVudmlyb25tZW50O1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QtZG9tL2xpYi9SZWFjdENvbXBvbmVudEJyb3dzZXJFbnZpcm9ubWVudC5qcyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBfcHJvZEludmFyaWFudCA9IHJlcXVpcmUoJy4vcmVhY3RQcm9kSW52YXJpYW50JyksXG4gICAgX2Fzc2lnbiA9IHJlcXVpcmUoJ29iamVjdC1hc3NpZ24nKTtcblxudmFyIFJlYWN0ID0gcmVxdWlyZSgncmVhY3QvbGliL1JlYWN0Jyk7XG52YXIgUmVhY3RDb21wb25lbnRFbnZpcm9ubWVudCA9IHJlcXVpcmUoJy4vUmVhY3RDb21wb25lbnRFbnZpcm9ubWVudCcpO1xudmFyIFJlYWN0Q3VycmVudE93bmVyID0gcmVxdWlyZSgncmVhY3QvbGliL1JlYWN0Q3VycmVudE93bmVyJyk7XG52YXIgUmVhY3RFcnJvclV0aWxzID0gcmVxdWlyZSgnLi9SZWFjdEVycm9yVXRpbHMnKTtcbnZhciBSZWFjdEluc3RhbmNlTWFwID0gcmVxdWlyZSgnLi9SZWFjdEluc3RhbmNlTWFwJyk7XG52YXIgUmVhY3RJbnN0cnVtZW50YXRpb24gPSByZXF1aXJlKCcuL1JlYWN0SW5zdHJ1bWVudGF0aW9uJyk7XG52YXIgUmVhY3ROb2RlVHlwZXMgPSByZXF1aXJlKCcuL1JlYWN0Tm9kZVR5cGVzJyk7XG52YXIgUmVhY3RSZWNvbmNpbGVyID0gcmVxdWlyZSgnLi9SZWFjdFJlY29uY2lsZXInKTtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgdmFyIGNoZWNrUmVhY3RUeXBlU3BlYyA9IHJlcXVpcmUoJy4vY2hlY2tSZWFjdFR5cGVTcGVjJyk7XG59XG5cbnZhciBlbXB0eU9iamVjdCA9IHJlcXVpcmUoJ2ZianMvbGliL2VtcHR5T2JqZWN0Jyk7XG52YXIgaW52YXJpYW50ID0gcmVxdWlyZSgnZmJqcy9saWIvaW52YXJpYW50Jyk7XG52YXIgc2hhbGxvd0VxdWFsID0gcmVxdWlyZSgnZmJqcy9saWIvc2hhbGxvd0VxdWFsJyk7XG52YXIgc2hvdWxkVXBkYXRlUmVhY3RDb21wb25lbnQgPSByZXF1aXJlKCcuL3Nob3VsZFVwZGF0ZVJlYWN0Q29tcG9uZW50Jyk7XG52YXIgd2FybmluZyA9IHJlcXVpcmUoJ2ZianMvbGliL3dhcm5pbmcnKTtcblxudmFyIENvbXBvc2l0ZVR5cGVzID0ge1xuICBJbXB1cmVDbGFzczogMCxcbiAgUHVyZUNsYXNzOiAxLFxuICBTdGF0ZWxlc3NGdW5jdGlvbmFsOiAyXG59O1xuXG5mdW5jdGlvbiBTdGF0ZWxlc3NDb21wb25lbnQoQ29tcG9uZW50KSB7fVxuU3RhdGVsZXNzQ29tcG9uZW50LnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBDb21wb25lbnQgPSBSZWFjdEluc3RhbmNlTWFwLmdldCh0aGlzKS5fY3VycmVudEVsZW1lbnQudHlwZTtcbiAgdmFyIGVsZW1lbnQgPSBDb21wb25lbnQodGhpcy5wcm9wcywgdGhpcy5jb250ZXh0LCB0aGlzLnVwZGF0ZXIpO1xuICB3YXJuSWZJbnZhbGlkRWxlbWVudChDb21wb25lbnQsIGVsZW1lbnQpO1xuICByZXR1cm4gZWxlbWVudDtcbn07XG5cbmZ1bmN0aW9uIHdhcm5JZkludmFsaWRFbGVtZW50KENvbXBvbmVudCwgZWxlbWVudCkge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKGVsZW1lbnQgPT09IG51bGwgfHwgZWxlbWVudCA9PT0gZmFsc2UgfHwgUmVhY3QuaXNWYWxpZEVsZW1lbnQoZWxlbWVudCksICclcyguLi4pOiBBIHZhbGlkIFJlYWN0IGVsZW1lbnQgKG9yIG51bGwpIG11c3QgYmUgcmV0dXJuZWQuIFlvdSBtYXkgaGF2ZSAnICsgJ3JldHVybmVkIHVuZGVmaW5lZCwgYW4gYXJyYXkgb3Igc29tZSBvdGhlciBpbnZhbGlkIG9iamVjdC4nLCBDb21wb25lbnQuZGlzcGxheU5hbWUgfHwgQ29tcG9uZW50Lm5hbWUgfHwgJ0NvbXBvbmVudCcpIDogdm9pZCAwO1xuICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKCFDb21wb25lbnQuY2hpbGRDb250ZXh0VHlwZXMsICclcyguLi4pOiBjaGlsZENvbnRleHRUeXBlcyBjYW5ub3QgYmUgZGVmaW5lZCBvbiBhIGZ1bmN0aW9uYWwgY29tcG9uZW50LicsIENvbXBvbmVudC5kaXNwbGF5TmFtZSB8fCBDb21wb25lbnQubmFtZSB8fCAnQ29tcG9uZW50JykgOiB2b2lkIDA7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2hvdWxkQ29uc3RydWN0KENvbXBvbmVudCkge1xuICByZXR1cm4gISEoQ29tcG9uZW50LnByb3RvdHlwZSAmJiBDb21wb25lbnQucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQpO1xufVxuXG5mdW5jdGlvbiBpc1B1cmVDb21wb25lbnQoQ29tcG9uZW50KSB7XG4gIHJldHVybiAhIShDb21wb25lbnQucHJvdG90eXBlICYmIENvbXBvbmVudC5wcm90b3R5cGUuaXNQdXJlUmVhY3RDb21wb25lbnQpO1xufVxuXG4vLyBTZXBhcmF0ZWQgaW50byBhIGZ1bmN0aW9uIHRvIGNvbnRhaW4gZGVvcHRpbWl6YXRpb25zIGNhdXNlZCBieSB0cnkvZmluYWxseS5cbmZ1bmN0aW9uIG1lYXN1cmVMaWZlQ3ljbGVQZXJmKGZuLCBkZWJ1Z0lELCB0aW1lclR5cGUpIHtcbiAgaWYgKGRlYnVnSUQgPT09IDApIHtcbiAgICAvLyBUb3AtbGV2ZWwgd3JhcHBlcnMgKHNlZSBSZWFjdE1vdW50KSBhbmQgZW1wdHkgY29tcG9uZW50cyAoc2VlXG4gICAgLy8gUmVhY3RET01FbXB0eUNvbXBvbmVudCkgYXJlIGludmlzaWJsZSB0byBob29rcyBhbmQgZGV2dG9vbHMuXG4gICAgLy8gQm90aCBhcmUgaW1wbGVtZW50YXRpb24gZGV0YWlscyB0aGF0IHNob3VsZCBnbyBhd2F5IGluIHRoZSBmdXR1cmUuXG4gICAgcmV0dXJuIGZuKCk7XG4gIH1cblxuICBSZWFjdEluc3RydW1lbnRhdGlvbi5kZWJ1Z1Rvb2wub25CZWdpbkxpZmVDeWNsZVRpbWVyKGRlYnVnSUQsIHRpbWVyVHlwZSk7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGZuKCk7XG4gIH0gZmluYWxseSB7XG4gICAgUmVhY3RJbnN0cnVtZW50YXRpb24uZGVidWdUb29sLm9uRW5kTGlmZUN5Y2xlVGltZXIoZGVidWdJRCwgdGltZXJUeXBlKTtcbiAgfVxufVxuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLSBUaGUgTGlmZS1DeWNsZSBvZiBhIENvbXBvc2l0ZSBDb21wb25lbnQgLS0tLS0tLS0tLS0tLS0tLS0tXG4gKlxuICogLSBjb25zdHJ1Y3RvcjogSW5pdGlhbGl6YXRpb24gb2Ygc3RhdGUuIFRoZSBpbnN0YW5jZSBpcyBub3cgcmV0YWluZWQuXG4gKiAgIC0gY29tcG9uZW50V2lsbE1vdW50XG4gKiAgIC0gcmVuZGVyXG4gKiAgIC0gW2NoaWxkcmVuJ3MgY29uc3RydWN0b3JzXVxuICogICAgIC0gW2NoaWxkcmVuJ3MgY29tcG9uZW50V2lsbE1vdW50IGFuZCByZW5kZXJdXG4gKiAgICAgLSBbY2hpbGRyZW4ncyBjb21wb25lbnREaWRNb3VudF1cbiAqICAgICAtIGNvbXBvbmVudERpZE1vdW50XG4gKlxuICogICAgICAgVXBkYXRlIFBoYXNlczpcbiAqICAgICAgIC0gY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyAob25seSBjYWxsZWQgaWYgcGFyZW50IHVwZGF0ZWQpXG4gKiAgICAgICAtIHNob3VsZENvbXBvbmVudFVwZGF0ZVxuICogICAgICAgICAtIGNvbXBvbmVudFdpbGxVcGRhdGVcbiAqICAgICAgICAgICAtIHJlbmRlclxuICogICAgICAgICAgIC0gW2NoaWxkcmVuJ3MgY29uc3RydWN0b3JzIG9yIHJlY2VpdmUgcHJvcHMgcGhhc2VzXVxuICogICAgICAgICAtIGNvbXBvbmVudERpZFVwZGF0ZVxuICpcbiAqICAgICAtIGNvbXBvbmVudFdpbGxVbm1vdW50XG4gKiAgICAgLSBbY2hpbGRyZW4ncyBjb21wb25lbnRXaWxsVW5tb3VudF1cbiAqICAgLSBbY2hpbGRyZW4gZGVzdHJveWVkXVxuICogLSAoZGVzdHJveWVkKTogVGhlIGluc3RhbmNlIGlzIG5vdyBibGFuaywgcmVsZWFzZWQgYnkgUmVhY3QgYW5kIHJlYWR5IGZvciBHQy5cbiAqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbi8qKlxuICogQW4gaW5jcmVtZW50aW5nIElEIGFzc2lnbmVkIHRvIGVhY2ggY29tcG9uZW50IHdoZW4gaXQgaXMgbW91bnRlZC4gVGhpcyBpc1xuICogdXNlZCB0byBlbmZvcmNlIHRoZSBvcmRlciBpbiB3aGljaCBgUmVhY3RVcGRhdGVzYCB1cGRhdGVzIGRpcnR5IGNvbXBvbmVudHMuXG4gKlxuICogQHByaXZhdGVcbiAqL1xudmFyIG5leHRNb3VudElEID0gMTtcblxuLyoqXG4gKiBAbGVuZHMge1JlYWN0Q29tcG9zaXRlQ29tcG9uZW50LnByb3RvdHlwZX1cbiAqL1xudmFyIFJlYWN0Q29tcG9zaXRlQ29tcG9uZW50ID0ge1xuICAvKipcbiAgICogQmFzZSBjb25zdHJ1Y3RvciBmb3IgYWxsIGNvbXBvc2l0ZSBjb21wb25lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7UmVhY3RFbGVtZW50fSBlbGVtZW50XG4gICAqIEBmaW5hbFxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGNvbnN0cnVjdDogZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgICB0aGlzLl9jdXJyZW50RWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgdGhpcy5fcm9vdE5vZGVJRCA9IDA7XG4gICAgdGhpcy5fY29tcG9zaXRlVHlwZSA9IG51bGw7XG4gICAgdGhpcy5faW5zdGFuY2UgPSBudWxsO1xuICAgIHRoaXMuX2hvc3RQYXJlbnQgPSBudWxsO1xuICAgIHRoaXMuX2hvc3RDb250YWluZXJJbmZvID0gbnVsbDtcblxuICAgIC8vIFNlZSBSZWFjdFVwZGF0ZVF1ZXVlXG4gICAgdGhpcy5fdXBkYXRlQmF0Y2hOdW1iZXIgPSBudWxsO1xuICAgIHRoaXMuX3BlbmRpbmdFbGVtZW50ID0gbnVsbDtcbiAgICB0aGlzLl9wZW5kaW5nU3RhdGVRdWV1ZSA9IG51bGw7XG4gICAgdGhpcy5fcGVuZGluZ1JlcGxhY2VTdGF0ZSA9IGZhbHNlO1xuICAgIHRoaXMuX3BlbmRpbmdGb3JjZVVwZGF0ZSA9IGZhbHNlO1xuXG4gICAgdGhpcy5fcmVuZGVyZWROb2RlVHlwZSA9IG51bGw7XG4gICAgdGhpcy5fcmVuZGVyZWRDb21wb25lbnQgPSBudWxsO1xuICAgIHRoaXMuX2NvbnRleHQgPSBudWxsO1xuICAgIHRoaXMuX21vdW50T3JkZXIgPSAwO1xuICAgIHRoaXMuX3RvcExldmVsV3JhcHBlciA9IG51bGw7XG5cbiAgICAvLyBTZWUgUmVhY3RVcGRhdGVzIGFuZCBSZWFjdFVwZGF0ZVF1ZXVlLlxuICAgIHRoaXMuX3BlbmRpbmdDYWxsYmFja3MgPSBudWxsO1xuXG4gICAgLy8gQ29tcG9uZW50V2lsbFVubW91bnQgc2hhbGwgb25seSBiZSBjYWxsZWQgb25jZVxuICAgIHRoaXMuX2NhbGxlZENvbXBvbmVudFdpbGxVbm1vdW50ID0gZmFsc2U7XG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgdGhpcy5fd2FybmVkQWJvdXRSZWZzSW5SZW5kZXIgPSBmYWxzZTtcbiAgICB9XG4gIH0sXG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemVzIHRoZSBjb21wb25lbnQsIHJlbmRlcnMgbWFya3VwLCBhbmQgcmVnaXN0ZXJzIGV2ZW50IGxpc3RlbmVycy5cbiAgICpcbiAgICogQHBhcmFtIHtSZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9ufFJlYWN0U2VydmVyUmVuZGVyaW5nVHJhbnNhY3Rpb259IHRyYW5zYWN0aW9uXG4gICAqIEBwYXJhbSB7P29iamVjdH0gaG9zdFBhcmVudFxuICAgKiBAcGFyYW0gez9vYmplY3R9IGhvc3RDb250YWluZXJJbmZvXG4gICAqIEBwYXJhbSB7P29iamVjdH0gY29udGV4dFxuICAgKiBAcmV0dXJuIHs/c3RyaW5nfSBSZW5kZXJlZCBtYXJrdXAgdG8gYmUgaW5zZXJ0ZWQgaW50byB0aGUgRE9NLlxuICAgKiBAZmluYWxcbiAgICogQGludGVybmFsXG4gICAqL1xuICBtb3VudENvbXBvbmVudDogZnVuY3Rpb24gKHRyYW5zYWN0aW9uLCBob3N0UGFyZW50LCBob3N0Q29udGFpbmVySW5mbywgY29udGV4dCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICB0aGlzLl9jb250ZXh0ID0gY29udGV4dDtcbiAgICB0aGlzLl9tb3VudE9yZGVyID0gbmV4dE1vdW50SUQrKztcbiAgICB0aGlzLl9ob3N0UGFyZW50ID0gaG9zdFBhcmVudDtcbiAgICB0aGlzLl9ob3N0Q29udGFpbmVySW5mbyA9IGhvc3RDb250YWluZXJJbmZvO1xuXG4gICAgdmFyIHB1YmxpY1Byb3BzID0gdGhpcy5fY3VycmVudEVsZW1lbnQucHJvcHM7XG4gICAgdmFyIHB1YmxpY0NvbnRleHQgPSB0aGlzLl9wcm9jZXNzQ29udGV4dChjb250ZXh0KTtcblxuICAgIHZhciBDb21wb25lbnQgPSB0aGlzLl9jdXJyZW50RWxlbWVudC50eXBlO1xuXG4gICAgdmFyIHVwZGF0ZVF1ZXVlID0gdHJhbnNhY3Rpb24uZ2V0VXBkYXRlUXVldWUoKTtcblxuICAgIC8vIEluaXRpYWxpemUgdGhlIHB1YmxpYyBjbGFzc1xuICAgIHZhciBkb0NvbnN0cnVjdCA9IHNob3VsZENvbnN0cnVjdChDb21wb25lbnQpO1xuICAgIHZhciBpbnN0ID0gdGhpcy5fY29uc3RydWN0Q29tcG9uZW50KGRvQ29uc3RydWN0LCBwdWJsaWNQcm9wcywgcHVibGljQ29udGV4dCwgdXBkYXRlUXVldWUpO1xuICAgIHZhciByZW5kZXJlZEVsZW1lbnQ7XG5cbiAgICAvLyBTdXBwb3J0IGZ1bmN0aW9uYWwgY29tcG9uZW50c1xuICAgIGlmICghZG9Db25zdHJ1Y3QgJiYgKGluc3QgPT0gbnVsbCB8fCBpbnN0LnJlbmRlciA9PSBudWxsKSkge1xuICAgICAgcmVuZGVyZWRFbGVtZW50ID0gaW5zdDtcbiAgICAgIHdhcm5JZkludmFsaWRFbGVtZW50KENvbXBvbmVudCwgcmVuZGVyZWRFbGVtZW50KTtcbiAgICAgICEoaW5zdCA9PT0gbnVsbCB8fCBpbnN0ID09PSBmYWxzZSB8fCBSZWFjdC5pc1ZhbGlkRWxlbWVudChpbnN0KSkgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAnJXMoLi4uKTogQSB2YWxpZCBSZWFjdCBlbGVtZW50IChvciBudWxsKSBtdXN0IGJlIHJldHVybmVkLiBZb3UgbWF5IGhhdmUgcmV0dXJuZWQgdW5kZWZpbmVkLCBhbiBhcnJheSBvciBzb21lIG90aGVyIGludmFsaWQgb2JqZWN0LicsIENvbXBvbmVudC5kaXNwbGF5TmFtZSB8fCBDb21wb25lbnQubmFtZSB8fCAnQ29tcG9uZW50JykgOiBfcHJvZEludmFyaWFudCgnMTA1JywgQ29tcG9uZW50LmRpc3BsYXlOYW1lIHx8IENvbXBvbmVudC5uYW1lIHx8ICdDb21wb25lbnQnKSA6IHZvaWQgMDtcbiAgICAgIGluc3QgPSBuZXcgU3RhdGVsZXNzQ29tcG9uZW50KENvbXBvbmVudCk7XG4gICAgICB0aGlzLl9jb21wb3NpdGVUeXBlID0gQ29tcG9zaXRlVHlwZXMuU3RhdGVsZXNzRnVuY3Rpb25hbDtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGlzUHVyZUNvbXBvbmVudChDb21wb25lbnQpKSB7XG4gICAgICAgIHRoaXMuX2NvbXBvc2l0ZVR5cGUgPSBDb21wb3NpdGVUeXBlcy5QdXJlQ2xhc3M7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9jb21wb3NpdGVUeXBlID0gQ29tcG9zaXRlVHlwZXMuSW1wdXJlQ2xhc3M7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIC8vIFRoaXMgd2lsbCB0aHJvdyBsYXRlciBpbiBfcmVuZGVyVmFsaWRhdGVkQ29tcG9uZW50LCBidXQgYWRkIGFuIGVhcmx5XG4gICAgICAvLyB3YXJuaW5nIG5vdyB0byBoZWxwIGRlYnVnZ2luZ1xuICAgICAgaWYgKGluc3QucmVuZGVyID09IG51bGwpIHtcbiAgICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcoZmFsc2UsICclcyguLi4pOiBObyBgcmVuZGVyYCBtZXRob2QgZm91bmQgb24gdGhlIHJldHVybmVkIGNvbXBvbmVudCAnICsgJ2luc3RhbmNlOiB5b3UgbWF5IGhhdmUgZm9yZ290dGVuIHRvIGRlZmluZSBgcmVuZGVyYC4nLCBDb21wb25lbnQuZGlzcGxheU5hbWUgfHwgQ29tcG9uZW50Lm5hbWUgfHwgJ0NvbXBvbmVudCcpIDogdm9pZCAwO1xuICAgICAgfVxuXG4gICAgICB2YXIgcHJvcHNNdXRhdGVkID0gaW5zdC5wcm9wcyAhPT0gcHVibGljUHJvcHM7XG4gICAgICB2YXIgY29tcG9uZW50TmFtZSA9IENvbXBvbmVudC5kaXNwbGF5TmFtZSB8fCBDb21wb25lbnQubmFtZSB8fCAnQ29tcG9uZW50JztcblxuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcoaW5zdC5wcm9wcyA9PT0gdW5kZWZpbmVkIHx8ICFwcm9wc011dGF0ZWQsICclcyguLi4pOiBXaGVuIGNhbGxpbmcgc3VwZXIoKSBpbiBgJXNgLCBtYWtlIHN1cmUgdG8gcGFzcyAnICsgXCJ1cCB0aGUgc2FtZSBwcm9wcyB0aGF0IHlvdXIgY29tcG9uZW50J3MgY29uc3RydWN0b3Igd2FzIHBhc3NlZC5cIiwgY29tcG9uZW50TmFtZSwgY29tcG9uZW50TmFtZSkgOiB2b2lkIDA7XG4gICAgfVxuXG4gICAgLy8gVGhlc2Ugc2hvdWxkIGJlIHNldCB1cCBpbiB0aGUgY29uc3RydWN0b3IsIGJ1dCBhcyBhIGNvbnZlbmllbmNlIGZvclxuICAgIC8vIHNpbXBsZXIgY2xhc3MgYWJzdHJhY3Rpb25zLCB3ZSBzZXQgdGhlbSB1cCBhZnRlciB0aGUgZmFjdC5cbiAgICBpbnN0LnByb3BzID0gcHVibGljUHJvcHM7XG4gICAgaW5zdC5jb250ZXh0ID0gcHVibGljQ29udGV4dDtcbiAgICBpbnN0LnJlZnMgPSBlbXB0eU9iamVjdDtcbiAgICBpbnN0LnVwZGF0ZXIgPSB1cGRhdGVRdWV1ZTtcblxuICAgIHRoaXMuX2luc3RhbmNlID0gaW5zdDtcblxuICAgIC8vIFN0b3JlIGEgcmVmZXJlbmNlIGZyb20gdGhlIGluc3RhbmNlIGJhY2sgdG8gdGhlIGludGVybmFsIHJlcHJlc2VudGF0aW9uXG4gICAgUmVhY3RJbnN0YW5jZU1hcC5zZXQoaW5zdCwgdGhpcyk7XG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgLy8gU2luY2UgcGxhaW4gSlMgY2xhc3NlcyBhcmUgZGVmaW5lZCB3aXRob3V0IGFueSBzcGVjaWFsIGluaXRpYWxpemF0aW9uXG4gICAgICAvLyBsb2dpYywgd2UgY2FuIG5vdCBjYXRjaCBjb21tb24gZXJyb3JzIGVhcmx5LiBUaGVyZWZvcmUsIHdlIGhhdmUgdG9cbiAgICAgIC8vIGNhdGNoIHRoZW0gaGVyZSwgYXQgaW5pdGlhbGl6YXRpb24gdGltZSwgaW5zdGVhZC5cbiAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKCFpbnN0LmdldEluaXRpYWxTdGF0ZSB8fCBpbnN0LmdldEluaXRpYWxTdGF0ZS5pc1JlYWN0Q2xhc3NBcHByb3ZlZCB8fCBpbnN0LnN0YXRlLCAnZ2V0SW5pdGlhbFN0YXRlIHdhcyBkZWZpbmVkIG9uICVzLCBhIHBsYWluIEphdmFTY3JpcHQgY2xhc3MuICcgKyAnVGhpcyBpcyBvbmx5IHN1cHBvcnRlZCBmb3IgY2xhc3NlcyBjcmVhdGVkIHVzaW5nIFJlYWN0LmNyZWF0ZUNsYXNzLiAnICsgJ0RpZCB5b3UgbWVhbiB0byBkZWZpbmUgYSBzdGF0ZSBwcm9wZXJ0eSBpbnN0ZWFkPycsIHRoaXMuZ2V0TmFtZSgpIHx8ICdhIGNvbXBvbmVudCcpIDogdm9pZCAwO1xuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcoIWluc3QuZ2V0RGVmYXVsdFByb3BzIHx8IGluc3QuZ2V0RGVmYXVsdFByb3BzLmlzUmVhY3RDbGFzc0FwcHJvdmVkLCAnZ2V0RGVmYXVsdFByb3BzIHdhcyBkZWZpbmVkIG9uICVzLCBhIHBsYWluIEphdmFTY3JpcHQgY2xhc3MuICcgKyAnVGhpcyBpcyBvbmx5IHN1cHBvcnRlZCBmb3IgY2xhc3NlcyBjcmVhdGVkIHVzaW5nIFJlYWN0LmNyZWF0ZUNsYXNzLiAnICsgJ1VzZSBhIHN0YXRpYyBwcm9wZXJ0eSB0byBkZWZpbmUgZGVmYXVsdFByb3BzIGluc3RlYWQuJywgdGhpcy5nZXROYW1lKCkgfHwgJ2EgY29tcG9uZW50JykgOiB2b2lkIDA7XG4gICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyghaW5zdC5wcm9wVHlwZXMsICdwcm9wVHlwZXMgd2FzIGRlZmluZWQgYXMgYW4gaW5zdGFuY2UgcHJvcGVydHkgb24gJXMuIFVzZSBhIHN0YXRpYyAnICsgJ3Byb3BlcnR5IHRvIGRlZmluZSBwcm9wVHlwZXMgaW5zdGVhZC4nLCB0aGlzLmdldE5hbWUoKSB8fCAnYSBjb21wb25lbnQnKSA6IHZvaWQgMDtcbiAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKCFpbnN0LmNvbnRleHRUeXBlcywgJ2NvbnRleHRUeXBlcyB3YXMgZGVmaW5lZCBhcyBhbiBpbnN0YW5jZSBwcm9wZXJ0eSBvbiAlcy4gVXNlIGEgJyArICdzdGF0aWMgcHJvcGVydHkgdG8gZGVmaW5lIGNvbnRleHRUeXBlcyBpbnN0ZWFkLicsIHRoaXMuZ2V0TmFtZSgpIHx8ICdhIGNvbXBvbmVudCcpIDogdm9pZCAwO1xuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcodHlwZW9mIGluc3QuY29tcG9uZW50U2hvdWxkVXBkYXRlICE9PSAnZnVuY3Rpb24nLCAnJXMgaGFzIGEgbWV0aG9kIGNhbGxlZCAnICsgJ2NvbXBvbmVudFNob3VsZFVwZGF0ZSgpLiBEaWQgeW91IG1lYW4gc2hvdWxkQ29tcG9uZW50VXBkYXRlKCk/ICcgKyAnVGhlIG5hbWUgaXMgcGhyYXNlZCBhcyBhIHF1ZXN0aW9uIGJlY2F1c2UgdGhlIGZ1bmN0aW9uIGlzICcgKyAnZXhwZWN0ZWQgdG8gcmV0dXJuIGEgdmFsdWUuJywgdGhpcy5nZXROYW1lKCkgfHwgJ0EgY29tcG9uZW50JykgOiB2b2lkIDA7XG4gICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyh0eXBlb2YgaW5zdC5jb21wb25lbnREaWRVbm1vdW50ICE9PSAnZnVuY3Rpb24nLCAnJXMgaGFzIGEgbWV0aG9kIGNhbGxlZCAnICsgJ2NvbXBvbmVudERpZFVubW91bnQoKS4gQnV0IHRoZXJlIGlzIG5vIHN1Y2ggbGlmZWN5Y2xlIG1ldGhvZC4gJyArICdEaWQgeW91IG1lYW4gY29tcG9uZW50V2lsbFVubW91bnQoKT8nLCB0aGlzLmdldE5hbWUoKSB8fCAnQSBjb21wb25lbnQnKSA6IHZvaWQgMDtcbiAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKHR5cGVvZiBpbnN0LmNvbXBvbmVudFdpbGxSZWNpZXZlUHJvcHMgIT09ICdmdW5jdGlvbicsICclcyBoYXMgYSBtZXRob2QgY2FsbGVkICcgKyAnY29tcG9uZW50V2lsbFJlY2lldmVQcm9wcygpLiBEaWQgeW91IG1lYW4gY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcygpPycsIHRoaXMuZ2V0TmFtZSgpIHx8ICdBIGNvbXBvbmVudCcpIDogdm9pZCAwO1xuICAgIH1cblxuICAgIHZhciBpbml0aWFsU3RhdGUgPSBpbnN0LnN0YXRlO1xuICAgIGlmIChpbml0aWFsU3RhdGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgaW5zdC5zdGF0ZSA9IGluaXRpYWxTdGF0ZSA9IG51bGw7XG4gICAgfVxuICAgICEodHlwZW9mIGluaXRpYWxTdGF0ZSA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkoaW5pdGlhbFN0YXRlKSkgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAnJXMuc3RhdGU6IG11c3QgYmUgc2V0IHRvIGFuIG9iamVjdCBvciBudWxsJywgdGhpcy5nZXROYW1lKCkgfHwgJ1JlYWN0Q29tcG9zaXRlQ29tcG9uZW50JykgOiBfcHJvZEludmFyaWFudCgnMTA2JywgdGhpcy5nZXROYW1lKCkgfHwgJ1JlYWN0Q29tcG9zaXRlQ29tcG9uZW50JykgOiB2b2lkIDA7XG5cbiAgICB0aGlzLl9wZW5kaW5nU3RhdGVRdWV1ZSA9IG51bGw7XG4gICAgdGhpcy5fcGVuZGluZ1JlcGxhY2VTdGF0ZSA9IGZhbHNlO1xuICAgIHRoaXMuX3BlbmRpbmdGb3JjZVVwZGF0ZSA9IGZhbHNlO1xuXG4gICAgdmFyIG1hcmt1cDtcbiAgICBpZiAoaW5zdC51bnN0YWJsZV9oYW5kbGVFcnJvcikge1xuICAgICAgbWFya3VwID0gdGhpcy5wZXJmb3JtSW5pdGlhbE1vdW50V2l0aEVycm9ySGFuZGxpbmcocmVuZGVyZWRFbGVtZW50LCBob3N0UGFyZW50LCBob3N0Q29udGFpbmVySW5mbywgdHJhbnNhY3Rpb24sIGNvbnRleHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBtYXJrdXAgPSB0aGlzLnBlcmZvcm1Jbml0aWFsTW91bnQocmVuZGVyZWRFbGVtZW50LCBob3N0UGFyZW50LCBob3N0Q29udGFpbmVySW5mbywgdHJhbnNhY3Rpb24sIGNvbnRleHQpO1xuICAgIH1cblxuICAgIGlmIChpbnN0LmNvbXBvbmVudERpZE1vdW50KSB7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICB0cmFuc2FjdGlvbi5nZXRSZWFjdE1vdW50UmVhZHkoKS5lbnF1ZXVlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBtZWFzdXJlTGlmZUN5Y2xlUGVyZihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5zdC5jb21wb25lbnREaWRNb3VudCgpO1xuICAgICAgICAgIH0sIF90aGlzLl9kZWJ1Z0lELCAnY29tcG9uZW50RGlkTW91bnQnKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0cmFuc2FjdGlvbi5nZXRSZWFjdE1vdW50UmVhZHkoKS5lbnF1ZXVlKGluc3QuY29tcG9uZW50RGlkTW91bnQsIGluc3QpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtYXJrdXA7XG4gIH0sXG5cbiAgX2NvbnN0cnVjdENvbXBvbmVudDogZnVuY3Rpb24gKGRvQ29uc3RydWN0LCBwdWJsaWNQcm9wcywgcHVibGljQ29udGV4dCwgdXBkYXRlUXVldWUpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgUmVhY3RDdXJyZW50T3duZXIuY3VycmVudCA9IHRoaXM7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29uc3RydWN0Q29tcG9uZW50V2l0aG91dE93bmVyKGRvQ29uc3RydWN0LCBwdWJsaWNQcm9wcywgcHVibGljQ29udGV4dCwgdXBkYXRlUXVldWUpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50T3duZXIuY3VycmVudCA9IG51bGw7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLl9jb25zdHJ1Y3RDb21wb25lbnRXaXRob3V0T3duZXIoZG9Db25zdHJ1Y3QsIHB1YmxpY1Byb3BzLCBwdWJsaWNDb250ZXh0LCB1cGRhdGVRdWV1ZSk7XG4gICAgfVxuICB9LFxuXG4gIF9jb25zdHJ1Y3RDb21wb25lbnRXaXRob3V0T3duZXI6IGZ1bmN0aW9uIChkb0NvbnN0cnVjdCwgcHVibGljUHJvcHMsIHB1YmxpY0NvbnRleHQsIHVwZGF0ZVF1ZXVlKSB7XG4gICAgdmFyIENvbXBvbmVudCA9IHRoaXMuX2N1cnJlbnRFbGVtZW50LnR5cGU7XG5cbiAgICBpZiAoZG9Db25zdHJ1Y3QpIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIHJldHVybiBtZWFzdXJlTGlmZUN5Y2xlUGVyZihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBDb21wb25lbnQocHVibGljUHJvcHMsIHB1YmxpY0NvbnRleHQsIHVwZGF0ZVF1ZXVlKTtcbiAgICAgICAgfSwgdGhpcy5fZGVidWdJRCwgJ2N0b3InKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBuZXcgQ29tcG9uZW50KHB1YmxpY1Byb3BzLCBwdWJsaWNDb250ZXh0LCB1cGRhdGVRdWV1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVGhpcyBjYW4gc3RpbGwgYmUgYW4gaW5zdGFuY2UgaW4gY2FzZSBvZiBmYWN0b3J5IGNvbXBvbmVudHNcbiAgICAvLyBidXQgd2UnbGwgY291bnQgdGhpcyBhcyB0aW1lIHNwZW50IHJlbmRlcmluZyBhcyB0aGUgbW9yZSBjb21tb24gY2FzZS5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgcmV0dXJuIG1lYXN1cmVMaWZlQ3ljbGVQZXJmKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIENvbXBvbmVudChwdWJsaWNQcm9wcywgcHVibGljQ29udGV4dCwgdXBkYXRlUXVldWUpO1xuICAgICAgfSwgdGhpcy5fZGVidWdJRCwgJ3JlbmRlcicpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gQ29tcG9uZW50KHB1YmxpY1Byb3BzLCBwdWJsaWNDb250ZXh0LCB1cGRhdGVRdWV1ZSk7XG4gICAgfVxuICB9LFxuXG4gIHBlcmZvcm1Jbml0aWFsTW91bnRXaXRoRXJyb3JIYW5kbGluZzogZnVuY3Rpb24gKHJlbmRlcmVkRWxlbWVudCwgaG9zdFBhcmVudCwgaG9zdENvbnRhaW5lckluZm8sIHRyYW5zYWN0aW9uLCBjb250ZXh0KSB7XG4gICAgdmFyIG1hcmt1cDtcbiAgICB2YXIgY2hlY2twb2ludCA9IHRyYW5zYWN0aW9uLmNoZWNrcG9pbnQoKTtcbiAgICB0cnkge1xuICAgICAgbWFya3VwID0gdGhpcy5wZXJmb3JtSW5pdGlhbE1vdW50KHJlbmRlcmVkRWxlbWVudCwgaG9zdFBhcmVudCwgaG9zdENvbnRhaW5lckluZm8sIHRyYW5zYWN0aW9uLCBjb250ZXh0KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBSb2xsIGJhY2sgdG8gY2hlY2twb2ludCwgaGFuZGxlIGVycm9yICh3aGljaCBtYXkgYWRkIGl0ZW1zIHRvIHRoZSB0cmFuc2FjdGlvbiksIGFuZCB0YWtlIGEgbmV3IGNoZWNrcG9pbnRcbiAgICAgIHRyYW5zYWN0aW9uLnJvbGxiYWNrKGNoZWNrcG9pbnQpO1xuICAgICAgdGhpcy5faW5zdGFuY2UudW5zdGFibGVfaGFuZGxlRXJyb3IoZSk7XG4gICAgICBpZiAodGhpcy5fcGVuZGluZ1N0YXRlUXVldWUpIHtcbiAgICAgICAgdGhpcy5faW5zdGFuY2Uuc3RhdGUgPSB0aGlzLl9wcm9jZXNzUGVuZGluZ1N0YXRlKHRoaXMuX2luc3RhbmNlLnByb3BzLCB0aGlzLl9pbnN0YW5jZS5jb250ZXh0KTtcbiAgICAgIH1cbiAgICAgIGNoZWNrcG9pbnQgPSB0cmFuc2FjdGlvbi5jaGVja3BvaW50KCk7XG5cbiAgICAgIHRoaXMuX3JlbmRlcmVkQ29tcG9uZW50LnVubW91bnRDb21wb25lbnQodHJ1ZSk7XG4gICAgICB0cmFuc2FjdGlvbi5yb2xsYmFjayhjaGVja3BvaW50KTtcblxuICAgICAgLy8gVHJ5IGFnYWluIC0gd2UndmUgaW5mb3JtZWQgdGhlIGNvbXBvbmVudCBhYm91dCB0aGUgZXJyb3IsIHNvIHRoZXkgY2FuIHJlbmRlciBhbiBlcnJvciBtZXNzYWdlIHRoaXMgdGltZS5cbiAgICAgIC8vIElmIHRoaXMgdGhyb3dzIGFnYWluLCB0aGUgZXJyb3Igd2lsbCBidWJibGUgdXAgKGFuZCBjYW4gYmUgY2F1Z2h0IGJ5IGEgaGlnaGVyIGVycm9yIGJvdW5kYXJ5KS5cbiAgICAgIG1hcmt1cCA9IHRoaXMucGVyZm9ybUluaXRpYWxNb3VudChyZW5kZXJlZEVsZW1lbnQsIGhvc3RQYXJlbnQsIGhvc3RDb250YWluZXJJbmZvLCB0cmFuc2FjdGlvbiwgY29udGV4dCk7XG4gICAgfVxuICAgIHJldHVybiBtYXJrdXA7XG4gIH0sXG5cbiAgcGVyZm9ybUluaXRpYWxNb3VudDogZnVuY3Rpb24gKHJlbmRlcmVkRWxlbWVudCwgaG9zdFBhcmVudCwgaG9zdENvbnRhaW5lckluZm8sIHRyYW5zYWN0aW9uLCBjb250ZXh0KSB7XG4gICAgdmFyIGluc3QgPSB0aGlzLl9pbnN0YW5jZTtcblxuICAgIHZhciBkZWJ1Z0lEID0gMDtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgZGVidWdJRCA9IHRoaXMuX2RlYnVnSUQ7XG4gICAgfVxuXG4gICAgaWYgKGluc3QuY29tcG9uZW50V2lsbE1vdW50KSB7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICBtZWFzdXJlTGlmZUN5Y2xlUGVyZihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIGluc3QuY29tcG9uZW50V2lsbE1vdW50KCk7XG4gICAgICAgIH0sIGRlYnVnSUQsICdjb21wb25lbnRXaWxsTW91bnQnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGluc3QuY29tcG9uZW50V2lsbE1vdW50KCk7XG4gICAgICB9XG4gICAgICAvLyBXaGVuIG1vdW50aW5nLCBjYWxscyB0byBgc2V0U3RhdGVgIGJ5IGBjb21wb25lbnRXaWxsTW91bnRgIHdpbGwgc2V0XG4gICAgICAvLyBgdGhpcy5fcGVuZGluZ1N0YXRlUXVldWVgIHdpdGhvdXQgdHJpZ2dlcmluZyBhIHJlLXJlbmRlci5cbiAgICAgIGlmICh0aGlzLl9wZW5kaW5nU3RhdGVRdWV1ZSkge1xuICAgICAgICBpbnN0LnN0YXRlID0gdGhpcy5fcHJvY2Vzc1BlbmRpbmdTdGF0ZShpbnN0LnByb3BzLCBpbnN0LmNvbnRleHQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIElmIG5vdCBhIHN0YXRlbGVzcyBjb21wb25lbnQsIHdlIG5vdyByZW5kZXJcbiAgICBpZiAocmVuZGVyZWRFbGVtZW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJlbmRlcmVkRWxlbWVudCA9IHRoaXMuX3JlbmRlclZhbGlkYXRlZENvbXBvbmVudCgpO1xuICAgIH1cblxuICAgIHZhciBub2RlVHlwZSA9IFJlYWN0Tm9kZVR5cGVzLmdldFR5cGUocmVuZGVyZWRFbGVtZW50KTtcbiAgICB0aGlzLl9yZW5kZXJlZE5vZGVUeXBlID0gbm9kZVR5cGU7XG4gICAgdmFyIGNoaWxkID0gdGhpcy5faW5zdGFudGlhdGVSZWFjdENvbXBvbmVudChyZW5kZXJlZEVsZW1lbnQsIG5vZGVUeXBlICE9PSBSZWFjdE5vZGVUeXBlcy5FTVBUWSAvKiBzaG91bGRIYXZlRGVidWdJRCAqL1xuICAgICk7XG4gICAgdGhpcy5fcmVuZGVyZWRDb21wb25lbnQgPSBjaGlsZDtcblxuICAgIHZhciBtYXJrdXAgPSBSZWFjdFJlY29uY2lsZXIubW91bnRDb21wb25lbnQoY2hpbGQsIHRyYW5zYWN0aW9uLCBob3N0UGFyZW50LCBob3N0Q29udGFpbmVySW5mbywgdGhpcy5fcHJvY2Vzc0NoaWxkQ29udGV4dChjb250ZXh0KSwgZGVidWdJRCk7XG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKGRlYnVnSUQgIT09IDApIHtcbiAgICAgICAgdmFyIGNoaWxkRGVidWdJRHMgPSBjaGlsZC5fZGVidWdJRCAhPT0gMCA/IFtjaGlsZC5fZGVidWdJRF0gOiBbXTtcbiAgICAgICAgUmVhY3RJbnN0cnVtZW50YXRpb24uZGVidWdUb29sLm9uU2V0Q2hpbGRyZW4oZGVidWdJRCwgY2hpbGREZWJ1Z0lEcyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hcmt1cDtcbiAgfSxcblxuICBnZXRIb3N0Tm9kZTogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBSZWFjdFJlY29uY2lsZXIuZ2V0SG9zdE5vZGUodGhpcy5fcmVuZGVyZWRDb21wb25lbnQpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBSZWxlYXNlcyBhbnkgcmVzb3VyY2VzIGFsbG9jYXRlZCBieSBgbW91bnRDb21wb25lbnRgLlxuICAgKlxuICAgKiBAZmluYWxcbiAgICogQGludGVybmFsXG4gICAqL1xuICB1bm1vdW50Q29tcG9uZW50OiBmdW5jdGlvbiAoc2FmZWx5KSB7XG4gICAgaWYgKCF0aGlzLl9yZW5kZXJlZENvbXBvbmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBpbnN0ID0gdGhpcy5faW5zdGFuY2U7XG5cbiAgICBpZiAoaW5zdC5jb21wb25lbnRXaWxsVW5tb3VudCAmJiAhaW5zdC5fY2FsbGVkQ29tcG9uZW50V2lsbFVubW91bnQpIHtcbiAgICAgIGluc3QuX2NhbGxlZENvbXBvbmVudFdpbGxVbm1vdW50ID0gdHJ1ZTtcblxuICAgICAgaWYgKHNhZmVseSkge1xuICAgICAgICB2YXIgbmFtZSA9IHRoaXMuZ2V0TmFtZSgpICsgJy5jb21wb25lbnRXaWxsVW5tb3VudCgpJztcbiAgICAgICAgUmVhY3RFcnJvclV0aWxzLmludm9rZUd1YXJkZWRDYWxsYmFjayhuYW1lLCBpbnN0LmNvbXBvbmVudFdpbGxVbm1vdW50LmJpbmQoaW5zdCkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICBtZWFzdXJlTGlmZUN5Y2xlUGVyZihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5zdC5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuICAgICAgICAgIH0sIHRoaXMuX2RlYnVnSUQsICdjb21wb25lbnRXaWxsVW5tb3VudCcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGluc3QuY29tcG9uZW50V2lsbFVubW91bnQoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLl9yZW5kZXJlZENvbXBvbmVudCkge1xuICAgICAgUmVhY3RSZWNvbmNpbGVyLnVubW91bnRDb21wb25lbnQodGhpcy5fcmVuZGVyZWRDb21wb25lbnQsIHNhZmVseSk7XG4gICAgICB0aGlzLl9yZW5kZXJlZE5vZGVUeXBlID0gbnVsbDtcbiAgICAgIHRoaXMuX3JlbmRlcmVkQ29tcG9uZW50ID0gbnVsbDtcbiAgICAgIHRoaXMuX2luc3RhbmNlID0gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBSZXNldCBwZW5kaW5nIGZpZWxkc1xuICAgIC8vIEV2ZW4gaWYgdGhpcyBjb21wb25lbnQgaXMgc2NoZWR1bGVkIGZvciBhbm90aGVyIHVwZGF0ZSBpbiBSZWFjdFVwZGF0ZXMsXG4gICAgLy8gaXQgd291bGQgc3RpbGwgYmUgaWdub3JlZCBiZWNhdXNlIHRoZXNlIGZpZWxkcyBhcmUgcmVzZXQuXG4gICAgdGhpcy5fcGVuZGluZ1N0YXRlUXVldWUgPSBudWxsO1xuICAgIHRoaXMuX3BlbmRpbmdSZXBsYWNlU3RhdGUgPSBmYWxzZTtcbiAgICB0aGlzLl9wZW5kaW5nRm9yY2VVcGRhdGUgPSBmYWxzZTtcbiAgICB0aGlzLl9wZW5kaW5nQ2FsbGJhY2tzID0gbnVsbDtcbiAgICB0aGlzLl9wZW5kaW5nRWxlbWVudCA9IG51bGw7XG5cbiAgICAvLyBUaGVzZSBmaWVsZHMgZG8gbm90IHJlYWxseSBuZWVkIHRvIGJlIHJlc2V0IHNpbmNlIHRoaXMgb2JqZWN0IGlzIG5vXG4gICAgLy8gbG9uZ2VyIGFjY2Vzc2libGUuXG4gICAgdGhpcy5fY29udGV4dCA9IG51bGw7XG4gICAgdGhpcy5fcm9vdE5vZGVJRCA9IDA7XG4gICAgdGhpcy5fdG9wTGV2ZWxXcmFwcGVyID0gbnVsbDtcblxuICAgIC8vIERlbGV0ZSB0aGUgcmVmZXJlbmNlIGZyb20gdGhlIGluc3RhbmNlIHRvIHRoaXMgaW50ZXJuYWwgcmVwcmVzZW50YXRpb25cbiAgICAvLyB3aGljaCBhbGxvdyB0aGUgaW50ZXJuYWxzIHRvIGJlIHByb3Blcmx5IGNsZWFuZWQgdXAgZXZlbiBpZiB0aGUgdXNlclxuICAgIC8vIGxlYWtzIGEgcmVmZXJlbmNlIHRvIHRoZSBwdWJsaWMgaW5zdGFuY2UuXG4gICAgUmVhY3RJbnN0YW5jZU1hcC5yZW1vdmUoaW5zdCk7XG5cbiAgICAvLyBTb21lIGV4aXN0aW5nIGNvbXBvbmVudHMgcmVseSBvbiBpbnN0LnByb3BzIGV2ZW4gYWZ0ZXIgdGhleSd2ZSBiZWVuXG4gICAgLy8gZGVzdHJveWVkIChpbiBldmVudCBoYW5kbGVycykuXG4gICAgLy8gVE9ETzogaW5zdC5wcm9wcyA9IG51bGw7XG4gICAgLy8gVE9ETzogaW5zdC5zdGF0ZSA9IG51bGw7XG4gICAgLy8gVE9ETzogaW5zdC5jb250ZXh0ID0gbnVsbDtcbiAgfSxcblxuICAvKipcbiAgICogRmlsdGVycyB0aGUgY29udGV4dCBvYmplY3QgdG8gb25seSBjb250YWluIGtleXMgc3BlY2lmaWVkIGluXG4gICAqIGBjb250ZXh0VHlwZXNgXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBjb250ZXh0XG4gICAqIEByZXR1cm4gez9vYmplY3R9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfbWFza0NvbnRleHQ6IGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gICAgdmFyIENvbXBvbmVudCA9IHRoaXMuX2N1cnJlbnRFbGVtZW50LnR5cGU7XG4gICAgdmFyIGNvbnRleHRUeXBlcyA9IENvbXBvbmVudC5jb250ZXh0VHlwZXM7XG4gICAgaWYgKCFjb250ZXh0VHlwZXMpIHtcbiAgICAgIHJldHVybiBlbXB0eU9iamVjdDtcbiAgICB9XG4gICAgdmFyIG1hc2tlZENvbnRleHQgPSB7fTtcbiAgICBmb3IgKHZhciBjb250ZXh0TmFtZSBpbiBjb250ZXh0VHlwZXMpIHtcbiAgICAgIG1hc2tlZENvbnRleHRbY29udGV4dE5hbWVdID0gY29udGV4dFtjb250ZXh0TmFtZV07XG4gICAgfVxuICAgIHJldHVybiBtYXNrZWRDb250ZXh0O1xuICB9LFxuXG4gIC8qKlxuICAgKiBGaWx0ZXJzIHRoZSBjb250ZXh0IG9iamVjdCB0byBvbmx5IGNvbnRhaW4ga2V5cyBzcGVjaWZpZWQgaW5cbiAgICogYGNvbnRleHRUeXBlc2AsIGFuZCBhc3NlcnRzIHRoYXQgdGhleSBhcmUgdmFsaWQuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBjb250ZXh0XG4gICAqIEByZXR1cm4gez9vYmplY3R9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfcHJvY2Vzc0NvbnRleHQ6IGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gICAgdmFyIG1hc2tlZENvbnRleHQgPSB0aGlzLl9tYXNrQ29udGV4dChjb250ZXh0KTtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgdmFyIENvbXBvbmVudCA9IHRoaXMuX2N1cnJlbnRFbGVtZW50LnR5cGU7XG4gICAgICBpZiAoQ29tcG9uZW50LmNvbnRleHRUeXBlcykge1xuICAgICAgICB0aGlzLl9jaGVja0NvbnRleHRUeXBlcyhDb21wb25lbnQuY29udGV4dFR5cGVzLCBtYXNrZWRDb250ZXh0LCAnY29udGV4dCcpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWFza2VkQ29udGV4dDtcbiAgfSxcblxuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IGN1cnJlbnRDb250ZXh0XG4gICAqIEByZXR1cm4ge29iamVjdH1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9wcm9jZXNzQ2hpbGRDb250ZXh0OiBmdW5jdGlvbiAoY3VycmVudENvbnRleHQpIHtcbiAgICB2YXIgQ29tcG9uZW50ID0gdGhpcy5fY3VycmVudEVsZW1lbnQudHlwZTtcbiAgICB2YXIgaW5zdCA9IHRoaXMuX2luc3RhbmNlO1xuICAgIHZhciBjaGlsZENvbnRleHQ7XG5cbiAgICBpZiAoaW5zdC5nZXRDaGlsZENvbnRleHQpIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIFJlYWN0SW5zdHJ1bWVudGF0aW9uLmRlYnVnVG9vbC5vbkJlZ2luUHJvY2Vzc2luZ0NoaWxkQ29udGV4dCgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNoaWxkQ29udGV4dCA9IGluc3QuZ2V0Q2hpbGRDb250ZXh0KCk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgUmVhY3RJbnN0cnVtZW50YXRpb24uZGVidWdUb29sLm9uRW5kUHJvY2Vzc2luZ0NoaWxkQ29udGV4dCgpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjaGlsZENvbnRleHQgPSBpbnN0LmdldENoaWxkQ29udGV4dCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjaGlsZENvbnRleHQpIHtcbiAgICAgICEodHlwZW9mIENvbXBvbmVudC5jaGlsZENvbnRleHRUeXBlcyA9PT0gJ29iamVjdCcpID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IGludmFyaWFudChmYWxzZSwgJyVzLmdldENoaWxkQ29udGV4dCgpOiBjaGlsZENvbnRleHRUeXBlcyBtdXN0IGJlIGRlZmluZWQgaW4gb3JkZXIgdG8gdXNlIGdldENoaWxkQ29udGV4dCgpLicsIHRoaXMuZ2V0TmFtZSgpIHx8ICdSZWFjdENvbXBvc2l0ZUNvbXBvbmVudCcpIDogX3Byb2RJbnZhcmlhbnQoJzEwNycsIHRoaXMuZ2V0TmFtZSgpIHx8ICdSZWFjdENvbXBvc2l0ZUNvbXBvbmVudCcpIDogdm9pZCAwO1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgdGhpcy5fY2hlY2tDb250ZXh0VHlwZXMoQ29tcG9uZW50LmNoaWxkQ29udGV4dFR5cGVzLCBjaGlsZENvbnRleHQsICdjaGlsZCBjb250ZXh0Jyk7XG4gICAgICB9XG4gICAgICBmb3IgKHZhciBuYW1lIGluIGNoaWxkQ29udGV4dCkge1xuICAgICAgICAhKG5hbWUgaW4gQ29tcG9uZW50LmNoaWxkQ29udGV4dFR5cGVzKSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICclcy5nZXRDaGlsZENvbnRleHQoKToga2V5IFwiJXNcIiBpcyBub3QgZGVmaW5lZCBpbiBjaGlsZENvbnRleHRUeXBlcy4nLCB0aGlzLmdldE5hbWUoKSB8fCAnUmVhY3RDb21wb3NpdGVDb21wb25lbnQnLCBuYW1lKSA6IF9wcm9kSW52YXJpYW50KCcxMDgnLCB0aGlzLmdldE5hbWUoKSB8fCAnUmVhY3RDb21wb3NpdGVDb21wb25lbnQnLCBuYW1lKSA6IHZvaWQgMDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBfYXNzaWduKHt9LCBjdXJyZW50Q29udGV4dCwgY2hpbGRDb250ZXh0KTtcbiAgICB9XG4gICAgcmV0dXJuIGN1cnJlbnRDb250ZXh0O1xuICB9LFxuXG4gIC8qKlxuICAgKiBBc3NlcnQgdGhhdCB0aGUgY29udGV4dCB0eXBlcyBhcmUgdmFsaWRcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IHR5cGVTcGVjcyBNYXAgb2YgY29udGV4dCBmaWVsZCB0byBhIFJlYWN0UHJvcFR5cGVcbiAgICogQHBhcmFtIHtvYmplY3R9IHZhbHVlcyBSdW50aW1lIHZhbHVlcyB0aGF0IG5lZWQgdG8gYmUgdHlwZS1jaGVja2VkXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsb2NhdGlvbiBlLmcuIFwicHJvcFwiLCBcImNvbnRleHRcIiwgXCJjaGlsZCBjb250ZXh0XCJcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jaGVja0NvbnRleHRUeXBlczogZnVuY3Rpb24gKHR5cGVTcGVjcywgdmFsdWVzLCBsb2NhdGlvbikge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBjaGVja1JlYWN0VHlwZVNwZWModHlwZVNwZWNzLCB2YWx1ZXMsIGxvY2F0aW9uLCB0aGlzLmdldE5hbWUoKSwgbnVsbCwgdGhpcy5fZGVidWdJRCk7XG4gICAgfVxuICB9LFxuXG4gIHJlY2VpdmVDb21wb25lbnQ6IGZ1bmN0aW9uIChuZXh0RWxlbWVudCwgdHJhbnNhY3Rpb24sIG5leHRDb250ZXh0KSB7XG4gICAgdmFyIHByZXZFbGVtZW50ID0gdGhpcy5fY3VycmVudEVsZW1lbnQ7XG4gICAgdmFyIHByZXZDb250ZXh0ID0gdGhpcy5fY29udGV4dDtcblxuICAgIHRoaXMuX3BlbmRpbmdFbGVtZW50ID0gbnVsbDtcblxuICAgIHRoaXMudXBkYXRlQ29tcG9uZW50KHRyYW5zYWN0aW9uLCBwcmV2RWxlbWVudCwgbmV4dEVsZW1lbnQsIHByZXZDb250ZXh0LCBuZXh0Q29udGV4dCk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIElmIGFueSBvZiBgX3BlbmRpbmdFbGVtZW50YCwgYF9wZW5kaW5nU3RhdGVRdWV1ZWAsIG9yIGBfcGVuZGluZ0ZvcmNlVXBkYXRlYFxuICAgKiBpcyBzZXQsIHVwZGF0ZSB0aGUgY29tcG9uZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb259IHRyYW5zYWN0aW9uXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcGVyZm9ybVVwZGF0ZUlmTmVjZXNzYXJ5OiBmdW5jdGlvbiAodHJhbnNhY3Rpb24pIHtcbiAgICBpZiAodGhpcy5fcGVuZGluZ0VsZW1lbnQgIT0gbnVsbCkge1xuICAgICAgUmVhY3RSZWNvbmNpbGVyLnJlY2VpdmVDb21wb25lbnQodGhpcywgdGhpcy5fcGVuZGluZ0VsZW1lbnQsIHRyYW5zYWN0aW9uLCB0aGlzLl9jb250ZXh0KTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuX3BlbmRpbmdTdGF0ZVF1ZXVlICE9PSBudWxsIHx8IHRoaXMuX3BlbmRpbmdGb3JjZVVwZGF0ZSkge1xuICAgICAgdGhpcy51cGRhdGVDb21wb25lbnQodHJhbnNhY3Rpb24sIHRoaXMuX2N1cnJlbnRFbGVtZW50LCB0aGlzLl9jdXJyZW50RWxlbWVudCwgdGhpcy5fY29udGV4dCwgdGhpcy5fY29udGV4dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3VwZGF0ZUJhdGNoTnVtYmVyID0gbnVsbDtcbiAgICB9XG4gIH0sXG5cbiAgLyoqXG4gICAqIFBlcmZvcm0gYW4gdXBkYXRlIHRvIGEgbW91bnRlZCBjb21wb25lbnQuIFRoZSBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIGFuZFxuICAgKiBzaG91bGRDb21wb25lbnRVcGRhdGUgbWV0aG9kcyBhcmUgY2FsbGVkLCB0aGVuIChhc3N1bWluZyB0aGUgdXBkYXRlIGlzbid0XG4gICAqIHNraXBwZWQpIHRoZSByZW1haW5pbmcgdXBkYXRlIGxpZmVjeWNsZSBtZXRob2RzIGFyZSBjYWxsZWQgYW5kIHRoZSBET01cbiAgICogcmVwcmVzZW50YXRpb24gaXMgdXBkYXRlZC5cbiAgICpcbiAgICogQnkgZGVmYXVsdCwgdGhpcyBpbXBsZW1lbnRzIFJlYWN0J3MgcmVuZGVyaW5nIGFuZCByZWNvbmNpbGlhdGlvbiBhbGdvcml0aG0uXG4gICAqIFNvcGhpc3RpY2F0ZWQgY2xpZW50cyBtYXkgd2lzaCB0byBvdmVycmlkZSB0aGlzLlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb259IHRyYW5zYWN0aW9uXG4gICAqIEBwYXJhbSB7UmVhY3RFbGVtZW50fSBwcmV2UGFyZW50RWxlbWVudFxuICAgKiBAcGFyYW0ge1JlYWN0RWxlbWVudH0gbmV4dFBhcmVudEVsZW1lbnRcbiAgICogQGludGVybmFsXG4gICAqIEBvdmVycmlkYWJsZVxuICAgKi9cbiAgdXBkYXRlQ29tcG9uZW50OiBmdW5jdGlvbiAodHJhbnNhY3Rpb24sIHByZXZQYXJlbnRFbGVtZW50LCBuZXh0UGFyZW50RWxlbWVudCwgcHJldlVubWFza2VkQ29udGV4dCwgbmV4dFVubWFza2VkQ29udGV4dCkge1xuICAgIHZhciBpbnN0ID0gdGhpcy5faW5zdGFuY2U7XG4gICAgIShpbnN0ICE9IG51bGwpID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IGludmFyaWFudChmYWxzZSwgJ0F0dGVtcHRlZCB0byB1cGRhdGUgY29tcG9uZW50IGAlc2AgdGhhdCBoYXMgYWxyZWFkeSBiZWVuIHVubW91bnRlZCAob3IgZmFpbGVkIHRvIG1vdW50KS4nLCB0aGlzLmdldE5hbWUoKSB8fCAnUmVhY3RDb21wb3NpdGVDb21wb25lbnQnKSA6IF9wcm9kSW52YXJpYW50KCcxMzYnLCB0aGlzLmdldE5hbWUoKSB8fCAnUmVhY3RDb21wb3NpdGVDb21wb25lbnQnKSA6IHZvaWQgMDtcblxuICAgIHZhciB3aWxsUmVjZWl2ZSA9IGZhbHNlO1xuICAgIHZhciBuZXh0Q29udGV4dDtcblxuICAgIC8vIERldGVybWluZSBpZiB0aGUgY29udGV4dCBoYXMgY2hhbmdlZCBvciBub3RcbiAgICBpZiAodGhpcy5fY29udGV4dCA9PT0gbmV4dFVubWFza2VkQ29udGV4dCkge1xuICAgICAgbmV4dENvbnRleHQgPSBpbnN0LmNvbnRleHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5leHRDb250ZXh0ID0gdGhpcy5fcHJvY2Vzc0NvbnRleHQobmV4dFVubWFza2VkQ29udGV4dCk7XG4gICAgICB3aWxsUmVjZWl2ZSA9IHRydWU7XG4gICAgfVxuXG4gICAgdmFyIHByZXZQcm9wcyA9IHByZXZQYXJlbnRFbGVtZW50LnByb3BzO1xuICAgIHZhciBuZXh0UHJvcHMgPSBuZXh0UGFyZW50RWxlbWVudC5wcm9wcztcblxuICAgIC8vIE5vdCBhIHNpbXBsZSBzdGF0ZSB1cGRhdGUgYnV0IGEgcHJvcHMgdXBkYXRlXG4gICAgaWYgKHByZXZQYXJlbnRFbGVtZW50ICE9PSBuZXh0UGFyZW50RWxlbWVudCkge1xuICAgICAgd2lsbFJlY2VpdmUgPSB0cnVlO1xuICAgIH1cblxuICAgIC8vIEFuIHVwZGF0ZSBoZXJlIHdpbGwgc2NoZWR1bGUgYW4gdXBkYXRlIGJ1dCBpbW1lZGlhdGVseSBzZXRcbiAgICAvLyBfcGVuZGluZ1N0YXRlUXVldWUgd2hpY2ggd2lsbCBlbnN1cmUgdGhhdCBhbnkgc3RhdGUgdXBkYXRlcyBnZXRzXG4gICAgLy8gaW1tZWRpYXRlbHkgcmVjb25jaWxlZCBpbnN0ZWFkIG9mIHdhaXRpbmcgZm9yIHRoZSBuZXh0IGJhdGNoLlxuICAgIGlmICh3aWxsUmVjZWl2ZSAmJiBpbnN0LmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMpIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIG1lYXN1cmVMaWZlQ3ljbGVQZXJmKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gaW5zdC5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG5leHRQcm9wcywgbmV4dENvbnRleHQpO1xuICAgICAgICB9LCB0aGlzLl9kZWJ1Z0lELCAnY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcycpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW5zdC5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG5leHRQcm9wcywgbmV4dENvbnRleHQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBuZXh0U3RhdGUgPSB0aGlzLl9wcm9jZXNzUGVuZGluZ1N0YXRlKG5leHRQcm9wcywgbmV4dENvbnRleHQpO1xuICAgIHZhciBzaG91bGRVcGRhdGUgPSB0cnVlO1xuXG4gICAgaWYgKCF0aGlzLl9wZW5kaW5nRm9yY2VVcGRhdGUpIHtcbiAgICAgIGlmIChpbnN0LnNob3VsZENvbXBvbmVudFVwZGF0ZSkge1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgIHNob3VsZFVwZGF0ZSA9IG1lYXN1cmVMaWZlQ3ljbGVQZXJmKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnN0LnNob3VsZENvbXBvbmVudFVwZGF0ZShuZXh0UHJvcHMsIG5leHRTdGF0ZSwgbmV4dENvbnRleHQpO1xuICAgICAgICAgIH0sIHRoaXMuX2RlYnVnSUQsICdzaG91bGRDb21wb25lbnRVcGRhdGUnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzaG91bGRVcGRhdGUgPSBpbnN0LnNob3VsZENvbXBvbmVudFVwZGF0ZShuZXh0UHJvcHMsIG5leHRTdGF0ZSwgbmV4dENvbnRleHQpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodGhpcy5fY29tcG9zaXRlVHlwZSA9PT0gQ29tcG9zaXRlVHlwZXMuUHVyZUNsYXNzKSB7XG4gICAgICAgICAgc2hvdWxkVXBkYXRlID0gIXNoYWxsb3dFcXVhbChwcmV2UHJvcHMsIG5leHRQcm9wcykgfHwgIXNoYWxsb3dFcXVhbChpbnN0LnN0YXRlLCBuZXh0U3RhdGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKHNob3VsZFVwZGF0ZSAhPT0gdW5kZWZpbmVkLCAnJXMuc2hvdWxkQ29tcG9uZW50VXBkYXRlKCk6IFJldHVybmVkIHVuZGVmaW5lZCBpbnN0ZWFkIG9mIGEgJyArICdib29sZWFuIHZhbHVlLiBNYWtlIHN1cmUgdG8gcmV0dXJuIHRydWUgb3IgZmFsc2UuJywgdGhpcy5nZXROYW1lKCkgfHwgJ1JlYWN0Q29tcG9zaXRlQ29tcG9uZW50JykgOiB2b2lkIDA7XG4gICAgfVxuXG4gICAgdGhpcy5fdXBkYXRlQmF0Y2hOdW1iZXIgPSBudWxsO1xuICAgIGlmIChzaG91bGRVcGRhdGUpIHtcbiAgICAgIHRoaXMuX3BlbmRpbmdGb3JjZVVwZGF0ZSA9IGZhbHNlO1xuICAgICAgLy8gV2lsbCBzZXQgYHRoaXMucHJvcHNgLCBgdGhpcy5zdGF0ZWAgYW5kIGB0aGlzLmNvbnRleHRgLlxuICAgICAgdGhpcy5fcGVyZm9ybUNvbXBvbmVudFVwZGF0ZShuZXh0UGFyZW50RWxlbWVudCwgbmV4dFByb3BzLCBuZXh0U3RhdGUsIG5leHRDb250ZXh0LCB0cmFuc2FjdGlvbiwgbmV4dFVubWFza2VkQ29udGV4dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIElmIGl0J3MgZGV0ZXJtaW5lZCB0aGF0IGEgY29tcG9uZW50IHNob3VsZCBub3QgdXBkYXRlLCB3ZSBzdGlsbCB3YW50XG4gICAgICAvLyB0byBzZXQgcHJvcHMgYW5kIHN0YXRlIGJ1dCB3ZSBzaG9ydGN1dCB0aGUgcmVzdCBvZiB0aGUgdXBkYXRlLlxuICAgICAgdGhpcy5fY3VycmVudEVsZW1lbnQgPSBuZXh0UGFyZW50RWxlbWVudDtcbiAgICAgIHRoaXMuX2NvbnRleHQgPSBuZXh0VW5tYXNrZWRDb250ZXh0O1xuICAgICAgaW5zdC5wcm9wcyA9IG5leHRQcm9wcztcbiAgICAgIGluc3Quc3RhdGUgPSBuZXh0U3RhdGU7XG4gICAgICBpbnN0LmNvbnRleHQgPSBuZXh0Q29udGV4dDtcbiAgICB9XG4gIH0sXG5cbiAgX3Byb2Nlc3NQZW5kaW5nU3RhdGU6IGZ1bmN0aW9uIChwcm9wcywgY29udGV4dCkge1xuICAgIHZhciBpbnN0ID0gdGhpcy5faW5zdGFuY2U7XG4gICAgdmFyIHF1ZXVlID0gdGhpcy5fcGVuZGluZ1N0YXRlUXVldWU7XG4gICAgdmFyIHJlcGxhY2UgPSB0aGlzLl9wZW5kaW5nUmVwbGFjZVN0YXRlO1xuICAgIHRoaXMuX3BlbmRpbmdSZXBsYWNlU3RhdGUgPSBmYWxzZTtcbiAgICB0aGlzLl9wZW5kaW5nU3RhdGVRdWV1ZSA9IG51bGw7XG5cbiAgICBpZiAoIXF1ZXVlKSB7XG4gICAgICByZXR1cm4gaW5zdC5zdGF0ZTtcbiAgICB9XG5cbiAgICBpZiAocmVwbGFjZSAmJiBxdWV1ZS5sZW5ndGggPT09IDEpIHtcbiAgICAgIHJldHVybiBxdWV1ZVswXTtcbiAgICB9XG5cbiAgICB2YXIgbmV4dFN0YXRlID0gX2Fzc2lnbih7fSwgcmVwbGFjZSA/IHF1ZXVlWzBdIDogaW5zdC5zdGF0ZSk7XG4gICAgZm9yICh2YXIgaSA9IHJlcGxhY2UgPyAxIDogMDsgaSA8IHF1ZXVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcGFydGlhbCA9IHF1ZXVlW2ldO1xuICAgICAgX2Fzc2lnbihuZXh0U3RhdGUsIHR5cGVvZiBwYXJ0aWFsID09PSAnZnVuY3Rpb24nID8gcGFydGlhbC5jYWxsKGluc3QsIG5leHRTdGF0ZSwgcHJvcHMsIGNvbnRleHQpIDogcGFydGlhbCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5leHRTdGF0ZTtcbiAgfSxcblxuICAvKipcbiAgICogTWVyZ2VzIG5ldyBwcm9wcyBhbmQgc3RhdGUsIG5vdGlmaWVzIGRlbGVnYXRlIG1ldGhvZHMgb2YgdXBkYXRlIGFuZFxuICAgKiBwZXJmb3JtcyB1cGRhdGUuXG4gICAqXG4gICAqIEBwYXJhbSB7UmVhY3RFbGVtZW50fSBuZXh0RWxlbWVudCBOZXh0IGVsZW1lbnRcbiAgICogQHBhcmFtIHtvYmplY3R9IG5leHRQcm9wcyBOZXh0IHB1YmxpYyBvYmplY3QgdG8gc2V0IGFzIHByb3BlcnRpZXMuXG4gICAqIEBwYXJhbSB7P29iamVjdH0gbmV4dFN0YXRlIE5leHQgb2JqZWN0IHRvIHNldCBhcyBzdGF0ZS5cbiAgICogQHBhcmFtIHs/b2JqZWN0fSBuZXh0Q29udGV4dCBOZXh0IHB1YmxpYyBvYmplY3QgdG8gc2V0IGFzIGNvbnRleHQuXG4gICAqIEBwYXJhbSB7UmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvbn0gdHJhbnNhY3Rpb25cbiAgICogQHBhcmFtIHs/b2JqZWN0fSB1bm1hc2tlZENvbnRleHRcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9wZXJmb3JtQ29tcG9uZW50VXBkYXRlOiBmdW5jdGlvbiAobmV4dEVsZW1lbnQsIG5leHRQcm9wcywgbmV4dFN0YXRlLCBuZXh0Q29udGV4dCwgdHJhbnNhY3Rpb24sIHVubWFza2VkQ29udGV4dCkge1xuICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgdmFyIGluc3QgPSB0aGlzLl9pbnN0YW5jZTtcblxuICAgIHZhciBoYXNDb21wb25lbnREaWRVcGRhdGUgPSBCb29sZWFuKGluc3QuY29tcG9uZW50RGlkVXBkYXRlKTtcbiAgICB2YXIgcHJldlByb3BzO1xuICAgIHZhciBwcmV2U3RhdGU7XG4gICAgdmFyIHByZXZDb250ZXh0O1xuICAgIGlmIChoYXNDb21wb25lbnREaWRVcGRhdGUpIHtcbiAgICAgIHByZXZQcm9wcyA9IGluc3QucHJvcHM7XG4gICAgICBwcmV2U3RhdGUgPSBpbnN0LnN0YXRlO1xuICAgICAgcHJldkNvbnRleHQgPSBpbnN0LmNvbnRleHQ7XG4gICAgfVxuXG4gICAgaWYgKGluc3QuY29tcG9uZW50V2lsbFVwZGF0ZSkge1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgbWVhc3VyZUxpZmVDeWNsZVBlcmYoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBpbnN0LmNvbXBvbmVudFdpbGxVcGRhdGUobmV4dFByb3BzLCBuZXh0U3RhdGUsIG5leHRDb250ZXh0KTtcbiAgICAgICAgfSwgdGhpcy5fZGVidWdJRCwgJ2NvbXBvbmVudFdpbGxVcGRhdGUnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGluc3QuY29tcG9uZW50V2lsbFVwZGF0ZShuZXh0UHJvcHMsIG5leHRTdGF0ZSwgbmV4dENvbnRleHQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX2N1cnJlbnRFbGVtZW50ID0gbmV4dEVsZW1lbnQ7XG4gICAgdGhpcy5fY29udGV4dCA9IHVubWFza2VkQ29udGV4dDtcbiAgICBpbnN0LnByb3BzID0gbmV4dFByb3BzO1xuICAgIGluc3Quc3RhdGUgPSBuZXh0U3RhdGU7XG4gICAgaW5zdC5jb250ZXh0ID0gbmV4dENvbnRleHQ7XG5cbiAgICB0aGlzLl91cGRhdGVSZW5kZXJlZENvbXBvbmVudCh0cmFuc2FjdGlvbiwgdW5tYXNrZWRDb250ZXh0KTtcblxuICAgIGlmIChoYXNDb21wb25lbnREaWRVcGRhdGUpIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIHRyYW5zYWN0aW9uLmdldFJlYWN0TW91bnRSZWFkeSgpLmVucXVldWUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIG1lYXN1cmVMaWZlQ3ljbGVQZXJmKGluc3QuY29tcG9uZW50RGlkVXBkYXRlLmJpbmQoaW5zdCwgcHJldlByb3BzLCBwcmV2U3RhdGUsIHByZXZDb250ZXh0KSwgX3RoaXMyLl9kZWJ1Z0lELCAnY29tcG9uZW50RGlkVXBkYXRlJyk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdHJhbnNhY3Rpb24uZ2V0UmVhY3RNb3VudFJlYWR5KCkuZW5xdWV1ZShpbnN0LmNvbXBvbmVudERpZFVwZGF0ZS5iaW5kKGluc3QsIHByZXZQcm9wcywgcHJldlN0YXRlLCBwcmV2Q29udGV4dCksIGluc3QpO1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICAvKipcbiAgICogQ2FsbCB0aGUgY29tcG9uZW50J3MgYHJlbmRlcmAgbWV0aG9kIGFuZCB1cGRhdGUgdGhlIERPTSBhY2NvcmRpbmdseS5cbiAgICpcbiAgICogQHBhcmFtIHtSZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9ufSB0cmFuc2FjdGlvblxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIF91cGRhdGVSZW5kZXJlZENvbXBvbmVudDogZnVuY3Rpb24gKHRyYW5zYWN0aW9uLCBjb250ZXh0KSB7XG4gICAgdmFyIHByZXZDb21wb25lbnRJbnN0YW5jZSA9IHRoaXMuX3JlbmRlcmVkQ29tcG9uZW50O1xuICAgIHZhciBwcmV2UmVuZGVyZWRFbGVtZW50ID0gcHJldkNvbXBvbmVudEluc3RhbmNlLl9jdXJyZW50RWxlbWVudDtcbiAgICB2YXIgbmV4dFJlbmRlcmVkRWxlbWVudCA9IHRoaXMuX3JlbmRlclZhbGlkYXRlZENvbXBvbmVudCgpO1xuXG4gICAgdmFyIGRlYnVnSUQgPSAwO1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBkZWJ1Z0lEID0gdGhpcy5fZGVidWdJRDtcbiAgICB9XG5cbiAgICBpZiAoc2hvdWxkVXBkYXRlUmVhY3RDb21wb25lbnQocHJldlJlbmRlcmVkRWxlbWVudCwgbmV4dFJlbmRlcmVkRWxlbWVudCkpIHtcbiAgICAgIFJlYWN0UmVjb25jaWxlci5yZWNlaXZlQ29tcG9uZW50KHByZXZDb21wb25lbnRJbnN0YW5jZSwgbmV4dFJlbmRlcmVkRWxlbWVudCwgdHJhbnNhY3Rpb24sIHRoaXMuX3Byb2Nlc3NDaGlsZENvbnRleHQoY29udGV4dCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgb2xkSG9zdE5vZGUgPSBSZWFjdFJlY29uY2lsZXIuZ2V0SG9zdE5vZGUocHJldkNvbXBvbmVudEluc3RhbmNlKTtcbiAgICAgIFJlYWN0UmVjb25jaWxlci51bm1vdW50Q29tcG9uZW50KHByZXZDb21wb25lbnRJbnN0YW5jZSwgZmFsc2UpO1xuXG4gICAgICB2YXIgbm9kZVR5cGUgPSBSZWFjdE5vZGVUeXBlcy5nZXRUeXBlKG5leHRSZW5kZXJlZEVsZW1lbnQpO1xuICAgICAgdGhpcy5fcmVuZGVyZWROb2RlVHlwZSA9IG5vZGVUeXBlO1xuICAgICAgdmFyIGNoaWxkID0gdGhpcy5faW5zdGFudGlhdGVSZWFjdENvbXBvbmVudChuZXh0UmVuZGVyZWRFbGVtZW50LCBub2RlVHlwZSAhPT0gUmVhY3ROb2RlVHlwZXMuRU1QVFkgLyogc2hvdWxkSGF2ZURlYnVnSUQgKi9cbiAgICAgICk7XG4gICAgICB0aGlzLl9yZW5kZXJlZENvbXBvbmVudCA9IGNoaWxkO1xuXG4gICAgICB2YXIgbmV4dE1hcmt1cCA9IFJlYWN0UmVjb25jaWxlci5tb3VudENvbXBvbmVudChjaGlsZCwgdHJhbnNhY3Rpb24sIHRoaXMuX2hvc3RQYXJlbnQsIHRoaXMuX2hvc3RDb250YWluZXJJbmZvLCB0aGlzLl9wcm9jZXNzQ2hpbGRDb250ZXh0KGNvbnRleHQpLCBkZWJ1Z0lEKTtcblxuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgaWYgKGRlYnVnSUQgIT09IDApIHtcbiAgICAgICAgICB2YXIgY2hpbGREZWJ1Z0lEcyA9IGNoaWxkLl9kZWJ1Z0lEICE9PSAwID8gW2NoaWxkLl9kZWJ1Z0lEXSA6IFtdO1xuICAgICAgICAgIFJlYWN0SW5zdHJ1bWVudGF0aW9uLmRlYnVnVG9vbC5vblNldENoaWxkcmVuKGRlYnVnSUQsIGNoaWxkRGVidWdJRHMpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX3JlcGxhY2VOb2RlV2l0aE1hcmt1cChvbGRIb3N0Tm9kZSwgbmV4dE1hcmt1cCwgcHJldkNvbXBvbmVudEluc3RhbmNlKTtcbiAgICB9XG4gIH0sXG5cbiAgLyoqXG4gICAqIE92ZXJyaWRkZW4gaW4gc2hhbGxvdyByZW5kZXJpbmcuXG4gICAqXG4gICAqIEBwcm90ZWN0ZWRcbiAgICovXG4gIF9yZXBsYWNlTm9kZVdpdGhNYXJrdXA6IGZ1bmN0aW9uIChvbGRIb3N0Tm9kZSwgbmV4dE1hcmt1cCwgcHJldkluc3RhbmNlKSB7XG4gICAgUmVhY3RDb21wb25lbnRFbnZpcm9ubWVudC5yZXBsYWNlTm9kZVdpdGhNYXJrdXAob2xkSG9zdE5vZGUsIG5leHRNYXJrdXAsIHByZXZJbnN0YW5jZSk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEBwcm90ZWN0ZWRcbiAgICovXG4gIF9yZW5kZXJWYWxpZGF0ZWRDb21wb25lbnRXaXRob3V0T3duZXJPckNvbnRleHQ6IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgaW5zdCA9IHRoaXMuX2luc3RhbmNlO1xuICAgIHZhciByZW5kZXJlZEVsZW1lbnQ7XG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgcmVuZGVyZWRFbGVtZW50ID0gbWVhc3VyZUxpZmVDeWNsZVBlcmYoZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gaW5zdC5yZW5kZXIoKTtcbiAgICAgIH0sIHRoaXMuX2RlYnVnSUQsICdyZW5kZXInKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVuZGVyZWRFbGVtZW50ID0gaW5zdC5yZW5kZXIoKTtcbiAgICB9XG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgLy8gV2UgYWxsb3cgYXV0by1tb2NrcyB0byBwcm9jZWVkIGFzIGlmIHRoZXkncmUgcmV0dXJuaW5nIG51bGwuXG4gICAgICBpZiAocmVuZGVyZWRFbGVtZW50ID09PSB1bmRlZmluZWQgJiYgaW5zdC5yZW5kZXIuX2lzTW9ja0Z1bmN0aW9uKSB7XG4gICAgICAgIC8vIFRoaXMgaXMgcHJvYmFibHkgYmFkIHByYWN0aWNlLiBDb25zaWRlciB3YXJuaW5nIGhlcmUgYW5kXG4gICAgICAgIC8vIGRlcHJlY2F0aW5nIHRoaXMgY29udmVuaWVuY2UuXG4gICAgICAgIHJlbmRlcmVkRWxlbWVudCA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlbmRlcmVkRWxlbWVudDtcbiAgfSxcblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9yZW5kZXJWYWxpZGF0ZWRDb21wb25lbnQ6IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcmVuZGVyZWRFbGVtZW50O1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nIHx8IHRoaXMuX2NvbXBvc2l0ZVR5cGUgIT09IENvbXBvc2l0ZVR5cGVzLlN0YXRlbGVzc0Z1bmN0aW9uYWwpIHtcbiAgICAgIFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQgPSB0aGlzO1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmVuZGVyZWRFbGVtZW50ID0gdGhpcy5fcmVuZGVyVmFsaWRhdGVkQ29tcG9uZW50V2l0aG91dE93bmVyT3JDb250ZXh0KCk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50ID0gbnVsbDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmVuZGVyZWRFbGVtZW50ID0gdGhpcy5fcmVuZGVyVmFsaWRhdGVkQ29tcG9uZW50V2l0aG91dE93bmVyT3JDb250ZXh0KCk7XG4gICAgfVxuICAgICEoXG4gICAgLy8gVE9ETzogQW4gYGlzVmFsaWROb2RlYCBmdW5jdGlvbiB3b3VsZCBwcm9iYWJseSBiZSBtb3JlIGFwcHJvcHJpYXRlXG4gICAgcmVuZGVyZWRFbGVtZW50ID09PSBudWxsIHx8IHJlbmRlcmVkRWxlbWVudCA9PT0gZmFsc2UgfHwgUmVhY3QuaXNWYWxpZEVsZW1lbnQocmVuZGVyZWRFbGVtZW50KSkgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAnJXMucmVuZGVyKCk6IEEgdmFsaWQgUmVhY3QgZWxlbWVudCAob3IgbnVsbCkgbXVzdCBiZSByZXR1cm5lZC4gWW91IG1heSBoYXZlIHJldHVybmVkIHVuZGVmaW5lZCwgYW4gYXJyYXkgb3Igc29tZSBvdGhlciBpbnZhbGlkIG9iamVjdC4nLCB0aGlzLmdldE5hbWUoKSB8fCAnUmVhY3RDb21wb3NpdGVDb21wb25lbnQnKSA6IF9wcm9kSW52YXJpYW50KCcxMDknLCB0aGlzLmdldE5hbWUoKSB8fCAnUmVhY3RDb21wb3NpdGVDb21wb25lbnQnKSA6IHZvaWQgMDtcblxuICAgIHJldHVybiByZW5kZXJlZEVsZW1lbnQ7XG4gIH0sXG5cbiAgLyoqXG4gICAqIExhemlseSBhbGxvY2F0ZXMgdGhlIHJlZnMgb2JqZWN0IGFuZCBzdG9yZXMgYGNvbXBvbmVudGAgYXMgYHJlZmAuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByZWYgUmVmZXJlbmNlIG5hbWUuXG4gICAqIEBwYXJhbSB7Y29tcG9uZW50fSBjb21wb25lbnQgQ29tcG9uZW50IHRvIHN0b3JlIGFzIGByZWZgLlxuICAgKiBAZmluYWxcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGF0dGFjaFJlZjogZnVuY3Rpb24gKHJlZiwgY29tcG9uZW50KSB7XG4gICAgdmFyIGluc3QgPSB0aGlzLmdldFB1YmxpY0luc3RhbmNlKCk7XG4gICAgIShpbnN0ICE9IG51bGwpID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IGludmFyaWFudChmYWxzZSwgJ1N0YXRlbGVzcyBmdW5jdGlvbiBjb21wb25lbnRzIGNhbm5vdCBoYXZlIHJlZnMuJykgOiBfcHJvZEludmFyaWFudCgnMTEwJykgOiB2b2lkIDA7XG4gICAgdmFyIHB1YmxpY0NvbXBvbmVudEluc3RhbmNlID0gY29tcG9uZW50LmdldFB1YmxpY0luc3RhbmNlKCk7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIHZhciBjb21wb25lbnROYW1lID0gY29tcG9uZW50ICYmIGNvbXBvbmVudC5nZXROYW1lID8gY29tcG9uZW50LmdldE5hbWUoKSA6ICdhIGNvbXBvbmVudCc7XG4gICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyhwdWJsaWNDb21wb25lbnRJbnN0YW5jZSAhPSBudWxsIHx8IGNvbXBvbmVudC5fY29tcG9zaXRlVHlwZSAhPT0gQ29tcG9zaXRlVHlwZXMuU3RhdGVsZXNzRnVuY3Rpb25hbCwgJ1N0YXRlbGVzcyBmdW5jdGlvbiBjb21wb25lbnRzIGNhbm5vdCBiZSBnaXZlbiByZWZzICcgKyAnKFNlZSByZWYgXCIlc1wiIGluICVzIGNyZWF0ZWQgYnkgJXMpLiAnICsgJ0F0dGVtcHRzIHRvIGFjY2VzcyB0aGlzIHJlZiB3aWxsIGZhaWwuJywgcmVmLCBjb21wb25lbnROYW1lLCB0aGlzLmdldE5hbWUoKSkgOiB2b2lkIDA7XG4gICAgfVxuICAgIHZhciByZWZzID0gaW5zdC5yZWZzID09PSBlbXB0eU9iamVjdCA/IGluc3QucmVmcyA9IHt9IDogaW5zdC5yZWZzO1xuICAgIHJlZnNbcmVmXSA9IHB1YmxpY0NvbXBvbmVudEluc3RhbmNlO1xuICB9LFxuXG4gIC8qKlxuICAgKiBEZXRhY2hlcyBhIHJlZmVyZW5jZSBuYW1lLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcmVmIE5hbWUgdG8gZGVyZWZlcmVuY2UuXG4gICAqIEBmaW5hbFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZGV0YWNoUmVmOiBmdW5jdGlvbiAocmVmKSB7XG4gICAgdmFyIHJlZnMgPSB0aGlzLmdldFB1YmxpY0luc3RhbmNlKCkucmVmcztcbiAgICBkZWxldGUgcmVmc1tyZWZdO1xuICB9LFxuXG4gIC8qKlxuICAgKiBHZXQgYSB0ZXh0IGRlc2NyaXB0aW9uIG9mIHRoZSBjb21wb25lbnQgdGhhdCBjYW4gYmUgdXNlZCB0byBpZGVudGlmeSBpdFxuICAgKiBpbiBlcnJvciBtZXNzYWdlcy5cbiAgICogQHJldHVybiB7c3RyaW5nfSBUaGUgbmFtZSBvciBudWxsLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGdldE5hbWU6IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdHlwZSA9IHRoaXMuX2N1cnJlbnRFbGVtZW50LnR5cGU7XG4gICAgdmFyIGNvbnN0cnVjdG9yID0gdGhpcy5faW5zdGFuY2UgJiYgdGhpcy5faW5zdGFuY2UuY29uc3RydWN0b3I7XG4gICAgcmV0dXJuIHR5cGUuZGlzcGxheU5hbWUgfHwgY29uc3RydWN0b3IgJiYgY29uc3RydWN0b3IuZGlzcGxheU5hbWUgfHwgdHlwZS5uYW1lIHx8IGNvbnN0cnVjdG9yICYmIGNvbnN0cnVjdG9yLm5hbWUgfHwgbnVsbDtcbiAgfSxcblxuICAvKipcbiAgICogR2V0IHRoZSBwdWJsaWNseSBhY2Nlc3NpYmxlIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgY29tcG9uZW50IC0gaS5lLiB3aGF0XG4gICAqIGlzIGV4cG9zZWQgYnkgcmVmcyBhbmQgcmV0dXJuZWQgYnkgcmVuZGVyLiBDYW4gYmUgbnVsbCBmb3Igc3RhdGVsZXNzXG4gICAqIGNvbXBvbmVudHMuXG4gICAqXG4gICAqIEByZXR1cm4ge1JlYWN0Q29tcG9uZW50fSB0aGUgcHVibGljIGNvbXBvbmVudCBpbnN0YW5jZS5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBnZXRQdWJsaWNJbnN0YW5jZTogZnVuY3Rpb24gKCkge1xuICAgIHZhciBpbnN0ID0gdGhpcy5faW5zdGFuY2U7XG4gICAgaWYgKHRoaXMuX2NvbXBvc2l0ZVR5cGUgPT09IENvbXBvc2l0ZVR5cGVzLlN0YXRlbGVzc0Z1bmN0aW9uYWwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gaW5zdDtcbiAgfSxcblxuICAvLyBTdHViXG4gIF9pbnN0YW50aWF0ZVJlYWN0Q29tcG9uZW50OiBudWxsXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0Q29tcG9zaXRlQ29tcG9uZW50O1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QtZG9tL2xpYi9SZWFjdENvbXBvc2l0ZUNvbXBvbmVudC5qcyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqL1xuXG4vKiBnbG9iYWxzIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXyovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0RE9NQ29tcG9uZW50VHJlZSA9IHJlcXVpcmUoJy4vUmVhY3RET01Db21wb25lbnRUcmVlJyk7XG52YXIgUmVhY3REZWZhdWx0SW5qZWN0aW9uID0gcmVxdWlyZSgnLi9SZWFjdERlZmF1bHRJbmplY3Rpb24nKTtcbnZhciBSZWFjdE1vdW50ID0gcmVxdWlyZSgnLi9SZWFjdE1vdW50Jyk7XG52YXIgUmVhY3RSZWNvbmNpbGVyID0gcmVxdWlyZSgnLi9SZWFjdFJlY29uY2lsZXInKTtcbnZhciBSZWFjdFVwZGF0ZXMgPSByZXF1aXJlKCcuL1JlYWN0VXBkYXRlcycpO1xudmFyIFJlYWN0VmVyc2lvbiA9IHJlcXVpcmUoJy4vUmVhY3RWZXJzaW9uJyk7XG5cbnZhciBmaW5kRE9NTm9kZSA9IHJlcXVpcmUoJy4vZmluZERPTU5vZGUnKTtcbnZhciBnZXRIb3N0Q29tcG9uZW50RnJvbUNvbXBvc2l0ZSA9IHJlcXVpcmUoJy4vZ2V0SG9zdENvbXBvbmVudEZyb21Db21wb3NpdGUnKTtcbnZhciByZW5kZXJTdWJ0cmVlSW50b0NvbnRhaW5lciA9IHJlcXVpcmUoJy4vcmVuZGVyU3VidHJlZUludG9Db250YWluZXInKTtcbnZhciB3YXJuaW5nID0gcmVxdWlyZSgnZmJqcy9saWIvd2FybmluZycpO1xuXG5SZWFjdERlZmF1bHRJbmplY3Rpb24uaW5qZWN0KCk7XG5cbnZhciBSZWFjdERPTSA9IHtcbiAgZmluZERPTU5vZGU6IGZpbmRET01Ob2RlLFxuICByZW5kZXI6IFJlYWN0TW91bnQucmVuZGVyLFxuICB1bm1vdW50Q29tcG9uZW50QXROb2RlOiBSZWFjdE1vdW50LnVubW91bnRDb21wb25lbnRBdE5vZGUsXG4gIHZlcnNpb246IFJlYWN0VmVyc2lvbixcblxuICAvKiBlc2xpbnQtZGlzYWJsZSBjYW1lbGNhc2UgKi9cbiAgdW5zdGFibGVfYmF0Y2hlZFVwZGF0ZXM6IFJlYWN0VXBkYXRlcy5iYXRjaGVkVXBkYXRlcyxcbiAgdW5zdGFibGVfcmVuZGVyU3VidHJlZUludG9Db250YWluZXI6IHJlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyXG4gIC8qIGVzbGludC1lbmFibGUgY2FtZWxjYXNlICovXG59O1xuXG4vLyBJbmplY3QgdGhlIHJ1bnRpbWUgaW50byBhIGRldnRvb2xzIGdsb2JhbCBob29rIHJlZ2FyZGxlc3Mgb2YgYnJvd3Nlci5cbi8vIEFsbG93cyBmb3IgZGVidWdnaW5nIHdoZW4gdGhlIGhvb2sgaXMgaW5qZWN0ZWQgb24gdGhlIHBhZ2UuXG5pZiAodHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXy5pbmplY3QgPT09ICdmdW5jdGlvbicpIHtcbiAgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fLmluamVjdCh7XG4gICAgQ29tcG9uZW50VHJlZToge1xuICAgICAgZ2V0Q2xvc2VzdEluc3RhbmNlRnJvbU5vZGU6IFJlYWN0RE9NQ29tcG9uZW50VHJlZS5nZXRDbG9zZXN0SW5zdGFuY2VGcm9tTm9kZSxcbiAgICAgIGdldE5vZGVGcm9tSW5zdGFuY2U6IGZ1bmN0aW9uIChpbnN0KSB7XG4gICAgICAgIC8vIGluc3QgaXMgYW4gaW50ZXJuYWwgaW5zdGFuY2UgKGJ1dCBjb3VsZCBiZSBhIGNvbXBvc2l0ZSlcbiAgICAgICAgaWYgKGluc3QuX3JlbmRlcmVkQ29tcG9uZW50KSB7XG4gICAgICAgICAgaW5zdCA9IGdldEhvc3RDb21wb25lbnRGcm9tQ29tcG9zaXRlKGluc3QpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpbnN0KSB7XG4gICAgICAgICAgcmV0dXJuIFJlYWN0RE9NQ29tcG9uZW50VHJlZS5nZXROb2RlRnJvbUluc3RhbmNlKGluc3QpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBNb3VudDogUmVhY3RNb3VudCxcbiAgICBSZWNvbmNpbGVyOiBSZWFjdFJlY29uY2lsZXJcbiAgfSk7XG59XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHZhciBFeGVjdXRpb25FbnZpcm9ubWVudCA9IHJlcXVpcmUoJ2ZianMvbGliL0V4ZWN1dGlvbkVudmlyb25tZW50Jyk7XG4gIGlmIChFeGVjdXRpb25FbnZpcm9ubWVudC5jYW5Vc2VET00gJiYgd2luZG93LnRvcCA9PT0gd2luZG93LnNlbGYpIHtcbiAgICAvLyBGaXJzdCBjaGVjayBpZiBkZXZ0b29scyBpcyBub3QgaW5zdGFsbGVkXG4gICAgaWYgKHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAvLyBJZiB3ZSdyZSBpbiBDaHJvbWUgb3IgRmlyZWZveCwgcHJvdmlkZSBhIGRvd25sb2FkIGxpbmsgaWYgbm90IGluc3RhbGxlZC5cbiAgICAgIGlmIChuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoJ0Nocm9tZScpID4gLTEgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCdFZGdlJykgPT09IC0xIHx8IG5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZignRmlyZWZveCcpID4gLTEpIHtcbiAgICAgICAgLy8gRmlyZWZveCBkb2VzIG5vdCBoYXZlIHRoZSBpc3N1ZSB3aXRoIGRldnRvb2xzIGxvYWRlZCBvdmVyIGZpbGU6Ly9cbiAgICAgICAgdmFyIHNob3dGaWxlVXJsTWVzc2FnZSA9IHdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbC5pbmRleE9mKCdodHRwJykgPT09IC0xICYmIG5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZignRmlyZWZveCcpID09PSAtMTtcbiAgICAgICAgY29uc29sZS5kZWJ1ZygnRG93bmxvYWQgdGhlIFJlYWN0IERldlRvb2xzICcgKyAoc2hvd0ZpbGVVcmxNZXNzYWdlID8gJ2FuZCB1c2UgYW4gSFRUUCBzZXJ2ZXIgKGluc3RlYWQgb2YgYSBmaWxlOiBVUkwpICcgOiAnJykgKyAnZm9yIGEgYmV0dGVyIGRldmVsb3BtZW50IGV4cGVyaWVuY2U6ICcgKyAnaHR0cHM6Ly9mYi5tZS9yZWFjdC1kZXZ0b29scycpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciB0ZXN0RnVuYyA9IGZ1bmN0aW9uIHRlc3RGbigpIHt9O1xuICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKCh0ZXN0RnVuYy5uYW1lIHx8IHRlc3RGdW5jLnRvU3RyaW5nKCkpLmluZGV4T2YoJ3Rlc3RGbicpICE9PSAtMSwgXCJJdCBsb29rcyBsaWtlIHlvdSdyZSB1c2luZyBhIG1pbmlmaWVkIGNvcHkgb2YgdGhlIGRldmVsb3BtZW50IGJ1aWxkIFwiICsgJ29mIFJlYWN0LiBXaGVuIGRlcGxveWluZyBSZWFjdCBhcHBzIHRvIHByb2R1Y3Rpb24sIG1ha2Ugc3VyZSB0byB1c2UgJyArICd0aGUgcHJvZHVjdGlvbiBidWlsZCB3aGljaCBza2lwcyBkZXZlbG9wbWVudCB3YXJuaW5ncyBhbmQgaXMgZmFzdGVyLiAnICsgJ1NlZSBodHRwczovL2ZiLm1lL3JlYWN0LW1pbmlmaWNhdGlvbiBmb3IgbW9yZSBkZXRhaWxzLicpIDogdm9pZCAwO1xuXG4gICAgLy8gSWYgd2UncmUgaW4gSUU4LCBjaGVjayB0byBzZWUgaWYgd2UgYXJlIGluIGNvbXBhdGliaWxpdHkgbW9kZSBhbmQgcHJvdmlkZVxuICAgIC8vIGluZm9ybWF0aW9uIG9uIHByZXZlbnRpbmcgY29tcGF0aWJpbGl0eSBtb2RlXG4gICAgdmFyIGllQ29tcGF0aWJpbGl0eU1vZGUgPSBkb2N1bWVudC5kb2N1bWVudE1vZGUgJiYgZG9jdW1lbnQuZG9jdW1lbnRNb2RlIDwgODtcblxuICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKCFpZUNvbXBhdGliaWxpdHlNb2RlLCAnSW50ZXJuZXQgRXhwbG9yZXIgaXMgcnVubmluZyBpbiBjb21wYXRpYmlsaXR5IG1vZGU7IHBsZWFzZSBhZGQgdGhlICcgKyAnZm9sbG93aW5nIHRhZyB0byB5b3VyIEhUTUwgdG8gcHJldmVudCB0aGlzIGZyb20gaGFwcGVuaW5nOiAnICsgJzxtZXRhIGh0dHAtZXF1aXY9XCJYLVVBLUNvbXBhdGlibGVcIiBjb250ZW50PVwiSUU9ZWRnZVwiIC8+JykgOiB2b2lkIDA7XG5cbiAgICB2YXIgZXhwZWN0ZWRGZWF0dXJlcyA9IFtcbiAgICAvLyBzaGltc1xuICAgIEFycmF5LmlzQXJyYXksIEFycmF5LnByb3RvdHlwZS5ldmVyeSwgQXJyYXkucHJvdG90eXBlLmZvckVhY2gsIEFycmF5LnByb3RvdHlwZS5pbmRleE9mLCBBcnJheS5wcm90b3R5cGUubWFwLCBEYXRlLm5vdywgRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQsIE9iamVjdC5rZXlzLCBTdHJpbmcucHJvdG90eXBlLnRyaW1dO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBleHBlY3RlZEZlYXR1cmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoIWV4cGVjdGVkRmVhdHVyZXNbaV0pIHtcbiAgICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcoZmFsc2UsICdPbmUgb3IgbW9yZSBFUzUgc2hpbXMgZXhwZWN0ZWQgYnkgUmVhY3QgYXJlIG5vdCBhdmFpbGFibGU6ICcgKyAnaHR0cHM6Ly9mYi5tZS9yZWFjdC13YXJuaW5nLXBvbHlmaWxscycpIDogdm9pZCAwO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgdmFyIFJlYWN0SW5zdHJ1bWVudGF0aW9uID0gcmVxdWlyZSgnLi9SZWFjdEluc3RydW1lbnRhdGlvbicpO1xuICB2YXIgUmVhY3RET01Vbmtub3duUHJvcGVydHlIb29rID0gcmVxdWlyZSgnLi9SZWFjdERPTVVua25vd25Qcm9wZXJ0eUhvb2snKTtcbiAgdmFyIFJlYWN0RE9NTnVsbElucHV0VmFsdWVQcm9wSG9vayA9IHJlcXVpcmUoJy4vUmVhY3RET01OdWxsSW5wdXRWYWx1ZVByb3BIb29rJyk7XG4gIHZhciBSZWFjdERPTUludmFsaWRBUklBSG9vayA9IHJlcXVpcmUoJy4vUmVhY3RET01JbnZhbGlkQVJJQUhvb2snKTtcblxuICBSZWFjdEluc3RydW1lbnRhdGlvbi5kZWJ1Z1Rvb2wuYWRkSG9vayhSZWFjdERPTVVua25vd25Qcm9wZXJ0eUhvb2spO1xuICBSZWFjdEluc3RydW1lbnRhdGlvbi5kZWJ1Z1Rvb2wuYWRkSG9vayhSZWFjdERPTU51bGxJbnB1dFZhbHVlUHJvcEhvb2spO1xuICBSZWFjdEluc3RydW1lbnRhdGlvbi5kZWJ1Z1Rvb2wuYWRkSG9vayhSZWFjdERPTUludmFsaWRBUklBSG9vayk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RET007XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1kb20vbGliL1JlYWN0RE9NLmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cbi8qIGdsb2JhbCBoYXNPd25Qcm9wZXJ0eTp0cnVlICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIF9wcm9kSW52YXJpYW50ID0gcmVxdWlyZSgnLi9yZWFjdFByb2RJbnZhcmlhbnQnKSxcbiAgICBfYXNzaWduID0gcmVxdWlyZSgnb2JqZWN0LWFzc2lnbicpO1xuXG52YXIgQXV0b0ZvY3VzVXRpbHMgPSByZXF1aXJlKCcuL0F1dG9Gb2N1c1V0aWxzJyk7XG52YXIgQ1NTUHJvcGVydHlPcGVyYXRpb25zID0gcmVxdWlyZSgnLi9DU1NQcm9wZXJ0eU9wZXJhdGlvbnMnKTtcbnZhciBET01MYXp5VHJlZSA9IHJlcXVpcmUoJy4vRE9NTGF6eVRyZWUnKTtcbnZhciBET01OYW1lc3BhY2VzID0gcmVxdWlyZSgnLi9ET01OYW1lc3BhY2VzJyk7XG52YXIgRE9NUHJvcGVydHkgPSByZXF1aXJlKCcuL0RPTVByb3BlcnR5Jyk7XG52YXIgRE9NUHJvcGVydHlPcGVyYXRpb25zID0gcmVxdWlyZSgnLi9ET01Qcm9wZXJ0eU9wZXJhdGlvbnMnKTtcbnZhciBFdmVudFBsdWdpbkh1YiA9IHJlcXVpcmUoJy4vRXZlbnRQbHVnaW5IdWInKTtcbnZhciBFdmVudFBsdWdpblJlZ2lzdHJ5ID0gcmVxdWlyZSgnLi9FdmVudFBsdWdpblJlZ2lzdHJ5Jyk7XG52YXIgUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnLi9SZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXInKTtcbnZhciBSZWFjdERPTUNvbXBvbmVudEZsYWdzID0gcmVxdWlyZSgnLi9SZWFjdERPTUNvbXBvbmVudEZsYWdzJyk7XG52YXIgUmVhY3RET01Db21wb25lbnRUcmVlID0gcmVxdWlyZSgnLi9SZWFjdERPTUNvbXBvbmVudFRyZWUnKTtcbnZhciBSZWFjdERPTUlucHV0ID0gcmVxdWlyZSgnLi9SZWFjdERPTUlucHV0Jyk7XG52YXIgUmVhY3RET01PcHRpb24gPSByZXF1aXJlKCcuL1JlYWN0RE9NT3B0aW9uJyk7XG52YXIgUmVhY3RET01TZWxlY3QgPSByZXF1aXJlKCcuL1JlYWN0RE9NU2VsZWN0Jyk7XG52YXIgUmVhY3RET01UZXh0YXJlYSA9IHJlcXVpcmUoJy4vUmVhY3RET01UZXh0YXJlYScpO1xudmFyIFJlYWN0SW5zdHJ1bWVudGF0aW9uID0gcmVxdWlyZSgnLi9SZWFjdEluc3RydW1lbnRhdGlvbicpO1xudmFyIFJlYWN0TXVsdGlDaGlsZCA9IHJlcXVpcmUoJy4vUmVhY3RNdWx0aUNoaWxkJyk7XG52YXIgUmVhY3RTZXJ2ZXJSZW5kZXJpbmdUcmFuc2FjdGlvbiA9IHJlcXVpcmUoJy4vUmVhY3RTZXJ2ZXJSZW5kZXJpbmdUcmFuc2FjdGlvbicpO1xuXG52YXIgZW1wdHlGdW5jdGlvbiA9IHJlcXVpcmUoJ2ZianMvbGliL2VtcHR5RnVuY3Rpb24nKTtcbnZhciBlc2NhcGVUZXh0Q29udGVudEZvckJyb3dzZXIgPSByZXF1aXJlKCcuL2VzY2FwZVRleHRDb250ZW50Rm9yQnJvd3NlcicpO1xudmFyIGludmFyaWFudCA9IHJlcXVpcmUoJ2ZianMvbGliL2ludmFyaWFudCcpO1xudmFyIGlzRXZlbnRTdXBwb3J0ZWQgPSByZXF1aXJlKCcuL2lzRXZlbnRTdXBwb3J0ZWQnKTtcbnZhciBzaGFsbG93RXF1YWwgPSByZXF1aXJlKCdmYmpzL2xpYi9zaGFsbG93RXF1YWwnKTtcbnZhciBpbnB1dFZhbHVlVHJhY2tpbmcgPSByZXF1aXJlKCcuL2lucHV0VmFsdWVUcmFja2luZycpO1xudmFyIHZhbGlkYXRlRE9NTmVzdGluZyA9IHJlcXVpcmUoJy4vdmFsaWRhdGVET01OZXN0aW5nJyk7XG52YXIgd2FybmluZyA9IHJlcXVpcmUoJ2ZianMvbGliL3dhcm5pbmcnKTtcblxudmFyIEZsYWdzID0gUmVhY3RET01Db21wb25lbnRGbGFncztcbnZhciBkZWxldGVMaXN0ZW5lciA9IEV2ZW50UGx1Z2luSHViLmRlbGV0ZUxpc3RlbmVyO1xudmFyIGdldE5vZGUgPSBSZWFjdERPTUNvbXBvbmVudFRyZWUuZ2V0Tm9kZUZyb21JbnN0YW5jZTtcbnZhciBsaXN0ZW5UbyA9IFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlci5saXN0ZW5UbztcbnZhciByZWdpc3RyYXRpb25OYW1lTW9kdWxlcyA9IEV2ZW50UGx1Z2luUmVnaXN0cnkucmVnaXN0cmF0aW9uTmFtZU1vZHVsZXM7XG5cbi8vIEZvciBxdWlja2x5IG1hdGNoaW5nIGNoaWxkcmVuIHR5cGUsIHRvIHRlc3QgaWYgY2FuIGJlIHRyZWF0ZWQgYXMgY29udGVudC5cbnZhciBDT05URU5UX1RZUEVTID0geyBzdHJpbmc6IHRydWUsIG51bWJlcjogdHJ1ZSB9O1xuXG52YXIgU1RZTEUgPSAnc3R5bGUnO1xudmFyIEhUTUwgPSAnX19odG1sJztcbnZhciBSRVNFUlZFRF9QUk9QUyA9IHtcbiAgY2hpbGRyZW46IG51bGwsXG4gIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MOiBudWxsLFxuICBzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmc6IG51bGxcbn07XG5cbi8vIE5vZGUgdHlwZSBmb3IgZG9jdW1lbnQgZnJhZ21lbnRzIChOb2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREUpLlxudmFyIERPQ19GUkFHTUVOVF9UWVBFID0gMTE7XG5cbmZ1bmN0aW9uIGdldERlY2xhcmF0aW9uRXJyb3JBZGRlbmR1bShpbnRlcm5hbEluc3RhbmNlKSB7XG4gIGlmIChpbnRlcm5hbEluc3RhbmNlKSB7XG4gICAgdmFyIG93bmVyID0gaW50ZXJuYWxJbnN0YW5jZS5fY3VycmVudEVsZW1lbnQuX293bmVyIHx8IG51bGw7XG4gICAgaWYgKG93bmVyKSB7XG4gICAgICB2YXIgbmFtZSA9IG93bmVyLmdldE5hbWUoKTtcbiAgICAgIGlmIChuYW1lKSB7XG4gICAgICAgIHJldHVybiAnIFRoaXMgRE9NIG5vZGUgd2FzIHJlbmRlcmVkIGJ5IGAnICsgbmFtZSArICdgLic7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiAnJztcbn1cblxuZnVuY3Rpb24gZnJpZW5kbHlTdHJpbmdpZnkob2JqKSB7XG4gIGlmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0Jykge1xuICAgIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcbiAgICAgIHJldHVybiAnWycgKyBvYmoubWFwKGZyaWVuZGx5U3RyaW5naWZ5KS5qb2luKCcsICcpICsgJ10nO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgcGFpcnMgPSBbXTtcbiAgICAgIGZvciAodmFyIGtleSBpbiBvYmopIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkpIHtcbiAgICAgICAgICB2YXIga2V5RXNjYXBlZCA9IC9eW2EteiRfXVtcXHckX10qJC9pLnRlc3Qoa2V5KSA/IGtleSA6IEpTT04uc3RyaW5naWZ5KGtleSk7XG4gICAgICAgICAgcGFpcnMucHVzaChrZXlFc2NhcGVkICsgJzogJyArIGZyaWVuZGx5U3RyaW5naWZ5KG9ialtrZXldKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiAneycgKyBwYWlycy5qb2luKCcsICcpICsgJ30nO1xuICAgIH1cbiAgfSBlbHNlIGlmICh0eXBlb2Ygb2JqID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShvYmopO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBvYmogPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gJ1tmdW5jdGlvbiBvYmplY3RdJztcbiAgfVxuICAvLyBEaWZmZXJzIGZyb20gSlNPTi5zdHJpbmdpZnkgaW4gdGhhdCB1bmRlZmluZWQgYmVjYXVzZSB1bmRlZmluZWQgYW5kIHRoYXRcbiAgLy8gaW5mIGFuZCBuYW4gZG9uJ3QgYmVjb21lIG51bGxcbiAgcmV0dXJuIFN0cmluZyhvYmopO1xufVxuXG52YXIgc3R5bGVNdXRhdGlvbldhcm5pbmcgPSB7fTtcblxuZnVuY3Rpb24gY2hlY2tBbmRXYXJuRm9yTXV0YXRlZFN0eWxlKHN0eWxlMSwgc3R5bGUyLCBjb21wb25lbnQpIHtcbiAgaWYgKHN0eWxlMSA9PSBudWxsIHx8IHN0eWxlMiA9PSBudWxsKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChzaGFsbG93RXF1YWwoc3R5bGUxLCBzdHlsZTIpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIGNvbXBvbmVudE5hbWUgPSBjb21wb25lbnQuX3RhZztcbiAgdmFyIG93bmVyID0gY29tcG9uZW50Ll9jdXJyZW50RWxlbWVudC5fb3duZXI7XG4gIHZhciBvd25lck5hbWU7XG4gIGlmIChvd25lcikge1xuICAgIG93bmVyTmFtZSA9IG93bmVyLmdldE5hbWUoKTtcbiAgfVxuXG4gIHZhciBoYXNoID0gb3duZXJOYW1lICsgJ3wnICsgY29tcG9uZW50TmFtZTtcblxuICBpZiAoc3R5bGVNdXRhdGlvbldhcm5pbmcuaGFzT3duUHJvcGVydHkoaGFzaCkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBzdHlsZU11dGF0aW9uV2FybmluZ1toYXNoXSA9IHRydWU7XG5cbiAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcoZmFsc2UsICdgJXNgIHdhcyBwYXNzZWQgYSBzdHlsZSBvYmplY3QgdGhhdCBoYXMgcHJldmlvdXNseSBiZWVuIG11dGF0ZWQuICcgKyAnTXV0YXRpbmcgYHN0eWxlYCBpcyBkZXByZWNhdGVkLiBDb25zaWRlciBjbG9uaW5nIGl0IGJlZm9yZWhhbmQuIENoZWNrICcgKyAndGhlIGByZW5kZXJgICVzLiBQcmV2aW91cyBzdHlsZTogJXMuIE11dGF0ZWQgc3R5bGU6ICVzLicsIGNvbXBvbmVudE5hbWUsIG93bmVyID8gJ29mIGAnICsgb3duZXJOYW1lICsgJ2AnIDogJ3VzaW5nIDwnICsgY29tcG9uZW50TmFtZSArICc+JywgZnJpZW5kbHlTdHJpbmdpZnkoc3R5bGUxKSwgZnJpZW5kbHlTdHJpbmdpZnkoc3R5bGUyKSkgOiB2b2lkIDA7XG59XG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IGNvbXBvbmVudFxuICogQHBhcmFtIHs/b2JqZWN0fSBwcm9wc1xuICovXG5mdW5jdGlvbiBhc3NlcnRWYWxpZFByb3BzKGNvbXBvbmVudCwgcHJvcHMpIHtcbiAgaWYgKCFwcm9wcykge1xuICAgIHJldHVybjtcbiAgfVxuICAvLyBOb3RlIHRoZSB1c2Ugb2YgYD09YCB3aGljaCBjaGVja3MgZm9yIG51bGwgb3IgdW5kZWZpbmVkLlxuICBpZiAodm9pZEVsZW1lbnRUYWdzW2NvbXBvbmVudC5fdGFnXSkge1xuICAgICEocHJvcHMuY2hpbGRyZW4gPT0gbnVsbCAmJiBwcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTCA9PSBudWxsKSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICclcyBpcyBhIHZvaWQgZWxlbWVudCB0YWcgYW5kIG11c3QgbmVpdGhlciBoYXZlIGBjaGlsZHJlbmAgbm9yIHVzZSBgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxgLiVzJywgY29tcG9uZW50Ll90YWcsIGNvbXBvbmVudC5fY3VycmVudEVsZW1lbnQuX293bmVyID8gJyBDaGVjayB0aGUgcmVuZGVyIG1ldGhvZCBvZiAnICsgY29tcG9uZW50Ll9jdXJyZW50RWxlbWVudC5fb3duZXIuZ2V0TmFtZSgpICsgJy4nIDogJycpIDogX3Byb2RJbnZhcmlhbnQoJzEzNycsIGNvbXBvbmVudC5fdGFnLCBjb21wb25lbnQuX2N1cnJlbnRFbGVtZW50Ll9vd25lciA/ICcgQ2hlY2sgdGhlIHJlbmRlciBtZXRob2Qgb2YgJyArIGNvbXBvbmVudC5fY3VycmVudEVsZW1lbnQuX293bmVyLmdldE5hbWUoKSArICcuJyA6ICcnKSA6IHZvaWQgMDtcbiAgfVxuICBpZiAocHJvcHMuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwgIT0gbnVsbCkge1xuICAgICEocHJvcHMuY2hpbGRyZW4gPT0gbnVsbCkgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAnQ2FuIG9ubHkgc2V0IG9uZSBvZiBgY2hpbGRyZW5gIG9yIGBwcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTGAuJykgOiBfcHJvZEludmFyaWFudCgnNjAnKSA6IHZvaWQgMDtcbiAgICAhKHR5cGVvZiBwcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTCA9PT0gJ29iamVjdCcgJiYgSFRNTCBpbiBwcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTCkgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAnYHByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MYCBtdXN0IGJlIGluIHRoZSBmb3JtIGB7X19odG1sOiAuLi59YC4gUGxlYXNlIHZpc2l0IGh0dHBzOi8vZmIubWUvcmVhY3QtaW52YXJpYW50LWRhbmdlcm91c2x5LXNldC1pbm5lci1odG1sIGZvciBtb3JlIGluZm9ybWF0aW9uLicpIDogX3Byb2RJbnZhcmlhbnQoJzYxJykgOiB2b2lkIDA7XG4gIH1cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyhwcm9wcy5pbm5lckhUTUwgPT0gbnVsbCwgJ0RpcmVjdGx5IHNldHRpbmcgcHJvcGVydHkgYGlubmVySFRNTGAgaXMgbm90IHBlcm1pdHRlZC4gJyArICdGb3IgbW9yZSBpbmZvcm1hdGlvbiwgbG9va3VwIGRvY3VtZW50YXRpb24gb24gYGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MYC4nKSA6IHZvaWQgMDtcbiAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyhwcm9wcy5zdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmcgfHwgIXByb3BzLmNvbnRlbnRFZGl0YWJsZSB8fCBwcm9wcy5jaGlsZHJlbiA9PSBudWxsLCAnQSBjb21wb25lbnQgaXMgYGNvbnRlbnRFZGl0YWJsZWAgYW5kIGNvbnRhaW5zIGBjaGlsZHJlbmAgbWFuYWdlZCBieSAnICsgJ1JlYWN0LiBJdCBpcyBub3cgeW91ciByZXNwb25zaWJpbGl0eSB0byBndWFyYW50ZWUgdGhhdCBub25lIG9mICcgKyAndGhvc2Ugbm9kZXMgYXJlIHVuZXhwZWN0ZWRseSBtb2RpZmllZCBvciBkdXBsaWNhdGVkLiBUaGlzIGlzICcgKyAncHJvYmFibHkgbm90IGludGVudGlvbmFsLicpIDogdm9pZCAwO1xuICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKHByb3BzLm9uRm9jdXNJbiA9PSBudWxsICYmIHByb3BzLm9uRm9jdXNPdXQgPT0gbnVsbCwgJ1JlYWN0IHVzZXMgb25Gb2N1cyBhbmQgb25CbHVyIGluc3RlYWQgb2Ygb25Gb2N1c0luIGFuZCBvbkZvY3VzT3V0LiAnICsgJ0FsbCBSZWFjdCBldmVudHMgYXJlIG5vcm1hbGl6ZWQgdG8gYnViYmxlLCBzbyBvbkZvY3VzSW4gYW5kIG9uRm9jdXNPdXQgJyArICdhcmUgbm90IG5lZWRlZC9zdXBwb3J0ZWQgYnkgUmVhY3QuJykgOiB2b2lkIDA7XG4gIH1cbiAgIShwcm9wcy5zdHlsZSA9PSBudWxsIHx8IHR5cGVvZiBwcm9wcy5zdHlsZSA9PT0gJ29iamVjdCcpID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IGludmFyaWFudChmYWxzZSwgJ1RoZSBgc3R5bGVgIHByb3AgZXhwZWN0cyBhIG1hcHBpbmcgZnJvbSBzdHlsZSBwcm9wZXJ0aWVzIHRvIHZhbHVlcywgbm90IGEgc3RyaW5nLiBGb3IgZXhhbXBsZSwgc3R5bGU9e3ttYXJnaW5SaWdodDogc3BhY2luZyArIFxcJ2VtXFwnfX0gd2hlbiB1c2luZyBKU1guJXMnLCBnZXREZWNsYXJhdGlvbkVycm9yQWRkZW5kdW0oY29tcG9uZW50KSkgOiBfcHJvZEludmFyaWFudCgnNjInLCBnZXREZWNsYXJhdGlvbkVycm9yQWRkZW5kdW0oY29tcG9uZW50KSkgOiB2b2lkIDA7XG59XG5cbmZ1bmN0aW9uIGVucXVldWVQdXRMaXN0ZW5lcihpbnN0LCByZWdpc3RyYXRpb25OYW1lLCBsaXN0ZW5lciwgdHJhbnNhY3Rpb24pIHtcbiAgaWYgKHRyYW5zYWN0aW9uIGluc3RhbmNlb2YgUmVhY3RTZXJ2ZXJSZW5kZXJpbmdUcmFuc2FjdGlvbikge1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIC8vIElFOCBoYXMgbm8gQVBJIGZvciBldmVudCBjYXB0dXJpbmcgYW5kIHRoZSBgb25TY3JvbGxgIGV2ZW50IGRvZXNuJ3RcbiAgICAvLyBidWJibGUuXG4gICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcocmVnaXN0cmF0aW9uTmFtZSAhPT0gJ29uU2Nyb2xsJyB8fCBpc0V2ZW50U3VwcG9ydGVkKCdzY3JvbGwnLCB0cnVlKSwgXCJUaGlzIGJyb3dzZXIgZG9lc24ndCBzdXBwb3J0IHRoZSBgb25TY3JvbGxgIGV2ZW50XCIpIDogdm9pZCAwO1xuICB9XG4gIHZhciBjb250YWluZXJJbmZvID0gaW5zdC5faG9zdENvbnRhaW5lckluZm87XG4gIHZhciBpc0RvY3VtZW50RnJhZ21lbnQgPSBjb250YWluZXJJbmZvLl9ub2RlICYmIGNvbnRhaW5lckluZm8uX25vZGUubm9kZVR5cGUgPT09IERPQ19GUkFHTUVOVF9UWVBFO1xuICB2YXIgZG9jID0gaXNEb2N1bWVudEZyYWdtZW50ID8gY29udGFpbmVySW5mby5fbm9kZSA6IGNvbnRhaW5lckluZm8uX293bmVyRG9jdW1lbnQ7XG4gIGxpc3RlblRvKHJlZ2lzdHJhdGlvbk5hbWUsIGRvYyk7XG4gIHRyYW5zYWN0aW9uLmdldFJlYWN0TW91bnRSZWFkeSgpLmVucXVldWUocHV0TGlzdGVuZXIsIHtcbiAgICBpbnN0OiBpbnN0LFxuICAgIHJlZ2lzdHJhdGlvbk5hbWU6IHJlZ2lzdHJhdGlvbk5hbWUsXG4gICAgbGlzdGVuZXI6IGxpc3RlbmVyXG4gIH0pO1xufVxuXG5mdW5jdGlvbiBwdXRMaXN0ZW5lcigpIHtcbiAgdmFyIGxpc3RlbmVyVG9QdXQgPSB0aGlzO1xuICBFdmVudFBsdWdpbkh1Yi5wdXRMaXN0ZW5lcihsaXN0ZW5lclRvUHV0Lmluc3QsIGxpc3RlbmVyVG9QdXQucmVnaXN0cmF0aW9uTmFtZSwgbGlzdGVuZXJUb1B1dC5saXN0ZW5lcik7XG59XG5cbmZ1bmN0aW9uIGlucHV0UG9zdE1vdW50KCkge1xuICB2YXIgaW5zdCA9IHRoaXM7XG4gIFJlYWN0RE9NSW5wdXQucG9zdE1vdW50V3JhcHBlcihpbnN0KTtcbn1cblxuZnVuY3Rpb24gdGV4dGFyZWFQb3N0TW91bnQoKSB7XG4gIHZhciBpbnN0ID0gdGhpcztcbiAgUmVhY3RET01UZXh0YXJlYS5wb3N0TW91bnRXcmFwcGVyKGluc3QpO1xufVxuXG5mdW5jdGlvbiBvcHRpb25Qb3N0TW91bnQoKSB7XG4gIHZhciBpbnN0ID0gdGhpcztcbiAgUmVhY3RET01PcHRpb24ucG9zdE1vdW50V3JhcHBlcihpbnN0KTtcbn1cblxudmFyIHNldEFuZFZhbGlkYXRlQ29udGVudENoaWxkRGV2ID0gZW1wdHlGdW5jdGlvbjtcbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHNldEFuZFZhbGlkYXRlQ29udGVudENoaWxkRGV2ID0gZnVuY3Rpb24gKGNvbnRlbnQpIHtcbiAgICB2YXIgaGFzRXhpc3RpbmdDb250ZW50ID0gdGhpcy5fY29udGVudERlYnVnSUQgIT0gbnVsbDtcbiAgICB2YXIgZGVidWdJRCA9IHRoaXMuX2RlYnVnSUQ7XG4gICAgLy8gVGhpcyBJRCByZXByZXNlbnRzIHRoZSBpbmxpbmVkIGNoaWxkIHRoYXQgaGFzIG5vIGJhY2tpbmcgaW5zdGFuY2U6XG4gICAgdmFyIGNvbnRlbnREZWJ1Z0lEID0gLWRlYnVnSUQ7XG5cbiAgICBpZiAoY29udGVudCA9PSBudWxsKSB7XG4gICAgICBpZiAoaGFzRXhpc3RpbmdDb250ZW50KSB7XG4gICAgICAgIFJlYWN0SW5zdHJ1bWVudGF0aW9uLmRlYnVnVG9vbC5vblVubW91bnRDb21wb25lbnQodGhpcy5fY29udGVudERlYnVnSUQpO1xuICAgICAgfVxuICAgICAgdGhpcy5fY29udGVudERlYnVnSUQgPSBudWxsO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhbGlkYXRlRE9NTmVzdGluZyhudWxsLCBTdHJpbmcoY29udGVudCksIHRoaXMsIHRoaXMuX2FuY2VzdG9ySW5mbyk7XG4gICAgdGhpcy5fY29udGVudERlYnVnSUQgPSBjb250ZW50RGVidWdJRDtcbiAgICBpZiAoaGFzRXhpc3RpbmdDb250ZW50KSB7XG4gICAgICBSZWFjdEluc3RydW1lbnRhdGlvbi5kZWJ1Z1Rvb2wub25CZWZvcmVVcGRhdGVDb21wb25lbnQoY29udGVudERlYnVnSUQsIGNvbnRlbnQpO1xuICAgICAgUmVhY3RJbnN0cnVtZW50YXRpb24uZGVidWdUb29sLm9uVXBkYXRlQ29tcG9uZW50KGNvbnRlbnREZWJ1Z0lEKTtcbiAgICB9IGVsc2Uge1xuICAgICAgUmVhY3RJbnN0cnVtZW50YXRpb24uZGVidWdUb29sLm9uQmVmb3JlTW91bnRDb21wb25lbnQoY29udGVudERlYnVnSUQsIGNvbnRlbnQsIGRlYnVnSUQpO1xuICAgICAgUmVhY3RJbnN0cnVtZW50YXRpb24uZGVidWdUb29sLm9uTW91bnRDb21wb25lbnQoY29udGVudERlYnVnSUQpO1xuICAgICAgUmVhY3RJbnN0cnVtZW50YXRpb24uZGVidWdUb29sLm9uU2V0Q2hpbGRyZW4oZGVidWdJRCwgW2NvbnRlbnREZWJ1Z0lEXSk7XG4gICAgfVxuICB9O1xufVxuXG4vLyBUaGVyZSBhcmUgc28gbWFueSBtZWRpYSBldmVudHMsIGl0IG1ha2VzIHNlbnNlIHRvIGp1c3Rcbi8vIG1haW50YWluIGEgbGlzdCByYXRoZXIgdGhhbiBjcmVhdGUgYSBgdHJhcEJ1YmJsZWRFdmVudGAgZm9yIGVhY2hcbnZhciBtZWRpYUV2ZW50cyA9IHtcbiAgdG9wQWJvcnQ6ICdhYm9ydCcsXG4gIHRvcENhblBsYXk6ICdjYW5wbGF5JyxcbiAgdG9wQ2FuUGxheVRocm91Z2g6ICdjYW5wbGF5dGhyb3VnaCcsXG4gIHRvcER1cmF0aW9uQ2hhbmdlOiAnZHVyYXRpb25jaGFuZ2UnLFxuICB0b3BFbXB0aWVkOiAnZW1wdGllZCcsXG4gIHRvcEVuY3J5cHRlZDogJ2VuY3J5cHRlZCcsXG4gIHRvcEVuZGVkOiAnZW5kZWQnLFxuICB0b3BFcnJvcjogJ2Vycm9yJyxcbiAgdG9wTG9hZGVkRGF0YTogJ2xvYWRlZGRhdGEnLFxuICB0b3BMb2FkZWRNZXRhZGF0YTogJ2xvYWRlZG1ldGFkYXRhJyxcbiAgdG9wTG9hZFN0YXJ0OiAnbG9hZHN0YXJ0JyxcbiAgdG9wUGF1c2U6ICdwYXVzZScsXG4gIHRvcFBsYXk6ICdwbGF5JyxcbiAgdG9wUGxheWluZzogJ3BsYXlpbmcnLFxuICB0b3BQcm9ncmVzczogJ3Byb2dyZXNzJyxcbiAgdG9wUmF0ZUNoYW5nZTogJ3JhdGVjaGFuZ2UnLFxuICB0b3BTZWVrZWQ6ICdzZWVrZWQnLFxuICB0b3BTZWVraW5nOiAnc2Vla2luZycsXG4gIHRvcFN0YWxsZWQ6ICdzdGFsbGVkJyxcbiAgdG9wU3VzcGVuZDogJ3N1c3BlbmQnLFxuICB0b3BUaW1lVXBkYXRlOiAndGltZXVwZGF0ZScsXG4gIHRvcFZvbHVtZUNoYW5nZTogJ3ZvbHVtZWNoYW5nZScsXG4gIHRvcFdhaXRpbmc6ICd3YWl0aW5nJ1xufTtcblxuZnVuY3Rpb24gdHJhY2tJbnB1dFZhbHVlKCkge1xuICBpbnB1dFZhbHVlVHJhY2tpbmcudHJhY2sodGhpcyk7XG59XG5cbmZ1bmN0aW9uIHRyYXBCdWJibGVkRXZlbnRzTG9jYWwoKSB7XG4gIHZhciBpbnN0ID0gdGhpcztcbiAgLy8gSWYgYSBjb21wb25lbnQgcmVuZGVycyB0byBudWxsIG9yIGlmIGFub3RoZXIgY29tcG9uZW50IGZhdGFscyBhbmQgY2F1c2VzXG4gIC8vIHRoZSBzdGF0ZSBvZiB0aGUgdHJlZSB0byBiZSBjb3JydXB0ZWQsIGBub2RlYCBoZXJlIGNhbiBiZSBudWxsLlxuICAhaW5zdC5fcm9vdE5vZGVJRCA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICdNdXN0IGJlIG1vdW50ZWQgdG8gdHJhcCBldmVudHMnKSA6IF9wcm9kSW52YXJpYW50KCc2MycpIDogdm9pZCAwO1xuICB2YXIgbm9kZSA9IGdldE5vZGUoaW5zdCk7XG4gICFub2RlID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IGludmFyaWFudChmYWxzZSwgJ3RyYXBCdWJibGVkRXZlbnQoLi4uKTogUmVxdWlyZXMgbm9kZSB0byBiZSByZW5kZXJlZC4nKSA6IF9wcm9kSW52YXJpYW50KCc2NCcpIDogdm9pZCAwO1xuXG4gIHN3aXRjaCAoaW5zdC5fdGFnKSB7XG4gICAgY2FzZSAnaWZyYW1lJzpcbiAgICBjYXNlICdvYmplY3QnOlxuICAgICAgaW5zdC5fd3JhcHBlclN0YXRlLmxpc3RlbmVycyA9IFtSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXIudHJhcEJ1YmJsZWRFdmVudCgndG9wTG9hZCcsICdsb2FkJywgbm9kZSldO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAndmlkZW8nOlxuICAgIGNhc2UgJ2F1ZGlvJzpcbiAgICAgIGluc3QuX3dyYXBwZXJTdGF0ZS5saXN0ZW5lcnMgPSBbXTtcbiAgICAgIC8vIENyZWF0ZSBsaXN0ZW5lciBmb3IgZWFjaCBtZWRpYSBldmVudFxuICAgICAgZm9yICh2YXIgZXZlbnQgaW4gbWVkaWFFdmVudHMpIHtcbiAgICAgICAgaWYgKG1lZGlhRXZlbnRzLmhhc093blByb3BlcnR5KGV2ZW50KSkge1xuICAgICAgICAgIGluc3QuX3dyYXBwZXJTdGF0ZS5saXN0ZW5lcnMucHVzaChSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXIudHJhcEJ1YmJsZWRFdmVudChldmVudCwgbWVkaWFFdmVudHNbZXZlbnRdLCBub2RlKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3NvdXJjZSc6XG4gICAgICBpbnN0Ll93cmFwcGVyU3RhdGUubGlzdGVuZXJzID0gW1JlYWN0QnJvd3NlckV2ZW50RW1pdHRlci50cmFwQnViYmxlZEV2ZW50KCd0b3BFcnJvcicsICdlcnJvcicsIG5vZGUpXTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2ltZyc6XG4gICAgICBpbnN0Ll93cmFwcGVyU3RhdGUubGlzdGVuZXJzID0gW1JlYWN0QnJvd3NlckV2ZW50RW1pdHRlci50cmFwQnViYmxlZEV2ZW50KCd0b3BFcnJvcicsICdlcnJvcicsIG5vZGUpLCBSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXIudHJhcEJ1YmJsZWRFdmVudCgndG9wTG9hZCcsICdsb2FkJywgbm9kZSldO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnZm9ybSc6XG4gICAgICBpbnN0Ll93cmFwcGVyU3RhdGUubGlzdGVuZXJzID0gW1JlYWN0QnJvd3NlckV2ZW50RW1pdHRlci50cmFwQnViYmxlZEV2ZW50KCd0b3BSZXNldCcsICdyZXNldCcsIG5vZGUpLCBSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXIudHJhcEJ1YmJsZWRFdmVudCgndG9wU3VibWl0JywgJ3N1Ym1pdCcsIG5vZGUpXTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2lucHV0JzpcbiAgICBjYXNlICdzZWxlY3QnOlxuICAgIGNhc2UgJ3RleHRhcmVhJzpcbiAgICAgIGluc3QuX3dyYXBwZXJTdGF0ZS5saXN0ZW5lcnMgPSBbUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyLnRyYXBCdWJibGVkRXZlbnQoJ3RvcEludmFsaWQnLCAnaW52YWxpZCcsIG5vZGUpXTtcbiAgICAgIGJyZWFrO1xuICB9XG59XG5cbmZ1bmN0aW9uIHBvc3RVcGRhdGVTZWxlY3RXcmFwcGVyKCkge1xuICBSZWFjdERPTVNlbGVjdC5wb3N0VXBkYXRlV3JhcHBlcih0aGlzKTtcbn1cblxuLy8gRm9yIEhUTUwsIGNlcnRhaW4gdGFncyBzaG91bGQgb21pdCB0aGVpciBjbG9zZSB0YWcuIFdlIGtlZXAgYSB3aGl0ZWxpc3QgZm9yXG4vLyB0aG9zZSBzcGVjaWFsLWNhc2UgdGFncy5cblxudmFyIG9taXR0ZWRDbG9zZVRhZ3MgPSB7XG4gIGFyZWE6IHRydWUsXG4gIGJhc2U6IHRydWUsXG4gIGJyOiB0cnVlLFxuICBjb2w6IHRydWUsXG4gIGVtYmVkOiB0cnVlLFxuICBocjogdHJ1ZSxcbiAgaW1nOiB0cnVlLFxuICBpbnB1dDogdHJ1ZSxcbiAga2V5Z2VuOiB0cnVlLFxuICBsaW5rOiB0cnVlLFxuICBtZXRhOiB0cnVlLFxuICBwYXJhbTogdHJ1ZSxcbiAgc291cmNlOiB0cnVlLFxuICB0cmFjazogdHJ1ZSxcbiAgd2JyOiB0cnVlXG4gIC8vIE5PVEU6IG1lbnVpdGVtJ3MgY2xvc2UgdGFnIHNob3VsZCBiZSBvbWl0dGVkLCBidXQgdGhhdCBjYXVzZXMgcHJvYmxlbXMuXG59O1xuXG52YXIgbmV3bGluZUVhdGluZ1RhZ3MgPSB7XG4gIGxpc3Rpbmc6IHRydWUsXG4gIHByZTogdHJ1ZSxcbiAgdGV4dGFyZWE6IHRydWVcbn07XG5cbi8vIEZvciBIVE1MLCBjZXJ0YWluIHRhZ3MgY2Fubm90IGhhdmUgY2hpbGRyZW4uIFRoaXMgaGFzIHRoZSBzYW1lIHB1cnBvc2UgYXNcbi8vIGBvbWl0dGVkQ2xvc2VUYWdzYCBleGNlcHQgdGhhdCBgbWVudWl0ZW1gIHNob3VsZCBzdGlsbCBoYXZlIGl0cyBjbG9zaW5nIHRhZy5cblxudmFyIHZvaWRFbGVtZW50VGFncyA9IF9hc3NpZ24oe1xuICBtZW51aXRlbTogdHJ1ZVxufSwgb21pdHRlZENsb3NlVGFncyk7XG5cbi8vIFdlIGFjY2VwdCBhbnkgdGFnIHRvIGJlIHJlbmRlcmVkIGJ1dCBzaW5jZSB0aGlzIGdldHMgaW5qZWN0ZWQgaW50byBhcmJpdHJhcnlcbi8vIEhUTUwsIHdlIHdhbnQgdG8gbWFrZSBzdXJlIHRoYXQgaXQncyBhIHNhZmUgdGFnLlxuLy8gaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLXhtbC8jTlQtTmFtZVxuXG52YXIgVkFMSURfVEFHX1JFR0VYID0gL15bYS16QS1aXVthLXpBLVo6X1xcLlxcLVxcZF0qJC87IC8vIFNpbXBsaWZpZWQgc3Vic2V0XG52YXIgdmFsaWRhdGVkVGFnQ2FjaGUgPSB7fTtcbnZhciBoYXNPd25Qcm9wZXJ0eSA9IHt9Lmhhc093blByb3BlcnR5O1xuXG5mdW5jdGlvbiB2YWxpZGF0ZURhbmdlcm91c1RhZyh0YWcpIHtcbiAgaWYgKCFoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbGlkYXRlZFRhZ0NhY2hlLCB0YWcpKSB7XG4gICAgIVZBTElEX1RBR19SRUdFWC50ZXN0KHRhZykgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAnSW52YWxpZCB0YWc6ICVzJywgdGFnKSA6IF9wcm9kSW52YXJpYW50KCc2NScsIHRhZykgOiB2b2lkIDA7XG4gICAgdmFsaWRhdGVkVGFnQ2FjaGVbdGFnXSA9IHRydWU7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNDdXN0b21Db21wb25lbnQodGFnTmFtZSwgcHJvcHMpIHtcbiAgcmV0dXJuIHRhZ05hbWUuaW5kZXhPZignLScpID49IDAgfHwgcHJvcHMuaXMgIT0gbnVsbDtcbn1cblxudmFyIGdsb2JhbElkQ291bnRlciA9IDE7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBSZWFjdCBjbGFzcyB0aGF0IGlzIGlkZW1wb3RlbnQgYW5kIGNhcGFibGUgb2YgY29udGFpbmluZyBvdGhlclxuICogUmVhY3QgY29tcG9uZW50cy4gSXQgYWNjZXB0cyBldmVudCBsaXN0ZW5lcnMgYW5kIERPTSBwcm9wZXJ0aWVzIHRoYXQgYXJlXG4gKiB2YWxpZCBhY2NvcmRpbmcgdG8gYERPTVByb3BlcnR5YC5cbiAqXG4gKiAgLSBFdmVudCBsaXN0ZW5lcnM6IGBvbkNsaWNrYCwgYG9uTW91c2VEb3duYCwgZXRjLlxuICogIC0gRE9NIHByb3BlcnRpZXM6IGBjbGFzc05hbWVgLCBgbmFtZWAsIGB0aXRsZWAsIGV0Yy5cbiAqXG4gKiBUaGUgYHN0eWxlYCBwcm9wZXJ0eSBmdW5jdGlvbnMgZGlmZmVyZW50bHkgZnJvbSB0aGUgRE9NIEFQSS4gSXQgYWNjZXB0cyBhblxuICogb2JqZWN0IG1hcHBpbmcgb2Ygc3R5bGUgcHJvcGVydGllcyB0byB2YWx1ZXMuXG4gKlxuICogQGNvbnN0cnVjdG9yIFJlYWN0RE9NQ29tcG9uZW50XG4gKiBAZXh0ZW5kcyBSZWFjdE11bHRpQ2hpbGRcbiAqL1xuZnVuY3Rpb24gUmVhY3RET01Db21wb25lbnQoZWxlbWVudCkge1xuICB2YXIgdGFnID0gZWxlbWVudC50eXBlO1xuICB2YWxpZGF0ZURhbmdlcm91c1RhZyh0YWcpO1xuICB0aGlzLl9jdXJyZW50RWxlbWVudCA9IGVsZW1lbnQ7XG4gIHRoaXMuX3RhZyA9IHRhZy50b0xvd2VyQ2FzZSgpO1xuICB0aGlzLl9uYW1lc3BhY2VVUkkgPSBudWxsO1xuICB0aGlzLl9yZW5kZXJlZENoaWxkcmVuID0gbnVsbDtcbiAgdGhpcy5fcHJldmlvdXNTdHlsZSA9IG51bGw7XG4gIHRoaXMuX3ByZXZpb3VzU3R5bGVDb3B5ID0gbnVsbDtcbiAgdGhpcy5faG9zdE5vZGUgPSBudWxsO1xuICB0aGlzLl9ob3N0UGFyZW50ID0gbnVsbDtcbiAgdGhpcy5fcm9vdE5vZGVJRCA9IDA7XG4gIHRoaXMuX2RvbUlEID0gMDtcbiAgdGhpcy5faG9zdENvbnRhaW5lckluZm8gPSBudWxsO1xuICB0aGlzLl93cmFwcGVyU3RhdGUgPSBudWxsO1xuICB0aGlzLl90b3BMZXZlbFdyYXBwZXIgPSBudWxsO1xuICB0aGlzLl9mbGFncyA9IDA7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgdGhpcy5fYW5jZXN0b3JJbmZvID0gbnVsbDtcbiAgICBzZXRBbmRWYWxpZGF0ZUNvbnRlbnRDaGlsZERldi5jYWxsKHRoaXMsIG51bGwpO1xuICB9XG59XG5cblJlYWN0RE9NQ29tcG9uZW50LmRpc3BsYXlOYW1lID0gJ1JlYWN0RE9NQ29tcG9uZW50JztcblxuUmVhY3RET01Db21wb25lbnQuTWl4aW4gPSB7XG4gIC8qKlxuICAgKiBHZW5lcmF0ZXMgcm9vdCB0YWcgbWFya3VwIHRoZW4gcmVjdXJzZXMuIFRoaXMgbWV0aG9kIGhhcyBzaWRlIGVmZmVjdHMgYW5kXG4gICAqIGlzIG5vdCBpZGVtcG90ZW50LlxuICAgKlxuICAgKiBAaW50ZXJuYWxcbiAgICogQHBhcmFtIHtSZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9ufFJlYWN0U2VydmVyUmVuZGVyaW5nVHJhbnNhY3Rpb259IHRyYW5zYWN0aW9uXG4gICAqIEBwYXJhbSB7P1JlYWN0RE9NQ29tcG9uZW50fSB0aGUgcGFyZW50IGNvbXBvbmVudCBpbnN0YW5jZVxuICAgKiBAcGFyYW0gez9vYmplY3R9IGluZm8gYWJvdXQgdGhlIGhvc3QgY29udGFpbmVyXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBjb250ZXh0XG4gICAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGNvbXB1dGVkIG1hcmt1cC5cbiAgICovXG4gIG1vdW50Q29tcG9uZW50OiBmdW5jdGlvbiAodHJhbnNhY3Rpb24sIGhvc3RQYXJlbnQsIGhvc3RDb250YWluZXJJbmZvLCBjb250ZXh0KSB7XG4gICAgdGhpcy5fcm9vdE5vZGVJRCA9IGdsb2JhbElkQ291bnRlcisrO1xuICAgIHRoaXMuX2RvbUlEID0gaG9zdENvbnRhaW5lckluZm8uX2lkQ291bnRlcisrO1xuICAgIHRoaXMuX2hvc3RQYXJlbnQgPSBob3N0UGFyZW50O1xuICAgIHRoaXMuX2hvc3RDb250YWluZXJJbmZvID0gaG9zdENvbnRhaW5lckluZm87XG5cbiAgICB2YXIgcHJvcHMgPSB0aGlzLl9jdXJyZW50RWxlbWVudC5wcm9wcztcblxuICAgIHN3aXRjaCAodGhpcy5fdGFnKSB7XG4gICAgICBjYXNlICdhdWRpbyc6XG4gICAgICBjYXNlICdmb3JtJzpcbiAgICAgIGNhc2UgJ2lmcmFtZSc6XG4gICAgICBjYXNlICdpbWcnOlxuICAgICAgY2FzZSAnbGluayc6XG4gICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgY2FzZSAnc291cmNlJzpcbiAgICAgIGNhc2UgJ3ZpZGVvJzpcbiAgICAgICAgdGhpcy5fd3JhcHBlclN0YXRlID0ge1xuICAgICAgICAgIGxpc3RlbmVyczogbnVsbFxuICAgICAgICB9O1xuICAgICAgICB0cmFuc2FjdGlvbi5nZXRSZWFjdE1vdW50UmVhZHkoKS5lbnF1ZXVlKHRyYXBCdWJibGVkRXZlbnRzTG9jYWwsIHRoaXMpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2lucHV0JzpcbiAgICAgICAgUmVhY3RET01JbnB1dC5tb3VudFdyYXBwZXIodGhpcywgcHJvcHMsIGhvc3RQYXJlbnQpO1xuICAgICAgICBwcm9wcyA9IFJlYWN0RE9NSW5wdXQuZ2V0SG9zdFByb3BzKHRoaXMsIHByb3BzKTtcbiAgICAgICAgdHJhbnNhY3Rpb24uZ2V0UmVhY3RNb3VudFJlYWR5KCkuZW5xdWV1ZSh0cmFja0lucHV0VmFsdWUsIHRoaXMpO1xuICAgICAgICB0cmFuc2FjdGlvbi5nZXRSZWFjdE1vdW50UmVhZHkoKS5lbnF1ZXVlKHRyYXBCdWJibGVkRXZlbnRzTG9jYWwsIHRoaXMpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ29wdGlvbic6XG4gICAgICAgIFJlYWN0RE9NT3B0aW9uLm1vdW50V3JhcHBlcih0aGlzLCBwcm9wcywgaG9zdFBhcmVudCk7XG4gICAgICAgIHByb3BzID0gUmVhY3RET01PcHRpb24uZ2V0SG9zdFByb3BzKHRoaXMsIHByb3BzKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdzZWxlY3QnOlxuICAgICAgICBSZWFjdERPTVNlbGVjdC5tb3VudFdyYXBwZXIodGhpcywgcHJvcHMsIGhvc3RQYXJlbnQpO1xuICAgICAgICBwcm9wcyA9IFJlYWN0RE9NU2VsZWN0LmdldEhvc3RQcm9wcyh0aGlzLCBwcm9wcyk7XG4gICAgICAgIHRyYW5zYWN0aW9uLmdldFJlYWN0TW91bnRSZWFkeSgpLmVucXVldWUodHJhcEJ1YmJsZWRFdmVudHNMb2NhbCwgdGhpcyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAndGV4dGFyZWEnOlxuICAgICAgICBSZWFjdERPTVRleHRhcmVhLm1vdW50V3JhcHBlcih0aGlzLCBwcm9wcywgaG9zdFBhcmVudCk7XG4gICAgICAgIHByb3BzID0gUmVhY3RET01UZXh0YXJlYS5nZXRIb3N0UHJvcHModGhpcywgcHJvcHMpO1xuICAgICAgICB0cmFuc2FjdGlvbi5nZXRSZWFjdE1vdW50UmVhZHkoKS5lbnF1ZXVlKHRyYWNrSW5wdXRWYWx1ZSwgdGhpcyk7XG4gICAgICAgIHRyYW5zYWN0aW9uLmdldFJlYWN0TW91bnRSZWFkeSgpLmVucXVldWUodHJhcEJ1YmJsZWRFdmVudHNMb2NhbCwgdGhpcyk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGFzc2VydFZhbGlkUHJvcHModGhpcywgcHJvcHMpO1xuXG4gICAgLy8gV2UgY3JlYXRlIHRhZ3MgaW4gdGhlIG5hbWVzcGFjZSBvZiB0aGVpciBwYXJlbnQgY29udGFpbmVyLCBleGNlcHQgSFRNTFxuICAgIC8vIHRhZ3MgZ2V0IG5vIG5hbWVzcGFjZS5cbiAgICB2YXIgbmFtZXNwYWNlVVJJO1xuICAgIHZhciBwYXJlbnRUYWc7XG4gICAgaWYgKGhvc3RQYXJlbnQgIT0gbnVsbCkge1xuICAgICAgbmFtZXNwYWNlVVJJID0gaG9zdFBhcmVudC5fbmFtZXNwYWNlVVJJO1xuICAgICAgcGFyZW50VGFnID0gaG9zdFBhcmVudC5fdGFnO1xuICAgIH0gZWxzZSBpZiAoaG9zdENvbnRhaW5lckluZm8uX3RhZykge1xuICAgICAgbmFtZXNwYWNlVVJJID0gaG9zdENvbnRhaW5lckluZm8uX25hbWVzcGFjZVVSSTtcbiAgICAgIHBhcmVudFRhZyA9IGhvc3RDb250YWluZXJJbmZvLl90YWc7XG4gICAgfVxuICAgIGlmIChuYW1lc3BhY2VVUkkgPT0gbnVsbCB8fCBuYW1lc3BhY2VVUkkgPT09IERPTU5hbWVzcGFjZXMuc3ZnICYmIHBhcmVudFRhZyA9PT0gJ2ZvcmVpZ25vYmplY3QnKSB7XG4gICAgICBuYW1lc3BhY2VVUkkgPSBET01OYW1lc3BhY2VzLmh0bWw7XG4gICAgfVxuICAgIGlmIChuYW1lc3BhY2VVUkkgPT09IERPTU5hbWVzcGFjZXMuaHRtbCkge1xuICAgICAgaWYgKHRoaXMuX3RhZyA9PT0gJ3N2ZycpIHtcbiAgICAgICAgbmFtZXNwYWNlVVJJID0gRE9NTmFtZXNwYWNlcy5zdmc7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX3RhZyA9PT0gJ21hdGgnKSB7XG4gICAgICAgIG5hbWVzcGFjZVVSSSA9IERPTU5hbWVzcGFjZXMubWF0aG1sO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLl9uYW1lc3BhY2VVUkkgPSBuYW1lc3BhY2VVUkk7XG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgdmFyIHBhcmVudEluZm87XG4gICAgICBpZiAoaG9zdFBhcmVudCAhPSBudWxsKSB7XG4gICAgICAgIHBhcmVudEluZm8gPSBob3N0UGFyZW50Ll9hbmNlc3RvckluZm87XG4gICAgICB9IGVsc2UgaWYgKGhvc3RDb250YWluZXJJbmZvLl90YWcpIHtcbiAgICAgICAgcGFyZW50SW5mbyA9IGhvc3RDb250YWluZXJJbmZvLl9hbmNlc3RvckluZm87XG4gICAgICB9XG4gICAgICBpZiAocGFyZW50SW5mbykge1xuICAgICAgICAvLyBwYXJlbnRJbmZvIHNob3VsZCBhbHdheXMgYmUgcHJlc2VudCBleGNlcHQgZm9yIHRoZSB0b3AtbGV2ZWxcbiAgICAgICAgLy8gY29tcG9uZW50IHdoZW4gc2VydmVyIHJlbmRlcmluZ1xuICAgICAgICB2YWxpZGF0ZURPTU5lc3RpbmcodGhpcy5fdGFnLCBudWxsLCB0aGlzLCBwYXJlbnRJbmZvKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2FuY2VzdG9ySW5mbyA9IHZhbGlkYXRlRE9NTmVzdGluZy51cGRhdGVkQW5jZXN0b3JJbmZvKHBhcmVudEluZm8sIHRoaXMuX3RhZywgdGhpcyk7XG4gICAgfVxuXG4gICAgdmFyIG1vdW50SW1hZ2U7XG4gICAgaWYgKHRyYW5zYWN0aW9uLnVzZUNyZWF0ZUVsZW1lbnQpIHtcbiAgICAgIHZhciBvd25lckRvY3VtZW50ID0gaG9zdENvbnRhaW5lckluZm8uX293bmVyRG9jdW1lbnQ7XG4gICAgICB2YXIgZWw7XG4gICAgICBpZiAobmFtZXNwYWNlVVJJID09PSBET01OYW1lc3BhY2VzLmh0bWwpIHtcbiAgICAgICAgaWYgKHRoaXMuX3RhZyA9PT0gJ3NjcmlwdCcpIHtcbiAgICAgICAgICAvLyBDcmVhdGUgdGhlIHNjcmlwdCB2aWEgLmlubmVySFRNTCBzbyBpdHMgXCJwYXJzZXItaW5zZXJ0ZWRcIiBmbGFnIGlzXG4gICAgICAgICAgLy8gc2V0IHRvIHRydWUgYW5kIGl0IGRvZXMgbm90IGV4ZWN1dGVcbiAgICAgICAgICB2YXIgZGl2ID0gb3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICB2YXIgdHlwZSA9IHRoaXMuX2N1cnJlbnRFbGVtZW50LnR5cGU7XG4gICAgICAgICAgZGl2LmlubmVySFRNTCA9ICc8JyArIHR5cGUgKyAnPjwvJyArIHR5cGUgKyAnPic7XG4gICAgICAgICAgZWwgPSBkaXYucmVtb3ZlQ2hpbGQoZGl2LmZpcnN0Q2hpbGQpO1xuICAgICAgICB9IGVsc2UgaWYgKHByb3BzLmlzKSB7XG4gICAgICAgICAgZWwgPSBvd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGhpcy5fY3VycmVudEVsZW1lbnQudHlwZSwgcHJvcHMuaXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFNlcGFyYXRlIGVsc2UgYnJhbmNoIGluc3RlYWQgb2YgdXNpbmcgYHByb3BzLmlzIHx8IHVuZGVmaW5lZGAgYWJvdmUgYmVjdWFzZSBvZiBhIEZpcmVmb3ggYnVnLlxuICAgICAgICAgIC8vIFNlZSBkaXNjdXNzaW9uIGluIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9wdWxsLzY4OTZcbiAgICAgICAgICAvLyBhbmQgZGlzY3Vzc2lvbiBpbiBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjc2MjQwXG4gICAgICAgICAgZWwgPSBvd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGhpcy5fY3VycmVudEVsZW1lbnQudHlwZSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVsID0gb3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50TlMobmFtZXNwYWNlVVJJLCB0aGlzLl9jdXJyZW50RWxlbWVudC50eXBlKTtcbiAgICAgIH1cbiAgICAgIFJlYWN0RE9NQ29tcG9uZW50VHJlZS5wcmVjYWNoZU5vZGUodGhpcywgZWwpO1xuICAgICAgdGhpcy5fZmxhZ3MgfD0gRmxhZ3MuaGFzQ2FjaGVkQ2hpbGROb2RlcztcbiAgICAgIGlmICghdGhpcy5faG9zdFBhcmVudCkge1xuICAgICAgICBET01Qcm9wZXJ0eU9wZXJhdGlvbnMuc2V0QXR0cmlidXRlRm9yUm9vdChlbCk7XG4gICAgICB9XG4gICAgICB0aGlzLl91cGRhdGVET01Qcm9wZXJ0aWVzKG51bGwsIHByb3BzLCB0cmFuc2FjdGlvbik7XG4gICAgICB2YXIgbGF6eVRyZWUgPSBET01MYXp5VHJlZShlbCk7XG4gICAgICB0aGlzLl9jcmVhdGVJbml0aWFsQ2hpbGRyZW4odHJhbnNhY3Rpb24sIHByb3BzLCBjb250ZXh0LCBsYXp5VHJlZSk7XG4gICAgICBtb3VudEltYWdlID0gbGF6eVRyZWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciB0YWdPcGVuID0gdGhpcy5fY3JlYXRlT3BlblRhZ01hcmt1cEFuZFB1dExpc3RlbmVycyh0cmFuc2FjdGlvbiwgcHJvcHMpO1xuICAgICAgdmFyIHRhZ0NvbnRlbnQgPSB0aGlzLl9jcmVhdGVDb250ZW50TWFya3VwKHRyYW5zYWN0aW9uLCBwcm9wcywgY29udGV4dCk7XG4gICAgICBpZiAoIXRhZ0NvbnRlbnQgJiYgb21pdHRlZENsb3NlVGFnc1t0aGlzLl90YWddKSB7XG4gICAgICAgIG1vdW50SW1hZ2UgPSB0YWdPcGVuICsgJy8+JztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG1vdW50SW1hZ2UgPSB0YWdPcGVuICsgJz4nICsgdGFnQ29udGVudCArICc8LycgKyB0aGlzLl9jdXJyZW50RWxlbWVudC50eXBlICsgJz4nO1xuICAgICAgfVxuICAgIH1cblxuICAgIHN3aXRjaCAodGhpcy5fdGFnKSB7XG4gICAgICBjYXNlICdpbnB1dCc6XG4gICAgICAgIHRyYW5zYWN0aW9uLmdldFJlYWN0TW91bnRSZWFkeSgpLmVucXVldWUoaW5wdXRQb3N0TW91bnQsIHRoaXMpO1xuICAgICAgICBpZiAocHJvcHMuYXV0b0ZvY3VzKSB7XG4gICAgICAgICAgdHJhbnNhY3Rpb24uZ2V0UmVhY3RNb3VudFJlYWR5KCkuZW5xdWV1ZShBdXRvRm9jdXNVdGlscy5mb2N1c0RPTUNvbXBvbmVudCwgdGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICd0ZXh0YXJlYSc6XG4gICAgICAgIHRyYW5zYWN0aW9uLmdldFJlYWN0TW91bnRSZWFkeSgpLmVucXVldWUodGV4dGFyZWFQb3N0TW91bnQsIHRoaXMpO1xuICAgICAgICBpZiAocHJvcHMuYXV0b0ZvY3VzKSB7XG4gICAgICAgICAgdHJhbnNhY3Rpb24uZ2V0UmVhY3RNb3VudFJlYWR5KCkuZW5xdWV1ZShBdXRvRm9jdXNVdGlscy5mb2N1c0RPTUNvbXBvbmVudCwgdGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdzZWxlY3QnOlxuICAgICAgICBpZiAocHJvcHMuYXV0b0ZvY3VzKSB7XG4gICAgICAgICAgdHJhbnNhY3Rpb24uZ2V0UmVhY3RNb3VudFJlYWR5KCkuZW5xdWV1ZShBdXRvRm9jdXNVdGlscy5mb2N1c0RPTUNvbXBvbmVudCwgdGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdidXR0b24nOlxuICAgICAgICBpZiAocHJvcHMuYXV0b0ZvY3VzKSB7XG4gICAgICAgICAgdHJhbnNhY3Rpb24uZ2V0UmVhY3RNb3VudFJlYWR5KCkuZW5xdWV1ZShBdXRvRm9jdXNVdGlscy5mb2N1c0RPTUNvbXBvbmVudCwgdGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdvcHRpb24nOlxuICAgICAgICB0cmFuc2FjdGlvbi5nZXRSZWFjdE1vdW50UmVhZHkoKS5lbnF1ZXVlKG9wdGlvblBvc3RNb3VudCwgdGhpcyk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHJldHVybiBtb3VudEltYWdlO1xuICB9LFxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIG1hcmt1cCBmb3IgdGhlIG9wZW4gdGFnIGFuZCBhbGwgYXR0cmlidXRlcy5cbiAgICpcbiAgICogVGhpcyBtZXRob2QgaGFzIHNpZGUgZWZmZWN0cyBiZWNhdXNlIGV2ZW50cyBnZXQgcmVnaXN0ZXJlZC5cbiAgICpcbiAgICogSXRlcmF0aW5nIG92ZXIgb2JqZWN0IHByb3BlcnRpZXMgaXMgZmFzdGVyIHRoYW4gaXRlcmF0aW5nIG92ZXIgYXJyYXlzLlxuICAgKiBAc2VlIGh0dHA6Ly9qc3BlcmYuY29tL29iai12cy1hcnItaXRlcmF0aW9uXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7UmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvbnxSZWFjdFNlcnZlclJlbmRlcmluZ1RyYW5zYWN0aW9ufSB0cmFuc2FjdGlvblxuICAgKiBAcGFyYW0ge29iamVjdH0gcHJvcHNcbiAgICogQHJldHVybiB7c3RyaW5nfSBNYXJrdXAgb2Ygb3BlbmluZyB0YWcuXG4gICAqL1xuICBfY3JlYXRlT3BlblRhZ01hcmt1cEFuZFB1dExpc3RlbmVyczogZnVuY3Rpb24gKHRyYW5zYWN0aW9uLCBwcm9wcykge1xuICAgIHZhciByZXQgPSAnPCcgKyB0aGlzLl9jdXJyZW50RWxlbWVudC50eXBlO1xuXG4gICAgZm9yICh2YXIgcHJvcEtleSBpbiBwcm9wcykge1xuICAgICAgaWYgKCFwcm9wcy5oYXNPd25Qcm9wZXJ0eShwcm9wS2V5KSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wS2V5XTtcbiAgICAgIGlmIChwcm9wVmFsdWUgPT0gbnVsbCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChyZWdpc3RyYXRpb25OYW1lTW9kdWxlcy5oYXNPd25Qcm9wZXJ0eShwcm9wS2V5KSkge1xuICAgICAgICBpZiAocHJvcFZhbHVlKSB7XG4gICAgICAgICAgZW5xdWV1ZVB1dExpc3RlbmVyKHRoaXMsIHByb3BLZXksIHByb3BWYWx1ZSwgdHJhbnNhY3Rpb24pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAocHJvcEtleSA9PT0gU1RZTEUpIHtcbiAgICAgICAgICBpZiAocHJvcFZhbHVlKSB7XG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgICAvLyBTZWUgYF91cGRhdGVET01Qcm9wZXJ0aWVzYC4gc3R5bGUgYmxvY2tcbiAgICAgICAgICAgICAgdGhpcy5fcHJldmlvdXNTdHlsZSA9IHByb3BWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHByb3BWYWx1ZSA9IHRoaXMuX3ByZXZpb3VzU3R5bGVDb3B5ID0gX2Fzc2lnbih7fSwgcHJvcHMuc3R5bGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBwcm9wVmFsdWUgPSBDU1NQcm9wZXJ0eU9wZXJhdGlvbnMuY3JlYXRlTWFya3VwRm9yU3R5bGVzKHByb3BWYWx1ZSwgdGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIG1hcmt1cCA9IG51bGw7XG4gICAgICAgIGlmICh0aGlzLl90YWcgIT0gbnVsbCAmJiBpc0N1c3RvbUNvbXBvbmVudCh0aGlzLl90YWcsIHByb3BzKSkge1xuICAgICAgICAgIGlmICghUkVTRVJWRURfUFJPUFMuaGFzT3duUHJvcGVydHkocHJvcEtleSkpIHtcbiAgICAgICAgICAgIG1hcmt1cCA9IERPTVByb3BlcnR5T3BlcmF0aW9ucy5jcmVhdGVNYXJrdXBGb3JDdXN0b21BdHRyaWJ1dGUocHJvcEtleSwgcHJvcFZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbWFya3VwID0gRE9NUHJvcGVydHlPcGVyYXRpb25zLmNyZWF0ZU1hcmt1cEZvclByb3BlcnR5KHByb3BLZXksIHByb3BWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1hcmt1cCkge1xuICAgICAgICAgIHJldCArPSAnICcgKyBtYXJrdXA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBGb3Igc3RhdGljIHBhZ2VzLCBubyBuZWVkIHRvIHB1dCBSZWFjdCBJRCBhbmQgY2hlY2tzdW0uIFNhdmVzIGxvdHMgb2ZcbiAgICAvLyBieXRlcy5cbiAgICBpZiAodHJhbnNhY3Rpb24ucmVuZGVyVG9TdGF0aWNNYXJrdXApIHtcbiAgICAgIHJldHVybiByZXQ7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLl9ob3N0UGFyZW50KSB7XG4gICAgICByZXQgKz0gJyAnICsgRE9NUHJvcGVydHlPcGVyYXRpb25zLmNyZWF0ZU1hcmt1cEZvclJvb3QoKTtcbiAgICB9XG4gICAgcmV0ICs9ICcgJyArIERPTVByb3BlcnR5T3BlcmF0aW9ucy5jcmVhdGVNYXJrdXBGb3JJRCh0aGlzLl9kb21JRCk7XG4gICAgcmV0dXJuIHJldDtcbiAgfSxcblxuICAvKipcbiAgICogQ3JlYXRlcyBtYXJrdXAgZm9yIHRoZSBjb250ZW50IGJldHdlZW4gdGhlIHRhZ3MuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7UmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvbnxSZWFjdFNlcnZlclJlbmRlcmluZ1RyYW5zYWN0aW9ufSB0cmFuc2FjdGlvblxuICAgKiBAcGFyYW0ge29iamVjdH0gcHJvcHNcbiAgICogQHBhcmFtIHtvYmplY3R9IGNvbnRleHRcbiAgICogQHJldHVybiB7c3RyaW5nfSBDb250ZW50IG1hcmt1cC5cbiAgICovXG4gIF9jcmVhdGVDb250ZW50TWFya3VwOiBmdW5jdGlvbiAodHJhbnNhY3Rpb24sIHByb3BzLCBjb250ZXh0KSB7XG4gICAgdmFyIHJldCA9ICcnO1xuXG4gICAgLy8gSW50ZW50aW9uYWwgdXNlIG9mICE9IHRvIGF2b2lkIGNhdGNoaW5nIHplcm8vZmFsc2UuXG4gICAgdmFyIGlubmVySFRNTCA9IHByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MO1xuICAgIGlmIChpbm5lckhUTUwgIT0gbnVsbCkge1xuICAgICAgaWYgKGlubmVySFRNTC5fX2h0bWwgIT0gbnVsbCkge1xuICAgICAgICByZXQgPSBpbm5lckhUTUwuX19odG1sO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgY29udGVudFRvVXNlID0gQ09OVEVOVF9UWVBFU1t0eXBlb2YgcHJvcHMuY2hpbGRyZW5dID8gcHJvcHMuY2hpbGRyZW4gOiBudWxsO1xuICAgICAgdmFyIGNoaWxkcmVuVG9Vc2UgPSBjb250ZW50VG9Vc2UgIT0gbnVsbCA/IG51bGwgOiBwcm9wcy5jaGlsZHJlbjtcbiAgICAgIGlmIChjb250ZW50VG9Vc2UgIT0gbnVsbCkge1xuICAgICAgICAvLyBUT0RPOiBWYWxpZGF0ZSB0aGF0IHRleHQgaXMgYWxsb3dlZCBhcyBhIGNoaWxkIG9mIHRoaXMgbm9kZVxuICAgICAgICByZXQgPSBlc2NhcGVUZXh0Q29udGVudEZvckJyb3dzZXIoY29udGVudFRvVXNlKTtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICBzZXRBbmRWYWxpZGF0ZUNvbnRlbnRDaGlsZERldi5jYWxsKHRoaXMsIGNvbnRlbnRUb1VzZSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoY2hpbGRyZW5Ub1VzZSAhPSBudWxsKSB7XG4gICAgICAgIHZhciBtb3VudEltYWdlcyA9IHRoaXMubW91bnRDaGlsZHJlbihjaGlsZHJlblRvVXNlLCB0cmFuc2FjdGlvbiwgY29udGV4dCk7XG4gICAgICAgIHJldCA9IG1vdW50SW1hZ2VzLmpvaW4oJycpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAobmV3bGluZUVhdGluZ1RhZ3NbdGhpcy5fdGFnXSAmJiByZXQuY2hhckF0KDApID09PSAnXFxuJykge1xuICAgICAgLy8gdGV4dC9odG1sIGlnbm9yZXMgdGhlIGZpcnN0IGNoYXJhY3RlciBpbiB0aGVzZSB0YWdzIGlmIGl0J3MgYSBuZXdsaW5lXG4gICAgICAvLyBQcmVmZXIgdG8gYnJlYWsgYXBwbGljYXRpb24veG1sIG92ZXIgdGV4dC9odG1sIChmb3Igbm93KSBieSBhZGRpbmdcbiAgICAgIC8vIGEgbmV3bGluZSBzcGVjaWZpY2FsbHkgdG8gZ2V0IGVhdGVuIGJ5IHRoZSBwYXJzZXIuIChBbHRlcm5hdGVseSBmb3JcbiAgICAgIC8vIHRleHRhcmVhcywgcmVwbGFjaW5nIFwiXlxcblwiIHdpdGggXCJcXHJcXG5cIiBkb2Vzbid0IGdldCBlYXRlbiwgYW5kIHRoZSBmaXJzdFxuICAgICAgLy8gXFxyIGlzIG5vcm1hbGl6ZWQgb3V0IGJ5IEhUTUxUZXh0QXJlYUVsZW1lbnQjdmFsdWUuKVxuICAgICAgLy8gU2VlOiA8aHR0cDovL3d3dy53My5vcmcvVFIvaHRtbC1wb2x5Z2xvdC8jbmV3bGluZXMtaW4tdGV4dGFyZWEtYW5kLXByZT5cbiAgICAgIC8vIFNlZTogPGh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw1L3N5bnRheC5odG1sI2VsZW1lbnQtcmVzdHJpY3Rpb25zPlxuICAgICAgLy8gU2VlOiA8aHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDUvc3ludGF4Lmh0bWwjbmV3bGluZXM+XG4gICAgICAvLyBTZWU6IFBhcnNpbmcgb2YgXCJ0ZXh0YXJlYVwiIFwibGlzdGluZ1wiIGFuZCBcInByZVwiIGVsZW1lbnRzXG4gICAgICAvLyAgZnJvbSA8aHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDUvc3ludGF4Lmh0bWwjcGFyc2luZy1tYWluLWluYm9keT5cbiAgICAgIHJldHVybiAnXFxuJyArIHJldDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG4gIH0sXG5cbiAgX2NyZWF0ZUluaXRpYWxDaGlsZHJlbjogZnVuY3Rpb24gKHRyYW5zYWN0aW9uLCBwcm9wcywgY29udGV4dCwgbGF6eVRyZWUpIHtcbiAgICAvLyBJbnRlbnRpb25hbCB1c2Ugb2YgIT0gdG8gYXZvaWQgY2F0Y2hpbmcgemVyby9mYWxzZS5cbiAgICB2YXIgaW5uZXJIVE1MID0gcHJvcHMuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw7XG4gICAgaWYgKGlubmVySFRNTCAhPSBudWxsKSB7XG4gICAgICBpZiAoaW5uZXJIVE1MLl9faHRtbCAhPSBudWxsKSB7XG4gICAgICAgIERPTUxhenlUcmVlLnF1ZXVlSFRNTChsYXp5VHJlZSwgaW5uZXJIVE1MLl9faHRtbCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBjb250ZW50VG9Vc2UgPSBDT05URU5UX1RZUEVTW3R5cGVvZiBwcm9wcy5jaGlsZHJlbl0gPyBwcm9wcy5jaGlsZHJlbiA6IG51bGw7XG4gICAgICB2YXIgY2hpbGRyZW5Ub1VzZSA9IGNvbnRlbnRUb1VzZSAhPSBudWxsID8gbnVsbCA6IHByb3BzLmNoaWxkcmVuO1xuICAgICAgLy8gVE9ETzogVmFsaWRhdGUgdGhhdCB0ZXh0IGlzIGFsbG93ZWQgYXMgYSBjaGlsZCBvZiB0aGlzIG5vZGVcbiAgICAgIGlmIChjb250ZW50VG9Vc2UgIT0gbnVsbCkge1xuICAgICAgICAvLyBBdm9pZCBzZXR0aW5nIHRleHRDb250ZW50IHdoZW4gdGhlIHRleHQgaXMgZW1wdHkuIEluIElFMTEgc2V0dGluZ1xuICAgICAgICAvLyB0ZXh0Q29udGVudCBvbiBhIHRleHQgYXJlYSB3aWxsIGNhdXNlIHRoZSBwbGFjZWhvbGRlciB0byBub3RcbiAgICAgICAgLy8gc2hvdyB3aXRoaW4gdGhlIHRleHRhcmVhIHVudGlsIGl0IGhhcyBiZWVuIGZvY3VzZWQgYW5kIGJsdXJyZWQgYWdhaW4uXG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvNjczMSNpc3N1ZWNvbW1lbnQtMjU0ODc0NTUzXG4gICAgICAgIGlmIChjb250ZW50VG9Vc2UgIT09ICcnKSB7XG4gICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICAgIHNldEFuZFZhbGlkYXRlQ29udGVudENoaWxkRGV2LmNhbGwodGhpcywgY29udGVudFRvVXNlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgRE9NTGF6eVRyZWUucXVldWVUZXh0KGxhenlUcmVlLCBjb250ZW50VG9Vc2UpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGNoaWxkcmVuVG9Vc2UgIT0gbnVsbCkge1xuICAgICAgICB2YXIgbW91bnRJbWFnZXMgPSB0aGlzLm1vdW50Q2hpbGRyZW4oY2hpbGRyZW5Ub1VzZSwgdHJhbnNhY3Rpb24sIGNvbnRleHQpO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1vdW50SW1hZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgRE9NTGF6eVRyZWUucXVldWVDaGlsZChsYXp5VHJlZSwgbW91bnRJbWFnZXNbaV0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIC8qKlxuICAgKiBSZWNlaXZlcyBhIG5leHQgZWxlbWVudCBhbmQgdXBkYXRlcyB0aGUgY29tcG9uZW50LlxuICAgKlxuICAgKiBAaW50ZXJuYWxcbiAgICogQHBhcmFtIHtSZWFjdEVsZW1lbnR9IG5leHRFbGVtZW50XG4gICAqIEBwYXJhbSB7UmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvbnxSZWFjdFNlcnZlclJlbmRlcmluZ1RyYW5zYWN0aW9ufSB0cmFuc2FjdGlvblxuICAgKiBAcGFyYW0ge29iamVjdH0gY29udGV4dFxuICAgKi9cbiAgcmVjZWl2ZUNvbXBvbmVudDogZnVuY3Rpb24gKG5leHRFbGVtZW50LCB0cmFuc2FjdGlvbiwgY29udGV4dCkge1xuICAgIHZhciBwcmV2RWxlbWVudCA9IHRoaXMuX2N1cnJlbnRFbGVtZW50O1xuICAgIHRoaXMuX2N1cnJlbnRFbGVtZW50ID0gbmV4dEVsZW1lbnQ7XG4gICAgdGhpcy51cGRhdGVDb21wb25lbnQodHJhbnNhY3Rpb24sIHByZXZFbGVtZW50LCBuZXh0RWxlbWVudCwgY29udGV4dCk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgYSBET00gY29tcG9uZW50IGFmdGVyIGl0IGhhcyBhbHJlYWR5IGJlZW4gYWxsb2NhdGVkIGFuZFxuICAgKiBhdHRhY2hlZCB0byB0aGUgRE9NLiBSZWNvbmNpbGVzIHRoZSByb290IERPTSBub2RlLCB0aGVuIHJlY3Vyc2VzLlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb259IHRyYW5zYWN0aW9uXG4gICAqIEBwYXJhbSB7UmVhY3RFbGVtZW50fSBwcmV2RWxlbWVudFxuICAgKiBAcGFyYW0ge1JlYWN0RWxlbWVudH0gbmV4dEVsZW1lbnRcbiAgICogQGludGVybmFsXG4gICAqIEBvdmVycmlkYWJsZVxuICAgKi9cbiAgdXBkYXRlQ29tcG9uZW50OiBmdW5jdGlvbiAodHJhbnNhY3Rpb24sIHByZXZFbGVtZW50LCBuZXh0RWxlbWVudCwgY29udGV4dCkge1xuICAgIHZhciBsYXN0UHJvcHMgPSBwcmV2RWxlbWVudC5wcm9wcztcbiAgICB2YXIgbmV4dFByb3BzID0gdGhpcy5fY3VycmVudEVsZW1lbnQucHJvcHM7XG5cbiAgICBzd2l0Y2ggKHRoaXMuX3RhZykge1xuICAgICAgY2FzZSAnaW5wdXQnOlxuICAgICAgICBsYXN0UHJvcHMgPSBSZWFjdERPTUlucHV0LmdldEhvc3RQcm9wcyh0aGlzLCBsYXN0UHJvcHMpO1xuICAgICAgICBuZXh0UHJvcHMgPSBSZWFjdERPTUlucHV0LmdldEhvc3RQcm9wcyh0aGlzLCBuZXh0UHJvcHMpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ29wdGlvbic6XG4gICAgICAgIGxhc3RQcm9wcyA9IFJlYWN0RE9NT3B0aW9uLmdldEhvc3RQcm9wcyh0aGlzLCBsYXN0UHJvcHMpO1xuICAgICAgICBuZXh0UHJvcHMgPSBSZWFjdERPTU9wdGlvbi5nZXRIb3N0UHJvcHModGhpcywgbmV4dFByb3BzKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdzZWxlY3QnOlxuICAgICAgICBsYXN0UHJvcHMgPSBSZWFjdERPTVNlbGVjdC5nZXRIb3N0UHJvcHModGhpcywgbGFzdFByb3BzKTtcbiAgICAgICAgbmV4dFByb3BzID0gUmVhY3RET01TZWxlY3QuZ2V0SG9zdFByb3BzKHRoaXMsIG5leHRQcm9wcyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAndGV4dGFyZWEnOlxuICAgICAgICBsYXN0UHJvcHMgPSBSZWFjdERPTVRleHRhcmVhLmdldEhvc3RQcm9wcyh0aGlzLCBsYXN0UHJvcHMpO1xuICAgICAgICBuZXh0UHJvcHMgPSBSZWFjdERPTVRleHRhcmVhLmdldEhvc3RQcm9wcyh0aGlzLCBuZXh0UHJvcHMpO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICBhc3NlcnRWYWxpZFByb3BzKHRoaXMsIG5leHRQcm9wcyk7XG4gICAgdGhpcy5fdXBkYXRlRE9NUHJvcGVydGllcyhsYXN0UHJvcHMsIG5leHRQcm9wcywgdHJhbnNhY3Rpb24pO1xuICAgIHRoaXMuX3VwZGF0ZURPTUNoaWxkcmVuKGxhc3RQcm9wcywgbmV4dFByb3BzLCB0cmFuc2FjdGlvbiwgY29udGV4dCk7XG5cbiAgICBzd2l0Y2ggKHRoaXMuX3RhZykge1xuICAgICAgY2FzZSAnaW5wdXQnOlxuICAgICAgICAvLyBVcGRhdGUgdGhlIHdyYXBwZXIgYXJvdW5kIGlucHV0cyAqYWZ0ZXIqIHVwZGF0aW5nIHByb3BzLiBUaGlzIGhhcyB0b1xuICAgICAgICAvLyBoYXBwZW4gYWZ0ZXIgYF91cGRhdGVET01Qcm9wZXJ0aWVzYC4gT3RoZXJ3aXNlIEhUTUw1IGlucHV0IHZhbGlkYXRpb25zXG4gICAgICAgIC8vIHJhaXNlIHdhcm5pbmdzIGFuZCBwcmV2ZW50IHRoZSBuZXcgdmFsdWUgZnJvbSBiZWluZyBhc3NpZ25lZC5cbiAgICAgICAgUmVhY3RET01JbnB1dC51cGRhdGVXcmFwcGVyKHRoaXMpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3RleHRhcmVhJzpcbiAgICAgICAgUmVhY3RET01UZXh0YXJlYS51cGRhdGVXcmFwcGVyKHRoaXMpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3NlbGVjdCc6XG4gICAgICAgIC8vIDxzZWxlY3Q+IHZhbHVlIHVwZGF0ZSBuZWVkcyB0byBvY2N1ciBhZnRlciA8b3B0aW9uPiBjaGlsZHJlblxuICAgICAgICAvLyByZWNvbmNpbGlhdGlvblxuICAgICAgICB0cmFuc2FjdGlvbi5nZXRSZWFjdE1vdW50UmVhZHkoKS5lbnF1ZXVlKHBvc3RVcGRhdGVTZWxlY3RXcmFwcGVyLCB0aGlzKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9LFxuXG4gIC8qKlxuICAgKiBSZWNvbmNpbGVzIHRoZSBwcm9wZXJ0aWVzIGJ5IGRldGVjdGluZyBkaWZmZXJlbmNlcyBpbiBwcm9wZXJ0eSB2YWx1ZXMgYW5kXG4gICAqIHVwZGF0aW5nIHRoZSBET00gYXMgbmVjZXNzYXJ5LiBUaGlzIGZ1bmN0aW9uIGlzIHByb2JhYmx5IHRoZSBzaW5nbGUgbW9zdFxuICAgKiBjcml0aWNhbCBwYXRoIGZvciBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24uXG4gICAqXG4gICAqIFRPRE86IEJlbmNobWFyayB3aGV0aGVyIGNoZWNraW5nIGZvciBjaGFuZ2VkIHZhbHVlcyBpbiBtZW1vcnkgYWN0dWFsbHlcbiAgICogICAgICAgaW1wcm92ZXMgcGVyZm9ybWFuY2UgKGVzcGVjaWFsbHkgc3RhdGljYWxseSBwb3NpdGlvbmVkIGVsZW1lbnRzKS5cbiAgICogVE9ETzogQmVuY2htYXJrIHRoZSBlZmZlY3RzIG9mIHB1dHRpbmcgdGhpcyBhdCB0aGUgdG9wIHNpbmNlIDk5JSBvZiBwcm9wc1xuICAgKiAgICAgICBkbyBub3QgY2hhbmdlIGZvciBhIGdpdmVuIHJlY29uY2lsaWF0aW9uLlxuICAgKiBUT0RPOiBCZW5jaG1hcmsgYXJlYXMgdGhhdCBjYW4gYmUgaW1wcm92ZWQgd2l0aCBjYWNoaW5nLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge29iamVjdH0gbGFzdFByb3BzXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBuZXh0UHJvcHNcbiAgICogQHBhcmFtIHs/RE9NRWxlbWVudH0gbm9kZVxuICAgKi9cbiAgX3VwZGF0ZURPTVByb3BlcnRpZXM6IGZ1bmN0aW9uIChsYXN0UHJvcHMsIG5leHRQcm9wcywgdHJhbnNhY3Rpb24pIHtcbiAgICB2YXIgcHJvcEtleTtcbiAgICB2YXIgc3R5bGVOYW1lO1xuICAgIHZhciBzdHlsZVVwZGF0ZXM7XG4gICAgZm9yIChwcm9wS2V5IGluIGxhc3RQcm9wcykge1xuICAgICAgaWYgKG5leHRQcm9wcy5oYXNPd25Qcm9wZXJ0eShwcm9wS2V5KSB8fCAhbGFzdFByb3BzLmhhc093blByb3BlcnR5KHByb3BLZXkpIHx8IGxhc3RQcm9wc1twcm9wS2V5XSA9PSBudWxsKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKHByb3BLZXkgPT09IFNUWUxFKSB7XG4gICAgICAgIHZhciBsYXN0U3R5bGUgPSB0aGlzLl9wcmV2aW91c1N0eWxlQ29weTtcbiAgICAgICAgZm9yIChzdHlsZU5hbWUgaW4gbGFzdFN0eWxlKSB7XG4gICAgICAgICAgaWYgKGxhc3RTdHlsZS5oYXNPd25Qcm9wZXJ0eShzdHlsZU5hbWUpKSB7XG4gICAgICAgICAgICBzdHlsZVVwZGF0ZXMgPSBzdHlsZVVwZGF0ZXMgfHwge307XG4gICAgICAgICAgICBzdHlsZVVwZGF0ZXNbc3R5bGVOYW1lXSA9ICcnO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9wcmV2aW91c1N0eWxlQ29weSA9IG51bGw7XG4gICAgICB9IGVsc2UgaWYgKHJlZ2lzdHJhdGlvbk5hbWVNb2R1bGVzLmhhc093blByb3BlcnR5KHByb3BLZXkpKSB7XG4gICAgICAgIGlmIChsYXN0UHJvcHNbcHJvcEtleV0pIHtcbiAgICAgICAgICAvLyBPbmx5IGNhbGwgZGVsZXRlTGlzdGVuZXIgaWYgdGhlcmUgd2FzIGEgbGlzdGVuZXIgcHJldmlvdXNseSBvclxuICAgICAgICAgIC8vIGVsc2Ugd2lsbERlbGV0ZUxpc3RlbmVyIGdldHMgY2FsbGVkIHdoZW4gdGhlcmUgd2Fzbid0IGFjdHVhbGx5IGFcbiAgICAgICAgICAvLyBsaXN0ZW5lciAoZS5nLiwgb25DbGljaz17bnVsbH0pXG4gICAgICAgICAgZGVsZXRlTGlzdGVuZXIodGhpcywgcHJvcEtleSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaXNDdXN0b21Db21wb25lbnQodGhpcy5fdGFnLCBsYXN0UHJvcHMpKSB7XG4gICAgICAgIGlmICghUkVTRVJWRURfUFJPUFMuaGFzT3duUHJvcGVydHkocHJvcEtleSkpIHtcbiAgICAgICAgICBET01Qcm9wZXJ0eU9wZXJhdGlvbnMuZGVsZXRlVmFsdWVGb3JBdHRyaWJ1dGUoZ2V0Tm9kZSh0aGlzKSwgcHJvcEtleSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoRE9NUHJvcGVydHkucHJvcGVydGllc1twcm9wS2V5XSB8fCBET01Qcm9wZXJ0eS5pc0N1c3RvbUF0dHJpYnV0ZShwcm9wS2V5KSkge1xuICAgICAgICBET01Qcm9wZXJ0eU9wZXJhdGlvbnMuZGVsZXRlVmFsdWVGb3JQcm9wZXJ0eShnZXROb2RlKHRoaXMpLCBwcm9wS2V5KTtcbiAgICAgIH1cbiAgICB9XG4gICAgZm9yIChwcm9wS2V5IGluIG5leHRQcm9wcykge1xuICAgICAgdmFyIG5leHRQcm9wID0gbmV4dFByb3BzW3Byb3BLZXldO1xuICAgICAgdmFyIGxhc3RQcm9wID0gcHJvcEtleSA9PT0gU1RZTEUgPyB0aGlzLl9wcmV2aW91c1N0eWxlQ29weSA6IGxhc3RQcm9wcyAhPSBudWxsID8gbGFzdFByb3BzW3Byb3BLZXldIDogdW5kZWZpbmVkO1xuICAgICAgaWYgKCFuZXh0UHJvcHMuaGFzT3duUHJvcGVydHkocHJvcEtleSkgfHwgbmV4dFByb3AgPT09IGxhc3RQcm9wIHx8IG5leHRQcm9wID09IG51bGwgJiYgbGFzdFByb3AgPT0gbnVsbCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wS2V5ID09PSBTVFlMRSkge1xuICAgICAgICBpZiAobmV4dFByb3ApIHtcbiAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgY2hlY2tBbmRXYXJuRm9yTXV0YXRlZFN0eWxlKHRoaXMuX3ByZXZpb3VzU3R5bGVDb3B5LCB0aGlzLl9wcmV2aW91c1N0eWxlLCB0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuX3ByZXZpb3VzU3R5bGUgPSBuZXh0UHJvcDtcbiAgICAgICAgICB9XG4gICAgICAgICAgbmV4dFByb3AgPSB0aGlzLl9wcmV2aW91c1N0eWxlQ29weSA9IF9hc3NpZ24oe30sIG5leHRQcm9wKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLl9wcmV2aW91c1N0eWxlQ29weSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxhc3RQcm9wKSB7XG4gICAgICAgICAgLy8gVW5zZXQgc3R5bGVzIG9uIGBsYXN0UHJvcGAgYnV0IG5vdCBvbiBgbmV4dFByb3BgLlxuICAgICAgICAgIGZvciAoc3R5bGVOYW1lIGluIGxhc3RQcm9wKSB7XG4gICAgICAgICAgICBpZiAobGFzdFByb3AuaGFzT3duUHJvcGVydHkoc3R5bGVOYW1lKSAmJiAoIW5leHRQcm9wIHx8ICFuZXh0UHJvcC5oYXNPd25Qcm9wZXJ0eShzdHlsZU5hbWUpKSkge1xuICAgICAgICAgICAgICBzdHlsZVVwZGF0ZXMgPSBzdHlsZVVwZGF0ZXMgfHwge307XG4gICAgICAgICAgICAgIHN0eWxlVXBkYXRlc1tzdHlsZU5hbWVdID0gJyc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIFVwZGF0ZSBzdHlsZXMgdGhhdCBjaGFuZ2VkIHNpbmNlIGBsYXN0UHJvcGAuXG4gICAgICAgICAgZm9yIChzdHlsZU5hbWUgaW4gbmV4dFByb3ApIHtcbiAgICAgICAgICAgIGlmIChuZXh0UHJvcC5oYXNPd25Qcm9wZXJ0eShzdHlsZU5hbWUpICYmIGxhc3RQcm9wW3N0eWxlTmFtZV0gIT09IG5leHRQcm9wW3N0eWxlTmFtZV0pIHtcbiAgICAgICAgICAgICAgc3R5bGVVcGRhdGVzID0gc3R5bGVVcGRhdGVzIHx8IHt9O1xuICAgICAgICAgICAgICBzdHlsZVVwZGF0ZXNbc3R5bGVOYW1lXSA9IG5leHRQcm9wW3N0eWxlTmFtZV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFJlbGllcyBvbiBgdXBkYXRlU3R5bGVzQnlJRGAgbm90IG11dGF0aW5nIGBzdHlsZVVwZGF0ZXNgLlxuICAgICAgICAgIHN0eWxlVXBkYXRlcyA9IG5leHRQcm9wO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHJlZ2lzdHJhdGlvbk5hbWVNb2R1bGVzLmhhc093blByb3BlcnR5KHByb3BLZXkpKSB7XG4gICAgICAgIGlmIChuZXh0UHJvcCkge1xuICAgICAgICAgIGVucXVldWVQdXRMaXN0ZW5lcih0aGlzLCBwcm9wS2V5LCBuZXh0UHJvcCwgdHJhbnNhY3Rpb24pO1xuICAgICAgICB9IGVsc2UgaWYgKGxhc3RQcm9wKSB7XG4gICAgICAgICAgZGVsZXRlTGlzdGVuZXIodGhpcywgcHJvcEtleSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaXNDdXN0b21Db21wb25lbnQodGhpcy5fdGFnLCBuZXh0UHJvcHMpKSB7XG4gICAgICAgIGlmICghUkVTRVJWRURfUFJPUFMuaGFzT3duUHJvcGVydHkocHJvcEtleSkpIHtcbiAgICAgICAgICBET01Qcm9wZXJ0eU9wZXJhdGlvbnMuc2V0VmFsdWVGb3JBdHRyaWJ1dGUoZ2V0Tm9kZSh0aGlzKSwgcHJvcEtleSwgbmV4dFByb3ApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKERPTVByb3BlcnR5LnByb3BlcnRpZXNbcHJvcEtleV0gfHwgRE9NUHJvcGVydHkuaXNDdXN0b21BdHRyaWJ1dGUocHJvcEtleSkpIHtcbiAgICAgICAgdmFyIG5vZGUgPSBnZXROb2RlKHRoaXMpO1xuICAgICAgICAvLyBJZiB3ZSdyZSB1cGRhdGluZyB0byBudWxsIG9yIHVuZGVmaW5lZCwgd2Ugc2hvdWxkIHJlbW92ZSB0aGUgcHJvcGVydHlcbiAgICAgICAgLy8gZnJvbSB0aGUgRE9NIG5vZGUgaW5zdGVhZCBvZiBpbmFkdmVydGVudGx5IHNldHRpbmcgdG8gYSBzdHJpbmcuIFRoaXNcbiAgICAgICAgLy8gYnJpbmdzIHVzIGluIGxpbmUgd2l0aCB0aGUgc2FtZSBiZWhhdmlvciB3ZSBoYXZlIG9uIGluaXRpYWwgcmVuZGVyLlxuICAgICAgICBpZiAobmV4dFByb3AgIT0gbnVsbCkge1xuICAgICAgICAgIERPTVByb3BlcnR5T3BlcmF0aW9ucy5zZXRWYWx1ZUZvclByb3BlcnR5KG5vZGUsIHByb3BLZXksIG5leHRQcm9wKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBET01Qcm9wZXJ0eU9wZXJhdGlvbnMuZGVsZXRlVmFsdWVGb3JQcm9wZXJ0eShub2RlLCBwcm9wS2V5KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoc3R5bGVVcGRhdGVzKSB7XG4gICAgICBDU1NQcm9wZXJ0eU9wZXJhdGlvbnMuc2V0VmFsdWVGb3JTdHlsZXMoZ2V0Tm9kZSh0aGlzKSwgc3R5bGVVcGRhdGVzLCB0aGlzKTtcbiAgICB9XG4gIH0sXG5cbiAgLyoqXG4gICAqIFJlY29uY2lsZXMgdGhlIGNoaWxkcmVuIHdpdGggdGhlIHZhcmlvdXMgcHJvcGVydGllcyB0aGF0IGFmZmVjdCB0aGVcbiAgICogY2hpbGRyZW4gY29udGVudC5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IGxhc3RQcm9wc1xuICAgKiBAcGFyYW0ge29iamVjdH0gbmV4dFByb3BzXG4gICAqIEBwYXJhbSB7UmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvbn0gdHJhbnNhY3Rpb25cbiAgICogQHBhcmFtIHtvYmplY3R9IGNvbnRleHRcbiAgICovXG4gIF91cGRhdGVET01DaGlsZHJlbjogZnVuY3Rpb24gKGxhc3RQcm9wcywgbmV4dFByb3BzLCB0cmFuc2FjdGlvbiwgY29udGV4dCkge1xuICAgIHZhciBsYXN0Q29udGVudCA9IENPTlRFTlRfVFlQRVNbdHlwZW9mIGxhc3RQcm9wcy5jaGlsZHJlbl0gPyBsYXN0UHJvcHMuY2hpbGRyZW4gOiBudWxsO1xuICAgIHZhciBuZXh0Q29udGVudCA9IENPTlRFTlRfVFlQRVNbdHlwZW9mIG5leHRQcm9wcy5jaGlsZHJlbl0gPyBuZXh0UHJvcHMuY2hpbGRyZW4gOiBudWxsO1xuXG4gICAgdmFyIGxhc3RIdG1sID0gbGFzdFByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MICYmIGxhc3RQcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTC5fX2h0bWw7XG4gICAgdmFyIG5leHRIdG1sID0gbmV4dFByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MICYmIG5leHRQcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTC5fX2h0bWw7XG5cbiAgICAvLyBOb3RlIHRoZSB1c2Ugb2YgYCE9YCB3aGljaCBjaGVja3MgZm9yIG51bGwgb3IgdW5kZWZpbmVkLlxuICAgIHZhciBsYXN0Q2hpbGRyZW4gPSBsYXN0Q29udGVudCAhPSBudWxsID8gbnVsbCA6IGxhc3RQcm9wcy5jaGlsZHJlbjtcbiAgICB2YXIgbmV4dENoaWxkcmVuID0gbmV4dENvbnRlbnQgIT0gbnVsbCA/IG51bGwgOiBuZXh0UHJvcHMuY2hpbGRyZW47XG5cbiAgICAvLyBJZiB3ZSdyZSBzd2l0Y2hpbmcgZnJvbSBjaGlsZHJlbiB0byBjb250ZW50L2h0bWwgb3IgdmljZSB2ZXJzYSwgcmVtb3ZlXG4gICAgLy8gdGhlIG9sZCBjb250ZW50XG4gICAgdmFyIGxhc3RIYXNDb250ZW50T3JIdG1sID0gbGFzdENvbnRlbnQgIT0gbnVsbCB8fCBsYXN0SHRtbCAhPSBudWxsO1xuICAgIHZhciBuZXh0SGFzQ29udGVudE9ySHRtbCA9IG5leHRDb250ZW50ICE9IG51bGwgfHwgbmV4dEh0bWwgIT0gbnVsbDtcbiAgICBpZiAobGFzdENoaWxkcmVuICE9IG51bGwgJiYgbmV4dENoaWxkcmVuID09IG51bGwpIHtcbiAgICAgIHRoaXMudXBkYXRlQ2hpbGRyZW4obnVsbCwgdHJhbnNhY3Rpb24sIGNvbnRleHQpO1xuICAgIH0gZWxzZSBpZiAobGFzdEhhc0NvbnRlbnRPckh0bWwgJiYgIW5leHRIYXNDb250ZW50T3JIdG1sKSB7XG4gICAgICB0aGlzLnVwZGF0ZVRleHRDb250ZW50KCcnKTtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIFJlYWN0SW5zdHJ1bWVudGF0aW9uLmRlYnVnVG9vbC5vblNldENoaWxkcmVuKHRoaXMuX2RlYnVnSUQsIFtdKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobmV4dENvbnRlbnQgIT0gbnVsbCkge1xuICAgICAgaWYgKGxhc3RDb250ZW50ICE9PSBuZXh0Q29udGVudCkge1xuICAgICAgICB0aGlzLnVwZGF0ZVRleHRDb250ZW50KCcnICsgbmV4dENvbnRlbnQpO1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgIHNldEFuZFZhbGlkYXRlQ29udGVudENoaWxkRGV2LmNhbGwodGhpcywgbmV4dENvbnRlbnQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChuZXh0SHRtbCAhPSBudWxsKSB7XG4gICAgICBpZiAobGFzdEh0bWwgIT09IG5leHRIdG1sKSB7XG4gICAgICAgIHRoaXMudXBkYXRlTWFya3VwKCcnICsgbmV4dEh0bWwpO1xuICAgICAgfVxuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgUmVhY3RJbnN0cnVtZW50YXRpb24uZGVidWdUb29sLm9uU2V0Q2hpbGRyZW4odGhpcy5fZGVidWdJRCwgW10pO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAobmV4dENoaWxkcmVuICE9IG51bGwpIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIHNldEFuZFZhbGlkYXRlQ29udGVudENoaWxkRGV2LmNhbGwodGhpcywgbnVsbCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMudXBkYXRlQ2hpbGRyZW4obmV4dENoaWxkcmVuLCB0cmFuc2FjdGlvbiwgY29udGV4dCk7XG4gICAgfVxuICB9LFxuXG4gIGdldEhvc3ROb2RlOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGdldE5vZGUodGhpcyk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIERlc3Ryb3lzIGFsbCBldmVudCByZWdpc3RyYXRpb25zIGZvciB0aGlzIGluc3RhbmNlLiBEb2VzIG5vdCByZW1vdmUgZnJvbVxuICAgKiB0aGUgRE9NLiBUaGF0IG11c3QgYmUgZG9uZSBieSB0aGUgcGFyZW50LlxuICAgKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHVubW91bnRDb21wb25lbnQ6IGZ1bmN0aW9uIChzYWZlbHkpIHtcbiAgICBzd2l0Y2ggKHRoaXMuX3RhZykge1xuICAgICAgY2FzZSAnYXVkaW8nOlxuICAgICAgY2FzZSAnZm9ybSc6XG4gICAgICBjYXNlICdpZnJhbWUnOlxuICAgICAgY2FzZSAnaW1nJzpcbiAgICAgIGNhc2UgJ2xpbmsnOlxuICAgICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgIGNhc2UgJ3NvdXJjZSc6XG4gICAgICBjYXNlICd2aWRlbyc6XG4gICAgICAgIHZhciBsaXN0ZW5lcnMgPSB0aGlzLl93cmFwcGVyU3RhdGUubGlzdGVuZXJzO1xuICAgICAgICBpZiAobGlzdGVuZXJzKSB7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0ZW5lcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGxpc3RlbmVyc1tpXS5yZW1vdmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdpbnB1dCc6XG4gICAgICBjYXNlICd0ZXh0YXJlYSc6XG4gICAgICAgIGlucHV0VmFsdWVUcmFja2luZy5zdG9wVHJhY2tpbmcodGhpcyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnaHRtbCc6XG4gICAgICBjYXNlICdoZWFkJzpcbiAgICAgIGNhc2UgJ2JvZHknOlxuICAgICAgICAvKipcbiAgICAgICAgICogQ29tcG9uZW50cyBsaWtlIDxodG1sPiA8aGVhZD4gYW5kIDxib2R5PiBjYW4ndCBiZSByZW1vdmVkIG9yIGFkZGVkXG4gICAgICAgICAqIGVhc2lseSBpbiBhIGNyb3NzLWJyb3dzZXIgd2F5LCBob3dldmVyIGl0J3MgdmFsdWFibGUgdG8gYmUgYWJsZSB0b1xuICAgICAgICAgKiB0YWtlIGFkdmFudGFnZSBvZiBSZWFjdCdzIHJlY29uY2lsaWF0aW9uIGZvciBzdHlsaW5nIGFuZCA8dGl0bGU+XG4gICAgICAgICAqIG1hbmFnZW1lbnQuIFNvIHdlIGp1c3QgZG9jdW1lbnQgaXQgYW5kIHRocm93IGluIGRhbmdlcm91cyBjYXNlcy5cbiAgICAgICAgICovXG4gICAgICAgICFmYWxzZSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICc8JXM+IHRyaWVkIHRvIHVubW91bnQuIEJlY2F1c2Ugb2YgY3Jvc3MtYnJvd3NlciBxdWlya3MgaXQgaXMgaW1wb3NzaWJsZSB0byB1bm1vdW50IHNvbWUgdG9wLWxldmVsIGNvbXBvbmVudHMgKGVnIDxodG1sPiwgPGhlYWQ+LCBhbmQgPGJvZHk+KSByZWxpYWJseSBhbmQgZWZmaWNpZW50bHkuIFRvIGZpeCB0aGlzLCBoYXZlIGEgc2luZ2xlIHRvcC1sZXZlbCBjb21wb25lbnQgdGhhdCBuZXZlciB1bm1vdW50cyByZW5kZXIgdGhlc2UgZWxlbWVudHMuJywgdGhpcy5fdGFnKSA6IF9wcm9kSW52YXJpYW50KCc2NicsIHRoaXMuX3RhZykgOiB2b2lkIDA7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHRoaXMudW5tb3VudENoaWxkcmVuKHNhZmVseSk7XG4gICAgUmVhY3RET01Db21wb25lbnRUcmVlLnVuY2FjaGVOb2RlKHRoaXMpO1xuICAgIEV2ZW50UGx1Z2luSHViLmRlbGV0ZUFsbExpc3RlbmVycyh0aGlzKTtcbiAgICB0aGlzLl9yb290Tm9kZUlEID0gMDtcbiAgICB0aGlzLl9kb21JRCA9IDA7XG4gICAgdGhpcy5fd3JhcHBlclN0YXRlID0gbnVsbDtcblxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBzZXRBbmRWYWxpZGF0ZUNvbnRlbnRDaGlsZERldi5jYWxsKHRoaXMsIG51bGwpO1xuICAgIH1cbiAgfSxcblxuICBnZXRQdWJsaWNJbnN0YW5jZTogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBnZXROb2RlKHRoaXMpO1xuICB9XG59O1xuXG5fYXNzaWduKFJlYWN0RE9NQ29tcG9uZW50LnByb3RvdHlwZSwgUmVhY3RET01Db21wb25lbnQuTWl4aW4sIFJlYWN0TXVsdGlDaGlsZC5NaXhpbik7XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RET01Db21wb25lbnQ7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1kb20vbGliL1JlYWN0RE9NQ29tcG9uZW50LmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIHZhbGlkYXRlRE9NTmVzdGluZyA9IHJlcXVpcmUoJy4vdmFsaWRhdGVET01OZXN0aW5nJyk7XG5cbnZhciBET0NfTk9ERV9UWVBFID0gOTtcblxuZnVuY3Rpb24gUmVhY3RET01Db250YWluZXJJbmZvKHRvcExldmVsV3JhcHBlciwgbm9kZSkge1xuICB2YXIgaW5mbyA9IHtcbiAgICBfdG9wTGV2ZWxXcmFwcGVyOiB0b3BMZXZlbFdyYXBwZXIsXG4gICAgX2lkQ291bnRlcjogMSxcbiAgICBfb3duZXJEb2N1bWVudDogbm9kZSA/IG5vZGUubm9kZVR5cGUgPT09IERPQ19OT0RFX1RZUEUgPyBub2RlIDogbm9kZS5vd25lckRvY3VtZW50IDogbnVsbCxcbiAgICBfbm9kZTogbm9kZSxcbiAgICBfdGFnOiBub2RlID8gbm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpIDogbnVsbCxcbiAgICBfbmFtZXNwYWNlVVJJOiBub2RlID8gbm9kZS5uYW1lc3BhY2VVUkkgOiBudWxsXG4gIH07XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgaW5mby5fYW5jZXN0b3JJbmZvID0gbm9kZSA/IHZhbGlkYXRlRE9NTmVzdGluZy51cGRhdGVkQW5jZXN0b3JJbmZvKG51bGwsIGluZm8uX3RhZywgbnVsbCkgOiBudWxsO1xuICB9XG4gIHJldHVybiBpbmZvO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0RE9NQ29udGFpbmVySW5mbztcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3JlYWN0LWRvbS9saWIvUmVhY3RET01Db250YWluZXJJbmZvLmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxNC1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIF9hc3NpZ24gPSByZXF1aXJlKCdvYmplY3QtYXNzaWduJyk7XG5cbnZhciBET01MYXp5VHJlZSA9IHJlcXVpcmUoJy4vRE9NTGF6eVRyZWUnKTtcbnZhciBSZWFjdERPTUNvbXBvbmVudFRyZWUgPSByZXF1aXJlKCcuL1JlYWN0RE9NQ29tcG9uZW50VHJlZScpO1xuXG52YXIgUmVhY3RET01FbXB0eUNvbXBvbmVudCA9IGZ1bmN0aW9uIChpbnN0YW50aWF0ZSkge1xuICAvLyBSZWFjdENvbXBvc2l0ZUNvbXBvbmVudCB1c2VzIHRoaXM6XG4gIHRoaXMuX2N1cnJlbnRFbGVtZW50ID0gbnVsbDtcbiAgLy8gUmVhY3RET01Db21wb25lbnRUcmVlIHVzZXMgdGhlc2U6XG4gIHRoaXMuX2hvc3ROb2RlID0gbnVsbDtcbiAgdGhpcy5faG9zdFBhcmVudCA9IG51bGw7XG4gIHRoaXMuX2hvc3RDb250YWluZXJJbmZvID0gbnVsbDtcbiAgdGhpcy5fZG9tSUQgPSAwO1xufTtcbl9hc3NpZ24oUmVhY3RET01FbXB0eUNvbXBvbmVudC5wcm90b3R5cGUsIHtcbiAgbW91bnRDb21wb25lbnQ6IGZ1bmN0aW9uICh0cmFuc2FjdGlvbiwgaG9zdFBhcmVudCwgaG9zdENvbnRhaW5lckluZm8sIGNvbnRleHQpIHtcbiAgICB2YXIgZG9tSUQgPSBob3N0Q29udGFpbmVySW5mby5faWRDb3VudGVyKys7XG4gICAgdGhpcy5fZG9tSUQgPSBkb21JRDtcbiAgICB0aGlzLl9ob3N0UGFyZW50ID0gaG9zdFBhcmVudDtcbiAgICB0aGlzLl9ob3N0Q29udGFpbmVySW5mbyA9IGhvc3RDb250YWluZXJJbmZvO1xuXG4gICAgdmFyIG5vZGVWYWx1ZSA9ICcgcmVhY3QtZW1wdHk6ICcgKyB0aGlzLl9kb21JRCArICcgJztcbiAgICBpZiAodHJhbnNhY3Rpb24udXNlQ3JlYXRlRWxlbWVudCkge1xuICAgICAgdmFyIG93bmVyRG9jdW1lbnQgPSBob3N0Q29udGFpbmVySW5mby5fb3duZXJEb2N1bWVudDtcbiAgICAgIHZhciBub2RlID0gb3duZXJEb2N1bWVudC5jcmVhdGVDb21tZW50KG5vZGVWYWx1ZSk7XG4gICAgICBSZWFjdERPTUNvbXBvbmVudFRyZWUucHJlY2FjaGVOb2RlKHRoaXMsIG5vZGUpO1xuICAgICAgcmV0dXJuIERPTUxhenlUcmVlKG5vZGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodHJhbnNhY3Rpb24ucmVuZGVyVG9TdGF0aWNNYXJrdXApIHtcbiAgICAgICAgLy8gTm9ybWFsbHkgd2UnZCBpbnNlcnQgYSBjb21tZW50IG5vZGUsIGJ1dCBzaW5jZSB0aGlzIGlzIGEgc2l0dWF0aW9uXG4gICAgICAgIC8vIHdoZXJlIFJlYWN0IHdvbid0IHRha2Ugb3ZlciAoc3RhdGljIHBhZ2VzKSwgd2UgY2FuIHNpbXBseSByZXR1cm5cbiAgICAgICAgLy8gbm90aGluZy5cbiAgICAgICAgcmV0dXJuICcnO1xuICAgICAgfVxuICAgICAgcmV0dXJuICc8IS0tJyArIG5vZGVWYWx1ZSArICctLT4nO1xuICAgIH1cbiAgfSxcbiAgcmVjZWl2ZUNvbXBvbmVudDogZnVuY3Rpb24gKCkge30sXG4gIGdldEhvc3ROb2RlOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIFJlYWN0RE9NQ29tcG9uZW50VHJlZS5nZXROb2RlRnJvbUluc3RhbmNlKHRoaXMpO1xuICB9LFxuICB1bm1vdW50Q29tcG9uZW50OiBmdW5jdGlvbiAoKSB7XG4gICAgUmVhY3RET01Db21wb25lbnRUcmVlLnVuY2FjaGVOb2RlKHRoaXMpO1xuICB9XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdERPTUVtcHR5Q29tcG9uZW50O1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QtZG9tL2xpYi9SZWFjdERPTUVtcHR5Q29tcG9uZW50LmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0RE9NRmVhdHVyZUZsYWdzID0ge1xuICB1c2VDcmVhdGVFbGVtZW50OiB0cnVlLFxuICB1c2VGaWJlcjogZmFsc2Vcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RET01GZWF0dXJlRmxhZ3M7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1kb20vbGliL1JlYWN0RE9NRmVhdHVyZUZsYWdzLmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIERPTUNoaWxkcmVuT3BlcmF0aW9ucyA9IHJlcXVpcmUoJy4vRE9NQ2hpbGRyZW5PcGVyYXRpb25zJyk7XG52YXIgUmVhY3RET01Db21wb25lbnRUcmVlID0gcmVxdWlyZSgnLi9SZWFjdERPTUNvbXBvbmVudFRyZWUnKTtcblxuLyoqXG4gKiBPcGVyYXRpb25zIHVzZWQgdG8gcHJvY2VzcyB1cGRhdGVzIHRvIERPTSBub2Rlcy5cbiAqL1xudmFyIFJlYWN0RE9NSURPcGVyYXRpb25zID0ge1xuICAvKipcbiAgICogVXBkYXRlcyBhIGNvbXBvbmVudCdzIGNoaWxkcmVuIGJ5IHByb2Nlc3NpbmcgYSBzZXJpZXMgb2YgdXBkYXRlcy5cbiAgICpcbiAgICogQHBhcmFtIHthcnJheTxvYmplY3Q+fSB1cGRhdGVzIExpc3Qgb2YgdXBkYXRlIGNvbmZpZ3VyYXRpb25zLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGRhbmdlcm91c2x5UHJvY2Vzc0NoaWxkcmVuVXBkYXRlczogZnVuY3Rpb24gKHBhcmVudEluc3QsIHVwZGF0ZXMpIHtcbiAgICB2YXIgbm9kZSA9IFJlYWN0RE9NQ29tcG9uZW50VHJlZS5nZXROb2RlRnJvbUluc3RhbmNlKHBhcmVudEluc3QpO1xuICAgIERPTUNoaWxkcmVuT3BlcmF0aW9ucy5wcm9jZXNzVXBkYXRlcyhub2RlLCB1cGRhdGVzKTtcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdERPTUlET3BlcmF0aW9ucztcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3JlYWN0LWRvbS9saWIvUmVhY3RET01JRE9wZXJhdGlvbnMuanMiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgX3Byb2RJbnZhcmlhbnQgPSByZXF1aXJlKCcuL3JlYWN0UHJvZEludmFyaWFudCcpLFxuICAgIF9hc3NpZ24gPSByZXF1aXJlKCdvYmplY3QtYXNzaWduJyk7XG5cbnZhciBET01Qcm9wZXJ0eU9wZXJhdGlvbnMgPSByZXF1aXJlKCcuL0RPTVByb3BlcnR5T3BlcmF0aW9ucycpO1xudmFyIExpbmtlZFZhbHVlVXRpbHMgPSByZXF1aXJlKCcuL0xpbmtlZFZhbHVlVXRpbHMnKTtcbnZhciBSZWFjdERPTUNvbXBvbmVudFRyZWUgPSByZXF1aXJlKCcuL1JlYWN0RE9NQ29tcG9uZW50VHJlZScpO1xudmFyIFJlYWN0VXBkYXRlcyA9IHJlcXVpcmUoJy4vUmVhY3RVcGRhdGVzJyk7XG5cbnZhciBpbnZhcmlhbnQgPSByZXF1aXJlKCdmYmpzL2xpYi9pbnZhcmlhbnQnKTtcbnZhciB3YXJuaW5nID0gcmVxdWlyZSgnZmJqcy9saWIvd2FybmluZycpO1xuXG52YXIgZGlkV2FyblZhbHVlTGluayA9IGZhbHNlO1xudmFyIGRpZFdhcm5DaGVja2VkTGluayA9IGZhbHNlO1xudmFyIGRpZFdhcm5WYWx1ZURlZmF1bHRWYWx1ZSA9IGZhbHNlO1xudmFyIGRpZFdhcm5DaGVja2VkRGVmYXVsdENoZWNrZWQgPSBmYWxzZTtcbnZhciBkaWRXYXJuQ29udHJvbGxlZFRvVW5jb250cm9sbGVkID0gZmFsc2U7XG52YXIgZGlkV2FyblVuY29udHJvbGxlZFRvQ29udHJvbGxlZCA9IGZhbHNlO1xuXG5mdW5jdGlvbiBmb3JjZVVwZGF0ZUlmTW91bnRlZCgpIHtcbiAgaWYgKHRoaXMuX3Jvb3ROb2RlSUQpIHtcbiAgICAvLyBET00gY29tcG9uZW50IGlzIHN0aWxsIG1vdW50ZWQ7IHVwZGF0ZVxuICAgIFJlYWN0RE9NSW5wdXQudXBkYXRlV3JhcHBlcih0aGlzKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc0NvbnRyb2xsZWQocHJvcHMpIHtcbiAgdmFyIHVzZXNDaGVja2VkID0gcHJvcHMudHlwZSA9PT0gJ2NoZWNrYm94JyB8fCBwcm9wcy50eXBlID09PSAncmFkaW8nO1xuICByZXR1cm4gdXNlc0NoZWNrZWQgPyBwcm9wcy5jaGVja2VkICE9IG51bGwgOiBwcm9wcy52YWx1ZSAhPSBudWxsO1xufVxuXG4vKipcbiAqIEltcGxlbWVudHMgYW4gPGlucHV0PiBob3N0IGNvbXBvbmVudCB0aGF0IGFsbG93cyBzZXR0aW5nIHRoZXNlIG9wdGlvbmFsXG4gKiBwcm9wczogYGNoZWNrZWRgLCBgdmFsdWVgLCBgZGVmYXVsdENoZWNrZWRgLCBhbmQgYGRlZmF1bHRWYWx1ZWAuXG4gKlxuICogSWYgYGNoZWNrZWRgIG9yIGB2YWx1ZWAgYXJlIG5vdCBzdXBwbGllZCAob3IgbnVsbC91bmRlZmluZWQpLCB1c2VyIGFjdGlvbnNcbiAqIHRoYXQgYWZmZWN0IHRoZSBjaGVja2VkIHN0YXRlIG9yIHZhbHVlIHdpbGwgdHJpZ2dlciB1cGRhdGVzIHRvIHRoZSBlbGVtZW50LlxuICpcbiAqIElmIHRoZXkgYXJlIHN1cHBsaWVkIChhbmQgbm90IG51bGwvdW5kZWZpbmVkKSwgdGhlIHJlbmRlcmVkIGVsZW1lbnQgd2lsbCBub3RcbiAqIHRyaWdnZXIgdXBkYXRlcyB0byB0aGUgZWxlbWVudC4gSW5zdGVhZCwgdGhlIHByb3BzIG11c3QgY2hhbmdlIGluIG9yZGVyIGZvclxuICogdGhlIHJlbmRlcmVkIGVsZW1lbnQgdG8gYmUgdXBkYXRlZC5cbiAqXG4gKiBUaGUgcmVuZGVyZWQgZWxlbWVudCB3aWxsIGJlIGluaXRpYWxpemVkIGFzIHVuY2hlY2tlZCAob3IgYGRlZmF1bHRDaGVja2VkYClcbiAqIHdpdGggYW4gZW1wdHkgdmFsdWUgKG9yIGBkZWZhdWx0VmFsdWVgKS5cbiAqXG4gKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTIvV0QtaHRtbDUtMjAxMjEwMjUvdGhlLWlucHV0LWVsZW1lbnQuaHRtbFxuICovXG52YXIgUmVhY3RET01JbnB1dCA9IHtcbiAgZ2V0SG9zdFByb3BzOiBmdW5jdGlvbiAoaW5zdCwgcHJvcHMpIHtcbiAgICB2YXIgdmFsdWUgPSBMaW5rZWRWYWx1ZVV0aWxzLmdldFZhbHVlKHByb3BzKTtcbiAgICB2YXIgY2hlY2tlZCA9IExpbmtlZFZhbHVlVXRpbHMuZ2V0Q2hlY2tlZChwcm9wcyk7XG5cbiAgICB2YXIgaG9zdFByb3BzID0gX2Fzc2lnbih7XG4gICAgICAvLyBNYWtlIHN1cmUgd2Ugc2V0IC50eXBlIGJlZm9yZSBhbnkgb3RoZXIgcHJvcGVydGllcyAoc2V0dGluZyAudmFsdWVcbiAgICAgIC8vIGJlZm9yZSAudHlwZSBtZWFucyAudmFsdWUgaXMgbG9zdCBpbiBJRTExIGFuZCBiZWxvdylcbiAgICAgIHR5cGU6IHVuZGVmaW5lZCxcbiAgICAgIC8vIE1ha2Ugc3VyZSB3ZSBzZXQgLnN0ZXAgYmVmb3JlIC52YWx1ZSAoc2V0dGluZyAudmFsdWUgYmVmb3JlIC5zdGVwXG4gICAgICAvLyBtZWFucyAudmFsdWUgaXMgcm91bmRlZCBvbiBtb3VudCwgYmFzZWQgdXBvbiBzdGVwIHByZWNpc2lvbilcbiAgICAgIHN0ZXA6IHVuZGVmaW5lZCxcbiAgICAgIC8vIE1ha2Ugc3VyZSB3ZSBzZXQgLm1pbiAmIC5tYXggYmVmb3JlIC52YWx1ZSAodG8gZW5zdXJlIHByb3BlciBvcmRlclxuICAgICAgLy8gaW4gY29ybmVyIGNhc2VzIHN1Y2ggYXMgbWluIG9yIG1heCBkZXJpdmluZyBmcm9tIHZhbHVlLCBlLmcuIElzc3VlICM3MTcwKVxuICAgICAgbWluOiB1bmRlZmluZWQsXG4gICAgICBtYXg6IHVuZGVmaW5lZFxuICAgIH0sIHByb3BzLCB7XG4gICAgICBkZWZhdWx0Q2hlY2tlZDogdW5kZWZpbmVkLFxuICAgICAgZGVmYXVsdFZhbHVlOiB1bmRlZmluZWQsXG4gICAgICB2YWx1ZTogdmFsdWUgIT0gbnVsbCA/IHZhbHVlIDogaW5zdC5fd3JhcHBlclN0YXRlLmluaXRpYWxWYWx1ZSxcbiAgICAgIGNoZWNrZWQ6IGNoZWNrZWQgIT0gbnVsbCA/IGNoZWNrZWQgOiBpbnN0Ll93cmFwcGVyU3RhdGUuaW5pdGlhbENoZWNrZWQsXG4gICAgICBvbkNoYW5nZTogaW5zdC5fd3JhcHBlclN0YXRlLm9uQ2hhbmdlXG4gICAgfSk7XG5cbiAgICByZXR1cm4gaG9zdFByb3BzO1xuICB9LFxuXG4gIG1vdW50V3JhcHBlcjogZnVuY3Rpb24gKGluc3QsIHByb3BzKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIExpbmtlZFZhbHVlVXRpbHMuY2hlY2tQcm9wVHlwZXMoJ2lucHV0JywgcHJvcHMsIGluc3QuX2N1cnJlbnRFbGVtZW50Ll9vd25lcik7XG5cbiAgICAgIHZhciBvd25lciA9IGluc3QuX2N1cnJlbnRFbGVtZW50Ll9vd25lcjtcblxuICAgICAgaWYgKHByb3BzLnZhbHVlTGluayAhPT0gdW5kZWZpbmVkICYmICFkaWRXYXJuVmFsdWVMaW5rKSB7XG4gICAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKGZhbHNlLCAnYHZhbHVlTGlua2AgcHJvcCBvbiBgaW5wdXRgIGlzIGRlcHJlY2F0ZWQ7IHNldCBgdmFsdWVgIGFuZCBgb25DaGFuZ2VgIGluc3RlYWQuJykgOiB2b2lkIDA7XG4gICAgICAgIGRpZFdhcm5WYWx1ZUxpbmsgPSB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKHByb3BzLmNoZWNrZWRMaW5rICE9PSB1bmRlZmluZWQgJiYgIWRpZFdhcm5DaGVja2VkTGluaykge1xuICAgICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyhmYWxzZSwgJ2BjaGVja2VkTGlua2AgcHJvcCBvbiBgaW5wdXRgIGlzIGRlcHJlY2F0ZWQ7IHNldCBgdmFsdWVgIGFuZCBgb25DaGFuZ2VgIGluc3RlYWQuJykgOiB2b2lkIDA7XG4gICAgICAgIGRpZFdhcm5DaGVja2VkTGluayA9IHRydWU7XG4gICAgICB9XG4gICAgICBpZiAocHJvcHMuY2hlY2tlZCAhPT0gdW5kZWZpbmVkICYmIHByb3BzLmRlZmF1bHRDaGVja2VkICE9PSB1bmRlZmluZWQgJiYgIWRpZFdhcm5DaGVja2VkRGVmYXVsdENoZWNrZWQpIHtcbiAgICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcoZmFsc2UsICclcyBjb250YWlucyBhbiBpbnB1dCBvZiB0eXBlICVzIHdpdGggYm90aCBjaGVja2VkIGFuZCBkZWZhdWx0Q2hlY2tlZCBwcm9wcy4gJyArICdJbnB1dCBlbGVtZW50cyBtdXN0IGJlIGVpdGhlciBjb250cm9sbGVkIG9yIHVuY29udHJvbGxlZCAnICsgJyhzcGVjaWZ5IGVpdGhlciB0aGUgY2hlY2tlZCBwcm9wLCBvciB0aGUgZGVmYXVsdENoZWNrZWQgcHJvcCwgYnV0IG5vdCAnICsgJ2JvdGgpLiBEZWNpZGUgYmV0d2VlbiB1c2luZyBhIGNvbnRyb2xsZWQgb3IgdW5jb250cm9sbGVkIGlucHV0ICcgKyAnZWxlbWVudCBhbmQgcmVtb3ZlIG9uZSBvZiB0aGVzZSBwcm9wcy4gTW9yZSBpbmZvOiAnICsgJ2h0dHBzOi8vZmIubWUvcmVhY3QtY29udHJvbGxlZC1jb21wb25lbnRzJywgb3duZXIgJiYgb3duZXIuZ2V0TmFtZSgpIHx8ICdBIGNvbXBvbmVudCcsIHByb3BzLnR5cGUpIDogdm9pZCAwO1xuICAgICAgICBkaWRXYXJuQ2hlY2tlZERlZmF1bHRDaGVja2VkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wcy52YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHByb3BzLmRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkICYmICFkaWRXYXJuVmFsdWVEZWZhdWx0VmFsdWUpIHtcbiAgICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcoZmFsc2UsICclcyBjb250YWlucyBhbiBpbnB1dCBvZiB0eXBlICVzIHdpdGggYm90aCB2YWx1ZSBhbmQgZGVmYXVsdFZhbHVlIHByb3BzLiAnICsgJ0lucHV0IGVsZW1lbnRzIG11c3QgYmUgZWl0aGVyIGNvbnRyb2xsZWQgb3IgdW5jb250cm9sbGVkICcgKyAnKHNwZWNpZnkgZWl0aGVyIHRoZSB2YWx1ZSBwcm9wLCBvciB0aGUgZGVmYXVsdFZhbHVlIHByb3AsIGJ1dCBub3QgJyArICdib3RoKS4gRGVjaWRlIGJldHdlZW4gdXNpbmcgYSBjb250cm9sbGVkIG9yIHVuY29udHJvbGxlZCBpbnB1dCAnICsgJ2VsZW1lbnQgYW5kIHJlbW92ZSBvbmUgb2YgdGhlc2UgcHJvcHMuIE1vcmUgaW5mbzogJyArICdodHRwczovL2ZiLm1lL3JlYWN0LWNvbnRyb2xsZWQtY29tcG9uZW50cycsIG93bmVyICYmIG93bmVyLmdldE5hbWUoKSB8fCAnQSBjb21wb25lbnQnLCBwcm9wcy50eXBlKSA6IHZvaWQgMDtcbiAgICAgICAgZGlkV2FyblZhbHVlRGVmYXVsdFZhbHVlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgZGVmYXVsdFZhbHVlID0gcHJvcHMuZGVmYXVsdFZhbHVlO1xuICAgIGluc3QuX3dyYXBwZXJTdGF0ZSA9IHtcbiAgICAgIGluaXRpYWxDaGVja2VkOiBwcm9wcy5jaGVja2VkICE9IG51bGwgPyBwcm9wcy5jaGVja2VkIDogcHJvcHMuZGVmYXVsdENoZWNrZWQsXG4gICAgICBpbml0aWFsVmFsdWU6IHByb3BzLnZhbHVlICE9IG51bGwgPyBwcm9wcy52YWx1ZSA6IGRlZmF1bHRWYWx1ZSxcbiAgICAgIGxpc3RlbmVyczogbnVsbCxcbiAgICAgIG9uQ2hhbmdlOiBfaGFuZGxlQ2hhbmdlLmJpbmQoaW5zdCksXG4gICAgICBjb250cm9sbGVkOiBpc0NvbnRyb2xsZWQocHJvcHMpXG4gICAgfTtcbiAgfSxcblxuICB1cGRhdGVXcmFwcGVyOiBmdW5jdGlvbiAoaW5zdCkge1xuICAgIHZhciBwcm9wcyA9IGluc3QuX2N1cnJlbnRFbGVtZW50LnByb3BzO1xuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIHZhciBjb250cm9sbGVkID0gaXNDb250cm9sbGVkKHByb3BzKTtcbiAgICAgIHZhciBvd25lciA9IGluc3QuX2N1cnJlbnRFbGVtZW50Ll9vd25lcjtcblxuICAgICAgaWYgKCFpbnN0Ll93cmFwcGVyU3RhdGUuY29udHJvbGxlZCAmJiBjb250cm9sbGVkICYmICFkaWRXYXJuVW5jb250cm9sbGVkVG9Db250cm9sbGVkKSB7XG4gICAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKGZhbHNlLCAnJXMgaXMgY2hhbmdpbmcgYW4gdW5jb250cm9sbGVkIGlucHV0IG9mIHR5cGUgJXMgdG8gYmUgY29udHJvbGxlZC4gJyArICdJbnB1dCBlbGVtZW50cyBzaG91bGQgbm90IHN3aXRjaCBmcm9tIHVuY29udHJvbGxlZCB0byBjb250cm9sbGVkIChvciB2aWNlIHZlcnNhKS4gJyArICdEZWNpZGUgYmV0d2VlbiB1c2luZyBhIGNvbnRyb2xsZWQgb3IgdW5jb250cm9sbGVkIGlucHV0ICcgKyAnZWxlbWVudCBmb3IgdGhlIGxpZmV0aW1lIG9mIHRoZSBjb21wb25lbnQuIE1vcmUgaW5mbzogaHR0cHM6Ly9mYi5tZS9yZWFjdC1jb250cm9sbGVkLWNvbXBvbmVudHMnLCBvd25lciAmJiBvd25lci5nZXROYW1lKCkgfHwgJ0EgY29tcG9uZW50JywgcHJvcHMudHlwZSkgOiB2b2lkIDA7XG4gICAgICAgIGRpZFdhcm5VbmNvbnRyb2xsZWRUb0NvbnRyb2xsZWQgPSB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKGluc3QuX3dyYXBwZXJTdGF0ZS5jb250cm9sbGVkICYmICFjb250cm9sbGVkICYmICFkaWRXYXJuQ29udHJvbGxlZFRvVW5jb250cm9sbGVkKSB7XG4gICAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKGZhbHNlLCAnJXMgaXMgY2hhbmdpbmcgYSBjb250cm9sbGVkIGlucHV0IG9mIHR5cGUgJXMgdG8gYmUgdW5jb250cm9sbGVkLiAnICsgJ0lucHV0IGVsZW1lbnRzIHNob3VsZCBub3Qgc3dpdGNoIGZyb20gY29udHJvbGxlZCB0byB1bmNvbnRyb2xsZWQgKG9yIHZpY2UgdmVyc2EpLiAnICsgJ0RlY2lkZSBiZXR3ZWVuIHVzaW5nIGEgY29udHJvbGxlZCBvciB1bmNvbnRyb2xsZWQgaW5wdXQgJyArICdlbGVtZW50IGZvciB0aGUgbGlmZXRpbWUgb2YgdGhlIGNvbXBvbmVudC4gTW9yZSBpbmZvOiBodHRwczovL2ZiLm1lL3JlYWN0LWNvbnRyb2xsZWQtY29tcG9uZW50cycsIG93bmVyICYmIG93bmVyLmdldE5hbWUoKSB8fCAnQSBjb21wb25lbnQnLCBwcm9wcy50eXBlKSA6IHZvaWQgMDtcbiAgICAgICAgZGlkV2FybkNvbnRyb2xsZWRUb1VuY29udHJvbGxlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVE9ETzogU2hvdWxkbid0IHRoaXMgYmUgZ2V0Q2hlY2tlZChwcm9wcyk/XG4gICAgdmFyIGNoZWNrZWQgPSBwcm9wcy5jaGVja2VkO1xuICAgIGlmIChjaGVja2VkICE9IG51bGwpIHtcbiAgICAgIERPTVByb3BlcnR5T3BlcmF0aW9ucy5zZXRWYWx1ZUZvclByb3BlcnR5KFJlYWN0RE9NQ29tcG9uZW50VHJlZS5nZXROb2RlRnJvbUluc3RhbmNlKGluc3QpLCAnY2hlY2tlZCcsIGNoZWNrZWQgfHwgZmFsc2UpO1xuICAgIH1cblxuICAgIHZhciBub2RlID0gUmVhY3RET01Db21wb25lbnRUcmVlLmdldE5vZGVGcm9tSW5zdGFuY2UoaW5zdCk7XG4gICAgdmFyIHZhbHVlID0gTGlua2VkVmFsdWVVdGlscy5nZXRWYWx1ZShwcm9wcyk7XG4gICAgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICAgIGlmICh2YWx1ZSA9PT0gMCAmJiBub2RlLnZhbHVlID09PSAnJykge1xuICAgICAgICBub2RlLnZhbHVlID0gJzAnO1xuICAgICAgICAvLyBOb3RlOiBJRTkgcmVwb3J0cyBhIG51bWJlciBpbnB1dHMgYXMgJ3RleHQnLCBzbyBjaGVjayBwcm9wcyBpbnN0ZWFkLlxuICAgICAgfSBlbHNlIGlmIChwcm9wcy50eXBlID09PSAnbnVtYmVyJykge1xuICAgICAgICAvLyBTaW11bGF0ZSBgaW5wdXQudmFsdWVBc051bWJlcmAuIElFOSBkb2VzIG5vdCBzdXBwb3J0IGl0XG4gICAgICAgIHZhciB2YWx1ZUFzTnVtYmVyID0gcGFyc2VGbG9hdChub2RlLnZhbHVlLCAxMCkgfHwgMDtcblxuICAgICAgICBpZiAoXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgICAgICB2YWx1ZSAhPSB2YWx1ZUFzTnVtYmVyIHx8XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgICAgICB2YWx1ZSA9PSB2YWx1ZUFzTnVtYmVyICYmIG5vZGUudmFsdWUgIT0gdmFsdWUpIHtcbiAgICAgICAgICAvLyBDYXN0IGB2YWx1ZWAgdG8gYSBzdHJpbmcgdG8gZW5zdXJlIHRoZSB2YWx1ZSBpcyBzZXQgY29ycmVjdGx5LiBXaGlsZVxuICAgICAgICAgIC8vIGJyb3dzZXJzIHR5cGljYWxseSBkbyB0aGlzIGFzIG5lY2Vzc2FyeSwganNkb20gZG9lc24ndC5cbiAgICAgICAgICBub2RlLnZhbHVlID0gJycgKyB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChub2RlLnZhbHVlICE9PSAnJyArIHZhbHVlKSB7XG4gICAgICAgIC8vIENhc3QgYHZhbHVlYCB0byBhIHN0cmluZyB0byBlbnN1cmUgdGhlIHZhbHVlIGlzIHNldCBjb3JyZWN0bHkuIFdoaWxlXG4gICAgICAgIC8vIGJyb3dzZXJzIHR5cGljYWxseSBkbyB0aGlzIGFzIG5lY2Vzc2FyeSwganNkb20gZG9lc24ndC5cbiAgICAgICAgbm9kZS52YWx1ZSA9ICcnICsgdmFsdWU7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChwcm9wcy52YWx1ZSA9PSBudWxsICYmIHByb3BzLmRlZmF1bHRWYWx1ZSAhPSBudWxsKSB7XG4gICAgICAgIC8vIEluIENocm9tZSwgYXNzaWduaW5nIGRlZmF1bHRWYWx1ZSB0byBjZXJ0YWluIGlucHV0IHR5cGVzIHRyaWdnZXJzIGlucHV0IHZhbGlkYXRpb24uXG4gICAgICAgIC8vIEZvciBudW1iZXIgaW5wdXRzLCB0aGUgZGlzcGxheSB2YWx1ZSBsb3NlcyB0cmFpbGluZyBkZWNpbWFsIHBvaW50cy4gRm9yIGVtYWlsIGlucHV0cyxcbiAgICAgICAgLy8gQ2hyb21lIHJhaXNlcyBcIlRoZSBzcGVjaWZpZWQgdmFsdWUgPHg+IGlzIG5vdCBhIHZhbGlkIGVtYWlsIGFkZHJlc3NcIi5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gSGVyZSB3ZSBjaGVjayB0byBzZWUgaWYgdGhlIGRlZmF1bHRWYWx1ZSBoYXMgYWN0dWFsbHkgY2hhbmdlZCwgYXZvaWRpbmcgdGhlc2UgcHJvYmxlbXNcbiAgICAgICAgLy8gd2hlbiB0aGUgdXNlciBpcyBpbnB1dHRpbmcgdGV4dFxuICAgICAgICAvL1xuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzcyNTNcbiAgICAgICAgaWYgKG5vZGUuZGVmYXVsdFZhbHVlICE9PSAnJyArIHByb3BzLmRlZmF1bHRWYWx1ZSkge1xuICAgICAgICAgIG5vZGUuZGVmYXVsdFZhbHVlID0gJycgKyBwcm9wcy5kZWZhdWx0VmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChwcm9wcy5jaGVja2VkID09IG51bGwgJiYgcHJvcHMuZGVmYXVsdENoZWNrZWQgIT0gbnVsbCkge1xuICAgICAgICBub2RlLmRlZmF1bHRDaGVja2VkID0gISFwcm9wcy5kZWZhdWx0Q2hlY2tlZDtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgcG9zdE1vdW50V3JhcHBlcjogZnVuY3Rpb24gKGluc3QpIHtcbiAgICB2YXIgcHJvcHMgPSBpbnN0Ll9jdXJyZW50RWxlbWVudC5wcm9wcztcblxuICAgIC8vIFRoaXMgaXMgaW4gcG9zdE1vdW50IGJlY2F1c2Ugd2UgbmVlZCBhY2Nlc3MgdG8gdGhlIERPTSBub2RlLCB3aGljaCBpcyBub3RcbiAgICAvLyBhdmFpbGFibGUgdW50aWwgYWZ0ZXIgdGhlIGNvbXBvbmVudCBoYXMgbW91bnRlZC5cbiAgICB2YXIgbm9kZSA9IFJlYWN0RE9NQ29tcG9uZW50VHJlZS5nZXROb2RlRnJvbUluc3RhbmNlKGluc3QpO1xuXG4gICAgLy8gRGV0YWNoIHZhbHVlIGZyb20gZGVmYXVsdFZhbHVlLiBXZSB3b24ndCBkbyBhbnl0aGluZyBpZiB3ZSdyZSB3b3JraW5nIG9uXG4gICAgLy8gc3VibWl0IG9yIHJlc2V0IGlucHV0cyBhcyB0aG9zZSB2YWx1ZXMgJiBkZWZhdWx0VmFsdWVzIGFyZSBsaW5rZWQuIFRoZXlcbiAgICAvLyBhcmUgbm90IHJlc2V0YWJsZSBub2RlcyBzbyB0aGlzIG9wZXJhdGlvbiBkb2Vzbid0IG1hdHRlciBhbmQgYWN0dWFsbHlcbiAgICAvLyByZW1vdmVzIGJyb3dzZXItZGVmYXVsdCB2YWx1ZXMgKGVnIFwiU3VibWl0IFF1ZXJ5XCIpIHdoZW4gbm8gdmFsdWUgaXNcbiAgICAvLyBwcm92aWRlZC5cblxuICAgIHN3aXRjaCAocHJvcHMudHlwZSkge1xuICAgICAgY2FzZSAnc3VibWl0JzpcbiAgICAgIGNhc2UgJ3Jlc2V0JzpcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdjb2xvcic6XG4gICAgICBjYXNlICdkYXRlJzpcbiAgICAgIGNhc2UgJ2RhdGV0aW1lJzpcbiAgICAgIGNhc2UgJ2RhdGV0aW1lLWxvY2FsJzpcbiAgICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgIGNhc2UgJ3RpbWUnOlxuICAgICAgY2FzZSAnd2Vlayc6XG4gICAgICAgIC8vIFRoaXMgZml4ZXMgdGhlIG5vLXNob3cgaXNzdWUgb24gaU9TIFNhZmFyaSBhbmQgQW5kcm9pZCBDaHJvbWU6XG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvNzIzM1xuICAgICAgICBub2RlLnZhbHVlID0gJyc7XG4gICAgICAgIG5vZGUudmFsdWUgPSBub2RlLmRlZmF1bHRWYWx1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBub2RlLnZhbHVlID0gbm9kZS52YWx1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgLy8gTm9ybWFsbHksIHdlJ2QganVzdCBkbyBgbm9kZS5jaGVja2VkID0gbm9kZS5jaGVja2VkYCB1cG9uIGluaXRpYWwgbW91bnQsIGxlc3MgdGhpcyBidWdcbiAgICAvLyB0aGlzIGlzIG5lZWRlZCB0byB3b3JrIGFyb3VuZCBhIGNocm9tZSBidWcgd2hlcmUgc2V0dGluZyBkZWZhdWx0Q2hlY2tlZFxuICAgIC8vIHdpbGwgc29tZXRpbWVzIGluZmx1ZW5jZSB0aGUgdmFsdWUgb2YgY2hlY2tlZCAoZXZlbiBhZnRlciBkZXRhY2htZW50KS5cbiAgICAvLyBSZWZlcmVuY2U6IGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTYwODQxNlxuICAgIC8vIFdlIG5lZWQgdG8gdGVtcG9yYXJpbHkgdW5zZXQgbmFtZSB0byBhdm9pZCBkaXNydXB0aW5nIHJhZGlvIGJ1dHRvbiBncm91cHMuXG4gICAgdmFyIG5hbWUgPSBub2RlLm5hbWU7XG4gICAgaWYgKG5hbWUgIT09ICcnKSB7XG4gICAgICBub2RlLm5hbWUgPSAnJztcbiAgICB9XG4gICAgbm9kZS5kZWZhdWx0Q2hlY2tlZCA9ICFub2RlLmRlZmF1bHRDaGVja2VkO1xuICAgIG5vZGUuZGVmYXVsdENoZWNrZWQgPSAhbm9kZS5kZWZhdWx0Q2hlY2tlZDtcbiAgICBpZiAobmFtZSAhPT0gJycpIHtcbiAgICAgIG5vZGUubmFtZSA9IG5hbWU7XG4gICAgfVxuICB9XG59O1xuXG5mdW5jdGlvbiBfaGFuZGxlQ2hhbmdlKGV2ZW50KSB7XG4gIHZhciBwcm9wcyA9IHRoaXMuX2N1cnJlbnRFbGVtZW50LnByb3BzO1xuXG4gIHZhciByZXR1cm5WYWx1ZSA9IExpbmtlZFZhbHVlVXRpbHMuZXhlY3V0ZU9uQ2hhbmdlKHByb3BzLCBldmVudCk7XG5cbiAgLy8gSGVyZSB3ZSB1c2UgYXNhcCB0byB3YWl0IHVudGlsIGFsbCB1cGRhdGVzIGhhdmUgcHJvcGFnYXRlZCwgd2hpY2hcbiAgLy8gaXMgaW1wb3J0YW50IHdoZW4gdXNpbmcgY29udHJvbGxlZCBjb21wb25lbnRzIHdpdGhpbiBsYXllcnM6XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTY5OFxuICBSZWFjdFVwZGF0ZXMuYXNhcChmb3JjZVVwZGF0ZUlmTW91bnRlZCwgdGhpcyk7XG5cbiAgdmFyIG5hbWUgPSBwcm9wcy5uYW1lO1xuICBpZiAocHJvcHMudHlwZSA9PT0gJ3JhZGlvJyAmJiBuYW1lICE9IG51bGwpIHtcbiAgICB2YXIgcm9vdE5vZGUgPSBSZWFjdERPTUNvbXBvbmVudFRyZWUuZ2V0Tm9kZUZyb21JbnN0YW5jZSh0aGlzKTtcbiAgICB2YXIgcXVlcnlSb290ID0gcm9vdE5vZGU7XG5cbiAgICB3aGlsZSAocXVlcnlSb290LnBhcmVudE5vZGUpIHtcbiAgICAgIHF1ZXJ5Um9vdCA9IHF1ZXJ5Um9vdC5wYXJlbnROb2RlO1xuICAgIH1cblxuICAgIC8vIElmIGByb290Tm9kZS5mb3JtYCB3YXMgbm9uLW51bGwsIHRoZW4gd2UgY291bGQgdHJ5IGBmb3JtLmVsZW1lbnRzYCxcbiAgICAvLyBidXQgdGhhdCBzb21ldGltZXMgYmVoYXZlcyBzdHJhbmdlbHkgaW4gSUU4LiBXZSBjb3VsZCBhbHNvIHRyeSB1c2luZ1xuICAgIC8vIGBmb3JtLmdldEVsZW1lbnRzQnlOYW1lYCwgYnV0IHRoYXQgd2lsbCBvbmx5IHJldHVybiBkaXJlY3QgY2hpbGRyZW5cbiAgICAvLyBhbmQgd29uJ3QgaW5jbHVkZSBpbnB1dHMgdGhhdCB1c2UgdGhlIEhUTUw1IGBmb3JtPWAgYXR0cmlidXRlLiBTaW5jZVxuICAgIC8vIHRoZSBpbnB1dCBtaWdodCBub3QgZXZlbiBiZSBpbiBhIGZvcm0sIGxldCdzIGp1c3QgdXNlIHRoZSBnbG9iYWxcbiAgICAvLyBgcXVlcnlTZWxlY3RvckFsbGAgdG8gZW5zdXJlIHdlIGRvbid0IG1pc3MgYW55dGhpbmcuXG4gICAgdmFyIGdyb3VwID0gcXVlcnlSb290LnF1ZXJ5U2VsZWN0b3JBbGwoJ2lucHV0W25hbWU9JyArIEpTT04uc3RyaW5naWZ5KCcnICsgbmFtZSkgKyAnXVt0eXBlPVwicmFkaW9cIl0nKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ3JvdXAubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBvdGhlck5vZGUgPSBncm91cFtpXTtcbiAgICAgIGlmIChvdGhlck5vZGUgPT09IHJvb3ROb2RlIHx8IG90aGVyTm9kZS5mb3JtICE9PSByb290Tm9kZS5mb3JtKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgLy8gVGhpcyB3aWxsIHRocm93IGlmIHJhZGlvIGJ1dHRvbnMgcmVuZGVyZWQgYnkgZGlmZmVyZW50IGNvcGllcyBvZiBSZWFjdFxuICAgICAgLy8gYW5kIHRoZSBzYW1lIG5hbWUgYXJlIHJlbmRlcmVkIGludG8gdGhlIHNhbWUgZm9ybSAoc2FtZSBhcyAjMTkzOSkuXG4gICAgICAvLyBUaGF0J3MgcHJvYmFibHkgb2theTsgd2UgZG9uJ3Qgc3VwcG9ydCBpdCBqdXN0IGFzIHdlIGRvbid0IHN1cHBvcnRcbiAgICAgIC8vIG1peGluZyBSZWFjdCByYWRpbyBidXR0b25zIHdpdGggbm9uLVJlYWN0IG9uZXMuXG4gICAgICB2YXIgb3RoZXJJbnN0YW5jZSA9IFJlYWN0RE9NQ29tcG9uZW50VHJlZS5nZXRJbnN0YW5jZUZyb21Ob2RlKG90aGVyTm9kZSk7XG4gICAgICAhb3RoZXJJbnN0YW5jZSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICdSZWFjdERPTUlucHV0OiBNaXhpbmcgUmVhY3QgYW5kIG5vbi1SZWFjdCByYWRpbyBpbnB1dHMgd2l0aCB0aGUgc2FtZSBgbmFtZWAgaXMgbm90IHN1cHBvcnRlZC4nKSA6IF9wcm9kSW52YXJpYW50KCc5MCcpIDogdm9pZCAwO1xuICAgICAgLy8gSWYgdGhpcyBpcyBhIGNvbnRyb2xsZWQgcmFkaW8gYnV0dG9uIGdyb3VwLCBmb3JjaW5nIHRoZSBpbnB1dCB0aGF0XG4gICAgICAvLyB3YXMgcHJldmlvdXNseSBjaGVja2VkIHRvIHVwZGF0ZSB3aWxsIGNhdXNlIGl0IHRvIGJlIGNvbWUgcmUtY2hlY2tlZFxuICAgICAgLy8gYXMgYXBwcm9wcmlhdGUuXG4gICAgICBSZWFjdFVwZGF0ZXMuYXNhcChmb3JjZVVwZGF0ZUlmTW91bnRlZCwgb3RoZXJJbnN0YW5jZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJldHVyblZhbHVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0RE9NSW5wdXQ7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1kb20vbGliL1JlYWN0RE9NSW5wdXQuanMiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgRE9NUHJvcGVydHkgPSByZXF1aXJlKCcuL0RPTVByb3BlcnR5Jyk7XG52YXIgUmVhY3RDb21wb25lbnRUcmVlSG9vayA9IHJlcXVpcmUoJ3JlYWN0L2xpYi9SZWFjdENvbXBvbmVudFRyZWVIb29rJyk7XG5cbnZhciB3YXJuaW5nID0gcmVxdWlyZSgnZmJqcy9saWIvd2FybmluZycpO1xuXG52YXIgd2FybmVkUHJvcGVydGllcyA9IHt9O1xudmFyIHJBUklBID0gbmV3IFJlZ0V4cCgnXihhcmlhKS1bJyArIERPTVByb3BlcnR5LkFUVFJJQlVURV9OQU1FX0NIQVIgKyAnXSokJyk7XG5cbmZ1bmN0aW9uIHZhbGlkYXRlUHJvcGVydHkodGFnTmFtZSwgbmFtZSwgZGVidWdJRCkge1xuICBpZiAod2FybmVkUHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eShuYW1lKSAmJiB3YXJuZWRQcm9wZXJ0aWVzW25hbWVdKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAockFSSUEudGVzdChuYW1lKSkge1xuICAgIHZhciBsb3dlckNhc2VkTmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICB2YXIgc3RhbmRhcmROYW1lID0gRE9NUHJvcGVydHkuZ2V0UG9zc2libGVTdGFuZGFyZE5hbWUuaGFzT3duUHJvcGVydHkobG93ZXJDYXNlZE5hbWUpID8gRE9NUHJvcGVydHkuZ2V0UG9zc2libGVTdGFuZGFyZE5hbWVbbG93ZXJDYXNlZE5hbWVdIDogbnVsbDtcblxuICAgIC8vIElmIHRoaXMgaXMgYW4gYXJpYS0qIGF0dHJpYnV0ZSwgYnV0IGlzIG5vdCBsaXN0ZWQgaW4gdGhlIGtub3duIERPTVxuICAgIC8vIERPTSBwcm9wZXJ0aWVzLCB0aGVuIGl0IGlzIGFuIGludmFsaWQgYXJpYS0qIGF0dHJpYnV0ZS5cbiAgICBpZiAoc3RhbmRhcmROYW1lID09IG51bGwpIHtcbiAgICAgIHdhcm5lZFByb3BlcnRpZXNbbmFtZV0gPSB0cnVlO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICAvLyBhcmlhLSogYXR0cmlidXRlcyBzaG91bGQgYmUgbG93ZXJjYXNlOyBzdWdnZXN0IHRoZSBsb3dlcmNhc2UgdmVyc2lvbi5cbiAgICBpZiAobmFtZSAhPT0gc3RhbmRhcmROYW1lKSB7XG4gICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyhmYWxzZSwgJ1Vua25vd24gQVJJQSBhdHRyaWJ1dGUgJXMuIERpZCB5b3UgbWVhbiAlcz8lcycsIG5hbWUsIHN0YW5kYXJkTmFtZSwgUmVhY3RDb21wb25lbnRUcmVlSG9vay5nZXRTdGFja0FkZGVuZHVtQnlJRChkZWJ1Z0lEKSkgOiB2b2lkIDA7XG4gICAgICB3YXJuZWRQcm9wZXJ0aWVzW25hbWVdID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiB3YXJuSW52YWxpZEFSSUFQcm9wcyhkZWJ1Z0lELCBlbGVtZW50KSB7XG4gIHZhciBpbnZhbGlkUHJvcHMgPSBbXTtcblxuICBmb3IgKHZhciBrZXkgaW4gZWxlbWVudC5wcm9wcykge1xuICAgIHZhciBpc1ZhbGlkID0gdmFsaWRhdGVQcm9wZXJ0eShlbGVtZW50LnR5cGUsIGtleSwgZGVidWdJRCk7XG4gICAgaWYgKCFpc1ZhbGlkKSB7XG4gICAgICBpbnZhbGlkUHJvcHMucHVzaChrZXkpO1xuICAgIH1cbiAgfVxuXG4gIHZhciB1bmtub3duUHJvcFN0cmluZyA9IGludmFsaWRQcm9wcy5tYXAoZnVuY3Rpb24gKHByb3ApIHtcbiAgICByZXR1cm4gJ2AnICsgcHJvcCArICdgJztcbiAgfSkuam9pbignLCAnKTtcblxuICBpZiAoaW52YWxpZFByb3BzLmxlbmd0aCA9PT0gMSkge1xuICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKGZhbHNlLCAnSW52YWxpZCBhcmlhIHByb3AgJXMgb24gPCVzPiB0YWcuICcgKyAnRm9yIGRldGFpbHMsIHNlZSBodHRwczovL2ZiLm1lL2ludmFsaWQtYXJpYS1wcm9wJXMnLCB1bmtub3duUHJvcFN0cmluZywgZWxlbWVudC50eXBlLCBSZWFjdENvbXBvbmVudFRyZWVIb29rLmdldFN0YWNrQWRkZW5kdW1CeUlEKGRlYnVnSUQpKSA6IHZvaWQgMDtcbiAgfSBlbHNlIGlmIChpbnZhbGlkUHJvcHMubGVuZ3RoID4gMSkge1xuICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKGZhbHNlLCAnSW52YWxpZCBhcmlhIHByb3BzICVzIG9uIDwlcz4gdGFnLiAnICsgJ0ZvciBkZXRhaWxzLCBzZWUgaHR0cHM6Ly9mYi5tZS9pbnZhbGlkLWFyaWEtcHJvcCVzJywgdW5rbm93blByb3BTdHJpbmcsIGVsZW1lbnQudHlwZSwgUmVhY3RDb21wb25lbnRUcmVlSG9vay5nZXRTdGFja0FkZGVuZHVtQnlJRChkZWJ1Z0lEKSkgOiB2b2lkIDA7XG4gIH1cbn1cblxuZnVuY3Rpb24gaGFuZGxlRWxlbWVudChkZWJ1Z0lELCBlbGVtZW50KSB7XG4gIGlmIChlbGVtZW50ID09IG51bGwgfHwgdHlwZW9mIGVsZW1lbnQudHlwZSAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKGVsZW1lbnQudHlwZS5pbmRleE9mKCctJykgPj0gMCB8fCBlbGVtZW50LnByb3BzLmlzKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgd2FybkludmFsaWRBUklBUHJvcHMoZGVidWdJRCwgZWxlbWVudCk7XG59XG5cbnZhciBSZWFjdERPTUludmFsaWRBUklBSG9vayA9IHtcbiAgb25CZWZvcmVNb3VudENvbXBvbmVudDogZnVuY3Rpb24gKGRlYnVnSUQsIGVsZW1lbnQpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaGFuZGxlRWxlbWVudChkZWJ1Z0lELCBlbGVtZW50KTtcbiAgICB9XG4gIH0sXG4gIG9uQmVmb3JlVXBkYXRlQ29tcG9uZW50OiBmdW5jdGlvbiAoZGVidWdJRCwgZWxlbWVudCkge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBoYW5kbGVFbGVtZW50KGRlYnVnSUQsIGVsZW1lbnQpO1xuICAgIH1cbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdERPTUludmFsaWRBUklBSG9vaztcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3JlYWN0LWRvbS9saWIvUmVhY3RET01JbnZhbGlkQVJJQUhvb2suanMiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUmVhY3RDb21wb25lbnRUcmVlSG9vayA9IHJlcXVpcmUoJ3JlYWN0L2xpYi9SZWFjdENvbXBvbmVudFRyZWVIb29rJyk7XG5cbnZhciB3YXJuaW5nID0gcmVxdWlyZSgnZmJqcy9saWIvd2FybmluZycpO1xuXG52YXIgZGlkV2FyblZhbHVlTnVsbCA9IGZhbHNlO1xuXG5mdW5jdGlvbiBoYW5kbGVFbGVtZW50KGRlYnVnSUQsIGVsZW1lbnQpIHtcbiAgaWYgKGVsZW1lbnQgPT0gbnVsbCkge1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoZWxlbWVudC50eXBlICE9PSAnaW5wdXQnICYmIGVsZW1lbnQudHlwZSAhPT0gJ3RleHRhcmVhJyAmJiBlbGVtZW50LnR5cGUgIT09ICdzZWxlY3QnKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChlbGVtZW50LnByb3BzICE9IG51bGwgJiYgZWxlbWVudC5wcm9wcy52YWx1ZSA9PT0gbnVsbCAmJiAhZGlkV2FyblZhbHVlTnVsbCkge1xuICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKGZhbHNlLCAnYHZhbHVlYCBwcm9wIG9uIGAlc2Agc2hvdWxkIG5vdCBiZSBudWxsLiAnICsgJ0NvbnNpZGVyIHVzaW5nIHRoZSBlbXB0eSBzdHJpbmcgdG8gY2xlYXIgdGhlIGNvbXBvbmVudCBvciBgdW5kZWZpbmVkYCAnICsgJ2ZvciB1bmNvbnRyb2xsZWQgY29tcG9uZW50cy4lcycsIGVsZW1lbnQudHlwZSwgUmVhY3RDb21wb25lbnRUcmVlSG9vay5nZXRTdGFja0FkZGVuZHVtQnlJRChkZWJ1Z0lEKSkgOiB2b2lkIDA7XG5cbiAgICBkaWRXYXJuVmFsdWVOdWxsID0gdHJ1ZTtcbiAgfVxufVxuXG52YXIgUmVhY3RET01OdWxsSW5wdXRWYWx1ZVByb3BIb29rID0ge1xuICBvbkJlZm9yZU1vdW50Q29tcG9uZW50OiBmdW5jdGlvbiAoZGVidWdJRCwgZWxlbWVudCkge1xuICAgIGhhbmRsZUVsZW1lbnQoZGVidWdJRCwgZWxlbWVudCk7XG4gIH0sXG4gIG9uQmVmb3JlVXBkYXRlQ29tcG9uZW50OiBmdW5jdGlvbiAoZGVidWdJRCwgZWxlbWVudCkge1xuICAgIGhhbmRsZUVsZW1lbnQoZGVidWdJRCwgZWxlbWVudCk7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RET01OdWxsSW5wdXRWYWx1ZVByb3BIb29rO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QtZG9tL2xpYi9SZWFjdERPTU51bGxJbnB1dFZhbHVlUHJvcEhvb2suanMiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgX2Fzc2lnbiA9IHJlcXVpcmUoJ29iamVjdC1hc3NpZ24nKTtcblxudmFyIFJlYWN0ID0gcmVxdWlyZSgncmVhY3QvbGliL1JlYWN0Jyk7XG52YXIgUmVhY3RET01Db21wb25lbnRUcmVlID0gcmVxdWlyZSgnLi9SZWFjdERPTUNvbXBvbmVudFRyZWUnKTtcbnZhciBSZWFjdERPTVNlbGVjdCA9IHJlcXVpcmUoJy4vUmVhY3RET01TZWxlY3QnKTtcblxudmFyIHdhcm5pbmcgPSByZXF1aXJlKCdmYmpzL2xpYi93YXJuaW5nJyk7XG52YXIgZGlkV2FybkludmFsaWRPcHRpb25DaGlsZHJlbiA9IGZhbHNlO1xuXG5mdW5jdGlvbiBmbGF0dGVuQ2hpbGRyZW4oY2hpbGRyZW4pIHtcbiAgdmFyIGNvbnRlbnQgPSAnJztcblxuICAvLyBGbGF0dGVuIGNoaWxkcmVuIGFuZCB3YXJuIGlmIHRoZXkgYXJlbid0IHN0cmluZ3Mgb3IgbnVtYmVycztcbiAgLy8gaW52YWxpZCB0eXBlcyBhcmUgaWdub3JlZC5cbiAgUmVhY3QuQ2hpbGRyZW4uZm9yRWFjaChjaGlsZHJlbiwgZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgaWYgKGNoaWxkID09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBjaGlsZCA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIGNoaWxkID09PSAnbnVtYmVyJykge1xuICAgICAgY29udGVudCArPSBjaGlsZDtcbiAgICB9IGVsc2UgaWYgKCFkaWRXYXJuSW52YWxpZE9wdGlvbkNoaWxkcmVuKSB7XG4gICAgICBkaWRXYXJuSW52YWxpZE9wdGlvbkNoaWxkcmVuID0gdHJ1ZTtcbiAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKGZhbHNlLCAnT25seSBzdHJpbmdzIGFuZCBudW1iZXJzIGFyZSBzdXBwb3J0ZWQgYXMgPG9wdGlvbj4gY2hpbGRyZW4uJykgOiB2b2lkIDA7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gY29udGVudDtcbn1cblxuLyoqXG4gKiBJbXBsZW1lbnRzIGFuIDxvcHRpb24+IGhvc3QgY29tcG9uZW50IHRoYXQgd2FybnMgd2hlbiBgc2VsZWN0ZWRgIGlzIHNldC5cbiAqL1xudmFyIFJlYWN0RE9NT3B0aW9uID0ge1xuICBtb3VudFdyYXBwZXI6IGZ1bmN0aW9uIChpbnN0LCBwcm9wcywgaG9zdFBhcmVudCkge1xuICAgIC8vIFRPRE8gKHl1bmdzdGVycyk6IFJlbW92ZSBzdXBwb3J0IGZvciBgc2VsZWN0ZWRgIGluIDxvcHRpb24+LlxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyhwcm9wcy5zZWxlY3RlZCA9PSBudWxsLCAnVXNlIHRoZSBgZGVmYXVsdFZhbHVlYCBvciBgdmFsdWVgIHByb3BzIG9uIDxzZWxlY3Q+IGluc3RlYWQgb2YgJyArICdzZXR0aW5nIGBzZWxlY3RlZGAgb24gPG9wdGlvbj4uJykgOiB2b2lkIDA7XG4gICAgfVxuXG4gICAgLy8gTG9vayB1cCB3aGV0aGVyIHRoaXMgb3B0aW9uIGlzICdzZWxlY3RlZCdcbiAgICB2YXIgc2VsZWN0VmFsdWUgPSBudWxsO1xuICAgIGlmIChob3N0UGFyZW50ICE9IG51bGwpIHtcbiAgICAgIHZhciBzZWxlY3RQYXJlbnQgPSBob3N0UGFyZW50O1xuXG4gICAgICBpZiAoc2VsZWN0UGFyZW50Ll90YWcgPT09ICdvcHRncm91cCcpIHtcbiAgICAgICAgc2VsZWN0UGFyZW50ID0gc2VsZWN0UGFyZW50Ll9ob3N0UGFyZW50O1xuICAgICAgfVxuXG4gICAgICBpZiAoc2VsZWN0UGFyZW50ICE9IG51bGwgJiYgc2VsZWN0UGFyZW50Ll90YWcgPT09ICdzZWxlY3QnKSB7XG4gICAgICAgIHNlbGVjdFZhbHVlID0gUmVhY3RET01TZWxlY3QuZ2V0U2VsZWN0VmFsdWVDb250ZXh0KHNlbGVjdFBhcmVudCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSWYgdGhlIHZhbHVlIGlzIG51bGwgKGUuZy4sIG5vIHNwZWNpZmllZCB2YWx1ZSBvciBhZnRlciBpbml0aWFsIG1vdW50KVxuICAgIC8vIG9yIG1pc3NpbmcgKGUuZy4sIGZvciA8ZGF0YWxpc3Q+KSwgd2UgZG9uJ3QgY2hhbmdlIHByb3BzLnNlbGVjdGVkXG4gICAgdmFyIHNlbGVjdGVkID0gbnVsbDtcbiAgICBpZiAoc2VsZWN0VmFsdWUgIT0gbnVsbCkge1xuICAgICAgdmFyIHZhbHVlO1xuICAgICAgaWYgKHByb3BzLnZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgdmFsdWUgPSBwcm9wcy52YWx1ZSArICcnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsdWUgPSBmbGF0dGVuQ2hpbGRyZW4ocHJvcHMuY2hpbGRyZW4pO1xuICAgICAgfVxuICAgICAgc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHNlbGVjdFZhbHVlKSkge1xuICAgICAgICAvLyBtdWx0aXBsZVxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNlbGVjdFZhbHVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaWYgKCcnICsgc2VsZWN0VmFsdWVbaV0gPT09IHZhbHVlKSB7XG4gICAgICAgICAgICBzZWxlY3RlZCA9IHRydWU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNlbGVjdGVkID0gJycgKyBzZWxlY3RWYWx1ZSA9PT0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaW5zdC5fd3JhcHBlclN0YXRlID0geyBzZWxlY3RlZDogc2VsZWN0ZWQgfTtcbiAgfSxcblxuICBwb3N0TW91bnRXcmFwcGVyOiBmdW5jdGlvbiAoaW5zdCkge1xuICAgIC8vIHZhbHVlPVwiXCIgc2hvdWxkIG1ha2UgYSB2YWx1ZSBhdHRyaWJ1dGUgKCM2MjE5KVxuICAgIHZhciBwcm9wcyA9IGluc3QuX2N1cnJlbnRFbGVtZW50LnByb3BzO1xuICAgIGlmIChwcm9wcy52YWx1ZSAhPSBudWxsKSB7XG4gICAgICB2YXIgbm9kZSA9IFJlYWN0RE9NQ29tcG9uZW50VHJlZS5nZXROb2RlRnJvbUluc3RhbmNlKGluc3QpO1xuICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoJ3ZhbHVlJywgcHJvcHMudmFsdWUpO1xuICAgIH1cbiAgfSxcblxuICBnZXRIb3N0UHJvcHM6IGZ1bmN0aW9uIChpbnN0LCBwcm9wcykge1xuICAgIHZhciBob3N0UHJvcHMgPSBfYXNzaWduKHsgc2VsZWN0ZWQ6IHVuZGVmaW5lZCwgY2hpbGRyZW46IHVuZGVmaW5lZCB9LCBwcm9wcyk7XG5cbiAgICAvLyBSZWFkIHN0YXRlIG9ubHkgZnJvbSBpbml0aWFsIG1vdW50IGJlY2F1c2UgPHNlbGVjdD4gdXBkYXRlcyB2YWx1ZVxuICAgIC8vIG1hbnVhbGx5OyB3ZSBuZWVkIHRoZSBpbml0aWFsIHN0YXRlIG9ubHkgZm9yIHNlcnZlciByZW5kZXJpbmdcbiAgICBpZiAoaW5zdC5fd3JhcHBlclN0YXRlLnNlbGVjdGVkICE9IG51bGwpIHtcbiAgICAgIGhvc3RQcm9wcy5zZWxlY3RlZCA9IGluc3QuX3dyYXBwZXJTdGF0ZS5zZWxlY3RlZDtcbiAgICB9XG5cbiAgICB2YXIgY29udGVudCA9IGZsYXR0ZW5DaGlsZHJlbihwcm9wcy5jaGlsZHJlbik7XG5cbiAgICBpZiAoY29udGVudCkge1xuICAgICAgaG9zdFByb3BzLmNoaWxkcmVuID0gY29udGVudDtcbiAgICB9XG5cbiAgICByZXR1cm4gaG9zdFByb3BzO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0RE9NT3B0aW9uO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QtZG9tL2xpYi9SZWFjdERPTU9wdGlvbi5qcyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBFeGVjdXRpb25FbnZpcm9ubWVudCA9IHJlcXVpcmUoJ2ZianMvbGliL0V4ZWN1dGlvbkVudmlyb25tZW50Jyk7XG5cbnZhciBnZXROb2RlRm9yQ2hhcmFjdGVyT2Zmc2V0ID0gcmVxdWlyZSgnLi9nZXROb2RlRm9yQ2hhcmFjdGVyT2Zmc2V0Jyk7XG52YXIgZ2V0VGV4dENvbnRlbnRBY2Nlc3NvciA9IHJlcXVpcmUoJy4vZ2V0VGV4dENvbnRlbnRBY2Nlc3NvcicpO1xuXG4vKipcbiAqIFdoaWxlIGBpc0NvbGxhcHNlZGAgaXMgYXZhaWxhYmxlIG9uIHRoZSBTZWxlY3Rpb24gb2JqZWN0IGFuZCBgY29sbGFwc2VkYFxuICogaXMgYXZhaWxhYmxlIG9uIHRoZSBSYW5nZSBvYmplY3QsIElFMTEgc29tZXRpbWVzIGdldHMgdGhlbSB3cm9uZy5cbiAqIElmIHRoZSBhbmNob3IvZm9jdXMgbm9kZXMgYW5kIG9mZnNldHMgYXJlIHRoZSBzYW1lLCB0aGUgcmFuZ2UgaXMgY29sbGFwc2VkLlxuICovXG5mdW5jdGlvbiBpc0NvbGxhcHNlZChhbmNob3JOb2RlLCBhbmNob3JPZmZzZXQsIGZvY3VzTm9kZSwgZm9jdXNPZmZzZXQpIHtcbiAgcmV0dXJuIGFuY2hvck5vZGUgPT09IGZvY3VzTm9kZSAmJiBhbmNob3JPZmZzZXQgPT09IGZvY3VzT2Zmc2V0O1xufVxuXG4vKipcbiAqIEdldCB0aGUgYXBwcm9wcmlhdGUgYW5jaG9yIGFuZCBmb2N1cyBub2RlL29mZnNldCBwYWlycyBmb3IgSUUuXG4gKlxuICogVGhlIGNhdGNoIGhlcmUgaXMgdGhhdCBJRSdzIHNlbGVjdGlvbiBBUEkgZG9lc24ndCBwcm92aWRlIGluZm9ybWF0aW9uXG4gKiBhYm91dCB3aGV0aGVyIHRoZSBzZWxlY3Rpb24gaXMgZm9yd2FyZCBvciBiYWNrd2FyZCwgc28gd2UgaGF2ZSB0b1xuICogYmVoYXZlIGFzIHRob3VnaCBpdCdzIGFsd2F5cyBmb3J3YXJkLlxuICpcbiAqIElFIHRleHQgZGlmZmVycyBmcm9tIG1vZGVybiBzZWxlY3Rpb24gaW4gdGhhdCBpdCBiZWhhdmVzIGFzIHRob3VnaFxuICogYmxvY2sgZWxlbWVudHMgZW5kIHdpdGggYSBuZXcgbGluZS4gVGhpcyBtZWFucyBjaGFyYWN0ZXIgb2Zmc2V0cyB3aWxsXG4gKiBkaWZmZXIgYmV0d2VlbiB0aGUgdHdvIEFQSXMuXG4gKlxuICogQHBhcmFtIHtET01FbGVtZW50fSBub2RlXG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKi9cbmZ1bmN0aW9uIGdldElFT2Zmc2V0cyhub2RlKSB7XG4gIHZhciBzZWxlY3Rpb24gPSBkb2N1bWVudC5zZWxlY3Rpb247XG4gIHZhciBzZWxlY3RlZFJhbmdlID0gc2VsZWN0aW9uLmNyZWF0ZVJhbmdlKCk7XG4gIHZhciBzZWxlY3RlZExlbmd0aCA9IHNlbGVjdGVkUmFuZ2UudGV4dC5sZW5ndGg7XG5cbiAgLy8gRHVwbGljYXRlIHNlbGVjdGlvbiBzbyB3ZSBjYW4gbW92ZSByYW5nZSB3aXRob3V0IGJyZWFraW5nIHVzZXIgc2VsZWN0aW9uLlxuICB2YXIgZnJvbVN0YXJ0ID0gc2VsZWN0ZWRSYW5nZS5kdXBsaWNhdGUoKTtcbiAgZnJvbVN0YXJ0Lm1vdmVUb0VsZW1lbnRUZXh0KG5vZGUpO1xuICBmcm9tU3RhcnQuc2V0RW5kUG9pbnQoJ0VuZFRvU3RhcnQnLCBzZWxlY3RlZFJhbmdlKTtcblxuICB2YXIgc3RhcnRPZmZzZXQgPSBmcm9tU3RhcnQudGV4dC5sZW5ndGg7XG4gIHZhciBlbmRPZmZzZXQgPSBzdGFydE9mZnNldCArIHNlbGVjdGVkTGVuZ3RoO1xuXG4gIHJldHVybiB7XG4gICAgc3RhcnQ6IHN0YXJ0T2Zmc2V0LFxuICAgIGVuZDogZW5kT2Zmc2V0XG4gIH07XG59XG5cbi8qKlxuICogQHBhcmFtIHtET01FbGVtZW50fSBub2RlXG4gKiBAcmV0dXJuIHs/b2JqZWN0fVxuICovXG5mdW5jdGlvbiBnZXRNb2Rlcm5PZmZzZXRzKG5vZGUpIHtcbiAgdmFyIHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24gJiYgd2luZG93LmdldFNlbGVjdGlvbigpO1xuXG4gIGlmICghc2VsZWN0aW9uIHx8IHNlbGVjdGlvbi5yYW5nZUNvdW50ID09PSAwKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB2YXIgYW5jaG9yTm9kZSA9IHNlbGVjdGlvbi5hbmNob3JOb2RlO1xuICB2YXIgYW5jaG9yT2Zmc2V0ID0gc2VsZWN0aW9uLmFuY2hvck9mZnNldDtcbiAgdmFyIGZvY3VzTm9kZSA9IHNlbGVjdGlvbi5mb2N1c05vZGU7XG4gIHZhciBmb2N1c09mZnNldCA9IHNlbGVjdGlvbi5mb2N1c09mZnNldDtcblxuICB2YXIgY3VycmVudFJhbmdlID0gc2VsZWN0aW9uLmdldFJhbmdlQXQoMCk7XG5cbiAgLy8gSW4gRmlyZWZveCwgcmFuZ2Uuc3RhcnRDb250YWluZXIgYW5kIHJhbmdlLmVuZENvbnRhaW5lciBjYW4gYmUgXCJhbm9ueW1vdXNcbiAgLy8gZGl2c1wiLCBlLmcuIHRoZSB1cC9kb3duIGJ1dHRvbnMgb24gYW4gPGlucHV0IHR5cGU9XCJudW1iZXJcIj4uIEFub255bW91c1xuICAvLyBkaXZzIGRvIG5vdCBzZWVtIHRvIGV4cG9zZSBwcm9wZXJ0aWVzLCB0cmlnZ2VyaW5nIGEgXCJQZXJtaXNzaW9uIGRlbmllZFxuICAvLyBlcnJvclwiIGlmIGFueSBvZiBpdHMgcHJvcGVydGllcyBhcmUgYWNjZXNzZWQuIFRoZSBvbmx5IHNlZW1pbmdseSBwb3NzaWJsZVxuICAvLyB3YXkgdG8gYXZvaWQgZXJyb3JpbmcgaXMgdG8gYWNjZXNzIGEgcHJvcGVydHkgdGhhdCB0eXBpY2FsbHkgd29ya3MgZm9yXG4gIC8vIG5vbi1hbm9ueW1vdXMgZGl2cyBhbmQgY2F0Y2ggYW55IGVycm9yIHRoYXQgbWF5IG90aGVyd2lzZSBhcmlzZS4gU2VlXG4gIC8vIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTIwODQyN1xuICB0cnkge1xuICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC1leHByZXNzaW9ucyAqL1xuICAgIGN1cnJlbnRSYW5nZS5zdGFydENvbnRhaW5lci5ub2RlVHlwZTtcbiAgICBjdXJyZW50UmFuZ2UuZW5kQ29udGFpbmVyLm5vZGVUeXBlO1xuICAgIC8qIGVzbGludC1lbmFibGUgbm8tdW51c2VkLWV4cHJlc3Npb25zICovXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIElmIHRoZSBub2RlIGFuZCBvZmZzZXQgdmFsdWVzIGFyZSB0aGUgc2FtZSwgdGhlIHNlbGVjdGlvbiBpcyBjb2xsYXBzZWQuXG4gIC8vIGBTZWxlY3Rpb24uaXNDb2xsYXBzZWRgIGlzIGF2YWlsYWJsZSBuYXRpdmVseSwgYnV0IElFIHNvbWV0aW1lcyBnZXRzXG4gIC8vIHRoaXMgdmFsdWUgd3JvbmcuXG4gIHZhciBpc1NlbGVjdGlvbkNvbGxhcHNlZCA9IGlzQ29sbGFwc2VkKHNlbGVjdGlvbi5hbmNob3JOb2RlLCBzZWxlY3Rpb24uYW5jaG9yT2Zmc2V0LCBzZWxlY3Rpb24uZm9jdXNOb2RlLCBzZWxlY3Rpb24uZm9jdXNPZmZzZXQpO1xuXG4gIHZhciByYW5nZUxlbmd0aCA9IGlzU2VsZWN0aW9uQ29sbGFwc2VkID8gMCA6IGN1cnJlbnRSYW5nZS50b1N0cmluZygpLmxlbmd0aDtcblxuICB2YXIgdGVtcFJhbmdlID0gY3VycmVudFJhbmdlLmNsb25lUmFuZ2UoKTtcbiAgdGVtcFJhbmdlLnNlbGVjdE5vZGVDb250ZW50cyhub2RlKTtcbiAgdGVtcFJhbmdlLnNldEVuZChjdXJyZW50UmFuZ2Uuc3RhcnRDb250YWluZXIsIGN1cnJlbnRSYW5nZS5zdGFydE9mZnNldCk7XG5cbiAgdmFyIGlzVGVtcFJhbmdlQ29sbGFwc2VkID0gaXNDb2xsYXBzZWQodGVtcFJhbmdlLnN0YXJ0Q29udGFpbmVyLCB0ZW1wUmFuZ2Uuc3RhcnRPZmZzZXQsIHRlbXBSYW5nZS5lbmRDb250YWluZXIsIHRlbXBSYW5nZS5lbmRPZmZzZXQpO1xuXG4gIHZhciBzdGFydCA9IGlzVGVtcFJhbmdlQ29sbGFwc2VkID8gMCA6IHRlbXBSYW5nZS50b1N0cmluZygpLmxlbmd0aDtcbiAgdmFyIGVuZCA9IHN0YXJ0ICsgcmFuZ2VMZW5ndGg7XG5cbiAgLy8gRGV0ZWN0IHdoZXRoZXIgdGhlIHNlbGVjdGlvbiBpcyBiYWNrd2FyZC5cbiAgdmFyIGRldGVjdGlvblJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcbiAgZGV0ZWN0aW9uUmFuZ2Uuc2V0U3RhcnQoYW5jaG9yTm9kZSwgYW5jaG9yT2Zmc2V0KTtcbiAgZGV0ZWN0aW9uUmFuZ2Uuc2V0RW5kKGZvY3VzTm9kZSwgZm9jdXNPZmZzZXQpO1xuICB2YXIgaXNCYWNrd2FyZCA9IGRldGVjdGlvblJhbmdlLmNvbGxhcHNlZDtcblxuICByZXR1cm4ge1xuICAgIHN0YXJ0OiBpc0JhY2t3YXJkID8gZW5kIDogc3RhcnQsXG4gICAgZW5kOiBpc0JhY2t3YXJkID8gc3RhcnQgOiBlbmRcbiAgfTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge0RPTUVsZW1lbnR8RE9NVGV4dE5vZGV9IG5vZGVcbiAqIEBwYXJhbSB7b2JqZWN0fSBvZmZzZXRzXG4gKi9cbmZ1bmN0aW9uIHNldElFT2Zmc2V0cyhub2RlLCBvZmZzZXRzKSB7XG4gIHZhciByYW5nZSA9IGRvY3VtZW50LnNlbGVjdGlvbi5jcmVhdGVSYW5nZSgpLmR1cGxpY2F0ZSgpO1xuICB2YXIgc3RhcnQsIGVuZDtcblxuICBpZiAob2Zmc2V0cy5lbmQgPT09IHVuZGVmaW5lZCkge1xuICAgIHN0YXJ0ID0gb2Zmc2V0cy5zdGFydDtcbiAgICBlbmQgPSBzdGFydDtcbiAgfSBlbHNlIGlmIChvZmZzZXRzLnN0YXJ0ID4gb2Zmc2V0cy5lbmQpIHtcbiAgICBzdGFydCA9IG9mZnNldHMuZW5kO1xuICAgIGVuZCA9IG9mZnNldHMuc3RhcnQ7XG4gIH0gZWxzZSB7XG4gICAgc3RhcnQgPSBvZmZzZXRzLnN0YXJ0O1xuICAgIGVuZCA9IG9mZnNldHMuZW5kO1xuICB9XG5cbiAgcmFuZ2UubW92ZVRvRWxlbWVudFRleHQobm9kZSk7XG4gIHJhbmdlLm1vdmVTdGFydCgnY2hhcmFjdGVyJywgc3RhcnQpO1xuICByYW5nZS5zZXRFbmRQb2ludCgnRW5kVG9TdGFydCcsIHJhbmdlKTtcbiAgcmFuZ2UubW92ZUVuZCgnY2hhcmFjdGVyJywgZW5kIC0gc3RhcnQpO1xuICByYW5nZS5zZWxlY3QoKTtcbn1cblxuLyoqXG4gKiBJbiBtb2Rlcm4gbm9uLUlFIGJyb3dzZXJzLCB3ZSBjYW4gc3VwcG9ydCBib3RoIGZvcndhcmQgYW5kIGJhY2t3YXJkXG4gKiBzZWxlY3Rpb25zLlxuICpcbiAqIE5vdGU6IElFMTArIHN1cHBvcnRzIHRoZSBTZWxlY3Rpb24gb2JqZWN0LCBidXQgaXQgZG9lcyBub3Qgc3VwcG9ydFxuICogdGhlIGBleHRlbmRgIG1ldGhvZCwgd2hpY2ggbWVhbnMgdGhhdCBldmVuIGluIG1vZGVybiBJRSwgaXQncyBub3QgcG9zc2libGVcbiAqIHRvIHByb2dyYW1tYXRpY2FsbHkgY3JlYXRlIGEgYmFja3dhcmQgc2VsZWN0aW9uLiBUaHVzLCBmb3IgYWxsIElFXG4gKiB2ZXJzaW9ucywgd2UgdXNlIHRoZSBvbGQgSUUgQVBJIHRvIGNyZWF0ZSBvdXIgc2VsZWN0aW9ucy5cbiAqXG4gKiBAcGFyYW0ge0RPTUVsZW1lbnR8RE9NVGV4dE5vZGV9IG5vZGVcbiAqIEBwYXJhbSB7b2JqZWN0fSBvZmZzZXRzXG4gKi9cbmZ1bmN0aW9uIHNldE1vZGVybk9mZnNldHMobm9kZSwgb2Zmc2V0cykge1xuICBpZiAoIXdpbmRvdy5nZXRTZWxlY3Rpb24pIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICB2YXIgbGVuZ3RoID0gbm9kZVtnZXRUZXh0Q29udGVudEFjY2Vzc29yKCldLmxlbmd0aDtcbiAgdmFyIHN0YXJ0ID0gTWF0aC5taW4ob2Zmc2V0cy5zdGFydCwgbGVuZ3RoKTtcbiAgdmFyIGVuZCA9IG9mZnNldHMuZW5kID09PSB1bmRlZmluZWQgPyBzdGFydCA6IE1hdGgubWluKG9mZnNldHMuZW5kLCBsZW5ndGgpO1xuXG4gIC8vIElFIDExIHVzZXMgbW9kZXJuIHNlbGVjdGlvbiwgYnV0IGRvZXNuJ3Qgc3VwcG9ydCB0aGUgZXh0ZW5kIG1ldGhvZC5cbiAgLy8gRmxpcCBiYWNrd2FyZCBzZWxlY3Rpb25zLCBzbyB3ZSBjYW4gc2V0IHdpdGggYSBzaW5nbGUgcmFuZ2UuXG4gIGlmICghc2VsZWN0aW9uLmV4dGVuZCAmJiBzdGFydCA+IGVuZCkge1xuICAgIHZhciB0ZW1wID0gZW5kO1xuICAgIGVuZCA9IHN0YXJ0O1xuICAgIHN0YXJ0ID0gdGVtcDtcbiAgfVxuXG4gIHZhciBzdGFydE1hcmtlciA9IGdldE5vZGVGb3JDaGFyYWN0ZXJPZmZzZXQobm9kZSwgc3RhcnQpO1xuICB2YXIgZW5kTWFya2VyID0gZ2V0Tm9kZUZvckNoYXJhY3Rlck9mZnNldChub2RlLCBlbmQpO1xuXG4gIGlmIChzdGFydE1hcmtlciAmJiBlbmRNYXJrZXIpIHtcbiAgICB2YXIgcmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xuICAgIHJhbmdlLnNldFN0YXJ0KHN0YXJ0TWFya2VyLm5vZGUsIHN0YXJ0TWFya2VyLm9mZnNldCk7XG4gICAgc2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpO1xuXG4gICAgaWYgKHN0YXJ0ID4gZW5kKSB7XG4gICAgICBzZWxlY3Rpb24uYWRkUmFuZ2UocmFuZ2UpO1xuICAgICAgc2VsZWN0aW9uLmV4dGVuZChlbmRNYXJrZXIubm9kZSwgZW5kTWFya2VyLm9mZnNldCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJhbmdlLnNldEVuZChlbmRNYXJrZXIubm9kZSwgZW5kTWFya2VyLm9mZnNldCk7XG4gICAgICBzZWxlY3Rpb24uYWRkUmFuZ2UocmFuZ2UpO1xuICAgIH1cbiAgfVxufVxuXG52YXIgdXNlSUVPZmZzZXRzID0gRXhlY3V0aW9uRW52aXJvbm1lbnQuY2FuVXNlRE9NICYmICdzZWxlY3Rpb24nIGluIGRvY3VtZW50ICYmICEoJ2dldFNlbGVjdGlvbicgaW4gd2luZG93KTtcblxudmFyIFJlYWN0RE9NU2VsZWN0aW9uID0ge1xuICAvKipcbiAgICogQHBhcmFtIHtET01FbGVtZW50fSBub2RlXG4gICAqL1xuICBnZXRPZmZzZXRzOiB1c2VJRU9mZnNldHMgPyBnZXRJRU9mZnNldHMgOiBnZXRNb2Rlcm5PZmZzZXRzLFxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0RPTUVsZW1lbnR8RE9NVGV4dE5vZGV9IG5vZGVcbiAgICogQHBhcmFtIHtvYmplY3R9IG9mZnNldHNcbiAgICovXG4gIHNldE9mZnNldHM6IHVzZUlFT2Zmc2V0cyA/IHNldElFT2Zmc2V0cyA6IHNldE1vZGVybk9mZnNldHNcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RET01TZWxlY3Rpb247XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1kb20vbGliL1JlYWN0RE9NU2VsZWN0aW9uLmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIF9wcm9kSW52YXJpYW50ID0gcmVxdWlyZSgnLi9yZWFjdFByb2RJbnZhcmlhbnQnKSxcbiAgICBfYXNzaWduID0gcmVxdWlyZSgnb2JqZWN0LWFzc2lnbicpO1xuXG52YXIgRE9NQ2hpbGRyZW5PcGVyYXRpb25zID0gcmVxdWlyZSgnLi9ET01DaGlsZHJlbk9wZXJhdGlvbnMnKTtcbnZhciBET01MYXp5VHJlZSA9IHJlcXVpcmUoJy4vRE9NTGF6eVRyZWUnKTtcbnZhciBSZWFjdERPTUNvbXBvbmVudFRyZWUgPSByZXF1aXJlKCcuL1JlYWN0RE9NQ29tcG9uZW50VHJlZScpO1xuXG52YXIgZXNjYXBlVGV4dENvbnRlbnRGb3JCcm93c2VyID0gcmVxdWlyZSgnLi9lc2NhcGVUZXh0Q29udGVudEZvckJyb3dzZXInKTtcbnZhciBpbnZhcmlhbnQgPSByZXF1aXJlKCdmYmpzL2xpYi9pbnZhcmlhbnQnKTtcbnZhciB2YWxpZGF0ZURPTU5lc3RpbmcgPSByZXF1aXJlKCcuL3ZhbGlkYXRlRE9NTmVzdGluZycpO1xuXG4vKipcbiAqIFRleHQgbm9kZXMgdmlvbGF0ZSBhIGNvdXBsZSBhc3N1bXB0aW9ucyB0aGF0IFJlYWN0IG1ha2VzIGFib3V0IGNvbXBvbmVudHM6XG4gKlxuICogIC0gV2hlbiBtb3VudGluZyB0ZXh0IGludG8gdGhlIERPTSwgYWRqYWNlbnQgdGV4dCBub2RlcyBhcmUgbWVyZ2VkLlxuICogIC0gVGV4dCBub2RlcyBjYW5ub3QgYmUgYXNzaWduZWQgYSBSZWFjdCByb290IElELlxuICpcbiAqIFRoaXMgY29tcG9uZW50IGlzIHVzZWQgdG8gd3JhcCBzdHJpbmdzIGJldHdlZW4gY29tbWVudCBub2RlcyBzbyB0aGF0IHRoZXlcbiAqIGNhbiB1bmRlcmdvIHRoZSBzYW1lIHJlY29uY2lsaWF0aW9uIHRoYXQgaXMgYXBwbGllZCB0byBlbGVtZW50cy5cbiAqXG4gKiBUT0RPOiBJbnZlc3RpZ2F0ZSByZXByZXNlbnRpbmcgUmVhY3QgY29tcG9uZW50cyBpbiB0aGUgRE9NIHdpdGggdGV4dCBub2Rlcy5cbiAqXG4gKiBAY2xhc3MgUmVhY3RET01UZXh0Q29tcG9uZW50XG4gKiBAZXh0ZW5kcyBSZWFjdENvbXBvbmVudFxuICogQGludGVybmFsXG4gKi9cbnZhciBSZWFjdERPTVRleHRDb21wb25lbnQgPSBmdW5jdGlvbiAodGV4dCkge1xuICAvLyBUT0RPOiBUaGlzIGlzIHJlYWxseSBhIFJlYWN0VGV4dCAoUmVhY3ROb2RlKSwgbm90IGEgUmVhY3RFbGVtZW50XG4gIHRoaXMuX2N1cnJlbnRFbGVtZW50ID0gdGV4dDtcbiAgdGhpcy5fc3RyaW5nVGV4dCA9ICcnICsgdGV4dDtcbiAgLy8gUmVhY3RET01Db21wb25lbnRUcmVlIHVzZXMgdGhlc2U6XG4gIHRoaXMuX2hvc3ROb2RlID0gbnVsbDtcbiAgdGhpcy5faG9zdFBhcmVudCA9IG51bGw7XG5cbiAgLy8gUHJvcGVydGllc1xuICB0aGlzLl9kb21JRCA9IDA7XG4gIHRoaXMuX21vdW50SW5kZXggPSAwO1xuICB0aGlzLl9jbG9zaW5nQ29tbWVudCA9IG51bGw7XG4gIHRoaXMuX2NvbW1lbnROb2RlcyA9IG51bGw7XG59O1xuXG5fYXNzaWduKFJlYWN0RE9NVGV4dENvbXBvbmVudC5wcm90b3R5cGUsIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgdGhlIG1hcmt1cCBmb3IgdGhpcyB0ZXh0IG5vZGUuIFRoaXMgbm9kZSBpcyBub3QgaW50ZW5kZWQgdG8gaGF2ZVxuICAgKiBhbnkgZmVhdHVyZXMgYmVzaWRlcyBjb250YWluaW5nIHRleHQgY29udGVudC5cbiAgICpcbiAgICogQHBhcmFtIHtSZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9ufFJlYWN0U2VydmVyUmVuZGVyaW5nVHJhbnNhY3Rpb259IHRyYW5zYWN0aW9uXG4gICAqIEByZXR1cm4ge3N0cmluZ30gTWFya3VwIGZvciB0aGlzIHRleHQgbm9kZS5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBtb3VudENvbXBvbmVudDogZnVuY3Rpb24gKHRyYW5zYWN0aW9uLCBob3N0UGFyZW50LCBob3N0Q29udGFpbmVySW5mbywgY29udGV4dCkge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICB2YXIgcGFyZW50SW5mbztcbiAgICAgIGlmIChob3N0UGFyZW50ICE9IG51bGwpIHtcbiAgICAgICAgcGFyZW50SW5mbyA9IGhvc3RQYXJlbnQuX2FuY2VzdG9ySW5mbztcbiAgICAgIH0gZWxzZSBpZiAoaG9zdENvbnRhaW5lckluZm8gIT0gbnVsbCkge1xuICAgICAgICBwYXJlbnRJbmZvID0gaG9zdENvbnRhaW5lckluZm8uX2FuY2VzdG9ySW5mbztcbiAgICAgIH1cbiAgICAgIGlmIChwYXJlbnRJbmZvKSB7XG4gICAgICAgIC8vIHBhcmVudEluZm8gc2hvdWxkIGFsd2F5cyBiZSBwcmVzZW50IGV4Y2VwdCBmb3IgdGhlIHRvcC1sZXZlbFxuICAgICAgICAvLyBjb21wb25lbnQgd2hlbiBzZXJ2ZXIgcmVuZGVyaW5nXG4gICAgICAgIHZhbGlkYXRlRE9NTmVzdGluZyhudWxsLCB0aGlzLl9zdHJpbmdUZXh0LCB0aGlzLCBwYXJlbnRJbmZvKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgZG9tSUQgPSBob3N0Q29udGFpbmVySW5mby5faWRDb3VudGVyKys7XG4gICAgdmFyIG9wZW5pbmdWYWx1ZSA9ICcgcmVhY3QtdGV4dDogJyArIGRvbUlEICsgJyAnO1xuICAgIHZhciBjbG9zaW5nVmFsdWUgPSAnIC9yZWFjdC10ZXh0ICc7XG4gICAgdGhpcy5fZG9tSUQgPSBkb21JRDtcbiAgICB0aGlzLl9ob3N0UGFyZW50ID0gaG9zdFBhcmVudDtcbiAgICBpZiAodHJhbnNhY3Rpb24udXNlQ3JlYXRlRWxlbWVudCkge1xuICAgICAgdmFyIG93bmVyRG9jdW1lbnQgPSBob3N0Q29udGFpbmVySW5mby5fb3duZXJEb2N1bWVudDtcbiAgICAgIHZhciBvcGVuaW5nQ29tbWVudCA9IG93bmVyRG9jdW1lbnQuY3JlYXRlQ29tbWVudChvcGVuaW5nVmFsdWUpO1xuICAgICAgdmFyIGNsb3NpbmdDb21tZW50ID0gb3duZXJEb2N1bWVudC5jcmVhdGVDb21tZW50KGNsb3NpbmdWYWx1ZSk7XG4gICAgICB2YXIgbGF6eVRyZWUgPSBET01MYXp5VHJlZShvd25lckRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSk7XG4gICAgICBET01MYXp5VHJlZS5xdWV1ZUNoaWxkKGxhenlUcmVlLCBET01MYXp5VHJlZShvcGVuaW5nQ29tbWVudCkpO1xuICAgICAgaWYgKHRoaXMuX3N0cmluZ1RleHQpIHtcbiAgICAgICAgRE9NTGF6eVRyZWUucXVldWVDaGlsZChsYXp5VHJlZSwgRE9NTGF6eVRyZWUob3duZXJEb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0aGlzLl9zdHJpbmdUZXh0KSkpO1xuICAgICAgfVxuICAgICAgRE9NTGF6eVRyZWUucXVldWVDaGlsZChsYXp5VHJlZSwgRE9NTGF6eVRyZWUoY2xvc2luZ0NvbW1lbnQpKTtcbiAgICAgIFJlYWN0RE9NQ29tcG9uZW50VHJlZS5wcmVjYWNoZU5vZGUodGhpcywgb3BlbmluZ0NvbW1lbnQpO1xuICAgICAgdGhpcy5fY2xvc2luZ0NvbW1lbnQgPSBjbG9zaW5nQ29tbWVudDtcbiAgICAgIHJldHVybiBsYXp5VHJlZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGVzY2FwZWRUZXh0ID0gZXNjYXBlVGV4dENvbnRlbnRGb3JCcm93c2VyKHRoaXMuX3N0cmluZ1RleHQpO1xuXG4gICAgICBpZiAodHJhbnNhY3Rpb24ucmVuZGVyVG9TdGF0aWNNYXJrdXApIHtcbiAgICAgICAgLy8gTm9ybWFsbHkgd2UnZCB3cmFwIHRoaXMgYmV0d2VlbiBjb21tZW50IG5vZGVzIGZvciB0aGUgcmVhc29ucyBzdGF0ZWRcbiAgICAgICAgLy8gYWJvdmUsIGJ1dCBzaW5jZSB0aGlzIGlzIGEgc2l0dWF0aW9uIHdoZXJlIFJlYWN0IHdvbid0IHRha2Ugb3ZlclxuICAgICAgICAvLyAoc3RhdGljIHBhZ2VzKSwgd2UgY2FuIHNpbXBseSByZXR1cm4gdGhlIHRleHQgYXMgaXQgaXMuXG4gICAgICAgIHJldHVybiBlc2NhcGVkVGV4dDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuICc8IS0tJyArIG9wZW5pbmdWYWx1ZSArICctLT4nICsgZXNjYXBlZFRleHQgKyAnPCEtLScgKyBjbG9zaW5nVmFsdWUgKyAnLS0+JztcbiAgICB9XG4gIH0sXG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhpcyBjb21wb25lbnQgYnkgdXBkYXRpbmcgdGhlIHRleHQgY29udGVudC5cbiAgICpcbiAgICogQHBhcmFtIHtSZWFjdFRleHR9IG5leHRUZXh0IFRoZSBuZXh0IHRleHQgY29udGVudFxuICAgKiBAcGFyYW0ge1JlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb259IHRyYW5zYWN0aW9uXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcmVjZWl2ZUNvbXBvbmVudDogZnVuY3Rpb24gKG5leHRUZXh0LCB0cmFuc2FjdGlvbikge1xuICAgIGlmIChuZXh0VGV4dCAhPT0gdGhpcy5fY3VycmVudEVsZW1lbnQpIHtcbiAgICAgIHRoaXMuX2N1cnJlbnRFbGVtZW50ID0gbmV4dFRleHQ7XG4gICAgICB2YXIgbmV4dFN0cmluZ1RleHQgPSAnJyArIG5leHRUZXh0O1xuICAgICAgaWYgKG5leHRTdHJpbmdUZXh0ICE9PSB0aGlzLl9zdHJpbmdUZXh0KSB7XG4gICAgICAgIC8vIFRPRE86IFNhdmUgdGhpcyBhcyBwZW5kaW5nIHByb3BzIGFuZCB1c2UgcGVyZm9ybVVwZGF0ZUlmTmVjZXNzYXJ5XG4gICAgICAgIC8vIGFuZC9vciB1cGRhdGVDb21wb25lbnQgdG8gZG8gdGhlIGFjdHVhbCB1cGRhdGUgZm9yIGNvbnNpc3RlbmN5IHdpdGhcbiAgICAgICAgLy8gb3RoZXIgY29tcG9uZW50IHR5cGVzP1xuICAgICAgICB0aGlzLl9zdHJpbmdUZXh0ID0gbmV4dFN0cmluZ1RleHQ7XG4gICAgICAgIHZhciBjb21tZW50Tm9kZXMgPSB0aGlzLmdldEhvc3ROb2RlKCk7XG4gICAgICAgIERPTUNoaWxkcmVuT3BlcmF0aW9ucy5yZXBsYWNlRGVsaW1pdGVkVGV4dChjb21tZW50Tm9kZXNbMF0sIGNvbW1lbnROb2Rlc1sxXSwgbmV4dFN0cmluZ1RleHQpO1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBnZXRIb3N0Tm9kZTogZnVuY3Rpb24gKCkge1xuICAgIHZhciBob3N0Tm9kZSA9IHRoaXMuX2NvbW1lbnROb2RlcztcbiAgICBpZiAoaG9zdE5vZGUpIHtcbiAgICAgIHJldHVybiBob3N0Tm9kZTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLl9jbG9zaW5nQ29tbWVudCkge1xuICAgICAgdmFyIG9wZW5pbmdDb21tZW50ID0gUmVhY3RET01Db21wb25lbnRUcmVlLmdldE5vZGVGcm9tSW5zdGFuY2UodGhpcyk7XG4gICAgICB2YXIgbm9kZSA9IG9wZW5pbmdDb21tZW50Lm5leHRTaWJsaW5nO1xuICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgIShub2RlICE9IG51bGwpID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IGludmFyaWFudChmYWxzZSwgJ01pc3NpbmcgY2xvc2luZyBjb21tZW50IGZvciB0ZXh0IGNvbXBvbmVudCAlcycsIHRoaXMuX2RvbUlEKSA6IF9wcm9kSW52YXJpYW50KCc2NycsIHRoaXMuX2RvbUlEKSA6IHZvaWQgMDtcbiAgICAgICAgaWYgKG5vZGUubm9kZVR5cGUgPT09IDggJiYgbm9kZS5ub2RlVmFsdWUgPT09ICcgL3JlYWN0LXRleHQgJykge1xuICAgICAgICAgIHRoaXMuX2Nsb3NpbmdDb21tZW50ID0gbm9kZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBub2RlID0gbm9kZS5uZXh0U2libGluZztcbiAgICAgIH1cbiAgICB9XG4gICAgaG9zdE5vZGUgPSBbdGhpcy5faG9zdE5vZGUsIHRoaXMuX2Nsb3NpbmdDb21tZW50XTtcbiAgICB0aGlzLl9jb21tZW50Tm9kZXMgPSBob3N0Tm9kZTtcbiAgICByZXR1cm4gaG9zdE5vZGU7XG4gIH0sXG5cbiAgdW5tb3VudENvbXBvbmVudDogZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuX2Nsb3NpbmdDb21tZW50ID0gbnVsbDtcbiAgICB0aGlzLl9jb21tZW50Tm9kZXMgPSBudWxsO1xuICAgIFJlYWN0RE9NQ29tcG9uZW50VHJlZS51bmNhY2hlTm9kZSh0aGlzKTtcbiAgfVxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RET01UZXh0Q29tcG9uZW50O1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QtZG9tL2xpYi9SZWFjdERPTVRleHRDb21wb25lbnQuanMiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgX3Byb2RJbnZhcmlhbnQgPSByZXF1aXJlKCcuL3JlYWN0UHJvZEludmFyaWFudCcpLFxuICAgIF9hc3NpZ24gPSByZXF1aXJlKCdvYmplY3QtYXNzaWduJyk7XG5cbnZhciBMaW5rZWRWYWx1ZVV0aWxzID0gcmVxdWlyZSgnLi9MaW5rZWRWYWx1ZVV0aWxzJyk7XG52YXIgUmVhY3RET01Db21wb25lbnRUcmVlID0gcmVxdWlyZSgnLi9SZWFjdERPTUNvbXBvbmVudFRyZWUnKTtcbnZhciBSZWFjdFVwZGF0ZXMgPSByZXF1aXJlKCcuL1JlYWN0VXBkYXRlcycpO1xuXG52YXIgaW52YXJpYW50ID0gcmVxdWlyZSgnZmJqcy9saWIvaW52YXJpYW50Jyk7XG52YXIgd2FybmluZyA9IHJlcXVpcmUoJ2ZianMvbGliL3dhcm5pbmcnKTtcblxudmFyIGRpZFdhcm5WYWx1ZUxpbmsgPSBmYWxzZTtcbnZhciBkaWRXYXJuVmFsRGVmYXVsdFZhbCA9IGZhbHNlO1xuXG5mdW5jdGlvbiBmb3JjZVVwZGF0ZUlmTW91bnRlZCgpIHtcbiAgaWYgKHRoaXMuX3Jvb3ROb2RlSUQpIHtcbiAgICAvLyBET00gY29tcG9uZW50IGlzIHN0aWxsIG1vdW50ZWQ7IHVwZGF0ZVxuICAgIFJlYWN0RE9NVGV4dGFyZWEudXBkYXRlV3JhcHBlcih0aGlzKTtcbiAgfVxufVxuXG4vKipcbiAqIEltcGxlbWVudHMgYSA8dGV4dGFyZWE+IGhvc3QgY29tcG9uZW50IHRoYXQgYWxsb3dzIHNldHRpbmcgYHZhbHVlYCwgYW5kXG4gKiBgZGVmYXVsdFZhbHVlYC4gVGhpcyBkaWZmZXJzIGZyb20gdGhlIHRyYWRpdGlvbmFsIERPTSBBUEkgYmVjYXVzZSB2YWx1ZSBpc1xuICogdXN1YWxseSBzZXQgYXMgUENEQVRBIGNoaWxkcmVuLlxuICpcbiAqIElmIGB2YWx1ZWAgaXMgbm90IHN1cHBsaWVkIChvciBudWxsL3VuZGVmaW5lZCksIHVzZXIgYWN0aW9ucyB0aGF0IGFmZmVjdCB0aGVcbiAqIHZhbHVlIHdpbGwgdHJpZ2dlciB1cGRhdGVzIHRvIHRoZSBlbGVtZW50LlxuICpcbiAqIElmIGB2YWx1ZWAgaXMgc3VwcGxpZWQgKGFuZCBub3QgbnVsbC91bmRlZmluZWQpLCB0aGUgcmVuZGVyZWQgZWxlbWVudCB3aWxsXG4gKiBub3QgdHJpZ2dlciB1cGRhdGVzIHRvIHRoZSBlbGVtZW50LiBJbnN0ZWFkLCB0aGUgYHZhbHVlYCBwcm9wIG11c3QgY2hhbmdlIGluXG4gKiBvcmRlciBmb3IgdGhlIHJlbmRlcmVkIGVsZW1lbnQgdG8gYmUgdXBkYXRlZC5cbiAqXG4gKiBUaGUgcmVuZGVyZWQgZWxlbWVudCB3aWxsIGJlIGluaXRpYWxpemVkIHdpdGggYW4gZW1wdHkgdmFsdWUsIHRoZSBwcm9wXG4gKiBgZGVmYXVsdFZhbHVlYCBpZiBzcGVjaWZpZWQsIG9yIHRoZSBjaGlsZHJlbiBjb250ZW50IChkZXByZWNhdGVkKS5cbiAqL1xudmFyIFJlYWN0RE9NVGV4dGFyZWEgPSB7XG4gIGdldEhvc3RQcm9wczogZnVuY3Rpb24gKGluc3QsIHByb3BzKSB7XG4gICAgIShwcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTCA9PSBudWxsKSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICdgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxgIGRvZXMgbm90IG1ha2Ugc2Vuc2Ugb24gPHRleHRhcmVhPi4nKSA6IF9wcm9kSW52YXJpYW50KCc5MScpIDogdm9pZCAwO1xuXG4gICAgLy8gQWx3YXlzIHNldCBjaGlsZHJlbiB0byB0aGUgc2FtZSB0aGluZy4gSW4gSUU5LCB0aGUgc2VsZWN0aW9uIHJhbmdlIHdpbGxcbiAgICAvLyBnZXQgcmVzZXQgaWYgYHRleHRDb250ZW50YCBpcyBtdXRhdGVkLiAgV2UgY291bGQgYWRkIGEgY2hlY2sgaW4gc2V0VGV4dENvbnRlbnRcbiAgICAvLyB0byBvbmx5IHNldCB0aGUgdmFsdWUgaWYvd2hlbiB0aGUgdmFsdWUgZGlmZmVycyBmcm9tIHRoZSBub2RlIHZhbHVlICh3aGljaCB3b3VsZFxuICAgIC8vIGNvbXBsZXRlbHkgc29sdmUgdGhpcyBJRTkgYnVnKSwgYnV0IFNlYmFzdGlhbitCZW4gc2VlbWVkIHRvIGxpa2UgdGhpcyBzb2x1dGlvbi5cbiAgICAvLyBUaGUgdmFsdWUgY2FuIGJlIGEgYm9vbGVhbiBvciBvYmplY3Qgc28gdGhhdCdzIHdoeSBpdCdzIGZvcmNlZCB0byBiZSBhIHN0cmluZy5cbiAgICB2YXIgaG9zdFByb3BzID0gX2Fzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgIHZhbHVlOiB1bmRlZmluZWQsXG4gICAgICBkZWZhdWx0VmFsdWU6IHVuZGVmaW5lZCxcbiAgICAgIGNoaWxkcmVuOiAnJyArIGluc3QuX3dyYXBwZXJTdGF0ZS5pbml0aWFsVmFsdWUsXG4gICAgICBvbkNoYW5nZTogaW5zdC5fd3JhcHBlclN0YXRlLm9uQ2hhbmdlXG4gICAgfSk7XG5cbiAgICByZXR1cm4gaG9zdFByb3BzO1xuICB9LFxuXG4gIG1vdW50V3JhcHBlcjogZnVuY3Rpb24gKGluc3QsIHByb3BzKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIExpbmtlZFZhbHVlVXRpbHMuY2hlY2tQcm9wVHlwZXMoJ3RleHRhcmVhJywgcHJvcHMsIGluc3QuX2N1cnJlbnRFbGVtZW50Ll9vd25lcik7XG4gICAgICBpZiAocHJvcHMudmFsdWVMaW5rICE9PSB1bmRlZmluZWQgJiYgIWRpZFdhcm5WYWx1ZUxpbmspIHtcbiAgICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcoZmFsc2UsICdgdmFsdWVMaW5rYCBwcm9wIG9uIGB0ZXh0YXJlYWAgaXMgZGVwcmVjYXRlZDsgc2V0IGB2YWx1ZWAgYW5kIGBvbkNoYW5nZWAgaW5zdGVhZC4nKSA6IHZvaWQgMDtcbiAgICAgICAgZGlkV2FyblZhbHVlTGluayA9IHRydWU7XG4gICAgICB9XG4gICAgICBpZiAocHJvcHMudmFsdWUgIT09IHVuZGVmaW5lZCAmJiBwcm9wcy5kZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCAmJiAhZGlkV2FyblZhbERlZmF1bHRWYWwpIHtcbiAgICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcoZmFsc2UsICdUZXh0YXJlYSBlbGVtZW50cyBtdXN0IGJlIGVpdGhlciBjb250cm9sbGVkIG9yIHVuY29udHJvbGxlZCAnICsgJyhzcGVjaWZ5IGVpdGhlciB0aGUgdmFsdWUgcHJvcCwgb3IgdGhlIGRlZmF1bHRWYWx1ZSBwcm9wLCBidXQgbm90ICcgKyAnYm90aCkuIERlY2lkZSBiZXR3ZWVuIHVzaW5nIGEgY29udHJvbGxlZCBvciB1bmNvbnRyb2xsZWQgdGV4dGFyZWEgJyArICdhbmQgcmVtb3ZlIG9uZSBvZiB0aGVzZSBwcm9wcy4gTW9yZSBpbmZvOiAnICsgJ2h0dHBzOi8vZmIubWUvcmVhY3QtY29udHJvbGxlZC1jb21wb25lbnRzJykgOiB2b2lkIDA7XG4gICAgICAgIGRpZFdhcm5WYWxEZWZhdWx0VmFsID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgdmFsdWUgPSBMaW5rZWRWYWx1ZVV0aWxzLmdldFZhbHVlKHByb3BzKTtcbiAgICB2YXIgaW5pdGlhbFZhbHVlID0gdmFsdWU7XG5cbiAgICAvLyBPbmx5IGJvdGhlciBmZXRjaGluZyBkZWZhdWx0IHZhbHVlIGlmIHdlJ3JlIGdvaW5nIHRvIHVzZSBpdFxuICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgICB2YXIgZGVmYXVsdFZhbHVlID0gcHJvcHMuZGVmYXVsdFZhbHVlO1xuICAgICAgLy8gVE9ETyAoeXVuZ3N0ZXJzKTogUmVtb3ZlIHN1cHBvcnQgZm9yIGNoaWxkcmVuIGNvbnRlbnQgaW4gPHRleHRhcmVhPi5cbiAgICAgIHZhciBjaGlsZHJlbiA9IHByb3BzLmNoaWxkcmVuO1xuICAgICAgaWYgKGNoaWxkcmVuICE9IG51bGwpIHtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyhmYWxzZSwgJ1VzZSB0aGUgYGRlZmF1bHRWYWx1ZWAgb3IgYHZhbHVlYCBwcm9wcyBpbnN0ZWFkIG9mIHNldHRpbmcgJyArICdjaGlsZHJlbiBvbiA8dGV4dGFyZWE+LicpIDogdm9pZCAwO1xuICAgICAgICB9XG4gICAgICAgICEoZGVmYXVsdFZhbHVlID09IG51bGwpID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IGludmFyaWFudChmYWxzZSwgJ0lmIHlvdSBzdXBwbHkgYGRlZmF1bHRWYWx1ZWAgb24gYSA8dGV4dGFyZWE+LCBkbyBub3QgcGFzcyBjaGlsZHJlbi4nKSA6IF9wcm9kSW52YXJpYW50KCc5MicpIDogdm9pZCAwO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjaGlsZHJlbikpIHtcbiAgICAgICAgICAhKGNoaWxkcmVuLmxlbmd0aCA8PSAxKSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICc8dGV4dGFyZWE+IGNhbiBvbmx5IGhhdmUgYXQgbW9zdCBvbmUgY2hpbGQuJykgOiBfcHJvZEludmFyaWFudCgnOTMnKSA6IHZvaWQgMDtcbiAgICAgICAgICBjaGlsZHJlbiA9IGNoaWxkcmVuWzBdO1xuICAgICAgICB9XG5cbiAgICAgICAgZGVmYXVsdFZhbHVlID0gJycgKyBjaGlsZHJlbjtcbiAgICAgIH1cbiAgICAgIGlmIChkZWZhdWx0VmFsdWUgPT0gbnVsbCkge1xuICAgICAgICBkZWZhdWx0VmFsdWUgPSAnJztcbiAgICAgIH1cbiAgICAgIGluaXRpYWxWYWx1ZSA9IGRlZmF1bHRWYWx1ZTtcbiAgICB9XG5cbiAgICBpbnN0Ll93cmFwcGVyU3RhdGUgPSB7XG4gICAgICBpbml0aWFsVmFsdWU6ICcnICsgaW5pdGlhbFZhbHVlLFxuICAgICAgbGlzdGVuZXJzOiBudWxsLFxuICAgICAgb25DaGFuZ2U6IF9oYW5kbGVDaGFuZ2UuYmluZChpbnN0KVxuICAgIH07XG4gIH0sXG5cbiAgdXBkYXRlV3JhcHBlcjogZnVuY3Rpb24gKGluc3QpIHtcbiAgICB2YXIgcHJvcHMgPSBpbnN0Ll9jdXJyZW50RWxlbWVudC5wcm9wcztcblxuICAgIHZhciBub2RlID0gUmVhY3RET01Db21wb25lbnRUcmVlLmdldE5vZGVGcm9tSW5zdGFuY2UoaW5zdCk7XG4gICAgdmFyIHZhbHVlID0gTGlua2VkVmFsdWVVdGlscy5nZXRWYWx1ZShwcm9wcyk7XG4gICAgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICAgIC8vIENhc3QgYHZhbHVlYCB0byBhIHN0cmluZyB0byBlbnN1cmUgdGhlIHZhbHVlIGlzIHNldCBjb3JyZWN0bHkuIFdoaWxlXG4gICAgICAvLyBicm93c2VycyB0eXBpY2FsbHkgZG8gdGhpcyBhcyBuZWNlc3NhcnksIGpzZG9tIGRvZXNuJ3QuXG4gICAgICB2YXIgbmV3VmFsdWUgPSAnJyArIHZhbHVlO1xuXG4gICAgICAvLyBUbyBhdm9pZCBzaWRlIGVmZmVjdHMgKHN1Y2ggYXMgbG9zaW5nIHRleHQgc2VsZWN0aW9uKSwgb25seSBzZXQgdmFsdWUgaWYgY2hhbmdlZFxuICAgICAgaWYgKG5ld1ZhbHVlICE9PSBub2RlLnZhbHVlKSB7XG4gICAgICAgIG5vZGUudmFsdWUgPSBuZXdWYWx1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wcy5kZWZhdWx0VmFsdWUgPT0gbnVsbCkge1xuICAgICAgICBub2RlLmRlZmF1bHRWYWx1ZSA9IG5ld1ZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAocHJvcHMuZGVmYXVsdFZhbHVlICE9IG51bGwpIHtcbiAgICAgIG5vZGUuZGVmYXVsdFZhbHVlID0gcHJvcHMuZGVmYXVsdFZhbHVlO1xuICAgIH1cbiAgfSxcblxuICBwb3N0TW91bnRXcmFwcGVyOiBmdW5jdGlvbiAoaW5zdCkge1xuICAgIC8vIFRoaXMgaXMgaW4gcG9zdE1vdW50IGJlY2F1c2Ugd2UgbmVlZCBhY2Nlc3MgdG8gdGhlIERPTSBub2RlLCB3aGljaCBpcyBub3RcbiAgICAvLyBhdmFpbGFibGUgdW50aWwgYWZ0ZXIgdGhlIGNvbXBvbmVudCBoYXMgbW91bnRlZC5cbiAgICB2YXIgbm9kZSA9IFJlYWN0RE9NQ29tcG9uZW50VHJlZS5nZXROb2RlRnJvbUluc3RhbmNlKGluc3QpO1xuICAgIHZhciB0ZXh0Q29udGVudCA9IG5vZGUudGV4dENvbnRlbnQ7XG5cbiAgICAvLyBPbmx5IHNldCBub2RlLnZhbHVlIGlmIHRleHRDb250ZW50IGlzIGVxdWFsIHRvIHRoZSBleHBlY3RlZFxuICAgIC8vIGluaXRpYWwgdmFsdWUuIEluIElFMTAvSUUxMSB0aGVyZSBpcyBhIGJ1ZyB3aGVyZSB0aGUgcGxhY2Vob2xkZXIgYXR0cmlidXRlXG4gICAgLy8gd2lsbCBwb3B1bGF0ZSB0ZXh0Q29udGVudCBhcyB3ZWxsLlxuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1pY3Jvc29mdC5jb20vbWljcm9zb2Z0LWVkZ2UvcGxhdGZvcm0vaXNzdWVzLzEwMTUyNS9cbiAgICBpZiAodGV4dENvbnRlbnQgPT09IGluc3QuX3dyYXBwZXJTdGF0ZS5pbml0aWFsVmFsdWUpIHtcbiAgICAgIG5vZGUudmFsdWUgPSB0ZXh0Q29udGVudDtcbiAgICB9XG4gIH1cbn07XG5cbmZ1bmN0aW9uIF9oYW5kbGVDaGFuZ2UoZXZlbnQpIHtcbiAgdmFyIHByb3BzID0gdGhpcy5fY3VycmVudEVsZW1lbnQucHJvcHM7XG4gIHZhciByZXR1cm5WYWx1ZSA9IExpbmtlZFZhbHVlVXRpbHMuZXhlY3V0ZU9uQ2hhbmdlKHByb3BzLCBldmVudCk7XG4gIFJlYWN0VXBkYXRlcy5hc2FwKGZvcmNlVXBkYXRlSWZNb3VudGVkLCB0aGlzKTtcbiAgcmV0dXJuIHJldHVyblZhbHVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0RE9NVGV4dGFyZWE7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1kb20vbGliL1JlYWN0RE9NVGV4dGFyZWEuanMiLCIvKipcbiAqIENvcHlyaWdodCAyMDE1LXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgX3Byb2RJbnZhcmlhbnQgPSByZXF1aXJlKCcuL3JlYWN0UHJvZEludmFyaWFudCcpO1xuXG52YXIgaW52YXJpYW50ID0gcmVxdWlyZSgnZmJqcy9saWIvaW52YXJpYW50Jyk7XG5cbi8qKlxuICogUmV0dXJuIHRoZSBsb3dlc3QgY29tbW9uIGFuY2VzdG9yIG9mIEEgYW5kIEIsIG9yIG51bGwgaWYgdGhleSBhcmUgaW5cbiAqIGRpZmZlcmVudCB0cmVlcy5cbiAqL1xuZnVuY3Rpb24gZ2V0TG93ZXN0Q29tbW9uQW5jZXN0b3IoaW5zdEEsIGluc3RCKSB7XG4gICEoJ19ob3N0Tm9kZScgaW4gaW5zdEEpID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IGludmFyaWFudChmYWxzZSwgJ2dldE5vZGVGcm9tSW5zdGFuY2U6IEludmFsaWQgYXJndW1lbnQuJykgOiBfcHJvZEludmFyaWFudCgnMzMnKSA6IHZvaWQgMDtcbiAgISgnX2hvc3ROb2RlJyBpbiBpbnN0QikgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAnZ2V0Tm9kZUZyb21JbnN0YW5jZTogSW52YWxpZCBhcmd1bWVudC4nKSA6IF9wcm9kSW52YXJpYW50KCczMycpIDogdm9pZCAwO1xuXG4gIHZhciBkZXB0aEEgPSAwO1xuICBmb3IgKHZhciB0ZW1wQSA9IGluc3RBOyB0ZW1wQTsgdGVtcEEgPSB0ZW1wQS5faG9zdFBhcmVudCkge1xuICAgIGRlcHRoQSsrO1xuICB9XG4gIHZhciBkZXB0aEIgPSAwO1xuICBmb3IgKHZhciB0ZW1wQiA9IGluc3RCOyB0ZW1wQjsgdGVtcEIgPSB0ZW1wQi5faG9zdFBhcmVudCkge1xuICAgIGRlcHRoQisrO1xuICB9XG5cbiAgLy8gSWYgQSBpcyBkZWVwZXIsIGNyYXdsIHVwLlxuICB3aGlsZSAoZGVwdGhBIC0gZGVwdGhCID4gMCkge1xuICAgIGluc3RBID0gaW5zdEEuX2hvc3RQYXJlbnQ7XG4gICAgZGVwdGhBLS07XG4gIH1cblxuICAvLyBJZiBCIGlzIGRlZXBlciwgY3Jhd2wgdXAuXG4gIHdoaWxlIChkZXB0aEIgLSBkZXB0aEEgPiAwKSB7XG4gICAgaW5zdEIgPSBpbnN0Qi5faG9zdFBhcmVudDtcbiAgICBkZXB0aEItLTtcbiAgfVxuXG4gIC8vIFdhbGsgaW4gbG9ja3N0ZXAgdW50aWwgd2UgZmluZCBhIG1hdGNoLlxuICB2YXIgZGVwdGggPSBkZXB0aEE7XG4gIHdoaWxlIChkZXB0aC0tKSB7XG4gICAgaWYgKGluc3RBID09PSBpbnN0Qikge1xuICAgICAgcmV0dXJuIGluc3RBO1xuICAgIH1cbiAgICBpbnN0QSA9IGluc3RBLl9ob3N0UGFyZW50O1xuICAgIGluc3RCID0gaW5zdEIuX2hvc3RQYXJlbnQ7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogUmV0dXJuIGlmIEEgaXMgYW4gYW5jZXN0b3Igb2YgQi5cbiAqL1xuZnVuY3Rpb24gaXNBbmNlc3RvcihpbnN0QSwgaW5zdEIpIHtcbiAgISgnX2hvc3ROb2RlJyBpbiBpbnN0QSkgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAnaXNBbmNlc3RvcjogSW52YWxpZCBhcmd1bWVudC4nKSA6IF9wcm9kSW52YXJpYW50KCczNScpIDogdm9pZCAwO1xuICAhKCdfaG9zdE5vZGUnIGluIGluc3RCKSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICdpc0FuY2VzdG9yOiBJbnZhbGlkIGFyZ3VtZW50LicpIDogX3Byb2RJbnZhcmlhbnQoJzM1JykgOiB2b2lkIDA7XG5cbiAgd2hpbGUgKGluc3RCKSB7XG4gICAgaWYgKGluc3RCID09PSBpbnN0QSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGluc3RCID0gaW5zdEIuX2hvc3RQYXJlbnQ7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIFJldHVybiB0aGUgcGFyZW50IGluc3RhbmNlIG9mIHRoZSBwYXNzZWQtaW4gaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIGdldFBhcmVudEluc3RhbmNlKGluc3QpIHtcbiAgISgnX2hvc3ROb2RlJyBpbiBpbnN0KSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICdnZXRQYXJlbnRJbnN0YW5jZTogSW52YWxpZCBhcmd1bWVudC4nKSA6IF9wcm9kSW52YXJpYW50KCczNicpIDogdm9pZCAwO1xuXG4gIHJldHVybiBpbnN0Ll9ob3N0UGFyZW50O1xufVxuXG4vKipcbiAqIFNpbXVsYXRlcyB0aGUgdHJhdmVyc2FsIG9mIGEgdHdvLXBoYXNlLCBjYXB0dXJlL2J1YmJsZSBldmVudCBkaXNwYXRjaC5cbiAqL1xuZnVuY3Rpb24gdHJhdmVyc2VUd29QaGFzZShpbnN0LCBmbiwgYXJnKSB7XG4gIHZhciBwYXRoID0gW107XG4gIHdoaWxlIChpbnN0KSB7XG4gICAgcGF0aC5wdXNoKGluc3QpO1xuICAgIGluc3QgPSBpbnN0Ll9ob3N0UGFyZW50O1xuICB9XG4gIHZhciBpO1xuICBmb3IgKGkgPSBwYXRoLmxlbmd0aDsgaS0tID4gMDspIHtcbiAgICBmbihwYXRoW2ldLCAnY2FwdHVyZWQnLCBhcmcpO1xuICB9XG4gIGZvciAoaSA9IDA7IGkgPCBwYXRoLmxlbmd0aDsgaSsrKSB7XG4gICAgZm4ocGF0aFtpXSwgJ2J1YmJsZWQnLCBhcmcpO1xuICB9XG59XG5cbi8qKlxuICogVHJhdmVyc2VzIHRoZSBJRCBoaWVyYXJjaHkgYW5kIGludm9rZXMgdGhlIHN1cHBsaWVkIGBjYmAgb24gYW55IElEcyB0aGF0XG4gKiBzaG91bGQgd291bGQgcmVjZWl2ZSBhIGBtb3VzZUVudGVyYCBvciBgbW91c2VMZWF2ZWAgZXZlbnQuXG4gKlxuICogRG9lcyBub3QgaW52b2tlIHRoZSBjYWxsYmFjayBvbiB0aGUgbmVhcmVzdCBjb21tb24gYW5jZXN0b3IgYmVjYXVzZSBub3RoaW5nXG4gKiBcImVudGVyZWRcIiBvciBcImxlZnRcIiB0aGF0IGVsZW1lbnQuXG4gKi9cbmZ1bmN0aW9uIHRyYXZlcnNlRW50ZXJMZWF2ZShmcm9tLCB0bywgZm4sIGFyZ0Zyb20sIGFyZ1RvKSB7XG4gIHZhciBjb21tb24gPSBmcm9tICYmIHRvID8gZ2V0TG93ZXN0Q29tbW9uQW5jZXN0b3IoZnJvbSwgdG8pIDogbnVsbDtcbiAgdmFyIHBhdGhGcm9tID0gW107XG4gIHdoaWxlIChmcm9tICYmIGZyb20gIT09IGNvbW1vbikge1xuICAgIHBhdGhGcm9tLnB1c2goZnJvbSk7XG4gICAgZnJvbSA9IGZyb20uX2hvc3RQYXJlbnQ7XG4gIH1cbiAgdmFyIHBhdGhUbyA9IFtdO1xuICB3aGlsZSAodG8gJiYgdG8gIT09IGNvbW1vbikge1xuICAgIHBhdGhUby5wdXNoKHRvKTtcbiAgICB0byA9IHRvLl9ob3N0UGFyZW50O1xuICB9XG4gIHZhciBpO1xuICBmb3IgKGkgPSAwOyBpIDwgcGF0aEZyb20ubGVuZ3RoOyBpKyspIHtcbiAgICBmbihwYXRoRnJvbVtpXSwgJ2J1YmJsZWQnLCBhcmdGcm9tKTtcbiAgfVxuICBmb3IgKGkgPSBwYXRoVG8ubGVuZ3RoOyBpLS0gPiAwOykge1xuICAgIGZuKHBhdGhUb1tpXSwgJ2NhcHR1cmVkJywgYXJnVG8pO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpc0FuY2VzdG9yOiBpc0FuY2VzdG9yLFxuICBnZXRMb3dlc3RDb21tb25BbmNlc3RvcjogZ2V0TG93ZXN0Q29tbW9uQW5jZXN0b3IsXG4gIGdldFBhcmVudEluc3RhbmNlOiBnZXRQYXJlbnRJbnN0YW5jZSxcbiAgdHJhdmVyc2VUd29QaGFzZTogdHJhdmVyc2VUd29QaGFzZSxcbiAgdHJhdmVyc2VFbnRlckxlYXZlOiB0cmF2ZXJzZUVudGVyTGVhdmVcbn07XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1kb20vbGliL1JlYWN0RE9NVHJlZVRyYXZlcnNhbC5qcyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBET01Qcm9wZXJ0eSA9IHJlcXVpcmUoJy4vRE9NUHJvcGVydHknKTtcbnZhciBFdmVudFBsdWdpblJlZ2lzdHJ5ID0gcmVxdWlyZSgnLi9FdmVudFBsdWdpblJlZ2lzdHJ5Jyk7XG52YXIgUmVhY3RDb21wb25lbnRUcmVlSG9vayA9IHJlcXVpcmUoJ3JlYWN0L2xpYi9SZWFjdENvbXBvbmVudFRyZWVIb29rJyk7XG5cbnZhciB3YXJuaW5nID0gcmVxdWlyZSgnZmJqcy9saWIvd2FybmluZycpO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICB2YXIgcmVhY3RQcm9wcyA9IHtcbiAgICBjaGlsZHJlbjogdHJ1ZSxcbiAgICBkYW5nZXJvdXNseVNldElubmVySFRNTDogdHJ1ZSxcbiAgICBrZXk6IHRydWUsXG4gICAgcmVmOiB0cnVlLFxuXG4gICAgYXV0b0ZvY3VzOiB0cnVlLFxuICAgIGRlZmF1bHRWYWx1ZTogdHJ1ZSxcbiAgICB2YWx1ZUxpbms6IHRydWUsXG4gICAgZGVmYXVsdENoZWNrZWQ6IHRydWUsXG4gICAgY2hlY2tlZExpbms6IHRydWUsXG4gICAgaW5uZXJIVE1MOiB0cnVlLFxuICAgIHN1cHByZXNzQ29udGVudEVkaXRhYmxlV2FybmluZzogdHJ1ZSxcbiAgICBvbkZvY3VzSW46IHRydWUsXG4gICAgb25Gb2N1c091dDogdHJ1ZVxuICB9O1xuICB2YXIgd2FybmVkUHJvcGVydGllcyA9IHt9O1xuXG4gIHZhciB2YWxpZGF0ZVByb3BlcnR5ID0gZnVuY3Rpb24gKHRhZ05hbWUsIG5hbWUsIGRlYnVnSUQpIHtcbiAgICBpZiAoRE9NUHJvcGVydHkucHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eShuYW1lKSB8fCBET01Qcm9wZXJ0eS5pc0N1c3RvbUF0dHJpYnV0ZShuYW1lKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmIChyZWFjdFByb3BzLmhhc093blByb3BlcnR5KG5hbWUpICYmIHJlYWN0UHJvcHNbbmFtZV0gfHwgd2FybmVkUHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eShuYW1lKSAmJiB3YXJuZWRQcm9wZXJ0aWVzW25hbWVdKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKEV2ZW50UGx1Z2luUmVnaXN0cnkucmVnaXN0cmF0aW9uTmFtZU1vZHVsZXMuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICB3YXJuZWRQcm9wZXJ0aWVzW25hbWVdID0gdHJ1ZTtcbiAgICB2YXIgbG93ZXJDYXNlZE5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAvLyBkYXRhLSogYXR0cmlidXRlcyBzaG91bGQgYmUgbG93ZXJjYXNlOyBzdWdnZXN0IHRoZSBsb3dlcmNhc2UgdmVyc2lvblxuICAgIHZhciBzdGFuZGFyZE5hbWUgPSBET01Qcm9wZXJ0eS5pc0N1c3RvbUF0dHJpYnV0ZShsb3dlckNhc2VkTmFtZSkgPyBsb3dlckNhc2VkTmFtZSA6IERPTVByb3BlcnR5LmdldFBvc3NpYmxlU3RhbmRhcmROYW1lLmhhc093blByb3BlcnR5KGxvd2VyQ2FzZWROYW1lKSA/IERPTVByb3BlcnR5LmdldFBvc3NpYmxlU3RhbmRhcmROYW1lW2xvd2VyQ2FzZWROYW1lXSA6IG51bGw7XG5cbiAgICB2YXIgcmVnaXN0cmF0aW9uTmFtZSA9IEV2ZW50UGx1Z2luUmVnaXN0cnkucG9zc2libGVSZWdpc3RyYXRpb25OYW1lcy5oYXNPd25Qcm9wZXJ0eShsb3dlckNhc2VkTmFtZSkgPyBFdmVudFBsdWdpblJlZ2lzdHJ5LnBvc3NpYmxlUmVnaXN0cmF0aW9uTmFtZXNbbG93ZXJDYXNlZE5hbWVdIDogbnVsbDtcblxuICAgIGlmIChzdGFuZGFyZE5hbWUgIT0gbnVsbCkge1xuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcoZmFsc2UsICdVbmtub3duIERPTSBwcm9wZXJ0eSAlcy4gRGlkIHlvdSBtZWFuICVzPyVzJywgbmFtZSwgc3RhbmRhcmROYW1lLCBSZWFjdENvbXBvbmVudFRyZWVIb29rLmdldFN0YWNrQWRkZW5kdW1CeUlEKGRlYnVnSUQpKSA6IHZvaWQgMDtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSBpZiAocmVnaXN0cmF0aW9uTmFtZSAhPSBudWxsKSB7XG4gICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyhmYWxzZSwgJ1Vua25vd24gZXZlbnQgaGFuZGxlciBwcm9wZXJ0eSAlcy4gRGlkIHlvdSBtZWFuIGAlc2A/JXMnLCBuYW1lLCByZWdpc3RyYXRpb25OYW1lLCBSZWFjdENvbXBvbmVudFRyZWVIb29rLmdldFN0YWNrQWRkZW5kdW1CeUlEKGRlYnVnSUQpKSA6IHZvaWQgMDtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBXZSB3ZXJlIHVuYWJsZSB0byBndWVzcyB3aGljaCBwcm9wIHRoZSB1c2VyIGludGVuZGVkLlxuICAgICAgLy8gSXQgaXMgbGlrZWx5IHRoYXQgdGhlIHVzZXIgd2FzIGp1c3QgYmxpbmRseSBzcHJlYWRpbmcvZm9yd2FyZGluZyBwcm9wc1xuICAgICAgLy8gQ29tcG9uZW50cyBzaG91bGQgYmUgY2FyZWZ1bCB0byBvbmx5IHJlbmRlciB2YWxpZCBwcm9wcy9hdHRyaWJ1dGVzLlxuICAgICAgLy8gV2FybmluZyB3aWxsIGJlIGludm9rZWQgaW4gd2FyblVua25vd25Qcm9wZXJ0aWVzIHRvIGFsbG93IGdyb3VwaW5nLlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfTtcbn1cblxudmFyIHdhcm5Vbmtub3duUHJvcGVydGllcyA9IGZ1bmN0aW9uIChkZWJ1Z0lELCBlbGVtZW50KSB7XG4gIHZhciB1bmtub3duUHJvcHMgPSBbXTtcbiAgZm9yICh2YXIga2V5IGluIGVsZW1lbnQucHJvcHMpIHtcbiAgICB2YXIgaXNWYWxpZCA9IHZhbGlkYXRlUHJvcGVydHkoZWxlbWVudC50eXBlLCBrZXksIGRlYnVnSUQpO1xuICAgIGlmICghaXNWYWxpZCkge1xuICAgICAgdW5rbm93blByb3BzLnB1c2goa2V5KTtcbiAgICB9XG4gIH1cblxuICB2YXIgdW5rbm93blByb3BTdHJpbmcgPSB1bmtub3duUHJvcHMubWFwKGZ1bmN0aW9uIChwcm9wKSB7XG4gICAgcmV0dXJuICdgJyArIHByb3AgKyAnYCc7XG4gIH0pLmpvaW4oJywgJyk7XG5cbiAgaWYgKHVua25vd25Qcm9wcy5sZW5ndGggPT09IDEpIHtcbiAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyhmYWxzZSwgJ1Vua25vd24gcHJvcCAlcyBvbiA8JXM+IHRhZy4gUmVtb3ZlIHRoaXMgcHJvcCBmcm9tIHRoZSBlbGVtZW50LiAnICsgJ0ZvciBkZXRhaWxzLCBzZWUgaHR0cHM6Ly9mYi5tZS9yZWFjdC11bmtub3duLXByb3AlcycsIHVua25vd25Qcm9wU3RyaW5nLCBlbGVtZW50LnR5cGUsIFJlYWN0Q29tcG9uZW50VHJlZUhvb2suZ2V0U3RhY2tBZGRlbmR1bUJ5SUQoZGVidWdJRCkpIDogdm9pZCAwO1xuICB9IGVsc2UgaWYgKHVua25vd25Qcm9wcy5sZW5ndGggPiAxKSB7XG4gICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcoZmFsc2UsICdVbmtub3duIHByb3BzICVzIG9uIDwlcz4gdGFnLiBSZW1vdmUgdGhlc2UgcHJvcHMgZnJvbSB0aGUgZWxlbWVudC4gJyArICdGb3IgZGV0YWlscywgc2VlIGh0dHBzOi8vZmIubWUvcmVhY3QtdW5rbm93bi1wcm9wJXMnLCB1bmtub3duUHJvcFN0cmluZywgZWxlbWVudC50eXBlLCBSZWFjdENvbXBvbmVudFRyZWVIb29rLmdldFN0YWNrQWRkZW5kdW1CeUlEKGRlYnVnSUQpKSA6IHZvaWQgMDtcbiAgfVxufTtcblxuZnVuY3Rpb24gaGFuZGxlRWxlbWVudChkZWJ1Z0lELCBlbGVtZW50KSB7XG4gIGlmIChlbGVtZW50ID09IG51bGwgfHwgdHlwZW9mIGVsZW1lbnQudHlwZSAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKGVsZW1lbnQudHlwZS5pbmRleE9mKCctJykgPj0gMCB8fCBlbGVtZW50LnByb3BzLmlzKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHdhcm5Vbmtub3duUHJvcGVydGllcyhkZWJ1Z0lELCBlbGVtZW50KTtcbn1cblxudmFyIFJlYWN0RE9NVW5rbm93blByb3BlcnR5SG9vayA9IHtcbiAgb25CZWZvcmVNb3VudENvbXBvbmVudDogZnVuY3Rpb24gKGRlYnVnSUQsIGVsZW1lbnQpIHtcbiAgICBoYW5kbGVFbGVtZW50KGRlYnVnSUQsIGVsZW1lbnQpO1xuICB9LFxuICBvbkJlZm9yZVVwZGF0ZUNvbXBvbmVudDogZnVuY3Rpb24gKGRlYnVnSUQsIGVsZW1lbnQpIHtcbiAgICBoYW5kbGVFbGVtZW50KGRlYnVnSUQsIGVsZW1lbnQpO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0RE9NVW5rbm93blByb3BlcnR5SG9vaztcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3JlYWN0LWRvbS9saWIvUmVhY3RET01Vbmtub3duUHJvcGVydHlIb29rLmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxNi1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUmVhY3RJbnZhbGlkU2V0U3RhdGVXYXJuaW5nSG9vayA9IHJlcXVpcmUoJy4vUmVhY3RJbnZhbGlkU2V0U3RhdGVXYXJuaW5nSG9vaycpO1xudmFyIFJlYWN0SG9zdE9wZXJhdGlvbkhpc3RvcnlIb29rID0gcmVxdWlyZSgnLi9SZWFjdEhvc3RPcGVyYXRpb25IaXN0b3J5SG9vaycpO1xudmFyIFJlYWN0Q29tcG9uZW50VHJlZUhvb2sgPSByZXF1aXJlKCdyZWFjdC9saWIvUmVhY3RDb21wb25lbnRUcmVlSG9vaycpO1xudmFyIEV4ZWN1dGlvbkVudmlyb25tZW50ID0gcmVxdWlyZSgnZmJqcy9saWIvRXhlY3V0aW9uRW52aXJvbm1lbnQnKTtcblxudmFyIHBlcmZvcm1hbmNlTm93ID0gcmVxdWlyZSgnZmJqcy9saWIvcGVyZm9ybWFuY2VOb3cnKTtcbnZhciB3YXJuaW5nID0gcmVxdWlyZSgnZmJqcy9saWIvd2FybmluZycpO1xuXG52YXIgaG9va3MgPSBbXTtcbnZhciBkaWRIb29rVGhyb3dGb3JFdmVudCA9IHt9O1xuXG5mdW5jdGlvbiBjYWxsSG9vayhldmVudCwgZm4sIGNvbnRleHQsIGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQsIGFyZzUpIHtcbiAgdHJ5IHtcbiAgICBmbi5jYWxsKGNvbnRleHQsIGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQsIGFyZzUpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcoZGlkSG9va1Rocm93Rm9yRXZlbnRbZXZlbnRdLCAnRXhjZXB0aW9uIHRocm93biBieSBob29rIHdoaWxlIGhhbmRsaW5nICVzOiAlcycsIGV2ZW50LCBlICsgJ1xcbicgKyBlLnN0YWNrKSA6IHZvaWQgMDtcbiAgICBkaWRIb29rVGhyb3dGb3JFdmVudFtldmVudF0gPSB0cnVlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGVtaXRFdmVudChldmVudCwgYXJnMSwgYXJnMiwgYXJnMywgYXJnNCwgYXJnNSkge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGhvb2tzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGhvb2sgPSBob29rc1tpXTtcbiAgICB2YXIgZm4gPSBob29rW2V2ZW50XTtcbiAgICBpZiAoZm4pIHtcbiAgICAgIGNhbGxIb29rKGV2ZW50LCBmbiwgaG9vaywgYXJnMSwgYXJnMiwgYXJnMywgYXJnNCwgYXJnNSk7XG4gICAgfVxuICB9XG59XG5cbnZhciBpc1Byb2ZpbGluZyA9IGZhbHNlO1xudmFyIGZsdXNoSGlzdG9yeSA9IFtdO1xudmFyIGxpZmVDeWNsZVRpbWVyU3RhY2sgPSBbXTtcbnZhciBjdXJyZW50Rmx1c2hOZXN0aW5nID0gMDtcbnZhciBjdXJyZW50Rmx1c2hNZWFzdXJlbWVudHMgPSBbXTtcbnZhciBjdXJyZW50Rmx1c2hTdGFydFRpbWUgPSAwO1xudmFyIGN1cnJlbnRUaW1lckRlYnVnSUQgPSBudWxsO1xudmFyIGN1cnJlbnRUaW1lclN0YXJ0VGltZSA9IDA7XG52YXIgY3VycmVudFRpbWVyTmVzdGVkRmx1c2hEdXJhdGlvbiA9IDA7XG52YXIgY3VycmVudFRpbWVyVHlwZSA9IG51bGw7XG5cbnZhciBsaWZlQ3ljbGVUaW1lckhhc1dhcm5lZCA9IGZhbHNlO1xuXG5mdW5jdGlvbiBjbGVhckhpc3RvcnkoKSB7XG4gIFJlYWN0Q29tcG9uZW50VHJlZUhvb2sucHVyZ2VVbm1vdW50ZWRDb21wb25lbnRzKCk7XG4gIFJlYWN0SG9zdE9wZXJhdGlvbkhpc3RvcnlIb29rLmNsZWFySGlzdG9yeSgpO1xufVxuXG5mdW5jdGlvbiBnZXRUcmVlU25hcHNob3QocmVnaXN0ZXJlZElEcykge1xuICByZXR1cm4gcmVnaXN0ZXJlZElEcy5yZWR1Y2UoZnVuY3Rpb24gKHRyZWUsIGlkKSB7XG4gICAgdmFyIG93bmVySUQgPSBSZWFjdENvbXBvbmVudFRyZWVIb29rLmdldE93bmVySUQoaWQpO1xuICAgIHZhciBwYXJlbnRJRCA9IFJlYWN0Q29tcG9uZW50VHJlZUhvb2suZ2V0UGFyZW50SUQoaWQpO1xuICAgIHRyZWVbaWRdID0ge1xuICAgICAgZGlzcGxheU5hbWU6IFJlYWN0Q29tcG9uZW50VHJlZUhvb2suZ2V0RGlzcGxheU5hbWUoaWQpLFxuICAgICAgdGV4dDogUmVhY3RDb21wb25lbnRUcmVlSG9vay5nZXRUZXh0KGlkKSxcbiAgICAgIHVwZGF0ZUNvdW50OiBSZWFjdENvbXBvbmVudFRyZWVIb29rLmdldFVwZGF0ZUNvdW50KGlkKSxcbiAgICAgIGNoaWxkSURzOiBSZWFjdENvbXBvbmVudFRyZWVIb29rLmdldENoaWxkSURzKGlkKSxcbiAgICAgIC8vIFRleHQgbm9kZXMgZG9uJ3QgaGF2ZSBvd25lcnMgYnV0IHRoaXMgaXMgY2xvc2UgZW5vdWdoLlxuICAgICAgb3duZXJJRDogb3duZXJJRCB8fCBwYXJlbnRJRCAmJiBSZWFjdENvbXBvbmVudFRyZWVIb29rLmdldE93bmVySUQocGFyZW50SUQpIHx8IDAsXG4gICAgICBwYXJlbnRJRDogcGFyZW50SURcbiAgICB9O1xuICAgIHJldHVybiB0cmVlO1xuICB9LCB7fSk7XG59XG5cbmZ1bmN0aW9uIHJlc2V0TWVhc3VyZW1lbnRzKCkge1xuICB2YXIgcHJldmlvdXNTdGFydFRpbWUgPSBjdXJyZW50Rmx1c2hTdGFydFRpbWU7XG4gIHZhciBwcmV2aW91c01lYXN1cmVtZW50cyA9IGN1cnJlbnRGbHVzaE1lYXN1cmVtZW50cztcbiAgdmFyIHByZXZpb3VzT3BlcmF0aW9ucyA9IFJlYWN0SG9zdE9wZXJhdGlvbkhpc3RvcnlIb29rLmdldEhpc3RvcnkoKTtcblxuICBpZiAoY3VycmVudEZsdXNoTmVzdGluZyA9PT0gMCkge1xuICAgIGN1cnJlbnRGbHVzaFN0YXJ0VGltZSA9IDA7XG4gICAgY3VycmVudEZsdXNoTWVhc3VyZW1lbnRzID0gW107XG4gICAgY2xlYXJIaXN0b3J5KCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKHByZXZpb3VzTWVhc3VyZW1lbnRzLmxlbmd0aCB8fCBwcmV2aW91c09wZXJhdGlvbnMubGVuZ3RoKSB7XG4gICAgdmFyIHJlZ2lzdGVyZWRJRHMgPSBSZWFjdENvbXBvbmVudFRyZWVIb29rLmdldFJlZ2lzdGVyZWRJRHMoKTtcbiAgICBmbHVzaEhpc3RvcnkucHVzaCh7XG4gICAgICBkdXJhdGlvbjogcGVyZm9ybWFuY2VOb3coKSAtIHByZXZpb3VzU3RhcnRUaW1lLFxuICAgICAgbWVhc3VyZW1lbnRzOiBwcmV2aW91c01lYXN1cmVtZW50cyB8fCBbXSxcbiAgICAgIG9wZXJhdGlvbnM6IHByZXZpb3VzT3BlcmF0aW9ucyB8fCBbXSxcbiAgICAgIHRyZWVTbmFwc2hvdDogZ2V0VHJlZVNuYXBzaG90KHJlZ2lzdGVyZWRJRHMpXG4gICAgfSk7XG4gIH1cblxuICBjbGVhckhpc3RvcnkoKTtcbiAgY3VycmVudEZsdXNoU3RhcnRUaW1lID0gcGVyZm9ybWFuY2VOb3coKTtcbiAgY3VycmVudEZsdXNoTWVhc3VyZW1lbnRzID0gW107XG59XG5cbmZ1bmN0aW9uIGNoZWNrRGVidWdJRChkZWJ1Z0lEKSB7XG4gIHZhciBhbGxvd1Jvb3QgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IGZhbHNlO1xuXG4gIGlmIChhbGxvd1Jvb3QgJiYgZGVidWdJRCA9PT0gMCkge1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoIWRlYnVnSUQpIHtcbiAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyhmYWxzZSwgJ1JlYWN0RGVidWdUb29sOiBkZWJ1Z0lEIG1heSBub3QgYmUgZW1wdHkuJykgOiB2b2lkIDA7XG4gIH1cbn1cblxuZnVuY3Rpb24gYmVnaW5MaWZlQ3ljbGVUaW1lcihkZWJ1Z0lELCB0aW1lclR5cGUpIHtcbiAgaWYgKGN1cnJlbnRGbHVzaE5lc3RpbmcgPT09IDApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKGN1cnJlbnRUaW1lclR5cGUgJiYgIWxpZmVDeWNsZVRpbWVySGFzV2FybmVkKSB7XG4gICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcoZmFsc2UsICdUaGVyZSBpcyBhbiBpbnRlcm5hbCBlcnJvciBpbiB0aGUgUmVhY3QgcGVyZm9ybWFuY2UgbWVhc3VyZW1lbnQgY29kZS4gJyArICdEaWQgbm90IGV4cGVjdCAlcyB0aW1lciB0byBzdGFydCB3aGlsZSAlcyB0aW1lciBpcyBzdGlsbCBpbiAnICsgJ3Byb2dyZXNzIGZvciAlcyBpbnN0YW5jZS4nLCB0aW1lclR5cGUsIGN1cnJlbnRUaW1lclR5cGUgfHwgJ25vJywgZGVidWdJRCA9PT0gY3VycmVudFRpbWVyRGVidWdJRCA/ICd0aGUgc2FtZScgOiAnYW5vdGhlcicpIDogdm9pZCAwO1xuICAgIGxpZmVDeWNsZVRpbWVySGFzV2FybmVkID0gdHJ1ZTtcbiAgfVxuICBjdXJyZW50VGltZXJTdGFydFRpbWUgPSBwZXJmb3JtYW5jZU5vdygpO1xuICBjdXJyZW50VGltZXJOZXN0ZWRGbHVzaER1cmF0aW9uID0gMDtcbiAgY3VycmVudFRpbWVyRGVidWdJRCA9IGRlYnVnSUQ7XG4gIGN1cnJlbnRUaW1lclR5cGUgPSB0aW1lclR5cGU7XG59XG5cbmZ1bmN0aW9uIGVuZExpZmVDeWNsZVRpbWVyKGRlYnVnSUQsIHRpbWVyVHlwZSkge1xuICBpZiAoY3VycmVudEZsdXNoTmVzdGluZyA9PT0gMCkge1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoY3VycmVudFRpbWVyVHlwZSAhPT0gdGltZXJUeXBlICYmICFsaWZlQ3ljbGVUaW1lckhhc1dhcm5lZCkge1xuICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKGZhbHNlLCAnVGhlcmUgaXMgYW4gaW50ZXJuYWwgZXJyb3IgaW4gdGhlIFJlYWN0IHBlcmZvcm1hbmNlIG1lYXN1cmVtZW50IGNvZGUuICcgKyAnV2UgZGlkIG5vdCBleHBlY3QgJXMgdGltZXIgdG8gc3RvcCB3aGlsZSAlcyB0aW1lciBpcyBzdGlsbCBpbiAnICsgJ3Byb2dyZXNzIGZvciAlcyBpbnN0YW5jZS4gUGxlYXNlIHJlcG9ydCB0aGlzIGFzIGEgYnVnIGluIFJlYWN0LicsIHRpbWVyVHlwZSwgY3VycmVudFRpbWVyVHlwZSB8fCAnbm8nLCBkZWJ1Z0lEID09PSBjdXJyZW50VGltZXJEZWJ1Z0lEID8gJ3RoZSBzYW1lJyA6ICdhbm90aGVyJykgOiB2b2lkIDA7XG4gICAgbGlmZUN5Y2xlVGltZXJIYXNXYXJuZWQgPSB0cnVlO1xuICB9XG4gIGlmIChpc1Byb2ZpbGluZykge1xuICAgIGN1cnJlbnRGbHVzaE1lYXN1cmVtZW50cy5wdXNoKHtcbiAgICAgIHRpbWVyVHlwZTogdGltZXJUeXBlLFxuICAgICAgaW5zdGFuY2VJRDogZGVidWdJRCxcbiAgICAgIGR1cmF0aW9uOiBwZXJmb3JtYW5jZU5vdygpIC0gY3VycmVudFRpbWVyU3RhcnRUaW1lIC0gY3VycmVudFRpbWVyTmVzdGVkRmx1c2hEdXJhdGlvblxuICAgIH0pO1xuICB9XG4gIGN1cnJlbnRUaW1lclN0YXJ0VGltZSA9IDA7XG4gIGN1cnJlbnRUaW1lck5lc3RlZEZsdXNoRHVyYXRpb24gPSAwO1xuICBjdXJyZW50VGltZXJEZWJ1Z0lEID0gbnVsbDtcbiAgY3VycmVudFRpbWVyVHlwZSA9IG51bGw7XG59XG5cbmZ1bmN0aW9uIHBhdXNlQ3VycmVudExpZmVDeWNsZVRpbWVyKCkge1xuICB2YXIgY3VycmVudFRpbWVyID0ge1xuICAgIHN0YXJ0VGltZTogY3VycmVudFRpbWVyU3RhcnRUaW1lLFxuICAgIG5lc3RlZEZsdXNoU3RhcnRUaW1lOiBwZXJmb3JtYW5jZU5vdygpLFxuICAgIGRlYnVnSUQ6IGN1cnJlbnRUaW1lckRlYnVnSUQsXG4gICAgdGltZXJUeXBlOiBjdXJyZW50VGltZXJUeXBlXG4gIH07XG4gIGxpZmVDeWNsZVRpbWVyU3RhY2sucHVzaChjdXJyZW50VGltZXIpO1xuICBjdXJyZW50VGltZXJTdGFydFRpbWUgPSAwO1xuICBjdXJyZW50VGltZXJOZXN0ZWRGbHVzaER1cmF0aW9uID0gMDtcbiAgY3VycmVudFRpbWVyRGVidWdJRCA9IG51bGw7XG4gIGN1cnJlbnRUaW1lclR5cGUgPSBudWxsO1xufVxuXG5mdW5jdGlvbiByZXN1bWVDdXJyZW50TGlmZUN5Y2xlVGltZXIoKSB7XG4gIHZhciBfbGlmZUN5Y2xlVGltZXJTdGFjayQgPSBsaWZlQ3ljbGVUaW1lclN0YWNrLnBvcCgpLFxuICAgICAgc3RhcnRUaW1lID0gX2xpZmVDeWNsZVRpbWVyU3RhY2skLnN0YXJ0VGltZSxcbiAgICAgIG5lc3RlZEZsdXNoU3RhcnRUaW1lID0gX2xpZmVDeWNsZVRpbWVyU3RhY2skLm5lc3RlZEZsdXNoU3RhcnRUaW1lLFxuICAgICAgZGVidWdJRCA9IF9saWZlQ3ljbGVUaW1lclN0YWNrJC5kZWJ1Z0lELFxuICAgICAgdGltZXJUeXBlID0gX2xpZmVDeWNsZVRpbWVyU3RhY2skLnRpbWVyVHlwZTtcblxuICB2YXIgbmVzdGVkRmx1c2hEdXJhdGlvbiA9IHBlcmZvcm1hbmNlTm93KCkgLSBuZXN0ZWRGbHVzaFN0YXJ0VGltZTtcbiAgY3VycmVudFRpbWVyU3RhcnRUaW1lID0gc3RhcnRUaW1lO1xuICBjdXJyZW50VGltZXJOZXN0ZWRGbHVzaER1cmF0aW9uICs9IG5lc3RlZEZsdXNoRHVyYXRpb247XG4gIGN1cnJlbnRUaW1lckRlYnVnSUQgPSBkZWJ1Z0lEO1xuICBjdXJyZW50VGltZXJUeXBlID0gdGltZXJUeXBlO1xufVxuXG52YXIgbGFzdE1hcmtUaW1lU3RhbXAgPSAwO1xudmFyIGNhblVzZVBlcmZvcm1hbmNlTWVhc3VyZSA9IHR5cGVvZiBwZXJmb3JtYW5jZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHBlcmZvcm1hbmNlLm1hcmsgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHBlcmZvcm1hbmNlLmNsZWFyTWFya3MgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHBlcmZvcm1hbmNlLm1lYXN1cmUgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHBlcmZvcm1hbmNlLmNsZWFyTWVhc3VyZXMgPT09ICdmdW5jdGlvbic7XG5cbmZ1bmN0aW9uIHNob3VsZE1hcmsoZGVidWdJRCkge1xuICBpZiAoIWlzUHJvZmlsaW5nIHx8ICFjYW5Vc2VQZXJmb3JtYW5jZU1lYXN1cmUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIGVsZW1lbnQgPSBSZWFjdENvbXBvbmVudFRyZWVIb29rLmdldEVsZW1lbnQoZGVidWdJRCk7XG4gIGlmIChlbGVtZW50ID09IG51bGwgfHwgdHlwZW9mIGVsZW1lbnQgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBpc0hvc3RFbGVtZW50ID0gdHlwZW9mIGVsZW1lbnQudHlwZSA9PT0gJ3N0cmluZyc7XG4gIGlmIChpc0hvc3RFbGVtZW50KSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBtYXJrQmVnaW4oZGVidWdJRCwgbWFya1R5cGUpIHtcbiAgaWYgKCFzaG91bGRNYXJrKGRlYnVnSUQpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIG1hcmtOYW1lID0gZGVidWdJRCArICc6OicgKyBtYXJrVHlwZTtcbiAgbGFzdE1hcmtUaW1lU3RhbXAgPSBwZXJmb3JtYW5jZU5vdygpO1xuICBwZXJmb3JtYW5jZS5tYXJrKG1hcmtOYW1lKTtcbn1cblxuZnVuY3Rpb24gbWFya0VuZChkZWJ1Z0lELCBtYXJrVHlwZSkge1xuICBpZiAoIXNob3VsZE1hcmsoZGVidWdJRCkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgbWFya05hbWUgPSBkZWJ1Z0lEICsgJzo6JyArIG1hcmtUeXBlO1xuICB2YXIgZGlzcGxheU5hbWUgPSBSZWFjdENvbXBvbmVudFRyZWVIb29rLmdldERpc3BsYXlOYW1lKGRlYnVnSUQpIHx8ICdVbmtub3duJztcblxuICAvLyBDaHJvbWUgaGFzIGFuIGlzc3VlIG9mIGRyb3BwaW5nIG1hcmtlcnMgcmVjb3JkZWQgdG9vIGZhc3Q6XG4gIC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTY0MDY1MlxuICAvLyBUbyB3b3JrIGFyb3VuZCB0aGlzLCB3ZSB3aWxsIG5vdCByZXBvcnQgdmVyeSBzbWFsbCBtZWFzdXJlbWVudHMuXG4gIC8vIEkgZGV0ZXJtaW5lZCB0aGUgbWFnaWMgbnVtYmVyIGJ5IHR3ZWFraW5nIGl0IGJhY2sgYW5kIGZvcnRoLlxuICAvLyAwLjA1bXMgd2FzIGVub3VnaCB0byBwcmV2ZW50IHRoZSBpc3N1ZSwgYnV0IEkgc2V0IGl0IHRvIDAuMW1zIHRvIGJlIHNhZmUuXG4gIC8vIFdoZW4gdGhlIGJ1ZyBpcyBmaXhlZCwgd2UgY2FuIGBtZWFzdXJlKClgIHVuY29uZGl0aW9uYWxseSBpZiB3ZSB3YW50IHRvLlxuICB2YXIgdGltZVN0YW1wID0gcGVyZm9ybWFuY2VOb3coKTtcbiAgaWYgKHRpbWVTdGFtcCAtIGxhc3RNYXJrVGltZVN0YW1wID4gMC4xKSB7XG4gICAgdmFyIG1lYXN1cmVtZW50TmFtZSA9IGRpc3BsYXlOYW1lICsgJyBbJyArIG1hcmtUeXBlICsgJ10nO1xuICAgIHBlcmZvcm1hbmNlLm1lYXN1cmUobWVhc3VyZW1lbnROYW1lLCBtYXJrTmFtZSk7XG4gIH1cblxuICBwZXJmb3JtYW5jZS5jbGVhck1hcmtzKG1hcmtOYW1lKTtcbiAgaWYgKG1lYXN1cmVtZW50TmFtZSkge1xuICAgIHBlcmZvcm1hbmNlLmNsZWFyTWVhc3VyZXMobWVhc3VyZW1lbnROYW1lKTtcbiAgfVxufVxuXG52YXIgUmVhY3REZWJ1Z1Rvb2wgPSB7XG4gIGFkZEhvb2s6IGZ1bmN0aW9uIChob29rKSB7XG4gICAgaG9va3MucHVzaChob29rKTtcbiAgfSxcbiAgcmVtb3ZlSG9vazogZnVuY3Rpb24gKGhvb2spIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGhvb2tzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoaG9va3NbaV0gPT09IGhvb2spIHtcbiAgICAgICAgaG9va3Muc3BsaWNlKGksIDEpO1xuICAgICAgICBpLS07XG4gICAgICB9XG4gICAgfVxuICB9LFxuICBpc1Byb2ZpbGluZzogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBpc1Byb2ZpbGluZztcbiAgfSxcbiAgYmVnaW5Qcm9maWxpbmc6IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoaXNQcm9maWxpbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpc1Byb2ZpbGluZyA9IHRydWU7XG4gICAgZmx1c2hIaXN0b3J5Lmxlbmd0aCA9IDA7XG4gICAgcmVzZXRNZWFzdXJlbWVudHMoKTtcbiAgICBSZWFjdERlYnVnVG9vbC5hZGRIb29rKFJlYWN0SG9zdE9wZXJhdGlvbkhpc3RvcnlIb29rKTtcbiAgfSxcbiAgZW5kUHJvZmlsaW5nOiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCFpc1Byb2ZpbGluZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlzUHJvZmlsaW5nID0gZmFsc2U7XG4gICAgcmVzZXRNZWFzdXJlbWVudHMoKTtcbiAgICBSZWFjdERlYnVnVG9vbC5yZW1vdmVIb29rKFJlYWN0SG9zdE9wZXJhdGlvbkhpc3RvcnlIb29rKTtcbiAgfSxcbiAgZ2V0Rmx1c2hIaXN0b3J5OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGZsdXNoSGlzdG9yeTtcbiAgfSxcbiAgb25CZWdpbkZsdXNoOiBmdW5jdGlvbiAoKSB7XG4gICAgY3VycmVudEZsdXNoTmVzdGluZysrO1xuICAgIHJlc2V0TWVhc3VyZW1lbnRzKCk7XG4gICAgcGF1c2VDdXJyZW50TGlmZUN5Y2xlVGltZXIoKTtcbiAgICBlbWl0RXZlbnQoJ29uQmVnaW5GbHVzaCcpO1xuICB9LFxuICBvbkVuZEZsdXNoOiBmdW5jdGlvbiAoKSB7XG4gICAgcmVzZXRNZWFzdXJlbWVudHMoKTtcbiAgICBjdXJyZW50Rmx1c2hOZXN0aW5nLS07XG4gICAgcmVzdW1lQ3VycmVudExpZmVDeWNsZVRpbWVyKCk7XG4gICAgZW1pdEV2ZW50KCdvbkVuZEZsdXNoJyk7XG4gIH0sXG4gIG9uQmVnaW5MaWZlQ3ljbGVUaW1lcjogZnVuY3Rpb24gKGRlYnVnSUQsIHRpbWVyVHlwZSkge1xuICAgIGNoZWNrRGVidWdJRChkZWJ1Z0lEKTtcbiAgICBlbWl0RXZlbnQoJ29uQmVnaW5MaWZlQ3ljbGVUaW1lcicsIGRlYnVnSUQsIHRpbWVyVHlwZSk7XG4gICAgbWFya0JlZ2luKGRlYnVnSUQsIHRpbWVyVHlwZSk7XG4gICAgYmVnaW5MaWZlQ3ljbGVUaW1lcihkZWJ1Z0lELCB0aW1lclR5cGUpO1xuICB9LFxuICBvbkVuZExpZmVDeWNsZVRpbWVyOiBmdW5jdGlvbiAoZGVidWdJRCwgdGltZXJUeXBlKSB7XG4gICAgY2hlY2tEZWJ1Z0lEKGRlYnVnSUQpO1xuICAgIGVuZExpZmVDeWNsZVRpbWVyKGRlYnVnSUQsIHRpbWVyVHlwZSk7XG4gICAgbWFya0VuZChkZWJ1Z0lELCB0aW1lclR5cGUpO1xuICAgIGVtaXRFdmVudCgnb25FbmRMaWZlQ3ljbGVUaW1lcicsIGRlYnVnSUQsIHRpbWVyVHlwZSk7XG4gIH0sXG4gIG9uQmVnaW5Qcm9jZXNzaW5nQ2hpbGRDb250ZXh0OiBmdW5jdGlvbiAoKSB7XG4gICAgZW1pdEV2ZW50KCdvbkJlZ2luUHJvY2Vzc2luZ0NoaWxkQ29udGV4dCcpO1xuICB9LFxuICBvbkVuZFByb2Nlc3NpbmdDaGlsZENvbnRleHQ6IGZ1bmN0aW9uICgpIHtcbiAgICBlbWl0RXZlbnQoJ29uRW5kUHJvY2Vzc2luZ0NoaWxkQ29udGV4dCcpO1xuICB9LFxuICBvbkhvc3RPcGVyYXRpb246IGZ1bmN0aW9uIChvcGVyYXRpb24pIHtcbiAgICBjaGVja0RlYnVnSUQob3BlcmF0aW9uLmluc3RhbmNlSUQpO1xuICAgIGVtaXRFdmVudCgnb25Ib3N0T3BlcmF0aW9uJywgb3BlcmF0aW9uKTtcbiAgfSxcbiAgb25TZXRTdGF0ZTogZnVuY3Rpb24gKCkge1xuICAgIGVtaXRFdmVudCgnb25TZXRTdGF0ZScpO1xuICB9LFxuICBvblNldENoaWxkcmVuOiBmdW5jdGlvbiAoZGVidWdJRCwgY2hpbGREZWJ1Z0lEcykge1xuICAgIGNoZWNrRGVidWdJRChkZWJ1Z0lEKTtcbiAgICBjaGlsZERlYnVnSURzLmZvckVhY2goY2hlY2tEZWJ1Z0lEKTtcbiAgICBlbWl0RXZlbnQoJ29uU2V0Q2hpbGRyZW4nLCBkZWJ1Z0lELCBjaGlsZERlYnVnSURzKTtcbiAgfSxcbiAgb25CZWZvcmVNb3VudENvbXBvbmVudDogZnVuY3Rpb24gKGRlYnVnSUQsIGVsZW1lbnQsIHBhcmVudERlYnVnSUQpIHtcbiAgICBjaGVja0RlYnVnSUQoZGVidWdJRCk7XG4gICAgY2hlY2tEZWJ1Z0lEKHBhcmVudERlYnVnSUQsIHRydWUpO1xuICAgIGVtaXRFdmVudCgnb25CZWZvcmVNb3VudENvbXBvbmVudCcsIGRlYnVnSUQsIGVsZW1lbnQsIHBhcmVudERlYnVnSUQpO1xuICAgIG1hcmtCZWdpbihkZWJ1Z0lELCAnbW91bnQnKTtcbiAgfSxcbiAgb25Nb3VudENvbXBvbmVudDogZnVuY3Rpb24gKGRlYnVnSUQpIHtcbiAgICBjaGVja0RlYnVnSUQoZGVidWdJRCk7XG4gICAgbWFya0VuZChkZWJ1Z0lELCAnbW91bnQnKTtcbiAgICBlbWl0RXZlbnQoJ29uTW91bnRDb21wb25lbnQnLCBkZWJ1Z0lEKTtcbiAgfSxcbiAgb25CZWZvcmVVcGRhdGVDb21wb25lbnQ6IGZ1bmN0aW9uIChkZWJ1Z0lELCBlbGVtZW50KSB7XG4gICAgY2hlY2tEZWJ1Z0lEKGRlYnVnSUQpO1xuICAgIGVtaXRFdmVudCgnb25CZWZvcmVVcGRhdGVDb21wb25lbnQnLCBkZWJ1Z0lELCBlbGVtZW50KTtcbiAgICBtYXJrQmVnaW4oZGVidWdJRCwgJ3VwZGF0ZScpO1xuICB9LFxuICBvblVwZGF0ZUNvbXBvbmVudDogZnVuY3Rpb24gKGRlYnVnSUQpIHtcbiAgICBjaGVja0RlYnVnSUQoZGVidWdJRCk7XG4gICAgbWFya0VuZChkZWJ1Z0lELCAndXBkYXRlJyk7XG4gICAgZW1pdEV2ZW50KCdvblVwZGF0ZUNvbXBvbmVudCcsIGRlYnVnSUQpO1xuICB9LFxuICBvbkJlZm9yZVVubW91bnRDb21wb25lbnQ6IGZ1bmN0aW9uIChkZWJ1Z0lEKSB7XG4gICAgY2hlY2tEZWJ1Z0lEKGRlYnVnSUQpO1xuICAgIGVtaXRFdmVudCgnb25CZWZvcmVVbm1vdW50Q29tcG9uZW50JywgZGVidWdJRCk7XG4gICAgbWFya0JlZ2luKGRlYnVnSUQsICd1bm1vdW50Jyk7XG4gIH0sXG4gIG9uVW5tb3VudENvbXBvbmVudDogZnVuY3Rpb24gKGRlYnVnSUQpIHtcbiAgICBjaGVja0RlYnVnSUQoZGVidWdJRCk7XG4gICAgbWFya0VuZChkZWJ1Z0lELCAndW5tb3VudCcpO1xuICAgIGVtaXRFdmVudCgnb25Vbm1vdW50Q29tcG9uZW50JywgZGVidWdJRCk7XG4gIH0sXG4gIG9uVGVzdEV2ZW50OiBmdW5jdGlvbiAoKSB7XG4gICAgZW1pdEV2ZW50KCdvblRlc3RFdmVudCcpO1xuICB9XG59O1xuXG4vLyBUT0RPIHJlbW92ZSB0aGVzZSB3aGVuIFJOL3d3dyBnZXRzIHVwZGF0ZWRcblJlYWN0RGVidWdUb29sLmFkZERldnRvb2wgPSBSZWFjdERlYnVnVG9vbC5hZGRIb29rO1xuUmVhY3REZWJ1Z1Rvb2wucmVtb3ZlRGV2dG9vbCA9IFJlYWN0RGVidWdUb29sLnJlbW92ZUhvb2s7XG5cblJlYWN0RGVidWdUb29sLmFkZEhvb2soUmVhY3RJbnZhbGlkU2V0U3RhdGVXYXJuaW5nSG9vayk7XG5SZWFjdERlYnVnVG9vbC5hZGRIb29rKFJlYWN0Q29tcG9uZW50VHJlZUhvb2spO1xudmFyIHVybCA9IEV4ZWN1dGlvbkVudmlyb25tZW50LmNhblVzZURPTSAmJiB3aW5kb3cubG9jYXRpb24uaHJlZiB8fCAnJztcbmlmICgvWz8mXXJlYWN0X3BlcmZcXGIvLnRlc3QodXJsKSkge1xuICBSZWFjdERlYnVnVG9vbC5iZWdpblByb2ZpbGluZygpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0RGVidWdUb29sO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QtZG9tL2xpYi9SZWFjdERlYnVnVG9vbC5qcyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBfYXNzaWduID0gcmVxdWlyZSgnb2JqZWN0LWFzc2lnbicpO1xuXG52YXIgUmVhY3RVcGRhdGVzID0gcmVxdWlyZSgnLi9SZWFjdFVwZGF0ZXMnKTtcbnZhciBUcmFuc2FjdGlvbiA9IHJlcXVpcmUoJy4vVHJhbnNhY3Rpb24nKTtcblxudmFyIGVtcHR5RnVuY3Rpb24gPSByZXF1aXJlKCdmYmpzL2xpYi9lbXB0eUZ1bmN0aW9uJyk7XG5cbnZhciBSRVNFVF9CQVRDSEVEX1VQREFURVMgPSB7XG4gIGluaXRpYWxpemU6IGVtcHR5RnVuY3Rpb24sXG4gIGNsb3NlOiBmdW5jdGlvbiAoKSB7XG4gICAgUmVhY3REZWZhdWx0QmF0Y2hpbmdTdHJhdGVneS5pc0JhdGNoaW5nVXBkYXRlcyA9IGZhbHNlO1xuICB9XG59O1xuXG52YXIgRkxVU0hfQkFUQ0hFRF9VUERBVEVTID0ge1xuICBpbml0aWFsaXplOiBlbXB0eUZ1bmN0aW9uLFxuICBjbG9zZTogUmVhY3RVcGRhdGVzLmZsdXNoQmF0Y2hlZFVwZGF0ZXMuYmluZChSZWFjdFVwZGF0ZXMpXG59O1xuXG52YXIgVFJBTlNBQ1RJT05fV1JBUFBFUlMgPSBbRkxVU0hfQkFUQ0hFRF9VUERBVEVTLCBSRVNFVF9CQVRDSEVEX1VQREFURVNdO1xuXG5mdW5jdGlvbiBSZWFjdERlZmF1bHRCYXRjaGluZ1N0cmF0ZWd5VHJhbnNhY3Rpb24oKSB7XG4gIHRoaXMucmVpbml0aWFsaXplVHJhbnNhY3Rpb24oKTtcbn1cblxuX2Fzc2lnbihSZWFjdERlZmF1bHRCYXRjaGluZ1N0cmF0ZWd5VHJhbnNhY3Rpb24ucHJvdG90eXBlLCBUcmFuc2FjdGlvbiwge1xuICBnZXRUcmFuc2FjdGlvbldyYXBwZXJzOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIFRSQU5TQUNUSU9OX1dSQVBQRVJTO1xuICB9XG59KTtcblxudmFyIHRyYW5zYWN0aW9uID0gbmV3IFJlYWN0RGVmYXVsdEJhdGNoaW5nU3RyYXRlZ3lUcmFuc2FjdGlvbigpO1xuXG52YXIgUmVhY3REZWZhdWx0QmF0Y2hpbmdTdHJhdGVneSA9IHtcbiAgaXNCYXRjaGluZ1VwZGF0ZXM6IGZhbHNlLFxuXG4gIC8qKlxuICAgKiBDYWxsIHRoZSBwcm92aWRlZCBmdW5jdGlvbiBpbiBhIGNvbnRleHQgd2l0aGluIHdoaWNoIGNhbGxzIHRvIGBzZXRTdGF0ZWBcbiAgICogYW5kIGZyaWVuZHMgYXJlIGJhdGNoZWQgc3VjaCB0aGF0IGNvbXBvbmVudHMgYXJlbid0IHVwZGF0ZWQgdW5uZWNlc3NhcmlseS5cbiAgICovXG4gIGJhdGNoZWRVcGRhdGVzOiBmdW5jdGlvbiAoY2FsbGJhY2ssIGEsIGIsIGMsIGQsIGUpIHtcbiAgICB2YXIgYWxyZWFkeUJhdGNoaW5nVXBkYXRlcyA9IFJlYWN0RGVmYXVsdEJhdGNoaW5nU3RyYXRlZ3kuaXNCYXRjaGluZ1VwZGF0ZXM7XG5cbiAgICBSZWFjdERlZmF1bHRCYXRjaGluZ1N0cmF0ZWd5LmlzQmF0Y2hpbmdVcGRhdGVzID0gdHJ1ZTtcblxuICAgIC8vIFRoZSBjb2RlIGlzIHdyaXR0ZW4gdGhpcyB3YXkgdG8gYXZvaWQgZXh0cmEgYWxsb2NhdGlvbnNcbiAgICBpZiAoYWxyZWFkeUJhdGNoaW5nVXBkYXRlcykge1xuICAgICAgcmV0dXJuIGNhbGxiYWNrKGEsIGIsIGMsIGQsIGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdHJhbnNhY3Rpb24ucGVyZm9ybShjYWxsYmFjaywgbnVsbCwgYSwgYiwgYywgZCwgZSk7XG4gICAgfVxuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0RGVmYXVsdEJhdGNoaW5nU3RyYXRlZ3k7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1kb20vbGliL1JlYWN0RGVmYXVsdEJhdGNoaW5nU3RyYXRlZ3kuanMiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgQVJJQURPTVByb3BlcnR5Q29uZmlnID0gcmVxdWlyZSgnLi9BUklBRE9NUHJvcGVydHlDb25maWcnKTtcbnZhciBCZWZvcmVJbnB1dEV2ZW50UGx1Z2luID0gcmVxdWlyZSgnLi9CZWZvcmVJbnB1dEV2ZW50UGx1Z2luJyk7XG52YXIgQ2hhbmdlRXZlbnRQbHVnaW4gPSByZXF1aXJlKCcuL0NoYW5nZUV2ZW50UGx1Z2luJyk7XG52YXIgRGVmYXVsdEV2ZW50UGx1Z2luT3JkZXIgPSByZXF1aXJlKCcuL0RlZmF1bHRFdmVudFBsdWdpbk9yZGVyJyk7XG52YXIgRW50ZXJMZWF2ZUV2ZW50UGx1Z2luID0gcmVxdWlyZSgnLi9FbnRlckxlYXZlRXZlbnRQbHVnaW4nKTtcbnZhciBIVE1MRE9NUHJvcGVydHlDb25maWcgPSByZXF1aXJlKCcuL0hUTUxET01Qcm9wZXJ0eUNvbmZpZycpO1xudmFyIFJlYWN0Q29tcG9uZW50QnJvd3NlckVudmlyb25tZW50ID0gcmVxdWlyZSgnLi9SZWFjdENvbXBvbmVudEJyb3dzZXJFbnZpcm9ubWVudCcpO1xudmFyIFJlYWN0RE9NQ29tcG9uZW50ID0gcmVxdWlyZSgnLi9SZWFjdERPTUNvbXBvbmVudCcpO1xudmFyIFJlYWN0RE9NQ29tcG9uZW50VHJlZSA9IHJlcXVpcmUoJy4vUmVhY3RET01Db21wb25lbnRUcmVlJyk7XG52YXIgUmVhY3RET01FbXB0eUNvbXBvbmVudCA9IHJlcXVpcmUoJy4vUmVhY3RET01FbXB0eUNvbXBvbmVudCcpO1xudmFyIFJlYWN0RE9NVHJlZVRyYXZlcnNhbCA9IHJlcXVpcmUoJy4vUmVhY3RET01UcmVlVHJhdmVyc2FsJyk7XG52YXIgUmVhY3RET01UZXh0Q29tcG9uZW50ID0gcmVxdWlyZSgnLi9SZWFjdERPTVRleHRDb21wb25lbnQnKTtcbnZhciBSZWFjdERlZmF1bHRCYXRjaGluZ1N0cmF0ZWd5ID0gcmVxdWlyZSgnLi9SZWFjdERlZmF1bHRCYXRjaGluZ1N0cmF0ZWd5Jyk7XG52YXIgUmVhY3RFdmVudExpc3RlbmVyID0gcmVxdWlyZSgnLi9SZWFjdEV2ZW50TGlzdGVuZXInKTtcbnZhciBSZWFjdEluamVjdGlvbiA9IHJlcXVpcmUoJy4vUmVhY3RJbmplY3Rpb24nKTtcbnZhciBSZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9uID0gcmVxdWlyZSgnLi9SZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9uJyk7XG52YXIgU1ZHRE9NUHJvcGVydHlDb25maWcgPSByZXF1aXJlKCcuL1NWR0RPTVByb3BlcnR5Q29uZmlnJyk7XG52YXIgU2VsZWN0RXZlbnRQbHVnaW4gPSByZXF1aXJlKCcuL1NlbGVjdEV2ZW50UGx1Z2luJyk7XG52YXIgU2ltcGxlRXZlbnRQbHVnaW4gPSByZXF1aXJlKCcuL1NpbXBsZUV2ZW50UGx1Z2luJyk7XG5cbnZhciBhbHJlYWR5SW5qZWN0ZWQgPSBmYWxzZTtcblxuZnVuY3Rpb24gaW5qZWN0KCkge1xuICBpZiAoYWxyZWFkeUluamVjdGVkKSB7XG4gICAgLy8gVE9ETzogVGhpcyBpcyBjdXJyZW50bHkgdHJ1ZSBiZWNhdXNlIHRoZXNlIGluamVjdGlvbnMgYXJlIHNoYXJlZCBiZXR3ZWVuXG4gICAgLy8gdGhlIGNsaWVudCBhbmQgdGhlIHNlcnZlciBwYWNrYWdlLiBUaGV5IHNob3VsZCBiZSBidWlsdCBpbmRlcGVuZGVudGx5XG4gICAgLy8gYW5kIG5vdCBzaGFyZSBhbnkgaW5qZWN0aW9uIHN0YXRlLiBUaGVuIHRoaXMgcHJvYmxlbSB3aWxsIGJlIHNvbHZlZC5cbiAgICByZXR1cm47XG4gIH1cbiAgYWxyZWFkeUluamVjdGVkID0gdHJ1ZTtcblxuICBSZWFjdEluamVjdGlvbi5FdmVudEVtaXR0ZXIuaW5qZWN0UmVhY3RFdmVudExpc3RlbmVyKFJlYWN0RXZlbnRMaXN0ZW5lcik7XG5cbiAgLyoqXG4gICAqIEluamVjdCBtb2R1bGVzIGZvciByZXNvbHZpbmcgRE9NIGhpZXJhcmNoeSBhbmQgcGx1Z2luIG9yZGVyaW5nLlxuICAgKi9cbiAgUmVhY3RJbmplY3Rpb24uRXZlbnRQbHVnaW5IdWIuaW5qZWN0RXZlbnRQbHVnaW5PcmRlcihEZWZhdWx0RXZlbnRQbHVnaW5PcmRlcik7XG4gIFJlYWN0SW5qZWN0aW9uLkV2ZW50UGx1Z2luVXRpbHMuaW5qZWN0Q29tcG9uZW50VHJlZShSZWFjdERPTUNvbXBvbmVudFRyZWUpO1xuICBSZWFjdEluamVjdGlvbi5FdmVudFBsdWdpblV0aWxzLmluamVjdFRyZWVUcmF2ZXJzYWwoUmVhY3RET01UcmVlVHJhdmVyc2FsKTtcblxuICAvKipcbiAgICogU29tZSBpbXBvcnRhbnQgZXZlbnQgcGx1Z2lucyBpbmNsdWRlZCBieSBkZWZhdWx0ICh3aXRob3V0IGhhdmluZyB0byByZXF1aXJlXG4gICAqIHRoZW0pLlxuICAgKi9cbiAgUmVhY3RJbmplY3Rpb24uRXZlbnRQbHVnaW5IdWIuaW5qZWN0RXZlbnRQbHVnaW5zQnlOYW1lKHtcbiAgICBTaW1wbGVFdmVudFBsdWdpbjogU2ltcGxlRXZlbnRQbHVnaW4sXG4gICAgRW50ZXJMZWF2ZUV2ZW50UGx1Z2luOiBFbnRlckxlYXZlRXZlbnRQbHVnaW4sXG4gICAgQ2hhbmdlRXZlbnRQbHVnaW46IENoYW5nZUV2ZW50UGx1Z2luLFxuICAgIFNlbGVjdEV2ZW50UGx1Z2luOiBTZWxlY3RFdmVudFBsdWdpbixcbiAgICBCZWZvcmVJbnB1dEV2ZW50UGx1Z2luOiBCZWZvcmVJbnB1dEV2ZW50UGx1Z2luXG4gIH0pO1xuXG4gIFJlYWN0SW5qZWN0aW9uLkhvc3RDb21wb25lbnQuaW5qZWN0R2VuZXJpY0NvbXBvbmVudENsYXNzKFJlYWN0RE9NQ29tcG9uZW50KTtcblxuICBSZWFjdEluamVjdGlvbi5Ib3N0Q29tcG9uZW50LmluamVjdFRleHRDb21wb25lbnRDbGFzcyhSZWFjdERPTVRleHRDb21wb25lbnQpO1xuXG4gIFJlYWN0SW5qZWN0aW9uLkRPTVByb3BlcnR5LmluamVjdERPTVByb3BlcnR5Q29uZmlnKEFSSUFET01Qcm9wZXJ0eUNvbmZpZyk7XG4gIFJlYWN0SW5qZWN0aW9uLkRPTVByb3BlcnR5LmluamVjdERPTVByb3BlcnR5Q29uZmlnKEhUTUxET01Qcm9wZXJ0eUNvbmZpZyk7XG4gIFJlYWN0SW5qZWN0aW9uLkRPTVByb3BlcnR5LmluamVjdERPTVByb3BlcnR5Q29uZmlnKFNWR0RPTVByb3BlcnR5Q29uZmlnKTtcblxuICBSZWFjdEluamVjdGlvbi5FbXB0eUNvbXBvbmVudC5pbmplY3RFbXB0eUNvbXBvbmVudEZhY3RvcnkoZnVuY3Rpb24gKGluc3RhbnRpYXRlKSB7XG4gICAgcmV0dXJuIG5ldyBSZWFjdERPTUVtcHR5Q29tcG9uZW50KGluc3RhbnRpYXRlKTtcbiAgfSk7XG5cbiAgUmVhY3RJbmplY3Rpb24uVXBkYXRlcy5pbmplY3RSZWNvbmNpbGVUcmFuc2FjdGlvbihSZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9uKTtcbiAgUmVhY3RJbmplY3Rpb24uVXBkYXRlcy5pbmplY3RCYXRjaGluZ1N0cmF0ZWd5KFJlYWN0RGVmYXVsdEJhdGNoaW5nU3RyYXRlZ3kpO1xuXG4gIFJlYWN0SW5qZWN0aW9uLkNvbXBvbmVudC5pbmplY3RFbnZpcm9ubWVudChSZWFjdENvbXBvbmVudEJyb3dzZXJFbnZpcm9ubWVudCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpbmplY3Q6IGluamVjdFxufTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3JlYWN0LWRvbS9saWIvUmVhY3REZWZhdWx0SW5qZWN0aW9uLmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxNC1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG4vLyBUaGUgU3ltYm9sIHVzZWQgdG8gdGFnIHRoZSBSZWFjdEVsZW1lbnQgdHlwZS4gSWYgdGhlcmUgaXMgbm8gbmF0aXZlIFN5bWJvbFxuLy8gbm9yIHBvbHlmaWxsLCB0aGVuIGEgcGxhaW4gbnVtYmVyIGlzIHVzZWQgZm9yIHBlcmZvcm1hbmNlLlxuXG52YXIgUkVBQ1RfRUxFTUVOVF9UWVBFID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2xbJ2ZvciddICYmIFN5bWJvbFsnZm9yJ10oJ3JlYWN0LmVsZW1lbnQnKSB8fCAweGVhYzc7XG5cbm1vZHVsZS5leHBvcnRzID0gUkVBQ1RfRUxFTUVOVF9UWVBFO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QtZG9tL2xpYi9SZWFjdEVsZW1lbnRTeW1ib2wuanMiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgRXZlbnRQbHVnaW5IdWIgPSByZXF1aXJlKCcuL0V2ZW50UGx1Z2luSHViJyk7XG5cbmZ1bmN0aW9uIHJ1bkV2ZW50UXVldWVJbkJhdGNoKGV2ZW50cykge1xuICBFdmVudFBsdWdpbkh1Yi5lbnF1ZXVlRXZlbnRzKGV2ZW50cyk7XG4gIEV2ZW50UGx1Z2luSHViLnByb2Nlc3NFdmVudFF1ZXVlKGZhbHNlKTtcbn1cblxudmFyIFJlYWN0RXZlbnRFbWl0dGVyTWl4aW4gPSB7XG4gIC8qKlxuICAgKiBTdHJlYW1zIGEgZmlyZWQgdG9wLWxldmVsIGV2ZW50IHRvIGBFdmVudFBsdWdpbkh1YmAgd2hlcmUgcGx1Z2lucyBoYXZlIHRoZVxuICAgKiBvcHBvcnR1bml0eSB0byBjcmVhdGUgYFJlYWN0RXZlbnRgcyB0byBiZSBkaXNwYXRjaGVkLlxuICAgKi9cbiAgaGFuZGxlVG9wTGV2ZWw6IGZ1bmN0aW9uICh0b3BMZXZlbFR5cGUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCkge1xuICAgIHZhciBldmVudHMgPSBFdmVudFBsdWdpbkh1Yi5leHRyYWN0RXZlbnRzKHRvcExldmVsVHlwZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KTtcbiAgICBydW5FdmVudFF1ZXVlSW5CYXRjaChldmVudHMpO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0RXZlbnRFbWl0dGVyTWl4aW47XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1kb20vbGliL1JlYWN0RXZlbnRFbWl0dGVyTWl4aW4uanMiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgX2Fzc2lnbiA9IHJlcXVpcmUoJ29iamVjdC1hc3NpZ24nKTtcblxudmFyIEV2ZW50TGlzdGVuZXIgPSByZXF1aXJlKCdmYmpzL2xpYi9FdmVudExpc3RlbmVyJyk7XG52YXIgRXhlY3V0aW9uRW52aXJvbm1lbnQgPSByZXF1aXJlKCdmYmpzL2xpYi9FeGVjdXRpb25FbnZpcm9ubWVudCcpO1xudmFyIFBvb2xlZENsYXNzID0gcmVxdWlyZSgnLi9Qb29sZWRDbGFzcycpO1xudmFyIFJlYWN0RE9NQ29tcG9uZW50VHJlZSA9IHJlcXVpcmUoJy4vUmVhY3RET01Db21wb25lbnRUcmVlJyk7XG52YXIgUmVhY3RVcGRhdGVzID0gcmVxdWlyZSgnLi9SZWFjdFVwZGF0ZXMnKTtcblxudmFyIGdldEV2ZW50VGFyZ2V0ID0gcmVxdWlyZSgnLi9nZXRFdmVudFRhcmdldCcpO1xudmFyIGdldFVuYm91bmRlZFNjcm9sbFBvc2l0aW9uID0gcmVxdWlyZSgnZmJqcy9saWIvZ2V0VW5ib3VuZGVkU2Nyb2xsUG9zaXRpb24nKTtcblxuLyoqXG4gKiBGaW5kIHRoZSBkZWVwZXN0IFJlYWN0IGNvbXBvbmVudCBjb21wbGV0ZWx5IGNvbnRhaW5pbmcgdGhlIHJvb3Qgb2YgdGhlXG4gKiBwYXNzZWQtaW4gaW5zdGFuY2UgKGZvciB1c2Ugd2hlbiBlbnRpcmUgUmVhY3QgdHJlZXMgYXJlIG5lc3RlZCB3aXRoaW4gZWFjaFxuICogb3RoZXIpLiBJZiBSZWFjdCB0cmVlcyBhcmUgbm90IG5lc3RlZCwgcmV0dXJucyBudWxsLlxuICovXG5mdW5jdGlvbiBmaW5kUGFyZW50KGluc3QpIHtcbiAgLy8gVE9ETzogSXQgbWF5IGJlIGEgZ29vZCBpZGVhIHRvIGNhY2hlIHRoaXMgdG8gcHJldmVudCB1bm5lY2Vzc2FyeSBET01cbiAgLy8gdHJhdmVyc2FsLCBidXQgY2FjaGluZyBpcyBkaWZmaWN1bHQgdG8gZG8gY29ycmVjdGx5IHdpdGhvdXQgdXNpbmcgYVxuICAvLyBtdXRhdGlvbiBvYnNlcnZlciB0byBsaXN0ZW4gZm9yIGFsbCBET00gY2hhbmdlcy5cbiAgd2hpbGUgKGluc3QuX2hvc3RQYXJlbnQpIHtcbiAgICBpbnN0ID0gaW5zdC5faG9zdFBhcmVudDtcbiAgfVxuICB2YXIgcm9vdE5vZGUgPSBSZWFjdERPTUNvbXBvbmVudFRyZWUuZ2V0Tm9kZUZyb21JbnN0YW5jZShpbnN0KTtcbiAgdmFyIGNvbnRhaW5lciA9IHJvb3ROb2RlLnBhcmVudE5vZGU7XG4gIHJldHVybiBSZWFjdERPTUNvbXBvbmVudFRyZWUuZ2V0Q2xvc2VzdEluc3RhbmNlRnJvbU5vZGUoY29udGFpbmVyKTtcbn1cblxuLy8gVXNlZCB0byBzdG9yZSBhbmNlc3RvciBoaWVyYXJjaHkgaW4gdG9wIGxldmVsIGNhbGxiYWNrXG5mdW5jdGlvbiBUb3BMZXZlbENhbGxiYWNrQm9va0tlZXBpbmcodG9wTGV2ZWxUeXBlLCBuYXRpdmVFdmVudCkge1xuICB0aGlzLnRvcExldmVsVHlwZSA9IHRvcExldmVsVHlwZTtcbiAgdGhpcy5uYXRpdmVFdmVudCA9IG5hdGl2ZUV2ZW50O1xuICB0aGlzLmFuY2VzdG9ycyA9IFtdO1xufVxuX2Fzc2lnbihUb3BMZXZlbENhbGxiYWNrQm9va0tlZXBpbmcucHJvdG90eXBlLCB7XG4gIGRlc3RydWN0b3I6IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLnRvcExldmVsVHlwZSA9IG51bGw7XG4gICAgdGhpcy5uYXRpdmVFdmVudCA9IG51bGw7XG4gICAgdGhpcy5hbmNlc3RvcnMubGVuZ3RoID0gMDtcbiAgfVxufSk7XG5Qb29sZWRDbGFzcy5hZGRQb29saW5nVG8oVG9wTGV2ZWxDYWxsYmFja0Jvb2tLZWVwaW5nLCBQb29sZWRDbGFzcy50d29Bcmd1bWVudFBvb2xlcik7XG5cbmZ1bmN0aW9uIGhhbmRsZVRvcExldmVsSW1wbChib29rS2VlcGluZykge1xuICB2YXIgbmF0aXZlRXZlbnRUYXJnZXQgPSBnZXRFdmVudFRhcmdldChib29rS2VlcGluZy5uYXRpdmVFdmVudCk7XG4gIHZhciB0YXJnZXRJbnN0ID0gUmVhY3RET01Db21wb25lbnRUcmVlLmdldENsb3Nlc3RJbnN0YW5jZUZyb21Ob2RlKG5hdGl2ZUV2ZW50VGFyZ2V0KTtcblxuICAvLyBMb29wIHRocm91Z2ggdGhlIGhpZXJhcmNoeSwgaW4gY2FzZSB0aGVyZSdzIGFueSBuZXN0ZWQgY29tcG9uZW50cy5cbiAgLy8gSXQncyBpbXBvcnRhbnQgdGhhdCB3ZSBidWlsZCB0aGUgYXJyYXkgb2YgYW5jZXN0b3JzIGJlZm9yZSBjYWxsaW5nIGFueVxuICAvLyBldmVudCBoYW5kbGVycywgYmVjYXVzZSBldmVudCBoYW5kbGVycyBjYW4gbW9kaWZ5IHRoZSBET00sIGxlYWRpbmcgdG9cbiAgLy8gaW5jb25zaXN0ZW5jaWVzIHdpdGggUmVhY3RNb3VudCdzIG5vZGUgY2FjaGUuIFNlZSAjMTEwNS5cbiAgdmFyIGFuY2VzdG9yID0gdGFyZ2V0SW5zdDtcbiAgZG8ge1xuICAgIGJvb2tLZWVwaW5nLmFuY2VzdG9ycy5wdXNoKGFuY2VzdG9yKTtcbiAgICBhbmNlc3RvciA9IGFuY2VzdG9yICYmIGZpbmRQYXJlbnQoYW5jZXN0b3IpO1xuICB9IHdoaWxlIChhbmNlc3Rvcik7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBib29rS2VlcGluZy5hbmNlc3RvcnMubGVuZ3RoOyBpKyspIHtcbiAgICB0YXJnZXRJbnN0ID0gYm9va0tlZXBpbmcuYW5jZXN0b3JzW2ldO1xuICAgIFJlYWN0RXZlbnRMaXN0ZW5lci5faGFuZGxlVG9wTGV2ZWwoYm9va0tlZXBpbmcudG9wTGV2ZWxUeXBlLCB0YXJnZXRJbnN0LCBib29rS2VlcGluZy5uYXRpdmVFdmVudCwgZ2V0RXZlbnRUYXJnZXQoYm9va0tlZXBpbmcubmF0aXZlRXZlbnQpKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzY3JvbGxWYWx1ZU1vbml0b3IoY2IpIHtcbiAgdmFyIHNjcm9sbFBvc2l0aW9uID0gZ2V0VW5ib3VuZGVkU2Nyb2xsUG9zaXRpb24od2luZG93KTtcbiAgY2Ioc2Nyb2xsUG9zaXRpb24pO1xufVxuXG52YXIgUmVhY3RFdmVudExpc3RlbmVyID0ge1xuICBfZW5hYmxlZDogdHJ1ZSxcbiAgX2hhbmRsZVRvcExldmVsOiBudWxsLFxuXG4gIFdJTkRPV19IQU5ETEU6IEV4ZWN1dGlvbkVudmlyb25tZW50LmNhblVzZURPTSA/IHdpbmRvdyA6IG51bGwsXG5cbiAgc2V0SGFuZGxlVG9wTGV2ZWw6IGZ1bmN0aW9uIChoYW5kbGVUb3BMZXZlbCkge1xuICAgIFJlYWN0RXZlbnRMaXN0ZW5lci5faGFuZGxlVG9wTGV2ZWwgPSBoYW5kbGVUb3BMZXZlbDtcbiAgfSxcblxuICBzZXRFbmFibGVkOiBmdW5jdGlvbiAoZW5hYmxlZCkge1xuICAgIFJlYWN0RXZlbnRMaXN0ZW5lci5fZW5hYmxlZCA9ICEhZW5hYmxlZDtcbiAgfSxcblxuICBpc0VuYWJsZWQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gUmVhY3RFdmVudExpc3RlbmVyLl9lbmFibGVkO1xuICB9LFxuXG4gIC8qKlxuICAgKiBUcmFwcyB0b3AtbGV2ZWwgZXZlbnRzIGJ5IHVzaW5nIGV2ZW50IGJ1YmJsaW5nLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdG9wTGV2ZWxUeXBlIFJlY29yZCBmcm9tIGBFdmVudENvbnN0YW50c2AuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBoYW5kbGVyQmFzZU5hbWUgRXZlbnQgbmFtZSAoZS5nLiBcImNsaWNrXCIpLlxuICAgKiBAcGFyYW0ge29iamVjdH0gZWxlbWVudCBFbGVtZW50IG9uIHdoaWNoIHRvIGF0dGFjaCBsaXN0ZW5lci5cbiAgICogQHJldHVybiB7P29iamVjdH0gQW4gb2JqZWN0IHdpdGggYSByZW1vdmUgZnVuY3Rpb24gd2hpY2ggd2lsbCBmb3JjZWZ1bGx5XG4gICAqICAgICAgICAgICAgICAgICAgcmVtb3ZlIHRoZSBsaXN0ZW5lci5cbiAgICogQGludGVybmFsXG4gICAqL1xuICB0cmFwQnViYmxlZEV2ZW50OiBmdW5jdGlvbiAodG9wTGV2ZWxUeXBlLCBoYW5kbGVyQmFzZU5hbWUsIGVsZW1lbnQpIHtcbiAgICBpZiAoIWVsZW1lbnQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gRXZlbnRMaXN0ZW5lci5saXN0ZW4oZWxlbWVudCwgaGFuZGxlckJhc2VOYW1lLCBSZWFjdEV2ZW50TGlzdGVuZXIuZGlzcGF0Y2hFdmVudC5iaW5kKG51bGwsIHRvcExldmVsVHlwZSkpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBUcmFwcyBhIHRvcC1sZXZlbCBldmVudCBieSB1c2luZyBldmVudCBjYXB0dXJpbmcuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0b3BMZXZlbFR5cGUgUmVjb3JkIGZyb20gYEV2ZW50Q29uc3RhbnRzYC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGhhbmRsZXJCYXNlTmFtZSBFdmVudCBuYW1lIChlLmcuIFwiY2xpY2tcIikuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBlbGVtZW50IEVsZW1lbnQgb24gd2hpY2ggdG8gYXR0YWNoIGxpc3RlbmVyLlxuICAgKiBAcmV0dXJuIHs/b2JqZWN0fSBBbiBvYmplY3Qgd2l0aCBhIHJlbW92ZSBmdW5jdGlvbiB3aGljaCB3aWxsIGZvcmNlZnVsbHlcbiAgICogICAgICAgICAgICAgICAgICByZW1vdmUgdGhlIGxpc3RlbmVyLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHRyYXBDYXB0dXJlZEV2ZW50OiBmdW5jdGlvbiAodG9wTGV2ZWxUeXBlLCBoYW5kbGVyQmFzZU5hbWUsIGVsZW1lbnQpIHtcbiAgICBpZiAoIWVsZW1lbnQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gRXZlbnRMaXN0ZW5lci5jYXB0dXJlKGVsZW1lbnQsIGhhbmRsZXJCYXNlTmFtZSwgUmVhY3RFdmVudExpc3RlbmVyLmRpc3BhdGNoRXZlbnQuYmluZChudWxsLCB0b3BMZXZlbFR5cGUpKTtcbiAgfSxcblxuICBtb25pdG9yU2Nyb2xsVmFsdWU6IGZ1bmN0aW9uIChyZWZyZXNoKSB7XG4gICAgdmFyIGNhbGxiYWNrID0gc2Nyb2xsVmFsdWVNb25pdG9yLmJpbmQobnVsbCwgcmVmcmVzaCk7XG4gICAgRXZlbnRMaXN0ZW5lci5saXN0ZW4od2luZG93LCAnc2Nyb2xsJywgY2FsbGJhY2spO1xuICB9LFxuXG4gIGRpc3BhdGNoRXZlbnQ6IGZ1bmN0aW9uICh0b3BMZXZlbFR5cGUsIG5hdGl2ZUV2ZW50KSB7XG4gICAgaWYgKCFSZWFjdEV2ZW50TGlzdGVuZXIuX2VuYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgYm9va0tlZXBpbmcgPSBUb3BMZXZlbENhbGxiYWNrQm9va0tlZXBpbmcuZ2V0UG9vbGVkKHRvcExldmVsVHlwZSwgbmF0aXZlRXZlbnQpO1xuICAgIHRyeSB7XG4gICAgICAvLyBFdmVudCBxdWV1ZSBiZWluZyBwcm9jZXNzZWQgaW4gdGhlIHNhbWUgY3ljbGUgYWxsb3dzXG4gICAgICAvLyBgcHJldmVudERlZmF1bHRgLlxuICAgICAgUmVhY3RVcGRhdGVzLmJhdGNoZWRVcGRhdGVzKGhhbmRsZVRvcExldmVsSW1wbCwgYm9va0tlZXBpbmcpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBUb3BMZXZlbENhbGxiYWNrQm9va0tlZXBpbmcucmVsZWFzZShib29rS2VlcGluZyk7XG4gICAgfVxuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0RXZlbnRMaXN0ZW5lcjtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3JlYWN0LWRvbS9saWIvUmVhY3RFdmVudExpc3RlbmVyLmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxNi1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgaGlzdG9yeSA9IFtdO1xuXG52YXIgUmVhY3RIb3N0T3BlcmF0aW9uSGlzdG9yeUhvb2sgPSB7XG4gIG9uSG9zdE9wZXJhdGlvbjogZnVuY3Rpb24gKG9wZXJhdGlvbikge1xuICAgIGhpc3RvcnkucHVzaChvcGVyYXRpb24pO1xuICB9LFxuICBjbGVhckhpc3Rvcnk6IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoUmVhY3RIb3N0T3BlcmF0aW9uSGlzdG9yeUhvb2suX3ByZXZlbnRDbGVhcmluZykge1xuICAgICAgLy8gU2hvdWxkIG9ubHkgYmUgdXNlZCBmb3IgdGVzdHMuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaGlzdG9yeSA9IFtdO1xuICB9LFxuICBnZXRIaXN0b3J5OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGhpc3Rvcnk7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RIb3N0T3BlcmF0aW9uSGlzdG9yeUhvb2s7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1kb20vbGliL1JlYWN0SG9zdE9wZXJhdGlvbkhpc3RvcnlIb29rLmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIERPTVByb3BlcnR5ID0gcmVxdWlyZSgnLi9ET01Qcm9wZXJ0eScpO1xudmFyIEV2ZW50UGx1Z2luSHViID0gcmVxdWlyZSgnLi9FdmVudFBsdWdpbkh1YicpO1xudmFyIEV2ZW50UGx1Z2luVXRpbHMgPSByZXF1aXJlKCcuL0V2ZW50UGx1Z2luVXRpbHMnKTtcbnZhciBSZWFjdENvbXBvbmVudEVudmlyb25tZW50ID0gcmVxdWlyZSgnLi9SZWFjdENvbXBvbmVudEVudmlyb25tZW50Jyk7XG52YXIgUmVhY3RFbXB0eUNvbXBvbmVudCA9IHJlcXVpcmUoJy4vUmVhY3RFbXB0eUNvbXBvbmVudCcpO1xudmFyIFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJy4vUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyJyk7XG52YXIgUmVhY3RIb3N0Q29tcG9uZW50ID0gcmVxdWlyZSgnLi9SZWFjdEhvc3RDb21wb25lbnQnKTtcbnZhciBSZWFjdFVwZGF0ZXMgPSByZXF1aXJlKCcuL1JlYWN0VXBkYXRlcycpO1xuXG52YXIgUmVhY3RJbmplY3Rpb24gPSB7XG4gIENvbXBvbmVudDogUmVhY3RDb21wb25lbnRFbnZpcm9ubWVudC5pbmplY3Rpb24sXG4gIERPTVByb3BlcnR5OiBET01Qcm9wZXJ0eS5pbmplY3Rpb24sXG4gIEVtcHR5Q29tcG9uZW50OiBSZWFjdEVtcHR5Q29tcG9uZW50LmluamVjdGlvbixcbiAgRXZlbnRQbHVnaW5IdWI6IEV2ZW50UGx1Z2luSHViLmluamVjdGlvbixcbiAgRXZlbnRQbHVnaW5VdGlsczogRXZlbnRQbHVnaW5VdGlscy5pbmplY3Rpb24sXG4gIEV2ZW50RW1pdHRlcjogUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyLmluamVjdGlvbixcbiAgSG9zdENvbXBvbmVudDogUmVhY3RIb3N0Q29tcG9uZW50LmluamVjdGlvbixcbiAgVXBkYXRlczogUmVhY3RVcGRhdGVzLmluamVjdGlvblxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdEluamVjdGlvbjtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3JlYWN0LWRvbS9saWIvUmVhY3RJbmplY3Rpb24uanMiLCIvKipcbiAqIENvcHlyaWdodCAyMDE2LXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciB3YXJuaW5nID0gcmVxdWlyZSgnZmJqcy9saWIvd2FybmluZycpO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICB2YXIgcHJvY2Vzc2luZ0NoaWxkQ29udGV4dCA9IGZhbHNlO1xuXG4gIHZhciB3YXJuSW52YWxpZFNldFN0YXRlID0gZnVuY3Rpb24gKCkge1xuICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKCFwcm9jZXNzaW5nQ2hpbGRDb250ZXh0LCAnc2V0U3RhdGUoLi4uKTogQ2Fubm90IGNhbGwgc2V0U3RhdGUoKSBpbnNpZGUgZ2V0Q2hpbGRDb250ZXh0KCknKSA6IHZvaWQgMDtcbiAgfTtcbn1cblxudmFyIFJlYWN0SW52YWxpZFNldFN0YXRlV2FybmluZ0hvb2sgPSB7XG4gIG9uQmVnaW5Qcm9jZXNzaW5nQ2hpbGRDb250ZXh0OiBmdW5jdGlvbiAoKSB7XG4gICAgcHJvY2Vzc2luZ0NoaWxkQ29udGV4dCA9IHRydWU7XG4gIH0sXG4gIG9uRW5kUHJvY2Vzc2luZ0NoaWxkQ29udGV4dDogZnVuY3Rpb24gKCkge1xuICAgIHByb2Nlc3NpbmdDaGlsZENvbnRleHQgPSBmYWxzZTtcbiAgfSxcbiAgb25TZXRTdGF0ZTogZnVuY3Rpb24gKCkge1xuICAgIHdhcm5JbnZhbGlkU2V0U3RhdGUoKTtcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdEludmFsaWRTZXRTdGF0ZVdhcm5pbmdIb29rO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QtZG9tL2xpYi9SZWFjdEludmFsaWRTZXRTdGF0ZVdhcm5pbmdIb29rLmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIGFkbGVyMzIgPSByZXF1aXJlKCcuL2FkbGVyMzInKTtcblxudmFyIFRBR19FTkQgPSAvXFwvPz4vO1xudmFyIENPTU1FTlRfU1RBUlQgPSAvXjxcXCFcXC1cXC0vO1xuXG52YXIgUmVhY3RNYXJrdXBDaGVja3N1bSA9IHtcbiAgQ0hFQ0tTVU1fQVRUUl9OQU1FOiAnZGF0YS1yZWFjdC1jaGVja3N1bScsXG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtYXJrdXAgTWFya3VwIHN0cmluZ1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9IE1hcmt1cCBzdHJpbmcgd2l0aCBjaGVja3N1bSBhdHRyaWJ1dGUgYXR0YWNoZWRcbiAgICovXG4gIGFkZENoZWNrc3VtVG9NYXJrdXA6IGZ1bmN0aW9uIChtYXJrdXApIHtcbiAgICB2YXIgY2hlY2tzdW0gPSBhZGxlcjMyKG1hcmt1cCk7XG5cbiAgICAvLyBBZGQgY2hlY2tzdW0gKGhhbmRsZSBib3RoIHBhcmVudCB0YWdzLCBjb21tZW50cyBhbmQgc2VsZi1jbG9zaW5nIHRhZ3MpXG4gICAgaWYgKENPTU1FTlRfU1RBUlQudGVzdChtYXJrdXApKSB7XG4gICAgICByZXR1cm4gbWFya3VwO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbWFya3VwLnJlcGxhY2UoVEFHX0VORCwgJyAnICsgUmVhY3RNYXJrdXBDaGVja3N1bS5DSEVDS1NVTV9BVFRSX05BTUUgKyAnPVwiJyArIGNoZWNrc3VtICsgJ1wiJCYnKTtcbiAgICB9XG4gIH0sXG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtYXJrdXAgdG8gdXNlXG4gICAqIEBwYXJhbSB7RE9NRWxlbWVudH0gZWxlbWVudCByb290IFJlYWN0IGVsZW1lbnRcbiAgICogQHJldHVybnMge2Jvb2xlYW59IHdoZXRoZXIgb3Igbm90IHRoZSBtYXJrdXAgaXMgdGhlIHNhbWVcbiAgICovXG4gIGNhblJldXNlTWFya3VwOiBmdW5jdGlvbiAobWFya3VwLCBlbGVtZW50KSB7XG4gICAgdmFyIGV4aXN0aW5nQ2hlY2tzdW0gPSBlbGVtZW50LmdldEF0dHJpYnV0ZShSZWFjdE1hcmt1cENoZWNrc3VtLkNIRUNLU1VNX0FUVFJfTkFNRSk7XG4gICAgZXhpc3RpbmdDaGVja3N1bSA9IGV4aXN0aW5nQ2hlY2tzdW0gJiYgcGFyc2VJbnQoZXhpc3RpbmdDaGVja3N1bSwgMTApO1xuICAgIHZhciBtYXJrdXBDaGVja3N1bSA9IGFkbGVyMzIobWFya3VwKTtcbiAgICByZXR1cm4gbWFya3VwQ2hlY2tzdW0gPT09IGV4aXN0aW5nQ2hlY2tzdW07XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RNYXJrdXBDaGVja3N1bTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3JlYWN0LWRvbS9saWIvUmVhY3RNYXJrdXBDaGVja3N1bS5qcyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBfcHJvZEludmFyaWFudCA9IHJlcXVpcmUoJy4vcmVhY3RQcm9kSW52YXJpYW50Jyk7XG5cbnZhciBSZWFjdENvbXBvbmVudEVudmlyb25tZW50ID0gcmVxdWlyZSgnLi9SZWFjdENvbXBvbmVudEVudmlyb25tZW50Jyk7XG52YXIgUmVhY3RJbnN0YW5jZU1hcCA9IHJlcXVpcmUoJy4vUmVhY3RJbnN0YW5jZU1hcCcpO1xudmFyIFJlYWN0SW5zdHJ1bWVudGF0aW9uID0gcmVxdWlyZSgnLi9SZWFjdEluc3RydW1lbnRhdGlvbicpO1xuXG52YXIgUmVhY3RDdXJyZW50T3duZXIgPSByZXF1aXJlKCdyZWFjdC9saWIvUmVhY3RDdXJyZW50T3duZXInKTtcbnZhciBSZWFjdFJlY29uY2lsZXIgPSByZXF1aXJlKCcuL1JlYWN0UmVjb25jaWxlcicpO1xudmFyIFJlYWN0Q2hpbGRSZWNvbmNpbGVyID0gcmVxdWlyZSgnLi9SZWFjdENoaWxkUmVjb25jaWxlcicpO1xuXG52YXIgZW1wdHlGdW5jdGlvbiA9IHJlcXVpcmUoJ2ZianMvbGliL2VtcHR5RnVuY3Rpb24nKTtcbnZhciBmbGF0dGVuQ2hpbGRyZW4gPSByZXF1aXJlKCcuL2ZsYXR0ZW5DaGlsZHJlbicpO1xudmFyIGludmFyaWFudCA9IHJlcXVpcmUoJ2ZianMvbGliL2ludmFyaWFudCcpO1xuXG4vKipcbiAqIE1ha2UgYW4gdXBkYXRlIGZvciBtYXJrdXAgdG8gYmUgcmVuZGVyZWQgYW5kIGluc2VydGVkIGF0IGEgc3VwcGxpZWQgaW5kZXguXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1hcmt1cCBNYXJrdXAgdGhhdCByZW5kZXJzIGludG8gYW4gZWxlbWVudC5cbiAqIEBwYXJhbSB7bnVtYmVyfSB0b0luZGV4IERlc3RpbmF0aW9uIGluZGV4LlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gbWFrZUluc2VydE1hcmt1cChtYXJrdXAsIGFmdGVyTm9kZSwgdG9JbmRleCkge1xuICAvLyBOT1RFOiBOdWxsIHZhbHVlcyByZWR1Y2UgaGlkZGVuIGNsYXNzZXMuXG4gIHJldHVybiB7XG4gICAgdHlwZTogJ0lOU0VSVF9NQVJLVVAnLFxuICAgIGNvbnRlbnQ6IG1hcmt1cCxcbiAgICBmcm9tSW5kZXg6IG51bGwsXG4gICAgZnJvbU5vZGU6IG51bGwsXG4gICAgdG9JbmRleDogdG9JbmRleCxcbiAgICBhZnRlck5vZGU6IGFmdGVyTm9kZVxuICB9O1xufVxuXG4vKipcbiAqIE1ha2UgYW4gdXBkYXRlIGZvciBtb3ZpbmcgYW4gZXhpc3RpbmcgZWxlbWVudCB0byBhbm90aGVyIGluZGV4LlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBmcm9tSW5kZXggU291cmNlIGluZGV4IG9mIHRoZSBleGlzdGluZyBlbGVtZW50LlxuICogQHBhcmFtIHtudW1iZXJ9IHRvSW5kZXggRGVzdGluYXRpb24gaW5kZXggb2YgdGhlIGVsZW1lbnQuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBtYWtlTW92ZShjaGlsZCwgYWZ0ZXJOb2RlLCB0b0luZGV4KSB7XG4gIC8vIE5PVEU6IE51bGwgdmFsdWVzIHJlZHVjZSBoaWRkZW4gY2xhc3Nlcy5cbiAgcmV0dXJuIHtcbiAgICB0eXBlOiAnTU9WRV9FWElTVElORycsXG4gICAgY29udGVudDogbnVsbCxcbiAgICBmcm9tSW5kZXg6IGNoaWxkLl9tb3VudEluZGV4LFxuICAgIGZyb21Ob2RlOiBSZWFjdFJlY29uY2lsZXIuZ2V0SG9zdE5vZGUoY2hpbGQpLFxuICAgIHRvSW5kZXg6IHRvSW5kZXgsXG4gICAgYWZ0ZXJOb2RlOiBhZnRlck5vZGVcbiAgfTtcbn1cblxuLyoqXG4gKiBNYWtlIGFuIHVwZGF0ZSBmb3IgcmVtb3ZpbmcgYW4gZWxlbWVudCBhdCBhbiBpbmRleC5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gZnJvbUluZGV4IEluZGV4IG9mIHRoZSBlbGVtZW50IHRvIHJlbW92ZS5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIG1ha2VSZW1vdmUoY2hpbGQsIG5vZGUpIHtcbiAgLy8gTk9URTogTnVsbCB2YWx1ZXMgcmVkdWNlIGhpZGRlbiBjbGFzc2VzLlxuICByZXR1cm4ge1xuICAgIHR5cGU6ICdSRU1PVkVfTk9ERScsXG4gICAgY29udGVudDogbnVsbCxcbiAgICBmcm9tSW5kZXg6IGNoaWxkLl9tb3VudEluZGV4LFxuICAgIGZyb21Ob2RlOiBub2RlLFxuICAgIHRvSW5kZXg6IG51bGwsXG4gICAgYWZ0ZXJOb2RlOiBudWxsXG4gIH07XG59XG5cbi8qKlxuICogTWFrZSBhbiB1cGRhdGUgZm9yIHNldHRpbmcgdGhlIG1hcmt1cCBvZiBhIG5vZGUuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1hcmt1cCBNYXJrdXAgdGhhdCByZW5kZXJzIGludG8gYW4gZWxlbWVudC5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIG1ha2VTZXRNYXJrdXAobWFya3VwKSB7XG4gIC8vIE5PVEU6IE51bGwgdmFsdWVzIHJlZHVjZSBoaWRkZW4gY2xhc3Nlcy5cbiAgcmV0dXJuIHtcbiAgICB0eXBlOiAnU0VUX01BUktVUCcsXG4gICAgY29udGVudDogbWFya3VwLFxuICAgIGZyb21JbmRleDogbnVsbCxcbiAgICBmcm9tTm9kZTogbnVsbCxcbiAgICB0b0luZGV4OiBudWxsLFxuICAgIGFmdGVyTm9kZTogbnVsbFxuICB9O1xufVxuXG4vKipcbiAqIE1ha2UgYW4gdXBkYXRlIGZvciBzZXR0aW5nIHRoZSB0ZXh0IGNvbnRlbnQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHRleHRDb250ZW50IFRleHQgY29udGVudCB0byBzZXQuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBtYWtlVGV4dENvbnRlbnQodGV4dENvbnRlbnQpIHtcbiAgLy8gTk9URTogTnVsbCB2YWx1ZXMgcmVkdWNlIGhpZGRlbiBjbGFzc2VzLlxuICByZXR1cm4ge1xuICAgIHR5cGU6ICdURVhUX0NPTlRFTlQnLFxuICAgIGNvbnRlbnQ6IHRleHRDb250ZW50LFxuICAgIGZyb21JbmRleDogbnVsbCxcbiAgICBmcm9tTm9kZTogbnVsbCxcbiAgICB0b0luZGV4OiBudWxsLFxuICAgIGFmdGVyTm9kZTogbnVsbFxuICB9O1xufVxuXG4vKipcbiAqIFB1c2ggYW4gdXBkYXRlLCBpZiBhbnksIG9udG8gdGhlIHF1ZXVlLiBDcmVhdGVzIGEgbmV3IHF1ZXVlIGlmIG5vbmUgaXNcbiAqIHBhc3NlZCBhbmQgYWx3YXlzIHJldHVybnMgdGhlIHF1ZXVlLiBNdXRhdGl2ZS5cbiAqL1xuZnVuY3Rpb24gZW5xdWV1ZShxdWV1ZSwgdXBkYXRlKSB7XG4gIGlmICh1cGRhdGUpIHtcbiAgICBxdWV1ZSA9IHF1ZXVlIHx8IFtdO1xuICAgIHF1ZXVlLnB1c2godXBkYXRlKTtcbiAgfVxuICByZXR1cm4gcXVldWU7XG59XG5cbi8qKlxuICogUHJvY2Vzc2VzIGFueSBlbnF1ZXVlZCB1cGRhdGVzLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHByb2Nlc3NRdWV1ZShpbnN0LCB1cGRhdGVRdWV1ZSkge1xuICBSZWFjdENvbXBvbmVudEVudmlyb25tZW50LnByb2Nlc3NDaGlsZHJlblVwZGF0ZXMoaW5zdCwgdXBkYXRlUXVldWUpO1xufVxuXG52YXIgc2V0Q2hpbGRyZW5Gb3JJbnN0cnVtZW50YXRpb24gPSBlbXB0eUZ1bmN0aW9uO1xuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgdmFyIGdldERlYnVnSUQgPSBmdW5jdGlvbiAoaW5zdCkge1xuICAgIGlmICghaW5zdC5fZGVidWdJRCkge1xuICAgICAgLy8gQ2hlY2sgZm9yIEFSVC1saWtlIGluc3RhbmNlcy4gVE9ETzogVGhpcyBpcyBzaWxseS9ncm9zcy5cbiAgICAgIHZhciBpbnRlcm5hbDtcbiAgICAgIGlmIChpbnRlcm5hbCA9IFJlYWN0SW5zdGFuY2VNYXAuZ2V0KGluc3QpKSB7XG4gICAgICAgIGluc3QgPSBpbnRlcm5hbDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGluc3QuX2RlYnVnSUQ7XG4gIH07XG4gIHNldENoaWxkcmVuRm9ySW5zdHJ1bWVudGF0aW9uID0gZnVuY3Rpb24gKGNoaWxkcmVuKSB7XG4gICAgdmFyIGRlYnVnSUQgPSBnZXREZWJ1Z0lEKHRoaXMpO1xuICAgIC8vIFRPRE86IFJlYWN0IE5hdGl2ZSBlbXB0eSBjb21wb25lbnRzIGFyZSBhbHNvIG11bHRpY2hpbGQuXG4gICAgLy8gVGhpcyBtZWFucyB0aGV5IHN0aWxsIGdldCBpbnRvIHRoaXMgbWV0aG9kIGJ1dCBkb24ndCBoYXZlIF9kZWJ1Z0lELlxuICAgIGlmIChkZWJ1Z0lEICE9PSAwKSB7XG4gICAgICBSZWFjdEluc3RydW1lbnRhdGlvbi5kZWJ1Z1Rvb2wub25TZXRDaGlsZHJlbihkZWJ1Z0lELCBjaGlsZHJlbiA/IE9iamVjdC5rZXlzKGNoaWxkcmVuKS5tYXAoZnVuY3Rpb24gKGtleSkge1xuICAgICAgICByZXR1cm4gY2hpbGRyZW5ba2V5XS5fZGVidWdJRDtcbiAgICAgIH0pIDogW10pO1xuICAgIH1cbiAgfTtcbn1cblxuLyoqXG4gKiBSZWFjdE11bHRpQ2hpbGQgYXJlIGNhcGFibGUgb2YgcmVjb25jaWxpbmcgbXVsdGlwbGUgY2hpbGRyZW4uXG4gKlxuICogQGNsYXNzIFJlYWN0TXVsdGlDaGlsZFxuICogQGludGVybmFsXG4gKi9cbnZhciBSZWFjdE11bHRpQ2hpbGQgPSB7XG4gIC8qKlxuICAgKiBQcm92aWRlcyBjb21tb24gZnVuY3Rpb25hbGl0eSBmb3IgY29tcG9uZW50cyB0aGF0IG11c3QgcmVjb25jaWxlIG11bHRpcGxlXG4gICAqIGNoaWxkcmVuLiBUaGlzIGlzIHVzZWQgYnkgYFJlYWN0RE9NQ29tcG9uZW50YCB0byBtb3VudCwgdXBkYXRlLCBhbmRcbiAgICogdW5tb3VudCBjaGlsZCBjb21wb25lbnRzLlxuICAgKlxuICAgKiBAbGVuZHMge1JlYWN0TXVsdGlDaGlsZC5wcm90b3R5cGV9XG4gICAqL1xuICBNaXhpbjoge1xuICAgIF9yZWNvbmNpbGVySW5zdGFudGlhdGVDaGlsZHJlbjogZnVuY3Rpb24gKG5lc3RlZENoaWxkcmVuLCB0cmFuc2FjdGlvbiwgY29udGV4dCkge1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgdmFyIHNlbGZEZWJ1Z0lEID0gZ2V0RGVidWdJRCh0aGlzKTtcbiAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRFbGVtZW50KSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQgPSB0aGlzLl9jdXJyZW50RWxlbWVudC5fb3duZXI7XG4gICAgICAgICAgICByZXR1cm4gUmVhY3RDaGlsZFJlY29uY2lsZXIuaW5zdGFudGlhdGVDaGlsZHJlbihuZXN0ZWRDaGlsZHJlbiwgdHJhbnNhY3Rpb24sIGNvbnRleHQsIHNlbGZEZWJ1Z0lEKTtcbiAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgUmVhY3RDdXJyZW50T3duZXIuY3VycmVudCA9IG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gUmVhY3RDaGlsZFJlY29uY2lsZXIuaW5zdGFudGlhdGVDaGlsZHJlbihuZXN0ZWRDaGlsZHJlbiwgdHJhbnNhY3Rpb24sIGNvbnRleHQpO1xuICAgIH0sXG5cbiAgICBfcmVjb25jaWxlclVwZGF0ZUNoaWxkcmVuOiBmdW5jdGlvbiAocHJldkNoaWxkcmVuLCBuZXh0TmVzdGVkQ2hpbGRyZW5FbGVtZW50cywgbW91bnRJbWFnZXMsIHJlbW92ZWROb2RlcywgdHJhbnNhY3Rpb24sIGNvbnRleHQpIHtcbiAgICAgIHZhciBuZXh0Q2hpbGRyZW47XG4gICAgICB2YXIgc2VsZkRlYnVnSUQgPSAwO1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgc2VsZkRlYnVnSUQgPSBnZXREZWJ1Z0lEKHRoaXMpO1xuICAgICAgICBpZiAodGhpcy5fY3VycmVudEVsZW1lbnQpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgUmVhY3RDdXJyZW50T3duZXIuY3VycmVudCA9IHRoaXMuX2N1cnJlbnRFbGVtZW50Ll9vd25lcjtcbiAgICAgICAgICAgIG5leHRDaGlsZHJlbiA9IGZsYXR0ZW5DaGlsZHJlbihuZXh0TmVzdGVkQ2hpbGRyZW5FbGVtZW50cywgc2VsZkRlYnVnSUQpO1xuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50ID0gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgICAgUmVhY3RDaGlsZFJlY29uY2lsZXIudXBkYXRlQ2hpbGRyZW4ocHJldkNoaWxkcmVuLCBuZXh0Q2hpbGRyZW4sIG1vdW50SW1hZ2VzLCByZW1vdmVkTm9kZXMsIHRyYW5zYWN0aW9uLCB0aGlzLCB0aGlzLl9ob3N0Q29udGFpbmVySW5mbywgY29udGV4dCwgc2VsZkRlYnVnSUQpO1xuICAgICAgICAgIHJldHVybiBuZXh0Q2hpbGRyZW47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIG5leHRDaGlsZHJlbiA9IGZsYXR0ZW5DaGlsZHJlbihuZXh0TmVzdGVkQ2hpbGRyZW5FbGVtZW50cywgc2VsZkRlYnVnSUQpO1xuICAgICAgUmVhY3RDaGlsZFJlY29uY2lsZXIudXBkYXRlQ2hpbGRyZW4ocHJldkNoaWxkcmVuLCBuZXh0Q2hpbGRyZW4sIG1vdW50SW1hZ2VzLCByZW1vdmVkTm9kZXMsIHRyYW5zYWN0aW9uLCB0aGlzLCB0aGlzLl9ob3N0Q29udGFpbmVySW5mbywgY29udGV4dCwgc2VsZkRlYnVnSUQpO1xuICAgICAgcmV0dXJuIG5leHRDaGlsZHJlbjtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogR2VuZXJhdGVzIGEgXCJtb3VudCBpbWFnZVwiIGZvciBlYWNoIG9mIHRoZSBzdXBwbGllZCBjaGlsZHJlbi4gSW4gdGhlIGNhc2VcbiAgICAgKiBvZiBgUmVhY3RET01Db21wb25lbnRgLCBhIG1vdW50IGltYWdlIGlzIGEgc3RyaW5nIG9mIG1hcmt1cC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7P29iamVjdH0gbmVzdGVkQ2hpbGRyZW4gTmVzdGVkIGNoaWxkIG1hcHMuXG4gICAgICogQHJldHVybiB7YXJyYXl9IEFuIGFycmF5IG9mIG1vdW50ZWQgcmVwcmVzZW50YXRpb25zLlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIG1vdW50Q2hpbGRyZW46IGZ1bmN0aW9uIChuZXN0ZWRDaGlsZHJlbiwgdHJhbnNhY3Rpb24sIGNvbnRleHQpIHtcbiAgICAgIHZhciBjaGlsZHJlbiA9IHRoaXMuX3JlY29uY2lsZXJJbnN0YW50aWF0ZUNoaWxkcmVuKG5lc3RlZENoaWxkcmVuLCB0cmFuc2FjdGlvbiwgY29udGV4dCk7XG4gICAgICB0aGlzLl9yZW5kZXJlZENoaWxkcmVuID0gY2hpbGRyZW47XG5cbiAgICAgIHZhciBtb3VudEltYWdlcyA9IFtdO1xuICAgICAgdmFyIGluZGV4ID0gMDtcbiAgICAgIGZvciAodmFyIG5hbWUgaW4gY2hpbGRyZW4pIHtcbiAgICAgICAgaWYgKGNoaWxkcmVuLmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgICAgICAgdmFyIGNoaWxkID0gY2hpbGRyZW5bbmFtZV07XG4gICAgICAgICAgdmFyIHNlbGZEZWJ1Z0lEID0gMDtcbiAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgc2VsZkRlYnVnSUQgPSBnZXREZWJ1Z0lEKHRoaXMpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB2YXIgbW91bnRJbWFnZSA9IFJlYWN0UmVjb25jaWxlci5tb3VudENvbXBvbmVudChjaGlsZCwgdHJhbnNhY3Rpb24sIHRoaXMsIHRoaXMuX2hvc3RDb250YWluZXJJbmZvLCBjb250ZXh0LCBzZWxmRGVidWdJRCk7XG4gICAgICAgICAgY2hpbGQuX21vdW50SW5kZXggPSBpbmRleCsrO1xuICAgICAgICAgIG1vdW50SW1hZ2VzLnB1c2gobW91bnRJbWFnZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgc2V0Q2hpbGRyZW5Gb3JJbnN0cnVtZW50YXRpb24uY2FsbCh0aGlzLCBjaGlsZHJlbik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBtb3VudEltYWdlcztcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogUmVwbGFjZXMgYW55IHJlbmRlcmVkIGNoaWxkcmVuIHdpdGggYSB0ZXh0IGNvbnRlbnQgc3RyaW5nLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5leHRDb250ZW50IFN0cmluZyBvZiBjb250ZW50LlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHVwZGF0ZVRleHRDb250ZW50OiBmdW5jdGlvbiAobmV4dENvbnRlbnQpIHtcbiAgICAgIHZhciBwcmV2Q2hpbGRyZW4gPSB0aGlzLl9yZW5kZXJlZENoaWxkcmVuO1xuICAgICAgLy8gUmVtb3ZlIGFueSByZW5kZXJlZCBjaGlsZHJlbi5cbiAgICAgIFJlYWN0Q2hpbGRSZWNvbmNpbGVyLnVubW91bnRDaGlsZHJlbihwcmV2Q2hpbGRyZW4sIGZhbHNlKTtcbiAgICAgIGZvciAodmFyIG5hbWUgaW4gcHJldkNoaWxkcmVuKSB7XG4gICAgICAgIGlmIChwcmV2Q2hpbGRyZW4uaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgICAgICAhZmFsc2UgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAndXBkYXRlVGV4dENvbnRlbnQgY2FsbGVkIG9uIG5vbi1lbXB0eSBjb21wb25lbnQuJykgOiBfcHJvZEludmFyaWFudCgnMTE4JykgOiB2b2lkIDA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIFNldCBuZXcgdGV4dCBjb250ZW50LlxuICAgICAgdmFyIHVwZGF0ZXMgPSBbbWFrZVRleHRDb250ZW50KG5leHRDb250ZW50KV07XG4gICAgICBwcm9jZXNzUXVldWUodGhpcywgdXBkYXRlcyk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFJlcGxhY2VzIGFueSByZW5kZXJlZCBjaGlsZHJlbiB3aXRoIGEgbWFya3VwIHN0cmluZy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuZXh0TWFya3VwIFN0cmluZyBvZiBtYXJrdXAuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgdXBkYXRlTWFya3VwOiBmdW5jdGlvbiAobmV4dE1hcmt1cCkge1xuICAgICAgdmFyIHByZXZDaGlsZHJlbiA9IHRoaXMuX3JlbmRlcmVkQ2hpbGRyZW47XG4gICAgICAvLyBSZW1vdmUgYW55IHJlbmRlcmVkIGNoaWxkcmVuLlxuICAgICAgUmVhY3RDaGlsZFJlY29uY2lsZXIudW5tb3VudENoaWxkcmVuKHByZXZDaGlsZHJlbiwgZmFsc2UpO1xuICAgICAgZm9yICh2YXIgbmFtZSBpbiBwcmV2Q2hpbGRyZW4pIHtcbiAgICAgICAgaWYgKHByZXZDaGlsZHJlbi5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuICAgICAgICAgICFmYWxzZSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICd1cGRhdGVUZXh0Q29udGVudCBjYWxsZWQgb24gbm9uLWVtcHR5IGNvbXBvbmVudC4nKSA6IF9wcm9kSW52YXJpYW50KCcxMTgnKSA6IHZvaWQgMDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdmFyIHVwZGF0ZXMgPSBbbWFrZVNldE1hcmt1cChuZXh0TWFya3VwKV07XG4gICAgICBwcm9jZXNzUXVldWUodGhpcywgdXBkYXRlcyk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFVwZGF0ZXMgdGhlIHJlbmRlcmVkIGNoaWxkcmVuIHdpdGggbmV3IGNoaWxkcmVuLlxuICAgICAqXG4gICAgICogQHBhcmFtIHs/b2JqZWN0fSBuZXh0TmVzdGVkQ2hpbGRyZW5FbGVtZW50cyBOZXN0ZWQgY2hpbGQgZWxlbWVudCBtYXBzLlxuICAgICAqIEBwYXJhbSB7UmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvbn0gdHJhbnNhY3Rpb25cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICB1cGRhdGVDaGlsZHJlbjogZnVuY3Rpb24gKG5leHROZXN0ZWRDaGlsZHJlbkVsZW1lbnRzLCB0cmFuc2FjdGlvbiwgY29udGV4dCkge1xuICAgICAgLy8gSG9vayB1c2VkIGJ5IFJlYWN0IEFSVFxuICAgICAgdGhpcy5fdXBkYXRlQ2hpbGRyZW4obmV4dE5lc3RlZENoaWxkcmVuRWxlbWVudHMsIHRyYW5zYWN0aW9uLCBjb250ZXh0KTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHs/b2JqZWN0fSBuZXh0TmVzdGVkQ2hpbGRyZW5FbGVtZW50cyBOZXN0ZWQgY2hpbGQgZWxlbWVudCBtYXBzLlxuICAgICAqIEBwYXJhbSB7UmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvbn0gdHJhbnNhY3Rpb25cbiAgICAgKiBAZmluYWxcbiAgICAgKiBAcHJvdGVjdGVkXG4gICAgICovXG4gICAgX3VwZGF0ZUNoaWxkcmVuOiBmdW5jdGlvbiAobmV4dE5lc3RlZENoaWxkcmVuRWxlbWVudHMsIHRyYW5zYWN0aW9uLCBjb250ZXh0KSB7XG4gICAgICB2YXIgcHJldkNoaWxkcmVuID0gdGhpcy5fcmVuZGVyZWRDaGlsZHJlbjtcbiAgICAgIHZhciByZW1vdmVkTm9kZXMgPSB7fTtcbiAgICAgIHZhciBtb3VudEltYWdlcyA9IFtdO1xuICAgICAgdmFyIG5leHRDaGlsZHJlbiA9IHRoaXMuX3JlY29uY2lsZXJVcGRhdGVDaGlsZHJlbihwcmV2Q2hpbGRyZW4sIG5leHROZXN0ZWRDaGlsZHJlbkVsZW1lbnRzLCBtb3VudEltYWdlcywgcmVtb3ZlZE5vZGVzLCB0cmFuc2FjdGlvbiwgY29udGV4dCk7XG4gICAgICBpZiAoIW5leHRDaGlsZHJlbiAmJiAhcHJldkNoaWxkcmVuKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHZhciB1cGRhdGVzID0gbnVsbDtcbiAgICAgIHZhciBuYW1lO1xuICAgICAgLy8gYG5leHRJbmRleGAgd2lsbCBpbmNyZW1lbnQgZm9yIGVhY2ggY2hpbGQgaW4gYG5leHRDaGlsZHJlbmAsIGJ1dFxuICAgICAgLy8gYGxhc3RJbmRleGAgd2lsbCBiZSB0aGUgbGFzdCBpbmRleCB2aXNpdGVkIGluIGBwcmV2Q2hpbGRyZW5gLlxuICAgICAgdmFyIG5leHRJbmRleCA9IDA7XG4gICAgICB2YXIgbGFzdEluZGV4ID0gMDtcbiAgICAgIC8vIGBuZXh0TW91bnRJbmRleGAgd2lsbCBpbmNyZW1lbnQgZm9yIGVhY2ggbmV3bHkgbW91bnRlZCBjaGlsZC5cbiAgICAgIHZhciBuZXh0TW91bnRJbmRleCA9IDA7XG4gICAgICB2YXIgbGFzdFBsYWNlZE5vZGUgPSBudWxsO1xuICAgICAgZm9yIChuYW1lIGluIG5leHRDaGlsZHJlbikge1xuICAgICAgICBpZiAoIW5leHRDaGlsZHJlbi5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHZhciBwcmV2Q2hpbGQgPSBwcmV2Q2hpbGRyZW4gJiYgcHJldkNoaWxkcmVuW25hbWVdO1xuICAgICAgICB2YXIgbmV4dENoaWxkID0gbmV4dENoaWxkcmVuW25hbWVdO1xuICAgICAgICBpZiAocHJldkNoaWxkID09PSBuZXh0Q2hpbGQpIHtcbiAgICAgICAgICB1cGRhdGVzID0gZW5xdWV1ZSh1cGRhdGVzLCB0aGlzLm1vdmVDaGlsZChwcmV2Q2hpbGQsIGxhc3RQbGFjZWROb2RlLCBuZXh0SW5kZXgsIGxhc3RJbmRleCkpO1xuICAgICAgICAgIGxhc3RJbmRleCA9IE1hdGgubWF4KHByZXZDaGlsZC5fbW91bnRJbmRleCwgbGFzdEluZGV4KTtcbiAgICAgICAgICBwcmV2Q2hpbGQuX21vdW50SW5kZXggPSBuZXh0SW5kZXg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHByZXZDaGlsZCkge1xuICAgICAgICAgICAgLy8gVXBkYXRlIGBsYXN0SW5kZXhgIGJlZm9yZSBgX21vdW50SW5kZXhgIGdldHMgdW5zZXQgYnkgdW5tb3VudGluZy5cbiAgICAgICAgICAgIGxhc3RJbmRleCA9IE1hdGgubWF4KHByZXZDaGlsZC5fbW91bnRJbmRleCwgbGFzdEluZGV4KTtcbiAgICAgICAgICAgIC8vIFRoZSBgcmVtb3ZlZE5vZGVzYCBsb29wIGJlbG93IHdpbGwgYWN0dWFsbHkgcmVtb3ZlIHRoZSBjaGlsZC5cbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gVGhlIGNoaWxkIG11c3QgYmUgaW5zdGFudGlhdGVkIGJlZm9yZSBpdCdzIG1vdW50ZWQuXG4gICAgICAgICAgdXBkYXRlcyA9IGVucXVldWUodXBkYXRlcywgdGhpcy5fbW91bnRDaGlsZEF0SW5kZXgobmV4dENoaWxkLCBtb3VudEltYWdlc1tuZXh0TW91bnRJbmRleF0sIGxhc3RQbGFjZWROb2RlLCBuZXh0SW5kZXgsIHRyYW5zYWN0aW9uLCBjb250ZXh0KSk7XG4gICAgICAgICAgbmV4dE1vdW50SW5kZXgrKztcbiAgICAgICAgfVxuICAgICAgICBuZXh0SW5kZXgrKztcbiAgICAgICAgbGFzdFBsYWNlZE5vZGUgPSBSZWFjdFJlY29uY2lsZXIuZ2V0SG9zdE5vZGUobmV4dENoaWxkKTtcbiAgICAgIH1cbiAgICAgIC8vIFJlbW92ZSBjaGlsZHJlbiB0aGF0IGFyZSBubyBsb25nZXIgcHJlc2VudC5cbiAgICAgIGZvciAobmFtZSBpbiByZW1vdmVkTm9kZXMpIHtcbiAgICAgICAgaWYgKHJlbW92ZWROb2Rlcy5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuICAgICAgICAgIHVwZGF0ZXMgPSBlbnF1ZXVlKHVwZGF0ZXMsIHRoaXMuX3VubW91bnRDaGlsZChwcmV2Q2hpbGRyZW5bbmFtZV0sIHJlbW92ZWROb2Rlc1tuYW1lXSkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodXBkYXRlcykge1xuICAgICAgICBwcm9jZXNzUXVldWUodGhpcywgdXBkYXRlcyk7XG4gICAgICB9XG4gICAgICB0aGlzLl9yZW5kZXJlZENoaWxkcmVuID0gbmV4dENoaWxkcmVuO1xuXG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICBzZXRDaGlsZHJlbkZvckluc3RydW1lbnRhdGlvbi5jYWxsKHRoaXMsIG5leHRDaGlsZHJlbik7XG4gICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFVubW91bnRzIGFsbCByZW5kZXJlZCBjaGlsZHJlbi4gVGhpcyBzaG91bGQgYmUgdXNlZCB0byBjbGVhbiB1cCBjaGlsZHJlblxuICAgICAqIHdoZW4gdGhpcyBjb21wb25lbnQgaXMgdW5tb3VudGVkLiBJdCBkb2VzIG5vdCBhY3R1YWxseSBwZXJmb3JtIGFueVxuICAgICAqIGJhY2tlbmQgb3BlcmF0aW9ucy5cbiAgICAgKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHVubW91bnRDaGlsZHJlbjogZnVuY3Rpb24gKHNhZmVseSkge1xuICAgICAgdmFyIHJlbmRlcmVkQ2hpbGRyZW4gPSB0aGlzLl9yZW5kZXJlZENoaWxkcmVuO1xuICAgICAgUmVhY3RDaGlsZFJlY29uY2lsZXIudW5tb3VudENoaWxkcmVuKHJlbmRlcmVkQ2hpbGRyZW4sIHNhZmVseSk7XG4gICAgICB0aGlzLl9yZW5kZXJlZENoaWxkcmVuID0gbnVsbDtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogTW92ZXMgYSBjaGlsZCBjb21wb25lbnQgdG8gdGhlIHN1cHBsaWVkIGluZGV4LlxuICAgICAqXG4gICAgICogQHBhcmFtIHtSZWFjdENvbXBvbmVudH0gY2hpbGQgQ29tcG9uZW50IHRvIG1vdmUuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHRvSW5kZXggRGVzdGluYXRpb24gaW5kZXggb2YgdGhlIGVsZW1lbnQuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGxhc3RJbmRleCBMYXN0IGluZGV4IHZpc2l0ZWQgb2YgdGhlIHNpYmxpbmdzIG9mIGBjaGlsZGAuXG4gICAgICogQHByb3RlY3RlZFxuICAgICAqL1xuICAgIG1vdmVDaGlsZDogZnVuY3Rpb24gKGNoaWxkLCBhZnRlck5vZGUsIHRvSW5kZXgsIGxhc3RJbmRleCkge1xuICAgICAgLy8gSWYgdGhlIGluZGV4IG9mIGBjaGlsZGAgaXMgbGVzcyB0aGFuIGBsYXN0SW5kZXhgLCB0aGVuIGl0IG5lZWRzIHRvXG4gICAgICAvLyBiZSBtb3ZlZC4gT3RoZXJ3aXNlLCB3ZSBkbyBub3QgbmVlZCB0byBtb3ZlIGl0IGJlY2F1c2UgYSBjaGlsZCB3aWxsIGJlXG4gICAgICAvLyBpbnNlcnRlZCBvciBtb3ZlZCBiZWZvcmUgYGNoaWxkYC5cbiAgICAgIGlmIChjaGlsZC5fbW91bnRJbmRleCA8IGxhc3RJbmRleCkge1xuICAgICAgICByZXR1cm4gbWFrZU1vdmUoY2hpbGQsIGFmdGVyTm9kZSwgdG9JbmRleCk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBjaGlsZCBjb21wb25lbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1JlYWN0Q29tcG9uZW50fSBjaGlsZCBDb21wb25lbnQgdG8gY3JlYXRlLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBtb3VudEltYWdlIE1hcmt1cCB0byBpbnNlcnQuXG4gICAgICogQHByb3RlY3RlZFxuICAgICAqL1xuICAgIGNyZWF0ZUNoaWxkOiBmdW5jdGlvbiAoY2hpbGQsIGFmdGVyTm9kZSwgbW91bnRJbWFnZSkge1xuICAgICAgcmV0dXJuIG1ha2VJbnNlcnRNYXJrdXAobW91bnRJbWFnZSwgYWZ0ZXJOb2RlLCBjaGlsZC5fbW91bnRJbmRleCk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgYSBjaGlsZCBjb21wb25lbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1JlYWN0Q29tcG9uZW50fSBjaGlsZCBDaGlsZCB0byByZW1vdmUuXG4gICAgICogQHByb3RlY3RlZFxuICAgICAqL1xuICAgIHJlbW92ZUNoaWxkOiBmdW5jdGlvbiAoY2hpbGQsIG5vZGUpIHtcbiAgICAgIHJldHVybiBtYWtlUmVtb3ZlKGNoaWxkLCBub2RlKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogTW91bnRzIGEgY2hpbGQgd2l0aCB0aGUgc3VwcGxpZWQgbmFtZS5cbiAgICAgKlxuICAgICAqIE5PVEU6IFRoaXMgaXMgcGFydCBvZiBgdXBkYXRlQ2hpbGRyZW5gIGFuZCBpcyBoZXJlIGZvciByZWFkYWJpbGl0eS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7UmVhY3RDb21wb25lbnR9IGNoaWxkIENvbXBvbmVudCB0byBtb3VudC5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBOYW1lIG9mIHRoZSBjaGlsZC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXggSW5kZXggYXQgd2hpY2ggdG8gaW5zZXJ0IHRoZSBjaGlsZC5cbiAgICAgKiBAcGFyYW0ge1JlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb259IHRyYW5zYWN0aW9uXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBfbW91bnRDaGlsZEF0SW5kZXg6IGZ1bmN0aW9uIChjaGlsZCwgbW91bnRJbWFnZSwgYWZ0ZXJOb2RlLCBpbmRleCwgdHJhbnNhY3Rpb24sIGNvbnRleHQpIHtcbiAgICAgIGNoaWxkLl9tb3VudEluZGV4ID0gaW5kZXg7XG4gICAgICByZXR1cm4gdGhpcy5jcmVhdGVDaGlsZChjaGlsZCwgYWZ0ZXJOb2RlLCBtb3VudEltYWdlKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVW5tb3VudHMgYSByZW5kZXJlZCBjaGlsZC5cbiAgICAgKlxuICAgICAqIE5PVEU6IFRoaXMgaXMgcGFydCBvZiBgdXBkYXRlQ2hpbGRyZW5gIGFuZCBpcyBoZXJlIGZvciByZWFkYWJpbGl0eS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7UmVhY3RDb21wb25lbnR9IGNoaWxkIENvbXBvbmVudCB0byB1bm1vdW50LlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgX3VubW91bnRDaGlsZDogZnVuY3Rpb24gKGNoaWxkLCBub2RlKSB7XG4gICAgICB2YXIgdXBkYXRlID0gdGhpcy5yZW1vdmVDaGlsZChjaGlsZCwgbm9kZSk7XG4gICAgICBjaGlsZC5fbW91bnRJbmRleCA9IG51bGw7XG4gICAgICByZXR1cm4gdXBkYXRlO1xuICAgIH1cbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdE11bHRpQ2hpbGQ7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1kb20vbGliL1JlYWN0TXVsdGlDaGlsZC5qcyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIFxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIF9wcm9kSW52YXJpYW50ID0gcmVxdWlyZSgnLi9yZWFjdFByb2RJbnZhcmlhbnQnKTtcblxudmFyIGludmFyaWFudCA9IHJlcXVpcmUoJ2ZianMvbGliL2ludmFyaWFudCcpO1xuXG4vKipcbiAqIEBwYXJhbSB7P29iamVjdH0gb2JqZWN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIGBvYmplY3RgIGlzIGEgdmFsaWQgb3duZXIuXG4gKiBAZmluYWxcbiAqL1xuZnVuY3Rpb24gaXNWYWxpZE93bmVyKG9iamVjdCkge1xuICByZXR1cm4gISEob2JqZWN0ICYmIHR5cGVvZiBvYmplY3QuYXR0YWNoUmVmID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBvYmplY3QuZGV0YWNoUmVmID09PSAnZnVuY3Rpb24nKTtcbn1cblxuLyoqXG4gKiBSZWFjdE93bmVycyBhcmUgY2FwYWJsZSBvZiBzdG9yaW5nIHJlZmVyZW5jZXMgdG8gb3duZWQgY29tcG9uZW50cy5cbiAqXG4gKiBBbGwgY29tcG9uZW50cyBhcmUgY2FwYWJsZSBvZiAvL2JlaW5nLy8gcmVmZXJlbmNlZCBieSBvd25lciBjb21wb25lbnRzLCBidXRcbiAqIG9ubHkgUmVhY3RPd25lciBjb21wb25lbnRzIGFyZSBjYXBhYmxlIG9mIC8vcmVmZXJlbmNpbmcvLyBvd25lZCBjb21wb25lbnRzLlxuICogVGhlIG5hbWVkIHJlZmVyZW5jZSBpcyBrbm93biBhcyBhIFwicmVmXCIuXG4gKlxuICogUmVmcyBhcmUgYXZhaWxhYmxlIHdoZW4gbW91bnRlZCBhbmQgdXBkYXRlZCBkdXJpbmcgcmVjb25jaWxpYXRpb24uXG4gKlxuICogICB2YXIgTXlDb21wb25lbnQgPSBSZWFjdC5jcmVhdGVDbGFzcyh7XG4gKiAgICAgcmVuZGVyOiBmdW5jdGlvbigpIHtcbiAqICAgICAgIHJldHVybiAoXG4gKiAgICAgICAgIDxkaXYgb25DbGljaz17dGhpcy5oYW5kbGVDbGlja30+XG4gKiAgICAgICAgICAgPEN1c3RvbUNvbXBvbmVudCByZWY9XCJjdXN0b21cIiAvPlxuICogICAgICAgICA8L2Rpdj5cbiAqICAgICAgICk7XG4gKiAgICAgfSxcbiAqICAgICBoYW5kbGVDbGljazogZnVuY3Rpb24oKSB7XG4gKiAgICAgICB0aGlzLnJlZnMuY3VzdG9tLmhhbmRsZUNsaWNrKCk7XG4gKiAgICAgfSxcbiAqICAgICBjb21wb25lbnREaWRNb3VudDogZnVuY3Rpb24oKSB7XG4gKiAgICAgICB0aGlzLnJlZnMuY3VzdG9tLmluaXRpYWxpemUoKTtcbiAqICAgICB9XG4gKiAgIH0pO1xuICpcbiAqIFJlZnMgc2hvdWxkIHJhcmVseSBiZSB1c2VkLiBXaGVuIHJlZnMgYXJlIHVzZWQsIHRoZXkgc2hvdWxkIG9ubHkgYmUgZG9uZSB0b1xuICogY29udHJvbCBkYXRhIHRoYXQgaXMgbm90IGhhbmRsZWQgYnkgUmVhY3QncyBkYXRhIGZsb3cuXG4gKlxuICogQGNsYXNzIFJlYWN0T3duZXJcbiAqL1xudmFyIFJlYWN0T3duZXIgPSB7XG4gIC8qKlxuICAgKiBBZGRzIGEgY29tcG9uZW50IGJ5IHJlZiB0byBhbiBvd25lciBjb21wb25lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7UmVhY3RDb21wb25lbnR9IGNvbXBvbmVudCBDb21wb25lbnQgdG8gcmVmZXJlbmNlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcmVmIE5hbWUgYnkgd2hpY2ggdG8gcmVmZXIgdG8gdGhlIGNvbXBvbmVudC5cbiAgICogQHBhcmFtIHtSZWFjdE93bmVyfSBvd25lciBDb21wb25lbnQgb24gd2hpY2ggdG8gcmVjb3JkIHRoZSByZWYuXG4gICAqIEBmaW5hbFxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGFkZENvbXBvbmVudEFzUmVmVG86IGZ1bmN0aW9uIChjb21wb25lbnQsIHJlZiwgb3duZXIpIHtcbiAgICAhaXNWYWxpZE93bmVyKG93bmVyKSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICdhZGRDb21wb25lbnRBc1JlZlRvKC4uLik6IE9ubHkgYSBSZWFjdE93bmVyIGNhbiBoYXZlIHJlZnMuIFlvdSBtaWdodCBiZSBhZGRpbmcgYSByZWYgdG8gYSBjb21wb25lbnQgdGhhdCB3YXMgbm90IGNyZWF0ZWQgaW5zaWRlIGEgY29tcG9uZW50XFwncyBgcmVuZGVyYCBtZXRob2QsIG9yIHlvdSBoYXZlIG11bHRpcGxlIGNvcGllcyBvZiBSZWFjdCBsb2FkZWQgKGRldGFpbHM6IGh0dHBzOi8vZmIubWUvcmVhY3QtcmVmcy1tdXN0LWhhdmUtb3duZXIpLicpIDogX3Byb2RJbnZhcmlhbnQoJzExOScpIDogdm9pZCAwO1xuICAgIG93bmVyLmF0dGFjaFJlZihyZWYsIGNvbXBvbmVudCk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgYSBjb21wb25lbnQgYnkgcmVmIGZyb20gYW4gb3duZXIgY29tcG9uZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0Q29tcG9uZW50fSBjb21wb25lbnQgQ29tcG9uZW50IHRvIGRlcmVmZXJlbmNlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcmVmIE5hbWUgb2YgdGhlIHJlZiB0byByZW1vdmUuXG4gICAqIEBwYXJhbSB7UmVhY3RPd25lcn0gb3duZXIgQ29tcG9uZW50IG9uIHdoaWNoIHRoZSByZWYgaXMgcmVjb3JkZWQuXG4gICAqIEBmaW5hbFxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHJlbW92ZUNvbXBvbmVudEFzUmVmRnJvbTogZnVuY3Rpb24gKGNvbXBvbmVudCwgcmVmLCBvd25lcikge1xuICAgICFpc1ZhbGlkT3duZXIob3duZXIpID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IGludmFyaWFudChmYWxzZSwgJ3JlbW92ZUNvbXBvbmVudEFzUmVmRnJvbSguLi4pOiBPbmx5IGEgUmVhY3RPd25lciBjYW4gaGF2ZSByZWZzLiBZb3UgbWlnaHQgYmUgcmVtb3ZpbmcgYSByZWYgdG8gYSBjb21wb25lbnQgdGhhdCB3YXMgbm90IGNyZWF0ZWQgaW5zaWRlIGEgY29tcG9uZW50XFwncyBgcmVuZGVyYCBtZXRob2QsIG9yIHlvdSBoYXZlIG11bHRpcGxlIGNvcGllcyBvZiBSZWFjdCBsb2FkZWQgKGRldGFpbHM6IGh0dHBzOi8vZmIubWUvcmVhY3QtcmVmcy1tdXN0LWhhdmUtb3duZXIpLicpIDogX3Byb2RJbnZhcmlhbnQoJzEyMCcpIDogdm9pZCAwO1xuICAgIHZhciBvd25lclB1YmxpY0luc3RhbmNlID0gb3duZXIuZ2V0UHVibGljSW5zdGFuY2UoKTtcbiAgICAvLyBDaGVjayB0aGF0IGBjb21wb25lbnRgJ3Mgb3duZXIgaXMgc3RpbGwgYWxpdmUgYW5kIHRoYXQgYGNvbXBvbmVudGAgaXMgc3RpbGwgdGhlIGN1cnJlbnQgcmVmXG4gICAgLy8gYmVjYXVzZSB3ZSBkbyBub3Qgd2FudCB0byBkZXRhY2ggdGhlIHJlZiBpZiBhbm90aGVyIGNvbXBvbmVudCBzdG9sZSBpdC5cbiAgICBpZiAob3duZXJQdWJsaWNJbnN0YW5jZSAmJiBvd25lclB1YmxpY0luc3RhbmNlLnJlZnNbcmVmXSA9PT0gY29tcG9uZW50LmdldFB1YmxpY0luc3RhbmNlKCkpIHtcbiAgICAgIG93bmVyLmRldGFjaFJlZihyZWYpO1xuICAgIH1cbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdE93bmVyO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QtZG9tL2xpYi9SZWFjdE93bmVyLmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUmVhY3RQcm9wVHlwZUxvY2F0aW9uTmFtZXMgPSB7fTtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgUmVhY3RQcm9wVHlwZUxvY2F0aW9uTmFtZXMgPSB7XG4gICAgcHJvcDogJ3Byb3AnLFxuICAgIGNvbnRleHQ6ICdjb250ZXh0JyxcbiAgICBjaGlsZENvbnRleHQ6ICdjaGlsZCBjb250ZXh0J1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0UHJvcFR5cGVMb2NhdGlvbk5hbWVzO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QtZG9tL2xpYi9SZWFjdFByb3BUeXBlTG9jYXRpb25OYW1lcy5qcyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBfYXNzaWduID0gcmVxdWlyZSgnb2JqZWN0LWFzc2lnbicpO1xuXG52YXIgQ2FsbGJhY2tRdWV1ZSA9IHJlcXVpcmUoJy4vQ2FsbGJhY2tRdWV1ZScpO1xudmFyIFBvb2xlZENsYXNzID0gcmVxdWlyZSgnLi9Qb29sZWRDbGFzcycpO1xudmFyIFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJy4vUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyJyk7XG52YXIgUmVhY3RJbnB1dFNlbGVjdGlvbiA9IHJlcXVpcmUoJy4vUmVhY3RJbnB1dFNlbGVjdGlvbicpO1xudmFyIFJlYWN0SW5zdHJ1bWVudGF0aW9uID0gcmVxdWlyZSgnLi9SZWFjdEluc3RydW1lbnRhdGlvbicpO1xudmFyIFRyYW5zYWN0aW9uID0gcmVxdWlyZSgnLi9UcmFuc2FjdGlvbicpO1xudmFyIFJlYWN0VXBkYXRlUXVldWUgPSByZXF1aXJlKCcuL1JlYWN0VXBkYXRlUXVldWUnKTtcblxuLyoqXG4gKiBFbnN1cmVzIHRoYXQsIHdoZW4gcG9zc2libGUsIHRoZSBzZWxlY3Rpb24gcmFuZ2UgKGN1cnJlbnRseSBzZWxlY3RlZCB0ZXh0XG4gKiBpbnB1dCkgaXMgbm90IGRpc3R1cmJlZCBieSBwZXJmb3JtaW5nIHRoZSB0cmFuc2FjdGlvbi5cbiAqL1xudmFyIFNFTEVDVElPTl9SRVNUT1JBVElPTiA9IHtcbiAgLyoqXG4gICAqIEByZXR1cm4ge1NlbGVjdGlvbn0gU2VsZWN0aW9uIGluZm9ybWF0aW9uLlxuICAgKi9cbiAgaW5pdGlhbGl6ZTogUmVhY3RJbnB1dFNlbGVjdGlvbi5nZXRTZWxlY3Rpb25JbmZvcm1hdGlvbixcbiAgLyoqXG4gICAqIEBwYXJhbSB7U2VsZWN0aW9ufSBzZWwgU2VsZWN0aW9uIGluZm9ybWF0aW9uIHJldHVybmVkIGZyb20gYGluaXRpYWxpemVgLlxuICAgKi9cbiAgY2xvc2U6IFJlYWN0SW5wdXRTZWxlY3Rpb24ucmVzdG9yZVNlbGVjdGlvblxufTtcblxuLyoqXG4gKiBTdXBwcmVzc2VzIGV2ZW50cyAoYmx1ci9mb2N1cykgdGhhdCBjb3VsZCBiZSBpbmFkdmVydGVudGx5IGRpc3BhdGNoZWQgZHVlIHRvXG4gKiBoaWdoIGxldmVsIERPTSBtYW5pcHVsYXRpb25zIChsaWtlIHRlbXBvcmFyaWx5IHJlbW92aW5nIGEgdGV4dCBpbnB1dCBmcm9tIHRoZVxuICogRE9NKS5cbiAqL1xudmFyIEVWRU5UX1NVUFBSRVNTSU9OID0ge1xuICAvKipcbiAgICogQHJldHVybiB7Ym9vbGVhbn0gVGhlIGVuYWJsZWQgc3RhdHVzIG9mIGBSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXJgIGJlZm9yZVxuICAgKiB0aGUgcmVjb25jaWxpYXRpb24uXG4gICAqL1xuICBpbml0aWFsaXplOiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGN1cnJlbnRseUVuYWJsZWQgPSBSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXIuaXNFbmFibGVkKCk7XG4gICAgUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyLnNldEVuYWJsZWQoZmFsc2UpO1xuICAgIHJldHVybiBjdXJyZW50bHlFbmFibGVkO1xuICB9LFxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHByZXZpb3VzbHlFbmFibGVkIEVuYWJsZWQgc3RhdHVzIG9mXG4gICAqICAgYFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlcmAgYmVmb3JlIHRoZSByZWNvbmNpbGlhdGlvbiBvY2N1cnJlZC4gYGNsb3NlYFxuICAgKiAgIHJlc3RvcmVzIHRoZSBwcmV2aW91cyB2YWx1ZS5cbiAgICovXG4gIGNsb3NlOiBmdW5jdGlvbiAocHJldmlvdXNseUVuYWJsZWQpIHtcbiAgICBSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXIuc2V0RW5hYmxlZChwcmV2aW91c2x5RW5hYmxlZCk7XG4gIH1cbn07XG5cbi8qKlxuICogUHJvdmlkZXMgYSBxdWV1ZSBmb3IgY29sbGVjdGluZyBgY29tcG9uZW50RGlkTW91bnRgIGFuZFxuICogYGNvbXBvbmVudERpZFVwZGF0ZWAgY2FsbGJhY2tzIGR1cmluZyB0aGUgdHJhbnNhY3Rpb24uXG4gKi9cbnZhciBPTl9ET01fUkVBRFlfUVVFVUVJTkcgPSB7XG4gIC8qKlxuICAgKiBJbml0aWFsaXplcyB0aGUgaW50ZXJuYWwgYG9uRE9NUmVhZHlgIHF1ZXVlLlxuICAgKi9cbiAgaW5pdGlhbGl6ZTogZnVuY3Rpb24gKCkge1xuICAgIHRoaXMucmVhY3RNb3VudFJlYWR5LnJlc2V0KCk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEFmdGVyIERPTSBpcyBmbHVzaGVkLCBpbnZva2UgYWxsIHJlZ2lzdGVyZWQgYG9uRE9NUmVhZHlgIGNhbGxiYWNrcy5cbiAgICovXG4gIGNsb3NlOiBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5yZWFjdE1vdW50UmVhZHkubm90aWZ5QWxsKCk7XG4gIH1cbn07XG5cbi8qKlxuICogRXhlY3V0ZWQgd2l0aGluIHRoZSBzY29wZSBvZiB0aGUgYFRyYW5zYWN0aW9uYCBpbnN0YW5jZS4gQ29uc2lkZXIgdGhlc2UgYXNcbiAqIGJlaW5nIG1lbWJlciBtZXRob2RzLCBidXQgd2l0aCBhbiBpbXBsaWVkIG9yZGVyaW5nIHdoaWxlIGJlaW5nIGlzb2xhdGVkIGZyb21cbiAqIGVhY2ggb3RoZXIuXG4gKi9cbnZhciBUUkFOU0FDVElPTl9XUkFQUEVSUyA9IFtTRUxFQ1RJT05fUkVTVE9SQVRJT04sIEVWRU5UX1NVUFBSRVNTSU9OLCBPTl9ET01fUkVBRFlfUVVFVUVJTkddO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBUUkFOU0FDVElPTl9XUkFQUEVSUy5wdXNoKHtcbiAgICBpbml0aWFsaXplOiBSZWFjdEluc3RydW1lbnRhdGlvbi5kZWJ1Z1Rvb2wub25CZWdpbkZsdXNoLFxuICAgIGNsb3NlOiBSZWFjdEluc3RydW1lbnRhdGlvbi5kZWJ1Z1Rvb2wub25FbmRGbHVzaFxuICB9KTtcbn1cblxuLyoqXG4gKiBDdXJyZW50bHk6XG4gKiAtIFRoZSBvcmRlciB0aGF0IHRoZXNlIGFyZSBsaXN0ZWQgaW4gdGhlIHRyYW5zYWN0aW9uIGlzIGNyaXRpY2FsOlxuICogLSBTdXBwcmVzc2VzIGV2ZW50cy5cbiAqIC0gUmVzdG9yZXMgc2VsZWN0aW9uIHJhbmdlLlxuICpcbiAqIEZ1dHVyZTpcbiAqIC0gUmVzdG9yZSBkb2N1bWVudC9vdmVyZmxvdyBzY3JvbGwgcG9zaXRpb25zIHRoYXQgd2VyZSB1bmludGVudGlvbmFsbHlcbiAqICAgbW9kaWZpZWQgdmlhIERPTSBpbnNlcnRpb25zIGFib3ZlIHRoZSB0b3Agdmlld3BvcnQgYm91bmRhcnkuXG4gKiAtIEltcGxlbWVudC9pbnRlZ3JhdGUgd2l0aCBjdXN0b21pemVkIGNvbnN0cmFpbnQgYmFzZWQgbGF5b3V0IHN5c3RlbSBhbmQga2VlcFxuICogICB0cmFjayBvZiB3aGljaCBkaW1lbnNpb25zIG11c3QgYmUgcmVtZWFzdXJlZC5cbiAqXG4gKiBAY2xhc3MgUmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvblxuICovXG5mdW5jdGlvbiBSZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9uKHVzZUNyZWF0ZUVsZW1lbnQpIHtcbiAgdGhpcy5yZWluaXRpYWxpemVUcmFuc2FjdGlvbigpO1xuICAvLyBPbmx5IHNlcnZlci1zaWRlIHJlbmRlcmluZyByZWFsbHkgbmVlZHMgdGhpcyBvcHRpb24gKHNlZVxuICAvLyBgUmVhY3RTZXJ2ZXJSZW5kZXJpbmdgKSwgYnV0IHNlcnZlci1zaWRlIHVzZXNcbiAgLy8gYFJlYWN0U2VydmVyUmVuZGVyaW5nVHJhbnNhY3Rpb25gIGluc3RlYWQuIFRoaXMgb3B0aW9uIGlzIGhlcmUgc28gdGhhdCBpdCdzXG4gIC8vIGFjY2Vzc2libGUgYW5kIGRlZmF1bHRzIHRvIGZhbHNlIHdoZW4gYFJlYWN0RE9NQ29tcG9uZW50YCBhbmRcbiAgLy8gYFJlYWN0RE9NVGV4dENvbXBvbmVudGAgY2hlY2tzIGl0IGluIGBtb3VudENvbXBvbmVudGAuYFxuICB0aGlzLnJlbmRlclRvU3RhdGljTWFya3VwID0gZmFsc2U7XG4gIHRoaXMucmVhY3RNb3VudFJlYWR5ID0gQ2FsbGJhY2tRdWV1ZS5nZXRQb29sZWQobnVsbCk7XG4gIHRoaXMudXNlQ3JlYXRlRWxlbWVudCA9IHVzZUNyZWF0ZUVsZW1lbnQ7XG59XG5cbnZhciBNaXhpbiA9IHtcbiAgLyoqXG4gICAqIEBzZWUgVHJhbnNhY3Rpb25cbiAgICogQGFic3RyYWN0XG4gICAqIEBmaW5hbFxuICAgKiBAcmV0dXJuIHthcnJheTxvYmplY3Q+fSBMaXN0IG9mIG9wZXJhdGlvbiB3cmFwIHByb2NlZHVyZXMuXG4gICAqICAgVE9ETzogY29udmVydCB0byBhcnJheTxUcmFuc2FjdGlvbldyYXBwZXI+XG4gICAqL1xuICBnZXRUcmFuc2FjdGlvbldyYXBwZXJzOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIFRSQU5TQUNUSU9OX1dSQVBQRVJTO1xuICB9LFxuXG4gIC8qKlxuICAgKiBAcmV0dXJuIHtvYmplY3R9IFRoZSBxdWV1ZSB0byBjb2xsZWN0IGBvbkRPTVJlYWR5YCBjYWxsYmFja3Mgd2l0aC5cbiAgICovXG4gIGdldFJlYWN0TW91bnRSZWFkeTogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLnJlYWN0TW91bnRSZWFkeTtcbiAgfSxcblxuICAvKipcbiAgICogQHJldHVybiB7b2JqZWN0fSBUaGUgcXVldWUgdG8gY29sbGVjdCBSZWFjdCBhc3luYyBldmVudHMuXG4gICAqL1xuICBnZXRVcGRhdGVRdWV1ZTogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBSZWFjdFVwZGF0ZVF1ZXVlO1xuICB9LFxuXG4gIC8qKlxuICAgKiBTYXZlIGN1cnJlbnQgdHJhbnNhY3Rpb24gc3RhdGUgLS0gaWYgdGhlIHJldHVybiB2YWx1ZSBmcm9tIHRoaXMgbWV0aG9kIGlzXG4gICAqIHBhc3NlZCB0byBgcm9sbGJhY2tgLCB0aGUgdHJhbnNhY3Rpb24gd2lsbCBiZSByZXNldCB0byB0aGF0IHN0YXRlLlxuICAgKi9cbiAgY2hlY2twb2ludDogZnVuY3Rpb24gKCkge1xuICAgIC8vIHJlYWN0TW91bnRSZWFkeSBpcyB0aGUgb3VyIG9ubHkgc3RhdGVmdWwgd3JhcHBlclxuICAgIHJldHVybiB0aGlzLnJlYWN0TW91bnRSZWFkeS5jaGVja3BvaW50KCk7XG4gIH0sXG5cbiAgcm9sbGJhY2s6IGZ1bmN0aW9uIChjaGVja3BvaW50KSB7XG4gICAgdGhpcy5yZWFjdE1vdW50UmVhZHkucm9sbGJhY2soY2hlY2twb2ludCk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIGBQb29sZWRDbGFzc2AgbG9va3MgZm9yIHRoaXMsIGFuZCB3aWxsIGludm9rZSB0aGlzIGJlZm9yZSBhbGxvd2luZyB0aGlzXG4gICAqIGluc3RhbmNlIHRvIGJlIHJldXNlZC5cbiAgICovXG4gIGRlc3RydWN0b3I6IGZ1bmN0aW9uICgpIHtcbiAgICBDYWxsYmFja1F1ZXVlLnJlbGVhc2UodGhpcy5yZWFjdE1vdW50UmVhZHkpO1xuICAgIHRoaXMucmVhY3RNb3VudFJlYWR5ID0gbnVsbDtcbiAgfVxufTtcblxuX2Fzc2lnbihSZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9uLnByb3RvdHlwZSwgVHJhbnNhY3Rpb24sIE1peGluKTtcblxuUG9vbGVkQ2xhc3MuYWRkUG9vbGluZ1RvKFJlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb24pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb247XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1kb20vbGliL1JlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb24uanMiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBSZWFjdE93bmVyID0gcmVxdWlyZSgnLi9SZWFjdE93bmVyJyk7XG5cbnZhciBSZWFjdFJlZiA9IHt9O1xuXG5mdW5jdGlvbiBhdHRhY2hSZWYocmVmLCBjb21wb25lbnQsIG93bmVyKSB7XG4gIGlmICh0eXBlb2YgcmVmID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmVmKGNvbXBvbmVudC5nZXRQdWJsaWNJbnN0YW5jZSgpKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBMZWdhY3kgcmVmXG4gICAgUmVhY3RPd25lci5hZGRDb21wb25lbnRBc1JlZlRvKGNvbXBvbmVudCwgcmVmLCBvd25lcik7XG4gIH1cbn1cblxuZnVuY3Rpb24gZGV0YWNoUmVmKHJlZiwgY29tcG9uZW50LCBvd25lcikge1xuICBpZiAodHlwZW9mIHJlZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJlZihudWxsKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBMZWdhY3kgcmVmXG4gICAgUmVhY3RPd25lci5yZW1vdmVDb21wb25lbnRBc1JlZkZyb20oY29tcG9uZW50LCByZWYsIG93bmVyKTtcbiAgfVxufVxuXG5SZWFjdFJlZi5hdHRhY2hSZWZzID0gZnVuY3Rpb24gKGluc3RhbmNlLCBlbGVtZW50KSB7XG4gIGlmIChlbGVtZW50ID09PSBudWxsIHx8IHR5cGVvZiBlbGVtZW50ICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybjtcbiAgfVxuICB2YXIgcmVmID0gZWxlbWVudC5yZWY7XG4gIGlmIChyZWYgIT0gbnVsbCkge1xuICAgIGF0dGFjaFJlZihyZWYsIGluc3RhbmNlLCBlbGVtZW50Ll9vd25lcik7XG4gIH1cbn07XG5cblJlYWN0UmVmLnNob3VsZFVwZGF0ZVJlZnMgPSBmdW5jdGlvbiAocHJldkVsZW1lbnQsIG5leHRFbGVtZW50KSB7XG4gIC8vIElmIGVpdGhlciB0aGUgb3duZXIgb3IgYSBgcmVmYCBoYXMgY2hhbmdlZCwgbWFrZSBzdXJlIHRoZSBuZXdlc3Qgb3duZXJcbiAgLy8gaGFzIHN0b3JlZCBhIHJlZmVyZW5jZSB0byBgdGhpc2AsIGFuZCB0aGUgcHJldmlvdXMgb3duZXIgKGlmIGRpZmZlcmVudClcbiAgLy8gaGFzIGZvcmdvdHRlbiB0aGUgcmVmZXJlbmNlIHRvIGB0aGlzYC4gV2UgdXNlIHRoZSBlbGVtZW50IGluc3RlYWRcbiAgLy8gb2YgdGhlIHB1YmxpYyB0aGlzLnByb3BzIGJlY2F1c2UgdGhlIHBvc3QgcHJvY2Vzc2luZyBjYW5ub3QgZGV0ZXJtaW5lXG4gIC8vIGEgcmVmLiBUaGUgcmVmIGNvbmNlcHR1YWxseSBsaXZlcyBvbiB0aGUgZWxlbWVudC5cblxuICAvLyBUT0RPOiBTaG91bGQgdGhpcyBldmVuIGJlIHBvc3NpYmxlPyBUaGUgb3duZXIgY2Fubm90IGNoYW5nZSBiZWNhdXNlXG4gIC8vIGl0J3MgZm9yYmlkZGVuIGJ5IHNob3VsZFVwZGF0ZVJlYWN0Q29tcG9uZW50LiBUaGUgcmVmIGNhbiBjaGFuZ2VcbiAgLy8gaWYgeW91IHN3YXAgdGhlIGtleXMgb2YgYnV0IG5vdCB0aGUgcmVmcy4gUmVjb25zaWRlciB3aGVyZSB0aGlzIGNoZWNrXG4gIC8vIGlzIG1hZGUuIEl0IHByb2JhYmx5IGJlbG9uZ3Mgd2hlcmUgdGhlIGtleSBjaGVja2luZyBhbmRcbiAgLy8gaW5zdGFudGlhdGVSZWFjdENvbXBvbmVudCBpcyBkb25lLlxuXG4gIHZhciBwcmV2UmVmID0gbnVsbDtcbiAgdmFyIHByZXZPd25lciA9IG51bGw7XG4gIGlmIChwcmV2RWxlbWVudCAhPT0gbnVsbCAmJiB0eXBlb2YgcHJldkVsZW1lbnQgPT09ICdvYmplY3QnKSB7XG4gICAgcHJldlJlZiA9IHByZXZFbGVtZW50LnJlZjtcbiAgICBwcmV2T3duZXIgPSBwcmV2RWxlbWVudC5fb3duZXI7XG4gIH1cblxuICB2YXIgbmV4dFJlZiA9IG51bGw7XG4gIHZhciBuZXh0T3duZXIgPSBudWxsO1xuICBpZiAobmV4dEVsZW1lbnQgIT09IG51bGwgJiYgdHlwZW9mIG5leHRFbGVtZW50ID09PSAnb2JqZWN0Jykge1xuICAgIG5leHRSZWYgPSBuZXh0RWxlbWVudC5yZWY7XG4gICAgbmV4dE93bmVyID0gbmV4dEVsZW1lbnQuX293bmVyO1xuICB9XG5cbiAgcmV0dXJuIHByZXZSZWYgIT09IG5leHRSZWYgfHxcbiAgLy8gSWYgb3duZXIgY2hhbmdlcyBidXQgd2UgaGF2ZSBhbiB1bmNoYW5nZWQgZnVuY3Rpb24gcmVmLCBkb24ndCB1cGRhdGUgcmVmc1xuICB0eXBlb2YgbmV4dFJlZiA9PT0gJ3N0cmluZycgJiYgbmV4dE93bmVyICE9PSBwcmV2T3duZXI7XG59O1xuXG5SZWFjdFJlZi5kZXRhY2hSZWZzID0gZnVuY3Rpb24gKGluc3RhbmNlLCBlbGVtZW50KSB7XG4gIGlmIChlbGVtZW50ID09PSBudWxsIHx8IHR5cGVvZiBlbGVtZW50ICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybjtcbiAgfVxuICB2YXIgcmVmID0gZWxlbWVudC5yZWY7XG4gIGlmIChyZWYgIT0gbnVsbCkge1xuICAgIGRldGFjaFJlZihyZWYsIGluc3RhbmNlLCBlbGVtZW50Ll9vd25lcik7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RSZWY7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1kb20vbGliL1JlYWN0UmVmLmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxNC1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIF9hc3NpZ24gPSByZXF1aXJlKCdvYmplY3QtYXNzaWduJyk7XG5cbnZhciBQb29sZWRDbGFzcyA9IHJlcXVpcmUoJy4vUG9vbGVkQ2xhc3MnKTtcbnZhciBUcmFuc2FjdGlvbiA9IHJlcXVpcmUoJy4vVHJhbnNhY3Rpb24nKTtcbnZhciBSZWFjdEluc3RydW1lbnRhdGlvbiA9IHJlcXVpcmUoJy4vUmVhY3RJbnN0cnVtZW50YXRpb24nKTtcbnZhciBSZWFjdFNlcnZlclVwZGF0ZVF1ZXVlID0gcmVxdWlyZSgnLi9SZWFjdFNlcnZlclVwZGF0ZVF1ZXVlJyk7XG5cbi8qKlxuICogRXhlY3V0ZWQgd2l0aGluIHRoZSBzY29wZSBvZiB0aGUgYFRyYW5zYWN0aW9uYCBpbnN0YW5jZS4gQ29uc2lkZXIgdGhlc2UgYXNcbiAqIGJlaW5nIG1lbWJlciBtZXRob2RzLCBidXQgd2l0aCBhbiBpbXBsaWVkIG9yZGVyaW5nIHdoaWxlIGJlaW5nIGlzb2xhdGVkIGZyb21cbiAqIGVhY2ggb3RoZXIuXG4gKi9cbnZhciBUUkFOU0FDVElPTl9XUkFQUEVSUyA9IFtdO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBUUkFOU0FDVElPTl9XUkFQUEVSUy5wdXNoKHtcbiAgICBpbml0aWFsaXplOiBSZWFjdEluc3RydW1lbnRhdGlvbi5kZWJ1Z1Rvb2wub25CZWdpbkZsdXNoLFxuICAgIGNsb3NlOiBSZWFjdEluc3RydW1lbnRhdGlvbi5kZWJ1Z1Rvb2wub25FbmRGbHVzaFxuICB9KTtcbn1cblxudmFyIG5vb3BDYWxsYmFja1F1ZXVlID0ge1xuICBlbnF1ZXVlOiBmdW5jdGlvbiAoKSB7fVxufTtcblxuLyoqXG4gKiBAY2xhc3MgUmVhY3RTZXJ2ZXJSZW5kZXJpbmdUcmFuc2FjdGlvblxuICogQHBhcmFtIHtib29sZWFufSByZW5kZXJUb1N0YXRpY01hcmt1cFxuICovXG5mdW5jdGlvbiBSZWFjdFNlcnZlclJlbmRlcmluZ1RyYW5zYWN0aW9uKHJlbmRlclRvU3RhdGljTWFya3VwKSB7XG4gIHRoaXMucmVpbml0aWFsaXplVHJhbnNhY3Rpb24oKTtcbiAgdGhpcy5yZW5kZXJUb1N0YXRpY01hcmt1cCA9IHJlbmRlclRvU3RhdGljTWFya3VwO1xuICB0aGlzLnVzZUNyZWF0ZUVsZW1lbnQgPSBmYWxzZTtcbiAgdGhpcy51cGRhdGVRdWV1ZSA9IG5ldyBSZWFjdFNlcnZlclVwZGF0ZVF1ZXVlKHRoaXMpO1xufVxuXG52YXIgTWl4aW4gPSB7XG4gIC8qKlxuICAgKiBAc2VlIFRyYW5zYWN0aW9uXG4gICAqIEBhYnN0cmFjdFxuICAgKiBAZmluYWxcbiAgICogQHJldHVybiB7YXJyYXl9IEVtcHR5IGxpc3Qgb2Ygb3BlcmF0aW9uIHdyYXAgcHJvY2VkdXJlcy5cbiAgICovXG4gIGdldFRyYW5zYWN0aW9uV3JhcHBlcnM6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gVFJBTlNBQ1RJT05fV1JBUFBFUlM7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEByZXR1cm4ge29iamVjdH0gVGhlIHF1ZXVlIHRvIGNvbGxlY3QgYG9uRE9NUmVhZHlgIGNhbGxiYWNrcyB3aXRoLlxuICAgKi9cbiAgZ2V0UmVhY3RNb3VudFJlYWR5OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIG5vb3BDYWxsYmFja1F1ZXVlO1xuICB9LFxuXG4gIC8qKlxuICAgKiBAcmV0dXJuIHtvYmplY3R9IFRoZSBxdWV1ZSB0byBjb2xsZWN0IFJlYWN0IGFzeW5jIGV2ZW50cy5cbiAgICovXG4gIGdldFVwZGF0ZVF1ZXVlOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMudXBkYXRlUXVldWU7XG4gIH0sXG5cbiAgLyoqXG4gICAqIGBQb29sZWRDbGFzc2AgbG9va3MgZm9yIHRoaXMsIGFuZCB3aWxsIGludm9rZSB0aGlzIGJlZm9yZSBhbGxvd2luZyB0aGlzXG4gICAqIGluc3RhbmNlIHRvIGJlIHJldXNlZC5cbiAgICovXG4gIGRlc3RydWN0b3I6IGZ1bmN0aW9uICgpIHt9LFxuXG4gIGNoZWNrcG9pbnQ6IGZ1bmN0aW9uICgpIHt9LFxuXG4gIHJvbGxiYWNrOiBmdW5jdGlvbiAoKSB7fVxufTtcblxuX2Fzc2lnbihSZWFjdFNlcnZlclJlbmRlcmluZ1RyYW5zYWN0aW9uLnByb3RvdHlwZSwgVHJhbnNhY3Rpb24sIE1peGluKTtcblxuUG9vbGVkQ2xhc3MuYWRkUG9vbGluZ1RvKFJlYWN0U2VydmVyUmVuZGVyaW5nVHJhbnNhY3Rpb24pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0U2VydmVyUmVuZGVyaW5nVHJhbnNhY3Rpb247XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1kb20vbGliL1JlYWN0U2VydmVyUmVuZGVyaW5nVHJhbnNhY3Rpb24uanMiLCIvKipcbiAqIENvcHlyaWdodCAyMDE1LXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbnZhciBSZWFjdFVwZGF0ZVF1ZXVlID0gcmVxdWlyZSgnLi9SZWFjdFVwZGF0ZVF1ZXVlJyk7XG5cbnZhciB3YXJuaW5nID0gcmVxdWlyZSgnZmJqcy9saWIvd2FybmluZycpO1xuXG5mdW5jdGlvbiB3YXJuTm9vcChwdWJsaWNJbnN0YW5jZSwgY2FsbGVyTmFtZSkge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIHZhciBjb25zdHJ1Y3RvciA9IHB1YmxpY0luc3RhbmNlLmNvbnN0cnVjdG9yO1xuICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKGZhbHNlLCAnJXMoLi4uKTogQ2FuIG9ubHkgdXBkYXRlIGEgbW91bnRpbmcgY29tcG9uZW50LiAnICsgJ1RoaXMgdXN1YWxseSBtZWFucyB5b3UgY2FsbGVkICVzKCkgb3V0c2lkZSBjb21wb25lbnRXaWxsTW91bnQoKSBvbiB0aGUgc2VydmVyLiAnICsgJ1RoaXMgaXMgYSBuby1vcC4gUGxlYXNlIGNoZWNrIHRoZSBjb2RlIGZvciB0aGUgJXMgY29tcG9uZW50LicsIGNhbGxlck5hbWUsIGNhbGxlck5hbWUsIGNvbnN0cnVjdG9yICYmIChjb25zdHJ1Y3Rvci5kaXNwbGF5TmFtZSB8fCBjb25zdHJ1Y3Rvci5uYW1lKSB8fCAnUmVhY3RDbGFzcycpIDogdm9pZCAwO1xuICB9XG59XG5cbi8qKlxuICogVGhpcyBpcyB0aGUgdXBkYXRlIHF1ZXVlIHVzZWQgZm9yIHNlcnZlciByZW5kZXJpbmcuXG4gKiBJdCBkZWxlZ2F0ZXMgdG8gUmVhY3RVcGRhdGVRdWV1ZSB3aGlsZSBzZXJ2ZXIgcmVuZGVyaW5nIGlzIGluIHByb2dyZXNzIGFuZFxuICogc3dpdGNoZXMgdG8gUmVhY3ROb29wVXBkYXRlUXVldWUgYWZ0ZXIgdGhlIHRyYW5zYWN0aW9uIGhhcyBjb21wbGV0ZWQuXG4gKiBAY2xhc3MgUmVhY3RTZXJ2ZXJVcGRhdGVRdWV1ZVxuICogQHBhcmFtIHtUcmFuc2FjdGlvbn0gdHJhbnNhY3Rpb25cbiAqL1xuXG52YXIgUmVhY3RTZXJ2ZXJVcGRhdGVRdWV1ZSA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gUmVhY3RTZXJ2ZXJVcGRhdGVRdWV1ZSh0cmFuc2FjdGlvbikge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBSZWFjdFNlcnZlclVwZGF0ZVF1ZXVlKTtcblxuICAgIHRoaXMudHJhbnNhY3Rpb24gPSB0cmFuc2FjdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3Mgd2hldGhlciBvciBub3QgdGhpcyBjb21wb3NpdGUgY29tcG9uZW50IGlzIG1vdW50ZWQuXG4gICAqIEBwYXJhbSB7UmVhY3RDbGFzc30gcHVibGljSW5zdGFuY2UgVGhlIGluc3RhbmNlIHdlIHdhbnQgdG8gdGVzdC5cbiAgICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiBtb3VudGVkLCBmYWxzZSBvdGhlcndpc2UuXG4gICAqIEBwcm90ZWN0ZWRcbiAgICogQGZpbmFsXG4gICAqL1xuXG5cbiAgUmVhY3RTZXJ2ZXJVcGRhdGVRdWV1ZS5wcm90b3R5cGUuaXNNb3VudGVkID0gZnVuY3Rpb24gaXNNb3VudGVkKHB1YmxpY0luc3RhbmNlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9O1xuXG4gIC8qKlxuICAgKiBFbnF1ZXVlIGEgY2FsbGJhY2sgdGhhdCB3aWxsIGJlIGV4ZWN1dGVkIGFmdGVyIGFsbCB0aGUgcGVuZGluZyB1cGRhdGVzXG4gICAqIGhhdmUgcHJvY2Vzc2VkLlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0Q2xhc3N9IHB1YmxpY0luc3RhbmNlIFRoZSBpbnN0YW5jZSB0byB1c2UgYXMgYHRoaXNgIGNvbnRleHQuXG4gICAqIEBwYXJhbSB7P2Z1bmN0aW9ufSBjYWxsYmFjayBDYWxsZWQgYWZ0ZXIgc3RhdGUgaXMgdXBkYXRlZC5cbiAgICogQGludGVybmFsXG4gICAqL1xuXG5cbiAgUmVhY3RTZXJ2ZXJVcGRhdGVRdWV1ZS5wcm90b3R5cGUuZW5xdWV1ZUNhbGxiYWNrID0gZnVuY3Rpb24gZW5xdWV1ZUNhbGxiYWNrKHB1YmxpY0luc3RhbmNlLCBjYWxsYmFjaywgY2FsbGVyTmFtZSkge1xuICAgIGlmICh0aGlzLnRyYW5zYWN0aW9uLmlzSW5UcmFuc2FjdGlvbigpKSB7XG4gICAgICBSZWFjdFVwZGF0ZVF1ZXVlLmVucXVldWVDYWxsYmFjayhwdWJsaWNJbnN0YW5jZSwgY2FsbGJhY2ssIGNhbGxlck5hbWUpO1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogRm9yY2VzIGFuIHVwZGF0ZS4gVGhpcyBzaG91bGQgb25seSBiZSBpbnZva2VkIHdoZW4gaXQgaXMga25vd24gd2l0aFxuICAgKiBjZXJ0YWludHkgdGhhdCB3ZSBhcmUgKipub3QqKiBpbiBhIERPTSB0cmFuc2FjdGlvbi5cbiAgICpcbiAgICogWW91IG1heSB3YW50IHRvIGNhbGwgdGhpcyB3aGVuIHlvdSBrbm93IHRoYXQgc29tZSBkZWVwZXIgYXNwZWN0IG9mIHRoZVxuICAgKiBjb21wb25lbnQncyBzdGF0ZSBoYXMgY2hhbmdlZCBidXQgYHNldFN0YXRlYCB3YXMgbm90IGNhbGxlZC5cbiAgICpcbiAgICogVGhpcyB3aWxsIG5vdCBpbnZva2UgYHNob3VsZENvbXBvbmVudFVwZGF0ZWAsIGJ1dCBpdCB3aWxsIGludm9rZVxuICAgKiBgY29tcG9uZW50V2lsbFVwZGF0ZWAgYW5kIGBjb21wb25lbnREaWRVcGRhdGVgLlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0Q2xhc3N9IHB1YmxpY0luc3RhbmNlIFRoZSBpbnN0YW5jZSB0aGF0IHNob3VsZCByZXJlbmRlci5cbiAgICogQGludGVybmFsXG4gICAqL1xuXG5cbiAgUmVhY3RTZXJ2ZXJVcGRhdGVRdWV1ZS5wcm90b3R5cGUuZW5xdWV1ZUZvcmNlVXBkYXRlID0gZnVuY3Rpb24gZW5xdWV1ZUZvcmNlVXBkYXRlKHB1YmxpY0luc3RhbmNlKSB7XG4gICAgaWYgKHRoaXMudHJhbnNhY3Rpb24uaXNJblRyYW5zYWN0aW9uKCkpIHtcbiAgICAgIFJlYWN0VXBkYXRlUXVldWUuZW5xdWV1ZUZvcmNlVXBkYXRlKHB1YmxpY0luc3RhbmNlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgd2Fybk5vb3AocHVibGljSW5zdGFuY2UsICdmb3JjZVVwZGF0ZScpO1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogUmVwbGFjZXMgYWxsIG9mIHRoZSBzdGF0ZS4gQWx3YXlzIHVzZSB0aGlzIG9yIGBzZXRTdGF0ZWAgdG8gbXV0YXRlIHN0YXRlLlxuICAgKiBZb3Ugc2hvdWxkIHRyZWF0IGB0aGlzLnN0YXRlYCBhcyBpbW11dGFibGUuXG4gICAqXG4gICAqIFRoZXJlIGlzIG5vIGd1YXJhbnRlZSB0aGF0IGB0aGlzLnN0YXRlYCB3aWxsIGJlIGltbWVkaWF0ZWx5IHVwZGF0ZWQsIHNvXG4gICAqIGFjY2Vzc2luZyBgdGhpcy5zdGF0ZWAgYWZ0ZXIgY2FsbGluZyB0aGlzIG1ldGhvZCBtYXkgcmV0dXJuIHRoZSBvbGQgdmFsdWUuXG4gICAqXG4gICAqIEBwYXJhbSB7UmVhY3RDbGFzc30gcHVibGljSW5zdGFuY2UgVGhlIGluc3RhbmNlIHRoYXQgc2hvdWxkIHJlcmVuZGVyLlxuICAgKiBAcGFyYW0ge29iamVjdHxmdW5jdGlvbn0gY29tcGxldGVTdGF0ZSBOZXh0IHN0YXRlLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG5cblxuICBSZWFjdFNlcnZlclVwZGF0ZVF1ZXVlLnByb3RvdHlwZS5lbnF1ZXVlUmVwbGFjZVN0YXRlID0gZnVuY3Rpb24gZW5xdWV1ZVJlcGxhY2VTdGF0ZShwdWJsaWNJbnN0YW5jZSwgY29tcGxldGVTdGF0ZSkge1xuICAgIGlmICh0aGlzLnRyYW5zYWN0aW9uLmlzSW5UcmFuc2FjdGlvbigpKSB7XG4gICAgICBSZWFjdFVwZGF0ZVF1ZXVlLmVucXVldWVSZXBsYWNlU3RhdGUocHVibGljSW5zdGFuY2UsIGNvbXBsZXRlU3RhdGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB3YXJuTm9vcChwdWJsaWNJbnN0YW5jZSwgJ3JlcGxhY2VTdGF0ZScpO1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogU2V0cyBhIHN1YnNldCBvZiB0aGUgc3RhdGUuIFRoaXMgb25seSBleGlzdHMgYmVjYXVzZSBfcGVuZGluZ1N0YXRlIGlzXG4gICAqIGludGVybmFsLiBUaGlzIHByb3ZpZGVzIGEgbWVyZ2luZyBzdHJhdGVneSB0aGF0IGlzIG5vdCBhdmFpbGFibGUgdG8gZGVlcFxuICAgKiBwcm9wZXJ0aWVzIHdoaWNoIGlzIGNvbmZ1c2luZy4gVE9ETzogRXhwb3NlIHBlbmRpbmdTdGF0ZSBvciBkb24ndCB1c2UgaXRcbiAgICogZHVyaW5nIHRoZSBtZXJnZS5cbiAgICpcbiAgICogQHBhcmFtIHtSZWFjdENsYXNzfSBwdWJsaWNJbnN0YW5jZSBUaGUgaW5zdGFuY2UgdGhhdCBzaG91bGQgcmVyZW5kZXIuXG4gICAqIEBwYXJhbSB7b2JqZWN0fGZ1bmN0aW9ufSBwYXJ0aWFsU3RhdGUgTmV4dCBwYXJ0aWFsIHN0YXRlIHRvIGJlIG1lcmdlZCB3aXRoIHN0YXRlLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG5cblxuICBSZWFjdFNlcnZlclVwZGF0ZVF1ZXVlLnByb3RvdHlwZS5lbnF1ZXVlU2V0U3RhdGUgPSBmdW5jdGlvbiBlbnF1ZXVlU2V0U3RhdGUocHVibGljSW5zdGFuY2UsIHBhcnRpYWxTdGF0ZSkge1xuICAgIGlmICh0aGlzLnRyYW5zYWN0aW9uLmlzSW5UcmFuc2FjdGlvbigpKSB7XG4gICAgICBSZWFjdFVwZGF0ZVF1ZXVlLmVucXVldWVTZXRTdGF0ZShwdWJsaWNJbnN0YW5jZSwgcGFydGlhbFN0YXRlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgd2Fybk5vb3AocHVibGljSW5zdGFuY2UsICdzZXRTdGF0ZScpO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gUmVhY3RTZXJ2ZXJVcGRhdGVRdWV1ZTtcbn0oKTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdFNlcnZlclVwZGF0ZVF1ZXVlO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QtZG9tL2xpYi9SZWFjdFNlcnZlclVwZGF0ZVF1ZXVlLmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSAnMTUuNi4xJztcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3JlYWN0LWRvbS9saWIvUmVhY3RWZXJzaW9uLmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIE5TID0ge1xuICB4bGluazogJ2h0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsnLFxuICB4bWw6ICdodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UnXG59O1xuXG4vLyBXZSB1c2UgYXR0cmlidXRlcyBmb3IgZXZlcnl0aGluZyBTVkcgc28gbGV0J3MgYXZvaWQgc29tZSBkdXBsaWNhdGlvbiBhbmQgcnVuXG4vLyBjb2RlIGluc3RlYWQuXG4vLyBUaGUgZm9sbG93aW5nIGFyZSBhbGwgc3BlY2lmaWVkIGluIHRoZSBIVE1MIGNvbmZpZyBhbHJlYWR5IHNvIHdlIGV4Y2x1ZGUgaGVyZS5cbi8vIC0gY2xhc3MgKGFzIGNsYXNzTmFtZSlcbi8vIC0gY29sb3Jcbi8vIC0gaGVpZ2h0XG4vLyAtIGlkXG4vLyAtIGxhbmdcbi8vIC0gbWF4XG4vLyAtIG1lZGlhXG4vLyAtIG1ldGhvZFxuLy8gLSBtaW5cbi8vIC0gbmFtZVxuLy8gLSBzdHlsZVxuLy8gLSB0YXJnZXRcbi8vIC0gdHlwZVxuLy8gLSB3aWR0aFxudmFyIEFUVFJTID0ge1xuICBhY2NlbnRIZWlnaHQ6ICdhY2NlbnQtaGVpZ2h0JyxcbiAgYWNjdW11bGF0ZTogMCxcbiAgYWRkaXRpdmU6IDAsXG4gIGFsaWdubWVudEJhc2VsaW5lOiAnYWxpZ25tZW50LWJhc2VsaW5lJyxcbiAgYWxsb3dSZW9yZGVyOiAnYWxsb3dSZW9yZGVyJyxcbiAgYWxwaGFiZXRpYzogMCxcbiAgYW1wbGl0dWRlOiAwLFxuICBhcmFiaWNGb3JtOiAnYXJhYmljLWZvcm0nLFxuICBhc2NlbnQ6IDAsXG4gIGF0dHJpYnV0ZU5hbWU6ICdhdHRyaWJ1dGVOYW1lJyxcbiAgYXR0cmlidXRlVHlwZTogJ2F0dHJpYnV0ZVR5cGUnLFxuICBhdXRvUmV2ZXJzZTogJ2F1dG9SZXZlcnNlJyxcbiAgYXppbXV0aDogMCxcbiAgYmFzZUZyZXF1ZW5jeTogJ2Jhc2VGcmVxdWVuY3knLFxuICBiYXNlUHJvZmlsZTogJ2Jhc2VQcm9maWxlJyxcbiAgYmFzZWxpbmVTaGlmdDogJ2Jhc2VsaW5lLXNoaWZ0JyxcbiAgYmJveDogMCxcbiAgYmVnaW46IDAsXG4gIGJpYXM6IDAsXG4gIGJ5OiAwLFxuICBjYWxjTW9kZTogJ2NhbGNNb2RlJyxcbiAgY2FwSGVpZ2h0OiAnY2FwLWhlaWdodCcsXG4gIGNsaXA6IDAsXG4gIGNsaXBQYXRoOiAnY2xpcC1wYXRoJyxcbiAgY2xpcFJ1bGU6ICdjbGlwLXJ1bGUnLFxuICBjbGlwUGF0aFVuaXRzOiAnY2xpcFBhdGhVbml0cycsXG4gIGNvbG9ySW50ZXJwb2xhdGlvbjogJ2NvbG9yLWludGVycG9sYXRpb24nLFxuICBjb2xvckludGVycG9sYXRpb25GaWx0ZXJzOiAnY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzJyxcbiAgY29sb3JQcm9maWxlOiAnY29sb3ItcHJvZmlsZScsXG4gIGNvbG9yUmVuZGVyaW5nOiAnY29sb3ItcmVuZGVyaW5nJyxcbiAgY29udGVudFNjcmlwdFR5cGU6ICdjb250ZW50U2NyaXB0VHlwZScsXG4gIGNvbnRlbnRTdHlsZVR5cGU6ICdjb250ZW50U3R5bGVUeXBlJyxcbiAgY3Vyc29yOiAwLFxuICBjeDogMCxcbiAgY3k6IDAsXG4gIGQ6IDAsXG4gIGRlY2VsZXJhdGU6IDAsXG4gIGRlc2NlbnQ6IDAsXG4gIGRpZmZ1c2VDb25zdGFudDogJ2RpZmZ1c2VDb25zdGFudCcsXG4gIGRpcmVjdGlvbjogMCxcbiAgZGlzcGxheTogMCxcbiAgZGl2aXNvcjogMCxcbiAgZG9taW5hbnRCYXNlbGluZTogJ2RvbWluYW50LWJhc2VsaW5lJyxcbiAgZHVyOiAwLFxuICBkeDogMCxcbiAgZHk6IDAsXG4gIGVkZ2VNb2RlOiAnZWRnZU1vZGUnLFxuICBlbGV2YXRpb246IDAsXG4gIGVuYWJsZUJhY2tncm91bmQ6ICdlbmFibGUtYmFja2dyb3VuZCcsXG4gIGVuZDogMCxcbiAgZXhwb25lbnQ6IDAsXG4gIGV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6ICdleHRlcm5hbFJlc291cmNlc1JlcXVpcmVkJyxcbiAgZmlsbDogMCxcbiAgZmlsbE9wYWNpdHk6ICdmaWxsLW9wYWNpdHknLFxuICBmaWxsUnVsZTogJ2ZpbGwtcnVsZScsXG4gIGZpbHRlcjogMCxcbiAgZmlsdGVyUmVzOiAnZmlsdGVyUmVzJyxcbiAgZmlsdGVyVW5pdHM6ICdmaWx0ZXJVbml0cycsXG4gIGZsb29kQ29sb3I6ICdmbG9vZC1jb2xvcicsXG4gIGZsb29kT3BhY2l0eTogJ2Zsb29kLW9wYWNpdHknLFxuICBmb2N1c2FibGU6IDAsXG4gIGZvbnRGYW1pbHk6ICdmb250LWZhbWlseScsXG4gIGZvbnRTaXplOiAnZm9udC1zaXplJyxcbiAgZm9udFNpemVBZGp1c3Q6ICdmb250LXNpemUtYWRqdXN0JyxcbiAgZm9udFN0cmV0Y2g6ICdmb250LXN0cmV0Y2gnLFxuICBmb250U3R5bGU6ICdmb250LXN0eWxlJyxcbiAgZm9udFZhcmlhbnQ6ICdmb250LXZhcmlhbnQnLFxuICBmb250V2VpZ2h0OiAnZm9udC13ZWlnaHQnLFxuICBmb3JtYXQ6IDAsXG4gIGZyb206IDAsXG4gIGZ4OiAwLFxuICBmeTogMCxcbiAgZzE6IDAsXG4gIGcyOiAwLFxuICBnbHlwaE5hbWU6ICdnbHlwaC1uYW1lJyxcbiAgZ2x5cGhPcmllbnRhdGlvbkhvcml6b250YWw6ICdnbHlwaC1vcmllbnRhdGlvbi1ob3Jpem9udGFsJyxcbiAgZ2x5cGhPcmllbnRhdGlvblZlcnRpY2FsOiAnZ2x5cGgtb3JpZW50YXRpb24tdmVydGljYWwnLFxuICBnbHlwaFJlZjogJ2dseXBoUmVmJyxcbiAgZ3JhZGllbnRUcmFuc2Zvcm06ICdncmFkaWVudFRyYW5zZm9ybScsXG4gIGdyYWRpZW50VW5pdHM6ICdncmFkaWVudFVuaXRzJyxcbiAgaGFuZ2luZzogMCxcbiAgaG9yaXpBZHZYOiAnaG9yaXotYWR2LXgnLFxuICBob3Jpek9yaWdpblg6ICdob3Jpei1vcmlnaW4teCcsXG4gIGlkZW9ncmFwaGljOiAwLFxuICBpbWFnZVJlbmRlcmluZzogJ2ltYWdlLXJlbmRlcmluZycsXG4gICdpbic6IDAsXG4gIGluMjogMCxcbiAgaW50ZXJjZXB0OiAwLFxuICBrOiAwLFxuICBrMTogMCxcbiAgazI6IDAsXG4gIGszOiAwLFxuICBrNDogMCxcbiAga2VybmVsTWF0cml4OiAna2VybmVsTWF0cml4JyxcbiAga2VybmVsVW5pdExlbmd0aDogJ2tlcm5lbFVuaXRMZW5ndGgnLFxuICBrZXJuaW5nOiAwLFxuICBrZXlQb2ludHM6ICdrZXlQb2ludHMnLFxuICBrZXlTcGxpbmVzOiAna2V5U3BsaW5lcycsXG4gIGtleVRpbWVzOiAna2V5VGltZXMnLFxuICBsZW5ndGhBZGp1c3Q6ICdsZW5ndGhBZGp1c3QnLFxuICBsZXR0ZXJTcGFjaW5nOiAnbGV0dGVyLXNwYWNpbmcnLFxuICBsaWdodGluZ0NvbG9yOiAnbGlnaHRpbmctY29sb3InLFxuICBsaW1pdGluZ0NvbmVBbmdsZTogJ2xpbWl0aW5nQ29uZUFuZ2xlJyxcbiAgbG9jYWw6IDAsXG4gIG1hcmtlckVuZDogJ21hcmtlci1lbmQnLFxuICBtYXJrZXJNaWQ6ICdtYXJrZXItbWlkJyxcbiAgbWFya2VyU3RhcnQ6ICdtYXJrZXItc3RhcnQnLFxuICBtYXJrZXJIZWlnaHQ6ICdtYXJrZXJIZWlnaHQnLFxuICBtYXJrZXJVbml0czogJ21hcmtlclVuaXRzJyxcbiAgbWFya2VyV2lkdGg6ICdtYXJrZXJXaWR0aCcsXG4gIG1hc2s6IDAsXG4gIG1hc2tDb250ZW50VW5pdHM6ICdtYXNrQ29udGVudFVuaXRzJyxcbiAgbWFza1VuaXRzOiAnbWFza1VuaXRzJyxcbiAgbWF0aGVtYXRpY2FsOiAwLFxuICBtb2RlOiAwLFxuICBudW1PY3RhdmVzOiAnbnVtT2N0YXZlcycsXG4gIG9mZnNldDogMCxcbiAgb3BhY2l0eTogMCxcbiAgb3BlcmF0b3I6IDAsXG4gIG9yZGVyOiAwLFxuICBvcmllbnQ6IDAsXG4gIG9yaWVudGF0aW9uOiAwLFxuICBvcmlnaW46IDAsXG4gIG92ZXJmbG93OiAwLFxuICBvdmVybGluZVBvc2l0aW9uOiAnb3ZlcmxpbmUtcG9zaXRpb24nLFxuICBvdmVybGluZVRoaWNrbmVzczogJ292ZXJsaW5lLXRoaWNrbmVzcycsXG4gIHBhaW50T3JkZXI6ICdwYWludC1vcmRlcicsXG4gIHBhbm9zZTE6ICdwYW5vc2UtMScsXG4gIHBhdGhMZW5ndGg6ICdwYXRoTGVuZ3RoJyxcbiAgcGF0dGVybkNvbnRlbnRVbml0czogJ3BhdHRlcm5Db250ZW50VW5pdHMnLFxuICBwYXR0ZXJuVHJhbnNmb3JtOiAncGF0dGVyblRyYW5zZm9ybScsXG4gIHBhdHRlcm5Vbml0czogJ3BhdHRlcm5Vbml0cycsXG4gIHBvaW50ZXJFdmVudHM6ICdwb2ludGVyLWV2ZW50cycsXG4gIHBvaW50czogMCxcbiAgcG9pbnRzQXRYOiAncG9pbnRzQXRYJyxcbiAgcG9pbnRzQXRZOiAncG9pbnRzQXRZJyxcbiAgcG9pbnRzQXRaOiAncG9pbnRzQXRaJyxcbiAgcHJlc2VydmVBbHBoYTogJ3ByZXNlcnZlQWxwaGEnLFxuICBwcmVzZXJ2ZUFzcGVjdFJhdGlvOiAncHJlc2VydmVBc3BlY3RSYXRpbycsXG4gIHByaW1pdGl2ZVVuaXRzOiAncHJpbWl0aXZlVW5pdHMnLFxuICByOiAwLFxuICByYWRpdXM6IDAsXG4gIHJlZlg6ICdyZWZYJyxcbiAgcmVmWTogJ3JlZlknLFxuICByZW5kZXJpbmdJbnRlbnQ6ICdyZW5kZXJpbmctaW50ZW50JyxcbiAgcmVwZWF0Q291bnQ6ICdyZXBlYXRDb3VudCcsXG4gIHJlcGVhdER1cjogJ3JlcGVhdER1cicsXG4gIHJlcXVpcmVkRXh0ZW5zaW9uczogJ3JlcXVpcmVkRXh0ZW5zaW9ucycsXG4gIHJlcXVpcmVkRmVhdHVyZXM6ICdyZXF1aXJlZEZlYXR1cmVzJyxcbiAgcmVzdGFydDogMCxcbiAgcmVzdWx0OiAwLFxuICByb3RhdGU6IDAsXG4gIHJ4OiAwLFxuICByeTogMCxcbiAgc2NhbGU6IDAsXG4gIHNlZWQ6IDAsXG4gIHNoYXBlUmVuZGVyaW5nOiAnc2hhcGUtcmVuZGVyaW5nJyxcbiAgc2xvcGU6IDAsXG4gIHNwYWNpbmc6IDAsXG4gIHNwZWN1bGFyQ29uc3RhbnQ6ICdzcGVjdWxhckNvbnN0YW50JyxcbiAgc3BlY3VsYXJFeHBvbmVudDogJ3NwZWN1bGFyRXhwb25lbnQnLFxuICBzcGVlZDogMCxcbiAgc3ByZWFkTWV0aG9kOiAnc3ByZWFkTWV0aG9kJyxcbiAgc3RhcnRPZmZzZXQ6ICdzdGFydE9mZnNldCcsXG4gIHN0ZERldmlhdGlvbjogJ3N0ZERldmlhdGlvbicsXG4gIHN0ZW1oOiAwLFxuICBzdGVtdjogMCxcbiAgc3RpdGNoVGlsZXM6ICdzdGl0Y2hUaWxlcycsXG4gIHN0b3BDb2xvcjogJ3N0b3AtY29sb3InLFxuICBzdG9wT3BhY2l0eTogJ3N0b3Atb3BhY2l0eScsXG4gIHN0cmlrZXRocm91Z2hQb3NpdGlvbjogJ3N0cmlrZXRocm91Z2gtcG9zaXRpb24nLFxuICBzdHJpa2V0aHJvdWdoVGhpY2tuZXNzOiAnc3RyaWtldGhyb3VnaC10aGlja25lc3MnLFxuICBzdHJpbmc6IDAsXG4gIHN0cm9rZTogMCxcbiAgc3Ryb2tlRGFzaGFycmF5OiAnc3Ryb2tlLWRhc2hhcnJheScsXG4gIHN0cm9rZURhc2hvZmZzZXQ6ICdzdHJva2UtZGFzaG9mZnNldCcsXG4gIHN0cm9rZUxpbmVjYXA6ICdzdHJva2UtbGluZWNhcCcsXG4gIHN0cm9rZUxpbmVqb2luOiAnc3Ryb2tlLWxpbmVqb2luJyxcbiAgc3Ryb2tlTWl0ZXJsaW1pdDogJ3N0cm9rZS1taXRlcmxpbWl0JyxcbiAgc3Ryb2tlT3BhY2l0eTogJ3N0cm9rZS1vcGFjaXR5JyxcbiAgc3Ryb2tlV2lkdGg6ICdzdHJva2Utd2lkdGgnLFxuICBzdXJmYWNlU2NhbGU6ICdzdXJmYWNlU2NhbGUnLFxuICBzeXN0ZW1MYW5ndWFnZTogJ3N5c3RlbUxhbmd1YWdlJyxcbiAgdGFibGVWYWx1ZXM6ICd0YWJsZVZhbHVlcycsXG4gIHRhcmdldFg6ICd0YXJnZXRYJyxcbiAgdGFyZ2V0WTogJ3RhcmdldFknLFxuICB0ZXh0QW5jaG9yOiAndGV4dC1hbmNob3InLFxuICB0ZXh0RGVjb3JhdGlvbjogJ3RleHQtZGVjb3JhdGlvbicsXG4gIHRleHRSZW5kZXJpbmc6ICd0ZXh0LXJlbmRlcmluZycsXG4gIHRleHRMZW5ndGg6ICd0ZXh0TGVuZ3RoJyxcbiAgdG86IDAsXG4gIHRyYW5zZm9ybTogMCxcbiAgdTE6IDAsXG4gIHUyOiAwLFxuICB1bmRlcmxpbmVQb3NpdGlvbjogJ3VuZGVybGluZS1wb3NpdGlvbicsXG4gIHVuZGVybGluZVRoaWNrbmVzczogJ3VuZGVybGluZS10aGlja25lc3MnLFxuICB1bmljb2RlOiAwLFxuICB1bmljb2RlQmlkaTogJ3VuaWNvZGUtYmlkaScsXG4gIHVuaWNvZGVSYW5nZTogJ3VuaWNvZGUtcmFuZ2UnLFxuICB1bml0c1BlckVtOiAndW5pdHMtcGVyLWVtJyxcbiAgdkFscGhhYmV0aWM6ICd2LWFscGhhYmV0aWMnLFxuICB2SGFuZ2luZzogJ3YtaGFuZ2luZycsXG4gIHZJZGVvZ3JhcGhpYzogJ3YtaWRlb2dyYXBoaWMnLFxuICB2TWF0aGVtYXRpY2FsOiAndi1tYXRoZW1hdGljYWwnLFxuICB2YWx1ZXM6IDAsXG4gIHZlY3RvckVmZmVjdDogJ3ZlY3Rvci1lZmZlY3QnLFxuICB2ZXJzaW9uOiAwLFxuICB2ZXJ0QWR2WTogJ3ZlcnQtYWR2LXknLFxuICB2ZXJ0T3JpZ2luWDogJ3ZlcnQtb3JpZ2luLXgnLFxuICB2ZXJ0T3JpZ2luWTogJ3ZlcnQtb3JpZ2luLXknLFxuICB2aWV3Qm94OiAndmlld0JveCcsXG4gIHZpZXdUYXJnZXQ6ICd2aWV3VGFyZ2V0JyxcbiAgdmlzaWJpbGl0eTogMCxcbiAgd2lkdGhzOiAwLFxuICB3b3JkU3BhY2luZzogJ3dvcmQtc3BhY2luZycsXG4gIHdyaXRpbmdNb2RlOiAnd3JpdGluZy1tb2RlJyxcbiAgeDogMCxcbiAgeEhlaWdodDogJ3gtaGVpZ2h0JyxcbiAgeDE6IDAsXG4gIHgyOiAwLFxuICB4Q2hhbm5lbFNlbGVjdG9yOiAneENoYW5uZWxTZWxlY3RvcicsXG4gIHhsaW5rQWN0dWF0ZTogJ3hsaW5rOmFjdHVhdGUnLFxuICB4bGlua0FyY3JvbGU6ICd4bGluazphcmNyb2xlJyxcbiAgeGxpbmtIcmVmOiAneGxpbms6aHJlZicsXG4gIHhsaW5rUm9sZTogJ3hsaW5rOnJvbGUnLFxuICB4bGlua1Nob3c6ICd4bGluazpzaG93JyxcbiAgeGxpbmtUaXRsZTogJ3hsaW5rOnRpdGxlJyxcbiAgeGxpbmtUeXBlOiAneGxpbms6dHlwZScsXG4gIHhtbEJhc2U6ICd4bWw6YmFzZScsXG4gIHhtbG5zOiAwLFxuICB4bWxuc1hsaW5rOiAneG1sbnM6eGxpbmsnLFxuICB4bWxMYW5nOiAneG1sOmxhbmcnLFxuICB4bWxTcGFjZTogJ3htbDpzcGFjZScsXG4gIHk6IDAsXG4gIHkxOiAwLFxuICB5MjogMCxcbiAgeUNoYW5uZWxTZWxlY3RvcjogJ3lDaGFubmVsU2VsZWN0b3InLFxuICB6OiAwLFxuICB6b29tQW5kUGFuOiAnem9vbUFuZFBhbidcbn07XG5cbnZhciBTVkdET01Qcm9wZXJ0eUNvbmZpZyA9IHtcbiAgUHJvcGVydGllczoge30sXG4gIERPTUF0dHJpYnV0ZU5hbWVzcGFjZXM6IHtcbiAgICB4bGlua0FjdHVhdGU6IE5TLnhsaW5rLFxuICAgIHhsaW5rQXJjcm9sZTogTlMueGxpbmssXG4gICAgeGxpbmtIcmVmOiBOUy54bGluayxcbiAgICB4bGlua1JvbGU6IE5TLnhsaW5rLFxuICAgIHhsaW5rU2hvdzogTlMueGxpbmssXG4gICAgeGxpbmtUaXRsZTogTlMueGxpbmssXG4gICAgeGxpbmtUeXBlOiBOUy54bGluayxcbiAgICB4bWxCYXNlOiBOUy54bWwsXG4gICAgeG1sTGFuZzogTlMueG1sLFxuICAgIHhtbFNwYWNlOiBOUy54bWxcbiAgfSxcbiAgRE9NQXR0cmlidXRlTmFtZXM6IHt9XG59O1xuXG5PYmplY3Qua2V5cyhBVFRSUykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gIFNWR0RPTVByb3BlcnR5Q29uZmlnLlByb3BlcnRpZXNba2V5XSA9IDA7XG4gIGlmIChBVFRSU1trZXldKSB7XG4gICAgU1ZHRE9NUHJvcGVydHlDb25maWcuRE9NQXR0cmlidXRlTmFtZXNba2V5XSA9IEFUVFJTW2tleV07XG4gIH1cbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFNWR0RPTVByb3BlcnR5Q29uZmlnO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QtZG9tL2xpYi9TVkdET01Qcm9wZXJ0eUNvbmZpZy5qcyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBFdmVudFByb3BhZ2F0b3JzID0gcmVxdWlyZSgnLi9FdmVudFByb3BhZ2F0b3JzJyk7XG52YXIgRXhlY3V0aW9uRW52aXJvbm1lbnQgPSByZXF1aXJlKCdmYmpzL2xpYi9FeGVjdXRpb25FbnZpcm9ubWVudCcpO1xudmFyIFJlYWN0RE9NQ29tcG9uZW50VHJlZSA9IHJlcXVpcmUoJy4vUmVhY3RET01Db21wb25lbnRUcmVlJyk7XG52YXIgUmVhY3RJbnB1dFNlbGVjdGlvbiA9IHJlcXVpcmUoJy4vUmVhY3RJbnB1dFNlbGVjdGlvbicpO1xudmFyIFN5bnRoZXRpY0V2ZW50ID0gcmVxdWlyZSgnLi9TeW50aGV0aWNFdmVudCcpO1xuXG52YXIgZ2V0QWN0aXZlRWxlbWVudCA9IHJlcXVpcmUoJ2ZianMvbGliL2dldEFjdGl2ZUVsZW1lbnQnKTtcbnZhciBpc1RleHRJbnB1dEVsZW1lbnQgPSByZXF1aXJlKCcuL2lzVGV4dElucHV0RWxlbWVudCcpO1xudmFyIHNoYWxsb3dFcXVhbCA9IHJlcXVpcmUoJ2ZianMvbGliL3NoYWxsb3dFcXVhbCcpO1xuXG52YXIgc2tpcFNlbGVjdGlvbkNoYW5nZUV2ZW50ID0gRXhlY3V0aW9uRW52aXJvbm1lbnQuY2FuVXNlRE9NICYmICdkb2N1bWVudE1vZGUnIGluIGRvY3VtZW50ICYmIGRvY3VtZW50LmRvY3VtZW50TW9kZSA8PSAxMTtcblxudmFyIGV2ZW50VHlwZXMgPSB7XG4gIHNlbGVjdDoge1xuICAgIHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOiB7XG4gICAgICBidWJibGVkOiAnb25TZWxlY3QnLFxuICAgICAgY2FwdHVyZWQ6ICdvblNlbGVjdENhcHR1cmUnXG4gICAgfSxcbiAgICBkZXBlbmRlbmNpZXM6IFsndG9wQmx1cicsICd0b3BDb250ZXh0TWVudScsICd0b3BGb2N1cycsICd0b3BLZXlEb3duJywgJ3RvcEtleVVwJywgJ3RvcE1vdXNlRG93bicsICd0b3BNb3VzZVVwJywgJ3RvcFNlbGVjdGlvbkNoYW5nZSddXG4gIH1cbn07XG5cbnZhciBhY3RpdmVFbGVtZW50ID0gbnVsbDtcbnZhciBhY3RpdmVFbGVtZW50SW5zdCA9IG51bGw7XG52YXIgbGFzdFNlbGVjdGlvbiA9IG51bGw7XG52YXIgbW91c2VEb3duID0gZmFsc2U7XG5cbi8vIFRyYWNrIHdoZXRoZXIgYSBsaXN0ZW5lciBleGlzdHMgZm9yIHRoaXMgcGx1Z2luLiBJZiBub25lIGV4aXN0LCB3ZSBkb1xuLy8gbm90IGV4dHJhY3QgZXZlbnRzLiBTZWUgIzM2MzkuXG52YXIgaGFzTGlzdGVuZXIgPSBmYWxzZTtcblxuLyoqXG4gKiBHZXQgYW4gb2JqZWN0IHdoaWNoIGlzIGEgdW5pcXVlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjdXJyZW50IHNlbGVjdGlvbi5cbiAqXG4gKiBUaGUgcmV0dXJuIHZhbHVlIHdpbGwgbm90IGJlIGNvbnNpc3RlbnQgYWNyb3NzIG5vZGVzIG9yIGJyb3dzZXJzLCBidXRcbiAqIHR3byBpZGVudGljYWwgc2VsZWN0aW9ucyBvbiB0aGUgc2FtZSBub2RlIHdpbGwgcmV0dXJuIGlkZW50aWNhbCBvYmplY3RzLlxuICpcbiAqIEBwYXJhbSB7RE9NRWxlbWVudH0gbm9kZVxuICogQHJldHVybiB7b2JqZWN0fVxuICovXG5mdW5jdGlvbiBnZXRTZWxlY3Rpb24obm9kZSkge1xuICBpZiAoJ3NlbGVjdGlvblN0YXJ0JyBpbiBub2RlICYmIFJlYWN0SW5wdXRTZWxlY3Rpb24uaGFzU2VsZWN0aW9uQ2FwYWJpbGl0aWVzKG5vZGUpKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXJ0OiBub2RlLnNlbGVjdGlvblN0YXJ0LFxuICAgICAgZW5kOiBub2RlLnNlbGVjdGlvbkVuZFxuICAgIH07XG4gIH0gZWxzZSBpZiAod2luZG93LmdldFNlbGVjdGlvbikge1xuICAgIHZhciBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGFuY2hvck5vZGU6IHNlbGVjdGlvbi5hbmNob3JOb2RlLFxuICAgICAgYW5jaG9yT2Zmc2V0OiBzZWxlY3Rpb24uYW5jaG9yT2Zmc2V0LFxuICAgICAgZm9jdXNOb2RlOiBzZWxlY3Rpb24uZm9jdXNOb2RlLFxuICAgICAgZm9jdXNPZmZzZXQ6IHNlbGVjdGlvbi5mb2N1c09mZnNldFxuICAgIH07XG4gIH0gZWxzZSBpZiAoZG9jdW1lbnQuc2VsZWN0aW9uKSB7XG4gICAgdmFyIHJhbmdlID0gZG9jdW1lbnQuc2VsZWN0aW9uLmNyZWF0ZVJhbmdlKCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBhcmVudEVsZW1lbnQ6IHJhbmdlLnBhcmVudEVsZW1lbnQoKSxcbiAgICAgIHRleHQ6IHJhbmdlLnRleHQsXG4gICAgICB0b3A6IHJhbmdlLmJvdW5kaW5nVG9wLFxuICAgICAgbGVmdDogcmFuZ2UuYm91bmRpbmdMZWZ0XG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIFBvbGwgc2VsZWN0aW9uIHRvIHNlZSB3aGV0aGVyIGl0J3MgY2hhbmdlZC5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gbmF0aXZlRXZlbnRcbiAqIEByZXR1cm4gez9TeW50aGV0aWNFdmVudH1cbiAqL1xuZnVuY3Rpb24gY29uc3RydWN0U2VsZWN0RXZlbnQobmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KSB7XG4gIC8vIEVuc3VyZSB3ZSBoYXZlIHRoZSByaWdodCBlbGVtZW50LCBhbmQgdGhhdCB0aGUgdXNlciBpcyBub3QgZHJhZ2dpbmcgYVxuICAvLyBzZWxlY3Rpb24gKHRoaXMgbWF0Y2hlcyBuYXRpdmUgYHNlbGVjdGAgZXZlbnQgYmVoYXZpb3IpLiBJbiBIVE1MNSwgc2VsZWN0XG4gIC8vIGZpcmVzIG9ubHkgb24gaW5wdXQgYW5kIHRleHRhcmVhIHRodXMgaWYgdGhlcmUncyBubyBmb2N1c2VkIGVsZW1lbnQgd2VcbiAgLy8gd29uJ3QgZGlzcGF0Y2guXG4gIGlmIChtb3VzZURvd24gfHwgYWN0aXZlRWxlbWVudCA9PSBudWxsIHx8IGFjdGl2ZUVsZW1lbnQgIT09IGdldEFjdGl2ZUVsZW1lbnQoKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLy8gT25seSBmaXJlIHdoZW4gc2VsZWN0aW9uIGhhcyBhY3R1YWxseSBjaGFuZ2VkLlxuICB2YXIgY3VycmVudFNlbGVjdGlvbiA9IGdldFNlbGVjdGlvbihhY3RpdmVFbGVtZW50KTtcbiAgaWYgKCFsYXN0U2VsZWN0aW9uIHx8ICFzaGFsbG93RXF1YWwobGFzdFNlbGVjdGlvbiwgY3VycmVudFNlbGVjdGlvbikpIHtcbiAgICBsYXN0U2VsZWN0aW9uID0gY3VycmVudFNlbGVjdGlvbjtcblxuICAgIHZhciBzeW50aGV0aWNFdmVudCA9IFN5bnRoZXRpY0V2ZW50LmdldFBvb2xlZChldmVudFR5cGVzLnNlbGVjdCwgYWN0aXZlRWxlbWVudEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCk7XG5cbiAgICBzeW50aGV0aWNFdmVudC50eXBlID0gJ3NlbGVjdCc7XG4gICAgc3ludGhldGljRXZlbnQudGFyZ2V0ID0gYWN0aXZlRWxlbWVudDtcblxuICAgIEV2ZW50UHJvcGFnYXRvcnMuYWNjdW11bGF0ZVR3b1BoYXNlRGlzcGF0Y2hlcyhzeW50aGV0aWNFdmVudCk7XG5cbiAgICByZXR1cm4gc3ludGhldGljRXZlbnQ7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiBUaGlzIHBsdWdpbiBjcmVhdGVzIGFuIGBvblNlbGVjdGAgZXZlbnQgdGhhdCBub3JtYWxpemVzIHNlbGVjdCBldmVudHNcbiAqIGFjcm9zcyBmb3JtIGVsZW1lbnRzLlxuICpcbiAqIFN1cHBvcnRlZCBlbGVtZW50cyBhcmU6XG4gKiAtIGlucHV0IChzZWUgYGlzVGV4dElucHV0RWxlbWVudGApXG4gKiAtIHRleHRhcmVhXG4gKiAtIGNvbnRlbnRFZGl0YWJsZVxuICpcbiAqIFRoaXMgZGlmZmVycyBmcm9tIG5hdGl2ZSBicm93c2VyIGltcGxlbWVudGF0aW9ucyBpbiB0aGUgZm9sbG93aW5nIHdheXM6XG4gKiAtIEZpcmVzIG9uIGNvbnRlbnRFZGl0YWJsZSBmaWVsZHMgYXMgd2VsbCBhcyBpbnB1dHMuXG4gKiAtIEZpcmVzIGZvciBjb2xsYXBzZWQgc2VsZWN0aW9uLlxuICogLSBGaXJlcyBhZnRlciB1c2VyIGlucHV0LlxuICovXG52YXIgU2VsZWN0RXZlbnRQbHVnaW4gPSB7XG4gIGV2ZW50VHlwZXM6IGV2ZW50VHlwZXMsXG5cbiAgZXh0cmFjdEV2ZW50czogZnVuY3Rpb24gKHRvcExldmVsVHlwZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KSB7XG4gICAgaWYgKCFoYXNMaXN0ZW5lcikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgdmFyIHRhcmdldE5vZGUgPSB0YXJnZXRJbnN0ID8gUmVhY3RET01Db21wb25lbnRUcmVlLmdldE5vZGVGcm9tSW5zdGFuY2UodGFyZ2V0SW5zdCkgOiB3aW5kb3c7XG5cbiAgICBzd2l0Y2ggKHRvcExldmVsVHlwZSkge1xuICAgICAgLy8gVHJhY2sgdGhlIGlucHV0IG5vZGUgdGhhdCBoYXMgZm9jdXMuXG4gICAgICBjYXNlICd0b3BGb2N1cyc6XG4gICAgICAgIGlmIChpc1RleHRJbnB1dEVsZW1lbnQodGFyZ2V0Tm9kZSkgfHwgdGFyZ2V0Tm9kZS5jb250ZW50RWRpdGFibGUgPT09ICd0cnVlJykge1xuICAgICAgICAgIGFjdGl2ZUVsZW1lbnQgPSB0YXJnZXROb2RlO1xuICAgICAgICAgIGFjdGl2ZUVsZW1lbnRJbnN0ID0gdGFyZ2V0SW5zdDtcbiAgICAgICAgICBsYXN0U2VsZWN0aW9uID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3RvcEJsdXInOlxuICAgICAgICBhY3RpdmVFbGVtZW50ID0gbnVsbDtcbiAgICAgICAgYWN0aXZlRWxlbWVudEluc3QgPSBudWxsO1xuICAgICAgICBsYXN0U2VsZWN0aW9uID0gbnVsbDtcbiAgICAgICAgYnJlYWs7XG4gICAgICAvLyBEb24ndCBmaXJlIHRoZSBldmVudCB3aGlsZSB0aGUgdXNlciBpcyBkcmFnZ2luZy4gVGhpcyBtYXRjaGVzIHRoZVxuICAgICAgLy8gc2VtYW50aWNzIG9mIHRoZSBuYXRpdmUgc2VsZWN0IGV2ZW50LlxuICAgICAgY2FzZSAndG9wTW91c2VEb3duJzpcbiAgICAgICAgbW91c2VEb3duID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICd0b3BDb250ZXh0TWVudSc6XG4gICAgICBjYXNlICd0b3BNb3VzZVVwJzpcbiAgICAgICAgbW91c2VEb3duID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBjb25zdHJ1Y3RTZWxlY3RFdmVudChuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpO1xuICAgICAgLy8gQ2hyb21lIGFuZCBJRSBmaXJlIG5vbi1zdGFuZGFyZCBldmVudCB3aGVuIHNlbGVjdGlvbiBpcyBjaGFuZ2VkIChhbmRcbiAgICAgIC8vIHNvbWV0aW1lcyB3aGVuIGl0IGhhc24ndCkuIElFJ3MgZXZlbnQgZmlyZXMgb3V0IG9mIG9yZGVyIHdpdGggcmVzcGVjdFxuICAgICAgLy8gdG8ga2V5IGFuZCBpbnB1dCBldmVudHMgb24gZGVsZXRpb24sIHNvIHdlIGRpc2NhcmQgaXQuXG4gICAgICAvL1xuICAgICAgLy8gRmlyZWZveCBkb2Vzbid0IHN1cHBvcnQgc2VsZWN0aW9uY2hhbmdlLCBzbyBjaGVjayBzZWxlY3Rpb24gc3RhdHVzXG4gICAgICAvLyBhZnRlciBlYWNoIGtleSBlbnRyeS4gVGhlIHNlbGVjdGlvbiBjaGFuZ2VzIGFmdGVyIGtleWRvd24gYW5kIGJlZm9yZVxuICAgICAgLy8ga2V5dXAsIGJ1dCB3ZSBjaGVjayBvbiBrZXlkb3duIGFzIHdlbGwgaW4gdGhlIGNhc2Ugb2YgaG9sZGluZyBkb3duIGFcbiAgICAgIC8vIGtleSwgd2hlbiBtdWx0aXBsZSBrZXlkb3duIGV2ZW50cyBhcmUgZmlyZWQgYnV0IG9ubHkgb25lIGtleXVwIGlzLlxuICAgICAgLy8gVGhpcyBpcyBhbHNvIG91ciBhcHByb2FjaCBmb3IgSUUgaGFuZGxpbmcsIGZvciB0aGUgcmVhc29uIGFib3ZlLlxuICAgICAgY2FzZSAndG9wU2VsZWN0aW9uQ2hhbmdlJzpcbiAgICAgICAgaWYgKHNraXBTZWxlY3Rpb25DaGFuZ2VFdmVudCkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAvLyBmYWxscyB0aHJvdWdoXG4gICAgICBjYXNlICd0b3BLZXlEb3duJzpcbiAgICAgIGNhc2UgJ3RvcEtleVVwJzpcbiAgICAgICAgcmV0dXJuIGNvbnN0cnVjdFNlbGVjdEV2ZW50KG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH0sXG5cbiAgZGlkUHV0TGlzdGVuZXI6IGZ1bmN0aW9uIChpbnN0LCByZWdpc3RyYXRpb25OYW1lLCBsaXN0ZW5lcikge1xuICAgIGlmIChyZWdpc3RyYXRpb25OYW1lID09PSAnb25TZWxlY3QnKSB7XG4gICAgICBoYXNMaXN0ZW5lciA9IHRydWU7XG4gICAgfVxuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFNlbGVjdEV2ZW50UGx1Z2luO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QtZG9tL2xpYi9TZWxlY3RFdmVudFBsdWdpbi5qcyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIFxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIF9wcm9kSW52YXJpYW50ID0gcmVxdWlyZSgnLi9yZWFjdFByb2RJbnZhcmlhbnQnKTtcblxudmFyIEV2ZW50TGlzdGVuZXIgPSByZXF1aXJlKCdmYmpzL2xpYi9FdmVudExpc3RlbmVyJyk7XG52YXIgRXZlbnRQcm9wYWdhdG9ycyA9IHJlcXVpcmUoJy4vRXZlbnRQcm9wYWdhdG9ycycpO1xudmFyIFJlYWN0RE9NQ29tcG9uZW50VHJlZSA9IHJlcXVpcmUoJy4vUmVhY3RET01Db21wb25lbnRUcmVlJyk7XG52YXIgU3ludGhldGljQW5pbWF0aW9uRXZlbnQgPSByZXF1aXJlKCcuL1N5bnRoZXRpY0FuaW1hdGlvbkV2ZW50Jyk7XG52YXIgU3ludGhldGljQ2xpcGJvYXJkRXZlbnQgPSByZXF1aXJlKCcuL1N5bnRoZXRpY0NsaXBib2FyZEV2ZW50Jyk7XG52YXIgU3ludGhldGljRXZlbnQgPSByZXF1aXJlKCcuL1N5bnRoZXRpY0V2ZW50Jyk7XG52YXIgU3ludGhldGljRm9jdXNFdmVudCA9IHJlcXVpcmUoJy4vU3ludGhldGljRm9jdXNFdmVudCcpO1xudmFyIFN5bnRoZXRpY0tleWJvYXJkRXZlbnQgPSByZXF1aXJlKCcuL1N5bnRoZXRpY0tleWJvYXJkRXZlbnQnKTtcbnZhciBTeW50aGV0aWNNb3VzZUV2ZW50ID0gcmVxdWlyZSgnLi9TeW50aGV0aWNNb3VzZUV2ZW50Jyk7XG52YXIgU3ludGhldGljRHJhZ0V2ZW50ID0gcmVxdWlyZSgnLi9TeW50aGV0aWNEcmFnRXZlbnQnKTtcbnZhciBTeW50aGV0aWNUb3VjaEV2ZW50ID0gcmVxdWlyZSgnLi9TeW50aGV0aWNUb3VjaEV2ZW50Jyk7XG52YXIgU3ludGhldGljVHJhbnNpdGlvbkV2ZW50ID0gcmVxdWlyZSgnLi9TeW50aGV0aWNUcmFuc2l0aW9uRXZlbnQnKTtcbnZhciBTeW50aGV0aWNVSUV2ZW50ID0gcmVxdWlyZSgnLi9TeW50aGV0aWNVSUV2ZW50Jyk7XG52YXIgU3ludGhldGljV2hlZWxFdmVudCA9IHJlcXVpcmUoJy4vU3ludGhldGljV2hlZWxFdmVudCcpO1xuXG52YXIgZW1wdHlGdW5jdGlvbiA9IHJlcXVpcmUoJ2ZianMvbGliL2VtcHR5RnVuY3Rpb24nKTtcbnZhciBnZXRFdmVudENoYXJDb2RlID0gcmVxdWlyZSgnLi9nZXRFdmVudENoYXJDb2RlJyk7XG52YXIgaW52YXJpYW50ID0gcmVxdWlyZSgnZmJqcy9saWIvaW52YXJpYW50Jyk7XG5cbi8qKlxuICogVHVybnNcbiAqIFsnYWJvcnQnLCAuLi5dXG4gKiBpbnRvXG4gKiBldmVudFR5cGVzID0ge1xuICogICAnYWJvcnQnOiB7XG4gKiAgICAgcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6IHtcbiAqICAgICAgIGJ1YmJsZWQ6ICdvbkFib3J0JyxcbiAqICAgICAgIGNhcHR1cmVkOiAnb25BYm9ydENhcHR1cmUnLFxuICogICAgIH0sXG4gKiAgICAgZGVwZW5kZW5jaWVzOiBbJ3RvcEFib3J0J10sXG4gKiAgIH0sXG4gKiAgIC4uLlxuICogfTtcbiAqIHRvcExldmVsRXZlbnRzVG9EaXNwYXRjaENvbmZpZyA9IHtcbiAqICAgJ3RvcEFib3J0JzogeyBzYW1lQ29uZmlnIH1cbiAqIH07XG4gKi9cbnZhciBldmVudFR5cGVzID0ge307XG52YXIgdG9wTGV2ZWxFdmVudHNUb0Rpc3BhdGNoQ29uZmlnID0ge307XG5bJ2Fib3J0JywgJ2FuaW1hdGlvbkVuZCcsICdhbmltYXRpb25JdGVyYXRpb24nLCAnYW5pbWF0aW9uU3RhcnQnLCAnYmx1cicsICdjYW5QbGF5JywgJ2NhblBsYXlUaHJvdWdoJywgJ2NsaWNrJywgJ2NvbnRleHRNZW51JywgJ2NvcHknLCAnY3V0JywgJ2RvdWJsZUNsaWNrJywgJ2RyYWcnLCAnZHJhZ0VuZCcsICdkcmFnRW50ZXInLCAnZHJhZ0V4aXQnLCAnZHJhZ0xlYXZlJywgJ2RyYWdPdmVyJywgJ2RyYWdTdGFydCcsICdkcm9wJywgJ2R1cmF0aW9uQ2hhbmdlJywgJ2VtcHRpZWQnLCAnZW5jcnlwdGVkJywgJ2VuZGVkJywgJ2Vycm9yJywgJ2ZvY3VzJywgJ2lucHV0JywgJ2ludmFsaWQnLCAna2V5RG93bicsICdrZXlQcmVzcycsICdrZXlVcCcsICdsb2FkJywgJ2xvYWRlZERhdGEnLCAnbG9hZGVkTWV0YWRhdGEnLCAnbG9hZFN0YXJ0JywgJ21vdXNlRG93bicsICdtb3VzZU1vdmUnLCAnbW91c2VPdXQnLCAnbW91c2VPdmVyJywgJ21vdXNlVXAnLCAncGFzdGUnLCAncGF1c2UnLCAncGxheScsICdwbGF5aW5nJywgJ3Byb2dyZXNzJywgJ3JhdGVDaGFuZ2UnLCAncmVzZXQnLCAnc2Nyb2xsJywgJ3NlZWtlZCcsICdzZWVraW5nJywgJ3N0YWxsZWQnLCAnc3VibWl0JywgJ3N1c3BlbmQnLCAndGltZVVwZGF0ZScsICd0b3VjaENhbmNlbCcsICd0b3VjaEVuZCcsICd0b3VjaE1vdmUnLCAndG91Y2hTdGFydCcsICd0cmFuc2l0aW9uRW5kJywgJ3ZvbHVtZUNoYW5nZScsICd3YWl0aW5nJywgJ3doZWVsJ10uZm9yRWFjaChmdW5jdGlvbiAoZXZlbnQpIHtcbiAgdmFyIGNhcGl0YWxpemVkRXZlbnQgPSBldmVudFswXS50b1VwcGVyQ2FzZSgpICsgZXZlbnQuc2xpY2UoMSk7XG4gIHZhciBvbkV2ZW50ID0gJ29uJyArIGNhcGl0YWxpemVkRXZlbnQ7XG4gIHZhciB0b3BFdmVudCA9ICd0b3AnICsgY2FwaXRhbGl6ZWRFdmVudDtcblxuICB2YXIgdHlwZSA9IHtcbiAgICBwaGFzZWRSZWdpc3RyYXRpb25OYW1lczoge1xuICAgICAgYnViYmxlZDogb25FdmVudCxcbiAgICAgIGNhcHR1cmVkOiBvbkV2ZW50ICsgJ0NhcHR1cmUnXG4gICAgfSxcbiAgICBkZXBlbmRlbmNpZXM6IFt0b3BFdmVudF1cbiAgfTtcbiAgZXZlbnRUeXBlc1tldmVudF0gPSB0eXBlO1xuICB0b3BMZXZlbEV2ZW50c1RvRGlzcGF0Y2hDb25maWdbdG9wRXZlbnRdID0gdHlwZTtcbn0pO1xuXG52YXIgb25DbGlja0xpc3RlbmVycyA9IHt9O1xuXG5mdW5jdGlvbiBnZXREaWN0aW9uYXJ5S2V5KGluc3QpIHtcbiAgLy8gUHJldmVudHMgVjggcGVyZm9ybWFuY2UgaXNzdWU6XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9wdWxsLzcyMzJcbiAgcmV0dXJuICcuJyArIGluc3QuX3Jvb3ROb2RlSUQ7XG59XG5cbmZ1bmN0aW9uIGlzSW50ZXJhY3RpdmUodGFnKSB7XG4gIHJldHVybiB0YWcgPT09ICdidXR0b24nIHx8IHRhZyA9PT0gJ2lucHV0JyB8fCB0YWcgPT09ICdzZWxlY3QnIHx8IHRhZyA9PT0gJ3RleHRhcmVhJztcbn1cblxudmFyIFNpbXBsZUV2ZW50UGx1Z2luID0ge1xuICBldmVudFR5cGVzOiBldmVudFR5cGVzLFxuXG4gIGV4dHJhY3RFdmVudHM6IGZ1bmN0aW9uICh0b3BMZXZlbFR5cGUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCkge1xuICAgIHZhciBkaXNwYXRjaENvbmZpZyA9IHRvcExldmVsRXZlbnRzVG9EaXNwYXRjaENvbmZpZ1t0b3BMZXZlbFR5cGVdO1xuICAgIGlmICghZGlzcGF0Y2hDb25maWcpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICB2YXIgRXZlbnRDb25zdHJ1Y3RvcjtcbiAgICBzd2l0Y2ggKHRvcExldmVsVHlwZSkge1xuICAgICAgY2FzZSAndG9wQWJvcnQnOlxuICAgICAgY2FzZSAndG9wQ2FuUGxheSc6XG4gICAgICBjYXNlICd0b3BDYW5QbGF5VGhyb3VnaCc6XG4gICAgICBjYXNlICd0b3BEdXJhdGlvbkNoYW5nZSc6XG4gICAgICBjYXNlICd0b3BFbXB0aWVkJzpcbiAgICAgIGNhc2UgJ3RvcEVuY3J5cHRlZCc6XG4gICAgICBjYXNlICd0b3BFbmRlZCc6XG4gICAgICBjYXNlICd0b3BFcnJvcic6XG4gICAgICBjYXNlICd0b3BJbnB1dCc6XG4gICAgICBjYXNlICd0b3BJbnZhbGlkJzpcbiAgICAgIGNhc2UgJ3RvcExvYWQnOlxuICAgICAgY2FzZSAndG9wTG9hZGVkRGF0YSc6XG4gICAgICBjYXNlICd0b3BMb2FkZWRNZXRhZGF0YSc6XG4gICAgICBjYXNlICd0b3BMb2FkU3RhcnQnOlxuICAgICAgY2FzZSAndG9wUGF1c2UnOlxuICAgICAgY2FzZSAndG9wUGxheSc6XG4gICAgICBjYXNlICd0b3BQbGF5aW5nJzpcbiAgICAgIGNhc2UgJ3RvcFByb2dyZXNzJzpcbiAgICAgIGNhc2UgJ3RvcFJhdGVDaGFuZ2UnOlxuICAgICAgY2FzZSAndG9wUmVzZXQnOlxuICAgICAgY2FzZSAndG9wU2Vla2VkJzpcbiAgICAgIGNhc2UgJ3RvcFNlZWtpbmcnOlxuICAgICAgY2FzZSAndG9wU3RhbGxlZCc6XG4gICAgICBjYXNlICd0b3BTdWJtaXQnOlxuICAgICAgY2FzZSAndG9wU3VzcGVuZCc6XG4gICAgICBjYXNlICd0b3BUaW1lVXBkYXRlJzpcbiAgICAgIGNhc2UgJ3RvcFZvbHVtZUNoYW5nZSc6XG4gICAgICBjYXNlICd0b3BXYWl0aW5nJzpcbiAgICAgICAgLy8gSFRNTCBFdmVudHNcbiAgICAgICAgLy8gQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNS9pbmRleC5odG1sI2V2ZW50cy0wXG4gICAgICAgIEV2ZW50Q29uc3RydWN0b3IgPSBTeW50aGV0aWNFdmVudDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICd0b3BLZXlQcmVzcyc6XG4gICAgICAgIC8vIEZpcmVmb3ggY3JlYXRlcyBhIGtleXByZXNzIGV2ZW50IGZvciBmdW5jdGlvbiBrZXlzIHRvby4gVGhpcyByZW1vdmVzXG4gICAgICAgIC8vIHRoZSB1bndhbnRlZCBrZXlwcmVzcyBldmVudHMuIEVudGVyIGlzIGhvd2V2ZXIgYm90aCBwcmludGFibGUgYW5kXG4gICAgICAgIC8vIG5vbi1wcmludGFibGUuIE9uZSB3b3VsZCBleHBlY3QgVGFiIHRvIGJlIGFzIHdlbGwgKGJ1dCBpdCBpc24ndCkuXG4gICAgICAgIGlmIChnZXRFdmVudENoYXJDb2RlKG5hdGl2ZUV2ZW50KSA9PT0gMCkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAvKiBmYWxscyB0aHJvdWdoICovXG4gICAgICBjYXNlICd0b3BLZXlEb3duJzpcbiAgICAgIGNhc2UgJ3RvcEtleVVwJzpcbiAgICAgICAgRXZlbnRDb25zdHJ1Y3RvciA9IFN5bnRoZXRpY0tleWJvYXJkRXZlbnQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAndG9wQmx1cic6XG4gICAgICBjYXNlICd0b3BGb2N1cyc6XG4gICAgICAgIEV2ZW50Q29uc3RydWN0b3IgPSBTeW50aGV0aWNGb2N1c0V2ZW50O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3RvcENsaWNrJzpcbiAgICAgICAgLy8gRmlyZWZveCBjcmVhdGVzIGEgY2xpY2sgZXZlbnQgb24gcmlnaHQgbW91c2UgY2xpY2tzLiBUaGlzIHJlbW92ZXMgdGhlXG4gICAgICAgIC8vIHVud2FudGVkIGNsaWNrIGV2ZW50cy5cbiAgICAgICAgaWYgKG5hdGl2ZUV2ZW50LmJ1dHRvbiA9PT0gMikge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAvKiBmYWxscyB0aHJvdWdoICovXG4gICAgICBjYXNlICd0b3BEb3VibGVDbGljayc6XG4gICAgICBjYXNlICd0b3BNb3VzZURvd24nOlxuICAgICAgY2FzZSAndG9wTW91c2VNb3ZlJzpcbiAgICAgIGNhc2UgJ3RvcE1vdXNlVXAnOlxuICAgICAgLy8gVE9ETzogRGlzYWJsZWQgZWxlbWVudHMgc2hvdWxkIG5vdCByZXNwb25kIHRvIG1vdXNlIGV2ZW50c1xuICAgICAgLyogZmFsbHMgdGhyb3VnaCAqL1xuICAgICAgY2FzZSAndG9wTW91c2VPdXQnOlxuICAgICAgY2FzZSAndG9wTW91c2VPdmVyJzpcbiAgICAgIGNhc2UgJ3RvcENvbnRleHRNZW51JzpcbiAgICAgICAgRXZlbnRDb25zdHJ1Y3RvciA9IFN5bnRoZXRpY01vdXNlRXZlbnQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAndG9wRHJhZyc6XG4gICAgICBjYXNlICd0b3BEcmFnRW5kJzpcbiAgICAgIGNhc2UgJ3RvcERyYWdFbnRlcic6XG4gICAgICBjYXNlICd0b3BEcmFnRXhpdCc6XG4gICAgICBjYXNlICd0b3BEcmFnTGVhdmUnOlxuICAgICAgY2FzZSAndG9wRHJhZ092ZXInOlxuICAgICAgY2FzZSAndG9wRHJhZ1N0YXJ0JzpcbiAgICAgIGNhc2UgJ3RvcERyb3AnOlxuICAgICAgICBFdmVudENvbnN0cnVjdG9yID0gU3ludGhldGljRHJhZ0V2ZW50O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3RvcFRvdWNoQ2FuY2VsJzpcbiAgICAgIGNhc2UgJ3RvcFRvdWNoRW5kJzpcbiAgICAgIGNhc2UgJ3RvcFRvdWNoTW92ZSc6XG4gICAgICBjYXNlICd0b3BUb3VjaFN0YXJ0JzpcbiAgICAgICAgRXZlbnRDb25zdHJ1Y3RvciA9IFN5bnRoZXRpY1RvdWNoRXZlbnQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAndG9wQW5pbWF0aW9uRW5kJzpcbiAgICAgIGNhc2UgJ3RvcEFuaW1hdGlvbkl0ZXJhdGlvbic6XG4gICAgICBjYXNlICd0b3BBbmltYXRpb25TdGFydCc6XG4gICAgICAgIEV2ZW50Q29uc3RydWN0b3IgPSBTeW50aGV0aWNBbmltYXRpb25FdmVudDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICd0b3BUcmFuc2l0aW9uRW5kJzpcbiAgICAgICAgRXZlbnRDb25zdHJ1Y3RvciA9IFN5bnRoZXRpY1RyYW5zaXRpb25FdmVudDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICd0b3BTY3JvbGwnOlxuICAgICAgICBFdmVudENvbnN0cnVjdG9yID0gU3ludGhldGljVUlFdmVudDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICd0b3BXaGVlbCc6XG4gICAgICAgIEV2ZW50Q29uc3RydWN0b3IgPSBTeW50aGV0aWNXaGVlbEV2ZW50O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3RvcENvcHknOlxuICAgICAgY2FzZSAndG9wQ3V0JzpcbiAgICAgIGNhc2UgJ3RvcFBhc3RlJzpcbiAgICAgICAgRXZlbnRDb25zdHJ1Y3RvciA9IFN5bnRoZXRpY0NsaXBib2FyZEV2ZW50O1xuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgIUV2ZW50Q29uc3RydWN0b3IgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAnU2ltcGxlRXZlbnRQbHVnaW46IFVuaGFuZGxlZCBldmVudCB0eXBlLCBgJXNgLicsIHRvcExldmVsVHlwZSkgOiBfcHJvZEludmFyaWFudCgnODYnLCB0b3BMZXZlbFR5cGUpIDogdm9pZCAwO1xuICAgIHZhciBldmVudCA9IEV2ZW50Q29uc3RydWN0b3IuZ2V0UG9vbGVkKGRpc3BhdGNoQ29uZmlnLCB0YXJnZXRJbnN0LCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpO1xuICAgIEV2ZW50UHJvcGFnYXRvcnMuYWNjdW11bGF0ZVR3b1BoYXNlRGlzcGF0Y2hlcyhldmVudCk7XG4gICAgcmV0dXJuIGV2ZW50O1xuICB9LFxuXG4gIGRpZFB1dExpc3RlbmVyOiBmdW5jdGlvbiAoaW5zdCwgcmVnaXN0cmF0aW9uTmFtZSwgbGlzdGVuZXIpIHtcbiAgICAvLyBNb2JpbGUgU2FmYXJpIGRvZXMgbm90IGZpcmUgcHJvcGVybHkgYnViYmxlIGNsaWNrIGV2ZW50cyBvblxuICAgIC8vIG5vbi1pbnRlcmFjdGl2ZSBlbGVtZW50cywgd2hpY2ggbWVhbnMgZGVsZWdhdGVkIGNsaWNrIGxpc3RlbmVycyBkbyBub3RcbiAgICAvLyBmaXJlLiBUaGUgd29ya2Fyb3VuZCBmb3IgdGhpcyBidWcgaW52b2x2ZXMgYXR0YWNoaW5nIGFuIGVtcHR5IGNsaWNrXG4gICAgLy8gbGlzdGVuZXIgb24gdGhlIHRhcmdldCBub2RlLlxuICAgIC8vIGh0dHA6Ly93d3cucXVpcmtzbW9kZS5vcmcvYmxvZy9hcmNoaXZlcy8yMDEwLzA5L2NsaWNrX2V2ZW50X2RlbC5odG1sXG4gICAgaWYgKHJlZ2lzdHJhdGlvbk5hbWUgPT09ICdvbkNsaWNrJyAmJiAhaXNJbnRlcmFjdGl2ZShpbnN0Ll90YWcpKSB7XG4gICAgICB2YXIga2V5ID0gZ2V0RGljdGlvbmFyeUtleShpbnN0KTtcbiAgICAgIHZhciBub2RlID0gUmVhY3RET01Db21wb25lbnRUcmVlLmdldE5vZGVGcm9tSW5zdGFuY2UoaW5zdCk7XG4gICAgICBpZiAoIW9uQ2xpY2tMaXN0ZW5lcnNba2V5XSkge1xuICAgICAgICBvbkNsaWNrTGlzdGVuZXJzW2tleV0gPSBFdmVudExpc3RlbmVyLmxpc3Rlbihub2RlLCAnY2xpY2snLCBlbXB0eUZ1bmN0aW9uKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgd2lsbERlbGV0ZUxpc3RlbmVyOiBmdW5jdGlvbiAoaW5zdCwgcmVnaXN0cmF0aW9uTmFtZSkge1xuICAgIGlmIChyZWdpc3RyYXRpb25OYW1lID09PSAnb25DbGljaycgJiYgIWlzSW50ZXJhY3RpdmUoaW5zdC5fdGFnKSkge1xuICAgICAgdmFyIGtleSA9IGdldERpY3Rpb25hcnlLZXkoaW5zdCk7XG4gICAgICBvbkNsaWNrTGlzdGVuZXJzW2tleV0ucmVtb3ZlKCk7XG4gICAgICBkZWxldGUgb25DbGlja0xpc3RlbmVyc1trZXldO1xuICAgIH1cbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBTaW1wbGVFdmVudFBsdWdpbjtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3JlYWN0LWRvbS9saWIvU2ltcGxlRXZlbnRQbHVnaW4uanMiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgU3ludGhldGljRXZlbnQgPSByZXF1aXJlKCcuL1N5bnRoZXRpY0V2ZW50Jyk7XG5cbi8qKlxuICogQGludGVyZmFjZSBFdmVudFxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9jc3MzLWFuaW1hdGlvbnMvI0FuaW1hdGlvbkV2ZW50LWludGVyZmFjZVxuICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvQW5pbWF0aW9uRXZlbnRcbiAqL1xudmFyIEFuaW1hdGlvbkV2ZW50SW50ZXJmYWNlID0ge1xuICBhbmltYXRpb25OYW1lOiBudWxsLFxuICBlbGFwc2VkVGltZTogbnVsbCxcbiAgcHNldWRvRWxlbWVudDogbnVsbFxufTtcblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gZGlzcGF0Y2hDb25maWcgQ29uZmlndXJhdGlvbiB1c2VkIHRvIGRpc3BhdGNoIHRoaXMgZXZlbnQuXG4gKiBAcGFyYW0ge3N0cmluZ30gZGlzcGF0Y2hNYXJrZXIgTWFya2VyIGlkZW50aWZ5aW5nIHRoZSBldmVudCB0YXJnZXQuXG4gKiBAcGFyYW0ge29iamVjdH0gbmF0aXZlRXZlbnQgTmF0aXZlIGJyb3dzZXIgZXZlbnQuXG4gKiBAZXh0ZW5kcyB7U3ludGhldGljRXZlbnR9XG4gKi9cbmZ1bmN0aW9uIFN5bnRoZXRpY0FuaW1hdGlvbkV2ZW50KGRpc3BhdGNoQ29uZmlnLCBkaXNwYXRjaE1hcmtlciwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KSB7XG4gIHJldHVybiBTeW50aGV0aWNFdmVudC5jYWxsKHRoaXMsIGRpc3BhdGNoQ29uZmlnLCBkaXNwYXRjaE1hcmtlciwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KTtcbn1cblxuU3ludGhldGljRXZlbnQuYXVnbWVudENsYXNzKFN5bnRoZXRpY0FuaW1hdGlvbkV2ZW50LCBBbmltYXRpb25FdmVudEludGVyZmFjZSk7XG5cbm1vZHVsZS5leHBvcnRzID0gU3ludGhldGljQW5pbWF0aW9uRXZlbnQ7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1kb20vbGliL1N5bnRoZXRpY0FuaW1hdGlvbkV2ZW50LmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFN5bnRoZXRpY0V2ZW50ID0gcmVxdWlyZSgnLi9TeW50aGV0aWNFdmVudCcpO1xuXG4vKipcbiAqIEBpbnRlcmZhY2UgRXZlbnRcbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvY2xpcGJvYXJkLWFwaXMvXG4gKi9cbnZhciBDbGlwYm9hcmRFdmVudEludGVyZmFjZSA9IHtcbiAgY2xpcGJvYXJkRGF0YTogZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgcmV0dXJuICdjbGlwYm9hcmREYXRhJyBpbiBldmVudCA/IGV2ZW50LmNsaXBib2FyZERhdGEgOiB3aW5kb3cuY2xpcGJvYXJkRGF0YTtcbiAgfVxufTtcblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gZGlzcGF0Y2hDb25maWcgQ29uZmlndXJhdGlvbiB1c2VkIHRvIGRpc3BhdGNoIHRoaXMgZXZlbnQuXG4gKiBAcGFyYW0ge3N0cmluZ30gZGlzcGF0Y2hNYXJrZXIgTWFya2VyIGlkZW50aWZ5aW5nIHRoZSBldmVudCB0YXJnZXQuXG4gKiBAcGFyYW0ge29iamVjdH0gbmF0aXZlRXZlbnQgTmF0aXZlIGJyb3dzZXIgZXZlbnQuXG4gKiBAZXh0ZW5kcyB7U3ludGhldGljVUlFdmVudH1cbiAqL1xuZnVuY3Rpb24gU3ludGhldGljQ2xpcGJvYXJkRXZlbnQoZGlzcGF0Y2hDb25maWcsIGRpc3BhdGNoTWFya2VyLCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpIHtcbiAgcmV0dXJuIFN5bnRoZXRpY0V2ZW50LmNhbGwodGhpcywgZGlzcGF0Y2hDb25maWcsIGRpc3BhdGNoTWFya2VyLCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpO1xufVxuXG5TeW50aGV0aWNFdmVudC5hdWdtZW50Q2xhc3MoU3ludGhldGljQ2xpcGJvYXJkRXZlbnQsIENsaXBib2FyZEV2ZW50SW50ZXJmYWNlKTtcblxubW9kdWxlLmV4cG9ydHMgPSBTeW50aGV0aWNDbGlwYm9hcmRFdmVudDtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3JlYWN0LWRvbS9saWIvU3ludGhldGljQ2xpcGJvYXJkRXZlbnQuanMiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgU3ludGhldGljRXZlbnQgPSByZXF1aXJlKCcuL1N5bnRoZXRpY0V2ZW50Jyk7XG5cbi8qKlxuICogQGludGVyZmFjZSBFdmVudFxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1FdmVudHMvI2V2ZW50cy1jb21wb3NpdGlvbmV2ZW50c1xuICovXG52YXIgQ29tcG9zaXRpb25FdmVudEludGVyZmFjZSA9IHtcbiAgZGF0YTogbnVsbFxufTtcblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gZGlzcGF0Y2hDb25maWcgQ29uZmlndXJhdGlvbiB1c2VkIHRvIGRpc3BhdGNoIHRoaXMgZXZlbnQuXG4gKiBAcGFyYW0ge3N0cmluZ30gZGlzcGF0Y2hNYXJrZXIgTWFya2VyIGlkZW50aWZ5aW5nIHRoZSBldmVudCB0YXJnZXQuXG4gKiBAcGFyYW0ge29iamVjdH0gbmF0aXZlRXZlbnQgTmF0aXZlIGJyb3dzZXIgZXZlbnQuXG4gKiBAZXh0ZW5kcyB7U3ludGhldGljVUlFdmVudH1cbiAqL1xuZnVuY3Rpb24gU3ludGhldGljQ29tcG9zaXRpb25FdmVudChkaXNwYXRjaENvbmZpZywgZGlzcGF0Y2hNYXJrZXIsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCkge1xuICByZXR1cm4gU3ludGhldGljRXZlbnQuY2FsbCh0aGlzLCBkaXNwYXRjaENvbmZpZywgZGlzcGF0Y2hNYXJrZXIsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCk7XG59XG5cblN5bnRoZXRpY0V2ZW50LmF1Z21lbnRDbGFzcyhTeW50aGV0aWNDb21wb3NpdGlvbkV2ZW50LCBDb21wb3NpdGlvbkV2ZW50SW50ZXJmYWNlKTtcblxubW9kdWxlLmV4cG9ydHMgPSBTeW50aGV0aWNDb21wb3NpdGlvbkV2ZW50O1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QtZG9tL2xpYi9TeW50aGV0aWNDb21wb3NpdGlvbkV2ZW50LmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFN5bnRoZXRpY01vdXNlRXZlbnQgPSByZXF1aXJlKCcuL1N5bnRoZXRpY01vdXNlRXZlbnQnKTtcblxuLyoqXG4gKiBAaW50ZXJmYWNlIERyYWdFdmVudFxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1FdmVudHMvXG4gKi9cbnZhciBEcmFnRXZlbnRJbnRlcmZhY2UgPSB7XG4gIGRhdGFUcmFuc2ZlcjogbnVsbFxufTtcblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gZGlzcGF0Y2hDb25maWcgQ29uZmlndXJhdGlvbiB1c2VkIHRvIGRpc3BhdGNoIHRoaXMgZXZlbnQuXG4gKiBAcGFyYW0ge3N0cmluZ30gZGlzcGF0Y2hNYXJrZXIgTWFya2VyIGlkZW50aWZ5aW5nIHRoZSBldmVudCB0YXJnZXQuXG4gKiBAcGFyYW0ge29iamVjdH0gbmF0aXZlRXZlbnQgTmF0aXZlIGJyb3dzZXIgZXZlbnQuXG4gKiBAZXh0ZW5kcyB7U3ludGhldGljVUlFdmVudH1cbiAqL1xuZnVuY3Rpb24gU3ludGhldGljRHJhZ0V2ZW50KGRpc3BhdGNoQ29uZmlnLCBkaXNwYXRjaE1hcmtlciwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KSB7XG4gIHJldHVybiBTeW50aGV0aWNNb3VzZUV2ZW50LmNhbGwodGhpcywgZGlzcGF0Y2hDb25maWcsIGRpc3BhdGNoTWFya2VyLCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpO1xufVxuXG5TeW50aGV0aWNNb3VzZUV2ZW50LmF1Z21lbnRDbGFzcyhTeW50aGV0aWNEcmFnRXZlbnQsIERyYWdFdmVudEludGVyZmFjZSk7XG5cbm1vZHVsZS5leHBvcnRzID0gU3ludGhldGljRHJhZ0V2ZW50O1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QtZG9tL2xpYi9TeW50aGV0aWNEcmFnRXZlbnQuanMiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgU3ludGhldGljVUlFdmVudCA9IHJlcXVpcmUoJy4vU3ludGhldGljVUlFdmVudCcpO1xuXG4vKipcbiAqIEBpbnRlcmZhY2UgRm9jdXNFdmVudFxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1FdmVudHMvXG4gKi9cbnZhciBGb2N1c0V2ZW50SW50ZXJmYWNlID0ge1xuICByZWxhdGVkVGFyZ2V0OiBudWxsXG59O1xuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSBkaXNwYXRjaENvbmZpZyBDb25maWd1cmF0aW9uIHVzZWQgdG8gZGlzcGF0Y2ggdGhpcyBldmVudC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBkaXNwYXRjaE1hcmtlciBNYXJrZXIgaWRlbnRpZnlpbmcgdGhlIGV2ZW50IHRhcmdldC5cbiAqIEBwYXJhbSB7b2JqZWN0fSBuYXRpdmVFdmVudCBOYXRpdmUgYnJvd3NlciBldmVudC5cbiAqIEBleHRlbmRzIHtTeW50aGV0aWNVSUV2ZW50fVxuICovXG5mdW5jdGlvbiBTeW50aGV0aWNGb2N1c0V2ZW50KGRpc3BhdGNoQ29uZmlnLCBkaXNwYXRjaE1hcmtlciwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KSB7XG4gIHJldHVybiBTeW50aGV0aWNVSUV2ZW50LmNhbGwodGhpcywgZGlzcGF0Y2hDb25maWcsIGRpc3BhdGNoTWFya2VyLCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpO1xufVxuXG5TeW50aGV0aWNVSUV2ZW50LmF1Z21lbnRDbGFzcyhTeW50aGV0aWNGb2N1c0V2ZW50LCBGb2N1c0V2ZW50SW50ZXJmYWNlKTtcblxubW9kdWxlLmV4cG9ydHMgPSBTeW50aGV0aWNGb2N1c0V2ZW50O1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QtZG9tL2xpYi9TeW50aGV0aWNGb2N1c0V2ZW50LmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFN5bnRoZXRpY0V2ZW50ID0gcmVxdWlyZSgnLi9TeW50aGV0aWNFdmVudCcpO1xuXG4vKipcbiAqIEBpbnRlcmZhY2UgRXZlbnRcbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMy9XRC1ET00tTGV2ZWwtMy1FdmVudHMtMjAxMzExMDVcbiAqICAgICAgLyNldmVudHMtaW5wdXRldmVudHNcbiAqL1xudmFyIElucHV0RXZlbnRJbnRlcmZhY2UgPSB7XG4gIGRhdGE6IG51bGxcbn07XG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IGRpc3BhdGNoQ29uZmlnIENvbmZpZ3VyYXRpb24gdXNlZCB0byBkaXNwYXRjaCB0aGlzIGV2ZW50LlxuICogQHBhcmFtIHtzdHJpbmd9IGRpc3BhdGNoTWFya2VyIE1hcmtlciBpZGVudGlmeWluZyB0aGUgZXZlbnQgdGFyZ2V0LlxuICogQHBhcmFtIHtvYmplY3R9IG5hdGl2ZUV2ZW50IE5hdGl2ZSBicm93c2VyIGV2ZW50LlxuICogQGV4dGVuZHMge1N5bnRoZXRpY1VJRXZlbnR9XG4gKi9cbmZ1bmN0aW9uIFN5bnRoZXRpY0lucHV0RXZlbnQoZGlzcGF0Y2hDb25maWcsIGRpc3BhdGNoTWFya2VyLCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpIHtcbiAgcmV0dXJuIFN5bnRoZXRpY0V2ZW50LmNhbGwodGhpcywgZGlzcGF0Y2hDb25maWcsIGRpc3BhdGNoTWFya2VyLCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpO1xufVxuXG5TeW50aGV0aWNFdmVudC5hdWdtZW50Q2xhc3MoU3ludGhldGljSW5wdXRFdmVudCwgSW5wdXRFdmVudEludGVyZmFjZSk7XG5cbm1vZHVsZS5leHBvcnRzID0gU3ludGhldGljSW5wdXRFdmVudDtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3JlYWN0LWRvbS9saWIvU3ludGhldGljSW5wdXRFdmVudC5qcyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBTeW50aGV0aWNVSUV2ZW50ID0gcmVxdWlyZSgnLi9TeW50aGV0aWNVSUV2ZW50Jyk7XG5cbnZhciBnZXRFdmVudENoYXJDb2RlID0gcmVxdWlyZSgnLi9nZXRFdmVudENoYXJDb2RlJyk7XG52YXIgZ2V0RXZlbnRLZXkgPSByZXF1aXJlKCcuL2dldEV2ZW50S2V5Jyk7XG52YXIgZ2V0RXZlbnRNb2RpZmllclN0YXRlID0gcmVxdWlyZSgnLi9nZXRFdmVudE1vZGlmaWVyU3RhdGUnKTtcblxuLyoqXG4gKiBAaW50ZXJmYWNlIEtleWJvYXJkRXZlbnRcbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTMtRXZlbnRzL1xuICovXG52YXIgS2V5Ym9hcmRFdmVudEludGVyZmFjZSA9IHtcbiAga2V5OiBnZXRFdmVudEtleSxcbiAgbG9jYXRpb246IG51bGwsXG4gIGN0cmxLZXk6IG51bGwsXG4gIHNoaWZ0S2V5OiBudWxsLFxuICBhbHRLZXk6IG51bGwsXG4gIG1ldGFLZXk6IG51bGwsXG4gIHJlcGVhdDogbnVsbCxcbiAgbG9jYWxlOiBudWxsLFxuICBnZXRNb2RpZmllclN0YXRlOiBnZXRFdmVudE1vZGlmaWVyU3RhdGUsXG4gIC8vIExlZ2FjeSBJbnRlcmZhY2VcbiAgY2hhckNvZGU6IGZ1bmN0aW9uIChldmVudCkge1xuICAgIC8vIGBjaGFyQ29kZWAgaXMgdGhlIHJlc3VsdCBvZiBhIEtleVByZXNzIGV2ZW50IGFuZCByZXByZXNlbnRzIHRoZSB2YWx1ZSBvZlxuICAgIC8vIHRoZSBhY3R1YWwgcHJpbnRhYmxlIGNoYXJhY3Rlci5cblxuICAgIC8vIEtleVByZXNzIGlzIGRlcHJlY2F0ZWQsIGJ1dCBpdHMgcmVwbGFjZW1lbnQgaXMgbm90IHlldCBmaW5hbCBhbmQgbm90XG4gICAgLy8gaW1wbGVtZW50ZWQgaW4gYW55IG1ham9yIGJyb3dzZXIuIE9ubHkgS2V5UHJlc3MgaGFzIGNoYXJDb2RlLlxuICAgIGlmIChldmVudC50eXBlID09PSAna2V5cHJlc3MnKSB7XG4gICAgICByZXR1cm4gZ2V0RXZlbnRDaGFyQ29kZShldmVudCk7XG4gICAgfVxuICAgIHJldHVybiAwO1xuICB9LFxuICBrZXlDb2RlOiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAvLyBga2V5Q29kZWAgaXMgdGhlIHJlc3VsdCBvZiBhIEtleURvd24vVXAgZXZlbnQgYW5kIHJlcHJlc2VudHMgdGhlIHZhbHVlIG9mXG4gICAgLy8gcGh5c2ljYWwga2V5Ym9hcmQga2V5LlxuXG4gICAgLy8gVGhlIGFjdHVhbCBtZWFuaW5nIG9mIHRoZSB2YWx1ZSBkZXBlbmRzIG9uIHRoZSB1c2Vycycga2V5Ym9hcmQgbGF5b3V0XG4gICAgLy8gd2hpY2ggY2Fubm90IGJlIGRldGVjdGVkLiBBc3N1bWluZyB0aGF0IGl0IGlzIGEgVVMga2V5Ym9hcmQgbGF5b3V0XG4gICAgLy8gcHJvdmlkZXMgYSBzdXJwcmlzaW5nbHkgYWNjdXJhdGUgbWFwcGluZyBmb3IgVVMgYW5kIEV1cm9wZWFuIHVzZXJzLlxuICAgIC8vIER1ZSB0byB0aGlzLCBpdCBpcyBsZWZ0IHRvIHRoZSB1c2VyIHRvIGltcGxlbWVudCBhdCB0aGlzIHRpbWUuXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09ICdrZXlkb3duJyB8fCBldmVudC50eXBlID09PSAna2V5dXAnKSB7XG4gICAgICByZXR1cm4gZXZlbnQua2V5Q29kZTtcbiAgICB9XG4gICAgcmV0dXJuIDA7XG4gIH0sXG4gIHdoaWNoOiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAvLyBgd2hpY2hgIGlzIGFuIGFsaWFzIGZvciBlaXRoZXIgYGtleUNvZGVgIG9yIGBjaGFyQ29kZWAgZGVwZW5kaW5nIG9uIHRoZVxuICAgIC8vIHR5cGUgb2YgdGhlIGV2ZW50LlxuICAgIGlmIChldmVudC50eXBlID09PSAna2V5cHJlc3MnKSB7XG4gICAgICByZXR1cm4gZ2V0RXZlbnRDaGFyQ29kZShldmVudCk7XG4gICAgfVxuICAgIGlmIChldmVudC50eXBlID09PSAna2V5ZG93bicgfHwgZXZlbnQudHlwZSA9PT0gJ2tleXVwJykge1xuICAgICAgcmV0dXJuIGV2ZW50LmtleUNvZGU7XG4gICAgfVxuICAgIHJldHVybiAwO1xuICB9XG59O1xuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSBkaXNwYXRjaENvbmZpZyBDb25maWd1cmF0aW9uIHVzZWQgdG8gZGlzcGF0Y2ggdGhpcyBldmVudC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBkaXNwYXRjaE1hcmtlciBNYXJrZXIgaWRlbnRpZnlpbmcgdGhlIGV2ZW50IHRhcmdldC5cbiAqIEBwYXJhbSB7b2JqZWN0fSBuYXRpdmVFdmVudCBOYXRpdmUgYnJvd3NlciBldmVudC5cbiAqIEBleHRlbmRzIHtTeW50aGV0aWNVSUV2ZW50fVxuICovXG5mdW5jdGlvbiBTeW50aGV0aWNLZXlib2FyZEV2ZW50KGRpc3BhdGNoQ29uZmlnLCBkaXNwYXRjaE1hcmtlciwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KSB7XG4gIHJldHVybiBTeW50aGV0aWNVSUV2ZW50LmNhbGwodGhpcywgZGlzcGF0Y2hDb25maWcsIGRpc3BhdGNoTWFya2VyLCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpO1xufVxuXG5TeW50aGV0aWNVSUV2ZW50LmF1Z21lbnRDbGFzcyhTeW50aGV0aWNLZXlib2FyZEV2ZW50LCBLZXlib2FyZEV2ZW50SW50ZXJmYWNlKTtcblxubW9kdWxlLmV4cG9ydHMgPSBTeW50aGV0aWNLZXlib2FyZEV2ZW50O1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QtZG9tL2xpYi9TeW50aGV0aWNLZXlib2FyZEV2ZW50LmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFN5bnRoZXRpY1VJRXZlbnQgPSByZXF1aXJlKCcuL1N5bnRoZXRpY1VJRXZlbnQnKTtcblxudmFyIGdldEV2ZW50TW9kaWZpZXJTdGF0ZSA9IHJlcXVpcmUoJy4vZ2V0RXZlbnRNb2RpZmllclN0YXRlJyk7XG5cbi8qKlxuICogQGludGVyZmFjZSBUb3VjaEV2ZW50XG4gKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL3RvdWNoLWV2ZW50cy9cbiAqL1xudmFyIFRvdWNoRXZlbnRJbnRlcmZhY2UgPSB7XG4gIHRvdWNoZXM6IG51bGwsXG4gIHRhcmdldFRvdWNoZXM6IG51bGwsXG4gIGNoYW5nZWRUb3VjaGVzOiBudWxsLFxuICBhbHRLZXk6IG51bGwsXG4gIG1ldGFLZXk6IG51bGwsXG4gIGN0cmxLZXk6IG51bGwsXG4gIHNoaWZ0S2V5OiBudWxsLFxuICBnZXRNb2RpZmllclN0YXRlOiBnZXRFdmVudE1vZGlmaWVyU3RhdGVcbn07XG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IGRpc3BhdGNoQ29uZmlnIENvbmZpZ3VyYXRpb24gdXNlZCB0byBkaXNwYXRjaCB0aGlzIGV2ZW50LlxuICogQHBhcmFtIHtzdHJpbmd9IGRpc3BhdGNoTWFya2VyIE1hcmtlciBpZGVudGlmeWluZyB0aGUgZXZlbnQgdGFyZ2V0LlxuICogQHBhcmFtIHtvYmplY3R9IG5hdGl2ZUV2ZW50IE5hdGl2ZSBicm93c2VyIGV2ZW50LlxuICogQGV4dGVuZHMge1N5bnRoZXRpY1VJRXZlbnR9XG4gKi9cbmZ1bmN0aW9uIFN5bnRoZXRpY1RvdWNoRXZlbnQoZGlzcGF0Y2hDb25maWcsIGRpc3BhdGNoTWFya2VyLCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpIHtcbiAgcmV0dXJuIFN5bnRoZXRpY1VJRXZlbnQuY2FsbCh0aGlzLCBkaXNwYXRjaENvbmZpZywgZGlzcGF0Y2hNYXJrZXIsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCk7XG59XG5cblN5bnRoZXRpY1VJRXZlbnQuYXVnbWVudENsYXNzKFN5bnRoZXRpY1RvdWNoRXZlbnQsIFRvdWNoRXZlbnRJbnRlcmZhY2UpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN5bnRoZXRpY1RvdWNoRXZlbnQ7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1kb20vbGliL1N5bnRoZXRpY1RvdWNoRXZlbnQuanMiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgU3ludGhldGljRXZlbnQgPSByZXF1aXJlKCcuL1N5bnRoZXRpY0V2ZW50Jyk7XG5cbi8qKlxuICogQGludGVyZmFjZSBFdmVudFxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDA5L1dELWNzczMtdHJhbnNpdGlvbnMtMjAwOTAzMjAvI3RyYW5zaXRpb24tZXZlbnRzLVxuICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvVHJhbnNpdGlvbkV2ZW50XG4gKi9cbnZhciBUcmFuc2l0aW9uRXZlbnRJbnRlcmZhY2UgPSB7XG4gIHByb3BlcnR5TmFtZTogbnVsbCxcbiAgZWxhcHNlZFRpbWU6IG51bGwsXG4gIHBzZXVkb0VsZW1lbnQ6IG51bGxcbn07XG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IGRpc3BhdGNoQ29uZmlnIENvbmZpZ3VyYXRpb24gdXNlZCB0byBkaXNwYXRjaCB0aGlzIGV2ZW50LlxuICogQHBhcmFtIHtzdHJpbmd9IGRpc3BhdGNoTWFya2VyIE1hcmtlciBpZGVudGlmeWluZyB0aGUgZXZlbnQgdGFyZ2V0LlxuICogQHBhcmFtIHtvYmplY3R9IG5hdGl2ZUV2ZW50IE5hdGl2ZSBicm93c2VyIGV2ZW50LlxuICogQGV4dGVuZHMge1N5bnRoZXRpY0V2ZW50fVxuICovXG5mdW5jdGlvbiBTeW50aGV0aWNUcmFuc2l0aW9uRXZlbnQoZGlzcGF0Y2hDb25maWcsIGRpc3BhdGNoTWFya2VyLCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpIHtcbiAgcmV0dXJuIFN5bnRoZXRpY0V2ZW50LmNhbGwodGhpcywgZGlzcGF0Y2hDb25maWcsIGRpc3BhdGNoTWFya2VyLCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpO1xufVxuXG5TeW50aGV0aWNFdmVudC5hdWdtZW50Q2xhc3MoU3ludGhldGljVHJhbnNpdGlvbkV2ZW50LCBUcmFuc2l0aW9uRXZlbnRJbnRlcmZhY2UpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN5bnRoZXRpY1RyYW5zaXRpb25FdmVudDtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3JlYWN0LWRvbS9saWIvU3ludGhldGljVHJhbnNpdGlvbkV2ZW50LmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFN5bnRoZXRpY01vdXNlRXZlbnQgPSByZXF1aXJlKCcuL1N5bnRoZXRpY01vdXNlRXZlbnQnKTtcblxuLyoqXG4gKiBAaW50ZXJmYWNlIFdoZWVsRXZlbnRcbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTMtRXZlbnRzL1xuICovXG52YXIgV2hlZWxFdmVudEludGVyZmFjZSA9IHtcbiAgZGVsdGFYOiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICByZXR1cm4gJ2RlbHRhWCcgaW4gZXZlbnQgPyBldmVudC5kZWx0YVggOiAvLyBGYWxsYmFjayB0byBgd2hlZWxEZWx0YVhgIGZvciBXZWJraXQgYW5kIG5vcm1hbGl6ZSAocmlnaHQgaXMgcG9zaXRpdmUpLlxuICAgICd3aGVlbERlbHRhWCcgaW4gZXZlbnQgPyAtZXZlbnQud2hlZWxEZWx0YVggOiAwO1xuICB9LFxuICBkZWx0YVk6IGZ1bmN0aW9uIChldmVudCkge1xuICAgIHJldHVybiAnZGVsdGFZJyBpbiBldmVudCA/IGV2ZW50LmRlbHRhWSA6IC8vIEZhbGxiYWNrIHRvIGB3aGVlbERlbHRhWWAgZm9yIFdlYmtpdCBhbmQgbm9ybWFsaXplIChkb3duIGlzIHBvc2l0aXZlKS5cbiAgICAnd2hlZWxEZWx0YVknIGluIGV2ZW50ID8gLWV2ZW50LndoZWVsRGVsdGFZIDogLy8gRmFsbGJhY2sgdG8gYHdoZWVsRGVsdGFgIGZvciBJRTw5IGFuZCBub3JtYWxpemUgKGRvd24gaXMgcG9zaXRpdmUpLlxuICAgICd3aGVlbERlbHRhJyBpbiBldmVudCA/IC1ldmVudC53aGVlbERlbHRhIDogMDtcbiAgfSxcbiAgZGVsdGFaOiBudWxsLFxuXG4gIC8vIEJyb3dzZXJzIHdpdGhvdXQgXCJkZWx0YU1vZGVcIiBpcyByZXBvcnRpbmcgaW4gcmF3IHdoZWVsIGRlbHRhIHdoZXJlIG9uZVxuICAvLyBub3RjaCBvbiB0aGUgc2Nyb2xsIGlzIGFsd2F5cyArLy0gMTIwLCByb3VnaGx5IGVxdWl2YWxlbnQgdG8gcGl4ZWxzLlxuICAvLyBBIGdvb2QgYXBwcm94aW1hdGlvbiBvZiBET01fREVMVEFfTElORSAoMSkgaXMgNSUgb2Ygdmlld3BvcnQgc2l6ZSBvclxuICAvLyB+NDAgcGl4ZWxzLCBmb3IgRE9NX0RFTFRBX1NDUkVFTiAoMikgaXQgaXMgODcuNSUgb2Ygdmlld3BvcnQgc2l6ZS5cbiAgZGVsdGFNb2RlOiBudWxsXG59O1xuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSBkaXNwYXRjaENvbmZpZyBDb25maWd1cmF0aW9uIHVzZWQgdG8gZGlzcGF0Y2ggdGhpcyBldmVudC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBkaXNwYXRjaE1hcmtlciBNYXJrZXIgaWRlbnRpZnlpbmcgdGhlIGV2ZW50IHRhcmdldC5cbiAqIEBwYXJhbSB7b2JqZWN0fSBuYXRpdmVFdmVudCBOYXRpdmUgYnJvd3NlciBldmVudC5cbiAqIEBleHRlbmRzIHtTeW50aGV0aWNNb3VzZUV2ZW50fVxuICovXG5mdW5jdGlvbiBTeW50aGV0aWNXaGVlbEV2ZW50KGRpc3BhdGNoQ29uZmlnLCBkaXNwYXRjaE1hcmtlciwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KSB7XG4gIHJldHVybiBTeW50aGV0aWNNb3VzZUV2ZW50LmNhbGwodGhpcywgZGlzcGF0Y2hDb25maWcsIGRpc3BhdGNoTWFya2VyLCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpO1xufVxuXG5TeW50aGV0aWNNb3VzZUV2ZW50LmF1Z21lbnRDbGFzcyhTeW50aGV0aWNXaGVlbEV2ZW50LCBXaGVlbEV2ZW50SW50ZXJmYWNlKTtcblxubW9kdWxlLmV4cG9ydHMgPSBTeW50aGV0aWNXaGVlbEV2ZW50O1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QtZG9tL2xpYi9TeW50aGV0aWNXaGVlbEV2ZW50LmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgTU9EID0gNjU1MjE7XG5cbi8vIGFkbGVyMzIgaXMgbm90IGNyeXB0b2dyYXBoaWNhbGx5IHN0cm9uZywgYW5kIGlzIG9ubHkgdXNlZCB0byBzYW5pdHkgY2hlY2sgdGhhdFxuLy8gbWFya3VwIGdlbmVyYXRlZCBvbiB0aGUgc2VydmVyIG1hdGNoZXMgdGhlIG1hcmt1cCBnZW5lcmF0ZWQgb24gdGhlIGNsaWVudC5cbi8vIFRoaXMgaW1wbGVtZW50YXRpb24gKGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGUgU2hlZXRKUyB2ZXJzaW9uKSBoYXMgYmVlbiBvcHRpbWl6ZWRcbi8vIGZvciBvdXIgdXNlIGNhc2UsIGF0IHRoZSBleHBlbnNlIG9mIGNvbmZvcm1pbmcgdG8gdGhlIGFkbGVyMzIgc3BlY2lmaWNhdGlvblxuLy8gZm9yIG5vbi1hc2NpaSBpbnB1dHMuXG5mdW5jdGlvbiBhZGxlcjMyKGRhdGEpIHtcbiAgdmFyIGEgPSAxO1xuICB2YXIgYiA9IDA7XG4gIHZhciBpID0gMDtcbiAgdmFyIGwgPSBkYXRhLmxlbmd0aDtcbiAgdmFyIG0gPSBsICYgfjB4MztcbiAgd2hpbGUgKGkgPCBtKSB7XG4gICAgdmFyIG4gPSBNYXRoLm1pbihpICsgNDA5NiwgbSk7XG4gICAgZm9yICg7IGkgPCBuOyBpICs9IDQpIHtcbiAgICAgIGIgKz0gKGEgKz0gZGF0YS5jaGFyQ29kZUF0KGkpKSArIChhICs9IGRhdGEuY2hhckNvZGVBdChpICsgMSkpICsgKGEgKz0gZGF0YS5jaGFyQ29kZUF0KGkgKyAyKSkgKyAoYSArPSBkYXRhLmNoYXJDb2RlQXQoaSArIDMpKTtcbiAgICB9XG4gICAgYSAlPSBNT0Q7XG4gICAgYiAlPSBNT0Q7XG4gIH1cbiAgZm9yICg7IGkgPCBsOyBpKyspIHtcbiAgICBiICs9IGEgKz0gZGF0YS5jaGFyQ29kZUF0KGkpO1xuICB9XG4gIGEgJT0gTU9EO1xuICBiICU9IE1PRDtcbiAgcmV0dXJuIGEgfCBiIDw8IDE2O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFkbGVyMzI7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1kb20vbGliL2FkbGVyMzIuanMiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgX3Byb2RJbnZhcmlhbnQgPSByZXF1aXJlKCcuL3JlYWN0UHJvZEludmFyaWFudCcpO1xuXG52YXIgUmVhY3RQcm9wVHlwZUxvY2F0aW9uTmFtZXMgPSByZXF1aXJlKCcuL1JlYWN0UHJvcFR5cGVMb2NhdGlvbk5hbWVzJyk7XG52YXIgUmVhY3RQcm9wVHlwZXNTZWNyZXQgPSByZXF1aXJlKCcuL1JlYWN0UHJvcFR5cGVzU2VjcmV0Jyk7XG5cbnZhciBpbnZhcmlhbnQgPSByZXF1aXJlKCdmYmpzL2xpYi9pbnZhcmlhbnQnKTtcbnZhciB3YXJuaW5nID0gcmVxdWlyZSgnZmJqcy9saWIvd2FybmluZycpO1xuXG52YXIgUmVhY3RDb21wb25lbnRUcmVlSG9vaztcblxuaWYgKHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJyAmJiBwcm9jZXNzLmVudiAmJiBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Rlc3QnKSB7XG4gIC8vIFRlbXBvcmFyeSBoYWNrLlxuICAvLyBJbmxpbmUgcmVxdWlyZXMgZG9uJ3Qgd29yayB3ZWxsIHdpdGggSmVzdDpcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy83MjQwXG4gIC8vIFJlbW92ZSB0aGUgaW5saW5lIHJlcXVpcmVzIHdoZW4gd2UgZG9uJ3QgbmVlZCB0aGVtIGFueW1vcmU6XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9wdWxsLzcxNzhcbiAgUmVhY3RDb21wb25lbnRUcmVlSG9vayA9IHJlcXVpcmUoJ3JlYWN0L2xpYi9SZWFjdENvbXBvbmVudFRyZWVIb29rJyk7XG59XG5cbnZhciBsb2dnZWRUeXBlRmFpbHVyZXMgPSB7fTtcblxuLyoqXG4gKiBBc3NlcnQgdGhhdCB0aGUgdmFsdWVzIG1hdGNoIHdpdGggdGhlIHR5cGUgc3BlY3MuXG4gKiBFcnJvciBtZXNzYWdlcyBhcmUgbWVtb3JpemVkIGFuZCB3aWxsIG9ubHkgYmUgc2hvd24gb25jZS5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gdHlwZVNwZWNzIE1hcCBvZiBuYW1lIHRvIGEgUmVhY3RQcm9wVHlwZVxuICogQHBhcmFtIHtvYmplY3R9IHZhbHVlcyBSdW50aW1lIHZhbHVlcyB0aGF0IG5lZWQgdG8gYmUgdHlwZS1jaGVja2VkXG4gKiBAcGFyYW0ge3N0cmluZ30gbG9jYXRpb24gZS5nLiBcInByb3BcIiwgXCJjb250ZXh0XCIsIFwiY2hpbGQgY29udGV4dFwiXG4gKiBAcGFyYW0ge3N0cmluZ30gY29tcG9uZW50TmFtZSBOYW1lIG9mIHRoZSBjb21wb25lbnQgZm9yIGVycm9yIG1lc3NhZ2VzLlxuICogQHBhcmFtIHs/b2JqZWN0fSBlbGVtZW50IFRoZSBSZWFjdCBlbGVtZW50IHRoYXQgaXMgYmVpbmcgdHlwZS1jaGVja2VkXG4gKiBAcGFyYW0gez9udW1iZXJ9IGRlYnVnSUQgVGhlIFJlYWN0IGNvbXBvbmVudCBpbnN0YW5jZSB0aGF0IGlzIGJlaW5nIHR5cGUtY2hlY2tlZFxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gY2hlY2tSZWFjdFR5cGVTcGVjKHR5cGVTcGVjcywgdmFsdWVzLCBsb2NhdGlvbiwgY29tcG9uZW50TmFtZSwgZWxlbWVudCwgZGVidWdJRCkge1xuICBmb3IgKHZhciB0eXBlU3BlY05hbWUgaW4gdHlwZVNwZWNzKSB7XG4gICAgaWYgKHR5cGVTcGVjcy5oYXNPd25Qcm9wZXJ0eSh0eXBlU3BlY05hbWUpKSB7XG4gICAgICB2YXIgZXJyb3I7XG4gICAgICAvLyBQcm9wIHR5cGUgdmFsaWRhdGlvbiBtYXkgdGhyb3cuIEluIGNhc2UgdGhleSBkbywgd2UgZG9uJ3Qgd2FudCB0b1xuICAgICAgLy8gZmFpbCB0aGUgcmVuZGVyIHBoYXNlIHdoZXJlIGl0IGRpZG4ndCBmYWlsIGJlZm9yZS4gU28gd2UgbG9nIGl0LlxuICAgICAgLy8gQWZ0ZXIgdGhlc2UgaGF2ZSBiZWVuIGNsZWFuZWQgdXAsIHdlJ2xsIGxldCB0aGVtIHRocm93LlxuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gVGhpcyBpcyBpbnRlbnRpb25hbGx5IGFuIGludmFyaWFudCB0aGF0IGdldHMgY2F1Z2h0LiBJdCdzIHRoZSBzYW1lXG4gICAgICAgIC8vIGJlaGF2aW9yIGFzIHdpdGhvdXQgdGhpcyBzdGF0ZW1lbnQgZXhjZXB0IHdpdGggYSBiZXR0ZXIgbWVzc2FnZS5cbiAgICAgICAgISh0eXBlb2YgdHlwZVNwZWNzW3R5cGVTcGVjTmFtZV0gPT09ICdmdW5jdGlvbicpID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IGludmFyaWFudChmYWxzZSwgJyVzOiAlcyB0eXBlIGAlc2AgaXMgaW52YWxpZDsgaXQgbXVzdCBiZSBhIGZ1bmN0aW9uLCB1c3VhbGx5IGZyb20gUmVhY3QuUHJvcFR5cGVzLicsIGNvbXBvbmVudE5hbWUgfHwgJ1JlYWN0IGNsYXNzJywgUmVhY3RQcm9wVHlwZUxvY2F0aW9uTmFtZXNbbG9jYXRpb25dLCB0eXBlU3BlY05hbWUpIDogX3Byb2RJbnZhcmlhbnQoJzg0JywgY29tcG9uZW50TmFtZSB8fCAnUmVhY3QgY2xhc3MnLCBSZWFjdFByb3BUeXBlTG9jYXRpb25OYW1lc1tsb2NhdGlvbl0sIHR5cGVTcGVjTmFtZSkgOiB2b2lkIDA7XG4gICAgICAgIGVycm9yID0gdHlwZVNwZWNzW3R5cGVTcGVjTmFtZV0odmFsdWVzLCB0eXBlU3BlY05hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBudWxsLCBSZWFjdFByb3BUeXBlc1NlY3JldCk7XG4gICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICBlcnJvciA9IGV4O1xuICAgICAgfVxuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcoIWVycm9yIHx8IGVycm9yIGluc3RhbmNlb2YgRXJyb3IsICclczogdHlwZSBzcGVjaWZpY2F0aW9uIG9mICVzIGAlc2AgaXMgaW52YWxpZDsgdGhlIHR5cGUgY2hlY2tlciAnICsgJ2Z1bmN0aW9uIG11c3QgcmV0dXJuIGBudWxsYCBvciBhbiBgRXJyb3JgIGJ1dCByZXR1cm5lZCBhICVzLiAnICsgJ1lvdSBtYXkgaGF2ZSBmb3Jnb3R0ZW4gdG8gcGFzcyBhbiBhcmd1bWVudCB0byB0aGUgdHlwZSBjaGVja2VyICcgKyAnY3JlYXRvciAoYXJyYXlPZiwgaW5zdGFuY2VPZiwgb2JqZWN0T2YsIG9uZU9mLCBvbmVPZlR5cGUsIGFuZCAnICsgJ3NoYXBlIGFsbCByZXF1aXJlIGFuIGFyZ3VtZW50KS4nLCBjb21wb25lbnROYW1lIHx8ICdSZWFjdCBjbGFzcycsIFJlYWN0UHJvcFR5cGVMb2NhdGlvbk5hbWVzW2xvY2F0aW9uXSwgdHlwZVNwZWNOYW1lLCB0eXBlb2YgZXJyb3IpIDogdm9pZCAwO1xuICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgJiYgIShlcnJvci5tZXNzYWdlIGluIGxvZ2dlZFR5cGVGYWlsdXJlcykpIHtcbiAgICAgICAgLy8gT25seSBtb25pdG9yIHRoaXMgZmFpbHVyZSBvbmNlIGJlY2F1c2UgdGhlcmUgdGVuZHMgdG8gYmUgYSBsb3Qgb2YgdGhlXG4gICAgICAgIC8vIHNhbWUgZXJyb3IuXG4gICAgICAgIGxvZ2dlZFR5cGVGYWlsdXJlc1tlcnJvci5tZXNzYWdlXSA9IHRydWU7XG5cbiAgICAgICAgdmFyIGNvbXBvbmVudFN0YWNrSW5mbyA9ICcnO1xuXG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgaWYgKCFSZWFjdENvbXBvbmVudFRyZWVIb29rKSB7XG4gICAgICAgICAgICBSZWFjdENvbXBvbmVudFRyZWVIb29rID0gcmVxdWlyZSgncmVhY3QvbGliL1JlYWN0Q29tcG9uZW50VHJlZUhvb2snKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGRlYnVnSUQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbXBvbmVudFN0YWNrSW5mbyA9IFJlYWN0Q29tcG9uZW50VHJlZUhvb2suZ2V0U3RhY2tBZGRlbmR1bUJ5SUQoZGVidWdJRCk7XG4gICAgICAgICAgfSBlbHNlIGlmIChlbGVtZW50ICE9PSBudWxsKSB7XG4gICAgICAgICAgICBjb21wb25lbnRTdGFja0luZm8gPSBSZWFjdENvbXBvbmVudFRyZWVIb29rLmdldEN1cnJlbnRTdGFja0FkZGVuZHVtKGVsZW1lbnQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKGZhbHNlLCAnRmFpbGVkICVzIHR5cGU6ICVzJXMnLCBsb2NhdGlvbiwgZXJyb3IubWVzc2FnZSwgY29tcG9uZW50U3RhY2tJbmZvKSA6IHZvaWQgMDtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjaGVja1JlYWN0VHlwZVNwZWM7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1kb20vbGliL2NoZWNrUmVhY3RUeXBlU3BlYy5qcyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBDU1NQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vQ1NTUHJvcGVydHknKTtcbnZhciB3YXJuaW5nID0gcmVxdWlyZSgnZmJqcy9saWIvd2FybmluZycpO1xuXG52YXIgaXNVbml0bGVzc051bWJlciA9IENTU1Byb3BlcnR5LmlzVW5pdGxlc3NOdW1iZXI7XG52YXIgc3R5bGVXYXJuaW5ncyA9IHt9O1xuXG4vKipcbiAqIENvbnZlcnQgYSB2YWx1ZSBpbnRvIHRoZSBwcm9wZXIgY3NzIHdyaXRhYmxlIHZhbHVlLiBUaGUgc3R5bGUgbmFtZSBgbmFtZWBcbiAqIHNob3VsZCBiZSBsb2dpY2FsIChubyBoeXBoZW5zKSwgYXMgc3BlY2lmaWVkXG4gKiBpbiBgQ1NTUHJvcGVydHkuaXNVbml0bGVzc051bWJlcmAuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgQ1NTIHByb3BlcnR5IG5hbWUgc3VjaCBhcyBgdG9wTWFyZ2luYC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgQ1NTIHByb3BlcnR5IHZhbHVlIHN1Y2ggYXMgYDEwcHhgLlxuICogQHBhcmFtIHtSZWFjdERPTUNvbXBvbmVudH0gY29tcG9uZW50XG4gKiBAcmV0dXJuIHtzdHJpbmd9IE5vcm1hbGl6ZWQgc3R5bGUgdmFsdWUgd2l0aCBkaW1lbnNpb25zIGFwcGxpZWQuXG4gKi9cbmZ1bmN0aW9uIGRhbmdlcm91c1N0eWxlVmFsdWUobmFtZSwgdmFsdWUsIGNvbXBvbmVudCwgaXNDdXN0b21Qcm9wZXJ0eSkge1xuICAvLyBOb3RlIHRoYXQgd2UndmUgcmVtb3ZlZCBlc2NhcGVUZXh0Rm9yQnJvd3NlcigpIGNhbGxzIGhlcmUgc2luY2UgdGhlXG4gIC8vIHdob2xlIHN0cmluZyB3aWxsIGJlIGVzY2FwZWQgd2hlbiB0aGUgYXR0cmlidXRlIGlzIGluamVjdGVkIGludG9cbiAgLy8gdGhlIG1hcmt1cC4gSWYgeW91IHByb3ZpZGUgdW5zYWZlIHVzZXIgZGF0YSBoZXJlIHRoZXkgY2FuIGluamVjdFxuICAvLyBhcmJpdHJhcnkgQ1NTIHdoaWNoIG1heSBiZSBwcm9ibGVtYXRpYyAoSSBjb3VsZG4ndCByZXBybyB0aGlzKTpcbiAgLy8gaHR0cHM6Ly93d3cub3dhc3Aub3JnL2luZGV4LnBocC9YU1NfRmlsdGVyX0V2YXNpb25fQ2hlYXRfU2hlZXRcbiAgLy8gaHR0cDovL3d3dy50aGVzcGFubmVyLmNvLnVrLzIwMDcvMTEvMjYvdWx0aW1hdGUteHNzLWNzcy1pbmplY3Rpb24vXG4gIC8vIFRoaXMgaXMgbm90IGFuIFhTUyBob2xlIGJ1dCBpbnN0ZWFkIGEgcG90ZW50aWFsIENTUyBpbmplY3Rpb24gaXNzdWVcbiAgLy8gd2hpY2ggaGFzIGxlYWQgdG8gYSBncmVhdGVyIGRpc2N1c3Npb24gYWJvdXQgaG93IHdlJ3JlIGdvaW5nIHRvXG4gIC8vIHRydXN0IFVSTHMgbW92aW5nIGZvcndhcmQuIFNlZSAjMjExNTkwMVxuXG4gIHZhciBpc0VtcHR5ID0gdmFsdWUgPT0gbnVsbCB8fCB0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJyB8fCB2YWx1ZSA9PT0gJyc7XG4gIGlmIChpc0VtcHR5KSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgdmFyIGlzTm9uTnVtZXJpYyA9IGlzTmFOKHZhbHVlKTtcbiAgaWYgKGlzQ3VzdG9tUHJvcGVydHkgfHwgaXNOb25OdW1lcmljIHx8IHZhbHVlID09PSAwIHx8IGlzVW5pdGxlc3NOdW1iZXIuaGFzT3duUHJvcGVydHkobmFtZSkgJiYgaXNVbml0bGVzc051bWJlcltuYW1lXSkge1xuICAgIHJldHVybiAnJyArIHZhbHVlOyAvLyBjYXN0IHRvIHN0cmluZ1xuICB9XG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgLy8gQWxsb3cgJzAnIHRvIHBhc3MgdGhyb3VnaCB3aXRob3V0IHdhcm5pbmcuIDAgaXMgYWxyZWFkeSBzcGVjaWFsIGFuZFxuICAgICAgLy8gZG9lc24ndCByZXF1aXJlIHVuaXRzLCBzbyB3ZSBkb24ndCBuZWVkIHRvIHdhcm4gYWJvdXQgaXQuXG4gICAgICBpZiAoY29tcG9uZW50ICYmIHZhbHVlICE9PSAnMCcpIHtcbiAgICAgICAgdmFyIG93bmVyID0gY29tcG9uZW50Ll9jdXJyZW50RWxlbWVudC5fb3duZXI7XG4gICAgICAgIHZhciBvd25lck5hbWUgPSBvd25lciA/IG93bmVyLmdldE5hbWUoKSA6IG51bGw7XG4gICAgICAgIGlmIChvd25lck5hbWUgJiYgIXN0eWxlV2FybmluZ3Nbb3duZXJOYW1lXSkge1xuICAgICAgICAgIHN0eWxlV2FybmluZ3Nbb3duZXJOYW1lXSA9IHt9O1xuICAgICAgICB9XG4gICAgICAgIHZhciB3YXJuZWQgPSBmYWxzZTtcbiAgICAgICAgaWYgKG93bmVyTmFtZSkge1xuICAgICAgICAgIHZhciB3YXJuaW5ncyA9IHN0eWxlV2FybmluZ3Nbb3duZXJOYW1lXTtcbiAgICAgICAgICB3YXJuZWQgPSB3YXJuaW5nc1tuYW1lXTtcbiAgICAgICAgICBpZiAoIXdhcm5lZCkge1xuICAgICAgICAgICAgd2FybmluZ3NbbmFtZV0gPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIXdhcm5lZCkge1xuICAgICAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKGZhbHNlLCAnYSBgJXNgIHRhZyAob3duZXI6IGAlc2ApIHdhcyBwYXNzZWQgYSBudW1lcmljIHN0cmluZyB2YWx1ZSAnICsgJ2ZvciBDU1MgcHJvcGVydHkgYCVzYCAodmFsdWU6IGAlc2ApIHdoaWNoIHdpbGwgYmUgdHJlYXRlZCAnICsgJ2FzIGEgdW5pdGxlc3MgbnVtYmVyIGluIGEgZnV0dXJlIHZlcnNpb24gb2YgUmVhY3QuJywgY29tcG9uZW50Ll9jdXJyZW50RWxlbWVudC50eXBlLCBvd25lck5hbWUgfHwgJ3Vua25vd24nLCBuYW1lLCB2YWx1ZSkgOiB2b2lkIDA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgdmFsdWUgPSB2YWx1ZS50cmltKCk7XG4gIH1cbiAgcmV0dXJuIHZhbHVlICsgJ3B4Jztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBkYW5nZXJvdXNTdHlsZVZhbHVlO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QtZG9tL2xpYi9kYW5nZXJvdXNTdHlsZVZhbHVlLmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIF9wcm9kSW52YXJpYW50ID0gcmVxdWlyZSgnLi9yZWFjdFByb2RJbnZhcmlhbnQnKTtcblxudmFyIFJlYWN0Q3VycmVudE93bmVyID0gcmVxdWlyZSgncmVhY3QvbGliL1JlYWN0Q3VycmVudE93bmVyJyk7XG52YXIgUmVhY3RET01Db21wb25lbnRUcmVlID0gcmVxdWlyZSgnLi9SZWFjdERPTUNvbXBvbmVudFRyZWUnKTtcbnZhciBSZWFjdEluc3RhbmNlTWFwID0gcmVxdWlyZSgnLi9SZWFjdEluc3RhbmNlTWFwJyk7XG5cbnZhciBnZXRIb3N0Q29tcG9uZW50RnJvbUNvbXBvc2l0ZSA9IHJlcXVpcmUoJy4vZ2V0SG9zdENvbXBvbmVudEZyb21Db21wb3NpdGUnKTtcbnZhciBpbnZhcmlhbnQgPSByZXF1aXJlKCdmYmpzL2xpYi9pbnZhcmlhbnQnKTtcbnZhciB3YXJuaW5nID0gcmVxdWlyZSgnZmJqcy9saWIvd2FybmluZycpO1xuXG4vKipcbiAqIFJldHVybnMgdGhlIERPTSBub2RlIHJlbmRlcmVkIGJ5IHRoaXMgZWxlbWVudC5cbiAqXG4gKiBTZWUgaHR0cHM6Ly9mYWNlYm9vay5naXRodWIuaW8vcmVhY3QvZG9jcy90b3AtbGV2ZWwtYXBpLmh0bWwjcmVhY3Rkb20uZmluZGRvbW5vZGVcbiAqXG4gKiBAcGFyYW0ge1JlYWN0Q29tcG9uZW50fERPTUVsZW1lbnR9IGNvbXBvbmVudE9yRWxlbWVudFxuICogQHJldHVybiB7P0RPTUVsZW1lbnR9IFRoZSByb290IG5vZGUgb2YgdGhpcyBlbGVtZW50LlxuICovXG5mdW5jdGlvbiBmaW5kRE9NTm9kZShjb21wb25lbnRPckVsZW1lbnQpIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICB2YXIgb3duZXIgPSBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50O1xuICAgIGlmIChvd25lciAhPT0gbnVsbCkge1xuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcob3duZXIuX3dhcm5lZEFib3V0UmVmc0luUmVuZGVyLCAnJXMgaXMgYWNjZXNzaW5nIGZpbmRET01Ob2RlIGluc2lkZSBpdHMgcmVuZGVyKCkuICcgKyAncmVuZGVyKCkgc2hvdWxkIGJlIGEgcHVyZSBmdW5jdGlvbiBvZiBwcm9wcyBhbmQgc3RhdGUuIEl0IHNob3VsZCAnICsgJ25ldmVyIGFjY2VzcyBzb21ldGhpbmcgdGhhdCByZXF1aXJlcyBzdGFsZSBkYXRhIGZyb20gdGhlIHByZXZpb3VzICcgKyAncmVuZGVyLCBzdWNoIGFzIHJlZnMuIE1vdmUgdGhpcyBsb2dpYyB0byBjb21wb25lbnREaWRNb3VudCBhbmQgJyArICdjb21wb25lbnREaWRVcGRhdGUgaW5zdGVhZC4nLCBvd25lci5nZXROYW1lKCkgfHwgJ0EgY29tcG9uZW50JykgOiB2b2lkIDA7XG4gICAgICBvd25lci5fd2FybmVkQWJvdXRSZWZzSW5SZW5kZXIgPSB0cnVlO1xuICAgIH1cbiAgfVxuICBpZiAoY29tcG9uZW50T3JFbGVtZW50ID09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBpZiAoY29tcG9uZW50T3JFbGVtZW50Lm5vZGVUeXBlID09PSAxKSB7XG4gICAgcmV0dXJuIGNvbXBvbmVudE9yRWxlbWVudDtcbiAgfVxuXG4gIHZhciBpbnN0ID0gUmVhY3RJbnN0YW5jZU1hcC5nZXQoY29tcG9uZW50T3JFbGVtZW50KTtcbiAgaWYgKGluc3QpIHtcbiAgICBpbnN0ID0gZ2V0SG9zdENvbXBvbmVudEZyb21Db21wb3NpdGUoaW5zdCk7XG4gICAgcmV0dXJuIGluc3QgPyBSZWFjdERPTUNvbXBvbmVudFRyZWUuZ2V0Tm9kZUZyb21JbnN0YW5jZShpbnN0KSA6IG51bGw7XG4gIH1cblxuICBpZiAodHlwZW9mIGNvbXBvbmVudE9yRWxlbWVudC5yZW5kZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAhZmFsc2UgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAnZmluZERPTU5vZGUgd2FzIGNhbGxlZCBvbiBhbiB1bm1vdW50ZWQgY29tcG9uZW50LicpIDogX3Byb2RJbnZhcmlhbnQoJzQ0JykgOiB2b2lkIDA7XG4gIH0gZWxzZSB7XG4gICAgIWZhbHNlID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IGludmFyaWFudChmYWxzZSwgJ0VsZW1lbnQgYXBwZWFycyB0byBiZSBuZWl0aGVyIFJlYWN0Q29tcG9uZW50IG5vciBET01Ob2RlIChrZXlzOiAlcyknLCBPYmplY3Qua2V5cyhjb21wb25lbnRPckVsZW1lbnQpKSA6IF9wcm9kSW52YXJpYW50KCc0NScsIE9iamVjdC5rZXlzKGNvbXBvbmVudE9yRWxlbWVudCkpIDogdm9pZCAwO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZmluZERPTU5vZGU7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1kb20vbGliL2ZpbmRET01Ob2RlLmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgS2V5RXNjYXBlVXRpbHMgPSByZXF1aXJlKCcuL0tleUVzY2FwZVV0aWxzJyk7XG52YXIgdHJhdmVyc2VBbGxDaGlsZHJlbiA9IHJlcXVpcmUoJy4vdHJhdmVyc2VBbGxDaGlsZHJlbicpO1xudmFyIHdhcm5pbmcgPSByZXF1aXJlKCdmYmpzL2xpYi93YXJuaW5nJyk7XG5cbnZhciBSZWFjdENvbXBvbmVudFRyZWVIb29rO1xuXG5pZiAodHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnICYmIHByb2Nlc3MuZW52ICYmIHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAndGVzdCcpIHtcbiAgLy8gVGVtcG9yYXJ5IGhhY2suXG4gIC8vIElubGluZSByZXF1aXJlcyBkb24ndCB3b3JrIHdlbGwgd2l0aCBKZXN0OlxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzcyNDBcbiAgLy8gUmVtb3ZlIHRoZSBpbmxpbmUgcmVxdWlyZXMgd2hlbiB3ZSBkb24ndCBuZWVkIHRoZW0gYW55bW9yZTpcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L3B1bGwvNzE3OFxuICBSZWFjdENvbXBvbmVudFRyZWVIb29rID0gcmVxdWlyZSgncmVhY3QvbGliL1JlYWN0Q29tcG9uZW50VHJlZUhvb2snKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSB0cmF2ZXJzZUNvbnRleHQgQ29udGV4dCBwYXNzZWQgdGhyb3VnaCB0cmF2ZXJzYWwuXG4gKiBAcGFyYW0gez9SZWFjdENvbXBvbmVudH0gY2hpbGQgUmVhY3QgY2hpbGQgY29tcG9uZW50LlxuICogQHBhcmFtIHshc3RyaW5nfSBuYW1lIFN0cmluZyBuYW1lIG9mIGtleSBwYXRoIHRvIGNoaWxkLlxuICogQHBhcmFtIHtudW1iZXI9fSBzZWxmRGVidWdJRCBPcHRpb25hbCBkZWJ1Z0lEIG9mIHRoZSBjdXJyZW50IGludGVybmFsIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBmbGF0dGVuU2luZ2xlQ2hpbGRJbnRvQ29udGV4dCh0cmF2ZXJzZUNvbnRleHQsIGNoaWxkLCBuYW1lLCBzZWxmRGVidWdJRCkge1xuICAvLyBXZSBmb3VuZCBhIGNvbXBvbmVudCBpbnN0YW5jZS5cbiAgaWYgKHRyYXZlcnNlQ29udGV4dCAmJiB0eXBlb2YgdHJhdmVyc2VDb250ZXh0ID09PSAnb2JqZWN0Jykge1xuICAgIHZhciByZXN1bHQgPSB0cmF2ZXJzZUNvbnRleHQ7XG4gICAgdmFyIGtleVVuaXF1ZSA9IHJlc3VsdFtuYW1lXSA9PT0gdW5kZWZpbmVkO1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBpZiAoIVJlYWN0Q29tcG9uZW50VHJlZUhvb2spIHtcbiAgICAgICAgUmVhY3RDb21wb25lbnRUcmVlSG9vayA9IHJlcXVpcmUoJ3JlYWN0L2xpYi9SZWFjdENvbXBvbmVudFRyZWVIb29rJyk7XG4gICAgICB9XG4gICAgICBpZiAoIWtleVVuaXF1ZSkge1xuICAgICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyhmYWxzZSwgJ2ZsYXR0ZW5DaGlsZHJlbiguLi4pOiBFbmNvdW50ZXJlZCB0d28gY2hpbGRyZW4gd2l0aCB0aGUgc2FtZSBrZXksICcgKyAnYCVzYC4gQ2hpbGQga2V5cyBtdXN0IGJlIHVuaXF1ZTsgd2hlbiB0d28gY2hpbGRyZW4gc2hhcmUgYSBrZXksIG9ubHkgJyArICd0aGUgZmlyc3QgY2hpbGQgd2lsbCBiZSB1c2VkLiVzJywgS2V5RXNjYXBlVXRpbHMudW5lc2NhcGUobmFtZSksIFJlYWN0Q29tcG9uZW50VHJlZUhvb2suZ2V0U3RhY2tBZGRlbmR1bUJ5SUQoc2VsZkRlYnVnSUQpKSA6IHZvaWQgMDtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGtleVVuaXF1ZSAmJiBjaGlsZCAhPSBudWxsKSB7XG4gICAgICByZXN1bHRbbmFtZV0gPSBjaGlsZDtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBGbGF0dGVucyBjaGlsZHJlbiB0aGF0IGFyZSB0eXBpY2FsbHkgc3BlY2lmaWVkIGFzIGBwcm9wcy5jaGlsZHJlbmAuIEFueSBudWxsXG4gKiBjaGlsZHJlbiB3aWxsIG5vdCBiZSBpbmNsdWRlZCBpbiB0aGUgcmVzdWx0aW5nIG9iamVjdC5cbiAqIEByZXR1cm4geyFvYmplY3R9IGZsYXR0ZW5lZCBjaGlsZHJlbiBrZXllZCBieSBuYW1lLlxuICovXG5mdW5jdGlvbiBmbGF0dGVuQ2hpbGRyZW4oY2hpbGRyZW4sIHNlbGZEZWJ1Z0lEKSB7XG4gIGlmIChjaGlsZHJlbiA9PSBudWxsKSB7XG4gICAgcmV0dXJuIGNoaWxkcmVuO1xuICB9XG4gIHZhciByZXN1bHQgPSB7fTtcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIHRyYXZlcnNlQWxsQ2hpbGRyZW4oY2hpbGRyZW4sIGZ1bmN0aW9uICh0cmF2ZXJzZUNvbnRleHQsIGNoaWxkLCBuYW1lKSB7XG4gICAgICByZXR1cm4gZmxhdHRlblNpbmdsZUNoaWxkSW50b0NvbnRleHQodHJhdmVyc2VDb250ZXh0LCBjaGlsZCwgbmFtZSwgc2VsZkRlYnVnSUQpO1xuICAgIH0sIHJlc3VsdCk7XG4gIH0gZWxzZSB7XG4gICAgdHJhdmVyc2VBbGxDaGlsZHJlbihjaGlsZHJlbiwgZmxhdHRlblNpbmdsZUNoaWxkSW50b0NvbnRleHQsIHJlc3VsdCk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmbGF0dGVuQ2hpbGRyZW47XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1kb20vbGliL2ZsYXR0ZW5DaGlsZHJlbi5qcyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBnZXRFdmVudENoYXJDb2RlID0gcmVxdWlyZSgnLi9nZXRFdmVudENoYXJDb2RlJyk7XG5cbi8qKlxuICogTm9ybWFsaXphdGlvbiBvZiBkZXByZWNhdGVkIEhUTUw1IGBrZXlgIHZhbHVlc1xuICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvS2V5Ym9hcmRFdmVudCNLZXlfbmFtZXNcbiAqL1xudmFyIG5vcm1hbGl6ZUtleSA9IHtcbiAgRXNjOiAnRXNjYXBlJyxcbiAgU3BhY2ViYXI6ICcgJyxcbiAgTGVmdDogJ0Fycm93TGVmdCcsXG4gIFVwOiAnQXJyb3dVcCcsXG4gIFJpZ2h0OiAnQXJyb3dSaWdodCcsXG4gIERvd246ICdBcnJvd0Rvd24nLFxuICBEZWw6ICdEZWxldGUnLFxuICBXaW46ICdPUycsXG4gIE1lbnU6ICdDb250ZXh0TWVudScsXG4gIEFwcHM6ICdDb250ZXh0TWVudScsXG4gIFNjcm9sbDogJ1Njcm9sbExvY2snLFxuICBNb3pQcmludGFibGVLZXk6ICdVbmlkZW50aWZpZWQnXG59O1xuXG4vKipcbiAqIFRyYW5zbGF0aW9uIGZyb20gbGVnYWN5IGBrZXlDb2RlYCB0byBIVE1MNSBga2V5YFxuICogT25seSBzcGVjaWFsIGtleXMgc3VwcG9ydGVkLCBhbGwgb3RoZXJzIGRlcGVuZCBvbiBrZXlib2FyZCBsYXlvdXQgb3IgYnJvd3NlclxuICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvS2V5Ym9hcmRFdmVudCNLZXlfbmFtZXNcbiAqL1xudmFyIHRyYW5zbGF0ZVRvS2V5ID0ge1xuICA4OiAnQmFja3NwYWNlJyxcbiAgOTogJ1RhYicsXG4gIDEyOiAnQ2xlYXInLFxuICAxMzogJ0VudGVyJyxcbiAgMTY6ICdTaGlmdCcsXG4gIDE3OiAnQ29udHJvbCcsXG4gIDE4OiAnQWx0JyxcbiAgMTk6ICdQYXVzZScsXG4gIDIwOiAnQ2Fwc0xvY2snLFxuICAyNzogJ0VzY2FwZScsXG4gIDMyOiAnICcsXG4gIDMzOiAnUGFnZVVwJyxcbiAgMzQ6ICdQYWdlRG93bicsXG4gIDM1OiAnRW5kJyxcbiAgMzY6ICdIb21lJyxcbiAgMzc6ICdBcnJvd0xlZnQnLFxuICAzODogJ0Fycm93VXAnLFxuICAzOTogJ0Fycm93UmlnaHQnLFxuICA0MDogJ0Fycm93RG93bicsXG4gIDQ1OiAnSW5zZXJ0JyxcbiAgNDY6ICdEZWxldGUnLFxuICAxMTI6ICdGMScsXG4gIDExMzogJ0YyJyxcbiAgMTE0OiAnRjMnLFxuICAxMTU6ICdGNCcsXG4gIDExNjogJ0Y1JyxcbiAgMTE3OiAnRjYnLFxuICAxMTg6ICdGNycsXG4gIDExOTogJ0Y4JyxcbiAgMTIwOiAnRjknLFxuICAxMjE6ICdGMTAnLFxuICAxMjI6ICdGMTEnLFxuICAxMjM6ICdGMTInLFxuICAxNDQ6ICdOdW1Mb2NrJyxcbiAgMTQ1OiAnU2Nyb2xsTG9jaycsXG4gIDIyNDogJ01ldGEnXG59O1xuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSBuYXRpdmVFdmVudCBOYXRpdmUgYnJvd3NlciBldmVudC5cbiAqIEByZXR1cm4ge3N0cmluZ30gTm9ybWFsaXplZCBga2V5YCBwcm9wZXJ0eS5cbiAqL1xuZnVuY3Rpb24gZ2V0RXZlbnRLZXkobmF0aXZlRXZlbnQpIHtcbiAgaWYgKG5hdGl2ZUV2ZW50LmtleSkge1xuICAgIC8vIE5vcm1hbGl6ZSBpbmNvbnNpc3RlbnQgdmFsdWVzIHJlcG9ydGVkIGJ5IGJyb3dzZXJzIGR1ZSB0b1xuICAgIC8vIGltcGxlbWVudGF0aW9ucyBvZiBhIHdvcmtpbmcgZHJhZnQgc3BlY2lmaWNhdGlvbi5cblxuICAgIC8vIEZpcmVGb3ggaW1wbGVtZW50cyBga2V5YCBidXQgcmV0dXJucyBgTW96UHJpbnRhYmxlS2V5YCBmb3IgYWxsXG4gICAgLy8gcHJpbnRhYmxlIGNoYXJhY3RlcnMgKG5vcm1hbGl6ZWQgdG8gYFVuaWRlbnRpZmllZGApLCBpZ25vcmUgaXQuXG4gICAgdmFyIGtleSA9IG5vcm1hbGl6ZUtleVtuYXRpdmVFdmVudC5rZXldIHx8IG5hdGl2ZUV2ZW50LmtleTtcbiAgICBpZiAoa2V5ICE9PSAnVW5pZGVudGlmaWVkJykge1xuICAgICAgcmV0dXJuIGtleTtcbiAgICB9XG4gIH1cblxuICAvLyBCcm93c2VyIGRvZXMgbm90IGltcGxlbWVudCBga2V5YCwgcG9seWZpbGwgYXMgbXVjaCBvZiBpdCBhcyB3ZSBjYW4uXG4gIGlmIChuYXRpdmVFdmVudC50eXBlID09PSAna2V5cHJlc3MnKSB7XG4gICAgdmFyIGNoYXJDb2RlID0gZ2V0RXZlbnRDaGFyQ29kZShuYXRpdmVFdmVudCk7XG5cbiAgICAvLyBUaGUgZW50ZXIta2V5IGlzIHRlY2huaWNhbGx5IGJvdGggcHJpbnRhYmxlIGFuZCBub24tcHJpbnRhYmxlIGFuZCBjYW5cbiAgICAvLyB0aHVzIGJlIGNhcHR1cmVkIGJ5IGBrZXlwcmVzc2AsIG5vIG90aGVyIG5vbi1wcmludGFibGUga2V5IHNob3VsZC5cbiAgICByZXR1cm4gY2hhckNvZGUgPT09IDEzID8gJ0VudGVyJyA6IFN0cmluZy5mcm9tQ2hhckNvZGUoY2hhckNvZGUpO1xuICB9XG4gIGlmIChuYXRpdmVFdmVudC50eXBlID09PSAna2V5ZG93bicgfHwgbmF0aXZlRXZlbnQudHlwZSA9PT0gJ2tleXVwJykge1xuICAgIC8vIFdoaWxlIHVzZXIga2V5Ym9hcmQgbGF5b3V0IGRldGVybWluZXMgdGhlIGFjdHVhbCBtZWFuaW5nIG9mIGVhY2hcbiAgICAvLyBga2V5Q29kZWAgdmFsdWUsIGFsbW9zdCBhbGwgZnVuY3Rpb24ga2V5cyBoYXZlIGEgdW5pdmVyc2FsIHZhbHVlLlxuICAgIHJldHVybiB0cmFuc2xhdGVUb0tleVtuYXRpdmVFdmVudC5rZXlDb2RlXSB8fCAnVW5pZGVudGlmaWVkJztcbiAgfVxuICByZXR1cm4gJyc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0RXZlbnRLZXk7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1kb20vbGliL2dldEV2ZW50S2V5LmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG4vKiBnbG9iYWwgU3ltYm9sICovXG5cbnZhciBJVEVSQVRPUl9TWU1CT0wgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5pdGVyYXRvcjtcbnZhciBGQVVYX0lURVJBVE9SX1NZTUJPTCA9ICdAQGl0ZXJhdG9yJzsgLy8gQmVmb3JlIFN5bWJvbCBzcGVjLlxuXG4vKipcbiAqIFJldHVybnMgdGhlIGl0ZXJhdG9yIG1ldGhvZCBmdW5jdGlvbiBjb250YWluZWQgb24gdGhlIGl0ZXJhYmxlIG9iamVjdC5cbiAqXG4gKiBCZSBzdXJlIHRvIGludm9rZSB0aGUgZnVuY3Rpb24gd2l0aCB0aGUgaXRlcmFibGUgYXMgY29udGV4dDpcbiAqXG4gKiAgICAgdmFyIGl0ZXJhdG9yRm4gPSBnZXRJdGVyYXRvckZuKG15SXRlcmFibGUpO1xuICogICAgIGlmIChpdGVyYXRvckZuKSB7XG4gKiAgICAgICB2YXIgaXRlcmF0b3IgPSBpdGVyYXRvckZuLmNhbGwobXlJdGVyYWJsZSk7XG4gKiAgICAgICAuLi5cbiAqICAgICB9XG4gKlxuICogQHBhcmFtIHs/b2JqZWN0fSBtYXliZUl0ZXJhYmxlXG4gKiBAcmV0dXJuIHs/ZnVuY3Rpb259XG4gKi9cbmZ1bmN0aW9uIGdldEl0ZXJhdG9yRm4obWF5YmVJdGVyYWJsZSkge1xuICB2YXIgaXRlcmF0b3JGbiA9IG1heWJlSXRlcmFibGUgJiYgKElURVJBVE9SX1NZTUJPTCAmJiBtYXliZUl0ZXJhYmxlW0lURVJBVE9SX1NZTUJPTF0gfHwgbWF5YmVJdGVyYWJsZVtGQVVYX0lURVJBVE9SX1NZTUJPTF0pO1xuICBpZiAodHlwZW9mIGl0ZXJhdG9yRm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gaXRlcmF0b3JGbjtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEl0ZXJhdG9yRm47XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1kb20vbGliL2dldEl0ZXJhdG9yRm4uanMiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIEdpdmVuIGFueSBub2RlIHJldHVybiB0aGUgZmlyc3QgbGVhZiBub2RlIHdpdGhvdXQgY2hpbGRyZW4uXG4gKlxuICogQHBhcmFtIHtET01FbGVtZW50fERPTVRleHROb2RlfSBub2RlXG4gKiBAcmV0dXJuIHtET01FbGVtZW50fERPTVRleHROb2RlfVxuICovXG5cbmZ1bmN0aW9uIGdldExlYWZOb2RlKG5vZGUpIHtcbiAgd2hpbGUgKG5vZGUgJiYgbm9kZS5maXJzdENoaWxkKSB7XG4gICAgbm9kZSA9IG5vZGUuZmlyc3RDaGlsZDtcbiAgfVxuICByZXR1cm4gbm9kZTtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIG5leHQgc2libGluZyB3aXRoaW4gYSBjb250YWluZXIuIFRoaXMgd2lsbCB3YWxrIHVwIHRoZVxuICogRE9NIGlmIGEgbm9kZSdzIHNpYmxpbmdzIGhhdmUgYmVlbiBleGhhdXN0ZWQuXG4gKlxuICogQHBhcmFtIHtET01FbGVtZW50fERPTVRleHROb2RlfSBub2RlXG4gKiBAcmV0dXJuIHs/RE9NRWxlbWVudHxET01UZXh0Tm9kZX1cbiAqL1xuZnVuY3Rpb24gZ2V0U2libGluZ05vZGUobm9kZSkge1xuICB3aGlsZSAobm9kZSkge1xuICAgIGlmIChub2RlLm5leHRTaWJsaW5nKSB7XG4gICAgICByZXR1cm4gbm9kZS5uZXh0U2libGluZztcbiAgICB9XG4gICAgbm9kZSA9IG5vZGUucGFyZW50Tm9kZTtcbiAgfVxufVxuXG4vKipcbiAqIEdldCBvYmplY3QgZGVzY3JpYmluZyB0aGUgbm9kZXMgd2hpY2ggY29udGFpbiBjaGFyYWN0ZXJzIGF0IG9mZnNldC5cbiAqXG4gKiBAcGFyYW0ge0RPTUVsZW1lbnR8RE9NVGV4dE5vZGV9IHJvb3RcbiAqIEBwYXJhbSB7bnVtYmVyfSBvZmZzZXRcbiAqIEByZXR1cm4gez9vYmplY3R9XG4gKi9cbmZ1bmN0aW9uIGdldE5vZGVGb3JDaGFyYWN0ZXJPZmZzZXQocm9vdCwgb2Zmc2V0KSB7XG4gIHZhciBub2RlID0gZ2V0TGVhZk5vZGUocm9vdCk7XG4gIHZhciBub2RlU3RhcnQgPSAwO1xuICB2YXIgbm9kZUVuZCA9IDA7XG5cbiAgd2hpbGUgKG5vZGUpIHtcbiAgICBpZiAobm9kZS5ub2RlVHlwZSA9PT0gMykge1xuICAgICAgbm9kZUVuZCA9IG5vZGVTdGFydCArIG5vZGUudGV4dENvbnRlbnQubGVuZ3RoO1xuXG4gICAgICBpZiAobm9kZVN0YXJ0IDw9IG9mZnNldCAmJiBub2RlRW5kID49IG9mZnNldCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG5vZGU6IG5vZGUsXG4gICAgICAgICAgb2Zmc2V0OiBvZmZzZXQgLSBub2RlU3RhcnRcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgbm9kZVN0YXJ0ID0gbm9kZUVuZDtcbiAgICB9XG5cbiAgICBub2RlID0gZ2V0TGVhZk5vZGUoZ2V0U2libGluZ05vZGUobm9kZSkpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0Tm9kZUZvckNoYXJhY3Rlck9mZnNldDtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3JlYWN0LWRvbS9saWIvZ2V0Tm9kZUZvckNoYXJhY3Rlck9mZnNldC5qcyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBFeGVjdXRpb25FbnZpcm9ubWVudCA9IHJlcXVpcmUoJ2ZianMvbGliL0V4ZWN1dGlvbkVudmlyb25tZW50Jyk7XG5cbi8qKlxuICogR2VuZXJhdGUgYSBtYXBwaW5nIG9mIHN0YW5kYXJkIHZlbmRvciBwcmVmaXhlcyB1c2luZyB0aGUgZGVmaW5lZCBzdHlsZSBwcm9wZXJ0eSBhbmQgZXZlbnQgbmFtZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc3R5bGVQcm9wXG4gKiBAcGFyYW0ge3N0cmluZ30gZXZlbnROYW1lXG4gKiBAcmV0dXJucyB7b2JqZWN0fVxuICovXG5mdW5jdGlvbiBtYWtlUHJlZml4TWFwKHN0eWxlUHJvcCwgZXZlbnROYW1lKSB7XG4gIHZhciBwcmVmaXhlcyA9IHt9O1xuXG4gIHByZWZpeGVzW3N0eWxlUHJvcC50b0xvd2VyQ2FzZSgpXSA9IGV2ZW50TmFtZS50b0xvd2VyQ2FzZSgpO1xuICBwcmVmaXhlc1snV2Via2l0JyArIHN0eWxlUHJvcF0gPSAnd2Via2l0JyArIGV2ZW50TmFtZTtcbiAgcHJlZml4ZXNbJ01veicgKyBzdHlsZVByb3BdID0gJ21veicgKyBldmVudE5hbWU7XG4gIHByZWZpeGVzWydtcycgKyBzdHlsZVByb3BdID0gJ01TJyArIGV2ZW50TmFtZTtcbiAgcHJlZml4ZXNbJ08nICsgc3R5bGVQcm9wXSA9ICdvJyArIGV2ZW50TmFtZS50b0xvd2VyQ2FzZSgpO1xuXG4gIHJldHVybiBwcmVmaXhlcztcbn1cblxuLyoqXG4gKiBBIGxpc3Qgb2YgZXZlbnQgbmFtZXMgdG8gYSBjb25maWd1cmFibGUgbGlzdCBvZiB2ZW5kb3IgcHJlZml4ZXMuXG4gKi9cbnZhciB2ZW5kb3JQcmVmaXhlcyA9IHtcbiAgYW5pbWF0aW9uZW5kOiBtYWtlUHJlZml4TWFwKCdBbmltYXRpb24nLCAnQW5pbWF0aW9uRW5kJyksXG4gIGFuaW1hdGlvbml0ZXJhdGlvbjogbWFrZVByZWZpeE1hcCgnQW5pbWF0aW9uJywgJ0FuaW1hdGlvbkl0ZXJhdGlvbicpLFxuICBhbmltYXRpb25zdGFydDogbWFrZVByZWZpeE1hcCgnQW5pbWF0aW9uJywgJ0FuaW1hdGlvblN0YXJ0JyksXG4gIHRyYW5zaXRpb25lbmQ6IG1ha2VQcmVmaXhNYXAoJ1RyYW5zaXRpb24nLCAnVHJhbnNpdGlvbkVuZCcpXG59O1xuXG4vKipcbiAqIEV2ZW50IG5hbWVzIHRoYXQgaGF2ZSBhbHJlYWR5IGJlZW4gZGV0ZWN0ZWQgYW5kIHByZWZpeGVkIChpZiBhcHBsaWNhYmxlKS5cbiAqL1xudmFyIHByZWZpeGVkRXZlbnROYW1lcyA9IHt9O1xuXG4vKipcbiAqIEVsZW1lbnQgdG8gY2hlY2sgZm9yIHByZWZpeGVzIG9uLlxuICovXG52YXIgc3R5bGUgPSB7fTtcblxuLyoqXG4gKiBCb290c3RyYXAgaWYgYSBET00gZXhpc3RzLlxuICovXG5pZiAoRXhlY3V0aW9uRW52aXJvbm1lbnQuY2FuVXNlRE9NKSB7XG4gIHN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jykuc3R5bGU7XG5cbiAgLy8gT24gc29tZSBwbGF0Zm9ybXMsIGluIHBhcnRpY3VsYXIgc29tZSByZWxlYXNlcyBvZiBBbmRyb2lkIDQueCxcbiAgLy8gdGhlIHVuLXByZWZpeGVkIFwiYW5pbWF0aW9uXCIgYW5kIFwidHJhbnNpdGlvblwiIHByb3BlcnRpZXMgYXJlIGRlZmluZWQgb24gdGhlXG4gIC8vIHN0eWxlIG9iamVjdCBidXQgdGhlIGV2ZW50cyB0aGF0IGZpcmUgd2lsbCBzdGlsbCBiZSBwcmVmaXhlZCwgc28gd2UgbmVlZFxuICAvLyB0byBjaGVjayBpZiB0aGUgdW4tcHJlZml4ZWQgZXZlbnRzIGFyZSB1c2FibGUsIGFuZCBpZiBub3QgcmVtb3ZlIHRoZW0gZnJvbSB0aGUgbWFwLlxuICBpZiAoISgnQW5pbWF0aW9uRXZlbnQnIGluIHdpbmRvdykpIHtcbiAgICBkZWxldGUgdmVuZG9yUHJlZml4ZXMuYW5pbWF0aW9uZW5kLmFuaW1hdGlvbjtcbiAgICBkZWxldGUgdmVuZG9yUHJlZml4ZXMuYW5pbWF0aW9uaXRlcmF0aW9uLmFuaW1hdGlvbjtcbiAgICBkZWxldGUgdmVuZG9yUHJlZml4ZXMuYW5pbWF0aW9uc3RhcnQuYW5pbWF0aW9uO1xuICB9XG5cbiAgLy8gU2FtZSBhcyBhYm92ZVxuICBpZiAoISgnVHJhbnNpdGlvbkV2ZW50JyBpbiB3aW5kb3cpKSB7XG4gICAgZGVsZXRlIHZlbmRvclByZWZpeGVzLnRyYW5zaXRpb25lbmQudHJhbnNpdGlvbjtcbiAgfVxufVxuXG4vKipcbiAqIEF0dGVtcHRzIHRvIGRldGVybWluZSB0aGUgY29ycmVjdCB2ZW5kb3IgcHJlZml4ZWQgZXZlbnQgbmFtZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZXZlbnROYW1lXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBnZXRWZW5kb3JQcmVmaXhlZEV2ZW50TmFtZShldmVudE5hbWUpIHtcbiAgaWYgKHByZWZpeGVkRXZlbnROYW1lc1tldmVudE5hbWVdKSB7XG4gICAgcmV0dXJuIHByZWZpeGVkRXZlbnROYW1lc1tldmVudE5hbWVdO1xuICB9IGVsc2UgaWYgKCF2ZW5kb3JQcmVmaXhlc1tldmVudE5hbWVdKSB7XG4gICAgcmV0dXJuIGV2ZW50TmFtZTtcbiAgfVxuXG4gIHZhciBwcmVmaXhNYXAgPSB2ZW5kb3JQcmVmaXhlc1tldmVudE5hbWVdO1xuXG4gIGZvciAodmFyIHN0eWxlUHJvcCBpbiBwcmVmaXhNYXApIHtcbiAgICBpZiAocHJlZml4TWFwLmhhc093blByb3BlcnR5KHN0eWxlUHJvcCkgJiYgc3R5bGVQcm9wIGluIHN0eWxlKSB7XG4gICAgICByZXR1cm4gcHJlZml4ZWRFdmVudE5hbWVzW2V2ZW50TmFtZV0gPSBwcmVmaXhNYXBbc3R5bGVQcm9wXTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gJyc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0VmVuZG9yUHJlZml4ZWRFdmVudE5hbWU7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1kb20vbGliL2dldFZlbmRvclByZWZpeGVkRXZlbnROYW1lLmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIGVzY2FwZVRleHRDb250ZW50Rm9yQnJvd3NlciA9IHJlcXVpcmUoJy4vZXNjYXBlVGV4dENvbnRlbnRGb3JCcm93c2VyJyk7XG5cbi8qKlxuICogRXNjYXBlcyBhdHRyaWJ1dGUgdmFsdWUgdG8gcHJldmVudCBzY3JpcHRpbmcgYXR0YWNrcy5cbiAqXG4gKiBAcGFyYW0geyp9IHZhbHVlIFZhbHVlIHRvIGVzY2FwZS5cbiAqIEByZXR1cm4ge3N0cmluZ30gQW4gZXNjYXBlZCBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIHF1b3RlQXR0cmlidXRlVmFsdWVGb3JCcm93c2VyKHZhbHVlKSB7XG4gIHJldHVybiAnXCInICsgZXNjYXBlVGV4dENvbnRlbnRGb3JCcm93c2VyKHZhbHVlKSArICdcIic7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcXVvdGVBdHRyaWJ1dGVWYWx1ZUZvckJyb3dzZXI7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1kb20vbGliL3F1b3RlQXR0cmlidXRlVmFsdWVGb3JCcm93c2VyLmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0TW91bnQgPSByZXF1aXJlKCcuL1JlYWN0TW91bnQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdE1vdW50LnJlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QtZG9tL2xpYi9yZW5kZXJTdWJ0cmVlSW50b0NvbnRhaW5lci5qcyIsInZhciBSZWFjdCA9IHJlcXVpcmUoJ3JlYWN0Jyk7XG5cbnZhciBGaWxlSW5wdXQgPSBSZWFjdC5jcmVhdGVDbGFzcyh7XG4gIGdldEluaXRpYWxTdGF0ZTogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHZhbHVlOiAnJyxcbiAgICAgIHN0eWxlczoge1xuICAgICAgICBwYXJlbnQ6IHtcbiAgICAgICAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJ1xuICAgICAgICB9LFxuICAgICAgICBmaWxlOiB7XG4gICAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICAgICAgdG9wOiAwLFxuICAgICAgICAgIGxlZnQ6IDAsXG4gICAgICAgICAgb3BhY2l0eTogMCxcbiAgICAgICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgICAgIHpJbmRleDogMVxuICAgICAgICB9LFxuICAgICAgICB0ZXh0OiB7XG4gICAgICAgICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gICAgICAgICAgekluZGV4OiAtMVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgfSxcblxuICBoYW5kbGVDaGFuZ2U6IGZ1bmN0aW9uKGUpIHtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIHZhbHVlOiBlLnRhcmdldC52YWx1ZS5zcGxpdCgvKFxcXFx8XFwvKS9nKS5wb3AoKVxuICAgIH0pO1xuICAgIGlmICh0aGlzLnByb3BzLm9uQ2hhbmdlKSB0aGlzLnByb3BzLm9uQ2hhbmdlKGUpO1xuICB9LFxuXG4gIHJlbmRlcjogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIFJlYWN0LkRPTS5kaXYoe1xuICAgICAgICBzdHlsZTogdGhpcy5zdGF0ZS5zdHlsZXMucGFyZW50XG4gICAgICB9LFxuXG4gICAgICAvLyBBY3R1YWwgZmlsZSBpbnB1dFxuICAgICAgUmVhY3QuRE9NLmlucHV0KHtcbiAgICAgICAgdHlwZTogJ2ZpbGUnLFxuICAgICAgICBuYW1lOiB0aGlzLnByb3BzLm5hbWUsXG4gICAgICAgIGNsYXNzTmFtZTogdGhpcy5wcm9wcy5jbGFzc05hbWUsXG4gICAgICAgIG9uQ2hhbmdlOiB0aGlzLmhhbmRsZUNoYW5nZSxcbiAgICAgICAgZGlzYWJsZWQ6IHRoaXMucHJvcHMuZGlzYWJsZWQsXG4gICAgICAgIGFjY2VwdDogdGhpcy5wcm9wcy5hY2NlcHQsXG4gICAgICAgIHN0eWxlOiB0aGlzLnN0YXRlLnN0eWxlcy5maWxlXG4gICAgICB9KSxcblxuICAgICAgLy8gRW11bGF0ZWQgZmlsZSBpbnB1dFxuICAgICAgUmVhY3QuRE9NLmlucHV0KHtcbiAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICB0YWJJbmRleDogLTEsXG4gICAgICAgIG5hbWU6IHRoaXMucHJvcHMubmFtZSArICdfZmlsZW5hbWUnLFxuICAgICAgICB2YWx1ZTogdGhpcy5zdGF0ZS52YWx1ZSxcbiAgICAgICAgY2xhc3NOYW1lOiB0aGlzLnByb3BzLmNsYXNzTmFtZSxcbiAgICAgICAgb25DaGFuZ2U6IGZ1bmN0aW9uKCkge30sXG4gICAgICAgIHBsYWNlaG9sZGVyOiB0aGlzLnByb3BzLnBsYWNlaG9sZGVyLFxuICAgICAgICBkaXNhYmxlZDogdGhpcy5wcm9wcy5kaXNhYmxlZCxcbiAgICAgICAgc3R5bGU6IHRoaXMuc3RhdGUuc3R5bGVzLnRleHRcbiAgICAgIH0pKTtcbiAgfVxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gRmlsZUlucHV0O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1maWxlLWlucHV0L2xpYi9pbmRleC5qcyIsImZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKCFzZWxmKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gY2FsbCAmJiAodHlwZW9mIGNhbGwgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikgPyBjYWxsIDogc2VsZjsgfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcIiArIHR5cGVvZiBzdXBlckNsYXNzKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCBlbnVtZXJhYmxlOiBmYWxzZSwgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKSA6IHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7IH1cblxuaW1wb3J0IHsgQ29tcG9uZW50LCBDaGlsZHJlbiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgeyBzdG9yZVNoYXBlLCBzdWJzY3JpcHRpb25TaGFwZSB9IGZyb20gJy4uL3V0aWxzL1Byb3BUeXBlcyc7XG5pbXBvcnQgd2FybmluZyBmcm9tICcuLi91dGlscy93YXJuaW5nJztcblxudmFyIGRpZFdhcm5BYm91dFJlY2VpdmluZ1N0b3JlID0gZmFsc2U7XG5mdW5jdGlvbiB3YXJuQWJvdXRSZWNlaXZpbmdTdG9yZSgpIHtcbiAgaWYgKGRpZFdhcm5BYm91dFJlY2VpdmluZ1N0b3JlKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGRpZFdhcm5BYm91dFJlY2VpdmluZ1N0b3JlID0gdHJ1ZTtcblxuICB3YXJuaW5nKCc8UHJvdmlkZXI+IGRvZXMgbm90IHN1cHBvcnQgY2hhbmdpbmcgYHN0b3JlYCBvbiB0aGUgZmx5LiAnICsgJ0l0IGlzIG1vc3QgbGlrZWx5IHRoYXQgeW91IHNlZSB0aGlzIGVycm9yIGJlY2F1c2UgeW91IHVwZGF0ZWQgdG8gJyArICdSZWR1eCAyLnggYW5kIFJlYWN0IFJlZHV4IDIueCB3aGljaCBubyBsb25nZXIgaG90IHJlbG9hZCByZWR1Y2VycyAnICsgJ2F1dG9tYXRpY2FsbHkuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vcmVhY3Rqcy9yZWFjdC1yZWR1eC9yZWxlYXNlcy8nICsgJ3RhZy92Mi4wLjAgZm9yIHRoZSBtaWdyYXRpb24gaW5zdHJ1Y3Rpb25zLicpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUHJvdmlkZXIoKSB7XG4gIHZhciBfUHJvdmlkZXIkY2hpbGRDb250ZXg7XG5cbiAgdmFyIHN0b3JlS2V5ID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiAnc3RvcmUnO1xuICB2YXIgc3ViS2V5ID0gYXJndW1lbnRzWzFdO1xuXG4gIHZhciBzdWJzY3JpcHRpb25LZXkgPSBzdWJLZXkgfHwgc3RvcmVLZXkgKyAnU3Vic2NyaXB0aW9uJztcblxuICB2YXIgUHJvdmlkZXIgPSBmdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICAgIF9pbmhlcml0cyhQcm92aWRlciwgX0NvbXBvbmVudCk7XG5cbiAgICBQcm92aWRlci5wcm90b3R5cGUuZ2V0Q2hpbGRDb250ZXh0ID0gZnVuY3Rpb24gZ2V0Q2hpbGRDb250ZXh0KCkge1xuICAgICAgdmFyIF9yZWY7XG5cbiAgICAgIHJldHVybiBfcmVmID0ge30sIF9yZWZbc3RvcmVLZXldID0gdGhpc1tzdG9yZUtleV0sIF9yZWZbc3Vic2NyaXB0aW9uS2V5XSA9IG51bGwsIF9yZWY7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIFByb3ZpZGVyKHByb3BzLCBjb250ZXh0KSB7XG4gICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgUHJvdmlkZXIpO1xuXG4gICAgICB2YXIgX3RoaXMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCBfQ29tcG9uZW50LmNhbGwodGhpcywgcHJvcHMsIGNvbnRleHQpKTtcblxuICAgICAgX3RoaXNbc3RvcmVLZXldID0gcHJvcHMuc3RvcmU7XG4gICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuXG4gICAgUHJvdmlkZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHJldHVybiBDaGlsZHJlbi5vbmx5KHRoaXMucHJvcHMuY2hpbGRyZW4pO1xuICAgIH07XG5cbiAgICByZXR1cm4gUHJvdmlkZXI7XG4gIH0oQ29tcG9uZW50KTtcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIFByb3ZpZGVyLnByb3RvdHlwZS5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzID0gZnVuY3Rpb24gKG5leHRQcm9wcykge1xuICAgICAgaWYgKHRoaXNbc3RvcmVLZXldICE9PSBuZXh0UHJvcHMuc3RvcmUpIHtcbiAgICAgICAgd2FybkFib3V0UmVjZWl2aW5nU3RvcmUoKTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgUHJvdmlkZXIucHJvcFR5cGVzID0ge1xuICAgIHN0b3JlOiBzdG9yZVNoYXBlLmlzUmVxdWlyZWQsXG4gICAgY2hpbGRyZW46IFByb3BUeXBlcy5lbGVtZW50LmlzUmVxdWlyZWRcbiAgfTtcbiAgUHJvdmlkZXIuY2hpbGRDb250ZXh0VHlwZXMgPSAoX1Byb3ZpZGVyJGNoaWxkQ29udGV4ID0ge30sIF9Qcm92aWRlciRjaGlsZENvbnRleFtzdG9yZUtleV0gPSBzdG9yZVNoYXBlLmlzUmVxdWlyZWQsIF9Qcm92aWRlciRjaGlsZENvbnRleFtzdWJzY3JpcHRpb25LZXldID0gc3Vic2NyaXB0aW9uU2hhcGUsIF9Qcm92aWRlciRjaGlsZENvbnRleCk7XG4gIFByb3ZpZGVyLmRpc3BsYXlOYW1lID0gJ1Byb3ZpZGVyJztcblxuICByZXR1cm4gUHJvdmlkZXI7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZVByb3ZpZGVyKCk7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1yZWR1eC9lcy9jb21wb25lbnRzL1Byb3ZpZGVyLmpzIiwidmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKG9iaiwga2V5cykgeyB2YXIgdGFyZ2V0ID0ge307IGZvciAodmFyIGkgaW4gb2JqKSB7IGlmIChrZXlzLmluZGV4T2YoaSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgaSkpIGNvbnRpbnVlOyB0YXJnZXRbaV0gPSBvYmpbaV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgY29ubmVjdEFkdmFuY2VkIGZyb20gJy4uL2NvbXBvbmVudHMvY29ubmVjdEFkdmFuY2VkJztcbmltcG9ydCBzaGFsbG93RXF1YWwgZnJvbSAnLi4vdXRpbHMvc2hhbGxvd0VxdWFsJztcbmltcG9ydCBkZWZhdWx0TWFwRGlzcGF0Y2hUb1Byb3BzRmFjdG9yaWVzIGZyb20gJy4vbWFwRGlzcGF0Y2hUb1Byb3BzJztcbmltcG9ydCBkZWZhdWx0TWFwU3RhdGVUb1Byb3BzRmFjdG9yaWVzIGZyb20gJy4vbWFwU3RhdGVUb1Byb3BzJztcbmltcG9ydCBkZWZhdWx0TWVyZ2VQcm9wc0ZhY3RvcmllcyBmcm9tICcuL21lcmdlUHJvcHMnO1xuaW1wb3J0IGRlZmF1bHRTZWxlY3RvckZhY3RvcnkgZnJvbSAnLi9zZWxlY3RvckZhY3RvcnknO1xuXG4vKlxuICBjb25uZWN0IGlzIGEgZmFjYWRlIG92ZXIgY29ubmVjdEFkdmFuY2VkLiBJdCB0dXJucyBpdHMgYXJncyBpbnRvIGEgY29tcGF0aWJsZVxuICBzZWxlY3RvckZhY3RvcnksIHdoaWNoIGhhcyB0aGUgc2lnbmF0dXJlOlxuXG4gICAgKGRpc3BhdGNoLCBvcHRpb25zKSA9PiAobmV4dFN0YXRlLCBuZXh0T3duUHJvcHMpID0+IG5leHRGaW5hbFByb3BzXG4gIFxuICBjb25uZWN0IHBhc3NlcyBpdHMgYXJncyB0byBjb25uZWN0QWR2YW5jZWQgYXMgb3B0aW9ucywgd2hpY2ggd2lsbCBpbiB0dXJuIHBhc3MgdGhlbSB0b1xuICBzZWxlY3RvckZhY3RvcnkgZWFjaCB0aW1lIGEgQ29ubmVjdCBjb21wb25lbnQgaW5zdGFuY2UgaXMgaW5zdGFudGlhdGVkIG9yIGhvdCByZWxvYWRlZC5cblxuICBzZWxlY3RvckZhY3RvcnkgcmV0dXJucyBhIGZpbmFsIHByb3BzIHNlbGVjdG9yIGZyb20gaXRzIG1hcFN0YXRlVG9Qcm9wcyxcbiAgbWFwU3RhdGVUb1Byb3BzRmFjdG9yaWVzLCBtYXBEaXNwYXRjaFRvUHJvcHMsIG1hcERpc3BhdGNoVG9Qcm9wc0ZhY3RvcmllcywgbWVyZ2VQcm9wcyxcbiAgbWVyZ2VQcm9wc0ZhY3RvcmllcywgYW5kIHB1cmUgYXJncy5cblxuICBUaGUgcmVzdWx0aW5nIGZpbmFsIHByb3BzIHNlbGVjdG9yIGlzIGNhbGxlZCBieSB0aGUgQ29ubmVjdCBjb21wb25lbnQgaW5zdGFuY2Ugd2hlbmV2ZXJcbiAgaXQgcmVjZWl2ZXMgbmV3IHByb3BzIG9yIHN0b3JlIHN0YXRlLlxuICovXG5cbmZ1bmN0aW9uIG1hdGNoKGFyZywgZmFjdG9yaWVzLCBuYW1lKSB7XG4gIGZvciAodmFyIGkgPSBmYWN0b3JpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICB2YXIgcmVzdWx0ID0gZmFjdG9yaWVzW2ldKGFyZyk7XG4gICAgaWYgKHJlc3VsdCkgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAoZGlzcGF0Y2gsIG9wdGlvbnMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgdmFsdWUgb2YgdHlwZSAnICsgdHlwZW9mIGFyZyArICcgZm9yICcgKyBuYW1lICsgJyBhcmd1bWVudCB3aGVuIGNvbm5lY3RpbmcgY29tcG9uZW50ICcgKyBvcHRpb25zLndyYXBwZWRDb21wb25lbnROYW1lICsgJy4nKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gc3RyaWN0RXF1YWwoYSwgYikge1xuICByZXR1cm4gYSA9PT0gYjtcbn1cblxuLy8gY3JlYXRlQ29ubmVjdCB3aXRoIGRlZmF1bHQgYXJncyBidWlsZHMgdGhlICdvZmZpY2lhbCcgY29ubmVjdCBiZWhhdmlvci4gQ2FsbGluZyBpdCB3aXRoXG4vLyBkaWZmZXJlbnQgb3B0aW9ucyBvcGVucyB1cCBzb21lIHRlc3RpbmcgYW5kIGV4dGVuc2liaWxpdHkgc2NlbmFyaW9zXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ29ubmVjdCgpIHtcbiAgdmFyIF9yZWYgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9LFxuICAgICAgX3JlZiRjb25uZWN0SE9DID0gX3JlZi5jb25uZWN0SE9DLFxuICAgICAgY29ubmVjdEhPQyA9IF9yZWYkY29ubmVjdEhPQyA9PT0gdW5kZWZpbmVkID8gY29ubmVjdEFkdmFuY2VkIDogX3JlZiRjb25uZWN0SE9DLFxuICAgICAgX3JlZiRtYXBTdGF0ZVRvUHJvcHNGID0gX3JlZi5tYXBTdGF0ZVRvUHJvcHNGYWN0b3JpZXMsXG4gICAgICBtYXBTdGF0ZVRvUHJvcHNGYWN0b3JpZXMgPSBfcmVmJG1hcFN0YXRlVG9Qcm9wc0YgPT09IHVuZGVmaW5lZCA/IGRlZmF1bHRNYXBTdGF0ZVRvUHJvcHNGYWN0b3JpZXMgOiBfcmVmJG1hcFN0YXRlVG9Qcm9wc0YsXG4gICAgICBfcmVmJG1hcERpc3BhdGNoVG9Qcm8gPSBfcmVmLm1hcERpc3BhdGNoVG9Qcm9wc0ZhY3RvcmllcyxcbiAgICAgIG1hcERpc3BhdGNoVG9Qcm9wc0ZhY3RvcmllcyA9IF9yZWYkbWFwRGlzcGF0Y2hUb1BybyA9PT0gdW5kZWZpbmVkID8gZGVmYXVsdE1hcERpc3BhdGNoVG9Qcm9wc0ZhY3RvcmllcyA6IF9yZWYkbWFwRGlzcGF0Y2hUb1BybyxcbiAgICAgIF9yZWYkbWVyZ2VQcm9wc0ZhY3RvciA9IF9yZWYubWVyZ2VQcm9wc0ZhY3RvcmllcyxcbiAgICAgIG1lcmdlUHJvcHNGYWN0b3JpZXMgPSBfcmVmJG1lcmdlUHJvcHNGYWN0b3IgPT09IHVuZGVmaW5lZCA/IGRlZmF1bHRNZXJnZVByb3BzRmFjdG9yaWVzIDogX3JlZiRtZXJnZVByb3BzRmFjdG9yLFxuICAgICAgX3JlZiRzZWxlY3RvckZhY3RvcnkgPSBfcmVmLnNlbGVjdG9yRmFjdG9yeSxcbiAgICAgIHNlbGVjdG9yRmFjdG9yeSA9IF9yZWYkc2VsZWN0b3JGYWN0b3J5ID09PSB1bmRlZmluZWQgPyBkZWZhdWx0U2VsZWN0b3JGYWN0b3J5IDogX3JlZiRzZWxlY3RvckZhY3Rvcnk7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIGNvbm5lY3QobWFwU3RhdGVUb1Byb3BzLCBtYXBEaXNwYXRjaFRvUHJvcHMsIG1lcmdlUHJvcHMpIHtcbiAgICB2YXIgX3JlZjIgPSBhcmd1bWVudHMubGVuZ3RoID4gMyAmJiBhcmd1bWVudHNbM10gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1szXSA6IHt9LFxuICAgICAgICBfcmVmMiRwdXJlID0gX3JlZjIucHVyZSxcbiAgICAgICAgcHVyZSA9IF9yZWYyJHB1cmUgPT09IHVuZGVmaW5lZCA/IHRydWUgOiBfcmVmMiRwdXJlLFxuICAgICAgICBfcmVmMiRhcmVTdGF0ZXNFcXVhbCA9IF9yZWYyLmFyZVN0YXRlc0VxdWFsLFxuICAgICAgICBhcmVTdGF0ZXNFcXVhbCA9IF9yZWYyJGFyZVN0YXRlc0VxdWFsID09PSB1bmRlZmluZWQgPyBzdHJpY3RFcXVhbCA6IF9yZWYyJGFyZVN0YXRlc0VxdWFsLFxuICAgICAgICBfcmVmMiRhcmVPd25Qcm9wc0VxdWEgPSBfcmVmMi5hcmVPd25Qcm9wc0VxdWFsLFxuICAgICAgICBhcmVPd25Qcm9wc0VxdWFsID0gX3JlZjIkYXJlT3duUHJvcHNFcXVhID09PSB1bmRlZmluZWQgPyBzaGFsbG93RXF1YWwgOiBfcmVmMiRhcmVPd25Qcm9wc0VxdWEsXG4gICAgICAgIF9yZWYyJGFyZVN0YXRlUHJvcHNFcSA9IF9yZWYyLmFyZVN0YXRlUHJvcHNFcXVhbCxcbiAgICAgICAgYXJlU3RhdGVQcm9wc0VxdWFsID0gX3JlZjIkYXJlU3RhdGVQcm9wc0VxID09PSB1bmRlZmluZWQgPyBzaGFsbG93RXF1YWwgOiBfcmVmMiRhcmVTdGF0ZVByb3BzRXEsXG4gICAgICAgIF9yZWYyJGFyZU1lcmdlZFByb3BzRSA9IF9yZWYyLmFyZU1lcmdlZFByb3BzRXF1YWwsXG4gICAgICAgIGFyZU1lcmdlZFByb3BzRXF1YWwgPSBfcmVmMiRhcmVNZXJnZWRQcm9wc0UgPT09IHVuZGVmaW5lZCA/IHNoYWxsb3dFcXVhbCA6IF9yZWYyJGFyZU1lcmdlZFByb3BzRSxcbiAgICAgICAgZXh0cmFPcHRpb25zID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYyLCBbJ3B1cmUnLCAnYXJlU3RhdGVzRXF1YWwnLCAnYXJlT3duUHJvcHNFcXVhbCcsICdhcmVTdGF0ZVByb3BzRXF1YWwnLCAnYXJlTWVyZ2VkUHJvcHNFcXVhbCddKTtcblxuICAgIHZhciBpbml0TWFwU3RhdGVUb1Byb3BzID0gbWF0Y2gobWFwU3RhdGVUb1Byb3BzLCBtYXBTdGF0ZVRvUHJvcHNGYWN0b3JpZXMsICdtYXBTdGF0ZVRvUHJvcHMnKTtcbiAgICB2YXIgaW5pdE1hcERpc3BhdGNoVG9Qcm9wcyA9IG1hdGNoKG1hcERpc3BhdGNoVG9Qcm9wcywgbWFwRGlzcGF0Y2hUb1Byb3BzRmFjdG9yaWVzLCAnbWFwRGlzcGF0Y2hUb1Byb3BzJyk7XG4gICAgdmFyIGluaXRNZXJnZVByb3BzID0gbWF0Y2gobWVyZ2VQcm9wcywgbWVyZ2VQcm9wc0ZhY3RvcmllcywgJ21lcmdlUHJvcHMnKTtcblxuICAgIHJldHVybiBjb25uZWN0SE9DKHNlbGVjdG9yRmFjdG9yeSwgX2V4dGVuZHMoe1xuICAgICAgLy8gdXNlZCBpbiBlcnJvciBtZXNzYWdlc1xuICAgICAgbWV0aG9kTmFtZTogJ2Nvbm5lY3QnLFxuXG4gICAgICAvLyB1c2VkIHRvIGNvbXB1dGUgQ29ubmVjdCdzIGRpc3BsYXlOYW1lIGZyb20gdGhlIHdyYXBwZWQgY29tcG9uZW50J3MgZGlzcGxheU5hbWUuXG4gICAgICBnZXREaXNwbGF5TmFtZTogZnVuY3Rpb24gZ2V0RGlzcGxheU5hbWUobmFtZSkge1xuICAgICAgICByZXR1cm4gJ0Nvbm5lY3QoJyArIG5hbWUgKyAnKSc7XG4gICAgICB9LFxuXG4gICAgICAvLyBpZiBtYXBTdGF0ZVRvUHJvcHMgaXMgZmFsc3ksIHRoZSBDb25uZWN0IGNvbXBvbmVudCBkb2Vzbid0IHN1YnNjcmliZSB0byBzdG9yZSBzdGF0ZSBjaGFuZ2VzXG4gICAgICBzaG91bGRIYW5kbGVTdGF0ZUNoYW5nZXM6IEJvb2xlYW4obWFwU3RhdGVUb1Byb3BzKSxcblxuICAgICAgLy8gcGFzc2VkIHRocm91Z2ggdG8gc2VsZWN0b3JGYWN0b3J5XG4gICAgICBpbml0TWFwU3RhdGVUb1Byb3BzOiBpbml0TWFwU3RhdGVUb1Byb3BzLFxuICAgICAgaW5pdE1hcERpc3BhdGNoVG9Qcm9wczogaW5pdE1hcERpc3BhdGNoVG9Qcm9wcyxcbiAgICAgIGluaXRNZXJnZVByb3BzOiBpbml0TWVyZ2VQcm9wcyxcbiAgICAgIHB1cmU6IHB1cmUsXG4gICAgICBhcmVTdGF0ZXNFcXVhbDogYXJlU3RhdGVzRXF1YWwsXG4gICAgICBhcmVPd25Qcm9wc0VxdWFsOiBhcmVPd25Qcm9wc0VxdWFsLFxuICAgICAgYXJlU3RhdGVQcm9wc0VxdWFsOiBhcmVTdGF0ZVByb3BzRXF1YWwsXG4gICAgICBhcmVNZXJnZWRQcm9wc0VxdWFsOiBhcmVNZXJnZWRQcm9wc0VxdWFsXG5cbiAgICB9LCBleHRyYU9wdGlvbnMpKTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY3JlYXRlQ29ubmVjdCgpO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QtcmVkdXgvZXMvY29ubmVjdC9jb25uZWN0LmpzIiwiaW1wb3J0IHsgYmluZEFjdGlvbkNyZWF0b3JzIH0gZnJvbSAncmVkdXgnO1xuaW1wb3J0IHsgd3JhcE1hcFRvUHJvcHNDb25zdGFudCwgd3JhcE1hcFRvUHJvcHNGdW5jIH0gZnJvbSAnLi93cmFwTWFwVG9Qcm9wcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiB3aGVuTWFwRGlzcGF0Y2hUb1Byb3BzSXNGdW5jdGlvbihtYXBEaXNwYXRjaFRvUHJvcHMpIHtcbiAgcmV0dXJuIHR5cGVvZiBtYXBEaXNwYXRjaFRvUHJvcHMgPT09ICdmdW5jdGlvbicgPyB3cmFwTWFwVG9Qcm9wc0Z1bmMobWFwRGlzcGF0Y2hUb1Byb3BzLCAnbWFwRGlzcGF0Y2hUb1Byb3BzJykgOiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3aGVuTWFwRGlzcGF0Y2hUb1Byb3BzSXNNaXNzaW5nKG1hcERpc3BhdGNoVG9Qcm9wcykge1xuICByZXR1cm4gIW1hcERpc3BhdGNoVG9Qcm9wcyA/IHdyYXBNYXBUb1Byb3BzQ29uc3RhbnQoZnVuY3Rpb24gKGRpc3BhdGNoKSB7XG4gICAgcmV0dXJuIHsgZGlzcGF0Y2g6IGRpc3BhdGNoIH07XG4gIH0pIDogdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gd2hlbk1hcERpc3BhdGNoVG9Qcm9wc0lzT2JqZWN0KG1hcERpc3BhdGNoVG9Qcm9wcykge1xuICByZXR1cm4gbWFwRGlzcGF0Y2hUb1Byb3BzICYmIHR5cGVvZiBtYXBEaXNwYXRjaFRvUHJvcHMgPT09ICdvYmplY3QnID8gd3JhcE1hcFRvUHJvcHNDb25zdGFudChmdW5jdGlvbiAoZGlzcGF0Y2gpIHtcbiAgICByZXR1cm4gYmluZEFjdGlvbkNyZWF0b3JzKG1hcERpc3BhdGNoVG9Qcm9wcywgZGlzcGF0Y2gpO1xuICB9KSA6IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgW3doZW5NYXBEaXNwYXRjaFRvUHJvcHNJc0Z1bmN0aW9uLCB3aGVuTWFwRGlzcGF0Y2hUb1Byb3BzSXNNaXNzaW5nLCB3aGVuTWFwRGlzcGF0Y2hUb1Byb3BzSXNPYmplY3RdO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QtcmVkdXgvZXMvY29ubmVjdC9tYXBEaXNwYXRjaFRvUHJvcHMuanMiLCJpbXBvcnQgeyB3cmFwTWFwVG9Qcm9wc0NvbnN0YW50LCB3cmFwTWFwVG9Qcm9wc0Z1bmMgfSBmcm9tICcuL3dyYXBNYXBUb1Byb3BzJztcblxuZXhwb3J0IGZ1bmN0aW9uIHdoZW5NYXBTdGF0ZVRvUHJvcHNJc0Z1bmN0aW9uKG1hcFN0YXRlVG9Qcm9wcykge1xuICByZXR1cm4gdHlwZW9mIG1hcFN0YXRlVG9Qcm9wcyA9PT0gJ2Z1bmN0aW9uJyA/IHdyYXBNYXBUb1Byb3BzRnVuYyhtYXBTdGF0ZVRvUHJvcHMsICdtYXBTdGF0ZVRvUHJvcHMnKSA6IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdoZW5NYXBTdGF0ZVRvUHJvcHNJc01pc3NpbmcobWFwU3RhdGVUb1Byb3BzKSB7XG4gIHJldHVybiAhbWFwU3RhdGVUb1Byb3BzID8gd3JhcE1hcFRvUHJvcHNDb25zdGFudChmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHt9O1xuICB9KSA6IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgW3doZW5NYXBTdGF0ZVRvUHJvcHNJc0Z1bmN0aW9uLCB3aGVuTWFwU3RhdGVUb1Byb3BzSXNNaXNzaW5nXTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3JlYWN0LXJlZHV4L2VzL2Nvbm5lY3QvbWFwU3RhdGVUb1Byb3BzLmpzIiwidmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcblxuaW1wb3J0IHZlcmlmeVBsYWluT2JqZWN0IGZyb20gJy4uL3V0aWxzL3ZlcmlmeVBsYWluT2JqZWN0JztcblxuZXhwb3J0IGZ1bmN0aW9uIGRlZmF1bHRNZXJnZVByb3BzKHN0YXRlUHJvcHMsIGRpc3BhdGNoUHJvcHMsIG93blByb3BzKSB7XG4gIHJldHVybiBfZXh0ZW5kcyh7fSwgb3duUHJvcHMsIHN0YXRlUHJvcHMsIGRpc3BhdGNoUHJvcHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JhcE1lcmdlUHJvcHNGdW5jKG1lcmdlUHJvcHMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGluaXRNZXJnZVByb3BzUHJveHkoZGlzcGF0Y2gsIF9yZWYpIHtcbiAgICB2YXIgZGlzcGxheU5hbWUgPSBfcmVmLmRpc3BsYXlOYW1lLFxuICAgICAgICBwdXJlID0gX3JlZi5wdXJlLFxuICAgICAgICBhcmVNZXJnZWRQcm9wc0VxdWFsID0gX3JlZi5hcmVNZXJnZWRQcm9wc0VxdWFsO1xuXG4gICAgdmFyIGhhc1J1bk9uY2UgPSBmYWxzZTtcbiAgICB2YXIgbWVyZ2VkUHJvcHMgPSB2b2lkIDA7XG5cbiAgICByZXR1cm4gZnVuY3Rpb24gbWVyZ2VQcm9wc1Byb3h5KHN0YXRlUHJvcHMsIGRpc3BhdGNoUHJvcHMsIG93blByb3BzKSB7XG4gICAgICB2YXIgbmV4dE1lcmdlZFByb3BzID0gbWVyZ2VQcm9wcyhzdGF0ZVByb3BzLCBkaXNwYXRjaFByb3BzLCBvd25Qcm9wcyk7XG5cbiAgICAgIGlmIChoYXNSdW5PbmNlKSB7XG4gICAgICAgIGlmICghcHVyZSB8fCAhYXJlTWVyZ2VkUHJvcHNFcXVhbChuZXh0TWVyZ2VkUHJvcHMsIG1lcmdlZFByb3BzKSkgbWVyZ2VkUHJvcHMgPSBuZXh0TWVyZ2VkUHJvcHM7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBoYXNSdW5PbmNlID0gdHJ1ZTtcbiAgICAgICAgbWVyZ2VkUHJvcHMgPSBuZXh0TWVyZ2VkUHJvcHM7XG5cbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHZlcmlmeVBsYWluT2JqZWN0KG1lcmdlZFByb3BzLCBkaXNwbGF5TmFtZSwgJ21lcmdlUHJvcHMnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG1lcmdlZFByb3BzO1xuICAgIH07XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3aGVuTWVyZ2VQcm9wc0lzRnVuY3Rpb24obWVyZ2VQcm9wcykge1xuICByZXR1cm4gdHlwZW9mIG1lcmdlUHJvcHMgPT09ICdmdW5jdGlvbicgPyB3cmFwTWVyZ2VQcm9wc0Z1bmMobWVyZ2VQcm9wcykgOiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3aGVuTWVyZ2VQcm9wc0lzT21pdHRlZChtZXJnZVByb3BzKSB7XG4gIHJldHVybiAhbWVyZ2VQcm9wcyA/IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZGVmYXVsdE1lcmdlUHJvcHM7XG4gIH0gOiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFt3aGVuTWVyZ2VQcm9wc0lzRnVuY3Rpb24sIHdoZW5NZXJnZVByb3BzSXNPbWl0dGVkXTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3JlYWN0LXJlZHV4L2VzL2Nvbm5lY3QvbWVyZ2VQcm9wcy5qcyIsImZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhvYmosIGtleXMpIHsgdmFyIHRhcmdldCA9IHt9OyBmb3IgKHZhciBpIGluIG9iaikgeyBpZiAoa2V5cy5pbmRleE9mKGkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGkpKSBjb250aW51ZTsgdGFyZ2V0W2ldID0gb2JqW2ldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IHZlcmlmeVN1YnNlbGVjdG9ycyBmcm9tICcuL3ZlcmlmeVN1YnNlbGVjdG9ycyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBpbXB1cmVGaW5hbFByb3BzU2VsZWN0b3JGYWN0b3J5KG1hcFN0YXRlVG9Qcm9wcywgbWFwRGlzcGF0Y2hUb1Byb3BzLCBtZXJnZVByb3BzLCBkaXNwYXRjaCkge1xuICByZXR1cm4gZnVuY3Rpb24gaW1wdXJlRmluYWxQcm9wc1NlbGVjdG9yKHN0YXRlLCBvd25Qcm9wcykge1xuICAgIHJldHVybiBtZXJnZVByb3BzKG1hcFN0YXRlVG9Qcm9wcyhzdGF0ZSwgb3duUHJvcHMpLCBtYXBEaXNwYXRjaFRvUHJvcHMoZGlzcGF0Y2gsIG93blByb3BzKSwgb3duUHJvcHMpO1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHVyZUZpbmFsUHJvcHNTZWxlY3RvckZhY3RvcnkobWFwU3RhdGVUb1Byb3BzLCBtYXBEaXNwYXRjaFRvUHJvcHMsIG1lcmdlUHJvcHMsIGRpc3BhdGNoLCBfcmVmKSB7XG4gIHZhciBhcmVTdGF0ZXNFcXVhbCA9IF9yZWYuYXJlU3RhdGVzRXF1YWwsXG4gICAgICBhcmVPd25Qcm9wc0VxdWFsID0gX3JlZi5hcmVPd25Qcm9wc0VxdWFsLFxuICAgICAgYXJlU3RhdGVQcm9wc0VxdWFsID0gX3JlZi5hcmVTdGF0ZVByb3BzRXF1YWw7XG5cbiAgdmFyIGhhc1J1bkF0TGVhc3RPbmNlID0gZmFsc2U7XG4gIHZhciBzdGF0ZSA9IHZvaWQgMDtcbiAgdmFyIG93blByb3BzID0gdm9pZCAwO1xuICB2YXIgc3RhdGVQcm9wcyA9IHZvaWQgMDtcbiAgdmFyIGRpc3BhdGNoUHJvcHMgPSB2b2lkIDA7XG4gIHZhciBtZXJnZWRQcm9wcyA9IHZvaWQgMDtcblxuICBmdW5jdGlvbiBoYW5kbGVGaXJzdENhbGwoZmlyc3RTdGF0ZSwgZmlyc3RPd25Qcm9wcykge1xuICAgIHN0YXRlID0gZmlyc3RTdGF0ZTtcbiAgICBvd25Qcm9wcyA9IGZpcnN0T3duUHJvcHM7XG4gICAgc3RhdGVQcm9wcyA9IG1hcFN0YXRlVG9Qcm9wcyhzdGF0ZSwgb3duUHJvcHMpO1xuICAgIGRpc3BhdGNoUHJvcHMgPSBtYXBEaXNwYXRjaFRvUHJvcHMoZGlzcGF0Y2gsIG93blByb3BzKTtcbiAgICBtZXJnZWRQcm9wcyA9IG1lcmdlUHJvcHMoc3RhdGVQcm9wcywgZGlzcGF0Y2hQcm9wcywgb3duUHJvcHMpO1xuICAgIGhhc1J1bkF0TGVhc3RPbmNlID0gdHJ1ZTtcbiAgICByZXR1cm4gbWVyZ2VkUHJvcHM7XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVOZXdQcm9wc0FuZE5ld1N0YXRlKCkge1xuICAgIHN0YXRlUHJvcHMgPSBtYXBTdGF0ZVRvUHJvcHMoc3RhdGUsIG93blByb3BzKTtcblxuICAgIGlmIChtYXBEaXNwYXRjaFRvUHJvcHMuZGVwZW5kc09uT3duUHJvcHMpIGRpc3BhdGNoUHJvcHMgPSBtYXBEaXNwYXRjaFRvUHJvcHMoZGlzcGF0Y2gsIG93blByb3BzKTtcblxuICAgIG1lcmdlZFByb3BzID0gbWVyZ2VQcm9wcyhzdGF0ZVByb3BzLCBkaXNwYXRjaFByb3BzLCBvd25Qcm9wcyk7XG4gICAgcmV0dXJuIG1lcmdlZFByb3BzO1xuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlTmV3UHJvcHMoKSB7XG4gICAgaWYgKG1hcFN0YXRlVG9Qcm9wcy5kZXBlbmRzT25Pd25Qcm9wcykgc3RhdGVQcm9wcyA9IG1hcFN0YXRlVG9Qcm9wcyhzdGF0ZSwgb3duUHJvcHMpO1xuXG4gICAgaWYgKG1hcERpc3BhdGNoVG9Qcm9wcy5kZXBlbmRzT25Pd25Qcm9wcykgZGlzcGF0Y2hQcm9wcyA9IG1hcERpc3BhdGNoVG9Qcm9wcyhkaXNwYXRjaCwgb3duUHJvcHMpO1xuXG4gICAgbWVyZ2VkUHJvcHMgPSBtZXJnZVByb3BzKHN0YXRlUHJvcHMsIGRpc3BhdGNoUHJvcHMsIG93blByb3BzKTtcbiAgICByZXR1cm4gbWVyZ2VkUHJvcHM7XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVOZXdTdGF0ZSgpIHtcbiAgICB2YXIgbmV4dFN0YXRlUHJvcHMgPSBtYXBTdGF0ZVRvUHJvcHMoc3RhdGUsIG93blByb3BzKTtcbiAgICB2YXIgc3RhdGVQcm9wc0NoYW5nZWQgPSAhYXJlU3RhdGVQcm9wc0VxdWFsKG5leHRTdGF0ZVByb3BzLCBzdGF0ZVByb3BzKTtcbiAgICBzdGF0ZVByb3BzID0gbmV4dFN0YXRlUHJvcHM7XG5cbiAgICBpZiAoc3RhdGVQcm9wc0NoYW5nZWQpIG1lcmdlZFByb3BzID0gbWVyZ2VQcm9wcyhzdGF0ZVByb3BzLCBkaXNwYXRjaFByb3BzLCBvd25Qcm9wcyk7XG5cbiAgICByZXR1cm4gbWVyZ2VkUHJvcHM7XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVTdWJzZXF1ZW50Q2FsbHMobmV4dFN0YXRlLCBuZXh0T3duUHJvcHMpIHtcbiAgICB2YXIgcHJvcHNDaGFuZ2VkID0gIWFyZU93blByb3BzRXF1YWwobmV4dE93blByb3BzLCBvd25Qcm9wcyk7XG4gICAgdmFyIHN0YXRlQ2hhbmdlZCA9ICFhcmVTdGF0ZXNFcXVhbChuZXh0U3RhdGUsIHN0YXRlKTtcbiAgICBzdGF0ZSA9IG5leHRTdGF0ZTtcbiAgICBvd25Qcm9wcyA9IG5leHRPd25Qcm9wcztcblxuICAgIGlmIChwcm9wc0NoYW5nZWQgJiYgc3RhdGVDaGFuZ2VkKSByZXR1cm4gaGFuZGxlTmV3UHJvcHNBbmROZXdTdGF0ZSgpO1xuICAgIGlmIChwcm9wc0NoYW5nZWQpIHJldHVybiBoYW5kbGVOZXdQcm9wcygpO1xuICAgIGlmIChzdGF0ZUNoYW5nZWQpIHJldHVybiBoYW5kbGVOZXdTdGF0ZSgpO1xuICAgIHJldHVybiBtZXJnZWRQcm9wcztcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiBwdXJlRmluYWxQcm9wc1NlbGVjdG9yKG5leHRTdGF0ZSwgbmV4dE93blByb3BzKSB7XG4gICAgcmV0dXJuIGhhc1J1bkF0TGVhc3RPbmNlID8gaGFuZGxlU3Vic2VxdWVudENhbGxzKG5leHRTdGF0ZSwgbmV4dE93blByb3BzKSA6IGhhbmRsZUZpcnN0Q2FsbChuZXh0U3RhdGUsIG5leHRPd25Qcm9wcyk7XG4gIH07XG59XG5cbi8vIFRPRE86IEFkZCBtb3JlIGNvbW1lbnRzXG5cbi8vIElmIHB1cmUgaXMgdHJ1ZSwgdGhlIHNlbGVjdG9yIHJldHVybmVkIGJ5IHNlbGVjdG9yRmFjdG9yeSB3aWxsIG1lbW9pemUgaXRzIHJlc3VsdHMsXG4vLyBhbGxvd2luZyBjb25uZWN0QWR2YW5jZWQncyBzaG91bGRDb21wb25lbnRVcGRhdGUgdG8gcmV0dXJuIGZhbHNlIGlmIGZpbmFsXG4vLyBwcm9wcyBoYXZlIG5vdCBjaGFuZ2VkLiBJZiBmYWxzZSwgdGhlIHNlbGVjdG9yIHdpbGwgYWx3YXlzIHJldHVybiBhIG5ld1xuLy8gb2JqZWN0IGFuZCBzaG91bGRDb21wb25lbnRVcGRhdGUgd2lsbCBhbHdheXMgcmV0dXJuIHRydWUuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGZpbmFsUHJvcHNTZWxlY3RvckZhY3RvcnkoZGlzcGF0Y2gsIF9yZWYyKSB7XG4gIHZhciBpbml0TWFwU3RhdGVUb1Byb3BzID0gX3JlZjIuaW5pdE1hcFN0YXRlVG9Qcm9wcyxcbiAgICAgIGluaXRNYXBEaXNwYXRjaFRvUHJvcHMgPSBfcmVmMi5pbml0TWFwRGlzcGF0Y2hUb1Byb3BzLFxuICAgICAgaW5pdE1lcmdlUHJvcHMgPSBfcmVmMi5pbml0TWVyZ2VQcm9wcyxcbiAgICAgIG9wdGlvbnMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZjIsIFsnaW5pdE1hcFN0YXRlVG9Qcm9wcycsICdpbml0TWFwRGlzcGF0Y2hUb1Byb3BzJywgJ2luaXRNZXJnZVByb3BzJ10pO1xuXG4gIHZhciBtYXBTdGF0ZVRvUHJvcHMgPSBpbml0TWFwU3RhdGVUb1Byb3BzKGRpc3BhdGNoLCBvcHRpb25zKTtcbiAgdmFyIG1hcERpc3BhdGNoVG9Qcm9wcyA9IGluaXRNYXBEaXNwYXRjaFRvUHJvcHMoZGlzcGF0Y2gsIG9wdGlvbnMpO1xuICB2YXIgbWVyZ2VQcm9wcyA9IGluaXRNZXJnZVByb3BzKGRpc3BhdGNoLCBvcHRpb25zKTtcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIHZlcmlmeVN1YnNlbGVjdG9ycyhtYXBTdGF0ZVRvUHJvcHMsIG1hcERpc3BhdGNoVG9Qcm9wcywgbWVyZ2VQcm9wcywgb3B0aW9ucy5kaXNwbGF5TmFtZSk7XG4gIH1cblxuICB2YXIgc2VsZWN0b3JGYWN0b3J5ID0gb3B0aW9ucy5wdXJlID8gcHVyZUZpbmFsUHJvcHNTZWxlY3RvckZhY3RvcnkgOiBpbXB1cmVGaW5hbFByb3BzU2VsZWN0b3JGYWN0b3J5O1xuXG4gIHJldHVybiBzZWxlY3RvckZhY3RvcnkobWFwU3RhdGVUb1Byb3BzLCBtYXBEaXNwYXRjaFRvUHJvcHMsIG1lcmdlUHJvcHMsIGRpc3BhdGNoLCBvcHRpb25zKTtcbn1cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3JlYWN0LXJlZHV4L2VzL2Nvbm5lY3Qvc2VsZWN0b3JGYWN0b3J5LmpzIiwiaW1wb3J0IHdhcm5pbmcgZnJvbSAnLi4vdXRpbHMvd2FybmluZyc7XG5cbmZ1bmN0aW9uIHZlcmlmeShzZWxlY3RvciwgbWV0aG9kTmFtZSwgZGlzcGxheU5hbWUpIHtcbiAgaWYgKCFzZWxlY3Rvcikge1xuICAgIHRocm93IG5ldyBFcnJvcignVW5leHBlY3RlZCB2YWx1ZSBmb3IgJyArIG1ldGhvZE5hbWUgKyAnIGluICcgKyBkaXNwbGF5TmFtZSArICcuJyk7XG4gIH0gZWxzZSBpZiAobWV0aG9kTmFtZSA9PT0gJ21hcFN0YXRlVG9Qcm9wcycgfHwgbWV0aG9kTmFtZSA9PT0gJ21hcERpc3BhdGNoVG9Qcm9wcycpIHtcbiAgICBpZiAoIXNlbGVjdG9yLmhhc093blByb3BlcnR5KCdkZXBlbmRzT25Pd25Qcm9wcycpKSB7XG4gICAgICB3YXJuaW5nKCdUaGUgc2VsZWN0b3IgZm9yICcgKyBtZXRob2ROYW1lICsgJyBvZiAnICsgZGlzcGxheU5hbWUgKyAnIGRpZCBub3Qgc3BlY2lmeSBhIHZhbHVlIGZvciBkZXBlbmRzT25Pd25Qcm9wcy4nKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdmVyaWZ5U3Vic2VsZWN0b3JzKG1hcFN0YXRlVG9Qcm9wcywgbWFwRGlzcGF0Y2hUb1Byb3BzLCBtZXJnZVByb3BzLCBkaXNwbGF5TmFtZSkge1xuICB2ZXJpZnkobWFwU3RhdGVUb1Byb3BzLCAnbWFwU3RhdGVUb1Byb3BzJywgZGlzcGxheU5hbWUpO1xuICB2ZXJpZnkobWFwRGlzcGF0Y2hUb1Byb3BzLCAnbWFwRGlzcGF0Y2hUb1Byb3BzJywgZGlzcGxheU5hbWUpO1xuICB2ZXJpZnkobWVyZ2VQcm9wcywgJ21lcmdlUHJvcHMnLCBkaXNwbGF5TmFtZSk7XG59XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1yZWR1eC9lcy9jb25uZWN0L3ZlcmlmeVN1YnNlbGVjdG9ycy5qcyIsImZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbi8vIGVuY2Fwc3VsYXRlcyB0aGUgc3Vic2NyaXB0aW9uIGxvZ2ljIGZvciBjb25uZWN0aW5nIGEgY29tcG9uZW50IHRvIHRoZSByZWR1eCBzdG9yZSwgYXNcbi8vIHdlbGwgYXMgbmVzdGluZyBzdWJzY3JpcHRpb25zIG9mIGRlc2NlbmRhbnQgY29tcG9uZW50cywgc28gdGhhdCB3ZSBjYW4gZW5zdXJlIHRoZVxuLy8gYW5jZXN0b3IgY29tcG9uZW50cyByZS1yZW5kZXIgYmVmb3JlIGRlc2NlbmRhbnRzXG5cbnZhciBDTEVBUkVEID0gbnVsbDtcbnZhciBudWxsTGlzdGVuZXJzID0ge1xuICBub3RpZnk6IGZ1bmN0aW9uIG5vdGlmeSgpIHt9XG59O1xuXG5mdW5jdGlvbiBjcmVhdGVMaXN0ZW5lckNvbGxlY3Rpb24oKSB7XG4gIC8vIHRoZSBjdXJyZW50L25leHQgcGF0dGVybiBpcyBjb3BpZWQgZnJvbSByZWR1eCdzIGNyZWF0ZVN0b3JlIGNvZGUuXG4gIC8vIFRPRE86IHJlZmFjdG9yK2V4cG9zZSB0aGF0IGNvZGUgdG8gYmUgcmV1c2FibGUgaGVyZT9cbiAgdmFyIGN1cnJlbnQgPSBbXTtcbiAgdmFyIG5leHQgPSBbXTtcblxuICByZXR1cm4ge1xuICAgIGNsZWFyOiBmdW5jdGlvbiBjbGVhcigpIHtcbiAgICAgIG5leHQgPSBDTEVBUkVEO1xuICAgICAgY3VycmVudCA9IENMRUFSRUQ7XG4gICAgfSxcbiAgICBub3RpZnk6IGZ1bmN0aW9uIG5vdGlmeSgpIHtcbiAgICAgIHZhciBsaXN0ZW5lcnMgPSBjdXJyZW50ID0gbmV4dDtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdGVuZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGxpc3RlbmVyc1tpXSgpO1xuICAgICAgfVxuICAgIH0sXG4gICAgc3Vic2NyaWJlOiBmdW5jdGlvbiBzdWJzY3JpYmUobGlzdGVuZXIpIHtcbiAgICAgIHZhciBpc1N1YnNjcmliZWQgPSB0cnVlO1xuICAgICAgaWYgKG5leHQgPT09IGN1cnJlbnQpIG5leHQgPSBjdXJyZW50LnNsaWNlKCk7XG4gICAgICBuZXh0LnB1c2gobGlzdGVuZXIpO1xuXG4gICAgICByZXR1cm4gZnVuY3Rpb24gdW5zdWJzY3JpYmUoKSB7XG4gICAgICAgIGlmICghaXNTdWJzY3JpYmVkIHx8IGN1cnJlbnQgPT09IENMRUFSRUQpIHJldHVybjtcbiAgICAgICAgaXNTdWJzY3JpYmVkID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKG5leHQgPT09IGN1cnJlbnQpIG5leHQgPSBjdXJyZW50LnNsaWNlKCk7XG4gICAgICAgIG5leHQuc3BsaWNlKG5leHQuaW5kZXhPZihsaXN0ZW5lciksIDEpO1xuICAgICAgfTtcbiAgICB9XG4gIH07XG59XG5cbnZhciBTdWJzY3JpcHRpb24gPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIFN1YnNjcmlwdGlvbihzdG9yZSwgcGFyZW50U3ViLCBvblN0YXRlQ2hhbmdlKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFN1YnNjcmlwdGlvbik7XG5cbiAgICB0aGlzLnN0b3JlID0gc3RvcmU7XG4gICAgdGhpcy5wYXJlbnRTdWIgPSBwYXJlbnRTdWI7XG4gICAgdGhpcy5vblN0YXRlQ2hhbmdlID0gb25TdGF0ZUNoYW5nZTtcbiAgICB0aGlzLnVuc3Vic2NyaWJlID0gbnVsbDtcbiAgICB0aGlzLmxpc3RlbmVycyA9IG51bGxMaXN0ZW5lcnM7XG4gIH1cblxuICBTdWJzY3JpcHRpb24ucHJvdG90eXBlLmFkZE5lc3RlZFN1YiA9IGZ1bmN0aW9uIGFkZE5lc3RlZFN1YihsaXN0ZW5lcikge1xuICAgIHRoaXMudHJ5U3Vic2NyaWJlKCk7XG4gICAgcmV0dXJuIHRoaXMubGlzdGVuZXJzLnN1YnNjcmliZShsaXN0ZW5lcik7XG4gIH07XG5cbiAgU3Vic2NyaXB0aW9uLnByb3RvdHlwZS5ub3RpZnlOZXN0ZWRTdWJzID0gZnVuY3Rpb24gbm90aWZ5TmVzdGVkU3VicygpIHtcbiAgICB0aGlzLmxpc3RlbmVycy5ub3RpZnkoKTtcbiAgfTtcblxuICBTdWJzY3JpcHRpb24ucHJvdG90eXBlLmlzU3Vic2NyaWJlZCA9IGZ1bmN0aW9uIGlzU3Vic2NyaWJlZCgpIHtcbiAgICByZXR1cm4gQm9vbGVhbih0aGlzLnVuc3Vic2NyaWJlKTtcbiAgfTtcblxuICBTdWJzY3JpcHRpb24ucHJvdG90eXBlLnRyeVN1YnNjcmliZSA9IGZ1bmN0aW9uIHRyeVN1YnNjcmliZSgpIHtcbiAgICBpZiAoIXRoaXMudW5zdWJzY3JpYmUpIHtcbiAgICAgIHRoaXMudW5zdWJzY3JpYmUgPSB0aGlzLnBhcmVudFN1YiA/IHRoaXMucGFyZW50U3ViLmFkZE5lc3RlZFN1Yih0aGlzLm9uU3RhdGVDaGFuZ2UpIDogdGhpcy5zdG9yZS5zdWJzY3JpYmUodGhpcy5vblN0YXRlQ2hhbmdlKTtcblxuICAgICAgdGhpcy5saXN0ZW5lcnMgPSBjcmVhdGVMaXN0ZW5lckNvbGxlY3Rpb24oKTtcbiAgICB9XG4gIH07XG5cbiAgU3Vic2NyaXB0aW9uLnByb3RvdHlwZS50cnlVbnN1YnNjcmliZSA9IGZ1bmN0aW9uIHRyeVVuc3Vic2NyaWJlKCkge1xuICAgIGlmICh0aGlzLnVuc3Vic2NyaWJlKSB7XG4gICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICB0aGlzLnVuc3Vic2NyaWJlID0gbnVsbDtcbiAgICAgIHRoaXMubGlzdGVuZXJzLmNsZWFyKCk7XG4gICAgICB0aGlzLmxpc3RlbmVycyA9IG51bGxMaXN0ZW5lcnM7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBTdWJzY3JpcHRpb247XG59KCk7XG5cbmV4cG9ydCB7IFN1YnNjcmlwdGlvbiBhcyBkZWZhdWx0IH07XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1yZWR1eC9lcy91dGlscy9TdWJzY3JpcHRpb24uanMiLCJ2YXIgaGFzT3duID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcblxuZnVuY3Rpb24gaXMoeCwgeSkge1xuICBpZiAoeCA9PT0geSkge1xuICAgIHJldHVybiB4ICE9PSAwIHx8IHkgIT09IDAgfHwgMSAvIHggPT09IDEgLyB5O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB4ICE9PSB4ICYmIHkgIT09IHk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc2hhbGxvd0VxdWFsKG9iakEsIG9iakIpIHtcbiAgaWYgKGlzKG9iakEsIG9iakIpKSByZXR1cm4gdHJ1ZTtcblxuICBpZiAodHlwZW9mIG9iakEgIT09ICdvYmplY3QnIHx8IG9iakEgPT09IG51bGwgfHwgdHlwZW9mIG9iakIgIT09ICdvYmplY3QnIHx8IG9iakIgPT09IG51bGwpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIga2V5c0EgPSBPYmplY3Qua2V5cyhvYmpBKTtcbiAgdmFyIGtleXNCID0gT2JqZWN0LmtleXMob2JqQik7XG5cbiAgaWYgKGtleXNBLmxlbmd0aCAhPT0ga2V5c0IubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzQS5sZW5ndGg7IGkrKykge1xuICAgIGlmICghaGFzT3duLmNhbGwob2JqQiwga2V5c0FbaV0pIHx8ICFpcyhvYmpBW2tleXNBW2ldXSwgb2JqQltrZXlzQVtpXV0pKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1yZWR1eC9lcy91dGlscy9zaGFsbG93RXF1YWwuanMiLCJmdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmICghc2VsZikgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIGNhbGwgJiYgKHR5cGVvZiBjYWxsID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpID8gY2FsbCA6IHNlbGY7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXCIgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcykgOiBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOyB9XG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNyZWF0ZUhpc3RvcnkgZnJvbSAnaGlzdG9yeS9jcmVhdGVCcm93c2VySGlzdG9yeSc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdyZWFjdC1yb3V0ZXInO1xuXG4vKipcbiAqIFRoZSBwdWJsaWMgQVBJIGZvciBhIDxSb3V0ZXI+IHRoYXQgdXNlcyBIVE1MNSBoaXN0b3J5LlxuICovXG5cbnZhciBCcm93c2VyUm91dGVyID0gZnVuY3Rpb24gKF9SZWFjdCRDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzKEJyb3dzZXJSb3V0ZXIsIF9SZWFjdCRDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIEJyb3dzZXJSb3V0ZXIoKSB7XG4gICAgdmFyIF90ZW1wLCBfdGhpcywgX3JldDtcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBCcm93c2VyUm91dGVyKTtcblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIHJldHVybiBfcmV0ID0gKF90ZW1wID0gKF90aGlzID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgX1JlYWN0JENvbXBvbmVudC5jYWxsLmFwcGx5KF9SZWFjdCRDb21wb25lbnQsIFt0aGlzXS5jb25jYXQoYXJncykpKSwgX3RoaXMpLCBfdGhpcy5oaXN0b3J5ID0gY3JlYXRlSGlzdG9yeShfdGhpcy5wcm9wcyksIF90ZW1wKSwgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oX3RoaXMsIF9yZXQpO1xuICB9XG5cbiAgQnJvd3NlclJvdXRlci5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFJvdXRlciwgeyBoaXN0b3J5OiB0aGlzLmhpc3RvcnksIGNoaWxkcmVuOiB0aGlzLnByb3BzLmNoaWxkcmVuIH0pO1xuICB9O1xuXG4gIHJldHVybiBCcm93c2VyUm91dGVyO1xufShSZWFjdC5Db21wb25lbnQpO1xuXG5Ccm93c2VyUm91dGVyLnByb3BUeXBlcyA9IHtcbiAgYmFzZW5hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGZvcmNlUmVmcmVzaDogUHJvcFR5cGVzLmJvb2wsXG4gIGdldFVzZXJDb25maXJtYXRpb246IFByb3BUeXBlcy5mdW5jLFxuICBrZXlMZW5ndGg6IFByb3BUeXBlcy5udW1iZXIsXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZVxufTtcblxuXG5leHBvcnQgZGVmYXVsdCBCcm93c2VyUm91dGVyO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3Qtcm91dGVyLWRvbS9lcy9Ccm93c2VyUm91dGVyLmpzIiwiZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoIXNlbGYpIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBjYWxsICYmICh0eXBlb2YgY2FsbCA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSA/IGNhbGwgOiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFwiICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfVxuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjcmVhdGVIaXN0b3J5IGZyb20gJ2hpc3RvcnkvY3JlYXRlSGFzaEhpc3RvcnknO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAncmVhY3Qtcm91dGVyJztcblxuLyoqXG4gKiBUaGUgcHVibGljIEFQSSBmb3IgYSA8Um91dGVyPiB0aGF0IHVzZXMgd2luZG93LmxvY2F0aW9uLmhhc2guXG4gKi9cblxudmFyIEhhc2hSb3V0ZXIgPSBmdW5jdGlvbiAoX1JlYWN0JENvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoSGFzaFJvdXRlciwgX1JlYWN0JENvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gSGFzaFJvdXRlcigpIHtcbiAgICB2YXIgX3RlbXAsIF90aGlzLCBfcmV0O1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEhhc2hSb3V0ZXIpO1xuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgcmV0dXJuIF9yZXQgPSAoX3RlbXAgPSAoX3RoaXMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCBfUmVhY3QkQ29tcG9uZW50LmNhbGwuYXBwbHkoX1JlYWN0JENvbXBvbmVudCwgW3RoaXNdLmNvbmNhdChhcmdzKSkpLCBfdGhpcyksIF90aGlzLmhpc3RvcnkgPSBjcmVhdGVIaXN0b3J5KF90aGlzLnByb3BzKSwgX3RlbXApLCBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihfdGhpcywgX3JldCk7XG4gIH1cblxuICBIYXNoUm91dGVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoUm91dGVyLCB7IGhpc3Rvcnk6IHRoaXMuaGlzdG9yeSwgY2hpbGRyZW46IHRoaXMucHJvcHMuY2hpbGRyZW4gfSk7XG4gIH07XG5cbiAgcmV0dXJuIEhhc2hSb3V0ZXI7XG59KFJlYWN0LkNvbXBvbmVudCk7XG5cbkhhc2hSb3V0ZXIucHJvcFR5cGVzID0ge1xuICBiYXNlbmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgZ2V0VXNlckNvbmZpcm1hdGlvbjogUHJvcFR5cGVzLmZ1bmMsXG4gIGhhc2hUeXBlOiBQcm9wVHlwZXMub25lT2YoWydoYXNoYmFuZycsICdub3NsYXNoJywgJ3NsYXNoJ10pLFxuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGVcbn07XG5cblxuZXhwb3J0IGRlZmF1bHQgSGFzaFJvdXRlcjtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3JlYWN0LXJvdXRlci1kb20vZXMvSGFzaFJvdXRlci5qcyIsImV4cG9ydCB7IE1lbW9yeVJvdXRlciBhcyBkZWZhdWx0IH0gZnJvbSAncmVhY3Qtcm91dGVyJztcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3JlYWN0LXJvdXRlci1kb20vZXMvTWVtb3J5Um91dGVyLmpzIiwidmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcblxudmFyIF90eXBlb2YgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIiA/IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH0gOiBmdW5jdGlvbiAob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9O1xuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMob2JqLCBrZXlzKSB7IHZhciB0YXJnZXQgPSB7fTsgZm9yICh2YXIgaSBpbiBvYmopIHsgaWYgKGtleXMuaW5kZXhPZihpKSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBpKSkgY29udGludWU7IHRhcmdldFtpXSA9IG9ialtpXTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgUm91dGUgfSBmcm9tICdyZWFjdC1yb3V0ZXInO1xuaW1wb3J0IExpbmsgZnJvbSAnLi9MaW5rJztcblxuLyoqXG4gKiBBIDxMaW5rPiB3cmFwcGVyIHRoYXQga25vd3MgaWYgaXQncyBcImFjdGl2ZVwiIG9yIG5vdC5cbiAqL1xudmFyIE5hdkxpbmsgPSBmdW5jdGlvbiBOYXZMaW5rKF9yZWYpIHtcbiAgdmFyIHRvID0gX3JlZi50byxcbiAgICAgIGV4YWN0ID0gX3JlZi5leGFjdCxcbiAgICAgIHN0cmljdCA9IF9yZWYuc3RyaWN0LFxuICAgICAgbG9jYXRpb24gPSBfcmVmLmxvY2F0aW9uLFxuICAgICAgYWN0aXZlQ2xhc3NOYW1lID0gX3JlZi5hY3RpdmVDbGFzc05hbWUsXG4gICAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICAgIGFjdGl2ZVN0eWxlID0gX3JlZi5hY3RpdmVTdHlsZSxcbiAgICAgIHN0eWxlID0gX3JlZi5zdHlsZSxcbiAgICAgIGdldElzQWN0aXZlID0gX3JlZi5pc0FjdGl2ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgWyd0bycsICdleGFjdCcsICdzdHJpY3QnLCAnbG9jYXRpb24nLCAnYWN0aXZlQ2xhc3NOYW1lJywgJ2NsYXNzTmFtZScsICdhY3RpdmVTdHlsZScsICdzdHlsZScsICdpc0FjdGl2ZSddKTtcblxuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChSb3V0ZSwge1xuICAgIHBhdGg6ICh0eXBlb2YgdG8gPT09ICd1bmRlZmluZWQnID8gJ3VuZGVmaW5lZCcgOiBfdHlwZW9mKHRvKSkgPT09ICdvYmplY3QnID8gdG8ucGF0aG5hbWUgOiB0byxcbiAgICBleGFjdDogZXhhY3QsXG4gICAgc3RyaWN0OiBzdHJpY3QsXG4gICAgbG9jYXRpb246IGxvY2F0aW9uLFxuICAgIGNoaWxkcmVuOiBmdW5jdGlvbiBjaGlsZHJlbihfcmVmMikge1xuICAgICAgdmFyIGxvY2F0aW9uID0gX3JlZjIubG9jYXRpb24sXG4gICAgICAgICAgbWF0Y2ggPSBfcmVmMi5tYXRjaDtcblxuICAgICAgdmFyIGlzQWN0aXZlID0gISEoZ2V0SXNBY3RpdmUgPyBnZXRJc0FjdGl2ZShtYXRjaCwgbG9jYXRpb24pIDogbWF0Y2gpO1xuXG4gICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChMaW5rLCBfZXh0ZW5kcyh7XG4gICAgICAgIHRvOiB0byxcbiAgICAgICAgY2xhc3NOYW1lOiBpc0FjdGl2ZSA/IFthY3RpdmVDbGFzc05hbWUsIGNsYXNzTmFtZV0uZmlsdGVyKGZ1bmN0aW9uIChpKSB7XG4gICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgIH0pLmpvaW4oJyAnKSA6IGNsYXNzTmFtZSxcbiAgICAgICAgc3R5bGU6IGlzQWN0aXZlID8gX2V4dGVuZHMoe30sIHN0eWxlLCBhY3RpdmVTdHlsZSkgOiBzdHlsZVxuICAgICAgfSwgcmVzdCkpO1xuICAgIH1cbiAgfSk7XG59O1xuXG5OYXZMaW5rLnByb3BUeXBlcyA9IHtcbiAgdG86IExpbmsucHJvcFR5cGVzLnRvLFxuICBleGFjdDogUHJvcFR5cGVzLmJvb2wsXG4gIHN0cmljdDogUHJvcFR5cGVzLmJvb2wsXG4gIGxvY2F0aW9uOiBQcm9wVHlwZXMub2JqZWN0LFxuICBhY3RpdmVDbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgYWN0aXZlU3R5bGU6IFByb3BUeXBlcy5vYmplY3QsXG4gIHN0eWxlOiBQcm9wVHlwZXMub2JqZWN0LFxuICBpc0FjdGl2ZTogUHJvcFR5cGVzLmZ1bmNcbn07XG5cbk5hdkxpbmsuZGVmYXVsdFByb3BzID0ge1xuICBhY3RpdmVDbGFzc05hbWU6ICdhY3RpdmUnXG59O1xuXG5leHBvcnQgZGVmYXVsdCBOYXZMaW5rO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3Qtcm91dGVyLWRvbS9lcy9OYXZMaW5rLmpzIiwiZXhwb3J0IHsgUHJvbXB0IGFzIGRlZmF1bHQgfSBmcm9tICdyZWFjdC1yb3V0ZXInO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3Qtcm91dGVyLWRvbS9lcy9Qcm9tcHQuanMiLCJleHBvcnQgeyBSZWRpcmVjdCBhcyBkZWZhdWx0IH0gZnJvbSAncmVhY3Qtcm91dGVyJztcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3JlYWN0LXJvdXRlci1kb20vZXMvUmVkaXJlY3QuanMiLCJleHBvcnQgeyBSb3V0ZSBhcyBkZWZhdWx0IH0gZnJvbSAncmVhY3Qtcm91dGVyJztcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3JlYWN0LXJvdXRlci1kb20vZXMvUm91dGUuanMiLCJleHBvcnQgeyBSb3V0ZXIgYXMgZGVmYXVsdCB9IGZyb20gJ3JlYWN0LXJvdXRlcic7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1yb3V0ZXItZG9tL2VzL1JvdXRlci5qcyIsImV4cG9ydCB7IFN0YXRpY1JvdXRlciBhcyBkZWZhdWx0IH0gZnJvbSAncmVhY3Qtcm91dGVyJztcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3JlYWN0LXJvdXRlci1kb20vZXMvU3RhdGljUm91dGVyLmpzIiwiZXhwb3J0IHsgU3dpdGNoIGFzIGRlZmF1bHQgfSBmcm9tICdyZWFjdC1yb3V0ZXInO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3Qtcm91dGVyLWRvbS9lcy9Td2l0Y2guanMiLCJleHBvcnQgeyBtYXRjaFBhdGggYXMgZGVmYXVsdCB9IGZyb20gJ3JlYWN0LXJvdXRlcic7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1yb3V0ZXItZG9tL2VzL21hdGNoUGF0aC5qcyIsImV4cG9ydCB7IHdpdGhSb3V0ZXIgYXMgZGVmYXVsdCB9IGZyb20gJ3JlYWN0LXJvdXRlcic7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1yb3V0ZXItZG9tL2VzL3dpdGhSb3V0ZXIuanMiLCJmdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmICghc2VsZikgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIGNhbGwgJiYgKHR5cGVvZiBjYWxsID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpID8gY2FsbCA6IHNlbGY7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXCIgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcykgOiBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOyB9XG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNyZWF0ZUhpc3RvcnkgZnJvbSAnaGlzdG9yeS9jcmVhdGVNZW1vcnlIaXN0b3J5JztcbmltcG9ydCBSb3V0ZXIgZnJvbSAnLi9Sb3V0ZXInO1xuXG4vKipcbiAqIFRoZSBwdWJsaWMgQVBJIGZvciBhIDxSb3V0ZXI+IHRoYXQgc3RvcmVzIGxvY2F0aW9uIGluIG1lbW9yeS5cbiAqL1xuXG52YXIgTWVtb3J5Um91dGVyID0gZnVuY3Rpb24gKF9SZWFjdCRDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzKE1lbW9yeVJvdXRlciwgX1JlYWN0JENvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gTWVtb3J5Um91dGVyKCkge1xuICAgIHZhciBfdGVtcCwgX3RoaXMsIF9yZXQ7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgTWVtb3J5Um91dGVyKTtcblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIHJldHVybiBfcmV0ID0gKF90ZW1wID0gKF90aGlzID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgX1JlYWN0JENvbXBvbmVudC5jYWxsLmFwcGx5KF9SZWFjdCRDb21wb25lbnQsIFt0aGlzXS5jb25jYXQoYXJncykpKSwgX3RoaXMpLCBfdGhpcy5oaXN0b3J5ID0gY3JlYXRlSGlzdG9yeShfdGhpcy5wcm9wcyksIF90ZW1wKSwgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oX3RoaXMsIF9yZXQpO1xuICB9XG5cbiAgTWVtb3J5Um91dGVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoUm91dGVyLCB7IGhpc3Rvcnk6IHRoaXMuaGlzdG9yeSwgY2hpbGRyZW46IHRoaXMucHJvcHMuY2hpbGRyZW4gfSk7XG4gIH07XG5cbiAgcmV0dXJuIE1lbW9yeVJvdXRlcjtcbn0oUmVhY3QuQ29tcG9uZW50KTtcblxuTWVtb3J5Um91dGVyLnByb3BUeXBlcyA9IHtcbiAgaW5pdGlhbEVudHJpZXM6IFByb3BUeXBlcy5hcnJheSxcbiAgaW5pdGlhbEluZGV4OiBQcm9wVHlwZXMubnVtYmVyLFxuICBnZXRVc2VyQ29uZmlybWF0aW9uOiBQcm9wVHlwZXMuZnVuYyxcbiAga2V5TGVuZ3RoOiBQcm9wVHlwZXMubnVtYmVyLFxuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGVcbn07XG5cblxuZXhwb3J0IGRlZmF1bHQgTWVtb3J5Um91dGVyO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3Qtcm91dGVyL2VzL01lbW9yeVJvdXRlci5qcyIsImZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKCFzZWxmKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gY2FsbCAmJiAodHlwZW9mIGNhbGwgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikgPyBjYWxsIDogc2VsZjsgfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcIiArIHR5cGVvZiBzdXBlckNsYXNzKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCBlbnVtZXJhYmxlOiBmYWxzZSwgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKSA6IHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7IH1cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5cbi8qKlxuICogVGhlIHB1YmxpYyBBUEkgZm9yIHByb21wdGluZyB0aGUgdXNlciBiZWZvcmUgbmF2aWdhdGluZyBhd2F5XG4gKiBmcm9tIGEgc2NyZWVuIHdpdGggYSBjb21wb25lbnQuXG4gKi9cblxudmFyIFByb21wdCA9IGZ1bmN0aW9uIChfUmVhY3QkQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhQcm9tcHQsIF9SZWFjdCRDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIFByb21wdCgpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgUHJvbXB0KTtcblxuICAgIHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCBfUmVhY3QkQ29tcG9uZW50LmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpO1xuICB9XG5cbiAgUHJvbXB0LnByb3RvdHlwZS5lbmFibGUgPSBmdW5jdGlvbiBlbmFibGUobWVzc2FnZSkge1xuICAgIGlmICh0aGlzLnVuYmxvY2spIHRoaXMudW5ibG9jaygpO1xuXG4gICAgdGhpcy51bmJsb2NrID0gdGhpcy5jb250ZXh0LnJvdXRlci5oaXN0b3J5LmJsb2NrKG1lc3NhZ2UpO1xuICB9O1xuXG4gIFByb21wdC5wcm90b3R5cGUuZGlzYWJsZSA9IGZ1bmN0aW9uIGRpc2FibGUoKSB7XG4gICAgaWYgKHRoaXMudW5ibG9jaykge1xuICAgICAgdGhpcy51bmJsb2NrKCk7XG4gICAgICB0aGlzLnVuYmxvY2sgPSBudWxsO1xuICAgIH1cbiAgfTtcblxuICBQcm9tcHQucHJvdG90eXBlLmNvbXBvbmVudFdpbGxNb3VudCA9IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxNb3VudCgpIHtcbiAgICBpZiAodGhpcy5wcm9wcy53aGVuKSB0aGlzLmVuYWJsZSh0aGlzLnByb3BzLm1lc3NhZ2UpO1xuICB9O1xuXG4gIFByb21wdC5wcm90b3R5cGUuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyA9IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMobmV4dFByb3BzKSB7XG4gICAgaWYgKG5leHRQcm9wcy53aGVuKSB7XG4gICAgICBpZiAoIXRoaXMucHJvcHMud2hlbiB8fCB0aGlzLnByb3BzLm1lc3NhZ2UgIT09IG5leHRQcm9wcy5tZXNzYWdlKSB0aGlzLmVuYWJsZShuZXh0UHJvcHMubWVzc2FnZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGlzYWJsZSgpO1xuICAgIH1cbiAgfTtcblxuICBQcm9tcHQucHJvdG90eXBlLmNvbXBvbmVudFdpbGxVbm1vdW50ID0gZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgdGhpcy5kaXNhYmxlKCk7XG4gIH07XG5cbiAgUHJvbXB0LnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH07XG5cbiAgcmV0dXJuIFByb21wdDtcbn0oUmVhY3QuQ29tcG9uZW50KTtcblxuUHJvbXB0LnByb3BUeXBlcyA9IHtcbiAgd2hlbjogUHJvcFR5cGVzLmJvb2wsXG4gIG1lc3NhZ2U6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMuc3RyaW5nXSkuaXNSZXF1aXJlZFxufTtcblByb21wdC5kZWZhdWx0UHJvcHMgPSB7XG4gIHdoZW46IHRydWVcbn07XG5Qcm9tcHQuY29udGV4dFR5cGVzID0ge1xuICByb3V0ZXI6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgaGlzdG9yeTogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgIGJsb2NrOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkXG4gICAgfSkuaXNSZXF1aXJlZFxuICB9KS5pc1JlcXVpcmVkXG59O1xuXG5cbmV4cG9ydCBkZWZhdWx0IFByb21wdDtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3JlYWN0LXJvdXRlci9lcy9Qcm9tcHQuanMiLCJmdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmICghc2VsZikgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIGNhbGwgJiYgKHR5cGVvZiBjYWxsID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpID8gY2FsbCA6IHNlbGY7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXCIgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcykgOiBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOyB9XG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuXG4vKipcbiAqIFRoZSBwdWJsaWMgQVBJIGZvciB1cGRhdGluZyB0aGUgbG9jYXRpb24gcHJvZ3JhbWF0aWNhbGx5XG4gKiB3aXRoIGEgY29tcG9uZW50LlxuICovXG5cbnZhciBSZWRpcmVjdCA9IGZ1bmN0aW9uIChfUmVhY3QkQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhSZWRpcmVjdCwgX1JlYWN0JENvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gUmVkaXJlY3QoKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFJlZGlyZWN0KTtcblxuICAgIHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCBfUmVhY3QkQ29tcG9uZW50LmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpO1xuICB9XG5cbiAgUmVkaXJlY3QucHJvdG90eXBlLmlzU3RhdGljID0gZnVuY3Rpb24gaXNTdGF0aWMoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29udGV4dC5yb3V0ZXIgJiYgdGhpcy5jb250ZXh0LnJvdXRlci5zdGF0aWNDb250ZXh0O1xuICB9O1xuXG4gIFJlZGlyZWN0LnByb3RvdHlwZS5jb21wb25lbnRXaWxsTW91bnQgPSBmdW5jdGlvbiBjb21wb25lbnRXaWxsTW91bnQoKSB7XG4gICAgaWYgKHRoaXMuaXNTdGF0aWMoKSkgdGhpcy5wZXJmb3JtKCk7XG4gIH07XG5cbiAgUmVkaXJlY3QucHJvdG90eXBlLmNvbXBvbmVudERpZE1vdW50ID0gZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgaWYgKCF0aGlzLmlzU3RhdGljKCkpIHRoaXMucGVyZm9ybSgpO1xuICB9O1xuXG4gIFJlZGlyZWN0LnByb3RvdHlwZS5wZXJmb3JtID0gZnVuY3Rpb24gcGVyZm9ybSgpIHtcbiAgICB2YXIgaGlzdG9yeSA9IHRoaXMuY29udGV4dC5yb3V0ZXIuaGlzdG9yeTtcbiAgICB2YXIgX3Byb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgcHVzaCA9IF9wcm9wcy5wdXNoLFxuICAgICAgICB0byA9IF9wcm9wcy50bztcblxuXG4gICAgaWYgKHB1c2gpIHtcbiAgICAgIGhpc3RvcnkucHVzaCh0byk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGhpc3RvcnkucmVwbGFjZSh0byk7XG4gICAgfVxuICB9O1xuXG4gIFJlZGlyZWN0LnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH07XG5cbiAgcmV0dXJuIFJlZGlyZWN0O1xufShSZWFjdC5Db21wb25lbnQpO1xuXG5SZWRpcmVjdC5wcm9wVHlwZXMgPSB7XG4gIHB1c2g6IFByb3BUeXBlcy5ib29sLFxuICBmcm9tOiBQcm9wVHlwZXMuc3RyaW5nLFxuICB0bzogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm9iamVjdF0pXG59O1xuUmVkaXJlY3QuZGVmYXVsdFByb3BzID0ge1xuICBwdXNoOiBmYWxzZVxufTtcblJlZGlyZWN0LmNvbnRleHRUeXBlcyA9IHtcbiAgcm91dGVyOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGhpc3Rvcnk6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICBwdXNoOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgICAgcmVwbGFjZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZFxuICAgIH0pLmlzUmVxdWlyZWQsXG4gICAgc3RhdGljQ29udGV4dDogUHJvcFR5cGVzLm9iamVjdFxuICB9KS5pc1JlcXVpcmVkXG59O1xuXG5cbmV4cG9ydCBkZWZhdWx0IFJlZGlyZWN0O1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3Qtcm91dGVyL2VzL1JlZGlyZWN0LmpzIiwidmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKG9iaiwga2V5cykgeyB2YXIgdGFyZ2V0ID0ge307IGZvciAodmFyIGkgaW4gb2JqKSB7IGlmIChrZXlzLmluZGV4T2YoaSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgaSkpIGNvbnRpbnVlOyB0YXJnZXRbaV0gPSBvYmpbaV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmICghc2VsZikgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIGNhbGwgJiYgKHR5cGVvZiBjYWxsID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpID8gY2FsbCA6IHNlbGY7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXCIgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcykgOiBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOyB9XG5cbmltcG9ydCBpbnZhcmlhbnQgZnJvbSAnaW52YXJpYW50JztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgYWRkTGVhZGluZ1NsYXNoLCBjcmVhdGVQYXRoLCBwYXJzZVBhdGggfSBmcm9tICdoaXN0b3J5L1BhdGhVdGlscyc7XG5pbXBvcnQgUm91dGVyIGZyb20gJy4vUm91dGVyJztcblxudmFyIG5vcm1hbGl6ZUxvY2F0aW9uID0gZnVuY3Rpb24gbm9ybWFsaXplTG9jYXRpb24ob2JqZWN0KSB7XG4gIHZhciBfb2JqZWN0JHBhdGhuYW1lID0gb2JqZWN0LnBhdGhuYW1lLFxuICAgICAgcGF0aG5hbWUgPSBfb2JqZWN0JHBhdGhuYW1lID09PSB1bmRlZmluZWQgPyAnLycgOiBfb2JqZWN0JHBhdGhuYW1lLFxuICAgICAgX29iamVjdCRzZWFyY2ggPSBvYmplY3Quc2VhcmNoLFxuICAgICAgc2VhcmNoID0gX29iamVjdCRzZWFyY2ggPT09IHVuZGVmaW5lZCA/ICcnIDogX29iamVjdCRzZWFyY2gsXG4gICAgICBfb2JqZWN0JGhhc2ggPSBvYmplY3QuaGFzaCxcbiAgICAgIGhhc2ggPSBfb2JqZWN0JGhhc2ggPT09IHVuZGVmaW5lZCA/ICcnIDogX29iamVjdCRoYXNoO1xuXG5cbiAgcmV0dXJuIHtcbiAgICBwYXRobmFtZTogcGF0aG5hbWUsXG4gICAgc2VhcmNoOiBzZWFyY2ggPT09ICc/JyA/ICcnIDogc2VhcmNoLFxuICAgIGhhc2g6IGhhc2ggPT09ICcjJyA/ICcnIDogaGFzaFxuICB9O1xufTtcblxudmFyIGFkZEJhc2VuYW1lID0gZnVuY3Rpb24gYWRkQmFzZW5hbWUoYmFzZW5hbWUsIGxvY2F0aW9uKSB7XG4gIGlmICghYmFzZW5hbWUpIHJldHVybiBsb2NhdGlvbjtcblxuICByZXR1cm4gX2V4dGVuZHMoe30sIGxvY2F0aW9uLCB7XG4gICAgcGF0aG5hbWU6IGFkZExlYWRpbmdTbGFzaChiYXNlbmFtZSkgKyBsb2NhdGlvbi5wYXRobmFtZVxuICB9KTtcbn07XG5cbnZhciBzdHJpcEJhc2VuYW1lID0gZnVuY3Rpb24gc3RyaXBCYXNlbmFtZShiYXNlbmFtZSwgbG9jYXRpb24pIHtcbiAgaWYgKCFiYXNlbmFtZSkgcmV0dXJuIGxvY2F0aW9uO1xuXG4gIHZhciBiYXNlID0gYWRkTGVhZGluZ1NsYXNoKGJhc2VuYW1lKTtcblxuICBpZiAobG9jYXRpb24ucGF0aG5hbWUuaW5kZXhPZihiYXNlKSAhPT0gMCkgcmV0dXJuIGxvY2F0aW9uO1xuXG4gIHJldHVybiBfZXh0ZW5kcyh7fSwgbG9jYXRpb24sIHtcbiAgICBwYXRobmFtZTogbG9jYXRpb24ucGF0aG5hbWUuc3Vic3RyKGJhc2UubGVuZ3RoKVxuICB9KTtcbn07XG5cbnZhciBjcmVhdGVMb2NhdGlvbiA9IGZ1bmN0aW9uIGNyZWF0ZUxvY2F0aW9uKGxvY2F0aW9uKSB7XG4gIHJldHVybiB0eXBlb2YgbG9jYXRpb24gPT09ICdzdHJpbmcnID8gcGFyc2VQYXRoKGxvY2F0aW9uKSA6IG5vcm1hbGl6ZUxvY2F0aW9uKGxvY2F0aW9uKTtcbn07XG5cbnZhciBjcmVhdGVVUkwgPSBmdW5jdGlvbiBjcmVhdGVVUkwobG9jYXRpb24pIHtcbiAgcmV0dXJuIHR5cGVvZiBsb2NhdGlvbiA9PT0gJ3N0cmluZycgPyBsb2NhdGlvbiA6IGNyZWF0ZVBhdGgobG9jYXRpb24pO1xufTtcblxudmFyIHN0YXRpY0hhbmRsZXIgPSBmdW5jdGlvbiBzdGF0aWNIYW5kbGVyKG1ldGhvZE5hbWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICBpbnZhcmlhbnQoZmFsc2UsICdZb3UgY2Fubm90ICVzIHdpdGggPFN0YXRpY1JvdXRlcj4nLCBtZXRob2ROYW1lKTtcbiAgfTtcbn07XG5cbnZhciBub29wID0gZnVuY3Rpb24gbm9vcCgpIHt9O1xuXG4vKipcbiAqIFRoZSBwdWJsaWMgdG9wLWxldmVsIEFQSSBmb3IgYSBcInN0YXRpY1wiIDxSb3V0ZXI+LCBzby1jYWxsZWQgYmVjYXVzZSBpdFxuICogY2FuJ3QgYWN0dWFsbHkgY2hhbmdlIHRoZSBjdXJyZW50IGxvY2F0aW9uLiBJbnN0ZWFkLCBpdCBqdXN0IHJlY29yZHNcbiAqIGxvY2F0aW9uIGNoYW5nZXMgaW4gYSBjb250ZXh0IG9iamVjdC4gVXNlZnVsIG1haW5seSBpbiB0ZXN0aW5nIGFuZFxuICogc2VydmVyLXJlbmRlcmluZyBzY2VuYXJpb3MuXG4gKi9cblxudmFyIFN0YXRpY1JvdXRlciA9IGZ1bmN0aW9uIChfUmVhY3QkQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhTdGF0aWNSb3V0ZXIsIF9SZWFjdCRDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIFN0YXRpY1JvdXRlcigpIHtcbiAgICB2YXIgX3RlbXAsIF90aGlzLCBfcmV0O1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFN0YXRpY1JvdXRlcik7XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICByZXR1cm4gX3JldCA9IChfdGVtcCA9IChfdGhpcyA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIF9SZWFjdCRDb21wb25lbnQuY2FsbC5hcHBseShfUmVhY3QkQ29tcG9uZW50LCBbdGhpc10uY29uY2F0KGFyZ3MpKSksIF90aGlzKSwgX3RoaXMuY3JlYXRlSHJlZiA9IGZ1bmN0aW9uIChwYXRoKSB7XG4gICAgICByZXR1cm4gYWRkTGVhZGluZ1NsYXNoKF90aGlzLnByb3BzLmJhc2VuYW1lICsgY3JlYXRlVVJMKHBhdGgpKTtcbiAgICB9LCBfdGhpcy5oYW5kbGVQdXNoID0gZnVuY3Rpb24gKGxvY2F0aW9uKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgICBiYXNlbmFtZSA9IF90aGlzJHByb3BzLmJhc2VuYW1lLFxuICAgICAgICAgIGNvbnRleHQgPSBfdGhpcyRwcm9wcy5jb250ZXh0O1xuXG4gICAgICBjb250ZXh0LmFjdGlvbiA9ICdQVVNIJztcbiAgICAgIGNvbnRleHQubG9jYXRpb24gPSBhZGRCYXNlbmFtZShiYXNlbmFtZSwgY3JlYXRlTG9jYXRpb24obG9jYXRpb24pKTtcbiAgICAgIGNvbnRleHQudXJsID0gY3JlYXRlVVJMKGNvbnRleHQubG9jYXRpb24pO1xuICAgIH0sIF90aGlzLmhhbmRsZVJlcGxhY2UgPSBmdW5jdGlvbiAobG9jYXRpb24pIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczIgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgICBiYXNlbmFtZSA9IF90aGlzJHByb3BzMi5iYXNlbmFtZSxcbiAgICAgICAgICBjb250ZXh0ID0gX3RoaXMkcHJvcHMyLmNvbnRleHQ7XG5cbiAgICAgIGNvbnRleHQuYWN0aW9uID0gJ1JFUExBQ0UnO1xuICAgICAgY29udGV4dC5sb2NhdGlvbiA9IGFkZEJhc2VuYW1lKGJhc2VuYW1lLCBjcmVhdGVMb2NhdGlvbihsb2NhdGlvbikpO1xuICAgICAgY29udGV4dC51cmwgPSBjcmVhdGVVUkwoY29udGV4dC5sb2NhdGlvbik7XG4gICAgfSwgX3RoaXMuaGFuZGxlTGlzdGVuID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIG5vb3A7XG4gICAgfSwgX3RoaXMuaGFuZGxlQmxvY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gbm9vcDtcbiAgICB9LCBfdGVtcCksIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKF90aGlzLCBfcmV0KTtcbiAgfVxuXG4gIFN0YXRpY1JvdXRlci5wcm90b3R5cGUuZ2V0Q2hpbGRDb250ZXh0ID0gZnVuY3Rpb24gZ2V0Q2hpbGRDb250ZXh0KCkge1xuICAgIHJldHVybiB7XG4gICAgICByb3V0ZXI6IHtcbiAgICAgICAgc3RhdGljQ29udGV4dDogdGhpcy5wcm9wcy5jb250ZXh0XG4gICAgICB9XG4gICAgfTtcbiAgfTtcblxuICBTdGF0aWNSb3V0ZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICB2YXIgX3Byb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgYmFzZW5hbWUgPSBfcHJvcHMuYmFzZW5hbWUsXG4gICAgICAgIGNvbnRleHQgPSBfcHJvcHMuY29udGV4dCxcbiAgICAgICAgbG9jYXRpb24gPSBfcHJvcHMubG9jYXRpb24sXG4gICAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9wcm9wcywgWydiYXNlbmFtZScsICdjb250ZXh0JywgJ2xvY2F0aW9uJ10pO1xuXG4gICAgdmFyIGhpc3RvcnkgPSB7XG4gICAgICBjcmVhdGVIcmVmOiB0aGlzLmNyZWF0ZUhyZWYsXG4gICAgICBhY3Rpb246ICdQT1AnLFxuICAgICAgbG9jYXRpb246IHN0cmlwQmFzZW5hbWUoYmFzZW5hbWUsIGNyZWF0ZUxvY2F0aW9uKGxvY2F0aW9uKSksXG4gICAgICBwdXNoOiB0aGlzLmhhbmRsZVB1c2gsXG4gICAgICByZXBsYWNlOiB0aGlzLmhhbmRsZVJlcGxhY2UsXG4gICAgICBnbzogc3RhdGljSGFuZGxlcignZ28nKSxcbiAgICAgIGdvQmFjazogc3RhdGljSGFuZGxlcignZ29CYWNrJyksXG4gICAgICBnb0ZvcndhcmQ6IHN0YXRpY0hhbmRsZXIoJ2dvRm9yd2FyZCcpLFxuICAgICAgbGlzdGVuOiB0aGlzLmhhbmRsZUxpc3RlbixcbiAgICAgIGJsb2NrOiB0aGlzLmhhbmRsZUJsb2NrXG4gICAgfTtcblxuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFJvdXRlciwgX2V4dGVuZHMoe30sIHByb3BzLCB7IGhpc3Rvcnk6IGhpc3RvcnkgfSkpO1xuICB9O1xuXG4gIHJldHVybiBTdGF0aWNSb3V0ZXI7XG59KFJlYWN0LkNvbXBvbmVudCk7XG5cblN0YXRpY1JvdXRlci5wcm9wVHlwZXMgPSB7XG4gIGJhc2VuYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjb250ZXh0OiBQcm9wVHlwZXMub2JqZWN0LmlzUmVxdWlyZWQsXG4gIGxvY2F0aW9uOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMub2JqZWN0XSlcbn07XG5TdGF0aWNSb3V0ZXIuZGVmYXVsdFByb3BzID0ge1xuICBiYXNlbmFtZTogJycsXG4gIGxvY2F0aW9uOiAnLydcbn07XG5TdGF0aWNSb3V0ZXIuY2hpbGRDb250ZXh0VHlwZXMgPSB7XG4gIHJvdXRlcjogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkXG59O1xuXG5cbmV4cG9ydCBkZWZhdWx0IFN0YXRpY1JvdXRlcjtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3JlYWN0LXJvdXRlci9lcy9TdGF0aWNSb3V0ZXIuanMiLCJmdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmICghc2VsZikgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIGNhbGwgJiYgKHR5cGVvZiBjYWxsID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpID8gY2FsbCA6IHNlbGY7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXCIgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcykgOiBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOyB9XG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHdhcm5pbmcgZnJvbSAnd2FybmluZyc7XG5pbXBvcnQgbWF0Y2hQYXRoIGZyb20gJy4vbWF0Y2hQYXRoJztcblxuLyoqXG4gKiBUaGUgcHVibGljIEFQSSBmb3IgcmVuZGVyaW5nIHRoZSBmaXJzdCA8Um91dGU+IHRoYXQgbWF0Y2hlcy5cbiAqL1xuXG52YXIgU3dpdGNoID0gZnVuY3Rpb24gKF9SZWFjdCRDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzKFN3aXRjaCwgX1JlYWN0JENvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gU3dpdGNoKCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBTd2l0Y2gpO1xuXG4gICAgcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIF9SZWFjdCRDb21wb25lbnQuYXBwbHkodGhpcywgYXJndW1lbnRzKSk7XG4gIH1cblxuICBTd2l0Y2gucHJvdG90eXBlLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgPSBmdW5jdGlvbiBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG5leHRQcm9wcykge1xuICAgIHdhcm5pbmcoIShuZXh0UHJvcHMubG9jYXRpb24gJiYgIXRoaXMucHJvcHMubG9jYXRpb24pLCAnPFN3aXRjaD4gZWxlbWVudHMgc2hvdWxkIG5vdCBjaGFuZ2UgZnJvbSB1bmNvbnRyb2xsZWQgdG8gY29udHJvbGxlZCAob3IgdmljZSB2ZXJzYSkuIFlvdSBpbml0aWFsbHkgdXNlZCBubyBcImxvY2F0aW9uXCIgcHJvcCBhbmQgdGhlbiBwcm92aWRlZCBvbmUgb24gYSBzdWJzZXF1ZW50IHJlbmRlci4nKTtcblxuICAgIHdhcm5pbmcoISghbmV4dFByb3BzLmxvY2F0aW9uICYmIHRoaXMucHJvcHMubG9jYXRpb24pLCAnPFN3aXRjaD4gZWxlbWVudHMgc2hvdWxkIG5vdCBjaGFuZ2UgZnJvbSBjb250cm9sbGVkIHRvIHVuY29udHJvbGxlZCAob3IgdmljZSB2ZXJzYSkuIFlvdSBwcm92aWRlZCBhIFwibG9jYXRpb25cIiBwcm9wIGluaXRpYWxseSBidXQgb21pdHRlZCBpdCBvbiBhIHN1YnNlcXVlbnQgcmVuZGVyLicpO1xuICB9O1xuXG4gIFN3aXRjaC5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgIHZhciByb3V0ZSA9IHRoaXMuY29udGV4dC5yb3V0ZXIucm91dGU7XG4gICAgdmFyIGNoaWxkcmVuID0gdGhpcy5wcm9wcy5jaGlsZHJlbjtcblxuICAgIHZhciBsb2NhdGlvbiA9IHRoaXMucHJvcHMubG9jYXRpb24gfHwgcm91dGUubG9jYXRpb247XG5cbiAgICB2YXIgbWF0Y2ggPSB2b2lkIDAsXG4gICAgICAgIGNoaWxkID0gdm9pZCAwO1xuICAgIFJlYWN0LkNoaWxkcmVuLmZvckVhY2goY2hpbGRyZW4sIGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgICBpZiAoIVJlYWN0LmlzVmFsaWRFbGVtZW50KGVsZW1lbnQpKSByZXR1cm47XG5cbiAgICAgIHZhciBfZWxlbWVudCRwcm9wcyA9IGVsZW1lbnQucHJvcHMsXG4gICAgICAgICAgcGF0aFByb3AgPSBfZWxlbWVudCRwcm9wcy5wYXRoLFxuICAgICAgICAgIGV4YWN0ID0gX2VsZW1lbnQkcHJvcHMuZXhhY3QsXG4gICAgICAgICAgc3RyaWN0ID0gX2VsZW1lbnQkcHJvcHMuc3RyaWN0LFxuICAgICAgICAgIGZyb20gPSBfZWxlbWVudCRwcm9wcy5mcm9tO1xuXG4gICAgICB2YXIgcGF0aCA9IHBhdGhQcm9wIHx8IGZyb207XG5cbiAgICAgIGlmIChtYXRjaCA9PSBudWxsKSB7XG4gICAgICAgIGNoaWxkID0gZWxlbWVudDtcbiAgICAgICAgbWF0Y2ggPSBwYXRoID8gbWF0Y2hQYXRoKGxvY2F0aW9uLnBhdGhuYW1lLCB7IHBhdGg6IHBhdGgsIGV4YWN0OiBleGFjdCwgc3RyaWN0OiBzdHJpY3QgfSkgOiByb3V0ZS5tYXRjaDtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBtYXRjaCA/IFJlYWN0LmNsb25lRWxlbWVudChjaGlsZCwgeyBsb2NhdGlvbjogbG9jYXRpb24sIGNvbXB1dGVkTWF0Y2g6IG1hdGNoIH0pIDogbnVsbDtcbiAgfTtcblxuICByZXR1cm4gU3dpdGNoO1xufShSZWFjdC5Db21wb25lbnQpO1xuXG5Td2l0Y2guY29udGV4dFR5cGVzID0ge1xuICByb3V0ZXI6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgcm91dGU6IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZFxuICB9KS5pc1JlcXVpcmVkXG59O1xuU3dpdGNoLnByb3BUeXBlcyA9IHtcbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICBsb2NhdGlvbjogUHJvcFR5cGVzLm9iamVjdFxufTtcblxuXG5leHBvcnQgZGVmYXVsdCBTd2l0Y2g7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1yb3V0ZXIvZXMvU3dpdGNoLmpzIiwidmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKG9iaiwga2V5cykgeyB2YXIgdGFyZ2V0ID0ge307IGZvciAodmFyIGkgaW4gb2JqKSB7IGlmIChrZXlzLmluZGV4T2YoaSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgaSkpIGNvbnRpbnVlOyB0YXJnZXRbaV0gPSBvYmpbaV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBob2lzdFN0YXRpY3MgZnJvbSAnaG9pc3Qtbm9uLXJlYWN0LXN0YXRpY3MnO1xuaW1wb3J0IFJvdXRlIGZyb20gJy4vUm91dGUnO1xuXG4vKipcbiAqIEEgcHVibGljIGhpZ2hlci1vcmRlciBjb21wb25lbnQgdG8gYWNjZXNzIHRoZSBpbXBlcmF0aXZlIEFQSVxuICovXG52YXIgd2l0aFJvdXRlciA9IGZ1bmN0aW9uIHdpdGhSb3V0ZXIoQ29tcG9uZW50KSB7XG4gIHZhciBDID0gZnVuY3Rpb24gQyhwcm9wcykge1xuICAgIHZhciB3cmFwcGVkQ29tcG9uZW50UmVmID0gcHJvcHMud3JhcHBlZENvbXBvbmVudFJlZixcbiAgICAgICAgcmVtYWluaW5nUHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMocHJvcHMsIFsnd3JhcHBlZENvbXBvbmVudFJlZiddKTtcblxuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFJvdXRlLCB7IHJlbmRlcjogZnVuY3Rpb24gcmVuZGVyKHJvdXRlQ29tcG9uZW50UHJvcHMpIHtcbiAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ29tcG9uZW50LCBfZXh0ZW5kcyh7fSwgcmVtYWluaW5nUHJvcHMsIHJvdXRlQ29tcG9uZW50UHJvcHMsIHsgcmVmOiB3cmFwcGVkQ29tcG9uZW50UmVmIH0pKTtcbiAgICAgIH0gfSk7XG4gIH07XG5cbiAgQy5kaXNwbGF5TmFtZSA9ICd3aXRoUm91dGVyKCcgKyAoQ29tcG9uZW50LmRpc3BsYXlOYW1lIHx8IENvbXBvbmVudC5uYW1lKSArICcpJztcbiAgQy5XcmFwcGVkQ29tcG9uZW50ID0gQ29tcG9uZW50O1xuICBDLnByb3BUeXBlcyA9IHtcbiAgICB3cmFwcGVkQ29tcG9uZW50UmVmOiBQcm9wVHlwZXMuZnVuY1xuICB9O1xuXG4gIHJldHVybiBob2lzdFN0YXRpY3MoQywgQ29tcG9uZW50KTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhSb3V0ZXI7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1yb3V0ZXIvZXMvd2l0aFJvdXRlci5qcyIsIm1vZHVsZS5leHBvcnRzID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAoYXJyKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYXJyKSA9PSAnW29iamVjdCBBcnJheV0nO1xufTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3Qtcm91dGVyL34vaXNhcnJheS9pbmRleC5qcyIsInZhciBpc2FycmF5ID0gcmVxdWlyZSgnaXNhcnJheScpXG5cbi8qKlxuICogRXhwb3NlIGBwYXRoVG9SZWdleHBgLlxuICovXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGhUb1JlZ2V4cFxubW9kdWxlLmV4cG9ydHMucGFyc2UgPSBwYXJzZVxubW9kdWxlLmV4cG9ydHMuY29tcGlsZSA9IGNvbXBpbGVcbm1vZHVsZS5leHBvcnRzLnRva2Vuc1RvRnVuY3Rpb24gPSB0b2tlbnNUb0Z1bmN0aW9uXG5tb2R1bGUuZXhwb3J0cy50b2tlbnNUb1JlZ0V4cCA9IHRva2Vuc1RvUmVnRXhwXG5cbi8qKlxuICogVGhlIG1haW4gcGF0aCBtYXRjaGluZyByZWdleHAgdXRpbGl0eS5cbiAqXG4gKiBAdHlwZSB7UmVnRXhwfVxuICovXG52YXIgUEFUSF9SRUdFWFAgPSBuZXcgUmVnRXhwKFtcbiAgLy8gTWF0Y2ggZXNjYXBlZCBjaGFyYWN0ZXJzIHRoYXQgd291bGQgb3RoZXJ3aXNlIGFwcGVhciBpbiBmdXR1cmUgbWF0Y2hlcy5cbiAgLy8gVGhpcyBhbGxvd3MgdGhlIHVzZXIgdG8gZXNjYXBlIHNwZWNpYWwgY2hhcmFjdGVycyB0aGF0IHdvbid0IHRyYW5zZm9ybS5cbiAgJyhcXFxcXFxcXC4pJyxcbiAgLy8gTWF0Y2ggRXhwcmVzcy1zdHlsZSBwYXJhbWV0ZXJzIGFuZCB1bi1uYW1lZCBwYXJhbWV0ZXJzIHdpdGggYSBwcmVmaXhcbiAgLy8gYW5kIG9wdGlvbmFsIHN1ZmZpeGVzLiBNYXRjaGVzIGFwcGVhciBhczpcbiAgLy9cbiAgLy8gXCIvOnRlc3QoXFxcXGQrKT9cIiA9PiBbXCIvXCIsIFwidGVzdFwiLCBcIlxcZCtcIiwgdW5kZWZpbmVkLCBcIj9cIiwgdW5kZWZpbmVkXVxuICAvLyBcIi9yb3V0ZShcXFxcZCspXCIgID0+IFt1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBcIlxcZCtcIiwgdW5kZWZpbmVkLCB1bmRlZmluZWRdXG4gIC8vIFwiLypcIiAgICAgICAgICAgID0+IFtcIi9cIiwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBcIipcIl1cbiAgJyhbXFxcXC8uXSk/KD86KD86XFxcXDooXFxcXHcrKSg/OlxcXFwoKCg/OlxcXFxcXFxcLnxbXlxcXFxcXFxcKCldKSspXFxcXCkpP3xcXFxcKCgoPzpcXFxcXFxcXC58W15cXFxcXFxcXCgpXSkrKVxcXFwpKShbKyo/XSk/fChcXFxcKikpJ1xuXS5qb2luKCd8JyksICdnJylcblxuLyoqXG4gKiBQYXJzZSBhIHN0cmluZyBmb3IgdGhlIHJhdyB0b2tlbnMuXG4gKlxuICogQHBhcmFtICB7c3RyaW5nfSAgc3RyXG4gKiBAcGFyYW0gIHtPYmplY3Q9fSBvcHRpb25zXG4gKiBAcmV0dXJuIHshQXJyYXl9XG4gKi9cbmZ1bmN0aW9uIHBhcnNlIChzdHIsIG9wdGlvbnMpIHtcbiAgdmFyIHRva2VucyA9IFtdXG4gIHZhciBrZXkgPSAwXG4gIHZhciBpbmRleCA9IDBcbiAgdmFyIHBhdGggPSAnJ1xuICB2YXIgZGVmYXVsdERlbGltaXRlciA9IG9wdGlvbnMgJiYgb3B0aW9ucy5kZWxpbWl0ZXIgfHwgJy8nXG4gIHZhciByZXNcblxuICB3aGlsZSAoKHJlcyA9IFBBVEhfUkVHRVhQLmV4ZWMoc3RyKSkgIT0gbnVsbCkge1xuICAgIHZhciBtID0gcmVzWzBdXG4gICAgdmFyIGVzY2FwZWQgPSByZXNbMV1cbiAgICB2YXIgb2Zmc2V0ID0gcmVzLmluZGV4XG4gICAgcGF0aCArPSBzdHIuc2xpY2UoaW5kZXgsIG9mZnNldClcbiAgICBpbmRleCA9IG9mZnNldCArIG0ubGVuZ3RoXG5cbiAgICAvLyBJZ25vcmUgYWxyZWFkeSBlc2NhcGVkIHNlcXVlbmNlcy5cbiAgICBpZiAoZXNjYXBlZCkge1xuICAgICAgcGF0aCArPSBlc2NhcGVkWzFdXG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIHZhciBuZXh0ID0gc3RyW2luZGV4XVxuICAgIHZhciBwcmVmaXggPSByZXNbMl1cbiAgICB2YXIgbmFtZSA9IHJlc1szXVxuICAgIHZhciBjYXB0dXJlID0gcmVzWzRdXG4gICAgdmFyIGdyb3VwID0gcmVzWzVdXG4gICAgdmFyIG1vZGlmaWVyID0gcmVzWzZdXG4gICAgdmFyIGFzdGVyaXNrID0gcmVzWzddXG5cbiAgICAvLyBQdXNoIHRoZSBjdXJyZW50IHBhdGggb250byB0aGUgdG9rZW5zLlxuICAgIGlmIChwYXRoKSB7XG4gICAgICB0b2tlbnMucHVzaChwYXRoKVxuICAgICAgcGF0aCA9ICcnXG4gICAgfVxuXG4gICAgdmFyIHBhcnRpYWwgPSBwcmVmaXggIT0gbnVsbCAmJiBuZXh0ICE9IG51bGwgJiYgbmV4dCAhPT0gcHJlZml4XG4gICAgdmFyIHJlcGVhdCA9IG1vZGlmaWVyID09PSAnKycgfHwgbW9kaWZpZXIgPT09ICcqJ1xuICAgIHZhciBvcHRpb25hbCA9IG1vZGlmaWVyID09PSAnPycgfHwgbW9kaWZpZXIgPT09ICcqJ1xuICAgIHZhciBkZWxpbWl0ZXIgPSByZXNbMl0gfHwgZGVmYXVsdERlbGltaXRlclxuICAgIHZhciBwYXR0ZXJuID0gY2FwdHVyZSB8fCBncm91cFxuXG4gICAgdG9rZW5zLnB1c2goe1xuICAgICAgbmFtZTogbmFtZSB8fCBrZXkrKyxcbiAgICAgIHByZWZpeDogcHJlZml4IHx8ICcnLFxuICAgICAgZGVsaW1pdGVyOiBkZWxpbWl0ZXIsXG4gICAgICBvcHRpb25hbDogb3B0aW9uYWwsXG4gICAgICByZXBlYXQ6IHJlcGVhdCxcbiAgICAgIHBhcnRpYWw6IHBhcnRpYWwsXG4gICAgICBhc3RlcmlzazogISFhc3RlcmlzayxcbiAgICAgIHBhdHRlcm46IHBhdHRlcm4gPyBlc2NhcGVHcm91cChwYXR0ZXJuKSA6IChhc3RlcmlzayA/ICcuKicgOiAnW14nICsgZXNjYXBlU3RyaW5nKGRlbGltaXRlcikgKyAnXSs/JylcbiAgICB9KVxuICB9XG5cbiAgLy8gTWF0Y2ggYW55IGNoYXJhY3RlcnMgc3RpbGwgcmVtYWluaW5nLlxuICBpZiAoaW5kZXggPCBzdHIubGVuZ3RoKSB7XG4gICAgcGF0aCArPSBzdHIuc3Vic3RyKGluZGV4KVxuICB9XG5cbiAgLy8gSWYgdGhlIHBhdGggZXhpc3RzLCBwdXNoIGl0IG9udG8gdGhlIGVuZC5cbiAgaWYgKHBhdGgpIHtcbiAgICB0b2tlbnMucHVzaChwYXRoKVxuICB9XG5cbiAgcmV0dXJuIHRva2Vuc1xufVxuXG4vKipcbiAqIENvbXBpbGUgYSBzdHJpbmcgdG8gYSB0ZW1wbGF0ZSBmdW5jdGlvbiBmb3IgdGhlIHBhdGguXG4gKlxuICogQHBhcmFtICB7c3RyaW5nfSAgICAgICAgICAgICBzdHJcbiAqIEBwYXJhbSAge09iamVjdD19ICAgICAgICAgICAgb3B0aW9uc1xuICogQHJldHVybiB7IWZ1bmN0aW9uKE9iamVjdD0sIE9iamVjdD0pfVxuICovXG5mdW5jdGlvbiBjb21waWxlIChzdHIsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIHRva2Vuc1RvRnVuY3Rpb24ocGFyc2Uoc3RyLCBvcHRpb25zKSlcbn1cblxuLyoqXG4gKiBQcmV0dGllciBlbmNvZGluZyBvZiBVUkkgcGF0aCBzZWdtZW50cy5cbiAqXG4gKiBAcGFyYW0gIHtzdHJpbmd9XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGVuY29kZVVSSUNvbXBvbmVudFByZXR0eSAoc3RyKSB7XG4gIHJldHVybiBlbmNvZGVVUkkoc3RyKS5yZXBsYWNlKC9bXFwvPyNdL2csIGZ1bmN0aW9uIChjKSB7XG4gICAgcmV0dXJuICclJyArIGMuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKVxuICB9KVxufVxuXG4vKipcbiAqIEVuY29kZSB0aGUgYXN0ZXJpc2sgcGFyYW1ldGVyLiBTaW1pbGFyIHRvIGBwcmV0dHlgLCBidXQgYWxsb3dzIHNsYXNoZXMuXG4gKlxuICogQHBhcmFtICB7c3RyaW5nfVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBlbmNvZGVBc3RlcmlzayAoc3RyKSB7XG4gIHJldHVybiBlbmNvZGVVUkkoc3RyKS5yZXBsYWNlKC9bPyNdL2csIGZ1bmN0aW9uIChjKSB7XG4gICAgcmV0dXJuICclJyArIGMuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKVxuICB9KVxufVxuXG4vKipcbiAqIEV4cG9zZSBhIG1ldGhvZCBmb3IgdHJhbnNmb3JtaW5nIHRva2VucyBpbnRvIHRoZSBwYXRoIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiB0b2tlbnNUb0Z1bmN0aW9uICh0b2tlbnMpIHtcbiAgLy8gQ29tcGlsZSBhbGwgdGhlIHRva2VucyBpbnRvIHJlZ2V4cHMuXG4gIHZhciBtYXRjaGVzID0gbmV3IEFycmF5KHRva2Vucy5sZW5ndGgpXG5cbiAgLy8gQ29tcGlsZSBhbGwgdGhlIHBhdHRlcm5zIGJlZm9yZSBjb21waWxhdGlvbi5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAodHlwZW9mIHRva2Vuc1tpXSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIG1hdGNoZXNbaV0gPSBuZXcgUmVnRXhwKCdeKD86JyArIHRva2Vuc1tpXS5wYXR0ZXJuICsgJykkJylcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gKG9iaiwgb3B0cykge1xuICAgIHZhciBwYXRoID0gJydcbiAgICB2YXIgZGF0YSA9IG9iaiB8fCB7fVxuICAgIHZhciBvcHRpb25zID0gb3B0cyB8fCB7fVxuICAgIHZhciBlbmNvZGUgPSBvcHRpb25zLnByZXR0eSA/IGVuY29kZVVSSUNvbXBvbmVudFByZXR0eSA6IGVuY29kZVVSSUNvbXBvbmVudFxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciB0b2tlbiA9IHRva2Vuc1tpXVxuXG4gICAgICBpZiAodHlwZW9mIHRva2VuID09PSAnc3RyaW5nJykge1xuICAgICAgICBwYXRoICs9IHRva2VuXG5cbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgdmFyIHZhbHVlID0gZGF0YVt0b2tlbi5uYW1lXVxuICAgICAgdmFyIHNlZ21lbnRcblxuICAgICAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICAgICAgaWYgKHRva2VuLm9wdGlvbmFsKSB7XG4gICAgICAgICAgLy8gUHJlcGVuZCBwYXJ0aWFsIHNlZ21lbnQgcHJlZml4ZXMuXG4gICAgICAgICAgaWYgKHRva2VuLnBhcnRpYWwpIHtcbiAgICAgICAgICAgIHBhdGggKz0gdG9rZW4ucHJlZml4XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBcIicgKyB0b2tlbi5uYW1lICsgJ1wiIHRvIGJlIGRlZmluZWQnKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChpc2FycmF5KHZhbHVlKSkge1xuICAgICAgICBpZiAoIXRva2VuLnJlcGVhdCkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIFwiJyArIHRva2VuLm5hbWUgKyAnXCIgdG8gbm90IHJlcGVhdCwgYnV0IHJlY2VpdmVkIGAnICsgSlNPTi5zdHJpbmdpZnkodmFsdWUpICsgJ2AnKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIGlmICh0b2tlbi5vcHRpb25hbCkge1xuICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgXCInICsgdG9rZW4ubmFtZSArICdcIiB0byBub3QgYmUgZW1wdHknKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdmFsdWUubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICBzZWdtZW50ID0gZW5jb2RlKHZhbHVlW2pdKVxuXG4gICAgICAgICAgaWYgKCFtYXRjaGVzW2ldLnRlc3Qoc2VnbWVudCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIGFsbCBcIicgKyB0b2tlbi5uYW1lICsgJ1wiIHRvIG1hdGNoIFwiJyArIHRva2VuLnBhdHRlcm4gKyAnXCIsIGJ1dCByZWNlaXZlZCBgJyArIEpTT04uc3RyaW5naWZ5KHNlZ21lbnQpICsgJ2AnKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHBhdGggKz0gKGogPT09IDAgPyB0b2tlbi5wcmVmaXggOiB0b2tlbi5kZWxpbWl0ZXIpICsgc2VnbWVudFxuICAgICAgICB9XG5cbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgc2VnbWVudCA9IHRva2VuLmFzdGVyaXNrID8gZW5jb2RlQXN0ZXJpc2sodmFsdWUpIDogZW5jb2RlKHZhbHVlKVxuXG4gICAgICBpZiAoIW1hdGNoZXNbaV0udGVzdChzZWdtZW50KSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBcIicgKyB0b2tlbi5uYW1lICsgJ1wiIHRvIG1hdGNoIFwiJyArIHRva2VuLnBhdHRlcm4gKyAnXCIsIGJ1dCByZWNlaXZlZCBcIicgKyBzZWdtZW50ICsgJ1wiJylcbiAgICAgIH1cblxuICAgICAgcGF0aCArPSB0b2tlbi5wcmVmaXggKyBzZWdtZW50XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhdGhcbiAgfVxufVxuXG4vKipcbiAqIEVzY2FwZSBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBzdHJpbmcuXG4gKlxuICogQHBhcmFtICB7c3RyaW5nfSBzdHJcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZXNjYXBlU3RyaW5nIChzdHIpIHtcbiAgcmV0dXJuIHN0ci5yZXBsYWNlKC8oWy4rKj89XiE6JHt9KClbXFxdfFxcL1xcXFxdKS9nLCAnXFxcXCQxJylcbn1cblxuLyoqXG4gKiBFc2NhcGUgdGhlIGNhcHR1cmluZyBncm91cCBieSBlc2NhcGluZyBzcGVjaWFsIGNoYXJhY3RlcnMgYW5kIG1lYW5pbmcuXG4gKlxuICogQHBhcmFtICB7c3RyaW5nfSBncm91cFxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBlc2NhcGVHcm91cCAoZ3JvdXApIHtcbiAgcmV0dXJuIGdyb3VwLnJlcGxhY2UoLyhbPSE6JFxcLygpXSkvZywgJ1xcXFwkMScpXG59XG5cbi8qKlxuICogQXR0YWNoIHRoZSBrZXlzIGFzIGEgcHJvcGVydHkgb2YgdGhlIHJlZ2V4cC5cbiAqXG4gKiBAcGFyYW0gIHshUmVnRXhwfSByZVxuICogQHBhcmFtICB7QXJyYXl9ICAga2V5c1xuICogQHJldHVybiB7IVJlZ0V4cH1cbiAqL1xuZnVuY3Rpb24gYXR0YWNoS2V5cyAocmUsIGtleXMpIHtcbiAgcmUua2V5cyA9IGtleXNcbiAgcmV0dXJuIHJlXG59XG5cbi8qKlxuICogR2V0IHRoZSBmbGFncyBmb3IgYSByZWdleHAgZnJvbSB0aGUgb3B0aW9ucy5cbiAqXG4gKiBAcGFyYW0gIHtPYmplY3R9IG9wdGlvbnNcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZmxhZ3MgKG9wdGlvbnMpIHtcbiAgcmV0dXJuIG9wdGlvbnMuc2Vuc2l0aXZlID8gJycgOiAnaSdcbn1cblxuLyoqXG4gKiBQdWxsIG91dCBrZXlzIGZyb20gYSByZWdleHAuXG4gKlxuICogQHBhcmFtICB7IVJlZ0V4cH0gcGF0aFxuICogQHBhcmFtICB7IUFycmF5fSAga2V5c1xuICogQHJldHVybiB7IVJlZ0V4cH1cbiAqL1xuZnVuY3Rpb24gcmVnZXhwVG9SZWdleHAgKHBhdGgsIGtleXMpIHtcbiAgLy8gVXNlIGEgbmVnYXRpdmUgbG9va2FoZWFkIHRvIG1hdGNoIG9ubHkgY2FwdHVyaW5nIGdyb3Vwcy5cbiAgdmFyIGdyb3VwcyA9IHBhdGguc291cmNlLm1hdGNoKC9cXCgoPyFcXD8pL2cpXG5cbiAgaWYgKGdyb3Vwcykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ3JvdXBzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBrZXlzLnB1c2goe1xuICAgICAgICBuYW1lOiBpLFxuICAgICAgICBwcmVmaXg6IG51bGwsXG4gICAgICAgIGRlbGltaXRlcjogbnVsbCxcbiAgICAgICAgb3B0aW9uYWw6IGZhbHNlLFxuICAgICAgICByZXBlYXQ6IGZhbHNlLFxuICAgICAgICBwYXJ0aWFsOiBmYWxzZSxcbiAgICAgICAgYXN0ZXJpc2s6IGZhbHNlLFxuICAgICAgICBwYXR0ZXJuOiBudWxsXG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBhdHRhY2hLZXlzKHBhdGgsIGtleXMpXG59XG5cbi8qKlxuICogVHJhbnNmb3JtIGFuIGFycmF5IGludG8gYSByZWdleHAuXG4gKlxuICogQHBhcmFtICB7IUFycmF5fSAgcGF0aFxuICogQHBhcmFtICB7QXJyYXl9ICAga2V5c1xuICogQHBhcmFtICB7IU9iamVjdH0gb3B0aW9uc1xuICogQHJldHVybiB7IVJlZ0V4cH1cbiAqL1xuZnVuY3Rpb24gYXJyYXlUb1JlZ2V4cCAocGF0aCwga2V5cywgb3B0aW9ucykge1xuICB2YXIgcGFydHMgPSBbXVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcGF0aC5sZW5ndGg7IGkrKykge1xuICAgIHBhcnRzLnB1c2gocGF0aFRvUmVnZXhwKHBhdGhbaV0sIGtleXMsIG9wdGlvbnMpLnNvdXJjZSlcbiAgfVxuXG4gIHZhciByZWdleHAgPSBuZXcgUmVnRXhwKCcoPzonICsgcGFydHMuam9pbignfCcpICsgJyknLCBmbGFncyhvcHRpb25zKSlcblxuICByZXR1cm4gYXR0YWNoS2V5cyhyZWdleHAsIGtleXMpXG59XG5cbi8qKlxuICogQ3JlYXRlIGEgcGF0aCByZWdleHAgZnJvbSBzdHJpbmcgaW5wdXQuXG4gKlxuICogQHBhcmFtICB7c3RyaW5nfSAgcGF0aFxuICogQHBhcmFtICB7IUFycmF5fSAga2V5c1xuICogQHBhcmFtICB7IU9iamVjdH0gb3B0aW9uc1xuICogQHJldHVybiB7IVJlZ0V4cH1cbiAqL1xuZnVuY3Rpb24gc3RyaW5nVG9SZWdleHAgKHBhdGgsIGtleXMsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIHRva2Vuc1RvUmVnRXhwKHBhcnNlKHBhdGgsIG9wdGlvbnMpLCBrZXlzLCBvcHRpb25zKVxufVxuXG4vKipcbiAqIEV4cG9zZSBhIGZ1bmN0aW9uIGZvciB0YWtpbmcgdG9rZW5zIGFuZCByZXR1cm5pbmcgYSBSZWdFeHAuXG4gKlxuICogQHBhcmFtICB7IUFycmF5fSAgICAgICAgICB0b2tlbnNcbiAqIEBwYXJhbSAgeyhBcnJheXxPYmplY3QpPX0ga2V5c1xuICogQHBhcmFtICB7T2JqZWN0PX0gICAgICAgICBvcHRpb25zXG4gKiBAcmV0dXJuIHshUmVnRXhwfVxuICovXG5mdW5jdGlvbiB0b2tlbnNUb1JlZ0V4cCAodG9rZW5zLCBrZXlzLCBvcHRpb25zKSB7XG4gIGlmICghaXNhcnJheShrZXlzKSkge1xuICAgIG9wdGlvbnMgPSAvKiogQHR5cGUgeyFPYmplY3R9ICovIChrZXlzIHx8IG9wdGlvbnMpXG4gICAga2V5cyA9IFtdXG4gIH1cblxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fVxuXG4gIHZhciBzdHJpY3QgPSBvcHRpb25zLnN0cmljdFxuICB2YXIgZW5kID0gb3B0aW9ucy5lbmQgIT09IGZhbHNlXG4gIHZhciByb3V0ZSA9ICcnXG5cbiAgLy8gSXRlcmF0ZSBvdmVyIHRoZSB0b2tlbnMgYW5kIGNyZWF0ZSBvdXIgcmVnZXhwIHN0cmluZy5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgdG9rZW4gPSB0b2tlbnNbaV1cblxuICAgIGlmICh0eXBlb2YgdG9rZW4gPT09ICdzdHJpbmcnKSB7XG4gICAgICByb3V0ZSArPSBlc2NhcGVTdHJpbmcodG9rZW4pXG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBwcmVmaXggPSBlc2NhcGVTdHJpbmcodG9rZW4ucHJlZml4KVxuICAgICAgdmFyIGNhcHR1cmUgPSAnKD86JyArIHRva2VuLnBhdHRlcm4gKyAnKSdcblxuICAgICAga2V5cy5wdXNoKHRva2VuKVxuXG4gICAgICBpZiAodG9rZW4ucmVwZWF0KSB7XG4gICAgICAgIGNhcHR1cmUgKz0gJyg/OicgKyBwcmVmaXggKyBjYXB0dXJlICsgJykqJ1xuICAgICAgfVxuXG4gICAgICBpZiAodG9rZW4ub3B0aW9uYWwpIHtcbiAgICAgICAgaWYgKCF0b2tlbi5wYXJ0aWFsKSB7XG4gICAgICAgICAgY2FwdHVyZSA9ICcoPzonICsgcHJlZml4ICsgJygnICsgY2FwdHVyZSArICcpKT8nXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2FwdHVyZSA9IHByZWZpeCArICcoJyArIGNhcHR1cmUgKyAnKT8nXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNhcHR1cmUgPSBwcmVmaXggKyAnKCcgKyBjYXB0dXJlICsgJyknXG4gICAgICB9XG5cbiAgICAgIHJvdXRlICs9IGNhcHR1cmVcbiAgICB9XG4gIH1cblxuICB2YXIgZGVsaW1pdGVyID0gZXNjYXBlU3RyaW5nKG9wdGlvbnMuZGVsaW1pdGVyIHx8ICcvJylcbiAgdmFyIGVuZHNXaXRoRGVsaW1pdGVyID0gcm91dGUuc2xpY2UoLWRlbGltaXRlci5sZW5ndGgpID09PSBkZWxpbWl0ZXJcblxuICAvLyBJbiBub24tc3RyaWN0IG1vZGUgd2UgYWxsb3cgYSBzbGFzaCBhdCB0aGUgZW5kIG9mIG1hdGNoLiBJZiB0aGUgcGF0aCB0b1xuICAvLyBtYXRjaCBhbHJlYWR5IGVuZHMgd2l0aCBhIHNsYXNoLCB3ZSByZW1vdmUgaXQgZm9yIGNvbnNpc3RlbmN5LiBUaGUgc2xhc2hcbiAgLy8gaXMgdmFsaWQgYXQgdGhlIGVuZCBvZiBhIHBhdGggbWF0Y2gsIG5vdCBpbiB0aGUgbWlkZGxlLiBUaGlzIGlzIGltcG9ydGFudFxuICAvLyBpbiBub24tZW5kaW5nIG1vZGUsIHdoZXJlIFwiL3Rlc3QvXCIgc2hvdWxkbid0IG1hdGNoIFwiL3Rlc3QvL3JvdXRlXCIuXG4gIGlmICghc3RyaWN0KSB7XG4gICAgcm91dGUgPSAoZW5kc1dpdGhEZWxpbWl0ZXIgPyByb3V0ZS5zbGljZSgwLCAtZGVsaW1pdGVyLmxlbmd0aCkgOiByb3V0ZSkgKyAnKD86JyArIGRlbGltaXRlciArICcoPz0kKSk/J1xuICB9XG5cbiAgaWYgKGVuZCkge1xuICAgIHJvdXRlICs9ICckJ1xuICB9IGVsc2Uge1xuICAgIC8vIEluIG5vbi1lbmRpbmcgbW9kZSwgd2UgbmVlZCB0aGUgY2FwdHVyaW5nIGdyb3VwcyB0byBtYXRjaCBhcyBtdWNoIGFzXG4gICAgLy8gcG9zc2libGUgYnkgdXNpbmcgYSBwb3NpdGl2ZSBsb29rYWhlYWQgdG8gdGhlIGVuZCBvciBuZXh0IHBhdGggc2VnbWVudC5cbiAgICByb3V0ZSArPSBzdHJpY3QgJiYgZW5kc1dpdGhEZWxpbWl0ZXIgPyAnJyA6ICcoPz0nICsgZGVsaW1pdGVyICsgJ3wkKSdcbiAgfVxuXG4gIHJldHVybiBhdHRhY2hLZXlzKG5ldyBSZWdFeHAoJ14nICsgcm91dGUsIGZsYWdzKG9wdGlvbnMpKSwga2V5cylcbn1cblxuLyoqXG4gKiBOb3JtYWxpemUgdGhlIGdpdmVuIHBhdGggc3RyaW5nLCByZXR1cm5pbmcgYSByZWd1bGFyIGV4cHJlc3Npb24uXG4gKlxuICogQW4gZW1wdHkgYXJyYXkgY2FuIGJlIHBhc3NlZCBpbiBmb3IgdGhlIGtleXMsIHdoaWNoIHdpbGwgaG9sZCB0aGVcbiAqIHBsYWNlaG9sZGVyIGtleSBkZXNjcmlwdGlvbnMuIEZvciBleGFtcGxlLCB1c2luZyBgL3VzZXIvOmlkYCwgYGtleXNgIHdpbGxcbiAqIGNvbnRhaW4gYFt7IG5hbWU6ICdpZCcsIGRlbGltaXRlcjogJy8nLCBvcHRpb25hbDogZmFsc2UsIHJlcGVhdDogZmFsc2UgfV1gLlxuICpcbiAqIEBwYXJhbSAgeyhzdHJpbmd8UmVnRXhwfEFycmF5KX0gcGF0aFxuICogQHBhcmFtICB7KEFycmF5fE9iamVjdCk9fSAgICAgICBrZXlzXG4gKiBAcGFyYW0gIHtPYmplY3Q9fSAgICAgICAgICAgICAgIG9wdGlvbnNcbiAqIEByZXR1cm4geyFSZWdFeHB9XG4gKi9cbmZ1bmN0aW9uIHBhdGhUb1JlZ2V4cCAocGF0aCwga2V5cywgb3B0aW9ucykge1xuICBpZiAoIWlzYXJyYXkoa2V5cykpIHtcbiAgICBvcHRpb25zID0gLyoqIEB0eXBlIHshT2JqZWN0fSAqLyAoa2V5cyB8fCBvcHRpb25zKVxuICAgIGtleXMgPSBbXVxuICB9XG5cbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge31cblxuICBpZiAocGF0aCBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgIHJldHVybiByZWdleHBUb1JlZ2V4cChwYXRoLCAvKiogQHR5cGUgeyFBcnJheX0gKi8gKGtleXMpKVxuICB9XG5cbiAgaWYgKGlzYXJyYXkocGF0aCkpIHtcbiAgICByZXR1cm4gYXJyYXlUb1JlZ2V4cCgvKiogQHR5cGUgeyFBcnJheX0gKi8gKHBhdGgpLCAvKiogQHR5cGUgeyFBcnJheX0gKi8gKGtleXMpLCBvcHRpb25zKVxuICB9XG5cbiAgcmV0dXJuIHN0cmluZ1RvUmVnZXhwKC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocGF0aCksIC8qKiBAdHlwZSB7IUFycmF5fSAqLyAoa2V5cyksIG9wdGlvbnMpXG59XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3JlYWN0LXJvdXRlci9+L3BhdGgtdG8tcmVnZXhwL2luZGV4LmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIEVzY2FwZSBhbmQgd3JhcCBrZXkgc28gaXQgaXMgc2FmZSB0byB1c2UgYXMgYSByZWFjdGlkXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSB0byBiZSBlc2NhcGVkLlxuICogQHJldHVybiB7c3RyaW5nfSB0aGUgZXNjYXBlZCBrZXkuXG4gKi9cblxuZnVuY3Rpb24gZXNjYXBlKGtleSkge1xuICB2YXIgZXNjYXBlUmVnZXggPSAvWz06XS9nO1xuICB2YXIgZXNjYXBlckxvb2t1cCA9IHtcbiAgICAnPSc6ICc9MCcsXG4gICAgJzonOiAnPTInXG4gIH07XG4gIHZhciBlc2NhcGVkU3RyaW5nID0gKCcnICsga2V5KS5yZXBsYWNlKGVzY2FwZVJlZ2V4LCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICByZXR1cm4gZXNjYXBlckxvb2t1cFttYXRjaF07XG4gIH0pO1xuXG4gIHJldHVybiAnJCcgKyBlc2NhcGVkU3RyaW5nO1xufVxuXG4vKipcbiAqIFVuZXNjYXBlIGFuZCB1bndyYXAga2V5IGZvciBodW1hbi1yZWFkYWJsZSBkaXNwbGF5XG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSB0byB1bmVzY2FwZS5cbiAqIEByZXR1cm4ge3N0cmluZ30gdGhlIHVuZXNjYXBlZCBrZXkuXG4gKi9cbmZ1bmN0aW9uIHVuZXNjYXBlKGtleSkge1xuICB2YXIgdW5lc2NhcGVSZWdleCA9IC8oPTB8PTIpL2c7XG4gIHZhciB1bmVzY2FwZXJMb29rdXAgPSB7XG4gICAgJz0wJzogJz0nLFxuICAgICc9Mic6ICc6J1xuICB9O1xuICB2YXIga2V5U3Vic3RyaW5nID0ga2V5WzBdID09PSAnLicgJiYga2V5WzFdID09PSAnJCcgPyBrZXkuc3Vic3RyaW5nKDIpIDoga2V5LnN1YnN0cmluZygxKTtcblxuICByZXR1cm4gKCcnICsga2V5U3Vic3RyaW5nKS5yZXBsYWNlKHVuZXNjYXBlUmVnZXgsIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgIHJldHVybiB1bmVzY2FwZXJMb29rdXBbbWF0Y2hdO1xuICB9KTtcbn1cblxudmFyIEtleUVzY2FwZVV0aWxzID0ge1xuICBlc2NhcGU6IGVzY2FwZSxcbiAgdW5lc2NhcGU6IHVuZXNjYXBlXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEtleUVzY2FwZVV0aWxzO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QvbGliL0tleUVzY2FwZVV0aWxzLmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgX3Byb2RJbnZhcmlhbnQgPSByZXF1aXJlKCcuL3JlYWN0UHJvZEludmFyaWFudCcpO1xuXG52YXIgaW52YXJpYW50ID0gcmVxdWlyZSgnZmJqcy9saWIvaW52YXJpYW50Jyk7XG5cbi8qKlxuICogU3RhdGljIHBvb2xlcnMuIFNldmVyYWwgY3VzdG9tIHZlcnNpb25zIGZvciBlYWNoIHBvdGVudGlhbCBudW1iZXIgb2ZcbiAqIGFyZ3VtZW50cy4gQSBjb21wbGV0ZWx5IGdlbmVyaWMgcG9vbGVyIGlzIGVhc3kgdG8gaW1wbGVtZW50LCBidXQgd291bGRcbiAqIHJlcXVpcmUgYWNjZXNzaW5nIHRoZSBgYXJndW1lbnRzYCBvYmplY3QuIEluIGVhY2ggb2YgdGhlc2UsIGB0aGlzYCByZWZlcnMgdG9cbiAqIHRoZSBDbGFzcyBpdHNlbGYsIG5vdCBhbiBpbnN0YW5jZS4gSWYgYW55IG90aGVycyBhcmUgbmVlZGVkLCBzaW1wbHkgYWRkIHRoZW1cbiAqIGhlcmUsIG9yIGluIHRoZWlyIG93biBmaWxlcy5cbiAqL1xudmFyIG9uZUFyZ3VtZW50UG9vbGVyID0gZnVuY3Rpb24gKGNvcHlGaWVsZHNGcm9tKSB7XG4gIHZhciBLbGFzcyA9IHRoaXM7XG4gIGlmIChLbGFzcy5pbnN0YW5jZVBvb2wubGVuZ3RoKSB7XG4gICAgdmFyIGluc3RhbmNlID0gS2xhc3MuaW5zdGFuY2VQb29sLnBvcCgpO1xuICAgIEtsYXNzLmNhbGwoaW5zdGFuY2UsIGNvcHlGaWVsZHNGcm9tKTtcbiAgICByZXR1cm4gaW5zdGFuY2U7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG5ldyBLbGFzcyhjb3B5RmllbGRzRnJvbSk7XG4gIH1cbn07XG5cbnZhciB0d29Bcmd1bWVudFBvb2xlciA9IGZ1bmN0aW9uIChhMSwgYTIpIHtcbiAgdmFyIEtsYXNzID0gdGhpcztcbiAgaWYgKEtsYXNzLmluc3RhbmNlUG9vbC5sZW5ndGgpIHtcbiAgICB2YXIgaW5zdGFuY2UgPSBLbGFzcy5pbnN0YW5jZVBvb2wucG9wKCk7XG4gICAgS2xhc3MuY2FsbChpbnN0YW5jZSwgYTEsIGEyKTtcbiAgICByZXR1cm4gaW5zdGFuY2U7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG5ldyBLbGFzcyhhMSwgYTIpO1xuICB9XG59O1xuXG52YXIgdGhyZWVBcmd1bWVudFBvb2xlciA9IGZ1bmN0aW9uIChhMSwgYTIsIGEzKSB7XG4gIHZhciBLbGFzcyA9IHRoaXM7XG4gIGlmIChLbGFzcy5pbnN0YW5jZVBvb2wubGVuZ3RoKSB7XG4gICAgdmFyIGluc3RhbmNlID0gS2xhc3MuaW5zdGFuY2VQb29sLnBvcCgpO1xuICAgIEtsYXNzLmNhbGwoaW5zdGFuY2UsIGExLCBhMiwgYTMpO1xuICAgIHJldHVybiBpbnN0YW5jZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbmV3IEtsYXNzKGExLCBhMiwgYTMpO1xuICB9XG59O1xuXG52YXIgZm91ckFyZ3VtZW50UG9vbGVyID0gZnVuY3Rpb24gKGExLCBhMiwgYTMsIGE0KSB7XG4gIHZhciBLbGFzcyA9IHRoaXM7XG4gIGlmIChLbGFzcy5pbnN0YW5jZVBvb2wubGVuZ3RoKSB7XG4gICAgdmFyIGluc3RhbmNlID0gS2xhc3MuaW5zdGFuY2VQb29sLnBvcCgpO1xuICAgIEtsYXNzLmNhbGwoaW5zdGFuY2UsIGExLCBhMiwgYTMsIGE0KTtcbiAgICByZXR1cm4gaW5zdGFuY2U7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG5ldyBLbGFzcyhhMSwgYTIsIGEzLCBhNCk7XG4gIH1cbn07XG5cbnZhciBzdGFuZGFyZFJlbGVhc2VyID0gZnVuY3Rpb24gKGluc3RhbmNlKSB7XG4gIHZhciBLbGFzcyA9IHRoaXM7XG4gICEoaW5zdGFuY2UgaW5zdGFuY2VvZiBLbGFzcykgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAnVHJ5aW5nIHRvIHJlbGVhc2UgYW4gaW5zdGFuY2UgaW50byBhIHBvb2wgb2YgYSBkaWZmZXJlbnQgdHlwZS4nKSA6IF9wcm9kSW52YXJpYW50KCcyNScpIDogdm9pZCAwO1xuICBpbnN0YW5jZS5kZXN0cnVjdG9yKCk7XG4gIGlmIChLbGFzcy5pbnN0YW5jZVBvb2wubGVuZ3RoIDwgS2xhc3MucG9vbFNpemUpIHtcbiAgICBLbGFzcy5pbnN0YW5jZVBvb2wucHVzaChpbnN0YW5jZSk7XG4gIH1cbn07XG5cbnZhciBERUZBVUxUX1BPT0xfU0laRSA9IDEwO1xudmFyIERFRkFVTFRfUE9PTEVSID0gb25lQXJndW1lbnRQb29sZXI7XG5cbi8qKlxuICogQXVnbWVudHMgYENvcHlDb25zdHJ1Y3RvcmAgdG8gYmUgYSBwb29sYWJsZSBjbGFzcywgYXVnbWVudGluZyBvbmx5IHRoZSBjbGFzc1xuICogaXRzZWxmIChzdGF0aWNhbGx5KSBub3QgYWRkaW5nIGFueSBwcm90b3R5cGljYWwgZmllbGRzLiBBbnkgQ29weUNvbnN0cnVjdG9yXG4gKiB5b3UgZ2l2ZSB0aGlzIG1heSBoYXZlIGEgYHBvb2xTaXplYCBwcm9wZXJ0eSwgYW5kIHdpbGwgbG9vayBmb3IgYVxuICogcHJvdG90eXBpY2FsIGBkZXN0cnVjdG9yYCBvbiBpbnN0YW5jZXMuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gQ29weUNvbnN0cnVjdG9yIENvbnN0cnVjdG9yIHRoYXQgY2FuIGJlIHVzZWQgdG8gcmVzZXQuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwb29sZXIgQ3VzdG9taXphYmxlIHBvb2xlci5cbiAqL1xudmFyIGFkZFBvb2xpbmdUbyA9IGZ1bmN0aW9uIChDb3B5Q29uc3RydWN0b3IsIHBvb2xlcikge1xuICAvLyBDYXN0aW5nIGFzIGFueSBzbyB0aGF0IGZsb3cgaWdub3JlcyB0aGUgYWN0dWFsIGltcGxlbWVudGF0aW9uIGFuZCB0cnVzdHNcbiAgLy8gaXQgdG8gbWF0Y2ggdGhlIHR5cGUgd2UgZGVjbGFyZWRcbiAgdmFyIE5ld0tsYXNzID0gQ29weUNvbnN0cnVjdG9yO1xuICBOZXdLbGFzcy5pbnN0YW5jZVBvb2wgPSBbXTtcbiAgTmV3S2xhc3MuZ2V0UG9vbGVkID0gcG9vbGVyIHx8IERFRkFVTFRfUE9PTEVSO1xuICBpZiAoIU5ld0tsYXNzLnBvb2xTaXplKSB7XG4gICAgTmV3S2xhc3MucG9vbFNpemUgPSBERUZBVUxUX1BPT0xfU0laRTtcbiAgfVxuICBOZXdLbGFzcy5yZWxlYXNlID0gc3RhbmRhcmRSZWxlYXNlcjtcbiAgcmV0dXJuIE5ld0tsYXNzO1xufTtcblxudmFyIFBvb2xlZENsYXNzID0ge1xuICBhZGRQb29saW5nVG86IGFkZFBvb2xpbmdUbyxcbiAgb25lQXJndW1lbnRQb29sZXI6IG9uZUFyZ3VtZW50UG9vbGVyLFxuICB0d29Bcmd1bWVudFBvb2xlcjogdHdvQXJndW1lbnRQb29sZXIsXG4gIHRocmVlQXJndW1lbnRQb29sZXI6IHRocmVlQXJndW1lbnRQb29sZXIsXG4gIGZvdXJBcmd1bWVudFBvb2xlcjogZm91ckFyZ3VtZW50UG9vbGVyXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFBvb2xlZENsYXNzO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QvbGliL1Bvb2xlZENsYXNzLmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFBvb2xlZENsYXNzID0gcmVxdWlyZSgnLi9Qb29sZWRDbGFzcycpO1xudmFyIFJlYWN0RWxlbWVudCA9IHJlcXVpcmUoJy4vUmVhY3RFbGVtZW50Jyk7XG5cbnZhciBlbXB0eUZ1bmN0aW9uID0gcmVxdWlyZSgnZmJqcy9saWIvZW1wdHlGdW5jdGlvbicpO1xudmFyIHRyYXZlcnNlQWxsQ2hpbGRyZW4gPSByZXF1aXJlKCcuL3RyYXZlcnNlQWxsQ2hpbGRyZW4nKTtcblxudmFyIHR3b0FyZ3VtZW50UG9vbGVyID0gUG9vbGVkQ2xhc3MudHdvQXJndW1lbnRQb29sZXI7XG52YXIgZm91ckFyZ3VtZW50UG9vbGVyID0gUG9vbGVkQ2xhc3MuZm91ckFyZ3VtZW50UG9vbGVyO1xuXG52YXIgdXNlclByb3ZpZGVkS2V5RXNjYXBlUmVnZXggPSAvXFwvKy9nO1xuZnVuY3Rpb24gZXNjYXBlVXNlclByb3ZpZGVkS2V5KHRleHQpIHtcbiAgcmV0dXJuICgnJyArIHRleHQpLnJlcGxhY2UodXNlclByb3ZpZGVkS2V5RXNjYXBlUmVnZXgsICckJi8nKTtcbn1cblxuLyoqXG4gKiBQb29sZWRDbGFzcyByZXByZXNlbnRpbmcgdGhlIGJvb2trZWVwaW5nIGFzc29jaWF0ZWQgd2l0aCBwZXJmb3JtaW5nIGEgY2hpbGRcbiAqIHRyYXZlcnNhbC4gQWxsb3dzIGF2b2lkaW5nIGJpbmRpbmcgY2FsbGJhY2tzLlxuICpcbiAqIEBjb25zdHJ1Y3RvciBGb3JFYWNoQm9va0tlZXBpbmdcbiAqIEBwYXJhbSB7IWZ1bmN0aW9ufSBmb3JFYWNoRnVuY3Rpb24gRnVuY3Rpb24gdG8gcGVyZm9ybSB0cmF2ZXJzYWwgd2l0aC5cbiAqIEBwYXJhbSB7Pyp9IGZvckVhY2hDb250ZXh0IENvbnRleHQgdG8gcGVyZm9ybSBjb250ZXh0IHdpdGguXG4gKi9cbmZ1bmN0aW9uIEZvckVhY2hCb29rS2VlcGluZyhmb3JFYWNoRnVuY3Rpb24sIGZvckVhY2hDb250ZXh0KSB7XG4gIHRoaXMuZnVuYyA9IGZvckVhY2hGdW5jdGlvbjtcbiAgdGhpcy5jb250ZXh0ID0gZm9yRWFjaENvbnRleHQ7XG4gIHRoaXMuY291bnQgPSAwO1xufVxuRm9yRWFjaEJvb2tLZWVwaW5nLnByb3RvdHlwZS5kZXN0cnVjdG9yID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmZ1bmMgPSBudWxsO1xuICB0aGlzLmNvbnRleHQgPSBudWxsO1xuICB0aGlzLmNvdW50ID0gMDtcbn07XG5Qb29sZWRDbGFzcy5hZGRQb29saW5nVG8oRm9yRWFjaEJvb2tLZWVwaW5nLCB0d29Bcmd1bWVudFBvb2xlcik7XG5cbmZ1bmN0aW9uIGZvckVhY2hTaW5nbGVDaGlsZChib29rS2VlcGluZywgY2hpbGQsIG5hbWUpIHtcbiAgdmFyIGZ1bmMgPSBib29rS2VlcGluZy5mdW5jLFxuICAgICAgY29udGV4dCA9IGJvb2tLZWVwaW5nLmNvbnRleHQ7XG5cbiAgZnVuYy5jYWxsKGNvbnRleHQsIGNoaWxkLCBib29rS2VlcGluZy5jb3VudCsrKTtcbn1cblxuLyoqXG4gKiBJdGVyYXRlcyB0aHJvdWdoIGNoaWxkcmVuIHRoYXQgYXJlIHR5cGljYWxseSBzcGVjaWZpZWQgYXMgYHByb3BzLmNoaWxkcmVuYC5cbiAqXG4gKiBTZWUgaHR0cHM6Ly9mYWNlYm9vay5naXRodWIuaW8vcmVhY3QvZG9jcy90b3AtbGV2ZWwtYXBpLmh0bWwjcmVhY3QuY2hpbGRyZW4uZm9yZWFjaFxuICpcbiAqIFRoZSBwcm92aWRlZCBmb3JFYWNoRnVuYyhjaGlsZCwgaW5kZXgpIHdpbGwgYmUgY2FsbGVkIGZvciBlYWNoXG4gKiBsZWFmIGNoaWxkLlxuICpcbiAqIEBwYXJhbSB7Pyp9IGNoaWxkcmVuIENoaWxkcmVuIHRyZWUgY29udGFpbmVyLlxuICogQHBhcmFtIHtmdW5jdGlvbigqLCBpbnQpfSBmb3JFYWNoRnVuY1xuICogQHBhcmFtIHsqfSBmb3JFYWNoQ29udGV4dCBDb250ZXh0IGZvciBmb3JFYWNoQ29udGV4dC5cbiAqL1xuZnVuY3Rpb24gZm9yRWFjaENoaWxkcmVuKGNoaWxkcmVuLCBmb3JFYWNoRnVuYywgZm9yRWFjaENvbnRleHQpIHtcbiAgaWYgKGNoaWxkcmVuID09IG51bGwpIHtcbiAgICByZXR1cm4gY2hpbGRyZW47XG4gIH1cbiAgdmFyIHRyYXZlcnNlQ29udGV4dCA9IEZvckVhY2hCb29rS2VlcGluZy5nZXRQb29sZWQoZm9yRWFjaEZ1bmMsIGZvckVhY2hDb250ZXh0KTtcbiAgdHJhdmVyc2VBbGxDaGlsZHJlbihjaGlsZHJlbiwgZm9yRWFjaFNpbmdsZUNoaWxkLCB0cmF2ZXJzZUNvbnRleHQpO1xuICBGb3JFYWNoQm9va0tlZXBpbmcucmVsZWFzZSh0cmF2ZXJzZUNvbnRleHQpO1xufVxuXG4vKipcbiAqIFBvb2xlZENsYXNzIHJlcHJlc2VudGluZyB0aGUgYm9va2tlZXBpbmcgYXNzb2NpYXRlZCB3aXRoIHBlcmZvcm1pbmcgYSBjaGlsZFxuICogbWFwcGluZy4gQWxsb3dzIGF2b2lkaW5nIGJpbmRpbmcgY2FsbGJhY2tzLlxuICpcbiAqIEBjb25zdHJ1Y3RvciBNYXBCb29rS2VlcGluZ1xuICogQHBhcmFtIHshKn0gbWFwUmVzdWx0IE9iamVjdCBjb250YWluaW5nIHRoZSBvcmRlcmVkIG1hcCBvZiByZXN1bHRzLlxuICogQHBhcmFtIHshZnVuY3Rpb259IG1hcEZ1bmN0aW9uIEZ1bmN0aW9uIHRvIHBlcmZvcm0gbWFwcGluZyB3aXRoLlxuICogQHBhcmFtIHs/Kn0gbWFwQ29udGV4dCBDb250ZXh0IHRvIHBlcmZvcm0gbWFwcGluZyB3aXRoLlxuICovXG5mdW5jdGlvbiBNYXBCb29rS2VlcGluZyhtYXBSZXN1bHQsIGtleVByZWZpeCwgbWFwRnVuY3Rpb24sIG1hcENvbnRleHQpIHtcbiAgdGhpcy5yZXN1bHQgPSBtYXBSZXN1bHQ7XG4gIHRoaXMua2V5UHJlZml4ID0ga2V5UHJlZml4O1xuICB0aGlzLmZ1bmMgPSBtYXBGdW5jdGlvbjtcbiAgdGhpcy5jb250ZXh0ID0gbWFwQ29udGV4dDtcbiAgdGhpcy5jb3VudCA9IDA7XG59XG5NYXBCb29rS2VlcGluZy5wcm90b3R5cGUuZGVzdHJ1Y3RvciA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5yZXN1bHQgPSBudWxsO1xuICB0aGlzLmtleVByZWZpeCA9IG51bGw7XG4gIHRoaXMuZnVuYyA9IG51bGw7XG4gIHRoaXMuY29udGV4dCA9IG51bGw7XG4gIHRoaXMuY291bnQgPSAwO1xufTtcblBvb2xlZENsYXNzLmFkZFBvb2xpbmdUbyhNYXBCb29rS2VlcGluZywgZm91ckFyZ3VtZW50UG9vbGVyKTtcblxuZnVuY3Rpb24gbWFwU2luZ2xlQ2hpbGRJbnRvQ29udGV4dChib29rS2VlcGluZywgY2hpbGQsIGNoaWxkS2V5KSB7XG4gIHZhciByZXN1bHQgPSBib29rS2VlcGluZy5yZXN1bHQsXG4gICAgICBrZXlQcmVmaXggPSBib29rS2VlcGluZy5rZXlQcmVmaXgsXG4gICAgICBmdW5jID0gYm9va0tlZXBpbmcuZnVuYyxcbiAgICAgIGNvbnRleHQgPSBib29rS2VlcGluZy5jb250ZXh0O1xuXG5cbiAgdmFyIG1hcHBlZENoaWxkID0gZnVuYy5jYWxsKGNvbnRleHQsIGNoaWxkLCBib29rS2VlcGluZy5jb3VudCsrKTtcbiAgaWYgKEFycmF5LmlzQXJyYXkobWFwcGVkQ2hpbGQpKSB7XG4gICAgbWFwSW50b1dpdGhLZXlQcmVmaXhJbnRlcm5hbChtYXBwZWRDaGlsZCwgcmVzdWx0LCBjaGlsZEtleSwgZW1wdHlGdW5jdGlvbi50aGF0UmV0dXJuc0FyZ3VtZW50KTtcbiAgfSBlbHNlIGlmIChtYXBwZWRDaGlsZCAhPSBudWxsKSB7XG4gICAgaWYgKFJlYWN0RWxlbWVudC5pc1ZhbGlkRWxlbWVudChtYXBwZWRDaGlsZCkpIHtcbiAgICAgIG1hcHBlZENoaWxkID0gUmVhY3RFbGVtZW50LmNsb25lQW5kUmVwbGFjZUtleShtYXBwZWRDaGlsZCxcbiAgICAgIC8vIEtlZXAgYm90aCB0aGUgKG1hcHBlZCkgYW5kIG9sZCBrZXlzIGlmIHRoZXkgZGlmZmVyLCBqdXN0IGFzXG4gICAgICAvLyB0cmF2ZXJzZUFsbENoaWxkcmVuIHVzZWQgdG8gZG8gZm9yIG9iamVjdHMgYXMgY2hpbGRyZW5cbiAgICAgIGtleVByZWZpeCArIChtYXBwZWRDaGlsZC5rZXkgJiYgKCFjaGlsZCB8fCBjaGlsZC5rZXkgIT09IG1hcHBlZENoaWxkLmtleSkgPyBlc2NhcGVVc2VyUHJvdmlkZWRLZXkobWFwcGVkQ2hpbGQua2V5KSArICcvJyA6ICcnKSArIGNoaWxkS2V5KTtcbiAgICB9XG4gICAgcmVzdWx0LnB1c2gobWFwcGVkQ2hpbGQpO1xuICB9XG59XG5cbmZ1bmN0aW9uIG1hcEludG9XaXRoS2V5UHJlZml4SW50ZXJuYWwoY2hpbGRyZW4sIGFycmF5LCBwcmVmaXgsIGZ1bmMsIGNvbnRleHQpIHtcbiAgdmFyIGVzY2FwZWRQcmVmaXggPSAnJztcbiAgaWYgKHByZWZpeCAhPSBudWxsKSB7XG4gICAgZXNjYXBlZFByZWZpeCA9IGVzY2FwZVVzZXJQcm92aWRlZEtleShwcmVmaXgpICsgJy8nO1xuICB9XG4gIHZhciB0cmF2ZXJzZUNvbnRleHQgPSBNYXBCb29rS2VlcGluZy5nZXRQb29sZWQoYXJyYXksIGVzY2FwZWRQcmVmaXgsIGZ1bmMsIGNvbnRleHQpO1xuICB0cmF2ZXJzZUFsbENoaWxkcmVuKGNoaWxkcmVuLCBtYXBTaW5nbGVDaGlsZEludG9Db250ZXh0LCB0cmF2ZXJzZUNvbnRleHQpO1xuICBNYXBCb29rS2VlcGluZy5yZWxlYXNlKHRyYXZlcnNlQ29udGV4dCk7XG59XG5cbi8qKlxuICogTWFwcyBjaGlsZHJlbiB0aGF0IGFyZSB0eXBpY2FsbHkgc3BlY2lmaWVkIGFzIGBwcm9wcy5jaGlsZHJlbmAuXG4gKlxuICogU2VlIGh0dHBzOi8vZmFjZWJvb2suZ2l0aHViLmlvL3JlYWN0L2RvY3MvdG9wLWxldmVsLWFwaS5odG1sI3JlYWN0LmNoaWxkcmVuLm1hcFxuICpcbiAqIFRoZSBwcm92aWRlZCBtYXBGdW5jdGlvbihjaGlsZCwga2V5LCBpbmRleCkgd2lsbCBiZSBjYWxsZWQgZm9yIGVhY2hcbiAqIGxlYWYgY2hpbGQuXG4gKlxuICogQHBhcmFtIHs/Kn0gY2hpbGRyZW4gQ2hpbGRyZW4gdHJlZSBjb250YWluZXIuXG4gKiBAcGFyYW0ge2Z1bmN0aW9uKCosIGludCl9IGZ1bmMgVGhlIG1hcCBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7Kn0gY29udGV4dCBDb250ZXh0IGZvciBtYXBGdW5jdGlvbi5cbiAqIEByZXR1cm4ge29iamVjdH0gT2JqZWN0IGNvbnRhaW5pbmcgdGhlIG9yZGVyZWQgbWFwIG9mIHJlc3VsdHMuXG4gKi9cbmZ1bmN0aW9uIG1hcENoaWxkcmVuKGNoaWxkcmVuLCBmdW5jLCBjb250ZXh0KSB7XG4gIGlmIChjaGlsZHJlbiA9PSBudWxsKSB7XG4gICAgcmV0dXJuIGNoaWxkcmVuO1xuICB9XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgbWFwSW50b1dpdGhLZXlQcmVmaXhJbnRlcm5hbChjaGlsZHJlbiwgcmVzdWx0LCBudWxsLCBmdW5jLCBjb250ZXh0KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gZm9yRWFjaFNpbmdsZUNoaWxkRHVtbXkodHJhdmVyc2VDb250ZXh0LCBjaGlsZCwgbmFtZSkge1xuICByZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiBDb3VudCB0aGUgbnVtYmVyIG9mIGNoaWxkcmVuIHRoYXQgYXJlIHR5cGljYWxseSBzcGVjaWZpZWQgYXNcbiAqIGBwcm9wcy5jaGlsZHJlbmAuXG4gKlxuICogU2VlIGh0dHBzOi8vZmFjZWJvb2suZ2l0aHViLmlvL3JlYWN0L2RvY3MvdG9wLWxldmVsLWFwaS5odG1sI3JlYWN0LmNoaWxkcmVuLmNvdW50XG4gKlxuICogQHBhcmFtIHs/Kn0gY2hpbGRyZW4gQ2hpbGRyZW4gdHJlZSBjb250YWluZXIuXG4gKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBudW1iZXIgb2YgY2hpbGRyZW4uXG4gKi9cbmZ1bmN0aW9uIGNvdW50Q2hpbGRyZW4oY2hpbGRyZW4sIGNvbnRleHQpIHtcbiAgcmV0dXJuIHRyYXZlcnNlQWxsQ2hpbGRyZW4oY2hpbGRyZW4sIGZvckVhY2hTaW5nbGVDaGlsZER1bW15LCBudWxsKTtcbn1cblxuLyoqXG4gKiBGbGF0dGVuIGEgY2hpbGRyZW4gb2JqZWN0ICh0eXBpY2FsbHkgc3BlY2lmaWVkIGFzIGBwcm9wcy5jaGlsZHJlbmApIGFuZFxuICogcmV0dXJuIGFuIGFycmF5IHdpdGggYXBwcm9wcmlhdGVseSByZS1rZXllZCBjaGlsZHJlbi5cbiAqXG4gKiBTZWUgaHR0cHM6Ly9mYWNlYm9vay5naXRodWIuaW8vcmVhY3QvZG9jcy90b3AtbGV2ZWwtYXBpLmh0bWwjcmVhY3QuY2hpbGRyZW4udG9hcnJheVxuICovXG5mdW5jdGlvbiB0b0FycmF5KGNoaWxkcmVuKSB7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgbWFwSW50b1dpdGhLZXlQcmVmaXhJbnRlcm5hbChjaGlsZHJlbiwgcmVzdWx0LCBudWxsLCBlbXB0eUZ1bmN0aW9uLnRoYXRSZXR1cm5zQXJndW1lbnQpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG52YXIgUmVhY3RDaGlsZHJlbiA9IHtcbiAgZm9yRWFjaDogZm9yRWFjaENoaWxkcmVuLFxuICBtYXA6IG1hcENoaWxkcmVuLFxuICBtYXBJbnRvV2l0aEtleVByZWZpeEludGVybmFsOiBtYXBJbnRvV2l0aEtleVByZWZpeEludGVybmFsLFxuICBjb3VudDogY291bnRDaGlsZHJlbixcbiAgdG9BcnJheTogdG9BcnJheVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdENoaWxkcmVuO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QvbGliL1JlYWN0Q2hpbGRyZW4uanMiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUmVhY3RFbGVtZW50ID0gcmVxdWlyZSgnLi9SZWFjdEVsZW1lbnQnKTtcblxuLyoqXG4gKiBDcmVhdGUgYSBmYWN0b3J5IHRoYXQgY3JlYXRlcyBIVE1MIHRhZyBlbGVtZW50cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG52YXIgY3JlYXRlRE9NRmFjdG9yeSA9IFJlYWN0RWxlbWVudC5jcmVhdGVGYWN0b3J5O1xuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgdmFyIFJlYWN0RWxlbWVudFZhbGlkYXRvciA9IHJlcXVpcmUoJy4vUmVhY3RFbGVtZW50VmFsaWRhdG9yJyk7XG4gIGNyZWF0ZURPTUZhY3RvcnkgPSBSZWFjdEVsZW1lbnRWYWxpZGF0b3IuY3JlYXRlRmFjdG9yeTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgbWFwcGluZyBmcm9tIHN1cHBvcnRlZCBIVE1MIHRhZ3MgdG8gYFJlYWN0RE9NQ29tcG9uZW50YCBjbGFzc2VzLlxuICpcbiAqIEBwdWJsaWNcbiAqL1xudmFyIFJlYWN0RE9NRmFjdG9yaWVzID0ge1xuICBhOiBjcmVhdGVET01GYWN0b3J5KCdhJyksXG4gIGFiYnI6IGNyZWF0ZURPTUZhY3RvcnkoJ2FiYnInKSxcbiAgYWRkcmVzczogY3JlYXRlRE9NRmFjdG9yeSgnYWRkcmVzcycpLFxuICBhcmVhOiBjcmVhdGVET01GYWN0b3J5KCdhcmVhJyksXG4gIGFydGljbGU6IGNyZWF0ZURPTUZhY3RvcnkoJ2FydGljbGUnKSxcbiAgYXNpZGU6IGNyZWF0ZURPTUZhY3RvcnkoJ2FzaWRlJyksXG4gIGF1ZGlvOiBjcmVhdGVET01GYWN0b3J5KCdhdWRpbycpLFxuICBiOiBjcmVhdGVET01GYWN0b3J5KCdiJyksXG4gIGJhc2U6IGNyZWF0ZURPTUZhY3RvcnkoJ2Jhc2UnKSxcbiAgYmRpOiBjcmVhdGVET01GYWN0b3J5KCdiZGknKSxcbiAgYmRvOiBjcmVhdGVET01GYWN0b3J5KCdiZG8nKSxcbiAgYmlnOiBjcmVhdGVET01GYWN0b3J5KCdiaWcnKSxcbiAgYmxvY2txdW90ZTogY3JlYXRlRE9NRmFjdG9yeSgnYmxvY2txdW90ZScpLFxuICBib2R5OiBjcmVhdGVET01GYWN0b3J5KCdib2R5JyksXG4gIGJyOiBjcmVhdGVET01GYWN0b3J5KCdicicpLFxuICBidXR0b246IGNyZWF0ZURPTUZhY3RvcnkoJ2J1dHRvbicpLFxuICBjYW52YXM6IGNyZWF0ZURPTUZhY3RvcnkoJ2NhbnZhcycpLFxuICBjYXB0aW9uOiBjcmVhdGVET01GYWN0b3J5KCdjYXB0aW9uJyksXG4gIGNpdGU6IGNyZWF0ZURPTUZhY3RvcnkoJ2NpdGUnKSxcbiAgY29kZTogY3JlYXRlRE9NRmFjdG9yeSgnY29kZScpLFxuICBjb2w6IGNyZWF0ZURPTUZhY3RvcnkoJ2NvbCcpLFxuICBjb2xncm91cDogY3JlYXRlRE9NRmFjdG9yeSgnY29sZ3JvdXAnKSxcbiAgZGF0YTogY3JlYXRlRE9NRmFjdG9yeSgnZGF0YScpLFxuICBkYXRhbGlzdDogY3JlYXRlRE9NRmFjdG9yeSgnZGF0YWxpc3QnKSxcbiAgZGQ6IGNyZWF0ZURPTUZhY3RvcnkoJ2RkJyksXG4gIGRlbDogY3JlYXRlRE9NRmFjdG9yeSgnZGVsJyksXG4gIGRldGFpbHM6IGNyZWF0ZURPTUZhY3RvcnkoJ2RldGFpbHMnKSxcbiAgZGZuOiBjcmVhdGVET01GYWN0b3J5KCdkZm4nKSxcbiAgZGlhbG9nOiBjcmVhdGVET01GYWN0b3J5KCdkaWFsb2cnKSxcbiAgZGl2OiBjcmVhdGVET01GYWN0b3J5KCdkaXYnKSxcbiAgZGw6IGNyZWF0ZURPTUZhY3RvcnkoJ2RsJyksXG4gIGR0OiBjcmVhdGVET01GYWN0b3J5KCdkdCcpLFxuICBlbTogY3JlYXRlRE9NRmFjdG9yeSgnZW0nKSxcbiAgZW1iZWQ6IGNyZWF0ZURPTUZhY3RvcnkoJ2VtYmVkJyksXG4gIGZpZWxkc2V0OiBjcmVhdGVET01GYWN0b3J5KCdmaWVsZHNldCcpLFxuICBmaWdjYXB0aW9uOiBjcmVhdGVET01GYWN0b3J5KCdmaWdjYXB0aW9uJyksXG4gIGZpZ3VyZTogY3JlYXRlRE9NRmFjdG9yeSgnZmlndXJlJyksXG4gIGZvb3RlcjogY3JlYXRlRE9NRmFjdG9yeSgnZm9vdGVyJyksXG4gIGZvcm06IGNyZWF0ZURPTUZhY3RvcnkoJ2Zvcm0nKSxcbiAgaDE6IGNyZWF0ZURPTUZhY3RvcnkoJ2gxJyksXG4gIGgyOiBjcmVhdGVET01GYWN0b3J5KCdoMicpLFxuICBoMzogY3JlYXRlRE9NRmFjdG9yeSgnaDMnKSxcbiAgaDQ6IGNyZWF0ZURPTUZhY3RvcnkoJ2g0JyksXG4gIGg1OiBjcmVhdGVET01GYWN0b3J5KCdoNScpLFxuICBoNjogY3JlYXRlRE9NRmFjdG9yeSgnaDYnKSxcbiAgaGVhZDogY3JlYXRlRE9NRmFjdG9yeSgnaGVhZCcpLFxuICBoZWFkZXI6IGNyZWF0ZURPTUZhY3RvcnkoJ2hlYWRlcicpLFxuICBoZ3JvdXA6IGNyZWF0ZURPTUZhY3RvcnkoJ2hncm91cCcpLFxuICBocjogY3JlYXRlRE9NRmFjdG9yeSgnaHInKSxcbiAgaHRtbDogY3JlYXRlRE9NRmFjdG9yeSgnaHRtbCcpLFxuICBpOiBjcmVhdGVET01GYWN0b3J5KCdpJyksXG4gIGlmcmFtZTogY3JlYXRlRE9NRmFjdG9yeSgnaWZyYW1lJyksXG4gIGltZzogY3JlYXRlRE9NRmFjdG9yeSgnaW1nJyksXG4gIGlucHV0OiBjcmVhdGVET01GYWN0b3J5KCdpbnB1dCcpLFxuICBpbnM6IGNyZWF0ZURPTUZhY3RvcnkoJ2lucycpLFxuICBrYmQ6IGNyZWF0ZURPTUZhY3RvcnkoJ2tiZCcpLFxuICBrZXlnZW46IGNyZWF0ZURPTUZhY3RvcnkoJ2tleWdlbicpLFxuICBsYWJlbDogY3JlYXRlRE9NRmFjdG9yeSgnbGFiZWwnKSxcbiAgbGVnZW5kOiBjcmVhdGVET01GYWN0b3J5KCdsZWdlbmQnKSxcbiAgbGk6IGNyZWF0ZURPTUZhY3RvcnkoJ2xpJyksXG4gIGxpbms6IGNyZWF0ZURPTUZhY3RvcnkoJ2xpbmsnKSxcbiAgbWFpbjogY3JlYXRlRE9NRmFjdG9yeSgnbWFpbicpLFxuICBtYXA6IGNyZWF0ZURPTUZhY3RvcnkoJ21hcCcpLFxuICBtYXJrOiBjcmVhdGVET01GYWN0b3J5KCdtYXJrJyksXG4gIG1lbnU6IGNyZWF0ZURPTUZhY3RvcnkoJ21lbnUnKSxcbiAgbWVudWl0ZW06IGNyZWF0ZURPTUZhY3RvcnkoJ21lbnVpdGVtJyksXG4gIG1ldGE6IGNyZWF0ZURPTUZhY3RvcnkoJ21ldGEnKSxcbiAgbWV0ZXI6IGNyZWF0ZURPTUZhY3RvcnkoJ21ldGVyJyksXG4gIG5hdjogY3JlYXRlRE9NRmFjdG9yeSgnbmF2JyksXG4gIG5vc2NyaXB0OiBjcmVhdGVET01GYWN0b3J5KCdub3NjcmlwdCcpLFxuICBvYmplY3Q6IGNyZWF0ZURPTUZhY3RvcnkoJ29iamVjdCcpLFxuICBvbDogY3JlYXRlRE9NRmFjdG9yeSgnb2wnKSxcbiAgb3B0Z3JvdXA6IGNyZWF0ZURPTUZhY3RvcnkoJ29wdGdyb3VwJyksXG4gIG9wdGlvbjogY3JlYXRlRE9NRmFjdG9yeSgnb3B0aW9uJyksXG4gIG91dHB1dDogY3JlYXRlRE9NRmFjdG9yeSgnb3V0cHV0JyksXG4gIHA6IGNyZWF0ZURPTUZhY3RvcnkoJ3AnKSxcbiAgcGFyYW06IGNyZWF0ZURPTUZhY3RvcnkoJ3BhcmFtJyksXG4gIHBpY3R1cmU6IGNyZWF0ZURPTUZhY3RvcnkoJ3BpY3R1cmUnKSxcbiAgcHJlOiBjcmVhdGVET01GYWN0b3J5KCdwcmUnKSxcbiAgcHJvZ3Jlc3M6IGNyZWF0ZURPTUZhY3RvcnkoJ3Byb2dyZXNzJyksXG4gIHE6IGNyZWF0ZURPTUZhY3RvcnkoJ3EnKSxcbiAgcnA6IGNyZWF0ZURPTUZhY3RvcnkoJ3JwJyksXG4gIHJ0OiBjcmVhdGVET01GYWN0b3J5KCdydCcpLFxuICBydWJ5OiBjcmVhdGVET01GYWN0b3J5KCdydWJ5JyksXG4gIHM6IGNyZWF0ZURPTUZhY3RvcnkoJ3MnKSxcbiAgc2FtcDogY3JlYXRlRE9NRmFjdG9yeSgnc2FtcCcpLFxuICBzY3JpcHQ6IGNyZWF0ZURPTUZhY3RvcnkoJ3NjcmlwdCcpLFxuICBzZWN0aW9uOiBjcmVhdGVET01GYWN0b3J5KCdzZWN0aW9uJyksXG4gIHNlbGVjdDogY3JlYXRlRE9NRmFjdG9yeSgnc2VsZWN0JyksXG4gIHNtYWxsOiBjcmVhdGVET01GYWN0b3J5KCdzbWFsbCcpLFxuICBzb3VyY2U6IGNyZWF0ZURPTUZhY3RvcnkoJ3NvdXJjZScpLFxuICBzcGFuOiBjcmVhdGVET01GYWN0b3J5KCdzcGFuJyksXG4gIHN0cm9uZzogY3JlYXRlRE9NRmFjdG9yeSgnc3Ryb25nJyksXG4gIHN0eWxlOiBjcmVhdGVET01GYWN0b3J5KCdzdHlsZScpLFxuICBzdWI6IGNyZWF0ZURPTUZhY3RvcnkoJ3N1YicpLFxuICBzdW1tYXJ5OiBjcmVhdGVET01GYWN0b3J5KCdzdW1tYXJ5JyksXG4gIHN1cDogY3JlYXRlRE9NRmFjdG9yeSgnc3VwJyksXG4gIHRhYmxlOiBjcmVhdGVET01GYWN0b3J5KCd0YWJsZScpLFxuICB0Ym9keTogY3JlYXRlRE9NRmFjdG9yeSgndGJvZHknKSxcbiAgdGQ6IGNyZWF0ZURPTUZhY3RvcnkoJ3RkJyksXG4gIHRleHRhcmVhOiBjcmVhdGVET01GYWN0b3J5KCd0ZXh0YXJlYScpLFxuICB0Zm9vdDogY3JlYXRlRE9NRmFjdG9yeSgndGZvb3QnKSxcbiAgdGg6IGNyZWF0ZURPTUZhY3RvcnkoJ3RoJyksXG4gIHRoZWFkOiBjcmVhdGVET01GYWN0b3J5KCd0aGVhZCcpLFxuICB0aW1lOiBjcmVhdGVET01GYWN0b3J5KCd0aW1lJyksXG4gIHRpdGxlOiBjcmVhdGVET01GYWN0b3J5KCd0aXRsZScpLFxuICB0cjogY3JlYXRlRE9NRmFjdG9yeSgndHInKSxcbiAgdHJhY2s6IGNyZWF0ZURPTUZhY3RvcnkoJ3RyYWNrJyksXG4gIHU6IGNyZWF0ZURPTUZhY3RvcnkoJ3UnKSxcbiAgdWw6IGNyZWF0ZURPTUZhY3RvcnkoJ3VsJyksXG4gICd2YXInOiBjcmVhdGVET01GYWN0b3J5KCd2YXInKSxcbiAgdmlkZW86IGNyZWF0ZURPTUZhY3RvcnkoJ3ZpZGVvJyksXG4gIHdicjogY3JlYXRlRE9NRmFjdG9yeSgnd2JyJyksXG5cbiAgLy8gU1ZHXG4gIGNpcmNsZTogY3JlYXRlRE9NRmFjdG9yeSgnY2lyY2xlJyksXG4gIGNsaXBQYXRoOiBjcmVhdGVET01GYWN0b3J5KCdjbGlwUGF0aCcpLFxuICBkZWZzOiBjcmVhdGVET01GYWN0b3J5KCdkZWZzJyksXG4gIGVsbGlwc2U6IGNyZWF0ZURPTUZhY3RvcnkoJ2VsbGlwc2UnKSxcbiAgZzogY3JlYXRlRE9NRmFjdG9yeSgnZycpLFxuICBpbWFnZTogY3JlYXRlRE9NRmFjdG9yeSgnaW1hZ2UnKSxcbiAgbGluZTogY3JlYXRlRE9NRmFjdG9yeSgnbGluZScpLFxuICBsaW5lYXJHcmFkaWVudDogY3JlYXRlRE9NRmFjdG9yeSgnbGluZWFyR3JhZGllbnQnKSxcbiAgbWFzazogY3JlYXRlRE9NRmFjdG9yeSgnbWFzaycpLFxuICBwYXRoOiBjcmVhdGVET01GYWN0b3J5KCdwYXRoJyksXG4gIHBhdHRlcm46IGNyZWF0ZURPTUZhY3RvcnkoJ3BhdHRlcm4nKSxcbiAgcG9seWdvbjogY3JlYXRlRE9NRmFjdG9yeSgncG9seWdvbicpLFxuICBwb2x5bGluZTogY3JlYXRlRE9NRmFjdG9yeSgncG9seWxpbmUnKSxcbiAgcmFkaWFsR3JhZGllbnQ6IGNyZWF0ZURPTUZhY3RvcnkoJ3JhZGlhbEdyYWRpZW50JyksXG4gIHJlY3Q6IGNyZWF0ZURPTUZhY3RvcnkoJ3JlY3QnKSxcbiAgc3RvcDogY3JlYXRlRE9NRmFjdG9yeSgnc3RvcCcpLFxuICBzdmc6IGNyZWF0ZURPTUZhY3RvcnkoJ3N2ZycpLFxuICB0ZXh0OiBjcmVhdGVET01GYWN0b3J5KCd0ZXh0JyksXG4gIHRzcGFuOiBjcmVhdGVET01GYWN0b3J5KCd0c3BhbicpXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0RE9NRmFjdG9yaWVzO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QvbGliL1JlYWN0RE9NRmFjdG9yaWVzLmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUmVhY3RQcm9wVHlwZUxvY2F0aW9uTmFtZXMgPSB7fTtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgUmVhY3RQcm9wVHlwZUxvY2F0aW9uTmFtZXMgPSB7XG4gICAgcHJvcDogJ3Byb3AnLFxuICAgIGNvbnRleHQ6ICdjb250ZXh0JyxcbiAgICBjaGlsZENvbnRleHQ6ICdjaGlsZCBjb250ZXh0J1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0UHJvcFR5cGVMb2NhdGlvbk5hbWVzO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QvbGliL1JlYWN0UHJvcFR5cGVMb2NhdGlvbk5hbWVzLmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIF9yZXF1aXJlID0gcmVxdWlyZSgnLi9SZWFjdEVsZW1lbnQnKSxcbiAgICBpc1ZhbGlkRWxlbWVudCA9IF9yZXF1aXJlLmlzVmFsaWRFbGVtZW50O1xuXG52YXIgZmFjdG9yeSA9IHJlcXVpcmUoJ3Byb3AtdHlwZXMvZmFjdG9yeScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoaXNWYWxpZEVsZW1lbnQpO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QvbGliL1JlYWN0UHJvcFR5cGVzLmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUmVhY3RQcm9wVHlwZXNTZWNyZXQgPSAnU0VDUkVUX0RPX05PVF9QQVNTX1RISVNfT1JfWU9VX1dJTExfQkVfRklSRUQnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0UHJvcFR5cGVzU2VjcmV0O1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QvbGliL1JlYWN0UHJvcFR5cGVzU2VjcmV0LmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSAnMTUuNi4xJztcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3JlYWN0L2xpYi9SZWFjdFZlcnNpb24uanMiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgX3Byb2RJbnZhcmlhbnQgPSByZXF1aXJlKCcuL3JlYWN0UHJvZEludmFyaWFudCcpO1xuXG52YXIgUmVhY3RQcm9wVHlwZUxvY2F0aW9uTmFtZXMgPSByZXF1aXJlKCcuL1JlYWN0UHJvcFR5cGVMb2NhdGlvbk5hbWVzJyk7XG52YXIgUmVhY3RQcm9wVHlwZXNTZWNyZXQgPSByZXF1aXJlKCcuL1JlYWN0UHJvcFR5cGVzU2VjcmV0Jyk7XG5cbnZhciBpbnZhcmlhbnQgPSByZXF1aXJlKCdmYmpzL2xpYi9pbnZhcmlhbnQnKTtcbnZhciB3YXJuaW5nID0gcmVxdWlyZSgnZmJqcy9saWIvd2FybmluZycpO1xuXG52YXIgUmVhY3RDb21wb25lbnRUcmVlSG9vaztcblxuaWYgKHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJyAmJiBwcm9jZXNzLmVudiAmJiBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Rlc3QnKSB7XG4gIC8vIFRlbXBvcmFyeSBoYWNrLlxuICAvLyBJbmxpbmUgcmVxdWlyZXMgZG9uJ3Qgd29yayB3ZWxsIHdpdGggSmVzdDpcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy83MjQwXG4gIC8vIFJlbW92ZSB0aGUgaW5saW5lIHJlcXVpcmVzIHdoZW4gd2UgZG9uJ3QgbmVlZCB0aGVtIGFueW1vcmU6XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9wdWxsLzcxNzhcbiAgUmVhY3RDb21wb25lbnRUcmVlSG9vayA9IHJlcXVpcmUoJy4vUmVhY3RDb21wb25lbnRUcmVlSG9vaycpO1xufVxuXG52YXIgbG9nZ2VkVHlwZUZhaWx1cmVzID0ge307XG5cbi8qKlxuICogQXNzZXJ0IHRoYXQgdGhlIHZhbHVlcyBtYXRjaCB3aXRoIHRoZSB0eXBlIHNwZWNzLlxuICogRXJyb3IgbWVzc2FnZXMgYXJlIG1lbW9yaXplZCBhbmQgd2lsbCBvbmx5IGJlIHNob3duIG9uY2UuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IHR5cGVTcGVjcyBNYXAgb2YgbmFtZSB0byBhIFJlYWN0UHJvcFR5cGVcbiAqIEBwYXJhbSB7b2JqZWN0fSB2YWx1ZXMgUnVudGltZSB2YWx1ZXMgdGhhdCBuZWVkIHRvIGJlIHR5cGUtY2hlY2tlZFxuICogQHBhcmFtIHtzdHJpbmd9IGxvY2F0aW9uIGUuZy4gXCJwcm9wXCIsIFwiY29udGV4dFwiLCBcImNoaWxkIGNvbnRleHRcIlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbXBvbmVudE5hbWUgTmFtZSBvZiB0aGUgY29tcG9uZW50IGZvciBlcnJvciBtZXNzYWdlcy5cbiAqIEBwYXJhbSB7P29iamVjdH0gZWxlbWVudCBUaGUgUmVhY3QgZWxlbWVudCB0aGF0IGlzIGJlaW5nIHR5cGUtY2hlY2tlZFxuICogQHBhcmFtIHs/bnVtYmVyfSBkZWJ1Z0lEIFRoZSBSZWFjdCBjb21wb25lbnQgaW5zdGFuY2UgdGhhdCBpcyBiZWluZyB0eXBlLWNoZWNrZWRcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGNoZWNrUmVhY3RUeXBlU3BlYyh0eXBlU3BlY3MsIHZhbHVlcywgbG9jYXRpb24sIGNvbXBvbmVudE5hbWUsIGVsZW1lbnQsIGRlYnVnSUQpIHtcbiAgZm9yICh2YXIgdHlwZVNwZWNOYW1lIGluIHR5cGVTcGVjcykge1xuICAgIGlmICh0eXBlU3BlY3MuaGFzT3duUHJvcGVydHkodHlwZVNwZWNOYW1lKSkge1xuICAgICAgdmFyIGVycm9yO1xuICAgICAgLy8gUHJvcCB0eXBlIHZhbGlkYXRpb24gbWF5IHRocm93LiBJbiBjYXNlIHRoZXkgZG8sIHdlIGRvbid0IHdhbnQgdG9cbiAgICAgIC8vIGZhaWwgdGhlIHJlbmRlciBwaGFzZSB3aGVyZSBpdCBkaWRuJ3QgZmFpbCBiZWZvcmUuIFNvIHdlIGxvZyBpdC5cbiAgICAgIC8vIEFmdGVyIHRoZXNlIGhhdmUgYmVlbiBjbGVhbmVkIHVwLCB3ZSdsbCBsZXQgdGhlbSB0aHJvdy5cbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIFRoaXMgaXMgaW50ZW50aW9uYWxseSBhbiBpbnZhcmlhbnQgdGhhdCBnZXRzIGNhdWdodC4gSXQncyB0aGUgc2FtZVxuICAgICAgICAvLyBiZWhhdmlvciBhcyB3aXRob3V0IHRoaXMgc3RhdGVtZW50IGV4Y2VwdCB3aXRoIGEgYmV0dGVyIG1lc3NhZ2UuXG4gICAgICAgICEodHlwZW9mIHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdID09PSAnZnVuY3Rpb24nKSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICclczogJXMgdHlwZSBgJXNgIGlzIGludmFsaWQ7IGl0IG11c3QgYmUgYSBmdW5jdGlvbiwgdXN1YWxseSBmcm9tIFJlYWN0LlByb3BUeXBlcy4nLCBjb21wb25lbnROYW1lIHx8ICdSZWFjdCBjbGFzcycsIFJlYWN0UHJvcFR5cGVMb2NhdGlvbk5hbWVzW2xvY2F0aW9uXSwgdHlwZVNwZWNOYW1lKSA6IF9wcm9kSW52YXJpYW50KCc4NCcsIGNvbXBvbmVudE5hbWUgfHwgJ1JlYWN0IGNsYXNzJywgUmVhY3RQcm9wVHlwZUxvY2F0aW9uTmFtZXNbbG9jYXRpb25dLCB0eXBlU3BlY05hbWUpIDogdm9pZCAwO1xuICAgICAgICBlcnJvciA9IHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdKHZhbHVlcywgdHlwZVNwZWNOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgbnVsbCwgUmVhY3RQcm9wVHlwZXNTZWNyZXQpO1xuICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgZXJyb3IgPSBleDtcbiAgICAgIH1cbiAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKCFlcnJvciB8fCBlcnJvciBpbnN0YW5jZW9mIEVycm9yLCAnJXM6IHR5cGUgc3BlY2lmaWNhdGlvbiBvZiAlcyBgJXNgIGlzIGludmFsaWQ7IHRoZSB0eXBlIGNoZWNrZXIgJyArICdmdW5jdGlvbiBtdXN0IHJldHVybiBgbnVsbGAgb3IgYW4gYEVycm9yYCBidXQgcmV0dXJuZWQgYSAlcy4gJyArICdZb3UgbWF5IGhhdmUgZm9yZ290dGVuIHRvIHBhc3MgYW4gYXJndW1lbnQgdG8gdGhlIHR5cGUgY2hlY2tlciAnICsgJ2NyZWF0b3IgKGFycmF5T2YsIGluc3RhbmNlT2YsIG9iamVjdE9mLCBvbmVPZiwgb25lT2ZUeXBlLCBhbmQgJyArICdzaGFwZSBhbGwgcmVxdWlyZSBhbiBhcmd1bWVudCkuJywgY29tcG9uZW50TmFtZSB8fCAnUmVhY3QgY2xhc3MnLCBSZWFjdFByb3BUeXBlTG9jYXRpb25OYW1lc1tsb2NhdGlvbl0sIHR5cGVTcGVjTmFtZSwgdHlwZW9mIGVycm9yKSA6IHZvaWQgMDtcbiAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yICYmICEoZXJyb3IubWVzc2FnZSBpbiBsb2dnZWRUeXBlRmFpbHVyZXMpKSB7XG4gICAgICAgIC8vIE9ubHkgbW9uaXRvciB0aGlzIGZhaWx1cmUgb25jZSBiZWNhdXNlIHRoZXJlIHRlbmRzIHRvIGJlIGEgbG90IG9mIHRoZVxuICAgICAgICAvLyBzYW1lIGVycm9yLlxuICAgICAgICBsb2dnZWRUeXBlRmFpbHVyZXNbZXJyb3IubWVzc2FnZV0gPSB0cnVlO1xuXG4gICAgICAgIHZhciBjb21wb25lbnRTdGFja0luZm8gPSAnJztcblxuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgIGlmICghUmVhY3RDb21wb25lbnRUcmVlSG9vaykge1xuICAgICAgICAgICAgUmVhY3RDb21wb25lbnRUcmVlSG9vayA9IHJlcXVpcmUoJy4vUmVhY3RDb21wb25lbnRUcmVlSG9vaycpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZGVidWdJRCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgY29tcG9uZW50U3RhY2tJbmZvID0gUmVhY3RDb21wb25lbnRUcmVlSG9vay5nZXRTdGFja0FkZGVuZHVtQnlJRChkZWJ1Z0lEKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGVsZW1lbnQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbXBvbmVudFN0YWNrSW5mbyA9IFJlYWN0Q29tcG9uZW50VHJlZUhvb2suZ2V0Q3VycmVudFN0YWNrQWRkZW5kdW0oZWxlbWVudCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcoZmFsc2UsICdGYWlsZWQgJXMgdHlwZTogJXMlcycsIGxvY2F0aW9uLCBlcnJvci5tZXNzYWdlLCBjb21wb25lbnRTdGFja0luZm8pIDogdm9pZCAwO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNoZWNrUmVhY3RUeXBlU3BlYztcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3JlYWN0L2xpYi9jaGVja1JlYWN0VHlwZVNwZWMuanMiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgX3JlcXVpcmUgPSByZXF1aXJlKCcuL1JlYWN0QmFzZUNsYXNzZXMnKSxcbiAgICBDb21wb25lbnQgPSBfcmVxdWlyZS5Db21wb25lbnQ7XG5cbnZhciBfcmVxdWlyZTIgPSByZXF1aXJlKCcuL1JlYWN0RWxlbWVudCcpLFxuICAgIGlzVmFsaWRFbGVtZW50ID0gX3JlcXVpcmUyLmlzVmFsaWRFbGVtZW50O1xuXG52YXIgUmVhY3ROb29wVXBkYXRlUXVldWUgPSByZXF1aXJlKCcuL1JlYWN0Tm9vcFVwZGF0ZVF1ZXVlJyk7XG52YXIgZmFjdG9yeSA9IHJlcXVpcmUoJ2NyZWF0ZS1yZWFjdC1jbGFzcy9mYWN0b3J5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZmFjdG9yeShDb21wb25lbnQsIGlzVmFsaWRFbGVtZW50LCBSZWFjdE5vb3BVcGRhdGVRdWV1ZSk7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC9saWIvY3JlYXRlQ2xhc3MuanMiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBuZXh0RGVidWdJRCA9IDE7XG5cbmZ1bmN0aW9uIGdldE5leHREZWJ1Z0lEKCkge1xuICByZXR1cm4gbmV4dERlYnVnSUQrKztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXROZXh0RGVidWdJRDtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3JlYWN0L2xpYi9nZXROZXh0RGVidWdJRC5qcyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqL1xuJ3VzZSBzdHJpY3QnO1xuXG52YXIgX3Byb2RJbnZhcmlhbnQgPSByZXF1aXJlKCcuL3JlYWN0UHJvZEludmFyaWFudCcpO1xuXG52YXIgUmVhY3RFbGVtZW50ID0gcmVxdWlyZSgnLi9SZWFjdEVsZW1lbnQnKTtcblxudmFyIGludmFyaWFudCA9IHJlcXVpcmUoJ2ZianMvbGliL2ludmFyaWFudCcpO1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGZpcnN0IGNoaWxkIGluIGEgY29sbGVjdGlvbiBvZiBjaGlsZHJlbiBhbmQgdmVyaWZpZXMgdGhhdCB0aGVyZVxuICogaXMgb25seSBvbmUgY2hpbGQgaW4gdGhlIGNvbGxlY3Rpb24uXG4gKlxuICogU2VlIGh0dHBzOi8vZmFjZWJvb2suZ2l0aHViLmlvL3JlYWN0L2RvY3MvdG9wLWxldmVsLWFwaS5odG1sI3JlYWN0LmNoaWxkcmVuLm9ubHlcbiAqXG4gKiBUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGZ1bmN0aW9uIGFzc3VtZXMgdGhhdCBhIHNpbmdsZSBjaGlsZCBnZXRzXG4gKiBwYXNzZWQgd2l0aG91dCBhIHdyYXBwZXIsIGJ1dCB0aGUgcHVycG9zZSBvZiB0aGlzIGhlbHBlciBmdW5jdGlvbiBpcyB0b1xuICogYWJzdHJhY3QgYXdheSB0aGUgcGFydGljdWxhciBzdHJ1Y3R1cmUgb2YgY2hpbGRyZW4uXG4gKlxuICogQHBhcmFtIHs/b2JqZWN0fSBjaGlsZHJlbiBDaGlsZCBjb2xsZWN0aW9uIHN0cnVjdHVyZS5cbiAqIEByZXR1cm4ge1JlYWN0RWxlbWVudH0gVGhlIGZpcnN0IGFuZCBvbmx5IGBSZWFjdEVsZW1lbnRgIGNvbnRhaW5lZCBpbiB0aGVcbiAqIHN0cnVjdHVyZS5cbiAqL1xuZnVuY3Rpb24gb25seUNoaWxkKGNoaWxkcmVuKSB7XG4gICFSZWFjdEVsZW1lbnQuaXNWYWxpZEVsZW1lbnQoY2hpbGRyZW4pID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IGludmFyaWFudChmYWxzZSwgJ1JlYWN0LkNoaWxkcmVuLm9ubHkgZXhwZWN0ZWQgdG8gcmVjZWl2ZSBhIHNpbmdsZSBSZWFjdCBlbGVtZW50IGNoaWxkLicpIDogX3Byb2RJbnZhcmlhbnQoJzE0MycpIDogdm9pZCAwO1xuICByZXR1cm4gY2hpbGRyZW47XG59XG5cbm1vZHVsZS5leHBvcnRzID0gb25seUNoaWxkO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QvbGliL29ubHlDaGlsZC5qcyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBfcHJvZEludmFyaWFudCA9IHJlcXVpcmUoJy4vcmVhY3RQcm9kSW52YXJpYW50Jyk7XG5cbnZhciBSZWFjdEN1cnJlbnRPd25lciA9IHJlcXVpcmUoJy4vUmVhY3RDdXJyZW50T3duZXInKTtcbnZhciBSRUFDVF9FTEVNRU5UX1RZUEUgPSByZXF1aXJlKCcuL1JlYWN0RWxlbWVudFN5bWJvbCcpO1xuXG52YXIgZ2V0SXRlcmF0b3JGbiA9IHJlcXVpcmUoJy4vZ2V0SXRlcmF0b3JGbicpO1xudmFyIGludmFyaWFudCA9IHJlcXVpcmUoJ2ZianMvbGliL2ludmFyaWFudCcpO1xudmFyIEtleUVzY2FwZVV0aWxzID0gcmVxdWlyZSgnLi9LZXlFc2NhcGVVdGlscycpO1xudmFyIHdhcm5pbmcgPSByZXF1aXJlKCdmYmpzL2xpYi93YXJuaW5nJyk7XG5cbnZhciBTRVBBUkFUT1IgPSAnLic7XG52YXIgU1VCU0VQQVJBVE9SID0gJzonO1xuXG4vKipcbiAqIFRoaXMgaXMgaW5saW5lZCBmcm9tIFJlYWN0RWxlbWVudCBzaW5jZSB0aGlzIGZpbGUgaXMgc2hhcmVkIGJldHdlZW5cbiAqIGlzb21vcnBoaWMgYW5kIHJlbmRlcmVycy4gV2UgY291bGQgZXh0cmFjdCB0aGlzIHRvIGFcbiAqXG4gKi9cblxuLyoqXG4gKiBUT0RPOiBUZXN0IHRoYXQgYSBzaW5nbGUgY2hpbGQgYW5kIGFuIGFycmF5IHdpdGggb25lIGl0ZW0gaGF2ZSB0aGUgc2FtZSBrZXlcbiAqIHBhdHRlcm4uXG4gKi9cblxudmFyIGRpZFdhcm5BYm91dE1hcHMgPSBmYWxzZTtcblxuLyoqXG4gKiBHZW5lcmF0ZSBhIGtleSBzdHJpbmcgdGhhdCBpZGVudGlmaWVzIGEgY29tcG9uZW50IHdpdGhpbiBhIHNldC5cbiAqXG4gKiBAcGFyYW0geyp9IGNvbXBvbmVudCBBIGNvbXBvbmVudCB0aGF0IGNvdWxkIGNvbnRhaW4gYSBtYW51YWwga2V5LlxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IEluZGV4IHRoYXQgaXMgdXNlZCBpZiBhIG1hbnVhbCBrZXkgaXMgbm90IHByb3ZpZGVkLlxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBnZXRDb21wb25lbnRLZXkoY29tcG9uZW50LCBpbmRleCkge1xuICAvLyBEbyBzb21lIHR5cGVjaGVja2luZyBoZXJlIHNpbmNlIHdlIGNhbGwgdGhpcyBibGluZGx5LiBXZSB3YW50IHRvIGVuc3VyZVxuICAvLyB0aGF0IHdlIGRvbid0IGJsb2NrIHBvdGVudGlhbCBmdXR1cmUgRVMgQVBJcy5cbiAgaWYgKGNvbXBvbmVudCAmJiB0eXBlb2YgY29tcG9uZW50ID09PSAnb2JqZWN0JyAmJiBjb21wb25lbnQua2V5ICE9IG51bGwpIHtcbiAgICAvLyBFeHBsaWNpdCBrZXlcbiAgICByZXR1cm4gS2V5RXNjYXBlVXRpbHMuZXNjYXBlKGNvbXBvbmVudC5rZXkpO1xuICB9XG4gIC8vIEltcGxpY2l0IGtleSBkZXRlcm1pbmVkIGJ5IHRoZSBpbmRleCBpbiB0aGUgc2V0XG4gIHJldHVybiBpbmRleC50b1N0cmluZygzNik7XG59XG5cbi8qKlxuICogQHBhcmFtIHs/Kn0gY2hpbGRyZW4gQ2hpbGRyZW4gdHJlZSBjb250YWluZXIuXG4gKiBAcGFyYW0geyFzdHJpbmd9IG5hbWVTb0ZhciBOYW1lIG9mIHRoZSBrZXkgcGF0aCBzbyBmYXIuXG4gKiBAcGFyYW0geyFmdW5jdGlvbn0gY2FsbGJhY2sgQ2FsbGJhY2sgdG8gaW52b2tlIHdpdGggZWFjaCBjaGlsZCBmb3VuZC5cbiAqIEBwYXJhbSB7Pyp9IHRyYXZlcnNlQ29udGV4dCBVc2VkIHRvIHBhc3MgaW5mb3JtYXRpb24gdGhyb3VnaG91dCB0aGUgdHJhdmVyc2FsXG4gKiBwcm9jZXNzLlxuICogQHJldHVybiB7IW51bWJlcn0gVGhlIG51bWJlciBvZiBjaGlsZHJlbiBpbiB0aGlzIHN1YnRyZWUuXG4gKi9cbmZ1bmN0aW9uIHRyYXZlcnNlQWxsQ2hpbGRyZW5JbXBsKGNoaWxkcmVuLCBuYW1lU29GYXIsIGNhbGxiYWNrLCB0cmF2ZXJzZUNvbnRleHQpIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgY2hpbGRyZW47XG5cbiAgaWYgKHR5cGUgPT09ICd1bmRlZmluZWQnIHx8IHR5cGUgPT09ICdib29sZWFuJykge1xuICAgIC8vIEFsbCBvZiB0aGUgYWJvdmUgYXJlIHBlcmNlaXZlZCBhcyBudWxsLlxuICAgIGNoaWxkcmVuID0gbnVsbDtcbiAgfVxuXG4gIGlmIChjaGlsZHJlbiA9PT0gbnVsbCB8fCB0eXBlID09PSAnc3RyaW5nJyB8fCB0eXBlID09PSAnbnVtYmVyJyB8fFxuICAvLyBUaGUgZm9sbG93aW5nIGlzIGlubGluZWQgZnJvbSBSZWFjdEVsZW1lbnQuIFRoaXMgbWVhbnMgd2UgY2FuIG9wdGltaXplXG4gIC8vIHNvbWUgY2hlY2tzLiBSZWFjdCBGaWJlciBhbHNvIGlubGluZXMgdGhpcyBsb2dpYyBmb3Igc2ltaWxhciBwdXJwb3Nlcy5cbiAgdHlwZSA9PT0gJ29iamVjdCcgJiYgY2hpbGRyZW4uJCR0eXBlb2YgPT09IFJFQUNUX0VMRU1FTlRfVFlQRSkge1xuICAgIGNhbGxiYWNrKHRyYXZlcnNlQ29udGV4dCwgY2hpbGRyZW4sXG4gICAgLy8gSWYgaXQncyB0aGUgb25seSBjaGlsZCwgdHJlYXQgdGhlIG5hbWUgYXMgaWYgaXQgd2FzIHdyYXBwZWQgaW4gYW4gYXJyYXlcbiAgICAvLyBzbyB0aGF0IGl0J3MgY29uc2lzdGVudCBpZiB0aGUgbnVtYmVyIG9mIGNoaWxkcmVuIGdyb3dzLlxuICAgIG5hbWVTb0ZhciA9PT0gJycgPyBTRVBBUkFUT1IgKyBnZXRDb21wb25lbnRLZXkoY2hpbGRyZW4sIDApIDogbmFtZVNvRmFyKTtcbiAgICByZXR1cm4gMTtcbiAgfVxuXG4gIHZhciBjaGlsZDtcbiAgdmFyIG5leHROYW1lO1xuICB2YXIgc3VidHJlZUNvdW50ID0gMDsgLy8gQ291bnQgb2YgY2hpbGRyZW4gZm91bmQgaW4gdGhlIGN1cnJlbnQgc3VidHJlZS5cbiAgdmFyIG5leHROYW1lUHJlZml4ID0gbmFtZVNvRmFyID09PSAnJyA/IFNFUEFSQVRPUiA6IG5hbWVTb0ZhciArIFNVQlNFUEFSQVRPUjtcblxuICBpZiAoQXJyYXkuaXNBcnJheShjaGlsZHJlbikpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjaGlsZCA9IGNoaWxkcmVuW2ldO1xuICAgICAgbmV4dE5hbWUgPSBuZXh0TmFtZVByZWZpeCArIGdldENvbXBvbmVudEtleShjaGlsZCwgaSk7XG4gICAgICBzdWJ0cmVlQ291bnQgKz0gdHJhdmVyc2VBbGxDaGlsZHJlbkltcGwoY2hpbGQsIG5leHROYW1lLCBjYWxsYmFjaywgdHJhdmVyc2VDb250ZXh0KTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFyIGl0ZXJhdG9yRm4gPSBnZXRJdGVyYXRvckZuKGNoaWxkcmVuKTtcbiAgICBpZiAoaXRlcmF0b3JGbikge1xuICAgICAgdmFyIGl0ZXJhdG9yID0gaXRlcmF0b3JGbi5jYWxsKGNoaWxkcmVuKTtcbiAgICAgIHZhciBzdGVwO1xuICAgICAgaWYgKGl0ZXJhdG9yRm4gIT09IGNoaWxkcmVuLmVudHJpZXMpIHtcbiAgICAgICAgdmFyIGlpID0gMDtcbiAgICAgICAgd2hpbGUgKCEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZSkge1xuICAgICAgICAgIGNoaWxkID0gc3RlcC52YWx1ZTtcbiAgICAgICAgICBuZXh0TmFtZSA9IG5leHROYW1lUHJlZml4ICsgZ2V0Q29tcG9uZW50S2V5KGNoaWxkLCBpaSsrKTtcbiAgICAgICAgICBzdWJ0cmVlQ291bnQgKz0gdHJhdmVyc2VBbGxDaGlsZHJlbkltcGwoY2hpbGQsIG5leHROYW1lLCBjYWxsYmFjaywgdHJhdmVyc2VDb250ZXh0KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICB2YXIgbWFwc0FzQ2hpbGRyZW5BZGRlbmR1bSA9ICcnO1xuICAgICAgICAgIGlmIChSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50KSB7XG4gICAgICAgICAgICB2YXIgbWFwc0FzQ2hpbGRyZW5Pd25lck5hbWUgPSBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50LmdldE5hbWUoKTtcbiAgICAgICAgICAgIGlmIChtYXBzQXNDaGlsZHJlbk93bmVyTmFtZSkge1xuICAgICAgICAgICAgICBtYXBzQXNDaGlsZHJlbkFkZGVuZHVtID0gJyBDaGVjayB0aGUgcmVuZGVyIG1ldGhvZCBvZiBgJyArIG1hcHNBc0NoaWxkcmVuT3duZXJOYW1lICsgJ2AuJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcoZGlkV2FybkFib3V0TWFwcywgJ1VzaW5nIE1hcHMgYXMgY2hpbGRyZW4gaXMgbm90IHlldCBmdWxseSBzdXBwb3J0ZWQuIEl0IGlzIGFuICcgKyAnZXhwZXJpbWVudGFsIGZlYXR1cmUgdGhhdCBtaWdodCBiZSByZW1vdmVkLiBDb252ZXJ0IGl0IHRvIGEgJyArICdzZXF1ZW5jZSAvIGl0ZXJhYmxlIG9mIGtleWVkIFJlYWN0RWxlbWVudHMgaW5zdGVhZC4lcycsIG1hcHNBc0NoaWxkcmVuQWRkZW5kdW0pIDogdm9pZCAwO1xuICAgICAgICAgIGRpZFdhcm5BYm91dE1hcHMgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIC8vIEl0ZXJhdG9yIHdpbGwgcHJvdmlkZSBlbnRyeSBbayx2XSB0dXBsZXMgcmF0aGVyIHRoYW4gdmFsdWVzLlxuICAgICAgICB3aGlsZSAoIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lKSB7XG4gICAgICAgICAgdmFyIGVudHJ5ID0gc3RlcC52YWx1ZTtcbiAgICAgICAgICBpZiAoZW50cnkpIHtcbiAgICAgICAgICAgIGNoaWxkID0gZW50cnlbMV07XG4gICAgICAgICAgICBuZXh0TmFtZSA9IG5leHROYW1lUHJlZml4ICsgS2V5RXNjYXBlVXRpbHMuZXNjYXBlKGVudHJ5WzBdKSArIFNVQlNFUEFSQVRPUiArIGdldENvbXBvbmVudEtleShjaGlsZCwgMCk7XG4gICAgICAgICAgICBzdWJ0cmVlQ291bnQgKz0gdHJhdmVyc2VBbGxDaGlsZHJlbkltcGwoY2hpbGQsIG5leHROYW1lLCBjYWxsYmFjaywgdHJhdmVyc2VDb250ZXh0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgICB2YXIgYWRkZW5kdW0gPSAnJztcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGFkZGVuZHVtID0gJyBJZiB5b3UgbWVhbnQgdG8gcmVuZGVyIGEgY29sbGVjdGlvbiBvZiBjaGlsZHJlbiwgdXNlIGFuIGFycmF5ICcgKyAnaW5zdGVhZCBvciB3cmFwIHRoZSBvYmplY3QgdXNpbmcgY3JlYXRlRnJhZ21lbnQob2JqZWN0KSBmcm9tIHRoZSAnICsgJ1JlYWN0IGFkZC1vbnMuJztcbiAgICAgICAgaWYgKGNoaWxkcmVuLl9pc1JlYWN0RWxlbWVudCkge1xuICAgICAgICAgIGFkZGVuZHVtID0gXCIgSXQgbG9va3MgbGlrZSB5b3UncmUgdXNpbmcgYW4gZWxlbWVudCBjcmVhdGVkIGJ5IGEgZGlmZmVyZW50IFwiICsgJ3ZlcnNpb24gb2YgUmVhY3QuIE1ha2Ugc3VyZSB0byB1c2Ugb25seSBvbmUgY29weSBvZiBSZWFjdC4nO1xuICAgICAgICB9XG4gICAgICAgIGlmIChSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50KSB7XG4gICAgICAgICAgdmFyIG5hbWUgPSBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50LmdldE5hbWUoKTtcbiAgICAgICAgICBpZiAobmFtZSkge1xuICAgICAgICAgICAgYWRkZW5kdW0gKz0gJyBDaGVjayB0aGUgcmVuZGVyIG1ldGhvZCBvZiBgJyArIG5hbWUgKyAnYC4nO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdmFyIGNoaWxkcmVuU3RyaW5nID0gU3RyaW5nKGNoaWxkcmVuKTtcbiAgICAgICFmYWxzZSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICdPYmplY3RzIGFyZSBub3QgdmFsaWQgYXMgYSBSZWFjdCBjaGlsZCAoZm91bmQ6ICVzKS4lcycsIGNoaWxkcmVuU3RyaW5nID09PSAnW29iamVjdCBPYmplY3RdJyA/ICdvYmplY3Qgd2l0aCBrZXlzIHsnICsgT2JqZWN0LmtleXMoY2hpbGRyZW4pLmpvaW4oJywgJykgKyAnfScgOiBjaGlsZHJlblN0cmluZywgYWRkZW5kdW0pIDogX3Byb2RJbnZhcmlhbnQoJzMxJywgY2hpbGRyZW5TdHJpbmcgPT09ICdbb2JqZWN0IE9iamVjdF0nID8gJ29iamVjdCB3aXRoIGtleXMgeycgKyBPYmplY3Qua2V5cyhjaGlsZHJlbikuam9pbignLCAnKSArICd9JyA6IGNoaWxkcmVuU3RyaW5nLCBhZGRlbmR1bSkgOiB2b2lkIDA7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN1YnRyZWVDb3VudDtcbn1cblxuLyoqXG4gKiBUcmF2ZXJzZXMgY2hpbGRyZW4gdGhhdCBhcmUgdHlwaWNhbGx5IHNwZWNpZmllZCBhcyBgcHJvcHMuY2hpbGRyZW5gLCBidXRcbiAqIG1pZ2h0IGFsc28gYmUgc3BlY2lmaWVkIHRocm91Z2ggYXR0cmlidXRlczpcbiAqXG4gKiAtIGB0cmF2ZXJzZUFsbENoaWxkcmVuKHRoaXMucHJvcHMuY2hpbGRyZW4sIC4uLilgXG4gKiAtIGB0cmF2ZXJzZUFsbENoaWxkcmVuKHRoaXMucHJvcHMubGVmdFBhbmVsQ2hpbGRyZW4sIC4uLilgXG4gKlxuICogVGhlIGB0cmF2ZXJzZUNvbnRleHRgIGlzIGFuIG9wdGlvbmFsIGFyZ3VtZW50IHRoYXQgaXMgcGFzc2VkIHRocm91Z2ggdGhlXG4gKiBlbnRpcmUgdHJhdmVyc2FsLiBJdCBjYW4gYmUgdXNlZCB0byBzdG9yZSBhY2N1bXVsYXRpb25zIG9yIGFueXRoaW5nIGVsc2UgdGhhdFxuICogdGhlIGNhbGxiYWNrIG1pZ2h0IGZpbmQgcmVsZXZhbnQuXG4gKlxuICogQHBhcmFtIHs/Kn0gY2hpbGRyZW4gQ2hpbGRyZW4gdHJlZSBvYmplY3QuXG4gKiBAcGFyYW0geyFmdW5jdGlvbn0gY2FsbGJhY2sgVG8gaW52b2tlIHVwb24gdHJhdmVyc2luZyBlYWNoIGNoaWxkLlxuICogQHBhcmFtIHs/Kn0gdHJhdmVyc2VDb250ZXh0IENvbnRleHQgZm9yIHRyYXZlcnNhbC5cbiAqIEByZXR1cm4geyFudW1iZXJ9IFRoZSBudW1iZXIgb2YgY2hpbGRyZW4gaW4gdGhpcyBzdWJ0cmVlLlxuICovXG5mdW5jdGlvbiB0cmF2ZXJzZUFsbENoaWxkcmVuKGNoaWxkcmVuLCBjYWxsYmFjaywgdHJhdmVyc2VDb250ZXh0KSB7XG4gIGlmIChjaGlsZHJlbiA9PSBudWxsKSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICByZXR1cm4gdHJhdmVyc2VBbGxDaGlsZHJlbkltcGwoY2hpbGRyZW4sICcnLCBjYWxsYmFjaywgdHJhdmVyc2VDb250ZXh0KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0cmF2ZXJzZUFsbENoaWxkcmVuO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QvbGliL3RyYXZlcnNlQWxsQ2hpbGRyZW4uanMiLCJ2YXIgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xuXG5pbXBvcnQgY29tcG9zZSBmcm9tICcuL2NvbXBvc2UnO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBzdG9yZSBlbmhhbmNlciB0aGF0IGFwcGxpZXMgbWlkZGxld2FyZSB0byB0aGUgZGlzcGF0Y2ggbWV0aG9kXG4gKiBvZiB0aGUgUmVkdXggc3RvcmUuIFRoaXMgaXMgaGFuZHkgZm9yIGEgdmFyaWV0eSBvZiB0YXNrcywgc3VjaCBhcyBleHByZXNzaW5nXG4gKiBhc3luY2hyb25vdXMgYWN0aW9ucyBpbiBhIGNvbmNpc2UgbWFubmVyLCBvciBsb2dnaW5nIGV2ZXJ5IGFjdGlvbiBwYXlsb2FkLlxuICpcbiAqIFNlZSBgcmVkdXgtdGh1bmtgIHBhY2thZ2UgYXMgYW4gZXhhbXBsZSBvZiB0aGUgUmVkdXggbWlkZGxld2FyZS5cbiAqXG4gKiBCZWNhdXNlIG1pZGRsZXdhcmUgaXMgcG90ZW50aWFsbHkgYXN5bmNocm9ub3VzLCB0aGlzIHNob3VsZCBiZSB0aGUgZmlyc3RcbiAqIHN0b3JlIGVuaGFuY2VyIGluIHRoZSBjb21wb3NpdGlvbiBjaGFpbi5cbiAqXG4gKiBOb3RlIHRoYXQgZWFjaCBtaWRkbGV3YXJlIHdpbGwgYmUgZ2l2ZW4gdGhlIGBkaXNwYXRjaGAgYW5kIGBnZXRTdGF0ZWAgZnVuY3Rpb25zXG4gKiBhcyBuYW1lZCBhcmd1bWVudHMuXG4gKlxuICogQHBhcmFtIHsuLi5GdW5jdGlvbn0gbWlkZGxld2FyZXMgVGhlIG1pZGRsZXdhcmUgY2hhaW4gdG8gYmUgYXBwbGllZC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gQSBzdG9yZSBlbmhhbmNlciBhcHBseWluZyB0aGUgbWlkZGxld2FyZS5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYXBwbHlNaWRkbGV3YXJlKCkge1xuICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgbWlkZGxld2FyZXMgPSBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICBtaWRkbGV3YXJlc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAoY3JlYXRlU3RvcmUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHJlZHVjZXIsIHByZWxvYWRlZFN0YXRlLCBlbmhhbmNlcikge1xuICAgICAgdmFyIHN0b3JlID0gY3JlYXRlU3RvcmUocmVkdWNlciwgcHJlbG9hZGVkU3RhdGUsIGVuaGFuY2VyKTtcbiAgICAgIHZhciBfZGlzcGF0Y2ggPSBzdG9yZS5kaXNwYXRjaDtcbiAgICAgIHZhciBjaGFpbiA9IFtdO1xuXG4gICAgICB2YXIgbWlkZGxld2FyZUFQSSA9IHtcbiAgICAgICAgZ2V0U3RhdGU6IHN0b3JlLmdldFN0YXRlLFxuICAgICAgICBkaXNwYXRjaDogZnVuY3Rpb24gZGlzcGF0Y2goYWN0aW9uKSB7XG4gICAgICAgICAgcmV0dXJuIF9kaXNwYXRjaChhY3Rpb24pO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY2hhaW4gPSBtaWRkbGV3YXJlcy5tYXAoZnVuY3Rpb24gKG1pZGRsZXdhcmUpIHtcbiAgICAgICAgcmV0dXJuIG1pZGRsZXdhcmUobWlkZGxld2FyZUFQSSk7XG4gICAgICB9KTtcbiAgICAgIF9kaXNwYXRjaCA9IGNvbXBvc2UuYXBwbHkodW5kZWZpbmVkLCBjaGFpbikoc3RvcmUuZGlzcGF0Y2gpO1xuXG4gICAgICByZXR1cm4gX2V4dGVuZHMoe30sIHN0b3JlLCB7XG4gICAgICAgIGRpc3BhdGNoOiBfZGlzcGF0Y2hcbiAgICAgIH0pO1xuICAgIH07XG4gIH07XG59XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWR1eC9lcy9hcHBseU1pZGRsZXdhcmUuanMiLCJmdW5jdGlvbiBiaW5kQWN0aW9uQ3JlYXRvcihhY3Rpb25DcmVhdG9yLCBkaXNwYXRjaCkge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBkaXNwYXRjaChhY3Rpb25DcmVhdG9yLmFwcGx5KHVuZGVmaW5lZCwgYXJndW1lbnRzKSk7XG4gIH07XG59XG5cbi8qKlxuICogVHVybnMgYW4gb2JqZWN0IHdob3NlIHZhbHVlcyBhcmUgYWN0aW9uIGNyZWF0b3JzLCBpbnRvIGFuIG9iamVjdCB3aXRoIHRoZVxuICogc2FtZSBrZXlzLCBidXQgd2l0aCBldmVyeSBmdW5jdGlvbiB3cmFwcGVkIGludG8gYSBgZGlzcGF0Y2hgIGNhbGwgc28gdGhleVxuICogbWF5IGJlIGludm9rZWQgZGlyZWN0bHkuIFRoaXMgaXMganVzdCBhIGNvbnZlbmllbmNlIG1ldGhvZCwgYXMgeW91IGNhbiBjYWxsXG4gKiBgc3RvcmUuZGlzcGF0Y2goTXlBY3Rpb25DcmVhdG9ycy5kb1NvbWV0aGluZygpKWAgeW91cnNlbGYganVzdCBmaW5lLlxuICpcbiAqIEZvciBjb252ZW5pZW5jZSwgeW91IGNhbiBhbHNvIHBhc3MgYSBzaW5nbGUgZnVuY3Rpb24gYXMgdGhlIGZpcnN0IGFyZ3VtZW50LFxuICogYW5kIGdldCBhIGZ1bmN0aW9uIGluIHJldHVybi5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufE9iamVjdH0gYWN0aW9uQ3JlYXRvcnMgQW4gb2JqZWN0IHdob3NlIHZhbHVlcyBhcmUgYWN0aW9uXG4gKiBjcmVhdG9yIGZ1bmN0aW9ucy4gT25lIGhhbmR5IHdheSB0byBvYnRhaW4gaXQgaXMgdG8gdXNlIEVTNiBgaW1wb3J0ICogYXNgXG4gKiBzeW50YXguIFlvdSBtYXkgYWxzbyBwYXNzIGEgc2luZ2xlIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGRpc3BhdGNoIFRoZSBgZGlzcGF0Y2hgIGZ1bmN0aW9uIGF2YWlsYWJsZSBvbiB5b3VyIFJlZHV4XG4gKiBzdG9yZS5cbiAqXG4gKiBAcmV0dXJucyB7RnVuY3Rpb258T2JqZWN0fSBUaGUgb2JqZWN0IG1pbWlja2luZyB0aGUgb3JpZ2luYWwgb2JqZWN0LCBidXQgd2l0aFxuICogZXZlcnkgYWN0aW9uIGNyZWF0b3Igd3JhcHBlZCBpbnRvIHRoZSBgZGlzcGF0Y2hgIGNhbGwuIElmIHlvdSBwYXNzZWQgYVxuICogZnVuY3Rpb24gYXMgYGFjdGlvbkNyZWF0b3JzYCwgdGhlIHJldHVybiB2YWx1ZSB3aWxsIGFsc28gYmUgYSBzaW5nbGVcbiAqIGZ1bmN0aW9uLlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBiaW5kQWN0aW9uQ3JlYXRvcnMoYWN0aW9uQ3JlYXRvcnMsIGRpc3BhdGNoKSB7XG4gIGlmICh0eXBlb2YgYWN0aW9uQ3JlYXRvcnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gYmluZEFjdGlvbkNyZWF0b3IoYWN0aW9uQ3JlYXRvcnMsIGRpc3BhdGNoKTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgYWN0aW9uQ3JlYXRvcnMgIT09ICdvYmplY3QnIHx8IGFjdGlvbkNyZWF0b3JzID09PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdiaW5kQWN0aW9uQ3JlYXRvcnMgZXhwZWN0ZWQgYW4gb2JqZWN0IG9yIGEgZnVuY3Rpb24sIGluc3RlYWQgcmVjZWl2ZWQgJyArIChhY3Rpb25DcmVhdG9ycyA9PT0gbnVsbCA/ICdudWxsJyA6IHR5cGVvZiBhY3Rpb25DcmVhdG9ycykgKyAnLiAnICsgJ0RpZCB5b3Ugd3JpdGUgXCJpbXBvcnQgQWN0aW9uQ3JlYXRvcnMgZnJvbVwiIGluc3RlYWQgb2YgXCJpbXBvcnQgKiBhcyBBY3Rpb25DcmVhdG9ycyBmcm9tXCI/Jyk7XG4gIH1cblxuICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKGFjdGlvbkNyZWF0b3JzKTtcbiAgdmFyIGJvdW5kQWN0aW9uQ3JlYXRvcnMgPSB7fTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGtleSA9IGtleXNbaV07XG4gICAgdmFyIGFjdGlvbkNyZWF0b3IgPSBhY3Rpb25DcmVhdG9yc1trZXldO1xuICAgIGlmICh0eXBlb2YgYWN0aW9uQ3JlYXRvciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgYm91bmRBY3Rpb25DcmVhdG9yc1trZXldID0gYmluZEFjdGlvbkNyZWF0b3IoYWN0aW9uQ3JlYXRvciwgZGlzcGF0Y2gpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gYm91bmRBY3Rpb25DcmVhdG9ycztcbn1cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3JlZHV4L2VzL2JpbmRBY3Rpb25DcmVhdG9ycy5qcyIsImltcG9ydCB7IEFjdGlvblR5cGVzIH0gZnJvbSAnLi9jcmVhdGVTdG9yZSc7XG5pbXBvcnQgaXNQbGFpbk9iamVjdCBmcm9tICdsb2Rhc2gtZXMvaXNQbGFpbk9iamVjdCc7XG5pbXBvcnQgd2FybmluZyBmcm9tICcuL3V0aWxzL3dhcm5pbmcnO1xuXG5mdW5jdGlvbiBnZXRVbmRlZmluZWRTdGF0ZUVycm9yTWVzc2FnZShrZXksIGFjdGlvbikge1xuICB2YXIgYWN0aW9uVHlwZSA9IGFjdGlvbiAmJiBhY3Rpb24udHlwZTtcbiAgdmFyIGFjdGlvbk5hbWUgPSBhY3Rpb25UeXBlICYmICdcIicgKyBhY3Rpb25UeXBlLnRvU3RyaW5nKCkgKyAnXCInIHx8ICdhbiBhY3Rpb24nO1xuXG4gIHJldHVybiAnR2l2ZW4gYWN0aW9uICcgKyBhY3Rpb25OYW1lICsgJywgcmVkdWNlciBcIicgKyBrZXkgKyAnXCIgcmV0dXJuZWQgdW5kZWZpbmVkLiAnICsgJ1RvIGlnbm9yZSBhbiBhY3Rpb24sIHlvdSBtdXN0IGV4cGxpY2l0bHkgcmV0dXJuIHRoZSBwcmV2aW91cyBzdGF0ZS4nO1xufVxuXG5mdW5jdGlvbiBnZXRVbmV4cGVjdGVkU3RhdGVTaGFwZVdhcm5pbmdNZXNzYWdlKGlucHV0U3RhdGUsIHJlZHVjZXJzLCBhY3Rpb24sIHVuZXhwZWN0ZWRLZXlDYWNoZSkge1xuICB2YXIgcmVkdWNlcktleXMgPSBPYmplY3Qua2V5cyhyZWR1Y2Vycyk7XG4gIHZhciBhcmd1bWVudE5hbWUgPSBhY3Rpb24gJiYgYWN0aW9uLnR5cGUgPT09IEFjdGlvblR5cGVzLklOSVQgPyAncHJlbG9hZGVkU3RhdGUgYXJndW1lbnQgcGFzc2VkIHRvIGNyZWF0ZVN0b3JlJyA6ICdwcmV2aW91cyBzdGF0ZSByZWNlaXZlZCBieSB0aGUgcmVkdWNlcic7XG5cbiAgaWYgKHJlZHVjZXJLZXlzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiAnU3RvcmUgZG9lcyBub3QgaGF2ZSBhIHZhbGlkIHJlZHVjZXIuIE1ha2Ugc3VyZSB0aGUgYXJndW1lbnQgcGFzc2VkICcgKyAndG8gY29tYmluZVJlZHVjZXJzIGlzIGFuIG9iamVjdCB3aG9zZSB2YWx1ZXMgYXJlIHJlZHVjZXJzLic7XG4gIH1cblxuICBpZiAoIWlzUGxhaW5PYmplY3QoaW5wdXRTdGF0ZSkpIHtcbiAgICByZXR1cm4gJ1RoZSAnICsgYXJndW1lbnROYW1lICsgJyBoYXMgdW5leHBlY3RlZCB0eXBlIG9mIFwiJyArIHt9LnRvU3RyaW5nLmNhbGwoaW5wdXRTdGF0ZSkubWF0Y2goL1xccyhbYS16fEEtWl0rKS8pWzFdICsgJ1wiLiBFeHBlY3RlZCBhcmd1bWVudCB0byBiZSBhbiBvYmplY3Qgd2l0aCB0aGUgZm9sbG93aW5nICcgKyAoJ2tleXM6IFwiJyArIHJlZHVjZXJLZXlzLmpvaW4oJ1wiLCBcIicpICsgJ1wiJyk7XG4gIH1cblxuICB2YXIgdW5leHBlY3RlZEtleXMgPSBPYmplY3Qua2V5cyhpbnB1dFN0YXRlKS5maWx0ZXIoZnVuY3Rpb24gKGtleSkge1xuICAgIHJldHVybiAhcmVkdWNlcnMuaGFzT3duUHJvcGVydHkoa2V5KSAmJiAhdW5leHBlY3RlZEtleUNhY2hlW2tleV07XG4gIH0pO1xuXG4gIHVuZXhwZWN0ZWRLZXlzLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgIHVuZXhwZWN0ZWRLZXlDYWNoZVtrZXldID0gdHJ1ZTtcbiAgfSk7XG5cbiAgaWYgKHVuZXhwZWN0ZWRLZXlzLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gJ1VuZXhwZWN0ZWQgJyArICh1bmV4cGVjdGVkS2V5cy5sZW5ndGggPiAxID8gJ2tleXMnIDogJ2tleScpICsgJyAnICsgKCdcIicgKyB1bmV4cGVjdGVkS2V5cy5qb2luKCdcIiwgXCInKSArICdcIiBmb3VuZCBpbiAnICsgYXJndW1lbnROYW1lICsgJy4gJykgKyAnRXhwZWN0ZWQgdG8gZmluZCBvbmUgb2YgdGhlIGtub3duIHJlZHVjZXIga2V5cyBpbnN0ZWFkOiAnICsgKCdcIicgKyByZWR1Y2VyS2V5cy5qb2luKCdcIiwgXCInKSArICdcIi4gVW5leHBlY3RlZCBrZXlzIHdpbGwgYmUgaWdub3JlZC4nKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBhc3NlcnRSZWR1Y2VyU2FuaXR5KHJlZHVjZXJzKSB7XG4gIE9iamVjdC5rZXlzKHJlZHVjZXJzKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICB2YXIgcmVkdWNlciA9IHJlZHVjZXJzW2tleV07XG4gICAgdmFyIGluaXRpYWxTdGF0ZSA9IHJlZHVjZXIodW5kZWZpbmVkLCB7IHR5cGU6IEFjdGlvblR5cGVzLklOSVQgfSk7XG5cbiAgICBpZiAodHlwZW9mIGluaXRpYWxTdGF0ZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUmVkdWNlciBcIicgKyBrZXkgKyAnXCIgcmV0dXJuZWQgdW5kZWZpbmVkIGR1cmluZyBpbml0aWFsaXphdGlvbi4gJyArICdJZiB0aGUgc3RhdGUgcGFzc2VkIHRvIHRoZSByZWR1Y2VyIGlzIHVuZGVmaW5lZCwgeW91IG11c3QgJyArICdleHBsaWNpdGx5IHJldHVybiB0aGUgaW5pdGlhbCBzdGF0ZS4gVGhlIGluaXRpYWwgc3RhdGUgbWF5ICcgKyAnbm90IGJlIHVuZGVmaW5lZC4nKTtcbiAgICB9XG5cbiAgICB2YXIgdHlwZSA9ICdAQHJlZHV4L1BST0JFX1VOS05PV05fQUNUSU9OXycgKyBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoNykuc3BsaXQoJycpLmpvaW4oJy4nKTtcbiAgICBpZiAodHlwZW9mIHJlZHVjZXIodW5kZWZpbmVkLCB7IHR5cGU6IHR5cGUgfSkgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlZHVjZXIgXCInICsga2V5ICsgJ1wiIHJldHVybmVkIHVuZGVmaW5lZCB3aGVuIHByb2JlZCB3aXRoIGEgcmFuZG9tIHR5cGUuICcgKyAoJ0RvblxcJ3QgdHJ5IHRvIGhhbmRsZSAnICsgQWN0aW9uVHlwZXMuSU5JVCArICcgb3Igb3RoZXIgYWN0aW9ucyBpbiBcInJlZHV4LypcIiAnKSArICduYW1lc3BhY2UuIFRoZXkgYXJlIGNvbnNpZGVyZWQgcHJpdmF0ZS4gSW5zdGVhZCwgeW91IG11c3QgcmV0dXJuIHRoZSAnICsgJ2N1cnJlbnQgc3RhdGUgZm9yIGFueSB1bmtub3duIGFjdGlvbnMsIHVubGVzcyBpdCBpcyB1bmRlZmluZWQsICcgKyAnaW4gd2hpY2ggY2FzZSB5b3UgbXVzdCByZXR1cm4gdGhlIGluaXRpYWwgc3RhdGUsIHJlZ2FyZGxlc3Mgb2YgdGhlICcgKyAnYWN0aW9uIHR5cGUuIFRoZSBpbml0aWFsIHN0YXRlIG1heSBub3QgYmUgdW5kZWZpbmVkLicpO1xuICAgIH1cbiAgfSk7XG59XG5cbi8qKlxuICogVHVybnMgYW4gb2JqZWN0IHdob3NlIHZhbHVlcyBhcmUgZGlmZmVyZW50IHJlZHVjZXIgZnVuY3Rpb25zLCBpbnRvIGEgc2luZ2xlXG4gKiByZWR1Y2VyIGZ1bmN0aW9uLiBJdCB3aWxsIGNhbGwgZXZlcnkgY2hpbGQgcmVkdWNlciwgYW5kIGdhdGhlciB0aGVpciByZXN1bHRzXG4gKiBpbnRvIGEgc2luZ2xlIHN0YXRlIG9iamVjdCwgd2hvc2Uga2V5cyBjb3JyZXNwb25kIHRvIHRoZSBrZXlzIG9mIHRoZSBwYXNzZWRcbiAqIHJlZHVjZXIgZnVuY3Rpb25zLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSByZWR1Y2VycyBBbiBvYmplY3Qgd2hvc2UgdmFsdWVzIGNvcnJlc3BvbmQgdG8gZGlmZmVyZW50XG4gKiByZWR1Y2VyIGZ1bmN0aW9ucyB0aGF0IG5lZWQgdG8gYmUgY29tYmluZWQgaW50byBvbmUuIE9uZSBoYW5keSB3YXkgdG8gb2J0YWluXG4gKiBpdCBpcyB0byB1c2UgRVM2IGBpbXBvcnQgKiBhcyByZWR1Y2Vyc2Agc3ludGF4LiBUaGUgcmVkdWNlcnMgbWF5IG5ldmVyIHJldHVyblxuICogdW5kZWZpbmVkIGZvciBhbnkgYWN0aW9uLiBJbnN0ZWFkLCB0aGV5IHNob3VsZCByZXR1cm4gdGhlaXIgaW5pdGlhbCBzdGF0ZVxuICogaWYgdGhlIHN0YXRlIHBhc3NlZCB0byB0aGVtIHdhcyB1bmRlZmluZWQsIGFuZCB0aGUgY3VycmVudCBzdGF0ZSBmb3IgYW55XG4gKiB1bnJlY29nbml6ZWQgYWN0aW9uLlxuICpcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gQSByZWR1Y2VyIGZ1bmN0aW9uIHRoYXQgaW52b2tlcyBldmVyeSByZWR1Y2VyIGluc2lkZSB0aGVcbiAqIHBhc3NlZCBvYmplY3QsIGFuZCBidWlsZHMgYSBzdGF0ZSBvYmplY3Qgd2l0aCB0aGUgc2FtZSBzaGFwZS5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY29tYmluZVJlZHVjZXJzKHJlZHVjZXJzKSB7XG4gIHZhciByZWR1Y2VyS2V5cyA9IE9iamVjdC5rZXlzKHJlZHVjZXJzKTtcbiAgdmFyIGZpbmFsUmVkdWNlcnMgPSB7fTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCByZWR1Y2VyS2V5cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBrZXkgPSByZWR1Y2VyS2V5c1tpXTtcblxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBpZiAodHlwZW9mIHJlZHVjZXJzW2tleV0gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHdhcm5pbmcoJ05vIHJlZHVjZXIgcHJvdmlkZWQgZm9yIGtleSBcIicgKyBrZXkgKyAnXCInKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHJlZHVjZXJzW2tleV0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGZpbmFsUmVkdWNlcnNba2V5XSA9IHJlZHVjZXJzW2tleV07XG4gICAgfVxuICB9XG4gIHZhciBmaW5hbFJlZHVjZXJLZXlzID0gT2JqZWN0LmtleXMoZmluYWxSZWR1Y2Vycyk7XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICB2YXIgdW5leHBlY3RlZEtleUNhY2hlID0ge307XG4gIH1cblxuICB2YXIgc2FuaXR5RXJyb3I7XG4gIHRyeSB7XG4gICAgYXNzZXJ0UmVkdWNlclNhbml0eShmaW5hbFJlZHVjZXJzKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHNhbml0eUVycm9yID0gZTtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiBjb21iaW5hdGlvbigpIHtcbiAgICB2YXIgc3RhdGUgPSBhcmd1bWVudHMubGVuZ3RoIDw9IDAgfHwgYXJndW1lbnRzWzBdID09PSB1bmRlZmluZWQgPyB7fSA6IGFyZ3VtZW50c1swXTtcbiAgICB2YXIgYWN0aW9uID0gYXJndW1lbnRzWzFdO1xuXG4gICAgaWYgKHNhbml0eUVycm9yKSB7XG4gICAgICB0aHJvdyBzYW5pdHlFcnJvcjtcbiAgICB9XG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgdmFyIHdhcm5pbmdNZXNzYWdlID0gZ2V0VW5leHBlY3RlZFN0YXRlU2hhcGVXYXJuaW5nTWVzc2FnZShzdGF0ZSwgZmluYWxSZWR1Y2VycywgYWN0aW9uLCB1bmV4cGVjdGVkS2V5Q2FjaGUpO1xuICAgICAgaWYgKHdhcm5pbmdNZXNzYWdlKSB7XG4gICAgICAgIHdhcm5pbmcod2FybmluZ01lc3NhZ2UpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBoYXNDaGFuZ2VkID0gZmFsc2U7XG4gICAgdmFyIG5leHRTdGF0ZSA9IHt9O1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZmluYWxSZWR1Y2VyS2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGtleSA9IGZpbmFsUmVkdWNlcktleXNbaV07XG4gICAgICB2YXIgcmVkdWNlciA9IGZpbmFsUmVkdWNlcnNba2V5XTtcbiAgICAgIHZhciBwcmV2aW91c1N0YXRlRm9yS2V5ID0gc3RhdGVba2V5XTtcbiAgICAgIHZhciBuZXh0U3RhdGVGb3JLZXkgPSByZWR1Y2VyKHByZXZpb3VzU3RhdGVGb3JLZXksIGFjdGlvbik7XG4gICAgICBpZiAodHlwZW9mIG5leHRTdGF0ZUZvcktleSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgdmFyIGVycm9yTWVzc2FnZSA9IGdldFVuZGVmaW5lZFN0YXRlRXJyb3JNZXNzYWdlKGtleSwgYWN0aW9uKTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGVycm9yTWVzc2FnZSk7XG4gICAgICB9XG4gICAgICBuZXh0U3RhdGVba2V5XSA9IG5leHRTdGF0ZUZvcktleTtcbiAgICAgIGhhc0NoYW5nZWQgPSBoYXNDaGFuZ2VkIHx8IG5leHRTdGF0ZUZvcktleSAhPT0gcHJldmlvdXNTdGF0ZUZvcktleTtcbiAgICB9XG4gICAgcmV0dXJuIGhhc0NoYW5nZWQgPyBuZXh0U3RhdGUgOiBzdGF0ZTtcbiAgfTtcbn1cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3JlZHV4L2VzL2NvbWJpbmVSZWR1Y2Vycy5qcyIsIid1c2Ugc3RyaWN0JztcblxudmFyIGlzQWJzb2x1dGUgPSBmdW5jdGlvbiBpc0Fic29sdXRlKHBhdGhuYW1lKSB7XG4gIHJldHVybiBwYXRobmFtZS5jaGFyQXQoMCkgPT09ICcvJztcbn07XG5cbi8vIEFib3V0IDEuNXggZmFzdGVyIHRoYW4gdGhlIHR3by1hcmcgdmVyc2lvbiBvZiBBcnJheSNzcGxpY2UoKVxudmFyIHNwbGljZU9uZSA9IGZ1bmN0aW9uIHNwbGljZU9uZShsaXN0LCBpbmRleCkge1xuICBmb3IgKHZhciBpID0gaW5kZXgsIGsgPSBpICsgMSwgbiA9IGxpc3QubGVuZ3RoOyBrIDwgbjsgaSArPSAxLCBrICs9IDEpIHtcbiAgICBsaXN0W2ldID0gbGlzdFtrXTtcbiAgfWxpc3QucG9wKCk7XG59O1xuXG4vLyBUaGlzIGltcGxlbWVudGF0aW9uIGlzIGJhc2VkIGhlYXZpbHkgb24gbm9kZSdzIHVybC5wYXJzZVxudmFyIHJlc29sdmVQYXRobmFtZSA9IGZ1bmN0aW9uIHJlc29sdmVQYXRobmFtZSh0bykge1xuICB2YXIgZnJvbSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogJyc7XG5cbiAgdmFyIHRvUGFydHMgPSB0byAmJiB0by5zcGxpdCgnLycpIHx8IFtdO1xuICB2YXIgZnJvbVBhcnRzID0gZnJvbSAmJiBmcm9tLnNwbGl0KCcvJykgfHwgW107XG5cbiAgdmFyIGlzVG9BYnMgPSB0byAmJiBpc0Fic29sdXRlKHRvKTtcbiAgdmFyIGlzRnJvbUFicyA9IGZyb20gJiYgaXNBYnNvbHV0ZShmcm9tKTtcbiAgdmFyIG11c3RFbmRBYnMgPSBpc1RvQWJzIHx8IGlzRnJvbUFicztcblxuICBpZiAodG8gJiYgaXNBYnNvbHV0ZSh0bykpIHtcbiAgICAvLyB0byBpcyBhYnNvbHV0ZVxuICAgIGZyb21QYXJ0cyA9IHRvUGFydHM7XG4gIH0gZWxzZSBpZiAodG9QYXJ0cy5sZW5ndGgpIHtcbiAgICAvLyB0byBpcyByZWxhdGl2ZSwgZHJvcCB0aGUgZmlsZW5hbWVcbiAgICBmcm9tUGFydHMucG9wKCk7XG4gICAgZnJvbVBhcnRzID0gZnJvbVBhcnRzLmNvbmNhdCh0b1BhcnRzKTtcbiAgfVxuXG4gIGlmICghZnJvbVBhcnRzLmxlbmd0aCkgcmV0dXJuICcvJztcblxuICB2YXIgaGFzVHJhaWxpbmdTbGFzaCA9IHZvaWQgMDtcbiAgaWYgKGZyb21QYXJ0cy5sZW5ndGgpIHtcbiAgICB2YXIgbGFzdCA9IGZyb21QYXJ0c1tmcm9tUGFydHMubGVuZ3RoIC0gMV07XG4gICAgaGFzVHJhaWxpbmdTbGFzaCA9IGxhc3QgPT09ICcuJyB8fCBsYXN0ID09PSAnLi4nIHx8IGxhc3QgPT09ICcnO1xuICB9IGVsc2Uge1xuICAgIGhhc1RyYWlsaW5nU2xhc2ggPSBmYWxzZTtcbiAgfVxuXG4gIHZhciB1cCA9IDA7XG4gIGZvciAodmFyIGkgPSBmcm9tUGFydHMubGVuZ3RoOyBpID49IDA7IGktLSkge1xuICAgIHZhciBwYXJ0ID0gZnJvbVBhcnRzW2ldO1xuXG4gICAgaWYgKHBhcnQgPT09ICcuJykge1xuICAgICAgc3BsaWNlT25lKGZyb21QYXJ0cywgaSk7XG4gICAgfSBlbHNlIGlmIChwYXJ0ID09PSAnLi4nKSB7XG4gICAgICBzcGxpY2VPbmUoZnJvbVBhcnRzLCBpKTtcbiAgICAgIHVwKys7XG4gICAgfSBlbHNlIGlmICh1cCkge1xuICAgICAgc3BsaWNlT25lKGZyb21QYXJ0cywgaSk7XG4gICAgICB1cC0tO1xuICAgIH1cbiAgfVxuXG4gIGlmICghbXVzdEVuZEFicykgZm9yICg7IHVwLS07IHVwKSB7XG4gICAgZnJvbVBhcnRzLnVuc2hpZnQoJy4uJyk7XG4gIH1pZiAobXVzdEVuZEFicyAmJiBmcm9tUGFydHNbMF0gIT09ICcnICYmICghZnJvbVBhcnRzWzBdIHx8ICFpc0Fic29sdXRlKGZyb21QYXJ0c1swXSkpKSBmcm9tUGFydHMudW5zaGlmdCgnJyk7XG5cbiAgdmFyIHJlc3VsdCA9IGZyb21QYXJ0cy5qb2luKCcvJyk7XG5cbiAgaWYgKGhhc1RyYWlsaW5nU2xhc2ggJiYgcmVzdWx0LnN1YnN0cigtMSkgIT09ICcvJykgcmVzdWx0ICs9ICcvJztcblxuICByZXR1cm4gcmVzdWx0O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSByZXNvbHZlUGF0aG5hbWU7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZXNvbHZlLXBhdGhuYW1lL2luZGV4LmpzIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2xpYi9pbmRleCcpO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9zeW1ib2wtb2JzZXJ2YWJsZS9pbmRleC5qcyIsIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxudmFyIF9wb255ZmlsbCA9IHJlcXVpcmUoJy4vcG9ueWZpbGwnKTtcblxudmFyIF9wb255ZmlsbDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9wb255ZmlsbCk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7ICdkZWZhdWx0Jzogb2JqIH07IH1cblxudmFyIHJvb3Q7IC8qIGdsb2JhbCB3aW5kb3cgKi9cblxuXG5pZiAodHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnKSB7XG4gIHJvb3QgPSBzZWxmO1xufSBlbHNlIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICByb290ID0gd2luZG93O1xufSBlbHNlIGlmICh0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJykge1xuICByb290ID0gZ2xvYmFsO1xufSBlbHNlIGlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJykge1xuICByb290ID0gbW9kdWxlO1xufSBlbHNlIHtcbiAgcm9vdCA9IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG59XG5cbnZhciByZXN1bHQgPSAoMCwgX3BvbnlmaWxsMlsnZGVmYXVsdCddKShyb290KTtcbmV4cG9ydHNbJ2RlZmF1bHQnXSA9IHJlc3VsdDtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3N5bWJvbC1vYnNlcnZhYmxlL2xpYi9pbmRleC5qcyIsIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG5cdHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHNbJ2RlZmF1bHQnXSA9IHN5bWJvbE9ic2VydmFibGVQb255ZmlsbDtcbmZ1bmN0aW9uIHN5bWJvbE9ic2VydmFibGVQb255ZmlsbChyb290KSB7XG5cdHZhciByZXN1bHQ7XG5cdHZhciBfU3ltYm9sID0gcm9vdC5TeW1ib2w7XG5cblx0aWYgKHR5cGVvZiBfU3ltYm9sID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0aWYgKF9TeW1ib2wub2JzZXJ2YWJsZSkge1xuXHRcdFx0cmVzdWx0ID0gX1N5bWJvbC5vYnNlcnZhYmxlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXN1bHQgPSBfU3ltYm9sKCdvYnNlcnZhYmxlJyk7XG5cdFx0XHRfU3ltYm9sLm9ic2VydmFibGUgPSByZXN1bHQ7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdHJlc3VsdCA9ICdAQG9ic2VydmFibGUnO1xuXHR9XG5cblx0cmV0dXJuIHJlc3VsdDtcbn07XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9zeW1ib2wtb2JzZXJ2YWJsZS9saWIvcG9ueWZpbGwuanMiLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cbnZhciBfdHlwZW9mID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIgPyBmdW5jdGlvbiAob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9IDogZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTtcblxudmFyIHZhbHVlRXF1YWwgPSBmdW5jdGlvbiB2YWx1ZUVxdWFsKGEsIGIpIHtcbiAgaWYgKGEgPT09IGIpIHJldHVybiB0cnVlO1xuXG4gIGlmIChhID09IG51bGwgfHwgYiA9PSBudWxsKSByZXR1cm4gZmFsc2U7XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkoYSkpIHJldHVybiBBcnJheS5pc0FycmF5KGIpICYmIGEubGVuZ3RoID09PSBiLmxlbmd0aCAmJiBhLmV2ZXJ5KGZ1bmN0aW9uIChpdGVtLCBpbmRleCkge1xuICAgIHJldHVybiB2YWx1ZUVxdWFsKGl0ZW0sIGJbaW5kZXhdKTtcbiAgfSk7XG5cbiAgdmFyIGFUeXBlID0gdHlwZW9mIGEgPT09ICd1bmRlZmluZWQnID8gJ3VuZGVmaW5lZCcgOiBfdHlwZW9mKGEpO1xuICB2YXIgYlR5cGUgPSB0eXBlb2YgYiA9PT0gJ3VuZGVmaW5lZCcgPyAndW5kZWZpbmVkJyA6IF90eXBlb2YoYik7XG5cbiAgaWYgKGFUeXBlICE9PSBiVHlwZSkgcmV0dXJuIGZhbHNlO1xuXG4gIGlmIChhVHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICB2YXIgYVZhbHVlID0gYS52YWx1ZU9mKCk7XG4gICAgdmFyIGJWYWx1ZSA9IGIudmFsdWVPZigpO1xuXG4gICAgaWYgKGFWYWx1ZSAhPT0gYSB8fCBiVmFsdWUgIT09IGIpIHJldHVybiB2YWx1ZUVxdWFsKGFWYWx1ZSwgYlZhbHVlKTtcblxuICAgIHZhciBhS2V5cyA9IE9iamVjdC5rZXlzKGEpO1xuICAgIHZhciBiS2V5cyA9IE9iamVjdC5rZXlzKGIpO1xuXG4gICAgaWYgKGFLZXlzLmxlbmd0aCAhPT0gYktleXMubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG5cbiAgICByZXR1cm4gYUtleXMuZXZlcnkoZnVuY3Rpb24gKGtleSkge1xuICAgICAgcmV0dXJuIHZhbHVlRXF1YWwoYVtrZXldLCBiW2tleV0pO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufTtcblxuZXhwb3J0cy5kZWZhdWx0ID0gdmFsdWVFcXVhbDtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3ZhbHVlLWVxdWFsL2luZGV4LmpzIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihtb2R1bGUpIHtcclxuXHRpZighbW9kdWxlLndlYnBhY2tQb2x5ZmlsbCkge1xyXG5cdFx0bW9kdWxlLmRlcHJlY2F0ZSA9IGZ1bmN0aW9uKCkge307XHJcblx0XHRtb2R1bGUucGF0aHMgPSBbXTtcclxuXHRcdC8vIG1vZHVsZS5wYXJlbnQgPSB1bmRlZmluZWQgYnkgZGVmYXVsdFxyXG5cdFx0aWYoIW1vZHVsZS5jaGlsZHJlbikgbW9kdWxlLmNoaWxkcmVuID0gW107XHJcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobW9kdWxlLCBcImxvYWRlZFwiLCB7XHJcblx0XHRcdGVudW1lcmFibGU6IHRydWUsXHJcblx0XHRcdGdldDogZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0cmV0dXJuIG1vZHVsZS5sO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtb2R1bGUsIFwiaWRcIiwge1xyXG5cdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxyXG5cdFx0XHRnZXQ6IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdHJldHVybiBtb2R1bGUuaTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0XHRtb2R1bGUud2VicGFja1BvbHlmaWxsID0gMTtcclxuXHR9XHJcblx0cmV0dXJuIG1vZHVsZTtcclxufTtcclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vICh3ZWJwYWNrKS9idWlsZGluL21vZHVsZS5qcyIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQge2Nvbm5lY3R9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCBGaWxlSW5wdXQgZnJvbSAncmVhY3QtZmlsZS1pbnB1dCc7XG5cbmltcG9ydCBJdGVtTGlzdCBmcm9tICcuL2l0ZW0tbGlzdCc7XG5pbXBvcnQgZ2V0UGF0aCBmcm9tICcuLi8uLi91dGlsL2dldFBhdGgnO1xuXG5cbmZ1bmN0aW9uIGdldEZpbGVzKGZzKSB7XG4gIHJldHVybiBmcy5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0udHlwZSA9PT0gJ2ZpbGUnKTtcbn1cblxubGV0IG1hcFN0YXRlVG9Qcm9wcyA9IGZ1bmN0aW9uIChzdGF0ZSkge1xuICByZXR1cm4ge1xuICAgIHRpdGxlOiAnRmlsZXMnLFxuICAgIGl0ZW1zOiBnZXRGaWxlcyhnZXRQYXRoKHN0YXRlKSksXG4gICAgaGVhZGVyRXh0cmFzOiAoPGlucHV0IGNsYXNzTmFtZT1cImZpbGVzLXVwbG9hZFwiIHR5cGU9XCJmaWxlXCIvPilcbiAgfTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNvbm5lY3QobWFwU3RhdGVUb1Byb3BzLCAoKSA9PiAoe30pKShJdGVtTGlzdCk7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvY29tcG9uZW50cy9jb250ZW50L2ZpbGUtbGlzdC5qc3giLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtjb25uZWN0fSBmcm9tICdyZWFjdC1yZWR1eCc7XG5cbmltcG9ydCBJdGVtTGlzdCBmcm9tICcuL2l0ZW0tbGlzdCc7XG5pbXBvcnQgZ2V0UGF0aCBmcm9tICcuLi8uLi91dGlsL2dldFBhdGgnO1xuXG5cbmZ1bmN0aW9uIGdldEZvbGRlcnMoZnMpIHtcbiAgcmV0dXJuIGZzLmZpbHRlcihpdGVtID0+IGl0ZW0udHlwZSA9PT0gJ2ZvbGRlcicpO1xufVxuXG5jb25zdCBtYXBTdGF0ZVRvUHJvcHMgPSBmdW5jdGlvbiAoc3RhdGUpIHtcbiAgcmV0dXJuIHtcbiAgICB0aXRsZTogJ0ZvbGRlcnMnLFxuICAgIGl0ZW1zOiBnZXRGb2xkZXJzKGdldFBhdGgoc3RhdGUpLCBzdGF0ZS5jdXJyZW50UGF0aCksXG4gICAgaGVhZGVyRXh0cmFzOiAoPHNwYW4gY2xhc3NOYW1lPVwiZmEgZmEtZm9sZGVyXCIvPilcbiAgfTtcbn07XG5cbmNvbnN0IG1hcERpc3BhdGNoVG9Qcm9wcyA9IGZ1bmN0aW9uIChkaXNwYXRjaCkge1xuICByZXR1cm4ge1xuICAgIGhhbmRsZUl0ZW1DbGljazogZnVuY3Rpb24gKHBhdGgpIHtcbiAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogJ25hdmlnYXRlLXRvJyxcbiAgICAgICAgcGF5bG9hZDogeyBwYXRoIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNvbm5lY3QobWFwU3RhdGVUb1Byb3BzLCBtYXBEaXNwYXRjaFRvUHJvcHMpKEl0ZW1MaXN0KTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9jb21wb25lbnRzL2NvbnRlbnQvZm9sZGVyLWxpc3QuanN4IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7Y29ubmVjdH0gZnJvbSAncmVhY3QtcmVkdXgnO1xuXG5jb25zdCBpY29uTWFwID0ge1xuICBmaWxlOiAnYWNyb2JhdC1maWxlJyxcbiAgZm9sZGVyOiAnc2hhcmVkMScsXG4gIG11c2ljOiAnbXVzaWMnLFxuICBwaWN0dXJlOiAncGhvdG9zJyxcbiAgc2hhcmVkOiAnc2hhcmVkMSdcbn07XG5cbmZ1bmN0aW9uIGdldEltYWdlUGF0aChpdGVtKSB7XG4gIGlmIChpdGVtLmJhY2tncm91bmRJbWFnZSB8fCBpdGVtLnR5cGUgPT09ICdwaWN0dXJlJykge1xuICAgIHJldHVybiAnLi9pbWFnZXMvJyArIChpdGVtLmJhY2tncm91bmRJbWFnZSB8fCBpdGVtLnRpdGxlKTtcbiAgfVxuICByZXR1cm4gJy4vaWNvbnMvdGV4dC1maWxlLnBuZyc7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUNsaWNrSGFuZGxlcihoYW5kbGVDbGljaywgLi4uYXJncykge1xuICByZXR1cm4gZnVuY3Rpb24gKGUpIHtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgaGFuZGxlQ2xpY2suYXBwbHkobnVsbCwgYXJncyk7XG4gIH07XG59XG5cbmNvbnN0IEl0ZW0gPSBmdW5jdGlvbiAoe2l0ZW0sIHNlbGVjdE1vZGUsIGhhbmRsZUNsaWNrLCBjdXJyZW50UGF0aH0pIHtcblxuICBjb25zdCBpY29uID0gaWNvbk1hcFtpdGVtLnR5cGVdO1xuICBsZXQgZWxlbWVudFN0eWxlID0ge1xuICAgIGJhY2tncm91bmRJbWFnZTogYHVybCgke2dldEltYWdlUGF0aChpdGVtKX0pYCxcbiAgICBiYWNrZ3JvdW5kUmVwZWF0OiAnbm8tcmVwZWF0JyxcbiAgICBiYWNrZ3JvdW5kU2l6ZTogJ2NvbnRhaW4nXG4gIH07XG5cbiAgcmV0dXJuIChcbiAgICA8YSBocmVmPXsnIyd9IG9uQ2xpY2s9e3NlbGVjdE1vZGUgPyAoKCk9Pnt9KSA6IGNyZWF0ZUNsaWNrSGFuZGxlcihoYW5kbGVDbGljaywgY3VycmVudFBhdGggKyAnLycgKyBpdGVtLnRpdGxlKX0+XG4gICAgICA8bGFiZWwgY2xhc3NOYW1lPXsnZmlsZXMtY29udGVudC1pdGVtJyArIChzZWxlY3RNb2RlICYmIGl0ZW0uc2VsZWN0ZWQgPyAnIGZpbGVzLWNvbnRlbnQtaXRlbS0tc2VsZWN0ZWQnIDogJycpfSBodG1sRm9yPXtgY2hrLSR7aXRlbS50aXRsZS5zcGxpdCgnLicpWzBdfWB9PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImltYWdlLXBsYWNlaG9sZGVyXCIgc3R5bGU9e2VsZW1lbnRTdHlsZX0vPlxuICAgICAgICA8cD5cbiAgICAgICAgICB7IHNlbGVjdE1vZGUgPyA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgaWQ9e2BjaGstJHtpdGVtLnRpdGxlLnNwbGl0KCcuJylbMF19YH0vPiA6IDxpbWcgc3JjPXtgL2ljb25zLyR7aWNvbn0ucG5nYCB9IC8+IH1cbiAgICAgICAgICB7aXRlbS50aXRsZX1cbiAgICAgICAgPC9wPlxuICAgICAgPC9sYWJlbD5cbiAgICA8L2E+XG4gICk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjb25uZWN0KChzdGF0ZSkgPT4gKHtjdXJyZW50UGF0aDogc3RhdGUuY3VycmVudFBhdGh9KSwgKCkgPT4gKHt9KSkoSXRlbSk7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvY29tcG9uZW50cy9jb250ZW50L2l0ZW0uanN4IiwiaW1wb3J0IHtjb25uZWN0fSBmcm9tICdyZWFjdC1yZWR1eCc7XG5cbmltcG9ydCBJdGVtTGlzdCBmcm9tICcuL2l0ZW0tbGlzdCc7XG5cblxuZnVuY3Rpb24gZ2V0TXVzaWMoZnMpIHtcbiAgcmV0dXJuIGZzLmZpbHRlcihpdGVtID0+IGl0ZW0udHlwZSA9PT0gJ211c2ljJyk7XG59XG5cbmNvbnN0IG1hcFN0YXRlVG9Qcm9wcyA9IGZ1bmN0aW9uIChzdGF0ZSkge1xuICByZXR1cm4ge1xuICAgIHRpdGxlOiAnTXVzaWMnLFxuICAgIGl0ZW1zOiBnZXRNdXNpYyhzdGF0ZS5maWxlc3lzdGVtLmNvbnRlbnRzKVxuICB9O1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY29ubmVjdChtYXBTdGF0ZVRvUHJvcHMsICgpID0+ICh7fSkpKEl0ZW1MaXN0KTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9jb21wb25lbnRzL2NvbnRlbnQvbXVzaWMtbGlzdC5qc3giLCJpbXBvcnQge2Nvbm5lY3R9IGZyb20gJ3JlYWN0LXJlZHV4JztcblxuaW1wb3J0IEl0ZW1MaXN0IGZyb20gJy4vaXRlbS1saXN0JztcblxuXG5mdW5jdGlvbiBnZXRQaG90b3MoZnMpIHtcbiAgcmV0dXJuIGZzLmZpbHRlcihpdGVtID0+IGl0ZW0udHlwZSA9PT0gJ3BpY3R1cmUnKTtcbn1cblxuY29uc3QgbWFwU3RhdGVUb1Byb3BzID0gZnVuY3Rpb24gKHN0YXRlKSB7XG4gIHJldHVybiB7XG4gICAgdGl0bGU6ICdQaG90b3MnLFxuICAgIGl0ZW1zOiBnZXRQaG90b3Moc3RhdGUuZmlsZXN5c3RlbS5jb250ZW50cylcbiAgfTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNvbm5lY3QobWFwU3RhdGVUb1Byb3BzLCAoKSA9PiAoe30pKShJdGVtTGlzdCk7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvY29tcG9uZW50cy9jb250ZW50L3Bob3RvLWxpc3QuanN4IiwiaW1wb3J0IHtjb25uZWN0fSBmcm9tICdyZWFjdC1yZWR1eCc7XG5cbmltcG9ydCBJdGVtTGlzdCBmcm9tICcuL2l0ZW0tbGlzdCc7XG5cblxuZnVuY3Rpb24gZ2V0U2hhcmVkKGZzKSB7XG4gIHJldHVybiBmcy5maWx0ZXIoaXRlbSA9PiBpdGVtLnR5cGUgPT09ICdzaGFyZWQnKTtcbn1cblxuY29uc3QgbWFwU3RhdGVUb1Byb3BzID0gZnVuY3Rpb24gKHN0YXRlKSB7XG4gIHJldHVybiB7XG4gICAgdGl0bGU6ICdTaGFyZWQnLFxuICAgIGl0ZW1zOiBnZXRTaGFyZWQoc3RhdGUuZmlsZXN5c3RlbS5jb250ZW50cylcbiAgfTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNvbm5lY3QobWFwU3RhdGVUb1Byb3BzLCAoKSA9PiAoe30pKShJdGVtTGlzdCk7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvY29tcG9uZW50cy9jb250ZW50L3NoYXJlZC1saXN0LmpzeCIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQge2Nvbm5lY3R9IGZyb20gJ3JlYWN0LXJlZHV4JztcblxuY29uc3QgQnJlYWRjcnVtYnMgPSBmdW5jdGlvbiAoe2N1cnJlbnRQYXRoLCBoYW5kbGVDbGlja30pIHtcbiAgbGV0IGNydW1icyA9IFtdO1xuXG4gIGZ1bmN0aW9uIGNyZWF0ZUNsaWNrSGFuZGxlcihwYXRoKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChlKSB7XG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICByZXR1cm4gaGFuZGxlQ2xpY2socGF0aCk7XG4gICAgfTtcbiAgfVxuXG4gIGlmIChjdXJyZW50UGF0aCkge1xuICAgIGNvbnN0IGN1cnJlbnRMaW5rID0gWycnXTtcbiAgICBjcnVtYnMgPSBjdXJyZW50UGF0aC5zcGxpdCgnLycpLnNsaWNlKDEpLm1hcChmdW5jdGlvbiAoY3J1bWIsIGlkeCkge1xuICAgICAgY3VycmVudExpbmsucHVzaChjcnVtYik7XG5cbiAgICAgIHJldHVybiA8bGkga2V5PXtpZHggKyAxfT48YSBocmVmPVwiXCIgb25DbGljaz17Y3JlYXRlQ2xpY2tIYW5kbGVyKGN1cnJlbnRMaW5rLmpvaW4oJy8nKSl9PntjcnVtYn0gPHNwYW4gY2xhc3NOYW1lPVwiZmEgZmEtZWxsaXBzaXMtaFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiLz48L2E+PC9saT47XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIChcbiAgICA8b2wgY2xhc3NOYW1lPVwiYnJlYWRjcnVtYlwiPlxuICAgICAgPGxpIGtleT17MH0+PGEgaHJlZj1cIlwiIG9uQ2xpY2s9e2NyZWF0ZUNsaWNrSGFuZGxlcignJyl9PkhvbWUgPHNwYW4gY2xhc3NOYW1lPVwiZmEgZmEtZWxsaXBzaXMtaFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiLz48L2E+PC9saT5cbiAgICAgIHtjcnVtYnN9XG4gICAgPC9vbD5cbiAgKTtcbn07XG5cbmNvbnN0IG1hcFN0YXRlVG9Qcm9wcyA9IGZ1bmN0aW9uIChzdGF0ZSkge1xuICByZXR1cm4ge1xuICAgIGN1cnJlbnRQYXRoOiBzdGF0ZS5jdXJyZW50UGF0aFxuICB9O1xufTtcblxuY29uc3QgbWFwRGlzcGF0Y2hUb1Byb3BzID0gZnVuY3Rpb24gKGRpc3BhdGNoKSB7XG4gIHJldHVybiB7XG4gICAgaGFuZGxlQ2xpY2s6IGZ1bmN0aW9uIChwYXRoKSB7XG4gICAgICBkaXNwYXRjaCh7dHlwZTogJ25hdmlnYXRlLXRvJywgcGF5bG9hZDoge3BhdGh9fSk7XG4gICAgfVxuICB9O1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY29ubmVjdChtYXBTdGF0ZVRvUHJvcHMsIG1hcERpc3BhdGNoVG9Qcm9wcykoQnJlYWRjcnVtYnMpO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2NvbXBvbmVudHMvbmF2aWdhdGlvbi9icmVhZGNydW1icy5qc3giLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtjb25uZWN0fSBmcm9tICdyZWFjdC1yZWR1eCc7XG5cbmNvbnN0IERpc3BsYXlNZW51ID0gZnVuY3Rpb24gKCkge1xuICAndXNlIHN0cmljdCc7XG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJkaXNwbGF5LW1lbnVcIj5cbiAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInNvcnRcIj5Tb3J0PC9zcGFuPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJkcm9wZG93blwiPlxuICAgICAgICA8YnV0dG9uIGNsYXNzTmFtZT1cImJ0biBidG4tZGVmYXVsdCBkcm9wZG93bi10b2dnbGVcIiB0eXBlPVwiYnV0dG9uXCIgaWQ9XCJkcm9wZG93bk1lbnUxXCIgZGF0YS10b2dnbGU9XCIuZHJvcGRvd25cIiBhcmlhLWhhc3BvcHVwPVwidHJ1ZVwiIGFyaWEtZXhwYW5kZWQ9XCJ0cnVlXCI+XG4gICAgICAgICAgTmFtZSAoRGVzY2VuZGluZylcbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJjYXJldFwiLz5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDx1bCBjbGFzc05hbWU9XCJkcm9wZG93bi1tZW51XCIgYXJpYS1sYWJlbGxlZGJ5PVwiZHJvcGRvd25NZW51MVwiPlxuICAgICAgICAgIDxsaT48YSBocmVmPVwiI1wiPkFjdGlvbjwvYT48L2xpPlxuICAgICAgICAgIDxsaT48YSBocmVmPVwiI1wiPkFub3RoZXIgYWN0aW9uPC9hPjwvbGk+XG4gICAgICAgICAgPGxpPjxhIGhyZWY9XCIjXCI+U29tZXRoaW5nIGVsc2UgaGVyZTwvYT48L2xpPlxuICAgICAgICAgIDxsaSByb2xlPVwic2VwYXJhdG9yXCIgY2xhc3NOYW1lPVwiZGl2aWRlclwiLz5cbiAgICAgICAgICA8bGk+PGEgaHJlZj1cIiNcIj5TZXBhcmF0ZWQgbGluazwvYT48L2xpPlxuICAgICAgICA8L3VsPlxuICAgICAgPC9kaXY+XG4gICAgICA8YnV0dG9uIGNsYXNzTmFtZT1cInZpZXdzdHlsZS1sZWZ0IHZpZXdzdHlsZS1hY3RpdmVcIj5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiZmEgZmEtdGhcIi8+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gY2xhc3NOYW1lPVwidmlld3N0eWxlLXJpZ2h0IHZpZXdzdHlsZS1pbmFjdGl2ZVwiPlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJmYSBmYS1saXN0LXVsXCIvPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+KTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNvbm5lY3QoKCkgPT4gKHt9KSwgKCkgPT4gKHt9KSkoRGlzcGxheU1lbnUpO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9jb21wb25lbnRzL25hdmlnYXRpb24vZGlzcGxheS1tZW51LmpzeCIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQge2Nvbm5lY3R9IGZyb20gJ3JlYWN0LXJlZHV4JztcblxuY29uc3QgVG9wTmF2ID0gZnVuY3Rpb24gKHtxdWVyeXN0cmluZywgc2VhcmNoQnlRdWVyeX0pIHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cImhlYWRlclwiPlxuICAgICAgPGZvcm0gY2xhc3NOYW1lPVwibmF2YmFyLWZvcm0gbmF2YmFyLWxlZnRcIiBvblN1Ym1pdD17c2VhcmNoQnlRdWVyeX0+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzTmFtZT1cImZvcm0tY29udHJvbFwiIHBsYWNlaG9sZGVyPVwiU2VhcmNoXCIgdmFsdWU9e3F1ZXJ5c3RyaW5nfSAvPlxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwic3VibWl0XCIgY2xhc3NOYW1lPVwiYnRuIGJ0bi1kZWZhdWx0IG5hdmJhci1idG5cIiB2YWx1ZT1cIlNlbGVjdFwiIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9mb3JtPlxuICAgIDwvZGl2PlxuICApO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY29ubmVjdCgoKSA9PiAoe30pLCAoKSA9PiAoe30pKShUb3BOYXYpO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9jb21wb25lbnRzL25hdmlnYXRpb24vdG9wLW5hdi5qc3giLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtyZW5kZXJ9IGZyb20gJ3JlYWN0LWRvbSc7XG5pbXBvcnQge2NyZWF0ZVN0b3JlfSBmcm9tICdyZWR1eCc7XG5pbXBvcnQge1Byb3ZpZGVyfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQge0hhc2hSb3V0ZXIgYXMgUm91dGVyLCBTd2l0Y2gsIFJvdXRlfSBmcm9tICdyZWFjdC1yb3V0ZXItZG9tJztcblxuaW1wb3J0IE1haW4gZnJvbSAnLi9jb21wb25lbnRzL21haW4nO1xuaW1wb3J0IE1lbnUgZnJvbSAnLi9jb21wb25lbnRzL25hdmlnYXRpb24vbWVudSc7XG5pbXBvcnQgcmVkdWNlciBmcm9tICcuL3JlZHVjZXJzL21haW4nO1xuXG5yZW5kZXIgKFxuICAoXG4gICAgPFByb3ZpZGVyIHN0b3JlPXtjcmVhdGVTdG9yZShyZWR1Y2VyKX0gPlxuICAgICAgPFJvdXRlcj5cbiAgICAgICAgPFN3aXRjaD5cbiAgICAgICAgICA8Um91dGUgY29tcG9uZW50PXtNZW51fSBwYXRoPVwiL21lbnVcIi8+XG4gICAgICAgICAgPFJvdXRlIGNvbXBvbmVudD17TWFpbn0gcGF0aD1cIi9cIiAvPlxuICAgICAgICA8L1N3aXRjaD5cbiAgICAgIDwvUm91dGVyPlxuICAgIDwvUHJvdmlkZXI+XG4gICksXG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21haW4nKVxuKTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvaW5kZXguanN4IiwiZXhwb3J0IGRlZmF1bHQge1xuICBjdXJyZW50UGF0aDogJycsXG4gIGZpbGVzeXN0ZW06IHtcbiAgICBjb250ZW50czogW1xuICAgICAge1xuICAgICAgICBjb250ZW50czogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvbnRlbnRzOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZW50czogW10sXG4gICAgICAgICAgICAgICAgdGl0bGU6ICcyMDE2LjEyLjE0am91cm5hbC5kb2MnLFxuICAgICAgICAgICAgICAgIGRhdGU6ICcyMDE2LjEyLjE0JyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnZmlsZScsXG4gICAgICAgICAgICAgICAgdmlzaWJpbGl0eToge1xuICAgICAgICAgICAgICAgICAgb3duZXI6IHRydWUsXG4gICAgICAgICAgICAgICAgICBhbm9uOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgIHVzZXJncm91cDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICBzcGVjaWZpY1VzZXI6IHRydWVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBiYWNrZ3JvdW5kSW1hZ2U6ICdmb2xkZXIyLnBuZycsXG4gICAgICAgICAgICB0aXRsZTogJ0ZvbGRlciAyJyxcbiAgICAgICAgICAgIGRhdGU6ICcyMDE2LjEyLjI0JyxcbiAgICAgICAgICAgIHR5cGU6ICdmb2xkZXInLFxuICAgICAgICAgICAgdmlzaWJpbGl0eToge1xuICAgICAgICAgICAgICBvd25lcjogdHJ1ZSxcbiAgICAgICAgICAgICAgYW5vbjogZmFsc2UsXG4gICAgICAgICAgICAgIHVzZXJncm91cDogdHJ1ZSxcbiAgICAgICAgICAgICAgc3BlY2lmaWNVc2VyOiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb250ZW50czogW10sXG4gICAgICAgICAgICB0aXRsZTogJzIwMTYuMTIuMTRqb3VybmFsLmRvYycsXG4gICAgICAgICAgICBkYXRlOiAnMjAxNi4xMi4xNCcsXG4gICAgICAgICAgICB0eXBlOiAnZmlsZScsXG4gICAgICAgICAgICB2aXNpYmlsaXR5OiB7XG4gICAgICAgICAgICAgIG93bmVyOiB0cnVlLFxuICAgICAgICAgICAgICBhbm9uOiBmYWxzZSxcbiAgICAgICAgICAgICAgdXNlcmdyb3VwOiBmYWxzZSxcbiAgICAgICAgICAgICAgc3BlY2lmaWNVc2VyOiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICBiYWNrZ3JvdW5kSW1hZ2U6ICdmb2xkZXIxLnBuZycsXG4gICAgICAgIHRpdGxlOiAnRmluYWwgUGFwZXJzJyxcbiAgICAgICAgZGF0ZTogJzIwMTYuMTIuMjQnLFxuICAgICAgICB0eXBlOiAnZm9sZGVyJyxcbiAgICAgICAgdmlzaWJpbGl0eToge1xuICAgICAgICAgIG93bmVyOiB0cnVlLFxuICAgICAgICAgIGFub246IGZhbHNlLFxuICAgICAgICAgIHVzZXJncm91cDogdHJ1ZSxcbiAgICAgICAgICBzcGVjaWZpY1VzZXI6IHRydWVcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY29udGVudHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb250ZW50czogW10sXG4gICAgICAgICAgICB0aXRsZTogJzIwMTYuMTIuMTRqb3VybmFsLmRvYycsXG4gICAgICAgICAgICBkYXRlOiAnMjAxNi4xMi4xNCcsXG4gICAgICAgICAgICB0eXBlOiAnZmlsZScsXG4gICAgICAgICAgICB2aXNpYmlsaXR5OiB7XG4gICAgICAgICAgICAgIG93bmVyOiB0cnVlLFxuICAgICAgICAgICAgICBhbm9uOiBmYWxzZSxcbiAgICAgICAgICAgICAgdXNlcmdyb3VwOiBmYWxzZSxcbiAgICAgICAgICAgICAgc3BlY2lmaWNVc2VyOiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICBiYWNrZ3JvdW5kSW1hZ2U6ICdmb2xkZXIyLnBuZycsXG4gICAgICAgIHRpdGxlOiAnR3JvdXAgUHJvamVjdHMnLFxuICAgICAgICBkYXRlOiAnMjAxNi4xMi4yNCcsXG4gICAgICAgIHR5cGU6ICdmb2xkZXInLFxuICAgICAgICB2aXNpYmlsaXR5OiB7XG4gICAgICAgICAgb3duZXI6IHRydWUsXG4gICAgICAgICAgYW5vbjogZmFsc2UsXG4gICAgICAgICAgdXNlcmdyb3VwOiB0cnVlLFxuICAgICAgICAgIHNwZWNpZmljVXNlcjogdHJ1ZVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjb250ZW50czogW10sXG4gICAgICAgIGJhY2tncm91bmRJbWFnZTogJ2ZvbGRlcjMucG5nJyxcbiAgICAgICAgdGl0bGU6ICdGYW1pbHkgTWVtb3JpZXMnLFxuICAgICAgICBkYXRlOiAnMjAxNi4xMi4yNCcsXG4gICAgICAgIHR5cGU6ICdmb2xkZXInLFxuICAgICAgICB2aXNpYmlsaXR5OiB7XG4gICAgICAgICAgb3duZXI6IHRydWUsXG4gICAgICAgICAgYW5vbjogZmFsc2UsXG4gICAgICAgICAgdXNlcmdyb3VwOiB0cnVlLFxuICAgICAgICAgIHNwZWNpZmljVXNlcjogdHJ1ZVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjb250ZW50czogW10sXG4gICAgICAgIGJhY2tncm91bmRJbWFnZTogJ2ZvbGRlcjQucG5nJyxcbiAgICAgICAgdGl0bGU6ICdXaW50ZXIgVmFjYXRpb24nLFxuICAgICAgICBkYXRlOiAnMjAxNy4xLjI0JyxcbiAgICAgICAgdHlwZTogJ2ZvbGRlcicsXG4gICAgICAgIHZpc2liaWxpdHk6IHtcbiAgICAgICAgICBvd25lcjogdHJ1ZSxcbiAgICAgICAgICBhbm9uOiBmYWxzZSxcbiAgICAgICAgICB1c2VyZ3JvdXA6IHRydWUsXG4gICAgICAgICAgc3BlY2lmaWNVc2VyOiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNvbnRlbnRzOiBbXSxcbiAgICAgICAgYmFja2dyb3VuZEltYWdlOiAnZm9sZGVyNS5wbmcnLFxuICAgICAgICB0aXRsZTogJ05hdHVyZSBQaWNzJyxcbiAgICAgICAgZGF0ZTogJzIwMTcuMS4yNCcsXG4gICAgICAgIHR5cGU6ICdmb2xkZXInLFxuICAgICAgICB2aXNpYmlsaXR5OiB7XG4gICAgICAgICAgb3duZXI6IHRydWUsXG4gICAgICAgICAgYW5vbjogZmFsc2UsXG4gICAgICAgICAgdXNlcmdyb3VwOiBmYWxzZSxcbiAgICAgICAgICBzcGVjaWZpY1VzZXI6IGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNvbnRlbnRzOiBbXSxcbiAgICAgICAgdGl0bGU6ICdJTUdfMDE0NS5wbmcnLFxuICAgICAgICBkYXRlOiAnMjAxNi4xMi4yNCcsXG4gICAgICAgIHR5cGU6ICdwaWN0dXJlJyxcbiAgICAgICAgdmlzaWJpbGl0eToge1xuICAgICAgICAgIG93bmVyOiB0cnVlLFxuICAgICAgICAgIGFub246IGZhbHNlLFxuICAgICAgICAgIHVzZXJncm91cDogdHJ1ZSxcbiAgICAgICAgICBzcGVjaWZpY1VzZXI6IHRydWVcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY29udGVudHM6IFtdLFxuICAgICAgICB0aXRsZTogJ0lNR18wMTQ2LnBuZycsXG4gICAgICAgIGRhdGU6ICcyMDE2LjEyLjI1JyxcbiAgICAgICAgdHlwZTogJ3BpY3R1cmUnLFxuICAgICAgICB2aXNpYmlsaXR5OiB7XG4gICAgICAgICAgb3duZXI6IHRydWUsXG4gICAgICAgICAgYW5vbjogZmFsc2UsXG4gICAgICAgICAgdXNlcmdyb3VwOiB0cnVlLFxuICAgICAgICAgIHNwZWNpZmljVXNlcjogdHJ1ZVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjb250ZW50czogW10sXG4gICAgICAgIHRpdGxlOiAnSU1HXzAxNDcucG5nJyxcbiAgICAgICAgZGF0ZTogJzIwMTYuMTIuMjUnLFxuICAgICAgICB0eXBlOiAncGljdHVyZScsXG4gICAgICAgIHZpc2liaWxpdHk6IHtcbiAgICAgICAgICBvd25lcjogdHJ1ZSxcbiAgICAgICAgICBhbm9uOiBmYWxzZSxcbiAgICAgICAgICB1c2VyZ3JvdXA6IHRydWUsXG4gICAgICAgICAgc3BlY2lmaWNVc2VyOiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNvbnRlbnRzOiBbXSxcbiAgICAgICAgdGl0bGU6ICdzcXJjaHJpc3RtYXNwcmVzZW50LnBuZycsXG4gICAgICAgIGRhdGU6ICcyMDE2LjEyLjI1JyxcbiAgICAgICAgdHlwZTogJ3BpY3R1cmUnLFxuICAgICAgICB2aXNpYmlsaXR5OiB7XG4gICAgICAgICAgb3duZXI6IHRydWUsXG4gICAgICAgICAgYW5vbjogZmFsc2UsXG4gICAgICAgICAgdXNlcmdyb3VwOiB0cnVlLFxuICAgICAgICAgIHNwZWNpZmljVXNlcjogdHJ1ZVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjb250ZW50czogW10sXG4gICAgICAgIHRpdGxlOiAnc3FyYXdrd2FyZGZhbS5wbmcnLFxuICAgICAgICBkYXRlOiAnMjAxNi4xMi4yNycsXG4gICAgICAgIHR5cGU6ICdwaWN0dXJlJyxcbiAgICAgICAgdmlzaWJpbGl0eToge1xuICAgICAgICAgIG93bmVyOiB0cnVlLFxuICAgICAgICAgIGFub246IGZhbHNlLFxuICAgICAgICAgIHVzZXJncm91cDogdHJ1ZSxcbiAgICAgICAgICBzcGVjaWZpY1VzZXI6IHRydWVcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY29udGVudHM6IFtdLFxuICAgICAgICB0aXRsZTogJ0lNR18wMTUwLnBuZycsXG4gICAgICAgIGRhdGU6ICcyMDE2LjEyLjMwJyxcbiAgICAgICAgdHlwZTogJ3BpY3R1cmUnLFxuICAgICAgICB2aXNpYmlsaXR5OiB7XG4gICAgICAgICAgb3duZXI6IHRydWUsXG4gICAgICAgICAgYW5vbjogZmFsc2UsXG4gICAgICAgICAgdXNlcmdyb3VwOiB0cnVlLFxuICAgICAgICAgIHNwZWNpZmljVXNlcjogdHJ1ZVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjb250ZW50czogW10sXG4gICAgICAgIHRpdGxlOiAnc3FyYmx1ZXN0ZWVsbWFuLnBuZycsXG4gICAgICAgIGRhdGU6ICcyMDE3LjAxLjAyJyxcbiAgICAgICAgdHlwZTogJ3BpY3R1cmUnLFxuICAgICAgICB2aXNpYmlsaXR5OiB7XG4gICAgICAgICAgb3duZXI6IHRydWUsXG4gICAgICAgICAgYW5vbjogZmFsc2UsXG4gICAgICAgICAgdXNlcmdyb3VwOiB0cnVlLFxuICAgICAgICAgIHNwZWNpZmljVXNlcjogdHJ1ZVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjb250ZW50czogW10sXG4gICAgICAgIHRpdGxlOiAnSU1HXzAxNTIucG5nJyxcbiAgICAgICAgZGF0ZTogJzIwMTcuMDEuMDInLFxuICAgICAgICB0eXBlOiAncGljdHVyZScsXG4gICAgICAgIHZpc2liaWxpdHk6IHtcbiAgICAgICAgICBvd25lcjogdHJ1ZSxcbiAgICAgICAgICBhbm9uOiBmYWxzZSxcbiAgICAgICAgICB1c2VyZ3JvdXA6IHRydWUsXG4gICAgICAgICAgc3BlY2lmaWNVc2VyOiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNvbnRlbnRzOiBbXSxcbiAgICAgICAgdGl0bGU6ICdJTUdfMDE1My5wbmcnLFxuICAgICAgICBkYXRlOiAnMjAxNy4wMS4wNicsXG4gICAgICAgIHR5cGU6ICdwaWN0dXJlJyxcbiAgICAgICAgdmlzaWJpbGl0eToge1xuICAgICAgICAgIG93bmVyOiB0cnVlLFxuICAgICAgICAgIGFub246IGZhbHNlLFxuICAgICAgICAgIHVzZXJncm91cDogdHJ1ZSxcbiAgICAgICAgICBzcGVjaWZpY1VzZXI6IHRydWVcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY29udGVudHM6IFtdLFxuICAgICAgICB0aXRsZTogJ3NxcmNocmlzdG1hc3ByZXNlbnQucG5nJyxcbiAgICAgICAgZGF0ZTogJzIwMTcuMDEuMDcnLFxuICAgICAgICB0eXBlOiAncGljdHVyZScsXG4gICAgICAgIHZpc2liaWxpdHk6IHtcbiAgICAgICAgICBvd25lcjogdHJ1ZSxcbiAgICAgICAgICBhbm9uOiBmYWxzZSxcbiAgICAgICAgICB1c2VyZ3JvdXA6IHRydWUsXG4gICAgICAgICAgc3BlY2lmaWNVc2VyOiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNvbnRlbnRzOiBbXSxcbiAgICAgICAgdGl0bGU6ICdJTUdfMDE0OC5wbmcnLFxuICAgICAgICBkYXRlOiAnMjAxNy4wMS4yNScsXG4gICAgICAgIHR5cGU6ICdwaWN0dXJlJyxcbiAgICAgICAgdmlzaWJpbGl0eToge1xuICAgICAgICAgIG93bmVyOiB0cnVlLFxuICAgICAgICAgIGFub246IGZhbHNlLFxuICAgICAgICAgIHVzZXJncm91cDogdHJ1ZSxcbiAgICAgICAgICBzcGVjaWZpY1VzZXI6IHRydWVcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY29udGVudHM6IFtdLFxuICAgICAgICB0aXRsZTogJ3NxcmNvdW50cnlyb2FkLnBuZycsXG4gICAgICAgIGRhdGU6ICcyMDE3LjAxLjI1JyxcbiAgICAgICAgdHlwZTogJ3BpY3R1cmUnLFxuICAgICAgICB2aXNpYmlsaXR5OiB7XG4gICAgICAgICAgb3duZXI6IHRydWUsXG4gICAgICAgICAgYW5vbjogZmFsc2UsXG4gICAgICAgICAgdXNlcmdyb3VwOiB0cnVlLFxuICAgICAgICAgIHNwZWNpZmljVXNlcjogdHJ1ZVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjb250ZW50czogW10sXG4gICAgICAgIHRpdGxlOiAnc3FyZGVwdHN0b3JlLnBuZycsXG4gICAgICAgIGRhdGU6ICcyMDE3LjAyLjAyJyxcbiAgICAgICAgdHlwZTogJ3BpY3R1cmUnLFxuICAgICAgICB2aXNpYmlsaXR5OiB7XG4gICAgICAgICAgb3duZXI6IHRydWUsXG4gICAgICAgICAgYW5vbjogZmFsc2UsXG4gICAgICAgICAgdXNlcmdyb3VwOiB0cnVlLFxuICAgICAgICAgIHNwZWNpZmljVXNlcjogdHJ1ZVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjb250ZW50czogW10sXG4gICAgICAgIHRpdGxlOiAnSU1HXzAxNTgucG5nJyxcbiAgICAgICAgZGF0ZTogJzIwMTcuMDIuMDUnLFxuICAgICAgICB0eXBlOiAncGljdHVyZScsXG4gICAgICAgIHZpc2liaWxpdHk6IHtcbiAgICAgICAgICBvd25lcjogdHJ1ZSxcbiAgICAgICAgICBhbm9uOiBmYWxzZSxcbiAgICAgICAgICB1c2VyZ3JvdXA6IHRydWUsXG4gICAgICAgICAgc3BlY2lmaWNVc2VyOiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNvbnRlbnRzOiBbXSxcbiAgICAgICAgdGl0bGU6ICdJTUdfMDE1OS5wbmcnLFxuICAgICAgICBkYXRlOiAnMjAxNy4wMi4xNCcsXG4gICAgICAgIHR5cGU6ICdwaWN0dXJlJyxcbiAgICAgICAgdmlzaWJpbGl0eToge1xuICAgICAgICAgIG93bmVyOiB0cnVlLFxuICAgICAgICAgIGFub246IGZhbHNlLFxuICAgICAgICAgIHVzZXJncm91cDogdHJ1ZSxcbiAgICAgICAgICBzcGVjaWZpY1VzZXI6IHRydWVcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY29udGVudHM6IFtdLFxuICAgICAgICB0aXRsZTogJ0lNR18wMTYwLnBuZycsXG4gICAgICAgIGRhdGU6ICcyMDE3LjAyLjE0JyxcbiAgICAgICAgdHlwZTogJ3BpY3R1cmUnLFxuICAgICAgICB2aXNpYmlsaXR5OiB7XG4gICAgICAgICAgb3duZXI6IHRydWUsXG4gICAgICAgICAgYW5vbjogZmFsc2UsXG4gICAgICAgICAgdXNlcmdyb3VwOiB0cnVlLFxuICAgICAgICAgIHNwZWNpZmljVXNlcjogdHJ1ZVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjb250ZW50czogW10sXG4gICAgICAgIHRpdGxlOiAnSU1HXzAxNjEucG5nJyxcbiAgICAgICAgZGF0ZTogJzIwMTcuMTIuMTQnLFxuICAgICAgICB0eXBlOiAncGljdHVyZScsXG4gICAgICAgIHZpc2liaWxpdHk6IHtcbiAgICAgICAgICBvd25lcjogdHJ1ZSxcbiAgICAgICAgICBhbm9uOiBmYWxzZSxcbiAgICAgICAgICB1c2VyZ3JvdXA6IHRydWUsXG4gICAgICAgICAgc3BlY2lmaWNVc2VyOiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNvbnRlbnRzOiBbXSxcbiAgICAgICAgdGl0bGU6ICdJTUdfMDE2Mi5wbmcnLFxuICAgICAgICBkYXRlOiAnMjAxNy4wMi4xNCcsXG4gICAgICAgIHR5cGU6ICdwaWN0dXJlJyxcbiAgICAgICAgdmlzaWJpbGl0eToge1xuICAgICAgICAgIG93bmVyOiB0cnVlLFxuICAgICAgICAgIGFub246IGZhbHNlLFxuICAgICAgICAgIHVzZXJncm91cDogdHJ1ZSxcbiAgICAgICAgICBzcGVjaWZpY1VzZXI6IHRydWVcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY29udGVudHM6IFtdLFxuICAgICAgICB0aXRsZTogJ0lNR18wMTYzLnBuZycsXG4gICAgICAgIGRhdGU6ICcyMDE3LjAyLjE0JyxcbiAgICAgICAgdHlwZTogJ3BpY3R1cmUnLFxuICAgICAgICB2aXNpYmlsaXR5OiB7XG4gICAgICAgICAgb3duZXI6IHRydWUsXG4gICAgICAgICAgYW5vbjogZmFsc2UsXG4gICAgICAgICAgdXNlcmdyb3VwOiB0cnVlLFxuICAgICAgICAgIHNwZWNpZmljVXNlcjogdHJ1ZVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjb250ZW50czogW10sXG4gICAgICAgIHRpdGxlOiAnSU1HXzAxNjQucG5nJyxcbiAgICAgICAgZGF0ZTogJzIwMTcuMDIuMTQnLFxuICAgICAgICB0eXBlOiAncGljdHVyZScsXG4gICAgICAgIHZpc2liaWxpdHk6IHtcbiAgICAgICAgICBvd25lcjogdHJ1ZSxcbiAgICAgICAgICBhbm9uOiBmYWxzZSxcbiAgICAgICAgICB1c2VyZ3JvdXA6IHRydWUsXG4gICAgICAgICAgc3BlY2lmaWNVc2VyOiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJhY2tncm91bmRJbWFnZTogJ0lNR18wMTQ5LnBuZycsXG4gICAgICAgIGNvbnRlbnRzOiBbXSxcbiAgICAgICAgdGl0bGU6ICcyMDE2LjEyLjE0am91cm5hbC5kb2MnLFxuICAgICAgICBkYXRlOiAnMjAxNi4xMi4xNCcsXG4gICAgICAgIHR5cGU6ICdmaWxlJyxcbiAgICAgICAgdmlzaWJpbGl0eToge1xuICAgICAgICAgIG93bmVyOiB0cnVlLFxuICAgICAgICAgIGFub246IGZhbHNlLFxuICAgICAgICAgIHVzZXJncm91cDogZmFsc2UsXG4gICAgICAgICAgc3BlY2lmaWNVc2VyOiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJhY2tncm91bmRJbWFnZTogJ0lNR18wMTU0LnBuZycsXG4gICAgICAgIGNvbnRlbnRzOiBbXSxcbiAgICAgICAgdGl0bGU6ICcyMDE2LjEyLjI4am91cm5hbC5kb2MnLFxuICAgICAgICBkYXRlOiAnMjAxNi4xMi4yOCcsXG4gICAgICAgIHR5cGU6ICdmaWxlJyxcbiAgICAgICAgdmlzaWJpbGl0eToge1xuICAgICAgICAgIG93bmVyOiB0cnVlLFxuICAgICAgICAgIGFub246IGZhbHNlLFxuICAgICAgICAgIHVzZXJncm91cDogZmFsc2UsXG4gICAgICAgICAgc3BlY2lmaWNVc2VyOiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJhY2tncm91bmRJbWFnZTogJ0lNR18wMTU1LnBuZycsXG4gICAgICAgIGNvbnRlbnRzOiBbXSxcbiAgICAgICAgdGl0bGU6ICcyMDE3LjEuMWpvdXJuYWwuZG9jJyxcbiAgICAgICAgZGF0ZTogJzIwMTcuMDEuMDEnLFxuICAgICAgICB0eXBlOiAnZmlsZScsXG4gICAgICAgIHZpc2liaWxpdHk6IHtcbiAgICAgICAgICBvd25lcjogdHJ1ZSxcbiAgICAgICAgICBhbm9uOiBmYWxzZSxcbiAgICAgICAgICB1c2VyZ3JvdXA6IGZhbHNlLFxuICAgICAgICAgIHNwZWNpZmljVXNlcjogdHJ1ZVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiYWNrZ3JvdW5kSW1hZ2U6ICdJTUdfMDE0OS5wbmcnLFxuICAgICAgICBjb250ZW50czogW10sXG4gICAgICAgIHRpdGxlOiAnMjAxNy4xLjJqb3VybmFsLmRvYycsXG4gICAgICAgIGRhdGU6ICcyMDE3LjAxLjAyJyxcbiAgICAgICAgdHlwZTogJ2ZpbGUnLFxuICAgICAgICB2aXNpYmlsaXR5OiB7XG4gICAgICAgICAgb3duZXI6IHRydWUsXG4gICAgICAgICAgYW5vbjogZmFsc2UsXG4gICAgICAgICAgdXNlcmdyb3VwOiBmYWxzZSxcbiAgICAgICAgICBzcGVjaWZpY1VzZXI6IHRydWVcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmFja2dyb3VuZEltYWdlOiAnSU1HXzAxNTcucG5nJyxcbiAgICAgICAgY29udGVudHM6IFtdLFxuICAgICAgICB0aXRsZTogJzIwMTcuMS4xMWpvdXJuYWwuZG9jJyxcbiAgICAgICAgZGF0ZTogJzIwMTcuMDEuMTEnLFxuICAgICAgICB0eXBlOiAnZmlsZScsXG4gICAgICAgIHZpc2liaWxpdHk6IHtcbiAgICAgICAgICBvd25lcjogdHJ1ZSxcbiAgICAgICAgICBhbm9uOiBmYWxzZSxcbiAgICAgICAgICB1c2VyZ3JvdXA6IGZhbHNlLFxuICAgICAgICAgIHNwZWNpZmljVXNlcjogdHJ1ZVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiYWNrZ3JvdW5kSW1hZ2U6ICdJTUdfMDE1NC5wbmcnLFxuICAgICAgICBjb250ZW50czogW10sXG4gICAgICAgIHRpdGxlOiAnMjAxNy4xLjE0am91cm5hbC5kb2MnLFxuICAgICAgICBkYXRlOiAnMjAxNy4wMS4xNCcsXG4gICAgICAgIHR5cGU6ICdmaWxlJyxcbiAgICAgICAgdmlzaWJpbGl0eToge1xuICAgICAgICAgIG93bmVyOiB0cnVlLFxuICAgICAgICAgIGFub246IGZhbHNlLFxuICAgICAgICAgIHVzZXJncm91cDogZmFsc2UsXG4gICAgICAgICAgc3BlY2lmaWNVc2VyOiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJhY2tncm91bmRJbWFnZTogJ0lNR18wMTUxLnBuZycsXG4gICAgICAgIGNvbnRlbnRzOiBbXSxcbiAgICAgICAgdGl0bGU6ICcyMDE3LjEuMTVqb3VybmFsLmRvYycsXG4gICAgICAgIGRhdGU6ICcyMDE3LjAxLjE1JyxcbiAgICAgICAgdHlwZTogJ2ZpbGUnLFxuICAgICAgICB2aXNpYmlsaXR5OiB7XG4gICAgICAgICAgb3duZXI6IHRydWUsXG4gICAgICAgICAgYW5vbjogZmFsc2UsXG4gICAgICAgICAgdXNlcmdyb3VwOiBmYWxzZSxcbiAgICAgICAgICBzcGVjaWZpY1VzZXI6IHRydWVcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmFja2dyb3VuZEltYWdlOiAnSU1HXzAxNDkucG5nJyxcbiAgICAgICAgY29udGVudHM6IFtdLFxuICAgICAgICB0aXRsZTogJzIwMTcuMS4xNmpvdXJuYWwuZG9jJyxcbiAgICAgICAgZGF0ZTogJzIwMTcuMDEuMTYnLFxuICAgICAgICB0eXBlOiAnZmlsZScsXG4gICAgICAgIHZpc2liaWxpdHk6IHtcbiAgICAgICAgICBvd25lcjogdHJ1ZSxcbiAgICAgICAgICBhbm9uOiBmYWxzZSxcbiAgICAgICAgICB1c2VyZ3JvdXA6IGZhbHNlLFxuICAgICAgICAgIHNwZWNpZmljVXNlcjogdHJ1ZVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiYWNrZ3JvdW5kSW1hZ2U6ICdJTUdfMDE1NS5wbmcnLFxuICAgICAgICBjb250ZW50czogW10sXG4gICAgICAgIHRpdGxlOiAnZWNvbjQ1N2ZpbmFsbm90ZXMuZG9jJyxcbiAgICAgICAgZGF0ZTogJzIwMTYuMTIuMTYnLFxuICAgICAgICB0eXBlOiAnZmlsZScsXG4gICAgICAgIHZpc2liaWxpdHk6IHtcbiAgICAgICAgICBvd25lcjogdHJ1ZSxcbiAgICAgICAgICBhbm9uOiBmYWxzZSxcbiAgICAgICAgICB1c2VyZ3JvdXA6IHRydWUsXG4gICAgICAgICAgc3BlY2lmaWNVc2VyOiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJhY2tncm91bmRJbWFnZTogJ0lNR18wMTU3LnBuZycsXG4gICAgICAgIGNvbnRlbnRzOiBbXSxcbiAgICAgICAgdGl0bGU6ICdkcmtuaXR6Y2xhc3Nub3Rlcy5kb2MnLFxuICAgICAgICBkYXRlOiAnMjAxNi4xMi4wMScsXG4gICAgICAgIHR5cGU6ICdmaWxlJyxcbiAgICAgICAgdmlzaWJpbGl0eToge1xuICAgICAgICAgIG93bmVyOiB0cnVlLFxuICAgICAgICAgIGFub246IGZhbHNlLFxuICAgICAgICAgIHVzZXJncm91cDogdHJ1ZSxcbiAgICAgICAgICBzcGVjaWZpY1VzZXI6IHRydWVcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmFja2dyb3VuZEltYWdlOiAnSU1HXzAxNTQucG5nJyxcbiAgICAgICAgY29udGVudHM6IFtdLFxuICAgICAgICB0aXRsZTogJ3BzeWNoc3lsbGFidXMuZG9jJyxcbiAgICAgICAgZGF0ZTogJzIwMTcuMDEuMDgnLFxuICAgICAgICB0eXBlOiAnZmlsZScsXG4gICAgICAgIHZpc2liaWxpdHk6IHtcbiAgICAgICAgICBvd25lcjogdHJ1ZSxcbiAgICAgICAgICBhbm9uOiBmYWxzZSxcbiAgICAgICAgICB1c2VyZ3JvdXA6IHRydWUsXG4gICAgICAgICAgc3BlY2lmaWNVc2VyOiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJhY2tncm91bmRJbWFnZTogJ0lNR18wMTU3LnBuZycsXG4gICAgICAgIGNvbnRlbnRzOiBbXSxcbiAgICAgICAgdGl0bGU6ICdnZW9nMTAxc3lsbGFidXMuZG9jJyxcbiAgICAgICAgZGF0ZTogJzIwMTcuMDEuMDYnLFxuICAgICAgICB0eXBlOiAnZmlsZScsXG4gICAgICAgIHZpc2liaWxpdHk6IHtcbiAgICAgICAgICBvd25lcjogdHJ1ZSxcbiAgICAgICAgICBhbm9uOiBmYWxzZSxcbiAgICAgICAgICB1c2VyZ3JvdXA6IHRydWUsXG4gICAgICAgICAgc3BlY2lmaWNVc2VyOiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJhY2tncm91bmRJbWFnZTogJ0lNR18wMTQ5LnBuZycsXG4gICAgICAgIGNvbnRlbnRzOiBbXSxcbiAgICAgICAgdGl0bGU6ICdlY29uNDU4c3lsbGFidXMuZG9jJyxcbiAgICAgICAgZGF0ZTogJzIwMTcuMDEuMDYnLFxuICAgICAgICB0eXBlOiAnZmlsZScsXG4gICAgICAgIHZpc2liaWxpdHk6IHtcbiAgICAgICAgICBvd25lcjogdHJ1ZSxcbiAgICAgICAgICBhbm9uOiBmYWxzZSxcbiAgICAgICAgICB1c2VyZ3JvdXA6IHRydWUsXG4gICAgICAgICAgc3BlY2lmaWNVc2VyOiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJhY2tncm91bmRJbWFnZTogJ0lNR18wMTUxLnBuZycsXG4gICAgICAgIGNvbnRlbnRzOiBbXSxcbiAgICAgICAgdGl0bGU6ICdlY29uNDU4cHJlc2VudGF0aW9ucGxhbi5kb2MnLFxuICAgICAgICBkYXRlOiAnMjAxNy4wMS4xOScsXG4gICAgICAgIHR5cGU6ICdmaWxlJyxcbiAgICAgICAgdmlzaWJpbGl0eToge1xuICAgICAgICAgIG93bmVyOiB0cnVlLFxuICAgICAgICAgIGFub246IGZhbHNlLFxuICAgICAgICAgIHVzZXJncm91cDogdHJ1ZSxcbiAgICAgICAgICBzcGVjaWZpY1VzZXI6IHRydWVcbiAgICAgICAgfVxuICAgICAgfSxcblxuXG4gICAgXSxcbiAgICBjdXJyZW50UGF0aDogJydcbiAgfX07XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zdGF0ZS5qcyJdLCJzb3VyY2VSb290IjoiIn0= \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAgNDg5MWNmNWI1ZThhZTEyNDI2YTciLCJ3ZWJwYWNrOi8vLy4vfi9wcm9jZXNzL2Jyb3dzZXIuanMiLCJ3ZWJwYWNrOi8vLy4vfi9mYmpzL2xpYi9pbnZhcmlhbnQuanMiLCJ3ZWJwYWNrOi8vLy4vfi9mYmpzL2xpYi93YXJuaW5nLmpzIiwid2VicGFjazovLy8uL34vcmVhY3QtZG9tL2xpYi9yZWFjdFByb2RJbnZhcmlhbnQuanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFjdC9yZWFjdC5qcyIsIndlYnBhY2s6Ly8vLi9+L29iamVjdC1hc3NpZ24vaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFjdC1kb20vbGliL1JlYWN0RE9NQ29tcG9uZW50VHJlZS5qcyIsIndlYnBhY2s6Ly8vLi9+L2ZianMvbGliL0V4ZWN1dGlvbkVudmlyb25tZW50LmpzIiwid2VicGFjazovLy8uL34vcHJvcC10eXBlcy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0L2xpYi9SZWFjdENvbXBvbmVudFRyZWVIb29rLmpzIiwid2VicGFjazovLy8uL34vZmJqcy9saWIvZW1wdHlGdW5jdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LWRvbS9saWIvUmVhY3RJbnN0cnVtZW50YXRpb24uanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFjdC1yb3V0ZXIvZXMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFjdC1yZWR1eC9lcy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LWRvbS9saWIvUmVhY3RVcGRhdGVzLmpzIiwid2VicGFjazovLy8uL34vcmVhY3QvbGliL1JlYWN0Q3VycmVudE93bmVyLmpzIiwid2VicGFjazovLy8uL34vcmVhY3QtZG9tL2xpYi9TeW50aGV0aWNFdmVudC5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LWRvbS9saWIvRE9NUHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFjdC1kb20vbGliL1Bvb2xlZENsYXNzLmpzIiwid2VicGFjazovLy8uL34vcmVhY3QvbGliL1JlYWN0RWxlbWVudC5qcyIsIndlYnBhY2s6Ly8vLi9+L3dhcm5pbmcvYnJvd3Nlci5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LWRvbS9saWIvRE9NTGF6eVRyZWUuanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFjdC1kb20vbGliL1JlYWN0UmVjb25jaWxlci5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0L2xpYi9SZWFjdC5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0L2xpYi9yZWFjdFByb2RJbnZhcmlhbnQuanMiLCJ3ZWJwYWNrOi8vLy4vfi9oaXN0b3J5L1BhdGhVdGlscy5qcyIsIndlYnBhY2s6Ly8vLi9+L2ludmFyaWFudC9icm93c2VyLmpzIiwid2VicGFjazovLy8uL34vcmVhY3QtZG9tL2xpYi9FdmVudFBsdWdpbkh1Yi5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LWRvbS9saWIvRXZlbnRQcm9wYWdhdG9ycy5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LWRvbS9saWIvUmVhY3RJbnN0YW5jZU1hcC5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LWRvbS9saWIvU3ludGhldGljVUlFdmVudC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9jb250ZW50L2l0ZW0tbGlzdC5qc3giLCJ3ZWJwYWNrOi8vLy4vfi9mYmpzL2xpYi9lbXB0eU9iamVjdC5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LWRvbS9saWIvRXZlbnRQbHVnaW5SZWdpc3RyeS5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LWRvbS9saWIvUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyLmpzIiwid2VicGFjazovLy8uL34vcmVhY3QtZG9tL2xpYi9TeW50aGV0aWNNb3VzZUV2ZW50LmpzIiwid2VicGFjazovLy8uL34vcmVhY3QtZG9tL2xpYi9UcmFuc2FjdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LWRvbS9saWIvZXNjYXBlVGV4dENvbnRlbnRGb3JCcm93c2VyLmpzIiwid2VicGFjazovLy8uL34vcmVhY3QtZG9tL2xpYi9zZXRJbm5lckhUTUwuanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFjdC9saWIvY2FuRGVmaW5lUHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vLy4vfi9mYmpzL2xpYi9zaGFsbG93RXF1YWwuanMiLCJ3ZWJwYWNrOi8vLy4vfi9oaXN0b3J5L0xvY2F0aW9uVXRpbHMuanMiLCJ3ZWJwYWNrOi8vLy4vfi9oaXN0b3J5L2NyZWF0ZVRyYW5zaXRpb25NYW5hZ2VyLmpzIiwid2VicGFjazovLy8uL34vbG9kYXNoLWVzL2lzUGxhaW5PYmplY3QuanMiLCJ3ZWJwYWNrOi8vLy4vfi9wcm9wLXR5cGVzL2xpYi9SZWFjdFByb3BUeXBlc1NlY3JldC5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LWRvbS9saWIvRE9NQ2hpbGRyZW5PcGVyYXRpb25zLmpzIiwid2VicGFjazovLy8uL34vcmVhY3QtZG9tL2xpYi9ET01OYW1lc3BhY2VzLmpzIiwid2VicGFjazovLy8uL34vcmVhY3QtZG9tL2xpYi9FdmVudFBsdWdpblV0aWxzLmpzIiwid2VicGFjazovLy8uL34vcmVhY3QtZG9tL2xpYi9LZXlFc2NhcGVVdGlscy5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LWRvbS9saWIvTGlua2VkVmFsdWVVdGlscy5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LWRvbS9saWIvUmVhY3RDb21wb25lbnRFbnZpcm9ubWVudC5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LWRvbS9saWIvUmVhY3RFcnJvclV0aWxzLmpzIiwid2VicGFjazovLy8uL34vcmVhY3QtZG9tL2xpYi9SZWFjdFVwZGF0ZVF1ZXVlLmpzIiwid2VicGFjazovLy8uL34vcmVhY3QtZG9tL2xpYi9jcmVhdGVNaWNyb3NvZnRVbnNhZmVMb2NhbEZ1bmN0aW9uLmpzIiwid2VicGFjazovLy8uL34vcmVhY3QtZG9tL2xpYi9nZXRFdmVudENoYXJDb2RlLmpzIiwid2VicGFjazovLy8uL34vcmVhY3QtZG9tL2xpYi9nZXRFdmVudE1vZGlmaWVyU3RhdGUuanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFjdC1kb20vbGliL2dldEV2ZW50VGFyZ2V0LmpzIiwid2VicGFjazovLy8uL34vcmVhY3QtZG9tL2xpYi9pc0V2ZW50U3VwcG9ydGVkLmpzIiwid2VicGFjazovLy8uL34vcmVhY3QtZG9tL2xpYi9zaG91bGRVcGRhdGVSZWFjdENvbXBvbmVudC5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LWRvbS9saWIvdmFsaWRhdGVET01OZXN0aW5nLmpzIiwid2VicGFjazovLy8uL34vcmVhY3QtcmVkdXgvZXMvdXRpbHMvd2FybmluZy5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LXJvdXRlci9lcy9Sb3V0ZXIuanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFjdC1yb3V0ZXIvZXMvbWF0Y2hQYXRoLmpzIiwid2VicGFjazovLy8uL34vcmVhY3QvbGliL2xvd1ByaW9yaXR5V2FybmluZy5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlZHV4L2VzL2luZGV4LmpzIiwid2VicGFjazovLy8uL34vZmJqcy9saWIvRXZlbnRMaXN0ZW5lci5qcyIsIndlYnBhY2s6Ly8vLi9+L2ZianMvbGliL2ZvY3VzTm9kZS5qcyIsIndlYnBhY2s6Ly8vLi9+L2ZianMvbGliL2dldEFjdGl2ZUVsZW1lbnQuanMiLCJ3ZWJwYWNrOi8vLy4vfi9oaXN0b3J5L0RPTVV0aWxzLmpzIiwid2VicGFjazovLy8uL34vaG9pc3Qtbm9uLXJlYWN0LXN0YXRpY3MvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vfi9sb2Rhc2gtZXMvX1N5bWJvbC5qcyIsIndlYnBhY2s6Ly8vLi9+L3Byb3AtdHlwZXMvZmFjdG9yeS5qcyIsIndlYnBhY2s6Ly8vLi9+L3Byb3AtdHlwZXMvZmFjdG9yeVdpdGhUeXBlQ2hlY2tlcnMuanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFjdC1kb20vbGliL0NTU1Byb3BlcnR5LmpzIiwid2VicGFjazovLy8uL34vcmVhY3QtZG9tL2xpYi9DYWxsYmFja1F1ZXVlLmpzIiwid2VicGFjazovLy8uL34vcmVhY3QtZG9tL2xpYi9ET01Qcm9wZXJ0eU9wZXJhdGlvbnMuanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFjdC1kb20vbGliL1JlYWN0RE9NQ29tcG9uZW50RmxhZ3MuanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFjdC1kb20vbGliL1JlYWN0RE9NU2VsZWN0LmpzIiwid2VicGFjazovLy8uL34vcmVhY3QtZG9tL2xpYi9SZWFjdEVtcHR5Q29tcG9uZW50LmpzIiwid2VicGFjazovLy8uL34vcmVhY3QtZG9tL2xpYi9SZWFjdEZlYXR1cmVGbGFncy5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LWRvbS9saWIvUmVhY3RIb3N0Q29tcG9uZW50LmpzIiwid2VicGFjazovLy8uL34vcmVhY3QtZG9tL2xpYi9SZWFjdElucHV0U2VsZWN0aW9uLmpzIiwid2VicGFjazovLy8uL34vcmVhY3QtZG9tL2xpYi9SZWFjdE1vdW50LmpzIiwid2VicGFjazovLy8uL34vcmVhY3QtZG9tL2xpYi9SZWFjdE5vZGVUeXBlcy5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LWRvbS9saWIvUmVhY3RQcm9wVHlwZXNTZWNyZXQuanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFjdC1kb20vbGliL1ZpZXdwb3J0TWV0cmljcy5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LWRvbS9saWIvYWNjdW11bGF0ZUludG8uanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFjdC1kb20vbGliL2ZvckVhY2hBY2N1bXVsYXRlZC5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LWRvbS9saWIvZ2V0SG9zdENvbXBvbmVudEZyb21Db21wb3NpdGUuanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFjdC1kb20vbGliL2dldFRleHRDb250ZW50QWNjZXNzb3IuanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFjdC1kb20vbGliL2lucHV0VmFsdWVUcmFja2luZy5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LWRvbS9saWIvaW5zdGFudGlhdGVSZWFjdENvbXBvbmVudC5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LWRvbS9saWIvaXNUZXh0SW5wdXRFbGVtZW50LmpzIiwid2VicGFjazovLy8uL34vcmVhY3QtZG9tL2xpYi9zZXRUZXh0Q29udGVudC5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LWRvbS9saWIvdHJhdmVyc2VBbGxDaGlsZHJlbi5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LXJlZHV4L2VzL2NvbXBvbmVudHMvY29ubmVjdEFkdmFuY2VkLmpzIiwid2VicGFjazovLy8uL34vcmVhY3QtcmVkdXgvZXMvY29ubmVjdC93cmFwTWFwVG9Qcm9wcy5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LXJlZHV4L2VzL3V0aWxzL1Byb3BUeXBlcy5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LXJlZHV4L2VzL3V0aWxzL3ZlcmlmeVBsYWluT2JqZWN0LmpzIiwid2VicGFjazovLy8uL34vcmVhY3Qtcm91dGVyLWRvbS9lcy9MaW5rLmpzIiwid2VicGFjazovLy8uL34vcmVhY3Qtcm91dGVyL2VzL1JvdXRlLmpzIiwid2VicGFjazovLy8uL34vcmVhY3QvbGliL1JlYWN0QmFzZUNsYXNzZXMuanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFjdC9saWIvUmVhY3RFbGVtZW50U3ltYm9sLmpzIiwid2VicGFjazovLy8uL34vcmVhY3QvbGliL1JlYWN0RWxlbWVudFZhbGlkYXRvci5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0L2xpYi9SZWFjdE5vb3BVcGRhdGVRdWV1ZS5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0L2xpYi9nZXRJdGVyYXRvckZuLmpzIiwid2VicGFjazovLy8uL34vcmVkdXgvZXMvY29tcG9zZS5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlZHV4L2VzL2NyZWF0ZVN0b3JlLmpzIiwid2VicGFjazovLy8uL34vcmVkdXgvZXMvdXRpbHMvd2FybmluZy5qcyIsIndlYnBhY2s6Ly8vKHdlYnBhY2spL2J1aWxkaW4vZ2xvYmFsLmpzIiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL25hdmlnYXRpb24vYm90dG9tLW5hdi5qc3giLCJ3ZWJwYWNrOi8vLy4vc3JjL3V0aWwvZ2V0UGF0aC5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LWRvbS9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LXJvdXRlci1kb20vZXMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvbWFpbi5qc3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvbmF2aWdhdGlvbi9tZW51LmpzeCIsIndlYnBhY2s6Ly8vLi9zcmMvcmVkdWNlcnMvbWFpbi5qcyIsIndlYnBhY2s6Ly8vLi9+L2NyZWF0ZS1yZWFjdC1jbGFzcy9mYWN0b3J5LmpzIiwid2VicGFjazovLy8uL34vZmJqcy9saWIvY2FtZWxpemUuanMiLCJ3ZWJwYWNrOi8vLy4vfi9mYmpzL2xpYi9jYW1lbGl6ZVN0eWxlTmFtZS5qcyIsIndlYnBhY2s6Ly8vLi9+L2ZianMvbGliL2NvbnRhaW5zTm9kZS5qcyIsIndlYnBhY2s6Ly8vLi9+L2ZianMvbGliL2NyZWF0ZUFycmF5RnJvbU1peGVkLmpzIiwid2VicGFjazovLy8uL34vZmJqcy9saWIvY3JlYXRlTm9kZXNGcm9tTWFya3VwLmpzIiwid2VicGFjazovLy8uL34vZmJqcy9saWIvZ2V0TWFya3VwV3JhcC5qcyIsIndlYnBhY2s6Ly8vLi9+L2ZianMvbGliL2dldFVuYm91bmRlZFNjcm9sbFBvc2l0aW9uLmpzIiwid2VicGFjazovLy8uL34vZmJqcy9saWIvaHlwaGVuYXRlLmpzIiwid2VicGFjazovLy8uL34vZmJqcy9saWIvaHlwaGVuYXRlU3R5bGVOYW1lLmpzIiwid2VicGFjazovLy8uL34vZmJqcy9saWIvaXNOb2RlLmpzIiwid2VicGFjazovLy8uL34vZmJqcy9saWIvaXNUZXh0Tm9kZS5qcyIsIndlYnBhY2s6Ly8vLi9+L2ZianMvbGliL21lbW9pemVTdHJpbmdPbmx5LmpzIiwid2VicGFjazovLy8uL34vZmJqcy9saWIvcGVyZm9ybWFuY2UuanMiLCJ3ZWJwYWNrOi8vLy4vfi9mYmpzL2xpYi9wZXJmb3JtYW5jZU5vdy5qcyIsIndlYnBhY2s6Ly8vLi9+L2hpc3RvcnkvY3JlYXRlQnJvd3Nlckhpc3RvcnkuanMiLCJ3ZWJwYWNrOi8vLy4vfi9oaXN0b3J5L2NyZWF0ZUhhc2hIaXN0b3J5LmpzIiwid2VicGFjazovLy8uL34vaGlzdG9yeS9jcmVhdGVNZW1vcnlIaXN0b3J5LmpzIiwid2VicGFjazovLy8uL34vbG9kYXNoLWVzL19iYXNlR2V0VGFnLmpzIiwid2VicGFjazovLy8uL34vbG9kYXNoLWVzL19mcmVlR2xvYmFsLmpzIiwid2VicGFjazovLy8uL34vbG9kYXNoLWVzL19nZXRQcm90b3R5cGUuanMiLCJ3ZWJwYWNrOi8vLy4vfi9sb2Rhc2gtZXMvX2dldFJhd1RhZy5qcyIsIndlYnBhY2s6Ly8vLi9+L2xvZGFzaC1lcy9fb2JqZWN0VG9TdHJpbmcuanMiLCJ3ZWJwYWNrOi8vLy4vfi9sb2Rhc2gtZXMvX292ZXJBcmcuanMiLCJ3ZWJwYWNrOi8vLy4vfi9sb2Rhc2gtZXMvX3Jvb3QuanMiLCJ3ZWJwYWNrOi8vLy4vfi9sb2Rhc2gtZXMvaXNPYmplY3RMaWtlLmpzIiwid2VicGFjazovLy8uL34vcHJvcC10eXBlcy9jaGVja1Byb3BUeXBlcy5qcyIsIndlYnBhY2s6Ly8vLi9+L3Byb3AtdHlwZXMvZmFjdG9yeVdpdGhUaHJvd2luZ1NoaW1zLmpzIiwid2VicGFjazovLy8uL34vcmVhY3QtZG9tL2xpYi9BUklBRE9NUHJvcGVydHlDb25maWcuanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFjdC1kb20vbGliL0F1dG9Gb2N1c1V0aWxzLmpzIiwid2VicGFjazovLy8uL34vcmVhY3QtZG9tL2xpYi9CZWZvcmVJbnB1dEV2ZW50UGx1Z2luLmpzIiwid2VicGFjazovLy8uL34vcmVhY3QtZG9tL2xpYi9DU1NQcm9wZXJ0eU9wZXJhdGlvbnMuanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFjdC1kb20vbGliL0NoYW5nZUV2ZW50UGx1Z2luLmpzIiwid2VicGFjazovLy8uL34vcmVhY3QtZG9tL2xpYi9EYW5nZXIuanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFjdC1kb20vbGliL0RlZmF1bHRFdmVudFBsdWdpbk9yZGVyLmpzIiwid2VicGFjazovLy8uL34vcmVhY3QtZG9tL2xpYi9FbnRlckxlYXZlRXZlbnRQbHVnaW4uanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFjdC1kb20vbGliL0ZhbGxiYWNrQ29tcG9zaXRpb25TdGF0ZS5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LWRvbS9saWIvSFRNTERPTVByb3BlcnR5Q29uZmlnLmpzIiwid2VicGFjazovLy8uL34vcmVhY3QtZG9tL2xpYi9SZWFjdENoaWxkUmVjb25jaWxlci5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LWRvbS9saWIvUmVhY3RDb21wb25lbnRCcm93c2VyRW52aXJvbm1lbnQuanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFjdC1kb20vbGliL1JlYWN0Q29tcG9zaXRlQ29tcG9uZW50LmpzIiwid2VicGFjazovLy8uL34vcmVhY3QtZG9tL2xpYi9SZWFjdERPTS5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LWRvbS9saWIvUmVhY3RET01Db21wb25lbnQuanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFjdC1kb20vbGliL1JlYWN0RE9NQ29udGFpbmVySW5mby5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LWRvbS9saWIvUmVhY3RET01FbXB0eUNvbXBvbmVudC5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LWRvbS9saWIvUmVhY3RET01GZWF0dXJlRmxhZ3MuanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFjdC1kb20vbGliL1JlYWN0RE9NSURPcGVyYXRpb25zLmpzIiwid2VicGFjazovLy8uL34vcmVhY3QtZG9tL2xpYi9SZWFjdERPTUlucHV0LmpzIiwid2VicGFjazovLy8uL34vcmVhY3QtZG9tL2xpYi9SZWFjdERPTUludmFsaWRBUklBSG9vay5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LWRvbS9saWIvUmVhY3RET01OdWxsSW5wdXRWYWx1ZVByb3BIb29rLmpzIiwid2VicGFjazovLy8uL34vcmVhY3QtZG9tL2xpYi9SZWFjdERPTU9wdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LWRvbS9saWIvUmVhY3RET01TZWxlY3Rpb24uanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFjdC1kb20vbGliL1JlYWN0RE9NVGV4dENvbXBvbmVudC5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LWRvbS9saWIvUmVhY3RET01UZXh0YXJlYS5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LWRvbS9saWIvUmVhY3RET01UcmVlVHJhdmVyc2FsLmpzIiwid2VicGFjazovLy8uL34vcmVhY3QtZG9tL2xpYi9SZWFjdERPTVVua25vd25Qcm9wZXJ0eUhvb2suanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFjdC1kb20vbGliL1JlYWN0RGVidWdUb29sLmpzIiwid2VicGFjazovLy8uL34vcmVhY3QtZG9tL2xpYi9SZWFjdERlZmF1bHRCYXRjaGluZ1N0cmF0ZWd5LmpzIiwid2VicGFjazovLy8uL34vcmVhY3QtZG9tL2xpYi9SZWFjdERlZmF1bHRJbmplY3Rpb24uanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFjdC1kb20vbGliL1JlYWN0RWxlbWVudFN5bWJvbC5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LWRvbS9saWIvUmVhY3RFdmVudEVtaXR0ZXJNaXhpbi5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LWRvbS9saWIvUmVhY3RFdmVudExpc3RlbmVyLmpzIiwid2VicGFjazovLy8uL34vcmVhY3QtZG9tL2xpYi9SZWFjdEhvc3RPcGVyYXRpb25IaXN0b3J5SG9vay5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LWRvbS9saWIvUmVhY3RJbmplY3Rpb24uanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFjdC1kb20vbGliL1JlYWN0SW52YWxpZFNldFN0YXRlV2FybmluZ0hvb2suanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFjdC1kb20vbGliL1JlYWN0TWFya3VwQ2hlY2tzdW0uanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFjdC1kb20vbGliL1JlYWN0TXVsdGlDaGlsZC5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LWRvbS9saWIvUmVhY3RPd25lci5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LWRvbS9saWIvUmVhY3RQcm9wVHlwZUxvY2F0aW9uTmFtZXMuanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFjdC1kb20vbGliL1JlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb24uanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFjdC1kb20vbGliL1JlYWN0UmVmLmpzIiwid2VicGFjazovLy8uL34vcmVhY3QtZG9tL2xpYi9SZWFjdFNlcnZlclJlbmRlcmluZ1RyYW5zYWN0aW9uLmpzIiwid2VicGFjazovLy8uL34vcmVhY3QtZG9tL2xpYi9SZWFjdFNlcnZlclVwZGF0ZVF1ZXVlLmpzIiwid2VicGFjazovLy8uL34vcmVhY3QtZG9tL2xpYi9SZWFjdFZlcnNpb24uanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFjdC1kb20vbGliL1NWR0RPTVByb3BlcnR5Q29uZmlnLmpzIiwid2VicGFjazovLy8uL34vcmVhY3QtZG9tL2xpYi9TZWxlY3RFdmVudFBsdWdpbi5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LWRvbS9saWIvU2ltcGxlRXZlbnRQbHVnaW4uanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFjdC1kb20vbGliL1N5bnRoZXRpY0FuaW1hdGlvbkV2ZW50LmpzIiwid2VicGFjazovLy8uL34vcmVhY3QtZG9tL2xpYi9TeW50aGV0aWNDbGlwYm9hcmRFdmVudC5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LWRvbS9saWIvU3ludGhldGljQ29tcG9zaXRpb25FdmVudC5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LWRvbS9saWIvU3ludGhldGljRHJhZ0V2ZW50LmpzIiwid2VicGFjazovLy8uL34vcmVhY3QtZG9tL2xpYi9TeW50aGV0aWNGb2N1c0V2ZW50LmpzIiwid2VicGFjazovLy8uL34vcmVhY3QtZG9tL2xpYi9TeW50aGV0aWNJbnB1dEV2ZW50LmpzIiwid2VicGFjazovLy8uL34vcmVhY3QtZG9tL2xpYi9TeW50aGV0aWNLZXlib2FyZEV2ZW50LmpzIiwid2VicGFjazovLy8uL34vcmVhY3QtZG9tL2xpYi9TeW50aGV0aWNUb3VjaEV2ZW50LmpzIiwid2VicGFjazovLy8uL34vcmVhY3QtZG9tL2xpYi9TeW50aGV0aWNUcmFuc2l0aW9uRXZlbnQuanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFjdC1kb20vbGliL1N5bnRoZXRpY1doZWVsRXZlbnQuanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFjdC1kb20vbGliL2FkbGVyMzIuanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFjdC1kb20vbGliL2NoZWNrUmVhY3RUeXBlU3BlYy5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LWRvbS9saWIvZGFuZ2Vyb3VzU3R5bGVWYWx1ZS5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LWRvbS9saWIvZmluZERPTU5vZGUuanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFjdC1kb20vbGliL2ZsYXR0ZW5DaGlsZHJlbi5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LWRvbS9saWIvZ2V0RXZlbnRLZXkuanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFjdC1kb20vbGliL2dldEl0ZXJhdG9yRm4uanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFjdC1kb20vbGliL2dldE5vZGVGb3JDaGFyYWN0ZXJPZmZzZXQuanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFjdC1kb20vbGliL2dldFZlbmRvclByZWZpeGVkRXZlbnROYW1lLmpzIiwid2VicGFjazovLy8uL34vcmVhY3QtZG9tL2xpYi9xdW90ZUF0dHJpYnV0ZVZhbHVlRm9yQnJvd3Nlci5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LWRvbS9saWIvcmVuZGVyU3VidHJlZUludG9Db250YWluZXIuanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFjdC1maWxlLWlucHV0L2xpYi9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LXJlZHV4L2VzL2NvbXBvbmVudHMvUHJvdmlkZXIuanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFjdC1yZWR1eC9lcy9jb25uZWN0L2Nvbm5lY3QuanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFjdC1yZWR1eC9lcy9jb25uZWN0L21hcERpc3BhdGNoVG9Qcm9wcy5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LXJlZHV4L2VzL2Nvbm5lY3QvbWFwU3RhdGVUb1Byb3BzLmpzIiwid2VicGFjazovLy8uL34vcmVhY3QtcmVkdXgvZXMvY29ubmVjdC9tZXJnZVByb3BzLmpzIiwid2VicGFjazovLy8uL34vcmVhY3QtcmVkdXgvZXMvY29ubmVjdC9zZWxlY3RvckZhY3RvcnkuanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFjdC1yZWR1eC9lcy9jb25uZWN0L3ZlcmlmeVN1YnNlbGVjdG9ycy5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LXJlZHV4L2VzL3V0aWxzL1N1YnNjcmlwdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LXJlZHV4L2VzL3V0aWxzL3NoYWxsb3dFcXVhbC5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LXJvdXRlci1kb20vZXMvQnJvd3NlclJvdXRlci5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LXJvdXRlci1kb20vZXMvSGFzaFJvdXRlci5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LXJvdXRlci1kb20vZXMvTWVtb3J5Um91dGVyLmpzIiwid2VicGFjazovLy8uL34vcmVhY3Qtcm91dGVyLWRvbS9lcy9OYXZMaW5rLmpzIiwid2VicGFjazovLy8uL34vcmVhY3Qtcm91dGVyLWRvbS9lcy9Qcm9tcHQuanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFjdC1yb3V0ZXItZG9tL2VzL1JlZGlyZWN0LmpzIiwid2VicGFjazovLy8uL34vcmVhY3Qtcm91dGVyLWRvbS9lcy9Sb3V0ZS5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LXJvdXRlci1kb20vZXMvUm91dGVyLmpzIiwid2VicGFjazovLy8uL34vcmVhY3Qtcm91dGVyLWRvbS9lcy9TdGF0aWNSb3V0ZXIuanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFjdC1yb3V0ZXItZG9tL2VzL1N3aXRjaC5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LXJvdXRlci1kb20vZXMvbWF0Y2hQYXRoLmpzIiwid2VicGFjazovLy8uL34vcmVhY3Qtcm91dGVyLWRvbS9lcy93aXRoUm91dGVyLmpzIiwid2VicGFjazovLy8uL34vcmVhY3Qtcm91dGVyL2VzL01lbW9yeVJvdXRlci5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LXJvdXRlci9lcy9Qcm9tcHQuanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFjdC1yb3V0ZXIvZXMvUmVkaXJlY3QuanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFjdC1yb3V0ZXIvZXMvU3RhdGljUm91dGVyLmpzIiwid2VicGFjazovLy8uL34vcmVhY3Qtcm91dGVyL2VzL1N3aXRjaC5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LXJvdXRlci9lcy93aXRoUm91dGVyLmpzIiwid2VicGFjazovLy8uL34vcmVhY3Qtcm91dGVyL34vaXNhcnJheS9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0LXJvdXRlci9+L3BhdGgtdG8tcmVnZXhwL2luZGV4LmpzIiwid2VicGFjazovLy8uL34vcmVhY3QvbGliL0tleUVzY2FwZVV0aWxzLmpzIiwid2VicGFjazovLy8uL34vcmVhY3QvbGliL1Bvb2xlZENsYXNzLmpzIiwid2VicGFjazovLy8uL34vcmVhY3QvbGliL1JlYWN0Q2hpbGRyZW4uanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFjdC9saWIvUmVhY3RET01GYWN0b3JpZXMuanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFjdC9saWIvUmVhY3RQcm9wVHlwZUxvY2F0aW9uTmFtZXMuanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFjdC9saWIvUmVhY3RQcm9wVHlwZXMuanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFjdC9saWIvUmVhY3RQcm9wVHlwZXNTZWNyZXQuanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFjdC9saWIvUmVhY3RWZXJzaW9uLmpzIiwid2VicGFjazovLy8uL34vcmVhY3QvbGliL2NoZWNrUmVhY3RUeXBlU3BlYy5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0L2xpYi9jcmVhdGVDbGFzcy5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0L2xpYi9nZXROZXh0RGVidWdJRC5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlYWN0L2xpYi9vbmx5Q2hpbGQuanMiLCJ3ZWJwYWNrOi8vLy4vfi9yZWFjdC9saWIvdHJhdmVyc2VBbGxDaGlsZHJlbi5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlZHV4L2VzL2FwcGx5TWlkZGxld2FyZS5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlZHV4L2VzL2JpbmRBY3Rpb25DcmVhdG9ycy5qcyIsIndlYnBhY2s6Ly8vLi9+L3JlZHV4L2VzL2NvbWJpbmVSZWR1Y2Vycy5qcyIsIndlYnBhY2s6Ly8vLi9+L3Jlc29sdmUtcGF0aG5hbWUvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vfi9zeW1ib2wtb2JzZXJ2YWJsZS9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9+L3N5bWJvbC1vYnNlcnZhYmxlL2xpYi9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9+L3N5bWJvbC1vYnNlcnZhYmxlL2xpYi9wb255ZmlsbC5qcyIsIndlYnBhY2s6Ly8vLi9+L3ZhbHVlLWVxdWFsL2luZGV4LmpzIiwid2VicGFjazovLy8od2VicGFjaykvYnVpbGRpbi9tb2R1bGUuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvY29udGVudC9maWxlLWxpc3QuanN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL2NvbnRlbnQvZm9sZGVyLWxpc3QuanN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL2NvbnRlbnQvaXRlbS5qc3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvY29udGVudC9tdXNpYy1saXN0LmpzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9jb250ZW50L3Bob3RvLWxpc3QuanN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL2NvbnRlbnQvc2hhcmVkLWxpc3QuanN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL25hdmlnYXRpb24vYnJlYWRjcnVtYnMuanN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL25hdmlnYXRpb24vZGlzcGxheS1tZW51LmpzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9uYXZpZ2F0aW9uL3RvcC1uYXYuanN4Iiwid2VicGFjazovLy8uL3NyYy9pbmRleC5qc3giLCJ3ZWJwYWNrOi8vLy4vc3RhdGUuanMiXSwibmFtZXMiOlsicHJvY2VzcyIsIm1vZHVsZSIsImV4cG9ydHMiLCJjYWNoZWRTZXRUaW1lb3V0IiwiY2FjaGVkQ2xlYXJUaW1lb3V0IiwiZGVmYXVsdFNldFRpbW91dCIsIkVycm9yIiwiZGVmYXVsdENsZWFyVGltZW91dCIsInNldFRpbWVvdXQiLCJlIiwiY2xlYXJUaW1lb3V0IiwicnVuVGltZW91dCIsImZ1biIsImNhbGwiLCJydW5DbGVhclRpbWVvdXQiLCJtYXJrZXIiLCJxdWV1ZSIsImRyYWluaW5nIiwiY3VycmVudFF1ZXVlIiwicXVldWVJbmRleCIsImNsZWFuVXBOZXh0VGljayIsImxlbmd0aCIsImNvbmNhdCIsImRyYWluUXVldWUiLCJ0aW1lb3V0IiwibGVuIiwicnVuIiwibmV4dFRpY2siLCJhcmdzIiwiQXJyYXkiLCJhcmd1bWVudHMiLCJpIiwicHVzaCIsIkl0ZW0iLCJhcnJheSIsInByb3RvdHlwZSIsImFwcGx5IiwidGl0bGUiLCJicm93c2VyIiwiZW52IiwiYXJndiIsInZlcnNpb24iLCJ2ZXJzaW9ucyIsIm5vb3AiLCJvbiIsImFkZExpc3RlbmVyIiwib25jZSIsIm9mZiIsInJlbW92ZUxpc3RlbmVyIiwicmVtb3ZlQWxsTGlzdGVuZXJzIiwiZW1pdCIsInByZXBlbmRMaXN0ZW5lciIsInByZXBlbmRPbmNlTGlzdGVuZXIiLCJsaXN0ZW5lcnMiLCJuYW1lIiwiYmluZGluZyIsImN3ZCIsImNoZGlyIiwiZGlyIiwidW1hc2siLCJ2YWxpZGF0ZUZvcm1hdCIsImZvcm1hdCIsIk5PREVfRU5WIiwidW5kZWZpbmVkIiwiaW52YXJpYW50IiwiY29uZGl0aW9uIiwiYSIsImIiLCJjIiwiZCIsImYiLCJlcnJvciIsImFyZ0luZGV4IiwicmVwbGFjZSIsImZyYW1lc1RvUG9wIiwiZW1wdHlGdW5jdGlvbiIsInJlcXVpcmUiLCJ3YXJuaW5nIiwicHJpbnRXYXJuaW5nIiwiX2xlbiIsIl9rZXkiLCJtZXNzYWdlIiwiY29uc29sZSIsIngiLCJpbmRleE9mIiwiX2xlbjIiLCJfa2V5MiIsInJlYWN0UHJvZEludmFyaWFudCIsImNvZGUiLCJhcmdDb3VudCIsImFyZ0lkeCIsImVuY29kZVVSSUNvbXBvbmVudCIsImdldE93blByb3BlcnR5U3ltYm9scyIsIk9iamVjdCIsImhhc093blByb3BlcnR5IiwicHJvcElzRW51bWVyYWJsZSIsInByb3BlcnR5SXNFbnVtZXJhYmxlIiwidG9PYmplY3QiLCJ2YWwiLCJUeXBlRXJyb3IiLCJzaG91bGRVc2VOYXRpdmUiLCJhc3NpZ24iLCJ0ZXN0MSIsIlN0cmluZyIsImdldE93blByb3BlcnR5TmFtZXMiLCJ0ZXN0MiIsImZyb21DaGFyQ29kZSIsIm9yZGVyMiIsIm1hcCIsIm4iLCJqb2luIiwidGVzdDMiLCJzcGxpdCIsImZvckVhY2giLCJsZXR0ZXIiLCJrZXlzIiwiZXJyIiwidGFyZ2V0Iiwic291cmNlIiwiZnJvbSIsInRvIiwic3ltYm9scyIsInMiLCJrZXkiLCJfcHJvZEludmFyaWFudCIsIkRPTVByb3BlcnR5IiwiUmVhY3RET01Db21wb25lbnRGbGFncyIsIkFUVFJfTkFNRSIsIklEX0FUVFJJQlVURV9OQU1FIiwiRmxhZ3MiLCJpbnRlcm5hbEluc3RhbmNlS2V5IiwiTWF0aCIsInJhbmRvbSIsInRvU3RyaW5nIiwic2xpY2UiLCJzaG91bGRQcmVjYWNoZU5vZGUiLCJub2RlIiwibm9kZUlEIiwibm9kZVR5cGUiLCJnZXRBdHRyaWJ1dGUiLCJub2RlVmFsdWUiLCJnZXRSZW5kZXJlZEhvc3RPclRleHRGcm9tQ29tcG9uZW50IiwiY29tcG9uZW50IiwicmVuZGVyZWQiLCJfcmVuZGVyZWRDb21wb25lbnQiLCJwcmVjYWNoZU5vZGUiLCJpbnN0IiwiaG9zdEluc3QiLCJfaG9zdE5vZGUiLCJ1bmNhY2hlTm9kZSIsInByZWNhY2hlQ2hpbGROb2RlcyIsIl9mbGFncyIsImhhc0NhY2hlZENoaWxkTm9kZXMiLCJjaGlsZHJlbiIsIl9yZW5kZXJlZENoaWxkcmVuIiwiY2hpbGROb2RlIiwiZmlyc3RDaGlsZCIsIm91dGVyIiwiY2hpbGRJbnN0IiwiY2hpbGRJRCIsIl9kb21JRCIsIm5leHRTaWJsaW5nIiwiZ2V0Q2xvc2VzdEluc3RhbmNlRnJvbU5vZGUiLCJwYXJlbnRzIiwicGFyZW50Tm9kZSIsImNsb3Nlc3QiLCJwb3AiLCJnZXRJbnN0YW5jZUZyb21Ob2RlIiwiZ2V0Tm9kZUZyb21JbnN0YW5jZSIsIl9ob3N0UGFyZW50IiwiUmVhY3RET01Db21wb25lbnRUcmVlIiwiY2FuVXNlRE9NIiwid2luZG93IiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50IiwiRXhlY3V0aW9uRW52aXJvbm1lbnQiLCJjYW5Vc2VXb3JrZXJzIiwiV29ya2VyIiwiY2FuVXNlRXZlbnRMaXN0ZW5lcnMiLCJhZGRFdmVudExpc3RlbmVyIiwiYXR0YWNoRXZlbnQiLCJjYW5Vc2VWaWV3cG9ydCIsInNjcmVlbiIsImlzSW5Xb3JrZXIiLCJSRUFDVF9FTEVNRU5UX1RZUEUiLCJTeW1ib2wiLCJmb3IiLCJpc1ZhbGlkRWxlbWVudCIsIm9iamVjdCIsIiQkdHlwZW9mIiwidGhyb3dPbkRpcmVjdEFjY2VzcyIsIlJlYWN0Q3VycmVudE93bmVyIiwiaXNOYXRpdmUiLCJmbiIsImZ1bmNUb1N0cmluZyIsIkZ1bmN0aW9uIiwicmVJc05hdGl2ZSIsIlJlZ0V4cCIsInRlc3QiLCJjYW5Vc2VDb2xsZWN0aW9ucyIsIk1hcCIsIlNldCIsInNldEl0ZW0iLCJnZXRJdGVtIiwicmVtb3ZlSXRlbSIsImdldEl0ZW1JRHMiLCJhZGRSb290IiwicmVtb3ZlUm9vdCIsImdldFJvb3RJRHMiLCJpdGVtTWFwIiwicm9vdElEU2V0IiwiaWQiLCJpdGVtIiwic2V0IiwiZ2V0IiwiYWRkIiwiaXRlbUJ5S2V5Iiwicm9vdEJ5S2V5IiwiZ2V0S2V5RnJvbUlEIiwiZ2V0SURGcm9tS2V5IiwicGFyc2VJbnQiLCJzdWJzdHIiLCJ1bm1vdW50ZWRJRHMiLCJwdXJnZURlZXAiLCJjaGlsZElEcyIsImRlc2NyaWJlQ29tcG9uZW50RnJhbWUiLCJvd25lck5hbWUiLCJmaWxlTmFtZSIsImxpbmVOdW1iZXIiLCJnZXREaXNwbGF5TmFtZSIsImVsZW1lbnQiLCJ0eXBlIiwiZGlzcGxheU5hbWUiLCJkZXNjcmliZUlEIiwiUmVhY3RDb21wb25lbnRUcmVlSG9vayIsImdldEVsZW1lbnQiLCJvd25lcklEIiwiZ2V0T3duZXJJRCIsIl9zb3VyY2UiLCJvblNldENoaWxkcmVuIiwibmV4dENoaWxkSURzIiwibmV4dENoaWxkSUQiLCJuZXh0Q2hpbGQiLCJpc01vdW50ZWQiLCJwYXJlbnRJRCIsIm9uQmVmb3JlTW91bnRDb21wb25lbnQiLCJ0ZXh0IiwidXBkYXRlQ291bnQiLCJvbkJlZm9yZVVwZGF0ZUNvbXBvbmVudCIsIm9uTW91bnRDb21wb25lbnQiLCJpc1Jvb3QiLCJvblVwZGF0ZUNvbXBvbmVudCIsIm9uVW5tb3VudENvbXBvbmVudCIsInB1cmdlVW5tb3VudGVkQ29tcG9uZW50cyIsIl9wcmV2ZW50UHVyZ2luZyIsImdldEN1cnJlbnRTdGFja0FkZGVuZHVtIiwidG9wRWxlbWVudCIsImluZm8iLCJvd25lciIsIl9vd25lciIsImdldE5hbWUiLCJjdXJyZW50T3duZXIiLCJjdXJyZW50IiwiX2RlYnVnSUQiLCJnZXRTdGFja0FkZGVuZHVtQnlJRCIsImdldFBhcmVudElEIiwiZ2V0Q2hpbGRJRHMiLCJnZXRTb3VyY2UiLCJnZXRUZXh0IiwiZ2V0VXBkYXRlQ291bnQiLCJnZXRSZWdpc3RlcmVkSURzIiwicHVzaE5vblN0YW5kYXJkV2FybmluZ1N0YWNrIiwiaXNDcmVhdGluZ0VsZW1lbnQiLCJjdXJyZW50U291cmNlIiwicmVhY3RTdGFjayIsInN0YWNrIiwicG9wTm9uU3RhbmRhcmRXYXJuaW5nU3RhY2siLCJyZWFjdFN0YWNrRW5kIiwibWFrZUVtcHR5RnVuY3Rpb24iLCJhcmciLCJ0aGF0UmV0dXJucyIsInRoYXRSZXR1cm5zRmFsc2UiLCJ0aGF0UmV0dXJuc1RydWUiLCJ0aGF0UmV0dXJuc051bGwiLCJ0aGF0UmV0dXJuc1RoaXMiLCJ0aGF0UmV0dXJuc0FyZ3VtZW50IiwiZGVidWdUb29sIiwiUmVhY3REZWJ1Z1Rvb2wiLCJNZW1vcnlSb3V0ZXIiLCJQcm9tcHQiLCJSZWRpcmVjdCIsIlJvdXRlIiwiUm91dGVyIiwiU3RhdGljUm91dGVyIiwiU3dpdGNoIiwibWF0Y2hQYXRoIiwid2l0aFJvdXRlciIsIlByb3ZpZGVyIiwiY3JlYXRlUHJvdmlkZXIiLCJjb25uZWN0QWR2YW5jZWQiLCJjb25uZWN0IiwiX2Fzc2lnbiIsIkNhbGxiYWNrUXVldWUiLCJQb29sZWRDbGFzcyIsIlJlYWN0RmVhdHVyZUZsYWdzIiwiUmVhY3RSZWNvbmNpbGVyIiwiVHJhbnNhY3Rpb24iLCJkaXJ0eUNvbXBvbmVudHMiLCJ1cGRhdGVCYXRjaE51bWJlciIsImFzYXBDYWxsYmFja1F1ZXVlIiwiZ2V0UG9vbGVkIiwiYXNhcEVucXVldWVkIiwiYmF0Y2hpbmdTdHJhdGVneSIsImVuc3VyZUluamVjdGVkIiwiUmVhY3RVcGRhdGVzIiwiUmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvbiIsIk5FU1RFRF9VUERBVEVTIiwiaW5pdGlhbGl6ZSIsImRpcnR5Q29tcG9uZW50c0xlbmd0aCIsImNsb3NlIiwic3BsaWNlIiwiZmx1c2hCYXRjaGVkVXBkYXRlcyIsIlVQREFURV9RVUVVRUlORyIsImNhbGxiYWNrUXVldWUiLCJyZXNldCIsIm5vdGlmeUFsbCIsIlRSQU5TQUNUSU9OX1dSQVBQRVJTIiwiUmVhY3RVcGRhdGVzRmx1c2hUcmFuc2FjdGlvbiIsInJlaW5pdGlhbGl6ZVRyYW5zYWN0aW9uIiwicmVjb25jaWxlVHJhbnNhY3Rpb24iLCJnZXRUcmFuc2FjdGlvbldyYXBwZXJzIiwiZGVzdHJ1Y3RvciIsInJlbGVhc2UiLCJwZXJmb3JtIiwibWV0aG9kIiwic2NvcGUiLCJhZGRQb29saW5nVG8iLCJiYXRjaGVkVXBkYXRlcyIsImNhbGxiYWNrIiwibW91bnRPcmRlckNvbXBhcmF0b3IiLCJjMSIsImMyIiwiX21vdW50T3JkZXIiLCJydW5CYXRjaGVkVXBkYXRlcyIsInRyYW5zYWN0aW9uIiwic29ydCIsImNhbGxiYWNrcyIsIl9wZW5kaW5nQ2FsbGJhY2tzIiwibWFya2VyTmFtZSIsImxvZ1RvcExldmVsUmVuZGVycyIsIm5hbWVkQ29tcG9uZW50IiwiX2N1cnJlbnRFbGVtZW50IiwiaXNSZWFjdFRvcExldmVsV3JhcHBlciIsInRpbWUiLCJwZXJmb3JtVXBkYXRlSWZOZWNlc3NhcnkiLCJ0aW1lRW5kIiwiaiIsImVucXVldWUiLCJnZXRQdWJsaWNJbnN0YW5jZSIsImVucXVldWVVcGRhdGUiLCJpc0JhdGNoaW5nVXBkYXRlcyIsIl91cGRhdGVCYXRjaE51bWJlciIsImFzYXAiLCJjb250ZXh0IiwiUmVhY3RVcGRhdGVzSW5qZWN0aW9uIiwiaW5qZWN0UmVjb25jaWxlVHJhbnNhY3Rpb24iLCJSZWNvbmNpbGVUcmFuc2FjdGlvbiIsImluamVjdEJhdGNoaW5nU3RyYXRlZ3kiLCJfYmF0Y2hpbmdTdHJhdGVneSIsImluamVjdGlvbiIsImRpZFdhcm5Gb3JBZGRlZE5ld1Byb3BlcnR5IiwiaXNQcm94eVN1cHBvcnRlZCIsIlByb3h5Iiwic2hvdWxkQmVSZWxlYXNlZFByb3BlcnRpZXMiLCJFdmVudEludGVyZmFjZSIsImN1cnJlbnRUYXJnZXQiLCJldmVudFBoYXNlIiwiYnViYmxlcyIsImNhbmNlbGFibGUiLCJ0aW1lU3RhbXAiLCJldmVudCIsIkRhdGUiLCJub3ciLCJkZWZhdWx0UHJldmVudGVkIiwiaXNUcnVzdGVkIiwiU3ludGhldGljRXZlbnQiLCJkaXNwYXRjaENvbmZpZyIsInRhcmdldEluc3QiLCJuYXRpdmVFdmVudCIsIm5hdGl2ZUV2ZW50VGFyZ2V0IiwicHJldmVudERlZmF1bHQiLCJzdG9wUHJvcGFnYXRpb24iLCJfdGFyZ2V0SW5zdCIsIkludGVyZmFjZSIsImNvbnN0cnVjdG9yIiwicHJvcE5hbWUiLCJub3JtYWxpemUiLCJyZXR1cm5WYWx1ZSIsImlzRGVmYXVsdFByZXZlbnRlZCIsImlzUHJvcGFnYXRpb25TdG9wcGVkIiwiY2FuY2VsQnViYmxlIiwicGVyc2lzdCIsImlzUGVyc2lzdGVudCIsImRlZmluZVByb3BlcnR5IiwiZ2V0UG9vbGVkV2FybmluZ1Byb3BlcnR5RGVmaW5pdGlvbiIsImNvbnN0cnVjdCIsImNyZWF0ZSIsInRoYXQiLCJwcm9wIiwidmFsdWUiLCJhdWdtZW50Q2xhc3MiLCJDbGFzcyIsIlN1cGVyIiwiRSIsImZvdXJBcmd1bWVudFBvb2xlciIsImdldFZhbCIsImlzRnVuY3Rpb24iLCJjb25maWd1cmFibGUiLCJhY3Rpb24iLCJ3YXJuIiwicmVzdWx0Iiwid2FybmluZ0NvbmRpdGlvbiIsImNoZWNrTWFzayIsImJpdG1hc2siLCJET01Qcm9wZXJ0eUluamVjdGlvbiIsIk1VU1RfVVNFX1BST1BFUlRZIiwiSEFTX0JPT0xFQU5fVkFMVUUiLCJIQVNfTlVNRVJJQ19WQUxVRSIsIkhBU19QT1NJVElWRV9OVU1FUklDX1ZBTFVFIiwiSEFTX09WRVJMT0FERURfQk9PTEVBTl9WQUxVRSIsImluamVjdERPTVByb3BlcnR5Q29uZmlnIiwiZG9tUHJvcGVydHlDb25maWciLCJJbmplY3Rpb24iLCJQcm9wZXJ0aWVzIiwiRE9NQXR0cmlidXRlTmFtZXNwYWNlcyIsIkRPTUF0dHJpYnV0ZU5hbWVzIiwiRE9NUHJvcGVydHlOYW1lcyIsIkRPTU11dGF0aW9uTWV0aG9kcyIsImlzQ3VzdG9tQXR0cmlidXRlIiwiX2lzQ3VzdG9tQXR0cmlidXRlRnVuY3Rpb25zIiwicHJvcGVydGllcyIsImxvd2VyQ2FzZWQiLCJ0b0xvd2VyQ2FzZSIsInByb3BDb25maWciLCJwcm9wZXJ0eUluZm8iLCJhdHRyaWJ1dGVOYW1lIiwiYXR0cmlidXRlTmFtZXNwYWNlIiwicHJvcGVydHlOYW1lIiwibXV0YXRpb25NZXRob2QiLCJtdXN0VXNlUHJvcGVydHkiLCJoYXNCb29sZWFuVmFsdWUiLCJoYXNOdW1lcmljVmFsdWUiLCJoYXNQb3NpdGl2ZU51bWVyaWNWYWx1ZSIsImhhc092ZXJsb2FkZWRCb29sZWFuVmFsdWUiLCJnZXRQb3NzaWJsZVN0YW5kYXJkTmFtZSIsIkFUVFJJQlVURV9OQU1FX1NUQVJUX0NIQVIiLCJST09UX0FUVFJJQlVURV9OQU1FIiwiQVRUUklCVVRFX05BTUVfQ0hBUiIsImF1dG9mb2N1cyIsImlzQ3VzdG9tQXR0cmlidXRlRm4iLCJvbmVBcmd1bWVudFBvb2xlciIsImNvcHlGaWVsZHNGcm9tIiwiS2xhc3MiLCJpbnN0YW5jZVBvb2wiLCJpbnN0YW5jZSIsInR3b0FyZ3VtZW50UG9vbGVyIiwiYTEiLCJhMiIsInRocmVlQXJndW1lbnRQb29sZXIiLCJhMyIsImE0Iiwic3RhbmRhcmRSZWxlYXNlciIsInBvb2xTaXplIiwiREVGQVVMVF9QT09MX1NJWkUiLCJERUZBVUxUX1BPT0xFUiIsIkNvcHlDb25zdHJ1Y3RvciIsInBvb2xlciIsIk5ld0tsYXNzIiwiY2FuRGVmaW5lUHJvcGVydHkiLCJSRVNFUlZFRF9QUk9QUyIsInJlZiIsIl9fc2VsZiIsIl9fc291cmNlIiwic3BlY2lhbFByb3BLZXlXYXJuaW5nU2hvd24iLCJzcGVjaWFsUHJvcFJlZldhcm5pbmdTaG93biIsImhhc1ZhbGlkUmVmIiwiY29uZmlnIiwiZ2V0dGVyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiaXNSZWFjdFdhcm5pbmciLCJoYXNWYWxpZEtleSIsImRlZmluZUtleVByb3BXYXJuaW5nR2V0dGVyIiwicHJvcHMiLCJ3YXJuQWJvdXRBY2Nlc3NpbmdLZXkiLCJkZWZpbmVSZWZQcm9wV2FybmluZ0dldHRlciIsIndhcm5BYm91dEFjY2Vzc2luZ1JlZiIsIlJlYWN0RWxlbWVudCIsInNlbGYiLCJfc3RvcmUiLCJlbnVtZXJhYmxlIiwid3JpdGFibGUiLCJ2YWxpZGF0ZWQiLCJfc2VsZiIsImZyZWV6ZSIsImNoaWxkcmVuTGVuZ3RoIiwiY2hpbGRBcnJheSIsImRlZmF1bHRQcm9wcyIsImNyZWF0ZUZhY3RvcnkiLCJmYWN0b3J5IiwiYmluZCIsImNsb25lQW5kUmVwbGFjZUtleSIsIm9sZEVsZW1lbnQiLCJuZXdLZXkiLCJuZXdFbGVtZW50IiwiY2xvbmVFbGVtZW50IiwiRE9NTmFtZXNwYWNlcyIsInNldElubmVySFRNTCIsImNyZWF0ZU1pY3Jvc29mdFVuc2FmZUxvY2FsRnVuY3Rpb24iLCJzZXRUZXh0Q29udGVudCIsIkVMRU1FTlRfTk9ERV9UWVBFIiwiRE9DVU1FTlRfRlJBR01FTlRfTk9ERV9UWVBFIiwiZW5hYmxlTGF6eSIsImRvY3VtZW50TW9kZSIsIm5hdmlnYXRvciIsInVzZXJBZ2VudCIsImluc2VydFRyZWVDaGlsZHJlbiIsInRyZWUiLCJpbnNlcnRUcmVlQmVmb3JlIiwiaHRtbCIsInJlZmVyZW5jZU5vZGUiLCJub2RlTmFtZSIsIm5hbWVzcGFjZVVSSSIsImluc2VydEJlZm9yZSIsInJlcGxhY2VDaGlsZFdpdGhUcmVlIiwib2xkTm9kZSIsIm5ld1RyZWUiLCJyZXBsYWNlQ2hpbGQiLCJxdWV1ZUNoaWxkIiwicGFyZW50VHJlZSIsImNoaWxkVHJlZSIsImFwcGVuZENoaWxkIiwicXVldWVIVE1MIiwicXVldWVUZXh0IiwiRE9NTGF6eVRyZWUiLCJSZWFjdFJlZiIsIlJlYWN0SW5zdHJ1bWVudGF0aW9uIiwiYXR0YWNoUmVmcyIsIm1vdW50Q29tcG9uZW50IiwiaW50ZXJuYWxJbnN0YW5jZSIsImhvc3RQYXJlbnQiLCJob3N0Q29udGFpbmVySW5mbyIsInBhcmVudERlYnVnSUQiLCJtYXJrdXAiLCJnZXRSZWFjdE1vdW50UmVhZHkiLCJnZXRIb3N0Tm9kZSIsInVubW91bnRDb21wb25lbnQiLCJzYWZlbHkiLCJvbkJlZm9yZVVubW91bnRDb21wb25lbnQiLCJkZXRhY2hSZWZzIiwicmVjZWl2ZUNvbXBvbmVudCIsIm5leHRFbGVtZW50IiwicHJldkVsZW1lbnQiLCJfY29udGV4dCIsInJlZnNDaGFuZ2VkIiwic2hvdWxkVXBkYXRlUmVmcyIsIlJlYWN0QmFzZUNsYXNzZXMiLCJSZWFjdENoaWxkcmVuIiwiUmVhY3RET01GYWN0b3JpZXMiLCJSZWFjdFByb3BUeXBlcyIsIlJlYWN0VmVyc2lvbiIsImNyZWF0ZVJlYWN0Q2xhc3MiLCJvbmx5Q2hpbGQiLCJsb3dQcmlvcml0eVdhcm5pbmciLCJSZWFjdEVsZW1lbnRWYWxpZGF0b3IiLCJkaWRXYXJuUHJvcFR5cGVzRGVwcmVjYXRlZCIsIl9fc3ByZWFkIiwiY3JlYXRlTWl4aW4iLCJtaXhpbiIsIndhcm5lZEZvclNwcmVhZCIsIndhcm5lZEZvckNyZWF0ZU1peGluIiwiUmVhY3QiLCJDaGlsZHJlbiIsImNvdW50IiwidG9BcnJheSIsIm9ubHkiLCJDb21wb25lbnQiLCJQdXJlQ29tcG9uZW50IiwiUHJvcFR5cGVzIiwiY3JlYXRlQ2xhc3MiLCJET00iLCJ3YXJuZWRGb3JDcmVhdGVDbGFzcyIsIndhcm5lZEZvckZhY3RvcmllcyIsIl9fZXNNb2R1bGUiLCJhZGRMZWFkaW5nU2xhc2giLCJwYXRoIiwiY2hhckF0Iiwic3RyaXBMZWFkaW5nU2xhc2giLCJoYXNCYXNlbmFtZSIsInByZWZpeCIsInN0cmlwQmFzZW5hbWUiLCJzdHJpcFRyYWlsaW5nU2xhc2giLCJwYXJzZVBhdGgiLCJwYXRobmFtZSIsInNlYXJjaCIsImhhc2giLCJoYXNoSW5kZXgiLCJzZWFyY2hJbmRleCIsImNyZWF0ZVBhdGgiLCJsb2NhdGlvbiIsIkV2ZW50UGx1Z2luUmVnaXN0cnkiLCJFdmVudFBsdWdpblV0aWxzIiwiUmVhY3RFcnJvclV0aWxzIiwiYWNjdW11bGF0ZUludG8iLCJmb3JFYWNoQWNjdW11bGF0ZWQiLCJsaXN0ZW5lckJhbmsiLCJldmVudFF1ZXVlIiwiZXhlY3V0ZURpc3BhdGNoZXNBbmRSZWxlYXNlIiwic2ltdWxhdGVkIiwiZXhlY3V0ZURpc3BhdGNoZXNJbk9yZGVyIiwiZXhlY3V0ZURpc3BhdGNoZXNBbmRSZWxlYXNlU2ltdWxhdGVkIiwiZXhlY3V0ZURpc3BhdGNoZXNBbmRSZWxlYXNlVG9wTGV2ZWwiLCJnZXREaWN0aW9uYXJ5S2V5IiwiX3Jvb3ROb2RlSUQiLCJpc0ludGVyYWN0aXZlIiwidGFnIiwic2hvdWxkUHJldmVudE1vdXNlRXZlbnQiLCJkaXNhYmxlZCIsIkV2ZW50UGx1Z2luSHViIiwiaW5qZWN0RXZlbnRQbHVnaW5PcmRlciIsImluamVjdEV2ZW50UGx1Z2luc0J5TmFtZSIsInB1dExpc3RlbmVyIiwicmVnaXN0cmF0aW9uTmFtZSIsImxpc3RlbmVyIiwiYmFua0ZvclJlZ2lzdHJhdGlvbk5hbWUiLCJQbHVnaW5Nb2R1bGUiLCJyZWdpc3RyYXRpb25OYW1lTW9kdWxlcyIsImRpZFB1dExpc3RlbmVyIiwiZ2V0TGlzdGVuZXIiLCJkZWxldGVMaXN0ZW5lciIsIndpbGxEZWxldGVMaXN0ZW5lciIsImRlbGV0ZUFsbExpc3RlbmVycyIsImV4dHJhY3RFdmVudHMiLCJ0b3BMZXZlbFR5cGUiLCJldmVudHMiLCJwbHVnaW5zIiwicG9zc2libGVQbHVnaW4iLCJleHRyYWN0ZWRFdmVudHMiLCJlbnF1ZXVlRXZlbnRzIiwicHJvY2Vzc0V2ZW50UXVldWUiLCJwcm9jZXNzaW5nRXZlbnRRdWV1ZSIsInJldGhyb3dDYXVnaHRFcnJvciIsIl9fcHVyZ2UiLCJfX2dldExpc3RlbmVyQmFuayIsImxpc3RlbmVyQXRQaGFzZSIsInByb3BhZ2F0aW9uUGhhc2UiLCJwaGFzZWRSZWdpc3RyYXRpb25OYW1lcyIsImFjY3VtdWxhdGVEaXJlY3Rpb25hbERpc3BhdGNoZXMiLCJwaGFzZSIsIl9kaXNwYXRjaExpc3RlbmVycyIsIl9kaXNwYXRjaEluc3RhbmNlcyIsImFjY3VtdWxhdGVUd29QaGFzZURpc3BhdGNoZXNTaW5nbGUiLCJ0cmF2ZXJzZVR3b1BoYXNlIiwiYWNjdW11bGF0ZVR3b1BoYXNlRGlzcGF0Y2hlc1NpbmdsZVNraXBUYXJnZXQiLCJwYXJlbnRJbnN0IiwiZ2V0UGFyZW50SW5zdGFuY2UiLCJhY2N1bXVsYXRlRGlzcGF0Y2hlcyIsImlnbm9yZWREaXJlY3Rpb24iLCJhY2N1bXVsYXRlRGlyZWN0RGlzcGF0Y2hlc1NpbmdsZSIsImFjY3VtdWxhdGVUd29QaGFzZURpc3BhdGNoZXMiLCJhY2N1bXVsYXRlVHdvUGhhc2VEaXNwYXRjaGVzU2tpcFRhcmdldCIsImFjY3VtdWxhdGVFbnRlckxlYXZlRGlzcGF0Y2hlcyIsImxlYXZlIiwiZW50ZXIiLCJ0cmF2ZXJzZUVudGVyTGVhdmUiLCJhY2N1bXVsYXRlRGlyZWN0RGlzcGF0Y2hlcyIsIkV2ZW50UHJvcGFnYXRvcnMiLCJSZWFjdEluc3RhbmNlTWFwIiwicmVtb3ZlIiwiX3JlYWN0SW50ZXJuYWxJbnN0YW5jZSIsImhhcyIsImdldEV2ZW50VGFyZ2V0IiwiVUlFdmVudEludGVyZmFjZSIsInZpZXciLCJkb2MiLCJvd25lckRvY3VtZW50IiwiZGVmYXVsdFZpZXciLCJwYXJlbnRXaW5kb3ciLCJkZXRhaWwiLCJTeW50aGV0aWNVSUV2ZW50IiwiZGlzcGF0Y2hNYXJrZXIiLCJJdGVtTGlzdCIsIml0ZW1zIiwiaGVhZGVyRXh0cmFzIiwiaGFuZGxlSXRlbUNsaWNrIiwiZWxlbWVudHMiLCJpZHgiLCJlbXB0eU9iamVjdCIsImV2ZW50UGx1Z2luT3JkZXIiLCJuYW1lc1RvUGx1Z2lucyIsInJlY29tcHV0ZVBsdWdpbk9yZGVyaW5nIiwicGx1Z2luTmFtZSIsInBsdWdpbk1vZHVsZSIsInBsdWdpbkluZGV4IiwicHVibGlzaGVkRXZlbnRzIiwiZXZlbnRUeXBlcyIsImV2ZW50TmFtZSIsInB1Ymxpc2hFdmVudEZvclBsdWdpbiIsImV2ZW50TmFtZURpc3BhdGNoQ29uZmlncyIsInBoYXNlTmFtZSIsInBoYXNlZFJlZ2lzdHJhdGlvbk5hbWUiLCJwdWJsaXNoUmVnaXN0cmF0aW9uTmFtZSIsInJlZ2lzdHJhdGlvbk5hbWVEZXBlbmRlbmNpZXMiLCJkZXBlbmRlbmNpZXMiLCJsb3dlckNhc2VkTmFtZSIsInBvc3NpYmxlUmVnaXN0cmF0aW9uTmFtZXMiLCJvbmRibGNsaWNrIiwiaW5qZWN0ZWRFdmVudFBsdWdpbk9yZGVyIiwiaW5qZWN0ZWROYW1lc1RvUGx1Z2lucyIsImlzT3JkZXJpbmdEaXJ0eSIsImdldFBsdWdpbk1vZHVsZUZvckV2ZW50IiwiX3Jlc2V0RXZlbnRQbHVnaW5zIiwiUmVhY3RFdmVudEVtaXR0ZXJNaXhpbiIsIlZpZXdwb3J0TWV0cmljcyIsImdldFZlbmRvclByZWZpeGVkRXZlbnROYW1lIiwiaXNFdmVudFN1cHBvcnRlZCIsImhhc0V2ZW50UGFnZVhZIiwiYWxyZWFkeUxpc3RlbmluZ1RvIiwiaXNNb25pdG9yaW5nU2Nyb2xsVmFsdWUiLCJyZWFjdFRvcExpc3RlbmVyc0NvdW50ZXIiLCJ0b3BFdmVudE1hcHBpbmciLCJ0b3BBYm9ydCIsInRvcEFuaW1hdGlvbkVuZCIsInRvcEFuaW1hdGlvbkl0ZXJhdGlvbiIsInRvcEFuaW1hdGlvblN0YXJ0IiwidG9wQmx1ciIsInRvcENhblBsYXkiLCJ0b3BDYW5QbGF5VGhyb3VnaCIsInRvcENoYW5nZSIsInRvcENsaWNrIiwidG9wQ29tcG9zaXRpb25FbmQiLCJ0b3BDb21wb3NpdGlvblN0YXJ0IiwidG9wQ29tcG9zaXRpb25VcGRhdGUiLCJ0b3BDb250ZXh0TWVudSIsInRvcENvcHkiLCJ0b3BDdXQiLCJ0b3BEb3VibGVDbGljayIsInRvcERyYWciLCJ0b3BEcmFnRW5kIiwidG9wRHJhZ0VudGVyIiwidG9wRHJhZ0V4aXQiLCJ0b3BEcmFnTGVhdmUiLCJ0b3BEcmFnT3ZlciIsInRvcERyYWdTdGFydCIsInRvcERyb3AiLCJ0b3BEdXJhdGlvbkNoYW5nZSIsInRvcEVtcHRpZWQiLCJ0b3BFbmNyeXB0ZWQiLCJ0b3BFbmRlZCIsInRvcEVycm9yIiwidG9wRm9jdXMiLCJ0b3BJbnB1dCIsInRvcEtleURvd24iLCJ0b3BLZXlQcmVzcyIsInRvcEtleVVwIiwidG9wTG9hZGVkRGF0YSIsInRvcExvYWRlZE1ldGFkYXRhIiwidG9wTG9hZFN0YXJ0IiwidG9wTW91c2VEb3duIiwidG9wTW91c2VNb3ZlIiwidG9wTW91c2VPdXQiLCJ0b3BNb3VzZU92ZXIiLCJ0b3BNb3VzZVVwIiwidG9wUGFzdGUiLCJ0b3BQYXVzZSIsInRvcFBsYXkiLCJ0b3BQbGF5aW5nIiwidG9wUHJvZ3Jlc3MiLCJ0b3BSYXRlQ2hhbmdlIiwidG9wU2Nyb2xsIiwidG9wU2Vla2VkIiwidG9wU2Vla2luZyIsInRvcFNlbGVjdGlvbkNoYW5nZSIsInRvcFN0YWxsZWQiLCJ0b3BTdXNwZW5kIiwidG9wVGV4dElucHV0IiwidG9wVGltZVVwZGF0ZSIsInRvcFRvdWNoQ2FuY2VsIiwidG9wVG91Y2hFbmQiLCJ0b3BUb3VjaE1vdmUiLCJ0b3BUb3VjaFN0YXJ0IiwidG9wVHJhbnNpdGlvbkVuZCIsInRvcFZvbHVtZUNoYW5nZSIsInRvcFdhaXRpbmciLCJ0b3BXaGVlbCIsInRvcExpc3RlbmVyc0lES2V5IiwiZ2V0TGlzdGVuaW5nRm9yRG9jdW1lbnQiLCJtb3VudEF0IiwiUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyIiwiUmVhY3RFdmVudExpc3RlbmVyIiwiaW5qZWN0UmVhY3RFdmVudExpc3RlbmVyIiwic2V0SGFuZGxlVG9wTGV2ZWwiLCJoYW5kbGVUb3BMZXZlbCIsInNldEVuYWJsZWQiLCJlbmFibGVkIiwiaXNFbmFibGVkIiwibGlzdGVuVG8iLCJjb250ZW50RG9jdW1lbnRIYW5kbGUiLCJpc0xpc3RlbmluZyIsImRlcGVuZGVuY3kiLCJ0cmFwQnViYmxlZEV2ZW50IiwidHJhcENhcHR1cmVkRXZlbnQiLCJXSU5ET1dfSEFORExFIiwiaGFuZGxlckJhc2VOYW1lIiwiaGFuZGxlIiwic3VwcG9ydHNFdmVudFBhZ2VYWSIsImNyZWF0ZUV2ZW50IiwiZXYiLCJlbnN1cmVTY3JvbGxWYWx1ZU1vbml0b3JpbmciLCJyZWZyZXNoIiwicmVmcmVzaFNjcm9sbFZhbHVlcyIsIm1vbml0b3JTY3JvbGxWYWx1ZSIsImdldEV2ZW50TW9kaWZpZXJTdGF0ZSIsIk1vdXNlRXZlbnRJbnRlcmZhY2UiLCJzY3JlZW5YIiwic2NyZWVuWSIsImNsaWVudFgiLCJjbGllbnRZIiwiY3RybEtleSIsInNoaWZ0S2V5IiwiYWx0S2V5IiwibWV0YUtleSIsImdldE1vZGlmaWVyU3RhdGUiLCJidXR0b24iLCJidXR0b25zIiwicmVsYXRlZFRhcmdldCIsImZyb21FbGVtZW50Iiwic3JjRWxlbWVudCIsInRvRWxlbWVudCIsInBhZ2VYIiwiY3VycmVudFNjcm9sbExlZnQiLCJwYWdlWSIsImN1cnJlbnRTY3JvbGxUb3AiLCJTeW50aGV0aWNNb3VzZUV2ZW50IiwiT0JTRVJWRURfRVJST1IiLCJUcmFuc2FjdGlvbkltcGwiLCJ0cmFuc2FjdGlvbldyYXBwZXJzIiwid3JhcHBlckluaXREYXRhIiwiX2lzSW5UcmFuc2FjdGlvbiIsImlzSW5UcmFuc2FjdGlvbiIsImVycm9yVGhyb3duIiwicmV0IiwiaW5pdGlhbGl6ZUFsbCIsImNsb3NlQWxsIiwic3RhcnRJbmRleCIsIndyYXBwZXIiLCJpbml0RGF0YSIsIm1hdGNoSHRtbFJlZ0V4cCIsImVzY2FwZUh0bWwiLCJzdHJpbmciLCJzdHIiLCJtYXRjaCIsImV4ZWMiLCJlc2NhcGUiLCJpbmRleCIsImxhc3RJbmRleCIsImNoYXJDb2RlQXQiLCJzdWJzdHJpbmciLCJlc2NhcGVUZXh0Q29udGVudEZvckJyb3dzZXIiLCJXSElURVNQQUNFX1RFU1QiLCJOT05WSVNJQkxFX1RFU1QiLCJyZXVzYWJsZVNWR0NvbnRhaW5lciIsInN2ZyIsImlubmVySFRNTCIsInN2Z05vZGUiLCJ0ZXN0RWxlbWVudCIsInRleHROb2RlIiwiZGF0YSIsInJlbW92ZUNoaWxkIiwiZGVsZXRlRGF0YSIsImlzIiwieSIsInNoYWxsb3dFcXVhbCIsIm9iakEiLCJvYmpCIiwia2V5c0EiLCJrZXlzQiIsImxvY2F0aW9uc0FyZUVxdWFsIiwiY3JlYXRlTG9jYXRpb24iLCJfZXh0ZW5kcyIsIl9yZXNvbHZlUGF0aG5hbWUiLCJfcmVzb2x2ZVBhdGhuYW1lMiIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfdmFsdWVFcXVhbCIsIl92YWx1ZUVxdWFsMiIsIl9QYXRoVXRpbHMiLCJvYmoiLCJkZWZhdWx0Iiwic3RhdGUiLCJjdXJyZW50TG9jYXRpb24iLCJkZWNvZGVVUkkiLCJVUklFcnJvciIsIl93YXJuaW5nIiwiX3dhcm5pbmcyIiwiY3JlYXRlVHJhbnNpdGlvbk1hbmFnZXIiLCJwcm9tcHQiLCJzZXRQcm9tcHQiLCJuZXh0UHJvbXB0IiwiY29uZmlybVRyYW5zaXRpb25UbyIsImdldFVzZXJDb25maXJtYXRpb24iLCJhcHBlbmRMaXN0ZW5lciIsImlzQWN0aXZlIiwiZmlsdGVyIiwibm90aWZ5TGlzdGVuZXJzIiwib2JqZWN0VGFnIiwiZnVuY1Byb3RvIiwib2JqZWN0UHJvdG8iLCJvYmplY3RDdG9yU3RyaW5nIiwiaXNQbGFpbk9iamVjdCIsInByb3RvIiwiQ3RvciIsIlJlYWN0UHJvcFR5cGVzU2VjcmV0IiwiRGFuZ2VyIiwiZ2V0Tm9kZUFmdGVyIiwiaXNBcnJheSIsImluc2VydENoaWxkQXQiLCJpbnNlcnRMYXp5VHJlZUNoaWxkQXQiLCJtb3ZlQ2hpbGQiLCJtb3ZlRGVsaW1pdGVkVGV4dCIsImNsb3NpbmdDb21tZW50IiwicmVtb3ZlRGVsaW1pdGVkVGV4dCIsIm9wZW5pbmdDb21tZW50IiwibmV4dE5vZGUiLCJzdGFydE5vZGUiLCJyZXBsYWNlRGVsaW1pdGVkVGV4dCIsInN0cmluZ1RleHQiLCJub2RlQWZ0ZXJDb21tZW50IiwiY3JlYXRlVGV4dE5vZGUiLCJvbkhvc3RPcGVyYXRpb24iLCJpbnN0YW5jZUlEIiwicGF5bG9hZCIsImRhbmdlcm91c2x5UmVwbGFjZU5vZGVXaXRoTWFya3VwIiwib2xkQ2hpbGQiLCJwcmV2SW5zdGFuY2UiLCJuZXh0SW5zdGFuY2UiLCJET01DaGlsZHJlbk9wZXJhdGlvbnMiLCJwcm9jZXNzVXBkYXRlcyIsInVwZGF0ZXMiLCJwYXJlbnROb2RlRGVidWdJRCIsImsiLCJ1cGRhdGUiLCJjb250ZW50IiwiYWZ0ZXJOb2RlIiwidG9JbmRleCIsImZyb21Ob2RlIiwiZnJvbUluZGV4IiwibWF0aG1sIiwiQ29tcG9uZW50VHJlZSIsIlRyZWVUcmF2ZXJzYWwiLCJpbmplY3RDb21wb25lbnRUcmVlIiwiSW5qZWN0ZWQiLCJpbmplY3RUcmVlVHJhdmVyc2FsIiwiaXNBbmNlc3RvciIsImdldExvd2VzdENvbW1vbkFuY2VzdG9yIiwiaXNFbmRpc2giLCJpc01vdmVpc2giLCJpc1N0YXJ0aXNoIiwidmFsaWRhdGVFdmVudERpc3BhdGNoZXMiLCJkaXNwYXRjaExpc3RlbmVycyIsImRpc3BhdGNoSW5zdGFuY2VzIiwibGlzdGVuZXJzSXNBcnIiLCJsaXN0ZW5lcnNMZW4iLCJpbnN0YW5jZXNJc0FyciIsImluc3RhbmNlc0xlbiIsImV4ZWN1dGVEaXNwYXRjaCIsImludm9rZUd1YXJkZWRDYWxsYmFja1dpdGhDYXRjaCIsImludm9rZUd1YXJkZWRDYWxsYmFjayIsImV4ZWN1dGVEaXNwYXRjaGVzSW5PcmRlclN0b3BBdFRydWVJbXBsIiwiZXhlY3V0ZURpc3BhdGNoZXNJbk9yZGVyU3RvcEF0VHJ1ZSIsImV4ZWN1dGVEaXJlY3REaXNwYXRjaCIsImRpc3BhdGNoTGlzdGVuZXIiLCJkaXNwYXRjaEluc3RhbmNlIiwicmVzIiwiaGFzRGlzcGF0Y2hlcyIsImFyZ0Zyb20iLCJhcmdUbyIsImVzY2FwZVJlZ2V4IiwiZXNjYXBlckxvb2t1cCIsImVzY2FwZWRTdHJpbmciLCJ1bmVzY2FwZSIsInVuZXNjYXBlUmVnZXgiLCJ1bmVzY2FwZXJMb29rdXAiLCJrZXlTdWJzdHJpbmciLCJLZXlFc2NhcGVVdGlscyIsInByb3BUeXBlc0ZhY3RvcnkiLCJoYXNSZWFkT25seVZhbHVlIiwiY2hlY2tib3giLCJpbWFnZSIsImhpZGRlbiIsInJhZGlvIiwic3VibWl0IiwiX2Fzc2VydFNpbmdsZUxpbmsiLCJpbnB1dFByb3BzIiwiY2hlY2tlZExpbmsiLCJ2YWx1ZUxpbmsiLCJfYXNzZXJ0VmFsdWVMaW5rIiwib25DaGFuZ2UiLCJfYXNzZXJ0Q2hlY2tlZExpbmsiLCJjaGVja2VkIiwicHJvcFR5cGVzIiwiY29tcG9uZW50TmFtZSIsInJlYWRPbmx5IiwiZnVuYyIsImxvZ2dlZFR5cGVGYWlsdXJlcyIsImdldERlY2xhcmF0aW9uRXJyb3JBZGRlbmR1bSIsIkxpbmtlZFZhbHVlVXRpbHMiLCJjaGVja1Byb3BUeXBlcyIsInRhZ05hbWUiLCJhZGRlbmR1bSIsImdldFZhbHVlIiwiZ2V0Q2hlY2tlZCIsImV4ZWN1dGVPbkNoYW5nZSIsInJlcXVlc3RDaGFuZ2UiLCJpbmplY3RlZCIsIlJlYWN0Q29tcG9uZW50RW52aXJvbm1lbnQiLCJyZXBsYWNlTm9kZVdpdGhNYXJrdXAiLCJwcm9jZXNzQ2hpbGRyZW5VcGRhdGVzIiwiaW5qZWN0RW52aXJvbm1lbnQiLCJlbnZpcm9ubWVudCIsImNhdWdodEVycm9yIiwiZGlzcGF0Y2hFdmVudCIsImZha2VOb2RlIiwiYm91bmRGdW5jIiwiZXZ0VHlwZSIsImV2dCIsImluaXRFdmVudCIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJmb3JtYXRVbmV4cGVjdGVkQXJndW1lbnQiLCJnZXRJbnRlcm5hbEluc3RhbmNlUmVhZHlGb3JVcGRhdGUiLCJwdWJsaWNJbnN0YW5jZSIsImNhbGxlck5hbWUiLCJjdG9yIiwiUmVhY3RVcGRhdGVRdWV1ZSIsIl93YXJuZWRBYm91dFJlZnNJblJlbmRlciIsImVucXVldWVDYWxsYmFjayIsInZhbGlkYXRlQ2FsbGJhY2siLCJlbnF1ZXVlQ2FsbGJhY2tJbnRlcm5hbCIsImVucXVldWVGb3JjZVVwZGF0ZSIsIl9wZW5kaW5nRm9yY2VVcGRhdGUiLCJlbnF1ZXVlUmVwbGFjZVN0YXRlIiwiY29tcGxldGVTdGF0ZSIsIl9wZW5kaW5nU3RhdGVRdWV1ZSIsIl9wZW5kaW5nUmVwbGFjZVN0YXRlIiwiZW5xdWV1ZVNldFN0YXRlIiwicGFydGlhbFN0YXRlIiwib25TZXRTdGF0ZSIsImVucXVldWVFbGVtZW50SW50ZXJuYWwiLCJuZXh0Q29udGV4dCIsIl9wZW5kaW5nRWxlbWVudCIsIk1TQXBwIiwiZXhlY1Vuc2FmZUxvY2FsRnVuY3Rpb24iLCJhcmcwIiwiYXJnMSIsImFyZzIiLCJhcmczIiwiZ2V0RXZlbnRDaGFyQ29kZSIsImNoYXJDb2RlIiwia2V5Q29kZSIsIm1vZGlmaWVyS2V5VG9Qcm9wIiwiQWx0IiwiQ29udHJvbCIsIk1ldGEiLCJTaGlmdCIsIm1vZGlmaWVyU3RhdGVHZXR0ZXIiLCJrZXlBcmciLCJzeW50aGV0aWNFdmVudCIsImtleVByb3AiLCJjb3JyZXNwb25kaW5nVXNlRWxlbWVudCIsInVzZUhhc0ZlYXR1cmUiLCJpbXBsZW1lbnRhdGlvbiIsImhhc0ZlYXR1cmUiLCJldmVudE5hbWVTdWZmaXgiLCJjYXB0dXJlIiwiaXNTdXBwb3J0ZWQiLCJzZXRBdHRyaWJ1dGUiLCJzaG91bGRVcGRhdGVSZWFjdENvbXBvbmVudCIsInByZXZFbXB0eSIsIm5leHRFbXB0eSIsInByZXZUeXBlIiwibmV4dFR5cGUiLCJ2YWxpZGF0ZURPTU5lc3RpbmciLCJzcGVjaWFsVGFncyIsImluU2NvcGVUYWdzIiwiYnV0dG9uU2NvcGVUYWdzIiwiaW1wbGllZEVuZFRhZ3MiLCJlbXB0eUFuY2VzdG9ySW5mbyIsImZvcm1UYWciLCJhVGFnSW5TY29wZSIsImJ1dHRvblRhZ0luU2NvcGUiLCJub2JyVGFnSW5TY29wZSIsInBUYWdJbkJ1dHRvblNjb3BlIiwibGlzdEl0ZW1UYWdBdXRvY2xvc2luZyIsImRsSXRlbVRhZ0F1dG9jbG9zaW5nIiwidXBkYXRlZEFuY2VzdG9ySW5mbyIsIm9sZEluZm8iLCJhbmNlc3RvckluZm8iLCJpc1RhZ1ZhbGlkV2l0aFBhcmVudCIsInBhcmVudFRhZyIsImZpbmRJbnZhbGlkQW5jZXN0b3JGb3JUYWciLCJmaW5kT3duZXJTdGFjayIsInJldmVyc2UiLCJkaWRXYXJuIiwiY2hpbGRUYWciLCJjaGlsZFRleHQiLCJjaGlsZEluc3RhbmNlIiwicGFyZW50SW5mbyIsImludmFsaWRQYXJlbnQiLCJpbnZhbGlkQW5jZXN0b3IiLCJwcm9ibGVtYXRpYyIsImFuY2VzdG9yVGFnIiwiYW5jZXN0b3JJbnN0YW5jZSIsImNoaWxkT3duZXIiLCJhbmNlc3Rvck93bmVyIiwiY2hpbGRPd25lcnMiLCJhbmNlc3Rvck93bmVycyIsIm1pblN0YWNrTGVuIiwibWluIiwiZGVlcGVzdENvbW1vbiIsIlVOS05PV04iLCJjaGlsZE93bmVyTmFtZXMiLCJhbmNlc3Rvck93bmVyTmFtZXMiLCJvd25lckluZm8iLCJ3YXJuS2V5IiwidGFnRGlzcGxheU5hbWUiLCJ3aGl0ZXNwYWNlSW5mbyIsImlzVGFnVmFsaWRJbkNvbnRleHQiLCJfY2xhc3NDYWxsQ2hlY2siLCJDb25zdHJ1Y3RvciIsIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwiUmVmZXJlbmNlRXJyb3IiLCJfaW5oZXJpdHMiLCJzdWJDbGFzcyIsInN1cGVyQ2xhc3MiLCJzZXRQcm90b3R5cGVPZiIsIl9fcHJvdG9fXyIsIl9SZWFjdCRDb21wb25lbnQiLCJfdGVtcCIsIl90aGlzIiwiX3JldCIsImNvbXB1dGVNYXRjaCIsImhpc3RvcnkiLCJnZXRDaGlsZENvbnRleHQiLCJyb3V0ZXIiLCJyb3V0ZSIsInVybCIsInBhcmFtcyIsImlzRXhhY3QiLCJjb21wb25lbnRXaWxsTW91bnQiLCJfdGhpczIiLCJfcHJvcHMiLCJ1bmxpc3RlbiIsImxpc3RlbiIsInNldFN0YXRlIiwiY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyIsIm5leHRQcm9wcyIsImNvbXBvbmVudFdpbGxVbm1vdW50IiwicmVuZGVyIiwiaXNSZXF1aXJlZCIsImNvbnRleHRUeXBlcyIsImNoaWxkQ29udGV4dFR5cGVzIiwicGF0dGVybkNhY2hlIiwiY2FjaGVMaW1pdCIsImNhY2hlQ291bnQiLCJjb21waWxlUGF0aCIsInBhdHRlcm4iLCJvcHRpb25zIiwiY2FjaGVLZXkiLCJlbmQiLCJzdHJpY3QiLCJjYWNoZSIsInJlIiwiY29tcGlsZWRQYXR0ZXJuIiwiX29wdGlvbnMiLCJfb3B0aW9ucyRwYXRoIiwiX29wdGlvbnMkZXhhY3QiLCJleGFjdCIsIl9vcHRpb25zJHN0cmljdCIsIl9jb21waWxlUGF0aCIsInZhbHVlcyIsInJlZHVjZSIsIm1lbW8iLCJpc0NydXNoZWQiLCJjcmVhdGVTdG9yZSIsImNvbWJpbmVSZWR1Y2VycyIsImJpbmRBY3Rpb25DcmVhdG9ycyIsImFwcGx5TWlkZGxld2FyZSIsImNvbXBvc2UiLCJFdmVudExpc3RlbmVyIiwiZXZlbnRUeXBlIiwiZGV0YWNoRXZlbnQiLCJyZWdpc3RlckRlZmF1bHQiLCJmb2N1c05vZGUiLCJmb2N1cyIsImdldEFjdGl2ZUVsZW1lbnQiLCJhY3RpdmVFbGVtZW50IiwiYm9keSIsImdldENvbmZpcm1hdGlvbiIsImNvbmZpcm0iLCJzdXBwb3J0c0hpc3RvcnkiLCJ1YSIsInN1cHBvcnRzUG9wU3RhdGVPbkhhc2hDaGFuZ2UiLCJzdXBwb3J0c0dvV2l0aG91dFJlbG9hZFVzaW5nSGFzaCIsImlzRXh0cmFuZW91c1BvcHN0YXRlRXZlbnQiLCJSRUFDVF9TVEFUSUNTIiwiZ2V0RGVmYXVsdFByb3BzIiwibWl4aW5zIiwiS05PV05fU1RBVElDUyIsImNhbGxlciIsImFyaXR5IiwiaXNHZXRPd25Qcm9wZXJ0eVN5bWJvbHNBdmFpbGFibGUiLCJob2lzdE5vblJlYWN0U3RhdGljcyIsInRhcmdldENvbXBvbmVudCIsInNvdXJjZUNvbXBvbmVudCIsImN1c3RvbVN0YXRpY3MiLCJJVEVSQVRPUl9TWU1CT0wiLCJpdGVyYXRvciIsIkZBVVhfSVRFUkFUT1JfU1lNQk9MIiwiZ2V0SXRlcmF0b3JGbiIsIm1heWJlSXRlcmFibGUiLCJpdGVyYXRvckZuIiwiQU5PTllNT1VTIiwiY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIiLCJib29sIiwibnVtYmVyIiwic3ltYm9sIiwiYW55IiwiY3JlYXRlQW55VHlwZUNoZWNrZXIiLCJhcnJheU9mIiwiY3JlYXRlQXJyYXlPZlR5cGVDaGVja2VyIiwiY3JlYXRlRWxlbWVudFR5cGVDaGVja2VyIiwiaW5zdGFuY2VPZiIsImNyZWF0ZUluc3RhbmNlVHlwZUNoZWNrZXIiLCJjcmVhdGVOb2RlQ2hlY2tlciIsIm9iamVjdE9mIiwiY3JlYXRlT2JqZWN0T2ZUeXBlQ2hlY2tlciIsIm9uZU9mIiwiY3JlYXRlRW51bVR5cGVDaGVja2VyIiwib25lT2ZUeXBlIiwiY3JlYXRlVW5pb25UeXBlQ2hlY2tlciIsInNoYXBlIiwiY3JlYXRlU2hhcGVUeXBlQ2hlY2tlciIsIlByb3BUeXBlRXJyb3IiLCJjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlciIsInZhbGlkYXRlIiwibWFudWFsUHJvcFR5cGVDYWxsQ2FjaGUiLCJtYW51YWxQcm9wVHlwZVdhcm5pbmdDb3VudCIsImNoZWNrVHlwZSIsInByb3BGdWxsTmFtZSIsInNlY3JldCIsImNoYWluZWRDaGVja1R5cGUiLCJleHBlY3RlZFR5cGUiLCJwcm9wVmFsdWUiLCJwcm9wVHlwZSIsImdldFByb3BUeXBlIiwicHJlY2lzZVR5cGUiLCJnZXRQcmVjaXNlVHlwZSIsInR5cGVDaGVja2VyIiwiZXhwZWN0ZWRDbGFzcyIsImV4cGVjdGVkQ2xhc3NOYW1lIiwiYWN0dWFsQ2xhc3NOYW1lIiwiZ2V0Q2xhc3NOYW1lIiwiZXhwZWN0ZWRWYWx1ZXMiLCJ2YWx1ZXNTdHJpbmciLCJKU09OIiwic3RyaW5naWZ5IiwiYXJyYXlPZlR5cGVDaGVja2VycyIsImNoZWNrZXIiLCJnZXRQb3N0Zml4Rm9yVHlwZVdhcm5pbmciLCJpc05vZGUiLCJzaGFwZVR5cGVzIiwiZXZlcnkiLCJzdGVwIiwiZW50cmllcyIsIm5leHQiLCJkb25lIiwiZW50cnkiLCJpc1N5bWJvbCIsImlzVW5pdGxlc3NOdW1iZXIiLCJhbmltYXRpb25JdGVyYXRpb25Db3VudCIsImJvcmRlckltYWdlT3V0c2V0IiwiYm9yZGVySW1hZ2VTbGljZSIsImJvcmRlckltYWdlV2lkdGgiLCJib3hGbGV4IiwiYm94RmxleEdyb3VwIiwiYm94T3JkaW5hbEdyb3VwIiwiY29sdW1uQ291bnQiLCJmbGV4IiwiZmxleEdyb3ciLCJmbGV4UG9zaXRpdmUiLCJmbGV4U2hyaW5rIiwiZmxleE5lZ2F0aXZlIiwiZmxleE9yZGVyIiwiZ3JpZFJvdyIsImdyaWRSb3dFbmQiLCJncmlkUm93U3BhbiIsImdyaWRSb3dTdGFydCIsImdyaWRDb2x1bW4iLCJncmlkQ29sdW1uRW5kIiwiZ3JpZENvbHVtblNwYW4iLCJncmlkQ29sdW1uU3RhcnQiLCJmb250V2VpZ2h0IiwibGluZUNsYW1wIiwibGluZUhlaWdodCIsIm9wYWNpdHkiLCJvcmRlciIsIm9ycGhhbnMiLCJ0YWJTaXplIiwid2lkb3dzIiwiekluZGV4Iiwiem9vbSIsImZpbGxPcGFjaXR5IiwiZmxvb2RPcGFjaXR5Iiwic3RvcE9wYWNpdHkiLCJzdHJva2VEYXNoYXJyYXkiLCJzdHJva2VEYXNob2Zmc2V0Iiwic3Ryb2tlTWl0ZXJsaW1pdCIsInN0cm9rZU9wYWNpdHkiLCJzdHJva2VXaWR0aCIsInByZWZpeEtleSIsInRvVXBwZXJDYXNlIiwicHJlZml4ZXMiLCJzaG9ydGhhbmRQcm9wZXJ0eUV4cGFuc2lvbnMiLCJiYWNrZ3JvdW5kIiwiYmFja2dyb3VuZEF0dGFjaG1lbnQiLCJiYWNrZ3JvdW5kQ29sb3IiLCJiYWNrZ3JvdW5kSW1hZ2UiLCJiYWNrZ3JvdW5kUG9zaXRpb25YIiwiYmFja2dyb3VuZFBvc2l0aW9uWSIsImJhY2tncm91bmRSZXBlYXQiLCJiYWNrZ3JvdW5kUG9zaXRpb24iLCJib3JkZXIiLCJib3JkZXJXaWR0aCIsImJvcmRlclN0eWxlIiwiYm9yZGVyQ29sb3IiLCJib3JkZXJCb3R0b20iLCJib3JkZXJCb3R0b21XaWR0aCIsImJvcmRlckJvdHRvbVN0eWxlIiwiYm9yZGVyQm90dG9tQ29sb3IiLCJib3JkZXJMZWZ0IiwiYm9yZGVyTGVmdFdpZHRoIiwiYm9yZGVyTGVmdFN0eWxlIiwiYm9yZGVyTGVmdENvbG9yIiwiYm9yZGVyUmlnaHQiLCJib3JkZXJSaWdodFdpZHRoIiwiYm9yZGVyUmlnaHRTdHlsZSIsImJvcmRlclJpZ2h0Q29sb3IiLCJib3JkZXJUb3AiLCJib3JkZXJUb3BXaWR0aCIsImJvcmRlclRvcFN0eWxlIiwiYm9yZGVyVG9wQ29sb3IiLCJmb250IiwiZm9udFN0eWxlIiwiZm9udFZhcmlhbnQiLCJmb250U2l6ZSIsImZvbnRGYW1pbHkiLCJvdXRsaW5lIiwib3V0bGluZVdpZHRoIiwib3V0bGluZVN0eWxlIiwib3V0bGluZUNvbG9yIiwiQ1NTUHJvcGVydHkiLCJfY2FsbGJhY2tzIiwiX2NvbnRleHRzIiwiX2FyZyIsImNvbnRleHRzIiwiY2hlY2twb2ludCIsInJvbGxiYWNrIiwicXVvdGVBdHRyaWJ1dGVWYWx1ZUZvckJyb3dzZXIiLCJWQUxJRF9BVFRSSUJVVEVfTkFNRV9SRUdFWCIsImlsbGVnYWxBdHRyaWJ1dGVOYW1lQ2FjaGUiLCJ2YWxpZGF0ZWRBdHRyaWJ1dGVOYW1lQ2FjaGUiLCJpc0F0dHJpYnV0ZU5hbWVTYWZlIiwic2hvdWxkSWdub3JlVmFsdWUiLCJpc05hTiIsIkRPTVByb3BlcnR5T3BlcmF0aW9ucyIsImNyZWF0ZU1hcmt1cEZvcklEIiwic2V0QXR0cmlidXRlRm9ySUQiLCJjcmVhdGVNYXJrdXBGb3JSb290Iiwic2V0QXR0cmlidXRlRm9yUm9vdCIsImNyZWF0ZU1hcmt1cEZvclByb3BlcnR5IiwiY3JlYXRlTWFya3VwRm9yQ3VzdG9tQXR0cmlidXRlIiwic2V0VmFsdWVGb3JQcm9wZXJ0eSIsImRlbGV0ZVZhbHVlRm9yUHJvcGVydHkiLCJuYW1lc3BhY2UiLCJzZXRBdHRyaWJ1dGVOUyIsInNldFZhbHVlRm9yQXR0cmlidXRlIiwicmVtb3ZlQXR0cmlidXRlIiwiZGVsZXRlVmFsdWVGb3JBdHRyaWJ1dGUiLCJkaWRXYXJuVmFsdWVMaW5rIiwiZGlkV2FyblZhbHVlRGVmYXVsdFZhbHVlIiwidXBkYXRlT3B0aW9uc0lmUGVuZGluZ1VwZGF0ZUFuZE1vdW50ZWQiLCJfd3JhcHBlclN0YXRlIiwicGVuZGluZ1VwZGF0ZSIsInVwZGF0ZU9wdGlvbnMiLCJCb29sZWFuIiwibXVsdGlwbGUiLCJ2YWx1ZVByb3BOYW1lcyIsImNoZWNrU2VsZWN0UHJvcFR5cGVzIiwic2VsZWN0ZWRWYWx1ZSIsInNlbGVjdGVkIiwiUmVhY3RET01TZWxlY3QiLCJnZXRIb3N0UHJvcHMiLCJtb3VudFdyYXBwZXIiLCJpbml0aWFsVmFsdWUiLCJkZWZhdWx0VmFsdWUiLCJfaGFuZGxlQ2hhbmdlIiwid2FzTXVsdGlwbGUiLCJnZXRTZWxlY3RWYWx1ZUNvbnRleHQiLCJwb3N0VXBkYXRlV3JhcHBlciIsImVtcHR5Q29tcG9uZW50RmFjdG9yeSIsIlJlYWN0RW1wdHlDb21wb25lbnRJbmplY3Rpb24iLCJpbmplY3RFbXB0eUNvbXBvbmVudEZhY3RvcnkiLCJSZWFjdEVtcHR5Q29tcG9uZW50IiwiaW5zdGFudGlhdGUiLCJnZW5lcmljQ29tcG9uZW50Q2xhc3MiLCJ0ZXh0Q29tcG9uZW50Q2xhc3MiLCJSZWFjdEhvc3RDb21wb25lbnRJbmplY3Rpb24iLCJpbmplY3RHZW5lcmljQ29tcG9uZW50Q2xhc3MiLCJjb21wb25lbnRDbGFzcyIsImluamVjdFRleHRDb21wb25lbnRDbGFzcyIsImNyZWF0ZUludGVybmFsQ29tcG9uZW50IiwiY3JlYXRlSW5zdGFuY2VGb3JUZXh0IiwiaXNUZXh0Q29tcG9uZW50IiwiUmVhY3RIb3N0Q29tcG9uZW50IiwiUmVhY3RET01TZWxlY3Rpb24iLCJjb250YWluc05vZGUiLCJpc0luRG9jdW1lbnQiLCJkb2N1bWVudEVsZW1lbnQiLCJSZWFjdElucHV0U2VsZWN0aW9uIiwiaGFzU2VsZWN0aW9uQ2FwYWJpbGl0aWVzIiwiZWxlbSIsImNvbnRlbnRFZGl0YWJsZSIsImdldFNlbGVjdGlvbkluZm9ybWF0aW9uIiwiZm9jdXNlZEVsZW0iLCJzZWxlY3Rpb25SYW5nZSIsImdldFNlbGVjdGlvbiIsInJlc3RvcmVTZWxlY3Rpb24iLCJwcmlvclNlbGVjdGlvbkluZm9ybWF0aW9uIiwiY3VyRm9jdXNlZEVsZW0iLCJwcmlvckZvY3VzZWRFbGVtIiwicHJpb3JTZWxlY3Rpb25SYW5nZSIsInNldFNlbGVjdGlvbiIsImlucHV0Iiwic2VsZWN0aW9uIiwic3RhcnQiLCJzZWxlY3Rpb25TdGFydCIsInNlbGVjdGlvbkVuZCIsInJhbmdlIiwiY3JlYXRlUmFuZ2UiLCJwYXJlbnRFbGVtZW50IiwibW92ZVN0YXJ0IiwibW92ZUVuZCIsImdldE9mZnNldHMiLCJvZmZzZXRzIiwiY3JlYXRlVGV4dFJhbmdlIiwiY29sbGFwc2UiLCJzZWxlY3QiLCJzZXRPZmZzZXRzIiwiUmVhY3RET01Db250YWluZXJJbmZvIiwiUmVhY3RET01GZWF0dXJlRmxhZ3MiLCJSZWFjdE1hcmt1cENoZWNrc3VtIiwiaW5zdGFudGlhdGVSZWFjdENvbXBvbmVudCIsIlJPT1RfQVRUUl9OQU1FIiwiRE9DX05PREVfVFlQRSIsImluc3RhbmNlc0J5UmVhY3RSb290SUQiLCJmaXJzdERpZmZlcmVuY2VJbmRleCIsInN0cmluZzEiLCJzdHJpbmcyIiwibWluTGVuIiwiZ2V0UmVhY3RSb290RWxlbWVudEluQ29udGFpbmVyIiwiY29udGFpbmVyIiwiaW50ZXJuYWxHZXRJRCIsIm1vdW50Q29tcG9uZW50SW50b05vZGUiLCJ3cmFwcGVySW5zdGFuY2UiLCJzaG91bGRSZXVzZU1hcmt1cCIsIndyYXBwZWRFbGVtZW50IiwiY2hpbGQiLCJfdG9wTGV2ZWxXcmFwcGVyIiwiUmVhY3RNb3VudCIsIl9tb3VudEltYWdlSW50b05vZGUiLCJiYXRjaGVkTW91bnRDb21wb25lbnRJbnRvTm9kZSIsImNvbXBvbmVudEluc3RhbmNlIiwidXNlQ3JlYXRlRWxlbWVudCIsInVubW91bnRDb21wb25lbnRGcm9tTm9kZSIsIm9uQmVnaW5GbHVzaCIsIm9uRW5kRmx1c2giLCJsYXN0Q2hpbGQiLCJoYXNOb25Sb290UmVhY3RDaGlsZCIsInJvb3RFbCIsIm5vZGVJc1JlbmRlcmVkQnlPdGhlckluc3RhbmNlIiwiaXNSZWFjdE5vZGUiLCJpc1ZhbGlkQ29udGFpbmVyIiwiaGFzQXR0cmlidXRlIiwiZ2V0SG9zdFJvb3RJbnN0YW5jZUluQ29udGFpbmVyIiwicHJldkhvc3RJbnN0YW5jZSIsImdldFRvcExldmVsV3JhcHBlckluQ29udGFpbmVyIiwicm9vdCIsIl9ob3N0Q29udGFpbmVySW5mbyIsInRvcExldmVsUm9vdENvdW50ZXIiLCJUb3BMZXZlbFdyYXBwZXIiLCJyb290SUQiLCJpc1JlYWN0Q29tcG9uZW50IiwiX2luc3RhbmNlc0J5UmVhY3RSb290SUQiLCJzY3JvbGxNb25pdG9yIiwicmVuZGVyQ2FsbGJhY2siLCJfdXBkYXRlUm9vdENvbXBvbmVudCIsInByZXZDb21wb25lbnQiLCJfcmVuZGVyTmV3Um9vdENvbXBvbmVudCIsIndyYXBwZXJJRCIsIl9pbnN0YW5jZSIsInJlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyIiwicGFyZW50Q29tcG9uZW50IiwiX3JlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyIiwibmV4dFdyYXBwZWRFbGVtZW50IiwiX3Byb2Nlc3NDaGlsZENvbnRleHQiLCJwcmV2V3JhcHBlZEVsZW1lbnQiLCJwdWJsaWNJbnN0IiwidXBkYXRlZENhbGxiYWNrIiwidW5tb3VudENvbXBvbmVudEF0Tm9kZSIsInJlYWN0Um9vdEVsZW1lbnQiLCJjb250YWluZXJIYXNSZWFjdE1hcmt1cCIsImNvbnRhaW5lckhhc05vblJvb3RSZWFjdENoaWxkIiwicm9vdEVsZW1lbnRTaWJsaW5nIiwiaXNDb250YWluZXJSZWFjdFJvb3QiLCJyb290RWxlbWVudCIsImNhblJldXNlTWFya3VwIiwiY2hlY2tzdW0iLCJDSEVDS1NVTV9BVFRSX05BTUUiLCJyb290TWFya3VwIiwib3V0ZXJIVE1MIiwibm9ybWFsaXplZE1hcmt1cCIsIm5vcm1hbGl6ZXIiLCJjb250ZW50RG9jdW1lbnQiLCJ3cml0ZSIsImRpZmZJbmRleCIsImRpZmZlcmVuY2UiLCJob3N0Tm9kZSIsIlJlYWN0Tm9kZVR5cGVzIiwiSE9TVCIsIkNPTVBPU0lURSIsIkVNUFRZIiwiZ2V0VHlwZSIsInNjcm9sbFBvc2l0aW9uIiwiYXJyIiwiY2IiLCJnZXRIb3N0Q29tcG9uZW50RnJvbUNvbXBvc2l0ZSIsIl9yZW5kZXJlZE5vZGVUeXBlIiwiY29udGVudEtleSIsImdldFRleHRDb250ZW50QWNjZXNzb3IiLCJpc0NoZWNrYWJsZSIsImdldFRyYWNrZXIiLCJ2YWx1ZVRyYWNrZXIiLCJhdHRhY2hUcmFja2VyIiwidHJhY2tlciIsImRldGFjaFRyYWNrZXIiLCJnZXRWYWx1ZUZyb21Ob2RlIiwiaW5wdXRWYWx1ZVRyYWNraW5nIiwiX2dldFRyYWNrZXJGcm9tTm9kZSIsInRyYWNrIiwidmFsdWVGaWVsZCIsImRlc2NyaXB0b3IiLCJjdXJyZW50VmFsdWUiLCJzZXRWYWx1ZSIsInN0b3BUcmFja2luZyIsInVwZGF0ZVZhbHVlSWZDaGFuZ2VkIiwibGFzdFZhbHVlIiwibmV4dFZhbHVlIiwiUmVhY3RDb21wb3NpdGVDb21wb25lbnQiLCJnZXROZXh0RGVidWdJRCIsIlJlYWN0Q29tcG9zaXRlQ29tcG9uZW50V3JhcHBlciIsImlzSW50ZXJuYWxDb21wb25lbnRUeXBlIiwic2hvdWxkSGF2ZURlYnVnSUQiLCJnZXROYXRpdmVOb2RlIiwiX21vdW50SW5kZXgiLCJfbW91bnRJbWFnZSIsInByZXZlbnRFeHRlbnNpb25zIiwiX2luc3RhbnRpYXRlUmVhY3RDb21wb25lbnQiLCJzdXBwb3J0ZWRJbnB1dFR5cGVzIiwiY29sb3IiLCJkYXRlIiwiZGF0ZXRpbWUiLCJlbWFpbCIsIm1vbnRoIiwicGFzc3dvcmQiLCJ0ZWwiLCJ3ZWVrIiwiaXNUZXh0SW5wdXRFbGVtZW50IiwidGV4dENvbnRlbnQiLCJTRVBBUkFUT1IiLCJTVUJTRVBBUkFUT1IiLCJkaWRXYXJuQWJvdXRNYXBzIiwiZ2V0Q29tcG9uZW50S2V5IiwidHJhdmVyc2VBbGxDaGlsZHJlbkltcGwiLCJuYW1lU29GYXIiLCJ0cmF2ZXJzZUNvbnRleHQiLCJuZXh0TmFtZSIsInN1YnRyZWVDb3VudCIsIm5leHROYW1lUHJlZml4IiwiaWkiLCJtYXBzQXNDaGlsZHJlbkFkZGVuZHVtIiwibWFwc0FzQ2hpbGRyZW5Pd25lck5hbWUiLCJfaXNSZWFjdEVsZW1lbnQiLCJjaGlsZHJlblN0cmluZyIsInRyYXZlcnNlQWxsQ2hpbGRyZW4iLCJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCJob3RSZWxvYWRpbmdWZXJzaW9uIiwiZHVtbXlTdGF0ZSIsIm1ha2VTZWxlY3RvclN0YXRlZnVsIiwic291cmNlU2VsZWN0b3IiLCJzdG9yZSIsInNlbGVjdG9yIiwicnVuQ29tcG9uZW50U2VsZWN0b3IiLCJnZXRTdGF0ZSIsInNob3VsZENvbXBvbmVudFVwZGF0ZSIsInNlbGVjdG9yRmFjdG9yeSIsIl9jb250ZXh0VHlwZXMiLCJfY2hpbGRDb250ZXh0VHlwZXMiLCJfcmVmIiwiX3JlZiRnZXREaXNwbGF5TmFtZSIsIl9yZWYkbWV0aG9kTmFtZSIsIm1ldGhvZE5hbWUiLCJfcmVmJHJlbmRlckNvdW50UHJvcCIsInJlbmRlckNvdW50UHJvcCIsIl9yZWYkc2hvdWxkSGFuZGxlU3RhdCIsInNob3VsZEhhbmRsZVN0YXRlQ2hhbmdlcyIsIl9yZWYkc3RvcmVLZXkiLCJzdG9yZUtleSIsIl9yZWYkd2l0aFJlZiIsIndpdGhSZWYiLCJjb25uZWN0T3B0aW9ucyIsInN1YnNjcmlwdGlvbktleSIsIndyYXBXaXRoQ29ubmVjdCIsIldyYXBwZWRDb21wb25lbnQiLCJ3cmFwcGVkQ29tcG9uZW50TmFtZSIsInNlbGVjdG9yRmFjdG9yeU9wdGlvbnMiLCJDb25uZWN0IiwiX0NvbXBvbmVudCIsInJlbmRlckNvdW50IiwicHJvcHNNb2RlIiwic2V0V3JhcHBlZEluc3RhbmNlIiwiaW5pdFNlbGVjdG9yIiwiaW5pdFN1YnNjcmlwdGlvbiIsIl9yZWYyIiwic3Vic2NyaXB0aW9uIiwiY29tcG9uZW50RGlkTW91bnQiLCJ0cnlTdWJzY3JpYmUiLCJmb3JjZVVwZGF0ZSIsInRyeVVuc3Vic2NyaWJlIiwibm90aWZ5TmVzdGVkU3VicyIsImdldFdyYXBwZWRJbnN0YW5jZSIsIndyYXBwZWRJbnN0YW5jZSIsImRpc3BhdGNoIiwicGFyZW50U3ViIiwib25TdGF0ZUNoYW5nZSIsImNvbXBvbmVudERpZFVwZGF0ZSIsIm5vdGlmeU5lc3RlZFN1YnNPbkNvbXBvbmVudERpZFVwZGF0ZSIsImlzU3Vic2NyaWJlZCIsImFkZEV4dHJhUHJvcHMiLCJ3aXRoRXh0cmFzIiwiY29tcG9uZW50V2lsbFVwZGF0ZSIsIndyYXBNYXBUb1Byb3BzQ29uc3RhbnQiLCJnZXREZXBlbmRzT25Pd25Qcm9wcyIsIndyYXBNYXBUb1Byb3BzRnVuYyIsImdldENvbnN0YW50IiwiaW5pdENvbnN0YW50U2VsZWN0b3IiLCJjb25zdGFudCIsImNvbnN0YW50U2VsZWN0b3IiLCJkZXBlbmRzT25Pd25Qcm9wcyIsIm1hcFRvUHJvcHMiLCJpbml0UHJveHlTZWxlY3RvciIsInByb3h5IiwibWFwVG9Qcm9wc1Byb3h5Iiwic3RhdGVPckRpc3BhdGNoIiwib3duUHJvcHMiLCJkZXRlY3RGYWN0b3J5QW5kVmVyaWZ5Iiwic3Vic2NyaXB0aW9uU2hhcGUiLCJzdG9yZVNoYXBlIiwic3Vic2NyaWJlIiwidmVyaWZ5UGxhaW5PYmplY3QiLCJpc01vZGlmaWVkRXZlbnQiLCJMaW5rIiwiaGFuZGxlQ2xpY2siLCJvbkNsaWNrIiwiX3RoaXMkcHJvcHMiLCJocmVmIiwiY3JlYXRlSHJlZiIsImNvbXB1dGVkTWF0Y2giLCJfcHJvcHMyIiwiX2NvbnRleHQkcm91dGVyIiwic3RhdGljQ29udGV4dCIsIlJlYWN0Tm9vcFVwZGF0ZVF1ZXVlIiwiUmVhY3RDb21wb25lbnQiLCJ1cGRhdGVyIiwicmVmcyIsImRlcHJlY2F0ZWRBUElzIiwicmVwbGFjZVN0YXRlIiwiZGVmaW5lRGVwcmVjYXRpb25XYXJuaW5nIiwiZm5OYW1lIiwiUmVhY3RQdXJlQ29tcG9uZW50IiwiQ29tcG9uZW50RHVtbXkiLCJpc1B1cmVSZWFjdENvbXBvbmVudCIsImNoZWNrUmVhY3RUeXBlU3BlYyIsImdldFNvdXJjZUluZm9FcnJvckFkZGVuZHVtIiwiZWxlbWVudFByb3BzIiwib3duZXJIYXNLZXlVc2VXYXJuaW5nIiwiZ2V0Q3VycmVudENvbXBvbmVudEVycm9ySW5mbyIsInBhcmVudFR5cGUiLCJwYXJlbnROYW1lIiwidmFsaWRhdGVFeHBsaWNpdEtleSIsIm1lbW9pemVyIiwidW5pcXVlS2V5IiwiY3VycmVudENvbXBvbmVudEVycm9ySW5mbyIsInZhbGlkYXRlQ2hpbGRLZXlzIiwidmFsaWRhdGVQcm9wVHlwZXMiLCJpc1JlYWN0Q2xhc3NBcHByb3ZlZCIsInZhbGlkVHlwZSIsInNvdXJjZUluZm8iLCJ2YWxpZGF0ZWRGYWN0b3J5Iiwid2Fybk5vb3AiLCJmdW5jcyIsImxhc3QiLCJyZXN0IiwicmVkdWNlUmlnaHQiLCJjb21wb3NlZCIsIkFjdGlvblR5cGVzIiwiSU5JVCIsInJlZHVjZXIiLCJwcmVsb2FkZWRTdGF0ZSIsImVuaGFuY2VyIiwiY3VycmVudFJlZHVjZXIiLCJjdXJyZW50U3RhdGUiLCJjdXJyZW50TGlzdGVuZXJzIiwibmV4dExpc3RlbmVycyIsImlzRGlzcGF0Y2hpbmciLCJlbnN1cmVDYW5NdXRhdGVOZXh0TGlzdGVuZXJzIiwidW5zdWJzY3JpYmUiLCJyZXBsYWNlUmVkdWNlciIsIm5leHRSZWR1Y2VyIiwib2JzZXJ2YWJsZSIsIm91dGVyU3Vic2NyaWJlIiwib2JzZXJ2ZXIiLCJvYnNlcnZlU3RhdGUiLCJnIiwiZXZhbCIsIkJvdHRvbU5hdiIsImZvb3Rlckl0ZW1zIiwiaWNvbk1hcCIsImZpbGVzIiwicGhvdG9zIiwic2hhcmVkIiwibXVzaWMiLCJtZW51IiwiZm9vdGVyRWxlbWVudHMiLCJnZXRQYXRoIiwidHJhdmVyc2UiLCJvcmlnaW4iLCJwcm9wbGlzdCIsInNoaWZ0IiwiY29udGVudHMiLCJmaW5kIiwiY3VycmVudFBhdGgiLCJmaWxlc3lzdGVtIiwiQnJvd3NlclJvdXRlciIsIkhhc2hSb3V0ZXIiLCJOYXZMaW5rIiwiaXRlbUxpc3RzIiwiTWFpbiIsImN1cnJlbnRMaXN0IiwiTWVudSIsInNlbGVjdE1vZGUiLCJ0b2dnbGVTZWxlY3Rpb24iLCJzZWxlY3Rpb25Nb2RlIiwibmF2aWdhdGVUbyIsIl9pbnZhcmlhbnQiLCJNSVhJTlNfS0VZIiwiaWRlbnRpdHkiLCJSZWFjdFByb3BUeXBlTG9jYXRpb25OYW1lcyIsImNoaWxkQ29udGV4dCIsImluamVjdGVkTWl4aW5zIiwiUmVhY3RDbGFzc0ludGVyZmFjZSIsInN0YXRpY3MiLCJnZXRJbml0aWFsU3RhdGUiLCJ1cGRhdGVDb21wb25lbnQiLCJSRVNFUlZFRF9TUEVDX0tFWVMiLCJtaXhTcGVjSW50b0NvbXBvbmVudCIsInZhbGlkYXRlVHlwZURlZiIsImNyZWF0ZU1lcmdlZFJlc3VsdEZ1bmN0aW9uIiwibWl4U3RhdGljU3BlY0ludG9Db21wb25lbnQiLCJhdXRvYmluZCIsInR5cGVEZWYiLCJ2YWxpZGF0ZU1ldGhvZE92ZXJyaWRlIiwiaXNBbHJlYWR5RGVmaW5lZCIsInNwZWNQb2xpY3kiLCJSZWFjdENsYXNzTWl4aW4iLCJzcGVjIiwidHlwZW9mU3BlYyIsImlzTWl4aW5WYWxpZCIsImF1dG9CaW5kUGFpcnMiLCJfX3JlYWN0QXV0b0JpbmRQYWlycyIsInByb3BlcnR5IiwiaXNSZWFjdENsYXNzTWV0aG9kIiwic2hvdWxkQXV0b0JpbmQiLCJjcmVhdGVDaGFpbmVkRnVuY3Rpb24iLCJpc1Jlc2VydmVkIiwiaXNJbmhlcml0ZWQiLCJtZXJnZUludG9XaXRoTm9EdXBsaWNhdGVLZXlzIiwib25lIiwidHdvIiwibWVyZ2VkUmVzdWx0IiwiY2hhaW5lZEZ1bmN0aW9uIiwiYmluZEF1dG9CaW5kTWV0aG9kIiwiYm91bmRNZXRob2QiLCJfX3JlYWN0Qm91bmRDb250ZXh0IiwiX19yZWFjdEJvdW5kTWV0aG9kIiwiX19yZWFjdEJvdW5kQXJndW1lbnRzIiwiX2JpbmQiLCJuZXdUaGlzIiwicmVib3VuZE1ldGhvZCIsImJpbmRBdXRvQmluZE1ldGhvZHMiLCJwYWlycyIsImF1dG9CaW5kS2V5IiwiSXNNb3VudGVkUHJlTWl4aW4iLCJfX2lzTW91bnRlZCIsIklzTW91bnRlZFBvc3RNaXhpbiIsIm5ld1N0YXRlIiwiX19kaWRXYXJuSXNNb3VudGVkIiwiUmVhY3RDbGFzc0NvbXBvbmVudCIsImluaXRpYWxTdGF0ZSIsIl9pc01vY2tGdW5jdGlvbiIsImNvbXBvbmVudFNob3VsZFVwZGF0ZSIsImNvbXBvbmVudFdpbGxSZWNpZXZlUHJvcHMiLCJfaHlwaGVuUGF0dGVybiIsImNhbWVsaXplIiwiXyIsImNoYXJhY3RlciIsIm1zUGF0dGVybiIsImNhbWVsaXplU3R5bGVOYW1lIiwiaXNUZXh0Tm9kZSIsIm91dGVyTm9kZSIsImlubmVyTm9kZSIsImNvbnRhaW5zIiwiY29tcGFyZURvY3VtZW50UG9zaXRpb24iLCJjYWxsZWUiLCJoYXNBcnJheU5hdHVyZSIsImNyZWF0ZUFycmF5RnJvbU1peGVkIiwiZ2V0TWFya3VwV3JhcCIsImR1bW15Tm9kZSIsIm5vZGVOYW1lUGF0dGVybiIsImdldE5vZGVOYW1lIiwibm9kZU5hbWVNYXRjaCIsImNyZWF0ZU5vZGVzRnJvbU1hcmt1cCIsImhhbmRsZVNjcmlwdCIsIndyYXAiLCJ3cmFwRGVwdGgiLCJzY3JpcHRzIiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJub2RlcyIsImNoaWxkTm9kZXMiLCJzaG91bGRXcmFwIiwic2VsZWN0V3JhcCIsInRhYmxlV3JhcCIsInRyV3JhcCIsInN2Z1dyYXAiLCJtYXJrdXBXcmFwIiwic3ZnRWxlbWVudHMiLCJnZXRVbmJvdW5kZWRTY3JvbGxQb3NpdGlvbiIsInNjcm9sbGFibGUiLCJXaW5kb3ciLCJwYWdlWE9mZnNldCIsInNjcm9sbExlZnQiLCJwYWdlWU9mZnNldCIsInNjcm9sbFRvcCIsIl91cHBlcmNhc2VQYXR0ZXJuIiwiaHlwaGVuYXRlIiwiaHlwaGVuYXRlU3R5bGVOYW1lIiwiTm9kZSIsIm1lbW9pemVTdHJpbmdPbmx5IiwicGVyZm9ybWFuY2UiLCJtc1BlcmZvcm1hbmNlIiwid2Via2l0UGVyZm9ybWFuY2UiLCJwZXJmb3JtYW5jZU5vdyIsIl90eXBlb2YiLCJfaW52YXJpYW50MiIsIl9Mb2NhdGlvblV0aWxzIiwiX2NyZWF0ZVRyYW5zaXRpb25NYW5hZ2VyIiwiX2NyZWF0ZVRyYW5zaXRpb25NYW5hZ2VyMiIsIl9ET01VdGlscyIsIlBvcFN0YXRlRXZlbnQiLCJIYXNoQ2hhbmdlRXZlbnQiLCJnZXRIaXN0b3J5U3RhdGUiLCJjcmVhdGVCcm93c2VySGlzdG9yeSIsImdsb2JhbEhpc3RvcnkiLCJjYW5Vc2VIaXN0b3J5IiwibmVlZHNIYXNoQ2hhbmdlTGlzdGVuZXIiLCJfcHJvcHMkZm9yY2VSZWZyZXNoIiwiZm9yY2VSZWZyZXNoIiwiX3Byb3BzJGdldFVzZXJDb25maXJtIiwiX3Byb3BzJGtleUxlbmd0aCIsImtleUxlbmd0aCIsImJhc2VuYW1lIiwiZ2V0RE9NTG9jYXRpb24iLCJoaXN0b3J5U3RhdGUiLCJfd2luZG93JGxvY2F0aW9uIiwiY3JlYXRlS2V5IiwidHJhbnNpdGlvbk1hbmFnZXIiLCJuZXh0U3RhdGUiLCJoYW5kbGVQb3BTdGF0ZSIsImhhbmRsZVBvcCIsImhhbmRsZUhhc2hDaGFuZ2UiLCJmb3JjZU5leHRQb3AiLCJvayIsInJldmVydFBvcCIsImZyb21Mb2NhdGlvbiIsInRvTG9jYXRpb24iLCJhbGxLZXlzIiwiZGVsdGEiLCJnbyIsImluaXRpYWxMb2NhdGlvbiIsInB1c2hTdGF0ZSIsInByZXZJbmRleCIsIm5leHRLZXlzIiwiZ29CYWNrIiwiZ29Gb3J3YXJkIiwibGlzdGVuZXJDb3VudCIsImNoZWNrRE9NTGlzdGVuZXJzIiwiaXNCbG9ja2VkIiwiYmxvY2siLCJ1bmJsb2NrIiwiSGFzaFBhdGhDb2RlcnMiLCJoYXNoYmFuZyIsImVuY29kZVBhdGgiLCJkZWNvZGVQYXRoIiwibm9zbGFzaCIsInNsYXNoIiwiZ2V0SGFzaFBhdGgiLCJwdXNoSGFzaFBhdGgiLCJyZXBsYWNlSGFzaFBhdGgiLCJjcmVhdGVIYXNoSGlzdG9yeSIsImNhbkdvV2l0aG91dFJlbG9hZCIsIl9wcm9wcyRoYXNoVHlwZSIsImhhc2hUeXBlIiwiX0hhc2hQYXRoQ29kZXJzJGhhc2hUIiwiaWdub3JlUGF0aCIsImVuY29kZWRQYXRoIiwicHJldkxvY2F0aW9uIiwiYWxsUGF0aHMiLCJsYXN0SW5kZXhPZiIsImhhc2hDaGFuZ2VkIiwibmV4dFBhdGhzIiwiY2xhbXAiLCJsb3dlckJvdW5kIiwidXBwZXJCb3VuZCIsIm1heCIsImNyZWF0ZU1lbW9yeUhpc3RvcnkiLCJfcHJvcHMkaW5pdGlhbEVudHJpZXMiLCJpbml0aWFsRW50cmllcyIsIl9wcm9wcyRpbml0aWFsSW5kZXgiLCJpbml0aWFsSW5kZXgiLCJuZXh0SW5kZXgiLCJuZXh0RW50cmllcyIsImNhbkdvIiwibnVsbFRhZyIsInVuZGVmaW5lZFRhZyIsInN5bVRvU3RyaW5nVGFnIiwidG9TdHJpbmdUYWciLCJiYXNlR2V0VGFnIiwiZnJlZUdsb2JhbCIsImdsb2JhbCIsImdldFByb3RvdHlwZSIsImdldFByb3RvdHlwZU9mIiwibmF0aXZlT2JqZWN0VG9TdHJpbmciLCJnZXRSYXdUYWciLCJpc093biIsInVubWFza2VkIiwib2JqZWN0VG9TdHJpbmciLCJvdmVyQXJnIiwidHJhbnNmb3JtIiwiZnJlZVNlbGYiLCJpc09iamVjdExpa2UiLCJ0eXBlU3BlY3MiLCJnZXRTdGFjayIsInR5cGVTcGVjTmFtZSIsImV4Iiwic2hpbSIsImdldFNoaW0iLCJBUklBRE9NUHJvcGVydHlDb25maWciLCJBdXRvRm9jdXNVdGlscyIsImZvY3VzRE9NQ29tcG9uZW50IiwiRmFsbGJhY2tDb21wb3NpdGlvblN0YXRlIiwiU3ludGhldGljQ29tcG9zaXRpb25FdmVudCIsIlN5bnRoZXRpY0lucHV0RXZlbnQiLCJFTkRfS0VZQ09ERVMiLCJTVEFSVF9LRVlDT0RFIiwiY2FuVXNlQ29tcG9zaXRpb25FdmVudCIsImNhblVzZVRleHRJbnB1dEV2ZW50IiwiaXNQcmVzdG8iLCJ1c2VGYWxsYmFja0NvbXBvc2l0aW9uRGF0YSIsIm9wZXJhIiwiU1BBQ0VCQVJfQ09ERSIsIlNQQUNFQkFSX0NIQVIiLCJiZWZvcmVJbnB1dCIsImJ1YmJsZWQiLCJjYXB0dXJlZCIsImNvbXBvc2l0aW9uRW5kIiwiY29tcG9zaXRpb25TdGFydCIsImNvbXBvc2l0aW9uVXBkYXRlIiwiaGFzU3BhY2VLZXlwcmVzcyIsImlzS2V5cHJlc3NDb21tYW5kIiwiZ2V0Q29tcG9zaXRpb25FdmVudFR5cGUiLCJpc0ZhbGxiYWNrQ29tcG9zaXRpb25TdGFydCIsImlzRmFsbGJhY2tDb21wb3NpdGlvbkVuZCIsImdldERhdGFGcm9tQ3VzdG9tRXZlbnQiLCJjdXJyZW50Q29tcG9zaXRpb24iLCJleHRyYWN0Q29tcG9zaXRpb25FdmVudCIsImZhbGxiYWNrRGF0YSIsImdldERhdGEiLCJjdXN0b21EYXRhIiwiZ2V0TmF0aXZlQmVmb3JlSW5wdXRDaGFycyIsIndoaWNoIiwiY2hhcnMiLCJnZXRGYWxsYmFja0JlZm9yZUlucHV0Q2hhcnMiLCJleHRyYWN0QmVmb3JlSW5wdXRFdmVudCIsIkJlZm9yZUlucHV0RXZlbnRQbHVnaW4iLCJkYW5nZXJvdXNTdHlsZVZhbHVlIiwicHJvY2Vzc1N0eWxlTmFtZSIsInN0eWxlTmFtZSIsImhhc1Nob3J0aGFuZFByb3BlcnR5QnVnIiwic3R5bGVGbG9hdEFjY2Vzc29yIiwidGVtcFN0eWxlIiwic3R5bGUiLCJjc3NGbG9hdCIsImJhZFZlbmRvcmVkU3R5bGVOYW1lUGF0dGVybiIsImJhZFN0eWxlVmFsdWVXaXRoU2VtaWNvbG9uUGF0dGVybiIsIndhcm5lZFN0eWxlTmFtZXMiLCJ3YXJuZWRTdHlsZVZhbHVlcyIsIndhcm5lZEZvck5hTlZhbHVlIiwid2Fybkh5cGhlbmF0ZWRTdHlsZU5hbWUiLCJjaGVja1JlbmRlck1lc3NhZ2UiLCJ3YXJuQmFkVmVuZG9yZWRTdHlsZU5hbWUiLCJ3YXJuU3R5bGVWYWx1ZVdpdGhTZW1pY29sb24iLCJ3YXJuU3R5bGVWYWx1ZUlzTmFOIiwid2FyblZhbGlkU3R5bGUiLCJDU1NQcm9wZXJ0eU9wZXJhdGlvbnMiLCJjcmVhdGVNYXJrdXBGb3JTdHlsZXMiLCJzdHlsZXMiLCJzZXJpYWxpemVkIiwiaXNDdXN0b21Qcm9wZXJ0eSIsInN0eWxlVmFsdWUiLCJzZXRWYWx1ZUZvclN0eWxlcyIsInNldFByb3BlcnR5IiwiZXhwYW5zaW9uIiwiaW5kaXZpZHVhbFN0eWxlTmFtZSIsImNoYW5nZSIsImNyZWF0ZUFuZEFjY3VtdWxhdGVDaGFuZ2VFdmVudCIsImFjdGl2ZUVsZW1lbnRJbnN0Iiwic2hvdWxkVXNlQ2hhbmdlRXZlbnQiLCJkb2VzQ2hhbmdlRXZlbnRCdWJibGUiLCJtYW51YWxEaXNwYXRjaENoYW5nZUV2ZW50IiwicnVuRXZlbnRJbkJhdGNoIiwic3RhcnRXYXRjaGluZ0ZvckNoYW5nZUV2ZW50SUU4Iiwic3RvcFdhdGNoaW5nRm9yQ2hhbmdlRXZlbnRJRTgiLCJnZXRJbnN0SWZWYWx1ZUNoYW5nZWQiLCJ1cGRhdGVkIiwiQ2hhbmdlRXZlbnRQbHVnaW4iLCJfYWxsb3dTaW11bGF0ZWRQYXNzVGhyb3VnaCIsImdldFRhcmdldEluc3RGb3JDaGFuZ2VFdmVudCIsImhhbmRsZUV2ZW50c0ZvckNoYW5nZUV2ZW50SUU4IiwiaXNJbnB1dEV2ZW50U3VwcG9ydGVkIiwic3RhcnRXYXRjaGluZ0ZvclZhbHVlQ2hhbmdlIiwiaGFuZGxlUHJvcGVydHlDaGFuZ2UiLCJzdG9wV2F0Y2hpbmdGb3JWYWx1ZUNoYW5nZSIsImhhbmRsZUV2ZW50c0ZvcklucHV0RXZlbnRQb2x5ZmlsbCIsImdldFRhcmdldEluc3RGb3JJbnB1dEV2ZW50UG9seWZpbGwiLCJzaG91bGRVc2VDbGlja0V2ZW50IiwiZ2V0VGFyZ2V0SW5zdEZvckNsaWNrRXZlbnQiLCJnZXRUYXJnZXRJbnN0Rm9ySW5wdXRPckNoYW5nZUV2ZW50IiwiaGFuZGxlQ29udHJvbGxlZElucHV0Qmx1ciIsImNvbnRyb2xsZWQiLCJfaXNJbnB1dEV2ZW50U3VwcG9ydGVkIiwidGFyZ2V0Tm9kZSIsImdldFRhcmdldEluc3RGdW5jIiwiaGFuZGxlRXZlbnRGdW5jIiwibmV3Q2hpbGQiLCJEZWZhdWx0RXZlbnRQbHVnaW5PcmRlciIsIm1vdXNlRW50ZXIiLCJtb3VzZUxlYXZlIiwiRW50ZXJMZWF2ZUV2ZW50UGx1Z2luIiwid2luIiwicmVsYXRlZCIsInRvTm9kZSIsIl9yb290IiwiX3N0YXJ0VGV4dCIsIl9mYWxsYmFja1RleHQiLCJzdGFydFZhbHVlIiwic3RhcnRMZW5ndGgiLCJlbmRWYWx1ZSIsImVuZExlbmd0aCIsIm1pbkVuZCIsInNsaWNlVGFpbCIsIkhUTUxET01Qcm9wZXJ0eUNvbmZpZyIsImFjY2VwdCIsImFjY2VwdENoYXJzZXQiLCJhY2Nlc3NLZXkiLCJhbGxvd0Z1bGxTY3JlZW4iLCJhbGxvd1RyYW5zcGFyZW5jeSIsImFsdCIsImFzIiwiYXN5bmMiLCJhdXRvQ29tcGxldGUiLCJhdXRvUGxheSIsImNlbGxQYWRkaW5nIiwiY2VsbFNwYWNpbmciLCJjaGFyU2V0IiwiY2hhbGxlbmdlIiwiY2l0ZSIsImNsYXNzSUQiLCJjbGFzc05hbWUiLCJjb2xzIiwiY29sU3BhbiIsImNvbnRleHRNZW51IiwiY29udHJvbHMiLCJjb29yZHMiLCJjcm9zc09yaWdpbiIsImRhdGVUaW1lIiwiZGVmZXIiLCJkb3dubG9hZCIsImRyYWdnYWJsZSIsImVuY1R5cGUiLCJmb3JtIiwiZm9ybUFjdGlvbiIsImZvcm1FbmNUeXBlIiwiZm9ybU1ldGhvZCIsImZvcm1Ob1ZhbGlkYXRlIiwiZm9ybVRhcmdldCIsImZyYW1lQm9yZGVyIiwiaGVhZGVycyIsImhlaWdodCIsImhpZ2giLCJocmVmTGFuZyIsImh0bWxGb3IiLCJodHRwRXF1aXYiLCJpY29uIiwiaW5wdXRNb2RlIiwiaW50ZWdyaXR5Iiwia2V5UGFyYW1zIiwia2V5VHlwZSIsImtpbmQiLCJsYWJlbCIsImxhbmciLCJsaXN0IiwibG9vcCIsImxvdyIsIm1hbmlmZXN0IiwibWFyZ2luSGVpZ2h0IiwibWFyZ2luV2lkdGgiLCJtYXhMZW5ndGgiLCJtZWRpYSIsIm1lZGlhR3JvdXAiLCJtaW5MZW5ndGgiLCJtdXRlZCIsIm5vbmNlIiwibm9WYWxpZGF0ZSIsIm9wZW4iLCJvcHRpbXVtIiwicGxhY2Vob2xkZXIiLCJwbGF5c0lubGluZSIsInBvc3RlciIsInByZWxvYWQiLCJwcm9maWxlIiwicmFkaW9Hcm91cCIsInJlZmVycmVyUG9saWN5IiwicmVsIiwicmVxdWlyZWQiLCJyZXZlcnNlZCIsInJvbGUiLCJyb3dzIiwicm93U3BhbiIsInNhbmRib3giLCJzY29wZWQiLCJzY3JvbGxpbmciLCJzZWFtbGVzcyIsInNpemUiLCJzaXplcyIsInNwYW4iLCJzcGVsbENoZWNrIiwic3JjIiwic3JjRG9jIiwic3JjTGFuZyIsInNyY1NldCIsInN1bW1hcnkiLCJ0YWJJbmRleCIsInVzZU1hcCIsIndpZHRoIiwid21vZGUiLCJhYm91dCIsImRhdGF0eXBlIiwiaW5saXN0IiwicmVzb3VyY2UiLCJ2b2NhYiIsImF1dG9DYXBpdGFsaXplIiwiYXV0b0NvcnJlY3QiLCJhdXRvU2F2ZSIsIml0ZW1Qcm9wIiwiaXRlbVNjb3BlIiwiaXRlbVR5cGUiLCJpdGVtSUQiLCJpdGVtUmVmIiwicmVzdWx0cyIsInNlY3VyaXR5IiwidW5zZWxlY3RhYmxlIiwidmFsaWRpdHkiLCJiYWRJbnB1dCIsImluc3RhbnRpYXRlQ2hpbGQiLCJjaGlsZEluc3RhbmNlcyIsInNlbGZEZWJ1Z0lEIiwia2V5VW5pcXVlIiwiUmVhY3RDaGlsZFJlY29uY2lsZXIiLCJpbnN0YW50aWF0ZUNoaWxkcmVuIiwibmVzdGVkQ2hpbGROb2RlcyIsImNoaWxkSW5zdHMiLCJ1cGRhdGVDaGlsZHJlbiIsInByZXZDaGlsZHJlbiIsIm5leHRDaGlsZHJlbiIsIm1vdW50SW1hZ2VzIiwicmVtb3ZlZE5vZGVzIiwicHJldkNoaWxkIiwibmV4dENoaWxkSW5zdGFuY2UiLCJuZXh0Q2hpbGRNb3VudEltYWdlIiwidW5tb3VudENoaWxkcmVuIiwicmVuZGVyZWRDaGlsZHJlbiIsInJlbmRlcmVkQ2hpbGQiLCJSZWFjdERPTUlET3BlcmF0aW9ucyIsIlJlYWN0Q29tcG9uZW50QnJvd3NlckVudmlyb25tZW50IiwiZGFuZ2Vyb3VzbHlQcm9jZXNzQ2hpbGRyZW5VcGRhdGVzIiwiQ29tcG9zaXRlVHlwZXMiLCJJbXB1cmVDbGFzcyIsIlB1cmVDbGFzcyIsIlN0YXRlbGVzc0Z1bmN0aW9uYWwiLCJTdGF0ZWxlc3NDb21wb25lbnQiLCJ3YXJuSWZJbnZhbGlkRWxlbWVudCIsInNob3VsZENvbnN0cnVjdCIsImlzUHVyZUNvbXBvbmVudCIsIm1lYXN1cmVMaWZlQ3ljbGVQZXJmIiwiZGVidWdJRCIsInRpbWVyVHlwZSIsIm9uQmVnaW5MaWZlQ3ljbGVUaW1lciIsIm9uRW5kTGlmZUN5Y2xlVGltZXIiLCJuZXh0TW91bnRJRCIsIl9jb21wb3NpdGVUeXBlIiwiX2NhbGxlZENvbXBvbmVudFdpbGxVbm1vdW50IiwicHVibGljUHJvcHMiLCJwdWJsaWNDb250ZXh0IiwiX3Byb2Nlc3NDb250ZXh0IiwidXBkYXRlUXVldWUiLCJnZXRVcGRhdGVRdWV1ZSIsImRvQ29uc3RydWN0IiwiX2NvbnN0cnVjdENvbXBvbmVudCIsInJlbmRlcmVkRWxlbWVudCIsInByb3BzTXV0YXRlZCIsImNvbXBvbmVudERpZFVubW91bnQiLCJ1bnN0YWJsZV9oYW5kbGVFcnJvciIsInBlcmZvcm1Jbml0aWFsTW91bnRXaXRoRXJyb3JIYW5kbGluZyIsInBlcmZvcm1Jbml0aWFsTW91bnQiLCJfY29uc3RydWN0Q29tcG9uZW50V2l0aG91dE93bmVyIiwiX3Byb2Nlc3NQZW5kaW5nU3RhdGUiLCJfcmVuZGVyVmFsaWRhdGVkQ29tcG9uZW50IiwiY2hpbGREZWJ1Z0lEcyIsIl9tYXNrQ29udGV4dCIsIm1hc2tlZENvbnRleHQiLCJjb250ZXh0TmFtZSIsIl9jaGVja0NvbnRleHRUeXBlcyIsImN1cnJlbnRDb250ZXh0Iiwib25CZWdpblByb2Nlc3NpbmdDaGlsZENvbnRleHQiLCJvbkVuZFByb2Nlc3NpbmdDaGlsZENvbnRleHQiLCJwcmV2Q29udGV4dCIsInByZXZQYXJlbnRFbGVtZW50IiwibmV4dFBhcmVudEVsZW1lbnQiLCJwcmV2VW5tYXNrZWRDb250ZXh0IiwibmV4dFVubWFza2VkQ29udGV4dCIsIndpbGxSZWNlaXZlIiwicHJldlByb3BzIiwic2hvdWxkVXBkYXRlIiwiX3BlcmZvcm1Db21wb25lbnRVcGRhdGUiLCJwYXJ0aWFsIiwidW5tYXNrZWRDb250ZXh0IiwiaGFzQ29tcG9uZW50RGlkVXBkYXRlIiwicHJldlN0YXRlIiwiX3VwZGF0ZVJlbmRlcmVkQ29tcG9uZW50IiwicHJldkNvbXBvbmVudEluc3RhbmNlIiwicHJldlJlbmRlcmVkRWxlbWVudCIsIm5leHRSZW5kZXJlZEVsZW1lbnQiLCJvbGRIb3N0Tm9kZSIsIm5leHRNYXJrdXAiLCJfcmVwbGFjZU5vZGVXaXRoTWFya3VwIiwiX3JlbmRlclZhbGlkYXRlZENvbXBvbmVudFdpdGhvdXRPd25lck9yQ29udGV4dCIsImF0dGFjaFJlZiIsInB1YmxpY0NvbXBvbmVudEluc3RhbmNlIiwiZGV0YWNoUmVmIiwiUmVhY3REZWZhdWx0SW5qZWN0aW9uIiwiZmluZERPTU5vZGUiLCJpbmplY3QiLCJSZWFjdERPTSIsInVuc3RhYmxlX2JhdGNoZWRVcGRhdGVzIiwidW5zdGFibGVfcmVuZGVyU3VidHJlZUludG9Db250YWluZXIiLCJfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18iLCJNb3VudCIsIlJlY29uY2lsZXIiLCJ0b3AiLCJzaG93RmlsZVVybE1lc3NhZ2UiLCJwcm90b2NvbCIsImRlYnVnIiwidGVzdEZ1bmMiLCJ0ZXN0Rm4iLCJpZUNvbXBhdGliaWxpdHlNb2RlIiwiZXhwZWN0ZWRGZWF0dXJlcyIsInRyaW0iLCJSZWFjdERPTVVua25vd25Qcm9wZXJ0eUhvb2siLCJSZWFjdERPTU51bGxJbnB1dFZhbHVlUHJvcEhvb2siLCJSZWFjdERPTUludmFsaWRBUklBSG9vayIsImFkZEhvb2siLCJSZWFjdERPTUlucHV0IiwiUmVhY3RET01PcHRpb24iLCJSZWFjdERPTVRleHRhcmVhIiwiUmVhY3RNdWx0aUNoaWxkIiwiUmVhY3RTZXJ2ZXJSZW5kZXJpbmdUcmFuc2FjdGlvbiIsImdldE5vZGUiLCJDT05URU5UX1RZUEVTIiwiU1RZTEUiLCJIVE1MIiwiZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwiLCJzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmciLCJET0NfRlJBR01FTlRfVFlQRSIsImZyaWVuZGx5U3RyaW5naWZ5Iiwia2V5RXNjYXBlZCIsInN0eWxlTXV0YXRpb25XYXJuaW5nIiwiY2hlY2tBbmRXYXJuRm9yTXV0YXRlZFN0eWxlIiwic3R5bGUxIiwic3R5bGUyIiwiX3RhZyIsImFzc2VydFZhbGlkUHJvcHMiLCJ2b2lkRWxlbWVudFRhZ3MiLCJvbkZvY3VzSW4iLCJvbkZvY3VzT3V0IiwiZW5xdWV1ZVB1dExpc3RlbmVyIiwiY29udGFpbmVySW5mbyIsImlzRG9jdW1lbnRGcmFnbWVudCIsIl9ub2RlIiwiX293bmVyRG9jdW1lbnQiLCJsaXN0ZW5lclRvUHV0IiwiaW5wdXRQb3N0TW91bnQiLCJwb3N0TW91bnRXcmFwcGVyIiwidGV4dGFyZWFQb3N0TW91bnQiLCJvcHRpb25Qb3N0TW91bnQiLCJzZXRBbmRWYWxpZGF0ZUNvbnRlbnRDaGlsZERldiIsImhhc0V4aXN0aW5nQ29udGVudCIsIl9jb250ZW50RGVidWdJRCIsImNvbnRlbnREZWJ1Z0lEIiwiX2FuY2VzdG9ySW5mbyIsIm1lZGlhRXZlbnRzIiwidHJhY2tJbnB1dFZhbHVlIiwidHJhcEJ1YmJsZWRFdmVudHNMb2NhbCIsInBvc3RVcGRhdGVTZWxlY3RXcmFwcGVyIiwib21pdHRlZENsb3NlVGFncyIsImFyZWEiLCJiYXNlIiwiYnIiLCJjb2wiLCJlbWJlZCIsImhyIiwiaW1nIiwia2V5Z2VuIiwibGluayIsIm1ldGEiLCJwYXJhbSIsIndiciIsIm5ld2xpbmVFYXRpbmdUYWdzIiwibGlzdGluZyIsInByZSIsInRleHRhcmVhIiwibWVudWl0ZW0iLCJWQUxJRF9UQUdfUkVHRVgiLCJ2YWxpZGF0ZWRUYWdDYWNoZSIsInZhbGlkYXRlRGFuZ2Vyb3VzVGFnIiwiaXNDdXN0b21Db21wb25lbnQiLCJnbG9iYWxJZENvdW50ZXIiLCJSZWFjdERPTUNvbXBvbmVudCIsIl9uYW1lc3BhY2VVUkkiLCJfcHJldmlvdXNTdHlsZSIsIl9wcmV2aW91c1N0eWxlQ29weSIsIk1peGluIiwiX2lkQ291bnRlciIsIm1vdW50SW1hZ2UiLCJlbCIsImRpdiIsImNyZWF0ZUVsZW1lbnROUyIsIl91cGRhdGVET01Qcm9wZXJ0aWVzIiwibGF6eVRyZWUiLCJfY3JlYXRlSW5pdGlhbENoaWxkcmVuIiwidGFnT3BlbiIsIl9jcmVhdGVPcGVuVGFnTWFya3VwQW5kUHV0TGlzdGVuZXJzIiwidGFnQ29udGVudCIsIl9jcmVhdGVDb250ZW50TWFya3VwIiwiYXV0b0ZvY3VzIiwicHJvcEtleSIsInJlbmRlclRvU3RhdGljTWFya3VwIiwiX19odG1sIiwiY29udGVudFRvVXNlIiwiY2hpbGRyZW5Ub1VzZSIsIm1vdW50Q2hpbGRyZW4iLCJsYXN0UHJvcHMiLCJfdXBkYXRlRE9NQ2hpbGRyZW4iLCJ1cGRhdGVXcmFwcGVyIiwic3R5bGVVcGRhdGVzIiwibGFzdFN0eWxlIiwibmV4dFByb3AiLCJsYXN0UHJvcCIsImxhc3RDb250ZW50IiwibmV4dENvbnRlbnQiLCJsYXN0SHRtbCIsIm5leHRIdG1sIiwibGFzdENoaWxkcmVuIiwibGFzdEhhc0NvbnRlbnRPckh0bWwiLCJuZXh0SGFzQ29udGVudE9ySHRtbCIsInVwZGF0ZVRleHRDb250ZW50IiwidXBkYXRlTWFya3VwIiwidG9wTGV2ZWxXcmFwcGVyIiwiUmVhY3RET01FbXB0eUNvbXBvbmVudCIsImRvbUlEIiwiY3JlYXRlQ29tbWVudCIsInVzZUZpYmVyIiwiZGlkV2FybkNoZWNrZWRMaW5rIiwiZGlkV2FybkNoZWNrZWREZWZhdWx0Q2hlY2tlZCIsImRpZFdhcm5Db250cm9sbGVkVG9VbmNvbnRyb2xsZWQiLCJkaWRXYXJuVW5jb250cm9sbGVkVG9Db250cm9sbGVkIiwiZm9yY2VVcGRhdGVJZk1vdW50ZWQiLCJpc0NvbnRyb2xsZWQiLCJ1c2VzQ2hlY2tlZCIsImhvc3RQcm9wcyIsImRlZmF1bHRDaGVja2VkIiwiaW5pdGlhbENoZWNrZWQiLCJ2YWx1ZUFzTnVtYmVyIiwicGFyc2VGbG9hdCIsInJvb3ROb2RlIiwicXVlcnlSb290IiwiZ3JvdXAiLCJxdWVyeVNlbGVjdG9yQWxsIiwib3RoZXJOb2RlIiwib3RoZXJJbnN0YW5jZSIsIndhcm5lZFByb3BlcnRpZXMiLCJyQVJJQSIsInZhbGlkYXRlUHJvcGVydHkiLCJzdGFuZGFyZE5hbWUiLCJ3YXJuSW52YWxpZEFSSUFQcm9wcyIsImludmFsaWRQcm9wcyIsImlzVmFsaWQiLCJ1bmtub3duUHJvcFN0cmluZyIsImhhbmRsZUVsZW1lbnQiLCJkaWRXYXJuVmFsdWVOdWxsIiwiZGlkV2FybkludmFsaWRPcHRpb25DaGlsZHJlbiIsImZsYXR0ZW5DaGlsZHJlbiIsInNlbGVjdFZhbHVlIiwic2VsZWN0UGFyZW50IiwiZ2V0Tm9kZUZvckNoYXJhY3Rlck9mZnNldCIsImlzQ29sbGFwc2VkIiwiYW5jaG9yTm9kZSIsImFuY2hvck9mZnNldCIsImZvY3VzT2Zmc2V0IiwiZ2V0SUVPZmZzZXRzIiwic2VsZWN0ZWRSYW5nZSIsInNlbGVjdGVkTGVuZ3RoIiwiZnJvbVN0YXJ0IiwiZHVwbGljYXRlIiwibW92ZVRvRWxlbWVudFRleHQiLCJzZXRFbmRQb2ludCIsInN0YXJ0T2Zmc2V0IiwiZW5kT2Zmc2V0IiwiZ2V0TW9kZXJuT2Zmc2V0cyIsInJhbmdlQ291bnQiLCJjdXJyZW50UmFuZ2UiLCJnZXRSYW5nZUF0Iiwic3RhcnRDb250YWluZXIiLCJlbmRDb250YWluZXIiLCJpc1NlbGVjdGlvbkNvbGxhcHNlZCIsInJhbmdlTGVuZ3RoIiwidGVtcFJhbmdlIiwiY2xvbmVSYW5nZSIsInNlbGVjdE5vZGVDb250ZW50cyIsInNldEVuZCIsImlzVGVtcFJhbmdlQ29sbGFwc2VkIiwiZGV0ZWN0aW9uUmFuZ2UiLCJzZXRTdGFydCIsImlzQmFja3dhcmQiLCJjb2xsYXBzZWQiLCJzZXRJRU9mZnNldHMiLCJzZXRNb2Rlcm5PZmZzZXRzIiwiZXh0ZW5kIiwidGVtcCIsInN0YXJ0TWFya2VyIiwiZW5kTWFya2VyIiwib2Zmc2V0IiwicmVtb3ZlQWxsUmFuZ2VzIiwiYWRkUmFuZ2UiLCJ1c2VJRU9mZnNldHMiLCJSZWFjdERPTVRleHRDb21wb25lbnQiLCJfc3RyaW5nVGV4dCIsIl9jbG9zaW5nQ29tbWVudCIsIl9jb21tZW50Tm9kZXMiLCJvcGVuaW5nVmFsdWUiLCJjbG9zaW5nVmFsdWUiLCJjcmVhdGVEb2N1bWVudEZyYWdtZW50IiwiZXNjYXBlZFRleHQiLCJuZXh0VGV4dCIsIm5leHRTdHJpbmdUZXh0IiwiY29tbWVudE5vZGVzIiwiZGlkV2FyblZhbERlZmF1bHRWYWwiLCJuZXdWYWx1ZSIsImluc3RBIiwiaW5zdEIiLCJkZXB0aEEiLCJ0ZW1wQSIsImRlcHRoQiIsInRlbXBCIiwiZGVwdGgiLCJjb21tb24iLCJwYXRoRnJvbSIsInBhdGhUbyIsInJlYWN0UHJvcHMiLCJ3YXJuVW5rbm93blByb3BlcnRpZXMiLCJ1bmtub3duUHJvcHMiLCJSZWFjdEludmFsaWRTZXRTdGF0ZVdhcm5pbmdIb29rIiwiUmVhY3RIb3N0T3BlcmF0aW9uSGlzdG9yeUhvb2siLCJob29rcyIsImRpZEhvb2tUaHJvd0ZvckV2ZW50IiwiY2FsbEhvb2siLCJhcmc0IiwiYXJnNSIsImVtaXRFdmVudCIsImhvb2siLCJpc1Byb2ZpbGluZyIsImZsdXNoSGlzdG9yeSIsImxpZmVDeWNsZVRpbWVyU3RhY2siLCJjdXJyZW50Rmx1c2hOZXN0aW5nIiwiY3VycmVudEZsdXNoTWVhc3VyZW1lbnRzIiwiY3VycmVudEZsdXNoU3RhcnRUaW1lIiwiY3VycmVudFRpbWVyRGVidWdJRCIsImN1cnJlbnRUaW1lclN0YXJ0VGltZSIsImN1cnJlbnRUaW1lck5lc3RlZEZsdXNoRHVyYXRpb24iLCJjdXJyZW50VGltZXJUeXBlIiwibGlmZUN5Y2xlVGltZXJIYXNXYXJuZWQiLCJjbGVhckhpc3RvcnkiLCJnZXRUcmVlU25hcHNob3QiLCJyZWdpc3RlcmVkSURzIiwicmVzZXRNZWFzdXJlbWVudHMiLCJwcmV2aW91c1N0YXJ0VGltZSIsInByZXZpb3VzTWVhc3VyZW1lbnRzIiwicHJldmlvdXNPcGVyYXRpb25zIiwiZ2V0SGlzdG9yeSIsImR1cmF0aW9uIiwibWVhc3VyZW1lbnRzIiwib3BlcmF0aW9ucyIsInRyZWVTbmFwc2hvdCIsImNoZWNrRGVidWdJRCIsImFsbG93Um9vdCIsImJlZ2luTGlmZUN5Y2xlVGltZXIiLCJlbmRMaWZlQ3ljbGVUaW1lciIsInBhdXNlQ3VycmVudExpZmVDeWNsZVRpbWVyIiwiY3VycmVudFRpbWVyIiwic3RhcnRUaW1lIiwibmVzdGVkRmx1c2hTdGFydFRpbWUiLCJyZXN1bWVDdXJyZW50TGlmZUN5Y2xlVGltZXIiLCJfbGlmZUN5Y2xlVGltZXJTdGFjayQiLCJuZXN0ZWRGbHVzaER1cmF0aW9uIiwibGFzdE1hcmtUaW1lU3RhbXAiLCJjYW5Vc2VQZXJmb3JtYW5jZU1lYXN1cmUiLCJtYXJrIiwiY2xlYXJNYXJrcyIsIm1lYXN1cmUiLCJjbGVhck1lYXN1cmVzIiwic2hvdWxkTWFyayIsImlzSG9zdEVsZW1lbnQiLCJtYXJrQmVnaW4iLCJtYXJrVHlwZSIsIm1hcmtOYW1lIiwibWFya0VuZCIsIm1lYXN1cmVtZW50TmFtZSIsInJlbW92ZUhvb2siLCJiZWdpblByb2ZpbGluZyIsImVuZFByb2ZpbGluZyIsImdldEZsdXNoSGlzdG9yeSIsIm9wZXJhdGlvbiIsIm9uVGVzdEV2ZW50IiwiYWRkRGV2dG9vbCIsInJlbW92ZURldnRvb2wiLCJSRVNFVF9CQVRDSEVEX1VQREFURVMiLCJSZWFjdERlZmF1bHRCYXRjaGluZ1N0cmF0ZWd5IiwiRkxVU0hfQkFUQ0hFRF9VUERBVEVTIiwiUmVhY3REZWZhdWx0QmF0Y2hpbmdTdHJhdGVneVRyYW5zYWN0aW9uIiwiYWxyZWFkeUJhdGNoaW5nVXBkYXRlcyIsIlJlYWN0RE9NVHJlZVRyYXZlcnNhbCIsIlJlYWN0SW5qZWN0aW9uIiwiU1ZHRE9NUHJvcGVydHlDb25maWciLCJTZWxlY3RFdmVudFBsdWdpbiIsIlNpbXBsZUV2ZW50UGx1Z2luIiwiYWxyZWFkeUluamVjdGVkIiwiRXZlbnRFbWl0dGVyIiwiSG9zdENvbXBvbmVudCIsIkVtcHR5Q29tcG9uZW50IiwiVXBkYXRlcyIsInJ1bkV2ZW50UXVldWVJbkJhdGNoIiwiZmluZFBhcmVudCIsIlRvcExldmVsQ2FsbGJhY2tCb29rS2VlcGluZyIsImFuY2VzdG9ycyIsImhhbmRsZVRvcExldmVsSW1wbCIsImJvb2tLZWVwaW5nIiwiYW5jZXN0b3IiLCJfaGFuZGxlVG9wTGV2ZWwiLCJzY3JvbGxWYWx1ZU1vbml0b3IiLCJfZW5hYmxlZCIsIl9wcmV2ZW50Q2xlYXJpbmciLCJwcm9jZXNzaW5nQ2hpbGRDb250ZXh0Iiwid2FybkludmFsaWRTZXRTdGF0ZSIsImFkbGVyMzIiLCJUQUdfRU5EIiwiQ09NTUVOVF9TVEFSVCIsImFkZENoZWNrc3VtVG9NYXJrdXAiLCJleGlzdGluZ0NoZWNrc3VtIiwibWFya3VwQ2hlY2tzdW0iLCJtYWtlSW5zZXJ0TWFya3VwIiwibWFrZU1vdmUiLCJtYWtlUmVtb3ZlIiwibWFrZVNldE1hcmt1cCIsIm1ha2VUZXh0Q29udGVudCIsInByb2Nlc3NRdWV1ZSIsInNldENoaWxkcmVuRm9ySW5zdHJ1bWVudGF0aW9uIiwiZ2V0RGVidWdJRCIsImludGVybmFsIiwiX3JlY29uY2lsZXJJbnN0YW50aWF0ZUNoaWxkcmVuIiwibmVzdGVkQ2hpbGRyZW4iLCJfcmVjb25jaWxlclVwZGF0ZUNoaWxkcmVuIiwibmV4dE5lc3RlZENoaWxkcmVuRWxlbWVudHMiLCJfdXBkYXRlQ2hpbGRyZW4iLCJuZXh0TW91bnRJbmRleCIsImxhc3RQbGFjZWROb2RlIiwiX21vdW50Q2hpbGRBdEluZGV4IiwiX3VubW91bnRDaGlsZCIsImNyZWF0ZUNoaWxkIiwiaXNWYWxpZE93bmVyIiwiUmVhY3RPd25lciIsImFkZENvbXBvbmVudEFzUmVmVG8iLCJyZW1vdmVDb21wb25lbnRBc1JlZkZyb20iLCJvd25lclB1YmxpY0luc3RhbmNlIiwiU0VMRUNUSU9OX1JFU1RPUkFUSU9OIiwiRVZFTlRfU1VQUFJFU1NJT04iLCJjdXJyZW50bHlFbmFibGVkIiwicHJldmlvdXNseUVuYWJsZWQiLCJPTl9ET01fUkVBRFlfUVVFVUVJTkciLCJyZWFjdE1vdW50UmVhZHkiLCJwcmV2UmVmIiwicHJldk93bmVyIiwibmV4dFJlZiIsIm5leHRPd25lciIsIlJlYWN0U2VydmVyVXBkYXRlUXVldWUiLCJub29wQ2FsbGJhY2tRdWV1ZSIsIk5TIiwieGxpbmsiLCJ4bWwiLCJBVFRSUyIsImFjY2VudEhlaWdodCIsImFjY3VtdWxhdGUiLCJhZGRpdGl2ZSIsImFsaWdubWVudEJhc2VsaW5lIiwiYWxsb3dSZW9yZGVyIiwiYWxwaGFiZXRpYyIsImFtcGxpdHVkZSIsImFyYWJpY0Zvcm0iLCJhc2NlbnQiLCJhdHRyaWJ1dGVUeXBlIiwiYXV0b1JldmVyc2UiLCJhemltdXRoIiwiYmFzZUZyZXF1ZW5jeSIsImJhc2VQcm9maWxlIiwiYmFzZWxpbmVTaGlmdCIsImJib3giLCJiZWdpbiIsImJpYXMiLCJieSIsImNhbGNNb2RlIiwiY2FwSGVpZ2h0IiwiY2xpcCIsImNsaXBQYXRoIiwiY2xpcFJ1bGUiLCJjbGlwUGF0aFVuaXRzIiwiY29sb3JJbnRlcnBvbGF0aW9uIiwiY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVycyIsImNvbG9yUHJvZmlsZSIsImNvbG9yUmVuZGVyaW5nIiwiY29udGVudFNjcmlwdFR5cGUiLCJjb250ZW50U3R5bGVUeXBlIiwiY3Vyc29yIiwiY3giLCJjeSIsImRlY2VsZXJhdGUiLCJkZXNjZW50IiwiZGlmZnVzZUNvbnN0YW50IiwiZGlyZWN0aW9uIiwiZGlzcGxheSIsImRpdmlzb3IiLCJkb21pbmFudEJhc2VsaW5lIiwiZHVyIiwiZHgiLCJkeSIsImVkZ2VNb2RlIiwiZWxldmF0aW9uIiwiZW5hYmxlQmFja2dyb3VuZCIsImV4cG9uZW50IiwiZXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCIsImZpbGwiLCJmaWxsUnVsZSIsImZpbHRlclJlcyIsImZpbHRlclVuaXRzIiwiZmxvb2RDb2xvciIsImZvY3VzYWJsZSIsImZvbnRTaXplQWRqdXN0IiwiZm9udFN0cmV0Y2giLCJmeCIsImZ5IiwiZzEiLCJnMiIsImdseXBoTmFtZSIsImdseXBoT3JpZW50YXRpb25Ib3Jpem9udGFsIiwiZ2x5cGhPcmllbnRhdGlvblZlcnRpY2FsIiwiZ2x5cGhSZWYiLCJncmFkaWVudFRyYW5zZm9ybSIsImdyYWRpZW50VW5pdHMiLCJoYW5naW5nIiwiaG9yaXpBZHZYIiwiaG9yaXpPcmlnaW5YIiwiaWRlb2dyYXBoaWMiLCJpbWFnZVJlbmRlcmluZyIsImluMiIsImludGVyY2VwdCIsImsxIiwiazIiLCJrMyIsIms0Iiwia2VybmVsTWF0cml4Iiwia2VybmVsVW5pdExlbmd0aCIsImtlcm5pbmciLCJrZXlQb2ludHMiLCJrZXlTcGxpbmVzIiwia2V5VGltZXMiLCJsZW5ndGhBZGp1c3QiLCJsZXR0ZXJTcGFjaW5nIiwibGlnaHRpbmdDb2xvciIsImxpbWl0aW5nQ29uZUFuZ2xlIiwibG9jYWwiLCJtYXJrZXJFbmQiLCJtYXJrZXJNaWQiLCJtYXJrZXJTdGFydCIsIm1hcmtlckhlaWdodCIsIm1hcmtlclVuaXRzIiwibWFya2VyV2lkdGgiLCJtYXNrIiwibWFza0NvbnRlbnRVbml0cyIsIm1hc2tVbml0cyIsIm1hdGhlbWF0aWNhbCIsIm1vZGUiLCJudW1PY3RhdmVzIiwib3BlcmF0b3IiLCJvcmllbnQiLCJvcmllbnRhdGlvbiIsIm92ZXJmbG93Iiwib3ZlcmxpbmVQb3NpdGlvbiIsIm92ZXJsaW5lVGhpY2tuZXNzIiwicGFpbnRPcmRlciIsInBhbm9zZTEiLCJwYXRoTGVuZ3RoIiwicGF0dGVybkNvbnRlbnRVbml0cyIsInBhdHRlcm5UcmFuc2Zvcm0iLCJwYXR0ZXJuVW5pdHMiLCJwb2ludGVyRXZlbnRzIiwicG9pbnRzIiwicG9pbnRzQXRYIiwicG9pbnRzQXRZIiwicG9pbnRzQXRaIiwicHJlc2VydmVBbHBoYSIsInByZXNlcnZlQXNwZWN0UmF0aW8iLCJwcmltaXRpdmVVbml0cyIsInIiLCJyYWRpdXMiLCJyZWZYIiwicmVmWSIsInJlbmRlcmluZ0ludGVudCIsInJlcGVhdENvdW50IiwicmVwZWF0RHVyIiwicmVxdWlyZWRFeHRlbnNpb25zIiwicmVxdWlyZWRGZWF0dXJlcyIsInJlc3RhcnQiLCJyb3RhdGUiLCJyeCIsInJ5Iiwic2NhbGUiLCJzZWVkIiwic2hhcGVSZW5kZXJpbmciLCJzbG9wZSIsInNwYWNpbmciLCJzcGVjdWxhckNvbnN0YW50Iiwic3BlY3VsYXJFeHBvbmVudCIsInNwZWVkIiwic3ByZWFkTWV0aG9kIiwic3RkRGV2aWF0aW9uIiwic3RlbWgiLCJzdGVtdiIsInN0aXRjaFRpbGVzIiwic3RvcENvbG9yIiwic3RyaWtldGhyb3VnaFBvc2l0aW9uIiwic3RyaWtldGhyb3VnaFRoaWNrbmVzcyIsInN0cm9rZSIsInN0cm9rZUxpbmVjYXAiLCJzdHJva2VMaW5lam9pbiIsInN1cmZhY2VTY2FsZSIsInN5c3RlbUxhbmd1YWdlIiwidGFibGVWYWx1ZXMiLCJ0YXJnZXRYIiwidGFyZ2V0WSIsInRleHRBbmNob3IiLCJ0ZXh0RGVjb3JhdGlvbiIsInRleHRSZW5kZXJpbmciLCJ0ZXh0TGVuZ3RoIiwidTEiLCJ1MiIsInVuZGVybGluZVBvc2l0aW9uIiwidW5kZXJsaW5lVGhpY2tuZXNzIiwidW5pY29kZSIsInVuaWNvZGVCaWRpIiwidW5pY29kZVJhbmdlIiwidW5pdHNQZXJFbSIsInZBbHBoYWJldGljIiwidkhhbmdpbmciLCJ2SWRlb2dyYXBoaWMiLCJ2TWF0aGVtYXRpY2FsIiwidmVjdG9yRWZmZWN0IiwidmVydEFkdlkiLCJ2ZXJ0T3JpZ2luWCIsInZlcnRPcmlnaW5ZIiwidmlld0JveCIsInZpZXdUYXJnZXQiLCJ2aXNpYmlsaXR5Iiwid2lkdGhzIiwid29yZFNwYWNpbmciLCJ3cml0aW5nTW9kZSIsInhIZWlnaHQiLCJ4MSIsIngyIiwieENoYW5uZWxTZWxlY3RvciIsInhsaW5rQWN0dWF0ZSIsInhsaW5rQXJjcm9sZSIsInhsaW5rSHJlZiIsInhsaW5rUm9sZSIsInhsaW5rU2hvdyIsInhsaW5rVGl0bGUiLCJ4bGlua1R5cGUiLCJ4bWxCYXNlIiwieG1sbnMiLCJ4bWxuc1hsaW5rIiwieG1sTGFuZyIsInhtbFNwYWNlIiwieTEiLCJ5MiIsInlDaGFubmVsU2VsZWN0b3IiLCJ6Iiwiem9vbUFuZFBhbiIsInNraXBTZWxlY3Rpb25DaGFuZ2VFdmVudCIsImxhc3RTZWxlY3Rpb24iLCJtb3VzZURvd24iLCJoYXNMaXN0ZW5lciIsImJvdW5kaW5nVG9wIiwibGVmdCIsImJvdW5kaW5nTGVmdCIsImNvbnN0cnVjdFNlbGVjdEV2ZW50IiwiY3VycmVudFNlbGVjdGlvbiIsIlN5bnRoZXRpY0FuaW1hdGlvbkV2ZW50IiwiU3ludGhldGljQ2xpcGJvYXJkRXZlbnQiLCJTeW50aGV0aWNGb2N1c0V2ZW50IiwiU3ludGhldGljS2V5Ym9hcmRFdmVudCIsIlN5bnRoZXRpY0RyYWdFdmVudCIsIlN5bnRoZXRpY1RvdWNoRXZlbnQiLCJTeW50aGV0aWNUcmFuc2l0aW9uRXZlbnQiLCJTeW50aGV0aWNXaGVlbEV2ZW50IiwidG9wTGV2ZWxFdmVudHNUb0Rpc3BhdGNoQ29uZmlnIiwiY2FwaXRhbGl6ZWRFdmVudCIsIm9uRXZlbnQiLCJ0b3BFdmVudCIsIm9uQ2xpY2tMaXN0ZW5lcnMiLCJFdmVudENvbnN0cnVjdG9yIiwiQW5pbWF0aW9uRXZlbnRJbnRlcmZhY2UiLCJhbmltYXRpb25OYW1lIiwiZWxhcHNlZFRpbWUiLCJwc2V1ZG9FbGVtZW50IiwiQ2xpcGJvYXJkRXZlbnRJbnRlcmZhY2UiLCJjbGlwYm9hcmREYXRhIiwiQ29tcG9zaXRpb25FdmVudEludGVyZmFjZSIsIkRyYWdFdmVudEludGVyZmFjZSIsImRhdGFUcmFuc2ZlciIsIkZvY3VzRXZlbnRJbnRlcmZhY2UiLCJJbnB1dEV2ZW50SW50ZXJmYWNlIiwiZ2V0RXZlbnRLZXkiLCJLZXlib2FyZEV2ZW50SW50ZXJmYWNlIiwicmVwZWF0IiwibG9jYWxlIiwiVG91Y2hFdmVudEludGVyZmFjZSIsInRvdWNoZXMiLCJ0YXJnZXRUb3VjaGVzIiwiY2hhbmdlZFRvdWNoZXMiLCJUcmFuc2l0aW9uRXZlbnRJbnRlcmZhY2UiLCJXaGVlbEV2ZW50SW50ZXJmYWNlIiwiZGVsdGFYIiwid2hlZWxEZWx0YVgiLCJkZWx0YVkiLCJ3aGVlbERlbHRhWSIsIndoZWVsRGVsdGEiLCJkZWx0YVoiLCJkZWx0YU1vZGUiLCJNT0QiLCJsIiwibSIsImNvbXBvbmVudFN0YWNrSW5mbyIsInN0eWxlV2FybmluZ3MiLCJpc0VtcHR5IiwiaXNOb25OdW1lcmljIiwid2FybmVkIiwid2FybmluZ3MiLCJjb21wb25lbnRPckVsZW1lbnQiLCJmbGF0dGVuU2luZ2xlQ2hpbGRJbnRvQ29udGV4dCIsIm5vcm1hbGl6ZUtleSIsIkVzYyIsIlNwYWNlYmFyIiwiTGVmdCIsIlVwIiwiUmlnaHQiLCJEb3duIiwiRGVsIiwiV2luIiwiQXBwcyIsIlNjcm9sbCIsIk1velByaW50YWJsZUtleSIsInRyYW5zbGF0ZVRvS2V5IiwiZ2V0TGVhZk5vZGUiLCJnZXRTaWJsaW5nTm9kZSIsIm5vZGVTdGFydCIsIm5vZGVFbmQiLCJtYWtlUHJlZml4TWFwIiwic3R5bGVQcm9wIiwidmVuZG9yUHJlZml4ZXMiLCJhbmltYXRpb25lbmQiLCJhbmltYXRpb25pdGVyYXRpb24iLCJhbmltYXRpb25zdGFydCIsInRyYW5zaXRpb25lbmQiLCJwcmVmaXhlZEV2ZW50TmFtZXMiLCJhbmltYXRpb24iLCJ0cmFuc2l0aW9uIiwicHJlZml4TWFwIiwiRmlsZUlucHV0IiwicGFyZW50IiwicG9zaXRpb24iLCJmaWxlIiwiaGFuZGxlQ2hhbmdlIiwiZGlkV2FybkFib3V0UmVjZWl2aW5nU3RvcmUiLCJ3YXJuQWJvdXRSZWNlaXZpbmdTdG9yZSIsIl9Qcm92aWRlciRjaGlsZENvbnRleCIsInN1YktleSIsImNyZWF0ZUNvbm5lY3QiLCJmYWN0b3JpZXMiLCJzdHJpY3RFcXVhbCIsIl9yZWYkY29ubmVjdEhPQyIsImNvbm5lY3RIT0MiLCJfcmVmJG1hcFN0YXRlVG9Qcm9wc0YiLCJtYXBTdGF0ZVRvUHJvcHNGYWN0b3JpZXMiLCJfcmVmJG1hcERpc3BhdGNoVG9Qcm8iLCJtYXBEaXNwYXRjaFRvUHJvcHNGYWN0b3JpZXMiLCJfcmVmJG1lcmdlUHJvcHNGYWN0b3IiLCJtZXJnZVByb3BzRmFjdG9yaWVzIiwiX3JlZiRzZWxlY3RvckZhY3RvcnkiLCJtYXBTdGF0ZVRvUHJvcHMiLCJtYXBEaXNwYXRjaFRvUHJvcHMiLCJtZXJnZVByb3BzIiwiX3JlZjIkcHVyZSIsInB1cmUiLCJfcmVmMiRhcmVTdGF0ZXNFcXVhbCIsImFyZVN0YXRlc0VxdWFsIiwiX3JlZjIkYXJlT3duUHJvcHNFcXVhIiwiYXJlT3duUHJvcHNFcXVhbCIsIl9yZWYyJGFyZVN0YXRlUHJvcHNFcSIsImFyZVN0YXRlUHJvcHNFcXVhbCIsIl9yZWYyJGFyZU1lcmdlZFByb3BzRSIsImFyZU1lcmdlZFByb3BzRXF1YWwiLCJleHRyYU9wdGlvbnMiLCJpbml0TWFwU3RhdGVUb1Byb3BzIiwiaW5pdE1hcERpc3BhdGNoVG9Qcm9wcyIsImluaXRNZXJnZVByb3BzIiwid2hlbk1hcERpc3BhdGNoVG9Qcm9wc0lzRnVuY3Rpb24iLCJ3aGVuTWFwRGlzcGF0Y2hUb1Byb3BzSXNNaXNzaW5nIiwid2hlbk1hcERpc3BhdGNoVG9Qcm9wc0lzT2JqZWN0Iiwid2hlbk1hcFN0YXRlVG9Qcm9wc0lzRnVuY3Rpb24iLCJ3aGVuTWFwU3RhdGVUb1Byb3BzSXNNaXNzaW5nIiwiZGVmYXVsdE1lcmdlUHJvcHMiLCJ3cmFwTWVyZ2VQcm9wc0Z1bmMiLCJ3aGVuTWVyZ2VQcm9wc0lzRnVuY3Rpb24iLCJ3aGVuTWVyZ2VQcm9wc0lzT21pdHRlZCIsInN0YXRlUHJvcHMiLCJkaXNwYXRjaFByb3BzIiwiaW5pdE1lcmdlUHJvcHNQcm94eSIsImhhc1J1bk9uY2UiLCJtZXJnZWRQcm9wcyIsIm1lcmdlUHJvcHNQcm94eSIsIm5leHRNZXJnZWRQcm9wcyIsImltcHVyZUZpbmFsUHJvcHNTZWxlY3RvckZhY3RvcnkiLCJwdXJlRmluYWxQcm9wc1NlbGVjdG9yRmFjdG9yeSIsImZpbmFsUHJvcHNTZWxlY3RvckZhY3RvcnkiLCJpbXB1cmVGaW5hbFByb3BzU2VsZWN0b3IiLCJoYXNSdW5BdExlYXN0T25jZSIsImhhbmRsZUZpcnN0Q2FsbCIsImZpcnN0U3RhdGUiLCJmaXJzdE93blByb3BzIiwiaGFuZGxlTmV3UHJvcHNBbmROZXdTdGF0ZSIsImhhbmRsZU5ld1Byb3BzIiwiaGFuZGxlTmV3U3RhdGUiLCJuZXh0U3RhdGVQcm9wcyIsInN0YXRlUHJvcHNDaGFuZ2VkIiwiaGFuZGxlU3Vic2VxdWVudENhbGxzIiwibmV4dE93blByb3BzIiwicHJvcHNDaGFuZ2VkIiwic3RhdGVDaGFuZ2VkIiwicHVyZUZpbmFsUHJvcHNTZWxlY3RvciIsInZlcmlmeVN1YnNlbGVjdG9ycyIsInZlcmlmeSIsIkNMRUFSRUQiLCJudWxsTGlzdGVuZXJzIiwibm90aWZ5IiwiY3JlYXRlTGlzdGVuZXJDb2xsZWN0aW9uIiwiY2xlYXIiLCJTdWJzY3JpcHRpb24iLCJhZGROZXN0ZWRTdWIiLCJoYXNPd24iLCJhY3RpdmVDbGFzc05hbWUiLCJhY3RpdmVTdHlsZSIsImdldElzQWN0aXZlIiwiZW5hYmxlIiwiZGlzYWJsZSIsIndoZW4iLCJpc1N0YXRpYyIsIm5vcm1hbGl6ZUxvY2F0aW9uIiwiX29iamVjdCRwYXRobmFtZSIsIl9vYmplY3Qkc2VhcmNoIiwiX29iamVjdCRoYXNoIiwiYWRkQmFzZW5hbWUiLCJjcmVhdGVVUkwiLCJzdGF0aWNIYW5kbGVyIiwiaGFuZGxlUHVzaCIsImhhbmRsZVJlcGxhY2UiLCJfdGhpcyRwcm9wczIiLCJoYW5kbGVMaXN0ZW4iLCJoYW5kbGVCbG9jayIsIl9lbGVtZW50JHByb3BzIiwicGF0aFByb3AiLCJDIiwid3JhcHBlZENvbXBvbmVudFJlZiIsInJlbWFpbmluZ1Byb3BzIiwicm91dGVDb21wb25lbnRQcm9wcyIsImlzYXJyYXkiLCJwYXRoVG9SZWdleHAiLCJwYXJzZSIsImNvbXBpbGUiLCJ0b2tlbnNUb0Z1bmN0aW9uIiwidG9rZW5zVG9SZWdFeHAiLCJQQVRIX1JFR0VYUCIsInRva2VucyIsImRlZmF1bHREZWxpbWl0ZXIiLCJkZWxpbWl0ZXIiLCJlc2NhcGVkIiwibW9kaWZpZXIiLCJhc3RlcmlzayIsIm9wdGlvbmFsIiwiZXNjYXBlR3JvdXAiLCJlc2NhcGVTdHJpbmciLCJlbmNvZGVVUklDb21wb25lbnRQcmV0dHkiLCJlbmNvZGVVUkkiLCJlbmNvZGVBc3RlcmlzayIsIm1hdGNoZXMiLCJvcHRzIiwiZW5jb2RlIiwicHJldHR5IiwidG9rZW4iLCJzZWdtZW50IiwiYXR0YWNoS2V5cyIsImZsYWdzIiwic2Vuc2l0aXZlIiwicmVnZXhwVG9SZWdleHAiLCJncm91cHMiLCJhcnJheVRvUmVnZXhwIiwicGFydHMiLCJyZWdleHAiLCJzdHJpbmdUb1JlZ2V4cCIsImVuZHNXaXRoRGVsaW1pdGVyIiwidXNlclByb3ZpZGVkS2V5RXNjYXBlUmVnZXgiLCJlc2NhcGVVc2VyUHJvdmlkZWRLZXkiLCJGb3JFYWNoQm9va0tlZXBpbmciLCJmb3JFYWNoRnVuY3Rpb24iLCJmb3JFYWNoQ29udGV4dCIsImZvckVhY2hTaW5nbGVDaGlsZCIsImZvckVhY2hDaGlsZHJlbiIsImZvckVhY2hGdW5jIiwiTWFwQm9va0tlZXBpbmciLCJtYXBSZXN1bHQiLCJrZXlQcmVmaXgiLCJtYXBGdW5jdGlvbiIsIm1hcENvbnRleHQiLCJtYXBTaW5nbGVDaGlsZEludG9Db250ZXh0IiwiY2hpbGRLZXkiLCJtYXBwZWRDaGlsZCIsIm1hcEludG9XaXRoS2V5UHJlZml4SW50ZXJuYWwiLCJlc2NhcGVkUHJlZml4IiwibWFwQ2hpbGRyZW4iLCJmb3JFYWNoU2luZ2xlQ2hpbGREdW1teSIsImNvdW50Q2hpbGRyZW4iLCJjcmVhdGVET01GYWN0b3J5IiwiYWJiciIsImFkZHJlc3MiLCJhcnRpY2xlIiwiYXNpZGUiLCJhdWRpbyIsImJkaSIsImJkbyIsImJpZyIsImJsb2NrcXVvdGUiLCJjYW52YXMiLCJjYXB0aW9uIiwiY29sZ3JvdXAiLCJkYXRhbGlzdCIsImRkIiwiZGVsIiwiZGV0YWlscyIsImRmbiIsImRpYWxvZyIsImRsIiwiZHQiLCJlbSIsImZpZWxkc2V0IiwiZmlnY2FwdGlvbiIsImZpZ3VyZSIsImZvb3RlciIsImgxIiwiaDIiLCJoMyIsImg0IiwiaDUiLCJoNiIsImhlYWQiLCJoZWFkZXIiLCJoZ3JvdXAiLCJpZnJhbWUiLCJpbnMiLCJrYmQiLCJsZWdlbmQiLCJsaSIsIm1haW4iLCJtZXRlciIsIm5hdiIsIm5vc2NyaXB0Iiwib2wiLCJvcHRncm91cCIsIm9wdGlvbiIsIm91dHB1dCIsInAiLCJwaWN0dXJlIiwicHJvZ3Jlc3MiLCJxIiwicnAiLCJydCIsInJ1YnkiLCJzYW1wIiwic2NyaXB0Iiwic2VjdGlvbiIsInNtYWxsIiwic3Ryb25nIiwic3ViIiwic3VwIiwidGFibGUiLCJ0Ym9keSIsInRkIiwidGZvb3QiLCJ0aCIsInRoZWFkIiwidHIiLCJ1IiwidWwiLCJ2aWRlbyIsImNpcmNsZSIsImRlZnMiLCJlbGxpcHNlIiwibGluZSIsImxpbmVhckdyYWRpZW50IiwicG9seWdvbiIsInBvbHlsaW5lIiwicmFkaWFsR3JhZGllbnQiLCJyZWN0Iiwic3RvcCIsInRzcGFuIiwiX3JlcXVpcmUiLCJfcmVxdWlyZTIiLCJuZXh0RGVidWdJRCIsIm1pZGRsZXdhcmVzIiwiX2Rpc3BhdGNoIiwiY2hhaW4iLCJtaWRkbGV3YXJlQVBJIiwibWlkZGxld2FyZSIsImJpbmRBY3Rpb25DcmVhdG9yIiwiYWN0aW9uQ3JlYXRvciIsImFjdGlvbkNyZWF0b3JzIiwiYm91bmRBY3Rpb25DcmVhdG9ycyIsImdldFVuZGVmaW5lZFN0YXRlRXJyb3JNZXNzYWdlIiwiYWN0aW9uVHlwZSIsImFjdGlvbk5hbWUiLCJnZXRVbmV4cGVjdGVkU3RhdGVTaGFwZVdhcm5pbmdNZXNzYWdlIiwiaW5wdXRTdGF0ZSIsInJlZHVjZXJzIiwidW5leHBlY3RlZEtleUNhY2hlIiwicmVkdWNlcktleXMiLCJhcmd1bWVudE5hbWUiLCJ1bmV4cGVjdGVkS2V5cyIsImFzc2VydFJlZHVjZXJTYW5pdHkiLCJmaW5hbFJlZHVjZXJzIiwiZmluYWxSZWR1Y2VyS2V5cyIsInNhbml0eUVycm9yIiwiY29tYmluYXRpb24iLCJ3YXJuaW5nTWVzc2FnZSIsImhhc0NoYW5nZWQiLCJwcmV2aW91c1N0YXRlRm9yS2V5IiwibmV4dFN0YXRlRm9yS2V5IiwiZXJyb3JNZXNzYWdlIiwiaXNBYnNvbHV0ZSIsInNwbGljZU9uZSIsInJlc29sdmVQYXRobmFtZSIsInRvUGFydHMiLCJmcm9tUGFydHMiLCJpc1RvQWJzIiwiaXNGcm9tQWJzIiwibXVzdEVuZEFicyIsImhhc1RyYWlsaW5nU2xhc2giLCJ1cCIsInBhcnQiLCJ1bnNoaWZ0IiwiX3BvbnlmaWxsIiwiX3BvbnlmaWxsMiIsInN5bWJvbE9ic2VydmFibGVQb255ZmlsbCIsIl9TeW1ib2wiLCJ2YWx1ZUVxdWFsIiwiYVR5cGUiLCJiVHlwZSIsImFWYWx1ZSIsInZhbHVlT2YiLCJiVmFsdWUiLCJhS2V5cyIsImJLZXlzIiwid2VicGFja1BvbHlmaWxsIiwiZGVwcmVjYXRlIiwicGF0aHMiLCJnZXRGaWxlcyIsImZzIiwiZ2V0Rm9sZGVycyIsImZvbGRlciIsImdldEltYWdlUGF0aCIsImNyZWF0ZUNsaWNrSGFuZGxlciIsImVsZW1lbnRTdHlsZSIsImJhY2tncm91bmRTaXplIiwiZ2V0TXVzaWMiLCJnZXRQaG90b3MiLCJnZXRTaGFyZWQiLCJCcmVhZGNydW1icyIsImNydW1icyIsImN1cnJlbnRMaW5rIiwiY3J1bWIiLCJEaXNwbGF5TWVudSIsIlRvcE5hdiIsInF1ZXJ5c3RyaW5nIiwic2VhcmNoQnlRdWVyeSIsImdldEVsZW1lbnRCeUlkIiwiYW5vbiIsInVzZXJncm91cCIsInNwZWNpZmljVXNlciJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxtREFBMkMsY0FBYzs7QUFFekQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxtQ0FB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QU0sS0FGSTtBQUdWQyxtQkFBVyxJQUhEO0FBSVZDLHNCQUFjO0FBSko7QUFOZCxLQWxnQlEsRUErZ0JSO0FBQ0UzNkQsdUJBQWlCLGNBRG5CO0FBRUVnYixnQkFBVSxFQUZaO0FBR0Vqc0QsYUFBTyw2QkFIVDtBQUlFOGdELFlBQU0sWUFKUjtBQUtFNTBDLFlBQU0sTUFMUjtBQU1FZ2tGLGtCQUFZO0FBQ1ZyaUYsZUFBTyxJQURHO0FBRVY2OUYsY0FBTSxLQUZJO0FBR1ZDLG1CQUFXLElBSEQ7QUFJVkMsc0JBQWM7QUFKSjtBQU5kLEtBL2dCUSxDQURBO0FBZ2lCVnovQyxpQkFBYTtBQWhpQkgsR0FGQyxFIiwiZmlsZSI6ImluZGV4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gaWRlbnRpdHkgZnVuY3Rpb24gZm9yIGNhbGxpbmcgaGFybW9ueSBpbXBvcnRzIHdpdGggdGhlIGNvcnJlY3QgY29udGV4dFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5pID0gZnVuY3Rpb24odmFsdWUpIHsgcmV0dXJuIHZhbHVlOyB9O1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHtcbiBcdFx0XHRcdGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gXHRcdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuIFx0XHRcdFx0Z2V0OiBnZXR0ZXJcbiBcdFx0XHR9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSAyNzYpO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIHdlYnBhY2svYm9vdHN0cmFwIDQ4OTFjZjViNWU4YWUxMjQyNmE3IiwiLy8gc2hpbSBmb3IgdXNpbmcgcHJvY2VzcyBpbiBicm93c2VyXG52YXIgcHJvY2VzcyA9IG1vZHVsZS5leHBvcnRzID0ge307XG5cbi8vIGNhY2hlZCBmcm9tIHdoYXRldmVyIGdsb2JhbCBpcyBwcmVzZW50IHNvIHRoYXQgdGVzdCBydW5uZXJzIHRoYXQgc3R1YiBpdFxuLy8gZG9uJ3QgYnJlYWsgdGhpbmdzLiAgQnV0IHdlIG5lZWQgdG8gd3JhcCBpdCBpbiBhIHRyeSBjYXRjaCBpbiBjYXNlIGl0IGlzXG4vLyB3cmFwcGVkIGluIHN0cmljdCBtb2RlIGNvZGUgd2hpY2ggZG9lc24ndCBkZWZpbmUgYW55IGdsb2JhbHMuICBJdCdzIGluc2lkZSBhXG4vLyBmdW5jdGlvbiBiZWNhdXNlIHRyeS9jYXRjaGVzIGRlb3B0aW1pemUgaW4gY2VydGFpbiBlbmdpbmVzLlxuXG52YXIgY2FjaGVkU2V0VGltZW91dDtcbnZhciBjYWNoZWRDbGVhclRpbWVvdXQ7XG5cbmZ1bmN0aW9uIGRlZmF1bHRTZXRUaW1vdXQoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdzZXRUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkJyk7XG59XG5mdW5jdGlvbiBkZWZhdWx0Q2xlYXJUaW1lb3V0ICgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2NsZWFyVGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCcpO1xufVxuKGZ1bmN0aW9uICgpIHtcbiAgICB0cnkge1xuICAgICAgICBpZiAodHlwZW9mIHNldFRpbWVvdXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBzZXRUaW1lb3V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IGRlZmF1bHRTZXRUaW1vdXQ7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBkZWZhdWx0U2V0VGltb3V0O1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBpZiAodHlwZW9mIGNsZWFyVGltZW91dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gY2xlYXJUaW1lb3V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gZGVmYXVsdENsZWFyVGltZW91dDtcbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gZGVmYXVsdENsZWFyVGltZW91dDtcbiAgICB9XG59ICgpKVxuZnVuY3Rpb24gcnVuVGltZW91dChmdW4pIHtcbiAgICBpZiAoY2FjaGVkU2V0VGltZW91dCA9PT0gc2V0VGltZW91dCkge1xuICAgICAgICAvL25vcm1hbCBlbnZpcm9tZW50cyBpbiBzYW5lIHNpdHVhdGlvbnNcbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9XG4gICAgLy8gaWYgc2V0VGltZW91dCB3YXNuJ3QgYXZhaWxhYmxlIGJ1dCB3YXMgbGF0dGVyIGRlZmluZWRcbiAgICBpZiAoKGNhY2hlZFNldFRpbWVvdXQgPT09IGRlZmF1bHRTZXRUaW1vdXQgfHwgIWNhY2hlZFNldFRpbWVvdXQpICYmIHNldFRpbWVvdXQpIHtcbiAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IHNldFRpbWVvdXQ7XG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIC8vIHdoZW4gd2hlbiBzb21lYm9keSBoYXMgc2NyZXdlZCB3aXRoIHNldFRpbWVvdXQgYnV0IG5vIEkuRS4gbWFkZG5lc3NcbiAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9IGNhdGNoKGUpe1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gV2hlbiB3ZSBhcmUgaW4gSS5FLiBidXQgdGhlIHNjcmlwdCBoYXMgYmVlbiBldmFsZWQgc28gSS5FLiBkb2Vzbid0IHRydXN0IHRoZSBnbG9iYWwgb2JqZWN0IHdoZW4gY2FsbGVkIG5vcm1hbGx5XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dC5jYWxsKG51bGwsIGZ1biwgMCk7XG4gICAgICAgIH0gY2F0Y2goZSl7XG4gICAgICAgICAgICAvLyBzYW1lIGFzIGFib3ZlIGJ1dCB3aGVuIGl0J3MgYSB2ZXJzaW9uIG9mIEkuRS4gdGhhdCBtdXN0IGhhdmUgdGhlIGdsb2JhbCBvYmplY3QgZm9yICd0aGlzJywgaG9wZnVsbHkgb3VyIGNvbnRleHQgY29ycmVjdCBvdGhlcndpc2UgaXQgd2lsbCB0aHJvdyBhIGdsb2JhbCBlcnJvclxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQuY2FsbCh0aGlzLCBmdW4sIDApO1xuICAgICAgICB9XG4gICAgfVxuXG5cbn1cbmZ1bmN0aW9uIHJ1bkNsZWFyVGltZW91dChtYXJrZXIpIHtcbiAgICBpZiAoY2FjaGVkQ2xlYXJUaW1lb3V0ID09PSBjbGVhclRpbWVvdXQpIHtcbiAgICAgICAgLy9ub3JtYWwgZW52aXJvbWVudHMgaW4gc2FuZSBzaXR1YXRpb25zXG4gICAgICAgIHJldHVybiBjbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9XG4gICAgLy8gaWYgY2xlYXJUaW1lb3V0IHdhc24ndCBhdmFpbGFibGUgYnV0IHdhcyBsYXR0ZXIgZGVmaW5lZFxuICAgIGlmICgoY2FjaGVkQ2xlYXJUaW1lb3V0ID09PSBkZWZhdWx0Q2xlYXJUaW1lb3V0IHx8ICFjYWNoZWRDbGVhclRpbWVvdXQpICYmIGNsZWFyVGltZW91dCkge1xuICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBjbGVhclRpbWVvdXQ7XG4gICAgICAgIHJldHVybiBjbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gd2hlbiB3aGVuIHNvbWVib2R5IGhhcyBzY3Jld2VkIHdpdGggc2V0VGltZW91dCBidXQgbm8gSS5FLiBtYWRkbmVzc1xuICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfSBjYXRjaCAoZSl7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBXaGVuIHdlIGFyZSBpbiBJLkUuIGJ1dCB0aGUgc2NyaXB0IGhhcyBiZWVuIGV2YWxlZCBzbyBJLkUuIGRvZXNuJ3QgIHRydXN0IHRoZSBnbG9iYWwgb2JqZWN0IHdoZW4gY2FsbGVkIG5vcm1hbGx5XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0LmNhbGwobnVsbCwgbWFya2VyKTtcbiAgICAgICAgfSBjYXRjaCAoZSl7XG4gICAgICAgICAgICAvLyBzYW1lIGFzIGFib3ZlIGJ1dCB3aGVuIGl0J3MgYSB2ZXJzaW9uIG9mIEkuRS4gdGhhdCBtdXN0IGhhdmUgdGhlIGdsb2JhbCBvYmplY3QgZm9yICd0aGlzJywgaG9wZnVsbHkgb3VyIGNvbnRleHQgY29ycmVjdCBvdGhlcndpc2UgaXQgd2lsbCB0aHJvdyBhIGdsb2JhbCBlcnJvci5cbiAgICAgICAgICAgIC8vIFNvbWUgdmVyc2lvbnMgb2YgSS5FLiBoYXZlIGRpZmZlcmVudCBydWxlcyBmb3IgY2xlYXJUaW1lb3V0IHZzIHNldFRpbWVvdXRcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQuY2FsbCh0aGlzLCBtYXJrZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG5cblxufVxudmFyIHF1ZXVlID0gW107XG52YXIgZHJhaW5pbmcgPSBmYWxzZTtcbnZhciBjdXJyZW50UXVldWU7XG52YXIgcXVldWVJbmRleCA9IC0xO1xuXG5mdW5jdGlvbiBjbGVhblVwTmV4dFRpY2soKSB7XG4gICAgaWYgKCFkcmFpbmluZyB8fCAhY3VycmVudFF1ZXVlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBpZiAoY3VycmVudFF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBxdWV1ZSA9IGN1cnJlbnRRdWV1ZS5jb25jYXQocXVldWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICB9XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBkcmFpblF1ZXVlKCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBkcmFpblF1ZXVlKCkge1xuICAgIGlmIChkcmFpbmluZykge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciB0aW1lb3V0ID0gcnVuVGltZW91dChjbGVhblVwTmV4dFRpY2spO1xuICAgIGRyYWluaW5nID0gdHJ1ZTtcblxuICAgIHZhciBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgd2hpbGUobGVuKSB7XG4gICAgICAgIGN1cnJlbnRRdWV1ZSA9IHF1ZXVlO1xuICAgICAgICBxdWV1ZSA9IFtdO1xuICAgICAgICB3aGlsZSAoKytxdWV1ZUluZGV4IDwgbGVuKSB7XG4gICAgICAgICAgICBpZiAoY3VycmVudFF1ZXVlKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFF1ZXVlW3F1ZXVlSW5kZXhdLnJ1bigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICAgICAgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIH1cbiAgICBjdXJyZW50UXVldWUgPSBudWxsO1xuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgcnVuQ2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xufVxuXG5wcm9jZXNzLm5leHRUaWNrID0gZnVuY3Rpb24gKGZ1bikge1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGggLSAxKTtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGFyZ3NbaSAtIDFdID0gYXJndW1lbnRzW2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHF1ZXVlLnB1c2gobmV3IEl0ZW0oZnVuLCBhcmdzKSk7XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCA9PT0gMSAmJiAhZHJhaW5pbmcpIHtcbiAgICAgICAgcnVuVGltZW91dChkcmFpblF1ZXVlKTtcbiAgICB9XG59O1xuXG4vLyB2OCBsaWtlcyBwcmVkaWN0aWJsZSBvYmplY3RzXG5mdW5jdGlvbiBJdGVtKGZ1biwgYXJyYXkpIHtcbiAgICB0aGlzLmZ1biA9IGZ1bjtcbiAgICB0aGlzLmFycmF5ID0gYXJyYXk7XG59XG5JdGVtLnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5mdW4uYXBwbHkobnVsbCwgdGhpcy5hcnJheSk7XG59O1xucHJvY2Vzcy50aXRsZSA9ICdicm93c2VyJztcbnByb2Nlc3MuYnJvd3NlciA9IHRydWU7XG5wcm9jZXNzLmVudiA9IHt9O1xucHJvY2Vzcy5hcmd2ID0gW107XG5wcm9jZXNzLnZlcnNpb24gPSAnJzsgLy8gZW1wdHkgc3RyaW5nIHRvIGF2b2lkIHJlZ2V4cCBpc3N1ZXNcbnByb2Nlc3MudmVyc2lvbnMgPSB7fTtcblxuZnVuY3Rpb24gbm9vcCgpIHt9XG5cbnByb2Nlc3Mub24gPSBub29wO1xucHJvY2Vzcy5hZGRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLm9uY2UgPSBub29wO1xucHJvY2Vzcy5vZmYgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUFsbExpc3RlbmVycyA9IG5vb3A7XG5wcm9jZXNzLmVtaXQgPSBub29wO1xucHJvY2Vzcy5wcmVwZW5kTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5wcmVwZW5kT25jZUxpc3RlbmVyID0gbm9vcDtcblxucHJvY2Vzcy5saXN0ZW5lcnMgPSBmdW5jdGlvbiAobmFtZSkgeyByZXR1cm4gW10gfVxuXG5wcm9jZXNzLmJpbmRpbmcgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5cbnByb2Nlc3MuY3dkID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gJy8nIH07XG5wcm9jZXNzLmNoZGlyID0gZnVuY3Rpb24gKGRpcikge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xucHJvY2Vzcy51bWFzayA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gMDsgfTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcHJvY2Vzcy9icm93c2VyLmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbi8qKlxuICogVXNlIGludmFyaWFudCgpIHRvIGFzc2VydCBzdGF0ZSB3aGljaCB5b3VyIHByb2dyYW0gYXNzdW1lcyB0byBiZSB0cnVlLlxuICpcbiAqIFByb3ZpZGUgc3ByaW50Zi1zdHlsZSBmb3JtYXQgKG9ubHkgJXMgaXMgc3VwcG9ydGVkKSBhbmQgYXJndW1lbnRzXG4gKiB0byBwcm92aWRlIGluZm9ybWF0aW9uIGFib3V0IHdoYXQgYnJva2UgYW5kIHdoYXQgeW91IHdlcmVcbiAqIGV4cGVjdGluZy5cbiAqXG4gKiBUaGUgaW52YXJpYW50IG1lc3NhZ2Ugd2lsbCBiZSBzdHJpcHBlZCBpbiBwcm9kdWN0aW9uLCBidXQgdGhlIGludmFyaWFudFxuICogd2lsbCByZW1haW4gdG8gZW5zdXJlIGxvZ2ljIGRvZXMgbm90IGRpZmZlciBpbiBwcm9kdWN0aW9uLlxuICovXG5cbnZhciB2YWxpZGF0ZUZvcm1hdCA9IGZ1bmN0aW9uIHZhbGlkYXRlRm9ybWF0KGZvcm1hdCkge307XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHZhbGlkYXRlRm9ybWF0ID0gZnVuY3Rpb24gdmFsaWRhdGVGb3JtYXQoZm9ybWF0KSB7XG4gICAgaWYgKGZvcm1hdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFyaWFudCByZXF1aXJlcyBhbiBlcnJvciBtZXNzYWdlIGFyZ3VtZW50Jyk7XG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiBpbnZhcmlhbnQoY29uZGl0aW9uLCBmb3JtYXQsIGEsIGIsIGMsIGQsIGUsIGYpIHtcbiAgdmFsaWRhdGVGb3JtYXQoZm9ybWF0KTtcblxuICBpZiAoIWNvbmRpdGlvbikge1xuICAgIHZhciBlcnJvcjtcbiAgICBpZiAoZm9ybWF0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGVycm9yID0gbmV3IEVycm9yKCdNaW5pZmllZCBleGNlcHRpb24gb2NjdXJyZWQ7IHVzZSB0aGUgbm9uLW1pbmlmaWVkIGRldiBlbnZpcm9ubWVudCAnICsgJ2ZvciB0aGUgZnVsbCBlcnJvciBtZXNzYWdlIGFuZCBhZGRpdGlvbmFsIGhlbHBmdWwgd2FybmluZ3MuJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBhcmdzID0gW2EsIGIsIGMsIGQsIGUsIGZdO1xuICAgICAgdmFyIGFyZ0luZGV4ID0gMDtcbiAgICAgIGVycm9yID0gbmV3IEVycm9yKGZvcm1hdC5yZXBsYWNlKC8lcy9nLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBhcmdzW2FyZ0luZGV4KytdO1xuICAgICAgfSkpO1xuICAgICAgZXJyb3IubmFtZSA9ICdJbnZhcmlhbnQgVmlvbGF0aW9uJztcbiAgICB9XG5cbiAgICBlcnJvci5mcmFtZXNUb1BvcCA9IDE7IC8vIHdlIGRvbid0IGNhcmUgYWJvdXQgaW52YXJpYW50J3Mgb3duIGZyYW1lXG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpbnZhcmlhbnQ7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9mYmpzL2xpYi9pbnZhcmlhbnQuanMiLCIvKipcbiAqIENvcHlyaWdodCAyMDE0LTIwMTUsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgZW1wdHlGdW5jdGlvbiA9IHJlcXVpcmUoJy4vZW1wdHlGdW5jdGlvbicpO1xuXG4vKipcbiAqIFNpbWlsYXIgdG8gaW52YXJpYW50IGJ1dCBvbmx5IGxvZ3MgYSB3YXJuaW5nIGlmIHRoZSBjb25kaXRpb24gaXMgbm90IG1ldC5cbiAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gbG9nIGlzc3VlcyBpbiBkZXZlbG9wbWVudCBlbnZpcm9ubWVudHMgaW4gY3JpdGljYWxcbiAqIHBhdGhzLiBSZW1vdmluZyB0aGUgbG9nZ2luZyBjb2RlIGZvciBwcm9kdWN0aW9uIGVudmlyb25tZW50cyB3aWxsIGtlZXAgdGhlXG4gKiBzYW1lIGxvZ2ljIGFuZCBmb2xsb3cgdGhlIHNhbWUgY29kZSBwYXRocy5cbiAqL1xuXG52YXIgd2FybmluZyA9IGVtcHR5RnVuY3Rpb247XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHByaW50V2FybmluZyA9IGZ1bmN0aW9uIHByaW50V2FybmluZyhmb3JtYXQpIHtcbiAgICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgICBhcmdzW19rZXkgLSAxXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICAgIH1cblxuICAgICAgdmFyIGFyZ0luZGV4ID0gMDtcbiAgICAgIHZhciBtZXNzYWdlID0gJ1dhcm5pbmc6ICcgKyBmb3JtYXQucmVwbGFjZSgvJXMvZywgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gYXJnc1thcmdJbmRleCsrXTtcbiAgICAgIH0pO1xuICAgICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBjb25zb2xlLmVycm9yKG1lc3NhZ2UpO1xuICAgICAgfVxuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gLS0tIFdlbGNvbWUgdG8gZGVidWdnaW5nIFJlYWN0IC0tLVxuICAgICAgICAvLyBUaGlzIGVycm9yIHdhcyB0aHJvd24gYXMgYSBjb252ZW5pZW5jZSBzbyB0aGF0IHlvdSBjYW4gdXNlIHRoaXMgc3RhY2tcbiAgICAgICAgLy8gdG8gZmluZCB0aGUgY2FsbHNpdGUgdGhhdCBjYXVzZWQgdGhpcyB3YXJuaW5nIHRvIGZpcmUuXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgICAgIH0gY2F0Y2ggKHgpIHt9XG4gICAgfTtcblxuICAgIHdhcm5pbmcgPSBmdW5jdGlvbiB3YXJuaW5nKGNvbmRpdGlvbiwgZm9ybWF0KSB7XG4gICAgICBpZiAoZm9ybWF0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdgd2FybmluZyhjb25kaXRpb24sIGZvcm1hdCwgLi4uYXJncylgIHJlcXVpcmVzIGEgd2FybmluZyAnICsgJ21lc3NhZ2UgYXJndW1lbnQnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGZvcm1hdC5pbmRleE9mKCdGYWlsZWQgQ29tcG9zaXRlIHByb3BUeXBlOiAnKSA9PT0gMCkge1xuICAgICAgICByZXR1cm47IC8vIElnbm9yZSBDb21wb3NpdGVDb21wb25lbnQgcHJvcHR5cGUgY2hlY2suXG4gICAgICB9XG5cbiAgICAgIGlmICghY29uZGl0aW9uKSB7XG4gICAgICAgIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IEFycmF5KF9sZW4yID4gMiA/IF9sZW4yIC0gMiA6IDApLCBfa2V5MiA9IDI7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcbiAgICAgICAgICBhcmdzW19rZXkyIC0gMl0gPSBhcmd1bWVudHNbX2tleTJdO1xuICAgICAgICB9XG5cbiAgICAgICAgcHJpbnRXYXJuaW5nLmFwcGx5KHVuZGVmaW5lZCwgW2Zvcm1hdF0uY29uY2F0KGFyZ3MpKTtcbiAgICAgIH1cbiAgICB9O1xuICB9KSgpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHdhcm5pbmc7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9mYmpzL2xpYi93YXJuaW5nLmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIFxuICovXG4ndXNlIHN0cmljdCc7XG5cbi8qKlxuICogV0FSTklORzogRE8gTk9UIG1hbnVhbGx5IHJlcXVpcmUgdGhpcyBtb2R1bGUuXG4gKiBUaGlzIGlzIGEgcmVwbGFjZW1lbnQgZm9yIGBpbnZhcmlhbnQoLi4uKWAgdXNlZCBieSB0aGUgZXJyb3IgY29kZSBzeXN0ZW1cbiAqIGFuZCB3aWxsIF9vbmx5XyBiZSByZXF1aXJlZCBieSB0aGUgY29ycmVzcG9uZGluZyBiYWJlbCBwYXNzLlxuICogSXQgYWx3YXlzIHRocm93cy5cbiAqL1xuXG5mdW5jdGlvbiByZWFjdFByb2RJbnZhcmlhbnQoY29kZSkge1xuICB2YXIgYXJnQ291bnQgPSBhcmd1bWVudHMubGVuZ3RoIC0gMTtcblxuICB2YXIgbWVzc2FnZSA9ICdNaW5pZmllZCBSZWFjdCBlcnJvciAjJyArIGNvZGUgKyAnOyB2aXNpdCAnICsgJ2h0dHA6Ly9mYWNlYm9vay5naXRodWIuaW8vcmVhY3QvZG9jcy9lcnJvci1kZWNvZGVyLmh0bWw/aW52YXJpYW50PScgKyBjb2RlO1xuXG4gIGZvciAodmFyIGFyZ0lkeCA9IDA7IGFyZ0lkeCA8IGFyZ0NvdW50OyBhcmdJZHgrKykge1xuICAgIG1lc3NhZ2UgKz0gJyZhcmdzW109JyArIGVuY29kZVVSSUNvbXBvbmVudChhcmd1bWVudHNbYXJnSWR4ICsgMV0pO1xuICB9XG5cbiAgbWVzc2FnZSArPSAnIGZvciB0aGUgZnVsbCBtZXNzYWdlIG9yIHVzZSB0aGUgbm9uLW1pbmlmaWVkIGRldiBlbnZpcm9ubWVudCcgKyAnIGZvciBmdWxsIGVycm9ycyBhbmQgYWRkaXRpb25hbCBoZWxwZnVsIHdhcm5pbmdzLic7XG5cbiAgdmFyIGVycm9yID0gbmV3IEVycm9yKG1lc3NhZ2UpO1xuICBlcnJvci5uYW1lID0gJ0ludmFyaWFudCBWaW9sYXRpb24nO1xuICBlcnJvci5mcmFtZXNUb1BvcCA9IDE7IC8vIHdlIGRvbid0IGNhcmUgYWJvdXQgcmVhY3RQcm9kSW52YXJpYW50J3Mgb3duIGZyYW1lXG5cbiAgdGhyb3cgZXJyb3I7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcmVhY3RQcm9kSW52YXJpYW50O1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QtZG9tL2xpYi9yZWFjdFByb2RJbnZhcmlhbnQuanMiLCIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9saWIvUmVhY3QnKTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QvcmVhY3QuanMiLCIvKlxub2JqZWN0LWFzc2lnblxuKGMpIFNpbmRyZSBTb3JodXNcbkBsaWNlbnNlIE1JVFxuKi9cblxuJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cbnZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xudmFyIGhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBwcm9wSXNFbnVtZXJhYmxlID0gT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcblxuZnVuY3Rpb24gdG9PYmplY3QodmFsKSB7XG5cdGlmICh2YWwgPT09IG51bGwgfHwgdmFsID09PSB1bmRlZmluZWQpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdPYmplY3QuYXNzaWduIGNhbm5vdCBiZSBjYWxsZWQgd2l0aCBudWxsIG9yIHVuZGVmaW5lZCcpO1xuXHR9XG5cblx0cmV0dXJuIE9iamVjdCh2YWwpO1xufVxuXG5mdW5jdGlvbiBzaG91bGRVc2VOYXRpdmUoKSB7XG5cdHRyeSB7XG5cdFx0aWYgKCFPYmplY3QuYXNzaWduKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gRGV0ZWN0IGJ1Z2d5IHByb3BlcnR5IGVudW1lcmF0aW9uIG9yZGVyIGluIG9sZGVyIFY4IHZlcnNpb25zLlxuXG5cdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9NDExOFxuXHRcdHZhciB0ZXN0MSA9IG5ldyBTdHJpbmcoJ2FiYycpOyAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXctd3JhcHBlcnNcblx0XHR0ZXN0MVs1XSA9ICdkZSc7XG5cdFx0aWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRlc3QxKVswXSA9PT0gJzUnKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzA1NlxuXHRcdHZhciB0ZXN0MiA9IHt9O1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgMTA7IGkrKykge1xuXHRcdFx0dGVzdDJbJ18nICsgU3RyaW5nLmZyb21DaGFyQ29kZShpKV0gPSBpO1xuXHRcdH1cblx0XHR2YXIgb3JkZXIyID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGVzdDIpLm1hcChmdW5jdGlvbiAobikge1xuXHRcdFx0cmV0dXJuIHRlc3QyW25dO1xuXHRcdH0pO1xuXHRcdGlmIChvcmRlcjIuam9pbignJykgIT09ICcwMTIzNDU2Nzg5Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTMwNTZcblx0XHR2YXIgdGVzdDMgPSB7fTtcblx0XHQnYWJjZGVmZ2hpamtsbW5vcHFyc3QnLnNwbGl0KCcnKS5mb3JFYWNoKGZ1bmN0aW9uIChsZXR0ZXIpIHtcblx0XHRcdHRlc3QzW2xldHRlcl0gPSBsZXR0ZXI7XG5cdFx0fSk7XG5cdFx0aWYgKE9iamVjdC5rZXlzKE9iamVjdC5hc3NpZ24oe30sIHRlc3QzKSkuam9pbignJykgIT09XG5cdFx0XHRcdCdhYmNkZWZnaGlqa2xtbm9wcXJzdCcpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0Ly8gV2UgZG9uJ3QgZXhwZWN0IGFueSBvZiB0aGUgYWJvdmUgdG8gdGhyb3csIGJ1dCBiZXR0ZXIgdG8gYmUgc2FmZS5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzaG91bGRVc2VOYXRpdmUoKSA/IE9iamVjdC5hc3NpZ24gOiBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UpIHtcblx0dmFyIGZyb207XG5cdHZhciB0byA9IHRvT2JqZWN0KHRhcmdldCk7XG5cdHZhciBzeW1ib2xzO1xuXG5cdGZvciAodmFyIHMgPSAxOyBzIDwgYXJndW1lbnRzLmxlbmd0aDsgcysrKSB7XG5cdFx0ZnJvbSA9IE9iamVjdChhcmd1bWVudHNbc10pO1xuXG5cdFx0Zm9yICh2YXIga2V5IGluIGZyb20pIHtcblx0XHRcdGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGZyb20sIGtleSkpIHtcblx0XHRcdFx0dG9ba2V5XSA9IGZyb21ba2V5XTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG5cdFx0XHRzeW1ib2xzID0gZ2V0T3duUHJvcGVydHlTeW1ib2xzKGZyb20pO1xuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBzeW1ib2xzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGlmIChwcm9wSXNFbnVtZXJhYmxlLmNhbGwoZnJvbSwgc3ltYm9sc1tpXSkpIHtcblx0XHRcdFx0XHR0b1tzeW1ib2xzW2ldXSA9IGZyb21bc3ltYm9sc1tpXV07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gdG87XG59O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9vYmplY3QtYXNzaWduL2luZGV4LmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIF9wcm9kSW52YXJpYW50ID0gcmVxdWlyZSgnLi9yZWFjdFByb2RJbnZhcmlhbnQnKTtcblxudmFyIERPTVByb3BlcnR5ID0gcmVxdWlyZSgnLi9ET01Qcm9wZXJ0eScpO1xudmFyIFJlYWN0RE9NQ29tcG9uZW50RmxhZ3MgPSByZXF1aXJlKCcuL1JlYWN0RE9NQ29tcG9uZW50RmxhZ3MnKTtcblxudmFyIGludmFyaWFudCA9IHJlcXVpcmUoJ2ZianMvbGliL2ludmFyaWFudCcpO1xuXG52YXIgQVRUUl9OQU1FID0gRE9NUHJvcGVydHkuSURfQVRUUklCVVRFX05BTUU7XG52YXIgRmxhZ3MgPSBSZWFjdERPTUNvbXBvbmVudEZsYWdzO1xuXG52YXIgaW50ZXJuYWxJbnN0YW5jZUtleSA9ICdfX3JlYWN0SW50ZXJuYWxJbnN0YW5jZSQnICsgTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc2xpY2UoMik7XG5cbi8qKlxuICogQ2hlY2sgaWYgYSBnaXZlbiBub2RlIHNob3VsZCBiZSBjYWNoZWQuXG4gKi9cbmZ1bmN0aW9uIHNob3VsZFByZWNhY2hlTm9kZShub2RlLCBub2RlSUQpIHtcbiAgcmV0dXJuIG5vZGUubm9kZVR5cGUgPT09IDEgJiYgbm9kZS5nZXRBdHRyaWJ1dGUoQVRUUl9OQU1FKSA9PT0gU3RyaW5nKG5vZGVJRCkgfHwgbm9kZS5ub2RlVHlwZSA9PT0gOCAmJiBub2RlLm5vZGVWYWx1ZSA9PT0gJyByZWFjdC10ZXh0OiAnICsgbm9kZUlEICsgJyAnIHx8IG5vZGUubm9kZVR5cGUgPT09IDggJiYgbm9kZS5ub2RlVmFsdWUgPT09ICcgcmVhY3QtZW1wdHk6ICcgKyBub2RlSUQgKyAnICc7XG59XG5cbi8qKlxuICogRHJpbGwgZG93biAodGhyb3VnaCBjb21wb3NpdGVzIGFuZCBlbXB0eSBjb21wb25lbnRzKSB1bnRpbCB3ZSBnZXQgYSBob3N0IG9yXG4gKiBob3N0IHRleHQgY29tcG9uZW50LlxuICpcbiAqIFRoaXMgaXMgcHJldHR5IHBvbHltb3JwaGljIGJ1dCB1bmF2b2lkYWJsZSB3aXRoIHRoZSBjdXJyZW50IHN0cnVjdHVyZSB3ZSBoYXZlXG4gKiBmb3IgYF9yZW5kZXJlZENoaWxkcmVuYC5cbiAqL1xuZnVuY3Rpb24gZ2V0UmVuZGVyZWRIb3N0T3JUZXh0RnJvbUNvbXBvbmVudChjb21wb25lbnQpIHtcbiAgdmFyIHJlbmRlcmVkO1xuICB3aGlsZSAocmVuZGVyZWQgPSBjb21wb25lbnQuX3JlbmRlcmVkQ29tcG9uZW50KSB7XG4gICAgY29tcG9uZW50ID0gcmVuZGVyZWQ7XG4gIH1cbiAgcmV0dXJuIGNvbXBvbmVudDtcbn1cblxuLyoqXG4gKiBQb3B1bGF0ZSBgX2hvc3ROb2RlYCBvbiB0aGUgcmVuZGVyZWQgaG9zdC90ZXh0IGNvbXBvbmVudCB3aXRoIHRoZSBnaXZlblxuICogRE9NIG5vZGUuIFRoZSBwYXNzZWQgYGluc3RgIGNhbiBiZSBhIGNvbXBvc2l0ZS5cbiAqL1xuZnVuY3Rpb24gcHJlY2FjaGVOb2RlKGluc3QsIG5vZGUpIHtcbiAgdmFyIGhvc3RJbnN0ID0gZ2V0UmVuZGVyZWRIb3N0T3JUZXh0RnJvbUNvbXBvbmVudChpbnN0KTtcbiAgaG9zdEluc3QuX2hvc3ROb2RlID0gbm9kZTtcbiAgbm9kZVtpbnRlcm5hbEluc3RhbmNlS2V5XSA9IGhvc3RJbnN0O1xufVxuXG5mdW5jdGlvbiB1bmNhY2hlTm9kZShpbnN0KSB7XG4gIHZhciBub2RlID0gaW5zdC5faG9zdE5vZGU7XG4gIGlmIChub2RlKSB7XG4gICAgZGVsZXRlIG5vZGVbaW50ZXJuYWxJbnN0YW5jZUtleV07XG4gICAgaW5zdC5faG9zdE5vZGUgPSBudWxsO1xuICB9XG59XG5cbi8qKlxuICogUG9wdWxhdGUgYF9ob3N0Tm9kZWAgb24gZWFjaCBjaGlsZCBvZiBgaW5zdGAsIGFzc3VtaW5nIHRoYXQgdGhlIGNoaWxkcmVuXG4gKiBtYXRjaCB1cCB3aXRoIHRoZSBET00gKGVsZW1lbnQpIGNoaWxkcmVuIG9mIGBub2RlYC5cbiAqXG4gKiBXZSBjYWNoZSBlbnRpcmUgbGV2ZWxzIGF0IG9uY2UgdG8gYXZvaWQgYW4gbl4yIHByb2JsZW0gd2hlcmUgd2UgYWNjZXNzIHRoZVxuICogY2hpbGRyZW4gb2YgYSBub2RlIHNlcXVlbnRpYWxseSBhbmQgaGF2ZSB0byB3YWxrIGZyb20gdGhlIHN0YXJ0IHRvIG91ciB0YXJnZXRcbiAqIG5vZGUgZXZlcnkgdGltZS5cbiAqXG4gKiBTaW5jZSB3ZSB1cGRhdGUgYF9yZW5kZXJlZENoaWxkcmVuYCBhbmQgdGhlIGFjdHVhbCBET00gYXQgKHNsaWdodGx5KVxuICogZGlmZmVyZW50IHRpbWVzLCB3ZSBjb3VsZCByYWNlIGhlcmUgYW5kIHNlZSBhIG5ld2VyIGBfcmVuZGVyZWRDaGlsZHJlbmAgdGhhblxuICogdGhlIERPTSBub2RlcyB3ZSBzZWUuIFRvIGF2b2lkIHRoaXMsIFJlYWN0TXVsdGlDaGlsZCBjYWxsc1xuICogYHByZXBhcmVUb01hbmFnZUNoaWxkcmVuYCBiZWZvcmUgd2UgY2hhbmdlIGBfcmVuZGVyZWRDaGlsZHJlbmAsIGF0IHdoaWNoXG4gKiB0aW1lIHRoZSBjb250YWluZXIncyBjaGlsZCBub2RlcyBhcmUgYWx3YXlzIGNhY2hlZCAodW50aWwgaXQgdW5tb3VudHMpLlxuICovXG5mdW5jdGlvbiBwcmVjYWNoZUNoaWxkTm9kZXMoaW5zdCwgbm9kZSkge1xuICBpZiAoaW5zdC5fZmxhZ3MgJiBGbGFncy5oYXNDYWNoZWRDaGlsZE5vZGVzKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHZhciBjaGlsZHJlbiA9IGluc3QuX3JlbmRlcmVkQ2hpbGRyZW47XG4gIHZhciBjaGlsZE5vZGUgPSBub2RlLmZpcnN0Q2hpbGQ7XG4gIG91dGVyOiBmb3IgKHZhciBuYW1lIGluIGNoaWxkcmVuKSB7XG4gICAgaWYgKCFjaGlsZHJlbi5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIHZhciBjaGlsZEluc3QgPSBjaGlsZHJlbltuYW1lXTtcbiAgICB2YXIgY2hpbGRJRCA9IGdldFJlbmRlcmVkSG9zdE9yVGV4dEZyb21Db21wb25lbnQoY2hpbGRJbnN0KS5fZG9tSUQ7XG4gICAgaWYgKGNoaWxkSUQgPT09IDApIHtcbiAgICAgIC8vIFdlJ3JlIGN1cnJlbnRseSB1bm1vdW50aW5nIHRoaXMgY2hpbGQgaW4gUmVhY3RNdWx0aUNoaWxkOyBza2lwIGl0LlxuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIC8vIFdlIGFzc3VtZSB0aGUgY2hpbGQgbm9kZXMgYXJlIGluIHRoZSBzYW1lIG9yZGVyIGFzIHRoZSBjaGlsZCBpbnN0YW5jZXMuXG4gICAgZm9yICg7IGNoaWxkTm9kZSAhPT0gbnVsbDsgY2hpbGROb2RlID0gY2hpbGROb2RlLm5leHRTaWJsaW5nKSB7XG4gICAgICBpZiAoc2hvdWxkUHJlY2FjaGVOb2RlKGNoaWxkTm9kZSwgY2hpbGRJRCkpIHtcbiAgICAgICAgcHJlY2FjaGVOb2RlKGNoaWxkSW5zdCwgY2hpbGROb2RlKTtcbiAgICAgICAgY29udGludWUgb3V0ZXI7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIFdlIHJlYWNoZWQgdGhlIGVuZCBvZiB0aGUgRE9NIGNoaWxkcmVuIHdpdGhvdXQgZmluZGluZyBhbiBJRCBtYXRjaC5cbiAgICAhZmFsc2UgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAnVW5hYmxlIHRvIGZpbmQgZWxlbWVudCB3aXRoIElEICVzLicsIGNoaWxkSUQpIDogX3Byb2RJbnZhcmlhbnQoJzMyJywgY2hpbGRJRCkgOiB2b2lkIDA7XG4gIH1cbiAgaW5zdC5fZmxhZ3MgfD0gRmxhZ3MuaGFzQ2FjaGVkQ2hpbGROb2Rlcztcbn1cblxuLyoqXG4gKiBHaXZlbiBhIERPTSBub2RlLCByZXR1cm4gdGhlIGNsb3Nlc3QgUmVhY3RET01Db21wb25lbnQgb3JcbiAqIFJlYWN0RE9NVGV4dENvbXBvbmVudCBpbnN0YW5jZSBhbmNlc3Rvci5cbiAqL1xuZnVuY3Rpb24gZ2V0Q2xvc2VzdEluc3RhbmNlRnJvbU5vZGUobm9kZSkge1xuICBpZiAobm9kZVtpbnRlcm5hbEluc3RhbmNlS2V5XSkge1xuICAgIHJldHVybiBub2RlW2ludGVybmFsSW5zdGFuY2VLZXldO1xuICB9XG5cbiAgLy8gV2FsayB1cCB0aGUgdHJlZSB1bnRpbCB3ZSBmaW5kIGFuIGFuY2VzdG9yIHdob3NlIGluc3RhbmNlIHdlIGhhdmUgY2FjaGVkLlxuICB2YXIgcGFyZW50cyA9IFtdO1xuICB3aGlsZSAoIW5vZGVbaW50ZXJuYWxJbnN0YW5jZUtleV0pIHtcbiAgICBwYXJlbnRzLnB1c2gobm9kZSk7XG4gICAgaWYgKG5vZGUucGFyZW50Tm9kZSkge1xuICAgICAgbm9kZSA9IG5vZGUucGFyZW50Tm9kZTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVG9wIG9mIHRoZSB0cmVlLiBUaGlzIG5vZGUgbXVzdCBub3QgYmUgcGFydCBvZiBhIFJlYWN0IHRyZWUgKG9yIGlzXG4gICAgICAvLyB1bm1vdW50ZWQsIHBvdGVudGlhbGx5KS5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHZhciBjbG9zZXN0O1xuICB2YXIgaW5zdDtcbiAgZm9yICg7IG5vZGUgJiYgKGluc3QgPSBub2RlW2ludGVybmFsSW5zdGFuY2VLZXldKTsgbm9kZSA9IHBhcmVudHMucG9wKCkpIHtcbiAgICBjbG9zZXN0ID0gaW5zdDtcbiAgICBpZiAocGFyZW50cy5sZW5ndGgpIHtcbiAgICAgIHByZWNhY2hlQ2hpbGROb2RlcyhpbnN0LCBub2RlKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gY2xvc2VzdDtcbn1cblxuLyoqXG4gKiBHaXZlbiBhIERPTSBub2RlLCByZXR1cm4gdGhlIFJlYWN0RE9NQ29tcG9uZW50IG9yIFJlYWN0RE9NVGV4dENvbXBvbmVudFxuICogaW5zdGFuY2UsIG9yIG51bGwgaWYgdGhlIG5vZGUgd2FzIG5vdCByZW5kZXJlZCBieSB0aGlzIFJlYWN0LlxuICovXG5mdW5jdGlvbiBnZXRJbnN0YW5jZUZyb21Ob2RlKG5vZGUpIHtcbiAgdmFyIGluc3QgPSBnZXRDbG9zZXN0SW5zdGFuY2VGcm9tTm9kZShub2RlKTtcbiAgaWYgKGluc3QgIT0gbnVsbCAmJiBpbnN0Ll9ob3N0Tm9kZSA9PT0gbm9kZSkge1xuICAgIHJldHVybiBpbnN0O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbi8qKlxuICogR2l2ZW4gYSBSZWFjdERPTUNvbXBvbmVudCBvciBSZWFjdERPTVRleHRDb21wb25lbnQsIHJldHVybiB0aGUgY29ycmVzcG9uZGluZ1xuICogRE9NIG5vZGUuXG4gKi9cbmZ1bmN0aW9uIGdldE5vZGVGcm9tSW5zdGFuY2UoaW5zdCkge1xuICAvLyBXaXRob3V0IHRoaXMgZmlyc3QgaW52YXJpYW50LCBwYXNzaW5nIGEgbm9uLURPTS1jb21wb25lbnQgdHJpZ2dlcnMgdGhlIG5leHRcbiAgLy8gaW52YXJpYW50IGZvciBhIG1pc3NpbmcgcGFyZW50LCB3aGljaCBpcyBzdXBlciBjb25mdXNpbmcuXG4gICEoaW5zdC5faG9zdE5vZGUgIT09IHVuZGVmaW5lZCkgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAnZ2V0Tm9kZUZyb21JbnN0YW5jZTogSW52YWxpZCBhcmd1bWVudC4nKSA6IF9wcm9kSW52YXJpYW50KCczMycpIDogdm9pZCAwO1xuXG4gIGlmIChpbnN0Ll9ob3N0Tm9kZSkge1xuICAgIHJldHVybiBpbnN0Ll9ob3N0Tm9kZTtcbiAgfVxuXG4gIC8vIFdhbGsgdXAgdGhlIHRyZWUgdW50aWwgd2UgZmluZCBhbiBhbmNlc3RvciB3aG9zZSBET00gbm9kZSB3ZSBoYXZlIGNhY2hlZC5cbiAgdmFyIHBhcmVudHMgPSBbXTtcbiAgd2hpbGUgKCFpbnN0Ll9ob3N0Tm9kZSkge1xuICAgIHBhcmVudHMucHVzaChpbnN0KTtcbiAgICAhaW5zdC5faG9zdFBhcmVudCA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICdSZWFjdCBET00gdHJlZSByb290IHNob3VsZCBhbHdheXMgaGF2ZSBhIG5vZGUgcmVmZXJlbmNlLicpIDogX3Byb2RJbnZhcmlhbnQoJzM0JykgOiB2b2lkIDA7XG4gICAgaW5zdCA9IGluc3QuX2hvc3RQYXJlbnQ7XG4gIH1cblxuICAvLyBOb3cgcGFyZW50cyBjb250YWlucyBlYWNoIGFuY2VzdG9yIHRoYXQgZG9lcyAqbm90KiBoYXZlIGEgY2FjaGVkIG5hdGl2ZVxuICAvLyBub2RlLCBhbmQgYGluc3RgIGlzIHRoZSBkZWVwZXN0IGFuY2VzdG9yIHRoYXQgZG9lcy5cbiAgZm9yICg7IHBhcmVudHMubGVuZ3RoOyBpbnN0ID0gcGFyZW50cy5wb3AoKSkge1xuICAgIHByZWNhY2hlQ2hpbGROb2RlcyhpbnN0LCBpbnN0Ll9ob3N0Tm9kZSk7XG4gIH1cblxuICByZXR1cm4gaW5zdC5faG9zdE5vZGU7XG59XG5cbnZhciBSZWFjdERPTUNvbXBvbmVudFRyZWUgPSB7XG4gIGdldENsb3Nlc3RJbnN0YW5jZUZyb21Ob2RlOiBnZXRDbG9zZXN0SW5zdGFuY2VGcm9tTm9kZSxcbiAgZ2V0SW5zdGFuY2VGcm9tTm9kZTogZ2V0SW5zdGFuY2VGcm9tTm9kZSxcbiAgZ2V0Tm9kZUZyb21JbnN0YW5jZTogZ2V0Tm9kZUZyb21JbnN0YW5jZSxcbiAgcHJlY2FjaGVDaGlsZE5vZGVzOiBwcmVjYWNoZUNoaWxkTm9kZXMsXG4gIHByZWNhY2hlTm9kZTogcHJlY2FjaGVOb2RlLFxuICB1bmNhY2hlTm9kZTogdW5jYWNoZU5vZGVcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RET01Db21wb25lbnRUcmVlO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QtZG9tL2xpYi9SZWFjdERPTUNvbXBvbmVudFRyZWUuanMiLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIGNhblVzZURPTSA9ICEhKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5kb2N1bWVudCAmJiB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCk7XG5cbi8qKlxuICogU2ltcGxlLCBsaWdodHdlaWdodCBtb2R1bGUgYXNzaXN0aW5nIHdpdGggdGhlIGRldGVjdGlvbiBhbmQgY29udGV4dCBvZlxuICogV29ya2VyLiBIZWxwcyBhdm9pZCBjaXJjdWxhciBkZXBlbmRlbmNpZXMgYW5kIGFsbG93cyBjb2RlIHRvIHJlYXNvbiBhYm91dFxuICogd2hldGhlciBvciBub3QgdGhleSBhcmUgaW4gYSBXb3JrZXIsIGV2ZW4gaWYgdGhleSBuZXZlciBpbmNsdWRlIHRoZSBtYWluXG4gKiBgUmVhY3RXb3JrZXJgIGRlcGVuZGVuY3kuXG4gKi9cbnZhciBFeGVjdXRpb25FbnZpcm9ubWVudCA9IHtcblxuICBjYW5Vc2VET006IGNhblVzZURPTSxcblxuICBjYW5Vc2VXb3JrZXJzOiB0eXBlb2YgV29ya2VyICE9PSAndW5kZWZpbmVkJyxcblxuICBjYW5Vc2VFdmVudExpc3RlbmVyczogY2FuVXNlRE9NICYmICEhKHdpbmRvdy5hZGRFdmVudExpc3RlbmVyIHx8IHdpbmRvdy5hdHRhY2hFdmVudCksXG5cbiAgY2FuVXNlVmlld3BvcnQ6IGNhblVzZURPTSAmJiAhIXdpbmRvdy5zY3JlZW4sXG5cbiAgaXNJbldvcmtlcjogIWNhblVzZURPTSAvLyBGb3Igbm93LCB0aGlzIGlzIHRydWUgLSBtaWdodCBjaGFuZ2UgaW4gdGhlIGZ1dHVyZS5cblxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBFeGVjdXRpb25FbnZpcm9ubWVudDtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L2ZianMvbGliL0V4ZWN1dGlvbkVudmlyb25tZW50LmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKi9cblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgdmFyIFJFQUNUX0VMRU1FTlRfVFlQRSA9ICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmXG4gICAgU3ltYm9sLmZvciAmJlxuICAgIFN5bWJvbC5mb3IoJ3JlYWN0LmVsZW1lbnQnKSkgfHxcbiAgICAweGVhYzc7XG5cbiAgdmFyIGlzVmFsaWRFbGVtZW50ID0gZnVuY3Rpb24ob2JqZWN0KSB7XG4gICAgcmV0dXJuIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnICYmXG4gICAgICBvYmplY3QgIT09IG51bGwgJiZcbiAgICAgIG9iamVjdC4kJHR5cGVvZiA9PT0gUkVBQ1RfRUxFTUVOVF9UWVBFO1xuICB9O1xuXG4gIC8vIEJ5IGV4cGxpY2l0bHkgdXNpbmcgYHByb3AtdHlwZXNgIHlvdSBhcmUgb3B0aW5nIGludG8gbmV3IGRldmVsb3BtZW50IGJlaGF2aW9yLlxuICAvLyBodHRwOi8vZmIubWUvcHJvcC10eXBlcy1pbi1wcm9kXG4gIHZhciB0aHJvd09uRGlyZWN0QWNjZXNzID0gdHJ1ZTtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2ZhY3RvcnlXaXRoVHlwZUNoZWNrZXJzJykoaXNWYWxpZEVsZW1lbnQsIHRocm93T25EaXJlY3RBY2Nlc3MpO1xufSBlbHNlIHtcbiAgLy8gQnkgZXhwbGljaXRseSB1c2luZyBgcHJvcC10eXBlc2AgeW91IGFyZSBvcHRpbmcgaW50byBuZXcgcHJvZHVjdGlvbiBiZWhhdmlvci5cbiAgLy8gaHR0cDovL2ZiLm1lL3Byb3AtdHlwZXMtaW4tcHJvZFxuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vZmFjdG9yeVdpdGhUaHJvd2luZ1NoaW1zJykoKTtcbn1cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcHJvcC10eXBlcy9pbmRleC5qcyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTYtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIFxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIF9wcm9kSW52YXJpYW50ID0gcmVxdWlyZSgnLi9yZWFjdFByb2RJbnZhcmlhbnQnKTtcblxudmFyIFJlYWN0Q3VycmVudE93bmVyID0gcmVxdWlyZSgnLi9SZWFjdEN1cnJlbnRPd25lcicpO1xuXG52YXIgaW52YXJpYW50ID0gcmVxdWlyZSgnZmJqcy9saWIvaW52YXJpYW50Jyk7XG52YXIgd2FybmluZyA9IHJlcXVpcmUoJ2ZianMvbGliL3dhcm5pbmcnKTtcblxuZnVuY3Rpb24gaXNOYXRpdmUoZm4pIHtcbiAgLy8gQmFzZWQgb24gaXNOYXRpdmUoKSBmcm9tIExvZGFzaFxuICB2YXIgZnVuY1RvU3RyaW5nID0gRnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nO1xuICB2YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuICB2YXIgcmVJc05hdGl2ZSA9IFJlZ0V4cCgnXicgKyBmdW5jVG9TdHJpbmdcbiAgLy8gVGFrZSBhbiBleGFtcGxlIG5hdGl2ZSBmdW5jdGlvbiBzb3VyY2UgZm9yIGNvbXBhcmlzb25cbiAgLmNhbGwoaGFzT3duUHJvcGVydHlcbiAgLy8gU3RyaXAgcmVnZXggY2hhcmFjdGVycyBzbyB3ZSBjYW4gdXNlIGl0IGZvciByZWdleFxuICApLnJlcGxhY2UoL1tcXFxcXiQuKis/KClbXFxde318XS9nLCAnXFxcXCQmJ1xuICAvLyBSZW1vdmUgaGFzT3duUHJvcGVydHkgZnJvbSB0aGUgdGVtcGxhdGUgdG8gbWFrZSBpdCBnZW5lcmljXG4gICkucmVwbGFjZSgvaGFzT3duUHJvcGVydHl8KGZ1bmN0aW9uKS4qPyg/PVxcXFxcXCgpfCBmb3IgLis/KD89XFxcXFxcXSkvZywgJyQxLio/JykgKyAnJCcpO1xuICB0cnkge1xuICAgIHZhciBzb3VyY2UgPSBmdW5jVG9TdHJpbmcuY2FsbChmbik7XG4gICAgcmV0dXJuIHJlSXNOYXRpdmUudGVzdChzb3VyY2UpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxudmFyIGNhblVzZUNvbGxlY3Rpb25zID1cbi8vIEFycmF5LmZyb21cbnR5cGVvZiBBcnJheS5mcm9tID09PSAnZnVuY3Rpb24nICYmXG4vLyBNYXBcbnR5cGVvZiBNYXAgPT09ICdmdW5jdGlvbicgJiYgaXNOYXRpdmUoTWFwKSAmJlxuLy8gTWFwLnByb3RvdHlwZS5rZXlzXG5NYXAucHJvdG90eXBlICE9IG51bGwgJiYgdHlwZW9mIE1hcC5wcm90b3R5cGUua2V5cyA9PT0gJ2Z1bmN0aW9uJyAmJiBpc05hdGl2ZShNYXAucHJvdG90eXBlLmtleXMpICYmXG4vLyBTZXRcbnR5cGVvZiBTZXQgPT09ICdmdW5jdGlvbicgJiYgaXNOYXRpdmUoU2V0KSAmJlxuLy8gU2V0LnByb3RvdHlwZS5rZXlzXG5TZXQucHJvdG90eXBlICE9IG51bGwgJiYgdHlwZW9mIFNldC5wcm90b3R5cGUua2V5cyA9PT0gJ2Z1bmN0aW9uJyAmJiBpc05hdGl2ZShTZXQucHJvdG90eXBlLmtleXMpO1xuXG52YXIgc2V0SXRlbTtcbnZhciBnZXRJdGVtO1xudmFyIHJlbW92ZUl0ZW07XG52YXIgZ2V0SXRlbUlEcztcbnZhciBhZGRSb290O1xudmFyIHJlbW92ZVJvb3Q7XG52YXIgZ2V0Um9vdElEcztcblxuaWYgKGNhblVzZUNvbGxlY3Rpb25zKSB7XG4gIHZhciBpdGVtTWFwID0gbmV3IE1hcCgpO1xuICB2YXIgcm9vdElEU2V0ID0gbmV3IFNldCgpO1xuXG4gIHNldEl0ZW0gPSBmdW5jdGlvbiAoaWQsIGl0ZW0pIHtcbiAgICBpdGVtTWFwLnNldChpZCwgaXRlbSk7XG4gIH07XG4gIGdldEl0ZW0gPSBmdW5jdGlvbiAoaWQpIHtcbiAgICByZXR1cm4gaXRlbU1hcC5nZXQoaWQpO1xuICB9O1xuICByZW1vdmVJdGVtID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgaXRlbU1hcFsnZGVsZXRlJ10oaWQpO1xuICB9O1xuICBnZXRJdGVtSURzID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBBcnJheS5mcm9tKGl0ZW1NYXAua2V5cygpKTtcbiAgfTtcblxuICBhZGRSb290ID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgcm9vdElEU2V0LmFkZChpZCk7XG4gIH07XG4gIHJlbW92ZVJvb3QgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICByb290SURTZXRbJ2RlbGV0ZSddKGlkKTtcbiAgfTtcbiAgZ2V0Um9vdElEcyA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gQXJyYXkuZnJvbShyb290SURTZXQua2V5cygpKTtcbiAgfTtcbn0gZWxzZSB7XG4gIHZhciBpdGVtQnlLZXkgPSB7fTtcbiAgdmFyIHJvb3RCeUtleSA9IHt9O1xuXG4gIC8vIFVzZSBub24tbnVtZXJpYyBrZXlzIHRvIHByZXZlbnQgVjggcGVyZm9ybWFuY2UgaXNzdWVzOlxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvcHVsbC83MjMyXG4gIHZhciBnZXRLZXlGcm9tSUQgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICByZXR1cm4gJy4nICsgaWQ7XG4gIH07XG4gIHZhciBnZXRJREZyb21LZXkgPSBmdW5jdGlvbiAoa2V5KSB7XG4gICAgcmV0dXJuIHBhcnNlSW50KGtleS5zdWJzdHIoMSksIDEwKTtcbiAgfTtcblxuICBzZXRJdGVtID0gZnVuY3Rpb24gKGlkLCBpdGVtKSB7XG4gICAgdmFyIGtleSA9IGdldEtleUZyb21JRChpZCk7XG4gICAgaXRlbUJ5S2V5W2tleV0gPSBpdGVtO1xuICB9O1xuICBnZXRJdGVtID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgdmFyIGtleSA9IGdldEtleUZyb21JRChpZCk7XG4gICAgcmV0dXJuIGl0ZW1CeUtleVtrZXldO1xuICB9O1xuICByZW1vdmVJdGVtID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgdmFyIGtleSA9IGdldEtleUZyb21JRChpZCk7XG4gICAgZGVsZXRlIGl0ZW1CeUtleVtrZXldO1xuICB9O1xuICBnZXRJdGVtSURzID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhpdGVtQnlLZXkpLm1hcChnZXRJREZyb21LZXkpO1xuICB9O1xuXG4gIGFkZFJvb3QgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICB2YXIga2V5ID0gZ2V0S2V5RnJvbUlEKGlkKTtcbiAgICByb290QnlLZXlba2V5XSA9IHRydWU7XG4gIH07XG4gIHJlbW92ZVJvb3QgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICB2YXIga2V5ID0gZ2V0S2V5RnJvbUlEKGlkKTtcbiAgICBkZWxldGUgcm9vdEJ5S2V5W2tleV07XG4gIH07XG4gIGdldFJvb3RJRHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHJvb3RCeUtleSkubWFwKGdldElERnJvbUtleSk7XG4gIH07XG59XG5cbnZhciB1bm1vdW50ZWRJRHMgPSBbXTtcblxuZnVuY3Rpb24gcHVyZ2VEZWVwKGlkKSB7XG4gIHZhciBpdGVtID0gZ2V0SXRlbShpZCk7XG4gIGlmIChpdGVtKSB7XG4gICAgdmFyIGNoaWxkSURzID0gaXRlbS5jaGlsZElEcztcblxuICAgIHJlbW92ZUl0ZW0oaWQpO1xuICAgIGNoaWxkSURzLmZvckVhY2gocHVyZ2VEZWVwKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBkZXNjcmliZUNvbXBvbmVudEZyYW1lKG5hbWUsIHNvdXJjZSwgb3duZXJOYW1lKSB7XG4gIHJldHVybiAnXFxuICAgIGluICcgKyAobmFtZSB8fCAnVW5rbm93bicpICsgKHNvdXJjZSA/ICcgKGF0ICcgKyBzb3VyY2UuZmlsZU5hbWUucmVwbGFjZSgvXi4qW1xcXFxcXC9dLywgJycpICsgJzonICsgc291cmNlLmxpbmVOdW1iZXIgKyAnKScgOiBvd25lck5hbWUgPyAnIChjcmVhdGVkIGJ5ICcgKyBvd25lck5hbWUgKyAnKScgOiAnJyk7XG59XG5cbmZ1bmN0aW9uIGdldERpc3BsYXlOYW1lKGVsZW1lbnQpIHtcbiAgaWYgKGVsZW1lbnQgPT0gbnVsbCkge1xuICAgIHJldHVybiAnI2VtcHR5JztcbiAgfSBlbHNlIGlmICh0eXBlb2YgZWxlbWVudCA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIGVsZW1lbnQgPT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuICcjdGV4dCc7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGVsZW1lbnQudHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZWxlbWVudC50eXBlO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBlbGVtZW50LnR5cGUuZGlzcGxheU5hbWUgfHwgZWxlbWVudC50eXBlLm5hbWUgfHwgJ1Vua25vd24nO1xuICB9XG59XG5cbmZ1bmN0aW9uIGRlc2NyaWJlSUQoaWQpIHtcbiAgdmFyIG5hbWUgPSBSZWFjdENvbXBvbmVudFRyZWVIb29rLmdldERpc3BsYXlOYW1lKGlkKTtcbiAgdmFyIGVsZW1lbnQgPSBSZWFjdENvbXBvbmVudFRyZWVIb29rLmdldEVsZW1lbnQoaWQpO1xuICB2YXIgb3duZXJJRCA9IFJlYWN0Q29tcG9uZW50VHJlZUhvb2suZ2V0T3duZXJJRChpZCk7XG4gIHZhciBvd25lck5hbWU7XG4gIGlmIChvd25lcklEKSB7XG4gICAgb3duZXJOYW1lID0gUmVhY3RDb21wb25lbnRUcmVlSG9vay5nZXREaXNwbGF5TmFtZShvd25lcklEKTtcbiAgfVxuICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyhlbGVtZW50LCAnUmVhY3RDb21wb25lbnRUcmVlSG9vazogTWlzc2luZyBSZWFjdCBlbGVtZW50IGZvciBkZWJ1Z0lEICVzIHdoZW4gJyArICdidWlsZGluZyBzdGFjaycsIGlkKSA6IHZvaWQgMDtcbiAgcmV0dXJuIGRlc2NyaWJlQ29tcG9uZW50RnJhbWUobmFtZSwgZWxlbWVudCAmJiBlbGVtZW50Ll9zb3VyY2UsIG93bmVyTmFtZSk7XG59XG5cbnZhciBSZWFjdENvbXBvbmVudFRyZWVIb29rID0ge1xuICBvblNldENoaWxkcmVuOiBmdW5jdGlvbiAoaWQsIG5leHRDaGlsZElEcykge1xuICAgIHZhciBpdGVtID0gZ2V0SXRlbShpZCk7XG4gICAgIWl0ZW0gPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAnSXRlbSBtdXN0IGhhdmUgYmVlbiBzZXQnKSA6IF9wcm9kSW52YXJpYW50KCcxNDQnKSA6IHZvaWQgMDtcbiAgICBpdGVtLmNoaWxkSURzID0gbmV4dENoaWxkSURzO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuZXh0Q2hpbGRJRHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBuZXh0Q2hpbGRJRCA9IG5leHRDaGlsZElEc1tpXTtcbiAgICAgIHZhciBuZXh0Q2hpbGQgPSBnZXRJdGVtKG5leHRDaGlsZElEKTtcbiAgICAgICFuZXh0Q2hpbGQgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAnRXhwZWN0ZWQgaG9vayBldmVudHMgdG8gZmlyZSBmb3IgdGhlIGNoaWxkIGJlZm9yZSBpdHMgcGFyZW50IGluY2x1ZGVzIGl0IGluIG9uU2V0Q2hpbGRyZW4oKS4nKSA6IF9wcm9kSW52YXJpYW50KCcxNDAnKSA6IHZvaWQgMDtcbiAgICAgICEobmV4dENoaWxkLmNoaWxkSURzICE9IG51bGwgfHwgdHlwZW9mIG5leHRDaGlsZC5lbGVtZW50ICE9PSAnb2JqZWN0JyB8fCBuZXh0Q2hpbGQuZWxlbWVudCA9PSBudWxsKSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICdFeHBlY3RlZCBvblNldENoaWxkcmVuKCkgdG8gZmlyZSBmb3IgYSBjb250YWluZXIgY2hpbGQgYmVmb3JlIGl0cyBwYXJlbnQgaW5jbHVkZXMgaXQgaW4gb25TZXRDaGlsZHJlbigpLicpIDogX3Byb2RJbnZhcmlhbnQoJzE0MScpIDogdm9pZCAwO1xuICAgICAgIW5leHRDaGlsZC5pc01vdW50ZWQgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAnRXhwZWN0ZWQgb25Nb3VudENvbXBvbmVudCgpIHRvIGZpcmUgZm9yIHRoZSBjaGlsZCBiZWZvcmUgaXRzIHBhcmVudCBpbmNsdWRlcyBpdCBpbiBvblNldENoaWxkcmVuKCkuJykgOiBfcHJvZEludmFyaWFudCgnNzEnKSA6IHZvaWQgMDtcbiAgICAgIGlmIChuZXh0Q2hpbGQucGFyZW50SUQgPT0gbnVsbCkge1xuICAgICAgICBuZXh0Q2hpbGQucGFyZW50SUQgPSBpZDtcbiAgICAgICAgLy8gVE9ETzogVGhpcyBzaG91bGRuJ3QgYmUgbmVjZXNzYXJ5IGJ1dCBtb3VudGluZyBhIG5ldyByb290IGR1cmluZyBpblxuICAgICAgICAvLyBjb21wb25lbnRXaWxsTW91bnQgY3VycmVudGx5IGNhdXNlcyBub3QteWV0LW1vdW50ZWQgY29tcG9uZW50cyB0b1xuICAgICAgICAvLyBiZSBwdXJnZWQgZnJvbSBvdXIgdHJlZSBkYXRhIHNvIHRoZWlyIHBhcmVudCBpZCBpcyBtaXNzaW5nLlxuICAgICAgfVxuICAgICAgIShuZXh0Q2hpbGQucGFyZW50SUQgPT09IGlkKSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICdFeHBlY3RlZCBvbkJlZm9yZU1vdW50Q29tcG9uZW50KCkgcGFyZW50IGFuZCBvblNldENoaWxkcmVuKCkgdG8gYmUgY29uc2lzdGVudCAoJXMgaGFzIHBhcmVudHMgJXMgYW5kICVzKS4nLCBuZXh0Q2hpbGRJRCwgbmV4dENoaWxkLnBhcmVudElELCBpZCkgOiBfcHJvZEludmFyaWFudCgnMTQyJywgbmV4dENoaWxkSUQsIG5leHRDaGlsZC5wYXJlbnRJRCwgaWQpIDogdm9pZCAwO1xuICAgIH1cbiAgfSxcbiAgb25CZWZvcmVNb3VudENvbXBvbmVudDogZnVuY3Rpb24gKGlkLCBlbGVtZW50LCBwYXJlbnRJRCkge1xuICAgIHZhciBpdGVtID0ge1xuICAgICAgZWxlbWVudDogZWxlbWVudCxcbiAgICAgIHBhcmVudElEOiBwYXJlbnRJRCxcbiAgICAgIHRleHQ6IG51bGwsXG4gICAgICBjaGlsZElEczogW10sXG4gICAgICBpc01vdW50ZWQ6IGZhbHNlLFxuICAgICAgdXBkYXRlQ291bnQ6IDBcbiAgICB9O1xuICAgIHNldEl0ZW0oaWQsIGl0ZW0pO1xuICB9LFxuICBvbkJlZm9yZVVwZGF0ZUNvbXBvbmVudDogZnVuY3Rpb24gKGlkLCBlbGVtZW50KSB7XG4gICAgdmFyIGl0ZW0gPSBnZXRJdGVtKGlkKTtcbiAgICBpZiAoIWl0ZW0gfHwgIWl0ZW0uaXNNb3VudGVkKSB7XG4gICAgICAvLyBXZSBtYXkgZW5kIHVwIGhlcmUgYXMgYSByZXN1bHQgb2Ygc2V0U3RhdGUoKSBpbiBjb21wb25lbnRXaWxsVW5tb3VudCgpLlxuICAgICAgLy8gSW4gdGhpcyBjYXNlLCBpZ25vcmUgdGhlIGVsZW1lbnQuXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGl0ZW0uZWxlbWVudCA9IGVsZW1lbnQ7XG4gIH0sXG4gIG9uTW91bnRDb21wb25lbnQ6IGZ1bmN0aW9uIChpZCkge1xuICAgIHZhciBpdGVtID0gZ2V0SXRlbShpZCk7XG4gICAgIWl0ZW0gPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAnSXRlbSBtdXN0IGhhdmUgYmVlbiBzZXQnKSA6IF9wcm9kSW52YXJpYW50KCcxNDQnKSA6IHZvaWQgMDtcbiAgICBpdGVtLmlzTW91bnRlZCA9IHRydWU7XG4gICAgdmFyIGlzUm9vdCA9IGl0ZW0ucGFyZW50SUQgPT09IDA7XG4gICAgaWYgKGlzUm9vdCkge1xuICAgICAgYWRkUm9vdChpZCk7XG4gICAgfVxuICB9LFxuICBvblVwZGF0ZUNvbXBvbmVudDogZnVuY3Rpb24gKGlkKSB7XG4gICAgdmFyIGl0ZW0gPSBnZXRJdGVtKGlkKTtcbiAgICBpZiAoIWl0ZW0gfHwgIWl0ZW0uaXNNb3VudGVkKSB7XG4gICAgICAvLyBXZSBtYXkgZW5kIHVwIGhlcmUgYXMgYSByZXN1bHQgb2Ygc2V0U3RhdGUoKSBpbiBjb21wb25lbnRXaWxsVW5tb3VudCgpLlxuICAgICAgLy8gSW4gdGhpcyBjYXNlLCBpZ25vcmUgdGhlIGVsZW1lbnQuXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGl0ZW0udXBkYXRlQ291bnQrKztcbiAgfSxcbiAgb25Vbm1vdW50Q29tcG9uZW50OiBmdW5jdGlvbiAoaWQpIHtcbiAgICB2YXIgaXRlbSA9IGdldEl0ZW0oaWQpO1xuICAgIGlmIChpdGVtKSB7XG4gICAgICAvLyBXZSBuZWVkIHRvIGNoZWNrIGlmIGl0IGV4aXN0cy5cbiAgICAgIC8vIGBpdGVtYCBtaWdodCBub3QgZXhpc3QgaWYgaXQgaXMgaW5zaWRlIGFuIGVycm9yIGJvdW5kYXJ5LCBhbmQgYSBzaWJsaW5nXG4gICAgICAvLyBlcnJvciBib3VuZGFyeSBjaGlsZCB0aHJldyB3aGlsZSBtb3VudGluZy4gVGhlbiB0aGlzIGluc3RhbmNlIG5ldmVyXG4gICAgICAvLyBnb3QgYSBjaGFuY2UgdG8gbW91bnQsIGJ1dCBpdCBzdGlsbCBnZXRzIGFuIHVubW91bnRpbmcgZXZlbnQgZHVyaW5nXG4gICAgICAvLyB0aGUgZXJyb3IgYm91bmRhcnkgY2xlYW51cC5cbiAgICAgIGl0ZW0uaXNNb3VudGVkID0gZmFsc2U7XG4gICAgICB2YXIgaXNSb290ID0gaXRlbS5wYXJlbnRJRCA9PT0gMDtcbiAgICAgIGlmIChpc1Jvb3QpIHtcbiAgICAgICAgcmVtb3ZlUm9vdChpZCk7XG4gICAgICB9XG4gICAgfVxuICAgIHVubW91bnRlZElEcy5wdXNoKGlkKTtcbiAgfSxcbiAgcHVyZ2VVbm1vdW50ZWRDb21wb25lbnRzOiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKFJlYWN0Q29tcG9uZW50VHJlZUhvb2suX3ByZXZlbnRQdXJnaW5nKSB7XG4gICAgICAvLyBTaG91bGQgb25seSBiZSB1c2VkIGZvciB0ZXN0aW5nLlxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdW5tb3VudGVkSURzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaWQgPSB1bm1vdW50ZWRJRHNbaV07XG4gICAgICBwdXJnZURlZXAoaWQpO1xuICAgIH1cbiAgICB1bm1vdW50ZWRJRHMubGVuZ3RoID0gMDtcbiAgfSxcbiAgaXNNb3VudGVkOiBmdW5jdGlvbiAoaWQpIHtcbiAgICB2YXIgaXRlbSA9IGdldEl0ZW0oaWQpO1xuICAgIHJldHVybiBpdGVtID8gaXRlbS5pc01vdW50ZWQgOiBmYWxzZTtcbiAgfSxcbiAgZ2V0Q3VycmVudFN0YWNrQWRkZW5kdW06IGZ1bmN0aW9uICh0b3BFbGVtZW50KSB7XG4gICAgdmFyIGluZm8gPSAnJztcbiAgICBpZiAodG9wRWxlbWVudCkge1xuICAgICAgdmFyIG5hbWUgPSBnZXREaXNwbGF5TmFtZSh0b3BFbGVtZW50KTtcbiAgICAgIHZhciBvd25lciA9IHRvcEVsZW1lbnQuX293bmVyO1xuICAgICAgaW5mbyArPSBkZXNjcmliZUNvbXBvbmVudEZyYW1lKG5hbWUsIHRvcEVsZW1lbnQuX3NvdXJjZSwgb3duZXIgJiYgb3duZXIuZ2V0TmFtZSgpKTtcbiAgICB9XG5cbiAgICB2YXIgY3VycmVudE93bmVyID0gUmVhY3RDdXJyZW50T3duZXIuY3VycmVudDtcbiAgICB2YXIgaWQgPSBjdXJyZW50T3duZXIgJiYgY3VycmVudE93bmVyLl9kZWJ1Z0lEO1xuXG4gICAgaW5mbyArPSBSZWFjdENvbXBvbmVudFRyZWVIb29rLmdldFN0YWNrQWRkZW5kdW1CeUlEKGlkKTtcbiAgICByZXR1cm4gaW5mbztcbiAgfSxcbiAgZ2V0U3RhY2tBZGRlbmR1bUJ5SUQ6IGZ1bmN0aW9uIChpZCkge1xuICAgIHZhciBpbmZvID0gJyc7XG4gICAgd2hpbGUgKGlkKSB7XG4gICAgICBpbmZvICs9IGRlc2NyaWJlSUQoaWQpO1xuICAgICAgaWQgPSBSZWFjdENvbXBvbmVudFRyZWVIb29rLmdldFBhcmVudElEKGlkKTtcbiAgICB9XG4gICAgcmV0dXJuIGluZm87XG4gIH0sXG4gIGdldENoaWxkSURzOiBmdW5jdGlvbiAoaWQpIHtcbiAgICB2YXIgaXRlbSA9IGdldEl0ZW0oaWQpO1xuICAgIHJldHVybiBpdGVtID8gaXRlbS5jaGlsZElEcyA6IFtdO1xuICB9LFxuICBnZXREaXNwbGF5TmFtZTogZnVuY3Rpb24gKGlkKSB7XG4gICAgdmFyIGVsZW1lbnQgPSBSZWFjdENvbXBvbmVudFRyZWVIb29rLmdldEVsZW1lbnQoaWQpO1xuICAgIGlmICghZWxlbWVudCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBnZXREaXNwbGF5TmFtZShlbGVtZW50KTtcbiAgfSxcbiAgZ2V0RWxlbWVudDogZnVuY3Rpb24gKGlkKSB7XG4gICAgdmFyIGl0ZW0gPSBnZXRJdGVtKGlkKTtcbiAgICByZXR1cm4gaXRlbSA/IGl0ZW0uZWxlbWVudCA6IG51bGw7XG4gIH0sXG4gIGdldE93bmVySUQ6IGZ1bmN0aW9uIChpZCkge1xuICAgIHZhciBlbGVtZW50ID0gUmVhY3RDb21wb25lbnRUcmVlSG9vay5nZXRFbGVtZW50KGlkKTtcbiAgICBpZiAoIWVsZW1lbnQgfHwgIWVsZW1lbnQuX293bmVyKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGVsZW1lbnQuX293bmVyLl9kZWJ1Z0lEO1xuICB9LFxuICBnZXRQYXJlbnRJRDogZnVuY3Rpb24gKGlkKSB7XG4gICAgdmFyIGl0ZW0gPSBnZXRJdGVtKGlkKTtcbiAgICByZXR1cm4gaXRlbSA/IGl0ZW0ucGFyZW50SUQgOiBudWxsO1xuICB9LFxuICBnZXRTb3VyY2U6IGZ1bmN0aW9uIChpZCkge1xuICAgIHZhciBpdGVtID0gZ2V0SXRlbShpZCk7XG4gICAgdmFyIGVsZW1lbnQgPSBpdGVtID8gaXRlbS5lbGVtZW50IDogbnVsbDtcbiAgICB2YXIgc291cmNlID0gZWxlbWVudCAhPSBudWxsID8gZWxlbWVudC5fc291cmNlIDogbnVsbDtcbiAgICByZXR1cm4gc291cmNlO1xuICB9LFxuICBnZXRUZXh0OiBmdW5jdGlvbiAoaWQpIHtcbiAgICB2YXIgZWxlbWVudCA9IFJlYWN0Q29tcG9uZW50VHJlZUhvb2suZ2V0RWxlbWVudChpZCk7XG4gICAgaWYgKHR5cGVvZiBlbGVtZW50ID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZWxlbWVudCA9PT0gJ251bWJlcicpIHtcbiAgICAgIHJldHVybiAnJyArIGVsZW1lbnQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfSxcbiAgZ2V0VXBkYXRlQ291bnQ6IGZ1bmN0aW9uIChpZCkge1xuICAgIHZhciBpdGVtID0gZ2V0SXRlbShpZCk7XG4gICAgcmV0dXJuIGl0ZW0gPyBpdGVtLnVwZGF0ZUNvdW50IDogMDtcbiAgfSxcblxuXG4gIGdldFJvb3RJRHM6IGdldFJvb3RJRHMsXG4gIGdldFJlZ2lzdGVyZWRJRHM6IGdldEl0ZW1JRHMsXG5cbiAgcHVzaE5vblN0YW5kYXJkV2FybmluZ1N0YWNrOiBmdW5jdGlvbiAoaXNDcmVhdGluZ0VsZW1lbnQsIGN1cnJlbnRTb3VyY2UpIHtcbiAgICBpZiAodHlwZW9mIGNvbnNvbGUucmVhY3RTdGFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBzdGFjayA9IFtdO1xuICAgIHZhciBjdXJyZW50T3duZXIgPSBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50O1xuICAgIHZhciBpZCA9IGN1cnJlbnRPd25lciAmJiBjdXJyZW50T3duZXIuX2RlYnVnSUQ7XG5cbiAgICB0cnkge1xuICAgICAgaWYgKGlzQ3JlYXRpbmdFbGVtZW50KSB7XG4gICAgICAgIHN0YWNrLnB1c2goe1xuICAgICAgICAgIG5hbWU6IGlkID8gUmVhY3RDb21wb25lbnRUcmVlSG9vay5nZXREaXNwbGF5TmFtZShpZCkgOiBudWxsLFxuICAgICAgICAgIGZpbGVOYW1lOiBjdXJyZW50U291cmNlID8gY3VycmVudFNvdXJjZS5maWxlTmFtZSA6IG51bGwsXG4gICAgICAgICAgbGluZU51bWJlcjogY3VycmVudFNvdXJjZSA/IGN1cnJlbnRTb3VyY2UubGluZU51bWJlciA6IG51bGxcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHdoaWxlIChpZCkge1xuICAgICAgICB2YXIgZWxlbWVudCA9IFJlYWN0Q29tcG9uZW50VHJlZUhvb2suZ2V0RWxlbWVudChpZCk7XG4gICAgICAgIHZhciBwYXJlbnRJRCA9IFJlYWN0Q29tcG9uZW50VHJlZUhvb2suZ2V0UGFyZW50SUQoaWQpO1xuICAgICAgICB2YXIgb3duZXJJRCA9IFJlYWN0Q29tcG9uZW50VHJlZUhvb2suZ2V0T3duZXJJRChpZCk7XG4gICAgICAgIHZhciBvd25lck5hbWUgPSBvd25lcklEID8gUmVhY3RDb21wb25lbnRUcmVlSG9vay5nZXREaXNwbGF5TmFtZShvd25lcklEKSA6IG51bGw7XG4gICAgICAgIHZhciBzb3VyY2UgPSBlbGVtZW50ICYmIGVsZW1lbnQuX3NvdXJjZTtcbiAgICAgICAgc3RhY2sucHVzaCh7XG4gICAgICAgICAgbmFtZTogb3duZXJOYW1lLFxuICAgICAgICAgIGZpbGVOYW1lOiBzb3VyY2UgPyBzb3VyY2UuZmlsZU5hbWUgOiBudWxsLFxuICAgICAgICAgIGxpbmVOdW1iZXI6IHNvdXJjZSA/IHNvdXJjZS5saW5lTnVtYmVyIDogbnVsbFxuICAgICAgICB9KTtcbiAgICAgICAgaWQgPSBwYXJlbnRJRDtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIEludGVybmFsIHN0YXRlIGlzIG1lc3NlZCB1cC5cbiAgICAgIC8vIFN0b3AgYnVpbGRpbmcgdGhlIHN0YWNrIChpdCdzIGp1c3QgYSBuaWNlIHRvIGhhdmUpLlxuICAgIH1cblxuICAgIGNvbnNvbGUucmVhY3RTdGFjayhzdGFjayk7XG4gIH0sXG4gIHBvcE5vblN0YW5kYXJkV2FybmluZ1N0YWNrOiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHR5cGVvZiBjb25zb2xlLnJlYWN0U3RhY2tFbmQgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc29sZS5yZWFjdFN0YWNrRW5kKCk7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RDb21wb25lbnRUcmVlSG9vaztcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3JlYWN0L2xpYi9SZWFjdENvbXBvbmVudFRyZWVIb29rLmpzIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBcbiAqL1xuXG5mdW5jdGlvbiBtYWtlRW1wdHlGdW5jdGlvbihhcmcpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gYXJnO1xuICB9O1xufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gYWNjZXB0cyBhbmQgZGlzY2FyZHMgaW5wdXRzOyBpdCBoYXMgbm8gc2lkZSBlZmZlY3RzLiBUaGlzIGlzXG4gKiBwcmltYXJpbHkgdXNlZnVsIGlkaW9tYXRpY2FsbHkgZm9yIG92ZXJyaWRhYmxlIGZ1bmN0aW9uIGVuZHBvaW50cyB3aGljaFxuICogYWx3YXlzIG5lZWQgdG8gYmUgY2FsbGFibGUsIHNpbmNlIEpTIGxhY2tzIGEgbnVsbC1jYWxsIGlkaW9tIGFsYSBDb2NvYS5cbiAqL1xudmFyIGVtcHR5RnVuY3Rpb24gPSBmdW5jdGlvbiBlbXB0eUZ1bmN0aW9uKCkge307XG5cbmVtcHR5RnVuY3Rpb24udGhhdFJldHVybnMgPSBtYWtlRW1wdHlGdW5jdGlvbjtcbmVtcHR5RnVuY3Rpb24udGhhdFJldHVybnNGYWxzZSA9IG1ha2VFbXB0eUZ1bmN0aW9uKGZhbHNlKTtcbmVtcHR5RnVuY3Rpb24udGhhdFJldHVybnNUcnVlID0gbWFrZUVtcHR5RnVuY3Rpb24odHJ1ZSk7XG5lbXB0eUZ1bmN0aW9uLnRoYXRSZXR1cm5zTnVsbCA9IG1ha2VFbXB0eUZ1bmN0aW9uKG51bGwpO1xuZW1wdHlGdW5jdGlvbi50aGF0UmV0dXJuc1RoaXMgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzO1xufTtcbmVtcHR5RnVuY3Rpb24udGhhdFJldHVybnNBcmd1bWVudCA9IGZ1bmN0aW9uIChhcmcpIHtcbiAgcmV0dXJuIGFyZztcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZW1wdHlGdW5jdGlvbjtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L2ZianMvbGliL2VtcHR5RnVuY3Rpb24uanMiLCIvKipcbiAqIENvcHlyaWdodCAyMDE2LXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbi8vIFRydXN0IHRoZSBkZXZlbG9wZXIgdG8gb25seSB1c2UgUmVhY3RJbnN0cnVtZW50YXRpb24gd2l0aCBhIF9fREVWX18gY2hlY2tcblxudmFyIGRlYnVnVG9vbCA9IG51bGw7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHZhciBSZWFjdERlYnVnVG9vbCA9IHJlcXVpcmUoJy4vUmVhY3REZWJ1Z1Rvb2wnKTtcbiAgZGVidWdUb29sID0gUmVhY3REZWJ1Z1Rvb2w7XG59XG5cbm1vZHVsZS5leHBvcnRzID0geyBkZWJ1Z1Rvb2w6IGRlYnVnVG9vbCB9O1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QtZG9tL2xpYi9SZWFjdEluc3RydW1lbnRhdGlvbi5qcyIsImltcG9ydCBfTWVtb3J5Um91dGVyIGZyb20gJy4vTWVtb3J5Um91dGVyJztcbmV4cG9ydCB7IF9NZW1vcnlSb3V0ZXIgYXMgTWVtb3J5Um91dGVyIH07XG5pbXBvcnQgX1Byb21wdCBmcm9tICcuL1Byb21wdCc7XG5leHBvcnQgeyBfUHJvbXB0IGFzIFByb21wdCB9O1xuaW1wb3J0IF9SZWRpcmVjdCBmcm9tICcuL1JlZGlyZWN0JztcbmV4cG9ydCB7IF9SZWRpcmVjdCBhcyBSZWRpcmVjdCB9O1xuaW1wb3J0IF9Sb3V0ZSBmcm9tICcuL1JvdXRlJztcbmV4cG9ydCB7IF9Sb3V0ZSBhcyBSb3V0ZSB9O1xuaW1wb3J0IF9Sb3V0ZXIgZnJvbSAnLi9Sb3V0ZXInO1xuZXhwb3J0IHsgX1JvdXRlciBhcyBSb3V0ZXIgfTtcbmltcG9ydCBfU3RhdGljUm91dGVyIGZyb20gJy4vU3RhdGljUm91dGVyJztcbmV4cG9ydCB7IF9TdGF0aWNSb3V0ZXIgYXMgU3RhdGljUm91dGVyIH07XG5pbXBvcnQgX1N3aXRjaCBmcm9tICcuL1N3aXRjaCc7XG5leHBvcnQgeyBfU3dpdGNoIGFzIFN3aXRjaCB9O1xuaW1wb3J0IF9tYXRjaFBhdGggZnJvbSAnLi9tYXRjaFBhdGgnO1xuZXhwb3J0IHsgX21hdGNoUGF0aCBhcyBtYXRjaFBhdGggfTtcbmltcG9ydCBfd2l0aFJvdXRlciBmcm9tICcuL3dpdGhSb3V0ZXInO1xuZXhwb3J0IHsgX3dpdGhSb3V0ZXIgYXMgd2l0aFJvdXRlciB9O1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3Qtcm91dGVyL2VzL2luZGV4LmpzIiwiaW1wb3J0IFByb3ZpZGVyLCB7IGNyZWF0ZVByb3ZpZGVyIH0gZnJvbSAnLi9jb21wb25lbnRzL1Byb3ZpZGVyJztcbmltcG9ydCBjb25uZWN0QWR2YW5jZWQgZnJvbSAnLi9jb21wb25lbnRzL2Nvbm5lY3RBZHZhbmNlZCc7XG5pbXBvcnQgY29ubmVjdCBmcm9tICcuL2Nvbm5lY3QvY29ubmVjdCc7XG5cbmV4cG9ydCB7IFByb3ZpZGVyLCBjcmVhdGVQcm92aWRlciwgY29ubmVjdEFkdmFuY2VkLCBjb25uZWN0IH07XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1yZWR1eC9lcy9pbmRleC5qcyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBfcHJvZEludmFyaWFudCA9IHJlcXVpcmUoJy4vcmVhY3RQcm9kSW52YXJpYW50JyksXG4gICAgX2Fzc2lnbiA9IHJlcXVpcmUoJ29iamVjdC1hc3NpZ24nKTtcblxudmFyIENhbGxiYWNrUXVldWUgPSByZXF1aXJlKCcuL0NhbGxiYWNrUXVldWUnKTtcbnZhciBQb29sZWRDbGFzcyA9IHJlcXVpcmUoJy4vUG9vbGVkQ2xhc3MnKTtcbnZhciBSZWFjdEZlYXR1cmVGbGFncyA9IHJlcXVpcmUoJy4vUmVhY3RGZWF0dXJlRmxhZ3MnKTtcbnZhciBSZWFjdFJlY29uY2lsZXIgPSByZXF1aXJlKCcuL1JlYWN0UmVjb25jaWxlcicpO1xudmFyIFRyYW5zYWN0aW9uID0gcmVxdWlyZSgnLi9UcmFuc2FjdGlvbicpO1xuXG52YXIgaW52YXJpYW50ID0gcmVxdWlyZSgnZmJqcy9saWIvaW52YXJpYW50Jyk7XG5cbnZhciBkaXJ0eUNvbXBvbmVudHMgPSBbXTtcbnZhciB1cGRhdGVCYXRjaE51bWJlciA9IDA7XG52YXIgYXNhcENhbGxiYWNrUXVldWUgPSBDYWxsYmFja1F1ZXVlLmdldFBvb2xlZCgpO1xudmFyIGFzYXBFbnF1ZXVlZCA9IGZhbHNlO1xuXG52YXIgYmF0Y2hpbmdTdHJhdGVneSA9IG51bGw7XG5cbmZ1bmN0aW9uIGVuc3VyZUluamVjdGVkKCkge1xuICAhKFJlYWN0VXBkYXRlcy5SZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9uICYmIGJhdGNoaW5nU3RyYXRlZ3kpID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IGludmFyaWFudChmYWxzZSwgJ1JlYWN0VXBkYXRlczogbXVzdCBpbmplY3QgYSByZWNvbmNpbGUgdHJhbnNhY3Rpb24gY2xhc3MgYW5kIGJhdGNoaW5nIHN0cmF0ZWd5JykgOiBfcHJvZEludmFyaWFudCgnMTIzJykgOiB2b2lkIDA7XG59XG5cbnZhciBORVNURURfVVBEQVRFUyA9IHtcbiAgaW5pdGlhbGl6ZTogZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZGlydHlDb21wb25lbnRzTGVuZ3RoID0gZGlydHlDb21wb25lbnRzLmxlbmd0aDtcbiAgfSxcbiAgY2xvc2U6IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAodGhpcy5kaXJ0eUNvbXBvbmVudHNMZW5ndGggIT09IGRpcnR5Q29tcG9uZW50cy5sZW5ndGgpIHtcbiAgICAgIC8vIEFkZGl0aW9uYWwgdXBkYXRlcyB3ZXJlIGVucXVldWVkIGJ5IGNvbXBvbmVudERpZFVwZGF0ZSBoYW5kbGVycyBvclxuICAgICAgLy8gc2ltaWxhcjsgYmVmb3JlIG91ciBvd24gVVBEQVRFX1FVRVVFSU5HIHdyYXBwZXIgY2xvc2VzLCB3ZSB3YW50IHRvIHJ1blxuICAgICAgLy8gdGhlc2UgbmV3IHVwZGF0ZXMgc28gdGhhdCBpZiBBJ3MgY29tcG9uZW50RGlkVXBkYXRlIGNhbGxzIHNldFN0YXRlIG9uXG4gICAgICAvLyBCLCBCIHdpbGwgdXBkYXRlIGJlZm9yZSB0aGUgY2FsbGJhY2sgQSdzIHVwZGF0ZXIgcHJvdmlkZWQgd2hlbiBjYWxsaW5nXG4gICAgICAvLyBzZXRTdGF0ZS5cbiAgICAgIGRpcnR5Q29tcG9uZW50cy5zcGxpY2UoMCwgdGhpcy5kaXJ0eUNvbXBvbmVudHNMZW5ndGgpO1xuICAgICAgZmx1c2hCYXRjaGVkVXBkYXRlcygpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkaXJ0eUNvbXBvbmVudHMubGVuZ3RoID0gMDtcbiAgICB9XG4gIH1cbn07XG5cbnZhciBVUERBVEVfUVVFVUVJTkcgPSB7XG4gIGluaXRpYWxpemU6IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmNhbGxiYWNrUXVldWUucmVzZXQoKTtcbiAgfSxcbiAgY2xvc2U6IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmNhbGxiYWNrUXVldWUubm90aWZ5QWxsKCk7XG4gIH1cbn07XG5cbnZhciBUUkFOU0FDVElPTl9XUkFQUEVSUyA9IFtORVNURURfVVBEQVRFUywgVVBEQVRFX1FVRVVFSU5HXTtcblxuZnVuY3Rpb24gUmVhY3RVcGRhdGVzRmx1c2hUcmFuc2FjdGlvbigpIHtcbiAgdGhpcy5yZWluaXRpYWxpemVUcmFuc2FjdGlvbigpO1xuICB0aGlzLmRpcnR5Q29tcG9uZW50c0xlbmd0aCA9IG51bGw7XG4gIHRoaXMuY2FsbGJhY2tRdWV1ZSA9IENhbGxiYWNrUXVldWUuZ2V0UG9vbGVkKCk7XG4gIHRoaXMucmVjb25jaWxlVHJhbnNhY3Rpb24gPSBSZWFjdFVwZGF0ZXMuUmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvbi5nZXRQb29sZWQoXG4gIC8qIHVzZUNyZWF0ZUVsZW1lbnQgKi90cnVlKTtcbn1cblxuX2Fzc2lnbihSZWFjdFVwZGF0ZXNGbHVzaFRyYW5zYWN0aW9uLnByb3RvdHlwZSwgVHJhbnNhY3Rpb24sIHtcbiAgZ2V0VHJhbnNhY3Rpb25XcmFwcGVyczogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBUUkFOU0FDVElPTl9XUkFQUEVSUztcbiAgfSxcblxuICBkZXN0cnVjdG9yOiBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5kaXJ0eUNvbXBvbmVudHNMZW5ndGggPSBudWxsO1xuICAgIENhbGxiYWNrUXVldWUucmVsZWFzZSh0aGlzLmNhbGxiYWNrUXVldWUpO1xuICAgIHRoaXMuY2FsbGJhY2tRdWV1ZSA9IG51bGw7XG4gICAgUmVhY3RVcGRhdGVzLlJlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb24ucmVsZWFzZSh0aGlzLnJlY29uY2lsZVRyYW5zYWN0aW9uKTtcbiAgICB0aGlzLnJlY29uY2lsZVRyYW5zYWN0aW9uID0gbnVsbDtcbiAgfSxcblxuICBwZXJmb3JtOiBmdW5jdGlvbiAobWV0aG9kLCBzY29wZSwgYSkge1xuICAgIC8vIEVzc2VudGlhbGx5IGNhbGxzIGB0aGlzLnJlY29uY2lsZVRyYW5zYWN0aW9uLnBlcmZvcm0obWV0aG9kLCBzY29wZSwgYSlgXG4gICAgLy8gd2l0aCB0aGlzIHRyYW5zYWN0aW9uJ3Mgd3JhcHBlcnMgYXJvdW5kIGl0LlxuICAgIHJldHVybiBUcmFuc2FjdGlvbi5wZXJmb3JtLmNhbGwodGhpcywgdGhpcy5yZWNvbmNpbGVUcmFuc2FjdGlvbi5wZXJmb3JtLCB0aGlzLnJlY29uY2lsZVRyYW5zYWN0aW9uLCBtZXRob2QsIHNjb3BlLCBhKTtcbiAgfVxufSk7XG5cblBvb2xlZENsYXNzLmFkZFBvb2xpbmdUbyhSZWFjdFVwZGF0ZXNGbHVzaFRyYW5zYWN0aW9uKTtcblxuZnVuY3Rpb24gYmF0Y2hlZFVwZGF0ZXMoY2FsbGJhY2ssIGEsIGIsIGMsIGQsIGUpIHtcbiAgZW5zdXJlSW5qZWN0ZWQoKTtcbiAgcmV0dXJuIGJhdGNoaW5nU3RyYXRlZ3kuYmF0Y2hlZFVwZGF0ZXMoY2FsbGJhY2ssIGEsIGIsIGMsIGQsIGUpO1xufVxuXG4vKipcbiAqIEFycmF5IGNvbXBhcmF0b3IgZm9yIFJlYWN0Q29tcG9uZW50cyBieSBtb3VudCBvcmRlcmluZy5cbiAqXG4gKiBAcGFyYW0ge1JlYWN0Q29tcG9uZW50fSBjMSBmaXJzdCBjb21wb25lbnQgeW91J3JlIGNvbXBhcmluZ1xuICogQHBhcmFtIHtSZWFjdENvbXBvbmVudH0gYzIgc2Vjb25kIGNvbXBvbmVudCB5b3UncmUgY29tcGFyaW5nXG4gKiBAcmV0dXJuIHtudW1iZXJ9IFJldHVybiB2YWx1ZSB1c2FibGUgYnkgQXJyYXkucHJvdG90eXBlLnNvcnQoKS5cbiAqL1xuZnVuY3Rpb24gbW91bnRPcmRlckNvbXBhcmF0b3IoYzEsIGMyKSB7XG4gIHJldHVybiBjMS5fbW91bnRPcmRlciAtIGMyLl9tb3VudE9yZGVyO1xufVxuXG5mdW5jdGlvbiBydW5CYXRjaGVkVXBkYXRlcyh0cmFuc2FjdGlvbikge1xuICB2YXIgbGVuID0gdHJhbnNhY3Rpb24uZGlydHlDb21wb25lbnRzTGVuZ3RoO1xuICAhKGxlbiA9PT0gZGlydHlDb21wb25lbnRzLmxlbmd0aCkgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAnRXhwZWN0ZWQgZmx1c2ggdHJhbnNhY3Rpb25cXCdzIHN0b3JlZCBkaXJ0eS1jb21wb25lbnRzIGxlbmd0aCAoJXMpIHRvIG1hdGNoIGRpcnR5LWNvbXBvbmVudHMgYXJyYXkgbGVuZ3RoICglcykuJywgbGVuLCBkaXJ0eUNvbXBvbmVudHMubGVuZ3RoKSA6IF9wcm9kSW52YXJpYW50KCcxMjQnLCBsZW4sIGRpcnR5Q29tcG9uZW50cy5sZW5ndGgpIDogdm9pZCAwO1xuXG4gIC8vIFNpbmNlIHJlY29uY2lsaW5nIGEgY29tcG9uZW50IGhpZ2hlciBpbiB0aGUgb3duZXIgaGllcmFyY2h5IHVzdWFsbHkgKG5vdFxuICAvLyBhbHdheXMgLS0gc2VlIHNob3VsZENvbXBvbmVudFVwZGF0ZSgpKSB3aWxsIHJlY29uY2lsZSBjaGlsZHJlbiwgcmVjb25jaWxlXG4gIC8vIHRoZW0gYmVmb3JlIHRoZWlyIGNoaWxkcmVuIGJ5IHNvcnRpbmcgdGhlIGFycmF5LlxuICBkaXJ0eUNvbXBvbmVudHMuc29ydChtb3VudE9yZGVyQ29tcGFyYXRvcik7XG5cbiAgLy8gQW55IHVwZGF0ZXMgZW5xdWV1ZWQgd2hpbGUgcmVjb25jaWxpbmcgbXVzdCBiZSBwZXJmb3JtZWQgYWZ0ZXIgdGhpcyBlbnRpcmVcbiAgLy8gYmF0Y2guIE90aGVyd2lzZSwgaWYgZGlydHlDb21wb25lbnRzIGlzIFtBLCBCXSB3aGVyZSBBIGhhcyBjaGlsZHJlbiBCIGFuZFxuICAvLyBDLCBCIGNvdWxkIHVwZGF0ZSB0d2ljZSBpbiBhIHNpbmdsZSBiYXRjaCBpZiBDJ3MgcmVuZGVyIGVucXVldWVzIGFuIHVwZGF0ZVxuICAvLyB0byBCIChzaW5jZSBCIHdvdWxkIGhhdmUgYWxyZWFkeSB1cGRhdGVkLCB3ZSBzaG91bGQgc2tpcCBpdCwgYW5kIHRoZSBvbmx5XG4gIC8vIHdheSB3ZSBjYW4ga25vdyB0byBkbyBzbyBpcyBieSBjaGVja2luZyB0aGUgYmF0Y2ggY291bnRlcikuXG4gIHVwZGF0ZUJhdGNoTnVtYmVyKys7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgIC8vIElmIGEgY29tcG9uZW50IGlzIHVubW91bnRlZCBiZWZvcmUgcGVuZGluZyBjaGFuZ2VzIGFwcGx5LCBpdCB3aWxsIHN0aWxsXG4gICAgLy8gYmUgaGVyZSwgYnV0IHdlIGFzc3VtZSB0aGF0IGl0IGhhcyBjbGVhcmVkIGl0cyBfcGVuZGluZ0NhbGxiYWNrcyBhbmRcbiAgICAvLyB0aGF0IHBlcmZvcm1VcGRhdGVJZk5lY2Vzc2FyeSBpcyBhIG5vb3AuXG4gICAgdmFyIGNvbXBvbmVudCA9IGRpcnR5Q29tcG9uZW50c1tpXTtcblxuICAgIC8vIElmIHBlcmZvcm1VcGRhdGVJZk5lY2Vzc2FyeSBoYXBwZW5zIHRvIGVucXVldWUgYW55IG5ldyB1cGRhdGVzLCB3ZVxuICAgIC8vIHNob3VsZG4ndCBleGVjdXRlIHRoZSBjYWxsYmFja3MgdW50aWwgdGhlIG5leHQgcmVuZGVyIGhhcHBlbnMsIHNvXG4gICAgLy8gc3Rhc2ggdGhlIGNhbGxiYWNrcyBmaXJzdFxuICAgIHZhciBjYWxsYmFja3MgPSBjb21wb25lbnQuX3BlbmRpbmdDYWxsYmFja3M7XG4gICAgY29tcG9uZW50Ll9wZW5kaW5nQ2FsbGJhY2tzID0gbnVsbDtcblxuICAgIHZhciBtYXJrZXJOYW1lO1xuICAgIGlmIChSZWFjdEZlYXR1cmVGbGFncy5sb2dUb3BMZXZlbFJlbmRlcnMpIHtcbiAgICAgIHZhciBuYW1lZENvbXBvbmVudCA9IGNvbXBvbmVudDtcbiAgICAgIC8vIER1Y2sgdHlwZSBUb3BMZXZlbFdyYXBwZXIuIFRoaXMgaXMgcHJvYmFibHkgYWx3YXlzIHRydWUuXG4gICAgICBpZiAoY29tcG9uZW50Ll9jdXJyZW50RWxlbWVudC50eXBlLmlzUmVhY3RUb3BMZXZlbFdyYXBwZXIpIHtcbiAgICAgICAgbmFtZWRDb21wb25lbnQgPSBjb21wb25lbnQuX3JlbmRlcmVkQ29tcG9uZW50O1xuICAgICAgfVxuICAgICAgbWFya2VyTmFtZSA9ICdSZWFjdCB1cGRhdGU6ICcgKyBuYW1lZENvbXBvbmVudC5nZXROYW1lKCk7XG4gICAgICBjb25zb2xlLnRpbWUobWFya2VyTmFtZSk7XG4gICAgfVxuXG4gICAgUmVhY3RSZWNvbmNpbGVyLnBlcmZvcm1VcGRhdGVJZk5lY2Vzc2FyeShjb21wb25lbnQsIHRyYW5zYWN0aW9uLnJlY29uY2lsZVRyYW5zYWN0aW9uLCB1cGRhdGVCYXRjaE51bWJlcik7XG5cbiAgICBpZiAobWFya2VyTmFtZSkge1xuICAgICAgY29uc29sZS50aW1lRW5kKG1hcmtlck5hbWUpO1xuICAgIH1cblxuICAgIGlmIChjYWxsYmFja3MpIHtcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgY2FsbGJhY2tzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIHRyYW5zYWN0aW9uLmNhbGxiYWNrUXVldWUuZW5xdWV1ZShjYWxsYmFja3Nbal0sIGNvbXBvbmVudC5nZXRQdWJsaWNJbnN0YW5jZSgpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxudmFyIGZsdXNoQmF0Y2hlZFVwZGF0ZXMgPSBmdW5jdGlvbiAoKSB7XG4gIC8vIFJlYWN0VXBkYXRlc0ZsdXNoVHJhbnNhY3Rpb24ncyB3cmFwcGVycyB3aWxsIGNsZWFyIHRoZSBkaXJ0eUNvbXBvbmVudHNcbiAgLy8gYXJyYXkgYW5kIHBlcmZvcm0gYW55IHVwZGF0ZXMgZW5xdWV1ZWQgYnkgbW91bnQtcmVhZHkgaGFuZGxlcnMgKGkuZS4sXG4gIC8vIGNvbXBvbmVudERpZFVwZGF0ZSkgYnV0IHdlIG5lZWQgdG8gY2hlY2sgaGVyZSB0b28gaW4gb3JkZXIgdG8gY2F0Y2hcbiAgLy8gdXBkYXRlcyBlbnF1ZXVlZCBieSBzZXRTdGF0ZSBjYWxsYmFja3MgYW5kIGFzYXAgY2FsbHMuXG4gIHdoaWxlIChkaXJ0eUNvbXBvbmVudHMubGVuZ3RoIHx8IGFzYXBFbnF1ZXVlZCkge1xuICAgIGlmIChkaXJ0eUNvbXBvbmVudHMubGVuZ3RoKSB7XG4gICAgICB2YXIgdHJhbnNhY3Rpb24gPSBSZWFjdFVwZGF0ZXNGbHVzaFRyYW5zYWN0aW9uLmdldFBvb2xlZCgpO1xuICAgICAgdHJhbnNhY3Rpb24ucGVyZm9ybShydW5CYXRjaGVkVXBkYXRlcywgbnVsbCwgdHJhbnNhY3Rpb24pO1xuICAgICAgUmVhY3RVcGRhdGVzRmx1c2hUcmFuc2FjdGlvbi5yZWxlYXNlKHRyYW5zYWN0aW9uKTtcbiAgICB9XG5cbiAgICBpZiAoYXNhcEVucXVldWVkKSB7XG4gICAgICBhc2FwRW5xdWV1ZWQgPSBmYWxzZTtcbiAgICAgIHZhciBxdWV1ZSA9IGFzYXBDYWxsYmFja1F1ZXVlO1xuICAgICAgYXNhcENhbGxiYWNrUXVldWUgPSBDYWxsYmFja1F1ZXVlLmdldFBvb2xlZCgpO1xuICAgICAgcXVldWUubm90aWZ5QWxsKCk7XG4gICAgICBDYWxsYmFja1F1ZXVlLnJlbGVhc2UocXVldWUpO1xuICAgIH1cbiAgfVxufTtcblxuLyoqXG4gKiBNYXJrIGEgY29tcG9uZW50IGFzIG5lZWRpbmcgYSByZXJlbmRlciwgYWRkaW5nIGFuIG9wdGlvbmFsIGNhbGxiYWNrIHRvIGFcbiAqIGxpc3Qgb2YgZnVuY3Rpb25zIHdoaWNoIHdpbGwgYmUgZXhlY3V0ZWQgb25jZSB0aGUgcmVyZW5kZXIgb2NjdXJzLlxuICovXG5mdW5jdGlvbiBlbnF1ZXVlVXBkYXRlKGNvbXBvbmVudCkge1xuICBlbnN1cmVJbmplY3RlZCgpO1xuXG4gIC8vIFZhcmlvdXMgcGFydHMgb2Ygb3VyIGNvZGUgKHN1Y2ggYXMgUmVhY3RDb21wb3NpdGVDb21wb25lbnQnc1xuICAvLyBfcmVuZGVyVmFsaWRhdGVkQ29tcG9uZW50KSBhc3N1bWUgdGhhdCBjYWxscyB0byByZW5kZXIgYXJlbid0IG5lc3RlZDtcbiAgLy8gdmVyaWZ5IHRoYXQgdGhhdCdzIHRoZSBjYXNlLiAoVGhpcyBpcyBjYWxsZWQgYnkgZWFjaCB0b3AtbGV2ZWwgdXBkYXRlXG4gIC8vIGZ1bmN0aW9uLCBsaWtlIHNldFN0YXRlLCBmb3JjZVVwZGF0ZSwgZXRjLjsgY3JlYXRpb24gYW5kXG4gIC8vIGRlc3RydWN0aW9uIG9mIHRvcC1sZXZlbCBjb21wb25lbnRzIGlzIGd1YXJkZWQgaW4gUmVhY3RNb3VudC4pXG5cbiAgaWYgKCFiYXRjaGluZ1N0cmF0ZWd5LmlzQmF0Y2hpbmdVcGRhdGVzKSB7XG4gICAgYmF0Y2hpbmdTdHJhdGVneS5iYXRjaGVkVXBkYXRlcyhlbnF1ZXVlVXBkYXRlLCBjb21wb25lbnQpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGRpcnR5Q29tcG9uZW50cy5wdXNoKGNvbXBvbmVudCk7XG4gIGlmIChjb21wb25lbnQuX3VwZGF0ZUJhdGNoTnVtYmVyID09IG51bGwpIHtcbiAgICBjb21wb25lbnQuX3VwZGF0ZUJhdGNoTnVtYmVyID0gdXBkYXRlQmF0Y2hOdW1iZXIgKyAxO1xuICB9XG59XG5cbi8qKlxuICogRW5xdWV1ZSBhIGNhbGxiYWNrIHRvIGJlIHJ1biBhdCB0aGUgZW5kIG9mIHRoZSBjdXJyZW50IGJhdGNoaW5nIGN5Y2xlLiBUaHJvd3NcbiAqIGlmIG5vIHVwZGF0ZXMgYXJlIGN1cnJlbnRseSBiZWluZyBwZXJmb3JtZWQuXG4gKi9cbmZ1bmN0aW9uIGFzYXAoY2FsbGJhY2ssIGNvbnRleHQpIHtcbiAgIWJhdGNoaW5nU3RyYXRlZ3kuaXNCYXRjaGluZ1VwZGF0ZXMgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAnUmVhY3RVcGRhdGVzLmFzYXA6IENhblxcJ3QgZW5xdWV1ZSBhbiBhc2FwIGNhbGxiYWNrIGluIGEgY29udGV4dCB3aGVyZXVwZGF0ZXMgYXJlIG5vdCBiZWluZyBiYXRjaGVkLicpIDogX3Byb2RJbnZhcmlhbnQoJzEyNScpIDogdm9pZCAwO1xuICBhc2FwQ2FsbGJhY2tRdWV1ZS5lbnF1ZXVlKGNhbGxiYWNrLCBjb250ZXh0KTtcbiAgYXNhcEVucXVldWVkID0gdHJ1ZTtcbn1cblxudmFyIFJlYWN0VXBkYXRlc0luamVjdGlvbiA9IHtcbiAgaW5qZWN0UmVjb25jaWxlVHJhbnNhY3Rpb246IGZ1bmN0aW9uIChSZWNvbmNpbGVUcmFuc2FjdGlvbikge1xuICAgICFSZWNvbmNpbGVUcmFuc2FjdGlvbiA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICdSZWFjdFVwZGF0ZXM6IG11c3QgcHJvdmlkZSBhIHJlY29uY2lsZSB0cmFuc2FjdGlvbiBjbGFzcycpIDogX3Byb2RJbnZhcmlhbnQoJzEyNicpIDogdm9pZCAwO1xuICAgIFJlYWN0VXBkYXRlcy5SZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9uID0gUmVjb25jaWxlVHJhbnNhY3Rpb247XG4gIH0sXG5cbiAgaW5qZWN0QmF0Y2hpbmdTdHJhdGVneTogZnVuY3Rpb24gKF9iYXRjaGluZ1N0cmF0ZWd5KSB7XG4gICAgIV9iYXRjaGluZ1N0cmF0ZWd5ID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IGludmFyaWFudChmYWxzZSwgJ1JlYWN0VXBkYXRlczogbXVzdCBwcm92aWRlIGEgYmF0Y2hpbmcgc3RyYXRlZ3knKSA6IF9wcm9kSW52YXJpYW50KCcxMjcnKSA6IHZvaWQgMDtcbiAgICAhKHR5cGVvZiBfYmF0Y2hpbmdTdHJhdGVneS5iYXRjaGVkVXBkYXRlcyA9PT0gJ2Z1bmN0aW9uJykgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAnUmVhY3RVcGRhdGVzOiBtdXN0IHByb3ZpZGUgYSBiYXRjaGVkVXBkYXRlcygpIGZ1bmN0aW9uJykgOiBfcHJvZEludmFyaWFudCgnMTI4JykgOiB2b2lkIDA7XG4gICAgISh0eXBlb2YgX2JhdGNoaW5nU3RyYXRlZ3kuaXNCYXRjaGluZ1VwZGF0ZXMgPT09ICdib29sZWFuJykgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAnUmVhY3RVcGRhdGVzOiBtdXN0IHByb3ZpZGUgYW4gaXNCYXRjaGluZ1VwZGF0ZXMgYm9vbGVhbiBhdHRyaWJ1dGUnKSA6IF9wcm9kSW52YXJpYW50KCcxMjknKSA6IHZvaWQgMDtcbiAgICBiYXRjaGluZ1N0cmF0ZWd5ID0gX2JhdGNoaW5nU3RyYXRlZ3k7XG4gIH1cbn07XG5cbnZhciBSZWFjdFVwZGF0ZXMgPSB7XG4gIC8qKlxuICAgKiBSZWFjdCByZWZlcmVuY2VzIGBSZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9uYCB1c2luZyB0aGlzIHByb3BlcnR5IGluIG9yZGVyXG4gICAqIHRvIGFsbG93IGRlcGVuZGVuY3kgaW5qZWN0aW9uLlxuICAgKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIFJlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb246IG51bGwsXG5cbiAgYmF0Y2hlZFVwZGF0ZXM6IGJhdGNoZWRVcGRhdGVzLFxuICBlbnF1ZXVlVXBkYXRlOiBlbnF1ZXVlVXBkYXRlLFxuICBmbHVzaEJhdGNoZWRVcGRhdGVzOiBmbHVzaEJhdGNoZWRVcGRhdGVzLFxuICBpbmplY3Rpb246IFJlYWN0VXBkYXRlc0luamVjdGlvbixcbiAgYXNhcDogYXNhcFxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdFVwZGF0ZXM7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1kb20vbGliL1JlYWN0VXBkYXRlcy5qcyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIFxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBLZWVwcyB0cmFjayBvZiB0aGUgY3VycmVudCBvd25lci5cbiAqXG4gKiBUaGUgY3VycmVudCBvd25lciBpcyB0aGUgY29tcG9uZW50IHdobyBzaG91bGQgb3duIGFueSBjb21wb25lbnRzIHRoYXQgYXJlXG4gKiBjdXJyZW50bHkgYmVpbmcgY29uc3RydWN0ZWQuXG4gKi9cbnZhciBSZWFjdEN1cnJlbnRPd25lciA9IHtcbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKiBAdHlwZSB7UmVhY3RDb21wb25lbnR9XG4gICAqL1xuICBjdXJyZW50OiBudWxsXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0Q3VycmVudE93bmVyO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QvbGliL1JlYWN0Q3VycmVudE93bmVyLmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIF9hc3NpZ24gPSByZXF1aXJlKCdvYmplY3QtYXNzaWduJyk7XG5cbnZhciBQb29sZWRDbGFzcyA9IHJlcXVpcmUoJy4vUG9vbGVkQ2xhc3MnKTtcblxudmFyIGVtcHR5RnVuY3Rpb24gPSByZXF1aXJlKCdmYmpzL2xpYi9lbXB0eUZ1bmN0aW9uJyk7XG52YXIgd2FybmluZyA9IHJlcXVpcmUoJ2ZianMvbGliL3dhcm5pbmcnKTtcblxudmFyIGRpZFdhcm5Gb3JBZGRlZE5ld1Byb3BlcnR5ID0gZmFsc2U7XG52YXIgaXNQcm94eVN1cHBvcnRlZCA9IHR5cGVvZiBQcm94eSA9PT0gJ2Z1bmN0aW9uJztcblxudmFyIHNob3VsZEJlUmVsZWFzZWRQcm9wZXJ0aWVzID0gWydkaXNwYXRjaENvbmZpZycsICdfdGFyZ2V0SW5zdCcsICduYXRpdmVFdmVudCcsICdpc0RlZmF1bHRQcmV2ZW50ZWQnLCAnaXNQcm9wYWdhdGlvblN0b3BwZWQnLCAnX2Rpc3BhdGNoTGlzdGVuZXJzJywgJ19kaXNwYXRjaEluc3RhbmNlcyddO1xuXG4vKipcbiAqIEBpbnRlcmZhY2UgRXZlbnRcbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTMtRXZlbnRzL1xuICovXG52YXIgRXZlbnRJbnRlcmZhY2UgPSB7XG4gIHR5cGU6IG51bGwsXG4gIHRhcmdldDogbnVsbCxcbiAgLy8gY3VycmVudFRhcmdldCBpcyBzZXQgd2hlbiBkaXNwYXRjaGluZzsgbm8gdXNlIGluIGNvcHlpbmcgaXQgaGVyZVxuICBjdXJyZW50VGFyZ2V0OiBlbXB0eUZ1bmN0aW9uLnRoYXRSZXR1cm5zTnVsbCxcbiAgZXZlbnRQaGFzZTogbnVsbCxcbiAgYnViYmxlczogbnVsbCxcbiAgY2FuY2VsYWJsZTogbnVsbCxcbiAgdGltZVN0YW1wOiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICByZXR1cm4gZXZlbnQudGltZVN0YW1wIHx8IERhdGUubm93KCk7XG4gIH0sXG4gIGRlZmF1bHRQcmV2ZW50ZWQ6IG51bGwsXG4gIGlzVHJ1c3RlZDogbnVsbFxufTtcblxuLyoqXG4gKiBTeW50aGV0aWMgZXZlbnRzIGFyZSBkaXNwYXRjaGVkIGJ5IGV2ZW50IHBsdWdpbnMsIHR5cGljYWxseSBpbiByZXNwb25zZSB0byBhXG4gKiB0b3AtbGV2ZWwgZXZlbnQgZGVsZWdhdGlvbiBoYW5kbGVyLlxuICpcbiAqIFRoZXNlIHN5c3RlbXMgc2hvdWxkIGdlbmVyYWxseSB1c2UgcG9vbGluZyB0byByZWR1Y2UgdGhlIGZyZXF1ZW5jeSBvZiBnYXJiYWdlXG4gKiBjb2xsZWN0aW9uLiBUaGUgc3lzdGVtIHNob3VsZCBjaGVjayBgaXNQZXJzaXN0ZW50YCB0byBkZXRlcm1pbmUgd2hldGhlciB0aGVcbiAqIGV2ZW50IHNob3VsZCBiZSByZWxlYXNlZCBpbnRvIHRoZSBwb29sIGFmdGVyIGJlaW5nIGRpc3BhdGNoZWQuIFVzZXJzIHRoYXRcbiAqIG5lZWQgYSBwZXJzaXN0ZWQgZXZlbnQgc2hvdWxkIGludm9rZSBgcGVyc2lzdGAuXG4gKlxuICogU3ludGhldGljIGV2ZW50cyAoYW5kIHN1YmNsYXNzZXMpIGltcGxlbWVudCB0aGUgRE9NIExldmVsIDMgRXZlbnRzIEFQSSBieVxuICogbm9ybWFsaXppbmcgYnJvd3NlciBxdWlya3MuIFN1YmNsYXNzZXMgZG8gbm90IG5lY2Vzc2FyaWx5IGhhdmUgdG8gaW1wbGVtZW50IGFcbiAqIERPTSBpbnRlcmZhY2U7IGN1c3RvbSBhcHBsaWNhdGlvbi1zcGVjaWZpYyBldmVudHMgY2FuIGFsc28gc3ViY2xhc3MgdGhpcy5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gZGlzcGF0Y2hDb25maWcgQ29uZmlndXJhdGlvbiB1c2VkIHRvIGRpc3BhdGNoIHRoaXMgZXZlbnQuXG4gKiBAcGFyYW0geyp9IHRhcmdldEluc3QgTWFya2VyIGlkZW50aWZ5aW5nIHRoZSBldmVudCB0YXJnZXQuXG4gKiBAcGFyYW0ge29iamVjdH0gbmF0aXZlRXZlbnQgTmF0aXZlIGJyb3dzZXIgZXZlbnQuXG4gKiBAcGFyYW0ge0RPTUV2ZW50VGFyZ2V0fSBuYXRpdmVFdmVudFRhcmdldCBUYXJnZXQgbm9kZS5cbiAqL1xuZnVuY3Rpb24gU3ludGhldGljRXZlbnQoZGlzcGF0Y2hDb25maWcsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCkge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIC8vIHRoZXNlIGhhdmUgYSBnZXR0ZXIvc2V0dGVyIGZvciB3YXJuaW5nc1xuICAgIGRlbGV0ZSB0aGlzLm5hdGl2ZUV2ZW50O1xuICAgIGRlbGV0ZSB0aGlzLnByZXZlbnREZWZhdWx0O1xuICAgIGRlbGV0ZSB0aGlzLnN0b3BQcm9wYWdhdGlvbjtcbiAgfVxuXG4gIHRoaXMuZGlzcGF0Y2hDb25maWcgPSBkaXNwYXRjaENvbmZpZztcbiAgdGhpcy5fdGFyZ2V0SW5zdCA9IHRhcmdldEluc3Q7XG4gIHRoaXMubmF0aXZlRXZlbnQgPSBuYXRpdmVFdmVudDtcblxuICB2YXIgSW50ZXJmYWNlID0gdGhpcy5jb25zdHJ1Y3Rvci5JbnRlcmZhY2U7XG4gIGZvciAodmFyIHByb3BOYW1lIGluIEludGVyZmFjZSkge1xuICAgIGlmICghSW50ZXJmYWNlLmhhc093blByb3BlcnR5KHByb3BOYW1lKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBkZWxldGUgdGhpc1twcm9wTmFtZV07IC8vIHRoaXMgaGFzIGEgZ2V0dGVyL3NldHRlciBmb3Igd2FybmluZ3NcbiAgICB9XG4gICAgdmFyIG5vcm1hbGl6ZSA9IEludGVyZmFjZVtwcm9wTmFtZV07XG4gICAgaWYgKG5vcm1hbGl6ZSkge1xuICAgICAgdGhpc1twcm9wTmFtZV0gPSBub3JtYWxpemUobmF0aXZlRXZlbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAocHJvcE5hbWUgPT09ICd0YXJnZXQnKSB7XG4gICAgICAgIHRoaXMudGFyZ2V0ID0gbmF0aXZlRXZlbnRUYXJnZXQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzW3Byb3BOYW1lXSA9IG5hdGl2ZUV2ZW50W3Byb3BOYW1lXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB2YXIgZGVmYXVsdFByZXZlbnRlZCA9IG5hdGl2ZUV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQgIT0gbnVsbCA/IG5hdGl2ZUV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQgOiBuYXRpdmVFdmVudC5yZXR1cm5WYWx1ZSA9PT0gZmFsc2U7XG4gIGlmIChkZWZhdWx0UHJldmVudGVkKSB7XG4gICAgdGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQgPSBlbXB0eUZ1bmN0aW9uLnRoYXRSZXR1cm5zVHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLmlzRGVmYXVsdFByZXZlbnRlZCA9IGVtcHR5RnVuY3Rpb24udGhhdFJldHVybnNGYWxzZTtcbiAgfVxuICB0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkID0gZW1wdHlGdW5jdGlvbi50aGF0UmV0dXJuc0ZhbHNlO1xuICByZXR1cm4gdGhpcztcbn1cblxuX2Fzc2lnbihTeW50aGV0aWNFdmVudC5wcm90b3R5cGUsIHtcbiAgcHJldmVudERlZmF1bHQ6IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmRlZmF1bHRQcmV2ZW50ZWQgPSB0cnVlO1xuICAgIHZhciBldmVudCA9IHRoaXMubmF0aXZlRXZlbnQ7XG4gICAgaWYgKCFldmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChldmVudC5wcmV2ZW50RGVmYXVsdCkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB2YWxpZC10eXBlb2ZcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBldmVudC5yZXR1cm5WYWx1ZSAhPT0gJ3Vua25vd24nKSB7XG4gICAgICBldmVudC5yZXR1cm5WYWx1ZSA9IGZhbHNlO1xuICAgIH1cbiAgICB0aGlzLmlzRGVmYXVsdFByZXZlbnRlZCA9IGVtcHR5RnVuY3Rpb24udGhhdFJldHVybnNUcnVlO1xuICB9LFxuXG4gIHN0b3BQcm9wYWdhdGlvbjogZnVuY3Rpb24gKCkge1xuICAgIHZhciBldmVudCA9IHRoaXMubmF0aXZlRXZlbnQ7XG4gICAgaWYgKCFldmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChldmVudC5zdG9wUHJvcGFnYXRpb24pIHtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHZhbGlkLXR5cGVvZlxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGV2ZW50LmNhbmNlbEJ1YmJsZSAhPT0gJ3Vua25vd24nKSB7XG4gICAgICAvLyBUaGUgQ2hhbmdlRXZlbnRQbHVnaW4gcmVnaXN0ZXJzIGEgXCJwcm9wZXJ0eWNoYW5nZVwiIGV2ZW50IGZvclxuICAgICAgLy8gSUUuIFRoaXMgZXZlbnQgZG9lcyBub3Qgc3VwcG9ydCBidWJibGluZyBvciBjYW5jZWxsaW5nLCBhbmRcbiAgICAgIC8vIGFueSByZWZlcmVuY2VzIHRvIGNhbmNlbEJ1YmJsZSB0aHJvdyBcIk1lbWJlciBub3QgZm91bmRcIi4gIEFcbiAgICAgIC8vIHR5cGVvZiBjaGVjayBvZiBcInVua25vd25cIiBjaXJjdW12ZW50cyB0aGlzIGlzc3VlIChhbmQgaXMgYWxzb1xuICAgICAgLy8gSUUgc3BlY2lmaWMpLlxuICAgICAgZXZlbnQuY2FuY2VsQnViYmxlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICB0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkID0gZW1wdHlGdW5jdGlvbi50aGF0UmV0dXJuc1RydWU7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFdlIHJlbGVhc2UgYWxsIGRpc3BhdGNoZWQgYFN5bnRoZXRpY0V2ZW50YHMgYWZ0ZXIgZWFjaCBldmVudCBsb29wLCBhZGRpbmdcbiAgICogdGhlbSBiYWNrIGludG8gdGhlIHBvb2wuIFRoaXMgYWxsb3dzIGEgd2F5IHRvIGhvbGQgb250byBhIHJlZmVyZW5jZSB0aGF0XG4gICAqIHdvbid0IGJlIGFkZGVkIGJhY2sgaW50byB0aGUgcG9vbC5cbiAgICovXG4gIHBlcnNpc3Q6IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmlzUGVyc2lzdGVudCA9IGVtcHR5RnVuY3Rpb24udGhhdFJldHVybnNUcnVlO1xuICB9LFxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdGhpcyBldmVudCBzaG91bGQgYmUgcmVsZWFzZWQgYmFjayBpbnRvIHRoZSBwb29sLlxuICAgKlxuICAgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHRoaXMgc2hvdWxkIG5vdCBiZSByZWxlYXNlZCwgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgKi9cbiAgaXNQZXJzaXN0ZW50OiBlbXB0eUZ1bmN0aW9uLnRoYXRSZXR1cm5zRmFsc2UsXG5cbiAgLyoqXG4gICAqIGBQb29sZWRDbGFzc2AgbG9va3MgZm9yIGBkZXN0cnVjdG9yYCBvbiBlYWNoIGluc3RhbmNlIGl0IHJlbGVhc2VzLlxuICAgKi9cbiAgZGVzdHJ1Y3RvcjogZnVuY3Rpb24gKCkge1xuICAgIHZhciBJbnRlcmZhY2UgPSB0aGlzLmNvbnN0cnVjdG9yLkludGVyZmFjZTtcbiAgICBmb3IgKHZhciBwcm9wTmFtZSBpbiBJbnRlcmZhY2UpIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBwcm9wTmFtZSwgZ2V0UG9vbGVkV2FybmluZ1Byb3BlcnR5RGVmaW5pdGlvbihwcm9wTmFtZSwgSW50ZXJmYWNlW3Byb3BOYW1lXSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpc1twcm9wTmFtZV0gPSBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNob3VsZEJlUmVsZWFzZWRQcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0aGlzW3Nob3VsZEJlUmVsZWFzZWRQcm9wZXJ0aWVzW2ldXSA9IG51bGw7XG4gICAgfVxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ25hdGl2ZUV2ZW50JywgZ2V0UG9vbGVkV2FybmluZ1Byb3BlcnR5RGVmaW5pdGlvbignbmF0aXZlRXZlbnQnLCBudWxsKSk7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ3ByZXZlbnREZWZhdWx0JywgZ2V0UG9vbGVkV2FybmluZ1Byb3BlcnR5RGVmaW5pdGlvbigncHJldmVudERlZmF1bHQnLCBlbXB0eUZ1bmN0aW9uKSk7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ3N0b3BQcm9wYWdhdGlvbicsIGdldFBvb2xlZFdhcm5pbmdQcm9wZXJ0eURlZmluaXRpb24oJ3N0b3BQcm9wYWdhdGlvbicsIGVtcHR5RnVuY3Rpb24pKTtcbiAgICB9XG4gIH1cbn0pO1xuXG5TeW50aGV0aWNFdmVudC5JbnRlcmZhY2UgPSBFdmVudEludGVyZmFjZTtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgaWYgKGlzUHJveHlTdXBwb3J0ZWQpIHtcbiAgICAvKmVzbGludC1kaXNhYmxlIG5vLWZ1bmMtYXNzaWduICovXG4gICAgU3ludGhldGljRXZlbnQgPSBuZXcgUHJveHkoU3ludGhldGljRXZlbnQsIHtcbiAgICAgIGNvbnN0cnVjdDogZnVuY3Rpb24gKHRhcmdldCwgYXJncykge1xuICAgICAgICByZXR1cm4gdGhpcy5hcHBseSh0YXJnZXQsIE9iamVjdC5jcmVhdGUodGFyZ2V0LnByb3RvdHlwZSksIGFyZ3MpO1xuICAgICAgfSxcbiAgICAgIGFwcGx5OiBmdW5jdGlvbiAoY29uc3RydWN0b3IsIHRoYXQsIGFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm94eShjb25zdHJ1Y3Rvci5hcHBseSh0aGF0LCBhcmdzKSwge1xuICAgICAgICAgIHNldDogZnVuY3Rpb24gKHRhcmdldCwgcHJvcCwgdmFsdWUpIHtcbiAgICAgICAgICAgIGlmIChwcm9wICE9PSAnaXNQZXJzaXN0ZW50JyAmJiAhdGFyZ2V0LmNvbnN0cnVjdG9yLkludGVyZmFjZS5oYXNPd25Qcm9wZXJ0eShwcm9wKSAmJiBzaG91bGRCZVJlbGVhc2VkUHJvcGVydGllcy5pbmRleE9mKHByb3ApID09PSAtMSkge1xuICAgICAgICAgICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyhkaWRXYXJuRm9yQWRkZWROZXdQcm9wZXJ0eSB8fCB0YXJnZXQuaXNQZXJzaXN0ZW50KCksIFwiVGhpcyBzeW50aGV0aWMgZXZlbnQgaXMgcmV1c2VkIGZvciBwZXJmb3JtYW5jZSByZWFzb25zLiBJZiB5b3UncmUgXCIgKyBcInNlZWluZyB0aGlzLCB5b3UncmUgYWRkaW5nIGEgbmV3IHByb3BlcnR5IGluIHRoZSBzeW50aGV0aWMgZXZlbnQgb2JqZWN0LiBcIiArICdUaGUgcHJvcGVydHkgaXMgbmV2ZXIgcmVsZWFzZWQuIFNlZSAnICsgJ2h0dHBzOi8vZmIubWUvcmVhY3QtZXZlbnQtcG9vbGluZyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4nKSA6IHZvaWQgMDtcbiAgICAgICAgICAgICAgZGlkV2FybkZvckFkZGVkTmV3UHJvcGVydHkgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGFyZ2V0W3Byb3BdID0gdmFsdWU7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIC8qZXNsaW50LWVuYWJsZSBuby1mdW5jLWFzc2lnbiAqL1xuICB9XG59XG4vKipcbiAqIEhlbHBlciB0byByZWR1Y2UgYm9pbGVycGxhdGUgd2hlbiBjcmVhdGluZyBzdWJjbGFzc2VzLlxuICpcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IENsYXNzXG4gKiBAcGFyYW0gez9vYmplY3R9IEludGVyZmFjZVxuICovXG5TeW50aGV0aWNFdmVudC5hdWdtZW50Q2xhc3MgPSBmdW5jdGlvbiAoQ2xhc3MsIEludGVyZmFjZSkge1xuICB2YXIgU3VwZXIgPSB0aGlzO1xuXG4gIHZhciBFID0gZnVuY3Rpb24gKCkge307XG4gIEUucHJvdG90eXBlID0gU3VwZXIucHJvdG90eXBlO1xuICB2YXIgcHJvdG90eXBlID0gbmV3IEUoKTtcblxuICBfYXNzaWduKHByb3RvdHlwZSwgQ2xhc3MucHJvdG90eXBlKTtcbiAgQ2xhc3MucHJvdG90eXBlID0gcHJvdG90eXBlO1xuICBDbGFzcy5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDbGFzcztcblxuICBDbGFzcy5JbnRlcmZhY2UgPSBfYXNzaWduKHt9LCBTdXBlci5JbnRlcmZhY2UsIEludGVyZmFjZSk7XG4gIENsYXNzLmF1Z21lbnRDbGFzcyA9IFN1cGVyLmF1Z21lbnRDbGFzcztcblxuICBQb29sZWRDbGFzcy5hZGRQb29saW5nVG8oQ2xhc3MsIFBvb2xlZENsYXNzLmZvdXJBcmd1bWVudFBvb2xlcik7XG59O1xuXG5Qb29sZWRDbGFzcy5hZGRQb29saW5nVG8oU3ludGhldGljRXZlbnQsIFBvb2xlZENsYXNzLmZvdXJBcmd1bWVudFBvb2xlcik7XG5cbm1vZHVsZS5leHBvcnRzID0gU3ludGhldGljRXZlbnQ7XG5cbi8qKlxuICAqIEhlbHBlciB0byBudWxsaWZ5IHN5bnRoZXRpY0V2ZW50IGluc3RhbmNlIHByb3BlcnRpZXMgd2hlbiBkZXN0cnVjdGluZ1xuICAqXG4gICogQHBhcmFtIHtvYmplY3R9IFN5bnRoZXRpY0V2ZW50XG4gICogQHBhcmFtIHtTdHJpbmd9IHByb3BOYW1lXG4gICogQHJldHVybiB7b2JqZWN0fSBkZWZpbmVQcm9wZXJ0eSBvYmplY3RcbiAgKi9cbmZ1bmN0aW9uIGdldFBvb2xlZFdhcm5pbmdQcm9wZXJ0eURlZmluaXRpb24ocHJvcE5hbWUsIGdldFZhbCkge1xuICB2YXIgaXNGdW5jdGlvbiA9IHR5cGVvZiBnZXRWYWwgPT09ICdmdW5jdGlvbic7XG4gIHJldHVybiB7XG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIHNldDogc2V0LFxuICAgIGdldDogZ2V0XG4gIH07XG5cbiAgZnVuY3Rpb24gc2V0KHZhbCkge1xuICAgIHZhciBhY3Rpb24gPSBpc0Z1bmN0aW9uID8gJ3NldHRpbmcgdGhlIG1ldGhvZCcgOiAnc2V0dGluZyB0aGUgcHJvcGVydHknO1xuICAgIHdhcm4oYWN0aW9uLCAnVGhpcyBpcyBlZmZlY3RpdmVseSBhIG5vLW9wJyk7XG4gICAgcmV0dXJuIHZhbDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldCgpIHtcbiAgICB2YXIgYWN0aW9uID0gaXNGdW5jdGlvbiA/ICdhY2Nlc3NpbmcgdGhlIG1ldGhvZCcgOiAnYWNjZXNzaW5nIHRoZSBwcm9wZXJ0eSc7XG4gICAgdmFyIHJlc3VsdCA9IGlzRnVuY3Rpb24gPyAnVGhpcyBpcyBhIG5vLW9wIGZ1bmN0aW9uJyA6ICdUaGlzIGlzIHNldCB0byBudWxsJztcbiAgICB3YXJuKGFjdGlvbiwgcmVzdWx0KTtcbiAgICByZXR1cm4gZ2V0VmFsO1xuICB9XG5cbiAgZnVuY3Rpb24gd2FybihhY3Rpb24sIHJlc3VsdCkge1xuICAgIHZhciB3YXJuaW5nQ29uZGl0aW9uID0gZmFsc2U7XG4gICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcod2FybmluZ0NvbmRpdGlvbiwgXCJUaGlzIHN5bnRoZXRpYyBldmVudCBpcyByZXVzZWQgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMuIElmIHlvdSdyZSBzZWVpbmcgdGhpcywgXCIgKyBcInlvdSdyZSAlcyBgJXNgIG9uIGEgcmVsZWFzZWQvbnVsbGlmaWVkIHN5bnRoZXRpYyBldmVudC4gJXMuIFwiICsgJ0lmIHlvdSBtdXN0IGtlZXAgdGhlIG9yaWdpbmFsIHN5bnRoZXRpYyBldmVudCBhcm91bmQsIHVzZSBldmVudC5wZXJzaXN0KCkuICcgKyAnU2VlIGh0dHBzOi8vZmIubWUvcmVhY3QtZXZlbnQtcG9vbGluZyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4nLCBhY3Rpb24sIHByb3BOYW1lLCByZXN1bHQpIDogdm9pZCAwO1xuICB9XG59XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1kb20vbGliL1N5bnRoZXRpY0V2ZW50LmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIF9wcm9kSW52YXJpYW50ID0gcmVxdWlyZSgnLi9yZWFjdFByb2RJbnZhcmlhbnQnKTtcblxudmFyIGludmFyaWFudCA9IHJlcXVpcmUoJ2ZianMvbGliL2ludmFyaWFudCcpO1xuXG5mdW5jdGlvbiBjaGVja01hc2sodmFsdWUsIGJpdG1hc2spIHtcbiAgcmV0dXJuICh2YWx1ZSAmIGJpdG1hc2spID09PSBiaXRtYXNrO1xufVxuXG52YXIgRE9NUHJvcGVydHlJbmplY3Rpb24gPSB7XG4gIC8qKlxuICAgKiBNYXBwaW5nIGZyb20gbm9ybWFsaXplZCwgY2FtZWxjYXNlZCBwcm9wZXJ0eSBuYW1lcyB0byBhIGNvbmZpZ3VyYXRpb24gdGhhdFxuICAgKiBzcGVjaWZpZXMgaG93IHRoZSBhc3NvY2lhdGVkIERPTSBwcm9wZXJ0eSBzaG91bGQgYmUgYWNjZXNzZWQgb3IgcmVuZGVyZWQuXG4gICAqL1xuICBNVVNUX1VTRV9QUk9QRVJUWTogMHgxLFxuICBIQVNfQk9PTEVBTl9WQUxVRTogMHg0LFxuICBIQVNfTlVNRVJJQ19WQUxVRTogMHg4LFxuICBIQVNfUE9TSVRJVkVfTlVNRVJJQ19WQUxVRTogMHgxMCB8IDB4OCxcbiAgSEFTX09WRVJMT0FERURfQk9PTEVBTl9WQUxVRTogMHgyMCxcblxuICAvKipcbiAgICogSW5qZWN0IHNvbWUgc3BlY2lhbGl6ZWQga25vd2xlZGdlIGFib3V0IHRoZSBET00uIFRoaXMgdGFrZXMgYSBjb25maWcgb2JqZWN0XG4gICAqIHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICAgKlxuICAgKiBpc0N1c3RvbUF0dHJpYnV0ZTogZnVuY3Rpb24gdGhhdCBnaXZlbiBhbiBhdHRyaWJ1dGUgbmFtZSB3aWxsIHJldHVybiB0cnVlXG4gICAqIGlmIGl0IGNhbiBiZSBpbnNlcnRlZCBpbnRvIHRoZSBET00gdmVyYmF0aW0uIFVzZWZ1bCBmb3IgZGF0YS0qIG9yIGFyaWEtKlxuICAgKiBhdHRyaWJ1dGVzIHdoZXJlIGl0J3MgaW1wb3NzaWJsZSB0byBlbnVtZXJhdGUgYWxsIG9mIHRoZSBwb3NzaWJsZVxuICAgKiBhdHRyaWJ1dGUgbmFtZXMsXG4gICAqXG4gICAqIFByb3BlcnRpZXM6IG9iamVjdCBtYXBwaW5nIERPTSBwcm9wZXJ0eSBuYW1lIHRvIG9uZSBvZiB0aGVcbiAgICogRE9NUHJvcGVydHlJbmplY3Rpb24gY29uc3RhbnRzIG9yIG51bGwuIElmIHlvdXIgYXR0cmlidXRlIGlzbid0IGluIGhlcmUsXG4gICAqIGl0IHdvbid0IGdldCB3cml0dGVuIHRvIHRoZSBET00uXG4gICAqXG4gICAqIERPTUF0dHJpYnV0ZU5hbWVzOiBvYmplY3QgbWFwcGluZyBSZWFjdCBhdHRyaWJ1dGUgbmFtZSB0byB0aGUgRE9NXG4gICAqIGF0dHJpYnV0ZSBuYW1lLiBBdHRyaWJ1dGUgbmFtZXMgbm90IHNwZWNpZmllZCB1c2UgdGhlICoqbG93ZXJjYXNlKipcbiAgICogbm9ybWFsaXplZCBuYW1lLlxuICAgKlxuICAgKiBET01BdHRyaWJ1dGVOYW1lc3BhY2VzOiBvYmplY3QgbWFwcGluZyBSZWFjdCBhdHRyaWJ1dGUgbmFtZSB0byB0aGUgRE9NXG4gICAqIGF0dHJpYnV0ZSBuYW1lc3BhY2UgVVJMLiAoQXR0cmlidXRlIG5hbWVzIG5vdCBzcGVjaWZpZWQgdXNlIG5vIG5hbWVzcGFjZS4pXG4gICAqXG4gICAqIERPTVByb3BlcnR5TmFtZXM6IHNpbWlsYXIgdG8gRE9NQXR0cmlidXRlTmFtZXMgYnV0IGZvciBET00gcHJvcGVydGllcy5cbiAgICogUHJvcGVydHkgbmFtZXMgbm90IHNwZWNpZmllZCB1c2UgdGhlIG5vcm1hbGl6ZWQgbmFtZS5cbiAgICpcbiAgICogRE9NTXV0YXRpb25NZXRob2RzOiBQcm9wZXJ0aWVzIHRoYXQgcmVxdWlyZSBzcGVjaWFsIG11dGF0aW9uIG1ldGhvZHMuIElmXG4gICAqIGB2YWx1ZWAgaXMgdW5kZWZpbmVkLCB0aGUgbXV0YXRpb24gbWV0aG9kIHNob3VsZCB1bnNldCB0aGUgcHJvcGVydHkuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBkb21Qcm9wZXJ0eUNvbmZpZyB0aGUgY29uZmlnIGFzIGRlc2NyaWJlZCBhYm92ZS5cbiAgICovXG4gIGluamVjdERPTVByb3BlcnR5Q29uZmlnOiBmdW5jdGlvbiAoZG9tUHJvcGVydHlDb25maWcpIHtcbiAgICB2YXIgSW5qZWN0aW9uID0gRE9NUHJvcGVydHlJbmplY3Rpb247XG4gICAgdmFyIFByb3BlcnRpZXMgPSBkb21Qcm9wZXJ0eUNvbmZpZy5Qcm9wZXJ0aWVzIHx8IHt9O1xuICAgIHZhciBET01BdHRyaWJ1dGVOYW1lc3BhY2VzID0gZG9tUHJvcGVydHlDb25maWcuRE9NQXR0cmlidXRlTmFtZXNwYWNlcyB8fCB7fTtcbiAgICB2YXIgRE9NQXR0cmlidXRlTmFtZXMgPSBkb21Qcm9wZXJ0eUNvbmZpZy5ET01BdHRyaWJ1dGVOYW1lcyB8fCB7fTtcbiAgICB2YXIgRE9NUHJvcGVydHlOYW1lcyA9IGRvbVByb3BlcnR5Q29uZmlnLkRPTVByb3BlcnR5TmFtZXMgfHwge307XG4gICAgdmFyIERPTU11dGF0aW9uTWV0aG9kcyA9IGRvbVByb3BlcnR5Q29uZmlnLkRPTU11dGF0aW9uTWV0aG9kcyB8fCB7fTtcblxuICAgIGlmIChkb21Qcm9wZXJ0eUNvbmZpZy5pc0N1c3RvbUF0dHJpYnV0ZSkge1xuICAgICAgRE9NUHJvcGVydHkuX2lzQ3VzdG9tQXR0cmlidXRlRnVuY3Rpb25zLnB1c2goZG9tUHJvcGVydHlDb25maWcuaXNDdXN0b21BdHRyaWJ1dGUpO1xuICAgIH1cblxuICAgIGZvciAodmFyIHByb3BOYW1lIGluIFByb3BlcnRpZXMpIHtcbiAgICAgICEhRE9NUHJvcGVydHkucHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eShwcm9wTmFtZSkgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAnaW5qZWN0RE9NUHJvcGVydHlDb25maWcoLi4uKTogWW91XFwncmUgdHJ5aW5nIHRvIGluamVjdCBET00gcHJvcGVydHkgXFwnJXNcXCcgd2hpY2ggaGFzIGFscmVhZHkgYmVlbiBpbmplY3RlZC4gWW91IG1heSBiZSBhY2NpZGVudGFsbHkgaW5qZWN0aW5nIHRoZSBzYW1lIERPTSBwcm9wZXJ0eSBjb25maWcgdHdpY2UsIG9yIHlvdSBtYXkgYmUgaW5qZWN0aW5nIHR3byBjb25maWdzIHRoYXQgaGF2ZSBjb25mbGljdGluZyBwcm9wZXJ0eSBuYW1lcy4nLCBwcm9wTmFtZSkgOiBfcHJvZEludmFyaWFudCgnNDgnLCBwcm9wTmFtZSkgOiB2b2lkIDA7XG5cbiAgICAgIHZhciBsb3dlckNhc2VkID0gcHJvcE5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICAgIHZhciBwcm9wQ29uZmlnID0gUHJvcGVydGllc1twcm9wTmFtZV07XG5cbiAgICAgIHZhciBwcm9wZXJ0eUluZm8gPSB7XG4gICAgICAgIGF0dHJpYnV0ZU5hbWU6IGxvd2VyQ2FzZWQsXG4gICAgICAgIGF0dHJpYnV0ZU5hbWVzcGFjZTogbnVsbCxcbiAgICAgICAgcHJvcGVydHlOYW1lOiBwcm9wTmFtZSxcbiAgICAgICAgbXV0YXRpb25NZXRob2Q6IG51bGwsXG5cbiAgICAgICAgbXVzdFVzZVByb3BlcnR5OiBjaGVja01hc2socHJvcENvbmZpZywgSW5qZWN0aW9uLk1VU1RfVVNFX1BST1BFUlRZKSxcbiAgICAgICAgaGFzQm9vbGVhblZhbHVlOiBjaGVja01hc2socHJvcENvbmZpZywgSW5qZWN0aW9uLkhBU19CT09MRUFOX1ZBTFVFKSxcbiAgICAgICAgaGFzTnVtZXJpY1ZhbHVlOiBjaGVja01hc2socHJvcENvbmZpZywgSW5qZWN0aW9uLkhBU19OVU1FUklDX1ZBTFVFKSxcbiAgICAgICAgaGFzUG9zaXRpdmVOdW1lcmljVmFsdWU6IGNoZWNrTWFzayhwcm9wQ29uZmlnLCBJbmplY3Rpb24uSEFTX1BPU0lUSVZFX05VTUVSSUNfVkFMVUUpLFxuICAgICAgICBoYXNPdmVybG9hZGVkQm9vbGVhblZhbHVlOiBjaGVja01hc2socHJvcENvbmZpZywgSW5qZWN0aW9uLkhBU19PVkVSTE9BREVEX0JPT0xFQU5fVkFMVUUpXG4gICAgICB9O1xuICAgICAgIShwcm9wZXJ0eUluZm8uaGFzQm9vbGVhblZhbHVlICsgcHJvcGVydHlJbmZvLmhhc051bWVyaWNWYWx1ZSArIHByb3BlcnR5SW5mby5oYXNPdmVybG9hZGVkQm9vbGVhblZhbHVlIDw9IDEpID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IGludmFyaWFudChmYWxzZSwgJ0RPTVByb3BlcnR5OiBWYWx1ZSBjYW4gYmUgb25lIG9mIGJvb2xlYW4sIG92ZXJsb2FkZWQgYm9vbGVhbiwgb3IgbnVtZXJpYyB2YWx1ZSwgYnV0IG5vdCBhIGNvbWJpbmF0aW9uOiAlcycsIHByb3BOYW1lKSA6IF9wcm9kSW52YXJpYW50KCc1MCcsIHByb3BOYW1lKSA6IHZvaWQgMDtcblxuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgRE9NUHJvcGVydHkuZ2V0UG9zc2libGVTdGFuZGFyZE5hbWVbbG93ZXJDYXNlZF0gPSBwcm9wTmFtZTtcbiAgICAgIH1cblxuICAgICAgaWYgKERPTUF0dHJpYnV0ZU5hbWVzLmhhc093blByb3BlcnR5KHByb3BOYW1lKSkge1xuICAgICAgICB2YXIgYXR0cmlidXRlTmFtZSA9IERPTUF0dHJpYnV0ZU5hbWVzW3Byb3BOYW1lXTtcbiAgICAgICAgcHJvcGVydHlJbmZvLmF0dHJpYnV0ZU5hbWUgPSBhdHRyaWJ1dGVOYW1lO1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgIERPTVByb3BlcnR5LmdldFBvc3NpYmxlU3RhbmRhcmROYW1lW2F0dHJpYnV0ZU5hbWVdID0gcHJvcE5hbWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKERPTUF0dHJpYnV0ZU5hbWVzcGFjZXMuaGFzT3duUHJvcGVydHkocHJvcE5hbWUpKSB7XG4gICAgICAgIHByb3BlcnR5SW5mby5hdHRyaWJ1dGVOYW1lc3BhY2UgPSBET01BdHRyaWJ1dGVOYW1lc3BhY2VzW3Byb3BOYW1lXTtcbiAgICAgIH1cblxuICAgICAgaWYgKERPTVByb3BlcnR5TmFtZXMuaGFzT3duUHJvcGVydHkocHJvcE5hbWUpKSB7XG4gICAgICAgIHByb3BlcnR5SW5mby5wcm9wZXJ0eU5hbWUgPSBET01Qcm9wZXJ0eU5hbWVzW3Byb3BOYW1lXTtcbiAgICAgIH1cblxuICAgICAgaWYgKERPTU11dGF0aW9uTWV0aG9kcy5oYXNPd25Qcm9wZXJ0eShwcm9wTmFtZSkpIHtcbiAgICAgICAgcHJvcGVydHlJbmZvLm11dGF0aW9uTWV0aG9kID0gRE9NTXV0YXRpb25NZXRob2RzW3Byb3BOYW1lXTtcbiAgICAgIH1cblxuICAgICAgRE9NUHJvcGVydHkucHJvcGVydGllc1twcm9wTmFtZV0gPSBwcm9wZXJ0eUluZm87XG4gICAgfVxuICB9XG59O1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuICovXG52YXIgQVRUUklCVVRFX05BTUVfU1RBUlRfQ0hBUiA9ICc6QS1aX2EtelxcXFx1MDBDMC1cXFxcdTAwRDZcXFxcdTAwRDgtXFxcXHUwMEY2XFxcXHUwMEY4LVxcXFx1MDJGRlxcXFx1MDM3MC1cXFxcdTAzN0RcXFxcdTAzN0YtXFxcXHUxRkZGXFxcXHUyMDBDLVxcXFx1MjAwRFxcXFx1MjA3MC1cXFxcdTIxOEZcXFxcdTJDMDAtXFxcXHUyRkVGXFxcXHUzMDAxLVxcXFx1RDdGRlxcXFx1RjkwMC1cXFxcdUZEQ0ZcXFxcdUZERjAtXFxcXHVGRkZEJztcbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiAqL1xuXG4vKipcbiAqIERPTVByb3BlcnR5IGV4cG9ydHMgbG9va3VwIG9iamVjdHMgdGhhdCBjYW4gYmUgdXNlZCBsaWtlIGZ1bmN0aW9uczpcbiAqXG4gKiAgID4gRE9NUHJvcGVydHkuaXNWYWxpZFsnaWQnXVxuICogICB0cnVlXG4gKiAgID4gRE9NUHJvcGVydHkuaXNWYWxpZFsnZm9vYmFyJ11cbiAqICAgdW5kZWZpbmVkXG4gKlxuICogQWx0aG91Z2ggdGhpcyBtYXkgYmUgY29uZnVzaW5nLCBpdCBwZXJmb3JtcyBiZXR0ZXIgaW4gZ2VuZXJhbC5cbiAqXG4gKiBAc2VlIGh0dHA6Ly9qc3BlcmYuY29tL2tleS1leGlzdHNcbiAqIEBzZWUgaHR0cDovL2pzcGVyZi5jb20va2V5LW1pc3NpbmdcbiAqL1xudmFyIERPTVByb3BlcnR5ID0ge1xuICBJRF9BVFRSSUJVVEVfTkFNRTogJ2RhdGEtcmVhY3RpZCcsXG4gIFJPT1RfQVRUUklCVVRFX05BTUU6ICdkYXRhLXJlYWN0cm9vdCcsXG5cbiAgQVRUUklCVVRFX05BTUVfU1RBUlRfQ0hBUjogQVRUUklCVVRFX05BTUVfU1RBUlRfQ0hBUixcbiAgQVRUUklCVVRFX05BTUVfQ0hBUjogQVRUUklCVVRFX05BTUVfU1RBUlRfQ0hBUiArICdcXFxcLS4wLTlcXFxcdTAwQjdcXFxcdTAzMDAtXFxcXHUwMzZGXFxcXHUyMDNGLVxcXFx1MjA0MCcsXG5cbiAgLyoqXG4gICAqIE1hcCBmcm9tIHByb3BlcnR5IFwic3RhbmRhcmQgbmFtZVwiIHRvIGFuIG9iamVjdCB3aXRoIGluZm8gYWJvdXQgaG93IHRvIHNldFxuICAgKiB0aGUgcHJvcGVydHkgaW4gdGhlIERPTS4gRWFjaCBvYmplY3QgY29udGFpbnM6XG4gICAqXG4gICAqIGF0dHJpYnV0ZU5hbWU6XG4gICAqICAgVXNlZCB3aGVuIHJlbmRlcmluZyBtYXJrdXAgb3Igd2l0aCBgKkF0dHJpYnV0ZSgpYC5cbiAgICogYXR0cmlidXRlTmFtZXNwYWNlXG4gICAqIHByb3BlcnR5TmFtZTpcbiAgICogICBVc2VkIG9uIERPTSBub2RlIGluc3RhbmNlcy4gKFRoaXMgaW5jbHVkZXMgcHJvcGVydGllcyB0aGF0IG11dGF0ZSBkdWUgdG9cbiAgICogICBleHRlcm5hbCBmYWN0b3JzLilcbiAgICogbXV0YXRpb25NZXRob2Q6XG4gICAqICAgSWYgbm9uLW51bGwsIHVzZWQgaW5zdGVhZCBvZiB0aGUgcHJvcGVydHkgb3IgYHNldEF0dHJpYnV0ZSgpYCBhZnRlclxuICAgKiAgIGluaXRpYWwgcmVuZGVyLlxuICAgKiBtdXN0VXNlUHJvcGVydHk6XG4gICAqICAgV2hldGhlciB0aGUgcHJvcGVydHkgbXVzdCBiZSBhY2Nlc3NlZCBhbmQgbXV0YXRlZCBhcyBhbiBvYmplY3QgcHJvcGVydHkuXG4gICAqIGhhc0Jvb2xlYW5WYWx1ZTpcbiAgICogICBXaGV0aGVyIHRoZSBwcm9wZXJ0eSBzaG91bGQgYmUgcmVtb3ZlZCB3aGVuIHNldCB0byBhIGZhbHNleSB2YWx1ZS5cbiAgICogaGFzTnVtZXJpY1ZhbHVlOlxuICAgKiAgIFdoZXRoZXIgdGhlIHByb3BlcnR5IG11c3QgYmUgbnVtZXJpYyBvciBwYXJzZSBhcyBhIG51bWVyaWMgYW5kIHNob3VsZCBiZVxuICAgKiAgIHJlbW92ZWQgd2hlbiBzZXQgdG8gYSBmYWxzZXkgdmFsdWUuXG4gICAqIGhhc1Bvc2l0aXZlTnVtZXJpY1ZhbHVlOlxuICAgKiAgIFdoZXRoZXIgdGhlIHByb3BlcnR5IG11c3QgYmUgcG9zaXRpdmUgbnVtZXJpYyBvciBwYXJzZSBhcyBhIHBvc2l0aXZlXG4gICAqICAgbnVtZXJpYyBhbmQgc2hvdWxkIGJlIHJlbW92ZWQgd2hlbiBzZXQgdG8gYSBmYWxzZXkgdmFsdWUuXG4gICAqIGhhc092ZXJsb2FkZWRCb29sZWFuVmFsdWU6XG4gICAqICAgV2hldGhlciB0aGUgcHJvcGVydHkgY2FuIGJlIHVzZWQgYXMgYSBmbGFnIGFzIHdlbGwgYXMgd2l0aCBhIHZhbHVlLlxuICAgKiAgIFJlbW92ZWQgd2hlbiBzdHJpY3RseSBlcXVhbCB0byBmYWxzZTsgcHJlc2VudCB3aXRob3V0IGEgdmFsdWUgd2hlblxuICAgKiAgIHN0cmljdGx5IGVxdWFsIHRvIHRydWU7IHByZXNlbnQgd2l0aCBhIHZhbHVlIG90aGVyd2lzZS5cbiAgICovXG4gIHByb3BlcnRpZXM6IHt9LFxuXG4gIC8qKlxuICAgKiBNYXBwaW5nIGZyb20gbG93ZXJjYXNlIHByb3BlcnR5IG5hbWVzIHRvIHRoZSBwcm9wZXJseSBjYXNlZCB2ZXJzaW9uLCB1c2VkXG4gICAqIHRvIHdhcm4gaW4gdGhlIGNhc2Ugb2YgbWlzc2luZyBwcm9wZXJ0aWVzLiBBdmFpbGFibGUgb25seSBpbiBfX0RFVl9fLlxuICAgKlxuICAgKiBhdXRvZm9jdXMgaXMgcHJlZGVmaW5lZCwgYmVjYXVzZSBhZGRpbmcgaXQgdG8gdGhlIHByb3BlcnR5IHdoaXRlbGlzdFxuICAgKiBjYXVzZXMgdW5pbnRlbmRlZCBzaWRlIGVmZmVjdHMuXG4gICAqXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICBnZXRQb3NzaWJsZVN0YW5kYXJkTmFtZTogcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHsgYXV0b2ZvY3VzOiAnYXV0b0ZvY3VzJyB9IDogbnVsbCxcblxuICAvKipcbiAgICogQWxsIG9mIHRoZSBpc0N1c3RvbUF0dHJpYnV0ZSgpIGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiBpbmplY3RlZC5cbiAgICovXG4gIF9pc0N1c3RvbUF0dHJpYnV0ZUZ1bmN0aW9uczogW10sXG5cbiAgLyoqXG4gICAqIENoZWNrcyB3aGV0aGVyIGEgcHJvcGVydHkgbmFtZSBpcyBhIGN1c3RvbSBhdHRyaWJ1dGUuXG4gICAqIEBtZXRob2RcbiAgICovXG4gIGlzQ3VzdG9tQXR0cmlidXRlOiBmdW5jdGlvbiAoYXR0cmlidXRlTmFtZSkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgRE9NUHJvcGVydHkuX2lzQ3VzdG9tQXR0cmlidXRlRnVuY3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaXNDdXN0b21BdHRyaWJ1dGVGbiA9IERPTVByb3BlcnR5Ll9pc0N1c3RvbUF0dHJpYnV0ZUZ1bmN0aW9uc1tpXTtcbiAgICAgIGlmIChpc0N1c3RvbUF0dHJpYnV0ZUZuKGF0dHJpYnV0ZU5hbWUpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG5cbiAgaW5qZWN0aW9uOiBET01Qcm9wZXJ0eUluamVjdGlvblxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBET01Qcm9wZXJ0eTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3JlYWN0LWRvbS9saWIvRE9NUHJvcGVydHkuanMiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBfcHJvZEludmFyaWFudCA9IHJlcXVpcmUoJy4vcmVhY3RQcm9kSW52YXJpYW50Jyk7XG5cbnZhciBpbnZhcmlhbnQgPSByZXF1aXJlKCdmYmpzL2xpYi9pbnZhcmlhbnQnKTtcblxuLyoqXG4gKiBTdGF0aWMgcG9vbGVycy4gU2V2ZXJhbCBjdXN0b20gdmVyc2lvbnMgZm9yIGVhY2ggcG90ZW50aWFsIG51bWJlciBvZlxuICogYXJndW1lbnRzLiBBIGNvbXBsZXRlbHkgZ2VuZXJpYyBwb29sZXIgaXMgZWFzeSB0byBpbXBsZW1lbnQsIGJ1dCB3b3VsZFxuICogcmVxdWlyZSBhY2Nlc3NpbmcgdGhlIGBhcmd1bWVudHNgIG9iamVjdC4gSW4gZWFjaCBvZiB0aGVzZSwgYHRoaXNgIHJlZmVycyB0b1xuICogdGhlIENsYXNzIGl0c2VsZiwgbm90IGFuIGluc3RhbmNlLiBJZiBhbnkgb3RoZXJzIGFyZSBuZWVkZWQsIHNpbXBseSBhZGQgdGhlbVxuICogaGVyZSwgb3IgaW4gdGhlaXIgb3duIGZpbGVzLlxuICovXG52YXIgb25lQXJndW1lbnRQb29sZXIgPSBmdW5jdGlvbiAoY29weUZpZWxkc0Zyb20pIHtcbiAgdmFyIEtsYXNzID0gdGhpcztcbiAgaWYgKEtsYXNzLmluc3RhbmNlUG9vbC5sZW5ndGgpIHtcbiAgICB2YXIgaW5zdGFuY2UgPSBLbGFzcy5pbnN0YW5jZVBvb2wucG9wKCk7XG4gICAgS2xhc3MuY2FsbChpbnN0YW5jZSwgY29weUZpZWxkc0Zyb20pO1xuICAgIHJldHVybiBpbnN0YW5jZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbmV3IEtsYXNzKGNvcHlGaWVsZHNGcm9tKTtcbiAgfVxufTtcblxudmFyIHR3b0FyZ3VtZW50UG9vbGVyID0gZnVuY3Rpb24gKGExLCBhMikge1xuICB2YXIgS2xhc3MgPSB0aGlzO1xuICBpZiAoS2xhc3MuaW5zdGFuY2VQb29sLmxlbmd0aCkge1xuICAgIHZhciBpbnN0YW5jZSA9IEtsYXNzLmluc3RhbmNlUG9vbC5wb3AoKTtcbiAgICBLbGFzcy5jYWxsKGluc3RhbmNlLCBhMSwgYTIpO1xuICAgIHJldHVybiBpbnN0YW5jZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbmV3IEtsYXNzKGExLCBhMik7XG4gIH1cbn07XG5cbnZhciB0aHJlZUFyZ3VtZW50UG9vbGVyID0gZnVuY3Rpb24gKGExLCBhMiwgYTMpIHtcbiAgdmFyIEtsYXNzID0gdGhpcztcbiAgaWYgKEtsYXNzLmluc3RhbmNlUG9vbC5sZW5ndGgpIHtcbiAgICB2YXIgaW5zdGFuY2UgPSBLbGFzcy5pbnN0YW5jZVBvb2wucG9wKCk7XG4gICAgS2xhc3MuY2FsbChpbnN0YW5jZSwgYTEsIGEyLCBhMyk7XG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBuZXcgS2xhc3MoYTEsIGEyLCBhMyk7XG4gIH1cbn07XG5cbnZhciBmb3VyQXJndW1lbnRQb29sZXIgPSBmdW5jdGlvbiAoYTEsIGEyLCBhMywgYTQpIHtcbiAgdmFyIEtsYXNzID0gdGhpcztcbiAgaWYgKEtsYXNzLmluc3RhbmNlUG9vbC5sZW5ndGgpIHtcbiAgICB2YXIgaW5zdGFuY2UgPSBLbGFzcy5pbnN0YW5jZVBvb2wucG9wKCk7XG4gICAgS2xhc3MuY2FsbChpbnN0YW5jZSwgYTEsIGEyLCBhMywgYTQpO1xuICAgIHJldHVybiBpbnN0YW5jZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbmV3IEtsYXNzKGExLCBhMiwgYTMsIGE0KTtcbiAgfVxufTtcblxudmFyIHN0YW5kYXJkUmVsZWFzZXIgPSBmdW5jdGlvbiAoaW5zdGFuY2UpIHtcbiAgdmFyIEtsYXNzID0gdGhpcztcbiAgIShpbnN0YW5jZSBpbnN0YW5jZW9mIEtsYXNzKSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICdUcnlpbmcgdG8gcmVsZWFzZSBhbiBpbnN0YW5jZSBpbnRvIGEgcG9vbCBvZiBhIGRpZmZlcmVudCB0eXBlLicpIDogX3Byb2RJbnZhcmlhbnQoJzI1JykgOiB2b2lkIDA7XG4gIGluc3RhbmNlLmRlc3RydWN0b3IoKTtcbiAgaWYgKEtsYXNzLmluc3RhbmNlUG9vbC5sZW5ndGggPCBLbGFzcy5wb29sU2l6ZSkge1xuICAgIEtsYXNzLmluc3RhbmNlUG9vbC5wdXNoKGluc3RhbmNlKTtcbiAgfVxufTtcblxudmFyIERFRkFVTFRfUE9PTF9TSVpFID0gMTA7XG52YXIgREVGQVVMVF9QT09MRVIgPSBvbmVBcmd1bWVudFBvb2xlcjtcblxuLyoqXG4gKiBBdWdtZW50cyBgQ29weUNvbnN0cnVjdG9yYCB0byBiZSBhIHBvb2xhYmxlIGNsYXNzLCBhdWdtZW50aW5nIG9ubHkgdGhlIGNsYXNzXG4gKiBpdHNlbGYgKHN0YXRpY2FsbHkpIG5vdCBhZGRpbmcgYW55IHByb3RvdHlwaWNhbCBmaWVsZHMuIEFueSBDb3B5Q29uc3RydWN0b3JcbiAqIHlvdSBnaXZlIHRoaXMgbWF5IGhhdmUgYSBgcG9vbFNpemVgIHByb3BlcnR5LCBhbmQgd2lsbCBsb29rIGZvciBhXG4gKiBwcm90b3R5cGljYWwgYGRlc3RydWN0b3JgIG9uIGluc3RhbmNlcy5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBDb3B5Q29uc3RydWN0b3IgQ29uc3RydWN0b3IgdGhhdCBjYW4gYmUgdXNlZCB0byByZXNldC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHBvb2xlciBDdXN0b21pemFibGUgcG9vbGVyLlxuICovXG52YXIgYWRkUG9vbGluZ1RvID0gZnVuY3Rpb24gKENvcHlDb25zdHJ1Y3RvciwgcG9vbGVyKSB7XG4gIC8vIENhc3RpbmcgYXMgYW55IHNvIHRoYXQgZmxvdyBpZ25vcmVzIHRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb24gYW5kIHRydXN0c1xuICAvLyBpdCB0byBtYXRjaCB0aGUgdHlwZSB3ZSBkZWNsYXJlZFxuICB2YXIgTmV3S2xhc3MgPSBDb3B5Q29uc3RydWN0b3I7XG4gIE5ld0tsYXNzLmluc3RhbmNlUG9vbCA9IFtdO1xuICBOZXdLbGFzcy5nZXRQb29sZWQgPSBwb29sZXIgfHwgREVGQVVMVF9QT09MRVI7XG4gIGlmICghTmV3S2xhc3MucG9vbFNpemUpIHtcbiAgICBOZXdLbGFzcy5wb29sU2l6ZSA9IERFRkFVTFRfUE9PTF9TSVpFO1xuICB9XG4gIE5ld0tsYXNzLnJlbGVhc2UgPSBzdGFuZGFyZFJlbGVhc2VyO1xuICByZXR1cm4gTmV3S2xhc3M7XG59O1xuXG52YXIgUG9vbGVkQ2xhc3MgPSB7XG4gIGFkZFBvb2xpbmdUbzogYWRkUG9vbGluZ1RvLFxuICBvbmVBcmd1bWVudFBvb2xlcjogb25lQXJndW1lbnRQb29sZXIsXG4gIHR3b0FyZ3VtZW50UG9vbGVyOiB0d29Bcmd1bWVudFBvb2xlcixcbiAgdGhyZWVBcmd1bWVudFBvb2xlcjogdGhyZWVBcmd1bWVudFBvb2xlcixcbiAgZm91ckFyZ3VtZW50UG9vbGVyOiBmb3VyQXJndW1lbnRQb29sZXJcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUG9vbGVkQ2xhc3M7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1kb20vbGliL1Bvb2xlZENsYXNzLmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxNC1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIF9hc3NpZ24gPSByZXF1aXJlKCdvYmplY3QtYXNzaWduJyk7XG5cbnZhciBSZWFjdEN1cnJlbnRPd25lciA9IHJlcXVpcmUoJy4vUmVhY3RDdXJyZW50T3duZXInKTtcblxudmFyIHdhcm5pbmcgPSByZXF1aXJlKCdmYmpzL2xpYi93YXJuaW5nJyk7XG52YXIgY2FuRGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL2NhbkRlZmluZVByb3BlcnR5Jyk7XG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuXG52YXIgUkVBQ1RfRUxFTUVOVF9UWVBFID0gcmVxdWlyZSgnLi9SZWFjdEVsZW1lbnRTeW1ib2wnKTtcblxudmFyIFJFU0VSVkVEX1BST1BTID0ge1xuICBrZXk6IHRydWUsXG4gIHJlZjogdHJ1ZSxcbiAgX19zZWxmOiB0cnVlLFxuICBfX3NvdXJjZTogdHJ1ZVxufTtcblxudmFyIHNwZWNpYWxQcm9wS2V5V2FybmluZ1Nob3duLCBzcGVjaWFsUHJvcFJlZldhcm5pbmdTaG93bjtcblxuZnVuY3Rpb24gaGFzVmFsaWRSZWYoY29uZmlnKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoY29uZmlnLCAncmVmJykpIHtcbiAgICAgIHZhciBnZXR0ZXIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGNvbmZpZywgJ3JlZicpLmdldDtcbiAgICAgIGlmIChnZXR0ZXIgJiYgZ2V0dGVyLmlzUmVhY3RXYXJuaW5nKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNvbmZpZy5yZWYgIT09IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gaGFzVmFsaWRLZXkoY29uZmlnKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoY29uZmlnLCAna2V5JykpIHtcbiAgICAgIHZhciBnZXR0ZXIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGNvbmZpZywgJ2tleScpLmdldDtcbiAgICAgIGlmIChnZXR0ZXIgJiYgZ2V0dGVyLmlzUmVhY3RXYXJuaW5nKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNvbmZpZy5rZXkgIT09IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gZGVmaW5lS2V5UHJvcFdhcm5pbmdHZXR0ZXIocHJvcHMsIGRpc3BsYXlOYW1lKSB7XG4gIHZhciB3YXJuQWJvdXRBY2Nlc3NpbmdLZXkgPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCFzcGVjaWFsUHJvcEtleVdhcm5pbmdTaG93bikge1xuICAgICAgc3BlY2lhbFByb3BLZXlXYXJuaW5nU2hvd24gPSB0cnVlO1xuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcoZmFsc2UsICclczogYGtleWAgaXMgbm90IGEgcHJvcC4gVHJ5aW5nIHRvIGFjY2VzcyBpdCB3aWxsIHJlc3VsdCAnICsgJ2luIGB1bmRlZmluZWRgIGJlaW5nIHJldHVybmVkLiBJZiB5b3UgbmVlZCB0byBhY2Nlc3MgdGhlIHNhbWUgJyArICd2YWx1ZSB3aXRoaW4gdGhlIGNoaWxkIGNvbXBvbmVudCwgeW91IHNob3VsZCBwYXNzIGl0IGFzIGEgZGlmZmVyZW50ICcgKyAncHJvcC4gKGh0dHBzOi8vZmIubWUvcmVhY3Qtc3BlY2lhbC1wcm9wcyknLCBkaXNwbGF5TmFtZSkgOiB2b2lkIDA7XG4gICAgfVxuICB9O1xuICB3YXJuQWJvdXRBY2Nlc3NpbmdLZXkuaXNSZWFjdFdhcm5pbmcgPSB0cnVlO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkocHJvcHMsICdrZXknLCB7XG4gICAgZ2V0OiB3YXJuQWJvdXRBY2Nlc3NpbmdLZXksXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0pO1xufVxuXG5mdW5jdGlvbiBkZWZpbmVSZWZQcm9wV2FybmluZ0dldHRlcihwcm9wcywgZGlzcGxheU5hbWUpIHtcbiAgdmFyIHdhcm5BYm91dEFjY2Vzc2luZ1JlZiA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIXNwZWNpYWxQcm9wUmVmV2FybmluZ1Nob3duKSB7XG4gICAgICBzcGVjaWFsUHJvcFJlZldhcm5pbmdTaG93biA9IHRydWU7XG4gICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyhmYWxzZSwgJyVzOiBgcmVmYCBpcyBub3QgYSBwcm9wLiBUcnlpbmcgdG8gYWNjZXNzIGl0IHdpbGwgcmVzdWx0ICcgKyAnaW4gYHVuZGVmaW5lZGAgYmVpbmcgcmV0dXJuZWQuIElmIHlvdSBuZWVkIHRvIGFjY2VzcyB0aGUgc2FtZSAnICsgJ3ZhbHVlIHdpdGhpbiB0aGUgY2hpbGQgY29tcG9uZW50LCB5b3Ugc2hvdWxkIHBhc3MgaXQgYXMgYSBkaWZmZXJlbnQgJyArICdwcm9wLiAoaHR0cHM6Ly9mYi5tZS9yZWFjdC1zcGVjaWFsLXByb3BzKScsIGRpc3BsYXlOYW1lKSA6IHZvaWQgMDtcbiAgICB9XG4gIH07XG4gIHdhcm5BYm91dEFjY2Vzc2luZ1JlZi5pc1JlYWN0V2FybmluZyA9IHRydWU7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm9wcywgJ3JlZicsIHtcbiAgICBnZXQ6IHdhcm5BYm91dEFjY2Vzc2luZ1JlZixcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSk7XG59XG5cbi8qKlxuICogRmFjdG9yeSBtZXRob2QgdG8gY3JlYXRlIGEgbmV3IFJlYWN0IGVsZW1lbnQuIFRoaXMgbm8gbG9uZ2VyIGFkaGVyZXMgdG9cbiAqIHRoZSBjbGFzcyBwYXR0ZXJuLCBzbyBkbyBub3QgdXNlIG5ldyB0byBjYWxsIGl0LiBBbHNvLCBubyBpbnN0YW5jZW9mIGNoZWNrXG4gKiB3aWxsIHdvcmsuIEluc3RlYWQgdGVzdCAkJHR5cGVvZiBmaWVsZCBhZ2FpbnN0IFN5bWJvbC5mb3IoJ3JlYWN0LmVsZW1lbnQnKSB0byBjaGVja1xuICogaWYgc29tZXRoaW5nIGlzIGEgUmVhY3QgRWxlbWVudC5cbiAqXG4gKiBAcGFyYW0geyp9IHR5cGVcbiAqIEBwYXJhbSB7Kn0ga2V5XG4gKiBAcGFyYW0ge3N0cmluZ3xvYmplY3R9IHJlZlxuICogQHBhcmFtIHsqfSBzZWxmIEEgKnRlbXBvcmFyeSogaGVscGVyIHRvIGRldGVjdCBwbGFjZXMgd2hlcmUgYHRoaXNgIGlzXG4gKiBkaWZmZXJlbnQgZnJvbSB0aGUgYG93bmVyYCB3aGVuIFJlYWN0LmNyZWF0ZUVsZW1lbnQgaXMgY2FsbGVkLCBzbyB0aGF0IHdlXG4gKiBjYW4gd2Fybi4gV2Ugd2FudCB0byBnZXQgcmlkIG9mIG93bmVyIGFuZCByZXBsYWNlIHN0cmluZyBgcmVmYHMgd2l0aCBhcnJvd1xuICogZnVuY3Rpb25zLCBhbmQgYXMgbG9uZyBhcyBgdGhpc2AgYW5kIG93bmVyIGFyZSB0aGUgc2FtZSwgdGhlcmUgd2lsbCBiZSBub1xuICogY2hhbmdlIGluIGJlaGF2aW9yLlxuICogQHBhcmFtIHsqfSBzb3VyY2UgQW4gYW5ub3RhdGlvbiBvYmplY3QgKGFkZGVkIGJ5IGEgdHJhbnNwaWxlciBvciBvdGhlcndpc2UpXG4gKiBpbmRpY2F0aW5nIGZpbGVuYW1lLCBsaW5lIG51bWJlciwgYW5kL29yIG90aGVyIGluZm9ybWF0aW9uLlxuICogQHBhcmFtIHsqfSBvd25lclxuICogQHBhcmFtIHsqfSBwcm9wc1xuICogQGludGVybmFsXG4gKi9cbnZhciBSZWFjdEVsZW1lbnQgPSBmdW5jdGlvbiAodHlwZSwga2V5LCByZWYsIHNlbGYsIHNvdXJjZSwgb3duZXIsIHByb3BzKSB7XG4gIHZhciBlbGVtZW50ID0ge1xuICAgIC8vIFRoaXMgdGFnIGFsbG93IHVzIHRvIHVuaXF1ZWx5IGlkZW50aWZ5IHRoaXMgYXMgYSBSZWFjdCBFbGVtZW50XG4gICAgJCR0eXBlb2Y6IFJFQUNUX0VMRU1FTlRfVFlQRSxcblxuICAgIC8vIEJ1aWx0LWluIHByb3BlcnRpZXMgdGhhdCBiZWxvbmcgb24gdGhlIGVsZW1lbnRcbiAgICB0eXBlOiB0eXBlLFxuICAgIGtleToga2V5LFxuICAgIHJlZjogcmVmLFxuICAgIHByb3BzOiBwcm9wcyxcblxuICAgIC8vIFJlY29yZCB0aGUgY29tcG9uZW50IHJlc3BvbnNpYmxlIGZvciBjcmVhdGluZyB0aGlzIGVsZW1lbnQuXG4gICAgX293bmVyOiBvd25lclxuICB9O1xuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgLy8gVGhlIHZhbGlkYXRpb24gZmxhZyBpcyBjdXJyZW50bHkgbXV0YXRpdmUuIFdlIHB1dCBpdCBvblxuICAgIC8vIGFuIGV4dGVybmFsIGJhY2tpbmcgc3RvcmUgc28gdGhhdCB3ZSBjYW4gZnJlZXplIHRoZSB3aG9sZSBvYmplY3QuXG4gICAgLy8gVGhpcyBjYW4gYmUgcmVwbGFjZWQgd2l0aCBhIFdlYWtNYXAgb25jZSB0aGV5IGFyZSBpbXBsZW1lbnRlZCBpblxuICAgIC8vIGNvbW1vbmx5IHVzZWQgZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnRzLlxuICAgIGVsZW1lbnQuX3N0b3JlID0ge307XG5cbiAgICAvLyBUbyBtYWtlIGNvbXBhcmluZyBSZWFjdEVsZW1lbnRzIGVhc2llciBmb3IgdGVzdGluZyBwdXJwb3Nlcywgd2UgbWFrZVxuICAgIC8vIHRoZSB2YWxpZGF0aW9uIGZsYWcgbm9uLWVudW1lcmFibGUgKHdoZXJlIHBvc3NpYmxlLCB3aGljaCBzaG91bGRcbiAgICAvLyBpbmNsdWRlIGV2ZXJ5IGVudmlyb25tZW50IHdlIHJ1biB0ZXN0cyBpbiksIHNvIHRoZSB0ZXN0IGZyYW1ld29ya1xuICAgIC8vIGlnbm9yZXMgaXQuXG4gICAgaWYgKGNhbkRlZmluZVByb3BlcnR5KSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZWxlbWVudC5fc3RvcmUsICd2YWxpZGF0ZWQnLCB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgdmFsdWU6IGZhbHNlXG4gICAgICB9KTtcbiAgICAgIC8vIHNlbGYgYW5kIHNvdXJjZSBhcmUgREVWIG9ubHkgcHJvcGVydGllcy5cbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlbGVtZW50LCAnX3NlbGYnLCB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICAgIHZhbHVlOiBzZWxmXG4gICAgICB9KTtcbiAgICAgIC8vIFR3byBlbGVtZW50cyBjcmVhdGVkIGluIHR3byBkaWZmZXJlbnQgcGxhY2VzIHNob3VsZCBiZSBjb25zaWRlcmVkXG4gICAgICAvLyBlcXVhbCBmb3IgdGVzdGluZyBwdXJwb3NlcyBhbmQgdGhlcmVmb3JlIHdlIGhpZGUgaXQgZnJvbSBlbnVtZXJhdGlvbi5cbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlbGVtZW50LCAnX3NvdXJjZScsIHtcbiAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgICAgdmFsdWU6IHNvdXJjZVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVsZW1lbnQuX3N0b3JlLnZhbGlkYXRlZCA9IGZhbHNlO1xuICAgICAgZWxlbWVudC5fc2VsZiA9IHNlbGY7XG4gICAgICBlbGVtZW50Ll9zb3VyY2UgPSBzb3VyY2U7XG4gICAgfVxuICAgIGlmIChPYmplY3QuZnJlZXplKSB7XG4gICAgICBPYmplY3QuZnJlZXplKGVsZW1lbnQucHJvcHMpO1xuICAgICAgT2JqZWN0LmZyZWV6ZShlbGVtZW50KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZWxlbWVudDtcbn07XG5cbi8qKlxuICogQ3JlYXRlIGFuZCByZXR1cm4gYSBuZXcgUmVhY3RFbGVtZW50IG9mIHRoZSBnaXZlbiB0eXBlLlxuICogU2VlIGh0dHBzOi8vZmFjZWJvb2suZ2l0aHViLmlvL3JlYWN0L2RvY3MvdG9wLWxldmVsLWFwaS5odG1sI3JlYWN0LmNyZWF0ZWVsZW1lbnRcbiAqL1xuUmVhY3RFbGVtZW50LmNyZWF0ZUVsZW1lbnQgPSBmdW5jdGlvbiAodHlwZSwgY29uZmlnLCBjaGlsZHJlbikge1xuICB2YXIgcHJvcE5hbWU7XG5cbiAgLy8gUmVzZXJ2ZWQgbmFtZXMgYXJlIGV4dHJhY3RlZFxuICB2YXIgcHJvcHMgPSB7fTtcblxuICB2YXIga2V5ID0gbnVsbDtcbiAgdmFyIHJlZiA9IG51bGw7XG4gIHZhciBzZWxmID0gbnVsbDtcbiAgdmFyIHNvdXJjZSA9IG51bGw7XG5cbiAgaWYgKGNvbmZpZyAhPSBudWxsKSB7XG4gICAgaWYgKGhhc1ZhbGlkUmVmKGNvbmZpZykpIHtcbiAgICAgIHJlZiA9IGNvbmZpZy5yZWY7XG4gICAgfVxuICAgIGlmIChoYXNWYWxpZEtleShjb25maWcpKSB7XG4gICAgICBrZXkgPSAnJyArIGNvbmZpZy5rZXk7XG4gICAgfVxuXG4gICAgc2VsZiA9IGNvbmZpZy5fX3NlbGYgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBjb25maWcuX19zZWxmO1xuICAgIHNvdXJjZSA9IGNvbmZpZy5fX3NvdXJjZSA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IGNvbmZpZy5fX3NvdXJjZTtcbiAgICAvLyBSZW1haW5pbmcgcHJvcGVydGllcyBhcmUgYWRkZWQgdG8gYSBuZXcgcHJvcHMgb2JqZWN0XG4gICAgZm9yIChwcm9wTmFtZSBpbiBjb25maWcpIHtcbiAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbmZpZywgcHJvcE5hbWUpICYmICFSRVNFUlZFRF9QUk9QUy5oYXNPd25Qcm9wZXJ0eShwcm9wTmFtZSkpIHtcbiAgICAgICAgcHJvcHNbcHJvcE5hbWVdID0gY29uZmlnW3Byb3BOYW1lXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBDaGlsZHJlbiBjYW4gYmUgbW9yZSB0aGFuIG9uZSBhcmd1bWVudCwgYW5kIHRob3NlIGFyZSB0cmFuc2ZlcnJlZCBvbnRvXG4gIC8vIHRoZSBuZXdseSBhbGxvY2F0ZWQgcHJvcHMgb2JqZWN0LlxuICB2YXIgY2hpbGRyZW5MZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoIC0gMjtcbiAgaWYgKGNoaWxkcmVuTGVuZ3RoID09PSAxKSB7XG4gICAgcHJvcHMuY2hpbGRyZW4gPSBjaGlsZHJlbjtcbiAgfSBlbHNlIGlmIChjaGlsZHJlbkxlbmd0aCA+IDEpIHtcbiAgICB2YXIgY2hpbGRBcnJheSA9IEFycmF5KGNoaWxkcmVuTGVuZ3RoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuTGVuZ3RoOyBpKyspIHtcbiAgICAgIGNoaWxkQXJyYXlbaV0gPSBhcmd1bWVudHNbaSArIDJdO1xuICAgIH1cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKE9iamVjdC5mcmVlemUpIHtcbiAgICAgICAgT2JqZWN0LmZyZWV6ZShjaGlsZEFycmF5KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcHJvcHMuY2hpbGRyZW4gPSBjaGlsZEFycmF5O1xuICB9XG5cbiAgLy8gUmVzb2x2ZSBkZWZhdWx0IHByb3BzXG4gIGlmICh0eXBlICYmIHR5cGUuZGVmYXVsdFByb3BzKSB7XG4gICAgdmFyIGRlZmF1bHRQcm9wcyA9IHR5cGUuZGVmYXVsdFByb3BzO1xuICAgIGZvciAocHJvcE5hbWUgaW4gZGVmYXVsdFByb3BzKSB7XG4gICAgICBpZiAocHJvcHNbcHJvcE5hbWVdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcHJvcHNbcHJvcE5hbWVdID0gZGVmYXVsdFByb3BzW3Byb3BOYW1lXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBpZiAoa2V5IHx8IHJlZikge1xuICAgICAgaWYgKHR5cGVvZiBwcm9wcy4kJHR5cGVvZiA9PT0gJ3VuZGVmaW5lZCcgfHwgcHJvcHMuJCR0eXBlb2YgIT09IFJFQUNUX0VMRU1FTlRfVFlQRSkge1xuICAgICAgICB2YXIgZGlzcGxheU5hbWUgPSB0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJyA/IHR5cGUuZGlzcGxheU5hbWUgfHwgdHlwZS5uYW1lIHx8ICdVbmtub3duJyA6IHR5cGU7XG4gICAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgICBkZWZpbmVLZXlQcm9wV2FybmluZ0dldHRlcihwcm9wcywgZGlzcGxheU5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZWYpIHtcbiAgICAgICAgICBkZWZpbmVSZWZQcm9wV2FybmluZ0dldHRlcihwcm9wcywgZGlzcGxheU5hbWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBSZWFjdEVsZW1lbnQodHlwZSwga2V5LCByZWYsIHNlbGYsIHNvdXJjZSwgUmVhY3RDdXJyZW50T3duZXIuY3VycmVudCwgcHJvcHMpO1xufTtcblxuLyoqXG4gKiBSZXR1cm4gYSBmdW5jdGlvbiB0aGF0IHByb2R1Y2VzIFJlYWN0RWxlbWVudHMgb2YgYSBnaXZlbiB0eXBlLlxuICogU2VlIGh0dHBzOi8vZmFjZWJvb2suZ2l0aHViLmlvL3JlYWN0L2RvY3MvdG9wLWxldmVsLWFwaS5odG1sI3JlYWN0LmNyZWF0ZWZhY3RvcnlcbiAqL1xuUmVhY3RFbGVtZW50LmNyZWF0ZUZhY3RvcnkgPSBmdW5jdGlvbiAodHlwZSkge1xuICB2YXIgZmFjdG9yeSA9IFJlYWN0RWxlbWVudC5jcmVhdGVFbGVtZW50LmJpbmQobnVsbCwgdHlwZSk7XG4gIC8vIEV4cG9zZSB0aGUgdHlwZSBvbiB0aGUgZmFjdG9yeSBhbmQgdGhlIHByb3RvdHlwZSBzbyB0aGF0IGl0IGNhbiBiZVxuICAvLyBlYXNpbHkgYWNjZXNzZWQgb24gZWxlbWVudHMuIEUuZy4gYDxGb28gLz4udHlwZSA9PT0gRm9vYC5cbiAgLy8gVGhpcyBzaG91bGQgbm90IGJlIG5hbWVkIGBjb25zdHJ1Y3RvcmAgc2luY2UgdGhpcyBtYXkgbm90IGJlIHRoZSBmdW5jdGlvblxuICAvLyB0aGF0IGNyZWF0ZWQgdGhlIGVsZW1lbnQsIGFuZCBpdCBtYXkgbm90IGV2ZW4gYmUgYSBjb25zdHJ1Y3Rvci5cbiAgLy8gTGVnYWN5IGhvb2sgVE9ETzogV2FybiBpZiB0aGlzIGlzIGFjY2Vzc2VkXG4gIGZhY3RvcnkudHlwZSA9IHR5cGU7XG4gIHJldHVybiBmYWN0b3J5O1xufTtcblxuUmVhY3RFbGVtZW50LmNsb25lQW5kUmVwbGFjZUtleSA9IGZ1bmN0aW9uIChvbGRFbGVtZW50LCBuZXdLZXkpIHtcbiAgdmFyIG5ld0VsZW1lbnQgPSBSZWFjdEVsZW1lbnQob2xkRWxlbWVudC50eXBlLCBuZXdLZXksIG9sZEVsZW1lbnQucmVmLCBvbGRFbGVtZW50Ll9zZWxmLCBvbGRFbGVtZW50Ll9zb3VyY2UsIG9sZEVsZW1lbnQuX293bmVyLCBvbGRFbGVtZW50LnByb3BzKTtcblxuICByZXR1cm4gbmV3RWxlbWVudDtcbn07XG5cbi8qKlxuICogQ2xvbmUgYW5kIHJldHVybiBhIG5ldyBSZWFjdEVsZW1lbnQgdXNpbmcgZWxlbWVudCBhcyB0aGUgc3RhcnRpbmcgcG9pbnQuXG4gKiBTZWUgaHR0cHM6Ly9mYWNlYm9vay5naXRodWIuaW8vcmVhY3QvZG9jcy90b3AtbGV2ZWwtYXBpLmh0bWwjcmVhY3QuY2xvbmVlbGVtZW50XG4gKi9cblJlYWN0RWxlbWVudC5jbG9uZUVsZW1lbnQgPSBmdW5jdGlvbiAoZWxlbWVudCwgY29uZmlnLCBjaGlsZHJlbikge1xuICB2YXIgcHJvcE5hbWU7XG5cbiAgLy8gT3JpZ2luYWwgcHJvcHMgYXJlIGNvcGllZFxuICB2YXIgcHJvcHMgPSBfYXNzaWduKHt9LCBlbGVtZW50LnByb3BzKTtcblxuICAvLyBSZXNlcnZlZCBuYW1lcyBhcmUgZXh0cmFjdGVkXG4gIHZhciBrZXkgPSBlbGVtZW50LmtleTtcbiAgdmFyIHJlZiA9IGVsZW1lbnQucmVmO1xuICAvLyBTZWxmIGlzIHByZXNlcnZlZCBzaW5jZSB0aGUgb3duZXIgaXMgcHJlc2VydmVkLlxuICB2YXIgc2VsZiA9IGVsZW1lbnQuX3NlbGY7XG4gIC8vIFNvdXJjZSBpcyBwcmVzZXJ2ZWQgc2luY2UgY2xvbmVFbGVtZW50IGlzIHVubGlrZWx5IHRvIGJlIHRhcmdldGVkIGJ5IGFcbiAgLy8gdHJhbnNwaWxlciwgYW5kIHRoZSBvcmlnaW5hbCBzb3VyY2UgaXMgcHJvYmFibHkgYSBiZXR0ZXIgaW5kaWNhdG9yIG9mIHRoZVxuICAvLyB0cnVlIG93bmVyLlxuICB2YXIgc291cmNlID0gZWxlbWVudC5fc291cmNlO1xuXG4gIC8vIE93bmVyIHdpbGwgYmUgcHJlc2VydmVkLCB1bmxlc3MgcmVmIGlzIG92ZXJyaWRkZW5cbiAgdmFyIG93bmVyID0gZWxlbWVudC5fb3duZXI7XG5cbiAgaWYgKGNvbmZpZyAhPSBudWxsKSB7XG4gICAgaWYgKGhhc1ZhbGlkUmVmKGNvbmZpZykpIHtcbiAgICAgIC8vIFNpbGVudGx5IHN0ZWFsIHRoZSByZWYgZnJvbSB0aGUgcGFyZW50LlxuICAgICAgcmVmID0gY29uZmlnLnJlZjtcbiAgICAgIG93bmVyID0gUmVhY3RDdXJyZW50T3duZXIuY3VycmVudDtcbiAgICB9XG4gICAgaWYgKGhhc1ZhbGlkS2V5KGNvbmZpZykpIHtcbiAgICAgIGtleSA9ICcnICsgY29uZmlnLmtleTtcbiAgICB9XG5cbiAgICAvLyBSZW1haW5pbmcgcHJvcGVydGllcyBvdmVycmlkZSBleGlzdGluZyBwcm9wc1xuICAgIHZhciBkZWZhdWx0UHJvcHM7XG4gICAgaWYgKGVsZW1lbnQudHlwZSAmJiBlbGVtZW50LnR5cGUuZGVmYXVsdFByb3BzKSB7XG4gICAgICBkZWZhdWx0UHJvcHMgPSBlbGVtZW50LnR5cGUuZGVmYXVsdFByb3BzO1xuICAgIH1cbiAgICBmb3IgKHByb3BOYW1lIGluIGNvbmZpZykge1xuICAgICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoY29uZmlnLCBwcm9wTmFtZSkgJiYgIVJFU0VSVkVEX1BST1BTLmhhc093blByb3BlcnR5KHByb3BOYW1lKSkge1xuICAgICAgICBpZiAoY29uZmlnW3Byb3BOYW1lXSA9PT0gdW5kZWZpbmVkICYmIGRlZmF1bHRQcm9wcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgLy8gUmVzb2x2ZSBkZWZhdWx0IHByb3BzXG4gICAgICAgICAgcHJvcHNbcHJvcE5hbWVdID0gZGVmYXVsdFByb3BzW3Byb3BOYW1lXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwcm9wc1twcm9wTmFtZV0gPSBjb25maWdbcHJvcE5hbWVdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gQ2hpbGRyZW4gY2FuIGJlIG1vcmUgdGhhbiBvbmUgYXJndW1lbnQsIGFuZCB0aG9zZSBhcmUgdHJhbnNmZXJyZWQgb250b1xuICAvLyB0aGUgbmV3bHkgYWxsb2NhdGVkIHByb3BzIG9iamVjdC5cbiAgdmFyIGNoaWxkcmVuTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aCAtIDI7XG4gIGlmIChjaGlsZHJlbkxlbmd0aCA9PT0gMSkge1xuICAgIHByb3BzLmNoaWxkcmVuID0gY2hpbGRyZW47XG4gIH0gZWxzZSBpZiAoY2hpbGRyZW5MZW5ndGggPiAxKSB7XG4gICAgdmFyIGNoaWxkQXJyYXkgPSBBcnJheShjaGlsZHJlbkxlbmd0aCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbkxlbmd0aDsgaSsrKSB7XG4gICAgICBjaGlsZEFycmF5W2ldID0gYXJndW1lbnRzW2kgKyAyXTtcbiAgICB9XG4gICAgcHJvcHMuY2hpbGRyZW4gPSBjaGlsZEFycmF5O1xuICB9XG5cbiAgcmV0dXJuIFJlYWN0RWxlbWVudChlbGVtZW50LnR5cGUsIGtleSwgcmVmLCBzZWxmLCBzb3VyY2UsIG93bmVyLCBwcm9wcyk7XG59O1xuXG4vKipcbiAqIFZlcmlmaWVzIHRoZSBvYmplY3QgaXMgYSBSZWFjdEVsZW1lbnQuXG4gKiBTZWUgaHR0cHM6Ly9mYWNlYm9vay5naXRodWIuaW8vcmVhY3QvZG9jcy90b3AtbGV2ZWwtYXBpLmh0bWwjcmVhY3QuaXN2YWxpZGVsZW1lbnRcbiAqIEBwYXJhbSB7P29iamVjdH0gb2JqZWN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIGBvYmplY3RgIGlzIGEgdmFsaWQgY29tcG9uZW50LlxuICogQGZpbmFsXG4gKi9cblJlYWN0RWxlbWVudC5pc1ZhbGlkRWxlbWVudCA9IGZ1bmN0aW9uIChvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnICYmIG9iamVjdCAhPT0gbnVsbCAmJiBvYmplY3QuJCR0eXBlb2YgPT09IFJFQUNUX0VMRU1FTlRfVFlQRTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RFbGVtZW50O1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QvbGliL1JlYWN0RWxlbWVudC5qcyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTQtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBTaW1pbGFyIHRvIGludmFyaWFudCBidXQgb25seSBsb2dzIGEgd2FybmluZyBpZiB0aGUgY29uZGl0aW9uIGlzIG5vdCBtZXQuXG4gKiBUaGlzIGNhbiBiZSB1c2VkIHRvIGxvZyBpc3N1ZXMgaW4gZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnRzIGluIGNyaXRpY2FsXG4gKiBwYXRocy4gUmVtb3ZpbmcgdGhlIGxvZ2dpbmcgY29kZSBmb3IgcHJvZHVjdGlvbiBlbnZpcm9ubWVudHMgd2lsbCBrZWVwIHRoZVxuICogc2FtZSBsb2dpYyBhbmQgZm9sbG93IHRoZSBzYW1lIGNvZGUgcGF0aHMuXG4gKi9cblxudmFyIHdhcm5pbmcgPSBmdW5jdGlvbigpIHt9O1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICB3YXJuaW5nID0gZnVuY3Rpb24oY29uZGl0aW9uLCBmb3JtYXQsIGFyZ3MpIHtcbiAgICB2YXIgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICBhcmdzID0gbmV3IEFycmF5KGxlbiA+IDIgPyBsZW4gLSAyIDogMCk7XG4gICAgZm9yICh2YXIga2V5ID0gMjsga2V5IDwgbGVuOyBrZXkrKykge1xuICAgICAgYXJnc1trZXkgLSAyXSA9IGFyZ3VtZW50c1trZXldO1xuICAgIH1cbiAgICBpZiAoZm9ybWF0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ2B3YXJuaW5nKGNvbmRpdGlvbiwgZm9ybWF0LCAuLi5hcmdzKWAgcmVxdWlyZXMgYSB3YXJuaW5nICcgK1xuICAgICAgICAnbWVzc2FnZSBhcmd1bWVudCdcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKGZvcm1hdC5sZW5ndGggPCAxMCB8fCAoL15bc1xcV10qJC8pLnRlc3QoZm9ybWF0KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnVGhlIHdhcm5pbmcgZm9ybWF0IHNob3VsZCBiZSBhYmxlIHRvIHVuaXF1ZWx5IGlkZW50aWZ5IHRoaXMgJyArXG4gICAgICAgICd3YXJuaW5nLiBQbGVhc2UsIHVzZSBhIG1vcmUgZGVzY3JpcHRpdmUgZm9ybWF0IHRoYW46ICcgKyBmb3JtYXRcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKCFjb25kaXRpb24pIHtcbiAgICAgIHZhciBhcmdJbmRleCA9IDA7XG4gICAgICB2YXIgbWVzc2FnZSA9ICdXYXJuaW5nOiAnICtcbiAgICAgICAgZm9ybWF0LnJlcGxhY2UoLyVzL2csIGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHJldHVybiBhcmdzW2FyZ0luZGV4KytdO1xuICAgICAgICB9KTtcbiAgICAgIGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihtZXNzYWdlKTtcbiAgICAgIH1cbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIFRoaXMgZXJyb3Igd2FzIHRocm93biBhcyBhIGNvbnZlbmllbmNlIHNvIHRoYXQgeW91IGNhbiB1c2UgdGhpcyBzdGFja1xuICAgICAgICAvLyB0byBmaW5kIHRoZSBjYWxsc2l0ZSB0aGF0IGNhdXNlZCB0aGlzIHdhcm5pbmcgdG8gZmlyZS5cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xuICAgICAgfSBjYXRjaCh4KSB7fVxuICAgIH1cbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB3YXJuaW5nO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi93YXJuaW5nL2Jyb3dzZXIuanMiLCIvKipcbiAqIENvcHlyaWdodCAyMDE1LXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgRE9NTmFtZXNwYWNlcyA9IHJlcXVpcmUoJy4vRE9NTmFtZXNwYWNlcycpO1xudmFyIHNldElubmVySFRNTCA9IHJlcXVpcmUoJy4vc2V0SW5uZXJIVE1MJyk7XG5cbnZhciBjcmVhdGVNaWNyb3NvZnRVbnNhZmVMb2NhbEZ1bmN0aW9uID0gcmVxdWlyZSgnLi9jcmVhdGVNaWNyb3NvZnRVbnNhZmVMb2NhbEZ1bmN0aW9uJyk7XG52YXIgc2V0VGV4dENvbnRlbnQgPSByZXF1aXJlKCcuL3NldFRleHRDb250ZW50Jyk7XG5cbnZhciBFTEVNRU5UX05PREVfVFlQRSA9IDE7XG52YXIgRE9DVU1FTlRfRlJBR01FTlRfTk9ERV9UWVBFID0gMTE7XG5cbi8qKlxuICogSW4gSUUgKDgtMTEpIGFuZCBFZGdlLCBhcHBlbmRpbmcgbm9kZXMgd2l0aCBubyBjaGlsZHJlbiBpcyBkcmFtYXRpY2FsbHlcbiAqIGZhc3RlciB0aGFuIGFwcGVuZGluZyBhIGZ1bGwgc3VidHJlZSwgc28gd2UgZXNzZW50aWFsbHkgcXVldWUgdXAgdGhlXG4gKiAuYXBwZW5kQ2hpbGQgY2FsbHMgaGVyZSBhbmQgYXBwbHkgdGhlbSBzbyBlYWNoIG5vZGUgaXMgYWRkZWQgdG8gaXRzIHBhcmVudFxuICogYmVmb3JlIGFueSBjaGlsZHJlbiBhcmUgYWRkZWQuXG4gKlxuICogSW4gb3RoZXIgYnJvd3NlcnMsIGRvaW5nIHNvIGlzIHNsb3dlciBvciBuZXV0cmFsIGNvbXBhcmVkIHRvIHRoZSBvdGhlciBvcmRlclxuICogKGluIEZpcmVmb3gsIHR3aWNlIGFzIHNsb3cpIHNvIHdlIG9ubHkgZG8gdGhpcyBpbnZlcnNpb24gaW4gSUUuXG4gKlxuICogU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zcGljeWovaW5uZXJodG1sLXZzLWNyZWF0ZWVsZW1lbnQtdnMtY2xvbmVub2RlLlxuICovXG52YXIgZW5hYmxlTGF6eSA9IHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGRvY3VtZW50LmRvY3VtZW50TW9kZSA9PT0gJ251bWJlcicgfHwgdHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIG5hdmlnYXRvci51c2VyQWdlbnQgPT09ICdzdHJpbmcnICYmIC9cXGJFZGdlXFwvXFxkLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xuXG5mdW5jdGlvbiBpbnNlcnRUcmVlQ2hpbGRyZW4odHJlZSkge1xuICBpZiAoIWVuYWJsZUxhenkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIG5vZGUgPSB0cmVlLm5vZGU7XG4gIHZhciBjaGlsZHJlbiA9IHRyZWUuY2hpbGRyZW47XG4gIGlmIChjaGlsZHJlbi5sZW5ndGgpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpbnNlcnRUcmVlQmVmb3JlKG5vZGUsIGNoaWxkcmVuW2ldLCBudWxsKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAodHJlZS5odG1sICE9IG51bGwpIHtcbiAgICBzZXRJbm5lckhUTUwobm9kZSwgdHJlZS5odG1sKTtcbiAgfSBlbHNlIGlmICh0cmVlLnRleHQgIT0gbnVsbCkge1xuICAgIHNldFRleHRDb250ZW50KG5vZGUsIHRyZWUudGV4dCk7XG4gIH1cbn1cblxudmFyIGluc2VydFRyZWVCZWZvcmUgPSBjcmVhdGVNaWNyb3NvZnRVbnNhZmVMb2NhbEZ1bmN0aW9uKGZ1bmN0aW9uIChwYXJlbnROb2RlLCB0cmVlLCByZWZlcmVuY2VOb2RlKSB7XG4gIC8vIERvY3VtZW50RnJhZ21lbnRzIGFyZW4ndCBhY3R1YWxseSBwYXJ0IG9mIHRoZSBET00gYWZ0ZXIgaW5zZXJ0aW9uIHNvXG4gIC8vIGFwcGVuZGluZyBjaGlsZHJlbiB3b24ndCB1cGRhdGUgdGhlIERPTS4gV2UgbmVlZCB0byBlbnN1cmUgdGhlIGZyYWdtZW50XG4gIC8vIGlzIHByb3Blcmx5IHBvcHVsYXRlZCBmaXJzdCwgYnJlYWtpbmcgb3V0IG9mIG91ciBsYXp5IGFwcHJvYWNoIGZvciBqdXN0XG4gIC8vIHRoaXMgbGV2ZWwuIEFsc28sIHNvbWUgPG9iamVjdD4gcGx1Z2lucyAobGlrZSBGbGFzaCBQbGF5ZXIpIHdpbGwgcmVhZFxuICAvLyA8cGFyYW0+IG5vZGVzIGltbWVkaWF0ZWx5IHVwb24gaW5zZXJ0aW9uIGludG8gdGhlIERPTSwgc28gPG9iamVjdD5cbiAgLy8gbXVzdCBhbHNvIGJlIHBvcHVsYXRlZCBwcmlvciB0byBpbnNlcnRpb24gaW50byB0aGUgRE9NLlxuICBpZiAodHJlZS5ub2RlLm5vZGVUeXBlID09PSBET0NVTUVOVF9GUkFHTUVOVF9OT0RFX1RZUEUgfHwgdHJlZS5ub2RlLm5vZGVUeXBlID09PSBFTEVNRU5UX05PREVfVFlQRSAmJiB0cmVlLm5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ29iamVjdCcgJiYgKHRyZWUubm9kZS5uYW1lc3BhY2VVUkkgPT0gbnVsbCB8fCB0cmVlLm5vZGUubmFtZXNwYWNlVVJJID09PSBET01OYW1lc3BhY2VzLmh0bWwpKSB7XG4gICAgaW5zZXJ0VHJlZUNoaWxkcmVuKHRyZWUpO1xuICAgIHBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRyZWUubm9kZSwgcmVmZXJlbmNlTm9kZSk7XG4gIH0gZWxzZSB7XG4gICAgcGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodHJlZS5ub2RlLCByZWZlcmVuY2VOb2RlKTtcbiAgICBpbnNlcnRUcmVlQ2hpbGRyZW4odHJlZSk7XG4gIH1cbn0pO1xuXG5mdW5jdGlvbiByZXBsYWNlQ2hpbGRXaXRoVHJlZShvbGROb2RlLCBuZXdUcmVlKSB7XG4gIG9sZE5vZGUucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQobmV3VHJlZS5ub2RlLCBvbGROb2RlKTtcbiAgaW5zZXJ0VHJlZUNoaWxkcmVuKG5ld1RyZWUpO1xufVxuXG5mdW5jdGlvbiBxdWV1ZUNoaWxkKHBhcmVudFRyZWUsIGNoaWxkVHJlZSkge1xuICBpZiAoZW5hYmxlTGF6eSkge1xuICAgIHBhcmVudFRyZWUuY2hpbGRyZW4ucHVzaChjaGlsZFRyZWUpO1xuICB9IGVsc2Uge1xuICAgIHBhcmVudFRyZWUubm9kZS5hcHBlbmRDaGlsZChjaGlsZFRyZWUubm9kZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcXVldWVIVE1MKHRyZWUsIGh0bWwpIHtcbiAgaWYgKGVuYWJsZUxhenkpIHtcbiAgICB0cmVlLmh0bWwgPSBodG1sO1xuICB9IGVsc2Uge1xuICAgIHNldElubmVySFRNTCh0cmVlLm5vZGUsIGh0bWwpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHF1ZXVlVGV4dCh0cmVlLCB0ZXh0KSB7XG4gIGlmIChlbmFibGVMYXp5KSB7XG4gICAgdHJlZS50ZXh0ID0gdGV4dDtcbiAgfSBlbHNlIHtcbiAgICBzZXRUZXh0Q29udGVudCh0cmVlLm5vZGUsIHRleHQpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICByZXR1cm4gdGhpcy5ub2RlLm5vZGVOYW1lO1xufVxuXG5mdW5jdGlvbiBET01MYXp5VHJlZShub2RlKSB7XG4gIHJldHVybiB7XG4gICAgbm9kZTogbm9kZSxcbiAgICBjaGlsZHJlbjogW10sXG4gICAgaHRtbDogbnVsbCxcbiAgICB0ZXh0OiBudWxsLFxuICAgIHRvU3RyaW5nOiB0b1N0cmluZ1xuICB9O1xufVxuXG5ET01MYXp5VHJlZS5pbnNlcnRUcmVlQmVmb3JlID0gaW5zZXJ0VHJlZUJlZm9yZTtcbkRPTUxhenlUcmVlLnJlcGxhY2VDaGlsZFdpdGhUcmVlID0gcmVwbGFjZUNoaWxkV2l0aFRyZWU7XG5ET01MYXp5VHJlZS5xdWV1ZUNoaWxkID0gcXVldWVDaGlsZDtcbkRPTUxhenlUcmVlLnF1ZXVlSFRNTCA9IHF1ZXVlSFRNTDtcbkRPTUxhenlUcmVlLnF1ZXVlVGV4dCA9IHF1ZXVlVGV4dDtcblxubW9kdWxlLmV4cG9ydHMgPSBET01MYXp5VHJlZTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3JlYWN0LWRvbS9saWIvRE9NTGF6eVRyZWUuanMiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUmVhY3RSZWYgPSByZXF1aXJlKCcuL1JlYWN0UmVmJyk7XG52YXIgUmVhY3RJbnN0cnVtZW50YXRpb24gPSByZXF1aXJlKCcuL1JlYWN0SW5zdHJ1bWVudGF0aW9uJyk7XG5cbnZhciB3YXJuaW5nID0gcmVxdWlyZSgnZmJqcy9saWIvd2FybmluZycpO1xuXG4vKipcbiAqIEhlbHBlciB0byBjYWxsIFJlYWN0UmVmLmF0dGFjaFJlZnMgd2l0aCB0aGlzIGNvbXBvc2l0ZSBjb21wb25lbnQsIHNwbGl0IG91dFxuICogdG8gYXZvaWQgYWxsb2NhdGlvbnMgaW4gdGhlIHRyYW5zYWN0aW9uIG1vdW50LXJlYWR5IHF1ZXVlLlxuICovXG5mdW5jdGlvbiBhdHRhY2hSZWZzKCkge1xuICBSZWFjdFJlZi5hdHRhY2hSZWZzKHRoaXMsIHRoaXMuX2N1cnJlbnRFbGVtZW50KTtcbn1cblxudmFyIFJlYWN0UmVjb25jaWxlciA9IHtcbiAgLyoqXG4gICAqIEluaXRpYWxpemVzIHRoZSBjb21wb25lbnQsIHJlbmRlcnMgbWFya3VwLCBhbmQgcmVnaXN0ZXJzIGV2ZW50IGxpc3RlbmVycy5cbiAgICpcbiAgICogQHBhcmFtIHtSZWFjdENvbXBvbmVudH0gaW50ZXJuYWxJbnN0YW5jZVxuICAgKiBAcGFyYW0ge1JlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb258UmVhY3RTZXJ2ZXJSZW5kZXJpbmdUcmFuc2FjdGlvbn0gdHJhbnNhY3Rpb25cbiAgICogQHBhcmFtIHs/b2JqZWN0fSB0aGUgY29udGFpbmluZyBob3N0IGNvbXBvbmVudCBpbnN0YW5jZVxuICAgKiBAcGFyYW0gez9vYmplY3R9IGluZm8gYWJvdXQgdGhlIGhvc3QgY29udGFpbmVyXG4gICAqIEByZXR1cm4gez9zdHJpbmd9IFJlbmRlcmVkIG1hcmt1cCB0byBiZSBpbnNlcnRlZCBpbnRvIHRoZSBET00uXG4gICAqIEBmaW5hbFxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIG1vdW50Q29tcG9uZW50OiBmdW5jdGlvbiAoaW50ZXJuYWxJbnN0YW5jZSwgdHJhbnNhY3Rpb24sIGhvc3RQYXJlbnQsIGhvc3RDb250YWluZXJJbmZvLCBjb250ZXh0LCBwYXJlbnREZWJ1Z0lEKSAvLyAwIGluIHByb2R1Y3Rpb24gYW5kIGZvciByb290c1xuICB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmIChpbnRlcm5hbEluc3RhbmNlLl9kZWJ1Z0lEICE9PSAwKSB7XG4gICAgICAgIFJlYWN0SW5zdHJ1bWVudGF0aW9uLmRlYnVnVG9vbC5vbkJlZm9yZU1vdW50Q29tcG9uZW50KGludGVybmFsSW5zdGFuY2UuX2RlYnVnSUQsIGludGVybmFsSW5zdGFuY2UuX2N1cnJlbnRFbGVtZW50LCBwYXJlbnREZWJ1Z0lEKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdmFyIG1hcmt1cCA9IGludGVybmFsSW5zdGFuY2UubW91bnRDb21wb25lbnQodHJhbnNhY3Rpb24sIGhvc3RQYXJlbnQsIGhvc3RDb250YWluZXJJbmZvLCBjb250ZXh0LCBwYXJlbnREZWJ1Z0lEKTtcbiAgICBpZiAoaW50ZXJuYWxJbnN0YW5jZS5fY3VycmVudEVsZW1lbnQgJiYgaW50ZXJuYWxJbnN0YW5jZS5fY3VycmVudEVsZW1lbnQucmVmICE9IG51bGwpIHtcbiAgICAgIHRyYW5zYWN0aW9uLmdldFJlYWN0TW91bnRSZWFkeSgpLmVucXVldWUoYXR0YWNoUmVmcywgaW50ZXJuYWxJbnN0YW5jZSk7XG4gICAgfVxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBpZiAoaW50ZXJuYWxJbnN0YW5jZS5fZGVidWdJRCAhPT0gMCkge1xuICAgICAgICBSZWFjdEluc3RydW1lbnRhdGlvbi5kZWJ1Z1Rvb2wub25Nb3VudENvbXBvbmVudChpbnRlcm5hbEluc3RhbmNlLl9kZWJ1Z0lEKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1hcmt1cDtcbiAgfSxcblxuICAvKipcbiAgICogUmV0dXJucyBhIHZhbHVlIHRoYXQgY2FuIGJlIHBhc3NlZCB0b1xuICAgKiBSZWFjdENvbXBvbmVudEVudmlyb25tZW50LnJlcGxhY2VOb2RlV2l0aE1hcmt1cC5cbiAgICovXG4gIGdldEhvc3ROb2RlOiBmdW5jdGlvbiAoaW50ZXJuYWxJbnN0YW5jZSkge1xuICAgIHJldHVybiBpbnRlcm5hbEluc3RhbmNlLmdldEhvc3ROb2RlKCk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFJlbGVhc2VzIGFueSByZXNvdXJjZXMgYWxsb2NhdGVkIGJ5IGBtb3VudENvbXBvbmVudGAuXG4gICAqXG4gICAqIEBmaW5hbFxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHVubW91bnRDb21wb25lbnQ6IGZ1bmN0aW9uIChpbnRlcm5hbEluc3RhbmNlLCBzYWZlbHkpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKGludGVybmFsSW5zdGFuY2UuX2RlYnVnSUQgIT09IDApIHtcbiAgICAgICAgUmVhY3RJbnN0cnVtZW50YXRpb24uZGVidWdUb29sLm9uQmVmb3JlVW5tb3VudENvbXBvbmVudChpbnRlcm5hbEluc3RhbmNlLl9kZWJ1Z0lEKTtcbiAgICAgIH1cbiAgICB9XG4gICAgUmVhY3RSZWYuZGV0YWNoUmVmcyhpbnRlcm5hbEluc3RhbmNlLCBpbnRlcm5hbEluc3RhbmNlLl9jdXJyZW50RWxlbWVudCk7XG4gICAgaW50ZXJuYWxJbnN0YW5jZS51bm1vdW50Q29tcG9uZW50KHNhZmVseSk7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmIChpbnRlcm5hbEluc3RhbmNlLl9kZWJ1Z0lEICE9PSAwKSB7XG4gICAgICAgIFJlYWN0SW5zdHJ1bWVudGF0aW9uLmRlYnVnVG9vbC5vblVubW91bnRDb21wb25lbnQoaW50ZXJuYWxJbnN0YW5jZS5fZGVidWdJRCk7XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIC8qKlxuICAgKiBVcGRhdGUgYSBjb21wb25lbnQgdXNpbmcgYSBuZXcgZWxlbWVudC5cbiAgICpcbiAgICogQHBhcmFtIHtSZWFjdENvbXBvbmVudH0gaW50ZXJuYWxJbnN0YW5jZVxuICAgKiBAcGFyYW0ge1JlYWN0RWxlbWVudH0gbmV4dEVsZW1lbnRcbiAgICogQHBhcmFtIHtSZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9ufSB0cmFuc2FjdGlvblxuICAgKiBAcGFyYW0ge29iamVjdH0gY29udGV4dFxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHJlY2VpdmVDb21wb25lbnQ6IGZ1bmN0aW9uIChpbnRlcm5hbEluc3RhbmNlLCBuZXh0RWxlbWVudCwgdHJhbnNhY3Rpb24sIGNvbnRleHQpIHtcbiAgICB2YXIgcHJldkVsZW1lbnQgPSBpbnRlcm5hbEluc3RhbmNlLl9jdXJyZW50RWxlbWVudDtcblxuICAgIGlmIChuZXh0RWxlbWVudCA9PT0gcHJldkVsZW1lbnQgJiYgY29udGV4dCA9PT0gaW50ZXJuYWxJbnN0YW5jZS5fY29udGV4dCkge1xuICAgICAgLy8gU2luY2UgZWxlbWVudHMgYXJlIGltbXV0YWJsZSBhZnRlciB0aGUgb3duZXIgaXMgcmVuZGVyZWQsXG4gICAgICAvLyB3ZSBjYW4gZG8gYSBjaGVhcCBpZGVudGl0eSBjb21wYXJlIGhlcmUgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgaXMgYVxuICAgICAgLy8gc3VwZXJmbHVvdXMgcmVjb25jaWxlLiBJdCdzIHBvc3NpYmxlIGZvciBzdGF0ZSB0byBiZSBtdXRhYmxlIGJ1dCBzdWNoXG4gICAgICAvLyBjaGFuZ2Ugc2hvdWxkIHRyaWdnZXIgYW4gdXBkYXRlIG9mIHRoZSBvd25lciB3aGljaCB3b3VsZCByZWNyZWF0ZVxuICAgICAgLy8gdGhlIGVsZW1lbnQuIFdlIGV4cGxpY2l0bHkgY2hlY2sgZm9yIHRoZSBleGlzdGVuY2Ugb2YgYW4gb3duZXIgc2luY2VcbiAgICAgIC8vIGl0J3MgcG9zc2libGUgZm9yIGFuIGVsZW1lbnQgY3JlYXRlZCBvdXRzaWRlIGEgY29tcG9zaXRlIHRvIGJlXG4gICAgICAvLyBkZWVwbHkgbXV0YXRlZCBhbmQgcmV1c2VkLlxuXG4gICAgICAvLyBUT0RPOiBCYWlsaW5nIG91dCBlYXJseSBpcyBqdXN0IGEgcGVyZiBvcHRpbWl6YXRpb24gcmlnaHQ/XG4gICAgICAvLyBUT0RPOiBSZW1vdmluZyB0aGUgcmV0dXJuIHN0YXRlbWVudCBzaG91bGQgYWZmZWN0IGNvcnJlY3RuZXNzP1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBpZiAoaW50ZXJuYWxJbnN0YW5jZS5fZGVidWdJRCAhPT0gMCkge1xuICAgICAgICBSZWFjdEluc3RydW1lbnRhdGlvbi5kZWJ1Z1Rvb2wub25CZWZvcmVVcGRhdGVDb21wb25lbnQoaW50ZXJuYWxJbnN0YW5jZS5fZGVidWdJRCwgbmV4dEVsZW1lbnQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciByZWZzQ2hhbmdlZCA9IFJlYWN0UmVmLnNob3VsZFVwZGF0ZVJlZnMocHJldkVsZW1lbnQsIG5leHRFbGVtZW50KTtcblxuICAgIGlmIChyZWZzQ2hhbmdlZCkge1xuICAgICAgUmVhY3RSZWYuZGV0YWNoUmVmcyhpbnRlcm5hbEluc3RhbmNlLCBwcmV2RWxlbWVudCk7XG4gICAgfVxuXG4gICAgaW50ZXJuYWxJbnN0YW5jZS5yZWNlaXZlQ29tcG9uZW50KG5leHRFbGVtZW50LCB0cmFuc2FjdGlvbiwgY29udGV4dCk7XG5cbiAgICBpZiAocmVmc0NoYW5nZWQgJiYgaW50ZXJuYWxJbnN0YW5jZS5fY3VycmVudEVsZW1lbnQgJiYgaW50ZXJuYWxJbnN0YW5jZS5fY3VycmVudEVsZW1lbnQucmVmICE9IG51bGwpIHtcbiAgICAgIHRyYW5zYWN0aW9uLmdldFJlYWN0TW91bnRSZWFkeSgpLmVucXVldWUoYXR0YWNoUmVmcywgaW50ZXJuYWxJbnN0YW5jZSk7XG4gICAgfVxuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmIChpbnRlcm5hbEluc3RhbmNlLl9kZWJ1Z0lEICE9PSAwKSB7XG4gICAgICAgIFJlYWN0SW5zdHJ1bWVudGF0aW9uLmRlYnVnVG9vbC5vblVwZGF0ZUNvbXBvbmVudChpbnRlcm5hbEluc3RhbmNlLl9kZWJ1Z0lEKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgLyoqXG4gICAqIEZsdXNoIGFueSBkaXJ0eSBjaGFuZ2VzIGluIGEgY29tcG9uZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0Q29tcG9uZW50fSBpbnRlcm5hbEluc3RhbmNlXG4gICAqIEBwYXJhbSB7UmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvbn0gdHJhbnNhY3Rpb25cbiAgICogQGludGVybmFsXG4gICAqL1xuICBwZXJmb3JtVXBkYXRlSWZOZWNlc3Nhcnk6IGZ1bmN0aW9uIChpbnRlcm5hbEluc3RhbmNlLCB0cmFuc2FjdGlvbiwgdXBkYXRlQmF0Y2hOdW1iZXIpIHtcbiAgICBpZiAoaW50ZXJuYWxJbnN0YW5jZS5fdXBkYXRlQmF0Y2hOdW1iZXIgIT09IHVwZGF0ZUJhdGNoTnVtYmVyKSB7XG4gICAgICAvLyBUaGUgY29tcG9uZW50J3MgZW5xdWV1ZWQgYmF0Y2ggbnVtYmVyIHNob3VsZCBhbHdheXMgYmUgdGhlIGN1cnJlbnRcbiAgICAgIC8vIGJhdGNoIG9yIHRoZSBmb2xsb3dpbmcgb25lLlxuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcoaW50ZXJuYWxJbnN0YW5jZS5fdXBkYXRlQmF0Y2hOdW1iZXIgPT0gbnVsbCB8fCBpbnRlcm5hbEluc3RhbmNlLl91cGRhdGVCYXRjaE51bWJlciA9PT0gdXBkYXRlQmF0Y2hOdW1iZXIgKyAxLCAncGVyZm9ybVVwZGF0ZUlmTmVjZXNzYXJ5OiBVbmV4cGVjdGVkIGJhdGNoIG51bWJlciAoY3VycmVudCAlcywgJyArICdwZW5kaW5nICVzKScsIHVwZGF0ZUJhdGNoTnVtYmVyLCBpbnRlcm5hbEluc3RhbmNlLl91cGRhdGVCYXRjaE51bWJlcikgOiB2b2lkIDA7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBpZiAoaW50ZXJuYWxJbnN0YW5jZS5fZGVidWdJRCAhPT0gMCkge1xuICAgICAgICBSZWFjdEluc3RydW1lbnRhdGlvbi5kZWJ1Z1Rvb2wub25CZWZvcmVVcGRhdGVDb21wb25lbnQoaW50ZXJuYWxJbnN0YW5jZS5fZGVidWdJRCwgaW50ZXJuYWxJbnN0YW5jZS5fY3VycmVudEVsZW1lbnQpO1xuICAgICAgfVxuICAgIH1cbiAgICBpbnRlcm5hbEluc3RhbmNlLnBlcmZvcm1VcGRhdGVJZk5lY2Vzc2FyeSh0cmFuc2FjdGlvbik7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmIChpbnRlcm5hbEluc3RhbmNlLl9kZWJ1Z0lEICE9PSAwKSB7XG4gICAgICAgIFJlYWN0SW5zdHJ1bWVudGF0aW9uLmRlYnVnVG9vbC5vblVwZGF0ZUNvbXBvbmVudChpbnRlcm5hbEluc3RhbmNlLl9kZWJ1Z0lEKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RSZWNvbmNpbGVyO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QtZG9tL2xpYi9SZWFjdFJlY29uY2lsZXIuanMiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgX2Fzc2lnbiA9IHJlcXVpcmUoJ29iamVjdC1hc3NpZ24nKTtcblxudmFyIFJlYWN0QmFzZUNsYXNzZXMgPSByZXF1aXJlKCcuL1JlYWN0QmFzZUNsYXNzZXMnKTtcbnZhciBSZWFjdENoaWxkcmVuID0gcmVxdWlyZSgnLi9SZWFjdENoaWxkcmVuJyk7XG52YXIgUmVhY3RET01GYWN0b3JpZXMgPSByZXF1aXJlKCcuL1JlYWN0RE9NRmFjdG9yaWVzJyk7XG52YXIgUmVhY3RFbGVtZW50ID0gcmVxdWlyZSgnLi9SZWFjdEVsZW1lbnQnKTtcbnZhciBSZWFjdFByb3BUeXBlcyA9IHJlcXVpcmUoJy4vUmVhY3RQcm9wVHlwZXMnKTtcbnZhciBSZWFjdFZlcnNpb24gPSByZXF1aXJlKCcuL1JlYWN0VmVyc2lvbicpO1xuXG52YXIgY3JlYXRlUmVhY3RDbGFzcyA9IHJlcXVpcmUoJy4vY3JlYXRlQ2xhc3MnKTtcbnZhciBvbmx5Q2hpbGQgPSByZXF1aXJlKCcuL29ubHlDaGlsZCcpO1xuXG52YXIgY3JlYXRlRWxlbWVudCA9IFJlYWN0RWxlbWVudC5jcmVhdGVFbGVtZW50O1xudmFyIGNyZWF0ZUZhY3RvcnkgPSBSZWFjdEVsZW1lbnQuY3JlYXRlRmFjdG9yeTtcbnZhciBjbG9uZUVsZW1lbnQgPSBSZWFjdEVsZW1lbnQuY2xvbmVFbGVtZW50O1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICB2YXIgbG93UHJpb3JpdHlXYXJuaW5nID0gcmVxdWlyZSgnLi9sb3dQcmlvcml0eVdhcm5pbmcnKTtcbiAgdmFyIGNhbkRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9jYW5EZWZpbmVQcm9wZXJ0eScpO1xuICB2YXIgUmVhY3RFbGVtZW50VmFsaWRhdG9yID0gcmVxdWlyZSgnLi9SZWFjdEVsZW1lbnRWYWxpZGF0b3InKTtcbiAgdmFyIGRpZFdhcm5Qcm9wVHlwZXNEZXByZWNhdGVkID0gZmFsc2U7XG4gIGNyZWF0ZUVsZW1lbnQgPSBSZWFjdEVsZW1lbnRWYWxpZGF0b3IuY3JlYXRlRWxlbWVudDtcbiAgY3JlYXRlRmFjdG9yeSA9IFJlYWN0RWxlbWVudFZhbGlkYXRvci5jcmVhdGVGYWN0b3J5O1xuICBjbG9uZUVsZW1lbnQgPSBSZWFjdEVsZW1lbnRWYWxpZGF0b3IuY2xvbmVFbGVtZW50O1xufVxuXG52YXIgX19zcHJlYWQgPSBfYXNzaWduO1xudmFyIGNyZWF0ZU1peGluID0gZnVuY3Rpb24gKG1peGluKSB7XG4gIHJldHVybiBtaXhpbjtcbn07XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHZhciB3YXJuZWRGb3JTcHJlYWQgPSBmYWxzZTtcbiAgdmFyIHdhcm5lZEZvckNyZWF0ZU1peGluID0gZmFsc2U7XG4gIF9fc3ByZWFkID0gZnVuY3Rpb24gKCkge1xuICAgIGxvd1ByaW9yaXR5V2FybmluZyh3YXJuZWRGb3JTcHJlYWQsICdSZWFjdC5fX3NwcmVhZCBpcyBkZXByZWNhdGVkIGFuZCBzaG91bGQgbm90IGJlIHVzZWQuIFVzZSAnICsgJ09iamVjdC5hc3NpZ24gZGlyZWN0bHkgb3IgYW5vdGhlciBoZWxwZXIgZnVuY3Rpb24gd2l0aCBzaW1pbGFyICcgKyAnc2VtYW50aWNzLiBZb3UgbWF5IGJlIHNlZWluZyB0aGlzIHdhcm5pbmcgZHVlIHRvIHlvdXIgY29tcGlsZXIuICcgKyAnU2VlIGh0dHBzOi8vZmIubWUvcmVhY3Qtc3ByZWFkLWRlcHJlY2F0aW9uIGZvciBtb3JlIGRldGFpbHMuJyk7XG4gICAgd2FybmVkRm9yU3ByZWFkID0gdHJ1ZTtcbiAgICByZXR1cm4gX2Fzc2lnbi5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICB9O1xuXG4gIGNyZWF0ZU1peGluID0gZnVuY3Rpb24gKG1peGluKSB7XG4gICAgbG93UHJpb3JpdHlXYXJuaW5nKHdhcm5lZEZvckNyZWF0ZU1peGluLCAnUmVhY3QuY3JlYXRlTWl4aW4gaXMgZGVwcmVjYXRlZCBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkLiAnICsgJ0luIFJlYWN0IHYxNi4wLCBpdCB3aWxsIGJlIHJlbW92ZWQuICcgKyAnWW91IGNhbiB1c2UgdGhpcyBtaXhpbiBkaXJlY3RseSBpbnN0ZWFkLiAnICsgJ1NlZSBodHRwczovL2ZiLm1lL2NyZWF0ZW1peGluLXdhcy1uZXZlci1pbXBsZW1lbnRlZCBmb3IgbW9yZSBpbmZvLicpO1xuICAgIHdhcm5lZEZvckNyZWF0ZU1peGluID0gdHJ1ZTtcbiAgICByZXR1cm4gbWl4aW47XG4gIH07XG59XG5cbnZhciBSZWFjdCA9IHtcbiAgLy8gTW9kZXJuXG5cbiAgQ2hpbGRyZW46IHtcbiAgICBtYXA6IFJlYWN0Q2hpbGRyZW4ubWFwLFxuICAgIGZvckVhY2g6IFJlYWN0Q2hpbGRyZW4uZm9yRWFjaCxcbiAgICBjb3VudDogUmVhY3RDaGlsZHJlbi5jb3VudCxcbiAgICB0b0FycmF5OiBSZWFjdENoaWxkcmVuLnRvQXJyYXksXG4gICAgb25seTogb25seUNoaWxkXG4gIH0sXG5cbiAgQ29tcG9uZW50OiBSZWFjdEJhc2VDbGFzc2VzLkNvbXBvbmVudCxcbiAgUHVyZUNvbXBvbmVudDogUmVhY3RCYXNlQ2xhc3Nlcy5QdXJlQ29tcG9uZW50LFxuXG4gIGNyZWF0ZUVsZW1lbnQ6IGNyZWF0ZUVsZW1lbnQsXG4gIGNsb25lRWxlbWVudDogY2xvbmVFbGVtZW50LFxuICBpc1ZhbGlkRWxlbWVudDogUmVhY3RFbGVtZW50LmlzVmFsaWRFbGVtZW50LFxuXG4gIC8vIENsYXNzaWNcblxuICBQcm9wVHlwZXM6IFJlYWN0UHJvcFR5cGVzLFxuICBjcmVhdGVDbGFzczogY3JlYXRlUmVhY3RDbGFzcyxcbiAgY3JlYXRlRmFjdG9yeTogY3JlYXRlRmFjdG9yeSxcbiAgY3JlYXRlTWl4aW46IGNyZWF0ZU1peGluLFxuXG4gIC8vIFRoaXMgbG9va3MgRE9NIHNwZWNpZmljIGJ1dCB0aGVzZSBhcmUgYWN0dWFsbHkgaXNvbW9ycGhpYyBoZWxwZXJzXG4gIC8vIHNpbmNlIHRoZXkgYXJlIGp1c3QgZ2VuZXJhdGluZyBET00gc3RyaW5ncy5cbiAgRE9NOiBSZWFjdERPTUZhY3RvcmllcyxcblxuICB2ZXJzaW9uOiBSZWFjdFZlcnNpb24sXG5cbiAgLy8gRGVwcmVjYXRlZCBob29rIGZvciBKU1ggc3ByZWFkLCBkb24ndCB1c2UgdGhpcyBmb3IgYW55dGhpbmcuXG4gIF9fc3ByZWFkOiBfX3NwcmVhZFxufTtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgdmFyIHdhcm5lZEZvckNyZWF0ZUNsYXNzID0gZmFsc2U7XG4gIGlmIChjYW5EZWZpbmVQcm9wZXJ0eSkge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShSZWFjdCwgJ1Byb3BUeXBlcycsIHtcbiAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICBsb3dQcmlvcml0eVdhcm5pbmcoZGlkV2FyblByb3BUeXBlc0RlcHJlY2F0ZWQsICdBY2Nlc3NpbmcgUHJvcFR5cGVzIHZpYSB0aGUgbWFpbiBSZWFjdCBwYWNrYWdlIGlzIGRlcHJlY2F0ZWQsJyArICcgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiAgUmVhY3QgdjE2LjAuJyArICcgVXNlIHRoZSBsYXRlc3QgYXZhaWxhYmxlIHYxNS4qIHByb3AtdHlwZXMgcGFja2FnZSBmcm9tIG5wbSBpbnN0ZWFkLicgKyAnIEZvciBpbmZvIG9uIHVzYWdlLCBjb21wYXRpYmlsaXR5LCBtaWdyYXRpb24gYW5kIG1vcmUsIHNlZSAnICsgJ2h0dHBzOi8vZmIubWUvcHJvcC10eXBlcy1kb2NzJyk7XG4gICAgICAgIGRpZFdhcm5Qcm9wVHlwZXNEZXByZWNhdGVkID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIFJlYWN0UHJvcFR5cGVzO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFJlYWN0LCAnY3JlYXRlQ2xhc3MnLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbG93UHJpb3JpdHlXYXJuaW5nKHdhcm5lZEZvckNyZWF0ZUNsYXNzLCAnQWNjZXNzaW5nIGNyZWF0ZUNsYXNzIHZpYSB0aGUgbWFpbiBSZWFjdCBwYWNrYWdlIGlzIGRlcHJlY2F0ZWQsJyArICcgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBSZWFjdCB2MTYuMC4nICsgXCIgVXNlIGEgcGxhaW4gSmF2YVNjcmlwdCBjbGFzcyBpbnN0ZWFkLiBJZiB5b3UncmUgbm90IHlldCBcIiArICdyZWFkeSB0byBtaWdyYXRlLCBjcmVhdGUtcmVhY3QtY2xhc3MgdjE1LiogaXMgYXZhaWxhYmxlICcgKyAnb24gbnBtIGFzIGEgdGVtcG9yYXJ5LCBkcm9wLWluIHJlcGxhY2VtZW50LiAnICsgJ0ZvciBtb3JlIGluZm8gc2VlIGh0dHBzOi8vZmIubWUvcmVhY3QtY3JlYXRlLWNsYXNzJyk7XG4gICAgICAgIHdhcm5lZEZvckNyZWF0ZUNsYXNzID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZVJlYWN0Q2xhc3M7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvLyBSZWFjdC5ET00gZmFjdG9yaWVzIGFyZSBkZXByZWNhdGVkLiBXcmFwIHRoZXNlIG1ldGhvZHMgc28gdGhhdFxuICAvLyBpbnZvY2F0aW9ucyBvZiB0aGUgUmVhY3QuRE9NIG5hbWVzcGFjZSBhbmQgYWxlcnQgdXNlcnMgdG8gc3dpdGNoXG4gIC8vIHRvIHRoZSBgcmVhY3QtZG9tLWZhY3Rvcmllc2AgcGFja2FnZS5cbiAgUmVhY3QuRE9NID0ge307XG4gIHZhciB3YXJuZWRGb3JGYWN0b3JpZXMgPSBmYWxzZTtcbiAgT2JqZWN0LmtleXMoUmVhY3RET01GYWN0b3JpZXMpLmZvckVhY2goZnVuY3Rpb24gKGZhY3RvcnkpIHtcbiAgICBSZWFjdC5ET01bZmFjdG9yeV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoIXdhcm5lZEZvckZhY3Rvcmllcykge1xuICAgICAgICBsb3dQcmlvcml0eVdhcm5pbmcoZmFsc2UsICdBY2Nlc3NpbmcgZmFjdG9yaWVzIGxpa2UgUmVhY3QuRE9NLiVzIGhhcyBiZWVuIGRlcHJlY2F0ZWQgJyArICdhbmQgd2lsbCBiZSByZW1vdmVkIGluIHYxNi4wKy4gVXNlIHRoZSAnICsgJ3JlYWN0LWRvbS1mYWN0b3JpZXMgcGFja2FnZSBpbnN0ZWFkLiAnICsgJyBWZXJzaW9uIDEuMCBwcm92aWRlcyBhIGRyb3AtaW4gcmVwbGFjZW1lbnQuJyArICcgRm9yIG1vcmUgaW5mbywgc2VlIGh0dHBzOi8vZmIubWUvcmVhY3QtZG9tLWZhY3RvcmllcycsIGZhY3RvcnkpO1xuICAgICAgICB3YXJuZWRGb3JGYWN0b3JpZXMgPSB0cnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFJlYWN0RE9NRmFjdG9yaWVzW2ZhY3RvcnldLmFwcGx5KFJlYWN0RE9NRmFjdG9yaWVzLCBhcmd1bWVudHMpO1xuICAgIH07XG4gIH0pO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0O1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QvbGliL1JlYWN0LmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIFxuICovXG4ndXNlIHN0cmljdCc7XG5cbi8qKlxuICogV0FSTklORzogRE8gTk9UIG1hbnVhbGx5IHJlcXVpcmUgdGhpcyBtb2R1bGUuXG4gKiBUaGlzIGlzIGEgcmVwbGFjZW1lbnQgZm9yIGBpbnZhcmlhbnQoLi4uKWAgdXNlZCBieSB0aGUgZXJyb3IgY29kZSBzeXN0ZW1cbiAqIGFuZCB3aWxsIF9vbmx5XyBiZSByZXF1aXJlZCBieSB0aGUgY29ycmVzcG9uZGluZyBiYWJlbCBwYXNzLlxuICogSXQgYWx3YXlzIHRocm93cy5cbiAqL1xuXG5mdW5jdGlvbiByZWFjdFByb2RJbnZhcmlhbnQoY29kZSkge1xuICB2YXIgYXJnQ291bnQgPSBhcmd1bWVudHMubGVuZ3RoIC0gMTtcblxuICB2YXIgbWVzc2FnZSA9ICdNaW5pZmllZCBSZWFjdCBlcnJvciAjJyArIGNvZGUgKyAnOyB2aXNpdCAnICsgJ2h0dHA6Ly9mYWNlYm9vay5naXRodWIuaW8vcmVhY3QvZG9jcy9lcnJvci1kZWNvZGVyLmh0bWw/aW52YXJpYW50PScgKyBjb2RlO1xuXG4gIGZvciAodmFyIGFyZ0lkeCA9IDA7IGFyZ0lkeCA8IGFyZ0NvdW50OyBhcmdJZHgrKykge1xuICAgIG1lc3NhZ2UgKz0gJyZhcmdzW109JyArIGVuY29kZVVSSUNvbXBvbmVudChhcmd1bWVudHNbYXJnSWR4ICsgMV0pO1xuICB9XG5cbiAgbWVzc2FnZSArPSAnIGZvciB0aGUgZnVsbCBtZXNzYWdlIG9yIHVzZSB0aGUgbm9uLW1pbmlmaWVkIGRldiBlbnZpcm9ubWVudCcgKyAnIGZvciBmdWxsIGVycm9ycyBhbmQgYWRkaXRpb25hbCBoZWxwZnVsIHdhcm5pbmdzLic7XG5cbiAgdmFyIGVycm9yID0gbmV3IEVycm9yKG1lc3NhZ2UpO1xuICBlcnJvci5uYW1lID0gJ0ludmFyaWFudCBWaW9sYXRpb24nO1xuICBlcnJvci5mcmFtZXNUb1BvcCA9IDE7IC8vIHdlIGRvbid0IGNhcmUgYWJvdXQgcmVhY3RQcm9kSW52YXJpYW50J3Mgb3duIGZyYW1lXG5cbiAgdGhyb3cgZXJyb3I7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcmVhY3RQcm9kSW52YXJpYW50O1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QvbGliL3JlYWN0UHJvZEludmFyaWFudC5qcyIsIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbnZhciBhZGRMZWFkaW5nU2xhc2ggPSBleHBvcnRzLmFkZExlYWRpbmdTbGFzaCA9IGZ1bmN0aW9uIGFkZExlYWRpbmdTbGFzaChwYXRoKSB7XG4gIHJldHVybiBwYXRoLmNoYXJBdCgwKSA9PT0gJy8nID8gcGF0aCA6ICcvJyArIHBhdGg7XG59O1xuXG52YXIgc3RyaXBMZWFkaW5nU2xhc2ggPSBleHBvcnRzLnN0cmlwTGVhZGluZ1NsYXNoID0gZnVuY3Rpb24gc3RyaXBMZWFkaW5nU2xhc2gocGF0aCkge1xuICByZXR1cm4gcGF0aC5jaGFyQXQoMCkgPT09ICcvJyA/IHBhdGguc3Vic3RyKDEpIDogcGF0aDtcbn07XG5cbnZhciBoYXNCYXNlbmFtZSA9IGV4cG9ydHMuaGFzQmFzZW5hbWUgPSBmdW5jdGlvbiBoYXNCYXNlbmFtZShwYXRoLCBwcmVmaXgpIHtcbiAgcmV0dXJuIG5ldyBSZWdFeHAoJ14nICsgcHJlZml4ICsgJyhcXFxcL3xcXFxcP3wjfCQpJywgJ2knKS50ZXN0KHBhdGgpO1xufTtcblxudmFyIHN0cmlwQmFzZW5hbWUgPSBleHBvcnRzLnN0cmlwQmFzZW5hbWUgPSBmdW5jdGlvbiBzdHJpcEJhc2VuYW1lKHBhdGgsIHByZWZpeCkge1xuICByZXR1cm4gaGFzQmFzZW5hbWUocGF0aCwgcHJlZml4KSA/IHBhdGguc3Vic3RyKHByZWZpeC5sZW5ndGgpIDogcGF0aDtcbn07XG5cbnZhciBzdHJpcFRyYWlsaW5nU2xhc2ggPSBleHBvcnRzLnN0cmlwVHJhaWxpbmdTbGFzaCA9IGZ1bmN0aW9uIHN0cmlwVHJhaWxpbmdTbGFzaChwYXRoKSB7XG4gIHJldHVybiBwYXRoLmNoYXJBdChwYXRoLmxlbmd0aCAtIDEpID09PSAnLycgPyBwYXRoLnNsaWNlKDAsIC0xKSA6IHBhdGg7XG59O1xuXG52YXIgcGFyc2VQYXRoID0gZXhwb3J0cy5wYXJzZVBhdGggPSBmdW5jdGlvbiBwYXJzZVBhdGgocGF0aCkge1xuICB2YXIgcGF0aG5hbWUgPSBwYXRoIHx8ICcvJztcbiAgdmFyIHNlYXJjaCA9ICcnO1xuICB2YXIgaGFzaCA9ICcnO1xuXG4gIHZhciBoYXNoSW5kZXggPSBwYXRobmFtZS5pbmRleE9mKCcjJyk7XG4gIGlmIChoYXNoSW5kZXggIT09IC0xKSB7XG4gICAgaGFzaCA9IHBhdGhuYW1lLnN1YnN0cihoYXNoSW5kZXgpO1xuICAgIHBhdGhuYW1lID0gcGF0aG5hbWUuc3Vic3RyKDAsIGhhc2hJbmRleCk7XG4gIH1cblxuICB2YXIgc2VhcmNoSW5kZXggPSBwYXRobmFtZS5pbmRleE9mKCc/Jyk7XG4gIGlmIChzZWFyY2hJbmRleCAhPT0gLTEpIHtcbiAgICBzZWFyY2ggPSBwYXRobmFtZS5zdWJzdHIoc2VhcmNoSW5kZXgpO1xuICAgIHBhdGhuYW1lID0gcGF0aG5hbWUuc3Vic3RyKDAsIHNlYXJjaEluZGV4KTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgcGF0aG5hbWU6IHBhdGhuYW1lLFxuICAgIHNlYXJjaDogc2VhcmNoID09PSAnPycgPyAnJyA6IHNlYXJjaCxcbiAgICBoYXNoOiBoYXNoID09PSAnIycgPyAnJyA6IGhhc2hcbiAgfTtcbn07XG5cbnZhciBjcmVhdGVQYXRoID0gZXhwb3J0cy5jcmVhdGVQYXRoID0gZnVuY3Rpb24gY3JlYXRlUGF0aChsb2NhdGlvbikge1xuICB2YXIgcGF0aG5hbWUgPSBsb2NhdGlvbi5wYXRobmFtZSxcbiAgICAgIHNlYXJjaCA9IGxvY2F0aW9uLnNlYXJjaCxcbiAgICAgIGhhc2ggPSBsb2NhdGlvbi5oYXNoO1xuXG5cbiAgdmFyIHBhdGggPSBwYXRobmFtZSB8fCAnLyc7XG5cbiAgaWYgKHNlYXJjaCAmJiBzZWFyY2ggIT09ICc/JykgcGF0aCArPSBzZWFyY2guY2hhckF0KDApID09PSAnPycgPyBzZWFyY2ggOiAnPycgKyBzZWFyY2g7XG5cbiAgaWYgKGhhc2ggJiYgaGFzaCAhPT0gJyMnKSBwYXRoICs9IGhhc2guY2hhckF0KDApID09PSAnIycgPyBoYXNoIDogJyMnICsgaGFzaDtcblxuICByZXR1cm4gcGF0aDtcbn07XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9oaXN0b3J5L1BhdGhVdGlscy5qcyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtMjAxNSwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBVc2UgaW52YXJpYW50KCkgdG8gYXNzZXJ0IHN0YXRlIHdoaWNoIHlvdXIgcHJvZ3JhbSBhc3N1bWVzIHRvIGJlIHRydWUuXG4gKlxuICogUHJvdmlkZSBzcHJpbnRmLXN0eWxlIGZvcm1hdCAob25seSAlcyBpcyBzdXBwb3J0ZWQpIGFuZCBhcmd1bWVudHNcbiAqIHRvIHByb3ZpZGUgaW5mb3JtYXRpb24gYWJvdXQgd2hhdCBicm9rZSBhbmQgd2hhdCB5b3Ugd2VyZVxuICogZXhwZWN0aW5nLlxuICpcbiAqIFRoZSBpbnZhcmlhbnQgbWVzc2FnZSB3aWxsIGJlIHN0cmlwcGVkIGluIHByb2R1Y3Rpb24sIGJ1dCB0aGUgaW52YXJpYW50XG4gKiB3aWxsIHJlbWFpbiB0byBlbnN1cmUgbG9naWMgZG9lcyBub3QgZGlmZmVyIGluIHByb2R1Y3Rpb24uXG4gKi9cblxudmFyIGludmFyaWFudCA9IGZ1bmN0aW9uKGNvbmRpdGlvbiwgZm9ybWF0LCBhLCBiLCBjLCBkLCBlLCBmKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgaWYgKGZvcm1hdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFyaWFudCByZXF1aXJlcyBhbiBlcnJvciBtZXNzYWdlIGFyZ3VtZW50Jyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKCFjb25kaXRpb24pIHtcbiAgICB2YXIgZXJyb3I7XG4gICAgaWYgKGZvcm1hdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBlcnJvciA9IG5ldyBFcnJvcihcbiAgICAgICAgJ01pbmlmaWVkIGV4Y2VwdGlvbiBvY2N1cnJlZDsgdXNlIHRoZSBub24tbWluaWZpZWQgZGV2IGVudmlyb25tZW50ICcgK1xuICAgICAgICAnZm9yIHRoZSBmdWxsIGVycm9yIG1lc3NhZ2UgYW5kIGFkZGl0aW9uYWwgaGVscGZ1bCB3YXJuaW5ncy4nXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgYXJncyA9IFthLCBiLCBjLCBkLCBlLCBmXTtcbiAgICAgIHZhciBhcmdJbmRleCA9IDA7XG4gICAgICBlcnJvciA9IG5ldyBFcnJvcihcbiAgICAgICAgZm9ybWF0LnJlcGxhY2UoLyVzL2csIGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJnc1thcmdJbmRleCsrXTsgfSlcbiAgICAgICk7XG4gICAgICBlcnJvci5uYW1lID0gJ0ludmFyaWFudCBWaW9sYXRpb24nO1xuICAgIH1cblxuICAgIGVycm9yLmZyYW1lc1RvUG9wID0gMTsgLy8gd2UgZG9uJ3QgY2FyZSBhYm91dCBpbnZhcmlhbnQncyBvd24gZnJhbWVcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBpbnZhcmlhbnQ7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L2ludmFyaWFudC9icm93c2VyLmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIF9wcm9kSW52YXJpYW50ID0gcmVxdWlyZSgnLi9yZWFjdFByb2RJbnZhcmlhbnQnKTtcblxudmFyIEV2ZW50UGx1Z2luUmVnaXN0cnkgPSByZXF1aXJlKCcuL0V2ZW50UGx1Z2luUmVnaXN0cnknKTtcbnZhciBFdmVudFBsdWdpblV0aWxzID0gcmVxdWlyZSgnLi9FdmVudFBsdWdpblV0aWxzJyk7XG52YXIgUmVhY3RFcnJvclV0aWxzID0gcmVxdWlyZSgnLi9SZWFjdEVycm9yVXRpbHMnKTtcblxudmFyIGFjY3VtdWxhdGVJbnRvID0gcmVxdWlyZSgnLi9hY2N1bXVsYXRlSW50bycpO1xudmFyIGZvckVhY2hBY2N1bXVsYXRlZCA9IHJlcXVpcmUoJy4vZm9yRWFjaEFjY3VtdWxhdGVkJyk7XG52YXIgaW52YXJpYW50ID0gcmVxdWlyZSgnZmJqcy9saWIvaW52YXJpYW50Jyk7XG5cbi8qKlxuICogSW50ZXJuYWwgc3RvcmUgZm9yIGV2ZW50IGxpc3RlbmVyc1xuICovXG52YXIgbGlzdGVuZXJCYW5rID0ge307XG5cbi8qKlxuICogSW50ZXJuYWwgcXVldWUgb2YgZXZlbnRzIHRoYXQgaGF2ZSBhY2N1bXVsYXRlZCB0aGVpciBkaXNwYXRjaGVzIGFuZCBhcmVcbiAqIHdhaXRpbmcgdG8gaGF2ZSB0aGVpciBkaXNwYXRjaGVzIGV4ZWN1dGVkLlxuICovXG52YXIgZXZlbnRRdWV1ZSA9IG51bGw7XG5cbi8qKlxuICogRGlzcGF0Y2hlcyBhbiBldmVudCBhbmQgcmVsZWFzZXMgaXQgYmFjayBpbnRvIHRoZSBwb29sLCB1bmxlc3MgcGVyc2lzdGVudC5cbiAqXG4gKiBAcGFyYW0gez9vYmplY3R9IGV2ZW50IFN5bnRoZXRpYyBldmVudCB0byBiZSBkaXNwYXRjaGVkLlxuICogQHBhcmFtIHtib29sZWFufSBzaW11bGF0ZWQgSWYgdGhlIGV2ZW50IGlzIHNpbXVsYXRlZCAoY2hhbmdlcyBleG4gYmVoYXZpb3IpXG4gKiBAcHJpdmF0ZVxuICovXG52YXIgZXhlY3V0ZURpc3BhdGNoZXNBbmRSZWxlYXNlID0gZnVuY3Rpb24gKGV2ZW50LCBzaW11bGF0ZWQpIHtcbiAgaWYgKGV2ZW50KSB7XG4gICAgRXZlbnRQbHVnaW5VdGlscy5leGVjdXRlRGlzcGF0Y2hlc0luT3JkZXIoZXZlbnQsIHNpbXVsYXRlZCk7XG5cbiAgICBpZiAoIWV2ZW50LmlzUGVyc2lzdGVudCgpKSB7XG4gICAgICBldmVudC5jb25zdHJ1Y3Rvci5yZWxlYXNlKGV2ZW50KTtcbiAgICB9XG4gIH1cbn07XG52YXIgZXhlY3V0ZURpc3BhdGNoZXNBbmRSZWxlYXNlU2ltdWxhdGVkID0gZnVuY3Rpb24gKGUpIHtcbiAgcmV0dXJuIGV4ZWN1dGVEaXNwYXRjaGVzQW5kUmVsZWFzZShlLCB0cnVlKTtcbn07XG52YXIgZXhlY3V0ZURpc3BhdGNoZXNBbmRSZWxlYXNlVG9wTGV2ZWwgPSBmdW5jdGlvbiAoZSkge1xuICByZXR1cm4gZXhlY3V0ZURpc3BhdGNoZXNBbmRSZWxlYXNlKGUsIGZhbHNlKTtcbn07XG5cbnZhciBnZXREaWN0aW9uYXJ5S2V5ID0gZnVuY3Rpb24gKGluc3QpIHtcbiAgLy8gUHJldmVudHMgVjggcGVyZm9ybWFuY2UgaXNzdWU6XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9wdWxsLzcyMzJcbiAgcmV0dXJuICcuJyArIGluc3QuX3Jvb3ROb2RlSUQ7XG59O1xuXG5mdW5jdGlvbiBpc0ludGVyYWN0aXZlKHRhZykge1xuICByZXR1cm4gdGFnID09PSAnYnV0dG9uJyB8fCB0YWcgPT09ICdpbnB1dCcgfHwgdGFnID09PSAnc2VsZWN0JyB8fCB0YWcgPT09ICd0ZXh0YXJlYSc7XG59XG5cbmZ1bmN0aW9uIHNob3VsZFByZXZlbnRNb3VzZUV2ZW50KG5hbWUsIHR5cGUsIHByb3BzKSB7XG4gIHN3aXRjaCAobmFtZSkge1xuICAgIGNhc2UgJ29uQ2xpY2snOlxuICAgIGNhc2UgJ29uQ2xpY2tDYXB0dXJlJzpcbiAgICBjYXNlICdvbkRvdWJsZUNsaWNrJzpcbiAgICBjYXNlICdvbkRvdWJsZUNsaWNrQ2FwdHVyZSc6XG4gICAgY2FzZSAnb25Nb3VzZURvd24nOlxuICAgIGNhc2UgJ29uTW91c2VEb3duQ2FwdHVyZSc6XG4gICAgY2FzZSAnb25Nb3VzZU1vdmUnOlxuICAgIGNhc2UgJ29uTW91c2VNb3ZlQ2FwdHVyZSc6XG4gICAgY2FzZSAnb25Nb3VzZVVwJzpcbiAgICBjYXNlICdvbk1vdXNlVXBDYXB0dXJlJzpcbiAgICAgIHJldHVybiAhIShwcm9wcy5kaXNhYmxlZCAmJiBpc0ludGVyYWN0aXZlKHR5cGUpKTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8qKlxuICogVGhpcyBpcyBhIHVuaWZpZWQgaW50ZXJmYWNlIGZvciBldmVudCBwbHVnaW5zIHRvIGJlIGluc3RhbGxlZCBhbmQgY29uZmlndXJlZC5cbiAqXG4gKiBFdmVudCBwbHVnaW5zIGNhbiBpbXBsZW1lbnQgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICpcbiAqICAgYGV4dHJhY3RFdmVudHNgIHtmdW5jdGlvbihzdHJpbmcsIERPTUV2ZW50VGFyZ2V0LCBzdHJpbmcsIG9iamVjdCk6ICp9XG4gKiAgICAgUmVxdWlyZWQuIFdoZW4gYSB0b3AtbGV2ZWwgZXZlbnQgaXMgZmlyZWQsIHRoaXMgbWV0aG9kIGlzIGV4cGVjdGVkIHRvXG4gKiAgICAgZXh0cmFjdCBzeW50aGV0aWMgZXZlbnRzIHRoYXQgd2lsbCBpbiB0dXJuIGJlIHF1ZXVlZCBhbmQgZGlzcGF0Y2hlZC5cbiAqXG4gKiAgIGBldmVudFR5cGVzYCB7b2JqZWN0fVxuICogICAgIE9wdGlvbmFsLCBwbHVnaW5zIHRoYXQgZmlyZSBldmVudHMgbXVzdCBwdWJsaXNoIGEgbWFwcGluZyBvZiByZWdpc3RyYXRpb25cbiAqICAgICBuYW1lcyB0aGF0IGFyZSB1c2VkIHRvIHJlZ2lzdGVyIGxpc3RlbmVycy4gVmFsdWVzIG9mIHRoaXMgbWFwcGluZyBtdXN0XG4gKiAgICAgYmUgb2JqZWN0cyB0aGF0IGNvbnRhaW4gYHJlZ2lzdHJhdGlvbk5hbWVgIG9yIGBwaGFzZWRSZWdpc3RyYXRpb25OYW1lc2AuXG4gKlxuICogICBgZXhlY3V0ZURpc3BhdGNoYCB7ZnVuY3Rpb24ob2JqZWN0LCBmdW5jdGlvbiwgc3RyaW5nKX1cbiAqICAgICBPcHRpb25hbCwgYWxsb3dzIHBsdWdpbnMgdG8gb3ZlcnJpZGUgaG93IGFuIGV2ZW50IGdldHMgZGlzcGF0Y2hlZC4gQnlcbiAqICAgICBkZWZhdWx0LCB0aGUgbGlzdGVuZXIgaXMgc2ltcGx5IGludm9rZWQuXG4gKlxuICogRWFjaCBwbHVnaW4gdGhhdCBpcyBpbmplY3RlZCBpbnRvIGBFdmVudHNQbHVnaW5IdWJgIGlzIGltbWVkaWF0ZWx5IG9wZXJhYmxlLlxuICpcbiAqIEBwdWJsaWNcbiAqL1xudmFyIEV2ZW50UGx1Z2luSHViID0ge1xuICAvKipcbiAgICogTWV0aG9kcyBmb3IgaW5qZWN0aW5nIGRlcGVuZGVuY2llcy5cbiAgICovXG4gIGluamVjdGlvbjoge1xuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7YXJyYXl9IEluamVjdGVkRXZlbnRQbHVnaW5PcmRlclxuICAgICAqIEBwdWJsaWNcbiAgICAgKi9cbiAgICBpbmplY3RFdmVudFBsdWdpbk9yZGVyOiBFdmVudFBsdWdpblJlZ2lzdHJ5LmluamVjdEV2ZW50UGx1Z2luT3JkZXIsXG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gaW5qZWN0ZWROYW1lc1RvUGx1Z2lucyBNYXAgZnJvbSBuYW1lcyB0byBwbHVnaW4gbW9kdWxlcy5cbiAgICAgKi9cbiAgICBpbmplY3RFdmVudFBsdWdpbnNCeU5hbWU6IEV2ZW50UGx1Z2luUmVnaXN0cnkuaW5qZWN0RXZlbnRQbHVnaW5zQnlOYW1lXG4gIH0sXG5cbiAgLyoqXG4gICAqIFN0b3JlcyBgbGlzdGVuZXJgIGF0IGBsaXN0ZW5lckJhbmtbcmVnaXN0cmF0aW9uTmFtZV1ba2V5XWAuIElzIGlkZW1wb3RlbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBpbnN0IFRoZSBpbnN0YW5jZSwgd2hpY2ggaXMgdGhlIHNvdXJjZSBvZiBldmVudHMuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByZWdpc3RyYXRpb25OYW1lIE5hbWUgb2YgbGlzdGVuZXIgKGUuZy4gYG9uQ2xpY2tgKS5cbiAgICogQHBhcmFtIHtmdW5jdGlvbn0gbGlzdGVuZXIgVGhlIGNhbGxiYWNrIHRvIHN0b3JlLlxuICAgKi9cbiAgcHV0TGlzdGVuZXI6IGZ1bmN0aW9uIChpbnN0LCByZWdpc3RyYXRpb25OYW1lLCBsaXN0ZW5lcikge1xuICAgICEodHlwZW9mIGxpc3RlbmVyID09PSAnZnVuY3Rpb24nKSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICdFeHBlY3RlZCAlcyBsaXN0ZW5lciB0byBiZSBhIGZ1bmN0aW9uLCBpbnN0ZWFkIGdvdCB0eXBlICVzJywgcmVnaXN0cmF0aW9uTmFtZSwgdHlwZW9mIGxpc3RlbmVyKSA6IF9wcm9kSW52YXJpYW50KCc5NCcsIHJlZ2lzdHJhdGlvbk5hbWUsIHR5cGVvZiBsaXN0ZW5lcikgOiB2b2lkIDA7XG5cbiAgICB2YXIga2V5ID0gZ2V0RGljdGlvbmFyeUtleShpbnN0KTtcbiAgICB2YXIgYmFua0ZvclJlZ2lzdHJhdGlvbk5hbWUgPSBsaXN0ZW5lckJhbmtbcmVnaXN0cmF0aW9uTmFtZV0gfHwgKGxpc3RlbmVyQmFua1tyZWdpc3RyYXRpb25OYW1lXSA9IHt9KTtcbiAgICBiYW5rRm9yUmVnaXN0cmF0aW9uTmFtZVtrZXldID0gbGlzdGVuZXI7XG5cbiAgICB2YXIgUGx1Z2luTW9kdWxlID0gRXZlbnRQbHVnaW5SZWdpc3RyeS5yZWdpc3RyYXRpb25OYW1lTW9kdWxlc1tyZWdpc3RyYXRpb25OYW1lXTtcbiAgICBpZiAoUGx1Z2luTW9kdWxlICYmIFBsdWdpbk1vZHVsZS5kaWRQdXRMaXN0ZW5lcikge1xuICAgICAgUGx1Z2luTW9kdWxlLmRpZFB1dExpc3RlbmVyKGluc3QsIHJlZ2lzdHJhdGlvbk5hbWUsIGxpc3RlbmVyKTtcbiAgICB9XG4gIH0sXG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBpbnN0IFRoZSBpbnN0YW5jZSwgd2hpY2ggaXMgdGhlIHNvdXJjZSBvZiBldmVudHMuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByZWdpc3RyYXRpb25OYW1lIE5hbWUgb2YgbGlzdGVuZXIgKGUuZy4gYG9uQ2xpY2tgKS5cbiAgICogQHJldHVybiB7P2Z1bmN0aW9ufSBUaGUgc3RvcmVkIGNhbGxiYWNrLlxuICAgKi9cbiAgZ2V0TGlzdGVuZXI6IGZ1bmN0aW9uIChpbnN0LCByZWdpc3RyYXRpb25OYW1lKSB7XG4gICAgLy8gVE9ETzogc2hvdWxkUHJldmVudE1vdXNlRXZlbnQgaXMgRE9NLXNwZWNpZmljIGFuZCBkZWZpbml0ZWx5IHNob3VsZCBub3RcbiAgICAvLyBsaXZlIGhlcmU7IG5lZWRzIHRvIGJlIG1vdmVkIHRvIGEgYmV0dGVyIHBsYWNlIHNvb25cbiAgICB2YXIgYmFua0ZvclJlZ2lzdHJhdGlvbk5hbWUgPSBsaXN0ZW5lckJhbmtbcmVnaXN0cmF0aW9uTmFtZV07XG4gICAgaWYgKHNob3VsZFByZXZlbnRNb3VzZUV2ZW50KHJlZ2lzdHJhdGlvbk5hbWUsIGluc3QuX2N1cnJlbnRFbGVtZW50LnR5cGUsIGluc3QuX2N1cnJlbnRFbGVtZW50LnByb3BzKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHZhciBrZXkgPSBnZXREaWN0aW9uYXJ5S2V5KGluc3QpO1xuICAgIHJldHVybiBiYW5rRm9yUmVnaXN0cmF0aW9uTmFtZSAmJiBiYW5rRm9yUmVnaXN0cmF0aW9uTmFtZVtrZXldO1xuICB9LFxuXG4gIC8qKlxuICAgKiBEZWxldGVzIGEgbGlzdGVuZXIgZnJvbSB0aGUgcmVnaXN0cmF0aW9uIGJhbmsuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBpbnN0IFRoZSBpbnN0YW5jZSwgd2hpY2ggaXMgdGhlIHNvdXJjZSBvZiBldmVudHMuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByZWdpc3RyYXRpb25OYW1lIE5hbWUgb2YgbGlzdGVuZXIgKGUuZy4gYG9uQ2xpY2tgKS5cbiAgICovXG4gIGRlbGV0ZUxpc3RlbmVyOiBmdW5jdGlvbiAoaW5zdCwgcmVnaXN0cmF0aW9uTmFtZSkge1xuICAgIHZhciBQbHVnaW5Nb2R1bGUgPSBFdmVudFBsdWdpblJlZ2lzdHJ5LnJlZ2lzdHJhdGlvbk5hbWVNb2R1bGVzW3JlZ2lzdHJhdGlvbk5hbWVdO1xuICAgIGlmIChQbHVnaW5Nb2R1bGUgJiYgUGx1Z2luTW9kdWxlLndpbGxEZWxldGVMaXN0ZW5lcikge1xuICAgICAgUGx1Z2luTW9kdWxlLndpbGxEZWxldGVMaXN0ZW5lcihpbnN0LCByZWdpc3RyYXRpb25OYW1lKTtcbiAgICB9XG5cbiAgICB2YXIgYmFua0ZvclJlZ2lzdHJhdGlvbk5hbWUgPSBsaXN0ZW5lckJhbmtbcmVnaXN0cmF0aW9uTmFtZV07XG4gICAgLy8gVE9ETzogVGhpcyBzaG91bGQgbmV2ZXIgYmUgbnVsbCAtLSB3aGVuIGlzIGl0P1xuICAgIGlmIChiYW5rRm9yUmVnaXN0cmF0aW9uTmFtZSkge1xuICAgICAgdmFyIGtleSA9IGdldERpY3Rpb25hcnlLZXkoaW5zdCk7XG4gICAgICBkZWxldGUgYmFua0ZvclJlZ2lzdHJhdGlvbk5hbWVba2V5XTtcbiAgICB9XG4gIH0sXG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgYWxsIGxpc3RlbmVycyBmb3IgdGhlIERPTSBlbGVtZW50IHdpdGggdGhlIHN1cHBsaWVkIElELlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gaW5zdCBUaGUgaW5zdGFuY2UsIHdoaWNoIGlzIHRoZSBzb3VyY2Ugb2YgZXZlbnRzLlxuICAgKi9cbiAgZGVsZXRlQWxsTGlzdGVuZXJzOiBmdW5jdGlvbiAoaW5zdCkge1xuICAgIHZhciBrZXkgPSBnZXREaWN0aW9uYXJ5S2V5KGluc3QpO1xuICAgIGZvciAodmFyIHJlZ2lzdHJhdGlvbk5hbWUgaW4gbGlzdGVuZXJCYW5rKSB7XG4gICAgICBpZiAoIWxpc3RlbmVyQmFuay5oYXNPd25Qcm9wZXJ0eShyZWdpc3RyYXRpb25OYW1lKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFsaXN0ZW5lckJhbmtbcmVnaXN0cmF0aW9uTmFtZV1ba2V5XSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgdmFyIFBsdWdpbk1vZHVsZSA9IEV2ZW50UGx1Z2luUmVnaXN0cnkucmVnaXN0cmF0aW9uTmFtZU1vZHVsZXNbcmVnaXN0cmF0aW9uTmFtZV07XG4gICAgICBpZiAoUGx1Z2luTW9kdWxlICYmIFBsdWdpbk1vZHVsZS53aWxsRGVsZXRlTGlzdGVuZXIpIHtcbiAgICAgICAgUGx1Z2luTW9kdWxlLndpbGxEZWxldGVMaXN0ZW5lcihpbnN0LCByZWdpc3RyYXRpb25OYW1lKTtcbiAgICAgIH1cblxuICAgICAgZGVsZXRlIGxpc3RlbmVyQmFua1tyZWdpc3RyYXRpb25OYW1lXVtrZXldO1xuICAgIH1cbiAgfSxcblxuICAvKipcbiAgICogQWxsb3dzIHJlZ2lzdGVyZWQgcGx1Z2lucyBhbiBvcHBvcnR1bml0eSB0byBleHRyYWN0IGV2ZW50cyBmcm9tIHRvcC1sZXZlbFxuICAgKiBuYXRpdmUgYnJvd3NlciBldmVudHMuXG4gICAqXG4gICAqIEByZXR1cm4geyp9IEFuIGFjY3VtdWxhdGlvbiBvZiBzeW50aGV0aWMgZXZlbnRzLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGV4dHJhY3RFdmVudHM6IGZ1bmN0aW9uICh0b3BMZXZlbFR5cGUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCkge1xuICAgIHZhciBldmVudHM7XG4gICAgdmFyIHBsdWdpbnMgPSBFdmVudFBsdWdpblJlZ2lzdHJ5LnBsdWdpbnM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwbHVnaW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAvLyBOb3QgZXZlcnkgcGx1Z2luIGluIHRoZSBvcmRlcmluZyBtYXkgYmUgbG9hZGVkIGF0IHJ1bnRpbWUuXG4gICAgICB2YXIgcG9zc2libGVQbHVnaW4gPSBwbHVnaW5zW2ldO1xuICAgICAgaWYgKHBvc3NpYmxlUGx1Z2luKSB7XG4gICAgICAgIHZhciBleHRyYWN0ZWRFdmVudHMgPSBwb3NzaWJsZVBsdWdpbi5leHRyYWN0RXZlbnRzKHRvcExldmVsVHlwZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KTtcbiAgICAgICAgaWYgKGV4dHJhY3RlZEV2ZW50cykge1xuICAgICAgICAgIGV2ZW50cyA9IGFjY3VtdWxhdGVJbnRvKGV2ZW50cywgZXh0cmFjdGVkRXZlbnRzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZXZlbnRzO1xuICB9LFxuXG4gIC8qKlxuICAgKiBFbnF1ZXVlcyBhIHN5bnRoZXRpYyBldmVudCB0aGF0IHNob3VsZCBiZSBkaXNwYXRjaGVkIHdoZW5cbiAgICogYHByb2Nlc3NFdmVudFF1ZXVlYCBpcyBpbnZva2VkLlxuICAgKlxuICAgKiBAcGFyYW0geyp9IGV2ZW50cyBBbiBhY2N1bXVsYXRpb24gb2Ygc3ludGhldGljIGV2ZW50cy5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBlbnF1ZXVlRXZlbnRzOiBmdW5jdGlvbiAoZXZlbnRzKSB7XG4gICAgaWYgKGV2ZW50cykge1xuICAgICAgZXZlbnRRdWV1ZSA9IGFjY3VtdWxhdGVJbnRvKGV2ZW50UXVldWUsIGV2ZW50cyk7XG4gICAgfVxuICB9LFxuXG4gIC8qKlxuICAgKiBEaXNwYXRjaGVzIGFsbCBzeW50aGV0aWMgZXZlbnRzIG9uIHRoZSBldmVudCBxdWV1ZS5cbiAgICpcbiAgICogQGludGVybmFsXG4gICAqL1xuICBwcm9jZXNzRXZlbnRRdWV1ZTogZnVuY3Rpb24gKHNpbXVsYXRlZCkge1xuICAgIC8vIFNldCBgZXZlbnRRdWV1ZWAgdG8gbnVsbCBiZWZvcmUgcHJvY2Vzc2luZyBpdCBzbyB0aGF0IHdlIGNhbiB0ZWxsIGlmIG1vcmVcbiAgICAvLyBldmVudHMgZ2V0IGVucXVldWVkIHdoaWxlIHByb2Nlc3NpbmcuXG4gICAgdmFyIHByb2Nlc3NpbmdFdmVudFF1ZXVlID0gZXZlbnRRdWV1ZTtcbiAgICBldmVudFF1ZXVlID0gbnVsbDtcbiAgICBpZiAoc2ltdWxhdGVkKSB7XG4gICAgICBmb3JFYWNoQWNjdW11bGF0ZWQocHJvY2Vzc2luZ0V2ZW50UXVldWUsIGV4ZWN1dGVEaXNwYXRjaGVzQW5kUmVsZWFzZVNpbXVsYXRlZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvckVhY2hBY2N1bXVsYXRlZChwcm9jZXNzaW5nRXZlbnRRdWV1ZSwgZXhlY3V0ZURpc3BhdGNoZXNBbmRSZWxlYXNlVG9wTGV2ZWwpO1xuICAgIH1cbiAgICAhIWV2ZW50UXVldWUgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAncHJvY2Vzc0V2ZW50UXVldWUoKTogQWRkaXRpb25hbCBldmVudHMgd2VyZSBlbnF1ZXVlZCB3aGlsZSBwcm9jZXNzaW5nIGFuIGV2ZW50IHF1ZXVlLiBTdXBwb3J0IGZvciB0aGlzIGhhcyBub3QgeWV0IGJlZW4gaW1wbGVtZW50ZWQuJykgOiBfcHJvZEludmFyaWFudCgnOTUnKSA6IHZvaWQgMDtcbiAgICAvLyBUaGlzIHdvdWxkIGJlIGEgZ29vZCB0aW1lIHRvIHJldGhyb3cgaWYgYW55IG9mIHRoZSBldmVudCBoYW5kbGVycyB0aHJldy5cbiAgICBSZWFjdEVycm9yVXRpbHMucmV0aHJvd0NhdWdodEVycm9yKCk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFRoZXNlIGFyZSBuZWVkZWQgZm9yIHRlc3RzIG9ubHkuIERvIG5vdCB1c2UhXG4gICAqL1xuICBfX3B1cmdlOiBmdW5jdGlvbiAoKSB7XG4gICAgbGlzdGVuZXJCYW5rID0ge307XG4gIH0sXG5cbiAgX19nZXRMaXN0ZW5lckJhbms6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gbGlzdGVuZXJCYW5rO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEV2ZW50UGx1Z2luSHViO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QtZG9tL2xpYi9FdmVudFBsdWdpbkh1Yi5qcyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBFdmVudFBsdWdpbkh1YiA9IHJlcXVpcmUoJy4vRXZlbnRQbHVnaW5IdWInKTtcbnZhciBFdmVudFBsdWdpblV0aWxzID0gcmVxdWlyZSgnLi9FdmVudFBsdWdpblV0aWxzJyk7XG5cbnZhciBhY2N1bXVsYXRlSW50byA9IHJlcXVpcmUoJy4vYWNjdW11bGF0ZUludG8nKTtcbnZhciBmb3JFYWNoQWNjdW11bGF0ZWQgPSByZXF1aXJlKCcuL2ZvckVhY2hBY2N1bXVsYXRlZCcpO1xudmFyIHdhcm5pbmcgPSByZXF1aXJlKCdmYmpzL2xpYi93YXJuaW5nJyk7XG5cbnZhciBnZXRMaXN0ZW5lciA9IEV2ZW50UGx1Z2luSHViLmdldExpc3RlbmVyO1xuXG4vKipcbiAqIFNvbWUgZXZlbnQgdHlwZXMgaGF2ZSBhIG5vdGlvbiBvZiBkaWZmZXJlbnQgcmVnaXN0cmF0aW9uIG5hbWVzIGZvciBkaWZmZXJlbnRcbiAqIFwicGhhc2VzXCIgb2YgcHJvcGFnYXRpb24uIFRoaXMgZmluZHMgbGlzdGVuZXJzIGJ5IGEgZ2l2ZW4gcGhhc2UuXG4gKi9cbmZ1bmN0aW9uIGxpc3RlbmVyQXRQaGFzZShpbnN0LCBldmVudCwgcHJvcGFnYXRpb25QaGFzZSkge1xuICB2YXIgcmVnaXN0cmF0aW9uTmFtZSA9IGV2ZW50LmRpc3BhdGNoQ29uZmlnLnBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzW3Byb3BhZ2F0aW9uUGhhc2VdO1xuICByZXR1cm4gZ2V0TGlzdGVuZXIoaW5zdCwgcmVnaXN0cmF0aW9uTmFtZSk7XG59XG5cbi8qKlxuICogVGFncyBhIGBTeW50aGV0aWNFdmVudGAgd2l0aCBkaXNwYXRjaGVkIGxpc3RlbmVycy4gQ3JlYXRpbmcgdGhpcyBmdW5jdGlvblxuICogaGVyZSwgYWxsb3dzIHVzIHRvIG5vdCBoYXZlIHRvIGJpbmQgb3IgY3JlYXRlIGZ1bmN0aW9ucyBmb3IgZWFjaCBldmVudC5cbiAqIE11dGF0aW5nIHRoZSBldmVudCdzIG1lbWJlcnMgYWxsb3dzIHVzIHRvIG5vdCBoYXZlIHRvIGNyZWF0ZSBhIHdyYXBwaW5nXG4gKiBcImRpc3BhdGNoXCIgb2JqZWN0IHRoYXQgcGFpcnMgdGhlIGV2ZW50IHdpdGggdGhlIGxpc3RlbmVyLlxuICovXG5mdW5jdGlvbiBhY2N1bXVsYXRlRGlyZWN0aW9uYWxEaXNwYXRjaGVzKGluc3QsIHBoYXNlLCBldmVudCkge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKGluc3QsICdEaXNwYXRjaGluZyBpbnN0IG11c3Qgbm90IGJlIG51bGwnKSA6IHZvaWQgMDtcbiAgfVxuICB2YXIgbGlzdGVuZXIgPSBsaXN0ZW5lckF0UGhhc2UoaW5zdCwgZXZlbnQsIHBoYXNlKTtcbiAgaWYgKGxpc3RlbmVyKSB7XG4gICAgZXZlbnQuX2Rpc3BhdGNoTGlzdGVuZXJzID0gYWNjdW11bGF0ZUludG8oZXZlbnQuX2Rpc3BhdGNoTGlzdGVuZXJzLCBsaXN0ZW5lcik7XG4gICAgZXZlbnQuX2Rpc3BhdGNoSW5zdGFuY2VzID0gYWNjdW11bGF0ZUludG8oZXZlbnQuX2Rpc3BhdGNoSW5zdGFuY2VzLCBpbnN0KTtcbiAgfVxufVxuXG4vKipcbiAqIENvbGxlY3QgZGlzcGF0Y2hlcyAobXVzdCBiZSBlbnRpcmVseSBjb2xsZWN0ZWQgYmVmb3JlIGRpc3BhdGNoaW5nIC0gc2VlIHVuaXRcbiAqIHRlc3RzKS4gTGF6aWx5IGFsbG9jYXRlIHRoZSBhcnJheSB0byBjb25zZXJ2ZSBtZW1vcnkuICBXZSBtdXN0IGxvb3AgdGhyb3VnaFxuICogZWFjaCBldmVudCBhbmQgcGVyZm9ybSB0aGUgdHJhdmVyc2FsIGZvciBlYWNoIG9uZS4gV2UgY2Fubm90IHBlcmZvcm0gYVxuICogc2luZ2xlIHRyYXZlcnNhbCBmb3IgdGhlIGVudGlyZSBjb2xsZWN0aW9uIG9mIGV2ZW50cyBiZWNhdXNlIGVhY2ggZXZlbnQgbWF5XG4gKiBoYXZlIGEgZGlmZmVyZW50IHRhcmdldC5cbiAqL1xuZnVuY3Rpb24gYWNjdW11bGF0ZVR3b1BoYXNlRGlzcGF0Y2hlc1NpbmdsZShldmVudCkge1xuICBpZiAoZXZlbnQgJiYgZXZlbnQuZGlzcGF0Y2hDb25maWcucGhhc2VkUmVnaXN0cmF0aW9uTmFtZXMpIHtcbiAgICBFdmVudFBsdWdpblV0aWxzLnRyYXZlcnNlVHdvUGhhc2UoZXZlbnQuX3RhcmdldEluc3QsIGFjY3VtdWxhdGVEaXJlY3Rpb25hbERpc3BhdGNoZXMsIGV2ZW50KTtcbiAgfVxufVxuXG4vKipcbiAqIFNhbWUgYXMgYGFjY3VtdWxhdGVUd29QaGFzZURpc3BhdGNoZXNTaW5nbGVgLCBidXQgc2tpcHMgb3ZlciB0aGUgdGFyZ2V0SUQuXG4gKi9cbmZ1bmN0aW9uIGFjY3VtdWxhdGVUd29QaGFzZURpc3BhdGNoZXNTaW5nbGVTa2lwVGFyZ2V0KGV2ZW50KSB7XG4gIGlmIChldmVudCAmJiBldmVudC5kaXNwYXRjaENvbmZpZy5waGFzZWRSZWdpc3RyYXRpb25OYW1lcykge1xuICAgIHZhciB0YXJnZXRJbnN0ID0gZXZlbnQuX3RhcmdldEluc3Q7XG4gICAgdmFyIHBhcmVudEluc3QgPSB0YXJnZXRJbnN0ID8gRXZlbnRQbHVnaW5VdGlscy5nZXRQYXJlbnRJbnN0YW5jZSh0YXJnZXRJbnN0KSA6IG51bGw7XG4gICAgRXZlbnRQbHVnaW5VdGlscy50cmF2ZXJzZVR3b1BoYXNlKHBhcmVudEluc3QsIGFjY3VtdWxhdGVEaXJlY3Rpb25hbERpc3BhdGNoZXMsIGV2ZW50KTtcbiAgfVxufVxuXG4vKipcbiAqIEFjY3VtdWxhdGVzIHdpdGhvdXQgcmVnYXJkIHRvIGRpcmVjdGlvbiwgZG9lcyBub3QgbG9vayBmb3IgcGhhc2VkXG4gKiByZWdpc3RyYXRpb24gbmFtZXMuIFNhbWUgYXMgYGFjY3VtdWxhdGVEaXJlY3REaXNwYXRjaGVzU2luZ2xlYCBidXQgd2l0aG91dFxuICogcmVxdWlyaW5nIHRoYXQgdGhlIGBkaXNwYXRjaE1hcmtlcmAgYmUgdGhlIHNhbWUgYXMgdGhlIGRpc3BhdGNoZWQgSUQuXG4gKi9cbmZ1bmN0aW9uIGFjY3VtdWxhdGVEaXNwYXRjaGVzKGluc3QsIGlnbm9yZWREaXJlY3Rpb24sIGV2ZW50KSB7XG4gIGlmIChldmVudCAmJiBldmVudC5kaXNwYXRjaENvbmZpZy5yZWdpc3RyYXRpb25OYW1lKSB7XG4gICAgdmFyIHJlZ2lzdHJhdGlvbk5hbWUgPSBldmVudC5kaXNwYXRjaENvbmZpZy5yZWdpc3RyYXRpb25OYW1lO1xuICAgIHZhciBsaXN0ZW5lciA9IGdldExpc3RlbmVyKGluc3QsIHJlZ2lzdHJhdGlvbk5hbWUpO1xuICAgIGlmIChsaXN0ZW5lcikge1xuICAgICAgZXZlbnQuX2Rpc3BhdGNoTGlzdGVuZXJzID0gYWNjdW11bGF0ZUludG8oZXZlbnQuX2Rpc3BhdGNoTGlzdGVuZXJzLCBsaXN0ZW5lcik7XG4gICAgICBldmVudC5fZGlzcGF0Y2hJbnN0YW5jZXMgPSBhY2N1bXVsYXRlSW50byhldmVudC5fZGlzcGF0Y2hJbnN0YW5jZXMsIGluc3QpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEFjY3VtdWxhdGVzIGRpc3BhdGNoZXMgb24gYW4gYFN5bnRoZXRpY0V2ZW50YCwgYnV0IG9ubHkgZm9yIHRoZVxuICogYGRpc3BhdGNoTWFya2VyYC5cbiAqIEBwYXJhbSB7U3ludGhldGljRXZlbnR9IGV2ZW50XG4gKi9cbmZ1bmN0aW9uIGFjY3VtdWxhdGVEaXJlY3REaXNwYXRjaGVzU2luZ2xlKGV2ZW50KSB7XG4gIGlmIChldmVudCAmJiBldmVudC5kaXNwYXRjaENvbmZpZy5yZWdpc3RyYXRpb25OYW1lKSB7XG4gICAgYWNjdW11bGF0ZURpc3BhdGNoZXMoZXZlbnQuX3RhcmdldEluc3QsIG51bGwsIGV2ZW50KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBhY2N1bXVsYXRlVHdvUGhhc2VEaXNwYXRjaGVzKGV2ZW50cykge1xuICBmb3JFYWNoQWNjdW11bGF0ZWQoZXZlbnRzLCBhY2N1bXVsYXRlVHdvUGhhc2VEaXNwYXRjaGVzU2luZ2xlKTtcbn1cblxuZnVuY3Rpb24gYWNjdW11bGF0ZVR3b1BoYXNlRGlzcGF0Y2hlc1NraXBUYXJnZXQoZXZlbnRzKSB7XG4gIGZvckVhY2hBY2N1bXVsYXRlZChldmVudHMsIGFjY3VtdWxhdGVUd29QaGFzZURpc3BhdGNoZXNTaW5nbGVTa2lwVGFyZ2V0KTtcbn1cblxuZnVuY3Rpb24gYWNjdW11bGF0ZUVudGVyTGVhdmVEaXNwYXRjaGVzKGxlYXZlLCBlbnRlciwgZnJvbSwgdG8pIHtcbiAgRXZlbnRQbHVnaW5VdGlscy50cmF2ZXJzZUVudGVyTGVhdmUoZnJvbSwgdG8sIGFjY3VtdWxhdGVEaXNwYXRjaGVzLCBsZWF2ZSwgZW50ZXIpO1xufVxuXG5mdW5jdGlvbiBhY2N1bXVsYXRlRGlyZWN0RGlzcGF0Y2hlcyhldmVudHMpIHtcbiAgZm9yRWFjaEFjY3VtdWxhdGVkKGV2ZW50cywgYWNjdW11bGF0ZURpcmVjdERpc3BhdGNoZXNTaW5nbGUpO1xufVxuXG4vKipcbiAqIEEgc21hbGwgc2V0IG9mIHByb3BhZ2F0aW9uIHBhdHRlcm5zLCBlYWNoIG9mIHdoaWNoIHdpbGwgYWNjZXB0IGEgc21hbGwgYW1vdW50XG4gKiBvZiBpbmZvcm1hdGlvbiwgYW5kIGdlbmVyYXRlIGEgc2V0IG9mIFwiZGlzcGF0Y2ggcmVhZHkgZXZlbnQgb2JqZWN0c1wiIC0gd2hpY2hcbiAqIGFyZSBzZXRzIG9mIGV2ZW50cyB0aGF0IGhhdmUgYWxyZWFkeSBiZWVuIGFubm90YXRlZCB3aXRoIGEgc2V0IG9mIGRpc3BhdGNoZWRcbiAqIGxpc3RlbmVyIGZ1bmN0aW9ucy9pZHMuIFRoZSBBUEkgaXMgZGVzaWduZWQgdGhpcyB3YXkgdG8gZGlzY291cmFnZSB0aGVzZVxuICogcHJvcGFnYXRpb24gc3RyYXRlZ2llcyBmcm9tIGFjdHVhbGx5IGV4ZWN1dGluZyB0aGUgZGlzcGF0Y2hlcywgc2luY2Ugd2VcbiAqIGFsd2F5cyB3YW50IHRvIGNvbGxlY3QgdGhlIGVudGlyZSBzZXQgb2YgZGlzcGF0Y2hlcyBiZWZvcmUgZXhlY3V0aW5nIGV2ZW50IGFcbiAqIHNpbmdsZSBvbmUuXG4gKlxuICogQGNvbnN0cnVjdG9yIEV2ZW50UHJvcGFnYXRvcnNcbiAqL1xudmFyIEV2ZW50UHJvcGFnYXRvcnMgPSB7XG4gIGFjY3VtdWxhdGVUd29QaGFzZURpc3BhdGNoZXM6IGFjY3VtdWxhdGVUd29QaGFzZURpc3BhdGNoZXMsXG4gIGFjY3VtdWxhdGVUd29QaGFzZURpc3BhdGNoZXNTa2lwVGFyZ2V0OiBhY2N1bXVsYXRlVHdvUGhhc2VEaXNwYXRjaGVzU2tpcFRhcmdldCxcbiAgYWNjdW11bGF0ZURpcmVjdERpc3BhdGNoZXM6IGFjY3VtdWxhdGVEaXJlY3REaXNwYXRjaGVzLFxuICBhY2N1bXVsYXRlRW50ZXJMZWF2ZURpc3BhdGNoZXM6IGFjY3VtdWxhdGVFbnRlckxlYXZlRGlzcGF0Y2hlc1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBFdmVudFByb3BhZ2F0b3JzO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QtZG9tL2xpYi9FdmVudFByb3BhZ2F0b3JzLmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBgUmVhY3RJbnN0YW5jZU1hcGAgbWFpbnRhaW5zIGEgbWFwcGluZyBmcm9tIGEgcHVibGljIGZhY2luZyBzdGF0ZWZ1bFxuICogaW5zdGFuY2UgKGtleSkgYW5kIHRoZSBpbnRlcm5hbCByZXByZXNlbnRhdGlvbiAodmFsdWUpLiBUaGlzIGFsbG93cyBwdWJsaWNcbiAqIG1ldGhvZHMgdG8gYWNjZXB0IHRoZSB1c2VyIGZhY2luZyBpbnN0YW5jZSBhcyBhbiBhcmd1bWVudCBhbmQgbWFwIHRoZW0gYmFja1xuICogdG8gaW50ZXJuYWwgbWV0aG9kcy5cbiAqL1xuXG4vLyBUT0RPOiBSZXBsYWNlIHRoaXMgd2l0aCBFUzY6IHZhciBSZWFjdEluc3RhbmNlTWFwID0gbmV3IE1hcCgpO1xuXG52YXIgUmVhY3RJbnN0YW5jZU1hcCA9IHtcbiAgLyoqXG4gICAqIFRoaXMgQVBJIHNob3VsZCBiZSBjYWxsZWQgYGRlbGV0ZWAgYnV0IHdlJ2QgaGF2ZSB0byBtYWtlIHN1cmUgdG8gYWx3YXlzXG4gICAqIHRyYW5zZm9ybSB0aGVzZSB0byBzdHJpbmdzIGZvciBJRSBzdXBwb3J0LiBXaGVuIHRoaXMgdHJhbnNmb3JtIGlzIGZ1bGx5XG4gICAqIHN1cHBvcnRlZCB3ZSBjYW4gcmVuYW1lIGl0LlxuICAgKi9cbiAgcmVtb3ZlOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAga2V5Ll9yZWFjdEludGVybmFsSW5zdGFuY2UgPSB1bmRlZmluZWQ7XG4gIH0sXG5cbiAgZ2V0OiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgcmV0dXJuIGtleS5fcmVhY3RJbnRlcm5hbEluc3RhbmNlO1xuICB9LFxuXG4gIGhhczogZnVuY3Rpb24gKGtleSkge1xuICAgIHJldHVybiBrZXkuX3JlYWN0SW50ZXJuYWxJbnN0YW5jZSAhPT0gdW5kZWZpbmVkO1xuICB9LFxuXG4gIHNldDogZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICBrZXkuX3JlYWN0SW50ZXJuYWxJbnN0YW5jZSA9IHZhbHVlO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0SW5zdGFuY2VNYXA7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1kb20vbGliL1JlYWN0SW5zdGFuY2VNYXAuanMiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgU3ludGhldGljRXZlbnQgPSByZXF1aXJlKCcuL1N5bnRoZXRpY0V2ZW50Jyk7XG5cbnZhciBnZXRFdmVudFRhcmdldCA9IHJlcXVpcmUoJy4vZ2V0RXZlbnRUYXJnZXQnKTtcblxuLyoqXG4gKiBAaW50ZXJmYWNlIFVJRXZlbnRcbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTMtRXZlbnRzL1xuICovXG52YXIgVUlFdmVudEludGVyZmFjZSA9IHtcbiAgdmlldzogZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgaWYgKGV2ZW50LnZpZXcpIHtcbiAgICAgIHJldHVybiBldmVudC52aWV3O1xuICAgIH1cblxuICAgIHZhciB0YXJnZXQgPSBnZXRFdmVudFRhcmdldChldmVudCk7XG4gICAgaWYgKHRhcmdldC53aW5kb3cgPT09IHRhcmdldCkge1xuICAgICAgLy8gdGFyZ2V0IGlzIGEgd2luZG93IG9iamVjdFxuICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9XG5cbiAgICB2YXIgZG9jID0gdGFyZ2V0Lm93bmVyRG9jdW1lbnQ7XG4gICAgLy8gVE9ETzogRmlndXJlIG91dCB3aHkgYG93bmVyRG9jdW1lbnRgIGlzIHNvbWV0aW1lcyB1bmRlZmluZWQgaW4gSUU4LlxuICAgIGlmIChkb2MpIHtcbiAgICAgIHJldHVybiBkb2MuZGVmYXVsdFZpZXcgfHwgZG9jLnBhcmVudFdpbmRvdztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHdpbmRvdztcbiAgICB9XG4gIH0sXG4gIGRldGFpbDogZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgcmV0dXJuIGV2ZW50LmRldGFpbCB8fCAwO1xuICB9XG59O1xuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSBkaXNwYXRjaENvbmZpZyBDb25maWd1cmF0aW9uIHVzZWQgdG8gZGlzcGF0Y2ggdGhpcyBldmVudC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBkaXNwYXRjaE1hcmtlciBNYXJrZXIgaWRlbnRpZnlpbmcgdGhlIGV2ZW50IHRhcmdldC5cbiAqIEBwYXJhbSB7b2JqZWN0fSBuYXRpdmVFdmVudCBOYXRpdmUgYnJvd3NlciBldmVudC5cbiAqIEBleHRlbmRzIHtTeW50aGV0aWNFdmVudH1cbiAqL1xuZnVuY3Rpb24gU3ludGhldGljVUlFdmVudChkaXNwYXRjaENvbmZpZywgZGlzcGF0Y2hNYXJrZXIsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCkge1xuICByZXR1cm4gU3ludGhldGljRXZlbnQuY2FsbCh0aGlzLCBkaXNwYXRjaENvbmZpZywgZGlzcGF0Y2hNYXJrZXIsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCk7XG59XG5cblN5bnRoZXRpY0V2ZW50LmF1Z21lbnRDbGFzcyhTeW50aGV0aWNVSUV2ZW50LCBVSUV2ZW50SW50ZXJmYWNlKTtcblxubW9kdWxlLmV4cG9ydHMgPSBTeW50aGV0aWNVSUV2ZW50O1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QtZG9tL2xpYi9TeW50aGV0aWNVSUV2ZW50LmpzIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBJdGVtIGZyb20gJy4vaXRlbSc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEl0ZW1MaXN0KHtpdGVtcywgdGl0bGUsIGhlYWRlckV4dHJhcywgaGFuZGxlSXRlbUNsaWNrfSkge1xuICBjb25zdCBlbGVtZW50cyA9IGl0ZW1zLm1hcCgoaXRlbSwgaWR4KSA9PiA8SXRlbSBpdGVtPXtpdGVtfSBrZXk9e2lkeH0gc2VsZWN0TW9kZT17ZmFsc2V9IGhhbmRsZUNsaWNrPXtoYW5kbGVJdGVtQ2xpY2sgfHwgKCgpPT57fSl9IC8+KTtcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXt0aXRsZS50b0xvd2VyQ2FzZSgpfT5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHt0aXRsZS50b0xvd2VyQ2FzZSgpfS1pbnRyb2AgfT5cbiAgICAgICAgPHNwYW4+e3RpdGxlfTwvc3Bhbj5cbiAgICAgICAge2hlYWRlckV4dHJhcyB8fCAnJ31cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb250ZW50XCI+XG4gICAgICAgIHtlbGVtZW50c31cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApO1xufVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2NvbXBvbmVudHMvY29udGVudC9pdGVtLWxpc3QuanN4IiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBlbXB0eU9iamVjdCA9IHt9O1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBPYmplY3QuZnJlZXplKGVtcHR5T2JqZWN0KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBlbXB0eU9iamVjdDtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L2ZianMvbGliL2VtcHR5T2JqZWN0LmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgX3Byb2RJbnZhcmlhbnQgPSByZXF1aXJlKCcuL3JlYWN0UHJvZEludmFyaWFudCcpO1xuXG52YXIgaW52YXJpYW50ID0gcmVxdWlyZSgnZmJqcy9saWIvaW52YXJpYW50Jyk7XG5cbi8qKlxuICogSW5qZWN0YWJsZSBvcmRlcmluZyBvZiBldmVudCBwbHVnaW5zLlxuICovXG52YXIgZXZlbnRQbHVnaW5PcmRlciA9IG51bGw7XG5cbi8qKlxuICogSW5qZWN0YWJsZSBtYXBwaW5nIGZyb20gbmFtZXMgdG8gZXZlbnQgcGx1Z2luIG1vZHVsZXMuXG4gKi9cbnZhciBuYW1lc1RvUGx1Z2lucyA9IHt9O1xuXG4vKipcbiAqIFJlY29tcHV0ZXMgdGhlIHBsdWdpbiBsaXN0IHVzaW5nIHRoZSBpbmplY3RlZCBwbHVnaW5zIGFuZCBwbHVnaW4gb3JkZXJpbmcuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gcmVjb21wdXRlUGx1Z2luT3JkZXJpbmcoKSB7XG4gIGlmICghZXZlbnRQbHVnaW5PcmRlcikge1xuICAgIC8vIFdhaXQgdW50aWwgYW4gYGV2ZW50UGx1Z2luT3JkZXJgIGlzIGluamVjdGVkLlxuICAgIHJldHVybjtcbiAgfVxuICBmb3IgKHZhciBwbHVnaW5OYW1lIGluIG5hbWVzVG9QbHVnaW5zKSB7XG4gICAgdmFyIHBsdWdpbk1vZHVsZSA9IG5hbWVzVG9QbHVnaW5zW3BsdWdpbk5hbWVdO1xuICAgIHZhciBwbHVnaW5JbmRleCA9IGV2ZW50UGx1Z2luT3JkZXIuaW5kZXhPZihwbHVnaW5OYW1lKTtcbiAgICAhKHBsdWdpbkluZGV4ID4gLTEpID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IGludmFyaWFudChmYWxzZSwgJ0V2ZW50UGx1Z2luUmVnaXN0cnk6IENhbm5vdCBpbmplY3QgZXZlbnQgcGx1Z2lucyB0aGF0IGRvIG5vdCBleGlzdCBpbiB0aGUgcGx1Z2luIG9yZGVyaW5nLCBgJXNgLicsIHBsdWdpbk5hbWUpIDogX3Byb2RJbnZhcmlhbnQoJzk2JywgcGx1Z2luTmFtZSkgOiB2b2lkIDA7XG4gICAgaWYgKEV2ZW50UGx1Z2luUmVnaXN0cnkucGx1Z2luc1twbHVnaW5JbmRleF0pIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICAhcGx1Z2luTW9kdWxlLmV4dHJhY3RFdmVudHMgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAnRXZlbnRQbHVnaW5SZWdpc3RyeTogRXZlbnQgcGx1Z2lucyBtdXN0IGltcGxlbWVudCBhbiBgZXh0cmFjdEV2ZW50c2AgbWV0aG9kLCBidXQgYCVzYCBkb2VzIG5vdC4nLCBwbHVnaW5OYW1lKSA6IF9wcm9kSW52YXJpYW50KCc5NycsIHBsdWdpbk5hbWUpIDogdm9pZCAwO1xuICAgIEV2ZW50UGx1Z2luUmVnaXN0cnkucGx1Z2luc1twbHVnaW5JbmRleF0gPSBwbHVnaW5Nb2R1bGU7XG4gICAgdmFyIHB1Ymxpc2hlZEV2ZW50cyA9IHBsdWdpbk1vZHVsZS5ldmVudFR5cGVzO1xuICAgIGZvciAodmFyIGV2ZW50TmFtZSBpbiBwdWJsaXNoZWRFdmVudHMpIHtcbiAgICAgICFwdWJsaXNoRXZlbnRGb3JQbHVnaW4ocHVibGlzaGVkRXZlbnRzW2V2ZW50TmFtZV0sIHBsdWdpbk1vZHVsZSwgZXZlbnROYW1lKSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICdFdmVudFBsdWdpblJlZ2lzdHJ5OiBGYWlsZWQgdG8gcHVibGlzaCBldmVudCBgJXNgIGZvciBwbHVnaW4gYCVzYC4nLCBldmVudE5hbWUsIHBsdWdpbk5hbWUpIDogX3Byb2RJbnZhcmlhbnQoJzk4JywgZXZlbnROYW1lLCBwbHVnaW5OYW1lKSA6IHZvaWQgMDtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBQdWJsaXNoZXMgYW4gZXZlbnQgc28gdGhhdCBpdCBjYW4gYmUgZGlzcGF0Y2hlZCBieSB0aGUgc3VwcGxpZWQgcGx1Z2luLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBkaXNwYXRjaENvbmZpZyBEaXNwYXRjaCBjb25maWd1cmF0aW9uIGZvciB0aGUgZXZlbnQuXG4gKiBAcGFyYW0ge29iamVjdH0gUGx1Z2luTW9kdWxlIFBsdWdpbiBwdWJsaXNoaW5nIHRoZSBldmVudC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdGhlIGV2ZW50IHdhcyBzdWNjZXNzZnVsbHkgcHVibGlzaGVkLlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gcHVibGlzaEV2ZW50Rm9yUGx1Z2luKGRpc3BhdGNoQ29uZmlnLCBwbHVnaW5Nb2R1bGUsIGV2ZW50TmFtZSkge1xuICAhIUV2ZW50UGx1Z2luUmVnaXN0cnkuZXZlbnROYW1lRGlzcGF0Y2hDb25maWdzLmhhc093blByb3BlcnR5KGV2ZW50TmFtZSkgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAnRXZlbnRQbHVnaW5IdWI6IE1vcmUgdGhhbiBvbmUgcGx1Z2luIGF0dGVtcHRlZCB0byBwdWJsaXNoIHRoZSBzYW1lIGV2ZW50IG5hbWUsIGAlc2AuJywgZXZlbnROYW1lKSA6IF9wcm9kSW52YXJpYW50KCc5OScsIGV2ZW50TmFtZSkgOiB2b2lkIDA7XG4gIEV2ZW50UGx1Z2luUmVnaXN0cnkuZXZlbnROYW1lRGlzcGF0Y2hDb25maWdzW2V2ZW50TmFtZV0gPSBkaXNwYXRjaENvbmZpZztcblxuICB2YXIgcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXMgPSBkaXNwYXRjaENvbmZpZy5waGFzZWRSZWdpc3RyYXRpb25OYW1lcztcbiAgaWYgKHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzKSB7XG4gICAgZm9yICh2YXIgcGhhc2VOYW1lIGluIHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzKSB7XG4gICAgICBpZiAocGhhc2VkUmVnaXN0cmF0aW9uTmFtZXMuaGFzT3duUHJvcGVydHkocGhhc2VOYW1lKSkge1xuICAgICAgICB2YXIgcGhhc2VkUmVnaXN0cmF0aW9uTmFtZSA9IHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzW3BoYXNlTmFtZV07XG4gICAgICAgIHB1Ymxpc2hSZWdpc3RyYXRpb25OYW1lKHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWUsIHBsdWdpbk1vZHVsZSwgZXZlbnROYW1lKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gZWxzZSBpZiAoZGlzcGF0Y2hDb25maWcucmVnaXN0cmF0aW9uTmFtZSkge1xuICAgIHB1Ymxpc2hSZWdpc3RyYXRpb25OYW1lKGRpc3BhdGNoQ29uZmlnLnJlZ2lzdHJhdGlvbk5hbWUsIHBsdWdpbk1vZHVsZSwgZXZlbnROYW1lKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogUHVibGlzaGVzIGEgcmVnaXN0cmF0aW9uIG5hbWUgdGhhdCBpcyB1c2VkIHRvIGlkZW50aWZ5IGRpc3BhdGNoZWQgZXZlbnRzIGFuZFxuICogY2FuIGJlIHVzZWQgd2l0aCBgRXZlbnRQbHVnaW5IdWIucHV0TGlzdGVuZXJgIHRvIHJlZ2lzdGVyIGxpc3RlbmVycy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVnaXN0cmF0aW9uTmFtZSBSZWdpc3RyYXRpb24gbmFtZSB0byBhZGQuXG4gKiBAcGFyYW0ge29iamVjdH0gUGx1Z2luTW9kdWxlIFBsdWdpbiBwdWJsaXNoaW5nIHRoZSBldmVudC5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHB1Ymxpc2hSZWdpc3RyYXRpb25OYW1lKHJlZ2lzdHJhdGlvbk5hbWUsIHBsdWdpbk1vZHVsZSwgZXZlbnROYW1lKSB7XG4gICEhRXZlbnRQbHVnaW5SZWdpc3RyeS5yZWdpc3RyYXRpb25OYW1lTW9kdWxlc1tyZWdpc3RyYXRpb25OYW1lXSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICdFdmVudFBsdWdpbkh1YjogTW9yZSB0aGFuIG9uZSBwbHVnaW4gYXR0ZW1wdGVkIHRvIHB1Ymxpc2ggdGhlIHNhbWUgcmVnaXN0cmF0aW9uIG5hbWUsIGAlc2AuJywgcmVnaXN0cmF0aW9uTmFtZSkgOiBfcHJvZEludmFyaWFudCgnMTAwJywgcmVnaXN0cmF0aW9uTmFtZSkgOiB2b2lkIDA7XG4gIEV2ZW50UGx1Z2luUmVnaXN0cnkucmVnaXN0cmF0aW9uTmFtZU1vZHVsZXNbcmVnaXN0cmF0aW9uTmFtZV0gPSBwbHVnaW5Nb2R1bGU7XG4gIEV2ZW50UGx1Z2luUmVnaXN0cnkucmVnaXN0cmF0aW9uTmFtZURlcGVuZGVuY2llc1tyZWdpc3RyYXRpb25OYW1lXSA9IHBsdWdpbk1vZHVsZS5ldmVudFR5cGVzW2V2ZW50TmFtZV0uZGVwZW5kZW5jaWVzO1xuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgdmFyIGxvd2VyQ2FzZWROYW1lID0gcmVnaXN0cmF0aW9uTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIEV2ZW50UGx1Z2luUmVnaXN0cnkucG9zc2libGVSZWdpc3RyYXRpb25OYW1lc1tsb3dlckNhc2VkTmFtZV0gPSByZWdpc3RyYXRpb25OYW1lO1xuXG4gICAgaWYgKHJlZ2lzdHJhdGlvbk5hbWUgPT09ICdvbkRvdWJsZUNsaWNrJykge1xuICAgICAgRXZlbnRQbHVnaW5SZWdpc3RyeS5wb3NzaWJsZVJlZ2lzdHJhdGlvbk5hbWVzLm9uZGJsY2xpY2sgPSByZWdpc3RyYXRpb25OYW1lO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFJlZ2lzdGVycyBwbHVnaW5zIHNvIHRoYXQgdGhleSBjYW4gZXh0cmFjdCBhbmQgZGlzcGF0Y2ggZXZlbnRzLlxuICpcbiAqIEBzZWUge0V2ZW50UGx1Z2luSHVifVxuICovXG52YXIgRXZlbnRQbHVnaW5SZWdpc3RyeSA9IHtcbiAgLyoqXG4gICAqIE9yZGVyZWQgbGlzdCBvZiBpbmplY3RlZCBwbHVnaW5zLlxuICAgKi9cbiAgcGx1Z2luczogW10sXG5cbiAgLyoqXG4gICAqIE1hcHBpbmcgZnJvbSBldmVudCBuYW1lIHRvIGRpc3BhdGNoIGNvbmZpZ1xuICAgKi9cbiAgZXZlbnROYW1lRGlzcGF0Y2hDb25maWdzOiB7fSxcblxuICAvKipcbiAgICogTWFwcGluZyBmcm9tIHJlZ2lzdHJhdGlvbiBuYW1lIHRvIHBsdWdpbiBtb2R1bGVcbiAgICovXG4gIHJlZ2lzdHJhdGlvbk5hbWVNb2R1bGVzOiB7fSxcblxuICAvKipcbiAgICogTWFwcGluZyBmcm9tIHJlZ2lzdHJhdGlvbiBuYW1lIHRvIGV2ZW50IG5hbWVcbiAgICovXG4gIHJlZ2lzdHJhdGlvbk5hbWVEZXBlbmRlbmNpZXM6IHt9LFxuXG4gIC8qKlxuICAgKiBNYXBwaW5nIGZyb20gbG93ZXJjYXNlIHJlZ2lzdHJhdGlvbiBuYW1lcyB0byB0aGUgcHJvcGVybHkgY2FzZWQgdmVyc2lvbixcbiAgICogdXNlZCB0byB3YXJuIGluIHRoZSBjYXNlIG9mIG1pc3NpbmcgZXZlbnQgaGFuZGxlcnMuIEF2YWlsYWJsZVxuICAgKiBvbmx5IGluIF9fREVWX18uXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuICBwb3NzaWJsZVJlZ2lzdHJhdGlvbk5hbWVzOiBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8ge30gOiBudWxsLFxuICAvLyBUcnVzdCB0aGUgZGV2ZWxvcGVyIHRvIG9ubHkgdXNlIHBvc3NpYmxlUmVnaXN0cmF0aW9uTmFtZXMgaW4gX19ERVZfX1xuXG4gIC8qKlxuICAgKiBJbmplY3RzIGFuIG9yZGVyaW5nIG9mIHBsdWdpbnMgKGJ5IHBsdWdpbiBuYW1lKS4gVGhpcyBhbGxvd3MgdGhlIG9yZGVyaW5nXG4gICAqIHRvIGJlIGRlY291cGxlZCBmcm9tIGluamVjdGlvbiBvZiB0aGUgYWN0dWFsIHBsdWdpbnMgc28gdGhhdCBvcmRlcmluZyBpc1xuICAgKiBhbHdheXMgZGV0ZXJtaW5pc3RpYyByZWdhcmRsZXNzIG9mIHBhY2thZ2luZywgb24tdGhlLWZseSBpbmplY3Rpb24sIGV0Yy5cbiAgICpcbiAgICogQHBhcmFtIHthcnJheX0gSW5qZWN0ZWRFdmVudFBsdWdpbk9yZGVyXG4gICAqIEBpbnRlcm5hbFxuICAgKiBAc2VlIHtFdmVudFBsdWdpbkh1Yi5pbmplY3Rpb24uaW5qZWN0RXZlbnRQbHVnaW5PcmRlcn1cbiAgICovXG4gIGluamVjdEV2ZW50UGx1Z2luT3JkZXI6IGZ1bmN0aW9uIChpbmplY3RlZEV2ZW50UGx1Z2luT3JkZXIpIHtcbiAgICAhIWV2ZW50UGx1Z2luT3JkZXIgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAnRXZlbnRQbHVnaW5SZWdpc3RyeTogQ2Fubm90IGluamVjdCBldmVudCBwbHVnaW4gb3JkZXJpbmcgbW9yZSB0aGFuIG9uY2UuIFlvdSBhcmUgbGlrZWx5IHRyeWluZyB0byBsb2FkIG1vcmUgdGhhbiBvbmUgY29weSBvZiBSZWFjdC4nKSA6IF9wcm9kSW52YXJpYW50KCcxMDEnKSA6IHZvaWQgMDtcbiAgICAvLyBDbG9uZSB0aGUgb3JkZXJpbmcgc28gaXQgY2Fubm90IGJlIGR5bmFtaWNhbGx5IG11dGF0ZWQuXG4gICAgZXZlbnRQbHVnaW5PcmRlciA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGluamVjdGVkRXZlbnRQbHVnaW5PcmRlcik7XG4gICAgcmVjb21wdXRlUGx1Z2luT3JkZXJpbmcoKTtcbiAgfSxcblxuICAvKipcbiAgICogSW5qZWN0cyBwbHVnaW5zIHRvIGJlIHVzZWQgYnkgYEV2ZW50UGx1Z2luSHViYC4gVGhlIHBsdWdpbiBuYW1lcyBtdXN0IGJlXG4gICAqIGluIHRoZSBvcmRlcmluZyBpbmplY3RlZCBieSBgaW5qZWN0RXZlbnRQbHVnaW5PcmRlcmAuXG4gICAqXG4gICAqIFBsdWdpbnMgY2FuIGJlIGluamVjdGVkIGFzIHBhcnQgb2YgcGFnZSBpbml0aWFsaXphdGlvbiBvciBvbi10aGUtZmx5LlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gaW5qZWN0ZWROYW1lc1RvUGx1Z2lucyBNYXAgZnJvbSBuYW1lcyB0byBwbHVnaW4gbW9kdWxlcy5cbiAgICogQGludGVybmFsXG4gICAqIEBzZWUge0V2ZW50UGx1Z2luSHViLmluamVjdGlvbi5pbmplY3RFdmVudFBsdWdpbnNCeU5hbWV9XG4gICAqL1xuICBpbmplY3RFdmVudFBsdWdpbnNCeU5hbWU6IGZ1bmN0aW9uIChpbmplY3RlZE5hbWVzVG9QbHVnaW5zKSB7XG4gICAgdmFyIGlzT3JkZXJpbmdEaXJ0eSA9IGZhbHNlO1xuICAgIGZvciAodmFyIHBsdWdpbk5hbWUgaW4gaW5qZWN0ZWROYW1lc1RvUGx1Z2lucykge1xuICAgICAgaWYgKCFpbmplY3RlZE5hbWVzVG9QbHVnaW5zLmhhc093blByb3BlcnR5KHBsdWdpbk5hbWUpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgdmFyIHBsdWdpbk1vZHVsZSA9IGluamVjdGVkTmFtZXNUb1BsdWdpbnNbcGx1Z2luTmFtZV07XG4gICAgICBpZiAoIW5hbWVzVG9QbHVnaW5zLmhhc093blByb3BlcnR5KHBsdWdpbk5hbWUpIHx8IG5hbWVzVG9QbHVnaW5zW3BsdWdpbk5hbWVdICE9PSBwbHVnaW5Nb2R1bGUpIHtcbiAgICAgICAgISFuYW1lc1RvUGx1Z2luc1twbHVnaW5OYW1lXSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICdFdmVudFBsdWdpblJlZ2lzdHJ5OiBDYW5ub3QgaW5qZWN0IHR3byBkaWZmZXJlbnQgZXZlbnQgcGx1Z2lucyB1c2luZyB0aGUgc2FtZSBuYW1lLCBgJXNgLicsIHBsdWdpbk5hbWUpIDogX3Byb2RJbnZhcmlhbnQoJzEwMicsIHBsdWdpbk5hbWUpIDogdm9pZCAwO1xuICAgICAgICBuYW1lc1RvUGx1Z2luc1twbHVnaW5OYW1lXSA9IHBsdWdpbk1vZHVsZTtcbiAgICAgICAgaXNPcmRlcmluZ0RpcnR5ID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGlzT3JkZXJpbmdEaXJ0eSkge1xuICAgICAgcmVjb21wdXRlUGx1Z2luT3JkZXJpbmcoKTtcbiAgICB9XG4gIH0sXG5cbiAgLyoqXG4gICAqIExvb2tzIHVwIHRoZSBwbHVnaW4gZm9yIHRoZSBzdXBwbGllZCBldmVudC5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IEEgc3ludGhldGljIGV2ZW50LlxuICAgKiBAcmV0dXJuIHs/b2JqZWN0fSBUaGUgcGx1Z2luIHRoYXQgY3JlYXRlZCB0aGUgc3VwcGxpZWQgZXZlbnQuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZ2V0UGx1Z2luTW9kdWxlRm9yRXZlbnQ6IGZ1bmN0aW9uIChldmVudCkge1xuICAgIHZhciBkaXNwYXRjaENvbmZpZyA9IGV2ZW50LmRpc3BhdGNoQ29uZmlnO1xuICAgIGlmIChkaXNwYXRjaENvbmZpZy5yZWdpc3RyYXRpb25OYW1lKSB7XG4gICAgICByZXR1cm4gRXZlbnRQbHVnaW5SZWdpc3RyeS5yZWdpc3RyYXRpb25OYW1lTW9kdWxlc1tkaXNwYXRjaENvbmZpZy5yZWdpc3RyYXRpb25OYW1lXSB8fCBudWxsO1xuICAgIH1cbiAgICBpZiAoZGlzcGF0Y2hDb25maWcucGhhc2VkUmVnaXN0cmF0aW9uTmFtZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gcHVsbGluZyBwaGFzZWRSZWdpc3RyYXRpb25OYW1lcyBvdXQgb2YgZGlzcGF0Y2hDb25maWcgaGVscHMgRmxvdyBzZWVcbiAgICAgIC8vIHRoYXQgaXQgaXMgbm90IHVuZGVmaW5lZC5cbiAgICAgIHZhciBwaGFzZWRSZWdpc3RyYXRpb25OYW1lcyA9IGRpc3BhdGNoQ29uZmlnLnBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzO1xuXG4gICAgICBmb3IgKHZhciBwaGFzZSBpbiBwaGFzZWRSZWdpc3RyYXRpb25OYW1lcykge1xuICAgICAgICBpZiAoIXBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzLmhhc093blByb3BlcnR5KHBoYXNlKSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHZhciBwbHVnaW5Nb2R1bGUgPSBFdmVudFBsdWdpblJlZ2lzdHJ5LnJlZ2lzdHJhdGlvbk5hbWVNb2R1bGVzW3BoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzW3BoYXNlXV07XG4gICAgICAgIGlmIChwbHVnaW5Nb2R1bGUpIHtcbiAgICAgICAgICByZXR1cm4gcGx1Z2luTW9kdWxlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9LFxuXG4gIC8qKlxuICAgKiBFeHBvc2VkIGZvciB1bml0IHRlc3RpbmcuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfcmVzZXRFdmVudFBsdWdpbnM6IGZ1bmN0aW9uICgpIHtcbiAgICBldmVudFBsdWdpbk9yZGVyID0gbnVsbDtcbiAgICBmb3IgKHZhciBwbHVnaW5OYW1lIGluIG5hbWVzVG9QbHVnaW5zKSB7XG4gICAgICBpZiAobmFtZXNUb1BsdWdpbnMuaGFzT3duUHJvcGVydHkocGx1Z2luTmFtZSkpIHtcbiAgICAgICAgZGVsZXRlIG5hbWVzVG9QbHVnaW5zW3BsdWdpbk5hbWVdO1xuICAgICAgfVxuICAgIH1cbiAgICBFdmVudFBsdWdpblJlZ2lzdHJ5LnBsdWdpbnMubGVuZ3RoID0gMDtcblxuICAgIHZhciBldmVudE5hbWVEaXNwYXRjaENvbmZpZ3MgPSBFdmVudFBsdWdpblJlZ2lzdHJ5LmV2ZW50TmFtZURpc3BhdGNoQ29uZmlncztcbiAgICBmb3IgKHZhciBldmVudE5hbWUgaW4gZXZlbnROYW1lRGlzcGF0Y2hDb25maWdzKSB7XG4gICAgICBpZiAoZXZlbnROYW1lRGlzcGF0Y2hDb25maWdzLmhhc093blByb3BlcnR5KGV2ZW50TmFtZSkpIHtcbiAgICAgICAgZGVsZXRlIGV2ZW50TmFtZURpc3BhdGNoQ29uZmlnc1tldmVudE5hbWVdO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciByZWdpc3RyYXRpb25OYW1lTW9kdWxlcyA9IEV2ZW50UGx1Z2luUmVnaXN0cnkucmVnaXN0cmF0aW9uTmFtZU1vZHVsZXM7XG4gICAgZm9yICh2YXIgcmVnaXN0cmF0aW9uTmFtZSBpbiByZWdpc3RyYXRpb25OYW1lTW9kdWxlcykge1xuICAgICAgaWYgKHJlZ2lzdHJhdGlvbk5hbWVNb2R1bGVzLmhhc093blByb3BlcnR5KHJlZ2lzdHJhdGlvbk5hbWUpKSB7XG4gICAgICAgIGRlbGV0ZSByZWdpc3RyYXRpb25OYW1lTW9kdWxlc1tyZWdpc3RyYXRpb25OYW1lXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgdmFyIHBvc3NpYmxlUmVnaXN0cmF0aW9uTmFtZXMgPSBFdmVudFBsdWdpblJlZ2lzdHJ5LnBvc3NpYmxlUmVnaXN0cmF0aW9uTmFtZXM7XG4gICAgICBmb3IgKHZhciBsb3dlckNhc2VkTmFtZSBpbiBwb3NzaWJsZVJlZ2lzdHJhdGlvbk5hbWVzKSB7XG4gICAgICAgIGlmIChwb3NzaWJsZVJlZ2lzdHJhdGlvbk5hbWVzLmhhc093blByb3BlcnR5KGxvd2VyQ2FzZWROYW1lKSkge1xuICAgICAgICAgIGRlbGV0ZSBwb3NzaWJsZVJlZ2lzdHJhdGlvbk5hbWVzW2xvd2VyQ2FzZWROYW1lXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBFdmVudFBsdWdpblJlZ2lzdHJ5O1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QtZG9tL2xpYi9FdmVudFBsdWdpblJlZ2lzdHJ5LmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIF9hc3NpZ24gPSByZXF1aXJlKCdvYmplY3QtYXNzaWduJyk7XG5cbnZhciBFdmVudFBsdWdpblJlZ2lzdHJ5ID0gcmVxdWlyZSgnLi9FdmVudFBsdWdpblJlZ2lzdHJ5Jyk7XG52YXIgUmVhY3RFdmVudEVtaXR0ZXJNaXhpbiA9IHJlcXVpcmUoJy4vUmVhY3RFdmVudEVtaXR0ZXJNaXhpbicpO1xudmFyIFZpZXdwb3J0TWV0cmljcyA9IHJlcXVpcmUoJy4vVmlld3BvcnRNZXRyaWNzJyk7XG5cbnZhciBnZXRWZW5kb3JQcmVmaXhlZEV2ZW50TmFtZSA9IHJlcXVpcmUoJy4vZ2V0VmVuZG9yUHJlZml4ZWRFdmVudE5hbWUnKTtcbnZhciBpc0V2ZW50U3VwcG9ydGVkID0gcmVxdWlyZSgnLi9pc0V2ZW50U3VwcG9ydGVkJyk7XG5cbi8qKlxuICogU3VtbWFyeSBvZiBgUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyYCBldmVudCBoYW5kbGluZzpcbiAqXG4gKiAgLSBUb3AtbGV2ZWwgZGVsZWdhdGlvbiBpcyB1c2VkIHRvIHRyYXAgbW9zdCBuYXRpdmUgYnJvd3NlciBldmVudHMuIFRoaXNcbiAqICAgIG1heSBvbmx5IG9jY3VyIGluIHRoZSBtYWluIHRocmVhZCBhbmQgaXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mXG4gKiAgICBSZWFjdEV2ZW50TGlzdGVuZXIsIHdoaWNoIGlzIGluamVjdGVkIGFuZCBjYW4gdGhlcmVmb3JlIHN1cHBvcnQgcGx1Z2dhYmxlXG4gKiAgICBldmVudCBzb3VyY2VzLiBUaGlzIGlzIHRoZSBvbmx5IHdvcmsgdGhhdCBvY2N1cnMgaW4gdGhlIG1haW4gdGhyZWFkLlxuICpcbiAqICAtIFdlIG5vcm1hbGl6ZSBhbmQgZGUtZHVwbGljYXRlIGV2ZW50cyB0byBhY2NvdW50IGZvciBicm93c2VyIHF1aXJrcy4gVGhpc1xuICogICAgbWF5IGJlIGRvbmUgaW4gdGhlIHdvcmtlciB0aHJlYWQuXG4gKlxuICogIC0gRm9yd2FyZCB0aGVzZSBuYXRpdmUgZXZlbnRzICh3aXRoIHRoZSBhc3NvY2lhdGVkIHRvcC1sZXZlbCB0eXBlIHVzZWQgdG9cbiAqICAgIHRyYXAgaXQpIHRvIGBFdmVudFBsdWdpbkh1YmAsIHdoaWNoIGluIHR1cm4gd2lsbCBhc2sgcGx1Z2lucyBpZiB0aGV5IHdhbnRcbiAqICAgIHRvIGV4dHJhY3QgYW55IHN5bnRoZXRpYyBldmVudHMuXG4gKlxuICogIC0gVGhlIGBFdmVudFBsdWdpbkh1YmAgd2lsbCB0aGVuIHByb2Nlc3MgZWFjaCBldmVudCBieSBhbm5vdGF0aW5nIHRoZW0gd2l0aFxuICogICAgXCJkaXNwYXRjaGVzXCIsIGEgc2VxdWVuY2Ugb2YgbGlzdGVuZXJzIGFuZCBJRHMgdGhhdCBjYXJlIGFib3V0IHRoYXQgZXZlbnQuXG4gKlxuICogIC0gVGhlIGBFdmVudFBsdWdpbkh1YmAgdGhlbiBkaXNwYXRjaGVzIHRoZSBldmVudHMuXG4gKlxuICogT3ZlcnZpZXcgb2YgUmVhY3QgYW5kIHRoZSBldmVudCBzeXN0ZW06XG4gKlxuICogKy0tLS0tLS0tLS0tLSsgICAgLlxuICogfCAgICBET00gICAgIHwgICAgLlxuICogKy0tLS0tLS0tLS0tLSsgICAgLlxuICogICAgICAgfCAgICAgICAgICAgLlxuICogICAgICAgdiAgICAgICAgICAgLlxuICogKy0tLS0tLS0tLS0tLSsgICAgLlxuICogfCBSZWFjdEV2ZW50IHwgICAgLlxuICogfCAgTGlzdGVuZXIgIHwgICAgLlxuICogKy0tLS0tLS0tLS0tLSsgICAgLiAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0rXG4gKiAgICAgICB8ICAgICAgICAgICAuICAgICAgICAgICAgICAgKy0tLS0tLS0tK3xTaW1wbGVFdmVudHxcbiAqICAgICAgIHwgICAgICAgICAgIC4gICAgICAgICAgICAgICB8ICAgICAgICAgfFBsdWdpbiAgICAgfFxuICogKy0tLS0tfC0tLS0tLSsgICAgLiAgICAgICAgICAgICAgIHYgICAgICAgICArLS0tLS0tLS0tLS0rXG4gKiB8ICAgICB8ICAgICAgfCAgICAuICAgICstLS0tLS0tLS0tLS0tLSsgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0rXG4gKiB8ICAgICArLS0tLS0tLS0tLS0uLS0tPnxFdmVudFBsdWdpbkh1YnwgICAgICAgICAgICAgICAgICAgIHwgICAgRXZlbnQgICB8XG4gKiB8ICAgICAgICAgICAgfCAgICAuICAgIHwgICAgICAgICAgICAgIHwgICAgICstLS0tLS0tLS0tLSsgIHwgUHJvcGFnYXRvcnN8XG4gKiB8IFJlYWN0RXZlbnQgfCAgICAuICAgIHwgICAgICAgICAgICAgIHwgICAgIHxUYXBFdmVudCAgIHwgIHwtLS0tLS0tLS0tLS18XG4gKiB8ICBFbWl0dGVyICAgfCAgICAuICAgIHwgICAgICAgICAgICAgIHw8LS0tK3xQbHVnaW4gICAgIHwgIHxvdGhlciBwbHVnaW58XG4gKiB8ICAgICAgICAgICAgfCAgICAuICAgIHwgICAgICAgICAgICAgIHwgICAgICstLS0tLS0tLS0tLSsgIHwgIHV0aWxpdGllcyB8XG4gKiB8ICAgICArLS0tLS0tLS0tLS0uLS0tPnwgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0rXG4gKiB8ICAgICB8ICAgICAgfCAgICAuICAgICstLS0tLS0tLS0tLS0tLStcbiAqICstLS0tLXwtLS0tLS0rICAgIC4gICAgICAgICAgICAgICAgXiAgICAgICAgKy0tLS0tLS0tLS0tK1xuICogICAgICAgfCAgICAgICAgICAgLiAgICAgICAgICAgICAgICB8ICAgICAgICB8RW50ZXIvTGVhdmV8XG4gKiAgICAgICArICAgICAgICAgICAuICAgICAgICAgICAgICAgICstLS0tLS0tK3xQbHVnaW4gICAgIHxcbiAqICstLS0tLS0tLS0tLS0tKyAgIC4gICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tK1xuICogfCBhcHBsaWNhdGlvbiB8ICAgLlxuICogfC0tLS0tLS0tLS0tLS18ICAgLlxuICogfCAgICAgICAgICAgICB8ICAgLlxuICogfCAgICAgICAgICAgICB8ICAgLlxuICogKy0tLS0tLS0tLS0tLS0rICAgLlxuICogICAgICAgICAgICAgICAgICAgLlxuICogICAgUmVhY3QgQ29yZSAgICAgLiAgR2VuZXJhbCBQdXJwb3NlIEV2ZW50IFBsdWdpbiBTeXN0ZW1cbiAqL1xuXG52YXIgaGFzRXZlbnRQYWdlWFk7XG52YXIgYWxyZWFkeUxpc3RlbmluZ1RvID0ge307XG52YXIgaXNNb25pdG9yaW5nU2Nyb2xsVmFsdWUgPSBmYWxzZTtcbnZhciByZWFjdFRvcExpc3RlbmVyc0NvdW50ZXIgPSAwO1xuXG4vLyBGb3IgZXZlbnRzIGxpa2UgJ3N1Ym1pdCcgd2hpY2ggZG9uJ3QgY29uc2lzdGVudGx5IGJ1YmJsZSAod2hpY2ggd2UgdHJhcCBhdCBhXG4vLyBsb3dlciBub2RlIHRoYW4gYGRvY3VtZW50YCksIGJpbmRpbmcgYXQgYGRvY3VtZW50YCB3b3VsZCBjYXVzZSBkdXBsaWNhdGVcbi8vIGV2ZW50cyBzbyB3ZSBkb24ndCBpbmNsdWRlIHRoZW0gaGVyZVxudmFyIHRvcEV2ZW50TWFwcGluZyA9IHtcbiAgdG9wQWJvcnQ6ICdhYm9ydCcsXG4gIHRvcEFuaW1hdGlvbkVuZDogZ2V0VmVuZG9yUHJlZml4ZWRFdmVudE5hbWUoJ2FuaW1hdGlvbmVuZCcpIHx8ICdhbmltYXRpb25lbmQnLFxuICB0b3BBbmltYXRpb25JdGVyYXRpb246IGdldFZlbmRvclByZWZpeGVkRXZlbnROYW1lKCdhbmltYXRpb25pdGVyYXRpb24nKSB8fCAnYW5pbWF0aW9uaXRlcmF0aW9uJyxcbiAgdG9wQW5pbWF0aW9uU3RhcnQ6IGdldFZlbmRvclByZWZpeGVkRXZlbnROYW1lKCdhbmltYXRpb25zdGFydCcpIHx8ICdhbmltYXRpb25zdGFydCcsXG4gIHRvcEJsdXI6ICdibHVyJyxcbiAgdG9wQ2FuUGxheTogJ2NhbnBsYXknLFxuICB0b3BDYW5QbGF5VGhyb3VnaDogJ2NhbnBsYXl0aHJvdWdoJyxcbiAgdG9wQ2hhbmdlOiAnY2hhbmdlJyxcbiAgdG9wQ2xpY2s6ICdjbGljaycsXG4gIHRvcENvbXBvc2l0aW9uRW5kOiAnY29tcG9zaXRpb25lbmQnLFxuICB0b3BDb21wb3NpdGlvblN0YXJ0OiAnY29tcG9zaXRpb25zdGFydCcsXG4gIHRvcENvbXBvc2l0aW9uVXBkYXRlOiAnY29tcG9zaXRpb251cGRhdGUnLFxuICB0b3BDb250ZXh0TWVudTogJ2NvbnRleHRtZW51JyxcbiAgdG9wQ29weTogJ2NvcHknLFxuICB0b3BDdXQ6ICdjdXQnLFxuICB0b3BEb3VibGVDbGljazogJ2RibGNsaWNrJyxcbiAgdG9wRHJhZzogJ2RyYWcnLFxuICB0b3BEcmFnRW5kOiAnZHJhZ2VuZCcsXG4gIHRvcERyYWdFbnRlcjogJ2RyYWdlbnRlcicsXG4gIHRvcERyYWdFeGl0OiAnZHJhZ2V4aXQnLFxuICB0b3BEcmFnTGVhdmU6ICdkcmFnbGVhdmUnLFxuICB0b3BEcmFnT3ZlcjogJ2RyYWdvdmVyJyxcbiAgdG9wRHJhZ1N0YXJ0OiAnZHJhZ3N0YXJ0JyxcbiAgdG9wRHJvcDogJ2Ryb3AnLFxuICB0b3BEdXJhdGlvbkNoYW5nZTogJ2R1cmF0aW9uY2hhbmdlJyxcbiAgdG9wRW1wdGllZDogJ2VtcHRpZWQnLFxuICB0b3BFbmNyeXB0ZWQ6ICdlbmNyeXB0ZWQnLFxuICB0b3BFbmRlZDogJ2VuZGVkJyxcbiAgdG9wRXJyb3I6ICdlcnJvcicsXG4gIHRvcEZvY3VzOiAnZm9jdXMnLFxuICB0b3BJbnB1dDogJ2lucHV0JyxcbiAgdG9wS2V5RG93bjogJ2tleWRvd24nLFxuICB0b3BLZXlQcmVzczogJ2tleXByZXNzJyxcbiAgdG9wS2V5VXA6ICdrZXl1cCcsXG4gIHRvcExvYWRlZERhdGE6ICdsb2FkZWRkYXRhJyxcbiAgdG9wTG9hZGVkTWV0YWRhdGE6ICdsb2FkZWRtZXRhZGF0YScsXG4gIHRvcExvYWRTdGFydDogJ2xvYWRzdGFydCcsXG4gIHRvcE1vdXNlRG93bjogJ21vdXNlZG93bicsXG4gIHRvcE1vdXNlTW92ZTogJ21vdXNlbW92ZScsXG4gIHRvcE1vdXNlT3V0OiAnbW91c2VvdXQnLFxuICB0b3BNb3VzZU92ZXI6ICdtb3VzZW92ZXInLFxuICB0b3BNb3VzZVVwOiAnbW91c2V1cCcsXG4gIHRvcFBhc3RlOiAncGFzdGUnLFxuICB0b3BQYXVzZTogJ3BhdXNlJyxcbiAgdG9wUGxheTogJ3BsYXknLFxuICB0b3BQbGF5aW5nOiAncGxheWluZycsXG4gIHRvcFByb2dyZXNzOiAncHJvZ3Jlc3MnLFxuICB0b3BSYXRlQ2hhbmdlOiAncmF0ZWNoYW5nZScsXG4gIHRvcFNjcm9sbDogJ3Njcm9sbCcsXG4gIHRvcFNlZWtlZDogJ3NlZWtlZCcsXG4gIHRvcFNlZWtpbmc6ICdzZWVraW5nJyxcbiAgdG9wU2VsZWN0aW9uQ2hhbmdlOiAnc2VsZWN0aW9uY2hhbmdlJyxcbiAgdG9wU3RhbGxlZDogJ3N0YWxsZWQnLFxuICB0b3BTdXNwZW5kOiAnc3VzcGVuZCcsXG4gIHRvcFRleHRJbnB1dDogJ3RleHRJbnB1dCcsXG4gIHRvcFRpbWVVcGRhdGU6ICd0aW1ldXBkYXRlJyxcbiAgdG9wVG91Y2hDYW5jZWw6ICd0b3VjaGNhbmNlbCcsXG4gIHRvcFRvdWNoRW5kOiAndG91Y2hlbmQnLFxuICB0b3BUb3VjaE1vdmU6ICd0b3VjaG1vdmUnLFxuICB0b3BUb3VjaFN0YXJ0OiAndG91Y2hzdGFydCcsXG4gIHRvcFRyYW5zaXRpb25FbmQ6IGdldFZlbmRvclByZWZpeGVkRXZlbnROYW1lKCd0cmFuc2l0aW9uZW5kJykgfHwgJ3RyYW5zaXRpb25lbmQnLFxuICB0b3BWb2x1bWVDaGFuZ2U6ICd2b2x1bWVjaGFuZ2UnLFxuICB0b3BXYWl0aW5nOiAnd2FpdGluZycsXG4gIHRvcFdoZWVsOiAnd2hlZWwnXG59O1xuXG4vKipcbiAqIFRvIGVuc3VyZSBubyBjb25mbGljdHMgd2l0aCBvdGhlciBwb3RlbnRpYWwgUmVhY3QgaW5zdGFuY2VzIG9uIHRoZSBwYWdlXG4gKi9cbnZhciB0b3BMaXN0ZW5lcnNJREtleSA9ICdfcmVhY3RMaXN0ZW5lcnNJRCcgKyBTdHJpbmcoTWF0aC5yYW5kb20oKSkuc2xpY2UoMik7XG5cbmZ1bmN0aW9uIGdldExpc3RlbmluZ0ZvckRvY3VtZW50KG1vdW50QXQpIHtcbiAgLy8gSW4gSUU4LCBgbW91bnRBdGAgaXMgYSBob3N0IG9iamVjdCBhbmQgZG9lc24ndCBoYXZlIGBoYXNPd25Qcm9wZXJ0eWBcbiAgLy8gZGlyZWN0bHkuXG4gIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vdW50QXQsIHRvcExpc3RlbmVyc0lES2V5KSkge1xuICAgIG1vdW50QXRbdG9wTGlzdGVuZXJzSURLZXldID0gcmVhY3RUb3BMaXN0ZW5lcnNDb3VudGVyKys7XG4gICAgYWxyZWFkeUxpc3RlbmluZ1RvW21vdW50QXRbdG9wTGlzdGVuZXJzSURLZXldXSA9IHt9O1xuICB9XG4gIHJldHVybiBhbHJlYWR5TGlzdGVuaW5nVG9bbW91bnRBdFt0b3BMaXN0ZW5lcnNJREtleV1dO1xufVxuXG4vKipcbiAqIGBSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXJgIGlzIHVzZWQgdG8gYXR0YWNoIHRvcC1sZXZlbCBldmVudCBsaXN0ZW5lcnMuIEZvclxuICogZXhhbXBsZTpcbiAqXG4gKiAgIEV2ZW50UGx1Z2luSHViLnB1dExpc3RlbmVyKCdteUlEJywgJ29uQ2xpY2snLCBteUZ1bmN0aW9uKTtcbiAqXG4gKiBUaGlzIHdvdWxkIGFsbG9jYXRlIGEgXCJyZWdpc3RyYXRpb25cIiBvZiBgKCdvbkNsaWNrJywgbXlGdW5jdGlvbilgIG9uICdteUlEJy5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqL1xudmFyIFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlciA9IF9hc3NpZ24oe30sIFJlYWN0RXZlbnRFbWl0dGVyTWl4aW4sIHtcbiAgLyoqXG4gICAqIEluamVjdGFibGUgZXZlbnQgYmFja2VuZFxuICAgKi9cbiAgUmVhY3RFdmVudExpc3RlbmVyOiBudWxsLFxuXG4gIGluamVjdGlvbjoge1xuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBSZWFjdEV2ZW50TGlzdGVuZXJcbiAgICAgKi9cbiAgICBpbmplY3RSZWFjdEV2ZW50TGlzdGVuZXI6IGZ1bmN0aW9uIChSZWFjdEV2ZW50TGlzdGVuZXIpIHtcbiAgICAgIFJlYWN0RXZlbnRMaXN0ZW5lci5zZXRIYW5kbGVUb3BMZXZlbChSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXIuaGFuZGxlVG9wTGV2ZWwpO1xuICAgICAgUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyLlJlYWN0RXZlbnRMaXN0ZW5lciA9IFJlYWN0RXZlbnRMaXN0ZW5lcjtcbiAgICB9XG4gIH0sXG5cbiAgLyoqXG4gICAqIFNldHMgd2hldGhlciBvciBub3QgYW55IGNyZWF0ZWQgY2FsbGJhY2tzIHNob3VsZCBiZSBlbmFibGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGVuYWJsZWQgVHJ1ZSBpZiBjYWxsYmFja3Mgc2hvdWxkIGJlIGVuYWJsZWQuXG4gICAqL1xuICBzZXRFbmFibGVkOiBmdW5jdGlvbiAoZW5hYmxlZCkge1xuICAgIGlmIChSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXIuUmVhY3RFdmVudExpc3RlbmVyKSB7XG4gICAgICBSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXIuUmVhY3RFdmVudExpc3RlbmVyLnNldEVuYWJsZWQoZW5hYmxlZCk7XG4gICAgfVxuICB9LFxuXG4gIC8qKlxuICAgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIGNhbGxiYWNrcyBhcmUgZW5hYmxlZC5cbiAgICovXG4gIGlzRW5hYmxlZDogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiAhIShSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXIuUmVhY3RFdmVudExpc3RlbmVyICYmIFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlci5SZWFjdEV2ZW50TGlzdGVuZXIuaXNFbmFibGVkKCkpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBXZSBsaXN0ZW4gZm9yIGJ1YmJsZWQgdG91Y2ggZXZlbnRzIG9uIHRoZSBkb2N1bWVudCBvYmplY3QuXG4gICAqXG4gICAqIEZpcmVmb3ggdjguMDEgKGFuZCBwb3NzaWJseSBvdGhlcnMpIGV4aGliaXRlZCBzdHJhbmdlIGJlaGF2aW9yIHdoZW5cbiAgICogbW91bnRpbmcgYG9ubW91c2Vtb3ZlYCBldmVudHMgYXQgc29tZSBub2RlIHRoYXQgd2FzIG5vdCB0aGUgZG9jdW1lbnRcbiAgICogZWxlbWVudC4gVGhlIHN5bXB0b21zIHdlcmUgdGhhdCBpZiB5b3VyIG1vdXNlIGlzIG5vdCBtb3Zpbmcgb3ZlciBzb21ldGhpbmdcbiAgICogY29udGFpbmVkIHdpdGhpbiB0aGF0IG1vdW50IHBvaW50IChmb3IgZXhhbXBsZSBvbiB0aGUgYmFja2dyb3VuZCkgdGhlXG4gICAqIHRvcC1sZXZlbCBsaXN0ZW5lcnMgZm9yIGBvbm1vdXNlbW92ZWAgd29uJ3QgYmUgY2FsbGVkLiBIb3dldmVyLCBpZiB5b3VcbiAgICogcmVnaXN0ZXIgdGhlIGBtb3VzZW1vdmVgIG9uIHRoZSBkb2N1bWVudCBvYmplY3QsIHRoZW4gaXQgd2lsbCBvZiBjb3Vyc2VcbiAgICogY2F0Y2ggYWxsIGBtb3VzZW1vdmVgcy4gVGhpcyBhbG9uZyB3aXRoIGlPUyBxdWlya3MsIGp1c3RpZmllcyByZXN0cmljdGluZ1xuICAgKiB0b3AtbGV2ZWwgbGlzdGVuZXJzIHRvIHRoZSBkb2N1bWVudCBvYmplY3Qgb25seSwgYXQgbGVhc3QgZm9yIHRoZXNlXG4gICAqIG1vdmVtZW50IHR5cGVzIG9mIGV2ZW50cyBhbmQgcG9zc2libHkgYWxsIGV2ZW50cy5cbiAgICpcbiAgICogQHNlZSBodHRwOi8vd3d3LnF1aXJrc21vZGUub3JnL2Jsb2cvYXJjaGl2ZXMvMjAxMC8wOS9jbGlja19ldmVudF9kZWwuaHRtbFxuICAgKlxuICAgKiBBbHNvLCBga2V5dXBgL2BrZXlwcmVzc2AvYGtleWRvd25gIGRvIG5vdCBidWJibGUgdG8gdGhlIHdpbmRvdyBvbiBJRSwgYnV0XG4gICAqIHRoZXkgYnViYmxlIHRvIGRvY3VtZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcmVnaXN0cmF0aW9uTmFtZSBOYW1lIG9mIGxpc3RlbmVyIChlLmcuIGBvbkNsaWNrYCkuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBjb250ZW50RG9jdW1lbnRIYW5kbGUgRG9jdW1lbnQgd2hpY2ggb3ducyB0aGUgY29udGFpbmVyXG4gICAqL1xuICBsaXN0ZW5UbzogZnVuY3Rpb24gKHJlZ2lzdHJhdGlvbk5hbWUsIGNvbnRlbnREb2N1bWVudEhhbmRsZSkge1xuICAgIHZhciBtb3VudEF0ID0gY29udGVudERvY3VtZW50SGFuZGxlO1xuICAgIHZhciBpc0xpc3RlbmluZyA9IGdldExpc3RlbmluZ0ZvckRvY3VtZW50KG1vdW50QXQpO1xuICAgIHZhciBkZXBlbmRlbmNpZXMgPSBFdmVudFBsdWdpblJlZ2lzdHJ5LnJlZ2lzdHJhdGlvbk5hbWVEZXBlbmRlbmNpZXNbcmVnaXN0cmF0aW9uTmFtZV07XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRlcGVuZGVuY2llcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGRlcGVuZGVuY3kgPSBkZXBlbmRlbmNpZXNbaV07XG4gICAgICBpZiAoIShpc0xpc3RlbmluZy5oYXNPd25Qcm9wZXJ0eShkZXBlbmRlbmN5KSAmJiBpc0xpc3RlbmluZ1tkZXBlbmRlbmN5XSkpIHtcbiAgICAgICAgaWYgKGRlcGVuZGVuY3kgPT09ICd0b3BXaGVlbCcpIHtcbiAgICAgICAgICBpZiAoaXNFdmVudFN1cHBvcnRlZCgnd2hlZWwnKSkge1xuICAgICAgICAgICAgUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyLlJlYWN0RXZlbnRMaXN0ZW5lci50cmFwQnViYmxlZEV2ZW50KCd0b3BXaGVlbCcsICd3aGVlbCcsIG1vdW50QXQpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoaXNFdmVudFN1cHBvcnRlZCgnbW91c2V3aGVlbCcpKSB7XG4gICAgICAgICAgICBSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXIuUmVhY3RFdmVudExpc3RlbmVyLnRyYXBCdWJibGVkRXZlbnQoJ3RvcFdoZWVsJywgJ21vdXNld2hlZWwnLCBtb3VudEF0KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gRmlyZWZveCBuZWVkcyB0byBjYXB0dXJlIGEgZGlmZmVyZW50IG1vdXNlIHNjcm9sbCBldmVudC5cbiAgICAgICAgICAgIC8vIEBzZWUgaHR0cDovL3d3dy5xdWlya3Ntb2RlLm9yZy9kb20vZXZlbnRzL3Rlc3RzL3Njcm9sbC5odG1sXG4gICAgICAgICAgICBSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXIuUmVhY3RFdmVudExpc3RlbmVyLnRyYXBCdWJibGVkRXZlbnQoJ3RvcFdoZWVsJywgJ0RPTU1vdXNlU2Nyb2xsJywgbW91bnRBdCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGRlcGVuZGVuY3kgPT09ICd0b3BTY3JvbGwnKSB7XG4gICAgICAgICAgaWYgKGlzRXZlbnRTdXBwb3J0ZWQoJ3Njcm9sbCcsIHRydWUpKSB7XG4gICAgICAgICAgICBSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXIuUmVhY3RFdmVudExpc3RlbmVyLnRyYXBDYXB0dXJlZEV2ZW50KCd0b3BTY3JvbGwnLCAnc2Nyb2xsJywgbW91bnRBdCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlci5SZWFjdEV2ZW50TGlzdGVuZXIudHJhcEJ1YmJsZWRFdmVudCgndG9wU2Nyb2xsJywgJ3Njcm9sbCcsIFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlci5SZWFjdEV2ZW50TGlzdGVuZXIuV0lORE9XX0hBTkRMRSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGRlcGVuZGVuY3kgPT09ICd0b3BGb2N1cycgfHwgZGVwZW5kZW5jeSA9PT0gJ3RvcEJsdXInKSB7XG4gICAgICAgICAgaWYgKGlzRXZlbnRTdXBwb3J0ZWQoJ2ZvY3VzJywgdHJ1ZSkpIHtcbiAgICAgICAgICAgIFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlci5SZWFjdEV2ZW50TGlzdGVuZXIudHJhcENhcHR1cmVkRXZlbnQoJ3RvcEZvY3VzJywgJ2ZvY3VzJywgbW91bnRBdCk7XG4gICAgICAgICAgICBSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXIuUmVhY3RFdmVudExpc3RlbmVyLnRyYXBDYXB0dXJlZEV2ZW50KCd0b3BCbHVyJywgJ2JsdXInLCBtb3VudEF0KTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGlzRXZlbnRTdXBwb3J0ZWQoJ2ZvY3VzaW4nKSkge1xuICAgICAgICAgICAgLy8gSUUgaGFzIGBmb2N1c2luYCBhbmQgYGZvY3Vzb3V0YCBldmVudHMgd2hpY2ggYnViYmxlLlxuICAgICAgICAgICAgLy8gQHNlZSBodHRwOi8vd3d3LnF1aXJrc21vZGUub3JnL2Jsb2cvYXJjaGl2ZXMvMjAwOC8wNC9kZWxlZ2F0aW5nX3RoZS5odG1sXG4gICAgICAgICAgICBSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXIuUmVhY3RFdmVudExpc3RlbmVyLnRyYXBCdWJibGVkRXZlbnQoJ3RvcEZvY3VzJywgJ2ZvY3VzaW4nLCBtb3VudEF0KTtcbiAgICAgICAgICAgIFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlci5SZWFjdEV2ZW50TGlzdGVuZXIudHJhcEJ1YmJsZWRFdmVudCgndG9wQmx1cicsICdmb2N1c291dCcsIG1vdW50QXQpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIHRvIG1ha2Ugc3VyZSBibHVyIGFuZCBmb2N1cyBldmVudCBsaXN0ZW5lcnMgYXJlIG9ubHkgYXR0YWNoZWQgb25jZVxuICAgICAgICAgIGlzTGlzdGVuaW5nLnRvcEJsdXIgPSB0cnVlO1xuICAgICAgICAgIGlzTGlzdGVuaW5nLnRvcEZvY3VzID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmICh0b3BFdmVudE1hcHBpbmcuaGFzT3duUHJvcGVydHkoZGVwZW5kZW5jeSkpIHtcbiAgICAgICAgICBSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXIuUmVhY3RFdmVudExpc3RlbmVyLnRyYXBCdWJibGVkRXZlbnQoZGVwZW5kZW5jeSwgdG9wRXZlbnRNYXBwaW5nW2RlcGVuZGVuY3ldLCBtb3VudEF0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlzTGlzdGVuaW5nW2RlcGVuZGVuY3ldID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgdHJhcEJ1YmJsZWRFdmVudDogZnVuY3Rpb24gKHRvcExldmVsVHlwZSwgaGFuZGxlckJhc2VOYW1lLCBoYW5kbGUpIHtcbiAgICByZXR1cm4gUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyLlJlYWN0RXZlbnRMaXN0ZW5lci50cmFwQnViYmxlZEV2ZW50KHRvcExldmVsVHlwZSwgaGFuZGxlckJhc2VOYW1lLCBoYW5kbGUpO1xuICB9LFxuXG4gIHRyYXBDYXB0dXJlZEV2ZW50OiBmdW5jdGlvbiAodG9wTGV2ZWxUeXBlLCBoYW5kbGVyQmFzZU5hbWUsIGhhbmRsZSkge1xuICAgIHJldHVybiBSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXIuUmVhY3RFdmVudExpc3RlbmVyLnRyYXBDYXB0dXJlZEV2ZW50KHRvcExldmVsVHlwZSwgaGFuZGxlckJhc2VOYW1lLCBoYW5kbGUpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBQcm90ZWN0IGFnYWluc3QgZG9jdW1lbnQuY3JlYXRlRXZlbnQoKSByZXR1cm5pbmcgbnVsbFxuICAgKiBTb21lIHBvcHVwIGJsb2NrZXIgZXh0ZW5zaW9ucyBhcHBlYXIgdG8gZG8gdGhpczpcbiAgICogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy82ODg3XG4gICAqL1xuICBzdXBwb3J0c0V2ZW50UGFnZVhZOiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCFkb2N1bWVudC5jcmVhdGVFdmVudCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB2YXIgZXYgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnTW91c2VFdmVudCcpO1xuICAgIHJldHVybiBldiAhPSBudWxsICYmICdwYWdlWCcgaW4gZXY7XG4gIH0sXG5cbiAgLyoqXG4gICAqIExpc3RlbnMgdG8gd2luZG93IHNjcm9sbCBhbmQgcmVzaXplIGV2ZW50cy4gV2UgY2FjaGUgc2Nyb2xsIHZhbHVlcyBzbyB0aGF0XG4gICAqIGFwcGxpY2F0aW9uIGNvZGUgY2FuIGFjY2VzcyB0aGVtIHdpdGhvdXQgdHJpZ2dlcmluZyByZWZsb3dzLlxuICAgKlxuICAgKiBWaWV3cG9ydE1ldHJpY3MgaXMgb25seSB1c2VkIGJ5IFN5bnRoZXRpY01vdXNlL1RvdWNoRXZlbnQgYW5kIG9ubHkgd2hlblxuICAgKiBwYWdlWC9wYWdlWSBpc24ndCBzdXBwb3J0ZWQgKGxlZ2FjeSBicm93c2VycykuXG4gICAqXG4gICAqIE5PVEU6IFNjcm9sbCBldmVudHMgZG8gbm90IGJ1YmJsZS5cbiAgICpcbiAgICogQHNlZSBodHRwOi8vd3d3LnF1aXJrc21vZGUub3JnL2RvbS9ldmVudHMvc2Nyb2xsLmh0bWxcbiAgICovXG4gIGVuc3VyZVNjcm9sbFZhbHVlTW9uaXRvcmluZzogZnVuY3Rpb24gKCkge1xuICAgIGlmIChoYXNFdmVudFBhZ2VYWSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBoYXNFdmVudFBhZ2VYWSA9IFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlci5zdXBwb3J0c0V2ZW50UGFnZVhZKCk7XG4gICAgfVxuICAgIGlmICghaGFzRXZlbnRQYWdlWFkgJiYgIWlzTW9uaXRvcmluZ1Njcm9sbFZhbHVlKSB7XG4gICAgICB2YXIgcmVmcmVzaCA9IFZpZXdwb3J0TWV0cmljcy5yZWZyZXNoU2Nyb2xsVmFsdWVzO1xuICAgICAgUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyLlJlYWN0RXZlbnRMaXN0ZW5lci5tb25pdG9yU2Nyb2xsVmFsdWUocmVmcmVzaCk7XG4gICAgICBpc01vbml0b3JpbmdTY3JvbGxWYWx1ZSA9IHRydWU7XG4gICAgfVxuICB9XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXI7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1kb20vbGliL1JlYWN0QnJvd3NlckV2ZW50RW1pdHRlci5qcyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBTeW50aGV0aWNVSUV2ZW50ID0gcmVxdWlyZSgnLi9TeW50aGV0aWNVSUV2ZW50Jyk7XG52YXIgVmlld3BvcnRNZXRyaWNzID0gcmVxdWlyZSgnLi9WaWV3cG9ydE1ldHJpY3MnKTtcblxudmFyIGdldEV2ZW50TW9kaWZpZXJTdGF0ZSA9IHJlcXVpcmUoJy4vZ2V0RXZlbnRNb2RpZmllclN0YXRlJyk7XG5cbi8qKlxuICogQGludGVyZmFjZSBNb3VzZUV2ZW50XG4gKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0zLUV2ZW50cy9cbiAqL1xudmFyIE1vdXNlRXZlbnRJbnRlcmZhY2UgPSB7XG4gIHNjcmVlblg6IG51bGwsXG4gIHNjcmVlblk6IG51bGwsXG4gIGNsaWVudFg6IG51bGwsXG4gIGNsaWVudFk6IG51bGwsXG4gIGN0cmxLZXk6IG51bGwsXG4gIHNoaWZ0S2V5OiBudWxsLFxuICBhbHRLZXk6IG51bGwsXG4gIG1ldGFLZXk6IG51bGwsXG4gIGdldE1vZGlmaWVyU3RhdGU6IGdldEV2ZW50TW9kaWZpZXJTdGF0ZSxcbiAgYnV0dG9uOiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAvLyBXZWJraXQsIEZpcmVmb3gsIElFOStcbiAgICAvLyB3aGljaDogIDEgMiAzXG4gICAgLy8gYnV0dG9uOiAwIDEgMiAoc3RhbmRhcmQpXG4gICAgdmFyIGJ1dHRvbiA9IGV2ZW50LmJ1dHRvbjtcbiAgICBpZiAoJ3doaWNoJyBpbiBldmVudCkge1xuICAgICAgcmV0dXJuIGJ1dHRvbjtcbiAgICB9XG4gICAgLy8gSUU8OVxuICAgIC8vIHdoaWNoOiAgdW5kZWZpbmVkXG4gICAgLy8gYnV0dG9uOiAwIDAgMFxuICAgIC8vIGJ1dHRvbjogMSA0IDIgKG9ubW91c2V1cClcbiAgICByZXR1cm4gYnV0dG9uID09PSAyID8gMiA6IGJ1dHRvbiA9PT0gNCA/IDEgOiAwO1xuICB9LFxuICBidXR0b25zOiBudWxsLFxuICByZWxhdGVkVGFyZ2V0OiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICByZXR1cm4gZXZlbnQucmVsYXRlZFRhcmdldCB8fCAoZXZlbnQuZnJvbUVsZW1lbnQgPT09IGV2ZW50LnNyY0VsZW1lbnQgPyBldmVudC50b0VsZW1lbnQgOiBldmVudC5mcm9tRWxlbWVudCk7XG4gIH0sXG4gIC8vIFwiUHJvcHJpZXRhcnlcIiBJbnRlcmZhY2UuXG4gIHBhZ2VYOiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICByZXR1cm4gJ3BhZ2VYJyBpbiBldmVudCA/IGV2ZW50LnBhZ2VYIDogZXZlbnQuY2xpZW50WCArIFZpZXdwb3J0TWV0cmljcy5jdXJyZW50U2Nyb2xsTGVmdDtcbiAgfSxcbiAgcGFnZVk6IGZ1bmN0aW9uIChldmVudCkge1xuICAgIHJldHVybiAncGFnZVknIGluIGV2ZW50ID8gZXZlbnQucGFnZVkgOiBldmVudC5jbGllbnRZICsgVmlld3BvcnRNZXRyaWNzLmN1cnJlbnRTY3JvbGxUb3A7XG4gIH1cbn07XG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IGRpc3BhdGNoQ29uZmlnIENvbmZpZ3VyYXRpb24gdXNlZCB0byBkaXNwYXRjaCB0aGlzIGV2ZW50LlxuICogQHBhcmFtIHtzdHJpbmd9IGRpc3BhdGNoTWFya2VyIE1hcmtlciBpZGVudGlmeWluZyB0aGUgZXZlbnQgdGFyZ2V0LlxuICogQHBhcmFtIHtvYmplY3R9IG5hdGl2ZUV2ZW50IE5hdGl2ZSBicm93c2VyIGV2ZW50LlxuICogQGV4dGVuZHMge1N5bnRoZXRpY1VJRXZlbnR9XG4gKi9cbmZ1bmN0aW9uIFN5bnRoZXRpY01vdXNlRXZlbnQoZGlzcGF0Y2hDb25maWcsIGRpc3BhdGNoTWFya2VyLCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpIHtcbiAgcmV0dXJuIFN5bnRoZXRpY1VJRXZlbnQuY2FsbCh0aGlzLCBkaXNwYXRjaENvbmZpZywgZGlzcGF0Y2hNYXJrZXIsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCk7XG59XG5cblN5bnRoZXRpY1VJRXZlbnQuYXVnbWVudENsYXNzKFN5bnRoZXRpY01vdXNlRXZlbnQsIE1vdXNlRXZlbnRJbnRlcmZhY2UpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN5bnRoZXRpY01vdXNlRXZlbnQ7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1kb20vbGliL1N5bnRoZXRpY01vdXNlRXZlbnQuanMiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBfcHJvZEludmFyaWFudCA9IHJlcXVpcmUoJy4vcmVhY3RQcm9kSW52YXJpYW50Jyk7XG5cbnZhciBpbnZhcmlhbnQgPSByZXF1aXJlKCdmYmpzL2xpYi9pbnZhcmlhbnQnKTtcblxudmFyIE9CU0VSVkVEX0VSUk9SID0ge307XG5cbi8qKlxuICogYFRyYW5zYWN0aW9uYCBjcmVhdGVzIGEgYmxhY2sgYm94IHRoYXQgaXMgYWJsZSB0byB3cmFwIGFueSBtZXRob2Qgc3VjaCB0aGF0XG4gKiBjZXJ0YWluIGludmFyaWFudHMgYXJlIG1haW50YWluZWQgYmVmb3JlIGFuZCBhZnRlciB0aGUgbWV0aG9kIGlzIGludm9rZWRcbiAqIChFdmVuIGlmIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24gd2hpbGUgaW52b2tpbmcgdGhlIHdyYXBwZWQgbWV0aG9kKS4gV2hvZXZlclxuICogaW5zdGFudGlhdGVzIGEgdHJhbnNhY3Rpb24gY2FuIHByb3ZpZGUgZW5mb3JjZXJzIG9mIHRoZSBpbnZhcmlhbnRzIGF0XG4gKiBjcmVhdGlvbiB0aW1lLiBUaGUgYFRyYW5zYWN0aW9uYCBjbGFzcyBpdHNlbGYgd2lsbCBzdXBwbHkgb25lIGFkZGl0aW9uYWxcbiAqIGF1dG9tYXRpYyBpbnZhcmlhbnQgZm9yIHlvdSAtIHRoZSBpbnZhcmlhbnQgdGhhdCBhbnkgdHJhbnNhY3Rpb24gaW5zdGFuY2VcbiAqIHNob3VsZCBub3QgYmUgcnVuIHdoaWxlIGl0IGlzIGFscmVhZHkgYmVpbmcgcnVuLiBZb3Ugd291bGQgdHlwaWNhbGx5IGNyZWF0ZSBhXG4gKiBzaW5nbGUgaW5zdGFuY2Ugb2YgYSBgVHJhbnNhY3Rpb25gIGZvciByZXVzZSBtdWx0aXBsZSB0aW1lcywgdGhhdCBwb3RlbnRpYWxseVxuICogaXMgdXNlZCB0byB3cmFwIHNldmVyYWwgZGlmZmVyZW50IG1ldGhvZHMuIFdyYXBwZXJzIGFyZSBleHRyZW1lbHkgc2ltcGxlIC1cbiAqIHRoZXkgb25seSByZXF1aXJlIGltcGxlbWVudGluZyB0d28gbWV0aG9kcy5cbiAqXG4gKiA8cHJlPlxuICogICAgICAgICAgICAgICAgICAgICAgIHdyYXBwZXJzIChpbmplY3RlZCBhdCBjcmVhdGlvbiB0aW1lKVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgICAgICAgICtcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICB8XG4gKiAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tK1xuICogICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgIHYgICAgICAgIHwgICAgICAgICAgICAgIHxcbiAqICAgICAgICAgICAgICAgICAgICB8ICAgICAgKy0tLS0tLS0tLS0tLS0tLSsgICB8ICAgICAgICAgICAgICB8XG4gKiAgICAgICAgICAgICAgICAgICAgfCAgICstLXwgICAgd3JhcHBlcjEgICB8LS0tfC0tLS0rICAgICAgICAgfFxuICogICAgICAgICAgICAgICAgICAgIHwgICB8ICArLS0tLS0tLS0tLS0tLS0tKyAgIHYgICAgfCAgICAgICAgIHxcbiAqICAgICAgICAgICAgICAgICAgICB8ICAgfCAgICAgICAgICArLS0tLS0tLS0tLS0tLSsgIHwgICAgICAgICB8XG4gKiAgICAgICAgICAgICAgICAgICAgfCAgIHwgICAgICstLS0tfCAgIHdyYXBwZXIyICB8LS0tLS0tLS0rICAgfFxuICogICAgICAgICAgICAgICAgICAgIHwgICB8ICAgICB8ICAgICstLS0tLS0tLS0tLS0tKyAgfCAgICAgfCAgIHxcbiAqICAgICAgICAgICAgICAgICAgICB8ICAgfCAgICAgfCAgICAgICAgICAgICAgICAgICAgIHwgICAgIHwgICB8XG4gKiAgICAgICAgICAgICAgICAgICAgfCAgIHYgICAgIHYgICAgICAgICAgICAgICAgICAgICB2ICAgICB2ICAgfCB3cmFwcGVyXG4gKiAgICAgICAgICAgICAgICAgICAgfCArLS0tKyArLS0tKyAgICstLS0tLS0tLS0rICAgKy0tLSsgKy0tLSsgfCBpbnZhcmlhbnRzXG4gKiBwZXJmb3JtKGFueU1ldGhvZCkgfCB8ICAgfCB8ICAgfCAgIHwgICAgICAgICB8ICAgfCAgIHwgfCAgIHwgfCBtYWludGFpbmVkXG4gKiArLS0tLS0tLS0tLS0tLS0tLS0+fC18LS0tfC18LS0tfC0tPnxhbnlNZXRob2R8LS0tfC0tLXwtfC0tLXwtfC0tLS0tLS0tPlxuICogICAgICAgICAgICAgICAgICAgIHwgfCAgIHwgfCAgIHwgICB8ICAgICAgICAgfCAgIHwgICB8IHwgICB8IHxcbiAqICAgICAgICAgICAgICAgICAgICB8IHwgICB8IHwgICB8ICAgfCAgICAgICAgIHwgICB8ICAgfCB8ICAgfCB8XG4gKiAgICAgICAgICAgICAgICAgICAgfCB8ICAgfCB8ICAgfCAgIHwgICAgICAgICB8ICAgfCAgIHwgfCAgIHwgfFxuICogICAgICAgICAgICAgICAgICAgIHwgKy0tLSsgKy0tLSsgICArLS0tLS0tLS0tKyAgICstLS0rICstLS0rIHxcbiAqICAgICAgICAgICAgICAgICAgICB8ICBpbml0aWFsaXplICAgICAgICAgICAgICAgICAgICBjbG9zZSAgICB8XG4gKiAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICogPC9wcmU+XG4gKlxuICogVXNlIGNhc2VzOlxuICogLSBQcmVzZXJ2aW5nIHRoZSBpbnB1dCBzZWxlY3Rpb24gcmFuZ2VzIGJlZm9yZS9hZnRlciByZWNvbmNpbGlhdGlvbi5cbiAqICAgUmVzdG9yaW5nIHNlbGVjdGlvbiBldmVuIGluIHRoZSBldmVudCBvZiBhbiB1bmV4cGVjdGVkIGVycm9yLlxuICogLSBEZWFjdGl2YXRpbmcgZXZlbnRzIHdoaWxlIHJlYXJyYW5naW5nIHRoZSBET00sIHByZXZlbnRpbmcgYmx1cnMvZm9jdXNlcyxcbiAqICAgd2hpbGUgZ3VhcmFudGVlaW5nIHRoYXQgYWZ0ZXJ3YXJkcywgdGhlIGV2ZW50IHN5c3RlbSBpcyByZWFjdGl2YXRlZC5cbiAqIC0gRmx1c2hpbmcgYSBxdWV1ZSBvZiBjb2xsZWN0ZWQgRE9NIG11dGF0aW9ucyB0byB0aGUgbWFpbiBVSSB0aHJlYWQgYWZ0ZXIgYVxuICogICByZWNvbmNpbGlhdGlvbiB0YWtlcyBwbGFjZSBpbiBhIHdvcmtlciB0aHJlYWQuXG4gKiAtIEludm9raW5nIGFueSBjb2xsZWN0ZWQgYGNvbXBvbmVudERpZFVwZGF0ZWAgY2FsbGJhY2tzIGFmdGVyIHJlbmRlcmluZyBuZXdcbiAqICAgY29udGVudC5cbiAqIC0gKEZ1dHVyZSB1c2UgY2FzZSk6IFdyYXBwaW5nIHBhcnRpY3VsYXIgZmx1c2hlcyBvZiB0aGUgYFJlYWN0V29ya2VyYCBxdWV1ZVxuICogICB0byBwcmVzZXJ2ZSB0aGUgYHNjcm9sbFRvcGAgKGFuIGF1dG9tYXRpYyBzY3JvbGwgYXdhcmUgRE9NKS5cbiAqIC0gKEZ1dHVyZSB1c2UgY2FzZSk6IExheW91dCBjYWxjdWxhdGlvbnMgYmVmb3JlIGFuZCBhZnRlciBET00gdXBkYXRlcy5cbiAqXG4gKiBUcmFuc2FjdGlvbmFsIHBsdWdpbiBBUEk6XG4gKiAtIEEgbW9kdWxlIHRoYXQgaGFzIGFuIGBpbml0aWFsaXplYCBtZXRob2QgdGhhdCByZXR1cm5zIGFueSBwcmVjb21wdXRhdGlvbi5cbiAqIC0gYW5kIGEgYGNsb3NlYCBtZXRob2QgdGhhdCBhY2NlcHRzIHRoZSBwcmVjb21wdXRhdGlvbi4gYGNsb3NlYCBpcyBpbnZva2VkXG4gKiAgIHdoZW4gdGhlIHdyYXBwZWQgcHJvY2VzcyBpcyBjb21wbGV0ZWQsIG9yIGhhcyBmYWlsZWQuXG4gKlxuICogQHBhcmFtIHtBcnJheTxUcmFuc2FjdGlvbmFsV3JhcHBlcj59IHRyYW5zYWN0aW9uV3JhcHBlciBXcmFwcGVyIG1vZHVsZXNcbiAqIHRoYXQgaW1wbGVtZW50IGBpbml0aWFsaXplYCBhbmQgYGNsb3NlYC5cbiAqIEByZXR1cm4ge1RyYW5zYWN0aW9ufSBTaW5nbGUgdHJhbnNhY3Rpb24gZm9yIHJldXNlIGluIHRocmVhZC5cbiAqXG4gKiBAY2xhc3MgVHJhbnNhY3Rpb25cbiAqL1xudmFyIFRyYW5zYWN0aW9uSW1wbCA9IHtcbiAgLyoqXG4gICAqIFNldHMgdXAgdGhpcyBpbnN0YW5jZSBzbyB0aGF0IGl0IGlzIHByZXBhcmVkIGZvciBjb2xsZWN0aW5nIG1ldHJpY3MuIERvZXNcbiAgICogc28gc3VjaCB0aGF0IHRoaXMgc2V0dXAgbWV0aG9kIG1heSBiZSB1c2VkIG9uIGFuIGluc3RhbmNlIHRoYXQgaXMgYWxyZWFkeVxuICAgKiBpbml0aWFsaXplZCwgaW4gYSB3YXkgdGhhdCBkb2VzIG5vdCBjb25zdW1lIGFkZGl0aW9uYWwgbWVtb3J5IHVwb24gcmV1c2UuXG4gICAqIFRoYXQgY2FuIGJlIHVzZWZ1bCBpZiB5b3UgZGVjaWRlIHRvIG1ha2UgeW91ciBzdWJjbGFzcyBvZiB0aGlzIG1peGluIGFcbiAgICogXCJQb29sZWRDbGFzc1wiLlxuICAgKi9cbiAgcmVpbml0aWFsaXplVHJhbnNhY3Rpb246IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLnRyYW5zYWN0aW9uV3JhcHBlcnMgPSB0aGlzLmdldFRyYW5zYWN0aW9uV3JhcHBlcnMoKTtcbiAgICBpZiAodGhpcy53cmFwcGVySW5pdERhdGEpIHtcbiAgICAgIHRoaXMud3JhcHBlckluaXREYXRhLmxlbmd0aCA9IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMud3JhcHBlckluaXREYXRhID0gW107XG4gICAgfVxuICAgIHRoaXMuX2lzSW5UcmFuc2FjdGlvbiA9IGZhbHNlO1xuICB9LFxuXG4gIF9pc0luVHJhbnNhY3Rpb246IGZhbHNlLFxuXG4gIC8qKlxuICAgKiBAYWJzdHJhY3RcbiAgICogQHJldHVybiB7QXJyYXk8VHJhbnNhY3Rpb25XcmFwcGVyPn0gQXJyYXkgb2YgdHJhbnNhY3Rpb24gd3JhcHBlcnMuXG4gICAqL1xuICBnZXRUcmFuc2FjdGlvbldyYXBwZXJzOiBudWxsLFxuXG4gIGlzSW5UcmFuc2FjdGlvbjogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiAhIXRoaXMuX2lzSW5UcmFuc2FjdGlvbjtcbiAgfSxcblxuICAvKiBlc2xpbnQtZGlzYWJsZSBzcGFjZS1iZWZvcmUtZnVuY3Rpb24tcGFyZW4gKi9cblxuICAvKipcbiAgICogRXhlY3V0ZXMgdGhlIGZ1bmN0aW9uIHdpdGhpbiBhIHNhZmV0eSB3aW5kb3cuIFVzZSB0aGlzIGZvciB0aGUgdG9wIGxldmVsXG4gICAqIG1ldGhvZHMgdGhhdCByZXN1bHQgaW4gbGFyZ2UgYW1vdW50cyBvZiBjb21wdXRhdGlvbi9tdXRhdGlvbnMgdGhhdCB3b3VsZFxuICAgKiBuZWVkIHRvIGJlIHNhZmV0eSBjaGVja2VkLiBUaGUgb3B0aW9uYWwgYXJndW1lbnRzIGhlbHBzIHByZXZlbnQgdGhlIG5lZWRcbiAgICogdG8gYmluZCBpbiBtYW55IGNhc2VzLlxuICAgKlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBtZXRob2QgTWVtYmVyIG9mIHNjb3BlIHRvIGNhbGwuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBzY29wZSBTY29wZSB0byBpbnZva2UgZnJvbS5cbiAgICogQHBhcmFtIHtPYmplY3Q/PX0gYSBBcmd1bWVudCB0byBwYXNzIHRvIHRoZSBtZXRob2QuXG4gICAqIEBwYXJhbSB7T2JqZWN0Pz19IGIgQXJndW1lbnQgdG8gcGFzcyB0byB0aGUgbWV0aG9kLlxuICAgKiBAcGFyYW0ge09iamVjdD89fSBjIEFyZ3VtZW50IHRvIHBhc3MgdG8gdGhlIG1ldGhvZC5cbiAgICogQHBhcmFtIHtPYmplY3Q/PX0gZCBBcmd1bWVudCB0byBwYXNzIHRvIHRoZSBtZXRob2QuXG4gICAqIEBwYXJhbSB7T2JqZWN0Pz19IGUgQXJndW1lbnQgdG8gcGFzcyB0byB0aGUgbWV0aG9kLlxuICAgKiBAcGFyYW0ge09iamVjdD89fSBmIEFyZ3VtZW50IHRvIHBhc3MgdG8gdGhlIG1ldGhvZC5cbiAgICpcbiAgICogQHJldHVybiB7Kn0gUmV0dXJuIHZhbHVlIGZyb20gYG1ldGhvZGAuXG4gICAqL1xuICBwZXJmb3JtOiBmdW5jdGlvbiAobWV0aG9kLCBzY29wZSwgYSwgYiwgYywgZCwgZSwgZikge1xuICAgIC8qIGVzbGludC1lbmFibGUgc3BhY2UtYmVmb3JlLWZ1bmN0aW9uLXBhcmVuICovXG4gICAgISF0aGlzLmlzSW5UcmFuc2FjdGlvbigpID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IGludmFyaWFudChmYWxzZSwgJ1RyYW5zYWN0aW9uLnBlcmZvcm0oLi4uKTogQ2Fubm90IGluaXRpYWxpemUgYSB0cmFuc2FjdGlvbiB3aGVuIHRoZXJlIGlzIGFscmVhZHkgYW4gb3V0c3RhbmRpbmcgdHJhbnNhY3Rpb24uJykgOiBfcHJvZEludmFyaWFudCgnMjcnKSA6IHZvaWQgMDtcbiAgICB2YXIgZXJyb3JUaHJvd247XG4gICAgdmFyIHJldDtcbiAgICB0cnkge1xuICAgICAgdGhpcy5faXNJblRyYW5zYWN0aW9uID0gdHJ1ZTtcbiAgICAgIC8vIENhdGNoaW5nIGVycm9ycyBtYWtlcyBkZWJ1Z2dpbmcgbW9yZSBkaWZmaWN1bHQsIHNvIHdlIHN0YXJ0IHdpdGhcbiAgICAgIC8vIGVycm9yVGhyb3duIHNldCB0byB0cnVlIGJlZm9yZSBzZXR0aW5nIGl0IHRvIGZhbHNlIGFmdGVyIGNhbGxpbmdcbiAgICAgIC8vIGNsb3NlIC0tIGlmIGl0J3Mgc3RpbGwgc2V0IHRvIHRydWUgaW4gdGhlIGZpbmFsbHkgYmxvY2ssIGl0IG1lYW5zXG4gICAgICAvLyBvbmUgb2YgdGhlc2UgY2FsbHMgdGhyZXcuXG4gICAgICBlcnJvclRocm93biA9IHRydWU7XG4gICAgICB0aGlzLmluaXRpYWxpemVBbGwoMCk7XG4gICAgICByZXQgPSBtZXRob2QuY2FsbChzY29wZSwgYSwgYiwgYywgZCwgZSwgZik7XG4gICAgICBlcnJvclRocm93biA9IGZhbHNlO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoZXJyb3JUaHJvd24pIHtcbiAgICAgICAgICAvLyBJZiBgbWV0aG9kYCB0aHJvd3MsIHByZWZlciB0byBzaG93IHRoYXQgc3RhY2sgdHJhY2Ugb3ZlciBhbnkgdGhyb3duXG4gICAgICAgICAgLy8gYnkgaW52b2tpbmcgYGNsb3NlQWxsYC5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5jbG9zZUFsbCgwKTtcbiAgICAgICAgICB9IGNhdGNoIChlcnIpIHt9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gU2luY2UgYG1ldGhvZGAgZGlkbid0IHRocm93LCB3ZSBkb24ndCB3YW50IHRvIHNpbGVuY2UgdGhlIGV4Y2VwdGlvblxuICAgICAgICAgIC8vIGhlcmUuXG4gICAgICAgICAgdGhpcy5jbG9zZUFsbCgwKTtcbiAgICAgICAgfVxuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdGhpcy5faXNJblRyYW5zYWN0aW9uID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXQ7XG4gIH0sXG5cbiAgaW5pdGlhbGl6ZUFsbDogZnVuY3Rpb24gKHN0YXJ0SW5kZXgpIHtcbiAgICB2YXIgdHJhbnNhY3Rpb25XcmFwcGVycyA9IHRoaXMudHJhbnNhY3Rpb25XcmFwcGVycztcbiAgICBmb3IgKHZhciBpID0gc3RhcnRJbmRleDsgaSA8IHRyYW5zYWN0aW9uV3JhcHBlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciB3cmFwcGVyID0gdHJhbnNhY3Rpb25XcmFwcGVyc1tpXTtcbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIENhdGNoaW5nIGVycm9ycyBtYWtlcyBkZWJ1Z2dpbmcgbW9yZSBkaWZmaWN1bHQsIHNvIHdlIHN0YXJ0IHdpdGggdGhlXG4gICAgICAgIC8vIE9CU0VSVkVEX0VSUk9SIHN0YXRlIGJlZm9yZSBvdmVyd3JpdGluZyBpdCB3aXRoIHRoZSByZWFsIHJldHVybiB2YWx1ZVxuICAgICAgICAvLyBvZiBpbml0aWFsaXplIC0tIGlmIGl0J3Mgc3RpbGwgc2V0IHRvIE9CU0VSVkVEX0VSUk9SIGluIHRoZSBmaW5hbGx5XG4gICAgICAgIC8vIGJsb2NrLCBpdCBtZWFucyB3cmFwcGVyLmluaXRpYWxpemUgdGhyZXcuXG4gICAgICAgIHRoaXMud3JhcHBlckluaXREYXRhW2ldID0gT0JTRVJWRURfRVJST1I7XG4gICAgICAgIHRoaXMud3JhcHBlckluaXREYXRhW2ldID0gd3JhcHBlci5pbml0aWFsaXplID8gd3JhcHBlci5pbml0aWFsaXplLmNhbGwodGhpcykgOiBudWxsO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgaWYgKHRoaXMud3JhcHBlckluaXREYXRhW2ldID09PSBPQlNFUlZFRF9FUlJPUikge1xuICAgICAgICAgIC8vIFRoZSBpbml0aWFsaXplciBmb3Igd3JhcHBlciBpIHRocmV3IGFuIGVycm9yOyBpbml0aWFsaXplIHRoZVxuICAgICAgICAgIC8vIHJlbWFpbmluZyB3cmFwcGVycyBidXQgc2lsZW5jZSBhbnkgZXhjZXB0aW9ucyBmcm9tIHRoZW0gdG8gZW5zdXJlXG4gICAgICAgICAgLy8gdGhhdCB0aGUgZmlyc3QgZXJyb3IgaXMgdGhlIG9uZSB0byBidWJibGUgdXAuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMuaW5pdGlhbGl6ZUFsbChpICsgMSk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyKSB7fVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIC8qKlxuICAgKiBJbnZva2VzIGVhY2ggb2YgYHRoaXMudHJhbnNhY3Rpb25XcmFwcGVycy5jbG9zZVtpXWAgZnVuY3Rpb25zLCBwYXNzaW5nIGludG9cbiAgICogdGhlbSB0aGUgcmVzcGVjdGl2ZSByZXR1cm4gdmFsdWVzIG9mIGB0aGlzLnRyYW5zYWN0aW9uV3JhcHBlcnMuaW5pdFtpXWBcbiAgICogKGBjbG9zZWBycyB0aGF0IGNvcnJlc3BvbmQgdG8gaW5pdGlhbGl6ZXJzIHRoYXQgZmFpbGVkIHdpbGwgbm90IGJlXG4gICAqIGludm9rZWQpLlxuICAgKi9cbiAgY2xvc2VBbGw6IGZ1bmN0aW9uIChzdGFydEluZGV4KSB7XG4gICAgIXRoaXMuaXNJblRyYW5zYWN0aW9uKCkgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAnVHJhbnNhY3Rpb24uY2xvc2VBbGwoKTogQ2Fubm90IGNsb3NlIHRyYW5zYWN0aW9uIHdoZW4gbm9uZSBhcmUgb3Blbi4nKSA6IF9wcm9kSW52YXJpYW50KCcyOCcpIDogdm9pZCAwO1xuICAgIHZhciB0cmFuc2FjdGlvbldyYXBwZXJzID0gdGhpcy50cmFuc2FjdGlvbldyYXBwZXJzO1xuICAgIGZvciAodmFyIGkgPSBzdGFydEluZGV4OyBpIDwgdHJhbnNhY3Rpb25XcmFwcGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHdyYXBwZXIgPSB0cmFuc2FjdGlvbldyYXBwZXJzW2ldO1xuICAgICAgdmFyIGluaXREYXRhID0gdGhpcy53cmFwcGVySW5pdERhdGFbaV07XG4gICAgICB2YXIgZXJyb3JUaHJvd247XG4gICAgICB0cnkge1xuICAgICAgICAvLyBDYXRjaGluZyBlcnJvcnMgbWFrZXMgZGVidWdnaW5nIG1vcmUgZGlmZmljdWx0LCBzbyB3ZSBzdGFydCB3aXRoXG4gICAgICAgIC8vIGVycm9yVGhyb3duIHNldCB0byB0cnVlIGJlZm9yZSBzZXR0aW5nIGl0IHRvIGZhbHNlIGFmdGVyIGNhbGxpbmdcbiAgICAgICAgLy8gY2xvc2UgLS0gaWYgaXQncyBzdGlsbCBzZXQgdG8gdHJ1ZSBpbiB0aGUgZmluYWxseSBibG9jaywgaXQgbWVhbnNcbiAgICAgICAgLy8gd3JhcHBlci5jbG9zZSB0aHJldy5cbiAgICAgICAgZXJyb3JUaHJvd24gPSB0cnVlO1xuICAgICAgICBpZiAoaW5pdERhdGEgIT09IE9CU0VSVkVEX0VSUk9SICYmIHdyYXBwZXIuY2xvc2UpIHtcbiAgICAgICAgICB3cmFwcGVyLmNsb3NlLmNhbGwodGhpcywgaW5pdERhdGEpO1xuICAgICAgICB9XG4gICAgICAgIGVycm9yVGhyb3duID0gZmFsc2U7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBpZiAoZXJyb3JUaHJvd24pIHtcbiAgICAgICAgICAvLyBUaGUgY2xvc2VyIGZvciB3cmFwcGVyIGkgdGhyZXcgYW4gZXJyb3I7IGNsb3NlIHRoZSByZW1haW5pbmdcbiAgICAgICAgICAvLyB3cmFwcGVycyBidXQgc2lsZW5jZSBhbnkgZXhjZXB0aW9ucyBmcm9tIHRoZW0gdG8gZW5zdXJlIHRoYXQgdGhlXG4gICAgICAgICAgLy8gZmlyc3QgZXJyb3IgaXMgdGhlIG9uZSB0byBidWJibGUgdXAuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2VBbGwoaSArIDEpO1xuICAgICAgICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy53cmFwcGVySW5pdERhdGEubGVuZ3RoID0gMDtcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBUcmFuc2FjdGlvbkltcGw7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1kb20vbGliL1RyYW5zYWN0aW9uLmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxNi1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQmFzZWQgb24gdGhlIGVzY2FwZS1odG1sIGxpYnJhcnksIHdoaWNoIGlzIHVzZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlIGJlbG93OlxuICpcbiAqIENvcHlyaWdodCAoYykgMjAxMi0yMDEzIFRKIEhvbG93YXljaHVrXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTUgQW5kcmVhcyBMdWJiZVxuICogQ29weXJpZ2h0IChjKSAyMDE1IFRpYW5jaGVuZyBcIlRpbW90aHlcIiBHdVxuICpcbiAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZ1xuICogYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4gKiAnU29mdHdhcmUnKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4gKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4gKiBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG9cbiAqIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0b1xuICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuICpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlXG4gKiBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgJ0FTIElTJywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCxcbiAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULlxuICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTllcbiAqIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsXG4gKiBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRVxuICogU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG4gKlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuLy8gY29kZSBjb3BpZWQgYW5kIG1vZGlmaWVkIGZyb20gZXNjYXBlLWh0bWxcbi8qKlxuICogTW9kdWxlIHZhcmlhYmxlcy5cbiAqIEBwcml2YXRlXG4gKi9cblxudmFyIG1hdGNoSHRtbFJlZ0V4cCA9IC9bXCInJjw+XS87XG5cbi8qKlxuICogRXNjYXBlIHNwZWNpYWwgY2hhcmFjdGVycyBpbiB0aGUgZ2l2ZW4gc3RyaW5nIG9mIGh0bWwuXG4gKlxuICogQHBhcmFtICB7c3RyaW5nfSBzdHJpbmcgVGhlIHN0cmluZyB0byBlc2NhcGUgZm9yIGluc2VydGluZyBpbnRvIEhUTUxcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqIEBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiBlc2NhcGVIdG1sKHN0cmluZykge1xuICB2YXIgc3RyID0gJycgKyBzdHJpbmc7XG4gIHZhciBtYXRjaCA9IG1hdGNoSHRtbFJlZ0V4cC5leGVjKHN0cik7XG5cbiAgaWYgKCFtYXRjaCkge1xuICAgIHJldHVybiBzdHI7XG4gIH1cblxuICB2YXIgZXNjYXBlO1xuICB2YXIgaHRtbCA9ICcnO1xuICB2YXIgaW5kZXggPSAwO1xuICB2YXIgbGFzdEluZGV4ID0gMDtcblxuICBmb3IgKGluZGV4ID0gbWF0Y2guaW5kZXg7IGluZGV4IDwgc3RyLmxlbmd0aDsgaW5kZXgrKykge1xuICAgIHN3aXRjaCAoc3RyLmNoYXJDb2RlQXQoaW5kZXgpKSB7XG4gICAgICBjYXNlIDM0OlxuICAgICAgICAvLyBcIlxuICAgICAgICBlc2NhcGUgPSAnJnF1b3Q7JztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDM4OlxuICAgICAgICAvLyAmXG4gICAgICAgIGVzY2FwZSA9ICcmYW1wOyc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAzOTpcbiAgICAgICAgLy8gJ1xuICAgICAgICBlc2NhcGUgPSAnJiN4Mjc7JzsgLy8gbW9kaWZpZWQgZnJvbSBlc2NhcGUtaHRtbDsgdXNlZCB0byBiZSAnJiMzOSdcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDYwOlxuICAgICAgICAvLyA8XG4gICAgICAgIGVzY2FwZSA9ICcmbHQ7JztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDYyOlxuICAgICAgICAvLyA+XG4gICAgICAgIGVzY2FwZSA9ICcmZ3Q7JztcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAobGFzdEluZGV4ICE9PSBpbmRleCkge1xuICAgICAgaHRtbCArPSBzdHIuc3Vic3RyaW5nKGxhc3RJbmRleCwgaW5kZXgpO1xuICAgIH1cblxuICAgIGxhc3RJbmRleCA9IGluZGV4ICsgMTtcbiAgICBodG1sICs9IGVzY2FwZTtcbiAgfVxuXG4gIHJldHVybiBsYXN0SW5kZXggIT09IGluZGV4ID8gaHRtbCArIHN0ci5zdWJzdHJpbmcobGFzdEluZGV4LCBpbmRleCkgOiBodG1sO1xufVxuLy8gZW5kIGNvZGUgY29waWVkIGFuZCBtb2RpZmllZCBmcm9tIGVzY2FwZS1odG1sXG5cbi8qKlxuICogRXNjYXBlcyB0ZXh0IHRvIHByZXZlbnQgc2NyaXB0aW5nIGF0dGFja3MuXG4gKlxuICogQHBhcmFtIHsqfSB0ZXh0IFRleHQgdmFsdWUgdG8gZXNjYXBlLlxuICogQHJldHVybiB7c3RyaW5nfSBBbiBlc2NhcGVkIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gZXNjYXBlVGV4dENvbnRlbnRGb3JCcm93c2VyKHRleHQpIHtcbiAgaWYgKHR5cGVvZiB0ZXh0ID09PSAnYm9vbGVhbicgfHwgdHlwZW9mIHRleHQgPT09ICdudW1iZXInKSB7XG4gICAgLy8gdGhpcyBzaG9ydGNpcmN1aXQgaGVscHMgcGVyZiBmb3IgdHlwZXMgdGhhdCB3ZSBrbm93IHdpbGwgbmV2ZXIgaGF2ZVxuICAgIC8vIHNwZWNpYWwgY2hhcmFjdGVycywgZXNwZWNpYWxseSBnaXZlbiB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgdXNlZCBvZnRlblxuICAgIC8vIGZvciBudW1lcmljIGRvbSBpZHMuXG4gICAgcmV0dXJuICcnICsgdGV4dDtcbiAgfVxuICByZXR1cm4gZXNjYXBlSHRtbCh0ZXh0KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBlc2NhcGVUZXh0Q29udGVudEZvckJyb3dzZXI7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1kb20vbGliL2VzY2FwZVRleHRDb250ZW50Rm9yQnJvd3Nlci5qcyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBFeGVjdXRpb25FbnZpcm9ubWVudCA9IHJlcXVpcmUoJ2ZianMvbGliL0V4ZWN1dGlvbkVudmlyb25tZW50Jyk7XG52YXIgRE9NTmFtZXNwYWNlcyA9IHJlcXVpcmUoJy4vRE9NTmFtZXNwYWNlcycpO1xuXG52YXIgV0hJVEVTUEFDRV9URVNUID0gL15bIFxcclxcblxcdFxcZl0vO1xudmFyIE5PTlZJU0lCTEVfVEVTVCA9IC88KCEtLXxsaW5rfG5vc2NyaXB0fG1ldGF8c2NyaXB0fHN0eWxlKVsgXFxyXFxuXFx0XFxmXFwvPl0vO1xuXG52YXIgY3JlYXRlTWljcm9zb2Z0VW5zYWZlTG9jYWxGdW5jdGlvbiA9IHJlcXVpcmUoJy4vY3JlYXRlTWljcm9zb2Z0VW5zYWZlTG9jYWxGdW5jdGlvbicpO1xuXG4vLyBTVkcgdGVtcCBjb250YWluZXIgZm9yIElFIGxhY2tpbmcgaW5uZXJIVE1MXG52YXIgcmV1c2FibGVTVkdDb250YWluZXI7XG5cbi8qKlxuICogU2V0IHRoZSBpbm5lckhUTUwgcHJvcGVydHkgb2YgYSBub2RlLCBlbnN1cmluZyB0aGF0IHdoaXRlc3BhY2UgaXMgcHJlc2VydmVkXG4gKiBldmVuIGluIElFOC5cbiAqXG4gKiBAcGFyYW0ge0RPTUVsZW1lbnR9IG5vZGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBodG1sXG4gKiBAaW50ZXJuYWxcbiAqL1xudmFyIHNldElubmVySFRNTCA9IGNyZWF0ZU1pY3Jvc29mdFVuc2FmZUxvY2FsRnVuY3Rpb24oZnVuY3Rpb24gKG5vZGUsIGh0bWwpIHtcbiAgLy8gSUUgZG9lcyBub3QgaGF2ZSBpbm5lckhUTUwgZm9yIFNWRyBub2Rlcywgc28gaW5zdGVhZCB3ZSBpbmplY3QgdGhlXG4gIC8vIG5ldyBtYXJrdXAgaW4gYSB0ZW1wIG5vZGUgYW5kIHRoZW4gbW92ZSB0aGUgY2hpbGQgbm9kZXMgYWNyb3NzIGludG9cbiAgLy8gdGhlIHRhcmdldCBub2RlXG4gIGlmIChub2RlLm5hbWVzcGFjZVVSSSA9PT0gRE9NTmFtZXNwYWNlcy5zdmcgJiYgISgnaW5uZXJIVE1MJyBpbiBub2RlKSkge1xuICAgIHJldXNhYmxlU1ZHQ29udGFpbmVyID0gcmV1c2FibGVTVkdDb250YWluZXIgfHwgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgcmV1c2FibGVTVkdDb250YWluZXIuaW5uZXJIVE1MID0gJzxzdmc+JyArIGh0bWwgKyAnPC9zdmc+JztcbiAgICB2YXIgc3ZnTm9kZSA9IHJldXNhYmxlU1ZHQ29udGFpbmVyLmZpcnN0Q2hpbGQ7XG4gICAgd2hpbGUgKHN2Z05vZGUuZmlyc3RDaGlsZCkge1xuICAgICAgbm9kZS5hcHBlbmRDaGlsZChzdmdOb2RlLmZpcnN0Q2hpbGQpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBub2RlLmlubmVySFRNTCA9IGh0bWw7XG4gIH1cbn0pO1xuXG5pZiAoRXhlY3V0aW9uRW52aXJvbm1lbnQuY2FuVXNlRE9NKSB7XG4gIC8vIElFODogV2hlbiB1cGRhdGluZyBhIGp1c3QgY3JlYXRlZCBub2RlIHdpdGggaW5uZXJIVE1MIG9ubHkgbGVhZGluZ1xuICAvLyB3aGl0ZXNwYWNlIGlzIHJlbW92ZWQuIFdoZW4gdXBkYXRpbmcgYW4gZXhpc3Rpbmcgbm9kZSB3aXRoIGlubmVySFRNTFxuICAvLyB3aGl0ZXNwYWNlIGluIHJvb3QgVGV4dE5vZGVzIGlzIGFsc28gY29sbGFwc2VkLlxuICAvLyBAc2VlIHF1aXJrc21vZGUub3JnL2J1Z3JlcG9ydHMvYXJjaGl2ZXMvMjAwNC8xMS9pbm5lcmh0bWxfYW5kX3QuaHRtbFxuXG4gIC8vIEZlYXR1cmUgZGV0ZWN0aW9uOyBvbmx5IElFOCBpcyBrbm93biB0byBiZWhhdmUgaW1wcm9wZXJseSBsaWtlIHRoaXMuXG4gIHZhciB0ZXN0RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICB0ZXN0RWxlbWVudC5pbm5lckhUTUwgPSAnICc7XG4gIGlmICh0ZXN0RWxlbWVudC5pbm5lckhUTUwgPT09ICcnKSB7XG4gICAgc2V0SW5uZXJIVE1MID0gZnVuY3Rpb24gKG5vZGUsIGh0bWwpIHtcbiAgICAgIC8vIE1hZ2ljIHRoZW9yeTogSUU4IHN1cHBvc2VkbHkgZGlmZmVyZW50aWF0ZXMgYmV0d2VlbiBhZGRlZCBhbmQgdXBkYXRlZFxuICAgICAgLy8gbm9kZXMgd2hlbiBwcm9jZXNzaW5nIGlubmVySFRNTCwgaW5uZXJIVE1MIG9uIHVwZGF0ZWQgbm9kZXMgc3VmZmVyc1xuICAgICAgLy8gZnJvbSB3b3JzZSB3aGl0ZXNwYWNlIGJlaGF2aW9yLiBSZS1hZGRpbmcgYSBub2RlIGxpa2UgdGhpcyB0cmlnZ2Vyc1xuICAgICAgLy8gdGhlIGluaXRpYWwgYW5kIG1vcmUgZmF2b3JhYmxlIHdoaXRlc3BhY2UgYmVoYXZpb3IuXG4gICAgICAvLyBUT0RPOiBXaGF0IHRvIGRvIG9uIGEgZGV0YWNoZWQgbm9kZT9cbiAgICAgIGlmIChub2RlLnBhcmVudE5vZGUpIHtcbiAgICAgICAgbm9kZS5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChub2RlLCBub2RlKTtcbiAgICAgIH1cblxuICAgICAgLy8gV2UgYWxzbyBpbXBsZW1lbnQgYSB3b3JrYXJvdW5kIGZvciBub24tdmlzaWJsZSB0YWdzIGRpc2FwcGVhcmluZyBpbnRvXG4gICAgICAvLyB0aGluIGFpciBvbiBJRTgsIHRoaXMgb25seSBoYXBwZW5zIGlmIHRoZXJlIGlzIG5vIHZpc2libGUgdGV4dFxuICAgICAgLy8gaW4tZnJvbnQgb2YgdGhlIG5vbi12aXNpYmxlIHRhZ3MuIFBpZ2d5YmFjayBvbiB0aGUgd2hpdGVzcGFjZSBmaXhcbiAgICAgIC8vIGFuZCBzaW1wbHkgY2hlY2sgaWYgYW55IG5vbi12aXNpYmxlIHRhZ3MgYXBwZWFyIGluIHRoZSBzb3VyY2UuXG4gICAgICBpZiAoV0hJVEVTUEFDRV9URVNULnRlc3QoaHRtbCkgfHwgaHRtbFswXSA9PT0gJzwnICYmIE5PTlZJU0lCTEVfVEVTVC50ZXN0KGh0bWwpKSB7XG4gICAgICAgIC8vIFJlY292ZXIgbGVhZGluZyB3aGl0ZXNwYWNlIGJ5IHRlbXBvcmFyaWx5IHByZXBlbmRpbmcgYW55IGNoYXJhY3Rlci5cbiAgICAgICAgLy8gXFx1RkVGRiBoYXMgdGhlIHBvdGVudGlhbCBhZHZhbnRhZ2Ugb2YgYmVpbmcgemVyby13aWR0aC9pbnZpc2libGUuXG4gICAgICAgIC8vIFVnbGlmeUpTIGRyb3BzIFUrRkVGRiBjaGFycyB3aGVuIHBhcnNpbmcsIHNvIHVzZSBTdHJpbmcuZnJvbUNoYXJDb2RlXG4gICAgICAgIC8vIGluIGhvcGVzIHRoYXQgdGhpcyBpcyBwcmVzZXJ2ZWQgZXZlbiBpZiBcIlxcdUZFRkZcIiBpcyB0cmFuc2Zvcm1lZCB0b1xuICAgICAgICAvLyB0aGUgYWN0dWFsIFVuaWNvZGUgY2hhcmFjdGVyIChieSBCYWJlbCwgZm9yIGV4YW1wbGUpLlxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbWlzaG9vL1VnbGlmeUpTMi9ibG9iL3YyLjQuMjAvbGliL3BhcnNlLmpzI0wyMTZcbiAgICAgICAgbm9kZS5pbm5lckhUTUwgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4ZmVmZikgKyBodG1sO1xuXG4gICAgICAgIC8vIGRlbGV0ZURhdGEgbGVhdmVzIGFuIGVtcHR5IGBUZXh0Tm9kZWAgd2hpY2ggb2Zmc2V0cyB0aGUgaW5kZXggb2YgYWxsXG4gICAgICAgIC8vIGNoaWxkcmVuLiBEZWZpbml0ZWx5IHdhbnQgdG8gYXZvaWQgdGhpcy5cbiAgICAgICAgdmFyIHRleHROb2RlID0gbm9kZS5maXJzdENoaWxkO1xuICAgICAgICBpZiAodGV4dE5vZGUuZGF0YS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICBub2RlLnJlbW92ZUNoaWxkKHRleHROb2RlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0ZXh0Tm9kZS5kZWxldGVEYXRhKDAsIDEpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBub2RlLmlubmVySFRNTCA9IGh0bWw7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuICB0ZXN0RWxlbWVudCA9IG51bGw7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0SW5uZXJIVE1MO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QtZG9tL2xpYi9zZXRJbm5lckhUTUwuanMiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBjYW5EZWZpbmVQcm9wZXJ0eSA9IGZhbHNlO1xuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgdHJ5IHtcbiAgICAvLyAkRmxvd0ZpeE1lIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9mbG93L2lzc3Vlcy8yODVcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sICd4JywgeyBnZXQ6IGZ1bmN0aW9uICgpIHt9IH0pO1xuICAgIGNhbkRlZmluZVByb3BlcnR5ID0gdHJ1ZTtcbiAgfSBjYXRjaCAoeCkge1xuICAgIC8vIElFIHdpbGwgZmFpbCBvbiBkZWZpbmVQcm9wZXJ0eVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2FuRGVmaW5lUHJvcGVydHk7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC9saWIvY2FuRGVmaW5lUHJvcGVydHkuanMiLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHR5cGVjaGVja3NcbiAqIFxuICovXG5cbi8qZXNsaW50LWRpc2FibGUgbm8tc2VsZi1jb21wYXJlICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIGhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBpbmxpbmVkIE9iamVjdC5pcyBwb2x5ZmlsbCB0byBhdm9pZCByZXF1aXJpbmcgY29uc3VtZXJzIHNoaXAgdGhlaXIgb3duXG4gKiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9PYmplY3QvaXNcbiAqL1xuZnVuY3Rpb24gaXMoeCwgeSkge1xuICAvLyBTYW1lVmFsdWUgYWxnb3JpdGhtXG4gIGlmICh4ID09PSB5KSB7XG4gICAgLy8gU3RlcHMgMS01LCA3LTEwXG4gICAgLy8gU3RlcHMgNi5iLTYuZTogKzAgIT0gLTBcbiAgICAvLyBBZGRlZCB0aGUgbm9uemVybyB5IGNoZWNrIHRvIG1ha2UgRmxvdyBoYXBweSwgYnV0IGl0IGlzIHJlZHVuZGFudFxuICAgIHJldHVybiB4ICE9PSAwIHx8IHkgIT09IDAgfHwgMSAvIHggPT09IDEgLyB5O1xuICB9IGVsc2Uge1xuICAgIC8vIFN0ZXAgNi5hOiBOYU4gPT0gTmFOXG4gICAgcmV0dXJuIHggIT09IHggJiYgeSAhPT0geTtcbiAgfVxufVxuXG4vKipcbiAqIFBlcmZvcm1zIGVxdWFsaXR5IGJ5IGl0ZXJhdGluZyB0aHJvdWdoIGtleXMgb24gYW4gb2JqZWN0IGFuZCByZXR1cm5pbmcgZmFsc2VcbiAqIHdoZW4gYW55IGtleSBoYXMgdmFsdWVzIHdoaWNoIGFyZSBub3Qgc3RyaWN0bHkgZXF1YWwgYmV0d2VlbiB0aGUgYXJndW1lbnRzLlxuICogUmV0dXJucyB0cnVlIHdoZW4gdGhlIHZhbHVlcyBvZiBhbGwga2V5cyBhcmUgc3RyaWN0bHkgZXF1YWwuXG4gKi9cbmZ1bmN0aW9uIHNoYWxsb3dFcXVhbChvYmpBLCBvYmpCKSB7XG4gIGlmIChpcyhvYmpBLCBvYmpCKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBvYmpBICE9PSAnb2JqZWN0JyB8fCBvYmpBID09PSBudWxsIHx8IHR5cGVvZiBvYmpCICE9PSAnb2JqZWN0JyB8fCBvYmpCID09PSBudWxsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIGtleXNBID0gT2JqZWN0LmtleXMob2JqQSk7XG4gIHZhciBrZXlzQiA9IE9iamVjdC5rZXlzKG9iakIpO1xuXG4gIGlmIChrZXlzQS5sZW5ndGggIT09IGtleXNCLmxlbmd0aCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIFRlc3QgZm9yIEEncyBrZXlzIGRpZmZlcmVudCBmcm9tIEIuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwga2V5c0EubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoIWhhc093blByb3BlcnR5LmNhbGwob2JqQiwga2V5c0FbaV0pIHx8ICFpcyhvYmpBW2tleXNBW2ldXSwgb2JqQltrZXlzQVtpXV0pKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2hhbGxvd0VxdWFsO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vZmJqcy9saWIvc2hhbGxvd0VxdWFsLmpzIiwiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5sb2NhdGlvbnNBcmVFcXVhbCA9IGV4cG9ydHMuY3JlYXRlTG9jYXRpb24gPSB1bmRlZmluZWQ7XG5cbnZhciBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07XG5cbnZhciBfcmVzb2x2ZVBhdGhuYW1lID0gcmVxdWlyZSgncmVzb2x2ZS1wYXRobmFtZScpO1xuXG52YXIgX3Jlc29sdmVQYXRobmFtZTIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9yZXNvbHZlUGF0aG5hbWUpO1xuXG52YXIgX3ZhbHVlRXF1YWwgPSByZXF1aXJlKCd2YWx1ZS1lcXVhbCcpO1xuXG52YXIgX3ZhbHVlRXF1YWwyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfdmFsdWVFcXVhbCk7XG5cbnZhciBfUGF0aFV0aWxzID0gcmVxdWlyZSgnLi9QYXRoVXRpbHMnKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxudmFyIGNyZWF0ZUxvY2F0aW9uID0gZXhwb3J0cy5jcmVhdGVMb2NhdGlvbiA9IGZ1bmN0aW9uIGNyZWF0ZUxvY2F0aW9uKHBhdGgsIHN0YXRlLCBrZXksIGN1cnJlbnRMb2NhdGlvbikge1xuICB2YXIgbG9jYXRpb24gPSB2b2lkIDA7XG4gIGlmICh0eXBlb2YgcGF0aCA9PT0gJ3N0cmluZycpIHtcbiAgICAvLyBUd28tYXJnIGZvcm06IHB1c2gocGF0aCwgc3RhdGUpXG4gICAgbG9jYXRpb24gPSAoMCwgX1BhdGhVdGlscy5wYXJzZVBhdGgpKHBhdGgpO1xuICAgIGxvY2F0aW9uLnN0YXRlID0gc3RhdGU7XG4gIH0gZWxzZSB7XG4gICAgLy8gT25lLWFyZyBmb3JtOiBwdXNoKGxvY2F0aW9uKVxuICAgIGxvY2F0aW9uID0gX2V4dGVuZHMoe30sIHBhdGgpO1xuXG4gICAgaWYgKGxvY2F0aW9uLnBhdGhuYW1lID09PSB1bmRlZmluZWQpIGxvY2F0aW9uLnBhdGhuYW1lID0gJyc7XG5cbiAgICBpZiAobG9jYXRpb24uc2VhcmNoKSB7XG4gICAgICBpZiAobG9jYXRpb24uc2VhcmNoLmNoYXJBdCgwKSAhPT0gJz8nKSBsb2NhdGlvbi5zZWFyY2ggPSAnPycgKyBsb2NhdGlvbi5zZWFyY2g7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvY2F0aW9uLnNlYXJjaCA9ICcnO1xuICAgIH1cblxuICAgIGlmIChsb2NhdGlvbi5oYXNoKSB7XG4gICAgICBpZiAobG9jYXRpb24uaGFzaC5jaGFyQXQoMCkgIT09ICcjJykgbG9jYXRpb24uaGFzaCA9ICcjJyArIGxvY2F0aW9uLmhhc2g7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvY2F0aW9uLmhhc2ggPSAnJztcbiAgICB9XG5cbiAgICBpZiAoc3RhdGUgIT09IHVuZGVmaW5lZCAmJiBsb2NhdGlvbi5zdGF0ZSA9PT0gdW5kZWZpbmVkKSBsb2NhdGlvbi5zdGF0ZSA9IHN0YXRlO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBsb2NhdGlvbi5wYXRobmFtZSA9IGRlY29kZVVSSShsb2NhdGlvbi5wYXRobmFtZSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBpZiAoZSBpbnN0YW5jZW9mIFVSSUVycm9yKSB7XG4gICAgICB0aHJvdyBuZXcgVVJJRXJyb3IoJ1BhdGhuYW1lIFwiJyArIGxvY2F0aW9uLnBhdGhuYW1lICsgJ1wiIGNvdWxkIG5vdCBiZSBkZWNvZGVkLiAnICsgJ1RoaXMgaXMgbGlrZWx5IGNhdXNlZCBieSBhbiBpbnZhbGlkIHBlcmNlbnQtZW5jb2RpbmcuJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IGU7XG4gICAgfVxuICB9XG5cbiAgaWYgKGtleSkgbG9jYXRpb24ua2V5ID0ga2V5O1xuXG4gIGlmIChjdXJyZW50TG9jYXRpb24pIHtcbiAgICAvLyBSZXNvbHZlIGluY29tcGxldGUvcmVsYXRpdmUgcGF0aG5hbWUgcmVsYXRpdmUgdG8gY3VycmVudCBsb2NhdGlvbi5cbiAgICBpZiAoIWxvY2F0aW9uLnBhdGhuYW1lKSB7XG4gICAgICBsb2NhdGlvbi5wYXRobmFtZSA9IGN1cnJlbnRMb2NhdGlvbi5wYXRobmFtZTtcbiAgICB9IGVsc2UgaWYgKGxvY2F0aW9uLnBhdGhuYW1lLmNoYXJBdCgwKSAhPT0gJy8nKSB7XG4gICAgICBsb2NhdGlvbi5wYXRobmFtZSA9ICgwLCBfcmVzb2x2ZVBhdGhuYW1lMi5kZWZhdWx0KShsb2NhdGlvbi5wYXRobmFtZSwgY3VycmVudExvY2F0aW9uLnBhdGhuYW1lKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gV2hlbiB0aGVyZSBpcyBubyBwcmlvciBsb2NhdGlvbiBhbmQgcGF0aG5hbWUgaXMgZW1wdHksIHNldCBpdCB0byAvXG4gICAgaWYgKCFsb2NhdGlvbi5wYXRobmFtZSkge1xuICAgICAgbG9jYXRpb24ucGF0aG5hbWUgPSAnLyc7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGxvY2F0aW9uO1xufTtcblxudmFyIGxvY2F0aW9uc0FyZUVxdWFsID0gZXhwb3J0cy5sb2NhdGlvbnNBcmVFcXVhbCA9IGZ1bmN0aW9uIGxvY2F0aW9uc0FyZUVxdWFsKGEsIGIpIHtcbiAgcmV0dXJuIGEucGF0aG5hbWUgPT09IGIucGF0aG5hbWUgJiYgYS5zZWFyY2ggPT09IGIuc2VhcmNoICYmIGEuaGFzaCA9PT0gYi5oYXNoICYmIGEua2V5ID09PSBiLmtleSAmJiAoMCwgX3ZhbHVlRXF1YWwyLmRlZmF1bHQpKGEuc3RhdGUsIGIuc3RhdGUpO1xufTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L2hpc3RvcnkvTG9jYXRpb25VdGlscy5qcyIsIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxudmFyIF93YXJuaW5nID0gcmVxdWlyZSgnd2FybmluZycpO1xuXG52YXIgX3dhcm5pbmcyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfd2FybmluZyk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbnZhciBjcmVhdGVUcmFuc2l0aW9uTWFuYWdlciA9IGZ1bmN0aW9uIGNyZWF0ZVRyYW5zaXRpb25NYW5hZ2VyKCkge1xuICB2YXIgcHJvbXB0ID0gbnVsbDtcblxuICB2YXIgc2V0UHJvbXB0ID0gZnVuY3Rpb24gc2V0UHJvbXB0KG5leHRQcm9tcHQpIHtcbiAgICAoMCwgX3dhcm5pbmcyLmRlZmF1bHQpKHByb21wdCA9PSBudWxsLCAnQSBoaXN0b3J5IHN1cHBvcnRzIG9ubHkgb25lIHByb21wdCBhdCBhIHRpbWUnKTtcblxuICAgIHByb21wdCA9IG5leHRQcm9tcHQ7XG5cbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKHByb21wdCA9PT0gbmV4dFByb21wdCkgcHJvbXB0ID0gbnVsbDtcbiAgICB9O1xuICB9O1xuXG4gIHZhciBjb25maXJtVHJhbnNpdGlvblRvID0gZnVuY3Rpb24gY29uZmlybVRyYW5zaXRpb25Ubyhsb2NhdGlvbiwgYWN0aW9uLCBnZXRVc2VyQ29uZmlybWF0aW9uLCBjYWxsYmFjaykge1xuICAgIC8vIFRPRE86IElmIGFub3RoZXIgdHJhbnNpdGlvbiBzdGFydHMgd2hpbGUgd2UncmUgc3RpbGwgY29uZmlybWluZ1xuICAgIC8vIHRoZSBwcmV2aW91cyBvbmUsIHdlIG1heSBlbmQgdXAgaW4gYSB3ZWlyZCBzdGF0ZS4gRmlndXJlIG91dCB0aGVcbiAgICAvLyBiZXN0IHdheSB0byBoYW5kbGUgdGhpcy5cbiAgICBpZiAocHJvbXB0ICE9IG51bGwpIHtcbiAgICAgIHZhciByZXN1bHQgPSB0eXBlb2YgcHJvbXB0ID09PSAnZnVuY3Rpb24nID8gcHJvbXB0KGxvY2F0aW9uLCBhY3Rpb24pIDogcHJvbXB0O1xuXG4gICAgICBpZiAodHlwZW9mIHJlc3VsdCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBnZXRVc2VyQ29uZmlybWF0aW9uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgZ2V0VXNlckNvbmZpcm1hdGlvbihyZXN1bHQsIGNhbGxiYWNrKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAoMCwgX3dhcm5pbmcyLmRlZmF1bHQpKGZhbHNlLCAnQSBoaXN0b3J5IG5lZWRzIGEgZ2V0VXNlckNvbmZpcm1hdGlvbiBmdW5jdGlvbiBpbiBvcmRlciB0byB1c2UgYSBwcm9tcHQgbWVzc2FnZScpO1xuXG4gICAgICAgICAgY2FsbGJhY2sodHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFJldHVybiBmYWxzZSBmcm9tIGEgdHJhbnNpdGlvbiBob29rIHRvIGNhbmNlbCB0aGUgdHJhbnNpdGlvbi5cbiAgICAgICAgY2FsbGJhY2socmVzdWx0ICE9PSBmYWxzZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNhbGxiYWNrKHRydWUpO1xuICAgIH1cbiAgfTtcblxuICB2YXIgbGlzdGVuZXJzID0gW107XG5cbiAgdmFyIGFwcGVuZExpc3RlbmVyID0gZnVuY3Rpb24gYXBwZW5kTGlzdGVuZXIoZm4pIHtcbiAgICB2YXIgaXNBY3RpdmUgPSB0cnVlO1xuXG4gICAgdmFyIGxpc3RlbmVyID0gZnVuY3Rpb24gbGlzdGVuZXIoKSB7XG4gICAgICBpZiAoaXNBY3RpdmUpIGZuLmFwcGx5KHVuZGVmaW5lZCwgYXJndW1lbnRzKTtcbiAgICB9O1xuXG4gICAgbGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpO1xuXG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIGlzQWN0aXZlID0gZmFsc2U7XG4gICAgICBsaXN0ZW5lcnMgPSBsaXN0ZW5lcnMuZmlsdGVyKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgIHJldHVybiBpdGVtICE9PSBsaXN0ZW5lcjtcbiAgICAgIH0pO1xuICAgIH07XG4gIH07XG5cbiAgdmFyIG5vdGlmeUxpc3RlbmVycyA9IGZ1bmN0aW9uIG5vdGlmeUxpc3RlbmVycygpIHtcbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICBsaXN0ZW5lcnMuZm9yRWFjaChmdW5jdGlvbiAobGlzdGVuZXIpIHtcbiAgICAgIHJldHVybiBsaXN0ZW5lci5hcHBseSh1bmRlZmluZWQsIGFyZ3MpO1xuICAgIH0pO1xuICB9O1xuXG4gIHJldHVybiB7XG4gICAgc2V0UHJvbXB0OiBzZXRQcm9tcHQsXG4gICAgY29uZmlybVRyYW5zaXRpb25UbzogY29uZmlybVRyYW5zaXRpb25UbyxcbiAgICBhcHBlbmRMaXN0ZW5lcjogYXBwZW5kTGlzdGVuZXIsXG4gICAgbm90aWZ5TGlzdGVuZXJzOiBub3RpZnlMaXN0ZW5lcnNcbiAgfTtcbn07XG5cbmV4cG9ydHMuZGVmYXVsdCA9IGNyZWF0ZVRyYW5zaXRpb25NYW5hZ2VyO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vaGlzdG9yeS9jcmVhdGVUcmFuc2l0aW9uTWFuYWdlci5qcyIsImltcG9ydCBiYXNlR2V0VGFnIGZyb20gJy4vX2Jhc2VHZXRUYWcuanMnO1xuaW1wb3J0IGdldFByb3RvdHlwZSBmcm9tICcuL19nZXRQcm90b3R5cGUuanMnO1xuaW1wb3J0IGlzT2JqZWN0TGlrZSBmcm9tICcuL2lzT2JqZWN0TGlrZS5qcyc7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RUYWcgPSAnW29iamVjdCBPYmplY3RdJztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIGZ1bmNQcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZSxcbiAgICBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIHJlc29sdmUgdGhlIGRlY29tcGlsZWQgc291cmNlIG9mIGZ1bmN0aW9ucy4gKi9cbnZhciBmdW5jVG9TdHJpbmcgPSBmdW5jUHJvdG8udG9TdHJpbmc7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKiBVc2VkIHRvIGluZmVyIHRoZSBgT2JqZWN0YCBjb25zdHJ1Y3Rvci4gKi9cbnZhciBvYmplY3RDdG9yU3RyaW5nID0gZnVuY1RvU3RyaW5nLmNhbGwoT2JqZWN0KTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHBsYWluIG9iamVjdCwgdGhhdCBpcywgYW4gb2JqZWN0IGNyZWF0ZWQgYnkgdGhlXG4gKiBgT2JqZWN0YCBjb25zdHJ1Y3RvciBvciBvbmUgd2l0aCBhIGBbW1Byb3RvdHlwZV1dYCBvZiBgbnVsbGAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjguMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBwbGFpbiBvYmplY3QsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gRm9vKCkge1xuICogICB0aGlzLmEgPSAxO1xuICogfVxuICpcbiAqIF8uaXNQbGFpbk9iamVjdChuZXcgRm9vKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc1BsYWluT2JqZWN0KFsxLCAyLCAzXSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNQbGFpbk9iamVjdCh7ICd4JzogMCwgJ3knOiAwIH0pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNQbGFpbk9iamVjdChPYmplY3QuY3JlYXRlKG51bGwpKTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh2YWx1ZSkge1xuICBpZiAoIWlzT2JqZWN0TGlrZSh2YWx1ZSkgfHwgYmFzZUdldFRhZyh2YWx1ZSkgIT0gb2JqZWN0VGFnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBwcm90byA9IGdldFByb3RvdHlwZSh2YWx1ZSk7XG4gIGlmIChwcm90byA9PT0gbnVsbCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHZhciBDdG9yID0gaGFzT3duUHJvcGVydHkuY2FsbChwcm90bywgJ2NvbnN0cnVjdG9yJykgJiYgcHJvdG8uY29uc3RydWN0b3I7XG4gIHJldHVybiB0eXBlb2YgQ3RvciA9PSAnZnVuY3Rpb24nICYmIEN0b3IgaW5zdGFuY2VvZiBDdG9yICYmXG4gICAgZnVuY1RvU3RyaW5nLmNhbGwoQ3RvcikgPT0gb2JqZWN0Q3RvclN0cmluZztcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNQbGFpbk9iamVjdDtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vbG9kYXNoLWVzL2lzUGxhaW5PYmplY3QuanMiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBSZWFjdFByb3BUeXBlc1NlY3JldCA9ICdTRUNSRVRfRE9fTk9UX1BBU1NfVEhJU19PUl9ZT1VfV0lMTF9CRV9GSVJFRCc7XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RQcm9wVHlwZXNTZWNyZXQ7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3Byb3AtdHlwZXMvbGliL1JlYWN0UHJvcFR5cGVzU2VjcmV0LmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIERPTUxhenlUcmVlID0gcmVxdWlyZSgnLi9ET01MYXp5VHJlZScpO1xudmFyIERhbmdlciA9IHJlcXVpcmUoJy4vRGFuZ2VyJyk7XG52YXIgUmVhY3RET01Db21wb25lbnRUcmVlID0gcmVxdWlyZSgnLi9SZWFjdERPTUNvbXBvbmVudFRyZWUnKTtcbnZhciBSZWFjdEluc3RydW1lbnRhdGlvbiA9IHJlcXVpcmUoJy4vUmVhY3RJbnN0cnVtZW50YXRpb24nKTtcblxudmFyIGNyZWF0ZU1pY3Jvc29mdFVuc2FmZUxvY2FsRnVuY3Rpb24gPSByZXF1aXJlKCcuL2NyZWF0ZU1pY3Jvc29mdFVuc2FmZUxvY2FsRnVuY3Rpb24nKTtcbnZhciBzZXRJbm5lckhUTUwgPSByZXF1aXJlKCcuL3NldElubmVySFRNTCcpO1xudmFyIHNldFRleHRDb250ZW50ID0gcmVxdWlyZSgnLi9zZXRUZXh0Q29udGVudCcpO1xuXG5mdW5jdGlvbiBnZXROb2RlQWZ0ZXIocGFyZW50Tm9kZSwgbm9kZSkge1xuICAvLyBTcGVjaWFsIGNhc2UgZm9yIHRleHQgY29tcG9uZW50cywgd2hpY2ggcmV0dXJuIFtvcGVuLCBjbG9zZV0gY29tbWVudHNcbiAgLy8gZnJvbSBnZXRIb3N0Tm9kZS5cbiAgaWYgKEFycmF5LmlzQXJyYXkobm9kZSkpIHtcbiAgICBub2RlID0gbm9kZVsxXTtcbiAgfVxuICByZXR1cm4gbm9kZSA/IG5vZGUubmV4dFNpYmxpbmcgOiBwYXJlbnROb2RlLmZpcnN0Q2hpbGQ7XG59XG5cbi8qKlxuICogSW5zZXJ0cyBgY2hpbGROb2RlYCBhcyBhIGNoaWxkIG9mIGBwYXJlbnROb2RlYCBhdCB0aGUgYGluZGV4YC5cbiAqXG4gKiBAcGFyYW0ge0RPTUVsZW1lbnR9IHBhcmVudE5vZGUgUGFyZW50IG5vZGUgaW4gd2hpY2ggdG8gaW5zZXJ0LlxuICogQHBhcmFtIHtET01FbGVtZW50fSBjaGlsZE5vZGUgQ2hpbGQgbm9kZSB0byBpbnNlcnQuXG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXggSW5kZXggYXQgd2hpY2ggdG8gaW5zZXJ0IHRoZSBjaGlsZC5cbiAqIEBpbnRlcm5hbFxuICovXG52YXIgaW5zZXJ0Q2hpbGRBdCA9IGNyZWF0ZU1pY3Jvc29mdFVuc2FmZUxvY2FsRnVuY3Rpb24oZnVuY3Rpb24gKHBhcmVudE5vZGUsIGNoaWxkTm9kZSwgcmVmZXJlbmNlTm9kZSkge1xuICAvLyBXZSByZWx5IGV4Y2x1c2l2ZWx5IG9uIGBpbnNlcnRCZWZvcmUobm9kZSwgbnVsbClgIGluc3RlYWQgb2YgYWxzbyB1c2luZ1xuICAvLyBgYXBwZW5kQ2hpbGQobm9kZSlgLiAoVXNpbmcgYHVuZGVmaW5lZGAgaXMgbm90IGFsbG93ZWQgYnkgYWxsIGJyb3dzZXJzIHNvXG4gIC8vIHdlIGFyZSBjYXJlZnVsIHRvIHVzZSBgbnVsbGAuKVxuICBwYXJlbnROb2RlLmluc2VydEJlZm9yZShjaGlsZE5vZGUsIHJlZmVyZW5jZU5vZGUpO1xufSk7XG5cbmZ1bmN0aW9uIGluc2VydExhenlUcmVlQ2hpbGRBdChwYXJlbnROb2RlLCBjaGlsZFRyZWUsIHJlZmVyZW5jZU5vZGUpIHtcbiAgRE9NTGF6eVRyZWUuaW5zZXJ0VHJlZUJlZm9yZShwYXJlbnROb2RlLCBjaGlsZFRyZWUsIHJlZmVyZW5jZU5vZGUpO1xufVxuXG5mdW5jdGlvbiBtb3ZlQ2hpbGQocGFyZW50Tm9kZSwgY2hpbGROb2RlLCByZWZlcmVuY2VOb2RlKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGNoaWxkTm9kZSkpIHtcbiAgICBtb3ZlRGVsaW1pdGVkVGV4dChwYXJlbnROb2RlLCBjaGlsZE5vZGVbMF0sIGNoaWxkTm9kZVsxXSwgcmVmZXJlbmNlTm9kZSk7XG4gIH0gZWxzZSB7XG4gICAgaW5zZXJ0Q2hpbGRBdChwYXJlbnROb2RlLCBjaGlsZE5vZGUsIHJlZmVyZW5jZU5vZGUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUNoaWxkKHBhcmVudE5vZGUsIGNoaWxkTm9kZSkge1xuICBpZiAoQXJyYXkuaXNBcnJheShjaGlsZE5vZGUpKSB7XG4gICAgdmFyIGNsb3NpbmdDb21tZW50ID0gY2hpbGROb2RlWzFdO1xuICAgIGNoaWxkTm9kZSA9IGNoaWxkTm9kZVswXTtcbiAgICByZW1vdmVEZWxpbWl0ZWRUZXh0KHBhcmVudE5vZGUsIGNoaWxkTm9kZSwgY2xvc2luZ0NvbW1lbnQpO1xuICAgIHBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoY2xvc2luZ0NvbW1lbnQpO1xuICB9XG4gIHBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoY2hpbGROb2RlKTtcbn1cblxuZnVuY3Rpb24gbW92ZURlbGltaXRlZFRleHQocGFyZW50Tm9kZSwgb3BlbmluZ0NvbW1lbnQsIGNsb3NpbmdDb21tZW50LCByZWZlcmVuY2VOb2RlKSB7XG4gIHZhciBub2RlID0gb3BlbmluZ0NvbW1lbnQ7XG4gIHdoaWxlICh0cnVlKSB7XG4gICAgdmFyIG5leHROb2RlID0gbm9kZS5uZXh0U2libGluZztcbiAgICBpbnNlcnRDaGlsZEF0KHBhcmVudE5vZGUsIG5vZGUsIHJlZmVyZW5jZU5vZGUpO1xuICAgIGlmIChub2RlID09PSBjbG9zaW5nQ29tbWVudCkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIG5vZGUgPSBuZXh0Tm9kZTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZW1vdmVEZWxpbWl0ZWRUZXh0KHBhcmVudE5vZGUsIHN0YXJ0Tm9kZSwgY2xvc2luZ0NvbW1lbnQpIHtcbiAgd2hpbGUgKHRydWUpIHtcbiAgICB2YXIgbm9kZSA9IHN0YXJ0Tm9kZS5uZXh0U2libGluZztcbiAgICBpZiAobm9kZSA9PT0gY2xvc2luZ0NvbW1lbnQpIHtcbiAgICAgIC8vIFRoZSBjbG9zaW5nIGNvbW1lbnQgaXMgcmVtb3ZlZCBieSBSZWFjdE11bHRpQ2hpbGQuXG4gICAgICBicmVhaztcbiAgICB9IGVsc2Uge1xuICAgICAgcGFyZW50Tm9kZS5yZW1vdmVDaGlsZChub2RlKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVwbGFjZURlbGltaXRlZFRleHQob3BlbmluZ0NvbW1lbnQsIGNsb3NpbmdDb21tZW50LCBzdHJpbmdUZXh0KSB7XG4gIHZhciBwYXJlbnROb2RlID0gb3BlbmluZ0NvbW1lbnQucGFyZW50Tm9kZTtcbiAgdmFyIG5vZGVBZnRlckNvbW1lbnQgPSBvcGVuaW5nQ29tbWVudC5uZXh0U2libGluZztcbiAgaWYgKG5vZGVBZnRlckNvbW1lbnQgPT09IGNsb3NpbmdDb21tZW50KSB7XG4gICAgLy8gVGhlcmUgYXJlIG5vIHRleHQgbm9kZXMgYmV0d2VlbiB0aGUgb3BlbmluZyBhbmQgY2xvc2luZyBjb21tZW50czsgaW5zZXJ0XG4gICAgLy8gYSBuZXcgb25lIGlmIHN0cmluZ1RleHQgaXNuJ3QgZW1wdHkuXG4gICAgaWYgKHN0cmluZ1RleHQpIHtcbiAgICAgIGluc2VydENoaWxkQXQocGFyZW50Tm9kZSwgZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoc3RyaW5nVGV4dCksIG5vZGVBZnRlckNvbW1lbnQpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAoc3RyaW5nVGV4dCkge1xuICAgICAgLy8gU2V0IHRoZSB0ZXh0IGNvbnRlbnQgb2YgdGhlIGZpcnN0IG5vZGUgYWZ0ZXIgdGhlIG9wZW5pbmcgY29tbWVudCwgYW5kXG4gICAgICAvLyByZW1vdmUgYWxsIGZvbGxvd2luZyBub2RlcyB1cCB1bnRpbCB0aGUgY2xvc2luZyBjb21tZW50LlxuICAgICAgc2V0VGV4dENvbnRlbnQobm9kZUFmdGVyQ29tbWVudCwgc3RyaW5nVGV4dCk7XG4gICAgICByZW1vdmVEZWxpbWl0ZWRUZXh0KHBhcmVudE5vZGUsIG5vZGVBZnRlckNvbW1lbnQsIGNsb3NpbmdDb21tZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVtb3ZlRGVsaW1pdGVkVGV4dChwYXJlbnROb2RlLCBvcGVuaW5nQ29tbWVudCwgY2xvc2luZ0NvbW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgUmVhY3RJbnN0cnVtZW50YXRpb24uZGVidWdUb29sLm9uSG9zdE9wZXJhdGlvbih7XG4gICAgICBpbnN0YW5jZUlEOiBSZWFjdERPTUNvbXBvbmVudFRyZWUuZ2V0SW5zdGFuY2VGcm9tTm9kZShvcGVuaW5nQ29tbWVudCkuX2RlYnVnSUQsXG4gICAgICB0eXBlOiAncmVwbGFjZSB0ZXh0JyxcbiAgICAgIHBheWxvYWQ6IHN0cmluZ1RleHRcbiAgICB9KTtcbiAgfVxufVxuXG52YXIgZGFuZ2Vyb3VzbHlSZXBsYWNlTm9kZVdpdGhNYXJrdXAgPSBEYW5nZXIuZGFuZ2Vyb3VzbHlSZXBsYWNlTm9kZVdpdGhNYXJrdXA7XG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBkYW5nZXJvdXNseVJlcGxhY2VOb2RlV2l0aE1hcmt1cCA9IGZ1bmN0aW9uIChvbGRDaGlsZCwgbWFya3VwLCBwcmV2SW5zdGFuY2UpIHtcbiAgICBEYW5nZXIuZGFuZ2Vyb3VzbHlSZXBsYWNlTm9kZVdpdGhNYXJrdXAob2xkQ2hpbGQsIG1hcmt1cCk7XG4gICAgaWYgKHByZXZJbnN0YW5jZS5fZGVidWdJRCAhPT0gMCkge1xuICAgICAgUmVhY3RJbnN0cnVtZW50YXRpb24uZGVidWdUb29sLm9uSG9zdE9wZXJhdGlvbih7XG4gICAgICAgIGluc3RhbmNlSUQ6IHByZXZJbnN0YW5jZS5fZGVidWdJRCxcbiAgICAgICAgdHlwZTogJ3JlcGxhY2Ugd2l0aCcsXG4gICAgICAgIHBheWxvYWQ6IG1hcmt1cC50b1N0cmluZygpXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIG5leHRJbnN0YW5jZSA9IFJlYWN0RE9NQ29tcG9uZW50VHJlZS5nZXRJbnN0YW5jZUZyb21Ob2RlKG1hcmt1cC5ub2RlKTtcbiAgICAgIGlmIChuZXh0SW5zdGFuY2UuX2RlYnVnSUQgIT09IDApIHtcbiAgICAgICAgUmVhY3RJbnN0cnVtZW50YXRpb24uZGVidWdUb29sLm9uSG9zdE9wZXJhdGlvbih7XG4gICAgICAgICAgaW5zdGFuY2VJRDogbmV4dEluc3RhbmNlLl9kZWJ1Z0lELFxuICAgICAgICAgIHR5cGU6ICdtb3VudCcsXG4gICAgICAgICAgcGF5bG9hZDogbWFya3VwLnRvU3RyaW5nKClcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9O1xufVxuXG4vKipcbiAqIE9wZXJhdGlvbnMgZm9yIHVwZGF0aW5nIHdpdGggRE9NIGNoaWxkcmVuLlxuICovXG52YXIgRE9NQ2hpbGRyZW5PcGVyYXRpb25zID0ge1xuICBkYW5nZXJvdXNseVJlcGxhY2VOb2RlV2l0aE1hcmt1cDogZGFuZ2Vyb3VzbHlSZXBsYWNlTm9kZVdpdGhNYXJrdXAsXG5cbiAgcmVwbGFjZURlbGltaXRlZFRleHQ6IHJlcGxhY2VEZWxpbWl0ZWRUZXh0LFxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIGEgY29tcG9uZW50J3MgY2hpbGRyZW4gYnkgcHJvY2Vzc2luZyBhIHNlcmllcyBvZiB1cGRhdGVzLiBUaGVcbiAgICogdXBkYXRlIGNvbmZpZ3VyYXRpb25zIGFyZSBlYWNoIGV4cGVjdGVkIHRvIGhhdmUgYSBgcGFyZW50Tm9kZWAgcHJvcGVydHkuXG4gICAqXG4gICAqIEBwYXJhbSB7YXJyYXk8b2JqZWN0Pn0gdXBkYXRlcyBMaXN0IG9mIHVwZGF0ZSBjb25maWd1cmF0aW9ucy5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBwcm9jZXNzVXBkYXRlczogZnVuY3Rpb24gKHBhcmVudE5vZGUsIHVwZGF0ZXMpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgdmFyIHBhcmVudE5vZGVEZWJ1Z0lEID0gUmVhY3RET01Db21wb25lbnRUcmVlLmdldEluc3RhbmNlRnJvbU5vZGUocGFyZW50Tm9kZSkuX2RlYnVnSUQ7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgayA9IDA7IGsgPCB1cGRhdGVzLmxlbmd0aDsgaysrKSB7XG4gICAgICB2YXIgdXBkYXRlID0gdXBkYXRlc1trXTtcbiAgICAgIHN3aXRjaCAodXBkYXRlLnR5cGUpIHtcbiAgICAgICAgY2FzZSAnSU5TRVJUX01BUktVUCc6XG4gICAgICAgICAgaW5zZXJ0TGF6eVRyZWVDaGlsZEF0KHBhcmVudE5vZGUsIHVwZGF0ZS5jb250ZW50LCBnZXROb2RlQWZ0ZXIocGFyZW50Tm9kZSwgdXBkYXRlLmFmdGVyTm9kZSkpO1xuICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgICBSZWFjdEluc3RydW1lbnRhdGlvbi5kZWJ1Z1Rvb2wub25Ib3N0T3BlcmF0aW9uKHtcbiAgICAgICAgICAgICAgaW5zdGFuY2VJRDogcGFyZW50Tm9kZURlYnVnSUQsXG4gICAgICAgICAgICAgIHR5cGU6ICdpbnNlcnQgY2hpbGQnLFxuICAgICAgICAgICAgICBwYXlsb2FkOiB7XG4gICAgICAgICAgICAgICAgdG9JbmRleDogdXBkYXRlLnRvSW5kZXgsXG4gICAgICAgICAgICAgICAgY29udGVudDogdXBkYXRlLmNvbnRlbnQudG9TdHJpbmcoKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ01PVkVfRVhJU1RJTkcnOlxuICAgICAgICAgIG1vdmVDaGlsZChwYXJlbnROb2RlLCB1cGRhdGUuZnJvbU5vZGUsIGdldE5vZGVBZnRlcihwYXJlbnROb2RlLCB1cGRhdGUuYWZ0ZXJOb2RlKSk7XG4gICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICAgIFJlYWN0SW5zdHJ1bWVudGF0aW9uLmRlYnVnVG9vbC5vbkhvc3RPcGVyYXRpb24oe1xuICAgICAgICAgICAgICBpbnN0YW5jZUlEOiBwYXJlbnROb2RlRGVidWdJRCxcbiAgICAgICAgICAgICAgdHlwZTogJ21vdmUgY2hpbGQnLFxuICAgICAgICAgICAgICBwYXlsb2FkOiB7IGZyb21JbmRleDogdXBkYXRlLmZyb21JbmRleCwgdG9JbmRleDogdXBkYXRlLnRvSW5kZXggfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdTRVRfTUFSS1VQJzpcbiAgICAgICAgICBzZXRJbm5lckhUTUwocGFyZW50Tm9kZSwgdXBkYXRlLmNvbnRlbnQpO1xuICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgICBSZWFjdEluc3RydW1lbnRhdGlvbi5kZWJ1Z1Rvb2wub25Ib3N0T3BlcmF0aW9uKHtcbiAgICAgICAgICAgICAgaW5zdGFuY2VJRDogcGFyZW50Tm9kZURlYnVnSUQsXG4gICAgICAgICAgICAgIHR5cGU6ICdyZXBsYWNlIGNoaWxkcmVuJyxcbiAgICAgICAgICAgICAgcGF5bG9hZDogdXBkYXRlLmNvbnRlbnQudG9TdHJpbmcoKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdURVhUX0NPTlRFTlQnOlxuICAgICAgICAgIHNldFRleHRDb250ZW50KHBhcmVudE5vZGUsIHVwZGF0ZS5jb250ZW50KTtcbiAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgUmVhY3RJbnN0cnVtZW50YXRpb24uZGVidWdUb29sLm9uSG9zdE9wZXJhdGlvbih7XG4gICAgICAgICAgICAgIGluc3RhbmNlSUQ6IHBhcmVudE5vZGVEZWJ1Z0lELFxuICAgICAgICAgICAgICB0eXBlOiAncmVwbGFjZSB0ZXh0JyxcbiAgICAgICAgICAgICAgcGF5bG9hZDogdXBkYXRlLmNvbnRlbnQudG9TdHJpbmcoKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdSRU1PVkVfTk9ERSc6XG4gICAgICAgICAgcmVtb3ZlQ2hpbGQocGFyZW50Tm9kZSwgdXBkYXRlLmZyb21Ob2RlKTtcbiAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgUmVhY3RJbnN0cnVtZW50YXRpb24uZGVidWdUb29sLm9uSG9zdE9wZXJhdGlvbih7XG4gICAgICAgICAgICAgIGluc3RhbmNlSUQ6IHBhcmVudE5vZGVEZWJ1Z0lELFxuICAgICAgICAgICAgICB0eXBlOiAncmVtb3ZlIGNoaWxkJyxcbiAgICAgICAgICAgICAgcGF5bG9hZDogeyBmcm9tSW5kZXg6IHVwZGF0ZS5mcm9tSW5kZXggfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBET01DaGlsZHJlbk9wZXJhdGlvbnM7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1kb20vbGliL0RPTUNoaWxkcmVuT3BlcmF0aW9ucy5qcyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBET01OYW1lc3BhY2VzID0ge1xuICBodG1sOiAnaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCcsXG4gIG1hdGhtbDogJ2h0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aC9NYXRoTUwnLFxuICBzdmc6ICdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zydcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gRE9NTmFtZXNwYWNlcztcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3JlYWN0LWRvbS9saWIvRE9NTmFtZXNwYWNlcy5qcyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBfcHJvZEludmFyaWFudCA9IHJlcXVpcmUoJy4vcmVhY3RQcm9kSW52YXJpYW50Jyk7XG5cbnZhciBSZWFjdEVycm9yVXRpbHMgPSByZXF1aXJlKCcuL1JlYWN0RXJyb3JVdGlscycpO1xuXG52YXIgaW52YXJpYW50ID0gcmVxdWlyZSgnZmJqcy9saWIvaW52YXJpYW50Jyk7XG52YXIgd2FybmluZyA9IHJlcXVpcmUoJ2ZianMvbGliL3dhcm5pbmcnKTtcblxuLyoqXG4gKiBJbmplY3RlZCBkZXBlbmRlbmNpZXM6XG4gKi9cblxuLyoqXG4gKiAtIGBDb21wb25lbnRUcmVlYDogW3JlcXVpcmVkXSBNb2R1bGUgdGhhdCBjYW4gY29udmVydCBiZXR3ZWVuIFJlYWN0IGluc3RhbmNlc1xuICogICBhbmQgYWN0dWFsIG5vZGUgcmVmZXJlbmNlcy5cbiAqL1xudmFyIENvbXBvbmVudFRyZWU7XG52YXIgVHJlZVRyYXZlcnNhbDtcbnZhciBpbmplY3Rpb24gPSB7XG4gIGluamVjdENvbXBvbmVudFRyZWU6IGZ1bmN0aW9uIChJbmplY3RlZCkge1xuICAgIENvbXBvbmVudFRyZWUgPSBJbmplY3RlZDtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcoSW5qZWN0ZWQgJiYgSW5qZWN0ZWQuZ2V0Tm9kZUZyb21JbnN0YW5jZSAmJiBJbmplY3RlZC5nZXRJbnN0YW5jZUZyb21Ob2RlLCAnRXZlbnRQbHVnaW5VdGlscy5pbmplY3Rpb24uaW5qZWN0Q29tcG9uZW50VHJlZSguLi4pOiBJbmplY3RlZCAnICsgJ21vZHVsZSBpcyBtaXNzaW5nIGdldE5vZGVGcm9tSW5zdGFuY2Ugb3IgZ2V0SW5zdGFuY2VGcm9tTm9kZS4nKSA6IHZvaWQgMDtcbiAgICB9XG4gIH0sXG4gIGluamVjdFRyZWVUcmF2ZXJzYWw6IGZ1bmN0aW9uIChJbmplY3RlZCkge1xuICAgIFRyZWVUcmF2ZXJzYWwgPSBJbmplY3RlZDtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcoSW5qZWN0ZWQgJiYgSW5qZWN0ZWQuaXNBbmNlc3RvciAmJiBJbmplY3RlZC5nZXRMb3dlc3RDb21tb25BbmNlc3RvciwgJ0V2ZW50UGx1Z2luVXRpbHMuaW5qZWN0aW9uLmluamVjdFRyZWVUcmF2ZXJzYWwoLi4uKTogSW5qZWN0ZWQgJyArICdtb2R1bGUgaXMgbWlzc2luZyBpc0FuY2VzdG9yIG9yIGdldExvd2VzdENvbW1vbkFuY2VzdG9yLicpIDogdm9pZCAwO1xuICAgIH1cbiAgfVxufTtcblxuZnVuY3Rpb24gaXNFbmRpc2godG9wTGV2ZWxUeXBlKSB7XG4gIHJldHVybiB0b3BMZXZlbFR5cGUgPT09ICd0b3BNb3VzZVVwJyB8fCB0b3BMZXZlbFR5cGUgPT09ICd0b3BUb3VjaEVuZCcgfHwgdG9wTGV2ZWxUeXBlID09PSAndG9wVG91Y2hDYW5jZWwnO1xufVxuXG5mdW5jdGlvbiBpc01vdmVpc2godG9wTGV2ZWxUeXBlKSB7XG4gIHJldHVybiB0b3BMZXZlbFR5cGUgPT09ICd0b3BNb3VzZU1vdmUnIHx8IHRvcExldmVsVHlwZSA9PT0gJ3RvcFRvdWNoTW92ZSc7XG59XG5mdW5jdGlvbiBpc1N0YXJ0aXNoKHRvcExldmVsVHlwZSkge1xuICByZXR1cm4gdG9wTGV2ZWxUeXBlID09PSAndG9wTW91c2VEb3duJyB8fCB0b3BMZXZlbFR5cGUgPT09ICd0b3BUb3VjaFN0YXJ0Jztcbn1cblxudmFyIHZhbGlkYXRlRXZlbnREaXNwYXRjaGVzO1xuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgdmFsaWRhdGVFdmVudERpc3BhdGNoZXMgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICB2YXIgZGlzcGF0Y2hMaXN0ZW5lcnMgPSBldmVudC5fZGlzcGF0Y2hMaXN0ZW5lcnM7XG4gICAgdmFyIGRpc3BhdGNoSW5zdGFuY2VzID0gZXZlbnQuX2Rpc3BhdGNoSW5zdGFuY2VzO1xuXG4gICAgdmFyIGxpc3RlbmVyc0lzQXJyID0gQXJyYXkuaXNBcnJheShkaXNwYXRjaExpc3RlbmVycyk7XG4gICAgdmFyIGxpc3RlbmVyc0xlbiA9IGxpc3RlbmVyc0lzQXJyID8gZGlzcGF0Y2hMaXN0ZW5lcnMubGVuZ3RoIDogZGlzcGF0Y2hMaXN0ZW5lcnMgPyAxIDogMDtcblxuICAgIHZhciBpbnN0YW5jZXNJc0FyciA9IEFycmF5LmlzQXJyYXkoZGlzcGF0Y2hJbnN0YW5jZXMpO1xuICAgIHZhciBpbnN0YW5jZXNMZW4gPSBpbnN0YW5jZXNJc0FyciA/IGRpc3BhdGNoSW5zdGFuY2VzLmxlbmd0aCA6IGRpc3BhdGNoSW5zdGFuY2VzID8gMSA6IDA7XG5cbiAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyhpbnN0YW5jZXNJc0FyciA9PT0gbGlzdGVuZXJzSXNBcnIgJiYgaW5zdGFuY2VzTGVuID09PSBsaXN0ZW5lcnNMZW4sICdFdmVudFBsdWdpblV0aWxzOiBJbnZhbGlkIGBldmVudGAuJykgOiB2b2lkIDA7XG4gIH07XG59XG5cbi8qKlxuICogRGlzcGF0Y2ggdGhlIGV2ZW50IHRvIHRoZSBsaXN0ZW5lci5cbiAqIEBwYXJhbSB7U3ludGhldGljRXZlbnR9IGV2ZW50IFN5bnRoZXRpY0V2ZW50IHRvIGhhbmRsZVxuICogQHBhcmFtIHtib29sZWFufSBzaW11bGF0ZWQgSWYgdGhlIGV2ZW50IGlzIHNpbXVsYXRlZCAoY2hhbmdlcyBleG4gYmVoYXZpb3IpXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBsaXN0ZW5lciBBcHBsaWNhdGlvbi1sZXZlbCBjYWxsYmFja1xuICogQHBhcmFtIHsqfSBpbnN0IEludGVybmFsIGNvbXBvbmVudCBpbnN0YW5jZVxuICovXG5mdW5jdGlvbiBleGVjdXRlRGlzcGF0Y2goZXZlbnQsIHNpbXVsYXRlZCwgbGlzdGVuZXIsIGluc3QpIHtcbiAgdmFyIHR5cGUgPSBldmVudC50eXBlIHx8ICd1bmtub3duLWV2ZW50JztcbiAgZXZlbnQuY3VycmVudFRhcmdldCA9IEV2ZW50UGx1Z2luVXRpbHMuZ2V0Tm9kZUZyb21JbnN0YW5jZShpbnN0KTtcbiAgaWYgKHNpbXVsYXRlZCkge1xuICAgIFJlYWN0RXJyb3JVdGlscy5pbnZva2VHdWFyZGVkQ2FsbGJhY2tXaXRoQ2F0Y2godHlwZSwgbGlzdGVuZXIsIGV2ZW50KTtcbiAgfSBlbHNlIHtcbiAgICBSZWFjdEVycm9yVXRpbHMuaW52b2tlR3VhcmRlZENhbGxiYWNrKHR5cGUsIGxpc3RlbmVyLCBldmVudCk7XG4gIH1cbiAgZXZlbnQuY3VycmVudFRhcmdldCA9IG51bGw7XG59XG5cbi8qKlxuICogU3RhbmRhcmQvc2ltcGxlIGl0ZXJhdGlvbiB0aHJvdWdoIGFuIGV2ZW50J3MgY29sbGVjdGVkIGRpc3BhdGNoZXMuXG4gKi9cbmZ1bmN0aW9uIGV4ZWN1dGVEaXNwYXRjaGVzSW5PcmRlcihldmVudCwgc2ltdWxhdGVkKSB7XG4gIHZhciBkaXNwYXRjaExpc3RlbmVycyA9IGV2ZW50Ll9kaXNwYXRjaExpc3RlbmVycztcbiAgdmFyIGRpc3BhdGNoSW5zdGFuY2VzID0gZXZlbnQuX2Rpc3BhdGNoSW5zdGFuY2VzO1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIHZhbGlkYXRlRXZlbnREaXNwYXRjaGVzKGV2ZW50KTtcbiAgfVxuICBpZiAoQXJyYXkuaXNBcnJheShkaXNwYXRjaExpc3RlbmVycykpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRpc3BhdGNoTGlzdGVuZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIC8vIExpc3RlbmVycyBhbmQgSW5zdGFuY2VzIGFyZSB0d28gcGFyYWxsZWwgYXJyYXlzIHRoYXQgYXJlIGFsd2F5cyBpbiBzeW5jLlxuICAgICAgZXhlY3V0ZURpc3BhdGNoKGV2ZW50LCBzaW11bGF0ZWQsIGRpc3BhdGNoTGlzdGVuZXJzW2ldLCBkaXNwYXRjaEluc3RhbmNlc1tpXSk7XG4gICAgfVxuICB9IGVsc2UgaWYgKGRpc3BhdGNoTGlzdGVuZXJzKSB7XG4gICAgZXhlY3V0ZURpc3BhdGNoKGV2ZW50LCBzaW11bGF0ZWQsIGRpc3BhdGNoTGlzdGVuZXJzLCBkaXNwYXRjaEluc3RhbmNlcyk7XG4gIH1cbiAgZXZlbnQuX2Rpc3BhdGNoTGlzdGVuZXJzID0gbnVsbDtcbiAgZXZlbnQuX2Rpc3BhdGNoSW5zdGFuY2VzID0gbnVsbDtcbn1cblxuLyoqXG4gKiBTdGFuZGFyZC9zaW1wbGUgaXRlcmF0aW9uIHRocm91Z2ggYW4gZXZlbnQncyBjb2xsZWN0ZWQgZGlzcGF0Y2hlcywgYnV0IHN0b3BzXG4gKiBhdCB0aGUgZmlyc3QgZGlzcGF0Y2ggZXhlY3V0aW9uIHJldHVybmluZyB0cnVlLCBhbmQgcmV0dXJucyB0aGF0IGlkLlxuICpcbiAqIEByZXR1cm4gez9zdHJpbmd9IGlkIG9mIHRoZSBmaXJzdCBkaXNwYXRjaCBleGVjdXRpb24gd2hvJ3MgbGlzdGVuZXIgcmV0dXJuc1xuICogdHJ1ZSwgb3IgbnVsbCBpZiBubyBsaXN0ZW5lciByZXR1cm5lZCB0cnVlLlxuICovXG5mdW5jdGlvbiBleGVjdXRlRGlzcGF0Y2hlc0luT3JkZXJTdG9wQXRUcnVlSW1wbChldmVudCkge1xuICB2YXIgZGlzcGF0Y2hMaXN0ZW5lcnMgPSBldmVudC5fZGlzcGF0Y2hMaXN0ZW5lcnM7XG4gIHZhciBkaXNwYXRjaEluc3RhbmNlcyA9IGV2ZW50Ll9kaXNwYXRjaEluc3RhbmNlcztcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICB2YWxpZGF0ZUV2ZW50RGlzcGF0Y2hlcyhldmVudCk7XG4gIH1cbiAgaWYgKEFycmF5LmlzQXJyYXkoZGlzcGF0Y2hMaXN0ZW5lcnMpKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkaXNwYXRjaExpc3RlbmVycy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkKCkpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICAvLyBMaXN0ZW5lcnMgYW5kIEluc3RhbmNlcyBhcmUgdHdvIHBhcmFsbGVsIGFycmF5cyB0aGF0IGFyZSBhbHdheXMgaW4gc3luYy5cbiAgICAgIGlmIChkaXNwYXRjaExpc3RlbmVyc1tpXShldmVudCwgZGlzcGF0Y2hJbnN0YW5jZXNbaV0pKSB7XG4gICAgICAgIHJldHVybiBkaXNwYXRjaEluc3RhbmNlc1tpXTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSBpZiAoZGlzcGF0Y2hMaXN0ZW5lcnMpIHtcbiAgICBpZiAoZGlzcGF0Y2hMaXN0ZW5lcnMoZXZlbnQsIGRpc3BhdGNoSW5zdGFuY2VzKSkge1xuICAgICAgcmV0dXJuIGRpc3BhdGNoSW5zdGFuY2VzO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiBAc2VlIGV4ZWN1dGVEaXNwYXRjaGVzSW5PcmRlclN0b3BBdFRydWVJbXBsXG4gKi9cbmZ1bmN0aW9uIGV4ZWN1dGVEaXNwYXRjaGVzSW5PcmRlclN0b3BBdFRydWUoZXZlbnQpIHtcbiAgdmFyIHJldCA9IGV4ZWN1dGVEaXNwYXRjaGVzSW5PcmRlclN0b3BBdFRydWVJbXBsKGV2ZW50KTtcbiAgZXZlbnQuX2Rpc3BhdGNoSW5zdGFuY2VzID0gbnVsbDtcbiAgZXZlbnQuX2Rpc3BhdGNoTGlzdGVuZXJzID0gbnVsbDtcbiAgcmV0dXJuIHJldDtcbn1cblxuLyoqXG4gKiBFeGVjdXRpb24gb2YgYSBcImRpcmVjdFwiIGRpc3BhdGNoIC0gdGhlcmUgbXVzdCBiZSBhdCBtb3N0IG9uZSBkaXNwYXRjaFxuICogYWNjdW11bGF0ZWQgb24gdGhlIGV2ZW50IG9yIGl0IGlzIGNvbnNpZGVyZWQgYW4gZXJyb3IuIEl0IGRvZXNuJ3QgcmVhbGx5IG1ha2VcbiAqIHNlbnNlIGZvciBhbiBldmVudCB3aXRoIG11bHRpcGxlIGRpc3BhdGNoZXMgKGJ1YmJsZWQpIHRvIGtlZXAgdHJhY2sgb2YgdGhlXG4gKiByZXR1cm4gdmFsdWVzIGF0IGVhY2ggZGlzcGF0Y2ggZXhlY3V0aW9uLCBidXQgaXQgZG9lcyB0ZW5kIHRvIG1ha2Ugc2Vuc2Ugd2hlblxuICogZGVhbGluZyB3aXRoIFwiZGlyZWN0XCIgZGlzcGF0Y2hlcy5cbiAqXG4gKiBAcmV0dXJuIHsqfSBUaGUgcmV0dXJuIHZhbHVlIG9mIGV4ZWN1dGluZyB0aGUgc2luZ2xlIGRpc3BhdGNoLlxuICovXG5mdW5jdGlvbiBleGVjdXRlRGlyZWN0RGlzcGF0Y2goZXZlbnQpIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICB2YWxpZGF0ZUV2ZW50RGlzcGF0Y2hlcyhldmVudCk7XG4gIH1cbiAgdmFyIGRpc3BhdGNoTGlzdGVuZXIgPSBldmVudC5fZGlzcGF0Y2hMaXN0ZW5lcnM7XG4gIHZhciBkaXNwYXRjaEluc3RhbmNlID0gZXZlbnQuX2Rpc3BhdGNoSW5zdGFuY2VzO1xuICAhIUFycmF5LmlzQXJyYXkoZGlzcGF0Y2hMaXN0ZW5lcikgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAnZXhlY3V0ZURpcmVjdERpc3BhdGNoKC4uLik6IEludmFsaWQgYGV2ZW50YC4nKSA6IF9wcm9kSW52YXJpYW50KCcxMDMnKSA6IHZvaWQgMDtcbiAgZXZlbnQuY3VycmVudFRhcmdldCA9IGRpc3BhdGNoTGlzdGVuZXIgPyBFdmVudFBsdWdpblV0aWxzLmdldE5vZGVGcm9tSW5zdGFuY2UoZGlzcGF0Y2hJbnN0YW5jZSkgOiBudWxsO1xuICB2YXIgcmVzID0gZGlzcGF0Y2hMaXN0ZW5lciA/IGRpc3BhdGNoTGlzdGVuZXIoZXZlbnQpIDogbnVsbDtcbiAgZXZlbnQuY3VycmVudFRhcmdldCA9IG51bGw7XG4gIGV2ZW50Ll9kaXNwYXRjaExpc3RlbmVycyA9IG51bGw7XG4gIGV2ZW50Ll9kaXNwYXRjaEluc3RhbmNlcyA9IG51bGw7XG4gIHJldHVybiByZXM7XG59XG5cbi8qKlxuICogQHBhcmFtIHtTeW50aGV0aWNFdmVudH0gZXZlbnRcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWZmIG51bWJlciBvZiBkaXNwYXRjaGVzIGFjY3VtdWxhdGVkIGlzIGdyZWF0ZXIgdGhhbiAwLlxuICovXG5mdW5jdGlvbiBoYXNEaXNwYXRjaGVzKGV2ZW50KSB7XG4gIHJldHVybiAhIWV2ZW50Ll9kaXNwYXRjaExpc3RlbmVycztcbn1cblxuLyoqXG4gKiBHZW5lcmFsIHV0aWxpdGllcyB0aGF0IGFyZSB1c2VmdWwgaW4gY3JlYXRpbmcgY3VzdG9tIEV2ZW50IFBsdWdpbnMuXG4gKi9cbnZhciBFdmVudFBsdWdpblV0aWxzID0ge1xuICBpc0VuZGlzaDogaXNFbmRpc2gsXG4gIGlzTW92ZWlzaDogaXNNb3ZlaXNoLFxuICBpc1N0YXJ0aXNoOiBpc1N0YXJ0aXNoLFxuXG4gIGV4ZWN1dGVEaXJlY3REaXNwYXRjaDogZXhlY3V0ZURpcmVjdERpc3BhdGNoLFxuICBleGVjdXRlRGlzcGF0Y2hlc0luT3JkZXI6IGV4ZWN1dGVEaXNwYXRjaGVzSW5PcmRlcixcbiAgZXhlY3V0ZURpc3BhdGNoZXNJbk9yZGVyU3RvcEF0VHJ1ZTogZXhlY3V0ZURpc3BhdGNoZXNJbk9yZGVyU3RvcEF0VHJ1ZSxcbiAgaGFzRGlzcGF0Y2hlczogaGFzRGlzcGF0Y2hlcyxcblxuICBnZXRJbnN0YW5jZUZyb21Ob2RlOiBmdW5jdGlvbiAobm9kZSkge1xuICAgIHJldHVybiBDb21wb25lbnRUcmVlLmdldEluc3RhbmNlRnJvbU5vZGUobm9kZSk7XG4gIH0sXG4gIGdldE5vZGVGcm9tSW5zdGFuY2U6IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgcmV0dXJuIENvbXBvbmVudFRyZWUuZ2V0Tm9kZUZyb21JbnN0YW5jZShub2RlKTtcbiAgfSxcbiAgaXNBbmNlc3RvcjogZnVuY3Rpb24gKGEsIGIpIHtcbiAgICByZXR1cm4gVHJlZVRyYXZlcnNhbC5pc0FuY2VzdG9yKGEsIGIpO1xuICB9LFxuICBnZXRMb3dlc3RDb21tb25BbmNlc3RvcjogZnVuY3Rpb24gKGEsIGIpIHtcbiAgICByZXR1cm4gVHJlZVRyYXZlcnNhbC5nZXRMb3dlc3RDb21tb25BbmNlc3RvcihhLCBiKTtcbiAgfSxcbiAgZ2V0UGFyZW50SW5zdGFuY2U6IGZ1bmN0aW9uIChpbnN0KSB7XG4gICAgcmV0dXJuIFRyZWVUcmF2ZXJzYWwuZ2V0UGFyZW50SW5zdGFuY2UoaW5zdCk7XG4gIH0sXG4gIHRyYXZlcnNlVHdvUGhhc2U6IGZ1bmN0aW9uICh0YXJnZXQsIGZuLCBhcmcpIHtcbiAgICByZXR1cm4gVHJlZVRyYXZlcnNhbC50cmF2ZXJzZVR3b1BoYXNlKHRhcmdldCwgZm4sIGFyZyk7XG4gIH0sXG4gIHRyYXZlcnNlRW50ZXJMZWF2ZTogZnVuY3Rpb24gKGZyb20sIHRvLCBmbiwgYXJnRnJvbSwgYXJnVG8pIHtcbiAgICByZXR1cm4gVHJlZVRyYXZlcnNhbC50cmF2ZXJzZUVudGVyTGVhdmUoZnJvbSwgdG8sIGZuLCBhcmdGcm9tLCBhcmdUbyk7XG4gIH0sXG5cbiAgaW5qZWN0aW9uOiBpbmplY3Rpb25cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gRXZlbnRQbHVnaW5VdGlscztcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3JlYWN0LWRvbS9saWIvRXZlbnRQbHVnaW5VdGlscy5qcyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIFxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBFc2NhcGUgYW5kIHdyYXAga2V5IHNvIGl0IGlzIHNhZmUgdG8gdXNlIGFzIGEgcmVhY3RpZFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgdG8gYmUgZXNjYXBlZC5cbiAqIEByZXR1cm4ge3N0cmluZ30gdGhlIGVzY2FwZWQga2V5LlxuICovXG5cbmZ1bmN0aW9uIGVzY2FwZShrZXkpIHtcbiAgdmFyIGVzY2FwZVJlZ2V4ID0gL1s9Ol0vZztcbiAgdmFyIGVzY2FwZXJMb29rdXAgPSB7XG4gICAgJz0nOiAnPTAnLFxuICAgICc6JzogJz0yJ1xuICB9O1xuICB2YXIgZXNjYXBlZFN0cmluZyA9ICgnJyArIGtleSkucmVwbGFjZShlc2NhcGVSZWdleCwgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgcmV0dXJuIGVzY2FwZXJMb29rdXBbbWF0Y2hdO1xuICB9KTtcblxuICByZXR1cm4gJyQnICsgZXNjYXBlZFN0cmluZztcbn1cblxuLyoqXG4gKiBVbmVzY2FwZSBhbmQgdW53cmFwIGtleSBmb3IgaHVtYW4tcmVhZGFibGUgZGlzcGxheVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgdG8gdW5lc2NhcGUuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IHRoZSB1bmVzY2FwZWQga2V5LlxuICovXG5mdW5jdGlvbiB1bmVzY2FwZShrZXkpIHtcbiAgdmFyIHVuZXNjYXBlUmVnZXggPSAvKD0wfD0yKS9nO1xuICB2YXIgdW5lc2NhcGVyTG9va3VwID0ge1xuICAgICc9MCc6ICc9JyxcbiAgICAnPTInOiAnOidcbiAgfTtcbiAgdmFyIGtleVN1YnN0cmluZyA9IGtleVswXSA9PT0gJy4nICYmIGtleVsxXSA9PT0gJyQnID8ga2V5LnN1YnN0cmluZygyKSA6IGtleS5zdWJzdHJpbmcoMSk7XG5cbiAgcmV0dXJuICgnJyArIGtleVN1YnN0cmluZykucmVwbGFjZSh1bmVzY2FwZVJlZ2V4LCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICByZXR1cm4gdW5lc2NhcGVyTG9va3VwW21hdGNoXTtcbiAgfSk7XG59XG5cbnZhciBLZXlFc2NhcGVVdGlscyA9IHtcbiAgZXNjYXBlOiBlc2NhcGUsXG4gIHVuZXNjYXBlOiB1bmVzY2FwZVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBLZXlFc2NhcGVVdGlscztcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3JlYWN0LWRvbS9saWIvS2V5RXNjYXBlVXRpbHMuanMiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgX3Byb2RJbnZhcmlhbnQgPSByZXF1aXJlKCcuL3JlYWN0UHJvZEludmFyaWFudCcpO1xuXG52YXIgUmVhY3RQcm9wVHlwZXNTZWNyZXQgPSByZXF1aXJlKCcuL1JlYWN0UHJvcFR5cGVzU2VjcmV0Jyk7XG52YXIgcHJvcFR5cGVzRmFjdG9yeSA9IHJlcXVpcmUoJ3Byb3AtdHlwZXMvZmFjdG9yeScpO1xuXG52YXIgUmVhY3QgPSByZXF1aXJlKCdyZWFjdC9saWIvUmVhY3QnKTtcbnZhciBQcm9wVHlwZXMgPSBwcm9wVHlwZXNGYWN0b3J5KFJlYWN0LmlzVmFsaWRFbGVtZW50KTtcblxudmFyIGludmFyaWFudCA9IHJlcXVpcmUoJ2ZianMvbGliL2ludmFyaWFudCcpO1xudmFyIHdhcm5pbmcgPSByZXF1aXJlKCdmYmpzL2xpYi93YXJuaW5nJyk7XG5cbnZhciBoYXNSZWFkT25seVZhbHVlID0ge1xuICBidXR0b246IHRydWUsXG4gIGNoZWNrYm94OiB0cnVlLFxuICBpbWFnZTogdHJ1ZSxcbiAgaGlkZGVuOiB0cnVlLFxuICByYWRpbzogdHJ1ZSxcbiAgcmVzZXQ6IHRydWUsXG4gIHN1Ym1pdDogdHJ1ZVxufTtcblxuZnVuY3Rpb24gX2Fzc2VydFNpbmdsZUxpbmsoaW5wdXRQcm9wcykge1xuICAhKGlucHV0UHJvcHMuY2hlY2tlZExpbmsgPT0gbnVsbCB8fCBpbnB1dFByb3BzLnZhbHVlTGluayA9PSBudWxsKSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICdDYW5ub3QgcHJvdmlkZSBhIGNoZWNrZWRMaW5rIGFuZCBhIHZhbHVlTGluay4gSWYgeW91IHdhbnQgdG8gdXNlIGNoZWNrZWRMaW5rLCB5b3UgcHJvYmFibHkgZG9uXFwndCB3YW50IHRvIHVzZSB2YWx1ZUxpbmsgYW5kIHZpY2UgdmVyc2EuJykgOiBfcHJvZEludmFyaWFudCgnODcnKSA6IHZvaWQgMDtcbn1cbmZ1bmN0aW9uIF9hc3NlcnRWYWx1ZUxpbmsoaW5wdXRQcm9wcykge1xuICBfYXNzZXJ0U2luZ2xlTGluayhpbnB1dFByb3BzKTtcbiAgIShpbnB1dFByb3BzLnZhbHVlID09IG51bGwgJiYgaW5wdXRQcm9wcy5vbkNoYW5nZSA9PSBudWxsKSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICdDYW5ub3QgcHJvdmlkZSBhIHZhbHVlTGluayBhbmQgYSB2YWx1ZSBvciBvbkNoYW5nZSBldmVudC4gSWYgeW91IHdhbnQgdG8gdXNlIHZhbHVlIG9yIG9uQ2hhbmdlLCB5b3UgcHJvYmFibHkgZG9uXFwndCB3YW50IHRvIHVzZSB2YWx1ZUxpbmsuJykgOiBfcHJvZEludmFyaWFudCgnODgnKSA6IHZvaWQgMDtcbn1cblxuZnVuY3Rpb24gX2Fzc2VydENoZWNrZWRMaW5rKGlucHV0UHJvcHMpIHtcbiAgX2Fzc2VydFNpbmdsZUxpbmsoaW5wdXRQcm9wcyk7XG4gICEoaW5wdXRQcm9wcy5jaGVja2VkID09IG51bGwgJiYgaW5wdXRQcm9wcy5vbkNoYW5nZSA9PSBudWxsKSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICdDYW5ub3QgcHJvdmlkZSBhIGNoZWNrZWRMaW5rIGFuZCBhIGNoZWNrZWQgcHJvcGVydHkgb3Igb25DaGFuZ2UgZXZlbnQuIElmIHlvdSB3YW50IHRvIHVzZSBjaGVja2VkIG9yIG9uQ2hhbmdlLCB5b3UgcHJvYmFibHkgZG9uXFwndCB3YW50IHRvIHVzZSBjaGVja2VkTGluaycpIDogX3Byb2RJbnZhcmlhbnQoJzg5JykgOiB2b2lkIDA7XG59XG5cbnZhciBwcm9wVHlwZXMgPSB7XG4gIHZhbHVlOiBmdW5jdGlvbiAocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lKSB7XG4gICAgaWYgKCFwcm9wc1twcm9wTmFtZV0gfHwgaGFzUmVhZE9ubHlWYWx1ZVtwcm9wcy50eXBlXSB8fCBwcm9wcy5vbkNoYW5nZSB8fCBwcm9wcy5yZWFkT25seSB8fCBwcm9wcy5kaXNhYmxlZCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBuZXcgRXJyb3IoJ1lvdSBwcm92aWRlZCBhIGB2YWx1ZWAgcHJvcCB0byBhIGZvcm0gZmllbGQgd2l0aG91dCBhbiAnICsgJ2BvbkNoYW5nZWAgaGFuZGxlci4gVGhpcyB3aWxsIHJlbmRlciBhIHJlYWQtb25seSBmaWVsZC4gSWYgJyArICd0aGUgZmllbGQgc2hvdWxkIGJlIG11dGFibGUgdXNlIGBkZWZhdWx0VmFsdWVgLiBPdGhlcndpc2UsICcgKyAnc2V0IGVpdGhlciBgb25DaGFuZ2VgIG9yIGByZWFkT25seWAuJyk7XG4gIH0sXG4gIGNoZWNrZWQ6IGZ1bmN0aW9uIChwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUpIHtcbiAgICBpZiAoIXByb3BzW3Byb3BOYW1lXSB8fCBwcm9wcy5vbkNoYW5nZSB8fCBwcm9wcy5yZWFkT25seSB8fCBwcm9wcy5kaXNhYmxlZCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBuZXcgRXJyb3IoJ1lvdSBwcm92aWRlZCBhIGBjaGVja2VkYCBwcm9wIHRvIGEgZm9ybSBmaWVsZCB3aXRob3V0IGFuICcgKyAnYG9uQ2hhbmdlYCBoYW5kbGVyLiBUaGlzIHdpbGwgcmVuZGVyIGEgcmVhZC1vbmx5IGZpZWxkLiBJZiAnICsgJ3RoZSBmaWVsZCBzaG91bGQgYmUgbXV0YWJsZSB1c2UgYGRlZmF1bHRDaGVja2VkYC4gT3RoZXJ3aXNlLCAnICsgJ3NldCBlaXRoZXIgYG9uQ2hhbmdlYCBvciBgcmVhZE9ubHlgLicpO1xuICB9LFxuICBvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmNcbn07XG5cbnZhciBsb2dnZWRUeXBlRmFpbHVyZXMgPSB7fTtcbmZ1bmN0aW9uIGdldERlY2xhcmF0aW9uRXJyb3JBZGRlbmR1bShvd25lcikge1xuICBpZiAob3duZXIpIHtcbiAgICB2YXIgbmFtZSA9IG93bmVyLmdldE5hbWUoKTtcbiAgICBpZiAobmFtZSkge1xuICAgICAgcmV0dXJuICcgQ2hlY2sgdGhlIHJlbmRlciBtZXRob2Qgb2YgYCcgKyBuYW1lICsgJ2AuJztcbiAgICB9XG4gIH1cbiAgcmV0dXJuICcnO1xufVxuXG4vKipcbiAqIFByb3ZpZGUgYSBsaW5rZWQgYHZhbHVlYCBhdHRyaWJ1dGUgZm9yIGNvbnRyb2xsZWQgZm9ybXMuIFlvdSBzaG91bGQgbm90IHVzZVxuICogdGhpcyBvdXRzaWRlIG9mIHRoZSBSZWFjdERPTSBjb250cm9sbGVkIGZvcm0gY29tcG9uZW50cy5cbiAqL1xudmFyIExpbmtlZFZhbHVlVXRpbHMgPSB7XG4gIGNoZWNrUHJvcFR5cGVzOiBmdW5jdGlvbiAodGFnTmFtZSwgcHJvcHMsIG93bmVyKSB7XG4gICAgZm9yICh2YXIgcHJvcE5hbWUgaW4gcHJvcFR5cGVzKSB7XG4gICAgICBpZiAocHJvcFR5cGVzLmhhc093blByb3BlcnR5KHByb3BOYW1lKSkge1xuICAgICAgICB2YXIgZXJyb3IgPSBwcm9wVHlwZXNbcHJvcE5hbWVdKHByb3BzLCBwcm9wTmFtZSwgdGFnTmFtZSwgJ3Byb3AnLCBudWxsLCBSZWFjdFByb3BUeXBlc1NlY3JldCk7XG4gICAgICB9XG4gICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciAmJiAhKGVycm9yLm1lc3NhZ2UgaW4gbG9nZ2VkVHlwZUZhaWx1cmVzKSkge1xuICAgICAgICAvLyBPbmx5IG1vbml0b3IgdGhpcyBmYWlsdXJlIG9uY2UgYmVjYXVzZSB0aGVyZSB0ZW5kcyB0byBiZSBhIGxvdCBvZiB0aGVcbiAgICAgICAgLy8gc2FtZSBlcnJvci5cbiAgICAgICAgbG9nZ2VkVHlwZUZhaWx1cmVzW2Vycm9yLm1lc3NhZ2VdID0gdHJ1ZTtcblxuICAgICAgICB2YXIgYWRkZW5kdW0gPSBnZXREZWNsYXJhdGlvbkVycm9yQWRkZW5kdW0ob3duZXIpO1xuICAgICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyhmYWxzZSwgJ0ZhaWxlZCBmb3JtIHByb3BUeXBlOiAlcyVzJywgZXJyb3IubWVzc2FnZSwgYWRkZW5kdW0pIDogdm9pZCAwO1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IGlucHV0UHJvcHMgUHJvcHMgZm9yIGZvcm0gY29tcG9uZW50XG4gICAqIEByZXR1cm4geyp9IGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlucHV0IGVpdGhlciBmcm9tIHZhbHVlIHByb3Agb3IgbGluay5cbiAgICovXG4gIGdldFZhbHVlOiBmdW5jdGlvbiAoaW5wdXRQcm9wcykge1xuICAgIGlmIChpbnB1dFByb3BzLnZhbHVlTGluaykge1xuICAgICAgX2Fzc2VydFZhbHVlTGluayhpbnB1dFByb3BzKTtcbiAgICAgIHJldHVybiBpbnB1dFByb3BzLnZhbHVlTGluay52YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGlucHV0UHJvcHMudmFsdWU7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBpbnB1dFByb3BzIFByb3BzIGZvciBmb3JtIGNvbXBvbmVudFxuICAgKiBAcmV0dXJuIHsqfSBjdXJyZW50IGNoZWNrZWQgc3RhdHVzIG9mIHRoZSBpbnB1dCBlaXRoZXIgZnJvbSBjaGVja2VkIHByb3BcbiAgICogICAgICAgICAgICAgb3IgbGluay5cbiAgICovXG4gIGdldENoZWNrZWQ6IGZ1bmN0aW9uIChpbnB1dFByb3BzKSB7XG4gICAgaWYgKGlucHV0UHJvcHMuY2hlY2tlZExpbmspIHtcbiAgICAgIF9hc3NlcnRDaGVja2VkTGluayhpbnB1dFByb3BzKTtcbiAgICAgIHJldHVybiBpbnB1dFByb3BzLmNoZWNrZWRMaW5rLnZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gaW5wdXRQcm9wcy5jaGVja2VkO1xuICB9LFxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge29iamVjdH0gaW5wdXRQcm9wcyBQcm9wcyBmb3IgZm9ybSBjb21wb25lbnRcbiAgICogQHBhcmFtIHtTeW50aGV0aWNFdmVudH0gZXZlbnQgY2hhbmdlIGV2ZW50IHRvIGhhbmRsZVxuICAgKi9cbiAgZXhlY3V0ZU9uQ2hhbmdlOiBmdW5jdGlvbiAoaW5wdXRQcm9wcywgZXZlbnQpIHtcbiAgICBpZiAoaW5wdXRQcm9wcy52YWx1ZUxpbmspIHtcbiAgICAgIF9hc3NlcnRWYWx1ZUxpbmsoaW5wdXRQcm9wcyk7XG4gICAgICByZXR1cm4gaW5wdXRQcm9wcy52YWx1ZUxpbmsucmVxdWVzdENoYW5nZShldmVudC50YXJnZXQudmFsdWUpO1xuICAgIH0gZWxzZSBpZiAoaW5wdXRQcm9wcy5jaGVja2VkTGluaykge1xuICAgICAgX2Fzc2VydENoZWNrZWRMaW5rKGlucHV0UHJvcHMpO1xuICAgICAgcmV0dXJuIGlucHV0UHJvcHMuY2hlY2tlZExpbmsucmVxdWVzdENoYW5nZShldmVudC50YXJnZXQuY2hlY2tlZCk7XG4gICAgfSBlbHNlIGlmIChpbnB1dFByb3BzLm9uQ2hhbmdlKSB7XG4gICAgICByZXR1cm4gaW5wdXRQcm9wcy5vbkNoYW5nZS5jYWxsKHVuZGVmaW5lZCwgZXZlbnQpO1xuICAgIH1cbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBMaW5rZWRWYWx1ZVV0aWxzO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QtZG9tL2xpYi9MaW5rZWRWYWx1ZVV0aWxzLmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxNC1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgX3Byb2RJbnZhcmlhbnQgPSByZXF1aXJlKCcuL3JlYWN0UHJvZEludmFyaWFudCcpO1xuXG52YXIgaW52YXJpYW50ID0gcmVxdWlyZSgnZmJqcy9saWIvaW52YXJpYW50Jyk7XG5cbnZhciBpbmplY3RlZCA9IGZhbHNlO1xuXG52YXIgUmVhY3RDb21wb25lbnRFbnZpcm9ubWVudCA9IHtcbiAgLyoqXG4gICAqIE9wdGlvbmFsbHkgaW5qZWN0YWJsZSBob29rIGZvciBzd2FwcGluZyBvdXQgbW91bnQgaW1hZ2VzIGluIHRoZSBtaWRkbGUgb2ZcbiAgICogdGhlIHRyZWUuXG4gICAqL1xuICByZXBsYWNlTm9kZVdpdGhNYXJrdXA6IG51bGwsXG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsbHkgaW5qZWN0YWJsZSBob29rIGZvciBwcm9jZXNzaW5nIGEgcXVldWUgb2YgY2hpbGQgdXBkYXRlcy4gV2lsbFxuICAgKiBsYXRlciBtb3ZlIGludG8gTXVsdGlDaGlsZENvbXBvbmVudHMuXG4gICAqL1xuICBwcm9jZXNzQ2hpbGRyZW5VcGRhdGVzOiBudWxsLFxuXG4gIGluamVjdGlvbjoge1xuICAgIGluamVjdEVudmlyb25tZW50OiBmdW5jdGlvbiAoZW52aXJvbm1lbnQpIHtcbiAgICAgICEhaW5qZWN0ZWQgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAnUmVhY3RDb21wb3NpdGVDb21wb25lbnQ6IGluamVjdEVudmlyb25tZW50KCkgY2FuIG9ubHkgYmUgY2FsbGVkIG9uY2UuJykgOiBfcHJvZEludmFyaWFudCgnMTA0JykgOiB2b2lkIDA7XG4gICAgICBSZWFjdENvbXBvbmVudEVudmlyb25tZW50LnJlcGxhY2VOb2RlV2l0aE1hcmt1cCA9IGVudmlyb25tZW50LnJlcGxhY2VOb2RlV2l0aE1hcmt1cDtcbiAgICAgIFJlYWN0Q29tcG9uZW50RW52aXJvbm1lbnQucHJvY2Vzc0NoaWxkcmVuVXBkYXRlcyA9IGVudmlyb25tZW50LnByb2Nlc3NDaGlsZHJlblVwZGF0ZXM7XG4gICAgICBpbmplY3RlZCA9IHRydWU7XG4gICAgfVxuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0Q29tcG9uZW50RW52aXJvbm1lbnQ7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1kb20vbGliL1JlYWN0Q29tcG9uZW50RW52aXJvbm1lbnQuanMiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBjYXVnaHRFcnJvciA9IG51bGw7XG5cbi8qKlxuICogQ2FsbCBhIGZ1bmN0aW9uIHdoaWxlIGd1YXJkaW5nIGFnYWluc3QgZXJyb3JzIHRoYXQgaGFwcGVucyB3aXRoaW4gaXQuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgb2YgdGhlIGd1YXJkIHRvIHVzZSBmb3IgbG9nZ2luZyBvciBkZWJ1Z2dpbmdcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGludm9rZVxuICogQHBhcmFtIHsqfSBhIEZpcnN0IGFyZ3VtZW50XG4gKiBAcGFyYW0geyp9IGIgU2Vjb25kIGFyZ3VtZW50XG4gKi9cbmZ1bmN0aW9uIGludm9rZUd1YXJkZWRDYWxsYmFjayhuYW1lLCBmdW5jLCBhKSB7XG4gIHRyeSB7XG4gICAgZnVuYyhhKTtcbiAgfSBjYXRjaCAoeCkge1xuICAgIGlmIChjYXVnaHRFcnJvciA9PT0gbnVsbCkge1xuICAgICAgY2F1Z2h0RXJyb3IgPSB4O1xuICAgIH1cbiAgfVxufVxuXG52YXIgUmVhY3RFcnJvclV0aWxzID0ge1xuICBpbnZva2VHdWFyZGVkQ2FsbGJhY2s6IGludm9rZUd1YXJkZWRDYWxsYmFjayxcblxuICAvKipcbiAgICogSW52b2tlZCBieSBSZWFjdFRlc3RVdGlscy5TaW11bGF0ZSBzbyB0aGF0IGFueSBlcnJvcnMgdGhyb3duIGJ5IHRoZSBldmVudFxuICAgKiBoYW5kbGVyIGFyZSBzdXJlIHRvIGJlIHJldGhyb3duIGJ5IHJldGhyb3dDYXVnaHRFcnJvci5cbiAgICovXG4gIGludm9rZUd1YXJkZWRDYWxsYmFja1dpdGhDYXRjaDogaW52b2tlR3VhcmRlZENhbGxiYWNrLFxuXG4gIC8qKlxuICAgKiBEdXJpbmcgZXhlY3V0aW9uIG9mIGd1YXJkZWQgZnVuY3Rpb25zIHdlIHdpbGwgY2FwdHVyZSB0aGUgZmlyc3QgZXJyb3Igd2hpY2hcbiAgICogd2Ugd2lsbCByZXRocm93IHRvIGJlIGhhbmRsZWQgYnkgdGhlIHRvcCBsZXZlbCBlcnJvciBoYW5kbGVyLlxuICAgKi9cbiAgcmV0aHJvd0NhdWdodEVycm9yOiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGNhdWdodEVycm9yKSB7XG4gICAgICB2YXIgZXJyb3IgPSBjYXVnaHRFcnJvcjtcbiAgICAgIGNhdWdodEVycm9yID0gbnVsbDtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxufTtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgLyoqXG4gICAqIFRvIGhlbHAgZGV2ZWxvcG1lbnQgd2UgY2FuIGdldCBiZXR0ZXIgZGV2dG9vbHMgaW50ZWdyYXRpb24gYnkgc2ltdWxhdGluZyBhXG4gICAqIHJlYWwgYnJvd3NlciBldmVudC5cbiAgICovXG4gIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygd2luZG93LmRpc3BhdGNoRXZlbnQgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgZG9jdW1lbnQuY3JlYXRlRXZlbnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICB2YXIgZmFrZU5vZGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdyZWFjdCcpO1xuICAgIFJlYWN0RXJyb3JVdGlscy5pbnZva2VHdWFyZGVkQ2FsbGJhY2sgPSBmdW5jdGlvbiAobmFtZSwgZnVuYywgYSkge1xuICAgICAgdmFyIGJvdW5kRnVuYyA9IGZ1bmMuYmluZChudWxsLCBhKTtcbiAgICAgIHZhciBldnRUeXBlID0gJ3JlYWN0LScgKyBuYW1lO1xuICAgICAgZmFrZU5vZGUuYWRkRXZlbnRMaXN0ZW5lcihldnRUeXBlLCBib3VuZEZ1bmMsIGZhbHNlKTtcbiAgICAgIHZhciBldnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnRXZlbnQnKTtcbiAgICAgIGV2dC5pbml0RXZlbnQoZXZ0VHlwZSwgZmFsc2UsIGZhbHNlKTtcbiAgICAgIGZha2VOb2RlLmRpc3BhdGNoRXZlbnQoZXZ0KTtcbiAgICAgIGZha2VOb2RlLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZ0VHlwZSwgYm91bmRGdW5jLCBmYWxzZSk7XG4gICAgfTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0RXJyb3JVdGlscztcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3JlYWN0LWRvbS9saWIvUmVhY3RFcnJvclV0aWxzLmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxNS1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIF9wcm9kSW52YXJpYW50ID0gcmVxdWlyZSgnLi9yZWFjdFByb2RJbnZhcmlhbnQnKTtcblxudmFyIFJlYWN0Q3VycmVudE93bmVyID0gcmVxdWlyZSgncmVhY3QvbGliL1JlYWN0Q3VycmVudE93bmVyJyk7XG52YXIgUmVhY3RJbnN0YW5jZU1hcCA9IHJlcXVpcmUoJy4vUmVhY3RJbnN0YW5jZU1hcCcpO1xudmFyIFJlYWN0SW5zdHJ1bWVudGF0aW9uID0gcmVxdWlyZSgnLi9SZWFjdEluc3RydW1lbnRhdGlvbicpO1xudmFyIFJlYWN0VXBkYXRlcyA9IHJlcXVpcmUoJy4vUmVhY3RVcGRhdGVzJyk7XG5cbnZhciBpbnZhcmlhbnQgPSByZXF1aXJlKCdmYmpzL2xpYi9pbnZhcmlhbnQnKTtcbnZhciB3YXJuaW5nID0gcmVxdWlyZSgnZmJqcy9saWIvd2FybmluZycpO1xuXG5mdW5jdGlvbiBlbnF1ZXVlVXBkYXRlKGludGVybmFsSW5zdGFuY2UpIHtcbiAgUmVhY3RVcGRhdGVzLmVucXVldWVVcGRhdGUoaW50ZXJuYWxJbnN0YW5jZSk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVuZXhwZWN0ZWRBcmd1bWVudChhcmcpIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgYXJnO1xuICBpZiAodHlwZSAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gdHlwZTtcbiAgfVxuICB2YXIgZGlzcGxheU5hbWUgPSBhcmcuY29uc3RydWN0b3IgJiYgYXJnLmNvbnN0cnVjdG9yLm5hbWUgfHwgdHlwZTtcbiAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhhcmcpO1xuICBpZiAoa2V5cy5sZW5ndGggPiAwICYmIGtleXMubGVuZ3RoIDwgMjApIHtcbiAgICByZXR1cm4gZGlzcGxheU5hbWUgKyAnIChrZXlzOiAnICsga2V5cy5qb2luKCcsICcpICsgJyknO1xuICB9XG4gIHJldHVybiBkaXNwbGF5TmFtZTtcbn1cblxuZnVuY3Rpb24gZ2V0SW50ZXJuYWxJbnN0YW5jZVJlYWR5Rm9yVXBkYXRlKHB1YmxpY0luc3RhbmNlLCBjYWxsZXJOYW1lKSB7XG4gIHZhciBpbnRlcm5hbEluc3RhbmNlID0gUmVhY3RJbnN0YW5jZU1hcC5nZXQocHVibGljSW5zdGFuY2UpO1xuICBpZiAoIWludGVybmFsSW5zdGFuY2UpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgdmFyIGN0b3IgPSBwdWJsaWNJbnN0YW5jZS5jb25zdHJ1Y3RvcjtcbiAgICAgIC8vIE9ubHkgd2FybiB3aGVuIHdlIGhhdmUgYSBjYWxsZXJOYW1lLiBPdGhlcndpc2Ugd2Ugc2hvdWxkIGJlIHNpbGVudC5cbiAgICAgIC8vIFdlJ3JlIHByb2JhYmx5IGNhbGxpbmcgZnJvbSBlbnF1ZXVlQ2FsbGJhY2suIFdlIGRvbid0IHdhbnQgdG8gd2FyblxuICAgICAgLy8gdGhlcmUgYmVjYXVzZSB3ZSBhbHJlYWR5IHdhcm5lZCBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgbGlmZWN5Y2xlIG1ldGhvZC5cbiAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKCFjYWxsZXJOYW1lLCAnJXMoLi4uKTogQ2FuIG9ubHkgdXBkYXRlIGEgbW91bnRlZCBvciBtb3VudGluZyBjb21wb25lbnQuICcgKyAnVGhpcyB1c3VhbGx5IG1lYW5zIHlvdSBjYWxsZWQgJXMoKSBvbiBhbiB1bm1vdW50ZWQgY29tcG9uZW50LiAnICsgJ1RoaXMgaXMgYSBuby1vcC4gUGxlYXNlIGNoZWNrIHRoZSBjb2RlIGZvciB0aGUgJXMgY29tcG9uZW50LicsIGNhbGxlck5hbWUsIGNhbGxlck5hbWUsIGN0b3IgJiYgKGN0b3IuZGlzcGxheU5hbWUgfHwgY3Rvci5uYW1lKSB8fCAnUmVhY3RDbGFzcycpIDogdm9pZCAwO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcoUmVhY3RDdXJyZW50T3duZXIuY3VycmVudCA9PSBudWxsLCAnJXMoLi4uKTogQ2Fubm90IHVwZGF0ZSBkdXJpbmcgYW4gZXhpc3Rpbmcgc3RhdGUgdHJhbnNpdGlvbiAoc3VjaCBhcyAnICsgXCJ3aXRoaW4gYHJlbmRlcmAgb3IgYW5vdGhlciBjb21wb25lbnQncyBjb25zdHJ1Y3RvcikuIFJlbmRlciBtZXRob2RzIFwiICsgJ3Nob3VsZCBiZSBhIHB1cmUgZnVuY3Rpb24gb2YgcHJvcHMgYW5kIHN0YXRlOyBjb25zdHJ1Y3RvciAnICsgJ3NpZGUtZWZmZWN0cyBhcmUgYW4gYW50aS1wYXR0ZXJuLCBidXQgY2FuIGJlIG1vdmVkIHRvICcgKyAnYGNvbXBvbmVudFdpbGxNb3VudGAuJywgY2FsbGVyTmFtZSkgOiB2b2lkIDA7XG4gIH1cblxuICByZXR1cm4gaW50ZXJuYWxJbnN0YW5jZTtcbn1cblxuLyoqXG4gKiBSZWFjdFVwZGF0ZVF1ZXVlIGFsbG93cyBmb3Igc3RhdGUgdXBkYXRlcyB0byBiZSBzY2hlZHVsZWQgaW50byBhIGxhdGVyXG4gKiByZWNvbmNpbGlhdGlvbiBzdGVwLlxuICovXG52YXIgUmVhY3RVcGRhdGVRdWV1ZSA9IHtcbiAgLyoqXG4gICAqIENoZWNrcyB3aGV0aGVyIG9yIG5vdCB0aGlzIGNvbXBvc2l0ZSBjb21wb25lbnQgaXMgbW91bnRlZC5cbiAgICogQHBhcmFtIHtSZWFjdENsYXNzfSBwdWJsaWNJbnN0YW5jZSBUaGUgaW5zdGFuY2Ugd2Ugd2FudCB0byB0ZXN0LlxuICAgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIG1vdW50ZWQsIGZhbHNlIG90aGVyd2lzZS5cbiAgICogQHByb3RlY3RlZFxuICAgKiBAZmluYWxcbiAgICovXG4gIGlzTW91bnRlZDogZnVuY3Rpb24gKHB1YmxpY0luc3RhbmNlKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIHZhciBvd25lciA9IFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQ7XG4gICAgICBpZiAob3duZXIgIT09IG51bGwpIHtcbiAgICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcob3duZXIuX3dhcm5lZEFib3V0UmVmc0luUmVuZGVyLCAnJXMgaXMgYWNjZXNzaW5nIGlzTW91bnRlZCBpbnNpZGUgaXRzIHJlbmRlcigpIGZ1bmN0aW9uLiAnICsgJ3JlbmRlcigpIHNob3VsZCBiZSBhIHB1cmUgZnVuY3Rpb24gb2YgcHJvcHMgYW5kIHN0YXRlLiBJdCBzaG91bGQgJyArICduZXZlciBhY2Nlc3Mgc29tZXRoaW5nIHRoYXQgcmVxdWlyZXMgc3RhbGUgZGF0YSBmcm9tIHRoZSBwcmV2aW91cyAnICsgJ3JlbmRlciwgc3VjaCBhcyByZWZzLiBNb3ZlIHRoaXMgbG9naWMgdG8gY29tcG9uZW50RGlkTW91bnQgYW5kICcgKyAnY29tcG9uZW50RGlkVXBkYXRlIGluc3RlYWQuJywgb3duZXIuZ2V0TmFtZSgpIHx8ICdBIGNvbXBvbmVudCcpIDogdm9pZCAwO1xuICAgICAgICBvd25lci5fd2FybmVkQWJvdXRSZWZzSW5SZW5kZXIgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICB2YXIgaW50ZXJuYWxJbnN0YW5jZSA9IFJlYWN0SW5zdGFuY2VNYXAuZ2V0KHB1YmxpY0luc3RhbmNlKTtcbiAgICBpZiAoaW50ZXJuYWxJbnN0YW5jZSkge1xuICAgICAgLy8gRHVyaW5nIGNvbXBvbmVudFdpbGxNb3VudCBhbmQgcmVuZGVyIHRoaXMgd2lsbCBzdGlsbCBiZSBudWxsIGJ1dCBhZnRlclxuICAgICAgLy8gdGhhdCB3aWxsIGFsd2F5cyByZW5kZXIgdG8gc29tZXRoaW5nLiBBdCBsZWFzdCBmb3Igbm93LiBTbyB3ZSBjYW4gdXNlXG4gICAgICAvLyB0aGlzIGhhY2suXG4gICAgICByZXR1cm4gISFpbnRlcm5hbEluc3RhbmNlLl9yZW5kZXJlZENvbXBvbmVudDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfSxcblxuICAvKipcbiAgICogRW5xdWV1ZSBhIGNhbGxiYWNrIHRoYXQgd2lsbCBiZSBleGVjdXRlZCBhZnRlciBhbGwgdGhlIHBlbmRpbmcgdXBkYXRlc1xuICAgKiBoYXZlIHByb2Nlc3NlZC5cbiAgICpcbiAgICogQHBhcmFtIHtSZWFjdENsYXNzfSBwdWJsaWNJbnN0YW5jZSBUaGUgaW5zdGFuY2UgdG8gdXNlIGFzIGB0aGlzYCBjb250ZXh0LlxuICAgKiBAcGFyYW0gez9mdW5jdGlvbn0gY2FsbGJhY2sgQ2FsbGVkIGFmdGVyIHN0YXRlIGlzIHVwZGF0ZWQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjYWxsZXJOYW1lIE5hbWUgb2YgdGhlIGNhbGxpbmcgZnVuY3Rpb24gaW4gdGhlIHB1YmxpYyBBUEkuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZW5xdWV1ZUNhbGxiYWNrOiBmdW5jdGlvbiAocHVibGljSW5zdGFuY2UsIGNhbGxiYWNrLCBjYWxsZXJOYW1lKSB7XG4gICAgUmVhY3RVcGRhdGVRdWV1ZS52YWxpZGF0ZUNhbGxiYWNrKGNhbGxiYWNrLCBjYWxsZXJOYW1lKTtcbiAgICB2YXIgaW50ZXJuYWxJbnN0YW5jZSA9IGdldEludGVybmFsSW5zdGFuY2VSZWFkeUZvclVwZGF0ZShwdWJsaWNJbnN0YW5jZSk7XG5cbiAgICAvLyBQcmV2aW91c2x5IHdlIHdvdWxkIHRocm93IGFuIGVycm9yIGlmIHdlIGRpZG4ndCBoYXZlIGFuIGludGVybmFsXG4gICAgLy8gaW5zdGFuY2UuIFNpbmNlIHdlIHdhbnQgdG8gbWFrZSBpdCBhIG5vLW9wIGluc3RlYWQsIHdlIG1pcnJvciB0aGUgc2FtZVxuICAgIC8vIGJlaGF2aW9yIHdlIGhhdmUgaW4gb3RoZXIgZW5xdWV1ZSogbWV0aG9kcy5cbiAgICAvLyBXZSBhbHNvIG5lZWQgdG8gaWdub3JlIGNhbGxiYWNrcyBpbiBjb21wb25lbnRXaWxsTW91bnQuIFNlZVxuICAgIC8vIGVucXVldWVVcGRhdGVzLlxuICAgIGlmICghaW50ZXJuYWxJbnN0YW5jZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGludGVybmFsSW5zdGFuY2UuX3BlbmRpbmdDYWxsYmFja3MpIHtcbiAgICAgIGludGVybmFsSW5zdGFuY2UuX3BlbmRpbmdDYWxsYmFja3MucHVzaChjYWxsYmFjayk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGludGVybmFsSW5zdGFuY2UuX3BlbmRpbmdDYWxsYmFja3MgPSBbY2FsbGJhY2tdO1xuICAgIH1cbiAgICAvLyBUT0RPOiBUaGUgY2FsbGJhY2sgaGVyZSBpcyBpZ25vcmVkIHdoZW4gc2V0U3RhdGUgaXMgY2FsbGVkIGZyb21cbiAgICAvLyBjb21wb25lbnRXaWxsTW91bnQuIEVpdGhlciBmaXggaXQgb3IgZGlzYWxsb3cgZG9pbmcgc28gY29tcGxldGVseSBpblxuICAgIC8vIGZhdm9yIG9mIGdldEluaXRpYWxTdGF0ZS4gQWx0ZXJuYXRpdmVseSwgd2UgY2FuIGRpc2FsbG93XG4gICAgLy8gY29tcG9uZW50V2lsbE1vdW50IGR1cmluZyBzZXJ2ZXItc2lkZSByZW5kZXJpbmcuXG4gICAgZW5xdWV1ZVVwZGF0ZShpbnRlcm5hbEluc3RhbmNlKTtcbiAgfSxcblxuICBlbnF1ZXVlQ2FsbGJhY2tJbnRlcm5hbDogZnVuY3Rpb24gKGludGVybmFsSW5zdGFuY2UsIGNhbGxiYWNrKSB7XG4gICAgaWYgKGludGVybmFsSW5zdGFuY2UuX3BlbmRpbmdDYWxsYmFja3MpIHtcbiAgICAgIGludGVybmFsSW5zdGFuY2UuX3BlbmRpbmdDYWxsYmFja3MucHVzaChjYWxsYmFjayk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGludGVybmFsSW5zdGFuY2UuX3BlbmRpbmdDYWxsYmFja3MgPSBbY2FsbGJhY2tdO1xuICAgIH1cbiAgICBlbnF1ZXVlVXBkYXRlKGludGVybmFsSW5zdGFuY2UpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBGb3JjZXMgYW4gdXBkYXRlLiBUaGlzIHNob3VsZCBvbmx5IGJlIGludm9rZWQgd2hlbiBpdCBpcyBrbm93biB3aXRoXG4gICAqIGNlcnRhaW50eSB0aGF0IHdlIGFyZSAqKm5vdCoqIGluIGEgRE9NIHRyYW5zYWN0aW9uLlxuICAgKlxuICAgKiBZb3UgbWF5IHdhbnQgdG8gY2FsbCB0aGlzIHdoZW4geW91IGtub3cgdGhhdCBzb21lIGRlZXBlciBhc3BlY3Qgb2YgdGhlXG4gICAqIGNvbXBvbmVudCdzIHN0YXRlIGhhcyBjaGFuZ2VkIGJ1dCBgc2V0U3RhdGVgIHdhcyBub3QgY2FsbGVkLlxuICAgKlxuICAgKiBUaGlzIHdpbGwgbm90IGludm9rZSBgc2hvdWxkQ29tcG9uZW50VXBkYXRlYCwgYnV0IGl0IHdpbGwgaW52b2tlXG4gICAqIGBjb21wb25lbnRXaWxsVXBkYXRlYCBhbmQgYGNvbXBvbmVudERpZFVwZGF0ZWAuXG4gICAqXG4gICAqIEBwYXJhbSB7UmVhY3RDbGFzc30gcHVibGljSW5zdGFuY2UgVGhlIGluc3RhbmNlIHRoYXQgc2hvdWxkIHJlcmVuZGVyLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGVucXVldWVGb3JjZVVwZGF0ZTogZnVuY3Rpb24gKHB1YmxpY0luc3RhbmNlKSB7XG4gICAgdmFyIGludGVybmFsSW5zdGFuY2UgPSBnZXRJbnRlcm5hbEluc3RhbmNlUmVhZHlGb3JVcGRhdGUocHVibGljSW5zdGFuY2UsICdmb3JjZVVwZGF0ZScpO1xuXG4gICAgaWYgKCFpbnRlcm5hbEluc3RhbmNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaW50ZXJuYWxJbnN0YW5jZS5fcGVuZGluZ0ZvcmNlVXBkYXRlID0gdHJ1ZTtcblxuICAgIGVucXVldWVVcGRhdGUoaW50ZXJuYWxJbnN0YW5jZSk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFJlcGxhY2VzIGFsbCBvZiB0aGUgc3RhdGUuIEFsd2F5cyB1c2UgdGhpcyBvciBgc2V0U3RhdGVgIHRvIG11dGF0ZSBzdGF0ZS5cbiAgICogWW91IHNob3VsZCB0cmVhdCBgdGhpcy5zdGF0ZWAgYXMgaW1tdXRhYmxlLlxuICAgKlxuICAgKiBUaGVyZSBpcyBubyBndWFyYW50ZWUgdGhhdCBgdGhpcy5zdGF0ZWAgd2lsbCBiZSBpbW1lZGlhdGVseSB1cGRhdGVkLCBzb1xuICAgKiBhY2Nlc3NpbmcgYHRoaXMuc3RhdGVgIGFmdGVyIGNhbGxpbmcgdGhpcyBtZXRob2QgbWF5IHJldHVybiB0aGUgb2xkIHZhbHVlLlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0Q2xhc3N9IHB1YmxpY0luc3RhbmNlIFRoZSBpbnN0YW5jZSB0aGF0IHNob3VsZCByZXJlbmRlci5cbiAgICogQHBhcmFtIHtvYmplY3R9IGNvbXBsZXRlU3RhdGUgTmV4dCBzdGF0ZS5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBlbnF1ZXVlUmVwbGFjZVN0YXRlOiBmdW5jdGlvbiAocHVibGljSW5zdGFuY2UsIGNvbXBsZXRlU3RhdGUsIGNhbGxiYWNrKSB7XG4gICAgdmFyIGludGVybmFsSW5zdGFuY2UgPSBnZXRJbnRlcm5hbEluc3RhbmNlUmVhZHlGb3JVcGRhdGUocHVibGljSW5zdGFuY2UsICdyZXBsYWNlU3RhdGUnKTtcblxuICAgIGlmICghaW50ZXJuYWxJbnN0YW5jZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGludGVybmFsSW5zdGFuY2UuX3BlbmRpbmdTdGF0ZVF1ZXVlID0gW2NvbXBsZXRlU3RhdGVdO1xuICAgIGludGVybmFsSW5zdGFuY2UuX3BlbmRpbmdSZXBsYWNlU3RhdGUgPSB0cnVlO1xuXG4gICAgLy8gRnV0dXJlLXByb29mIDE1LjVcbiAgICBpZiAoY2FsbGJhY2sgIT09IHVuZGVmaW5lZCAmJiBjYWxsYmFjayAhPT0gbnVsbCkge1xuICAgICAgUmVhY3RVcGRhdGVRdWV1ZS52YWxpZGF0ZUNhbGxiYWNrKGNhbGxiYWNrLCAncmVwbGFjZVN0YXRlJyk7XG4gICAgICBpZiAoaW50ZXJuYWxJbnN0YW5jZS5fcGVuZGluZ0NhbGxiYWNrcykge1xuICAgICAgICBpbnRlcm5hbEluc3RhbmNlLl9wZW5kaW5nQ2FsbGJhY2tzLnB1c2goY2FsbGJhY2spO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW50ZXJuYWxJbnN0YW5jZS5fcGVuZGluZ0NhbGxiYWNrcyA9IFtjYWxsYmFja107XG4gICAgICB9XG4gICAgfVxuXG4gICAgZW5xdWV1ZVVwZGF0ZShpbnRlcm5hbEluc3RhbmNlKTtcbiAgfSxcblxuICAvKipcbiAgICogU2V0cyBhIHN1YnNldCBvZiB0aGUgc3RhdGUuIFRoaXMgb25seSBleGlzdHMgYmVjYXVzZSBfcGVuZGluZ1N0YXRlIGlzXG4gICAqIGludGVybmFsLiBUaGlzIHByb3ZpZGVzIGEgbWVyZ2luZyBzdHJhdGVneSB0aGF0IGlzIG5vdCBhdmFpbGFibGUgdG8gZGVlcFxuICAgKiBwcm9wZXJ0aWVzIHdoaWNoIGlzIGNvbmZ1c2luZy4gVE9ETzogRXhwb3NlIHBlbmRpbmdTdGF0ZSBvciBkb24ndCB1c2UgaXRcbiAgICogZHVyaW5nIHRoZSBtZXJnZS5cbiAgICpcbiAgICogQHBhcmFtIHtSZWFjdENsYXNzfSBwdWJsaWNJbnN0YW5jZSBUaGUgaW5zdGFuY2UgdGhhdCBzaG91bGQgcmVyZW5kZXIuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBwYXJ0aWFsU3RhdGUgTmV4dCBwYXJ0aWFsIHN0YXRlIHRvIGJlIG1lcmdlZCB3aXRoIHN0YXRlLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGVucXVldWVTZXRTdGF0ZTogZnVuY3Rpb24gKHB1YmxpY0luc3RhbmNlLCBwYXJ0aWFsU3RhdGUpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgUmVhY3RJbnN0cnVtZW50YXRpb24uZGVidWdUb29sLm9uU2V0U3RhdGUoKTtcbiAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKHBhcnRpYWxTdGF0ZSAhPSBudWxsLCAnc2V0U3RhdGUoLi4uKTogWW91IHBhc3NlZCBhbiB1bmRlZmluZWQgb3IgbnVsbCBzdGF0ZSBvYmplY3Q7ICcgKyAnaW5zdGVhZCwgdXNlIGZvcmNlVXBkYXRlKCkuJykgOiB2b2lkIDA7XG4gICAgfVxuXG4gICAgdmFyIGludGVybmFsSW5zdGFuY2UgPSBnZXRJbnRlcm5hbEluc3RhbmNlUmVhZHlGb3JVcGRhdGUocHVibGljSW5zdGFuY2UsICdzZXRTdGF0ZScpO1xuXG4gICAgaWYgKCFpbnRlcm5hbEluc3RhbmNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHF1ZXVlID0gaW50ZXJuYWxJbnN0YW5jZS5fcGVuZGluZ1N0YXRlUXVldWUgfHwgKGludGVybmFsSW5zdGFuY2UuX3BlbmRpbmdTdGF0ZVF1ZXVlID0gW10pO1xuICAgIHF1ZXVlLnB1c2gocGFydGlhbFN0YXRlKTtcblxuICAgIGVucXVldWVVcGRhdGUoaW50ZXJuYWxJbnN0YW5jZSk7XG4gIH0sXG5cbiAgZW5xdWV1ZUVsZW1lbnRJbnRlcm5hbDogZnVuY3Rpb24gKGludGVybmFsSW5zdGFuY2UsIG5leHRFbGVtZW50LCBuZXh0Q29udGV4dCkge1xuICAgIGludGVybmFsSW5zdGFuY2UuX3BlbmRpbmdFbGVtZW50ID0gbmV4dEVsZW1lbnQ7XG4gICAgLy8gVE9ETzogaW50cm9kdWNlIF9wZW5kaW5nQ29udGV4dCBpbnN0ZWFkIG9mIHNldHRpbmcgaXQgZGlyZWN0bHkuXG4gICAgaW50ZXJuYWxJbnN0YW5jZS5fY29udGV4dCA9IG5leHRDb250ZXh0O1xuICAgIGVucXVldWVVcGRhdGUoaW50ZXJuYWxJbnN0YW5jZSk7XG4gIH0sXG5cbiAgdmFsaWRhdGVDYWxsYmFjazogZnVuY3Rpb24gKGNhbGxiYWNrLCBjYWxsZXJOYW1lKSB7XG4gICAgISghY2FsbGJhY2sgfHwgdHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICclcyguLi4pOiBFeHBlY3RlZCB0aGUgbGFzdCBvcHRpb25hbCBgY2FsbGJhY2tgIGFyZ3VtZW50IHRvIGJlIGEgZnVuY3Rpb24uIEluc3RlYWQgcmVjZWl2ZWQ6ICVzLicsIGNhbGxlck5hbWUsIGZvcm1hdFVuZXhwZWN0ZWRBcmd1bWVudChjYWxsYmFjaykpIDogX3Byb2RJbnZhcmlhbnQoJzEyMicsIGNhbGxlck5hbWUsIGZvcm1hdFVuZXhwZWN0ZWRBcmd1bWVudChjYWxsYmFjaykpIDogdm9pZCAwO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0VXBkYXRlUXVldWU7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1kb20vbGliL1JlYWN0VXBkYXRlUXVldWUuanMiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuLyogZ2xvYmFscyBNU0FwcCAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbi8qKlxuICogQ3JlYXRlIGEgZnVuY3Rpb24gd2hpY2ggaGFzICd1bnNhZmUnIHByaXZpbGVnZXMgKHJlcXVpcmVkIGJ5IHdpbmRvd3M4IGFwcHMpXG4gKi9cblxudmFyIGNyZWF0ZU1pY3Jvc29mdFVuc2FmZUxvY2FsRnVuY3Rpb24gPSBmdW5jdGlvbiAoZnVuYykge1xuICBpZiAodHlwZW9mIE1TQXBwICE9PSAndW5kZWZpbmVkJyAmJiBNU0FwcC5leGVjVW5zYWZlTG9jYWxGdW5jdGlvbikge1xuICAgIHJldHVybiBmdW5jdGlvbiAoYXJnMCwgYXJnMSwgYXJnMiwgYXJnMykge1xuICAgICAgTVNBcHAuZXhlY1Vuc2FmZUxvY2FsRnVuY3Rpb24oZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gZnVuYyhhcmcwLCBhcmcxLCBhcmcyLCBhcmczKTtcbiAgICAgIH0pO1xuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGZ1bmM7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlTWljcm9zb2Z0VW5zYWZlTG9jYWxGdW5jdGlvbjtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3JlYWN0LWRvbS9saWIvY3JlYXRlTWljcm9zb2Z0VW5zYWZlTG9jYWxGdW5jdGlvbi5qcyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbi8qKlxuICogYGNoYXJDb2RlYCByZXByZXNlbnRzIHRoZSBhY3R1YWwgXCJjaGFyYWN0ZXIgY29kZVwiIGFuZCBpcyBzYWZlIHRvIHVzZSB3aXRoXG4gKiBgU3RyaW5nLmZyb21DaGFyQ29kZWAuIEFzIHN1Y2gsIG9ubHkga2V5cyB0aGF0IGNvcnJlc3BvbmQgdG8gcHJpbnRhYmxlXG4gKiBjaGFyYWN0ZXJzIHByb2R1Y2UgYSB2YWxpZCBgY2hhckNvZGVgLCB0aGUgb25seSBleGNlcHRpb24gdG8gdGhpcyBpcyBFbnRlci5cbiAqIFRoZSBUYWIta2V5IGlzIGNvbnNpZGVyZWQgbm9uLXByaW50YWJsZSBhbmQgZG9lcyBub3QgaGF2ZSBhIGBjaGFyQ29kZWAsXG4gKiBwcmVzdW1hYmx5IGJlY2F1c2UgaXQgZG9lcyBub3QgcHJvZHVjZSBhIHRhYi1jaGFyYWN0ZXIgaW4gYnJvd3NlcnMuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IG5hdGl2ZUV2ZW50IE5hdGl2ZSBicm93c2VyIGV2ZW50LlxuICogQHJldHVybiB7bnVtYmVyfSBOb3JtYWxpemVkIGBjaGFyQ29kZWAgcHJvcGVydHkuXG4gKi9cblxuZnVuY3Rpb24gZ2V0RXZlbnRDaGFyQ29kZShuYXRpdmVFdmVudCkge1xuICB2YXIgY2hhckNvZGU7XG4gIHZhciBrZXlDb2RlID0gbmF0aXZlRXZlbnQua2V5Q29kZTtcblxuICBpZiAoJ2NoYXJDb2RlJyBpbiBuYXRpdmVFdmVudCkge1xuICAgIGNoYXJDb2RlID0gbmF0aXZlRXZlbnQuY2hhckNvZGU7XG5cbiAgICAvLyBGRiBkb2VzIG5vdCBzZXQgYGNoYXJDb2RlYCBmb3IgdGhlIEVudGVyLWtleSwgY2hlY2sgYWdhaW5zdCBga2V5Q29kZWAuXG4gICAgaWYgKGNoYXJDb2RlID09PSAwICYmIGtleUNvZGUgPT09IDEzKSB7XG4gICAgICBjaGFyQ29kZSA9IDEzO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBJRTggZG9lcyBub3QgaW1wbGVtZW50IGBjaGFyQ29kZWAsIGJ1dCBga2V5Q29kZWAgaGFzIHRoZSBjb3JyZWN0IHZhbHVlLlxuICAgIGNoYXJDb2RlID0ga2V5Q29kZTtcbiAgfVxuXG4gIC8vIFNvbWUgbm9uLXByaW50YWJsZSBrZXlzIGFyZSByZXBvcnRlZCBpbiBgY2hhckNvZGVgL2BrZXlDb2RlYCwgZGlzY2FyZCB0aGVtLlxuICAvLyBNdXN0IG5vdCBkaXNjYXJkIHRoZSAobm9uLSlwcmludGFibGUgRW50ZXIta2V5LlxuICBpZiAoY2hhckNvZGUgPj0gMzIgfHwgY2hhckNvZGUgPT09IDEzKSB7XG4gICAgcmV0dXJuIGNoYXJDb2RlO1xuICB9XG5cbiAgcmV0dXJuIDA7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0RXZlbnRDaGFyQ29kZTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3JlYWN0LWRvbS9saWIvZ2V0RXZlbnRDaGFyQ29kZS5qcyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbi8qKlxuICogVHJhbnNsYXRpb24gZnJvbSBtb2RpZmllciBrZXkgdG8gdGhlIGFzc29jaWF0ZWQgcHJvcGVydHkgaW4gdGhlIGV2ZW50LlxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1FdmVudHMvI2tleXMtTW9kaWZpZXJzXG4gKi9cblxudmFyIG1vZGlmaWVyS2V5VG9Qcm9wID0ge1xuICBBbHQ6ICdhbHRLZXknLFxuICBDb250cm9sOiAnY3RybEtleScsXG4gIE1ldGE6ICdtZXRhS2V5JyxcbiAgU2hpZnQ6ICdzaGlmdEtleSdcbn07XG5cbi8vIElFOCBkb2VzIG5vdCBpbXBsZW1lbnQgZ2V0TW9kaWZpZXJTdGF0ZSBzbyB3ZSBzaW1wbHkgbWFwIGl0IHRvIHRoZSBvbmx5XG4vLyBtb2RpZmllciBrZXlzIGV4cG9zZWQgYnkgdGhlIGV2ZW50IGl0c2VsZiwgZG9lcyBub3Qgc3VwcG9ydCBMb2NrLWtleXMuXG4vLyBDdXJyZW50bHksIGFsbCBtYWpvciBicm93c2VycyBleGNlcHQgQ2hyb21lIHNlZW1zIHRvIHN1cHBvcnQgTG9jay1rZXlzLlxuZnVuY3Rpb24gbW9kaWZpZXJTdGF0ZUdldHRlcihrZXlBcmcpIHtcbiAgdmFyIHN5bnRoZXRpY0V2ZW50ID0gdGhpcztcbiAgdmFyIG5hdGl2ZUV2ZW50ID0gc3ludGhldGljRXZlbnQubmF0aXZlRXZlbnQ7XG4gIGlmIChuYXRpdmVFdmVudC5nZXRNb2RpZmllclN0YXRlKSB7XG4gICAgcmV0dXJuIG5hdGl2ZUV2ZW50LmdldE1vZGlmaWVyU3RhdGUoa2V5QXJnKTtcbiAgfVxuICB2YXIga2V5UHJvcCA9IG1vZGlmaWVyS2V5VG9Qcm9wW2tleUFyZ107XG4gIHJldHVybiBrZXlQcm9wID8gISFuYXRpdmVFdmVudFtrZXlQcm9wXSA6IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBnZXRFdmVudE1vZGlmaWVyU3RhdGUobmF0aXZlRXZlbnQpIHtcbiAgcmV0dXJuIG1vZGlmaWVyU3RhdGVHZXR0ZXI7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0RXZlbnRNb2RpZmllclN0YXRlO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QtZG9tL2xpYi9nZXRFdmVudE1vZGlmaWVyU3RhdGUuanMiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIEdldHMgdGhlIHRhcmdldCBub2RlIGZyb20gYSBuYXRpdmUgYnJvd3NlciBldmVudCBieSBhY2NvdW50aW5nIGZvclxuICogaW5jb25zaXN0ZW5jaWVzIGluIGJyb3dzZXIgRE9NIEFQSXMuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IG5hdGl2ZUV2ZW50IE5hdGl2ZSBicm93c2VyIGV2ZW50LlxuICogQHJldHVybiB7RE9NRXZlbnRUYXJnZXR9IFRhcmdldCBub2RlLlxuICovXG5cbmZ1bmN0aW9uIGdldEV2ZW50VGFyZ2V0KG5hdGl2ZUV2ZW50KSB7XG4gIHZhciB0YXJnZXQgPSBuYXRpdmVFdmVudC50YXJnZXQgfHwgbmF0aXZlRXZlbnQuc3JjRWxlbWVudCB8fCB3aW5kb3c7XG5cbiAgLy8gTm9ybWFsaXplIFNWRyA8dXNlPiBlbGVtZW50IGV2ZW50cyAjNDk2M1xuICBpZiAodGFyZ2V0LmNvcnJlc3BvbmRpbmdVc2VFbGVtZW50KSB7XG4gICAgdGFyZ2V0ID0gdGFyZ2V0LmNvcnJlc3BvbmRpbmdVc2VFbGVtZW50O1xuICB9XG5cbiAgLy8gU2FmYXJpIG1heSBmaXJlIGV2ZW50cyBvbiB0ZXh0IG5vZGVzIChOb2RlLlRFWFRfTk9ERSBpcyAzKS5cbiAgLy8gQHNlZSBodHRwOi8vd3d3LnF1aXJrc21vZGUub3JnL2pzL2V2ZW50c19wcm9wZXJ0aWVzLmh0bWxcbiAgcmV0dXJuIHRhcmdldC5ub2RlVHlwZSA9PT0gMyA/IHRhcmdldC5wYXJlbnROb2RlIDogdGFyZ2V0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEV2ZW50VGFyZ2V0O1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QtZG9tL2xpYi9nZXRFdmVudFRhcmdldC5qcyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBFeGVjdXRpb25FbnZpcm9ubWVudCA9IHJlcXVpcmUoJ2ZianMvbGliL0V4ZWN1dGlvbkVudmlyb25tZW50Jyk7XG5cbnZhciB1c2VIYXNGZWF0dXJlO1xuaWYgKEV4ZWN1dGlvbkVudmlyb25tZW50LmNhblVzZURPTSkge1xuICB1c2VIYXNGZWF0dXJlID0gZG9jdW1lbnQuaW1wbGVtZW50YXRpb24gJiYgZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uaGFzRmVhdHVyZSAmJlxuICAvLyBhbHdheXMgcmV0dXJucyB0cnVlIGluIG5ld2VyIGJyb3dzZXJzIGFzIHBlciB0aGUgc3RhbmRhcmQuXG4gIC8vIEBzZWUgaHR0cDovL2RvbS5zcGVjLndoYXR3Zy5vcmcvI2RvbS1kb21pbXBsZW1lbnRhdGlvbi1oYXNmZWF0dXJlXG4gIGRvY3VtZW50LmltcGxlbWVudGF0aW9uLmhhc0ZlYXR1cmUoJycsICcnKSAhPT0gdHJ1ZTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYW4gZXZlbnQgaXMgc3VwcG9ydGVkIGluIHRoZSBjdXJyZW50IGV4ZWN1dGlvbiBlbnZpcm9ubWVudC5cbiAqXG4gKiBOT1RFOiBUaGlzIHdpbGwgbm90IHdvcmsgY29ycmVjdGx5IGZvciBub24tZ2VuZXJpYyBldmVudHMgc3VjaCBhcyBgY2hhbmdlYCxcbiAqIGByZXNldGAsIGBsb2FkYCwgYGVycm9yYCwgYW5kIGBzZWxlY3RgLlxuICpcbiAqIEJvcnJvd3MgZnJvbSBNb2Rlcm5penIuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50TmFtZVN1ZmZpeCBFdmVudCBuYW1lLCBlLmcuIFwiY2xpY2tcIi5cbiAqIEBwYXJhbSB7P2Jvb2xlYW59IGNhcHR1cmUgQ2hlY2sgaWYgdGhlIGNhcHR1cmUgcGhhc2UgaXMgc3VwcG9ydGVkLlxuICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgZXZlbnQgaXMgc3VwcG9ydGVkLlxuICogQGludGVybmFsXG4gKiBAbGljZW5zZSBNb2Rlcm5penIgMy4wLjBwcmUgKEN1c3RvbSBCdWlsZCkgfCBNSVRcbiAqL1xuZnVuY3Rpb24gaXNFdmVudFN1cHBvcnRlZChldmVudE5hbWVTdWZmaXgsIGNhcHR1cmUpIHtcbiAgaWYgKCFFeGVjdXRpb25FbnZpcm9ubWVudC5jYW5Vc2VET00gfHwgY2FwdHVyZSAmJiAhKCdhZGRFdmVudExpc3RlbmVyJyBpbiBkb2N1bWVudCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgZXZlbnROYW1lID0gJ29uJyArIGV2ZW50TmFtZVN1ZmZpeDtcbiAgdmFyIGlzU3VwcG9ydGVkID0gZXZlbnROYW1lIGluIGRvY3VtZW50O1xuXG4gIGlmICghaXNTdXBwb3J0ZWQpIHtcbiAgICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKGV2ZW50TmFtZSwgJ3JldHVybjsnKTtcbiAgICBpc1N1cHBvcnRlZCA9IHR5cGVvZiBlbGVtZW50W2V2ZW50TmFtZV0gPT09ICdmdW5jdGlvbic7XG4gIH1cblxuICBpZiAoIWlzU3VwcG9ydGVkICYmIHVzZUhhc0ZlYXR1cmUgJiYgZXZlbnROYW1lU3VmZml4ID09PSAnd2hlZWwnKSB7XG4gICAgLy8gVGhpcyBpcyB0aGUgb25seSB3YXkgdG8gdGVzdCBzdXBwb3J0IGZvciB0aGUgYHdoZWVsYCBldmVudCBpbiBJRTkrLlxuICAgIGlzU3VwcG9ydGVkID0gZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uaGFzRmVhdHVyZSgnRXZlbnRzLndoZWVsJywgJzMuMCcpO1xuICB9XG5cbiAgcmV0dXJuIGlzU3VwcG9ydGVkO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzRXZlbnRTdXBwb3J0ZWQ7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1kb20vbGliL2lzRXZlbnRTdXBwb3J0ZWQuanMiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIEdpdmVuIGEgYHByZXZFbGVtZW50YCBhbmQgYG5leHRFbGVtZW50YCwgZGV0ZXJtaW5lcyBpZiB0aGUgZXhpc3RpbmdcbiAqIGluc3RhbmNlIHNob3VsZCBiZSB1cGRhdGVkIGFzIG9wcG9zZWQgdG8gYmVpbmcgZGVzdHJveWVkIG9yIHJlcGxhY2VkIGJ5IGEgbmV3XG4gKiBpbnN0YW5jZS4gQm90aCBhcmd1bWVudHMgYXJlIGVsZW1lbnRzLiBUaGlzIGVuc3VyZXMgdGhhdCB0aGlzIGxvZ2ljIGNhblxuICogb3BlcmF0ZSBvbiBzdGF0ZWxlc3MgdHJlZXMgd2l0aG91dCBhbnkgYmFja2luZyBpbnN0YW5jZS5cbiAqXG4gKiBAcGFyYW0gez9vYmplY3R9IHByZXZFbGVtZW50XG4gKiBAcGFyYW0gez9vYmplY3R9IG5leHRFbGVtZW50XG4gKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHRoZSBleGlzdGluZyBpbnN0YW5jZSBzaG91bGQgYmUgdXBkYXRlZC5cbiAqIEBwcm90ZWN0ZWRcbiAqL1xuXG5mdW5jdGlvbiBzaG91bGRVcGRhdGVSZWFjdENvbXBvbmVudChwcmV2RWxlbWVudCwgbmV4dEVsZW1lbnQpIHtcbiAgdmFyIHByZXZFbXB0eSA9IHByZXZFbGVtZW50ID09PSBudWxsIHx8IHByZXZFbGVtZW50ID09PSBmYWxzZTtcbiAgdmFyIG5leHRFbXB0eSA9IG5leHRFbGVtZW50ID09PSBudWxsIHx8IG5leHRFbGVtZW50ID09PSBmYWxzZTtcbiAgaWYgKHByZXZFbXB0eSB8fCBuZXh0RW1wdHkpIHtcbiAgICByZXR1cm4gcHJldkVtcHR5ID09PSBuZXh0RW1wdHk7XG4gIH1cblxuICB2YXIgcHJldlR5cGUgPSB0eXBlb2YgcHJldkVsZW1lbnQ7XG4gIHZhciBuZXh0VHlwZSA9IHR5cGVvZiBuZXh0RWxlbWVudDtcbiAgaWYgKHByZXZUeXBlID09PSAnc3RyaW5nJyB8fCBwcmV2VHlwZSA9PT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gbmV4dFR5cGUgPT09ICdzdHJpbmcnIHx8IG5leHRUeXBlID09PSAnbnVtYmVyJztcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbmV4dFR5cGUgPT09ICdvYmplY3QnICYmIHByZXZFbGVtZW50LnR5cGUgPT09IG5leHRFbGVtZW50LnR5cGUgJiYgcHJldkVsZW1lbnQua2V5ID09PSBuZXh0RWxlbWVudC5rZXk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzaG91bGRVcGRhdGVSZWFjdENvbXBvbmVudDtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3JlYWN0LWRvbS9saWIvc2hvdWxkVXBkYXRlUmVhY3RDb21wb25lbnQuanMiLCIvKipcbiAqIENvcHlyaWdodCAyMDE1LXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgX2Fzc2lnbiA9IHJlcXVpcmUoJ29iamVjdC1hc3NpZ24nKTtcblxudmFyIGVtcHR5RnVuY3Rpb24gPSByZXF1aXJlKCdmYmpzL2xpYi9lbXB0eUZ1bmN0aW9uJyk7XG52YXIgd2FybmluZyA9IHJlcXVpcmUoJ2ZianMvbGliL3dhcm5pbmcnKTtcblxudmFyIHZhbGlkYXRlRE9NTmVzdGluZyA9IGVtcHR5RnVuY3Rpb247XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIC8vIFRoaXMgdmFsaWRhdGlvbiBjb2RlIHdhcyB3cml0dGVuIGJhc2VkIG9uIHRoZSBIVE1MNSBwYXJzaW5nIHNwZWM6XG4gIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI2hhcy1hbi1lbGVtZW50LWluLXNjb3BlXG4gIC8vXG4gIC8vIE5vdGU6IHRoaXMgZG9lcyBub3QgY2F0Y2ggYWxsIGludmFsaWQgbmVzdGluZywgbm9yIGRvZXMgaXQgdHJ5IHRvIChhcyBpdCdzXG4gIC8vIG5vdCBjbGVhciB3aGF0IHByYWN0aWNhbCBiZW5lZml0IGRvaW5nIHNvIHByb3ZpZGVzKTsgaW5zdGVhZCwgd2Ugd2FybiBvbmx5XG4gIC8vIGZvciBjYXNlcyB3aGVyZSB0aGUgcGFyc2VyIHdpbGwgZ2l2ZSBhIHBhcnNlIHRyZWUgZGlmZmVyaW5nIGZyb20gd2hhdCBSZWFjdFxuICAvLyBpbnRlbmRlZC4gRm9yIGV4YW1wbGUsIDxiPjxkaXY+PC9kaXY+PC9iPiBpcyBpbnZhbGlkIGJ1dCB3ZSBkb24ndCB3YXJuXG4gIC8vIGJlY2F1c2UgaXQgc3RpbGwgcGFyc2VzIGNvcnJlY3RseTsgd2UgZG8gd2FybiBmb3Igb3RoZXIgY2FzZXMgbGlrZSBuZXN0ZWRcbiAgLy8gPHA+IHRhZ3Mgd2hlcmUgdGhlIGJlZ2lubmluZyBvZiB0aGUgc2Vjb25kIGVsZW1lbnQgaW1wbGljaXRseSBjbG9zZXMgdGhlXG4gIC8vIGZpcnN0LCBjYXVzaW5nIGEgY29uZnVzaW5nIG1lc3MuXG5cbiAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjc3BlY2lhbFxuICB2YXIgc3BlY2lhbFRhZ3MgPSBbJ2FkZHJlc3MnLCAnYXBwbGV0JywgJ2FyZWEnLCAnYXJ0aWNsZScsICdhc2lkZScsICdiYXNlJywgJ2Jhc2Vmb250JywgJ2Jnc291bmQnLCAnYmxvY2txdW90ZScsICdib2R5JywgJ2JyJywgJ2J1dHRvbicsICdjYXB0aW9uJywgJ2NlbnRlcicsICdjb2wnLCAnY29sZ3JvdXAnLCAnZGQnLCAnZGV0YWlscycsICdkaXInLCAnZGl2JywgJ2RsJywgJ2R0JywgJ2VtYmVkJywgJ2ZpZWxkc2V0JywgJ2ZpZ2NhcHRpb24nLCAnZmlndXJlJywgJ2Zvb3RlcicsICdmb3JtJywgJ2ZyYW1lJywgJ2ZyYW1lc2V0JywgJ2gxJywgJ2gyJywgJ2gzJywgJ2g0JywgJ2g1JywgJ2g2JywgJ2hlYWQnLCAnaGVhZGVyJywgJ2hncm91cCcsICdocicsICdodG1sJywgJ2lmcmFtZScsICdpbWcnLCAnaW5wdXQnLCAnaXNpbmRleCcsICdsaScsICdsaW5rJywgJ2xpc3RpbmcnLCAnbWFpbicsICdtYXJxdWVlJywgJ21lbnUnLCAnbWVudWl0ZW0nLCAnbWV0YScsICduYXYnLCAnbm9lbWJlZCcsICdub2ZyYW1lcycsICdub3NjcmlwdCcsICdvYmplY3QnLCAnb2wnLCAncCcsICdwYXJhbScsICdwbGFpbnRleHQnLCAncHJlJywgJ3NjcmlwdCcsICdzZWN0aW9uJywgJ3NlbGVjdCcsICdzb3VyY2UnLCAnc3R5bGUnLCAnc3VtbWFyeScsICd0YWJsZScsICd0Ym9keScsICd0ZCcsICd0ZW1wbGF0ZScsICd0ZXh0YXJlYScsICd0Zm9vdCcsICd0aCcsICd0aGVhZCcsICd0aXRsZScsICd0cicsICd0cmFjaycsICd1bCcsICd3YnInLCAneG1wJ107XG5cbiAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjaGFzLWFuLWVsZW1lbnQtaW4tc2NvcGVcbiAgdmFyIGluU2NvcGVUYWdzID0gWydhcHBsZXQnLCAnY2FwdGlvbicsICdodG1sJywgJ3RhYmxlJywgJ3RkJywgJ3RoJywgJ21hcnF1ZWUnLCAnb2JqZWN0JywgJ3RlbXBsYXRlJyxcblxuICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNodG1sLWludGVncmF0aW9uLXBvaW50XG4gIC8vIFRPRE86IERpc3Rpbmd1aXNoIGJ5IG5hbWVzcGFjZSBoZXJlIC0tIGZvciA8dGl0bGU+LCBpbmNsdWRpbmcgaXQgaGVyZVxuICAvLyBlcnJzIG9uIHRoZSBzaWRlIG9mIGZld2VyIHdhcm5pbmdzXG4gICdmb3JlaWduT2JqZWN0JywgJ2Rlc2MnLCAndGl0bGUnXTtcblxuICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNoYXMtYW4tZWxlbWVudC1pbi1idXR0b24tc2NvcGVcbiAgdmFyIGJ1dHRvblNjb3BlVGFncyA9IGluU2NvcGVUYWdzLmNvbmNhdChbJ2J1dHRvbiddKTtcblxuICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNnZW5lcmF0ZS1pbXBsaWVkLWVuZC10YWdzXG4gIHZhciBpbXBsaWVkRW5kVGFncyA9IFsnZGQnLCAnZHQnLCAnbGknLCAnb3B0aW9uJywgJ29wdGdyb3VwJywgJ3AnLCAncnAnLCAncnQnXTtcblxuICB2YXIgZW1wdHlBbmNlc3RvckluZm8gPSB7XG4gICAgY3VycmVudDogbnVsbCxcblxuICAgIGZvcm1UYWc6IG51bGwsXG4gICAgYVRhZ0luU2NvcGU6IG51bGwsXG4gICAgYnV0dG9uVGFnSW5TY29wZTogbnVsbCxcbiAgICBub2JyVGFnSW5TY29wZTogbnVsbCxcbiAgICBwVGFnSW5CdXR0b25TY29wZTogbnVsbCxcblxuICAgIGxpc3RJdGVtVGFnQXV0b2Nsb3Npbmc6IG51bGwsXG4gICAgZGxJdGVtVGFnQXV0b2Nsb3Npbmc6IG51bGxcbiAgfTtcblxuICB2YXIgdXBkYXRlZEFuY2VzdG9ySW5mbyA9IGZ1bmN0aW9uIChvbGRJbmZvLCB0YWcsIGluc3RhbmNlKSB7XG4gICAgdmFyIGFuY2VzdG9ySW5mbyA9IF9hc3NpZ24oe30sIG9sZEluZm8gfHwgZW1wdHlBbmNlc3RvckluZm8pO1xuICAgIHZhciBpbmZvID0geyB0YWc6IHRhZywgaW5zdGFuY2U6IGluc3RhbmNlIH07XG5cbiAgICBpZiAoaW5TY29wZVRhZ3MuaW5kZXhPZih0YWcpICE9PSAtMSkge1xuICAgICAgYW5jZXN0b3JJbmZvLmFUYWdJblNjb3BlID0gbnVsbDtcbiAgICAgIGFuY2VzdG9ySW5mby5idXR0b25UYWdJblNjb3BlID0gbnVsbDtcbiAgICAgIGFuY2VzdG9ySW5mby5ub2JyVGFnSW5TY29wZSA9IG51bGw7XG4gICAgfVxuICAgIGlmIChidXR0b25TY29wZVRhZ3MuaW5kZXhPZih0YWcpICE9PSAtMSkge1xuICAgICAgYW5jZXN0b3JJbmZvLnBUYWdJbkJ1dHRvblNjb3BlID0gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBTZWUgcnVsZXMgZm9yICdsaScsICdkZCcsICdkdCcgc3RhcnQgdGFncyBpblxuICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI3BhcnNpbmctbWFpbi1pbmJvZHlcbiAgICBpZiAoc3BlY2lhbFRhZ3MuaW5kZXhPZih0YWcpICE9PSAtMSAmJiB0YWcgIT09ICdhZGRyZXNzJyAmJiB0YWcgIT09ICdkaXYnICYmIHRhZyAhPT0gJ3AnKSB7XG4gICAgICBhbmNlc3RvckluZm8ubGlzdEl0ZW1UYWdBdXRvY2xvc2luZyA9IG51bGw7XG4gICAgICBhbmNlc3RvckluZm8uZGxJdGVtVGFnQXV0b2Nsb3NpbmcgPSBudWxsO1xuICAgIH1cblxuICAgIGFuY2VzdG9ySW5mby5jdXJyZW50ID0gaW5mbztcblxuICAgIGlmICh0YWcgPT09ICdmb3JtJykge1xuICAgICAgYW5jZXN0b3JJbmZvLmZvcm1UYWcgPSBpbmZvO1xuICAgIH1cbiAgICBpZiAodGFnID09PSAnYScpIHtcbiAgICAgIGFuY2VzdG9ySW5mby5hVGFnSW5TY29wZSA9IGluZm87XG4gICAgfVxuICAgIGlmICh0YWcgPT09ICdidXR0b24nKSB7XG4gICAgICBhbmNlc3RvckluZm8uYnV0dG9uVGFnSW5TY29wZSA9IGluZm87XG4gICAgfVxuICAgIGlmICh0YWcgPT09ICdub2JyJykge1xuICAgICAgYW5jZXN0b3JJbmZvLm5vYnJUYWdJblNjb3BlID0gaW5mbztcbiAgICB9XG4gICAgaWYgKHRhZyA9PT0gJ3AnKSB7XG4gICAgICBhbmNlc3RvckluZm8ucFRhZ0luQnV0dG9uU2NvcGUgPSBpbmZvO1xuICAgIH1cbiAgICBpZiAodGFnID09PSAnbGknKSB7XG4gICAgICBhbmNlc3RvckluZm8ubGlzdEl0ZW1UYWdBdXRvY2xvc2luZyA9IGluZm87XG4gICAgfVxuICAgIGlmICh0YWcgPT09ICdkZCcgfHwgdGFnID09PSAnZHQnKSB7XG4gICAgICBhbmNlc3RvckluZm8uZGxJdGVtVGFnQXV0b2Nsb3NpbmcgPSBpbmZvO1xuICAgIH1cblxuICAgIHJldHVybiBhbmNlc3RvckluZm87XG4gIH07XG5cbiAgLyoqXG4gICAqIFJldHVybnMgd2hldGhlclxuICAgKi9cbiAgdmFyIGlzVGFnVmFsaWRXaXRoUGFyZW50ID0gZnVuY3Rpb24gKHRhZywgcGFyZW50VGFnKSB7XG4gICAgLy8gRmlyc3QsIGxldCdzIGNoZWNrIGlmIHdlJ3JlIGluIGFuIHVudXN1YWwgcGFyc2luZyBtb2RlLi4uXG4gICAgc3dpdGNoIChwYXJlbnRUYWcpIHtcbiAgICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI3BhcnNpbmctbWFpbi1pbnNlbGVjdFxuICAgICAgY2FzZSAnc2VsZWN0JzpcbiAgICAgICAgcmV0dXJuIHRhZyA9PT0gJ29wdGlvbicgfHwgdGFnID09PSAnb3B0Z3JvdXAnIHx8IHRhZyA9PT0gJyN0ZXh0JztcbiAgICAgIGNhc2UgJ29wdGdyb3VwJzpcbiAgICAgICAgcmV0dXJuIHRhZyA9PT0gJ29wdGlvbicgfHwgdGFnID09PSAnI3RleHQnO1xuICAgICAgLy8gU3RyaWN0bHkgc3BlYWtpbmcsIHNlZWluZyBhbiA8b3B0aW9uPiBkb2Vzbid0IG1lYW4gd2UncmUgaW4gYSA8c2VsZWN0PlxuICAgICAgLy8gYnV0XG4gICAgICBjYXNlICdvcHRpb24nOlxuICAgICAgICByZXR1cm4gdGFnID09PSAnI3RleHQnO1xuICAgICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjcGFyc2luZy1tYWluLWludGRcbiAgICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI3BhcnNpbmctbWFpbi1pbmNhcHRpb25cbiAgICAgIC8vIE5vIHNwZWNpYWwgYmVoYXZpb3Igc2luY2UgdGhlc2UgcnVsZXMgZmFsbCBiYWNrIHRvIFwiaW4gYm9keVwiIG1vZGUgZm9yXG4gICAgICAvLyBhbGwgZXhjZXB0IHNwZWNpYWwgdGFibGUgbm9kZXMgd2hpY2ggY2F1c2UgYmFkIHBhcnNpbmcgYmVoYXZpb3IgYW55d2F5LlxuXG4gICAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNwYXJzaW5nLW1haW4taW50clxuICAgICAgY2FzZSAndHInOlxuICAgICAgICByZXR1cm4gdGFnID09PSAndGgnIHx8IHRhZyA9PT0gJ3RkJyB8fCB0YWcgPT09ICdzdHlsZScgfHwgdGFnID09PSAnc2NyaXB0JyB8fCB0YWcgPT09ICd0ZW1wbGF0ZSc7XG4gICAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNwYXJzaW5nLW1haW4taW50Ym9keVxuICAgICAgY2FzZSAndGJvZHknOlxuICAgICAgY2FzZSAndGhlYWQnOlxuICAgICAgY2FzZSAndGZvb3QnOlxuICAgICAgICByZXR1cm4gdGFnID09PSAndHInIHx8IHRhZyA9PT0gJ3N0eWxlJyB8fCB0YWcgPT09ICdzY3JpcHQnIHx8IHRhZyA9PT0gJ3RlbXBsYXRlJztcbiAgICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI3BhcnNpbmctbWFpbi1pbmNvbGdyb3VwXG4gICAgICBjYXNlICdjb2xncm91cCc6XG4gICAgICAgIHJldHVybiB0YWcgPT09ICdjb2wnIHx8IHRhZyA9PT0gJ3RlbXBsYXRlJztcbiAgICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI3BhcnNpbmctbWFpbi1pbnRhYmxlXG4gICAgICBjYXNlICd0YWJsZSc6XG4gICAgICAgIHJldHVybiB0YWcgPT09ICdjYXB0aW9uJyB8fCB0YWcgPT09ICdjb2xncm91cCcgfHwgdGFnID09PSAndGJvZHknIHx8IHRhZyA9PT0gJ3Rmb290JyB8fCB0YWcgPT09ICd0aGVhZCcgfHwgdGFnID09PSAnc3R5bGUnIHx8IHRhZyA9PT0gJ3NjcmlwdCcgfHwgdGFnID09PSAndGVtcGxhdGUnO1xuICAgICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjcGFyc2luZy1tYWluLWluaGVhZFxuICAgICAgY2FzZSAnaGVhZCc6XG4gICAgICAgIHJldHVybiB0YWcgPT09ICdiYXNlJyB8fCB0YWcgPT09ICdiYXNlZm9udCcgfHwgdGFnID09PSAnYmdzb3VuZCcgfHwgdGFnID09PSAnbGluaycgfHwgdGFnID09PSAnbWV0YScgfHwgdGFnID09PSAndGl0bGUnIHx8IHRhZyA9PT0gJ25vc2NyaXB0JyB8fCB0YWcgPT09ICdub2ZyYW1lcycgfHwgdGFnID09PSAnc3R5bGUnIHx8IHRhZyA9PT0gJ3NjcmlwdCcgfHwgdGFnID09PSAndGVtcGxhdGUnO1xuICAgICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc2VtYW50aWNzLmh0bWwjdGhlLWh0bWwtZWxlbWVudFxuICAgICAgY2FzZSAnaHRtbCc6XG4gICAgICAgIHJldHVybiB0YWcgPT09ICdoZWFkJyB8fCB0YWcgPT09ICdib2R5JztcbiAgICAgIGNhc2UgJyNkb2N1bWVudCc6XG4gICAgICAgIHJldHVybiB0YWcgPT09ICdodG1sJztcbiAgICB9XG5cbiAgICAvLyBQcm9iYWJseSBpbiB0aGUgXCJpbiBib2R5XCIgcGFyc2luZyBtb2RlLCBzbyB3ZSBvdXRsYXcgb25seSB0YWcgY29tYm9zXG4gICAgLy8gd2hlcmUgdGhlIHBhcnNpbmcgcnVsZXMgY2F1c2UgaW1wbGljaXQgb3BlbnMgb3IgY2xvc2VzIHRvIGJlIGFkZGVkLlxuICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI3BhcnNpbmctbWFpbi1pbmJvZHlcbiAgICBzd2l0Y2ggKHRhZykge1xuICAgICAgY2FzZSAnaDEnOlxuICAgICAgY2FzZSAnaDInOlxuICAgICAgY2FzZSAnaDMnOlxuICAgICAgY2FzZSAnaDQnOlxuICAgICAgY2FzZSAnaDUnOlxuICAgICAgY2FzZSAnaDYnOlxuICAgICAgICByZXR1cm4gcGFyZW50VGFnICE9PSAnaDEnICYmIHBhcmVudFRhZyAhPT0gJ2gyJyAmJiBwYXJlbnRUYWcgIT09ICdoMycgJiYgcGFyZW50VGFnICE9PSAnaDQnICYmIHBhcmVudFRhZyAhPT0gJ2g1JyAmJiBwYXJlbnRUYWcgIT09ICdoNic7XG5cbiAgICAgIGNhc2UgJ3JwJzpcbiAgICAgIGNhc2UgJ3J0JzpcbiAgICAgICAgcmV0dXJuIGltcGxpZWRFbmRUYWdzLmluZGV4T2YocGFyZW50VGFnKSA9PT0gLTE7XG5cbiAgICAgIGNhc2UgJ2JvZHknOlxuICAgICAgY2FzZSAnY2FwdGlvbic6XG4gICAgICBjYXNlICdjb2wnOlxuICAgICAgY2FzZSAnY29sZ3JvdXAnOlxuICAgICAgY2FzZSAnZnJhbWUnOlxuICAgICAgY2FzZSAnaGVhZCc6XG4gICAgICBjYXNlICdodG1sJzpcbiAgICAgIGNhc2UgJ3Rib2R5JzpcbiAgICAgIGNhc2UgJ3RkJzpcbiAgICAgIGNhc2UgJ3Rmb290JzpcbiAgICAgIGNhc2UgJ3RoJzpcbiAgICAgIGNhc2UgJ3RoZWFkJzpcbiAgICAgIGNhc2UgJ3RyJzpcbiAgICAgICAgLy8gVGhlc2UgdGFncyBhcmUgb25seSB2YWxpZCB3aXRoIGEgZmV3IHBhcmVudHMgdGhhdCBoYXZlIHNwZWNpYWwgY2hpbGRcbiAgICAgICAgLy8gcGFyc2luZyBydWxlcyAtLSBpZiB3ZSdyZSBkb3duIGhlcmUsIHRoZW4gbm9uZSBvZiB0aG9zZSBtYXRjaGVkIGFuZFxuICAgICAgICAvLyBzbyB3ZSBhbGxvdyBpdCBvbmx5IGlmIHdlIGRvbid0IGtub3cgd2hhdCB0aGUgcGFyZW50IGlzLCBhcyBhbGwgb3RoZXJcbiAgICAgICAgLy8gY2FzZXMgYXJlIGludmFsaWQuXG4gICAgICAgIHJldHVybiBwYXJlbnRUYWcgPT0gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcblxuICAvKipcbiAgICogUmV0dXJucyB3aGV0aGVyXG4gICAqL1xuICB2YXIgZmluZEludmFsaWRBbmNlc3RvckZvclRhZyA9IGZ1bmN0aW9uICh0YWcsIGFuY2VzdG9ySW5mbykge1xuICAgIHN3aXRjaCAodGFnKSB7XG4gICAgICBjYXNlICdhZGRyZXNzJzpcbiAgICAgIGNhc2UgJ2FydGljbGUnOlxuICAgICAgY2FzZSAnYXNpZGUnOlxuICAgICAgY2FzZSAnYmxvY2txdW90ZSc6XG4gICAgICBjYXNlICdjZW50ZXInOlxuICAgICAgY2FzZSAnZGV0YWlscyc6XG4gICAgICBjYXNlICdkaWFsb2cnOlxuICAgICAgY2FzZSAnZGlyJzpcbiAgICAgIGNhc2UgJ2Rpdic6XG4gICAgICBjYXNlICdkbCc6XG4gICAgICBjYXNlICdmaWVsZHNldCc6XG4gICAgICBjYXNlICdmaWdjYXB0aW9uJzpcbiAgICAgIGNhc2UgJ2ZpZ3VyZSc6XG4gICAgICBjYXNlICdmb290ZXInOlxuICAgICAgY2FzZSAnaGVhZGVyJzpcbiAgICAgIGNhc2UgJ2hncm91cCc6XG4gICAgICBjYXNlICdtYWluJzpcbiAgICAgIGNhc2UgJ21lbnUnOlxuICAgICAgY2FzZSAnbmF2JzpcbiAgICAgIGNhc2UgJ29sJzpcbiAgICAgIGNhc2UgJ3AnOlxuICAgICAgY2FzZSAnc2VjdGlvbic6XG4gICAgICBjYXNlICdzdW1tYXJ5JzpcbiAgICAgIGNhc2UgJ3VsJzpcbiAgICAgIGNhc2UgJ3ByZSc6XG4gICAgICBjYXNlICdsaXN0aW5nJzpcbiAgICAgIGNhc2UgJ3RhYmxlJzpcbiAgICAgIGNhc2UgJ2hyJzpcbiAgICAgIGNhc2UgJ3htcCc6XG4gICAgICBjYXNlICdoMSc6XG4gICAgICBjYXNlICdoMic6XG4gICAgICBjYXNlICdoMyc6XG4gICAgICBjYXNlICdoNCc6XG4gICAgICBjYXNlICdoNSc6XG4gICAgICBjYXNlICdoNic6XG4gICAgICAgIHJldHVybiBhbmNlc3RvckluZm8ucFRhZ0luQnV0dG9uU2NvcGU7XG5cbiAgICAgIGNhc2UgJ2Zvcm0nOlxuICAgICAgICByZXR1cm4gYW5jZXN0b3JJbmZvLmZvcm1UYWcgfHwgYW5jZXN0b3JJbmZvLnBUYWdJbkJ1dHRvblNjb3BlO1xuXG4gICAgICBjYXNlICdsaSc6XG4gICAgICAgIHJldHVybiBhbmNlc3RvckluZm8ubGlzdEl0ZW1UYWdBdXRvY2xvc2luZztcblxuICAgICAgY2FzZSAnZGQnOlxuICAgICAgY2FzZSAnZHQnOlxuICAgICAgICByZXR1cm4gYW5jZXN0b3JJbmZvLmRsSXRlbVRhZ0F1dG9jbG9zaW5nO1xuXG4gICAgICBjYXNlICdidXR0b24nOlxuICAgICAgICByZXR1cm4gYW5jZXN0b3JJbmZvLmJ1dHRvblRhZ0luU2NvcGU7XG5cbiAgICAgIGNhc2UgJ2EnOlxuICAgICAgICAvLyBTcGVjIHNheXMgc29tZXRoaW5nIGFib3V0IHN0b3JpbmcgYSBsaXN0IG9mIG1hcmtlcnMsIGJ1dCBpdCBzb3VuZHNcbiAgICAgICAgLy8gZXF1aXZhbGVudCB0byB0aGlzIGNoZWNrLlxuICAgICAgICByZXR1cm4gYW5jZXN0b3JJbmZvLmFUYWdJblNjb3BlO1xuXG4gICAgICBjYXNlICdub2JyJzpcbiAgICAgICAgcmV0dXJuIGFuY2VzdG9ySW5mby5ub2JyVGFnSW5TY29wZTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfTtcblxuICAvKipcbiAgICogR2l2ZW4gYSBSZWFjdENvbXBvc2l0ZUNvbXBvbmVudCBpbnN0YW5jZSwgcmV0dXJuIGEgbGlzdCBvZiBpdHMgcmVjdXJzaXZlXG4gICAqIG93bmVycywgc3RhcnRpbmcgYXQgdGhlIHJvb3QgYW5kIGVuZGluZyB3aXRoIHRoZSBpbnN0YW5jZSBpdHNlbGYuXG4gICAqL1xuICB2YXIgZmluZE93bmVyU3RhY2sgPSBmdW5jdGlvbiAoaW5zdGFuY2UpIHtcbiAgICBpZiAoIWluc3RhbmNlKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgdmFyIHN0YWNrID0gW107XG4gICAgZG8ge1xuICAgICAgc3RhY2sucHVzaChpbnN0YW5jZSk7XG4gICAgfSB3aGlsZSAoaW5zdGFuY2UgPSBpbnN0YW5jZS5fY3VycmVudEVsZW1lbnQuX293bmVyKTtcbiAgICBzdGFjay5yZXZlcnNlKCk7XG4gICAgcmV0dXJuIHN0YWNrO1xuICB9O1xuXG4gIHZhciBkaWRXYXJuID0ge307XG5cbiAgdmFsaWRhdGVET01OZXN0aW5nID0gZnVuY3Rpb24gKGNoaWxkVGFnLCBjaGlsZFRleHQsIGNoaWxkSW5zdGFuY2UsIGFuY2VzdG9ySW5mbykge1xuICAgIGFuY2VzdG9ySW5mbyA9IGFuY2VzdG9ySW5mbyB8fCBlbXB0eUFuY2VzdG9ySW5mbztcbiAgICB2YXIgcGFyZW50SW5mbyA9IGFuY2VzdG9ySW5mby5jdXJyZW50O1xuICAgIHZhciBwYXJlbnRUYWcgPSBwYXJlbnRJbmZvICYmIHBhcmVudEluZm8udGFnO1xuXG4gICAgaWYgKGNoaWxkVGV4dCAhPSBudWxsKSB7XG4gICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyhjaGlsZFRhZyA9PSBudWxsLCAndmFsaWRhdGVET01OZXN0aW5nOiB3aGVuIGNoaWxkVGV4dCBpcyBwYXNzZWQsIGNoaWxkVGFnIHNob3VsZCBiZSBudWxsJykgOiB2b2lkIDA7XG4gICAgICBjaGlsZFRhZyA9ICcjdGV4dCc7XG4gICAgfVxuXG4gICAgdmFyIGludmFsaWRQYXJlbnQgPSBpc1RhZ1ZhbGlkV2l0aFBhcmVudChjaGlsZFRhZywgcGFyZW50VGFnKSA/IG51bGwgOiBwYXJlbnRJbmZvO1xuICAgIHZhciBpbnZhbGlkQW5jZXN0b3IgPSBpbnZhbGlkUGFyZW50ID8gbnVsbCA6IGZpbmRJbnZhbGlkQW5jZXN0b3JGb3JUYWcoY2hpbGRUYWcsIGFuY2VzdG9ySW5mbyk7XG4gICAgdmFyIHByb2JsZW1hdGljID0gaW52YWxpZFBhcmVudCB8fCBpbnZhbGlkQW5jZXN0b3I7XG5cbiAgICBpZiAocHJvYmxlbWF0aWMpIHtcbiAgICAgIHZhciBhbmNlc3RvclRhZyA9IHByb2JsZW1hdGljLnRhZztcbiAgICAgIHZhciBhbmNlc3Rvckluc3RhbmNlID0gcHJvYmxlbWF0aWMuaW5zdGFuY2U7XG5cbiAgICAgIHZhciBjaGlsZE93bmVyID0gY2hpbGRJbnN0YW5jZSAmJiBjaGlsZEluc3RhbmNlLl9jdXJyZW50RWxlbWVudC5fb3duZXI7XG4gICAgICB2YXIgYW5jZXN0b3JPd25lciA9IGFuY2VzdG9ySW5zdGFuY2UgJiYgYW5jZXN0b3JJbnN0YW5jZS5fY3VycmVudEVsZW1lbnQuX293bmVyO1xuXG4gICAgICB2YXIgY2hpbGRPd25lcnMgPSBmaW5kT3duZXJTdGFjayhjaGlsZE93bmVyKTtcbiAgICAgIHZhciBhbmNlc3Rvck93bmVycyA9IGZpbmRPd25lclN0YWNrKGFuY2VzdG9yT3duZXIpO1xuXG4gICAgICB2YXIgbWluU3RhY2tMZW4gPSBNYXRoLm1pbihjaGlsZE93bmVycy5sZW5ndGgsIGFuY2VzdG9yT3duZXJzLmxlbmd0aCk7XG4gICAgICB2YXIgaTtcblxuICAgICAgdmFyIGRlZXBlc3RDb21tb24gPSAtMTtcbiAgICAgIGZvciAoaSA9IDA7IGkgPCBtaW5TdGFja0xlbjsgaSsrKSB7XG4gICAgICAgIGlmIChjaGlsZE93bmVyc1tpXSA9PT0gYW5jZXN0b3JPd25lcnNbaV0pIHtcbiAgICAgICAgICBkZWVwZXN0Q29tbW9uID0gaTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgVU5LTk9XTiA9ICcodW5rbm93biknO1xuICAgICAgdmFyIGNoaWxkT3duZXJOYW1lcyA9IGNoaWxkT3duZXJzLnNsaWNlKGRlZXBlc3RDb21tb24gKyAxKS5tYXAoZnVuY3Rpb24gKGluc3QpIHtcbiAgICAgICAgcmV0dXJuIGluc3QuZ2V0TmFtZSgpIHx8IFVOS05PV047XG4gICAgICB9KTtcbiAgICAgIHZhciBhbmNlc3Rvck93bmVyTmFtZXMgPSBhbmNlc3Rvck93bmVycy5zbGljZShkZWVwZXN0Q29tbW9uICsgMSkubWFwKGZ1bmN0aW9uIChpbnN0KSB7XG4gICAgICAgIHJldHVybiBpbnN0LmdldE5hbWUoKSB8fCBVTktOT1dOO1xuICAgICAgfSk7XG4gICAgICB2YXIgb3duZXJJbmZvID0gW10uY29uY2F0KFxuICAgICAgLy8gSWYgdGhlIHBhcmVudCBhbmQgY2hpbGQgaW5zdGFuY2VzIGhhdmUgYSBjb21tb24gb3duZXIgYW5jZXN0b3IsIHN0YXJ0XG4gICAgICAvLyB3aXRoIHRoYXQgLS0gb3RoZXJ3aXNlIHdlIGp1c3Qgc3RhcnQgd2l0aCB0aGUgcGFyZW50J3Mgb3duZXJzLlxuICAgICAgZGVlcGVzdENvbW1vbiAhPT0gLTEgPyBjaGlsZE93bmVyc1tkZWVwZXN0Q29tbW9uXS5nZXROYW1lKCkgfHwgVU5LTk9XTiA6IFtdLCBhbmNlc3Rvck93bmVyTmFtZXMsIGFuY2VzdG9yVGFnLFxuICAgICAgLy8gSWYgd2UncmUgd2FybmluZyBhYm91dCBhbiBpbnZhbGlkIChub24tcGFyZW50KSBhbmNlc3RyeSwgYWRkICcuLi4nXG4gICAgICBpbnZhbGlkQW5jZXN0b3IgPyBbJy4uLiddIDogW10sIGNoaWxkT3duZXJOYW1lcywgY2hpbGRUYWcpLmpvaW4oJyA+ICcpO1xuXG4gICAgICB2YXIgd2FybktleSA9ICEhaW52YWxpZFBhcmVudCArICd8JyArIGNoaWxkVGFnICsgJ3wnICsgYW5jZXN0b3JUYWcgKyAnfCcgKyBvd25lckluZm87XG4gICAgICBpZiAoZGlkV2Fyblt3YXJuS2V5XSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBkaWRXYXJuW3dhcm5LZXldID0gdHJ1ZTtcblxuICAgICAgdmFyIHRhZ0Rpc3BsYXlOYW1lID0gY2hpbGRUYWc7XG4gICAgICB2YXIgd2hpdGVzcGFjZUluZm8gPSAnJztcbiAgICAgIGlmIChjaGlsZFRhZyA9PT0gJyN0ZXh0Jykge1xuICAgICAgICBpZiAoL1xcUy8udGVzdChjaGlsZFRleHQpKSB7XG4gICAgICAgICAgdGFnRGlzcGxheU5hbWUgPSAnVGV4dCBub2Rlcyc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGFnRGlzcGxheU5hbWUgPSAnV2hpdGVzcGFjZSB0ZXh0IG5vZGVzJztcbiAgICAgICAgICB3aGl0ZXNwYWNlSW5mbyA9IFwiIE1ha2Ugc3VyZSB5b3UgZG9uJ3QgaGF2ZSBhbnkgZXh0cmEgd2hpdGVzcGFjZSBiZXR3ZWVuIHRhZ3Mgb24gXCIgKyAnZWFjaCBsaW5lIG9mIHlvdXIgc291cmNlIGNvZGUuJztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGFnRGlzcGxheU5hbWUgPSAnPCcgKyBjaGlsZFRhZyArICc+JztcbiAgICAgIH1cblxuICAgICAgaWYgKGludmFsaWRQYXJlbnQpIHtcbiAgICAgICAgdmFyIGluZm8gPSAnJztcbiAgICAgICAgaWYgKGFuY2VzdG9yVGFnID09PSAndGFibGUnICYmIGNoaWxkVGFnID09PSAndHInKSB7XG4gICAgICAgICAgaW5mbyArPSAnIEFkZCBhIDx0Ym9keT4gdG8geW91ciBjb2RlIHRvIG1hdGNoIHRoZSBET00gdHJlZSBnZW5lcmF0ZWQgYnkgJyArICd0aGUgYnJvd3Nlci4nO1xuICAgICAgICB9XG4gICAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKGZhbHNlLCAndmFsaWRhdGVET01OZXN0aW5nKC4uLik6ICVzIGNhbm5vdCBhcHBlYXIgYXMgYSBjaGlsZCBvZiA8JXM+LiVzICcgKyAnU2VlICVzLiVzJywgdGFnRGlzcGxheU5hbWUsIGFuY2VzdG9yVGFnLCB3aGl0ZXNwYWNlSW5mbywgb3duZXJJbmZvLCBpbmZvKSA6IHZvaWQgMDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKGZhbHNlLCAndmFsaWRhdGVET01OZXN0aW5nKC4uLik6ICVzIGNhbm5vdCBhcHBlYXIgYXMgYSBkZXNjZW5kYW50IG9mICcgKyAnPCVzPi4gU2VlICVzLicsIHRhZ0Rpc3BsYXlOYW1lLCBhbmNlc3RvclRhZywgb3duZXJJbmZvKSA6IHZvaWQgMDtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgdmFsaWRhdGVET01OZXN0aW5nLnVwZGF0ZWRBbmNlc3RvckluZm8gPSB1cGRhdGVkQW5jZXN0b3JJbmZvO1xuXG4gIC8vIEZvciB0ZXN0aW5nXG4gIHZhbGlkYXRlRE9NTmVzdGluZy5pc1RhZ1ZhbGlkSW5Db250ZXh0ID0gZnVuY3Rpb24gKHRhZywgYW5jZXN0b3JJbmZvKSB7XG4gICAgYW5jZXN0b3JJbmZvID0gYW5jZXN0b3JJbmZvIHx8IGVtcHR5QW5jZXN0b3JJbmZvO1xuICAgIHZhciBwYXJlbnRJbmZvID0gYW5jZXN0b3JJbmZvLmN1cnJlbnQ7XG4gICAgdmFyIHBhcmVudFRhZyA9IHBhcmVudEluZm8gJiYgcGFyZW50SW5mby50YWc7XG4gICAgcmV0dXJuIGlzVGFnVmFsaWRXaXRoUGFyZW50KHRhZywgcGFyZW50VGFnKSAmJiAhZmluZEludmFsaWRBbmNlc3RvckZvclRhZyh0YWcsIGFuY2VzdG9ySW5mbyk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdmFsaWRhdGVET01OZXN0aW5nO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QtZG9tL2xpYi92YWxpZGF0ZURPTU5lc3RpbmcuanMiLCIvKipcbiAqIFByaW50cyBhIHdhcm5pbmcgaW4gdGhlIGNvbnNvbGUgaWYgaXQgZXhpc3RzLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlIFRoZSB3YXJuaW5nIG1lc3NhZ2UuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gd2FybmluZyhtZXNzYWdlKSB7XG4gIC8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnNvbGUgKi9cbiAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgY29uc29sZS5lcnJvciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNvbnNvbGUuZXJyb3IobWVzc2FnZSk7XG4gIH1cbiAgLyogZXNsaW50LWVuYWJsZSBuby1jb25zb2xlICovXG4gIHRyeSB7XG4gICAgLy8gVGhpcyBlcnJvciB3YXMgdGhyb3duIGFzIGEgY29udmVuaWVuY2Ugc28gdGhhdCBpZiB5b3UgZW5hYmxlXG4gICAgLy8gXCJicmVhayBvbiBhbGwgZXhjZXB0aW9uc1wiIGluIHlvdXIgY29uc29sZSxcbiAgICAvLyBpdCB3b3VsZCBwYXVzZSB0aGUgZXhlY3V0aW9uIGF0IHRoaXMgbGluZS5cbiAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgLyogZXNsaW50LWRpc2FibGUgbm8tZW1wdHkgKi9cbiAgfSBjYXRjaCAoZSkge31cbiAgLyogZXNsaW50LWVuYWJsZSBuby1lbXB0eSAqL1xufVxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QtcmVkdXgvZXMvdXRpbHMvd2FybmluZy5qcyIsInZhciBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKCFzZWxmKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gY2FsbCAmJiAodHlwZW9mIGNhbGwgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikgPyBjYWxsIDogc2VsZjsgfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcIiArIHR5cGVvZiBzdXBlckNsYXNzKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCBlbnVtZXJhYmxlOiBmYWxzZSwgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKSA6IHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7IH1cblxuaW1wb3J0IHdhcm5pbmcgZnJvbSAnd2FybmluZyc7XG5pbXBvcnQgaW52YXJpYW50IGZyb20gJ2ludmFyaWFudCc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcblxuLyoqXG4gKiBUaGUgcHVibGljIEFQSSBmb3IgcHV0dGluZyBoaXN0b3J5IG9uIGNvbnRleHQuXG4gKi9cblxudmFyIFJvdXRlciA9IGZ1bmN0aW9uIChfUmVhY3QkQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhSb3V0ZXIsIF9SZWFjdCRDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIFJvdXRlcigpIHtcbiAgICB2YXIgX3RlbXAsIF90aGlzLCBfcmV0O1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFJvdXRlcik7XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICByZXR1cm4gX3JldCA9IChfdGVtcCA9IChfdGhpcyA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIF9SZWFjdCRDb21wb25lbnQuY2FsbC5hcHBseShfUmVhY3QkQ29tcG9uZW50LCBbdGhpc10uY29uY2F0KGFyZ3MpKSksIF90aGlzKSwgX3RoaXMuc3RhdGUgPSB7XG4gICAgICBtYXRjaDogX3RoaXMuY29tcHV0ZU1hdGNoKF90aGlzLnByb3BzLmhpc3RvcnkubG9jYXRpb24ucGF0aG5hbWUpXG4gICAgfSwgX3RlbXApLCBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihfdGhpcywgX3JldCk7XG4gIH1cblxuICBSb3V0ZXIucHJvdG90eXBlLmdldENoaWxkQ29udGV4dCA9IGZ1bmN0aW9uIGdldENoaWxkQ29udGV4dCgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcm91dGVyOiBfZXh0ZW5kcyh7fSwgdGhpcy5jb250ZXh0LnJvdXRlciwge1xuICAgICAgICBoaXN0b3J5OiB0aGlzLnByb3BzLmhpc3RvcnksXG4gICAgICAgIHJvdXRlOiB7XG4gICAgICAgICAgbG9jYXRpb246IHRoaXMucHJvcHMuaGlzdG9yeS5sb2NhdGlvbixcbiAgICAgICAgICBtYXRjaDogdGhpcy5zdGF0ZS5tYXRjaFxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH07XG4gIH07XG5cbiAgUm91dGVyLnByb3RvdHlwZS5jb21wdXRlTWF0Y2ggPSBmdW5jdGlvbiBjb21wdXRlTWF0Y2gocGF0aG5hbWUpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGF0aDogJy8nLFxuICAgICAgdXJsOiAnLycsXG4gICAgICBwYXJhbXM6IHt9LFxuICAgICAgaXNFeGFjdDogcGF0aG5hbWUgPT09ICcvJ1xuICAgIH07XG4gIH07XG5cbiAgUm91dGVyLnByb3RvdHlwZS5jb21wb25lbnRXaWxsTW91bnQgPSBmdW5jdGlvbiBjb21wb25lbnRXaWxsTW91bnQoKSB7XG4gICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICB2YXIgX3Byb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgY2hpbGRyZW4gPSBfcHJvcHMuY2hpbGRyZW4sXG4gICAgICAgIGhpc3RvcnkgPSBfcHJvcHMuaGlzdG9yeTtcblxuXG4gICAgaW52YXJpYW50KGNoaWxkcmVuID09IG51bGwgfHwgUmVhY3QuQ2hpbGRyZW4uY291bnQoY2hpbGRyZW4pID09PSAxLCAnQSA8Um91dGVyPiBtYXkgaGF2ZSBvbmx5IG9uZSBjaGlsZCBlbGVtZW50Jyk7XG5cbiAgICAvLyBEbyB0aGlzIGhlcmUgc28gd2UgY2FuIHNldFN0YXRlIHdoZW4gYSA8UmVkaXJlY3Q+IGNoYW5nZXMgdGhlXG4gICAgLy8gbG9jYXRpb24gaW4gY29tcG9uZW50V2lsbE1vdW50LiBUaGlzIGhhcHBlbnMgZS5nLiB3aGVuIGRvaW5nXG4gICAgLy8gc2VydmVyIHJlbmRlcmluZyB1c2luZyBhIDxTdGF0aWNSb3V0ZXI+LlxuICAgIHRoaXMudW5saXN0ZW4gPSBoaXN0b3J5Lmxpc3RlbihmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpczIuc2V0U3RhdGUoe1xuICAgICAgICBtYXRjaDogX3RoaXMyLmNvbXB1dGVNYXRjaChoaXN0b3J5LmxvY2F0aW9uLnBhdGhuYW1lKVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG5cbiAgUm91dGVyLnByb3RvdHlwZS5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzID0gZnVuY3Rpb24gY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXh0UHJvcHMpIHtcbiAgICB3YXJuaW5nKHRoaXMucHJvcHMuaGlzdG9yeSA9PT0gbmV4dFByb3BzLmhpc3RvcnksICdZb3UgY2Fubm90IGNoYW5nZSA8Um91dGVyIGhpc3Rvcnk+Jyk7XG4gIH07XG5cbiAgUm91dGVyLnByb3RvdHlwZS5jb21wb25lbnRXaWxsVW5tb3VudCA9IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIHRoaXMudW5saXN0ZW4oKTtcbiAgfTtcblxuICBSb3V0ZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICB2YXIgY2hpbGRyZW4gPSB0aGlzLnByb3BzLmNoaWxkcmVuO1xuXG4gICAgcmV0dXJuIGNoaWxkcmVuID8gUmVhY3QuQ2hpbGRyZW4ub25seShjaGlsZHJlbikgOiBudWxsO1xuICB9O1xuXG4gIHJldHVybiBSb3V0ZXI7XG59KFJlYWN0LkNvbXBvbmVudCk7XG5cblJvdXRlci5wcm9wVHlwZXMgPSB7XG4gIGhpc3Rvcnk6IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZCxcbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlXG59O1xuUm91dGVyLmNvbnRleHRUeXBlcyA9IHtcbiAgcm91dGVyOiBQcm9wVHlwZXMub2JqZWN0XG59O1xuUm91dGVyLmNoaWxkQ29udGV4dFR5cGVzID0ge1xuICByb3V0ZXI6IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZFxufTtcblxuXG5leHBvcnQgZGVmYXVsdCBSb3V0ZXI7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1yb3V0ZXIvZXMvUm91dGVyLmpzIiwiaW1wb3J0IHBhdGhUb1JlZ2V4cCBmcm9tICdwYXRoLXRvLXJlZ2V4cCc7XG5cbnZhciBwYXR0ZXJuQ2FjaGUgPSB7fTtcbnZhciBjYWNoZUxpbWl0ID0gMTAwMDA7XG52YXIgY2FjaGVDb3VudCA9IDA7XG5cbnZhciBjb21waWxlUGF0aCA9IGZ1bmN0aW9uIGNvbXBpbGVQYXRoKHBhdHRlcm4sIG9wdGlvbnMpIHtcbiAgdmFyIGNhY2hlS2V5ID0gJycgKyBvcHRpb25zLmVuZCArIG9wdGlvbnMuc3RyaWN0O1xuICB2YXIgY2FjaGUgPSBwYXR0ZXJuQ2FjaGVbY2FjaGVLZXldIHx8IChwYXR0ZXJuQ2FjaGVbY2FjaGVLZXldID0ge30pO1xuXG4gIGlmIChjYWNoZVtwYXR0ZXJuXSkgcmV0dXJuIGNhY2hlW3BhdHRlcm5dO1xuXG4gIHZhciBrZXlzID0gW107XG4gIHZhciByZSA9IHBhdGhUb1JlZ2V4cChwYXR0ZXJuLCBrZXlzLCBvcHRpb25zKTtcbiAgdmFyIGNvbXBpbGVkUGF0dGVybiA9IHsgcmU6IHJlLCBrZXlzOiBrZXlzIH07XG5cbiAgaWYgKGNhY2hlQ291bnQgPCBjYWNoZUxpbWl0KSB7XG4gICAgY2FjaGVbcGF0dGVybl0gPSBjb21waWxlZFBhdHRlcm47XG4gICAgY2FjaGVDb3VudCsrO1xuICB9XG5cbiAgcmV0dXJuIGNvbXBpbGVkUGF0dGVybjtcbn07XG5cbi8qKlxuICogUHVibGljIEFQSSBmb3IgbWF0Y2hpbmcgYSBVUkwgcGF0aG5hbWUgdG8gYSBwYXRoIHBhdHRlcm4uXG4gKi9cbnZhciBtYXRjaFBhdGggPSBmdW5jdGlvbiBtYXRjaFBhdGgocGF0aG5hbWUpIHtcbiAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuXG4gIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ3N0cmluZycpIG9wdGlvbnMgPSB7IHBhdGg6IG9wdGlvbnMgfTtcblxuICB2YXIgX29wdGlvbnMgPSBvcHRpb25zLFxuICAgICAgX29wdGlvbnMkcGF0aCA9IF9vcHRpb25zLnBhdGgsXG4gICAgICBwYXRoID0gX29wdGlvbnMkcGF0aCA9PT0gdW5kZWZpbmVkID8gJy8nIDogX29wdGlvbnMkcGF0aCxcbiAgICAgIF9vcHRpb25zJGV4YWN0ID0gX29wdGlvbnMuZXhhY3QsXG4gICAgICBleGFjdCA9IF9vcHRpb25zJGV4YWN0ID09PSB1bmRlZmluZWQgPyBmYWxzZSA6IF9vcHRpb25zJGV4YWN0LFxuICAgICAgX29wdGlvbnMkc3RyaWN0ID0gX29wdGlvbnMuc3RyaWN0LFxuICAgICAgc3RyaWN0ID0gX29wdGlvbnMkc3RyaWN0ID09PSB1bmRlZmluZWQgPyBmYWxzZSA6IF9vcHRpb25zJHN0cmljdDtcblxuICB2YXIgX2NvbXBpbGVQYXRoID0gY29tcGlsZVBhdGgocGF0aCwgeyBlbmQ6IGV4YWN0LCBzdHJpY3Q6IHN0cmljdCB9KSxcbiAgICAgIHJlID0gX2NvbXBpbGVQYXRoLnJlLFxuICAgICAga2V5cyA9IF9jb21waWxlUGF0aC5rZXlzO1xuXG4gIHZhciBtYXRjaCA9IHJlLmV4ZWMocGF0aG5hbWUpO1xuXG4gIGlmICghbWF0Y2gpIHJldHVybiBudWxsO1xuXG4gIHZhciB1cmwgPSBtYXRjaFswXSxcbiAgICAgIHZhbHVlcyA9IG1hdGNoLnNsaWNlKDEpO1xuXG4gIHZhciBpc0V4YWN0ID0gcGF0aG5hbWUgPT09IHVybDtcblxuICBpZiAoZXhhY3QgJiYgIWlzRXhhY3QpIHJldHVybiBudWxsO1xuXG4gIHJldHVybiB7XG4gICAgcGF0aDogcGF0aCwgLy8gdGhlIHBhdGggcGF0dGVybiB1c2VkIHRvIG1hdGNoXG4gICAgdXJsOiBwYXRoID09PSAnLycgJiYgdXJsID09PSAnJyA/ICcvJyA6IHVybCwgLy8gdGhlIG1hdGNoZWQgcG9ydGlvbiBvZiB0aGUgVVJMXG4gICAgaXNFeGFjdDogaXNFeGFjdCwgLy8gd2hldGhlciBvciBub3Qgd2UgbWF0Y2hlZCBleGFjdGx5XG4gICAgcGFyYW1zOiBrZXlzLnJlZHVjZShmdW5jdGlvbiAobWVtbywga2V5LCBpbmRleCkge1xuICAgICAgbWVtb1trZXkubmFtZV0gPSB2YWx1ZXNbaW5kZXhdO1xuICAgICAgcmV0dXJuIG1lbW87XG4gICAgfSwge30pXG4gIH07XG59O1xuXG5leHBvcnQgZGVmYXVsdCBtYXRjaFBhdGg7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1yb3V0ZXIvZXMvbWF0Y2hQYXRoLmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxNC0yMDE1LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBGb3JrZWQgZnJvbSBmYmpzL3dhcm5pbmc6XG4gKiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svZmJqcy9ibG9iL2U2NmJhMjBhZDViZTQzM2ViNTQ0MjNmMmIwOTdkODI5MzI0ZDlkZTYvcGFja2FnZXMvZmJqcy9zcmMvX19mb3Jrc19fL3dhcm5pbmcuanNcbiAqXG4gKiBPbmx5IGNoYW5nZSBpcyB3ZSB1c2UgY29uc29sZS53YXJuIGluc3RlYWQgb2YgY29uc29sZS5lcnJvcixcbiAqIGFuZCBkbyBub3RoaW5nIHdoZW4gJ2NvbnNvbGUnIGlzIG5vdCBzdXBwb3J0ZWQuXG4gKiBUaGlzIHJlYWxseSBzaW1wbGlmaWVzIHRoZSBjb2RlLlxuICogLS0tXG4gKiBTaW1pbGFyIHRvIGludmFyaWFudCBidXQgb25seSBsb2dzIGEgd2FybmluZyBpZiB0aGUgY29uZGl0aW9uIGlzIG5vdCBtZXQuXG4gKiBUaGlzIGNhbiBiZSB1c2VkIHRvIGxvZyBpc3N1ZXMgaW4gZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnRzIGluIGNyaXRpY2FsXG4gKiBwYXRocy4gUmVtb3ZpbmcgdGhlIGxvZ2dpbmcgY29kZSBmb3IgcHJvZHVjdGlvbiBlbnZpcm9ubWVudHMgd2lsbCBrZWVwIHRoZVxuICogc2FtZSBsb2dpYyBhbmQgZm9sbG93IHRoZSBzYW1lIGNvZGUgcGF0aHMuXG4gKi9cblxudmFyIGxvd1ByaW9yaXR5V2FybmluZyA9IGZ1bmN0aW9uICgpIHt9O1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICB2YXIgcHJpbnRXYXJuaW5nID0gZnVuY3Rpb24gKGZvcm1hdCkge1xuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5IC0gMV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgdmFyIGFyZ0luZGV4ID0gMDtcbiAgICB2YXIgbWVzc2FnZSA9ICdXYXJuaW5nOiAnICsgZm9ybWF0LnJlcGxhY2UoLyVzL2csIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBhcmdzW2FyZ0luZGV4KytdO1xuICAgIH0pO1xuICAgIGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGNvbnNvbGUud2FybihtZXNzYWdlKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIC8vIC0tLSBXZWxjb21lIHRvIGRlYnVnZ2luZyBSZWFjdCAtLS1cbiAgICAgIC8vIFRoaXMgZXJyb3Igd2FzIHRocm93biBhcyBhIGNvbnZlbmllbmNlIHNvIHRoYXQgeW91IGNhbiB1c2UgdGhpcyBzdGFja1xuICAgICAgLy8gdG8gZmluZCB0aGUgY2FsbHNpdGUgdGhhdCBjYXVzZWQgdGhpcyB3YXJuaW5nIHRvIGZpcmUuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgfSBjYXRjaCAoeCkge31cbiAgfTtcblxuICBsb3dQcmlvcml0eVdhcm5pbmcgPSBmdW5jdGlvbiAoY29uZGl0aW9uLCBmb3JtYXQpIHtcbiAgICBpZiAoZm9ybWF0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignYHdhcm5pbmcoY29uZGl0aW9uLCBmb3JtYXQsIC4uLmFyZ3MpYCByZXF1aXJlcyBhIHdhcm5pbmcgJyArICdtZXNzYWdlIGFyZ3VtZW50Jyk7XG4gICAgfVxuICAgIGlmICghY29uZGl0aW9uKSB7XG4gICAgICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBBcnJheShfbGVuMiA+IDIgPyBfbGVuMiAtIDIgOiAwKSwgX2tleTIgPSAyOyBfa2V5MiA8IF9sZW4yOyBfa2V5MisrKSB7XG4gICAgICAgIGFyZ3NbX2tleTIgLSAyXSA9IGFyZ3VtZW50c1tfa2V5Ml07XG4gICAgICB9XG5cbiAgICAgIHByaW50V2FybmluZy5hcHBseSh1bmRlZmluZWQsIFtmb3JtYXRdLmNvbmNhdChhcmdzKSk7XG4gICAgfVxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxvd1ByaW9yaXR5V2FybmluZztcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3JlYWN0L2xpYi9sb3dQcmlvcml0eVdhcm5pbmcuanMiLCJpbXBvcnQgY3JlYXRlU3RvcmUgZnJvbSAnLi9jcmVhdGVTdG9yZSc7XG5pbXBvcnQgY29tYmluZVJlZHVjZXJzIGZyb20gJy4vY29tYmluZVJlZHVjZXJzJztcbmltcG9ydCBiaW5kQWN0aW9uQ3JlYXRvcnMgZnJvbSAnLi9iaW5kQWN0aW9uQ3JlYXRvcnMnO1xuaW1wb3J0IGFwcGx5TWlkZGxld2FyZSBmcm9tICcuL2FwcGx5TWlkZGxld2FyZSc7XG5pbXBvcnQgY29tcG9zZSBmcm9tICcuL2NvbXBvc2UnO1xuaW1wb3J0IHdhcm5pbmcgZnJvbSAnLi91dGlscy93YXJuaW5nJztcblxuLypcbiogVGhpcyBpcyBhIGR1bW15IGZ1bmN0aW9uIHRvIGNoZWNrIGlmIHRoZSBmdW5jdGlvbiBuYW1lIGhhcyBiZWVuIGFsdGVyZWQgYnkgbWluaWZpY2F0aW9uLlxuKiBJZiB0aGUgZnVuY3Rpb24gaGFzIGJlZW4gbWluaWZpZWQgYW5kIE5PREVfRU5WICE9PSAncHJvZHVjdGlvbicsIHdhcm4gdGhlIHVzZXIuXG4qL1xuZnVuY3Rpb24gaXNDcnVzaGVkKCkge31cblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgdHlwZW9mIGlzQ3J1c2hlZC5uYW1lID09PSAnc3RyaW5nJyAmJiBpc0NydXNoZWQubmFtZSAhPT0gJ2lzQ3J1c2hlZCcpIHtcbiAgd2FybmluZygnWW91IGFyZSBjdXJyZW50bHkgdXNpbmcgbWluaWZpZWQgY29kZSBvdXRzaWRlIG9mIE5PREVfRU5WID09PSBcXCdwcm9kdWN0aW9uXFwnLiAnICsgJ1RoaXMgbWVhbnMgdGhhdCB5b3UgYXJlIHJ1bm5pbmcgYSBzbG93ZXIgZGV2ZWxvcG1lbnQgYnVpbGQgb2YgUmVkdXguICcgKyAnWW91IGNhbiB1c2UgbG9vc2UtZW52aWZ5IChodHRwczovL2dpdGh1Yi5jb20vemVydG9zaC9sb29zZS1lbnZpZnkpIGZvciBicm93c2VyaWZ5ICcgKyAnb3IgRGVmaW5lUGx1Z2luIGZvciB3ZWJwYWNrIChodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzMwMDMwMDMxKSAnICsgJ3RvIGVuc3VyZSB5b3UgaGF2ZSB0aGUgY29ycmVjdCBjb2RlIGZvciB5b3VyIHByb2R1Y3Rpb24gYnVpbGQuJyk7XG59XG5cbmV4cG9ydCB7IGNyZWF0ZVN0b3JlLCBjb21iaW5lUmVkdWNlcnMsIGJpbmRBY3Rpb25DcmVhdG9ycywgYXBwbHlNaWRkbGV3YXJlLCBjb21wb3NlIH07XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWR1eC9lcy9pbmRleC5qcyIsIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqXG4gKiBAdHlwZWNoZWNrc1xuICovXG5cbnZhciBlbXB0eUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9lbXB0eUZ1bmN0aW9uJyk7XG5cbi8qKlxuICogVXBzdHJlYW0gdmVyc2lvbiBvZiBldmVudCBsaXN0ZW5lci4gRG9lcyBub3QgdGFrZSBpbnRvIGFjY291bnQgc3BlY2lmaWNcbiAqIG5hdHVyZSBvZiBwbGF0Zm9ybS5cbiAqL1xudmFyIEV2ZW50TGlzdGVuZXIgPSB7XG4gIC8qKlxuICAgKiBMaXN0ZW4gdG8gRE9NIGV2ZW50cyBkdXJpbmcgdGhlIGJ1YmJsZSBwaGFzZS5cbiAgICpcbiAgICogQHBhcmFtIHtET01FdmVudFRhcmdldH0gdGFyZ2V0IERPTSBlbGVtZW50IHRvIHJlZ2lzdGVyIGxpc3RlbmVyIG9uLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnRUeXBlIEV2ZW50IHR5cGUsIGUuZy4gJ2NsaWNrJyBvciAnbW91c2VvdmVyJy5cbiAgICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sgQ2FsbGJhY2sgZnVuY3Rpb24uXG4gICAqIEByZXR1cm4ge29iamVjdH0gT2JqZWN0IHdpdGggYSBgcmVtb3ZlYCBtZXRob2QuXG4gICAqL1xuICBsaXN0ZW46IGZ1bmN0aW9uIGxpc3Rlbih0YXJnZXQsIGV2ZW50VHlwZSwgY2FsbGJhY2spIHtcbiAgICBpZiAodGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIpIHtcbiAgICAgIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgY2FsbGJhY2ssIGZhbHNlKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHJlbW92ZTogZnVuY3Rpb24gcmVtb3ZlKCkge1xuICAgICAgICAgIHRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgY2FsbGJhY2ssIGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKHRhcmdldC5hdHRhY2hFdmVudCkge1xuICAgICAgdGFyZ2V0LmF0dGFjaEV2ZW50KCdvbicgKyBldmVudFR5cGUsIGNhbGxiYWNrKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHJlbW92ZTogZnVuY3Rpb24gcmVtb3ZlKCkge1xuICAgICAgICAgIHRhcmdldC5kZXRhY2hFdmVudCgnb24nICsgZXZlbnRUeXBlLCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICB9LFxuXG4gIC8qKlxuICAgKiBMaXN0ZW4gdG8gRE9NIGV2ZW50cyBkdXJpbmcgdGhlIGNhcHR1cmUgcGhhc2UuXG4gICAqXG4gICAqIEBwYXJhbSB7RE9NRXZlbnRUYXJnZXR9IHRhcmdldCBET00gZWxlbWVudCB0byByZWdpc3RlciBsaXN0ZW5lciBvbi5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50VHlwZSBFdmVudCB0eXBlLCBlLmcuICdjbGljaycgb3IgJ21vdXNlb3ZlcicuXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrIENhbGxiYWNrIGZ1bmN0aW9uLlxuICAgKiBAcmV0dXJuIHtvYmplY3R9IE9iamVjdCB3aXRoIGEgYHJlbW92ZWAgbWV0aG9kLlxuICAgKi9cbiAgY2FwdHVyZTogZnVuY3Rpb24gY2FwdHVyZSh0YXJnZXQsIGV2ZW50VHlwZSwgY2FsbGJhY2spIHtcbiAgICBpZiAodGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIpIHtcbiAgICAgIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgY2FsbGJhY2ssIHRydWUpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcmVtb3ZlOiBmdW5jdGlvbiByZW1vdmUoKSB7XG4gICAgICAgICAgdGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBjYWxsYmFjaywgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0F0dGVtcHRlZCB0byBsaXN0ZW4gdG8gZXZlbnRzIGR1cmluZyB0aGUgY2FwdHVyZSBwaGFzZSBvbiBhICcgKyAnYnJvd3NlciB0aGF0IGRvZXMgbm90IHN1cHBvcnQgdGhlIGNhcHR1cmUgcGhhc2UuIFlvdXIgYXBwbGljYXRpb24gJyArICd3aWxsIG5vdCByZWNlaXZlIHNvbWUgZXZlbnRzLicpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcmVtb3ZlOiBlbXB0eUZ1bmN0aW9uXG4gICAgICB9O1xuICAgIH1cbiAgfSxcblxuICByZWdpc3RlckRlZmF1bHQ6IGZ1bmN0aW9uIHJlZ2lzdGVyRGVmYXVsdCgpIHt9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEV2ZW50TGlzdGVuZXI7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9mYmpzL2xpYi9FdmVudExpc3RlbmVyLmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbi8qKlxuICogQHBhcmFtIHtET01FbGVtZW50fSBub2RlIGlucHV0L3RleHRhcmVhIHRvIGZvY3VzXG4gKi9cblxuZnVuY3Rpb24gZm9jdXNOb2RlKG5vZGUpIHtcbiAgLy8gSUU4IGNhbiB0aHJvdyBcIkNhbid0IG1vdmUgZm9jdXMgdG8gdGhlIGNvbnRyb2wgYmVjYXVzZSBpdCBpcyBpbnZpc2libGUsXG4gIC8vIG5vdCBlbmFibGVkLCBvciBvZiBhIHR5cGUgdGhhdCBkb2VzIG5vdCBhY2NlcHQgdGhlIGZvY3VzLlwiIGZvciBhbGwga2luZHMgb2ZcbiAgLy8gcmVhc29ucyB0aGF0IGFyZSB0b28gZXhwZW5zaXZlIGFuZCBmcmFnaWxlIHRvIHRlc3QuXG4gIHRyeSB7XG4gICAgbm9kZS5mb2N1cygpO1xuICB9IGNhdGNoIChlKSB7fVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZvY3VzTm9kZTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L2ZianMvbGliL2ZvY3VzTm9kZS5qcyIsIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEB0eXBlY2hlY2tzXG4gKi9cblxuLyogZXNsaW50LWRpc2FibGUgZmItd3d3L3R5cGVvZi11bmRlZmluZWQgKi9cblxuLyoqXG4gKiBTYW1lIGFzIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgYnV0IHdyYXBzIGluIGEgdHJ5LWNhdGNoIGJsb2NrLiBJbiBJRSBpdCBpc1xuICogbm90IHNhZmUgdG8gY2FsbCBkb2N1bWVudC5hY3RpdmVFbGVtZW50IGlmIHRoZXJlIGlzIG5vdGhpbmcgZm9jdXNlZC5cbiAqXG4gKiBUaGUgYWN0aXZlRWxlbWVudCB3aWxsIGJlIG51bGwgb25seSBpZiB0aGUgZG9jdW1lbnQgb3IgZG9jdW1lbnQgYm9keSBpcyBub3RcbiAqIHlldCBkZWZpbmVkLlxuICpcbiAqIEBwYXJhbSB7P0RPTURvY3VtZW50fSBkb2MgRGVmYXVsdHMgdG8gY3VycmVudCBkb2N1bWVudC5cbiAqIEByZXR1cm4gez9ET01FbGVtZW50fVxuICovXG5mdW5jdGlvbiBnZXRBY3RpdmVFbGVtZW50KGRvYykgLyo/RE9NRWxlbWVudCove1xuICBkb2MgPSBkb2MgfHwgKHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcgPyBkb2N1bWVudCA6IHVuZGVmaW5lZCk7XG4gIGlmICh0eXBlb2YgZG9jID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHRyeSB7XG4gICAgcmV0dXJuIGRvYy5hY3RpdmVFbGVtZW50IHx8IGRvYy5ib2R5O1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGRvYy5ib2R5O1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QWN0aXZlRWxlbWVudDtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L2ZianMvbGliL2dldEFjdGl2ZUVsZW1lbnQuanMiLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG52YXIgY2FuVXNlRE9NID0gZXhwb3J0cy5jYW5Vc2VET00gPSAhISh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuZG9jdW1lbnQgJiYgd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpO1xuXG52YXIgYWRkRXZlbnRMaXN0ZW5lciA9IGV4cG9ydHMuYWRkRXZlbnRMaXN0ZW5lciA9IGZ1bmN0aW9uIGFkZEV2ZW50TGlzdGVuZXIobm9kZSwgZXZlbnQsIGxpc3RlbmVyKSB7XG4gIHJldHVybiBub2RlLmFkZEV2ZW50TGlzdGVuZXIgPyBub2RlLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnQsIGxpc3RlbmVyLCBmYWxzZSkgOiBub2RlLmF0dGFjaEV2ZW50KCdvbicgKyBldmVudCwgbGlzdGVuZXIpO1xufTtcblxudmFyIHJlbW92ZUV2ZW50TGlzdGVuZXIgPSBleHBvcnRzLnJlbW92ZUV2ZW50TGlzdGVuZXIgPSBmdW5jdGlvbiByZW1vdmVFdmVudExpc3RlbmVyKG5vZGUsIGV2ZW50LCBsaXN0ZW5lcikge1xuICByZXR1cm4gbm9kZS5yZW1vdmVFdmVudExpc3RlbmVyID8gbm9kZS5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50LCBsaXN0ZW5lciwgZmFsc2UpIDogbm9kZS5kZXRhY2hFdmVudCgnb24nICsgZXZlbnQsIGxpc3RlbmVyKTtcbn07XG5cbnZhciBnZXRDb25maXJtYXRpb24gPSBleHBvcnRzLmdldENvbmZpcm1hdGlvbiA9IGZ1bmN0aW9uIGdldENvbmZpcm1hdGlvbihtZXNzYWdlLCBjYWxsYmFjaykge1xuICByZXR1cm4gY2FsbGJhY2sod2luZG93LmNvbmZpcm0obWVzc2FnZSkpO1xufTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1hbGVydFxuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgSFRNTDUgaGlzdG9yeSBBUEkgaXMgc3VwcG9ydGVkLiBUYWtlbiBmcm9tIE1vZGVybml6ci5cbiAqXG4gKiBodHRwczovL2dpdGh1Yi5jb20vTW9kZXJuaXpyL01vZGVybml6ci9ibG9iL21hc3Rlci9MSUNFTlNFXG4gKiBodHRwczovL2dpdGh1Yi5jb20vTW9kZXJuaXpyL01vZGVybml6ci9ibG9iL21hc3Rlci9mZWF0dXJlLWRldGVjdHMvaGlzdG9yeS5qc1xuICogY2hhbmdlZCB0byBhdm9pZCBmYWxzZSBuZWdhdGl2ZXMgZm9yIFdpbmRvd3MgUGhvbmVzOiBodHRwczovL2dpdGh1Yi5jb20vcmVhY3Rqcy9yZWFjdC1yb3V0ZXIvaXNzdWVzLzU4NlxuICovXG52YXIgc3VwcG9ydHNIaXN0b3J5ID0gZXhwb3J0cy5zdXBwb3J0c0hpc3RvcnkgPSBmdW5jdGlvbiBzdXBwb3J0c0hpc3RvcnkoKSB7XG4gIHZhciB1YSA9IHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50O1xuXG4gIGlmICgodWEuaW5kZXhPZignQW5kcm9pZCAyLicpICE9PSAtMSB8fCB1YS5pbmRleE9mKCdBbmRyb2lkIDQuMCcpICE9PSAtMSkgJiYgdWEuaW5kZXhPZignTW9iaWxlIFNhZmFyaScpICE9PSAtMSAmJiB1YS5pbmRleE9mKCdDaHJvbWUnKSA9PT0gLTEgJiYgdWEuaW5kZXhPZignV2luZG93cyBQaG9uZScpID09PSAtMSkgcmV0dXJuIGZhbHNlO1xuXG4gIHJldHVybiB3aW5kb3cuaGlzdG9yeSAmJiAncHVzaFN0YXRlJyBpbiB3aW5kb3cuaGlzdG9yeTtcbn07XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIGJyb3dzZXIgZmlyZXMgcG9wc3RhdGUgb24gaGFzaCBjaGFuZ2UuXG4gKiBJRTEwIGFuZCBJRTExIGRvIG5vdC5cbiAqL1xudmFyIHN1cHBvcnRzUG9wU3RhdGVPbkhhc2hDaGFuZ2UgPSBleHBvcnRzLnN1cHBvcnRzUG9wU3RhdGVPbkhhc2hDaGFuZ2UgPSBmdW5jdGlvbiBzdXBwb3J0c1BvcFN0YXRlT25IYXNoQ2hhbmdlKCkge1xuICByZXR1cm4gd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZignVHJpZGVudCcpID09PSAtMTtcbn07XG5cbi8qKlxuICogUmV0dXJucyBmYWxzZSBpZiB1c2luZyBnbyhuKSB3aXRoIGhhc2ggaGlzdG9yeSBjYXVzZXMgYSBmdWxsIHBhZ2UgcmVsb2FkLlxuICovXG52YXIgc3VwcG9ydHNHb1dpdGhvdXRSZWxvYWRVc2luZ0hhc2ggPSBleHBvcnRzLnN1cHBvcnRzR29XaXRob3V0UmVsb2FkVXNpbmdIYXNoID0gZnVuY3Rpb24gc3VwcG9ydHNHb1dpdGhvdXRSZWxvYWRVc2luZ0hhc2goKSB7XG4gIHJldHVybiB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCdGaXJlZm94JykgPT09IC0xO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgYSBnaXZlbiBwb3BzdGF0ZSBldmVudCBpcyBhbiBleHRyYW5lb3VzIFdlYktpdCBldmVudC5cbiAqIEFjY291bnRzIGZvciB0aGUgZmFjdCB0aGF0IENocm9tZSBvbiBpT1MgZmlyZXMgcmVhbCBwb3BzdGF0ZSBldmVudHNcbiAqIGNvbnRhaW5pbmcgdW5kZWZpbmVkIHN0YXRlIHdoZW4gcHJlc3NpbmcgdGhlIGJhY2sgYnV0dG9uLlxuICovXG52YXIgaXNFeHRyYW5lb3VzUG9wc3RhdGVFdmVudCA9IGV4cG9ydHMuaXNFeHRyYW5lb3VzUG9wc3RhdGVFdmVudCA9IGZ1bmN0aW9uIGlzRXh0cmFuZW91c1BvcHN0YXRlRXZlbnQoZXZlbnQpIHtcbiAgcmV0dXJuIGV2ZW50LnN0YXRlID09PSB1bmRlZmluZWQgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCdDcmlPUycpID09PSAtMTtcbn07XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9oaXN0b3J5L0RPTVV0aWxzLmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxNSwgWWFob28hIEluYy5cbiAqIENvcHlyaWdodHMgbGljZW5zZWQgdW5kZXIgdGhlIE5ldyBCU0QgTGljZW5zZS4gU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiAqL1xuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUkVBQ1RfU1RBVElDUyA9IHtcbiAgICBjaGlsZENvbnRleHRUeXBlczogdHJ1ZSxcbiAgICBjb250ZXh0VHlwZXM6IHRydWUsXG4gICAgZGVmYXVsdFByb3BzOiB0cnVlLFxuICAgIGRpc3BsYXlOYW1lOiB0cnVlLFxuICAgIGdldERlZmF1bHRQcm9wczogdHJ1ZSxcbiAgICBtaXhpbnM6IHRydWUsXG4gICAgcHJvcFR5cGVzOiB0cnVlLFxuICAgIHR5cGU6IHRydWVcbn07XG5cbnZhciBLTk9XTl9TVEFUSUNTID0ge1xuICAgIG5hbWU6IHRydWUsXG4gICAgbGVuZ3RoOiB0cnVlLFxuICAgIHByb3RvdHlwZTogdHJ1ZSxcbiAgICBjYWxsZXI6IHRydWUsXG4gICAgYXJndW1lbnRzOiB0cnVlLFxuICAgIGFyaXR5OiB0cnVlXG59O1xuXG52YXIgaXNHZXRPd25Qcm9wZXJ0eVN5bWJvbHNBdmFpbGFibGUgPSB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gJ2Z1bmN0aW9uJztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBob2lzdE5vblJlYWN0U3RhdGljcyh0YXJnZXRDb21wb25lbnQsIHNvdXJjZUNvbXBvbmVudCwgY3VzdG9tU3RhdGljcykge1xuICAgIGlmICh0eXBlb2Ygc291cmNlQ29tcG9uZW50ICE9PSAnc3RyaW5nJykgeyAvLyBkb24ndCBob2lzdCBvdmVyIHN0cmluZyAoaHRtbCkgY29tcG9uZW50c1xuICAgICAgICB2YXIga2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHNvdXJjZUNvbXBvbmVudCk7XG5cbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgaWYgKGlzR2V0T3duUHJvcGVydHlTeW1ib2xzQXZhaWxhYmxlKSB7XG4gICAgICAgICAgICBrZXlzID0ga2V5cy5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2VDb21wb25lbnQpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgaWYgKCFSRUFDVF9TVEFUSUNTW2tleXNbaV1dICYmICFLTk9XTl9TVEFUSUNTW2tleXNbaV1dICYmICghY3VzdG9tU3RhdGljcyB8fCAhY3VzdG9tU3RhdGljc1trZXlzW2ldXSkpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXRDb21wb25lbnRba2V5c1tpXV0gPSBzb3VyY2VDb21wb25lbnRba2V5c1tpXV07XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcblxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0YXJnZXRDb21wb25lbnQ7XG59O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9ob2lzdC1ub24tcmVhY3Qtc3RhdGljcy9pbmRleC5qcyIsImltcG9ydCByb290IGZyb20gJy4vX3Jvb3QuanMnO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBTeW1ib2wgPSByb290LlN5bWJvbDtcblxuZXhwb3J0IGRlZmF1bHQgU3ltYm9sO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9sb2Rhc2gtZXMvX1N5bWJvbC5qcyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuLy8gUmVhY3QgMTUuNSByZWZlcmVuY2VzIHRoaXMgbW9kdWxlLCBhbmQgYXNzdW1lcyBQcm9wVHlwZXMgYXJlIHN0aWxsIGNhbGxhYmxlIGluIHByb2R1Y3Rpb24uXG4vLyBUaGVyZWZvcmUgd2UgcmUtZXhwb3J0IGRldmVsb3BtZW50LW9ubHkgdmVyc2lvbiB3aXRoIGFsbCB0aGUgUHJvcFR5cGVzIGNoZWNrcyBoZXJlLlxuLy8gSG93ZXZlciBpZiBvbmUgaXMgbWlncmF0aW5nIHRvIHRoZSBgcHJvcC10eXBlc2AgbnBtIGxpYnJhcnksIHRoZXkgd2lsbCBnbyB0aHJvdWdoIHRoZVxuLy8gYGluZGV4LmpzYCBlbnRyeSBwb2ludCwgYW5kIGl0IHdpbGwgYnJhbmNoIGRlcGVuZGluZyBvbiB0aGUgZW52aXJvbm1lbnQuXG52YXIgZmFjdG9yeSA9IHJlcXVpcmUoJy4vZmFjdG9yeVdpdGhUeXBlQ2hlY2tlcnMnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXNWYWxpZEVsZW1lbnQpIHtcbiAgLy8gSXQgaXMgc3RpbGwgYWxsb3dlZCBpbiAxNS41LlxuICB2YXIgdGhyb3dPbkRpcmVjdEFjY2VzcyA9IGZhbHNlO1xuICByZXR1cm4gZmFjdG9yeShpc1ZhbGlkRWxlbWVudCwgdGhyb3dPbkRpcmVjdEFjY2Vzcyk7XG59O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9wcm9wLXR5cGVzL2ZhY3RvcnkuanMiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBlbXB0eUZ1bmN0aW9uID0gcmVxdWlyZSgnZmJqcy9saWIvZW1wdHlGdW5jdGlvbicpO1xudmFyIGludmFyaWFudCA9IHJlcXVpcmUoJ2ZianMvbGliL2ludmFyaWFudCcpO1xudmFyIHdhcm5pbmcgPSByZXF1aXJlKCdmYmpzL2xpYi93YXJuaW5nJyk7XG5cbnZhciBSZWFjdFByb3BUeXBlc1NlY3JldCA9IHJlcXVpcmUoJy4vbGliL1JlYWN0UHJvcFR5cGVzU2VjcmV0Jyk7XG52YXIgY2hlY2tQcm9wVHlwZXMgPSByZXF1aXJlKCcuL2NoZWNrUHJvcFR5cGVzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXNWYWxpZEVsZW1lbnQsIHRocm93T25EaXJlY3RBY2Nlc3MpIHtcbiAgLyogZ2xvYmFsIFN5bWJvbCAqL1xuICB2YXIgSVRFUkFUT1JfU1lNQk9MID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wuaXRlcmF0b3I7XG4gIHZhciBGQVVYX0lURVJBVE9SX1NZTUJPTCA9ICdAQGl0ZXJhdG9yJzsgLy8gQmVmb3JlIFN5bWJvbCBzcGVjLlxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBpdGVyYXRvciBtZXRob2QgZnVuY3Rpb24gY29udGFpbmVkIG9uIHRoZSBpdGVyYWJsZSBvYmplY3QuXG4gICAqXG4gICAqIEJlIHN1cmUgdG8gaW52b2tlIHRoZSBmdW5jdGlvbiB3aXRoIHRoZSBpdGVyYWJsZSBhcyBjb250ZXh0OlxuICAgKlxuICAgKiAgICAgdmFyIGl0ZXJhdG9yRm4gPSBnZXRJdGVyYXRvckZuKG15SXRlcmFibGUpO1xuICAgKiAgICAgaWYgKGl0ZXJhdG9yRm4pIHtcbiAgICogICAgICAgdmFyIGl0ZXJhdG9yID0gaXRlcmF0b3JGbi5jYWxsKG15SXRlcmFibGUpO1xuICAgKiAgICAgICAuLi5cbiAgICogICAgIH1cbiAgICpcbiAgICogQHBhcmFtIHs/b2JqZWN0fSBtYXliZUl0ZXJhYmxlXG4gICAqIEByZXR1cm4gez9mdW5jdGlvbn1cbiAgICovXG4gIGZ1bmN0aW9uIGdldEl0ZXJhdG9yRm4obWF5YmVJdGVyYWJsZSkge1xuICAgIHZhciBpdGVyYXRvckZuID0gbWF5YmVJdGVyYWJsZSAmJiAoSVRFUkFUT1JfU1lNQk9MICYmIG1heWJlSXRlcmFibGVbSVRFUkFUT1JfU1lNQk9MXSB8fCBtYXliZUl0ZXJhYmxlW0ZBVVhfSVRFUkFUT1JfU1lNQk9MXSk7XG4gICAgaWYgKHR5cGVvZiBpdGVyYXRvckZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gaXRlcmF0b3JGbjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ29sbGVjdGlvbiBvZiBtZXRob2RzIHRoYXQgYWxsb3cgZGVjbGFyYXRpb24gYW5kIHZhbGlkYXRpb24gb2YgcHJvcHMgdGhhdCBhcmVcbiAgICogc3VwcGxpZWQgdG8gUmVhY3QgY29tcG9uZW50cy4gRXhhbXBsZSB1c2FnZTpcbiAgICpcbiAgICogICB2YXIgUHJvcHMgPSByZXF1aXJlKCdSZWFjdFByb3BUeXBlcycpO1xuICAgKiAgIHZhciBNeUFydGljbGUgPSBSZWFjdC5jcmVhdGVDbGFzcyh7XG4gICAqICAgICBwcm9wVHlwZXM6IHtcbiAgICogICAgICAgLy8gQW4gb3B0aW9uYWwgc3RyaW5nIHByb3AgbmFtZWQgXCJkZXNjcmlwdGlvblwiLlxuICAgKiAgICAgICBkZXNjcmlwdGlvbjogUHJvcHMuc3RyaW5nLFxuICAgKlxuICAgKiAgICAgICAvLyBBIHJlcXVpcmVkIGVudW0gcHJvcCBuYW1lZCBcImNhdGVnb3J5XCIuXG4gICAqICAgICAgIGNhdGVnb3J5OiBQcm9wcy5vbmVPZihbJ05ld3MnLCdQaG90b3MnXSkuaXNSZXF1aXJlZCxcbiAgICpcbiAgICogICAgICAgLy8gQSBwcm9wIG5hbWVkIFwiZGlhbG9nXCIgdGhhdCByZXF1aXJlcyBhbiBpbnN0YW5jZSBvZiBEaWFsb2cuXG4gICAqICAgICAgIGRpYWxvZzogUHJvcHMuaW5zdGFuY2VPZihEaWFsb2cpLmlzUmVxdWlyZWRcbiAgICogICAgIH0sXG4gICAqICAgICByZW5kZXI6IGZ1bmN0aW9uKCkgeyAuLi4gfVxuICAgKiAgIH0pO1xuICAgKlxuICAgKiBBIG1vcmUgZm9ybWFsIHNwZWNpZmljYXRpb24gb2YgaG93IHRoZXNlIG1ldGhvZHMgYXJlIHVzZWQ6XG4gICAqXG4gICAqICAgdHlwZSA6PSBhcnJheXxib29sfGZ1bmN8b2JqZWN0fG51bWJlcnxzdHJpbmd8b25lT2YoWy4uLl0pfGluc3RhbmNlT2YoLi4uKVxuICAgKiAgIGRlY2wgOj0gUmVhY3RQcm9wVHlwZXMue3R5cGV9KC5pc1JlcXVpcmVkKT9cbiAgICpcbiAgICogRWFjaCBhbmQgZXZlcnkgZGVjbGFyYXRpb24gcHJvZHVjZXMgYSBmdW5jdGlvbiB3aXRoIHRoZSBzYW1lIHNpZ25hdHVyZS4gVGhpc1xuICAgKiBhbGxvd3MgdGhlIGNyZWF0aW9uIG9mIGN1c3RvbSB2YWxpZGF0aW9uIGZ1bmN0aW9ucy4gRm9yIGV4YW1wbGU6XG4gICAqXG4gICAqICB2YXIgTXlMaW5rID0gUmVhY3QuY3JlYXRlQ2xhc3Moe1xuICAgKiAgICBwcm9wVHlwZXM6IHtcbiAgICogICAgICAvLyBBbiBvcHRpb25hbCBzdHJpbmcgb3IgVVJJIHByb3AgbmFtZWQgXCJocmVmXCIuXG4gICAqICAgICAgaHJlZjogZnVuY3Rpb24ocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lKSB7XG4gICAqICAgICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgKiAgICAgICAgaWYgKHByb3BWYWx1ZSAhPSBudWxsICYmIHR5cGVvZiBwcm9wVmFsdWUgIT09ICdzdHJpbmcnICYmXG4gICAqICAgICAgICAgICAgIShwcm9wVmFsdWUgaW5zdGFuY2VvZiBVUkkpKSB7XG4gICAqICAgICAgICAgIHJldHVybiBuZXcgRXJyb3IoXG4gICAqICAgICAgICAgICAgJ0V4cGVjdGVkIGEgc3RyaW5nIG9yIGFuIFVSSSBmb3IgJyArIHByb3BOYW1lICsgJyBpbiAnICtcbiAgICogICAgICAgICAgICBjb21wb25lbnROYW1lXG4gICAqICAgICAgICAgICk7XG4gICAqICAgICAgICB9XG4gICAqICAgICAgfVxuICAgKiAgICB9LFxuICAgKiAgICByZW5kZXI6IGZ1bmN0aW9uKCkgey4uLn1cbiAgICogIH0pO1xuICAgKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG5cbiAgdmFyIEFOT05ZTU9VUyA9ICc8PGFub255bW91cz4+JztcblxuICAvLyBJbXBvcnRhbnQhXG4gIC8vIEtlZXAgdGhpcyBsaXN0IGluIHN5bmMgd2l0aCBwcm9kdWN0aW9uIHZlcnNpb24gaW4gYC4vZmFjdG9yeVdpdGhUaHJvd2luZ1NoaW1zLmpzYC5cbiAgdmFyIFJlYWN0UHJvcFR5cGVzID0ge1xuICAgIGFycmF5OiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignYXJyYXknKSxcbiAgICBib29sOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignYm9vbGVhbicpLFxuICAgIGZ1bmM6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdmdW5jdGlvbicpLFxuICAgIG51bWJlcjogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ251bWJlcicpLFxuICAgIG9iamVjdDogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ29iamVjdCcpLFxuICAgIHN0cmluZzogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ3N0cmluZycpLFxuICAgIHN5bWJvbDogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ3N5bWJvbCcpLFxuXG4gICAgYW55OiBjcmVhdGVBbnlUeXBlQ2hlY2tlcigpLFxuICAgIGFycmF5T2Y6IGNyZWF0ZUFycmF5T2ZUeXBlQ2hlY2tlcixcbiAgICBlbGVtZW50OiBjcmVhdGVFbGVtZW50VHlwZUNoZWNrZXIoKSxcbiAgICBpbnN0YW5jZU9mOiBjcmVhdGVJbnN0YW5jZVR5cGVDaGVja2VyLFxuICAgIG5vZGU6IGNyZWF0ZU5vZGVDaGVja2VyKCksXG4gICAgb2JqZWN0T2Y6IGNyZWF0ZU9iamVjdE9mVHlwZUNoZWNrZXIsXG4gICAgb25lT2Y6IGNyZWF0ZUVudW1UeXBlQ2hlY2tlcixcbiAgICBvbmVPZlR5cGU6IGNyZWF0ZVVuaW9uVHlwZUNoZWNrZXIsXG4gICAgc2hhcGU6IGNyZWF0ZVNoYXBlVHlwZUNoZWNrZXJcbiAgfTtcblxuICAvKipcbiAgICogaW5saW5lZCBPYmplY3QuaXMgcG9seWZpbGwgdG8gYXZvaWQgcmVxdWlyaW5nIGNvbnN1bWVycyBzaGlwIHRoZWlyIG93blxuICAgKiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9PYmplY3QvaXNcbiAgICovXG4gIC8qZXNsaW50LWRpc2FibGUgbm8tc2VsZi1jb21wYXJlKi9cbiAgZnVuY3Rpb24gaXMoeCwgeSkge1xuICAgIC8vIFNhbWVWYWx1ZSBhbGdvcml0aG1cbiAgICBpZiAoeCA9PT0geSkge1xuICAgICAgLy8gU3RlcHMgMS01LCA3LTEwXG4gICAgICAvLyBTdGVwcyA2LmItNi5lOiArMCAhPSAtMFxuICAgICAgcmV0dXJuIHggIT09IDAgfHwgMSAvIHggPT09IDEgLyB5O1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTdGVwIDYuYTogTmFOID09IE5hTlxuICAgICAgcmV0dXJuIHggIT09IHggJiYgeSAhPT0geTtcbiAgICB9XG4gIH1cbiAgLyplc2xpbnQtZW5hYmxlIG5vLXNlbGYtY29tcGFyZSovXG5cbiAgLyoqXG4gICAqIFdlIHVzZSBhbiBFcnJvci1saWtlIG9iamVjdCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBhcyBwZW9wbGUgbWF5IGNhbGxcbiAgICogUHJvcFR5cGVzIGRpcmVjdGx5IGFuZCBpbnNwZWN0IHRoZWlyIG91dHB1dC4gSG93ZXZlciwgd2UgZG9uJ3QgdXNlIHJlYWxcbiAgICogRXJyb3JzIGFueW1vcmUuIFdlIGRvbid0IGluc3BlY3QgdGhlaXIgc3RhY2sgYW55d2F5LCBhbmQgY3JlYXRpbmcgdGhlbVxuICAgKiBpcyBwcm9oaWJpdGl2ZWx5IGV4cGVuc2l2ZSBpZiB0aGV5IGFyZSBjcmVhdGVkIHRvbyBvZnRlbiwgc3VjaCBhcyB3aGF0XG4gICAqIGhhcHBlbnMgaW4gb25lT2ZUeXBlKCkgZm9yIGFueSB0eXBlIGJlZm9yZSB0aGUgb25lIHRoYXQgbWF0Y2hlZC5cbiAgICovXG4gIGZ1bmN0aW9uIFByb3BUeXBlRXJyb3IobWVzc2FnZSkge1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgdGhpcy5zdGFjayA9ICcnO1xuICB9XG4gIC8vIE1ha2UgYGluc3RhbmNlb2YgRXJyb3JgIHN0aWxsIHdvcmsgZm9yIHJldHVybmVkIGVycm9ycy5cbiAgUHJvcFR5cGVFcnJvci5wcm90b3R5cGUgPSBFcnJvci5wcm90b3R5cGU7XG5cbiAgZnVuY3Rpb24gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgdmFyIG1hbnVhbFByb3BUeXBlQ2FsbENhY2hlID0ge307XG4gICAgICB2YXIgbWFudWFsUHJvcFR5cGVXYXJuaW5nQ291bnQgPSAwO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjaGVja1R5cGUoaXNSZXF1aXJlZCwgcHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lLCBzZWNyZXQpIHtcbiAgICAgIGNvbXBvbmVudE5hbWUgPSBjb21wb25lbnROYW1lIHx8IEFOT05ZTU9VUztcbiAgICAgIHByb3BGdWxsTmFtZSA9IHByb3BGdWxsTmFtZSB8fCBwcm9wTmFtZTtcblxuICAgICAgaWYgKHNlY3JldCAhPT0gUmVhY3RQcm9wVHlwZXNTZWNyZXQpIHtcbiAgICAgICAgaWYgKHRocm93T25EaXJlY3RBY2Nlc3MpIHtcbiAgICAgICAgICAvLyBOZXcgYmVoYXZpb3Igb25seSBmb3IgdXNlcnMgb2YgYHByb3AtdHlwZXNgIHBhY2thZ2VcbiAgICAgICAgICBpbnZhcmlhbnQoXG4gICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgICdDYWxsaW5nIFByb3BUeXBlcyB2YWxpZGF0b3JzIGRpcmVjdGx5IGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGBwcm9wLXR5cGVzYCBwYWNrYWdlLiAnICtcbiAgICAgICAgICAgICdVc2UgYFByb3BUeXBlcy5jaGVja1Byb3BUeXBlcygpYCB0byBjYWxsIHRoZW0uICcgK1xuICAgICAgICAgICAgJ1JlYWQgbW9yZSBhdCBodHRwOi8vZmIubWUvdXNlLWNoZWNrLXByb3AtdHlwZXMnXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIC8vIE9sZCBiZWhhdmlvciBmb3IgcGVvcGxlIHVzaW5nIFJlYWN0LlByb3BUeXBlc1xuICAgICAgICAgIHZhciBjYWNoZUtleSA9IGNvbXBvbmVudE5hbWUgKyAnOicgKyBwcm9wTmFtZTtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAhbWFudWFsUHJvcFR5cGVDYWxsQ2FjaGVbY2FjaGVLZXldICYmXG4gICAgICAgICAgICAvLyBBdm9pZCBzcGFtbWluZyB0aGUgY29uc29sZSBiZWNhdXNlIHRoZXkgYXJlIG9mdGVuIG5vdCBhY3Rpb25hYmxlIGV4Y2VwdCBmb3IgbGliIGF1dGhvcnNcbiAgICAgICAgICAgIG1hbnVhbFByb3BUeXBlV2FybmluZ0NvdW50IDwgM1xuICAgICAgICAgICkge1xuICAgICAgICAgICAgd2FybmluZyhcbiAgICAgICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgICAgICdZb3UgYXJlIG1hbnVhbGx5IGNhbGxpbmcgYSBSZWFjdC5Qcm9wVHlwZXMgdmFsaWRhdGlvbiAnICtcbiAgICAgICAgICAgICAgJ2Z1bmN0aW9uIGZvciB0aGUgYCVzYCBwcm9wIG9uIGAlc2AuIFRoaXMgaXMgZGVwcmVjYXRlZCAnICtcbiAgICAgICAgICAgICAgJ2FuZCB3aWxsIHRocm93IGluIHRoZSBzdGFuZGFsb25lIGBwcm9wLXR5cGVzYCBwYWNrYWdlLiAnICtcbiAgICAgICAgICAgICAgJ1lvdSBtYXkgYmUgc2VlaW5nIHRoaXMgd2FybmluZyBkdWUgdG8gYSB0aGlyZC1wYXJ0eSBQcm9wVHlwZXMgJyArXG4gICAgICAgICAgICAgICdsaWJyYXJ5LiBTZWUgaHR0cHM6Ly9mYi5tZS9yZWFjdC13YXJuaW5nLWRvbnQtY2FsbC1wcm9wdHlwZXMgJyArICdmb3IgZGV0YWlscy4nLFxuICAgICAgICAgICAgICBwcm9wRnVsbE5hbWUsXG4gICAgICAgICAgICAgIGNvbXBvbmVudE5hbWVcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBtYW51YWxQcm9wVHlwZUNhbGxDYWNoZVtjYWNoZUtleV0gPSB0cnVlO1xuICAgICAgICAgICAgbWFudWFsUHJvcFR5cGVXYXJuaW5nQ291bnQrKztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChwcm9wc1twcm9wTmFtZV0gPT0gbnVsbCkge1xuICAgICAgICBpZiAoaXNSZXF1aXJlZCkge1xuICAgICAgICAgIGlmIChwcm9wc1twcm9wTmFtZV0gPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignVGhlICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBpcyBtYXJrZWQgYXMgcmVxdWlyZWQgJyArICgnaW4gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGJ1dCBpdHMgdmFsdWUgaXMgYG51bGxgLicpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdUaGUgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIGlzIG1hcmtlZCBhcyByZXF1aXJlZCBpbiAnICsgKCdgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgYnV0IGl0cyB2YWx1ZSBpcyBgdW5kZWZpbmVkYC4nKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgY2hhaW5lZENoZWNrVHlwZSA9IGNoZWNrVHlwZS5iaW5kKG51bGwsIGZhbHNlKTtcbiAgICBjaGFpbmVkQ2hlY2tUeXBlLmlzUmVxdWlyZWQgPSBjaGVja1R5cGUuYmluZChudWxsLCB0cnVlKTtcblxuICAgIHJldHVybiBjaGFpbmVkQ2hlY2tUeXBlO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoZXhwZWN0ZWRUeXBlKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lLCBzZWNyZXQpIHtcbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgICAgaWYgKHByb3BUeXBlICE9PSBleHBlY3RlZFR5cGUpIHtcbiAgICAgICAgLy8gYHByb3BWYWx1ZWAgYmVpbmcgaW5zdGFuY2Ugb2YsIHNheSwgZGF0ZS9yZWdleHAsIHBhc3MgdGhlICdvYmplY3QnXG4gICAgICAgIC8vIGNoZWNrLCBidXQgd2UgY2FuIG9mZmVyIGEgbW9yZSBwcmVjaXNlIGVycm9yIG1lc3NhZ2UgaGVyZSByYXRoZXIgdGhhblxuICAgICAgICAvLyAnb2YgdHlwZSBgb2JqZWN0YCcuXG4gICAgICAgIHZhciBwcmVjaXNlVHlwZSA9IGdldFByZWNpc2VUeXBlKHByb3BWYWx1ZSk7XG5cbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlICcgKyAoJ2AnICsgcHJlY2lzZVR5cGUgKyAnYCBzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgJykgKyAoJ2AnICsgZXhwZWN0ZWRUeXBlICsgJ2AuJykpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVBbnlUeXBlQ2hlY2tlcigpIHtcbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIoZW1wdHlGdW5jdGlvbi50aGF0UmV0dXJuc051bGwpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlQXJyYXlPZlR5cGVDaGVja2VyKHR5cGVDaGVja2VyKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICBpZiAodHlwZW9mIHR5cGVDaGVja2VyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignUHJvcGVydHkgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiBjb21wb25lbnQgYCcgKyBjb21wb25lbnROYW1lICsgJ2AgaGFzIGludmFsaWQgUHJvcFR5cGUgbm90YXRpb24gaW5zaWRlIGFycmF5T2YuJyk7XG4gICAgICB9XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHByb3BWYWx1ZSkpIHtcbiAgICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlICcgKyAoJ2AnICsgcHJvcFR5cGUgKyAnYCBzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYW4gYXJyYXkuJykpO1xuICAgICAgfVxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wVmFsdWUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGVycm9yID0gdHlwZUNoZWNrZXIocHJvcFZhbHVlLCBpLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lICsgJ1snICsgaSArICddJywgUmVhY3RQcm9wVHlwZXNTZWNyZXQpO1xuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVFbGVtZW50VHlwZUNoZWNrZXIoKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgaWYgKCFpc1ZhbGlkRWxlbWVudChwcm9wVmFsdWUpKSB7XG4gICAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIHByb3BUeXBlICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGEgc2luZ2xlIFJlYWN0RWxlbWVudC4nKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUluc3RhbmNlVHlwZUNoZWNrZXIoZXhwZWN0ZWRDbGFzcykge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgaWYgKCEocHJvcHNbcHJvcE5hbWVdIGluc3RhbmNlb2YgZXhwZWN0ZWRDbGFzcykpIHtcbiAgICAgICAgdmFyIGV4cGVjdGVkQ2xhc3NOYW1lID0gZXhwZWN0ZWRDbGFzcy5uYW1lIHx8IEFOT05ZTU9VUztcbiAgICAgICAgdmFyIGFjdHVhbENsYXNzTmFtZSA9IGdldENsYXNzTmFtZShwcm9wc1twcm9wTmFtZV0pO1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBhY3R1YWxDbGFzc05hbWUgKyAnYCBzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgJykgKyAoJ2luc3RhbmNlIG9mIGAnICsgZXhwZWN0ZWRDbGFzc05hbWUgKyAnYC4nKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUVudW1UeXBlQ2hlY2tlcihleHBlY3RlZFZhbHVlcykge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShleHBlY3RlZFZhbHVlcykpIHtcbiAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKGZhbHNlLCAnSW52YWxpZCBhcmd1bWVudCBzdXBwbGllZCB0byBvbmVPZiwgZXhwZWN0ZWQgYW4gaW5zdGFuY2Ugb2YgYXJyYXkuJykgOiB2b2lkIDA7XG4gICAgICByZXR1cm4gZW1wdHlGdW5jdGlvbi50aGF0UmV0dXJuc051bGw7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBleHBlY3RlZFZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoaXMocHJvcFZhbHVlLCBleHBlY3RlZFZhbHVlc1tpXSkpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgdmFsdWVzU3RyaW5nID0gSlNPTi5zdHJpbmdpZnkoZXhwZWN0ZWRWYWx1ZXMpO1xuICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB2YWx1ZSBgJyArIHByb3BWYWx1ZSArICdgICcgKyAoJ3N1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBvbmUgb2YgJyArIHZhbHVlc1N0cmluZyArICcuJykpO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlT2JqZWN0T2ZUeXBlQ2hlY2tlcih0eXBlQ2hlY2tlcikge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgaWYgKHR5cGVvZiB0eXBlQ2hlY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ1Byb3BlcnR5IGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgY29tcG9uZW50IGAnICsgY29tcG9uZW50TmFtZSArICdgIGhhcyBpbnZhbGlkIFByb3BUeXBlIG5vdGF0aW9uIGluc2lkZSBvYmplY3RPZi4nKTtcbiAgICAgIH1cbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgICAgaWYgKHByb3BUeXBlICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBwcm9wVHlwZSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBhbiBvYmplY3QuJykpO1xuICAgICAgfVxuICAgICAgZm9yICh2YXIga2V5IGluIHByb3BWYWx1ZSkge1xuICAgICAgICBpZiAocHJvcFZhbHVlLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgICB2YXIgZXJyb3IgPSB0eXBlQ2hlY2tlcihwcm9wVmFsdWUsIGtleSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSArICcuJyArIGtleSwgUmVhY3RQcm9wVHlwZXNTZWNyZXQpO1xuICAgICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZVVuaW9uVHlwZUNoZWNrZXIoYXJyYXlPZlR5cGVDaGVja2Vycykge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShhcnJheU9mVHlwZUNoZWNrZXJzKSkge1xuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcoZmFsc2UsICdJbnZhbGlkIGFyZ3VtZW50IHN1cHBsaWVkIHRvIG9uZU9mVHlwZSwgZXhwZWN0ZWQgYW4gaW5zdGFuY2Ugb2YgYXJyYXkuJykgOiB2b2lkIDA7XG4gICAgICByZXR1cm4gZW1wdHlGdW5jdGlvbi50aGF0UmV0dXJuc051bGw7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheU9mVHlwZUNoZWNrZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgY2hlY2tlciA9IGFycmF5T2ZUeXBlQ2hlY2tlcnNbaV07XG4gICAgICBpZiAodHlwZW9mIGNoZWNrZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgd2FybmluZyhcbiAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAnSW52YWxpZCBhcmd1bWVudCBzdXBwbGlkIHRvIG9uZU9mVHlwZS4gRXhwZWN0ZWQgYW4gYXJyYXkgb2YgY2hlY2sgZnVuY3Rpb25zLCBidXQgJyArXG4gICAgICAgICAgJ3JlY2VpdmVkICVzIGF0IGluZGV4ICVzLicsXG4gICAgICAgICAgZ2V0UG9zdGZpeEZvclR5cGVXYXJuaW5nKGNoZWNrZXIpLFxuICAgICAgICAgIGlcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIGVtcHR5RnVuY3Rpb24udGhhdFJldHVybnNOdWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheU9mVHlwZUNoZWNrZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBjaGVja2VyID0gYXJyYXlPZlR5cGVDaGVja2Vyc1tpXTtcbiAgICAgICAgaWYgKGNoZWNrZXIocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lLCBSZWFjdFByb3BUeXBlc1NlY3JldCkgPT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agc3VwcGxpZWQgdG8gJyArICgnYCcgKyBjb21wb25lbnROYW1lICsgJ2AuJykpO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlTm9kZUNoZWNrZXIoKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICBpZiAoIWlzTm9kZShwcm9wc1twcm9wTmFtZV0pKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agc3VwcGxpZWQgdG8gJyArICgnYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGEgUmVhY3ROb2RlLicpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlU2hhcGVUeXBlQ2hlY2tlcihzaGFwZVR5cGVzKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICAgIGlmIChwcm9wVHlwZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlIGAnICsgcHJvcFR5cGUgKyAnYCAnICsgKCdzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYG9iamVjdGAuJykpO1xuICAgICAgfVxuICAgICAgZm9yICh2YXIga2V5IGluIHNoYXBlVHlwZXMpIHtcbiAgICAgICAgdmFyIGNoZWNrZXIgPSBzaGFwZVR5cGVzW2tleV07XG4gICAgICAgIGlmICghY2hlY2tlcikge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHZhciBlcnJvciA9IGNoZWNrZXIocHJvcFZhbHVlLCBrZXksIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUgKyAnLicgKyBrZXksIFJlYWN0UHJvcFR5cGVzU2VjcmV0KTtcbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzTm9kZShwcm9wVmFsdWUpIHtcbiAgICBzd2l0Y2ggKHR5cGVvZiBwcm9wVmFsdWUpIHtcbiAgICAgIGNhc2UgJ251bWJlcic6XG4gICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgY2FzZSAndW5kZWZpbmVkJzpcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICBjYXNlICdib29sZWFuJzpcbiAgICAgICAgcmV0dXJuICFwcm9wVmFsdWU7XG4gICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShwcm9wVmFsdWUpKSB7XG4gICAgICAgICAgcmV0dXJuIHByb3BWYWx1ZS5ldmVyeShpc05vZGUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcm9wVmFsdWUgPT09IG51bGwgfHwgaXNWYWxpZEVsZW1lbnQocHJvcFZhbHVlKSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGl0ZXJhdG9yRm4gPSBnZXRJdGVyYXRvckZuKHByb3BWYWx1ZSk7XG4gICAgICAgIGlmIChpdGVyYXRvckZuKSB7XG4gICAgICAgICAgdmFyIGl0ZXJhdG9yID0gaXRlcmF0b3JGbi5jYWxsKHByb3BWYWx1ZSk7XG4gICAgICAgICAgdmFyIHN0ZXA7XG4gICAgICAgICAgaWYgKGl0ZXJhdG9yRm4gIT09IHByb3BWYWx1ZS5lbnRyaWVzKSB7XG4gICAgICAgICAgICB3aGlsZSAoIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lKSB7XG4gICAgICAgICAgICAgIGlmICghaXNOb2RlKHN0ZXAudmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIEl0ZXJhdG9yIHdpbGwgcHJvdmlkZSBlbnRyeSBbayx2XSB0dXBsZXMgcmF0aGVyIHRoYW4gdmFsdWVzLlxuICAgICAgICAgICAgd2hpbGUgKCEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZSkge1xuICAgICAgICAgICAgICB2YXIgZW50cnkgPSBzdGVwLnZhbHVlO1xuICAgICAgICAgICAgICBpZiAoZW50cnkpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWlzTm9kZShlbnRyeVsxXSkpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaXNTeW1ib2wocHJvcFR5cGUsIHByb3BWYWx1ZSkge1xuICAgIC8vIE5hdGl2ZSBTeW1ib2wuXG4gICAgaWYgKHByb3BUeXBlID09PSAnc3ltYm9sJykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gMTkuNC4zLjUgU3ltYm9sLnByb3RvdHlwZVtAQHRvU3RyaW5nVGFnXSA9PT0gJ1N5bWJvbCdcbiAgICBpZiAocHJvcFZhbHVlWydAQHRvU3RyaW5nVGFnJ10gPT09ICdTeW1ib2wnKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBGYWxsYmFjayBmb3Igbm9uLXNwZWMgY29tcGxpYW50IFN5bWJvbHMgd2hpY2ggYXJlIHBvbHlmaWxsZWQuXG4gICAgaWYgKHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgcHJvcFZhbHVlIGluc3RhbmNlb2YgU3ltYm9sKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBFcXVpdmFsZW50IG9mIGB0eXBlb2ZgIGJ1dCB3aXRoIHNwZWNpYWwgaGFuZGxpbmcgZm9yIGFycmF5IGFuZCByZWdleHAuXG4gIGZ1bmN0aW9uIGdldFByb3BUeXBlKHByb3BWYWx1ZSkge1xuICAgIHZhciBwcm9wVHlwZSA9IHR5cGVvZiBwcm9wVmFsdWU7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkocHJvcFZhbHVlKSkge1xuICAgICAgcmV0dXJuICdhcnJheSc7XG4gICAgfVxuICAgIGlmIChwcm9wVmFsdWUgaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgIC8vIE9sZCB3ZWJraXRzIChhdCBsZWFzdCB1bnRpbCBBbmRyb2lkIDQuMCkgcmV0dXJuICdmdW5jdGlvbicgcmF0aGVyIHRoYW5cbiAgICAgIC8vICdvYmplY3QnIGZvciB0eXBlb2YgYSBSZWdFeHAuIFdlJ2xsIG5vcm1hbGl6ZSB0aGlzIGhlcmUgc28gdGhhdCAvYmxhL1xuICAgICAgLy8gcGFzc2VzIFByb3BUeXBlcy5vYmplY3QuXG4gICAgICByZXR1cm4gJ29iamVjdCc7XG4gICAgfVxuICAgIGlmIChpc1N5bWJvbChwcm9wVHlwZSwgcHJvcFZhbHVlKSkge1xuICAgICAgcmV0dXJuICdzeW1ib2wnO1xuICAgIH1cbiAgICByZXR1cm4gcHJvcFR5cGU7XG4gIH1cblxuICAvLyBUaGlzIGhhbmRsZXMgbW9yZSB0eXBlcyB0aGFuIGBnZXRQcm9wVHlwZWAuIE9ubHkgdXNlZCBmb3IgZXJyb3IgbWVzc2FnZXMuXG4gIC8vIFNlZSBgY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXJgLlxuICBmdW5jdGlvbiBnZXRQcmVjaXNlVHlwZShwcm9wVmFsdWUpIHtcbiAgICBpZiAodHlwZW9mIHByb3BWYWx1ZSA9PT0gJ3VuZGVmaW5lZCcgfHwgcHJvcFZhbHVlID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gJycgKyBwcm9wVmFsdWU7XG4gICAgfVxuICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XG4gICAgaWYgKHByb3BUeXBlID09PSAnb2JqZWN0Jykge1xuICAgICAgaWYgKHByb3BWYWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgcmV0dXJuICdkYXRlJztcbiAgICAgIH0gZWxzZSBpZiAocHJvcFZhbHVlIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICAgIHJldHVybiAncmVnZXhwJztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHByb3BUeXBlO1xuICB9XG5cbiAgLy8gUmV0dXJucyBhIHN0cmluZyB0aGF0IGlzIHBvc3RmaXhlZCB0byBhIHdhcm5pbmcgYWJvdXQgYW4gaW52YWxpZCB0eXBlLlxuICAvLyBGb3IgZXhhbXBsZSwgXCJ1bmRlZmluZWRcIiBvciBcIm9mIHR5cGUgYXJyYXlcIlxuICBmdW5jdGlvbiBnZXRQb3N0Zml4Rm9yVHlwZVdhcm5pbmcodmFsdWUpIHtcbiAgICB2YXIgdHlwZSA9IGdldFByZWNpc2VUeXBlKHZhbHVlKTtcbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgJ2FycmF5JzpcbiAgICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICAgIHJldHVybiAnYW4gJyArIHR5cGU7XG4gICAgICBjYXNlICdib29sZWFuJzpcbiAgICAgIGNhc2UgJ2RhdGUnOlxuICAgICAgY2FzZSAncmVnZXhwJzpcbiAgICAgICAgcmV0dXJuICdhICcgKyB0eXBlO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHR5cGU7XG4gICAgfVxuICB9XG5cbiAgLy8gUmV0dXJucyBjbGFzcyBuYW1lIG9mIHRoZSBvYmplY3QsIGlmIGFueS5cbiAgZnVuY3Rpb24gZ2V0Q2xhc3NOYW1lKHByb3BWYWx1ZSkge1xuICAgIGlmICghcHJvcFZhbHVlLmNvbnN0cnVjdG9yIHx8ICFwcm9wVmFsdWUuY29uc3RydWN0b3IubmFtZSkge1xuICAgICAgcmV0dXJuIEFOT05ZTU9VUztcbiAgICB9XG4gICAgcmV0dXJuIHByb3BWYWx1ZS5jb25zdHJ1Y3Rvci5uYW1lO1xuICB9XG5cbiAgUmVhY3RQcm9wVHlwZXMuY2hlY2tQcm9wVHlwZXMgPSBjaGVja1Byb3BUeXBlcztcbiAgUmVhY3RQcm9wVHlwZXMuUHJvcFR5cGVzID0gUmVhY3RQcm9wVHlwZXM7XG5cbiAgcmV0dXJuIFJlYWN0UHJvcFR5cGVzO1xufTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcHJvcC10eXBlcy9mYWN0b3J5V2l0aFR5cGVDaGVja2Vycy5qcyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbi8qKlxuICogQ1NTIHByb3BlcnRpZXMgd2hpY2ggYWNjZXB0IG51bWJlcnMgYnV0IGFyZSBub3QgaW4gdW5pdHMgb2YgXCJweFwiLlxuICovXG5cbnZhciBpc1VuaXRsZXNzTnVtYmVyID0ge1xuICBhbmltYXRpb25JdGVyYXRpb25Db3VudDogdHJ1ZSxcbiAgYm9yZGVySW1hZ2VPdXRzZXQ6IHRydWUsXG4gIGJvcmRlckltYWdlU2xpY2U6IHRydWUsXG4gIGJvcmRlckltYWdlV2lkdGg6IHRydWUsXG4gIGJveEZsZXg6IHRydWUsXG4gIGJveEZsZXhHcm91cDogdHJ1ZSxcbiAgYm94T3JkaW5hbEdyb3VwOiB0cnVlLFxuICBjb2x1bW5Db3VudDogdHJ1ZSxcbiAgZmxleDogdHJ1ZSxcbiAgZmxleEdyb3c6IHRydWUsXG4gIGZsZXhQb3NpdGl2ZTogdHJ1ZSxcbiAgZmxleFNocmluazogdHJ1ZSxcbiAgZmxleE5lZ2F0aXZlOiB0cnVlLFxuICBmbGV4T3JkZXI6IHRydWUsXG4gIGdyaWRSb3c6IHRydWUsXG4gIGdyaWRSb3dFbmQ6IHRydWUsXG4gIGdyaWRSb3dTcGFuOiB0cnVlLFxuICBncmlkUm93U3RhcnQ6IHRydWUsXG4gIGdyaWRDb2x1bW46IHRydWUsXG4gIGdyaWRDb2x1bW5FbmQ6IHRydWUsXG4gIGdyaWRDb2x1bW5TcGFuOiB0cnVlLFxuICBncmlkQ29sdW1uU3RhcnQ6IHRydWUsXG4gIGZvbnRXZWlnaHQ6IHRydWUsXG4gIGxpbmVDbGFtcDogdHJ1ZSxcbiAgbGluZUhlaWdodDogdHJ1ZSxcbiAgb3BhY2l0eTogdHJ1ZSxcbiAgb3JkZXI6IHRydWUsXG4gIG9ycGhhbnM6IHRydWUsXG4gIHRhYlNpemU6IHRydWUsXG4gIHdpZG93czogdHJ1ZSxcbiAgekluZGV4OiB0cnVlLFxuICB6b29tOiB0cnVlLFxuXG4gIC8vIFNWRy1yZWxhdGVkIHByb3BlcnRpZXNcbiAgZmlsbE9wYWNpdHk6IHRydWUsXG4gIGZsb29kT3BhY2l0eTogdHJ1ZSxcbiAgc3RvcE9wYWNpdHk6IHRydWUsXG4gIHN0cm9rZURhc2hhcnJheTogdHJ1ZSxcbiAgc3Ryb2tlRGFzaG9mZnNldDogdHJ1ZSxcbiAgc3Ryb2tlTWl0ZXJsaW1pdDogdHJ1ZSxcbiAgc3Ryb2tlT3BhY2l0eTogdHJ1ZSxcbiAgc3Ryb2tlV2lkdGg6IHRydWVcbn07XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHByZWZpeCB2ZW5kb3Itc3BlY2lmaWMgcHJlZml4LCBlZzogV2Via2l0XG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IHN0eWxlIG5hbWUsIGVnOiB0cmFuc2l0aW9uRHVyYXRpb25cbiAqIEByZXR1cm4ge3N0cmluZ30gc3R5bGUgbmFtZSBwcmVmaXhlZCB3aXRoIGBwcmVmaXhgLCBwcm9wZXJseSBjYW1lbENhc2VkLCBlZzpcbiAqIFdlYmtpdFRyYW5zaXRpb25EdXJhdGlvblxuICovXG5mdW5jdGlvbiBwcmVmaXhLZXkocHJlZml4LCBrZXkpIHtcbiAgcmV0dXJuIHByZWZpeCArIGtleS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIGtleS5zdWJzdHJpbmcoMSk7XG59XG5cbi8qKlxuICogU3VwcG9ydCBzdHlsZSBuYW1lcyB0aGF0IG1heSBjb21lIHBhc3NlZCBpbiBwcmVmaXhlZCBieSBhZGRpbmcgcGVybXV0YXRpb25zXG4gKiBvZiB2ZW5kb3IgcHJlZml4ZXMuXG4gKi9cbnZhciBwcmVmaXhlcyA9IFsnV2Via2l0JywgJ21zJywgJ01veicsICdPJ107XG5cbi8vIFVzaW5nIE9iamVjdC5rZXlzIGhlcmUsIG9yIGVsc2UgdGhlIHZhbmlsbGEgZm9yLWluIGxvb3AgbWFrZXMgSUU4IGdvIGludG8gYW5cbi8vIGluZmluaXRlIGxvb3AsIGJlY2F1c2UgaXQgaXRlcmF0ZXMgb3ZlciB0aGUgbmV3bHkgYWRkZWQgcHJvcHMgdG9vLlxuT2JqZWN0LmtleXMoaXNVbml0bGVzc051bWJlcikuZm9yRWFjaChmdW5jdGlvbiAocHJvcCkge1xuICBwcmVmaXhlcy5mb3JFYWNoKGZ1bmN0aW9uIChwcmVmaXgpIHtcbiAgICBpc1VuaXRsZXNzTnVtYmVyW3ByZWZpeEtleShwcmVmaXgsIHByb3ApXSA9IGlzVW5pdGxlc3NOdW1iZXJbcHJvcF07XG4gIH0pO1xufSk7XG5cbi8qKlxuICogTW9zdCBzdHlsZSBwcm9wZXJ0aWVzIGNhbiBiZSB1bnNldCBieSBkb2luZyAuc3R5bGVbcHJvcF0gPSAnJyBidXQgSUU4XG4gKiBkb2Vzbid0IGxpa2UgZG9pbmcgdGhhdCB3aXRoIHNob3J0aGFuZCBwcm9wZXJ0aWVzIHNvIGZvciB0aGUgcHJvcGVydGllcyB0aGF0XG4gKiBJRTggYnJlYWtzIG9uLCB3aGljaCBhcmUgbGlzdGVkIGhlcmUsIHdlIGluc3RlYWQgdW5zZXQgZWFjaCBvZiB0aGVcbiAqIGluZGl2aWR1YWwgcHJvcGVydGllcy4gU2VlIGh0dHA6Ly9idWdzLmpxdWVyeS5jb20vdGlja2V0LzEyMzg1LlxuICogVGhlIDQtdmFsdWUgJ2Nsb2NrJyBwcm9wZXJ0aWVzIGxpa2UgbWFyZ2luLCBwYWRkaW5nLCBib3JkZXItd2lkdGggc2VlbSB0b1xuICogYmVoYXZlIHdpdGhvdXQgYW55IHByb2JsZW1zLiBDdXJpb3VzbHksIGxpc3Qtc3R5bGUgd29ya3MgdG9vIHdpdGhvdXQgYW55XG4gKiBzcGVjaWFsIHByb2RkaW5nLlxuICovXG52YXIgc2hvcnRoYW5kUHJvcGVydHlFeHBhbnNpb25zID0ge1xuICBiYWNrZ3JvdW5kOiB7XG4gICAgYmFja2dyb3VuZEF0dGFjaG1lbnQ6IHRydWUsXG4gICAgYmFja2dyb3VuZENvbG9yOiB0cnVlLFxuICAgIGJhY2tncm91bmRJbWFnZTogdHJ1ZSxcbiAgICBiYWNrZ3JvdW5kUG9zaXRpb25YOiB0cnVlLFxuICAgIGJhY2tncm91bmRQb3NpdGlvblk6IHRydWUsXG4gICAgYmFja2dyb3VuZFJlcGVhdDogdHJ1ZVxuICB9LFxuICBiYWNrZ3JvdW5kUG9zaXRpb246IHtcbiAgICBiYWNrZ3JvdW5kUG9zaXRpb25YOiB0cnVlLFxuICAgIGJhY2tncm91bmRQb3NpdGlvblk6IHRydWVcbiAgfSxcbiAgYm9yZGVyOiB7XG4gICAgYm9yZGVyV2lkdGg6IHRydWUsXG4gICAgYm9yZGVyU3R5bGU6IHRydWUsXG4gICAgYm9yZGVyQ29sb3I6IHRydWVcbiAgfSxcbiAgYm9yZGVyQm90dG9tOiB7XG4gICAgYm9yZGVyQm90dG9tV2lkdGg6IHRydWUsXG4gICAgYm9yZGVyQm90dG9tU3R5bGU6IHRydWUsXG4gICAgYm9yZGVyQm90dG9tQ29sb3I6IHRydWVcbiAgfSxcbiAgYm9yZGVyTGVmdDoge1xuICAgIGJvcmRlckxlZnRXaWR0aDogdHJ1ZSxcbiAgICBib3JkZXJMZWZ0U3R5bGU6IHRydWUsXG4gICAgYm9yZGVyTGVmdENvbG9yOiB0cnVlXG4gIH0sXG4gIGJvcmRlclJpZ2h0OiB7XG4gICAgYm9yZGVyUmlnaHRXaWR0aDogdHJ1ZSxcbiAgICBib3JkZXJSaWdodFN0eWxlOiB0cnVlLFxuICAgIGJvcmRlclJpZ2h0Q29sb3I6IHRydWVcbiAgfSxcbiAgYm9yZGVyVG9wOiB7XG4gICAgYm9yZGVyVG9wV2lkdGg6IHRydWUsXG4gICAgYm9yZGVyVG9wU3R5bGU6IHRydWUsXG4gICAgYm9yZGVyVG9wQ29sb3I6IHRydWVcbiAgfSxcbiAgZm9udDoge1xuICAgIGZvbnRTdHlsZTogdHJ1ZSxcbiAgICBmb250VmFyaWFudDogdHJ1ZSxcbiAgICBmb250V2VpZ2h0OiB0cnVlLFxuICAgIGZvbnRTaXplOiB0cnVlLFxuICAgIGxpbmVIZWlnaHQ6IHRydWUsXG4gICAgZm9udEZhbWlseTogdHJ1ZVxuICB9LFxuICBvdXRsaW5lOiB7XG4gICAgb3V0bGluZVdpZHRoOiB0cnVlLFxuICAgIG91dGxpbmVTdHlsZTogdHJ1ZSxcbiAgICBvdXRsaW5lQ29sb3I6IHRydWVcbiAgfVxufTtcblxudmFyIENTU1Byb3BlcnR5ID0ge1xuICBpc1VuaXRsZXNzTnVtYmVyOiBpc1VuaXRsZXNzTnVtYmVyLFxuICBzaG9ydGhhbmRQcm9wZXJ0eUV4cGFuc2lvbnM6IHNob3J0aGFuZFByb3BlcnR5RXhwYW5zaW9uc1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBDU1NQcm9wZXJ0eTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3JlYWN0LWRvbS9saWIvQ1NTUHJvcGVydHkuanMiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBfcHJvZEludmFyaWFudCA9IHJlcXVpcmUoJy4vcmVhY3RQcm9kSW52YXJpYW50Jyk7XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbnZhciBQb29sZWRDbGFzcyA9IHJlcXVpcmUoJy4vUG9vbGVkQ2xhc3MnKTtcblxudmFyIGludmFyaWFudCA9IHJlcXVpcmUoJ2ZianMvbGliL2ludmFyaWFudCcpO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgcHNldWRvLWV2ZW50IG1vZHVsZSB0byBoZWxwIGtlZXAgdHJhY2sgb2YgY29tcG9uZW50cyB3YWl0aW5nIHRvXG4gKiBiZSBub3RpZmllZCB3aGVuIHRoZWlyIERPTSByZXByZXNlbnRhdGlvbnMgYXJlIGF2YWlsYWJsZSBmb3IgdXNlLlxuICpcbiAqIFRoaXMgaW1wbGVtZW50cyBgUG9vbGVkQ2xhc3NgLCBzbyB5b3Ugc2hvdWxkIG5ldmVyIG5lZWQgdG8gaW5zdGFudGlhdGUgdGhpcy5cbiAqIEluc3RlYWQsIHVzZSBgQ2FsbGJhY2tRdWV1ZS5nZXRQb29sZWQoKWAuXG4gKlxuICogQGNsYXNzIFJlYWN0TW91bnRSZWFkeVxuICogQGltcGxlbWVudHMgUG9vbGVkQ2xhc3NcbiAqIEBpbnRlcm5hbFxuICovXG5cbnZhciBDYWxsYmFja1F1ZXVlID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBDYWxsYmFja1F1ZXVlKGFyZykge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBDYWxsYmFja1F1ZXVlKTtcblxuICAgIHRoaXMuX2NhbGxiYWNrcyA9IG51bGw7XG4gICAgdGhpcy5fY29udGV4dHMgPSBudWxsO1xuICAgIHRoaXMuX2FyZyA9IGFyZztcbiAgfVxuXG4gIC8qKlxuICAgKiBFbnF1ZXVlcyBhIGNhbGxiYWNrIHRvIGJlIGludm9rZWQgd2hlbiBgbm90aWZ5QWxsYCBpcyBpbnZva2VkLlxuICAgKlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayBJbnZva2VkIHdoZW4gYG5vdGlmeUFsbGAgaXMgaW52b2tlZC5cbiAgICogQHBhcmFtIHs/b2JqZWN0fSBjb250ZXh0IENvbnRleHQgdG8gY2FsbCBgY2FsbGJhY2tgIHdpdGguXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cblxuXG4gIENhbGxiYWNrUXVldWUucHJvdG90eXBlLmVucXVldWUgPSBmdW5jdGlvbiBlbnF1ZXVlKGNhbGxiYWNrLCBjb250ZXh0KSB7XG4gICAgdGhpcy5fY2FsbGJhY2tzID0gdGhpcy5fY2FsbGJhY2tzIHx8IFtdO1xuICAgIHRoaXMuX2NhbGxiYWNrcy5wdXNoKGNhbGxiYWNrKTtcbiAgICB0aGlzLl9jb250ZXh0cyA9IHRoaXMuX2NvbnRleHRzIHx8IFtdO1xuICAgIHRoaXMuX2NvbnRleHRzLnB1c2goY29udGV4dCk7XG4gIH07XG5cbiAgLyoqXG4gICAqIEludm9rZXMgYWxsIGVucXVldWVkIGNhbGxiYWNrcyBhbmQgY2xlYXJzIHRoZSBxdWV1ZS4gVGhpcyBpcyBpbnZva2VkIGFmdGVyXG4gICAqIHRoZSBET00gcmVwcmVzZW50YXRpb24gb2YgYSBjb21wb25lbnQgaGFzIGJlZW4gY3JlYXRlZCBvciB1cGRhdGVkLlxuICAgKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG5cblxuICBDYWxsYmFja1F1ZXVlLnByb3RvdHlwZS5ub3RpZnlBbGwgPSBmdW5jdGlvbiBub3RpZnlBbGwoKSB7XG4gICAgdmFyIGNhbGxiYWNrcyA9IHRoaXMuX2NhbGxiYWNrcztcbiAgICB2YXIgY29udGV4dHMgPSB0aGlzLl9jb250ZXh0cztcbiAgICB2YXIgYXJnID0gdGhpcy5fYXJnO1xuICAgIGlmIChjYWxsYmFja3MgJiYgY29udGV4dHMpIHtcbiAgICAgICEoY2FsbGJhY2tzLmxlbmd0aCA9PT0gY29udGV4dHMubGVuZ3RoKSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICdNaXNtYXRjaGVkIGxpc3Qgb2YgY29udGV4dHMgaW4gY2FsbGJhY2sgcXVldWUnKSA6IF9wcm9kSW52YXJpYW50KCcyNCcpIDogdm9pZCAwO1xuICAgICAgdGhpcy5fY2FsbGJhY2tzID0gbnVsbDtcbiAgICAgIHRoaXMuX2NvbnRleHRzID0gbnVsbDtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2FsbGJhY2tzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNhbGxiYWNrc1tpXS5jYWxsKGNvbnRleHRzW2ldLCBhcmcpO1xuICAgICAgfVxuICAgICAgY2FsbGJhY2tzLmxlbmd0aCA9IDA7XG4gICAgICBjb250ZXh0cy5sZW5ndGggPSAwO1xuICAgIH1cbiAgfTtcblxuICBDYWxsYmFja1F1ZXVlLnByb3RvdHlwZS5jaGVja3BvaW50ID0gZnVuY3Rpb24gY2hlY2twb2ludCgpIHtcbiAgICByZXR1cm4gdGhpcy5fY2FsbGJhY2tzID8gdGhpcy5fY2FsbGJhY2tzLmxlbmd0aCA6IDA7XG4gIH07XG5cbiAgQ2FsbGJhY2tRdWV1ZS5wcm90b3R5cGUucm9sbGJhY2sgPSBmdW5jdGlvbiByb2xsYmFjayhsZW4pIHtcbiAgICBpZiAodGhpcy5fY2FsbGJhY2tzICYmIHRoaXMuX2NvbnRleHRzKSB7XG4gICAgICB0aGlzLl9jYWxsYmFja3MubGVuZ3RoID0gbGVuO1xuICAgICAgdGhpcy5fY29udGV4dHMubGVuZ3RoID0gbGVuO1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogUmVzZXRzIHRoZSBpbnRlcm5hbCBxdWV1ZS5cbiAgICpcbiAgICogQGludGVybmFsXG4gICAqL1xuXG5cbiAgQ2FsbGJhY2tRdWV1ZS5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiByZXNldCgpIHtcbiAgICB0aGlzLl9jYWxsYmFja3MgPSBudWxsO1xuICAgIHRoaXMuX2NvbnRleHRzID0gbnVsbDtcbiAgfTtcblxuICAvKipcbiAgICogYFBvb2xlZENsYXNzYCBsb29rcyBmb3IgdGhpcy5cbiAgICovXG5cblxuICBDYWxsYmFja1F1ZXVlLnByb3RvdHlwZS5kZXN0cnVjdG9yID0gZnVuY3Rpb24gZGVzdHJ1Y3RvcigpIHtcbiAgICB0aGlzLnJlc2V0KCk7XG4gIH07XG5cbiAgcmV0dXJuIENhbGxiYWNrUXVldWU7XG59KCk7XG5cbm1vZHVsZS5leHBvcnRzID0gUG9vbGVkQ2xhc3MuYWRkUG9vbGluZ1RvKENhbGxiYWNrUXVldWUpO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QtZG9tL2xpYi9DYWxsYmFja1F1ZXVlLmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIERPTVByb3BlcnR5ID0gcmVxdWlyZSgnLi9ET01Qcm9wZXJ0eScpO1xudmFyIFJlYWN0RE9NQ29tcG9uZW50VHJlZSA9IHJlcXVpcmUoJy4vUmVhY3RET01Db21wb25lbnRUcmVlJyk7XG52YXIgUmVhY3RJbnN0cnVtZW50YXRpb24gPSByZXF1aXJlKCcuL1JlYWN0SW5zdHJ1bWVudGF0aW9uJyk7XG5cbnZhciBxdW90ZUF0dHJpYnV0ZVZhbHVlRm9yQnJvd3NlciA9IHJlcXVpcmUoJy4vcXVvdGVBdHRyaWJ1dGVWYWx1ZUZvckJyb3dzZXInKTtcbnZhciB3YXJuaW5nID0gcmVxdWlyZSgnZmJqcy9saWIvd2FybmluZycpO1xuXG52YXIgVkFMSURfQVRUUklCVVRFX05BTUVfUkVHRVggPSBuZXcgUmVnRXhwKCdeWycgKyBET01Qcm9wZXJ0eS5BVFRSSUJVVEVfTkFNRV9TVEFSVF9DSEFSICsgJ11bJyArIERPTVByb3BlcnR5LkFUVFJJQlVURV9OQU1FX0NIQVIgKyAnXSokJyk7XG52YXIgaWxsZWdhbEF0dHJpYnV0ZU5hbWVDYWNoZSA9IHt9O1xudmFyIHZhbGlkYXRlZEF0dHJpYnV0ZU5hbWVDYWNoZSA9IHt9O1xuXG5mdW5jdGlvbiBpc0F0dHJpYnV0ZU5hbWVTYWZlKGF0dHJpYnV0ZU5hbWUpIHtcbiAgaWYgKHZhbGlkYXRlZEF0dHJpYnV0ZU5hbWVDYWNoZS5oYXNPd25Qcm9wZXJ0eShhdHRyaWJ1dGVOYW1lKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmIChpbGxlZ2FsQXR0cmlidXRlTmFtZUNhY2hlLmhhc093blByb3BlcnR5KGF0dHJpYnV0ZU5hbWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChWQUxJRF9BVFRSSUJVVEVfTkFNRV9SRUdFWC50ZXN0KGF0dHJpYnV0ZU5hbWUpKSB7XG4gICAgdmFsaWRhdGVkQXR0cmlidXRlTmFtZUNhY2hlW2F0dHJpYnV0ZU5hbWVdID0gdHJ1ZTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpbGxlZ2FsQXR0cmlidXRlTmFtZUNhY2hlW2F0dHJpYnV0ZU5hbWVdID0gdHJ1ZTtcbiAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcoZmFsc2UsICdJbnZhbGlkIGF0dHJpYnV0ZSBuYW1lOiBgJXNgJywgYXR0cmlidXRlTmFtZSkgOiB2b2lkIDA7XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gc2hvdWxkSWdub3JlVmFsdWUocHJvcGVydHlJbmZvLCB2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgPT0gbnVsbCB8fCBwcm9wZXJ0eUluZm8uaGFzQm9vbGVhblZhbHVlICYmICF2YWx1ZSB8fCBwcm9wZXJ0eUluZm8uaGFzTnVtZXJpY1ZhbHVlICYmIGlzTmFOKHZhbHVlKSB8fCBwcm9wZXJ0eUluZm8uaGFzUG9zaXRpdmVOdW1lcmljVmFsdWUgJiYgdmFsdWUgPCAxIHx8IHByb3BlcnR5SW5mby5oYXNPdmVybG9hZGVkQm9vbGVhblZhbHVlICYmIHZhbHVlID09PSBmYWxzZTtcbn1cblxuLyoqXG4gKiBPcGVyYXRpb25zIGZvciBkZWFsaW5nIHdpdGggRE9NIHByb3BlcnRpZXMuXG4gKi9cbnZhciBET01Qcm9wZXJ0eU9wZXJhdGlvbnMgPSB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIG1hcmt1cCBmb3IgdGhlIElEIHByb3BlcnR5LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gaWQgVW5lc2NhcGVkIElELlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9IE1hcmt1cCBzdHJpbmcuXG4gICAqL1xuICBjcmVhdGVNYXJrdXBGb3JJRDogZnVuY3Rpb24gKGlkKSB7XG4gICAgcmV0dXJuIERPTVByb3BlcnR5LklEX0FUVFJJQlVURV9OQU1FICsgJz0nICsgcXVvdGVBdHRyaWJ1dGVWYWx1ZUZvckJyb3dzZXIoaWQpO1xuICB9LFxuXG4gIHNldEF0dHJpYnV0ZUZvcklEOiBmdW5jdGlvbiAobm9kZSwgaWQpIHtcbiAgICBub2RlLnNldEF0dHJpYnV0ZShET01Qcm9wZXJ0eS5JRF9BVFRSSUJVVEVfTkFNRSwgaWQpO1xuICB9LFxuXG4gIGNyZWF0ZU1hcmt1cEZvclJvb3Q6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gRE9NUHJvcGVydHkuUk9PVF9BVFRSSUJVVEVfTkFNRSArICc9XCJcIic7XG4gIH0sXG5cbiAgc2V0QXR0cmlidXRlRm9yUm9vdDogZnVuY3Rpb24gKG5vZGUpIHtcbiAgICBub2RlLnNldEF0dHJpYnV0ZShET01Qcm9wZXJ0eS5ST09UX0FUVFJJQlVURV9OQU1FLCAnJyk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgbWFya3VwIGZvciBhIHByb3BlcnR5LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICAgKiBAcGFyYW0geyp9IHZhbHVlXG4gICAqIEByZXR1cm4gez9zdHJpbmd9IE1hcmt1cCBzdHJpbmcsIG9yIG51bGwgaWYgdGhlIHByb3BlcnR5IHdhcyBpbnZhbGlkLlxuICAgKi9cbiAgY3JlYXRlTWFya3VwRm9yUHJvcGVydHk6IGZ1bmN0aW9uIChuYW1lLCB2YWx1ZSkge1xuICAgIHZhciBwcm9wZXJ0eUluZm8gPSBET01Qcm9wZXJ0eS5wcm9wZXJ0aWVzLmhhc093blByb3BlcnR5KG5hbWUpID8gRE9NUHJvcGVydHkucHJvcGVydGllc1tuYW1lXSA6IG51bGw7XG4gICAgaWYgKHByb3BlcnR5SW5mbykge1xuICAgICAgaWYgKHNob3VsZElnbm9yZVZhbHVlKHByb3BlcnR5SW5mbywgdmFsdWUpKSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICAgIH1cbiAgICAgIHZhciBhdHRyaWJ1dGVOYW1lID0gcHJvcGVydHlJbmZvLmF0dHJpYnV0ZU5hbWU7XG4gICAgICBpZiAocHJvcGVydHlJbmZvLmhhc0Jvb2xlYW5WYWx1ZSB8fCBwcm9wZXJ0eUluZm8uaGFzT3ZlcmxvYWRlZEJvb2xlYW5WYWx1ZSAmJiB2YWx1ZSA9PT0gdHJ1ZSkge1xuICAgICAgICByZXR1cm4gYXR0cmlidXRlTmFtZSArICc9XCJcIic7XG4gICAgICB9XG4gICAgICByZXR1cm4gYXR0cmlidXRlTmFtZSArICc9JyArIHF1b3RlQXR0cmlidXRlVmFsdWVGb3JCcm93c2VyKHZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKERPTVByb3BlcnR5LmlzQ3VzdG9tQXR0cmlidXRlKG5hbWUpKSB7XG4gICAgICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgICB9XG4gICAgICByZXR1cm4gbmFtZSArICc9JyArIHF1b3RlQXR0cmlidXRlVmFsdWVGb3JCcm93c2VyKHZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH0sXG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgbWFya3VwIGZvciBhIGN1c3RvbSBwcm9wZXJ0eS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICogQHBhcmFtIHsqfSB2YWx1ZVxuICAgKiBAcmV0dXJuIHtzdHJpbmd9IE1hcmt1cCBzdHJpbmcsIG9yIGVtcHR5IHN0cmluZyBpZiB0aGUgcHJvcGVydHkgd2FzIGludmFsaWQuXG4gICAqL1xuICBjcmVhdGVNYXJrdXBGb3JDdXN0b21BdHRyaWJ1dGU6IGZ1bmN0aW9uIChuYW1lLCB2YWx1ZSkge1xuICAgIGlmICghaXNBdHRyaWJ1dGVOYW1lU2FmZShuYW1lKSB8fCB2YWx1ZSA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIHJldHVybiBuYW1lICsgJz0nICsgcXVvdGVBdHRyaWJ1dGVWYWx1ZUZvckJyb3dzZXIodmFsdWUpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSB2YWx1ZSBmb3IgYSBwcm9wZXJ0eSBvbiBhIG5vZGUuXG4gICAqXG4gICAqIEBwYXJhbSB7RE9NRWxlbWVudH0gbm9kZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICAgKiBAcGFyYW0geyp9IHZhbHVlXG4gICAqL1xuICBzZXRWYWx1ZUZvclByb3BlcnR5OiBmdW5jdGlvbiAobm9kZSwgbmFtZSwgdmFsdWUpIHtcbiAgICB2YXIgcHJvcGVydHlJbmZvID0gRE9NUHJvcGVydHkucHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eShuYW1lKSA/IERPTVByb3BlcnR5LnByb3BlcnRpZXNbbmFtZV0gOiBudWxsO1xuICAgIGlmIChwcm9wZXJ0eUluZm8pIHtcbiAgICAgIHZhciBtdXRhdGlvbk1ldGhvZCA9IHByb3BlcnR5SW5mby5tdXRhdGlvbk1ldGhvZDtcbiAgICAgIGlmIChtdXRhdGlvbk1ldGhvZCkge1xuICAgICAgICBtdXRhdGlvbk1ldGhvZChub2RlLCB2YWx1ZSk7XG4gICAgICB9IGVsc2UgaWYgKHNob3VsZElnbm9yZVZhbHVlKHByb3BlcnR5SW5mbywgdmFsdWUpKSB7XG4gICAgICAgIHRoaXMuZGVsZXRlVmFsdWVGb3JQcm9wZXJ0eShub2RlLCBuYW1lKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSBlbHNlIGlmIChwcm9wZXJ0eUluZm8ubXVzdFVzZVByb3BlcnR5KSB7XG4gICAgICAgIC8vIENvbnRyYXJ5IHRvIGBzZXRBdHRyaWJ1dGVgLCBvYmplY3QgcHJvcGVydGllcyBhcmUgcHJvcGVybHlcbiAgICAgICAgLy8gYHRvU3RyaW5nYGVkIGJ5IElFOC85LlxuICAgICAgICBub2RlW3Byb3BlcnR5SW5mby5wcm9wZXJ0eU5hbWVdID0gdmFsdWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgYXR0cmlidXRlTmFtZSA9IHByb3BlcnR5SW5mby5hdHRyaWJ1dGVOYW1lO1xuICAgICAgICB2YXIgbmFtZXNwYWNlID0gcHJvcGVydHlJbmZvLmF0dHJpYnV0ZU5hbWVzcGFjZTtcbiAgICAgICAgLy8gYHNldEF0dHJpYnV0ZWAgd2l0aCBvYmplY3RzIGJlY29tZXMgb25seSBgW29iamVjdF1gIGluIElFOC85LFxuICAgICAgICAvLyAoJycgKyB2YWx1ZSkgbWFrZXMgaXQgb3V0cHV0IHRoZSBjb3JyZWN0IHRvU3RyaW5nKCktdmFsdWUuXG4gICAgICAgIGlmIChuYW1lc3BhY2UpIHtcbiAgICAgICAgICBub2RlLnNldEF0dHJpYnV0ZU5TKG5hbWVzcGFjZSwgYXR0cmlidXRlTmFtZSwgJycgKyB2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAocHJvcGVydHlJbmZvLmhhc0Jvb2xlYW5WYWx1ZSB8fCBwcm9wZXJ0eUluZm8uaGFzT3ZlcmxvYWRlZEJvb2xlYW5WYWx1ZSAmJiB2YWx1ZSA9PT0gdHJ1ZSkge1xuICAgICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUsICcnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBub2RlLnNldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lLCAnJyArIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoRE9NUHJvcGVydHkuaXNDdXN0b21BdHRyaWJ1dGUobmFtZSkpIHtcbiAgICAgIERPTVByb3BlcnR5T3BlcmF0aW9ucy5zZXRWYWx1ZUZvckF0dHJpYnV0ZShub2RlLCBuYW1lLCB2YWx1ZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIHZhciBwYXlsb2FkID0ge307XG4gICAgICBwYXlsb2FkW25hbWVdID0gdmFsdWU7XG4gICAgICBSZWFjdEluc3RydW1lbnRhdGlvbi5kZWJ1Z1Rvb2wub25Ib3N0T3BlcmF0aW9uKHtcbiAgICAgICAgaW5zdGFuY2VJRDogUmVhY3RET01Db21wb25lbnRUcmVlLmdldEluc3RhbmNlRnJvbU5vZGUobm9kZSkuX2RlYnVnSUQsXG4gICAgICAgIHR5cGU6ICd1cGRhdGUgYXR0cmlidXRlJyxcbiAgICAgICAgcGF5bG9hZDogcGF5bG9hZFxuICAgICAgfSk7XG4gICAgfVxuICB9LFxuXG4gIHNldFZhbHVlRm9yQXR0cmlidXRlOiBmdW5jdGlvbiAobm9kZSwgbmFtZSwgdmFsdWUpIHtcbiAgICBpZiAoIWlzQXR0cmlidXRlTmFtZVNhZmUobmFtZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICAgIG5vZGUucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBub2RlLnNldEF0dHJpYnV0ZShuYW1lLCAnJyArIHZhbHVlKTtcbiAgICB9XG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgdmFyIHBheWxvYWQgPSB7fTtcbiAgICAgIHBheWxvYWRbbmFtZV0gPSB2YWx1ZTtcbiAgICAgIFJlYWN0SW5zdHJ1bWVudGF0aW9uLmRlYnVnVG9vbC5vbkhvc3RPcGVyYXRpb24oe1xuICAgICAgICBpbnN0YW5jZUlEOiBSZWFjdERPTUNvbXBvbmVudFRyZWUuZ2V0SW5zdGFuY2VGcm9tTm9kZShub2RlKS5fZGVidWdJRCxcbiAgICAgICAgdHlwZTogJ3VwZGF0ZSBhdHRyaWJ1dGUnLFxuICAgICAgICBwYXlsb2FkOiBwYXlsb2FkXG4gICAgICB9KTtcbiAgICB9XG4gIH0sXG5cbiAgLyoqXG4gICAqIERlbGV0ZXMgYW4gYXR0cmlidXRlcyBmcm9tIGEgbm9kZS5cbiAgICpcbiAgICogQHBhcmFtIHtET01FbGVtZW50fSBub2RlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gICAqL1xuICBkZWxldGVWYWx1ZUZvckF0dHJpYnV0ZTogZnVuY3Rpb24gKG5vZGUsIG5hbWUpIHtcbiAgICBub2RlLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgUmVhY3RJbnN0cnVtZW50YXRpb24uZGVidWdUb29sLm9uSG9zdE9wZXJhdGlvbih7XG4gICAgICAgIGluc3RhbmNlSUQ6IFJlYWN0RE9NQ29tcG9uZW50VHJlZS5nZXRJbnN0YW5jZUZyb21Ob2RlKG5vZGUpLl9kZWJ1Z0lELFxuICAgICAgICB0eXBlOiAncmVtb3ZlIGF0dHJpYnV0ZScsXG4gICAgICAgIHBheWxvYWQ6IG5hbWVcbiAgICAgIH0pO1xuICAgIH1cbiAgfSxcblxuICAvKipcbiAgICogRGVsZXRlcyB0aGUgdmFsdWUgZm9yIGEgcHJvcGVydHkgb24gYSBub2RlLlxuICAgKlxuICAgKiBAcGFyYW0ge0RPTUVsZW1lbnR9IG5vZGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICovXG4gIGRlbGV0ZVZhbHVlRm9yUHJvcGVydHk6IGZ1bmN0aW9uIChub2RlLCBuYW1lKSB7XG4gICAgdmFyIHByb3BlcnR5SW5mbyA9IERPTVByb3BlcnR5LnByb3BlcnRpZXMuaGFzT3duUHJvcGVydHkobmFtZSkgPyBET01Qcm9wZXJ0eS5wcm9wZXJ0aWVzW25hbWVdIDogbnVsbDtcbiAgICBpZiAocHJvcGVydHlJbmZvKSB7XG4gICAgICB2YXIgbXV0YXRpb25NZXRob2QgPSBwcm9wZXJ0eUluZm8ubXV0YXRpb25NZXRob2Q7XG4gICAgICBpZiAobXV0YXRpb25NZXRob2QpIHtcbiAgICAgICAgbXV0YXRpb25NZXRob2Qobm9kZSwgdW5kZWZpbmVkKTtcbiAgICAgIH0gZWxzZSBpZiAocHJvcGVydHlJbmZvLm11c3RVc2VQcm9wZXJ0eSkge1xuICAgICAgICB2YXIgcHJvcE5hbWUgPSBwcm9wZXJ0eUluZm8ucHJvcGVydHlOYW1lO1xuICAgICAgICBpZiAocHJvcGVydHlJbmZvLmhhc0Jvb2xlYW5WYWx1ZSkge1xuICAgICAgICAgIG5vZGVbcHJvcE5hbWVdID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbm9kZVtwcm9wTmFtZV0gPSAnJztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbm9kZS5yZW1vdmVBdHRyaWJ1dGUocHJvcGVydHlJbmZvLmF0dHJpYnV0ZU5hbWUpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoRE9NUHJvcGVydHkuaXNDdXN0b21BdHRyaWJ1dGUobmFtZSkpIHtcbiAgICAgIG5vZGUucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICAgIH1cblxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBSZWFjdEluc3RydW1lbnRhdGlvbi5kZWJ1Z1Rvb2wub25Ib3N0T3BlcmF0aW9uKHtcbiAgICAgICAgaW5zdGFuY2VJRDogUmVhY3RET01Db21wb25lbnRUcmVlLmdldEluc3RhbmNlRnJvbU5vZGUobm9kZSkuX2RlYnVnSUQsXG4gICAgICAgIHR5cGU6ICdyZW1vdmUgYXR0cmlidXRlJyxcbiAgICAgICAgcGF5bG9hZDogbmFtZVxuICAgICAgfSk7XG4gICAgfVxuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IERPTVByb3BlcnR5T3BlcmF0aW9ucztcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3JlYWN0LWRvbS9saWIvRE9NUHJvcGVydHlPcGVyYXRpb25zLmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxNS1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0RE9NQ29tcG9uZW50RmxhZ3MgPSB7XG4gIGhhc0NhY2hlZENoaWxkTm9kZXM6IDEgPDwgMFxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdERPTUNvbXBvbmVudEZsYWdzO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QtZG9tL2xpYi9SZWFjdERPTUNvbXBvbmVudEZsYWdzLmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIF9hc3NpZ24gPSByZXF1aXJlKCdvYmplY3QtYXNzaWduJyk7XG5cbnZhciBMaW5rZWRWYWx1ZVV0aWxzID0gcmVxdWlyZSgnLi9MaW5rZWRWYWx1ZVV0aWxzJyk7XG52YXIgUmVhY3RET01Db21wb25lbnRUcmVlID0gcmVxdWlyZSgnLi9SZWFjdERPTUNvbXBvbmVudFRyZWUnKTtcbnZhciBSZWFjdFVwZGF0ZXMgPSByZXF1aXJlKCcuL1JlYWN0VXBkYXRlcycpO1xuXG52YXIgd2FybmluZyA9IHJlcXVpcmUoJ2ZianMvbGliL3dhcm5pbmcnKTtcblxudmFyIGRpZFdhcm5WYWx1ZUxpbmsgPSBmYWxzZTtcbnZhciBkaWRXYXJuVmFsdWVEZWZhdWx0VmFsdWUgPSBmYWxzZTtcblxuZnVuY3Rpb24gdXBkYXRlT3B0aW9uc0lmUGVuZGluZ1VwZGF0ZUFuZE1vdW50ZWQoKSB7XG4gIGlmICh0aGlzLl9yb290Tm9kZUlEICYmIHRoaXMuX3dyYXBwZXJTdGF0ZS5wZW5kaW5nVXBkYXRlKSB7XG4gICAgdGhpcy5fd3JhcHBlclN0YXRlLnBlbmRpbmdVcGRhdGUgPSBmYWxzZTtcblxuICAgIHZhciBwcm9wcyA9IHRoaXMuX2N1cnJlbnRFbGVtZW50LnByb3BzO1xuICAgIHZhciB2YWx1ZSA9IExpbmtlZFZhbHVlVXRpbHMuZ2V0VmFsdWUocHJvcHMpO1xuXG4gICAgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICAgIHVwZGF0ZU9wdGlvbnModGhpcywgQm9vbGVhbihwcm9wcy5tdWx0aXBsZSksIHZhbHVlKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0RGVjbGFyYXRpb25FcnJvckFkZGVuZHVtKG93bmVyKSB7XG4gIGlmIChvd25lcikge1xuICAgIHZhciBuYW1lID0gb3duZXIuZ2V0TmFtZSgpO1xuICAgIGlmIChuYW1lKSB7XG4gICAgICByZXR1cm4gJyBDaGVjayB0aGUgcmVuZGVyIG1ldGhvZCBvZiBgJyArIG5hbWUgKyAnYC4nO1xuICAgIH1cbiAgfVxuICByZXR1cm4gJyc7XG59XG5cbnZhciB2YWx1ZVByb3BOYW1lcyA9IFsndmFsdWUnLCAnZGVmYXVsdFZhbHVlJ107XG5cbi8qKlxuICogVmFsaWRhdGlvbiBmdW5jdGlvbiBmb3IgYHZhbHVlYCBhbmQgYGRlZmF1bHRWYWx1ZWAuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBjaGVja1NlbGVjdFByb3BUeXBlcyhpbnN0LCBwcm9wcykge1xuICB2YXIgb3duZXIgPSBpbnN0Ll9jdXJyZW50RWxlbWVudC5fb3duZXI7XG4gIExpbmtlZFZhbHVlVXRpbHMuY2hlY2tQcm9wVHlwZXMoJ3NlbGVjdCcsIHByb3BzLCBvd25lcik7XG5cbiAgaWYgKHByb3BzLnZhbHVlTGluayAhPT0gdW5kZWZpbmVkICYmICFkaWRXYXJuVmFsdWVMaW5rKSB7XG4gICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcoZmFsc2UsICdgdmFsdWVMaW5rYCBwcm9wIG9uIGBzZWxlY3RgIGlzIGRlcHJlY2F0ZWQ7IHNldCBgdmFsdWVgIGFuZCBgb25DaGFuZ2VgIGluc3RlYWQuJykgOiB2b2lkIDA7XG4gICAgZGlkV2FyblZhbHVlTGluayA9IHRydWU7XG4gIH1cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlUHJvcE5hbWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHByb3BOYW1lID0gdmFsdWVQcm9wTmFtZXNbaV07XG4gICAgaWYgKHByb3BzW3Byb3BOYW1lXSA9PSBudWxsKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgdmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5KHByb3BzW3Byb3BOYW1lXSk7XG4gICAgaWYgKHByb3BzLm11bHRpcGxlICYmICFpc0FycmF5KSB7XG4gICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyhmYWxzZSwgJ1RoZSBgJXNgIHByb3Agc3VwcGxpZWQgdG8gPHNlbGVjdD4gbXVzdCBiZSBhbiBhcnJheSBpZiAnICsgJ2BtdWx0aXBsZWAgaXMgdHJ1ZS4lcycsIHByb3BOYW1lLCBnZXREZWNsYXJhdGlvbkVycm9yQWRkZW5kdW0ob3duZXIpKSA6IHZvaWQgMDtcbiAgICB9IGVsc2UgaWYgKCFwcm9wcy5tdWx0aXBsZSAmJiBpc0FycmF5KSB7XG4gICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyhmYWxzZSwgJ1RoZSBgJXNgIHByb3Agc3VwcGxpZWQgdG8gPHNlbGVjdD4gbXVzdCBiZSBhIHNjYWxhciAnICsgJ3ZhbHVlIGlmIGBtdWx0aXBsZWAgaXMgZmFsc2UuJXMnLCBwcm9wTmFtZSwgZ2V0RGVjbGFyYXRpb25FcnJvckFkZGVuZHVtKG93bmVyKSkgOiB2b2lkIDA7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQHBhcmFtIHtSZWFjdERPTUNvbXBvbmVudH0gaW5zdFxuICogQHBhcmFtIHtib29sZWFufSBtdWx0aXBsZVxuICogQHBhcmFtIHsqfSBwcm9wVmFsdWUgQSBzdHJpbmdhYmxlICh3aXRoIGBtdWx0aXBsZWAsIGEgbGlzdCBvZiBzdHJpbmdhYmxlcykuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiB1cGRhdGVPcHRpb25zKGluc3QsIG11bHRpcGxlLCBwcm9wVmFsdWUpIHtcbiAgdmFyIHNlbGVjdGVkVmFsdWUsIGk7XG4gIHZhciBvcHRpb25zID0gUmVhY3RET01Db21wb25lbnRUcmVlLmdldE5vZGVGcm9tSW5zdGFuY2UoaW5zdCkub3B0aW9ucztcblxuICBpZiAobXVsdGlwbGUpIHtcbiAgICBzZWxlY3RlZFZhbHVlID0ge307XG4gICAgZm9yIChpID0gMDsgaSA8IHByb3BWYWx1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgc2VsZWN0ZWRWYWx1ZVsnJyArIHByb3BWYWx1ZVtpXV0gPSB0cnVlO1xuICAgIH1cbiAgICBmb3IgKGkgPSAwOyBpIDwgb3B0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHNlbGVjdGVkID0gc2VsZWN0ZWRWYWx1ZS5oYXNPd25Qcm9wZXJ0eShvcHRpb25zW2ldLnZhbHVlKTtcbiAgICAgIGlmIChvcHRpb25zW2ldLnNlbGVjdGVkICE9PSBzZWxlY3RlZCkge1xuICAgICAgICBvcHRpb25zW2ldLnNlbGVjdGVkID0gc2VsZWN0ZWQ7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIERvIG5vdCBzZXQgYHNlbGVjdC52YWx1ZWAgYXMgZXhhY3QgYmVoYXZpb3IgaXNuJ3QgY29uc2lzdGVudCBhY3Jvc3MgYWxsXG4gICAgLy8gYnJvd3NlcnMgZm9yIGFsbCBjYXNlcy5cbiAgICBzZWxlY3RlZFZhbHVlID0gJycgKyBwcm9wVmFsdWU7XG4gICAgZm9yIChpID0gMDsgaSA8IG9wdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChvcHRpb25zW2ldLnZhbHVlID09PSBzZWxlY3RlZFZhbHVlKSB7XG4gICAgICAgIG9wdGlvbnNbaV0uc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChvcHRpb25zLmxlbmd0aCkge1xuICAgICAgb3B0aW9uc1swXS5zZWxlY3RlZCA9IHRydWU7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogSW1wbGVtZW50cyBhIDxzZWxlY3Q+IGhvc3QgY29tcG9uZW50IHRoYXQgYWxsb3dzIG9wdGlvbmFsbHkgc2V0dGluZyB0aGVcbiAqIHByb3BzIGB2YWx1ZWAgYW5kIGBkZWZhdWx0VmFsdWVgLiBJZiBgbXVsdGlwbGVgIGlzIGZhbHNlLCB0aGUgcHJvcCBtdXN0IGJlIGFcbiAqIHN0cmluZ2FibGUuIElmIGBtdWx0aXBsZWAgaXMgdHJ1ZSwgdGhlIHByb3AgbXVzdCBiZSBhbiBhcnJheSBvZiBzdHJpbmdhYmxlcy5cbiAqXG4gKiBJZiBgdmFsdWVgIGlzIG5vdCBzdXBwbGllZCAob3IgbnVsbC91bmRlZmluZWQpLCB1c2VyIGFjdGlvbnMgdGhhdCBjaGFuZ2UgdGhlXG4gKiBzZWxlY3RlZCBvcHRpb24gd2lsbCB0cmlnZ2VyIHVwZGF0ZXMgdG8gdGhlIHJlbmRlcmVkIG9wdGlvbnMuXG4gKlxuICogSWYgaXQgaXMgc3VwcGxpZWQgKGFuZCBub3QgbnVsbC91bmRlZmluZWQpLCB0aGUgcmVuZGVyZWQgb3B0aW9ucyB3aWxsIG5vdFxuICogdXBkYXRlIGluIHJlc3BvbnNlIHRvIHVzZXIgYWN0aW9ucy4gSW5zdGVhZCwgdGhlIGB2YWx1ZWAgcHJvcCBtdXN0IGNoYW5nZSBpblxuICogb3JkZXIgZm9yIHRoZSByZW5kZXJlZCBvcHRpb25zIHRvIHVwZGF0ZS5cbiAqXG4gKiBJZiBgZGVmYXVsdFZhbHVlYCBpcyBwcm92aWRlZCwgYW55IG9wdGlvbnMgd2l0aCB0aGUgc3VwcGxpZWQgdmFsdWVzIHdpbGwgYmVcbiAqIHNlbGVjdGVkLlxuICovXG52YXIgUmVhY3RET01TZWxlY3QgPSB7XG4gIGdldEhvc3RQcm9wczogZnVuY3Rpb24gKGluc3QsIHByb3BzKSB7XG4gICAgcmV0dXJuIF9hc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICBvbkNoYW5nZTogaW5zdC5fd3JhcHBlclN0YXRlLm9uQ2hhbmdlLFxuICAgICAgdmFsdWU6IHVuZGVmaW5lZFxuICAgIH0pO1xuICB9LFxuXG4gIG1vdW50V3JhcHBlcjogZnVuY3Rpb24gKGluc3QsIHByb3BzKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGNoZWNrU2VsZWN0UHJvcFR5cGVzKGluc3QsIHByb3BzKTtcbiAgICB9XG5cbiAgICB2YXIgdmFsdWUgPSBMaW5rZWRWYWx1ZVV0aWxzLmdldFZhbHVlKHByb3BzKTtcbiAgICBpbnN0Ll93cmFwcGVyU3RhdGUgPSB7XG4gICAgICBwZW5kaW5nVXBkYXRlOiBmYWxzZSxcbiAgICAgIGluaXRpYWxWYWx1ZTogdmFsdWUgIT0gbnVsbCA/IHZhbHVlIDogcHJvcHMuZGVmYXVsdFZhbHVlLFxuICAgICAgbGlzdGVuZXJzOiBudWxsLFxuICAgICAgb25DaGFuZ2U6IF9oYW5kbGVDaGFuZ2UuYmluZChpbnN0KSxcbiAgICAgIHdhc011bHRpcGxlOiBCb29sZWFuKHByb3BzLm11bHRpcGxlKVxuICAgIH07XG5cbiAgICBpZiAocHJvcHMudmFsdWUgIT09IHVuZGVmaW5lZCAmJiBwcm9wcy5kZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCAmJiAhZGlkV2FyblZhbHVlRGVmYXVsdFZhbHVlKSB7XG4gICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyhmYWxzZSwgJ1NlbGVjdCBlbGVtZW50cyBtdXN0IGJlIGVpdGhlciBjb250cm9sbGVkIG9yIHVuY29udHJvbGxlZCAnICsgJyhzcGVjaWZ5IGVpdGhlciB0aGUgdmFsdWUgcHJvcCwgb3IgdGhlIGRlZmF1bHRWYWx1ZSBwcm9wLCBidXQgbm90ICcgKyAnYm90aCkuIERlY2lkZSBiZXR3ZWVuIHVzaW5nIGEgY29udHJvbGxlZCBvciB1bmNvbnRyb2xsZWQgc2VsZWN0ICcgKyAnZWxlbWVudCBhbmQgcmVtb3ZlIG9uZSBvZiB0aGVzZSBwcm9wcy4gTW9yZSBpbmZvOiAnICsgJ2h0dHBzOi8vZmIubWUvcmVhY3QtY29udHJvbGxlZC1jb21wb25lbnRzJykgOiB2b2lkIDA7XG4gICAgICBkaWRXYXJuVmFsdWVEZWZhdWx0VmFsdWUgPSB0cnVlO1xuICAgIH1cbiAgfSxcblxuICBnZXRTZWxlY3RWYWx1ZUNvbnRleHQ6IGZ1bmN0aW9uIChpbnN0KSB7XG4gICAgLy8gUmVhY3RET01PcHRpb24gbG9va3MgYXQgdGhpcyBpbml0aWFsIHZhbHVlIHNvIHRoZSBpbml0aWFsIGdlbmVyYXRlZFxuICAgIC8vIG1hcmt1cCBoYXMgY29ycmVjdCBgc2VsZWN0ZWRgIGF0dHJpYnV0ZXNcbiAgICByZXR1cm4gaW5zdC5fd3JhcHBlclN0YXRlLmluaXRpYWxWYWx1ZTtcbiAgfSxcblxuICBwb3N0VXBkYXRlV3JhcHBlcjogZnVuY3Rpb24gKGluc3QpIHtcbiAgICB2YXIgcHJvcHMgPSBpbnN0Ll9jdXJyZW50RWxlbWVudC5wcm9wcztcblxuICAgIC8vIEFmdGVyIHRoZSBpbml0aWFsIG1vdW50LCB3ZSBjb250cm9sIHNlbGVjdGVkLW5lc3MgbWFudWFsbHkgc28gZG9uJ3QgcGFzc1xuICAgIC8vIHRoaXMgdmFsdWUgZG93blxuICAgIGluc3QuX3dyYXBwZXJTdGF0ZS5pbml0aWFsVmFsdWUgPSB1bmRlZmluZWQ7XG5cbiAgICB2YXIgd2FzTXVsdGlwbGUgPSBpbnN0Ll93cmFwcGVyU3RhdGUud2FzTXVsdGlwbGU7XG4gICAgaW5zdC5fd3JhcHBlclN0YXRlLndhc011bHRpcGxlID0gQm9vbGVhbihwcm9wcy5tdWx0aXBsZSk7XG5cbiAgICB2YXIgdmFsdWUgPSBMaW5rZWRWYWx1ZVV0aWxzLmdldFZhbHVlKHByb3BzKTtcbiAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgICAgaW5zdC5fd3JhcHBlclN0YXRlLnBlbmRpbmdVcGRhdGUgPSBmYWxzZTtcbiAgICAgIHVwZGF0ZU9wdGlvbnMoaW5zdCwgQm9vbGVhbihwcm9wcy5tdWx0aXBsZSksIHZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKHdhc011bHRpcGxlICE9PSBCb29sZWFuKHByb3BzLm11bHRpcGxlKSkge1xuICAgICAgLy8gRm9yIHNpbXBsaWNpdHksIHJlYXBwbHkgYGRlZmF1bHRWYWx1ZWAgaWYgYG11bHRpcGxlYCBpcyB0b2dnbGVkLlxuICAgICAgaWYgKHByb3BzLmRlZmF1bHRWYWx1ZSAhPSBudWxsKSB7XG4gICAgICAgIHVwZGF0ZU9wdGlvbnMoaW5zdCwgQm9vbGVhbihwcm9wcy5tdWx0aXBsZSksIHByb3BzLmRlZmF1bHRWYWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBSZXZlcnQgdGhlIHNlbGVjdCBiYWNrIHRvIGl0cyBkZWZhdWx0IHVuc2VsZWN0ZWQgc3RhdGUuXG4gICAgICAgIHVwZGF0ZU9wdGlvbnMoaW5zdCwgQm9vbGVhbihwcm9wcy5tdWx0aXBsZSksIHByb3BzLm11bHRpcGxlID8gW10gOiAnJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG59O1xuXG5mdW5jdGlvbiBfaGFuZGxlQ2hhbmdlKGV2ZW50KSB7XG4gIHZhciBwcm9wcyA9IHRoaXMuX2N1cnJlbnRFbGVtZW50LnByb3BzO1xuICB2YXIgcmV0dXJuVmFsdWUgPSBMaW5rZWRWYWx1ZVV0aWxzLmV4ZWN1dGVPbkNoYW5nZShwcm9wcywgZXZlbnQpO1xuXG4gIGlmICh0aGlzLl9yb290Tm9kZUlEKSB7XG4gICAgdGhpcy5fd3JhcHBlclN0YXRlLnBlbmRpbmdVcGRhdGUgPSB0cnVlO1xuICB9XG4gIFJlYWN0VXBkYXRlcy5hc2FwKHVwZGF0ZU9wdGlvbnNJZlBlbmRpbmdVcGRhdGVBbmRNb3VudGVkLCB0aGlzKTtcbiAgcmV0dXJuIHJldHVyblZhbHVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0RE9NU2VsZWN0O1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QtZG9tL2xpYi9SZWFjdERPTVNlbGVjdC5qcyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBlbXB0eUNvbXBvbmVudEZhY3Rvcnk7XG5cbnZhciBSZWFjdEVtcHR5Q29tcG9uZW50SW5qZWN0aW9uID0ge1xuICBpbmplY3RFbXB0eUNvbXBvbmVudEZhY3Rvcnk6IGZ1bmN0aW9uIChmYWN0b3J5KSB7XG4gICAgZW1wdHlDb21wb25lbnRGYWN0b3J5ID0gZmFjdG9yeTtcbiAgfVxufTtcblxudmFyIFJlYWN0RW1wdHlDb21wb25lbnQgPSB7XG4gIGNyZWF0ZTogZnVuY3Rpb24gKGluc3RhbnRpYXRlKSB7XG4gICAgcmV0dXJuIGVtcHR5Q29tcG9uZW50RmFjdG9yeShpbnN0YW50aWF0ZSk7XG4gIH1cbn07XG5cblJlYWN0RW1wdHlDb21wb25lbnQuaW5qZWN0aW9uID0gUmVhY3RFbXB0eUNvbXBvbmVudEluamVjdGlvbjtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdEVtcHR5Q29tcG9uZW50O1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QtZG9tL2xpYi9SZWFjdEVtcHR5Q29tcG9uZW50LmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUmVhY3RGZWF0dXJlRmxhZ3MgPSB7XG4gIC8vIFdoZW4gdHJ1ZSwgY2FsbCBjb25zb2xlLnRpbWUoKSBiZWZvcmUgYW5kIC50aW1lRW5kKCkgYWZ0ZXIgZWFjaCB0b3AtbGV2ZWxcbiAgLy8gcmVuZGVyIChib3RoIGluaXRpYWwgcmVuZGVycyBhbmQgdXBkYXRlcykuIFVzZWZ1bCB3aGVuIGxvb2tpbmcgYXQgcHJvZC1tb2RlXG4gIC8vIHRpbWVsaW5lIHByb2ZpbGVzIGluIENocm9tZSwgZm9yIGV4YW1wbGUuXG4gIGxvZ1RvcExldmVsUmVuZGVyczogZmFsc2Vcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RGZWF0dXJlRmxhZ3M7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1kb20vbGliL1JlYWN0RmVhdHVyZUZsYWdzLmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxNC1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIF9wcm9kSW52YXJpYW50ID0gcmVxdWlyZSgnLi9yZWFjdFByb2RJbnZhcmlhbnQnKTtcblxudmFyIGludmFyaWFudCA9IHJlcXVpcmUoJ2ZianMvbGliL2ludmFyaWFudCcpO1xuXG52YXIgZ2VuZXJpY0NvbXBvbmVudENsYXNzID0gbnVsbDtcbnZhciB0ZXh0Q29tcG9uZW50Q2xhc3MgPSBudWxsO1xuXG52YXIgUmVhY3RIb3N0Q29tcG9uZW50SW5qZWN0aW9uID0ge1xuICAvLyBUaGlzIGFjY2VwdHMgYSBjbGFzcyB0aGF0IHJlY2VpdmVzIHRoZSB0YWcgc3RyaW5nLiBUaGlzIGlzIGEgY2F0Y2ggYWxsXG4gIC8vIHRoYXQgY2FuIHJlbmRlciBhbnkga2luZCBvZiB0YWcuXG4gIGluamVjdEdlbmVyaWNDb21wb25lbnRDbGFzczogZnVuY3Rpb24gKGNvbXBvbmVudENsYXNzKSB7XG4gICAgZ2VuZXJpY0NvbXBvbmVudENsYXNzID0gY29tcG9uZW50Q2xhc3M7XG4gIH0sXG4gIC8vIFRoaXMgYWNjZXB0cyBhIHRleHQgY29tcG9uZW50IGNsYXNzIHRoYXQgdGFrZXMgdGhlIHRleHQgc3RyaW5nIHRvIGJlXG4gIC8vIHJlbmRlcmVkIGFzIHByb3BzLlxuICBpbmplY3RUZXh0Q29tcG9uZW50Q2xhc3M6IGZ1bmN0aW9uIChjb21wb25lbnRDbGFzcykge1xuICAgIHRleHRDb21wb25lbnRDbGFzcyA9IGNvbXBvbmVudENsYXNzO1xuICB9XG59O1xuXG4vKipcbiAqIEdldCBhIGhvc3QgaW50ZXJuYWwgY29tcG9uZW50IGNsYXNzIGZvciBhIHNwZWNpZmljIHRhZy5cbiAqXG4gKiBAcGFyYW0ge1JlYWN0RWxlbWVudH0gZWxlbWVudCBUaGUgZWxlbWVudCB0byBjcmVhdGUuXG4gKiBAcmV0dXJuIHtmdW5jdGlvbn0gVGhlIGludGVybmFsIGNsYXNzIGNvbnN0cnVjdG9yIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBjcmVhdGVJbnRlcm5hbENvbXBvbmVudChlbGVtZW50KSB7XG4gICFnZW5lcmljQ29tcG9uZW50Q2xhc3MgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAnVGhlcmUgaXMgbm8gcmVnaXN0ZXJlZCBjb21wb25lbnQgZm9yIHRoZSB0YWcgJXMnLCBlbGVtZW50LnR5cGUpIDogX3Byb2RJbnZhcmlhbnQoJzExMScsIGVsZW1lbnQudHlwZSkgOiB2b2lkIDA7XG4gIHJldHVybiBuZXcgZ2VuZXJpY0NvbXBvbmVudENsYXNzKGVsZW1lbnQpO1xufVxuXG4vKipcbiAqIEBwYXJhbSB7UmVhY3RUZXh0fSB0ZXh0XG4gKiBAcmV0dXJuIHtSZWFjdENvbXBvbmVudH1cbiAqL1xuZnVuY3Rpb24gY3JlYXRlSW5zdGFuY2VGb3JUZXh0KHRleHQpIHtcbiAgcmV0dXJuIG5ldyB0ZXh0Q29tcG9uZW50Q2xhc3ModGV4dCk7XG59XG5cbi8qKlxuICogQHBhcmFtIHtSZWFjdENvbXBvbmVudH0gY29tcG9uZW50XG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc1RleHRDb21wb25lbnQoY29tcG9uZW50KSB7XG4gIHJldHVybiBjb21wb25lbnQgaW5zdGFuY2VvZiB0ZXh0Q29tcG9uZW50Q2xhc3M7XG59XG5cbnZhciBSZWFjdEhvc3RDb21wb25lbnQgPSB7XG4gIGNyZWF0ZUludGVybmFsQ29tcG9uZW50OiBjcmVhdGVJbnRlcm5hbENvbXBvbmVudCxcbiAgY3JlYXRlSW5zdGFuY2VGb3JUZXh0OiBjcmVhdGVJbnN0YW5jZUZvclRleHQsXG4gIGlzVGV4dENvbXBvbmVudDogaXNUZXh0Q29tcG9uZW50LFxuICBpbmplY3Rpb246IFJlYWN0SG9zdENvbXBvbmVudEluamVjdGlvblxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdEhvc3RDb21wb25lbnQ7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1kb20vbGliL1JlYWN0SG9zdENvbXBvbmVudC5qcyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBSZWFjdERPTVNlbGVjdGlvbiA9IHJlcXVpcmUoJy4vUmVhY3RET01TZWxlY3Rpb24nKTtcblxudmFyIGNvbnRhaW5zTm9kZSA9IHJlcXVpcmUoJ2ZianMvbGliL2NvbnRhaW5zTm9kZScpO1xudmFyIGZvY3VzTm9kZSA9IHJlcXVpcmUoJ2ZianMvbGliL2ZvY3VzTm9kZScpO1xudmFyIGdldEFjdGl2ZUVsZW1lbnQgPSByZXF1aXJlKCdmYmpzL2xpYi9nZXRBY3RpdmVFbGVtZW50Jyk7XG5cbmZ1bmN0aW9uIGlzSW5Eb2N1bWVudChub2RlKSB7XG4gIHJldHVybiBjb250YWluc05vZGUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCBub2RlKTtcbn1cblxuLyoqXG4gKiBAUmVhY3RJbnB1dFNlbGVjdGlvbjogUmVhY3QgaW5wdXQgc2VsZWN0aW9uIG1vZHVsZS4gQmFzZWQgb24gU2VsZWN0aW9uLmpzLFxuICogYnV0IG1vZGlmaWVkIHRvIGJlIHN1aXRhYmxlIGZvciByZWFjdCBhbmQgaGFzIGEgY291cGxlIG9mIGJ1ZyBmaXhlcyAoZG9lc24ndFxuICogYXNzdW1lIGJ1dHRvbnMgaGF2ZSByYW5nZSBzZWxlY3Rpb25zIGFsbG93ZWQpLlxuICogSW5wdXQgc2VsZWN0aW9uIG1vZHVsZSBmb3IgUmVhY3QuXG4gKi9cbnZhciBSZWFjdElucHV0U2VsZWN0aW9uID0ge1xuICBoYXNTZWxlY3Rpb25DYXBhYmlsaXRpZXM6IGZ1bmN0aW9uIChlbGVtKSB7XG4gICAgdmFyIG5vZGVOYW1lID0gZWxlbSAmJiBlbGVtLm5vZGVOYW1lICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICByZXR1cm4gbm9kZU5hbWUgJiYgKG5vZGVOYW1lID09PSAnaW5wdXQnICYmIGVsZW0udHlwZSA9PT0gJ3RleHQnIHx8IG5vZGVOYW1lID09PSAndGV4dGFyZWEnIHx8IGVsZW0uY29udGVudEVkaXRhYmxlID09PSAndHJ1ZScpO1xuICB9LFxuXG4gIGdldFNlbGVjdGlvbkluZm9ybWF0aW9uOiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGZvY3VzZWRFbGVtID0gZ2V0QWN0aXZlRWxlbWVudCgpO1xuICAgIHJldHVybiB7XG4gICAgICBmb2N1c2VkRWxlbTogZm9jdXNlZEVsZW0sXG4gICAgICBzZWxlY3Rpb25SYW5nZTogUmVhY3RJbnB1dFNlbGVjdGlvbi5oYXNTZWxlY3Rpb25DYXBhYmlsaXRpZXMoZm9jdXNlZEVsZW0pID8gUmVhY3RJbnB1dFNlbGVjdGlvbi5nZXRTZWxlY3Rpb24oZm9jdXNlZEVsZW0pIDogbnVsbFxuICAgIH07XG4gIH0sXG5cbiAgLyoqXG4gICAqIEByZXN0b3JlU2VsZWN0aW9uOiBJZiBhbnkgc2VsZWN0aW9uIGluZm9ybWF0aW9uIHdhcyBwb3RlbnRpYWxseSBsb3N0LFxuICAgKiByZXN0b3JlIGl0LiBUaGlzIGlzIHVzZWZ1bCB3aGVuIHBlcmZvcm1pbmcgb3BlcmF0aW9ucyB0aGF0IGNvdWxkIHJlbW92ZSBkb21cbiAgICogbm9kZXMgYW5kIHBsYWNlIHRoZW0gYmFjayBpbiwgcmVzdWx0aW5nIGluIGZvY3VzIGJlaW5nIGxvc3QuXG4gICAqL1xuICByZXN0b3JlU2VsZWN0aW9uOiBmdW5jdGlvbiAocHJpb3JTZWxlY3Rpb25JbmZvcm1hdGlvbikge1xuICAgIHZhciBjdXJGb2N1c2VkRWxlbSA9IGdldEFjdGl2ZUVsZW1lbnQoKTtcbiAgICB2YXIgcHJpb3JGb2N1c2VkRWxlbSA9IHByaW9yU2VsZWN0aW9uSW5mb3JtYXRpb24uZm9jdXNlZEVsZW07XG4gICAgdmFyIHByaW9yU2VsZWN0aW9uUmFuZ2UgPSBwcmlvclNlbGVjdGlvbkluZm9ybWF0aW9uLnNlbGVjdGlvblJhbmdlO1xuICAgIGlmIChjdXJGb2N1c2VkRWxlbSAhPT0gcHJpb3JGb2N1c2VkRWxlbSAmJiBpc0luRG9jdW1lbnQocHJpb3JGb2N1c2VkRWxlbSkpIHtcbiAgICAgIGlmIChSZWFjdElucHV0U2VsZWN0aW9uLmhhc1NlbGVjdGlvbkNhcGFiaWxpdGllcyhwcmlvckZvY3VzZWRFbGVtKSkge1xuICAgICAgICBSZWFjdElucHV0U2VsZWN0aW9uLnNldFNlbGVjdGlvbihwcmlvckZvY3VzZWRFbGVtLCBwcmlvclNlbGVjdGlvblJhbmdlKTtcbiAgICAgIH1cbiAgICAgIGZvY3VzTm9kZShwcmlvckZvY3VzZWRFbGVtKTtcbiAgICB9XG4gIH0sXG5cbiAgLyoqXG4gICAqIEBnZXRTZWxlY3Rpb246IEdldHMgdGhlIHNlbGVjdGlvbiBib3VuZHMgb2YgYSBmb2N1c2VkIHRleHRhcmVhLCBpbnB1dCBvclxuICAgKiBjb250ZW50RWRpdGFibGUgbm9kZS5cbiAgICogLUBpbnB1dDogTG9vayB1cCBzZWxlY3Rpb24gYm91bmRzIG9mIHRoaXMgaW5wdXRcbiAgICogLUByZXR1cm4ge3N0YXJ0OiBzZWxlY3Rpb25TdGFydCwgZW5kOiBzZWxlY3Rpb25FbmR9XG4gICAqL1xuICBnZXRTZWxlY3Rpb246IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgIHZhciBzZWxlY3Rpb247XG5cbiAgICBpZiAoJ3NlbGVjdGlvblN0YXJ0JyBpbiBpbnB1dCkge1xuICAgICAgLy8gTW9kZXJuIGJyb3dzZXIgd2l0aCBpbnB1dCBvciB0ZXh0YXJlYS5cbiAgICAgIHNlbGVjdGlvbiA9IHtcbiAgICAgICAgc3RhcnQ6IGlucHV0LnNlbGVjdGlvblN0YXJ0LFxuICAgICAgICBlbmQ6IGlucHV0LnNlbGVjdGlvbkVuZFxuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKGRvY3VtZW50LnNlbGVjdGlvbiAmJiBpbnB1dC5ub2RlTmFtZSAmJiBpbnB1dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSAnaW5wdXQnKSB7XG4gICAgICAvLyBJRTggaW5wdXQuXG4gICAgICB2YXIgcmFuZ2UgPSBkb2N1bWVudC5zZWxlY3Rpb24uY3JlYXRlUmFuZ2UoKTtcbiAgICAgIC8vIFRoZXJlIGNhbiBvbmx5IGJlIG9uZSBzZWxlY3Rpb24gcGVyIGRvY3VtZW50IGluIElFLCBzbyBpdCBtdXN0XG4gICAgICAvLyBiZSBpbiBvdXIgZWxlbWVudC5cbiAgICAgIGlmIChyYW5nZS5wYXJlbnRFbGVtZW50KCkgPT09IGlucHV0KSB7XG4gICAgICAgIHNlbGVjdGlvbiA9IHtcbiAgICAgICAgICBzdGFydDogLXJhbmdlLm1vdmVTdGFydCgnY2hhcmFjdGVyJywgLWlucHV0LnZhbHVlLmxlbmd0aCksXG4gICAgICAgICAgZW5kOiAtcmFuZ2UubW92ZUVuZCgnY2hhcmFjdGVyJywgLWlucHV0LnZhbHVlLmxlbmd0aClcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQ29udGVudCBlZGl0YWJsZSBvciBvbGQgSUUgdGV4dGFyZWEuXG4gICAgICBzZWxlY3Rpb24gPSBSZWFjdERPTVNlbGVjdGlvbi5nZXRPZmZzZXRzKGlucHV0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gc2VsZWN0aW9uIHx8IHsgc3RhcnQ6IDAsIGVuZDogMCB9O1xuICB9LFxuXG4gIC8qKlxuICAgKiBAc2V0U2VsZWN0aW9uOiBTZXRzIHRoZSBzZWxlY3Rpb24gYm91bmRzIG9mIGEgdGV4dGFyZWEgb3IgaW5wdXQgYW5kIGZvY3VzZXNcbiAgICogdGhlIGlucHV0LlxuICAgKiAtQGlucHV0ICAgICBTZXQgc2VsZWN0aW9uIGJvdW5kcyBvZiB0aGlzIGlucHV0IG9yIHRleHRhcmVhXG4gICAqIC1Ab2Zmc2V0cyAgIE9iamVjdCBvZiBzYW1lIGZvcm0gdGhhdCBpcyByZXR1cm5lZCBmcm9tIGdldCpcbiAgICovXG4gIHNldFNlbGVjdGlvbjogZnVuY3Rpb24gKGlucHV0LCBvZmZzZXRzKSB7XG4gICAgdmFyIHN0YXJ0ID0gb2Zmc2V0cy5zdGFydDtcbiAgICB2YXIgZW5kID0gb2Zmc2V0cy5lbmQ7XG4gICAgaWYgKGVuZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBlbmQgPSBzdGFydDtcbiAgICB9XG5cbiAgICBpZiAoJ3NlbGVjdGlvblN0YXJ0JyBpbiBpbnB1dCkge1xuICAgICAgaW5wdXQuc2VsZWN0aW9uU3RhcnQgPSBzdGFydDtcbiAgICAgIGlucHV0LnNlbGVjdGlvbkVuZCA9IE1hdGgubWluKGVuZCwgaW5wdXQudmFsdWUubGVuZ3RoKTtcbiAgICB9IGVsc2UgaWYgKGRvY3VtZW50LnNlbGVjdGlvbiAmJiBpbnB1dC5ub2RlTmFtZSAmJiBpbnB1dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSAnaW5wdXQnKSB7XG4gICAgICB2YXIgcmFuZ2UgPSBpbnB1dC5jcmVhdGVUZXh0UmFuZ2UoKTtcbiAgICAgIHJhbmdlLmNvbGxhcHNlKHRydWUpO1xuICAgICAgcmFuZ2UubW92ZVN0YXJ0KCdjaGFyYWN0ZXInLCBzdGFydCk7XG4gICAgICByYW5nZS5tb3ZlRW5kKCdjaGFyYWN0ZXInLCBlbmQgLSBzdGFydCk7XG4gICAgICByYW5nZS5zZWxlY3QoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgUmVhY3RET01TZWxlY3Rpb24uc2V0T2Zmc2V0cyhpbnB1dCwgb2Zmc2V0cyk7XG4gICAgfVxuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0SW5wdXRTZWxlY3Rpb247XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1kb20vbGliL1JlYWN0SW5wdXRTZWxlY3Rpb24uanMiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgX3Byb2RJbnZhcmlhbnQgPSByZXF1aXJlKCcuL3JlYWN0UHJvZEludmFyaWFudCcpO1xuXG52YXIgRE9NTGF6eVRyZWUgPSByZXF1aXJlKCcuL0RPTUxhenlUcmVlJyk7XG52YXIgRE9NUHJvcGVydHkgPSByZXF1aXJlKCcuL0RPTVByb3BlcnR5Jyk7XG52YXIgUmVhY3QgPSByZXF1aXJlKCdyZWFjdC9saWIvUmVhY3QnKTtcbnZhciBSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCcuL1JlYWN0QnJvd3NlckV2ZW50RW1pdHRlcicpO1xudmFyIFJlYWN0Q3VycmVudE93bmVyID0gcmVxdWlyZSgncmVhY3QvbGliL1JlYWN0Q3VycmVudE93bmVyJyk7XG52YXIgUmVhY3RET01Db21wb25lbnRUcmVlID0gcmVxdWlyZSgnLi9SZWFjdERPTUNvbXBvbmVudFRyZWUnKTtcbnZhciBSZWFjdERPTUNvbnRhaW5lckluZm8gPSByZXF1aXJlKCcuL1JlYWN0RE9NQ29udGFpbmVySW5mbycpO1xudmFyIFJlYWN0RE9NRmVhdHVyZUZsYWdzID0gcmVxdWlyZSgnLi9SZWFjdERPTUZlYXR1cmVGbGFncycpO1xudmFyIFJlYWN0RmVhdHVyZUZsYWdzID0gcmVxdWlyZSgnLi9SZWFjdEZlYXR1cmVGbGFncycpO1xudmFyIFJlYWN0SW5zdGFuY2VNYXAgPSByZXF1aXJlKCcuL1JlYWN0SW5zdGFuY2VNYXAnKTtcbnZhciBSZWFjdEluc3RydW1lbnRhdGlvbiA9IHJlcXVpcmUoJy4vUmVhY3RJbnN0cnVtZW50YXRpb24nKTtcbnZhciBSZWFjdE1hcmt1cENoZWNrc3VtID0gcmVxdWlyZSgnLi9SZWFjdE1hcmt1cENoZWNrc3VtJyk7XG52YXIgUmVhY3RSZWNvbmNpbGVyID0gcmVxdWlyZSgnLi9SZWFjdFJlY29uY2lsZXInKTtcbnZhciBSZWFjdFVwZGF0ZVF1ZXVlID0gcmVxdWlyZSgnLi9SZWFjdFVwZGF0ZVF1ZXVlJyk7XG52YXIgUmVhY3RVcGRhdGVzID0gcmVxdWlyZSgnLi9SZWFjdFVwZGF0ZXMnKTtcblxudmFyIGVtcHR5T2JqZWN0ID0gcmVxdWlyZSgnZmJqcy9saWIvZW1wdHlPYmplY3QnKTtcbnZhciBpbnN0YW50aWF0ZVJlYWN0Q29tcG9uZW50ID0gcmVxdWlyZSgnLi9pbnN0YW50aWF0ZVJlYWN0Q29tcG9uZW50Jyk7XG52YXIgaW52YXJpYW50ID0gcmVxdWlyZSgnZmJqcy9saWIvaW52YXJpYW50Jyk7XG52YXIgc2V0SW5uZXJIVE1MID0gcmVxdWlyZSgnLi9zZXRJbm5lckhUTUwnKTtcbnZhciBzaG91bGRVcGRhdGVSZWFjdENvbXBvbmVudCA9IHJlcXVpcmUoJy4vc2hvdWxkVXBkYXRlUmVhY3RDb21wb25lbnQnKTtcbnZhciB3YXJuaW5nID0gcmVxdWlyZSgnZmJqcy9saWIvd2FybmluZycpO1xuXG52YXIgQVRUUl9OQU1FID0gRE9NUHJvcGVydHkuSURfQVRUUklCVVRFX05BTUU7XG52YXIgUk9PVF9BVFRSX05BTUUgPSBET01Qcm9wZXJ0eS5ST09UX0FUVFJJQlVURV9OQU1FO1xuXG52YXIgRUxFTUVOVF9OT0RFX1RZUEUgPSAxO1xudmFyIERPQ19OT0RFX1RZUEUgPSA5O1xudmFyIERPQ1VNRU5UX0ZSQUdNRU5UX05PREVfVFlQRSA9IDExO1xuXG52YXIgaW5zdGFuY2VzQnlSZWFjdFJvb3RJRCA9IHt9O1xuXG4vKipcbiAqIEZpbmRzIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgY2hhcmFjdGVyXG4gKiB0aGF0J3Mgbm90IGNvbW1vbiBiZXR3ZWVuIHRoZSB0d28gZ2l2ZW4gc3RyaW5ncy5cbiAqXG4gKiBAcmV0dXJuIHtudW1iZXJ9IHRoZSBpbmRleCBvZiB0aGUgY2hhcmFjdGVyIHdoZXJlIHRoZSBzdHJpbmdzIGRpdmVyZ2VcbiAqL1xuZnVuY3Rpb24gZmlyc3REaWZmZXJlbmNlSW5kZXgoc3RyaW5nMSwgc3RyaW5nMikge1xuICB2YXIgbWluTGVuID0gTWF0aC5taW4oc3RyaW5nMS5sZW5ndGgsIHN0cmluZzIubGVuZ3RoKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBtaW5MZW47IGkrKykge1xuICAgIGlmIChzdHJpbmcxLmNoYXJBdChpKSAhPT0gc3RyaW5nMi5jaGFyQXQoaSkpIHtcbiAgICAgIHJldHVybiBpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gc3RyaW5nMS5sZW5ndGggPT09IHN0cmluZzIubGVuZ3RoID8gLTEgOiBtaW5MZW47XG59XG5cbi8qKlxuICogQHBhcmFtIHtET01FbGVtZW50fERPTURvY3VtZW50fSBjb250YWluZXIgRE9NIGVsZW1lbnQgdGhhdCBtYXkgY29udGFpblxuICogYSBSZWFjdCBjb21wb25lbnRcbiAqIEByZXR1cm4gez8qfSBET00gZWxlbWVudCB0aGF0IG1heSBoYXZlIHRoZSByZWFjdFJvb3QgSUQsIG9yIG51bGwuXG4gKi9cbmZ1bmN0aW9uIGdldFJlYWN0Um9vdEVsZW1lbnRJbkNvbnRhaW5lcihjb250YWluZXIpIHtcbiAgaWYgKCFjb250YWluZXIpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlmIChjb250YWluZXIubm9kZVR5cGUgPT09IERPQ19OT0RFX1RZUEUpIHtcbiAgICByZXR1cm4gY29udGFpbmVyLmRvY3VtZW50RWxlbWVudDtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gY29udGFpbmVyLmZpcnN0Q2hpbGQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gaW50ZXJuYWxHZXRJRChub2RlKSB7XG4gIC8vIElmIG5vZGUgaXMgc29tZXRoaW5nIGxpa2UgYSB3aW5kb3csIGRvY3VtZW50LCBvciB0ZXh0IG5vZGUsIG5vbmUgb2ZcbiAgLy8gd2hpY2ggc3VwcG9ydCBhdHRyaWJ1dGVzIG9yIGEgLmdldEF0dHJpYnV0ZSBtZXRob2QsIGdyYWNlZnVsbHkgcmV0dXJuXG4gIC8vIHRoZSBlbXB0eSBzdHJpbmcsIGFzIGlmIHRoZSBhdHRyaWJ1dGUgd2VyZSBtaXNzaW5nLlxuICByZXR1cm4gbm9kZS5nZXRBdHRyaWJ1dGUgJiYgbm9kZS5nZXRBdHRyaWJ1dGUoQVRUUl9OQU1FKSB8fCAnJztcbn1cblxuLyoqXG4gKiBNb3VudHMgdGhpcyBjb21wb25lbnQgYW5kIGluc2VydHMgaXQgaW50byB0aGUgRE9NLlxuICpcbiAqIEBwYXJhbSB7UmVhY3RDb21wb25lbnR9IGNvbXBvbmVudEluc3RhbmNlIFRoZSBpbnN0YW5jZSB0byBtb3VudC5cbiAqIEBwYXJhbSB7RE9NRWxlbWVudH0gY29udGFpbmVyIERPTSBlbGVtZW50IHRvIG1vdW50IGludG8uXG4gKiBAcGFyYW0ge1JlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb259IHRyYW5zYWN0aW9uXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHNob3VsZFJldXNlTWFya3VwIElmIHRydWUsIGRvIG5vdCBpbnNlcnQgbWFya3VwXG4gKi9cbmZ1bmN0aW9uIG1vdW50Q29tcG9uZW50SW50b05vZGUod3JhcHBlckluc3RhbmNlLCBjb250YWluZXIsIHRyYW5zYWN0aW9uLCBzaG91bGRSZXVzZU1hcmt1cCwgY29udGV4dCkge1xuICB2YXIgbWFya2VyTmFtZTtcbiAgaWYgKFJlYWN0RmVhdHVyZUZsYWdzLmxvZ1RvcExldmVsUmVuZGVycykge1xuICAgIHZhciB3cmFwcGVkRWxlbWVudCA9IHdyYXBwZXJJbnN0YW5jZS5fY3VycmVudEVsZW1lbnQucHJvcHMuY2hpbGQ7XG4gICAgdmFyIHR5cGUgPSB3cmFwcGVkRWxlbWVudC50eXBlO1xuICAgIG1hcmtlck5hbWUgPSAnUmVhY3QgbW91bnQ6ICcgKyAodHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnID8gdHlwZSA6IHR5cGUuZGlzcGxheU5hbWUgfHwgdHlwZS5uYW1lKTtcbiAgICBjb25zb2xlLnRpbWUobWFya2VyTmFtZSk7XG4gIH1cblxuICB2YXIgbWFya3VwID0gUmVhY3RSZWNvbmNpbGVyLm1vdW50Q29tcG9uZW50KHdyYXBwZXJJbnN0YW5jZSwgdHJhbnNhY3Rpb24sIG51bGwsIFJlYWN0RE9NQ29udGFpbmVySW5mbyh3cmFwcGVySW5zdGFuY2UsIGNvbnRhaW5lciksIGNvbnRleHQsIDAgLyogcGFyZW50RGVidWdJRCAqL1xuICApO1xuXG4gIGlmIChtYXJrZXJOYW1lKSB7XG4gICAgY29uc29sZS50aW1lRW5kKG1hcmtlck5hbWUpO1xuICB9XG5cbiAgd3JhcHBlckluc3RhbmNlLl9yZW5kZXJlZENvbXBvbmVudC5fdG9wTGV2ZWxXcmFwcGVyID0gd3JhcHBlckluc3RhbmNlO1xuICBSZWFjdE1vdW50Ll9tb3VudEltYWdlSW50b05vZGUobWFya3VwLCBjb250YWluZXIsIHdyYXBwZXJJbnN0YW5jZSwgc2hvdWxkUmV1c2VNYXJrdXAsIHRyYW5zYWN0aW9uKTtcbn1cblxuLyoqXG4gKiBCYXRjaGVkIG1vdW50LlxuICpcbiAqIEBwYXJhbSB7UmVhY3RDb21wb25lbnR9IGNvbXBvbmVudEluc3RhbmNlIFRoZSBpbnN0YW5jZSB0byBtb3VudC5cbiAqIEBwYXJhbSB7RE9NRWxlbWVudH0gY29udGFpbmVyIERPTSBlbGVtZW50IHRvIG1vdW50IGludG8uXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHNob3VsZFJldXNlTWFya3VwIElmIHRydWUsIGRvIG5vdCBpbnNlcnQgbWFya3VwXG4gKi9cbmZ1bmN0aW9uIGJhdGNoZWRNb3VudENvbXBvbmVudEludG9Ob2RlKGNvbXBvbmVudEluc3RhbmNlLCBjb250YWluZXIsIHNob3VsZFJldXNlTWFya3VwLCBjb250ZXh0KSB7XG4gIHZhciB0cmFuc2FjdGlvbiA9IFJlYWN0VXBkYXRlcy5SZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9uLmdldFBvb2xlZChcbiAgLyogdXNlQ3JlYXRlRWxlbWVudCAqL1xuICAhc2hvdWxkUmV1c2VNYXJrdXAgJiYgUmVhY3RET01GZWF0dXJlRmxhZ3MudXNlQ3JlYXRlRWxlbWVudCk7XG4gIHRyYW5zYWN0aW9uLnBlcmZvcm0obW91bnRDb21wb25lbnRJbnRvTm9kZSwgbnVsbCwgY29tcG9uZW50SW5zdGFuY2UsIGNvbnRhaW5lciwgdHJhbnNhY3Rpb24sIHNob3VsZFJldXNlTWFya3VwLCBjb250ZXh0KTtcbiAgUmVhY3RVcGRhdGVzLlJlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb24ucmVsZWFzZSh0cmFuc2FjdGlvbik7XG59XG5cbi8qKlxuICogVW5tb3VudHMgYSBjb21wb25lbnQgYW5kIHJlbW92ZXMgaXQgZnJvbSB0aGUgRE9NLlxuICpcbiAqIEBwYXJhbSB7UmVhY3RDb21wb25lbnR9IGluc3RhbmNlIFJlYWN0IGNvbXBvbmVudCBpbnN0YW5jZS5cbiAqIEBwYXJhbSB7RE9NRWxlbWVudH0gY29udGFpbmVyIERPTSBlbGVtZW50IHRvIHVubW91bnQgZnJvbS5cbiAqIEBmaW5hbFxuICogQGludGVybmFsXG4gKiBAc2VlIHtSZWFjdE1vdW50LnVubW91bnRDb21wb25lbnRBdE5vZGV9XG4gKi9cbmZ1bmN0aW9uIHVubW91bnRDb21wb25lbnRGcm9tTm9kZShpbnN0YW5jZSwgY29udGFpbmVyLCBzYWZlbHkpIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBSZWFjdEluc3RydW1lbnRhdGlvbi5kZWJ1Z1Rvb2wub25CZWdpbkZsdXNoKCk7XG4gIH1cbiAgUmVhY3RSZWNvbmNpbGVyLnVubW91bnRDb21wb25lbnQoaW5zdGFuY2UsIHNhZmVseSk7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgUmVhY3RJbnN0cnVtZW50YXRpb24uZGVidWdUb29sLm9uRW5kRmx1c2goKTtcbiAgfVxuXG4gIGlmIChjb250YWluZXIubm9kZVR5cGUgPT09IERPQ19OT0RFX1RZUEUpIHtcbiAgICBjb250YWluZXIgPSBjb250YWluZXIuZG9jdW1lbnRFbGVtZW50O1xuICB9XG5cbiAgLy8gaHR0cDovL2pzcGVyZi5jb20vZW1wdHlpbmctYS1ub2RlXG4gIHdoaWxlIChjb250YWluZXIubGFzdENoaWxkKSB7XG4gICAgY29udGFpbmVyLnJlbW92ZUNoaWxkKGNvbnRhaW5lci5sYXN0Q2hpbGQpO1xuICB9XG59XG5cbi8qKlxuICogVHJ1ZSBpZiB0aGUgc3VwcGxpZWQgRE9NIG5vZGUgaGFzIGEgZGlyZWN0IFJlYWN0LXJlbmRlcmVkIGNoaWxkIHRoYXQgaXNcbiAqIG5vdCBhIFJlYWN0IHJvb3QgZWxlbWVudC4gVXNlZnVsIGZvciB3YXJuaW5nIGluIGByZW5kZXJgLFxuICogYHVubW91bnRDb21wb25lbnRBdE5vZGVgLCBldGMuXG4gKlxuICogQHBhcmFtIHs/RE9NRWxlbWVudH0gbm9kZSBUaGUgY2FuZGlkYXRlIERPTSBub2RlLlxuICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgRE9NIGVsZW1lbnQgY29udGFpbnMgYSBkaXJlY3QgY2hpbGQgdGhhdCB3YXNcbiAqIHJlbmRlcmVkIGJ5IFJlYWN0IGJ1dCBpcyBub3QgYSByb290IGVsZW1lbnQuXG4gKiBAaW50ZXJuYWxcbiAqL1xuZnVuY3Rpb24gaGFzTm9uUm9vdFJlYWN0Q2hpbGQoY29udGFpbmVyKSB7XG4gIHZhciByb290RWwgPSBnZXRSZWFjdFJvb3RFbGVtZW50SW5Db250YWluZXIoY29udGFpbmVyKTtcbiAgaWYgKHJvb3RFbCkge1xuICAgIHZhciBpbnN0ID0gUmVhY3RET01Db21wb25lbnRUcmVlLmdldEluc3RhbmNlRnJvbU5vZGUocm9vdEVsKTtcbiAgICByZXR1cm4gISEoaW5zdCAmJiBpbnN0Ll9ob3N0UGFyZW50KTtcbiAgfVxufVxuXG4vKipcbiAqIFRydWUgaWYgdGhlIHN1cHBsaWVkIERPTSBub2RlIGlzIGEgUmVhY3QgRE9NIGVsZW1lbnQgYW5kXG4gKiBpdCBoYXMgYmVlbiByZW5kZXJlZCBieSBhbm90aGVyIGNvcHkgb2YgUmVhY3QuXG4gKlxuICogQHBhcmFtIHs/RE9NRWxlbWVudH0gbm9kZSBUaGUgY2FuZGlkYXRlIERPTSBub2RlLlxuICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgRE9NIGhhcyBiZWVuIHJlbmRlcmVkIGJ5IGFub3RoZXIgY29weSBvZiBSZWFjdFxuICogQGludGVybmFsXG4gKi9cbmZ1bmN0aW9uIG5vZGVJc1JlbmRlcmVkQnlPdGhlckluc3RhbmNlKGNvbnRhaW5lcikge1xuICB2YXIgcm9vdEVsID0gZ2V0UmVhY3RSb290RWxlbWVudEluQ29udGFpbmVyKGNvbnRhaW5lcik7XG4gIHJldHVybiAhIShyb290RWwgJiYgaXNSZWFjdE5vZGUocm9vdEVsKSAmJiAhUmVhY3RET01Db21wb25lbnRUcmVlLmdldEluc3RhbmNlRnJvbU5vZGUocm9vdEVsKSk7XG59XG5cbi8qKlxuICogVHJ1ZSBpZiB0aGUgc3VwcGxpZWQgRE9NIG5vZGUgaXMgYSB2YWxpZCBub2RlIGVsZW1lbnQuXG4gKlxuICogQHBhcmFtIHs/RE9NRWxlbWVudH0gbm9kZSBUaGUgY2FuZGlkYXRlIERPTSBub2RlLlxuICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgRE9NIGlzIGEgdmFsaWQgRE9NIG5vZGUuXG4gKiBAaW50ZXJuYWxcbiAqL1xuZnVuY3Rpb24gaXNWYWxpZENvbnRhaW5lcihub2RlKSB7XG4gIHJldHVybiAhIShub2RlICYmIChub2RlLm5vZGVUeXBlID09PSBFTEVNRU5UX05PREVfVFlQRSB8fCBub2RlLm5vZGVUeXBlID09PSBET0NfTk9ERV9UWVBFIHx8IG5vZGUubm9kZVR5cGUgPT09IERPQ1VNRU5UX0ZSQUdNRU5UX05PREVfVFlQRSkpO1xufVxuXG4vKipcbiAqIFRydWUgaWYgdGhlIHN1cHBsaWVkIERPTSBub2RlIGlzIGEgdmFsaWQgUmVhY3Qgbm9kZSBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSB7P0RPTUVsZW1lbnR9IG5vZGUgVGhlIGNhbmRpZGF0ZSBET00gbm9kZS5cbiAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdGhlIERPTSBpcyBhIHZhbGlkIFJlYWN0IERPTSBub2RlLlxuICogQGludGVybmFsXG4gKi9cbmZ1bmN0aW9uIGlzUmVhY3ROb2RlKG5vZGUpIHtcbiAgcmV0dXJuIGlzVmFsaWRDb250YWluZXIobm9kZSkgJiYgKG5vZGUuaGFzQXR0cmlidXRlKFJPT1RfQVRUUl9OQU1FKSB8fCBub2RlLmhhc0F0dHJpYnV0ZShBVFRSX05BTUUpKTtcbn1cblxuZnVuY3Rpb24gZ2V0SG9zdFJvb3RJbnN0YW5jZUluQ29udGFpbmVyKGNvbnRhaW5lcikge1xuICB2YXIgcm9vdEVsID0gZ2V0UmVhY3RSb290RWxlbWVudEluQ29udGFpbmVyKGNvbnRhaW5lcik7XG4gIHZhciBwcmV2SG9zdEluc3RhbmNlID0gcm9vdEVsICYmIFJlYWN0RE9NQ29tcG9uZW50VHJlZS5nZXRJbnN0YW5jZUZyb21Ob2RlKHJvb3RFbCk7XG4gIHJldHVybiBwcmV2SG9zdEluc3RhbmNlICYmICFwcmV2SG9zdEluc3RhbmNlLl9ob3N0UGFyZW50ID8gcHJldkhvc3RJbnN0YW5jZSA6IG51bGw7XG59XG5cbmZ1bmN0aW9uIGdldFRvcExldmVsV3JhcHBlckluQ29udGFpbmVyKGNvbnRhaW5lcikge1xuICB2YXIgcm9vdCA9IGdldEhvc3RSb290SW5zdGFuY2VJbkNvbnRhaW5lcihjb250YWluZXIpO1xuICByZXR1cm4gcm9vdCA/IHJvb3QuX2hvc3RDb250YWluZXJJbmZvLl90b3BMZXZlbFdyYXBwZXIgOiBudWxsO1xufVxuXG4vKipcbiAqIFRlbXBvcmFyeSAoPykgaGFjayBzbyB0aGF0IHdlIGNhbiBzdG9yZSBhbGwgdG9wLWxldmVsIHBlbmRpbmcgdXBkYXRlcyBvblxuICogY29tcG9zaXRlcyBpbnN0ZWFkIG9mIGhhdmluZyB0byB3b3JyeSBhYm91dCBkaWZmZXJlbnQgdHlwZXMgb2YgY29tcG9uZW50c1xuICogaGVyZS5cbiAqL1xudmFyIHRvcExldmVsUm9vdENvdW50ZXIgPSAxO1xudmFyIFRvcExldmVsV3JhcHBlciA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5yb290SUQgPSB0b3BMZXZlbFJvb3RDb3VudGVyKys7XG59O1xuVG9wTGV2ZWxXcmFwcGVyLnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50ID0ge307XG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBUb3BMZXZlbFdyYXBwZXIuZGlzcGxheU5hbWUgPSAnVG9wTGV2ZWxXcmFwcGVyJztcbn1cblRvcExldmVsV3JhcHBlci5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5wcm9wcy5jaGlsZDtcbn07XG5Ub3BMZXZlbFdyYXBwZXIuaXNSZWFjdFRvcExldmVsV3JhcHBlciA9IHRydWU7XG5cbi8qKlxuICogTW91bnRpbmcgaXMgdGhlIHByb2Nlc3Mgb2YgaW5pdGlhbGl6aW5nIGEgUmVhY3QgY29tcG9uZW50IGJ5IGNyZWF0aW5nIGl0c1xuICogcmVwcmVzZW50YXRpdmUgRE9NIGVsZW1lbnRzIGFuZCBpbnNlcnRpbmcgdGhlbSBpbnRvIGEgc3VwcGxpZWQgYGNvbnRhaW5lcmAuXG4gKiBBbnkgcHJpb3IgY29udGVudCBpbnNpZGUgYGNvbnRhaW5lcmAgaXMgZGVzdHJveWVkIGluIHRoZSBwcm9jZXNzLlxuICpcbiAqICAgUmVhY3RNb3VudC5yZW5kZXIoXG4gKiAgICAgY29tcG9uZW50LFxuICogICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb250YWluZXInKVxuICogICApO1xuICpcbiAqICAgPGRpdiBpZD1cImNvbnRhaW5lclwiPiAgICAgICAgICAgICAgICAgICA8LS0gU3VwcGxpZWQgYGNvbnRhaW5lcmAuXG4gKiAgICAgPGRpdiBkYXRhLXJlYWN0aWQ9XCIuM1wiPiAgICAgICAgICAgICAgPC0tIFJlbmRlcmVkIHJlYWN0Um9vdCBvZiBSZWFjdFxuICogICAgICAgLy8gLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50LlxuICogICAgIDwvZGl2PlxuICogICA8L2Rpdj5cbiAqXG4gKiBJbnNpZGUgb2YgYGNvbnRhaW5lcmAsIHRoZSBmaXJzdCBlbGVtZW50IHJlbmRlcmVkIGlzIHRoZSBcInJlYWN0Um9vdFwiLlxuICovXG52YXIgUmVhY3RNb3VudCA9IHtcbiAgVG9wTGV2ZWxXcmFwcGVyOiBUb3BMZXZlbFdyYXBwZXIsXG5cbiAgLyoqXG4gICAqIFVzZWQgYnkgZGV2dG9vbHMuIFRoZSBrZXlzIGFyZSBub3QgaW1wb3J0YW50LlxuICAgKi9cbiAgX2luc3RhbmNlc0J5UmVhY3RSb290SUQ6IGluc3RhbmNlc0J5UmVhY3RSb290SUQsXG5cbiAgLyoqXG4gICAqIFRoaXMgaXMgYSBob29rIHByb3ZpZGVkIHRvIHN1cHBvcnQgcmVuZGVyaW5nIFJlYWN0IGNvbXBvbmVudHMgd2hpbGVcbiAgICogZW5zdXJpbmcgdGhhdCB0aGUgYXBwYXJlbnQgc2Nyb2xsIHBvc2l0aW9uIG9mIGl0cyBgY29udGFpbmVyYCBkb2VzIG5vdFxuICAgKiBjaGFuZ2UuXG4gICAqXG4gICAqIEBwYXJhbSB7RE9NRWxlbWVudH0gY29udGFpbmVyIFRoZSBgY29udGFpbmVyYCBiZWluZyByZW5kZXJlZCBpbnRvLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSByZW5kZXJDYWxsYmFjayBUaGlzIG11c3QgYmUgY2FsbGVkIG9uY2UgdG8gZG8gdGhlIHJlbmRlci5cbiAgICovXG4gIHNjcm9sbE1vbml0b3I6IGZ1bmN0aW9uIChjb250YWluZXIsIHJlbmRlckNhbGxiYWNrKSB7XG4gICAgcmVuZGVyQ2FsbGJhY2soKTtcbiAgfSxcblxuICAvKipcbiAgICogVGFrZSBhIGNvbXBvbmVudCB0aGF0J3MgYWxyZWFkeSBtb3VudGVkIGludG8gdGhlIERPTSBhbmQgcmVwbGFjZSBpdHMgcHJvcHNcbiAgICogQHBhcmFtIHtSZWFjdENvbXBvbmVudH0gcHJldkNvbXBvbmVudCBjb21wb25lbnQgaW5zdGFuY2UgYWxyZWFkeSBpbiB0aGUgRE9NXG4gICAqIEBwYXJhbSB7UmVhY3RFbGVtZW50fSBuZXh0RWxlbWVudCBjb21wb25lbnQgaW5zdGFuY2UgdG8gcmVuZGVyXG4gICAqIEBwYXJhbSB7RE9NRWxlbWVudH0gY29udGFpbmVyIGNvbnRhaW5lciB0byByZW5kZXIgaW50b1xuICAgKiBAcGFyYW0gez9mdW5jdGlvbn0gY2FsbGJhY2sgZnVuY3Rpb24gdHJpZ2dlcmVkIG9uIGNvbXBsZXRpb25cbiAgICovXG4gIF91cGRhdGVSb290Q29tcG9uZW50OiBmdW5jdGlvbiAocHJldkNvbXBvbmVudCwgbmV4dEVsZW1lbnQsIG5leHRDb250ZXh0LCBjb250YWluZXIsIGNhbGxiYWNrKSB7XG4gICAgUmVhY3RNb3VudC5zY3JvbGxNb25pdG9yKGNvbnRhaW5lciwgZnVuY3Rpb24gKCkge1xuICAgICAgUmVhY3RVcGRhdGVRdWV1ZS5lbnF1ZXVlRWxlbWVudEludGVybmFsKHByZXZDb21wb25lbnQsIG5leHRFbGVtZW50LCBuZXh0Q29udGV4dCk7XG4gICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgUmVhY3RVcGRhdGVRdWV1ZS5lbnF1ZXVlQ2FsbGJhY2tJbnRlcm5hbChwcmV2Q29tcG9uZW50LCBjYWxsYmFjayk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gcHJldkNvbXBvbmVudDtcbiAgfSxcblxuICAvKipcbiAgICogUmVuZGVyIGEgbmV3IGNvbXBvbmVudCBpbnRvIHRoZSBET00uIEhvb2tlZCBieSBob29rcyFcbiAgICpcbiAgICogQHBhcmFtIHtSZWFjdEVsZW1lbnR9IG5leHRFbGVtZW50IGVsZW1lbnQgdG8gcmVuZGVyXG4gICAqIEBwYXJhbSB7RE9NRWxlbWVudH0gY29udGFpbmVyIGNvbnRhaW5lciB0byByZW5kZXIgaW50b1xuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNob3VsZFJldXNlTWFya3VwIGlmIHdlIHNob3VsZCBza2lwIHRoZSBtYXJrdXAgaW5zZXJ0aW9uXG4gICAqIEByZXR1cm4ge1JlYWN0Q29tcG9uZW50fSBuZXh0Q29tcG9uZW50XG4gICAqL1xuICBfcmVuZGVyTmV3Um9vdENvbXBvbmVudDogZnVuY3Rpb24gKG5leHRFbGVtZW50LCBjb250YWluZXIsIHNob3VsZFJldXNlTWFya3VwLCBjb250ZXh0KSB7XG4gICAgLy8gVmFyaW91cyBwYXJ0cyBvZiBvdXIgY29kZSAoc3VjaCBhcyBSZWFjdENvbXBvc2l0ZUNvbXBvbmVudCdzXG4gICAgLy8gX3JlbmRlclZhbGlkYXRlZENvbXBvbmVudCkgYXNzdW1lIHRoYXQgY2FsbHMgdG8gcmVuZGVyIGFyZW4ndCBuZXN0ZWQ7XG4gICAgLy8gdmVyaWZ5IHRoYXQgdGhhdCdzIHRoZSBjYXNlLlxuICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQgPT0gbnVsbCwgJ19yZW5kZXJOZXdSb290Q29tcG9uZW50KCk6IFJlbmRlciBtZXRob2RzIHNob3VsZCBiZSBhIHB1cmUgZnVuY3Rpb24gJyArICdvZiBwcm9wcyBhbmQgc3RhdGU7IHRyaWdnZXJpbmcgbmVzdGVkIGNvbXBvbmVudCB1cGRhdGVzIGZyb20gJyArICdyZW5kZXIgaXMgbm90IGFsbG93ZWQuIElmIG5lY2Vzc2FyeSwgdHJpZ2dlciBuZXN0ZWQgdXBkYXRlcyBpbiAnICsgJ2NvbXBvbmVudERpZFVwZGF0ZS4gQ2hlY2sgdGhlIHJlbmRlciBtZXRob2Qgb2YgJXMuJywgUmVhY3RDdXJyZW50T3duZXIuY3VycmVudCAmJiBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50LmdldE5hbWUoKSB8fCAnUmVhY3RDb21wb3NpdGVDb21wb25lbnQnKSA6IHZvaWQgMDtcblxuICAgICFpc1ZhbGlkQ29udGFpbmVyKGNvbnRhaW5lcikgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAnX3JlZ2lzdGVyQ29tcG9uZW50KC4uLik6IFRhcmdldCBjb250YWluZXIgaXMgbm90IGEgRE9NIGVsZW1lbnQuJykgOiBfcHJvZEludmFyaWFudCgnMzcnKSA6IHZvaWQgMDtcblxuICAgIFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlci5lbnN1cmVTY3JvbGxWYWx1ZU1vbml0b3JpbmcoKTtcbiAgICB2YXIgY29tcG9uZW50SW5zdGFuY2UgPSBpbnN0YW50aWF0ZVJlYWN0Q29tcG9uZW50KG5leHRFbGVtZW50LCBmYWxzZSk7XG5cbiAgICAvLyBUaGUgaW5pdGlhbCByZW5kZXIgaXMgc3luY2hyb25vdXMgYnV0IGFueSB1cGRhdGVzIHRoYXQgaGFwcGVuIGR1cmluZ1xuICAgIC8vIHJlbmRlcmluZywgaW4gY29tcG9uZW50V2lsbE1vdW50IG9yIGNvbXBvbmVudERpZE1vdW50LCB3aWxsIGJlIGJhdGNoZWRcbiAgICAvLyBhY2NvcmRpbmcgdG8gdGhlIGN1cnJlbnQgYmF0Y2hpbmcgc3RyYXRlZ3kuXG5cbiAgICBSZWFjdFVwZGF0ZXMuYmF0Y2hlZFVwZGF0ZXMoYmF0Y2hlZE1vdW50Q29tcG9uZW50SW50b05vZGUsIGNvbXBvbmVudEluc3RhbmNlLCBjb250YWluZXIsIHNob3VsZFJldXNlTWFya3VwLCBjb250ZXh0KTtcblxuICAgIHZhciB3cmFwcGVySUQgPSBjb21wb25lbnRJbnN0YW5jZS5faW5zdGFuY2Uucm9vdElEO1xuICAgIGluc3RhbmNlc0J5UmVhY3RSb290SURbd3JhcHBlcklEXSA9IGNvbXBvbmVudEluc3RhbmNlO1xuXG4gICAgcmV0dXJuIGNvbXBvbmVudEluc3RhbmNlO1xuICB9LFxuXG4gIC8qKlxuICAgKiBSZW5kZXJzIGEgUmVhY3QgY29tcG9uZW50IGludG8gdGhlIERPTSBpbiB0aGUgc3VwcGxpZWQgYGNvbnRhaW5lcmAuXG4gICAqXG4gICAqIElmIHRoZSBSZWFjdCBjb21wb25lbnQgd2FzIHByZXZpb3VzbHkgcmVuZGVyZWQgaW50byBgY29udGFpbmVyYCwgdGhpcyB3aWxsXG4gICAqIHBlcmZvcm0gYW4gdXBkYXRlIG9uIGl0IGFuZCBvbmx5IG11dGF0ZSB0aGUgRE9NIGFzIG5lY2Vzc2FyeSB0byByZWZsZWN0IHRoZVxuICAgKiBsYXRlc3QgUmVhY3QgY29tcG9uZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0Q29tcG9uZW50fSBwYXJlbnRDb21wb25lbnQgVGhlIGNvbmNlcHR1YWwgcGFyZW50IG9mIHRoaXMgcmVuZGVyIHRyZWUuXG4gICAqIEBwYXJhbSB7UmVhY3RFbGVtZW50fSBuZXh0RWxlbWVudCBDb21wb25lbnQgZWxlbWVudCB0byByZW5kZXIuXG4gICAqIEBwYXJhbSB7RE9NRWxlbWVudH0gY29udGFpbmVyIERPTSBlbGVtZW50IHRvIHJlbmRlciBpbnRvLlxuICAgKiBAcGFyYW0gez9mdW5jdGlvbn0gY2FsbGJhY2sgZnVuY3Rpb24gdHJpZ2dlcmVkIG9uIGNvbXBsZXRpb25cbiAgICogQHJldHVybiB7UmVhY3RDb21wb25lbnR9IENvbXBvbmVudCBpbnN0YW5jZSByZW5kZXJlZCBpbiBgY29udGFpbmVyYC5cbiAgICovXG4gIHJlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyOiBmdW5jdGlvbiAocGFyZW50Q29tcG9uZW50LCBuZXh0RWxlbWVudCwgY29udGFpbmVyLCBjYWxsYmFjaykge1xuICAgICEocGFyZW50Q29tcG9uZW50ICE9IG51bGwgJiYgUmVhY3RJbnN0YW5jZU1hcC5oYXMocGFyZW50Q29tcG9uZW50KSkgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAncGFyZW50Q29tcG9uZW50IG11c3QgYmUgYSB2YWxpZCBSZWFjdCBDb21wb25lbnQnKSA6IF9wcm9kSW52YXJpYW50KCczOCcpIDogdm9pZCAwO1xuICAgIHJldHVybiBSZWFjdE1vdW50Ll9yZW5kZXJTdWJ0cmVlSW50b0NvbnRhaW5lcihwYXJlbnRDb21wb25lbnQsIG5leHRFbGVtZW50LCBjb250YWluZXIsIGNhbGxiYWNrKTtcbiAgfSxcblxuICBfcmVuZGVyU3VidHJlZUludG9Db250YWluZXI6IGZ1bmN0aW9uIChwYXJlbnRDb21wb25lbnQsIG5leHRFbGVtZW50LCBjb250YWluZXIsIGNhbGxiYWNrKSB7XG4gICAgUmVhY3RVcGRhdGVRdWV1ZS52YWxpZGF0ZUNhbGxiYWNrKGNhbGxiYWNrLCAnUmVhY3RET00ucmVuZGVyJyk7XG4gICAgIVJlYWN0LmlzVmFsaWRFbGVtZW50KG5leHRFbGVtZW50KSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICdSZWFjdERPTS5yZW5kZXIoKTogSW52YWxpZCBjb21wb25lbnQgZWxlbWVudC4lcycsIHR5cGVvZiBuZXh0RWxlbWVudCA9PT0gJ3N0cmluZycgPyBcIiBJbnN0ZWFkIG9mIHBhc3NpbmcgYSBzdHJpbmcgbGlrZSAnZGl2JywgcGFzcyBcIiArIFwiUmVhY3QuY3JlYXRlRWxlbWVudCgnZGl2Jykgb3IgPGRpdiAvPi5cIiA6IHR5cGVvZiBuZXh0RWxlbWVudCA9PT0gJ2Z1bmN0aW9uJyA/ICcgSW5zdGVhZCBvZiBwYXNzaW5nIGEgY2xhc3MgbGlrZSBGb28sIHBhc3MgJyArICdSZWFjdC5jcmVhdGVFbGVtZW50KEZvbykgb3IgPEZvbyAvPi4nIDogLy8gQ2hlY2sgaWYgaXQgcXVhY2tzIGxpa2UgYW4gZWxlbWVudFxuICAgIG5leHRFbGVtZW50ICE9IG51bGwgJiYgbmV4dEVsZW1lbnQucHJvcHMgIT09IHVuZGVmaW5lZCA/ICcgVGhpcyBtYXkgYmUgY2F1c2VkIGJ5IHVuaW50ZW50aW9uYWxseSBsb2FkaW5nIHR3byBpbmRlcGVuZGVudCAnICsgJ2NvcGllcyBvZiBSZWFjdC4nIDogJycpIDogX3Byb2RJbnZhcmlhbnQoJzM5JywgdHlwZW9mIG5leHRFbGVtZW50ID09PSAnc3RyaW5nJyA/IFwiIEluc3RlYWQgb2YgcGFzc2luZyBhIHN0cmluZyBsaWtlICdkaXYnLCBwYXNzIFwiICsgXCJSZWFjdC5jcmVhdGVFbGVtZW50KCdkaXYnKSBvciA8ZGl2IC8+LlwiIDogdHlwZW9mIG5leHRFbGVtZW50ID09PSAnZnVuY3Rpb24nID8gJyBJbnN0ZWFkIG9mIHBhc3NpbmcgYSBjbGFzcyBsaWtlIEZvbywgcGFzcyAnICsgJ1JlYWN0LmNyZWF0ZUVsZW1lbnQoRm9vKSBvciA8Rm9vIC8+LicgOiBuZXh0RWxlbWVudCAhPSBudWxsICYmIG5leHRFbGVtZW50LnByb3BzICE9PSB1bmRlZmluZWQgPyAnIFRoaXMgbWF5IGJlIGNhdXNlZCBieSB1bmludGVudGlvbmFsbHkgbG9hZGluZyB0d28gaW5kZXBlbmRlbnQgJyArICdjb3BpZXMgb2YgUmVhY3QuJyA6ICcnKSA6IHZvaWQgMDtcblxuICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKCFjb250YWluZXIgfHwgIWNvbnRhaW5lci50YWdOYW1lIHx8IGNvbnRhaW5lci50YWdOYW1lLnRvVXBwZXJDYXNlKCkgIT09ICdCT0RZJywgJ3JlbmRlcigpOiBSZW5kZXJpbmcgY29tcG9uZW50cyBkaXJlY3RseSBpbnRvIGRvY3VtZW50LmJvZHkgaXMgJyArICdkaXNjb3VyYWdlZCwgc2luY2UgaXRzIGNoaWxkcmVuIGFyZSBvZnRlbiBtYW5pcHVsYXRlZCBieSB0aGlyZC1wYXJ0eSAnICsgJ3NjcmlwdHMgYW5kIGJyb3dzZXIgZXh0ZW5zaW9ucy4gVGhpcyBtYXkgbGVhZCB0byBzdWJ0bGUgJyArICdyZWNvbmNpbGlhdGlvbiBpc3N1ZXMuIFRyeSByZW5kZXJpbmcgaW50byBhIGNvbnRhaW5lciBlbGVtZW50IGNyZWF0ZWQgJyArICdmb3IgeW91ciBhcHAuJykgOiB2b2lkIDA7XG5cbiAgICB2YXIgbmV4dFdyYXBwZWRFbGVtZW50ID0gUmVhY3QuY3JlYXRlRWxlbWVudChUb3BMZXZlbFdyYXBwZXIsIHtcbiAgICAgIGNoaWxkOiBuZXh0RWxlbWVudFxuICAgIH0pO1xuXG4gICAgdmFyIG5leHRDb250ZXh0O1xuICAgIGlmIChwYXJlbnRDb21wb25lbnQpIHtcbiAgICAgIHZhciBwYXJlbnRJbnN0ID0gUmVhY3RJbnN0YW5jZU1hcC5nZXQocGFyZW50Q29tcG9uZW50KTtcbiAgICAgIG5leHRDb250ZXh0ID0gcGFyZW50SW5zdC5fcHJvY2Vzc0NoaWxkQ29udGV4dChwYXJlbnRJbnN0Ll9jb250ZXh0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV4dENvbnRleHQgPSBlbXB0eU9iamVjdDtcbiAgICB9XG5cbiAgICB2YXIgcHJldkNvbXBvbmVudCA9IGdldFRvcExldmVsV3JhcHBlckluQ29udGFpbmVyKGNvbnRhaW5lcik7XG5cbiAgICBpZiAocHJldkNvbXBvbmVudCkge1xuICAgICAgdmFyIHByZXZXcmFwcGVkRWxlbWVudCA9IHByZXZDb21wb25lbnQuX2N1cnJlbnRFbGVtZW50O1xuICAgICAgdmFyIHByZXZFbGVtZW50ID0gcHJldldyYXBwZWRFbGVtZW50LnByb3BzLmNoaWxkO1xuICAgICAgaWYgKHNob3VsZFVwZGF0ZVJlYWN0Q29tcG9uZW50KHByZXZFbGVtZW50LCBuZXh0RWxlbWVudCkpIHtcbiAgICAgICAgdmFyIHB1YmxpY0luc3QgPSBwcmV2Q29tcG9uZW50Ll9yZW5kZXJlZENvbXBvbmVudC5nZXRQdWJsaWNJbnN0YW5jZSgpO1xuICAgICAgICB2YXIgdXBkYXRlZENhbGxiYWNrID0gY2FsbGJhY2sgJiYgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGNhbGxiYWNrLmNhbGwocHVibGljSW5zdCk7XG4gICAgICAgIH07XG4gICAgICAgIFJlYWN0TW91bnQuX3VwZGF0ZVJvb3RDb21wb25lbnQocHJldkNvbXBvbmVudCwgbmV4dFdyYXBwZWRFbGVtZW50LCBuZXh0Q29udGV4dCwgY29udGFpbmVyLCB1cGRhdGVkQ2FsbGJhY2spO1xuICAgICAgICByZXR1cm4gcHVibGljSW5zdDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIFJlYWN0TW91bnQudW5tb3VudENvbXBvbmVudEF0Tm9kZShjb250YWluZXIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciByZWFjdFJvb3RFbGVtZW50ID0gZ2V0UmVhY3RSb290RWxlbWVudEluQ29udGFpbmVyKGNvbnRhaW5lcik7XG4gICAgdmFyIGNvbnRhaW5lckhhc1JlYWN0TWFya3VwID0gcmVhY3RSb290RWxlbWVudCAmJiAhIWludGVybmFsR2V0SUQocmVhY3RSb290RWxlbWVudCk7XG4gICAgdmFyIGNvbnRhaW5lckhhc05vblJvb3RSZWFjdENoaWxkID0gaGFzTm9uUm9vdFJlYWN0Q2hpbGQoY29udGFpbmVyKTtcblxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyghY29udGFpbmVySGFzTm9uUm9vdFJlYWN0Q2hpbGQsICdyZW5kZXIoLi4uKTogUmVwbGFjaW5nIFJlYWN0LXJlbmRlcmVkIGNoaWxkcmVuIHdpdGggYSBuZXcgcm9vdCAnICsgJ2NvbXBvbmVudC4gSWYgeW91IGludGVuZGVkIHRvIHVwZGF0ZSB0aGUgY2hpbGRyZW4gb2YgdGhpcyBub2RlLCAnICsgJ3lvdSBzaG91bGQgaW5zdGVhZCBoYXZlIHRoZSBleGlzdGluZyBjaGlsZHJlbiB1cGRhdGUgdGhlaXIgc3RhdGUgJyArICdhbmQgcmVuZGVyIHRoZSBuZXcgY29tcG9uZW50cyBpbnN0ZWFkIG9mIGNhbGxpbmcgUmVhY3RET00ucmVuZGVyLicpIDogdm9pZCAwO1xuXG4gICAgICBpZiAoIWNvbnRhaW5lckhhc1JlYWN0TWFya3VwIHx8IHJlYWN0Um9vdEVsZW1lbnQubmV4dFNpYmxpbmcpIHtcbiAgICAgICAgdmFyIHJvb3RFbGVtZW50U2libGluZyA9IHJlYWN0Um9vdEVsZW1lbnQ7XG4gICAgICAgIHdoaWxlIChyb290RWxlbWVudFNpYmxpbmcpIHtcbiAgICAgICAgICBpZiAoaW50ZXJuYWxHZXRJRChyb290RWxlbWVudFNpYmxpbmcpKSB7XG4gICAgICAgICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyhmYWxzZSwgJ3JlbmRlcigpOiBUYXJnZXQgbm9kZSBoYXMgbWFya3VwIHJlbmRlcmVkIGJ5IFJlYWN0LCBidXQgdGhlcmUgJyArICdhcmUgdW5yZWxhdGVkIG5vZGVzIGFzIHdlbGwuIFRoaXMgaXMgbW9zdCBjb21tb25seSBjYXVzZWQgYnkgJyArICd3aGl0ZS1zcGFjZSBpbnNlcnRlZCBhcm91bmQgc2VydmVyLXJlbmRlcmVkIG1hcmt1cC4nKSA6IHZvaWQgMDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICByb290RWxlbWVudFNpYmxpbmcgPSByb290RWxlbWVudFNpYmxpbmcubmV4dFNpYmxpbmc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgc2hvdWxkUmV1c2VNYXJrdXAgPSBjb250YWluZXJIYXNSZWFjdE1hcmt1cCAmJiAhcHJldkNvbXBvbmVudCAmJiAhY29udGFpbmVySGFzTm9uUm9vdFJlYWN0Q2hpbGQ7XG4gICAgdmFyIGNvbXBvbmVudCA9IFJlYWN0TW91bnQuX3JlbmRlck5ld1Jvb3RDb21wb25lbnQobmV4dFdyYXBwZWRFbGVtZW50LCBjb250YWluZXIsIHNob3VsZFJldXNlTWFya3VwLCBuZXh0Q29udGV4dCkuX3JlbmRlcmVkQ29tcG9uZW50LmdldFB1YmxpY0luc3RhbmNlKCk7XG4gICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICBjYWxsYmFjay5jYWxsKGNvbXBvbmVudCk7XG4gICAgfVxuICAgIHJldHVybiBjb21wb25lbnQ7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgYSBSZWFjdCBjb21wb25lbnQgaW50byB0aGUgRE9NIGluIHRoZSBzdXBwbGllZCBgY29udGFpbmVyYC5cbiAgICogU2VlIGh0dHBzOi8vZmFjZWJvb2suZ2l0aHViLmlvL3JlYWN0L2RvY3MvdG9wLWxldmVsLWFwaS5odG1sI3JlYWN0ZG9tLnJlbmRlclxuICAgKlxuICAgKiBJZiB0aGUgUmVhY3QgY29tcG9uZW50IHdhcyBwcmV2aW91c2x5IHJlbmRlcmVkIGludG8gYGNvbnRhaW5lcmAsIHRoaXMgd2lsbFxuICAgKiBwZXJmb3JtIGFuIHVwZGF0ZSBvbiBpdCBhbmQgb25seSBtdXRhdGUgdGhlIERPTSBhcyBuZWNlc3NhcnkgdG8gcmVmbGVjdCB0aGVcbiAgICogbGF0ZXN0IFJlYWN0IGNvbXBvbmVudC5cbiAgICpcbiAgICogQHBhcmFtIHtSZWFjdEVsZW1lbnR9IG5leHRFbGVtZW50IENvbXBvbmVudCBlbGVtZW50IHRvIHJlbmRlci5cbiAgICogQHBhcmFtIHtET01FbGVtZW50fSBjb250YWluZXIgRE9NIGVsZW1lbnQgdG8gcmVuZGVyIGludG8uXG4gICAqIEBwYXJhbSB7P2Z1bmN0aW9ufSBjYWxsYmFjayBmdW5jdGlvbiB0cmlnZ2VyZWQgb24gY29tcGxldGlvblxuICAgKiBAcmV0dXJuIHtSZWFjdENvbXBvbmVudH0gQ29tcG9uZW50IGluc3RhbmNlIHJlbmRlcmVkIGluIGBjb250YWluZXJgLlxuICAgKi9cbiAgcmVuZGVyOiBmdW5jdGlvbiAobmV4dEVsZW1lbnQsIGNvbnRhaW5lciwgY2FsbGJhY2spIHtcbiAgICByZXR1cm4gUmVhY3RNb3VudC5fcmVuZGVyU3VidHJlZUludG9Db250YWluZXIobnVsbCwgbmV4dEVsZW1lbnQsIGNvbnRhaW5lciwgY2FsbGJhY2spO1xuICB9LFxuXG4gIC8qKlxuICAgKiBVbm1vdW50cyBhbmQgZGVzdHJveXMgdGhlIFJlYWN0IGNvbXBvbmVudCByZW5kZXJlZCBpbiB0aGUgYGNvbnRhaW5lcmAuXG4gICAqIFNlZSBodHRwczovL2ZhY2Vib29rLmdpdGh1Yi5pby9yZWFjdC9kb2NzL3RvcC1sZXZlbC1hcGkuaHRtbCNyZWFjdGRvbS51bm1vdW50Y29tcG9uZW50YXRub2RlXG4gICAqXG4gICAqIEBwYXJhbSB7RE9NRWxlbWVudH0gY29udGFpbmVyIERPTSBlbGVtZW50IGNvbnRhaW5pbmcgYSBSZWFjdCBjb21wb25lbnQuXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgYSBjb21wb25lbnQgd2FzIGZvdW5kIGluIGFuZCB1bm1vdW50ZWQgZnJvbVxuICAgKiAgICAgICAgICAgICAgICAgICBgY29udGFpbmVyYFxuICAgKi9cbiAgdW5tb3VudENvbXBvbmVudEF0Tm9kZTogZnVuY3Rpb24gKGNvbnRhaW5lcikge1xuICAgIC8vIFZhcmlvdXMgcGFydHMgb2Ygb3VyIGNvZGUgKHN1Y2ggYXMgUmVhY3RDb21wb3NpdGVDb21wb25lbnQnc1xuICAgIC8vIF9yZW5kZXJWYWxpZGF0ZWRDb21wb25lbnQpIGFzc3VtZSB0aGF0IGNhbGxzIHRvIHJlbmRlciBhcmVuJ3QgbmVzdGVkO1xuICAgIC8vIHZlcmlmeSB0aGF0IHRoYXQncyB0aGUgY2FzZS4gKFN0cmljdGx5IHNwZWFraW5nLCB1bm1vdW50aW5nIHdvbid0IGNhdXNlIGFcbiAgICAvLyByZW5kZXIgYnV0IHdlIHN0aWxsIGRvbid0IGV4cGVjdCB0byBiZSBpbiBhIHJlbmRlciBjYWxsIGhlcmUuKVxuICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQgPT0gbnVsbCwgJ3VubW91bnRDb21wb25lbnRBdE5vZGUoKTogUmVuZGVyIG1ldGhvZHMgc2hvdWxkIGJlIGEgcHVyZSBmdW5jdGlvbiAnICsgJ29mIHByb3BzIGFuZCBzdGF0ZTsgdHJpZ2dlcmluZyBuZXN0ZWQgY29tcG9uZW50IHVwZGF0ZXMgZnJvbSByZW5kZXIgJyArICdpcyBub3QgYWxsb3dlZC4gSWYgbmVjZXNzYXJ5LCB0cmlnZ2VyIG5lc3RlZCB1cGRhdGVzIGluICcgKyAnY29tcG9uZW50RGlkVXBkYXRlLiBDaGVjayB0aGUgcmVuZGVyIG1ldGhvZCBvZiAlcy4nLCBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50ICYmIFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQuZ2V0TmFtZSgpIHx8ICdSZWFjdENvbXBvc2l0ZUNvbXBvbmVudCcpIDogdm9pZCAwO1xuXG4gICAgIWlzVmFsaWRDb250YWluZXIoY29udGFpbmVyKSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICd1bm1vdW50Q29tcG9uZW50QXROb2RlKC4uLik6IFRhcmdldCBjb250YWluZXIgaXMgbm90IGEgRE9NIGVsZW1lbnQuJykgOiBfcHJvZEludmFyaWFudCgnNDAnKSA6IHZvaWQgMDtcblxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyghbm9kZUlzUmVuZGVyZWRCeU90aGVySW5zdGFuY2UoY29udGFpbmVyKSwgXCJ1bm1vdW50Q29tcG9uZW50QXROb2RlKCk6IFRoZSBub2RlIHlvdSdyZSBhdHRlbXB0aW5nIHRvIHVubW91bnQgXCIgKyAnd2FzIHJlbmRlcmVkIGJ5IGFub3RoZXIgY29weSBvZiBSZWFjdC4nKSA6IHZvaWQgMDtcbiAgICB9XG5cbiAgICB2YXIgcHJldkNvbXBvbmVudCA9IGdldFRvcExldmVsV3JhcHBlckluQ29udGFpbmVyKGNvbnRhaW5lcik7XG4gICAgaWYgKCFwcmV2Q29tcG9uZW50KSB7XG4gICAgICAvLyBDaGVjayBpZiB0aGUgbm9kZSBiZWluZyB1bm1vdW50ZWQgd2FzIHJlbmRlcmVkIGJ5IFJlYWN0LCBidXQgaXNuJ3QgYVxuICAgICAgLy8gcm9vdCBub2RlLlxuICAgICAgdmFyIGNvbnRhaW5lckhhc05vblJvb3RSZWFjdENoaWxkID0gaGFzTm9uUm9vdFJlYWN0Q2hpbGQoY29udGFpbmVyKTtcblxuICAgICAgLy8gQ2hlY2sgaWYgdGhlIGNvbnRhaW5lciBpdHNlbGYgaXMgYSBSZWFjdCByb290IG5vZGUuXG4gICAgICB2YXIgaXNDb250YWluZXJSZWFjdFJvb3QgPSBjb250YWluZXIubm9kZVR5cGUgPT09IDEgJiYgY29udGFpbmVyLmhhc0F0dHJpYnV0ZShST09UX0FUVFJfTkFNRSk7XG5cbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKCFjb250YWluZXJIYXNOb25Sb290UmVhY3RDaGlsZCwgXCJ1bm1vdW50Q29tcG9uZW50QXROb2RlKCk6IFRoZSBub2RlIHlvdSdyZSBhdHRlbXB0aW5nIHRvIHVubW91bnQgXCIgKyAnd2FzIHJlbmRlcmVkIGJ5IFJlYWN0IGFuZCBpcyBub3QgYSB0b3AtbGV2ZWwgY29udGFpbmVyLiAlcycsIGlzQ29udGFpbmVyUmVhY3RSb290ID8gJ1lvdSBtYXkgaGF2ZSBhY2NpZGVudGFsbHkgcGFzc2VkIGluIGEgUmVhY3Qgcm9vdCBub2RlIGluc3RlYWQgJyArICdvZiBpdHMgY29udGFpbmVyLicgOiAnSW5zdGVhZCwgaGF2ZSB0aGUgcGFyZW50IGNvbXBvbmVudCB1cGRhdGUgaXRzIHN0YXRlIGFuZCAnICsgJ3JlcmVuZGVyIGluIG9yZGVyIHRvIHJlbW92ZSB0aGlzIGNvbXBvbmVudC4nKSA6IHZvaWQgMDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBkZWxldGUgaW5zdGFuY2VzQnlSZWFjdFJvb3RJRFtwcmV2Q29tcG9uZW50Ll9pbnN0YW5jZS5yb290SURdO1xuICAgIFJlYWN0VXBkYXRlcy5iYXRjaGVkVXBkYXRlcyh1bm1vdW50Q29tcG9uZW50RnJvbU5vZGUsIHByZXZDb21wb25lbnQsIGNvbnRhaW5lciwgZmFsc2UpO1xuICAgIHJldHVybiB0cnVlO1xuICB9LFxuXG4gIF9tb3VudEltYWdlSW50b05vZGU6IGZ1bmN0aW9uIChtYXJrdXAsIGNvbnRhaW5lciwgaW5zdGFuY2UsIHNob3VsZFJldXNlTWFya3VwLCB0cmFuc2FjdGlvbikge1xuICAgICFpc1ZhbGlkQ29udGFpbmVyKGNvbnRhaW5lcikgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAnbW91bnRDb21wb25lbnRJbnRvTm9kZSguLi4pOiBUYXJnZXQgY29udGFpbmVyIGlzIG5vdCB2YWxpZC4nKSA6IF9wcm9kSW52YXJpYW50KCc0MScpIDogdm9pZCAwO1xuXG4gICAgaWYgKHNob3VsZFJldXNlTWFya3VwKSB7XG4gICAgICB2YXIgcm9vdEVsZW1lbnQgPSBnZXRSZWFjdFJvb3RFbGVtZW50SW5Db250YWluZXIoY29udGFpbmVyKTtcbiAgICAgIGlmIChSZWFjdE1hcmt1cENoZWNrc3VtLmNhblJldXNlTWFya3VwKG1hcmt1cCwgcm9vdEVsZW1lbnQpKSB7XG4gICAgICAgIFJlYWN0RE9NQ29tcG9uZW50VHJlZS5wcmVjYWNoZU5vZGUoaW5zdGFuY2UsIHJvb3RFbGVtZW50KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGNoZWNrc3VtID0gcm9vdEVsZW1lbnQuZ2V0QXR0cmlidXRlKFJlYWN0TWFya3VwQ2hlY2tzdW0uQ0hFQ0tTVU1fQVRUUl9OQU1FKTtcbiAgICAgICAgcm9vdEVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKFJlYWN0TWFya3VwQ2hlY2tzdW0uQ0hFQ0tTVU1fQVRUUl9OQU1FKTtcblxuICAgICAgICB2YXIgcm9vdE1hcmt1cCA9IHJvb3RFbGVtZW50Lm91dGVySFRNTDtcbiAgICAgICAgcm9vdEVsZW1lbnQuc2V0QXR0cmlidXRlKFJlYWN0TWFya3VwQ2hlY2tzdW0uQ0hFQ0tTVU1fQVRUUl9OQU1FLCBjaGVja3N1bSk7XG5cbiAgICAgICAgdmFyIG5vcm1hbGl6ZWRNYXJrdXAgPSBtYXJrdXA7XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgLy8gYmVjYXVzZSByb290TWFya3VwIGlzIHJldHJpZXZlZCBmcm9tIHRoZSBET00sIHZhcmlvdXMgbm9ybWFsaXphdGlvbnNcbiAgICAgICAgICAvLyB3aWxsIGhhdmUgb2NjdXJyZWQgd2hpY2ggd2lsbCBub3QgYmUgcHJlc2VudCBpbiBgbWFya3VwYC4gSGVyZSxcbiAgICAgICAgICAvLyBpbnNlcnQgbWFya3VwIGludG8gYSA8ZGl2PiBvciA8aWZyYW1lPiBkZXBlbmRpbmcgb24gdGhlIGNvbnRhaW5lclxuICAgICAgICAgIC8vIHR5cGUgdG8gcGVyZm9ybSB0aGUgc2FtZSBub3JtYWxpemF0aW9ucyBiZWZvcmUgY29tcGFyaW5nLlxuICAgICAgICAgIHZhciBub3JtYWxpemVyO1xuICAgICAgICAgIGlmIChjb250YWluZXIubm9kZVR5cGUgPT09IEVMRU1FTlRfTk9ERV9UWVBFKSB7XG4gICAgICAgICAgICBub3JtYWxpemVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBub3JtYWxpemVyLmlubmVySFRNTCA9IG1hcmt1cDtcbiAgICAgICAgICAgIG5vcm1hbGl6ZWRNYXJrdXAgPSBub3JtYWxpemVyLmlubmVySFRNTDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbm9ybWFsaXplciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lmcmFtZScpO1xuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChub3JtYWxpemVyKTtcbiAgICAgICAgICAgIG5vcm1hbGl6ZXIuY29udGVudERvY3VtZW50LndyaXRlKG1hcmt1cCk7XG4gICAgICAgICAgICBub3JtYWxpemVkTWFya3VwID0gbm9ybWFsaXplci5jb250ZW50RG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50Lm91dGVySFRNTDtcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQobm9ybWFsaXplcik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGRpZmZJbmRleCA9IGZpcnN0RGlmZmVyZW5jZUluZGV4KG5vcm1hbGl6ZWRNYXJrdXAsIHJvb3RNYXJrdXApO1xuICAgICAgICB2YXIgZGlmZmVyZW5jZSA9ICcgKGNsaWVudCkgJyArIG5vcm1hbGl6ZWRNYXJrdXAuc3Vic3RyaW5nKGRpZmZJbmRleCAtIDIwLCBkaWZmSW5kZXggKyAyMCkgKyAnXFxuIChzZXJ2ZXIpICcgKyByb290TWFya3VwLnN1YnN0cmluZyhkaWZmSW5kZXggLSAyMCwgZGlmZkluZGV4ICsgMjApO1xuXG4gICAgICAgICEoY29udGFpbmVyLm5vZGVUeXBlICE9PSBET0NfTk9ERV9UWVBFKSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICdZb3VcXCdyZSB0cnlpbmcgdG8gcmVuZGVyIGEgY29tcG9uZW50IHRvIHRoZSBkb2N1bWVudCB1c2luZyBzZXJ2ZXIgcmVuZGVyaW5nIGJ1dCB0aGUgY2hlY2tzdW0gd2FzIGludmFsaWQuIFRoaXMgdXN1YWxseSBtZWFucyB5b3UgcmVuZGVyZWQgYSBkaWZmZXJlbnQgY29tcG9uZW50IHR5cGUgb3IgcHJvcHMgb24gdGhlIGNsaWVudCBmcm9tIHRoZSBvbmUgb24gdGhlIHNlcnZlciwgb3IgeW91ciByZW5kZXIoKSBtZXRob2RzIGFyZSBpbXB1cmUuIFJlYWN0IGNhbm5vdCBoYW5kbGUgdGhpcyBjYXNlIGR1ZSB0byBjcm9zcy1icm93c2VyIHF1aXJrcyBieSByZW5kZXJpbmcgYXQgdGhlIGRvY3VtZW50IHJvb3QuIFlvdSBzaG91bGQgbG9vayBmb3IgZW52aXJvbm1lbnQgZGVwZW5kZW50IGNvZGUgaW4geW91ciBjb21wb25lbnRzIGFuZCBlbnN1cmUgdGhlIHByb3BzIGFyZSB0aGUgc2FtZSBjbGllbnQgYW5kIHNlcnZlciBzaWRlOlxcbiVzJywgZGlmZmVyZW5jZSkgOiBfcHJvZEludmFyaWFudCgnNDInLCBkaWZmZXJlbmNlKSA6IHZvaWQgMDtcblxuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKGZhbHNlLCAnUmVhY3QgYXR0ZW1wdGVkIHRvIHJldXNlIG1hcmt1cCBpbiBhIGNvbnRhaW5lciBidXQgdGhlICcgKyAnY2hlY2tzdW0gd2FzIGludmFsaWQuIFRoaXMgZ2VuZXJhbGx5IG1lYW5zIHRoYXQgeW91IGFyZSAnICsgJ3VzaW5nIHNlcnZlciByZW5kZXJpbmcgYW5kIHRoZSBtYXJrdXAgZ2VuZXJhdGVkIG9uIHRoZSAnICsgJ3NlcnZlciB3YXMgbm90IHdoYXQgdGhlIGNsaWVudCB3YXMgZXhwZWN0aW5nLiBSZWFjdCBpbmplY3RlZCAnICsgJ25ldyBtYXJrdXAgdG8gY29tcGVuc2F0ZSB3aGljaCB3b3JrcyBidXQgeW91IGhhdmUgbG9zdCBtYW55ICcgKyAnb2YgdGhlIGJlbmVmaXRzIG9mIHNlcnZlciByZW5kZXJpbmcuIEluc3RlYWQsIGZpZ3VyZSBvdXQgJyArICd3aHkgdGhlIG1hcmt1cCBiZWluZyBnZW5lcmF0ZWQgaXMgZGlmZmVyZW50IG9uIHRoZSBjbGllbnQgJyArICdvciBzZXJ2ZXI6XFxuJXMnLCBkaWZmZXJlbmNlKSA6IHZvaWQgMDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgICEoY29udGFpbmVyLm5vZGVUeXBlICE9PSBET0NfTk9ERV9UWVBFKSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICdZb3VcXCdyZSB0cnlpbmcgdG8gcmVuZGVyIGEgY29tcG9uZW50IHRvIHRoZSBkb2N1bWVudCBidXQgeW91IGRpZG5cXCd0IHVzZSBzZXJ2ZXIgcmVuZGVyaW5nLiBXZSBjYW5cXCd0IGRvIHRoaXMgd2l0aG91dCB1c2luZyBzZXJ2ZXIgcmVuZGVyaW5nIGR1ZSB0byBjcm9zcy1icm93c2VyIHF1aXJrcy4gU2VlIFJlYWN0RE9NU2VydmVyLnJlbmRlclRvU3RyaW5nKCkgZm9yIHNlcnZlciByZW5kZXJpbmcuJykgOiBfcHJvZEludmFyaWFudCgnNDMnKSA6IHZvaWQgMDtcblxuICAgIGlmICh0cmFuc2FjdGlvbi51c2VDcmVhdGVFbGVtZW50KSB7XG4gICAgICB3aGlsZSAoY29udGFpbmVyLmxhc3RDaGlsZCkge1xuICAgICAgICBjb250YWluZXIucmVtb3ZlQ2hpbGQoY29udGFpbmVyLmxhc3RDaGlsZCk7XG4gICAgICB9XG4gICAgICBET01MYXp5VHJlZS5pbnNlcnRUcmVlQmVmb3JlKGNvbnRhaW5lciwgbWFya3VwLCBudWxsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2V0SW5uZXJIVE1MKGNvbnRhaW5lciwgbWFya3VwKTtcbiAgICAgIFJlYWN0RE9NQ29tcG9uZW50VHJlZS5wcmVjYWNoZU5vZGUoaW5zdGFuY2UsIGNvbnRhaW5lci5maXJzdENoaWxkKTtcbiAgICB9XG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgdmFyIGhvc3ROb2RlID0gUmVhY3RET01Db21wb25lbnRUcmVlLmdldEluc3RhbmNlRnJvbU5vZGUoY29udGFpbmVyLmZpcnN0Q2hpbGQpO1xuICAgICAgaWYgKGhvc3ROb2RlLl9kZWJ1Z0lEICE9PSAwKSB7XG4gICAgICAgIFJlYWN0SW5zdHJ1bWVudGF0aW9uLmRlYnVnVG9vbC5vbkhvc3RPcGVyYXRpb24oe1xuICAgICAgICAgIGluc3RhbmNlSUQ6IGhvc3ROb2RlLl9kZWJ1Z0lELFxuICAgICAgICAgIHR5cGU6ICdtb3VudCcsXG4gICAgICAgICAgcGF5bG9hZDogbWFya3VwLnRvU3RyaW5nKClcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0TW91bnQ7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1kb20vbGliL1JlYWN0TW91bnQuanMiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBfcHJvZEludmFyaWFudCA9IHJlcXVpcmUoJy4vcmVhY3RQcm9kSW52YXJpYW50Jyk7XG5cbnZhciBSZWFjdCA9IHJlcXVpcmUoJ3JlYWN0L2xpYi9SZWFjdCcpO1xuXG52YXIgaW52YXJpYW50ID0gcmVxdWlyZSgnZmJqcy9saWIvaW52YXJpYW50Jyk7XG5cbnZhciBSZWFjdE5vZGVUeXBlcyA9IHtcbiAgSE9TVDogMCxcbiAgQ09NUE9TSVRFOiAxLFxuICBFTVBUWTogMixcblxuICBnZXRUeXBlOiBmdW5jdGlvbiAobm9kZSkge1xuICAgIGlmIChub2RlID09PSBudWxsIHx8IG5vZGUgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm4gUmVhY3ROb2RlVHlwZXMuRU1QVFk7XG4gICAgfSBlbHNlIGlmIChSZWFjdC5pc1ZhbGlkRWxlbWVudChub2RlKSkge1xuICAgICAgaWYgKHR5cGVvZiBub2RlLnR5cGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIFJlYWN0Tm9kZVR5cGVzLkNPTVBPU0lURTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBSZWFjdE5vZGVUeXBlcy5IT1NUO1xuICAgICAgfVxuICAgIH1cbiAgICAhZmFsc2UgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAnVW5leHBlY3RlZCBub2RlOiAlcycsIG5vZGUpIDogX3Byb2RJbnZhcmlhbnQoJzI2Jywgbm9kZSkgOiB2b2lkIDA7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3ROb2RlVHlwZXM7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1kb20vbGliL1JlYWN0Tm9kZVR5cGVzLmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUmVhY3RQcm9wVHlwZXNTZWNyZXQgPSAnU0VDUkVUX0RPX05PVF9QQVNTX1RISVNfT1JfWU9VX1dJTExfQkVfRklSRUQnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0UHJvcFR5cGVzU2VjcmV0O1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QtZG9tL2xpYi9SZWFjdFByb3BUeXBlc1NlY3JldC5qcyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBWaWV3cG9ydE1ldHJpY3MgPSB7XG4gIGN1cnJlbnRTY3JvbGxMZWZ0OiAwLFxuXG4gIGN1cnJlbnRTY3JvbGxUb3A6IDAsXG5cbiAgcmVmcmVzaFNjcm9sbFZhbHVlczogZnVuY3Rpb24gKHNjcm9sbFBvc2l0aW9uKSB7XG4gICAgVmlld3BvcnRNZXRyaWNzLmN1cnJlbnRTY3JvbGxMZWZ0ID0gc2Nyb2xsUG9zaXRpb24ueDtcbiAgICBWaWV3cG9ydE1ldHJpY3MuY3VycmVudFNjcm9sbFRvcCA9IHNjcm9sbFBvc2l0aW9uLnk7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gVmlld3BvcnRNZXRyaWNzO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QtZG9tL2xpYi9WaWV3cG9ydE1ldHJpY3MuanMiLCIvKipcbiAqIENvcHlyaWdodCAyMDE0LXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBfcHJvZEludmFyaWFudCA9IHJlcXVpcmUoJy4vcmVhY3RQcm9kSW52YXJpYW50Jyk7XG5cbnZhciBpbnZhcmlhbnQgPSByZXF1aXJlKCdmYmpzL2xpYi9pbnZhcmlhbnQnKTtcblxuLyoqXG4gKiBBY2N1bXVsYXRlcyBpdGVtcyB0aGF0IG11c3Qgbm90IGJlIG51bGwgb3IgdW5kZWZpbmVkIGludG8gdGhlIGZpcnN0IG9uZS4gVGhpc1xuICogaXMgdXNlZCB0byBjb25zZXJ2ZSBtZW1vcnkgYnkgYXZvaWRpbmcgYXJyYXkgYWxsb2NhdGlvbnMsIGFuZCB0aHVzIHNhY3JpZmljZXNcbiAqIEFQSSBjbGVhbm5lc3MuIFNpbmNlIGBjdXJyZW50YCBjYW4gYmUgbnVsbCBiZWZvcmUgYmVpbmcgcGFzc2VkIGluIGFuZCBub3RcbiAqIG51bGwgYWZ0ZXIgdGhpcyBmdW5jdGlvbiwgbWFrZSBzdXJlIHRvIGFzc2lnbiBpdCBiYWNrIHRvIGBjdXJyZW50YDpcbiAqXG4gKiBgYSA9IGFjY3VtdWxhdGVJbnRvKGEsIGIpO2BcbiAqXG4gKiBUaGlzIEFQSSBzaG91bGQgYmUgc3BhcmluZ2x5IHVzZWQuIFRyeSBgYWNjdW11bGF0ZWAgZm9yIHNvbWV0aGluZyBjbGVhbmVyLlxuICpcbiAqIEByZXR1cm4geyp8YXJyYXk8Kj59IEFuIGFjY3VtdWxhdGlvbiBvZiBpdGVtcy5cbiAqL1xuXG5mdW5jdGlvbiBhY2N1bXVsYXRlSW50byhjdXJyZW50LCBuZXh0KSB7XG4gICEobmV4dCAhPSBudWxsKSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICdhY2N1bXVsYXRlSW50byguLi4pOiBBY2N1bXVsYXRlZCBpdGVtcyBtdXN0IG5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZC4nKSA6IF9wcm9kSW52YXJpYW50KCczMCcpIDogdm9pZCAwO1xuXG4gIGlmIChjdXJyZW50ID09IG51bGwpIHtcbiAgICByZXR1cm4gbmV4dDtcbiAgfVxuXG4gIC8vIEJvdGggYXJlIG5vdCBlbXB0eS4gV2FybmluZzogTmV2ZXIgY2FsbCB4LmNvbmNhdCh5KSB3aGVuIHlvdSBhcmUgbm90XG4gIC8vIGNlcnRhaW4gdGhhdCB4IGlzIGFuIEFycmF5ICh4IGNvdWxkIGJlIGEgc3RyaW5nIHdpdGggY29uY2F0IG1ldGhvZCkuXG4gIGlmIChBcnJheS5pc0FycmF5KGN1cnJlbnQpKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkobmV4dCkpIHtcbiAgICAgIGN1cnJlbnQucHVzaC5hcHBseShjdXJyZW50LCBuZXh0KTtcbiAgICAgIHJldHVybiBjdXJyZW50O1xuICAgIH1cbiAgICBjdXJyZW50LnB1c2gobmV4dCk7XG4gICAgcmV0dXJuIGN1cnJlbnQ7XG4gIH1cblxuICBpZiAoQXJyYXkuaXNBcnJheShuZXh0KSkge1xuICAgIC8vIEEgYml0IHRvbyBkYW5nZXJvdXMgdG8gbXV0YXRlIGBuZXh0YC5cbiAgICByZXR1cm4gW2N1cnJlbnRdLmNvbmNhdChuZXh0KTtcbiAgfVxuXG4gIHJldHVybiBbY3VycmVudCwgbmV4dF07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYWNjdW11bGF0ZUludG87XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1kb20vbGliL2FjY3VtdWxhdGVJbnRvLmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIEBwYXJhbSB7YXJyYXl9IGFyciBhbiBcImFjY3VtdWxhdGlvblwiIG9mIGl0ZW1zIHdoaWNoIGlzIGVpdGhlciBhbiBBcnJheSBvclxuICogYSBzaW5nbGUgaXRlbS4gVXNlZnVsIHdoZW4gcGFpcmVkIHdpdGggdGhlIGBhY2N1bXVsYXRlYCBtb2R1bGUuIFRoaXMgaXMgYVxuICogc2ltcGxlIHV0aWxpdHkgdGhhdCBhbGxvd3MgdXMgdG8gcmVhc29uIGFib3V0IGEgY29sbGVjdGlvbiBvZiBpdGVtcywgYnV0XG4gKiBoYW5kbGluZyB0aGUgY2FzZSB3aGVuIHRoZXJlIGlzIGV4YWN0bHkgb25lIGl0ZW0gKGFuZCB3ZSBkbyBub3QgbmVlZCB0b1xuICogYWxsb2NhdGUgYW4gYXJyYXkpLlxuICovXG5cbmZ1bmN0aW9uIGZvckVhY2hBY2N1bXVsYXRlZChhcnIsIGNiLCBzY29wZSkge1xuICBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSB7XG4gICAgYXJyLmZvckVhY2goY2IsIHNjb3BlKTtcbiAgfSBlbHNlIGlmIChhcnIpIHtcbiAgICBjYi5jYWxsKHNjb3BlLCBhcnIpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZm9yRWFjaEFjY3VtdWxhdGVkO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QtZG9tL2xpYi9mb3JFYWNoQWNjdW11bGF0ZWQuanMiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUmVhY3ROb2RlVHlwZXMgPSByZXF1aXJlKCcuL1JlYWN0Tm9kZVR5cGVzJyk7XG5cbmZ1bmN0aW9uIGdldEhvc3RDb21wb25lbnRGcm9tQ29tcG9zaXRlKGluc3QpIHtcbiAgdmFyIHR5cGU7XG5cbiAgd2hpbGUgKCh0eXBlID0gaW5zdC5fcmVuZGVyZWROb2RlVHlwZSkgPT09IFJlYWN0Tm9kZVR5cGVzLkNPTVBPU0lURSkge1xuICAgIGluc3QgPSBpbnN0Ll9yZW5kZXJlZENvbXBvbmVudDtcbiAgfVxuXG4gIGlmICh0eXBlID09PSBSZWFjdE5vZGVUeXBlcy5IT1NUKSB7XG4gICAgcmV0dXJuIGluc3QuX3JlbmRlcmVkQ29tcG9uZW50O1xuICB9IGVsc2UgaWYgKHR5cGUgPT09IFJlYWN0Tm9kZVR5cGVzLkVNUFRZKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRIb3N0Q29tcG9uZW50RnJvbUNvbXBvc2l0ZTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3JlYWN0LWRvbS9saWIvZ2V0SG9zdENvbXBvbmVudEZyb21Db21wb3NpdGUuanMiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgRXhlY3V0aW9uRW52aXJvbm1lbnQgPSByZXF1aXJlKCdmYmpzL2xpYi9FeGVjdXRpb25FbnZpcm9ubWVudCcpO1xuXG52YXIgY29udGVudEtleSA9IG51bGw7XG5cbi8qKlxuICogR2V0cyB0aGUga2V5IHVzZWQgdG8gYWNjZXNzIHRleHQgY29udGVudCBvbiBhIERPTSBub2RlLlxuICpcbiAqIEByZXR1cm4gez9zdHJpbmd9IEtleSB1c2VkIHRvIGFjY2VzcyB0ZXh0IGNvbnRlbnQuXG4gKiBAaW50ZXJuYWxcbiAqL1xuZnVuY3Rpb24gZ2V0VGV4dENvbnRlbnRBY2Nlc3NvcigpIHtcbiAgaWYgKCFjb250ZW50S2V5ICYmIEV4ZWN1dGlvbkVudmlyb25tZW50LmNhblVzZURPTSkge1xuICAgIC8vIFByZWZlciB0ZXh0Q29udGVudCB0byBpbm5lclRleHQgYmVjYXVzZSBtYW55IGJyb3dzZXJzIHN1cHBvcnQgYm90aCBidXRcbiAgICAvLyBTVkcgPHRleHQ+IGVsZW1lbnRzIGRvbid0IHN1cHBvcnQgaW5uZXJUZXh0IGV2ZW4gd2hlbiA8ZGl2PiBkb2VzLlxuICAgIGNvbnRlbnRLZXkgPSAndGV4dENvbnRlbnQnIGluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCA/ICd0ZXh0Q29udGVudCcgOiAnaW5uZXJUZXh0JztcbiAgfVxuICByZXR1cm4gY29udGVudEtleTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRUZXh0Q29udGVudEFjY2Vzc29yO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QtZG9tL2xpYi9nZXRUZXh0Q29udGVudEFjY2Vzc29yLmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0RE9NQ29tcG9uZW50VHJlZSA9IHJlcXVpcmUoJy4vUmVhY3RET01Db21wb25lbnRUcmVlJyk7XG5cbmZ1bmN0aW9uIGlzQ2hlY2thYmxlKGVsZW0pIHtcbiAgdmFyIHR5cGUgPSBlbGVtLnR5cGU7XG4gIHZhciBub2RlTmFtZSA9IGVsZW0ubm9kZU5hbWU7XG4gIHJldHVybiBub2RlTmFtZSAmJiBub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSAnaW5wdXQnICYmICh0eXBlID09PSAnY2hlY2tib3gnIHx8IHR5cGUgPT09ICdyYWRpbycpO1xufVxuXG5mdW5jdGlvbiBnZXRUcmFja2VyKGluc3QpIHtcbiAgcmV0dXJuIGluc3QuX3dyYXBwZXJTdGF0ZS52YWx1ZVRyYWNrZXI7XG59XG5cbmZ1bmN0aW9uIGF0dGFjaFRyYWNrZXIoaW5zdCwgdHJhY2tlcikge1xuICBpbnN0Ll93cmFwcGVyU3RhdGUudmFsdWVUcmFja2VyID0gdHJhY2tlcjtcbn1cblxuZnVuY3Rpb24gZGV0YWNoVHJhY2tlcihpbnN0KSB7XG4gIGRlbGV0ZSBpbnN0Ll93cmFwcGVyU3RhdGUudmFsdWVUcmFja2VyO1xufVxuXG5mdW5jdGlvbiBnZXRWYWx1ZUZyb21Ob2RlKG5vZGUpIHtcbiAgdmFyIHZhbHVlO1xuICBpZiAobm9kZSkge1xuICAgIHZhbHVlID0gaXNDaGVja2FibGUobm9kZSkgPyAnJyArIG5vZGUuY2hlY2tlZCA6IG5vZGUudmFsdWU7XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG52YXIgaW5wdXRWYWx1ZVRyYWNraW5nID0ge1xuICAvLyBleHBvc2VkIGZvciB0ZXN0aW5nXG4gIF9nZXRUcmFja2VyRnJvbU5vZGU6IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgcmV0dXJuIGdldFRyYWNrZXIoUmVhY3RET01Db21wb25lbnRUcmVlLmdldEluc3RhbmNlRnJvbU5vZGUobm9kZSkpO1xuICB9LFxuXG5cbiAgdHJhY2s6IGZ1bmN0aW9uIChpbnN0KSB7XG4gICAgaWYgKGdldFRyYWNrZXIoaW5zdCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgbm9kZSA9IFJlYWN0RE9NQ29tcG9uZW50VHJlZS5nZXROb2RlRnJvbUluc3RhbmNlKGluc3QpO1xuICAgIHZhciB2YWx1ZUZpZWxkID0gaXNDaGVja2FibGUobm9kZSkgPyAnY2hlY2tlZCcgOiAndmFsdWUnO1xuICAgIHZhciBkZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihub2RlLmNvbnN0cnVjdG9yLnByb3RvdHlwZSwgdmFsdWVGaWVsZCk7XG5cbiAgICB2YXIgY3VycmVudFZhbHVlID0gJycgKyBub2RlW3ZhbHVlRmllbGRdO1xuXG4gICAgLy8gaWYgc29tZW9uZSBoYXMgYWxyZWFkeSBkZWZpbmVkIGEgdmFsdWUgb3IgU2FmYXJpLCB0aGVuIGJhaWxcbiAgICAvLyBhbmQgZG9uJ3QgdHJhY2sgdmFsdWUgd2lsbCBjYXVzZSBvdmVyIHJlcG9ydGluZyBvZiBjaGFuZ2VzLFxuICAgIC8vIGJ1dCBpdCdzIGJldHRlciB0aGVuIGEgaGFyZCBmYWlsdXJlXG4gICAgLy8gKG5lZWRlZCBmb3IgY2VydGFpbiB0ZXN0cyB0aGF0IHNweU9uIGlucHV0IHZhbHVlcyBhbmQgU2FmYXJpKVxuICAgIGlmIChub2RlLmhhc093blByb3BlcnR5KHZhbHVlRmllbGQpIHx8IHR5cGVvZiBkZXNjcmlwdG9yLmdldCAhPT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgZGVzY3JpcHRvci5zZXQgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobm9kZSwgdmFsdWVGaWVsZCwge1xuICAgICAgZW51bWVyYWJsZTogZGVzY3JpcHRvci5lbnVtZXJhYmxlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBkZXNjcmlwdG9yLmdldC5jYWxsKHRoaXMpO1xuICAgICAgfSxcbiAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIGN1cnJlbnRWYWx1ZSA9ICcnICsgdmFsdWU7XG4gICAgICAgIGRlc2NyaXB0b3Iuc2V0LmNhbGwodGhpcywgdmFsdWUpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgYXR0YWNoVHJhY2tlcihpbnN0LCB7XG4gICAgICBnZXRWYWx1ZTogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gY3VycmVudFZhbHVlO1xuICAgICAgfSxcbiAgICAgIHNldFZhbHVlOiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgY3VycmVudFZhbHVlID0gJycgKyB2YWx1ZTtcbiAgICAgIH0sXG4gICAgICBzdG9wVHJhY2tpbmc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZGV0YWNoVHJhY2tlcihpbnN0KTtcbiAgICAgICAgZGVsZXRlIG5vZGVbdmFsdWVGaWVsZF07XG4gICAgICB9XG4gICAgfSk7XG4gIH0sXG5cbiAgdXBkYXRlVmFsdWVJZkNoYW5nZWQ6IGZ1bmN0aW9uIChpbnN0KSB7XG4gICAgaWYgKCFpbnN0KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHZhciB0cmFja2VyID0gZ2V0VHJhY2tlcihpbnN0KTtcblxuICAgIGlmICghdHJhY2tlcikge1xuICAgICAgaW5wdXRWYWx1ZVRyYWNraW5nLnRyYWNrKGluc3QpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgdmFyIGxhc3RWYWx1ZSA9IHRyYWNrZXIuZ2V0VmFsdWUoKTtcbiAgICB2YXIgbmV4dFZhbHVlID0gZ2V0VmFsdWVGcm9tTm9kZShSZWFjdERPTUNvbXBvbmVudFRyZWUuZ2V0Tm9kZUZyb21JbnN0YW5jZShpbnN0KSk7XG5cbiAgICBpZiAobmV4dFZhbHVlICE9PSBsYXN0VmFsdWUpIHtcbiAgICAgIHRyYWNrZXIuc2V0VmFsdWUobmV4dFZhbHVlKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcbiAgc3RvcFRyYWNraW5nOiBmdW5jdGlvbiAoaW5zdCkge1xuICAgIHZhciB0cmFja2VyID0gZ2V0VHJhY2tlcihpbnN0KTtcbiAgICBpZiAodHJhY2tlcikge1xuICAgICAgdHJhY2tlci5zdG9wVHJhY2tpbmcoKTtcbiAgICB9XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gaW5wdXRWYWx1ZVRyYWNraW5nO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QtZG9tL2xpYi9pbnB1dFZhbHVlVHJhY2tpbmcuanMiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgX3Byb2RJbnZhcmlhbnQgPSByZXF1aXJlKCcuL3JlYWN0UHJvZEludmFyaWFudCcpLFxuICAgIF9hc3NpZ24gPSByZXF1aXJlKCdvYmplY3QtYXNzaWduJyk7XG5cbnZhciBSZWFjdENvbXBvc2l0ZUNvbXBvbmVudCA9IHJlcXVpcmUoJy4vUmVhY3RDb21wb3NpdGVDb21wb25lbnQnKTtcbnZhciBSZWFjdEVtcHR5Q29tcG9uZW50ID0gcmVxdWlyZSgnLi9SZWFjdEVtcHR5Q29tcG9uZW50Jyk7XG52YXIgUmVhY3RIb3N0Q29tcG9uZW50ID0gcmVxdWlyZSgnLi9SZWFjdEhvc3RDb21wb25lbnQnKTtcblxudmFyIGdldE5leHREZWJ1Z0lEID0gcmVxdWlyZSgncmVhY3QvbGliL2dldE5leHREZWJ1Z0lEJyk7XG52YXIgaW52YXJpYW50ID0gcmVxdWlyZSgnZmJqcy9saWIvaW52YXJpYW50Jyk7XG52YXIgd2FybmluZyA9IHJlcXVpcmUoJ2ZianMvbGliL3dhcm5pbmcnKTtcblxuLy8gVG8gYXZvaWQgYSBjeWNsaWMgZGVwZW5kZW5jeSwgd2UgY3JlYXRlIHRoZSBmaW5hbCBjbGFzcyBpbiB0aGlzIG1vZHVsZVxudmFyIFJlYWN0Q29tcG9zaXRlQ29tcG9uZW50V3JhcHBlciA9IGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gIHRoaXMuY29uc3RydWN0KGVsZW1lbnQpO1xufTtcblxuZnVuY3Rpb24gZ2V0RGVjbGFyYXRpb25FcnJvckFkZGVuZHVtKG93bmVyKSB7XG4gIGlmIChvd25lcikge1xuICAgIHZhciBuYW1lID0gb3duZXIuZ2V0TmFtZSgpO1xuICAgIGlmIChuYW1lKSB7XG4gICAgICByZXR1cm4gJyBDaGVjayB0aGUgcmVuZGVyIG1ldGhvZCBvZiBgJyArIG5hbWUgKyAnYC4nO1xuICAgIH1cbiAgfVxuICByZXR1cm4gJyc7XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgdGhlIHR5cGUgcmVmZXJlbmNlIGlzIGEga25vd24gaW50ZXJuYWwgdHlwZS4gSS5lLiBub3QgYSB1c2VyXG4gKiBwcm92aWRlZCBjb21wb3NpdGUgdHlwZS5cbiAqXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSB0eXBlXG4gKiBAcmV0dXJuIHtib29sZWFufSBSZXR1cm5zIHRydWUgaWYgdGhpcyBpcyBhIHZhbGlkIGludGVybmFsIHR5cGUuXG4gKi9cbmZ1bmN0aW9uIGlzSW50ZXJuYWxDb21wb25lbnRUeXBlKHR5cGUpIHtcbiAgcmV0dXJuIHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiB0eXBlLnByb3RvdHlwZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHR5cGUucHJvdG90eXBlLm1vdW50Q29tcG9uZW50ID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiB0eXBlLnByb3RvdHlwZS5yZWNlaXZlQ29tcG9uZW50ID09PSAnZnVuY3Rpb24nO1xufVxuXG4vKipcbiAqIEdpdmVuIGEgUmVhY3ROb2RlLCBjcmVhdGUgYW4gaW5zdGFuY2UgdGhhdCB3aWxsIGFjdHVhbGx5IGJlIG1vdW50ZWQuXG4gKlxuICogQHBhcmFtIHtSZWFjdE5vZGV9IG5vZGVcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gc2hvdWxkSGF2ZURlYnVnSURcbiAqIEByZXR1cm4ge29iamVjdH0gQSBuZXcgaW5zdGFuY2Ugb2YgdGhlIGVsZW1lbnQncyBjb25zdHJ1Y3Rvci5cbiAqIEBwcm90ZWN0ZWRcbiAqL1xuZnVuY3Rpb24gaW5zdGFudGlhdGVSZWFjdENvbXBvbmVudChub2RlLCBzaG91bGRIYXZlRGVidWdJRCkge1xuICB2YXIgaW5zdGFuY2U7XG5cbiAgaWYgKG5vZGUgPT09IG51bGwgfHwgbm9kZSA9PT0gZmFsc2UpIHtcbiAgICBpbnN0YW5jZSA9IFJlYWN0RW1wdHlDb21wb25lbnQuY3JlYXRlKGluc3RhbnRpYXRlUmVhY3RDb21wb25lbnQpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBub2RlID09PSAnb2JqZWN0Jykge1xuICAgIHZhciBlbGVtZW50ID0gbm9kZTtcbiAgICB2YXIgdHlwZSA9IGVsZW1lbnQudHlwZTtcbiAgICBpZiAodHlwZW9mIHR5cGUgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHR5cGUgIT09ICdzdHJpbmcnKSB7XG4gICAgICB2YXIgaW5mbyA9ICcnO1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgaWYgKHR5cGUgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcgJiYgdHlwZSAhPT0gbnVsbCAmJiBPYmplY3Qua2V5cyh0eXBlKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICBpbmZvICs9ICcgWW91IGxpa2VseSBmb3Jnb3QgdG8gZXhwb3J0IHlvdXIgY29tcG9uZW50IGZyb20gdGhlIGZpbGUgJyArIFwiaXQncyBkZWZpbmVkIGluLlwiO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpbmZvICs9IGdldERlY2xhcmF0aW9uRXJyb3JBZGRlbmR1bShlbGVtZW50Ll9vd25lcik7XG4gICAgICAhZmFsc2UgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAnRWxlbWVudCB0eXBlIGlzIGludmFsaWQ6IGV4cGVjdGVkIGEgc3RyaW5nIChmb3IgYnVpbHQtaW4gY29tcG9uZW50cykgb3IgYSBjbGFzcy9mdW5jdGlvbiAoZm9yIGNvbXBvc2l0ZSBjb21wb25lbnRzKSBidXQgZ290OiAlcy4lcycsIHR5cGUgPT0gbnVsbCA/IHR5cGUgOiB0eXBlb2YgdHlwZSwgaW5mbykgOiBfcHJvZEludmFyaWFudCgnMTMwJywgdHlwZSA9PSBudWxsID8gdHlwZSA6IHR5cGVvZiB0eXBlLCBpbmZvKSA6IHZvaWQgMDtcbiAgICB9XG5cbiAgICAvLyBTcGVjaWFsIGNhc2Ugc3RyaW5nIHZhbHVlc1xuICAgIGlmICh0eXBlb2YgZWxlbWVudC50eXBlID09PSAnc3RyaW5nJykge1xuICAgICAgaW5zdGFuY2UgPSBSZWFjdEhvc3RDb21wb25lbnQuY3JlYXRlSW50ZXJuYWxDb21wb25lbnQoZWxlbWVudCk7XG4gICAgfSBlbHNlIGlmIChpc0ludGVybmFsQ29tcG9uZW50VHlwZShlbGVtZW50LnR5cGUpKSB7XG4gICAgICAvLyBUaGlzIGlzIHRlbXBvcmFyaWx5IGF2YWlsYWJsZSBmb3IgY3VzdG9tIGNvbXBvbmVudHMgdGhhdCBhcmUgbm90IHN0cmluZ1xuICAgICAgLy8gcmVwcmVzZW50YXRpb25zLiBJLmUuIEFSVC4gT25jZSB0aG9zZSBhcmUgdXBkYXRlZCB0byB1c2UgdGhlIHN0cmluZ1xuICAgICAgLy8gcmVwcmVzZW50YXRpb24sIHdlIGNhbiBkcm9wIHRoaXMgY29kZSBwYXRoLlxuICAgICAgaW5zdGFuY2UgPSBuZXcgZWxlbWVudC50eXBlKGVsZW1lbnQpO1xuXG4gICAgICAvLyBXZSByZW5hbWVkIHRoaXMuIEFsbG93IHRoZSBvbGQgbmFtZSBmb3IgY29tcGF0LiA6KFxuICAgICAgaWYgKCFpbnN0YW5jZS5nZXRIb3N0Tm9kZSkge1xuICAgICAgICBpbnN0YW5jZS5nZXRIb3N0Tm9kZSA9IGluc3RhbmNlLmdldE5hdGl2ZU5vZGU7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGluc3RhbmNlID0gbmV3IFJlYWN0Q29tcG9zaXRlQ29tcG9uZW50V3JhcHBlcihlbGVtZW50KTtcbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZW9mIG5vZGUgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBub2RlID09PSAnbnVtYmVyJykge1xuICAgIGluc3RhbmNlID0gUmVhY3RIb3N0Q29tcG9uZW50LmNyZWF0ZUluc3RhbmNlRm9yVGV4dChub2RlKTtcbiAgfSBlbHNlIHtcbiAgICAhZmFsc2UgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAnRW5jb3VudGVyZWQgaW52YWxpZCBSZWFjdCBub2RlIG9mIHR5cGUgJXMnLCB0eXBlb2Ygbm9kZSkgOiBfcHJvZEludmFyaWFudCgnMTMxJywgdHlwZW9mIG5vZGUpIDogdm9pZCAwO1xuICB9XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyh0eXBlb2YgaW5zdGFuY2UubW91bnRDb21wb25lbnQgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGluc3RhbmNlLnJlY2VpdmVDb21wb25lbnQgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGluc3RhbmNlLmdldEhvc3ROb2RlID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBpbnN0YW5jZS51bm1vdW50Q29tcG9uZW50ID09PSAnZnVuY3Rpb24nLCAnT25seSBSZWFjdCBDb21wb25lbnRzIGNhbiBiZSBtb3VudGVkLicpIDogdm9pZCAwO1xuICB9XG5cbiAgLy8gVGhlc2UgdHdvIGZpZWxkcyBhcmUgdXNlZCBieSB0aGUgRE9NIGFuZCBBUlQgZGlmZmluZyBhbGdvcml0aG1zXG4gIC8vIHJlc3BlY3RpdmVseS4gSW5zdGVhZCBvZiB1c2luZyBleHBhbmRvcyBvbiBjb21wb25lbnRzLCB3ZSBzaG91bGQgYmVcbiAgLy8gc3RvcmluZyB0aGUgc3RhdGUgbmVlZGVkIGJ5IHRoZSBkaWZmaW5nIGFsZ29yaXRobXMgZWxzZXdoZXJlLlxuICBpbnN0YW5jZS5fbW91bnRJbmRleCA9IDA7XG4gIGluc3RhbmNlLl9tb3VudEltYWdlID0gbnVsbDtcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGluc3RhbmNlLl9kZWJ1Z0lEID0gc2hvdWxkSGF2ZURlYnVnSUQgPyBnZXROZXh0RGVidWdJRCgpIDogMDtcbiAgfVxuXG4gIC8vIEludGVybmFsIGluc3RhbmNlcyBzaG91bGQgZnVsbHkgY29uc3RydWN0ZWQgYXQgdGhpcyBwb2ludCwgc28gdGhleSBzaG91bGRcbiAgLy8gbm90IGdldCBhbnkgbmV3IGZpZWxkcyBhZGRlZCB0byB0aGVtIGF0IHRoaXMgcG9pbnQuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgaWYgKE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucykge1xuICAgICAgT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKGluc3RhbmNlKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gaW5zdGFuY2U7XG59XG5cbl9hc3NpZ24oUmVhY3RDb21wb3NpdGVDb21wb25lbnRXcmFwcGVyLnByb3RvdHlwZSwgUmVhY3RDb21wb3NpdGVDb21wb25lbnQsIHtcbiAgX2luc3RhbnRpYXRlUmVhY3RDb21wb25lbnQ6IGluc3RhbnRpYXRlUmVhY3RDb21wb25lbnRcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGluc3RhbnRpYXRlUmVhY3RDb21wb25lbnQ7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1kb20vbGliL2luc3RhbnRpYXRlUmVhY3RDb21wb25lbnQuanMiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbi8qKlxuICogQHNlZSBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrL211bHRpcGFnZS90aGUtaW5wdXQtZWxlbWVudC5odG1sI2lucHV0LXR5cGUtYXR0ci1zdW1tYXJ5XG4gKi9cblxudmFyIHN1cHBvcnRlZElucHV0VHlwZXMgPSB7XG4gIGNvbG9yOiB0cnVlLFxuICBkYXRlOiB0cnVlLFxuICBkYXRldGltZTogdHJ1ZSxcbiAgJ2RhdGV0aW1lLWxvY2FsJzogdHJ1ZSxcbiAgZW1haWw6IHRydWUsXG4gIG1vbnRoOiB0cnVlLFxuICBudW1iZXI6IHRydWUsXG4gIHBhc3N3b3JkOiB0cnVlLFxuICByYW5nZTogdHJ1ZSxcbiAgc2VhcmNoOiB0cnVlLFxuICB0ZWw6IHRydWUsXG4gIHRleHQ6IHRydWUsXG4gIHRpbWU6IHRydWUsXG4gIHVybDogdHJ1ZSxcbiAgd2VlazogdHJ1ZVxufTtcblxuZnVuY3Rpb24gaXNUZXh0SW5wdXRFbGVtZW50KGVsZW0pIHtcbiAgdmFyIG5vZGVOYW1lID0gZWxlbSAmJiBlbGVtLm5vZGVOYW1lICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcblxuICBpZiAobm9kZU5hbWUgPT09ICdpbnB1dCcpIHtcbiAgICByZXR1cm4gISFzdXBwb3J0ZWRJbnB1dFR5cGVzW2VsZW0udHlwZV07XG4gIH1cblxuICBpZiAobm9kZU5hbWUgPT09ICd0ZXh0YXJlYScpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc1RleHRJbnB1dEVsZW1lbnQ7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1kb20vbGliL2lzVGV4dElucHV0RWxlbWVudC5qcyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBFeGVjdXRpb25FbnZpcm9ubWVudCA9IHJlcXVpcmUoJ2ZianMvbGliL0V4ZWN1dGlvbkVudmlyb25tZW50Jyk7XG52YXIgZXNjYXBlVGV4dENvbnRlbnRGb3JCcm93c2VyID0gcmVxdWlyZSgnLi9lc2NhcGVUZXh0Q29udGVudEZvckJyb3dzZXInKTtcbnZhciBzZXRJbm5lckhUTUwgPSByZXF1aXJlKCcuL3NldElubmVySFRNTCcpO1xuXG4vKipcbiAqIFNldCB0aGUgdGV4dENvbnRlbnQgcHJvcGVydHkgb2YgYSBub2RlLCBlbnN1cmluZyB0aGF0IHdoaXRlc3BhY2UgaXMgcHJlc2VydmVkXG4gKiBldmVuIGluIElFOC4gaW5uZXJUZXh0IGlzIGEgcG9vciBzdWJzdGl0dXRlIGZvciB0ZXh0Q29udGVudCBhbmQsIGFtb25nIG1hbnlcbiAqIGlzc3VlcywgaW5zZXJ0cyA8YnI+IGluc3RlYWQgb2YgdGhlIGxpdGVyYWwgbmV3bGluZSBjaGFycy4gaW5uZXJIVE1MIGJlaGF2ZXNcbiAqIGFzIGl0IHNob3VsZC5cbiAqXG4gKiBAcGFyYW0ge0RPTUVsZW1lbnR9IG5vZGVcbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0XG4gKiBAaW50ZXJuYWxcbiAqL1xudmFyIHNldFRleHRDb250ZW50ID0gZnVuY3Rpb24gKG5vZGUsIHRleHQpIHtcbiAgaWYgKHRleHQpIHtcbiAgICB2YXIgZmlyc3RDaGlsZCA9IG5vZGUuZmlyc3RDaGlsZDtcblxuICAgIGlmIChmaXJzdENoaWxkICYmIGZpcnN0Q2hpbGQgPT09IG5vZGUubGFzdENoaWxkICYmIGZpcnN0Q2hpbGQubm9kZVR5cGUgPT09IDMpIHtcbiAgICAgIGZpcnN0Q2hpbGQubm9kZVZhbHVlID0gdGV4dDtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cbiAgbm9kZS50ZXh0Q29udGVudCA9IHRleHQ7XG59O1xuXG5pZiAoRXhlY3V0aW9uRW52aXJvbm1lbnQuY2FuVXNlRE9NKSB7XG4gIGlmICghKCd0ZXh0Q29udGVudCcgaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSkge1xuICAgIHNldFRleHRDb250ZW50ID0gZnVuY3Rpb24gKG5vZGUsIHRleHQpIHtcbiAgICAgIGlmIChub2RlLm5vZGVUeXBlID09PSAzKSB7XG4gICAgICAgIG5vZGUubm9kZVZhbHVlID0gdGV4dDtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgc2V0SW5uZXJIVE1MKG5vZGUsIGVzY2FwZVRleHRDb250ZW50Rm9yQnJvd3Nlcih0ZXh0KSk7XG4gICAgfTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNldFRleHRDb250ZW50O1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QtZG9tL2xpYi9zZXRUZXh0Q29udGVudC5qcyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBfcHJvZEludmFyaWFudCA9IHJlcXVpcmUoJy4vcmVhY3RQcm9kSW52YXJpYW50Jyk7XG5cbnZhciBSZWFjdEN1cnJlbnRPd25lciA9IHJlcXVpcmUoJ3JlYWN0L2xpYi9SZWFjdEN1cnJlbnRPd25lcicpO1xudmFyIFJFQUNUX0VMRU1FTlRfVFlQRSA9IHJlcXVpcmUoJy4vUmVhY3RFbGVtZW50U3ltYm9sJyk7XG5cbnZhciBnZXRJdGVyYXRvckZuID0gcmVxdWlyZSgnLi9nZXRJdGVyYXRvckZuJyk7XG52YXIgaW52YXJpYW50ID0gcmVxdWlyZSgnZmJqcy9saWIvaW52YXJpYW50Jyk7XG52YXIgS2V5RXNjYXBlVXRpbHMgPSByZXF1aXJlKCcuL0tleUVzY2FwZVV0aWxzJyk7XG52YXIgd2FybmluZyA9IHJlcXVpcmUoJ2ZianMvbGliL3dhcm5pbmcnKTtcblxudmFyIFNFUEFSQVRPUiA9ICcuJztcbnZhciBTVUJTRVBBUkFUT1IgPSAnOic7XG5cbi8qKlxuICogVGhpcyBpcyBpbmxpbmVkIGZyb20gUmVhY3RFbGVtZW50IHNpbmNlIHRoaXMgZmlsZSBpcyBzaGFyZWQgYmV0d2VlblxuICogaXNvbW9ycGhpYyBhbmQgcmVuZGVyZXJzLiBXZSBjb3VsZCBleHRyYWN0IHRoaXMgdG8gYVxuICpcbiAqL1xuXG4vKipcbiAqIFRPRE86IFRlc3QgdGhhdCBhIHNpbmdsZSBjaGlsZCBhbmQgYW4gYXJyYXkgd2l0aCBvbmUgaXRlbSBoYXZlIHRoZSBzYW1lIGtleVxuICogcGF0dGVybi5cbiAqL1xuXG52YXIgZGlkV2FybkFib3V0TWFwcyA9IGZhbHNlO1xuXG4vKipcbiAqIEdlbmVyYXRlIGEga2V5IHN0cmluZyB0aGF0IGlkZW50aWZpZXMgYSBjb21wb25lbnQgd2l0aGluIGEgc2V0LlxuICpcbiAqIEBwYXJhbSB7Kn0gY29tcG9uZW50IEEgY29tcG9uZW50IHRoYXQgY291bGQgY29udGFpbiBhIG1hbnVhbCBrZXkuXG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXggSW5kZXggdGhhdCBpcyB1c2VkIGlmIGEgbWFudWFsIGtleSBpcyBub3QgcHJvdmlkZWQuXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGdldENvbXBvbmVudEtleShjb21wb25lbnQsIGluZGV4KSB7XG4gIC8vIERvIHNvbWUgdHlwZWNoZWNraW5nIGhlcmUgc2luY2Ugd2UgY2FsbCB0aGlzIGJsaW5kbHkuIFdlIHdhbnQgdG8gZW5zdXJlXG4gIC8vIHRoYXQgd2UgZG9uJ3QgYmxvY2sgcG90ZW50aWFsIGZ1dHVyZSBFUyBBUElzLlxuICBpZiAoY29tcG9uZW50ICYmIHR5cGVvZiBjb21wb25lbnQgPT09ICdvYmplY3QnICYmIGNvbXBvbmVudC5rZXkgIT0gbnVsbCkge1xuICAgIC8vIEV4cGxpY2l0IGtleVxuICAgIHJldHVybiBLZXlFc2NhcGVVdGlscy5lc2NhcGUoY29tcG9uZW50LmtleSk7XG4gIH1cbiAgLy8gSW1wbGljaXQga2V5IGRldGVybWluZWQgYnkgdGhlIGluZGV4IGluIHRoZSBzZXRcbiAgcmV0dXJuIGluZGV4LnRvU3RyaW5nKDM2KTtcbn1cblxuLyoqXG4gKiBAcGFyYW0gez8qfSBjaGlsZHJlbiBDaGlsZHJlbiB0cmVlIGNvbnRhaW5lci5cbiAqIEBwYXJhbSB7IXN0cmluZ30gbmFtZVNvRmFyIE5hbWUgb2YgdGhlIGtleSBwYXRoIHNvIGZhci5cbiAqIEBwYXJhbSB7IWZ1bmN0aW9ufSBjYWxsYmFjayBDYWxsYmFjayB0byBpbnZva2Ugd2l0aCBlYWNoIGNoaWxkIGZvdW5kLlxuICogQHBhcmFtIHs/Kn0gdHJhdmVyc2VDb250ZXh0IFVzZWQgdG8gcGFzcyBpbmZvcm1hdGlvbiB0aHJvdWdob3V0IHRoZSB0cmF2ZXJzYWxcbiAqIHByb2Nlc3MuXG4gKiBAcmV0dXJuIHshbnVtYmVyfSBUaGUgbnVtYmVyIG9mIGNoaWxkcmVuIGluIHRoaXMgc3VidHJlZS5cbiAqL1xuZnVuY3Rpb24gdHJhdmVyc2VBbGxDaGlsZHJlbkltcGwoY2hpbGRyZW4sIG5hbWVTb0ZhciwgY2FsbGJhY2ssIHRyYXZlcnNlQ29udGV4dCkge1xuICB2YXIgdHlwZSA9IHR5cGVvZiBjaGlsZHJlbjtcblxuICBpZiAodHlwZSA9PT0gJ3VuZGVmaW5lZCcgfHwgdHlwZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgLy8gQWxsIG9mIHRoZSBhYm92ZSBhcmUgcGVyY2VpdmVkIGFzIG51bGwuXG4gICAgY2hpbGRyZW4gPSBudWxsO1xuICB9XG5cbiAgaWYgKGNoaWxkcmVuID09PSBudWxsIHx8IHR5cGUgPT09ICdzdHJpbmcnIHx8IHR5cGUgPT09ICdudW1iZXInIHx8XG4gIC8vIFRoZSBmb2xsb3dpbmcgaXMgaW5saW5lZCBmcm9tIFJlYWN0RWxlbWVudC4gVGhpcyBtZWFucyB3ZSBjYW4gb3B0aW1pemVcbiAgLy8gc29tZSBjaGVja3MuIFJlYWN0IEZpYmVyIGFsc28gaW5saW5lcyB0aGlzIGxvZ2ljIGZvciBzaW1pbGFyIHB1cnBvc2VzLlxuICB0eXBlID09PSAnb2JqZWN0JyAmJiBjaGlsZHJlbi4kJHR5cGVvZiA9PT0gUkVBQ1RfRUxFTUVOVF9UWVBFKSB7XG4gICAgY2FsbGJhY2sodHJhdmVyc2VDb250ZXh0LCBjaGlsZHJlbixcbiAgICAvLyBJZiBpdCdzIHRoZSBvbmx5IGNoaWxkLCB0cmVhdCB0aGUgbmFtZSBhcyBpZiBpdCB3YXMgd3JhcHBlZCBpbiBhbiBhcnJheVxuICAgIC8vIHNvIHRoYXQgaXQncyBjb25zaXN0ZW50IGlmIHRoZSBudW1iZXIgb2YgY2hpbGRyZW4gZ3Jvd3MuXG4gICAgbmFtZVNvRmFyID09PSAnJyA/IFNFUEFSQVRPUiArIGdldENvbXBvbmVudEtleShjaGlsZHJlbiwgMCkgOiBuYW1lU29GYXIpO1xuICAgIHJldHVybiAxO1xuICB9XG5cbiAgdmFyIGNoaWxkO1xuICB2YXIgbmV4dE5hbWU7XG4gIHZhciBzdWJ0cmVlQ291bnQgPSAwOyAvLyBDb3VudCBvZiBjaGlsZHJlbiBmb3VuZCBpbiB0aGUgY3VycmVudCBzdWJ0cmVlLlxuICB2YXIgbmV4dE5hbWVQcmVmaXggPSBuYW1lU29GYXIgPT09ICcnID8gU0VQQVJBVE9SIDogbmFtZVNvRmFyICsgU1VCU0VQQVJBVE9SO1xuXG4gIGlmIChBcnJheS5pc0FycmF5KGNoaWxkcmVuKSkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNoaWxkID0gY2hpbGRyZW5baV07XG4gICAgICBuZXh0TmFtZSA9IG5leHROYW1lUHJlZml4ICsgZ2V0Q29tcG9uZW50S2V5KGNoaWxkLCBpKTtcbiAgICAgIHN1YnRyZWVDb3VudCArPSB0cmF2ZXJzZUFsbENoaWxkcmVuSW1wbChjaGlsZCwgbmV4dE5hbWUsIGNhbGxiYWNrLCB0cmF2ZXJzZUNvbnRleHQpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB2YXIgaXRlcmF0b3JGbiA9IGdldEl0ZXJhdG9yRm4oY2hpbGRyZW4pO1xuICAgIGlmIChpdGVyYXRvckZuKSB7XG4gICAgICB2YXIgaXRlcmF0b3IgPSBpdGVyYXRvckZuLmNhbGwoY2hpbGRyZW4pO1xuICAgICAgdmFyIHN0ZXA7XG4gICAgICBpZiAoaXRlcmF0b3JGbiAhPT0gY2hpbGRyZW4uZW50cmllcykge1xuICAgICAgICB2YXIgaWkgPSAwO1xuICAgICAgICB3aGlsZSAoIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lKSB7XG4gICAgICAgICAgY2hpbGQgPSBzdGVwLnZhbHVlO1xuICAgICAgICAgIG5leHROYW1lID0gbmV4dE5hbWVQcmVmaXggKyBnZXRDb21wb25lbnRLZXkoY2hpbGQsIGlpKyspO1xuICAgICAgICAgIHN1YnRyZWVDb3VudCArPSB0cmF2ZXJzZUFsbENoaWxkcmVuSW1wbChjaGlsZCwgbmV4dE5hbWUsIGNhbGxiYWNrLCB0cmF2ZXJzZUNvbnRleHQpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgIHZhciBtYXBzQXNDaGlsZHJlbkFkZGVuZHVtID0gJyc7XG4gICAgICAgICAgaWYgKFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQpIHtcbiAgICAgICAgICAgIHZhciBtYXBzQXNDaGlsZHJlbk93bmVyTmFtZSA9IFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQuZ2V0TmFtZSgpO1xuICAgICAgICAgICAgaWYgKG1hcHNBc0NoaWxkcmVuT3duZXJOYW1lKSB7XG4gICAgICAgICAgICAgIG1hcHNBc0NoaWxkcmVuQWRkZW5kdW0gPSAnIENoZWNrIHRoZSByZW5kZXIgbWV0aG9kIG9mIGAnICsgbWFwc0FzQ2hpbGRyZW5Pd25lck5hbWUgKyAnYC4nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyhkaWRXYXJuQWJvdXRNYXBzLCAnVXNpbmcgTWFwcyBhcyBjaGlsZHJlbiBpcyBub3QgeWV0IGZ1bGx5IHN1cHBvcnRlZC4gSXQgaXMgYW4gJyArICdleHBlcmltZW50YWwgZmVhdHVyZSB0aGF0IG1pZ2h0IGJlIHJlbW92ZWQuIENvbnZlcnQgaXQgdG8gYSAnICsgJ3NlcXVlbmNlIC8gaXRlcmFibGUgb2Yga2V5ZWQgUmVhY3RFbGVtZW50cyBpbnN0ZWFkLiVzJywgbWFwc0FzQ2hpbGRyZW5BZGRlbmR1bSkgOiB2b2lkIDA7XG4gICAgICAgICAgZGlkV2FybkFib3V0TWFwcyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgLy8gSXRlcmF0b3Igd2lsbCBwcm92aWRlIGVudHJ5IFtrLHZdIHR1cGxlcyByYXRoZXIgdGhhbiB2YWx1ZXMuXG4gICAgICAgIHdoaWxlICghKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmUpIHtcbiAgICAgICAgICB2YXIgZW50cnkgPSBzdGVwLnZhbHVlO1xuICAgICAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICAgICAgY2hpbGQgPSBlbnRyeVsxXTtcbiAgICAgICAgICAgIG5leHROYW1lID0gbmV4dE5hbWVQcmVmaXggKyBLZXlFc2NhcGVVdGlscy5lc2NhcGUoZW50cnlbMF0pICsgU1VCU0VQQVJBVE9SICsgZ2V0Q29tcG9uZW50S2V5KGNoaWxkLCAwKTtcbiAgICAgICAgICAgIHN1YnRyZWVDb3VudCArPSB0cmF2ZXJzZUFsbENoaWxkcmVuSW1wbChjaGlsZCwgbmV4dE5hbWUsIGNhbGxiYWNrLCB0cmF2ZXJzZUNvbnRleHQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHZhciBhZGRlbmR1bSA9ICcnO1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgYWRkZW5kdW0gPSAnIElmIHlvdSBtZWFudCB0byByZW5kZXIgYSBjb2xsZWN0aW9uIG9mIGNoaWxkcmVuLCB1c2UgYW4gYXJyYXkgJyArICdpbnN0ZWFkIG9yIHdyYXAgdGhlIG9iamVjdCB1c2luZyBjcmVhdGVGcmFnbWVudChvYmplY3QpIGZyb20gdGhlICcgKyAnUmVhY3QgYWRkLW9ucy4nO1xuICAgICAgICBpZiAoY2hpbGRyZW4uX2lzUmVhY3RFbGVtZW50KSB7XG4gICAgICAgICAgYWRkZW5kdW0gPSBcIiBJdCBsb29rcyBsaWtlIHlvdSdyZSB1c2luZyBhbiBlbGVtZW50IGNyZWF0ZWQgYnkgYSBkaWZmZXJlbnQgXCIgKyAndmVyc2lvbiBvZiBSZWFjdC4gTWFrZSBzdXJlIHRvIHVzZSBvbmx5IG9uZSBjb3B5IG9mIFJlYWN0Lic7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQpIHtcbiAgICAgICAgICB2YXIgbmFtZSA9IFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQuZ2V0TmFtZSgpO1xuICAgICAgICAgIGlmIChuYW1lKSB7XG4gICAgICAgICAgICBhZGRlbmR1bSArPSAnIENoZWNrIHRoZSByZW5kZXIgbWV0aG9kIG9mIGAnICsgbmFtZSArICdgLic7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICB2YXIgY2hpbGRyZW5TdHJpbmcgPSBTdHJpbmcoY2hpbGRyZW4pO1xuICAgICAgIWZhbHNlID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IGludmFyaWFudChmYWxzZSwgJ09iamVjdHMgYXJlIG5vdCB2YWxpZCBhcyBhIFJlYWN0IGNoaWxkIChmb3VuZDogJXMpLiVzJywgY2hpbGRyZW5TdHJpbmcgPT09ICdbb2JqZWN0IE9iamVjdF0nID8gJ29iamVjdCB3aXRoIGtleXMgeycgKyBPYmplY3Qua2V5cyhjaGlsZHJlbikuam9pbignLCAnKSArICd9JyA6IGNoaWxkcmVuU3RyaW5nLCBhZGRlbmR1bSkgOiBfcHJvZEludmFyaWFudCgnMzEnLCBjaGlsZHJlblN0cmluZyA9PT0gJ1tvYmplY3QgT2JqZWN0XScgPyAnb2JqZWN0IHdpdGgga2V5cyB7JyArIE9iamVjdC5rZXlzKGNoaWxkcmVuKS5qb2luKCcsICcpICsgJ30nIDogY2hpbGRyZW5TdHJpbmcsIGFkZGVuZHVtKSA6IHZvaWQgMDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3VidHJlZUNvdW50O1xufVxuXG4vKipcbiAqIFRyYXZlcnNlcyBjaGlsZHJlbiB0aGF0IGFyZSB0eXBpY2FsbHkgc3BlY2lmaWVkIGFzIGBwcm9wcy5jaGlsZHJlbmAsIGJ1dFxuICogbWlnaHQgYWxzbyBiZSBzcGVjaWZpZWQgdGhyb3VnaCBhdHRyaWJ1dGVzOlxuICpcbiAqIC0gYHRyYXZlcnNlQWxsQ2hpbGRyZW4odGhpcy5wcm9wcy5jaGlsZHJlbiwgLi4uKWBcbiAqIC0gYHRyYXZlcnNlQWxsQ2hpbGRyZW4odGhpcy5wcm9wcy5sZWZ0UGFuZWxDaGlsZHJlbiwgLi4uKWBcbiAqXG4gKiBUaGUgYHRyYXZlcnNlQ29udGV4dGAgaXMgYW4gb3B0aW9uYWwgYXJndW1lbnQgdGhhdCBpcyBwYXNzZWQgdGhyb3VnaCB0aGVcbiAqIGVudGlyZSB0cmF2ZXJzYWwuIEl0IGNhbiBiZSB1c2VkIHRvIHN0b3JlIGFjY3VtdWxhdGlvbnMgb3IgYW55dGhpbmcgZWxzZSB0aGF0XG4gKiB0aGUgY2FsbGJhY2sgbWlnaHQgZmluZCByZWxldmFudC5cbiAqXG4gKiBAcGFyYW0gez8qfSBjaGlsZHJlbiBDaGlsZHJlbiB0cmVlIG9iamVjdC5cbiAqIEBwYXJhbSB7IWZ1bmN0aW9ufSBjYWxsYmFjayBUbyBpbnZva2UgdXBvbiB0cmF2ZXJzaW5nIGVhY2ggY2hpbGQuXG4gKiBAcGFyYW0gez8qfSB0cmF2ZXJzZUNvbnRleHQgQ29udGV4dCBmb3IgdHJhdmVyc2FsLlxuICogQHJldHVybiB7IW51bWJlcn0gVGhlIG51bWJlciBvZiBjaGlsZHJlbiBpbiB0aGlzIHN1YnRyZWUuXG4gKi9cbmZ1bmN0aW9uIHRyYXZlcnNlQWxsQ2hpbGRyZW4oY2hpbGRyZW4sIGNhbGxiYWNrLCB0cmF2ZXJzZUNvbnRleHQpIHtcbiAgaWYgKGNoaWxkcmVuID09IG51bGwpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIHJldHVybiB0cmF2ZXJzZUFsbENoaWxkcmVuSW1wbChjaGlsZHJlbiwgJycsIGNhbGxiYWNrLCB0cmF2ZXJzZUNvbnRleHQpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHRyYXZlcnNlQWxsQ2hpbGRyZW47XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1kb20vbGliL3RyYXZlcnNlQWxsQ2hpbGRyZW4uanMiLCJ2YXIgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmICghc2VsZikgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIGNhbGwgJiYgKHR5cGVvZiBjYWxsID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpID8gY2FsbCA6IHNlbGY7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXCIgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcykgOiBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhvYmosIGtleXMpIHsgdmFyIHRhcmdldCA9IHt9OyBmb3IgKHZhciBpIGluIG9iaikgeyBpZiAoa2V5cy5pbmRleE9mKGkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGkpKSBjb250aW51ZTsgdGFyZ2V0W2ldID0gb2JqW2ldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IGhvaXN0U3RhdGljcyBmcm9tICdob2lzdC1ub24tcmVhY3Qtc3RhdGljcyc7XG5pbXBvcnQgaW52YXJpYW50IGZyb20gJ2ludmFyaWFudCc7XG5pbXBvcnQgeyBDb21wb25lbnQsIGNyZWF0ZUVsZW1lbnQgfSBmcm9tICdyZWFjdCc7XG5cbmltcG9ydCBTdWJzY3JpcHRpb24gZnJvbSAnLi4vdXRpbHMvU3Vic2NyaXB0aW9uJztcbmltcG9ydCB7IHN0b3JlU2hhcGUsIHN1YnNjcmlwdGlvblNoYXBlIH0gZnJvbSAnLi4vdXRpbHMvUHJvcFR5cGVzJztcblxudmFyIGhvdFJlbG9hZGluZ1ZlcnNpb24gPSAwO1xudmFyIGR1bW15U3RhdGUgPSB7fTtcbmZ1bmN0aW9uIG5vb3AoKSB7fVxuZnVuY3Rpb24gbWFrZVNlbGVjdG9yU3RhdGVmdWwoc291cmNlU2VsZWN0b3IsIHN0b3JlKSB7XG4gIC8vIHdyYXAgdGhlIHNlbGVjdG9yIGluIGFuIG9iamVjdCB0aGF0IHRyYWNrcyBpdHMgcmVzdWx0cyBiZXR3ZWVuIHJ1bnMuXG4gIHZhciBzZWxlY3RvciA9IHtcbiAgICBydW46IGZ1bmN0aW9uIHJ1bkNvbXBvbmVudFNlbGVjdG9yKHByb3BzKSB7XG4gICAgICB0cnkge1xuICAgICAgICB2YXIgbmV4dFByb3BzID0gc291cmNlU2VsZWN0b3Ioc3RvcmUuZ2V0U3RhdGUoKSwgcHJvcHMpO1xuICAgICAgICBpZiAobmV4dFByb3BzICE9PSBzZWxlY3Rvci5wcm9wcyB8fCBzZWxlY3Rvci5lcnJvcikge1xuICAgICAgICAgIHNlbGVjdG9yLnNob3VsZENvbXBvbmVudFVwZGF0ZSA9IHRydWU7XG4gICAgICAgICAgc2VsZWN0b3IucHJvcHMgPSBuZXh0UHJvcHM7XG4gICAgICAgICAgc2VsZWN0b3IuZXJyb3IgPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBzZWxlY3Rvci5zaG91bGRDb21wb25lbnRVcGRhdGUgPSB0cnVlO1xuICAgICAgICBzZWxlY3Rvci5lcnJvciA9IGVycm9yO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICByZXR1cm4gc2VsZWN0b3I7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNvbm5lY3RBZHZhbmNlZChcbi8qXG4gIHNlbGVjdG9yRmFjdG9yeSBpcyBhIGZ1bmMgdGhhdCBpcyByZXNwb25zaWJsZSBmb3IgcmV0dXJuaW5nIHRoZSBzZWxlY3RvciBmdW5jdGlvbiB1c2VkIHRvXG4gIGNvbXB1dGUgbmV3IHByb3BzIGZyb20gc3RhdGUsIHByb3BzLCBhbmQgZGlzcGF0Y2guIEZvciBleGFtcGxlOlxuICAgICBleHBvcnQgZGVmYXVsdCBjb25uZWN0QWR2YW5jZWQoKGRpc3BhdGNoLCBvcHRpb25zKSA9PiAoc3RhdGUsIHByb3BzKSA9PiAoe1xuICAgICAgdGhpbmc6IHN0YXRlLnRoaW5nc1twcm9wcy50aGluZ0lkXSxcbiAgICAgIHNhdmVUaGluZzogZmllbGRzID0+IGRpc3BhdGNoKGFjdGlvbkNyZWF0b3JzLnNhdmVUaGluZyhwcm9wcy50aGluZ0lkLCBmaWVsZHMpKSxcbiAgICB9KSkoWW91ckNvbXBvbmVudClcbiAgIEFjY2VzcyB0byBkaXNwYXRjaCBpcyBwcm92aWRlZCB0byB0aGUgZmFjdG9yeSBzbyBzZWxlY3RvckZhY3RvcmllcyBjYW4gYmluZCBhY3Rpb25DcmVhdG9yc1xuICBvdXRzaWRlIG9mIHRoZWlyIHNlbGVjdG9yIGFzIGFuIG9wdGltaXphdGlvbi4gT3B0aW9ucyBwYXNzZWQgdG8gY29ubmVjdEFkdmFuY2VkIGFyZSBwYXNzZWQgdG9cbiAgdGhlIHNlbGVjdG9yRmFjdG9yeSwgYWxvbmcgd2l0aCBkaXNwbGF5TmFtZSBhbmQgV3JhcHBlZENvbXBvbmVudCwgYXMgdGhlIHNlY29uZCBhcmd1bWVudC5cbiAgIE5vdGUgdGhhdCBzZWxlY3RvckZhY3RvcnkgaXMgcmVzcG9uc2libGUgZm9yIGFsbCBjYWNoaW5nL21lbW9pemF0aW9uIG9mIGluYm91bmQgYW5kIG91dGJvdW5kXG4gIHByb3BzLiBEbyBub3QgdXNlIGNvbm5lY3RBZHZhbmNlZCBkaXJlY3RseSB3aXRob3V0IG1lbW9pemluZyByZXN1bHRzIGJldHdlZW4gY2FsbHMgdG8geW91clxuICBzZWxlY3Rvciwgb3RoZXJ3aXNlIHRoZSBDb25uZWN0IGNvbXBvbmVudCB3aWxsIHJlLXJlbmRlciBvbiBldmVyeSBzdGF0ZSBvciBwcm9wcyBjaGFuZ2UuXG4qL1xuc2VsZWN0b3JGYWN0b3J5KSB7XG4gIHZhciBfY29udGV4dFR5cGVzLCBfY2hpbGRDb250ZXh0VHlwZXM7XG5cbiAgdmFyIF9yZWYgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9LFxuICAgICAgX3JlZiRnZXREaXNwbGF5TmFtZSA9IF9yZWYuZ2V0RGlzcGxheU5hbWUsXG4gICAgICBnZXREaXNwbGF5TmFtZSA9IF9yZWYkZ2V0RGlzcGxheU5hbWUgPT09IHVuZGVmaW5lZCA/IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgcmV0dXJuICdDb25uZWN0QWR2YW5jZWQoJyArIG5hbWUgKyAnKSc7XG4gIH0gOiBfcmVmJGdldERpc3BsYXlOYW1lLFxuICAgICAgX3JlZiRtZXRob2ROYW1lID0gX3JlZi5tZXRob2ROYW1lLFxuICAgICAgbWV0aG9kTmFtZSA9IF9yZWYkbWV0aG9kTmFtZSA9PT0gdW5kZWZpbmVkID8gJ2Nvbm5lY3RBZHZhbmNlZCcgOiBfcmVmJG1ldGhvZE5hbWUsXG4gICAgICBfcmVmJHJlbmRlckNvdW50UHJvcCA9IF9yZWYucmVuZGVyQ291bnRQcm9wLFxuICAgICAgcmVuZGVyQ291bnRQcm9wID0gX3JlZiRyZW5kZXJDb3VudFByb3AgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IF9yZWYkcmVuZGVyQ291bnRQcm9wLFxuICAgICAgX3JlZiRzaG91bGRIYW5kbGVTdGF0ID0gX3JlZi5zaG91bGRIYW5kbGVTdGF0ZUNoYW5nZXMsXG4gICAgICBzaG91bGRIYW5kbGVTdGF0ZUNoYW5nZXMgPSBfcmVmJHNob3VsZEhhbmRsZVN0YXQgPT09IHVuZGVmaW5lZCA/IHRydWUgOiBfcmVmJHNob3VsZEhhbmRsZVN0YXQsXG4gICAgICBfcmVmJHN0b3JlS2V5ID0gX3JlZi5zdG9yZUtleSxcbiAgICAgIHN0b3JlS2V5ID0gX3JlZiRzdG9yZUtleSA9PT0gdW5kZWZpbmVkID8gJ3N0b3JlJyA6IF9yZWYkc3RvcmVLZXksXG4gICAgICBfcmVmJHdpdGhSZWYgPSBfcmVmLndpdGhSZWYsXG4gICAgICB3aXRoUmVmID0gX3JlZiR3aXRoUmVmID09PSB1bmRlZmluZWQgPyBmYWxzZSA6IF9yZWYkd2l0aFJlZixcbiAgICAgIGNvbm5lY3RPcHRpb25zID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFsnZ2V0RGlzcGxheU5hbWUnLCAnbWV0aG9kTmFtZScsICdyZW5kZXJDb3VudFByb3AnLCAnc2hvdWxkSGFuZGxlU3RhdGVDaGFuZ2VzJywgJ3N0b3JlS2V5JywgJ3dpdGhSZWYnXSk7XG5cbiAgdmFyIHN1YnNjcmlwdGlvbktleSA9IHN0b3JlS2V5ICsgJ1N1YnNjcmlwdGlvbic7XG4gIHZhciB2ZXJzaW9uID0gaG90UmVsb2FkaW5nVmVyc2lvbisrO1xuXG4gIHZhciBjb250ZXh0VHlwZXMgPSAoX2NvbnRleHRUeXBlcyA9IHt9LCBfY29udGV4dFR5cGVzW3N0b3JlS2V5XSA9IHN0b3JlU2hhcGUsIF9jb250ZXh0VHlwZXNbc3Vic2NyaXB0aW9uS2V5XSA9IHN1YnNjcmlwdGlvblNoYXBlLCBfY29udGV4dFR5cGVzKTtcbiAgdmFyIGNoaWxkQ29udGV4dFR5cGVzID0gKF9jaGlsZENvbnRleHRUeXBlcyA9IHt9LCBfY2hpbGRDb250ZXh0VHlwZXNbc3Vic2NyaXB0aW9uS2V5XSA9IHN1YnNjcmlwdGlvblNoYXBlLCBfY2hpbGRDb250ZXh0VHlwZXMpO1xuXG4gIHJldHVybiBmdW5jdGlvbiB3cmFwV2l0aENvbm5lY3QoV3JhcHBlZENvbXBvbmVudCkge1xuICAgIGludmFyaWFudCh0eXBlb2YgV3JhcHBlZENvbXBvbmVudCA9PSAnZnVuY3Rpb24nLCAnWW91IG11c3QgcGFzcyBhIGNvbXBvbmVudCB0byB0aGUgZnVuY3Rpb24gcmV0dXJuZWQgYnkgJyArICgnY29ubmVjdC4gSW5zdGVhZCByZWNlaXZlZCAnICsgSlNPTi5zdHJpbmdpZnkoV3JhcHBlZENvbXBvbmVudCkpKTtcblxuICAgIHZhciB3cmFwcGVkQ29tcG9uZW50TmFtZSA9IFdyYXBwZWRDb21wb25lbnQuZGlzcGxheU5hbWUgfHwgV3JhcHBlZENvbXBvbmVudC5uYW1lIHx8ICdDb21wb25lbnQnO1xuXG4gICAgdmFyIGRpc3BsYXlOYW1lID0gZ2V0RGlzcGxheU5hbWUod3JhcHBlZENvbXBvbmVudE5hbWUpO1xuXG4gICAgdmFyIHNlbGVjdG9yRmFjdG9yeU9wdGlvbnMgPSBfZXh0ZW5kcyh7fSwgY29ubmVjdE9wdGlvbnMsIHtcbiAgICAgIGdldERpc3BsYXlOYW1lOiBnZXREaXNwbGF5TmFtZSxcbiAgICAgIG1ldGhvZE5hbWU6IG1ldGhvZE5hbWUsXG4gICAgICByZW5kZXJDb3VudFByb3A6IHJlbmRlckNvdW50UHJvcCxcbiAgICAgIHNob3VsZEhhbmRsZVN0YXRlQ2hhbmdlczogc2hvdWxkSGFuZGxlU3RhdGVDaGFuZ2VzLFxuICAgICAgc3RvcmVLZXk6IHN0b3JlS2V5LFxuICAgICAgd2l0aFJlZjogd2l0aFJlZixcbiAgICAgIGRpc3BsYXlOYW1lOiBkaXNwbGF5TmFtZSxcbiAgICAgIHdyYXBwZWRDb21wb25lbnROYW1lOiB3cmFwcGVkQ29tcG9uZW50TmFtZSxcbiAgICAgIFdyYXBwZWRDb21wb25lbnQ6IFdyYXBwZWRDb21wb25lbnRcbiAgICB9KTtcblxuICAgIHZhciBDb25uZWN0ID0gZnVuY3Rpb24gKF9Db21wb25lbnQpIHtcbiAgICAgIF9pbmhlcml0cyhDb25uZWN0LCBfQ29tcG9uZW50KTtcblxuICAgICAgZnVuY3Rpb24gQ29ubmVjdChwcm9wcywgY29udGV4dCkge1xuICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgQ29ubmVjdCk7XG5cbiAgICAgICAgdmFyIF90aGlzID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgX0NvbXBvbmVudC5jYWxsKHRoaXMsIHByb3BzLCBjb250ZXh0KSk7XG5cbiAgICAgICAgX3RoaXMudmVyc2lvbiA9IHZlcnNpb247XG4gICAgICAgIF90aGlzLnN0YXRlID0ge307XG4gICAgICAgIF90aGlzLnJlbmRlckNvdW50ID0gMDtcbiAgICAgICAgX3RoaXMuc3RvcmUgPSBwcm9wc1tzdG9yZUtleV0gfHwgY29udGV4dFtzdG9yZUtleV07XG4gICAgICAgIF90aGlzLnByb3BzTW9kZSA9IEJvb2xlYW4ocHJvcHNbc3RvcmVLZXldKTtcbiAgICAgICAgX3RoaXMuc2V0V3JhcHBlZEluc3RhbmNlID0gX3RoaXMuc2V0V3JhcHBlZEluc3RhbmNlLmJpbmQoX3RoaXMpO1xuXG4gICAgICAgIGludmFyaWFudChfdGhpcy5zdG9yZSwgJ0NvdWxkIG5vdCBmaW5kIFwiJyArIHN0b3JlS2V5ICsgJ1wiIGluIGVpdGhlciB0aGUgY29udGV4dCBvciBwcm9wcyBvZiAnICsgKCdcIicgKyBkaXNwbGF5TmFtZSArICdcIi4gRWl0aGVyIHdyYXAgdGhlIHJvb3QgY29tcG9uZW50IGluIGEgPFByb3ZpZGVyPiwgJykgKyAoJ29yIGV4cGxpY2l0bHkgcGFzcyBcIicgKyBzdG9yZUtleSArICdcIiBhcyBhIHByb3AgdG8gXCInICsgZGlzcGxheU5hbWUgKyAnXCIuJykpO1xuXG4gICAgICAgIF90aGlzLmluaXRTZWxlY3RvcigpO1xuICAgICAgICBfdGhpcy5pbml0U3Vic2NyaXB0aW9uKCk7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICAgIH1cblxuICAgICAgQ29ubmVjdC5wcm90b3R5cGUuZ2V0Q2hpbGRDb250ZXh0ID0gZnVuY3Rpb24gZ2V0Q2hpbGRDb250ZXh0KCkge1xuICAgICAgICB2YXIgX3JlZjI7XG5cbiAgICAgICAgLy8gSWYgdGhpcyBjb21wb25lbnQgcmVjZWl2ZWQgc3RvcmUgZnJvbSBwcm9wcywgaXRzIHN1YnNjcmlwdGlvbiBzaG91bGQgYmUgdHJhbnNwYXJlbnRcbiAgICAgICAgLy8gdG8gYW55IGRlc2NlbmRhbnRzIHJlY2VpdmluZyBzdG9yZStzdWJzY3JpcHRpb24gZnJvbSBjb250ZXh0OyBpdCBwYXNzZXMgYWxvbmdcbiAgICAgICAgLy8gc3Vic2NyaXB0aW9uIHBhc3NlZCB0byBpdC4gT3RoZXJ3aXNlLCBpdCBzaGFkb3dzIHRoZSBwYXJlbnQgc3Vic2NyaXB0aW9uLCB3aGljaCBhbGxvd3NcbiAgICAgICAgLy8gQ29ubmVjdCB0byBjb250cm9sIG9yZGVyaW5nIG9mIG5vdGlmaWNhdGlvbnMgdG8gZmxvdyB0b3AtZG93bi5cbiAgICAgICAgdmFyIHN1YnNjcmlwdGlvbiA9IHRoaXMucHJvcHNNb2RlID8gbnVsbCA6IHRoaXMuc3Vic2NyaXB0aW9uO1xuICAgICAgICByZXR1cm4gX3JlZjIgPSB7fSwgX3JlZjJbc3Vic2NyaXB0aW9uS2V5XSA9IHN1YnNjcmlwdGlvbiB8fCB0aGlzLmNvbnRleHRbc3Vic2NyaXB0aW9uS2V5XSwgX3JlZjI7XG4gICAgICB9O1xuXG4gICAgICBDb25uZWN0LnByb3RvdHlwZS5jb21wb25lbnREaWRNb3VudCA9IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgICBpZiAoIXNob3VsZEhhbmRsZVN0YXRlQ2hhbmdlcykgcmV0dXJuO1xuXG4gICAgICAgIC8vIGNvbXBvbmVudFdpbGxNb3VudCBmaXJlcyBkdXJpbmcgc2VydmVyIHNpZGUgcmVuZGVyaW5nLCBidXQgY29tcG9uZW50RGlkTW91bnQgYW5kXG4gICAgICAgIC8vIGNvbXBvbmVudFdpbGxVbm1vdW50IGRvIG5vdC4gQmVjYXVzZSBvZiB0aGlzLCB0cnlTdWJzY3JpYmUgaGFwcGVucyBkdXJpbmcgLi4uZGlkTW91bnQuXG4gICAgICAgIC8vIE90aGVyd2lzZSwgdW5zdWJzY3JpcHRpb24gd291bGQgbmV2ZXIgdGFrZSBwbGFjZSBkdXJpbmcgU1NSLCBjYXVzaW5nIGEgbWVtb3J5IGxlYWsuXG4gICAgICAgIC8vIFRvIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSBhIGNoaWxkIGNvbXBvbmVudCBtYXkgaGF2ZSB0cmlnZ2VyZWQgYSBzdGF0ZSBjaGFuZ2UgYnlcbiAgICAgICAgLy8gZGlzcGF0Y2hpbmcgYW4gYWN0aW9uIGluIGl0cyBjb21wb25lbnRXaWxsTW91bnQsIHdlIGhhdmUgdG8gcmUtcnVuIHRoZSBzZWxlY3QgYW5kIG1heWJlXG4gICAgICAgIC8vIHJlLXJlbmRlci5cbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24udHJ5U3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuc2VsZWN0b3IucnVuKHRoaXMucHJvcHMpO1xuICAgICAgICBpZiAodGhpcy5zZWxlY3Rvci5zaG91bGRDb21wb25lbnRVcGRhdGUpIHRoaXMuZm9yY2VVcGRhdGUoKTtcbiAgICAgIH07XG5cbiAgICAgIENvbm5lY3QucHJvdG90eXBlLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgPSBmdW5jdGlvbiBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG5leHRQcm9wcykge1xuICAgICAgICB0aGlzLnNlbGVjdG9yLnJ1bihuZXh0UHJvcHMpO1xuICAgICAgfTtcblxuICAgICAgQ29ubmVjdC5wcm90b3R5cGUuc2hvdWxkQ29tcG9uZW50VXBkYXRlID0gZnVuY3Rpb24gc2hvdWxkQ29tcG9uZW50VXBkYXRlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3Rvci5zaG91bGRDb21wb25lbnRVcGRhdGU7XG4gICAgICB9O1xuXG4gICAgICBDb25uZWN0LnByb3RvdHlwZS5jb21wb25lbnRXaWxsVW5tb3VudCA9IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgICBpZiAodGhpcy5zdWJzY3JpcHRpb24pIHRoaXMuc3Vic2NyaXB0aW9uLnRyeVVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gbnVsbDtcbiAgICAgICAgdGhpcy5ub3RpZnlOZXN0ZWRTdWJzID0gbm9vcDtcbiAgICAgICAgdGhpcy5zdG9yZSA9IG51bGw7XG4gICAgICAgIHRoaXMuc2VsZWN0b3IucnVuID0gbm9vcDtcbiAgICAgICAgdGhpcy5zZWxlY3Rvci5zaG91bGRDb21wb25lbnRVcGRhdGUgPSBmYWxzZTtcbiAgICAgIH07XG5cbiAgICAgIENvbm5lY3QucHJvdG90eXBlLmdldFdyYXBwZWRJbnN0YW5jZSA9IGZ1bmN0aW9uIGdldFdyYXBwZWRJbnN0YW5jZSgpIHtcbiAgICAgICAgaW52YXJpYW50KHdpdGhSZWYsICdUbyBhY2Nlc3MgdGhlIHdyYXBwZWQgaW5zdGFuY2UsIHlvdSBuZWVkIHRvIHNwZWNpZnkgJyArICgneyB3aXRoUmVmOiB0cnVlIH0gaW4gdGhlIG9wdGlvbnMgYXJndW1lbnQgb2YgdGhlICcgKyBtZXRob2ROYW1lICsgJygpIGNhbGwuJykpO1xuICAgICAgICByZXR1cm4gdGhpcy53cmFwcGVkSW5zdGFuY2U7XG4gICAgICB9O1xuXG4gICAgICBDb25uZWN0LnByb3RvdHlwZS5zZXRXcmFwcGVkSW5zdGFuY2UgPSBmdW5jdGlvbiBzZXRXcmFwcGVkSW5zdGFuY2UocmVmKSB7XG4gICAgICAgIHRoaXMud3JhcHBlZEluc3RhbmNlID0gcmVmO1xuICAgICAgfTtcblxuICAgICAgQ29ubmVjdC5wcm90b3R5cGUuaW5pdFNlbGVjdG9yID0gZnVuY3Rpb24gaW5pdFNlbGVjdG9yKCkge1xuICAgICAgICB2YXIgc291cmNlU2VsZWN0b3IgPSBzZWxlY3RvckZhY3RvcnkodGhpcy5zdG9yZS5kaXNwYXRjaCwgc2VsZWN0b3JGYWN0b3J5T3B0aW9ucyk7XG4gICAgICAgIHRoaXMuc2VsZWN0b3IgPSBtYWtlU2VsZWN0b3JTdGF0ZWZ1bChzb3VyY2VTZWxlY3RvciwgdGhpcy5zdG9yZSk7XG4gICAgICAgIHRoaXMuc2VsZWN0b3IucnVuKHRoaXMucHJvcHMpO1xuICAgICAgfTtcblxuICAgICAgQ29ubmVjdC5wcm90b3R5cGUuaW5pdFN1YnNjcmlwdGlvbiA9IGZ1bmN0aW9uIGluaXRTdWJzY3JpcHRpb24oKSB7XG4gICAgICAgIGlmICghc2hvdWxkSGFuZGxlU3RhdGVDaGFuZ2VzKSByZXR1cm47XG5cbiAgICAgICAgLy8gcGFyZW50U3ViJ3Mgc291cmNlIHNob3VsZCBtYXRjaCB3aGVyZSBzdG9yZSBjYW1lIGZyb206IHByb3BzIHZzLiBjb250ZXh0LiBBIGNvbXBvbmVudFxuICAgICAgICAvLyBjb25uZWN0ZWQgdG8gdGhlIHN0b3JlIHZpYSBwcm9wcyBzaG91bGRuJ3QgdXNlIHN1YnNjcmlwdGlvbiBmcm9tIGNvbnRleHQsIG9yIHZpY2UgdmVyc2EuXG4gICAgICAgIHZhciBwYXJlbnRTdWIgPSAodGhpcy5wcm9wc01vZGUgPyB0aGlzLnByb3BzIDogdGhpcy5jb250ZXh0KVtzdWJzY3JpcHRpb25LZXldO1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24odGhpcy5zdG9yZSwgcGFyZW50U3ViLCB0aGlzLm9uU3RhdGVDaGFuZ2UuYmluZCh0aGlzKSk7XG5cbiAgICAgICAgLy8gYG5vdGlmeU5lc3RlZFN1YnNgIGlzIGR1cGxpY2F0ZWQgdG8gaGFuZGxlIHRoZSBjYXNlIHdoZXJlIHRoZSBjb21wb25lbnQgaXMgIHVubW91bnRlZCBpblxuICAgICAgICAvLyB0aGUgbWlkZGxlIG9mIHRoZSBub3RpZmljYXRpb24gbG9vcCwgd2hlcmUgYHRoaXMuc3Vic2NyaXB0aW9uYCB3aWxsIHRoZW4gYmUgbnVsbC4gQW5cbiAgICAgICAgLy8gZXh0cmEgbnVsbCBjaGVjayBldmVyeSBjaGFuZ2UgY2FuIGJlIGF2b2lkZWQgYnkgY29weWluZyB0aGUgbWV0aG9kIG9udG8gYHRoaXNgIGFuZCB0aGVuXG4gICAgICAgIC8vIHJlcGxhY2luZyBpdCB3aXRoIGEgbm8tb3Agb24gdW5tb3VudC4gVGhpcyBjYW4gcHJvYmFibHkgYmUgYXZvaWRlZCBpZiBTdWJzY3JpcHRpb24nc1xuICAgICAgICAvLyBsaXN0ZW5lcnMgbG9naWMgaXMgY2hhbmdlZCB0byBub3QgY2FsbCBsaXN0ZW5lcnMgdGhhdCBoYXZlIGJlZW4gdW5zdWJzY3JpYmVkIGluIHRoZVxuICAgICAgICAvLyBtaWRkbGUgb2YgdGhlIG5vdGlmaWNhdGlvbiBsb29wLlxuICAgICAgICB0aGlzLm5vdGlmeU5lc3RlZFN1YnMgPSB0aGlzLnN1YnNjcmlwdGlvbi5ub3RpZnlOZXN0ZWRTdWJzLmJpbmQodGhpcy5zdWJzY3JpcHRpb24pO1xuICAgICAgfTtcblxuICAgICAgQ29ubmVjdC5wcm90b3R5cGUub25TdGF0ZUNoYW5nZSA9IGZ1bmN0aW9uIG9uU3RhdGVDaGFuZ2UoKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0b3IucnVuKHRoaXMucHJvcHMpO1xuXG4gICAgICAgIGlmICghdGhpcy5zZWxlY3Rvci5zaG91bGRDb21wb25lbnRVcGRhdGUpIHtcbiAgICAgICAgICB0aGlzLm5vdGlmeU5lc3RlZFN1YnMoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmNvbXBvbmVudERpZFVwZGF0ZSA9IHRoaXMubm90aWZ5TmVzdGVkU3Vic09uQ29tcG9uZW50RGlkVXBkYXRlO1xuICAgICAgICAgIHRoaXMuc2V0U3RhdGUoZHVtbXlTdGF0ZSk7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIENvbm5lY3QucHJvdG90eXBlLm5vdGlmeU5lc3RlZFN1YnNPbkNvbXBvbmVudERpZFVwZGF0ZSA9IGZ1bmN0aW9uIG5vdGlmeU5lc3RlZFN1YnNPbkNvbXBvbmVudERpZFVwZGF0ZSgpIHtcbiAgICAgICAgLy8gYGNvbXBvbmVudERpZFVwZGF0ZWAgaXMgY29uZGl0aW9uYWxseSBpbXBsZW1lbnRlZCB3aGVuIGBvblN0YXRlQ2hhbmdlYCBkZXRlcm1pbmVzIGl0XG4gICAgICAgIC8vIG5lZWRzIHRvIG5vdGlmeSBuZXN0ZWQgc3Vicy4gT25jZSBjYWxsZWQsIGl0IHVuaW1wbGVtZW50cyBpdHNlbGYgdW50aWwgZnVydGhlciBzdGF0ZVxuICAgICAgICAvLyBjaGFuZ2VzIG9jY3VyLiBEb2luZyBpdCB0aGlzIHdheSB2cyBoYXZpbmcgYSBwZXJtYW5lbnQgYGNvbXBvbmVudERpZE1vdW50YCB0aGF0IGRvZXNcbiAgICAgICAgLy8gYSBib29sZWFuIGNoZWNrIGV2ZXJ5IHRpbWUgYXZvaWRzIGFuIGV4dHJhIG1ldGhvZCBjYWxsIG1vc3Qgb2YgdGhlIHRpbWUsIHJlc3VsdGluZ1xuICAgICAgICAvLyBpbiBzb21lIHBlcmYgYm9vc3QuXG4gICAgICAgIHRoaXMuY29tcG9uZW50RGlkVXBkYXRlID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLm5vdGlmeU5lc3RlZFN1YnMoKTtcbiAgICAgIH07XG5cbiAgICAgIENvbm5lY3QucHJvdG90eXBlLmlzU3Vic2NyaWJlZCA9IGZ1bmN0aW9uIGlzU3Vic2NyaWJlZCgpIHtcbiAgICAgICAgcmV0dXJuIEJvb2xlYW4odGhpcy5zdWJzY3JpcHRpb24pICYmIHRoaXMuc3Vic2NyaXB0aW9uLmlzU3Vic2NyaWJlZCgpO1xuICAgICAgfTtcblxuICAgICAgQ29ubmVjdC5wcm90b3R5cGUuYWRkRXh0cmFQcm9wcyA9IGZ1bmN0aW9uIGFkZEV4dHJhUHJvcHMocHJvcHMpIHtcbiAgICAgICAgaWYgKCF3aXRoUmVmICYmICFyZW5kZXJDb3VudFByb3AgJiYgISh0aGlzLnByb3BzTW9kZSAmJiB0aGlzLnN1YnNjcmlwdGlvbikpIHJldHVybiBwcm9wcztcbiAgICAgICAgLy8gbWFrZSBhIHNoYWxsb3cgY29weSBzbyB0aGF0IGZpZWxkcyBhZGRlZCBkb24ndCBsZWFrIHRvIHRoZSBvcmlnaW5hbCBzZWxlY3Rvci5cbiAgICAgICAgLy8gdGhpcyBpcyBlc3BlY2lhbGx5IGltcG9ydGFudCBmb3IgJ3JlZicgc2luY2UgdGhhdCdzIGEgcmVmZXJlbmNlIGJhY2sgdG8gdGhlIGNvbXBvbmVudFxuICAgICAgICAvLyBpbnN0YW5jZS4gYSBzaW5nbGV0b24gbWVtb2l6ZWQgc2VsZWN0b3Igd291bGQgdGhlbiBiZSBob2xkaW5nIGEgcmVmZXJlbmNlIHRvIHRoZVxuICAgICAgICAvLyBpbnN0YW5jZSwgcHJldmVudGluZyB0aGUgaW5zdGFuY2UgZnJvbSBiZWluZyBnYXJiYWdlIGNvbGxlY3RlZCwgYW5kIHRoYXQgd291bGQgYmUgYmFkXG4gICAgICAgIHZhciB3aXRoRXh0cmFzID0gX2V4dGVuZHMoe30sIHByb3BzKTtcbiAgICAgICAgaWYgKHdpdGhSZWYpIHdpdGhFeHRyYXMucmVmID0gdGhpcy5zZXRXcmFwcGVkSW5zdGFuY2U7XG4gICAgICAgIGlmIChyZW5kZXJDb3VudFByb3ApIHdpdGhFeHRyYXNbcmVuZGVyQ291bnRQcm9wXSA9IHRoaXMucmVuZGVyQ291bnQrKztcbiAgICAgICAgaWYgKHRoaXMucHJvcHNNb2RlICYmIHRoaXMuc3Vic2NyaXB0aW9uKSB3aXRoRXh0cmFzW3N1YnNjcmlwdGlvbktleV0gPSB0aGlzLnN1YnNjcmlwdGlvbjtcbiAgICAgICAgcmV0dXJuIHdpdGhFeHRyYXM7XG4gICAgICB9O1xuXG4gICAgICBDb25uZWN0LnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICAgIHZhciBzZWxlY3RvciA9IHRoaXMuc2VsZWN0b3I7XG4gICAgICAgIHNlbGVjdG9yLnNob3VsZENvbXBvbmVudFVwZGF0ZSA9IGZhbHNlO1xuXG4gICAgICAgIGlmIChzZWxlY3Rvci5lcnJvcikge1xuICAgICAgICAgIHRocm93IHNlbGVjdG9yLmVycm9yO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBjcmVhdGVFbGVtZW50KFdyYXBwZWRDb21wb25lbnQsIHRoaXMuYWRkRXh0cmFQcm9wcyhzZWxlY3Rvci5wcm9wcykpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gQ29ubmVjdDtcbiAgICB9KENvbXBvbmVudCk7XG5cbiAgICBDb25uZWN0LldyYXBwZWRDb21wb25lbnQgPSBXcmFwcGVkQ29tcG9uZW50O1xuICAgIENvbm5lY3QuZGlzcGxheU5hbWUgPSBkaXNwbGF5TmFtZTtcbiAgICBDb25uZWN0LmNoaWxkQ29udGV4dFR5cGVzID0gY2hpbGRDb250ZXh0VHlwZXM7XG4gICAgQ29ubmVjdC5jb250ZXh0VHlwZXMgPSBjb250ZXh0VHlwZXM7XG4gICAgQ29ubmVjdC5wcm9wVHlwZXMgPSBjb250ZXh0VHlwZXM7XG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgQ29ubmVjdC5wcm90b3R5cGUuY29tcG9uZW50V2lsbFVwZGF0ZSA9IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVcGRhdGUoKSB7XG4gICAgICAgIC8vIFdlIGFyZSBob3QgcmVsb2FkaW5nIVxuICAgICAgICBpZiAodGhpcy52ZXJzaW9uICE9PSB2ZXJzaW9uKSB7XG4gICAgICAgICAgdGhpcy52ZXJzaW9uID0gdmVyc2lvbjtcbiAgICAgICAgICB0aGlzLmluaXRTZWxlY3RvcigpO1xuXG4gICAgICAgICAgaWYgKHRoaXMuc3Vic2NyaXB0aW9uKSB0aGlzLnN1YnNjcmlwdGlvbi50cnlVbnN1YnNjcmliZSgpO1xuICAgICAgICAgIHRoaXMuaW5pdFN1YnNjcmlwdGlvbigpO1xuICAgICAgICAgIGlmIChzaG91bGRIYW5kbGVTdGF0ZUNoYW5nZXMpIHRoaXMuc3Vic2NyaXB0aW9uLnRyeVN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiBob2lzdFN0YXRpY3MoQ29ubmVjdCwgV3JhcHBlZENvbXBvbmVudCk7XG4gIH07XG59XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1yZWR1eC9lcy9jb21wb25lbnRzL2Nvbm5lY3RBZHZhbmNlZC5qcyIsImltcG9ydCB2ZXJpZnlQbGFpbk9iamVjdCBmcm9tICcuLi91dGlscy92ZXJpZnlQbGFpbk9iamVjdCc7XG5cbmV4cG9ydCBmdW5jdGlvbiB3cmFwTWFwVG9Qcm9wc0NvbnN0YW50KGdldENvbnN0YW50KSB7XG4gIHJldHVybiBmdW5jdGlvbiBpbml0Q29uc3RhbnRTZWxlY3RvcihkaXNwYXRjaCwgb3B0aW9ucykge1xuICAgIHZhciBjb25zdGFudCA9IGdldENvbnN0YW50KGRpc3BhdGNoLCBvcHRpb25zKTtcblxuICAgIGZ1bmN0aW9uIGNvbnN0YW50U2VsZWN0b3IoKSB7XG4gICAgICByZXR1cm4gY29uc3RhbnQ7XG4gICAgfVxuICAgIGNvbnN0YW50U2VsZWN0b3IuZGVwZW5kc09uT3duUHJvcHMgPSBmYWxzZTtcbiAgICByZXR1cm4gY29uc3RhbnRTZWxlY3RvcjtcbiAgfTtcbn1cblxuLy8gZGVwZW5kc09uT3duUHJvcHMgaXMgdXNlZCBieSBjcmVhdGVNYXBUb1Byb3BzUHJveHkgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdG8gcGFzcyBwcm9wcyBhcyBhcmdzXG4vLyB0byB0aGUgbWFwVG9Qcm9wcyBmdW5jdGlvbiBiZWluZyB3cmFwcGVkLiBJdCBpcyBhbHNvIHVzZWQgYnkgbWFrZVB1cmVQcm9wc1NlbGVjdG9yIHRvIGRldGVybWluZVxuLy8gd2hldGhlciBtYXBUb1Byb3BzIG5lZWRzIHRvIGJlIGludm9rZWQgd2hlbiBwcm9wcyBoYXZlIGNoYW5nZWQuXG4vLyBcbi8vIEEgbGVuZ3RoIG9mIG9uZSBzaWduYWxzIHRoYXQgbWFwVG9Qcm9wcyBkb2VzIG5vdCBkZXBlbmQgb24gcHJvcHMgZnJvbSB0aGUgcGFyZW50IGNvbXBvbmVudC5cbi8vIEEgbGVuZ3RoIG9mIHplcm8gaXMgYXNzdW1lZCB0byBtZWFuIG1hcFRvUHJvcHMgaXMgZ2V0dGluZyBhcmdzIHZpYSBhcmd1bWVudHMgb3IgLi4uYXJncyBhbmRcbi8vIHRoZXJlZm9yZSBub3QgcmVwb3J0aW5nIGl0cyBsZW5ndGggYWNjdXJhdGVseS4uXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVwZW5kc09uT3duUHJvcHMobWFwVG9Qcm9wcykge1xuICByZXR1cm4gbWFwVG9Qcm9wcy5kZXBlbmRzT25Pd25Qcm9wcyAhPT0gbnVsbCAmJiBtYXBUb1Byb3BzLmRlcGVuZHNPbk93blByb3BzICE9PSB1bmRlZmluZWQgPyBCb29sZWFuKG1hcFRvUHJvcHMuZGVwZW5kc09uT3duUHJvcHMpIDogbWFwVG9Qcm9wcy5sZW5ndGggIT09IDE7XG59XG5cbi8vIFVzZWQgYnkgd2hlbk1hcFN0YXRlVG9Qcm9wc0lzRnVuY3Rpb24gYW5kIHdoZW5NYXBEaXNwYXRjaFRvUHJvcHNJc0Z1bmN0aW9uLFxuLy8gdGhpcyBmdW5jdGlvbiB3cmFwcyBtYXBUb1Byb3BzIGluIGEgcHJveHkgZnVuY3Rpb24gd2hpY2ggZG9lcyBzZXZlcmFsIHRoaW5nczpcbi8vIFxuLy8gICogRGV0ZWN0cyB3aGV0aGVyIHRoZSBtYXBUb1Byb3BzIGZ1bmN0aW9uIGJlaW5nIGNhbGxlZCBkZXBlbmRzIG9uIHByb3BzLCB3aGljaFxuLy8gICAgaXMgdXNlZCBieSBzZWxlY3RvckZhY3RvcnkgdG8gZGVjaWRlIGlmIGl0IHNob3VsZCByZWludm9rZSBvbiBwcm9wcyBjaGFuZ2VzLlxuLy8gICAgXG4vLyAgKiBPbiBmaXJzdCBjYWxsLCBoYW5kbGVzIG1hcFRvUHJvcHMgaWYgcmV0dXJucyBhbm90aGVyIGZ1bmN0aW9uLCBhbmQgdHJlYXRzIHRoYXRcbi8vICAgIG5ldyBmdW5jdGlvbiBhcyB0aGUgdHJ1ZSBtYXBUb1Byb3BzIGZvciBzdWJzZXF1ZW50IGNhbGxzLlxuLy8gICAgXG4vLyAgKiBPbiBmaXJzdCBjYWxsLCB2ZXJpZmllcyB0aGUgZmlyc3QgcmVzdWx0IGlzIGEgcGxhaW4gb2JqZWN0LCBpbiBvcmRlciB0byB3YXJuXG4vLyAgICB0aGUgZGV2ZWxvcGVyIHRoYXQgdGhlaXIgbWFwVG9Qcm9wcyBmdW5jdGlvbiBpcyBub3QgcmV0dXJuaW5nIGEgdmFsaWQgcmVzdWx0LlxuLy8gICAgXG5leHBvcnQgZnVuY3Rpb24gd3JhcE1hcFRvUHJvcHNGdW5jKG1hcFRvUHJvcHMsIG1ldGhvZE5hbWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGluaXRQcm94eVNlbGVjdG9yKGRpc3BhdGNoLCBfcmVmKSB7XG4gICAgdmFyIGRpc3BsYXlOYW1lID0gX3JlZi5kaXNwbGF5TmFtZTtcblxuICAgIHZhciBwcm94eSA9IGZ1bmN0aW9uIG1hcFRvUHJvcHNQcm94eShzdGF0ZU9yRGlzcGF0Y2gsIG93blByb3BzKSB7XG4gICAgICByZXR1cm4gcHJveHkuZGVwZW5kc09uT3duUHJvcHMgPyBwcm94eS5tYXBUb1Byb3BzKHN0YXRlT3JEaXNwYXRjaCwgb3duUHJvcHMpIDogcHJveHkubWFwVG9Qcm9wcyhzdGF0ZU9yRGlzcGF0Y2gpO1xuICAgIH07XG5cbiAgICAvLyBhbGxvdyBkZXRlY3RGYWN0b3J5QW5kVmVyaWZ5IHRvIGdldCBvd25Qcm9wc1xuICAgIHByb3h5LmRlcGVuZHNPbk93blByb3BzID0gdHJ1ZTtcblxuICAgIHByb3h5Lm1hcFRvUHJvcHMgPSBmdW5jdGlvbiBkZXRlY3RGYWN0b3J5QW5kVmVyaWZ5KHN0YXRlT3JEaXNwYXRjaCwgb3duUHJvcHMpIHtcbiAgICAgIHByb3h5Lm1hcFRvUHJvcHMgPSBtYXBUb1Byb3BzO1xuICAgICAgcHJveHkuZGVwZW5kc09uT3duUHJvcHMgPSBnZXREZXBlbmRzT25Pd25Qcm9wcyhtYXBUb1Byb3BzKTtcbiAgICAgIHZhciBwcm9wcyA9IHByb3h5KHN0YXRlT3JEaXNwYXRjaCwgb3duUHJvcHMpO1xuXG4gICAgICBpZiAodHlwZW9mIHByb3BzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHByb3h5Lm1hcFRvUHJvcHMgPSBwcm9wcztcbiAgICAgICAgcHJveHkuZGVwZW5kc09uT3duUHJvcHMgPSBnZXREZXBlbmRzT25Pd25Qcm9wcyhwcm9wcyk7XG4gICAgICAgIHByb3BzID0gcHJveHkoc3RhdGVPckRpc3BhdGNoLCBvd25Qcm9wcyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB2ZXJpZnlQbGFpbk9iamVjdChwcm9wcywgZGlzcGxheU5hbWUsIG1ldGhvZE5hbWUpO1xuXG4gICAgICByZXR1cm4gcHJvcHM7XG4gICAgfTtcblxuICAgIHJldHVybiBwcm94eTtcbiAgfTtcbn1cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3JlYWN0LXJlZHV4L2VzL2Nvbm5lY3Qvd3JhcE1hcFRvUHJvcHMuanMiLCJpbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuXG5leHBvcnQgdmFyIHN1YnNjcmlwdGlvblNoYXBlID0gUHJvcFR5cGVzLnNoYXBlKHtcbiAgdHJ5U3Vic2NyaWJlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICB0cnlVbnN1YnNjcmliZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgbm90aWZ5TmVzdGVkU3ViczogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgaXNTdWJzY3JpYmVkOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkXG59KTtcblxuZXhwb3J0IHZhciBzdG9yZVNoYXBlID0gUHJvcFR5cGVzLnNoYXBlKHtcbiAgc3Vic2NyaWJlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBkaXNwYXRjaDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgZ2V0U3RhdGU6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWRcbn0pO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QtcmVkdXgvZXMvdXRpbHMvUHJvcFR5cGVzLmpzIiwiaW1wb3J0IGlzUGxhaW5PYmplY3QgZnJvbSAnbG9kYXNoLWVzL2lzUGxhaW5PYmplY3QnO1xuaW1wb3J0IHdhcm5pbmcgZnJvbSAnLi93YXJuaW5nJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdmVyaWZ5UGxhaW5PYmplY3QodmFsdWUsIGRpc3BsYXlOYW1lLCBtZXRob2ROYW1lKSB7XG4gIGlmICghaXNQbGFpbk9iamVjdCh2YWx1ZSkpIHtcbiAgICB3YXJuaW5nKG1ldGhvZE5hbWUgKyAnKCkgaW4gJyArIGRpc3BsYXlOYW1lICsgJyBtdXN0IHJldHVybiBhIHBsYWluIG9iamVjdC4gSW5zdGVhZCByZWNlaXZlZCAnICsgdmFsdWUgKyAnLicpO1xuICB9XG59XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1yZWR1eC9lcy91dGlscy92ZXJpZnlQbGFpbk9iamVjdC5qcyIsInZhciBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhvYmosIGtleXMpIHsgdmFyIHRhcmdldCA9IHt9OyBmb3IgKHZhciBpIGluIG9iaikgeyBpZiAoa2V5cy5pbmRleE9mKGkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGkpKSBjb250aW51ZTsgdGFyZ2V0W2ldID0gb2JqW2ldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoIXNlbGYpIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBjYWxsICYmICh0eXBlb2YgY2FsbCA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSA/IGNhbGwgOiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFwiICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfVxuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcblxudmFyIGlzTW9kaWZpZWRFdmVudCA9IGZ1bmN0aW9uIGlzTW9kaWZpZWRFdmVudChldmVudCkge1xuICByZXR1cm4gISEoZXZlbnQubWV0YUtleSB8fCBldmVudC5hbHRLZXkgfHwgZXZlbnQuY3RybEtleSB8fCBldmVudC5zaGlmdEtleSk7XG59O1xuXG4vKipcbiAqIFRoZSBwdWJsaWMgQVBJIGZvciByZW5kZXJpbmcgYSBoaXN0b3J5LWF3YXJlIDxhPi5cbiAqL1xuXG52YXIgTGluayA9IGZ1bmN0aW9uIChfUmVhY3QkQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhMaW5rLCBfUmVhY3QkQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBMaW5rKCkge1xuICAgIHZhciBfdGVtcCwgX3RoaXMsIF9yZXQ7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgTGluayk7XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICByZXR1cm4gX3JldCA9IChfdGVtcCA9IChfdGhpcyA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIF9SZWFjdCRDb21wb25lbnQuY2FsbC5hcHBseShfUmVhY3QkQ29tcG9uZW50LCBbdGhpc10uY29uY2F0KGFyZ3MpKSksIF90aGlzKSwgX3RoaXMuaGFuZGxlQ2xpY2sgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIGlmIChfdGhpcy5wcm9wcy5vbkNsaWNrKSBfdGhpcy5wcm9wcy5vbkNsaWNrKGV2ZW50KTtcblxuICAgICAgaWYgKCFldmVudC5kZWZhdWx0UHJldmVudGVkICYmIC8vIG9uQ2xpY2sgcHJldmVudGVkIGRlZmF1bHRcbiAgICAgIGV2ZW50LmJ1dHRvbiA9PT0gMCAmJiAvLyBpZ25vcmUgcmlnaHQgY2xpY2tzXG4gICAgICAhX3RoaXMucHJvcHMudGFyZ2V0ICYmIC8vIGxldCBicm93c2VyIGhhbmRsZSBcInRhcmdldD1fYmxhbmtcIiBldGMuXG4gICAgICAhaXNNb2RpZmllZEV2ZW50KGV2ZW50KSAvLyBpZ25vcmUgY2xpY2tzIHdpdGggbW9kaWZpZXIga2V5c1xuICAgICAgKSB7XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAgIHZhciBoaXN0b3J5ID0gX3RoaXMuY29udGV4dC5yb3V0ZXIuaGlzdG9yeTtcbiAgICAgICAgICB2YXIgX3RoaXMkcHJvcHMgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgICAgICAgcmVwbGFjZSA9IF90aGlzJHByb3BzLnJlcGxhY2UsXG4gICAgICAgICAgICAgIHRvID0gX3RoaXMkcHJvcHMudG87XG5cblxuICAgICAgICAgIGlmIChyZXBsYWNlKSB7XG4gICAgICAgICAgICBoaXN0b3J5LnJlcGxhY2UodG8pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBoaXN0b3J5LnB1c2godG8pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sIF90ZW1wKSwgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oX3RoaXMsIF9yZXQpO1xuICB9XG5cbiAgTGluay5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgIHZhciBfcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICByZXBsYWNlID0gX3Byb3BzLnJlcGxhY2UsXG4gICAgICAgIHRvID0gX3Byb3BzLnRvLFxuICAgICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcHJvcHMsIFsncmVwbGFjZScsICd0byddKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuXG4gICAgdmFyIGhyZWYgPSB0aGlzLmNvbnRleHQucm91dGVyLmhpc3RvcnkuY3JlYXRlSHJlZih0eXBlb2YgdG8gPT09ICdzdHJpbmcnID8geyBwYXRobmFtZTogdG8gfSA6IHRvKTtcblxuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KCdhJywgX2V4dGVuZHMoe30sIHByb3BzLCB7IG9uQ2xpY2s6IHRoaXMuaGFuZGxlQ2xpY2ssIGhyZWY6IGhyZWYgfSkpO1xuICB9O1xuXG4gIHJldHVybiBMaW5rO1xufShSZWFjdC5Db21wb25lbnQpO1xuXG5MaW5rLnByb3BUeXBlcyA9IHtcbiAgb25DbGljazogUHJvcFR5cGVzLmZ1bmMsXG4gIHRhcmdldDogUHJvcFR5cGVzLnN0cmluZyxcbiAgcmVwbGFjZTogUHJvcFR5cGVzLmJvb2wsXG4gIHRvOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMub2JqZWN0XSkuaXNSZXF1aXJlZFxufTtcbkxpbmsuZGVmYXVsdFByb3BzID0ge1xuICByZXBsYWNlOiBmYWxzZVxufTtcbkxpbmsuY29udGV4dFR5cGVzID0ge1xuICByb3V0ZXI6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgaGlzdG9yeTogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgIHB1c2g6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgICByZXBsYWNlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgICAgY3JlYXRlSHJlZjogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZFxuICAgIH0pLmlzUmVxdWlyZWRcbiAgfSkuaXNSZXF1aXJlZFxufTtcblxuXG5leHBvcnQgZGVmYXVsdCBMaW5rO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3Qtcm91dGVyLWRvbS9lcy9MaW5rLmpzIiwidmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoIXNlbGYpIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBjYWxsICYmICh0eXBlb2YgY2FsbCA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSA/IGNhbGwgOiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFwiICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfVxuXG5pbXBvcnQgd2FybmluZyBmcm9tICd3YXJuaW5nJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IG1hdGNoUGF0aCBmcm9tICcuL21hdGNoUGF0aCc7XG5cbi8qKlxuICogVGhlIHB1YmxpYyBBUEkgZm9yIG1hdGNoaW5nIGEgc2luZ2xlIHBhdGggYW5kIHJlbmRlcmluZy5cbiAqL1xuXG52YXIgUm91dGUgPSBmdW5jdGlvbiAoX1JlYWN0JENvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoUm91dGUsIF9SZWFjdCRDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIFJvdXRlKCkge1xuICAgIHZhciBfdGVtcCwgX3RoaXMsIF9yZXQ7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgUm91dGUpO1xuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgcmV0dXJuIF9yZXQgPSAoX3RlbXAgPSAoX3RoaXMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCBfUmVhY3QkQ29tcG9uZW50LmNhbGwuYXBwbHkoX1JlYWN0JENvbXBvbmVudCwgW3RoaXNdLmNvbmNhdChhcmdzKSkpLCBfdGhpcyksIF90aGlzLnN0YXRlID0ge1xuICAgICAgbWF0Y2g6IF90aGlzLmNvbXB1dGVNYXRjaChfdGhpcy5wcm9wcywgX3RoaXMuY29udGV4dC5yb3V0ZXIpXG4gICAgfSwgX3RlbXApLCBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihfdGhpcywgX3JldCk7XG4gIH1cblxuICBSb3V0ZS5wcm90b3R5cGUuZ2V0Q2hpbGRDb250ZXh0ID0gZnVuY3Rpb24gZ2V0Q2hpbGRDb250ZXh0KCkge1xuICAgIHJldHVybiB7XG4gICAgICByb3V0ZXI6IF9leHRlbmRzKHt9LCB0aGlzLmNvbnRleHQucm91dGVyLCB7XG4gICAgICAgIHJvdXRlOiB7XG4gICAgICAgICAgbG9jYXRpb246IHRoaXMucHJvcHMubG9jYXRpb24gfHwgdGhpcy5jb250ZXh0LnJvdXRlci5yb3V0ZS5sb2NhdGlvbixcbiAgICAgICAgICBtYXRjaDogdGhpcy5zdGF0ZS5tYXRjaFxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH07XG4gIH07XG5cbiAgUm91dGUucHJvdG90eXBlLmNvbXB1dGVNYXRjaCA9IGZ1bmN0aW9uIGNvbXB1dGVNYXRjaChfcmVmLCBfcmVmMikge1xuICAgIHZhciBjb21wdXRlZE1hdGNoID0gX3JlZi5jb21wdXRlZE1hdGNoLFxuICAgICAgICBsb2NhdGlvbiA9IF9yZWYubG9jYXRpb24sXG4gICAgICAgIHBhdGggPSBfcmVmLnBhdGgsXG4gICAgICAgIHN0cmljdCA9IF9yZWYuc3RyaWN0LFxuICAgICAgICBleGFjdCA9IF9yZWYuZXhhY3Q7XG4gICAgdmFyIHJvdXRlID0gX3JlZjIucm91dGU7XG5cbiAgICBpZiAoY29tcHV0ZWRNYXRjaCkgcmV0dXJuIGNvbXB1dGVkTWF0Y2g7IC8vIDxTd2l0Y2g+IGFscmVhZHkgY29tcHV0ZWQgdGhlIG1hdGNoIGZvciB1c1xuXG4gICAgdmFyIHBhdGhuYW1lID0gKGxvY2F0aW9uIHx8IHJvdXRlLmxvY2F0aW9uKS5wYXRobmFtZTtcblxuICAgIHJldHVybiBwYXRoID8gbWF0Y2hQYXRoKHBhdGhuYW1lLCB7IHBhdGg6IHBhdGgsIHN0cmljdDogc3RyaWN0LCBleGFjdDogZXhhY3QgfSkgOiByb3V0ZS5tYXRjaDtcbiAgfTtcblxuICBSb3V0ZS5wcm90b3R5cGUuY29tcG9uZW50V2lsbE1vdW50ID0gZnVuY3Rpb24gY29tcG9uZW50V2lsbE1vdW50KCkge1xuICAgIHZhciBfcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICBjb21wb25lbnQgPSBfcHJvcHMuY29tcG9uZW50LFxuICAgICAgICByZW5kZXIgPSBfcHJvcHMucmVuZGVyLFxuICAgICAgICBjaGlsZHJlbiA9IF9wcm9wcy5jaGlsZHJlbjtcblxuXG4gICAgd2FybmluZyghKGNvbXBvbmVudCAmJiByZW5kZXIpLCAnWW91IHNob3VsZCBub3QgdXNlIDxSb3V0ZSBjb21wb25lbnQ+IGFuZCA8Um91dGUgcmVuZGVyPiBpbiB0aGUgc2FtZSByb3V0ZTsgPFJvdXRlIHJlbmRlcj4gd2lsbCBiZSBpZ25vcmVkJyk7XG5cbiAgICB3YXJuaW5nKCEoY29tcG9uZW50ICYmIGNoaWxkcmVuKSwgJ1lvdSBzaG91bGQgbm90IHVzZSA8Um91dGUgY29tcG9uZW50PiBhbmQgPFJvdXRlIGNoaWxkcmVuPiBpbiB0aGUgc2FtZSByb3V0ZTsgPFJvdXRlIGNoaWxkcmVuPiB3aWxsIGJlIGlnbm9yZWQnKTtcblxuICAgIHdhcm5pbmcoIShyZW5kZXIgJiYgY2hpbGRyZW4pLCAnWW91IHNob3VsZCBub3QgdXNlIDxSb3V0ZSByZW5kZXI+IGFuZCA8Um91dGUgY2hpbGRyZW4+IGluIHRoZSBzYW1lIHJvdXRlOyA8Um91dGUgY2hpbGRyZW4+IHdpbGwgYmUgaWdub3JlZCcpO1xuICB9O1xuXG4gIFJvdXRlLnByb3RvdHlwZS5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzID0gZnVuY3Rpb24gY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXh0UHJvcHMsIG5leHRDb250ZXh0KSB7XG4gICAgd2FybmluZyghKG5leHRQcm9wcy5sb2NhdGlvbiAmJiAhdGhpcy5wcm9wcy5sb2NhdGlvbiksICc8Um91dGU+IGVsZW1lbnRzIHNob3VsZCBub3QgY2hhbmdlIGZyb20gdW5jb250cm9sbGVkIHRvIGNvbnRyb2xsZWQgKG9yIHZpY2UgdmVyc2EpLiBZb3UgaW5pdGlhbGx5IHVzZWQgbm8gXCJsb2NhdGlvblwiIHByb3AgYW5kIHRoZW4gcHJvdmlkZWQgb25lIG9uIGEgc3Vic2VxdWVudCByZW5kZXIuJyk7XG5cbiAgICB3YXJuaW5nKCEoIW5leHRQcm9wcy5sb2NhdGlvbiAmJiB0aGlzLnByb3BzLmxvY2F0aW9uKSwgJzxSb3V0ZT4gZWxlbWVudHMgc2hvdWxkIG5vdCBjaGFuZ2UgZnJvbSBjb250cm9sbGVkIHRvIHVuY29udHJvbGxlZCAob3IgdmljZSB2ZXJzYSkuIFlvdSBwcm92aWRlZCBhIFwibG9jYXRpb25cIiBwcm9wIGluaXRpYWxseSBidXQgb21pdHRlZCBpdCBvbiBhIHN1YnNlcXVlbnQgcmVuZGVyLicpO1xuXG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBtYXRjaDogdGhpcy5jb21wdXRlTWF0Y2gobmV4dFByb3BzLCBuZXh0Q29udGV4dC5yb3V0ZXIpXG4gICAgfSk7XG4gIH07XG5cbiAgUm91dGUucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICB2YXIgbWF0Y2ggPSB0aGlzLnN0YXRlLm1hdGNoO1xuICAgIHZhciBfcHJvcHMyID0gdGhpcy5wcm9wcyxcbiAgICAgICAgY2hpbGRyZW4gPSBfcHJvcHMyLmNoaWxkcmVuLFxuICAgICAgICBjb21wb25lbnQgPSBfcHJvcHMyLmNvbXBvbmVudCxcbiAgICAgICAgcmVuZGVyID0gX3Byb3BzMi5yZW5kZXI7XG4gICAgdmFyIF9jb250ZXh0JHJvdXRlciA9IHRoaXMuY29udGV4dC5yb3V0ZXIsXG4gICAgICAgIGhpc3RvcnkgPSBfY29udGV4dCRyb3V0ZXIuaGlzdG9yeSxcbiAgICAgICAgcm91dGUgPSBfY29udGV4dCRyb3V0ZXIucm91dGUsXG4gICAgICAgIHN0YXRpY0NvbnRleHQgPSBfY29udGV4dCRyb3V0ZXIuc3RhdGljQ29udGV4dDtcblxuICAgIHZhciBsb2NhdGlvbiA9IHRoaXMucHJvcHMubG9jYXRpb24gfHwgcm91dGUubG9jYXRpb247XG4gICAgdmFyIHByb3BzID0geyBtYXRjaDogbWF0Y2gsIGxvY2F0aW9uOiBsb2NhdGlvbiwgaGlzdG9yeTogaGlzdG9yeSwgc3RhdGljQ29udGV4dDogc3RhdGljQ29udGV4dCB9O1xuXG4gICAgcmV0dXJuIGNvbXBvbmVudCA/IC8vIGNvbXBvbmVudCBwcm9wIGdldHMgZmlyc3QgcHJpb3JpdHksIG9ubHkgY2FsbGVkIGlmIHRoZXJlJ3MgYSBtYXRjaFxuICAgIG1hdGNoID8gUmVhY3QuY3JlYXRlRWxlbWVudChjb21wb25lbnQsIHByb3BzKSA6IG51bGwgOiByZW5kZXIgPyAvLyByZW5kZXIgcHJvcCBpcyBuZXh0LCBvbmx5IGNhbGxlZCBpZiB0aGVyZSdzIGEgbWF0Y2hcbiAgICBtYXRjaCA/IHJlbmRlcihwcm9wcykgOiBudWxsIDogY2hpbGRyZW4gPyAvLyBjaGlsZHJlbiBjb21lIGxhc3QsIGFsd2F5cyBjYWxsZWRcbiAgICB0eXBlb2YgY2hpbGRyZW4gPT09ICdmdW5jdGlvbicgPyBjaGlsZHJlbihwcm9wcykgOiAhQXJyYXkuaXNBcnJheShjaGlsZHJlbikgfHwgY2hpbGRyZW4ubGVuZ3RoID8gLy8gUHJlYWN0IGRlZmF1bHRzIHRvIGVtcHR5IGNoaWxkcmVuIGFycmF5XG4gICAgUmVhY3QuQ2hpbGRyZW4ub25seShjaGlsZHJlbikgOiBudWxsIDogbnVsbDtcbiAgfTtcblxuICByZXR1cm4gUm91dGU7XG59KFJlYWN0LkNvbXBvbmVudCk7XG5cblJvdXRlLnByb3BUeXBlcyA9IHtcbiAgY29tcHV0ZWRNYXRjaDogUHJvcFR5cGVzLm9iamVjdCwgLy8gcHJpdmF0ZSwgZnJvbSA8U3dpdGNoPlxuICBwYXRoOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBleGFjdDogUHJvcFR5cGVzLmJvb2wsXG4gIHN0cmljdDogUHJvcFR5cGVzLmJvb2wsXG4gIGNvbXBvbmVudDogUHJvcFR5cGVzLmZ1bmMsXG4gIHJlbmRlcjogUHJvcFR5cGVzLmZ1bmMsXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm5vZGVdKSxcbiAgbG9jYXRpb246IFByb3BUeXBlcy5vYmplY3Rcbn07XG5Sb3V0ZS5jb250ZXh0VHlwZXMgPSB7XG4gIHJvdXRlcjogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBoaXN0b3J5OiBQcm9wVHlwZXMub2JqZWN0LmlzUmVxdWlyZWQsXG4gICAgcm91dGU6IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZCxcbiAgICBzdGF0aWNDb250ZXh0OiBQcm9wVHlwZXMub2JqZWN0XG4gIH0pXG59O1xuUm91dGUuY2hpbGRDb250ZXh0VHlwZXMgPSB7XG4gIHJvdXRlcjogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkXG59O1xuXG5cbmV4cG9ydCBkZWZhdWx0IFJvdXRlO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3Qtcm91dGVyL2VzL1JvdXRlLmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIF9wcm9kSW52YXJpYW50ID0gcmVxdWlyZSgnLi9yZWFjdFByb2RJbnZhcmlhbnQnKSxcbiAgICBfYXNzaWduID0gcmVxdWlyZSgnb2JqZWN0LWFzc2lnbicpO1xuXG52YXIgUmVhY3ROb29wVXBkYXRlUXVldWUgPSByZXF1aXJlKCcuL1JlYWN0Tm9vcFVwZGF0ZVF1ZXVlJyk7XG5cbnZhciBjYW5EZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vY2FuRGVmaW5lUHJvcGVydHknKTtcbnZhciBlbXB0eU9iamVjdCA9IHJlcXVpcmUoJ2ZianMvbGliL2VtcHR5T2JqZWN0Jyk7XG52YXIgaW52YXJpYW50ID0gcmVxdWlyZSgnZmJqcy9saWIvaW52YXJpYW50Jyk7XG52YXIgbG93UHJpb3JpdHlXYXJuaW5nID0gcmVxdWlyZSgnLi9sb3dQcmlvcml0eVdhcm5pbmcnKTtcblxuLyoqXG4gKiBCYXNlIGNsYXNzIGhlbHBlcnMgZm9yIHRoZSB1cGRhdGluZyBzdGF0ZSBvZiBhIGNvbXBvbmVudC5cbiAqL1xuZnVuY3Rpb24gUmVhY3RDb21wb25lbnQocHJvcHMsIGNvbnRleHQsIHVwZGF0ZXIpIHtcbiAgdGhpcy5wcm9wcyA9IHByb3BzO1xuICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuICB0aGlzLnJlZnMgPSBlbXB0eU9iamVjdDtcbiAgLy8gV2UgaW5pdGlhbGl6ZSB0aGUgZGVmYXVsdCB1cGRhdGVyIGJ1dCB0aGUgcmVhbCBvbmUgZ2V0cyBpbmplY3RlZCBieSB0aGVcbiAgLy8gcmVuZGVyZXIuXG4gIHRoaXMudXBkYXRlciA9IHVwZGF0ZXIgfHwgUmVhY3ROb29wVXBkYXRlUXVldWU7XG59XG5cblJlYWN0Q29tcG9uZW50LnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50ID0ge307XG5cbi8qKlxuICogU2V0cyBhIHN1YnNldCBvZiB0aGUgc3RhdGUuIEFsd2F5cyB1c2UgdGhpcyB0byBtdXRhdGVcbiAqIHN0YXRlLiBZb3Ugc2hvdWxkIHRyZWF0IGB0aGlzLnN0YXRlYCBhcyBpbW11dGFibGUuXG4gKlxuICogVGhlcmUgaXMgbm8gZ3VhcmFudGVlIHRoYXQgYHRoaXMuc3RhdGVgIHdpbGwgYmUgaW1tZWRpYXRlbHkgdXBkYXRlZCwgc29cbiAqIGFjY2Vzc2luZyBgdGhpcy5zdGF0ZWAgYWZ0ZXIgY2FsbGluZyB0aGlzIG1ldGhvZCBtYXkgcmV0dXJuIHRoZSBvbGQgdmFsdWUuXG4gKlxuICogVGhlcmUgaXMgbm8gZ3VhcmFudGVlIHRoYXQgY2FsbHMgdG8gYHNldFN0YXRlYCB3aWxsIHJ1biBzeW5jaHJvbm91c2x5LFxuICogYXMgdGhleSBtYXkgZXZlbnR1YWxseSBiZSBiYXRjaGVkIHRvZ2V0aGVyLiAgWW91IGNhbiBwcm92aWRlIGFuIG9wdGlvbmFsXG4gKiBjYWxsYmFjayB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQgd2hlbiB0aGUgY2FsbCB0byBzZXRTdGF0ZSBpcyBhY3R1YWxseVxuICogY29tcGxldGVkLlxuICpcbiAqIFdoZW4gYSBmdW5jdGlvbiBpcyBwcm92aWRlZCB0byBzZXRTdGF0ZSwgaXQgd2lsbCBiZSBjYWxsZWQgYXQgc29tZSBwb2ludCBpblxuICogdGhlIGZ1dHVyZSAobm90IHN5bmNocm9ub3VzbHkpLiBJdCB3aWxsIGJlIGNhbGxlZCB3aXRoIHRoZSB1cCB0byBkYXRlXG4gKiBjb21wb25lbnQgYXJndW1lbnRzIChzdGF0ZSwgcHJvcHMsIGNvbnRleHQpLiBUaGVzZSB2YWx1ZXMgY2FuIGJlIGRpZmZlcmVudFxuICogZnJvbSB0aGlzLiogYmVjYXVzZSB5b3VyIGZ1bmN0aW9uIG1heSBiZSBjYWxsZWQgYWZ0ZXIgcmVjZWl2ZVByb3BzIGJ1dCBiZWZvcmVcbiAqIHNob3VsZENvbXBvbmVudFVwZGF0ZSwgYW5kIHRoaXMgbmV3IHN0YXRlLCBwcm9wcywgYW5kIGNvbnRleHQgd2lsbCBub3QgeWV0IGJlXG4gKiBhc3NpZ25lZCB0byB0aGlzLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fGZ1bmN0aW9ufSBwYXJ0aWFsU3RhdGUgTmV4dCBwYXJ0aWFsIHN0YXRlIG9yIGZ1bmN0aW9uIHRvXG4gKiAgICAgICAgcHJvZHVjZSBuZXh0IHBhcnRpYWwgc3RhdGUgdG8gYmUgbWVyZ2VkIHdpdGggY3VycmVudCBzdGF0ZS5cbiAqIEBwYXJhbSB7P2Z1bmN0aW9ufSBjYWxsYmFjayBDYWxsZWQgYWZ0ZXIgc3RhdGUgaXMgdXBkYXRlZC5cbiAqIEBmaW5hbFxuICogQHByb3RlY3RlZFxuICovXG5SZWFjdENvbXBvbmVudC5wcm90b3R5cGUuc2V0U3RhdGUgPSBmdW5jdGlvbiAocGFydGlhbFN0YXRlLCBjYWxsYmFjaykge1xuICAhKHR5cGVvZiBwYXJ0aWFsU3RhdGUgPT09ICdvYmplY3QnIHx8IHR5cGVvZiBwYXJ0aWFsU3RhdGUgPT09ICdmdW5jdGlvbicgfHwgcGFydGlhbFN0YXRlID09IG51bGwpID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IGludmFyaWFudChmYWxzZSwgJ3NldFN0YXRlKC4uLik6IHRha2VzIGFuIG9iamVjdCBvZiBzdGF0ZSB2YXJpYWJsZXMgdG8gdXBkYXRlIG9yIGEgZnVuY3Rpb24gd2hpY2ggcmV0dXJucyBhbiBvYmplY3Qgb2Ygc3RhdGUgdmFyaWFibGVzLicpIDogX3Byb2RJbnZhcmlhbnQoJzg1JykgOiB2b2lkIDA7XG4gIHRoaXMudXBkYXRlci5lbnF1ZXVlU2V0U3RhdGUodGhpcywgcGFydGlhbFN0YXRlKTtcbiAgaWYgKGNhbGxiYWNrKSB7XG4gICAgdGhpcy51cGRhdGVyLmVucXVldWVDYWxsYmFjayh0aGlzLCBjYWxsYmFjaywgJ3NldFN0YXRlJyk7XG4gIH1cbn07XG5cbi8qKlxuICogRm9yY2VzIGFuIHVwZGF0ZS4gVGhpcyBzaG91bGQgb25seSBiZSBpbnZva2VkIHdoZW4gaXQgaXMga25vd24gd2l0aFxuICogY2VydGFpbnR5IHRoYXQgd2UgYXJlICoqbm90KiogaW4gYSBET00gdHJhbnNhY3Rpb24uXG4gKlxuICogWW91IG1heSB3YW50IHRvIGNhbGwgdGhpcyB3aGVuIHlvdSBrbm93IHRoYXQgc29tZSBkZWVwZXIgYXNwZWN0IG9mIHRoZVxuICogY29tcG9uZW50J3Mgc3RhdGUgaGFzIGNoYW5nZWQgYnV0IGBzZXRTdGF0ZWAgd2FzIG5vdCBjYWxsZWQuXG4gKlxuICogVGhpcyB3aWxsIG5vdCBpbnZva2UgYHNob3VsZENvbXBvbmVudFVwZGF0ZWAsIGJ1dCBpdCB3aWxsIGludm9rZVxuICogYGNvbXBvbmVudFdpbGxVcGRhdGVgIGFuZCBgY29tcG9uZW50RGlkVXBkYXRlYC5cbiAqXG4gKiBAcGFyYW0gez9mdW5jdGlvbn0gY2FsbGJhY2sgQ2FsbGVkIGFmdGVyIHVwZGF0ZSBpcyBjb21wbGV0ZS5cbiAqIEBmaW5hbFxuICogQHByb3RlY3RlZFxuICovXG5SZWFjdENvbXBvbmVudC5wcm90b3R5cGUuZm9yY2VVcGRhdGUgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgdGhpcy51cGRhdGVyLmVucXVldWVGb3JjZVVwZGF0ZSh0aGlzKTtcbiAgaWYgKGNhbGxiYWNrKSB7XG4gICAgdGhpcy51cGRhdGVyLmVucXVldWVDYWxsYmFjayh0aGlzLCBjYWxsYmFjaywgJ2ZvcmNlVXBkYXRlJyk7XG4gIH1cbn07XG5cbi8qKlxuICogRGVwcmVjYXRlZCBBUElzLiBUaGVzZSBBUElzIHVzZWQgdG8gZXhpc3Qgb24gY2xhc3NpYyBSZWFjdCBjbGFzc2VzIGJ1dCBzaW5jZVxuICogd2Ugd291bGQgbGlrZSB0byBkZXByZWNhdGUgdGhlbSwgd2UncmUgbm90IGdvaW5nIHRvIG1vdmUgdGhlbSBvdmVyIHRvIHRoaXNcbiAqIG1vZGVybiBiYXNlIGNsYXNzLiBJbnN0ZWFkLCB3ZSBkZWZpbmUgYSBnZXR0ZXIgdGhhdCB3YXJucyBpZiBpdCdzIGFjY2Vzc2VkLlxuICovXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICB2YXIgZGVwcmVjYXRlZEFQSXMgPSB7XG4gICAgaXNNb3VudGVkOiBbJ2lzTW91bnRlZCcsICdJbnN0ZWFkLCBtYWtlIHN1cmUgdG8gY2xlYW4gdXAgc3Vic2NyaXB0aW9ucyBhbmQgcGVuZGluZyByZXF1ZXN0cyBpbiAnICsgJ2NvbXBvbmVudFdpbGxVbm1vdW50IHRvIHByZXZlbnQgbWVtb3J5IGxlYWtzLiddLFxuICAgIHJlcGxhY2VTdGF0ZTogWydyZXBsYWNlU3RhdGUnLCAnUmVmYWN0b3IgeW91ciBjb2RlIHRvIHVzZSBzZXRTdGF0ZSBpbnN0ZWFkIChzZWUgJyArICdodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzMyMzYpLiddXG4gIH07XG4gIHZhciBkZWZpbmVEZXByZWNhdGlvbldhcm5pbmcgPSBmdW5jdGlvbiAobWV0aG9kTmFtZSwgaW5mbykge1xuICAgIGlmIChjYW5EZWZpbmVQcm9wZXJ0eSkge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFJlYWN0Q29tcG9uZW50LnByb3RvdHlwZSwgbWV0aG9kTmFtZSwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBsb3dQcmlvcml0eVdhcm5pbmcoZmFsc2UsICclcyguLi4pIGlzIGRlcHJlY2F0ZWQgaW4gcGxhaW4gSmF2YVNjcmlwdCBSZWFjdCBjbGFzc2VzLiAlcycsIGluZm9bMF0sIGluZm9bMV0pO1xuICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcbiAgZm9yICh2YXIgZm5OYW1lIGluIGRlcHJlY2F0ZWRBUElzKSB7XG4gICAgaWYgKGRlcHJlY2F0ZWRBUElzLmhhc093blByb3BlcnR5KGZuTmFtZSkpIHtcbiAgICAgIGRlZmluZURlcHJlY2F0aW9uV2FybmluZyhmbk5hbWUsIGRlcHJlY2F0ZWRBUElzW2ZuTmFtZV0pO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEJhc2UgY2xhc3MgaGVscGVycyBmb3IgdGhlIHVwZGF0aW5nIHN0YXRlIG9mIGEgY29tcG9uZW50LlxuICovXG5mdW5jdGlvbiBSZWFjdFB1cmVDb21wb25lbnQocHJvcHMsIGNvbnRleHQsIHVwZGF0ZXIpIHtcbiAgLy8gRHVwbGljYXRlZCBmcm9tIFJlYWN0Q29tcG9uZW50LlxuICB0aGlzLnByb3BzID0gcHJvcHM7XG4gIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gIHRoaXMucmVmcyA9IGVtcHR5T2JqZWN0O1xuICAvLyBXZSBpbml0aWFsaXplIHRoZSBkZWZhdWx0IHVwZGF0ZXIgYnV0IHRoZSByZWFsIG9uZSBnZXRzIGluamVjdGVkIGJ5IHRoZVxuICAvLyByZW5kZXJlci5cbiAgdGhpcy51cGRhdGVyID0gdXBkYXRlciB8fCBSZWFjdE5vb3BVcGRhdGVRdWV1ZTtcbn1cblxuZnVuY3Rpb24gQ29tcG9uZW50RHVtbXkoKSB7fVxuQ29tcG9uZW50RHVtbXkucHJvdG90eXBlID0gUmVhY3RDb21wb25lbnQucHJvdG90eXBlO1xuUmVhY3RQdXJlQ29tcG9uZW50LnByb3RvdHlwZSA9IG5ldyBDb21wb25lbnREdW1teSgpO1xuUmVhY3RQdXJlQ29tcG9uZW50LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJlYWN0UHVyZUNvbXBvbmVudDtcbi8vIEF2b2lkIGFuIGV4dHJhIHByb3RvdHlwZSBqdW1wIGZvciB0aGVzZSBtZXRob2RzLlxuX2Fzc2lnbihSZWFjdFB1cmVDb21wb25lbnQucHJvdG90eXBlLCBSZWFjdENvbXBvbmVudC5wcm90b3R5cGUpO1xuUmVhY3RQdXJlQ29tcG9uZW50LnByb3RvdHlwZS5pc1B1cmVSZWFjdENvbXBvbmVudCA9IHRydWU7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBDb21wb25lbnQ6IFJlYWN0Q29tcG9uZW50LFxuICBQdXJlQ29tcG9uZW50OiBSZWFjdFB1cmVDb21wb25lbnRcbn07XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC9saWIvUmVhY3RCYXNlQ2xhc3Nlcy5qcyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTQtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIFxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuLy8gVGhlIFN5bWJvbCB1c2VkIHRvIHRhZyB0aGUgUmVhY3RFbGVtZW50IHR5cGUuIElmIHRoZXJlIGlzIG5vIG5hdGl2ZSBTeW1ib2xcbi8vIG5vciBwb2x5ZmlsbCwgdGhlbiBhIHBsYWluIG51bWJlciBpcyB1c2VkIGZvciBwZXJmb3JtYW5jZS5cblxudmFyIFJFQUNUX0VMRU1FTlRfVFlQRSA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sWydmb3InXSAmJiBTeW1ib2xbJ2ZvciddKCdyZWFjdC5lbGVtZW50JykgfHwgMHhlYWM3O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJFQUNUX0VMRU1FTlRfVFlQRTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3JlYWN0L2xpYi9SZWFjdEVsZW1lbnRTeW1ib2wuanMiLCIvKipcbiAqIENvcHlyaWdodCAyMDE0LXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuLyoqXG4gKiBSZWFjdEVsZW1lbnRWYWxpZGF0b3IgcHJvdmlkZXMgYSB3cmFwcGVyIGFyb3VuZCBhIGVsZW1lbnQgZmFjdG9yeVxuICogd2hpY2ggdmFsaWRhdGVzIHRoZSBwcm9wcyBwYXNzZWQgdG8gdGhlIGVsZW1lbnQuIFRoaXMgaXMgaW50ZW5kZWQgdG8gYmVcbiAqIHVzZWQgb25seSBpbiBERVYgYW5kIGNvdWxkIGJlIHJlcGxhY2VkIGJ5IGEgc3RhdGljIHR5cGUgY2hlY2tlciBmb3IgbGFuZ3VhZ2VzXG4gKiB0aGF0IHN1cHBvcnQgaXQuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUmVhY3RDdXJyZW50T3duZXIgPSByZXF1aXJlKCcuL1JlYWN0Q3VycmVudE93bmVyJyk7XG52YXIgUmVhY3RDb21wb25lbnRUcmVlSG9vayA9IHJlcXVpcmUoJy4vUmVhY3RDb21wb25lbnRUcmVlSG9vaycpO1xudmFyIFJlYWN0RWxlbWVudCA9IHJlcXVpcmUoJy4vUmVhY3RFbGVtZW50Jyk7XG5cbnZhciBjaGVja1JlYWN0VHlwZVNwZWMgPSByZXF1aXJlKCcuL2NoZWNrUmVhY3RUeXBlU3BlYycpO1xuXG52YXIgY2FuRGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL2NhbkRlZmluZVByb3BlcnR5Jyk7XG52YXIgZ2V0SXRlcmF0b3JGbiA9IHJlcXVpcmUoJy4vZ2V0SXRlcmF0b3JGbicpO1xudmFyIHdhcm5pbmcgPSByZXF1aXJlKCdmYmpzL2xpYi93YXJuaW5nJyk7XG52YXIgbG93UHJpb3JpdHlXYXJuaW5nID0gcmVxdWlyZSgnLi9sb3dQcmlvcml0eVdhcm5pbmcnKTtcblxuZnVuY3Rpb24gZ2V0RGVjbGFyYXRpb25FcnJvckFkZGVuZHVtKCkge1xuICBpZiAoUmVhY3RDdXJyZW50T3duZXIuY3VycmVudCkge1xuICAgIHZhciBuYW1lID0gUmVhY3RDdXJyZW50T3duZXIuY3VycmVudC5nZXROYW1lKCk7XG4gICAgaWYgKG5hbWUpIHtcbiAgICAgIHJldHVybiAnIENoZWNrIHRoZSByZW5kZXIgbWV0aG9kIG9mIGAnICsgbmFtZSArICdgLic7XG4gICAgfVxuICB9XG4gIHJldHVybiAnJztcbn1cblxuZnVuY3Rpb24gZ2V0U291cmNlSW5mb0Vycm9yQWRkZW5kdW0oZWxlbWVudFByb3BzKSB7XG4gIGlmIChlbGVtZW50UHJvcHMgIT09IG51bGwgJiYgZWxlbWVudFByb3BzICE9PSB1bmRlZmluZWQgJiYgZWxlbWVudFByb3BzLl9fc291cmNlICE9PSB1bmRlZmluZWQpIHtcbiAgICB2YXIgc291cmNlID0gZWxlbWVudFByb3BzLl9fc291cmNlO1xuICAgIHZhciBmaWxlTmFtZSA9IHNvdXJjZS5maWxlTmFtZS5yZXBsYWNlKC9eLipbXFxcXFxcL10vLCAnJyk7XG4gICAgdmFyIGxpbmVOdW1iZXIgPSBzb3VyY2UubGluZU51bWJlcjtcbiAgICByZXR1cm4gJyBDaGVjayB5b3VyIGNvZGUgYXQgJyArIGZpbGVOYW1lICsgJzonICsgbGluZU51bWJlciArICcuJztcbiAgfVxuICByZXR1cm4gJyc7XG59XG5cbi8qKlxuICogV2FybiBpZiB0aGVyZSdzIG5vIGtleSBleHBsaWNpdGx5IHNldCBvbiBkeW5hbWljIGFycmF5cyBvZiBjaGlsZHJlbiBvclxuICogb2JqZWN0IGtleXMgYXJlIG5vdCB2YWxpZC4gVGhpcyBhbGxvd3MgdXMgdG8ga2VlcCB0cmFjayBvZiBjaGlsZHJlbiBiZXR3ZWVuXG4gKiB1cGRhdGVzLlxuICovXG52YXIgb3duZXJIYXNLZXlVc2VXYXJuaW5nID0ge307XG5cbmZ1bmN0aW9uIGdldEN1cnJlbnRDb21wb25lbnRFcnJvckluZm8ocGFyZW50VHlwZSkge1xuICB2YXIgaW5mbyA9IGdldERlY2xhcmF0aW9uRXJyb3JBZGRlbmR1bSgpO1xuXG4gIGlmICghaW5mbykge1xuICAgIHZhciBwYXJlbnROYW1lID0gdHlwZW9mIHBhcmVudFR5cGUgPT09ICdzdHJpbmcnID8gcGFyZW50VHlwZSA6IHBhcmVudFR5cGUuZGlzcGxheU5hbWUgfHwgcGFyZW50VHlwZS5uYW1lO1xuICAgIGlmIChwYXJlbnROYW1lKSB7XG4gICAgICBpbmZvID0gJyBDaGVjayB0aGUgdG9wLWxldmVsIHJlbmRlciBjYWxsIHVzaW5nIDwnICsgcGFyZW50TmFtZSArICc+Lic7XG4gICAgfVxuICB9XG4gIHJldHVybiBpbmZvO1xufVxuXG4vKipcbiAqIFdhcm4gaWYgdGhlIGVsZW1lbnQgZG9lc24ndCBoYXZlIGFuIGV4cGxpY2l0IGtleSBhc3NpZ25lZCB0byBpdC5cbiAqIFRoaXMgZWxlbWVudCBpcyBpbiBhbiBhcnJheS4gVGhlIGFycmF5IGNvdWxkIGdyb3cgYW5kIHNocmluayBvciBiZVxuICogcmVvcmRlcmVkLiBBbGwgY2hpbGRyZW4gdGhhdCBoYXZlbid0IGFscmVhZHkgYmVlbiB2YWxpZGF0ZWQgYXJlIHJlcXVpcmVkIHRvXG4gKiBoYXZlIGEgXCJrZXlcIiBwcm9wZXJ0eSBhc3NpZ25lZCB0byBpdC4gRXJyb3Igc3RhdHVzZXMgYXJlIGNhY2hlZCBzbyBhIHdhcm5pbmdcbiAqIHdpbGwgb25seSBiZSBzaG93biBvbmNlLlxuICpcbiAqIEBpbnRlcm5hbFxuICogQHBhcmFtIHtSZWFjdEVsZW1lbnR9IGVsZW1lbnQgRWxlbWVudCB0aGF0IHJlcXVpcmVzIGEga2V5LlxuICogQHBhcmFtIHsqfSBwYXJlbnRUeXBlIGVsZW1lbnQncyBwYXJlbnQncyB0eXBlLlxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUV4cGxpY2l0S2V5KGVsZW1lbnQsIHBhcmVudFR5cGUpIHtcbiAgaWYgKCFlbGVtZW50Ll9zdG9yZSB8fCBlbGVtZW50Ll9zdG9yZS52YWxpZGF0ZWQgfHwgZWxlbWVudC5rZXkgIT0gbnVsbCkge1xuICAgIHJldHVybjtcbiAgfVxuICBlbGVtZW50Ll9zdG9yZS52YWxpZGF0ZWQgPSB0cnVlO1xuXG4gIHZhciBtZW1vaXplciA9IG93bmVySGFzS2V5VXNlV2FybmluZy51bmlxdWVLZXkgfHwgKG93bmVySGFzS2V5VXNlV2FybmluZy51bmlxdWVLZXkgPSB7fSk7XG5cbiAgdmFyIGN1cnJlbnRDb21wb25lbnRFcnJvckluZm8gPSBnZXRDdXJyZW50Q29tcG9uZW50RXJyb3JJbmZvKHBhcmVudFR5cGUpO1xuICBpZiAobWVtb2l6ZXJbY3VycmVudENvbXBvbmVudEVycm9ySW5mb10pIHtcbiAgICByZXR1cm47XG4gIH1cbiAgbWVtb2l6ZXJbY3VycmVudENvbXBvbmVudEVycm9ySW5mb10gPSB0cnVlO1xuXG4gIC8vIFVzdWFsbHkgdGhlIGN1cnJlbnQgb3duZXIgaXMgdGhlIG9mZmVuZGVyLCBidXQgaWYgaXQgYWNjZXB0cyBjaGlsZHJlbiBhcyBhXG4gIC8vIHByb3BlcnR5LCBpdCBtYXkgYmUgdGhlIGNyZWF0b3Igb2YgdGhlIGNoaWxkIHRoYXQncyByZXNwb25zaWJsZSBmb3JcbiAgLy8gYXNzaWduaW5nIGl0IGEga2V5LlxuICB2YXIgY2hpbGRPd25lciA9ICcnO1xuICBpZiAoZWxlbWVudCAmJiBlbGVtZW50Ll9vd25lciAmJiBlbGVtZW50Ll9vd25lciAhPT0gUmVhY3RDdXJyZW50T3duZXIuY3VycmVudCkge1xuICAgIC8vIEdpdmUgdGhlIGNvbXBvbmVudCB0aGF0IG9yaWdpbmFsbHkgY3JlYXRlZCB0aGlzIGNoaWxkLlxuICAgIGNoaWxkT3duZXIgPSAnIEl0IHdhcyBwYXNzZWQgYSBjaGlsZCBmcm9tICcgKyBlbGVtZW50Ll9vd25lci5nZXROYW1lKCkgKyAnLic7XG4gIH1cblxuICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyhmYWxzZSwgJ0VhY2ggY2hpbGQgaW4gYW4gYXJyYXkgb3IgaXRlcmF0b3Igc2hvdWxkIGhhdmUgYSB1bmlxdWUgXCJrZXlcIiBwcm9wLicgKyAnJXMlcyBTZWUgaHR0cHM6Ly9mYi5tZS9yZWFjdC13YXJuaW5nLWtleXMgZm9yIG1vcmUgaW5mb3JtYXRpb24uJXMnLCBjdXJyZW50Q29tcG9uZW50RXJyb3JJbmZvLCBjaGlsZE93bmVyLCBSZWFjdENvbXBvbmVudFRyZWVIb29rLmdldEN1cnJlbnRTdGFja0FkZGVuZHVtKGVsZW1lbnQpKSA6IHZvaWQgMDtcbn1cblxuLyoqXG4gKiBFbnN1cmUgdGhhdCBldmVyeSBlbGVtZW50IGVpdGhlciBpcyBwYXNzZWQgaW4gYSBzdGF0aWMgbG9jYXRpb24sIGluIGFuXG4gKiBhcnJheSB3aXRoIGFuIGV4cGxpY2l0IGtleXMgcHJvcGVydHkgZGVmaW5lZCwgb3IgaW4gYW4gb2JqZWN0IGxpdGVyYWxcbiAqIHdpdGggdmFsaWQga2V5IHByb3BlcnR5LlxuICpcbiAqIEBpbnRlcm5hbFxuICogQHBhcmFtIHtSZWFjdE5vZGV9IG5vZGUgU3RhdGljYWxseSBwYXNzZWQgY2hpbGQgb2YgYW55IHR5cGUuXG4gKiBAcGFyYW0geyp9IHBhcmVudFR5cGUgbm9kZSdzIHBhcmVudCdzIHR5cGUuXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlQ2hpbGRLZXlzKG5vZGUsIHBhcmVudFR5cGUpIHtcbiAgaWYgKHR5cGVvZiBub2RlICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoQXJyYXkuaXNBcnJheShub2RlKSkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZS5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGNoaWxkID0gbm9kZVtpXTtcbiAgICAgIGlmIChSZWFjdEVsZW1lbnQuaXNWYWxpZEVsZW1lbnQoY2hpbGQpKSB7XG4gICAgICAgIHZhbGlkYXRlRXhwbGljaXRLZXkoY2hpbGQsIHBhcmVudFR5cGUpO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIGlmIChSZWFjdEVsZW1lbnQuaXNWYWxpZEVsZW1lbnQobm9kZSkpIHtcbiAgICAvLyBUaGlzIGVsZW1lbnQgd2FzIHBhc3NlZCBpbiBhIHZhbGlkIGxvY2F0aW9uLlxuICAgIGlmIChub2RlLl9zdG9yZSkge1xuICAgICAgbm9kZS5fc3RvcmUudmFsaWRhdGVkID0gdHJ1ZTtcbiAgICB9XG4gIH0gZWxzZSBpZiAobm9kZSkge1xuICAgIHZhciBpdGVyYXRvckZuID0gZ2V0SXRlcmF0b3JGbihub2RlKTtcbiAgICAvLyBFbnRyeSBpdGVyYXRvcnMgcHJvdmlkZSBpbXBsaWNpdCBrZXlzLlxuICAgIGlmIChpdGVyYXRvckZuKSB7XG4gICAgICBpZiAoaXRlcmF0b3JGbiAhPT0gbm9kZS5lbnRyaWVzKSB7XG4gICAgICAgIHZhciBpdGVyYXRvciA9IGl0ZXJhdG9yRm4uY2FsbChub2RlKTtcbiAgICAgICAgdmFyIHN0ZXA7XG4gICAgICAgIHdoaWxlICghKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmUpIHtcbiAgICAgICAgICBpZiAoUmVhY3RFbGVtZW50LmlzVmFsaWRFbGVtZW50KHN0ZXAudmFsdWUpKSB7XG4gICAgICAgICAgICB2YWxpZGF0ZUV4cGxpY2l0S2V5KHN0ZXAudmFsdWUsIHBhcmVudFR5cGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEdpdmVuIGFuIGVsZW1lbnQsIHZhbGlkYXRlIHRoYXQgaXRzIHByb3BzIGZvbGxvdyB0aGUgcHJvcFR5cGVzIGRlZmluaXRpb24sXG4gKiBwcm92aWRlZCBieSB0aGUgdHlwZS5cbiAqXG4gKiBAcGFyYW0ge1JlYWN0RWxlbWVudH0gZWxlbWVudFxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZVByb3BUeXBlcyhlbGVtZW50KSB7XG4gIHZhciBjb21wb25lbnRDbGFzcyA9IGVsZW1lbnQudHlwZTtcbiAgaWYgKHR5cGVvZiBjb21wb25lbnRDbGFzcyAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybjtcbiAgfVxuICB2YXIgbmFtZSA9IGNvbXBvbmVudENsYXNzLmRpc3BsYXlOYW1lIHx8IGNvbXBvbmVudENsYXNzLm5hbWU7XG4gIGlmIChjb21wb25lbnRDbGFzcy5wcm9wVHlwZXMpIHtcbiAgICBjaGVja1JlYWN0VHlwZVNwZWMoY29tcG9uZW50Q2xhc3MucHJvcFR5cGVzLCBlbGVtZW50LnByb3BzLCAncHJvcCcsIG5hbWUsIGVsZW1lbnQsIG51bGwpO1xuICB9XG4gIGlmICh0eXBlb2YgY29tcG9uZW50Q2xhc3MuZ2V0RGVmYXVsdFByb3BzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcoY29tcG9uZW50Q2xhc3MuZ2V0RGVmYXVsdFByb3BzLmlzUmVhY3RDbGFzc0FwcHJvdmVkLCAnZ2V0RGVmYXVsdFByb3BzIGlzIG9ubHkgdXNlZCBvbiBjbGFzc2ljIFJlYWN0LmNyZWF0ZUNsYXNzICcgKyAnZGVmaW5pdGlvbnMuIFVzZSBhIHN0YXRpYyBwcm9wZXJ0eSBuYW1lZCBgZGVmYXVsdFByb3BzYCBpbnN0ZWFkLicpIDogdm9pZCAwO1xuICB9XG59XG5cbnZhciBSZWFjdEVsZW1lbnRWYWxpZGF0b3IgPSB7XG4gIGNyZWF0ZUVsZW1lbnQ6IGZ1bmN0aW9uICh0eXBlLCBwcm9wcywgY2hpbGRyZW4pIHtcbiAgICB2YXIgdmFsaWRUeXBlID0gdHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nO1xuICAgIC8vIFdlIHdhcm4gaW4gdGhpcyBjYXNlIGJ1dCBkb24ndCB0aHJvdy4gV2UgZXhwZWN0IHRoZSBlbGVtZW50IGNyZWF0aW9uIHRvXG4gICAgLy8gc3VjY2VlZCBhbmQgdGhlcmUgd2lsbCBsaWtlbHkgYmUgZXJyb3JzIGluIHJlbmRlci5cbiAgICBpZiAoIXZhbGlkVHlwZSkge1xuICAgICAgaWYgKHR5cGVvZiB0eXBlICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiB0eXBlICE9PSAnc3RyaW5nJykge1xuICAgICAgICB2YXIgaW5mbyA9ICcnO1xuICAgICAgICBpZiAodHlwZSA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiB0eXBlID09PSAnb2JqZWN0JyAmJiB0eXBlICE9PSBudWxsICYmIE9iamVjdC5rZXlzKHR5cGUpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIGluZm8gKz0gJyBZb3UgbGlrZWx5IGZvcmdvdCB0byBleHBvcnQgeW91ciBjb21wb25lbnQgZnJvbSB0aGUgZmlsZSAnICsgXCJpdCdzIGRlZmluZWQgaW4uXCI7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgc291cmNlSW5mbyA9IGdldFNvdXJjZUluZm9FcnJvckFkZGVuZHVtKHByb3BzKTtcbiAgICAgICAgaWYgKHNvdXJjZUluZm8pIHtcbiAgICAgICAgICBpbmZvICs9IHNvdXJjZUluZm87XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaW5mbyArPSBnZXREZWNsYXJhdGlvbkVycm9yQWRkZW5kdW0oKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGluZm8gKz0gUmVhY3RDb21wb25lbnRUcmVlSG9vay5nZXRDdXJyZW50U3RhY2tBZGRlbmR1bSgpO1xuXG4gICAgICAgIHZhciBjdXJyZW50U291cmNlID0gcHJvcHMgIT09IG51bGwgJiYgcHJvcHMgIT09IHVuZGVmaW5lZCAmJiBwcm9wcy5fX3NvdXJjZSAhPT0gdW5kZWZpbmVkID8gcHJvcHMuX19zb3VyY2UgOiBudWxsO1xuICAgICAgICBSZWFjdENvbXBvbmVudFRyZWVIb29rLnB1c2hOb25TdGFuZGFyZFdhcm5pbmdTdGFjayh0cnVlLCBjdXJyZW50U291cmNlKTtcbiAgICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcoZmFsc2UsICdSZWFjdC5jcmVhdGVFbGVtZW50OiB0eXBlIGlzIGludmFsaWQgLS0gZXhwZWN0ZWQgYSBzdHJpbmcgKGZvciAnICsgJ2J1aWx0LWluIGNvbXBvbmVudHMpIG9yIGEgY2xhc3MvZnVuY3Rpb24gKGZvciBjb21wb3NpdGUgJyArICdjb21wb25lbnRzKSBidXQgZ290OiAlcy4lcycsIHR5cGUgPT0gbnVsbCA/IHR5cGUgOiB0eXBlb2YgdHlwZSwgaW5mbykgOiB2b2lkIDA7XG4gICAgICAgIFJlYWN0Q29tcG9uZW50VHJlZUhvb2sucG9wTm9uU3RhbmRhcmRXYXJuaW5nU3RhY2soKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgZWxlbWVudCA9IFJlYWN0RWxlbWVudC5jcmVhdGVFbGVtZW50LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cbiAgICAvLyBUaGUgcmVzdWx0IGNhbiBiZSBudWxsaXNoIGlmIGEgbW9jayBvciBhIGN1c3RvbSBmdW5jdGlvbiBpcyB1c2VkLlxuICAgIC8vIFRPRE86IERyb3AgdGhpcyB3aGVuIHRoZXNlIGFyZSBubyBsb25nZXIgYWxsb3dlZCBhcyB0aGUgdHlwZSBhcmd1bWVudC5cbiAgICBpZiAoZWxlbWVudCA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gZWxlbWVudDtcbiAgICB9XG5cbiAgICAvLyBTa2lwIGtleSB3YXJuaW5nIGlmIHRoZSB0eXBlIGlzbid0IHZhbGlkIHNpbmNlIG91ciBrZXkgdmFsaWRhdGlvbiBsb2dpY1xuICAgIC8vIGRvZXNuJ3QgZXhwZWN0IGEgbm9uLXN0cmluZy9mdW5jdGlvbiB0eXBlIGFuZCBjYW4gdGhyb3cgY29uZnVzaW5nIGVycm9ycy5cbiAgICAvLyBXZSBkb24ndCB3YW50IGV4Y2VwdGlvbiBiZWhhdmlvciB0byBkaWZmZXIgYmV0d2VlbiBkZXYgYW5kIHByb2QuXG4gICAgLy8gKFJlbmRlcmluZyB3aWxsIHRocm93IHdpdGggYSBoZWxwZnVsIG1lc3NhZ2UgYW5kIGFzIHNvb24gYXMgdGhlIHR5cGUgaXNcbiAgICAvLyBmaXhlZCwgdGhlIGtleSB3YXJuaW5ncyB3aWxsIGFwcGVhci4pXG4gICAgaWYgKHZhbGlkVHlwZSkge1xuICAgICAgZm9yICh2YXIgaSA9IDI7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFsaWRhdGVDaGlsZEtleXMoYXJndW1lbnRzW2ldLCB0eXBlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YWxpZGF0ZVByb3BUeXBlcyhlbGVtZW50KTtcblxuICAgIHJldHVybiBlbGVtZW50O1xuICB9LFxuXG4gIGNyZWF0ZUZhY3Rvcnk6IGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgdmFyIHZhbGlkYXRlZEZhY3RvcnkgPSBSZWFjdEVsZW1lbnRWYWxpZGF0b3IuY3JlYXRlRWxlbWVudC5iaW5kKG51bGwsIHR5cGUpO1xuICAgIC8vIExlZ2FjeSBob29rIFRPRE86IFdhcm4gaWYgdGhpcyBpcyBhY2Nlc3NlZFxuICAgIHZhbGlkYXRlZEZhY3RvcnkudHlwZSA9IHR5cGU7XG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKGNhbkRlZmluZVByb3BlcnR5KSB7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh2YWxpZGF0ZWRGYWN0b3J5LCAndHlwZScsIHtcbiAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxvd1ByaW9yaXR5V2FybmluZyhmYWxzZSwgJ0ZhY3RvcnkudHlwZSBpcyBkZXByZWNhdGVkLiBBY2Nlc3MgdGhlIGNsYXNzIGRpcmVjdGx5ICcgKyAnYmVmb3JlIHBhc3NpbmcgaXQgdG8gY3JlYXRlRmFjdG9yeS4nKTtcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAndHlwZScsIHtcbiAgICAgICAgICAgICAgdmFsdWU6IHR5cGVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHR5cGU7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdmFsaWRhdGVkRmFjdG9yeTtcbiAgfSxcblxuICBjbG9uZUVsZW1lbnQ6IGZ1bmN0aW9uIChlbGVtZW50LCBwcm9wcywgY2hpbGRyZW4pIHtcbiAgICB2YXIgbmV3RWxlbWVudCA9IFJlYWN0RWxlbWVudC5jbG9uZUVsZW1lbnQuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICBmb3IgKHZhciBpID0gMjsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFsaWRhdGVDaGlsZEtleXMoYXJndW1lbnRzW2ldLCBuZXdFbGVtZW50LnR5cGUpO1xuICAgIH1cbiAgICB2YWxpZGF0ZVByb3BUeXBlcyhuZXdFbGVtZW50KTtcbiAgICByZXR1cm4gbmV3RWxlbWVudDtcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdEVsZW1lbnRWYWxpZGF0b3I7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC9saWIvUmVhY3RFbGVtZW50VmFsaWRhdG9yLmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxNS1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIHdhcm5pbmcgPSByZXF1aXJlKCdmYmpzL2xpYi93YXJuaW5nJyk7XG5cbmZ1bmN0aW9uIHdhcm5Ob29wKHB1YmxpY0luc3RhbmNlLCBjYWxsZXJOYW1lKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgdmFyIGNvbnN0cnVjdG9yID0gcHVibGljSW5zdGFuY2UuY29uc3RydWN0b3I7XG4gICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcoZmFsc2UsICclcyguLi4pOiBDYW4gb25seSB1cGRhdGUgYSBtb3VudGVkIG9yIG1vdW50aW5nIGNvbXBvbmVudC4gJyArICdUaGlzIHVzdWFsbHkgbWVhbnMgeW91IGNhbGxlZCAlcygpIG9uIGFuIHVubW91bnRlZCBjb21wb25lbnQuICcgKyAnVGhpcyBpcyBhIG5vLW9wLiBQbGVhc2UgY2hlY2sgdGhlIGNvZGUgZm9yIHRoZSAlcyBjb21wb25lbnQuJywgY2FsbGVyTmFtZSwgY2FsbGVyTmFtZSwgY29uc3RydWN0b3IgJiYgKGNvbnN0cnVjdG9yLmRpc3BsYXlOYW1lIHx8IGNvbnN0cnVjdG9yLm5hbWUpIHx8ICdSZWFjdENsYXNzJykgOiB2b2lkIDA7XG4gIH1cbn1cblxuLyoqXG4gKiBUaGlzIGlzIHRoZSBhYnN0cmFjdCBBUEkgZm9yIGFuIHVwZGF0ZSBxdWV1ZS5cbiAqL1xudmFyIFJlYWN0Tm9vcFVwZGF0ZVF1ZXVlID0ge1xuICAvKipcbiAgICogQ2hlY2tzIHdoZXRoZXIgb3Igbm90IHRoaXMgY29tcG9zaXRlIGNvbXBvbmVudCBpcyBtb3VudGVkLlxuICAgKiBAcGFyYW0ge1JlYWN0Q2xhc3N9IHB1YmxpY0luc3RhbmNlIFRoZSBpbnN0YW5jZSB3ZSB3YW50IHRvIHRlc3QuXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgbW91bnRlZCwgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgKiBAcHJvdGVjdGVkXG4gICAqIEBmaW5hbFxuICAgKi9cbiAgaXNNb3VudGVkOiBmdW5jdGlvbiAocHVibGljSW5zdGFuY2UpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEVucXVldWUgYSBjYWxsYmFjayB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQgYWZ0ZXIgYWxsIHRoZSBwZW5kaW5nIHVwZGF0ZXNcbiAgICogaGF2ZSBwcm9jZXNzZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7UmVhY3RDbGFzc30gcHVibGljSW5zdGFuY2UgVGhlIGluc3RhbmNlIHRvIHVzZSBhcyBgdGhpc2AgY29udGV4dC5cbiAgICogQHBhcmFtIHs/ZnVuY3Rpb259IGNhbGxiYWNrIENhbGxlZCBhZnRlciBzdGF0ZSBpcyB1cGRhdGVkLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGVucXVldWVDYWxsYmFjazogZnVuY3Rpb24gKHB1YmxpY0luc3RhbmNlLCBjYWxsYmFjaykge30sXG5cbiAgLyoqXG4gICAqIEZvcmNlcyBhbiB1cGRhdGUuIFRoaXMgc2hvdWxkIG9ubHkgYmUgaW52b2tlZCB3aGVuIGl0IGlzIGtub3duIHdpdGhcbiAgICogY2VydGFpbnR5IHRoYXQgd2UgYXJlICoqbm90KiogaW4gYSBET00gdHJhbnNhY3Rpb24uXG4gICAqXG4gICAqIFlvdSBtYXkgd2FudCB0byBjYWxsIHRoaXMgd2hlbiB5b3Uga25vdyB0aGF0IHNvbWUgZGVlcGVyIGFzcGVjdCBvZiB0aGVcbiAgICogY29tcG9uZW50J3Mgc3RhdGUgaGFzIGNoYW5nZWQgYnV0IGBzZXRTdGF0ZWAgd2FzIG5vdCBjYWxsZWQuXG4gICAqXG4gICAqIFRoaXMgd2lsbCBub3QgaW52b2tlIGBzaG91bGRDb21wb25lbnRVcGRhdGVgLCBidXQgaXQgd2lsbCBpbnZva2VcbiAgICogYGNvbXBvbmVudFdpbGxVcGRhdGVgIGFuZCBgY29tcG9uZW50RGlkVXBkYXRlYC5cbiAgICpcbiAgICogQHBhcmFtIHtSZWFjdENsYXNzfSBwdWJsaWNJbnN0YW5jZSBUaGUgaW5zdGFuY2UgdGhhdCBzaG91bGQgcmVyZW5kZXIuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZW5xdWV1ZUZvcmNlVXBkYXRlOiBmdW5jdGlvbiAocHVibGljSW5zdGFuY2UpIHtcbiAgICB3YXJuTm9vcChwdWJsaWNJbnN0YW5jZSwgJ2ZvcmNlVXBkYXRlJyk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFJlcGxhY2VzIGFsbCBvZiB0aGUgc3RhdGUuIEFsd2F5cyB1c2UgdGhpcyBvciBgc2V0U3RhdGVgIHRvIG11dGF0ZSBzdGF0ZS5cbiAgICogWW91IHNob3VsZCB0cmVhdCBgdGhpcy5zdGF0ZWAgYXMgaW1tdXRhYmxlLlxuICAgKlxuICAgKiBUaGVyZSBpcyBubyBndWFyYW50ZWUgdGhhdCBgdGhpcy5zdGF0ZWAgd2lsbCBiZSBpbW1lZGlhdGVseSB1cGRhdGVkLCBzb1xuICAgKiBhY2Nlc3NpbmcgYHRoaXMuc3RhdGVgIGFmdGVyIGNhbGxpbmcgdGhpcyBtZXRob2QgbWF5IHJldHVybiB0aGUgb2xkIHZhbHVlLlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0Q2xhc3N9IHB1YmxpY0luc3RhbmNlIFRoZSBpbnN0YW5jZSB0aGF0IHNob3VsZCByZXJlbmRlci5cbiAgICogQHBhcmFtIHtvYmplY3R9IGNvbXBsZXRlU3RhdGUgTmV4dCBzdGF0ZS5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBlbnF1ZXVlUmVwbGFjZVN0YXRlOiBmdW5jdGlvbiAocHVibGljSW5zdGFuY2UsIGNvbXBsZXRlU3RhdGUpIHtcbiAgICB3YXJuTm9vcChwdWJsaWNJbnN0YW5jZSwgJ3JlcGxhY2VTdGF0ZScpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBTZXRzIGEgc3Vic2V0IG9mIHRoZSBzdGF0ZS4gVGhpcyBvbmx5IGV4aXN0cyBiZWNhdXNlIF9wZW5kaW5nU3RhdGUgaXNcbiAgICogaW50ZXJuYWwuIFRoaXMgcHJvdmlkZXMgYSBtZXJnaW5nIHN0cmF0ZWd5IHRoYXQgaXMgbm90IGF2YWlsYWJsZSB0byBkZWVwXG4gICAqIHByb3BlcnRpZXMgd2hpY2ggaXMgY29uZnVzaW5nLiBUT0RPOiBFeHBvc2UgcGVuZGluZ1N0YXRlIG9yIGRvbid0IHVzZSBpdFxuICAgKiBkdXJpbmcgdGhlIG1lcmdlLlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0Q2xhc3N9IHB1YmxpY0luc3RhbmNlIFRoZSBpbnN0YW5jZSB0aGF0IHNob3VsZCByZXJlbmRlci5cbiAgICogQHBhcmFtIHtvYmplY3R9IHBhcnRpYWxTdGF0ZSBOZXh0IHBhcnRpYWwgc3RhdGUgdG8gYmUgbWVyZ2VkIHdpdGggc3RhdGUuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZW5xdWV1ZVNldFN0YXRlOiBmdW5jdGlvbiAocHVibGljSW5zdGFuY2UsIHBhcnRpYWxTdGF0ZSkge1xuICAgIHdhcm5Ob29wKHB1YmxpY0luc3RhbmNlLCAnc2V0U3RhdGUnKTtcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdE5vb3BVcGRhdGVRdWV1ZTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3JlYWN0L2xpYi9SZWFjdE5vb3BVcGRhdGVRdWV1ZS5qcyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIFxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuLyogZ2xvYmFsIFN5bWJvbCAqL1xuXG52YXIgSVRFUkFUT1JfU1lNQk9MID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wuaXRlcmF0b3I7XG52YXIgRkFVWF9JVEVSQVRPUl9TWU1CT0wgPSAnQEBpdGVyYXRvcic7IC8vIEJlZm9yZSBTeW1ib2wgc3BlYy5cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBpdGVyYXRvciBtZXRob2QgZnVuY3Rpb24gY29udGFpbmVkIG9uIHRoZSBpdGVyYWJsZSBvYmplY3QuXG4gKlxuICogQmUgc3VyZSB0byBpbnZva2UgdGhlIGZ1bmN0aW9uIHdpdGggdGhlIGl0ZXJhYmxlIGFzIGNvbnRleHQ6XG4gKlxuICogICAgIHZhciBpdGVyYXRvckZuID0gZ2V0SXRlcmF0b3JGbihteUl0ZXJhYmxlKTtcbiAqICAgICBpZiAoaXRlcmF0b3JGbikge1xuICogICAgICAgdmFyIGl0ZXJhdG9yID0gaXRlcmF0b3JGbi5jYWxsKG15SXRlcmFibGUpO1xuICogICAgICAgLi4uXG4gKiAgICAgfVxuICpcbiAqIEBwYXJhbSB7P29iamVjdH0gbWF5YmVJdGVyYWJsZVxuICogQHJldHVybiB7P2Z1bmN0aW9ufVxuICovXG5mdW5jdGlvbiBnZXRJdGVyYXRvckZuKG1heWJlSXRlcmFibGUpIHtcbiAgdmFyIGl0ZXJhdG9yRm4gPSBtYXliZUl0ZXJhYmxlICYmIChJVEVSQVRPUl9TWU1CT0wgJiYgbWF5YmVJdGVyYWJsZVtJVEVSQVRPUl9TWU1CT0xdIHx8IG1heWJlSXRlcmFibGVbRkFVWF9JVEVSQVRPUl9TWU1CT0xdKTtcbiAgaWYgKHR5cGVvZiBpdGVyYXRvckZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIGl0ZXJhdG9yRm47XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRJdGVyYXRvckZuO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QvbGliL2dldEl0ZXJhdG9yRm4uanMiLCIvKipcbiAqIENvbXBvc2VzIHNpbmdsZS1hcmd1bWVudCBmdW5jdGlvbnMgZnJvbSByaWdodCB0byBsZWZ0LiBUaGUgcmlnaHRtb3N0XG4gKiBmdW5jdGlvbiBjYW4gdGFrZSBtdWx0aXBsZSBhcmd1bWVudHMgYXMgaXQgcHJvdmlkZXMgdGhlIHNpZ25hdHVyZSBmb3JcbiAqIHRoZSByZXN1bHRpbmcgY29tcG9zaXRlIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSB7Li4uRnVuY3Rpb259IGZ1bmNzIFRoZSBmdW5jdGlvbnMgdG8gY29tcG9zZS5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gQSBmdW5jdGlvbiBvYnRhaW5lZCBieSBjb21wb3NpbmcgdGhlIGFyZ3VtZW50IGZ1bmN0aW9uc1xuICogZnJvbSByaWdodCB0byBsZWZ0LiBGb3IgZXhhbXBsZSwgY29tcG9zZShmLCBnLCBoKSBpcyBpZGVudGljYWwgdG8gZG9pbmdcbiAqICguLi5hcmdzKSA9PiBmKGcoaCguLi5hcmdzKSkpLlxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNvbXBvc2UoKSB7XG4gIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBmdW5jcyA9IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgIGZ1bmNzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICB9XG5cbiAgaWYgKGZ1bmNzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBmdW5jdGlvbiAoYXJnKSB7XG4gICAgICByZXR1cm4gYXJnO1xuICAgIH07XG4gIH1cblxuICBpZiAoZnVuY3MubGVuZ3RoID09PSAxKSB7XG4gICAgcmV0dXJuIGZ1bmNzWzBdO1xuICB9XG5cbiAgdmFyIGxhc3QgPSBmdW5jc1tmdW5jcy5sZW5ndGggLSAxXTtcbiAgdmFyIHJlc3QgPSBmdW5jcy5zbGljZSgwLCAtMSk7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHJlc3QucmVkdWNlUmlnaHQoZnVuY3Rpb24gKGNvbXBvc2VkLCBmKSB7XG4gICAgICByZXR1cm4gZihjb21wb3NlZCk7XG4gICAgfSwgbGFzdC5hcHBseSh1bmRlZmluZWQsIGFyZ3VtZW50cykpO1xuICB9O1xufVxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVkdXgvZXMvY29tcG9zZS5qcyIsImltcG9ydCBpc1BsYWluT2JqZWN0IGZyb20gJ2xvZGFzaC1lcy9pc1BsYWluT2JqZWN0JztcbmltcG9ydCAkJG9ic2VydmFibGUgZnJvbSAnc3ltYm9sLW9ic2VydmFibGUnO1xuXG4vKipcbiAqIFRoZXNlIGFyZSBwcml2YXRlIGFjdGlvbiB0eXBlcyByZXNlcnZlZCBieSBSZWR1eC5cbiAqIEZvciBhbnkgdW5rbm93biBhY3Rpb25zLCB5b3UgbXVzdCByZXR1cm4gdGhlIGN1cnJlbnQgc3RhdGUuXG4gKiBJZiB0aGUgY3VycmVudCBzdGF0ZSBpcyB1bmRlZmluZWQsIHlvdSBtdXN0IHJldHVybiB0aGUgaW5pdGlhbCBzdGF0ZS5cbiAqIERvIG5vdCByZWZlcmVuY2UgdGhlc2UgYWN0aW9uIHR5cGVzIGRpcmVjdGx5IGluIHlvdXIgY29kZS5cbiAqL1xuZXhwb3J0IHZhciBBY3Rpb25UeXBlcyA9IHtcbiAgSU5JVDogJ0BAcmVkdXgvSU5JVCdcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhIFJlZHV4IHN0b3JlIHRoYXQgaG9sZHMgdGhlIHN0YXRlIHRyZWUuXG4gKiBUaGUgb25seSB3YXkgdG8gY2hhbmdlIHRoZSBkYXRhIGluIHRoZSBzdG9yZSBpcyB0byBjYWxsIGBkaXNwYXRjaCgpYCBvbiBpdC5cbiAqXG4gKiBUaGVyZSBzaG91bGQgb25seSBiZSBhIHNpbmdsZSBzdG9yZSBpbiB5b3VyIGFwcC4gVG8gc3BlY2lmeSBob3cgZGlmZmVyZW50XG4gKiBwYXJ0cyBvZiB0aGUgc3RhdGUgdHJlZSByZXNwb25kIHRvIGFjdGlvbnMsIHlvdSBtYXkgY29tYmluZSBzZXZlcmFsIHJlZHVjZXJzXG4gKiBpbnRvIGEgc2luZ2xlIHJlZHVjZXIgZnVuY3Rpb24gYnkgdXNpbmcgYGNvbWJpbmVSZWR1Y2Vyc2AuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcmVkdWNlciBBIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgbmV4dCBzdGF0ZSB0cmVlLCBnaXZlblxuICogdGhlIGN1cnJlbnQgc3RhdGUgdHJlZSBhbmQgdGhlIGFjdGlvbiB0byBoYW5kbGUuXG4gKlxuICogQHBhcmFtIHthbnl9IFtwcmVsb2FkZWRTdGF0ZV0gVGhlIGluaXRpYWwgc3RhdGUuIFlvdSBtYXkgb3B0aW9uYWxseSBzcGVjaWZ5IGl0XG4gKiB0byBoeWRyYXRlIHRoZSBzdGF0ZSBmcm9tIHRoZSBzZXJ2ZXIgaW4gdW5pdmVyc2FsIGFwcHMsIG9yIHRvIHJlc3RvcmUgYVxuICogcHJldmlvdXNseSBzZXJpYWxpemVkIHVzZXIgc2Vzc2lvbi5cbiAqIElmIHlvdSB1c2UgYGNvbWJpbmVSZWR1Y2Vyc2AgdG8gcHJvZHVjZSB0aGUgcm9vdCByZWR1Y2VyIGZ1bmN0aW9uLCB0aGlzIG11c3QgYmVcbiAqIGFuIG9iamVjdCB3aXRoIHRoZSBzYW1lIHNoYXBlIGFzIGBjb21iaW5lUmVkdWNlcnNgIGtleXMuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZW5oYW5jZXIgVGhlIHN0b3JlIGVuaGFuY2VyLiBZb3UgbWF5IG9wdGlvbmFsbHkgc3BlY2lmeSBpdFxuICogdG8gZW5oYW5jZSB0aGUgc3RvcmUgd2l0aCB0aGlyZC1wYXJ0eSBjYXBhYmlsaXRpZXMgc3VjaCBhcyBtaWRkbGV3YXJlLFxuICogdGltZSB0cmF2ZWwsIHBlcnNpc3RlbmNlLCBldGMuIFRoZSBvbmx5IHN0b3JlIGVuaGFuY2VyIHRoYXQgc2hpcHMgd2l0aCBSZWR1eFxuICogaXMgYGFwcGx5TWlkZGxld2FyZSgpYC5cbiAqXG4gKiBAcmV0dXJucyB7U3RvcmV9IEEgUmVkdXggc3RvcmUgdGhhdCBsZXRzIHlvdSByZWFkIHRoZSBzdGF0ZSwgZGlzcGF0Y2ggYWN0aW9uc1xuICogYW5kIHN1YnNjcmliZSB0byBjaGFuZ2VzLlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjcmVhdGVTdG9yZShyZWR1Y2VyLCBwcmVsb2FkZWRTdGF0ZSwgZW5oYW5jZXIpIHtcbiAgdmFyIF9yZWYyO1xuXG4gIGlmICh0eXBlb2YgcHJlbG9hZGVkU3RhdGUgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGVuaGFuY2VyID09PSAndW5kZWZpbmVkJykge1xuICAgIGVuaGFuY2VyID0gcHJlbG9hZGVkU3RhdGU7XG4gICAgcHJlbG9hZGVkU3RhdGUgPSB1bmRlZmluZWQ7XG4gIH1cblxuICBpZiAodHlwZW9mIGVuaGFuY2VyICE9PSAndW5kZWZpbmVkJykge1xuICAgIGlmICh0eXBlb2YgZW5oYW5jZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgdGhlIGVuaGFuY2VyIHRvIGJlIGEgZnVuY3Rpb24uJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGVuaGFuY2VyKGNyZWF0ZVN0b3JlKShyZWR1Y2VyLCBwcmVsb2FkZWRTdGF0ZSk7XG4gIH1cblxuICBpZiAodHlwZW9mIHJlZHVjZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIHRoZSByZWR1Y2VyIHRvIGJlIGEgZnVuY3Rpb24uJyk7XG4gIH1cblxuICB2YXIgY3VycmVudFJlZHVjZXIgPSByZWR1Y2VyO1xuICB2YXIgY3VycmVudFN0YXRlID0gcHJlbG9hZGVkU3RhdGU7XG4gIHZhciBjdXJyZW50TGlzdGVuZXJzID0gW107XG4gIHZhciBuZXh0TGlzdGVuZXJzID0gY3VycmVudExpc3RlbmVycztcbiAgdmFyIGlzRGlzcGF0Y2hpbmcgPSBmYWxzZTtcblxuICBmdW5jdGlvbiBlbnN1cmVDYW5NdXRhdGVOZXh0TGlzdGVuZXJzKCkge1xuICAgIGlmIChuZXh0TGlzdGVuZXJzID09PSBjdXJyZW50TGlzdGVuZXJzKSB7XG4gICAgICBuZXh0TGlzdGVuZXJzID0gY3VycmVudExpc3RlbmVycy5zbGljZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZWFkcyB0aGUgc3RhdGUgdHJlZSBtYW5hZ2VkIGJ5IHRoZSBzdG9yZS5cbiAgICpcbiAgICogQHJldHVybnMge2FueX0gVGhlIGN1cnJlbnQgc3RhdGUgdHJlZSBvZiB5b3VyIGFwcGxpY2F0aW9uLlxuICAgKi9cbiAgZnVuY3Rpb24gZ2V0U3RhdGUoKSB7XG4gICAgcmV0dXJuIGN1cnJlbnRTdGF0ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgY2hhbmdlIGxpc3RlbmVyLiBJdCB3aWxsIGJlIGNhbGxlZCBhbnkgdGltZSBhbiBhY3Rpb24gaXMgZGlzcGF0Y2hlZCxcbiAgICogYW5kIHNvbWUgcGFydCBvZiB0aGUgc3RhdGUgdHJlZSBtYXkgcG90ZW50aWFsbHkgaGF2ZSBjaGFuZ2VkLiBZb3UgbWF5IHRoZW5cbiAgICogY2FsbCBgZ2V0U3RhdGUoKWAgdG8gcmVhZCB0aGUgY3VycmVudCBzdGF0ZSB0cmVlIGluc2lkZSB0aGUgY2FsbGJhY2suXG4gICAqXG4gICAqIFlvdSBtYXkgY2FsbCBgZGlzcGF0Y2goKWAgZnJvbSBhIGNoYW5nZSBsaXN0ZW5lciwgd2l0aCB0aGUgZm9sbG93aW5nXG4gICAqIGNhdmVhdHM6XG4gICAqXG4gICAqIDEuIFRoZSBzdWJzY3JpcHRpb25zIGFyZSBzbmFwc2hvdHRlZCBqdXN0IGJlZm9yZSBldmVyeSBgZGlzcGF0Y2goKWAgY2FsbC5cbiAgICogSWYgeW91IHN1YnNjcmliZSBvciB1bnN1YnNjcmliZSB3aGlsZSB0aGUgbGlzdGVuZXJzIGFyZSBiZWluZyBpbnZva2VkLCB0aGlzXG4gICAqIHdpbGwgbm90IGhhdmUgYW55IGVmZmVjdCBvbiB0aGUgYGRpc3BhdGNoKClgIHRoYXQgaXMgY3VycmVudGx5IGluIHByb2dyZXNzLlxuICAgKiBIb3dldmVyLCB0aGUgbmV4dCBgZGlzcGF0Y2goKWAgY2FsbCwgd2hldGhlciBuZXN0ZWQgb3Igbm90LCB3aWxsIHVzZSBhIG1vcmVcbiAgICogcmVjZW50IHNuYXBzaG90IG9mIHRoZSBzdWJzY3JpcHRpb24gbGlzdC5cbiAgICpcbiAgICogMi4gVGhlIGxpc3RlbmVyIHNob3VsZCBub3QgZXhwZWN0IHRvIHNlZSBhbGwgc3RhdGUgY2hhbmdlcywgYXMgdGhlIHN0YXRlXG4gICAqIG1pZ2h0IGhhdmUgYmVlbiB1cGRhdGVkIG11bHRpcGxlIHRpbWVzIGR1cmluZyBhIG5lc3RlZCBgZGlzcGF0Y2goKWAgYmVmb3JlXG4gICAqIHRoZSBsaXN0ZW5lciBpcyBjYWxsZWQuIEl0IGlzLCBob3dldmVyLCBndWFyYW50ZWVkIHRoYXQgYWxsIHN1YnNjcmliZXJzXG4gICAqIHJlZ2lzdGVyZWQgYmVmb3JlIHRoZSBgZGlzcGF0Y2goKWAgc3RhcnRlZCB3aWxsIGJlIGNhbGxlZCB3aXRoIHRoZSBsYXRlc3RcbiAgICogc3RhdGUgYnkgdGhlIHRpbWUgaXQgZXhpdHMuXG4gICAqXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGxpc3RlbmVyIEEgY2FsbGJhY2sgdG8gYmUgaW52b2tlZCBvbiBldmVyeSBkaXNwYXRjaC5cbiAgICogQHJldHVybnMge0Z1bmN0aW9ufSBBIGZ1bmN0aW9uIHRvIHJlbW92ZSB0aGlzIGNoYW5nZSBsaXN0ZW5lci5cbiAgICovXG4gIGZ1bmN0aW9uIHN1YnNjcmliZShsaXN0ZW5lcikge1xuICAgIGlmICh0eXBlb2YgbGlzdGVuZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgbGlzdGVuZXIgdG8gYmUgYSBmdW5jdGlvbi4nKTtcbiAgICB9XG5cbiAgICB2YXIgaXNTdWJzY3JpYmVkID0gdHJ1ZTtcblxuICAgIGVuc3VyZUNhbk11dGF0ZU5leHRMaXN0ZW5lcnMoKTtcbiAgICBuZXh0TGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpO1xuXG4gICAgcmV0dXJuIGZ1bmN0aW9uIHVuc3Vic2NyaWJlKCkge1xuICAgICAgaWYgKCFpc1N1YnNjcmliZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpc1N1YnNjcmliZWQgPSBmYWxzZTtcblxuICAgICAgZW5zdXJlQ2FuTXV0YXRlTmV4dExpc3RlbmVycygpO1xuICAgICAgdmFyIGluZGV4ID0gbmV4dExpc3RlbmVycy5pbmRleE9mKGxpc3RlbmVyKTtcbiAgICAgIG5leHRMaXN0ZW5lcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIERpc3BhdGNoZXMgYW4gYWN0aW9uLiBJdCBpcyB0aGUgb25seSB3YXkgdG8gdHJpZ2dlciBhIHN0YXRlIGNoYW5nZS5cbiAgICpcbiAgICogVGhlIGByZWR1Y2VyYCBmdW5jdGlvbiwgdXNlZCB0byBjcmVhdGUgdGhlIHN0b3JlLCB3aWxsIGJlIGNhbGxlZCB3aXRoIHRoZVxuICAgKiBjdXJyZW50IHN0YXRlIHRyZWUgYW5kIHRoZSBnaXZlbiBgYWN0aW9uYC4gSXRzIHJldHVybiB2YWx1ZSB3aWxsXG4gICAqIGJlIGNvbnNpZGVyZWQgdGhlICoqbmV4dCoqIHN0YXRlIG9mIHRoZSB0cmVlLCBhbmQgdGhlIGNoYW5nZSBsaXN0ZW5lcnNcbiAgICogd2lsbCBiZSBub3RpZmllZC5cbiAgICpcbiAgICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb25seSBzdXBwb3J0cyBwbGFpbiBvYmplY3QgYWN0aW9ucy4gSWYgeW91IHdhbnQgdG9cbiAgICogZGlzcGF0Y2ggYSBQcm9taXNlLCBhbiBPYnNlcnZhYmxlLCBhIHRodW5rLCBvciBzb21ldGhpbmcgZWxzZSwgeW91IG5lZWQgdG9cbiAgICogd3JhcCB5b3VyIHN0b3JlIGNyZWF0aW5nIGZ1bmN0aW9uIGludG8gdGhlIGNvcnJlc3BvbmRpbmcgbWlkZGxld2FyZS4gRm9yXG4gICAqIGV4YW1wbGUsIHNlZSB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIGByZWR1eC10aHVua2AgcGFja2FnZS4gRXZlbiB0aGVcbiAgICogbWlkZGxld2FyZSB3aWxsIGV2ZW50dWFsbHkgZGlzcGF0Y2ggcGxhaW4gb2JqZWN0IGFjdGlvbnMgdXNpbmcgdGhpcyBtZXRob2QuXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBhY3Rpb24gQSBwbGFpbiBvYmplY3QgcmVwcmVzZW50aW5nIOKAnHdoYXQgY2hhbmdlZOKAnS4gSXQgaXNcbiAgICogYSBnb29kIGlkZWEgdG8ga2VlcCBhY3Rpb25zIHNlcmlhbGl6YWJsZSBzbyB5b3UgY2FuIHJlY29yZCBhbmQgcmVwbGF5IHVzZXJcbiAgICogc2Vzc2lvbnMsIG9yIHVzZSB0aGUgdGltZSB0cmF2ZWxsaW5nIGByZWR1eC1kZXZ0b29sc2AuIEFuIGFjdGlvbiBtdXN0IGhhdmVcbiAgICogYSBgdHlwZWAgcHJvcGVydHkgd2hpY2ggbWF5IG5vdCBiZSBgdW5kZWZpbmVkYC4gSXQgaXMgYSBnb29kIGlkZWEgdG8gdXNlXG4gICAqIHN0cmluZyBjb25zdGFudHMgZm9yIGFjdGlvbiB0eXBlcy5cbiAgICpcbiAgICogQHJldHVybnMge09iamVjdH0gRm9yIGNvbnZlbmllbmNlLCB0aGUgc2FtZSBhY3Rpb24gb2JqZWN0IHlvdSBkaXNwYXRjaGVkLlxuICAgKlxuICAgKiBOb3RlIHRoYXQsIGlmIHlvdSB1c2UgYSBjdXN0b20gbWlkZGxld2FyZSwgaXQgbWF5IHdyYXAgYGRpc3BhdGNoKClgIHRvXG4gICAqIHJldHVybiBzb21ldGhpbmcgZWxzZSAoZm9yIGV4YW1wbGUsIGEgUHJvbWlzZSB5b3UgY2FuIGF3YWl0KS5cbiAgICovXG4gIGZ1bmN0aW9uIGRpc3BhdGNoKGFjdGlvbikge1xuICAgIGlmICghaXNQbGFpbk9iamVjdChhY3Rpb24pKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FjdGlvbnMgbXVzdCBiZSBwbGFpbiBvYmplY3RzLiAnICsgJ1VzZSBjdXN0b20gbWlkZGxld2FyZSBmb3IgYXN5bmMgYWN0aW9ucy4nKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGFjdGlvbi50eXBlID09PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBY3Rpb25zIG1heSBub3QgaGF2ZSBhbiB1bmRlZmluZWQgXCJ0eXBlXCIgcHJvcGVydHkuICcgKyAnSGF2ZSB5b3UgbWlzc3BlbGxlZCBhIGNvbnN0YW50PycpO1xuICAgIH1cblxuICAgIGlmIChpc0Rpc3BhdGNoaW5nKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlZHVjZXJzIG1heSBub3QgZGlzcGF0Y2ggYWN0aW9ucy4nKTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgaXNEaXNwYXRjaGluZyA9IHRydWU7XG4gICAgICBjdXJyZW50U3RhdGUgPSBjdXJyZW50UmVkdWNlcihjdXJyZW50U3RhdGUsIGFjdGlvbik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlzRGlzcGF0Y2hpbmcgPSBmYWxzZTtcbiAgICB9XG5cbiAgICB2YXIgbGlzdGVuZXJzID0gY3VycmVudExpc3RlbmVycyA9IG5leHRMaXN0ZW5lcnM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0ZW5lcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGxpc3RlbmVyc1tpXSgpO1xuICAgIH1cblxuICAgIHJldHVybiBhY3Rpb247XG4gIH1cblxuICAvKipcbiAgICogUmVwbGFjZXMgdGhlIHJlZHVjZXIgY3VycmVudGx5IHVzZWQgYnkgdGhlIHN0b3JlIHRvIGNhbGN1bGF0ZSB0aGUgc3RhdGUuXG4gICAqXG4gICAqIFlvdSBtaWdodCBuZWVkIHRoaXMgaWYgeW91ciBhcHAgaW1wbGVtZW50cyBjb2RlIHNwbGl0dGluZyBhbmQgeW91IHdhbnQgdG9cbiAgICogbG9hZCBzb21lIG9mIHRoZSByZWR1Y2VycyBkeW5hbWljYWxseS4gWW91IG1pZ2h0IGFsc28gbmVlZCB0aGlzIGlmIHlvdVxuICAgKiBpbXBsZW1lbnQgYSBob3QgcmVsb2FkaW5nIG1lY2hhbmlzbSBmb3IgUmVkdXguXG4gICAqXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IG5leHRSZWR1Y2VyIFRoZSByZWR1Y2VyIGZvciB0aGUgc3RvcmUgdG8gdXNlIGluc3RlYWQuXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgZnVuY3Rpb24gcmVwbGFjZVJlZHVjZXIobmV4dFJlZHVjZXIpIHtcbiAgICBpZiAodHlwZW9mIG5leHRSZWR1Y2VyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIHRoZSBuZXh0UmVkdWNlciB0byBiZSBhIGZ1bmN0aW9uLicpO1xuICAgIH1cblxuICAgIGN1cnJlbnRSZWR1Y2VyID0gbmV4dFJlZHVjZXI7XG4gICAgZGlzcGF0Y2goeyB0eXBlOiBBY3Rpb25UeXBlcy5JTklUIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEludGVyb3BlcmFiaWxpdHkgcG9pbnQgZm9yIG9ic2VydmFibGUvcmVhY3RpdmUgbGlicmFyaWVzLlxuICAgKiBAcmV0dXJucyB7b2JzZXJ2YWJsZX0gQSBtaW5pbWFsIG9ic2VydmFibGUgb2Ygc3RhdGUgY2hhbmdlcy5cbiAgICogRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSB0aGUgb2JzZXJ2YWJsZSBwcm9wb3NhbDpcbiAgICogaHR0cHM6Ly9naXRodWIuY29tL3plbnBhcnNpbmcvZXMtb2JzZXJ2YWJsZVxuICAgKi9cbiAgZnVuY3Rpb24gb2JzZXJ2YWJsZSgpIHtcbiAgICB2YXIgX3JlZjtcblxuICAgIHZhciBvdXRlclN1YnNjcmliZSA9IHN1YnNjcmliZTtcbiAgICByZXR1cm4gX3JlZiA9IHtcbiAgICAgIC8qKlxuICAgICAgICogVGhlIG1pbmltYWwgb2JzZXJ2YWJsZSBzdWJzY3JpcHRpb24gbWV0aG9kLlxuICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9ic2VydmVyIEFueSBvYmplY3QgdGhhdCBjYW4gYmUgdXNlZCBhcyBhbiBvYnNlcnZlci5cbiAgICAgICAqIFRoZSBvYnNlcnZlciBvYmplY3Qgc2hvdWxkIGhhdmUgYSBgbmV4dGAgbWV0aG9kLlxuICAgICAgICogQHJldHVybnMge3N1YnNjcmlwdGlvbn0gQW4gb2JqZWN0IHdpdGggYW4gYHVuc3Vic2NyaWJlYCBtZXRob2QgdGhhdCBjYW5cbiAgICAgICAqIGJlIHVzZWQgdG8gdW5zdWJzY3JpYmUgdGhlIG9ic2VydmFibGUgZnJvbSB0aGUgc3RvcmUsIGFuZCBwcmV2ZW50IGZ1cnRoZXJcbiAgICAgICAqIGVtaXNzaW9uIG9mIHZhbHVlcyBmcm9tIHRoZSBvYnNlcnZhYmxlLlxuICAgICAgICovXG4gICAgICBzdWJzY3JpYmU6IGZ1bmN0aW9uIHN1YnNjcmliZShvYnNlcnZlcikge1xuICAgICAgICBpZiAodHlwZW9mIG9ic2VydmVyICE9PSAnb2JqZWN0Jykge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIHRoZSBvYnNlcnZlciB0byBiZSBhbiBvYmplY3QuJyk7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBvYnNlcnZlU3RhdGUoKSB7XG4gICAgICAgICAgaWYgKG9ic2VydmVyLm5leHQpIHtcbiAgICAgICAgICAgIG9ic2VydmVyLm5leHQoZ2V0U3RhdGUoKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgb2JzZXJ2ZVN0YXRlKCk7XG4gICAgICAgIHZhciB1bnN1YnNjcmliZSA9IG91dGVyU3Vic2NyaWJlKG9ic2VydmVTdGF0ZSk7XG4gICAgICAgIHJldHVybiB7IHVuc3Vic2NyaWJlOiB1bnN1YnNjcmliZSB9O1xuICAgICAgfVxuICAgIH0sIF9yZWZbJCRvYnNlcnZhYmxlXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sIF9yZWY7XG4gIH1cblxuICAvLyBXaGVuIGEgc3RvcmUgaXMgY3JlYXRlZCwgYW4gXCJJTklUXCIgYWN0aW9uIGlzIGRpc3BhdGNoZWQgc28gdGhhdCBldmVyeVxuICAvLyByZWR1Y2VyIHJldHVybnMgdGhlaXIgaW5pdGlhbCBzdGF0ZS4gVGhpcyBlZmZlY3RpdmVseSBwb3B1bGF0ZXNcbiAgLy8gdGhlIGluaXRpYWwgc3RhdGUgdHJlZS5cbiAgZGlzcGF0Y2goeyB0eXBlOiBBY3Rpb25UeXBlcy5JTklUIH0pO1xuXG4gIHJldHVybiBfcmVmMiA9IHtcbiAgICBkaXNwYXRjaDogZGlzcGF0Y2gsXG4gICAgc3Vic2NyaWJlOiBzdWJzY3JpYmUsXG4gICAgZ2V0U3RhdGU6IGdldFN0YXRlLFxuICAgIHJlcGxhY2VSZWR1Y2VyOiByZXBsYWNlUmVkdWNlclxuICB9LCBfcmVmMlskJG9ic2VydmFibGVdID0gb2JzZXJ2YWJsZSwgX3JlZjI7XG59XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWR1eC9lcy9jcmVhdGVTdG9yZS5qcyIsIi8qKlxuICogUHJpbnRzIGEgd2FybmluZyBpbiB0aGUgY29uc29sZSBpZiBpdCBleGlzdHMuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IG1lc3NhZ2UgVGhlIHdhcm5pbmcgbWVzc2FnZS5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB3YXJuaW5nKG1lc3NhZ2UpIHtcbiAgLyogZXNsaW50LWRpc2FibGUgbm8tY29uc29sZSAqL1xuICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBjb25zb2xlLmVycm9yID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY29uc29sZS5lcnJvcihtZXNzYWdlKTtcbiAgfVxuICAvKiBlc2xpbnQtZW5hYmxlIG5vLWNvbnNvbGUgKi9cbiAgdHJ5IHtcbiAgICAvLyBUaGlzIGVycm9yIHdhcyB0aHJvd24gYXMgYSBjb252ZW5pZW5jZSBzbyB0aGF0IGlmIHlvdSBlbmFibGVcbiAgICAvLyBcImJyZWFrIG9uIGFsbCBleGNlcHRpb25zXCIgaW4geW91ciBjb25zb2xlLFxuICAgIC8vIGl0IHdvdWxkIHBhdXNlIHRoZSBleGVjdXRpb24gYXQgdGhpcyBsaW5lLlxuICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby1lbXB0eSAqL1xuICB9IGNhdGNoIChlKSB7fVxuICAvKiBlc2xpbnQtZW5hYmxlIG5vLWVtcHR5ICovXG59XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWR1eC9lcy91dGlscy93YXJuaW5nLmpzIiwidmFyIGc7XHJcblxyXG4vLyBUaGlzIHdvcmtzIGluIG5vbi1zdHJpY3QgbW9kZVxyXG5nID0gKGZ1bmN0aW9uKCkge1xyXG5cdHJldHVybiB0aGlzO1xyXG59KSgpO1xyXG5cclxudHJ5IHtcclxuXHQvLyBUaGlzIHdvcmtzIGlmIGV2YWwgaXMgYWxsb3dlZCAoc2VlIENTUClcclxuXHRnID0gZyB8fCBGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCkgfHwgKDEsZXZhbCkoXCJ0aGlzXCIpO1xyXG59IGNhdGNoKGUpIHtcclxuXHQvLyBUaGlzIHdvcmtzIGlmIHRoZSB3aW5kb3cgcmVmZXJlbmNlIGlzIGF2YWlsYWJsZVxyXG5cdGlmKHR5cGVvZiB3aW5kb3cgPT09IFwib2JqZWN0XCIpXHJcblx0XHRnID0gd2luZG93O1xyXG59XHJcblxyXG4vLyBnIGNhbiBzdGlsbCBiZSB1bmRlZmluZWQsIGJ1dCBub3RoaW5nIHRvIGRvIGFib3V0IGl0Li4uXHJcbi8vIFdlIHJldHVybiB1bmRlZmluZWQsIGluc3RlYWQgb2Ygbm90aGluZyBoZXJlLCBzbyBpdCdzXHJcbi8vIGVhc2llciB0byBoYW5kbGUgdGhpcyBjYXNlLiBpZighZ2xvYmFsKSB7IC4uLn1cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gZztcclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vICh3ZWJwYWNrKS9idWlsZGluL2dsb2JhbC5qcyIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbiAgY29uc3QgZm9vdGVySXRlbXMgPSBbXCJGaWxlc1wiLFwiUGhvdG9zXCIsXCJTaGFyZWRcIixcIk11c2ljXCIsXCJNZW51XCJdO1xuICBjb25zdCBpY29uTWFwID0ge1xuICBmaWxlczogJ2ZhLWZvbGRlcicsXG4gIHBob3RvczogJ2ZhLXBpY3R1cmUtbycsXG4gIHNoYXJlZDogJ2ZhLXVzZXJzJyxcbiAgbXVzaWM6ICdmYS1tdXNpYycsXG4gIG1lbnU6ICdmYS1iYXJzJ1xuICB9O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBCb3R0b21OYXYoe2xvY2F0aW9ufSkge1xuXG4gIGNvbnN0IGZvb3RlckVsZW1lbnRzID0gZm9vdGVySXRlbXMubWFwKCAoaXRlbSwgaW5kZXgpID0+IHtcbiAgICByZXR1cm4gKFxuICAgICAgPGxpXG4gICAgICAgIGNsYXNzTmFtZT17XCJmb290ZXItaXRlbSBcIiArIChsb2NhdGlvbiA9PT0gaXRlbS50b0xvd2VyQ2FzZSgpICYmIFwiZm9vdGVyLWxpLWFjdGl2ZVwiKX1cbiAgICAgICAga2V5PXtpbmRleH1cbiAgICAgID5cbiAgICAgIDxhIGhyZWY9e1wiLyMvXCIgKyBpdGVtLnRvTG93ZXJDYXNlKCl9PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17XCJ0ZXN0LWRpdiBcIiArIChpbmRleCA9PT0gMiAmJiBcIm1pZGRsZS1idXR0b25cIil9PlxuICAgICAgICAgIDxpIGNsYXNzTmFtZT17YGZhICR7aWNvbk1hcFtpdGVtLnRvTG93ZXJDYXNlKCldfSBmYS0yeCBmb290ZXItZmFgfSBhcmlhLWhpZGRlbj1cInRydWVcIi8+XG4gICAgICAgICAgPHNwYW4+e2luZGV4IDwgNCA/IGl0ZW0gOiBcIlwifTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2E+XG4gICAgICA8L2xpPlxuICAgIClcbiAgfSApXG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cImZvb3RlclwiPlxuICAgICAgPHVsIGNsYXNzTmFtZT1cImZvb3Rlcm1lbnVcIj5cbiAgICAgICAge2Zvb3RlckVsZW1lbnRzfVxuICAgICAgPC91bD5cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9jb21wb25lbnRzL25hdmlnYXRpb24vYm90dG9tLW5hdi5qc3giLCJmdW5jdGlvbiB0cmF2ZXJzZShvcmlnaW4sIHByb3BsaXN0KSB7XG4gIGlmIChwcm9wbGlzdC5sZW5ndGgpIHtcbiAgICBsZXQgcHJvcCA9IHByb3BsaXN0LnNoaWZ0KCk7XG4gICAgcmV0dXJuIHRyYXZlcnNlKG9yaWdpbi5jb250ZW50cy5maW5kKGl0ZW0gPT4gaXRlbS50aXRsZSA9PT0gcHJvcCksIHByb3BsaXN0KTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gb3JpZ2luO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFBhdGggKHN0YXRlKSB7XG4gIHJldHVybiAoc3RhdGUuY3VycmVudFBhdGggPyB0cmF2ZXJzZShzdGF0ZS5maWxlc3lzdGVtLCBzdGF0ZS5jdXJyZW50UGF0aC5zcGxpdCgnLycpLnNsaWNlKDEpKSA6IHN0YXRlLmZpbGVzeXN0ZW0pLmNvbnRlbnRzO1xufVxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy91dGlsL2dldFBhdGguanMiLCIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9saWIvUmVhY3RET00nKTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QtZG9tL2luZGV4LmpzIiwiaW1wb3J0IF9Ccm93c2VyUm91dGVyIGZyb20gJy4vQnJvd3NlclJvdXRlcic7XG5leHBvcnQgeyBfQnJvd3NlclJvdXRlciBhcyBCcm93c2VyUm91dGVyIH07XG5pbXBvcnQgX0hhc2hSb3V0ZXIgZnJvbSAnLi9IYXNoUm91dGVyJztcbmV4cG9ydCB7IF9IYXNoUm91dGVyIGFzIEhhc2hSb3V0ZXIgfTtcbmltcG9ydCBfTGluayBmcm9tICcuL0xpbmsnO1xuZXhwb3J0IHsgX0xpbmsgYXMgTGluayB9O1xuaW1wb3J0IF9NZW1vcnlSb3V0ZXIgZnJvbSAnLi9NZW1vcnlSb3V0ZXInO1xuZXhwb3J0IHsgX01lbW9yeVJvdXRlciBhcyBNZW1vcnlSb3V0ZXIgfTtcbmltcG9ydCBfTmF2TGluayBmcm9tICcuL05hdkxpbmsnO1xuZXhwb3J0IHsgX05hdkxpbmsgYXMgTmF2TGluayB9O1xuaW1wb3J0IF9Qcm9tcHQgZnJvbSAnLi9Qcm9tcHQnO1xuZXhwb3J0IHsgX1Byb21wdCBhcyBQcm9tcHQgfTtcbmltcG9ydCBfUmVkaXJlY3QgZnJvbSAnLi9SZWRpcmVjdCc7XG5leHBvcnQgeyBfUmVkaXJlY3QgYXMgUmVkaXJlY3QgfTtcbmltcG9ydCBfUm91dGUgZnJvbSAnLi9Sb3V0ZSc7XG5leHBvcnQgeyBfUm91dGUgYXMgUm91dGUgfTtcbmltcG9ydCBfUm91dGVyIGZyb20gJy4vUm91dGVyJztcbmV4cG9ydCB7IF9Sb3V0ZXIgYXMgUm91dGVyIH07XG5pbXBvcnQgX1N0YXRpY1JvdXRlciBmcm9tICcuL1N0YXRpY1JvdXRlcic7XG5leHBvcnQgeyBfU3RhdGljUm91dGVyIGFzIFN0YXRpY1JvdXRlciB9O1xuaW1wb3J0IF9Td2l0Y2ggZnJvbSAnLi9Td2l0Y2gnO1xuZXhwb3J0IHsgX1N3aXRjaCBhcyBTd2l0Y2ggfTtcbmltcG9ydCBfbWF0Y2hQYXRoIGZyb20gJy4vbWF0Y2hQYXRoJztcbmV4cG9ydCB7IF9tYXRjaFBhdGggYXMgbWF0Y2hQYXRoIH07XG5pbXBvcnQgX3dpdGhSb3V0ZXIgZnJvbSAnLi93aXRoUm91dGVyJztcbmV4cG9ydCB7IF93aXRoUm91dGVyIGFzIHdpdGhSb3V0ZXIgfTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3JlYWN0LXJvdXRlci1kb20vZXMvaW5kZXguanMiLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtjb25uZWN0fSBmcm9tICdyZWFjdC1yZWR1eCc7XG5cbmltcG9ydCBUb3BOYXYgZnJvbSAnLi9uYXZpZ2F0aW9uL3RvcC1uYXYnO1xuaW1wb3J0IEJvdHRvbU5hdiBmcm9tICcuL25hdmlnYXRpb24vYm90dG9tLW5hdic7XG5pbXBvcnQgQnJlYWRjcnVtYnMgZnJvbSAnLi9uYXZpZ2F0aW9uL2JyZWFkY3J1bWJzJztcbmltcG9ydCBEaXNwbGF5TWVudSBmcm9tICcuL25hdmlnYXRpb24vZGlzcGxheS1tZW51JztcblxuaW1wb3J0IEZvbGRlckxpc3QgZnJvbSAnLi9jb250ZW50L2ZvbGRlci1saXN0JztcbmltcG9ydCBGaWxlTGlzdCBmcm9tICcuL2NvbnRlbnQvZmlsZS1saXN0JztcbmltcG9ydCBQaG90b0xpc3QgZnJvbSAnLi9jb250ZW50L3Bob3RvLWxpc3QnO1xuaW1wb3J0IFNoYXJlZExpc3QgZnJvbSAnLi9jb250ZW50L3NoYXJlZC1saXN0JztcbmltcG9ydCBNdXNpY0xpc3QgZnJvbSAnLi9jb250ZW50L211c2ljLWxpc3QnO1xuXG5cbmNvbnN0IGl0ZW1MaXN0cyA9IHtcbiAgZmlsZXM6IEZpbGVMaXN0LFxuICBwaG90b3M6IFBob3RvTGlzdCxcbiAgc2hhcmVkOiBTaGFyZWRMaXN0LFxuICBtdXNpYzogTXVzaWNMaXN0XG59O1xuXG5jb25zdCBNYWluID0gZnVuY3Rpb24gKHtsb2NhdGlvbn0pIHtcbiAgY29uc3QgY3VycmVudExpc3QgPSBsb2NhdGlvbi5wYXRobmFtZS5zcGxpdCgnLycpWzFdIHx8ICdmaWxlcyc7XG4gIHJldHVybiAoXG4gICAgPGRpdj5cbiAgICAgIDxUb3BOYXYgLz5cblxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJzcGFjZXJcIi8+XG4gICAgICA8QnJlYWRjcnVtYnMvPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJyZXN1bHRzXCI+XG4gICAgICAgIDxEaXNwbGF5TWVudSAvPlxuXG4gICAgICAgIDxGb2xkZXJMaXN0Lz5cbiAgICAgICAge1JlYWN0LmNyZWF0ZUVsZW1lbnQoaXRlbUxpc3RzW2N1cnJlbnRMaXN0XSl9XG4gICAgICAgIDxCb3R0b21OYXYgbG9jYXRpb249e2N1cnJlbnRMaXN0fSAvPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjb25uZWN0KCgpID0+ICh7fSksICgpID0+ICh7fSkpKE1haW4pO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9jb21wb25lbnRzL21haW4uanN4IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcblxuaW1wb3J0IEJvdHRvbU5hdiBmcm9tICcuL2JvdHRvbS1uYXYnO1xuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIE1lbnUoe2xvY2F0aW9ufSkge1xuICBjb25zdCBjdXJyZW50TGlzdCA9IGxvY2F0aW9uLnBhdGhuYW1lLnNwbGl0KCcvJylbMV0gfHwgJ2ZpbGVzJztcbiAgcmV0dXJuIChcbiAgICA8ZGl2PlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJtZW51LWhlYWRlclwiPlxuICAgICAgICA8aW1nIGNsYXNzTmFtZT1cIm1lbnUtaGVhZGVyLWxvZ29cIiBzcmM9XCIuL2xvZ29zL2RhcGxpZS1sb2dvLWdyYXkuc3ZnXCIvPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWVudS1jb250YWluZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtZW51LWl0ZW1cIj5cbiAgICAgICAgICA8aW1nIGNsYXNzTmFtZT1cIm1lbnUtaW1nLXBsYWNlaG9sZGVyXCIgc3JjPVwiLi9pY29ucy9mb2xkZXIuc3ZnXCIvPlxuICAgICAgICAgICAgPGgzPkZpbGVzPC9oMz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWVudS1pdGVtXCI+XG4gICAgICAgICAgPGltZyBjbGFzc05hbWU9XCJtZW51LWltZy1wbGFjZWhvbGRlclwiIHNyYz1cIi4vaWNvbnMvcHJvZmlsZS5wbmdcIi8+XG4gICAgICAgICAgICA8aDM+UHJvZmlsZTwvaDM+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1lbnUtaXRlbVwiPlxuICAgICAgICAgIDxpbWcgY2xhc3NOYW1lPVwibWVudS1pbWctcGxhY2Vob2xkZXJcIiBzcmM9XCIuL2ljb25zL25ldHdvcmsucG5nXCIvPlxuICAgICAgICAgICAgPGgzPk5ldHdvcms8L2gzPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJtZW51LWl0ZW1cIj5cbiAgICAgICAgICA8aW1nIGNsYXNzTmFtZT1cIm1lbnUtaW1nLXBsYWNlaG9sZGVyXCIgc3JjPVwiLi9pY29ucy9zdG9yYWdlLXVzYWdlLnBuZ1wiLz5cbiAgICAgICAgICAgIDxoMz5TdG9yYWdlIFVzYWdlPC9oMz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWVudS1pdGVtXCI+XG4gICAgICAgICAgPGltZyBjbGFzc05hbWU9XCJtZW51LWltZy1wbGFjZWhvbGRlclwiIHNyYz1cIi4vaWNvbnMvbm90aWZpY2F0aW9ucy5wbmdcIi8+XG4gICAgICAgICAgICA8aDM+Tm90aWZpY2F0aW9uczwvaDM+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1lbnUtaXRlbVwiPlxuICAgICAgICAgIDxpbWcgY2xhc3NOYW1lPVwibWVudS1pbWctcGxhY2Vob2xkZXJcIiBzcmM9XCIuL2ljb25zL3NldHRpbmdzLnBuZ1wiLz5cbiAgICAgICAgICAgIDxoMz5TZXR0aW5nczwvaDM+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8Qm90dG9tTmF2IGxvY2F0aW9uPXtjdXJyZW50TGlzdH0gLz5cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9jb21wb25lbnRzL25hdmlnYXRpb24vbWVudS5qc3giLCJpbXBvcnQgaW5pdGlhbFN0YXRlIGZyb20gJy4uLy4uL3N0YXRlJztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlZHVjZShzdGF0ZSwgYWN0aW9uKSB7XG4gICd1c2Ugc3RyaWN0JztcblxuICBpZiAoIXN0YXRlKSB7XG4gICAgcmV0dXJuIGluaXRpYWxTdGF0ZTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgc2VsZWN0TW9kZTogdG9nZ2xlU2VsZWN0aW9uKHN0YXRlLnNlbGVjdGlvbk1vZGUsIGFjdGlvbiksXG4gICAgY3VycmVudFBhdGg6IG5hdmlnYXRlVG8oc3RhdGUuY3VycmVudFBhdGgsIGFjdGlvbiksXG4gICAgZmlsZXN5c3RlbTogc3RhdGUuZmlsZXN5c3RlbVxuICB9O1xufVxuXG5mdW5jdGlvbiB0b2dnbGVTZWxlY3Rpb24oc3RhdGUsIGFjdGlvbikge1xuICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gICAgY2FzZSAnc3RhcnQtc2VsZWN0aW9uJzpcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIGNhc2UgJ2NhbmNlbC1zZWxlY3Rpb24nOlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlO1xufVxuXG5mdW5jdGlvbiBuYXZpZ2F0ZVRvKHN0YXRlLCBhY3Rpb24pIHtcbiAgcmV0dXJuIGFjdGlvbi50eXBlID09PSAnbmF2aWdhdGUtdG8nID8gYWN0aW9uLnBheWxvYWQucGF0aCA6IHN0YXRlO1xufVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3JlZHVjZXJzL21haW4uanMiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgX2Fzc2lnbiA9IHJlcXVpcmUoJ29iamVjdC1hc3NpZ24nKTtcblxudmFyIGVtcHR5T2JqZWN0ID0gcmVxdWlyZSgnZmJqcy9saWIvZW1wdHlPYmplY3QnKTtcbnZhciBfaW52YXJpYW50ID0gcmVxdWlyZSgnZmJqcy9saWIvaW52YXJpYW50Jyk7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHZhciB3YXJuaW5nID0gcmVxdWlyZSgnZmJqcy9saWIvd2FybmluZycpO1xufVxuXG52YXIgTUlYSU5TX0tFWSA9ICdtaXhpbnMnO1xuXG4vLyBIZWxwZXIgZnVuY3Rpb24gdG8gYWxsb3cgdGhlIGNyZWF0aW9uIG9mIGFub255bW91cyBmdW5jdGlvbnMgd2hpY2ggZG8gbm90XG4vLyBoYXZlIC5uYW1lIHNldCB0byB0aGUgbmFtZSBvZiB0aGUgdmFyaWFibGUgYmVpbmcgYXNzaWduZWQgdG8uXG5mdW5jdGlvbiBpZGVudGl0eShmbikge1xuICByZXR1cm4gZm47XG59XG5cbnZhciBSZWFjdFByb3BUeXBlTG9jYXRpb25OYW1lcztcbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIFJlYWN0UHJvcFR5cGVMb2NhdGlvbk5hbWVzID0ge1xuICAgIHByb3A6ICdwcm9wJyxcbiAgICBjb250ZXh0OiAnY29udGV4dCcsXG4gICAgY2hpbGRDb250ZXh0OiAnY2hpbGQgY29udGV4dCdcbiAgfTtcbn0gZWxzZSB7XG4gIFJlYWN0UHJvcFR5cGVMb2NhdGlvbk5hbWVzID0ge307XG59XG5cbmZ1bmN0aW9uIGZhY3RvcnkoUmVhY3RDb21wb25lbnQsIGlzVmFsaWRFbGVtZW50LCBSZWFjdE5vb3BVcGRhdGVRdWV1ZSkge1xuICAvKipcbiAgICogUG9saWNpZXMgdGhhdCBkZXNjcmliZSBtZXRob2RzIGluIGBSZWFjdENsYXNzSW50ZXJmYWNlYC5cbiAgICovXG5cbiAgdmFyIGluamVjdGVkTWl4aW5zID0gW107XG5cbiAgLyoqXG4gICAqIENvbXBvc2l0ZSBjb21wb25lbnRzIGFyZSBoaWdoZXItbGV2ZWwgY29tcG9uZW50cyB0aGF0IGNvbXBvc2Ugb3RoZXIgY29tcG9zaXRlXG4gICAqIG9yIGhvc3QgY29tcG9uZW50cy5cbiAgICpcbiAgICogVG8gY3JlYXRlIGEgbmV3IHR5cGUgb2YgYFJlYWN0Q2xhc3NgLCBwYXNzIGEgc3BlY2lmaWNhdGlvbiBvZlxuICAgKiB5b3VyIG5ldyBjbGFzcyB0byBgUmVhY3QuY3JlYXRlQ2xhc3NgLiBUaGUgb25seSByZXF1aXJlbWVudCBvZiB5b3VyIGNsYXNzXG4gICAqIHNwZWNpZmljYXRpb24gaXMgdGhhdCB5b3UgaW1wbGVtZW50IGEgYHJlbmRlcmAgbWV0aG9kLlxuICAgKlxuICAgKiAgIHZhciBNeUNvbXBvbmVudCA9IFJlYWN0LmNyZWF0ZUNsYXNzKHtcbiAgICogICAgIHJlbmRlcjogZnVuY3Rpb24oKSB7XG4gICAqICAgICAgIHJldHVybiA8ZGl2PkhlbGxvIFdvcmxkPC9kaXY+O1xuICAgKiAgICAgfVxuICAgKiAgIH0pO1xuICAgKlxuICAgKiBUaGUgY2xhc3Mgc3BlY2lmaWNhdGlvbiBzdXBwb3J0cyBhIHNwZWNpZmljIHByb3RvY29sIG9mIG1ldGhvZHMgdGhhdCBoYXZlXG4gICAqIHNwZWNpYWwgbWVhbmluZyAoZS5nLiBgcmVuZGVyYCkuIFNlZSBgUmVhY3RDbGFzc0ludGVyZmFjZWAgZm9yXG4gICAqIG1vcmUgdGhlIGNvbXByZWhlbnNpdmUgcHJvdG9jb2wuIEFueSBvdGhlciBwcm9wZXJ0aWVzIGFuZCBtZXRob2RzIGluIHRoZVxuICAgKiBjbGFzcyBzcGVjaWZpY2F0aW9uIHdpbGwgYmUgYXZhaWxhYmxlIG9uIHRoZSBwcm90b3R5cGUuXG4gICAqXG4gICAqIEBpbnRlcmZhY2UgUmVhY3RDbGFzc0ludGVyZmFjZVxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHZhciBSZWFjdENsYXNzSW50ZXJmYWNlID0ge1xuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIE1peGluIG9iamVjdHMgdG8gaW5jbHVkZSB3aGVuIGRlZmluaW5nIHlvdXIgY29tcG9uZW50LlxuICAgICAqXG4gICAgICogQHR5cGUge2FycmF5fVxuICAgICAqIEBvcHRpb25hbFxuICAgICAqL1xuICAgIG1peGluczogJ0RFRklORV9NQU5ZJyxcblxuICAgIC8qKlxuICAgICAqIEFuIG9iamVjdCBjb250YWluaW5nIHByb3BlcnRpZXMgYW5kIG1ldGhvZHMgdGhhdCBzaG91bGQgYmUgZGVmaW5lZCBvblxuICAgICAqIHRoZSBjb21wb25lbnQncyBjb25zdHJ1Y3RvciBpbnN0ZWFkIG9mIGl0cyBwcm90b3R5cGUgKHN0YXRpYyBtZXRob2RzKS5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtvYmplY3R9XG4gICAgICogQG9wdGlvbmFsXG4gICAgICovXG4gICAgc3RhdGljczogJ0RFRklORV9NQU5ZJyxcblxuICAgIC8qKlxuICAgICAqIERlZmluaXRpb24gb2YgcHJvcCB0eXBlcyBmb3IgdGhpcyBjb21wb25lbnQuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7b2JqZWN0fVxuICAgICAqIEBvcHRpb25hbFxuICAgICAqL1xuICAgIHByb3BUeXBlczogJ0RFRklORV9NQU5ZJyxcblxuICAgIC8qKlxuICAgICAqIERlZmluaXRpb24gb2YgY29udGV4dCB0eXBlcyBmb3IgdGhpcyBjb21wb25lbnQuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7b2JqZWN0fVxuICAgICAqIEBvcHRpb25hbFxuICAgICAqL1xuICAgIGNvbnRleHRUeXBlczogJ0RFRklORV9NQU5ZJyxcblxuICAgIC8qKlxuICAgICAqIERlZmluaXRpb24gb2YgY29udGV4dCB0eXBlcyB0aGlzIGNvbXBvbmVudCBzZXRzIGZvciBpdHMgY2hpbGRyZW4uXG4gICAgICpcbiAgICAgKiBAdHlwZSB7b2JqZWN0fVxuICAgICAqIEBvcHRpb25hbFxuICAgICAqL1xuICAgIGNoaWxkQ29udGV4dFR5cGVzOiAnREVGSU5FX01BTlknLFxuXG4gICAgLy8gPT09PSBEZWZpbml0aW9uIG1ldGhvZHMgPT09PVxuXG4gICAgLyoqXG4gICAgICogSW52b2tlZCB3aGVuIHRoZSBjb21wb25lbnQgaXMgbW91bnRlZC4gVmFsdWVzIGluIHRoZSBtYXBwaW5nIHdpbGwgYmUgc2V0IG9uXG4gICAgICogYHRoaXMucHJvcHNgIGlmIHRoYXQgcHJvcCBpcyBub3Qgc3BlY2lmaWVkIChpLmUuIHVzaW5nIGFuIGBpbmAgY2hlY2spLlxuICAgICAqXG4gICAgICogVGhpcyBtZXRob2QgaXMgaW52b2tlZCBiZWZvcmUgYGdldEluaXRpYWxTdGF0ZWAgYW5kIHRoZXJlZm9yZSBjYW5ub3QgcmVseVxuICAgICAqIG9uIGB0aGlzLnN0YXRlYCBvciB1c2UgYHRoaXMuc2V0U3RhdGVgLlxuICAgICAqXG4gICAgICogQHJldHVybiB7b2JqZWN0fVxuICAgICAqIEBvcHRpb25hbFxuICAgICAqL1xuICAgIGdldERlZmF1bHRQcm9wczogJ0RFRklORV9NQU5ZX01FUkdFRCcsXG5cbiAgICAvKipcbiAgICAgKiBJbnZva2VkIG9uY2UgYmVmb3JlIHRoZSBjb21wb25lbnQgaXMgbW91bnRlZC4gVGhlIHJldHVybiB2YWx1ZSB3aWxsIGJlIHVzZWRcbiAgICAgKiBhcyB0aGUgaW5pdGlhbCB2YWx1ZSBvZiBgdGhpcy5zdGF0ZWAuXG4gICAgICpcbiAgICAgKiAgIGdldEluaXRpYWxTdGF0ZTogZnVuY3Rpb24oKSB7XG4gICAgICogICAgIHJldHVybiB7XG4gICAgICogICAgICAgaXNPbjogZmFsc2UsXG4gICAgICogICAgICAgZm9vQmF6OiBuZXcgQmF6Rm9vKClcbiAgICAgKiAgICAgfVxuICAgICAqICAgfVxuICAgICAqXG4gICAgICogQHJldHVybiB7b2JqZWN0fVxuICAgICAqIEBvcHRpb25hbFxuICAgICAqL1xuICAgIGdldEluaXRpYWxTdGF0ZTogJ0RFRklORV9NQU5ZX01FUkdFRCcsXG5cbiAgICAvKipcbiAgICAgKiBAcmV0dXJuIHtvYmplY3R9XG4gICAgICogQG9wdGlvbmFsXG4gICAgICovXG4gICAgZ2V0Q2hpbGRDb250ZXh0OiAnREVGSU5FX01BTllfTUVSR0VEJyxcblxuICAgIC8qKlxuICAgICAqIFVzZXMgcHJvcHMgZnJvbSBgdGhpcy5wcm9wc2AgYW5kIHN0YXRlIGZyb20gYHRoaXMuc3RhdGVgIHRvIHJlbmRlciB0aGVcbiAgICAgKiBzdHJ1Y3R1cmUgb2YgdGhlIGNvbXBvbmVudC5cbiAgICAgKlxuICAgICAqIE5vIGd1YXJhbnRlZXMgYXJlIG1hZGUgYWJvdXQgd2hlbiBvciBob3cgb2Z0ZW4gdGhpcyBtZXRob2QgaXMgaW52b2tlZCwgc29cbiAgICAgKiBpdCBtdXN0IG5vdCBoYXZlIHNpZGUgZWZmZWN0cy5cbiAgICAgKlxuICAgICAqICAgcmVuZGVyOiBmdW5jdGlvbigpIHtcbiAgICAgKiAgICAgdmFyIG5hbWUgPSB0aGlzLnByb3BzLm5hbWU7XG4gICAgICogICAgIHJldHVybiA8ZGl2PkhlbGxvLCB7bmFtZX0hPC9kaXY+O1xuICAgICAqICAgfVxuICAgICAqXG4gICAgICogQHJldHVybiB7UmVhY3RDb21wb25lbnR9XG4gICAgICogQHJlcXVpcmVkXG4gICAgICovXG4gICAgcmVuZGVyOiAnREVGSU5FX09OQ0UnLFxuXG4gICAgLy8gPT09PSBEZWxlZ2F0ZSBtZXRob2RzID09PT1cblxuICAgIC8qKlxuICAgICAqIEludm9rZWQgd2hlbiB0aGUgY29tcG9uZW50IGlzIGluaXRpYWxseSBjcmVhdGVkIGFuZCBhYm91dCB0byBiZSBtb3VudGVkLlxuICAgICAqIFRoaXMgbWF5IGhhdmUgc2lkZSBlZmZlY3RzLCBidXQgYW55IGV4dGVybmFsIHN1YnNjcmlwdGlvbnMgb3IgZGF0YSBjcmVhdGVkXG4gICAgICogYnkgdGhpcyBtZXRob2QgbXVzdCBiZSBjbGVhbmVkIHVwIGluIGBjb21wb25lbnRXaWxsVW5tb3VudGAuXG4gICAgICpcbiAgICAgKiBAb3B0aW9uYWxcbiAgICAgKi9cbiAgICBjb21wb25lbnRXaWxsTW91bnQ6ICdERUZJTkVfTUFOWScsXG5cbiAgICAvKipcbiAgICAgKiBJbnZva2VkIHdoZW4gdGhlIGNvbXBvbmVudCBoYXMgYmVlbiBtb3VudGVkIGFuZCBoYXMgYSBET00gcmVwcmVzZW50YXRpb24uXG4gICAgICogSG93ZXZlciwgdGhlcmUgaXMgbm8gZ3VhcmFudGVlIHRoYXQgdGhlIERPTSBub2RlIGlzIGluIHRoZSBkb2N1bWVudC5cbiAgICAgKlxuICAgICAqIFVzZSB0aGlzIGFzIGFuIG9wcG9ydHVuaXR5IHRvIG9wZXJhdGUgb24gdGhlIERPTSB3aGVuIHRoZSBjb21wb25lbnQgaGFzXG4gICAgICogYmVlbiBtb3VudGVkIChpbml0aWFsaXplZCBhbmQgcmVuZGVyZWQpIGZvciB0aGUgZmlyc3QgdGltZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7RE9NRWxlbWVudH0gcm9vdE5vZGUgRE9NIGVsZW1lbnQgcmVwcmVzZW50aW5nIHRoZSBjb21wb25lbnQuXG4gICAgICogQG9wdGlvbmFsXG4gICAgICovXG4gICAgY29tcG9uZW50RGlkTW91bnQ6ICdERUZJTkVfTUFOWScsXG5cbiAgICAvKipcbiAgICAgKiBJbnZva2VkIGJlZm9yZSB0aGUgY29tcG9uZW50IHJlY2VpdmVzIG5ldyBwcm9wcy5cbiAgICAgKlxuICAgICAqIFVzZSB0aGlzIGFzIGFuIG9wcG9ydHVuaXR5IHRvIHJlYWN0IHRvIGEgcHJvcCB0cmFuc2l0aW9uIGJ5IHVwZGF0aW5nIHRoZVxuICAgICAqIHN0YXRlIHVzaW5nIGB0aGlzLnNldFN0YXRlYC4gQ3VycmVudCBwcm9wcyBhcmUgYWNjZXNzZWQgdmlhIGB0aGlzLnByb3BzYC5cbiAgICAgKlxuICAgICAqICAgY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wczogZnVuY3Rpb24obmV4dFByb3BzLCBuZXh0Q29udGV4dCkge1xuICAgICAqICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgKiAgICAgICBsaWtlc0luY3JlYXNpbmc6IG5leHRQcm9wcy5saWtlQ291bnQgPiB0aGlzLnByb3BzLmxpa2VDb3VudFxuICAgICAqICAgICB9KTtcbiAgICAgKiAgIH1cbiAgICAgKlxuICAgICAqIE5PVEU6IFRoZXJlIGlzIG5vIGVxdWl2YWxlbnQgYGNvbXBvbmVudFdpbGxSZWNlaXZlU3RhdGVgLiBBbiBpbmNvbWluZyBwcm9wXG4gICAgICogdHJhbnNpdGlvbiBtYXkgY2F1c2UgYSBzdGF0ZSBjaGFuZ2UsIGJ1dCB0aGUgb3Bwb3NpdGUgaXMgbm90IHRydWUuIElmIHlvdVxuICAgICAqIG5lZWQgaXQsIHlvdSBhcmUgcHJvYmFibHkgbG9va2luZyBmb3IgYGNvbXBvbmVudFdpbGxVcGRhdGVgLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtvYmplY3R9IG5leHRQcm9wc1xuICAgICAqIEBvcHRpb25hbFxuICAgICAqL1xuICAgIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHM6ICdERUZJTkVfTUFOWScsXG5cbiAgICAvKipcbiAgICAgKiBJbnZva2VkIHdoaWxlIGRlY2lkaW5nIGlmIHRoZSBjb21wb25lbnQgc2hvdWxkIGJlIHVwZGF0ZWQgYXMgYSByZXN1bHQgb2ZcbiAgICAgKiByZWNlaXZpbmcgbmV3IHByb3BzLCBzdGF0ZSBhbmQvb3IgY29udGV4dC5cbiAgICAgKlxuICAgICAqIFVzZSB0aGlzIGFzIGFuIG9wcG9ydHVuaXR5IHRvIGByZXR1cm4gZmFsc2VgIHdoZW4geW91J3JlIGNlcnRhaW4gdGhhdCB0aGVcbiAgICAgKiB0cmFuc2l0aW9uIHRvIHRoZSBuZXcgcHJvcHMvc3RhdGUvY29udGV4dCB3aWxsIG5vdCByZXF1aXJlIGEgY29tcG9uZW50XG4gICAgICogdXBkYXRlLlxuICAgICAqXG4gICAgICogICBzaG91bGRDb21wb25lbnRVcGRhdGU6IGZ1bmN0aW9uKG5leHRQcm9wcywgbmV4dFN0YXRlLCBuZXh0Q29udGV4dCkge1xuICAgICAqICAgICByZXR1cm4gIWVxdWFsKG5leHRQcm9wcywgdGhpcy5wcm9wcykgfHxcbiAgICAgKiAgICAgICAhZXF1YWwobmV4dFN0YXRlLCB0aGlzLnN0YXRlKSB8fFxuICAgICAqICAgICAgICFlcXVhbChuZXh0Q29udGV4dCwgdGhpcy5jb250ZXh0KTtcbiAgICAgKiAgIH1cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBuZXh0UHJvcHNcbiAgICAgKiBAcGFyYW0gez9vYmplY3R9IG5leHRTdGF0ZVxuICAgICAqIEBwYXJhbSB7P29iamVjdH0gbmV4dENvbnRleHRcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHRoZSBjb21wb25lbnQgc2hvdWxkIHVwZGF0ZS5cbiAgICAgKiBAb3B0aW9uYWxcbiAgICAgKi9cbiAgICBzaG91bGRDb21wb25lbnRVcGRhdGU6ICdERUZJTkVfT05DRScsXG5cbiAgICAvKipcbiAgICAgKiBJbnZva2VkIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBhYm91dCB0byB1cGRhdGUgZHVlIHRvIGEgdHJhbnNpdGlvbiBmcm9tXG4gICAgICogYHRoaXMucHJvcHNgLCBgdGhpcy5zdGF0ZWAgYW5kIGB0aGlzLmNvbnRleHRgIHRvIGBuZXh0UHJvcHNgLCBgbmV4dFN0YXRlYFxuICAgICAqIGFuZCBgbmV4dENvbnRleHRgLlxuICAgICAqXG4gICAgICogVXNlIHRoaXMgYXMgYW4gb3Bwb3J0dW5pdHkgdG8gcGVyZm9ybSBwcmVwYXJhdGlvbiBiZWZvcmUgYW4gdXBkYXRlIG9jY3Vycy5cbiAgICAgKlxuICAgICAqIE5PVEU6IFlvdSAqKmNhbm5vdCoqIHVzZSBgdGhpcy5zZXRTdGF0ZSgpYCBpbiB0aGlzIG1ldGhvZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBuZXh0UHJvcHNcbiAgICAgKiBAcGFyYW0gez9vYmplY3R9IG5leHRTdGF0ZVxuICAgICAqIEBwYXJhbSB7P29iamVjdH0gbmV4dENvbnRleHRcbiAgICAgKiBAcGFyYW0ge1JlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb259IHRyYW5zYWN0aW9uXG4gICAgICogQG9wdGlvbmFsXG4gICAgICovXG4gICAgY29tcG9uZW50V2lsbFVwZGF0ZTogJ0RFRklORV9NQU5ZJyxcblxuICAgIC8qKlxuICAgICAqIEludm9rZWQgd2hlbiB0aGUgY29tcG9uZW50J3MgRE9NIHJlcHJlc2VudGF0aW9uIGhhcyBiZWVuIHVwZGF0ZWQuXG4gICAgICpcbiAgICAgKiBVc2UgdGhpcyBhcyBhbiBvcHBvcnR1bml0eSB0byBvcGVyYXRlIG9uIHRoZSBET00gd2hlbiB0aGUgY29tcG9uZW50IGhhc1xuICAgICAqIGJlZW4gdXBkYXRlZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBwcmV2UHJvcHNcbiAgICAgKiBAcGFyYW0gez9vYmplY3R9IHByZXZTdGF0ZVxuICAgICAqIEBwYXJhbSB7P29iamVjdH0gcHJldkNvbnRleHRcbiAgICAgKiBAcGFyYW0ge0RPTUVsZW1lbnR9IHJvb3ROb2RlIERPTSBlbGVtZW50IHJlcHJlc2VudGluZyB0aGUgY29tcG9uZW50LlxuICAgICAqIEBvcHRpb25hbFxuICAgICAqL1xuICAgIGNvbXBvbmVudERpZFVwZGF0ZTogJ0RFRklORV9NQU5ZJyxcblxuICAgIC8qKlxuICAgICAqIEludm9rZWQgd2hlbiB0aGUgY29tcG9uZW50IGlzIGFib3V0IHRvIGJlIHJlbW92ZWQgZnJvbSBpdHMgcGFyZW50IGFuZCBoYXZlXG4gICAgICogaXRzIERPTSByZXByZXNlbnRhdGlvbiBkZXN0cm95ZWQuXG4gICAgICpcbiAgICAgKiBVc2UgdGhpcyBhcyBhbiBvcHBvcnR1bml0eSB0byBkZWFsbG9jYXRlIGFueSBleHRlcm5hbCByZXNvdXJjZXMuXG4gICAgICpcbiAgICAgKiBOT1RFOiBUaGVyZSBpcyBubyBgY29tcG9uZW50RGlkVW5tb3VudGAgc2luY2UgeW91ciBjb21wb25lbnQgd2lsbCBoYXZlIGJlZW5cbiAgICAgKiBkZXN0cm95ZWQgYnkgdGhhdCBwb2ludC5cbiAgICAgKlxuICAgICAqIEBvcHRpb25hbFxuICAgICAqL1xuICAgIGNvbXBvbmVudFdpbGxVbm1vdW50OiAnREVGSU5FX01BTlknLFxuXG4gICAgLy8gPT09PSBBZHZhbmNlZCBtZXRob2RzID09PT1cblxuICAgIC8qKlxuICAgICAqIFVwZGF0ZXMgdGhlIGNvbXBvbmVudCdzIGN1cnJlbnRseSBtb3VudGVkIERPTSByZXByZXNlbnRhdGlvbi5cbiAgICAgKlxuICAgICAqIEJ5IGRlZmF1bHQsIHRoaXMgaW1wbGVtZW50cyBSZWFjdCdzIHJlbmRlcmluZyBhbmQgcmVjb25jaWxpYXRpb24gYWxnb3JpdGhtLlxuICAgICAqIFNvcGhpc3RpY2F0ZWQgY2xpZW50cyBtYXkgd2lzaCB0byBvdmVycmlkZSB0aGlzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtSZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9ufSB0cmFuc2FjdGlvblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqIEBvdmVycmlkYWJsZVxuICAgICAqL1xuICAgIHVwZGF0ZUNvbXBvbmVudDogJ09WRVJSSURFX0JBU0UnXG4gIH07XG5cbiAgLyoqXG4gICAqIE1hcHBpbmcgZnJvbSBjbGFzcyBzcGVjaWZpY2F0aW9uIGtleXMgdG8gc3BlY2lhbCBwcm9jZXNzaW5nIGZ1bmN0aW9ucy5cbiAgICpcbiAgICogQWx0aG91Z2ggdGhlc2UgYXJlIGRlY2xhcmVkIGxpa2UgaW5zdGFuY2UgcHJvcGVydGllcyBpbiB0aGUgc3BlY2lmaWNhdGlvblxuICAgKiB3aGVuIGRlZmluaW5nIGNsYXNzZXMgdXNpbmcgYFJlYWN0LmNyZWF0ZUNsYXNzYCwgdGhleSBhcmUgYWN0dWFsbHkgc3RhdGljXG4gICAqIGFuZCBhcmUgYWNjZXNzaWJsZSBvbiB0aGUgY29uc3RydWN0b3IgaW5zdGVhZCBvZiB0aGUgcHJvdG90eXBlLiBEZXNwaXRlXG4gICAqIGJlaW5nIHN0YXRpYywgdGhleSBtdXN0IGJlIGRlZmluZWQgb3V0c2lkZSBvZiB0aGUgXCJzdGF0aWNzXCIga2V5IHVuZGVyXG4gICAqIHdoaWNoIGFsbCBvdGhlciBzdGF0aWMgbWV0aG9kcyBhcmUgZGVmaW5lZC5cbiAgICovXG4gIHZhciBSRVNFUlZFRF9TUEVDX0tFWVMgPSB7XG4gICAgZGlzcGxheU5hbWU6IGZ1bmN0aW9uKENvbnN0cnVjdG9yLCBkaXNwbGF5TmFtZSkge1xuICAgICAgQ29uc3RydWN0b3IuZGlzcGxheU5hbWUgPSBkaXNwbGF5TmFtZTtcbiAgICB9LFxuICAgIG1peGluczogZnVuY3Rpb24oQ29uc3RydWN0b3IsIG1peGlucykge1xuICAgICAgaWYgKG1peGlucykge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1peGlucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIG1peFNwZWNJbnRvQ29tcG9uZW50KENvbnN0cnVjdG9yLCBtaXhpbnNbaV0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBjaGlsZENvbnRleHRUeXBlczogZnVuY3Rpb24oQ29uc3RydWN0b3IsIGNoaWxkQ29udGV4dFR5cGVzKSB7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICB2YWxpZGF0ZVR5cGVEZWYoQ29uc3RydWN0b3IsIGNoaWxkQ29udGV4dFR5cGVzLCAnY2hpbGRDb250ZXh0Jyk7XG4gICAgICB9XG4gICAgICBDb25zdHJ1Y3Rvci5jaGlsZENvbnRleHRUeXBlcyA9IF9hc3NpZ24oXG4gICAgICAgIHt9LFxuICAgICAgICBDb25zdHJ1Y3Rvci5jaGlsZENvbnRleHRUeXBlcyxcbiAgICAgICAgY2hpbGRDb250ZXh0VHlwZXNcbiAgICAgICk7XG4gICAgfSxcbiAgICBjb250ZXh0VHlwZXM6IGZ1bmN0aW9uKENvbnN0cnVjdG9yLCBjb250ZXh0VHlwZXMpIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIHZhbGlkYXRlVHlwZURlZihDb25zdHJ1Y3RvciwgY29udGV4dFR5cGVzLCAnY29udGV4dCcpO1xuICAgICAgfVxuICAgICAgQ29uc3RydWN0b3IuY29udGV4dFR5cGVzID0gX2Fzc2lnbihcbiAgICAgICAge30sXG4gICAgICAgIENvbnN0cnVjdG9yLmNvbnRleHRUeXBlcyxcbiAgICAgICAgY29udGV4dFR5cGVzXG4gICAgICApO1xuICAgIH0sXG4gICAgLyoqXG4gICAgICogU3BlY2lhbCBjYXNlIGdldERlZmF1bHRQcm9wcyB3aGljaCBzaG91bGQgbW92ZSBpbnRvIHN0YXRpY3MgYnV0IHJlcXVpcmVzXG4gICAgICogYXV0b21hdGljIG1lcmdpbmcuXG4gICAgICovXG4gICAgZ2V0RGVmYXVsdFByb3BzOiBmdW5jdGlvbihDb25zdHJ1Y3RvciwgZ2V0RGVmYXVsdFByb3BzKSB7XG4gICAgICBpZiAoQ29uc3RydWN0b3IuZ2V0RGVmYXVsdFByb3BzKSB7XG4gICAgICAgIENvbnN0cnVjdG9yLmdldERlZmF1bHRQcm9wcyA9IGNyZWF0ZU1lcmdlZFJlc3VsdEZ1bmN0aW9uKFxuICAgICAgICAgIENvbnN0cnVjdG9yLmdldERlZmF1bHRQcm9wcyxcbiAgICAgICAgICBnZXREZWZhdWx0UHJvcHNcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIENvbnN0cnVjdG9yLmdldERlZmF1bHRQcm9wcyA9IGdldERlZmF1bHRQcm9wcztcbiAgICAgIH1cbiAgICB9LFxuICAgIHByb3BUeXBlczogZnVuY3Rpb24oQ29uc3RydWN0b3IsIHByb3BUeXBlcykge1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgdmFsaWRhdGVUeXBlRGVmKENvbnN0cnVjdG9yLCBwcm9wVHlwZXMsICdwcm9wJyk7XG4gICAgICB9XG4gICAgICBDb25zdHJ1Y3Rvci5wcm9wVHlwZXMgPSBfYXNzaWduKHt9LCBDb25zdHJ1Y3Rvci5wcm9wVHlwZXMsIHByb3BUeXBlcyk7XG4gICAgfSxcbiAgICBzdGF0aWNzOiBmdW5jdGlvbihDb25zdHJ1Y3Rvciwgc3RhdGljcykge1xuICAgICAgbWl4U3RhdGljU3BlY0ludG9Db21wb25lbnQoQ29uc3RydWN0b3IsIHN0YXRpY3MpO1xuICAgIH0sXG4gICAgYXV0b2JpbmQ6IGZ1bmN0aW9uKCkge31cbiAgfTtcblxuICBmdW5jdGlvbiB2YWxpZGF0ZVR5cGVEZWYoQ29uc3RydWN0b3IsIHR5cGVEZWYsIGxvY2F0aW9uKSB7XG4gICAgZm9yICh2YXIgcHJvcE5hbWUgaW4gdHlwZURlZikge1xuICAgICAgaWYgKHR5cGVEZWYuaGFzT3duUHJvcGVydHkocHJvcE5hbWUpKSB7XG4gICAgICAgIC8vIHVzZSBhIHdhcm5pbmcgaW5zdGVhZCBvZiBhbiBfaW52YXJpYW50IHNvIGNvbXBvbmVudHNcbiAgICAgICAgLy8gZG9uJ3Qgc2hvdyB1cCBpbiBwcm9kIGJ1dCBvbmx5IGluIF9fREVWX19cbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICB3YXJuaW5nKFxuICAgICAgICAgICAgdHlwZW9mIHR5cGVEZWZbcHJvcE5hbWVdID09PSAnZnVuY3Rpb24nLFxuICAgICAgICAgICAgJyVzOiAlcyB0eXBlIGAlc2AgaXMgaW52YWxpZDsgaXQgbXVzdCBiZSBhIGZ1bmN0aW9uLCB1c3VhbGx5IGZyb20gJyArXG4gICAgICAgICAgICAgICdSZWFjdC5Qcm9wVHlwZXMuJyxcbiAgICAgICAgICAgIENvbnN0cnVjdG9yLmRpc3BsYXlOYW1lIHx8ICdSZWFjdENsYXNzJyxcbiAgICAgICAgICAgIFJlYWN0UHJvcFR5cGVMb2NhdGlvbk5hbWVzW2xvY2F0aW9uXSxcbiAgICAgICAgICAgIHByb3BOYW1lXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHZhbGlkYXRlTWV0aG9kT3ZlcnJpZGUoaXNBbHJlYWR5RGVmaW5lZCwgbmFtZSkge1xuICAgIHZhciBzcGVjUG9saWN5ID0gUmVhY3RDbGFzc0ludGVyZmFjZS5oYXNPd25Qcm9wZXJ0eShuYW1lKVxuICAgICAgPyBSZWFjdENsYXNzSW50ZXJmYWNlW25hbWVdXG4gICAgICA6IG51bGw7XG5cbiAgICAvLyBEaXNhbGxvdyBvdmVycmlkaW5nIG9mIGJhc2UgY2xhc3MgbWV0aG9kcyB1bmxlc3MgZXhwbGljaXRseSBhbGxvd2VkLlxuICAgIGlmIChSZWFjdENsYXNzTWl4aW4uaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgIF9pbnZhcmlhbnQoXG4gICAgICAgIHNwZWNQb2xpY3kgPT09ICdPVkVSUklERV9CQVNFJyxcbiAgICAgICAgJ1JlYWN0Q2xhc3NJbnRlcmZhY2U6IFlvdSBhcmUgYXR0ZW1wdGluZyB0byBvdmVycmlkZSAnICtcbiAgICAgICAgICAnYCVzYCBmcm9tIHlvdXIgY2xhc3Mgc3BlY2lmaWNhdGlvbi4gRW5zdXJlIHRoYXQgeW91ciBtZXRob2QgbmFtZXMgJyArXG4gICAgICAgICAgJ2RvIG5vdCBvdmVybGFwIHdpdGggUmVhY3QgbWV0aG9kcy4nLFxuICAgICAgICBuYW1lXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIERpc2FsbG93IGRlZmluaW5nIG1ldGhvZHMgbW9yZSB0aGFuIG9uY2UgdW5sZXNzIGV4cGxpY2l0bHkgYWxsb3dlZC5cbiAgICBpZiAoaXNBbHJlYWR5RGVmaW5lZCkge1xuICAgICAgX2ludmFyaWFudChcbiAgICAgICAgc3BlY1BvbGljeSA9PT0gJ0RFRklORV9NQU5ZJyB8fCBzcGVjUG9saWN5ID09PSAnREVGSU5FX01BTllfTUVSR0VEJyxcbiAgICAgICAgJ1JlYWN0Q2xhc3NJbnRlcmZhY2U6IFlvdSBhcmUgYXR0ZW1wdGluZyB0byBkZWZpbmUgJyArXG4gICAgICAgICAgJ2Alc2Agb24geW91ciBjb21wb25lbnQgbW9yZSB0aGFuIG9uY2UuIFRoaXMgY29uZmxpY3QgbWF5IGJlIGR1ZSAnICtcbiAgICAgICAgICAndG8gYSBtaXhpbi4nLFxuICAgICAgICBuYW1lXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBNaXhpbiBoZWxwZXIgd2hpY2ggaGFuZGxlcyBwb2xpY3kgdmFsaWRhdGlvbiBhbmQgcmVzZXJ2ZWRcbiAgICogc3BlY2lmaWNhdGlvbiBrZXlzIHdoZW4gYnVpbGRpbmcgUmVhY3QgY2xhc3Nlcy5cbiAgICovXG4gIGZ1bmN0aW9uIG1peFNwZWNJbnRvQ29tcG9uZW50KENvbnN0cnVjdG9yLCBzcGVjKSB7XG4gICAgaWYgKCFzcGVjKSB7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICB2YXIgdHlwZW9mU3BlYyA9IHR5cGVvZiBzcGVjO1xuICAgICAgICB2YXIgaXNNaXhpblZhbGlkID0gdHlwZW9mU3BlYyA9PT0gJ29iamVjdCcgJiYgc3BlYyAhPT0gbnVsbDtcblxuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgIHdhcm5pbmcoXG4gICAgICAgICAgICBpc01peGluVmFsaWQsXG4gICAgICAgICAgICBcIiVzOiBZb3UncmUgYXR0ZW1wdGluZyB0byBpbmNsdWRlIGEgbWl4aW4gdGhhdCBpcyBlaXRoZXIgbnVsbCBcIiArXG4gICAgICAgICAgICAgICdvciBub3QgYW4gb2JqZWN0LiBDaGVjayB0aGUgbWl4aW5zIGluY2x1ZGVkIGJ5IHRoZSBjb21wb25lbnQsICcgK1xuICAgICAgICAgICAgICAnYXMgd2VsbCBhcyBhbnkgbWl4aW5zIHRoZXkgaW5jbHVkZSB0aGVtc2VsdmVzLiAnICtcbiAgICAgICAgICAgICAgJ0V4cGVjdGVkIG9iamVjdCBidXQgZ290ICVzLicsXG4gICAgICAgICAgICBDb25zdHJ1Y3Rvci5kaXNwbGF5TmFtZSB8fCAnUmVhY3RDbGFzcycsXG4gICAgICAgICAgICBzcGVjID09PSBudWxsID8gbnVsbCA6IHR5cGVvZlNwZWNcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBfaW52YXJpYW50KFxuICAgICAgdHlwZW9mIHNwZWMgIT09ICdmdW5jdGlvbicsXG4gICAgICBcIlJlYWN0Q2xhc3M6IFlvdSdyZSBhdHRlbXB0aW5nIHRvIFwiICtcbiAgICAgICAgJ3VzZSBhIGNvbXBvbmVudCBjbGFzcyBvciBmdW5jdGlvbiBhcyBhIG1peGluLiBJbnN0ZWFkLCBqdXN0IHVzZSBhICcgK1xuICAgICAgICAncmVndWxhciBvYmplY3QuJ1xuICAgICk7XG4gICAgX2ludmFyaWFudChcbiAgICAgICFpc1ZhbGlkRWxlbWVudChzcGVjKSxcbiAgICAgIFwiUmVhY3RDbGFzczogWW91J3JlIGF0dGVtcHRpbmcgdG8gXCIgK1xuICAgICAgICAndXNlIGEgY29tcG9uZW50IGFzIGEgbWl4aW4uIEluc3RlYWQsIGp1c3QgdXNlIGEgcmVndWxhciBvYmplY3QuJ1xuICAgICk7XG5cbiAgICB2YXIgcHJvdG8gPSBDb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG4gICAgdmFyIGF1dG9CaW5kUGFpcnMgPSBwcm90by5fX3JlYWN0QXV0b0JpbmRQYWlycztcblxuICAgIC8vIEJ5IGhhbmRsaW5nIG1peGlucyBiZWZvcmUgYW55IG90aGVyIHByb3BlcnRpZXMsIHdlIGVuc3VyZSB0aGUgc2FtZVxuICAgIC8vIGNoYWluaW5nIG9yZGVyIGlzIGFwcGxpZWQgdG8gbWV0aG9kcyB3aXRoIERFRklORV9NQU5ZIHBvbGljeSwgd2hldGhlclxuICAgIC8vIG1peGlucyBhcmUgbGlzdGVkIGJlZm9yZSBvciBhZnRlciB0aGVzZSBtZXRob2RzIGluIHRoZSBzcGVjLlxuICAgIGlmIChzcGVjLmhhc093blByb3BlcnR5KE1JWElOU19LRVkpKSB7XG4gICAgICBSRVNFUlZFRF9TUEVDX0tFWVMubWl4aW5zKENvbnN0cnVjdG9yLCBzcGVjLm1peGlucyk7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgbmFtZSBpbiBzcGVjKSB7XG4gICAgICBpZiAoIXNwZWMuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChuYW1lID09PSBNSVhJTlNfS0VZKSB7XG4gICAgICAgIC8vIFdlIGhhdmUgYWxyZWFkeSBoYW5kbGVkIG1peGlucyBpbiBhIHNwZWNpYWwgY2FzZSBhYm92ZS5cbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHZhciBwcm9wZXJ0eSA9IHNwZWNbbmFtZV07XG4gICAgICB2YXIgaXNBbHJlYWR5RGVmaW5lZCA9IHByb3RvLmhhc093blByb3BlcnR5KG5hbWUpO1xuICAgICAgdmFsaWRhdGVNZXRob2RPdmVycmlkZShpc0FscmVhZHlEZWZpbmVkLCBuYW1lKTtcblxuICAgICAgaWYgKFJFU0VSVkVEX1NQRUNfS0VZUy5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuICAgICAgICBSRVNFUlZFRF9TUEVDX0tFWVNbbmFtZV0oQ29uc3RydWN0b3IsIHByb3BlcnR5KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFNldHVwIG1ldGhvZHMgb24gcHJvdG90eXBlOlxuICAgICAgICAvLyBUaGUgZm9sbG93aW5nIG1lbWJlciBtZXRob2RzIHNob3VsZCBub3QgYmUgYXV0b21hdGljYWxseSBib3VuZDpcbiAgICAgICAgLy8gMS4gRXhwZWN0ZWQgUmVhY3RDbGFzcyBtZXRob2RzIChpbiB0aGUgXCJpbnRlcmZhY2VcIikuXG4gICAgICAgIC8vIDIuIE92ZXJyaWRkZW4gbWV0aG9kcyAodGhhdCB3ZXJlIG1peGVkIGluKS5cbiAgICAgICAgdmFyIGlzUmVhY3RDbGFzc01ldGhvZCA9IFJlYWN0Q2xhc3NJbnRlcmZhY2UuaGFzT3duUHJvcGVydHkobmFtZSk7XG4gICAgICAgIHZhciBpc0Z1bmN0aW9uID0gdHlwZW9mIHByb3BlcnR5ID09PSAnZnVuY3Rpb24nO1xuICAgICAgICB2YXIgc2hvdWxkQXV0b0JpbmQgPVxuICAgICAgICAgIGlzRnVuY3Rpb24gJiZcbiAgICAgICAgICAhaXNSZWFjdENsYXNzTWV0aG9kICYmXG4gICAgICAgICAgIWlzQWxyZWFkeURlZmluZWQgJiZcbiAgICAgICAgICBzcGVjLmF1dG9iaW5kICE9PSBmYWxzZTtcblxuICAgICAgICBpZiAoc2hvdWxkQXV0b0JpbmQpIHtcbiAgICAgICAgICBhdXRvQmluZFBhaXJzLnB1c2gobmFtZSwgcHJvcGVydHkpO1xuICAgICAgICAgIHByb3RvW25hbWVdID0gcHJvcGVydHk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKGlzQWxyZWFkeURlZmluZWQpIHtcbiAgICAgICAgICAgIHZhciBzcGVjUG9saWN5ID0gUmVhY3RDbGFzc0ludGVyZmFjZVtuYW1lXTtcblxuICAgICAgICAgICAgLy8gVGhlc2UgY2FzZXMgc2hvdWxkIGFscmVhZHkgYmUgY2F1Z2h0IGJ5IHZhbGlkYXRlTWV0aG9kT3ZlcnJpZGUuXG4gICAgICAgICAgICBfaW52YXJpYW50KFxuICAgICAgICAgICAgICBpc1JlYWN0Q2xhc3NNZXRob2QgJiZcbiAgICAgICAgICAgICAgICAoc3BlY1BvbGljeSA9PT0gJ0RFRklORV9NQU5ZX01FUkdFRCcgfHxcbiAgICAgICAgICAgICAgICAgIHNwZWNQb2xpY3kgPT09ICdERUZJTkVfTUFOWScpLFxuICAgICAgICAgICAgICAnUmVhY3RDbGFzczogVW5leHBlY3RlZCBzcGVjIHBvbGljeSAlcyBmb3Iga2V5ICVzICcgK1xuICAgICAgICAgICAgICAgICd3aGVuIG1peGluZyBpbiBjb21wb25lbnQgc3BlY3MuJyxcbiAgICAgICAgICAgICAgc3BlY1BvbGljeSxcbiAgICAgICAgICAgICAgbmFtZVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgLy8gRm9yIG1ldGhvZHMgd2hpY2ggYXJlIGRlZmluZWQgbW9yZSB0aGFuIG9uY2UsIGNhbGwgdGhlIGV4aXN0aW5nXG4gICAgICAgICAgICAvLyBtZXRob2RzIGJlZm9yZSBjYWxsaW5nIHRoZSBuZXcgcHJvcGVydHksIG1lcmdpbmcgaWYgYXBwcm9wcmlhdGUuXG4gICAgICAgICAgICBpZiAoc3BlY1BvbGljeSA9PT0gJ0RFRklORV9NQU5ZX01FUkdFRCcpIHtcbiAgICAgICAgICAgICAgcHJvdG9bbmFtZV0gPSBjcmVhdGVNZXJnZWRSZXN1bHRGdW5jdGlvbihwcm90b1tuYW1lXSwgcHJvcGVydHkpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChzcGVjUG9saWN5ID09PSAnREVGSU5FX01BTlknKSB7XG4gICAgICAgICAgICAgIHByb3RvW25hbWVdID0gY3JlYXRlQ2hhaW5lZEZ1bmN0aW9uKHByb3RvW25hbWVdLCBwcm9wZXJ0eSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHByb3RvW25hbWVdID0gcHJvcGVydHk7XG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgICAvLyBBZGQgdmVyYm9zZSBkaXNwbGF5TmFtZSB0byB0aGUgZnVuY3Rpb24sIHdoaWNoIGhlbHBzIHdoZW4gbG9va2luZ1xuICAgICAgICAgICAgICAvLyBhdCBwcm9maWxpbmcgdG9vbHMuXG4gICAgICAgICAgICAgIGlmICh0eXBlb2YgcHJvcGVydHkgPT09ICdmdW5jdGlvbicgJiYgc3BlYy5kaXNwbGF5TmFtZSkge1xuICAgICAgICAgICAgICAgIHByb3RvW25hbWVdLmRpc3BsYXlOYW1lID0gc3BlYy5kaXNwbGF5TmFtZSArICdfJyArIG5hbWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBtaXhTdGF0aWNTcGVjSW50b0NvbXBvbmVudChDb25zdHJ1Y3Rvciwgc3RhdGljcykge1xuICAgIGlmICghc3RhdGljcykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBmb3IgKHZhciBuYW1lIGluIHN0YXRpY3MpIHtcbiAgICAgIHZhciBwcm9wZXJ0eSA9IHN0YXRpY3NbbmFtZV07XG4gICAgICBpZiAoIXN0YXRpY3MuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHZhciBpc1Jlc2VydmVkID0gbmFtZSBpbiBSRVNFUlZFRF9TUEVDX0tFWVM7XG4gICAgICBfaW52YXJpYW50KFxuICAgICAgICAhaXNSZXNlcnZlZCxcbiAgICAgICAgJ1JlYWN0Q2xhc3M6IFlvdSBhcmUgYXR0ZW1wdGluZyB0byBkZWZpbmUgYSByZXNlcnZlZCAnICtcbiAgICAgICAgICAncHJvcGVydHksIGAlc2AsIHRoYXQgc2hvdWxkblxcJ3QgYmUgb24gdGhlIFwic3RhdGljc1wiIGtleS4gRGVmaW5lIGl0ICcgK1xuICAgICAgICAgICdhcyBhbiBpbnN0YW5jZSBwcm9wZXJ0eSBpbnN0ZWFkOyBpdCB3aWxsIHN0aWxsIGJlIGFjY2Vzc2libGUgb24gdGhlICcgK1xuICAgICAgICAgICdjb25zdHJ1Y3Rvci4nLFxuICAgICAgICBuYW1lXG4gICAgICApO1xuXG4gICAgICB2YXIgaXNJbmhlcml0ZWQgPSBuYW1lIGluIENvbnN0cnVjdG9yO1xuICAgICAgX2ludmFyaWFudChcbiAgICAgICAgIWlzSW5oZXJpdGVkLFxuICAgICAgICAnUmVhY3RDbGFzczogWW91IGFyZSBhdHRlbXB0aW5nIHRvIGRlZmluZSAnICtcbiAgICAgICAgICAnYCVzYCBvbiB5b3VyIGNvbXBvbmVudCBtb3JlIHRoYW4gb25jZS4gVGhpcyBjb25mbGljdCBtYXkgYmUgJyArXG4gICAgICAgICAgJ2R1ZSB0byBhIG1peGluLicsXG4gICAgICAgIG5hbWVcbiAgICAgICk7XG4gICAgICBDb25zdHJ1Y3RvcltuYW1lXSA9IHByb3BlcnR5O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBNZXJnZSB0d28gb2JqZWN0cywgYnV0IHRocm93IGlmIGJvdGggY29udGFpbiB0aGUgc2FtZSBrZXkuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvbmUgVGhlIGZpcnN0IG9iamVjdCwgd2hpY2ggaXMgbXV0YXRlZC5cbiAgICogQHBhcmFtIHtvYmplY3R9IHR3byBUaGUgc2Vjb25kIG9iamVjdFxuICAgKiBAcmV0dXJuIHtvYmplY3R9IG9uZSBhZnRlciBpdCBoYXMgYmVlbiBtdXRhdGVkIHRvIGNvbnRhaW4gZXZlcnl0aGluZyBpbiB0d28uXG4gICAqL1xuICBmdW5jdGlvbiBtZXJnZUludG9XaXRoTm9EdXBsaWNhdGVLZXlzKG9uZSwgdHdvKSB7XG4gICAgX2ludmFyaWFudChcbiAgICAgIG9uZSAmJiB0d28gJiYgdHlwZW9mIG9uZSA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIHR3byA9PT0gJ29iamVjdCcsXG4gICAgICAnbWVyZ2VJbnRvV2l0aE5vRHVwbGljYXRlS2V5cygpOiBDYW5ub3QgbWVyZ2Ugbm9uLW9iamVjdHMuJ1xuICAgICk7XG5cbiAgICBmb3IgKHZhciBrZXkgaW4gdHdvKSB7XG4gICAgICBpZiAodHdvLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgX2ludmFyaWFudChcbiAgICAgICAgICBvbmVba2V5XSA9PT0gdW5kZWZpbmVkLFxuICAgICAgICAgICdtZXJnZUludG9XaXRoTm9EdXBsaWNhdGVLZXlzKCk6ICcgK1xuICAgICAgICAgICAgJ1RyaWVkIHRvIG1lcmdlIHR3byBvYmplY3RzIHdpdGggdGhlIHNhbWUga2V5OiBgJXNgLiBUaGlzIGNvbmZsaWN0ICcgK1xuICAgICAgICAgICAgJ21heSBiZSBkdWUgdG8gYSBtaXhpbjsgaW4gcGFydGljdWxhciwgdGhpcyBtYXkgYmUgY2F1c2VkIGJ5IHR3byAnICtcbiAgICAgICAgICAgICdnZXRJbml0aWFsU3RhdGUoKSBvciBnZXREZWZhdWx0UHJvcHMoKSBtZXRob2RzIHJldHVybmluZyBvYmplY3RzICcgK1xuICAgICAgICAgICAgJ3dpdGggY2xhc2hpbmcga2V5cy4nLFxuICAgICAgICAgIGtleVxuICAgICAgICApO1xuICAgICAgICBvbmVba2V5XSA9IHR3b1trZXldO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb25lO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGludm9rZXMgdHdvIGZ1bmN0aW9ucyBhbmQgbWVyZ2VzIHRoZWlyIHJldHVybiB2YWx1ZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb259IG9uZSBGdW5jdGlvbiB0byBpbnZva2UgZmlyc3QuXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb259IHR3byBGdW5jdGlvbiB0byBpbnZva2Ugc2Vjb25kLlxuICAgKiBAcmV0dXJuIHtmdW5jdGlvbn0gRnVuY3Rpb24gdGhhdCBpbnZva2VzIHRoZSB0d28gYXJndW1lbnQgZnVuY3Rpb25zLlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZnVuY3Rpb24gY3JlYXRlTWVyZ2VkUmVzdWx0RnVuY3Rpb24ob25lLCB0d28pIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gbWVyZ2VkUmVzdWx0KCkge1xuICAgICAgdmFyIGEgPSBvbmUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgIHZhciBiID0gdHdvLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICBpZiAoYSA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBiO1xuICAgICAgfSBlbHNlIGlmIChiID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIGE7XG4gICAgICB9XG4gICAgICB2YXIgYyA9IHt9O1xuICAgICAgbWVyZ2VJbnRvV2l0aE5vRHVwbGljYXRlS2V5cyhjLCBhKTtcbiAgICAgIG1lcmdlSW50b1dpdGhOb0R1cGxpY2F0ZUtleXMoYywgYik7XG4gICAgICByZXR1cm4gYztcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IGludm9rZXMgdHdvIGZ1bmN0aW9ucyBhbmQgaWdub3JlcyB0aGVpciByZXR1cm4gdmFsZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb259IG9uZSBGdW5jdGlvbiB0byBpbnZva2UgZmlyc3QuXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb259IHR3byBGdW5jdGlvbiB0byBpbnZva2Ugc2Vjb25kLlxuICAgKiBAcmV0dXJuIHtmdW5jdGlvbn0gRnVuY3Rpb24gdGhhdCBpbnZva2VzIHRoZSB0d28gYXJndW1lbnQgZnVuY3Rpb25zLlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZnVuY3Rpb24gY3JlYXRlQ2hhaW5lZEZ1bmN0aW9uKG9uZSwgdHdvKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIGNoYWluZWRGdW5jdGlvbigpIHtcbiAgICAgIG9uZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgdHdvLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCaW5kcyBhIG1ldGhvZCB0byB0aGUgY29tcG9uZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gY29tcG9uZW50IENvbXBvbmVudCB3aG9zZSBtZXRob2QgaXMgZ29pbmcgdG8gYmUgYm91bmQuXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb259IG1ldGhvZCBNZXRob2QgdG8gYmUgYm91bmQuXG4gICAqIEByZXR1cm4ge2Z1bmN0aW9ufSBUaGUgYm91bmQgbWV0aG9kLlxuICAgKi9cbiAgZnVuY3Rpb24gYmluZEF1dG9CaW5kTWV0aG9kKGNvbXBvbmVudCwgbWV0aG9kKSB7XG4gICAgdmFyIGJvdW5kTWV0aG9kID0gbWV0aG9kLmJpbmQoY29tcG9uZW50KTtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgYm91bmRNZXRob2QuX19yZWFjdEJvdW5kQ29udGV4dCA9IGNvbXBvbmVudDtcbiAgICAgIGJvdW5kTWV0aG9kLl9fcmVhY3RCb3VuZE1ldGhvZCA9IG1ldGhvZDtcbiAgICAgIGJvdW5kTWV0aG9kLl9fcmVhY3RCb3VuZEFyZ3VtZW50cyA9IG51bGw7XG4gICAgICB2YXIgY29tcG9uZW50TmFtZSA9IGNvbXBvbmVudC5jb25zdHJ1Y3Rvci5kaXNwbGF5TmFtZTtcbiAgICAgIHZhciBfYmluZCA9IGJvdW5kTWV0aG9kLmJpbmQ7XG4gICAgICBib3VuZE1ldGhvZC5iaW5kID0gZnVuY3Rpb24obmV3VGhpcykge1xuICAgICAgICBmb3IgKFxuICAgICAgICAgIHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCxcbiAgICAgICAgICAgIGFyZ3MgPSBBcnJheShfbGVuID4gMSA/IF9sZW4gLSAxIDogMCksXG4gICAgICAgICAgICBfa2V5ID0gMTtcbiAgICAgICAgICBfa2V5IDwgX2xlbjtcbiAgICAgICAgICBfa2V5KytcbiAgICAgICAgKSB7XG4gICAgICAgICAgYXJnc1tfa2V5IC0gMV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBVc2VyIGlzIHRyeWluZyB0byBiaW5kKCkgYW4gYXV0b2JvdW5kIG1ldGhvZDsgd2UgZWZmZWN0aXZlbHkgd2lsbFxuICAgICAgICAvLyBpZ25vcmUgdGhlIHZhbHVlIG9mIFwidGhpc1wiIHRoYXQgdGhlIHVzZXIgaXMgdHJ5aW5nIHRvIHVzZSwgc29cbiAgICAgICAgLy8gbGV0J3Mgd2Fybi5cbiAgICAgICAgaWYgKG5ld1RoaXMgIT09IGNvbXBvbmVudCAmJiBuZXdUaGlzICE9PSBudWxsKSB7XG4gICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICAgIHdhcm5pbmcoXG4gICAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgICAnYmluZCgpOiBSZWFjdCBjb21wb25lbnQgbWV0aG9kcyBtYXkgb25seSBiZSBib3VuZCB0byB0aGUgJyArXG4gICAgICAgICAgICAgICAgJ2NvbXBvbmVudCBpbnN0YW5jZS4gU2VlICVzJyxcbiAgICAgICAgICAgICAgY29tcG9uZW50TmFtZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoIWFyZ3MubGVuZ3RoKSB7XG4gICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICAgIHdhcm5pbmcoXG4gICAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgICAnYmluZCgpOiBZb3UgYXJlIGJpbmRpbmcgYSBjb21wb25lbnQgbWV0aG9kIHRvIHRoZSBjb21wb25lbnQuICcgK1xuICAgICAgICAgICAgICAgICdSZWFjdCBkb2VzIHRoaXMgZm9yIHlvdSBhdXRvbWF0aWNhbGx5IGluIGEgaGlnaC1wZXJmb3JtYW5jZSAnICtcbiAgICAgICAgICAgICAgICAnd2F5LCBzbyB5b3UgY2FuIHNhZmVseSByZW1vdmUgdGhpcyBjYWxsLiBTZWUgJXMnLFxuICAgICAgICAgICAgICBjb21wb25lbnROYW1lXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gYm91bmRNZXRob2Q7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHJlYm91bmRNZXRob2QgPSBfYmluZC5hcHBseShib3VuZE1ldGhvZCwgYXJndW1lbnRzKTtcbiAgICAgICAgcmVib3VuZE1ldGhvZC5fX3JlYWN0Qm91bmRDb250ZXh0ID0gY29tcG9uZW50O1xuICAgICAgICByZWJvdW5kTWV0aG9kLl9fcmVhY3RCb3VuZE1ldGhvZCA9IG1ldGhvZDtcbiAgICAgICAgcmVib3VuZE1ldGhvZC5fX3JlYWN0Qm91bmRBcmd1bWVudHMgPSBhcmdzO1xuICAgICAgICByZXR1cm4gcmVib3VuZE1ldGhvZDtcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBib3VuZE1ldGhvZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBCaW5kcyBhbGwgYXV0by1ib3VuZCBtZXRob2RzIGluIGEgY29tcG9uZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gY29tcG9uZW50IENvbXBvbmVudCB3aG9zZSBtZXRob2QgaXMgZ29pbmcgdG8gYmUgYm91bmQuXG4gICAqL1xuICBmdW5jdGlvbiBiaW5kQXV0b0JpbmRNZXRob2RzKGNvbXBvbmVudCkge1xuICAgIHZhciBwYWlycyA9IGNvbXBvbmVudC5fX3JlYWN0QXV0b0JpbmRQYWlycztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhaXJzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgICB2YXIgYXV0b0JpbmRLZXkgPSBwYWlyc1tpXTtcbiAgICAgIHZhciBtZXRob2QgPSBwYWlyc1tpICsgMV07XG4gICAgICBjb21wb25lbnRbYXV0b0JpbmRLZXldID0gYmluZEF1dG9CaW5kTWV0aG9kKGNvbXBvbmVudCwgbWV0aG9kKTtcbiAgICB9XG4gIH1cblxuICB2YXIgSXNNb3VudGVkUHJlTWl4aW4gPSB7XG4gICAgY29tcG9uZW50RGlkTW91bnQ6IGZ1bmN0aW9uKCkge1xuICAgICAgdGhpcy5fX2lzTW91bnRlZCA9IHRydWU7XG4gICAgfVxuICB9O1xuXG4gIHZhciBJc01vdW50ZWRQb3N0TWl4aW4gPSB7XG4gICAgY29tcG9uZW50V2lsbFVubW91bnQ6IGZ1bmN0aW9uKCkge1xuICAgICAgdGhpcy5fX2lzTW91bnRlZCA9IGZhbHNlO1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogQWRkIG1vcmUgdG8gdGhlIFJlYWN0Q2xhc3MgYmFzZSBjbGFzcy4gVGhlc2UgYXJlIGFsbCBsZWdhY3kgZmVhdHVyZXMgYW5kXG4gICAqIHRoZXJlZm9yZSBub3QgYWxyZWFkeSBwYXJ0IG9mIHRoZSBtb2Rlcm4gUmVhY3RDb21wb25lbnQuXG4gICAqL1xuICB2YXIgUmVhY3RDbGFzc01peGluID0ge1xuICAgIC8qKlxuICAgICAqIFRPRE86IFRoaXMgd2lsbCBiZSBkZXByZWNhdGVkIGJlY2F1c2Ugc3RhdGUgc2hvdWxkIGFsd2F5cyBrZWVwIGEgY29uc2lzdGVudFxuICAgICAqIHR5cGUgc2lnbmF0dXJlIGFuZCB0aGUgb25seSB1c2UgY2FzZSBmb3IgdGhpcywgaXMgdG8gYXZvaWQgdGhhdC5cbiAgICAgKi9cbiAgICByZXBsYWNlU3RhdGU6IGZ1bmN0aW9uKG5ld1N0YXRlLCBjYWxsYmFjaykge1xuICAgICAgdGhpcy51cGRhdGVyLmVucXVldWVSZXBsYWNlU3RhdGUodGhpcywgbmV3U3RhdGUsIGNhbGxiYWNrKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIHdoZXRoZXIgb3Igbm90IHRoaXMgY29tcG9zaXRlIGNvbXBvbmVudCBpcyBtb3VudGVkLlxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgbW91bnRlZCwgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgKiBAZmluYWxcbiAgICAgKi9cbiAgICBpc01vdW50ZWQ6IGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgd2FybmluZyhcbiAgICAgICAgICB0aGlzLl9fZGlkV2FybklzTW91bnRlZCxcbiAgICAgICAgICAnJXM6IGlzTW91bnRlZCBpcyBkZXByZWNhdGVkLiBJbnN0ZWFkLCBtYWtlIHN1cmUgdG8gY2xlYW4gdXAgJyArXG4gICAgICAgICAgICAnc3Vic2NyaXB0aW9ucyBhbmQgcGVuZGluZyByZXF1ZXN0cyBpbiBjb21wb25lbnRXaWxsVW5tb3VudCB0byAnICtcbiAgICAgICAgICAgICdwcmV2ZW50IG1lbW9yeSBsZWFrcy4nLFxuICAgICAgICAgICh0aGlzLmNvbnN0cnVjdG9yICYmIHRoaXMuY29uc3RydWN0b3IuZGlzcGxheU5hbWUpIHx8XG4gICAgICAgICAgICB0aGlzLm5hbWUgfHxcbiAgICAgICAgICAgICdDb21wb25lbnQnXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuX19kaWRXYXJuSXNNb3VudGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiAhIXRoaXMuX19pc01vdW50ZWQ7XG4gICAgfVxuICB9O1xuXG4gIHZhciBSZWFjdENsYXNzQ29tcG9uZW50ID0gZnVuY3Rpb24oKSB7fTtcbiAgX2Fzc2lnbihcbiAgICBSZWFjdENsYXNzQ29tcG9uZW50LnByb3RvdHlwZSxcbiAgICBSZWFjdENvbXBvbmVudC5wcm90b3R5cGUsXG4gICAgUmVhY3RDbGFzc01peGluXG4gICk7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBjb21wb3NpdGUgY29tcG9uZW50IGNsYXNzIGdpdmVuIGEgY2xhc3Mgc3BlY2lmaWNhdGlvbi5cbiAgICogU2VlIGh0dHBzOi8vZmFjZWJvb2suZ2l0aHViLmlvL3JlYWN0L2RvY3MvdG9wLWxldmVsLWFwaS5odG1sI3JlYWN0LmNyZWF0ZWNsYXNzXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBzcGVjIENsYXNzIHNwZWNpZmljYXRpb24gKHdoaWNoIG11c3QgZGVmaW5lIGByZW5kZXJgKS5cbiAgICogQHJldHVybiB7ZnVuY3Rpb259IENvbXBvbmVudCBjb25zdHJ1Y3RvciBmdW5jdGlvbi5cbiAgICogQHB1YmxpY1xuICAgKi9cbiAgZnVuY3Rpb24gY3JlYXRlQ2xhc3Moc3BlYykge1xuICAgIC8vIFRvIGtlZXAgb3VyIHdhcm5pbmdzIG1vcmUgdW5kZXJzdGFuZGFibGUsIHdlJ2xsIHVzZSBhIGxpdHRsZSBoYWNrIGhlcmUgdG9cbiAgICAvLyBlbnN1cmUgdGhhdCBDb25zdHJ1Y3Rvci5uYW1lICE9PSAnQ29uc3RydWN0b3InLiBUaGlzIG1ha2VzIHN1cmUgd2UgZG9uJ3RcbiAgICAvLyB1bm5lY2Vzc2FyaWx5IGlkZW50aWZ5IGEgY2xhc3Mgd2l0aG91dCBkaXNwbGF5TmFtZSBhcyAnQ29uc3RydWN0b3InLlxuICAgIHZhciBDb25zdHJ1Y3RvciA9IGlkZW50aXR5KGZ1bmN0aW9uKHByb3BzLCBjb250ZXh0LCB1cGRhdGVyKSB7XG4gICAgICAvLyBUaGlzIGNvbnN0cnVjdG9yIGdldHMgb3ZlcnJpZGRlbiBieSBtb2Nrcy4gVGhlIGFyZ3VtZW50IGlzIHVzZWRcbiAgICAgIC8vIGJ5IG1vY2tzIHRvIGFzc2VydCBvbiB3aGF0IGdldHMgbW91bnRlZC5cblxuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgd2FybmluZyhcbiAgICAgICAgICB0aGlzIGluc3RhbmNlb2YgQ29uc3RydWN0b3IsXG4gICAgICAgICAgJ1NvbWV0aGluZyBpcyBjYWxsaW5nIGEgUmVhY3QgY29tcG9uZW50IGRpcmVjdGx5LiBVc2UgYSBmYWN0b3J5IG9yICcgK1xuICAgICAgICAgICAgJ0pTWCBpbnN0ZWFkLiBTZWU6IGh0dHBzOi8vZmIubWUvcmVhY3QtbGVnYWN5ZmFjdG9yeSdcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgLy8gV2lyZSB1cCBhdXRvLWJpbmRpbmdcbiAgICAgIGlmICh0aGlzLl9fcmVhY3RBdXRvQmluZFBhaXJzLmxlbmd0aCkge1xuICAgICAgICBiaW5kQXV0b0JpbmRNZXRob2RzKHRoaXMpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnByb3BzID0gcHJvcHM7XG4gICAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuICAgICAgdGhpcy5yZWZzID0gZW1wdHlPYmplY3Q7XG4gICAgICB0aGlzLnVwZGF0ZXIgPSB1cGRhdGVyIHx8IFJlYWN0Tm9vcFVwZGF0ZVF1ZXVlO1xuXG4gICAgICB0aGlzLnN0YXRlID0gbnVsbDtcblxuICAgICAgLy8gUmVhY3RDbGFzc2VzIGRvZXNuJ3QgaGF2ZSBjb25zdHJ1Y3RvcnMuIEluc3RlYWQsIHRoZXkgdXNlIHRoZVxuICAgICAgLy8gZ2V0SW5pdGlhbFN0YXRlIGFuZCBjb21wb25lbnRXaWxsTW91bnQgbWV0aG9kcyBmb3IgaW5pdGlhbGl6YXRpb24uXG5cbiAgICAgIHZhciBpbml0aWFsU3RhdGUgPSB0aGlzLmdldEluaXRpYWxTdGF0ZSA/IHRoaXMuZ2V0SW5pdGlhbFN0YXRlKCkgOiBudWxsO1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgLy8gV2UgYWxsb3cgYXV0by1tb2NrcyB0byBwcm9jZWVkIGFzIGlmIHRoZXkncmUgcmV0dXJuaW5nIG51bGwuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBpbml0aWFsU3RhdGUgPT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgIHRoaXMuZ2V0SW5pdGlhbFN0YXRlLl9pc01vY2tGdW5jdGlvblxuICAgICAgICApIHtcbiAgICAgICAgICAvLyBUaGlzIGlzIHByb2JhYmx5IGJhZCBwcmFjdGljZS4gQ29uc2lkZXIgd2FybmluZyBoZXJlIGFuZFxuICAgICAgICAgIC8vIGRlcHJlY2F0aW5nIHRoaXMgY29udmVuaWVuY2UuXG4gICAgICAgICAgaW5pdGlhbFN0YXRlID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgX2ludmFyaWFudChcbiAgICAgICAgdHlwZW9mIGluaXRpYWxTdGF0ZSA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkoaW5pdGlhbFN0YXRlKSxcbiAgICAgICAgJyVzLmdldEluaXRpYWxTdGF0ZSgpOiBtdXN0IHJldHVybiBhbiBvYmplY3Qgb3IgbnVsbCcsXG4gICAgICAgIENvbnN0cnVjdG9yLmRpc3BsYXlOYW1lIHx8ICdSZWFjdENvbXBvc2l0ZUNvbXBvbmVudCdcbiAgICAgICk7XG5cbiAgICAgIHRoaXMuc3RhdGUgPSBpbml0aWFsU3RhdGU7XG4gICAgfSk7XG4gICAgQ29uc3RydWN0b3IucHJvdG90eXBlID0gbmV3IFJlYWN0Q2xhc3NDb21wb25lbnQoKTtcbiAgICBDb25zdHJ1Y3Rvci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDb25zdHJ1Y3RvcjtcbiAgICBDb25zdHJ1Y3Rvci5wcm90b3R5cGUuX19yZWFjdEF1dG9CaW5kUGFpcnMgPSBbXTtcblxuICAgIGluamVjdGVkTWl4aW5zLmZvckVhY2gobWl4U3BlY0ludG9Db21wb25lbnQuYmluZChudWxsLCBDb25zdHJ1Y3RvcikpO1xuXG4gICAgbWl4U3BlY0ludG9Db21wb25lbnQoQ29uc3RydWN0b3IsIElzTW91bnRlZFByZU1peGluKTtcbiAgICBtaXhTcGVjSW50b0NvbXBvbmVudChDb25zdHJ1Y3Rvciwgc3BlYyk7XG4gICAgbWl4U3BlY0ludG9Db21wb25lbnQoQ29uc3RydWN0b3IsIElzTW91bnRlZFBvc3RNaXhpbik7XG5cbiAgICAvLyBJbml0aWFsaXplIHRoZSBkZWZhdWx0UHJvcHMgcHJvcGVydHkgYWZ0ZXIgYWxsIG1peGlucyBoYXZlIGJlZW4gbWVyZ2VkLlxuICAgIGlmIChDb25zdHJ1Y3Rvci5nZXREZWZhdWx0UHJvcHMpIHtcbiAgICAgIENvbnN0cnVjdG9yLmRlZmF1bHRQcm9wcyA9IENvbnN0cnVjdG9yLmdldERlZmF1bHRQcm9wcygpO1xuICAgIH1cblxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAvLyBUaGlzIGlzIGEgdGFnIHRvIGluZGljYXRlIHRoYXQgdGhlIHVzZSBvZiB0aGVzZSBtZXRob2QgbmFtZXMgaXMgb2ssXG4gICAgICAvLyBzaW5jZSBpdCdzIHVzZWQgd2l0aCBjcmVhdGVDbGFzcy4gSWYgaXQncyBub3QsIHRoZW4gaXQncyBsaWtlbHkgYVxuICAgICAgLy8gbWlzdGFrZSBzbyB3ZSdsbCB3YXJuIHlvdSB0byB1c2UgdGhlIHN0YXRpYyBwcm9wZXJ0eSwgcHJvcGVydHlcbiAgICAgIC8vIGluaXRpYWxpemVyIG9yIGNvbnN0cnVjdG9yIHJlc3BlY3RpdmVseS5cbiAgICAgIGlmIChDb25zdHJ1Y3Rvci5nZXREZWZhdWx0UHJvcHMpIHtcbiAgICAgICAgQ29uc3RydWN0b3IuZ2V0RGVmYXVsdFByb3BzLmlzUmVhY3RDbGFzc0FwcHJvdmVkID0ge307XG4gICAgICB9XG4gICAgICBpZiAoQ29uc3RydWN0b3IucHJvdG90eXBlLmdldEluaXRpYWxTdGF0ZSkge1xuICAgICAgICBDb25zdHJ1Y3Rvci5wcm90b3R5cGUuZ2V0SW5pdGlhbFN0YXRlLmlzUmVhY3RDbGFzc0FwcHJvdmVkID0ge307XG4gICAgICB9XG4gICAgfVxuXG4gICAgX2ludmFyaWFudChcbiAgICAgIENvbnN0cnVjdG9yLnByb3RvdHlwZS5yZW5kZXIsXG4gICAgICAnY3JlYXRlQ2xhc3MoLi4uKTogQ2xhc3Mgc3BlY2lmaWNhdGlvbiBtdXN0IGltcGxlbWVudCBhIGByZW5kZXJgIG1ldGhvZC4nXG4gICAgKTtcblxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICB3YXJuaW5nKFxuICAgICAgICAhQ29uc3RydWN0b3IucHJvdG90eXBlLmNvbXBvbmVudFNob3VsZFVwZGF0ZSxcbiAgICAgICAgJyVzIGhhcyBhIG1ldGhvZCBjYWxsZWQgJyArXG4gICAgICAgICAgJ2NvbXBvbmVudFNob3VsZFVwZGF0ZSgpLiBEaWQgeW91IG1lYW4gc2hvdWxkQ29tcG9uZW50VXBkYXRlKCk/ICcgK1xuICAgICAgICAgICdUaGUgbmFtZSBpcyBwaHJhc2VkIGFzIGEgcXVlc3Rpb24gYmVjYXVzZSB0aGUgZnVuY3Rpb24gaXMgJyArXG4gICAgICAgICAgJ2V4cGVjdGVkIHRvIHJldHVybiBhIHZhbHVlLicsXG4gICAgICAgIHNwZWMuZGlzcGxheU5hbWUgfHwgJ0EgY29tcG9uZW50J1xuICAgICAgKTtcbiAgICAgIHdhcm5pbmcoXG4gICAgICAgICFDb25zdHJ1Y3Rvci5wcm90b3R5cGUuY29tcG9uZW50V2lsbFJlY2lldmVQcm9wcyxcbiAgICAgICAgJyVzIGhhcyBhIG1ldGhvZCBjYWxsZWQgJyArXG4gICAgICAgICAgJ2NvbXBvbmVudFdpbGxSZWNpZXZlUHJvcHMoKS4gRGlkIHlvdSBtZWFuIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMoKT8nLFxuICAgICAgICBzcGVjLmRpc3BsYXlOYW1lIHx8ICdBIGNvbXBvbmVudCdcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gUmVkdWNlIHRpbWUgc3BlbnQgZG9pbmcgbG9va3VwcyBieSBzZXR0aW5nIHRoZXNlIG9uIHRoZSBwcm90b3R5cGUuXG4gICAgZm9yICh2YXIgbWV0aG9kTmFtZSBpbiBSZWFjdENsYXNzSW50ZXJmYWNlKSB7XG4gICAgICBpZiAoIUNvbnN0cnVjdG9yLnByb3RvdHlwZVttZXRob2ROYW1lXSkge1xuICAgICAgICBDb25zdHJ1Y3Rvci5wcm90b3R5cGVbbWV0aG9kTmFtZV0gPSBudWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBDb25zdHJ1Y3RvcjtcbiAgfVxuXG4gIHJldHVybiBjcmVhdGVDbGFzcztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9jcmVhdGUtcmVhY3QtY2xhc3MvZmFjdG9yeS5qcyIsIlwidXNlIHN0cmljdFwiO1xuXG4vKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHR5cGVjaGVja3NcbiAqL1xuXG52YXIgX2h5cGhlblBhdHRlcm4gPSAvLSguKS9nO1xuXG4vKipcbiAqIENhbWVsY2FzZXMgYSBoeXBoZW5hdGVkIHN0cmluZywgZm9yIGV4YW1wbGU6XG4gKlxuICogICA+IGNhbWVsaXplKCdiYWNrZ3JvdW5kLWNvbG9yJylcbiAqICAgPCBcImJhY2tncm91bmRDb2xvclwiXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZ1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBjYW1lbGl6ZShzdHJpbmcpIHtcbiAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKF9oeXBoZW5QYXR0ZXJuLCBmdW5jdGlvbiAoXywgY2hhcmFjdGVyKSB7XG4gICAgcmV0dXJuIGNoYXJhY3Rlci50b1VwcGVyQ2FzZSgpO1xuICB9KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjYW1lbGl6ZTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L2ZianMvbGliL2NhbWVsaXplLmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEB0eXBlY2hlY2tzXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgY2FtZWxpemUgPSByZXF1aXJlKCcuL2NhbWVsaXplJyk7XG5cbnZhciBtc1BhdHRlcm4gPSAvXi1tcy0vO1xuXG4vKipcbiAqIENhbWVsY2FzZXMgYSBoeXBoZW5hdGVkIENTUyBwcm9wZXJ0eSBuYW1lLCBmb3IgZXhhbXBsZTpcbiAqXG4gKiAgID4gY2FtZWxpemVTdHlsZU5hbWUoJ2JhY2tncm91bmQtY29sb3InKVxuICogICA8IFwiYmFja2dyb3VuZENvbG9yXCJcbiAqICAgPiBjYW1lbGl6ZVN0eWxlTmFtZSgnLW1vei10cmFuc2l0aW9uJylcbiAqICAgPCBcIk1velRyYW5zaXRpb25cIlxuICogICA+IGNhbWVsaXplU3R5bGVOYW1lKCctbXMtdHJhbnNpdGlvbicpXG4gKiAgIDwgXCJtc1RyYW5zaXRpb25cIlxuICpcbiAqIEFzIEFuZGkgU21pdGggc3VnZ2VzdHNcbiAqIChodHRwOi8vd3d3LmFuZGlzbWl0aC5jb20vYmxvZy8yMDEyLzAyL21vZGVybml6ci1wcmVmaXhlZC8pLCBhbiBgLW1zYCBwcmVmaXhcbiAqIGlzIGNvbnZlcnRlZCB0byBsb3dlcmNhc2UgYG1zYC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGNhbWVsaXplU3R5bGVOYW1lKHN0cmluZykge1xuICByZXR1cm4gY2FtZWxpemUoc3RyaW5nLnJlcGxhY2UobXNQYXR0ZXJuLCAnbXMtJykpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNhbWVsaXplU3R5bGVOYW1lO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vZmJqcy9saWIvY2FtZWxpemVTdHlsZU5hbWUuanMiLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBcbiAqL1xuXG52YXIgaXNUZXh0Tm9kZSA9IHJlcXVpcmUoJy4vaXNUZXh0Tm9kZScpO1xuXG4vKmVzbGludC1kaXNhYmxlIG5vLWJpdHdpc2UgKi9cblxuLyoqXG4gKiBDaGVja3MgaWYgYSBnaXZlbiBET00gbm9kZSBjb250YWlucyBvciBpcyBhbm90aGVyIERPTSBub2RlLlxuICovXG5mdW5jdGlvbiBjb250YWluc05vZGUob3V0ZXJOb2RlLCBpbm5lck5vZGUpIHtcbiAgaWYgKCFvdXRlck5vZGUgfHwgIWlubmVyTm9kZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSBlbHNlIGlmIChvdXRlck5vZGUgPT09IGlubmVyTm9kZSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9IGVsc2UgaWYgKGlzVGV4dE5vZGUob3V0ZXJOb2RlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSBlbHNlIGlmIChpc1RleHROb2RlKGlubmVyTm9kZSkpIHtcbiAgICByZXR1cm4gY29udGFpbnNOb2RlKG91dGVyTm9kZSwgaW5uZXJOb2RlLnBhcmVudE5vZGUpO1xuICB9IGVsc2UgaWYgKCdjb250YWlucycgaW4gb3V0ZXJOb2RlKSB7XG4gICAgcmV0dXJuIG91dGVyTm9kZS5jb250YWlucyhpbm5lck5vZGUpO1xuICB9IGVsc2UgaWYgKG91dGVyTm9kZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbikge1xuICAgIHJldHVybiAhIShvdXRlck5vZGUuY29tcGFyZURvY3VtZW50UG9zaXRpb24oaW5uZXJOb2RlKSAmIDE2KTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjb250YWluc05vZGU7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9mYmpzL2xpYi9jb250YWluc05vZGUuanMiLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAdHlwZWNoZWNrc1xuICovXG5cbnZhciBpbnZhcmlhbnQgPSByZXF1aXJlKCcuL2ludmFyaWFudCcpO1xuXG4vKipcbiAqIENvbnZlcnQgYXJyYXktbGlrZSBvYmplY3RzIHRvIGFycmF5cy5cbiAqXG4gKiBUaGlzIEFQSSBhc3N1bWVzIHRoZSBjYWxsZXIga25vd3MgdGhlIGNvbnRlbnRzIG9mIHRoZSBkYXRhIHR5cGUuIEZvciBsZXNzXG4gKiB3ZWxsIGRlZmluZWQgaW5wdXRzIHVzZSBjcmVhdGVBcnJheUZyb21NaXhlZC5cbiAqXG4gKiBAcGFyYW0ge29iamVjdHxmdW5jdGlvbnxmaWxlbGlzdH0gb2JqXG4gKiBAcmV0dXJuIHthcnJheX1cbiAqL1xuZnVuY3Rpb24gdG9BcnJheShvYmopIHtcbiAgdmFyIGxlbmd0aCA9IG9iai5sZW5ndGg7XG5cbiAgLy8gU29tZSBicm93c2VycyBidWlsdGluIG9iamVjdHMgY2FuIHJlcG9ydCB0eXBlb2YgJ2Z1bmN0aW9uJyAoZS5nLiBOb2RlTGlzdFxuICAvLyBpbiBvbGQgdmVyc2lvbnMgb2YgU2FmYXJpKS5cbiAgISghQXJyYXkuaXNBcnJheShvYmopICYmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyB8fCB0eXBlb2Ygb2JqID09PSAnZnVuY3Rpb24nKSkgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAndG9BcnJheTogQXJyYXktbGlrZSBvYmplY3QgZXhwZWN0ZWQnKSA6IGludmFyaWFudChmYWxzZSkgOiB2b2lkIDA7XG5cbiAgISh0eXBlb2YgbGVuZ3RoID09PSAnbnVtYmVyJykgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAndG9BcnJheTogT2JqZWN0IG5lZWRzIGEgbGVuZ3RoIHByb3BlcnR5JykgOiBpbnZhcmlhbnQoZmFsc2UpIDogdm9pZCAwO1xuXG4gICEobGVuZ3RoID09PSAwIHx8IGxlbmd0aCAtIDEgaW4gb2JqKSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICd0b0FycmF5OiBPYmplY3Qgc2hvdWxkIGhhdmUga2V5cyBmb3IgaW5kaWNlcycpIDogaW52YXJpYW50KGZhbHNlKSA6IHZvaWQgMDtcblxuICAhKHR5cGVvZiBvYmouY2FsbGVlICE9PSAnZnVuY3Rpb24nKSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICd0b0FycmF5OiBPYmplY3QgY2FuXFwndCBiZSBgYXJndW1lbnRzYC4gVXNlIHJlc3QgcGFyYW1zICcgKyAnKGZ1bmN0aW9uKC4uLmFyZ3MpIHt9KSBvciBBcnJheS5mcm9tKCkgaW5zdGVhZC4nKSA6IGludmFyaWFudChmYWxzZSkgOiB2b2lkIDA7XG5cbiAgLy8gT2xkIElFIGRvZXNuJ3QgZ2l2ZSBjb2xsZWN0aW9ucyBhY2Nlc3MgdG8gaGFzT3duUHJvcGVydHkuIEFzc3VtZSBpbnB1dHNcbiAgLy8gd2l0aG91dCBtZXRob2Qgd2lsbCB0aHJvdyBkdXJpbmcgdGhlIHNsaWNlIGNhbGwgYW5kIHNraXAgc3RyYWlnaHQgdG8gdGhlXG4gIC8vIGZhbGxiYWNrLlxuICBpZiAob2JqLmhhc093blByb3BlcnR5KSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChvYmopO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIElFIDwgOSBkb2VzIG5vdCBzdXBwb3J0IEFycmF5I3NsaWNlIG9uIGNvbGxlY3Rpb25zIG9iamVjdHNcbiAgICB9XG4gIH1cblxuICAvLyBGYWxsIGJhY2sgdG8gY29weWluZyBrZXkgYnkga2V5LiBUaGlzIGFzc3VtZXMgYWxsIGtleXMgaGF2ZSBhIHZhbHVlLFxuICAvLyBzbyB3aWxsIG5vdCBwcmVzZXJ2ZSBzcGFyc2VseSBwb3B1bGF0ZWQgaW5wdXRzLlxuICB2YXIgcmV0ID0gQXJyYXkobGVuZ3RoKTtcbiAgZm9yICh2YXIgaWkgPSAwOyBpaSA8IGxlbmd0aDsgaWkrKykge1xuICAgIHJldFtpaV0gPSBvYmpbaWldO1xuICB9XG4gIHJldHVybiByZXQ7XG59XG5cbi8qKlxuICogUGVyZm9ybSBhIGhldXJpc3RpYyB0ZXN0IHRvIGRldGVybWluZSBpZiBhbiBvYmplY3QgaXMgXCJhcnJheS1saWtlXCIuXG4gKlxuICogICBBIG1vbmsgYXNrZWQgSm9zaHUsIGEgWmVuIG1hc3RlciwgXCJIYXMgYSBkb2cgQnVkZGhhIG5hdHVyZT9cIlxuICogICBKb3NodSByZXBsaWVkOiBcIk11LlwiXG4gKlxuICogVGhpcyBmdW5jdGlvbiBkZXRlcm1pbmVzIGlmIGl0cyBhcmd1bWVudCBoYXMgXCJhcnJheSBuYXR1cmVcIjogaXQgcmV0dXJuc1xuICogdHJ1ZSBpZiB0aGUgYXJndW1lbnQgaXMgYW4gYWN0dWFsIGFycmF5LCBhbiBgYXJndW1lbnRzJyBvYmplY3QsIG9yIGFuXG4gKiBIVE1MQ29sbGVjdGlvbiAoZS5nLiBub2RlLmNoaWxkTm9kZXMgb3Igbm9kZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgpKS5cbiAqXG4gKiBJdCB3aWxsIHJldHVybiBmYWxzZSBmb3Igb3RoZXIgYXJyYXktbGlrZSBvYmplY3RzIGxpa2UgRmlsZWxpc3QuXG4gKlxuICogQHBhcmFtIHsqfSBvYmpcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGhhc0FycmF5TmF0dXJlKG9iaikge1xuICByZXR1cm4gKFxuICAgIC8vIG5vdCBudWxsL2ZhbHNlXG4gICAgISFvYmogJiYgKFxuICAgIC8vIGFycmF5cyBhcmUgb2JqZWN0cywgTm9kZUxpc3RzIGFyZSBmdW5jdGlvbnMgaW4gU2FmYXJpXG4gICAgdHlwZW9mIG9iaiA9PSAnb2JqZWN0JyB8fCB0eXBlb2Ygb2JqID09ICdmdW5jdGlvbicpICYmXG4gICAgLy8gcXVhY2tzIGxpa2UgYW4gYXJyYXlcbiAgICAnbGVuZ3RoJyBpbiBvYmogJiZcbiAgICAvLyBub3Qgd2luZG93XG4gICAgISgnc2V0SW50ZXJ2YWwnIGluIG9iaikgJiZcbiAgICAvLyBubyBET00gbm9kZSBzaG91bGQgYmUgY29uc2lkZXJlZCBhbiBhcnJheS1saWtlXG4gICAgLy8gYSAnc2VsZWN0JyBlbGVtZW50IGhhcyAnbGVuZ3RoJyBhbmQgJ2l0ZW0nIHByb3BlcnRpZXMgb24gSUU4XG4gICAgdHlwZW9mIG9iai5ub2RlVHlwZSAhPSAnbnVtYmVyJyAmJiAoXG4gICAgLy8gYSByZWFsIGFycmF5XG4gICAgQXJyYXkuaXNBcnJheShvYmopIHx8XG4gICAgLy8gYXJndW1lbnRzXG4gICAgJ2NhbGxlZScgaW4gb2JqIHx8XG4gICAgLy8gSFRNTENvbGxlY3Rpb24vTm9kZUxpc3RcbiAgICAnaXRlbScgaW4gb2JqKVxuICApO1xufVxuXG4vKipcbiAqIEVuc3VyZSB0aGF0IHRoZSBhcmd1bWVudCBpcyBhbiBhcnJheSBieSB3cmFwcGluZyBpdCBpbiBhbiBhcnJheSBpZiBpdCBpcyBub3QuXG4gKiBDcmVhdGVzIGEgY29weSBvZiB0aGUgYXJndW1lbnQgaWYgaXQgaXMgYWxyZWFkeSBhbiBhcnJheS5cbiAqXG4gKiBUaGlzIGlzIG1vc3RseSB1c2VmdWwgaWRpb21hdGljYWxseTpcbiAqXG4gKiAgIHZhciBjcmVhdGVBcnJheUZyb21NaXhlZCA9IHJlcXVpcmUoJ2NyZWF0ZUFycmF5RnJvbU1peGVkJyk7XG4gKlxuICogICBmdW5jdGlvbiB0YWtlc09uZU9yTW9yZVRoaW5ncyh0aGluZ3MpIHtcbiAqICAgICB0aGluZ3MgPSBjcmVhdGVBcnJheUZyb21NaXhlZCh0aGluZ3MpO1xuICogICAgIC4uLlxuICogICB9XG4gKlxuICogVGhpcyBhbGxvd3MgeW91IHRvIHRyZWF0IGB0aGluZ3MnIGFzIGFuIGFycmF5LCBidXQgYWNjZXB0IHNjYWxhcnMgaW4gdGhlIEFQSS5cbiAqXG4gKiBJZiB5b3UgbmVlZCB0byBjb252ZXJ0IGFuIGFycmF5LWxpa2Ugb2JqZWN0LCBsaWtlIGBhcmd1bWVudHNgLCBpbnRvIGFuIGFycmF5XG4gKiB1c2UgdG9BcnJheSBpbnN0ZWFkLlxuICpcbiAqIEBwYXJhbSB7Kn0gb2JqXG4gKiBAcmV0dXJuIHthcnJheX1cbiAqL1xuZnVuY3Rpb24gY3JlYXRlQXJyYXlGcm9tTWl4ZWQob2JqKSB7XG4gIGlmICghaGFzQXJyYXlOYXR1cmUob2JqKSkge1xuICAgIHJldHVybiBbb2JqXTtcbiAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcbiAgICByZXR1cm4gb2JqLnNsaWNlKCk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHRvQXJyYXkob2JqKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZUFycmF5RnJvbU1peGVkO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vZmJqcy9saWIvY3JlYXRlQXJyYXlGcm9tTWl4ZWQuanMiLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAdHlwZWNoZWNrc1xuICovXG5cbi8qZXNsaW50LWRpc2FibGUgZmItd3d3L3Vuc2FmZS1odG1sKi9cblxudmFyIEV4ZWN1dGlvbkVudmlyb25tZW50ID0gcmVxdWlyZSgnLi9FeGVjdXRpb25FbnZpcm9ubWVudCcpO1xuXG52YXIgY3JlYXRlQXJyYXlGcm9tTWl4ZWQgPSByZXF1aXJlKCcuL2NyZWF0ZUFycmF5RnJvbU1peGVkJyk7XG52YXIgZ2V0TWFya3VwV3JhcCA9IHJlcXVpcmUoJy4vZ2V0TWFya3VwV3JhcCcpO1xudmFyIGludmFyaWFudCA9IHJlcXVpcmUoJy4vaW52YXJpYW50Jyk7XG5cbi8qKlxuICogRHVtbXkgY29udGFpbmVyIHVzZWQgdG8gcmVuZGVyIGFsbCBtYXJrdXAuXG4gKi9cbnZhciBkdW1teU5vZGUgPSBFeGVjdXRpb25FbnZpcm9ubWVudC5jYW5Vc2VET00gPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSA6IG51bGw7XG5cbi8qKlxuICogUGF0dGVybiB1c2VkIGJ5IGBnZXROb2RlTmFtZWAuXG4gKi9cbnZhciBub2RlTmFtZVBhdHRlcm4gPSAvXlxccyo8KFxcdyspLztcblxuLyoqXG4gKiBFeHRyYWN0cyB0aGUgYG5vZGVOYW1lYCBvZiB0aGUgZmlyc3QgZWxlbWVudCBpbiBhIHN0cmluZyBvZiBtYXJrdXAuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1hcmt1cCBTdHJpbmcgb2YgbWFya3VwLlxuICogQHJldHVybiB7P3N0cmluZ30gTm9kZSBuYW1lIG9mIHRoZSBzdXBwbGllZCBtYXJrdXAuXG4gKi9cbmZ1bmN0aW9uIGdldE5vZGVOYW1lKG1hcmt1cCkge1xuICB2YXIgbm9kZU5hbWVNYXRjaCA9IG1hcmt1cC5tYXRjaChub2RlTmFtZVBhdHRlcm4pO1xuICByZXR1cm4gbm9kZU5hbWVNYXRjaCAmJiBub2RlTmFtZU1hdGNoWzFdLnRvTG93ZXJDYXNlKCk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBjb250YWluaW5nIHRoZSBub2RlcyByZW5kZXJlZCBmcm9tIHRoZSBzdXBwbGllZCBtYXJrdXAuIFRoZVxuICogb3B0aW9uYWxseSBzdXBwbGllZCBgaGFuZGxlU2NyaXB0YCBmdW5jdGlvbiB3aWxsIGJlIGludm9rZWQgb25jZSBmb3IgZWFjaFxuICogPHNjcmlwdD4gZWxlbWVudCB0aGF0IGlzIHJlbmRlcmVkLiBJZiBubyBgaGFuZGxlU2NyaXB0YCBmdW5jdGlvbiBpcyBzdXBwbGllZCxcbiAqIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24gaWYgYW55IDxzY3JpcHQ+IGVsZW1lbnRzIGFyZSByZW5kZXJlZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbWFya3VwIEEgc3RyaW5nIG9mIHZhbGlkIEhUTUwgbWFya3VwLlxuICogQHBhcmFtIHs/ZnVuY3Rpb259IGhhbmRsZVNjcmlwdCBJbnZva2VkIG9uY2UgZm9yIGVhY2ggcmVuZGVyZWQgPHNjcmlwdD4uXG4gKiBAcmV0dXJuIHthcnJheTxET01FbGVtZW50fERPTVRleHROb2RlPn0gQW4gYXJyYXkgb2YgcmVuZGVyZWQgbm9kZXMuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZU5vZGVzRnJvbU1hcmt1cChtYXJrdXAsIGhhbmRsZVNjcmlwdCkge1xuICB2YXIgbm9kZSA9IGR1bW15Tm9kZTtcbiAgISEhZHVtbXlOb2RlID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IGludmFyaWFudChmYWxzZSwgJ2NyZWF0ZU5vZGVzRnJvbU1hcmt1cCBkdW1teSBub3QgaW5pdGlhbGl6ZWQnKSA6IGludmFyaWFudChmYWxzZSkgOiB2b2lkIDA7XG4gIHZhciBub2RlTmFtZSA9IGdldE5vZGVOYW1lKG1hcmt1cCk7XG5cbiAgdmFyIHdyYXAgPSBub2RlTmFtZSAmJiBnZXRNYXJrdXBXcmFwKG5vZGVOYW1lKTtcbiAgaWYgKHdyYXApIHtcbiAgICBub2RlLmlubmVySFRNTCA9IHdyYXBbMV0gKyBtYXJrdXAgKyB3cmFwWzJdO1xuXG4gICAgdmFyIHdyYXBEZXB0aCA9IHdyYXBbMF07XG4gICAgd2hpbGUgKHdyYXBEZXB0aC0tKSB7XG4gICAgICBub2RlID0gbm9kZS5sYXN0Q2hpbGQ7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIG5vZGUuaW5uZXJIVE1MID0gbWFya3VwO1xuICB9XG5cbiAgdmFyIHNjcmlwdHMgPSBub2RlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzY3JpcHQnKTtcbiAgaWYgKHNjcmlwdHMubGVuZ3RoKSB7XG4gICAgIWhhbmRsZVNjcmlwdCA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICdjcmVhdGVOb2Rlc0Zyb21NYXJrdXAoLi4uKTogVW5leHBlY3RlZCA8c2NyaXB0PiBlbGVtZW50IHJlbmRlcmVkLicpIDogaW52YXJpYW50KGZhbHNlKSA6IHZvaWQgMDtcbiAgICBjcmVhdGVBcnJheUZyb21NaXhlZChzY3JpcHRzKS5mb3JFYWNoKGhhbmRsZVNjcmlwdCk7XG4gIH1cblxuICB2YXIgbm9kZXMgPSBBcnJheS5mcm9tKG5vZGUuY2hpbGROb2Rlcyk7XG4gIHdoaWxlIChub2RlLmxhc3RDaGlsZCkge1xuICAgIG5vZGUucmVtb3ZlQ2hpbGQobm9kZS5sYXN0Q2hpbGQpO1xuICB9XG4gIHJldHVybiBub2Rlcztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVOb2Rlc0Zyb21NYXJrdXA7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9mYmpzL2xpYi9jcmVhdGVOb2Rlc0Zyb21NYXJrdXAuanMiLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuLyplc2xpbnQtZGlzYWJsZSBmYi13d3cvdW5zYWZlLWh0bWwgKi9cblxudmFyIEV4ZWN1dGlvbkVudmlyb25tZW50ID0gcmVxdWlyZSgnLi9FeGVjdXRpb25FbnZpcm9ubWVudCcpO1xuXG52YXIgaW52YXJpYW50ID0gcmVxdWlyZSgnLi9pbnZhcmlhbnQnKTtcblxuLyoqXG4gKiBEdW1teSBjb250YWluZXIgdXNlZCB0byBkZXRlY3Qgd2hpY2ggd3JhcHMgYXJlIG5lY2Vzc2FyeS5cbiAqL1xudmFyIGR1bW15Tm9kZSA9IEV4ZWN1dGlvbkVudmlyb25tZW50LmNhblVzZURPTSA/IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpIDogbnVsbDtcblxuLyoqXG4gKiBTb21lIGJyb3dzZXJzIGNhbm5vdCB1c2UgYGlubmVySFRNTGAgdG8gcmVuZGVyIGNlcnRhaW4gZWxlbWVudHMgc3RhbmRhbG9uZSxcbiAqIHNvIHdlIHdyYXAgdGhlbSwgcmVuZGVyIHRoZSB3cmFwcGVkIG5vZGVzLCB0aGVuIGV4dHJhY3QgdGhlIGRlc2lyZWQgbm9kZS5cbiAqXG4gKiBJbiBJRTgsIGNlcnRhaW4gZWxlbWVudHMgY2Fubm90IHJlbmRlciBhbG9uZSwgc28gd3JhcCBhbGwgZWxlbWVudHMgKCcqJykuXG4gKi9cblxudmFyIHNob3VsZFdyYXAgPSB7fTtcblxudmFyIHNlbGVjdFdyYXAgPSBbMSwgJzxzZWxlY3QgbXVsdGlwbGU9XCJ0cnVlXCI+JywgJzwvc2VsZWN0PiddO1xudmFyIHRhYmxlV3JhcCA9IFsxLCAnPHRhYmxlPicsICc8L3RhYmxlPiddO1xudmFyIHRyV3JhcCA9IFszLCAnPHRhYmxlPjx0Ym9keT48dHI+JywgJzwvdHI+PC90Ym9keT48L3RhYmxlPiddO1xuXG52YXIgc3ZnV3JhcCA9IFsxLCAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+JywgJzwvc3ZnPiddO1xuXG52YXIgbWFya3VwV3JhcCA9IHtcbiAgJyonOiBbMSwgJz88ZGl2PicsICc8L2Rpdj4nXSxcblxuICAnYXJlYSc6IFsxLCAnPG1hcD4nLCAnPC9tYXA+J10sXG4gICdjb2wnOiBbMiwgJzx0YWJsZT48dGJvZHk+PC90Ym9keT48Y29sZ3JvdXA+JywgJzwvY29sZ3JvdXA+PC90YWJsZT4nXSxcbiAgJ2xlZ2VuZCc6IFsxLCAnPGZpZWxkc2V0PicsICc8L2ZpZWxkc2V0PiddLFxuICAncGFyYW0nOiBbMSwgJzxvYmplY3Q+JywgJzwvb2JqZWN0PiddLFxuICAndHInOiBbMiwgJzx0YWJsZT48dGJvZHk+JywgJzwvdGJvZHk+PC90YWJsZT4nXSxcblxuICAnb3B0Z3JvdXAnOiBzZWxlY3RXcmFwLFxuICAnb3B0aW9uJzogc2VsZWN0V3JhcCxcblxuICAnY2FwdGlvbic6IHRhYmxlV3JhcCxcbiAgJ2NvbGdyb3VwJzogdGFibGVXcmFwLFxuICAndGJvZHknOiB0YWJsZVdyYXAsXG4gICd0Zm9vdCc6IHRhYmxlV3JhcCxcbiAgJ3RoZWFkJzogdGFibGVXcmFwLFxuXG4gICd0ZCc6IHRyV3JhcCxcbiAgJ3RoJzogdHJXcmFwXG59O1xuXG4vLyBJbml0aWFsaXplIHRoZSBTVkcgZWxlbWVudHMgc2luY2Ugd2Uga25vdyB0aGV5J2xsIGFsd2F5cyBuZWVkIHRvIGJlIHdyYXBwZWRcbi8vIGNvbnNpc3RlbnRseS4gSWYgdGhleSBhcmUgY3JlYXRlZCBpbnNpZGUgYSA8ZGl2PiB0aGV5IHdpbGwgYmUgaW5pdGlhbGl6ZWQgaW5cbi8vIHRoZSB3cm9uZyBuYW1lc3BhY2UgKGFuZCB3aWxsIG5vdCBkaXNwbGF5KS5cbnZhciBzdmdFbGVtZW50cyA9IFsnY2lyY2xlJywgJ2NsaXBQYXRoJywgJ2RlZnMnLCAnZWxsaXBzZScsICdnJywgJ2ltYWdlJywgJ2xpbmUnLCAnbGluZWFyR3JhZGllbnQnLCAnbWFzaycsICdwYXRoJywgJ3BhdHRlcm4nLCAncG9seWdvbicsICdwb2x5bGluZScsICdyYWRpYWxHcmFkaWVudCcsICdyZWN0JywgJ3N0b3AnLCAndGV4dCcsICd0c3BhbiddO1xuc3ZnRWxlbWVudHMuZm9yRWFjaChmdW5jdGlvbiAobm9kZU5hbWUpIHtcbiAgbWFya3VwV3JhcFtub2RlTmFtZV0gPSBzdmdXcmFwO1xuICBzaG91bGRXcmFwW25vZGVOYW1lXSA9IHRydWU7XG59KTtcblxuLyoqXG4gKiBHZXRzIHRoZSBtYXJrdXAgd3JhcCBjb25maWd1cmF0aW9uIGZvciB0aGUgc3VwcGxpZWQgYG5vZGVOYW1lYC5cbiAqXG4gKiBOT1RFOiBUaGlzIGxhemlseSBkZXRlY3RzIHdoaWNoIHdyYXBzIGFyZSBuZWNlc3NhcnkgZm9yIHRoZSBjdXJyZW50IGJyb3dzZXIuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG5vZGVOYW1lIExvd2VyY2FzZSBgbm9kZU5hbWVgLlxuICogQHJldHVybiB7P2FycmF5fSBNYXJrdXAgd3JhcCBjb25maWd1cmF0aW9uLCBpZiBhcHBsaWNhYmxlLlxuICovXG5mdW5jdGlvbiBnZXRNYXJrdXBXcmFwKG5vZGVOYW1lKSB7XG4gICEhIWR1bW15Tm9kZSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICdNYXJrdXAgd3JhcHBpbmcgbm9kZSBub3QgaW5pdGlhbGl6ZWQnKSA6IGludmFyaWFudChmYWxzZSkgOiB2b2lkIDA7XG4gIGlmICghbWFya3VwV3JhcC5oYXNPd25Qcm9wZXJ0eShub2RlTmFtZSkpIHtcbiAgICBub2RlTmFtZSA9ICcqJztcbiAgfVxuICBpZiAoIXNob3VsZFdyYXAuaGFzT3duUHJvcGVydHkobm9kZU5hbWUpKSB7XG4gICAgaWYgKG5vZGVOYW1lID09PSAnKicpIHtcbiAgICAgIGR1bW15Tm9kZS5pbm5lckhUTUwgPSAnPGxpbmsgLz4nO1xuICAgIH0gZWxzZSB7XG4gICAgICBkdW1teU5vZGUuaW5uZXJIVE1MID0gJzwnICsgbm9kZU5hbWUgKyAnPjwvJyArIG5vZGVOYW1lICsgJz4nO1xuICAgIH1cbiAgICBzaG91bGRXcmFwW25vZGVOYW1lXSA9ICFkdW1teU5vZGUuZmlyc3RDaGlsZDtcbiAgfVxuICByZXR1cm4gc2hvdWxkV3JhcFtub2RlTmFtZV0gPyBtYXJrdXBXcmFwW25vZGVOYW1lXSA6IG51bGw7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0TWFya3VwV3JhcDtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L2ZianMvbGliL2dldE1hcmt1cFdyYXAuanMiLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHR5cGVjaGVja3NcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbi8qKlxuICogR2V0cyB0aGUgc2Nyb2xsIHBvc2l0aW9uIG9mIHRoZSBzdXBwbGllZCBlbGVtZW50IG9yIHdpbmRvdy5cbiAqXG4gKiBUaGUgcmV0dXJuIHZhbHVlcyBhcmUgdW5ib3VuZGVkLCB1bmxpa2UgYGdldFNjcm9sbFBvc2l0aW9uYC4gVGhpcyBtZWFucyB0aGV5XG4gKiBtYXkgYmUgbmVnYXRpdmUgb3IgZXhjZWVkIHRoZSBlbGVtZW50IGJvdW5kYXJpZXMgKHdoaWNoIGlzIHBvc3NpYmxlIHVzaW5nXG4gKiBpbmVydGlhbCBzY3JvbGxpbmcpLlxuICpcbiAqIEBwYXJhbSB7RE9NV2luZG93fERPTUVsZW1lbnR9IHNjcm9sbGFibGVcbiAqIEByZXR1cm4ge29iamVjdH0gTWFwIHdpdGggYHhgIGFuZCBgeWAga2V5cy5cbiAqL1xuXG5mdW5jdGlvbiBnZXRVbmJvdW5kZWRTY3JvbGxQb3NpdGlvbihzY3JvbGxhYmxlKSB7XG4gIGlmIChzY3JvbGxhYmxlLldpbmRvdyAmJiBzY3JvbGxhYmxlIGluc3RhbmNlb2Ygc2Nyb2xsYWJsZS5XaW5kb3cpIHtcbiAgICByZXR1cm4ge1xuICAgICAgeDogc2Nyb2xsYWJsZS5wYWdlWE9mZnNldCB8fCBzY3JvbGxhYmxlLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0LFxuICAgICAgeTogc2Nyb2xsYWJsZS5wYWdlWU9mZnNldCB8fCBzY3JvbGxhYmxlLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3BcbiAgICB9O1xuICB9XG4gIHJldHVybiB7XG4gICAgeDogc2Nyb2xsYWJsZS5zY3JvbGxMZWZ0LFxuICAgIHk6IHNjcm9sbGFibGUuc2Nyb2xsVG9wXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0VW5ib3VuZGVkU2Nyb2xsUG9zaXRpb247XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9mYmpzL2xpYi9nZXRVbmJvdW5kZWRTY3JvbGxQb3NpdGlvbi5qcyIsIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEB0eXBlY2hlY2tzXG4gKi9cblxudmFyIF91cHBlcmNhc2VQYXR0ZXJuID0gLyhbQS1aXSkvZztcblxuLyoqXG4gKiBIeXBoZW5hdGVzIGEgY2FtZWxjYXNlZCBzdHJpbmcsIGZvciBleGFtcGxlOlxuICpcbiAqICAgPiBoeXBoZW5hdGUoJ2JhY2tncm91bmRDb2xvcicpXG4gKiAgIDwgXCJiYWNrZ3JvdW5kLWNvbG9yXCJcbiAqXG4gKiBGb3IgQ1NTIHN0eWxlIG5hbWVzLCB1c2UgYGh5cGhlbmF0ZVN0eWxlTmFtZWAgaW5zdGVhZCB3aGljaCB3b3JrcyBwcm9wZXJseVxuICogd2l0aCBhbGwgdmVuZG9yIHByZWZpeGVzLCBpbmNsdWRpbmcgYG1zYC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGh5cGhlbmF0ZShzdHJpbmcpIHtcbiAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKF91cHBlcmNhc2VQYXR0ZXJuLCAnLSQxJykudG9Mb3dlckNhc2UoKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoeXBoZW5hdGU7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9mYmpzL2xpYi9oeXBoZW5hdGUuanMiLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogQHR5cGVjaGVja3NcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBoeXBoZW5hdGUgPSByZXF1aXJlKCcuL2h5cGhlbmF0ZScpO1xuXG52YXIgbXNQYXR0ZXJuID0gL15tcy0vO1xuXG4vKipcbiAqIEh5cGhlbmF0ZXMgYSBjYW1lbGNhc2VkIENTUyBwcm9wZXJ0eSBuYW1lLCBmb3IgZXhhbXBsZTpcbiAqXG4gKiAgID4gaHlwaGVuYXRlU3R5bGVOYW1lKCdiYWNrZ3JvdW5kQ29sb3InKVxuICogICA8IFwiYmFja2dyb3VuZC1jb2xvclwiXG4gKiAgID4gaHlwaGVuYXRlU3R5bGVOYW1lKCdNb3pUcmFuc2l0aW9uJylcbiAqICAgPCBcIi1tb3otdHJhbnNpdGlvblwiXG4gKiAgID4gaHlwaGVuYXRlU3R5bGVOYW1lKCdtc1RyYW5zaXRpb24nKVxuICogICA8IFwiLW1zLXRyYW5zaXRpb25cIlxuICpcbiAqIEFzIE1vZGVybml6ciBzdWdnZXN0cyAoaHR0cDovL21vZGVybml6ci5jb20vZG9jcy8jcHJlZml4ZWQpLCBhbiBgbXNgIHByZWZpeFxuICogaXMgY29udmVydGVkIHRvIGAtbXMtYC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGh5cGhlbmF0ZVN0eWxlTmFtZShzdHJpbmcpIHtcbiAgcmV0dXJuIGh5cGhlbmF0ZShzdHJpbmcpLnJlcGxhY2UobXNQYXR0ZXJuLCAnLW1zLScpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGh5cGhlbmF0ZVN0eWxlTmFtZTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L2ZianMvbGliL2h5cGhlbmF0ZVN0eWxlTmFtZS5qcyIsIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIEB0eXBlY2hlY2tzXG4gKi9cblxuLyoqXG4gKiBAcGFyYW0geyp9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGNoZWNrLlxuICogQHJldHVybiB7Ym9vbGVhbn0gV2hldGhlciBvciBub3QgdGhlIG9iamVjdCBpcyBhIERPTSBub2RlLlxuICovXG5mdW5jdGlvbiBpc05vZGUob2JqZWN0KSB7XG4gIHZhciBkb2MgPSBvYmplY3QgPyBvYmplY3Qub3duZXJEb2N1bWVudCB8fCBvYmplY3QgOiBkb2N1bWVudDtcbiAgdmFyIGRlZmF1bHRWaWV3ID0gZG9jLmRlZmF1bHRWaWV3IHx8IHdpbmRvdztcbiAgcmV0dXJuICEhKG9iamVjdCAmJiAodHlwZW9mIGRlZmF1bHRWaWV3Lk5vZGUgPT09ICdmdW5jdGlvbicgPyBvYmplY3QgaW5zdGFuY2VvZiBkZWZhdWx0Vmlldy5Ob2RlIDogdHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG9iamVjdC5ub2RlVHlwZSA9PT0gJ251bWJlcicgJiYgdHlwZW9mIG9iamVjdC5ub2RlTmFtZSA9PT0gJ3N0cmluZycpKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc05vZGU7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9mYmpzL2xpYi9pc05vZGUuanMiLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAdHlwZWNoZWNrc1xuICovXG5cbnZhciBpc05vZGUgPSByZXF1aXJlKCcuL2lzTm9kZScpO1xuXG4vKipcbiAqIEBwYXJhbSB7Kn0gb2JqZWN0IFRoZSBvYmplY3QgdG8gY2hlY2suXG4gKiBAcmV0dXJuIHtib29sZWFufSBXaGV0aGVyIG9yIG5vdCB0aGUgb2JqZWN0IGlzIGEgRE9NIHRleHQgbm9kZS5cbiAqL1xuZnVuY3Rpb24gaXNUZXh0Tm9kZShvYmplY3QpIHtcbiAgcmV0dXJuIGlzTm9kZShvYmplY3QpICYmIG9iamVjdC5ub2RlVHlwZSA9PSAzO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzVGV4dE5vZGU7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9mYmpzL2xpYi9pc1RleHROb2RlLmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIFxuICogQHR5cGVjaGVja3Mgc3RhdGljLW9ubHlcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbi8qKlxuICogTWVtb2l6ZXMgdGhlIHJldHVybiB2YWx1ZSBvZiBhIGZ1bmN0aW9uIHRoYXQgYWNjZXB0cyBvbmUgc3RyaW5nIGFyZ3VtZW50LlxuICovXG5cbmZ1bmN0aW9uIG1lbW9pemVTdHJpbmdPbmx5KGNhbGxiYWNrKSB7XG4gIHZhciBjYWNoZSA9IHt9O1xuICByZXR1cm4gZnVuY3Rpb24gKHN0cmluZykge1xuICAgIGlmICghY2FjaGUuaGFzT3duUHJvcGVydHkoc3RyaW5nKSkge1xuICAgICAgY2FjaGVbc3RyaW5nXSA9IGNhbGxiYWNrLmNhbGwodGhpcywgc3RyaW5nKTtcbiAgICB9XG4gICAgcmV0dXJuIGNhY2hlW3N0cmluZ107XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWVtb2l6ZVN0cmluZ09ubHk7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9mYmpzL2xpYi9tZW1vaXplU3RyaW5nT25seS5qcyIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAdHlwZWNoZWNrc1xuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIEV4ZWN1dGlvbkVudmlyb25tZW50ID0gcmVxdWlyZSgnLi9FeGVjdXRpb25FbnZpcm9ubWVudCcpO1xuXG52YXIgcGVyZm9ybWFuY2U7XG5cbmlmIChFeGVjdXRpb25FbnZpcm9ubWVudC5jYW5Vc2VET00pIHtcbiAgcGVyZm9ybWFuY2UgPSB3aW5kb3cucGVyZm9ybWFuY2UgfHwgd2luZG93Lm1zUGVyZm9ybWFuY2UgfHwgd2luZG93LndlYmtpdFBlcmZvcm1hbmNlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHBlcmZvcm1hbmNlIHx8IHt9O1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vZmJqcy9saWIvcGVyZm9ybWFuY2UuanMiLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBAdHlwZWNoZWNrc1xuICovXG5cbnZhciBwZXJmb3JtYW5jZSA9IHJlcXVpcmUoJy4vcGVyZm9ybWFuY2UnKTtcblxudmFyIHBlcmZvcm1hbmNlTm93O1xuXG4vKipcbiAqIERldGVjdCBpZiB3ZSBjYW4gdXNlIGB3aW5kb3cucGVyZm9ybWFuY2Uubm93KClgIGFuZCBncmFjZWZ1bGx5IGZhbGxiYWNrIHRvXG4gKiBgRGF0ZS5ub3coKWAgaWYgaXQgZG9lc24ndCBleGlzdC4gV2UgbmVlZCB0byBzdXBwb3J0IEZpcmVmb3ggPCAxNSBmb3Igbm93XG4gKiBiZWNhdXNlIG9mIEZhY2Vib29rJ3MgdGVzdGluZyBpbmZyYXN0cnVjdHVyZS5cbiAqL1xuaWYgKHBlcmZvcm1hbmNlLm5vdykge1xuICBwZXJmb3JtYW5jZU5vdyA9IGZ1bmN0aW9uIHBlcmZvcm1hbmNlTm93KCkge1xuICAgIHJldHVybiBwZXJmb3JtYW5jZS5ub3coKTtcbiAgfTtcbn0gZWxzZSB7XG4gIHBlcmZvcm1hbmNlTm93ID0gZnVuY3Rpb24gcGVyZm9ybWFuY2VOb3coKSB7XG4gICAgcmV0dXJuIERhdGUubm93KCk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcGVyZm9ybWFuY2VOb3c7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9mYmpzL2xpYi9wZXJmb3JtYW5jZU5vdy5qcyIsIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxudmFyIF90eXBlb2YgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIiA/IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH0gOiBmdW5jdGlvbiAob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9O1xuXG52YXIgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xuXG52YXIgX3dhcm5pbmcgPSByZXF1aXJlKCd3YXJuaW5nJyk7XG5cbnZhciBfd2FybmluZzIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF93YXJuaW5nKTtcblxudmFyIF9pbnZhcmlhbnQgPSByZXF1aXJlKCdpbnZhcmlhbnQnKTtcblxudmFyIF9pbnZhcmlhbnQyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfaW52YXJpYW50KTtcblxudmFyIF9Mb2NhdGlvblV0aWxzID0gcmVxdWlyZSgnLi9Mb2NhdGlvblV0aWxzJyk7XG5cbnZhciBfUGF0aFV0aWxzID0gcmVxdWlyZSgnLi9QYXRoVXRpbHMnKTtcblxudmFyIF9jcmVhdGVUcmFuc2l0aW9uTWFuYWdlciA9IHJlcXVpcmUoJy4vY3JlYXRlVHJhbnNpdGlvbk1hbmFnZXInKTtcblxudmFyIF9jcmVhdGVUcmFuc2l0aW9uTWFuYWdlcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9jcmVhdGVUcmFuc2l0aW9uTWFuYWdlcik7XG5cbnZhciBfRE9NVXRpbHMgPSByZXF1aXJlKCcuL0RPTVV0aWxzJyk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbnZhciBQb3BTdGF0ZUV2ZW50ID0gJ3BvcHN0YXRlJztcbnZhciBIYXNoQ2hhbmdlRXZlbnQgPSAnaGFzaGNoYW5nZSc7XG5cbnZhciBnZXRIaXN0b3J5U3RhdGUgPSBmdW5jdGlvbiBnZXRIaXN0b3J5U3RhdGUoKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHdpbmRvdy5oaXN0b3J5LnN0YXRlIHx8IHt9O1xuICB9IGNhdGNoIChlKSB7XG4gICAgLy8gSUUgMTEgc29tZXRpbWVzIHRocm93cyB3aGVuIGFjY2Vzc2luZyB3aW5kb3cuaGlzdG9yeS5zdGF0ZVxuICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vUmVhY3RUcmFpbmluZy9oaXN0b3J5L3B1bGwvMjg5XG4gICAgcmV0dXJuIHt9O1xuICB9XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBoaXN0b3J5IG9iamVjdCB0aGF0IHVzZXMgdGhlIEhUTUw1IGhpc3RvcnkgQVBJIGluY2x1ZGluZ1xuICogcHVzaFN0YXRlLCByZXBsYWNlU3RhdGUsIGFuZCB0aGUgcG9wc3RhdGUgZXZlbnQuXG4gKi9cbnZhciBjcmVhdGVCcm93c2VySGlzdG9yeSA9IGZ1bmN0aW9uIGNyZWF0ZUJyb3dzZXJIaXN0b3J5KCkge1xuICB2YXIgcHJvcHMgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9O1xuXG4gICgwLCBfaW52YXJpYW50Mi5kZWZhdWx0KShfRE9NVXRpbHMuY2FuVXNlRE9NLCAnQnJvd3NlciBoaXN0b3J5IG5lZWRzIGEgRE9NJyk7XG5cbiAgdmFyIGdsb2JhbEhpc3RvcnkgPSB3aW5kb3cuaGlzdG9yeTtcbiAgdmFyIGNhblVzZUhpc3RvcnkgPSAoMCwgX0RPTVV0aWxzLnN1cHBvcnRzSGlzdG9yeSkoKTtcbiAgdmFyIG5lZWRzSGFzaENoYW5nZUxpc3RlbmVyID0gISgwLCBfRE9NVXRpbHMuc3VwcG9ydHNQb3BTdGF0ZU9uSGFzaENoYW5nZSkoKTtcblxuICB2YXIgX3Byb3BzJGZvcmNlUmVmcmVzaCA9IHByb3BzLmZvcmNlUmVmcmVzaCxcbiAgICAgIGZvcmNlUmVmcmVzaCA9IF9wcm9wcyRmb3JjZVJlZnJlc2ggPT09IHVuZGVmaW5lZCA/IGZhbHNlIDogX3Byb3BzJGZvcmNlUmVmcmVzaCxcbiAgICAgIF9wcm9wcyRnZXRVc2VyQ29uZmlybSA9IHByb3BzLmdldFVzZXJDb25maXJtYXRpb24sXG4gICAgICBnZXRVc2VyQ29uZmlybWF0aW9uID0gX3Byb3BzJGdldFVzZXJDb25maXJtID09PSB1bmRlZmluZWQgPyBfRE9NVXRpbHMuZ2V0Q29uZmlybWF0aW9uIDogX3Byb3BzJGdldFVzZXJDb25maXJtLFxuICAgICAgX3Byb3BzJGtleUxlbmd0aCA9IHByb3BzLmtleUxlbmd0aCxcbiAgICAgIGtleUxlbmd0aCA9IF9wcm9wcyRrZXlMZW5ndGggPT09IHVuZGVmaW5lZCA/IDYgOiBfcHJvcHMka2V5TGVuZ3RoO1xuXG4gIHZhciBiYXNlbmFtZSA9IHByb3BzLmJhc2VuYW1lID8gKDAsIF9QYXRoVXRpbHMuc3RyaXBUcmFpbGluZ1NsYXNoKSgoMCwgX1BhdGhVdGlscy5hZGRMZWFkaW5nU2xhc2gpKHByb3BzLmJhc2VuYW1lKSkgOiAnJztcblxuICB2YXIgZ2V0RE9NTG9jYXRpb24gPSBmdW5jdGlvbiBnZXRET01Mb2NhdGlvbihoaXN0b3J5U3RhdGUpIHtcbiAgICB2YXIgX3JlZiA9IGhpc3RvcnlTdGF0ZSB8fCB7fSxcbiAgICAgICAga2V5ID0gX3JlZi5rZXksXG4gICAgICAgIHN0YXRlID0gX3JlZi5zdGF0ZTtcblxuICAgIHZhciBfd2luZG93JGxvY2F0aW9uID0gd2luZG93LmxvY2F0aW9uLFxuICAgICAgICBwYXRobmFtZSA9IF93aW5kb3ckbG9jYXRpb24ucGF0aG5hbWUsXG4gICAgICAgIHNlYXJjaCA9IF93aW5kb3ckbG9jYXRpb24uc2VhcmNoLFxuICAgICAgICBoYXNoID0gX3dpbmRvdyRsb2NhdGlvbi5oYXNoO1xuXG5cbiAgICB2YXIgcGF0aCA9IHBhdGhuYW1lICsgc2VhcmNoICsgaGFzaDtcblxuICAgICgwLCBfd2FybmluZzIuZGVmYXVsdCkoIWJhc2VuYW1lIHx8ICgwLCBfUGF0aFV0aWxzLmhhc0Jhc2VuYW1lKShwYXRoLCBiYXNlbmFtZSksICdZb3UgYXJlIGF0dGVtcHRpbmcgdG8gdXNlIGEgYmFzZW5hbWUgb24gYSBwYWdlIHdob3NlIFVSTCBwYXRoIGRvZXMgbm90IGJlZ2luICcgKyAnd2l0aCB0aGUgYmFzZW5hbWUuIEV4cGVjdGVkIHBhdGggXCInICsgcGF0aCArICdcIiB0byBiZWdpbiB3aXRoIFwiJyArIGJhc2VuYW1lICsgJ1wiLicpO1xuXG4gICAgaWYgKGJhc2VuYW1lKSBwYXRoID0gKDAsIF9QYXRoVXRpbHMuc3RyaXBCYXNlbmFtZSkocGF0aCwgYmFzZW5hbWUpO1xuXG4gICAgcmV0dXJuICgwLCBfTG9jYXRpb25VdGlscy5jcmVhdGVMb2NhdGlvbikocGF0aCwgc3RhdGUsIGtleSk7XG4gIH07XG5cbiAgdmFyIGNyZWF0ZUtleSA9IGZ1bmN0aW9uIGNyZWF0ZUtleSgpIHtcbiAgICByZXR1cm4gTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyKDIsIGtleUxlbmd0aCk7XG4gIH07XG5cbiAgdmFyIHRyYW5zaXRpb25NYW5hZ2VyID0gKDAsIF9jcmVhdGVUcmFuc2l0aW9uTWFuYWdlcjIuZGVmYXVsdCkoKTtcblxuICB2YXIgc2V0U3RhdGUgPSBmdW5jdGlvbiBzZXRTdGF0ZShuZXh0U3RhdGUpIHtcbiAgICBfZXh0ZW5kcyhoaXN0b3J5LCBuZXh0U3RhdGUpO1xuXG4gICAgaGlzdG9yeS5sZW5ndGggPSBnbG9iYWxIaXN0b3J5Lmxlbmd0aDtcblxuICAgIHRyYW5zaXRpb25NYW5hZ2VyLm5vdGlmeUxpc3RlbmVycyhoaXN0b3J5LmxvY2F0aW9uLCBoaXN0b3J5LmFjdGlvbik7XG4gIH07XG5cbiAgdmFyIGhhbmRsZVBvcFN0YXRlID0gZnVuY3Rpb24gaGFuZGxlUG9wU3RhdGUoZXZlbnQpIHtcbiAgICAvLyBJZ25vcmUgZXh0cmFuZW91cyBwb3BzdGF0ZSBldmVudHMgaW4gV2ViS2l0LlxuICAgIGlmICgoMCwgX0RPTVV0aWxzLmlzRXh0cmFuZW91c1BvcHN0YXRlRXZlbnQpKGV2ZW50KSkgcmV0dXJuO1xuXG4gICAgaGFuZGxlUG9wKGdldERPTUxvY2F0aW9uKGV2ZW50LnN0YXRlKSk7XG4gIH07XG5cbiAgdmFyIGhhbmRsZUhhc2hDaGFuZ2UgPSBmdW5jdGlvbiBoYW5kbGVIYXNoQ2hhbmdlKCkge1xuICAgIGhhbmRsZVBvcChnZXRET01Mb2NhdGlvbihnZXRIaXN0b3J5U3RhdGUoKSkpO1xuICB9O1xuXG4gIHZhciBmb3JjZU5leHRQb3AgPSBmYWxzZTtcblxuICB2YXIgaGFuZGxlUG9wID0gZnVuY3Rpb24gaGFuZGxlUG9wKGxvY2F0aW9uKSB7XG4gICAgaWYgKGZvcmNlTmV4dFBvcCkge1xuICAgICAgZm9yY2VOZXh0UG9wID0gZmFsc2U7XG4gICAgICBzZXRTdGF0ZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgYWN0aW9uID0gJ1BPUCc7XG5cbiAgICAgIHRyYW5zaXRpb25NYW5hZ2VyLmNvbmZpcm1UcmFuc2l0aW9uVG8obG9jYXRpb24sIGFjdGlvbiwgZ2V0VXNlckNvbmZpcm1hdGlvbiwgZnVuY3Rpb24gKG9rKSB7XG4gICAgICAgIGlmIChvaykge1xuICAgICAgICAgIHNldFN0YXRlKHsgYWN0aW9uOiBhY3Rpb24sIGxvY2F0aW9uOiBsb2NhdGlvbiB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXZlcnRQb3AobG9jYXRpb24pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgdmFyIHJldmVydFBvcCA9IGZ1bmN0aW9uIHJldmVydFBvcChmcm9tTG9jYXRpb24pIHtcbiAgICB2YXIgdG9Mb2NhdGlvbiA9IGhpc3RvcnkubG9jYXRpb247XG5cbiAgICAvLyBUT0RPOiBXZSBjb3VsZCBwcm9iYWJseSBtYWtlIHRoaXMgbW9yZSByZWxpYWJsZSBieVxuICAgIC8vIGtlZXBpbmcgYSBsaXN0IG9mIGtleXMgd2UndmUgc2VlbiBpbiBzZXNzaW9uU3RvcmFnZS5cbiAgICAvLyBJbnN0ZWFkLCB3ZSBqdXN0IGRlZmF1bHQgdG8gMCBmb3Iga2V5cyB3ZSBkb24ndCBrbm93LlxuXG4gICAgdmFyIHRvSW5kZXggPSBhbGxLZXlzLmluZGV4T2YodG9Mb2NhdGlvbi5rZXkpO1xuXG4gICAgaWYgKHRvSW5kZXggPT09IC0xKSB0b0luZGV4ID0gMDtcblxuICAgIHZhciBmcm9tSW5kZXggPSBhbGxLZXlzLmluZGV4T2YoZnJvbUxvY2F0aW9uLmtleSk7XG5cbiAgICBpZiAoZnJvbUluZGV4ID09PSAtMSkgZnJvbUluZGV4ID0gMDtcblxuICAgIHZhciBkZWx0YSA9IHRvSW5kZXggLSBmcm9tSW5kZXg7XG5cbiAgICBpZiAoZGVsdGEpIHtcbiAgICAgIGZvcmNlTmV4dFBvcCA9IHRydWU7XG4gICAgICBnbyhkZWx0YSk7XG4gICAgfVxuICB9O1xuXG4gIHZhciBpbml0aWFsTG9jYXRpb24gPSBnZXRET01Mb2NhdGlvbihnZXRIaXN0b3J5U3RhdGUoKSk7XG4gIHZhciBhbGxLZXlzID0gW2luaXRpYWxMb2NhdGlvbi5rZXldO1xuXG4gIC8vIFB1YmxpYyBpbnRlcmZhY2VcblxuICB2YXIgY3JlYXRlSHJlZiA9IGZ1bmN0aW9uIGNyZWF0ZUhyZWYobG9jYXRpb24pIHtcbiAgICByZXR1cm4gYmFzZW5hbWUgKyAoMCwgX1BhdGhVdGlscy5jcmVhdGVQYXRoKShsb2NhdGlvbik7XG4gIH07XG5cbiAgdmFyIHB1c2ggPSBmdW5jdGlvbiBwdXNoKHBhdGgsIHN0YXRlKSB7XG4gICAgKDAsIF93YXJuaW5nMi5kZWZhdWx0KSghKCh0eXBlb2YgcGF0aCA9PT0gJ3VuZGVmaW5lZCcgPyAndW5kZWZpbmVkJyA6IF90eXBlb2YocGF0aCkpID09PSAnb2JqZWN0JyAmJiBwYXRoLnN0YXRlICE9PSB1bmRlZmluZWQgJiYgc3RhdGUgIT09IHVuZGVmaW5lZCksICdZb3Ugc2hvdWxkIGF2b2lkIHByb3ZpZGluZyBhIDJuZCBzdGF0ZSBhcmd1bWVudCB0byBwdXNoIHdoZW4gdGhlIDFzdCAnICsgJ2FyZ3VtZW50IGlzIGEgbG9jYXRpb24tbGlrZSBvYmplY3QgdGhhdCBhbHJlYWR5IGhhcyBzdGF0ZTsgaXQgaXMgaWdub3JlZCcpO1xuXG4gICAgdmFyIGFjdGlvbiA9ICdQVVNIJztcbiAgICB2YXIgbG9jYXRpb24gPSAoMCwgX0xvY2F0aW9uVXRpbHMuY3JlYXRlTG9jYXRpb24pKHBhdGgsIHN0YXRlLCBjcmVhdGVLZXkoKSwgaGlzdG9yeS5sb2NhdGlvbik7XG5cbiAgICB0cmFuc2l0aW9uTWFuYWdlci5jb25maXJtVHJhbnNpdGlvblRvKGxvY2F0aW9uLCBhY3Rpb24sIGdldFVzZXJDb25maXJtYXRpb24sIGZ1bmN0aW9uIChvaykge1xuICAgICAgaWYgKCFvaykgcmV0dXJuO1xuXG4gICAgICB2YXIgaHJlZiA9IGNyZWF0ZUhyZWYobG9jYXRpb24pO1xuICAgICAgdmFyIGtleSA9IGxvY2F0aW9uLmtleSxcbiAgICAgICAgICBzdGF0ZSA9IGxvY2F0aW9uLnN0YXRlO1xuXG5cbiAgICAgIGlmIChjYW5Vc2VIaXN0b3J5KSB7XG4gICAgICAgIGdsb2JhbEhpc3RvcnkucHVzaFN0YXRlKHsga2V5OiBrZXksIHN0YXRlOiBzdGF0ZSB9LCBudWxsLCBocmVmKTtcblxuICAgICAgICBpZiAoZm9yY2VSZWZyZXNoKSB7XG4gICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSBocmVmO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciBwcmV2SW5kZXggPSBhbGxLZXlzLmluZGV4T2YoaGlzdG9yeS5sb2NhdGlvbi5rZXkpO1xuICAgICAgICAgIHZhciBuZXh0S2V5cyA9IGFsbEtleXMuc2xpY2UoMCwgcHJldkluZGV4ID09PSAtMSA/IDAgOiBwcmV2SW5kZXggKyAxKTtcblxuICAgICAgICAgIG5leHRLZXlzLnB1c2gobG9jYXRpb24ua2V5KTtcbiAgICAgICAgICBhbGxLZXlzID0gbmV4dEtleXM7XG5cbiAgICAgICAgICBzZXRTdGF0ZSh7IGFjdGlvbjogYWN0aW9uLCBsb2NhdGlvbjogbG9jYXRpb24gfSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgICgwLCBfd2FybmluZzIuZGVmYXVsdCkoc3RhdGUgPT09IHVuZGVmaW5lZCwgJ0Jyb3dzZXIgaGlzdG9yeSBjYW5ub3QgcHVzaCBzdGF0ZSBpbiBicm93c2VycyB0aGF0IGRvIG5vdCBzdXBwb3J0IEhUTUw1IGhpc3RvcnknKTtcblxuICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IGhyZWY7XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG5cbiAgdmFyIHJlcGxhY2UgPSBmdW5jdGlvbiByZXBsYWNlKHBhdGgsIHN0YXRlKSB7XG4gICAgKDAsIF93YXJuaW5nMi5kZWZhdWx0KSghKCh0eXBlb2YgcGF0aCA9PT0gJ3VuZGVmaW5lZCcgPyAndW5kZWZpbmVkJyA6IF90eXBlb2YocGF0aCkpID09PSAnb2JqZWN0JyAmJiBwYXRoLnN0YXRlICE9PSB1bmRlZmluZWQgJiYgc3RhdGUgIT09IHVuZGVmaW5lZCksICdZb3Ugc2hvdWxkIGF2b2lkIHByb3ZpZGluZyBhIDJuZCBzdGF0ZSBhcmd1bWVudCB0byByZXBsYWNlIHdoZW4gdGhlIDFzdCAnICsgJ2FyZ3VtZW50IGlzIGEgbG9jYXRpb24tbGlrZSBvYmplY3QgdGhhdCBhbHJlYWR5IGhhcyBzdGF0ZTsgaXQgaXMgaWdub3JlZCcpO1xuXG4gICAgdmFyIGFjdGlvbiA9ICdSRVBMQUNFJztcbiAgICB2YXIgbG9jYXRpb24gPSAoMCwgX0xvY2F0aW9uVXRpbHMuY3JlYXRlTG9jYXRpb24pKHBhdGgsIHN0YXRlLCBjcmVhdGVLZXkoKSwgaGlzdG9yeS5sb2NhdGlvbik7XG5cbiAgICB0cmFuc2l0aW9uTWFuYWdlci5jb25maXJtVHJhbnNpdGlvblRvKGxvY2F0aW9uLCBhY3Rpb24sIGdldFVzZXJDb25maXJtYXRpb24sIGZ1bmN0aW9uIChvaykge1xuICAgICAgaWYgKCFvaykgcmV0dXJuO1xuXG4gICAgICB2YXIgaHJlZiA9IGNyZWF0ZUhyZWYobG9jYXRpb24pO1xuICAgICAgdmFyIGtleSA9IGxvY2F0aW9uLmtleSxcbiAgICAgICAgICBzdGF0ZSA9IGxvY2F0aW9uLnN0YXRlO1xuXG5cbiAgICAgIGlmIChjYW5Vc2VIaXN0b3J5KSB7XG4gICAgICAgIGdsb2JhbEhpc3RvcnkucmVwbGFjZVN0YXRlKHsga2V5OiBrZXksIHN0YXRlOiBzdGF0ZSB9LCBudWxsLCBocmVmKTtcblxuICAgICAgICBpZiAoZm9yY2VSZWZyZXNoKSB7XG4gICAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlcGxhY2UoaHJlZik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIHByZXZJbmRleCA9IGFsbEtleXMuaW5kZXhPZihoaXN0b3J5LmxvY2F0aW9uLmtleSk7XG5cbiAgICAgICAgICBpZiAocHJldkluZGV4ICE9PSAtMSkgYWxsS2V5c1twcmV2SW5kZXhdID0gbG9jYXRpb24ua2V5O1xuXG4gICAgICAgICAgc2V0U3RhdGUoeyBhY3Rpb246IGFjdGlvbiwgbG9jYXRpb246IGxvY2F0aW9uIH0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAoMCwgX3dhcm5pbmcyLmRlZmF1bHQpKHN0YXRlID09PSB1bmRlZmluZWQsICdCcm93c2VyIGhpc3RvcnkgY2Fubm90IHJlcGxhY2Ugc3RhdGUgaW4gYnJvd3NlcnMgdGhhdCBkbyBub3Qgc3VwcG9ydCBIVE1MNSBoaXN0b3J5Jyk7XG5cbiAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlcGxhY2UoaHJlZik7XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG5cbiAgdmFyIGdvID0gZnVuY3Rpb24gZ28obikge1xuICAgIGdsb2JhbEhpc3RvcnkuZ28obik7XG4gIH07XG5cbiAgdmFyIGdvQmFjayA9IGZ1bmN0aW9uIGdvQmFjaygpIHtcbiAgICByZXR1cm4gZ28oLTEpO1xuICB9O1xuXG4gIHZhciBnb0ZvcndhcmQgPSBmdW5jdGlvbiBnb0ZvcndhcmQoKSB7XG4gICAgcmV0dXJuIGdvKDEpO1xuICB9O1xuXG4gIHZhciBsaXN0ZW5lckNvdW50ID0gMDtcblxuICB2YXIgY2hlY2tET01MaXN0ZW5lcnMgPSBmdW5jdGlvbiBjaGVja0RPTUxpc3RlbmVycyhkZWx0YSkge1xuICAgIGxpc3RlbmVyQ291bnQgKz0gZGVsdGE7XG5cbiAgICBpZiAobGlzdGVuZXJDb3VudCA9PT0gMSkge1xuICAgICAgKDAsIF9ET01VdGlscy5hZGRFdmVudExpc3RlbmVyKSh3aW5kb3csIFBvcFN0YXRlRXZlbnQsIGhhbmRsZVBvcFN0YXRlKTtcblxuICAgICAgaWYgKG5lZWRzSGFzaENoYW5nZUxpc3RlbmVyKSAoMCwgX0RPTVV0aWxzLmFkZEV2ZW50TGlzdGVuZXIpKHdpbmRvdywgSGFzaENoYW5nZUV2ZW50LCBoYW5kbGVIYXNoQ2hhbmdlKTtcbiAgICB9IGVsc2UgaWYgKGxpc3RlbmVyQ291bnQgPT09IDApIHtcbiAgICAgICgwLCBfRE9NVXRpbHMucmVtb3ZlRXZlbnRMaXN0ZW5lcikod2luZG93LCBQb3BTdGF0ZUV2ZW50LCBoYW5kbGVQb3BTdGF0ZSk7XG5cbiAgICAgIGlmIChuZWVkc0hhc2hDaGFuZ2VMaXN0ZW5lcikgKDAsIF9ET01VdGlscy5yZW1vdmVFdmVudExpc3RlbmVyKSh3aW5kb3csIEhhc2hDaGFuZ2VFdmVudCwgaGFuZGxlSGFzaENoYW5nZSk7XG4gICAgfVxuICB9O1xuXG4gIHZhciBpc0Jsb2NrZWQgPSBmYWxzZTtcblxuICB2YXIgYmxvY2sgPSBmdW5jdGlvbiBibG9jaygpIHtcbiAgICB2YXIgcHJvbXB0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiBmYWxzZTtcblxuICAgIHZhciB1bmJsb2NrID0gdHJhbnNpdGlvbk1hbmFnZXIuc2V0UHJvbXB0KHByb21wdCk7XG5cbiAgICBpZiAoIWlzQmxvY2tlZCkge1xuICAgICAgY2hlY2tET01MaXN0ZW5lcnMoMSk7XG4gICAgICBpc0Jsb2NrZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoaXNCbG9ja2VkKSB7XG4gICAgICAgIGlzQmxvY2tlZCA9IGZhbHNlO1xuICAgICAgICBjaGVja0RPTUxpc3RlbmVycygtMSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB1bmJsb2NrKCk7XG4gICAgfTtcbiAgfTtcblxuICB2YXIgbGlzdGVuID0gZnVuY3Rpb24gbGlzdGVuKGxpc3RlbmVyKSB7XG4gICAgdmFyIHVubGlzdGVuID0gdHJhbnNpdGlvbk1hbmFnZXIuYXBwZW5kTGlzdGVuZXIobGlzdGVuZXIpO1xuICAgIGNoZWNrRE9NTGlzdGVuZXJzKDEpO1xuXG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNoZWNrRE9NTGlzdGVuZXJzKC0xKTtcbiAgICAgIHVubGlzdGVuKCk7XG4gICAgfTtcbiAgfTtcblxuICB2YXIgaGlzdG9yeSA9IHtcbiAgICBsZW5ndGg6IGdsb2JhbEhpc3RvcnkubGVuZ3RoLFxuICAgIGFjdGlvbjogJ1BPUCcsXG4gICAgbG9jYXRpb246IGluaXRpYWxMb2NhdGlvbixcbiAgICBjcmVhdGVIcmVmOiBjcmVhdGVIcmVmLFxuICAgIHB1c2g6IHB1c2gsXG4gICAgcmVwbGFjZTogcmVwbGFjZSxcbiAgICBnbzogZ28sXG4gICAgZ29CYWNrOiBnb0JhY2ssXG4gICAgZ29Gb3J3YXJkOiBnb0ZvcndhcmQsXG4gICAgYmxvY2s6IGJsb2NrLFxuICAgIGxpc3RlbjogbGlzdGVuXG4gIH07XG5cbiAgcmV0dXJuIGhpc3Rvcnk7XG59O1xuXG5leHBvcnRzLmRlZmF1bHQgPSBjcmVhdGVCcm93c2VySGlzdG9yeTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L2hpc3RvcnkvY3JlYXRlQnJvd3Nlckhpc3RvcnkuanMiLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cbnZhciBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07XG5cbnZhciBfd2FybmluZyA9IHJlcXVpcmUoJ3dhcm5pbmcnKTtcblxudmFyIF93YXJuaW5nMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX3dhcm5pbmcpO1xuXG52YXIgX2ludmFyaWFudCA9IHJlcXVpcmUoJ2ludmFyaWFudCcpO1xuXG52YXIgX2ludmFyaWFudDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9pbnZhcmlhbnQpO1xuXG52YXIgX0xvY2F0aW9uVXRpbHMgPSByZXF1aXJlKCcuL0xvY2F0aW9uVXRpbHMnKTtcblxudmFyIF9QYXRoVXRpbHMgPSByZXF1aXJlKCcuL1BhdGhVdGlscycpO1xuXG52YXIgX2NyZWF0ZVRyYW5zaXRpb25NYW5hZ2VyID0gcmVxdWlyZSgnLi9jcmVhdGVUcmFuc2l0aW9uTWFuYWdlcicpO1xuXG52YXIgX2NyZWF0ZVRyYW5zaXRpb25NYW5hZ2VyMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2NyZWF0ZVRyYW5zaXRpb25NYW5hZ2VyKTtcblxudmFyIF9ET01VdGlscyA9IHJlcXVpcmUoJy4vRE9NVXRpbHMnKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxudmFyIEhhc2hDaGFuZ2VFdmVudCA9ICdoYXNoY2hhbmdlJztcblxudmFyIEhhc2hQYXRoQ29kZXJzID0ge1xuICBoYXNoYmFuZzoge1xuICAgIGVuY29kZVBhdGg6IGZ1bmN0aW9uIGVuY29kZVBhdGgocGF0aCkge1xuICAgICAgcmV0dXJuIHBhdGguY2hhckF0KDApID09PSAnIScgPyBwYXRoIDogJyEvJyArICgwLCBfUGF0aFV0aWxzLnN0cmlwTGVhZGluZ1NsYXNoKShwYXRoKTtcbiAgICB9LFxuICAgIGRlY29kZVBhdGg6IGZ1bmN0aW9uIGRlY29kZVBhdGgocGF0aCkge1xuICAgICAgcmV0dXJuIHBhdGguY2hhckF0KDApID09PSAnIScgPyBwYXRoLnN1YnN0cigxKSA6IHBhdGg7XG4gICAgfVxuICB9LFxuICBub3NsYXNoOiB7XG4gICAgZW5jb2RlUGF0aDogX1BhdGhVdGlscy5zdHJpcExlYWRpbmdTbGFzaCxcbiAgICBkZWNvZGVQYXRoOiBfUGF0aFV0aWxzLmFkZExlYWRpbmdTbGFzaFxuICB9LFxuICBzbGFzaDoge1xuICAgIGVuY29kZVBhdGg6IF9QYXRoVXRpbHMuYWRkTGVhZGluZ1NsYXNoLFxuICAgIGRlY29kZVBhdGg6IF9QYXRoVXRpbHMuYWRkTGVhZGluZ1NsYXNoXG4gIH1cbn07XG5cbnZhciBnZXRIYXNoUGF0aCA9IGZ1bmN0aW9uIGdldEhhc2hQYXRoKCkge1xuICAvLyBXZSBjYW4ndCB1c2Ugd2luZG93LmxvY2F0aW9uLmhhc2ggaGVyZSBiZWNhdXNlIGl0J3Mgbm90XG4gIC8vIGNvbnNpc3RlbnQgYWNyb3NzIGJyb3dzZXJzIC0gRmlyZWZveCB3aWxsIHByZS1kZWNvZGUgaXQhXG4gIHZhciBocmVmID0gd2luZG93LmxvY2F0aW9uLmhyZWY7XG4gIHZhciBoYXNoSW5kZXggPSBocmVmLmluZGV4T2YoJyMnKTtcbiAgcmV0dXJuIGhhc2hJbmRleCA9PT0gLTEgPyAnJyA6IGhyZWYuc3Vic3RyaW5nKGhhc2hJbmRleCArIDEpO1xufTtcblxudmFyIHB1c2hIYXNoUGF0aCA9IGZ1bmN0aW9uIHB1c2hIYXNoUGF0aChwYXRoKSB7XG4gIHJldHVybiB3aW5kb3cubG9jYXRpb24uaGFzaCA9IHBhdGg7XG59O1xuXG52YXIgcmVwbGFjZUhhc2hQYXRoID0gZnVuY3Rpb24gcmVwbGFjZUhhc2hQYXRoKHBhdGgpIHtcbiAgdmFyIGhhc2hJbmRleCA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluZGV4T2YoJyMnKTtcblxuICB3aW5kb3cubG9jYXRpb24ucmVwbGFjZSh3aW5kb3cubG9jYXRpb24uaHJlZi5zbGljZSgwLCBoYXNoSW5kZXggPj0gMCA/IGhhc2hJbmRleCA6IDApICsgJyMnICsgcGF0aCk7XG59O1xuXG52YXIgY3JlYXRlSGFzaEhpc3RvcnkgPSBmdW5jdGlvbiBjcmVhdGVIYXNoSGlzdG9yeSgpIHtcbiAgdmFyIHByb3BzID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcblxuICAoMCwgX2ludmFyaWFudDIuZGVmYXVsdCkoX0RPTVV0aWxzLmNhblVzZURPTSwgJ0hhc2ggaGlzdG9yeSBuZWVkcyBhIERPTScpO1xuXG4gIHZhciBnbG9iYWxIaXN0b3J5ID0gd2luZG93Lmhpc3Rvcnk7XG4gIHZhciBjYW5Hb1dpdGhvdXRSZWxvYWQgPSAoMCwgX0RPTVV0aWxzLnN1cHBvcnRzR29XaXRob3V0UmVsb2FkVXNpbmdIYXNoKSgpO1xuXG4gIHZhciBfcHJvcHMkZ2V0VXNlckNvbmZpcm0gPSBwcm9wcy5nZXRVc2VyQ29uZmlybWF0aW9uLFxuICAgICAgZ2V0VXNlckNvbmZpcm1hdGlvbiA9IF9wcm9wcyRnZXRVc2VyQ29uZmlybSA9PT0gdW5kZWZpbmVkID8gX0RPTVV0aWxzLmdldENvbmZpcm1hdGlvbiA6IF9wcm9wcyRnZXRVc2VyQ29uZmlybSxcbiAgICAgIF9wcm9wcyRoYXNoVHlwZSA9IHByb3BzLmhhc2hUeXBlLFxuICAgICAgaGFzaFR5cGUgPSBfcHJvcHMkaGFzaFR5cGUgPT09IHVuZGVmaW5lZCA/ICdzbGFzaCcgOiBfcHJvcHMkaGFzaFR5cGU7XG5cbiAgdmFyIGJhc2VuYW1lID0gcHJvcHMuYmFzZW5hbWUgPyAoMCwgX1BhdGhVdGlscy5zdHJpcFRyYWlsaW5nU2xhc2gpKCgwLCBfUGF0aFV0aWxzLmFkZExlYWRpbmdTbGFzaCkocHJvcHMuYmFzZW5hbWUpKSA6ICcnO1xuXG4gIHZhciBfSGFzaFBhdGhDb2RlcnMkaGFzaFQgPSBIYXNoUGF0aENvZGVyc1toYXNoVHlwZV0sXG4gICAgICBlbmNvZGVQYXRoID0gX0hhc2hQYXRoQ29kZXJzJGhhc2hULmVuY29kZVBhdGgsXG4gICAgICBkZWNvZGVQYXRoID0gX0hhc2hQYXRoQ29kZXJzJGhhc2hULmRlY29kZVBhdGg7XG5cblxuICB2YXIgZ2V0RE9NTG9jYXRpb24gPSBmdW5jdGlvbiBnZXRET01Mb2NhdGlvbigpIHtcbiAgICB2YXIgcGF0aCA9IGRlY29kZVBhdGgoZ2V0SGFzaFBhdGgoKSk7XG5cbiAgICAoMCwgX3dhcm5pbmcyLmRlZmF1bHQpKCFiYXNlbmFtZSB8fCAoMCwgX1BhdGhVdGlscy5oYXNCYXNlbmFtZSkocGF0aCwgYmFzZW5hbWUpLCAnWW91IGFyZSBhdHRlbXB0aW5nIHRvIHVzZSBhIGJhc2VuYW1lIG9uIGEgcGFnZSB3aG9zZSBVUkwgcGF0aCBkb2VzIG5vdCBiZWdpbiAnICsgJ3dpdGggdGhlIGJhc2VuYW1lLiBFeHBlY3RlZCBwYXRoIFwiJyArIHBhdGggKyAnXCIgdG8gYmVnaW4gd2l0aCBcIicgKyBiYXNlbmFtZSArICdcIi4nKTtcblxuICAgIGlmIChiYXNlbmFtZSkgcGF0aCA9ICgwLCBfUGF0aFV0aWxzLnN0cmlwQmFzZW5hbWUpKHBhdGgsIGJhc2VuYW1lKTtcblxuICAgIHJldHVybiAoMCwgX0xvY2F0aW9uVXRpbHMuY3JlYXRlTG9jYXRpb24pKHBhdGgpO1xuICB9O1xuXG4gIHZhciB0cmFuc2l0aW9uTWFuYWdlciA9ICgwLCBfY3JlYXRlVHJhbnNpdGlvbk1hbmFnZXIyLmRlZmF1bHQpKCk7XG5cbiAgdmFyIHNldFN0YXRlID0gZnVuY3Rpb24gc2V0U3RhdGUobmV4dFN0YXRlKSB7XG4gICAgX2V4dGVuZHMoaGlzdG9yeSwgbmV4dFN0YXRlKTtcblxuICAgIGhpc3RvcnkubGVuZ3RoID0gZ2xvYmFsSGlzdG9yeS5sZW5ndGg7XG5cbiAgICB0cmFuc2l0aW9uTWFuYWdlci5ub3RpZnlMaXN0ZW5lcnMoaGlzdG9yeS5sb2NhdGlvbiwgaGlzdG9yeS5hY3Rpb24pO1xuICB9O1xuXG4gIHZhciBmb3JjZU5leHRQb3AgPSBmYWxzZTtcbiAgdmFyIGlnbm9yZVBhdGggPSBudWxsO1xuXG4gIHZhciBoYW5kbGVIYXNoQ2hhbmdlID0gZnVuY3Rpb24gaGFuZGxlSGFzaENoYW5nZSgpIHtcbiAgICB2YXIgcGF0aCA9IGdldEhhc2hQYXRoKCk7XG4gICAgdmFyIGVuY29kZWRQYXRoID0gZW5jb2RlUGF0aChwYXRoKTtcblxuICAgIGlmIChwYXRoICE9PSBlbmNvZGVkUGF0aCkge1xuICAgICAgLy8gRW5zdXJlIHdlIGFsd2F5cyBoYXZlIGEgcHJvcGVybHktZW5jb2RlZCBoYXNoLlxuICAgICAgcmVwbGFjZUhhc2hQYXRoKGVuY29kZWRQYXRoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGxvY2F0aW9uID0gZ2V0RE9NTG9jYXRpb24oKTtcbiAgICAgIHZhciBwcmV2TG9jYXRpb24gPSBoaXN0b3J5LmxvY2F0aW9uO1xuXG4gICAgICBpZiAoIWZvcmNlTmV4dFBvcCAmJiAoMCwgX0xvY2F0aW9uVXRpbHMubG9jYXRpb25zQXJlRXF1YWwpKHByZXZMb2NhdGlvbiwgbG9jYXRpb24pKSByZXR1cm47IC8vIEEgaGFzaGNoYW5nZSBkb2Vzbid0IGFsd2F5cyA9PSBsb2NhdGlvbiBjaGFuZ2UuXG5cbiAgICAgIGlmIChpZ25vcmVQYXRoID09PSAoMCwgX1BhdGhVdGlscy5jcmVhdGVQYXRoKShsb2NhdGlvbikpIHJldHVybjsgLy8gSWdub3JlIHRoaXMgY2hhbmdlOyB3ZSBhbHJlYWR5IHNldFN0YXRlIGluIHB1c2gvcmVwbGFjZS5cblxuICAgICAgaWdub3JlUGF0aCA9IG51bGw7XG5cbiAgICAgIGhhbmRsZVBvcChsb2NhdGlvbik7XG4gICAgfVxuICB9O1xuXG4gIHZhciBoYW5kbGVQb3AgPSBmdW5jdGlvbiBoYW5kbGVQb3AobG9jYXRpb24pIHtcbiAgICBpZiAoZm9yY2VOZXh0UG9wKSB7XG4gICAgICBmb3JjZU5leHRQb3AgPSBmYWxzZTtcbiAgICAgIHNldFN0YXRlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBhY3Rpb24gPSAnUE9QJztcblxuICAgICAgdHJhbnNpdGlvbk1hbmFnZXIuY29uZmlybVRyYW5zaXRpb25Ubyhsb2NhdGlvbiwgYWN0aW9uLCBnZXRVc2VyQ29uZmlybWF0aW9uLCBmdW5jdGlvbiAob2spIHtcbiAgICAgICAgaWYgKG9rKSB7XG4gICAgICAgICAgc2V0U3RhdGUoeyBhY3Rpb246IGFjdGlvbiwgbG9jYXRpb246IGxvY2F0aW9uIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldmVydFBvcChsb2NhdGlvbik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICB2YXIgcmV2ZXJ0UG9wID0gZnVuY3Rpb24gcmV2ZXJ0UG9wKGZyb21Mb2NhdGlvbikge1xuICAgIHZhciB0b0xvY2F0aW9uID0gaGlzdG9yeS5sb2NhdGlvbjtcblxuICAgIC8vIFRPRE86IFdlIGNvdWxkIHByb2JhYmx5IG1ha2UgdGhpcyBtb3JlIHJlbGlhYmxlIGJ5XG4gICAgLy8ga2VlcGluZyBhIGxpc3Qgb2YgcGF0aHMgd2UndmUgc2VlbiBpbiBzZXNzaW9uU3RvcmFnZS5cbiAgICAvLyBJbnN0ZWFkLCB3ZSBqdXN0IGRlZmF1bHQgdG8gMCBmb3IgcGF0aHMgd2UgZG9uJ3Qga25vdy5cblxuICAgIHZhciB0b0luZGV4ID0gYWxsUGF0aHMubGFzdEluZGV4T2YoKDAsIF9QYXRoVXRpbHMuY3JlYXRlUGF0aCkodG9Mb2NhdGlvbikpO1xuXG4gICAgaWYgKHRvSW5kZXggPT09IC0xKSB0b0luZGV4ID0gMDtcblxuICAgIHZhciBmcm9tSW5kZXggPSBhbGxQYXRocy5sYXN0SW5kZXhPZigoMCwgX1BhdGhVdGlscy5jcmVhdGVQYXRoKShmcm9tTG9jYXRpb24pKTtcblxuICAgIGlmIChmcm9tSW5kZXggPT09IC0xKSBmcm9tSW5kZXggPSAwO1xuXG4gICAgdmFyIGRlbHRhID0gdG9JbmRleCAtIGZyb21JbmRleDtcblxuICAgIGlmIChkZWx0YSkge1xuICAgICAgZm9yY2VOZXh0UG9wID0gdHJ1ZTtcbiAgICAgIGdvKGRlbHRhKTtcbiAgICB9XG4gIH07XG5cbiAgLy8gRW5zdXJlIHRoZSBoYXNoIGlzIGVuY29kZWQgcHJvcGVybHkgYmVmb3JlIGRvaW5nIGFueXRoaW5nIGVsc2UuXG4gIHZhciBwYXRoID0gZ2V0SGFzaFBhdGgoKTtcbiAgdmFyIGVuY29kZWRQYXRoID0gZW5jb2RlUGF0aChwYXRoKTtcblxuICBpZiAocGF0aCAhPT0gZW5jb2RlZFBhdGgpIHJlcGxhY2VIYXNoUGF0aChlbmNvZGVkUGF0aCk7XG5cbiAgdmFyIGluaXRpYWxMb2NhdGlvbiA9IGdldERPTUxvY2F0aW9uKCk7XG4gIHZhciBhbGxQYXRocyA9IFsoMCwgX1BhdGhVdGlscy5jcmVhdGVQYXRoKShpbml0aWFsTG9jYXRpb24pXTtcblxuICAvLyBQdWJsaWMgaW50ZXJmYWNlXG5cbiAgdmFyIGNyZWF0ZUhyZWYgPSBmdW5jdGlvbiBjcmVhdGVIcmVmKGxvY2F0aW9uKSB7XG4gICAgcmV0dXJuICcjJyArIGVuY29kZVBhdGgoYmFzZW5hbWUgKyAoMCwgX1BhdGhVdGlscy5jcmVhdGVQYXRoKShsb2NhdGlvbikpO1xuICB9O1xuXG4gIHZhciBwdXNoID0gZnVuY3Rpb24gcHVzaChwYXRoLCBzdGF0ZSkge1xuICAgICgwLCBfd2FybmluZzIuZGVmYXVsdCkoc3RhdGUgPT09IHVuZGVmaW5lZCwgJ0hhc2ggaGlzdG9yeSBjYW5ub3QgcHVzaCBzdGF0ZTsgaXQgaXMgaWdub3JlZCcpO1xuXG4gICAgdmFyIGFjdGlvbiA9ICdQVVNIJztcbiAgICB2YXIgbG9jYXRpb24gPSAoMCwgX0xvY2F0aW9uVXRpbHMuY3JlYXRlTG9jYXRpb24pKHBhdGgsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBoaXN0b3J5LmxvY2F0aW9uKTtcblxuICAgIHRyYW5zaXRpb25NYW5hZ2VyLmNvbmZpcm1UcmFuc2l0aW9uVG8obG9jYXRpb24sIGFjdGlvbiwgZ2V0VXNlckNvbmZpcm1hdGlvbiwgZnVuY3Rpb24gKG9rKSB7XG4gICAgICBpZiAoIW9rKSByZXR1cm47XG5cbiAgICAgIHZhciBwYXRoID0gKDAsIF9QYXRoVXRpbHMuY3JlYXRlUGF0aCkobG9jYXRpb24pO1xuICAgICAgdmFyIGVuY29kZWRQYXRoID0gZW5jb2RlUGF0aChiYXNlbmFtZSArIHBhdGgpO1xuICAgICAgdmFyIGhhc2hDaGFuZ2VkID0gZ2V0SGFzaFBhdGgoKSAhPT0gZW5jb2RlZFBhdGg7XG5cbiAgICAgIGlmIChoYXNoQ2hhbmdlZCkge1xuICAgICAgICAvLyBXZSBjYW5ub3QgdGVsbCBpZiBhIGhhc2hjaGFuZ2Ugd2FzIGNhdXNlZCBieSBhIFBVU0gsIHNvIHdlJ2RcbiAgICAgICAgLy8gcmF0aGVyIHNldFN0YXRlIGhlcmUgYW5kIGlnbm9yZSB0aGUgaGFzaGNoYW5nZS4gVGhlIGNhdmVhdCBoZXJlXG4gICAgICAgIC8vIGlzIHRoYXQgb3RoZXIgaGFzaCBoaXN0b3JpZXMgaW4gdGhlIHBhZ2Ugd2lsbCBjb25zaWRlciBpdCBhIFBPUC5cbiAgICAgICAgaWdub3JlUGF0aCA9IHBhdGg7XG4gICAgICAgIHB1c2hIYXNoUGF0aChlbmNvZGVkUGF0aCk7XG5cbiAgICAgICAgdmFyIHByZXZJbmRleCA9IGFsbFBhdGhzLmxhc3RJbmRleE9mKCgwLCBfUGF0aFV0aWxzLmNyZWF0ZVBhdGgpKGhpc3RvcnkubG9jYXRpb24pKTtcbiAgICAgICAgdmFyIG5leHRQYXRocyA9IGFsbFBhdGhzLnNsaWNlKDAsIHByZXZJbmRleCA9PT0gLTEgPyAwIDogcHJldkluZGV4ICsgMSk7XG5cbiAgICAgICAgbmV4dFBhdGhzLnB1c2gocGF0aCk7XG4gICAgICAgIGFsbFBhdGhzID0gbmV4dFBhdGhzO1xuXG4gICAgICAgIHNldFN0YXRlKHsgYWN0aW9uOiBhY3Rpb24sIGxvY2F0aW9uOiBsb2NhdGlvbiB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgICgwLCBfd2FybmluZzIuZGVmYXVsdCkoZmFsc2UsICdIYXNoIGhpc3RvcnkgY2Fubm90IFBVU0ggdGhlIHNhbWUgcGF0aDsgYSBuZXcgZW50cnkgd2lsbCBub3QgYmUgYWRkZWQgdG8gdGhlIGhpc3Rvcnkgc3RhY2snKTtcblxuICAgICAgICBzZXRTdGF0ZSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuXG4gIHZhciByZXBsYWNlID0gZnVuY3Rpb24gcmVwbGFjZShwYXRoLCBzdGF0ZSkge1xuICAgICgwLCBfd2FybmluZzIuZGVmYXVsdCkoc3RhdGUgPT09IHVuZGVmaW5lZCwgJ0hhc2ggaGlzdG9yeSBjYW5ub3QgcmVwbGFjZSBzdGF0ZTsgaXQgaXMgaWdub3JlZCcpO1xuXG4gICAgdmFyIGFjdGlvbiA9ICdSRVBMQUNFJztcbiAgICB2YXIgbG9jYXRpb24gPSAoMCwgX0xvY2F0aW9uVXRpbHMuY3JlYXRlTG9jYXRpb24pKHBhdGgsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBoaXN0b3J5LmxvY2F0aW9uKTtcblxuICAgIHRyYW5zaXRpb25NYW5hZ2VyLmNvbmZpcm1UcmFuc2l0aW9uVG8obG9jYXRpb24sIGFjdGlvbiwgZ2V0VXNlckNvbmZpcm1hdGlvbiwgZnVuY3Rpb24gKG9rKSB7XG4gICAgICBpZiAoIW9rKSByZXR1cm47XG5cbiAgICAgIHZhciBwYXRoID0gKDAsIF9QYXRoVXRpbHMuY3JlYXRlUGF0aCkobG9jYXRpb24pO1xuICAgICAgdmFyIGVuY29kZWRQYXRoID0gZW5jb2RlUGF0aChiYXNlbmFtZSArIHBhdGgpO1xuICAgICAgdmFyIGhhc2hDaGFuZ2VkID0gZ2V0SGFzaFBhdGgoKSAhPT0gZW5jb2RlZFBhdGg7XG5cbiAgICAgIGlmIChoYXNoQ2hhbmdlZCkge1xuICAgICAgICAvLyBXZSBjYW5ub3QgdGVsbCBpZiBhIGhhc2hjaGFuZ2Ugd2FzIGNhdXNlZCBieSBhIFJFUExBQ0UsIHNvIHdlJ2RcbiAgICAgICAgLy8gcmF0aGVyIHNldFN0YXRlIGhlcmUgYW5kIGlnbm9yZSB0aGUgaGFzaGNoYW5nZS4gVGhlIGNhdmVhdCBoZXJlXG4gICAgICAgIC8vIGlzIHRoYXQgb3RoZXIgaGFzaCBoaXN0b3JpZXMgaW4gdGhlIHBhZ2Ugd2lsbCBjb25zaWRlciBpdCBhIFBPUC5cbiAgICAgICAgaWdub3JlUGF0aCA9IHBhdGg7XG4gICAgICAgIHJlcGxhY2VIYXNoUGF0aChlbmNvZGVkUGF0aCk7XG4gICAgICB9XG5cbiAgICAgIHZhciBwcmV2SW5kZXggPSBhbGxQYXRocy5pbmRleE9mKCgwLCBfUGF0aFV0aWxzLmNyZWF0ZVBhdGgpKGhpc3RvcnkubG9jYXRpb24pKTtcblxuICAgICAgaWYgKHByZXZJbmRleCAhPT0gLTEpIGFsbFBhdGhzW3ByZXZJbmRleF0gPSBwYXRoO1xuXG4gICAgICBzZXRTdGF0ZSh7IGFjdGlvbjogYWN0aW9uLCBsb2NhdGlvbjogbG9jYXRpb24gfSk7XG4gICAgfSk7XG4gIH07XG5cbiAgdmFyIGdvID0gZnVuY3Rpb24gZ28obikge1xuICAgICgwLCBfd2FybmluZzIuZGVmYXVsdCkoY2FuR29XaXRob3V0UmVsb2FkLCAnSGFzaCBoaXN0b3J5IGdvKG4pIGNhdXNlcyBhIGZ1bGwgcGFnZSByZWxvYWQgaW4gdGhpcyBicm93c2VyJyk7XG5cbiAgICBnbG9iYWxIaXN0b3J5LmdvKG4pO1xuICB9O1xuXG4gIHZhciBnb0JhY2sgPSBmdW5jdGlvbiBnb0JhY2soKSB7XG4gICAgcmV0dXJuIGdvKC0xKTtcbiAgfTtcblxuICB2YXIgZ29Gb3J3YXJkID0gZnVuY3Rpb24gZ29Gb3J3YXJkKCkge1xuICAgIHJldHVybiBnbygxKTtcbiAgfTtcblxuICB2YXIgbGlzdGVuZXJDb3VudCA9IDA7XG5cbiAgdmFyIGNoZWNrRE9NTGlzdGVuZXJzID0gZnVuY3Rpb24gY2hlY2tET01MaXN0ZW5lcnMoZGVsdGEpIHtcbiAgICBsaXN0ZW5lckNvdW50ICs9IGRlbHRhO1xuXG4gICAgaWYgKGxpc3RlbmVyQ291bnQgPT09IDEpIHtcbiAgICAgICgwLCBfRE9NVXRpbHMuYWRkRXZlbnRMaXN0ZW5lcikod2luZG93LCBIYXNoQ2hhbmdlRXZlbnQsIGhhbmRsZUhhc2hDaGFuZ2UpO1xuICAgIH0gZWxzZSBpZiAobGlzdGVuZXJDb3VudCA9PT0gMCkge1xuICAgICAgKDAsIF9ET01VdGlscy5yZW1vdmVFdmVudExpc3RlbmVyKSh3aW5kb3csIEhhc2hDaGFuZ2VFdmVudCwgaGFuZGxlSGFzaENoYW5nZSk7XG4gICAgfVxuICB9O1xuXG4gIHZhciBpc0Jsb2NrZWQgPSBmYWxzZTtcblxuICB2YXIgYmxvY2sgPSBmdW5jdGlvbiBibG9jaygpIHtcbiAgICB2YXIgcHJvbXB0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiBmYWxzZTtcblxuICAgIHZhciB1bmJsb2NrID0gdHJhbnNpdGlvbk1hbmFnZXIuc2V0UHJvbXB0KHByb21wdCk7XG5cbiAgICBpZiAoIWlzQmxvY2tlZCkge1xuICAgICAgY2hlY2tET01MaXN0ZW5lcnMoMSk7XG4gICAgICBpc0Jsb2NrZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoaXNCbG9ja2VkKSB7XG4gICAgICAgIGlzQmxvY2tlZCA9IGZhbHNlO1xuICAgICAgICBjaGVja0RPTUxpc3RlbmVycygtMSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB1bmJsb2NrKCk7XG4gICAgfTtcbiAgfTtcblxuICB2YXIgbGlzdGVuID0gZnVuY3Rpb24gbGlzdGVuKGxpc3RlbmVyKSB7XG4gICAgdmFyIHVubGlzdGVuID0gdHJhbnNpdGlvbk1hbmFnZXIuYXBwZW5kTGlzdGVuZXIobGlzdGVuZXIpO1xuICAgIGNoZWNrRE9NTGlzdGVuZXJzKDEpO1xuXG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNoZWNrRE9NTGlzdGVuZXJzKC0xKTtcbiAgICAgIHVubGlzdGVuKCk7XG4gICAgfTtcbiAgfTtcblxuICB2YXIgaGlzdG9yeSA9IHtcbiAgICBsZW5ndGg6IGdsb2JhbEhpc3RvcnkubGVuZ3RoLFxuICAgIGFjdGlvbjogJ1BPUCcsXG4gICAgbG9jYXRpb246IGluaXRpYWxMb2NhdGlvbixcbiAgICBjcmVhdGVIcmVmOiBjcmVhdGVIcmVmLFxuICAgIHB1c2g6IHB1c2gsXG4gICAgcmVwbGFjZTogcmVwbGFjZSxcbiAgICBnbzogZ28sXG4gICAgZ29CYWNrOiBnb0JhY2ssXG4gICAgZ29Gb3J3YXJkOiBnb0ZvcndhcmQsXG4gICAgYmxvY2s6IGJsb2NrLFxuICAgIGxpc3RlbjogbGlzdGVuXG4gIH07XG5cbiAgcmV0dXJuIGhpc3Rvcnk7XG59O1xuXG5leHBvcnRzLmRlZmF1bHQgPSBjcmVhdGVIYXNoSGlzdG9yeTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L2hpc3RvcnkvY3JlYXRlSGFzaEhpc3RvcnkuanMiLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cbnZhciBfdHlwZW9mID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIgPyBmdW5jdGlvbiAob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9IDogZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTtcblxudmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcblxudmFyIF93YXJuaW5nID0gcmVxdWlyZSgnd2FybmluZycpO1xuXG52YXIgX3dhcm5pbmcyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfd2FybmluZyk7XG5cbnZhciBfUGF0aFV0aWxzID0gcmVxdWlyZSgnLi9QYXRoVXRpbHMnKTtcblxudmFyIF9Mb2NhdGlvblV0aWxzID0gcmVxdWlyZSgnLi9Mb2NhdGlvblV0aWxzJyk7XG5cbnZhciBfY3JlYXRlVHJhbnNpdGlvbk1hbmFnZXIgPSByZXF1aXJlKCcuL2NyZWF0ZVRyYW5zaXRpb25NYW5hZ2VyJyk7XG5cbnZhciBfY3JlYXRlVHJhbnNpdGlvbk1hbmFnZXIyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfY3JlYXRlVHJhbnNpdGlvbk1hbmFnZXIpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG52YXIgY2xhbXAgPSBmdW5jdGlvbiBjbGFtcChuLCBsb3dlckJvdW5kLCB1cHBlckJvdW5kKSB7XG4gIHJldHVybiBNYXRoLm1pbihNYXRoLm1heChuLCBsb3dlckJvdW5kKSwgdXBwZXJCb3VuZCk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBoaXN0b3J5IG9iamVjdCB0aGF0IHN0b3JlcyBsb2NhdGlvbnMgaW4gbWVtb3J5LlxuICovXG52YXIgY3JlYXRlTWVtb3J5SGlzdG9yeSA9IGZ1bmN0aW9uIGNyZWF0ZU1lbW9yeUhpc3RvcnkoKSB7XG4gIHZhciBwcm9wcyA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge307XG4gIHZhciBnZXRVc2VyQ29uZmlybWF0aW9uID0gcHJvcHMuZ2V0VXNlckNvbmZpcm1hdGlvbixcbiAgICAgIF9wcm9wcyRpbml0aWFsRW50cmllcyA9IHByb3BzLmluaXRpYWxFbnRyaWVzLFxuICAgICAgaW5pdGlhbEVudHJpZXMgPSBfcHJvcHMkaW5pdGlhbEVudHJpZXMgPT09IHVuZGVmaW5lZCA/IFsnLyddIDogX3Byb3BzJGluaXRpYWxFbnRyaWVzLFxuICAgICAgX3Byb3BzJGluaXRpYWxJbmRleCA9IHByb3BzLmluaXRpYWxJbmRleCxcbiAgICAgIGluaXRpYWxJbmRleCA9IF9wcm9wcyRpbml0aWFsSW5kZXggPT09IHVuZGVmaW5lZCA/IDAgOiBfcHJvcHMkaW5pdGlhbEluZGV4LFxuICAgICAgX3Byb3BzJGtleUxlbmd0aCA9IHByb3BzLmtleUxlbmd0aCxcbiAgICAgIGtleUxlbmd0aCA9IF9wcm9wcyRrZXlMZW5ndGggPT09IHVuZGVmaW5lZCA/IDYgOiBfcHJvcHMka2V5TGVuZ3RoO1xuXG5cbiAgdmFyIHRyYW5zaXRpb25NYW5hZ2VyID0gKDAsIF9jcmVhdGVUcmFuc2l0aW9uTWFuYWdlcjIuZGVmYXVsdCkoKTtcblxuICB2YXIgc2V0U3RhdGUgPSBmdW5jdGlvbiBzZXRTdGF0ZShuZXh0U3RhdGUpIHtcbiAgICBfZXh0ZW5kcyhoaXN0b3J5LCBuZXh0U3RhdGUpO1xuXG4gICAgaGlzdG9yeS5sZW5ndGggPSBoaXN0b3J5LmVudHJpZXMubGVuZ3RoO1xuXG4gICAgdHJhbnNpdGlvbk1hbmFnZXIubm90aWZ5TGlzdGVuZXJzKGhpc3RvcnkubG9jYXRpb24sIGhpc3RvcnkuYWN0aW9uKTtcbiAgfTtcblxuICB2YXIgY3JlYXRlS2V5ID0gZnVuY3Rpb24gY3JlYXRlS2V5KCkge1xuICAgIHJldHVybiBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHIoMiwga2V5TGVuZ3RoKTtcbiAgfTtcblxuICB2YXIgaW5kZXggPSBjbGFtcChpbml0aWFsSW5kZXgsIDAsIGluaXRpYWxFbnRyaWVzLmxlbmd0aCAtIDEpO1xuICB2YXIgZW50cmllcyA9IGluaXRpYWxFbnRyaWVzLm1hcChmdW5jdGlvbiAoZW50cnkpIHtcbiAgICByZXR1cm4gdHlwZW9mIGVudHJ5ID09PSAnc3RyaW5nJyA/ICgwLCBfTG9jYXRpb25VdGlscy5jcmVhdGVMb2NhdGlvbikoZW50cnksIHVuZGVmaW5lZCwgY3JlYXRlS2V5KCkpIDogKDAsIF9Mb2NhdGlvblV0aWxzLmNyZWF0ZUxvY2F0aW9uKShlbnRyeSwgdW5kZWZpbmVkLCBlbnRyeS5rZXkgfHwgY3JlYXRlS2V5KCkpO1xuICB9KTtcblxuICAvLyBQdWJsaWMgaW50ZXJmYWNlXG5cbiAgdmFyIGNyZWF0ZUhyZWYgPSBfUGF0aFV0aWxzLmNyZWF0ZVBhdGg7XG5cbiAgdmFyIHB1c2ggPSBmdW5jdGlvbiBwdXNoKHBhdGgsIHN0YXRlKSB7XG4gICAgKDAsIF93YXJuaW5nMi5kZWZhdWx0KSghKCh0eXBlb2YgcGF0aCA9PT0gJ3VuZGVmaW5lZCcgPyAndW5kZWZpbmVkJyA6IF90eXBlb2YocGF0aCkpID09PSAnb2JqZWN0JyAmJiBwYXRoLnN0YXRlICE9PSB1bmRlZmluZWQgJiYgc3RhdGUgIT09IHVuZGVmaW5lZCksICdZb3Ugc2hvdWxkIGF2b2lkIHByb3ZpZGluZyBhIDJuZCBzdGF0ZSBhcmd1bWVudCB0byBwdXNoIHdoZW4gdGhlIDFzdCAnICsgJ2FyZ3VtZW50IGlzIGEgbG9jYXRpb24tbGlrZSBvYmplY3QgdGhhdCBhbHJlYWR5IGhhcyBzdGF0ZTsgaXQgaXMgaWdub3JlZCcpO1xuXG4gICAgdmFyIGFjdGlvbiA9ICdQVVNIJztcbiAgICB2YXIgbG9jYXRpb24gPSAoMCwgX0xvY2F0aW9uVXRpbHMuY3JlYXRlTG9jYXRpb24pKHBhdGgsIHN0YXRlLCBjcmVhdGVLZXkoKSwgaGlzdG9yeS5sb2NhdGlvbik7XG5cbiAgICB0cmFuc2l0aW9uTWFuYWdlci5jb25maXJtVHJhbnNpdGlvblRvKGxvY2F0aW9uLCBhY3Rpb24sIGdldFVzZXJDb25maXJtYXRpb24sIGZ1bmN0aW9uIChvaykge1xuICAgICAgaWYgKCFvaykgcmV0dXJuO1xuXG4gICAgICB2YXIgcHJldkluZGV4ID0gaGlzdG9yeS5pbmRleDtcbiAgICAgIHZhciBuZXh0SW5kZXggPSBwcmV2SW5kZXggKyAxO1xuXG4gICAgICB2YXIgbmV4dEVudHJpZXMgPSBoaXN0b3J5LmVudHJpZXMuc2xpY2UoMCk7XG4gICAgICBpZiAobmV4dEVudHJpZXMubGVuZ3RoID4gbmV4dEluZGV4KSB7XG4gICAgICAgIG5leHRFbnRyaWVzLnNwbGljZShuZXh0SW5kZXgsIG5leHRFbnRyaWVzLmxlbmd0aCAtIG5leHRJbmRleCwgbG9jYXRpb24pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV4dEVudHJpZXMucHVzaChsb2NhdGlvbik7XG4gICAgICB9XG5cbiAgICAgIHNldFN0YXRlKHtcbiAgICAgICAgYWN0aW9uOiBhY3Rpb24sXG4gICAgICAgIGxvY2F0aW9uOiBsb2NhdGlvbixcbiAgICAgICAgaW5kZXg6IG5leHRJbmRleCxcbiAgICAgICAgZW50cmllczogbmV4dEVudHJpZXNcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuXG4gIHZhciByZXBsYWNlID0gZnVuY3Rpb24gcmVwbGFjZShwYXRoLCBzdGF0ZSkge1xuICAgICgwLCBfd2FybmluZzIuZGVmYXVsdCkoISgodHlwZW9mIHBhdGggPT09ICd1bmRlZmluZWQnID8gJ3VuZGVmaW5lZCcgOiBfdHlwZW9mKHBhdGgpKSA9PT0gJ29iamVjdCcgJiYgcGF0aC5zdGF0ZSAhPT0gdW5kZWZpbmVkICYmIHN0YXRlICE9PSB1bmRlZmluZWQpLCAnWW91IHNob3VsZCBhdm9pZCBwcm92aWRpbmcgYSAybmQgc3RhdGUgYXJndW1lbnQgdG8gcmVwbGFjZSB3aGVuIHRoZSAxc3QgJyArICdhcmd1bWVudCBpcyBhIGxvY2F0aW9uLWxpa2Ugb2JqZWN0IHRoYXQgYWxyZWFkeSBoYXMgc3RhdGU7IGl0IGlzIGlnbm9yZWQnKTtcblxuICAgIHZhciBhY3Rpb24gPSAnUkVQTEFDRSc7XG4gICAgdmFyIGxvY2F0aW9uID0gKDAsIF9Mb2NhdGlvblV0aWxzLmNyZWF0ZUxvY2F0aW9uKShwYXRoLCBzdGF0ZSwgY3JlYXRlS2V5KCksIGhpc3RvcnkubG9jYXRpb24pO1xuXG4gICAgdHJhbnNpdGlvbk1hbmFnZXIuY29uZmlybVRyYW5zaXRpb25Ubyhsb2NhdGlvbiwgYWN0aW9uLCBnZXRVc2VyQ29uZmlybWF0aW9uLCBmdW5jdGlvbiAob2spIHtcbiAgICAgIGlmICghb2spIHJldHVybjtcblxuICAgICAgaGlzdG9yeS5lbnRyaWVzW2hpc3RvcnkuaW5kZXhdID0gbG9jYXRpb247XG5cbiAgICAgIHNldFN0YXRlKHsgYWN0aW9uOiBhY3Rpb24sIGxvY2F0aW9uOiBsb2NhdGlvbiB9KTtcbiAgICB9KTtcbiAgfTtcblxuICB2YXIgZ28gPSBmdW5jdGlvbiBnbyhuKSB7XG4gICAgdmFyIG5leHRJbmRleCA9IGNsYW1wKGhpc3RvcnkuaW5kZXggKyBuLCAwLCBoaXN0b3J5LmVudHJpZXMubGVuZ3RoIC0gMSk7XG5cbiAgICB2YXIgYWN0aW9uID0gJ1BPUCc7XG4gICAgdmFyIGxvY2F0aW9uID0gaGlzdG9yeS5lbnRyaWVzW25leHRJbmRleF07XG5cbiAgICB0cmFuc2l0aW9uTWFuYWdlci5jb25maXJtVHJhbnNpdGlvblRvKGxvY2F0aW9uLCBhY3Rpb24sIGdldFVzZXJDb25maXJtYXRpb24sIGZ1bmN0aW9uIChvaykge1xuICAgICAgaWYgKG9rKSB7XG4gICAgICAgIHNldFN0YXRlKHtcbiAgICAgICAgICBhY3Rpb246IGFjdGlvbixcbiAgICAgICAgICBsb2NhdGlvbjogbG9jYXRpb24sXG4gICAgICAgICAgaW5kZXg6IG5leHRJbmRleFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIE1pbWljIHRoZSBiZWhhdmlvciBvZiBET00gaGlzdG9yaWVzIGJ5XG4gICAgICAgIC8vIGNhdXNpbmcgYSByZW5kZXIgYWZ0ZXIgYSBjYW5jZWxsZWQgUE9QLlxuICAgICAgICBzZXRTdGF0ZSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuXG4gIHZhciBnb0JhY2sgPSBmdW5jdGlvbiBnb0JhY2soKSB7XG4gICAgcmV0dXJuIGdvKC0xKTtcbiAgfTtcblxuICB2YXIgZ29Gb3J3YXJkID0gZnVuY3Rpb24gZ29Gb3J3YXJkKCkge1xuICAgIHJldHVybiBnbygxKTtcbiAgfTtcblxuICB2YXIgY2FuR28gPSBmdW5jdGlvbiBjYW5HbyhuKSB7XG4gICAgdmFyIG5leHRJbmRleCA9IGhpc3RvcnkuaW5kZXggKyBuO1xuICAgIHJldHVybiBuZXh0SW5kZXggPj0gMCAmJiBuZXh0SW5kZXggPCBoaXN0b3J5LmVudHJpZXMubGVuZ3RoO1xuICB9O1xuXG4gIHZhciBibG9jayA9IGZ1bmN0aW9uIGJsb2NrKCkge1xuICAgIHZhciBwcm9tcHQgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IGZhbHNlO1xuICAgIHJldHVybiB0cmFuc2l0aW9uTWFuYWdlci5zZXRQcm9tcHQocHJvbXB0KTtcbiAgfTtcblxuICB2YXIgbGlzdGVuID0gZnVuY3Rpb24gbGlzdGVuKGxpc3RlbmVyKSB7XG4gICAgcmV0dXJuIHRyYW5zaXRpb25NYW5hZ2VyLmFwcGVuZExpc3RlbmVyKGxpc3RlbmVyKTtcbiAgfTtcblxuICB2YXIgaGlzdG9yeSA9IHtcbiAgICBsZW5ndGg6IGVudHJpZXMubGVuZ3RoLFxuICAgIGFjdGlvbjogJ1BPUCcsXG4gICAgbG9jYXRpb246IGVudHJpZXNbaW5kZXhdLFxuICAgIGluZGV4OiBpbmRleCxcbiAgICBlbnRyaWVzOiBlbnRyaWVzLFxuICAgIGNyZWF0ZUhyZWY6IGNyZWF0ZUhyZWYsXG4gICAgcHVzaDogcHVzaCxcbiAgICByZXBsYWNlOiByZXBsYWNlLFxuICAgIGdvOiBnbyxcbiAgICBnb0JhY2s6IGdvQmFjayxcbiAgICBnb0ZvcndhcmQ6IGdvRm9yd2FyZCxcbiAgICBjYW5HbzogY2FuR28sXG4gICAgYmxvY2s6IGJsb2NrLFxuICAgIGxpc3RlbjogbGlzdGVuXG4gIH07XG5cbiAgcmV0dXJuIGhpc3Rvcnk7XG59O1xuXG5leHBvcnRzLmRlZmF1bHQgPSBjcmVhdGVNZW1vcnlIaXN0b3J5O1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vaGlzdG9yeS9jcmVhdGVNZW1vcnlIaXN0b3J5LmpzIiwiaW1wb3J0IFN5bWJvbCBmcm9tICcuL19TeW1ib2wuanMnO1xuaW1wb3J0IGdldFJhd1RhZyBmcm9tICcuL19nZXRSYXdUYWcuanMnO1xuaW1wb3J0IG9iamVjdFRvU3RyaW5nIGZyb20gJy4vX29iamVjdFRvU3RyaW5nLmpzJztcblxuLyoqIGBPYmplY3QjdG9TdHJpbmdgIHJlc3VsdCByZWZlcmVuY2VzLiAqL1xudmFyIG51bGxUYWcgPSAnW29iamVjdCBOdWxsXScsXG4gICAgdW5kZWZpbmVkVGFnID0gJ1tvYmplY3QgVW5kZWZpbmVkXSc7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHN5bVRvU3RyaW5nVGFnID0gU3ltYm9sID8gU3ltYm9sLnRvU3RyaW5nVGFnIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBnZXRUYWdgIHdpdGhvdXQgZmFsbGJhY2tzIGZvciBidWdneSBlbnZpcm9ubWVudHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgYHRvU3RyaW5nVGFnYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUdldFRhZyh2YWx1ZSkge1xuICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgIHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkVGFnIDogbnVsbFRhZztcbiAgfVxuICByZXR1cm4gKHN5bVRvU3RyaW5nVGFnICYmIHN5bVRvU3RyaW5nVGFnIGluIE9iamVjdCh2YWx1ZSkpXG4gICAgPyBnZXRSYXdUYWcodmFsdWUpXG4gICAgOiBvYmplY3RUb1N0cmluZyh2YWx1ZSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJhc2VHZXRUYWc7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L2xvZGFzaC1lcy9fYmFzZUdldFRhZy5qcyIsIi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZ2xvYmFsYCBmcm9tIE5vZGUuanMuICovXG52YXIgZnJlZUdsb2JhbCA9IHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsICYmIGdsb2JhbC5PYmplY3QgPT09IE9iamVjdCAmJiBnbG9iYWw7XG5cbmV4cG9ydCBkZWZhdWx0IGZyZWVHbG9iYWw7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L2xvZGFzaC1lcy9fZnJlZUdsb2JhbC5qcyIsImltcG9ydCBvdmVyQXJnIGZyb20gJy4vX292ZXJBcmcuanMnO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBnZXRQcm90b3R5cGUgPSBvdmVyQXJnKE9iamVjdC5nZXRQcm90b3R5cGVPZiwgT2JqZWN0KTtcblxuZXhwb3J0IGRlZmF1bHQgZ2V0UHJvdG90eXBlO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9sb2Rhc2gtZXMvX2dldFByb3RvdHlwZS5qcyIsImltcG9ydCBTeW1ib2wgZnJvbSAnLi9fU3ltYm9sLmpzJztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBVc2VkIHRvIHJlc29sdmUgdGhlXG4gKiBbYHRvU3RyaW5nVGFnYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZylcbiAqIG9mIHZhbHVlcy5cbiAqL1xudmFyIG5hdGl2ZU9iamVjdFRvU3RyaW5nID0gb2JqZWN0UHJvdG8udG9TdHJpbmc7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHN5bVRvU3RyaW5nVGFnID0gU3ltYm9sID8gU3ltYm9sLnRvU3RyaW5nVGFnIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUdldFRhZ2Agd2hpY2ggaWdub3JlcyBgU3ltYm9sLnRvU3RyaW5nVGFnYCB2YWx1ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgcmF3IGB0b1N0cmluZ1RhZ2AuXG4gKi9cbmZ1bmN0aW9uIGdldFJhd1RhZyh2YWx1ZSkge1xuICB2YXIgaXNPd24gPSBoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBzeW1Ub1N0cmluZ1RhZyksXG4gICAgICB0YWcgPSB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ107XG5cbiAgdHJ5IHtcbiAgICB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ10gPSB1bmRlZmluZWQ7XG4gICAgdmFyIHVubWFza2VkID0gdHJ1ZTtcbiAgfSBjYXRjaCAoZSkge31cblxuICB2YXIgcmVzdWx0ID0gbmF0aXZlT2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSk7XG4gIGlmICh1bm1hc2tlZCkge1xuICAgIGlmIChpc093bikge1xuICAgICAgdmFsdWVbc3ltVG9TdHJpbmdUYWddID0gdGFnO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWxldGUgdmFsdWVbc3ltVG9TdHJpbmdUYWddO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBnZXRSYXdUYWc7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L2xvZGFzaC1lcy9fZ2V0UmF3VGFnLmpzIiwiLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqXG4gKiBVc2VkIHRvIHJlc29sdmUgdGhlXG4gKiBbYHRvU3RyaW5nVGFnYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZylcbiAqIG9mIHZhbHVlcy5cbiAqL1xudmFyIG5hdGl2ZU9iamVjdFRvU3RyaW5nID0gb2JqZWN0UHJvdG8udG9TdHJpbmc7XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIHN0cmluZyB1c2luZyBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgc3RyaW5nLlxuICovXG5mdW5jdGlvbiBvYmplY3RUb1N0cmluZyh2YWx1ZSkge1xuICByZXR1cm4gbmF0aXZlT2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IG9iamVjdFRvU3RyaW5nO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9sb2Rhc2gtZXMvX29iamVjdFRvU3RyaW5nLmpzIiwiLyoqXG4gKiBDcmVhdGVzIGEgdW5hcnkgZnVuY3Rpb24gdGhhdCBpbnZva2VzIGBmdW5jYCB3aXRoIGl0cyBhcmd1bWVudCB0cmFuc2Zvcm1lZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gd3JhcC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHRyYW5zZm9ybSBUaGUgYXJndW1lbnQgdHJhbnNmb3JtLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIG92ZXJBcmcoZnVuYywgdHJhbnNmb3JtKSB7XG4gIHJldHVybiBmdW5jdGlvbihhcmcpIHtcbiAgICByZXR1cm4gZnVuYyh0cmFuc2Zvcm0oYXJnKSk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IG92ZXJBcmc7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L2xvZGFzaC1lcy9fb3ZlckFyZy5qcyIsImltcG9ydCBmcmVlR2xvYmFsIGZyb20gJy4vX2ZyZWVHbG9iYWwuanMnO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYHNlbGZgLiAqL1xudmFyIGZyZWVTZWxmID0gdHlwZW9mIHNlbGYgPT0gJ29iamVjdCcgJiYgc2VsZiAmJiBzZWxmLk9iamVjdCA9PT0gT2JqZWN0ICYmIHNlbGY7XG5cbi8qKiBVc2VkIGFzIGEgcmVmZXJlbmNlIHRvIHRoZSBnbG9iYWwgb2JqZWN0LiAqL1xudmFyIHJvb3QgPSBmcmVlR2xvYmFsIHx8IGZyZWVTZWxmIHx8IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG5cbmV4cG9ydCBkZWZhdWx0IHJvb3Q7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L2xvZGFzaC1lcy9fcm9vdC5qcyIsIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UuIEEgdmFsdWUgaXMgb2JqZWN0LWxpa2UgaWYgaXQncyBub3QgYG51bGxgXG4gKiBhbmQgaGFzIGEgYHR5cGVvZmAgcmVzdWx0IG9mIFwib2JqZWN0XCIuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgb2JqZWN0LWxpa2UsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc09iamVjdExpa2Uoe30pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdExpa2UoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc09iamVjdExpa2UobnVsbCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc09iamVjdExpa2UodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgdHlwZW9mIHZhbHVlID09ICdvYmplY3QnO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc09iamVjdExpa2U7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L2xvZGFzaC1lcy9pc09iamVjdExpa2UuanMiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHZhciBpbnZhcmlhbnQgPSByZXF1aXJlKCdmYmpzL2xpYi9pbnZhcmlhbnQnKTtcbiAgdmFyIHdhcm5pbmcgPSByZXF1aXJlKCdmYmpzL2xpYi93YXJuaW5nJyk7XG4gIHZhciBSZWFjdFByb3BUeXBlc1NlY3JldCA9IHJlcXVpcmUoJy4vbGliL1JlYWN0UHJvcFR5cGVzU2VjcmV0Jyk7XG4gIHZhciBsb2dnZWRUeXBlRmFpbHVyZXMgPSB7fTtcbn1cblxuLyoqXG4gKiBBc3NlcnQgdGhhdCB0aGUgdmFsdWVzIG1hdGNoIHdpdGggdGhlIHR5cGUgc3BlY3MuXG4gKiBFcnJvciBtZXNzYWdlcyBhcmUgbWVtb3JpemVkIGFuZCB3aWxsIG9ubHkgYmUgc2hvd24gb25jZS5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gdHlwZVNwZWNzIE1hcCBvZiBuYW1lIHRvIGEgUmVhY3RQcm9wVHlwZVxuICogQHBhcmFtIHtvYmplY3R9IHZhbHVlcyBSdW50aW1lIHZhbHVlcyB0aGF0IG5lZWQgdG8gYmUgdHlwZS1jaGVja2VkXG4gKiBAcGFyYW0ge3N0cmluZ30gbG9jYXRpb24gZS5nLiBcInByb3BcIiwgXCJjb250ZXh0XCIsIFwiY2hpbGQgY29udGV4dFwiXG4gKiBAcGFyYW0ge3N0cmluZ30gY29tcG9uZW50TmFtZSBOYW1lIG9mIHRoZSBjb21wb25lbnQgZm9yIGVycm9yIG1lc3NhZ2VzLlxuICogQHBhcmFtIHs/RnVuY3Rpb259IGdldFN0YWNrIFJldHVybnMgdGhlIGNvbXBvbmVudCBzdGFjay5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGNoZWNrUHJvcFR5cGVzKHR5cGVTcGVjcywgdmFsdWVzLCBsb2NhdGlvbiwgY29tcG9uZW50TmFtZSwgZ2V0U3RhY2spIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBmb3IgKHZhciB0eXBlU3BlY05hbWUgaW4gdHlwZVNwZWNzKSB7XG4gICAgICBpZiAodHlwZVNwZWNzLmhhc093blByb3BlcnR5KHR5cGVTcGVjTmFtZSkpIHtcbiAgICAgICAgdmFyIGVycm9yO1xuICAgICAgICAvLyBQcm9wIHR5cGUgdmFsaWRhdGlvbiBtYXkgdGhyb3cuIEluIGNhc2UgdGhleSBkbywgd2UgZG9uJ3Qgd2FudCB0b1xuICAgICAgICAvLyBmYWlsIHRoZSByZW5kZXIgcGhhc2Ugd2hlcmUgaXQgZGlkbid0IGZhaWwgYmVmb3JlLiBTbyB3ZSBsb2cgaXQuXG4gICAgICAgIC8vIEFmdGVyIHRoZXNlIGhhdmUgYmVlbiBjbGVhbmVkIHVwLCB3ZSdsbCBsZXQgdGhlbSB0aHJvdy5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyBUaGlzIGlzIGludGVudGlvbmFsbHkgYW4gaW52YXJpYW50IHRoYXQgZ2V0cyBjYXVnaHQuIEl0J3MgdGhlIHNhbWVcbiAgICAgICAgICAvLyBiZWhhdmlvciBhcyB3aXRob3V0IHRoaXMgc3RhdGVtZW50IGV4Y2VwdCB3aXRoIGEgYmV0dGVyIG1lc3NhZ2UuXG4gICAgICAgICAgaW52YXJpYW50KHR5cGVvZiB0eXBlU3BlY3NbdHlwZVNwZWNOYW1lXSA9PT0gJ2Z1bmN0aW9uJywgJyVzOiAlcyB0eXBlIGAlc2AgaXMgaW52YWxpZDsgaXQgbXVzdCBiZSBhIGZ1bmN0aW9uLCB1c3VhbGx5IGZyb20gJyArICdSZWFjdC5Qcm9wVHlwZXMuJywgY29tcG9uZW50TmFtZSB8fCAnUmVhY3QgY2xhc3MnLCBsb2NhdGlvbiwgdHlwZVNwZWNOYW1lKTtcbiAgICAgICAgICBlcnJvciA9IHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdKHZhbHVlcywgdHlwZVNwZWNOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgbnVsbCwgUmVhY3RQcm9wVHlwZXNTZWNyZXQpO1xuICAgICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICAgIGVycm9yID0gZXg7XG4gICAgICAgIH1cbiAgICAgICAgd2FybmluZyghZXJyb3IgfHwgZXJyb3IgaW5zdGFuY2VvZiBFcnJvciwgJyVzOiB0eXBlIHNwZWNpZmljYXRpb24gb2YgJXMgYCVzYCBpcyBpbnZhbGlkOyB0aGUgdHlwZSBjaGVja2VyICcgKyAnZnVuY3Rpb24gbXVzdCByZXR1cm4gYG51bGxgIG9yIGFuIGBFcnJvcmAgYnV0IHJldHVybmVkIGEgJXMuICcgKyAnWW91IG1heSBoYXZlIGZvcmdvdHRlbiB0byBwYXNzIGFuIGFyZ3VtZW50IHRvIHRoZSB0eXBlIGNoZWNrZXIgJyArICdjcmVhdG9yIChhcnJheU9mLCBpbnN0YW5jZU9mLCBvYmplY3RPZiwgb25lT2YsIG9uZU9mVHlwZSwgYW5kICcgKyAnc2hhcGUgYWxsIHJlcXVpcmUgYW4gYXJndW1lbnQpLicsIGNvbXBvbmVudE5hbWUgfHwgJ1JlYWN0IGNsYXNzJywgbG9jYXRpb24sIHR5cGVTcGVjTmFtZSwgdHlwZW9mIGVycm9yKTtcbiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgJiYgIShlcnJvci5tZXNzYWdlIGluIGxvZ2dlZFR5cGVGYWlsdXJlcykpIHtcbiAgICAgICAgICAvLyBPbmx5IG1vbml0b3IgdGhpcyBmYWlsdXJlIG9uY2UgYmVjYXVzZSB0aGVyZSB0ZW5kcyB0byBiZSBhIGxvdCBvZiB0aGVcbiAgICAgICAgICAvLyBzYW1lIGVycm9yLlxuICAgICAgICAgIGxvZ2dlZFR5cGVGYWlsdXJlc1tlcnJvci5tZXNzYWdlXSA9IHRydWU7XG5cbiAgICAgICAgICB2YXIgc3RhY2sgPSBnZXRTdGFjayA/IGdldFN0YWNrKCkgOiAnJztcblxuICAgICAgICAgIHdhcm5pbmcoZmFsc2UsICdGYWlsZWQgJXMgdHlwZTogJXMlcycsIGxvY2F0aW9uLCBlcnJvci5tZXNzYWdlLCBzdGFjayAhPSBudWxsID8gc3RhY2sgOiAnJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjaGVja1Byb3BUeXBlcztcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcHJvcC10eXBlcy9jaGVja1Byb3BUeXBlcy5qcyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIGVtcHR5RnVuY3Rpb24gPSByZXF1aXJlKCdmYmpzL2xpYi9lbXB0eUZ1bmN0aW9uJyk7XG52YXIgaW52YXJpYW50ID0gcmVxdWlyZSgnZmJqcy9saWIvaW52YXJpYW50Jyk7XG52YXIgUmVhY3RQcm9wVHlwZXNTZWNyZXQgPSByZXF1aXJlKCcuL2xpYi9SZWFjdFByb3BUeXBlc1NlY3JldCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkge1xuICBmdW5jdGlvbiBzaGltKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwgc2VjcmV0KSB7XG4gICAgaWYgKHNlY3JldCA9PT0gUmVhY3RQcm9wVHlwZXNTZWNyZXQpIHtcbiAgICAgIC8vIEl0IGlzIHN0aWxsIHNhZmUgd2hlbiBjYWxsZWQgZnJvbSBSZWFjdC5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaW52YXJpYW50KFxuICAgICAgZmFsc2UsXG4gICAgICAnQ2FsbGluZyBQcm9wVHlwZXMgdmFsaWRhdG9ycyBkaXJlY3RseSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBgcHJvcC10eXBlc2AgcGFja2FnZS4gJyArXG4gICAgICAnVXNlIFByb3BUeXBlcy5jaGVja1Byb3BUeXBlcygpIHRvIGNhbGwgdGhlbS4gJyArXG4gICAgICAnUmVhZCBtb3JlIGF0IGh0dHA6Ly9mYi5tZS91c2UtY2hlY2stcHJvcC10eXBlcydcbiAgICApO1xuICB9O1xuICBzaGltLmlzUmVxdWlyZWQgPSBzaGltO1xuICBmdW5jdGlvbiBnZXRTaGltKCkge1xuICAgIHJldHVybiBzaGltO1xuICB9O1xuICAvLyBJbXBvcnRhbnQhXG4gIC8vIEtlZXAgdGhpcyBsaXN0IGluIHN5bmMgd2l0aCBwcm9kdWN0aW9uIHZlcnNpb24gaW4gYC4vZmFjdG9yeVdpdGhUeXBlQ2hlY2tlcnMuanNgLlxuICB2YXIgUmVhY3RQcm9wVHlwZXMgPSB7XG4gICAgYXJyYXk6IHNoaW0sXG4gICAgYm9vbDogc2hpbSxcbiAgICBmdW5jOiBzaGltLFxuICAgIG51bWJlcjogc2hpbSxcbiAgICBvYmplY3Q6IHNoaW0sXG4gICAgc3RyaW5nOiBzaGltLFxuICAgIHN5bWJvbDogc2hpbSxcblxuICAgIGFueTogc2hpbSxcbiAgICBhcnJheU9mOiBnZXRTaGltLFxuICAgIGVsZW1lbnQ6IHNoaW0sXG4gICAgaW5zdGFuY2VPZjogZ2V0U2hpbSxcbiAgICBub2RlOiBzaGltLFxuICAgIG9iamVjdE9mOiBnZXRTaGltLFxuICAgIG9uZU9mOiBnZXRTaGltLFxuICAgIG9uZU9mVHlwZTogZ2V0U2hpbSxcbiAgICBzaGFwZTogZ2V0U2hpbVxuICB9O1xuXG4gIFJlYWN0UHJvcFR5cGVzLmNoZWNrUHJvcFR5cGVzID0gZW1wdHlGdW5jdGlvbjtcbiAgUmVhY3RQcm9wVHlwZXMuUHJvcFR5cGVzID0gUmVhY3RQcm9wVHlwZXM7XG5cbiAgcmV0dXJuIFJlYWN0UHJvcFR5cGVzO1xufTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcHJvcC10eXBlcy9mYWN0b3J5V2l0aFRocm93aW5nU2hpbXMuanMiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgQVJJQURPTVByb3BlcnR5Q29uZmlnID0ge1xuICBQcm9wZXJ0aWVzOiB7XG4gICAgLy8gR2xvYmFsIFN0YXRlcyBhbmQgUHJvcGVydGllc1xuICAgICdhcmlhLWN1cnJlbnQnOiAwLCAvLyBzdGF0ZVxuICAgICdhcmlhLWRldGFpbHMnOiAwLFxuICAgICdhcmlhLWRpc2FibGVkJzogMCwgLy8gc3RhdGVcbiAgICAnYXJpYS1oaWRkZW4nOiAwLCAvLyBzdGF0ZVxuICAgICdhcmlhLWludmFsaWQnOiAwLCAvLyBzdGF0ZVxuICAgICdhcmlhLWtleXNob3J0Y3V0cyc6IDAsXG4gICAgJ2FyaWEtbGFiZWwnOiAwLFxuICAgICdhcmlhLXJvbGVkZXNjcmlwdGlvbic6IDAsXG4gICAgLy8gV2lkZ2V0IEF0dHJpYnV0ZXNcbiAgICAnYXJpYS1hdXRvY29tcGxldGUnOiAwLFxuICAgICdhcmlhLWNoZWNrZWQnOiAwLFxuICAgICdhcmlhLWV4cGFuZGVkJzogMCxcbiAgICAnYXJpYS1oYXNwb3B1cCc6IDAsXG4gICAgJ2FyaWEtbGV2ZWwnOiAwLFxuICAgICdhcmlhLW1vZGFsJzogMCxcbiAgICAnYXJpYS1tdWx0aWxpbmUnOiAwLFxuICAgICdhcmlhLW11bHRpc2VsZWN0YWJsZSc6IDAsXG4gICAgJ2FyaWEtb3JpZW50YXRpb24nOiAwLFxuICAgICdhcmlhLXBsYWNlaG9sZGVyJzogMCxcbiAgICAnYXJpYS1wcmVzc2VkJzogMCxcbiAgICAnYXJpYS1yZWFkb25seSc6IDAsXG4gICAgJ2FyaWEtcmVxdWlyZWQnOiAwLFxuICAgICdhcmlhLXNlbGVjdGVkJzogMCxcbiAgICAnYXJpYS1zb3J0JzogMCxcbiAgICAnYXJpYS12YWx1ZW1heCc6IDAsXG4gICAgJ2FyaWEtdmFsdWVtaW4nOiAwLFxuICAgICdhcmlhLXZhbHVlbm93JzogMCxcbiAgICAnYXJpYS12YWx1ZXRleHQnOiAwLFxuICAgIC8vIExpdmUgUmVnaW9uIEF0dHJpYnV0ZXNcbiAgICAnYXJpYS1hdG9taWMnOiAwLFxuICAgICdhcmlhLWJ1c3knOiAwLFxuICAgICdhcmlhLWxpdmUnOiAwLFxuICAgICdhcmlhLXJlbGV2YW50JzogMCxcbiAgICAvLyBEcmFnLWFuZC1Ecm9wIEF0dHJpYnV0ZXNcbiAgICAnYXJpYS1kcm9wZWZmZWN0JzogMCxcbiAgICAnYXJpYS1ncmFiYmVkJzogMCxcbiAgICAvLyBSZWxhdGlvbnNoaXAgQXR0cmlidXRlc1xuICAgICdhcmlhLWFjdGl2ZWRlc2NlbmRhbnQnOiAwLFxuICAgICdhcmlhLWNvbGNvdW50JzogMCxcbiAgICAnYXJpYS1jb2xpbmRleCc6IDAsXG4gICAgJ2FyaWEtY29sc3Bhbic6IDAsXG4gICAgJ2FyaWEtY29udHJvbHMnOiAwLFxuICAgICdhcmlhLWRlc2NyaWJlZGJ5JzogMCxcbiAgICAnYXJpYS1lcnJvcm1lc3NhZ2UnOiAwLFxuICAgICdhcmlhLWZsb3d0byc6IDAsXG4gICAgJ2FyaWEtbGFiZWxsZWRieSc6IDAsXG4gICAgJ2FyaWEtb3ducyc6IDAsXG4gICAgJ2FyaWEtcG9zaW5zZXQnOiAwLFxuICAgICdhcmlhLXJvd2NvdW50JzogMCxcbiAgICAnYXJpYS1yb3dpbmRleCc6IDAsXG4gICAgJ2FyaWEtcm93c3Bhbic6IDAsXG4gICAgJ2FyaWEtc2V0c2l6ZSc6IDBcbiAgfSxcbiAgRE9NQXR0cmlidXRlTmFtZXM6IHt9LFxuICBET01Qcm9wZXJ0eU5hbWVzOiB7fVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBBUklBRE9NUHJvcGVydHlDb25maWc7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1kb20vbGliL0FSSUFET01Qcm9wZXJ0eUNvbmZpZy5qcyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBSZWFjdERPTUNvbXBvbmVudFRyZWUgPSByZXF1aXJlKCcuL1JlYWN0RE9NQ29tcG9uZW50VHJlZScpO1xuXG52YXIgZm9jdXNOb2RlID0gcmVxdWlyZSgnZmJqcy9saWIvZm9jdXNOb2RlJyk7XG5cbnZhciBBdXRvRm9jdXNVdGlscyA9IHtcbiAgZm9jdXNET01Db21wb25lbnQ6IGZ1bmN0aW9uICgpIHtcbiAgICBmb2N1c05vZGUoUmVhY3RET01Db21wb25lbnRUcmVlLmdldE5vZGVGcm9tSW5zdGFuY2UodGhpcykpO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEF1dG9Gb2N1c1V0aWxzO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QtZG9tL2xpYi9BdXRvRm9jdXNVdGlscy5qcyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIEV2ZW50UHJvcGFnYXRvcnMgPSByZXF1aXJlKCcuL0V2ZW50UHJvcGFnYXRvcnMnKTtcbnZhciBFeGVjdXRpb25FbnZpcm9ubWVudCA9IHJlcXVpcmUoJ2ZianMvbGliL0V4ZWN1dGlvbkVudmlyb25tZW50Jyk7XG52YXIgRmFsbGJhY2tDb21wb3NpdGlvblN0YXRlID0gcmVxdWlyZSgnLi9GYWxsYmFja0NvbXBvc2l0aW9uU3RhdGUnKTtcbnZhciBTeW50aGV0aWNDb21wb3NpdGlvbkV2ZW50ID0gcmVxdWlyZSgnLi9TeW50aGV0aWNDb21wb3NpdGlvbkV2ZW50Jyk7XG52YXIgU3ludGhldGljSW5wdXRFdmVudCA9IHJlcXVpcmUoJy4vU3ludGhldGljSW5wdXRFdmVudCcpO1xuXG52YXIgRU5EX0tFWUNPREVTID0gWzksIDEzLCAyNywgMzJdOyAvLyBUYWIsIFJldHVybiwgRXNjLCBTcGFjZVxudmFyIFNUQVJUX0tFWUNPREUgPSAyMjk7XG5cbnZhciBjYW5Vc2VDb21wb3NpdGlvbkV2ZW50ID0gRXhlY3V0aW9uRW52aXJvbm1lbnQuY2FuVXNlRE9NICYmICdDb21wb3NpdGlvbkV2ZW50JyBpbiB3aW5kb3c7XG5cbnZhciBkb2N1bWVudE1vZGUgPSBudWxsO1xuaWYgKEV4ZWN1dGlvbkVudmlyb25tZW50LmNhblVzZURPTSAmJiAnZG9jdW1lbnRNb2RlJyBpbiBkb2N1bWVudCkge1xuICBkb2N1bWVudE1vZGUgPSBkb2N1bWVudC5kb2N1bWVudE1vZGU7XG59XG5cbi8vIFdlYmtpdCBvZmZlcnMgYSB2ZXJ5IHVzZWZ1bCBgdGV4dElucHV0YCBldmVudCB0aGF0IGNhbiBiZSB1c2VkIHRvXG4vLyBkaXJlY3RseSByZXByZXNlbnQgYGJlZm9yZUlucHV0YC4gVGhlIElFIGB0ZXh0aW5wdXRgIGV2ZW50IGlzIG5vdCBhc1xuLy8gdXNlZnVsLCBzbyB3ZSBkb24ndCB1c2UgaXQuXG52YXIgY2FuVXNlVGV4dElucHV0RXZlbnQgPSBFeGVjdXRpb25FbnZpcm9ubWVudC5jYW5Vc2VET00gJiYgJ1RleHRFdmVudCcgaW4gd2luZG93ICYmICFkb2N1bWVudE1vZGUgJiYgIWlzUHJlc3RvKCk7XG5cbi8vIEluIElFOSssIHdlIGhhdmUgYWNjZXNzIHRvIGNvbXBvc2l0aW9uIGV2ZW50cywgYnV0IHRoZSBkYXRhIHN1cHBsaWVkXG4vLyBieSB0aGUgbmF0aXZlIGNvbXBvc2l0aW9uZW5kIGV2ZW50IG1heSBiZSBpbmNvcnJlY3QuIEphcGFuZXNlIGlkZW9ncmFwaGljXG4vLyBzcGFjZXMsIGZvciBpbnN0YW5jZSAoXFx1MzAwMCkgYXJlIG5vdCByZWNvcmRlZCBjb3JyZWN0bHkuXG52YXIgdXNlRmFsbGJhY2tDb21wb3NpdGlvbkRhdGEgPSBFeGVjdXRpb25FbnZpcm9ubWVudC5jYW5Vc2VET00gJiYgKCFjYW5Vc2VDb21wb3NpdGlvbkV2ZW50IHx8IGRvY3VtZW50TW9kZSAmJiBkb2N1bWVudE1vZGUgPiA4ICYmIGRvY3VtZW50TW9kZSA8PSAxMSk7XG5cbi8qKlxuICogT3BlcmEgPD0gMTIgaW5jbHVkZXMgVGV4dEV2ZW50IGluIHdpbmRvdywgYnV0IGRvZXMgbm90IGZpcmVcbiAqIHRleHQgaW5wdXQgZXZlbnRzLiBSZWx5IG9uIGtleXByZXNzIGluc3RlYWQuXG4gKi9cbmZ1bmN0aW9uIGlzUHJlc3RvKCkge1xuICB2YXIgb3BlcmEgPSB3aW5kb3cub3BlcmE7XG4gIHJldHVybiB0eXBlb2Ygb3BlcmEgPT09ICdvYmplY3QnICYmIHR5cGVvZiBvcGVyYS52ZXJzaW9uID09PSAnZnVuY3Rpb24nICYmIHBhcnNlSW50KG9wZXJhLnZlcnNpb24oKSwgMTApIDw9IDEyO1xufVxuXG52YXIgU1BBQ0VCQVJfQ09ERSA9IDMyO1xudmFyIFNQQUNFQkFSX0NIQVIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKFNQQUNFQkFSX0NPREUpO1xuXG4vLyBFdmVudHMgYW5kIHRoZWlyIGNvcnJlc3BvbmRpbmcgcHJvcGVydHkgbmFtZXMuXG52YXIgZXZlbnRUeXBlcyA9IHtcbiAgYmVmb3JlSW5wdXQ6IHtcbiAgICBwaGFzZWRSZWdpc3RyYXRpb25OYW1lczoge1xuICAgICAgYnViYmxlZDogJ29uQmVmb3JlSW5wdXQnLFxuICAgICAgY2FwdHVyZWQ6ICdvbkJlZm9yZUlucHV0Q2FwdHVyZSdcbiAgICB9LFxuICAgIGRlcGVuZGVuY2llczogWyd0b3BDb21wb3NpdGlvbkVuZCcsICd0b3BLZXlQcmVzcycsICd0b3BUZXh0SW5wdXQnLCAndG9wUGFzdGUnXVxuICB9LFxuICBjb21wb3NpdGlvbkVuZDoge1xuICAgIHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOiB7XG4gICAgICBidWJibGVkOiAnb25Db21wb3NpdGlvbkVuZCcsXG4gICAgICBjYXB0dXJlZDogJ29uQ29tcG9zaXRpb25FbmRDYXB0dXJlJ1xuICAgIH0sXG4gICAgZGVwZW5kZW5jaWVzOiBbJ3RvcEJsdXInLCAndG9wQ29tcG9zaXRpb25FbmQnLCAndG9wS2V5RG93bicsICd0b3BLZXlQcmVzcycsICd0b3BLZXlVcCcsICd0b3BNb3VzZURvd24nXVxuICB9LFxuICBjb21wb3NpdGlvblN0YXJ0OiB7XG4gICAgcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6IHtcbiAgICAgIGJ1YmJsZWQ6ICdvbkNvbXBvc2l0aW9uU3RhcnQnLFxuICAgICAgY2FwdHVyZWQ6ICdvbkNvbXBvc2l0aW9uU3RhcnRDYXB0dXJlJ1xuICAgIH0sXG4gICAgZGVwZW5kZW5jaWVzOiBbJ3RvcEJsdXInLCAndG9wQ29tcG9zaXRpb25TdGFydCcsICd0b3BLZXlEb3duJywgJ3RvcEtleVByZXNzJywgJ3RvcEtleVVwJywgJ3RvcE1vdXNlRG93biddXG4gIH0sXG4gIGNvbXBvc2l0aW9uVXBkYXRlOiB7XG4gICAgcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6IHtcbiAgICAgIGJ1YmJsZWQ6ICdvbkNvbXBvc2l0aW9uVXBkYXRlJyxcbiAgICAgIGNhcHR1cmVkOiAnb25Db21wb3NpdGlvblVwZGF0ZUNhcHR1cmUnXG4gICAgfSxcbiAgICBkZXBlbmRlbmNpZXM6IFsndG9wQmx1cicsICd0b3BDb21wb3NpdGlvblVwZGF0ZScsICd0b3BLZXlEb3duJywgJ3RvcEtleVByZXNzJywgJ3RvcEtleVVwJywgJ3RvcE1vdXNlRG93biddXG4gIH1cbn07XG5cbi8vIFRyYWNrIHdoZXRoZXIgd2UndmUgZXZlciBoYW5kbGVkIGEga2V5cHJlc3Mgb24gdGhlIHNwYWNlIGtleS5cbnZhciBoYXNTcGFjZUtleXByZXNzID0gZmFsc2U7XG5cbi8qKlxuICogUmV0dXJuIHdoZXRoZXIgYSBuYXRpdmUga2V5cHJlc3MgZXZlbnQgaXMgYXNzdW1lZCB0byBiZSBhIGNvbW1hbmQuXG4gKiBUaGlzIGlzIHJlcXVpcmVkIGJlY2F1c2UgRmlyZWZveCBmaXJlcyBga2V5cHJlc3NgIGV2ZW50cyBmb3Iga2V5IGNvbW1hbmRzXG4gKiAoY3V0LCBjb3B5LCBzZWxlY3QtYWxsLCBldGMuKSBldmVuIHRob3VnaCBubyBjaGFyYWN0ZXIgaXMgaW5zZXJ0ZWQuXG4gKi9cbmZ1bmN0aW9uIGlzS2V5cHJlc3NDb21tYW5kKG5hdGl2ZUV2ZW50KSB7XG4gIHJldHVybiAobmF0aXZlRXZlbnQuY3RybEtleSB8fCBuYXRpdmVFdmVudC5hbHRLZXkgfHwgbmF0aXZlRXZlbnQubWV0YUtleSkgJiZcbiAgLy8gY3RybEtleSAmJiBhbHRLZXkgaXMgZXF1aXZhbGVudCB0byBBbHRHciwgYW5kIGlzIG5vdCBhIGNvbW1hbmQuXG4gICEobmF0aXZlRXZlbnQuY3RybEtleSAmJiBuYXRpdmVFdmVudC5hbHRLZXkpO1xufVxuXG4vKipcbiAqIFRyYW5zbGF0ZSBuYXRpdmUgdG9wIGxldmVsIGV2ZW50cyBpbnRvIGV2ZW50IHR5cGVzLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0b3BMZXZlbFR5cGVcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqL1xuZnVuY3Rpb24gZ2V0Q29tcG9zaXRpb25FdmVudFR5cGUodG9wTGV2ZWxUeXBlKSB7XG4gIHN3aXRjaCAodG9wTGV2ZWxUeXBlKSB7XG4gICAgY2FzZSAndG9wQ29tcG9zaXRpb25TdGFydCc6XG4gICAgICByZXR1cm4gZXZlbnRUeXBlcy5jb21wb3NpdGlvblN0YXJ0O1xuICAgIGNhc2UgJ3RvcENvbXBvc2l0aW9uRW5kJzpcbiAgICAgIHJldHVybiBldmVudFR5cGVzLmNvbXBvc2l0aW9uRW5kO1xuICAgIGNhc2UgJ3RvcENvbXBvc2l0aW9uVXBkYXRlJzpcbiAgICAgIHJldHVybiBldmVudFR5cGVzLmNvbXBvc2l0aW9uVXBkYXRlO1xuICB9XG59XG5cbi8qKlxuICogRG9lcyBvdXIgZmFsbGJhY2sgYmVzdC1ndWVzcyBtb2RlbCB0aGluayB0aGlzIGV2ZW50IHNpZ25pZmllcyB0aGF0XG4gKiBjb21wb3NpdGlvbiBoYXMgYmVndW4/XG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHRvcExldmVsVHlwZVxuICogQHBhcmFtIHtvYmplY3R9IG5hdGl2ZUV2ZW50XG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc0ZhbGxiYWNrQ29tcG9zaXRpb25TdGFydCh0b3BMZXZlbFR5cGUsIG5hdGl2ZUV2ZW50KSB7XG4gIHJldHVybiB0b3BMZXZlbFR5cGUgPT09ICd0b3BLZXlEb3duJyAmJiBuYXRpdmVFdmVudC5rZXlDb2RlID09PSBTVEFSVF9LRVlDT0RFO1xufVxuXG4vKipcbiAqIERvZXMgb3VyIGZhbGxiYWNrIG1vZGUgdGhpbmsgdGhhdCB0aGlzIGV2ZW50IGlzIHRoZSBlbmQgb2YgY29tcG9zaXRpb24/XG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHRvcExldmVsVHlwZVxuICogQHBhcmFtIHtvYmplY3R9IG5hdGl2ZUV2ZW50XG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc0ZhbGxiYWNrQ29tcG9zaXRpb25FbmQodG9wTGV2ZWxUeXBlLCBuYXRpdmVFdmVudCkge1xuICBzd2l0Y2ggKHRvcExldmVsVHlwZSkge1xuICAgIGNhc2UgJ3RvcEtleVVwJzpcbiAgICAgIC8vIENvbW1hbmQga2V5cyBpbnNlcnQgb3IgY2xlYXIgSU1FIGlucHV0LlxuICAgICAgcmV0dXJuIEVORF9LRVlDT0RFUy5pbmRleE9mKG5hdGl2ZUV2ZW50LmtleUNvZGUpICE9PSAtMTtcbiAgICBjYXNlICd0b3BLZXlEb3duJzpcbiAgICAgIC8vIEV4cGVjdCBJTUUga2V5Q29kZSBvbiBlYWNoIGtleWRvd24uIElmIHdlIGdldCBhbnkgb3RoZXJcbiAgICAgIC8vIGNvZGUgd2UgbXVzdCBoYXZlIGV4aXRlZCBlYXJsaWVyLlxuICAgICAgcmV0dXJuIG5hdGl2ZUV2ZW50LmtleUNvZGUgIT09IFNUQVJUX0tFWUNPREU7XG4gICAgY2FzZSAndG9wS2V5UHJlc3MnOlxuICAgIGNhc2UgJ3RvcE1vdXNlRG93bic6XG4gICAgY2FzZSAndG9wQmx1cic6XG4gICAgICAvLyBFdmVudHMgYXJlIG5vdCBwb3NzaWJsZSB3aXRob3V0IGNhbmNlbGxpbmcgSU1FLlxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG4vKipcbiAqIEdvb2dsZSBJbnB1dCBUb29scyBwcm92aWRlcyBjb21wb3NpdGlvbiBkYXRhIHZpYSBhIEN1c3RvbUV2ZW50LFxuICogd2l0aCB0aGUgYGRhdGFgIHByb3BlcnR5IHBvcHVsYXRlZCBpbiB0aGUgYGRldGFpbGAgb2JqZWN0LiBJZiB0aGlzXG4gKiBpcyBhdmFpbGFibGUgb24gdGhlIGV2ZW50IG9iamVjdCwgdXNlIGl0LiBJZiBub3QsIHRoaXMgaXMgYSBwbGFpblxuICogY29tcG9zaXRpb24gZXZlbnQgYW5kIHdlIGhhdmUgbm90aGluZyBzcGVjaWFsIHRvIGV4dHJhY3QuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IG5hdGl2ZUV2ZW50XG4gKiBAcmV0dXJuIHs/c3RyaW5nfVxuICovXG5mdW5jdGlvbiBnZXREYXRhRnJvbUN1c3RvbUV2ZW50KG5hdGl2ZUV2ZW50KSB7XG4gIHZhciBkZXRhaWwgPSBuYXRpdmVFdmVudC5kZXRhaWw7XG4gIGlmICh0eXBlb2YgZGV0YWlsID09PSAnb2JqZWN0JyAmJiAnZGF0YScgaW4gZGV0YWlsKSB7XG4gICAgcmV0dXJuIGRldGFpbC5kYXRhO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG4vLyBUcmFjayB0aGUgY3VycmVudCBJTUUgY29tcG9zaXRpb24gZmFsbGJhY2sgb2JqZWN0LCBpZiBhbnkuXG52YXIgY3VycmVudENvbXBvc2l0aW9uID0gbnVsbDtcblxuLyoqXG4gKiBAcmV0dXJuIHs/b2JqZWN0fSBBIFN5bnRoZXRpY0NvbXBvc2l0aW9uRXZlbnQuXG4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RDb21wb3NpdGlvbkV2ZW50KHRvcExldmVsVHlwZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KSB7XG4gIHZhciBldmVudFR5cGU7XG4gIHZhciBmYWxsYmFja0RhdGE7XG5cbiAgaWYgKGNhblVzZUNvbXBvc2l0aW9uRXZlbnQpIHtcbiAgICBldmVudFR5cGUgPSBnZXRDb21wb3NpdGlvbkV2ZW50VHlwZSh0b3BMZXZlbFR5cGUpO1xuICB9IGVsc2UgaWYgKCFjdXJyZW50Q29tcG9zaXRpb24pIHtcbiAgICBpZiAoaXNGYWxsYmFja0NvbXBvc2l0aW9uU3RhcnQodG9wTGV2ZWxUeXBlLCBuYXRpdmVFdmVudCkpIHtcbiAgICAgIGV2ZW50VHlwZSA9IGV2ZW50VHlwZXMuY29tcG9zaXRpb25TdGFydDtcbiAgICB9XG4gIH0gZWxzZSBpZiAoaXNGYWxsYmFja0NvbXBvc2l0aW9uRW5kKHRvcExldmVsVHlwZSwgbmF0aXZlRXZlbnQpKSB7XG4gICAgZXZlbnRUeXBlID0gZXZlbnRUeXBlcy5jb21wb3NpdGlvbkVuZDtcbiAgfVxuXG4gIGlmICghZXZlbnRUeXBlKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpZiAodXNlRmFsbGJhY2tDb21wb3NpdGlvbkRhdGEpIHtcbiAgICAvLyBUaGUgY3VycmVudCBjb21wb3NpdGlvbiBpcyBzdG9yZWQgc3RhdGljYWxseSBhbmQgbXVzdCBub3QgYmVcbiAgICAvLyBvdmVyd3JpdHRlbiB3aGlsZSBjb21wb3NpdGlvbiBjb250aW51ZXMuXG4gICAgaWYgKCFjdXJyZW50Q29tcG9zaXRpb24gJiYgZXZlbnRUeXBlID09PSBldmVudFR5cGVzLmNvbXBvc2l0aW9uU3RhcnQpIHtcbiAgICAgIGN1cnJlbnRDb21wb3NpdGlvbiA9IEZhbGxiYWNrQ29tcG9zaXRpb25TdGF0ZS5nZXRQb29sZWQobmF0aXZlRXZlbnRUYXJnZXQpO1xuICAgIH0gZWxzZSBpZiAoZXZlbnRUeXBlID09PSBldmVudFR5cGVzLmNvbXBvc2l0aW9uRW5kKSB7XG4gICAgICBpZiAoY3VycmVudENvbXBvc2l0aW9uKSB7XG4gICAgICAgIGZhbGxiYWNrRGF0YSA9IGN1cnJlbnRDb21wb3NpdGlvbi5nZXREYXRhKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdmFyIGV2ZW50ID0gU3ludGhldGljQ29tcG9zaXRpb25FdmVudC5nZXRQb29sZWQoZXZlbnRUeXBlLCB0YXJnZXRJbnN0LCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpO1xuXG4gIGlmIChmYWxsYmFja0RhdGEpIHtcbiAgICAvLyBJbmplY3QgZGF0YSBnZW5lcmF0ZWQgZnJvbSBmYWxsYmFjayBwYXRoIGludG8gdGhlIHN5bnRoZXRpYyBldmVudC5cbiAgICAvLyBUaGlzIG1hdGNoZXMgdGhlIHByb3BlcnR5IG9mIG5hdGl2ZSBDb21wb3NpdGlvbkV2ZW50SW50ZXJmYWNlLlxuICAgIGV2ZW50LmRhdGEgPSBmYWxsYmFja0RhdGE7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGN1c3RvbURhdGEgPSBnZXREYXRhRnJvbUN1c3RvbUV2ZW50KG5hdGl2ZUV2ZW50KTtcbiAgICBpZiAoY3VzdG9tRGF0YSAhPT0gbnVsbCkge1xuICAgICAgZXZlbnQuZGF0YSA9IGN1c3RvbURhdGE7XG4gICAgfVxuICB9XG5cbiAgRXZlbnRQcm9wYWdhdG9ycy5hY2N1bXVsYXRlVHdvUGhhc2VEaXNwYXRjaGVzKGV2ZW50KTtcbiAgcmV0dXJuIGV2ZW50O1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB0b3BMZXZlbFR5cGUgUmVjb3JkIGZyb20gYEV2ZW50Q29uc3RhbnRzYC5cbiAqIEBwYXJhbSB7b2JqZWN0fSBuYXRpdmVFdmVudCBOYXRpdmUgYnJvd3NlciBldmVudC5cbiAqIEByZXR1cm4gez9zdHJpbmd9IFRoZSBzdHJpbmcgY29ycmVzcG9uZGluZyB0byB0aGlzIGBiZWZvcmVJbnB1dGAgZXZlbnQuXG4gKi9cbmZ1bmN0aW9uIGdldE5hdGl2ZUJlZm9yZUlucHV0Q2hhcnModG9wTGV2ZWxUeXBlLCBuYXRpdmVFdmVudCkge1xuICBzd2l0Y2ggKHRvcExldmVsVHlwZSkge1xuICAgIGNhc2UgJ3RvcENvbXBvc2l0aW9uRW5kJzpcbiAgICAgIHJldHVybiBnZXREYXRhRnJvbUN1c3RvbUV2ZW50KG5hdGl2ZUV2ZW50KTtcbiAgICBjYXNlICd0b3BLZXlQcmVzcyc6XG4gICAgICAvKipcbiAgICAgICAqIElmIG5hdGl2ZSBgdGV4dElucHV0YCBldmVudHMgYXJlIGF2YWlsYWJsZSwgb3VyIGdvYWwgaXMgdG8gbWFrZVxuICAgICAgICogdXNlIG9mIHRoZW0uIEhvd2V2ZXIsIHRoZXJlIGlzIGEgc3BlY2lhbCBjYXNlOiB0aGUgc3BhY2ViYXIga2V5LlxuICAgICAgICogSW4gV2Via2l0LCBwcmV2ZW50aW5nIGRlZmF1bHQgb24gYSBzcGFjZWJhciBgdGV4dElucHV0YCBldmVudFxuICAgICAgICogY2FuY2VscyBjaGFyYWN0ZXIgaW5zZXJ0aW9uLCBidXQgaXQgKmFsc28qIGNhdXNlcyB0aGUgYnJvd3NlclxuICAgICAgICogdG8gZmFsbCBiYWNrIHRvIGl0cyBkZWZhdWx0IHNwYWNlYmFyIGJlaGF2aW9yIG9mIHNjcm9sbGluZyB0aGVcbiAgICAgICAqIHBhZ2UuXG4gICAgICAgKlxuICAgICAgICogVHJhY2tpbmcgYXQ6XG4gICAgICAgKiBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9MzU1MTAzXG4gICAgICAgKlxuICAgICAgICogVG8gYXZvaWQgdGhpcyBpc3N1ZSwgdXNlIHRoZSBrZXlwcmVzcyBldmVudCBhcyBpZiBubyBgdGV4dElucHV0YFxuICAgICAgICogZXZlbnQgaXMgYXZhaWxhYmxlLlxuICAgICAgICovXG4gICAgICB2YXIgd2hpY2ggPSBuYXRpdmVFdmVudC53aGljaDtcbiAgICAgIGlmICh3aGljaCAhPT0gU1BBQ0VCQVJfQ09ERSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgaGFzU3BhY2VLZXlwcmVzcyA9IHRydWU7XG4gICAgICByZXR1cm4gU1BBQ0VCQVJfQ0hBUjtcblxuICAgIGNhc2UgJ3RvcFRleHRJbnB1dCc6XG4gICAgICAvLyBSZWNvcmQgdGhlIGNoYXJhY3RlcnMgdG8gYmUgYWRkZWQgdG8gdGhlIERPTS5cbiAgICAgIHZhciBjaGFycyA9IG5hdGl2ZUV2ZW50LmRhdGE7XG5cbiAgICAgIC8vIElmIGl0J3MgYSBzcGFjZWJhciBjaGFyYWN0ZXIsIGFzc3VtZSB0aGF0IHdlIGhhdmUgYWxyZWFkeSBoYW5kbGVkXG4gICAgICAvLyBpdCBhdCB0aGUga2V5cHJlc3MgbGV2ZWwgYW5kIGJhaWwgaW1tZWRpYXRlbHkuIEFuZHJvaWQgQ2hyb21lXG4gICAgICAvLyBkb2Vzbid0IGdpdmUgdXMga2V5Y29kZXMsIHNvIHdlIG5lZWQgdG8gYmxhY2tsaXN0IGl0LlxuICAgICAgaWYgKGNoYXJzID09PSBTUEFDRUJBUl9DSEFSICYmIGhhc1NwYWNlS2V5cHJlc3MpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjaGFycztcblxuICAgIGRlZmF1bHQ6XG4gICAgICAvLyBGb3Igb3RoZXIgbmF0aXZlIGV2ZW50IHR5cGVzLCBkbyBub3RoaW5nLlxuICAgICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuLyoqXG4gKiBGb3IgYnJvd3NlcnMgdGhhdCBkbyBub3QgcHJvdmlkZSB0aGUgYHRleHRJbnB1dGAgZXZlbnQsIGV4dHJhY3QgdGhlXG4gKiBhcHByb3ByaWF0ZSBzdHJpbmcgdG8gdXNlIGZvciBTeW50aGV0aWNJbnB1dEV2ZW50LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0b3BMZXZlbFR5cGUgUmVjb3JkIGZyb20gYEV2ZW50Q29uc3RhbnRzYC5cbiAqIEBwYXJhbSB7b2JqZWN0fSBuYXRpdmVFdmVudCBOYXRpdmUgYnJvd3NlciBldmVudC5cbiAqIEByZXR1cm4gez9zdHJpbmd9IFRoZSBmYWxsYmFjayBzdHJpbmcgZm9yIHRoaXMgYGJlZm9yZUlucHV0YCBldmVudC5cbiAqL1xuZnVuY3Rpb24gZ2V0RmFsbGJhY2tCZWZvcmVJbnB1dENoYXJzKHRvcExldmVsVHlwZSwgbmF0aXZlRXZlbnQpIHtcbiAgLy8gSWYgd2UgYXJlIGN1cnJlbnRseSBjb21wb3NpbmcgKElNRSkgYW5kIHVzaW5nIGEgZmFsbGJhY2sgdG8gZG8gc28sXG4gIC8vIHRyeSB0byBleHRyYWN0IHRoZSBjb21wb3NlZCBjaGFyYWN0ZXJzIGZyb20gdGhlIGZhbGxiYWNrIG9iamVjdC5cbiAgLy8gSWYgY29tcG9zaXRpb24gZXZlbnQgaXMgYXZhaWxhYmxlLCB3ZSBleHRyYWN0IGEgc3RyaW5nIG9ubHkgYXRcbiAgLy8gY29tcG9zaXRpb25ldmVudCwgb3RoZXJ3aXNlIGV4dHJhY3QgaXQgYXQgZmFsbGJhY2sgZXZlbnRzLlxuICBpZiAoY3VycmVudENvbXBvc2l0aW9uKSB7XG4gICAgaWYgKHRvcExldmVsVHlwZSA9PT0gJ3RvcENvbXBvc2l0aW9uRW5kJyB8fCAhY2FuVXNlQ29tcG9zaXRpb25FdmVudCAmJiBpc0ZhbGxiYWNrQ29tcG9zaXRpb25FbmQodG9wTGV2ZWxUeXBlLCBuYXRpdmVFdmVudCkpIHtcbiAgICAgIHZhciBjaGFycyA9IGN1cnJlbnRDb21wb3NpdGlvbi5nZXREYXRhKCk7XG4gICAgICBGYWxsYmFja0NvbXBvc2l0aW9uU3RhdGUucmVsZWFzZShjdXJyZW50Q29tcG9zaXRpb24pO1xuICAgICAgY3VycmVudENvbXBvc2l0aW9uID0gbnVsbDtcbiAgICAgIHJldHVybiBjaGFycztcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBzd2l0Y2ggKHRvcExldmVsVHlwZSkge1xuICAgIGNhc2UgJ3RvcFBhc3RlJzpcbiAgICAgIC8vIElmIGEgcGFzdGUgZXZlbnQgb2NjdXJzIGFmdGVyIGEga2V5cHJlc3MsIHRocm93IG91dCB0aGUgaW5wdXRcbiAgICAgIC8vIGNoYXJzLiBQYXN0ZSBldmVudHMgc2hvdWxkIG5vdCBsZWFkIHRvIEJlZm9yZUlucHV0IGV2ZW50cy5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIGNhc2UgJ3RvcEtleVByZXNzJzpcbiAgICAgIC8qKlxuICAgICAgICogQXMgb2YgdjI3LCBGaXJlZm94IG1heSBmaXJlIGtleXByZXNzIGV2ZW50cyBldmVuIHdoZW4gbm8gY2hhcmFjdGVyXG4gICAgICAgKiB3aWxsIGJlIGluc2VydGVkLiBBIGZldyBwb3NzaWJpbGl0aWVzOlxuICAgICAgICpcbiAgICAgICAqIC0gYHdoaWNoYCBpcyBgMGAuIEFycm93IGtleXMsIEVzYyBrZXksIGV0Yy5cbiAgICAgICAqXG4gICAgICAgKiAtIGB3aGljaGAgaXMgdGhlIHByZXNzZWQga2V5IGNvZGUsIGJ1dCBubyBjaGFyIGlzIGF2YWlsYWJsZS5cbiAgICAgICAqICAgRXg6ICdBbHRHciArIGRgIGluIFBvbGlzaC4gVGhlcmUgaXMgbm8gbW9kaWZpZWQgY2hhcmFjdGVyIGZvclxuICAgICAgICogICB0aGlzIGtleSBjb21iaW5hdGlvbiBhbmQgbm8gY2hhcmFjdGVyIGlzIGluc2VydGVkIGludG8gdGhlXG4gICAgICAgKiAgIGRvY3VtZW50LCBidXQgRkYgZmlyZXMgdGhlIGtleXByZXNzIGZvciBjaGFyIGNvZGUgYDEwMGAgYW55d2F5LlxuICAgICAgICogICBObyBgaW5wdXRgIGV2ZW50IHdpbGwgb2NjdXIuXG4gICAgICAgKlxuICAgICAgICogLSBgd2hpY2hgIGlzIHRoZSBwcmVzc2VkIGtleSBjb2RlLCBidXQgYSBjb21tYW5kIGNvbWJpbmF0aW9uIGlzXG4gICAgICAgKiAgIGJlaW5nIHVzZWQuIEV4OiBgQ21kK0NgLiBObyBjaGFyYWN0ZXIgaXMgaW5zZXJ0ZWQsIGFuZCBub1xuICAgICAgICogICBgaW5wdXRgIGV2ZW50IHdpbGwgb2NjdXIuXG4gICAgICAgKi9cbiAgICAgIGlmIChuYXRpdmVFdmVudC53aGljaCAmJiAhaXNLZXlwcmVzc0NvbW1hbmQobmF0aXZlRXZlbnQpKSB7XG4gICAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKG5hdGl2ZUV2ZW50LndoaWNoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIGNhc2UgJ3RvcENvbXBvc2l0aW9uRW5kJzpcbiAgICAgIHJldHVybiB1c2VGYWxsYmFja0NvbXBvc2l0aW9uRGF0YSA/IG51bGwgOiBuYXRpdmVFdmVudC5kYXRhO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG4vKipcbiAqIEV4dHJhY3QgYSBTeW50aGV0aWNJbnB1dEV2ZW50IGZvciBgYmVmb3JlSW5wdXRgLCBiYXNlZCBvbiBlaXRoZXIgbmF0aXZlXG4gKiBgdGV4dElucHV0YCBvciBmYWxsYmFjayBiZWhhdmlvci5cbiAqXG4gKiBAcmV0dXJuIHs/b2JqZWN0fSBBIFN5bnRoZXRpY0lucHV0RXZlbnQuXG4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RCZWZvcmVJbnB1dEV2ZW50KHRvcExldmVsVHlwZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KSB7XG4gIHZhciBjaGFycztcblxuICBpZiAoY2FuVXNlVGV4dElucHV0RXZlbnQpIHtcbiAgICBjaGFycyA9IGdldE5hdGl2ZUJlZm9yZUlucHV0Q2hhcnModG9wTGV2ZWxUeXBlLCBuYXRpdmVFdmVudCk7XG4gIH0gZWxzZSB7XG4gICAgY2hhcnMgPSBnZXRGYWxsYmFja0JlZm9yZUlucHV0Q2hhcnModG9wTGV2ZWxUeXBlLCBuYXRpdmVFdmVudCk7XG4gIH1cblxuICAvLyBJZiBubyBjaGFyYWN0ZXJzIGFyZSBiZWluZyBpbnNlcnRlZCwgbm8gQmVmb3JlSW5wdXQgZXZlbnQgc2hvdWxkXG4gIC8vIGJlIGZpcmVkLlxuICBpZiAoIWNoYXJzKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB2YXIgZXZlbnQgPSBTeW50aGV0aWNJbnB1dEV2ZW50LmdldFBvb2xlZChldmVudFR5cGVzLmJlZm9yZUlucHV0LCB0YXJnZXRJbnN0LCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpO1xuXG4gIGV2ZW50LmRhdGEgPSBjaGFycztcbiAgRXZlbnRQcm9wYWdhdG9ycy5hY2N1bXVsYXRlVHdvUGhhc2VEaXNwYXRjaGVzKGV2ZW50KTtcbiAgcmV0dXJuIGV2ZW50O1xufVxuXG4vKipcbiAqIENyZWF0ZSBhbiBgb25CZWZvcmVJbnB1dGAgZXZlbnQgdG8gbWF0Y2hcbiAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTMvV0QtRE9NLUxldmVsLTMtRXZlbnRzLTIwMTMxMTA1LyNldmVudHMtaW5wdXRldmVudHMuXG4gKlxuICogVGhpcyBldmVudCBwbHVnaW4gaXMgYmFzZWQgb24gdGhlIG5hdGl2ZSBgdGV4dElucHV0YCBldmVudFxuICogYXZhaWxhYmxlIGluIENocm9tZSwgU2FmYXJpLCBPcGVyYSwgYW5kIElFLiBUaGlzIGV2ZW50IGZpcmVzIGFmdGVyXG4gKiBgb25LZXlQcmVzc2AgYW5kIGBvbkNvbXBvc2l0aW9uRW5kYCwgYnV0IGJlZm9yZSBgb25JbnB1dGAuXG4gKlxuICogYGJlZm9yZUlucHV0YCBpcyBzcGVjJ2QgYnV0IG5vdCBpbXBsZW1lbnRlZCBpbiBhbnkgYnJvd3NlcnMsIGFuZFxuICogdGhlIGBpbnB1dGAgZXZlbnQgZG9lcyBub3QgcHJvdmlkZSBhbnkgdXNlZnVsIGluZm9ybWF0aW9uIGFib3V0IHdoYXQgaGFzXG4gKiBhY3R1YWxseSBiZWVuIGFkZGVkLCBjb250cmFyeSB0byB0aGUgc3BlYy4gVGh1cywgYHRleHRJbnB1dGAgaXMgdGhlIGJlc3RcbiAqIGF2YWlsYWJsZSBldmVudCB0byBpZGVudGlmeSB0aGUgY2hhcmFjdGVycyB0aGF0IGhhdmUgYWN0dWFsbHkgYmVlbiBpbnNlcnRlZFxuICogaW50byB0aGUgdGFyZ2V0IG5vZGUuXG4gKlxuICogVGhpcyBwbHVnaW4gaXMgYWxzbyByZXNwb25zaWJsZSBmb3IgZW1pdHRpbmcgYGNvbXBvc2l0aW9uYCBldmVudHMsIHRodXNcbiAqIGFsbG93aW5nIHVzIHRvIHNoYXJlIGNvbXBvc2l0aW9uIGZhbGxiYWNrIGNvZGUgZm9yIGJvdGggYGJlZm9yZUlucHV0YCBhbmRcbiAqIGBjb21wb3NpdGlvbmAgZXZlbnQgdHlwZXMuXG4gKi9cbnZhciBCZWZvcmVJbnB1dEV2ZW50UGx1Z2luID0ge1xuICBldmVudFR5cGVzOiBldmVudFR5cGVzLFxuXG4gIGV4dHJhY3RFdmVudHM6IGZ1bmN0aW9uICh0b3BMZXZlbFR5cGUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCkge1xuICAgIHJldHVybiBbZXh0cmFjdENvbXBvc2l0aW9uRXZlbnQodG9wTGV2ZWxUeXBlLCB0YXJnZXRJbnN0LCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpLCBleHRyYWN0QmVmb3JlSW5wdXRFdmVudCh0b3BMZXZlbFR5cGUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCldO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEJlZm9yZUlucHV0RXZlbnRQbHVnaW47XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1kb20vbGliL0JlZm9yZUlucHV0RXZlbnRQbHVnaW4uanMiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgQ1NTUHJvcGVydHkgPSByZXF1aXJlKCcuL0NTU1Byb3BlcnR5Jyk7XG52YXIgRXhlY3V0aW9uRW52aXJvbm1lbnQgPSByZXF1aXJlKCdmYmpzL2xpYi9FeGVjdXRpb25FbnZpcm9ubWVudCcpO1xudmFyIFJlYWN0SW5zdHJ1bWVudGF0aW9uID0gcmVxdWlyZSgnLi9SZWFjdEluc3RydW1lbnRhdGlvbicpO1xuXG52YXIgY2FtZWxpemVTdHlsZU5hbWUgPSByZXF1aXJlKCdmYmpzL2xpYi9jYW1lbGl6ZVN0eWxlTmFtZScpO1xudmFyIGRhbmdlcm91c1N0eWxlVmFsdWUgPSByZXF1aXJlKCcuL2Rhbmdlcm91c1N0eWxlVmFsdWUnKTtcbnZhciBoeXBoZW5hdGVTdHlsZU5hbWUgPSByZXF1aXJlKCdmYmpzL2xpYi9oeXBoZW5hdGVTdHlsZU5hbWUnKTtcbnZhciBtZW1vaXplU3RyaW5nT25seSA9IHJlcXVpcmUoJ2ZianMvbGliL21lbW9pemVTdHJpbmdPbmx5Jyk7XG52YXIgd2FybmluZyA9IHJlcXVpcmUoJ2ZianMvbGliL3dhcm5pbmcnKTtcblxudmFyIHByb2Nlc3NTdHlsZU5hbWUgPSBtZW1vaXplU3RyaW5nT25seShmdW5jdGlvbiAoc3R5bGVOYW1lKSB7XG4gIHJldHVybiBoeXBoZW5hdGVTdHlsZU5hbWUoc3R5bGVOYW1lKTtcbn0pO1xuXG52YXIgaGFzU2hvcnRoYW5kUHJvcGVydHlCdWcgPSBmYWxzZTtcbnZhciBzdHlsZUZsb2F0QWNjZXNzb3IgPSAnY3NzRmxvYXQnO1xuaWYgKEV4ZWN1dGlvbkVudmlyb25tZW50LmNhblVzZURPTSkge1xuICB2YXIgdGVtcFN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jykuc3R5bGU7XG4gIHRyeSB7XG4gICAgLy8gSUU4IHRocm93cyBcIkludmFsaWQgYXJndW1lbnQuXCIgaWYgcmVzZXR0aW5nIHNob3J0aGFuZCBzdHlsZSBwcm9wZXJ0aWVzLlxuICAgIHRlbXBTdHlsZS5mb250ID0gJyc7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBoYXNTaG9ydGhhbmRQcm9wZXJ0eUJ1ZyA9IHRydWU7XG4gIH1cbiAgLy8gSUU4IG9ubHkgc3VwcG9ydHMgYWNjZXNzaW5nIGNzc0Zsb2F0IChzdGFuZGFyZCkgYXMgc3R5bGVGbG9hdFxuICBpZiAoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLmNzc0Zsb2F0ID09PSB1bmRlZmluZWQpIHtcbiAgICBzdHlsZUZsb2F0QWNjZXNzb3IgPSAnc3R5bGVGbG9hdCc7XG4gIH1cbn1cblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgLy8gJ21zVHJhbnNmb3JtJyBpcyBjb3JyZWN0LCBidXQgdGhlIG90aGVyIHByZWZpeGVzIHNob3VsZCBiZSBjYXBpdGFsaXplZFxuICB2YXIgYmFkVmVuZG9yZWRTdHlsZU5hbWVQYXR0ZXJuID0gL14oPzp3ZWJraXR8bW96fG8pW0EtWl0vO1xuXG4gIC8vIHN0eWxlIHZhbHVlcyBzaG91bGRuJ3QgY29udGFpbiBhIHNlbWljb2xvblxuICB2YXIgYmFkU3R5bGVWYWx1ZVdpdGhTZW1pY29sb25QYXR0ZXJuID0gLztcXHMqJC87XG5cbiAgdmFyIHdhcm5lZFN0eWxlTmFtZXMgPSB7fTtcbiAgdmFyIHdhcm5lZFN0eWxlVmFsdWVzID0ge307XG4gIHZhciB3YXJuZWRGb3JOYU5WYWx1ZSA9IGZhbHNlO1xuXG4gIHZhciB3YXJuSHlwaGVuYXRlZFN0eWxlTmFtZSA9IGZ1bmN0aW9uIChuYW1lLCBvd25lcikge1xuICAgIGlmICh3YXJuZWRTdHlsZU5hbWVzLmhhc093blByb3BlcnR5KG5hbWUpICYmIHdhcm5lZFN0eWxlTmFtZXNbbmFtZV0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB3YXJuZWRTdHlsZU5hbWVzW25hbWVdID0gdHJ1ZTtcbiAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyhmYWxzZSwgJ1Vuc3VwcG9ydGVkIHN0eWxlIHByb3BlcnR5ICVzLiBEaWQgeW91IG1lYW4gJXM/JXMnLCBuYW1lLCBjYW1lbGl6ZVN0eWxlTmFtZShuYW1lKSwgY2hlY2tSZW5kZXJNZXNzYWdlKG93bmVyKSkgOiB2b2lkIDA7XG4gIH07XG5cbiAgdmFyIHdhcm5CYWRWZW5kb3JlZFN0eWxlTmFtZSA9IGZ1bmN0aW9uIChuYW1lLCBvd25lcikge1xuICAgIGlmICh3YXJuZWRTdHlsZU5hbWVzLmhhc093blByb3BlcnR5KG5hbWUpICYmIHdhcm5lZFN0eWxlTmFtZXNbbmFtZV0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB3YXJuZWRTdHlsZU5hbWVzW25hbWVdID0gdHJ1ZTtcbiAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyhmYWxzZSwgJ1Vuc3VwcG9ydGVkIHZlbmRvci1wcmVmaXhlZCBzdHlsZSBwcm9wZXJ0eSAlcy4gRGlkIHlvdSBtZWFuICVzPyVzJywgbmFtZSwgbmFtZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIG5hbWUuc2xpY2UoMSksIGNoZWNrUmVuZGVyTWVzc2FnZShvd25lcikpIDogdm9pZCAwO1xuICB9O1xuXG4gIHZhciB3YXJuU3R5bGVWYWx1ZVdpdGhTZW1pY29sb24gPSBmdW5jdGlvbiAobmFtZSwgdmFsdWUsIG93bmVyKSB7XG4gICAgaWYgKHdhcm5lZFN0eWxlVmFsdWVzLmhhc093blByb3BlcnR5KHZhbHVlKSAmJiB3YXJuZWRTdHlsZVZhbHVlc1t2YWx1ZV0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB3YXJuZWRTdHlsZVZhbHVlc1t2YWx1ZV0gPSB0cnVlO1xuICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKGZhbHNlLCBcIlN0eWxlIHByb3BlcnR5IHZhbHVlcyBzaG91bGRuJ3QgY29udGFpbiBhIHNlbWljb2xvbi4lcyBcIiArICdUcnkgXCIlczogJXNcIiBpbnN0ZWFkLicsIGNoZWNrUmVuZGVyTWVzc2FnZShvd25lciksIG5hbWUsIHZhbHVlLnJlcGxhY2UoYmFkU3R5bGVWYWx1ZVdpdGhTZW1pY29sb25QYXR0ZXJuLCAnJykpIDogdm9pZCAwO1xuICB9O1xuXG4gIHZhciB3YXJuU3R5bGVWYWx1ZUlzTmFOID0gZnVuY3Rpb24gKG5hbWUsIHZhbHVlLCBvd25lcikge1xuICAgIGlmICh3YXJuZWRGb3JOYU5WYWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHdhcm5lZEZvck5hTlZhbHVlID0gdHJ1ZTtcbiAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyhmYWxzZSwgJ2BOYU5gIGlzIGFuIGludmFsaWQgdmFsdWUgZm9yIHRoZSBgJXNgIGNzcyBzdHlsZSBwcm9wZXJ0eS4lcycsIG5hbWUsIGNoZWNrUmVuZGVyTWVzc2FnZShvd25lcikpIDogdm9pZCAwO1xuICB9O1xuXG4gIHZhciBjaGVja1JlbmRlck1lc3NhZ2UgPSBmdW5jdGlvbiAob3duZXIpIHtcbiAgICBpZiAob3duZXIpIHtcbiAgICAgIHZhciBuYW1lID0gb3duZXIuZ2V0TmFtZSgpO1xuICAgICAgaWYgKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuICcgQ2hlY2sgdGhlIHJlbmRlciBtZXRob2Qgb2YgYCcgKyBuYW1lICsgJ2AuJztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuICcnO1xuICB9O1xuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICAgKiBAcGFyYW0geyp9IHZhbHVlXG4gICAqIEBwYXJhbSB7UmVhY3RET01Db21wb25lbnR9IGNvbXBvbmVudFxuICAgKi9cbiAgdmFyIHdhcm5WYWxpZFN0eWxlID0gZnVuY3Rpb24gKG5hbWUsIHZhbHVlLCBjb21wb25lbnQpIHtcbiAgICB2YXIgb3duZXI7XG4gICAgaWYgKGNvbXBvbmVudCkge1xuICAgICAgb3duZXIgPSBjb21wb25lbnQuX2N1cnJlbnRFbGVtZW50Ll9vd25lcjtcbiAgICB9XG4gICAgaWYgKG5hbWUuaW5kZXhPZignLScpID4gLTEpIHtcbiAgICAgIHdhcm5IeXBoZW5hdGVkU3R5bGVOYW1lKG5hbWUsIG93bmVyKTtcbiAgICB9IGVsc2UgaWYgKGJhZFZlbmRvcmVkU3R5bGVOYW1lUGF0dGVybi50ZXN0KG5hbWUpKSB7XG4gICAgICB3YXJuQmFkVmVuZG9yZWRTdHlsZU5hbWUobmFtZSwgb3duZXIpO1xuICAgIH0gZWxzZSBpZiAoYmFkU3R5bGVWYWx1ZVdpdGhTZW1pY29sb25QYXR0ZXJuLnRlc3QodmFsdWUpKSB7XG4gICAgICB3YXJuU3R5bGVWYWx1ZVdpdGhTZW1pY29sb24obmFtZSwgdmFsdWUsIG93bmVyKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiBpc05hTih2YWx1ZSkpIHtcbiAgICAgIHdhcm5TdHlsZVZhbHVlSXNOYU4obmFtZSwgdmFsdWUsIG93bmVyKTtcbiAgICB9XG4gIH07XG59XG5cbi8qKlxuICogT3BlcmF0aW9ucyBmb3IgZGVhbGluZyB3aXRoIENTUyBwcm9wZXJ0aWVzLlxuICovXG52YXIgQ1NTUHJvcGVydHlPcGVyYXRpb25zID0ge1xuICAvKipcbiAgICogU2VyaWFsaXplcyBhIG1hcHBpbmcgb2Ygc3R5bGUgcHJvcGVydGllcyBmb3IgdXNlIGFzIGlubGluZSBzdHlsZXM6XG4gICAqXG4gICAqICAgPiBjcmVhdGVNYXJrdXBGb3JTdHlsZXMoe3dpZHRoOiAnMjAwcHgnLCBoZWlnaHQ6IDB9KVxuICAgKiAgIFwid2lkdGg6MjAwcHg7aGVpZ2h0OjA7XCJcbiAgICpcbiAgICogVW5kZWZpbmVkIHZhbHVlcyBhcmUgaWdub3JlZCBzbyB0aGF0IGRlY2xhcmF0aXZlIHByb2dyYW1taW5nIGlzIGVhc2llci5cbiAgICogVGhlIHJlc3VsdCBzaG91bGQgYmUgSFRNTC1lc2NhcGVkIGJlZm9yZSBpbnNlcnRpb24gaW50byB0aGUgRE9NLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gc3R5bGVzXG4gICAqIEBwYXJhbSB7UmVhY3RET01Db21wb25lbnR9IGNvbXBvbmVudFxuICAgKiBAcmV0dXJuIHs/c3RyaW5nfVxuICAgKi9cbiAgY3JlYXRlTWFya3VwRm9yU3R5bGVzOiBmdW5jdGlvbiAoc3R5bGVzLCBjb21wb25lbnQpIHtcbiAgICB2YXIgc2VyaWFsaXplZCA9ICcnO1xuICAgIGZvciAodmFyIHN0eWxlTmFtZSBpbiBzdHlsZXMpIHtcbiAgICAgIGlmICghc3R5bGVzLmhhc093blByb3BlcnR5KHN0eWxlTmFtZSkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICB2YXIgaXNDdXN0b21Qcm9wZXJ0eSA9IHN0eWxlTmFtZS5pbmRleE9mKCctLScpID09PSAwO1xuICAgICAgdmFyIHN0eWxlVmFsdWUgPSBzdHlsZXNbc3R5bGVOYW1lXTtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGlmICghaXNDdXN0b21Qcm9wZXJ0eSkge1xuICAgICAgICAgIHdhcm5WYWxpZFN0eWxlKHN0eWxlTmFtZSwgc3R5bGVWYWx1ZSwgY29tcG9uZW50KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHN0eWxlVmFsdWUgIT0gbnVsbCkge1xuICAgICAgICBzZXJpYWxpemVkICs9IHByb2Nlc3NTdHlsZU5hbWUoc3R5bGVOYW1lKSArICc6JztcbiAgICAgICAgc2VyaWFsaXplZCArPSBkYW5nZXJvdXNTdHlsZVZhbHVlKHN0eWxlTmFtZSwgc3R5bGVWYWx1ZSwgY29tcG9uZW50LCBpc0N1c3RvbVByb3BlcnR5KSArICc7JztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHNlcmlhbGl6ZWQgfHwgbnVsbDtcbiAgfSxcblxuICAvKipcbiAgICogU2V0cyB0aGUgdmFsdWUgZm9yIG11bHRpcGxlIHN0eWxlcyBvbiBhIG5vZGUuICBJZiBhIHZhbHVlIGlzIHNwZWNpZmllZCBhc1xuICAgKiAnJyAoZW1wdHkgc3RyaW5nKSwgdGhlIGNvcnJlc3BvbmRpbmcgc3R5bGUgcHJvcGVydHkgd2lsbCBiZSB1bnNldC5cbiAgICpcbiAgICogQHBhcmFtIHtET01FbGVtZW50fSBub2RlXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBzdHlsZXNcbiAgICogQHBhcmFtIHtSZWFjdERPTUNvbXBvbmVudH0gY29tcG9uZW50XG4gICAqL1xuICBzZXRWYWx1ZUZvclN0eWxlczogZnVuY3Rpb24gKG5vZGUsIHN0eWxlcywgY29tcG9uZW50KSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIFJlYWN0SW5zdHJ1bWVudGF0aW9uLmRlYnVnVG9vbC5vbkhvc3RPcGVyYXRpb24oe1xuICAgICAgICBpbnN0YW5jZUlEOiBjb21wb25lbnQuX2RlYnVnSUQsXG4gICAgICAgIHR5cGU6ICd1cGRhdGUgc3R5bGVzJyxcbiAgICAgICAgcGF5bG9hZDogc3R5bGVzXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB2YXIgc3R5bGUgPSBub2RlLnN0eWxlO1xuICAgIGZvciAodmFyIHN0eWxlTmFtZSBpbiBzdHlsZXMpIHtcbiAgICAgIGlmICghc3R5bGVzLmhhc093blByb3BlcnR5KHN0eWxlTmFtZSkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICB2YXIgaXNDdXN0b21Qcm9wZXJ0eSA9IHN0eWxlTmFtZS5pbmRleE9mKCctLScpID09PSAwO1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgaWYgKCFpc0N1c3RvbVByb3BlcnR5KSB7XG4gICAgICAgICAgd2FyblZhbGlkU3R5bGUoc3R5bGVOYW1lLCBzdHlsZXNbc3R5bGVOYW1lXSwgY29tcG9uZW50KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdmFyIHN0eWxlVmFsdWUgPSBkYW5nZXJvdXNTdHlsZVZhbHVlKHN0eWxlTmFtZSwgc3R5bGVzW3N0eWxlTmFtZV0sIGNvbXBvbmVudCwgaXNDdXN0b21Qcm9wZXJ0eSk7XG4gICAgICBpZiAoc3R5bGVOYW1lID09PSAnZmxvYXQnIHx8IHN0eWxlTmFtZSA9PT0gJ2Nzc0Zsb2F0Jykge1xuICAgICAgICBzdHlsZU5hbWUgPSBzdHlsZUZsb2F0QWNjZXNzb3I7XG4gICAgICB9XG4gICAgICBpZiAoaXNDdXN0b21Qcm9wZXJ0eSkge1xuICAgICAgICBzdHlsZS5zZXRQcm9wZXJ0eShzdHlsZU5hbWUsIHN0eWxlVmFsdWUpO1xuICAgICAgfSBlbHNlIGlmIChzdHlsZVZhbHVlKSB7XG4gICAgICAgIHN0eWxlW3N0eWxlTmFtZV0gPSBzdHlsZVZhbHVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGV4cGFuc2lvbiA9IGhhc1Nob3J0aGFuZFByb3BlcnR5QnVnICYmIENTU1Byb3BlcnR5LnNob3J0aGFuZFByb3BlcnR5RXhwYW5zaW9uc1tzdHlsZU5hbWVdO1xuICAgICAgICBpZiAoZXhwYW5zaW9uKSB7XG4gICAgICAgICAgLy8gU2hvcnRoYW5kIHByb3BlcnR5IHRoYXQgSUU4IHdvbid0IGxpa2UgdW5zZXR0aW5nLCBzbyB1bnNldCBlYWNoXG4gICAgICAgICAgLy8gY29tcG9uZW50IHRvIHBsYWNhdGUgaXRcbiAgICAgICAgICBmb3IgKHZhciBpbmRpdmlkdWFsU3R5bGVOYW1lIGluIGV4cGFuc2lvbikge1xuICAgICAgICAgICAgc3R5bGVbaW5kaXZpZHVhbFN0eWxlTmFtZV0gPSAnJztcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3R5bGVbc3R5bGVOYW1lXSA9ICcnO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IENTU1Byb3BlcnR5T3BlcmF0aW9ucztcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3JlYWN0LWRvbS9saWIvQ1NTUHJvcGVydHlPcGVyYXRpb25zLmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIEV2ZW50UGx1Z2luSHViID0gcmVxdWlyZSgnLi9FdmVudFBsdWdpbkh1YicpO1xudmFyIEV2ZW50UHJvcGFnYXRvcnMgPSByZXF1aXJlKCcuL0V2ZW50UHJvcGFnYXRvcnMnKTtcbnZhciBFeGVjdXRpb25FbnZpcm9ubWVudCA9IHJlcXVpcmUoJ2ZianMvbGliL0V4ZWN1dGlvbkVudmlyb25tZW50Jyk7XG52YXIgUmVhY3RET01Db21wb25lbnRUcmVlID0gcmVxdWlyZSgnLi9SZWFjdERPTUNvbXBvbmVudFRyZWUnKTtcbnZhciBSZWFjdFVwZGF0ZXMgPSByZXF1aXJlKCcuL1JlYWN0VXBkYXRlcycpO1xudmFyIFN5bnRoZXRpY0V2ZW50ID0gcmVxdWlyZSgnLi9TeW50aGV0aWNFdmVudCcpO1xuXG52YXIgaW5wdXRWYWx1ZVRyYWNraW5nID0gcmVxdWlyZSgnLi9pbnB1dFZhbHVlVHJhY2tpbmcnKTtcbnZhciBnZXRFdmVudFRhcmdldCA9IHJlcXVpcmUoJy4vZ2V0RXZlbnRUYXJnZXQnKTtcbnZhciBpc0V2ZW50U3VwcG9ydGVkID0gcmVxdWlyZSgnLi9pc0V2ZW50U3VwcG9ydGVkJyk7XG52YXIgaXNUZXh0SW5wdXRFbGVtZW50ID0gcmVxdWlyZSgnLi9pc1RleHRJbnB1dEVsZW1lbnQnKTtcblxudmFyIGV2ZW50VHlwZXMgPSB7XG4gIGNoYW5nZToge1xuICAgIHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOiB7XG4gICAgICBidWJibGVkOiAnb25DaGFuZ2UnLFxuICAgICAgY2FwdHVyZWQ6ICdvbkNoYW5nZUNhcHR1cmUnXG4gICAgfSxcbiAgICBkZXBlbmRlbmNpZXM6IFsndG9wQmx1cicsICd0b3BDaGFuZ2UnLCAndG9wQ2xpY2snLCAndG9wRm9jdXMnLCAndG9wSW5wdXQnLCAndG9wS2V5RG93bicsICd0b3BLZXlVcCcsICd0b3BTZWxlY3Rpb25DaGFuZ2UnXVxuICB9XG59O1xuXG5mdW5jdGlvbiBjcmVhdGVBbmRBY2N1bXVsYXRlQ2hhbmdlRXZlbnQoaW5zdCwgbmF0aXZlRXZlbnQsIHRhcmdldCkge1xuICB2YXIgZXZlbnQgPSBTeW50aGV0aWNFdmVudC5nZXRQb29sZWQoZXZlbnRUeXBlcy5jaGFuZ2UsIGluc3QsIG5hdGl2ZUV2ZW50LCB0YXJnZXQpO1xuICBldmVudC50eXBlID0gJ2NoYW5nZSc7XG4gIEV2ZW50UHJvcGFnYXRvcnMuYWNjdW11bGF0ZVR3b1BoYXNlRGlzcGF0Y2hlcyhldmVudCk7XG4gIHJldHVybiBldmVudDtcbn1cbi8qKlxuICogRm9yIElFIHNoaW1zXG4gKi9cbnZhciBhY3RpdmVFbGVtZW50ID0gbnVsbDtcbnZhciBhY3RpdmVFbGVtZW50SW5zdCA9IG51bGw7XG5cbi8qKlxuICogU0VDVElPTjogaGFuZGxlIGBjaGFuZ2VgIGV2ZW50XG4gKi9cbmZ1bmN0aW9uIHNob3VsZFVzZUNoYW5nZUV2ZW50KGVsZW0pIHtcbiAgdmFyIG5vZGVOYW1lID0gZWxlbS5ub2RlTmFtZSAmJiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG4gIHJldHVybiBub2RlTmFtZSA9PT0gJ3NlbGVjdCcgfHwgbm9kZU5hbWUgPT09ICdpbnB1dCcgJiYgZWxlbS50eXBlID09PSAnZmlsZSc7XG59XG5cbnZhciBkb2VzQ2hhbmdlRXZlbnRCdWJibGUgPSBmYWxzZTtcbmlmIChFeGVjdXRpb25FbnZpcm9ubWVudC5jYW5Vc2VET00pIHtcbiAgLy8gU2VlIGBoYW5kbGVDaGFuZ2VgIGNvbW1lbnQgYmVsb3dcbiAgZG9lc0NoYW5nZUV2ZW50QnViYmxlID0gaXNFdmVudFN1cHBvcnRlZCgnY2hhbmdlJykgJiYgKCFkb2N1bWVudC5kb2N1bWVudE1vZGUgfHwgZG9jdW1lbnQuZG9jdW1lbnRNb2RlID4gOCk7XG59XG5cbmZ1bmN0aW9uIG1hbnVhbERpc3BhdGNoQ2hhbmdlRXZlbnQobmF0aXZlRXZlbnQpIHtcbiAgdmFyIGV2ZW50ID0gY3JlYXRlQW5kQWNjdW11bGF0ZUNoYW5nZUV2ZW50KGFjdGl2ZUVsZW1lbnRJbnN0LCBuYXRpdmVFdmVudCwgZ2V0RXZlbnRUYXJnZXQobmF0aXZlRXZlbnQpKTtcblxuICAvLyBJZiBjaGFuZ2UgYW5kIHByb3BlcnR5Y2hhbmdlIGJ1YmJsZWQsIHdlJ2QganVzdCBiaW5kIHRvIGl0IGxpa2UgYWxsIHRoZVxuICAvLyBvdGhlciBldmVudHMgYW5kIGhhdmUgaXQgZ28gdGhyb3VnaCBSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXIuIFNpbmNlIGl0XG4gIC8vIGRvZXNuJ3QsIHdlIG1hbnVhbGx5IGxpc3RlbiBmb3IgdGhlIGV2ZW50cyBhbmQgc28gd2UgaGF2ZSB0byBlbnF1ZXVlIGFuZFxuICAvLyBwcm9jZXNzIHRoZSBhYnN0cmFjdCBldmVudCBtYW51YWxseS5cbiAgLy9cbiAgLy8gQmF0Y2hpbmcgaXMgbmVjZXNzYXJ5IGhlcmUgaW4gb3JkZXIgdG8gZW5zdXJlIHRoYXQgYWxsIGV2ZW50IGhhbmRsZXJzIHJ1blxuICAvLyBiZWZvcmUgdGhlIG5leHQgcmVyZW5kZXIgKGluY2x1ZGluZyBldmVudCBoYW5kbGVycyBhdHRhY2hlZCB0byBhbmNlc3RvclxuICAvLyBlbGVtZW50cyBpbnN0ZWFkIG9mIGRpcmVjdGx5IG9uIHRoZSBpbnB1dCkuIFdpdGhvdXQgdGhpcywgY29udHJvbGxlZFxuICAvLyBjb21wb25lbnRzIGRvbid0IHdvcmsgcHJvcGVybHkgaW4gY29uanVuY3Rpb24gd2l0aCBldmVudCBidWJibGluZyBiZWNhdXNlXG4gIC8vIHRoZSBjb21wb25lbnQgaXMgcmVyZW5kZXJlZCBhbmQgdGhlIHZhbHVlIHJldmVydGVkIGJlZm9yZSBhbGwgdGhlIGV2ZW50XG4gIC8vIGhhbmRsZXJzIGNhbiBydW4uIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzcwOC5cbiAgUmVhY3RVcGRhdGVzLmJhdGNoZWRVcGRhdGVzKHJ1bkV2ZW50SW5CYXRjaCwgZXZlbnQpO1xufVxuXG5mdW5jdGlvbiBydW5FdmVudEluQmF0Y2goZXZlbnQpIHtcbiAgRXZlbnRQbHVnaW5IdWIuZW5xdWV1ZUV2ZW50cyhldmVudCk7XG4gIEV2ZW50UGx1Z2luSHViLnByb2Nlc3NFdmVudFF1ZXVlKGZhbHNlKTtcbn1cblxuZnVuY3Rpb24gc3RhcnRXYXRjaGluZ0ZvckNoYW5nZUV2ZW50SUU4KHRhcmdldCwgdGFyZ2V0SW5zdCkge1xuICBhY3RpdmVFbGVtZW50ID0gdGFyZ2V0O1xuICBhY3RpdmVFbGVtZW50SW5zdCA9IHRhcmdldEluc3Q7XG4gIGFjdGl2ZUVsZW1lbnQuYXR0YWNoRXZlbnQoJ29uY2hhbmdlJywgbWFudWFsRGlzcGF0Y2hDaGFuZ2VFdmVudCk7XG59XG5cbmZ1bmN0aW9uIHN0b3BXYXRjaGluZ0ZvckNoYW5nZUV2ZW50SUU4KCkge1xuICBpZiAoIWFjdGl2ZUVsZW1lbnQpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgYWN0aXZlRWxlbWVudC5kZXRhY2hFdmVudCgnb25jaGFuZ2UnLCBtYW51YWxEaXNwYXRjaENoYW5nZUV2ZW50KTtcbiAgYWN0aXZlRWxlbWVudCA9IG51bGw7XG4gIGFjdGl2ZUVsZW1lbnRJbnN0ID0gbnVsbDtcbn1cblxuZnVuY3Rpb24gZ2V0SW5zdElmVmFsdWVDaGFuZ2VkKHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50KSB7XG4gIHZhciB1cGRhdGVkID0gaW5wdXRWYWx1ZVRyYWNraW5nLnVwZGF0ZVZhbHVlSWZDaGFuZ2VkKHRhcmdldEluc3QpO1xuICB2YXIgc2ltdWxhdGVkID0gbmF0aXZlRXZlbnQuc2ltdWxhdGVkID09PSB0cnVlICYmIENoYW5nZUV2ZW50UGx1Z2luLl9hbGxvd1NpbXVsYXRlZFBhc3NUaHJvdWdoO1xuXG4gIGlmICh1cGRhdGVkIHx8IHNpbXVsYXRlZCkge1xuICAgIHJldHVybiB0YXJnZXRJbnN0O1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldFRhcmdldEluc3RGb3JDaGFuZ2VFdmVudCh0b3BMZXZlbFR5cGUsIHRhcmdldEluc3QpIHtcbiAgaWYgKHRvcExldmVsVHlwZSA9PT0gJ3RvcENoYW5nZScpIHtcbiAgICByZXR1cm4gdGFyZ2V0SW5zdDtcbiAgfVxufVxuXG5mdW5jdGlvbiBoYW5kbGVFdmVudHNGb3JDaGFuZ2VFdmVudElFOCh0b3BMZXZlbFR5cGUsIHRhcmdldCwgdGFyZ2V0SW5zdCkge1xuICBpZiAodG9wTGV2ZWxUeXBlID09PSAndG9wRm9jdXMnKSB7XG4gICAgLy8gc3RvcFdhdGNoaW5nKCkgc2hvdWxkIGJlIGEgbm9vcCBoZXJlIGJ1dCB3ZSBjYWxsIGl0IGp1c3QgaW4gY2FzZSB3ZVxuICAgIC8vIG1pc3NlZCBhIGJsdXIgZXZlbnQgc29tZWhvdy5cbiAgICBzdG9wV2F0Y2hpbmdGb3JDaGFuZ2VFdmVudElFOCgpO1xuICAgIHN0YXJ0V2F0Y2hpbmdGb3JDaGFuZ2VFdmVudElFOCh0YXJnZXQsIHRhcmdldEluc3QpO1xuICB9IGVsc2UgaWYgKHRvcExldmVsVHlwZSA9PT0gJ3RvcEJsdXInKSB7XG4gICAgc3RvcFdhdGNoaW5nRm9yQ2hhbmdlRXZlbnRJRTgoKTtcbiAgfVxufVxuXG4vKipcbiAqIFNFQ1RJT046IGhhbmRsZSBgaW5wdXRgIGV2ZW50XG4gKi9cbnZhciBpc0lucHV0RXZlbnRTdXBwb3J0ZWQgPSBmYWxzZTtcbmlmIChFeGVjdXRpb25FbnZpcm9ubWVudC5jYW5Vc2VET00pIHtcbiAgLy8gSUU5IGNsYWltcyB0byBzdXBwb3J0IHRoZSBpbnB1dCBldmVudCBidXQgZmFpbHMgdG8gdHJpZ2dlciBpdCB3aGVuXG4gIC8vIGRlbGV0aW5nIHRleHQsIHNvIHdlIGlnbm9yZSBpdHMgaW5wdXQgZXZlbnRzLlxuXG4gIGlzSW5wdXRFdmVudFN1cHBvcnRlZCA9IGlzRXZlbnRTdXBwb3J0ZWQoJ2lucHV0JykgJiYgKCEoJ2RvY3VtZW50TW9kZScgaW4gZG9jdW1lbnQpIHx8IGRvY3VtZW50LmRvY3VtZW50TW9kZSA+IDkpO1xufVxuXG4vKipcbiAqIChGb3IgSUUgPD05KSBTdGFydHMgdHJhY2tpbmcgcHJvcGVydHljaGFuZ2UgZXZlbnRzIG9uIHRoZSBwYXNzZWQtaW4gZWxlbWVudFxuICogYW5kIG92ZXJyaWRlIHRoZSB2YWx1ZSBwcm9wZXJ0eSBzbyB0aGF0IHdlIGNhbiBkaXN0aW5ndWlzaCB1c2VyIGV2ZW50cyBmcm9tXG4gKiB2YWx1ZSBjaGFuZ2VzIGluIEpTLlxuICovXG5mdW5jdGlvbiBzdGFydFdhdGNoaW5nRm9yVmFsdWVDaGFuZ2UodGFyZ2V0LCB0YXJnZXRJbnN0KSB7XG4gIGFjdGl2ZUVsZW1lbnQgPSB0YXJnZXQ7XG4gIGFjdGl2ZUVsZW1lbnRJbnN0ID0gdGFyZ2V0SW5zdDtcbiAgYWN0aXZlRWxlbWVudC5hdHRhY2hFdmVudCgnb25wcm9wZXJ0eWNoYW5nZScsIGhhbmRsZVByb3BlcnR5Q2hhbmdlKTtcbn1cblxuLyoqXG4gKiAoRm9yIElFIDw9OSkgUmVtb3ZlcyB0aGUgZXZlbnQgbGlzdGVuZXJzIGZyb20gdGhlIGN1cnJlbnRseS10cmFja2VkIGVsZW1lbnQsXG4gKiBpZiBhbnkgZXhpc3RzLlxuICovXG5mdW5jdGlvbiBzdG9wV2F0Y2hpbmdGb3JWYWx1ZUNoYW5nZSgpIHtcbiAgaWYgKCFhY3RpdmVFbGVtZW50KSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGFjdGl2ZUVsZW1lbnQuZGV0YWNoRXZlbnQoJ29ucHJvcGVydHljaGFuZ2UnLCBoYW5kbGVQcm9wZXJ0eUNoYW5nZSk7XG5cbiAgYWN0aXZlRWxlbWVudCA9IG51bGw7XG4gIGFjdGl2ZUVsZW1lbnRJbnN0ID0gbnVsbDtcbn1cblxuLyoqXG4gKiAoRm9yIElFIDw9OSkgSGFuZGxlcyBhIHByb3BlcnR5Y2hhbmdlIGV2ZW50LCBzZW5kaW5nIGEgYGNoYW5nZWAgZXZlbnQgaWZcbiAqIHRoZSB2YWx1ZSBvZiB0aGUgYWN0aXZlIGVsZW1lbnQgaGFzIGNoYW5nZWQuXG4gKi9cbmZ1bmN0aW9uIGhhbmRsZVByb3BlcnR5Q2hhbmdlKG5hdGl2ZUV2ZW50KSB7XG4gIGlmIChuYXRpdmVFdmVudC5wcm9wZXJ0eU5hbWUgIT09ICd2YWx1ZScpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKGdldEluc3RJZlZhbHVlQ2hhbmdlZChhY3RpdmVFbGVtZW50SW5zdCwgbmF0aXZlRXZlbnQpKSB7XG4gICAgbWFudWFsRGlzcGF0Y2hDaGFuZ2VFdmVudChuYXRpdmVFdmVudCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaGFuZGxlRXZlbnRzRm9ySW5wdXRFdmVudFBvbHlmaWxsKHRvcExldmVsVHlwZSwgdGFyZ2V0LCB0YXJnZXRJbnN0KSB7XG4gIGlmICh0b3BMZXZlbFR5cGUgPT09ICd0b3BGb2N1cycpIHtcbiAgICAvLyBJbiBJRTgsIHdlIGNhbiBjYXB0dXJlIGFsbW9zdCBhbGwgLnZhbHVlIGNoYW5nZXMgYnkgYWRkaW5nIGFcbiAgICAvLyBwcm9wZXJ0eWNoYW5nZSBoYW5kbGVyIGFuZCBsb29raW5nIGZvciBldmVudHMgd2l0aCBwcm9wZXJ0eU5hbWVcbiAgICAvLyBlcXVhbCB0byAndmFsdWUnXG4gICAgLy8gSW4gSUU5LCBwcm9wZXJ0eWNoYW5nZSBmaXJlcyBmb3IgbW9zdCBpbnB1dCBldmVudHMgYnV0IGlzIGJ1Z2d5IGFuZFxuICAgIC8vIGRvZXNuJ3QgZmlyZSB3aGVuIHRleHQgaXMgZGVsZXRlZCwgYnV0IGNvbnZlbmllbnRseSwgc2VsZWN0aW9uY2hhbmdlXG4gICAgLy8gYXBwZWFycyB0byBmaXJlIGluIGFsbCBvZiB0aGUgcmVtYWluaW5nIGNhc2VzIHNvIHdlIGNhdGNoIHRob3NlIGFuZFxuICAgIC8vIGZvcndhcmQgdGhlIGV2ZW50IGlmIHRoZSB2YWx1ZSBoYXMgY2hhbmdlZFxuICAgIC8vIEluIGVpdGhlciBjYXNlLCB3ZSBkb24ndCB3YW50IHRvIGNhbGwgdGhlIGV2ZW50IGhhbmRsZXIgaWYgdGhlIHZhbHVlXG4gICAgLy8gaXMgY2hhbmdlZCBmcm9tIEpTIHNvIHdlIHJlZGVmaW5lIGEgc2V0dGVyIGZvciBgLnZhbHVlYCB0aGF0IHVwZGF0ZXNcbiAgICAvLyBvdXIgYWN0aXZlRWxlbWVudFZhbHVlIHZhcmlhYmxlLCBhbGxvd2luZyB1cyB0byBpZ25vcmUgdGhvc2UgY2hhbmdlc1xuICAgIC8vXG4gICAgLy8gc3RvcFdhdGNoaW5nKCkgc2hvdWxkIGJlIGEgbm9vcCBoZXJlIGJ1dCB3ZSBjYWxsIGl0IGp1c3QgaW4gY2FzZSB3ZVxuICAgIC8vIG1pc3NlZCBhIGJsdXIgZXZlbnQgc29tZWhvdy5cbiAgICBzdG9wV2F0Y2hpbmdGb3JWYWx1ZUNoYW5nZSgpO1xuICAgIHN0YXJ0V2F0Y2hpbmdGb3JWYWx1ZUNoYW5nZSh0YXJnZXQsIHRhcmdldEluc3QpO1xuICB9IGVsc2UgaWYgKHRvcExldmVsVHlwZSA9PT0gJ3RvcEJsdXInKSB7XG4gICAgc3RvcFdhdGNoaW5nRm9yVmFsdWVDaGFuZ2UoKTtcbiAgfVxufVxuXG4vLyBGb3IgSUU4IGFuZCBJRTkuXG5mdW5jdGlvbiBnZXRUYXJnZXRJbnN0Rm9ySW5wdXRFdmVudFBvbHlmaWxsKHRvcExldmVsVHlwZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQpIHtcbiAgaWYgKHRvcExldmVsVHlwZSA9PT0gJ3RvcFNlbGVjdGlvbkNoYW5nZScgfHwgdG9wTGV2ZWxUeXBlID09PSAndG9wS2V5VXAnIHx8IHRvcExldmVsVHlwZSA9PT0gJ3RvcEtleURvd24nKSB7XG4gICAgLy8gT24gdGhlIHNlbGVjdGlvbmNoYW5nZSBldmVudCwgdGhlIHRhcmdldCBpcyBqdXN0IGRvY3VtZW50IHdoaWNoIGlzbid0XG4gICAgLy8gaGVscGZ1bCBmb3IgdXMgc28ganVzdCBjaGVjayBhY3RpdmVFbGVtZW50IGluc3RlYWQuXG4gICAgLy9cbiAgICAvLyA5OSUgb2YgdGhlIHRpbWUsIGtleWRvd24gYW5kIGtleXVwIGFyZW4ndCBuZWNlc3NhcnkuIElFOCBmYWlscyB0byBmaXJlXG4gICAgLy8gcHJvcGVydHljaGFuZ2Ugb24gdGhlIGZpcnN0IGlucHV0IGV2ZW50IGFmdGVyIHNldHRpbmcgYHZhbHVlYCBmcm9tIGFcbiAgICAvLyBzY3JpcHQgYW5kIGZpcmVzIG9ubHkga2V5ZG93biwga2V5cHJlc3MsIGtleXVwLiBDYXRjaGluZyBrZXl1cCB1c3VhbGx5XG4gICAgLy8gZ2V0cyBpdCBhbmQgY2F0Y2hpbmcga2V5ZG93biBsZXRzIHVzIGZpcmUgYW4gZXZlbnQgZm9yIHRoZSBmaXJzdFxuICAgIC8vIGtleXN0cm9rZSBpZiB1c2VyIGRvZXMgYSBrZXkgcmVwZWF0IChpdCdsbCBiZSBhIGxpdHRsZSBkZWxheWVkOiByaWdodFxuICAgIC8vIGJlZm9yZSB0aGUgc2Vjb25kIGtleXN0cm9rZSkuIE90aGVyIGlucHV0IG1ldGhvZHMgKGUuZy4sIHBhc3RlKSBzZWVtIHRvXG4gICAgLy8gZmlyZSBzZWxlY3Rpb25jaGFuZ2Ugbm9ybWFsbHkuXG4gICAgcmV0dXJuIGdldEluc3RJZlZhbHVlQ2hhbmdlZChhY3RpdmVFbGVtZW50SW5zdCwgbmF0aXZlRXZlbnQpO1xuICB9XG59XG5cbi8qKlxuICogU0VDVElPTjogaGFuZGxlIGBjbGlja2AgZXZlbnRcbiAqL1xuZnVuY3Rpb24gc2hvdWxkVXNlQ2xpY2tFdmVudChlbGVtKSB7XG4gIC8vIFVzZSB0aGUgYGNsaWNrYCBldmVudCB0byBkZXRlY3QgY2hhbmdlcyB0byBjaGVja2JveCBhbmQgcmFkaW8gaW5wdXRzLlxuICAvLyBUaGlzIGFwcHJvYWNoIHdvcmtzIGFjcm9zcyBhbGwgYnJvd3NlcnMsIHdoZXJlYXMgYGNoYW5nZWAgZG9lcyBub3QgZmlyZVxuICAvLyB1bnRpbCBgYmx1cmAgaW4gSUU4LlxuICB2YXIgbm9kZU5hbWUgPSBlbGVtLm5vZGVOYW1lO1xuICByZXR1cm4gbm9kZU5hbWUgJiYgbm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ2lucHV0JyAmJiAoZWxlbS50eXBlID09PSAnY2hlY2tib3gnIHx8IGVsZW0udHlwZSA9PT0gJ3JhZGlvJyk7XG59XG5cbmZ1bmN0aW9uIGdldFRhcmdldEluc3RGb3JDbGlja0V2ZW50KHRvcExldmVsVHlwZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQpIHtcbiAgaWYgKHRvcExldmVsVHlwZSA9PT0gJ3RvcENsaWNrJykge1xuICAgIHJldHVybiBnZXRJbnN0SWZWYWx1ZUNoYW5nZWQodGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldFRhcmdldEluc3RGb3JJbnB1dE9yQ2hhbmdlRXZlbnQodG9wTGV2ZWxUeXBlLCB0YXJnZXRJbnN0LCBuYXRpdmVFdmVudCkge1xuICBpZiAodG9wTGV2ZWxUeXBlID09PSAndG9wSW5wdXQnIHx8IHRvcExldmVsVHlwZSA9PT0gJ3RvcENoYW5nZScpIHtcbiAgICByZXR1cm4gZ2V0SW5zdElmVmFsdWVDaGFuZ2VkKHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBoYW5kbGVDb250cm9sbGVkSW5wdXRCbHVyKGluc3QsIG5vZGUpIHtcbiAgLy8gVE9ETzogSW4gSUUsIGluc3QgaXMgb2NjYXNpb25hbGx5IG51bGwuIFdoeT9cbiAgaWYgKGluc3QgPT0gbnVsbCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIEZpYmVyIGFuZCBSZWFjdERPTSBrZWVwIHdyYXBwZXIgc3RhdGUgaW4gc2VwYXJhdGUgcGxhY2VzXG4gIHZhciBzdGF0ZSA9IGluc3QuX3dyYXBwZXJTdGF0ZSB8fCBub2RlLl93cmFwcGVyU3RhdGU7XG5cbiAgaWYgKCFzdGF0ZSB8fCAhc3RhdGUuY29udHJvbGxlZCB8fCBub2RlLnR5cGUgIT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gSWYgY29udHJvbGxlZCwgYXNzaWduIHRoZSB2YWx1ZSBhdHRyaWJ1dGUgdG8gdGhlIGN1cnJlbnQgdmFsdWUgb24gYmx1clxuICB2YXIgdmFsdWUgPSAnJyArIG5vZGUudmFsdWU7XG4gIGlmIChub2RlLmdldEF0dHJpYnV0ZSgndmFsdWUnKSAhPT0gdmFsdWUpIHtcbiAgICBub2RlLnNldEF0dHJpYnV0ZSgndmFsdWUnLCB2YWx1ZSk7XG4gIH1cbn1cblxuLyoqXG4gKiBUaGlzIHBsdWdpbiBjcmVhdGVzIGFuIGBvbkNoYW5nZWAgZXZlbnQgdGhhdCBub3JtYWxpemVzIGNoYW5nZSBldmVudHNcbiAqIGFjcm9zcyBmb3JtIGVsZW1lbnRzLiBUaGlzIGV2ZW50IGZpcmVzIGF0IGEgdGltZSB3aGVuIGl0J3MgcG9zc2libGUgdG9cbiAqIGNoYW5nZSB0aGUgZWxlbWVudCdzIHZhbHVlIHdpdGhvdXQgc2VlaW5nIGEgZmxpY2tlci5cbiAqXG4gKiBTdXBwb3J0ZWQgZWxlbWVudHMgYXJlOlxuICogLSBpbnB1dCAoc2VlIGBpc1RleHRJbnB1dEVsZW1lbnRgKVxuICogLSB0ZXh0YXJlYVxuICogLSBzZWxlY3RcbiAqL1xudmFyIENoYW5nZUV2ZW50UGx1Z2luID0ge1xuICBldmVudFR5cGVzOiBldmVudFR5cGVzLFxuXG4gIF9hbGxvd1NpbXVsYXRlZFBhc3NUaHJvdWdoOiB0cnVlLFxuICBfaXNJbnB1dEV2ZW50U3VwcG9ydGVkOiBpc0lucHV0RXZlbnRTdXBwb3J0ZWQsXG5cbiAgZXh0cmFjdEV2ZW50czogZnVuY3Rpb24gKHRvcExldmVsVHlwZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KSB7XG4gICAgdmFyIHRhcmdldE5vZGUgPSB0YXJnZXRJbnN0ID8gUmVhY3RET01Db21wb25lbnRUcmVlLmdldE5vZGVGcm9tSW5zdGFuY2UodGFyZ2V0SW5zdCkgOiB3aW5kb3c7XG5cbiAgICB2YXIgZ2V0VGFyZ2V0SW5zdEZ1bmMsIGhhbmRsZUV2ZW50RnVuYztcbiAgICBpZiAoc2hvdWxkVXNlQ2hhbmdlRXZlbnQodGFyZ2V0Tm9kZSkpIHtcbiAgICAgIGlmIChkb2VzQ2hhbmdlRXZlbnRCdWJibGUpIHtcbiAgICAgICAgZ2V0VGFyZ2V0SW5zdEZ1bmMgPSBnZXRUYXJnZXRJbnN0Rm9yQ2hhbmdlRXZlbnQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBoYW5kbGVFdmVudEZ1bmMgPSBoYW5kbGVFdmVudHNGb3JDaGFuZ2VFdmVudElFODtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGlzVGV4dElucHV0RWxlbWVudCh0YXJnZXROb2RlKSkge1xuICAgICAgaWYgKGlzSW5wdXRFdmVudFN1cHBvcnRlZCkge1xuICAgICAgICBnZXRUYXJnZXRJbnN0RnVuYyA9IGdldFRhcmdldEluc3RGb3JJbnB1dE9yQ2hhbmdlRXZlbnQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBnZXRUYXJnZXRJbnN0RnVuYyA9IGdldFRhcmdldEluc3RGb3JJbnB1dEV2ZW50UG9seWZpbGw7XG4gICAgICAgIGhhbmRsZUV2ZW50RnVuYyA9IGhhbmRsZUV2ZW50c0ZvcklucHV0RXZlbnRQb2x5ZmlsbDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHNob3VsZFVzZUNsaWNrRXZlbnQodGFyZ2V0Tm9kZSkpIHtcbiAgICAgIGdldFRhcmdldEluc3RGdW5jID0gZ2V0VGFyZ2V0SW5zdEZvckNsaWNrRXZlbnQ7XG4gICAgfVxuXG4gICAgaWYgKGdldFRhcmdldEluc3RGdW5jKSB7XG4gICAgICB2YXIgaW5zdCA9IGdldFRhcmdldEluc3RGdW5jKHRvcExldmVsVHlwZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQpO1xuICAgICAgaWYgKGluc3QpIHtcbiAgICAgICAgdmFyIGV2ZW50ID0gY3JlYXRlQW5kQWNjdW11bGF0ZUNoYW5nZUV2ZW50KGluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCk7XG4gICAgICAgIHJldHVybiBldmVudDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaGFuZGxlRXZlbnRGdW5jKSB7XG4gICAgICBoYW5kbGVFdmVudEZ1bmModG9wTGV2ZWxUeXBlLCB0YXJnZXROb2RlLCB0YXJnZXRJbnN0KTtcbiAgICB9XG5cbiAgICAvLyBXaGVuIGJsdXJyaW5nLCBzZXQgdGhlIHZhbHVlIGF0dHJpYnV0ZSBmb3IgbnVtYmVyIGlucHV0c1xuICAgIGlmICh0b3BMZXZlbFR5cGUgPT09ICd0b3BCbHVyJykge1xuICAgICAgaGFuZGxlQ29udHJvbGxlZElucHV0Qmx1cih0YXJnZXRJbnN0LCB0YXJnZXROb2RlKTtcbiAgICB9XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gQ2hhbmdlRXZlbnRQbHVnaW47XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1kb20vbGliL0NoYW5nZUV2ZW50UGx1Z2luLmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIF9wcm9kSW52YXJpYW50ID0gcmVxdWlyZSgnLi9yZWFjdFByb2RJbnZhcmlhbnQnKTtcblxudmFyIERPTUxhenlUcmVlID0gcmVxdWlyZSgnLi9ET01MYXp5VHJlZScpO1xudmFyIEV4ZWN1dGlvbkVudmlyb25tZW50ID0gcmVxdWlyZSgnZmJqcy9saWIvRXhlY3V0aW9uRW52aXJvbm1lbnQnKTtcblxudmFyIGNyZWF0ZU5vZGVzRnJvbU1hcmt1cCA9IHJlcXVpcmUoJ2ZianMvbGliL2NyZWF0ZU5vZGVzRnJvbU1hcmt1cCcpO1xudmFyIGVtcHR5RnVuY3Rpb24gPSByZXF1aXJlKCdmYmpzL2xpYi9lbXB0eUZ1bmN0aW9uJyk7XG52YXIgaW52YXJpYW50ID0gcmVxdWlyZSgnZmJqcy9saWIvaW52YXJpYW50Jyk7XG5cbnZhciBEYW5nZXIgPSB7XG4gIC8qKlxuICAgKiBSZXBsYWNlcyBhIG5vZGUgd2l0aCBhIHN0cmluZyBvZiBtYXJrdXAgYXQgaXRzIGN1cnJlbnQgcG9zaXRpb24gd2l0aGluIGl0c1xuICAgKiBwYXJlbnQuIFRoZSBtYXJrdXAgbXVzdCByZW5kZXIgaW50byBhIHNpbmdsZSByb290IG5vZGUuXG4gICAqXG4gICAqIEBwYXJhbSB7RE9NRWxlbWVudH0gb2xkQ2hpbGQgQ2hpbGQgbm9kZSB0byByZXBsYWNlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbWFya3VwIE1hcmt1cCB0byByZW5kZXIgaW4gcGxhY2Ugb2YgdGhlIGNoaWxkIG5vZGUuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZGFuZ2Vyb3VzbHlSZXBsYWNlTm9kZVdpdGhNYXJrdXA6IGZ1bmN0aW9uIChvbGRDaGlsZCwgbWFya3VwKSB7XG4gICAgIUV4ZWN1dGlvbkVudmlyb25tZW50LmNhblVzZURPTSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICdkYW5nZXJvdXNseVJlcGxhY2VOb2RlV2l0aE1hcmt1cCguLi4pOiBDYW5ub3QgcmVuZGVyIG1hcmt1cCBpbiBhIHdvcmtlciB0aHJlYWQuIE1ha2Ugc3VyZSBgd2luZG93YCBhbmQgYGRvY3VtZW50YCBhcmUgYXZhaWxhYmxlIGdsb2JhbGx5IGJlZm9yZSByZXF1aXJpbmcgUmVhY3Qgd2hlbiB1bml0IHRlc3Rpbmcgb3IgdXNlIFJlYWN0RE9NU2VydmVyLnJlbmRlclRvU3RyaW5nKCkgZm9yIHNlcnZlciByZW5kZXJpbmcuJykgOiBfcHJvZEludmFyaWFudCgnNTYnKSA6IHZvaWQgMDtcbiAgICAhbWFya3VwID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IGludmFyaWFudChmYWxzZSwgJ2Rhbmdlcm91c2x5UmVwbGFjZU5vZGVXaXRoTWFya3VwKC4uLik6IE1pc3NpbmcgbWFya3VwLicpIDogX3Byb2RJbnZhcmlhbnQoJzU3JykgOiB2b2lkIDA7XG4gICAgIShvbGRDaGlsZC5ub2RlTmFtZSAhPT0gJ0hUTUwnKSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICdkYW5nZXJvdXNseVJlcGxhY2VOb2RlV2l0aE1hcmt1cCguLi4pOiBDYW5ub3QgcmVwbGFjZSBtYXJrdXAgb2YgdGhlIDxodG1sPiBub2RlLiBUaGlzIGlzIGJlY2F1c2UgYnJvd3NlciBxdWlya3MgbWFrZSB0aGlzIHVucmVsaWFibGUgYW5kL29yIHNsb3cuIElmIHlvdSB3YW50IHRvIHJlbmRlciB0byB0aGUgcm9vdCB5b3UgbXVzdCB1c2Ugc2VydmVyIHJlbmRlcmluZy4gU2VlIFJlYWN0RE9NU2VydmVyLnJlbmRlclRvU3RyaW5nKCkuJykgOiBfcHJvZEludmFyaWFudCgnNTgnKSA6IHZvaWQgMDtcblxuICAgIGlmICh0eXBlb2YgbWFya3VwID09PSAnc3RyaW5nJykge1xuICAgICAgdmFyIG5ld0NoaWxkID0gY3JlYXRlTm9kZXNGcm9tTWFya3VwKG1hcmt1cCwgZW1wdHlGdW5jdGlvbilbMF07XG4gICAgICBvbGRDaGlsZC5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChuZXdDaGlsZCwgb2xkQ2hpbGQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBET01MYXp5VHJlZS5yZXBsYWNlQ2hpbGRXaXRoVHJlZShvbGRDaGlsZCwgbWFya3VwKTtcbiAgICB9XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gRGFuZ2VyO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QtZG9tL2xpYi9EYW5nZXIuanMiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIE1vZHVsZSB0aGF0IGlzIGluamVjdGFibGUgaW50byBgRXZlbnRQbHVnaW5IdWJgLCB0aGF0IHNwZWNpZmllcyBhXG4gKiBkZXRlcm1pbmlzdGljIG9yZGVyaW5nIG9mIGBFdmVudFBsdWdpbmBzLiBBIGNvbnZlbmllbnQgd2F5IHRvIHJlYXNvbiBhYm91dFxuICogcGx1Z2lucywgd2l0aG91dCBoYXZpbmcgdG8gcGFja2FnZSBldmVyeSBvbmUgb2YgdGhlbS4gVGhpcyBpcyBiZXR0ZXIgdGhhblxuICogaGF2aW5nIHBsdWdpbnMgYmUgb3JkZXJlZCBpbiB0aGUgc2FtZSBvcmRlciB0aGF0IHRoZXkgYXJlIGluamVjdGVkIGJlY2F1c2VcbiAqIHRoYXQgb3JkZXJpbmcgd291bGQgYmUgaW5mbHVlbmNlZCBieSB0aGUgcGFja2FnaW5nIG9yZGVyLlxuICogYFJlc3BvbmRlckV2ZW50UGx1Z2luYCBtdXN0IG9jY3VyIGJlZm9yZSBgU2ltcGxlRXZlbnRQbHVnaW5gIHNvIHRoYXRcbiAqIHByZXZlbnRpbmcgZGVmYXVsdCBvbiBldmVudHMgaXMgY29udmVuaWVudCBpbiBgU2ltcGxlRXZlbnRQbHVnaW5gIGhhbmRsZXJzLlxuICovXG5cbnZhciBEZWZhdWx0RXZlbnRQbHVnaW5PcmRlciA9IFsnUmVzcG9uZGVyRXZlbnRQbHVnaW4nLCAnU2ltcGxlRXZlbnRQbHVnaW4nLCAnVGFwRXZlbnRQbHVnaW4nLCAnRW50ZXJMZWF2ZUV2ZW50UGx1Z2luJywgJ0NoYW5nZUV2ZW50UGx1Z2luJywgJ1NlbGVjdEV2ZW50UGx1Z2luJywgJ0JlZm9yZUlucHV0RXZlbnRQbHVnaW4nXTtcblxubW9kdWxlLmV4cG9ydHMgPSBEZWZhdWx0RXZlbnRQbHVnaW5PcmRlcjtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3JlYWN0LWRvbS9saWIvRGVmYXVsdEV2ZW50UGx1Z2luT3JkZXIuanMiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgRXZlbnRQcm9wYWdhdG9ycyA9IHJlcXVpcmUoJy4vRXZlbnRQcm9wYWdhdG9ycycpO1xudmFyIFJlYWN0RE9NQ29tcG9uZW50VHJlZSA9IHJlcXVpcmUoJy4vUmVhY3RET01Db21wb25lbnRUcmVlJyk7XG52YXIgU3ludGhldGljTW91c2VFdmVudCA9IHJlcXVpcmUoJy4vU3ludGhldGljTW91c2VFdmVudCcpO1xuXG52YXIgZXZlbnRUeXBlcyA9IHtcbiAgbW91c2VFbnRlcjoge1xuICAgIHJlZ2lzdHJhdGlvbk5hbWU6ICdvbk1vdXNlRW50ZXInLFxuICAgIGRlcGVuZGVuY2llczogWyd0b3BNb3VzZU91dCcsICd0b3BNb3VzZU92ZXInXVxuICB9LFxuICBtb3VzZUxlYXZlOiB7XG4gICAgcmVnaXN0cmF0aW9uTmFtZTogJ29uTW91c2VMZWF2ZScsXG4gICAgZGVwZW5kZW5jaWVzOiBbJ3RvcE1vdXNlT3V0JywgJ3RvcE1vdXNlT3ZlciddXG4gIH1cbn07XG5cbnZhciBFbnRlckxlYXZlRXZlbnRQbHVnaW4gPSB7XG4gIGV2ZW50VHlwZXM6IGV2ZW50VHlwZXMsXG5cbiAgLyoqXG4gICAqIEZvciBhbG1vc3QgZXZlcnkgaW50ZXJhY3Rpb24gd2UgY2FyZSBhYm91dCwgdGhlcmUgd2lsbCBiZSBib3RoIGEgdG9wLWxldmVsXG4gICAqIGBtb3VzZW92ZXJgIGFuZCBgbW91c2VvdXRgIGV2ZW50IHRoYXQgb2NjdXJzLiBPbmx5IHVzZSBgbW91c2VvdXRgIHNvIHRoYXRcbiAgICogd2UgZG8gbm90IGV4dHJhY3QgZHVwbGljYXRlIGV2ZW50cy4gSG93ZXZlciwgbW92aW5nIHRoZSBtb3VzZSBpbnRvIHRoZVxuICAgKiBicm93c2VyIGZyb20gb3V0c2lkZSB3aWxsIG5vdCBmaXJlIGEgYG1vdXNlb3V0YCBldmVudC4gSW4gdGhpcyBjYXNlLCB3ZSB1c2VcbiAgICogdGhlIGBtb3VzZW92ZXJgIHRvcC1sZXZlbCBldmVudC5cbiAgICovXG4gIGV4dHJhY3RFdmVudHM6IGZ1bmN0aW9uICh0b3BMZXZlbFR5cGUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCkge1xuICAgIGlmICh0b3BMZXZlbFR5cGUgPT09ICd0b3BNb3VzZU92ZXInICYmIChuYXRpdmVFdmVudC5yZWxhdGVkVGFyZ2V0IHx8IG5hdGl2ZUV2ZW50LmZyb21FbGVtZW50KSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGlmICh0b3BMZXZlbFR5cGUgIT09ICd0b3BNb3VzZU91dCcgJiYgdG9wTGV2ZWxUeXBlICE9PSAndG9wTW91c2VPdmVyJykge1xuICAgICAgLy8gTXVzdCBub3QgYmUgYSBtb3VzZSBpbiBvciBtb3VzZSBvdXQgLSBpZ25vcmluZy5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHZhciB3aW47XG4gICAgaWYgKG5hdGl2ZUV2ZW50VGFyZ2V0LndpbmRvdyA9PT0gbmF0aXZlRXZlbnRUYXJnZXQpIHtcbiAgICAgIC8vIGBuYXRpdmVFdmVudFRhcmdldGAgaXMgcHJvYmFibHkgYSB3aW5kb3cgb2JqZWN0LlxuICAgICAgd2luID0gbmF0aXZlRXZlbnRUYXJnZXQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRPRE86IEZpZ3VyZSBvdXQgd2h5IGBvd25lckRvY3VtZW50YCBpcyBzb21ldGltZXMgdW5kZWZpbmVkIGluIElFOC5cbiAgICAgIHZhciBkb2MgPSBuYXRpdmVFdmVudFRhcmdldC5vd25lckRvY3VtZW50O1xuICAgICAgaWYgKGRvYykge1xuICAgICAgICB3aW4gPSBkb2MuZGVmYXVsdFZpZXcgfHwgZG9jLnBhcmVudFdpbmRvdztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdpbiA9IHdpbmRvdztcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgZnJvbTtcbiAgICB2YXIgdG87XG4gICAgaWYgKHRvcExldmVsVHlwZSA9PT0gJ3RvcE1vdXNlT3V0Jykge1xuICAgICAgZnJvbSA9IHRhcmdldEluc3Q7XG4gICAgICB2YXIgcmVsYXRlZCA9IG5hdGl2ZUV2ZW50LnJlbGF0ZWRUYXJnZXQgfHwgbmF0aXZlRXZlbnQudG9FbGVtZW50O1xuICAgICAgdG8gPSByZWxhdGVkID8gUmVhY3RET01Db21wb25lbnRUcmVlLmdldENsb3Nlc3RJbnN0YW5jZUZyb21Ob2RlKHJlbGF0ZWQpIDogbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTW92aW5nIHRvIGEgbm9kZSBmcm9tIG91dHNpZGUgdGhlIHdpbmRvdy5cbiAgICAgIGZyb20gPSBudWxsO1xuICAgICAgdG8gPSB0YXJnZXRJbnN0O1xuICAgIH1cblxuICAgIGlmIChmcm9tID09PSB0bykge1xuICAgICAgLy8gTm90aGluZyBwZXJ0YWlucyB0byBvdXIgbWFuYWdlZCBjb21wb25lbnRzLlxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgdmFyIGZyb21Ob2RlID0gZnJvbSA9PSBudWxsID8gd2luIDogUmVhY3RET01Db21wb25lbnRUcmVlLmdldE5vZGVGcm9tSW5zdGFuY2UoZnJvbSk7XG4gICAgdmFyIHRvTm9kZSA9IHRvID09IG51bGwgPyB3aW4gOiBSZWFjdERPTUNvbXBvbmVudFRyZWUuZ2V0Tm9kZUZyb21JbnN0YW5jZSh0byk7XG5cbiAgICB2YXIgbGVhdmUgPSBTeW50aGV0aWNNb3VzZUV2ZW50LmdldFBvb2xlZChldmVudFR5cGVzLm1vdXNlTGVhdmUsIGZyb20sIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCk7XG4gICAgbGVhdmUudHlwZSA9ICdtb3VzZWxlYXZlJztcbiAgICBsZWF2ZS50YXJnZXQgPSBmcm9tTm9kZTtcbiAgICBsZWF2ZS5yZWxhdGVkVGFyZ2V0ID0gdG9Ob2RlO1xuXG4gICAgdmFyIGVudGVyID0gU3ludGhldGljTW91c2VFdmVudC5nZXRQb29sZWQoZXZlbnRUeXBlcy5tb3VzZUVudGVyLCB0bywgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KTtcbiAgICBlbnRlci50eXBlID0gJ21vdXNlZW50ZXInO1xuICAgIGVudGVyLnRhcmdldCA9IHRvTm9kZTtcbiAgICBlbnRlci5yZWxhdGVkVGFyZ2V0ID0gZnJvbU5vZGU7XG5cbiAgICBFdmVudFByb3BhZ2F0b3JzLmFjY3VtdWxhdGVFbnRlckxlYXZlRGlzcGF0Y2hlcyhsZWF2ZSwgZW50ZXIsIGZyb20sIHRvKTtcblxuICAgIHJldHVybiBbbGVhdmUsIGVudGVyXTtcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBFbnRlckxlYXZlRXZlbnRQbHVnaW47XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1kb20vbGliL0VudGVyTGVhdmVFdmVudFBsdWdpbi5qcyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBfYXNzaWduID0gcmVxdWlyZSgnb2JqZWN0LWFzc2lnbicpO1xuXG52YXIgUG9vbGVkQ2xhc3MgPSByZXF1aXJlKCcuL1Bvb2xlZENsYXNzJyk7XG5cbnZhciBnZXRUZXh0Q29udGVudEFjY2Vzc29yID0gcmVxdWlyZSgnLi9nZXRUZXh0Q29udGVudEFjY2Vzc29yJyk7XG5cbi8qKlxuICogVGhpcyBoZWxwZXIgY2xhc3Mgc3RvcmVzIGluZm9ybWF0aW9uIGFib3V0IHRleHQgY29udGVudCBvZiBhIHRhcmdldCBub2RlLFxuICogYWxsb3dpbmcgY29tcGFyaXNvbiBvZiBjb250ZW50IGJlZm9yZSBhbmQgYWZ0ZXIgYSBnaXZlbiBldmVudC5cbiAqXG4gKiBJZGVudGlmeSB0aGUgbm9kZSB3aGVyZSBzZWxlY3Rpb24gY3VycmVudGx5IGJlZ2lucywgdGhlbiBvYnNlcnZlXG4gKiBib3RoIGl0cyB0ZXh0IGNvbnRlbnQgYW5kIGl0cyBjdXJyZW50IHBvc2l0aW9uIGluIHRoZSBET00uIFNpbmNlIHRoZVxuICogYnJvd3NlciBtYXkgbmF0aXZlbHkgcmVwbGFjZSB0aGUgdGFyZ2V0IG5vZGUgZHVyaW5nIGNvbXBvc2l0aW9uLCB3ZSBjYW5cbiAqIHVzZSBpdHMgcG9zaXRpb24gdG8gZmluZCBpdHMgcmVwbGFjZW1lbnQuXG4gKlxuICogQHBhcmFtIHtET01FdmVudFRhcmdldH0gcm9vdFxuICovXG5mdW5jdGlvbiBGYWxsYmFja0NvbXBvc2l0aW9uU3RhdGUocm9vdCkge1xuICB0aGlzLl9yb290ID0gcm9vdDtcbiAgdGhpcy5fc3RhcnRUZXh0ID0gdGhpcy5nZXRUZXh0KCk7XG4gIHRoaXMuX2ZhbGxiYWNrVGV4dCA9IG51bGw7XG59XG5cbl9hc3NpZ24oRmFsbGJhY2tDb21wb3NpdGlvblN0YXRlLnByb3RvdHlwZSwge1xuICBkZXN0cnVjdG9yOiBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5fcm9vdCA9IG51bGw7XG4gICAgdGhpcy5fc3RhcnRUZXh0ID0gbnVsbDtcbiAgICB0aGlzLl9mYWxsYmFja1RleHQgPSBudWxsO1xuICB9LFxuXG4gIC8qKlxuICAgKiBHZXQgY3VycmVudCB0ZXh0IG9mIGlucHV0LlxuICAgKlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuICBnZXRUZXh0OiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCd2YWx1ZScgaW4gdGhpcy5fcm9vdCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3Jvb3QudmFsdWU7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9yb290W2dldFRleHRDb250ZW50QWNjZXNzb3IoKV07XG4gIH0sXG5cbiAgLyoqXG4gICAqIERldGVybWluZSB0aGUgZGlmZmVyaW5nIHN1YnN0cmluZyBiZXR3ZWVuIHRoZSBpbml0aWFsbHkgc3RvcmVkXG4gICAqIHRleHQgY29udGVudCBhbmQgdGhlIGN1cnJlbnQgY29udGVudC5cbiAgICpcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cbiAgZ2V0RGF0YTogZnVuY3Rpb24gKCkge1xuICAgIGlmICh0aGlzLl9mYWxsYmFja1RleHQpIHtcbiAgICAgIHJldHVybiB0aGlzLl9mYWxsYmFja1RleHQ7XG4gICAgfVxuXG4gICAgdmFyIHN0YXJ0O1xuICAgIHZhciBzdGFydFZhbHVlID0gdGhpcy5fc3RhcnRUZXh0O1xuICAgIHZhciBzdGFydExlbmd0aCA9IHN0YXJ0VmFsdWUubGVuZ3RoO1xuICAgIHZhciBlbmQ7XG4gICAgdmFyIGVuZFZhbHVlID0gdGhpcy5nZXRUZXh0KCk7XG4gICAgdmFyIGVuZExlbmd0aCA9IGVuZFZhbHVlLmxlbmd0aDtcblxuICAgIGZvciAoc3RhcnQgPSAwOyBzdGFydCA8IHN0YXJ0TGVuZ3RoOyBzdGFydCsrKSB7XG4gICAgICBpZiAoc3RhcnRWYWx1ZVtzdGFydF0gIT09IGVuZFZhbHVlW3N0YXJ0XSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgbWluRW5kID0gc3RhcnRMZW5ndGggLSBzdGFydDtcbiAgICBmb3IgKGVuZCA9IDE7IGVuZCA8PSBtaW5FbmQ7IGVuZCsrKSB7XG4gICAgICBpZiAoc3RhcnRWYWx1ZVtzdGFydExlbmd0aCAtIGVuZF0gIT09IGVuZFZhbHVlW2VuZExlbmd0aCAtIGVuZF0pIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHNsaWNlVGFpbCA9IGVuZCA+IDEgPyAxIC0gZW5kIDogdW5kZWZpbmVkO1xuICAgIHRoaXMuX2ZhbGxiYWNrVGV4dCA9IGVuZFZhbHVlLnNsaWNlKHN0YXJ0LCBzbGljZVRhaWwpO1xuICAgIHJldHVybiB0aGlzLl9mYWxsYmFja1RleHQ7XG4gIH1cbn0pO1xuXG5Qb29sZWRDbGFzcy5hZGRQb29saW5nVG8oRmFsbGJhY2tDb21wb3NpdGlvblN0YXRlKTtcblxubW9kdWxlLmV4cG9ydHMgPSBGYWxsYmFja0NvbXBvc2l0aW9uU3RhdGU7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1kb20vbGliL0ZhbGxiYWNrQ29tcG9zaXRpb25TdGF0ZS5qcyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBET01Qcm9wZXJ0eSA9IHJlcXVpcmUoJy4vRE9NUHJvcGVydHknKTtcblxudmFyIE1VU1RfVVNFX1BST1BFUlRZID0gRE9NUHJvcGVydHkuaW5qZWN0aW9uLk1VU1RfVVNFX1BST1BFUlRZO1xudmFyIEhBU19CT09MRUFOX1ZBTFVFID0gRE9NUHJvcGVydHkuaW5qZWN0aW9uLkhBU19CT09MRUFOX1ZBTFVFO1xudmFyIEhBU19OVU1FUklDX1ZBTFVFID0gRE9NUHJvcGVydHkuaW5qZWN0aW9uLkhBU19OVU1FUklDX1ZBTFVFO1xudmFyIEhBU19QT1NJVElWRV9OVU1FUklDX1ZBTFVFID0gRE9NUHJvcGVydHkuaW5qZWN0aW9uLkhBU19QT1NJVElWRV9OVU1FUklDX1ZBTFVFO1xudmFyIEhBU19PVkVSTE9BREVEX0JPT0xFQU5fVkFMVUUgPSBET01Qcm9wZXJ0eS5pbmplY3Rpb24uSEFTX09WRVJMT0FERURfQk9PTEVBTl9WQUxVRTtcblxudmFyIEhUTUxET01Qcm9wZXJ0eUNvbmZpZyA9IHtcbiAgaXNDdXN0b21BdHRyaWJ1dGU6IFJlZ0V4cC5wcm90b3R5cGUudGVzdC5iaW5kKG5ldyBSZWdFeHAoJ14oZGF0YXxhcmlhKS1bJyArIERPTVByb3BlcnR5LkFUVFJJQlVURV9OQU1FX0NIQVIgKyAnXSokJykpLFxuICBQcm9wZXJ0aWVzOiB7XG4gICAgLyoqXG4gICAgICogU3RhbmRhcmQgUHJvcGVydGllc1xuICAgICAqL1xuICAgIGFjY2VwdDogMCxcbiAgICBhY2NlcHRDaGFyc2V0OiAwLFxuICAgIGFjY2Vzc0tleTogMCxcbiAgICBhY3Rpb246IDAsXG4gICAgYWxsb3dGdWxsU2NyZWVuOiBIQVNfQk9PTEVBTl9WQUxVRSxcbiAgICBhbGxvd1RyYW5zcGFyZW5jeTogMCxcbiAgICBhbHQ6IDAsXG4gICAgLy8gc3BlY2lmaWVzIHRhcmdldCBjb250ZXh0IGZvciBsaW5rcyB3aXRoIGBwcmVsb2FkYCB0eXBlXG4gICAgYXM6IDAsXG4gICAgYXN5bmM6IEhBU19CT09MRUFOX1ZBTFVFLFxuICAgIGF1dG9Db21wbGV0ZTogMCxcbiAgICAvLyBhdXRvRm9jdXMgaXMgcG9seWZpbGxlZC9ub3JtYWxpemVkIGJ5IEF1dG9Gb2N1c1V0aWxzXG4gICAgLy8gYXV0b0ZvY3VzOiBIQVNfQk9PTEVBTl9WQUxVRSxcbiAgICBhdXRvUGxheTogSEFTX0JPT0xFQU5fVkFMVUUsXG4gICAgY2FwdHVyZTogSEFTX0JPT0xFQU5fVkFMVUUsXG4gICAgY2VsbFBhZGRpbmc6IDAsXG4gICAgY2VsbFNwYWNpbmc6IDAsXG4gICAgY2hhclNldDogMCxcbiAgICBjaGFsbGVuZ2U6IDAsXG4gICAgY2hlY2tlZDogTVVTVF9VU0VfUFJPUEVSVFkgfCBIQVNfQk9PTEVBTl9WQUxVRSxcbiAgICBjaXRlOiAwLFxuICAgIGNsYXNzSUQ6IDAsXG4gICAgY2xhc3NOYW1lOiAwLFxuICAgIGNvbHM6IEhBU19QT1NJVElWRV9OVU1FUklDX1ZBTFVFLFxuICAgIGNvbFNwYW46IDAsXG4gICAgY29udGVudDogMCxcbiAgICBjb250ZW50RWRpdGFibGU6IDAsXG4gICAgY29udGV4dE1lbnU6IDAsXG4gICAgY29udHJvbHM6IEhBU19CT09MRUFOX1ZBTFVFLFxuICAgIGNvb3JkczogMCxcbiAgICBjcm9zc09yaWdpbjogMCxcbiAgICBkYXRhOiAwLCAvLyBGb3IgYDxvYmplY3QgLz5gIGFjdHMgYXMgYHNyY2AuXG4gICAgZGF0ZVRpbWU6IDAsXG4gICAgJ2RlZmF1bHQnOiBIQVNfQk9PTEVBTl9WQUxVRSxcbiAgICBkZWZlcjogSEFTX0JPT0xFQU5fVkFMVUUsXG4gICAgZGlyOiAwLFxuICAgIGRpc2FibGVkOiBIQVNfQk9PTEVBTl9WQUxVRSxcbiAgICBkb3dubG9hZDogSEFTX09WRVJMT0FERURfQk9PTEVBTl9WQUxVRSxcbiAgICBkcmFnZ2FibGU6IDAsXG4gICAgZW5jVHlwZTogMCxcbiAgICBmb3JtOiAwLFxuICAgIGZvcm1BY3Rpb246IDAsXG4gICAgZm9ybUVuY1R5cGU6IDAsXG4gICAgZm9ybU1ldGhvZDogMCxcbiAgICBmb3JtTm9WYWxpZGF0ZTogSEFTX0JPT0xFQU5fVkFMVUUsXG4gICAgZm9ybVRhcmdldDogMCxcbiAgICBmcmFtZUJvcmRlcjogMCxcbiAgICBoZWFkZXJzOiAwLFxuICAgIGhlaWdodDogMCxcbiAgICBoaWRkZW46IEhBU19CT09MRUFOX1ZBTFVFLFxuICAgIGhpZ2g6IDAsXG4gICAgaHJlZjogMCxcbiAgICBocmVmTGFuZzogMCxcbiAgICBodG1sRm9yOiAwLFxuICAgIGh0dHBFcXVpdjogMCxcbiAgICBpY29uOiAwLFxuICAgIGlkOiAwLFxuICAgIGlucHV0TW9kZTogMCxcbiAgICBpbnRlZ3JpdHk6IDAsXG4gICAgaXM6IDAsXG4gICAga2V5UGFyYW1zOiAwLFxuICAgIGtleVR5cGU6IDAsXG4gICAga2luZDogMCxcbiAgICBsYWJlbDogMCxcbiAgICBsYW5nOiAwLFxuICAgIGxpc3Q6IDAsXG4gICAgbG9vcDogSEFTX0JPT0xFQU5fVkFMVUUsXG4gICAgbG93OiAwLFxuICAgIG1hbmlmZXN0OiAwLFxuICAgIG1hcmdpbkhlaWdodDogMCxcbiAgICBtYXJnaW5XaWR0aDogMCxcbiAgICBtYXg6IDAsXG4gICAgbWF4TGVuZ3RoOiAwLFxuICAgIG1lZGlhOiAwLFxuICAgIG1lZGlhR3JvdXA6IDAsXG4gICAgbWV0aG9kOiAwLFxuICAgIG1pbjogMCxcbiAgICBtaW5MZW5ndGg6IDAsXG4gICAgLy8gQ2F1dGlvbjsgYG9wdGlvbi5zZWxlY3RlZGAgaXMgbm90IHVwZGF0ZWQgaWYgYHNlbGVjdC5tdWx0aXBsZWAgaXNcbiAgICAvLyBkaXNhYmxlZCB3aXRoIGByZW1vdmVBdHRyaWJ1dGVgLlxuICAgIG11bHRpcGxlOiBNVVNUX1VTRV9QUk9QRVJUWSB8IEhBU19CT09MRUFOX1ZBTFVFLFxuICAgIG11dGVkOiBNVVNUX1VTRV9QUk9QRVJUWSB8IEhBU19CT09MRUFOX1ZBTFVFLFxuICAgIG5hbWU6IDAsXG4gICAgbm9uY2U6IDAsXG4gICAgbm9WYWxpZGF0ZTogSEFTX0JPT0xFQU5fVkFMVUUsXG4gICAgb3BlbjogSEFTX0JPT0xFQU5fVkFMVUUsXG4gICAgb3B0aW11bTogMCxcbiAgICBwYXR0ZXJuOiAwLFxuICAgIHBsYWNlaG9sZGVyOiAwLFxuICAgIHBsYXlzSW5saW5lOiBIQVNfQk9PTEVBTl9WQUxVRSxcbiAgICBwb3N0ZXI6IDAsXG4gICAgcHJlbG9hZDogMCxcbiAgICBwcm9maWxlOiAwLFxuICAgIHJhZGlvR3JvdXA6IDAsXG4gICAgcmVhZE9ubHk6IEhBU19CT09MRUFOX1ZBTFVFLFxuICAgIHJlZmVycmVyUG9saWN5OiAwLFxuICAgIHJlbDogMCxcbiAgICByZXF1aXJlZDogSEFTX0JPT0xFQU5fVkFMVUUsXG4gICAgcmV2ZXJzZWQ6IEhBU19CT09MRUFOX1ZBTFVFLFxuICAgIHJvbGU6IDAsXG4gICAgcm93czogSEFTX1BPU0lUSVZFX05VTUVSSUNfVkFMVUUsXG4gICAgcm93U3BhbjogSEFTX05VTUVSSUNfVkFMVUUsXG4gICAgc2FuZGJveDogMCxcbiAgICBzY29wZTogMCxcbiAgICBzY29wZWQ6IEhBU19CT09MRUFOX1ZBTFVFLFxuICAgIHNjcm9sbGluZzogMCxcbiAgICBzZWFtbGVzczogSEFTX0JPT0xFQU5fVkFMVUUsXG4gICAgc2VsZWN0ZWQ6IE1VU1RfVVNFX1BST1BFUlRZIHwgSEFTX0JPT0xFQU5fVkFMVUUsXG4gICAgc2hhcGU6IDAsXG4gICAgc2l6ZTogSEFTX1BPU0lUSVZFX05VTUVSSUNfVkFMVUUsXG4gICAgc2l6ZXM6IDAsXG4gICAgc3BhbjogSEFTX1BPU0lUSVZFX05VTUVSSUNfVkFMVUUsXG4gICAgc3BlbGxDaGVjazogMCxcbiAgICBzcmM6IDAsXG4gICAgc3JjRG9jOiAwLFxuICAgIHNyY0xhbmc6IDAsXG4gICAgc3JjU2V0OiAwLFxuICAgIHN0YXJ0OiBIQVNfTlVNRVJJQ19WQUxVRSxcbiAgICBzdGVwOiAwLFxuICAgIHN0eWxlOiAwLFxuICAgIHN1bW1hcnk6IDAsXG4gICAgdGFiSW5kZXg6IDAsXG4gICAgdGFyZ2V0OiAwLFxuICAgIHRpdGxlOiAwLFxuICAgIC8vIFNldHRpbmcgLnR5cGUgdGhyb3dzIG9uIG5vbi08aW5wdXQ+IHRhZ3NcbiAgICB0eXBlOiAwLFxuICAgIHVzZU1hcDogMCxcbiAgICB2YWx1ZTogMCxcbiAgICB3aWR0aDogMCxcbiAgICB3bW9kZTogMCxcbiAgICB3cmFwOiAwLFxuXG4gICAgLyoqXG4gICAgICogUkRGYSBQcm9wZXJ0aWVzXG4gICAgICovXG4gICAgYWJvdXQ6IDAsXG4gICAgZGF0YXR5cGU6IDAsXG4gICAgaW5saXN0OiAwLFxuICAgIHByZWZpeDogMCxcbiAgICAvLyBwcm9wZXJ0eSBpcyBhbHNvIHN1cHBvcnRlZCBmb3IgT3BlbkdyYXBoIGluIG1ldGEgdGFncy5cbiAgICBwcm9wZXJ0eTogMCxcbiAgICByZXNvdXJjZTogMCxcbiAgICAndHlwZW9mJzogMCxcbiAgICB2b2NhYjogMCxcblxuICAgIC8qKlxuICAgICAqIE5vbi1zdGFuZGFyZCBQcm9wZXJ0aWVzXG4gICAgICovXG4gICAgLy8gYXV0b0NhcGl0YWxpemUgYW5kIGF1dG9Db3JyZWN0IGFyZSBzdXBwb3J0ZWQgaW4gTW9iaWxlIFNhZmFyaSBmb3JcbiAgICAvLyBrZXlib2FyZCBoaW50cy5cbiAgICBhdXRvQ2FwaXRhbGl6ZTogMCxcbiAgICBhdXRvQ29ycmVjdDogMCxcbiAgICAvLyBhdXRvU2F2ZSBhbGxvd3MgV2ViS2l0L0JsaW5rIHRvIHBlcnNpc3QgdmFsdWVzIG9mIGlucHV0IGZpZWxkcyBvbiBwYWdlIHJlbG9hZHNcbiAgICBhdXRvU2F2ZTogMCxcbiAgICAvLyBjb2xvciBpcyBmb3IgU2FmYXJpIG1hc2staWNvbiBsaW5rXG4gICAgY29sb3I6IDAsXG4gICAgLy8gaXRlbVByb3AsIGl0ZW1TY29wZSwgaXRlbVR5cGUgYXJlIGZvclxuICAgIC8vIE1pY3JvZGF0YSBzdXBwb3J0LiBTZWUgaHR0cDovL3NjaGVtYS5vcmcvZG9jcy9ncy5odG1sXG4gICAgaXRlbVByb3A6IDAsXG4gICAgaXRlbVNjb3BlOiBIQVNfQk9PTEVBTl9WQUxVRSxcbiAgICBpdGVtVHlwZTogMCxcbiAgICAvLyBpdGVtSUQgYW5kIGl0ZW1SZWYgYXJlIGZvciBNaWNyb2RhdGEgc3VwcG9ydCBhcyB3ZWxsIGJ1dFxuICAgIC8vIG9ubHkgc3BlY2lmaWVkIGluIHRoZSBXSEFUV0cgc3BlYyBkb2N1bWVudC4gU2VlXG4gICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvbWljcm9kYXRhLmh0bWwjbWljcm9kYXRhLWRvbS1hcGlcbiAgICBpdGVtSUQ6IDAsXG4gICAgaXRlbVJlZjogMCxcbiAgICAvLyByZXN1bHRzIHNob3cgbG9va2luZyBnbGFzcyBpY29uIGFuZCByZWNlbnQgc2VhcmNoZXMgb24gaW5wdXRcbiAgICAvLyBzZWFyY2ggZmllbGRzIGluIFdlYktpdC9CbGlua1xuICAgIHJlc3VsdHM6IDAsXG4gICAgLy8gSUUtb25seSBhdHRyaWJ1dGUgdGhhdCBzcGVjaWZpZXMgc2VjdXJpdHkgcmVzdHJpY3Rpb25zIG9uIGFuIGlmcmFtZVxuICAgIC8vIGFzIGFuIGFsdGVybmF0aXZlIHRvIHRoZSBzYW5kYm94IGF0dHJpYnV0ZSBvbiBJRTwxMFxuICAgIHNlY3VyaXR5OiAwLFxuICAgIC8vIElFLW9ubHkgYXR0cmlidXRlIHRoYXQgY29udHJvbHMgZm9jdXMgYmVoYXZpb3JcbiAgICB1bnNlbGVjdGFibGU6IDBcbiAgfSxcbiAgRE9NQXR0cmlidXRlTmFtZXM6IHtcbiAgICBhY2NlcHRDaGFyc2V0OiAnYWNjZXB0LWNoYXJzZXQnLFxuICAgIGNsYXNzTmFtZTogJ2NsYXNzJyxcbiAgICBodG1sRm9yOiAnZm9yJyxcbiAgICBodHRwRXF1aXY6ICdodHRwLWVxdWl2J1xuICB9LFxuICBET01Qcm9wZXJ0eU5hbWVzOiB7fSxcbiAgRE9NTXV0YXRpb25NZXRob2RzOiB7XG4gICAgdmFsdWU6IGZ1bmN0aW9uIChub2RlLCB2YWx1ZSkge1xuICAgICAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIG5vZGUucmVtb3ZlQXR0cmlidXRlKCd2YWx1ZScpO1xuICAgICAgfVxuXG4gICAgICAvLyBOdW1iZXIgaW5wdXRzIGdldCBzcGVjaWFsIHRyZWF0bWVudCBkdWUgdG8gc29tZSBlZGdlIGNhc2VzIGluXG4gICAgICAvLyBDaHJvbWUuIExldCBldmVyeXRoaW5nIGVsc2UgYXNzaWduIHRoZSB2YWx1ZSBhdHRyaWJ1dGUgYXMgbm9ybWFsLlxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy83MjUzI2lzc3VlY29tbWVudC0yMzYwNzQzMjZcbiAgICAgIGlmIChub2RlLnR5cGUgIT09ICdudW1iZXInIHx8IG5vZGUuaGFzQXR0cmlidXRlKCd2YWx1ZScpID09PSBmYWxzZSkge1xuICAgICAgICBub2RlLnNldEF0dHJpYnV0ZSgndmFsdWUnLCAnJyArIHZhbHVlKTtcbiAgICAgIH0gZWxzZSBpZiAobm9kZS52YWxpZGl0eSAmJiAhbm9kZS52YWxpZGl0eS5iYWRJbnB1dCAmJiBub2RlLm93bmVyRG9jdW1lbnQuYWN0aXZlRWxlbWVudCAhPT0gbm9kZSkge1xuICAgICAgICAvLyBEb24ndCBhc3NpZ24gYW4gYXR0cmlidXRlIGlmIHZhbGlkYXRpb24gcmVwb3J0cyBiYWRcbiAgICAgICAgLy8gaW5wdXQuIENocm9tZSB3aWxsIGNsZWFyIHRoZSB2YWx1ZS4gQWRkaXRpb25hbGx5LCBkb24ndFxuICAgICAgICAvLyBvcGVyYXRlIG9uIGlucHV0cyB0aGF0IGhhdmUgZm9jdXMsIG90aGVyd2lzZSBDaHJvbWUgbWlnaHRcbiAgICAgICAgLy8gc3RyaXAgb2ZmIHRyYWlsaW5nIGRlY2ltYWwgcGxhY2VzIGFuZCBjYXVzZSB0aGUgdXNlcidzXG4gICAgICAgIC8vIGN1cnNvciBwb3NpdGlvbiB0byBqdW1wIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGlucHV0LlxuICAgICAgICAvL1xuICAgICAgICAvLyBJbiBSZWFjdERPTUlucHV0LCB3ZSBoYXZlIGFuIG9uQmx1ciBldmVudCB0aGF0IHdpbGwgdHJpZ2dlclxuICAgICAgICAvLyB0aGlzIGZ1bmN0aW9uIGFnYWluIHdoZW4gZm9jdXMgaXMgbG9zdC5cbiAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoJ3ZhbHVlJywgJycgKyB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEhUTUxET01Qcm9wZXJ0eUNvbmZpZztcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3JlYWN0LWRvbS9saWIvSFRNTERPTVByb3BlcnR5Q29uZmlnLmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxNC1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0UmVjb25jaWxlciA9IHJlcXVpcmUoJy4vUmVhY3RSZWNvbmNpbGVyJyk7XG5cbnZhciBpbnN0YW50aWF0ZVJlYWN0Q29tcG9uZW50ID0gcmVxdWlyZSgnLi9pbnN0YW50aWF0ZVJlYWN0Q29tcG9uZW50Jyk7XG52YXIgS2V5RXNjYXBlVXRpbHMgPSByZXF1aXJlKCcuL0tleUVzY2FwZVV0aWxzJyk7XG52YXIgc2hvdWxkVXBkYXRlUmVhY3RDb21wb25lbnQgPSByZXF1aXJlKCcuL3Nob3VsZFVwZGF0ZVJlYWN0Q29tcG9uZW50Jyk7XG52YXIgdHJhdmVyc2VBbGxDaGlsZHJlbiA9IHJlcXVpcmUoJy4vdHJhdmVyc2VBbGxDaGlsZHJlbicpO1xudmFyIHdhcm5pbmcgPSByZXF1aXJlKCdmYmpzL2xpYi93YXJuaW5nJyk7XG5cbnZhciBSZWFjdENvbXBvbmVudFRyZWVIb29rO1xuXG5pZiAodHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnICYmIHByb2Nlc3MuZW52ICYmIHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAndGVzdCcpIHtcbiAgLy8gVGVtcG9yYXJ5IGhhY2suXG4gIC8vIElubGluZSByZXF1aXJlcyBkb24ndCB3b3JrIHdlbGwgd2l0aCBKZXN0OlxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzcyNDBcbiAgLy8gUmVtb3ZlIHRoZSBpbmxpbmUgcmVxdWlyZXMgd2hlbiB3ZSBkb24ndCBuZWVkIHRoZW0gYW55bW9yZTpcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L3B1bGwvNzE3OFxuICBSZWFjdENvbXBvbmVudFRyZWVIb29rID0gcmVxdWlyZSgncmVhY3QvbGliL1JlYWN0Q29tcG9uZW50VHJlZUhvb2snKTtcbn1cblxuZnVuY3Rpb24gaW5zdGFudGlhdGVDaGlsZChjaGlsZEluc3RhbmNlcywgY2hpbGQsIG5hbWUsIHNlbGZEZWJ1Z0lEKSB7XG4gIC8vIFdlIGZvdW5kIGEgY29tcG9uZW50IGluc3RhbmNlLlxuICB2YXIga2V5VW5pcXVlID0gY2hpbGRJbnN0YW5jZXNbbmFtZV0gPT09IHVuZGVmaW5lZDtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBpZiAoIVJlYWN0Q29tcG9uZW50VHJlZUhvb2spIHtcbiAgICAgIFJlYWN0Q29tcG9uZW50VHJlZUhvb2sgPSByZXF1aXJlKCdyZWFjdC9saWIvUmVhY3RDb21wb25lbnRUcmVlSG9vaycpO1xuICAgIH1cbiAgICBpZiAoIWtleVVuaXF1ZSkge1xuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcoZmFsc2UsICdmbGF0dGVuQ2hpbGRyZW4oLi4uKTogRW5jb3VudGVyZWQgdHdvIGNoaWxkcmVuIHdpdGggdGhlIHNhbWUga2V5LCAnICsgJ2Alc2AuIENoaWxkIGtleXMgbXVzdCBiZSB1bmlxdWU7IHdoZW4gdHdvIGNoaWxkcmVuIHNoYXJlIGEga2V5LCBvbmx5ICcgKyAndGhlIGZpcnN0IGNoaWxkIHdpbGwgYmUgdXNlZC4lcycsIEtleUVzY2FwZVV0aWxzLnVuZXNjYXBlKG5hbWUpLCBSZWFjdENvbXBvbmVudFRyZWVIb29rLmdldFN0YWNrQWRkZW5kdW1CeUlEKHNlbGZEZWJ1Z0lEKSkgOiB2b2lkIDA7XG4gICAgfVxuICB9XG4gIGlmIChjaGlsZCAhPSBudWxsICYmIGtleVVuaXF1ZSkge1xuICAgIGNoaWxkSW5zdGFuY2VzW25hbWVdID0gaW5zdGFudGlhdGVSZWFjdENvbXBvbmVudChjaGlsZCwgdHJ1ZSk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZWFjdENoaWxkUmVjb25jaWxlciBwcm92aWRlcyBoZWxwZXJzIGZvciBpbml0aWFsaXppbmcgb3IgdXBkYXRpbmcgYSBzZXQgb2ZcbiAqIGNoaWxkcmVuLiBJdHMgb3V0cHV0IGlzIHN1aXRhYmxlIGZvciBwYXNzaW5nIGl0IG9udG8gUmVhY3RNdWx0aUNoaWxkIHdoaWNoXG4gKiBkb2VzIGRpZmZlZCByZW9yZGVyaW5nIGFuZCBpbnNlcnRpb24uXG4gKi9cbnZhciBSZWFjdENoaWxkUmVjb25jaWxlciA9IHtcbiAgLyoqXG4gICAqIEdlbmVyYXRlcyBhIFwibW91bnQgaW1hZ2VcIiBmb3IgZWFjaCBvZiB0aGUgc3VwcGxpZWQgY2hpbGRyZW4uIEluIHRoZSBjYXNlXG4gICAqIG9mIGBSZWFjdERPTUNvbXBvbmVudGAsIGEgbW91bnQgaW1hZ2UgaXMgYSBzdHJpbmcgb2YgbWFya3VwLlxuICAgKlxuICAgKiBAcGFyYW0gez9vYmplY3R9IG5lc3RlZENoaWxkTm9kZXMgTmVzdGVkIGNoaWxkIG1hcHMuXG4gICAqIEByZXR1cm4gez9vYmplY3R9IEEgc2V0IG9mIGNoaWxkIGluc3RhbmNlcy5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBpbnN0YW50aWF0ZUNoaWxkcmVuOiBmdW5jdGlvbiAobmVzdGVkQ2hpbGROb2RlcywgdHJhbnNhY3Rpb24sIGNvbnRleHQsIHNlbGZEZWJ1Z0lEKSAvLyAwIGluIHByb2R1Y3Rpb24gYW5kIGZvciByb290c1xuICB7XG4gICAgaWYgKG5lc3RlZENoaWxkTm9kZXMgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHZhciBjaGlsZEluc3RhbmNlcyA9IHt9O1xuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIHRyYXZlcnNlQWxsQ2hpbGRyZW4obmVzdGVkQ2hpbGROb2RlcywgZnVuY3Rpb24gKGNoaWxkSW5zdHMsIGNoaWxkLCBuYW1lKSB7XG4gICAgICAgIHJldHVybiBpbnN0YW50aWF0ZUNoaWxkKGNoaWxkSW5zdHMsIGNoaWxkLCBuYW1lLCBzZWxmRGVidWdJRCk7XG4gICAgICB9LCBjaGlsZEluc3RhbmNlcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRyYXZlcnNlQWxsQ2hpbGRyZW4obmVzdGVkQ2hpbGROb2RlcywgaW5zdGFudGlhdGVDaGlsZCwgY2hpbGRJbnN0YW5jZXMpO1xuICAgIH1cbiAgICByZXR1cm4gY2hpbGRJbnN0YW5jZXM7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIHJlbmRlcmVkIGNoaWxkcmVuIGFuZCByZXR1cm5zIGEgbmV3IHNldCBvZiBjaGlsZHJlbi5cbiAgICpcbiAgICogQHBhcmFtIHs/b2JqZWN0fSBwcmV2Q2hpbGRyZW4gUHJldmlvdXNseSBpbml0aWFsaXplZCBzZXQgb2YgY2hpbGRyZW4uXG4gICAqIEBwYXJhbSB7P29iamVjdH0gbmV4dENoaWxkcmVuIEZsYXQgY2hpbGQgZWxlbWVudCBtYXBzLlxuICAgKiBAcGFyYW0ge1JlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb259IHRyYW5zYWN0aW9uXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBjb250ZXh0XG4gICAqIEByZXR1cm4gez9vYmplY3R9IEEgbmV3IHNldCBvZiBjaGlsZCBpbnN0YW5jZXMuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgdXBkYXRlQ2hpbGRyZW46IGZ1bmN0aW9uIChwcmV2Q2hpbGRyZW4sIG5leHRDaGlsZHJlbiwgbW91bnRJbWFnZXMsIHJlbW92ZWROb2RlcywgdHJhbnNhY3Rpb24sIGhvc3RQYXJlbnQsIGhvc3RDb250YWluZXJJbmZvLCBjb250ZXh0LCBzZWxmRGVidWdJRCkgLy8gMCBpbiBwcm9kdWN0aW9uIGFuZCBmb3Igcm9vdHNcbiAge1xuICAgIC8vIFdlIGN1cnJlbnRseSBkb24ndCBoYXZlIGEgd2F5IHRvIHRyYWNrIG1vdmVzIGhlcmUgYnV0IGlmIHdlIHVzZSBpdGVyYXRvcnNcbiAgICAvLyBpbnN0ZWFkIG9mIGZvci4uaW4gd2UgY2FuIHppcCB0aGUgaXRlcmF0b3JzIGFuZCBjaGVjayBpZiBhbiBpdGVtIGhhc1xuICAgIC8vIG1vdmVkLlxuICAgIC8vIFRPRE86IElmIG5vdGhpbmcgaGFzIGNoYW5nZWQsIHJldHVybiB0aGUgcHJldkNoaWxkcmVuIG9iamVjdCBzbyB0aGF0IHdlXG4gICAgLy8gY2FuIHF1aWNrbHkgYmFpbG91dCBpZiBub3RoaW5nIGhhcyBjaGFuZ2VkLlxuICAgIGlmICghbmV4dENoaWxkcmVuICYmICFwcmV2Q2hpbGRyZW4pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIG5hbWU7XG4gICAgdmFyIHByZXZDaGlsZDtcbiAgICBmb3IgKG5hbWUgaW4gbmV4dENoaWxkcmVuKSB7XG4gICAgICBpZiAoIW5leHRDaGlsZHJlbi5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHByZXZDaGlsZCA9IHByZXZDaGlsZHJlbiAmJiBwcmV2Q2hpbGRyZW5bbmFtZV07XG4gICAgICB2YXIgcHJldkVsZW1lbnQgPSBwcmV2Q2hpbGQgJiYgcHJldkNoaWxkLl9jdXJyZW50RWxlbWVudDtcbiAgICAgIHZhciBuZXh0RWxlbWVudCA9IG5leHRDaGlsZHJlbltuYW1lXTtcbiAgICAgIGlmIChwcmV2Q2hpbGQgIT0gbnVsbCAmJiBzaG91bGRVcGRhdGVSZWFjdENvbXBvbmVudChwcmV2RWxlbWVudCwgbmV4dEVsZW1lbnQpKSB7XG4gICAgICAgIFJlYWN0UmVjb25jaWxlci5yZWNlaXZlQ29tcG9uZW50KHByZXZDaGlsZCwgbmV4dEVsZW1lbnQsIHRyYW5zYWN0aW9uLCBjb250ZXh0KTtcbiAgICAgICAgbmV4dENoaWxkcmVuW25hbWVdID0gcHJldkNoaWxkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHByZXZDaGlsZCkge1xuICAgICAgICAgIHJlbW92ZWROb2Rlc1tuYW1lXSA9IFJlYWN0UmVjb25jaWxlci5nZXRIb3N0Tm9kZShwcmV2Q2hpbGQpO1xuICAgICAgICAgIFJlYWN0UmVjb25jaWxlci51bm1vdW50Q29tcG9uZW50KHByZXZDaGlsZCwgZmFsc2UpO1xuICAgICAgICB9XG4gICAgICAgIC8vIFRoZSBjaGlsZCBtdXN0IGJlIGluc3RhbnRpYXRlZCBiZWZvcmUgaXQncyBtb3VudGVkLlxuICAgICAgICB2YXIgbmV4dENoaWxkSW5zdGFuY2UgPSBpbnN0YW50aWF0ZVJlYWN0Q29tcG9uZW50KG5leHRFbGVtZW50LCB0cnVlKTtcbiAgICAgICAgbmV4dENoaWxkcmVuW25hbWVdID0gbmV4dENoaWxkSW5zdGFuY2U7XG4gICAgICAgIC8vIENyZWF0aW5nIG1vdW50IGltYWdlIG5vdyBlbnN1cmVzIHJlZnMgYXJlIHJlc29sdmVkIGluIHJpZ2h0IG9yZGVyXG4gICAgICAgIC8vIChzZWUgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L3B1bGwvNzEwMSBmb3IgZXhwbGFuYXRpb24pLlxuICAgICAgICB2YXIgbmV4dENoaWxkTW91bnRJbWFnZSA9IFJlYWN0UmVjb25jaWxlci5tb3VudENvbXBvbmVudChuZXh0Q2hpbGRJbnN0YW5jZSwgdHJhbnNhY3Rpb24sIGhvc3RQYXJlbnQsIGhvc3RDb250YWluZXJJbmZvLCBjb250ZXh0LCBzZWxmRGVidWdJRCk7XG4gICAgICAgIG1vdW50SW1hZ2VzLnB1c2gobmV4dENoaWxkTW91bnRJbWFnZSk7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIFVubW91bnQgY2hpbGRyZW4gdGhhdCBhcmUgbm8gbG9uZ2VyIHByZXNlbnQuXG4gICAgZm9yIChuYW1lIGluIHByZXZDaGlsZHJlbikge1xuICAgICAgaWYgKHByZXZDaGlsZHJlbi5oYXNPd25Qcm9wZXJ0eShuYW1lKSAmJiAhKG5leHRDaGlsZHJlbiAmJiBuZXh0Q2hpbGRyZW4uaGFzT3duUHJvcGVydHkobmFtZSkpKSB7XG4gICAgICAgIHByZXZDaGlsZCA9IHByZXZDaGlsZHJlbltuYW1lXTtcbiAgICAgICAgcmVtb3ZlZE5vZGVzW25hbWVdID0gUmVhY3RSZWNvbmNpbGVyLmdldEhvc3ROb2RlKHByZXZDaGlsZCk7XG4gICAgICAgIFJlYWN0UmVjb25jaWxlci51bm1vdW50Q29tcG9uZW50KHByZXZDaGlsZCwgZmFsc2UpO1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICAvKipcbiAgICogVW5tb3VudHMgYWxsIHJlbmRlcmVkIGNoaWxkcmVuLiBUaGlzIHNob3VsZCBiZSB1c2VkIHRvIGNsZWFuIHVwIGNoaWxkcmVuXG4gICAqIHdoZW4gdGhpcyBjb21wb25lbnQgaXMgdW5tb3VudGVkLlxuICAgKlxuICAgKiBAcGFyYW0gez9vYmplY3R9IHJlbmRlcmVkQ2hpbGRyZW4gUHJldmlvdXNseSBpbml0aWFsaXplZCBzZXQgb2YgY2hpbGRyZW4uXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgdW5tb3VudENoaWxkcmVuOiBmdW5jdGlvbiAocmVuZGVyZWRDaGlsZHJlbiwgc2FmZWx5KSB7XG4gICAgZm9yICh2YXIgbmFtZSBpbiByZW5kZXJlZENoaWxkcmVuKSB7XG4gICAgICBpZiAocmVuZGVyZWRDaGlsZHJlbi5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuICAgICAgICB2YXIgcmVuZGVyZWRDaGlsZCA9IHJlbmRlcmVkQ2hpbGRyZW5bbmFtZV07XG4gICAgICAgIFJlYWN0UmVjb25jaWxlci51bm1vdW50Q29tcG9uZW50KHJlbmRlcmVkQ2hpbGQsIHNhZmVseSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0Q2hpbGRSZWNvbmNpbGVyO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QtZG9tL2xpYi9SZWFjdENoaWxkUmVjb25jaWxlci5qcyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBET01DaGlsZHJlbk9wZXJhdGlvbnMgPSByZXF1aXJlKCcuL0RPTUNoaWxkcmVuT3BlcmF0aW9ucycpO1xudmFyIFJlYWN0RE9NSURPcGVyYXRpb25zID0gcmVxdWlyZSgnLi9SZWFjdERPTUlET3BlcmF0aW9ucycpO1xuXG4vKipcbiAqIEFic3RyYWN0cyBhd2F5IGFsbCBmdW5jdGlvbmFsaXR5IG9mIHRoZSByZWNvbmNpbGVyIHRoYXQgcmVxdWlyZXMga25vd2xlZGdlIG9mXG4gKiB0aGUgYnJvd3NlciBjb250ZXh0LiBUT0RPOiBUaGVzZSBjYWxsZXJzIHNob3VsZCBiZSByZWZhY3RvcmVkIHRvIGF2b2lkIHRoZVxuICogbmVlZCBmb3IgdGhpcyBpbmplY3Rpb24uXG4gKi9cbnZhciBSZWFjdENvbXBvbmVudEJyb3dzZXJFbnZpcm9ubWVudCA9IHtcbiAgcHJvY2Vzc0NoaWxkcmVuVXBkYXRlczogUmVhY3RET01JRE9wZXJhdGlvbnMuZGFuZ2Vyb3VzbHlQcm9jZXNzQ2hpbGRyZW5VcGRhdGVzLFxuXG4gIHJlcGxhY2VOb2RlV2l0aE1hcmt1cDogRE9NQ2hpbGRyZW5PcGVyYXRpb25zLmRhbmdlcm91c2x5UmVwbGFjZU5vZGVXaXRoTWFya3VwXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0Q29tcG9uZW50QnJvd3NlckVudmlyb25tZW50O1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QtZG9tL2xpYi9SZWFjdENvbXBvbmVudEJyb3dzZXJFbnZpcm9ubWVudC5qcyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBfcHJvZEludmFyaWFudCA9IHJlcXVpcmUoJy4vcmVhY3RQcm9kSW52YXJpYW50JyksXG4gICAgX2Fzc2lnbiA9IHJlcXVpcmUoJ29iamVjdC1hc3NpZ24nKTtcblxudmFyIFJlYWN0ID0gcmVxdWlyZSgncmVhY3QvbGliL1JlYWN0Jyk7XG52YXIgUmVhY3RDb21wb25lbnRFbnZpcm9ubWVudCA9IHJlcXVpcmUoJy4vUmVhY3RDb21wb25lbnRFbnZpcm9ubWVudCcpO1xudmFyIFJlYWN0Q3VycmVudE93bmVyID0gcmVxdWlyZSgncmVhY3QvbGliL1JlYWN0Q3VycmVudE93bmVyJyk7XG52YXIgUmVhY3RFcnJvclV0aWxzID0gcmVxdWlyZSgnLi9SZWFjdEVycm9yVXRpbHMnKTtcbnZhciBSZWFjdEluc3RhbmNlTWFwID0gcmVxdWlyZSgnLi9SZWFjdEluc3RhbmNlTWFwJyk7XG52YXIgUmVhY3RJbnN0cnVtZW50YXRpb24gPSByZXF1aXJlKCcuL1JlYWN0SW5zdHJ1bWVudGF0aW9uJyk7XG52YXIgUmVhY3ROb2RlVHlwZXMgPSByZXF1aXJlKCcuL1JlYWN0Tm9kZVR5cGVzJyk7XG52YXIgUmVhY3RSZWNvbmNpbGVyID0gcmVxdWlyZSgnLi9SZWFjdFJlY29uY2lsZXInKTtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgdmFyIGNoZWNrUmVhY3RUeXBlU3BlYyA9IHJlcXVpcmUoJy4vY2hlY2tSZWFjdFR5cGVTcGVjJyk7XG59XG5cbnZhciBlbXB0eU9iamVjdCA9IHJlcXVpcmUoJ2ZianMvbGliL2VtcHR5T2JqZWN0Jyk7XG52YXIgaW52YXJpYW50ID0gcmVxdWlyZSgnZmJqcy9saWIvaW52YXJpYW50Jyk7XG52YXIgc2hhbGxvd0VxdWFsID0gcmVxdWlyZSgnZmJqcy9saWIvc2hhbGxvd0VxdWFsJyk7XG52YXIgc2hvdWxkVXBkYXRlUmVhY3RDb21wb25lbnQgPSByZXF1aXJlKCcuL3Nob3VsZFVwZGF0ZVJlYWN0Q29tcG9uZW50Jyk7XG52YXIgd2FybmluZyA9IHJlcXVpcmUoJ2ZianMvbGliL3dhcm5pbmcnKTtcblxudmFyIENvbXBvc2l0ZVR5cGVzID0ge1xuICBJbXB1cmVDbGFzczogMCxcbiAgUHVyZUNsYXNzOiAxLFxuICBTdGF0ZWxlc3NGdW5jdGlvbmFsOiAyXG59O1xuXG5mdW5jdGlvbiBTdGF0ZWxlc3NDb21wb25lbnQoQ29tcG9uZW50KSB7fVxuU3RhdGVsZXNzQ29tcG9uZW50LnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBDb21wb25lbnQgPSBSZWFjdEluc3RhbmNlTWFwLmdldCh0aGlzKS5fY3VycmVudEVsZW1lbnQudHlwZTtcbiAgdmFyIGVsZW1lbnQgPSBDb21wb25lbnQodGhpcy5wcm9wcywgdGhpcy5jb250ZXh0LCB0aGlzLnVwZGF0ZXIpO1xuICB3YXJuSWZJbnZhbGlkRWxlbWVudChDb21wb25lbnQsIGVsZW1lbnQpO1xuICByZXR1cm4gZWxlbWVudDtcbn07XG5cbmZ1bmN0aW9uIHdhcm5JZkludmFsaWRFbGVtZW50KENvbXBvbmVudCwgZWxlbWVudCkge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKGVsZW1lbnQgPT09IG51bGwgfHwgZWxlbWVudCA9PT0gZmFsc2UgfHwgUmVhY3QuaXNWYWxpZEVsZW1lbnQoZWxlbWVudCksICclcyguLi4pOiBBIHZhbGlkIFJlYWN0IGVsZW1lbnQgKG9yIG51bGwpIG11c3QgYmUgcmV0dXJuZWQuIFlvdSBtYXkgaGF2ZSAnICsgJ3JldHVybmVkIHVuZGVmaW5lZCwgYW4gYXJyYXkgb3Igc29tZSBvdGhlciBpbnZhbGlkIG9iamVjdC4nLCBDb21wb25lbnQuZGlzcGxheU5hbWUgfHwgQ29tcG9uZW50Lm5hbWUgfHwgJ0NvbXBvbmVudCcpIDogdm9pZCAwO1xuICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKCFDb21wb25lbnQuY2hpbGRDb250ZXh0VHlwZXMsICclcyguLi4pOiBjaGlsZENvbnRleHRUeXBlcyBjYW5ub3QgYmUgZGVmaW5lZCBvbiBhIGZ1bmN0aW9uYWwgY29tcG9uZW50LicsIENvbXBvbmVudC5kaXNwbGF5TmFtZSB8fCBDb21wb25lbnQubmFtZSB8fCAnQ29tcG9uZW50JykgOiB2b2lkIDA7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2hvdWxkQ29uc3RydWN0KENvbXBvbmVudCkge1xuICByZXR1cm4gISEoQ29tcG9uZW50LnByb3RvdHlwZSAmJiBDb21wb25lbnQucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQpO1xufVxuXG5mdW5jdGlvbiBpc1B1cmVDb21wb25lbnQoQ29tcG9uZW50KSB7XG4gIHJldHVybiAhIShDb21wb25lbnQucHJvdG90eXBlICYmIENvbXBvbmVudC5wcm90b3R5cGUuaXNQdXJlUmVhY3RDb21wb25lbnQpO1xufVxuXG4vLyBTZXBhcmF0ZWQgaW50byBhIGZ1bmN0aW9uIHRvIGNvbnRhaW4gZGVvcHRpbWl6YXRpb25zIGNhdXNlZCBieSB0cnkvZmluYWxseS5cbmZ1bmN0aW9uIG1lYXN1cmVMaWZlQ3ljbGVQZXJmKGZuLCBkZWJ1Z0lELCB0aW1lclR5cGUpIHtcbiAgaWYgKGRlYnVnSUQgPT09IDApIHtcbiAgICAvLyBUb3AtbGV2ZWwgd3JhcHBlcnMgKHNlZSBSZWFjdE1vdW50KSBhbmQgZW1wdHkgY29tcG9uZW50cyAoc2VlXG4gICAgLy8gUmVhY3RET01FbXB0eUNvbXBvbmVudCkgYXJlIGludmlzaWJsZSB0byBob29rcyBhbmQgZGV2dG9vbHMuXG4gICAgLy8gQm90aCBhcmUgaW1wbGVtZW50YXRpb24gZGV0YWlscyB0aGF0IHNob3VsZCBnbyBhd2F5IGluIHRoZSBmdXR1cmUuXG4gICAgcmV0dXJuIGZuKCk7XG4gIH1cblxuICBSZWFjdEluc3RydW1lbnRhdGlvbi5kZWJ1Z1Rvb2wub25CZWdpbkxpZmVDeWNsZVRpbWVyKGRlYnVnSUQsIHRpbWVyVHlwZSk7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGZuKCk7XG4gIH0gZmluYWxseSB7XG4gICAgUmVhY3RJbnN0cnVtZW50YXRpb24uZGVidWdUb29sLm9uRW5kTGlmZUN5Y2xlVGltZXIoZGVidWdJRCwgdGltZXJUeXBlKTtcbiAgfVxufVxuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLSBUaGUgTGlmZS1DeWNsZSBvZiBhIENvbXBvc2l0ZSBDb21wb25lbnQgLS0tLS0tLS0tLS0tLS0tLS0tXG4gKlxuICogLSBjb25zdHJ1Y3RvcjogSW5pdGlhbGl6YXRpb24gb2Ygc3RhdGUuIFRoZSBpbnN0YW5jZSBpcyBub3cgcmV0YWluZWQuXG4gKiAgIC0gY29tcG9uZW50V2lsbE1vdW50XG4gKiAgIC0gcmVuZGVyXG4gKiAgIC0gW2NoaWxkcmVuJ3MgY29uc3RydWN0b3JzXVxuICogICAgIC0gW2NoaWxkcmVuJ3MgY29tcG9uZW50V2lsbE1vdW50IGFuZCByZW5kZXJdXG4gKiAgICAgLSBbY2hpbGRyZW4ncyBjb21wb25lbnREaWRNb3VudF1cbiAqICAgICAtIGNvbXBvbmVudERpZE1vdW50XG4gKlxuICogICAgICAgVXBkYXRlIFBoYXNlczpcbiAqICAgICAgIC0gY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyAob25seSBjYWxsZWQgaWYgcGFyZW50IHVwZGF0ZWQpXG4gKiAgICAgICAtIHNob3VsZENvbXBvbmVudFVwZGF0ZVxuICogICAgICAgICAtIGNvbXBvbmVudFdpbGxVcGRhdGVcbiAqICAgICAgICAgICAtIHJlbmRlclxuICogICAgICAgICAgIC0gW2NoaWxkcmVuJ3MgY29uc3RydWN0b3JzIG9yIHJlY2VpdmUgcHJvcHMgcGhhc2VzXVxuICogICAgICAgICAtIGNvbXBvbmVudERpZFVwZGF0ZVxuICpcbiAqICAgICAtIGNvbXBvbmVudFdpbGxVbm1vdW50XG4gKiAgICAgLSBbY2hpbGRyZW4ncyBjb21wb25lbnRXaWxsVW5tb3VudF1cbiAqICAgLSBbY2hpbGRyZW4gZGVzdHJveWVkXVxuICogLSAoZGVzdHJveWVkKTogVGhlIGluc3RhbmNlIGlzIG5vdyBibGFuaywgcmVsZWFzZWQgYnkgUmVhY3QgYW5kIHJlYWR5IGZvciBHQy5cbiAqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbi8qKlxuICogQW4gaW5jcmVtZW50aW5nIElEIGFzc2lnbmVkIHRvIGVhY2ggY29tcG9uZW50IHdoZW4gaXQgaXMgbW91bnRlZC4gVGhpcyBpc1xuICogdXNlZCB0byBlbmZvcmNlIHRoZSBvcmRlciBpbiB3aGljaCBgUmVhY3RVcGRhdGVzYCB1cGRhdGVzIGRpcnR5IGNvbXBvbmVudHMuXG4gKlxuICogQHByaXZhdGVcbiAqL1xudmFyIG5leHRNb3VudElEID0gMTtcblxuLyoqXG4gKiBAbGVuZHMge1JlYWN0Q29tcG9zaXRlQ29tcG9uZW50LnByb3RvdHlwZX1cbiAqL1xudmFyIFJlYWN0Q29tcG9zaXRlQ29tcG9uZW50ID0ge1xuICAvKipcbiAgICogQmFzZSBjb25zdHJ1Y3RvciBmb3IgYWxsIGNvbXBvc2l0ZSBjb21wb25lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7UmVhY3RFbGVtZW50fSBlbGVtZW50XG4gICAqIEBmaW5hbFxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGNvbnN0cnVjdDogZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgICB0aGlzLl9jdXJyZW50RWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgdGhpcy5fcm9vdE5vZGVJRCA9IDA7XG4gICAgdGhpcy5fY29tcG9zaXRlVHlwZSA9IG51bGw7XG4gICAgdGhpcy5faW5zdGFuY2UgPSBudWxsO1xuICAgIHRoaXMuX2hvc3RQYXJlbnQgPSBudWxsO1xuICAgIHRoaXMuX2hvc3RDb250YWluZXJJbmZvID0gbnVsbDtcblxuICAgIC8vIFNlZSBSZWFjdFVwZGF0ZVF1ZXVlXG4gICAgdGhpcy5fdXBkYXRlQmF0Y2hOdW1iZXIgPSBudWxsO1xuICAgIHRoaXMuX3BlbmRpbmdFbGVtZW50ID0gbnVsbDtcbiAgICB0aGlzLl9wZW5kaW5nU3RhdGVRdWV1ZSA9IG51bGw7XG4gICAgdGhpcy5fcGVuZGluZ1JlcGxhY2VTdGF0ZSA9IGZhbHNlO1xuICAgIHRoaXMuX3BlbmRpbmdGb3JjZVVwZGF0ZSA9IGZhbHNlO1xuXG4gICAgdGhpcy5fcmVuZGVyZWROb2RlVHlwZSA9IG51bGw7XG4gICAgdGhpcy5fcmVuZGVyZWRDb21wb25lbnQgPSBudWxsO1xuICAgIHRoaXMuX2NvbnRleHQgPSBudWxsO1xuICAgIHRoaXMuX21vdW50T3JkZXIgPSAwO1xuICAgIHRoaXMuX3RvcExldmVsV3JhcHBlciA9IG51bGw7XG5cbiAgICAvLyBTZWUgUmVhY3RVcGRhdGVzIGFuZCBSZWFjdFVwZGF0ZVF1ZXVlLlxuICAgIHRoaXMuX3BlbmRpbmdDYWxsYmFja3MgPSBudWxsO1xuXG4gICAgLy8gQ29tcG9uZW50V2lsbFVubW91bnQgc2hhbGwgb25seSBiZSBjYWxsZWQgb25jZVxuICAgIHRoaXMuX2NhbGxlZENvbXBvbmVudFdpbGxVbm1vdW50ID0gZmFsc2U7XG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgdGhpcy5fd2FybmVkQWJvdXRSZWZzSW5SZW5kZXIgPSBmYWxzZTtcbiAgICB9XG4gIH0sXG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemVzIHRoZSBjb21wb25lbnQsIHJlbmRlcnMgbWFya3VwLCBhbmQgcmVnaXN0ZXJzIGV2ZW50IGxpc3RlbmVycy5cbiAgICpcbiAgICogQHBhcmFtIHtSZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9ufFJlYWN0U2VydmVyUmVuZGVyaW5nVHJhbnNhY3Rpb259IHRyYW5zYWN0aW9uXG4gICAqIEBwYXJhbSB7P29iamVjdH0gaG9zdFBhcmVudFxuICAgKiBAcGFyYW0gez9vYmplY3R9IGhvc3RDb250YWluZXJJbmZvXG4gICAqIEBwYXJhbSB7P29iamVjdH0gY29udGV4dFxuICAgKiBAcmV0dXJuIHs/c3RyaW5nfSBSZW5kZXJlZCBtYXJrdXAgdG8gYmUgaW5zZXJ0ZWQgaW50byB0aGUgRE9NLlxuICAgKiBAZmluYWxcbiAgICogQGludGVybmFsXG4gICAqL1xuICBtb3VudENvbXBvbmVudDogZnVuY3Rpb24gKHRyYW5zYWN0aW9uLCBob3N0UGFyZW50LCBob3N0Q29udGFpbmVySW5mbywgY29udGV4dCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICB0aGlzLl9jb250ZXh0ID0gY29udGV4dDtcbiAgICB0aGlzLl9tb3VudE9yZGVyID0gbmV4dE1vdW50SUQrKztcbiAgICB0aGlzLl9ob3N0UGFyZW50ID0gaG9zdFBhcmVudDtcbiAgICB0aGlzLl9ob3N0Q29udGFpbmVySW5mbyA9IGhvc3RDb250YWluZXJJbmZvO1xuXG4gICAgdmFyIHB1YmxpY1Byb3BzID0gdGhpcy5fY3VycmVudEVsZW1lbnQucHJvcHM7XG4gICAgdmFyIHB1YmxpY0NvbnRleHQgPSB0aGlzLl9wcm9jZXNzQ29udGV4dChjb250ZXh0KTtcblxuICAgIHZhciBDb21wb25lbnQgPSB0aGlzLl9jdXJyZW50RWxlbWVudC50eXBlO1xuXG4gICAgdmFyIHVwZGF0ZVF1ZXVlID0gdHJhbnNhY3Rpb24uZ2V0VXBkYXRlUXVldWUoKTtcblxuICAgIC8vIEluaXRpYWxpemUgdGhlIHB1YmxpYyBjbGFzc1xuICAgIHZhciBkb0NvbnN0cnVjdCA9IHNob3VsZENvbnN0cnVjdChDb21wb25lbnQpO1xuICAgIHZhciBpbnN0ID0gdGhpcy5fY29uc3RydWN0Q29tcG9uZW50KGRvQ29uc3RydWN0LCBwdWJsaWNQcm9wcywgcHVibGljQ29udGV4dCwgdXBkYXRlUXVldWUpO1xuICAgIHZhciByZW5kZXJlZEVsZW1lbnQ7XG5cbiAgICAvLyBTdXBwb3J0IGZ1bmN0aW9uYWwgY29tcG9uZW50c1xuICAgIGlmICghZG9Db25zdHJ1Y3QgJiYgKGluc3QgPT0gbnVsbCB8fCBpbnN0LnJlbmRlciA9PSBudWxsKSkge1xuICAgICAgcmVuZGVyZWRFbGVtZW50ID0gaW5zdDtcbiAgICAgIHdhcm5JZkludmFsaWRFbGVtZW50KENvbXBvbmVudCwgcmVuZGVyZWRFbGVtZW50KTtcbiAgICAgICEoaW5zdCA9PT0gbnVsbCB8fCBpbnN0ID09PSBmYWxzZSB8fCBSZWFjdC5pc1ZhbGlkRWxlbWVudChpbnN0KSkgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAnJXMoLi4uKTogQSB2YWxpZCBSZWFjdCBlbGVtZW50IChvciBudWxsKSBtdXN0IGJlIHJldHVybmVkLiBZb3UgbWF5IGhhdmUgcmV0dXJuZWQgdW5kZWZpbmVkLCBhbiBhcnJheSBvciBzb21lIG90aGVyIGludmFsaWQgb2JqZWN0LicsIENvbXBvbmVudC5kaXNwbGF5TmFtZSB8fCBDb21wb25lbnQubmFtZSB8fCAnQ29tcG9uZW50JykgOiBfcHJvZEludmFyaWFudCgnMTA1JywgQ29tcG9uZW50LmRpc3BsYXlOYW1lIHx8IENvbXBvbmVudC5uYW1lIHx8ICdDb21wb25lbnQnKSA6IHZvaWQgMDtcbiAgICAgIGluc3QgPSBuZXcgU3RhdGVsZXNzQ29tcG9uZW50KENvbXBvbmVudCk7XG4gICAgICB0aGlzLl9jb21wb3NpdGVUeXBlID0gQ29tcG9zaXRlVHlwZXMuU3RhdGVsZXNzRnVuY3Rpb25hbDtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGlzUHVyZUNvbXBvbmVudChDb21wb25lbnQpKSB7XG4gICAgICAgIHRoaXMuX2NvbXBvc2l0ZVR5cGUgPSBDb21wb3NpdGVUeXBlcy5QdXJlQ2xhc3M7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9jb21wb3NpdGVUeXBlID0gQ29tcG9zaXRlVHlwZXMuSW1wdXJlQ2xhc3M7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIC8vIFRoaXMgd2lsbCB0aHJvdyBsYXRlciBpbiBfcmVuZGVyVmFsaWRhdGVkQ29tcG9uZW50LCBidXQgYWRkIGFuIGVhcmx5XG4gICAgICAvLyB3YXJuaW5nIG5vdyB0byBoZWxwIGRlYnVnZ2luZ1xuICAgICAgaWYgKGluc3QucmVuZGVyID09IG51bGwpIHtcbiAgICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcoZmFsc2UsICclcyguLi4pOiBObyBgcmVuZGVyYCBtZXRob2QgZm91bmQgb24gdGhlIHJldHVybmVkIGNvbXBvbmVudCAnICsgJ2luc3RhbmNlOiB5b3UgbWF5IGhhdmUgZm9yZ290dGVuIHRvIGRlZmluZSBgcmVuZGVyYC4nLCBDb21wb25lbnQuZGlzcGxheU5hbWUgfHwgQ29tcG9uZW50Lm5hbWUgfHwgJ0NvbXBvbmVudCcpIDogdm9pZCAwO1xuICAgICAgfVxuXG4gICAgICB2YXIgcHJvcHNNdXRhdGVkID0gaW5zdC5wcm9wcyAhPT0gcHVibGljUHJvcHM7XG4gICAgICB2YXIgY29tcG9uZW50TmFtZSA9IENvbXBvbmVudC5kaXNwbGF5TmFtZSB8fCBDb21wb25lbnQubmFtZSB8fCAnQ29tcG9uZW50JztcblxuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcoaW5zdC5wcm9wcyA9PT0gdW5kZWZpbmVkIHx8ICFwcm9wc011dGF0ZWQsICclcyguLi4pOiBXaGVuIGNhbGxpbmcgc3VwZXIoKSBpbiBgJXNgLCBtYWtlIHN1cmUgdG8gcGFzcyAnICsgXCJ1cCB0aGUgc2FtZSBwcm9wcyB0aGF0IHlvdXIgY29tcG9uZW50J3MgY29uc3RydWN0b3Igd2FzIHBhc3NlZC5cIiwgY29tcG9uZW50TmFtZSwgY29tcG9uZW50TmFtZSkgOiB2b2lkIDA7XG4gICAgfVxuXG4gICAgLy8gVGhlc2Ugc2hvdWxkIGJlIHNldCB1cCBpbiB0aGUgY29uc3RydWN0b3IsIGJ1dCBhcyBhIGNvbnZlbmllbmNlIGZvclxuICAgIC8vIHNpbXBsZXIgY2xhc3MgYWJzdHJhY3Rpb25zLCB3ZSBzZXQgdGhlbSB1cCBhZnRlciB0aGUgZmFjdC5cbiAgICBpbnN0LnByb3BzID0gcHVibGljUHJvcHM7XG4gICAgaW5zdC5jb250ZXh0ID0gcHVibGljQ29udGV4dDtcbiAgICBpbnN0LnJlZnMgPSBlbXB0eU9iamVjdDtcbiAgICBpbnN0LnVwZGF0ZXIgPSB1cGRhdGVRdWV1ZTtcblxuICAgIHRoaXMuX2luc3RhbmNlID0gaW5zdDtcblxuICAgIC8vIFN0b3JlIGEgcmVmZXJlbmNlIGZyb20gdGhlIGluc3RhbmNlIGJhY2sgdG8gdGhlIGludGVybmFsIHJlcHJlc2VudGF0aW9uXG4gICAgUmVhY3RJbnN0YW5jZU1hcC5zZXQoaW5zdCwgdGhpcyk7XG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgLy8gU2luY2UgcGxhaW4gSlMgY2xhc3NlcyBhcmUgZGVmaW5lZCB3aXRob3V0IGFueSBzcGVjaWFsIGluaXRpYWxpemF0aW9uXG4gICAgICAvLyBsb2dpYywgd2UgY2FuIG5vdCBjYXRjaCBjb21tb24gZXJyb3JzIGVhcmx5LiBUaGVyZWZvcmUsIHdlIGhhdmUgdG9cbiAgICAgIC8vIGNhdGNoIHRoZW0gaGVyZSwgYXQgaW5pdGlhbGl6YXRpb24gdGltZSwgaW5zdGVhZC5cbiAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKCFpbnN0LmdldEluaXRpYWxTdGF0ZSB8fCBpbnN0LmdldEluaXRpYWxTdGF0ZS5pc1JlYWN0Q2xhc3NBcHByb3ZlZCB8fCBpbnN0LnN0YXRlLCAnZ2V0SW5pdGlhbFN0YXRlIHdhcyBkZWZpbmVkIG9uICVzLCBhIHBsYWluIEphdmFTY3JpcHQgY2xhc3MuICcgKyAnVGhpcyBpcyBvbmx5IHN1cHBvcnRlZCBmb3IgY2xhc3NlcyBjcmVhdGVkIHVzaW5nIFJlYWN0LmNyZWF0ZUNsYXNzLiAnICsgJ0RpZCB5b3UgbWVhbiB0byBkZWZpbmUgYSBzdGF0ZSBwcm9wZXJ0eSBpbnN0ZWFkPycsIHRoaXMuZ2V0TmFtZSgpIHx8ICdhIGNvbXBvbmVudCcpIDogdm9pZCAwO1xuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcoIWluc3QuZ2V0RGVmYXVsdFByb3BzIHx8IGluc3QuZ2V0RGVmYXVsdFByb3BzLmlzUmVhY3RDbGFzc0FwcHJvdmVkLCAnZ2V0RGVmYXVsdFByb3BzIHdhcyBkZWZpbmVkIG9uICVzLCBhIHBsYWluIEphdmFTY3JpcHQgY2xhc3MuICcgKyAnVGhpcyBpcyBvbmx5IHN1cHBvcnRlZCBmb3IgY2xhc3NlcyBjcmVhdGVkIHVzaW5nIFJlYWN0LmNyZWF0ZUNsYXNzLiAnICsgJ1VzZSBhIHN0YXRpYyBwcm9wZXJ0eSB0byBkZWZpbmUgZGVmYXVsdFByb3BzIGluc3RlYWQuJywgdGhpcy5nZXROYW1lKCkgfHwgJ2EgY29tcG9uZW50JykgOiB2b2lkIDA7XG4gICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyghaW5zdC5wcm9wVHlwZXMsICdwcm9wVHlwZXMgd2FzIGRlZmluZWQgYXMgYW4gaW5zdGFuY2UgcHJvcGVydHkgb24gJXMuIFVzZSBhIHN0YXRpYyAnICsgJ3Byb3BlcnR5IHRvIGRlZmluZSBwcm9wVHlwZXMgaW5zdGVhZC4nLCB0aGlzLmdldE5hbWUoKSB8fCAnYSBjb21wb25lbnQnKSA6IHZvaWQgMDtcbiAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKCFpbnN0LmNvbnRleHRUeXBlcywgJ2NvbnRleHRUeXBlcyB3YXMgZGVmaW5lZCBhcyBhbiBpbnN0YW5jZSBwcm9wZXJ0eSBvbiAlcy4gVXNlIGEgJyArICdzdGF0aWMgcHJvcGVydHkgdG8gZGVmaW5lIGNvbnRleHRUeXBlcyBpbnN0ZWFkLicsIHRoaXMuZ2V0TmFtZSgpIHx8ICdhIGNvbXBvbmVudCcpIDogdm9pZCAwO1xuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcodHlwZW9mIGluc3QuY29tcG9uZW50U2hvdWxkVXBkYXRlICE9PSAnZnVuY3Rpb24nLCAnJXMgaGFzIGEgbWV0aG9kIGNhbGxlZCAnICsgJ2NvbXBvbmVudFNob3VsZFVwZGF0ZSgpLiBEaWQgeW91IG1lYW4gc2hvdWxkQ29tcG9uZW50VXBkYXRlKCk/ICcgKyAnVGhlIG5hbWUgaXMgcGhyYXNlZCBhcyBhIHF1ZXN0aW9uIGJlY2F1c2UgdGhlIGZ1bmN0aW9uIGlzICcgKyAnZXhwZWN0ZWQgdG8gcmV0dXJuIGEgdmFsdWUuJywgdGhpcy5nZXROYW1lKCkgfHwgJ0EgY29tcG9uZW50JykgOiB2b2lkIDA7XG4gICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyh0eXBlb2YgaW5zdC5jb21wb25lbnREaWRVbm1vdW50ICE9PSAnZnVuY3Rpb24nLCAnJXMgaGFzIGEgbWV0aG9kIGNhbGxlZCAnICsgJ2NvbXBvbmVudERpZFVubW91bnQoKS4gQnV0IHRoZXJlIGlzIG5vIHN1Y2ggbGlmZWN5Y2xlIG1ldGhvZC4gJyArICdEaWQgeW91IG1lYW4gY29tcG9uZW50V2lsbFVubW91bnQoKT8nLCB0aGlzLmdldE5hbWUoKSB8fCAnQSBjb21wb25lbnQnKSA6IHZvaWQgMDtcbiAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKHR5cGVvZiBpbnN0LmNvbXBvbmVudFdpbGxSZWNpZXZlUHJvcHMgIT09ICdmdW5jdGlvbicsICclcyBoYXMgYSBtZXRob2QgY2FsbGVkICcgKyAnY29tcG9uZW50V2lsbFJlY2lldmVQcm9wcygpLiBEaWQgeW91IG1lYW4gY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcygpPycsIHRoaXMuZ2V0TmFtZSgpIHx8ICdBIGNvbXBvbmVudCcpIDogdm9pZCAwO1xuICAgIH1cblxuICAgIHZhciBpbml0aWFsU3RhdGUgPSBpbnN0LnN0YXRlO1xuICAgIGlmIChpbml0aWFsU3RhdGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgaW5zdC5zdGF0ZSA9IGluaXRpYWxTdGF0ZSA9IG51bGw7XG4gICAgfVxuICAgICEodHlwZW9mIGluaXRpYWxTdGF0ZSA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkoaW5pdGlhbFN0YXRlKSkgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAnJXMuc3RhdGU6IG11c3QgYmUgc2V0IHRvIGFuIG9iamVjdCBvciBudWxsJywgdGhpcy5nZXROYW1lKCkgfHwgJ1JlYWN0Q29tcG9zaXRlQ29tcG9uZW50JykgOiBfcHJvZEludmFyaWFudCgnMTA2JywgdGhpcy5nZXROYW1lKCkgfHwgJ1JlYWN0Q29tcG9zaXRlQ29tcG9uZW50JykgOiB2b2lkIDA7XG5cbiAgICB0aGlzLl9wZW5kaW5nU3RhdGVRdWV1ZSA9IG51bGw7XG4gICAgdGhpcy5fcGVuZGluZ1JlcGxhY2VTdGF0ZSA9IGZhbHNlO1xuICAgIHRoaXMuX3BlbmRpbmdGb3JjZVVwZGF0ZSA9IGZhbHNlO1xuXG4gICAgdmFyIG1hcmt1cDtcbiAgICBpZiAoaW5zdC51bnN0YWJsZV9oYW5kbGVFcnJvcikge1xuICAgICAgbWFya3VwID0gdGhpcy5wZXJmb3JtSW5pdGlhbE1vdW50V2l0aEVycm9ySGFuZGxpbmcocmVuZGVyZWRFbGVtZW50LCBob3N0UGFyZW50LCBob3N0Q29udGFpbmVySW5mbywgdHJhbnNhY3Rpb24sIGNvbnRleHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBtYXJrdXAgPSB0aGlzLnBlcmZvcm1Jbml0aWFsTW91bnQocmVuZGVyZWRFbGVtZW50LCBob3N0UGFyZW50LCBob3N0Q29udGFpbmVySW5mbywgdHJhbnNhY3Rpb24sIGNvbnRleHQpO1xuICAgIH1cblxuICAgIGlmIChpbnN0LmNvbXBvbmVudERpZE1vdW50KSB7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICB0cmFuc2FjdGlvbi5nZXRSZWFjdE1vdW50UmVhZHkoKS5lbnF1ZXVlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBtZWFzdXJlTGlmZUN5Y2xlUGVyZihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5zdC5jb21wb25lbnREaWRNb3VudCgpO1xuICAgICAgICAgIH0sIF90aGlzLl9kZWJ1Z0lELCAnY29tcG9uZW50RGlkTW91bnQnKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0cmFuc2FjdGlvbi5nZXRSZWFjdE1vdW50UmVhZHkoKS5lbnF1ZXVlKGluc3QuY29tcG9uZW50RGlkTW91bnQsIGluc3QpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtYXJrdXA7XG4gIH0sXG5cbiAgX2NvbnN0cnVjdENvbXBvbmVudDogZnVuY3Rpb24gKGRvQ29uc3RydWN0LCBwdWJsaWNQcm9wcywgcHVibGljQ29udGV4dCwgdXBkYXRlUXVldWUpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgUmVhY3RDdXJyZW50T3duZXIuY3VycmVudCA9IHRoaXM7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29uc3RydWN0Q29tcG9uZW50V2l0aG91dE93bmVyKGRvQ29uc3RydWN0LCBwdWJsaWNQcm9wcywgcHVibGljQ29udGV4dCwgdXBkYXRlUXVldWUpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50T3duZXIuY3VycmVudCA9IG51bGw7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLl9jb25zdHJ1Y3RDb21wb25lbnRXaXRob3V0T3duZXIoZG9Db25zdHJ1Y3QsIHB1YmxpY1Byb3BzLCBwdWJsaWNDb250ZXh0LCB1cGRhdGVRdWV1ZSk7XG4gICAgfVxuICB9LFxuXG4gIF9jb25zdHJ1Y3RDb21wb25lbnRXaXRob3V0T3duZXI6IGZ1bmN0aW9uIChkb0NvbnN0cnVjdCwgcHVibGljUHJvcHMsIHB1YmxpY0NvbnRleHQsIHVwZGF0ZVF1ZXVlKSB7XG4gICAgdmFyIENvbXBvbmVudCA9IHRoaXMuX2N1cnJlbnRFbGVtZW50LnR5cGU7XG5cbiAgICBpZiAoZG9Db25zdHJ1Y3QpIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIHJldHVybiBtZWFzdXJlTGlmZUN5Y2xlUGVyZihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBDb21wb25lbnQocHVibGljUHJvcHMsIHB1YmxpY0NvbnRleHQsIHVwZGF0ZVF1ZXVlKTtcbiAgICAgICAgfSwgdGhpcy5fZGVidWdJRCwgJ2N0b3InKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBuZXcgQ29tcG9uZW50KHB1YmxpY1Byb3BzLCBwdWJsaWNDb250ZXh0LCB1cGRhdGVRdWV1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVGhpcyBjYW4gc3RpbGwgYmUgYW4gaW5zdGFuY2UgaW4gY2FzZSBvZiBmYWN0b3J5IGNvbXBvbmVudHNcbiAgICAvLyBidXQgd2UnbGwgY291bnQgdGhpcyBhcyB0aW1lIHNwZW50IHJlbmRlcmluZyBhcyB0aGUgbW9yZSBjb21tb24gY2FzZS5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgcmV0dXJuIG1lYXN1cmVMaWZlQ3ljbGVQZXJmKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIENvbXBvbmVudChwdWJsaWNQcm9wcywgcHVibGljQ29udGV4dCwgdXBkYXRlUXVldWUpO1xuICAgICAgfSwgdGhpcy5fZGVidWdJRCwgJ3JlbmRlcicpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gQ29tcG9uZW50KHB1YmxpY1Byb3BzLCBwdWJsaWNDb250ZXh0LCB1cGRhdGVRdWV1ZSk7XG4gICAgfVxuICB9LFxuXG4gIHBlcmZvcm1Jbml0aWFsTW91bnRXaXRoRXJyb3JIYW5kbGluZzogZnVuY3Rpb24gKHJlbmRlcmVkRWxlbWVudCwgaG9zdFBhcmVudCwgaG9zdENvbnRhaW5lckluZm8sIHRyYW5zYWN0aW9uLCBjb250ZXh0KSB7XG4gICAgdmFyIG1hcmt1cDtcbiAgICB2YXIgY2hlY2twb2ludCA9IHRyYW5zYWN0aW9uLmNoZWNrcG9pbnQoKTtcbiAgICB0cnkge1xuICAgICAgbWFya3VwID0gdGhpcy5wZXJmb3JtSW5pdGlhbE1vdW50KHJlbmRlcmVkRWxlbWVudCwgaG9zdFBhcmVudCwgaG9zdENvbnRhaW5lckluZm8sIHRyYW5zYWN0aW9uLCBjb250ZXh0KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBSb2xsIGJhY2sgdG8gY2hlY2twb2ludCwgaGFuZGxlIGVycm9yICh3aGljaCBtYXkgYWRkIGl0ZW1zIHRvIHRoZSB0cmFuc2FjdGlvbiksIGFuZCB0YWtlIGEgbmV3IGNoZWNrcG9pbnRcbiAgICAgIHRyYW5zYWN0aW9uLnJvbGxiYWNrKGNoZWNrcG9pbnQpO1xuICAgICAgdGhpcy5faW5zdGFuY2UudW5zdGFibGVfaGFuZGxlRXJyb3IoZSk7XG4gICAgICBpZiAodGhpcy5fcGVuZGluZ1N0YXRlUXVldWUpIHtcbiAgICAgICAgdGhpcy5faW5zdGFuY2Uuc3RhdGUgPSB0aGlzLl9wcm9jZXNzUGVuZGluZ1N0YXRlKHRoaXMuX2luc3RhbmNlLnByb3BzLCB0aGlzLl9pbnN0YW5jZS5jb250ZXh0KTtcbiAgICAgIH1cbiAgICAgIGNoZWNrcG9pbnQgPSB0cmFuc2FjdGlvbi5jaGVja3BvaW50KCk7XG5cbiAgICAgIHRoaXMuX3JlbmRlcmVkQ29tcG9uZW50LnVubW91bnRDb21wb25lbnQodHJ1ZSk7XG4gICAgICB0cmFuc2FjdGlvbi5yb2xsYmFjayhjaGVja3BvaW50KTtcblxuICAgICAgLy8gVHJ5IGFnYWluIC0gd2UndmUgaW5mb3JtZWQgdGhlIGNvbXBvbmVudCBhYm91dCB0aGUgZXJyb3IsIHNvIHRoZXkgY2FuIHJlbmRlciBhbiBlcnJvciBtZXNzYWdlIHRoaXMgdGltZS5cbiAgICAgIC8vIElmIHRoaXMgdGhyb3dzIGFnYWluLCB0aGUgZXJyb3Igd2lsbCBidWJibGUgdXAgKGFuZCBjYW4gYmUgY2F1Z2h0IGJ5IGEgaGlnaGVyIGVycm9yIGJvdW5kYXJ5KS5cbiAgICAgIG1hcmt1cCA9IHRoaXMucGVyZm9ybUluaXRpYWxNb3VudChyZW5kZXJlZEVsZW1lbnQsIGhvc3RQYXJlbnQsIGhvc3RDb250YWluZXJJbmZvLCB0cmFuc2FjdGlvbiwgY29udGV4dCk7XG4gICAgfVxuICAgIHJldHVybiBtYXJrdXA7XG4gIH0sXG5cbiAgcGVyZm9ybUluaXRpYWxNb3VudDogZnVuY3Rpb24gKHJlbmRlcmVkRWxlbWVudCwgaG9zdFBhcmVudCwgaG9zdENvbnRhaW5lckluZm8sIHRyYW5zYWN0aW9uLCBjb250ZXh0KSB7XG4gICAgdmFyIGluc3QgPSB0aGlzLl9pbnN0YW5jZTtcblxuICAgIHZhciBkZWJ1Z0lEID0gMDtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgZGVidWdJRCA9IHRoaXMuX2RlYnVnSUQ7XG4gICAgfVxuXG4gICAgaWYgKGluc3QuY29tcG9uZW50V2lsbE1vdW50KSB7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICBtZWFzdXJlTGlmZUN5Y2xlUGVyZihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIGluc3QuY29tcG9uZW50V2lsbE1vdW50KCk7XG4gICAgICAgIH0sIGRlYnVnSUQsICdjb21wb25lbnRXaWxsTW91bnQnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGluc3QuY29tcG9uZW50V2lsbE1vdW50KCk7XG4gICAgICB9XG4gICAgICAvLyBXaGVuIG1vdW50aW5nLCBjYWxscyB0byBgc2V0U3RhdGVgIGJ5IGBjb21wb25lbnRXaWxsTW91bnRgIHdpbGwgc2V0XG4gICAgICAvLyBgdGhpcy5fcGVuZGluZ1N0YXRlUXVldWVgIHdpdGhvdXQgdHJpZ2dlcmluZyBhIHJlLXJlbmRlci5cbiAgICAgIGlmICh0aGlzLl9wZW5kaW5nU3RhdGVRdWV1ZSkge1xuICAgICAgICBpbnN0LnN0YXRlID0gdGhpcy5fcHJvY2Vzc1BlbmRpbmdTdGF0ZShpbnN0LnByb3BzLCBpbnN0LmNvbnRleHQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIElmIG5vdCBhIHN0YXRlbGVzcyBjb21wb25lbnQsIHdlIG5vdyByZW5kZXJcbiAgICBpZiAocmVuZGVyZWRFbGVtZW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJlbmRlcmVkRWxlbWVudCA9IHRoaXMuX3JlbmRlclZhbGlkYXRlZENvbXBvbmVudCgpO1xuICAgIH1cblxuICAgIHZhciBub2RlVHlwZSA9IFJlYWN0Tm9kZVR5cGVzLmdldFR5cGUocmVuZGVyZWRFbGVtZW50KTtcbiAgICB0aGlzLl9yZW5kZXJlZE5vZGVUeXBlID0gbm9kZVR5cGU7XG4gICAgdmFyIGNoaWxkID0gdGhpcy5faW5zdGFudGlhdGVSZWFjdENvbXBvbmVudChyZW5kZXJlZEVsZW1lbnQsIG5vZGVUeXBlICE9PSBSZWFjdE5vZGVUeXBlcy5FTVBUWSAvKiBzaG91bGRIYXZlRGVidWdJRCAqL1xuICAgICk7XG4gICAgdGhpcy5fcmVuZGVyZWRDb21wb25lbnQgPSBjaGlsZDtcblxuICAgIHZhciBtYXJrdXAgPSBSZWFjdFJlY29uY2lsZXIubW91bnRDb21wb25lbnQoY2hpbGQsIHRyYW5zYWN0aW9uLCBob3N0UGFyZW50LCBob3N0Q29udGFpbmVySW5mbywgdGhpcy5fcHJvY2Vzc0NoaWxkQ29udGV4dChjb250ZXh0KSwgZGVidWdJRCk7XG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKGRlYnVnSUQgIT09IDApIHtcbiAgICAgICAgdmFyIGNoaWxkRGVidWdJRHMgPSBjaGlsZC5fZGVidWdJRCAhPT0gMCA/IFtjaGlsZC5fZGVidWdJRF0gOiBbXTtcbiAgICAgICAgUmVhY3RJbnN0cnVtZW50YXRpb24uZGVidWdUb29sLm9uU2V0Q2hpbGRyZW4oZGVidWdJRCwgY2hpbGREZWJ1Z0lEcyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hcmt1cDtcbiAgfSxcblxuICBnZXRIb3N0Tm9kZTogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBSZWFjdFJlY29uY2lsZXIuZ2V0SG9zdE5vZGUodGhpcy5fcmVuZGVyZWRDb21wb25lbnQpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBSZWxlYXNlcyBhbnkgcmVzb3VyY2VzIGFsbG9jYXRlZCBieSBgbW91bnRDb21wb25lbnRgLlxuICAgKlxuICAgKiBAZmluYWxcbiAgICogQGludGVybmFsXG4gICAqL1xuICB1bm1vdW50Q29tcG9uZW50OiBmdW5jdGlvbiAoc2FmZWx5KSB7XG4gICAgaWYgKCF0aGlzLl9yZW5kZXJlZENvbXBvbmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBpbnN0ID0gdGhpcy5faW5zdGFuY2U7XG5cbiAgICBpZiAoaW5zdC5jb21wb25lbnRXaWxsVW5tb3VudCAmJiAhaW5zdC5fY2FsbGVkQ29tcG9uZW50V2lsbFVubW91bnQpIHtcbiAgICAgIGluc3QuX2NhbGxlZENvbXBvbmVudFdpbGxVbm1vdW50ID0gdHJ1ZTtcblxuICAgICAgaWYgKHNhZmVseSkge1xuICAgICAgICB2YXIgbmFtZSA9IHRoaXMuZ2V0TmFtZSgpICsgJy5jb21wb25lbnRXaWxsVW5tb3VudCgpJztcbiAgICAgICAgUmVhY3RFcnJvclV0aWxzLmludm9rZUd1YXJkZWRDYWxsYmFjayhuYW1lLCBpbnN0LmNvbXBvbmVudFdpbGxVbm1vdW50LmJpbmQoaW5zdCkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICBtZWFzdXJlTGlmZUN5Y2xlUGVyZihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5zdC5jb21wb25lbnRXaWxsVW5tb3VudCgpO1xuICAgICAgICAgIH0sIHRoaXMuX2RlYnVnSUQsICdjb21wb25lbnRXaWxsVW5tb3VudCcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGluc3QuY29tcG9uZW50V2lsbFVubW91bnQoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLl9yZW5kZXJlZENvbXBvbmVudCkge1xuICAgICAgUmVhY3RSZWNvbmNpbGVyLnVubW91bnRDb21wb25lbnQodGhpcy5fcmVuZGVyZWRDb21wb25lbnQsIHNhZmVseSk7XG4gICAgICB0aGlzLl9yZW5kZXJlZE5vZGVUeXBlID0gbnVsbDtcbiAgICAgIHRoaXMuX3JlbmRlcmVkQ29tcG9uZW50ID0gbnVsbDtcbiAgICAgIHRoaXMuX2luc3RhbmNlID0gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBSZXNldCBwZW5kaW5nIGZpZWxkc1xuICAgIC8vIEV2ZW4gaWYgdGhpcyBjb21wb25lbnQgaXMgc2NoZWR1bGVkIGZvciBhbm90aGVyIHVwZGF0ZSBpbiBSZWFjdFVwZGF0ZXMsXG4gICAgLy8gaXQgd291bGQgc3RpbGwgYmUgaWdub3JlZCBiZWNhdXNlIHRoZXNlIGZpZWxkcyBhcmUgcmVzZXQuXG4gICAgdGhpcy5fcGVuZGluZ1N0YXRlUXVldWUgPSBudWxsO1xuICAgIHRoaXMuX3BlbmRpbmdSZXBsYWNlU3RhdGUgPSBmYWxzZTtcbiAgICB0aGlzLl9wZW5kaW5nRm9yY2VVcGRhdGUgPSBmYWxzZTtcbiAgICB0aGlzLl9wZW5kaW5nQ2FsbGJhY2tzID0gbnVsbDtcbiAgICB0aGlzLl9wZW5kaW5nRWxlbWVudCA9IG51bGw7XG5cbiAgICAvLyBUaGVzZSBmaWVsZHMgZG8gbm90IHJlYWxseSBuZWVkIHRvIGJlIHJlc2V0IHNpbmNlIHRoaXMgb2JqZWN0IGlzIG5vXG4gICAgLy8gbG9uZ2VyIGFjY2Vzc2libGUuXG4gICAgdGhpcy5fY29udGV4dCA9IG51bGw7XG4gICAgdGhpcy5fcm9vdE5vZGVJRCA9IDA7XG4gICAgdGhpcy5fdG9wTGV2ZWxXcmFwcGVyID0gbnVsbDtcblxuICAgIC8vIERlbGV0ZSB0aGUgcmVmZXJlbmNlIGZyb20gdGhlIGluc3RhbmNlIHRvIHRoaXMgaW50ZXJuYWwgcmVwcmVzZW50YXRpb25cbiAgICAvLyB3aGljaCBhbGxvdyB0aGUgaW50ZXJuYWxzIHRvIGJlIHByb3Blcmx5IGNsZWFuZWQgdXAgZXZlbiBpZiB0aGUgdXNlclxuICAgIC8vIGxlYWtzIGEgcmVmZXJlbmNlIHRvIHRoZSBwdWJsaWMgaW5zdGFuY2UuXG4gICAgUmVhY3RJbnN0YW5jZU1hcC5yZW1vdmUoaW5zdCk7XG5cbiAgICAvLyBTb21lIGV4aXN0aW5nIGNvbXBvbmVudHMgcmVseSBvbiBpbnN0LnByb3BzIGV2ZW4gYWZ0ZXIgdGhleSd2ZSBiZWVuXG4gICAgLy8gZGVzdHJveWVkIChpbiBldmVudCBoYW5kbGVycykuXG4gICAgLy8gVE9ETzogaW5zdC5wcm9wcyA9IG51bGw7XG4gICAgLy8gVE9ETzogaW5zdC5zdGF0ZSA9IG51bGw7XG4gICAgLy8gVE9ETzogaW5zdC5jb250ZXh0ID0gbnVsbDtcbiAgfSxcblxuICAvKipcbiAgICogRmlsdGVycyB0aGUgY29udGV4dCBvYmplY3QgdG8gb25seSBjb250YWluIGtleXMgc3BlY2lmaWVkIGluXG4gICAqIGBjb250ZXh0VHlwZXNgXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBjb250ZXh0XG4gICAqIEByZXR1cm4gez9vYmplY3R9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfbWFza0NvbnRleHQ6IGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gICAgdmFyIENvbXBvbmVudCA9IHRoaXMuX2N1cnJlbnRFbGVtZW50LnR5cGU7XG4gICAgdmFyIGNvbnRleHRUeXBlcyA9IENvbXBvbmVudC5jb250ZXh0VHlwZXM7XG4gICAgaWYgKCFjb250ZXh0VHlwZXMpIHtcbiAgICAgIHJldHVybiBlbXB0eU9iamVjdDtcbiAgICB9XG4gICAgdmFyIG1hc2tlZENvbnRleHQgPSB7fTtcbiAgICBmb3IgKHZhciBjb250ZXh0TmFtZSBpbiBjb250ZXh0VHlwZXMpIHtcbiAgICAgIG1hc2tlZENvbnRleHRbY29udGV4dE5hbWVdID0gY29udGV4dFtjb250ZXh0TmFtZV07XG4gICAgfVxuICAgIHJldHVybiBtYXNrZWRDb250ZXh0O1xuICB9LFxuXG4gIC8qKlxuICAgKiBGaWx0ZXJzIHRoZSBjb250ZXh0IG9iamVjdCB0byBvbmx5IGNvbnRhaW4ga2V5cyBzcGVjaWZpZWQgaW5cbiAgICogYGNvbnRleHRUeXBlc2AsIGFuZCBhc3NlcnRzIHRoYXQgdGhleSBhcmUgdmFsaWQuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBjb250ZXh0XG4gICAqIEByZXR1cm4gez9vYmplY3R9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfcHJvY2Vzc0NvbnRleHQ6IGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gICAgdmFyIG1hc2tlZENvbnRleHQgPSB0aGlzLl9tYXNrQ29udGV4dChjb250ZXh0KTtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgdmFyIENvbXBvbmVudCA9IHRoaXMuX2N1cnJlbnRFbGVtZW50LnR5cGU7XG4gICAgICBpZiAoQ29tcG9uZW50LmNvbnRleHRUeXBlcykge1xuICAgICAgICB0aGlzLl9jaGVja0NvbnRleHRUeXBlcyhDb21wb25lbnQuY29udGV4dFR5cGVzLCBtYXNrZWRDb250ZXh0LCAnY29udGV4dCcpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWFza2VkQ29udGV4dDtcbiAgfSxcblxuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IGN1cnJlbnRDb250ZXh0XG4gICAqIEByZXR1cm4ge29iamVjdH1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9wcm9jZXNzQ2hpbGRDb250ZXh0OiBmdW5jdGlvbiAoY3VycmVudENvbnRleHQpIHtcbiAgICB2YXIgQ29tcG9uZW50ID0gdGhpcy5fY3VycmVudEVsZW1lbnQudHlwZTtcbiAgICB2YXIgaW5zdCA9IHRoaXMuX2luc3RhbmNlO1xuICAgIHZhciBjaGlsZENvbnRleHQ7XG5cbiAgICBpZiAoaW5zdC5nZXRDaGlsZENvbnRleHQpIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIFJlYWN0SW5zdHJ1bWVudGF0aW9uLmRlYnVnVG9vbC5vbkJlZ2luUHJvY2Vzc2luZ0NoaWxkQ29udGV4dCgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNoaWxkQ29udGV4dCA9IGluc3QuZ2V0Q2hpbGRDb250ZXh0KCk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgUmVhY3RJbnN0cnVtZW50YXRpb24uZGVidWdUb29sLm9uRW5kUHJvY2Vzc2luZ0NoaWxkQ29udGV4dCgpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjaGlsZENvbnRleHQgPSBpbnN0LmdldENoaWxkQ29udGV4dCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjaGlsZENvbnRleHQpIHtcbiAgICAgICEodHlwZW9mIENvbXBvbmVudC5jaGlsZENvbnRleHRUeXBlcyA9PT0gJ29iamVjdCcpID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IGludmFyaWFudChmYWxzZSwgJyVzLmdldENoaWxkQ29udGV4dCgpOiBjaGlsZENvbnRleHRUeXBlcyBtdXN0IGJlIGRlZmluZWQgaW4gb3JkZXIgdG8gdXNlIGdldENoaWxkQ29udGV4dCgpLicsIHRoaXMuZ2V0TmFtZSgpIHx8ICdSZWFjdENvbXBvc2l0ZUNvbXBvbmVudCcpIDogX3Byb2RJbnZhcmlhbnQoJzEwNycsIHRoaXMuZ2V0TmFtZSgpIHx8ICdSZWFjdENvbXBvc2l0ZUNvbXBvbmVudCcpIDogdm9pZCAwO1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgdGhpcy5fY2hlY2tDb250ZXh0VHlwZXMoQ29tcG9uZW50LmNoaWxkQ29udGV4dFR5cGVzLCBjaGlsZENvbnRleHQsICdjaGlsZCBjb250ZXh0Jyk7XG4gICAgICB9XG4gICAgICBmb3IgKHZhciBuYW1lIGluIGNoaWxkQ29udGV4dCkge1xuICAgICAgICAhKG5hbWUgaW4gQ29tcG9uZW50LmNoaWxkQ29udGV4dFR5cGVzKSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICclcy5nZXRDaGlsZENvbnRleHQoKToga2V5IFwiJXNcIiBpcyBub3QgZGVmaW5lZCBpbiBjaGlsZENvbnRleHRUeXBlcy4nLCB0aGlzLmdldE5hbWUoKSB8fCAnUmVhY3RDb21wb3NpdGVDb21wb25lbnQnLCBuYW1lKSA6IF9wcm9kSW52YXJpYW50KCcxMDgnLCB0aGlzLmdldE5hbWUoKSB8fCAnUmVhY3RDb21wb3NpdGVDb21wb25lbnQnLCBuYW1lKSA6IHZvaWQgMDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBfYXNzaWduKHt9LCBjdXJyZW50Q29udGV4dCwgY2hpbGRDb250ZXh0KTtcbiAgICB9XG4gICAgcmV0dXJuIGN1cnJlbnRDb250ZXh0O1xuICB9LFxuXG4gIC8qKlxuICAgKiBBc3NlcnQgdGhhdCB0aGUgY29udGV4dCB0eXBlcyBhcmUgdmFsaWRcbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IHR5cGVTcGVjcyBNYXAgb2YgY29udGV4dCBmaWVsZCB0byBhIFJlYWN0UHJvcFR5cGVcbiAgICogQHBhcmFtIHtvYmplY3R9IHZhbHVlcyBSdW50aW1lIHZhbHVlcyB0aGF0IG5lZWQgdG8gYmUgdHlwZS1jaGVja2VkXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsb2NhdGlvbiBlLmcuIFwicHJvcFwiLCBcImNvbnRleHRcIiwgXCJjaGlsZCBjb250ZXh0XCJcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jaGVja0NvbnRleHRUeXBlczogZnVuY3Rpb24gKHR5cGVTcGVjcywgdmFsdWVzLCBsb2NhdGlvbikge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBjaGVja1JlYWN0VHlwZVNwZWModHlwZVNwZWNzLCB2YWx1ZXMsIGxvY2F0aW9uLCB0aGlzLmdldE5hbWUoKSwgbnVsbCwgdGhpcy5fZGVidWdJRCk7XG4gICAgfVxuICB9LFxuXG4gIHJlY2VpdmVDb21wb25lbnQ6IGZ1bmN0aW9uIChuZXh0RWxlbWVudCwgdHJhbnNhY3Rpb24sIG5leHRDb250ZXh0KSB7XG4gICAgdmFyIHByZXZFbGVtZW50ID0gdGhpcy5fY3VycmVudEVsZW1lbnQ7XG4gICAgdmFyIHByZXZDb250ZXh0ID0gdGhpcy5fY29udGV4dDtcblxuICAgIHRoaXMuX3BlbmRpbmdFbGVtZW50ID0gbnVsbDtcblxuICAgIHRoaXMudXBkYXRlQ29tcG9uZW50KHRyYW5zYWN0aW9uLCBwcmV2RWxlbWVudCwgbmV4dEVsZW1lbnQsIHByZXZDb250ZXh0LCBuZXh0Q29udGV4dCk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIElmIGFueSBvZiBgX3BlbmRpbmdFbGVtZW50YCwgYF9wZW5kaW5nU3RhdGVRdWV1ZWAsIG9yIGBfcGVuZGluZ0ZvcmNlVXBkYXRlYFxuICAgKiBpcyBzZXQsIHVwZGF0ZSB0aGUgY29tcG9uZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb259IHRyYW5zYWN0aW9uXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcGVyZm9ybVVwZGF0ZUlmTmVjZXNzYXJ5OiBmdW5jdGlvbiAodHJhbnNhY3Rpb24pIHtcbiAgICBpZiAodGhpcy5fcGVuZGluZ0VsZW1lbnQgIT0gbnVsbCkge1xuICAgICAgUmVhY3RSZWNvbmNpbGVyLnJlY2VpdmVDb21wb25lbnQodGhpcywgdGhpcy5fcGVuZGluZ0VsZW1lbnQsIHRyYW5zYWN0aW9uLCB0aGlzLl9jb250ZXh0KTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuX3BlbmRpbmdTdGF0ZVF1ZXVlICE9PSBudWxsIHx8IHRoaXMuX3BlbmRpbmdGb3JjZVVwZGF0ZSkge1xuICAgICAgdGhpcy51cGRhdGVDb21wb25lbnQodHJhbnNhY3Rpb24sIHRoaXMuX2N1cnJlbnRFbGVtZW50LCB0aGlzLl9jdXJyZW50RWxlbWVudCwgdGhpcy5fY29udGV4dCwgdGhpcy5fY29udGV4dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3VwZGF0ZUJhdGNoTnVtYmVyID0gbnVsbDtcbiAgICB9XG4gIH0sXG5cbiAgLyoqXG4gICAqIFBlcmZvcm0gYW4gdXBkYXRlIHRvIGEgbW91bnRlZCBjb21wb25lbnQuIFRoZSBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIGFuZFxuICAgKiBzaG91bGRDb21wb25lbnRVcGRhdGUgbWV0aG9kcyBhcmUgY2FsbGVkLCB0aGVuIChhc3N1bWluZyB0aGUgdXBkYXRlIGlzbid0XG4gICAqIHNraXBwZWQpIHRoZSByZW1haW5pbmcgdXBkYXRlIGxpZmVjeWNsZSBtZXRob2RzIGFyZSBjYWxsZWQgYW5kIHRoZSBET01cbiAgICogcmVwcmVzZW50YXRpb24gaXMgdXBkYXRlZC5cbiAgICpcbiAgICogQnkgZGVmYXVsdCwgdGhpcyBpbXBsZW1lbnRzIFJlYWN0J3MgcmVuZGVyaW5nIGFuZCByZWNvbmNpbGlhdGlvbiBhbGdvcml0aG0uXG4gICAqIFNvcGhpc3RpY2F0ZWQgY2xpZW50cyBtYXkgd2lzaCB0byBvdmVycmlkZSB0aGlzLlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb259IHRyYW5zYWN0aW9uXG4gICAqIEBwYXJhbSB7UmVhY3RFbGVtZW50fSBwcmV2UGFyZW50RWxlbWVudFxuICAgKiBAcGFyYW0ge1JlYWN0RWxlbWVudH0gbmV4dFBhcmVudEVsZW1lbnRcbiAgICogQGludGVybmFsXG4gICAqIEBvdmVycmlkYWJsZVxuICAgKi9cbiAgdXBkYXRlQ29tcG9uZW50OiBmdW5jdGlvbiAodHJhbnNhY3Rpb24sIHByZXZQYXJlbnRFbGVtZW50LCBuZXh0UGFyZW50RWxlbWVudCwgcHJldlVubWFza2VkQ29udGV4dCwgbmV4dFVubWFza2VkQ29udGV4dCkge1xuICAgIHZhciBpbnN0ID0gdGhpcy5faW5zdGFuY2U7XG4gICAgIShpbnN0ICE9IG51bGwpID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IGludmFyaWFudChmYWxzZSwgJ0F0dGVtcHRlZCB0byB1cGRhdGUgY29tcG9uZW50IGAlc2AgdGhhdCBoYXMgYWxyZWFkeSBiZWVuIHVubW91bnRlZCAob3IgZmFpbGVkIHRvIG1vdW50KS4nLCB0aGlzLmdldE5hbWUoKSB8fCAnUmVhY3RDb21wb3NpdGVDb21wb25lbnQnKSA6IF9wcm9kSW52YXJpYW50KCcxMzYnLCB0aGlzLmdldE5hbWUoKSB8fCAnUmVhY3RDb21wb3NpdGVDb21wb25lbnQnKSA6IHZvaWQgMDtcblxuICAgIHZhciB3aWxsUmVjZWl2ZSA9IGZhbHNlO1xuICAgIHZhciBuZXh0Q29udGV4dDtcblxuICAgIC8vIERldGVybWluZSBpZiB0aGUgY29udGV4dCBoYXMgY2hhbmdlZCBvciBub3RcbiAgICBpZiAodGhpcy5fY29udGV4dCA9PT0gbmV4dFVubWFza2VkQ29udGV4dCkge1xuICAgICAgbmV4dENvbnRleHQgPSBpbnN0LmNvbnRleHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5leHRDb250ZXh0ID0gdGhpcy5fcHJvY2Vzc0NvbnRleHQobmV4dFVubWFza2VkQ29udGV4dCk7XG4gICAgICB3aWxsUmVjZWl2ZSA9IHRydWU7XG4gICAgfVxuXG4gICAgdmFyIHByZXZQcm9wcyA9IHByZXZQYXJlbnRFbGVtZW50LnByb3BzO1xuICAgIHZhciBuZXh0UHJvcHMgPSBuZXh0UGFyZW50RWxlbWVudC5wcm9wcztcblxuICAgIC8vIE5vdCBhIHNpbXBsZSBzdGF0ZSB1cGRhdGUgYnV0IGEgcHJvcHMgdXBkYXRlXG4gICAgaWYgKHByZXZQYXJlbnRFbGVtZW50ICE9PSBuZXh0UGFyZW50RWxlbWVudCkge1xuICAgICAgd2lsbFJlY2VpdmUgPSB0cnVlO1xuICAgIH1cblxuICAgIC8vIEFuIHVwZGF0ZSBoZXJlIHdpbGwgc2NoZWR1bGUgYW4gdXBkYXRlIGJ1dCBpbW1lZGlhdGVseSBzZXRcbiAgICAvLyBfcGVuZGluZ1N0YXRlUXVldWUgd2hpY2ggd2lsbCBlbnN1cmUgdGhhdCBhbnkgc3RhdGUgdXBkYXRlcyBnZXRzXG4gICAgLy8gaW1tZWRpYXRlbHkgcmVjb25jaWxlZCBpbnN0ZWFkIG9mIHdhaXRpbmcgZm9yIHRoZSBuZXh0IGJhdGNoLlxuICAgIGlmICh3aWxsUmVjZWl2ZSAmJiBpbnN0LmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMpIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIG1lYXN1cmVMaWZlQ3ljbGVQZXJmKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gaW5zdC5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG5leHRQcm9wcywgbmV4dENvbnRleHQpO1xuICAgICAgICB9LCB0aGlzLl9kZWJ1Z0lELCAnY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcycpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW5zdC5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG5leHRQcm9wcywgbmV4dENvbnRleHQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBuZXh0U3RhdGUgPSB0aGlzLl9wcm9jZXNzUGVuZGluZ1N0YXRlKG5leHRQcm9wcywgbmV4dENvbnRleHQpO1xuICAgIHZhciBzaG91bGRVcGRhdGUgPSB0cnVlO1xuXG4gICAgaWYgKCF0aGlzLl9wZW5kaW5nRm9yY2VVcGRhdGUpIHtcbiAgICAgIGlmIChpbnN0LnNob3VsZENvbXBvbmVudFVwZGF0ZSkge1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgIHNob3VsZFVwZGF0ZSA9IG1lYXN1cmVMaWZlQ3ljbGVQZXJmKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnN0LnNob3VsZENvbXBvbmVudFVwZGF0ZShuZXh0UHJvcHMsIG5leHRTdGF0ZSwgbmV4dENvbnRleHQpO1xuICAgICAgICAgIH0sIHRoaXMuX2RlYnVnSUQsICdzaG91bGRDb21wb25lbnRVcGRhdGUnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzaG91bGRVcGRhdGUgPSBpbnN0LnNob3VsZENvbXBvbmVudFVwZGF0ZShuZXh0UHJvcHMsIG5leHRTdGF0ZSwgbmV4dENvbnRleHQpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodGhpcy5fY29tcG9zaXRlVHlwZSA9PT0gQ29tcG9zaXRlVHlwZXMuUHVyZUNsYXNzKSB7XG4gICAgICAgICAgc2hvdWxkVXBkYXRlID0gIXNoYWxsb3dFcXVhbChwcmV2UHJvcHMsIG5leHRQcm9wcykgfHwgIXNoYWxsb3dFcXVhbChpbnN0LnN0YXRlLCBuZXh0U3RhdGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKHNob3VsZFVwZGF0ZSAhPT0gdW5kZWZpbmVkLCAnJXMuc2hvdWxkQ29tcG9uZW50VXBkYXRlKCk6IFJldHVybmVkIHVuZGVmaW5lZCBpbnN0ZWFkIG9mIGEgJyArICdib29sZWFuIHZhbHVlLiBNYWtlIHN1cmUgdG8gcmV0dXJuIHRydWUgb3IgZmFsc2UuJywgdGhpcy5nZXROYW1lKCkgfHwgJ1JlYWN0Q29tcG9zaXRlQ29tcG9uZW50JykgOiB2b2lkIDA7XG4gICAgfVxuXG4gICAgdGhpcy5fdXBkYXRlQmF0Y2hOdW1iZXIgPSBudWxsO1xuICAgIGlmIChzaG91bGRVcGRhdGUpIHtcbiAgICAgIHRoaXMuX3BlbmRpbmdGb3JjZVVwZGF0ZSA9IGZhbHNlO1xuICAgICAgLy8gV2lsbCBzZXQgYHRoaXMucHJvcHNgLCBgdGhpcy5zdGF0ZWAgYW5kIGB0aGlzLmNvbnRleHRgLlxuICAgICAgdGhpcy5fcGVyZm9ybUNvbXBvbmVudFVwZGF0ZShuZXh0UGFyZW50RWxlbWVudCwgbmV4dFByb3BzLCBuZXh0U3RhdGUsIG5leHRDb250ZXh0LCB0cmFuc2FjdGlvbiwgbmV4dFVubWFza2VkQ29udGV4dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIElmIGl0J3MgZGV0ZXJtaW5lZCB0aGF0IGEgY29tcG9uZW50IHNob3VsZCBub3QgdXBkYXRlLCB3ZSBzdGlsbCB3YW50XG4gICAgICAvLyB0byBzZXQgcHJvcHMgYW5kIHN0YXRlIGJ1dCB3ZSBzaG9ydGN1dCB0aGUgcmVzdCBvZiB0aGUgdXBkYXRlLlxuICAgICAgdGhpcy5fY3VycmVudEVsZW1lbnQgPSBuZXh0UGFyZW50RWxlbWVudDtcbiAgICAgIHRoaXMuX2NvbnRleHQgPSBuZXh0VW5tYXNrZWRDb250ZXh0O1xuICAgICAgaW5zdC5wcm9wcyA9IG5leHRQcm9wcztcbiAgICAgIGluc3Quc3RhdGUgPSBuZXh0U3RhdGU7XG4gICAgICBpbnN0LmNvbnRleHQgPSBuZXh0Q29udGV4dDtcbiAgICB9XG4gIH0sXG5cbiAgX3Byb2Nlc3NQZW5kaW5nU3RhdGU6IGZ1bmN0aW9uIChwcm9wcywgY29udGV4dCkge1xuICAgIHZhciBpbnN0ID0gdGhpcy5faW5zdGFuY2U7XG4gICAgdmFyIHF1ZXVlID0gdGhpcy5fcGVuZGluZ1N0YXRlUXVldWU7XG4gICAgdmFyIHJlcGxhY2UgPSB0aGlzLl9wZW5kaW5nUmVwbGFjZVN0YXRlO1xuICAgIHRoaXMuX3BlbmRpbmdSZXBsYWNlU3RhdGUgPSBmYWxzZTtcbiAgICB0aGlzLl9wZW5kaW5nU3RhdGVRdWV1ZSA9IG51bGw7XG5cbiAgICBpZiAoIXF1ZXVlKSB7XG4gICAgICByZXR1cm4gaW5zdC5zdGF0ZTtcbiAgICB9XG5cbiAgICBpZiAocmVwbGFjZSAmJiBxdWV1ZS5sZW5ndGggPT09IDEpIHtcbiAgICAgIHJldHVybiBxdWV1ZVswXTtcbiAgICB9XG5cbiAgICB2YXIgbmV4dFN0YXRlID0gX2Fzc2lnbih7fSwgcmVwbGFjZSA/IHF1ZXVlWzBdIDogaW5zdC5zdGF0ZSk7XG4gICAgZm9yICh2YXIgaSA9IHJlcGxhY2UgPyAxIDogMDsgaSA8IHF1ZXVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcGFydGlhbCA9IHF1ZXVlW2ldO1xuICAgICAgX2Fzc2lnbihuZXh0U3RhdGUsIHR5cGVvZiBwYXJ0aWFsID09PSAnZnVuY3Rpb24nID8gcGFydGlhbC5jYWxsKGluc3QsIG5leHRTdGF0ZSwgcHJvcHMsIGNvbnRleHQpIDogcGFydGlhbCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5leHRTdGF0ZTtcbiAgfSxcblxuICAvKipcbiAgICogTWVyZ2VzIG5ldyBwcm9wcyBhbmQgc3RhdGUsIG5vdGlmaWVzIGRlbGVnYXRlIG1ldGhvZHMgb2YgdXBkYXRlIGFuZFxuICAgKiBwZXJmb3JtcyB1cGRhdGUuXG4gICAqXG4gICAqIEBwYXJhbSB7UmVhY3RFbGVtZW50fSBuZXh0RWxlbWVudCBOZXh0IGVsZW1lbnRcbiAgICogQHBhcmFtIHtvYmplY3R9IG5leHRQcm9wcyBOZXh0IHB1YmxpYyBvYmplY3QgdG8gc2V0IGFzIHByb3BlcnRpZXMuXG4gICAqIEBwYXJhbSB7P29iamVjdH0gbmV4dFN0YXRlIE5leHQgb2JqZWN0IHRvIHNldCBhcyBzdGF0ZS5cbiAgICogQHBhcmFtIHs/b2JqZWN0fSBuZXh0Q29udGV4dCBOZXh0IHB1YmxpYyBvYmplY3QgdG8gc2V0IGFzIGNvbnRleHQuXG4gICAqIEBwYXJhbSB7UmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvbn0gdHJhbnNhY3Rpb25cbiAgICogQHBhcmFtIHs/b2JqZWN0fSB1bm1hc2tlZENvbnRleHRcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9wZXJmb3JtQ29tcG9uZW50VXBkYXRlOiBmdW5jdGlvbiAobmV4dEVsZW1lbnQsIG5leHRQcm9wcywgbmV4dFN0YXRlLCBuZXh0Q29udGV4dCwgdHJhbnNhY3Rpb24sIHVubWFza2VkQ29udGV4dCkge1xuICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgdmFyIGluc3QgPSB0aGlzLl9pbnN0YW5jZTtcblxuICAgIHZhciBoYXNDb21wb25lbnREaWRVcGRhdGUgPSBCb29sZWFuKGluc3QuY29tcG9uZW50RGlkVXBkYXRlKTtcbiAgICB2YXIgcHJldlByb3BzO1xuICAgIHZhciBwcmV2U3RhdGU7XG4gICAgdmFyIHByZXZDb250ZXh0O1xuICAgIGlmIChoYXNDb21wb25lbnREaWRVcGRhdGUpIHtcbiAgICAgIHByZXZQcm9wcyA9IGluc3QucHJvcHM7XG4gICAgICBwcmV2U3RhdGUgPSBpbnN0LnN0YXRlO1xuICAgICAgcHJldkNvbnRleHQgPSBpbnN0LmNvbnRleHQ7XG4gICAgfVxuXG4gICAgaWYgKGluc3QuY29tcG9uZW50V2lsbFVwZGF0ZSkge1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgbWVhc3VyZUxpZmVDeWNsZVBlcmYoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBpbnN0LmNvbXBvbmVudFdpbGxVcGRhdGUobmV4dFByb3BzLCBuZXh0U3RhdGUsIG5leHRDb250ZXh0KTtcbiAgICAgICAgfSwgdGhpcy5fZGVidWdJRCwgJ2NvbXBvbmVudFdpbGxVcGRhdGUnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGluc3QuY29tcG9uZW50V2lsbFVwZGF0ZShuZXh0UHJvcHMsIG5leHRTdGF0ZSwgbmV4dENvbnRleHQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX2N1cnJlbnRFbGVtZW50ID0gbmV4dEVsZW1lbnQ7XG4gICAgdGhpcy5fY29udGV4dCA9IHVubWFza2VkQ29udGV4dDtcbiAgICBpbnN0LnByb3BzID0gbmV4dFByb3BzO1xuICAgIGluc3Quc3RhdGUgPSBuZXh0U3RhdGU7XG4gICAgaW5zdC5jb250ZXh0ID0gbmV4dENvbnRleHQ7XG5cbiAgICB0aGlzLl91cGRhdGVSZW5kZXJlZENvbXBvbmVudCh0cmFuc2FjdGlvbiwgdW5tYXNrZWRDb250ZXh0KTtcblxuICAgIGlmIChoYXNDb21wb25lbnREaWRVcGRhdGUpIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIHRyYW5zYWN0aW9uLmdldFJlYWN0TW91bnRSZWFkeSgpLmVucXVldWUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIG1lYXN1cmVMaWZlQ3ljbGVQZXJmKGluc3QuY29tcG9uZW50RGlkVXBkYXRlLmJpbmQoaW5zdCwgcHJldlByb3BzLCBwcmV2U3RhdGUsIHByZXZDb250ZXh0KSwgX3RoaXMyLl9kZWJ1Z0lELCAnY29tcG9uZW50RGlkVXBkYXRlJyk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdHJhbnNhY3Rpb24uZ2V0UmVhY3RNb3VudFJlYWR5KCkuZW5xdWV1ZShpbnN0LmNvbXBvbmVudERpZFVwZGF0ZS5iaW5kKGluc3QsIHByZXZQcm9wcywgcHJldlN0YXRlLCBwcmV2Q29udGV4dCksIGluc3QpO1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICAvKipcbiAgICogQ2FsbCB0aGUgY29tcG9uZW50J3MgYHJlbmRlcmAgbWV0aG9kIGFuZCB1cGRhdGUgdGhlIERPTSBhY2NvcmRpbmdseS5cbiAgICpcbiAgICogQHBhcmFtIHtSZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9ufSB0cmFuc2FjdGlvblxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIF91cGRhdGVSZW5kZXJlZENvbXBvbmVudDogZnVuY3Rpb24gKHRyYW5zYWN0aW9uLCBjb250ZXh0KSB7XG4gICAgdmFyIHByZXZDb21wb25lbnRJbnN0YW5jZSA9IHRoaXMuX3JlbmRlcmVkQ29tcG9uZW50O1xuICAgIHZhciBwcmV2UmVuZGVyZWRFbGVtZW50ID0gcHJldkNvbXBvbmVudEluc3RhbmNlLl9jdXJyZW50RWxlbWVudDtcbiAgICB2YXIgbmV4dFJlbmRlcmVkRWxlbWVudCA9IHRoaXMuX3JlbmRlclZhbGlkYXRlZENvbXBvbmVudCgpO1xuXG4gICAgdmFyIGRlYnVnSUQgPSAwO1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBkZWJ1Z0lEID0gdGhpcy5fZGVidWdJRDtcbiAgICB9XG5cbiAgICBpZiAoc2hvdWxkVXBkYXRlUmVhY3RDb21wb25lbnQocHJldlJlbmRlcmVkRWxlbWVudCwgbmV4dFJlbmRlcmVkRWxlbWVudCkpIHtcbiAgICAgIFJlYWN0UmVjb25jaWxlci5yZWNlaXZlQ29tcG9uZW50KHByZXZDb21wb25lbnRJbnN0YW5jZSwgbmV4dFJlbmRlcmVkRWxlbWVudCwgdHJhbnNhY3Rpb24sIHRoaXMuX3Byb2Nlc3NDaGlsZENvbnRleHQoY29udGV4dCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgb2xkSG9zdE5vZGUgPSBSZWFjdFJlY29uY2lsZXIuZ2V0SG9zdE5vZGUocHJldkNvbXBvbmVudEluc3RhbmNlKTtcbiAgICAgIFJlYWN0UmVjb25jaWxlci51bm1vdW50Q29tcG9uZW50KHByZXZDb21wb25lbnRJbnN0YW5jZSwgZmFsc2UpO1xuXG4gICAgICB2YXIgbm9kZVR5cGUgPSBSZWFjdE5vZGVUeXBlcy5nZXRUeXBlKG5leHRSZW5kZXJlZEVsZW1lbnQpO1xuICAgICAgdGhpcy5fcmVuZGVyZWROb2RlVHlwZSA9IG5vZGVUeXBlO1xuICAgICAgdmFyIGNoaWxkID0gdGhpcy5faW5zdGFudGlhdGVSZWFjdENvbXBvbmVudChuZXh0UmVuZGVyZWRFbGVtZW50LCBub2RlVHlwZSAhPT0gUmVhY3ROb2RlVHlwZXMuRU1QVFkgLyogc2hvdWxkSGF2ZURlYnVnSUQgKi9cbiAgICAgICk7XG4gICAgICB0aGlzLl9yZW5kZXJlZENvbXBvbmVudCA9IGNoaWxkO1xuXG4gICAgICB2YXIgbmV4dE1hcmt1cCA9IFJlYWN0UmVjb25jaWxlci5tb3VudENvbXBvbmVudChjaGlsZCwgdHJhbnNhY3Rpb24sIHRoaXMuX2hvc3RQYXJlbnQsIHRoaXMuX2hvc3RDb250YWluZXJJbmZvLCB0aGlzLl9wcm9jZXNzQ2hpbGRDb250ZXh0KGNvbnRleHQpLCBkZWJ1Z0lEKTtcblxuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgaWYgKGRlYnVnSUQgIT09IDApIHtcbiAgICAgICAgICB2YXIgY2hpbGREZWJ1Z0lEcyA9IGNoaWxkLl9kZWJ1Z0lEICE9PSAwID8gW2NoaWxkLl9kZWJ1Z0lEXSA6IFtdO1xuICAgICAgICAgIFJlYWN0SW5zdHJ1bWVudGF0aW9uLmRlYnVnVG9vbC5vblNldENoaWxkcmVuKGRlYnVnSUQsIGNoaWxkRGVidWdJRHMpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX3JlcGxhY2VOb2RlV2l0aE1hcmt1cChvbGRIb3N0Tm9kZSwgbmV4dE1hcmt1cCwgcHJldkNvbXBvbmVudEluc3RhbmNlKTtcbiAgICB9XG4gIH0sXG5cbiAgLyoqXG4gICAqIE92ZXJyaWRkZW4gaW4gc2hhbGxvdyByZW5kZXJpbmcuXG4gICAqXG4gICAqIEBwcm90ZWN0ZWRcbiAgICovXG4gIF9yZXBsYWNlTm9kZVdpdGhNYXJrdXA6IGZ1bmN0aW9uIChvbGRIb3N0Tm9kZSwgbmV4dE1hcmt1cCwgcHJldkluc3RhbmNlKSB7XG4gICAgUmVhY3RDb21wb25lbnRFbnZpcm9ubWVudC5yZXBsYWNlTm9kZVdpdGhNYXJrdXAob2xkSG9zdE5vZGUsIG5leHRNYXJrdXAsIHByZXZJbnN0YW5jZSk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEBwcm90ZWN0ZWRcbiAgICovXG4gIF9yZW5kZXJWYWxpZGF0ZWRDb21wb25lbnRXaXRob3V0T3duZXJPckNvbnRleHQ6IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgaW5zdCA9IHRoaXMuX2luc3RhbmNlO1xuICAgIHZhciByZW5kZXJlZEVsZW1lbnQ7XG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgcmVuZGVyZWRFbGVtZW50ID0gbWVhc3VyZUxpZmVDeWNsZVBlcmYoZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gaW5zdC5yZW5kZXIoKTtcbiAgICAgIH0sIHRoaXMuX2RlYnVnSUQsICdyZW5kZXInKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVuZGVyZWRFbGVtZW50ID0gaW5zdC5yZW5kZXIoKTtcbiAgICB9XG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgLy8gV2UgYWxsb3cgYXV0by1tb2NrcyB0byBwcm9jZWVkIGFzIGlmIHRoZXkncmUgcmV0dXJuaW5nIG51bGwuXG4gICAgICBpZiAocmVuZGVyZWRFbGVtZW50ID09PSB1bmRlZmluZWQgJiYgaW5zdC5yZW5kZXIuX2lzTW9ja0Z1bmN0aW9uKSB7XG4gICAgICAgIC8vIFRoaXMgaXMgcHJvYmFibHkgYmFkIHByYWN0aWNlLiBDb25zaWRlciB3YXJuaW5nIGhlcmUgYW5kXG4gICAgICAgIC8vIGRlcHJlY2F0aW5nIHRoaXMgY29udmVuaWVuY2UuXG4gICAgICAgIHJlbmRlcmVkRWxlbWVudCA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlbmRlcmVkRWxlbWVudDtcbiAgfSxcblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9yZW5kZXJWYWxpZGF0ZWRDb21wb25lbnQ6IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcmVuZGVyZWRFbGVtZW50O1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nIHx8IHRoaXMuX2NvbXBvc2l0ZVR5cGUgIT09IENvbXBvc2l0ZVR5cGVzLlN0YXRlbGVzc0Z1bmN0aW9uYWwpIHtcbiAgICAgIFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQgPSB0aGlzO1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmVuZGVyZWRFbGVtZW50ID0gdGhpcy5fcmVuZGVyVmFsaWRhdGVkQ29tcG9uZW50V2l0aG91dE93bmVyT3JDb250ZXh0KCk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50ID0gbnVsbDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmVuZGVyZWRFbGVtZW50ID0gdGhpcy5fcmVuZGVyVmFsaWRhdGVkQ29tcG9uZW50V2l0aG91dE93bmVyT3JDb250ZXh0KCk7XG4gICAgfVxuICAgICEoXG4gICAgLy8gVE9ETzogQW4gYGlzVmFsaWROb2RlYCBmdW5jdGlvbiB3b3VsZCBwcm9iYWJseSBiZSBtb3JlIGFwcHJvcHJpYXRlXG4gICAgcmVuZGVyZWRFbGVtZW50ID09PSBudWxsIHx8IHJlbmRlcmVkRWxlbWVudCA9PT0gZmFsc2UgfHwgUmVhY3QuaXNWYWxpZEVsZW1lbnQocmVuZGVyZWRFbGVtZW50KSkgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAnJXMucmVuZGVyKCk6IEEgdmFsaWQgUmVhY3QgZWxlbWVudCAob3IgbnVsbCkgbXVzdCBiZSByZXR1cm5lZC4gWW91IG1heSBoYXZlIHJldHVybmVkIHVuZGVmaW5lZCwgYW4gYXJyYXkgb3Igc29tZSBvdGhlciBpbnZhbGlkIG9iamVjdC4nLCB0aGlzLmdldE5hbWUoKSB8fCAnUmVhY3RDb21wb3NpdGVDb21wb25lbnQnKSA6IF9wcm9kSW52YXJpYW50KCcxMDknLCB0aGlzLmdldE5hbWUoKSB8fCAnUmVhY3RDb21wb3NpdGVDb21wb25lbnQnKSA6IHZvaWQgMDtcblxuICAgIHJldHVybiByZW5kZXJlZEVsZW1lbnQ7XG4gIH0sXG5cbiAgLyoqXG4gICAqIExhemlseSBhbGxvY2F0ZXMgdGhlIHJlZnMgb2JqZWN0IGFuZCBzdG9yZXMgYGNvbXBvbmVudGAgYXMgYHJlZmAuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByZWYgUmVmZXJlbmNlIG5hbWUuXG4gICAqIEBwYXJhbSB7Y29tcG9uZW50fSBjb21wb25lbnQgQ29tcG9uZW50IHRvIHN0b3JlIGFzIGByZWZgLlxuICAgKiBAZmluYWxcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGF0dGFjaFJlZjogZnVuY3Rpb24gKHJlZiwgY29tcG9uZW50KSB7XG4gICAgdmFyIGluc3QgPSB0aGlzLmdldFB1YmxpY0luc3RhbmNlKCk7XG4gICAgIShpbnN0ICE9IG51bGwpID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IGludmFyaWFudChmYWxzZSwgJ1N0YXRlbGVzcyBmdW5jdGlvbiBjb21wb25lbnRzIGNhbm5vdCBoYXZlIHJlZnMuJykgOiBfcHJvZEludmFyaWFudCgnMTEwJykgOiB2b2lkIDA7XG4gICAgdmFyIHB1YmxpY0NvbXBvbmVudEluc3RhbmNlID0gY29tcG9uZW50LmdldFB1YmxpY0luc3RhbmNlKCk7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIHZhciBjb21wb25lbnROYW1lID0gY29tcG9uZW50ICYmIGNvbXBvbmVudC5nZXROYW1lID8gY29tcG9uZW50LmdldE5hbWUoKSA6ICdhIGNvbXBvbmVudCc7XG4gICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyhwdWJsaWNDb21wb25lbnRJbnN0YW5jZSAhPSBudWxsIHx8IGNvbXBvbmVudC5fY29tcG9zaXRlVHlwZSAhPT0gQ29tcG9zaXRlVHlwZXMuU3RhdGVsZXNzRnVuY3Rpb25hbCwgJ1N0YXRlbGVzcyBmdW5jdGlvbiBjb21wb25lbnRzIGNhbm5vdCBiZSBnaXZlbiByZWZzICcgKyAnKFNlZSByZWYgXCIlc1wiIGluICVzIGNyZWF0ZWQgYnkgJXMpLiAnICsgJ0F0dGVtcHRzIHRvIGFjY2VzcyB0aGlzIHJlZiB3aWxsIGZhaWwuJywgcmVmLCBjb21wb25lbnROYW1lLCB0aGlzLmdldE5hbWUoKSkgOiB2b2lkIDA7XG4gICAgfVxuICAgIHZhciByZWZzID0gaW5zdC5yZWZzID09PSBlbXB0eU9iamVjdCA/IGluc3QucmVmcyA9IHt9IDogaW5zdC5yZWZzO1xuICAgIHJlZnNbcmVmXSA9IHB1YmxpY0NvbXBvbmVudEluc3RhbmNlO1xuICB9LFxuXG4gIC8qKlxuICAgKiBEZXRhY2hlcyBhIHJlZmVyZW5jZSBuYW1lLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcmVmIE5hbWUgdG8gZGVyZWZlcmVuY2UuXG4gICAqIEBmaW5hbFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZGV0YWNoUmVmOiBmdW5jdGlvbiAocmVmKSB7XG4gICAgdmFyIHJlZnMgPSB0aGlzLmdldFB1YmxpY0luc3RhbmNlKCkucmVmcztcbiAgICBkZWxldGUgcmVmc1tyZWZdO1xuICB9LFxuXG4gIC8qKlxuICAgKiBHZXQgYSB0ZXh0IGRlc2NyaXB0aW9uIG9mIHRoZSBjb21wb25lbnQgdGhhdCBjYW4gYmUgdXNlZCB0byBpZGVudGlmeSBpdFxuICAgKiBpbiBlcnJvciBtZXNzYWdlcy5cbiAgICogQHJldHVybiB7c3RyaW5nfSBUaGUgbmFtZSBvciBudWxsLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGdldE5hbWU6IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdHlwZSA9IHRoaXMuX2N1cnJlbnRFbGVtZW50LnR5cGU7XG4gICAgdmFyIGNvbnN0cnVjdG9yID0gdGhpcy5faW5zdGFuY2UgJiYgdGhpcy5faW5zdGFuY2UuY29uc3RydWN0b3I7XG4gICAgcmV0dXJuIHR5cGUuZGlzcGxheU5hbWUgfHwgY29uc3RydWN0b3IgJiYgY29uc3RydWN0b3IuZGlzcGxheU5hbWUgfHwgdHlwZS5uYW1lIHx8IGNvbnN0cnVjdG9yICYmIGNvbnN0cnVjdG9yLm5hbWUgfHwgbnVsbDtcbiAgfSxcblxuICAvKipcbiAgICogR2V0IHRoZSBwdWJsaWNseSBhY2Nlc3NpYmxlIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgY29tcG9uZW50IC0gaS5lLiB3aGF0XG4gICAqIGlzIGV4cG9zZWQgYnkgcmVmcyBhbmQgcmV0dXJuZWQgYnkgcmVuZGVyLiBDYW4gYmUgbnVsbCBmb3Igc3RhdGVsZXNzXG4gICAqIGNvbXBvbmVudHMuXG4gICAqXG4gICAqIEByZXR1cm4ge1JlYWN0Q29tcG9uZW50fSB0aGUgcHVibGljIGNvbXBvbmVudCBpbnN0YW5jZS5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBnZXRQdWJsaWNJbnN0YW5jZTogZnVuY3Rpb24gKCkge1xuICAgIHZhciBpbnN0ID0gdGhpcy5faW5zdGFuY2U7XG4gICAgaWYgKHRoaXMuX2NvbXBvc2l0ZVR5cGUgPT09IENvbXBvc2l0ZVR5cGVzLlN0YXRlbGVzc0Z1bmN0aW9uYWwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gaW5zdDtcbiAgfSxcblxuICAvLyBTdHViXG4gIF9pbnN0YW50aWF0ZVJlYWN0Q29tcG9uZW50OiBudWxsXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0Q29tcG9zaXRlQ29tcG9uZW50O1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QtZG9tL2xpYi9SZWFjdENvbXBvc2l0ZUNvbXBvbmVudC5qcyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqL1xuXG4vKiBnbG9iYWxzIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXyovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0RE9NQ29tcG9uZW50VHJlZSA9IHJlcXVpcmUoJy4vUmVhY3RET01Db21wb25lbnRUcmVlJyk7XG52YXIgUmVhY3REZWZhdWx0SW5qZWN0aW9uID0gcmVxdWlyZSgnLi9SZWFjdERlZmF1bHRJbmplY3Rpb24nKTtcbnZhciBSZWFjdE1vdW50ID0gcmVxdWlyZSgnLi9SZWFjdE1vdW50Jyk7XG52YXIgUmVhY3RSZWNvbmNpbGVyID0gcmVxdWlyZSgnLi9SZWFjdFJlY29uY2lsZXInKTtcbnZhciBSZWFjdFVwZGF0ZXMgPSByZXF1aXJlKCcuL1JlYWN0VXBkYXRlcycpO1xudmFyIFJlYWN0VmVyc2lvbiA9IHJlcXVpcmUoJy4vUmVhY3RWZXJzaW9uJyk7XG5cbnZhciBmaW5kRE9NTm9kZSA9IHJlcXVpcmUoJy4vZmluZERPTU5vZGUnKTtcbnZhciBnZXRIb3N0Q29tcG9uZW50RnJvbUNvbXBvc2l0ZSA9IHJlcXVpcmUoJy4vZ2V0SG9zdENvbXBvbmVudEZyb21Db21wb3NpdGUnKTtcbnZhciByZW5kZXJTdWJ0cmVlSW50b0NvbnRhaW5lciA9IHJlcXVpcmUoJy4vcmVuZGVyU3VidHJlZUludG9Db250YWluZXInKTtcbnZhciB3YXJuaW5nID0gcmVxdWlyZSgnZmJqcy9saWIvd2FybmluZycpO1xuXG5SZWFjdERlZmF1bHRJbmplY3Rpb24uaW5qZWN0KCk7XG5cbnZhciBSZWFjdERPTSA9IHtcbiAgZmluZERPTU5vZGU6IGZpbmRET01Ob2RlLFxuICByZW5kZXI6IFJlYWN0TW91bnQucmVuZGVyLFxuICB1bm1vdW50Q29tcG9uZW50QXROb2RlOiBSZWFjdE1vdW50LnVubW91bnRDb21wb25lbnRBdE5vZGUsXG4gIHZlcnNpb246IFJlYWN0VmVyc2lvbixcblxuICAvKiBlc2xpbnQtZGlzYWJsZSBjYW1lbGNhc2UgKi9cbiAgdW5zdGFibGVfYmF0Y2hlZFVwZGF0ZXM6IFJlYWN0VXBkYXRlcy5iYXRjaGVkVXBkYXRlcyxcbiAgdW5zdGFibGVfcmVuZGVyU3VidHJlZUludG9Db250YWluZXI6IHJlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyXG4gIC8qIGVzbGludC1lbmFibGUgY2FtZWxjYXNlICovXG59O1xuXG4vLyBJbmplY3QgdGhlIHJ1bnRpbWUgaW50byBhIGRldnRvb2xzIGdsb2JhbCBob29rIHJlZ2FyZGxlc3Mgb2YgYnJvd3Nlci5cbi8vIEFsbG93cyBmb3IgZGVidWdnaW5nIHdoZW4gdGhlIGhvb2sgaXMgaW5qZWN0ZWQgb24gdGhlIHBhZ2UuXG5pZiAodHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXy5pbmplY3QgPT09ICdmdW5jdGlvbicpIHtcbiAgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fLmluamVjdCh7XG4gICAgQ29tcG9uZW50VHJlZToge1xuICAgICAgZ2V0Q2xvc2VzdEluc3RhbmNlRnJvbU5vZGU6IFJlYWN0RE9NQ29tcG9uZW50VHJlZS5nZXRDbG9zZXN0SW5zdGFuY2VGcm9tTm9kZSxcbiAgICAgIGdldE5vZGVGcm9tSW5zdGFuY2U6IGZ1bmN0aW9uIChpbnN0KSB7XG4gICAgICAgIC8vIGluc3QgaXMgYW4gaW50ZXJuYWwgaW5zdGFuY2UgKGJ1dCBjb3VsZCBiZSBhIGNvbXBvc2l0ZSlcbiAgICAgICAgaWYgKGluc3QuX3JlbmRlcmVkQ29tcG9uZW50KSB7XG4gICAgICAgICAgaW5zdCA9IGdldEhvc3RDb21wb25lbnRGcm9tQ29tcG9zaXRlKGluc3QpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpbnN0KSB7XG4gICAgICAgICAgcmV0dXJuIFJlYWN0RE9NQ29tcG9uZW50VHJlZS5nZXROb2RlRnJvbUluc3RhbmNlKGluc3QpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBNb3VudDogUmVhY3RNb3VudCxcbiAgICBSZWNvbmNpbGVyOiBSZWFjdFJlY29uY2lsZXJcbiAgfSk7XG59XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHZhciBFeGVjdXRpb25FbnZpcm9ubWVudCA9IHJlcXVpcmUoJ2ZianMvbGliL0V4ZWN1dGlvbkVudmlyb25tZW50Jyk7XG4gIGlmIChFeGVjdXRpb25FbnZpcm9ubWVudC5jYW5Vc2VET00gJiYgd2luZG93LnRvcCA9PT0gd2luZG93LnNlbGYpIHtcbiAgICAvLyBGaXJzdCBjaGVjayBpZiBkZXZ0b29scyBpcyBub3QgaW5zdGFsbGVkXG4gICAgaWYgKHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAvLyBJZiB3ZSdyZSBpbiBDaHJvbWUgb3IgRmlyZWZveCwgcHJvdmlkZSBhIGRvd25sb2FkIGxpbmsgaWYgbm90IGluc3RhbGxlZC5cbiAgICAgIGlmIChuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoJ0Nocm9tZScpID4gLTEgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCdFZGdlJykgPT09IC0xIHx8IG5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZignRmlyZWZveCcpID4gLTEpIHtcbiAgICAgICAgLy8gRmlyZWZveCBkb2VzIG5vdCBoYXZlIHRoZSBpc3N1ZSB3aXRoIGRldnRvb2xzIGxvYWRlZCBvdmVyIGZpbGU6Ly9cbiAgICAgICAgdmFyIHNob3dGaWxlVXJsTWVzc2FnZSA9IHdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbC5pbmRleE9mKCdodHRwJykgPT09IC0xICYmIG5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZignRmlyZWZveCcpID09PSAtMTtcbiAgICAgICAgY29uc29sZS5kZWJ1ZygnRG93bmxvYWQgdGhlIFJlYWN0IERldlRvb2xzICcgKyAoc2hvd0ZpbGVVcmxNZXNzYWdlID8gJ2FuZCB1c2UgYW4gSFRUUCBzZXJ2ZXIgKGluc3RlYWQgb2YgYSBmaWxlOiBVUkwpICcgOiAnJykgKyAnZm9yIGEgYmV0dGVyIGRldmVsb3BtZW50IGV4cGVyaWVuY2U6ICcgKyAnaHR0cHM6Ly9mYi5tZS9yZWFjdC1kZXZ0b29scycpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciB0ZXN0RnVuYyA9IGZ1bmN0aW9uIHRlc3RGbigpIHt9O1xuICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKCh0ZXN0RnVuYy5uYW1lIHx8IHRlc3RGdW5jLnRvU3RyaW5nKCkpLmluZGV4T2YoJ3Rlc3RGbicpICE9PSAtMSwgXCJJdCBsb29rcyBsaWtlIHlvdSdyZSB1c2luZyBhIG1pbmlmaWVkIGNvcHkgb2YgdGhlIGRldmVsb3BtZW50IGJ1aWxkIFwiICsgJ29mIFJlYWN0LiBXaGVuIGRlcGxveWluZyBSZWFjdCBhcHBzIHRvIHByb2R1Y3Rpb24sIG1ha2Ugc3VyZSB0byB1c2UgJyArICd0aGUgcHJvZHVjdGlvbiBidWlsZCB3aGljaCBza2lwcyBkZXZlbG9wbWVudCB3YXJuaW5ncyBhbmQgaXMgZmFzdGVyLiAnICsgJ1NlZSBodHRwczovL2ZiLm1lL3JlYWN0LW1pbmlmaWNhdGlvbiBmb3IgbW9yZSBkZXRhaWxzLicpIDogdm9pZCAwO1xuXG4gICAgLy8gSWYgd2UncmUgaW4gSUU4LCBjaGVjayB0byBzZWUgaWYgd2UgYXJlIGluIGNvbXBhdGliaWxpdHkgbW9kZSBhbmQgcHJvdmlkZVxuICAgIC8vIGluZm9ybWF0aW9uIG9uIHByZXZlbnRpbmcgY29tcGF0aWJpbGl0eSBtb2RlXG4gICAgdmFyIGllQ29tcGF0aWJpbGl0eU1vZGUgPSBkb2N1bWVudC5kb2N1bWVudE1vZGUgJiYgZG9jdW1lbnQuZG9jdW1lbnRNb2RlIDwgODtcblxuICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKCFpZUNvbXBhdGliaWxpdHlNb2RlLCAnSW50ZXJuZXQgRXhwbG9yZXIgaXMgcnVubmluZyBpbiBjb21wYXRpYmlsaXR5IG1vZGU7IHBsZWFzZSBhZGQgdGhlICcgKyAnZm9sbG93aW5nIHRhZyB0byB5b3VyIEhUTUwgdG8gcHJldmVudCB0aGlzIGZyb20gaGFwcGVuaW5nOiAnICsgJzxtZXRhIGh0dHAtZXF1aXY9XCJYLVVBLUNvbXBhdGlibGVcIiBjb250ZW50PVwiSUU9ZWRnZVwiIC8+JykgOiB2b2lkIDA7XG5cbiAgICB2YXIgZXhwZWN0ZWRGZWF0dXJlcyA9IFtcbiAgICAvLyBzaGltc1xuICAgIEFycmF5LmlzQXJyYXksIEFycmF5LnByb3RvdHlwZS5ldmVyeSwgQXJyYXkucHJvdG90eXBlLmZvckVhY2gsIEFycmF5LnByb3RvdHlwZS5pbmRleE9mLCBBcnJheS5wcm90b3R5cGUubWFwLCBEYXRlLm5vdywgRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQsIE9iamVjdC5rZXlzLCBTdHJpbmcucHJvdG90eXBlLnRyaW1dO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBleHBlY3RlZEZlYXR1cmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoIWV4cGVjdGVkRmVhdHVyZXNbaV0pIHtcbiAgICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcoZmFsc2UsICdPbmUgb3IgbW9yZSBFUzUgc2hpbXMgZXhwZWN0ZWQgYnkgUmVhY3QgYXJlIG5vdCBhdmFpbGFibGU6ICcgKyAnaHR0cHM6Ly9mYi5tZS9yZWFjdC13YXJuaW5nLXBvbHlmaWxscycpIDogdm9pZCAwO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgdmFyIFJlYWN0SW5zdHJ1bWVudGF0aW9uID0gcmVxdWlyZSgnLi9SZWFjdEluc3RydW1lbnRhdGlvbicpO1xuICB2YXIgUmVhY3RET01Vbmtub3duUHJvcGVydHlIb29rID0gcmVxdWlyZSgnLi9SZWFjdERPTVVua25vd25Qcm9wZXJ0eUhvb2snKTtcbiAgdmFyIFJlYWN0RE9NTnVsbElucHV0VmFsdWVQcm9wSG9vayA9IHJlcXVpcmUoJy4vUmVhY3RET01OdWxsSW5wdXRWYWx1ZVByb3BIb29rJyk7XG4gIHZhciBSZWFjdERPTUludmFsaWRBUklBSG9vayA9IHJlcXVpcmUoJy4vUmVhY3RET01JbnZhbGlkQVJJQUhvb2snKTtcblxuICBSZWFjdEluc3RydW1lbnRhdGlvbi5kZWJ1Z1Rvb2wuYWRkSG9vayhSZWFjdERPTVVua25vd25Qcm9wZXJ0eUhvb2spO1xuICBSZWFjdEluc3RydW1lbnRhdGlvbi5kZWJ1Z1Rvb2wuYWRkSG9vayhSZWFjdERPTU51bGxJbnB1dFZhbHVlUHJvcEhvb2spO1xuICBSZWFjdEluc3RydW1lbnRhdGlvbi5kZWJ1Z1Rvb2wuYWRkSG9vayhSZWFjdERPTUludmFsaWRBUklBSG9vayk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RET007XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1kb20vbGliL1JlYWN0RE9NLmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cbi8qIGdsb2JhbCBoYXNPd25Qcm9wZXJ0eTp0cnVlICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIF9wcm9kSW52YXJpYW50ID0gcmVxdWlyZSgnLi9yZWFjdFByb2RJbnZhcmlhbnQnKSxcbiAgICBfYXNzaWduID0gcmVxdWlyZSgnb2JqZWN0LWFzc2lnbicpO1xuXG52YXIgQXV0b0ZvY3VzVXRpbHMgPSByZXF1aXJlKCcuL0F1dG9Gb2N1c1V0aWxzJyk7XG52YXIgQ1NTUHJvcGVydHlPcGVyYXRpb25zID0gcmVxdWlyZSgnLi9DU1NQcm9wZXJ0eU9wZXJhdGlvbnMnKTtcbnZhciBET01MYXp5VHJlZSA9IHJlcXVpcmUoJy4vRE9NTGF6eVRyZWUnKTtcbnZhciBET01OYW1lc3BhY2VzID0gcmVxdWlyZSgnLi9ET01OYW1lc3BhY2VzJyk7XG52YXIgRE9NUHJvcGVydHkgPSByZXF1aXJlKCcuL0RPTVByb3BlcnR5Jyk7XG52YXIgRE9NUHJvcGVydHlPcGVyYXRpb25zID0gcmVxdWlyZSgnLi9ET01Qcm9wZXJ0eU9wZXJhdGlvbnMnKTtcbnZhciBFdmVudFBsdWdpbkh1YiA9IHJlcXVpcmUoJy4vRXZlbnRQbHVnaW5IdWInKTtcbnZhciBFdmVudFBsdWdpblJlZ2lzdHJ5ID0gcmVxdWlyZSgnLi9FdmVudFBsdWdpblJlZ2lzdHJ5Jyk7XG52YXIgUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnLi9SZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXInKTtcbnZhciBSZWFjdERPTUNvbXBvbmVudEZsYWdzID0gcmVxdWlyZSgnLi9SZWFjdERPTUNvbXBvbmVudEZsYWdzJyk7XG52YXIgUmVhY3RET01Db21wb25lbnRUcmVlID0gcmVxdWlyZSgnLi9SZWFjdERPTUNvbXBvbmVudFRyZWUnKTtcbnZhciBSZWFjdERPTUlucHV0ID0gcmVxdWlyZSgnLi9SZWFjdERPTUlucHV0Jyk7XG52YXIgUmVhY3RET01PcHRpb24gPSByZXF1aXJlKCcuL1JlYWN0RE9NT3B0aW9uJyk7XG52YXIgUmVhY3RET01TZWxlY3QgPSByZXF1aXJlKCcuL1JlYWN0RE9NU2VsZWN0Jyk7XG52YXIgUmVhY3RET01UZXh0YXJlYSA9IHJlcXVpcmUoJy4vUmVhY3RET01UZXh0YXJlYScpO1xudmFyIFJlYWN0SW5zdHJ1bWVudGF0aW9uID0gcmVxdWlyZSgnLi9SZWFjdEluc3RydW1lbnRhdGlvbicpO1xudmFyIFJlYWN0TXVsdGlDaGlsZCA9IHJlcXVpcmUoJy4vUmVhY3RNdWx0aUNoaWxkJyk7XG52YXIgUmVhY3RTZXJ2ZXJSZW5kZXJpbmdUcmFuc2FjdGlvbiA9IHJlcXVpcmUoJy4vUmVhY3RTZXJ2ZXJSZW5kZXJpbmdUcmFuc2FjdGlvbicpO1xuXG52YXIgZW1wdHlGdW5jdGlvbiA9IHJlcXVpcmUoJ2ZianMvbGliL2VtcHR5RnVuY3Rpb24nKTtcbnZhciBlc2NhcGVUZXh0Q29udGVudEZvckJyb3dzZXIgPSByZXF1aXJlKCcuL2VzY2FwZVRleHRDb250ZW50Rm9yQnJvd3NlcicpO1xudmFyIGludmFyaWFudCA9IHJlcXVpcmUoJ2ZianMvbGliL2ludmFyaWFudCcpO1xudmFyIGlzRXZlbnRTdXBwb3J0ZWQgPSByZXF1aXJlKCcuL2lzRXZlbnRTdXBwb3J0ZWQnKTtcbnZhciBzaGFsbG93RXF1YWwgPSByZXF1aXJlKCdmYmpzL2xpYi9zaGFsbG93RXF1YWwnKTtcbnZhciBpbnB1dFZhbHVlVHJhY2tpbmcgPSByZXF1aXJlKCcuL2lucHV0VmFsdWVUcmFja2luZycpO1xudmFyIHZhbGlkYXRlRE9NTmVzdGluZyA9IHJlcXVpcmUoJy4vdmFsaWRhdGVET01OZXN0aW5nJyk7XG52YXIgd2FybmluZyA9IHJlcXVpcmUoJ2ZianMvbGliL3dhcm5pbmcnKTtcblxudmFyIEZsYWdzID0gUmVhY3RET01Db21wb25lbnRGbGFncztcbnZhciBkZWxldGVMaXN0ZW5lciA9IEV2ZW50UGx1Z2luSHViLmRlbGV0ZUxpc3RlbmVyO1xudmFyIGdldE5vZGUgPSBSZWFjdERPTUNvbXBvbmVudFRyZWUuZ2V0Tm9kZUZyb21JbnN0YW5jZTtcbnZhciBsaXN0ZW5UbyA9IFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlci5saXN0ZW5UbztcbnZhciByZWdpc3RyYXRpb25OYW1lTW9kdWxlcyA9IEV2ZW50UGx1Z2luUmVnaXN0cnkucmVnaXN0cmF0aW9uTmFtZU1vZHVsZXM7XG5cbi8vIEZvciBxdWlja2x5IG1hdGNoaW5nIGNoaWxkcmVuIHR5cGUsIHRvIHRlc3QgaWYgY2FuIGJlIHRyZWF0ZWQgYXMgY29udGVudC5cbnZhciBDT05URU5UX1RZUEVTID0geyBzdHJpbmc6IHRydWUsIG51bWJlcjogdHJ1ZSB9O1xuXG52YXIgU1RZTEUgPSAnc3R5bGUnO1xudmFyIEhUTUwgPSAnX19odG1sJztcbnZhciBSRVNFUlZFRF9QUk9QUyA9IHtcbiAgY2hpbGRyZW46IG51bGwsXG4gIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MOiBudWxsLFxuICBzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmc6IG51bGxcbn07XG5cbi8vIE5vZGUgdHlwZSBmb3IgZG9jdW1lbnQgZnJhZ21lbnRzIChOb2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREUpLlxudmFyIERPQ19GUkFHTUVOVF9UWVBFID0gMTE7XG5cbmZ1bmN0aW9uIGdldERlY2xhcmF0aW9uRXJyb3JBZGRlbmR1bShpbnRlcm5hbEluc3RhbmNlKSB7XG4gIGlmIChpbnRlcm5hbEluc3RhbmNlKSB7XG4gICAgdmFyIG93bmVyID0gaW50ZXJuYWxJbnN0YW5jZS5fY3VycmVudEVsZW1lbnQuX293bmVyIHx8IG51bGw7XG4gICAgaWYgKG93bmVyKSB7XG4gICAgICB2YXIgbmFtZSA9IG93bmVyLmdldE5hbWUoKTtcbiAgICAgIGlmIChuYW1lKSB7XG4gICAgICAgIHJldHVybiAnIFRoaXMgRE9NIG5vZGUgd2FzIHJlbmRlcmVkIGJ5IGAnICsgbmFtZSArICdgLic7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiAnJztcbn1cblxuZnVuY3Rpb24gZnJpZW5kbHlTdHJpbmdpZnkob2JqKSB7XG4gIGlmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0Jykge1xuICAgIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcbiAgICAgIHJldHVybiAnWycgKyBvYmoubWFwKGZyaWVuZGx5U3RyaW5naWZ5KS5qb2luKCcsICcpICsgJ10nO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgcGFpcnMgPSBbXTtcbiAgICAgIGZvciAodmFyIGtleSBpbiBvYmopIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkpIHtcbiAgICAgICAgICB2YXIga2V5RXNjYXBlZCA9IC9eW2EteiRfXVtcXHckX10qJC9pLnRlc3Qoa2V5KSA/IGtleSA6IEpTT04uc3RyaW5naWZ5KGtleSk7XG4gICAgICAgICAgcGFpcnMucHVzaChrZXlFc2NhcGVkICsgJzogJyArIGZyaWVuZGx5U3RyaW5naWZ5KG9ialtrZXldKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiAneycgKyBwYWlycy5qb2luKCcsICcpICsgJ30nO1xuICAgIH1cbiAgfSBlbHNlIGlmICh0eXBlb2Ygb2JqID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShvYmopO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBvYmogPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gJ1tmdW5jdGlvbiBvYmplY3RdJztcbiAgfVxuICAvLyBEaWZmZXJzIGZyb20gSlNPTi5zdHJpbmdpZnkgaW4gdGhhdCB1bmRlZmluZWQgYmVjYXVzZSB1bmRlZmluZWQgYW5kIHRoYXRcbiAgLy8gaW5mIGFuZCBuYW4gZG9uJ3QgYmVjb21lIG51bGxcbiAgcmV0dXJuIFN0cmluZyhvYmopO1xufVxuXG52YXIgc3R5bGVNdXRhdGlvbldhcm5pbmcgPSB7fTtcblxuZnVuY3Rpb24gY2hlY2tBbmRXYXJuRm9yTXV0YXRlZFN0eWxlKHN0eWxlMSwgc3R5bGUyLCBjb21wb25lbnQpIHtcbiAgaWYgKHN0eWxlMSA9PSBudWxsIHx8IHN0eWxlMiA9PSBudWxsKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChzaGFsbG93RXF1YWwoc3R5bGUxLCBzdHlsZTIpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIGNvbXBvbmVudE5hbWUgPSBjb21wb25lbnQuX3RhZztcbiAgdmFyIG93bmVyID0gY29tcG9uZW50Ll9jdXJyZW50RWxlbWVudC5fb3duZXI7XG4gIHZhciBvd25lck5hbWU7XG4gIGlmIChvd25lcikge1xuICAgIG93bmVyTmFtZSA9IG93bmVyLmdldE5hbWUoKTtcbiAgfVxuXG4gIHZhciBoYXNoID0gb3duZXJOYW1lICsgJ3wnICsgY29tcG9uZW50TmFtZTtcblxuICBpZiAoc3R5bGVNdXRhdGlvbldhcm5pbmcuaGFzT3duUHJvcGVydHkoaGFzaCkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBzdHlsZU11dGF0aW9uV2FybmluZ1toYXNoXSA9IHRydWU7XG5cbiAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcoZmFsc2UsICdgJXNgIHdhcyBwYXNzZWQgYSBzdHlsZSBvYmplY3QgdGhhdCBoYXMgcHJldmlvdXNseSBiZWVuIG11dGF0ZWQuICcgKyAnTXV0YXRpbmcgYHN0eWxlYCBpcyBkZXByZWNhdGVkLiBDb25zaWRlciBjbG9uaW5nIGl0IGJlZm9yZWhhbmQuIENoZWNrICcgKyAndGhlIGByZW5kZXJgICVzLiBQcmV2aW91cyBzdHlsZTogJXMuIE11dGF0ZWQgc3R5bGU6ICVzLicsIGNvbXBvbmVudE5hbWUsIG93bmVyID8gJ29mIGAnICsgb3duZXJOYW1lICsgJ2AnIDogJ3VzaW5nIDwnICsgY29tcG9uZW50TmFtZSArICc+JywgZnJpZW5kbHlTdHJpbmdpZnkoc3R5bGUxKSwgZnJpZW5kbHlTdHJpbmdpZnkoc3R5bGUyKSkgOiB2b2lkIDA7XG59XG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IGNvbXBvbmVudFxuICogQHBhcmFtIHs/b2JqZWN0fSBwcm9wc1xuICovXG5mdW5jdGlvbiBhc3NlcnRWYWxpZFByb3BzKGNvbXBvbmVudCwgcHJvcHMpIHtcbiAgaWYgKCFwcm9wcykge1xuICAgIHJldHVybjtcbiAgfVxuICAvLyBOb3RlIHRoZSB1c2Ugb2YgYD09YCB3aGljaCBjaGVja3MgZm9yIG51bGwgb3IgdW5kZWZpbmVkLlxuICBpZiAodm9pZEVsZW1lbnRUYWdzW2NvbXBvbmVudC5fdGFnXSkge1xuICAgICEocHJvcHMuY2hpbGRyZW4gPT0gbnVsbCAmJiBwcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTCA9PSBudWxsKSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICclcyBpcyBhIHZvaWQgZWxlbWVudCB0YWcgYW5kIG11c3QgbmVpdGhlciBoYXZlIGBjaGlsZHJlbmAgbm9yIHVzZSBgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxgLiVzJywgY29tcG9uZW50Ll90YWcsIGNvbXBvbmVudC5fY3VycmVudEVsZW1lbnQuX293bmVyID8gJyBDaGVjayB0aGUgcmVuZGVyIG1ldGhvZCBvZiAnICsgY29tcG9uZW50Ll9jdXJyZW50RWxlbWVudC5fb3duZXIuZ2V0TmFtZSgpICsgJy4nIDogJycpIDogX3Byb2RJbnZhcmlhbnQoJzEzNycsIGNvbXBvbmVudC5fdGFnLCBjb21wb25lbnQuX2N1cnJlbnRFbGVtZW50Ll9vd25lciA/ICcgQ2hlY2sgdGhlIHJlbmRlciBtZXRob2Qgb2YgJyArIGNvbXBvbmVudC5fY3VycmVudEVsZW1lbnQuX293bmVyLmdldE5hbWUoKSArICcuJyA6ICcnKSA6IHZvaWQgMDtcbiAgfVxuICBpZiAocHJvcHMuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwgIT0gbnVsbCkge1xuICAgICEocHJvcHMuY2hpbGRyZW4gPT0gbnVsbCkgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAnQ2FuIG9ubHkgc2V0IG9uZSBvZiBgY2hpbGRyZW5gIG9yIGBwcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTGAuJykgOiBfcHJvZEludmFyaWFudCgnNjAnKSA6IHZvaWQgMDtcbiAgICAhKHR5cGVvZiBwcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTCA9PT0gJ29iamVjdCcgJiYgSFRNTCBpbiBwcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTCkgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAnYHByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MYCBtdXN0IGJlIGluIHRoZSBmb3JtIGB7X19odG1sOiAuLi59YC4gUGxlYXNlIHZpc2l0IGh0dHBzOi8vZmIubWUvcmVhY3QtaW52YXJpYW50LWRhbmdlcm91c2x5LXNldC1pbm5lci1odG1sIGZvciBtb3JlIGluZm9ybWF0aW9uLicpIDogX3Byb2RJbnZhcmlhbnQoJzYxJykgOiB2b2lkIDA7XG4gIH1cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyhwcm9wcy5pbm5lckhUTUwgPT0gbnVsbCwgJ0RpcmVjdGx5IHNldHRpbmcgcHJvcGVydHkgYGlubmVySFRNTGAgaXMgbm90IHBlcm1pdHRlZC4gJyArICdGb3IgbW9yZSBpbmZvcm1hdGlvbiwgbG9va3VwIGRvY3VtZW50YXRpb24gb24gYGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MYC4nKSA6IHZvaWQgMDtcbiAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyhwcm9wcy5zdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmcgfHwgIXByb3BzLmNvbnRlbnRFZGl0YWJsZSB8fCBwcm9wcy5jaGlsZHJlbiA9PSBudWxsLCAnQSBjb21wb25lbnQgaXMgYGNvbnRlbnRFZGl0YWJsZWAgYW5kIGNvbnRhaW5zIGBjaGlsZHJlbmAgbWFuYWdlZCBieSAnICsgJ1JlYWN0LiBJdCBpcyBub3cgeW91ciByZXNwb25zaWJpbGl0eSB0byBndWFyYW50ZWUgdGhhdCBub25lIG9mICcgKyAndGhvc2Ugbm9kZXMgYXJlIHVuZXhwZWN0ZWRseSBtb2RpZmllZCBvciBkdXBsaWNhdGVkLiBUaGlzIGlzICcgKyAncHJvYmFibHkgbm90IGludGVudGlvbmFsLicpIDogdm9pZCAwO1xuICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKHByb3BzLm9uRm9jdXNJbiA9PSBudWxsICYmIHByb3BzLm9uRm9jdXNPdXQgPT0gbnVsbCwgJ1JlYWN0IHVzZXMgb25Gb2N1cyBhbmQgb25CbHVyIGluc3RlYWQgb2Ygb25Gb2N1c0luIGFuZCBvbkZvY3VzT3V0LiAnICsgJ0FsbCBSZWFjdCBldmVudHMgYXJlIG5vcm1hbGl6ZWQgdG8gYnViYmxlLCBzbyBvbkZvY3VzSW4gYW5kIG9uRm9jdXNPdXQgJyArICdhcmUgbm90IG5lZWRlZC9zdXBwb3J0ZWQgYnkgUmVhY3QuJykgOiB2b2lkIDA7XG4gIH1cbiAgIShwcm9wcy5zdHlsZSA9PSBudWxsIHx8IHR5cGVvZiBwcm9wcy5zdHlsZSA9PT0gJ29iamVjdCcpID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IGludmFyaWFudChmYWxzZSwgJ1RoZSBgc3R5bGVgIHByb3AgZXhwZWN0cyBhIG1hcHBpbmcgZnJvbSBzdHlsZSBwcm9wZXJ0aWVzIHRvIHZhbHVlcywgbm90IGEgc3RyaW5nLiBGb3IgZXhhbXBsZSwgc3R5bGU9e3ttYXJnaW5SaWdodDogc3BhY2luZyArIFxcJ2VtXFwnfX0gd2hlbiB1c2luZyBKU1guJXMnLCBnZXREZWNsYXJhdGlvbkVycm9yQWRkZW5kdW0oY29tcG9uZW50KSkgOiBfcHJvZEludmFyaWFudCgnNjInLCBnZXREZWNsYXJhdGlvbkVycm9yQWRkZW5kdW0oY29tcG9uZW50KSkgOiB2b2lkIDA7XG59XG5cbmZ1bmN0aW9uIGVucXVldWVQdXRMaXN0ZW5lcihpbnN0LCByZWdpc3RyYXRpb25OYW1lLCBsaXN0ZW5lciwgdHJhbnNhY3Rpb24pIHtcbiAgaWYgKHRyYW5zYWN0aW9uIGluc3RhbmNlb2YgUmVhY3RTZXJ2ZXJSZW5kZXJpbmdUcmFuc2FjdGlvbikge1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIC8vIElFOCBoYXMgbm8gQVBJIGZvciBldmVudCBjYXB0dXJpbmcgYW5kIHRoZSBgb25TY3JvbGxgIGV2ZW50IGRvZXNuJ3RcbiAgICAvLyBidWJibGUuXG4gICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcocmVnaXN0cmF0aW9uTmFtZSAhPT0gJ29uU2Nyb2xsJyB8fCBpc0V2ZW50U3VwcG9ydGVkKCdzY3JvbGwnLCB0cnVlKSwgXCJUaGlzIGJyb3dzZXIgZG9lc24ndCBzdXBwb3J0IHRoZSBgb25TY3JvbGxgIGV2ZW50XCIpIDogdm9pZCAwO1xuICB9XG4gIHZhciBjb250YWluZXJJbmZvID0gaW5zdC5faG9zdENvbnRhaW5lckluZm87XG4gIHZhciBpc0RvY3VtZW50RnJhZ21lbnQgPSBjb250YWluZXJJbmZvLl9ub2RlICYmIGNvbnRhaW5lckluZm8uX25vZGUubm9kZVR5cGUgPT09IERPQ19GUkFHTUVOVF9UWVBFO1xuICB2YXIgZG9jID0gaXNEb2N1bWVudEZyYWdtZW50ID8gY29udGFpbmVySW5mby5fbm9kZSA6IGNvbnRhaW5lckluZm8uX293bmVyRG9jdW1lbnQ7XG4gIGxpc3RlblRvKHJlZ2lzdHJhdGlvbk5hbWUsIGRvYyk7XG4gIHRyYW5zYWN0aW9uLmdldFJlYWN0TW91bnRSZWFkeSgpLmVucXVldWUocHV0TGlzdGVuZXIsIHtcbiAgICBpbnN0OiBpbnN0LFxuICAgIHJlZ2lzdHJhdGlvbk5hbWU6IHJlZ2lzdHJhdGlvbk5hbWUsXG4gICAgbGlzdGVuZXI6IGxpc3RlbmVyXG4gIH0pO1xufVxuXG5mdW5jdGlvbiBwdXRMaXN0ZW5lcigpIHtcbiAgdmFyIGxpc3RlbmVyVG9QdXQgPSB0aGlzO1xuICBFdmVudFBsdWdpbkh1Yi5wdXRMaXN0ZW5lcihsaXN0ZW5lclRvUHV0Lmluc3QsIGxpc3RlbmVyVG9QdXQucmVnaXN0cmF0aW9uTmFtZSwgbGlzdGVuZXJUb1B1dC5saXN0ZW5lcik7XG59XG5cbmZ1bmN0aW9uIGlucHV0UG9zdE1vdW50KCkge1xuICB2YXIgaW5zdCA9IHRoaXM7XG4gIFJlYWN0RE9NSW5wdXQucG9zdE1vdW50V3JhcHBlcihpbnN0KTtcbn1cblxuZnVuY3Rpb24gdGV4dGFyZWFQb3N0TW91bnQoKSB7XG4gIHZhciBpbnN0ID0gdGhpcztcbiAgUmVhY3RET01UZXh0YXJlYS5wb3N0TW91bnRXcmFwcGVyKGluc3QpO1xufVxuXG5mdW5jdGlvbiBvcHRpb25Qb3N0TW91bnQoKSB7XG4gIHZhciBpbnN0ID0gdGhpcztcbiAgUmVhY3RET01PcHRpb24ucG9zdE1vdW50V3JhcHBlcihpbnN0KTtcbn1cblxudmFyIHNldEFuZFZhbGlkYXRlQ29udGVudENoaWxkRGV2ID0gZW1wdHlGdW5jdGlvbjtcbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHNldEFuZFZhbGlkYXRlQ29udGVudENoaWxkRGV2ID0gZnVuY3Rpb24gKGNvbnRlbnQpIHtcbiAgICB2YXIgaGFzRXhpc3RpbmdDb250ZW50ID0gdGhpcy5fY29udGVudERlYnVnSUQgIT0gbnVsbDtcbiAgICB2YXIgZGVidWdJRCA9IHRoaXMuX2RlYnVnSUQ7XG4gICAgLy8gVGhpcyBJRCByZXByZXNlbnRzIHRoZSBpbmxpbmVkIGNoaWxkIHRoYXQgaGFzIG5vIGJhY2tpbmcgaW5zdGFuY2U6XG4gICAgdmFyIGNvbnRlbnREZWJ1Z0lEID0gLWRlYnVnSUQ7XG5cbiAgICBpZiAoY29udGVudCA9PSBudWxsKSB7XG4gICAgICBpZiAoaGFzRXhpc3RpbmdDb250ZW50KSB7XG4gICAgICAgIFJlYWN0SW5zdHJ1bWVudGF0aW9uLmRlYnVnVG9vbC5vblVubW91bnRDb21wb25lbnQodGhpcy5fY29udGVudERlYnVnSUQpO1xuICAgICAgfVxuICAgICAgdGhpcy5fY29udGVudERlYnVnSUQgPSBudWxsO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhbGlkYXRlRE9NTmVzdGluZyhudWxsLCBTdHJpbmcoY29udGVudCksIHRoaXMsIHRoaXMuX2FuY2VzdG9ySW5mbyk7XG4gICAgdGhpcy5fY29udGVudERlYnVnSUQgPSBjb250ZW50RGVidWdJRDtcbiAgICBpZiAoaGFzRXhpc3RpbmdDb250ZW50KSB7XG4gICAgICBSZWFjdEluc3RydW1lbnRhdGlvbi5kZWJ1Z1Rvb2wub25CZWZvcmVVcGRhdGVDb21wb25lbnQoY29udGVudERlYnVnSUQsIGNvbnRlbnQpO1xuICAgICAgUmVhY3RJbnN0cnVtZW50YXRpb24uZGVidWdUb29sLm9uVXBkYXRlQ29tcG9uZW50KGNvbnRlbnREZWJ1Z0lEKTtcbiAgICB9IGVsc2Uge1xuICAgICAgUmVhY3RJbnN0cnVtZW50YXRpb24uZGVidWdUb29sLm9uQmVmb3JlTW91bnRDb21wb25lbnQoY29udGVudERlYnVnSUQsIGNvbnRlbnQsIGRlYnVnSUQpO1xuICAgICAgUmVhY3RJbnN0cnVtZW50YXRpb24uZGVidWdUb29sLm9uTW91bnRDb21wb25lbnQoY29udGVudERlYnVnSUQpO1xuICAgICAgUmVhY3RJbnN0cnVtZW50YXRpb24uZGVidWdUb29sLm9uU2V0Q2hpbGRyZW4oZGVidWdJRCwgW2NvbnRlbnREZWJ1Z0lEXSk7XG4gICAgfVxuICB9O1xufVxuXG4vLyBUaGVyZSBhcmUgc28gbWFueSBtZWRpYSBldmVudHMsIGl0IG1ha2VzIHNlbnNlIHRvIGp1c3Rcbi8vIG1haW50YWluIGEgbGlzdCByYXRoZXIgdGhhbiBjcmVhdGUgYSBgdHJhcEJ1YmJsZWRFdmVudGAgZm9yIGVhY2hcbnZhciBtZWRpYUV2ZW50cyA9IHtcbiAgdG9wQWJvcnQ6ICdhYm9ydCcsXG4gIHRvcENhblBsYXk6ICdjYW5wbGF5JyxcbiAgdG9wQ2FuUGxheVRocm91Z2g6ICdjYW5wbGF5dGhyb3VnaCcsXG4gIHRvcER1cmF0aW9uQ2hhbmdlOiAnZHVyYXRpb25jaGFuZ2UnLFxuICB0b3BFbXB0aWVkOiAnZW1wdGllZCcsXG4gIHRvcEVuY3J5cHRlZDogJ2VuY3J5cHRlZCcsXG4gIHRvcEVuZGVkOiAnZW5kZWQnLFxuICB0b3BFcnJvcjogJ2Vycm9yJyxcbiAgdG9wTG9hZGVkRGF0YTogJ2xvYWRlZGRhdGEnLFxuICB0b3BMb2FkZWRNZXRhZGF0YTogJ2xvYWRlZG1ldGFkYXRhJyxcbiAgdG9wTG9hZFN0YXJ0OiAnbG9hZHN0YXJ0JyxcbiAgdG9wUGF1c2U6ICdwYXVzZScsXG4gIHRvcFBsYXk6ICdwbGF5JyxcbiAgdG9wUGxheWluZzogJ3BsYXlpbmcnLFxuICB0b3BQcm9ncmVzczogJ3Byb2dyZXNzJyxcbiAgdG9wUmF0ZUNoYW5nZTogJ3JhdGVjaGFuZ2UnLFxuICB0b3BTZWVrZWQ6ICdzZWVrZWQnLFxuICB0b3BTZWVraW5nOiAnc2Vla2luZycsXG4gIHRvcFN0YWxsZWQ6ICdzdGFsbGVkJyxcbiAgdG9wU3VzcGVuZDogJ3N1c3BlbmQnLFxuICB0b3BUaW1lVXBkYXRlOiAndGltZXVwZGF0ZScsXG4gIHRvcFZvbHVtZUNoYW5nZTogJ3ZvbHVtZWNoYW5nZScsXG4gIHRvcFdhaXRpbmc6ICd3YWl0aW5nJ1xufTtcblxuZnVuY3Rpb24gdHJhY2tJbnB1dFZhbHVlKCkge1xuICBpbnB1dFZhbHVlVHJhY2tpbmcudHJhY2sodGhpcyk7XG59XG5cbmZ1bmN0aW9uIHRyYXBCdWJibGVkRXZlbnRzTG9jYWwoKSB7XG4gIHZhciBpbnN0ID0gdGhpcztcbiAgLy8gSWYgYSBjb21wb25lbnQgcmVuZGVycyB0byBudWxsIG9yIGlmIGFub3RoZXIgY29tcG9uZW50IGZhdGFscyBhbmQgY2F1c2VzXG4gIC8vIHRoZSBzdGF0ZSBvZiB0aGUgdHJlZSB0byBiZSBjb3JydXB0ZWQsIGBub2RlYCBoZXJlIGNhbiBiZSBudWxsLlxuICAhaW5zdC5fcm9vdE5vZGVJRCA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICdNdXN0IGJlIG1vdW50ZWQgdG8gdHJhcCBldmVudHMnKSA6IF9wcm9kSW52YXJpYW50KCc2MycpIDogdm9pZCAwO1xuICB2YXIgbm9kZSA9IGdldE5vZGUoaW5zdCk7XG4gICFub2RlID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IGludmFyaWFudChmYWxzZSwgJ3RyYXBCdWJibGVkRXZlbnQoLi4uKTogUmVxdWlyZXMgbm9kZSB0byBiZSByZW5kZXJlZC4nKSA6IF9wcm9kSW52YXJpYW50KCc2NCcpIDogdm9pZCAwO1xuXG4gIHN3aXRjaCAoaW5zdC5fdGFnKSB7XG4gICAgY2FzZSAnaWZyYW1lJzpcbiAgICBjYXNlICdvYmplY3QnOlxuICAgICAgaW5zdC5fd3JhcHBlclN0YXRlLmxpc3RlbmVycyA9IFtSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXIudHJhcEJ1YmJsZWRFdmVudCgndG9wTG9hZCcsICdsb2FkJywgbm9kZSldO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAndmlkZW8nOlxuICAgIGNhc2UgJ2F1ZGlvJzpcbiAgICAgIGluc3QuX3dyYXBwZXJTdGF0ZS5saXN0ZW5lcnMgPSBbXTtcbiAgICAgIC8vIENyZWF0ZSBsaXN0ZW5lciBmb3IgZWFjaCBtZWRpYSBldmVudFxuICAgICAgZm9yICh2YXIgZXZlbnQgaW4gbWVkaWFFdmVudHMpIHtcbiAgICAgICAgaWYgKG1lZGlhRXZlbnRzLmhhc093blByb3BlcnR5KGV2ZW50KSkge1xuICAgICAgICAgIGluc3QuX3dyYXBwZXJTdGF0ZS5saXN0ZW5lcnMucHVzaChSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXIudHJhcEJ1YmJsZWRFdmVudChldmVudCwgbWVkaWFFdmVudHNbZXZlbnRdLCBub2RlKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3NvdXJjZSc6XG4gICAgICBpbnN0Ll93cmFwcGVyU3RhdGUubGlzdGVuZXJzID0gW1JlYWN0QnJvd3NlckV2ZW50RW1pdHRlci50cmFwQnViYmxlZEV2ZW50KCd0b3BFcnJvcicsICdlcnJvcicsIG5vZGUpXTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2ltZyc6XG4gICAgICBpbnN0Ll93cmFwcGVyU3RhdGUubGlzdGVuZXJzID0gW1JlYWN0QnJvd3NlckV2ZW50RW1pdHRlci50cmFwQnViYmxlZEV2ZW50KCd0b3BFcnJvcicsICdlcnJvcicsIG5vZGUpLCBSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXIudHJhcEJ1YmJsZWRFdmVudCgndG9wTG9hZCcsICdsb2FkJywgbm9kZSldO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnZm9ybSc6XG4gICAgICBpbnN0Ll93cmFwcGVyU3RhdGUubGlzdGVuZXJzID0gW1JlYWN0QnJvd3NlckV2ZW50RW1pdHRlci50cmFwQnViYmxlZEV2ZW50KCd0b3BSZXNldCcsICdyZXNldCcsIG5vZGUpLCBSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXIudHJhcEJ1YmJsZWRFdmVudCgndG9wU3VibWl0JywgJ3N1Ym1pdCcsIG5vZGUpXTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2lucHV0JzpcbiAgICBjYXNlICdzZWxlY3QnOlxuICAgIGNhc2UgJ3RleHRhcmVhJzpcbiAgICAgIGluc3QuX3dyYXBwZXJTdGF0ZS5saXN0ZW5lcnMgPSBbUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyLnRyYXBCdWJibGVkRXZlbnQoJ3RvcEludmFsaWQnLCAnaW52YWxpZCcsIG5vZGUpXTtcbiAgICAgIGJyZWFrO1xuICB9XG59XG5cbmZ1bmN0aW9uIHBvc3RVcGRhdGVTZWxlY3RXcmFwcGVyKCkge1xuICBSZWFjdERPTVNlbGVjdC5wb3N0VXBkYXRlV3JhcHBlcih0aGlzKTtcbn1cblxuLy8gRm9yIEhUTUwsIGNlcnRhaW4gdGFncyBzaG91bGQgb21pdCB0aGVpciBjbG9zZSB0YWcuIFdlIGtlZXAgYSB3aGl0ZWxpc3QgZm9yXG4vLyB0aG9zZSBzcGVjaWFsLWNhc2UgdGFncy5cblxudmFyIG9taXR0ZWRDbG9zZVRhZ3MgPSB7XG4gIGFyZWE6IHRydWUsXG4gIGJhc2U6IHRydWUsXG4gIGJyOiB0cnVlLFxuICBjb2w6IHRydWUsXG4gIGVtYmVkOiB0cnVlLFxuICBocjogdHJ1ZSxcbiAgaW1nOiB0cnVlLFxuICBpbnB1dDogdHJ1ZSxcbiAga2V5Z2VuOiB0cnVlLFxuICBsaW5rOiB0cnVlLFxuICBtZXRhOiB0cnVlLFxuICBwYXJhbTogdHJ1ZSxcbiAgc291cmNlOiB0cnVlLFxuICB0cmFjazogdHJ1ZSxcbiAgd2JyOiB0cnVlXG4gIC8vIE5PVEU6IG1lbnVpdGVtJ3MgY2xvc2UgdGFnIHNob3VsZCBiZSBvbWl0dGVkLCBidXQgdGhhdCBjYXVzZXMgcHJvYmxlbXMuXG59O1xuXG52YXIgbmV3bGluZUVhdGluZ1RhZ3MgPSB7XG4gIGxpc3Rpbmc6IHRydWUsXG4gIHByZTogdHJ1ZSxcbiAgdGV4dGFyZWE6IHRydWVcbn07XG5cbi8vIEZvciBIVE1MLCBjZXJ0YWluIHRhZ3MgY2Fubm90IGhhdmUgY2hpbGRyZW4uIFRoaXMgaGFzIHRoZSBzYW1lIHB1cnBvc2UgYXNcbi8vIGBvbWl0dGVkQ2xvc2VUYWdzYCBleGNlcHQgdGhhdCBgbWVudWl0ZW1gIHNob3VsZCBzdGlsbCBoYXZlIGl0cyBjbG9zaW5nIHRhZy5cblxudmFyIHZvaWRFbGVtZW50VGFncyA9IF9hc3NpZ24oe1xuICBtZW51aXRlbTogdHJ1ZVxufSwgb21pdHRlZENsb3NlVGFncyk7XG5cbi8vIFdlIGFjY2VwdCBhbnkgdGFnIHRvIGJlIHJlbmRlcmVkIGJ1dCBzaW5jZSB0aGlzIGdldHMgaW5qZWN0ZWQgaW50byBhcmJpdHJhcnlcbi8vIEhUTUwsIHdlIHdhbnQgdG8gbWFrZSBzdXJlIHRoYXQgaXQncyBhIHNhZmUgdGFnLlxuLy8gaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLXhtbC8jTlQtTmFtZVxuXG52YXIgVkFMSURfVEFHX1JFR0VYID0gL15bYS16QS1aXVthLXpBLVo6X1xcLlxcLVxcZF0qJC87IC8vIFNpbXBsaWZpZWQgc3Vic2V0XG52YXIgdmFsaWRhdGVkVGFnQ2FjaGUgPSB7fTtcbnZhciBoYXNPd25Qcm9wZXJ0eSA9IHt9Lmhhc093blByb3BlcnR5O1xuXG5mdW5jdGlvbiB2YWxpZGF0ZURhbmdlcm91c1RhZyh0YWcpIHtcbiAgaWYgKCFoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbGlkYXRlZFRhZ0NhY2hlLCB0YWcpKSB7XG4gICAgIVZBTElEX1RBR19SRUdFWC50ZXN0KHRhZykgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAnSW52YWxpZCB0YWc6ICVzJywgdGFnKSA6IF9wcm9kSW52YXJpYW50KCc2NScsIHRhZykgOiB2b2lkIDA7XG4gICAgdmFsaWRhdGVkVGFnQ2FjaGVbdGFnXSA9IHRydWU7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNDdXN0b21Db21wb25lbnQodGFnTmFtZSwgcHJvcHMpIHtcbiAgcmV0dXJuIHRhZ05hbWUuaW5kZXhPZignLScpID49IDAgfHwgcHJvcHMuaXMgIT0gbnVsbDtcbn1cblxudmFyIGdsb2JhbElkQ291bnRlciA9IDE7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBSZWFjdCBjbGFzcyB0aGF0IGlzIGlkZW1wb3RlbnQgYW5kIGNhcGFibGUgb2YgY29udGFpbmluZyBvdGhlclxuICogUmVhY3QgY29tcG9uZW50cy4gSXQgYWNjZXB0cyBldmVudCBsaXN0ZW5lcnMgYW5kIERPTSBwcm9wZXJ0aWVzIHRoYXQgYXJlXG4gKiB2YWxpZCBhY2NvcmRpbmcgdG8gYERPTVByb3BlcnR5YC5cbiAqXG4gKiAgLSBFdmVudCBsaXN0ZW5lcnM6IGBvbkNsaWNrYCwgYG9uTW91c2VEb3duYCwgZXRjLlxuICogIC0gRE9NIHByb3BlcnRpZXM6IGBjbGFzc05hbWVgLCBgbmFtZWAsIGB0aXRsZWAsIGV0Yy5cbiAqXG4gKiBUaGUgYHN0eWxlYCBwcm9wZXJ0eSBmdW5jdGlvbnMgZGlmZmVyZW50bHkgZnJvbSB0aGUgRE9NIEFQSS4gSXQgYWNjZXB0cyBhblxuICogb2JqZWN0IG1hcHBpbmcgb2Ygc3R5bGUgcHJvcGVydGllcyB0byB2YWx1ZXMuXG4gKlxuICogQGNvbnN0cnVjdG9yIFJlYWN0RE9NQ29tcG9uZW50XG4gKiBAZXh0ZW5kcyBSZWFjdE11bHRpQ2hpbGRcbiAqL1xuZnVuY3Rpb24gUmVhY3RET01Db21wb25lbnQoZWxlbWVudCkge1xuICB2YXIgdGFnID0gZWxlbWVudC50eXBlO1xuICB2YWxpZGF0ZURhbmdlcm91c1RhZyh0YWcpO1xuICB0aGlzLl9jdXJyZW50RWxlbWVudCA9IGVsZW1lbnQ7XG4gIHRoaXMuX3RhZyA9IHRhZy50b0xvd2VyQ2FzZSgpO1xuICB0aGlzLl9uYW1lc3BhY2VVUkkgPSBudWxsO1xuICB0aGlzLl9yZW5kZXJlZENoaWxkcmVuID0gbnVsbDtcbiAgdGhpcy5fcHJldmlvdXNTdHlsZSA9IG51bGw7XG4gIHRoaXMuX3ByZXZpb3VzU3R5bGVDb3B5ID0gbnVsbDtcbiAgdGhpcy5faG9zdE5vZGUgPSBudWxsO1xuICB0aGlzLl9ob3N0UGFyZW50ID0gbnVsbDtcbiAgdGhpcy5fcm9vdE5vZGVJRCA9IDA7XG4gIHRoaXMuX2RvbUlEID0gMDtcbiAgdGhpcy5faG9zdENvbnRhaW5lckluZm8gPSBudWxsO1xuICB0aGlzLl93cmFwcGVyU3RhdGUgPSBudWxsO1xuICB0aGlzLl90b3BMZXZlbFdyYXBwZXIgPSBudWxsO1xuICB0aGlzLl9mbGFncyA9IDA7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgdGhpcy5fYW5jZXN0b3JJbmZvID0gbnVsbDtcbiAgICBzZXRBbmRWYWxpZGF0ZUNvbnRlbnRDaGlsZERldi5jYWxsKHRoaXMsIG51bGwpO1xuICB9XG59XG5cblJlYWN0RE9NQ29tcG9uZW50LmRpc3BsYXlOYW1lID0gJ1JlYWN0RE9NQ29tcG9uZW50JztcblxuUmVhY3RET01Db21wb25lbnQuTWl4aW4gPSB7XG4gIC8qKlxuICAgKiBHZW5lcmF0ZXMgcm9vdCB0YWcgbWFya3VwIHRoZW4gcmVjdXJzZXMuIFRoaXMgbWV0aG9kIGhhcyBzaWRlIGVmZmVjdHMgYW5kXG4gICAqIGlzIG5vdCBpZGVtcG90ZW50LlxuICAgKlxuICAgKiBAaW50ZXJuYWxcbiAgICogQHBhcmFtIHtSZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9ufFJlYWN0U2VydmVyUmVuZGVyaW5nVHJhbnNhY3Rpb259IHRyYW5zYWN0aW9uXG4gICAqIEBwYXJhbSB7P1JlYWN0RE9NQ29tcG9uZW50fSB0aGUgcGFyZW50IGNvbXBvbmVudCBpbnN0YW5jZVxuICAgKiBAcGFyYW0gez9vYmplY3R9IGluZm8gYWJvdXQgdGhlIGhvc3QgY29udGFpbmVyXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBjb250ZXh0XG4gICAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGNvbXB1dGVkIG1hcmt1cC5cbiAgICovXG4gIG1vdW50Q29tcG9uZW50OiBmdW5jdGlvbiAodHJhbnNhY3Rpb24sIGhvc3RQYXJlbnQsIGhvc3RDb250YWluZXJJbmZvLCBjb250ZXh0KSB7XG4gICAgdGhpcy5fcm9vdE5vZGVJRCA9IGdsb2JhbElkQ291bnRlcisrO1xuICAgIHRoaXMuX2RvbUlEID0gaG9zdENvbnRhaW5lckluZm8uX2lkQ291bnRlcisrO1xuICAgIHRoaXMuX2hvc3RQYXJlbnQgPSBob3N0UGFyZW50O1xuICAgIHRoaXMuX2hvc3RDb250YWluZXJJbmZvID0gaG9zdENvbnRhaW5lckluZm87XG5cbiAgICB2YXIgcHJvcHMgPSB0aGlzLl9jdXJyZW50RWxlbWVudC5wcm9wcztcblxuICAgIHN3aXRjaCAodGhpcy5fdGFnKSB7XG4gICAgICBjYXNlICdhdWRpbyc6XG4gICAgICBjYXNlICdmb3JtJzpcbiAgICAgIGNhc2UgJ2lmcmFtZSc6XG4gICAgICBjYXNlICdpbWcnOlxuICAgICAgY2FzZSAnbGluayc6XG4gICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgY2FzZSAnc291cmNlJzpcbiAgICAgIGNhc2UgJ3ZpZGVvJzpcbiAgICAgICAgdGhpcy5fd3JhcHBlclN0YXRlID0ge1xuICAgICAgICAgIGxpc3RlbmVyczogbnVsbFxuICAgICAgICB9O1xuICAgICAgICB0cmFuc2FjdGlvbi5nZXRSZWFjdE1vdW50UmVhZHkoKS5lbnF1ZXVlKHRyYXBCdWJibGVkRXZlbnRzTG9jYWwsIHRoaXMpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2lucHV0JzpcbiAgICAgICAgUmVhY3RET01JbnB1dC5tb3VudFdyYXBwZXIodGhpcywgcHJvcHMsIGhvc3RQYXJlbnQpO1xuICAgICAgICBwcm9wcyA9IFJlYWN0RE9NSW5wdXQuZ2V0SG9zdFByb3BzKHRoaXMsIHByb3BzKTtcbiAgICAgICAgdHJhbnNhY3Rpb24uZ2V0UmVhY3RNb3VudFJlYWR5KCkuZW5xdWV1ZSh0cmFja0lucHV0VmFsdWUsIHRoaXMpO1xuICAgICAgICB0cmFuc2FjdGlvbi5nZXRSZWFjdE1vdW50UmVhZHkoKS5lbnF1ZXVlKHRyYXBCdWJibGVkRXZlbnRzTG9jYWwsIHRoaXMpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ29wdGlvbic6XG4gICAgICAgIFJlYWN0RE9NT3B0aW9uLm1vdW50V3JhcHBlcih0aGlzLCBwcm9wcywgaG9zdFBhcmVudCk7XG4gICAgICAgIHByb3BzID0gUmVhY3RET01PcHRpb24uZ2V0SG9zdFByb3BzKHRoaXMsIHByb3BzKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdzZWxlY3QnOlxuICAgICAgICBSZWFjdERPTVNlbGVjdC5tb3VudFdyYXBwZXIodGhpcywgcHJvcHMsIGhvc3RQYXJlbnQpO1xuICAgICAgICBwcm9wcyA9IFJlYWN0RE9NU2VsZWN0LmdldEhvc3RQcm9wcyh0aGlzLCBwcm9wcyk7XG4gICAgICAgIHRyYW5zYWN0aW9uLmdldFJlYWN0TW91bnRSZWFkeSgpLmVucXVldWUodHJhcEJ1YmJsZWRFdmVudHNMb2NhbCwgdGhpcyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAndGV4dGFyZWEnOlxuICAgICAgICBSZWFjdERPTVRleHRhcmVhLm1vdW50V3JhcHBlcih0aGlzLCBwcm9wcywgaG9zdFBhcmVudCk7XG4gICAgICAgIHByb3BzID0gUmVhY3RET01UZXh0YXJlYS5nZXRIb3N0UHJvcHModGhpcywgcHJvcHMpO1xuICAgICAgICB0cmFuc2FjdGlvbi5nZXRSZWFjdE1vdW50UmVhZHkoKS5lbnF1ZXVlKHRyYWNrSW5wdXRWYWx1ZSwgdGhpcyk7XG4gICAgICAgIHRyYW5zYWN0aW9uLmdldFJlYWN0TW91bnRSZWFkeSgpLmVucXVldWUodHJhcEJ1YmJsZWRFdmVudHNMb2NhbCwgdGhpcyk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGFzc2VydFZhbGlkUHJvcHModGhpcywgcHJvcHMpO1xuXG4gICAgLy8gV2UgY3JlYXRlIHRhZ3MgaW4gdGhlIG5hbWVzcGFjZSBvZiB0aGVpciBwYXJlbnQgY29udGFpbmVyLCBleGNlcHQgSFRNTFxuICAgIC8vIHRhZ3MgZ2V0IG5vIG5hbWVzcGFjZS5cbiAgICB2YXIgbmFtZXNwYWNlVVJJO1xuICAgIHZhciBwYXJlbnRUYWc7XG4gICAgaWYgKGhvc3RQYXJlbnQgIT0gbnVsbCkge1xuICAgICAgbmFtZXNwYWNlVVJJID0gaG9zdFBhcmVudC5fbmFtZXNwYWNlVVJJO1xuICAgICAgcGFyZW50VGFnID0gaG9zdFBhcmVudC5fdGFnO1xuICAgIH0gZWxzZSBpZiAoaG9zdENvbnRhaW5lckluZm8uX3RhZykge1xuICAgICAgbmFtZXNwYWNlVVJJID0gaG9zdENvbnRhaW5lckluZm8uX25hbWVzcGFjZVVSSTtcbiAgICAgIHBhcmVudFRhZyA9IGhvc3RDb250YWluZXJJbmZvLl90YWc7XG4gICAgfVxuICAgIGlmIChuYW1lc3BhY2VVUkkgPT0gbnVsbCB8fCBuYW1lc3BhY2VVUkkgPT09IERPTU5hbWVzcGFjZXMuc3ZnICYmIHBhcmVudFRhZyA9PT0gJ2ZvcmVpZ25vYmplY3QnKSB7XG4gICAgICBuYW1lc3BhY2VVUkkgPSBET01OYW1lc3BhY2VzLmh0bWw7XG4gICAgfVxuICAgIGlmIChuYW1lc3BhY2VVUkkgPT09IERPTU5hbWVzcGFjZXMuaHRtbCkge1xuICAgICAgaWYgKHRoaXMuX3RhZyA9PT0gJ3N2ZycpIHtcbiAgICAgICAgbmFtZXNwYWNlVVJJID0gRE9NTmFtZXNwYWNlcy5zdmc7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX3RhZyA9PT0gJ21hdGgnKSB7XG4gICAgICAgIG5hbWVzcGFjZVVSSSA9IERPTU5hbWVzcGFjZXMubWF0aG1sO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLl9uYW1lc3BhY2VVUkkgPSBuYW1lc3BhY2VVUkk7XG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgdmFyIHBhcmVudEluZm87XG4gICAgICBpZiAoaG9zdFBhcmVudCAhPSBudWxsKSB7XG4gICAgICAgIHBhcmVudEluZm8gPSBob3N0UGFyZW50Ll9hbmNlc3RvckluZm87XG4gICAgICB9IGVsc2UgaWYgKGhvc3RDb250YWluZXJJbmZvLl90YWcpIHtcbiAgICAgICAgcGFyZW50SW5mbyA9IGhvc3RDb250YWluZXJJbmZvLl9hbmNlc3RvckluZm87XG4gICAgICB9XG4gICAgICBpZiAocGFyZW50SW5mbykge1xuICAgICAgICAvLyBwYXJlbnRJbmZvIHNob3VsZCBhbHdheXMgYmUgcHJlc2VudCBleGNlcHQgZm9yIHRoZSB0b3AtbGV2ZWxcbiAgICAgICAgLy8gY29tcG9uZW50IHdoZW4gc2VydmVyIHJlbmRlcmluZ1xuICAgICAgICB2YWxpZGF0ZURPTU5lc3RpbmcodGhpcy5fdGFnLCBudWxsLCB0aGlzLCBwYXJlbnRJbmZvKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2FuY2VzdG9ySW5mbyA9IHZhbGlkYXRlRE9NTmVzdGluZy51cGRhdGVkQW5jZXN0b3JJbmZvKHBhcmVudEluZm8sIHRoaXMuX3RhZywgdGhpcyk7XG4gICAgfVxuXG4gICAgdmFyIG1vdW50SW1hZ2U7XG4gICAgaWYgKHRyYW5zYWN0aW9uLnVzZUNyZWF0ZUVsZW1lbnQpIHtcbiAgICAgIHZhciBvd25lckRvY3VtZW50ID0gaG9zdENvbnRhaW5lckluZm8uX293bmVyRG9jdW1lbnQ7XG4gICAgICB2YXIgZWw7XG4gICAgICBpZiAobmFtZXNwYWNlVVJJID09PSBET01OYW1lc3BhY2VzLmh0bWwpIHtcbiAgICAgICAgaWYgKHRoaXMuX3RhZyA9PT0gJ3NjcmlwdCcpIHtcbiAgICAgICAgICAvLyBDcmVhdGUgdGhlIHNjcmlwdCB2aWEgLmlubmVySFRNTCBzbyBpdHMgXCJwYXJzZXItaW5zZXJ0ZWRcIiBmbGFnIGlzXG4gICAgICAgICAgLy8gc2V0IHRvIHRydWUgYW5kIGl0IGRvZXMgbm90IGV4ZWN1dGVcbiAgICAgICAgICB2YXIgZGl2ID0gb3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICB2YXIgdHlwZSA9IHRoaXMuX2N1cnJlbnRFbGVtZW50LnR5cGU7XG4gICAgICAgICAgZGl2LmlubmVySFRNTCA9ICc8JyArIHR5cGUgKyAnPjwvJyArIHR5cGUgKyAnPic7XG4gICAgICAgICAgZWwgPSBkaXYucmVtb3ZlQ2hpbGQoZGl2LmZpcnN0Q2hpbGQpO1xuICAgICAgICB9IGVsc2UgaWYgKHByb3BzLmlzKSB7XG4gICAgICAgICAgZWwgPSBvd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGhpcy5fY3VycmVudEVsZW1lbnQudHlwZSwgcHJvcHMuaXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFNlcGFyYXRlIGVsc2UgYnJhbmNoIGluc3RlYWQgb2YgdXNpbmcgYHByb3BzLmlzIHx8IHVuZGVmaW5lZGAgYWJvdmUgYmVjdWFzZSBvZiBhIEZpcmVmb3ggYnVnLlxuICAgICAgICAgIC8vIFNlZSBkaXNjdXNzaW9uIGluIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9wdWxsLzY4OTZcbiAgICAgICAgICAvLyBhbmQgZGlzY3Vzc2lvbiBpbiBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjc2MjQwXG4gICAgICAgICAgZWwgPSBvd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGhpcy5fY3VycmVudEVsZW1lbnQudHlwZSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVsID0gb3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50TlMobmFtZXNwYWNlVVJJLCB0aGlzLl9jdXJyZW50RWxlbWVudC50eXBlKTtcbiAgICAgIH1cbiAgICAgIFJlYWN0RE9NQ29tcG9uZW50VHJlZS5wcmVjYWNoZU5vZGUodGhpcywgZWwpO1xuICAgICAgdGhpcy5fZmxhZ3MgfD0gRmxhZ3MuaGFzQ2FjaGVkQ2hpbGROb2RlcztcbiAgICAgIGlmICghdGhpcy5faG9zdFBhcmVudCkge1xuICAgICAgICBET01Qcm9wZXJ0eU9wZXJhdGlvbnMuc2V0QXR0cmlidXRlRm9yUm9vdChlbCk7XG4gICAgICB9XG4gICAgICB0aGlzLl91cGRhdGVET01Qcm9wZXJ0aWVzKG51bGwsIHByb3BzLCB0cmFuc2FjdGlvbik7XG4gICAgICB2YXIgbGF6eVRyZWUgPSBET01MYXp5VHJlZShlbCk7XG4gICAgICB0aGlzLl9jcmVhdGVJbml0aWFsQ2hpbGRyZW4odHJhbnNhY3Rpb24sIHByb3BzLCBjb250ZXh0LCBsYXp5VHJlZSk7XG4gICAgICBtb3VudEltYWdlID0gbGF6eVRyZWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciB0YWdPcGVuID0gdGhpcy5fY3JlYXRlT3BlblRhZ01hcmt1cEFuZFB1dExpc3RlbmVycyh0cmFuc2FjdGlvbiwgcHJvcHMpO1xuICAgICAgdmFyIHRhZ0NvbnRlbnQgPSB0aGlzLl9jcmVhdGVDb250ZW50TWFya3VwKHRyYW5zYWN0aW9uLCBwcm9wcywgY29udGV4dCk7XG4gICAgICBpZiAoIXRhZ0NvbnRlbnQgJiYgb21pdHRlZENsb3NlVGFnc1t0aGlzLl90YWddKSB7XG4gICAgICAgIG1vdW50SW1hZ2UgPSB0YWdPcGVuICsgJy8+JztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG1vdW50SW1hZ2UgPSB0YWdPcGVuICsgJz4nICsgdGFnQ29udGVudCArICc8LycgKyB0aGlzLl9jdXJyZW50RWxlbWVudC50eXBlICsgJz4nO1xuICAgICAgfVxuICAgIH1cblxuICAgIHN3aXRjaCAodGhpcy5fdGFnKSB7XG4gICAgICBjYXNlICdpbnB1dCc6XG4gICAgICAgIHRyYW5zYWN0aW9uLmdldFJlYWN0TW91bnRSZWFkeSgpLmVucXVldWUoaW5wdXRQb3N0TW91bnQsIHRoaXMpO1xuICAgICAgICBpZiAocHJvcHMuYXV0b0ZvY3VzKSB7XG4gICAgICAgICAgdHJhbnNhY3Rpb24uZ2V0UmVhY3RNb3VudFJlYWR5KCkuZW5xdWV1ZShBdXRvRm9jdXNVdGlscy5mb2N1c0RPTUNvbXBvbmVudCwgdGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICd0ZXh0YXJlYSc6XG4gICAgICAgIHRyYW5zYWN0aW9uLmdldFJlYWN0TW91bnRSZWFkeSgpLmVucXVldWUodGV4dGFyZWFQb3N0TW91bnQsIHRoaXMpO1xuICAgICAgICBpZiAocHJvcHMuYXV0b0ZvY3VzKSB7XG4gICAgICAgICAgdHJhbnNhY3Rpb24uZ2V0UmVhY3RNb3VudFJlYWR5KCkuZW5xdWV1ZShBdXRvRm9jdXNVdGlscy5mb2N1c0RPTUNvbXBvbmVudCwgdGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdzZWxlY3QnOlxuICAgICAgICBpZiAocHJvcHMuYXV0b0ZvY3VzKSB7XG4gICAgICAgICAgdHJhbnNhY3Rpb24uZ2V0UmVhY3RNb3VudFJlYWR5KCkuZW5xdWV1ZShBdXRvRm9jdXNVdGlscy5mb2N1c0RPTUNvbXBvbmVudCwgdGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdidXR0b24nOlxuICAgICAgICBpZiAocHJvcHMuYXV0b0ZvY3VzKSB7XG4gICAgICAgICAgdHJhbnNhY3Rpb24uZ2V0UmVhY3RNb3VudFJlYWR5KCkuZW5xdWV1ZShBdXRvRm9jdXNVdGlscy5mb2N1c0RPTUNvbXBvbmVudCwgdGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdvcHRpb24nOlxuICAgICAgICB0cmFuc2FjdGlvbi5nZXRSZWFjdE1vdW50UmVhZHkoKS5lbnF1ZXVlKG9wdGlvblBvc3RNb3VudCwgdGhpcyk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHJldHVybiBtb3VudEltYWdlO1xuICB9LFxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIG1hcmt1cCBmb3IgdGhlIG9wZW4gdGFnIGFuZCBhbGwgYXR0cmlidXRlcy5cbiAgICpcbiAgICogVGhpcyBtZXRob2QgaGFzIHNpZGUgZWZmZWN0cyBiZWNhdXNlIGV2ZW50cyBnZXQgcmVnaXN0ZXJlZC5cbiAgICpcbiAgICogSXRlcmF0aW5nIG92ZXIgb2JqZWN0IHByb3BlcnRpZXMgaXMgZmFzdGVyIHRoYW4gaXRlcmF0aW5nIG92ZXIgYXJyYXlzLlxuICAgKiBAc2VlIGh0dHA6Ly9qc3BlcmYuY29tL29iai12cy1hcnItaXRlcmF0aW9uXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7UmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvbnxSZWFjdFNlcnZlclJlbmRlcmluZ1RyYW5zYWN0aW9ufSB0cmFuc2FjdGlvblxuICAgKiBAcGFyYW0ge29iamVjdH0gcHJvcHNcbiAgICogQHJldHVybiB7c3RyaW5nfSBNYXJrdXAgb2Ygb3BlbmluZyB0YWcuXG4gICAqL1xuICBfY3JlYXRlT3BlblRhZ01hcmt1cEFuZFB1dExpc3RlbmVyczogZnVuY3Rpb24gKHRyYW5zYWN0aW9uLCBwcm9wcykge1xuICAgIHZhciByZXQgPSAnPCcgKyB0aGlzLl9jdXJyZW50RWxlbWVudC50eXBlO1xuXG4gICAgZm9yICh2YXIgcHJvcEtleSBpbiBwcm9wcykge1xuICAgICAgaWYgKCFwcm9wcy5oYXNPd25Qcm9wZXJ0eShwcm9wS2V5KSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wS2V5XTtcbiAgICAgIGlmIChwcm9wVmFsdWUgPT0gbnVsbCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChyZWdpc3RyYXRpb25OYW1lTW9kdWxlcy5oYXNPd25Qcm9wZXJ0eShwcm9wS2V5KSkge1xuICAgICAgICBpZiAocHJvcFZhbHVlKSB7XG4gICAgICAgICAgZW5xdWV1ZVB1dExpc3RlbmVyKHRoaXMsIHByb3BLZXksIHByb3BWYWx1ZSwgdHJhbnNhY3Rpb24pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAocHJvcEtleSA9PT0gU1RZTEUpIHtcbiAgICAgICAgICBpZiAocHJvcFZhbHVlKSB7XG4gICAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgICAvLyBTZWUgYF91cGRhdGVET01Qcm9wZXJ0aWVzYC4gc3R5bGUgYmxvY2tcbiAgICAgICAgICAgICAgdGhpcy5fcHJldmlvdXNTdHlsZSA9IHByb3BWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHByb3BWYWx1ZSA9IHRoaXMuX3ByZXZpb3VzU3R5bGVDb3B5ID0gX2Fzc2lnbih7fSwgcHJvcHMuc3R5bGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBwcm9wVmFsdWUgPSBDU1NQcm9wZXJ0eU9wZXJhdGlvbnMuY3JlYXRlTWFya3VwRm9yU3R5bGVzKHByb3BWYWx1ZSwgdGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIG1hcmt1cCA9IG51bGw7XG4gICAgICAgIGlmICh0aGlzLl90YWcgIT0gbnVsbCAmJiBpc0N1c3RvbUNvbXBvbmVudCh0aGlzLl90YWcsIHByb3BzKSkge1xuICAgICAgICAgIGlmICghUkVTRVJWRURfUFJPUFMuaGFzT3duUHJvcGVydHkocHJvcEtleSkpIHtcbiAgICAgICAgICAgIG1hcmt1cCA9IERPTVByb3BlcnR5T3BlcmF0aW9ucy5jcmVhdGVNYXJrdXBGb3JDdXN0b21BdHRyaWJ1dGUocHJvcEtleSwgcHJvcFZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbWFya3VwID0gRE9NUHJvcGVydHlPcGVyYXRpb25zLmNyZWF0ZU1hcmt1cEZvclByb3BlcnR5KHByb3BLZXksIHByb3BWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1hcmt1cCkge1xuICAgICAgICAgIHJldCArPSAnICcgKyBtYXJrdXA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBGb3Igc3RhdGljIHBhZ2VzLCBubyBuZWVkIHRvIHB1dCBSZWFjdCBJRCBhbmQgY2hlY2tzdW0uIFNhdmVzIGxvdHMgb2ZcbiAgICAvLyBieXRlcy5cbiAgICBpZiAodHJhbnNhY3Rpb24ucmVuZGVyVG9TdGF0aWNNYXJrdXApIHtcbiAgICAgIHJldHVybiByZXQ7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLl9ob3N0UGFyZW50KSB7XG4gICAgICByZXQgKz0gJyAnICsgRE9NUHJvcGVydHlPcGVyYXRpb25zLmNyZWF0ZU1hcmt1cEZvclJvb3QoKTtcbiAgICB9XG4gICAgcmV0ICs9ICcgJyArIERPTVByb3BlcnR5T3BlcmF0aW9ucy5jcmVhdGVNYXJrdXBGb3JJRCh0aGlzLl9kb21JRCk7XG4gICAgcmV0dXJuIHJldDtcbiAgfSxcblxuICAvKipcbiAgICogQ3JlYXRlcyBtYXJrdXAgZm9yIHRoZSBjb250ZW50IGJldHdlZW4gdGhlIHRhZ3MuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7UmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvbnxSZWFjdFNlcnZlclJlbmRlcmluZ1RyYW5zYWN0aW9ufSB0cmFuc2FjdGlvblxuICAgKiBAcGFyYW0ge29iamVjdH0gcHJvcHNcbiAgICogQHBhcmFtIHtvYmplY3R9IGNvbnRleHRcbiAgICogQHJldHVybiB7c3RyaW5nfSBDb250ZW50IG1hcmt1cC5cbiAgICovXG4gIF9jcmVhdGVDb250ZW50TWFya3VwOiBmdW5jdGlvbiAodHJhbnNhY3Rpb24sIHByb3BzLCBjb250ZXh0KSB7XG4gICAgdmFyIHJldCA9ICcnO1xuXG4gICAgLy8gSW50ZW50aW9uYWwgdXNlIG9mICE9IHRvIGF2b2lkIGNhdGNoaW5nIHplcm8vZmFsc2UuXG4gICAgdmFyIGlubmVySFRNTCA9IHByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MO1xuICAgIGlmIChpbm5lckhUTUwgIT0gbnVsbCkge1xuICAgICAgaWYgKGlubmVySFRNTC5fX2h0bWwgIT0gbnVsbCkge1xuICAgICAgICByZXQgPSBpbm5lckhUTUwuX19odG1sO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgY29udGVudFRvVXNlID0gQ09OVEVOVF9UWVBFU1t0eXBlb2YgcHJvcHMuY2hpbGRyZW5dID8gcHJvcHMuY2hpbGRyZW4gOiBudWxsO1xuICAgICAgdmFyIGNoaWxkcmVuVG9Vc2UgPSBjb250ZW50VG9Vc2UgIT0gbnVsbCA/IG51bGwgOiBwcm9wcy5jaGlsZHJlbjtcbiAgICAgIGlmIChjb250ZW50VG9Vc2UgIT0gbnVsbCkge1xuICAgICAgICAvLyBUT0RPOiBWYWxpZGF0ZSB0aGF0IHRleHQgaXMgYWxsb3dlZCBhcyBhIGNoaWxkIG9mIHRoaXMgbm9kZVxuICAgICAgICByZXQgPSBlc2NhcGVUZXh0Q29udGVudEZvckJyb3dzZXIoY29udGVudFRvVXNlKTtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICBzZXRBbmRWYWxpZGF0ZUNvbnRlbnRDaGlsZERldi5jYWxsKHRoaXMsIGNvbnRlbnRUb1VzZSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoY2hpbGRyZW5Ub1VzZSAhPSBudWxsKSB7XG4gICAgICAgIHZhciBtb3VudEltYWdlcyA9IHRoaXMubW91bnRDaGlsZHJlbihjaGlsZHJlblRvVXNlLCB0cmFuc2FjdGlvbiwgY29udGV4dCk7XG4gICAgICAgIHJldCA9IG1vdW50SW1hZ2VzLmpvaW4oJycpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAobmV3bGluZUVhdGluZ1RhZ3NbdGhpcy5fdGFnXSAmJiByZXQuY2hhckF0KDApID09PSAnXFxuJykge1xuICAgICAgLy8gdGV4dC9odG1sIGlnbm9yZXMgdGhlIGZpcnN0IGNoYXJhY3RlciBpbiB0aGVzZSB0YWdzIGlmIGl0J3MgYSBuZXdsaW5lXG4gICAgICAvLyBQcmVmZXIgdG8gYnJlYWsgYXBwbGljYXRpb24veG1sIG92ZXIgdGV4dC9odG1sIChmb3Igbm93KSBieSBhZGRpbmdcbiAgICAgIC8vIGEgbmV3bGluZSBzcGVjaWZpY2FsbHkgdG8gZ2V0IGVhdGVuIGJ5IHRoZSBwYXJzZXIuIChBbHRlcm5hdGVseSBmb3JcbiAgICAgIC8vIHRleHRhcmVhcywgcmVwbGFjaW5nIFwiXlxcblwiIHdpdGggXCJcXHJcXG5cIiBkb2Vzbid0IGdldCBlYXRlbiwgYW5kIHRoZSBmaXJzdFxuICAgICAgLy8gXFxyIGlzIG5vcm1hbGl6ZWQgb3V0IGJ5IEhUTUxUZXh0QXJlYUVsZW1lbnQjdmFsdWUuKVxuICAgICAgLy8gU2VlOiA8aHR0cDovL3d3dy53My5vcmcvVFIvaHRtbC1wb2x5Z2xvdC8jbmV3bGluZXMtaW4tdGV4dGFyZWEtYW5kLXByZT5cbiAgICAgIC8vIFNlZTogPGh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw1L3N5bnRheC5odG1sI2VsZW1lbnQtcmVzdHJpY3Rpb25zPlxuICAgICAgLy8gU2VlOiA8aHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDUvc3ludGF4Lmh0bWwjbmV3bGluZXM+XG4gICAgICAvLyBTZWU6IFBhcnNpbmcgb2YgXCJ0ZXh0YXJlYVwiIFwibGlzdGluZ1wiIGFuZCBcInByZVwiIGVsZW1lbnRzXG4gICAgICAvLyAgZnJvbSA8aHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDUvc3ludGF4Lmh0bWwjcGFyc2luZy1tYWluLWluYm9keT5cbiAgICAgIHJldHVybiAnXFxuJyArIHJldDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG4gIH0sXG5cbiAgX2NyZWF0ZUluaXRpYWxDaGlsZHJlbjogZnVuY3Rpb24gKHRyYW5zYWN0aW9uLCBwcm9wcywgY29udGV4dCwgbGF6eVRyZWUpIHtcbiAgICAvLyBJbnRlbnRpb25hbCB1c2Ugb2YgIT0gdG8gYXZvaWQgY2F0Y2hpbmcgemVyby9mYWxzZS5cbiAgICB2YXIgaW5uZXJIVE1MID0gcHJvcHMuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw7XG4gICAgaWYgKGlubmVySFRNTCAhPSBudWxsKSB7XG4gICAgICBpZiAoaW5uZXJIVE1MLl9faHRtbCAhPSBudWxsKSB7XG4gICAgICAgIERPTUxhenlUcmVlLnF1ZXVlSFRNTChsYXp5VHJlZSwgaW5uZXJIVE1MLl9faHRtbCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBjb250ZW50VG9Vc2UgPSBDT05URU5UX1RZUEVTW3R5cGVvZiBwcm9wcy5jaGlsZHJlbl0gPyBwcm9wcy5jaGlsZHJlbiA6IG51bGw7XG4gICAgICB2YXIgY2hpbGRyZW5Ub1VzZSA9IGNvbnRlbnRUb1VzZSAhPSBudWxsID8gbnVsbCA6IHByb3BzLmNoaWxkcmVuO1xuICAgICAgLy8gVE9ETzogVmFsaWRhdGUgdGhhdCB0ZXh0IGlzIGFsbG93ZWQgYXMgYSBjaGlsZCBvZiB0aGlzIG5vZGVcbiAgICAgIGlmIChjb250ZW50VG9Vc2UgIT0gbnVsbCkge1xuICAgICAgICAvLyBBdm9pZCBzZXR0aW5nIHRleHRDb250ZW50IHdoZW4gdGhlIHRleHQgaXMgZW1wdHkuIEluIElFMTEgc2V0dGluZ1xuICAgICAgICAvLyB0ZXh0Q29udGVudCBvbiBhIHRleHQgYXJlYSB3aWxsIGNhdXNlIHRoZSBwbGFjZWhvbGRlciB0byBub3RcbiAgICAgICAgLy8gc2hvdyB3aXRoaW4gdGhlIHRleHRhcmVhIHVudGlsIGl0IGhhcyBiZWVuIGZvY3VzZWQgYW5kIGJsdXJyZWQgYWdhaW4uXG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvNjczMSNpc3N1ZWNvbW1lbnQtMjU0ODc0NTUzXG4gICAgICAgIGlmIChjb250ZW50VG9Vc2UgIT09ICcnKSB7XG4gICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICAgIHNldEFuZFZhbGlkYXRlQ29udGVudENoaWxkRGV2LmNhbGwodGhpcywgY29udGVudFRvVXNlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgRE9NTGF6eVRyZWUucXVldWVUZXh0KGxhenlUcmVlLCBjb250ZW50VG9Vc2UpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGNoaWxkcmVuVG9Vc2UgIT0gbnVsbCkge1xuICAgICAgICB2YXIgbW91bnRJbWFnZXMgPSB0aGlzLm1vdW50Q2hpbGRyZW4oY2hpbGRyZW5Ub1VzZSwgdHJhbnNhY3Rpb24sIGNvbnRleHQpO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1vdW50SW1hZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgRE9NTGF6eVRyZWUucXVldWVDaGlsZChsYXp5VHJlZSwgbW91bnRJbWFnZXNbaV0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIC8qKlxuICAgKiBSZWNlaXZlcyBhIG5leHQgZWxlbWVudCBhbmQgdXBkYXRlcyB0aGUgY29tcG9uZW50LlxuICAgKlxuICAgKiBAaW50ZXJuYWxcbiAgICogQHBhcmFtIHtSZWFjdEVsZW1lbnR9IG5leHRFbGVtZW50XG4gICAqIEBwYXJhbSB7UmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvbnxSZWFjdFNlcnZlclJlbmRlcmluZ1RyYW5zYWN0aW9ufSB0cmFuc2FjdGlvblxuICAgKiBAcGFyYW0ge29iamVjdH0gY29udGV4dFxuICAgKi9cbiAgcmVjZWl2ZUNvbXBvbmVudDogZnVuY3Rpb24gKG5leHRFbGVtZW50LCB0cmFuc2FjdGlvbiwgY29udGV4dCkge1xuICAgIHZhciBwcmV2RWxlbWVudCA9IHRoaXMuX2N1cnJlbnRFbGVtZW50O1xuICAgIHRoaXMuX2N1cnJlbnRFbGVtZW50ID0gbmV4dEVsZW1lbnQ7XG4gICAgdGhpcy51cGRhdGVDb21wb25lbnQodHJhbnNhY3Rpb24sIHByZXZFbGVtZW50LCBuZXh0RWxlbWVudCwgY29udGV4dCk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgYSBET00gY29tcG9uZW50IGFmdGVyIGl0IGhhcyBhbHJlYWR5IGJlZW4gYWxsb2NhdGVkIGFuZFxuICAgKiBhdHRhY2hlZCB0byB0aGUgRE9NLiBSZWNvbmNpbGVzIHRoZSByb290IERPTSBub2RlLCB0aGVuIHJlY3Vyc2VzLlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb259IHRyYW5zYWN0aW9uXG4gICAqIEBwYXJhbSB7UmVhY3RFbGVtZW50fSBwcmV2RWxlbWVudFxuICAgKiBAcGFyYW0ge1JlYWN0RWxlbWVudH0gbmV4dEVsZW1lbnRcbiAgICogQGludGVybmFsXG4gICAqIEBvdmVycmlkYWJsZVxuICAgKi9cbiAgdXBkYXRlQ29tcG9uZW50OiBmdW5jdGlvbiAodHJhbnNhY3Rpb24sIHByZXZFbGVtZW50LCBuZXh0RWxlbWVudCwgY29udGV4dCkge1xuICAgIHZhciBsYXN0UHJvcHMgPSBwcmV2RWxlbWVudC5wcm9wcztcbiAgICB2YXIgbmV4dFByb3BzID0gdGhpcy5fY3VycmVudEVsZW1lbnQucHJvcHM7XG5cbiAgICBzd2l0Y2ggKHRoaXMuX3RhZykge1xuICAgICAgY2FzZSAnaW5wdXQnOlxuICAgICAgICBsYXN0UHJvcHMgPSBSZWFjdERPTUlucHV0LmdldEhvc3RQcm9wcyh0aGlzLCBsYXN0UHJvcHMpO1xuICAgICAgICBuZXh0UHJvcHMgPSBSZWFjdERPTUlucHV0LmdldEhvc3RQcm9wcyh0aGlzLCBuZXh0UHJvcHMpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ29wdGlvbic6XG4gICAgICAgIGxhc3RQcm9wcyA9IFJlYWN0RE9NT3B0aW9uLmdldEhvc3RQcm9wcyh0aGlzLCBsYXN0UHJvcHMpO1xuICAgICAgICBuZXh0UHJvcHMgPSBSZWFjdERPTU9wdGlvbi5nZXRIb3N0UHJvcHModGhpcywgbmV4dFByb3BzKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdzZWxlY3QnOlxuICAgICAgICBsYXN0UHJvcHMgPSBSZWFjdERPTVNlbGVjdC5nZXRIb3N0UHJvcHModGhpcywgbGFzdFByb3BzKTtcbiAgICAgICAgbmV4dFByb3BzID0gUmVhY3RET01TZWxlY3QuZ2V0SG9zdFByb3BzKHRoaXMsIG5leHRQcm9wcyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAndGV4dGFyZWEnOlxuICAgICAgICBsYXN0UHJvcHMgPSBSZWFjdERPTVRleHRhcmVhLmdldEhvc3RQcm9wcyh0aGlzLCBsYXN0UHJvcHMpO1xuICAgICAgICBuZXh0UHJvcHMgPSBSZWFjdERPTVRleHRhcmVhLmdldEhvc3RQcm9wcyh0aGlzLCBuZXh0UHJvcHMpO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICBhc3NlcnRWYWxpZFByb3BzKHRoaXMsIG5leHRQcm9wcyk7XG4gICAgdGhpcy5fdXBkYXRlRE9NUHJvcGVydGllcyhsYXN0UHJvcHMsIG5leHRQcm9wcywgdHJhbnNhY3Rpb24pO1xuICAgIHRoaXMuX3VwZGF0ZURPTUNoaWxkcmVuKGxhc3RQcm9wcywgbmV4dFByb3BzLCB0cmFuc2FjdGlvbiwgY29udGV4dCk7XG5cbiAgICBzd2l0Y2ggKHRoaXMuX3RhZykge1xuICAgICAgY2FzZSAnaW5wdXQnOlxuICAgICAgICAvLyBVcGRhdGUgdGhlIHdyYXBwZXIgYXJvdW5kIGlucHV0cyAqYWZ0ZXIqIHVwZGF0aW5nIHByb3BzLiBUaGlzIGhhcyB0b1xuICAgICAgICAvLyBoYXBwZW4gYWZ0ZXIgYF91cGRhdGVET01Qcm9wZXJ0aWVzYC4gT3RoZXJ3aXNlIEhUTUw1IGlucHV0IHZhbGlkYXRpb25zXG4gICAgICAgIC8vIHJhaXNlIHdhcm5pbmdzIGFuZCBwcmV2ZW50IHRoZSBuZXcgdmFsdWUgZnJvbSBiZWluZyBhc3NpZ25lZC5cbiAgICAgICAgUmVhY3RET01JbnB1dC51cGRhdGVXcmFwcGVyKHRoaXMpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3RleHRhcmVhJzpcbiAgICAgICAgUmVhY3RET01UZXh0YXJlYS51cGRhdGVXcmFwcGVyKHRoaXMpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3NlbGVjdCc6XG4gICAgICAgIC8vIDxzZWxlY3Q+IHZhbHVlIHVwZGF0ZSBuZWVkcyB0byBvY2N1ciBhZnRlciA8b3B0aW9uPiBjaGlsZHJlblxuICAgICAgICAvLyByZWNvbmNpbGlhdGlvblxuICAgICAgICB0cmFuc2FjdGlvbi5nZXRSZWFjdE1vdW50UmVhZHkoKS5lbnF1ZXVlKHBvc3RVcGRhdGVTZWxlY3RXcmFwcGVyLCB0aGlzKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9LFxuXG4gIC8qKlxuICAgKiBSZWNvbmNpbGVzIHRoZSBwcm9wZXJ0aWVzIGJ5IGRldGVjdGluZyBkaWZmZXJlbmNlcyBpbiBwcm9wZXJ0eSB2YWx1ZXMgYW5kXG4gICAqIHVwZGF0aW5nIHRoZSBET00gYXMgbmVjZXNzYXJ5LiBUaGlzIGZ1bmN0aW9uIGlzIHByb2JhYmx5IHRoZSBzaW5nbGUgbW9zdFxuICAgKiBjcml0aWNhbCBwYXRoIGZvciBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24uXG4gICAqXG4gICAqIFRPRE86IEJlbmNobWFyayB3aGV0aGVyIGNoZWNraW5nIGZvciBjaGFuZ2VkIHZhbHVlcyBpbiBtZW1vcnkgYWN0dWFsbHlcbiAgICogICAgICAgaW1wcm92ZXMgcGVyZm9ybWFuY2UgKGVzcGVjaWFsbHkgc3RhdGljYWxseSBwb3NpdGlvbmVkIGVsZW1lbnRzKS5cbiAgICogVE9ETzogQmVuY2htYXJrIHRoZSBlZmZlY3RzIG9mIHB1dHRpbmcgdGhpcyBhdCB0aGUgdG9wIHNpbmNlIDk5JSBvZiBwcm9wc1xuICAgKiAgICAgICBkbyBub3QgY2hhbmdlIGZvciBhIGdpdmVuIHJlY29uY2lsaWF0aW9uLlxuICAgKiBUT0RPOiBCZW5jaG1hcmsgYXJlYXMgdGhhdCBjYW4gYmUgaW1wcm92ZWQgd2l0aCBjYWNoaW5nLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge29iamVjdH0gbGFzdFByb3BzXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBuZXh0UHJvcHNcbiAgICogQHBhcmFtIHs/RE9NRWxlbWVudH0gbm9kZVxuICAgKi9cbiAgX3VwZGF0ZURPTVByb3BlcnRpZXM6IGZ1bmN0aW9uIChsYXN0UHJvcHMsIG5leHRQcm9wcywgdHJhbnNhY3Rpb24pIHtcbiAgICB2YXIgcHJvcEtleTtcbiAgICB2YXIgc3R5bGVOYW1lO1xuICAgIHZhciBzdHlsZVVwZGF0ZXM7XG4gICAgZm9yIChwcm9wS2V5IGluIGxhc3RQcm9wcykge1xuICAgICAgaWYgKG5leHRQcm9wcy5oYXNPd25Qcm9wZXJ0eShwcm9wS2V5KSB8fCAhbGFzdFByb3BzLmhhc093blByb3BlcnR5KHByb3BLZXkpIHx8IGxhc3RQcm9wc1twcm9wS2V5XSA9PSBudWxsKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKHByb3BLZXkgPT09IFNUWUxFKSB7XG4gICAgICAgIHZhciBsYXN0U3R5bGUgPSB0aGlzLl9wcmV2aW91c1N0eWxlQ29weTtcbiAgICAgICAgZm9yIChzdHlsZU5hbWUgaW4gbGFzdFN0eWxlKSB7XG4gICAgICAgICAgaWYgKGxhc3RTdHlsZS5oYXNPd25Qcm9wZXJ0eShzdHlsZU5hbWUpKSB7XG4gICAgICAgICAgICBzdHlsZVVwZGF0ZXMgPSBzdHlsZVVwZGF0ZXMgfHwge307XG4gICAgICAgICAgICBzdHlsZVVwZGF0ZXNbc3R5bGVOYW1lXSA9ICcnO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9wcmV2aW91c1N0eWxlQ29weSA9IG51bGw7XG4gICAgICB9IGVsc2UgaWYgKHJlZ2lzdHJhdGlvbk5hbWVNb2R1bGVzLmhhc093blByb3BlcnR5KHByb3BLZXkpKSB7XG4gICAgICAgIGlmIChsYXN0UHJvcHNbcHJvcEtleV0pIHtcbiAgICAgICAgICAvLyBPbmx5IGNhbGwgZGVsZXRlTGlzdGVuZXIgaWYgdGhlcmUgd2FzIGEgbGlzdGVuZXIgcHJldmlvdXNseSBvclxuICAgICAgICAgIC8vIGVsc2Ugd2lsbERlbGV0ZUxpc3RlbmVyIGdldHMgY2FsbGVkIHdoZW4gdGhlcmUgd2Fzbid0IGFjdHVhbGx5IGFcbiAgICAgICAgICAvLyBsaXN0ZW5lciAoZS5nLiwgb25DbGljaz17bnVsbH0pXG4gICAgICAgICAgZGVsZXRlTGlzdGVuZXIodGhpcywgcHJvcEtleSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaXNDdXN0b21Db21wb25lbnQodGhpcy5fdGFnLCBsYXN0UHJvcHMpKSB7XG4gICAgICAgIGlmICghUkVTRVJWRURfUFJPUFMuaGFzT3duUHJvcGVydHkocHJvcEtleSkpIHtcbiAgICAgICAgICBET01Qcm9wZXJ0eU9wZXJhdGlvbnMuZGVsZXRlVmFsdWVGb3JBdHRyaWJ1dGUoZ2V0Tm9kZSh0aGlzKSwgcHJvcEtleSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoRE9NUHJvcGVydHkucHJvcGVydGllc1twcm9wS2V5XSB8fCBET01Qcm9wZXJ0eS5pc0N1c3RvbUF0dHJpYnV0ZShwcm9wS2V5KSkge1xuICAgICAgICBET01Qcm9wZXJ0eU9wZXJhdGlvbnMuZGVsZXRlVmFsdWVGb3JQcm9wZXJ0eShnZXROb2RlKHRoaXMpLCBwcm9wS2V5KTtcbiAgICAgIH1cbiAgICB9XG4gICAgZm9yIChwcm9wS2V5IGluIG5leHRQcm9wcykge1xuICAgICAgdmFyIG5leHRQcm9wID0gbmV4dFByb3BzW3Byb3BLZXldO1xuICAgICAgdmFyIGxhc3RQcm9wID0gcHJvcEtleSA9PT0gU1RZTEUgPyB0aGlzLl9wcmV2aW91c1N0eWxlQ29weSA6IGxhc3RQcm9wcyAhPSBudWxsID8gbGFzdFByb3BzW3Byb3BLZXldIDogdW5kZWZpbmVkO1xuICAgICAgaWYgKCFuZXh0UHJvcHMuaGFzT3duUHJvcGVydHkocHJvcEtleSkgfHwgbmV4dFByb3AgPT09IGxhc3RQcm9wIHx8IG5leHRQcm9wID09IG51bGwgJiYgbGFzdFByb3AgPT0gbnVsbCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wS2V5ID09PSBTVFlMRSkge1xuICAgICAgICBpZiAobmV4dFByb3ApIHtcbiAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgY2hlY2tBbmRXYXJuRm9yTXV0YXRlZFN0eWxlKHRoaXMuX3ByZXZpb3VzU3R5bGVDb3B5LCB0aGlzLl9wcmV2aW91c1N0eWxlLCB0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuX3ByZXZpb3VzU3R5bGUgPSBuZXh0UHJvcDtcbiAgICAgICAgICB9XG4gICAgICAgICAgbmV4dFByb3AgPSB0aGlzLl9wcmV2aW91c1N0eWxlQ29weSA9IF9hc3NpZ24oe30sIG5leHRQcm9wKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLl9wcmV2aW91c1N0eWxlQ29weSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxhc3RQcm9wKSB7XG4gICAgICAgICAgLy8gVW5zZXQgc3R5bGVzIG9uIGBsYXN0UHJvcGAgYnV0IG5vdCBvbiBgbmV4dFByb3BgLlxuICAgICAgICAgIGZvciAoc3R5bGVOYW1lIGluIGxhc3RQcm9wKSB7XG4gICAgICAgICAgICBpZiAobGFzdFByb3AuaGFzT3duUHJvcGVydHkoc3R5bGVOYW1lKSAmJiAoIW5leHRQcm9wIHx8ICFuZXh0UHJvcC5oYXNPd25Qcm9wZXJ0eShzdHlsZU5hbWUpKSkge1xuICAgICAgICAgICAgICBzdHlsZVVwZGF0ZXMgPSBzdHlsZVVwZGF0ZXMgfHwge307XG4gICAgICAgICAgICAgIHN0eWxlVXBkYXRlc1tzdHlsZU5hbWVdID0gJyc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIFVwZGF0ZSBzdHlsZXMgdGhhdCBjaGFuZ2VkIHNpbmNlIGBsYXN0UHJvcGAuXG4gICAgICAgICAgZm9yIChzdHlsZU5hbWUgaW4gbmV4dFByb3ApIHtcbiAgICAgICAgICAgIGlmIChuZXh0UHJvcC5oYXNPd25Qcm9wZXJ0eShzdHlsZU5hbWUpICYmIGxhc3RQcm9wW3N0eWxlTmFtZV0gIT09IG5leHRQcm9wW3N0eWxlTmFtZV0pIHtcbiAgICAgICAgICAgICAgc3R5bGVVcGRhdGVzID0gc3R5bGVVcGRhdGVzIHx8IHt9O1xuICAgICAgICAgICAgICBzdHlsZVVwZGF0ZXNbc3R5bGVOYW1lXSA9IG5leHRQcm9wW3N0eWxlTmFtZV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFJlbGllcyBvbiBgdXBkYXRlU3R5bGVzQnlJRGAgbm90IG11dGF0aW5nIGBzdHlsZVVwZGF0ZXNgLlxuICAgICAgICAgIHN0eWxlVXBkYXRlcyA9IG5leHRQcm9wO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHJlZ2lzdHJhdGlvbk5hbWVNb2R1bGVzLmhhc093blByb3BlcnR5KHByb3BLZXkpKSB7XG4gICAgICAgIGlmIChuZXh0UHJvcCkge1xuICAgICAgICAgIGVucXVldWVQdXRMaXN0ZW5lcih0aGlzLCBwcm9wS2V5LCBuZXh0UHJvcCwgdHJhbnNhY3Rpb24pO1xuICAgICAgICB9IGVsc2UgaWYgKGxhc3RQcm9wKSB7XG4gICAgICAgICAgZGVsZXRlTGlzdGVuZXIodGhpcywgcHJvcEtleSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaXNDdXN0b21Db21wb25lbnQodGhpcy5fdGFnLCBuZXh0UHJvcHMpKSB7XG4gICAgICAgIGlmICghUkVTRVJWRURfUFJPUFMuaGFzT3duUHJvcGVydHkocHJvcEtleSkpIHtcbiAgICAgICAgICBET01Qcm9wZXJ0eU9wZXJhdGlvbnMuc2V0VmFsdWVGb3JBdHRyaWJ1dGUoZ2V0Tm9kZSh0aGlzKSwgcHJvcEtleSwgbmV4dFByb3ApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKERPTVByb3BlcnR5LnByb3BlcnRpZXNbcHJvcEtleV0gfHwgRE9NUHJvcGVydHkuaXNDdXN0b21BdHRyaWJ1dGUocHJvcEtleSkpIHtcbiAgICAgICAgdmFyIG5vZGUgPSBnZXROb2RlKHRoaXMpO1xuICAgICAgICAvLyBJZiB3ZSdyZSB1cGRhdGluZyB0byBudWxsIG9yIHVuZGVmaW5lZCwgd2Ugc2hvdWxkIHJlbW92ZSB0aGUgcHJvcGVydHlcbiAgICAgICAgLy8gZnJvbSB0aGUgRE9NIG5vZGUgaW5zdGVhZCBvZiBpbmFkdmVydGVudGx5IHNldHRpbmcgdG8gYSBzdHJpbmcuIFRoaXNcbiAgICAgICAgLy8gYnJpbmdzIHVzIGluIGxpbmUgd2l0aCB0aGUgc2FtZSBiZWhhdmlvciB3ZSBoYXZlIG9uIGluaXRpYWwgcmVuZGVyLlxuICAgICAgICBpZiAobmV4dFByb3AgIT0gbnVsbCkge1xuICAgICAgICAgIERPTVByb3BlcnR5T3BlcmF0aW9ucy5zZXRWYWx1ZUZvclByb3BlcnR5KG5vZGUsIHByb3BLZXksIG5leHRQcm9wKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBET01Qcm9wZXJ0eU9wZXJhdGlvbnMuZGVsZXRlVmFsdWVGb3JQcm9wZXJ0eShub2RlLCBwcm9wS2V5KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoc3R5bGVVcGRhdGVzKSB7XG4gICAgICBDU1NQcm9wZXJ0eU9wZXJhdGlvbnMuc2V0VmFsdWVGb3JTdHlsZXMoZ2V0Tm9kZSh0aGlzKSwgc3R5bGVVcGRhdGVzLCB0aGlzKTtcbiAgICB9XG4gIH0sXG5cbiAgLyoqXG4gICAqIFJlY29uY2lsZXMgdGhlIGNoaWxkcmVuIHdpdGggdGhlIHZhcmlvdXMgcHJvcGVydGllcyB0aGF0IGFmZmVjdCB0aGVcbiAgICogY2hpbGRyZW4gY29udGVudC5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IGxhc3RQcm9wc1xuICAgKiBAcGFyYW0ge29iamVjdH0gbmV4dFByb3BzXG4gICAqIEBwYXJhbSB7UmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvbn0gdHJhbnNhY3Rpb25cbiAgICogQHBhcmFtIHtvYmplY3R9IGNvbnRleHRcbiAgICovXG4gIF91cGRhdGVET01DaGlsZHJlbjogZnVuY3Rpb24gKGxhc3RQcm9wcywgbmV4dFByb3BzLCB0cmFuc2FjdGlvbiwgY29udGV4dCkge1xuICAgIHZhciBsYXN0Q29udGVudCA9IENPTlRFTlRfVFlQRVNbdHlwZW9mIGxhc3RQcm9wcy5jaGlsZHJlbl0gPyBsYXN0UHJvcHMuY2hpbGRyZW4gOiBudWxsO1xuICAgIHZhciBuZXh0Q29udGVudCA9IENPTlRFTlRfVFlQRVNbdHlwZW9mIG5leHRQcm9wcy5jaGlsZHJlbl0gPyBuZXh0UHJvcHMuY2hpbGRyZW4gOiBudWxsO1xuXG4gICAgdmFyIGxhc3RIdG1sID0gbGFzdFByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MICYmIGxhc3RQcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTC5fX2h0bWw7XG4gICAgdmFyIG5leHRIdG1sID0gbmV4dFByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MICYmIG5leHRQcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTC5fX2h0bWw7XG5cbiAgICAvLyBOb3RlIHRoZSB1c2Ugb2YgYCE9YCB3aGljaCBjaGVja3MgZm9yIG51bGwgb3IgdW5kZWZpbmVkLlxuICAgIHZhciBsYXN0Q2hpbGRyZW4gPSBsYXN0Q29udGVudCAhPSBudWxsID8gbnVsbCA6IGxhc3RQcm9wcy5jaGlsZHJlbjtcbiAgICB2YXIgbmV4dENoaWxkcmVuID0gbmV4dENvbnRlbnQgIT0gbnVsbCA/IG51bGwgOiBuZXh0UHJvcHMuY2hpbGRyZW47XG5cbiAgICAvLyBJZiB3ZSdyZSBzd2l0Y2hpbmcgZnJvbSBjaGlsZHJlbiB0byBjb250ZW50L2h0bWwgb3IgdmljZSB2ZXJzYSwgcmVtb3ZlXG4gICAgLy8gdGhlIG9sZCBjb250ZW50XG4gICAgdmFyIGxhc3RIYXNDb250ZW50T3JIdG1sID0gbGFzdENvbnRlbnQgIT0gbnVsbCB8fCBsYXN0SHRtbCAhPSBudWxsO1xuICAgIHZhciBuZXh0SGFzQ29udGVudE9ySHRtbCA9IG5leHRDb250ZW50ICE9IG51bGwgfHwgbmV4dEh0bWwgIT0gbnVsbDtcbiAgICBpZiAobGFzdENoaWxkcmVuICE9IG51bGwgJiYgbmV4dENoaWxkcmVuID09IG51bGwpIHtcbiAgICAgIHRoaXMudXBkYXRlQ2hpbGRyZW4obnVsbCwgdHJhbnNhY3Rpb24sIGNvbnRleHQpO1xuICAgIH0gZWxzZSBpZiAobGFzdEhhc0NvbnRlbnRPckh0bWwgJiYgIW5leHRIYXNDb250ZW50T3JIdG1sKSB7XG4gICAgICB0aGlzLnVwZGF0ZVRleHRDb250ZW50KCcnKTtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIFJlYWN0SW5zdHJ1bWVudGF0aW9uLmRlYnVnVG9vbC5vblNldENoaWxkcmVuKHRoaXMuX2RlYnVnSUQsIFtdKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobmV4dENvbnRlbnQgIT0gbnVsbCkge1xuICAgICAgaWYgKGxhc3RDb250ZW50ICE9PSBuZXh0Q29udGVudCkge1xuICAgICAgICB0aGlzLnVwZGF0ZVRleHRDb250ZW50KCcnICsgbmV4dENvbnRlbnQpO1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgIHNldEFuZFZhbGlkYXRlQ29udGVudENoaWxkRGV2LmNhbGwodGhpcywgbmV4dENvbnRlbnQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChuZXh0SHRtbCAhPSBudWxsKSB7XG4gICAgICBpZiAobGFzdEh0bWwgIT09IG5leHRIdG1sKSB7XG4gICAgICAgIHRoaXMudXBkYXRlTWFya3VwKCcnICsgbmV4dEh0bWwpO1xuICAgICAgfVxuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgUmVhY3RJbnN0cnVtZW50YXRpb24uZGVidWdUb29sLm9uU2V0Q2hpbGRyZW4odGhpcy5fZGVidWdJRCwgW10pO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAobmV4dENoaWxkcmVuICE9IG51bGwpIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIHNldEFuZFZhbGlkYXRlQ29udGVudENoaWxkRGV2LmNhbGwodGhpcywgbnVsbCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMudXBkYXRlQ2hpbGRyZW4obmV4dENoaWxkcmVuLCB0cmFuc2FjdGlvbiwgY29udGV4dCk7XG4gICAgfVxuICB9LFxuXG4gIGdldEhvc3ROb2RlOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGdldE5vZGUodGhpcyk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIERlc3Ryb3lzIGFsbCBldmVudCByZWdpc3RyYXRpb25zIGZvciB0aGlzIGluc3RhbmNlLiBEb2VzIG5vdCByZW1vdmUgZnJvbVxuICAgKiB0aGUgRE9NLiBUaGF0IG11c3QgYmUgZG9uZSBieSB0aGUgcGFyZW50LlxuICAgKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHVubW91bnRDb21wb25lbnQ6IGZ1bmN0aW9uIChzYWZlbHkpIHtcbiAgICBzd2l0Y2ggKHRoaXMuX3RhZykge1xuICAgICAgY2FzZSAnYXVkaW8nOlxuICAgICAgY2FzZSAnZm9ybSc6XG4gICAgICBjYXNlICdpZnJhbWUnOlxuICAgICAgY2FzZSAnaW1nJzpcbiAgICAgIGNhc2UgJ2xpbmsnOlxuICAgICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgIGNhc2UgJ3NvdXJjZSc6XG4gICAgICBjYXNlICd2aWRlbyc6XG4gICAgICAgIHZhciBsaXN0ZW5lcnMgPSB0aGlzLl93cmFwcGVyU3RhdGUubGlzdGVuZXJzO1xuICAgICAgICBpZiAobGlzdGVuZXJzKSB7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0ZW5lcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGxpc3RlbmVyc1tpXS5yZW1vdmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdpbnB1dCc6XG4gICAgICBjYXNlICd0ZXh0YXJlYSc6XG4gICAgICAgIGlucHV0VmFsdWVUcmFja2luZy5zdG9wVHJhY2tpbmcodGhpcyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnaHRtbCc6XG4gICAgICBjYXNlICdoZWFkJzpcbiAgICAgIGNhc2UgJ2JvZHknOlxuICAgICAgICAvKipcbiAgICAgICAgICogQ29tcG9uZW50cyBsaWtlIDxodG1sPiA8aGVhZD4gYW5kIDxib2R5PiBjYW4ndCBiZSByZW1vdmVkIG9yIGFkZGVkXG4gICAgICAgICAqIGVhc2lseSBpbiBhIGNyb3NzLWJyb3dzZXIgd2F5LCBob3dldmVyIGl0J3MgdmFsdWFibGUgdG8gYmUgYWJsZSB0b1xuICAgICAgICAgKiB0YWtlIGFkdmFudGFnZSBvZiBSZWFjdCdzIHJlY29uY2lsaWF0aW9uIGZvciBzdHlsaW5nIGFuZCA8dGl0bGU+XG4gICAgICAgICAqIG1hbmFnZW1lbnQuIFNvIHdlIGp1c3QgZG9jdW1lbnQgaXQgYW5kIHRocm93IGluIGRhbmdlcm91cyBjYXNlcy5cbiAgICAgICAgICovXG4gICAgICAgICFmYWxzZSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICc8JXM+IHRyaWVkIHRvIHVubW91bnQuIEJlY2F1c2Ugb2YgY3Jvc3MtYnJvd3NlciBxdWlya3MgaXQgaXMgaW1wb3NzaWJsZSB0byB1bm1vdW50IHNvbWUgdG9wLWxldmVsIGNvbXBvbmVudHMgKGVnIDxodG1sPiwgPGhlYWQ+LCBhbmQgPGJvZHk+KSByZWxpYWJseSBhbmQgZWZmaWNpZW50bHkuIFRvIGZpeCB0aGlzLCBoYXZlIGEgc2luZ2xlIHRvcC1sZXZlbCBjb21wb25lbnQgdGhhdCBuZXZlciB1bm1vdW50cyByZW5kZXIgdGhlc2UgZWxlbWVudHMuJywgdGhpcy5fdGFnKSA6IF9wcm9kSW52YXJpYW50KCc2NicsIHRoaXMuX3RhZykgOiB2b2lkIDA7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHRoaXMudW5tb3VudENoaWxkcmVuKHNhZmVseSk7XG4gICAgUmVhY3RET01Db21wb25lbnRUcmVlLnVuY2FjaGVOb2RlKHRoaXMpO1xuICAgIEV2ZW50UGx1Z2luSHViLmRlbGV0ZUFsbExpc3RlbmVycyh0aGlzKTtcbiAgICB0aGlzLl9yb290Tm9kZUlEID0gMDtcbiAgICB0aGlzLl9kb21JRCA9IDA7XG4gICAgdGhpcy5fd3JhcHBlclN0YXRlID0gbnVsbDtcblxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBzZXRBbmRWYWxpZGF0ZUNvbnRlbnRDaGlsZERldi5jYWxsKHRoaXMsIG51bGwpO1xuICAgIH1cbiAgfSxcblxuICBnZXRQdWJsaWNJbnN0YW5jZTogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBnZXROb2RlKHRoaXMpO1xuICB9XG59O1xuXG5fYXNzaWduKFJlYWN0RE9NQ29tcG9uZW50LnByb3RvdHlwZSwgUmVhY3RET01Db21wb25lbnQuTWl4aW4sIFJlYWN0TXVsdGlDaGlsZC5NaXhpbik7XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RET01Db21wb25lbnQ7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1kb20vbGliL1JlYWN0RE9NQ29tcG9uZW50LmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIHZhbGlkYXRlRE9NTmVzdGluZyA9IHJlcXVpcmUoJy4vdmFsaWRhdGVET01OZXN0aW5nJyk7XG5cbnZhciBET0NfTk9ERV9UWVBFID0gOTtcblxuZnVuY3Rpb24gUmVhY3RET01Db250YWluZXJJbmZvKHRvcExldmVsV3JhcHBlciwgbm9kZSkge1xuICB2YXIgaW5mbyA9IHtcbiAgICBfdG9wTGV2ZWxXcmFwcGVyOiB0b3BMZXZlbFdyYXBwZXIsXG4gICAgX2lkQ291bnRlcjogMSxcbiAgICBfb3duZXJEb2N1bWVudDogbm9kZSA/IG5vZGUubm9kZVR5cGUgPT09IERPQ19OT0RFX1RZUEUgPyBub2RlIDogbm9kZS5vd25lckRvY3VtZW50IDogbnVsbCxcbiAgICBfbm9kZTogbm9kZSxcbiAgICBfdGFnOiBub2RlID8gbm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpIDogbnVsbCxcbiAgICBfbmFtZXNwYWNlVVJJOiBub2RlID8gbm9kZS5uYW1lc3BhY2VVUkkgOiBudWxsXG4gIH07XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgaW5mby5fYW5jZXN0b3JJbmZvID0gbm9kZSA/IHZhbGlkYXRlRE9NTmVzdGluZy51cGRhdGVkQW5jZXN0b3JJbmZvKG51bGwsIGluZm8uX3RhZywgbnVsbCkgOiBudWxsO1xuICB9XG4gIHJldHVybiBpbmZvO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0RE9NQ29udGFpbmVySW5mbztcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3JlYWN0LWRvbS9saWIvUmVhY3RET01Db250YWluZXJJbmZvLmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxNC1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIF9hc3NpZ24gPSByZXF1aXJlKCdvYmplY3QtYXNzaWduJyk7XG5cbnZhciBET01MYXp5VHJlZSA9IHJlcXVpcmUoJy4vRE9NTGF6eVRyZWUnKTtcbnZhciBSZWFjdERPTUNvbXBvbmVudFRyZWUgPSByZXF1aXJlKCcuL1JlYWN0RE9NQ29tcG9uZW50VHJlZScpO1xuXG52YXIgUmVhY3RET01FbXB0eUNvbXBvbmVudCA9IGZ1bmN0aW9uIChpbnN0YW50aWF0ZSkge1xuICAvLyBSZWFjdENvbXBvc2l0ZUNvbXBvbmVudCB1c2VzIHRoaXM6XG4gIHRoaXMuX2N1cnJlbnRFbGVtZW50ID0gbnVsbDtcbiAgLy8gUmVhY3RET01Db21wb25lbnRUcmVlIHVzZXMgdGhlc2U6XG4gIHRoaXMuX2hvc3ROb2RlID0gbnVsbDtcbiAgdGhpcy5faG9zdFBhcmVudCA9IG51bGw7XG4gIHRoaXMuX2hvc3RDb250YWluZXJJbmZvID0gbnVsbDtcbiAgdGhpcy5fZG9tSUQgPSAwO1xufTtcbl9hc3NpZ24oUmVhY3RET01FbXB0eUNvbXBvbmVudC5wcm90b3R5cGUsIHtcbiAgbW91bnRDb21wb25lbnQ6IGZ1bmN0aW9uICh0cmFuc2FjdGlvbiwgaG9zdFBhcmVudCwgaG9zdENvbnRhaW5lckluZm8sIGNvbnRleHQpIHtcbiAgICB2YXIgZG9tSUQgPSBob3N0Q29udGFpbmVySW5mby5faWRDb3VudGVyKys7XG4gICAgdGhpcy5fZG9tSUQgPSBkb21JRDtcbiAgICB0aGlzLl9ob3N0UGFyZW50ID0gaG9zdFBhcmVudDtcbiAgICB0aGlzLl9ob3N0Q29udGFpbmVySW5mbyA9IGhvc3RDb250YWluZXJJbmZvO1xuXG4gICAgdmFyIG5vZGVWYWx1ZSA9ICcgcmVhY3QtZW1wdHk6ICcgKyB0aGlzLl9kb21JRCArICcgJztcbiAgICBpZiAodHJhbnNhY3Rpb24udXNlQ3JlYXRlRWxlbWVudCkge1xuICAgICAgdmFyIG93bmVyRG9jdW1lbnQgPSBob3N0Q29udGFpbmVySW5mby5fb3duZXJEb2N1bWVudDtcbiAgICAgIHZhciBub2RlID0gb3duZXJEb2N1bWVudC5jcmVhdGVDb21tZW50KG5vZGVWYWx1ZSk7XG4gICAgICBSZWFjdERPTUNvbXBvbmVudFRyZWUucHJlY2FjaGVOb2RlKHRoaXMsIG5vZGUpO1xuICAgICAgcmV0dXJuIERPTUxhenlUcmVlKG5vZGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodHJhbnNhY3Rpb24ucmVuZGVyVG9TdGF0aWNNYXJrdXApIHtcbiAgICAgICAgLy8gTm9ybWFsbHkgd2UnZCBpbnNlcnQgYSBjb21tZW50IG5vZGUsIGJ1dCBzaW5jZSB0aGlzIGlzIGEgc2l0dWF0aW9uXG4gICAgICAgIC8vIHdoZXJlIFJlYWN0IHdvbid0IHRha2Ugb3ZlciAoc3RhdGljIHBhZ2VzKSwgd2UgY2FuIHNpbXBseSByZXR1cm5cbiAgICAgICAgLy8gbm90aGluZy5cbiAgICAgICAgcmV0dXJuICcnO1xuICAgICAgfVxuICAgICAgcmV0dXJuICc8IS0tJyArIG5vZGVWYWx1ZSArICctLT4nO1xuICAgIH1cbiAgfSxcbiAgcmVjZWl2ZUNvbXBvbmVudDogZnVuY3Rpb24gKCkge30sXG4gIGdldEhvc3ROb2RlOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIFJlYWN0RE9NQ29tcG9uZW50VHJlZS5nZXROb2RlRnJvbUluc3RhbmNlKHRoaXMpO1xuICB9LFxuICB1bm1vdW50Q29tcG9uZW50OiBmdW5jdGlvbiAoKSB7XG4gICAgUmVhY3RET01Db21wb25lbnRUcmVlLnVuY2FjaGVOb2RlKHRoaXMpO1xuICB9XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdERPTUVtcHR5Q29tcG9uZW50O1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QtZG9tL2xpYi9SZWFjdERPTUVtcHR5Q29tcG9uZW50LmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0RE9NRmVhdHVyZUZsYWdzID0ge1xuICB1c2VDcmVhdGVFbGVtZW50OiB0cnVlLFxuICB1c2VGaWJlcjogZmFsc2Vcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RET01GZWF0dXJlRmxhZ3M7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1kb20vbGliL1JlYWN0RE9NRmVhdHVyZUZsYWdzLmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIERPTUNoaWxkcmVuT3BlcmF0aW9ucyA9IHJlcXVpcmUoJy4vRE9NQ2hpbGRyZW5PcGVyYXRpb25zJyk7XG52YXIgUmVhY3RET01Db21wb25lbnRUcmVlID0gcmVxdWlyZSgnLi9SZWFjdERPTUNvbXBvbmVudFRyZWUnKTtcblxuLyoqXG4gKiBPcGVyYXRpb25zIHVzZWQgdG8gcHJvY2VzcyB1cGRhdGVzIHRvIERPTSBub2Rlcy5cbiAqL1xudmFyIFJlYWN0RE9NSURPcGVyYXRpb25zID0ge1xuICAvKipcbiAgICogVXBkYXRlcyBhIGNvbXBvbmVudCdzIGNoaWxkcmVuIGJ5IHByb2Nlc3NpbmcgYSBzZXJpZXMgb2YgdXBkYXRlcy5cbiAgICpcbiAgICogQHBhcmFtIHthcnJheTxvYmplY3Q+fSB1cGRhdGVzIExpc3Qgb2YgdXBkYXRlIGNvbmZpZ3VyYXRpb25zLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGRhbmdlcm91c2x5UHJvY2Vzc0NoaWxkcmVuVXBkYXRlczogZnVuY3Rpb24gKHBhcmVudEluc3QsIHVwZGF0ZXMpIHtcbiAgICB2YXIgbm9kZSA9IFJlYWN0RE9NQ29tcG9uZW50VHJlZS5nZXROb2RlRnJvbUluc3RhbmNlKHBhcmVudEluc3QpO1xuICAgIERPTUNoaWxkcmVuT3BlcmF0aW9ucy5wcm9jZXNzVXBkYXRlcyhub2RlLCB1cGRhdGVzKTtcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdERPTUlET3BlcmF0aW9ucztcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3JlYWN0LWRvbS9saWIvUmVhY3RET01JRE9wZXJhdGlvbnMuanMiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgX3Byb2RJbnZhcmlhbnQgPSByZXF1aXJlKCcuL3JlYWN0UHJvZEludmFyaWFudCcpLFxuICAgIF9hc3NpZ24gPSByZXF1aXJlKCdvYmplY3QtYXNzaWduJyk7XG5cbnZhciBET01Qcm9wZXJ0eU9wZXJhdGlvbnMgPSByZXF1aXJlKCcuL0RPTVByb3BlcnR5T3BlcmF0aW9ucycpO1xudmFyIExpbmtlZFZhbHVlVXRpbHMgPSByZXF1aXJlKCcuL0xpbmtlZFZhbHVlVXRpbHMnKTtcbnZhciBSZWFjdERPTUNvbXBvbmVudFRyZWUgPSByZXF1aXJlKCcuL1JlYWN0RE9NQ29tcG9uZW50VHJlZScpO1xudmFyIFJlYWN0VXBkYXRlcyA9IHJlcXVpcmUoJy4vUmVhY3RVcGRhdGVzJyk7XG5cbnZhciBpbnZhcmlhbnQgPSByZXF1aXJlKCdmYmpzL2xpYi9pbnZhcmlhbnQnKTtcbnZhciB3YXJuaW5nID0gcmVxdWlyZSgnZmJqcy9saWIvd2FybmluZycpO1xuXG52YXIgZGlkV2FyblZhbHVlTGluayA9IGZhbHNlO1xudmFyIGRpZFdhcm5DaGVja2VkTGluayA9IGZhbHNlO1xudmFyIGRpZFdhcm5WYWx1ZURlZmF1bHRWYWx1ZSA9IGZhbHNlO1xudmFyIGRpZFdhcm5DaGVja2VkRGVmYXVsdENoZWNrZWQgPSBmYWxzZTtcbnZhciBkaWRXYXJuQ29udHJvbGxlZFRvVW5jb250cm9sbGVkID0gZmFsc2U7XG52YXIgZGlkV2FyblVuY29udHJvbGxlZFRvQ29udHJvbGxlZCA9IGZhbHNlO1xuXG5mdW5jdGlvbiBmb3JjZVVwZGF0ZUlmTW91bnRlZCgpIHtcbiAgaWYgKHRoaXMuX3Jvb3ROb2RlSUQpIHtcbiAgICAvLyBET00gY29tcG9uZW50IGlzIHN0aWxsIG1vdW50ZWQ7IHVwZGF0ZVxuICAgIFJlYWN0RE9NSW5wdXQudXBkYXRlV3JhcHBlcih0aGlzKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc0NvbnRyb2xsZWQocHJvcHMpIHtcbiAgdmFyIHVzZXNDaGVja2VkID0gcHJvcHMudHlwZSA9PT0gJ2NoZWNrYm94JyB8fCBwcm9wcy50eXBlID09PSAncmFkaW8nO1xuICByZXR1cm4gdXNlc0NoZWNrZWQgPyBwcm9wcy5jaGVja2VkICE9IG51bGwgOiBwcm9wcy52YWx1ZSAhPSBudWxsO1xufVxuXG4vKipcbiAqIEltcGxlbWVudHMgYW4gPGlucHV0PiBob3N0IGNvbXBvbmVudCB0aGF0IGFsbG93cyBzZXR0aW5nIHRoZXNlIG9wdGlvbmFsXG4gKiBwcm9wczogYGNoZWNrZWRgLCBgdmFsdWVgLCBgZGVmYXVsdENoZWNrZWRgLCBhbmQgYGRlZmF1bHRWYWx1ZWAuXG4gKlxuICogSWYgYGNoZWNrZWRgIG9yIGB2YWx1ZWAgYXJlIG5vdCBzdXBwbGllZCAob3IgbnVsbC91bmRlZmluZWQpLCB1c2VyIGFjdGlvbnNcbiAqIHRoYXQgYWZmZWN0IHRoZSBjaGVja2VkIHN0YXRlIG9yIHZhbHVlIHdpbGwgdHJpZ2dlciB1cGRhdGVzIHRvIHRoZSBlbGVtZW50LlxuICpcbiAqIElmIHRoZXkgYXJlIHN1cHBsaWVkIChhbmQgbm90IG51bGwvdW5kZWZpbmVkKSwgdGhlIHJlbmRlcmVkIGVsZW1lbnQgd2lsbCBub3RcbiAqIHRyaWdnZXIgdXBkYXRlcyB0byB0aGUgZWxlbWVudC4gSW5zdGVhZCwgdGhlIHByb3BzIG11c3QgY2hhbmdlIGluIG9yZGVyIGZvclxuICogdGhlIHJlbmRlcmVkIGVsZW1lbnQgdG8gYmUgdXBkYXRlZC5cbiAqXG4gKiBUaGUgcmVuZGVyZWQgZWxlbWVudCB3aWxsIGJlIGluaXRpYWxpemVkIGFzIHVuY2hlY2tlZCAob3IgYGRlZmF1bHRDaGVja2VkYClcbiAqIHdpdGggYW4gZW1wdHkgdmFsdWUgKG9yIGBkZWZhdWx0VmFsdWVgKS5cbiAqXG4gKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTIvV0QtaHRtbDUtMjAxMjEwMjUvdGhlLWlucHV0LWVsZW1lbnQuaHRtbFxuICovXG52YXIgUmVhY3RET01JbnB1dCA9IHtcbiAgZ2V0SG9zdFByb3BzOiBmdW5jdGlvbiAoaW5zdCwgcHJvcHMpIHtcbiAgICB2YXIgdmFsdWUgPSBMaW5rZWRWYWx1ZVV0aWxzLmdldFZhbHVlKHByb3BzKTtcbiAgICB2YXIgY2hlY2tlZCA9IExpbmtlZFZhbHVlVXRpbHMuZ2V0Q2hlY2tlZChwcm9wcyk7XG5cbiAgICB2YXIgaG9zdFByb3BzID0gX2Fzc2lnbih7XG4gICAgICAvLyBNYWtlIHN1cmUgd2Ugc2V0IC50eXBlIGJlZm9yZSBhbnkgb3RoZXIgcHJvcGVydGllcyAoc2V0dGluZyAudmFsdWVcbiAgICAgIC8vIGJlZm9yZSAudHlwZSBtZWFucyAudmFsdWUgaXMgbG9zdCBpbiBJRTExIGFuZCBiZWxvdylcbiAgICAgIHR5cGU6IHVuZGVmaW5lZCxcbiAgICAgIC8vIE1ha2Ugc3VyZSB3ZSBzZXQgLnN0ZXAgYmVmb3JlIC52YWx1ZSAoc2V0dGluZyAudmFsdWUgYmVmb3JlIC5zdGVwXG4gICAgICAvLyBtZWFucyAudmFsdWUgaXMgcm91bmRlZCBvbiBtb3VudCwgYmFzZWQgdXBvbiBzdGVwIHByZWNpc2lvbilcbiAgICAgIHN0ZXA6IHVuZGVmaW5lZCxcbiAgICAgIC8vIE1ha2Ugc3VyZSB3ZSBzZXQgLm1pbiAmIC5tYXggYmVmb3JlIC52YWx1ZSAodG8gZW5zdXJlIHByb3BlciBvcmRlclxuICAgICAgLy8gaW4gY29ybmVyIGNhc2VzIHN1Y2ggYXMgbWluIG9yIG1heCBkZXJpdmluZyBmcm9tIHZhbHVlLCBlLmcuIElzc3VlICM3MTcwKVxuICAgICAgbWluOiB1bmRlZmluZWQsXG4gICAgICBtYXg6IHVuZGVmaW5lZFxuICAgIH0sIHByb3BzLCB7XG4gICAgICBkZWZhdWx0Q2hlY2tlZDogdW5kZWZpbmVkLFxuICAgICAgZGVmYXVsdFZhbHVlOiB1bmRlZmluZWQsXG4gICAgICB2YWx1ZTogdmFsdWUgIT0gbnVsbCA/IHZhbHVlIDogaW5zdC5fd3JhcHBlclN0YXRlLmluaXRpYWxWYWx1ZSxcbiAgICAgIGNoZWNrZWQ6IGNoZWNrZWQgIT0gbnVsbCA/IGNoZWNrZWQgOiBpbnN0Ll93cmFwcGVyU3RhdGUuaW5pdGlhbENoZWNrZWQsXG4gICAgICBvbkNoYW5nZTogaW5zdC5fd3JhcHBlclN0YXRlLm9uQ2hhbmdlXG4gICAgfSk7XG5cbiAgICByZXR1cm4gaG9zdFByb3BzO1xuICB9LFxuXG4gIG1vdW50V3JhcHBlcjogZnVuY3Rpb24gKGluc3QsIHByb3BzKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIExpbmtlZFZhbHVlVXRpbHMuY2hlY2tQcm9wVHlwZXMoJ2lucHV0JywgcHJvcHMsIGluc3QuX2N1cnJlbnRFbGVtZW50Ll9vd25lcik7XG5cbiAgICAgIHZhciBvd25lciA9IGluc3QuX2N1cnJlbnRFbGVtZW50Ll9vd25lcjtcblxuICAgICAgaWYgKHByb3BzLnZhbHVlTGluayAhPT0gdW5kZWZpbmVkICYmICFkaWRXYXJuVmFsdWVMaW5rKSB7XG4gICAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKGZhbHNlLCAnYHZhbHVlTGlua2AgcHJvcCBvbiBgaW5wdXRgIGlzIGRlcHJlY2F0ZWQ7IHNldCBgdmFsdWVgIGFuZCBgb25DaGFuZ2VgIGluc3RlYWQuJykgOiB2b2lkIDA7XG4gICAgICAgIGRpZFdhcm5WYWx1ZUxpbmsgPSB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKHByb3BzLmNoZWNrZWRMaW5rICE9PSB1bmRlZmluZWQgJiYgIWRpZFdhcm5DaGVja2VkTGluaykge1xuICAgICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyhmYWxzZSwgJ2BjaGVja2VkTGlua2AgcHJvcCBvbiBgaW5wdXRgIGlzIGRlcHJlY2F0ZWQ7IHNldCBgdmFsdWVgIGFuZCBgb25DaGFuZ2VgIGluc3RlYWQuJykgOiB2b2lkIDA7XG4gICAgICAgIGRpZFdhcm5DaGVja2VkTGluayA9IHRydWU7XG4gICAgICB9XG4gICAgICBpZiAocHJvcHMuY2hlY2tlZCAhPT0gdW5kZWZpbmVkICYmIHByb3BzLmRlZmF1bHRDaGVja2VkICE9PSB1bmRlZmluZWQgJiYgIWRpZFdhcm5DaGVja2VkRGVmYXVsdENoZWNrZWQpIHtcbiAgICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcoZmFsc2UsICclcyBjb250YWlucyBhbiBpbnB1dCBvZiB0eXBlICVzIHdpdGggYm90aCBjaGVja2VkIGFuZCBkZWZhdWx0Q2hlY2tlZCBwcm9wcy4gJyArICdJbnB1dCBlbGVtZW50cyBtdXN0IGJlIGVpdGhlciBjb250cm9sbGVkIG9yIHVuY29udHJvbGxlZCAnICsgJyhzcGVjaWZ5IGVpdGhlciB0aGUgY2hlY2tlZCBwcm9wLCBvciB0aGUgZGVmYXVsdENoZWNrZWQgcHJvcCwgYnV0IG5vdCAnICsgJ2JvdGgpLiBEZWNpZGUgYmV0d2VlbiB1c2luZyBhIGNvbnRyb2xsZWQgb3IgdW5jb250cm9sbGVkIGlucHV0ICcgKyAnZWxlbWVudCBhbmQgcmVtb3ZlIG9uZSBvZiB0aGVzZSBwcm9wcy4gTW9yZSBpbmZvOiAnICsgJ2h0dHBzOi8vZmIubWUvcmVhY3QtY29udHJvbGxlZC1jb21wb25lbnRzJywgb3duZXIgJiYgb3duZXIuZ2V0TmFtZSgpIHx8ICdBIGNvbXBvbmVudCcsIHByb3BzLnR5cGUpIDogdm9pZCAwO1xuICAgICAgICBkaWRXYXJuQ2hlY2tlZERlZmF1bHRDaGVja2VkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wcy52YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHByb3BzLmRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkICYmICFkaWRXYXJuVmFsdWVEZWZhdWx0VmFsdWUpIHtcbiAgICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcoZmFsc2UsICclcyBjb250YWlucyBhbiBpbnB1dCBvZiB0eXBlICVzIHdpdGggYm90aCB2YWx1ZSBhbmQgZGVmYXVsdFZhbHVlIHByb3BzLiAnICsgJ0lucHV0IGVsZW1lbnRzIG11c3QgYmUgZWl0aGVyIGNvbnRyb2xsZWQgb3IgdW5jb250cm9sbGVkICcgKyAnKHNwZWNpZnkgZWl0aGVyIHRoZSB2YWx1ZSBwcm9wLCBvciB0aGUgZGVmYXVsdFZhbHVlIHByb3AsIGJ1dCBub3QgJyArICdib3RoKS4gRGVjaWRlIGJldHdlZW4gdXNpbmcgYSBjb250cm9sbGVkIG9yIHVuY29udHJvbGxlZCBpbnB1dCAnICsgJ2VsZW1lbnQgYW5kIHJlbW92ZSBvbmUgb2YgdGhlc2UgcHJvcHMuIE1vcmUgaW5mbzogJyArICdodHRwczovL2ZiLm1lL3JlYWN0LWNvbnRyb2xsZWQtY29tcG9uZW50cycsIG93bmVyICYmIG93bmVyLmdldE5hbWUoKSB8fCAnQSBjb21wb25lbnQnLCBwcm9wcy50eXBlKSA6IHZvaWQgMDtcbiAgICAgICAgZGlkV2FyblZhbHVlRGVmYXVsdFZhbHVlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgZGVmYXVsdFZhbHVlID0gcHJvcHMuZGVmYXVsdFZhbHVlO1xuICAgIGluc3QuX3dyYXBwZXJTdGF0ZSA9IHtcbiAgICAgIGluaXRpYWxDaGVja2VkOiBwcm9wcy5jaGVja2VkICE9IG51bGwgPyBwcm9wcy5jaGVja2VkIDogcHJvcHMuZGVmYXVsdENoZWNrZWQsXG4gICAgICBpbml0aWFsVmFsdWU6IHByb3BzLnZhbHVlICE9IG51bGwgPyBwcm9wcy52YWx1ZSA6IGRlZmF1bHRWYWx1ZSxcbiAgICAgIGxpc3RlbmVyczogbnVsbCxcbiAgICAgIG9uQ2hhbmdlOiBfaGFuZGxlQ2hhbmdlLmJpbmQoaW5zdCksXG4gICAgICBjb250cm9sbGVkOiBpc0NvbnRyb2xsZWQocHJvcHMpXG4gICAgfTtcbiAgfSxcblxuICB1cGRhdGVXcmFwcGVyOiBmdW5jdGlvbiAoaW5zdCkge1xuICAgIHZhciBwcm9wcyA9IGluc3QuX2N1cnJlbnRFbGVtZW50LnByb3BzO1xuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIHZhciBjb250cm9sbGVkID0gaXNDb250cm9sbGVkKHByb3BzKTtcbiAgICAgIHZhciBvd25lciA9IGluc3QuX2N1cnJlbnRFbGVtZW50Ll9vd25lcjtcblxuICAgICAgaWYgKCFpbnN0Ll93cmFwcGVyU3RhdGUuY29udHJvbGxlZCAmJiBjb250cm9sbGVkICYmICFkaWRXYXJuVW5jb250cm9sbGVkVG9Db250cm9sbGVkKSB7XG4gICAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKGZhbHNlLCAnJXMgaXMgY2hhbmdpbmcgYW4gdW5jb250cm9sbGVkIGlucHV0IG9mIHR5cGUgJXMgdG8gYmUgY29udHJvbGxlZC4gJyArICdJbnB1dCBlbGVtZW50cyBzaG91bGQgbm90IHN3aXRjaCBmcm9tIHVuY29udHJvbGxlZCB0byBjb250cm9sbGVkIChvciB2aWNlIHZlcnNhKS4gJyArICdEZWNpZGUgYmV0d2VlbiB1c2luZyBhIGNvbnRyb2xsZWQgb3IgdW5jb250cm9sbGVkIGlucHV0ICcgKyAnZWxlbWVudCBmb3IgdGhlIGxpZmV0aW1lIG9mIHRoZSBjb21wb25lbnQuIE1vcmUgaW5mbzogaHR0cHM6Ly9mYi5tZS9yZWFjdC1jb250cm9sbGVkLWNvbXBvbmVudHMnLCBvd25lciAmJiBvd25lci5nZXROYW1lKCkgfHwgJ0EgY29tcG9uZW50JywgcHJvcHMudHlwZSkgOiB2b2lkIDA7XG4gICAgICAgIGRpZFdhcm5VbmNvbnRyb2xsZWRUb0NvbnRyb2xsZWQgPSB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKGluc3QuX3dyYXBwZXJTdGF0ZS5jb250cm9sbGVkICYmICFjb250cm9sbGVkICYmICFkaWRXYXJuQ29udHJvbGxlZFRvVW5jb250cm9sbGVkKSB7XG4gICAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKGZhbHNlLCAnJXMgaXMgY2hhbmdpbmcgYSBjb250cm9sbGVkIGlucHV0IG9mIHR5cGUgJXMgdG8gYmUgdW5jb250cm9sbGVkLiAnICsgJ0lucHV0IGVsZW1lbnRzIHNob3VsZCBub3Qgc3dpdGNoIGZyb20gY29udHJvbGxlZCB0byB1bmNvbnRyb2xsZWQgKG9yIHZpY2UgdmVyc2EpLiAnICsgJ0RlY2lkZSBiZXR3ZWVuIHVzaW5nIGEgY29udHJvbGxlZCBvciB1bmNvbnRyb2xsZWQgaW5wdXQgJyArICdlbGVtZW50IGZvciB0aGUgbGlmZXRpbWUgb2YgdGhlIGNvbXBvbmVudC4gTW9yZSBpbmZvOiBodHRwczovL2ZiLm1lL3JlYWN0LWNvbnRyb2xsZWQtY29tcG9uZW50cycsIG93bmVyICYmIG93bmVyLmdldE5hbWUoKSB8fCAnQSBjb21wb25lbnQnLCBwcm9wcy50eXBlKSA6IHZvaWQgMDtcbiAgICAgICAgZGlkV2FybkNvbnRyb2xsZWRUb1VuY29udHJvbGxlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVE9ETzogU2hvdWxkbid0IHRoaXMgYmUgZ2V0Q2hlY2tlZChwcm9wcyk/XG4gICAgdmFyIGNoZWNrZWQgPSBwcm9wcy5jaGVja2VkO1xuICAgIGlmIChjaGVja2VkICE9IG51bGwpIHtcbiAgICAgIERPTVByb3BlcnR5T3BlcmF0aW9ucy5zZXRWYWx1ZUZvclByb3BlcnR5KFJlYWN0RE9NQ29tcG9uZW50VHJlZS5nZXROb2RlRnJvbUluc3RhbmNlKGluc3QpLCAnY2hlY2tlZCcsIGNoZWNrZWQgfHwgZmFsc2UpO1xuICAgIH1cblxuICAgIHZhciBub2RlID0gUmVhY3RET01Db21wb25lbnRUcmVlLmdldE5vZGVGcm9tSW5zdGFuY2UoaW5zdCk7XG4gICAgdmFyIHZhbHVlID0gTGlua2VkVmFsdWVVdGlscy5nZXRWYWx1ZShwcm9wcyk7XG4gICAgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICAgIGlmICh2YWx1ZSA9PT0gMCAmJiBub2RlLnZhbHVlID09PSAnJykge1xuICAgICAgICBub2RlLnZhbHVlID0gJzAnO1xuICAgICAgICAvLyBOb3RlOiBJRTkgcmVwb3J0cyBhIG51bWJlciBpbnB1dHMgYXMgJ3RleHQnLCBzbyBjaGVjayBwcm9wcyBpbnN0ZWFkLlxuICAgICAgfSBlbHNlIGlmIChwcm9wcy50eXBlID09PSAnbnVtYmVyJykge1xuICAgICAgICAvLyBTaW11bGF0ZSBgaW5wdXQudmFsdWVBc051bWJlcmAuIElFOSBkb2VzIG5vdCBzdXBwb3J0IGl0XG4gICAgICAgIHZhciB2YWx1ZUFzTnVtYmVyID0gcGFyc2VGbG9hdChub2RlLnZhbHVlLCAxMCkgfHwgMDtcblxuICAgICAgICBpZiAoXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgICAgICB2YWx1ZSAhPSB2YWx1ZUFzTnVtYmVyIHx8XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgICAgICB2YWx1ZSA9PSB2YWx1ZUFzTnVtYmVyICYmIG5vZGUudmFsdWUgIT0gdmFsdWUpIHtcbiAgICAgICAgICAvLyBDYXN0IGB2YWx1ZWAgdG8gYSBzdHJpbmcgdG8gZW5zdXJlIHRoZSB2YWx1ZSBpcyBzZXQgY29ycmVjdGx5LiBXaGlsZVxuICAgICAgICAgIC8vIGJyb3dzZXJzIHR5cGljYWxseSBkbyB0aGlzIGFzIG5lY2Vzc2FyeSwganNkb20gZG9lc24ndC5cbiAgICAgICAgICBub2RlLnZhbHVlID0gJycgKyB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChub2RlLnZhbHVlICE9PSAnJyArIHZhbHVlKSB7XG4gICAgICAgIC8vIENhc3QgYHZhbHVlYCB0byBhIHN0cmluZyB0byBlbnN1cmUgdGhlIHZhbHVlIGlzIHNldCBjb3JyZWN0bHkuIFdoaWxlXG4gICAgICAgIC8vIGJyb3dzZXJzIHR5cGljYWxseSBkbyB0aGlzIGFzIG5lY2Vzc2FyeSwganNkb20gZG9lc24ndC5cbiAgICAgICAgbm9kZS52YWx1ZSA9ICcnICsgdmFsdWU7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChwcm9wcy52YWx1ZSA9PSBudWxsICYmIHByb3BzLmRlZmF1bHRWYWx1ZSAhPSBudWxsKSB7XG4gICAgICAgIC8vIEluIENocm9tZSwgYXNzaWduaW5nIGRlZmF1bHRWYWx1ZSB0byBjZXJ0YWluIGlucHV0IHR5cGVzIHRyaWdnZXJzIGlucHV0IHZhbGlkYXRpb24uXG4gICAgICAgIC8vIEZvciBudW1iZXIgaW5wdXRzLCB0aGUgZGlzcGxheSB2YWx1ZSBsb3NlcyB0cmFpbGluZyBkZWNpbWFsIHBvaW50cy4gRm9yIGVtYWlsIGlucHV0cyxcbiAgICAgICAgLy8gQ2hyb21lIHJhaXNlcyBcIlRoZSBzcGVjaWZpZWQgdmFsdWUgPHg+IGlzIG5vdCBhIHZhbGlkIGVtYWlsIGFkZHJlc3NcIi5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gSGVyZSB3ZSBjaGVjayB0byBzZWUgaWYgdGhlIGRlZmF1bHRWYWx1ZSBoYXMgYWN0dWFsbHkgY2hhbmdlZCwgYXZvaWRpbmcgdGhlc2UgcHJvYmxlbXNcbiAgICAgICAgLy8gd2hlbiB0aGUgdXNlciBpcyBpbnB1dHRpbmcgdGV4dFxuICAgICAgICAvL1xuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzcyNTNcbiAgICAgICAgaWYgKG5vZGUuZGVmYXVsdFZhbHVlICE9PSAnJyArIHByb3BzLmRlZmF1bHRWYWx1ZSkge1xuICAgICAgICAgIG5vZGUuZGVmYXVsdFZhbHVlID0gJycgKyBwcm9wcy5kZWZhdWx0VmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChwcm9wcy5jaGVja2VkID09IG51bGwgJiYgcHJvcHMuZGVmYXVsdENoZWNrZWQgIT0gbnVsbCkge1xuICAgICAgICBub2RlLmRlZmF1bHRDaGVja2VkID0gISFwcm9wcy5kZWZhdWx0Q2hlY2tlZDtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgcG9zdE1vdW50V3JhcHBlcjogZnVuY3Rpb24gKGluc3QpIHtcbiAgICB2YXIgcHJvcHMgPSBpbnN0Ll9jdXJyZW50RWxlbWVudC5wcm9wcztcblxuICAgIC8vIFRoaXMgaXMgaW4gcG9zdE1vdW50IGJlY2F1c2Ugd2UgbmVlZCBhY2Nlc3MgdG8gdGhlIERPTSBub2RlLCB3aGljaCBpcyBub3RcbiAgICAvLyBhdmFpbGFibGUgdW50aWwgYWZ0ZXIgdGhlIGNvbXBvbmVudCBoYXMgbW91bnRlZC5cbiAgICB2YXIgbm9kZSA9IFJlYWN0RE9NQ29tcG9uZW50VHJlZS5nZXROb2RlRnJvbUluc3RhbmNlKGluc3QpO1xuXG4gICAgLy8gRGV0YWNoIHZhbHVlIGZyb20gZGVmYXVsdFZhbHVlLiBXZSB3b24ndCBkbyBhbnl0aGluZyBpZiB3ZSdyZSB3b3JraW5nIG9uXG4gICAgLy8gc3VibWl0IG9yIHJlc2V0IGlucHV0cyBhcyB0aG9zZSB2YWx1ZXMgJiBkZWZhdWx0VmFsdWVzIGFyZSBsaW5rZWQuIFRoZXlcbiAgICAvLyBhcmUgbm90IHJlc2V0YWJsZSBub2RlcyBzbyB0aGlzIG9wZXJhdGlvbiBkb2Vzbid0IG1hdHRlciBhbmQgYWN0dWFsbHlcbiAgICAvLyByZW1vdmVzIGJyb3dzZXItZGVmYXVsdCB2YWx1ZXMgKGVnIFwiU3VibWl0IFF1ZXJ5XCIpIHdoZW4gbm8gdmFsdWUgaXNcbiAgICAvLyBwcm92aWRlZC5cblxuICAgIHN3aXRjaCAocHJvcHMudHlwZSkge1xuICAgICAgY2FzZSAnc3VibWl0JzpcbiAgICAgIGNhc2UgJ3Jlc2V0JzpcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdjb2xvcic6XG4gICAgICBjYXNlICdkYXRlJzpcbiAgICAgIGNhc2UgJ2RhdGV0aW1lJzpcbiAgICAgIGNhc2UgJ2RhdGV0aW1lLWxvY2FsJzpcbiAgICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgIGNhc2UgJ3RpbWUnOlxuICAgICAgY2FzZSAnd2Vlayc6XG4gICAgICAgIC8vIFRoaXMgZml4ZXMgdGhlIG5vLXNob3cgaXNzdWUgb24gaU9TIFNhZmFyaSBhbmQgQW5kcm9pZCBDaHJvbWU6XG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvNzIzM1xuICAgICAgICBub2RlLnZhbHVlID0gJyc7XG4gICAgICAgIG5vZGUudmFsdWUgPSBub2RlLmRlZmF1bHRWYWx1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBub2RlLnZhbHVlID0gbm9kZS52YWx1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgLy8gTm9ybWFsbHksIHdlJ2QganVzdCBkbyBgbm9kZS5jaGVja2VkID0gbm9kZS5jaGVja2VkYCB1cG9uIGluaXRpYWwgbW91bnQsIGxlc3MgdGhpcyBidWdcbiAgICAvLyB0aGlzIGlzIG5lZWRlZCB0byB3b3JrIGFyb3VuZCBhIGNocm9tZSBidWcgd2hlcmUgc2V0dGluZyBkZWZhdWx0Q2hlY2tlZFxuICAgIC8vIHdpbGwgc29tZXRpbWVzIGluZmx1ZW5jZSB0aGUgdmFsdWUgb2YgY2hlY2tlZCAoZXZlbiBhZnRlciBkZXRhY2htZW50KS5cbiAgICAvLyBSZWZlcmVuY2U6IGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTYwODQxNlxuICAgIC8vIFdlIG5lZWQgdG8gdGVtcG9yYXJpbHkgdW5zZXQgbmFtZSB0byBhdm9pZCBkaXNydXB0aW5nIHJhZGlvIGJ1dHRvbiBncm91cHMuXG4gICAgdmFyIG5hbWUgPSBub2RlLm5hbWU7XG4gICAgaWYgKG5hbWUgIT09ICcnKSB7XG4gICAgICBub2RlLm5hbWUgPSAnJztcbiAgICB9XG4gICAgbm9kZS5kZWZhdWx0Q2hlY2tlZCA9ICFub2RlLmRlZmF1bHRDaGVja2VkO1xuICAgIG5vZGUuZGVmYXVsdENoZWNrZWQgPSAhbm9kZS5kZWZhdWx0Q2hlY2tlZDtcbiAgICBpZiAobmFtZSAhPT0gJycpIHtcbiAgICAgIG5vZGUubmFtZSA9IG5hbWU7XG4gICAgfVxuICB9XG59O1xuXG5mdW5jdGlvbiBfaGFuZGxlQ2hhbmdlKGV2ZW50KSB7XG4gIHZhciBwcm9wcyA9IHRoaXMuX2N1cnJlbnRFbGVtZW50LnByb3BzO1xuXG4gIHZhciByZXR1cm5WYWx1ZSA9IExpbmtlZFZhbHVlVXRpbHMuZXhlY3V0ZU9uQ2hhbmdlKHByb3BzLCBldmVudCk7XG5cbiAgLy8gSGVyZSB3ZSB1c2UgYXNhcCB0byB3YWl0IHVudGlsIGFsbCB1cGRhdGVzIGhhdmUgcHJvcGFnYXRlZCwgd2hpY2hcbiAgLy8gaXMgaW1wb3J0YW50IHdoZW4gdXNpbmcgY29udHJvbGxlZCBjb21wb25lbnRzIHdpdGhpbiBsYXllcnM6XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTY5OFxuICBSZWFjdFVwZGF0ZXMuYXNhcChmb3JjZVVwZGF0ZUlmTW91bnRlZCwgdGhpcyk7XG5cbiAgdmFyIG5hbWUgPSBwcm9wcy5uYW1lO1xuICBpZiAocHJvcHMudHlwZSA9PT0gJ3JhZGlvJyAmJiBuYW1lICE9IG51bGwpIHtcbiAgICB2YXIgcm9vdE5vZGUgPSBSZWFjdERPTUNvbXBvbmVudFRyZWUuZ2V0Tm9kZUZyb21JbnN0YW5jZSh0aGlzKTtcbiAgICB2YXIgcXVlcnlSb290ID0gcm9vdE5vZGU7XG5cbiAgICB3aGlsZSAocXVlcnlSb290LnBhcmVudE5vZGUpIHtcbiAgICAgIHF1ZXJ5Um9vdCA9IHF1ZXJ5Um9vdC5wYXJlbnROb2RlO1xuICAgIH1cblxuICAgIC8vIElmIGByb290Tm9kZS5mb3JtYCB3YXMgbm9uLW51bGwsIHRoZW4gd2UgY291bGQgdHJ5IGBmb3JtLmVsZW1lbnRzYCxcbiAgICAvLyBidXQgdGhhdCBzb21ldGltZXMgYmVoYXZlcyBzdHJhbmdlbHkgaW4gSUU4LiBXZSBjb3VsZCBhbHNvIHRyeSB1c2luZ1xuICAgIC8vIGBmb3JtLmdldEVsZW1lbnRzQnlOYW1lYCwgYnV0IHRoYXQgd2lsbCBvbmx5IHJldHVybiBkaXJlY3QgY2hpbGRyZW5cbiAgICAvLyBhbmQgd29uJ3QgaW5jbHVkZSBpbnB1dHMgdGhhdCB1c2UgdGhlIEhUTUw1IGBmb3JtPWAgYXR0cmlidXRlLiBTaW5jZVxuICAgIC8vIHRoZSBpbnB1dCBtaWdodCBub3QgZXZlbiBiZSBpbiBhIGZvcm0sIGxldCdzIGp1c3QgdXNlIHRoZSBnbG9iYWxcbiAgICAvLyBgcXVlcnlTZWxlY3RvckFsbGAgdG8gZW5zdXJlIHdlIGRvbid0IG1pc3MgYW55dGhpbmcuXG4gICAgdmFyIGdyb3VwID0gcXVlcnlSb290LnF1ZXJ5U2VsZWN0b3JBbGwoJ2lucHV0W25hbWU9JyArIEpTT04uc3RyaW5naWZ5KCcnICsgbmFtZSkgKyAnXVt0eXBlPVwicmFkaW9cIl0nKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ3JvdXAubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBvdGhlck5vZGUgPSBncm91cFtpXTtcbiAgICAgIGlmIChvdGhlck5vZGUgPT09IHJvb3ROb2RlIHx8IG90aGVyTm9kZS5mb3JtICE9PSByb290Tm9kZS5mb3JtKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgLy8gVGhpcyB3aWxsIHRocm93IGlmIHJhZGlvIGJ1dHRvbnMgcmVuZGVyZWQgYnkgZGlmZmVyZW50IGNvcGllcyBvZiBSZWFjdFxuICAgICAgLy8gYW5kIHRoZSBzYW1lIG5hbWUgYXJlIHJlbmRlcmVkIGludG8gdGhlIHNhbWUgZm9ybSAoc2FtZSBhcyAjMTkzOSkuXG4gICAgICAvLyBUaGF0J3MgcHJvYmFibHkgb2theTsgd2UgZG9uJ3Qgc3VwcG9ydCBpdCBqdXN0IGFzIHdlIGRvbid0IHN1cHBvcnRcbiAgICAgIC8vIG1peGluZyBSZWFjdCByYWRpbyBidXR0b25zIHdpdGggbm9uLVJlYWN0IG9uZXMuXG4gICAgICB2YXIgb3RoZXJJbnN0YW5jZSA9IFJlYWN0RE9NQ29tcG9uZW50VHJlZS5nZXRJbnN0YW5jZUZyb21Ob2RlKG90aGVyTm9kZSk7XG4gICAgICAhb3RoZXJJbnN0YW5jZSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICdSZWFjdERPTUlucHV0OiBNaXhpbmcgUmVhY3QgYW5kIG5vbi1SZWFjdCByYWRpbyBpbnB1dHMgd2l0aCB0aGUgc2FtZSBgbmFtZWAgaXMgbm90IHN1cHBvcnRlZC4nKSA6IF9wcm9kSW52YXJpYW50KCc5MCcpIDogdm9pZCAwO1xuICAgICAgLy8gSWYgdGhpcyBpcyBhIGNvbnRyb2xsZWQgcmFkaW8gYnV0dG9uIGdyb3VwLCBmb3JjaW5nIHRoZSBpbnB1dCB0aGF0XG4gICAgICAvLyB3YXMgcHJldmlvdXNseSBjaGVja2VkIHRvIHVwZGF0ZSB3aWxsIGNhdXNlIGl0IHRvIGJlIGNvbWUgcmUtY2hlY2tlZFxuICAgICAgLy8gYXMgYXBwcm9wcmlhdGUuXG4gICAgICBSZWFjdFVwZGF0ZXMuYXNhcChmb3JjZVVwZGF0ZUlmTW91bnRlZCwgb3RoZXJJbnN0YW5jZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJldHVyblZhbHVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0RE9NSW5wdXQ7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1kb20vbGliL1JlYWN0RE9NSW5wdXQuanMiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgRE9NUHJvcGVydHkgPSByZXF1aXJlKCcuL0RPTVByb3BlcnR5Jyk7XG52YXIgUmVhY3RDb21wb25lbnRUcmVlSG9vayA9IHJlcXVpcmUoJ3JlYWN0L2xpYi9SZWFjdENvbXBvbmVudFRyZWVIb29rJyk7XG5cbnZhciB3YXJuaW5nID0gcmVxdWlyZSgnZmJqcy9saWIvd2FybmluZycpO1xuXG52YXIgd2FybmVkUHJvcGVydGllcyA9IHt9O1xudmFyIHJBUklBID0gbmV3IFJlZ0V4cCgnXihhcmlhKS1bJyArIERPTVByb3BlcnR5LkFUVFJJQlVURV9OQU1FX0NIQVIgKyAnXSokJyk7XG5cbmZ1bmN0aW9uIHZhbGlkYXRlUHJvcGVydHkodGFnTmFtZSwgbmFtZSwgZGVidWdJRCkge1xuICBpZiAod2FybmVkUHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eShuYW1lKSAmJiB3YXJuZWRQcm9wZXJ0aWVzW25hbWVdKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAockFSSUEudGVzdChuYW1lKSkge1xuICAgIHZhciBsb3dlckNhc2VkTmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICB2YXIgc3RhbmRhcmROYW1lID0gRE9NUHJvcGVydHkuZ2V0UG9zc2libGVTdGFuZGFyZE5hbWUuaGFzT3duUHJvcGVydHkobG93ZXJDYXNlZE5hbWUpID8gRE9NUHJvcGVydHkuZ2V0UG9zc2libGVTdGFuZGFyZE5hbWVbbG93ZXJDYXNlZE5hbWVdIDogbnVsbDtcblxuICAgIC8vIElmIHRoaXMgaXMgYW4gYXJpYS0qIGF0dHJpYnV0ZSwgYnV0IGlzIG5vdCBsaXN0ZWQgaW4gdGhlIGtub3duIERPTVxuICAgIC8vIERPTSBwcm9wZXJ0aWVzLCB0aGVuIGl0IGlzIGFuIGludmFsaWQgYXJpYS0qIGF0dHJpYnV0ZS5cbiAgICBpZiAoc3RhbmRhcmROYW1lID09IG51bGwpIHtcbiAgICAgIHdhcm5lZFByb3BlcnRpZXNbbmFtZV0gPSB0cnVlO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICAvLyBhcmlhLSogYXR0cmlidXRlcyBzaG91bGQgYmUgbG93ZXJjYXNlOyBzdWdnZXN0IHRoZSBsb3dlcmNhc2UgdmVyc2lvbi5cbiAgICBpZiAobmFtZSAhPT0gc3RhbmRhcmROYW1lKSB7XG4gICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyhmYWxzZSwgJ1Vua25vd24gQVJJQSBhdHRyaWJ1dGUgJXMuIERpZCB5b3UgbWVhbiAlcz8lcycsIG5hbWUsIHN0YW5kYXJkTmFtZSwgUmVhY3RDb21wb25lbnRUcmVlSG9vay5nZXRTdGFja0FkZGVuZHVtQnlJRChkZWJ1Z0lEKSkgOiB2b2lkIDA7XG4gICAgICB3YXJuZWRQcm9wZXJ0aWVzW25hbWVdID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiB3YXJuSW52YWxpZEFSSUFQcm9wcyhkZWJ1Z0lELCBlbGVtZW50KSB7XG4gIHZhciBpbnZhbGlkUHJvcHMgPSBbXTtcblxuICBmb3IgKHZhciBrZXkgaW4gZWxlbWVudC5wcm9wcykge1xuICAgIHZhciBpc1ZhbGlkID0gdmFsaWRhdGVQcm9wZXJ0eShlbGVtZW50LnR5cGUsIGtleSwgZGVidWdJRCk7XG4gICAgaWYgKCFpc1ZhbGlkKSB7XG4gICAgICBpbnZhbGlkUHJvcHMucHVzaChrZXkpO1xuICAgIH1cbiAgfVxuXG4gIHZhciB1bmtub3duUHJvcFN0cmluZyA9IGludmFsaWRQcm9wcy5tYXAoZnVuY3Rpb24gKHByb3ApIHtcbiAgICByZXR1cm4gJ2AnICsgcHJvcCArICdgJztcbiAgfSkuam9pbignLCAnKTtcblxuICBpZiAoaW52YWxpZFByb3BzLmxlbmd0aCA9PT0gMSkge1xuICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKGZhbHNlLCAnSW52YWxpZCBhcmlhIHByb3AgJXMgb24gPCVzPiB0YWcuICcgKyAnRm9yIGRldGFpbHMsIHNlZSBodHRwczovL2ZiLm1lL2ludmFsaWQtYXJpYS1wcm9wJXMnLCB1bmtub3duUHJvcFN0cmluZywgZWxlbWVudC50eXBlLCBSZWFjdENvbXBvbmVudFRyZWVIb29rLmdldFN0YWNrQWRkZW5kdW1CeUlEKGRlYnVnSUQpKSA6IHZvaWQgMDtcbiAgfSBlbHNlIGlmIChpbnZhbGlkUHJvcHMubGVuZ3RoID4gMSkge1xuICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKGZhbHNlLCAnSW52YWxpZCBhcmlhIHByb3BzICVzIG9uIDwlcz4gdGFnLiAnICsgJ0ZvciBkZXRhaWxzLCBzZWUgaHR0cHM6Ly9mYi5tZS9pbnZhbGlkLWFyaWEtcHJvcCVzJywgdW5rbm93blByb3BTdHJpbmcsIGVsZW1lbnQudHlwZSwgUmVhY3RDb21wb25lbnRUcmVlSG9vay5nZXRTdGFja0FkZGVuZHVtQnlJRChkZWJ1Z0lEKSkgOiB2b2lkIDA7XG4gIH1cbn1cblxuZnVuY3Rpb24gaGFuZGxlRWxlbWVudChkZWJ1Z0lELCBlbGVtZW50KSB7XG4gIGlmIChlbGVtZW50ID09IG51bGwgfHwgdHlwZW9mIGVsZW1lbnQudHlwZSAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKGVsZW1lbnQudHlwZS5pbmRleE9mKCctJykgPj0gMCB8fCBlbGVtZW50LnByb3BzLmlzKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgd2FybkludmFsaWRBUklBUHJvcHMoZGVidWdJRCwgZWxlbWVudCk7XG59XG5cbnZhciBSZWFjdERPTUludmFsaWRBUklBSG9vayA9IHtcbiAgb25CZWZvcmVNb3VudENvbXBvbmVudDogZnVuY3Rpb24gKGRlYnVnSUQsIGVsZW1lbnQpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaGFuZGxlRWxlbWVudChkZWJ1Z0lELCBlbGVtZW50KTtcbiAgICB9XG4gIH0sXG4gIG9uQmVmb3JlVXBkYXRlQ29tcG9uZW50OiBmdW5jdGlvbiAoZGVidWdJRCwgZWxlbWVudCkge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBoYW5kbGVFbGVtZW50KGRlYnVnSUQsIGVsZW1lbnQpO1xuICAgIH1cbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdERPTUludmFsaWRBUklBSG9vaztcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3JlYWN0LWRvbS9saWIvUmVhY3RET01JbnZhbGlkQVJJQUhvb2suanMiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUmVhY3RDb21wb25lbnRUcmVlSG9vayA9IHJlcXVpcmUoJ3JlYWN0L2xpYi9SZWFjdENvbXBvbmVudFRyZWVIb29rJyk7XG5cbnZhciB3YXJuaW5nID0gcmVxdWlyZSgnZmJqcy9saWIvd2FybmluZycpO1xuXG52YXIgZGlkV2FyblZhbHVlTnVsbCA9IGZhbHNlO1xuXG5mdW5jdGlvbiBoYW5kbGVFbGVtZW50KGRlYnVnSUQsIGVsZW1lbnQpIHtcbiAgaWYgKGVsZW1lbnQgPT0gbnVsbCkge1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoZWxlbWVudC50eXBlICE9PSAnaW5wdXQnICYmIGVsZW1lbnQudHlwZSAhPT0gJ3RleHRhcmVhJyAmJiBlbGVtZW50LnR5cGUgIT09ICdzZWxlY3QnKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChlbGVtZW50LnByb3BzICE9IG51bGwgJiYgZWxlbWVudC5wcm9wcy52YWx1ZSA9PT0gbnVsbCAmJiAhZGlkV2FyblZhbHVlTnVsbCkge1xuICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKGZhbHNlLCAnYHZhbHVlYCBwcm9wIG9uIGAlc2Agc2hvdWxkIG5vdCBiZSBudWxsLiAnICsgJ0NvbnNpZGVyIHVzaW5nIHRoZSBlbXB0eSBzdHJpbmcgdG8gY2xlYXIgdGhlIGNvbXBvbmVudCBvciBgdW5kZWZpbmVkYCAnICsgJ2ZvciB1bmNvbnRyb2xsZWQgY29tcG9uZW50cy4lcycsIGVsZW1lbnQudHlwZSwgUmVhY3RDb21wb25lbnRUcmVlSG9vay5nZXRTdGFja0FkZGVuZHVtQnlJRChkZWJ1Z0lEKSkgOiB2b2lkIDA7XG5cbiAgICBkaWRXYXJuVmFsdWVOdWxsID0gdHJ1ZTtcbiAgfVxufVxuXG52YXIgUmVhY3RET01OdWxsSW5wdXRWYWx1ZVByb3BIb29rID0ge1xuICBvbkJlZm9yZU1vdW50Q29tcG9uZW50OiBmdW5jdGlvbiAoZGVidWdJRCwgZWxlbWVudCkge1xuICAgIGhhbmRsZUVsZW1lbnQoZGVidWdJRCwgZWxlbWVudCk7XG4gIH0sXG4gIG9uQmVmb3JlVXBkYXRlQ29tcG9uZW50OiBmdW5jdGlvbiAoZGVidWdJRCwgZWxlbWVudCkge1xuICAgIGhhbmRsZUVsZW1lbnQoZGVidWdJRCwgZWxlbWVudCk7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RET01OdWxsSW5wdXRWYWx1ZVByb3BIb29rO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QtZG9tL2xpYi9SZWFjdERPTU51bGxJbnB1dFZhbHVlUHJvcEhvb2suanMiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgX2Fzc2lnbiA9IHJlcXVpcmUoJ29iamVjdC1hc3NpZ24nKTtcblxudmFyIFJlYWN0ID0gcmVxdWlyZSgncmVhY3QvbGliL1JlYWN0Jyk7XG52YXIgUmVhY3RET01Db21wb25lbnRUcmVlID0gcmVxdWlyZSgnLi9SZWFjdERPTUNvbXBvbmVudFRyZWUnKTtcbnZhciBSZWFjdERPTVNlbGVjdCA9IHJlcXVpcmUoJy4vUmVhY3RET01TZWxlY3QnKTtcblxudmFyIHdhcm5pbmcgPSByZXF1aXJlKCdmYmpzL2xpYi93YXJuaW5nJyk7XG52YXIgZGlkV2FybkludmFsaWRPcHRpb25DaGlsZHJlbiA9IGZhbHNlO1xuXG5mdW5jdGlvbiBmbGF0dGVuQ2hpbGRyZW4oY2hpbGRyZW4pIHtcbiAgdmFyIGNvbnRlbnQgPSAnJztcblxuICAvLyBGbGF0dGVuIGNoaWxkcmVuIGFuZCB3YXJuIGlmIHRoZXkgYXJlbid0IHN0cmluZ3Mgb3IgbnVtYmVycztcbiAgLy8gaW52YWxpZCB0eXBlcyBhcmUgaWdub3JlZC5cbiAgUmVhY3QuQ2hpbGRyZW4uZm9yRWFjaChjaGlsZHJlbiwgZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgaWYgKGNoaWxkID09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBjaGlsZCA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIGNoaWxkID09PSAnbnVtYmVyJykge1xuICAgICAgY29udGVudCArPSBjaGlsZDtcbiAgICB9IGVsc2UgaWYgKCFkaWRXYXJuSW52YWxpZE9wdGlvbkNoaWxkcmVuKSB7XG4gICAgICBkaWRXYXJuSW52YWxpZE9wdGlvbkNoaWxkcmVuID0gdHJ1ZTtcbiAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKGZhbHNlLCAnT25seSBzdHJpbmdzIGFuZCBudW1iZXJzIGFyZSBzdXBwb3J0ZWQgYXMgPG9wdGlvbj4gY2hpbGRyZW4uJykgOiB2b2lkIDA7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gY29udGVudDtcbn1cblxuLyoqXG4gKiBJbXBsZW1lbnRzIGFuIDxvcHRpb24+IGhvc3QgY29tcG9uZW50IHRoYXQgd2FybnMgd2hlbiBgc2VsZWN0ZWRgIGlzIHNldC5cbiAqL1xudmFyIFJlYWN0RE9NT3B0aW9uID0ge1xuICBtb3VudFdyYXBwZXI6IGZ1bmN0aW9uIChpbnN0LCBwcm9wcywgaG9zdFBhcmVudCkge1xuICAgIC8vIFRPRE8gKHl1bmdzdGVycyk6IFJlbW92ZSBzdXBwb3J0IGZvciBgc2VsZWN0ZWRgIGluIDxvcHRpb24+LlxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyhwcm9wcy5zZWxlY3RlZCA9PSBudWxsLCAnVXNlIHRoZSBgZGVmYXVsdFZhbHVlYCBvciBgdmFsdWVgIHByb3BzIG9uIDxzZWxlY3Q+IGluc3RlYWQgb2YgJyArICdzZXR0aW5nIGBzZWxlY3RlZGAgb24gPG9wdGlvbj4uJykgOiB2b2lkIDA7XG4gICAgfVxuXG4gICAgLy8gTG9vayB1cCB3aGV0aGVyIHRoaXMgb3B0aW9uIGlzICdzZWxlY3RlZCdcbiAgICB2YXIgc2VsZWN0VmFsdWUgPSBudWxsO1xuICAgIGlmIChob3N0UGFyZW50ICE9IG51bGwpIHtcbiAgICAgIHZhciBzZWxlY3RQYXJlbnQgPSBob3N0UGFyZW50O1xuXG4gICAgICBpZiAoc2VsZWN0UGFyZW50Ll90YWcgPT09ICdvcHRncm91cCcpIHtcbiAgICAgICAgc2VsZWN0UGFyZW50ID0gc2VsZWN0UGFyZW50Ll9ob3N0UGFyZW50O1xuICAgICAgfVxuXG4gICAgICBpZiAoc2VsZWN0UGFyZW50ICE9IG51bGwgJiYgc2VsZWN0UGFyZW50Ll90YWcgPT09ICdzZWxlY3QnKSB7XG4gICAgICAgIHNlbGVjdFZhbHVlID0gUmVhY3RET01TZWxlY3QuZ2V0U2VsZWN0VmFsdWVDb250ZXh0KHNlbGVjdFBhcmVudCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSWYgdGhlIHZhbHVlIGlzIG51bGwgKGUuZy4sIG5vIHNwZWNpZmllZCB2YWx1ZSBvciBhZnRlciBpbml0aWFsIG1vdW50KVxuICAgIC8vIG9yIG1pc3NpbmcgKGUuZy4sIGZvciA8ZGF0YWxpc3Q+KSwgd2UgZG9uJ3QgY2hhbmdlIHByb3BzLnNlbGVjdGVkXG4gICAgdmFyIHNlbGVjdGVkID0gbnVsbDtcbiAgICBpZiAoc2VsZWN0VmFsdWUgIT0gbnVsbCkge1xuICAgICAgdmFyIHZhbHVlO1xuICAgICAgaWYgKHByb3BzLnZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgdmFsdWUgPSBwcm9wcy52YWx1ZSArICcnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsdWUgPSBmbGF0dGVuQ2hpbGRyZW4ocHJvcHMuY2hpbGRyZW4pO1xuICAgICAgfVxuICAgICAgc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHNlbGVjdFZhbHVlKSkge1xuICAgICAgICAvLyBtdWx0aXBsZVxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNlbGVjdFZhbHVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaWYgKCcnICsgc2VsZWN0VmFsdWVbaV0gPT09IHZhbHVlKSB7XG4gICAgICAgICAgICBzZWxlY3RlZCA9IHRydWU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNlbGVjdGVkID0gJycgKyBzZWxlY3RWYWx1ZSA9PT0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaW5zdC5fd3JhcHBlclN0YXRlID0geyBzZWxlY3RlZDogc2VsZWN0ZWQgfTtcbiAgfSxcblxuICBwb3N0TW91bnRXcmFwcGVyOiBmdW5jdGlvbiAoaW5zdCkge1xuICAgIC8vIHZhbHVlPVwiXCIgc2hvdWxkIG1ha2UgYSB2YWx1ZSBhdHRyaWJ1dGUgKCM2MjE5KVxuICAgIHZhciBwcm9wcyA9IGluc3QuX2N1cnJlbnRFbGVtZW50LnByb3BzO1xuICAgIGlmIChwcm9wcy52YWx1ZSAhPSBudWxsKSB7XG4gICAgICB2YXIgbm9kZSA9IFJlYWN0RE9NQ29tcG9uZW50VHJlZS5nZXROb2RlRnJvbUluc3RhbmNlKGluc3QpO1xuICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoJ3ZhbHVlJywgcHJvcHMudmFsdWUpO1xuICAgIH1cbiAgfSxcblxuICBnZXRIb3N0UHJvcHM6IGZ1bmN0aW9uIChpbnN0LCBwcm9wcykge1xuICAgIHZhciBob3N0UHJvcHMgPSBfYXNzaWduKHsgc2VsZWN0ZWQ6IHVuZGVmaW5lZCwgY2hpbGRyZW46IHVuZGVmaW5lZCB9LCBwcm9wcyk7XG5cbiAgICAvLyBSZWFkIHN0YXRlIG9ubHkgZnJvbSBpbml0aWFsIG1vdW50IGJlY2F1c2UgPHNlbGVjdD4gdXBkYXRlcyB2YWx1ZVxuICAgIC8vIG1hbnVhbGx5OyB3ZSBuZWVkIHRoZSBpbml0aWFsIHN0YXRlIG9ubHkgZm9yIHNlcnZlciByZW5kZXJpbmdcbiAgICBpZiAoaW5zdC5fd3JhcHBlclN0YXRlLnNlbGVjdGVkICE9IG51bGwpIHtcbiAgICAgIGhvc3RQcm9wcy5zZWxlY3RlZCA9IGluc3QuX3dyYXBwZXJTdGF0ZS5zZWxlY3RlZDtcbiAgICB9XG5cbiAgICB2YXIgY29udGVudCA9IGZsYXR0ZW5DaGlsZHJlbihwcm9wcy5jaGlsZHJlbik7XG5cbiAgICBpZiAoY29udGVudCkge1xuICAgICAgaG9zdFByb3BzLmNoaWxkcmVuID0gY29udGVudDtcbiAgICB9XG5cbiAgICByZXR1cm4gaG9zdFByb3BzO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0RE9NT3B0aW9uO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QtZG9tL2xpYi9SZWFjdERPTU9wdGlvbi5qcyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBFeGVjdXRpb25FbnZpcm9ubWVudCA9IHJlcXVpcmUoJ2ZianMvbGliL0V4ZWN1dGlvbkVudmlyb25tZW50Jyk7XG5cbnZhciBnZXROb2RlRm9yQ2hhcmFjdGVyT2Zmc2V0ID0gcmVxdWlyZSgnLi9nZXROb2RlRm9yQ2hhcmFjdGVyT2Zmc2V0Jyk7XG52YXIgZ2V0VGV4dENvbnRlbnRBY2Nlc3NvciA9IHJlcXVpcmUoJy4vZ2V0VGV4dENvbnRlbnRBY2Nlc3NvcicpO1xuXG4vKipcbiAqIFdoaWxlIGBpc0NvbGxhcHNlZGAgaXMgYXZhaWxhYmxlIG9uIHRoZSBTZWxlY3Rpb24gb2JqZWN0IGFuZCBgY29sbGFwc2VkYFxuICogaXMgYXZhaWxhYmxlIG9uIHRoZSBSYW5nZSBvYmplY3QsIElFMTEgc29tZXRpbWVzIGdldHMgdGhlbSB3cm9uZy5cbiAqIElmIHRoZSBhbmNob3IvZm9jdXMgbm9kZXMgYW5kIG9mZnNldHMgYXJlIHRoZSBzYW1lLCB0aGUgcmFuZ2UgaXMgY29sbGFwc2VkLlxuICovXG5mdW5jdGlvbiBpc0NvbGxhcHNlZChhbmNob3JOb2RlLCBhbmNob3JPZmZzZXQsIGZvY3VzTm9kZSwgZm9jdXNPZmZzZXQpIHtcbiAgcmV0dXJuIGFuY2hvck5vZGUgPT09IGZvY3VzTm9kZSAmJiBhbmNob3JPZmZzZXQgPT09IGZvY3VzT2Zmc2V0O1xufVxuXG4vKipcbiAqIEdldCB0aGUgYXBwcm9wcmlhdGUgYW5jaG9yIGFuZCBmb2N1cyBub2RlL29mZnNldCBwYWlycyBmb3IgSUUuXG4gKlxuICogVGhlIGNhdGNoIGhlcmUgaXMgdGhhdCBJRSdzIHNlbGVjdGlvbiBBUEkgZG9lc24ndCBwcm92aWRlIGluZm9ybWF0aW9uXG4gKiBhYm91dCB3aGV0aGVyIHRoZSBzZWxlY3Rpb24gaXMgZm9yd2FyZCBvciBiYWNrd2FyZCwgc28gd2UgaGF2ZSB0b1xuICogYmVoYXZlIGFzIHRob3VnaCBpdCdzIGFsd2F5cyBmb3J3YXJkLlxuICpcbiAqIElFIHRleHQgZGlmZmVycyBmcm9tIG1vZGVybiBzZWxlY3Rpb24gaW4gdGhhdCBpdCBiZWhhdmVzIGFzIHRob3VnaFxuICogYmxvY2sgZWxlbWVudHMgZW5kIHdpdGggYSBuZXcgbGluZS4gVGhpcyBtZWFucyBjaGFyYWN0ZXIgb2Zmc2V0cyB3aWxsXG4gKiBkaWZmZXIgYmV0d2VlbiB0aGUgdHdvIEFQSXMuXG4gKlxuICogQHBhcmFtIHtET01FbGVtZW50fSBub2RlXG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKi9cbmZ1bmN0aW9uIGdldElFT2Zmc2V0cyhub2RlKSB7XG4gIHZhciBzZWxlY3Rpb24gPSBkb2N1bWVudC5zZWxlY3Rpb247XG4gIHZhciBzZWxlY3RlZFJhbmdlID0gc2VsZWN0aW9uLmNyZWF0ZVJhbmdlKCk7XG4gIHZhciBzZWxlY3RlZExlbmd0aCA9IHNlbGVjdGVkUmFuZ2UudGV4dC5sZW5ndGg7XG5cbiAgLy8gRHVwbGljYXRlIHNlbGVjdGlvbiBzbyB3ZSBjYW4gbW92ZSByYW5nZSB3aXRob3V0IGJyZWFraW5nIHVzZXIgc2VsZWN0aW9uLlxuICB2YXIgZnJvbVN0YXJ0ID0gc2VsZWN0ZWRSYW5nZS5kdXBsaWNhdGUoKTtcbiAgZnJvbVN0YXJ0Lm1vdmVUb0VsZW1lbnRUZXh0KG5vZGUpO1xuICBmcm9tU3RhcnQuc2V0RW5kUG9pbnQoJ0VuZFRvU3RhcnQnLCBzZWxlY3RlZFJhbmdlKTtcblxuICB2YXIgc3RhcnRPZmZzZXQgPSBmcm9tU3RhcnQudGV4dC5sZW5ndGg7XG4gIHZhciBlbmRPZmZzZXQgPSBzdGFydE9mZnNldCArIHNlbGVjdGVkTGVuZ3RoO1xuXG4gIHJldHVybiB7XG4gICAgc3RhcnQ6IHN0YXJ0T2Zmc2V0LFxuICAgIGVuZDogZW5kT2Zmc2V0XG4gIH07XG59XG5cbi8qKlxuICogQHBhcmFtIHtET01FbGVtZW50fSBub2RlXG4gKiBAcmV0dXJuIHs/b2JqZWN0fVxuICovXG5mdW5jdGlvbiBnZXRNb2Rlcm5PZmZzZXRzKG5vZGUpIHtcbiAgdmFyIHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24gJiYgd2luZG93LmdldFNlbGVjdGlvbigpO1xuXG4gIGlmICghc2VsZWN0aW9uIHx8IHNlbGVjdGlvbi5yYW5nZUNvdW50ID09PSAwKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB2YXIgYW5jaG9yTm9kZSA9IHNlbGVjdGlvbi5hbmNob3JOb2RlO1xuICB2YXIgYW5jaG9yT2Zmc2V0ID0gc2VsZWN0aW9uLmFuY2hvck9mZnNldDtcbiAgdmFyIGZvY3VzTm9kZSA9IHNlbGVjdGlvbi5mb2N1c05vZGU7XG4gIHZhciBmb2N1c09mZnNldCA9IHNlbGVjdGlvbi5mb2N1c09mZnNldDtcblxuICB2YXIgY3VycmVudFJhbmdlID0gc2VsZWN0aW9uLmdldFJhbmdlQXQoMCk7XG5cbiAgLy8gSW4gRmlyZWZveCwgcmFuZ2Uuc3RhcnRDb250YWluZXIgYW5kIHJhbmdlLmVuZENvbnRhaW5lciBjYW4gYmUgXCJhbm9ueW1vdXNcbiAgLy8gZGl2c1wiLCBlLmcuIHRoZSB1cC9kb3duIGJ1dHRvbnMgb24gYW4gPGlucHV0IHR5cGU9XCJudW1iZXJcIj4uIEFub255bW91c1xuICAvLyBkaXZzIGRvIG5vdCBzZWVtIHRvIGV4cG9zZSBwcm9wZXJ0aWVzLCB0cmlnZ2VyaW5nIGEgXCJQZXJtaXNzaW9uIGRlbmllZFxuICAvLyBlcnJvclwiIGlmIGFueSBvZiBpdHMgcHJvcGVydGllcyBhcmUgYWNjZXNzZWQuIFRoZSBvbmx5IHNlZW1pbmdseSBwb3NzaWJsZVxuICAvLyB3YXkgdG8gYXZvaWQgZXJyb3JpbmcgaXMgdG8gYWNjZXNzIGEgcHJvcGVydHkgdGhhdCB0eXBpY2FsbHkgd29ya3MgZm9yXG4gIC8vIG5vbi1hbm9ueW1vdXMgZGl2cyBhbmQgY2F0Y2ggYW55IGVycm9yIHRoYXQgbWF5IG90aGVyd2lzZSBhcmlzZS4gU2VlXG4gIC8vIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTIwODQyN1xuICB0cnkge1xuICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC1leHByZXNzaW9ucyAqL1xuICAgIGN1cnJlbnRSYW5nZS5zdGFydENvbnRhaW5lci5ub2RlVHlwZTtcbiAgICBjdXJyZW50UmFuZ2UuZW5kQ29udGFpbmVyLm5vZGVUeXBlO1xuICAgIC8qIGVzbGludC1lbmFibGUgbm8tdW51c2VkLWV4cHJlc3Npb25zICovXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIElmIHRoZSBub2RlIGFuZCBvZmZzZXQgdmFsdWVzIGFyZSB0aGUgc2FtZSwgdGhlIHNlbGVjdGlvbiBpcyBjb2xsYXBzZWQuXG4gIC8vIGBTZWxlY3Rpb24uaXNDb2xsYXBzZWRgIGlzIGF2YWlsYWJsZSBuYXRpdmVseSwgYnV0IElFIHNvbWV0aW1lcyBnZXRzXG4gIC8vIHRoaXMgdmFsdWUgd3JvbmcuXG4gIHZhciBpc1NlbGVjdGlvbkNvbGxhcHNlZCA9IGlzQ29sbGFwc2VkKHNlbGVjdGlvbi5hbmNob3JOb2RlLCBzZWxlY3Rpb24uYW5jaG9yT2Zmc2V0LCBzZWxlY3Rpb24uZm9jdXNOb2RlLCBzZWxlY3Rpb24uZm9jdXNPZmZzZXQpO1xuXG4gIHZhciByYW5nZUxlbmd0aCA9IGlzU2VsZWN0aW9uQ29sbGFwc2VkID8gMCA6IGN1cnJlbnRSYW5nZS50b1N0cmluZygpLmxlbmd0aDtcblxuICB2YXIgdGVtcFJhbmdlID0gY3VycmVudFJhbmdlLmNsb25lUmFuZ2UoKTtcbiAgdGVtcFJhbmdlLnNlbGVjdE5vZGVDb250ZW50cyhub2RlKTtcbiAgdGVtcFJhbmdlLnNldEVuZChjdXJyZW50UmFuZ2Uuc3RhcnRDb250YWluZXIsIGN1cnJlbnRSYW5nZS5zdGFydE9mZnNldCk7XG5cbiAgdmFyIGlzVGVtcFJhbmdlQ29sbGFwc2VkID0gaXNDb2xsYXBzZWQodGVtcFJhbmdlLnN0YXJ0Q29udGFpbmVyLCB0ZW1wUmFuZ2Uuc3RhcnRPZmZzZXQsIHRlbXBSYW5nZS5lbmRDb250YWluZXIsIHRlbXBSYW5nZS5lbmRPZmZzZXQpO1xuXG4gIHZhciBzdGFydCA9IGlzVGVtcFJhbmdlQ29sbGFwc2VkID8gMCA6IHRlbXBSYW5nZS50b1N0cmluZygpLmxlbmd0aDtcbiAgdmFyIGVuZCA9IHN0YXJ0ICsgcmFuZ2VMZW5ndGg7XG5cbiAgLy8gRGV0ZWN0IHdoZXRoZXIgdGhlIHNlbGVjdGlvbiBpcyBiYWNrd2FyZC5cbiAgdmFyIGRldGVjdGlvblJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcbiAgZGV0ZWN0aW9uUmFuZ2Uuc2V0U3RhcnQoYW5jaG9yTm9kZSwgYW5jaG9yT2Zmc2V0KTtcbiAgZGV0ZWN0aW9uUmFuZ2Uuc2V0RW5kKGZvY3VzTm9kZSwgZm9jdXNPZmZzZXQpO1xuICB2YXIgaXNCYWNrd2FyZCA9IGRldGVjdGlvblJhbmdlLmNvbGxhcHNlZDtcblxuICByZXR1cm4ge1xuICAgIHN0YXJ0OiBpc0JhY2t3YXJkID8gZW5kIDogc3RhcnQsXG4gICAgZW5kOiBpc0JhY2t3YXJkID8gc3RhcnQgOiBlbmRcbiAgfTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge0RPTUVsZW1lbnR8RE9NVGV4dE5vZGV9IG5vZGVcbiAqIEBwYXJhbSB7b2JqZWN0fSBvZmZzZXRzXG4gKi9cbmZ1bmN0aW9uIHNldElFT2Zmc2V0cyhub2RlLCBvZmZzZXRzKSB7XG4gIHZhciByYW5nZSA9IGRvY3VtZW50LnNlbGVjdGlvbi5jcmVhdGVSYW5nZSgpLmR1cGxpY2F0ZSgpO1xuICB2YXIgc3RhcnQsIGVuZDtcblxuICBpZiAob2Zmc2V0cy5lbmQgPT09IHVuZGVmaW5lZCkge1xuICAgIHN0YXJ0ID0gb2Zmc2V0cy5zdGFydDtcbiAgICBlbmQgPSBzdGFydDtcbiAgfSBlbHNlIGlmIChvZmZzZXRzLnN0YXJ0ID4gb2Zmc2V0cy5lbmQpIHtcbiAgICBzdGFydCA9IG9mZnNldHMuZW5kO1xuICAgIGVuZCA9IG9mZnNldHMuc3RhcnQ7XG4gIH0gZWxzZSB7XG4gICAgc3RhcnQgPSBvZmZzZXRzLnN0YXJ0O1xuICAgIGVuZCA9IG9mZnNldHMuZW5kO1xuICB9XG5cbiAgcmFuZ2UubW92ZVRvRWxlbWVudFRleHQobm9kZSk7XG4gIHJhbmdlLm1vdmVTdGFydCgnY2hhcmFjdGVyJywgc3RhcnQpO1xuICByYW5nZS5zZXRFbmRQb2ludCgnRW5kVG9TdGFydCcsIHJhbmdlKTtcbiAgcmFuZ2UubW92ZUVuZCgnY2hhcmFjdGVyJywgZW5kIC0gc3RhcnQpO1xuICByYW5nZS5zZWxlY3QoKTtcbn1cblxuLyoqXG4gKiBJbiBtb2Rlcm4gbm9uLUlFIGJyb3dzZXJzLCB3ZSBjYW4gc3VwcG9ydCBib3RoIGZvcndhcmQgYW5kIGJhY2t3YXJkXG4gKiBzZWxlY3Rpb25zLlxuICpcbiAqIE5vdGU6IElFMTArIHN1cHBvcnRzIHRoZSBTZWxlY3Rpb24gb2JqZWN0LCBidXQgaXQgZG9lcyBub3Qgc3VwcG9ydFxuICogdGhlIGBleHRlbmRgIG1ldGhvZCwgd2hpY2ggbWVhbnMgdGhhdCBldmVuIGluIG1vZGVybiBJRSwgaXQncyBub3QgcG9zc2libGVcbiAqIHRvIHByb2dyYW1tYXRpY2FsbHkgY3JlYXRlIGEgYmFja3dhcmQgc2VsZWN0aW9uLiBUaHVzLCBmb3IgYWxsIElFXG4gKiB2ZXJzaW9ucywgd2UgdXNlIHRoZSBvbGQgSUUgQVBJIHRvIGNyZWF0ZSBvdXIgc2VsZWN0aW9ucy5cbiAqXG4gKiBAcGFyYW0ge0RPTUVsZW1lbnR8RE9NVGV4dE5vZGV9IG5vZGVcbiAqIEBwYXJhbSB7b2JqZWN0fSBvZmZzZXRzXG4gKi9cbmZ1bmN0aW9uIHNldE1vZGVybk9mZnNldHMobm9kZSwgb2Zmc2V0cykge1xuICBpZiAoIXdpbmRvdy5nZXRTZWxlY3Rpb24pIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xuICB2YXIgbGVuZ3RoID0gbm9kZVtnZXRUZXh0Q29udGVudEFjY2Vzc29yKCldLmxlbmd0aDtcbiAgdmFyIHN0YXJ0ID0gTWF0aC5taW4ob2Zmc2V0cy5zdGFydCwgbGVuZ3RoKTtcbiAgdmFyIGVuZCA9IG9mZnNldHMuZW5kID09PSB1bmRlZmluZWQgPyBzdGFydCA6IE1hdGgubWluKG9mZnNldHMuZW5kLCBsZW5ndGgpO1xuXG4gIC8vIElFIDExIHVzZXMgbW9kZXJuIHNlbGVjdGlvbiwgYnV0IGRvZXNuJ3Qgc3VwcG9ydCB0aGUgZXh0ZW5kIG1ldGhvZC5cbiAgLy8gRmxpcCBiYWNrd2FyZCBzZWxlY3Rpb25zLCBzbyB3ZSBjYW4gc2V0IHdpdGggYSBzaW5nbGUgcmFuZ2UuXG4gIGlmICghc2VsZWN0aW9uLmV4dGVuZCAmJiBzdGFydCA+IGVuZCkge1xuICAgIHZhciB0ZW1wID0gZW5kO1xuICAgIGVuZCA9IHN0YXJ0O1xuICAgIHN0YXJ0ID0gdGVtcDtcbiAgfVxuXG4gIHZhciBzdGFydE1hcmtlciA9IGdldE5vZGVGb3JDaGFyYWN0ZXJPZmZzZXQobm9kZSwgc3RhcnQpO1xuICB2YXIgZW5kTWFya2VyID0gZ2V0Tm9kZUZvckNoYXJhY3Rlck9mZnNldChub2RlLCBlbmQpO1xuXG4gIGlmIChzdGFydE1hcmtlciAmJiBlbmRNYXJrZXIpIHtcbiAgICB2YXIgcmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xuICAgIHJhbmdlLnNldFN0YXJ0KHN0YXJ0TWFya2VyLm5vZGUsIHN0YXJ0TWFya2VyLm9mZnNldCk7XG4gICAgc2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpO1xuXG4gICAgaWYgKHN0YXJ0ID4gZW5kKSB7XG4gICAgICBzZWxlY3Rpb24uYWRkUmFuZ2UocmFuZ2UpO1xuICAgICAgc2VsZWN0aW9uLmV4dGVuZChlbmRNYXJrZXIubm9kZSwgZW5kTWFya2VyLm9mZnNldCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJhbmdlLnNldEVuZChlbmRNYXJrZXIubm9kZSwgZW5kTWFya2VyLm9mZnNldCk7XG4gICAgICBzZWxlY3Rpb24uYWRkUmFuZ2UocmFuZ2UpO1xuICAgIH1cbiAgfVxufVxuXG52YXIgdXNlSUVPZmZzZXRzID0gRXhlY3V0aW9uRW52aXJvbm1lbnQuY2FuVXNlRE9NICYmICdzZWxlY3Rpb24nIGluIGRvY3VtZW50ICYmICEoJ2dldFNlbGVjdGlvbicgaW4gd2luZG93KTtcblxudmFyIFJlYWN0RE9NU2VsZWN0aW9uID0ge1xuICAvKipcbiAgICogQHBhcmFtIHtET01FbGVtZW50fSBub2RlXG4gICAqL1xuICBnZXRPZmZzZXRzOiB1c2VJRU9mZnNldHMgPyBnZXRJRU9mZnNldHMgOiBnZXRNb2Rlcm5PZmZzZXRzLFxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0RPTUVsZW1lbnR8RE9NVGV4dE5vZGV9IG5vZGVcbiAgICogQHBhcmFtIHtvYmplY3R9IG9mZnNldHNcbiAgICovXG4gIHNldE9mZnNldHM6IHVzZUlFT2Zmc2V0cyA/IHNldElFT2Zmc2V0cyA6IHNldE1vZGVybk9mZnNldHNcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RET01TZWxlY3Rpb247XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1kb20vbGliL1JlYWN0RE9NU2VsZWN0aW9uLmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIF9wcm9kSW52YXJpYW50ID0gcmVxdWlyZSgnLi9yZWFjdFByb2RJbnZhcmlhbnQnKSxcbiAgICBfYXNzaWduID0gcmVxdWlyZSgnb2JqZWN0LWFzc2lnbicpO1xuXG52YXIgRE9NQ2hpbGRyZW5PcGVyYXRpb25zID0gcmVxdWlyZSgnLi9ET01DaGlsZHJlbk9wZXJhdGlvbnMnKTtcbnZhciBET01MYXp5VHJlZSA9IHJlcXVpcmUoJy4vRE9NTGF6eVRyZWUnKTtcbnZhciBSZWFjdERPTUNvbXBvbmVudFRyZWUgPSByZXF1aXJlKCcuL1JlYWN0RE9NQ29tcG9uZW50VHJlZScpO1xuXG52YXIgZXNjYXBlVGV4dENvbnRlbnRGb3JCcm93c2VyID0gcmVxdWlyZSgnLi9lc2NhcGVUZXh0Q29udGVudEZvckJyb3dzZXInKTtcbnZhciBpbnZhcmlhbnQgPSByZXF1aXJlKCdmYmpzL2xpYi9pbnZhcmlhbnQnKTtcbnZhciB2YWxpZGF0ZURPTU5lc3RpbmcgPSByZXF1aXJlKCcuL3ZhbGlkYXRlRE9NTmVzdGluZycpO1xuXG4vKipcbiAqIFRleHQgbm9kZXMgdmlvbGF0ZSBhIGNvdXBsZSBhc3N1bXB0aW9ucyB0aGF0IFJlYWN0IG1ha2VzIGFib3V0IGNvbXBvbmVudHM6XG4gKlxuICogIC0gV2hlbiBtb3VudGluZyB0ZXh0IGludG8gdGhlIERPTSwgYWRqYWNlbnQgdGV4dCBub2RlcyBhcmUgbWVyZ2VkLlxuICogIC0gVGV4dCBub2RlcyBjYW5ub3QgYmUgYXNzaWduZWQgYSBSZWFjdCByb290IElELlxuICpcbiAqIFRoaXMgY29tcG9uZW50IGlzIHVzZWQgdG8gd3JhcCBzdHJpbmdzIGJldHdlZW4gY29tbWVudCBub2RlcyBzbyB0aGF0IHRoZXlcbiAqIGNhbiB1bmRlcmdvIHRoZSBzYW1lIHJlY29uY2lsaWF0aW9uIHRoYXQgaXMgYXBwbGllZCB0byBlbGVtZW50cy5cbiAqXG4gKiBUT0RPOiBJbnZlc3RpZ2F0ZSByZXByZXNlbnRpbmcgUmVhY3QgY29tcG9uZW50cyBpbiB0aGUgRE9NIHdpdGggdGV4dCBub2Rlcy5cbiAqXG4gKiBAY2xhc3MgUmVhY3RET01UZXh0Q29tcG9uZW50XG4gKiBAZXh0ZW5kcyBSZWFjdENvbXBvbmVudFxuICogQGludGVybmFsXG4gKi9cbnZhciBSZWFjdERPTVRleHRDb21wb25lbnQgPSBmdW5jdGlvbiAodGV4dCkge1xuICAvLyBUT0RPOiBUaGlzIGlzIHJlYWxseSBhIFJlYWN0VGV4dCAoUmVhY3ROb2RlKSwgbm90IGEgUmVhY3RFbGVtZW50XG4gIHRoaXMuX2N1cnJlbnRFbGVtZW50ID0gdGV4dDtcbiAgdGhpcy5fc3RyaW5nVGV4dCA9ICcnICsgdGV4dDtcbiAgLy8gUmVhY3RET01Db21wb25lbnRUcmVlIHVzZXMgdGhlc2U6XG4gIHRoaXMuX2hvc3ROb2RlID0gbnVsbDtcbiAgdGhpcy5faG9zdFBhcmVudCA9IG51bGw7XG5cbiAgLy8gUHJvcGVydGllc1xuICB0aGlzLl9kb21JRCA9IDA7XG4gIHRoaXMuX21vdW50SW5kZXggPSAwO1xuICB0aGlzLl9jbG9zaW5nQ29tbWVudCA9IG51bGw7XG4gIHRoaXMuX2NvbW1lbnROb2RlcyA9IG51bGw7XG59O1xuXG5fYXNzaWduKFJlYWN0RE9NVGV4dENvbXBvbmVudC5wcm90b3R5cGUsIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgdGhlIG1hcmt1cCBmb3IgdGhpcyB0ZXh0IG5vZGUuIFRoaXMgbm9kZSBpcyBub3QgaW50ZW5kZWQgdG8gaGF2ZVxuICAgKiBhbnkgZmVhdHVyZXMgYmVzaWRlcyBjb250YWluaW5nIHRleHQgY29udGVudC5cbiAgICpcbiAgICogQHBhcmFtIHtSZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9ufFJlYWN0U2VydmVyUmVuZGVyaW5nVHJhbnNhY3Rpb259IHRyYW5zYWN0aW9uXG4gICAqIEByZXR1cm4ge3N0cmluZ30gTWFya3VwIGZvciB0aGlzIHRleHQgbm9kZS5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBtb3VudENvbXBvbmVudDogZnVuY3Rpb24gKHRyYW5zYWN0aW9uLCBob3N0UGFyZW50LCBob3N0Q29udGFpbmVySW5mbywgY29udGV4dCkge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICB2YXIgcGFyZW50SW5mbztcbiAgICAgIGlmIChob3N0UGFyZW50ICE9IG51bGwpIHtcbiAgICAgICAgcGFyZW50SW5mbyA9IGhvc3RQYXJlbnQuX2FuY2VzdG9ySW5mbztcbiAgICAgIH0gZWxzZSBpZiAoaG9zdENvbnRhaW5lckluZm8gIT0gbnVsbCkge1xuICAgICAgICBwYXJlbnRJbmZvID0gaG9zdENvbnRhaW5lckluZm8uX2FuY2VzdG9ySW5mbztcbiAgICAgIH1cbiAgICAgIGlmIChwYXJlbnRJbmZvKSB7XG4gICAgICAgIC8vIHBhcmVudEluZm8gc2hvdWxkIGFsd2F5cyBiZSBwcmVzZW50IGV4Y2VwdCBmb3IgdGhlIHRvcC1sZXZlbFxuICAgICAgICAvLyBjb21wb25lbnQgd2hlbiBzZXJ2ZXIgcmVuZGVyaW5nXG4gICAgICAgIHZhbGlkYXRlRE9NTmVzdGluZyhudWxsLCB0aGlzLl9zdHJpbmdUZXh0LCB0aGlzLCBwYXJlbnRJbmZvKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgZG9tSUQgPSBob3N0Q29udGFpbmVySW5mby5faWRDb3VudGVyKys7XG4gICAgdmFyIG9wZW5pbmdWYWx1ZSA9ICcgcmVhY3QtdGV4dDogJyArIGRvbUlEICsgJyAnO1xuICAgIHZhciBjbG9zaW5nVmFsdWUgPSAnIC9yZWFjdC10ZXh0ICc7XG4gICAgdGhpcy5fZG9tSUQgPSBkb21JRDtcbiAgICB0aGlzLl9ob3N0UGFyZW50ID0gaG9zdFBhcmVudDtcbiAgICBpZiAodHJhbnNhY3Rpb24udXNlQ3JlYXRlRWxlbWVudCkge1xuICAgICAgdmFyIG93bmVyRG9jdW1lbnQgPSBob3N0Q29udGFpbmVySW5mby5fb3duZXJEb2N1bWVudDtcbiAgICAgIHZhciBvcGVuaW5nQ29tbWVudCA9IG93bmVyRG9jdW1lbnQuY3JlYXRlQ29tbWVudChvcGVuaW5nVmFsdWUpO1xuICAgICAgdmFyIGNsb3NpbmdDb21tZW50ID0gb3duZXJEb2N1bWVudC5jcmVhdGVDb21tZW50KGNsb3NpbmdWYWx1ZSk7XG4gICAgICB2YXIgbGF6eVRyZWUgPSBET01MYXp5VHJlZShvd25lckRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSk7XG4gICAgICBET01MYXp5VHJlZS5xdWV1ZUNoaWxkKGxhenlUcmVlLCBET01MYXp5VHJlZShvcGVuaW5nQ29tbWVudCkpO1xuICAgICAgaWYgKHRoaXMuX3N0cmluZ1RleHQpIHtcbiAgICAgICAgRE9NTGF6eVRyZWUucXVldWVDaGlsZChsYXp5VHJlZSwgRE9NTGF6eVRyZWUob3duZXJEb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0aGlzLl9zdHJpbmdUZXh0KSkpO1xuICAgICAgfVxuICAgICAgRE9NTGF6eVRyZWUucXVldWVDaGlsZChsYXp5VHJlZSwgRE9NTGF6eVRyZWUoY2xvc2luZ0NvbW1lbnQpKTtcbiAgICAgIFJlYWN0RE9NQ29tcG9uZW50VHJlZS5wcmVjYWNoZU5vZGUodGhpcywgb3BlbmluZ0NvbW1lbnQpO1xuICAgICAgdGhpcy5fY2xvc2luZ0NvbW1lbnQgPSBjbG9zaW5nQ29tbWVudDtcbiAgICAgIHJldHVybiBsYXp5VHJlZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGVzY2FwZWRUZXh0ID0gZXNjYXBlVGV4dENvbnRlbnRGb3JCcm93c2VyKHRoaXMuX3N0cmluZ1RleHQpO1xuXG4gICAgICBpZiAodHJhbnNhY3Rpb24ucmVuZGVyVG9TdGF0aWNNYXJrdXApIHtcbiAgICAgICAgLy8gTm9ybWFsbHkgd2UnZCB3cmFwIHRoaXMgYmV0d2VlbiBjb21tZW50IG5vZGVzIGZvciB0aGUgcmVhc29ucyBzdGF0ZWRcbiAgICAgICAgLy8gYWJvdmUsIGJ1dCBzaW5jZSB0aGlzIGlzIGEgc2l0dWF0aW9uIHdoZXJlIFJlYWN0IHdvbid0IHRha2Ugb3ZlclxuICAgICAgICAvLyAoc3RhdGljIHBhZ2VzKSwgd2UgY2FuIHNpbXBseSByZXR1cm4gdGhlIHRleHQgYXMgaXQgaXMuXG4gICAgICAgIHJldHVybiBlc2NhcGVkVGV4dDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuICc8IS0tJyArIG9wZW5pbmdWYWx1ZSArICctLT4nICsgZXNjYXBlZFRleHQgKyAnPCEtLScgKyBjbG9zaW5nVmFsdWUgKyAnLS0+JztcbiAgICB9XG4gIH0sXG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhpcyBjb21wb25lbnQgYnkgdXBkYXRpbmcgdGhlIHRleHQgY29udGVudC5cbiAgICpcbiAgICogQHBhcmFtIHtSZWFjdFRleHR9IG5leHRUZXh0IFRoZSBuZXh0IHRleHQgY29udGVudFxuICAgKiBAcGFyYW0ge1JlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb259IHRyYW5zYWN0aW9uXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcmVjZWl2ZUNvbXBvbmVudDogZnVuY3Rpb24gKG5leHRUZXh0LCB0cmFuc2FjdGlvbikge1xuICAgIGlmIChuZXh0VGV4dCAhPT0gdGhpcy5fY3VycmVudEVsZW1lbnQpIHtcbiAgICAgIHRoaXMuX2N1cnJlbnRFbGVtZW50ID0gbmV4dFRleHQ7XG4gICAgICB2YXIgbmV4dFN0cmluZ1RleHQgPSAnJyArIG5leHRUZXh0O1xuICAgICAgaWYgKG5leHRTdHJpbmdUZXh0ICE9PSB0aGlzLl9zdHJpbmdUZXh0KSB7XG4gICAgICAgIC8vIFRPRE86IFNhdmUgdGhpcyBhcyBwZW5kaW5nIHByb3BzIGFuZCB1c2UgcGVyZm9ybVVwZGF0ZUlmTmVjZXNzYXJ5XG4gICAgICAgIC8vIGFuZC9vciB1cGRhdGVDb21wb25lbnQgdG8gZG8gdGhlIGFjdHVhbCB1cGRhdGUgZm9yIGNvbnNpc3RlbmN5IHdpdGhcbiAgICAgICAgLy8gb3RoZXIgY29tcG9uZW50IHR5cGVzP1xuICAgICAgICB0aGlzLl9zdHJpbmdUZXh0ID0gbmV4dFN0cmluZ1RleHQ7XG4gICAgICAgIHZhciBjb21tZW50Tm9kZXMgPSB0aGlzLmdldEhvc3ROb2RlKCk7XG4gICAgICAgIERPTUNoaWxkcmVuT3BlcmF0aW9ucy5yZXBsYWNlRGVsaW1pdGVkVGV4dChjb21tZW50Tm9kZXNbMF0sIGNvbW1lbnROb2Rlc1sxXSwgbmV4dFN0cmluZ1RleHQpO1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBnZXRIb3N0Tm9kZTogZnVuY3Rpb24gKCkge1xuICAgIHZhciBob3N0Tm9kZSA9IHRoaXMuX2NvbW1lbnROb2RlcztcbiAgICBpZiAoaG9zdE5vZGUpIHtcbiAgICAgIHJldHVybiBob3N0Tm9kZTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLl9jbG9zaW5nQ29tbWVudCkge1xuICAgICAgdmFyIG9wZW5pbmdDb21tZW50ID0gUmVhY3RET01Db21wb25lbnRUcmVlLmdldE5vZGVGcm9tSW5zdGFuY2UodGhpcyk7XG4gICAgICB2YXIgbm9kZSA9IG9wZW5pbmdDb21tZW50Lm5leHRTaWJsaW5nO1xuICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgIShub2RlICE9IG51bGwpID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IGludmFyaWFudChmYWxzZSwgJ01pc3NpbmcgY2xvc2luZyBjb21tZW50IGZvciB0ZXh0IGNvbXBvbmVudCAlcycsIHRoaXMuX2RvbUlEKSA6IF9wcm9kSW52YXJpYW50KCc2NycsIHRoaXMuX2RvbUlEKSA6IHZvaWQgMDtcbiAgICAgICAgaWYgKG5vZGUubm9kZVR5cGUgPT09IDggJiYgbm9kZS5ub2RlVmFsdWUgPT09ICcgL3JlYWN0LXRleHQgJykge1xuICAgICAgICAgIHRoaXMuX2Nsb3NpbmdDb21tZW50ID0gbm9kZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBub2RlID0gbm9kZS5uZXh0U2libGluZztcbiAgICAgIH1cbiAgICB9XG4gICAgaG9zdE5vZGUgPSBbdGhpcy5faG9zdE5vZGUsIHRoaXMuX2Nsb3NpbmdDb21tZW50XTtcbiAgICB0aGlzLl9jb21tZW50Tm9kZXMgPSBob3N0Tm9kZTtcbiAgICByZXR1cm4gaG9zdE5vZGU7XG4gIH0sXG5cbiAgdW5tb3VudENvbXBvbmVudDogZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuX2Nsb3NpbmdDb21tZW50ID0gbnVsbDtcbiAgICB0aGlzLl9jb21tZW50Tm9kZXMgPSBudWxsO1xuICAgIFJlYWN0RE9NQ29tcG9uZW50VHJlZS51bmNhY2hlTm9kZSh0aGlzKTtcbiAgfVxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RET01UZXh0Q29tcG9uZW50O1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QtZG9tL2xpYi9SZWFjdERPTVRleHRDb21wb25lbnQuanMiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgX3Byb2RJbnZhcmlhbnQgPSByZXF1aXJlKCcuL3JlYWN0UHJvZEludmFyaWFudCcpLFxuICAgIF9hc3NpZ24gPSByZXF1aXJlKCdvYmplY3QtYXNzaWduJyk7XG5cbnZhciBMaW5rZWRWYWx1ZVV0aWxzID0gcmVxdWlyZSgnLi9MaW5rZWRWYWx1ZVV0aWxzJyk7XG52YXIgUmVhY3RET01Db21wb25lbnRUcmVlID0gcmVxdWlyZSgnLi9SZWFjdERPTUNvbXBvbmVudFRyZWUnKTtcbnZhciBSZWFjdFVwZGF0ZXMgPSByZXF1aXJlKCcuL1JlYWN0VXBkYXRlcycpO1xuXG52YXIgaW52YXJpYW50ID0gcmVxdWlyZSgnZmJqcy9saWIvaW52YXJpYW50Jyk7XG52YXIgd2FybmluZyA9IHJlcXVpcmUoJ2ZianMvbGliL3dhcm5pbmcnKTtcblxudmFyIGRpZFdhcm5WYWx1ZUxpbmsgPSBmYWxzZTtcbnZhciBkaWRXYXJuVmFsRGVmYXVsdFZhbCA9IGZhbHNlO1xuXG5mdW5jdGlvbiBmb3JjZVVwZGF0ZUlmTW91bnRlZCgpIHtcbiAgaWYgKHRoaXMuX3Jvb3ROb2RlSUQpIHtcbiAgICAvLyBET00gY29tcG9uZW50IGlzIHN0aWxsIG1vdW50ZWQ7IHVwZGF0ZVxuICAgIFJlYWN0RE9NVGV4dGFyZWEudXBkYXRlV3JhcHBlcih0aGlzKTtcbiAgfVxufVxuXG4vKipcbiAqIEltcGxlbWVudHMgYSA8dGV4dGFyZWE+IGhvc3QgY29tcG9uZW50IHRoYXQgYWxsb3dzIHNldHRpbmcgYHZhbHVlYCwgYW5kXG4gKiBgZGVmYXVsdFZhbHVlYC4gVGhpcyBkaWZmZXJzIGZyb20gdGhlIHRyYWRpdGlvbmFsIERPTSBBUEkgYmVjYXVzZSB2YWx1ZSBpc1xuICogdXN1YWxseSBzZXQgYXMgUENEQVRBIGNoaWxkcmVuLlxuICpcbiAqIElmIGB2YWx1ZWAgaXMgbm90IHN1cHBsaWVkIChvciBudWxsL3VuZGVmaW5lZCksIHVzZXIgYWN0aW9ucyB0aGF0IGFmZmVjdCB0aGVcbiAqIHZhbHVlIHdpbGwgdHJpZ2dlciB1cGRhdGVzIHRvIHRoZSBlbGVtZW50LlxuICpcbiAqIElmIGB2YWx1ZWAgaXMgc3VwcGxpZWQgKGFuZCBub3QgbnVsbC91bmRlZmluZWQpLCB0aGUgcmVuZGVyZWQgZWxlbWVudCB3aWxsXG4gKiBub3QgdHJpZ2dlciB1cGRhdGVzIHRvIHRoZSBlbGVtZW50LiBJbnN0ZWFkLCB0aGUgYHZhbHVlYCBwcm9wIG11c3QgY2hhbmdlIGluXG4gKiBvcmRlciBmb3IgdGhlIHJlbmRlcmVkIGVsZW1lbnQgdG8gYmUgdXBkYXRlZC5cbiAqXG4gKiBUaGUgcmVuZGVyZWQgZWxlbWVudCB3aWxsIGJlIGluaXRpYWxpemVkIHdpdGggYW4gZW1wdHkgdmFsdWUsIHRoZSBwcm9wXG4gKiBgZGVmYXVsdFZhbHVlYCBpZiBzcGVjaWZpZWQsIG9yIHRoZSBjaGlsZHJlbiBjb250ZW50IChkZXByZWNhdGVkKS5cbiAqL1xudmFyIFJlYWN0RE9NVGV4dGFyZWEgPSB7XG4gIGdldEhvc3RQcm9wczogZnVuY3Rpb24gKGluc3QsIHByb3BzKSB7XG4gICAgIShwcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTCA9PSBudWxsKSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICdgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxgIGRvZXMgbm90IG1ha2Ugc2Vuc2Ugb24gPHRleHRhcmVhPi4nKSA6IF9wcm9kSW52YXJpYW50KCc5MScpIDogdm9pZCAwO1xuXG4gICAgLy8gQWx3YXlzIHNldCBjaGlsZHJlbiB0byB0aGUgc2FtZSB0aGluZy4gSW4gSUU5LCB0aGUgc2VsZWN0aW9uIHJhbmdlIHdpbGxcbiAgICAvLyBnZXQgcmVzZXQgaWYgYHRleHRDb250ZW50YCBpcyBtdXRhdGVkLiAgV2UgY291bGQgYWRkIGEgY2hlY2sgaW4gc2V0VGV4dENvbnRlbnRcbiAgICAvLyB0byBvbmx5IHNldCB0aGUgdmFsdWUgaWYvd2hlbiB0aGUgdmFsdWUgZGlmZmVycyBmcm9tIHRoZSBub2RlIHZhbHVlICh3aGljaCB3b3VsZFxuICAgIC8vIGNvbXBsZXRlbHkgc29sdmUgdGhpcyBJRTkgYnVnKSwgYnV0IFNlYmFzdGlhbitCZW4gc2VlbWVkIHRvIGxpa2UgdGhpcyBzb2x1dGlvbi5cbiAgICAvLyBUaGUgdmFsdWUgY2FuIGJlIGEgYm9vbGVhbiBvciBvYmplY3Qgc28gdGhhdCdzIHdoeSBpdCdzIGZvcmNlZCB0byBiZSBhIHN0cmluZy5cbiAgICB2YXIgaG9zdFByb3BzID0gX2Fzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgIHZhbHVlOiB1bmRlZmluZWQsXG4gICAgICBkZWZhdWx0VmFsdWU6IHVuZGVmaW5lZCxcbiAgICAgIGNoaWxkcmVuOiAnJyArIGluc3QuX3dyYXBwZXJTdGF0ZS5pbml0aWFsVmFsdWUsXG4gICAgICBvbkNoYW5nZTogaW5zdC5fd3JhcHBlclN0YXRlLm9uQ2hhbmdlXG4gICAgfSk7XG5cbiAgICByZXR1cm4gaG9zdFByb3BzO1xuICB9LFxuXG4gIG1vdW50V3JhcHBlcjogZnVuY3Rpb24gKGluc3QsIHByb3BzKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIExpbmtlZFZhbHVlVXRpbHMuY2hlY2tQcm9wVHlwZXMoJ3RleHRhcmVhJywgcHJvcHMsIGluc3QuX2N1cnJlbnRFbGVtZW50Ll9vd25lcik7XG4gICAgICBpZiAocHJvcHMudmFsdWVMaW5rICE9PSB1bmRlZmluZWQgJiYgIWRpZFdhcm5WYWx1ZUxpbmspIHtcbiAgICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcoZmFsc2UsICdgdmFsdWVMaW5rYCBwcm9wIG9uIGB0ZXh0YXJlYWAgaXMgZGVwcmVjYXRlZDsgc2V0IGB2YWx1ZWAgYW5kIGBvbkNoYW5nZWAgaW5zdGVhZC4nKSA6IHZvaWQgMDtcbiAgICAgICAgZGlkV2FyblZhbHVlTGluayA9IHRydWU7XG4gICAgICB9XG4gICAgICBpZiAocHJvcHMudmFsdWUgIT09IHVuZGVmaW5lZCAmJiBwcm9wcy5kZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCAmJiAhZGlkV2FyblZhbERlZmF1bHRWYWwpIHtcbiAgICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcoZmFsc2UsICdUZXh0YXJlYSBlbGVtZW50cyBtdXN0IGJlIGVpdGhlciBjb250cm9sbGVkIG9yIHVuY29udHJvbGxlZCAnICsgJyhzcGVjaWZ5IGVpdGhlciB0aGUgdmFsdWUgcHJvcCwgb3IgdGhlIGRlZmF1bHRWYWx1ZSBwcm9wLCBidXQgbm90ICcgKyAnYm90aCkuIERlY2lkZSBiZXR3ZWVuIHVzaW5nIGEgY29udHJvbGxlZCBvciB1bmNvbnRyb2xsZWQgdGV4dGFyZWEgJyArICdhbmQgcmVtb3ZlIG9uZSBvZiB0aGVzZSBwcm9wcy4gTW9yZSBpbmZvOiAnICsgJ2h0dHBzOi8vZmIubWUvcmVhY3QtY29udHJvbGxlZC1jb21wb25lbnRzJykgOiB2b2lkIDA7XG4gICAgICAgIGRpZFdhcm5WYWxEZWZhdWx0VmFsID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgdmFsdWUgPSBMaW5rZWRWYWx1ZVV0aWxzLmdldFZhbHVlKHByb3BzKTtcbiAgICB2YXIgaW5pdGlhbFZhbHVlID0gdmFsdWU7XG5cbiAgICAvLyBPbmx5IGJvdGhlciBmZXRjaGluZyBkZWZhdWx0IHZhbHVlIGlmIHdlJ3JlIGdvaW5nIHRvIHVzZSBpdFxuICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgICB2YXIgZGVmYXVsdFZhbHVlID0gcHJvcHMuZGVmYXVsdFZhbHVlO1xuICAgICAgLy8gVE9ETyAoeXVuZ3N0ZXJzKTogUmVtb3ZlIHN1cHBvcnQgZm9yIGNoaWxkcmVuIGNvbnRlbnQgaW4gPHRleHRhcmVhPi5cbiAgICAgIHZhciBjaGlsZHJlbiA9IHByb3BzLmNoaWxkcmVuO1xuICAgICAgaWYgKGNoaWxkcmVuICE9IG51bGwpIHtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyhmYWxzZSwgJ1VzZSB0aGUgYGRlZmF1bHRWYWx1ZWAgb3IgYHZhbHVlYCBwcm9wcyBpbnN0ZWFkIG9mIHNldHRpbmcgJyArICdjaGlsZHJlbiBvbiA8dGV4dGFyZWE+LicpIDogdm9pZCAwO1xuICAgICAgICB9XG4gICAgICAgICEoZGVmYXVsdFZhbHVlID09IG51bGwpID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IGludmFyaWFudChmYWxzZSwgJ0lmIHlvdSBzdXBwbHkgYGRlZmF1bHRWYWx1ZWAgb24gYSA8dGV4dGFyZWE+LCBkbyBub3QgcGFzcyBjaGlsZHJlbi4nKSA6IF9wcm9kSW52YXJpYW50KCc5MicpIDogdm9pZCAwO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjaGlsZHJlbikpIHtcbiAgICAgICAgICAhKGNoaWxkcmVuLmxlbmd0aCA8PSAxKSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICc8dGV4dGFyZWE+IGNhbiBvbmx5IGhhdmUgYXQgbW9zdCBvbmUgY2hpbGQuJykgOiBfcHJvZEludmFyaWFudCgnOTMnKSA6IHZvaWQgMDtcbiAgICAgICAgICBjaGlsZHJlbiA9IGNoaWxkcmVuWzBdO1xuICAgICAgICB9XG5cbiAgICAgICAgZGVmYXVsdFZhbHVlID0gJycgKyBjaGlsZHJlbjtcbiAgICAgIH1cbiAgICAgIGlmIChkZWZhdWx0VmFsdWUgPT0gbnVsbCkge1xuICAgICAgICBkZWZhdWx0VmFsdWUgPSAnJztcbiAgICAgIH1cbiAgICAgIGluaXRpYWxWYWx1ZSA9IGRlZmF1bHRWYWx1ZTtcbiAgICB9XG5cbiAgICBpbnN0Ll93cmFwcGVyU3RhdGUgPSB7XG4gICAgICBpbml0aWFsVmFsdWU6ICcnICsgaW5pdGlhbFZhbHVlLFxuICAgICAgbGlzdGVuZXJzOiBudWxsLFxuICAgICAgb25DaGFuZ2U6IF9oYW5kbGVDaGFuZ2UuYmluZChpbnN0KVxuICAgIH07XG4gIH0sXG5cbiAgdXBkYXRlV3JhcHBlcjogZnVuY3Rpb24gKGluc3QpIHtcbiAgICB2YXIgcHJvcHMgPSBpbnN0Ll9jdXJyZW50RWxlbWVudC5wcm9wcztcblxuICAgIHZhciBub2RlID0gUmVhY3RET01Db21wb25lbnRUcmVlLmdldE5vZGVGcm9tSW5zdGFuY2UoaW5zdCk7XG4gICAgdmFyIHZhbHVlID0gTGlua2VkVmFsdWVVdGlscy5nZXRWYWx1ZShwcm9wcyk7XG4gICAgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICAgIC8vIENhc3QgYHZhbHVlYCB0byBhIHN0cmluZyB0byBlbnN1cmUgdGhlIHZhbHVlIGlzIHNldCBjb3JyZWN0bHkuIFdoaWxlXG4gICAgICAvLyBicm93c2VycyB0eXBpY2FsbHkgZG8gdGhpcyBhcyBuZWNlc3NhcnksIGpzZG9tIGRvZXNuJ3QuXG4gICAgICB2YXIgbmV3VmFsdWUgPSAnJyArIHZhbHVlO1xuXG4gICAgICAvLyBUbyBhdm9pZCBzaWRlIGVmZmVjdHMgKHN1Y2ggYXMgbG9zaW5nIHRleHQgc2VsZWN0aW9uKSwgb25seSBzZXQgdmFsdWUgaWYgY2hhbmdlZFxuICAgICAgaWYgKG5ld1ZhbHVlICE9PSBub2RlLnZhbHVlKSB7XG4gICAgICAgIG5vZGUudmFsdWUgPSBuZXdWYWx1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wcy5kZWZhdWx0VmFsdWUgPT0gbnVsbCkge1xuICAgICAgICBub2RlLmRlZmF1bHRWYWx1ZSA9IG5ld1ZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAocHJvcHMuZGVmYXVsdFZhbHVlICE9IG51bGwpIHtcbiAgICAgIG5vZGUuZGVmYXVsdFZhbHVlID0gcHJvcHMuZGVmYXVsdFZhbHVlO1xuICAgIH1cbiAgfSxcblxuICBwb3N0TW91bnRXcmFwcGVyOiBmdW5jdGlvbiAoaW5zdCkge1xuICAgIC8vIFRoaXMgaXMgaW4gcG9zdE1vdW50IGJlY2F1c2Ugd2UgbmVlZCBhY2Nlc3MgdG8gdGhlIERPTSBub2RlLCB3aGljaCBpcyBub3RcbiAgICAvLyBhdmFpbGFibGUgdW50aWwgYWZ0ZXIgdGhlIGNvbXBvbmVudCBoYXMgbW91bnRlZC5cbiAgICB2YXIgbm9kZSA9IFJlYWN0RE9NQ29tcG9uZW50VHJlZS5nZXROb2RlRnJvbUluc3RhbmNlKGluc3QpO1xuICAgIHZhciB0ZXh0Q29udGVudCA9IG5vZGUudGV4dENvbnRlbnQ7XG5cbiAgICAvLyBPbmx5IHNldCBub2RlLnZhbHVlIGlmIHRleHRDb250ZW50IGlzIGVxdWFsIHRvIHRoZSBleHBlY3RlZFxuICAgIC8vIGluaXRpYWwgdmFsdWUuIEluIElFMTAvSUUxMSB0aGVyZSBpcyBhIGJ1ZyB3aGVyZSB0aGUgcGxhY2Vob2xkZXIgYXR0cmlidXRlXG4gICAgLy8gd2lsbCBwb3B1bGF0ZSB0ZXh0Q29udGVudCBhcyB3ZWxsLlxuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1pY3Jvc29mdC5jb20vbWljcm9zb2Z0LWVkZ2UvcGxhdGZvcm0vaXNzdWVzLzEwMTUyNS9cbiAgICBpZiAodGV4dENvbnRlbnQgPT09IGluc3QuX3dyYXBwZXJTdGF0ZS5pbml0aWFsVmFsdWUpIHtcbiAgICAgIG5vZGUudmFsdWUgPSB0ZXh0Q29udGVudDtcbiAgICB9XG4gIH1cbn07XG5cbmZ1bmN0aW9uIF9oYW5kbGVDaGFuZ2UoZXZlbnQpIHtcbiAgdmFyIHByb3BzID0gdGhpcy5fY3VycmVudEVsZW1lbnQucHJvcHM7XG4gIHZhciByZXR1cm5WYWx1ZSA9IExpbmtlZFZhbHVlVXRpbHMuZXhlY3V0ZU9uQ2hhbmdlKHByb3BzLCBldmVudCk7XG4gIFJlYWN0VXBkYXRlcy5hc2FwKGZvcmNlVXBkYXRlSWZNb3VudGVkLCB0aGlzKTtcbiAgcmV0dXJuIHJldHVyblZhbHVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0RE9NVGV4dGFyZWE7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1kb20vbGliL1JlYWN0RE9NVGV4dGFyZWEuanMiLCIvKipcbiAqIENvcHlyaWdodCAyMDE1LXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgX3Byb2RJbnZhcmlhbnQgPSByZXF1aXJlKCcuL3JlYWN0UHJvZEludmFyaWFudCcpO1xuXG52YXIgaW52YXJpYW50ID0gcmVxdWlyZSgnZmJqcy9saWIvaW52YXJpYW50Jyk7XG5cbi8qKlxuICogUmV0dXJuIHRoZSBsb3dlc3QgY29tbW9uIGFuY2VzdG9yIG9mIEEgYW5kIEIsIG9yIG51bGwgaWYgdGhleSBhcmUgaW5cbiAqIGRpZmZlcmVudCB0cmVlcy5cbiAqL1xuZnVuY3Rpb24gZ2V0TG93ZXN0Q29tbW9uQW5jZXN0b3IoaW5zdEEsIGluc3RCKSB7XG4gICEoJ19ob3N0Tm9kZScgaW4gaW5zdEEpID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IGludmFyaWFudChmYWxzZSwgJ2dldE5vZGVGcm9tSW5zdGFuY2U6IEludmFsaWQgYXJndW1lbnQuJykgOiBfcHJvZEludmFyaWFudCgnMzMnKSA6IHZvaWQgMDtcbiAgISgnX2hvc3ROb2RlJyBpbiBpbnN0QikgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAnZ2V0Tm9kZUZyb21JbnN0YW5jZTogSW52YWxpZCBhcmd1bWVudC4nKSA6IF9wcm9kSW52YXJpYW50KCczMycpIDogdm9pZCAwO1xuXG4gIHZhciBkZXB0aEEgPSAwO1xuICBmb3IgKHZhciB0ZW1wQSA9IGluc3RBOyB0ZW1wQTsgdGVtcEEgPSB0ZW1wQS5faG9zdFBhcmVudCkge1xuICAgIGRlcHRoQSsrO1xuICB9XG4gIHZhciBkZXB0aEIgPSAwO1xuICBmb3IgKHZhciB0ZW1wQiA9IGluc3RCOyB0ZW1wQjsgdGVtcEIgPSB0ZW1wQi5faG9zdFBhcmVudCkge1xuICAgIGRlcHRoQisrO1xuICB9XG5cbiAgLy8gSWYgQSBpcyBkZWVwZXIsIGNyYXdsIHVwLlxuICB3aGlsZSAoZGVwdGhBIC0gZGVwdGhCID4gMCkge1xuICAgIGluc3RBID0gaW5zdEEuX2hvc3RQYXJlbnQ7XG4gICAgZGVwdGhBLS07XG4gIH1cblxuICAvLyBJZiBCIGlzIGRlZXBlciwgY3Jhd2wgdXAuXG4gIHdoaWxlIChkZXB0aEIgLSBkZXB0aEEgPiAwKSB7XG4gICAgaW5zdEIgPSBpbnN0Qi5faG9zdFBhcmVudDtcbiAgICBkZXB0aEItLTtcbiAgfVxuXG4gIC8vIFdhbGsgaW4gbG9ja3N0ZXAgdW50aWwgd2UgZmluZCBhIG1hdGNoLlxuICB2YXIgZGVwdGggPSBkZXB0aEE7XG4gIHdoaWxlIChkZXB0aC0tKSB7XG4gICAgaWYgKGluc3RBID09PSBpbnN0Qikge1xuICAgICAgcmV0dXJuIGluc3RBO1xuICAgIH1cbiAgICBpbnN0QSA9IGluc3RBLl9ob3N0UGFyZW50O1xuICAgIGluc3RCID0gaW5zdEIuX2hvc3RQYXJlbnQ7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogUmV0dXJuIGlmIEEgaXMgYW4gYW5jZXN0b3Igb2YgQi5cbiAqL1xuZnVuY3Rpb24gaXNBbmNlc3RvcihpbnN0QSwgaW5zdEIpIHtcbiAgISgnX2hvc3ROb2RlJyBpbiBpbnN0QSkgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAnaXNBbmNlc3RvcjogSW52YWxpZCBhcmd1bWVudC4nKSA6IF9wcm9kSW52YXJpYW50KCczNScpIDogdm9pZCAwO1xuICAhKCdfaG9zdE5vZGUnIGluIGluc3RCKSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICdpc0FuY2VzdG9yOiBJbnZhbGlkIGFyZ3VtZW50LicpIDogX3Byb2RJbnZhcmlhbnQoJzM1JykgOiB2b2lkIDA7XG5cbiAgd2hpbGUgKGluc3RCKSB7XG4gICAgaWYgKGluc3RCID09PSBpbnN0QSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGluc3RCID0gaW5zdEIuX2hvc3RQYXJlbnQ7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIFJldHVybiB0aGUgcGFyZW50IGluc3RhbmNlIG9mIHRoZSBwYXNzZWQtaW4gaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIGdldFBhcmVudEluc3RhbmNlKGluc3QpIHtcbiAgISgnX2hvc3ROb2RlJyBpbiBpbnN0KSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICdnZXRQYXJlbnRJbnN0YW5jZTogSW52YWxpZCBhcmd1bWVudC4nKSA6IF9wcm9kSW52YXJpYW50KCczNicpIDogdm9pZCAwO1xuXG4gIHJldHVybiBpbnN0Ll9ob3N0UGFyZW50O1xufVxuXG4vKipcbiAqIFNpbXVsYXRlcyB0aGUgdHJhdmVyc2FsIG9mIGEgdHdvLXBoYXNlLCBjYXB0dXJlL2J1YmJsZSBldmVudCBkaXNwYXRjaC5cbiAqL1xuZnVuY3Rpb24gdHJhdmVyc2VUd29QaGFzZShpbnN0LCBmbiwgYXJnKSB7XG4gIHZhciBwYXRoID0gW107XG4gIHdoaWxlIChpbnN0KSB7XG4gICAgcGF0aC5wdXNoKGluc3QpO1xuICAgIGluc3QgPSBpbnN0Ll9ob3N0UGFyZW50O1xuICB9XG4gIHZhciBpO1xuICBmb3IgKGkgPSBwYXRoLmxlbmd0aDsgaS0tID4gMDspIHtcbiAgICBmbihwYXRoW2ldLCAnY2FwdHVyZWQnLCBhcmcpO1xuICB9XG4gIGZvciAoaSA9IDA7IGkgPCBwYXRoLmxlbmd0aDsgaSsrKSB7XG4gICAgZm4ocGF0aFtpXSwgJ2J1YmJsZWQnLCBhcmcpO1xuICB9XG59XG5cbi8qKlxuICogVHJhdmVyc2VzIHRoZSBJRCBoaWVyYXJjaHkgYW5kIGludm9rZXMgdGhlIHN1cHBsaWVkIGBjYmAgb24gYW55IElEcyB0aGF0XG4gKiBzaG91bGQgd291bGQgcmVjZWl2ZSBhIGBtb3VzZUVudGVyYCBvciBgbW91c2VMZWF2ZWAgZXZlbnQuXG4gKlxuICogRG9lcyBub3QgaW52b2tlIHRoZSBjYWxsYmFjayBvbiB0aGUgbmVhcmVzdCBjb21tb24gYW5jZXN0b3IgYmVjYXVzZSBub3RoaW5nXG4gKiBcImVudGVyZWRcIiBvciBcImxlZnRcIiB0aGF0IGVsZW1lbnQuXG4gKi9cbmZ1bmN0aW9uIHRyYXZlcnNlRW50ZXJMZWF2ZShmcm9tLCB0bywgZm4sIGFyZ0Zyb20sIGFyZ1RvKSB7XG4gIHZhciBjb21tb24gPSBmcm9tICYmIHRvID8gZ2V0TG93ZXN0Q29tbW9uQW5jZXN0b3IoZnJvbSwgdG8pIDogbnVsbDtcbiAgdmFyIHBhdGhGcm9tID0gW107XG4gIHdoaWxlIChmcm9tICYmIGZyb20gIT09IGNvbW1vbikge1xuICAgIHBhdGhGcm9tLnB1c2goZnJvbSk7XG4gICAgZnJvbSA9IGZyb20uX2hvc3RQYXJlbnQ7XG4gIH1cbiAgdmFyIHBhdGhUbyA9IFtdO1xuICB3aGlsZSAodG8gJiYgdG8gIT09IGNvbW1vbikge1xuICAgIHBhdGhUby5wdXNoKHRvKTtcbiAgICB0byA9IHRvLl9ob3N0UGFyZW50O1xuICB9XG4gIHZhciBpO1xuICBmb3IgKGkgPSAwOyBpIDwgcGF0aEZyb20ubGVuZ3RoOyBpKyspIHtcbiAgICBmbihwYXRoRnJvbVtpXSwgJ2J1YmJsZWQnLCBhcmdGcm9tKTtcbiAgfVxuICBmb3IgKGkgPSBwYXRoVG8ubGVuZ3RoOyBpLS0gPiAwOykge1xuICAgIGZuKHBhdGhUb1tpXSwgJ2NhcHR1cmVkJywgYXJnVG8pO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpc0FuY2VzdG9yOiBpc0FuY2VzdG9yLFxuICBnZXRMb3dlc3RDb21tb25BbmNlc3RvcjogZ2V0TG93ZXN0Q29tbW9uQW5jZXN0b3IsXG4gIGdldFBhcmVudEluc3RhbmNlOiBnZXRQYXJlbnRJbnN0YW5jZSxcbiAgdHJhdmVyc2VUd29QaGFzZTogdHJhdmVyc2VUd29QaGFzZSxcbiAgdHJhdmVyc2VFbnRlckxlYXZlOiB0cmF2ZXJzZUVudGVyTGVhdmVcbn07XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1kb20vbGliL1JlYWN0RE9NVHJlZVRyYXZlcnNhbC5qcyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBET01Qcm9wZXJ0eSA9IHJlcXVpcmUoJy4vRE9NUHJvcGVydHknKTtcbnZhciBFdmVudFBsdWdpblJlZ2lzdHJ5ID0gcmVxdWlyZSgnLi9FdmVudFBsdWdpblJlZ2lzdHJ5Jyk7XG52YXIgUmVhY3RDb21wb25lbnRUcmVlSG9vayA9IHJlcXVpcmUoJ3JlYWN0L2xpYi9SZWFjdENvbXBvbmVudFRyZWVIb29rJyk7XG5cbnZhciB3YXJuaW5nID0gcmVxdWlyZSgnZmJqcy9saWIvd2FybmluZycpO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICB2YXIgcmVhY3RQcm9wcyA9IHtcbiAgICBjaGlsZHJlbjogdHJ1ZSxcbiAgICBkYW5nZXJvdXNseVNldElubmVySFRNTDogdHJ1ZSxcbiAgICBrZXk6IHRydWUsXG4gICAgcmVmOiB0cnVlLFxuXG4gICAgYXV0b0ZvY3VzOiB0cnVlLFxuICAgIGRlZmF1bHRWYWx1ZTogdHJ1ZSxcbiAgICB2YWx1ZUxpbms6IHRydWUsXG4gICAgZGVmYXVsdENoZWNrZWQ6IHRydWUsXG4gICAgY2hlY2tlZExpbms6IHRydWUsXG4gICAgaW5uZXJIVE1MOiB0cnVlLFxuICAgIHN1cHByZXNzQ29udGVudEVkaXRhYmxlV2FybmluZzogdHJ1ZSxcbiAgICBvbkZvY3VzSW46IHRydWUsXG4gICAgb25Gb2N1c091dDogdHJ1ZVxuICB9O1xuICB2YXIgd2FybmVkUHJvcGVydGllcyA9IHt9O1xuXG4gIHZhciB2YWxpZGF0ZVByb3BlcnR5ID0gZnVuY3Rpb24gKHRhZ05hbWUsIG5hbWUsIGRlYnVnSUQpIHtcbiAgICBpZiAoRE9NUHJvcGVydHkucHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eShuYW1lKSB8fCBET01Qcm9wZXJ0eS5pc0N1c3RvbUF0dHJpYnV0ZShuYW1lKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmIChyZWFjdFByb3BzLmhhc093blByb3BlcnR5KG5hbWUpICYmIHJlYWN0UHJvcHNbbmFtZV0gfHwgd2FybmVkUHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eShuYW1lKSAmJiB3YXJuZWRQcm9wZXJ0aWVzW25hbWVdKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKEV2ZW50UGx1Z2luUmVnaXN0cnkucmVnaXN0cmF0aW9uTmFtZU1vZHVsZXMuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICB3YXJuZWRQcm9wZXJ0aWVzW25hbWVdID0gdHJ1ZTtcbiAgICB2YXIgbG93ZXJDYXNlZE5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAvLyBkYXRhLSogYXR0cmlidXRlcyBzaG91bGQgYmUgbG93ZXJjYXNlOyBzdWdnZXN0IHRoZSBsb3dlcmNhc2UgdmVyc2lvblxuICAgIHZhciBzdGFuZGFyZE5hbWUgPSBET01Qcm9wZXJ0eS5pc0N1c3RvbUF0dHJpYnV0ZShsb3dlckNhc2VkTmFtZSkgPyBsb3dlckNhc2VkTmFtZSA6IERPTVByb3BlcnR5LmdldFBvc3NpYmxlU3RhbmRhcmROYW1lLmhhc093blByb3BlcnR5KGxvd2VyQ2FzZWROYW1lKSA/IERPTVByb3BlcnR5LmdldFBvc3NpYmxlU3RhbmRhcmROYW1lW2xvd2VyQ2FzZWROYW1lXSA6IG51bGw7XG5cbiAgICB2YXIgcmVnaXN0cmF0aW9uTmFtZSA9IEV2ZW50UGx1Z2luUmVnaXN0cnkucG9zc2libGVSZWdpc3RyYXRpb25OYW1lcy5oYXNPd25Qcm9wZXJ0eShsb3dlckNhc2VkTmFtZSkgPyBFdmVudFBsdWdpblJlZ2lzdHJ5LnBvc3NpYmxlUmVnaXN0cmF0aW9uTmFtZXNbbG93ZXJDYXNlZE5hbWVdIDogbnVsbDtcblxuICAgIGlmIChzdGFuZGFyZE5hbWUgIT0gbnVsbCkge1xuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcoZmFsc2UsICdVbmtub3duIERPTSBwcm9wZXJ0eSAlcy4gRGlkIHlvdSBtZWFuICVzPyVzJywgbmFtZSwgc3RhbmRhcmROYW1lLCBSZWFjdENvbXBvbmVudFRyZWVIb29rLmdldFN0YWNrQWRkZW5kdW1CeUlEKGRlYnVnSUQpKSA6IHZvaWQgMDtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSBpZiAocmVnaXN0cmF0aW9uTmFtZSAhPSBudWxsKSB7XG4gICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyhmYWxzZSwgJ1Vua25vd24gZXZlbnQgaGFuZGxlciBwcm9wZXJ0eSAlcy4gRGlkIHlvdSBtZWFuIGAlc2A/JXMnLCBuYW1lLCByZWdpc3RyYXRpb25OYW1lLCBSZWFjdENvbXBvbmVudFRyZWVIb29rLmdldFN0YWNrQWRkZW5kdW1CeUlEKGRlYnVnSUQpKSA6IHZvaWQgMDtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBXZSB3ZXJlIHVuYWJsZSB0byBndWVzcyB3aGljaCBwcm9wIHRoZSB1c2VyIGludGVuZGVkLlxuICAgICAgLy8gSXQgaXMgbGlrZWx5IHRoYXQgdGhlIHVzZXIgd2FzIGp1c3QgYmxpbmRseSBzcHJlYWRpbmcvZm9yd2FyZGluZyBwcm9wc1xuICAgICAgLy8gQ29tcG9uZW50cyBzaG91bGQgYmUgY2FyZWZ1bCB0byBvbmx5IHJlbmRlciB2YWxpZCBwcm9wcy9hdHRyaWJ1dGVzLlxuICAgICAgLy8gV2FybmluZyB3aWxsIGJlIGludm9rZWQgaW4gd2FyblVua25vd25Qcm9wZXJ0aWVzIHRvIGFsbG93IGdyb3VwaW5nLlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfTtcbn1cblxudmFyIHdhcm5Vbmtub3duUHJvcGVydGllcyA9IGZ1bmN0aW9uIChkZWJ1Z0lELCBlbGVtZW50KSB7XG4gIHZhciB1bmtub3duUHJvcHMgPSBbXTtcbiAgZm9yICh2YXIga2V5IGluIGVsZW1lbnQucHJvcHMpIHtcbiAgICB2YXIgaXNWYWxpZCA9IHZhbGlkYXRlUHJvcGVydHkoZWxlbWVudC50eXBlLCBrZXksIGRlYnVnSUQpO1xuICAgIGlmICghaXNWYWxpZCkge1xuICAgICAgdW5rbm93blByb3BzLnB1c2goa2V5KTtcbiAgICB9XG4gIH1cblxuICB2YXIgdW5rbm93blByb3BTdHJpbmcgPSB1bmtub3duUHJvcHMubWFwKGZ1bmN0aW9uIChwcm9wKSB7XG4gICAgcmV0dXJuICdgJyArIHByb3AgKyAnYCc7XG4gIH0pLmpvaW4oJywgJyk7XG5cbiAgaWYgKHVua25vd25Qcm9wcy5sZW5ndGggPT09IDEpIHtcbiAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyhmYWxzZSwgJ1Vua25vd24gcHJvcCAlcyBvbiA8JXM+IHRhZy4gUmVtb3ZlIHRoaXMgcHJvcCBmcm9tIHRoZSBlbGVtZW50LiAnICsgJ0ZvciBkZXRhaWxzLCBzZWUgaHR0cHM6Ly9mYi5tZS9yZWFjdC11bmtub3duLXByb3AlcycsIHVua25vd25Qcm9wU3RyaW5nLCBlbGVtZW50LnR5cGUsIFJlYWN0Q29tcG9uZW50VHJlZUhvb2suZ2V0U3RhY2tBZGRlbmR1bUJ5SUQoZGVidWdJRCkpIDogdm9pZCAwO1xuICB9IGVsc2UgaWYgKHVua25vd25Qcm9wcy5sZW5ndGggPiAxKSB7XG4gICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcoZmFsc2UsICdVbmtub3duIHByb3BzICVzIG9uIDwlcz4gdGFnLiBSZW1vdmUgdGhlc2UgcHJvcHMgZnJvbSB0aGUgZWxlbWVudC4gJyArICdGb3IgZGV0YWlscywgc2VlIGh0dHBzOi8vZmIubWUvcmVhY3QtdW5rbm93bi1wcm9wJXMnLCB1bmtub3duUHJvcFN0cmluZywgZWxlbWVudC50eXBlLCBSZWFjdENvbXBvbmVudFRyZWVIb29rLmdldFN0YWNrQWRkZW5kdW1CeUlEKGRlYnVnSUQpKSA6IHZvaWQgMDtcbiAgfVxufTtcblxuZnVuY3Rpb24gaGFuZGxlRWxlbWVudChkZWJ1Z0lELCBlbGVtZW50KSB7XG4gIGlmIChlbGVtZW50ID09IG51bGwgfHwgdHlwZW9mIGVsZW1lbnQudHlwZSAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKGVsZW1lbnQudHlwZS5pbmRleE9mKCctJykgPj0gMCB8fCBlbGVtZW50LnByb3BzLmlzKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHdhcm5Vbmtub3duUHJvcGVydGllcyhkZWJ1Z0lELCBlbGVtZW50KTtcbn1cblxudmFyIFJlYWN0RE9NVW5rbm93blByb3BlcnR5SG9vayA9IHtcbiAgb25CZWZvcmVNb3VudENvbXBvbmVudDogZnVuY3Rpb24gKGRlYnVnSUQsIGVsZW1lbnQpIHtcbiAgICBoYW5kbGVFbGVtZW50KGRlYnVnSUQsIGVsZW1lbnQpO1xuICB9LFxuICBvbkJlZm9yZVVwZGF0ZUNvbXBvbmVudDogZnVuY3Rpb24gKGRlYnVnSUQsIGVsZW1lbnQpIHtcbiAgICBoYW5kbGVFbGVtZW50KGRlYnVnSUQsIGVsZW1lbnQpO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0RE9NVW5rbm93blByb3BlcnR5SG9vaztcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3JlYWN0LWRvbS9saWIvUmVhY3RET01Vbmtub3duUHJvcGVydHlIb29rLmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxNi1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUmVhY3RJbnZhbGlkU2V0U3RhdGVXYXJuaW5nSG9vayA9IHJlcXVpcmUoJy4vUmVhY3RJbnZhbGlkU2V0U3RhdGVXYXJuaW5nSG9vaycpO1xudmFyIFJlYWN0SG9zdE9wZXJhdGlvbkhpc3RvcnlIb29rID0gcmVxdWlyZSgnLi9SZWFjdEhvc3RPcGVyYXRpb25IaXN0b3J5SG9vaycpO1xudmFyIFJlYWN0Q29tcG9uZW50VHJlZUhvb2sgPSByZXF1aXJlKCdyZWFjdC9saWIvUmVhY3RDb21wb25lbnRUcmVlSG9vaycpO1xudmFyIEV4ZWN1dGlvbkVudmlyb25tZW50ID0gcmVxdWlyZSgnZmJqcy9saWIvRXhlY3V0aW9uRW52aXJvbm1lbnQnKTtcblxudmFyIHBlcmZvcm1hbmNlTm93ID0gcmVxdWlyZSgnZmJqcy9saWIvcGVyZm9ybWFuY2VOb3cnKTtcbnZhciB3YXJuaW5nID0gcmVxdWlyZSgnZmJqcy9saWIvd2FybmluZycpO1xuXG52YXIgaG9va3MgPSBbXTtcbnZhciBkaWRIb29rVGhyb3dGb3JFdmVudCA9IHt9O1xuXG5mdW5jdGlvbiBjYWxsSG9vayhldmVudCwgZm4sIGNvbnRleHQsIGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQsIGFyZzUpIHtcbiAgdHJ5IHtcbiAgICBmbi5jYWxsKGNvbnRleHQsIGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQsIGFyZzUpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcoZGlkSG9va1Rocm93Rm9yRXZlbnRbZXZlbnRdLCAnRXhjZXB0aW9uIHRocm93biBieSBob29rIHdoaWxlIGhhbmRsaW5nICVzOiAlcycsIGV2ZW50LCBlICsgJ1xcbicgKyBlLnN0YWNrKSA6IHZvaWQgMDtcbiAgICBkaWRIb29rVGhyb3dGb3JFdmVudFtldmVudF0gPSB0cnVlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGVtaXRFdmVudChldmVudCwgYXJnMSwgYXJnMiwgYXJnMywgYXJnNCwgYXJnNSkge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGhvb2tzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGhvb2sgPSBob29rc1tpXTtcbiAgICB2YXIgZm4gPSBob29rW2V2ZW50XTtcbiAgICBpZiAoZm4pIHtcbiAgICAgIGNhbGxIb29rKGV2ZW50LCBmbiwgaG9vaywgYXJnMSwgYXJnMiwgYXJnMywgYXJnNCwgYXJnNSk7XG4gICAgfVxuICB9XG59XG5cbnZhciBpc1Byb2ZpbGluZyA9IGZhbHNlO1xudmFyIGZsdXNoSGlzdG9yeSA9IFtdO1xudmFyIGxpZmVDeWNsZVRpbWVyU3RhY2sgPSBbXTtcbnZhciBjdXJyZW50Rmx1c2hOZXN0aW5nID0gMDtcbnZhciBjdXJyZW50Rmx1c2hNZWFzdXJlbWVudHMgPSBbXTtcbnZhciBjdXJyZW50Rmx1c2hTdGFydFRpbWUgPSAwO1xudmFyIGN1cnJlbnRUaW1lckRlYnVnSUQgPSBudWxsO1xudmFyIGN1cnJlbnRUaW1lclN0YXJ0VGltZSA9IDA7XG52YXIgY3VycmVudFRpbWVyTmVzdGVkRmx1c2hEdXJhdGlvbiA9IDA7XG52YXIgY3VycmVudFRpbWVyVHlwZSA9IG51bGw7XG5cbnZhciBsaWZlQ3ljbGVUaW1lckhhc1dhcm5lZCA9IGZhbHNlO1xuXG5mdW5jdGlvbiBjbGVhckhpc3RvcnkoKSB7XG4gIFJlYWN0Q29tcG9uZW50VHJlZUhvb2sucHVyZ2VVbm1vdW50ZWRDb21wb25lbnRzKCk7XG4gIFJlYWN0SG9zdE9wZXJhdGlvbkhpc3RvcnlIb29rLmNsZWFySGlzdG9yeSgpO1xufVxuXG5mdW5jdGlvbiBnZXRUcmVlU25hcHNob3QocmVnaXN0ZXJlZElEcykge1xuICByZXR1cm4gcmVnaXN0ZXJlZElEcy5yZWR1Y2UoZnVuY3Rpb24gKHRyZWUsIGlkKSB7XG4gICAgdmFyIG93bmVySUQgPSBSZWFjdENvbXBvbmVudFRyZWVIb29rLmdldE93bmVySUQoaWQpO1xuICAgIHZhciBwYXJlbnRJRCA9IFJlYWN0Q29tcG9uZW50VHJlZUhvb2suZ2V0UGFyZW50SUQoaWQpO1xuICAgIHRyZWVbaWRdID0ge1xuICAgICAgZGlzcGxheU5hbWU6IFJlYWN0Q29tcG9uZW50VHJlZUhvb2suZ2V0RGlzcGxheU5hbWUoaWQpLFxuICAgICAgdGV4dDogUmVhY3RDb21wb25lbnRUcmVlSG9vay5nZXRUZXh0KGlkKSxcbiAgICAgIHVwZGF0ZUNvdW50OiBSZWFjdENvbXBvbmVudFRyZWVIb29rLmdldFVwZGF0ZUNvdW50KGlkKSxcbiAgICAgIGNoaWxkSURzOiBSZWFjdENvbXBvbmVudFRyZWVIb29rLmdldENoaWxkSURzKGlkKSxcbiAgICAgIC8vIFRleHQgbm9kZXMgZG9uJ3QgaGF2ZSBvd25lcnMgYnV0IHRoaXMgaXMgY2xvc2UgZW5vdWdoLlxuICAgICAgb3duZXJJRDogb3duZXJJRCB8fCBwYXJlbnRJRCAmJiBSZWFjdENvbXBvbmVudFRyZWVIb29rLmdldE93bmVySUQocGFyZW50SUQpIHx8IDAsXG4gICAgICBwYXJlbnRJRDogcGFyZW50SURcbiAgICB9O1xuICAgIHJldHVybiB0cmVlO1xuICB9LCB7fSk7XG59XG5cbmZ1bmN0aW9uIHJlc2V0TWVhc3VyZW1lbnRzKCkge1xuICB2YXIgcHJldmlvdXNTdGFydFRpbWUgPSBjdXJyZW50Rmx1c2hTdGFydFRpbWU7XG4gIHZhciBwcmV2aW91c01lYXN1cmVtZW50cyA9IGN1cnJlbnRGbHVzaE1lYXN1cmVtZW50cztcbiAgdmFyIHByZXZpb3VzT3BlcmF0aW9ucyA9IFJlYWN0SG9zdE9wZXJhdGlvbkhpc3RvcnlIb29rLmdldEhpc3RvcnkoKTtcblxuICBpZiAoY3VycmVudEZsdXNoTmVzdGluZyA9PT0gMCkge1xuICAgIGN1cnJlbnRGbHVzaFN0YXJ0VGltZSA9IDA7XG4gICAgY3VycmVudEZsdXNoTWVhc3VyZW1lbnRzID0gW107XG4gICAgY2xlYXJIaXN0b3J5KCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKHByZXZpb3VzTWVhc3VyZW1lbnRzLmxlbmd0aCB8fCBwcmV2aW91c09wZXJhdGlvbnMubGVuZ3RoKSB7XG4gICAgdmFyIHJlZ2lzdGVyZWRJRHMgPSBSZWFjdENvbXBvbmVudFRyZWVIb29rLmdldFJlZ2lzdGVyZWRJRHMoKTtcbiAgICBmbHVzaEhpc3RvcnkucHVzaCh7XG4gICAgICBkdXJhdGlvbjogcGVyZm9ybWFuY2VOb3coKSAtIHByZXZpb3VzU3RhcnRUaW1lLFxuICAgICAgbWVhc3VyZW1lbnRzOiBwcmV2aW91c01lYXN1cmVtZW50cyB8fCBbXSxcbiAgICAgIG9wZXJhdGlvbnM6IHByZXZpb3VzT3BlcmF0aW9ucyB8fCBbXSxcbiAgICAgIHRyZWVTbmFwc2hvdDogZ2V0VHJlZVNuYXBzaG90KHJlZ2lzdGVyZWRJRHMpXG4gICAgfSk7XG4gIH1cblxuICBjbGVhckhpc3RvcnkoKTtcbiAgY3VycmVudEZsdXNoU3RhcnRUaW1lID0gcGVyZm9ybWFuY2VOb3coKTtcbiAgY3VycmVudEZsdXNoTWVhc3VyZW1lbnRzID0gW107XG59XG5cbmZ1bmN0aW9uIGNoZWNrRGVidWdJRChkZWJ1Z0lEKSB7XG4gIHZhciBhbGxvd1Jvb3QgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IGZhbHNlO1xuXG4gIGlmIChhbGxvd1Jvb3QgJiYgZGVidWdJRCA9PT0gMCkge1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoIWRlYnVnSUQpIHtcbiAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyhmYWxzZSwgJ1JlYWN0RGVidWdUb29sOiBkZWJ1Z0lEIG1heSBub3QgYmUgZW1wdHkuJykgOiB2b2lkIDA7XG4gIH1cbn1cblxuZnVuY3Rpb24gYmVnaW5MaWZlQ3ljbGVUaW1lcihkZWJ1Z0lELCB0aW1lclR5cGUpIHtcbiAgaWYgKGN1cnJlbnRGbHVzaE5lc3RpbmcgPT09IDApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKGN1cnJlbnRUaW1lclR5cGUgJiYgIWxpZmVDeWNsZVRpbWVySGFzV2FybmVkKSB7XG4gICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcoZmFsc2UsICdUaGVyZSBpcyBhbiBpbnRlcm5hbCBlcnJvciBpbiB0aGUgUmVhY3QgcGVyZm9ybWFuY2UgbWVhc3VyZW1lbnQgY29kZS4gJyArICdEaWQgbm90IGV4cGVjdCAlcyB0aW1lciB0byBzdGFydCB3aGlsZSAlcyB0aW1lciBpcyBzdGlsbCBpbiAnICsgJ3Byb2dyZXNzIGZvciAlcyBpbnN0YW5jZS4nLCB0aW1lclR5cGUsIGN1cnJlbnRUaW1lclR5cGUgfHwgJ25vJywgZGVidWdJRCA9PT0gY3VycmVudFRpbWVyRGVidWdJRCA/ICd0aGUgc2FtZScgOiAnYW5vdGhlcicpIDogdm9pZCAwO1xuICAgIGxpZmVDeWNsZVRpbWVySGFzV2FybmVkID0gdHJ1ZTtcbiAgfVxuICBjdXJyZW50VGltZXJTdGFydFRpbWUgPSBwZXJmb3JtYW5jZU5vdygpO1xuICBjdXJyZW50VGltZXJOZXN0ZWRGbHVzaER1cmF0aW9uID0gMDtcbiAgY3VycmVudFRpbWVyRGVidWdJRCA9IGRlYnVnSUQ7XG4gIGN1cnJlbnRUaW1lclR5cGUgPSB0aW1lclR5cGU7XG59XG5cbmZ1bmN0aW9uIGVuZExpZmVDeWNsZVRpbWVyKGRlYnVnSUQsIHRpbWVyVHlwZSkge1xuICBpZiAoY3VycmVudEZsdXNoTmVzdGluZyA9PT0gMCkge1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoY3VycmVudFRpbWVyVHlwZSAhPT0gdGltZXJUeXBlICYmICFsaWZlQ3ljbGVUaW1lckhhc1dhcm5lZCkge1xuICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKGZhbHNlLCAnVGhlcmUgaXMgYW4gaW50ZXJuYWwgZXJyb3IgaW4gdGhlIFJlYWN0IHBlcmZvcm1hbmNlIG1lYXN1cmVtZW50IGNvZGUuICcgKyAnV2UgZGlkIG5vdCBleHBlY3QgJXMgdGltZXIgdG8gc3RvcCB3aGlsZSAlcyB0aW1lciBpcyBzdGlsbCBpbiAnICsgJ3Byb2dyZXNzIGZvciAlcyBpbnN0YW5jZS4gUGxlYXNlIHJlcG9ydCB0aGlzIGFzIGEgYnVnIGluIFJlYWN0LicsIHRpbWVyVHlwZSwgY3VycmVudFRpbWVyVHlwZSB8fCAnbm8nLCBkZWJ1Z0lEID09PSBjdXJyZW50VGltZXJEZWJ1Z0lEID8gJ3RoZSBzYW1lJyA6ICdhbm90aGVyJykgOiB2b2lkIDA7XG4gICAgbGlmZUN5Y2xlVGltZXJIYXNXYXJuZWQgPSB0cnVlO1xuICB9XG4gIGlmIChpc1Byb2ZpbGluZykge1xuICAgIGN1cnJlbnRGbHVzaE1lYXN1cmVtZW50cy5wdXNoKHtcbiAgICAgIHRpbWVyVHlwZTogdGltZXJUeXBlLFxuICAgICAgaW5zdGFuY2VJRDogZGVidWdJRCxcbiAgICAgIGR1cmF0aW9uOiBwZXJmb3JtYW5jZU5vdygpIC0gY3VycmVudFRpbWVyU3RhcnRUaW1lIC0gY3VycmVudFRpbWVyTmVzdGVkRmx1c2hEdXJhdGlvblxuICAgIH0pO1xuICB9XG4gIGN1cnJlbnRUaW1lclN0YXJ0VGltZSA9IDA7XG4gIGN1cnJlbnRUaW1lck5lc3RlZEZsdXNoRHVyYXRpb24gPSAwO1xuICBjdXJyZW50VGltZXJEZWJ1Z0lEID0gbnVsbDtcbiAgY3VycmVudFRpbWVyVHlwZSA9IG51bGw7XG59XG5cbmZ1bmN0aW9uIHBhdXNlQ3VycmVudExpZmVDeWNsZVRpbWVyKCkge1xuICB2YXIgY3VycmVudFRpbWVyID0ge1xuICAgIHN0YXJ0VGltZTogY3VycmVudFRpbWVyU3RhcnRUaW1lLFxuICAgIG5lc3RlZEZsdXNoU3RhcnRUaW1lOiBwZXJmb3JtYW5jZU5vdygpLFxuICAgIGRlYnVnSUQ6IGN1cnJlbnRUaW1lckRlYnVnSUQsXG4gICAgdGltZXJUeXBlOiBjdXJyZW50VGltZXJUeXBlXG4gIH07XG4gIGxpZmVDeWNsZVRpbWVyU3RhY2sucHVzaChjdXJyZW50VGltZXIpO1xuICBjdXJyZW50VGltZXJTdGFydFRpbWUgPSAwO1xuICBjdXJyZW50VGltZXJOZXN0ZWRGbHVzaER1cmF0aW9uID0gMDtcbiAgY3VycmVudFRpbWVyRGVidWdJRCA9IG51bGw7XG4gIGN1cnJlbnRUaW1lclR5cGUgPSBudWxsO1xufVxuXG5mdW5jdGlvbiByZXN1bWVDdXJyZW50TGlmZUN5Y2xlVGltZXIoKSB7XG4gIHZhciBfbGlmZUN5Y2xlVGltZXJTdGFjayQgPSBsaWZlQ3ljbGVUaW1lclN0YWNrLnBvcCgpLFxuICAgICAgc3RhcnRUaW1lID0gX2xpZmVDeWNsZVRpbWVyU3RhY2skLnN0YXJ0VGltZSxcbiAgICAgIG5lc3RlZEZsdXNoU3RhcnRUaW1lID0gX2xpZmVDeWNsZVRpbWVyU3RhY2skLm5lc3RlZEZsdXNoU3RhcnRUaW1lLFxuICAgICAgZGVidWdJRCA9IF9saWZlQ3ljbGVUaW1lclN0YWNrJC5kZWJ1Z0lELFxuICAgICAgdGltZXJUeXBlID0gX2xpZmVDeWNsZVRpbWVyU3RhY2skLnRpbWVyVHlwZTtcblxuICB2YXIgbmVzdGVkRmx1c2hEdXJhdGlvbiA9IHBlcmZvcm1hbmNlTm93KCkgLSBuZXN0ZWRGbHVzaFN0YXJ0VGltZTtcbiAgY3VycmVudFRpbWVyU3RhcnRUaW1lID0gc3RhcnRUaW1lO1xuICBjdXJyZW50VGltZXJOZXN0ZWRGbHVzaER1cmF0aW9uICs9IG5lc3RlZEZsdXNoRHVyYXRpb247XG4gIGN1cnJlbnRUaW1lckRlYnVnSUQgPSBkZWJ1Z0lEO1xuICBjdXJyZW50VGltZXJUeXBlID0gdGltZXJUeXBlO1xufVxuXG52YXIgbGFzdE1hcmtUaW1lU3RhbXAgPSAwO1xudmFyIGNhblVzZVBlcmZvcm1hbmNlTWVhc3VyZSA9IHR5cGVvZiBwZXJmb3JtYW5jZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHBlcmZvcm1hbmNlLm1hcmsgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHBlcmZvcm1hbmNlLmNsZWFyTWFya3MgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHBlcmZvcm1hbmNlLm1lYXN1cmUgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHBlcmZvcm1hbmNlLmNsZWFyTWVhc3VyZXMgPT09ICdmdW5jdGlvbic7XG5cbmZ1bmN0aW9uIHNob3VsZE1hcmsoZGVidWdJRCkge1xuICBpZiAoIWlzUHJvZmlsaW5nIHx8ICFjYW5Vc2VQZXJmb3JtYW5jZU1lYXN1cmUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIGVsZW1lbnQgPSBSZWFjdENvbXBvbmVudFRyZWVIb29rLmdldEVsZW1lbnQoZGVidWdJRCk7XG4gIGlmIChlbGVtZW50ID09IG51bGwgfHwgdHlwZW9mIGVsZW1lbnQgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBpc0hvc3RFbGVtZW50ID0gdHlwZW9mIGVsZW1lbnQudHlwZSA9PT0gJ3N0cmluZyc7XG4gIGlmIChpc0hvc3RFbGVtZW50KSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBtYXJrQmVnaW4oZGVidWdJRCwgbWFya1R5cGUpIHtcbiAgaWYgKCFzaG91bGRNYXJrKGRlYnVnSUQpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIG1hcmtOYW1lID0gZGVidWdJRCArICc6OicgKyBtYXJrVHlwZTtcbiAgbGFzdE1hcmtUaW1lU3RhbXAgPSBwZXJmb3JtYW5jZU5vdygpO1xuICBwZXJmb3JtYW5jZS5tYXJrKG1hcmtOYW1lKTtcbn1cblxuZnVuY3Rpb24gbWFya0VuZChkZWJ1Z0lELCBtYXJrVHlwZSkge1xuICBpZiAoIXNob3VsZE1hcmsoZGVidWdJRCkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgbWFya05hbWUgPSBkZWJ1Z0lEICsgJzo6JyArIG1hcmtUeXBlO1xuICB2YXIgZGlzcGxheU5hbWUgPSBSZWFjdENvbXBvbmVudFRyZWVIb29rLmdldERpc3BsYXlOYW1lKGRlYnVnSUQpIHx8ICdVbmtub3duJztcblxuICAvLyBDaHJvbWUgaGFzIGFuIGlzc3VlIG9mIGRyb3BwaW5nIG1hcmtlcnMgcmVjb3JkZWQgdG9vIGZhc3Q6XG4gIC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTY0MDY1MlxuICAvLyBUbyB3b3JrIGFyb3VuZCB0aGlzLCB3ZSB3aWxsIG5vdCByZXBvcnQgdmVyeSBzbWFsbCBtZWFzdXJlbWVudHMuXG4gIC8vIEkgZGV0ZXJtaW5lZCB0aGUgbWFnaWMgbnVtYmVyIGJ5IHR3ZWFraW5nIGl0IGJhY2sgYW5kIGZvcnRoLlxuICAvLyAwLjA1bXMgd2FzIGVub3VnaCB0byBwcmV2ZW50IHRoZSBpc3N1ZSwgYnV0IEkgc2V0IGl0IHRvIDAuMW1zIHRvIGJlIHNhZmUuXG4gIC8vIFdoZW4gdGhlIGJ1ZyBpcyBmaXhlZCwgd2UgY2FuIGBtZWFzdXJlKClgIHVuY29uZGl0aW9uYWxseSBpZiB3ZSB3YW50IHRvLlxuICB2YXIgdGltZVN0YW1wID0gcGVyZm9ybWFuY2VOb3coKTtcbiAgaWYgKHRpbWVTdGFtcCAtIGxhc3RNYXJrVGltZVN0YW1wID4gMC4xKSB7XG4gICAgdmFyIG1lYXN1cmVtZW50TmFtZSA9IGRpc3BsYXlOYW1lICsgJyBbJyArIG1hcmtUeXBlICsgJ10nO1xuICAgIHBlcmZvcm1hbmNlLm1lYXN1cmUobWVhc3VyZW1lbnROYW1lLCBtYXJrTmFtZSk7XG4gIH1cblxuICBwZXJmb3JtYW5jZS5jbGVhck1hcmtzKG1hcmtOYW1lKTtcbiAgaWYgKG1lYXN1cmVtZW50TmFtZSkge1xuICAgIHBlcmZvcm1hbmNlLmNsZWFyTWVhc3VyZXMobWVhc3VyZW1lbnROYW1lKTtcbiAgfVxufVxuXG52YXIgUmVhY3REZWJ1Z1Rvb2wgPSB7XG4gIGFkZEhvb2s6IGZ1bmN0aW9uIChob29rKSB7XG4gICAgaG9va3MucHVzaChob29rKTtcbiAgfSxcbiAgcmVtb3ZlSG9vazogZnVuY3Rpb24gKGhvb2spIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGhvb2tzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoaG9va3NbaV0gPT09IGhvb2spIHtcbiAgICAgICAgaG9va3Muc3BsaWNlKGksIDEpO1xuICAgICAgICBpLS07XG4gICAgICB9XG4gICAgfVxuICB9LFxuICBpc1Byb2ZpbGluZzogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBpc1Byb2ZpbGluZztcbiAgfSxcbiAgYmVnaW5Qcm9maWxpbmc6IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoaXNQcm9maWxpbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpc1Byb2ZpbGluZyA9IHRydWU7XG4gICAgZmx1c2hIaXN0b3J5Lmxlbmd0aCA9IDA7XG4gICAgcmVzZXRNZWFzdXJlbWVudHMoKTtcbiAgICBSZWFjdERlYnVnVG9vbC5hZGRIb29rKFJlYWN0SG9zdE9wZXJhdGlvbkhpc3RvcnlIb29rKTtcbiAgfSxcbiAgZW5kUHJvZmlsaW5nOiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCFpc1Byb2ZpbGluZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlzUHJvZmlsaW5nID0gZmFsc2U7XG4gICAgcmVzZXRNZWFzdXJlbWVudHMoKTtcbiAgICBSZWFjdERlYnVnVG9vbC5yZW1vdmVIb29rKFJlYWN0SG9zdE9wZXJhdGlvbkhpc3RvcnlIb29rKTtcbiAgfSxcbiAgZ2V0Rmx1c2hIaXN0b3J5OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGZsdXNoSGlzdG9yeTtcbiAgfSxcbiAgb25CZWdpbkZsdXNoOiBmdW5jdGlvbiAoKSB7XG4gICAgY3VycmVudEZsdXNoTmVzdGluZysrO1xuICAgIHJlc2V0TWVhc3VyZW1lbnRzKCk7XG4gICAgcGF1c2VDdXJyZW50TGlmZUN5Y2xlVGltZXIoKTtcbiAgICBlbWl0RXZlbnQoJ29uQmVnaW5GbHVzaCcpO1xuICB9LFxuICBvbkVuZEZsdXNoOiBmdW5jdGlvbiAoKSB7XG4gICAgcmVzZXRNZWFzdXJlbWVudHMoKTtcbiAgICBjdXJyZW50Rmx1c2hOZXN0aW5nLS07XG4gICAgcmVzdW1lQ3VycmVudExpZmVDeWNsZVRpbWVyKCk7XG4gICAgZW1pdEV2ZW50KCdvbkVuZEZsdXNoJyk7XG4gIH0sXG4gIG9uQmVnaW5MaWZlQ3ljbGVUaW1lcjogZnVuY3Rpb24gKGRlYnVnSUQsIHRpbWVyVHlwZSkge1xuICAgIGNoZWNrRGVidWdJRChkZWJ1Z0lEKTtcbiAgICBlbWl0RXZlbnQoJ29uQmVnaW5MaWZlQ3ljbGVUaW1lcicsIGRlYnVnSUQsIHRpbWVyVHlwZSk7XG4gICAgbWFya0JlZ2luKGRlYnVnSUQsIHRpbWVyVHlwZSk7XG4gICAgYmVnaW5MaWZlQ3ljbGVUaW1lcihkZWJ1Z0lELCB0aW1lclR5cGUpO1xuICB9LFxuICBvbkVuZExpZmVDeWNsZVRpbWVyOiBmdW5jdGlvbiAoZGVidWdJRCwgdGltZXJUeXBlKSB7XG4gICAgY2hlY2tEZWJ1Z0lEKGRlYnVnSUQpO1xuICAgIGVuZExpZmVDeWNsZVRpbWVyKGRlYnVnSUQsIHRpbWVyVHlwZSk7XG4gICAgbWFya0VuZChkZWJ1Z0lELCB0aW1lclR5cGUpO1xuICAgIGVtaXRFdmVudCgnb25FbmRMaWZlQ3ljbGVUaW1lcicsIGRlYnVnSUQsIHRpbWVyVHlwZSk7XG4gIH0sXG4gIG9uQmVnaW5Qcm9jZXNzaW5nQ2hpbGRDb250ZXh0OiBmdW5jdGlvbiAoKSB7XG4gICAgZW1pdEV2ZW50KCdvbkJlZ2luUHJvY2Vzc2luZ0NoaWxkQ29udGV4dCcpO1xuICB9LFxuICBvbkVuZFByb2Nlc3NpbmdDaGlsZENvbnRleHQ6IGZ1bmN0aW9uICgpIHtcbiAgICBlbWl0RXZlbnQoJ29uRW5kUHJvY2Vzc2luZ0NoaWxkQ29udGV4dCcpO1xuICB9LFxuICBvbkhvc3RPcGVyYXRpb246IGZ1bmN0aW9uIChvcGVyYXRpb24pIHtcbiAgICBjaGVja0RlYnVnSUQob3BlcmF0aW9uLmluc3RhbmNlSUQpO1xuICAgIGVtaXRFdmVudCgnb25Ib3N0T3BlcmF0aW9uJywgb3BlcmF0aW9uKTtcbiAgfSxcbiAgb25TZXRTdGF0ZTogZnVuY3Rpb24gKCkge1xuICAgIGVtaXRFdmVudCgnb25TZXRTdGF0ZScpO1xuICB9LFxuICBvblNldENoaWxkcmVuOiBmdW5jdGlvbiAoZGVidWdJRCwgY2hpbGREZWJ1Z0lEcykge1xuICAgIGNoZWNrRGVidWdJRChkZWJ1Z0lEKTtcbiAgICBjaGlsZERlYnVnSURzLmZvckVhY2goY2hlY2tEZWJ1Z0lEKTtcbiAgICBlbWl0RXZlbnQoJ29uU2V0Q2hpbGRyZW4nLCBkZWJ1Z0lELCBjaGlsZERlYnVnSURzKTtcbiAgfSxcbiAgb25CZWZvcmVNb3VudENvbXBvbmVudDogZnVuY3Rpb24gKGRlYnVnSUQsIGVsZW1lbnQsIHBhcmVudERlYnVnSUQpIHtcbiAgICBjaGVja0RlYnVnSUQoZGVidWdJRCk7XG4gICAgY2hlY2tEZWJ1Z0lEKHBhcmVudERlYnVnSUQsIHRydWUpO1xuICAgIGVtaXRFdmVudCgnb25CZWZvcmVNb3VudENvbXBvbmVudCcsIGRlYnVnSUQsIGVsZW1lbnQsIHBhcmVudERlYnVnSUQpO1xuICAgIG1hcmtCZWdpbihkZWJ1Z0lELCAnbW91bnQnKTtcbiAgfSxcbiAgb25Nb3VudENvbXBvbmVudDogZnVuY3Rpb24gKGRlYnVnSUQpIHtcbiAgICBjaGVja0RlYnVnSUQoZGVidWdJRCk7XG4gICAgbWFya0VuZChkZWJ1Z0lELCAnbW91bnQnKTtcbiAgICBlbWl0RXZlbnQoJ29uTW91bnRDb21wb25lbnQnLCBkZWJ1Z0lEKTtcbiAgfSxcbiAgb25CZWZvcmVVcGRhdGVDb21wb25lbnQ6IGZ1bmN0aW9uIChkZWJ1Z0lELCBlbGVtZW50KSB7XG4gICAgY2hlY2tEZWJ1Z0lEKGRlYnVnSUQpO1xuICAgIGVtaXRFdmVudCgnb25CZWZvcmVVcGRhdGVDb21wb25lbnQnLCBkZWJ1Z0lELCBlbGVtZW50KTtcbiAgICBtYXJrQmVnaW4oZGVidWdJRCwgJ3VwZGF0ZScpO1xuICB9LFxuICBvblVwZGF0ZUNvbXBvbmVudDogZnVuY3Rpb24gKGRlYnVnSUQpIHtcbiAgICBjaGVja0RlYnVnSUQoZGVidWdJRCk7XG4gICAgbWFya0VuZChkZWJ1Z0lELCAndXBkYXRlJyk7XG4gICAgZW1pdEV2ZW50KCdvblVwZGF0ZUNvbXBvbmVudCcsIGRlYnVnSUQpO1xuICB9LFxuICBvbkJlZm9yZVVubW91bnRDb21wb25lbnQ6IGZ1bmN0aW9uIChkZWJ1Z0lEKSB7XG4gICAgY2hlY2tEZWJ1Z0lEKGRlYnVnSUQpO1xuICAgIGVtaXRFdmVudCgnb25CZWZvcmVVbm1vdW50Q29tcG9uZW50JywgZGVidWdJRCk7XG4gICAgbWFya0JlZ2luKGRlYnVnSUQsICd1bm1vdW50Jyk7XG4gIH0sXG4gIG9uVW5tb3VudENvbXBvbmVudDogZnVuY3Rpb24gKGRlYnVnSUQpIHtcbiAgICBjaGVja0RlYnVnSUQoZGVidWdJRCk7XG4gICAgbWFya0VuZChkZWJ1Z0lELCAndW5tb3VudCcpO1xuICAgIGVtaXRFdmVudCgnb25Vbm1vdW50Q29tcG9uZW50JywgZGVidWdJRCk7XG4gIH0sXG4gIG9uVGVzdEV2ZW50OiBmdW5jdGlvbiAoKSB7XG4gICAgZW1pdEV2ZW50KCdvblRlc3RFdmVudCcpO1xuICB9XG59O1xuXG4vLyBUT0RPIHJlbW92ZSB0aGVzZSB3aGVuIFJOL3d3dyBnZXRzIHVwZGF0ZWRcblJlYWN0RGVidWdUb29sLmFkZERldnRvb2wgPSBSZWFjdERlYnVnVG9vbC5hZGRIb29rO1xuUmVhY3REZWJ1Z1Rvb2wucmVtb3ZlRGV2dG9vbCA9IFJlYWN0RGVidWdUb29sLnJlbW92ZUhvb2s7XG5cblJlYWN0RGVidWdUb29sLmFkZEhvb2soUmVhY3RJbnZhbGlkU2V0U3RhdGVXYXJuaW5nSG9vayk7XG5SZWFjdERlYnVnVG9vbC5hZGRIb29rKFJlYWN0Q29tcG9uZW50VHJlZUhvb2spO1xudmFyIHVybCA9IEV4ZWN1dGlvbkVudmlyb25tZW50LmNhblVzZURPTSAmJiB3aW5kb3cubG9jYXRpb24uaHJlZiB8fCAnJztcbmlmICgvWz8mXXJlYWN0X3BlcmZcXGIvLnRlc3QodXJsKSkge1xuICBSZWFjdERlYnVnVG9vbC5iZWdpblByb2ZpbGluZygpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0RGVidWdUb29sO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QtZG9tL2xpYi9SZWFjdERlYnVnVG9vbC5qcyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBfYXNzaWduID0gcmVxdWlyZSgnb2JqZWN0LWFzc2lnbicpO1xuXG52YXIgUmVhY3RVcGRhdGVzID0gcmVxdWlyZSgnLi9SZWFjdFVwZGF0ZXMnKTtcbnZhciBUcmFuc2FjdGlvbiA9IHJlcXVpcmUoJy4vVHJhbnNhY3Rpb24nKTtcblxudmFyIGVtcHR5RnVuY3Rpb24gPSByZXF1aXJlKCdmYmpzL2xpYi9lbXB0eUZ1bmN0aW9uJyk7XG5cbnZhciBSRVNFVF9CQVRDSEVEX1VQREFURVMgPSB7XG4gIGluaXRpYWxpemU6IGVtcHR5RnVuY3Rpb24sXG4gIGNsb3NlOiBmdW5jdGlvbiAoKSB7XG4gICAgUmVhY3REZWZhdWx0QmF0Y2hpbmdTdHJhdGVneS5pc0JhdGNoaW5nVXBkYXRlcyA9IGZhbHNlO1xuICB9XG59O1xuXG52YXIgRkxVU0hfQkFUQ0hFRF9VUERBVEVTID0ge1xuICBpbml0aWFsaXplOiBlbXB0eUZ1bmN0aW9uLFxuICBjbG9zZTogUmVhY3RVcGRhdGVzLmZsdXNoQmF0Y2hlZFVwZGF0ZXMuYmluZChSZWFjdFVwZGF0ZXMpXG59O1xuXG52YXIgVFJBTlNBQ1RJT05fV1JBUFBFUlMgPSBbRkxVU0hfQkFUQ0hFRF9VUERBVEVTLCBSRVNFVF9CQVRDSEVEX1VQREFURVNdO1xuXG5mdW5jdGlvbiBSZWFjdERlZmF1bHRCYXRjaGluZ1N0cmF0ZWd5VHJhbnNhY3Rpb24oKSB7XG4gIHRoaXMucmVpbml0aWFsaXplVHJhbnNhY3Rpb24oKTtcbn1cblxuX2Fzc2lnbihSZWFjdERlZmF1bHRCYXRjaGluZ1N0cmF0ZWd5VHJhbnNhY3Rpb24ucHJvdG90eXBlLCBUcmFuc2FjdGlvbiwge1xuICBnZXRUcmFuc2FjdGlvbldyYXBwZXJzOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIFRSQU5TQUNUSU9OX1dSQVBQRVJTO1xuICB9XG59KTtcblxudmFyIHRyYW5zYWN0aW9uID0gbmV3IFJlYWN0RGVmYXVsdEJhdGNoaW5nU3RyYXRlZ3lUcmFuc2FjdGlvbigpO1xuXG52YXIgUmVhY3REZWZhdWx0QmF0Y2hpbmdTdHJhdGVneSA9IHtcbiAgaXNCYXRjaGluZ1VwZGF0ZXM6IGZhbHNlLFxuXG4gIC8qKlxuICAgKiBDYWxsIHRoZSBwcm92aWRlZCBmdW5jdGlvbiBpbiBhIGNvbnRleHQgd2l0aGluIHdoaWNoIGNhbGxzIHRvIGBzZXRTdGF0ZWBcbiAgICogYW5kIGZyaWVuZHMgYXJlIGJhdGNoZWQgc3VjaCB0aGF0IGNvbXBvbmVudHMgYXJlbid0IHVwZGF0ZWQgdW5uZWNlc3NhcmlseS5cbiAgICovXG4gIGJhdGNoZWRVcGRhdGVzOiBmdW5jdGlvbiAoY2FsbGJhY2ssIGEsIGIsIGMsIGQsIGUpIHtcbiAgICB2YXIgYWxyZWFkeUJhdGNoaW5nVXBkYXRlcyA9IFJlYWN0RGVmYXVsdEJhdGNoaW5nU3RyYXRlZ3kuaXNCYXRjaGluZ1VwZGF0ZXM7XG5cbiAgICBSZWFjdERlZmF1bHRCYXRjaGluZ1N0cmF0ZWd5LmlzQmF0Y2hpbmdVcGRhdGVzID0gdHJ1ZTtcblxuICAgIC8vIFRoZSBjb2RlIGlzIHdyaXR0ZW4gdGhpcyB3YXkgdG8gYXZvaWQgZXh0cmEgYWxsb2NhdGlvbnNcbiAgICBpZiAoYWxyZWFkeUJhdGNoaW5nVXBkYXRlcykge1xuICAgICAgcmV0dXJuIGNhbGxiYWNrKGEsIGIsIGMsIGQsIGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdHJhbnNhY3Rpb24ucGVyZm9ybShjYWxsYmFjaywgbnVsbCwgYSwgYiwgYywgZCwgZSk7XG4gICAgfVxuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0RGVmYXVsdEJhdGNoaW5nU3RyYXRlZ3k7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1kb20vbGliL1JlYWN0RGVmYXVsdEJhdGNoaW5nU3RyYXRlZ3kuanMiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgQVJJQURPTVByb3BlcnR5Q29uZmlnID0gcmVxdWlyZSgnLi9BUklBRE9NUHJvcGVydHlDb25maWcnKTtcbnZhciBCZWZvcmVJbnB1dEV2ZW50UGx1Z2luID0gcmVxdWlyZSgnLi9CZWZvcmVJbnB1dEV2ZW50UGx1Z2luJyk7XG52YXIgQ2hhbmdlRXZlbnRQbHVnaW4gPSByZXF1aXJlKCcuL0NoYW5nZUV2ZW50UGx1Z2luJyk7XG52YXIgRGVmYXVsdEV2ZW50UGx1Z2luT3JkZXIgPSByZXF1aXJlKCcuL0RlZmF1bHRFdmVudFBsdWdpbk9yZGVyJyk7XG52YXIgRW50ZXJMZWF2ZUV2ZW50UGx1Z2luID0gcmVxdWlyZSgnLi9FbnRlckxlYXZlRXZlbnRQbHVnaW4nKTtcbnZhciBIVE1MRE9NUHJvcGVydHlDb25maWcgPSByZXF1aXJlKCcuL0hUTUxET01Qcm9wZXJ0eUNvbmZpZycpO1xudmFyIFJlYWN0Q29tcG9uZW50QnJvd3NlckVudmlyb25tZW50ID0gcmVxdWlyZSgnLi9SZWFjdENvbXBvbmVudEJyb3dzZXJFbnZpcm9ubWVudCcpO1xudmFyIFJlYWN0RE9NQ29tcG9uZW50ID0gcmVxdWlyZSgnLi9SZWFjdERPTUNvbXBvbmVudCcpO1xudmFyIFJlYWN0RE9NQ29tcG9uZW50VHJlZSA9IHJlcXVpcmUoJy4vUmVhY3RET01Db21wb25lbnRUcmVlJyk7XG52YXIgUmVhY3RET01FbXB0eUNvbXBvbmVudCA9IHJlcXVpcmUoJy4vUmVhY3RET01FbXB0eUNvbXBvbmVudCcpO1xudmFyIFJlYWN0RE9NVHJlZVRyYXZlcnNhbCA9IHJlcXVpcmUoJy4vUmVhY3RET01UcmVlVHJhdmVyc2FsJyk7XG52YXIgUmVhY3RET01UZXh0Q29tcG9uZW50ID0gcmVxdWlyZSgnLi9SZWFjdERPTVRleHRDb21wb25lbnQnKTtcbnZhciBSZWFjdERlZmF1bHRCYXRjaGluZ1N0cmF0ZWd5ID0gcmVxdWlyZSgnLi9SZWFjdERlZmF1bHRCYXRjaGluZ1N0cmF0ZWd5Jyk7XG52YXIgUmVhY3RFdmVudExpc3RlbmVyID0gcmVxdWlyZSgnLi9SZWFjdEV2ZW50TGlzdGVuZXInKTtcbnZhciBSZWFjdEluamVjdGlvbiA9IHJlcXVpcmUoJy4vUmVhY3RJbmplY3Rpb24nKTtcbnZhciBSZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9uID0gcmVxdWlyZSgnLi9SZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9uJyk7XG52YXIgU1ZHRE9NUHJvcGVydHlDb25maWcgPSByZXF1aXJlKCcuL1NWR0RPTVByb3BlcnR5Q29uZmlnJyk7XG52YXIgU2VsZWN0RXZlbnRQbHVnaW4gPSByZXF1aXJlKCcuL1NlbGVjdEV2ZW50UGx1Z2luJyk7XG52YXIgU2ltcGxlRXZlbnRQbHVnaW4gPSByZXF1aXJlKCcuL1NpbXBsZUV2ZW50UGx1Z2luJyk7XG5cbnZhciBhbHJlYWR5SW5qZWN0ZWQgPSBmYWxzZTtcblxuZnVuY3Rpb24gaW5qZWN0KCkge1xuICBpZiAoYWxyZWFkeUluamVjdGVkKSB7XG4gICAgLy8gVE9ETzogVGhpcyBpcyBjdXJyZW50bHkgdHJ1ZSBiZWNhdXNlIHRoZXNlIGluamVjdGlvbnMgYXJlIHNoYXJlZCBiZXR3ZWVuXG4gICAgLy8gdGhlIGNsaWVudCBhbmQgdGhlIHNlcnZlciBwYWNrYWdlLiBUaGV5IHNob3VsZCBiZSBidWlsdCBpbmRlcGVuZGVudGx5XG4gICAgLy8gYW5kIG5vdCBzaGFyZSBhbnkgaW5qZWN0aW9uIHN0YXRlLiBUaGVuIHRoaXMgcHJvYmxlbSB3aWxsIGJlIHNvbHZlZC5cbiAgICByZXR1cm47XG4gIH1cbiAgYWxyZWFkeUluamVjdGVkID0gdHJ1ZTtcblxuICBSZWFjdEluamVjdGlvbi5FdmVudEVtaXR0ZXIuaW5qZWN0UmVhY3RFdmVudExpc3RlbmVyKFJlYWN0RXZlbnRMaXN0ZW5lcik7XG5cbiAgLyoqXG4gICAqIEluamVjdCBtb2R1bGVzIGZvciByZXNvbHZpbmcgRE9NIGhpZXJhcmNoeSBhbmQgcGx1Z2luIG9yZGVyaW5nLlxuICAgKi9cbiAgUmVhY3RJbmplY3Rpb24uRXZlbnRQbHVnaW5IdWIuaW5qZWN0RXZlbnRQbHVnaW5PcmRlcihEZWZhdWx0RXZlbnRQbHVnaW5PcmRlcik7XG4gIFJlYWN0SW5qZWN0aW9uLkV2ZW50UGx1Z2luVXRpbHMuaW5qZWN0Q29tcG9uZW50VHJlZShSZWFjdERPTUNvbXBvbmVudFRyZWUpO1xuICBSZWFjdEluamVjdGlvbi5FdmVudFBsdWdpblV0aWxzLmluamVjdFRyZWVUcmF2ZXJzYWwoUmVhY3RET01UcmVlVHJhdmVyc2FsKTtcblxuICAvKipcbiAgICogU29tZSBpbXBvcnRhbnQgZXZlbnQgcGx1Z2lucyBpbmNsdWRlZCBieSBkZWZhdWx0ICh3aXRob3V0IGhhdmluZyB0byByZXF1aXJlXG4gICAqIHRoZW0pLlxuICAgKi9cbiAgUmVhY3RJbmplY3Rpb24uRXZlbnRQbHVnaW5IdWIuaW5qZWN0RXZlbnRQbHVnaW5zQnlOYW1lKHtcbiAgICBTaW1wbGVFdmVudFBsdWdpbjogU2ltcGxlRXZlbnRQbHVnaW4sXG4gICAgRW50ZXJMZWF2ZUV2ZW50UGx1Z2luOiBFbnRlckxlYXZlRXZlbnRQbHVnaW4sXG4gICAgQ2hhbmdlRXZlbnRQbHVnaW46IENoYW5nZUV2ZW50UGx1Z2luLFxuICAgIFNlbGVjdEV2ZW50UGx1Z2luOiBTZWxlY3RFdmVudFBsdWdpbixcbiAgICBCZWZvcmVJbnB1dEV2ZW50UGx1Z2luOiBCZWZvcmVJbnB1dEV2ZW50UGx1Z2luXG4gIH0pO1xuXG4gIFJlYWN0SW5qZWN0aW9uLkhvc3RDb21wb25lbnQuaW5qZWN0R2VuZXJpY0NvbXBvbmVudENsYXNzKFJlYWN0RE9NQ29tcG9uZW50KTtcblxuICBSZWFjdEluamVjdGlvbi5Ib3N0Q29tcG9uZW50LmluamVjdFRleHRDb21wb25lbnRDbGFzcyhSZWFjdERPTVRleHRDb21wb25lbnQpO1xuXG4gIFJlYWN0SW5qZWN0aW9uLkRPTVByb3BlcnR5LmluamVjdERPTVByb3BlcnR5Q29uZmlnKEFSSUFET01Qcm9wZXJ0eUNvbmZpZyk7XG4gIFJlYWN0SW5qZWN0aW9uLkRPTVByb3BlcnR5LmluamVjdERPTVByb3BlcnR5Q29uZmlnKEhUTUxET01Qcm9wZXJ0eUNvbmZpZyk7XG4gIFJlYWN0SW5qZWN0aW9uLkRPTVByb3BlcnR5LmluamVjdERPTVByb3BlcnR5Q29uZmlnKFNWR0RPTVByb3BlcnR5Q29uZmlnKTtcblxuICBSZWFjdEluamVjdGlvbi5FbXB0eUNvbXBvbmVudC5pbmplY3RFbXB0eUNvbXBvbmVudEZhY3RvcnkoZnVuY3Rpb24gKGluc3RhbnRpYXRlKSB7XG4gICAgcmV0dXJuIG5ldyBSZWFjdERPTUVtcHR5Q29tcG9uZW50KGluc3RhbnRpYXRlKTtcbiAgfSk7XG5cbiAgUmVhY3RJbmplY3Rpb24uVXBkYXRlcy5pbmplY3RSZWNvbmNpbGVUcmFuc2FjdGlvbihSZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9uKTtcbiAgUmVhY3RJbmplY3Rpb24uVXBkYXRlcy5pbmplY3RCYXRjaGluZ1N0cmF0ZWd5KFJlYWN0RGVmYXVsdEJhdGNoaW5nU3RyYXRlZ3kpO1xuXG4gIFJlYWN0SW5qZWN0aW9uLkNvbXBvbmVudC5pbmplY3RFbnZpcm9ubWVudChSZWFjdENvbXBvbmVudEJyb3dzZXJFbnZpcm9ubWVudCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpbmplY3Q6IGluamVjdFxufTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3JlYWN0LWRvbS9saWIvUmVhY3REZWZhdWx0SW5qZWN0aW9uLmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxNC1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG4vLyBUaGUgU3ltYm9sIHVzZWQgdG8gdGFnIHRoZSBSZWFjdEVsZW1lbnQgdHlwZS4gSWYgdGhlcmUgaXMgbm8gbmF0aXZlIFN5bWJvbFxuLy8gbm9yIHBvbHlmaWxsLCB0aGVuIGEgcGxhaW4gbnVtYmVyIGlzIHVzZWQgZm9yIHBlcmZvcm1hbmNlLlxuXG52YXIgUkVBQ1RfRUxFTUVOVF9UWVBFID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2xbJ2ZvciddICYmIFN5bWJvbFsnZm9yJ10oJ3JlYWN0LmVsZW1lbnQnKSB8fCAweGVhYzc7XG5cbm1vZHVsZS5leHBvcnRzID0gUkVBQ1RfRUxFTUVOVF9UWVBFO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QtZG9tL2xpYi9SZWFjdEVsZW1lbnRTeW1ib2wuanMiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgRXZlbnRQbHVnaW5IdWIgPSByZXF1aXJlKCcuL0V2ZW50UGx1Z2luSHViJyk7XG5cbmZ1bmN0aW9uIHJ1bkV2ZW50UXVldWVJbkJhdGNoKGV2ZW50cykge1xuICBFdmVudFBsdWdpbkh1Yi5lbnF1ZXVlRXZlbnRzKGV2ZW50cyk7XG4gIEV2ZW50UGx1Z2luSHViLnByb2Nlc3NFdmVudFF1ZXVlKGZhbHNlKTtcbn1cblxudmFyIFJlYWN0RXZlbnRFbWl0dGVyTWl4aW4gPSB7XG4gIC8qKlxuICAgKiBTdHJlYW1zIGEgZmlyZWQgdG9wLWxldmVsIGV2ZW50IHRvIGBFdmVudFBsdWdpbkh1YmAgd2hlcmUgcGx1Z2lucyBoYXZlIHRoZVxuICAgKiBvcHBvcnR1bml0eSB0byBjcmVhdGUgYFJlYWN0RXZlbnRgcyB0byBiZSBkaXNwYXRjaGVkLlxuICAgKi9cbiAgaGFuZGxlVG9wTGV2ZWw6IGZ1bmN0aW9uICh0b3BMZXZlbFR5cGUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCkge1xuICAgIHZhciBldmVudHMgPSBFdmVudFBsdWdpbkh1Yi5leHRyYWN0RXZlbnRzKHRvcExldmVsVHlwZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KTtcbiAgICBydW5FdmVudFF1ZXVlSW5CYXRjaChldmVudHMpO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0RXZlbnRFbWl0dGVyTWl4aW47XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1kb20vbGliL1JlYWN0RXZlbnRFbWl0dGVyTWl4aW4uanMiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgX2Fzc2lnbiA9IHJlcXVpcmUoJ29iamVjdC1hc3NpZ24nKTtcblxudmFyIEV2ZW50TGlzdGVuZXIgPSByZXF1aXJlKCdmYmpzL2xpYi9FdmVudExpc3RlbmVyJyk7XG52YXIgRXhlY3V0aW9uRW52aXJvbm1lbnQgPSByZXF1aXJlKCdmYmpzL2xpYi9FeGVjdXRpb25FbnZpcm9ubWVudCcpO1xudmFyIFBvb2xlZENsYXNzID0gcmVxdWlyZSgnLi9Qb29sZWRDbGFzcycpO1xudmFyIFJlYWN0RE9NQ29tcG9uZW50VHJlZSA9IHJlcXVpcmUoJy4vUmVhY3RET01Db21wb25lbnRUcmVlJyk7XG52YXIgUmVhY3RVcGRhdGVzID0gcmVxdWlyZSgnLi9SZWFjdFVwZGF0ZXMnKTtcblxudmFyIGdldEV2ZW50VGFyZ2V0ID0gcmVxdWlyZSgnLi9nZXRFdmVudFRhcmdldCcpO1xudmFyIGdldFVuYm91bmRlZFNjcm9sbFBvc2l0aW9uID0gcmVxdWlyZSgnZmJqcy9saWIvZ2V0VW5ib3VuZGVkU2Nyb2xsUG9zaXRpb24nKTtcblxuLyoqXG4gKiBGaW5kIHRoZSBkZWVwZXN0IFJlYWN0IGNvbXBvbmVudCBjb21wbGV0ZWx5IGNvbnRhaW5pbmcgdGhlIHJvb3Qgb2YgdGhlXG4gKiBwYXNzZWQtaW4gaW5zdGFuY2UgKGZvciB1c2Ugd2hlbiBlbnRpcmUgUmVhY3QgdHJlZXMgYXJlIG5lc3RlZCB3aXRoaW4gZWFjaFxuICogb3RoZXIpLiBJZiBSZWFjdCB0cmVlcyBhcmUgbm90IG5lc3RlZCwgcmV0dXJucyBudWxsLlxuICovXG5mdW5jdGlvbiBmaW5kUGFyZW50KGluc3QpIHtcbiAgLy8gVE9ETzogSXQgbWF5IGJlIGEgZ29vZCBpZGVhIHRvIGNhY2hlIHRoaXMgdG8gcHJldmVudCB1bm5lY2Vzc2FyeSBET01cbiAgLy8gdHJhdmVyc2FsLCBidXQgY2FjaGluZyBpcyBkaWZmaWN1bHQgdG8gZG8gY29ycmVjdGx5IHdpdGhvdXQgdXNpbmcgYVxuICAvLyBtdXRhdGlvbiBvYnNlcnZlciB0byBsaXN0ZW4gZm9yIGFsbCBET00gY2hhbmdlcy5cbiAgd2hpbGUgKGluc3QuX2hvc3RQYXJlbnQpIHtcbiAgICBpbnN0ID0gaW5zdC5faG9zdFBhcmVudDtcbiAgfVxuICB2YXIgcm9vdE5vZGUgPSBSZWFjdERPTUNvbXBvbmVudFRyZWUuZ2V0Tm9kZUZyb21JbnN0YW5jZShpbnN0KTtcbiAgdmFyIGNvbnRhaW5lciA9IHJvb3ROb2RlLnBhcmVudE5vZGU7XG4gIHJldHVybiBSZWFjdERPTUNvbXBvbmVudFRyZWUuZ2V0Q2xvc2VzdEluc3RhbmNlRnJvbU5vZGUoY29udGFpbmVyKTtcbn1cblxuLy8gVXNlZCB0byBzdG9yZSBhbmNlc3RvciBoaWVyYXJjaHkgaW4gdG9wIGxldmVsIGNhbGxiYWNrXG5mdW5jdGlvbiBUb3BMZXZlbENhbGxiYWNrQm9va0tlZXBpbmcodG9wTGV2ZWxUeXBlLCBuYXRpdmVFdmVudCkge1xuICB0aGlzLnRvcExldmVsVHlwZSA9IHRvcExldmVsVHlwZTtcbiAgdGhpcy5uYXRpdmVFdmVudCA9IG5hdGl2ZUV2ZW50O1xuICB0aGlzLmFuY2VzdG9ycyA9IFtdO1xufVxuX2Fzc2lnbihUb3BMZXZlbENhbGxiYWNrQm9va0tlZXBpbmcucHJvdG90eXBlLCB7XG4gIGRlc3RydWN0b3I6IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLnRvcExldmVsVHlwZSA9IG51bGw7XG4gICAgdGhpcy5uYXRpdmVFdmVudCA9IG51bGw7XG4gICAgdGhpcy5hbmNlc3RvcnMubGVuZ3RoID0gMDtcbiAgfVxufSk7XG5Qb29sZWRDbGFzcy5hZGRQb29saW5nVG8oVG9wTGV2ZWxDYWxsYmFja0Jvb2tLZWVwaW5nLCBQb29sZWRDbGFzcy50d29Bcmd1bWVudFBvb2xlcik7XG5cbmZ1bmN0aW9uIGhhbmRsZVRvcExldmVsSW1wbChib29rS2VlcGluZykge1xuICB2YXIgbmF0aXZlRXZlbnRUYXJnZXQgPSBnZXRFdmVudFRhcmdldChib29rS2VlcGluZy5uYXRpdmVFdmVudCk7XG4gIHZhciB0YXJnZXRJbnN0ID0gUmVhY3RET01Db21wb25lbnRUcmVlLmdldENsb3Nlc3RJbnN0YW5jZUZyb21Ob2RlKG5hdGl2ZUV2ZW50VGFyZ2V0KTtcblxuICAvLyBMb29wIHRocm91Z2ggdGhlIGhpZXJhcmNoeSwgaW4gY2FzZSB0aGVyZSdzIGFueSBuZXN0ZWQgY29tcG9uZW50cy5cbiAgLy8gSXQncyBpbXBvcnRhbnQgdGhhdCB3ZSBidWlsZCB0aGUgYXJyYXkgb2YgYW5jZXN0b3JzIGJlZm9yZSBjYWxsaW5nIGFueVxuICAvLyBldmVudCBoYW5kbGVycywgYmVjYXVzZSBldmVudCBoYW5kbGVycyBjYW4gbW9kaWZ5IHRoZSBET00sIGxlYWRpbmcgdG9cbiAgLy8gaW5jb25zaXN0ZW5jaWVzIHdpdGggUmVhY3RNb3VudCdzIG5vZGUgY2FjaGUuIFNlZSAjMTEwNS5cbiAgdmFyIGFuY2VzdG9yID0gdGFyZ2V0SW5zdDtcbiAgZG8ge1xuICAgIGJvb2tLZWVwaW5nLmFuY2VzdG9ycy5wdXNoKGFuY2VzdG9yKTtcbiAgICBhbmNlc3RvciA9IGFuY2VzdG9yICYmIGZpbmRQYXJlbnQoYW5jZXN0b3IpO1xuICB9IHdoaWxlIChhbmNlc3Rvcik7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBib29rS2VlcGluZy5hbmNlc3RvcnMubGVuZ3RoOyBpKyspIHtcbiAgICB0YXJnZXRJbnN0ID0gYm9va0tlZXBpbmcuYW5jZXN0b3JzW2ldO1xuICAgIFJlYWN0RXZlbnRMaXN0ZW5lci5faGFuZGxlVG9wTGV2ZWwoYm9va0tlZXBpbmcudG9wTGV2ZWxUeXBlLCB0YXJnZXRJbnN0LCBib29rS2VlcGluZy5uYXRpdmVFdmVudCwgZ2V0RXZlbnRUYXJnZXQoYm9va0tlZXBpbmcubmF0aXZlRXZlbnQpKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzY3JvbGxWYWx1ZU1vbml0b3IoY2IpIHtcbiAgdmFyIHNjcm9sbFBvc2l0aW9uID0gZ2V0VW5ib3VuZGVkU2Nyb2xsUG9zaXRpb24od2luZG93KTtcbiAgY2Ioc2Nyb2xsUG9zaXRpb24pO1xufVxuXG52YXIgUmVhY3RFdmVudExpc3RlbmVyID0ge1xuICBfZW5hYmxlZDogdHJ1ZSxcbiAgX2hhbmRsZVRvcExldmVsOiBudWxsLFxuXG4gIFdJTkRPV19IQU5ETEU6IEV4ZWN1dGlvbkVudmlyb25tZW50LmNhblVzZURPTSA/IHdpbmRvdyA6IG51bGwsXG5cbiAgc2V0SGFuZGxlVG9wTGV2ZWw6IGZ1bmN0aW9uIChoYW5kbGVUb3BMZXZlbCkge1xuICAgIFJlYWN0RXZlbnRMaXN0ZW5lci5faGFuZGxlVG9wTGV2ZWwgPSBoYW5kbGVUb3BMZXZlbDtcbiAgfSxcblxuICBzZXRFbmFibGVkOiBmdW5jdGlvbiAoZW5hYmxlZCkge1xuICAgIFJlYWN0RXZlbnRMaXN0ZW5lci5fZW5hYmxlZCA9ICEhZW5hYmxlZDtcbiAgfSxcblxuICBpc0VuYWJsZWQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gUmVhY3RFdmVudExpc3RlbmVyLl9lbmFibGVkO1xuICB9LFxuXG4gIC8qKlxuICAgKiBUcmFwcyB0b3AtbGV2ZWwgZXZlbnRzIGJ5IHVzaW5nIGV2ZW50IGJ1YmJsaW5nLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdG9wTGV2ZWxUeXBlIFJlY29yZCBmcm9tIGBFdmVudENvbnN0YW50c2AuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBoYW5kbGVyQmFzZU5hbWUgRXZlbnQgbmFtZSAoZS5nLiBcImNsaWNrXCIpLlxuICAgKiBAcGFyYW0ge29iamVjdH0gZWxlbWVudCBFbGVtZW50IG9uIHdoaWNoIHRvIGF0dGFjaCBsaXN0ZW5lci5cbiAgICogQHJldHVybiB7P29iamVjdH0gQW4gb2JqZWN0IHdpdGggYSByZW1vdmUgZnVuY3Rpb24gd2hpY2ggd2lsbCBmb3JjZWZ1bGx5XG4gICAqICAgICAgICAgICAgICAgICAgcmVtb3ZlIHRoZSBsaXN0ZW5lci5cbiAgICogQGludGVybmFsXG4gICAqL1xuICB0cmFwQnViYmxlZEV2ZW50OiBmdW5jdGlvbiAodG9wTGV2ZWxUeXBlLCBoYW5kbGVyQmFzZU5hbWUsIGVsZW1lbnQpIHtcbiAgICBpZiAoIWVsZW1lbnQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gRXZlbnRMaXN0ZW5lci5saXN0ZW4oZWxlbWVudCwgaGFuZGxlckJhc2VOYW1lLCBSZWFjdEV2ZW50TGlzdGVuZXIuZGlzcGF0Y2hFdmVudC5iaW5kKG51bGwsIHRvcExldmVsVHlwZSkpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBUcmFwcyBhIHRvcC1sZXZlbCBldmVudCBieSB1c2luZyBldmVudCBjYXB0dXJpbmcuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0b3BMZXZlbFR5cGUgUmVjb3JkIGZyb20gYEV2ZW50Q29uc3RhbnRzYC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGhhbmRsZXJCYXNlTmFtZSBFdmVudCBuYW1lIChlLmcuIFwiY2xpY2tcIikuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBlbGVtZW50IEVsZW1lbnQgb24gd2hpY2ggdG8gYXR0YWNoIGxpc3RlbmVyLlxuICAgKiBAcmV0dXJuIHs/b2JqZWN0fSBBbiBvYmplY3Qgd2l0aCBhIHJlbW92ZSBmdW5jdGlvbiB3aGljaCB3aWxsIGZvcmNlZnVsbHlcbiAgICogICAgICAgICAgICAgICAgICByZW1vdmUgdGhlIGxpc3RlbmVyLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHRyYXBDYXB0dXJlZEV2ZW50OiBmdW5jdGlvbiAodG9wTGV2ZWxUeXBlLCBoYW5kbGVyQmFzZU5hbWUsIGVsZW1lbnQpIHtcbiAgICBpZiAoIWVsZW1lbnQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gRXZlbnRMaXN0ZW5lci5jYXB0dXJlKGVsZW1lbnQsIGhhbmRsZXJCYXNlTmFtZSwgUmVhY3RFdmVudExpc3RlbmVyLmRpc3BhdGNoRXZlbnQuYmluZChudWxsLCB0b3BMZXZlbFR5cGUpKTtcbiAgfSxcblxuICBtb25pdG9yU2Nyb2xsVmFsdWU6IGZ1bmN0aW9uIChyZWZyZXNoKSB7XG4gICAgdmFyIGNhbGxiYWNrID0gc2Nyb2xsVmFsdWVNb25pdG9yLmJpbmQobnVsbCwgcmVmcmVzaCk7XG4gICAgRXZlbnRMaXN0ZW5lci5saXN0ZW4od2luZG93LCAnc2Nyb2xsJywgY2FsbGJhY2spO1xuICB9LFxuXG4gIGRpc3BhdGNoRXZlbnQ6IGZ1bmN0aW9uICh0b3BMZXZlbFR5cGUsIG5hdGl2ZUV2ZW50KSB7XG4gICAgaWYgKCFSZWFjdEV2ZW50TGlzdGVuZXIuX2VuYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgYm9va0tlZXBpbmcgPSBUb3BMZXZlbENhbGxiYWNrQm9va0tlZXBpbmcuZ2V0UG9vbGVkKHRvcExldmVsVHlwZSwgbmF0aXZlRXZlbnQpO1xuICAgIHRyeSB7XG4gICAgICAvLyBFdmVudCBxdWV1ZSBiZWluZyBwcm9jZXNzZWQgaW4gdGhlIHNhbWUgY3ljbGUgYWxsb3dzXG4gICAgICAvLyBgcHJldmVudERlZmF1bHRgLlxuICAgICAgUmVhY3RVcGRhdGVzLmJhdGNoZWRVcGRhdGVzKGhhbmRsZVRvcExldmVsSW1wbCwgYm9va0tlZXBpbmcpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBUb3BMZXZlbENhbGxiYWNrQm9va0tlZXBpbmcucmVsZWFzZShib29rS2VlcGluZyk7XG4gICAgfVxuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0RXZlbnRMaXN0ZW5lcjtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3JlYWN0LWRvbS9saWIvUmVhY3RFdmVudExpc3RlbmVyLmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxNi1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgaGlzdG9yeSA9IFtdO1xuXG52YXIgUmVhY3RIb3N0T3BlcmF0aW9uSGlzdG9yeUhvb2sgPSB7XG4gIG9uSG9zdE9wZXJhdGlvbjogZnVuY3Rpb24gKG9wZXJhdGlvbikge1xuICAgIGhpc3RvcnkucHVzaChvcGVyYXRpb24pO1xuICB9LFxuICBjbGVhckhpc3Rvcnk6IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoUmVhY3RIb3N0T3BlcmF0aW9uSGlzdG9yeUhvb2suX3ByZXZlbnRDbGVhcmluZykge1xuICAgICAgLy8gU2hvdWxkIG9ubHkgYmUgdXNlZCBmb3IgdGVzdHMuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaGlzdG9yeSA9IFtdO1xuICB9LFxuICBnZXRIaXN0b3J5OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGhpc3Rvcnk7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RIb3N0T3BlcmF0aW9uSGlzdG9yeUhvb2s7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1kb20vbGliL1JlYWN0SG9zdE9wZXJhdGlvbkhpc3RvcnlIb29rLmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIERPTVByb3BlcnR5ID0gcmVxdWlyZSgnLi9ET01Qcm9wZXJ0eScpO1xudmFyIEV2ZW50UGx1Z2luSHViID0gcmVxdWlyZSgnLi9FdmVudFBsdWdpbkh1YicpO1xudmFyIEV2ZW50UGx1Z2luVXRpbHMgPSByZXF1aXJlKCcuL0V2ZW50UGx1Z2luVXRpbHMnKTtcbnZhciBSZWFjdENvbXBvbmVudEVudmlyb25tZW50ID0gcmVxdWlyZSgnLi9SZWFjdENvbXBvbmVudEVudmlyb25tZW50Jyk7XG52YXIgUmVhY3RFbXB0eUNvbXBvbmVudCA9IHJlcXVpcmUoJy4vUmVhY3RFbXB0eUNvbXBvbmVudCcpO1xudmFyIFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJy4vUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyJyk7XG52YXIgUmVhY3RIb3N0Q29tcG9uZW50ID0gcmVxdWlyZSgnLi9SZWFjdEhvc3RDb21wb25lbnQnKTtcbnZhciBSZWFjdFVwZGF0ZXMgPSByZXF1aXJlKCcuL1JlYWN0VXBkYXRlcycpO1xuXG52YXIgUmVhY3RJbmplY3Rpb24gPSB7XG4gIENvbXBvbmVudDogUmVhY3RDb21wb25lbnRFbnZpcm9ubWVudC5pbmplY3Rpb24sXG4gIERPTVByb3BlcnR5OiBET01Qcm9wZXJ0eS5pbmplY3Rpb24sXG4gIEVtcHR5Q29tcG9uZW50OiBSZWFjdEVtcHR5Q29tcG9uZW50LmluamVjdGlvbixcbiAgRXZlbnRQbHVnaW5IdWI6IEV2ZW50UGx1Z2luSHViLmluamVjdGlvbixcbiAgRXZlbnRQbHVnaW5VdGlsczogRXZlbnRQbHVnaW5VdGlscy5pbmplY3Rpb24sXG4gIEV2ZW50RW1pdHRlcjogUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyLmluamVjdGlvbixcbiAgSG9zdENvbXBvbmVudDogUmVhY3RIb3N0Q29tcG9uZW50LmluamVjdGlvbixcbiAgVXBkYXRlczogUmVhY3RVcGRhdGVzLmluamVjdGlvblxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdEluamVjdGlvbjtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3JlYWN0LWRvbS9saWIvUmVhY3RJbmplY3Rpb24uanMiLCIvKipcbiAqIENvcHlyaWdodCAyMDE2LXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciB3YXJuaW5nID0gcmVxdWlyZSgnZmJqcy9saWIvd2FybmluZycpO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICB2YXIgcHJvY2Vzc2luZ0NoaWxkQ29udGV4dCA9IGZhbHNlO1xuXG4gIHZhciB3YXJuSW52YWxpZFNldFN0YXRlID0gZnVuY3Rpb24gKCkge1xuICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKCFwcm9jZXNzaW5nQ2hpbGRDb250ZXh0LCAnc2V0U3RhdGUoLi4uKTogQ2Fubm90IGNhbGwgc2V0U3RhdGUoKSBpbnNpZGUgZ2V0Q2hpbGRDb250ZXh0KCknKSA6IHZvaWQgMDtcbiAgfTtcbn1cblxudmFyIFJlYWN0SW52YWxpZFNldFN0YXRlV2FybmluZ0hvb2sgPSB7XG4gIG9uQmVnaW5Qcm9jZXNzaW5nQ2hpbGRDb250ZXh0OiBmdW5jdGlvbiAoKSB7XG4gICAgcHJvY2Vzc2luZ0NoaWxkQ29udGV4dCA9IHRydWU7XG4gIH0sXG4gIG9uRW5kUHJvY2Vzc2luZ0NoaWxkQ29udGV4dDogZnVuY3Rpb24gKCkge1xuICAgIHByb2Nlc3NpbmdDaGlsZENvbnRleHQgPSBmYWxzZTtcbiAgfSxcbiAgb25TZXRTdGF0ZTogZnVuY3Rpb24gKCkge1xuICAgIHdhcm5JbnZhbGlkU2V0U3RhdGUoKTtcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdEludmFsaWRTZXRTdGF0ZVdhcm5pbmdIb29rO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QtZG9tL2xpYi9SZWFjdEludmFsaWRTZXRTdGF0ZVdhcm5pbmdIb29rLmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIGFkbGVyMzIgPSByZXF1aXJlKCcuL2FkbGVyMzInKTtcblxudmFyIFRBR19FTkQgPSAvXFwvPz4vO1xudmFyIENPTU1FTlRfU1RBUlQgPSAvXjxcXCFcXC1cXC0vO1xuXG52YXIgUmVhY3RNYXJrdXBDaGVja3N1bSA9IHtcbiAgQ0hFQ0tTVU1fQVRUUl9OQU1FOiAnZGF0YS1yZWFjdC1jaGVja3N1bScsXG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtYXJrdXAgTWFya3VwIHN0cmluZ1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9IE1hcmt1cCBzdHJpbmcgd2l0aCBjaGVja3N1bSBhdHRyaWJ1dGUgYXR0YWNoZWRcbiAgICovXG4gIGFkZENoZWNrc3VtVG9NYXJrdXA6IGZ1bmN0aW9uIChtYXJrdXApIHtcbiAgICB2YXIgY2hlY2tzdW0gPSBhZGxlcjMyKG1hcmt1cCk7XG5cbiAgICAvLyBBZGQgY2hlY2tzdW0gKGhhbmRsZSBib3RoIHBhcmVudCB0YWdzLCBjb21tZW50cyBhbmQgc2VsZi1jbG9zaW5nIHRhZ3MpXG4gICAgaWYgKENPTU1FTlRfU1RBUlQudGVzdChtYXJrdXApKSB7XG4gICAgICByZXR1cm4gbWFya3VwO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbWFya3VwLnJlcGxhY2UoVEFHX0VORCwgJyAnICsgUmVhY3RNYXJrdXBDaGVja3N1bS5DSEVDS1NVTV9BVFRSX05BTUUgKyAnPVwiJyArIGNoZWNrc3VtICsgJ1wiJCYnKTtcbiAgICB9XG4gIH0sXG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtYXJrdXAgdG8gdXNlXG4gICAqIEBwYXJhbSB7RE9NRWxlbWVudH0gZWxlbWVudCByb290IFJlYWN0IGVsZW1lbnRcbiAgICogQHJldHVybnMge2Jvb2xlYW59IHdoZXRoZXIgb3Igbm90IHRoZSBtYXJrdXAgaXMgdGhlIHNhbWVcbiAgICovXG4gIGNhblJldXNlTWFya3VwOiBmdW5jdGlvbiAobWFya3VwLCBlbGVtZW50KSB7XG4gICAgdmFyIGV4aXN0aW5nQ2hlY2tzdW0gPSBlbGVtZW50LmdldEF0dHJpYnV0ZShSZWFjdE1hcmt1cENoZWNrc3VtLkNIRUNLU1VNX0FUVFJfTkFNRSk7XG4gICAgZXhpc3RpbmdDaGVja3N1bSA9IGV4aXN0aW5nQ2hlY2tzdW0gJiYgcGFyc2VJbnQoZXhpc3RpbmdDaGVja3N1bSwgMTApO1xuICAgIHZhciBtYXJrdXBDaGVja3N1bSA9IGFkbGVyMzIobWFya3VwKTtcbiAgICByZXR1cm4gbWFya3VwQ2hlY2tzdW0gPT09IGV4aXN0aW5nQ2hlY2tzdW07XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RNYXJrdXBDaGVja3N1bTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3JlYWN0LWRvbS9saWIvUmVhY3RNYXJrdXBDaGVja3N1bS5qcyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBfcHJvZEludmFyaWFudCA9IHJlcXVpcmUoJy4vcmVhY3RQcm9kSW52YXJpYW50Jyk7XG5cbnZhciBSZWFjdENvbXBvbmVudEVudmlyb25tZW50ID0gcmVxdWlyZSgnLi9SZWFjdENvbXBvbmVudEVudmlyb25tZW50Jyk7XG52YXIgUmVhY3RJbnN0YW5jZU1hcCA9IHJlcXVpcmUoJy4vUmVhY3RJbnN0YW5jZU1hcCcpO1xudmFyIFJlYWN0SW5zdHJ1bWVudGF0aW9uID0gcmVxdWlyZSgnLi9SZWFjdEluc3RydW1lbnRhdGlvbicpO1xuXG52YXIgUmVhY3RDdXJyZW50T3duZXIgPSByZXF1aXJlKCdyZWFjdC9saWIvUmVhY3RDdXJyZW50T3duZXInKTtcbnZhciBSZWFjdFJlY29uY2lsZXIgPSByZXF1aXJlKCcuL1JlYWN0UmVjb25jaWxlcicpO1xudmFyIFJlYWN0Q2hpbGRSZWNvbmNpbGVyID0gcmVxdWlyZSgnLi9SZWFjdENoaWxkUmVjb25jaWxlcicpO1xuXG52YXIgZW1wdHlGdW5jdGlvbiA9IHJlcXVpcmUoJ2ZianMvbGliL2VtcHR5RnVuY3Rpb24nKTtcbnZhciBmbGF0dGVuQ2hpbGRyZW4gPSByZXF1aXJlKCcuL2ZsYXR0ZW5DaGlsZHJlbicpO1xudmFyIGludmFyaWFudCA9IHJlcXVpcmUoJ2ZianMvbGliL2ludmFyaWFudCcpO1xuXG4vKipcbiAqIE1ha2UgYW4gdXBkYXRlIGZvciBtYXJrdXAgdG8gYmUgcmVuZGVyZWQgYW5kIGluc2VydGVkIGF0IGEgc3VwcGxpZWQgaW5kZXguXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1hcmt1cCBNYXJrdXAgdGhhdCByZW5kZXJzIGludG8gYW4gZWxlbWVudC5cbiAqIEBwYXJhbSB7bnVtYmVyfSB0b0luZGV4IERlc3RpbmF0aW9uIGluZGV4LlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gbWFrZUluc2VydE1hcmt1cChtYXJrdXAsIGFmdGVyTm9kZSwgdG9JbmRleCkge1xuICAvLyBOT1RFOiBOdWxsIHZhbHVlcyByZWR1Y2UgaGlkZGVuIGNsYXNzZXMuXG4gIHJldHVybiB7XG4gICAgdHlwZTogJ0lOU0VSVF9NQVJLVVAnLFxuICAgIGNvbnRlbnQ6IG1hcmt1cCxcbiAgICBmcm9tSW5kZXg6IG51bGwsXG4gICAgZnJvbU5vZGU6IG51bGwsXG4gICAgdG9JbmRleDogdG9JbmRleCxcbiAgICBhZnRlck5vZGU6IGFmdGVyTm9kZVxuICB9O1xufVxuXG4vKipcbiAqIE1ha2UgYW4gdXBkYXRlIGZvciBtb3ZpbmcgYW4gZXhpc3RpbmcgZWxlbWVudCB0byBhbm90aGVyIGluZGV4LlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBmcm9tSW5kZXggU291cmNlIGluZGV4IG9mIHRoZSBleGlzdGluZyBlbGVtZW50LlxuICogQHBhcmFtIHtudW1iZXJ9IHRvSW5kZXggRGVzdGluYXRpb24gaW5kZXggb2YgdGhlIGVsZW1lbnQuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBtYWtlTW92ZShjaGlsZCwgYWZ0ZXJOb2RlLCB0b0luZGV4KSB7XG4gIC8vIE5PVEU6IE51bGwgdmFsdWVzIHJlZHVjZSBoaWRkZW4gY2xhc3Nlcy5cbiAgcmV0dXJuIHtcbiAgICB0eXBlOiAnTU9WRV9FWElTVElORycsXG4gICAgY29udGVudDogbnVsbCxcbiAgICBmcm9tSW5kZXg6IGNoaWxkLl9tb3VudEluZGV4LFxuICAgIGZyb21Ob2RlOiBSZWFjdFJlY29uY2lsZXIuZ2V0SG9zdE5vZGUoY2hpbGQpLFxuICAgIHRvSW5kZXg6IHRvSW5kZXgsXG4gICAgYWZ0ZXJOb2RlOiBhZnRlck5vZGVcbiAgfTtcbn1cblxuLyoqXG4gKiBNYWtlIGFuIHVwZGF0ZSBmb3IgcmVtb3ZpbmcgYW4gZWxlbWVudCBhdCBhbiBpbmRleC5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gZnJvbUluZGV4IEluZGV4IG9mIHRoZSBlbGVtZW50IHRvIHJlbW92ZS5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIG1ha2VSZW1vdmUoY2hpbGQsIG5vZGUpIHtcbiAgLy8gTk9URTogTnVsbCB2YWx1ZXMgcmVkdWNlIGhpZGRlbiBjbGFzc2VzLlxuICByZXR1cm4ge1xuICAgIHR5cGU6ICdSRU1PVkVfTk9ERScsXG4gICAgY29udGVudDogbnVsbCxcbiAgICBmcm9tSW5kZXg6IGNoaWxkLl9tb3VudEluZGV4LFxuICAgIGZyb21Ob2RlOiBub2RlLFxuICAgIHRvSW5kZXg6IG51bGwsXG4gICAgYWZ0ZXJOb2RlOiBudWxsXG4gIH07XG59XG5cbi8qKlxuICogTWFrZSBhbiB1cGRhdGUgZm9yIHNldHRpbmcgdGhlIG1hcmt1cCBvZiBhIG5vZGUuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1hcmt1cCBNYXJrdXAgdGhhdCByZW5kZXJzIGludG8gYW4gZWxlbWVudC5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIG1ha2VTZXRNYXJrdXAobWFya3VwKSB7XG4gIC8vIE5PVEU6IE51bGwgdmFsdWVzIHJlZHVjZSBoaWRkZW4gY2xhc3Nlcy5cbiAgcmV0dXJuIHtcbiAgICB0eXBlOiAnU0VUX01BUktVUCcsXG4gICAgY29udGVudDogbWFya3VwLFxuICAgIGZyb21JbmRleDogbnVsbCxcbiAgICBmcm9tTm9kZTogbnVsbCxcbiAgICB0b0luZGV4OiBudWxsLFxuICAgIGFmdGVyTm9kZTogbnVsbFxuICB9O1xufVxuXG4vKipcbiAqIE1ha2UgYW4gdXBkYXRlIGZvciBzZXR0aW5nIHRoZSB0ZXh0IGNvbnRlbnQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHRleHRDb250ZW50IFRleHQgY29udGVudCB0byBzZXQuXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBtYWtlVGV4dENvbnRlbnQodGV4dENvbnRlbnQpIHtcbiAgLy8gTk9URTogTnVsbCB2YWx1ZXMgcmVkdWNlIGhpZGRlbiBjbGFzc2VzLlxuICByZXR1cm4ge1xuICAgIHR5cGU6ICdURVhUX0NPTlRFTlQnLFxuICAgIGNvbnRlbnQ6IHRleHRDb250ZW50LFxuICAgIGZyb21JbmRleDogbnVsbCxcbiAgICBmcm9tTm9kZTogbnVsbCxcbiAgICB0b0luZGV4OiBudWxsLFxuICAgIGFmdGVyTm9kZTogbnVsbFxuICB9O1xufVxuXG4vKipcbiAqIFB1c2ggYW4gdXBkYXRlLCBpZiBhbnksIG9udG8gdGhlIHF1ZXVlLiBDcmVhdGVzIGEgbmV3IHF1ZXVlIGlmIG5vbmUgaXNcbiAqIHBhc3NlZCBhbmQgYWx3YXlzIHJldHVybnMgdGhlIHF1ZXVlLiBNdXRhdGl2ZS5cbiAqL1xuZnVuY3Rpb24gZW5xdWV1ZShxdWV1ZSwgdXBkYXRlKSB7XG4gIGlmICh1cGRhdGUpIHtcbiAgICBxdWV1ZSA9IHF1ZXVlIHx8IFtdO1xuICAgIHF1ZXVlLnB1c2godXBkYXRlKTtcbiAgfVxuICByZXR1cm4gcXVldWU7XG59XG5cbi8qKlxuICogUHJvY2Vzc2VzIGFueSBlbnF1ZXVlZCB1cGRhdGVzLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHByb2Nlc3NRdWV1ZShpbnN0LCB1cGRhdGVRdWV1ZSkge1xuICBSZWFjdENvbXBvbmVudEVudmlyb25tZW50LnByb2Nlc3NDaGlsZHJlblVwZGF0ZXMoaW5zdCwgdXBkYXRlUXVldWUpO1xufVxuXG52YXIgc2V0Q2hpbGRyZW5Gb3JJbnN0cnVtZW50YXRpb24gPSBlbXB0eUZ1bmN0aW9uO1xuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgdmFyIGdldERlYnVnSUQgPSBmdW5jdGlvbiAoaW5zdCkge1xuICAgIGlmICghaW5zdC5fZGVidWdJRCkge1xuICAgICAgLy8gQ2hlY2sgZm9yIEFSVC1saWtlIGluc3RhbmNlcy4gVE9ETzogVGhpcyBpcyBzaWxseS9ncm9zcy5cbiAgICAgIHZhciBpbnRlcm5hbDtcbiAgICAgIGlmIChpbnRlcm5hbCA9IFJlYWN0SW5zdGFuY2VNYXAuZ2V0KGluc3QpKSB7XG4gICAgICAgIGluc3QgPSBpbnRlcm5hbDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGluc3QuX2RlYnVnSUQ7XG4gIH07XG4gIHNldENoaWxkcmVuRm9ySW5zdHJ1bWVudGF0aW9uID0gZnVuY3Rpb24gKGNoaWxkcmVuKSB7XG4gICAgdmFyIGRlYnVnSUQgPSBnZXREZWJ1Z0lEKHRoaXMpO1xuICAgIC8vIFRPRE86IFJlYWN0IE5hdGl2ZSBlbXB0eSBjb21wb25lbnRzIGFyZSBhbHNvIG11bHRpY2hpbGQuXG4gICAgLy8gVGhpcyBtZWFucyB0aGV5IHN0aWxsIGdldCBpbnRvIHRoaXMgbWV0aG9kIGJ1dCBkb24ndCBoYXZlIF9kZWJ1Z0lELlxuICAgIGlmIChkZWJ1Z0lEICE9PSAwKSB7XG4gICAgICBSZWFjdEluc3RydW1lbnRhdGlvbi5kZWJ1Z1Rvb2wub25TZXRDaGlsZHJlbihkZWJ1Z0lELCBjaGlsZHJlbiA/IE9iamVjdC5rZXlzKGNoaWxkcmVuKS5tYXAoZnVuY3Rpb24gKGtleSkge1xuICAgICAgICByZXR1cm4gY2hpbGRyZW5ba2V5XS5fZGVidWdJRDtcbiAgICAgIH0pIDogW10pO1xuICAgIH1cbiAgfTtcbn1cblxuLyoqXG4gKiBSZWFjdE11bHRpQ2hpbGQgYXJlIGNhcGFibGUgb2YgcmVjb25jaWxpbmcgbXVsdGlwbGUgY2hpbGRyZW4uXG4gKlxuICogQGNsYXNzIFJlYWN0TXVsdGlDaGlsZFxuICogQGludGVybmFsXG4gKi9cbnZhciBSZWFjdE11bHRpQ2hpbGQgPSB7XG4gIC8qKlxuICAgKiBQcm92aWRlcyBjb21tb24gZnVuY3Rpb25hbGl0eSBmb3IgY29tcG9uZW50cyB0aGF0IG11c3QgcmVjb25jaWxlIG11bHRpcGxlXG4gICAqIGNoaWxkcmVuLiBUaGlzIGlzIHVzZWQgYnkgYFJlYWN0RE9NQ29tcG9uZW50YCB0byBtb3VudCwgdXBkYXRlLCBhbmRcbiAgICogdW5tb3VudCBjaGlsZCBjb21wb25lbnRzLlxuICAgKlxuICAgKiBAbGVuZHMge1JlYWN0TXVsdGlDaGlsZC5wcm90b3R5cGV9XG4gICAqL1xuICBNaXhpbjoge1xuICAgIF9yZWNvbmNpbGVySW5zdGFudGlhdGVDaGlsZHJlbjogZnVuY3Rpb24gKG5lc3RlZENoaWxkcmVuLCB0cmFuc2FjdGlvbiwgY29udGV4dCkge1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgdmFyIHNlbGZEZWJ1Z0lEID0gZ2V0RGVidWdJRCh0aGlzKTtcbiAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRFbGVtZW50KSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQgPSB0aGlzLl9jdXJyZW50RWxlbWVudC5fb3duZXI7XG4gICAgICAgICAgICByZXR1cm4gUmVhY3RDaGlsZFJlY29uY2lsZXIuaW5zdGFudGlhdGVDaGlsZHJlbihuZXN0ZWRDaGlsZHJlbiwgdHJhbnNhY3Rpb24sIGNvbnRleHQsIHNlbGZEZWJ1Z0lEKTtcbiAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgUmVhY3RDdXJyZW50T3duZXIuY3VycmVudCA9IG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gUmVhY3RDaGlsZFJlY29uY2lsZXIuaW5zdGFudGlhdGVDaGlsZHJlbihuZXN0ZWRDaGlsZHJlbiwgdHJhbnNhY3Rpb24sIGNvbnRleHQpO1xuICAgIH0sXG5cbiAgICBfcmVjb25jaWxlclVwZGF0ZUNoaWxkcmVuOiBmdW5jdGlvbiAocHJldkNoaWxkcmVuLCBuZXh0TmVzdGVkQ2hpbGRyZW5FbGVtZW50cywgbW91bnRJbWFnZXMsIHJlbW92ZWROb2RlcywgdHJhbnNhY3Rpb24sIGNvbnRleHQpIHtcbiAgICAgIHZhciBuZXh0Q2hpbGRyZW47XG4gICAgICB2YXIgc2VsZkRlYnVnSUQgPSAwO1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgc2VsZkRlYnVnSUQgPSBnZXREZWJ1Z0lEKHRoaXMpO1xuICAgICAgICBpZiAodGhpcy5fY3VycmVudEVsZW1lbnQpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgUmVhY3RDdXJyZW50T3duZXIuY3VycmVudCA9IHRoaXMuX2N1cnJlbnRFbGVtZW50Ll9vd25lcjtcbiAgICAgICAgICAgIG5leHRDaGlsZHJlbiA9IGZsYXR0ZW5DaGlsZHJlbihuZXh0TmVzdGVkQ2hpbGRyZW5FbGVtZW50cywgc2VsZkRlYnVnSUQpO1xuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50ID0gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgICAgUmVhY3RDaGlsZFJlY29uY2lsZXIudXBkYXRlQ2hpbGRyZW4ocHJldkNoaWxkcmVuLCBuZXh0Q2hpbGRyZW4sIG1vdW50SW1hZ2VzLCByZW1vdmVkTm9kZXMsIHRyYW5zYWN0aW9uLCB0aGlzLCB0aGlzLl9ob3N0Q29udGFpbmVySW5mbywgY29udGV4dCwgc2VsZkRlYnVnSUQpO1xuICAgICAgICAgIHJldHVybiBuZXh0Q2hpbGRyZW47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIG5leHRDaGlsZHJlbiA9IGZsYXR0ZW5DaGlsZHJlbihuZXh0TmVzdGVkQ2hpbGRyZW5FbGVtZW50cywgc2VsZkRlYnVnSUQpO1xuICAgICAgUmVhY3RDaGlsZFJlY29uY2lsZXIudXBkYXRlQ2hpbGRyZW4ocHJldkNoaWxkcmVuLCBuZXh0Q2hpbGRyZW4sIG1vdW50SW1hZ2VzLCByZW1vdmVkTm9kZXMsIHRyYW5zYWN0aW9uLCB0aGlzLCB0aGlzLl9ob3N0Q29udGFpbmVySW5mbywgY29udGV4dCwgc2VsZkRlYnVnSUQpO1xuICAgICAgcmV0dXJuIG5leHRDaGlsZHJlbjtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogR2VuZXJhdGVzIGEgXCJtb3VudCBpbWFnZVwiIGZvciBlYWNoIG9mIHRoZSBzdXBwbGllZCBjaGlsZHJlbi4gSW4gdGhlIGNhc2VcbiAgICAgKiBvZiBgUmVhY3RET01Db21wb25lbnRgLCBhIG1vdW50IGltYWdlIGlzIGEgc3RyaW5nIG9mIG1hcmt1cC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7P29iamVjdH0gbmVzdGVkQ2hpbGRyZW4gTmVzdGVkIGNoaWxkIG1hcHMuXG4gICAgICogQHJldHVybiB7YXJyYXl9IEFuIGFycmF5IG9mIG1vdW50ZWQgcmVwcmVzZW50YXRpb25zLlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIG1vdW50Q2hpbGRyZW46IGZ1bmN0aW9uIChuZXN0ZWRDaGlsZHJlbiwgdHJhbnNhY3Rpb24sIGNvbnRleHQpIHtcbiAgICAgIHZhciBjaGlsZHJlbiA9IHRoaXMuX3JlY29uY2lsZXJJbnN0YW50aWF0ZUNoaWxkcmVuKG5lc3RlZENoaWxkcmVuLCB0cmFuc2FjdGlvbiwgY29udGV4dCk7XG4gICAgICB0aGlzLl9yZW5kZXJlZENoaWxkcmVuID0gY2hpbGRyZW47XG5cbiAgICAgIHZhciBtb3VudEltYWdlcyA9IFtdO1xuICAgICAgdmFyIGluZGV4ID0gMDtcbiAgICAgIGZvciAodmFyIG5hbWUgaW4gY2hpbGRyZW4pIHtcbiAgICAgICAgaWYgKGNoaWxkcmVuLmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgICAgICAgdmFyIGNoaWxkID0gY2hpbGRyZW5bbmFtZV07XG4gICAgICAgICAgdmFyIHNlbGZEZWJ1Z0lEID0gMDtcbiAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgc2VsZkRlYnVnSUQgPSBnZXREZWJ1Z0lEKHRoaXMpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB2YXIgbW91bnRJbWFnZSA9IFJlYWN0UmVjb25jaWxlci5tb3VudENvbXBvbmVudChjaGlsZCwgdHJhbnNhY3Rpb24sIHRoaXMsIHRoaXMuX2hvc3RDb250YWluZXJJbmZvLCBjb250ZXh0LCBzZWxmRGVidWdJRCk7XG4gICAgICAgICAgY2hpbGQuX21vdW50SW5kZXggPSBpbmRleCsrO1xuICAgICAgICAgIG1vdW50SW1hZ2VzLnB1c2gobW91bnRJbWFnZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgc2V0Q2hpbGRyZW5Gb3JJbnN0cnVtZW50YXRpb24uY2FsbCh0aGlzLCBjaGlsZHJlbik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBtb3VudEltYWdlcztcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogUmVwbGFjZXMgYW55IHJlbmRlcmVkIGNoaWxkcmVuIHdpdGggYSB0ZXh0IGNvbnRlbnQgc3RyaW5nLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5leHRDb250ZW50IFN0cmluZyBvZiBjb250ZW50LlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHVwZGF0ZVRleHRDb250ZW50OiBmdW5jdGlvbiAobmV4dENvbnRlbnQpIHtcbiAgICAgIHZhciBwcmV2Q2hpbGRyZW4gPSB0aGlzLl9yZW5kZXJlZENoaWxkcmVuO1xuICAgICAgLy8gUmVtb3ZlIGFueSByZW5kZXJlZCBjaGlsZHJlbi5cbiAgICAgIFJlYWN0Q2hpbGRSZWNvbmNpbGVyLnVubW91bnRDaGlsZHJlbihwcmV2Q2hpbGRyZW4sIGZhbHNlKTtcbiAgICAgIGZvciAodmFyIG5hbWUgaW4gcHJldkNoaWxkcmVuKSB7XG4gICAgICAgIGlmIChwcmV2Q2hpbGRyZW4uaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgICAgICAhZmFsc2UgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAndXBkYXRlVGV4dENvbnRlbnQgY2FsbGVkIG9uIG5vbi1lbXB0eSBjb21wb25lbnQuJykgOiBfcHJvZEludmFyaWFudCgnMTE4JykgOiB2b2lkIDA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIFNldCBuZXcgdGV4dCBjb250ZW50LlxuICAgICAgdmFyIHVwZGF0ZXMgPSBbbWFrZVRleHRDb250ZW50KG5leHRDb250ZW50KV07XG4gICAgICBwcm9jZXNzUXVldWUodGhpcywgdXBkYXRlcyk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFJlcGxhY2VzIGFueSByZW5kZXJlZCBjaGlsZHJlbiB3aXRoIGEgbWFya3VwIHN0cmluZy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuZXh0TWFya3VwIFN0cmluZyBvZiBtYXJrdXAuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgdXBkYXRlTWFya3VwOiBmdW5jdGlvbiAobmV4dE1hcmt1cCkge1xuICAgICAgdmFyIHByZXZDaGlsZHJlbiA9IHRoaXMuX3JlbmRlcmVkQ2hpbGRyZW47XG4gICAgICAvLyBSZW1vdmUgYW55IHJlbmRlcmVkIGNoaWxkcmVuLlxuICAgICAgUmVhY3RDaGlsZFJlY29uY2lsZXIudW5tb3VudENoaWxkcmVuKHByZXZDaGlsZHJlbiwgZmFsc2UpO1xuICAgICAgZm9yICh2YXIgbmFtZSBpbiBwcmV2Q2hpbGRyZW4pIHtcbiAgICAgICAgaWYgKHByZXZDaGlsZHJlbi5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuICAgICAgICAgICFmYWxzZSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICd1cGRhdGVUZXh0Q29udGVudCBjYWxsZWQgb24gbm9uLWVtcHR5IGNvbXBvbmVudC4nKSA6IF9wcm9kSW52YXJpYW50KCcxMTgnKSA6IHZvaWQgMDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdmFyIHVwZGF0ZXMgPSBbbWFrZVNldE1hcmt1cChuZXh0TWFya3VwKV07XG4gICAgICBwcm9jZXNzUXVldWUodGhpcywgdXBkYXRlcyk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFVwZGF0ZXMgdGhlIHJlbmRlcmVkIGNoaWxkcmVuIHdpdGggbmV3IGNoaWxkcmVuLlxuICAgICAqXG4gICAgICogQHBhcmFtIHs/b2JqZWN0fSBuZXh0TmVzdGVkQ2hpbGRyZW5FbGVtZW50cyBOZXN0ZWQgY2hpbGQgZWxlbWVudCBtYXBzLlxuICAgICAqIEBwYXJhbSB7UmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvbn0gdHJhbnNhY3Rpb25cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICB1cGRhdGVDaGlsZHJlbjogZnVuY3Rpb24gKG5leHROZXN0ZWRDaGlsZHJlbkVsZW1lbnRzLCB0cmFuc2FjdGlvbiwgY29udGV4dCkge1xuICAgICAgLy8gSG9vayB1c2VkIGJ5IFJlYWN0IEFSVFxuICAgICAgdGhpcy5fdXBkYXRlQ2hpbGRyZW4obmV4dE5lc3RlZENoaWxkcmVuRWxlbWVudHMsIHRyYW5zYWN0aW9uLCBjb250ZXh0KTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHs/b2JqZWN0fSBuZXh0TmVzdGVkQ2hpbGRyZW5FbGVtZW50cyBOZXN0ZWQgY2hpbGQgZWxlbWVudCBtYXBzLlxuICAgICAqIEBwYXJhbSB7UmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvbn0gdHJhbnNhY3Rpb25cbiAgICAgKiBAZmluYWxcbiAgICAgKiBAcHJvdGVjdGVkXG4gICAgICovXG4gICAgX3VwZGF0ZUNoaWxkcmVuOiBmdW5jdGlvbiAobmV4dE5lc3RlZENoaWxkcmVuRWxlbWVudHMsIHRyYW5zYWN0aW9uLCBjb250ZXh0KSB7XG4gICAgICB2YXIgcHJldkNoaWxkcmVuID0gdGhpcy5fcmVuZGVyZWRDaGlsZHJlbjtcbiAgICAgIHZhciByZW1vdmVkTm9kZXMgPSB7fTtcbiAgICAgIHZhciBtb3VudEltYWdlcyA9IFtdO1xuICAgICAgdmFyIG5leHRDaGlsZHJlbiA9IHRoaXMuX3JlY29uY2lsZXJVcGRhdGVDaGlsZHJlbihwcmV2Q2hpbGRyZW4sIG5leHROZXN0ZWRDaGlsZHJlbkVsZW1lbnRzLCBtb3VudEltYWdlcywgcmVtb3ZlZE5vZGVzLCB0cmFuc2FjdGlvbiwgY29udGV4dCk7XG4gICAgICBpZiAoIW5leHRDaGlsZHJlbiAmJiAhcHJldkNoaWxkcmVuKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHZhciB1cGRhdGVzID0gbnVsbDtcbiAgICAgIHZhciBuYW1lO1xuICAgICAgLy8gYG5leHRJbmRleGAgd2lsbCBpbmNyZW1lbnQgZm9yIGVhY2ggY2hpbGQgaW4gYG5leHRDaGlsZHJlbmAsIGJ1dFxuICAgICAgLy8gYGxhc3RJbmRleGAgd2lsbCBiZSB0aGUgbGFzdCBpbmRleCB2aXNpdGVkIGluIGBwcmV2Q2hpbGRyZW5gLlxuICAgICAgdmFyIG5leHRJbmRleCA9IDA7XG4gICAgICB2YXIgbGFzdEluZGV4ID0gMDtcbiAgICAgIC8vIGBuZXh0TW91bnRJbmRleGAgd2lsbCBpbmNyZW1lbnQgZm9yIGVhY2ggbmV3bHkgbW91bnRlZCBjaGlsZC5cbiAgICAgIHZhciBuZXh0TW91bnRJbmRleCA9IDA7XG4gICAgICB2YXIgbGFzdFBsYWNlZE5vZGUgPSBudWxsO1xuICAgICAgZm9yIChuYW1lIGluIG5leHRDaGlsZHJlbikge1xuICAgICAgICBpZiAoIW5leHRDaGlsZHJlbi5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHZhciBwcmV2Q2hpbGQgPSBwcmV2Q2hpbGRyZW4gJiYgcHJldkNoaWxkcmVuW25hbWVdO1xuICAgICAgICB2YXIgbmV4dENoaWxkID0gbmV4dENoaWxkcmVuW25hbWVdO1xuICAgICAgICBpZiAocHJldkNoaWxkID09PSBuZXh0Q2hpbGQpIHtcbiAgICAgICAgICB1cGRhdGVzID0gZW5xdWV1ZSh1cGRhdGVzLCB0aGlzLm1vdmVDaGlsZChwcmV2Q2hpbGQsIGxhc3RQbGFjZWROb2RlLCBuZXh0SW5kZXgsIGxhc3RJbmRleCkpO1xuICAgICAgICAgIGxhc3RJbmRleCA9IE1hdGgubWF4KHByZXZDaGlsZC5fbW91bnRJbmRleCwgbGFzdEluZGV4KTtcbiAgICAgICAgICBwcmV2Q2hpbGQuX21vdW50SW5kZXggPSBuZXh0SW5kZXg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHByZXZDaGlsZCkge1xuICAgICAgICAgICAgLy8gVXBkYXRlIGBsYXN0SW5kZXhgIGJlZm9yZSBgX21vdW50SW5kZXhgIGdldHMgdW5zZXQgYnkgdW5tb3VudGluZy5cbiAgICAgICAgICAgIGxhc3RJbmRleCA9IE1hdGgubWF4KHByZXZDaGlsZC5fbW91bnRJbmRleCwgbGFzdEluZGV4KTtcbiAgICAgICAgICAgIC8vIFRoZSBgcmVtb3ZlZE5vZGVzYCBsb29wIGJlbG93IHdpbGwgYWN0dWFsbHkgcmVtb3ZlIHRoZSBjaGlsZC5cbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gVGhlIGNoaWxkIG11c3QgYmUgaW5zdGFudGlhdGVkIGJlZm9yZSBpdCdzIG1vdW50ZWQuXG4gICAgICAgICAgdXBkYXRlcyA9IGVucXVldWUodXBkYXRlcywgdGhpcy5fbW91bnRDaGlsZEF0SW5kZXgobmV4dENoaWxkLCBtb3VudEltYWdlc1tuZXh0TW91bnRJbmRleF0sIGxhc3RQbGFjZWROb2RlLCBuZXh0SW5kZXgsIHRyYW5zYWN0aW9uLCBjb250ZXh0KSk7XG4gICAgICAgICAgbmV4dE1vdW50SW5kZXgrKztcbiAgICAgICAgfVxuICAgICAgICBuZXh0SW5kZXgrKztcbiAgICAgICAgbGFzdFBsYWNlZE5vZGUgPSBSZWFjdFJlY29uY2lsZXIuZ2V0SG9zdE5vZGUobmV4dENoaWxkKTtcbiAgICAgIH1cbiAgICAgIC8vIFJlbW92ZSBjaGlsZHJlbiB0aGF0IGFyZSBubyBsb25nZXIgcHJlc2VudC5cbiAgICAgIGZvciAobmFtZSBpbiByZW1vdmVkTm9kZXMpIHtcbiAgICAgICAgaWYgKHJlbW92ZWROb2Rlcy5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuICAgICAgICAgIHVwZGF0ZXMgPSBlbnF1ZXVlKHVwZGF0ZXMsIHRoaXMuX3VubW91bnRDaGlsZChwcmV2Q2hpbGRyZW5bbmFtZV0sIHJlbW92ZWROb2Rlc1tuYW1lXSkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodXBkYXRlcykge1xuICAgICAgICBwcm9jZXNzUXVldWUodGhpcywgdXBkYXRlcyk7XG4gICAgICB9XG4gICAgICB0aGlzLl9yZW5kZXJlZENoaWxkcmVuID0gbmV4dENoaWxkcmVuO1xuXG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICBzZXRDaGlsZHJlbkZvckluc3RydW1lbnRhdGlvbi5jYWxsKHRoaXMsIG5leHRDaGlsZHJlbik7XG4gICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFVubW91bnRzIGFsbCByZW5kZXJlZCBjaGlsZHJlbi4gVGhpcyBzaG91bGQgYmUgdXNlZCB0byBjbGVhbiB1cCBjaGlsZHJlblxuICAgICAqIHdoZW4gdGhpcyBjb21wb25lbnQgaXMgdW5tb3VudGVkLiBJdCBkb2VzIG5vdCBhY3R1YWxseSBwZXJmb3JtIGFueVxuICAgICAqIGJhY2tlbmQgb3BlcmF0aW9ucy5cbiAgICAgKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHVubW91bnRDaGlsZHJlbjogZnVuY3Rpb24gKHNhZmVseSkge1xuICAgICAgdmFyIHJlbmRlcmVkQ2hpbGRyZW4gPSB0aGlzLl9yZW5kZXJlZENoaWxkcmVuO1xuICAgICAgUmVhY3RDaGlsZFJlY29uY2lsZXIudW5tb3VudENoaWxkcmVuKHJlbmRlcmVkQ2hpbGRyZW4sIHNhZmVseSk7XG4gICAgICB0aGlzLl9yZW5kZXJlZENoaWxkcmVuID0gbnVsbDtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogTW92ZXMgYSBjaGlsZCBjb21wb25lbnQgdG8gdGhlIHN1cHBsaWVkIGluZGV4LlxuICAgICAqXG4gICAgICogQHBhcmFtIHtSZWFjdENvbXBvbmVudH0gY2hpbGQgQ29tcG9uZW50IHRvIG1vdmUuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHRvSW5kZXggRGVzdGluYXRpb24gaW5kZXggb2YgdGhlIGVsZW1lbnQuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGxhc3RJbmRleCBMYXN0IGluZGV4IHZpc2l0ZWQgb2YgdGhlIHNpYmxpbmdzIG9mIGBjaGlsZGAuXG4gICAgICogQHByb3RlY3RlZFxuICAgICAqL1xuICAgIG1vdmVDaGlsZDogZnVuY3Rpb24gKGNoaWxkLCBhZnRlck5vZGUsIHRvSW5kZXgsIGxhc3RJbmRleCkge1xuICAgICAgLy8gSWYgdGhlIGluZGV4IG9mIGBjaGlsZGAgaXMgbGVzcyB0aGFuIGBsYXN0SW5kZXhgLCB0aGVuIGl0IG5lZWRzIHRvXG4gICAgICAvLyBiZSBtb3ZlZC4gT3RoZXJ3aXNlLCB3ZSBkbyBub3QgbmVlZCB0byBtb3ZlIGl0IGJlY2F1c2UgYSBjaGlsZCB3aWxsIGJlXG4gICAgICAvLyBpbnNlcnRlZCBvciBtb3ZlZCBiZWZvcmUgYGNoaWxkYC5cbiAgICAgIGlmIChjaGlsZC5fbW91bnRJbmRleCA8IGxhc3RJbmRleCkge1xuICAgICAgICByZXR1cm4gbWFrZU1vdmUoY2hpbGQsIGFmdGVyTm9kZSwgdG9JbmRleCk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBjaGlsZCBjb21wb25lbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1JlYWN0Q29tcG9uZW50fSBjaGlsZCBDb21wb25lbnQgdG8gY3JlYXRlLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBtb3VudEltYWdlIE1hcmt1cCB0byBpbnNlcnQuXG4gICAgICogQHByb3RlY3RlZFxuICAgICAqL1xuICAgIGNyZWF0ZUNoaWxkOiBmdW5jdGlvbiAoY2hpbGQsIGFmdGVyTm9kZSwgbW91bnRJbWFnZSkge1xuICAgICAgcmV0dXJuIG1ha2VJbnNlcnRNYXJrdXAobW91bnRJbWFnZSwgYWZ0ZXJOb2RlLCBjaGlsZC5fbW91bnRJbmRleCk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgYSBjaGlsZCBjb21wb25lbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1JlYWN0Q29tcG9uZW50fSBjaGlsZCBDaGlsZCB0byByZW1vdmUuXG4gICAgICogQHByb3RlY3RlZFxuICAgICAqL1xuICAgIHJlbW92ZUNoaWxkOiBmdW5jdGlvbiAoY2hpbGQsIG5vZGUpIHtcbiAgICAgIHJldHVybiBtYWtlUmVtb3ZlKGNoaWxkLCBub2RlKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogTW91bnRzIGEgY2hpbGQgd2l0aCB0aGUgc3VwcGxpZWQgbmFtZS5cbiAgICAgKlxuICAgICAqIE5PVEU6IFRoaXMgaXMgcGFydCBvZiBgdXBkYXRlQ2hpbGRyZW5gIGFuZCBpcyBoZXJlIGZvciByZWFkYWJpbGl0eS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7UmVhY3RDb21wb25lbnR9IGNoaWxkIENvbXBvbmVudCB0byBtb3VudC5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBOYW1lIG9mIHRoZSBjaGlsZC5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXggSW5kZXggYXQgd2hpY2ggdG8gaW5zZXJ0IHRoZSBjaGlsZC5cbiAgICAgKiBAcGFyYW0ge1JlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb259IHRyYW5zYWN0aW9uXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBfbW91bnRDaGlsZEF0SW5kZXg6IGZ1bmN0aW9uIChjaGlsZCwgbW91bnRJbWFnZSwgYWZ0ZXJOb2RlLCBpbmRleCwgdHJhbnNhY3Rpb24sIGNvbnRleHQpIHtcbiAgICAgIGNoaWxkLl9tb3VudEluZGV4ID0gaW5kZXg7XG4gICAgICByZXR1cm4gdGhpcy5jcmVhdGVDaGlsZChjaGlsZCwgYWZ0ZXJOb2RlLCBtb3VudEltYWdlKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVW5tb3VudHMgYSByZW5kZXJlZCBjaGlsZC5cbiAgICAgKlxuICAgICAqIE5PVEU6IFRoaXMgaXMgcGFydCBvZiBgdXBkYXRlQ2hpbGRyZW5gIGFuZCBpcyBoZXJlIGZvciByZWFkYWJpbGl0eS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7UmVhY3RDb21wb25lbnR9IGNoaWxkIENvbXBvbmVudCB0byB1bm1vdW50LlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgX3VubW91bnRDaGlsZDogZnVuY3Rpb24gKGNoaWxkLCBub2RlKSB7XG4gICAgICB2YXIgdXBkYXRlID0gdGhpcy5yZW1vdmVDaGlsZChjaGlsZCwgbm9kZSk7XG4gICAgICBjaGlsZC5fbW91bnRJbmRleCA9IG51bGw7XG4gICAgICByZXR1cm4gdXBkYXRlO1xuICAgIH1cbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdE11bHRpQ2hpbGQ7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1kb20vbGliL1JlYWN0TXVsdGlDaGlsZC5qcyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIFxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIF9wcm9kSW52YXJpYW50ID0gcmVxdWlyZSgnLi9yZWFjdFByb2RJbnZhcmlhbnQnKTtcblxudmFyIGludmFyaWFudCA9IHJlcXVpcmUoJ2ZianMvbGliL2ludmFyaWFudCcpO1xuXG4vKipcbiAqIEBwYXJhbSB7P29iamVjdH0gb2JqZWN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIGBvYmplY3RgIGlzIGEgdmFsaWQgb3duZXIuXG4gKiBAZmluYWxcbiAqL1xuZnVuY3Rpb24gaXNWYWxpZE93bmVyKG9iamVjdCkge1xuICByZXR1cm4gISEob2JqZWN0ICYmIHR5cGVvZiBvYmplY3QuYXR0YWNoUmVmID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBvYmplY3QuZGV0YWNoUmVmID09PSAnZnVuY3Rpb24nKTtcbn1cblxuLyoqXG4gKiBSZWFjdE93bmVycyBhcmUgY2FwYWJsZSBvZiBzdG9yaW5nIHJlZmVyZW5jZXMgdG8gb3duZWQgY29tcG9uZW50cy5cbiAqXG4gKiBBbGwgY29tcG9uZW50cyBhcmUgY2FwYWJsZSBvZiAvL2JlaW5nLy8gcmVmZXJlbmNlZCBieSBvd25lciBjb21wb25lbnRzLCBidXRcbiAqIG9ubHkgUmVhY3RPd25lciBjb21wb25lbnRzIGFyZSBjYXBhYmxlIG9mIC8vcmVmZXJlbmNpbmcvLyBvd25lZCBjb21wb25lbnRzLlxuICogVGhlIG5hbWVkIHJlZmVyZW5jZSBpcyBrbm93biBhcyBhIFwicmVmXCIuXG4gKlxuICogUmVmcyBhcmUgYXZhaWxhYmxlIHdoZW4gbW91bnRlZCBhbmQgdXBkYXRlZCBkdXJpbmcgcmVjb25jaWxpYXRpb24uXG4gKlxuICogICB2YXIgTXlDb21wb25lbnQgPSBSZWFjdC5jcmVhdGVDbGFzcyh7XG4gKiAgICAgcmVuZGVyOiBmdW5jdGlvbigpIHtcbiAqICAgICAgIHJldHVybiAoXG4gKiAgICAgICAgIDxkaXYgb25DbGljaz17dGhpcy5oYW5kbGVDbGlja30+XG4gKiAgICAgICAgICAgPEN1c3RvbUNvbXBvbmVudCByZWY9XCJjdXN0b21cIiAvPlxuICogICAgICAgICA8L2Rpdj5cbiAqICAgICAgICk7XG4gKiAgICAgfSxcbiAqICAgICBoYW5kbGVDbGljazogZnVuY3Rpb24oKSB7XG4gKiAgICAgICB0aGlzLnJlZnMuY3VzdG9tLmhhbmRsZUNsaWNrKCk7XG4gKiAgICAgfSxcbiAqICAgICBjb21wb25lbnREaWRNb3VudDogZnVuY3Rpb24oKSB7XG4gKiAgICAgICB0aGlzLnJlZnMuY3VzdG9tLmluaXRpYWxpemUoKTtcbiAqICAgICB9XG4gKiAgIH0pO1xuICpcbiAqIFJlZnMgc2hvdWxkIHJhcmVseSBiZSB1c2VkLiBXaGVuIHJlZnMgYXJlIHVzZWQsIHRoZXkgc2hvdWxkIG9ubHkgYmUgZG9uZSB0b1xuICogY29udHJvbCBkYXRhIHRoYXQgaXMgbm90IGhhbmRsZWQgYnkgUmVhY3QncyBkYXRhIGZsb3cuXG4gKlxuICogQGNsYXNzIFJlYWN0T3duZXJcbiAqL1xudmFyIFJlYWN0T3duZXIgPSB7XG4gIC8qKlxuICAgKiBBZGRzIGEgY29tcG9uZW50IGJ5IHJlZiB0byBhbiBvd25lciBjb21wb25lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7UmVhY3RDb21wb25lbnR9IGNvbXBvbmVudCBDb21wb25lbnQgdG8gcmVmZXJlbmNlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcmVmIE5hbWUgYnkgd2hpY2ggdG8gcmVmZXIgdG8gdGhlIGNvbXBvbmVudC5cbiAgICogQHBhcmFtIHtSZWFjdE93bmVyfSBvd25lciBDb21wb25lbnQgb24gd2hpY2ggdG8gcmVjb3JkIHRoZSByZWYuXG4gICAqIEBmaW5hbFxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGFkZENvbXBvbmVudEFzUmVmVG86IGZ1bmN0aW9uIChjb21wb25lbnQsIHJlZiwgb3duZXIpIHtcbiAgICAhaXNWYWxpZE93bmVyKG93bmVyKSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICdhZGRDb21wb25lbnRBc1JlZlRvKC4uLik6IE9ubHkgYSBSZWFjdE93bmVyIGNhbiBoYXZlIHJlZnMuIFlvdSBtaWdodCBiZSBhZGRpbmcgYSByZWYgdG8gYSBjb21wb25lbnQgdGhhdCB3YXMgbm90IGNyZWF0ZWQgaW5zaWRlIGEgY29tcG9uZW50XFwncyBgcmVuZGVyYCBtZXRob2QsIG9yIHlvdSBoYXZlIG11bHRpcGxlIGNvcGllcyBvZiBSZWFjdCBsb2FkZWQgKGRldGFpbHM6IGh0dHBzOi8vZmIubWUvcmVhY3QtcmVmcy1tdXN0LWhhdmUtb3duZXIpLicpIDogX3Byb2RJbnZhcmlhbnQoJzExOScpIDogdm9pZCAwO1xuICAgIG93bmVyLmF0dGFjaFJlZihyZWYsIGNvbXBvbmVudCk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgYSBjb21wb25lbnQgYnkgcmVmIGZyb20gYW4gb3duZXIgY29tcG9uZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0Q29tcG9uZW50fSBjb21wb25lbnQgQ29tcG9uZW50IHRvIGRlcmVmZXJlbmNlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcmVmIE5hbWUgb2YgdGhlIHJlZiB0byByZW1vdmUuXG4gICAqIEBwYXJhbSB7UmVhY3RPd25lcn0gb3duZXIgQ29tcG9uZW50IG9uIHdoaWNoIHRoZSByZWYgaXMgcmVjb3JkZWQuXG4gICAqIEBmaW5hbFxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHJlbW92ZUNvbXBvbmVudEFzUmVmRnJvbTogZnVuY3Rpb24gKGNvbXBvbmVudCwgcmVmLCBvd25lcikge1xuICAgICFpc1ZhbGlkT3duZXIob3duZXIpID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IGludmFyaWFudChmYWxzZSwgJ3JlbW92ZUNvbXBvbmVudEFzUmVmRnJvbSguLi4pOiBPbmx5IGEgUmVhY3RPd25lciBjYW4gaGF2ZSByZWZzLiBZb3UgbWlnaHQgYmUgcmVtb3ZpbmcgYSByZWYgdG8gYSBjb21wb25lbnQgdGhhdCB3YXMgbm90IGNyZWF0ZWQgaW5zaWRlIGEgY29tcG9uZW50XFwncyBgcmVuZGVyYCBtZXRob2QsIG9yIHlvdSBoYXZlIG11bHRpcGxlIGNvcGllcyBvZiBSZWFjdCBsb2FkZWQgKGRldGFpbHM6IGh0dHBzOi8vZmIubWUvcmVhY3QtcmVmcy1tdXN0LWhhdmUtb3duZXIpLicpIDogX3Byb2RJbnZhcmlhbnQoJzEyMCcpIDogdm9pZCAwO1xuICAgIHZhciBvd25lclB1YmxpY0luc3RhbmNlID0gb3duZXIuZ2V0UHVibGljSW5zdGFuY2UoKTtcbiAgICAvLyBDaGVjayB0aGF0IGBjb21wb25lbnRgJ3Mgb3duZXIgaXMgc3RpbGwgYWxpdmUgYW5kIHRoYXQgYGNvbXBvbmVudGAgaXMgc3RpbGwgdGhlIGN1cnJlbnQgcmVmXG4gICAgLy8gYmVjYXVzZSB3ZSBkbyBub3Qgd2FudCB0byBkZXRhY2ggdGhlIHJlZiBpZiBhbm90aGVyIGNvbXBvbmVudCBzdG9sZSBpdC5cbiAgICBpZiAob3duZXJQdWJsaWNJbnN0YW5jZSAmJiBvd25lclB1YmxpY0luc3RhbmNlLnJlZnNbcmVmXSA9PT0gY29tcG9uZW50LmdldFB1YmxpY0luc3RhbmNlKCkpIHtcbiAgICAgIG93bmVyLmRldGFjaFJlZihyZWYpO1xuICAgIH1cbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdE93bmVyO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QtZG9tL2xpYi9SZWFjdE93bmVyLmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUmVhY3RQcm9wVHlwZUxvY2F0aW9uTmFtZXMgPSB7fTtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgUmVhY3RQcm9wVHlwZUxvY2F0aW9uTmFtZXMgPSB7XG4gICAgcHJvcDogJ3Byb3AnLFxuICAgIGNvbnRleHQ6ICdjb250ZXh0JyxcbiAgICBjaGlsZENvbnRleHQ6ICdjaGlsZCBjb250ZXh0J1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0UHJvcFR5cGVMb2NhdGlvbk5hbWVzO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QtZG9tL2xpYi9SZWFjdFByb3BUeXBlTG9jYXRpb25OYW1lcy5qcyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBfYXNzaWduID0gcmVxdWlyZSgnb2JqZWN0LWFzc2lnbicpO1xuXG52YXIgQ2FsbGJhY2tRdWV1ZSA9IHJlcXVpcmUoJy4vQ2FsbGJhY2tRdWV1ZScpO1xudmFyIFBvb2xlZENsYXNzID0gcmVxdWlyZSgnLi9Qb29sZWRDbGFzcycpO1xudmFyIFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJy4vUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyJyk7XG52YXIgUmVhY3RJbnB1dFNlbGVjdGlvbiA9IHJlcXVpcmUoJy4vUmVhY3RJbnB1dFNlbGVjdGlvbicpO1xudmFyIFJlYWN0SW5zdHJ1bWVudGF0aW9uID0gcmVxdWlyZSgnLi9SZWFjdEluc3RydW1lbnRhdGlvbicpO1xudmFyIFRyYW5zYWN0aW9uID0gcmVxdWlyZSgnLi9UcmFuc2FjdGlvbicpO1xudmFyIFJlYWN0VXBkYXRlUXVldWUgPSByZXF1aXJlKCcuL1JlYWN0VXBkYXRlUXVldWUnKTtcblxuLyoqXG4gKiBFbnN1cmVzIHRoYXQsIHdoZW4gcG9zc2libGUsIHRoZSBzZWxlY3Rpb24gcmFuZ2UgKGN1cnJlbnRseSBzZWxlY3RlZCB0ZXh0XG4gKiBpbnB1dCkgaXMgbm90IGRpc3R1cmJlZCBieSBwZXJmb3JtaW5nIHRoZSB0cmFuc2FjdGlvbi5cbiAqL1xudmFyIFNFTEVDVElPTl9SRVNUT1JBVElPTiA9IHtcbiAgLyoqXG4gICAqIEByZXR1cm4ge1NlbGVjdGlvbn0gU2VsZWN0aW9uIGluZm9ybWF0aW9uLlxuICAgKi9cbiAgaW5pdGlhbGl6ZTogUmVhY3RJbnB1dFNlbGVjdGlvbi5nZXRTZWxlY3Rpb25JbmZvcm1hdGlvbixcbiAgLyoqXG4gICAqIEBwYXJhbSB7U2VsZWN0aW9ufSBzZWwgU2VsZWN0aW9uIGluZm9ybWF0aW9uIHJldHVybmVkIGZyb20gYGluaXRpYWxpemVgLlxuICAgKi9cbiAgY2xvc2U6IFJlYWN0SW5wdXRTZWxlY3Rpb24ucmVzdG9yZVNlbGVjdGlvblxufTtcblxuLyoqXG4gKiBTdXBwcmVzc2VzIGV2ZW50cyAoYmx1ci9mb2N1cykgdGhhdCBjb3VsZCBiZSBpbmFkdmVydGVudGx5IGRpc3BhdGNoZWQgZHVlIHRvXG4gKiBoaWdoIGxldmVsIERPTSBtYW5pcHVsYXRpb25zIChsaWtlIHRlbXBvcmFyaWx5IHJlbW92aW5nIGEgdGV4dCBpbnB1dCBmcm9tIHRoZVxuICogRE9NKS5cbiAqL1xudmFyIEVWRU5UX1NVUFBSRVNTSU9OID0ge1xuICAvKipcbiAgICogQHJldHVybiB7Ym9vbGVhbn0gVGhlIGVuYWJsZWQgc3RhdHVzIG9mIGBSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXJgIGJlZm9yZVxuICAgKiB0aGUgcmVjb25jaWxpYXRpb24uXG4gICAqL1xuICBpbml0aWFsaXplOiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGN1cnJlbnRseUVuYWJsZWQgPSBSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXIuaXNFbmFibGVkKCk7XG4gICAgUmVhY3RCcm93c2VyRXZlbnRFbWl0dGVyLnNldEVuYWJsZWQoZmFsc2UpO1xuICAgIHJldHVybiBjdXJyZW50bHlFbmFibGVkO1xuICB9LFxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHByZXZpb3VzbHlFbmFibGVkIEVuYWJsZWQgc3RhdHVzIG9mXG4gICAqICAgYFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlcmAgYmVmb3JlIHRoZSByZWNvbmNpbGlhdGlvbiBvY2N1cnJlZC4gYGNsb3NlYFxuICAgKiAgIHJlc3RvcmVzIHRoZSBwcmV2aW91cyB2YWx1ZS5cbiAgICovXG4gIGNsb3NlOiBmdW5jdGlvbiAocHJldmlvdXNseUVuYWJsZWQpIHtcbiAgICBSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXIuc2V0RW5hYmxlZChwcmV2aW91c2x5RW5hYmxlZCk7XG4gIH1cbn07XG5cbi8qKlxuICogUHJvdmlkZXMgYSBxdWV1ZSBmb3IgY29sbGVjdGluZyBgY29tcG9uZW50RGlkTW91bnRgIGFuZFxuICogYGNvbXBvbmVudERpZFVwZGF0ZWAgY2FsbGJhY2tzIGR1cmluZyB0aGUgdHJhbnNhY3Rpb24uXG4gKi9cbnZhciBPTl9ET01fUkVBRFlfUVVFVUVJTkcgPSB7XG4gIC8qKlxuICAgKiBJbml0aWFsaXplcyB0aGUgaW50ZXJuYWwgYG9uRE9NUmVhZHlgIHF1ZXVlLlxuICAgKi9cbiAgaW5pdGlhbGl6ZTogZnVuY3Rpb24gKCkge1xuICAgIHRoaXMucmVhY3RNb3VudFJlYWR5LnJlc2V0KCk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEFmdGVyIERPTSBpcyBmbHVzaGVkLCBpbnZva2UgYWxsIHJlZ2lzdGVyZWQgYG9uRE9NUmVhZHlgIGNhbGxiYWNrcy5cbiAgICovXG4gIGNsb3NlOiBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5yZWFjdE1vdW50UmVhZHkubm90aWZ5QWxsKCk7XG4gIH1cbn07XG5cbi8qKlxuICogRXhlY3V0ZWQgd2l0aGluIHRoZSBzY29wZSBvZiB0aGUgYFRyYW5zYWN0aW9uYCBpbnN0YW5jZS4gQ29uc2lkZXIgdGhlc2UgYXNcbiAqIGJlaW5nIG1lbWJlciBtZXRob2RzLCBidXQgd2l0aCBhbiBpbXBsaWVkIG9yZGVyaW5nIHdoaWxlIGJlaW5nIGlzb2xhdGVkIGZyb21cbiAqIGVhY2ggb3RoZXIuXG4gKi9cbnZhciBUUkFOU0FDVElPTl9XUkFQUEVSUyA9IFtTRUxFQ1RJT05fUkVTVE9SQVRJT04sIEVWRU5UX1NVUFBSRVNTSU9OLCBPTl9ET01fUkVBRFlfUVVFVUVJTkddO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBUUkFOU0FDVElPTl9XUkFQUEVSUy5wdXNoKHtcbiAgICBpbml0aWFsaXplOiBSZWFjdEluc3RydW1lbnRhdGlvbi5kZWJ1Z1Rvb2wub25CZWdpbkZsdXNoLFxuICAgIGNsb3NlOiBSZWFjdEluc3RydW1lbnRhdGlvbi5kZWJ1Z1Rvb2wub25FbmRGbHVzaFxuICB9KTtcbn1cblxuLyoqXG4gKiBDdXJyZW50bHk6XG4gKiAtIFRoZSBvcmRlciB0aGF0IHRoZXNlIGFyZSBsaXN0ZWQgaW4gdGhlIHRyYW5zYWN0aW9uIGlzIGNyaXRpY2FsOlxuICogLSBTdXBwcmVzc2VzIGV2ZW50cy5cbiAqIC0gUmVzdG9yZXMgc2VsZWN0aW9uIHJhbmdlLlxuICpcbiAqIEZ1dHVyZTpcbiAqIC0gUmVzdG9yZSBkb2N1bWVudC9vdmVyZmxvdyBzY3JvbGwgcG9zaXRpb25zIHRoYXQgd2VyZSB1bmludGVudGlvbmFsbHlcbiAqICAgbW9kaWZpZWQgdmlhIERPTSBpbnNlcnRpb25zIGFib3ZlIHRoZSB0b3Agdmlld3BvcnQgYm91bmRhcnkuXG4gKiAtIEltcGxlbWVudC9pbnRlZ3JhdGUgd2l0aCBjdXN0b21pemVkIGNvbnN0cmFpbnQgYmFzZWQgbGF5b3V0IHN5c3RlbSBhbmQga2VlcFxuICogICB0cmFjayBvZiB3aGljaCBkaW1lbnNpb25zIG11c3QgYmUgcmVtZWFzdXJlZC5cbiAqXG4gKiBAY2xhc3MgUmVhY3RSZWNvbmNpbGVUcmFuc2FjdGlvblxuICovXG5mdW5jdGlvbiBSZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9uKHVzZUNyZWF0ZUVsZW1lbnQpIHtcbiAgdGhpcy5yZWluaXRpYWxpemVUcmFuc2FjdGlvbigpO1xuICAvLyBPbmx5IHNlcnZlci1zaWRlIHJlbmRlcmluZyByZWFsbHkgbmVlZHMgdGhpcyBvcHRpb24gKHNlZVxuICAvLyBgUmVhY3RTZXJ2ZXJSZW5kZXJpbmdgKSwgYnV0IHNlcnZlci1zaWRlIHVzZXNcbiAgLy8gYFJlYWN0U2VydmVyUmVuZGVyaW5nVHJhbnNhY3Rpb25gIGluc3RlYWQuIFRoaXMgb3B0aW9uIGlzIGhlcmUgc28gdGhhdCBpdCdzXG4gIC8vIGFjY2Vzc2libGUgYW5kIGRlZmF1bHRzIHRvIGZhbHNlIHdoZW4gYFJlYWN0RE9NQ29tcG9uZW50YCBhbmRcbiAgLy8gYFJlYWN0RE9NVGV4dENvbXBvbmVudGAgY2hlY2tzIGl0IGluIGBtb3VudENvbXBvbmVudGAuYFxuICB0aGlzLnJlbmRlclRvU3RhdGljTWFya3VwID0gZmFsc2U7XG4gIHRoaXMucmVhY3RNb3VudFJlYWR5ID0gQ2FsbGJhY2tRdWV1ZS5nZXRQb29sZWQobnVsbCk7XG4gIHRoaXMudXNlQ3JlYXRlRWxlbWVudCA9IHVzZUNyZWF0ZUVsZW1lbnQ7XG59XG5cbnZhciBNaXhpbiA9IHtcbiAgLyoqXG4gICAqIEBzZWUgVHJhbnNhY3Rpb25cbiAgICogQGFic3RyYWN0XG4gICAqIEBmaW5hbFxuICAgKiBAcmV0dXJuIHthcnJheTxvYmplY3Q+fSBMaXN0IG9mIG9wZXJhdGlvbiB3cmFwIHByb2NlZHVyZXMuXG4gICAqICAgVE9ETzogY29udmVydCB0byBhcnJheTxUcmFuc2FjdGlvbldyYXBwZXI+XG4gICAqL1xuICBnZXRUcmFuc2FjdGlvbldyYXBwZXJzOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIFRSQU5TQUNUSU9OX1dSQVBQRVJTO1xuICB9LFxuXG4gIC8qKlxuICAgKiBAcmV0dXJuIHtvYmplY3R9IFRoZSBxdWV1ZSB0byBjb2xsZWN0IGBvbkRPTVJlYWR5YCBjYWxsYmFja3Mgd2l0aC5cbiAgICovXG4gIGdldFJlYWN0TW91bnRSZWFkeTogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLnJlYWN0TW91bnRSZWFkeTtcbiAgfSxcblxuICAvKipcbiAgICogQHJldHVybiB7b2JqZWN0fSBUaGUgcXVldWUgdG8gY29sbGVjdCBSZWFjdCBhc3luYyBldmVudHMuXG4gICAqL1xuICBnZXRVcGRhdGVRdWV1ZTogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBSZWFjdFVwZGF0ZVF1ZXVlO1xuICB9LFxuXG4gIC8qKlxuICAgKiBTYXZlIGN1cnJlbnQgdHJhbnNhY3Rpb24gc3RhdGUgLS0gaWYgdGhlIHJldHVybiB2YWx1ZSBmcm9tIHRoaXMgbWV0aG9kIGlzXG4gICAqIHBhc3NlZCB0byBgcm9sbGJhY2tgLCB0aGUgdHJhbnNhY3Rpb24gd2lsbCBiZSByZXNldCB0byB0aGF0IHN0YXRlLlxuICAgKi9cbiAgY2hlY2twb2ludDogZnVuY3Rpb24gKCkge1xuICAgIC8vIHJlYWN0TW91bnRSZWFkeSBpcyB0aGUgb3VyIG9ubHkgc3RhdGVmdWwgd3JhcHBlclxuICAgIHJldHVybiB0aGlzLnJlYWN0TW91bnRSZWFkeS5jaGVja3BvaW50KCk7XG4gIH0sXG5cbiAgcm9sbGJhY2s6IGZ1bmN0aW9uIChjaGVja3BvaW50KSB7XG4gICAgdGhpcy5yZWFjdE1vdW50UmVhZHkucm9sbGJhY2soY2hlY2twb2ludCk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIGBQb29sZWRDbGFzc2AgbG9va3MgZm9yIHRoaXMsIGFuZCB3aWxsIGludm9rZSB0aGlzIGJlZm9yZSBhbGxvd2luZyB0aGlzXG4gICAqIGluc3RhbmNlIHRvIGJlIHJldXNlZC5cbiAgICovXG4gIGRlc3RydWN0b3I6IGZ1bmN0aW9uICgpIHtcbiAgICBDYWxsYmFja1F1ZXVlLnJlbGVhc2UodGhpcy5yZWFjdE1vdW50UmVhZHkpO1xuICAgIHRoaXMucmVhY3RNb3VudFJlYWR5ID0gbnVsbDtcbiAgfVxufTtcblxuX2Fzc2lnbihSZWFjdFJlY29uY2lsZVRyYW5zYWN0aW9uLnByb3RvdHlwZSwgVHJhbnNhY3Rpb24sIE1peGluKTtcblxuUG9vbGVkQ2xhc3MuYWRkUG9vbGluZ1RvKFJlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb24pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb247XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1kb20vbGliL1JlYWN0UmVjb25jaWxlVHJhbnNhY3Rpb24uanMiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBSZWFjdE93bmVyID0gcmVxdWlyZSgnLi9SZWFjdE93bmVyJyk7XG5cbnZhciBSZWFjdFJlZiA9IHt9O1xuXG5mdW5jdGlvbiBhdHRhY2hSZWYocmVmLCBjb21wb25lbnQsIG93bmVyKSB7XG4gIGlmICh0eXBlb2YgcmVmID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmVmKGNvbXBvbmVudC5nZXRQdWJsaWNJbnN0YW5jZSgpKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBMZWdhY3kgcmVmXG4gICAgUmVhY3RPd25lci5hZGRDb21wb25lbnRBc1JlZlRvKGNvbXBvbmVudCwgcmVmLCBvd25lcik7XG4gIH1cbn1cblxuZnVuY3Rpb24gZGV0YWNoUmVmKHJlZiwgY29tcG9uZW50LCBvd25lcikge1xuICBpZiAodHlwZW9mIHJlZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJlZihudWxsKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBMZWdhY3kgcmVmXG4gICAgUmVhY3RPd25lci5yZW1vdmVDb21wb25lbnRBc1JlZkZyb20oY29tcG9uZW50LCByZWYsIG93bmVyKTtcbiAgfVxufVxuXG5SZWFjdFJlZi5hdHRhY2hSZWZzID0gZnVuY3Rpb24gKGluc3RhbmNlLCBlbGVtZW50KSB7XG4gIGlmIChlbGVtZW50ID09PSBudWxsIHx8IHR5cGVvZiBlbGVtZW50ICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybjtcbiAgfVxuICB2YXIgcmVmID0gZWxlbWVudC5yZWY7XG4gIGlmIChyZWYgIT0gbnVsbCkge1xuICAgIGF0dGFjaFJlZihyZWYsIGluc3RhbmNlLCBlbGVtZW50Ll9vd25lcik7XG4gIH1cbn07XG5cblJlYWN0UmVmLnNob3VsZFVwZGF0ZVJlZnMgPSBmdW5jdGlvbiAocHJldkVsZW1lbnQsIG5leHRFbGVtZW50KSB7XG4gIC8vIElmIGVpdGhlciB0aGUgb3duZXIgb3IgYSBgcmVmYCBoYXMgY2hhbmdlZCwgbWFrZSBzdXJlIHRoZSBuZXdlc3Qgb3duZXJcbiAgLy8gaGFzIHN0b3JlZCBhIHJlZmVyZW5jZSB0byBgdGhpc2AsIGFuZCB0aGUgcHJldmlvdXMgb3duZXIgKGlmIGRpZmZlcmVudClcbiAgLy8gaGFzIGZvcmdvdHRlbiB0aGUgcmVmZXJlbmNlIHRvIGB0aGlzYC4gV2UgdXNlIHRoZSBlbGVtZW50IGluc3RlYWRcbiAgLy8gb2YgdGhlIHB1YmxpYyB0aGlzLnByb3BzIGJlY2F1c2UgdGhlIHBvc3QgcHJvY2Vzc2luZyBjYW5ub3QgZGV0ZXJtaW5lXG4gIC8vIGEgcmVmLiBUaGUgcmVmIGNvbmNlcHR1YWxseSBsaXZlcyBvbiB0aGUgZWxlbWVudC5cblxuICAvLyBUT0RPOiBTaG91bGQgdGhpcyBldmVuIGJlIHBvc3NpYmxlPyBUaGUgb3duZXIgY2Fubm90IGNoYW5nZSBiZWNhdXNlXG4gIC8vIGl0J3MgZm9yYmlkZGVuIGJ5IHNob3VsZFVwZGF0ZVJlYWN0Q29tcG9uZW50LiBUaGUgcmVmIGNhbiBjaGFuZ2VcbiAgLy8gaWYgeW91IHN3YXAgdGhlIGtleXMgb2YgYnV0IG5vdCB0aGUgcmVmcy4gUmVjb25zaWRlciB3aGVyZSB0aGlzIGNoZWNrXG4gIC8vIGlzIG1hZGUuIEl0IHByb2JhYmx5IGJlbG9uZ3Mgd2hlcmUgdGhlIGtleSBjaGVja2luZyBhbmRcbiAgLy8gaW5zdGFudGlhdGVSZWFjdENvbXBvbmVudCBpcyBkb25lLlxuXG4gIHZhciBwcmV2UmVmID0gbnVsbDtcbiAgdmFyIHByZXZPd25lciA9IG51bGw7XG4gIGlmIChwcmV2RWxlbWVudCAhPT0gbnVsbCAmJiB0eXBlb2YgcHJldkVsZW1lbnQgPT09ICdvYmplY3QnKSB7XG4gICAgcHJldlJlZiA9IHByZXZFbGVtZW50LnJlZjtcbiAgICBwcmV2T3duZXIgPSBwcmV2RWxlbWVudC5fb3duZXI7XG4gIH1cblxuICB2YXIgbmV4dFJlZiA9IG51bGw7XG4gIHZhciBuZXh0T3duZXIgPSBudWxsO1xuICBpZiAobmV4dEVsZW1lbnQgIT09IG51bGwgJiYgdHlwZW9mIG5leHRFbGVtZW50ID09PSAnb2JqZWN0Jykge1xuICAgIG5leHRSZWYgPSBuZXh0RWxlbWVudC5yZWY7XG4gICAgbmV4dE93bmVyID0gbmV4dEVsZW1lbnQuX293bmVyO1xuICB9XG5cbiAgcmV0dXJuIHByZXZSZWYgIT09IG5leHRSZWYgfHxcbiAgLy8gSWYgb3duZXIgY2hhbmdlcyBidXQgd2UgaGF2ZSBhbiB1bmNoYW5nZWQgZnVuY3Rpb24gcmVmLCBkb24ndCB1cGRhdGUgcmVmc1xuICB0eXBlb2YgbmV4dFJlZiA9PT0gJ3N0cmluZycgJiYgbmV4dE93bmVyICE9PSBwcmV2T3duZXI7XG59O1xuXG5SZWFjdFJlZi5kZXRhY2hSZWZzID0gZnVuY3Rpb24gKGluc3RhbmNlLCBlbGVtZW50KSB7XG4gIGlmIChlbGVtZW50ID09PSBudWxsIHx8IHR5cGVvZiBlbGVtZW50ICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybjtcbiAgfVxuICB2YXIgcmVmID0gZWxlbWVudC5yZWY7XG4gIGlmIChyZWYgIT0gbnVsbCkge1xuICAgIGRldGFjaFJlZihyZWYsIGluc3RhbmNlLCBlbGVtZW50Ll9vd25lcik7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RSZWY7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1kb20vbGliL1JlYWN0UmVmLmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxNC1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIF9hc3NpZ24gPSByZXF1aXJlKCdvYmplY3QtYXNzaWduJyk7XG5cbnZhciBQb29sZWRDbGFzcyA9IHJlcXVpcmUoJy4vUG9vbGVkQ2xhc3MnKTtcbnZhciBUcmFuc2FjdGlvbiA9IHJlcXVpcmUoJy4vVHJhbnNhY3Rpb24nKTtcbnZhciBSZWFjdEluc3RydW1lbnRhdGlvbiA9IHJlcXVpcmUoJy4vUmVhY3RJbnN0cnVtZW50YXRpb24nKTtcbnZhciBSZWFjdFNlcnZlclVwZGF0ZVF1ZXVlID0gcmVxdWlyZSgnLi9SZWFjdFNlcnZlclVwZGF0ZVF1ZXVlJyk7XG5cbi8qKlxuICogRXhlY3V0ZWQgd2l0aGluIHRoZSBzY29wZSBvZiB0aGUgYFRyYW5zYWN0aW9uYCBpbnN0YW5jZS4gQ29uc2lkZXIgdGhlc2UgYXNcbiAqIGJlaW5nIG1lbWJlciBtZXRob2RzLCBidXQgd2l0aCBhbiBpbXBsaWVkIG9yZGVyaW5nIHdoaWxlIGJlaW5nIGlzb2xhdGVkIGZyb21cbiAqIGVhY2ggb3RoZXIuXG4gKi9cbnZhciBUUkFOU0FDVElPTl9XUkFQUEVSUyA9IFtdO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBUUkFOU0FDVElPTl9XUkFQUEVSUy5wdXNoKHtcbiAgICBpbml0aWFsaXplOiBSZWFjdEluc3RydW1lbnRhdGlvbi5kZWJ1Z1Rvb2wub25CZWdpbkZsdXNoLFxuICAgIGNsb3NlOiBSZWFjdEluc3RydW1lbnRhdGlvbi5kZWJ1Z1Rvb2wub25FbmRGbHVzaFxuICB9KTtcbn1cblxudmFyIG5vb3BDYWxsYmFja1F1ZXVlID0ge1xuICBlbnF1ZXVlOiBmdW5jdGlvbiAoKSB7fVxufTtcblxuLyoqXG4gKiBAY2xhc3MgUmVhY3RTZXJ2ZXJSZW5kZXJpbmdUcmFuc2FjdGlvblxuICogQHBhcmFtIHtib29sZWFufSByZW5kZXJUb1N0YXRpY01hcmt1cFxuICovXG5mdW5jdGlvbiBSZWFjdFNlcnZlclJlbmRlcmluZ1RyYW5zYWN0aW9uKHJlbmRlclRvU3RhdGljTWFya3VwKSB7XG4gIHRoaXMucmVpbml0aWFsaXplVHJhbnNhY3Rpb24oKTtcbiAgdGhpcy5yZW5kZXJUb1N0YXRpY01hcmt1cCA9IHJlbmRlclRvU3RhdGljTWFya3VwO1xuICB0aGlzLnVzZUNyZWF0ZUVsZW1lbnQgPSBmYWxzZTtcbiAgdGhpcy51cGRhdGVRdWV1ZSA9IG5ldyBSZWFjdFNlcnZlclVwZGF0ZVF1ZXVlKHRoaXMpO1xufVxuXG52YXIgTWl4aW4gPSB7XG4gIC8qKlxuICAgKiBAc2VlIFRyYW5zYWN0aW9uXG4gICAqIEBhYnN0cmFjdFxuICAgKiBAZmluYWxcbiAgICogQHJldHVybiB7YXJyYXl9IEVtcHR5IGxpc3Qgb2Ygb3BlcmF0aW9uIHdyYXAgcHJvY2VkdXJlcy5cbiAgICovXG4gIGdldFRyYW5zYWN0aW9uV3JhcHBlcnM6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gVFJBTlNBQ1RJT05fV1JBUFBFUlM7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEByZXR1cm4ge29iamVjdH0gVGhlIHF1ZXVlIHRvIGNvbGxlY3QgYG9uRE9NUmVhZHlgIGNhbGxiYWNrcyB3aXRoLlxuICAgKi9cbiAgZ2V0UmVhY3RNb3VudFJlYWR5OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIG5vb3BDYWxsYmFja1F1ZXVlO1xuICB9LFxuXG4gIC8qKlxuICAgKiBAcmV0dXJuIHtvYmplY3R9IFRoZSBxdWV1ZSB0byBjb2xsZWN0IFJlYWN0IGFzeW5jIGV2ZW50cy5cbiAgICovXG4gIGdldFVwZGF0ZVF1ZXVlOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMudXBkYXRlUXVldWU7XG4gIH0sXG5cbiAgLyoqXG4gICAqIGBQb29sZWRDbGFzc2AgbG9va3MgZm9yIHRoaXMsIGFuZCB3aWxsIGludm9rZSB0aGlzIGJlZm9yZSBhbGxvd2luZyB0aGlzXG4gICAqIGluc3RhbmNlIHRvIGJlIHJldXNlZC5cbiAgICovXG4gIGRlc3RydWN0b3I6IGZ1bmN0aW9uICgpIHt9LFxuXG4gIGNoZWNrcG9pbnQ6IGZ1bmN0aW9uICgpIHt9LFxuXG4gIHJvbGxiYWNrOiBmdW5jdGlvbiAoKSB7fVxufTtcblxuX2Fzc2lnbihSZWFjdFNlcnZlclJlbmRlcmluZ1RyYW5zYWN0aW9uLnByb3RvdHlwZSwgVHJhbnNhY3Rpb24sIE1peGluKTtcblxuUG9vbGVkQ2xhc3MuYWRkUG9vbGluZ1RvKFJlYWN0U2VydmVyUmVuZGVyaW5nVHJhbnNhY3Rpb24pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0U2VydmVyUmVuZGVyaW5nVHJhbnNhY3Rpb247XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1kb20vbGliL1JlYWN0U2VydmVyUmVuZGVyaW5nVHJhbnNhY3Rpb24uanMiLCIvKipcbiAqIENvcHlyaWdodCAyMDE1LXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbnZhciBSZWFjdFVwZGF0ZVF1ZXVlID0gcmVxdWlyZSgnLi9SZWFjdFVwZGF0ZVF1ZXVlJyk7XG5cbnZhciB3YXJuaW5nID0gcmVxdWlyZSgnZmJqcy9saWIvd2FybmluZycpO1xuXG5mdW5jdGlvbiB3YXJuTm9vcChwdWJsaWNJbnN0YW5jZSwgY2FsbGVyTmFtZSkge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIHZhciBjb25zdHJ1Y3RvciA9IHB1YmxpY0luc3RhbmNlLmNvbnN0cnVjdG9yO1xuICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKGZhbHNlLCAnJXMoLi4uKTogQ2FuIG9ubHkgdXBkYXRlIGEgbW91bnRpbmcgY29tcG9uZW50LiAnICsgJ1RoaXMgdXN1YWxseSBtZWFucyB5b3UgY2FsbGVkICVzKCkgb3V0c2lkZSBjb21wb25lbnRXaWxsTW91bnQoKSBvbiB0aGUgc2VydmVyLiAnICsgJ1RoaXMgaXMgYSBuby1vcC4gUGxlYXNlIGNoZWNrIHRoZSBjb2RlIGZvciB0aGUgJXMgY29tcG9uZW50LicsIGNhbGxlck5hbWUsIGNhbGxlck5hbWUsIGNvbnN0cnVjdG9yICYmIChjb25zdHJ1Y3Rvci5kaXNwbGF5TmFtZSB8fCBjb25zdHJ1Y3Rvci5uYW1lKSB8fCAnUmVhY3RDbGFzcycpIDogdm9pZCAwO1xuICB9XG59XG5cbi8qKlxuICogVGhpcyBpcyB0aGUgdXBkYXRlIHF1ZXVlIHVzZWQgZm9yIHNlcnZlciByZW5kZXJpbmcuXG4gKiBJdCBkZWxlZ2F0ZXMgdG8gUmVhY3RVcGRhdGVRdWV1ZSB3aGlsZSBzZXJ2ZXIgcmVuZGVyaW5nIGlzIGluIHByb2dyZXNzIGFuZFxuICogc3dpdGNoZXMgdG8gUmVhY3ROb29wVXBkYXRlUXVldWUgYWZ0ZXIgdGhlIHRyYW5zYWN0aW9uIGhhcyBjb21wbGV0ZWQuXG4gKiBAY2xhc3MgUmVhY3RTZXJ2ZXJVcGRhdGVRdWV1ZVxuICogQHBhcmFtIHtUcmFuc2FjdGlvbn0gdHJhbnNhY3Rpb25cbiAqL1xuXG52YXIgUmVhY3RTZXJ2ZXJVcGRhdGVRdWV1ZSA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gUmVhY3RTZXJ2ZXJVcGRhdGVRdWV1ZSh0cmFuc2FjdGlvbikge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBSZWFjdFNlcnZlclVwZGF0ZVF1ZXVlKTtcblxuICAgIHRoaXMudHJhbnNhY3Rpb24gPSB0cmFuc2FjdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3Mgd2hldGhlciBvciBub3QgdGhpcyBjb21wb3NpdGUgY29tcG9uZW50IGlzIG1vdW50ZWQuXG4gICAqIEBwYXJhbSB7UmVhY3RDbGFzc30gcHVibGljSW5zdGFuY2UgVGhlIGluc3RhbmNlIHdlIHdhbnQgdG8gdGVzdC5cbiAgICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiBtb3VudGVkLCBmYWxzZSBvdGhlcndpc2UuXG4gICAqIEBwcm90ZWN0ZWRcbiAgICogQGZpbmFsXG4gICAqL1xuXG5cbiAgUmVhY3RTZXJ2ZXJVcGRhdGVRdWV1ZS5wcm90b3R5cGUuaXNNb3VudGVkID0gZnVuY3Rpb24gaXNNb3VudGVkKHB1YmxpY0luc3RhbmNlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9O1xuXG4gIC8qKlxuICAgKiBFbnF1ZXVlIGEgY2FsbGJhY2sgdGhhdCB3aWxsIGJlIGV4ZWN1dGVkIGFmdGVyIGFsbCB0aGUgcGVuZGluZyB1cGRhdGVzXG4gICAqIGhhdmUgcHJvY2Vzc2VkLlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0Q2xhc3N9IHB1YmxpY0luc3RhbmNlIFRoZSBpbnN0YW5jZSB0byB1c2UgYXMgYHRoaXNgIGNvbnRleHQuXG4gICAqIEBwYXJhbSB7P2Z1bmN0aW9ufSBjYWxsYmFjayBDYWxsZWQgYWZ0ZXIgc3RhdGUgaXMgdXBkYXRlZC5cbiAgICogQGludGVybmFsXG4gICAqL1xuXG5cbiAgUmVhY3RTZXJ2ZXJVcGRhdGVRdWV1ZS5wcm90b3R5cGUuZW5xdWV1ZUNhbGxiYWNrID0gZnVuY3Rpb24gZW5xdWV1ZUNhbGxiYWNrKHB1YmxpY0luc3RhbmNlLCBjYWxsYmFjaywgY2FsbGVyTmFtZSkge1xuICAgIGlmICh0aGlzLnRyYW5zYWN0aW9uLmlzSW5UcmFuc2FjdGlvbigpKSB7XG4gICAgICBSZWFjdFVwZGF0ZVF1ZXVlLmVucXVldWVDYWxsYmFjayhwdWJsaWNJbnN0YW5jZSwgY2FsbGJhY2ssIGNhbGxlck5hbWUpO1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogRm9yY2VzIGFuIHVwZGF0ZS4gVGhpcyBzaG91bGQgb25seSBiZSBpbnZva2VkIHdoZW4gaXQgaXMga25vd24gd2l0aFxuICAgKiBjZXJ0YWludHkgdGhhdCB3ZSBhcmUgKipub3QqKiBpbiBhIERPTSB0cmFuc2FjdGlvbi5cbiAgICpcbiAgICogWW91IG1heSB3YW50IHRvIGNhbGwgdGhpcyB3aGVuIHlvdSBrbm93IHRoYXQgc29tZSBkZWVwZXIgYXNwZWN0IG9mIHRoZVxuICAgKiBjb21wb25lbnQncyBzdGF0ZSBoYXMgY2hhbmdlZCBidXQgYHNldFN0YXRlYCB3YXMgbm90IGNhbGxlZC5cbiAgICpcbiAgICogVGhpcyB3aWxsIG5vdCBpbnZva2UgYHNob3VsZENvbXBvbmVudFVwZGF0ZWAsIGJ1dCBpdCB3aWxsIGludm9rZVxuICAgKiBgY29tcG9uZW50V2lsbFVwZGF0ZWAgYW5kIGBjb21wb25lbnREaWRVcGRhdGVgLlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0Q2xhc3N9IHB1YmxpY0luc3RhbmNlIFRoZSBpbnN0YW5jZSB0aGF0IHNob3VsZCByZXJlbmRlci5cbiAgICogQGludGVybmFsXG4gICAqL1xuXG5cbiAgUmVhY3RTZXJ2ZXJVcGRhdGVRdWV1ZS5wcm90b3R5cGUuZW5xdWV1ZUZvcmNlVXBkYXRlID0gZnVuY3Rpb24gZW5xdWV1ZUZvcmNlVXBkYXRlKHB1YmxpY0luc3RhbmNlKSB7XG4gICAgaWYgKHRoaXMudHJhbnNhY3Rpb24uaXNJblRyYW5zYWN0aW9uKCkpIHtcbiAgICAgIFJlYWN0VXBkYXRlUXVldWUuZW5xdWV1ZUZvcmNlVXBkYXRlKHB1YmxpY0luc3RhbmNlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgd2Fybk5vb3AocHVibGljSW5zdGFuY2UsICdmb3JjZVVwZGF0ZScpO1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogUmVwbGFjZXMgYWxsIG9mIHRoZSBzdGF0ZS4gQWx3YXlzIHVzZSB0aGlzIG9yIGBzZXRTdGF0ZWAgdG8gbXV0YXRlIHN0YXRlLlxuICAgKiBZb3Ugc2hvdWxkIHRyZWF0IGB0aGlzLnN0YXRlYCBhcyBpbW11dGFibGUuXG4gICAqXG4gICAqIFRoZXJlIGlzIG5vIGd1YXJhbnRlZSB0aGF0IGB0aGlzLnN0YXRlYCB3aWxsIGJlIGltbWVkaWF0ZWx5IHVwZGF0ZWQsIHNvXG4gICAqIGFjY2Vzc2luZyBgdGhpcy5zdGF0ZWAgYWZ0ZXIgY2FsbGluZyB0aGlzIG1ldGhvZCBtYXkgcmV0dXJuIHRoZSBvbGQgdmFsdWUuXG4gICAqXG4gICAqIEBwYXJhbSB7UmVhY3RDbGFzc30gcHVibGljSW5zdGFuY2UgVGhlIGluc3RhbmNlIHRoYXQgc2hvdWxkIHJlcmVuZGVyLlxuICAgKiBAcGFyYW0ge29iamVjdHxmdW5jdGlvbn0gY29tcGxldGVTdGF0ZSBOZXh0IHN0YXRlLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG5cblxuICBSZWFjdFNlcnZlclVwZGF0ZVF1ZXVlLnByb3RvdHlwZS5lbnF1ZXVlUmVwbGFjZVN0YXRlID0gZnVuY3Rpb24gZW5xdWV1ZVJlcGxhY2VTdGF0ZShwdWJsaWNJbnN0YW5jZSwgY29tcGxldGVTdGF0ZSkge1xuICAgIGlmICh0aGlzLnRyYW5zYWN0aW9uLmlzSW5UcmFuc2FjdGlvbigpKSB7XG4gICAgICBSZWFjdFVwZGF0ZVF1ZXVlLmVucXVldWVSZXBsYWNlU3RhdGUocHVibGljSW5zdGFuY2UsIGNvbXBsZXRlU3RhdGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB3YXJuTm9vcChwdWJsaWNJbnN0YW5jZSwgJ3JlcGxhY2VTdGF0ZScpO1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogU2V0cyBhIHN1YnNldCBvZiB0aGUgc3RhdGUuIFRoaXMgb25seSBleGlzdHMgYmVjYXVzZSBfcGVuZGluZ1N0YXRlIGlzXG4gICAqIGludGVybmFsLiBUaGlzIHByb3ZpZGVzIGEgbWVyZ2luZyBzdHJhdGVneSB0aGF0IGlzIG5vdCBhdmFpbGFibGUgdG8gZGVlcFxuICAgKiBwcm9wZXJ0aWVzIHdoaWNoIGlzIGNvbmZ1c2luZy4gVE9ETzogRXhwb3NlIHBlbmRpbmdTdGF0ZSBvciBkb24ndCB1c2UgaXRcbiAgICogZHVyaW5nIHRoZSBtZXJnZS5cbiAgICpcbiAgICogQHBhcmFtIHtSZWFjdENsYXNzfSBwdWJsaWNJbnN0YW5jZSBUaGUgaW5zdGFuY2UgdGhhdCBzaG91bGQgcmVyZW5kZXIuXG4gICAqIEBwYXJhbSB7b2JqZWN0fGZ1bmN0aW9ufSBwYXJ0aWFsU3RhdGUgTmV4dCBwYXJ0aWFsIHN0YXRlIHRvIGJlIG1lcmdlZCB3aXRoIHN0YXRlLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG5cblxuICBSZWFjdFNlcnZlclVwZGF0ZVF1ZXVlLnByb3RvdHlwZS5lbnF1ZXVlU2V0U3RhdGUgPSBmdW5jdGlvbiBlbnF1ZXVlU2V0U3RhdGUocHVibGljSW5zdGFuY2UsIHBhcnRpYWxTdGF0ZSkge1xuICAgIGlmICh0aGlzLnRyYW5zYWN0aW9uLmlzSW5UcmFuc2FjdGlvbigpKSB7XG4gICAgICBSZWFjdFVwZGF0ZVF1ZXVlLmVucXVldWVTZXRTdGF0ZShwdWJsaWNJbnN0YW5jZSwgcGFydGlhbFN0YXRlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgd2Fybk5vb3AocHVibGljSW5zdGFuY2UsICdzZXRTdGF0ZScpO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gUmVhY3RTZXJ2ZXJVcGRhdGVRdWV1ZTtcbn0oKTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdFNlcnZlclVwZGF0ZVF1ZXVlO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QtZG9tL2xpYi9SZWFjdFNlcnZlclVwZGF0ZVF1ZXVlLmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSAnMTUuNi4xJztcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3JlYWN0LWRvbS9saWIvUmVhY3RWZXJzaW9uLmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIE5TID0ge1xuICB4bGluazogJ2h0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsnLFxuICB4bWw6ICdodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UnXG59O1xuXG4vLyBXZSB1c2UgYXR0cmlidXRlcyBmb3IgZXZlcnl0aGluZyBTVkcgc28gbGV0J3MgYXZvaWQgc29tZSBkdXBsaWNhdGlvbiBhbmQgcnVuXG4vLyBjb2RlIGluc3RlYWQuXG4vLyBUaGUgZm9sbG93aW5nIGFyZSBhbGwgc3BlY2lmaWVkIGluIHRoZSBIVE1MIGNvbmZpZyBhbHJlYWR5IHNvIHdlIGV4Y2x1ZGUgaGVyZS5cbi8vIC0gY2xhc3MgKGFzIGNsYXNzTmFtZSlcbi8vIC0gY29sb3Jcbi8vIC0gaGVpZ2h0XG4vLyAtIGlkXG4vLyAtIGxhbmdcbi8vIC0gbWF4XG4vLyAtIG1lZGlhXG4vLyAtIG1ldGhvZFxuLy8gLSBtaW5cbi8vIC0gbmFtZVxuLy8gLSBzdHlsZVxuLy8gLSB0YXJnZXRcbi8vIC0gdHlwZVxuLy8gLSB3aWR0aFxudmFyIEFUVFJTID0ge1xuICBhY2NlbnRIZWlnaHQ6ICdhY2NlbnQtaGVpZ2h0JyxcbiAgYWNjdW11bGF0ZTogMCxcbiAgYWRkaXRpdmU6IDAsXG4gIGFsaWdubWVudEJhc2VsaW5lOiAnYWxpZ25tZW50LWJhc2VsaW5lJyxcbiAgYWxsb3dSZW9yZGVyOiAnYWxsb3dSZW9yZGVyJyxcbiAgYWxwaGFiZXRpYzogMCxcbiAgYW1wbGl0dWRlOiAwLFxuICBhcmFiaWNGb3JtOiAnYXJhYmljLWZvcm0nLFxuICBhc2NlbnQ6IDAsXG4gIGF0dHJpYnV0ZU5hbWU6ICdhdHRyaWJ1dGVOYW1lJyxcbiAgYXR0cmlidXRlVHlwZTogJ2F0dHJpYnV0ZVR5cGUnLFxuICBhdXRvUmV2ZXJzZTogJ2F1dG9SZXZlcnNlJyxcbiAgYXppbXV0aDogMCxcbiAgYmFzZUZyZXF1ZW5jeTogJ2Jhc2VGcmVxdWVuY3knLFxuICBiYXNlUHJvZmlsZTogJ2Jhc2VQcm9maWxlJyxcbiAgYmFzZWxpbmVTaGlmdDogJ2Jhc2VsaW5lLXNoaWZ0JyxcbiAgYmJveDogMCxcbiAgYmVnaW46IDAsXG4gIGJpYXM6IDAsXG4gIGJ5OiAwLFxuICBjYWxjTW9kZTogJ2NhbGNNb2RlJyxcbiAgY2FwSGVpZ2h0OiAnY2FwLWhlaWdodCcsXG4gIGNsaXA6IDAsXG4gIGNsaXBQYXRoOiAnY2xpcC1wYXRoJyxcbiAgY2xpcFJ1bGU6ICdjbGlwLXJ1bGUnLFxuICBjbGlwUGF0aFVuaXRzOiAnY2xpcFBhdGhVbml0cycsXG4gIGNvbG9ySW50ZXJwb2xhdGlvbjogJ2NvbG9yLWludGVycG9sYXRpb24nLFxuICBjb2xvckludGVycG9sYXRpb25GaWx0ZXJzOiAnY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzJyxcbiAgY29sb3JQcm9maWxlOiAnY29sb3ItcHJvZmlsZScsXG4gIGNvbG9yUmVuZGVyaW5nOiAnY29sb3ItcmVuZGVyaW5nJyxcbiAgY29udGVudFNjcmlwdFR5cGU6ICdjb250ZW50U2NyaXB0VHlwZScsXG4gIGNvbnRlbnRTdHlsZVR5cGU6ICdjb250ZW50U3R5bGVUeXBlJyxcbiAgY3Vyc29yOiAwLFxuICBjeDogMCxcbiAgY3k6IDAsXG4gIGQ6IDAsXG4gIGRlY2VsZXJhdGU6IDAsXG4gIGRlc2NlbnQ6IDAsXG4gIGRpZmZ1c2VDb25zdGFudDogJ2RpZmZ1c2VDb25zdGFudCcsXG4gIGRpcmVjdGlvbjogMCxcbiAgZGlzcGxheTogMCxcbiAgZGl2aXNvcjogMCxcbiAgZG9taW5hbnRCYXNlbGluZTogJ2RvbWluYW50LWJhc2VsaW5lJyxcbiAgZHVyOiAwLFxuICBkeDogMCxcbiAgZHk6IDAsXG4gIGVkZ2VNb2RlOiAnZWRnZU1vZGUnLFxuICBlbGV2YXRpb246IDAsXG4gIGVuYWJsZUJhY2tncm91bmQ6ICdlbmFibGUtYmFja2dyb3VuZCcsXG4gIGVuZDogMCxcbiAgZXhwb25lbnQ6IDAsXG4gIGV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6ICdleHRlcm5hbFJlc291cmNlc1JlcXVpcmVkJyxcbiAgZmlsbDogMCxcbiAgZmlsbE9wYWNpdHk6ICdmaWxsLW9wYWNpdHknLFxuICBmaWxsUnVsZTogJ2ZpbGwtcnVsZScsXG4gIGZpbHRlcjogMCxcbiAgZmlsdGVyUmVzOiAnZmlsdGVyUmVzJyxcbiAgZmlsdGVyVW5pdHM6ICdmaWx0ZXJVbml0cycsXG4gIGZsb29kQ29sb3I6ICdmbG9vZC1jb2xvcicsXG4gIGZsb29kT3BhY2l0eTogJ2Zsb29kLW9wYWNpdHknLFxuICBmb2N1c2FibGU6IDAsXG4gIGZvbnRGYW1pbHk6ICdmb250LWZhbWlseScsXG4gIGZvbnRTaXplOiAnZm9udC1zaXplJyxcbiAgZm9udFNpemVBZGp1c3Q6ICdmb250LXNpemUtYWRqdXN0JyxcbiAgZm9udFN0cmV0Y2g6ICdmb250LXN0cmV0Y2gnLFxuICBmb250U3R5bGU6ICdmb250LXN0eWxlJyxcbiAgZm9udFZhcmlhbnQ6ICdmb250LXZhcmlhbnQnLFxuICBmb250V2VpZ2h0OiAnZm9udC13ZWlnaHQnLFxuICBmb3JtYXQ6IDAsXG4gIGZyb206IDAsXG4gIGZ4OiAwLFxuICBmeTogMCxcbiAgZzE6IDAsXG4gIGcyOiAwLFxuICBnbHlwaE5hbWU6ICdnbHlwaC1uYW1lJyxcbiAgZ2x5cGhPcmllbnRhdGlvbkhvcml6b250YWw6ICdnbHlwaC1vcmllbnRhdGlvbi1ob3Jpem9udGFsJyxcbiAgZ2x5cGhPcmllbnRhdGlvblZlcnRpY2FsOiAnZ2x5cGgtb3JpZW50YXRpb24tdmVydGljYWwnLFxuICBnbHlwaFJlZjogJ2dseXBoUmVmJyxcbiAgZ3JhZGllbnRUcmFuc2Zvcm06ICdncmFkaWVudFRyYW5zZm9ybScsXG4gIGdyYWRpZW50VW5pdHM6ICdncmFkaWVudFVuaXRzJyxcbiAgaGFuZ2luZzogMCxcbiAgaG9yaXpBZHZYOiAnaG9yaXotYWR2LXgnLFxuICBob3Jpek9yaWdpblg6ICdob3Jpei1vcmlnaW4teCcsXG4gIGlkZW9ncmFwaGljOiAwLFxuICBpbWFnZVJlbmRlcmluZzogJ2ltYWdlLXJlbmRlcmluZycsXG4gICdpbic6IDAsXG4gIGluMjogMCxcbiAgaW50ZXJjZXB0OiAwLFxuICBrOiAwLFxuICBrMTogMCxcbiAgazI6IDAsXG4gIGszOiAwLFxuICBrNDogMCxcbiAga2VybmVsTWF0cml4OiAna2VybmVsTWF0cml4JyxcbiAga2VybmVsVW5pdExlbmd0aDogJ2tlcm5lbFVuaXRMZW5ndGgnLFxuICBrZXJuaW5nOiAwLFxuICBrZXlQb2ludHM6ICdrZXlQb2ludHMnLFxuICBrZXlTcGxpbmVzOiAna2V5U3BsaW5lcycsXG4gIGtleVRpbWVzOiAna2V5VGltZXMnLFxuICBsZW5ndGhBZGp1c3Q6ICdsZW5ndGhBZGp1c3QnLFxuICBsZXR0ZXJTcGFjaW5nOiAnbGV0dGVyLXNwYWNpbmcnLFxuICBsaWdodGluZ0NvbG9yOiAnbGlnaHRpbmctY29sb3InLFxuICBsaW1pdGluZ0NvbmVBbmdsZTogJ2xpbWl0aW5nQ29uZUFuZ2xlJyxcbiAgbG9jYWw6IDAsXG4gIG1hcmtlckVuZDogJ21hcmtlci1lbmQnLFxuICBtYXJrZXJNaWQ6ICdtYXJrZXItbWlkJyxcbiAgbWFya2VyU3RhcnQ6ICdtYXJrZXItc3RhcnQnLFxuICBtYXJrZXJIZWlnaHQ6ICdtYXJrZXJIZWlnaHQnLFxuICBtYXJrZXJVbml0czogJ21hcmtlclVuaXRzJyxcbiAgbWFya2VyV2lkdGg6ICdtYXJrZXJXaWR0aCcsXG4gIG1hc2s6IDAsXG4gIG1hc2tDb250ZW50VW5pdHM6ICdtYXNrQ29udGVudFVuaXRzJyxcbiAgbWFza1VuaXRzOiAnbWFza1VuaXRzJyxcbiAgbWF0aGVtYXRpY2FsOiAwLFxuICBtb2RlOiAwLFxuICBudW1PY3RhdmVzOiAnbnVtT2N0YXZlcycsXG4gIG9mZnNldDogMCxcbiAgb3BhY2l0eTogMCxcbiAgb3BlcmF0b3I6IDAsXG4gIG9yZGVyOiAwLFxuICBvcmllbnQ6IDAsXG4gIG9yaWVudGF0aW9uOiAwLFxuICBvcmlnaW46IDAsXG4gIG92ZXJmbG93OiAwLFxuICBvdmVybGluZVBvc2l0aW9uOiAnb3ZlcmxpbmUtcG9zaXRpb24nLFxuICBvdmVybGluZVRoaWNrbmVzczogJ292ZXJsaW5lLXRoaWNrbmVzcycsXG4gIHBhaW50T3JkZXI6ICdwYWludC1vcmRlcicsXG4gIHBhbm9zZTE6ICdwYW5vc2UtMScsXG4gIHBhdGhMZW5ndGg6ICdwYXRoTGVuZ3RoJyxcbiAgcGF0dGVybkNvbnRlbnRVbml0czogJ3BhdHRlcm5Db250ZW50VW5pdHMnLFxuICBwYXR0ZXJuVHJhbnNmb3JtOiAncGF0dGVyblRyYW5zZm9ybScsXG4gIHBhdHRlcm5Vbml0czogJ3BhdHRlcm5Vbml0cycsXG4gIHBvaW50ZXJFdmVudHM6ICdwb2ludGVyLWV2ZW50cycsXG4gIHBvaW50czogMCxcbiAgcG9pbnRzQXRYOiAncG9pbnRzQXRYJyxcbiAgcG9pbnRzQXRZOiAncG9pbnRzQXRZJyxcbiAgcG9pbnRzQXRaOiAncG9pbnRzQXRaJyxcbiAgcHJlc2VydmVBbHBoYTogJ3ByZXNlcnZlQWxwaGEnLFxuICBwcmVzZXJ2ZUFzcGVjdFJhdGlvOiAncHJlc2VydmVBc3BlY3RSYXRpbycsXG4gIHByaW1pdGl2ZVVuaXRzOiAncHJpbWl0aXZlVW5pdHMnLFxuICByOiAwLFxuICByYWRpdXM6IDAsXG4gIHJlZlg6ICdyZWZYJyxcbiAgcmVmWTogJ3JlZlknLFxuICByZW5kZXJpbmdJbnRlbnQ6ICdyZW5kZXJpbmctaW50ZW50JyxcbiAgcmVwZWF0Q291bnQ6ICdyZXBlYXRDb3VudCcsXG4gIHJlcGVhdER1cjogJ3JlcGVhdER1cicsXG4gIHJlcXVpcmVkRXh0ZW5zaW9uczogJ3JlcXVpcmVkRXh0ZW5zaW9ucycsXG4gIHJlcXVpcmVkRmVhdHVyZXM6ICdyZXF1aXJlZEZlYXR1cmVzJyxcbiAgcmVzdGFydDogMCxcbiAgcmVzdWx0OiAwLFxuICByb3RhdGU6IDAsXG4gIHJ4OiAwLFxuICByeTogMCxcbiAgc2NhbGU6IDAsXG4gIHNlZWQ6IDAsXG4gIHNoYXBlUmVuZGVyaW5nOiAnc2hhcGUtcmVuZGVyaW5nJyxcbiAgc2xvcGU6IDAsXG4gIHNwYWNpbmc6IDAsXG4gIHNwZWN1bGFyQ29uc3RhbnQ6ICdzcGVjdWxhckNvbnN0YW50JyxcbiAgc3BlY3VsYXJFeHBvbmVudDogJ3NwZWN1bGFyRXhwb25lbnQnLFxuICBzcGVlZDogMCxcbiAgc3ByZWFkTWV0aG9kOiAnc3ByZWFkTWV0aG9kJyxcbiAgc3RhcnRPZmZzZXQ6ICdzdGFydE9mZnNldCcsXG4gIHN0ZERldmlhdGlvbjogJ3N0ZERldmlhdGlvbicsXG4gIHN0ZW1oOiAwLFxuICBzdGVtdjogMCxcbiAgc3RpdGNoVGlsZXM6ICdzdGl0Y2hUaWxlcycsXG4gIHN0b3BDb2xvcjogJ3N0b3AtY29sb3InLFxuICBzdG9wT3BhY2l0eTogJ3N0b3Atb3BhY2l0eScsXG4gIHN0cmlrZXRocm91Z2hQb3NpdGlvbjogJ3N0cmlrZXRocm91Z2gtcG9zaXRpb24nLFxuICBzdHJpa2V0aHJvdWdoVGhpY2tuZXNzOiAnc3RyaWtldGhyb3VnaC10aGlja25lc3MnLFxuICBzdHJpbmc6IDAsXG4gIHN0cm9rZTogMCxcbiAgc3Ryb2tlRGFzaGFycmF5OiAnc3Ryb2tlLWRhc2hhcnJheScsXG4gIHN0cm9rZURhc2hvZmZzZXQ6ICdzdHJva2UtZGFzaG9mZnNldCcsXG4gIHN0cm9rZUxpbmVjYXA6ICdzdHJva2UtbGluZWNhcCcsXG4gIHN0cm9rZUxpbmVqb2luOiAnc3Ryb2tlLWxpbmVqb2luJyxcbiAgc3Ryb2tlTWl0ZXJsaW1pdDogJ3N0cm9rZS1taXRlcmxpbWl0JyxcbiAgc3Ryb2tlT3BhY2l0eTogJ3N0cm9rZS1vcGFjaXR5JyxcbiAgc3Ryb2tlV2lkdGg6ICdzdHJva2Utd2lkdGgnLFxuICBzdXJmYWNlU2NhbGU6ICdzdXJmYWNlU2NhbGUnLFxuICBzeXN0ZW1MYW5ndWFnZTogJ3N5c3RlbUxhbmd1YWdlJyxcbiAgdGFibGVWYWx1ZXM6ICd0YWJsZVZhbHVlcycsXG4gIHRhcmdldFg6ICd0YXJnZXRYJyxcbiAgdGFyZ2V0WTogJ3RhcmdldFknLFxuICB0ZXh0QW5jaG9yOiAndGV4dC1hbmNob3InLFxuICB0ZXh0RGVjb3JhdGlvbjogJ3RleHQtZGVjb3JhdGlvbicsXG4gIHRleHRSZW5kZXJpbmc6ICd0ZXh0LXJlbmRlcmluZycsXG4gIHRleHRMZW5ndGg6ICd0ZXh0TGVuZ3RoJyxcbiAgdG86IDAsXG4gIHRyYW5zZm9ybTogMCxcbiAgdTE6IDAsXG4gIHUyOiAwLFxuICB1bmRlcmxpbmVQb3NpdGlvbjogJ3VuZGVybGluZS1wb3NpdGlvbicsXG4gIHVuZGVybGluZVRoaWNrbmVzczogJ3VuZGVybGluZS10aGlja25lc3MnLFxuICB1bmljb2RlOiAwLFxuICB1bmljb2RlQmlkaTogJ3VuaWNvZGUtYmlkaScsXG4gIHVuaWNvZGVSYW5nZTogJ3VuaWNvZGUtcmFuZ2UnLFxuICB1bml0c1BlckVtOiAndW5pdHMtcGVyLWVtJyxcbiAgdkFscGhhYmV0aWM6ICd2LWFscGhhYmV0aWMnLFxuICB2SGFuZ2luZzogJ3YtaGFuZ2luZycsXG4gIHZJZGVvZ3JhcGhpYzogJ3YtaWRlb2dyYXBoaWMnLFxuICB2TWF0aGVtYXRpY2FsOiAndi1tYXRoZW1hdGljYWwnLFxuICB2YWx1ZXM6IDAsXG4gIHZlY3RvckVmZmVjdDogJ3ZlY3Rvci1lZmZlY3QnLFxuICB2ZXJzaW9uOiAwLFxuICB2ZXJ0QWR2WTogJ3ZlcnQtYWR2LXknLFxuICB2ZXJ0T3JpZ2luWDogJ3ZlcnQtb3JpZ2luLXgnLFxuICB2ZXJ0T3JpZ2luWTogJ3ZlcnQtb3JpZ2luLXknLFxuICB2aWV3Qm94OiAndmlld0JveCcsXG4gIHZpZXdUYXJnZXQ6ICd2aWV3VGFyZ2V0JyxcbiAgdmlzaWJpbGl0eTogMCxcbiAgd2lkdGhzOiAwLFxuICB3b3JkU3BhY2luZzogJ3dvcmQtc3BhY2luZycsXG4gIHdyaXRpbmdNb2RlOiAnd3JpdGluZy1tb2RlJyxcbiAgeDogMCxcbiAgeEhlaWdodDogJ3gtaGVpZ2h0JyxcbiAgeDE6IDAsXG4gIHgyOiAwLFxuICB4Q2hhbm5lbFNlbGVjdG9yOiAneENoYW5uZWxTZWxlY3RvcicsXG4gIHhsaW5rQWN0dWF0ZTogJ3hsaW5rOmFjdHVhdGUnLFxuICB4bGlua0FyY3JvbGU6ICd4bGluazphcmNyb2xlJyxcbiAgeGxpbmtIcmVmOiAneGxpbms6aHJlZicsXG4gIHhsaW5rUm9sZTogJ3hsaW5rOnJvbGUnLFxuICB4bGlua1Nob3c6ICd4bGluazpzaG93JyxcbiAgeGxpbmtUaXRsZTogJ3hsaW5rOnRpdGxlJyxcbiAgeGxpbmtUeXBlOiAneGxpbms6dHlwZScsXG4gIHhtbEJhc2U6ICd4bWw6YmFzZScsXG4gIHhtbG5zOiAwLFxuICB4bWxuc1hsaW5rOiAneG1sbnM6eGxpbmsnLFxuICB4bWxMYW5nOiAneG1sOmxhbmcnLFxuICB4bWxTcGFjZTogJ3htbDpzcGFjZScsXG4gIHk6IDAsXG4gIHkxOiAwLFxuICB5MjogMCxcbiAgeUNoYW5uZWxTZWxlY3RvcjogJ3lDaGFubmVsU2VsZWN0b3InLFxuICB6OiAwLFxuICB6b29tQW5kUGFuOiAnem9vbUFuZFBhbidcbn07XG5cbnZhciBTVkdET01Qcm9wZXJ0eUNvbmZpZyA9IHtcbiAgUHJvcGVydGllczoge30sXG4gIERPTUF0dHJpYnV0ZU5hbWVzcGFjZXM6IHtcbiAgICB4bGlua0FjdHVhdGU6IE5TLnhsaW5rLFxuICAgIHhsaW5rQXJjcm9sZTogTlMueGxpbmssXG4gICAgeGxpbmtIcmVmOiBOUy54bGluayxcbiAgICB4bGlua1JvbGU6IE5TLnhsaW5rLFxuICAgIHhsaW5rU2hvdzogTlMueGxpbmssXG4gICAgeGxpbmtUaXRsZTogTlMueGxpbmssXG4gICAgeGxpbmtUeXBlOiBOUy54bGluayxcbiAgICB4bWxCYXNlOiBOUy54bWwsXG4gICAgeG1sTGFuZzogTlMueG1sLFxuICAgIHhtbFNwYWNlOiBOUy54bWxcbiAgfSxcbiAgRE9NQXR0cmlidXRlTmFtZXM6IHt9XG59O1xuXG5PYmplY3Qua2V5cyhBVFRSUykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gIFNWR0RPTVByb3BlcnR5Q29uZmlnLlByb3BlcnRpZXNba2V5XSA9IDA7XG4gIGlmIChBVFRSU1trZXldKSB7XG4gICAgU1ZHRE9NUHJvcGVydHlDb25maWcuRE9NQXR0cmlidXRlTmFtZXNba2V5XSA9IEFUVFJTW2tleV07XG4gIH1cbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFNWR0RPTVByb3BlcnR5Q29uZmlnO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QtZG9tL2xpYi9TVkdET01Qcm9wZXJ0eUNvbmZpZy5qcyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBFdmVudFByb3BhZ2F0b3JzID0gcmVxdWlyZSgnLi9FdmVudFByb3BhZ2F0b3JzJyk7XG52YXIgRXhlY3V0aW9uRW52aXJvbm1lbnQgPSByZXF1aXJlKCdmYmpzL2xpYi9FeGVjdXRpb25FbnZpcm9ubWVudCcpO1xudmFyIFJlYWN0RE9NQ29tcG9uZW50VHJlZSA9IHJlcXVpcmUoJy4vUmVhY3RET01Db21wb25lbnRUcmVlJyk7XG52YXIgUmVhY3RJbnB1dFNlbGVjdGlvbiA9IHJlcXVpcmUoJy4vUmVhY3RJbnB1dFNlbGVjdGlvbicpO1xudmFyIFN5bnRoZXRpY0V2ZW50ID0gcmVxdWlyZSgnLi9TeW50aGV0aWNFdmVudCcpO1xuXG52YXIgZ2V0QWN0aXZlRWxlbWVudCA9IHJlcXVpcmUoJ2ZianMvbGliL2dldEFjdGl2ZUVsZW1lbnQnKTtcbnZhciBpc1RleHRJbnB1dEVsZW1lbnQgPSByZXF1aXJlKCcuL2lzVGV4dElucHV0RWxlbWVudCcpO1xudmFyIHNoYWxsb3dFcXVhbCA9IHJlcXVpcmUoJ2ZianMvbGliL3NoYWxsb3dFcXVhbCcpO1xuXG52YXIgc2tpcFNlbGVjdGlvbkNoYW5nZUV2ZW50ID0gRXhlY3V0aW9uRW52aXJvbm1lbnQuY2FuVXNlRE9NICYmICdkb2N1bWVudE1vZGUnIGluIGRvY3VtZW50ICYmIGRvY3VtZW50LmRvY3VtZW50TW9kZSA8PSAxMTtcblxudmFyIGV2ZW50VHlwZXMgPSB7XG4gIHNlbGVjdDoge1xuICAgIHBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOiB7XG4gICAgICBidWJibGVkOiAnb25TZWxlY3QnLFxuICAgICAgY2FwdHVyZWQ6ICdvblNlbGVjdENhcHR1cmUnXG4gICAgfSxcbiAgICBkZXBlbmRlbmNpZXM6IFsndG9wQmx1cicsICd0b3BDb250ZXh0TWVudScsICd0b3BGb2N1cycsICd0b3BLZXlEb3duJywgJ3RvcEtleVVwJywgJ3RvcE1vdXNlRG93bicsICd0b3BNb3VzZVVwJywgJ3RvcFNlbGVjdGlvbkNoYW5nZSddXG4gIH1cbn07XG5cbnZhciBhY3RpdmVFbGVtZW50ID0gbnVsbDtcbnZhciBhY3RpdmVFbGVtZW50SW5zdCA9IG51bGw7XG52YXIgbGFzdFNlbGVjdGlvbiA9IG51bGw7XG52YXIgbW91c2VEb3duID0gZmFsc2U7XG5cbi8vIFRyYWNrIHdoZXRoZXIgYSBsaXN0ZW5lciBleGlzdHMgZm9yIHRoaXMgcGx1Z2luLiBJZiBub25lIGV4aXN0LCB3ZSBkb1xuLy8gbm90IGV4dHJhY3QgZXZlbnRzLiBTZWUgIzM2MzkuXG52YXIgaGFzTGlzdGVuZXIgPSBmYWxzZTtcblxuLyoqXG4gKiBHZXQgYW4gb2JqZWN0IHdoaWNoIGlzIGEgdW5pcXVlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjdXJyZW50IHNlbGVjdGlvbi5cbiAqXG4gKiBUaGUgcmV0dXJuIHZhbHVlIHdpbGwgbm90IGJlIGNvbnNpc3RlbnQgYWNyb3NzIG5vZGVzIG9yIGJyb3dzZXJzLCBidXRcbiAqIHR3byBpZGVudGljYWwgc2VsZWN0aW9ucyBvbiB0aGUgc2FtZSBub2RlIHdpbGwgcmV0dXJuIGlkZW50aWNhbCBvYmplY3RzLlxuICpcbiAqIEBwYXJhbSB7RE9NRWxlbWVudH0gbm9kZVxuICogQHJldHVybiB7b2JqZWN0fVxuICovXG5mdW5jdGlvbiBnZXRTZWxlY3Rpb24obm9kZSkge1xuICBpZiAoJ3NlbGVjdGlvblN0YXJ0JyBpbiBub2RlICYmIFJlYWN0SW5wdXRTZWxlY3Rpb24uaGFzU2VsZWN0aW9uQ2FwYWJpbGl0aWVzKG5vZGUpKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXJ0OiBub2RlLnNlbGVjdGlvblN0YXJ0LFxuICAgICAgZW5kOiBub2RlLnNlbGVjdGlvbkVuZFxuICAgIH07XG4gIH0gZWxzZSBpZiAod2luZG93LmdldFNlbGVjdGlvbikge1xuICAgIHZhciBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGFuY2hvck5vZGU6IHNlbGVjdGlvbi5hbmNob3JOb2RlLFxuICAgICAgYW5jaG9yT2Zmc2V0OiBzZWxlY3Rpb24uYW5jaG9yT2Zmc2V0LFxuICAgICAgZm9jdXNOb2RlOiBzZWxlY3Rpb24uZm9jdXNOb2RlLFxuICAgICAgZm9jdXNPZmZzZXQ6IHNlbGVjdGlvbi5mb2N1c09mZnNldFxuICAgIH07XG4gIH0gZWxzZSBpZiAoZG9jdW1lbnQuc2VsZWN0aW9uKSB7XG4gICAgdmFyIHJhbmdlID0gZG9jdW1lbnQuc2VsZWN0aW9uLmNyZWF0ZVJhbmdlKCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBhcmVudEVsZW1lbnQ6IHJhbmdlLnBhcmVudEVsZW1lbnQoKSxcbiAgICAgIHRleHQ6IHJhbmdlLnRleHQsXG4gICAgICB0b3A6IHJhbmdlLmJvdW5kaW5nVG9wLFxuICAgICAgbGVmdDogcmFuZ2UuYm91bmRpbmdMZWZ0XG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIFBvbGwgc2VsZWN0aW9uIHRvIHNlZSB3aGV0aGVyIGl0J3MgY2hhbmdlZC5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gbmF0aXZlRXZlbnRcbiAqIEByZXR1cm4gez9TeW50aGV0aWNFdmVudH1cbiAqL1xuZnVuY3Rpb24gY29uc3RydWN0U2VsZWN0RXZlbnQobmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KSB7XG4gIC8vIEVuc3VyZSB3ZSBoYXZlIHRoZSByaWdodCBlbGVtZW50LCBhbmQgdGhhdCB0aGUgdXNlciBpcyBub3QgZHJhZ2dpbmcgYVxuICAvLyBzZWxlY3Rpb24gKHRoaXMgbWF0Y2hlcyBuYXRpdmUgYHNlbGVjdGAgZXZlbnQgYmVoYXZpb3IpLiBJbiBIVE1MNSwgc2VsZWN0XG4gIC8vIGZpcmVzIG9ubHkgb24gaW5wdXQgYW5kIHRleHRhcmVhIHRodXMgaWYgdGhlcmUncyBubyBmb2N1c2VkIGVsZW1lbnQgd2VcbiAgLy8gd29uJ3QgZGlzcGF0Y2guXG4gIGlmIChtb3VzZURvd24gfHwgYWN0aXZlRWxlbWVudCA9PSBudWxsIHx8IGFjdGl2ZUVsZW1lbnQgIT09IGdldEFjdGl2ZUVsZW1lbnQoKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLy8gT25seSBmaXJlIHdoZW4gc2VsZWN0aW9uIGhhcyBhY3R1YWxseSBjaGFuZ2VkLlxuICB2YXIgY3VycmVudFNlbGVjdGlvbiA9IGdldFNlbGVjdGlvbihhY3RpdmVFbGVtZW50KTtcbiAgaWYgKCFsYXN0U2VsZWN0aW9uIHx8ICFzaGFsbG93RXF1YWwobGFzdFNlbGVjdGlvbiwgY3VycmVudFNlbGVjdGlvbikpIHtcbiAgICBsYXN0U2VsZWN0aW9uID0gY3VycmVudFNlbGVjdGlvbjtcblxuICAgIHZhciBzeW50aGV0aWNFdmVudCA9IFN5bnRoZXRpY0V2ZW50LmdldFBvb2xlZChldmVudFR5cGVzLnNlbGVjdCwgYWN0aXZlRWxlbWVudEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCk7XG5cbiAgICBzeW50aGV0aWNFdmVudC50eXBlID0gJ3NlbGVjdCc7XG4gICAgc3ludGhldGljRXZlbnQudGFyZ2V0ID0gYWN0aXZlRWxlbWVudDtcblxuICAgIEV2ZW50UHJvcGFnYXRvcnMuYWNjdW11bGF0ZVR3b1BoYXNlRGlzcGF0Y2hlcyhzeW50aGV0aWNFdmVudCk7XG5cbiAgICByZXR1cm4gc3ludGhldGljRXZlbnQ7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiBUaGlzIHBsdWdpbiBjcmVhdGVzIGFuIGBvblNlbGVjdGAgZXZlbnQgdGhhdCBub3JtYWxpemVzIHNlbGVjdCBldmVudHNcbiAqIGFjcm9zcyBmb3JtIGVsZW1lbnRzLlxuICpcbiAqIFN1cHBvcnRlZCBlbGVtZW50cyBhcmU6XG4gKiAtIGlucHV0IChzZWUgYGlzVGV4dElucHV0RWxlbWVudGApXG4gKiAtIHRleHRhcmVhXG4gKiAtIGNvbnRlbnRFZGl0YWJsZVxuICpcbiAqIFRoaXMgZGlmZmVycyBmcm9tIG5hdGl2ZSBicm93c2VyIGltcGxlbWVudGF0aW9ucyBpbiB0aGUgZm9sbG93aW5nIHdheXM6XG4gKiAtIEZpcmVzIG9uIGNvbnRlbnRFZGl0YWJsZSBmaWVsZHMgYXMgd2VsbCBhcyBpbnB1dHMuXG4gKiAtIEZpcmVzIGZvciBjb2xsYXBzZWQgc2VsZWN0aW9uLlxuICogLSBGaXJlcyBhZnRlciB1c2VyIGlucHV0LlxuICovXG52YXIgU2VsZWN0RXZlbnRQbHVnaW4gPSB7XG4gIGV2ZW50VHlwZXM6IGV2ZW50VHlwZXMsXG5cbiAgZXh0cmFjdEV2ZW50czogZnVuY3Rpb24gKHRvcExldmVsVHlwZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KSB7XG4gICAgaWYgKCFoYXNMaXN0ZW5lcikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgdmFyIHRhcmdldE5vZGUgPSB0YXJnZXRJbnN0ID8gUmVhY3RET01Db21wb25lbnRUcmVlLmdldE5vZGVGcm9tSW5zdGFuY2UodGFyZ2V0SW5zdCkgOiB3aW5kb3c7XG5cbiAgICBzd2l0Y2ggKHRvcExldmVsVHlwZSkge1xuICAgICAgLy8gVHJhY2sgdGhlIGlucHV0IG5vZGUgdGhhdCBoYXMgZm9jdXMuXG4gICAgICBjYXNlICd0b3BGb2N1cyc6XG4gICAgICAgIGlmIChpc1RleHRJbnB1dEVsZW1lbnQodGFyZ2V0Tm9kZSkgfHwgdGFyZ2V0Tm9kZS5jb250ZW50RWRpdGFibGUgPT09ICd0cnVlJykge1xuICAgICAgICAgIGFjdGl2ZUVsZW1lbnQgPSB0YXJnZXROb2RlO1xuICAgICAgICAgIGFjdGl2ZUVsZW1lbnRJbnN0ID0gdGFyZ2V0SW5zdDtcbiAgICAgICAgICBsYXN0U2VsZWN0aW9uID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3RvcEJsdXInOlxuICAgICAgICBhY3RpdmVFbGVtZW50ID0gbnVsbDtcbiAgICAgICAgYWN0aXZlRWxlbWVudEluc3QgPSBudWxsO1xuICAgICAgICBsYXN0U2VsZWN0aW9uID0gbnVsbDtcbiAgICAgICAgYnJlYWs7XG4gICAgICAvLyBEb24ndCBmaXJlIHRoZSBldmVudCB3aGlsZSB0aGUgdXNlciBpcyBkcmFnZ2luZy4gVGhpcyBtYXRjaGVzIHRoZVxuICAgICAgLy8gc2VtYW50aWNzIG9mIHRoZSBuYXRpdmUgc2VsZWN0IGV2ZW50LlxuICAgICAgY2FzZSAndG9wTW91c2VEb3duJzpcbiAgICAgICAgbW91c2VEb3duID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICd0b3BDb250ZXh0TWVudSc6XG4gICAgICBjYXNlICd0b3BNb3VzZVVwJzpcbiAgICAgICAgbW91c2VEb3duID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBjb25zdHJ1Y3RTZWxlY3RFdmVudChuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpO1xuICAgICAgLy8gQ2hyb21lIGFuZCBJRSBmaXJlIG5vbi1zdGFuZGFyZCBldmVudCB3aGVuIHNlbGVjdGlvbiBpcyBjaGFuZ2VkIChhbmRcbiAgICAgIC8vIHNvbWV0aW1lcyB3aGVuIGl0IGhhc24ndCkuIElFJ3MgZXZlbnQgZmlyZXMgb3V0IG9mIG9yZGVyIHdpdGggcmVzcGVjdFxuICAgICAgLy8gdG8ga2V5IGFuZCBpbnB1dCBldmVudHMgb24gZGVsZXRpb24sIHNvIHdlIGRpc2NhcmQgaXQuXG4gICAgICAvL1xuICAgICAgLy8gRmlyZWZveCBkb2Vzbid0IHN1cHBvcnQgc2VsZWN0aW9uY2hhbmdlLCBzbyBjaGVjayBzZWxlY3Rpb24gc3RhdHVzXG4gICAgICAvLyBhZnRlciBlYWNoIGtleSBlbnRyeS4gVGhlIHNlbGVjdGlvbiBjaGFuZ2VzIGFmdGVyIGtleWRvd24gYW5kIGJlZm9yZVxuICAgICAgLy8ga2V5dXAsIGJ1dCB3ZSBjaGVjayBvbiBrZXlkb3duIGFzIHdlbGwgaW4gdGhlIGNhc2Ugb2YgaG9sZGluZyBkb3duIGFcbiAgICAgIC8vIGtleSwgd2hlbiBtdWx0aXBsZSBrZXlkb3duIGV2ZW50cyBhcmUgZmlyZWQgYnV0IG9ubHkgb25lIGtleXVwIGlzLlxuICAgICAgLy8gVGhpcyBpcyBhbHNvIG91ciBhcHByb2FjaCBmb3IgSUUgaGFuZGxpbmcsIGZvciB0aGUgcmVhc29uIGFib3ZlLlxuICAgICAgY2FzZSAndG9wU2VsZWN0aW9uQ2hhbmdlJzpcbiAgICAgICAgaWYgKHNraXBTZWxlY3Rpb25DaGFuZ2VFdmVudCkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAvLyBmYWxscyB0aHJvdWdoXG4gICAgICBjYXNlICd0b3BLZXlEb3duJzpcbiAgICAgIGNhc2UgJ3RvcEtleVVwJzpcbiAgICAgICAgcmV0dXJuIGNvbnN0cnVjdFNlbGVjdEV2ZW50KG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH0sXG5cbiAgZGlkUHV0TGlzdGVuZXI6IGZ1bmN0aW9uIChpbnN0LCByZWdpc3RyYXRpb25OYW1lLCBsaXN0ZW5lcikge1xuICAgIGlmIChyZWdpc3RyYXRpb25OYW1lID09PSAnb25TZWxlY3QnKSB7XG4gICAgICBoYXNMaXN0ZW5lciA9IHRydWU7XG4gICAgfVxuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFNlbGVjdEV2ZW50UGx1Z2luO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QtZG9tL2xpYi9TZWxlY3RFdmVudFBsdWdpbi5qcyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqIFxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIF9wcm9kSW52YXJpYW50ID0gcmVxdWlyZSgnLi9yZWFjdFByb2RJbnZhcmlhbnQnKTtcblxudmFyIEV2ZW50TGlzdGVuZXIgPSByZXF1aXJlKCdmYmpzL2xpYi9FdmVudExpc3RlbmVyJyk7XG52YXIgRXZlbnRQcm9wYWdhdG9ycyA9IHJlcXVpcmUoJy4vRXZlbnRQcm9wYWdhdG9ycycpO1xudmFyIFJlYWN0RE9NQ29tcG9uZW50VHJlZSA9IHJlcXVpcmUoJy4vUmVhY3RET01Db21wb25lbnRUcmVlJyk7XG52YXIgU3ludGhldGljQW5pbWF0aW9uRXZlbnQgPSByZXF1aXJlKCcuL1N5bnRoZXRpY0FuaW1hdGlvbkV2ZW50Jyk7XG52YXIgU3ludGhldGljQ2xpcGJvYXJkRXZlbnQgPSByZXF1aXJlKCcuL1N5bnRoZXRpY0NsaXBib2FyZEV2ZW50Jyk7XG52YXIgU3ludGhldGljRXZlbnQgPSByZXF1aXJlKCcuL1N5bnRoZXRpY0V2ZW50Jyk7XG52YXIgU3ludGhldGljRm9jdXNFdmVudCA9IHJlcXVpcmUoJy4vU3ludGhldGljRm9jdXNFdmVudCcpO1xudmFyIFN5bnRoZXRpY0tleWJvYXJkRXZlbnQgPSByZXF1aXJlKCcuL1N5bnRoZXRpY0tleWJvYXJkRXZlbnQnKTtcbnZhciBTeW50aGV0aWNNb3VzZUV2ZW50ID0gcmVxdWlyZSgnLi9TeW50aGV0aWNNb3VzZUV2ZW50Jyk7XG52YXIgU3ludGhldGljRHJhZ0V2ZW50ID0gcmVxdWlyZSgnLi9TeW50aGV0aWNEcmFnRXZlbnQnKTtcbnZhciBTeW50aGV0aWNUb3VjaEV2ZW50ID0gcmVxdWlyZSgnLi9TeW50aGV0aWNUb3VjaEV2ZW50Jyk7XG52YXIgU3ludGhldGljVHJhbnNpdGlvbkV2ZW50ID0gcmVxdWlyZSgnLi9TeW50aGV0aWNUcmFuc2l0aW9uRXZlbnQnKTtcbnZhciBTeW50aGV0aWNVSUV2ZW50ID0gcmVxdWlyZSgnLi9TeW50aGV0aWNVSUV2ZW50Jyk7XG52YXIgU3ludGhldGljV2hlZWxFdmVudCA9IHJlcXVpcmUoJy4vU3ludGhldGljV2hlZWxFdmVudCcpO1xuXG52YXIgZW1wdHlGdW5jdGlvbiA9IHJlcXVpcmUoJ2ZianMvbGliL2VtcHR5RnVuY3Rpb24nKTtcbnZhciBnZXRFdmVudENoYXJDb2RlID0gcmVxdWlyZSgnLi9nZXRFdmVudENoYXJDb2RlJyk7XG52YXIgaW52YXJpYW50ID0gcmVxdWlyZSgnZmJqcy9saWIvaW52YXJpYW50Jyk7XG5cbi8qKlxuICogVHVybnNcbiAqIFsnYWJvcnQnLCAuLi5dXG4gKiBpbnRvXG4gKiBldmVudFR5cGVzID0ge1xuICogICAnYWJvcnQnOiB7XG4gKiAgICAgcGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6IHtcbiAqICAgICAgIGJ1YmJsZWQ6ICdvbkFib3J0JyxcbiAqICAgICAgIGNhcHR1cmVkOiAnb25BYm9ydENhcHR1cmUnLFxuICogICAgIH0sXG4gKiAgICAgZGVwZW5kZW5jaWVzOiBbJ3RvcEFib3J0J10sXG4gKiAgIH0sXG4gKiAgIC4uLlxuICogfTtcbiAqIHRvcExldmVsRXZlbnRzVG9EaXNwYXRjaENvbmZpZyA9IHtcbiAqICAgJ3RvcEFib3J0JzogeyBzYW1lQ29uZmlnIH1cbiAqIH07XG4gKi9cbnZhciBldmVudFR5cGVzID0ge307XG52YXIgdG9wTGV2ZWxFdmVudHNUb0Rpc3BhdGNoQ29uZmlnID0ge307XG5bJ2Fib3J0JywgJ2FuaW1hdGlvbkVuZCcsICdhbmltYXRpb25JdGVyYXRpb24nLCAnYW5pbWF0aW9uU3RhcnQnLCAnYmx1cicsICdjYW5QbGF5JywgJ2NhblBsYXlUaHJvdWdoJywgJ2NsaWNrJywgJ2NvbnRleHRNZW51JywgJ2NvcHknLCAnY3V0JywgJ2RvdWJsZUNsaWNrJywgJ2RyYWcnLCAnZHJhZ0VuZCcsICdkcmFnRW50ZXInLCAnZHJhZ0V4aXQnLCAnZHJhZ0xlYXZlJywgJ2RyYWdPdmVyJywgJ2RyYWdTdGFydCcsICdkcm9wJywgJ2R1cmF0aW9uQ2hhbmdlJywgJ2VtcHRpZWQnLCAnZW5jcnlwdGVkJywgJ2VuZGVkJywgJ2Vycm9yJywgJ2ZvY3VzJywgJ2lucHV0JywgJ2ludmFsaWQnLCAna2V5RG93bicsICdrZXlQcmVzcycsICdrZXlVcCcsICdsb2FkJywgJ2xvYWRlZERhdGEnLCAnbG9hZGVkTWV0YWRhdGEnLCAnbG9hZFN0YXJ0JywgJ21vdXNlRG93bicsICdtb3VzZU1vdmUnLCAnbW91c2VPdXQnLCAnbW91c2VPdmVyJywgJ21vdXNlVXAnLCAncGFzdGUnLCAncGF1c2UnLCAncGxheScsICdwbGF5aW5nJywgJ3Byb2dyZXNzJywgJ3JhdGVDaGFuZ2UnLCAncmVzZXQnLCAnc2Nyb2xsJywgJ3NlZWtlZCcsICdzZWVraW5nJywgJ3N0YWxsZWQnLCAnc3VibWl0JywgJ3N1c3BlbmQnLCAndGltZVVwZGF0ZScsICd0b3VjaENhbmNlbCcsICd0b3VjaEVuZCcsICd0b3VjaE1vdmUnLCAndG91Y2hTdGFydCcsICd0cmFuc2l0aW9uRW5kJywgJ3ZvbHVtZUNoYW5nZScsICd3YWl0aW5nJywgJ3doZWVsJ10uZm9yRWFjaChmdW5jdGlvbiAoZXZlbnQpIHtcbiAgdmFyIGNhcGl0YWxpemVkRXZlbnQgPSBldmVudFswXS50b1VwcGVyQ2FzZSgpICsgZXZlbnQuc2xpY2UoMSk7XG4gIHZhciBvbkV2ZW50ID0gJ29uJyArIGNhcGl0YWxpemVkRXZlbnQ7XG4gIHZhciB0b3BFdmVudCA9ICd0b3AnICsgY2FwaXRhbGl6ZWRFdmVudDtcblxuICB2YXIgdHlwZSA9IHtcbiAgICBwaGFzZWRSZWdpc3RyYXRpb25OYW1lczoge1xuICAgICAgYnViYmxlZDogb25FdmVudCxcbiAgICAgIGNhcHR1cmVkOiBvbkV2ZW50ICsgJ0NhcHR1cmUnXG4gICAgfSxcbiAgICBkZXBlbmRlbmNpZXM6IFt0b3BFdmVudF1cbiAgfTtcbiAgZXZlbnRUeXBlc1tldmVudF0gPSB0eXBlO1xuICB0b3BMZXZlbEV2ZW50c1RvRGlzcGF0Y2hDb25maWdbdG9wRXZlbnRdID0gdHlwZTtcbn0pO1xuXG52YXIgb25DbGlja0xpc3RlbmVycyA9IHt9O1xuXG5mdW5jdGlvbiBnZXREaWN0aW9uYXJ5S2V5KGluc3QpIHtcbiAgLy8gUHJldmVudHMgVjggcGVyZm9ybWFuY2UgaXNzdWU6XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9wdWxsLzcyMzJcbiAgcmV0dXJuICcuJyArIGluc3QuX3Jvb3ROb2RlSUQ7XG59XG5cbmZ1bmN0aW9uIGlzSW50ZXJhY3RpdmUodGFnKSB7XG4gIHJldHVybiB0YWcgPT09ICdidXR0b24nIHx8IHRhZyA9PT0gJ2lucHV0JyB8fCB0YWcgPT09ICdzZWxlY3QnIHx8IHRhZyA9PT0gJ3RleHRhcmVhJztcbn1cblxudmFyIFNpbXBsZUV2ZW50UGx1Z2luID0ge1xuICBldmVudFR5cGVzOiBldmVudFR5cGVzLFxuXG4gIGV4dHJhY3RFdmVudHM6IGZ1bmN0aW9uICh0b3BMZXZlbFR5cGUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCkge1xuICAgIHZhciBkaXNwYXRjaENvbmZpZyA9IHRvcExldmVsRXZlbnRzVG9EaXNwYXRjaENvbmZpZ1t0b3BMZXZlbFR5cGVdO1xuICAgIGlmICghZGlzcGF0Y2hDb25maWcpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICB2YXIgRXZlbnRDb25zdHJ1Y3RvcjtcbiAgICBzd2l0Y2ggKHRvcExldmVsVHlwZSkge1xuICAgICAgY2FzZSAndG9wQWJvcnQnOlxuICAgICAgY2FzZSAndG9wQ2FuUGxheSc6XG4gICAgICBjYXNlICd0b3BDYW5QbGF5VGhyb3VnaCc6XG4gICAgICBjYXNlICd0b3BEdXJhdGlvbkNoYW5nZSc6XG4gICAgICBjYXNlICd0b3BFbXB0aWVkJzpcbiAgICAgIGNhc2UgJ3RvcEVuY3J5cHRlZCc6XG4gICAgICBjYXNlICd0b3BFbmRlZCc6XG4gICAgICBjYXNlICd0b3BFcnJvcic6XG4gICAgICBjYXNlICd0b3BJbnB1dCc6XG4gICAgICBjYXNlICd0b3BJbnZhbGlkJzpcbiAgICAgIGNhc2UgJ3RvcExvYWQnOlxuICAgICAgY2FzZSAndG9wTG9hZGVkRGF0YSc6XG4gICAgICBjYXNlICd0b3BMb2FkZWRNZXRhZGF0YSc6XG4gICAgICBjYXNlICd0b3BMb2FkU3RhcnQnOlxuICAgICAgY2FzZSAndG9wUGF1c2UnOlxuICAgICAgY2FzZSAndG9wUGxheSc6XG4gICAgICBjYXNlICd0b3BQbGF5aW5nJzpcbiAgICAgIGNhc2UgJ3RvcFByb2dyZXNzJzpcbiAgICAgIGNhc2UgJ3RvcFJhdGVDaGFuZ2UnOlxuICAgICAgY2FzZSAndG9wUmVzZXQnOlxuICAgICAgY2FzZSAndG9wU2Vla2VkJzpcbiAgICAgIGNhc2UgJ3RvcFNlZWtpbmcnOlxuICAgICAgY2FzZSAndG9wU3RhbGxlZCc6XG4gICAgICBjYXNlICd0b3BTdWJtaXQnOlxuICAgICAgY2FzZSAndG9wU3VzcGVuZCc6XG4gICAgICBjYXNlICd0b3BUaW1lVXBkYXRlJzpcbiAgICAgIGNhc2UgJ3RvcFZvbHVtZUNoYW5nZSc6XG4gICAgICBjYXNlICd0b3BXYWl0aW5nJzpcbiAgICAgICAgLy8gSFRNTCBFdmVudHNcbiAgICAgICAgLy8gQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNS9pbmRleC5odG1sI2V2ZW50cy0wXG4gICAgICAgIEV2ZW50Q29uc3RydWN0b3IgPSBTeW50aGV0aWNFdmVudDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICd0b3BLZXlQcmVzcyc6XG4gICAgICAgIC8vIEZpcmVmb3ggY3JlYXRlcyBhIGtleXByZXNzIGV2ZW50IGZvciBmdW5jdGlvbiBrZXlzIHRvby4gVGhpcyByZW1vdmVzXG4gICAgICAgIC8vIHRoZSB1bndhbnRlZCBrZXlwcmVzcyBldmVudHMuIEVudGVyIGlzIGhvd2V2ZXIgYm90aCBwcmludGFibGUgYW5kXG4gICAgICAgIC8vIG5vbi1wcmludGFibGUuIE9uZSB3b3VsZCBleHBlY3QgVGFiIHRvIGJlIGFzIHdlbGwgKGJ1dCBpdCBpc24ndCkuXG4gICAgICAgIGlmIChnZXRFdmVudENoYXJDb2RlKG5hdGl2ZUV2ZW50KSA9PT0gMCkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAvKiBmYWxscyB0aHJvdWdoICovXG4gICAgICBjYXNlICd0b3BLZXlEb3duJzpcbiAgICAgIGNhc2UgJ3RvcEtleVVwJzpcbiAgICAgICAgRXZlbnRDb25zdHJ1Y3RvciA9IFN5bnRoZXRpY0tleWJvYXJkRXZlbnQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAndG9wQmx1cic6XG4gICAgICBjYXNlICd0b3BGb2N1cyc6XG4gICAgICAgIEV2ZW50Q29uc3RydWN0b3IgPSBTeW50aGV0aWNGb2N1c0V2ZW50O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3RvcENsaWNrJzpcbiAgICAgICAgLy8gRmlyZWZveCBjcmVhdGVzIGEgY2xpY2sgZXZlbnQgb24gcmlnaHQgbW91c2UgY2xpY2tzLiBUaGlzIHJlbW92ZXMgdGhlXG4gICAgICAgIC8vIHVud2FudGVkIGNsaWNrIGV2ZW50cy5cbiAgICAgICAgaWYgKG5hdGl2ZUV2ZW50LmJ1dHRvbiA9PT0gMikge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAvKiBmYWxscyB0aHJvdWdoICovXG4gICAgICBjYXNlICd0b3BEb3VibGVDbGljayc6XG4gICAgICBjYXNlICd0b3BNb3VzZURvd24nOlxuICAgICAgY2FzZSAndG9wTW91c2VNb3ZlJzpcbiAgICAgIGNhc2UgJ3RvcE1vdXNlVXAnOlxuICAgICAgLy8gVE9ETzogRGlzYWJsZWQgZWxlbWVudHMgc2hvdWxkIG5vdCByZXNwb25kIHRvIG1vdXNlIGV2ZW50c1xuICAgICAgLyogZmFsbHMgdGhyb3VnaCAqL1xuICAgICAgY2FzZSAndG9wTW91c2VPdXQnOlxuICAgICAgY2FzZSAndG9wTW91c2VPdmVyJzpcbiAgICAgIGNhc2UgJ3RvcENvbnRleHRNZW51JzpcbiAgICAgICAgRXZlbnRDb25zdHJ1Y3RvciA9IFN5bnRoZXRpY01vdXNlRXZlbnQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAndG9wRHJhZyc6XG4gICAgICBjYXNlICd0b3BEcmFnRW5kJzpcbiAgICAgIGNhc2UgJ3RvcERyYWdFbnRlcic6XG4gICAgICBjYXNlICd0b3BEcmFnRXhpdCc6XG4gICAgICBjYXNlICd0b3BEcmFnTGVhdmUnOlxuICAgICAgY2FzZSAndG9wRHJhZ092ZXInOlxuICAgICAgY2FzZSAndG9wRHJhZ1N0YXJ0JzpcbiAgICAgIGNhc2UgJ3RvcERyb3AnOlxuICAgICAgICBFdmVudENvbnN0cnVjdG9yID0gU3ludGhldGljRHJhZ0V2ZW50O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3RvcFRvdWNoQ2FuY2VsJzpcbiAgICAgIGNhc2UgJ3RvcFRvdWNoRW5kJzpcbiAgICAgIGNhc2UgJ3RvcFRvdWNoTW92ZSc6XG4gICAgICBjYXNlICd0b3BUb3VjaFN0YXJ0JzpcbiAgICAgICAgRXZlbnRDb25zdHJ1Y3RvciA9IFN5bnRoZXRpY1RvdWNoRXZlbnQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAndG9wQW5pbWF0aW9uRW5kJzpcbiAgICAgIGNhc2UgJ3RvcEFuaW1hdGlvbkl0ZXJhdGlvbic6XG4gICAgICBjYXNlICd0b3BBbmltYXRpb25TdGFydCc6XG4gICAgICAgIEV2ZW50Q29uc3RydWN0b3IgPSBTeW50aGV0aWNBbmltYXRpb25FdmVudDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICd0b3BUcmFuc2l0aW9uRW5kJzpcbiAgICAgICAgRXZlbnRDb25zdHJ1Y3RvciA9IFN5bnRoZXRpY1RyYW5zaXRpb25FdmVudDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICd0b3BTY3JvbGwnOlxuICAgICAgICBFdmVudENvbnN0cnVjdG9yID0gU3ludGhldGljVUlFdmVudDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICd0b3BXaGVlbCc6XG4gICAgICAgIEV2ZW50Q29uc3RydWN0b3IgPSBTeW50aGV0aWNXaGVlbEV2ZW50O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3RvcENvcHknOlxuICAgICAgY2FzZSAndG9wQ3V0JzpcbiAgICAgIGNhc2UgJ3RvcFBhc3RlJzpcbiAgICAgICAgRXZlbnRDb25zdHJ1Y3RvciA9IFN5bnRoZXRpY0NsaXBib2FyZEV2ZW50O1xuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgIUV2ZW50Q29uc3RydWN0b3IgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAnU2ltcGxlRXZlbnRQbHVnaW46IFVuaGFuZGxlZCBldmVudCB0eXBlLCBgJXNgLicsIHRvcExldmVsVHlwZSkgOiBfcHJvZEludmFyaWFudCgnODYnLCB0b3BMZXZlbFR5cGUpIDogdm9pZCAwO1xuICAgIHZhciBldmVudCA9IEV2ZW50Q29uc3RydWN0b3IuZ2V0UG9vbGVkKGRpc3BhdGNoQ29uZmlnLCB0YXJnZXRJbnN0LCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpO1xuICAgIEV2ZW50UHJvcGFnYXRvcnMuYWNjdW11bGF0ZVR3b1BoYXNlRGlzcGF0Y2hlcyhldmVudCk7XG4gICAgcmV0dXJuIGV2ZW50O1xuICB9LFxuXG4gIGRpZFB1dExpc3RlbmVyOiBmdW5jdGlvbiAoaW5zdCwgcmVnaXN0cmF0aW9uTmFtZSwgbGlzdGVuZXIpIHtcbiAgICAvLyBNb2JpbGUgU2FmYXJpIGRvZXMgbm90IGZpcmUgcHJvcGVybHkgYnViYmxlIGNsaWNrIGV2ZW50cyBvblxuICAgIC8vIG5vbi1pbnRlcmFjdGl2ZSBlbGVtZW50cywgd2hpY2ggbWVhbnMgZGVsZWdhdGVkIGNsaWNrIGxpc3RlbmVycyBkbyBub3RcbiAgICAvLyBmaXJlLiBUaGUgd29ya2Fyb3VuZCBmb3IgdGhpcyBidWcgaW52b2x2ZXMgYXR0YWNoaW5nIGFuIGVtcHR5IGNsaWNrXG4gICAgLy8gbGlzdGVuZXIgb24gdGhlIHRhcmdldCBub2RlLlxuICAgIC8vIGh0dHA6Ly93d3cucXVpcmtzbW9kZS5vcmcvYmxvZy9hcmNoaXZlcy8yMDEwLzA5L2NsaWNrX2V2ZW50X2RlbC5odG1sXG4gICAgaWYgKHJlZ2lzdHJhdGlvbk5hbWUgPT09ICdvbkNsaWNrJyAmJiAhaXNJbnRlcmFjdGl2ZShpbnN0Ll90YWcpKSB7XG4gICAgICB2YXIga2V5ID0gZ2V0RGljdGlvbmFyeUtleShpbnN0KTtcbiAgICAgIHZhciBub2RlID0gUmVhY3RET01Db21wb25lbnRUcmVlLmdldE5vZGVGcm9tSW5zdGFuY2UoaW5zdCk7XG4gICAgICBpZiAoIW9uQ2xpY2tMaXN0ZW5lcnNba2V5XSkge1xuICAgICAgICBvbkNsaWNrTGlzdGVuZXJzW2tleV0gPSBFdmVudExpc3RlbmVyLmxpc3Rlbihub2RlLCAnY2xpY2snLCBlbXB0eUZ1bmN0aW9uKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgd2lsbERlbGV0ZUxpc3RlbmVyOiBmdW5jdGlvbiAoaW5zdCwgcmVnaXN0cmF0aW9uTmFtZSkge1xuICAgIGlmIChyZWdpc3RyYXRpb25OYW1lID09PSAnb25DbGljaycgJiYgIWlzSW50ZXJhY3RpdmUoaW5zdC5fdGFnKSkge1xuICAgICAgdmFyIGtleSA9IGdldERpY3Rpb25hcnlLZXkoaW5zdCk7XG4gICAgICBvbkNsaWNrTGlzdGVuZXJzW2tleV0ucmVtb3ZlKCk7XG4gICAgICBkZWxldGUgb25DbGlja0xpc3RlbmVyc1trZXldO1xuICAgIH1cbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBTaW1wbGVFdmVudFBsdWdpbjtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3JlYWN0LWRvbS9saWIvU2ltcGxlRXZlbnRQbHVnaW4uanMiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgU3ludGhldGljRXZlbnQgPSByZXF1aXJlKCcuL1N5bnRoZXRpY0V2ZW50Jyk7XG5cbi8qKlxuICogQGludGVyZmFjZSBFdmVudFxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9jc3MzLWFuaW1hdGlvbnMvI0FuaW1hdGlvbkV2ZW50LWludGVyZmFjZVxuICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvQW5pbWF0aW9uRXZlbnRcbiAqL1xudmFyIEFuaW1hdGlvbkV2ZW50SW50ZXJmYWNlID0ge1xuICBhbmltYXRpb25OYW1lOiBudWxsLFxuICBlbGFwc2VkVGltZTogbnVsbCxcbiAgcHNldWRvRWxlbWVudDogbnVsbFxufTtcblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gZGlzcGF0Y2hDb25maWcgQ29uZmlndXJhdGlvbiB1c2VkIHRvIGRpc3BhdGNoIHRoaXMgZXZlbnQuXG4gKiBAcGFyYW0ge3N0cmluZ30gZGlzcGF0Y2hNYXJrZXIgTWFya2VyIGlkZW50aWZ5aW5nIHRoZSBldmVudCB0YXJnZXQuXG4gKiBAcGFyYW0ge29iamVjdH0gbmF0aXZlRXZlbnQgTmF0aXZlIGJyb3dzZXIgZXZlbnQuXG4gKiBAZXh0ZW5kcyB7U3ludGhldGljRXZlbnR9XG4gKi9cbmZ1bmN0aW9uIFN5bnRoZXRpY0FuaW1hdGlvbkV2ZW50KGRpc3BhdGNoQ29uZmlnLCBkaXNwYXRjaE1hcmtlciwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KSB7XG4gIHJldHVybiBTeW50aGV0aWNFdmVudC5jYWxsKHRoaXMsIGRpc3BhdGNoQ29uZmlnLCBkaXNwYXRjaE1hcmtlciwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KTtcbn1cblxuU3ludGhldGljRXZlbnQuYXVnbWVudENsYXNzKFN5bnRoZXRpY0FuaW1hdGlvbkV2ZW50LCBBbmltYXRpb25FdmVudEludGVyZmFjZSk7XG5cbm1vZHVsZS5leHBvcnRzID0gU3ludGhldGljQW5pbWF0aW9uRXZlbnQ7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1kb20vbGliL1N5bnRoZXRpY0FuaW1hdGlvbkV2ZW50LmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFN5bnRoZXRpY0V2ZW50ID0gcmVxdWlyZSgnLi9TeW50aGV0aWNFdmVudCcpO1xuXG4vKipcbiAqIEBpbnRlcmZhY2UgRXZlbnRcbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvY2xpcGJvYXJkLWFwaXMvXG4gKi9cbnZhciBDbGlwYm9hcmRFdmVudEludGVyZmFjZSA9IHtcbiAgY2xpcGJvYXJkRGF0YTogZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgcmV0dXJuICdjbGlwYm9hcmREYXRhJyBpbiBldmVudCA/IGV2ZW50LmNsaXBib2FyZERhdGEgOiB3aW5kb3cuY2xpcGJvYXJkRGF0YTtcbiAgfVxufTtcblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gZGlzcGF0Y2hDb25maWcgQ29uZmlndXJhdGlvbiB1c2VkIHRvIGRpc3BhdGNoIHRoaXMgZXZlbnQuXG4gKiBAcGFyYW0ge3N0cmluZ30gZGlzcGF0Y2hNYXJrZXIgTWFya2VyIGlkZW50aWZ5aW5nIHRoZSBldmVudCB0YXJnZXQuXG4gKiBAcGFyYW0ge29iamVjdH0gbmF0aXZlRXZlbnQgTmF0aXZlIGJyb3dzZXIgZXZlbnQuXG4gKiBAZXh0ZW5kcyB7U3ludGhldGljVUlFdmVudH1cbiAqL1xuZnVuY3Rpb24gU3ludGhldGljQ2xpcGJvYXJkRXZlbnQoZGlzcGF0Y2hDb25maWcsIGRpc3BhdGNoTWFya2VyLCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpIHtcbiAgcmV0dXJuIFN5bnRoZXRpY0V2ZW50LmNhbGwodGhpcywgZGlzcGF0Y2hDb25maWcsIGRpc3BhdGNoTWFya2VyLCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpO1xufVxuXG5TeW50aGV0aWNFdmVudC5hdWdtZW50Q2xhc3MoU3ludGhldGljQ2xpcGJvYXJkRXZlbnQsIENsaXBib2FyZEV2ZW50SW50ZXJmYWNlKTtcblxubW9kdWxlLmV4cG9ydHMgPSBTeW50aGV0aWNDbGlwYm9hcmRFdmVudDtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3JlYWN0LWRvbS9saWIvU3ludGhldGljQ2xpcGJvYXJkRXZlbnQuanMiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgU3ludGhldGljRXZlbnQgPSByZXF1aXJlKCcuL1N5bnRoZXRpY0V2ZW50Jyk7XG5cbi8qKlxuICogQGludGVyZmFjZSBFdmVudFxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1FdmVudHMvI2V2ZW50cy1jb21wb3NpdGlvbmV2ZW50c1xuICovXG52YXIgQ29tcG9zaXRpb25FdmVudEludGVyZmFjZSA9IHtcbiAgZGF0YTogbnVsbFxufTtcblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gZGlzcGF0Y2hDb25maWcgQ29uZmlndXJhdGlvbiB1c2VkIHRvIGRpc3BhdGNoIHRoaXMgZXZlbnQuXG4gKiBAcGFyYW0ge3N0cmluZ30gZGlzcGF0Y2hNYXJrZXIgTWFya2VyIGlkZW50aWZ5aW5nIHRoZSBldmVudCB0YXJnZXQuXG4gKiBAcGFyYW0ge29iamVjdH0gbmF0aXZlRXZlbnQgTmF0aXZlIGJyb3dzZXIgZXZlbnQuXG4gKiBAZXh0ZW5kcyB7U3ludGhldGljVUlFdmVudH1cbiAqL1xuZnVuY3Rpb24gU3ludGhldGljQ29tcG9zaXRpb25FdmVudChkaXNwYXRjaENvbmZpZywgZGlzcGF0Y2hNYXJrZXIsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCkge1xuICByZXR1cm4gU3ludGhldGljRXZlbnQuY2FsbCh0aGlzLCBkaXNwYXRjaENvbmZpZywgZGlzcGF0Y2hNYXJrZXIsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCk7XG59XG5cblN5bnRoZXRpY0V2ZW50LmF1Z21lbnRDbGFzcyhTeW50aGV0aWNDb21wb3NpdGlvbkV2ZW50LCBDb21wb3NpdGlvbkV2ZW50SW50ZXJmYWNlKTtcblxubW9kdWxlLmV4cG9ydHMgPSBTeW50aGV0aWNDb21wb3NpdGlvbkV2ZW50O1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QtZG9tL2xpYi9TeW50aGV0aWNDb21wb3NpdGlvbkV2ZW50LmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFN5bnRoZXRpY01vdXNlRXZlbnQgPSByZXF1aXJlKCcuL1N5bnRoZXRpY01vdXNlRXZlbnQnKTtcblxuLyoqXG4gKiBAaW50ZXJmYWNlIERyYWdFdmVudFxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1FdmVudHMvXG4gKi9cbnZhciBEcmFnRXZlbnRJbnRlcmZhY2UgPSB7XG4gIGRhdGFUcmFuc2ZlcjogbnVsbFxufTtcblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gZGlzcGF0Y2hDb25maWcgQ29uZmlndXJhdGlvbiB1c2VkIHRvIGRpc3BhdGNoIHRoaXMgZXZlbnQuXG4gKiBAcGFyYW0ge3N0cmluZ30gZGlzcGF0Y2hNYXJrZXIgTWFya2VyIGlkZW50aWZ5aW5nIHRoZSBldmVudCB0YXJnZXQuXG4gKiBAcGFyYW0ge29iamVjdH0gbmF0aXZlRXZlbnQgTmF0aXZlIGJyb3dzZXIgZXZlbnQuXG4gKiBAZXh0ZW5kcyB7U3ludGhldGljVUlFdmVudH1cbiAqL1xuZnVuY3Rpb24gU3ludGhldGljRHJhZ0V2ZW50KGRpc3BhdGNoQ29uZmlnLCBkaXNwYXRjaE1hcmtlciwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KSB7XG4gIHJldHVybiBTeW50aGV0aWNNb3VzZUV2ZW50LmNhbGwodGhpcywgZGlzcGF0Y2hDb25maWcsIGRpc3BhdGNoTWFya2VyLCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpO1xufVxuXG5TeW50aGV0aWNNb3VzZUV2ZW50LmF1Z21lbnRDbGFzcyhTeW50aGV0aWNEcmFnRXZlbnQsIERyYWdFdmVudEludGVyZmFjZSk7XG5cbm1vZHVsZS5leHBvcnRzID0gU3ludGhldGljRHJhZ0V2ZW50O1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QtZG9tL2xpYi9TeW50aGV0aWNEcmFnRXZlbnQuanMiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgU3ludGhldGljVUlFdmVudCA9IHJlcXVpcmUoJy4vU3ludGhldGljVUlFdmVudCcpO1xuXG4vKipcbiAqIEBpbnRlcmZhY2UgRm9jdXNFdmVudFxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1FdmVudHMvXG4gKi9cbnZhciBGb2N1c0V2ZW50SW50ZXJmYWNlID0ge1xuICByZWxhdGVkVGFyZ2V0OiBudWxsXG59O1xuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSBkaXNwYXRjaENvbmZpZyBDb25maWd1cmF0aW9uIHVzZWQgdG8gZGlzcGF0Y2ggdGhpcyBldmVudC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBkaXNwYXRjaE1hcmtlciBNYXJrZXIgaWRlbnRpZnlpbmcgdGhlIGV2ZW50IHRhcmdldC5cbiAqIEBwYXJhbSB7b2JqZWN0fSBuYXRpdmVFdmVudCBOYXRpdmUgYnJvd3NlciBldmVudC5cbiAqIEBleHRlbmRzIHtTeW50aGV0aWNVSUV2ZW50fVxuICovXG5mdW5jdGlvbiBTeW50aGV0aWNGb2N1c0V2ZW50KGRpc3BhdGNoQ29uZmlnLCBkaXNwYXRjaE1hcmtlciwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KSB7XG4gIHJldHVybiBTeW50aGV0aWNVSUV2ZW50LmNhbGwodGhpcywgZGlzcGF0Y2hDb25maWcsIGRpc3BhdGNoTWFya2VyLCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpO1xufVxuXG5TeW50aGV0aWNVSUV2ZW50LmF1Z21lbnRDbGFzcyhTeW50aGV0aWNGb2N1c0V2ZW50LCBGb2N1c0V2ZW50SW50ZXJmYWNlKTtcblxubW9kdWxlLmV4cG9ydHMgPSBTeW50aGV0aWNGb2N1c0V2ZW50O1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QtZG9tL2xpYi9TeW50aGV0aWNGb2N1c0V2ZW50LmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFN5bnRoZXRpY0V2ZW50ID0gcmVxdWlyZSgnLi9TeW50aGV0aWNFdmVudCcpO1xuXG4vKipcbiAqIEBpbnRlcmZhY2UgRXZlbnRcbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMy9XRC1ET00tTGV2ZWwtMy1FdmVudHMtMjAxMzExMDVcbiAqICAgICAgLyNldmVudHMtaW5wdXRldmVudHNcbiAqL1xudmFyIElucHV0RXZlbnRJbnRlcmZhY2UgPSB7XG4gIGRhdGE6IG51bGxcbn07XG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IGRpc3BhdGNoQ29uZmlnIENvbmZpZ3VyYXRpb24gdXNlZCB0byBkaXNwYXRjaCB0aGlzIGV2ZW50LlxuICogQHBhcmFtIHtzdHJpbmd9IGRpc3BhdGNoTWFya2VyIE1hcmtlciBpZGVudGlmeWluZyB0aGUgZXZlbnQgdGFyZ2V0LlxuICogQHBhcmFtIHtvYmplY3R9IG5hdGl2ZUV2ZW50IE5hdGl2ZSBicm93c2VyIGV2ZW50LlxuICogQGV4dGVuZHMge1N5bnRoZXRpY1VJRXZlbnR9XG4gKi9cbmZ1bmN0aW9uIFN5bnRoZXRpY0lucHV0RXZlbnQoZGlzcGF0Y2hDb25maWcsIGRpc3BhdGNoTWFya2VyLCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpIHtcbiAgcmV0dXJuIFN5bnRoZXRpY0V2ZW50LmNhbGwodGhpcywgZGlzcGF0Y2hDb25maWcsIGRpc3BhdGNoTWFya2VyLCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpO1xufVxuXG5TeW50aGV0aWNFdmVudC5hdWdtZW50Q2xhc3MoU3ludGhldGljSW5wdXRFdmVudCwgSW5wdXRFdmVudEludGVyZmFjZSk7XG5cbm1vZHVsZS5leHBvcnRzID0gU3ludGhldGljSW5wdXRFdmVudDtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3JlYWN0LWRvbS9saWIvU3ludGhldGljSW5wdXRFdmVudC5qcyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBTeW50aGV0aWNVSUV2ZW50ID0gcmVxdWlyZSgnLi9TeW50aGV0aWNVSUV2ZW50Jyk7XG5cbnZhciBnZXRFdmVudENoYXJDb2RlID0gcmVxdWlyZSgnLi9nZXRFdmVudENoYXJDb2RlJyk7XG52YXIgZ2V0RXZlbnRLZXkgPSByZXF1aXJlKCcuL2dldEV2ZW50S2V5Jyk7XG52YXIgZ2V0RXZlbnRNb2RpZmllclN0YXRlID0gcmVxdWlyZSgnLi9nZXRFdmVudE1vZGlmaWVyU3RhdGUnKTtcblxuLyoqXG4gKiBAaW50ZXJmYWNlIEtleWJvYXJkRXZlbnRcbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTMtRXZlbnRzL1xuICovXG52YXIgS2V5Ym9hcmRFdmVudEludGVyZmFjZSA9IHtcbiAga2V5OiBnZXRFdmVudEtleSxcbiAgbG9jYXRpb246IG51bGwsXG4gIGN0cmxLZXk6IG51bGwsXG4gIHNoaWZ0S2V5OiBudWxsLFxuICBhbHRLZXk6IG51bGwsXG4gIG1ldGFLZXk6IG51bGwsXG4gIHJlcGVhdDogbnVsbCxcbiAgbG9jYWxlOiBudWxsLFxuICBnZXRNb2RpZmllclN0YXRlOiBnZXRFdmVudE1vZGlmaWVyU3RhdGUsXG4gIC8vIExlZ2FjeSBJbnRlcmZhY2VcbiAgY2hhckNvZGU6IGZ1bmN0aW9uIChldmVudCkge1xuICAgIC8vIGBjaGFyQ29kZWAgaXMgdGhlIHJlc3VsdCBvZiBhIEtleVByZXNzIGV2ZW50IGFuZCByZXByZXNlbnRzIHRoZSB2YWx1ZSBvZlxuICAgIC8vIHRoZSBhY3R1YWwgcHJpbnRhYmxlIGNoYXJhY3Rlci5cblxuICAgIC8vIEtleVByZXNzIGlzIGRlcHJlY2F0ZWQsIGJ1dCBpdHMgcmVwbGFjZW1lbnQgaXMgbm90IHlldCBmaW5hbCBhbmQgbm90XG4gICAgLy8gaW1wbGVtZW50ZWQgaW4gYW55IG1ham9yIGJyb3dzZXIuIE9ubHkgS2V5UHJlc3MgaGFzIGNoYXJDb2RlLlxuICAgIGlmIChldmVudC50eXBlID09PSAna2V5cHJlc3MnKSB7XG4gICAgICByZXR1cm4gZ2V0RXZlbnRDaGFyQ29kZShldmVudCk7XG4gICAgfVxuICAgIHJldHVybiAwO1xuICB9LFxuICBrZXlDb2RlOiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAvLyBga2V5Q29kZWAgaXMgdGhlIHJlc3VsdCBvZiBhIEtleURvd24vVXAgZXZlbnQgYW5kIHJlcHJlc2VudHMgdGhlIHZhbHVlIG9mXG4gICAgLy8gcGh5c2ljYWwga2V5Ym9hcmQga2V5LlxuXG4gICAgLy8gVGhlIGFjdHVhbCBtZWFuaW5nIG9mIHRoZSB2YWx1ZSBkZXBlbmRzIG9uIHRoZSB1c2Vycycga2V5Ym9hcmQgbGF5b3V0XG4gICAgLy8gd2hpY2ggY2Fubm90IGJlIGRldGVjdGVkLiBBc3N1bWluZyB0aGF0IGl0IGlzIGEgVVMga2V5Ym9hcmQgbGF5b3V0XG4gICAgLy8gcHJvdmlkZXMgYSBzdXJwcmlzaW5nbHkgYWNjdXJhdGUgbWFwcGluZyBmb3IgVVMgYW5kIEV1cm9wZWFuIHVzZXJzLlxuICAgIC8vIER1ZSB0byB0aGlzLCBpdCBpcyBsZWZ0IHRvIHRoZSB1c2VyIHRvIGltcGxlbWVudCBhdCB0aGlzIHRpbWUuXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09ICdrZXlkb3duJyB8fCBldmVudC50eXBlID09PSAna2V5dXAnKSB7XG4gICAgICByZXR1cm4gZXZlbnQua2V5Q29kZTtcbiAgICB9XG4gICAgcmV0dXJuIDA7XG4gIH0sXG4gIHdoaWNoOiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAvLyBgd2hpY2hgIGlzIGFuIGFsaWFzIGZvciBlaXRoZXIgYGtleUNvZGVgIG9yIGBjaGFyQ29kZWAgZGVwZW5kaW5nIG9uIHRoZVxuICAgIC8vIHR5cGUgb2YgdGhlIGV2ZW50LlxuICAgIGlmIChldmVudC50eXBlID09PSAna2V5cHJlc3MnKSB7XG4gICAgICByZXR1cm4gZ2V0RXZlbnRDaGFyQ29kZShldmVudCk7XG4gICAgfVxuICAgIGlmIChldmVudC50eXBlID09PSAna2V5ZG93bicgfHwgZXZlbnQudHlwZSA9PT0gJ2tleXVwJykge1xuICAgICAgcmV0dXJuIGV2ZW50LmtleUNvZGU7XG4gICAgfVxuICAgIHJldHVybiAwO1xuICB9XG59O1xuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSBkaXNwYXRjaENvbmZpZyBDb25maWd1cmF0aW9uIHVzZWQgdG8gZGlzcGF0Y2ggdGhpcyBldmVudC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBkaXNwYXRjaE1hcmtlciBNYXJrZXIgaWRlbnRpZnlpbmcgdGhlIGV2ZW50IHRhcmdldC5cbiAqIEBwYXJhbSB7b2JqZWN0fSBuYXRpdmVFdmVudCBOYXRpdmUgYnJvd3NlciBldmVudC5cbiAqIEBleHRlbmRzIHtTeW50aGV0aWNVSUV2ZW50fVxuICovXG5mdW5jdGlvbiBTeW50aGV0aWNLZXlib2FyZEV2ZW50KGRpc3BhdGNoQ29uZmlnLCBkaXNwYXRjaE1hcmtlciwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KSB7XG4gIHJldHVybiBTeW50aGV0aWNVSUV2ZW50LmNhbGwodGhpcywgZGlzcGF0Y2hDb25maWcsIGRpc3BhdGNoTWFya2VyLCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpO1xufVxuXG5TeW50aGV0aWNVSUV2ZW50LmF1Z21lbnRDbGFzcyhTeW50aGV0aWNLZXlib2FyZEV2ZW50LCBLZXlib2FyZEV2ZW50SW50ZXJmYWNlKTtcblxubW9kdWxlLmV4cG9ydHMgPSBTeW50aGV0aWNLZXlib2FyZEV2ZW50O1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QtZG9tL2xpYi9TeW50aGV0aWNLZXlib2FyZEV2ZW50LmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFN5bnRoZXRpY1VJRXZlbnQgPSByZXF1aXJlKCcuL1N5bnRoZXRpY1VJRXZlbnQnKTtcblxudmFyIGdldEV2ZW50TW9kaWZpZXJTdGF0ZSA9IHJlcXVpcmUoJy4vZ2V0RXZlbnRNb2RpZmllclN0YXRlJyk7XG5cbi8qKlxuICogQGludGVyZmFjZSBUb3VjaEV2ZW50XG4gKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL3RvdWNoLWV2ZW50cy9cbiAqL1xudmFyIFRvdWNoRXZlbnRJbnRlcmZhY2UgPSB7XG4gIHRvdWNoZXM6IG51bGwsXG4gIHRhcmdldFRvdWNoZXM6IG51bGwsXG4gIGNoYW5nZWRUb3VjaGVzOiBudWxsLFxuICBhbHRLZXk6IG51bGwsXG4gIG1ldGFLZXk6IG51bGwsXG4gIGN0cmxLZXk6IG51bGwsXG4gIHNoaWZ0S2V5OiBudWxsLFxuICBnZXRNb2RpZmllclN0YXRlOiBnZXRFdmVudE1vZGlmaWVyU3RhdGVcbn07XG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IGRpc3BhdGNoQ29uZmlnIENvbmZpZ3VyYXRpb24gdXNlZCB0byBkaXNwYXRjaCB0aGlzIGV2ZW50LlxuICogQHBhcmFtIHtzdHJpbmd9IGRpc3BhdGNoTWFya2VyIE1hcmtlciBpZGVudGlmeWluZyB0aGUgZXZlbnQgdGFyZ2V0LlxuICogQHBhcmFtIHtvYmplY3R9IG5hdGl2ZUV2ZW50IE5hdGl2ZSBicm93c2VyIGV2ZW50LlxuICogQGV4dGVuZHMge1N5bnRoZXRpY1VJRXZlbnR9XG4gKi9cbmZ1bmN0aW9uIFN5bnRoZXRpY1RvdWNoRXZlbnQoZGlzcGF0Y2hDb25maWcsIGRpc3BhdGNoTWFya2VyLCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpIHtcbiAgcmV0dXJuIFN5bnRoZXRpY1VJRXZlbnQuY2FsbCh0aGlzLCBkaXNwYXRjaENvbmZpZywgZGlzcGF0Y2hNYXJrZXIsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCk7XG59XG5cblN5bnRoZXRpY1VJRXZlbnQuYXVnbWVudENsYXNzKFN5bnRoZXRpY1RvdWNoRXZlbnQsIFRvdWNoRXZlbnRJbnRlcmZhY2UpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN5bnRoZXRpY1RvdWNoRXZlbnQ7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1kb20vbGliL1N5bnRoZXRpY1RvdWNoRXZlbnQuanMiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgU3ludGhldGljRXZlbnQgPSByZXF1aXJlKCcuL1N5bnRoZXRpY0V2ZW50Jyk7XG5cbi8qKlxuICogQGludGVyZmFjZSBFdmVudFxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDA5L1dELWNzczMtdHJhbnNpdGlvbnMtMjAwOTAzMjAvI3RyYW5zaXRpb24tZXZlbnRzLVxuICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvVHJhbnNpdGlvbkV2ZW50XG4gKi9cbnZhciBUcmFuc2l0aW9uRXZlbnRJbnRlcmZhY2UgPSB7XG4gIHByb3BlcnR5TmFtZTogbnVsbCxcbiAgZWxhcHNlZFRpbWU6IG51bGwsXG4gIHBzZXVkb0VsZW1lbnQ6IG51bGxcbn07XG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IGRpc3BhdGNoQ29uZmlnIENvbmZpZ3VyYXRpb24gdXNlZCB0byBkaXNwYXRjaCB0aGlzIGV2ZW50LlxuICogQHBhcmFtIHtzdHJpbmd9IGRpc3BhdGNoTWFya2VyIE1hcmtlciBpZGVudGlmeWluZyB0aGUgZXZlbnQgdGFyZ2V0LlxuICogQHBhcmFtIHtvYmplY3R9IG5hdGl2ZUV2ZW50IE5hdGl2ZSBicm93c2VyIGV2ZW50LlxuICogQGV4dGVuZHMge1N5bnRoZXRpY0V2ZW50fVxuICovXG5mdW5jdGlvbiBTeW50aGV0aWNUcmFuc2l0aW9uRXZlbnQoZGlzcGF0Y2hDb25maWcsIGRpc3BhdGNoTWFya2VyLCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpIHtcbiAgcmV0dXJuIFN5bnRoZXRpY0V2ZW50LmNhbGwodGhpcywgZGlzcGF0Y2hDb25maWcsIGRpc3BhdGNoTWFya2VyLCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpO1xufVxuXG5TeW50aGV0aWNFdmVudC5hdWdtZW50Q2xhc3MoU3ludGhldGljVHJhbnNpdGlvbkV2ZW50LCBUcmFuc2l0aW9uRXZlbnRJbnRlcmZhY2UpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN5bnRoZXRpY1RyYW5zaXRpb25FdmVudDtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3JlYWN0LWRvbS9saWIvU3ludGhldGljVHJhbnNpdGlvbkV2ZW50LmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFN5bnRoZXRpY01vdXNlRXZlbnQgPSByZXF1aXJlKCcuL1N5bnRoZXRpY01vdXNlRXZlbnQnKTtcblxuLyoqXG4gKiBAaW50ZXJmYWNlIFdoZWVsRXZlbnRcbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTMtRXZlbnRzL1xuICovXG52YXIgV2hlZWxFdmVudEludGVyZmFjZSA9IHtcbiAgZGVsdGFYOiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICByZXR1cm4gJ2RlbHRhWCcgaW4gZXZlbnQgPyBldmVudC5kZWx0YVggOiAvLyBGYWxsYmFjayB0byBgd2hlZWxEZWx0YVhgIGZvciBXZWJraXQgYW5kIG5vcm1hbGl6ZSAocmlnaHQgaXMgcG9zaXRpdmUpLlxuICAgICd3aGVlbERlbHRhWCcgaW4gZXZlbnQgPyAtZXZlbnQud2hlZWxEZWx0YVggOiAwO1xuICB9LFxuICBkZWx0YVk6IGZ1bmN0aW9uIChldmVudCkge1xuICAgIHJldHVybiAnZGVsdGFZJyBpbiBldmVudCA/IGV2ZW50LmRlbHRhWSA6IC8vIEZhbGxiYWNrIHRvIGB3aGVlbERlbHRhWWAgZm9yIFdlYmtpdCBhbmQgbm9ybWFsaXplIChkb3duIGlzIHBvc2l0aXZlKS5cbiAgICAnd2hlZWxEZWx0YVknIGluIGV2ZW50ID8gLWV2ZW50LndoZWVsRGVsdGFZIDogLy8gRmFsbGJhY2sgdG8gYHdoZWVsRGVsdGFgIGZvciBJRTw5IGFuZCBub3JtYWxpemUgKGRvd24gaXMgcG9zaXRpdmUpLlxuICAgICd3aGVlbERlbHRhJyBpbiBldmVudCA/IC1ldmVudC53aGVlbERlbHRhIDogMDtcbiAgfSxcbiAgZGVsdGFaOiBudWxsLFxuXG4gIC8vIEJyb3dzZXJzIHdpdGhvdXQgXCJkZWx0YU1vZGVcIiBpcyByZXBvcnRpbmcgaW4gcmF3IHdoZWVsIGRlbHRhIHdoZXJlIG9uZVxuICAvLyBub3RjaCBvbiB0aGUgc2Nyb2xsIGlzIGFsd2F5cyArLy0gMTIwLCByb3VnaGx5IGVxdWl2YWxlbnQgdG8gcGl4ZWxzLlxuICAvLyBBIGdvb2QgYXBwcm94aW1hdGlvbiBvZiBET01fREVMVEFfTElORSAoMSkgaXMgNSUgb2Ygdmlld3BvcnQgc2l6ZSBvclxuICAvLyB+NDAgcGl4ZWxzLCBmb3IgRE9NX0RFTFRBX1NDUkVFTiAoMikgaXQgaXMgODcuNSUgb2Ygdmlld3BvcnQgc2l6ZS5cbiAgZGVsdGFNb2RlOiBudWxsXG59O1xuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSBkaXNwYXRjaENvbmZpZyBDb25maWd1cmF0aW9uIHVzZWQgdG8gZGlzcGF0Y2ggdGhpcyBldmVudC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBkaXNwYXRjaE1hcmtlciBNYXJrZXIgaWRlbnRpZnlpbmcgdGhlIGV2ZW50IHRhcmdldC5cbiAqIEBwYXJhbSB7b2JqZWN0fSBuYXRpdmVFdmVudCBOYXRpdmUgYnJvd3NlciBldmVudC5cbiAqIEBleHRlbmRzIHtTeW50aGV0aWNNb3VzZUV2ZW50fVxuICovXG5mdW5jdGlvbiBTeW50aGV0aWNXaGVlbEV2ZW50KGRpc3BhdGNoQ29uZmlnLCBkaXNwYXRjaE1hcmtlciwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KSB7XG4gIHJldHVybiBTeW50aGV0aWNNb3VzZUV2ZW50LmNhbGwodGhpcywgZGlzcGF0Y2hDb25maWcsIGRpc3BhdGNoTWFya2VyLCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpO1xufVxuXG5TeW50aGV0aWNNb3VzZUV2ZW50LmF1Z21lbnRDbGFzcyhTeW50aGV0aWNXaGVlbEV2ZW50LCBXaGVlbEV2ZW50SW50ZXJmYWNlKTtcblxubW9kdWxlLmV4cG9ydHMgPSBTeW50aGV0aWNXaGVlbEV2ZW50O1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QtZG9tL2xpYi9TeW50aGV0aWNXaGVlbEV2ZW50LmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgTU9EID0gNjU1MjE7XG5cbi8vIGFkbGVyMzIgaXMgbm90IGNyeXB0b2dyYXBoaWNhbGx5IHN0cm9uZywgYW5kIGlzIG9ubHkgdXNlZCB0byBzYW5pdHkgY2hlY2sgdGhhdFxuLy8gbWFya3VwIGdlbmVyYXRlZCBvbiB0aGUgc2VydmVyIG1hdGNoZXMgdGhlIG1hcmt1cCBnZW5lcmF0ZWQgb24gdGhlIGNsaWVudC5cbi8vIFRoaXMgaW1wbGVtZW50YXRpb24gKGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGUgU2hlZXRKUyB2ZXJzaW9uKSBoYXMgYmVlbiBvcHRpbWl6ZWRcbi8vIGZvciBvdXIgdXNlIGNhc2UsIGF0IHRoZSBleHBlbnNlIG9mIGNvbmZvcm1pbmcgdG8gdGhlIGFkbGVyMzIgc3BlY2lmaWNhdGlvblxuLy8gZm9yIG5vbi1hc2NpaSBpbnB1dHMuXG5mdW5jdGlvbiBhZGxlcjMyKGRhdGEpIHtcbiAgdmFyIGEgPSAxO1xuICB2YXIgYiA9IDA7XG4gIHZhciBpID0gMDtcbiAgdmFyIGwgPSBkYXRhLmxlbmd0aDtcbiAgdmFyIG0gPSBsICYgfjB4MztcbiAgd2hpbGUgKGkgPCBtKSB7XG4gICAgdmFyIG4gPSBNYXRoLm1pbihpICsgNDA5NiwgbSk7XG4gICAgZm9yICg7IGkgPCBuOyBpICs9IDQpIHtcbiAgICAgIGIgKz0gKGEgKz0gZGF0YS5jaGFyQ29kZUF0KGkpKSArIChhICs9IGRhdGEuY2hhckNvZGVBdChpICsgMSkpICsgKGEgKz0gZGF0YS5jaGFyQ29kZUF0KGkgKyAyKSkgKyAoYSArPSBkYXRhLmNoYXJDb2RlQXQoaSArIDMpKTtcbiAgICB9XG4gICAgYSAlPSBNT0Q7XG4gICAgYiAlPSBNT0Q7XG4gIH1cbiAgZm9yICg7IGkgPCBsOyBpKyspIHtcbiAgICBiICs9IGEgKz0gZGF0YS5jaGFyQ29kZUF0KGkpO1xuICB9XG4gIGEgJT0gTU9EO1xuICBiICU9IE1PRDtcbiAgcmV0dXJuIGEgfCBiIDw8IDE2O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFkbGVyMzI7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1kb20vbGliL2FkbGVyMzIuanMiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgX3Byb2RJbnZhcmlhbnQgPSByZXF1aXJlKCcuL3JlYWN0UHJvZEludmFyaWFudCcpO1xuXG52YXIgUmVhY3RQcm9wVHlwZUxvY2F0aW9uTmFtZXMgPSByZXF1aXJlKCcuL1JlYWN0UHJvcFR5cGVMb2NhdGlvbk5hbWVzJyk7XG52YXIgUmVhY3RQcm9wVHlwZXNTZWNyZXQgPSByZXF1aXJlKCcuL1JlYWN0UHJvcFR5cGVzU2VjcmV0Jyk7XG5cbnZhciBpbnZhcmlhbnQgPSByZXF1aXJlKCdmYmpzL2xpYi9pbnZhcmlhbnQnKTtcbnZhciB3YXJuaW5nID0gcmVxdWlyZSgnZmJqcy9saWIvd2FybmluZycpO1xuXG52YXIgUmVhY3RDb21wb25lbnRUcmVlSG9vaztcblxuaWYgKHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJyAmJiBwcm9jZXNzLmVudiAmJiBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Rlc3QnKSB7XG4gIC8vIFRlbXBvcmFyeSBoYWNrLlxuICAvLyBJbmxpbmUgcmVxdWlyZXMgZG9uJ3Qgd29yayB3ZWxsIHdpdGggSmVzdDpcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy83MjQwXG4gIC8vIFJlbW92ZSB0aGUgaW5saW5lIHJlcXVpcmVzIHdoZW4gd2UgZG9uJ3QgbmVlZCB0aGVtIGFueW1vcmU6XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9wdWxsLzcxNzhcbiAgUmVhY3RDb21wb25lbnRUcmVlSG9vayA9IHJlcXVpcmUoJ3JlYWN0L2xpYi9SZWFjdENvbXBvbmVudFRyZWVIb29rJyk7XG59XG5cbnZhciBsb2dnZWRUeXBlRmFpbHVyZXMgPSB7fTtcblxuLyoqXG4gKiBBc3NlcnQgdGhhdCB0aGUgdmFsdWVzIG1hdGNoIHdpdGggdGhlIHR5cGUgc3BlY3MuXG4gKiBFcnJvciBtZXNzYWdlcyBhcmUgbWVtb3JpemVkIGFuZCB3aWxsIG9ubHkgYmUgc2hvd24gb25jZS5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gdHlwZVNwZWNzIE1hcCBvZiBuYW1lIHRvIGEgUmVhY3RQcm9wVHlwZVxuICogQHBhcmFtIHtvYmplY3R9IHZhbHVlcyBSdW50aW1lIHZhbHVlcyB0aGF0IG5lZWQgdG8gYmUgdHlwZS1jaGVja2VkXG4gKiBAcGFyYW0ge3N0cmluZ30gbG9jYXRpb24gZS5nLiBcInByb3BcIiwgXCJjb250ZXh0XCIsIFwiY2hpbGQgY29udGV4dFwiXG4gKiBAcGFyYW0ge3N0cmluZ30gY29tcG9uZW50TmFtZSBOYW1lIG9mIHRoZSBjb21wb25lbnQgZm9yIGVycm9yIG1lc3NhZ2VzLlxuICogQHBhcmFtIHs/b2JqZWN0fSBlbGVtZW50IFRoZSBSZWFjdCBlbGVtZW50IHRoYXQgaXMgYmVpbmcgdHlwZS1jaGVja2VkXG4gKiBAcGFyYW0gez9udW1iZXJ9IGRlYnVnSUQgVGhlIFJlYWN0IGNvbXBvbmVudCBpbnN0YW5jZSB0aGF0IGlzIGJlaW5nIHR5cGUtY2hlY2tlZFxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gY2hlY2tSZWFjdFR5cGVTcGVjKHR5cGVTcGVjcywgdmFsdWVzLCBsb2NhdGlvbiwgY29tcG9uZW50TmFtZSwgZWxlbWVudCwgZGVidWdJRCkge1xuICBmb3IgKHZhciB0eXBlU3BlY05hbWUgaW4gdHlwZVNwZWNzKSB7XG4gICAgaWYgKHR5cGVTcGVjcy5oYXNPd25Qcm9wZXJ0eSh0eXBlU3BlY05hbWUpKSB7XG4gICAgICB2YXIgZXJyb3I7XG4gICAgICAvLyBQcm9wIHR5cGUgdmFsaWRhdGlvbiBtYXkgdGhyb3cuIEluIGNhc2UgdGhleSBkbywgd2UgZG9uJ3Qgd2FudCB0b1xuICAgICAgLy8gZmFpbCB0aGUgcmVuZGVyIHBoYXNlIHdoZXJlIGl0IGRpZG4ndCBmYWlsIGJlZm9yZS4gU28gd2UgbG9nIGl0LlxuICAgICAgLy8gQWZ0ZXIgdGhlc2UgaGF2ZSBiZWVuIGNsZWFuZWQgdXAsIHdlJ2xsIGxldCB0aGVtIHRocm93LlxuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gVGhpcyBpcyBpbnRlbnRpb25hbGx5IGFuIGludmFyaWFudCB0aGF0IGdldHMgY2F1Z2h0LiBJdCdzIHRoZSBzYW1lXG4gICAgICAgIC8vIGJlaGF2aW9yIGFzIHdpdGhvdXQgdGhpcyBzdGF0ZW1lbnQgZXhjZXB0IHdpdGggYSBiZXR0ZXIgbWVzc2FnZS5cbiAgICAgICAgISh0eXBlb2YgdHlwZVNwZWNzW3R5cGVTcGVjTmFtZV0gPT09ICdmdW5jdGlvbicpID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IGludmFyaWFudChmYWxzZSwgJyVzOiAlcyB0eXBlIGAlc2AgaXMgaW52YWxpZDsgaXQgbXVzdCBiZSBhIGZ1bmN0aW9uLCB1c3VhbGx5IGZyb20gUmVhY3QuUHJvcFR5cGVzLicsIGNvbXBvbmVudE5hbWUgfHwgJ1JlYWN0IGNsYXNzJywgUmVhY3RQcm9wVHlwZUxvY2F0aW9uTmFtZXNbbG9jYXRpb25dLCB0eXBlU3BlY05hbWUpIDogX3Byb2RJbnZhcmlhbnQoJzg0JywgY29tcG9uZW50TmFtZSB8fCAnUmVhY3QgY2xhc3MnLCBSZWFjdFByb3BUeXBlTG9jYXRpb25OYW1lc1tsb2NhdGlvbl0sIHR5cGVTcGVjTmFtZSkgOiB2b2lkIDA7XG4gICAgICAgIGVycm9yID0gdHlwZVNwZWNzW3R5cGVTcGVjTmFtZV0odmFsdWVzLCB0eXBlU3BlY05hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBudWxsLCBSZWFjdFByb3BUeXBlc1NlY3JldCk7XG4gICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICBlcnJvciA9IGV4O1xuICAgICAgfVxuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcoIWVycm9yIHx8IGVycm9yIGluc3RhbmNlb2YgRXJyb3IsICclczogdHlwZSBzcGVjaWZpY2F0aW9uIG9mICVzIGAlc2AgaXMgaW52YWxpZDsgdGhlIHR5cGUgY2hlY2tlciAnICsgJ2Z1bmN0aW9uIG11c3QgcmV0dXJuIGBudWxsYCBvciBhbiBgRXJyb3JgIGJ1dCByZXR1cm5lZCBhICVzLiAnICsgJ1lvdSBtYXkgaGF2ZSBmb3Jnb3R0ZW4gdG8gcGFzcyBhbiBhcmd1bWVudCB0byB0aGUgdHlwZSBjaGVja2VyICcgKyAnY3JlYXRvciAoYXJyYXlPZiwgaW5zdGFuY2VPZiwgb2JqZWN0T2YsIG9uZU9mLCBvbmVPZlR5cGUsIGFuZCAnICsgJ3NoYXBlIGFsbCByZXF1aXJlIGFuIGFyZ3VtZW50KS4nLCBjb21wb25lbnROYW1lIHx8ICdSZWFjdCBjbGFzcycsIFJlYWN0UHJvcFR5cGVMb2NhdGlvbk5hbWVzW2xvY2F0aW9uXSwgdHlwZVNwZWNOYW1lLCB0eXBlb2YgZXJyb3IpIDogdm9pZCAwO1xuICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgJiYgIShlcnJvci5tZXNzYWdlIGluIGxvZ2dlZFR5cGVGYWlsdXJlcykpIHtcbiAgICAgICAgLy8gT25seSBtb25pdG9yIHRoaXMgZmFpbHVyZSBvbmNlIGJlY2F1c2UgdGhlcmUgdGVuZHMgdG8gYmUgYSBsb3Qgb2YgdGhlXG4gICAgICAgIC8vIHNhbWUgZXJyb3IuXG4gICAgICAgIGxvZ2dlZFR5cGVGYWlsdXJlc1tlcnJvci5tZXNzYWdlXSA9IHRydWU7XG5cbiAgICAgICAgdmFyIGNvbXBvbmVudFN0YWNrSW5mbyA9ICcnO1xuXG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgaWYgKCFSZWFjdENvbXBvbmVudFRyZWVIb29rKSB7XG4gICAgICAgICAgICBSZWFjdENvbXBvbmVudFRyZWVIb29rID0gcmVxdWlyZSgncmVhY3QvbGliL1JlYWN0Q29tcG9uZW50VHJlZUhvb2snKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGRlYnVnSUQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbXBvbmVudFN0YWNrSW5mbyA9IFJlYWN0Q29tcG9uZW50VHJlZUhvb2suZ2V0U3RhY2tBZGRlbmR1bUJ5SUQoZGVidWdJRCk7XG4gICAgICAgICAgfSBlbHNlIGlmIChlbGVtZW50ICE9PSBudWxsKSB7XG4gICAgICAgICAgICBjb21wb25lbnRTdGFja0luZm8gPSBSZWFjdENvbXBvbmVudFRyZWVIb29rLmdldEN1cnJlbnRTdGFja0FkZGVuZHVtKGVsZW1lbnQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKGZhbHNlLCAnRmFpbGVkICVzIHR5cGU6ICVzJXMnLCBsb2NhdGlvbiwgZXJyb3IubWVzc2FnZSwgY29tcG9uZW50U3RhY2tJbmZvKSA6IHZvaWQgMDtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjaGVja1JlYWN0VHlwZVNwZWM7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1kb20vbGliL2NoZWNrUmVhY3RUeXBlU3BlYy5qcyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBDU1NQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vQ1NTUHJvcGVydHknKTtcbnZhciB3YXJuaW5nID0gcmVxdWlyZSgnZmJqcy9saWIvd2FybmluZycpO1xuXG52YXIgaXNVbml0bGVzc051bWJlciA9IENTU1Byb3BlcnR5LmlzVW5pdGxlc3NOdW1iZXI7XG52YXIgc3R5bGVXYXJuaW5ncyA9IHt9O1xuXG4vKipcbiAqIENvbnZlcnQgYSB2YWx1ZSBpbnRvIHRoZSBwcm9wZXIgY3NzIHdyaXRhYmxlIHZhbHVlLiBUaGUgc3R5bGUgbmFtZSBgbmFtZWBcbiAqIHNob3VsZCBiZSBsb2dpY2FsIChubyBoeXBoZW5zKSwgYXMgc3BlY2lmaWVkXG4gKiBpbiBgQ1NTUHJvcGVydHkuaXNVbml0bGVzc051bWJlcmAuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgQ1NTIHByb3BlcnR5IG5hbWUgc3VjaCBhcyBgdG9wTWFyZ2luYC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgQ1NTIHByb3BlcnR5IHZhbHVlIHN1Y2ggYXMgYDEwcHhgLlxuICogQHBhcmFtIHtSZWFjdERPTUNvbXBvbmVudH0gY29tcG9uZW50XG4gKiBAcmV0dXJuIHtzdHJpbmd9IE5vcm1hbGl6ZWQgc3R5bGUgdmFsdWUgd2l0aCBkaW1lbnNpb25zIGFwcGxpZWQuXG4gKi9cbmZ1bmN0aW9uIGRhbmdlcm91c1N0eWxlVmFsdWUobmFtZSwgdmFsdWUsIGNvbXBvbmVudCwgaXNDdXN0b21Qcm9wZXJ0eSkge1xuICAvLyBOb3RlIHRoYXQgd2UndmUgcmVtb3ZlZCBlc2NhcGVUZXh0Rm9yQnJvd3NlcigpIGNhbGxzIGhlcmUgc2luY2UgdGhlXG4gIC8vIHdob2xlIHN0cmluZyB3aWxsIGJlIGVzY2FwZWQgd2hlbiB0aGUgYXR0cmlidXRlIGlzIGluamVjdGVkIGludG9cbiAgLy8gdGhlIG1hcmt1cC4gSWYgeW91IHByb3ZpZGUgdW5zYWZlIHVzZXIgZGF0YSBoZXJlIHRoZXkgY2FuIGluamVjdFxuICAvLyBhcmJpdHJhcnkgQ1NTIHdoaWNoIG1heSBiZSBwcm9ibGVtYXRpYyAoSSBjb3VsZG4ndCByZXBybyB0aGlzKTpcbiAgLy8gaHR0cHM6Ly93d3cub3dhc3Aub3JnL2luZGV4LnBocC9YU1NfRmlsdGVyX0V2YXNpb25fQ2hlYXRfU2hlZXRcbiAgLy8gaHR0cDovL3d3dy50aGVzcGFubmVyLmNvLnVrLzIwMDcvMTEvMjYvdWx0aW1hdGUteHNzLWNzcy1pbmplY3Rpb24vXG4gIC8vIFRoaXMgaXMgbm90IGFuIFhTUyBob2xlIGJ1dCBpbnN0ZWFkIGEgcG90ZW50aWFsIENTUyBpbmplY3Rpb24gaXNzdWVcbiAgLy8gd2hpY2ggaGFzIGxlYWQgdG8gYSBncmVhdGVyIGRpc2N1c3Npb24gYWJvdXQgaG93IHdlJ3JlIGdvaW5nIHRvXG4gIC8vIHRydXN0IFVSTHMgbW92aW5nIGZvcndhcmQuIFNlZSAjMjExNTkwMVxuXG4gIHZhciBpc0VtcHR5ID0gdmFsdWUgPT0gbnVsbCB8fCB0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJyB8fCB2YWx1ZSA9PT0gJyc7XG4gIGlmIChpc0VtcHR5KSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgdmFyIGlzTm9uTnVtZXJpYyA9IGlzTmFOKHZhbHVlKTtcbiAgaWYgKGlzQ3VzdG9tUHJvcGVydHkgfHwgaXNOb25OdW1lcmljIHx8IHZhbHVlID09PSAwIHx8IGlzVW5pdGxlc3NOdW1iZXIuaGFzT3duUHJvcGVydHkobmFtZSkgJiYgaXNVbml0bGVzc051bWJlcltuYW1lXSkge1xuICAgIHJldHVybiAnJyArIHZhbHVlOyAvLyBjYXN0IHRvIHN0cmluZ1xuICB9XG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgLy8gQWxsb3cgJzAnIHRvIHBhc3MgdGhyb3VnaCB3aXRob3V0IHdhcm5pbmcuIDAgaXMgYWxyZWFkeSBzcGVjaWFsIGFuZFxuICAgICAgLy8gZG9lc24ndCByZXF1aXJlIHVuaXRzLCBzbyB3ZSBkb24ndCBuZWVkIHRvIHdhcm4gYWJvdXQgaXQuXG4gICAgICBpZiAoY29tcG9uZW50ICYmIHZhbHVlICE9PSAnMCcpIHtcbiAgICAgICAgdmFyIG93bmVyID0gY29tcG9uZW50Ll9jdXJyZW50RWxlbWVudC5fb3duZXI7XG4gICAgICAgIHZhciBvd25lck5hbWUgPSBvd25lciA/IG93bmVyLmdldE5hbWUoKSA6IG51bGw7XG4gICAgICAgIGlmIChvd25lck5hbWUgJiYgIXN0eWxlV2FybmluZ3Nbb3duZXJOYW1lXSkge1xuICAgICAgICAgIHN0eWxlV2FybmluZ3Nbb3duZXJOYW1lXSA9IHt9O1xuICAgICAgICB9XG4gICAgICAgIHZhciB3YXJuZWQgPSBmYWxzZTtcbiAgICAgICAgaWYgKG93bmVyTmFtZSkge1xuICAgICAgICAgIHZhciB3YXJuaW5ncyA9IHN0eWxlV2FybmluZ3Nbb3duZXJOYW1lXTtcbiAgICAgICAgICB3YXJuZWQgPSB3YXJuaW5nc1tuYW1lXTtcbiAgICAgICAgICBpZiAoIXdhcm5lZCkge1xuICAgICAgICAgICAgd2FybmluZ3NbbmFtZV0gPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIXdhcm5lZCkge1xuICAgICAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKGZhbHNlLCAnYSBgJXNgIHRhZyAob3duZXI6IGAlc2ApIHdhcyBwYXNzZWQgYSBudW1lcmljIHN0cmluZyB2YWx1ZSAnICsgJ2ZvciBDU1MgcHJvcGVydHkgYCVzYCAodmFsdWU6IGAlc2ApIHdoaWNoIHdpbGwgYmUgdHJlYXRlZCAnICsgJ2FzIGEgdW5pdGxlc3MgbnVtYmVyIGluIGEgZnV0dXJlIHZlcnNpb24gb2YgUmVhY3QuJywgY29tcG9uZW50Ll9jdXJyZW50RWxlbWVudC50eXBlLCBvd25lck5hbWUgfHwgJ3Vua25vd24nLCBuYW1lLCB2YWx1ZSkgOiB2b2lkIDA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgdmFsdWUgPSB2YWx1ZS50cmltKCk7XG4gIH1cbiAgcmV0dXJuIHZhbHVlICsgJ3B4Jztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBkYW5nZXJvdXNTdHlsZVZhbHVlO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QtZG9tL2xpYi9kYW5nZXJvdXNTdHlsZVZhbHVlLmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIF9wcm9kSW52YXJpYW50ID0gcmVxdWlyZSgnLi9yZWFjdFByb2RJbnZhcmlhbnQnKTtcblxudmFyIFJlYWN0Q3VycmVudE93bmVyID0gcmVxdWlyZSgncmVhY3QvbGliL1JlYWN0Q3VycmVudE93bmVyJyk7XG52YXIgUmVhY3RET01Db21wb25lbnRUcmVlID0gcmVxdWlyZSgnLi9SZWFjdERPTUNvbXBvbmVudFRyZWUnKTtcbnZhciBSZWFjdEluc3RhbmNlTWFwID0gcmVxdWlyZSgnLi9SZWFjdEluc3RhbmNlTWFwJyk7XG5cbnZhciBnZXRIb3N0Q29tcG9uZW50RnJvbUNvbXBvc2l0ZSA9IHJlcXVpcmUoJy4vZ2V0SG9zdENvbXBvbmVudEZyb21Db21wb3NpdGUnKTtcbnZhciBpbnZhcmlhbnQgPSByZXF1aXJlKCdmYmpzL2xpYi9pbnZhcmlhbnQnKTtcbnZhciB3YXJuaW5nID0gcmVxdWlyZSgnZmJqcy9saWIvd2FybmluZycpO1xuXG4vKipcbiAqIFJldHVybnMgdGhlIERPTSBub2RlIHJlbmRlcmVkIGJ5IHRoaXMgZWxlbWVudC5cbiAqXG4gKiBTZWUgaHR0cHM6Ly9mYWNlYm9vay5naXRodWIuaW8vcmVhY3QvZG9jcy90b3AtbGV2ZWwtYXBpLmh0bWwjcmVhY3Rkb20uZmluZGRvbW5vZGVcbiAqXG4gKiBAcGFyYW0ge1JlYWN0Q29tcG9uZW50fERPTUVsZW1lbnR9IGNvbXBvbmVudE9yRWxlbWVudFxuICogQHJldHVybiB7P0RPTUVsZW1lbnR9IFRoZSByb290IG5vZGUgb2YgdGhpcyBlbGVtZW50LlxuICovXG5mdW5jdGlvbiBmaW5kRE9NTm9kZShjb21wb25lbnRPckVsZW1lbnQpIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICB2YXIgb3duZXIgPSBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50O1xuICAgIGlmIChvd25lciAhPT0gbnVsbCkge1xuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcob3duZXIuX3dhcm5lZEFib3V0UmVmc0luUmVuZGVyLCAnJXMgaXMgYWNjZXNzaW5nIGZpbmRET01Ob2RlIGluc2lkZSBpdHMgcmVuZGVyKCkuICcgKyAncmVuZGVyKCkgc2hvdWxkIGJlIGEgcHVyZSBmdW5jdGlvbiBvZiBwcm9wcyBhbmQgc3RhdGUuIEl0IHNob3VsZCAnICsgJ25ldmVyIGFjY2VzcyBzb21ldGhpbmcgdGhhdCByZXF1aXJlcyBzdGFsZSBkYXRhIGZyb20gdGhlIHByZXZpb3VzICcgKyAncmVuZGVyLCBzdWNoIGFzIHJlZnMuIE1vdmUgdGhpcyBsb2dpYyB0byBjb21wb25lbnREaWRNb3VudCBhbmQgJyArICdjb21wb25lbnREaWRVcGRhdGUgaW5zdGVhZC4nLCBvd25lci5nZXROYW1lKCkgfHwgJ0EgY29tcG9uZW50JykgOiB2b2lkIDA7XG4gICAgICBvd25lci5fd2FybmVkQWJvdXRSZWZzSW5SZW5kZXIgPSB0cnVlO1xuICAgIH1cbiAgfVxuICBpZiAoY29tcG9uZW50T3JFbGVtZW50ID09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBpZiAoY29tcG9uZW50T3JFbGVtZW50Lm5vZGVUeXBlID09PSAxKSB7XG4gICAgcmV0dXJuIGNvbXBvbmVudE9yRWxlbWVudDtcbiAgfVxuXG4gIHZhciBpbnN0ID0gUmVhY3RJbnN0YW5jZU1hcC5nZXQoY29tcG9uZW50T3JFbGVtZW50KTtcbiAgaWYgKGluc3QpIHtcbiAgICBpbnN0ID0gZ2V0SG9zdENvbXBvbmVudEZyb21Db21wb3NpdGUoaW5zdCk7XG4gICAgcmV0dXJuIGluc3QgPyBSZWFjdERPTUNvbXBvbmVudFRyZWUuZ2V0Tm9kZUZyb21JbnN0YW5jZShpbnN0KSA6IG51bGw7XG4gIH1cblxuICBpZiAodHlwZW9mIGNvbXBvbmVudE9yRWxlbWVudC5yZW5kZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAhZmFsc2UgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAnZmluZERPTU5vZGUgd2FzIGNhbGxlZCBvbiBhbiB1bm1vdW50ZWQgY29tcG9uZW50LicpIDogX3Byb2RJbnZhcmlhbnQoJzQ0JykgOiB2b2lkIDA7XG4gIH0gZWxzZSB7XG4gICAgIWZhbHNlID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IGludmFyaWFudChmYWxzZSwgJ0VsZW1lbnQgYXBwZWFycyB0byBiZSBuZWl0aGVyIFJlYWN0Q29tcG9uZW50IG5vciBET01Ob2RlIChrZXlzOiAlcyknLCBPYmplY3Qua2V5cyhjb21wb25lbnRPckVsZW1lbnQpKSA6IF9wcm9kSW52YXJpYW50KCc0NScsIE9iamVjdC5rZXlzKGNvbXBvbmVudE9yRWxlbWVudCkpIDogdm9pZCAwO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZmluZERPTU5vZGU7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1kb20vbGliL2ZpbmRET01Ob2RlLmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgS2V5RXNjYXBlVXRpbHMgPSByZXF1aXJlKCcuL0tleUVzY2FwZVV0aWxzJyk7XG52YXIgdHJhdmVyc2VBbGxDaGlsZHJlbiA9IHJlcXVpcmUoJy4vdHJhdmVyc2VBbGxDaGlsZHJlbicpO1xudmFyIHdhcm5pbmcgPSByZXF1aXJlKCdmYmpzL2xpYi93YXJuaW5nJyk7XG5cbnZhciBSZWFjdENvbXBvbmVudFRyZWVIb29rO1xuXG5pZiAodHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnICYmIHByb2Nlc3MuZW52ICYmIHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAndGVzdCcpIHtcbiAgLy8gVGVtcG9yYXJ5IGhhY2suXG4gIC8vIElubGluZSByZXF1aXJlcyBkb24ndCB3b3JrIHdlbGwgd2l0aCBKZXN0OlxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzcyNDBcbiAgLy8gUmVtb3ZlIHRoZSBpbmxpbmUgcmVxdWlyZXMgd2hlbiB3ZSBkb24ndCBuZWVkIHRoZW0gYW55bW9yZTpcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L3B1bGwvNzE3OFxuICBSZWFjdENvbXBvbmVudFRyZWVIb29rID0gcmVxdWlyZSgncmVhY3QvbGliL1JlYWN0Q29tcG9uZW50VHJlZUhvb2snKTtcbn1cblxuLyoqXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSB0cmF2ZXJzZUNvbnRleHQgQ29udGV4dCBwYXNzZWQgdGhyb3VnaCB0cmF2ZXJzYWwuXG4gKiBAcGFyYW0gez9SZWFjdENvbXBvbmVudH0gY2hpbGQgUmVhY3QgY2hpbGQgY29tcG9uZW50LlxuICogQHBhcmFtIHshc3RyaW5nfSBuYW1lIFN0cmluZyBuYW1lIG9mIGtleSBwYXRoIHRvIGNoaWxkLlxuICogQHBhcmFtIHtudW1iZXI9fSBzZWxmRGVidWdJRCBPcHRpb25hbCBkZWJ1Z0lEIG9mIHRoZSBjdXJyZW50IGludGVybmFsIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBmbGF0dGVuU2luZ2xlQ2hpbGRJbnRvQ29udGV4dCh0cmF2ZXJzZUNvbnRleHQsIGNoaWxkLCBuYW1lLCBzZWxmRGVidWdJRCkge1xuICAvLyBXZSBmb3VuZCBhIGNvbXBvbmVudCBpbnN0YW5jZS5cbiAgaWYgKHRyYXZlcnNlQ29udGV4dCAmJiB0eXBlb2YgdHJhdmVyc2VDb250ZXh0ID09PSAnb2JqZWN0Jykge1xuICAgIHZhciByZXN1bHQgPSB0cmF2ZXJzZUNvbnRleHQ7XG4gICAgdmFyIGtleVVuaXF1ZSA9IHJlc3VsdFtuYW1lXSA9PT0gdW5kZWZpbmVkO1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBpZiAoIVJlYWN0Q29tcG9uZW50VHJlZUhvb2spIHtcbiAgICAgICAgUmVhY3RDb21wb25lbnRUcmVlSG9vayA9IHJlcXVpcmUoJ3JlYWN0L2xpYi9SZWFjdENvbXBvbmVudFRyZWVIb29rJyk7XG4gICAgICB9XG4gICAgICBpZiAoIWtleVVuaXF1ZSkge1xuICAgICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gd2FybmluZyhmYWxzZSwgJ2ZsYXR0ZW5DaGlsZHJlbiguLi4pOiBFbmNvdW50ZXJlZCB0d28gY2hpbGRyZW4gd2l0aCB0aGUgc2FtZSBrZXksICcgKyAnYCVzYC4gQ2hpbGQga2V5cyBtdXN0IGJlIHVuaXF1ZTsgd2hlbiB0d28gY2hpbGRyZW4gc2hhcmUgYSBrZXksIG9ubHkgJyArICd0aGUgZmlyc3QgY2hpbGQgd2lsbCBiZSB1c2VkLiVzJywgS2V5RXNjYXBlVXRpbHMudW5lc2NhcGUobmFtZSksIFJlYWN0Q29tcG9uZW50VHJlZUhvb2suZ2V0U3RhY2tBZGRlbmR1bUJ5SUQoc2VsZkRlYnVnSUQpKSA6IHZvaWQgMDtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGtleVVuaXF1ZSAmJiBjaGlsZCAhPSBudWxsKSB7XG4gICAgICByZXN1bHRbbmFtZV0gPSBjaGlsZDtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBGbGF0dGVucyBjaGlsZHJlbiB0aGF0IGFyZSB0eXBpY2FsbHkgc3BlY2lmaWVkIGFzIGBwcm9wcy5jaGlsZHJlbmAuIEFueSBudWxsXG4gKiBjaGlsZHJlbiB3aWxsIG5vdCBiZSBpbmNsdWRlZCBpbiB0aGUgcmVzdWx0aW5nIG9iamVjdC5cbiAqIEByZXR1cm4geyFvYmplY3R9IGZsYXR0ZW5lZCBjaGlsZHJlbiBrZXllZCBieSBuYW1lLlxuICovXG5mdW5jdGlvbiBmbGF0dGVuQ2hpbGRyZW4oY2hpbGRyZW4sIHNlbGZEZWJ1Z0lEKSB7XG4gIGlmIChjaGlsZHJlbiA9PSBudWxsKSB7XG4gICAgcmV0dXJuIGNoaWxkcmVuO1xuICB9XG4gIHZhciByZXN1bHQgPSB7fTtcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIHRyYXZlcnNlQWxsQ2hpbGRyZW4oY2hpbGRyZW4sIGZ1bmN0aW9uICh0cmF2ZXJzZUNvbnRleHQsIGNoaWxkLCBuYW1lKSB7XG4gICAgICByZXR1cm4gZmxhdHRlblNpbmdsZUNoaWxkSW50b0NvbnRleHQodHJhdmVyc2VDb250ZXh0LCBjaGlsZCwgbmFtZSwgc2VsZkRlYnVnSUQpO1xuICAgIH0sIHJlc3VsdCk7XG4gIH0gZWxzZSB7XG4gICAgdHJhdmVyc2VBbGxDaGlsZHJlbihjaGlsZHJlbiwgZmxhdHRlblNpbmdsZUNoaWxkSW50b0NvbnRleHQsIHJlc3VsdCk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmbGF0dGVuQ2hpbGRyZW47XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1kb20vbGliL2ZsYXR0ZW5DaGlsZHJlbi5qcyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBnZXRFdmVudENoYXJDb2RlID0gcmVxdWlyZSgnLi9nZXRFdmVudENoYXJDb2RlJyk7XG5cbi8qKlxuICogTm9ybWFsaXphdGlvbiBvZiBkZXByZWNhdGVkIEhUTUw1IGBrZXlgIHZhbHVlc1xuICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvS2V5Ym9hcmRFdmVudCNLZXlfbmFtZXNcbiAqL1xudmFyIG5vcm1hbGl6ZUtleSA9IHtcbiAgRXNjOiAnRXNjYXBlJyxcbiAgU3BhY2ViYXI6ICcgJyxcbiAgTGVmdDogJ0Fycm93TGVmdCcsXG4gIFVwOiAnQXJyb3dVcCcsXG4gIFJpZ2h0OiAnQXJyb3dSaWdodCcsXG4gIERvd246ICdBcnJvd0Rvd24nLFxuICBEZWw6ICdEZWxldGUnLFxuICBXaW46ICdPUycsXG4gIE1lbnU6ICdDb250ZXh0TWVudScsXG4gIEFwcHM6ICdDb250ZXh0TWVudScsXG4gIFNjcm9sbDogJ1Njcm9sbExvY2snLFxuICBNb3pQcmludGFibGVLZXk6ICdVbmlkZW50aWZpZWQnXG59O1xuXG4vKipcbiAqIFRyYW5zbGF0aW9uIGZyb20gbGVnYWN5IGBrZXlDb2RlYCB0byBIVE1MNSBga2V5YFxuICogT25seSBzcGVjaWFsIGtleXMgc3VwcG9ydGVkLCBhbGwgb3RoZXJzIGRlcGVuZCBvbiBrZXlib2FyZCBsYXlvdXQgb3IgYnJvd3NlclxuICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvS2V5Ym9hcmRFdmVudCNLZXlfbmFtZXNcbiAqL1xudmFyIHRyYW5zbGF0ZVRvS2V5ID0ge1xuICA4OiAnQmFja3NwYWNlJyxcbiAgOTogJ1RhYicsXG4gIDEyOiAnQ2xlYXInLFxuICAxMzogJ0VudGVyJyxcbiAgMTY6ICdTaGlmdCcsXG4gIDE3OiAnQ29udHJvbCcsXG4gIDE4OiAnQWx0JyxcbiAgMTk6ICdQYXVzZScsXG4gIDIwOiAnQ2Fwc0xvY2snLFxuICAyNzogJ0VzY2FwZScsXG4gIDMyOiAnICcsXG4gIDMzOiAnUGFnZVVwJyxcbiAgMzQ6ICdQYWdlRG93bicsXG4gIDM1OiAnRW5kJyxcbiAgMzY6ICdIb21lJyxcbiAgMzc6ICdBcnJvd0xlZnQnLFxuICAzODogJ0Fycm93VXAnLFxuICAzOTogJ0Fycm93UmlnaHQnLFxuICA0MDogJ0Fycm93RG93bicsXG4gIDQ1OiAnSW5zZXJ0JyxcbiAgNDY6ICdEZWxldGUnLFxuICAxMTI6ICdGMScsXG4gIDExMzogJ0YyJyxcbiAgMTE0OiAnRjMnLFxuICAxMTU6ICdGNCcsXG4gIDExNjogJ0Y1JyxcbiAgMTE3OiAnRjYnLFxuICAxMTg6ICdGNycsXG4gIDExOTogJ0Y4JyxcbiAgMTIwOiAnRjknLFxuICAxMjE6ICdGMTAnLFxuICAxMjI6ICdGMTEnLFxuICAxMjM6ICdGMTInLFxuICAxNDQ6ICdOdW1Mb2NrJyxcbiAgMTQ1OiAnU2Nyb2xsTG9jaycsXG4gIDIyNDogJ01ldGEnXG59O1xuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSBuYXRpdmVFdmVudCBOYXRpdmUgYnJvd3NlciBldmVudC5cbiAqIEByZXR1cm4ge3N0cmluZ30gTm9ybWFsaXplZCBga2V5YCBwcm9wZXJ0eS5cbiAqL1xuZnVuY3Rpb24gZ2V0RXZlbnRLZXkobmF0aXZlRXZlbnQpIHtcbiAgaWYgKG5hdGl2ZUV2ZW50LmtleSkge1xuICAgIC8vIE5vcm1hbGl6ZSBpbmNvbnNpc3RlbnQgdmFsdWVzIHJlcG9ydGVkIGJ5IGJyb3dzZXJzIGR1ZSB0b1xuICAgIC8vIGltcGxlbWVudGF0aW9ucyBvZiBhIHdvcmtpbmcgZHJhZnQgc3BlY2lmaWNhdGlvbi5cblxuICAgIC8vIEZpcmVGb3ggaW1wbGVtZW50cyBga2V5YCBidXQgcmV0dXJucyBgTW96UHJpbnRhYmxlS2V5YCBmb3IgYWxsXG4gICAgLy8gcHJpbnRhYmxlIGNoYXJhY3RlcnMgKG5vcm1hbGl6ZWQgdG8gYFVuaWRlbnRpZmllZGApLCBpZ25vcmUgaXQuXG4gICAgdmFyIGtleSA9IG5vcm1hbGl6ZUtleVtuYXRpdmVFdmVudC5rZXldIHx8IG5hdGl2ZUV2ZW50LmtleTtcbiAgICBpZiAoa2V5ICE9PSAnVW5pZGVudGlmaWVkJykge1xuICAgICAgcmV0dXJuIGtleTtcbiAgICB9XG4gIH1cblxuICAvLyBCcm93c2VyIGRvZXMgbm90IGltcGxlbWVudCBga2V5YCwgcG9seWZpbGwgYXMgbXVjaCBvZiBpdCBhcyB3ZSBjYW4uXG4gIGlmIChuYXRpdmVFdmVudC50eXBlID09PSAna2V5cHJlc3MnKSB7XG4gICAgdmFyIGNoYXJDb2RlID0gZ2V0RXZlbnRDaGFyQ29kZShuYXRpdmVFdmVudCk7XG5cbiAgICAvLyBUaGUgZW50ZXIta2V5IGlzIHRlY2huaWNhbGx5IGJvdGggcHJpbnRhYmxlIGFuZCBub24tcHJpbnRhYmxlIGFuZCBjYW5cbiAgICAvLyB0aHVzIGJlIGNhcHR1cmVkIGJ5IGBrZXlwcmVzc2AsIG5vIG90aGVyIG5vbi1wcmludGFibGUga2V5IHNob3VsZC5cbiAgICByZXR1cm4gY2hhckNvZGUgPT09IDEzID8gJ0VudGVyJyA6IFN0cmluZy5mcm9tQ2hhckNvZGUoY2hhckNvZGUpO1xuICB9XG4gIGlmIChuYXRpdmVFdmVudC50eXBlID09PSAna2V5ZG93bicgfHwgbmF0aXZlRXZlbnQudHlwZSA9PT0gJ2tleXVwJykge1xuICAgIC8vIFdoaWxlIHVzZXIga2V5Ym9hcmQgbGF5b3V0IGRldGVybWluZXMgdGhlIGFjdHVhbCBtZWFuaW5nIG9mIGVhY2hcbiAgICAvLyBga2V5Q29kZWAgdmFsdWUsIGFsbW9zdCBhbGwgZnVuY3Rpb24ga2V5cyBoYXZlIGEgdW5pdmVyc2FsIHZhbHVlLlxuICAgIHJldHVybiB0cmFuc2xhdGVUb0tleVtuYXRpdmVFdmVudC5rZXlDb2RlXSB8fCAnVW5pZGVudGlmaWVkJztcbiAgfVxuICByZXR1cm4gJyc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0RXZlbnRLZXk7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1kb20vbGliL2dldEV2ZW50S2V5LmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG4vKiBnbG9iYWwgU3ltYm9sICovXG5cbnZhciBJVEVSQVRPUl9TWU1CT0wgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5pdGVyYXRvcjtcbnZhciBGQVVYX0lURVJBVE9SX1NZTUJPTCA9ICdAQGl0ZXJhdG9yJzsgLy8gQmVmb3JlIFN5bWJvbCBzcGVjLlxuXG4vKipcbiAqIFJldHVybnMgdGhlIGl0ZXJhdG9yIG1ldGhvZCBmdW5jdGlvbiBjb250YWluZWQgb24gdGhlIGl0ZXJhYmxlIG9iamVjdC5cbiAqXG4gKiBCZSBzdXJlIHRvIGludm9rZSB0aGUgZnVuY3Rpb24gd2l0aCB0aGUgaXRlcmFibGUgYXMgY29udGV4dDpcbiAqXG4gKiAgICAgdmFyIGl0ZXJhdG9yRm4gPSBnZXRJdGVyYXRvckZuKG15SXRlcmFibGUpO1xuICogICAgIGlmIChpdGVyYXRvckZuKSB7XG4gKiAgICAgICB2YXIgaXRlcmF0b3IgPSBpdGVyYXRvckZuLmNhbGwobXlJdGVyYWJsZSk7XG4gKiAgICAgICAuLi5cbiAqICAgICB9XG4gKlxuICogQHBhcmFtIHs/b2JqZWN0fSBtYXliZUl0ZXJhYmxlXG4gKiBAcmV0dXJuIHs/ZnVuY3Rpb259XG4gKi9cbmZ1bmN0aW9uIGdldEl0ZXJhdG9yRm4obWF5YmVJdGVyYWJsZSkge1xuICB2YXIgaXRlcmF0b3JGbiA9IG1heWJlSXRlcmFibGUgJiYgKElURVJBVE9SX1NZTUJPTCAmJiBtYXliZUl0ZXJhYmxlW0lURVJBVE9SX1NZTUJPTF0gfHwgbWF5YmVJdGVyYWJsZVtGQVVYX0lURVJBVE9SX1NZTUJPTF0pO1xuICBpZiAodHlwZW9mIGl0ZXJhdG9yRm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gaXRlcmF0b3JGbjtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEl0ZXJhdG9yRm47XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1kb20vbGliL2dldEl0ZXJhdG9yRm4uanMiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIEdpdmVuIGFueSBub2RlIHJldHVybiB0aGUgZmlyc3QgbGVhZiBub2RlIHdpdGhvdXQgY2hpbGRyZW4uXG4gKlxuICogQHBhcmFtIHtET01FbGVtZW50fERPTVRleHROb2RlfSBub2RlXG4gKiBAcmV0dXJuIHtET01FbGVtZW50fERPTVRleHROb2RlfVxuICovXG5cbmZ1bmN0aW9uIGdldExlYWZOb2RlKG5vZGUpIHtcbiAgd2hpbGUgKG5vZGUgJiYgbm9kZS5maXJzdENoaWxkKSB7XG4gICAgbm9kZSA9IG5vZGUuZmlyc3RDaGlsZDtcbiAgfVxuICByZXR1cm4gbm9kZTtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIG5leHQgc2libGluZyB3aXRoaW4gYSBjb250YWluZXIuIFRoaXMgd2lsbCB3YWxrIHVwIHRoZVxuICogRE9NIGlmIGEgbm9kZSdzIHNpYmxpbmdzIGhhdmUgYmVlbiBleGhhdXN0ZWQuXG4gKlxuICogQHBhcmFtIHtET01FbGVtZW50fERPTVRleHROb2RlfSBub2RlXG4gKiBAcmV0dXJuIHs/RE9NRWxlbWVudHxET01UZXh0Tm9kZX1cbiAqL1xuZnVuY3Rpb24gZ2V0U2libGluZ05vZGUobm9kZSkge1xuICB3aGlsZSAobm9kZSkge1xuICAgIGlmIChub2RlLm5leHRTaWJsaW5nKSB7XG4gICAgICByZXR1cm4gbm9kZS5uZXh0U2libGluZztcbiAgICB9XG4gICAgbm9kZSA9IG5vZGUucGFyZW50Tm9kZTtcbiAgfVxufVxuXG4vKipcbiAqIEdldCBvYmplY3QgZGVzY3JpYmluZyB0aGUgbm9kZXMgd2hpY2ggY29udGFpbiBjaGFyYWN0ZXJzIGF0IG9mZnNldC5cbiAqXG4gKiBAcGFyYW0ge0RPTUVsZW1lbnR8RE9NVGV4dE5vZGV9IHJvb3RcbiAqIEBwYXJhbSB7bnVtYmVyfSBvZmZzZXRcbiAqIEByZXR1cm4gez9vYmplY3R9XG4gKi9cbmZ1bmN0aW9uIGdldE5vZGVGb3JDaGFyYWN0ZXJPZmZzZXQocm9vdCwgb2Zmc2V0KSB7XG4gIHZhciBub2RlID0gZ2V0TGVhZk5vZGUocm9vdCk7XG4gIHZhciBub2RlU3RhcnQgPSAwO1xuICB2YXIgbm9kZUVuZCA9IDA7XG5cbiAgd2hpbGUgKG5vZGUpIHtcbiAgICBpZiAobm9kZS5ub2RlVHlwZSA9PT0gMykge1xuICAgICAgbm9kZUVuZCA9IG5vZGVTdGFydCArIG5vZGUudGV4dENvbnRlbnQubGVuZ3RoO1xuXG4gICAgICBpZiAobm9kZVN0YXJ0IDw9IG9mZnNldCAmJiBub2RlRW5kID49IG9mZnNldCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG5vZGU6IG5vZGUsXG4gICAgICAgICAgb2Zmc2V0OiBvZmZzZXQgLSBub2RlU3RhcnRcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgbm9kZVN0YXJ0ID0gbm9kZUVuZDtcbiAgICB9XG5cbiAgICBub2RlID0gZ2V0TGVhZk5vZGUoZ2V0U2libGluZ05vZGUobm9kZSkpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0Tm9kZUZvckNoYXJhY3Rlck9mZnNldDtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3JlYWN0LWRvbS9saWIvZ2V0Tm9kZUZvckNoYXJhY3Rlck9mZnNldC5qcyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBFeGVjdXRpb25FbnZpcm9ubWVudCA9IHJlcXVpcmUoJ2ZianMvbGliL0V4ZWN1dGlvbkVudmlyb25tZW50Jyk7XG5cbi8qKlxuICogR2VuZXJhdGUgYSBtYXBwaW5nIG9mIHN0YW5kYXJkIHZlbmRvciBwcmVmaXhlcyB1c2luZyB0aGUgZGVmaW5lZCBzdHlsZSBwcm9wZXJ0eSBhbmQgZXZlbnQgbmFtZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc3R5bGVQcm9wXG4gKiBAcGFyYW0ge3N0cmluZ30gZXZlbnROYW1lXG4gKiBAcmV0dXJucyB7b2JqZWN0fVxuICovXG5mdW5jdGlvbiBtYWtlUHJlZml4TWFwKHN0eWxlUHJvcCwgZXZlbnROYW1lKSB7XG4gIHZhciBwcmVmaXhlcyA9IHt9O1xuXG4gIHByZWZpeGVzW3N0eWxlUHJvcC50b0xvd2VyQ2FzZSgpXSA9IGV2ZW50TmFtZS50b0xvd2VyQ2FzZSgpO1xuICBwcmVmaXhlc1snV2Via2l0JyArIHN0eWxlUHJvcF0gPSAnd2Via2l0JyArIGV2ZW50TmFtZTtcbiAgcHJlZml4ZXNbJ01veicgKyBzdHlsZVByb3BdID0gJ21veicgKyBldmVudE5hbWU7XG4gIHByZWZpeGVzWydtcycgKyBzdHlsZVByb3BdID0gJ01TJyArIGV2ZW50TmFtZTtcbiAgcHJlZml4ZXNbJ08nICsgc3R5bGVQcm9wXSA9ICdvJyArIGV2ZW50TmFtZS50b0xvd2VyQ2FzZSgpO1xuXG4gIHJldHVybiBwcmVmaXhlcztcbn1cblxuLyoqXG4gKiBBIGxpc3Qgb2YgZXZlbnQgbmFtZXMgdG8gYSBjb25maWd1cmFibGUgbGlzdCBvZiB2ZW5kb3IgcHJlZml4ZXMuXG4gKi9cbnZhciB2ZW5kb3JQcmVmaXhlcyA9IHtcbiAgYW5pbWF0aW9uZW5kOiBtYWtlUHJlZml4TWFwKCdBbmltYXRpb24nLCAnQW5pbWF0aW9uRW5kJyksXG4gIGFuaW1hdGlvbml0ZXJhdGlvbjogbWFrZVByZWZpeE1hcCgnQW5pbWF0aW9uJywgJ0FuaW1hdGlvbkl0ZXJhdGlvbicpLFxuICBhbmltYXRpb25zdGFydDogbWFrZVByZWZpeE1hcCgnQW5pbWF0aW9uJywgJ0FuaW1hdGlvblN0YXJ0JyksXG4gIHRyYW5zaXRpb25lbmQ6IG1ha2VQcmVmaXhNYXAoJ1RyYW5zaXRpb24nLCAnVHJhbnNpdGlvbkVuZCcpXG59O1xuXG4vKipcbiAqIEV2ZW50IG5hbWVzIHRoYXQgaGF2ZSBhbHJlYWR5IGJlZW4gZGV0ZWN0ZWQgYW5kIHByZWZpeGVkIChpZiBhcHBsaWNhYmxlKS5cbiAqL1xudmFyIHByZWZpeGVkRXZlbnROYW1lcyA9IHt9O1xuXG4vKipcbiAqIEVsZW1lbnQgdG8gY2hlY2sgZm9yIHByZWZpeGVzIG9uLlxuICovXG52YXIgc3R5bGUgPSB7fTtcblxuLyoqXG4gKiBCb290c3RyYXAgaWYgYSBET00gZXhpc3RzLlxuICovXG5pZiAoRXhlY3V0aW9uRW52aXJvbm1lbnQuY2FuVXNlRE9NKSB7XG4gIHN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jykuc3R5bGU7XG5cbiAgLy8gT24gc29tZSBwbGF0Zm9ybXMsIGluIHBhcnRpY3VsYXIgc29tZSByZWxlYXNlcyBvZiBBbmRyb2lkIDQueCxcbiAgLy8gdGhlIHVuLXByZWZpeGVkIFwiYW5pbWF0aW9uXCIgYW5kIFwidHJhbnNpdGlvblwiIHByb3BlcnRpZXMgYXJlIGRlZmluZWQgb24gdGhlXG4gIC8vIHN0eWxlIG9iamVjdCBidXQgdGhlIGV2ZW50cyB0aGF0IGZpcmUgd2lsbCBzdGlsbCBiZSBwcmVmaXhlZCwgc28gd2UgbmVlZFxuICAvLyB0byBjaGVjayBpZiB0aGUgdW4tcHJlZml4ZWQgZXZlbnRzIGFyZSB1c2FibGUsIGFuZCBpZiBub3QgcmVtb3ZlIHRoZW0gZnJvbSB0aGUgbWFwLlxuICBpZiAoISgnQW5pbWF0aW9uRXZlbnQnIGluIHdpbmRvdykpIHtcbiAgICBkZWxldGUgdmVuZG9yUHJlZml4ZXMuYW5pbWF0aW9uZW5kLmFuaW1hdGlvbjtcbiAgICBkZWxldGUgdmVuZG9yUHJlZml4ZXMuYW5pbWF0aW9uaXRlcmF0aW9uLmFuaW1hdGlvbjtcbiAgICBkZWxldGUgdmVuZG9yUHJlZml4ZXMuYW5pbWF0aW9uc3RhcnQuYW5pbWF0aW9uO1xuICB9XG5cbiAgLy8gU2FtZSBhcyBhYm92ZVxuICBpZiAoISgnVHJhbnNpdGlvbkV2ZW50JyBpbiB3aW5kb3cpKSB7XG4gICAgZGVsZXRlIHZlbmRvclByZWZpeGVzLnRyYW5zaXRpb25lbmQudHJhbnNpdGlvbjtcbiAgfVxufVxuXG4vKipcbiAqIEF0dGVtcHRzIHRvIGRldGVybWluZSB0aGUgY29ycmVjdCB2ZW5kb3IgcHJlZml4ZWQgZXZlbnQgbmFtZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZXZlbnROYW1lXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBnZXRWZW5kb3JQcmVmaXhlZEV2ZW50TmFtZShldmVudE5hbWUpIHtcbiAgaWYgKHByZWZpeGVkRXZlbnROYW1lc1tldmVudE5hbWVdKSB7XG4gICAgcmV0dXJuIHByZWZpeGVkRXZlbnROYW1lc1tldmVudE5hbWVdO1xuICB9IGVsc2UgaWYgKCF2ZW5kb3JQcmVmaXhlc1tldmVudE5hbWVdKSB7XG4gICAgcmV0dXJuIGV2ZW50TmFtZTtcbiAgfVxuXG4gIHZhciBwcmVmaXhNYXAgPSB2ZW5kb3JQcmVmaXhlc1tldmVudE5hbWVdO1xuXG4gIGZvciAodmFyIHN0eWxlUHJvcCBpbiBwcmVmaXhNYXApIHtcbiAgICBpZiAocHJlZml4TWFwLmhhc093blByb3BlcnR5KHN0eWxlUHJvcCkgJiYgc3R5bGVQcm9wIGluIHN0eWxlKSB7XG4gICAgICByZXR1cm4gcHJlZml4ZWRFdmVudE5hbWVzW2V2ZW50TmFtZV0gPSBwcmVmaXhNYXBbc3R5bGVQcm9wXTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gJyc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0VmVuZG9yUHJlZml4ZWRFdmVudE5hbWU7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1kb20vbGliL2dldFZlbmRvclByZWZpeGVkRXZlbnROYW1lLmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIGVzY2FwZVRleHRDb250ZW50Rm9yQnJvd3NlciA9IHJlcXVpcmUoJy4vZXNjYXBlVGV4dENvbnRlbnRGb3JCcm93c2VyJyk7XG5cbi8qKlxuICogRXNjYXBlcyBhdHRyaWJ1dGUgdmFsdWUgdG8gcHJldmVudCBzY3JpcHRpbmcgYXR0YWNrcy5cbiAqXG4gKiBAcGFyYW0geyp9IHZhbHVlIFZhbHVlIHRvIGVzY2FwZS5cbiAqIEByZXR1cm4ge3N0cmluZ30gQW4gZXNjYXBlZCBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIHF1b3RlQXR0cmlidXRlVmFsdWVGb3JCcm93c2VyKHZhbHVlKSB7XG4gIHJldHVybiAnXCInICsgZXNjYXBlVGV4dENvbnRlbnRGb3JCcm93c2VyKHZhbHVlKSArICdcIic7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcXVvdGVBdHRyaWJ1dGVWYWx1ZUZvckJyb3dzZXI7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1kb20vbGliL3F1b3RlQXR0cmlidXRlVmFsdWVGb3JCcm93c2VyLmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0TW91bnQgPSByZXF1aXJlKCcuL1JlYWN0TW91bnQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdE1vdW50LnJlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QtZG9tL2xpYi9yZW5kZXJTdWJ0cmVlSW50b0NvbnRhaW5lci5qcyIsInZhciBSZWFjdCA9IHJlcXVpcmUoJ3JlYWN0Jyk7XG5cbnZhciBGaWxlSW5wdXQgPSBSZWFjdC5jcmVhdGVDbGFzcyh7XG4gIGdldEluaXRpYWxTdGF0ZTogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHZhbHVlOiAnJyxcbiAgICAgIHN0eWxlczoge1xuICAgICAgICBwYXJlbnQ6IHtcbiAgICAgICAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJ1xuICAgICAgICB9LFxuICAgICAgICBmaWxlOiB7XG4gICAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICAgICAgdG9wOiAwLFxuICAgICAgICAgIGxlZnQ6IDAsXG4gICAgICAgICAgb3BhY2l0eTogMCxcbiAgICAgICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgICAgIHpJbmRleDogMVxuICAgICAgICB9LFxuICAgICAgICB0ZXh0OiB7XG4gICAgICAgICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gICAgICAgICAgekluZGV4OiAtMVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgfSxcblxuICBoYW5kbGVDaGFuZ2U6IGZ1bmN0aW9uKGUpIHtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIHZhbHVlOiBlLnRhcmdldC52YWx1ZS5zcGxpdCgvKFxcXFx8XFwvKS9nKS5wb3AoKVxuICAgIH0pO1xuICAgIGlmICh0aGlzLnByb3BzLm9uQ2hhbmdlKSB0aGlzLnByb3BzLm9uQ2hhbmdlKGUpO1xuICB9LFxuXG4gIHJlbmRlcjogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIFJlYWN0LkRPTS5kaXYoe1xuICAgICAgICBzdHlsZTogdGhpcy5zdGF0ZS5zdHlsZXMucGFyZW50XG4gICAgICB9LFxuXG4gICAgICAvLyBBY3R1YWwgZmlsZSBpbnB1dFxuICAgICAgUmVhY3QuRE9NLmlucHV0KHtcbiAgICAgICAgdHlwZTogJ2ZpbGUnLFxuICAgICAgICBuYW1lOiB0aGlzLnByb3BzLm5hbWUsXG4gICAgICAgIGNsYXNzTmFtZTogdGhpcy5wcm9wcy5jbGFzc05hbWUsXG4gICAgICAgIG9uQ2hhbmdlOiB0aGlzLmhhbmRsZUNoYW5nZSxcbiAgICAgICAgZGlzYWJsZWQ6IHRoaXMucHJvcHMuZGlzYWJsZWQsXG4gICAgICAgIGFjY2VwdDogdGhpcy5wcm9wcy5hY2NlcHQsXG4gICAgICAgIHN0eWxlOiB0aGlzLnN0YXRlLnN0eWxlcy5maWxlXG4gICAgICB9KSxcblxuICAgICAgLy8gRW11bGF0ZWQgZmlsZSBpbnB1dFxuICAgICAgUmVhY3QuRE9NLmlucHV0KHtcbiAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICB0YWJJbmRleDogLTEsXG4gICAgICAgIG5hbWU6IHRoaXMucHJvcHMubmFtZSArICdfZmlsZW5hbWUnLFxuICAgICAgICB2YWx1ZTogdGhpcy5zdGF0ZS52YWx1ZSxcbiAgICAgICAgY2xhc3NOYW1lOiB0aGlzLnByb3BzLmNsYXNzTmFtZSxcbiAgICAgICAgb25DaGFuZ2U6IGZ1bmN0aW9uKCkge30sXG4gICAgICAgIHBsYWNlaG9sZGVyOiB0aGlzLnByb3BzLnBsYWNlaG9sZGVyLFxuICAgICAgICBkaXNhYmxlZDogdGhpcy5wcm9wcy5kaXNhYmxlZCxcbiAgICAgICAgc3R5bGU6IHRoaXMuc3RhdGUuc3R5bGVzLnRleHRcbiAgICAgIH0pKTtcbiAgfVxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gRmlsZUlucHV0O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1maWxlLWlucHV0L2xpYi9pbmRleC5qcyIsImZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKCFzZWxmKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gY2FsbCAmJiAodHlwZW9mIGNhbGwgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikgPyBjYWxsIDogc2VsZjsgfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcIiArIHR5cGVvZiBzdXBlckNsYXNzKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCBlbnVtZXJhYmxlOiBmYWxzZSwgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKSA6IHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7IH1cblxuaW1wb3J0IHsgQ29tcG9uZW50LCBDaGlsZHJlbiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgeyBzdG9yZVNoYXBlLCBzdWJzY3JpcHRpb25TaGFwZSB9IGZyb20gJy4uL3V0aWxzL1Byb3BUeXBlcyc7XG5pbXBvcnQgd2FybmluZyBmcm9tICcuLi91dGlscy93YXJuaW5nJztcblxudmFyIGRpZFdhcm5BYm91dFJlY2VpdmluZ1N0b3JlID0gZmFsc2U7XG5mdW5jdGlvbiB3YXJuQWJvdXRSZWNlaXZpbmdTdG9yZSgpIHtcbiAgaWYgKGRpZFdhcm5BYm91dFJlY2VpdmluZ1N0b3JlKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGRpZFdhcm5BYm91dFJlY2VpdmluZ1N0b3JlID0gdHJ1ZTtcblxuICB3YXJuaW5nKCc8UHJvdmlkZXI+IGRvZXMgbm90IHN1cHBvcnQgY2hhbmdpbmcgYHN0b3JlYCBvbiB0aGUgZmx5LiAnICsgJ0l0IGlzIG1vc3QgbGlrZWx5IHRoYXQgeW91IHNlZSB0aGlzIGVycm9yIGJlY2F1c2UgeW91IHVwZGF0ZWQgdG8gJyArICdSZWR1eCAyLnggYW5kIFJlYWN0IFJlZHV4IDIueCB3aGljaCBubyBsb25nZXIgaG90IHJlbG9hZCByZWR1Y2VycyAnICsgJ2F1dG9tYXRpY2FsbHkuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vcmVhY3Rqcy9yZWFjdC1yZWR1eC9yZWxlYXNlcy8nICsgJ3RhZy92Mi4wLjAgZm9yIHRoZSBtaWdyYXRpb24gaW5zdHJ1Y3Rpb25zLicpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUHJvdmlkZXIoKSB7XG4gIHZhciBfUHJvdmlkZXIkY2hpbGRDb250ZXg7XG5cbiAgdmFyIHN0b3JlS2V5ID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiAnc3RvcmUnO1xuICB2YXIgc3ViS2V5ID0gYXJndW1lbnRzWzFdO1xuXG4gIHZhciBzdWJzY3JpcHRpb25LZXkgPSBzdWJLZXkgfHwgc3RvcmVLZXkgKyAnU3Vic2NyaXB0aW9uJztcblxuICB2YXIgUHJvdmlkZXIgPSBmdW5jdGlvbiAoX0NvbXBvbmVudCkge1xuICAgIF9pbmhlcml0cyhQcm92aWRlciwgX0NvbXBvbmVudCk7XG5cbiAgICBQcm92aWRlci5wcm90b3R5cGUuZ2V0Q2hpbGRDb250ZXh0ID0gZnVuY3Rpb24gZ2V0Q2hpbGRDb250ZXh0KCkge1xuICAgICAgdmFyIF9yZWY7XG5cbiAgICAgIHJldHVybiBfcmVmID0ge30sIF9yZWZbc3RvcmVLZXldID0gdGhpc1tzdG9yZUtleV0sIF9yZWZbc3Vic2NyaXB0aW9uS2V5XSA9IG51bGwsIF9yZWY7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIFByb3ZpZGVyKHByb3BzLCBjb250ZXh0KSB7XG4gICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgUHJvdmlkZXIpO1xuXG4gICAgICB2YXIgX3RoaXMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCBfQ29tcG9uZW50LmNhbGwodGhpcywgcHJvcHMsIGNvbnRleHQpKTtcblxuICAgICAgX3RoaXNbc3RvcmVLZXldID0gcHJvcHMuc3RvcmU7XG4gICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuXG4gICAgUHJvdmlkZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHJldHVybiBDaGlsZHJlbi5vbmx5KHRoaXMucHJvcHMuY2hpbGRyZW4pO1xuICAgIH07XG5cbiAgICByZXR1cm4gUHJvdmlkZXI7XG4gIH0oQ29tcG9uZW50KTtcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIFByb3ZpZGVyLnByb3RvdHlwZS5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzID0gZnVuY3Rpb24gKG5leHRQcm9wcykge1xuICAgICAgaWYgKHRoaXNbc3RvcmVLZXldICE9PSBuZXh0UHJvcHMuc3RvcmUpIHtcbiAgICAgICAgd2FybkFib3V0UmVjZWl2aW5nU3RvcmUoKTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgUHJvdmlkZXIucHJvcFR5cGVzID0ge1xuICAgIHN0b3JlOiBzdG9yZVNoYXBlLmlzUmVxdWlyZWQsXG4gICAgY2hpbGRyZW46IFByb3BUeXBlcy5lbGVtZW50LmlzUmVxdWlyZWRcbiAgfTtcbiAgUHJvdmlkZXIuY2hpbGRDb250ZXh0VHlwZXMgPSAoX1Byb3ZpZGVyJGNoaWxkQ29udGV4ID0ge30sIF9Qcm92aWRlciRjaGlsZENvbnRleFtzdG9yZUtleV0gPSBzdG9yZVNoYXBlLmlzUmVxdWlyZWQsIF9Qcm92aWRlciRjaGlsZENvbnRleFtzdWJzY3JpcHRpb25LZXldID0gc3Vic2NyaXB0aW9uU2hhcGUsIF9Qcm92aWRlciRjaGlsZENvbnRleCk7XG4gIFByb3ZpZGVyLmRpc3BsYXlOYW1lID0gJ1Byb3ZpZGVyJztcblxuICByZXR1cm4gUHJvdmlkZXI7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZVByb3ZpZGVyKCk7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1yZWR1eC9lcy9jb21wb25lbnRzL1Byb3ZpZGVyLmpzIiwidmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKG9iaiwga2V5cykgeyB2YXIgdGFyZ2V0ID0ge307IGZvciAodmFyIGkgaW4gb2JqKSB7IGlmIChrZXlzLmluZGV4T2YoaSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgaSkpIGNvbnRpbnVlOyB0YXJnZXRbaV0gPSBvYmpbaV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgY29ubmVjdEFkdmFuY2VkIGZyb20gJy4uL2NvbXBvbmVudHMvY29ubmVjdEFkdmFuY2VkJztcbmltcG9ydCBzaGFsbG93RXF1YWwgZnJvbSAnLi4vdXRpbHMvc2hhbGxvd0VxdWFsJztcbmltcG9ydCBkZWZhdWx0TWFwRGlzcGF0Y2hUb1Byb3BzRmFjdG9yaWVzIGZyb20gJy4vbWFwRGlzcGF0Y2hUb1Byb3BzJztcbmltcG9ydCBkZWZhdWx0TWFwU3RhdGVUb1Byb3BzRmFjdG9yaWVzIGZyb20gJy4vbWFwU3RhdGVUb1Byb3BzJztcbmltcG9ydCBkZWZhdWx0TWVyZ2VQcm9wc0ZhY3RvcmllcyBmcm9tICcuL21lcmdlUHJvcHMnO1xuaW1wb3J0IGRlZmF1bHRTZWxlY3RvckZhY3RvcnkgZnJvbSAnLi9zZWxlY3RvckZhY3RvcnknO1xuXG4vKlxuICBjb25uZWN0IGlzIGEgZmFjYWRlIG92ZXIgY29ubmVjdEFkdmFuY2VkLiBJdCB0dXJucyBpdHMgYXJncyBpbnRvIGEgY29tcGF0aWJsZVxuICBzZWxlY3RvckZhY3RvcnksIHdoaWNoIGhhcyB0aGUgc2lnbmF0dXJlOlxuXG4gICAgKGRpc3BhdGNoLCBvcHRpb25zKSA9PiAobmV4dFN0YXRlLCBuZXh0T3duUHJvcHMpID0+IG5leHRGaW5hbFByb3BzXG4gIFxuICBjb25uZWN0IHBhc3NlcyBpdHMgYXJncyB0byBjb25uZWN0QWR2YW5jZWQgYXMgb3B0aW9ucywgd2hpY2ggd2lsbCBpbiB0dXJuIHBhc3MgdGhlbSB0b1xuICBzZWxlY3RvckZhY3RvcnkgZWFjaCB0aW1lIGEgQ29ubmVjdCBjb21wb25lbnQgaW5zdGFuY2UgaXMgaW5zdGFudGlhdGVkIG9yIGhvdCByZWxvYWRlZC5cblxuICBzZWxlY3RvckZhY3RvcnkgcmV0dXJucyBhIGZpbmFsIHByb3BzIHNlbGVjdG9yIGZyb20gaXRzIG1hcFN0YXRlVG9Qcm9wcyxcbiAgbWFwU3RhdGVUb1Byb3BzRmFjdG9yaWVzLCBtYXBEaXNwYXRjaFRvUHJvcHMsIG1hcERpc3BhdGNoVG9Qcm9wc0ZhY3RvcmllcywgbWVyZ2VQcm9wcyxcbiAgbWVyZ2VQcm9wc0ZhY3RvcmllcywgYW5kIHB1cmUgYXJncy5cblxuICBUaGUgcmVzdWx0aW5nIGZpbmFsIHByb3BzIHNlbGVjdG9yIGlzIGNhbGxlZCBieSB0aGUgQ29ubmVjdCBjb21wb25lbnQgaW5zdGFuY2Ugd2hlbmV2ZXJcbiAgaXQgcmVjZWl2ZXMgbmV3IHByb3BzIG9yIHN0b3JlIHN0YXRlLlxuICovXG5cbmZ1bmN0aW9uIG1hdGNoKGFyZywgZmFjdG9yaWVzLCBuYW1lKSB7XG4gIGZvciAodmFyIGkgPSBmYWN0b3JpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICB2YXIgcmVzdWx0ID0gZmFjdG9yaWVzW2ldKGFyZyk7XG4gICAgaWYgKHJlc3VsdCkgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAoZGlzcGF0Y2gsIG9wdGlvbnMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgdmFsdWUgb2YgdHlwZSAnICsgdHlwZW9mIGFyZyArICcgZm9yICcgKyBuYW1lICsgJyBhcmd1bWVudCB3aGVuIGNvbm5lY3RpbmcgY29tcG9uZW50ICcgKyBvcHRpb25zLndyYXBwZWRDb21wb25lbnROYW1lICsgJy4nKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gc3RyaWN0RXF1YWwoYSwgYikge1xuICByZXR1cm4gYSA9PT0gYjtcbn1cblxuLy8gY3JlYXRlQ29ubmVjdCB3aXRoIGRlZmF1bHQgYXJncyBidWlsZHMgdGhlICdvZmZpY2lhbCcgY29ubmVjdCBiZWhhdmlvci4gQ2FsbGluZyBpdCB3aXRoXG4vLyBkaWZmZXJlbnQgb3B0aW9ucyBvcGVucyB1cCBzb21lIHRlc3RpbmcgYW5kIGV4dGVuc2liaWxpdHkgc2NlbmFyaW9zXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ29ubmVjdCgpIHtcbiAgdmFyIF9yZWYgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9LFxuICAgICAgX3JlZiRjb25uZWN0SE9DID0gX3JlZi5jb25uZWN0SE9DLFxuICAgICAgY29ubmVjdEhPQyA9IF9yZWYkY29ubmVjdEhPQyA9PT0gdW5kZWZpbmVkID8gY29ubmVjdEFkdmFuY2VkIDogX3JlZiRjb25uZWN0SE9DLFxuICAgICAgX3JlZiRtYXBTdGF0ZVRvUHJvcHNGID0gX3JlZi5tYXBTdGF0ZVRvUHJvcHNGYWN0b3JpZXMsXG4gICAgICBtYXBTdGF0ZVRvUHJvcHNGYWN0b3JpZXMgPSBfcmVmJG1hcFN0YXRlVG9Qcm9wc0YgPT09IHVuZGVmaW5lZCA/IGRlZmF1bHRNYXBTdGF0ZVRvUHJvcHNGYWN0b3JpZXMgOiBfcmVmJG1hcFN0YXRlVG9Qcm9wc0YsXG4gICAgICBfcmVmJG1hcERpc3BhdGNoVG9Qcm8gPSBfcmVmLm1hcERpc3BhdGNoVG9Qcm9wc0ZhY3RvcmllcyxcbiAgICAgIG1hcERpc3BhdGNoVG9Qcm9wc0ZhY3RvcmllcyA9IF9yZWYkbWFwRGlzcGF0Y2hUb1BybyA9PT0gdW5kZWZpbmVkID8gZGVmYXVsdE1hcERpc3BhdGNoVG9Qcm9wc0ZhY3RvcmllcyA6IF9yZWYkbWFwRGlzcGF0Y2hUb1BybyxcbiAgICAgIF9yZWYkbWVyZ2VQcm9wc0ZhY3RvciA9IF9yZWYubWVyZ2VQcm9wc0ZhY3RvcmllcyxcbiAgICAgIG1lcmdlUHJvcHNGYWN0b3JpZXMgPSBfcmVmJG1lcmdlUHJvcHNGYWN0b3IgPT09IHVuZGVmaW5lZCA/IGRlZmF1bHRNZXJnZVByb3BzRmFjdG9yaWVzIDogX3JlZiRtZXJnZVByb3BzRmFjdG9yLFxuICAgICAgX3JlZiRzZWxlY3RvckZhY3RvcnkgPSBfcmVmLnNlbGVjdG9yRmFjdG9yeSxcbiAgICAgIHNlbGVjdG9yRmFjdG9yeSA9IF9yZWYkc2VsZWN0b3JGYWN0b3J5ID09PSB1bmRlZmluZWQgPyBkZWZhdWx0U2VsZWN0b3JGYWN0b3J5IDogX3JlZiRzZWxlY3RvckZhY3Rvcnk7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIGNvbm5lY3QobWFwU3RhdGVUb1Byb3BzLCBtYXBEaXNwYXRjaFRvUHJvcHMsIG1lcmdlUHJvcHMpIHtcbiAgICB2YXIgX3JlZjIgPSBhcmd1bWVudHMubGVuZ3RoID4gMyAmJiBhcmd1bWVudHNbM10gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1szXSA6IHt9LFxuICAgICAgICBfcmVmMiRwdXJlID0gX3JlZjIucHVyZSxcbiAgICAgICAgcHVyZSA9IF9yZWYyJHB1cmUgPT09IHVuZGVmaW5lZCA/IHRydWUgOiBfcmVmMiRwdXJlLFxuICAgICAgICBfcmVmMiRhcmVTdGF0ZXNFcXVhbCA9IF9yZWYyLmFyZVN0YXRlc0VxdWFsLFxuICAgICAgICBhcmVTdGF0ZXNFcXVhbCA9IF9yZWYyJGFyZVN0YXRlc0VxdWFsID09PSB1bmRlZmluZWQgPyBzdHJpY3RFcXVhbCA6IF9yZWYyJGFyZVN0YXRlc0VxdWFsLFxuICAgICAgICBfcmVmMiRhcmVPd25Qcm9wc0VxdWEgPSBfcmVmMi5hcmVPd25Qcm9wc0VxdWFsLFxuICAgICAgICBhcmVPd25Qcm9wc0VxdWFsID0gX3JlZjIkYXJlT3duUHJvcHNFcXVhID09PSB1bmRlZmluZWQgPyBzaGFsbG93RXF1YWwgOiBfcmVmMiRhcmVPd25Qcm9wc0VxdWEsXG4gICAgICAgIF9yZWYyJGFyZVN0YXRlUHJvcHNFcSA9IF9yZWYyLmFyZVN0YXRlUHJvcHNFcXVhbCxcbiAgICAgICAgYXJlU3RhdGVQcm9wc0VxdWFsID0gX3JlZjIkYXJlU3RhdGVQcm9wc0VxID09PSB1bmRlZmluZWQgPyBzaGFsbG93RXF1YWwgOiBfcmVmMiRhcmVTdGF0ZVByb3BzRXEsXG4gICAgICAgIF9yZWYyJGFyZU1lcmdlZFByb3BzRSA9IF9yZWYyLmFyZU1lcmdlZFByb3BzRXF1YWwsXG4gICAgICAgIGFyZU1lcmdlZFByb3BzRXF1YWwgPSBfcmVmMiRhcmVNZXJnZWRQcm9wc0UgPT09IHVuZGVmaW5lZCA/IHNoYWxsb3dFcXVhbCA6IF9yZWYyJGFyZU1lcmdlZFByb3BzRSxcbiAgICAgICAgZXh0cmFPcHRpb25zID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYyLCBbJ3B1cmUnLCAnYXJlU3RhdGVzRXF1YWwnLCAnYXJlT3duUHJvcHNFcXVhbCcsICdhcmVTdGF0ZVByb3BzRXF1YWwnLCAnYXJlTWVyZ2VkUHJvcHNFcXVhbCddKTtcblxuICAgIHZhciBpbml0TWFwU3RhdGVUb1Byb3BzID0gbWF0Y2gobWFwU3RhdGVUb1Byb3BzLCBtYXBTdGF0ZVRvUHJvcHNGYWN0b3JpZXMsICdtYXBTdGF0ZVRvUHJvcHMnKTtcbiAgICB2YXIgaW5pdE1hcERpc3BhdGNoVG9Qcm9wcyA9IG1hdGNoKG1hcERpc3BhdGNoVG9Qcm9wcywgbWFwRGlzcGF0Y2hUb1Byb3BzRmFjdG9yaWVzLCAnbWFwRGlzcGF0Y2hUb1Byb3BzJyk7XG4gICAgdmFyIGluaXRNZXJnZVByb3BzID0gbWF0Y2gobWVyZ2VQcm9wcywgbWVyZ2VQcm9wc0ZhY3RvcmllcywgJ21lcmdlUHJvcHMnKTtcblxuICAgIHJldHVybiBjb25uZWN0SE9DKHNlbGVjdG9yRmFjdG9yeSwgX2V4dGVuZHMoe1xuICAgICAgLy8gdXNlZCBpbiBlcnJvciBtZXNzYWdlc1xuICAgICAgbWV0aG9kTmFtZTogJ2Nvbm5lY3QnLFxuXG4gICAgICAvLyB1c2VkIHRvIGNvbXB1dGUgQ29ubmVjdCdzIGRpc3BsYXlOYW1lIGZyb20gdGhlIHdyYXBwZWQgY29tcG9uZW50J3MgZGlzcGxheU5hbWUuXG4gICAgICBnZXREaXNwbGF5TmFtZTogZnVuY3Rpb24gZ2V0RGlzcGxheU5hbWUobmFtZSkge1xuICAgICAgICByZXR1cm4gJ0Nvbm5lY3QoJyArIG5hbWUgKyAnKSc7XG4gICAgICB9LFxuXG4gICAgICAvLyBpZiBtYXBTdGF0ZVRvUHJvcHMgaXMgZmFsc3ksIHRoZSBDb25uZWN0IGNvbXBvbmVudCBkb2Vzbid0IHN1YnNjcmliZSB0byBzdG9yZSBzdGF0ZSBjaGFuZ2VzXG4gICAgICBzaG91bGRIYW5kbGVTdGF0ZUNoYW5nZXM6IEJvb2xlYW4obWFwU3RhdGVUb1Byb3BzKSxcblxuICAgICAgLy8gcGFzc2VkIHRocm91Z2ggdG8gc2VsZWN0b3JGYWN0b3J5XG4gICAgICBpbml0TWFwU3RhdGVUb1Byb3BzOiBpbml0TWFwU3RhdGVUb1Byb3BzLFxuICAgICAgaW5pdE1hcERpc3BhdGNoVG9Qcm9wczogaW5pdE1hcERpc3BhdGNoVG9Qcm9wcyxcbiAgICAgIGluaXRNZXJnZVByb3BzOiBpbml0TWVyZ2VQcm9wcyxcbiAgICAgIHB1cmU6IHB1cmUsXG4gICAgICBhcmVTdGF0ZXNFcXVhbDogYXJlU3RhdGVzRXF1YWwsXG4gICAgICBhcmVPd25Qcm9wc0VxdWFsOiBhcmVPd25Qcm9wc0VxdWFsLFxuICAgICAgYXJlU3RhdGVQcm9wc0VxdWFsOiBhcmVTdGF0ZVByb3BzRXF1YWwsXG4gICAgICBhcmVNZXJnZWRQcm9wc0VxdWFsOiBhcmVNZXJnZWRQcm9wc0VxdWFsXG5cbiAgICB9LCBleHRyYU9wdGlvbnMpKTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY3JlYXRlQ29ubmVjdCgpO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QtcmVkdXgvZXMvY29ubmVjdC9jb25uZWN0LmpzIiwiaW1wb3J0IHsgYmluZEFjdGlvbkNyZWF0b3JzIH0gZnJvbSAncmVkdXgnO1xuaW1wb3J0IHsgd3JhcE1hcFRvUHJvcHNDb25zdGFudCwgd3JhcE1hcFRvUHJvcHNGdW5jIH0gZnJvbSAnLi93cmFwTWFwVG9Qcm9wcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiB3aGVuTWFwRGlzcGF0Y2hUb1Byb3BzSXNGdW5jdGlvbihtYXBEaXNwYXRjaFRvUHJvcHMpIHtcbiAgcmV0dXJuIHR5cGVvZiBtYXBEaXNwYXRjaFRvUHJvcHMgPT09ICdmdW5jdGlvbicgPyB3cmFwTWFwVG9Qcm9wc0Z1bmMobWFwRGlzcGF0Y2hUb1Byb3BzLCAnbWFwRGlzcGF0Y2hUb1Byb3BzJykgOiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3aGVuTWFwRGlzcGF0Y2hUb1Byb3BzSXNNaXNzaW5nKG1hcERpc3BhdGNoVG9Qcm9wcykge1xuICByZXR1cm4gIW1hcERpc3BhdGNoVG9Qcm9wcyA/IHdyYXBNYXBUb1Byb3BzQ29uc3RhbnQoZnVuY3Rpb24gKGRpc3BhdGNoKSB7XG4gICAgcmV0dXJuIHsgZGlzcGF0Y2g6IGRpc3BhdGNoIH07XG4gIH0pIDogdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gd2hlbk1hcERpc3BhdGNoVG9Qcm9wc0lzT2JqZWN0KG1hcERpc3BhdGNoVG9Qcm9wcykge1xuICByZXR1cm4gbWFwRGlzcGF0Y2hUb1Byb3BzICYmIHR5cGVvZiBtYXBEaXNwYXRjaFRvUHJvcHMgPT09ICdvYmplY3QnID8gd3JhcE1hcFRvUHJvcHNDb25zdGFudChmdW5jdGlvbiAoZGlzcGF0Y2gpIHtcbiAgICByZXR1cm4gYmluZEFjdGlvbkNyZWF0b3JzKG1hcERpc3BhdGNoVG9Qcm9wcywgZGlzcGF0Y2gpO1xuICB9KSA6IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgW3doZW5NYXBEaXNwYXRjaFRvUHJvcHNJc0Z1bmN0aW9uLCB3aGVuTWFwRGlzcGF0Y2hUb1Byb3BzSXNNaXNzaW5nLCB3aGVuTWFwRGlzcGF0Y2hUb1Byb3BzSXNPYmplY3RdO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QtcmVkdXgvZXMvY29ubmVjdC9tYXBEaXNwYXRjaFRvUHJvcHMuanMiLCJpbXBvcnQgeyB3cmFwTWFwVG9Qcm9wc0NvbnN0YW50LCB3cmFwTWFwVG9Qcm9wc0Z1bmMgfSBmcm9tICcuL3dyYXBNYXBUb1Byb3BzJztcblxuZXhwb3J0IGZ1bmN0aW9uIHdoZW5NYXBTdGF0ZVRvUHJvcHNJc0Z1bmN0aW9uKG1hcFN0YXRlVG9Qcm9wcykge1xuICByZXR1cm4gdHlwZW9mIG1hcFN0YXRlVG9Qcm9wcyA9PT0gJ2Z1bmN0aW9uJyA/IHdyYXBNYXBUb1Byb3BzRnVuYyhtYXBTdGF0ZVRvUHJvcHMsICdtYXBTdGF0ZVRvUHJvcHMnKSA6IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdoZW5NYXBTdGF0ZVRvUHJvcHNJc01pc3NpbmcobWFwU3RhdGVUb1Byb3BzKSB7XG4gIHJldHVybiAhbWFwU3RhdGVUb1Byb3BzID8gd3JhcE1hcFRvUHJvcHNDb25zdGFudChmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHt9O1xuICB9KSA6IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgW3doZW5NYXBTdGF0ZVRvUHJvcHNJc0Z1bmN0aW9uLCB3aGVuTWFwU3RhdGVUb1Byb3BzSXNNaXNzaW5nXTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3JlYWN0LXJlZHV4L2VzL2Nvbm5lY3QvbWFwU3RhdGVUb1Byb3BzLmpzIiwidmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcblxuaW1wb3J0IHZlcmlmeVBsYWluT2JqZWN0IGZyb20gJy4uL3V0aWxzL3ZlcmlmeVBsYWluT2JqZWN0JztcblxuZXhwb3J0IGZ1bmN0aW9uIGRlZmF1bHRNZXJnZVByb3BzKHN0YXRlUHJvcHMsIGRpc3BhdGNoUHJvcHMsIG93blByb3BzKSB7XG4gIHJldHVybiBfZXh0ZW5kcyh7fSwgb3duUHJvcHMsIHN0YXRlUHJvcHMsIGRpc3BhdGNoUHJvcHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JhcE1lcmdlUHJvcHNGdW5jKG1lcmdlUHJvcHMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGluaXRNZXJnZVByb3BzUHJveHkoZGlzcGF0Y2gsIF9yZWYpIHtcbiAgICB2YXIgZGlzcGxheU5hbWUgPSBfcmVmLmRpc3BsYXlOYW1lLFxuICAgICAgICBwdXJlID0gX3JlZi5wdXJlLFxuICAgICAgICBhcmVNZXJnZWRQcm9wc0VxdWFsID0gX3JlZi5hcmVNZXJnZWRQcm9wc0VxdWFsO1xuXG4gICAgdmFyIGhhc1J1bk9uY2UgPSBmYWxzZTtcbiAgICB2YXIgbWVyZ2VkUHJvcHMgPSB2b2lkIDA7XG5cbiAgICByZXR1cm4gZnVuY3Rpb24gbWVyZ2VQcm9wc1Byb3h5KHN0YXRlUHJvcHMsIGRpc3BhdGNoUHJvcHMsIG93blByb3BzKSB7XG4gICAgICB2YXIgbmV4dE1lcmdlZFByb3BzID0gbWVyZ2VQcm9wcyhzdGF0ZVByb3BzLCBkaXNwYXRjaFByb3BzLCBvd25Qcm9wcyk7XG5cbiAgICAgIGlmIChoYXNSdW5PbmNlKSB7XG4gICAgICAgIGlmICghcHVyZSB8fCAhYXJlTWVyZ2VkUHJvcHNFcXVhbChuZXh0TWVyZ2VkUHJvcHMsIG1lcmdlZFByb3BzKSkgbWVyZ2VkUHJvcHMgPSBuZXh0TWVyZ2VkUHJvcHM7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBoYXNSdW5PbmNlID0gdHJ1ZTtcbiAgICAgICAgbWVyZ2VkUHJvcHMgPSBuZXh0TWVyZ2VkUHJvcHM7XG5cbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHZlcmlmeVBsYWluT2JqZWN0KG1lcmdlZFByb3BzLCBkaXNwbGF5TmFtZSwgJ21lcmdlUHJvcHMnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG1lcmdlZFByb3BzO1xuICAgIH07XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3aGVuTWVyZ2VQcm9wc0lzRnVuY3Rpb24obWVyZ2VQcm9wcykge1xuICByZXR1cm4gdHlwZW9mIG1lcmdlUHJvcHMgPT09ICdmdW5jdGlvbicgPyB3cmFwTWVyZ2VQcm9wc0Z1bmMobWVyZ2VQcm9wcykgOiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3aGVuTWVyZ2VQcm9wc0lzT21pdHRlZChtZXJnZVByb3BzKSB7XG4gIHJldHVybiAhbWVyZ2VQcm9wcyA/IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZGVmYXVsdE1lcmdlUHJvcHM7XG4gIH0gOiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFt3aGVuTWVyZ2VQcm9wc0lzRnVuY3Rpb24sIHdoZW5NZXJnZVByb3BzSXNPbWl0dGVkXTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3JlYWN0LXJlZHV4L2VzL2Nvbm5lY3QvbWVyZ2VQcm9wcy5qcyIsImZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhvYmosIGtleXMpIHsgdmFyIHRhcmdldCA9IHt9OyBmb3IgKHZhciBpIGluIG9iaikgeyBpZiAoa2V5cy5pbmRleE9mKGkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGkpKSBjb250aW51ZTsgdGFyZ2V0W2ldID0gb2JqW2ldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IHZlcmlmeVN1YnNlbGVjdG9ycyBmcm9tICcuL3ZlcmlmeVN1YnNlbGVjdG9ycyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBpbXB1cmVGaW5hbFByb3BzU2VsZWN0b3JGYWN0b3J5KG1hcFN0YXRlVG9Qcm9wcywgbWFwRGlzcGF0Y2hUb1Byb3BzLCBtZXJnZVByb3BzLCBkaXNwYXRjaCkge1xuICByZXR1cm4gZnVuY3Rpb24gaW1wdXJlRmluYWxQcm9wc1NlbGVjdG9yKHN0YXRlLCBvd25Qcm9wcykge1xuICAgIHJldHVybiBtZXJnZVByb3BzKG1hcFN0YXRlVG9Qcm9wcyhzdGF0ZSwgb3duUHJvcHMpLCBtYXBEaXNwYXRjaFRvUHJvcHMoZGlzcGF0Y2gsIG93blByb3BzKSwgb3duUHJvcHMpO1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHVyZUZpbmFsUHJvcHNTZWxlY3RvckZhY3RvcnkobWFwU3RhdGVUb1Byb3BzLCBtYXBEaXNwYXRjaFRvUHJvcHMsIG1lcmdlUHJvcHMsIGRpc3BhdGNoLCBfcmVmKSB7XG4gIHZhciBhcmVTdGF0ZXNFcXVhbCA9IF9yZWYuYXJlU3RhdGVzRXF1YWwsXG4gICAgICBhcmVPd25Qcm9wc0VxdWFsID0gX3JlZi5hcmVPd25Qcm9wc0VxdWFsLFxuICAgICAgYXJlU3RhdGVQcm9wc0VxdWFsID0gX3JlZi5hcmVTdGF0ZVByb3BzRXF1YWw7XG5cbiAgdmFyIGhhc1J1bkF0TGVhc3RPbmNlID0gZmFsc2U7XG4gIHZhciBzdGF0ZSA9IHZvaWQgMDtcbiAgdmFyIG93blByb3BzID0gdm9pZCAwO1xuICB2YXIgc3RhdGVQcm9wcyA9IHZvaWQgMDtcbiAgdmFyIGRpc3BhdGNoUHJvcHMgPSB2b2lkIDA7XG4gIHZhciBtZXJnZWRQcm9wcyA9IHZvaWQgMDtcblxuICBmdW5jdGlvbiBoYW5kbGVGaXJzdENhbGwoZmlyc3RTdGF0ZSwgZmlyc3RPd25Qcm9wcykge1xuICAgIHN0YXRlID0gZmlyc3RTdGF0ZTtcbiAgICBvd25Qcm9wcyA9IGZpcnN0T3duUHJvcHM7XG4gICAgc3RhdGVQcm9wcyA9IG1hcFN0YXRlVG9Qcm9wcyhzdGF0ZSwgb3duUHJvcHMpO1xuICAgIGRpc3BhdGNoUHJvcHMgPSBtYXBEaXNwYXRjaFRvUHJvcHMoZGlzcGF0Y2gsIG93blByb3BzKTtcbiAgICBtZXJnZWRQcm9wcyA9IG1lcmdlUHJvcHMoc3RhdGVQcm9wcywgZGlzcGF0Y2hQcm9wcywgb3duUHJvcHMpO1xuICAgIGhhc1J1bkF0TGVhc3RPbmNlID0gdHJ1ZTtcbiAgICByZXR1cm4gbWVyZ2VkUHJvcHM7XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVOZXdQcm9wc0FuZE5ld1N0YXRlKCkge1xuICAgIHN0YXRlUHJvcHMgPSBtYXBTdGF0ZVRvUHJvcHMoc3RhdGUsIG93blByb3BzKTtcblxuICAgIGlmIChtYXBEaXNwYXRjaFRvUHJvcHMuZGVwZW5kc09uT3duUHJvcHMpIGRpc3BhdGNoUHJvcHMgPSBtYXBEaXNwYXRjaFRvUHJvcHMoZGlzcGF0Y2gsIG93blByb3BzKTtcblxuICAgIG1lcmdlZFByb3BzID0gbWVyZ2VQcm9wcyhzdGF0ZVByb3BzLCBkaXNwYXRjaFByb3BzLCBvd25Qcm9wcyk7XG4gICAgcmV0dXJuIG1lcmdlZFByb3BzO1xuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlTmV3UHJvcHMoKSB7XG4gICAgaWYgKG1hcFN0YXRlVG9Qcm9wcy5kZXBlbmRzT25Pd25Qcm9wcykgc3RhdGVQcm9wcyA9IG1hcFN0YXRlVG9Qcm9wcyhzdGF0ZSwgb3duUHJvcHMpO1xuXG4gICAgaWYgKG1hcERpc3BhdGNoVG9Qcm9wcy5kZXBlbmRzT25Pd25Qcm9wcykgZGlzcGF0Y2hQcm9wcyA9IG1hcERpc3BhdGNoVG9Qcm9wcyhkaXNwYXRjaCwgb3duUHJvcHMpO1xuXG4gICAgbWVyZ2VkUHJvcHMgPSBtZXJnZVByb3BzKHN0YXRlUHJvcHMsIGRpc3BhdGNoUHJvcHMsIG93blByb3BzKTtcbiAgICByZXR1cm4gbWVyZ2VkUHJvcHM7XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVOZXdTdGF0ZSgpIHtcbiAgICB2YXIgbmV4dFN0YXRlUHJvcHMgPSBtYXBTdGF0ZVRvUHJvcHMoc3RhdGUsIG93blByb3BzKTtcbiAgICB2YXIgc3RhdGVQcm9wc0NoYW5nZWQgPSAhYXJlU3RhdGVQcm9wc0VxdWFsKG5leHRTdGF0ZVByb3BzLCBzdGF0ZVByb3BzKTtcbiAgICBzdGF0ZVByb3BzID0gbmV4dFN0YXRlUHJvcHM7XG5cbiAgICBpZiAoc3RhdGVQcm9wc0NoYW5nZWQpIG1lcmdlZFByb3BzID0gbWVyZ2VQcm9wcyhzdGF0ZVByb3BzLCBkaXNwYXRjaFByb3BzLCBvd25Qcm9wcyk7XG5cbiAgICByZXR1cm4gbWVyZ2VkUHJvcHM7XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVTdWJzZXF1ZW50Q2FsbHMobmV4dFN0YXRlLCBuZXh0T3duUHJvcHMpIHtcbiAgICB2YXIgcHJvcHNDaGFuZ2VkID0gIWFyZU93blByb3BzRXF1YWwobmV4dE93blByb3BzLCBvd25Qcm9wcyk7XG4gICAgdmFyIHN0YXRlQ2hhbmdlZCA9ICFhcmVTdGF0ZXNFcXVhbChuZXh0U3RhdGUsIHN0YXRlKTtcbiAgICBzdGF0ZSA9IG5leHRTdGF0ZTtcbiAgICBvd25Qcm9wcyA9IG5leHRPd25Qcm9wcztcblxuICAgIGlmIChwcm9wc0NoYW5nZWQgJiYgc3RhdGVDaGFuZ2VkKSByZXR1cm4gaGFuZGxlTmV3UHJvcHNBbmROZXdTdGF0ZSgpO1xuICAgIGlmIChwcm9wc0NoYW5nZWQpIHJldHVybiBoYW5kbGVOZXdQcm9wcygpO1xuICAgIGlmIChzdGF0ZUNoYW5nZWQpIHJldHVybiBoYW5kbGVOZXdTdGF0ZSgpO1xuICAgIHJldHVybiBtZXJnZWRQcm9wcztcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiBwdXJlRmluYWxQcm9wc1NlbGVjdG9yKG5leHRTdGF0ZSwgbmV4dE93blByb3BzKSB7XG4gICAgcmV0dXJuIGhhc1J1bkF0TGVhc3RPbmNlID8gaGFuZGxlU3Vic2VxdWVudENhbGxzKG5leHRTdGF0ZSwgbmV4dE93blByb3BzKSA6IGhhbmRsZUZpcnN0Q2FsbChuZXh0U3RhdGUsIG5leHRPd25Qcm9wcyk7XG4gIH07XG59XG5cbi8vIFRPRE86IEFkZCBtb3JlIGNvbW1lbnRzXG5cbi8vIElmIHB1cmUgaXMgdHJ1ZSwgdGhlIHNlbGVjdG9yIHJldHVybmVkIGJ5IHNlbGVjdG9yRmFjdG9yeSB3aWxsIG1lbW9pemUgaXRzIHJlc3VsdHMsXG4vLyBhbGxvd2luZyBjb25uZWN0QWR2YW5jZWQncyBzaG91bGRDb21wb25lbnRVcGRhdGUgdG8gcmV0dXJuIGZhbHNlIGlmIGZpbmFsXG4vLyBwcm9wcyBoYXZlIG5vdCBjaGFuZ2VkLiBJZiBmYWxzZSwgdGhlIHNlbGVjdG9yIHdpbGwgYWx3YXlzIHJldHVybiBhIG5ld1xuLy8gb2JqZWN0IGFuZCBzaG91bGRDb21wb25lbnRVcGRhdGUgd2lsbCBhbHdheXMgcmV0dXJuIHRydWUuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGZpbmFsUHJvcHNTZWxlY3RvckZhY3RvcnkoZGlzcGF0Y2gsIF9yZWYyKSB7XG4gIHZhciBpbml0TWFwU3RhdGVUb1Byb3BzID0gX3JlZjIuaW5pdE1hcFN0YXRlVG9Qcm9wcyxcbiAgICAgIGluaXRNYXBEaXNwYXRjaFRvUHJvcHMgPSBfcmVmMi5pbml0TWFwRGlzcGF0Y2hUb1Byb3BzLFxuICAgICAgaW5pdE1lcmdlUHJvcHMgPSBfcmVmMi5pbml0TWVyZ2VQcm9wcyxcbiAgICAgIG9wdGlvbnMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZjIsIFsnaW5pdE1hcFN0YXRlVG9Qcm9wcycsICdpbml0TWFwRGlzcGF0Y2hUb1Byb3BzJywgJ2luaXRNZXJnZVByb3BzJ10pO1xuXG4gIHZhciBtYXBTdGF0ZVRvUHJvcHMgPSBpbml0TWFwU3RhdGVUb1Byb3BzKGRpc3BhdGNoLCBvcHRpb25zKTtcbiAgdmFyIG1hcERpc3BhdGNoVG9Qcm9wcyA9IGluaXRNYXBEaXNwYXRjaFRvUHJvcHMoZGlzcGF0Y2gsIG9wdGlvbnMpO1xuICB2YXIgbWVyZ2VQcm9wcyA9IGluaXRNZXJnZVByb3BzKGRpc3BhdGNoLCBvcHRpb25zKTtcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIHZlcmlmeVN1YnNlbGVjdG9ycyhtYXBTdGF0ZVRvUHJvcHMsIG1hcERpc3BhdGNoVG9Qcm9wcywgbWVyZ2VQcm9wcywgb3B0aW9ucy5kaXNwbGF5TmFtZSk7XG4gIH1cblxuICB2YXIgc2VsZWN0b3JGYWN0b3J5ID0gb3B0aW9ucy5wdXJlID8gcHVyZUZpbmFsUHJvcHNTZWxlY3RvckZhY3RvcnkgOiBpbXB1cmVGaW5hbFByb3BzU2VsZWN0b3JGYWN0b3J5O1xuXG4gIHJldHVybiBzZWxlY3RvckZhY3RvcnkobWFwU3RhdGVUb1Byb3BzLCBtYXBEaXNwYXRjaFRvUHJvcHMsIG1lcmdlUHJvcHMsIGRpc3BhdGNoLCBvcHRpb25zKTtcbn1cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3JlYWN0LXJlZHV4L2VzL2Nvbm5lY3Qvc2VsZWN0b3JGYWN0b3J5LmpzIiwiaW1wb3J0IHdhcm5pbmcgZnJvbSAnLi4vdXRpbHMvd2FybmluZyc7XG5cbmZ1bmN0aW9uIHZlcmlmeShzZWxlY3RvciwgbWV0aG9kTmFtZSwgZGlzcGxheU5hbWUpIHtcbiAgaWYgKCFzZWxlY3Rvcikge1xuICAgIHRocm93IG5ldyBFcnJvcignVW5leHBlY3RlZCB2YWx1ZSBmb3IgJyArIG1ldGhvZE5hbWUgKyAnIGluICcgKyBkaXNwbGF5TmFtZSArICcuJyk7XG4gIH0gZWxzZSBpZiAobWV0aG9kTmFtZSA9PT0gJ21hcFN0YXRlVG9Qcm9wcycgfHwgbWV0aG9kTmFtZSA9PT0gJ21hcERpc3BhdGNoVG9Qcm9wcycpIHtcbiAgICBpZiAoIXNlbGVjdG9yLmhhc093blByb3BlcnR5KCdkZXBlbmRzT25Pd25Qcm9wcycpKSB7XG4gICAgICB3YXJuaW5nKCdUaGUgc2VsZWN0b3IgZm9yICcgKyBtZXRob2ROYW1lICsgJyBvZiAnICsgZGlzcGxheU5hbWUgKyAnIGRpZCBub3Qgc3BlY2lmeSBhIHZhbHVlIGZvciBkZXBlbmRzT25Pd25Qcm9wcy4nKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdmVyaWZ5U3Vic2VsZWN0b3JzKG1hcFN0YXRlVG9Qcm9wcywgbWFwRGlzcGF0Y2hUb1Byb3BzLCBtZXJnZVByb3BzLCBkaXNwbGF5TmFtZSkge1xuICB2ZXJpZnkobWFwU3RhdGVUb1Byb3BzLCAnbWFwU3RhdGVUb1Byb3BzJywgZGlzcGxheU5hbWUpO1xuICB2ZXJpZnkobWFwRGlzcGF0Y2hUb1Byb3BzLCAnbWFwRGlzcGF0Y2hUb1Byb3BzJywgZGlzcGxheU5hbWUpO1xuICB2ZXJpZnkobWVyZ2VQcm9wcywgJ21lcmdlUHJvcHMnLCBkaXNwbGF5TmFtZSk7XG59XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1yZWR1eC9lcy9jb25uZWN0L3ZlcmlmeVN1YnNlbGVjdG9ycy5qcyIsImZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbi8vIGVuY2Fwc3VsYXRlcyB0aGUgc3Vic2NyaXB0aW9uIGxvZ2ljIGZvciBjb25uZWN0aW5nIGEgY29tcG9uZW50IHRvIHRoZSByZWR1eCBzdG9yZSwgYXNcbi8vIHdlbGwgYXMgbmVzdGluZyBzdWJzY3JpcHRpb25zIG9mIGRlc2NlbmRhbnQgY29tcG9uZW50cywgc28gdGhhdCB3ZSBjYW4gZW5zdXJlIHRoZVxuLy8gYW5jZXN0b3IgY29tcG9uZW50cyByZS1yZW5kZXIgYmVmb3JlIGRlc2NlbmRhbnRzXG5cbnZhciBDTEVBUkVEID0gbnVsbDtcbnZhciBudWxsTGlzdGVuZXJzID0ge1xuICBub3RpZnk6IGZ1bmN0aW9uIG5vdGlmeSgpIHt9XG59O1xuXG5mdW5jdGlvbiBjcmVhdGVMaXN0ZW5lckNvbGxlY3Rpb24oKSB7XG4gIC8vIHRoZSBjdXJyZW50L25leHQgcGF0dGVybiBpcyBjb3BpZWQgZnJvbSByZWR1eCdzIGNyZWF0ZVN0b3JlIGNvZGUuXG4gIC8vIFRPRE86IHJlZmFjdG9yK2V4cG9zZSB0aGF0IGNvZGUgdG8gYmUgcmV1c2FibGUgaGVyZT9cbiAgdmFyIGN1cnJlbnQgPSBbXTtcbiAgdmFyIG5leHQgPSBbXTtcblxuICByZXR1cm4ge1xuICAgIGNsZWFyOiBmdW5jdGlvbiBjbGVhcigpIHtcbiAgICAgIG5leHQgPSBDTEVBUkVEO1xuICAgICAgY3VycmVudCA9IENMRUFSRUQ7XG4gICAgfSxcbiAgICBub3RpZnk6IGZ1bmN0aW9uIG5vdGlmeSgpIHtcbiAgICAgIHZhciBsaXN0ZW5lcnMgPSBjdXJyZW50ID0gbmV4dDtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdGVuZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGxpc3RlbmVyc1tpXSgpO1xuICAgICAgfVxuICAgIH0sXG4gICAgc3Vic2NyaWJlOiBmdW5jdGlvbiBzdWJzY3JpYmUobGlzdGVuZXIpIHtcbiAgICAgIHZhciBpc1N1YnNjcmliZWQgPSB0cnVlO1xuICAgICAgaWYgKG5leHQgPT09IGN1cnJlbnQpIG5leHQgPSBjdXJyZW50LnNsaWNlKCk7XG4gICAgICBuZXh0LnB1c2gobGlzdGVuZXIpO1xuXG4gICAgICByZXR1cm4gZnVuY3Rpb24gdW5zdWJzY3JpYmUoKSB7XG4gICAgICAgIGlmICghaXNTdWJzY3JpYmVkIHx8IGN1cnJlbnQgPT09IENMRUFSRUQpIHJldHVybjtcbiAgICAgICAgaXNTdWJzY3JpYmVkID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKG5leHQgPT09IGN1cnJlbnQpIG5leHQgPSBjdXJyZW50LnNsaWNlKCk7XG4gICAgICAgIG5leHQuc3BsaWNlKG5leHQuaW5kZXhPZihsaXN0ZW5lciksIDEpO1xuICAgICAgfTtcbiAgICB9XG4gIH07XG59XG5cbnZhciBTdWJzY3JpcHRpb24gPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIFN1YnNjcmlwdGlvbihzdG9yZSwgcGFyZW50U3ViLCBvblN0YXRlQ2hhbmdlKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFN1YnNjcmlwdGlvbik7XG5cbiAgICB0aGlzLnN0b3JlID0gc3RvcmU7XG4gICAgdGhpcy5wYXJlbnRTdWIgPSBwYXJlbnRTdWI7XG4gICAgdGhpcy5vblN0YXRlQ2hhbmdlID0gb25TdGF0ZUNoYW5nZTtcbiAgICB0aGlzLnVuc3Vic2NyaWJlID0gbnVsbDtcbiAgICB0aGlzLmxpc3RlbmVycyA9IG51bGxMaXN0ZW5lcnM7XG4gIH1cblxuICBTdWJzY3JpcHRpb24ucHJvdG90eXBlLmFkZE5lc3RlZFN1YiA9IGZ1bmN0aW9uIGFkZE5lc3RlZFN1YihsaXN0ZW5lcikge1xuICAgIHRoaXMudHJ5U3Vic2NyaWJlKCk7XG4gICAgcmV0dXJuIHRoaXMubGlzdGVuZXJzLnN1YnNjcmliZShsaXN0ZW5lcik7XG4gIH07XG5cbiAgU3Vic2NyaXB0aW9uLnByb3RvdHlwZS5ub3RpZnlOZXN0ZWRTdWJzID0gZnVuY3Rpb24gbm90aWZ5TmVzdGVkU3VicygpIHtcbiAgICB0aGlzLmxpc3RlbmVycy5ub3RpZnkoKTtcbiAgfTtcblxuICBTdWJzY3JpcHRpb24ucHJvdG90eXBlLmlzU3Vic2NyaWJlZCA9IGZ1bmN0aW9uIGlzU3Vic2NyaWJlZCgpIHtcbiAgICByZXR1cm4gQm9vbGVhbih0aGlzLnVuc3Vic2NyaWJlKTtcbiAgfTtcblxuICBTdWJzY3JpcHRpb24ucHJvdG90eXBlLnRyeVN1YnNjcmliZSA9IGZ1bmN0aW9uIHRyeVN1YnNjcmliZSgpIHtcbiAgICBpZiAoIXRoaXMudW5zdWJzY3JpYmUpIHtcbiAgICAgIHRoaXMudW5zdWJzY3JpYmUgPSB0aGlzLnBhcmVudFN1YiA/IHRoaXMucGFyZW50U3ViLmFkZE5lc3RlZFN1Yih0aGlzLm9uU3RhdGVDaGFuZ2UpIDogdGhpcy5zdG9yZS5zdWJzY3JpYmUodGhpcy5vblN0YXRlQ2hhbmdlKTtcblxuICAgICAgdGhpcy5saXN0ZW5lcnMgPSBjcmVhdGVMaXN0ZW5lckNvbGxlY3Rpb24oKTtcbiAgICB9XG4gIH07XG5cbiAgU3Vic2NyaXB0aW9uLnByb3RvdHlwZS50cnlVbnN1YnNjcmliZSA9IGZ1bmN0aW9uIHRyeVVuc3Vic2NyaWJlKCkge1xuICAgIGlmICh0aGlzLnVuc3Vic2NyaWJlKSB7XG4gICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICB0aGlzLnVuc3Vic2NyaWJlID0gbnVsbDtcbiAgICAgIHRoaXMubGlzdGVuZXJzLmNsZWFyKCk7XG4gICAgICB0aGlzLmxpc3RlbmVycyA9IG51bGxMaXN0ZW5lcnM7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBTdWJzY3JpcHRpb247XG59KCk7XG5cbmV4cG9ydCB7IFN1YnNjcmlwdGlvbiBhcyBkZWZhdWx0IH07XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1yZWR1eC9lcy91dGlscy9TdWJzY3JpcHRpb24uanMiLCJ2YXIgaGFzT3duID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcblxuZnVuY3Rpb24gaXMoeCwgeSkge1xuICBpZiAoeCA9PT0geSkge1xuICAgIHJldHVybiB4ICE9PSAwIHx8IHkgIT09IDAgfHwgMSAvIHggPT09IDEgLyB5O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB4ICE9PSB4ICYmIHkgIT09IHk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc2hhbGxvd0VxdWFsKG9iakEsIG9iakIpIHtcbiAgaWYgKGlzKG9iakEsIG9iakIpKSByZXR1cm4gdHJ1ZTtcblxuICBpZiAodHlwZW9mIG9iakEgIT09ICdvYmplY3QnIHx8IG9iakEgPT09IG51bGwgfHwgdHlwZW9mIG9iakIgIT09ICdvYmplY3QnIHx8IG9iakIgPT09IG51bGwpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIga2V5c0EgPSBPYmplY3Qua2V5cyhvYmpBKTtcbiAgdmFyIGtleXNCID0gT2JqZWN0LmtleXMob2JqQik7XG5cbiAgaWYgKGtleXNBLmxlbmd0aCAhPT0ga2V5c0IubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzQS5sZW5ndGg7IGkrKykge1xuICAgIGlmICghaGFzT3duLmNhbGwob2JqQiwga2V5c0FbaV0pIHx8ICFpcyhvYmpBW2tleXNBW2ldXSwgb2JqQltrZXlzQVtpXV0pKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1yZWR1eC9lcy91dGlscy9zaGFsbG93RXF1YWwuanMiLCJmdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmICghc2VsZikgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIGNhbGwgJiYgKHR5cGVvZiBjYWxsID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpID8gY2FsbCA6IHNlbGY7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXCIgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcykgOiBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOyB9XG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNyZWF0ZUhpc3RvcnkgZnJvbSAnaGlzdG9yeS9jcmVhdGVCcm93c2VySGlzdG9yeSc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdyZWFjdC1yb3V0ZXInO1xuXG4vKipcbiAqIFRoZSBwdWJsaWMgQVBJIGZvciBhIDxSb3V0ZXI+IHRoYXQgdXNlcyBIVE1MNSBoaXN0b3J5LlxuICovXG5cbnZhciBCcm93c2VyUm91dGVyID0gZnVuY3Rpb24gKF9SZWFjdCRDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzKEJyb3dzZXJSb3V0ZXIsIF9SZWFjdCRDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIEJyb3dzZXJSb3V0ZXIoKSB7XG4gICAgdmFyIF90ZW1wLCBfdGhpcywgX3JldDtcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBCcm93c2VyUm91dGVyKTtcblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIHJldHVybiBfcmV0ID0gKF90ZW1wID0gKF90aGlzID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgX1JlYWN0JENvbXBvbmVudC5jYWxsLmFwcGx5KF9SZWFjdCRDb21wb25lbnQsIFt0aGlzXS5jb25jYXQoYXJncykpKSwgX3RoaXMpLCBfdGhpcy5oaXN0b3J5ID0gY3JlYXRlSGlzdG9yeShfdGhpcy5wcm9wcyksIF90ZW1wKSwgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oX3RoaXMsIF9yZXQpO1xuICB9XG5cbiAgQnJvd3NlclJvdXRlci5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFJvdXRlciwgeyBoaXN0b3J5OiB0aGlzLmhpc3RvcnksIGNoaWxkcmVuOiB0aGlzLnByb3BzLmNoaWxkcmVuIH0pO1xuICB9O1xuXG4gIHJldHVybiBCcm93c2VyUm91dGVyO1xufShSZWFjdC5Db21wb25lbnQpO1xuXG5Ccm93c2VyUm91dGVyLnByb3BUeXBlcyA9IHtcbiAgYmFzZW5hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGZvcmNlUmVmcmVzaDogUHJvcFR5cGVzLmJvb2wsXG4gIGdldFVzZXJDb25maXJtYXRpb246IFByb3BUeXBlcy5mdW5jLFxuICBrZXlMZW5ndGg6IFByb3BUeXBlcy5udW1iZXIsXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZVxufTtcblxuXG5leHBvcnQgZGVmYXVsdCBCcm93c2VyUm91dGVyO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3Qtcm91dGVyLWRvbS9lcy9Ccm93c2VyUm91dGVyLmpzIiwiZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoIXNlbGYpIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBjYWxsICYmICh0eXBlb2YgY2FsbCA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSA/IGNhbGwgOiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFwiICsgdHlwZW9mIHN1cGVyQ2xhc3MpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIGVudW1lcmFibGU6IGZhbHNlLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzczsgfVxuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjcmVhdGVIaXN0b3J5IGZyb20gJ2hpc3RvcnkvY3JlYXRlSGFzaEhpc3RvcnknO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAncmVhY3Qtcm91dGVyJztcblxuLyoqXG4gKiBUaGUgcHVibGljIEFQSSBmb3IgYSA8Um91dGVyPiB0aGF0IHVzZXMgd2luZG93LmxvY2F0aW9uLmhhc2guXG4gKi9cblxudmFyIEhhc2hSb3V0ZXIgPSBmdW5jdGlvbiAoX1JlYWN0JENvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoSGFzaFJvdXRlciwgX1JlYWN0JENvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gSGFzaFJvdXRlcigpIHtcbiAgICB2YXIgX3RlbXAsIF90aGlzLCBfcmV0O1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEhhc2hSb3V0ZXIpO1xuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgcmV0dXJuIF9yZXQgPSAoX3RlbXAgPSAoX3RoaXMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCBfUmVhY3QkQ29tcG9uZW50LmNhbGwuYXBwbHkoX1JlYWN0JENvbXBvbmVudCwgW3RoaXNdLmNvbmNhdChhcmdzKSkpLCBfdGhpcyksIF90aGlzLmhpc3RvcnkgPSBjcmVhdGVIaXN0b3J5KF90aGlzLnByb3BzKSwgX3RlbXApLCBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihfdGhpcywgX3JldCk7XG4gIH1cblxuICBIYXNoUm91dGVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoUm91dGVyLCB7IGhpc3Rvcnk6IHRoaXMuaGlzdG9yeSwgY2hpbGRyZW46IHRoaXMucHJvcHMuY2hpbGRyZW4gfSk7XG4gIH07XG5cbiAgcmV0dXJuIEhhc2hSb3V0ZXI7XG59KFJlYWN0LkNvbXBvbmVudCk7XG5cbkhhc2hSb3V0ZXIucHJvcFR5cGVzID0ge1xuICBiYXNlbmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgZ2V0VXNlckNvbmZpcm1hdGlvbjogUHJvcFR5cGVzLmZ1bmMsXG4gIGhhc2hUeXBlOiBQcm9wVHlwZXMub25lT2YoWydoYXNoYmFuZycsICdub3NsYXNoJywgJ3NsYXNoJ10pLFxuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGVcbn07XG5cblxuZXhwb3J0IGRlZmF1bHQgSGFzaFJvdXRlcjtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3JlYWN0LXJvdXRlci1kb20vZXMvSGFzaFJvdXRlci5qcyIsImV4cG9ydCB7IE1lbW9yeVJvdXRlciBhcyBkZWZhdWx0IH0gZnJvbSAncmVhY3Qtcm91dGVyJztcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3JlYWN0LXJvdXRlci1kb20vZXMvTWVtb3J5Um91dGVyLmpzIiwidmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcblxudmFyIF90eXBlb2YgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIiA/IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH0gOiBmdW5jdGlvbiAob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9O1xuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMob2JqLCBrZXlzKSB7IHZhciB0YXJnZXQgPSB7fTsgZm9yICh2YXIgaSBpbiBvYmopIHsgaWYgKGtleXMuaW5kZXhPZihpKSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBpKSkgY29udGludWU7IHRhcmdldFtpXSA9IG9ialtpXTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgUm91dGUgfSBmcm9tICdyZWFjdC1yb3V0ZXInO1xuaW1wb3J0IExpbmsgZnJvbSAnLi9MaW5rJztcblxuLyoqXG4gKiBBIDxMaW5rPiB3cmFwcGVyIHRoYXQga25vd3MgaWYgaXQncyBcImFjdGl2ZVwiIG9yIG5vdC5cbiAqL1xudmFyIE5hdkxpbmsgPSBmdW5jdGlvbiBOYXZMaW5rKF9yZWYpIHtcbiAgdmFyIHRvID0gX3JlZi50byxcbiAgICAgIGV4YWN0ID0gX3JlZi5leGFjdCxcbiAgICAgIHN0cmljdCA9IF9yZWYuc3RyaWN0LFxuICAgICAgbG9jYXRpb24gPSBfcmVmLmxvY2F0aW9uLFxuICAgICAgYWN0aXZlQ2xhc3NOYW1lID0gX3JlZi5hY3RpdmVDbGFzc05hbWUsXG4gICAgICBjbGFzc05hbWUgPSBfcmVmLmNsYXNzTmFtZSxcbiAgICAgIGFjdGl2ZVN0eWxlID0gX3JlZi5hY3RpdmVTdHlsZSxcbiAgICAgIHN0eWxlID0gX3JlZi5zdHlsZSxcbiAgICAgIGdldElzQWN0aXZlID0gX3JlZi5pc0FjdGl2ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgWyd0bycsICdleGFjdCcsICdzdHJpY3QnLCAnbG9jYXRpb24nLCAnYWN0aXZlQ2xhc3NOYW1lJywgJ2NsYXNzTmFtZScsICdhY3RpdmVTdHlsZScsICdzdHlsZScsICdpc0FjdGl2ZSddKTtcblxuICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChSb3V0ZSwge1xuICAgIHBhdGg6ICh0eXBlb2YgdG8gPT09ICd1bmRlZmluZWQnID8gJ3VuZGVmaW5lZCcgOiBfdHlwZW9mKHRvKSkgPT09ICdvYmplY3QnID8gdG8ucGF0aG5hbWUgOiB0byxcbiAgICBleGFjdDogZXhhY3QsXG4gICAgc3RyaWN0OiBzdHJpY3QsXG4gICAgbG9jYXRpb246IGxvY2F0aW9uLFxuICAgIGNoaWxkcmVuOiBmdW5jdGlvbiBjaGlsZHJlbihfcmVmMikge1xuICAgICAgdmFyIGxvY2F0aW9uID0gX3JlZjIubG9jYXRpb24sXG4gICAgICAgICAgbWF0Y2ggPSBfcmVmMi5tYXRjaDtcblxuICAgICAgdmFyIGlzQWN0aXZlID0gISEoZ2V0SXNBY3RpdmUgPyBnZXRJc0FjdGl2ZShtYXRjaCwgbG9jYXRpb24pIDogbWF0Y2gpO1xuXG4gICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChMaW5rLCBfZXh0ZW5kcyh7XG4gICAgICAgIHRvOiB0byxcbiAgICAgICAgY2xhc3NOYW1lOiBpc0FjdGl2ZSA/IFthY3RpdmVDbGFzc05hbWUsIGNsYXNzTmFtZV0uZmlsdGVyKGZ1bmN0aW9uIChpKSB7XG4gICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgIH0pLmpvaW4oJyAnKSA6IGNsYXNzTmFtZSxcbiAgICAgICAgc3R5bGU6IGlzQWN0aXZlID8gX2V4dGVuZHMoe30sIHN0eWxlLCBhY3RpdmVTdHlsZSkgOiBzdHlsZVxuICAgICAgfSwgcmVzdCkpO1xuICAgIH1cbiAgfSk7XG59O1xuXG5OYXZMaW5rLnByb3BUeXBlcyA9IHtcbiAgdG86IExpbmsucHJvcFR5cGVzLnRvLFxuICBleGFjdDogUHJvcFR5cGVzLmJvb2wsXG4gIHN0cmljdDogUHJvcFR5cGVzLmJvb2wsXG4gIGxvY2F0aW9uOiBQcm9wVHlwZXMub2JqZWN0LFxuICBhY3RpdmVDbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgYWN0aXZlU3R5bGU6IFByb3BUeXBlcy5vYmplY3QsXG4gIHN0eWxlOiBQcm9wVHlwZXMub2JqZWN0LFxuICBpc0FjdGl2ZTogUHJvcFR5cGVzLmZ1bmNcbn07XG5cbk5hdkxpbmsuZGVmYXVsdFByb3BzID0ge1xuICBhY3RpdmVDbGFzc05hbWU6ICdhY3RpdmUnXG59O1xuXG5leHBvcnQgZGVmYXVsdCBOYXZMaW5rO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3Qtcm91dGVyLWRvbS9lcy9OYXZMaW5rLmpzIiwiZXhwb3J0IHsgUHJvbXB0IGFzIGRlZmF1bHQgfSBmcm9tICdyZWFjdC1yb3V0ZXInO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3Qtcm91dGVyLWRvbS9lcy9Qcm9tcHQuanMiLCJleHBvcnQgeyBSZWRpcmVjdCBhcyBkZWZhdWx0IH0gZnJvbSAncmVhY3Qtcm91dGVyJztcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3JlYWN0LXJvdXRlci1kb20vZXMvUmVkaXJlY3QuanMiLCJleHBvcnQgeyBSb3V0ZSBhcyBkZWZhdWx0IH0gZnJvbSAncmVhY3Qtcm91dGVyJztcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3JlYWN0LXJvdXRlci1kb20vZXMvUm91dGUuanMiLCJleHBvcnQgeyBSb3V0ZXIgYXMgZGVmYXVsdCB9IGZyb20gJ3JlYWN0LXJvdXRlcic7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1yb3V0ZXItZG9tL2VzL1JvdXRlci5qcyIsImV4cG9ydCB7IFN0YXRpY1JvdXRlciBhcyBkZWZhdWx0IH0gZnJvbSAncmVhY3Qtcm91dGVyJztcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3JlYWN0LXJvdXRlci1kb20vZXMvU3RhdGljUm91dGVyLmpzIiwiZXhwb3J0IHsgU3dpdGNoIGFzIGRlZmF1bHQgfSBmcm9tICdyZWFjdC1yb3V0ZXInO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3Qtcm91dGVyLWRvbS9lcy9Td2l0Y2guanMiLCJleHBvcnQgeyBtYXRjaFBhdGggYXMgZGVmYXVsdCB9IGZyb20gJ3JlYWN0LXJvdXRlcic7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1yb3V0ZXItZG9tL2VzL21hdGNoUGF0aC5qcyIsImV4cG9ydCB7IHdpdGhSb3V0ZXIgYXMgZGVmYXVsdCB9IGZyb20gJ3JlYWN0LXJvdXRlcic7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1yb3V0ZXItZG9tL2VzL3dpdGhSb3V0ZXIuanMiLCJmdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmICghc2VsZikgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIGNhbGwgJiYgKHR5cGVvZiBjYWxsID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpID8gY2FsbCA6IHNlbGY7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXCIgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcykgOiBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOyB9XG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNyZWF0ZUhpc3RvcnkgZnJvbSAnaGlzdG9yeS9jcmVhdGVNZW1vcnlIaXN0b3J5JztcbmltcG9ydCBSb3V0ZXIgZnJvbSAnLi9Sb3V0ZXInO1xuXG4vKipcbiAqIFRoZSBwdWJsaWMgQVBJIGZvciBhIDxSb3V0ZXI+IHRoYXQgc3RvcmVzIGxvY2F0aW9uIGluIG1lbW9yeS5cbiAqL1xuXG52YXIgTWVtb3J5Um91dGVyID0gZnVuY3Rpb24gKF9SZWFjdCRDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzKE1lbW9yeVJvdXRlciwgX1JlYWN0JENvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gTWVtb3J5Um91dGVyKCkge1xuICAgIHZhciBfdGVtcCwgX3RoaXMsIF9yZXQ7XG5cbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgTWVtb3J5Um91dGVyKTtcblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIHJldHVybiBfcmV0ID0gKF90ZW1wID0gKF90aGlzID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgX1JlYWN0JENvbXBvbmVudC5jYWxsLmFwcGx5KF9SZWFjdCRDb21wb25lbnQsIFt0aGlzXS5jb25jYXQoYXJncykpKSwgX3RoaXMpLCBfdGhpcy5oaXN0b3J5ID0gY3JlYXRlSGlzdG9yeShfdGhpcy5wcm9wcyksIF90ZW1wKSwgX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oX3RoaXMsIF9yZXQpO1xuICB9XG5cbiAgTWVtb3J5Um91dGVyLnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoUm91dGVyLCB7IGhpc3Rvcnk6IHRoaXMuaGlzdG9yeSwgY2hpbGRyZW46IHRoaXMucHJvcHMuY2hpbGRyZW4gfSk7XG4gIH07XG5cbiAgcmV0dXJuIE1lbW9yeVJvdXRlcjtcbn0oUmVhY3QuQ29tcG9uZW50KTtcblxuTWVtb3J5Um91dGVyLnByb3BUeXBlcyA9IHtcbiAgaW5pdGlhbEVudHJpZXM6IFByb3BUeXBlcy5hcnJheSxcbiAgaW5pdGlhbEluZGV4OiBQcm9wVHlwZXMubnVtYmVyLFxuICBnZXRVc2VyQ29uZmlybWF0aW9uOiBQcm9wVHlwZXMuZnVuYyxcbiAga2V5TGVuZ3RoOiBQcm9wVHlwZXMubnVtYmVyLFxuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGVcbn07XG5cblxuZXhwb3J0IGRlZmF1bHQgTWVtb3J5Um91dGVyO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3Qtcm91dGVyL2VzL01lbW9yeVJvdXRlci5qcyIsImZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKCFzZWxmKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gY2FsbCAmJiAodHlwZW9mIGNhbGwgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikgPyBjYWxsIDogc2VsZjsgfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcIiArIHR5cGVvZiBzdXBlckNsYXNzKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCBlbnVtZXJhYmxlOiBmYWxzZSwgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKSA6IHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7IH1cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5cbi8qKlxuICogVGhlIHB1YmxpYyBBUEkgZm9yIHByb21wdGluZyB0aGUgdXNlciBiZWZvcmUgbmF2aWdhdGluZyBhd2F5XG4gKiBmcm9tIGEgc2NyZWVuIHdpdGggYSBjb21wb25lbnQuXG4gKi9cblxudmFyIFByb21wdCA9IGZ1bmN0aW9uIChfUmVhY3QkQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhQcm9tcHQsIF9SZWFjdCRDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIFByb21wdCgpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgUHJvbXB0KTtcblxuICAgIHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCBfUmVhY3QkQ29tcG9uZW50LmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpO1xuICB9XG5cbiAgUHJvbXB0LnByb3RvdHlwZS5lbmFibGUgPSBmdW5jdGlvbiBlbmFibGUobWVzc2FnZSkge1xuICAgIGlmICh0aGlzLnVuYmxvY2spIHRoaXMudW5ibG9jaygpO1xuXG4gICAgdGhpcy51bmJsb2NrID0gdGhpcy5jb250ZXh0LnJvdXRlci5oaXN0b3J5LmJsb2NrKG1lc3NhZ2UpO1xuICB9O1xuXG4gIFByb21wdC5wcm90b3R5cGUuZGlzYWJsZSA9IGZ1bmN0aW9uIGRpc2FibGUoKSB7XG4gICAgaWYgKHRoaXMudW5ibG9jaykge1xuICAgICAgdGhpcy51bmJsb2NrKCk7XG4gICAgICB0aGlzLnVuYmxvY2sgPSBudWxsO1xuICAgIH1cbiAgfTtcblxuICBQcm9tcHQucHJvdG90eXBlLmNvbXBvbmVudFdpbGxNb3VudCA9IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxNb3VudCgpIHtcbiAgICBpZiAodGhpcy5wcm9wcy53aGVuKSB0aGlzLmVuYWJsZSh0aGlzLnByb3BzLm1lc3NhZ2UpO1xuICB9O1xuXG4gIFByb21wdC5wcm90b3R5cGUuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyA9IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMobmV4dFByb3BzKSB7XG4gICAgaWYgKG5leHRQcm9wcy53aGVuKSB7XG4gICAgICBpZiAoIXRoaXMucHJvcHMud2hlbiB8fCB0aGlzLnByb3BzLm1lc3NhZ2UgIT09IG5leHRQcm9wcy5tZXNzYWdlKSB0aGlzLmVuYWJsZShuZXh0UHJvcHMubWVzc2FnZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGlzYWJsZSgpO1xuICAgIH1cbiAgfTtcblxuICBQcm9tcHQucHJvdG90eXBlLmNvbXBvbmVudFdpbGxVbm1vdW50ID0gZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgdGhpcy5kaXNhYmxlKCk7XG4gIH07XG5cbiAgUHJvbXB0LnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH07XG5cbiAgcmV0dXJuIFByb21wdDtcbn0oUmVhY3QuQ29tcG9uZW50KTtcblxuUHJvbXB0LnByb3BUeXBlcyA9IHtcbiAgd2hlbjogUHJvcFR5cGVzLmJvb2wsXG4gIG1lc3NhZ2U6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMuc3RyaW5nXSkuaXNSZXF1aXJlZFxufTtcblByb21wdC5kZWZhdWx0UHJvcHMgPSB7XG4gIHdoZW46IHRydWVcbn07XG5Qcm9tcHQuY29udGV4dFR5cGVzID0ge1xuICByb3V0ZXI6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgaGlzdG9yeTogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgIGJsb2NrOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkXG4gICAgfSkuaXNSZXF1aXJlZFxuICB9KS5pc1JlcXVpcmVkXG59O1xuXG5cbmV4cG9ydCBkZWZhdWx0IFByb21wdDtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3JlYWN0LXJvdXRlci9lcy9Qcm9tcHQuanMiLCJmdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmICghc2VsZikgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIGNhbGwgJiYgKHR5cGVvZiBjYWxsID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpID8gY2FsbCA6IHNlbGY7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXCIgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcykgOiBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOyB9XG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuXG4vKipcbiAqIFRoZSBwdWJsaWMgQVBJIGZvciB1cGRhdGluZyB0aGUgbG9jYXRpb24gcHJvZ3JhbWF0aWNhbGx5XG4gKiB3aXRoIGEgY29tcG9uZW50LlxuICovXG5cbnZhciBSZWRpcmVjdCA9IGZ1bmN0aW9uIChfUmVhY3QkQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhSZWRpcmVjdCwgX1JlYWN0JENvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gUmVkaXJlY3QoKSB7XG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFJlZGlyZWN0KTtcblxuICAgIHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCBfUmVhY3QkQ29tcG9uZW50LmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpO1xuICB9XG5cbiAgUmVkaXJlY3QucHJvdG90eXBlLmlzU3RhdGljID0gZnVuY3Rpb24gaXNTdGF0aWMoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29udGV4dC5yb3V0ZXIgJiYgdGhpcy5jb250ZXh0LnJvdXRlci5zdGF0aWNDb250ZXh0O1xuICB9O1xuXG4gIFJlZGlyZWN0LnByb3RvdHlwZS5jb21wb25lbnRXaWxsTW91bnQgPSBmdW5jdGlvbiBjb21wb25lbnRXaWxsTW91bnQoKSB7XG4gICAgaWYgKHRoaXMuaXNTdGF0aWMoKSkgdGhpcy5wZXJmb3JtKCk7XG4gIH07XG5cbiAgUmVkaXJlY3QucHJvdG90eXBlLmNvbXBvbmVudERpZE1vdW50ID0gZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgaWYgKCF0aGlzLmlzU3RhdGljKCkpIHRoaXMucGVyZm9ybSgpO1xuICB9O1xuXG4gIFJlZGlyZWN0LnByb3RvdHlwZS5wZXJmb3JtID0gZnVuY3Rpb24gcGVyZm9ybSgpIHtcbiAgICB2YXIgaGlzdG9yeSA9IHRoaXMuY29udGV4dC5yb3V0ZXIuaGlzdG9yeTtcbiAgICB2YXIgX3Byb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgcHVzaCA9IF9wcm9wcy5wdXNoLFxuICAgICAgICB0byA9IF9wcm9wcy50bztcblxuXG4gICAgaWYgKHB1c2gpIHtcbiAgICAgIGhpc3RvcnkucHVzaCh0byk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGhpc3RvcnkucmVwbGFjZSh0byk7XG4gICAgfVxuICB9O1xuXG4gIFJlZGlyZWN0LnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH07XG5cbiAgcmV0dXJuIFJlZGlyZWN0O1xufShSZWFjdC5Db21wb25lbnQpO1xuXG5SZWRpcmVjdC5wcm9wVHlwZXMgPSB7XG4gIHB1c2g6IFByb3BUeXBlcy5ib29sLFxuICBmcm9tOiBQcm9wVHlwZXMuc3RyaW5nLFxuICB0bzogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm9iamVjdF0pXG59O1xuUmVkaXJlY3QuZGVmYXVsdFByb3BzID0ge1xuICBwdXNoOiBmYWxzZVxufTtcblJlZGlyZWN0LmNvbnRleHRUeXBlcyA9IHtcbiAgcm91dGVyOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGhpc3Rvcnk6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICBwdXNoOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgICAgcmVwbGFjZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZFxuICAgIH0pLmlzUmVxdWlyZWQsXG4gICAgc3RhdGljQ29udGV4dDogUHJvcFR5cGVzLm9iamVjdFxuICB9KS5pc1JlcXVpcmVkXG59O1xuXG5cbmV4cG9ydCBkZWZhdWx0IFJlZGlyZWN0O1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3Qtcm91dGVyL2VzL1JlZGlyZWN0LmpzIiwidmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKG9iaiwga2V5cykgeyB2YXIgdGFyZ2V0ID0ge307IGZvciAodmFyIGkgaW4gb2JqKSB7IGlmIChrZXlzLmluZGV4T2YoaSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgaSkpIGNvbnRpbnVlOyB0YXJnZXRbaV0gPSBvYmpbaV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmICghc2VsZikgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIGNhbGwgJiYgKHR5cGVvZiBjYWxsID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpID8gY2FsbCA6IHNlbGY7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXCIgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcykgOiBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOyB9XG5cbmltcG9ydCBpbnZhcmlhbnQgZnJvbSAnaW52YXJpYW50JztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgYWRkTGVhZGluZ1NsYXNoLCBjcmVhdGVQYXRoLCBwYXJzZVBhdGggfSBmcm9tICdoaXN0b3J5L1BhdGhVdGlscyc7XG5pbXBvcnQgUm91dGVyIGZyb20gJy4vUm91dGVyJztcblxudmFyIG5vcm1hbGl6ZUxvY2F0aW9uID0gZnVuY3Rpb24gbm9ybWFsaXplTG9jYXRpb24ob2JqZWN0KSB7XG4gIHZhciBfb2JqZWN0JHBhdGhuYW1lID0gb2JqZWN0LnBhdGhuYW1lLFxuICAgICAgcGF0aG5hbWUgPSBfb2JqZWN0JHBhdGhuYW1lID09PSB1bmRlZmluZWQgPyAnLycgOiBfb2JqZWN0JHBhdGhuYW1lLFxuICAgICAgX29iamVjdCRzZWFyY2ggPSBvYmplY3Quc2VhcmNoLFxuICAgICAgc2VhcmNoID0gX29iamVjdCRzZWFyY2ggPT09IHVuZGVmaW5lZCA/ICcnIDogX29iamVjdCRzZWFyY2gsXG4gICAgICBfb2JqZWN0JGhhc2ggPSBvYmplY3QuaGFzaCxcbiAgICAgIGhhc2ggPSBfb2JqZWN0JGhhc2ggPT09IHVuZGVmaW5lZCA/ICcnIDogX29iamVjdCRoYXNoO1xuXG5cbiAgcmV0dXJuIHtcbiAgICBwYXRobmFtZTogcGF0aG5hbWUsXG4gICAgc2VhcmNoOiBzZWFyY2ggPT09ICc/JyA/ICcnIDogc2VhcmNoLFxuICAgIGhhc2g6IGhhc2ggPT09ICcjJyA/ICcnIDogaGFzaFxuICB9O1xufTtcblxudmFyIGFkZEJhc2VuYW1lID0gZnVuY3Rpb24gYWRkQmFzZW5hbWUoYmFzZW5hbWUsIGxvY2F0aW9uKSB7XG4gIGlmICghYmFzZW5hbWUpIHJldHVybiBsb2NhdGlvbjtcblxuICByZXR1cm4gX2V4dGVuZHMoe30sIGxvY2F0aW9uLCB7XG4gICAgcGF0aG5hbWU6IGFkZExlYWRpbmdTbGFzaChiYXNlbmFtZSkgKyBsb2NhdGlvbi5wYXRobmFtZVxuICB9KTtcbn07XG5cbnZhciBzdHJpcEJhc2VuYW1lID0gZnVuY3Rpb24gc3RyaXBCYXNlbmFtZShiYXNlbmFtZSwgbG9jYXRpb24pIHtcbiAgaWYgKCFiYXNlbmFtZSkgcmV0dXJuIGxvY2F0aW9uO1xuXG4gIHZhciBiYXNlID0gYWRkTGVhZGluZ1NsYXNoKGJhc2VuYW1lKTtcblxuICBpZiAobG9jYXRpb24ucGF0aG5hbWUuaW5kZXhPZihiYXNlKSAhPT0gMCkgcmV0dXJuIGxvY2F0aW9uO1xuXG4gIHJldHVybiBfZXh0ZW5kcyh7fSwgbG9jYXRpb24sIHtcbiAgICBwYXRobmFtZTogbG9jYXRpb24ucGF0aG5hbWUuc3Vic3RyKGJhc2UubGVuZ3RoKVxuICB9KTtcbn07XG5cbnZhciBjcmVhdGVMb2NhdGlvbiA9IGZ1bmN0aW9uIGNyZWF0ZUxvY2F0aW9uKGxvY2F0aW9uKSB7XG4gIHJldHVybiB0eXBlb2YgbG9jYXRpb24gPT09ICdzdHJpbmcnID8gcGFyc2VQYXRoKGxvY2F0aW9uKSA6IG5vcm1hbGl6ZUxvY2F0aW9uKGxvY2F0aW9uKTtcbn07XG5cbnZhciBjcmVhdGVVUkwgPSBmdW5jdGlvbiBjcmVhdGVVUkwobG9jYXRpb24pIHtcbiAgcmV0dXJuIHR5cGVvZiBsb2NhdGlvbiA9PT0gJ3N0cmluZycgPyBsb2NhdGlvbiA6IGNyZWF0ZVBhdGgobG9jYXRpb24pO1xufTtcblxudmFyIHN0YXRpY0hhbmRsZXIgPSBmdW5jdGlvbiBzdGF0aWNIYW5kbGVyKG1ldGhvZE5hbWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICBpbnZhcmlhbnQoZmFsc2UsICdZb3UgY2Fubm90ICVzIHdpdGggPFN0YXRpY1JvdXRlcj4nLCBtZXRob2ROYW1lKTtcbiAgfTtcbn07XG5cbnZhciBub29wID0gZnVuY3Rpb24gbm9vcCgpIHt9O1xuXG4vKipcbiAqIFRoZSBwdWJsaWMgdG9wLWxldmVsIEFQSSBmb3IgYSBcInN0YXRpY1wiIDxSb3V0ZXI+LCBzby1jYWxsZWQgYmVjYXVzZSBpdFxuICogY2FuJ3QgYWN0dWFsbHkgY2hhbmdlIHRoZSBjdXJyZW50IGxvY2F0aW9uLiBJbnN0ZWFkLCBpdCBqdXN0IHJlY29yZHNcbiAqIGxvY2F0aW9uIGNoYW5nZXMgaW4gYSBjb250ZXh0IG9iamVjdC4gVXNlZnVsIG1haW5seSBpbiB0ZXN0aW5nIGFuZFxuICogc2VydmVyLXJlbmRlcmluZyBzY2VuYXJpb3MuXG4gKi9cblxudmFyIFN0YXRpY1JvdXRlciA9IGZ1bmN0aW9uIChfUmVhY3QkQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhTdGF0aWNSb3V0ZXIsIF9SZWFjdCRDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIFN0YXRpY1JvdXRlcigpIHtcbiAgICB2YXIgX3RlbXAsIF90aGlzLCBfcmV0O1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFN0YXRpY1JvdXRlcik7XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICByZXR1cm4gX3JldCA9IChfdGVtcCA9IChfdGhpcyA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIF9SZWFjdCRDb21wb25lbnQuY2FsbC5hcHBseShfUmVhY3QkQ29tcG9uZW50LCBbdGhpc10uY29uY2F0KGFyZ3MpKSksIF90aGlzKSwgX3RoaXMuY3JlYXRlSHJlZiA9IGZ1bmN0aW9uIChwYXRoKSB7XG4gICAgICByZXR1cm4gYWRkTGVhZGluZ1NsYXNoKF90aGlzLnByb3BzLmJhc2VuYW1lICsgY3JlYXRlVVJMKHBhdGgpKTtcbiAgICB9LCBfdGhpcy5oYW5kbGVQdXNoID0gZnVuY3Rpb24gKGxvY2F0aW9uKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgICBiYXNlbmFtZSA9IF90aGlzJHByb3BzLmJhc2VuYW1lLFxuICAgICAgICAgIGNvbnRleHQgPSBfdGhpcyRwcm9wcy5jb250ZXh0O1xuXG4gICAgICBjb250ZXh0LmFjdGlvbiA9ICdQVVNIJztcbiAgICAgIGNvbnRleHQubG9jYXRpb24gPSBhZGRCYXNlbmFtZShiYXNlbmFtZSwgY3JlYXRlTG9jYXRpb24obG9jYXRpb24pKTtcbiAgICAgIGNvbnRleHQudXJsID0gY3JlYXRlVVJMKGNvbnRleHQubG9jYXRpb24pO1xuICAgIH0sIF90aGlzLmhhbmRsZVJlcGxhY2UgPSBmdW5jdGlvbiAobG9jYXRpb24pIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczIgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgICBiYXNlbmFtZSA9IF90aGlzJHByb3BzMi5iYXNlbmFtZSxcbiAgICAgICAgICBjb250ZXh0ID0gX3RoaXMkcHJvcHMyLmNvbnRleHQ7XG5cbiAgICAgIGNvbnRleHQuYWN0aW9uID0gJ1JFUExBQ0UnO1xuICAgICAgY29udGV4dC5sb2NhdGlvbiA9IGFkZEJhc2VuYW1lKGJhc2VuYW1lLCBjcmVhdGVMb2NhdGlvbihsb2NhdGlvbikpO1xuICAgICAgY29udGV4dC51cmwgPSBjcmVhdGVVUkwoY29udGV4dC5sb2NhdGlvbik7XG4gICAgfSwgX3RoaXMuaGFuZGxlTGlzdGVuID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIG5vb3A7XG4gICAgfSwgX3RoaXMuaGFuZGxlQmxvY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gbm9vcDtcbiAgICB9LCBfdGVtcCksIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKF90aGlzLCBfcmV0KTtcbiAgfVxuXG4gIFN0YXRpY1JvdXRlci5wcm90b3R5cGUuZ2V0Q2hpbGRDb250ZXh0ID0gZnVuY3Rpb24gZ2V0Q2hpbGRDb250ZXh0KCkge1xuICAgIHJldHVybiB7XG4gICAgICByb3V0ZXI6IHtcbiAgICAgICAgc3RhdGljQ29udGV4dDogdGhpcy5wcm9wcy5jb250ZXh0XG4gICAgICB9XG4gICAgfTtcbiAgfTtcblxuICBTdGF0aWNSb3V0ZXIucHJvdG90eXBlLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICB2YXIgX3Byb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgYmFzZW5hbWUgPSBfcHJvcHMuYmFzZW5hbWUsXG4gICAgICAgIGNvbnRleHQgPSBfcHJvcHMuY29udGV4dCxcbiAgICAgICAgbG9jYXRpb24gPSBfcHJvcHMubG9jYXRpb24sXG4gICAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9wcm9wcywgWydiYXNlbmFtZScsICdjb250ZXh0JywgJ2xvY2F0aW9uJ10pO1xuXG4gICAgdmFyIGhpc3RvcnkgPSB7XG4gICAgICBjcmVhdGVIcmVmOiB0aGlzLmNyZWF0ZUhyZWYsXG4gICAgICBhY3Rpb246ICdQT1AnLFxuICAgICAgbG9jYXRpb246IHN0cmlwQmFzZW5hbWUoYmFzZW5hbWUsIGNyZWF0ZUxvY2F0aW9uKGxvY2F0aW9uKSksXG4gICAgICBwdXNoOiB0aGlzLmhhbmRsZVB1c2gsXG4gICAgICByZXBsYWNlOiB0aGlzLmhhbmRsZVJlcGxhY2UsXG4gICAgICBnbzogc3RhdGljSGFuZGxlcignZ28nKSxcbiAgICAgIGdvQmFjazogc3RhdGljSGFuZGxlcignZ29CYWNrJyksXG4gICAgICBnb0ZvcndhcmQ6IHN0YXRpY0hhbmRsZXIoJ2dvRm9yd2FyZCcpLFxuICAgICAgbGlzdGVuOiB0aGlzLmhhbmRsZUxpc3RlbixcbiAgICAgIGJsb2NrOiB0aGlzLmhhbmRsZUJsb2NrXG4gICAgfTtcblxuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFJvdXRlciwgX2V4dGVuZHMoe30sIHByb3BzLCB7IGhpc3Rvcnk6IGhpc3RvcnkgfSkpO1xuICB9O1xuXG4gIHJldHVybiBTdGF0aWNSb3V0ZXI7XG59KFJlYWN0LkNvbXBvbmVudCk7XG5cblN0YXRpY1JvdXRlci5wcm9wVHlwZXMgPSB7XG4gIGJhc2VuYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjb250ZXh0OiBQcm9wVHlwZXMub2JqZWN0LmlzUmVxdWlyZWQsXG4gIGxvY2F0aW9uOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMub2JqZWN0XSlcbn07XG5TdGF0aWNSb3V0ZXIuZGVmYXVsdFByb3BzID0ge1xuICBiYXNlbmFtZTogJycsXG4gIGxvY2F0aW9uOiAnLydcbn07XG5TdGF0aWNSb3V0ZXIuY2hpbGRDb250ZXh0VHlwZXMgPSB7XG4gIHJvdXRlcjogUHJvcFR5cGVzLm9iamVjdC5pc1JlcXVpcmVkXG59O1xuXG5cbmV4cG9ydCBkZWZhdWx0IFN0YXRpY1JvdXRlcjtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3JlYWN0LXJvdXRlci9lcy9TdGF0aWNSb3V0ZXIuanMiLCJmdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmICghc2VsZikgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIGNhbGwgJiYgKHR5cGVvZiBjYWxsID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpID8gY2FsbCA6IHNlbGY7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXCIgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcykgOiBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOyB9XG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHdhcm5pbmcgZnJvbSAnd2FybmluZyc7XG5pbXBvcnQgbWF0Y2hQYXRoIGZyb20gJy4vbWF0Y2hQYXRoJztcblxuLyoqXG4gKiBUaGUgcHVibGljIEFQSSBmb3IgcmVuZGVyaW5nIHRoZSBmaXJzdCA8Um91dGU+IHRoYXQgbWF0Y2hlcy5cbiAqL1xuXG52YXIgU3dpdGNoID0gZnVuY3Rpb24gKF9SZWFjdCRDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzKFN3aXRjaCwgX1JlYWN0JENvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gU3dpdGNoKCkge1xuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBTd2l0Y2gpO1xuXG4gICAgcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIF9SZWFjdCRDb21wb25lbnQuYXBwbHkodGhpcywgYXJndW1lbnRzKSk7XG4gIH1cblxuICBTd2l0Y2gucHJvdG90eXBlLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgPSBmdW5jdGlvbiBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG5leHRQcm9wcykge1xuICAgIHdhcm5pbmcoIShuZXh0UHJvcHMubG9jYXRpb24gJiYgIXRoaXMucHJvcHMubG9jYXRpb24pLCAnPFN3aXRjaD4gZWxlbWVudHMgc2hvdWxkIG5vdCBjaGFuZ2UgZnJvbSB1bmNvbnRyb2xsZWQgdG8gY29udHJvbGxlZCAob3IgdmljZSB2ZXJzYSkuIFlvdSBpbml0aWFsbHkgdXNlZCBubyBcImxvY2F0aW9uXCIgcHJvcCBhbmQgdGhlbiBwcm92aWRlZCBvbmUgb24gYSBzdWJzZXF1ZW50IHJlbmRlci4nKTtcblxuICAgIHdhcm5pbmcoISghbmV4dFByb3BzLmxvY2F0aW9uICYmIHRoaXMucHJvcHMubG9jYXRpb24pLCAnPFN3aXRjaD4gZWxlbWVudHMgc2hvdWxkIG5vdCBjaGFuZ2UgZnJvbSBjb250cm9sbGVkIHRvIHVuY29udHJvbGxlZCAob3IgdmljZSB2ZXJzYSkuIFlvdSBwcm92aWRlZCBhIFwibG9jYXRpb25cIiBwcm9wIGluaXRpYWxseSBidXQgb21pdHRlZCBpdCBvbiBhIHN1YnNlcXVlbnQgcmVuZGVyLicpO1xuICB9O1xuXG4gIFN3aXRjaC5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgIHZhciByb3V0ZSA9IHRoaXMuY29udGV4dC5yb3V0ZXIucm91dGU7XG4gICAgdmFyIGNoaWxkcmVuID0gdGhpcy5wcm9wcy5jaGlsZHJlbjtcblxuICAgIHZhciBsb2NhdGlvbiA9IHRoaXMucHJvcHMubG9jYXRpb24gfHwgcm91dGUubG9jYXRpb247XG5cbiAgICB2YXIgbWF0Y2ggPSB2b2lkIDAsXG4gICAgICAgIGNoaWxkID0gdm9pZCAwO1xuICAgIFJlYWN0LkNoaWxkcmVuLmZvckVhY2goY2hpbGRyZW4sIGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgICBpZiAoIVJlYWN0LmlzVmFsaWRFbGVtZW50KGVsZW1lbnQpKSByZXR1cm47XG5cbiAgICAgIHZhciBfZWxlbWVudCRwcm9wcyA9IGVsZW1lbnQucHJvcHMsXG4gICAgICAgICAgcGF0aFByb3AgPSBfZWxlbWVudCRwcm9wcy5wYXRoLFxuICAgICAgICAgIGV4YWN0ID0gX2VsZW1lbnQkcHJvcHMuZXhhY3QsXG4gICAgICAgICAgc3RyaWN0ID0gX2VsZW1lbnQkcHJvcHMuc3RyaWN0LFxuICAgICAgICAgIGZyb20gPSBfZWxlbWVudCRwcm9wcy5mcm9tO1xuXG4gICAgICB2YXIgcGF0aCA9IHBhdGhQcm9wIHx8IGZyb207XG5cbiAgICAgIGlmIChtYXRjaCA9PSBudWxsKSB7XG4gICAgICAgIGNoaWxkID0gZWxlbWVudDtcbiAgICAgICAgbWF0Y2ggPSBwYXRoID8gbWF0Y2hQYXRoKGxvY2F0aW9uLnBhdGhuYW1lLCB7IHBhdGg6IHBhdGgsIGV4YWN0OiBleGFjdCwgc3RyaWN0OiBzdHJpY3QgfSkgOiByb3V0ZS5tYXRjaDtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBtYXRjaCA/IFJlYWN0LmNsb25lRWxlbWVudChjaGlsZCwgeyBsb2NhdGlvbjogbG9jYXRpb24sIGNvbXB1dGVkTWF0Y2g6IG1hdGNoIH0pIDogbnVsbDtcbiAgfTtcblxuICByZXR1cm4gU3dpdGNoO1xufShSZWFjdC5Db21wb25lbnQpO1xuXG5Td2l0Y2guY29udGV4dFR5cGVzID0ge1xuICByb3V0ZXI6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgcm91dGU6IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZFxuICB9KS5pc1JlcXVpcmVkXG59O1xuU3dpdGNoLnByb3BUeXBlcyA9IHtcbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICBsb2NhdGlvbjogUHJvcFR5cGVzLm9iamVjdFxufTtcblxuXG5leHBvcnQgZGVmYXVsdCBTd2l0Y2g7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1yb3V0ZXIvZXMvU3dpdGNoLmpzIiwidmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKG9iaiwga2V5cykgeyB2YXIgdGFyZ2V0ID0ge307IGZvciAodmFyIGkgaW4gb2JqKSB7IGlmIChrZXlzLmluZGV4T2YoaSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgaSkpIGNvbnRpbnVlOyB0YXJnZXRbaV0gPSBvYmpbaV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBob2lzdFN0YXRpY3MgZnJvbSAnaG9pc3Qtbm9uLXJlYWN0LXN0YXRpY3MnO1xuaW1wb3J0IFJvdXRlIGZyb20gJy4vUm91dGUnO1xuXG4vKipcbiAqIEEgcHVibGljIGhpZ2hlci1vcmRlciBjb21wb25lbnQgdG8gYWNjZXNzIHRoZSBpbXBlcmF0aXZlIEFQSVxuICovXG52YXIgd2l0aFJvdXRlciA9IGZ1bmN0aW9uIHdpdGhSb3V0ZXIoQ29tcG9uZW50KSB7XG4gIHZhciBDID0gZnVuY3Rpb24gQyhwcm9wcykge1xuICAgIHZhciB3cmFwcGVkQ29tcG9uZW50UmVmID0gcHJvcHMud3JhcHBlZENvbXBvbmVudFJlZixcbiAgICAgICAgcmVtYWluaW5nUHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMocHJvcHMsIFsnd3JhcHBlZENvbXBvbmVudFJlZiddKTtcblxuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFJvdXRlLCB7IHJlbmRlcjogZnVuY3Rpb24gcmVuZGVyKHJvdXRlQ29tcG9uZW50UHJvcHMpIHtcbiAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ29tcG9uZW50LCBfZXh0ZW5kcyh7fSwgcmVtYWluaW5nUHJvcHMsIHJvdXRlQ29tcG9uZW50UHJvcHMsIHsgcmVmOiB3cmFwcGVkQ29tcG9uZW50UmVmIH0pKTtcbiAgICAgIH0gfSk7XG4gIH07XG5cbiAgQy5kaXNwbGF5TmFtZSA9ICd3aXRoUm91dGVyKCcgKyAoQ29tcG9uZW50LmRpc3BsYXlOYW1lIHx8IENvbXBvbmVudC5uYW1lKSArICcpJztcbiAgQy5XcmFwcGVkQ29tcG9uZW50ID0gQ29tcG9uZW50O1xuICBDLnByb3BUeXBlcyA9IHtcbiAgICB3cmFwcGVkQ29tcG9uZW50UmVmOiBQcm9wVHlwZXMuZnVuY1xuICB9O1xuXG4gIHJldHVybiBob2lzdFN0YXRpY3MoQywgQ29tcG9uZW50KTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhSb3V0ZXI7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC1yb3V0ZXIvZXMvd2l0aFJvdXRlci5qcyIsIm1vZHVsZS5leHBvcnRzID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAoYXJyKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYXJyKSA9PSAnW29iamVjdCBBcnJheV0nO1xufTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3Qtcm91dGVyL34vaXNhcnJheS9pbmRleC5qcyIsInZhciBpc2FycmF5ID0gcmVxdWlyZSgnaXNhcnJheScpXG5cbi8qKlxuICogRXhwb3NlIGBwYXRoVG9SZWdleHBgLlxuICovXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGhUb1JlZ2V4cFxubW9kdWxlLmV4cG9ydHMucGFyc2UgPSBwYXJzZVxubW9kdWxlLmV4cG9ydHMuY29tcGlsZSA9IGNvbXBpbGVcbm1vZHVsZS5leHBvcnRzLnRva2Vuc1RvRnVuY3Rpb24gPSB0b2tlbnNUb0Z1bmN0aW9uXG5tb2R1bGUuZXhwb3J0cy50b2tlbnNUb1JlZ0V4cCA9IHRva2Vuc1RvUmVnRXhwXG5cbi8qKlxuICogVGhlIG1haW4gcGF0aCBtYXRjaGluZyByZWdleHAgdXRpbGl0eS5cbiAqXG4gKiBAdHlwZSB7UmVnRXhwfVxuICovXG52YXIgUEFUSF9SRUdFWFAgPSBuZXcgUmVnRXhwKFtcbiAgLy8gTWF0Y2ggZXNjYXBlZCBjaGFyYWN0ZXJzIHRoYXQgd291bGQgb3RoZXJ3aXNlIGFwcGVhciBpbiBmdXR1cmUgbWF0Y2hlcy5cbiAgLy8gVGhpcyBhbGxvd3MgdGhlIHVzZXIgdG8gZXNjYXBlIHNwZWNpYWwgY2hhcmFjdGVycyB0aGF0IHdvbid0IHRyYW5zZm9ybS5cbiAgJyhcXFxcXFxcXC4pJyxcbiAgLy8gTWF0Y2ggRXhwcmVzcy1zdHlsZSBwYXJhbWV0ZXJzIGFuZCB1bi1uYW1lZCBwYXJhbWV0ZXJzIHdpdGggYSBwcmVmaXhcbiAgLy8gYW5kIG9wdGlvbmFsIHN1ZmZpeGVzLiBNYXRjaGVzIGFwcGVhciBhczpcbiAgLy9cbiAgLy8gXCIvOnRlc3QoXFxcXGQrKT9cIiA9PiBbXCIvXCIsIFwidGVzdFwiLCBcIlxcZCtcIiwgdW5kZWZpbmVkLCBcIj9cIiwgdW5kZWZpbmVkXVxuICAvLyBcIi9yb3V0ZShcXFxcZCspXCIgID0+IFt1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBcIlxcZCtcIiwgdW5kZWZpbmVkLCB1bmRlZmluZWRdXG4gIC8vIFwiLypcIiAgICAgICAgICAgID0+IFtcIi9cIiwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBcIipcIl1cbiAgJyhbXFxcXC8uXSk/KD86KD86XFxcXDooXFxcXHcrKSg/OlxcXFwoKCg/OlxcXFxcXFxcLnxbXlxcXFxcXFxcKCldKSspXFxcXCkpP3xcXFxcKCgoPzpcXFxcXFxcXC58W15cXFxcXFxcXCgpXSkrKVxcXFwpKShbKyo/XSk/fChcXFxcKikpJ1xuXS5qb2luKCd8JyksICdnJylcblxuLyoqXG4gKiBQYXJzZSBhIHN0cmluZyBmb3IgdGhlIHJhdyB0b2tlbnMuXG4gKlxuICogQHBhcmFtICB7c3RyaW5nfSAgc3RyXG4gKiBAcGFyYW0gIHtPYmplY3Q9fSBvcHRpb25zXG4gKiBAcmV0dXJuIHshQXJyYXl9XG4gKi9cbmZ1bmN0aW9uIHBhcnNlIChzdHIsIG9wdGlvbnMpIHtcbiAgdmFyIHRva2VucyA9IFtdXG4gIHZhciBrZXkgPSAwXG4gIHZhciBpbmRleCA9IDBcbiAgdmFyIHBhdGggPSAnJ1xuICB2YXIgZGVmYXVsdERlbGltaXRlciA9IG9wdGlvbnMgJiYgb3B0aW9ucy5kZWxpbWl0ZXIgfHwgJy8nXG4gIHZhciByZXNcblxuICB3aGlsZSAoKHJlcyA9IFBBVEhfUkVHRVhQLmV4ZWMoc3RyKSkgIT0gbnVsbCkge1xuICAgIHZhciBtID0gcmVzWzBdXG4gICAgdmFyIGVzY2FwZWQgPSByZXNbMV1cbiAgICB2YXIgb2Zmc2V0ID0gcmVzLmluZGV4XG4gICAgcGF0aCArPSBzdHIuc2xpY2UoaW5kZXgsIG9mZnNldClcbiAgICBpbmRleCA9IG9mZnNldCArIG0ubGVuZ3RoXG5cbiAgICAvLyBJZ25vcmUgYWxyZWFkeSBlc2NhcGVkIHNlcXVlbmNlcy5cbiAgICBpZiAoZXNjYXBlZCkge1xuICAgICAgcGF0aCArPSBlc2NhcGVkWzFdXG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIHZhciBuZXh0ID0gc3RyW2luZGV4XVxuICAgIHZhciBwcmVmaXggPSByZXNbMl1cbiAgICB2YXIgbmFtZSA9IHJlc1szXVxuICAgIHZhciBjYXB0dXJlID0gcmVzWzRdXG4gICAgdmFyIGdyb3VwID0gcmVzWzVdXG4gICAgdmFyIG1vZGlmaWVyID0gcmVzWzZdXG4gICAgdmFyIGFzdGVyaXNrID0gcmVzWzddXG5cbiAgICAvLyBQdXNoIHRoZSBjdXJyZW50IHBhdGggb250byB0aGUgdG9rZW5zLlxuICAgIGlmIChwYXRoKSB7XG4gICAgICB0b2tlbnMucHVzaChwYXRoKVxuICAgICAgcGF0aCA9ICcnXG4gICAgfVxuXG4gICAgdmFyIHBhcnRpYWwgPSBwcmVmaXggIT0gbnVsbCAmJiBuZXh0ICE9IG51bGwgJiYgbmV4dCAhPT0gcHJlZml4XG4gICAgdmFyIHJlcGVhdCA9IG1vZGlmaWVyID09PSAnKycgfHwgbW9kaWZpZXIgPT09ICcqJ1xuICAgIHZhciBvcHRpb25hbCA9IG1vZGlmaWVyID09PSAnPycgfHwgbW9kaWZpZXIgPT09ICcqJ1xuICAgIHZhciBkZWxpbWl0ZXIgPSByZXNbMl0gfHwgZGVmYXVsdERlbGltaXRlclxuICAgIHZhciBwYXR0ZXJuID0gY2FwdHVyZSB8fCBncm91cFxuXG4gICAgdG9rZW5zLnB1c2goe1xuICAgICAgbmFtZTogbmFtZSB8fCBrZXkrKyxcbiAgICAgIHByZWZpeDogcHJlZml4IHx8ICcnLFxuICAgICAgZGVsaW1pdGVyOiBkZWxpbWl0ZXIsXG4gICAgICBvcHRpb25hbDogb3B0aW9uYWwsXG4gICAgICByZXBlYXQ6IHJlcGVhdCxcbiAgICAgIHBhcnRpYWw6IHBhcnRpYWwsXG4gICAgICBhc3RlcmlzazogISFhc3RlcmlzayxcbiAgICAgIHBhdHRlcm46IHBhdHRlcm4gPyBlc2NhcGVHcm91cChwYXR0ZXJuKSA6IChhc3RlcmlzayA/ICcuKicgOiAnW14nICsgZXNjYXBlU3RyaW5nKGRlbGltaXRlcikgKyAnXSs/JylcbiAgICB9KVxuICB9XG5cbiAgLy8gTWF0Y2ggYW55IGNoYXJhY3RlcnMgc3RpbGwgcmVtYWluaW5nLlxuICBpZiAoaW5kZXggPCBzdHIubGVuZ3RoKSB7XG4gICAgcGF0aCArPSBzdHIuc3Vic3RyKGluZGV4KVxuICB9XG5cbiAgLy8gSWYgdGhlIHBhdGggZXhpc3RzLCBwdXNoIGl0IG9udG8gdGhlIGVuZC5cbiAgaWYgKHBhdGgpIHtcbiAgICB0b2tlbnMucHVzaChwYXRoKVxuICB9XG5cbiAgcmV0dXJuIHRva2Vuc1xufVxuXG4vKipcbiAqIENvbXBpbGUgYSBzdHJpbmcgdG8gYSB0ZW1wbGF0ZSBmdW5jdGlvbiBmb3IgdGhlIHBhdGguXG4gKlxuICogQHBhcmFtICB7c3RyaW5nfSAgICAgICAgICAgICBzdHJcbiAqIEBwYXJhbSAge09iamVjdD19ICAgICAgICAgICAgb3B0aW9uc1xuICogQHJldHVybiB7IWZ1bmN0aW9uKE9iamVjdD0sIE9iamVjdD0pfVxuICovXG5mdW5jdGlvbiBjb21waWxlIChzdHIsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIHRva2Vuc1RvRnVuY3Rpb24ocGFyc2Uoc3RyLCBvcHRpb25zKSlcbn1cblxuLyoqXG4gKiBQcmV0dGllciBlbmNvZGluZyBvZiBVUkkgcGF0aCBzZWdtZW50cy5cbiAqXG4gKiBAcGFyYW0gIHtzdHJpbmd9XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGVuY29kZVVSSUNvbXBvbmVudFByZXR0eSAoc3RyKSB7XG4gIHJldHVybiBlbmNvZGVVUkkoc3RyKS5yZXBsYWNlKC9bXFwvPyNdL2csIGZ1bmN0aW9uIChjKSB7XG4gICAgcmV0dXJuICclJyArIGMuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKVxuICB9KVxufVxuXG4vKipcbiAqIEVuY29kZSB0aGUgYXN0ZXJpc2sgcGFyYW1ldGVyLiBTaW1pbGFyIHRvIGBwcmV0dHlgLCBidXQgYWxsb3dzIHNsYXNoZXMuXG4gKlxuICogQHBhcmFtICB7c3RyaW5nfVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBlbmNvZGVBc3RlcmlzayAoc3RyKSB7XG4gIHJldHVybiBlbmNvZGVVUkkoc3RyKS5yZXBsYWNlKC9bPyNdL2csIGZ1bmN0aW9uIChjKSB7XG4gICAgcmV0dXJuICclJyArIGMuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKVxuICB9KVxufVxuXG4vKipcbiAqIEV4cG9zZSBhIG1ldGhvZCBmb3IgdHJhbnNmb3JtaW5nIHRva2VucyBpbnRvIHRoZSBwYXRoIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiB0b2tlbnNUb0Z1bmN0aW9uICh0b2tlbnMpIHtcbiAgLy8gQ29tcGlsZSBhbGwgdGhlIHRva2VucyBpbnRvIHJlZ2V4cHMuXG4gIHZhciBtYXRjaGVzID0gbmV3IEFycmF5KHRva2Vucy5sZW5ndGgpXG5cbiAgLy8gQ29tcGlsZSBhbGwgdGhlIHBhdHRlcm5zIGJlZm9yZSBjb21waWxhdGlvbi5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAodHlwZW9mIHRva2Vuc1tpXSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIG1hdGNoZXNbaV0gPSBuZXcgUmVnRXhwKCdeKD86JyArIHRva2Vuc1tpXS5wYXR0ZXJuICsgJykkJylcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gKG9iaiwgb3B0cykge1xuICAgIHZhciBwYXRoID0gJydcbiAgICB2YXIgZGF0YSA9IG9iaiB8fCB7fVxuICAgIHZhciBvcHRpb25zID0gb3B0cyB8fCB7fVxuICAgIHZhciBlbmNvZGUgPSBvcHRpb25zLnByZXR0eSA/IGVuY29kZVVSSUNvbXBvbmVudFByZXR0eSA6IGVuY29kZVVSSUNvbXBvbmVudFxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciB0b2tlbiA9IHRva2Vuc1tpXVxuXG4gICAgICBpZiAodHlwZW9mIHRva2VuID09PSAnc3RyaW5nJykge1xuICAgICAgICBwYXRoICs9IHRva2VuXG5cbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgdmFyIHZhbHVlID0gZGF0YVt0b2tlbi5uYW1lXVxuICAgICAgdmFyIHNlZ21lbnRcblxuICAgICAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICAgICAgaWYgKHRva2VuLm9wdGlvbmFsKSB7XG4gICAgICAgICAgLy8gUHJlcGVuZCBwYXJ0aWFsIHNlZ21lbnQgcHJlZml4ZXMuXG4gICAgICAgICAgaWYgKHRva2VuLnBhcnRpYWwpIHtcbiAgICAgICAgICAgIHBhdGggKz0gdG9rZW4ucHJlZml4XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBcIicgKyB0b2tlbi5uYW1lICsgJ1wiIHRvIGJlIGRlZmluZWQnKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChpc2FycmF5KHZhbHVlKSkge1xuICAgICAgICBpZiAoIXRva2VuLnJlcGVhdCkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIFwiJyArIHRva2VuLm5hbWUgKyAnXCIgdG8gbm90IHJlcGVhdCwgYnV0IHJlY2VpdmVkIGAnICsgSlNPTi5zdHJpbmdpZnkodmFsdWUpICsgJ2AnKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIGlmICh0b2tlbi5vcHRpb25hbCkge1xuICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgXCInICsgdG9rZW4ubmFtZSArICdcIiB0byBub3QgYmUgZW1wdHknKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdmFsdWUubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICBzZWdtZW50ID0gZW5jb2RlKHZhbHVlW2pdKVxuXG4gICAgICAgICAgaWYgKCFtYXRjaGVzW2ldLnRlc3Qoc2VnbWVudCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIGFsbCBcIicgKyB0b2tlbi5uYW1lICsgJ1wiIHRvIG1hdGNoIFwiJyArIHRva2VuLnBhdHRlcm4gKyAnXCIsIGJ1dCByZWNlaXZlZCBgJyArIEpTT04uc3RyaW5naWZ5KHNlZ21lbnQpICsgJ2AnKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHBhdGggKz0gKGogPT09IDAgPyB0b2tlbi5wcmVmaXggOiB0b2tlbi5kZWxpbWl0ZXIpICsgc2VnbWVudFxuICAgICAgICB9XG5cbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgc2VnbWVudCA9IHRva2VuLmFzdGVyaXNrID8gZW5jb2RlQXN0ZXJpc2sodmFsdWUpIDogZW5jb2RlKHZhbHVlKVxuXG4gICAgICBpZiAoIW1hdGNoZXNbaV0udGVzdChzZWdtZW50KSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBcIicgKyB0b2tlbi5uYW1lICsgJ1wiIHRvIG1hdGNoIFwiJyArIHRva2VuLnBhdHRlcm4gKyAnXCIsIGJ1dCByZWNlaXZlZCBcIicgKyBzZWdtZW50ICsgJ1wiJylcbiAgICAgIH1cblxuICAgICAgcGF0aCArPSB0b2tlbi5wcmVmaXggKyBzZWdtZW50XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhdGhcbiAgfVxufVxuXG4vKipcbiAqIEVzY2FwZSBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBzdHJpbmcuXG4gKlxuICogQHBhcmFtICB7c3RyaW5nfSBzdHJcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZXNjYXBlU3RyaW5nIChzdHIpIHtcbiAgcmV0dXJuIHN0ci5yZXBsYWNlKC8oWy4rKj89XiE6JHt9KClbXFxdfFxcL1xcXFxdKS9nLCAnXFxcXCQxJylcbn1cblxuLyoqXG4gKiBFc2NhcGUgdGhlIGNhcHR1cmluZyBncm91cCBieSBlc2NhcGluZyBzcGVjaWFsIGNoYXJhY3RlcnMgYW5kIG1lYW5pbmcuXG4gKlxuICogQHBhcmFtICB7c3RyaW5nfSBncm91cFxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBlc2NhcGVHcm91cCAoZ3JvdXApIHtcbiAgcmV0dXJuIGdyb3VwLnJlcGxhY2UoLyhbPSE6JFxcLygpXSkvZywgJ1xcXFwkMScpXG59XG5cbi8qKlxuICogQXR0YWNoIHRoZSBrZXlzIGFzIGEgcHJvcGVydHkgb2YgdGhlIHJlZ2V4cC5cbiAqXG4gKiBAcGFyYW0gIHshUmVnRXhwfSByZVxuICogQHBhcmFtICB7QXJyYXl9ICAga2V5c1xuICogQHJldHVybiB7IVJlZ0V4cH1cbiAqL1xuZnVuY3Rpb24gYXR0YWNoS2V5cyAocmUsIGtleXMpIHtcbiAgcmUua2V5cyA9IGtleXNcbiAgcmV0dXJuIHJlXG59XG5cbi8qKlxuICogR2V0IHRoZSBmbGFncyBmb3IgYSByZWdleHAgZnJvbSB0aGUgb3B0aW9ucy5cbiAqXG4gKiBAcGFyYW0gIHtPYmplY3R9IG9wdGlvbnNcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gZmxhZ3MgKG9wdGlvbnMpIHtcbiAgcmV0dXJuIG9wdGlvbnMuc2Vuc2l0aXZlID8gJycgOiAnaSdcbn1cblxuLyoqXG4gKiBQdWxsIG91dCBrZXlzIGZyb20gYSByZWdleHAuXG4gKlxuICogQHBhcmFtICB7IVJlZ0V4cH0gcGF0aFxuICogQHBhcmFtICB7IUFycmF5fSAga2V5c1xuICogQHJldHVybiB7IVJlZ0V4cH1cbiAqL1xuZnVuY3Rpb24gcmVnZXhwVG9SZWdleHAgKHBhdGgsIGtleXMpIHtcbiAgLy8gVXNlIGEgbmVnYXRpdmUgbG9va2FoZWFkIHRvIG1hdGNoIG9ubHkgY2FwdHVyaW5nIGdyb3Vwcy5cbiAgdmFyIGdyb3VwcyA9IHBhdGguc291cmNlLm1hdGNoKC9cXCgoPyFcXD8pL2cpXG5cbiAgaWYgKGdyb3Vwcykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ3JvdXBzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBrZXlzLnB1c2goe1xuICAgICAgICBuYW1lOiBpLFxuICAgICAgICBwcmVmaXg6IG51bGwsXG4gICAgICAgIGRlbGltaXRlcjogbnVsbCxcbiAgICAgICAgb3B0aW9uYWw6IGZhbHNlLFxuICAgICAgICByZXBlYXQ6IGZhbHNlLFxuICAgICAgICBwYXJ0aWFsOiBmYWxzZSxcbiAgICAgICAgYXN0ZXJpc2s6IGZhbHNlLFxuICAgICAgICBwYXR0ZXJuOiBudWxsXG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBhdHRhY2hLZXlzKHBhdGgsIGtleXMpXG59XG5cbi8qKlxuICogVHJhbnNmb3JtIGFuIGFycmF5IGludG8gYSByZWdleHAuXG4gKlxuICogQHBhcmFtICB7IUFycmF5fSAgcGF0aFxuICogQHBhcmFtICB7QXJyYXl9ICAga2V5c1xuICogQHBhcmFtICB7IU9iamVjdH0gb3B0aW9uc1xuICogQHJldHVybiB7IVJlZ0V4cH1cbiAqL1xuZnVuY3Rpb24gYXJyYXlUb1JlZ2V4cCAocGF0aCwga2V5cywgb3B0aW9ucykge1xuICB2YXIgcGFydHMgPSBbXVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcGF0aC5sZW5ndGg7IGkrKykge1xuICAgIHBhcnRzLnB1c2gocGF0aFRvUmVnZXhwKHBhdGhbaV0sIGtleXMsIG9wdGlvbnMpLnNvdXJjZSlcbiAgfVxuXG4gIHZhciByZWdleHAgPSBuZXcgUmVnRXhwKCcoPzonICsgcGFydHMuam9pbignfCcpICsgJyknLCBmbGFncyhvcHRpb25zKSlcblxuICByZXR1cm4gYXR0YWNoS2V5cyhyZWdleHAsIGtleXMpXG59XG5cbi8qKlxuICogQ3JlYXRlIGEgcGF0aCByZWdleHAgZnJvbSBzdHJpbmcgaW5wdXQuXG4gKlxuICogQHBhcmFtICB7c3RyaW5nfSAgcGF0aFxuICogQHBhcmFtICB7IUFycmF5fSAga2V5c1xuICogQHBhcmFtICB7IU9iamVjdH0gb3B0aW9uc1xuICogQHJldHVybiB7IVJlZ0V4cH1cbiAqL1xuZnVuY3Rpb24gc3RyaW5nVG9SZWdleHAgKHBhdGgsIGtleXMsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIHRva2Vuc1RvUmVnRXhwKHBhcnNlKHBhdGgsIG9wdGlvbnMpLCBrZXlzLCBvcHRpb25zKVxufVxuXG4vKipcbiAqIEV4cG9zZSBhIGZ1bmN0aW9uIGZvciB0YWtpbmcgdG9rZW5zIGFuZCByZXR1cm5pbmcgYSBSZWdFeHAuXG4gKlxuICogQHBhcmFtICB7IUFycmF5fSAgICAgICAgICB0b2tlbnNcbiAqIEBwYXJhbSAgeyhBcnJheXxPYmplY3QpPX0ga2V5c1xuICogQHBhcmFtICB7T2JqZWN0PX0gICAgICAgICBvcHRpb25zXG4gKiBAcmV0dXJuIHshUmVnRXhwfVxuICovXG5mdW5jdGlvbiB0b2tlbnNUb1JlZ0V4cCAodG9rZW5zLCBrZXlzLCBvcHRpb25zKSB7XG4gIGlmICghaXNhcnJheShrZXlzKSkge1xuICAgIG9wdGlvbnMgPSAvKiogQHR5cGUgeyFPYmplY3R9ICovIChrZXlzIHx8IG9wdGlvbnMpXG4gICAga2V5cyA9IFtdXG4gIH1cblxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fVxuXG4gIHZhciBzdHJpY3QgPSBvcHRpb25zLnN0cmljdFxuICB2YXIgZW5kID0gb3B0aW9ucy5lbmQgIT09IGZhbHNlXG4gIHZhciByb3V0ZSA9ICcnXG5cbiAgLy8gSXRlcmF0ZSBvdmVyIHRoZSB0b2tlbnMgYW5kIGNyZWF0ZSBvdXIgcmVnZXhwIHN0cmluZy5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgdG9rZW4gPSB0b2tlbnNbaV1cblxuICAgIGlmICh0eXBlb2YgdG9rZW4gPT09ICdzdHJpbmcnKSB7XG4gICAgICByb3V0ZSArPSBlc2NhcGVTdHJpbmcodG9rZW4pXG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBwcmVmaXggPSBlc2NhcGVTdHJpbmcodG9rZW4ucHJlZml4KVxuICAgICAgdmFyIGNhcHR1cmUgPSAnKD86JyArIHRva2VuLnBhdHRlcm4gKyAnKSdcblxuICAgICAga2V5cy5wdXNoKHRva2VuKVxuXG4gICAgICBpZiAodG9rZW4ucmVwZWF0KSB7XG4gICAgICAgIGNhcHR1cmUgKz0gJyg/OicgKyBwcmVmaXggKyBjYXB0dXJlICsgJykqJ1xuICAgICAgfVxuXG4gICAgICBpZiAodG9rZW4ub3B0aW9uYWwpIHtcbiAgICAgICAgaWYgKCF0b2tlbi5wYXJ0aWFsKSB7XG4gICAgICAgICAgY2FwdHVyZSA9ICcoPzonICsgcHJlZml4ICsgJygnICsgY2FwdHVyZSArICcpKT8nXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2FwdHVyZSA9IHByZWZpeCArICcoJyArIGNhcHR1cmUgKyAnKT8nXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNhcHR1cmUgPSBwcmVmaXggKyAnKCcgKyBjYXB0dXJlICsgJyknXG4gICAgICB9XG5cbiAgICAgIHJvdXRlICs9IGNhcHR1cmVcbiAgICB9XG4gIH1cblxuICB2YXIgZGVsaW1pdGVyID0gZXNjYXBlU3RyaW5nKG9wdGlvbnMuZGVsaW1pdGVyIHx8ICcvJylcbiAgdmFyIGVuZHNXaXRoRGVsaW1pdGVyID0gcm91dGUuc2xpY2UoLWRlbGltaXRlci5sZW5ndGgpID09PSBkZWxpbWl0ZXJcblxuICAvLyBJbiBub24tc3RyaWN0IG1vZGUgd2UgYWxsb3cgYSBzbGFzaCBhdCB0aGUgZW5kIG9mIG1hdGNoLiBJZiB0aGUgcGF0aCB0b1xuICAvLyBtYXRjaCBhbHJlYWR5IGVuZHMgd2l0aCBhIHNsYXNoLCB3ZSByZW1vdmUgaXQgZm9yIGNvbnNpc3RlbmN5LiBUaGUgc2xhc2hcbiAgLy8gaXMgdmFsaWQgYXQgdGhlIGVuZCBvZiBhIHBhdGggbWF0Y2gsIG5vdCBpbiB0aGUgbWlkZGxlLiBUaGlzIGlzIGltcG9ydGFudFxuICAvLyBpbiBub24tZW5kaW5nIG1vZGUsIHdoZXJlIFwiL3Rlc3QvXCIgc2hvdWxkbid0IG1hdGNoIFwiL3Rlc3QvL3JvdXRlXCIuXG4gIGlmICghc3RyaWN0KSB7XG4gICAgcm91dGUgPSAoZW5kc1dpdGhEZWxpbWl0ZXIgPyByb3V0ZS5zbGljZSgwLCAtZGVsaW1pdGVyLmxlbmd0aCkgOiByb3V0ZSkgKyAnKD86JyArIGRlbGltaXRlciArICcoPz0kKSk/J1xuICB9XG5cbiAgaWYgKGVuZCkge1xuICAgIHJvdXRlICs9ICckJ1xuICB9IGVsc2Uge1xuICAgIC8vIEluIG5vbi1lbmRpbmcgbW9kZSwgd2UgbmVlZCB0aGUgY2FwdHVyaW5nIGdyb3VwcyB0byBtYXRjaCBhcyBtdWNoIGFzXG4gICAgLy8gcG9zc2libGUgYnkgdXNpbmcgYSBwb3NpdGl2ZSBsb29rYWhlYWQgdG8gdGhlIGVuZCBvciBuZXh0IHBhdGggc2VnbWVudC5cbiAgICByb3V0ZSArPSBzdHJpY3QgJiYgZW5kc1dpdGhEZWxpbWl0ZXIgPyAnJyA6ICcoPz0nICsgZGVsaW1pdGVyICsgJ3wkKSdcbiAgfVxuXG4gIHJldHVybiBhdHRhY2hLZXlzKG5ldyBSZWdFeHAoJ14nICsgcm91dGUsIGZsYWdzKG9wdGlvbnMpKSwga2V5cylcbn1cblxuLyoqXG4gKiBOb3JtYWxpemUgdGhlIGdpdmVuIHBhdGggc3RyaW5nLCByZXR1cm5pbmcgYSByZWd1bGFyIGV4cHJlc3Npb24uXG4gKlxuICogQW4gZW1wdHkgYXJyYXkgY2FuIGJlIHBhc3NlZCBpbiBmb3IgdGhlIGtleXMsIHdoaWNoIHdpbGwgaG9sZCB0aGVcbiAqIHBsYWNlaG9sZGVyIGtleSBkZXNjcmlwdGlvbnMuIEZvciBleGFtcGxlLCB1c2luZyBgL3VzZXIvOmlkYCwgYGtleXNgIHdpbGxcbiAqIGNvbnRhaW4gYFt7IG5hbWU6ICdpZCcsIGRlbGltaXRlcjogJy8nLCBvcHRpb25hbDogZmFsc2UsIHJlcGVhdDogZmFsc2UgfV1gLlxuICpcbiAqIEBwYXJhbSAgeyhzdHJpbmd8UmVnRXhwfEFycmF5KX0gcGF0aFxuICogQHBhcmFtICB7KEFycmF5fE9iamVjdCk9fSAgICAgICBrZXlzXG4gKiBAcGFyYW0gIHtPYmplY3Q9fSAgICAgICAgICAgICAgIG9wdGlvbnNcbiAqIEByZXR1cm4geyFSZWdFeHB9XG4gKi9cbmZ1bmN0aW9uIHBhdGhUb1JlZ2V4cCAocGF0aCwga2V5cywgb3B0aW9ucykge1xuICBpZiAoIWlzYXJyYXkoa2V5cykpIHtcbiAgICBvcHRpb25zID0gLyoqIEB0eXBlIHshT2JqZWN0fSAqLyAoa2V5cyB8fCBvcHRpb25zKVxuICAgIGtleXMgPSBbXVxuICB9XG5cbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge31cblxuICBpZiAocGF0aCBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgIHJldHVybiByZWdleHBUb1JlZ2V4cChwYXRoLCAvKiogQHR5cGUgeyFBcnJheX0gKi8gKGtleXMpKVxuICB9XG5cbiAgaWYgKGlzYXJyYXkocGF0aCkpIHtcbiAgICByZXR1cm4gYXJyYXlUb1JlZ2V4cCgvKiogQHR5cGUgeyFBcnJheX0gKi8gKHBhdGgpLCAvKiogQHR5cGUgeyFBcnJheX0gKi8gKGtleXMpLCBvcHRpb25zKVxuICB9XG5cbiAgcmV0dXJuIHN0cmluZ1RvUmVnZXhwKC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocGF0aCksIC8qKiBAdHlwZSB7IUFycmF5fSAqLyAoa2V5cyksIG9wdGlvbnMpXG59XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3JlYWN0LXJvdXRlci9+L3BhdGgtdG8tcmVnZXhwL2luZGV4LmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIEVzY2FwZSBhbmQgd3JhcCBrZXkgc28gaXQgaXMgc2FmZSB0byB1c2UgYXMgYSByZWFjdGlkXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSB0byBiZSBlc2NhcGVkLlxuICogQHJldHVybiB7c3RyaW5nfSB0aGUgZXNjYXBlZCBrZXkuXG4gKi9cblxuZnVuY3Rpb24gZXNjYXBlKGtleSkge1xuICB2YXIgZXNjYXBlUmVnZXggPSAvWz06XS9nO1xuICB2YXIgZXNjYXBlckxvb2t1cCA9IHtcbiAgICAnPSc6ICc9MCcsXG4gICAgJzonOiAnPTInXG4gIH07XG4gIHZhciBlc2NhcGVkU3RyaW5nID0gKCcnICsga2V5KS5yZXBsYWNlKGVzY2FwZVJlZ2V4LCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICByZXR1cm4gZXNjYXBlckxvb2t1cFttYXRjaF07XG4gIH0pO1xuXG4gIHJldHVybiAnJCcgKyBlc2NhcGVkU3RyaW5nO1xufVxuXG4vKipcbiAqIFVuZXNjYXBlIGFuZCB1bndyYXAga2V5IGZvciBodW1hbi1yZWFkYWJsZSBkaXNwbGF5XG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSB0byB1bmVzY2FwZS5cbiAqIEByZXR1cm4ge3N0cmluZ30gdGhlIHVuZXNjYXBlZCBrZXkuXG4gKi9cbmZ1bmN0aW9uIHVuZXNjYXBlKGtleSkge1xuICB2YXIgdW5lc2NhcGVSZWdleCA9IC8oPTB8PTIpL2c7XG4gIHZhciB1bmVzY2FwZXJMb29rdXAgPSB7XG4gICAgJz0wJzogJz0nLFxuICAgICc9Mic6ICc6J1xuICB9O1xuICB2YXIga2V5U3Vic3RyaW5nID0ga2V5WzBdID09PSAnLicgJiYga2V5WzFdID09PSAnJCcgPyBrZXkuc3Vic3RyaW5nKDIpIDoga2V5LnN1YnN0cmluZygxKTtcblxuICByZXR1cm4gKCcnICsga2V5U3Vic3RyaW5nKS5yZXBsYWNlKHVuZXNjYXBlUmVnZXgsIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgIHJldHVybiB1bmVzY2FwZXJMb29rdXBbbWF0Y2hdO1xuICB9KTtcbn1cblxudmFyIEtleUVzY2FwZVV0aWxzID0ge1xuICBlc2NhcGU6IGVzY2FwZSxcbiAgdW5lc2NhcGU6IHVuZXNjYXBlXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEtleUVzY2FwZVV0aWxzO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QvbGliL0tleUVzY2FwZVV0aWxzLmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgX3Byb2RJbnZhcmlhbnQgPSByZXF1aXJlKCcuL3JlYWN0UHJvZEludmFyaWFudCcpO1xuXG52YXIgaW52YXJpYW50ID0gcmVxdWlyZSgnZmJqcy9saWIvaW52YXJpYW50Jyk7XG5cbi8qKlxuICogU3RhdGljIHBvb2xlcnMuIFNldmVyYWwgY3VzdG9tIHZlcnNpb25zIGZvciBlYWNoIHBvdGVudGlhbCBudW1iZXIgb2ZcbiAqIGFyZ3VtZW50cy4gQSBjb21wbGV0ZWx5IGdlbmVyaWMgcG9vbGVyIGlzIGVhc3kgdG8gaW1wbGVtZW50LCBidXQgd291bGRcbiAqIHJlcXVpcmUgYWNjZXNzaW5nIHRoZSBgYXJndW1lbnRzYCBvYmplY3QuIEluIGVhY2ggb2YgdGhlc2UsIGB0aGlzYCByZWZlcnMgdG9cbiAqIHRoZSBDbGFzcyBpdHNlbGYsIG5vdCBhbiBpbnN0YW5jZS4gSWYgYW55IG90aGVycyBhcmUgbmVlZGVkLCBzaW1wbHkgYWRkIHRoZW1cbiAqIGhlcmUsIG9yIGluIHRoZWlyIG93biBmaWxlcy5cbiAqL1xudmFyIG9uZUFyZ3VtZW50UG9vbGVyID0gZnVuY3Rpb24gKGNvcHlGaWVsZHNGcm9tKSB7XG4gIHZhciBLbGFzcyA9IHRoaXM7XG4gIGlmIChLbGFzcy5pbnN0YW5jZVBvb2wubGVuZ3RoKSB7XG4gICAgdmFyIGluc3RhbmNlID0gS2xhc3MuaW5zdGFuY2VQb29sLnBvcCgpO1xuICAgIEtsYXNzLmNhbGwoaW5zdGFuY2UsIGNvcHlGaWVsZHNGcm9tKTtcbiAgICByZXR1cm4gaW5zdGFuY2U7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG5ldyBLbGFzcyhjb3B5RmllbGRzRnJvbSk7XG4gIH1cbn07XG5cbnZhciB0d29Bcmd1bWVudFBvb2xlciA9IGZ1bmN0aW9uIChhMSwgYTIpIHtcbiAgdmFyIEtsYXNzID0gdGhpcztcbiAgaWYgKEtsYXNzLmluc3RhbmNlUG9vbC5sZW5ndGgpIHtcbiAgICB2YXIgaW5zdGFuY2UgPSBLbGFzcy5pbnN0YW5jZVBvb2wucG9wKCk7XG4gICAgS2xhc3MuY2FsbChpbnN0YW5jZSwgYTEsIGEyKTtcbiAgICByZXR1cm4gaW5zdGFuY2U7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG5ldyBLbGFzcyhhMSwgYTIpO1xuICB9XG59O1xuXG52YXIgdGhyZWVBcmd1bWVudFBvb2xlciA9IGZ1bmN0aW9uIChhMSwgYTIsIGEzKSB7XG4gIHZhciBLbGFzcyA9IHRoaXM7XG4gIGlmIChLbGFzcy5pbnN0YW5jZVBvb2wubGVuZ3RoKSB7XG4gICAgdmFyIGluc3RhbmNlID0gS2xhc3MuaW5zdGFuY2VQb29sLnBvcCgpO1xuICAgIEtsYXNzLmNhbGwoaW5zdGFuY2UsIGExLCBhMiwgYTMpO1xuICAgIHJldHVybiBpbnN0YW5jZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbmV3IEtsYXNzKGExLCBhMiwgYTMpO1xuICB9XG59O1xuXG52YXIgZm91ckFyZ3VtZW50UG9vbGVyID0gZnVuY3Rpb24gKGExLCBhMiwgYTMsIGE0KSB7XG4gIHZhciBLbGFzcyA9IHRoaXM7XG4gIGlmIChLbGFzcy5pbnN0YW5jZVBvb2wubGVuZ3RoKSB7XG4gICAgdmFyIGluc3RhbmNlID0gS2xhc3MuaW5zdGFuY2VQb29sLnBvcCgpO1xuICAgIEtsYXNzLmNhbGwoaW5zdGFuY2UsIGExLCBhMiwgYTMsIGE0KTtcbiAgICByZXR1cm4gaW5zdGFuY2U7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG5ldyBLbGFzcyhhMSwgYTIsIGEzLCBhNCk7XG4gIH1cbn07XG5cbnZhciBzdGFuZGFyZFJlbGVhc2VyID0gZnVuY3Rpb24gKGluc3RhbmNlKSB7XG4gIHZhciBLbGFzcyA9IHRoaXM7XG4gICEoaW5zdGFuY2UgaW5zdGFuY2VvZiBLbGFzcykgPyBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gaW52YXJpYW50KGZhbHNlLCAnVHJ5aW5nIHRvIHJlbGVhc2UgYW4gaW5zdGFuY2UgaW50byBhIHBvb2wgb2YgYSBkaWZmZXJlbnQgdHlwZS4nKSA6IF9wcm9kSW52YXJpYW50KCcyNScpIDogdm9pZCAwO1xuICBpbnN0YW5jZS5kZXN0cnVjdG9yKCk7XG4gIGlmIChLbGFzcy5pbnN0YW5jZVBvb2wubGVuZ3RoIDwgS2xhc3MucG9vbFNpemUpIHtcbiAgICBLbGFzcy5pbnN0YW5jZVBvb2wucHVzaChpbnN0YW5jZSk7XG4gIH1cbn07XG5cbnZhciBERUZBVUxUX1BPT0xfU0laRSA9IDEwO1xudmFyIERFRkFVTFRfUE9PTEVSID0gb25lQXJndW1lbnRQb29sZXI7XG5cbi8qKlxuICogQXVnbWVudHMgYENvcHlDb25zdHJ1Y3RvcmAgdG8gYmUgYSBwb29sYWJsZSBjbGFzcywgYXVnbWVudGluZyBvbmx5IHRoZSBjbGFzc1xuICogaXRzZWxmIChzdGF0aWNhbGx5KSBub3QgYWRkaW5nIGFueSBwcm90b3R5cGljYWwgZmllbGRzLiBBbnkgQ29weUNvbnN0cnVjdG9yXG4gKiB5b3UgZ2l2ZSB0aGlzIG1heSBoYXZlIGEgYHBvb2xTaXplYCBwcm9wZXJ0eSwgYW5kIHdpbGwgbG9vayBmb3IgYVxuICogcHJvdG90eXBpY2FsIGBkZXN0cnVjdG9yYCBvbiBpbnN0YW5jZXMuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gQ29weUNvbnN0cnVjdG9yIENvbnN0cnVjdG9yIHRoYXQgY2FuIGJlIHVzZWQgdG8gcmVzZXQuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwb29sZXIgQ3VzdG9taXphYmxlIHBvb2xlci5cbiAqL1xudmFyIGFkZFBvb2xpbmdUbyA9IGZ1bmN0aW9uIChDb3B5Q29uc3RydWN0b3IsIHBvb2xlcikge1xuICAvLyBDYXN0aW5nIGFzIGFueSBzbyB0aGF0IGZsb3cgaWdub3JlcyB0aGUgYWN0dWFsIGltcGxlbWVudGF0aW9uIGFuZCB0cnVzdHNcbiAgLy8gaXQgdG8gbWF0Y2ggdGhlIHR5cGUgd2UgZGVjbGFyZWRcbiAgdmFyIE5ld0tsYXNzID0gQ29weUNvbnN0cnVjdG9yO1xuICBOZXdLbGFzcy5pbnN0YW5jZVBvb2wgPSBbXTtcbiAgTmV3S2xhc3MuZ2V0UG9vbGVkID0gcG9vbGVyIHx8IERFRkFVTFRfUE9PTEVSO1xuICBpZiAoIU5ld0tsYXNzLnBvb2xTaXplKSB7XG4gICAgTmV3S2xhc3MucG9vbFNpemUgPSBERUZBVUxUX1BPT0xfU0laRTtcbiAgfVxuICBOZXdLbGFzcy5yZWxlYXNlID0gc3RhbmRhcmRSZWxlYXNlcjtcbiAgcmV0dXJuIE5ld0tsYXNzO1xufTtcblxudmFyIFBvb2xlZENsYXNzID0ge1xuICBhZGRQb29saW5nVG86IGFkZFBvb2xpbmdUbyxcbiAgb25lQXJndW1lbnRQb29sZXI6IG9uZUFyZ3VtZW50UG9vbGVyLFxuICB0d29Bcmd1bWVudFBvb2xlcjogdHdvQXJndW1lbnRQb29sZXIsXG4gIHRocmVlQXJndW1lbnRQb29sZXI6IHRocmVlQXJndW1lbnRQb29sZXIsXG4gIGZvdXJBcmd1bWVudFBvb2xlcjogZm91ckFyZ3VtZW50UG9vbGVyXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFBvb2xlZENsYXNzO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QvbGliL1Bvb2xlZENsYXNzLmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFBvb2xlZENsYXNzID0gcmVxdWlyZSgnLi9Qb29sZWRDbGFzcycpO1xudmFyIFJlYWN0RWxlbWVudCA9IHJlcXVpcmUoJy4vUmVhY3RFbGVtZW50Jyk7XG5cbnZhciBlbXB0eUZ1bmN0aW9uID0gcmVxdWlyZSgnZmJqcy9saWIvZW1wdHlGdW5jdGlvbicpO1xudmFyIHRyYXZlcnNlQWxsQ2hpbGRyZW4gPSByZXF1aXJlKCcuL3RyYXZlcnNlQWxsQ2hpbGRyZW4nKTtcblxudmFyIHR3b0FyZ3VtZW50UG9vbGVyID0gUG9vbGVkQ2xhc3MudHdvQXJndW1lbnRQb29sZXI7XG52YXIgZm91ckFyZ3VtZW50UG9vbGVyID0gUG9vbGVkQ2xhc3MuZm91ckFyZ3VtZW50UG9vbGVyO1xuXG52YXIgdXNlclByb3ZpZGVkS2V5RXNjYXBlUmVnZXggPSAvXFwvKy9nO1xuZnVuY3Rpb24gZXNjYXBlVXNlclByb3ZpZGVkS2V5KHRleHQpIHtcbiAgcmV0dXJuICgnJyArIHRleHQpLnJlcGxhY2UodXNlclByb3ZpZGVkS2V5RXNjYXBlUmVnZXgsICckJi8nKTtcbn1cblxuLyoqXG4gKiBQb29sZWRDbGFzcyByZXByZXNlbnRpbmcgdGhlIGJvb2trZWVwaW5nIGFzc29jaWF0ZWQgd2l0aCBwZXJmb3JtaW5nIGEgY2hpbGRcbiAqIHRyYXZlcnNhbC4gQWxsb3dzIGF2b2lkaW5nIGJpbmRpbmcgY2FsbGJhY2tzLlxuICpcbiAqIEBjb25zdHJ1Y3RvciBGb3JFYWNoQm9va0tlZXBpbmdcbiAqIEBwYXJhbSB7IWZ1bmN0aW9ufSBmb3JFYWNoRnVuY3Rpb24gRnVuY3Rpb24gdG8gcGVyZm9ybSB0cmF2ZXJzYWwgd2l0aC5cbiAqIEBwYXJhbSB7Pyp9IGZvckVhY2hDb250ZXh0IENvbnRleHQgdG8gcGVyZm9ybSBjb250ZXh0IHdpdGguXG4gKi9cbmZ1bmN0aW9uIEZvckVhY2hCb29rS2VlcGluZyhmb3JFYWNoRnVuY3Rpb24sIGZvckVhY2hDb250ZXh0KSB7XG4gIHRoaXMuZnVuYyA9IGZvckVhY2hGdW5jdGlvbjtcbiAgdGhpcy5jb250ZXh0ID0gZm9yRWFjaENvbnRleHQ7XG4gIHRoaXMuY291bnQgPSAwO1xufVxuRm9yRWFjaEJvb2tLZWVwaW5nLnByb3RvdHlwZS5kZXN0cnVjdG9yID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmZ1bmMgPSBudWxsO1xuICB0aGlzLmNvbnRleHQgPSBudWxsO1xuICB0aGlzLmNvdW50ID0gMDtcbn07XG5Qb29sZWRDbGFzcy5hZGRQb29saW5nVG8oRm9yRWFjaEJvb2tLZWVwaW5nLCB0d29Bcmd1bWVudFBvb2xlcik7XG5cbmZ1bmN0aW9uIGZvckVhY2hTaW5nbGVDaGlsZChib29rS2VlcGluZywgY2hpbGQsIG5hbWUpIHtcbiAgdmFyIGZ1bmMgPSBib29rS2VlcGluZy5mdW5jLFxuICAgICAgY29udGV4dCA9IGJvb2tLZWVwaW5nLmNvbnRleHQ7XG5cbiAgZnVuYy5jYWxsKGNvbnRleHQsIGNoaWxkLCBib29rS2VlcGluZy5jb3VudCsrKTtcbn1cblxuLyoqXG4gKiBJdGVyYXRlcyB0aHJvdWdoIGNoaWxkcmVuIHRoYXQgYXJlIHR5cGljYWxseSBzcGVjaWZpZWQgYXMgYHByb3BzLmNoaWxkcmVuYC5cbiAqXG4gKiBTZWUgaHR0cHM6Ly9mYWNlYm9vay5naXRodWIuaW8vcmVhY3QvZG9jcy90b3AtbGV2ZWwtYXBpLmh0bWwjcmVhY3QuY2hpbGRyZW4uZm9yZWFjaFxuICpcbiAqIFRoZSBwcm92aWRlZCBmb3JFYWNoRnVuYyhjaGlsZCwgaW5kZXgpIHdpbGwgYmUgY2FsbGVkIGZvciBlYWNoXG4gKiBsZWFmIGNoaWxkLlxuICpcbiAqIEBwYXJhbSB7Pyp9IGNoaWxkcmVuIENoaWxkcmVuIHRyZWUgY29udGFpbmVyLlxuICogQHBhcmFtIHtmdW5jdGlvbigqLCBpbnQpfSBmb3JFYWNoRnVuY1xuICogQHBhcmFtIHsqfSBmb3JFYWNoQ29udGV4dCBDb250ZXh0IGZvciBmb3JFYWNoQ29udGV4dC5cbiAqL1xuZnVuY3Rpb24gZm9yRWFjaENoaWxkcmVuKGNoaWxkcmVuLCBmb3JFYWNoRnVuYywgZm9yRWFjaENvbnRleHQpIHtcbiAgaWYgKGNoaWxkcmVuID09IG51bGwpIHtcbiAgICByZXR1cm4gY2hpbGRyZW47XG4gIH1cbiAgdmFyIHRyYXZlcnNlQ29udGV4dCA9IEZvckVhY2hCb29rS2VlcGluZy5nZXRQb29sZWQoZm9yRWFjaEZ1bmMsIGZvckVhY2hDb250ZXh0KTtcbiAgdHJhdmVyc2VBbGxDaGlsZHJlbihjaGlsZHJlbiwgZm9yRWFjaFNpbmdsZUNoaWxkLCB0cmF2ZXJzZUNvbnRleHQpO1xuICBGb3JFYWNoQm9va0tlZXBpbmcucmVsZWFzZSh0cmF2ZXJzZUNvbnRleHQpO1xufVxuXG4vKipcbiAqIFBvb2xlZENsYXNzIHJlcHJlc2VudGluZyB0aGUgYm9va2tlZXBpbmcgYXNzb2NpYXRlZCB3aXRoIHBlcmZvcm1pbmcgYSBjaGlsZFxuICogbWFwcGluZy4gQWxsb3dzIGF2b2lkaW5nIGJpbmRpbmcgY2FsbGJhY2tzLlxuICpcbiAqIEBjb25zdHJ1Y3RvciBNYXBCb29rS2VlcGluZ1xuICogQHBhcmFtIHshKn0gbWFwUmVzdWx0IE9iamVjdCBjb250YWluaW5nIHRoZSBvcmRlcmVkIG1hcCBvZiByZXN1bHRzLlxuICogQHBhcmFtIHshZnVuY3Rpb259IG1hcEZ1bmN0aW9uIEZ1bmN0aW9uIHRvIHBlcmZvcm0gbWFwcGluZyB3aXRoLlxuICogQHBhcmFtIHs/Kn0gbWFwQ29udGV4dCBDb250ZXh0IHRvIHBlcmZvcm0gbWFwcGluZyB3aXRoLlxuICovXG5mdW5jdGlvbiBNYXBCb29rS2VlcGluZyhtYXBSZXN1bHQsIGtleVByZWZpeCwgbWFwRnVuY3Rpb24sIG1hcENvbnRleHQpIHtcbiAgdGhpcy5yZXN1bHQgPSBtYXBSZXN1bHQ7XG4gIHRoaXMua2V5UHJlZml4ID0ga2V5UHJlZml4O1xuICB0aGlzLmZ1bmMgPSBtYXBGdW5jdGlvbjtcbiAgdGhpcy5jb250ZXh0ID0gbWFwQ29udGV4dDtcbiAgdGhpcy5jb3VudCA9IDA7XG59XG5NYXBCb29rS2VlcGluZy5wcm90b3R5cGUuZGVzdHJ1Y3RvciA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5yZXN1bHQgPSBudWxsO1xuICB0aGlzLmtleVByZWZpeCA9IG51bGw7XG4gIHRoaXMuZnVuYyA9IG51bGw7XG4gIHRoaXMuY29udGV4dCA9IG51bGw7XG4gIHRoaXMuY291bnQgPSAwO1xufTtcblBvb2xlZENsYXNzLmFkZFBvb2xpbmdUbyhNYXBCb29rS2VlcGluZywgZm91ckFyZ3VtZW50UG9vbGVyKTtcblxuZnVuY3Rpb24gbWFwU2luZ2xlQ2hpbGRJbnRvQ29udGV4dChib29rS2VlcGluZywgY2hpbGQsIGNoaWxkS2V5KSB7XG4gIHZhciByZXN1bHQgPSBib29rS2VlcGluZy5yZXN1bHQsXG4gICAgICBrZXlQcmVmaXggPSBib29rS2VlcGluZy5rZXlQcmVmaXgsXG4gICAgICBmdW5jID0gYm9va0tlZXBpbmcuZnVuYyxcbiAgICAgIGNvbnRleHQgPSBib29rS2VlcGluZy5jb250ZXh0O1xuXG5cbiAgdmFyIG1hcHBlZENoaWxkID0gZnVuYy5jYWxsKGNvbnRleHQsIGNoaWxkLCBib29rS2VlcGluZy5jb3VudCsrKTtcbiAgaWYgKEFycmF5LmlzQXJyYXkobWFwcGVkQ2hpbGQpKSB7XG4gICAgbWFwSW50b1dpdGhLZXlQcmVmaXhJbnRlcm5hbChtYXBwZWRDaGlsZCwgcmVzdWx0LCBjaGlsZEtleSwgZW1wdHlGdW5jdGlvbi50aGF0UmV0dXJuc0FyZ3VtZW50KTtcbiAgfSBlbHNlIGlmIChtYXBwZWRDaGlsZCAhPSBudWxsKSB7XG4gICAgaWYgKFJlYWN0RWxlbWVudC5pc1ZhbGlkRWxlbWVudChtYXBwZWRDaGlsZCkpIHtcbiAgICAgIG1hcHBlZENoaWxkID0gUmVhY3RFbGVtZW50LmNsb25lQW5kUmVwbGFjZUtleShtYXBwZWRDaGlsZCxcbiAgICAgIC8vIEtlZXAgYm90aCB0aGUgKG1hcHBlZCkgYW5kIG9sZCBrZXlzIGlmIHRoZXkgZGlmZmVyLCBqdXN0IGFzXG4gICAgICAvLyB0cmF2ZXJzZUFsbENoaWxkcmVuIHVzZWQgdG8gZG8gZm9yIG9iamVjdHMgYXMgY2hpbGRyZW5cbiAgICAgIGtleVByZWZpeCArIChtYXBwZWRDaGlsZC5rZXkgJiYgKCFjaGlsZCB8fCBjaGlsZC5rZXkgIT09IG1hcHBlZENoaWxkLmtleSkgPyBlc2NhcGVVc2VyUHJvdmlkZWRLZXkobWFwcGVkQ2hpbGQua2V5KSArICcvJyA6ICcnKSArIGNoaWxkS2V5KTtcbiAgICB9XG4gICAgcmVzdWx0LnB1c2gobWFwcGVkQ2hpbGQpO1xuICB9XG59XG5cbmZ1bmN0aW9uIG1hcEludG9XaXRoS2V5UHJlZml4SW50ZXJuYWwoY2hpbGRyZW4sIGFycmF5LCBwcmVmaXgsIGZ1bmMsIGNvbnRleHQpIHtcbiAgdmFyIGVzY2FwZWRQcmVmaXggPSAnJztcbiAgaWYgKHByZWZpeCAhPSBudWxsKSB7XG4gICAgZXNjYXBlZFByZWZpeCA9IGVzY2FwZVVzZXJQcm92aWRlZEtleShwcmVmaXgpICsgJy8nO1xuICB9XG4gIHZhciB0cmF2ZXJzZUNvbnRleHQgPSBNYXBCb29rS2VlcGluZy5nZXRQb29sZWQoYXJyYXksIGVzY2FwZWRQcmVmaXgsIGZ1bmMsIGNvbnRleHQpO1xuICB0cmF2ZXJzZUFsbENoaWxkcmVuKGNoaWxkcmVuLCBtYXBTaW5nbGVDaGlsZEludG9Db250ZXh0LCB0cmF2ZXJzZUNvbnRleHQpO1xuICBNYXBCb29rS2VlcGluZy5yZWxlYXNlKHRyYXZlcnNlQ29udGV4dCk7XG59XG5cbi8qKlxuICogTWFwcyBjaGlsZHJlbiB0aGF0IGFyZSB0eXBpY2FsbHkgc3BlY2lmaWVkIGFzIGBwcm9wcy5jaGlsZHJlbmAuXG4gKlxuICogU2VlIGh0dHBzOi8vZmFjZWJvb2suZ2l0aHViLmlvL3JlYWN0L2RvY3MvdG9wLWxldmVsLWFwaS5odG1sI3JlYWN0LmNoaWxkcmVuLm1hcFxuICpcbiAqIFRoZSBwcm92aWRlZCBtYXBGdW5jdGlvbihjaGlsZCwga2V5LCBpbmRleCkgd2lsbCBiZSBjYWxsZWQgZm9yIGVhY2hcbiAqIGxlYWYgY2hpbGQuXG4gKlxuICogQHBhcmFtIHs/Kn0gY2hpbGRyZW4gQ2hpbGRyZW4gdHJlZSBjb250YWluZXIuXG4gKiBAcGFyYW0ge2Z1bmN0aW9uKCosIGludCl9IGZ1bmMgVGhlIG1hcCBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7Kn0gY29udGV4dCBDb250ZXh0IGZvciBtYXBGdW5jdGlvbi5cbiAqIEByZXR1cm4ge29iamVjdH0gT2JqZWN0IGNvbnRhaW5pbmcgdGhlIG9yZGVyZWQgbWFwIG9mIHJlc3VsdHMuXG4gKi9cbmZ1bmN0aW9uIG1hcENoaWxkcmVuKGNoaWxkcmVuLCBmdW5jLCBjb250ZXh0KSB7XG4gIGlmIChjaGlsZHJlbiA9PSBudWxsKSB7XG4gICAgcmV0dXJuIGNoaWxkcmVuO1xuICB9XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgbWFwSW50b1dpdGhLZXlQcmVmaXhJbnRlcm5hbChjaGlsZHJlbiwgcmVzdWx0LCBudWxsLCBmdW5jLCBjb250ZXh0KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gZm9yRWFjaFNpbmdsZUNoaWxkRHVtbXkodHJhdmVyc2VDb250ZXh0LCBjaGlsZCwgbmFtZSkge1xuICByZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiBDb3VudCB0aGUgbnVtYmVyIG9mIGNoaWxkcmVuIHRoYXQgYXJlIHR5cGljYWxseSBzcGVjaWZpZWQgYXNcbiAqIGBwcm9wcy5jaGlsZHJlbmAuXG4gKlxuICogU2VlIGh0dHBzOi8vZmFjZWJvb2suZ2l0aHViLmlvL3JlYWN0L2RvY3MvdG9wLWxldmVsLWFwaS5odG1sI3JlYWN0LmNoaWxkcmVuLmNvdW50XG4gKlxuICogQHBhcmFtIHs/Kn0gY2hpbGRyZW4gQ2hpbGRyZW4gdHJlZSBjb250YWluZXIuXG4gKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBudW1iZXIgb2YgY2hpbGRyZW4uXG4gKi9cbmZ1bmN0aW9uIGNvdW50Q2hpbGRyZW4oY2hpbGRyZW4sIGNvbnRleHQpIHtcbiAgcmV0dXJuIHRyYXZlcnNlQWxsQ2hpbGRyZW4oY2hpbGRyZW4sIGZvckVhY2hTaW5nbGVDaGlsZER1bW15LCBudWxsKTtcbn1cblxuLyoqXG4gKiBGbGF0dGVuIGEgY2hpbGRyZW4gb2JqZWN0ICh0eXBpY2FsbHkgc3BlY2lmaWVkIGFzIGBwcm9wcy5jaGlsZHJlbmApIGFuZFxuICogcmV0dXJuIGFuIGFycmF5IHdpdGggYXBwcm9wcmlhdGVseSByZS1rZXllZCBjaGlsZHJlbi5cbiAqXG4gKiBTZWUgaHR0cHM6Ly9mYWNlYm9vay5naXRodWIuaW8vcmVhY3QvZG9jcy90b3AtbGV2ZWwtYXBpLmh0bWwjcmVhY3QuY2hpbGRyZW4udG9hcnJheVxuICovXG5mdW5jdGlvbiB0b0FycmF5KGNoaWxkcmVuKSB7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgbWFwSW50b1dpdGhLZXlQcmVmaXhJbnRlcm5hbChjaGlsZHJlbiwgcmVzdWx0LCBudWxsLCBlbXB0eUZ1bmN0aW9uLnRoYXRSZXR1cm5zQXJndW1lbnQpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG52YXIgUmVhY3RDaGlsZHJlbiA9IHtcbiAgZm9yRWFjaDogZm9yRWFjaENoaWxkcmVuLFxuICBtYXA6IG1hcENoaWxkcmVuLFxuICBtYXBJbnRvV2l0aEtleVByZWZpeEludGVybmFsOiBtYXBJbnRvV2l0aEtleVByZWZpeEludGVybmFsLFxuICBjb3VudDogY291bnRDaGlsZHJlbixcbiAgdG9BcnJheTogdG9BcnJheVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdENoaWxkcmVuO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QvbGliL1JlYWN0Q2hpbGRyZW4uanMiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUmVhY3RFbGVtZW50ID0gcmVxdWlyZSgnLi9SZWFjdEVsZW1lbnQnKTtcblxuLyoqXG4gKiBDcmVhdGUgYSBmYWN0b3J5IHRoYXQgY3JlYXRlcyBIVE1MIHRhZyBlbGVtZW50cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG52YXIgY3JlYXRlRE9NRmFjdG9yeSA9IFJlYWN0RWxlbWVudC5jcmVhdGVGYWN0b3J5O1xuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgdmFyIFJlYWN0RWxlbWVudFZhbGlkYXRvciA9IHJlcXVpcmUoJy4vUmVhY3RFbGVtZW50VmFsaWRhdG9yJyk7XG4gIGNyZWF0ZURPTUZhY3RvcnkgPSBSZWFjdEVsZW1lbnRWYWxpZGF0b3IuY3JlYXRlRmFjdG9yeTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgbWFwcGluZyBmcm9tIHN1cHBvcnRlZCBIVE1MIHRhZ3MgdG8gYFJlYWN0RE9NQ29tcG9uZW50YCBjbGFzc2VzLlxuICpcbiAqIEBwdWJsaWNcbiAqL1xudmFyIFJlYWN0RE9NRmFjdG9yaWVzID0ge1xuICBhOiBjcmVhdGVET01GYWN0b3J5KCdhJyksXG4gIGFiYnI6IGNyZWF0ZURPTUZhY3RvcnkoJ2FiYnInKSxcbiAgYWRkcmVzczogY3JlYXRlRE9NRmFjdG9yeSgnYWRkcmVzcycpLFxuICBhcmVhOiBjcmVhdGVET01GYWN0b3J5KCdhcmVhJyksXG4gIGFydGljbGU6IGNyZWF0ZURPTUZhY3RvcnkoJ2FydGljbGUnKSxcbiAgYXNpZGU6IGNyZWF0ZURPTUZhY3RvcnkoJ2FzaWRlJyksXG4gIGF1ZGlvOiBjcmVhdGVET01GYWN0b3J5KCdhdWRpbycpLFxuICBiOiBjcmVhdGVET01GYWN0b3J5KCdiJyksXG4gIGJhc2U6IGNyZWF0ZURPTUZhY3RvcnkoJ2Jhc2UnKSxcbiAgYmRpOiBjcmVhdGVET01GYWN0b3J5KCdiZGknKSxcbiAgYmRvOiBjcmVhdGVET01GYWN0b3J5KCdiZG8nKSxcbiAgYmlnOiBjcmVhdGVET01GYWN0b3J5KCdiaWcnKSxcbiAgYmxvY2txdW90ZTogY3JlYXRlRE9NRmFjdG9yeSgnYmxvY2txdW90ZScpLFxuICBib2R5OiBjcmVhdGVET01GYWN0b3J5KCdib2R5JyksXG4gIGJyOiBjcmVhdGVET01GYWN0b3J5KCdicicpLFxuICBidXR0b246IGNyZWF0ZURPTUZhY3RvcnkoJ2J1dHRvbicpLFxuICBjYW52YXM6IGNyZWF0ZURPTUZhY3RvcnkoJ2NhbnZhcycpLFxuICBjYXB0aW9uOiBjcmVhdGVET01GYWN0b3J5KCdjYXB0aW9uJyksXG4gIGNpdGU6IGNyZWF0ZURPTUZhY3RvcnkoJ2NpdGUnKSxcbiAgY29kZTogY3JlYXRlRE9NRmFjdG9yeSgnY29kZScpLFxuICBjb2w6IGNyZWF0ZURPTUZhY3RvcnkoJ2NvbCcpLFxuICBjb2xncm91cDogY3JlYXRlRE9NRmFjdG9yeSgnY29sZ3JvdXAnKSxcbiAgZGF0YTogY3JlYXRlRE9NRmFjdG9yeSgnZGF0YScpLFxuICBkYXRhbGlzdDogY3JlYXRlRE9NRmFjdG9yeSgnZGF0YWxpc3QnKSxcbiAgZGQ6IGNyZWF0ZURPTUZhY3RvcnkoJ2RkJyksXG4gIGRlbDogY3JlYXRlRE9NRmFjdG9yeSgnZGVsJyksXG4gIGRldGFpbHM6IGNyZWF0ZURPTUZhY3RvcnkoJ2RldGFpbHMnKSxcbiAgZGZuOiBjcmVhdGVET01GYWN0b3J5KCdkZm4nKSxcbiAgZGlhbG9nOiBjcmVhdGVET01GYWN0b3J5KCdkaWFsb2cnKSxcbiAgZGl2OiBjcmVhdGVET01GYWN0b3J5KCdkaXYnKSxcbiAgZGw6IGNyZWF0ZURPTUZhY3RvcnkoJ2RsJyksXG4gIGR0OiBjcmVhdGVET01GYWN0b3J5KCdkdCcpLFxuICBlbTogY3JlYXRlRE9NRmFjdG9yeSgnZW0nKSxcbiAgZW1iZWQ6IGNyZWF0ZURPTUZhY3RvcnkoJ2VtYmVkJyksXG4gIGZpZWxkc2V0OiBjcmVhdGVET01GYWN0b3J5KCdmaWVsZHNldCcpLFxuICBmaWdjYXB0aW9uOiBjcmVhdGVET01GYWN0b3J5KCdmaWdjYXB0aW9uJyksXG4gIGZpZ3VyZTogY3JlYXRlRE9NRmFjdG9yeSgnZmlndXJlJyksXG4gIGZvb3RlcjogY3JlYXRlRE9NRmFjdG9yeSgnZm9vdGVyJyksXG4gIGZvcm06IGNyZWF0ZURPTUZhY3RvcnkoJ2Zvcm0nKSxcbiAgaDE6IGNyZWF0ZURPTUZhY3RvcnkoJ2gxJyksXG4gIGgyOiBjcmVhdGVET01GYWN0b3J5KCdoMicpLFxuICBoMzogY3JlYXRlRE9NRmFjdG9yeSgnaDMnKSxcbiAgaDQ6IGNyZWF0ZURPTUZhY3RvcnkoJ2g0JyksXG4gIGg1OiBjcmVhdGVET01GYWN0b3J5KCdoNScpLFxuICBoNjogY3JlYXRlRE9NRmFjdG9yeSgnaDYnKSxcbiAgaGVhZDogY3JlYXRlRE9NRmFjdG9yeSgnaGVhZCcpLFxuICBoZWFkZXI6IGNyZWF0ZURPTUZhY3RvcnkoJ2hlYWRlcicpLFxuICBoZ3JvdXA6IGNyZWF0ZURPTUZhY3RvcnkoJ2hncm91cCcpLFxuICBocjogY3JlYXRlRE9NRmFjdG9yeSgnaHInKSxcbiAgaHRtbDogY3JlYXRlRE9NRmFjdG9yeSgnaHRtbCcpLFxuICBpOiBjcmVhdGVET01GYWN0b3J5KCdpJyksXG4gIGlmcmFtZTogY3JlYXRlRE9NRmFjdG9yeSgnaWZyYW1lJyksXG4gIGltZzogY3JlYXRlRE9NRmFjdG9yeSgnaW1nJyksXG4gIGlucHV0OiBjcmVhdGVET01GYWN0b3J5KCdpbnB1dCcpLFxuICBpbnM6IGNyZWF0ZURPTUZhY3RvcnkoJ2lucycpLFxuICBrYmQ6IGNyZWF0ZURPTUZhY3RvcnkoJ2tiZCcpLFxuICBrZXlnZW46IGNyZWF0ZURPTUZhY3RvcnkoJ2tleWdlbicpLFxuICBsYWJlbDogY3JlYXRlRE9NRmFjdG9yeSgnbGFiZWwnKSxcbiAgbGVnZW5kOiBjcmVhdGVET01GYWN0b3J5KCdsZWdlbmQnKSxcbiAgbGk6IGNyZWF0ZURPTUZhY3RvcnkoJ2xpJyksXG4gIGxpbms6IGNyZWF0ZURPTUZhY3RvcnkoJ2xpbmsnKSxcbiAgbWFpbjogY3JlYXRlRE9NRmFjdG9yeSgnbWFpbicpLFxuICBtYXA6IGNyZWF0ZURPTUZhY3RvcnkoJ21hcCcpLFxuICBtYXJrOiBjcmVhdGVET01GYWN0b3J5KCdtYXJrJyksXG4gIG1lbnU6IGNyZWF0ZURPTUZhY3RvcnkoJ21lbnUnKSxcbiAgbWVudWl0ZW06IGNyZWF0ZURPTUZhY3RvcnkoJ21lbnVpdGVtJyksXG4gIG1ldGE6IGNyZWF0ZURPTUZhY3RvcnkoJ21ldGEnKSxcbiAgbWV0ZXI6IGNyZWF0ZURPTUZhY3RvcnkoJ21ldGVyJyksXG4gIG5hdjogY3JlYXRlRE9NRmFjdG9yeSgnbmF2JyksXG4gIG5vc2NyaXB0OiBjcmVhdGVET01GYWN0b3J5KCdub3NjcmlwdCcpLFxuICBvYmplY3Q6IGNyZWF0ZURPTUZhY3RvcnkoJ29iamVjdCcpLFxuICBvbDogY3JlYXRlRE9NRmFjdG9yeSgnb2wnKSxcbiAgb3B0Z3JvdXA6IGNyZWF0ZURPTUZhY3RvcnkoJ29wdGdyb3VwJyksXG4gIG9wdGlvbjogY3JlYXRlRE9NRmFjdG9yeSgnb3B0aW9uJyksXG4gIG91dHB1dDogY3JlYXRlRE9NRmFjdG9yeSgnb3V0cHV0JyksXG4gIHA6IGNyZWF0ZURPTUZhY3RvcnkoJ3AnKSxcbiAgcGFyYW06IGNyZWF0ZURPTUZhY3RvcnkoJ3BhcmFtJyksXG4gIHBpY3R1cmU6IGNyZWF0ZURPTUZhY3RvcnkoJ3BpY3R1cmUnKSxcbiAgcHJlOiBjcmVhdGVET01GYWN0b3J5KCdwcmUnKSxcbiAgcHJvZ3Jlc3M6IGNyZWF0ZURPTUZhY3RvcnkoJ3Byb2dyZXNzJyksXG4gIHE6IGNyZWF0ZURPTUZhY3RvcnkoJ3EnKSxcbiAgcnA6IGNyZWF0ZURPTUZhY3RvcnkoJ3JwJyksXG4gIHJ0OiBjcmVhdGVET01GYWN0b3J5KCdydCcpLFxuICBydWJ5OiBjcmVhdGVET01GYWN0b3J5KCdydWJ5JyksXG4gIHM6IGNyZWF0ZURPTUZhY3RvcnkoJ3MnKSxcbiAgc2FtcDogY3JlYXRlRE9NRmFjdG9yeSgnc2FtcCcpLFxuICBzY3JpcHQ6IGNyZWF0ZURPTUZhY3RvcnkoJ3NjcmlwdCcpLFxuICBzZWN0aW9uOiBjcmVhdGVET01GYWN0b3J5KCdzZWN0aW9uJyksXG4gIHNlbGVjdDogY3JlYXRlRE9NRmFjdG9yeSgnc2VsZWN0JyksXG4gIHNtYWxsOiBjcmVhdGVET01GYWN0b3J5KCdzbWFsbCcpLFxuICBzb3VyY2U6IGNyZWF0ZURPTUZhY3RvcnkoJ3NvdXJjZScpLFxuICBzcGFuOiBjcmVhdGVET01GYWN0b3J5KCdzcGFuJyksXG4gIHN0cm9uZzogY3JlYXRlRE9NRmFjdG9yeSgnc3Ryb25nJyksXG4gIHN0eWxlOiBjcmVhdGVET01GYWN0b3J5KCdzdHlsZScpLFxuICBzdWI6IGNyZWF0ZURPTUZhY3RvcnkoJ3N1YicpLFxuICBzdW1tYXJ5OiBjcmVhdGVET01GYWN0b3J5KCdzdW1tYXJ5JyksXG4gIHN1cDogY3JlYXRlRE9NRmFjdG9yeSgnc3VwJyksXG4gIHRhYmxlOiBjcmVhdGVET01GYWN0b3J5KCd0YWJsZScpLFxuICB0Ym9keTogY3JlYXRlRE9NRmFjdG9yeSgndGJvZHknKSxcbiAgdGQ6IGNyZWF0ZURPTUZhY3RvcnkoJ3RkJyksXG4gIHRleHRhcmVhOiBjcmVhdGVET01GYWN0b3J5KCd0ZXh0YXJlYScpLFxuICB0Zm9vdDogY3JlYXRlRE9NRmFjdG9yeSgndGZvb3QnKSxcbiAgdGg6IGNyZWF0ZURPTUZhY3RvcnkoJ3RoJyksXG4gIHRoZWFkOiBjcmVhdGVET01GYWN0b3J5KCd0aGVhZCcpLFxuICB0aW1lOiBjcmVhdGVET01GYWN0b3J5KCd0aW1lJyksXG4gIHRpdGxlOiBjcmVhdGVET01GYWN0b3J5KCd0aXRsZScpLFxuICB0cjogY3JlYXRlRE9NRmFjdG9yeSgndHInKSxcbiAgdHJhY2s6IGNyZWF0ZURPTUZhY3RvcnkoJ3RyYWNrJyksXG4gIHU6IGNyZWF0ZURPTUZhY3RvcnkoJ3UnKSxcbiAgdWw6IGNyZWF0ZURPTUZhY3RvcnkoJ3VsJyksXG4gICd2YXInOiBjcmVhdGVET01GYWN0b3J5KCd2YXInKSxcbiAgdmlkZW86IGNyZWF0ZURPTUZhY3RvcnkoJ3ZpZGVvJyksXG4gIHdicjogY3JlYXRlRE9NRmFjdG9yeSgnd2JyJyksXG5cbiAgLy8gU1ZHXG4gIGNpcmNsZTogY3JlYXRlRE9NRmFjdG9yeSgnY2lyY2xlJyksXG4gIGNsaXBQYXRoOiBjcmVhdGVET01GYWN0b3J5KCdjbGlwUGF0aCcpLFxuICBkZWZzOiBjcmVhdGVET01GYWN0b3J5KCdkZWZzJyksXG4gIGVsbGlwc2U6IGNyZWF0ZURPTUZhY3RvcnkoJ2VsbGlwc2UnKSxcbiAgZzogY3JlYXRlRE9NRmFjdG9yeSgnZycpLFxuICBpbWFnZTogY3JlYXRlRE9NRmFjdG9yeSgnaW1hZ2UnKSxcbiAgbGluZTogY3JlYXRlRE9NRmFjdG9yeSgnbGluZScpLFxuICBsaW5lYXJHcmFkaWVudDogY3JlYXRlRE9NRmFjdG9yeSgnbGluZWFyR3JhZGllbnQnKSxcbiAgbWFzazogY3JlYXRlRE9NRmFjdG9yeSgnbWFzaycpLFxuICBwYXRoOiBjcmVhdGVET01GYWN0b3J5KCdwYXRoJyksXG4gIHBhdHRlcm46IGNyZWF0ZURPTUZhY3RvcnkoJ3BhdHRlcm4nKSxcbiAgcG9seWdvbjogY3JlYXRlRE9NRmFjdG9yeSgncG9seWdvbicpLFxuICBwb2x5bGluZTogY3JlYXRlRE9NRmFjdG9yeSgncG9seWxpbmUnKSxcbiAgcmFkaWFsR3JhZGllbnQ6IGNyZWF0ZURPTUZhY3RvcnkoJ3JhZGlhbEdyYWRpZW50JyksXG4gIHJlY3Q6IGNyZWF0ZURPTUZhY3RvcnkoJ3JlY3QnKSxcbiAgc3RvcDogY3JlYXRlRE9NRmFjdG9yeSgnc3RvcCcpLFxuICBzdmc6IGNyZWF0ZURPTUZhY3RvcnkoJ3N2ZycpLFxuICB0ZXh0OiBjcmVhdGVET01GYWN0b3J5KCd0ZXh0JyksXG4gIHRzcGFuOiBjcmVhdGVET01GYWN0b3J5KCd0c3BhbicpXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0RE9NRmFjdG9yaWVzO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QvbGliL1JlYWN0RE9NRmFjdG9yaWVzLmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUmVhY3RQcm9wVHlwZUxvY2F0aW9uTmFtZXMgPSB7fTtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgUmVhY3RQcm9wVHlwZUxvY2F0aW9uTmFtZXMgPSB7XG4gICAgcHJvcDogJ3Byb3AnLFxuICAgIGNvbnRleHQ6ICdjb250ZXh0JyxcbiAgICBjaGlsZENvbnRleHQ6ICdjaGlsZCBjb250ZXh0J1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0UHJvcFR5cGVMb2NhdGlvbk5hbWVzO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QvbGliL1JlYWN0UHJvcFR5cGVMb2NhdGlvbk5hbWVzLmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIF9yZXF1aXJlID0gcmVxdWlyZSgnLi9SZWFjdEVsZW1lbnQnKSxcbiAgICBpc1ZhbGlkRWxlbWVudCA9IF9yZXF1aXJlLmlzVmFsaWRFbGVtZW50O1xuXG52YXIgZmFjdG9yeSA9IHJlcXVpcmUoJ3Byb3AtdHlwZXMvZmFjdG9yeScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoaXNWYWxpZEVsZW1lbnQpO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QvbGliL1JlYWN0UHJvcFR5cGVzLmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICogXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUmVhY3RQcm9wVHlwZXNTZWNyZXQgPSAnU0VDUkVUX0RPX05PVF9QQVNTX1RISVNfT1JfWU9VX1dJTExfQkVfRklSRUQnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFJlYWN0UHJvcFR5cGVzU2VjcmV0O1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QvbGliL1JlYWN0UHJvcFR5cGVzU2VjcmV0LmpzIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4gQW4gYWRkaXRpb25hbCBncmFudFxuICogb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSAnMTUuNi4xJztcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3JlYWN0L2xpYi9SZWFjdFZlcnNpb24uanMiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgX3Byb2RJbnZhcmlhbnQgPSByZXF1aXJlKCcuL3JlYWN0UHJvZEludmFyaWFudCcpO1xuXG52YXIgUmVhY3RQcm9wVHlwZUxvY2F0aW9uTmFtZXMgPSByZXF1aXJlKCcuL1JlYWN0UHJvcFR5cGVMb2NhdGlvbk5hbWVzJyk7XG52YXIgUmVhY3RQcm9wVHlwZXNTZWNyZXQgPSByZXF1aXJlKCcuL1JlYWN0UHJvcFR5cGVzU2VjcmV0Jyk7XG5cbnZhciBpbnZhcmlhbnQgPSByZXF1aXJlKCdmYmpzL2xpYi9pbnZhcmlhbnQnKTtcbnZhciB3YXJuaW5nID0gcmVxdWlyZSgnZmJqcy9saWIvd2FybmluZycpO1xuXG52YXIgUmVhY3RDb21wb25lbnRUcmVlSG9vaztcblxuaWYgKHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJyAmJiBwcm9jZXNzLmVudiAmJiBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Rlc3QnKSB7XG4gIC8vIFRlbXBvcmFyeSBoYWNrLlxuICAvLyBJbmxpbmUgcmVxdWlyZXMgZG9uJ3Qgd29yayB3ZWxsIHdpdGggSmVzdDpcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy83MjQwXG4gIC8vIFJlbW92ZSB0aGUgaW5saW5lIHJlcXVpcmVzIHdoZW4gd2UgZG9uJ3QgbmVlZCB0aGVtIGFueW1vcmU6XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9wdWxsLzcxNzhcbiAgUmVhY3RDb21wb25lbnRUcmVlSG9vayA9IHJlcXVpcmUoJy4vUmVhY3RDb21wb25lbnRUcmVlSG9vaycpO1xufVxuXG52YXIgbG9nZ2VkVHlwZUZhaWx1cmVzID0ge307XG5cbi8qKlxuICogQXNzZXJ0IHRoYXQgdGhlIHZhbHVlcyBtYXRjaCB3aXRoIHRoZSB0eXBlIHNwZWNzLlxuICogRXJyb3IgbWVzc2FnZXMgYXJlIG1lbW9yaXplZCBhbmQgd2lsbCBvbmx5IGJlIHNob3duIG9uY2UuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IHR5cGVTcGVjcyBNYXAgb2YgbmFtZSB0byBhIFJlYWN0UHJvcFR5cGVcbiAqIEBwYXJhbSB7b2JqZWN0fSB2YWx1ZXMgUnVudGltZSB2YWx1ZXMgdGhhdCBuZWVkIHRvIGJlIHR5cGUtY2hlY2tlZFxuICogQHBhcmFtIHtzdHJpbmd9IGxvY2F0aW9uIGUuZy4gXCJwcm9wXCIsIFwiY29udGV4dFwiLCBcImNoaWxkIGNvbnRleHRcIlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbXBvbmVudE5hbWUgTmFtZSBvZiB0aGUgY29tcG9uZW50IGZvciBlcnJvciBtZXNzYWdlcy5cbiAqIEBwYXJhbSB7P29iamVjdH0gZWxlbWVudCBUaGUgUmVhY3QgZWxlbWVudCB0aGF0IGlzIGJlaW5nIHR5cGUtY2hlY2tlZFxuICogQHBhcmFtIHs/bnVtYmVyfSBkZWJ1Z0lEIFRoZSBSZWFjdCBjb21wb25lbnQgaW5zdGFuY2UgdGhhdCBpcyBiZWluZyB0eXBlLWNoZWNrZWRcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGNoZWNrUmVhY3RUeXBlU3BlYyh0eXBlU3BlY3MsIHZhbHVlcywgbG9jYXRpb24sIGNvbXBvbmVudE5hbWUsIGVsZW1lbnQsIGRlYnVnSUQpIHtcbiAgZm9yICh2YXIgdHlwZVNwZWNOYW1lIGluIHR5cGVTcGVjcykge1xuICAgIGlmICh0eXBlU3BlY3MuaGFzT3duUHJvcGVydHkodHlwZVNwZWNOYW1lKSkge1xuICAgICAgdmFyIGVycm9yO1xuICAgICAgLy8gUHJvcCB0eXBlIHZhbGlkYXRpb24gbWF5IHRocm93LiBJbiBjYXNlIHRoZXkgZG8sIHdlIGRvbid0IHdhbnQgdG9cbiAgICAgIC8vIGZhaWwgdGhlIHJlbmRlciBwaGFzZSB3aGVyZSBpdCBkaWRuJ3QgZmFpbCBiZWZvcmUuIFNvIHdlIGxvZyBpdC5cbiAgICAgIC8vIEFmdGVyIHRoZXNlIGhhdmUgYmVlbiBjbGVhbmVkIHVwLCB3ZSdsbCBsZXQgdGhlbSB0aHJvdy5cbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIFRoaXMgaXMgaW50ZW50aW9uYWxseSBhbiBpbnZhcmlhbnQgdGhhdCBnZXRzIGNhdWdodC4gSXQncyB0aGUgc2FtZVxuICAgICAgICAvLyBiZWhhdmlvciBhcyB3aXRob3V0IHRoaXMgc3RhdGVtZW50IGV4Y2VwdCB3aXRoIGEgYmV0dGVyIG1lc3NhZ2UuXG4gICAgICAgICEodHlwZW9mIHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdID09PSAnZnVuY3Rpb24nKSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICclczogJXMgdHlwZSBgJXNgIGlzIGludmFsaWQ7IGl0IG11c3QgYmUgYSBmdW5jdGlvbiwgdXN1YWxseSBmcm9tIFJlYWN0LlByb3BUeXBlcy4nLCBjb21wb25lbnROYW1lIHx8ICdSZWFjdCBjbGFzcycsIFJlYWN0UHJvcFR5cGVMb2NhdGlvbk5hbWVzW2xvY2F0aW9uXSwgdHlwZVNwZWNOYW1lKSA6IF9wcm9kSW52YXJpYW50KCc4NCcsIGNvbXBvbmVudE5hbWUgfHwgJ1JlYWN0IGNsYXNzJywgUmVhY3RQcm9wVHlwZUxvY2F0aW9uTmFtZXNbbG9jYXRpb25dLCB0eXBlU3BlY05hbWUpIDogdm9pZCAwO1xuICAgICAgICBlcnJvciA9IHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdKHZhbHVlcywgdHlwZVNwZWNOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgbnVsbCwgUmVhY3RQcm9wVHlwZXNTZWNyZXQpO1xuICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgZXJyb3IgPSBleDtcbiAgICAgIH1cbiAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB3YXJuaW5nKCFlcnJvciB8fCBlcnJvciBpbnN0YW5jZW9mIEVycm9yLCAnJXM6IHR5cGUgc3BlY2lmaWNhdGlvbiBvZiAlcyBgJXNgIGlzIGludmFsaWQ7IHRoZSB0eXBlIGNoZWNrZXIgJyArICdmdW5jdGlvbiBtdXN0IHJldHVybiBgbnVsbGAgb3IgYW4gYEVycm9yYCBidXQgcmV0dXJuZWQgYSAlcy4gJyArICdZb3UgbWF5IGhhdmUgZm9yZ290dGVuIHRvIHBhc3MgYW4gYXJndW1lbnQgdG8gdGhlIHR5cGUgY2hlY2tlciAnICsgJ2NyZWF0b3IgKGFycmF5T2YsIGluc3RhbmNlT2YsIG9iamVjdE9mLCBvbmVPZiwgb25lT2ZUeXBlLCBhbmQgJyArICdzaGFwZSBhbGwgcmVxdWlyZSBhbiBhcmd1bWVudCkuJywgY29tcG9uZW50TmFtZSB8fCAnUmVhY3QgY2xhc3MnLCBSZWFjdFByb3BUeXBlTG9jYXRpb25OYW1lc1tsb2NhdGlvbl0sIHR5cGVTcGVjTmFtZSwgdHlwZW9mIGVycm9yKSA6IHZvaWQgMDtcbiAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yICYmICEoZXJyb3IubWVzc2FnZSBpbiBsb2dnZWRUeXBlRmFpbHVyZXMpKSB7XG4gICAgICAgIC8vIE9ubHkgbW9uaXRvciB0aGlzIGZhaWx1cmUgb25jZSBiZWNhdXNlIHRoZXJlIHRlbmRzIHRvIGJlIGEgbG90IG9mIHRoZVxuICAgICAgICAvLyBzYW1lIGVycm9yLlxuICAgICAgICBsb2dnZWRUeXBlRmFpbHVyZXNbZXJyb3IubWVzc2FnZV0gPSB0cnVlO1xuXG4gICAgICAgIHZhciBjb21wb25lbnRTdGFja0luZm8gPSAnJztcblxuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgIGlmICghUmVhY3RDb21wb25lbnRUcmVlSG9vaykge1xuICAgICAgICAgICAgUmVhY3RDb21wb25lbnRUcmVlSG9vayA9IHJlcXVpcmUoJy4vUmVhY3RDb21wb25lbnRUcmVlSG9vaycpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZGVidWdJRCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgY29tcG9uZW50U3RhY2tJbmZvID0gUmVhY3RDb21wb25lbnRUcmVlSG9vay5nZXRTdGFja0FkZGVuZHVtQnlJRChkZWJ1Z0lEKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGVsZW1lbnQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbXBvbmVudFN0YWNrSW5mbyA9IFJlYWN0Q29tcG9uZW50VHJlZUhvb2suZ2V0Q3VycmVudFN0YWNrQWRkZW5kdW0oZWxlbWVudCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcoZmFsc2UsICdGYWlsZWQgJXMgdHlwZTogJXMlcycsIGxvY2F0aW9uLCBlcnJvci5tZXNzYWdlLCBjb21wb25lbnRTdGFja0luZm8pIDogdm9pZCAwO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNoZWNrUmVhY3RUeXBlU3BlYztcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3JlYWN0L2xpYi9jaGVja1JlYWN0VHlwZVNwZWMuanMiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgX3JlcXVpcmUgPSByZXF1aXJlKCcuL1JlYWN0QmFzZUNsYXNzZXMnKSxcbiAgICBDb21wb25lbnQgPSBfcmVxdWlyZS5Db21wb25lbnQ7XG5cbnZhciBfcmVxdWlyZTIgPSByZXF1aXJlKCcuL1JlYWN0RWxlbWVudCcpLFxuICAgIGlzVmFsaWRFbGVtZW50ID0gX3JlcXVpcmUyLmlzVmFsaWRFbGVtZW50O1xuXG52YXIgUmVhY3ROb29wVXBkYXRlUXVldWUgPSByZXF1aXJlKCcuL1JlYWN0Tm9vcFVwZGF0ZVF1ZXVlJyk7XG52YXIgZmFjdG9yeSA9IHJlcXVpcmUoJ2NyZWF0ZS1yZWFjdC1jbGFzcy9mYWN0b3J5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZmFjdG9yeShDb21wb25lbnQsIGlzVmFsaWRFbGVtZW50LCBSZWFjdE5vb3BVcGRhdGVRdWV1ZSk7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWFjdC9saWIvY3JlYXRlQ2xhc3MuanMiLCIvKipcbiAqIENvcHlyaWdodCAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLiBBbiBhZGRpdGlvbmFsIGdyYW50XG4gKiBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqXG4gKiBcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBuZXh0RGVidWdJRCA9IDE7XG5cbmZ1bmN0aW9uIGdldE5leHREZWJ1Z0lEKCkge1xuICByZXR1cm4gbmV4dERlYnVnSUQrKztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXROZXh0RGVidWdJRDtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3JlYWN0L2xpYi9nZXROZXh0RGVidWdJRC5qcyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqL1xuJ3VzZSBzdHJpY3QnO1xuXG52YXIgX3Byb2RJbnZhcmlhbnQgPSByZXF1aXJlKCcuL3JlYWN0UHJvZEludmFyaWFudCcpO1xuXG52YXIgUmVhY3RFbGVtZW50ID0gcmVxdWlyZSgnLi9SZWFjdEVsZW1lbnQnKTtcblxudmFyIGludmFyaWFudCA9IHJlcXVpcmUoJ2ZianMvbGliL2ludmFyaWFudCcpO1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGZpcnN0IGNoaWxkIGluIGEgY29sbGVjdGlvbiBvZiBjaGlsZHJlbiBhbmQgdmVyaWZpZXMgdGhhdCB0aGVyZVxuICogaXMgb25seSBvbmUgY2hpbGQgaW4gdGhlIGNvbGxlY3Rpb24uXG4gKlxuICogU2VlIGh0dHBzOi8vZmFjZWJvb2suZ2l0aHViLmlvL3JlYWN0L2RvY3MvdG9wLWxldmVsLWFwaS5odG1sI3JlYWN0LmNoaWxkcmVuLm9ubHlcbiAqXG4gKiBUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGZ1bmN0aW9uIGFzc3VtZXMgdGhhdCBhIHNpbmdsZSBjaGlsZCBnZXRzXG4gKiBwYXNzZWQgd2l0aG91dCBhIHdyYXBwZXIsIGJ1dCB0aGUgcHVycG9zZSBvZiB0aGlzIGhlbHBlciBmdW5jdGlvbiBpcyB0b1xuICogYWJzdHJhY3QgYXdheSB0aGUgcGFydGljdWxhciBzdHJ1Y3R1cmUgb2YgY2hpbGRyZW4uXG4gKlxuICogQHBhcmFtIHs/b2JqZWN0fSBjaGlsZHJlbiBDaGlsZCBjb2xsZWN0aW9uIHN0cnVjdHVyZS5cbiAqIEByZXR1cm4ge1JlYWN0RWxlbWVudH0gVGhlIGZpcnN0IGFuZCBvbmx5IGBSZWFjdEVsZW1lbnRgIGNvbnRhaW5lZCBpbiB0aGVcbiAqIHN0cnVjdHVyZS5cbiAqL1xuZnVuY3Rpb24gb25seUNoaWxkKGNoaWxkcmVuKSB7XG4gICFSZWFjdEVsZW1lbnQuaXNWYWxpZEVsZW1lbnQoY2hpbGRyZW4pID8gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IGludmFyaWFudChmYWxzZSwgJ1JlYWN0LkNoaWxkcmVuLm9ubHkgZXhwZWN0ZWQgdG8gcmVjZWl2ZSBhIHNpbmdsZSBSZWFjdCBlbGVtZW50IGNoaWxkLicpIDogX3Byb2RJbnZhcmlhbnQoJzE0MycpIDogdm9pZCAwO1xuICByZXR1cm4gY2hpbGRyZW47XG59XG5cbm1vZHVsZS5leHBvcnRzID0gb25seUNoaWxkO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QvbGliL29ubHlDaGlsZC5qcyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuIEFuIGFkZGl0aW9uYWwgZ3JhbnRcbiAqIG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LlxuICpcbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBfcHJvZEludmFyaWFudCA9IHJlcXVpcmUoJy4vcmVhY3RQcm9kSW52YXJpYW50Jyk7XG5cbnZhciBSZWFjdEN1cnJlbnRPd25lciA9IHJlcXVpcmUoJy4vUmVhY3RDdXJyZW50T3duZXInKTtcbnZhciBSRUFDVF9FTEVNRU5UX1RZUEUgPSByZXF1aXJlKCcuL1JlYWN0RWxlbWVudFN5bWJvbCcpO1xuXG52YXIgZ2V0SXRlcmF0b3JGbiA9IHJlcXVpcmUoJy4vZ2V0SXRlcmF0b3JGbicpO1xudmFyIGludmFyaWFudCA9IHJlcXVpcmUoJ2ZianMvbGliL2ludmFyaWFudCcpO1xudmFyIEtleUVzY2FwZVV0aWxzID0gcmVxdWlyZSgnLi9LZXlFc2NhcGVVdGlscycpO1xudmFyIHdhcm5pbmcgPSByZXF1aXJlKCdmYmpzL2xpYi93YXJuaW5nJyk7XG5cbnZhciBTRVBBUkFUT1IgPSAnLic7XG52YXIgU1VCU0VQQVJBVE9SID0gJzonO1xuXG4vKipcbiAqIFRoaXMgaXMgaW5saW5lZCBmcm9tIFJlYWN0RWxlbWVudCBzaW5jZSB0aGlzIGZpbGUgaXMgc2hhcmVkIGJldHdlZW5cbiAqIGlzb21vcnBoaWMgYW5kIHJlbmRlcmVycy4gV2UgY291bGQgZXh0cmFjdCB0aGlzIHRvIGFcbiAqXG4gKi9cblxuLyoqXG4gKiBUT0RPOiBUZXN0IHRoYXQgYSBzaW5nbGUgY2hpbGQgYW5kIGFuIGFycmF5IHdpdGggb25lIGl0ZW0gaGF2ZSB0aGUgc2FtZSBrZXlcbiAqIHBhdHRlcm4uXG4gKi9cblxudmFyIGRpZFdhcm5BYm91dE1hcHMgPSBmYWxzZTtcblxuLyoqXG4gKiBHZW5lcmF0ZSBhIGtleSBzdHJpbmcgdGhhdCBpZGVudGlmaWVzIGEgY29tcG9uZW50IHdpdGhpbiBhIHNldC5cbiAqXG4gKiBAcGFyYW0geyp9IGNvbXBvbmVudCBBIGNvbXBvbmVudCB0aGF0IGNvdWxkIGNvbnRhaW4gYSBtYW51YWwga2V5LlxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IEluZGV4IHRoYXQgaXMgdXNlZCBpZiBhIG1hbnVhbCBrZXkgaXMgbm90IHByb3ZpZGVkLlxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBnZXRDb21wb25lbnRLZXkoY29tcG9uZW50LCBpbmRleCkge1xuICAvLyBEbyBzb21lIHR5cGVjaGVja2luZyBoZXJlIHNpbmNlIHdlIGNhbGwgdGhpcyBibGluZGx5LiBXZSB3YW50IHRvIGVuc3VyZVxuICAvLyB0aGF0IHdlIGRvbid0IGJsb2NrIHBvdGVudGlhbCBmdXR1cmUgRVMgQVBJcy5cbiAgaWYgKGNvbXBvbmVudCAmJiB0eXBlb2YgY29tcG9uZW50ID09PSAnb2JqZWN0JyAmJiBjb21wb25lbnQua2V5ICE9IG51bGwpIHtcbiAgICAvLyBFeHBsaWNpdCBrZXlcbiAgICByZXR1cm4gS2V5RXNjYXBlVXRpbHMuZXNjYXBlKGNvbXBvbmVudC5rZXkpO1xuICB9XG4gIC8vIEltcGxpY2l0IGtleSBkZXRlcm1pbmVkIGJ5IHRoZSBpbmRleCBpbiB0aGUgc2V0XG4gIHJldHVybiBpbmRleC50b1N0cmluZygzNik7XG59XG5cbi8qKlxuICogQHBhcmFtIHs/Kn0gY2hpbGRyZW4gQ2hpbGRyZW4gdHJlZSBjb250YWluZXIuXG4gKiBAcGFyYW0geyFzdHJpbmd9IG5hbWVTb0ZhciBOYW1lIG9mIHRoZSBrZXkgcGF0aCBzbyBmYXIuXG4gKiBAcGFyYW0geyFmdW5jdGlvbn0gY2FsbGJhY2sgQ2FsbGJhY2sgdG8gaW52b2tlIHdpdGggZWFjaCBjaGlsZCBmb3VuZC5cbiAqIEBwYXJhbSB7Pyp9IHRyYXZlcnNlQ29udGV4dCBVc2VkIHRvIHBhc3MgaW5mb3JtYXRpb24gdGhyb3VnaG91dCB0aGUgdHJhdmVyc2FsXG4gKiBwcm9jZXNzLlxuICogQHJldHVybiB7IW51bWJlcn0gVGhlIG51bWJlciBvZiBjaGlsZHJlbiBpbiB0aGlzIHN1YnRyZWUuXG4gKi9cbmZ1bmN0aW9uIHRyYXZlcnNlQWxsQ2hpbGRyZW5JbXBsKGNoaWxkcmVuLCBuYW1lU29GYXIsIGNhbGxiYWNrLCB0cmF2ZXJzZUNvbnRleHQpIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgY2hpbGRyZW47XG5cbiAgaWYgKHR5cGUgPT09ICd1bmRlZmluZWQnIHx8IHR5cGUgPT09ICdib29sZWFuJykge1xuICAgIC8vIEFsbCBvZiB0aGUgYWJvdmUgYXJlIHBlcmNlaXZlZCBhcyBudWxsLlxuICAgIGNoaWxkcmVuID0gbnVsbDtcbiAgfVxuXG4gIGlmIChjaGlsZHJlbiA9PT0gbnVsbCB8fCB0eXBlID09PSAnc3RyaW5nJyB8fCB0eXBlID09PSAnbnVtYmVyJyB8fFxuICAvLyBUaGUgZm9sbG93aW5nIGlzIGlubGluZWQgZnJvbSBSZWFjdEVsZW1lbnQuIFRoaXMgbWVhbnMgd2UgY2FuIG9wdGltaXplXG4gIC8vIHNvbWUgY2hlY2tzLiBSZWFjdCBGaWJlciBhbHNvIGlubGluZXMgdGhpcyBsb2dpYyBmb3Igc2ltaWxhciBwdXJwb3Nlcy5cbiAgdHlwZSA9PT0gJ29iamVjdCcgJiYgY2hpbGRyZW4uJCR0eXBlb2YgPT09IFJFQUNUX0VMRU1FTlRfVFlQRSkge1xuICAgIGNhbGxiYWNrKHRyYXZlcnNlQ29udGV4dCwgY2hpbGRyZW4sXG4gICAgLy8gSWYgaXQncyB0aGUgb25seSBjaGlsZCwgdHJlYXQgdGhlIG5hbWUgYXMgaWYgaXQgd2FzIHdyYXBwZWQgaW4gYW4gYXJyYXlcbiAgICAvLyBzbyB0aGF0IGl0J3MgY29uc2lzdGVudCBpZiB0aGUgbnVtYmVyIG9mIGNoaWxkcmVuIGdyb3dzLlxuICAgIG5hbWVTb0ZhciA9PT0gJycgPyBTRVBBUkFUT1IgKyBnZXRDb21wb25lbnRLZXkoY2hpbGRyZW4sIDApIDogbmFtZVNvRmFyKTtcbiAgICByZXR1cm4gMTtcbiAgfVxuXG4gIHZhciBjaGlsZDtcbiAgdmFyIG5leHROYW1lO1xuICB2YXIgc3VidHJlZUNvdW50ID0gMDsgLy8gQ291bnQgb2YgY2hpbGRyZW4gZm91bmQgaW4gdGhlIGN1cnJlbnQgc3VidHJlZS5cbiAgdmFyIG5leHROYW1lUHJlZml4ID0gbmFtZVNvRmFyID09PSAnJyA/IFNFUEFSQVRPUiA6IG5hbWVTb0ZhciArIFNVQlNFUEFSQVRPUjtcblxuICBpZiAoQXJyYXkuaXNBcnJheShjaGlsZHJlbikpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjaGlsZCA9IGNoaWxkcmVuW2ldO1xuICAgICAgbmV4dE5hbWUgPSBuZXh0TmFtZVByZWZpeCArIGdldENvbXBvbmVudEtleShjaGlsZCwgaSk7XG4gICAgICBzdWJ0cmVlQ291bnQgKz0gdHJhdmVyc2VBbGxDaGlsZHJlbkltcGwoY2hpbGQsIG5leHROYW1lLCBjYWxsYmFjaywgdHJhdmVyc2VDb250ZXh0KTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFyIGl0ZXJhdG9yRm4gPSBnZXRJdGVyYXRvckZuKGNoaWxkcmVuKTtcbiAgICBpZiAoaXRlcmF0b3JGbikge1xuICAgICAgdmFyIGl0ZXJhdG9yID0gaXRlcmF0b3JGbi5jYWxsKGNoaWxkcmVuKTtcbiAgICAgIHZhciBzdGVwO1xuICAgICAgaWYgKGl0ZXJhdG9yRm4gIT09IGNoaWxkcmVuLmVudHJpZXMpIHtcbiAgICAgICAgdmFyIGlpID0gMDtcbiAgICAgICAgd2hpbGUgKCEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZSkge1xuICAgICAgICAgIGNoaWxkID0gc3RlcC52YWx1ZTtcbiAgICAgICAgICBuZXh0TmFtZSA9IG5leHROYW1lUHJlZml4ICsgZ2V0Q29tcG9uZW50S2V5KGNoaWxkLCBpaSsrKTtcbiAgICAgICAgICBzdWJ0cmVlQ291bnQgKz0gdHJhdmVyc2VBbGxDaGlsZHJlbkltcGwoY2hpbGQsIG5leHROYW1lLCBjYWxsYmFjaywgdHJhdmVyc2VDb250ZXh0KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICB2YXIgbWFwc0FzQ2hpbGRyZW5BZGRlbmR1bSA9ICcnO1xuICAgICAgICAgIGlmIChSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50KSB7XG4gICAgICAgICAgICB2YXIgbWFwc0FzQ2hpbGRyZW5Pd25lck5hbWUgPSBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50LmdldE5hbWUoKTtcbiAgICAgICAgICAgIGlmIChtYXBzQXNDaGlsZHJlbk93bmVyTmFtZSkge1xuICAgICAgICAgICAgICBtYXBzQXNDaGlsZHJlbkFkZGVuZHVtID0gJyBDaGVjayB0aGUgcmVuZGVyIG1ldGhvZCBvZiBgJyArIG1hcHNBc0NoaWxkcmVuT3duZXJOYW1lICsgJ2AuJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHdhcm5pbmcoZGlkV2FybkFib3V0TWFwcywgJ1VzaW5nIE1hcHMgYXMgY2hpbGRyZW4gaXMgbm90IHlldCBmdWxseSBzdXBwb3J0ZWQuIEl0IGlzIGFuICcgKyAnZXhwZXJpbWVudGFsIGZlYXR1cmUgdGhhdCBtaWdodCBiZSByZW1vdmVkLiBDb252ZXJ0IGl0IHRvIGEgJyArICdzZXF1ZW5jZSAvIGl0ZXJhYmxlIG9mIGtleWVkIFJlYWN0RWxlbWVudHMgaW5zdGVhZC4lcycsIG1hcHNBc0NoaWxkcmVuQWRkZW5kdW0pIDogdm9pZCAwO1xuICAgICAgICAgIGRpZFdhcm5BYm91dE1hcHMgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIC8vIEl0ZXJhdG9yIHdpbGwgcHJvdmlkZSBlbnRyeSBbayx2XSB0dXBsZXMgcmF0aGVyIHRoYW4gdmFsdWVzLlxuICAgICAgICB3aGlsZSAoIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lKSB7XG4gICAgICAgICAgdmFyIGVudHJ5ID0gc3RlcC52YWx1ZTtcbiAgICAgICAgICBpZiAoZW50cnkpIHtcbiAgICAgICAgICAgIGNoaWxkID0gZW50cnlbMV07XG4gICAgICAgICAgICBuZXh0TmFtZSA9IG5leHROYW1lUHJlZml4ICsgS2V5RXNjYXBlVXRpbHMuZXNjYXBlKGVudHJ5WzBdKSArIFNVQlNFUEFSQVRPUiArIGdldENvbXBvbmVudEtleShjaGlsZCwgMCk7XG4gICAgICAgICAgICBzdWJ0cmVlQ291bnQgKz0gdHJhdmVyc2VBbGxDaGlsZHJlbkltcGwoY2hpbGQsIG5leHROYW1lLCBjYWxsYmFjaywgdHJhdmVyc2VDb250ZXh0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgICB2YXIgYWRkZW5kdW0gPSAnJztcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGFkZGVuZHVtID0gJyBJZiB5b3UgbWVhbnQgdG8gcmVuZGVyIGEgY29sbGVjdGlvbiBvZiBjaGlsZHJlbiwgdXNlIGFuIGFycmF5ICcgKyAnaW5zdGVhZCBvciB3cmFwIHRoZSBvYmplY3QgdXNpbmcgY3JlYXRlRnJhZ21lbnQob2JqZWN0KSBmcm9tIHRoZSAnICsgJ1JlYWN0IGFkZC1vbnMuJztcbiAgICAgICAgaWYgKGNoaWxkcmVuLl9pc1JlYWN0RWxlbWVudCkge1xuICAgICAgICAgIGFkZGVuZHVtID0gXCIgSXQgbG9va3MgbGlrZSB5b3UncmUgdXNpbmcgYW4gZWxlbWVudCBjcmVhdGVkIGJ5IGEgZGlmZmVyZW50IFwiICsgJ3ZlcnNpb24gb2YgUmVhY3QuIE1ha2Ugc3VyZSB0byB1c2Ugb25seSBvbmUgY29weSBvZiBSZWFjdC4nO1xuICAgICAgICB9XG4gICAgICAgIGlmIChSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50KSB7XG4gICAgICAgICAgdmFyIG5hbWUgPSBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50LmdldE5hbWUoKTtcbiAgICAgICAgICBpZiAobmFtZSkge1xuICAgICAgICAgICAgYWRkZW5kdW0gKz0gJyBDaGVjayB0aGUgcmVuZGVyIG1ldGhvZCBvZiBgJyArIG5hbWUgKyAnYC4nO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdmFyIGNoaWxkcmVuU3RyaW5nID0gU3RyaW5nKGNoaWxkcmVuKTtcbiAgICAgICFmYWxzZSA/IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyBpbnZhcmlhbnQoZmFsc2UsICdPYmplY3RzIGFyZSBub3QgdmFsaWQgYXMgYSBSZWFjdCBjaGlsZCAoZm91bmQ6ICVzKS4lcycsIGNoaWxkcmVuU3RyaW5nID09PSAnW29iamVjdCBPYmplY3RdJyA/ICdvYmplY3Qgd2l0aCBrZXlzIHsnICsgT2JqZWN0LmtleXMoY2hpbGRyZW4pLmpvaW4oJywgJykgKyAnfScgOiBjaGlsZHJlblN0cmluZywgYWRkZW5kdW0pIDogX3Byb2RJbnZhcmlhbnQoJzMxJywgY2hpbGRyZW5TdHJpbmcgPT09ICdbb2JqZWN0IE9iamVjdF0nID8gJ29iamVjdCB3aXRoIGtleXMgeycgKyBPYmplY3Qua2V5cyhjaGlsZHJlbikuam9pbignLCAnKSArICd9JyA6IGNoaWxkcmVuU3RyaW5nLCBhZGRlbmR1bSkgOiB2b2lkIDA7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN1YnRyZWVDb3VudDtcbn1cblxuLyoqXG4gKiBUcmF2ZXJzZXMgY2hpbGRyZW4gdGhhdCBhcmUgdHlwaWNhbGx5IHNwZWNpZmllZCBhcyBgcHJvcHMuY2hpbGRyZW5gLCBidXRcbiAqIG1pZ2h0IGFsc28gYmUgc3BlY2lmaWVkIHRocm91Z2ggYXR0cmlidXRlczpcbiAqXG4gKiAtIGB0cmF2ZXJzZUFsbENoaWxkcmVuKHRoaXMucHJvcHMuY2hpbGRyZW4sIC4uLilgXG4gKiAtIGB0cmF2ZXJzZUFsbENoaWxkcmVuKHRoaXMucHJvcHMubGVmdFBhbmVsQ2hpbGRyZW4sIC4uLilgXG4gKlxuICogVGhlIGB0cmF2ZXJzZUNvbnRleHRgIGlzIGFuIG9wdGlvbmFsIGFyZ3VtZW50IHRoYXQgaXMgcGFzc2VkIHRocm91Z2ggdGhlXG4gKiBlbnRpcmUgdHJhdmVyc2FsLiBJdCBjYW4gYmUgdXNlZCB0byBzdG9yZSBhY2N1bXVsYXRpb25zIG9yIGFueXRoaW5nIGVsc2UgdGhhdFxuICogdGhlIGNhbGxiYWNrIG1pZ2h0IGZpbmQgcmVsZXZhbnQuXG4gKlxuICogQHBhcmFtIHs/Kn0gY2hpbGRyZW4gQ2hpbGRyZW4gdHJlZSBvYmplY3QuXG4gKiBAcGFyYW0geyFmdW5jdGlvbn0gY2FsbGJhY2sgVG8gaW52b2tlIHVwb24gdHJhdmVyc2luZyBlYWNoIGNoaWxkLlxuICogQHBhcmFtIHs/Kn0gdHJhdmVyc2VDb250ZXh0IENvbnRleHQgZm9yIHRyYXZlcnNhbC5cbiAqIEByZXR1cm4geyFudW1iZXJ9IFRoZSBudW1iZXIgb2YgY2hpbGRyZW4gaW4gdGhpcyBzdWJ0cmVlLlxuICovXG5mdW5jdGlvbiB0cmF2ZXJzZUFsbENoaWxkcmVuKGNoaWxkcmVuLCBjYWxsYmFjaywgdHJhdmVyc2VDb250ZXh0KSB7XG4gIGlmIChjaGlsZHJlbiA9PSBudWxsKSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICByZXR1cm4gdHJhdmVyc2VBbGxDaGlsZHJlbkltcGwoY2hpbGRyZW4sICcnLCBjYWxsYmFjaywgdHJhdmVyc2VDb250ZXh0KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0cmF2ZXJzZUFsbENoaWxkcmVuO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL34vcmVhY3QvbGliL3RyYXZlcnNlQWxsQ2hpbGRyZW4uanMiLCJ2YXIgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9O1xuXG5pbXBvcnQgY29tcG9zZSBmcm9tICcuL2NvbXBvc2UnO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBzdG9yZSBlbmhhbmNlciB0aGF0IGFwcGxpZXMgbWlkZGxld2FyZSB0byB0aGUgZGlzcGF0Y2ggbWV0aG9kXG4gKiBvZiB0aGUgUmVkdXggc3RvcmUuIFRoaXMgaXMgaGFuZHkgZm9yIGEgdmFyaWV0eSBvZiB0YXNrcywgc3VjaCBhcyBleHByZXNzaW5nXG4gKiBhc3luY2hyb25vdXMgYWN0aW9ucyBpbiBhIGNvbmNpc2UgbWFubmVyLCBvciBsb2dnaW5nIGV2ZXJ5IGFjdGlvbiBwYXlsb2FkLlxuICpcbiAqIFNlZSBgcmVkdXgtdGh1bmtgIHBhY2thZ2UgYXMgYW4gZXhhbXBsZSBvZiB0aGUgUmVkdXggbWlkZGxld2FyZS5cbiAqXG4gKiBCZWNhdXNlIG1pZGRsZXdhcmUgaXMgcG90ZW50aWFsbHkgYXN5bmNocm9ub3VzLCB0aGlzIHNob3VsZCBiZSB0aGUgZmlyc3RcbiAqIHN0b3JlIGVuaGFuY2VyIGluIHRoZSBjb21wb3NpdGlvbiBjaGFpbi5cbiAqXG4gKiBOb3RlIHRoYXQgZWFjaCBtaWRkbGV3YXJlIHdpbGwgYmUgZ2l2ZW4gdGhlIGBkaXNwYXRjaGAgYW5kIGBnZXRTdGF0ZWAgZnVuY3Rpb25zXG4gKiBhcyBuYW1lZCBhcmd1bWVudHMuXG4gKlxuICogQHBhcmFtIHsuLi5GdW5jdGlvbn0gbWlkZGxld2FyZXMgVGhlIG1pZGRsZXdhcmUgY2hhaW4gdG8gYmUgYXBwbGllZC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gQSBzdG9yZSBlbmhhbmNlciBhcHBseWluZyB0aGUgbWlkZGxld2FyZS5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYXBwbHlNaWRkbGV3YXJlKCkge1xuICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgbWlkZGxld2FyZXMgPSBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICBtaWRkbGV3YXJlc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAoY3JlYXRlU3RvcmUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHJlZHVjZXIsIHByZWxvYWRlZFN0YXRlLCBlbmhhbmNlcikge1xuICAgICAgdmFyIHN0b3JlID0gY3JlYXRlU3RvcmUocmVkdWNlciwgcHJlbG9hZGVkU3RhdGUsIGVuaGFuY2VyKTtcbiAgICAgIHZhciBfZGlzcGF0Y2ggPSBzdG9yZS5kaXNwYXRjaDtcbiAgICAgIHZhciBjaGFpbiA9IFtdO1xuXG4gICAgICB2YXIgbWlkZGxld2FyZUFQSSA9IHtcbiAgICAgICAgZ2V0U3RhdGU6IHN0b3JlLmdldFN0YXRlLFxuICAgICAgICBkaXNwYXRjaDogZnVuY3Rpb24gZGlzcGF0Y2goYWN0aW9uKSB7XG4gICAgICAgICAgcmV0dXJuIF9kaXNwYXRjaChhY3Rpb24pO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY2hhaW4gPSBtaWRkbGV3YXJlcy5tYXAoZnVuY3Rpb24gKG1pZGRsZXdhcmUpIHtcbiAgICAgICAgcmV0dXJuIG1pZGRsZXdhcmUobWlkZGxld2FyZUFQSSk7XG4gICAgICB9KTtcbiAgICAgIF9kaXNwYXRjaCA9IGNvbXBvc2UuYXBwbHkodW5kZWZpbmVkLCBjaGFpbikoc3RvcmUuZGlzcGF0Y2gpO1xuXG4gICAgICByZXR1cm4gX2V4dGVuZHMoe30sIHN0b3JlLCB7XG4gICAgICAgIGRpc3BhdGNoOiBfZGlzcGF0Y2hcbiAgICAgIH0pO1xuICAgIH07XG4gIH07XG59XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZWR1eC9lcy9hcHBseU1pZGRsZXdhcmUuanMiLCJmdW5jdGlvbiBiaW5kQWN0aW9uQ3JlYXRvcihhY3Rpb25DcmVhdG9yLCBkaXNwYXRjaCkge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBkaXNwYXRjaChhY3Rpb25DcmVhdG9yLmFwcGx5KHVuZGVmaW5lZCwgYXJndW1lbnRzKSk7XG4gIH07XG59XG5cbi8qKlxuICogVHVybnMgYW4gb2JqZWN0IHdob3NlIHZhbHVlcyBhcmUgYWN0aW9uIGNyZWF0b3JzLCBpbnRvIGFuIG9iamVjdCB3aXRoIHRoZVxuICogc2FtZSBrZXlzLCBidXQgd2l0aCBldmVyeSBmdW5jdGlvbiB3cmFwcGVkIGludG8gYSBgZGlzcGF0Y2hgIGNhbGwgc28gdGhleVxuICogbWF5IGJlIGludm9rZWQgZGlyZWN0bHkuIFRoaXMgaXMganVzdCBhIGNvbnZlbmllbmNlIG1ldGhvZCwgYXMgeW91IGNhbiBjYWxsXG4gKiBgc3RvcmUuZGlzcGF0Y2goTXlBY3Rpb25DcmVhdG9ycy5kb1NvbWV0aGluZygpKWAgeW91cnNlbGYganVzdCBmaW5lLlxuICpcbiAqIEZvciBjb252ZW5pZW5jZSwgeW91IGNhbiBhbHNvIHBhc3MgYSBzaW5nbGUgZnVuY3Rpb24gYXMgdGhlIGZpcnN0IGFyZ3VtZW50LFxuICogYW5kIGdldCBhIGZ1bmN0aW9uIGluIHJldHVybi5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufE9iamVjdH0gYWN0aW9uQ3JlYXRvcnMgQW4gb2JqZWN0IHdob3NlIHZhbHVlcyBhcmUgYWN0aW9uXG4gKiBjcmVhdG9yIGZ1bmN0aW9ucy4gT25lIGhhbmR5IHdheSB0byBvYnRhaW4gaXQgaXMgdG8gdXNlIEVTNiBgaW1wb3J0ICogYXNgXG4gKiBzeW50YXguIFlvdSBtYXkgYWxzbyBwYXNzIGEgc2luZ2xlIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGRpc3BhdGNoIFRoZSBgZGlzcGF0Y2hgIGZ1bmN0aW9uIGF2YWlsYWJsZSBvbiB5b3VyIFJlZHV4XG4gKiBzdG9yZS5cbiAqXG4gKiBAcmV0dXJucyB7RnVuY3Rpb258T2JqZWN0fSBUaGUgb2JqZWN0IG1pbWlja2luZyB0aGUgb3JpZ2luYWwgb2JqZWN0LCBidXQgd2l0aFxuICogZXZlcnkgYWN0aW9uIGNyZWF0b3Igd3JhcHBlZCBpbnRvIHRoZSBgZGlzcGF0Y2hgIGNhbGwuIElmIHlvdSBwYXNzZWQgYVxuICogZnVuY3Rpb24gYXMgYGFjdGlvbkNyZWF0b3JzYCwgdGhlIHJldHVybiB2YWx1ZSB3aWxsIGFsc28gYmUgYSBzaW5nbGVcbiAqIGZ1bmN0aW9uLlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBiaW5kQWN0aW9uQ3JlYXRvcnMoYWN0aW9uQ3JlYXRvcnMsIGRpc3BhdGNoKSB7XG4gIGlmICh0eXBlb2YgYWN0aW9uQ3JlYXRvcnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gYmluZEFjdGlvbkNyZWF0b3IoYWN0aW9uQ3JlYXRvcnMsIGRpc3BhdGNoKTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgYWN0aW9uQ3JlYXRvcnMgIT09ICdvYmplY3QnIHx8IGFjdGlvbkNyZWF0b3JzID09PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdiaW5kQWN0aW9uQ3JlYXRvcnMgZXhwZWN0ZWQgYW4gb2JqZWN0IG9yIGEgZnVuY3Rpb24sIGluc3RlYWQgcmVjZWl2ZWQgJyArIChhY3Rpb25DcmVhdG9ycyA9PT0gbnVsbCA/ICdudWxsJyA6IHR5cGVvZiBhY3Rpb25DcmVhdG9ycykgKyAnLiAnICsgJ0RpZCB5b3Ugd3JpdGUgXCJpbXBvcnQgQWN0aW9uQ3JlYXRvcnMgZnJvbVwiIGluc3RlYWQgb2YgXCJpbXBvcnQgKiBhcyBBY3Rpb25DcmVhdG9ycyBmcm9tXCI/Jyk7XG4gIH1cblxuICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKGFjdGlvbkNyZWF0b3JzKTtcbiAgdmFyIGJvdW5kQWN0aW9uQ3JlYXRvcnMgPSB7fTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGtleSA9IGtleXNbaV07XG4gICAgdmFyIGFjdGlvbkNyZWF0b3IgPSBhY3Rpb25DcmVhdG9yc1trZXldO1xuICAgIGlmICh0eXBlb2YgYWN0aW9uQ3JlYXRvciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgYm91bmRBY3Rpb25DcmVhdG9yc1trZXldID0gYmluZEFjdGlvbkNyZWF0b3IoYWN0aW9uQ3JlYXRvciwgZGlzcGF0Y2gpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gYm91bmRBY3Rpb25DcmVhdG9ycztcbn1cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3JlZHV4L2VzL2JpbmRBY3Rpb25DcmVhdG9ycy5qcyIsImltcG9ydCB7IEFjdGlvblR5cGVzIH0gZnJvbSAnLi9jcmVhdGVTdG9yZSc7XG5pbXBvcnQgaXNQbGFpbk9iamVjdCBmcm9tICdsb2Rhc2gtZXMvaXNQbGFpbk9iamVjdCc7XG5pbXBvcnQgd2FybmluZyBmcm9tICcuL3V0aWxzL3dhcm5pbmcnO1xuXG5mdW5jdGlvbiBnZXRVbmRlZmluZWRTdGF0ZUVycm9yTWVzc2FnZShrZXksIGFjdGlvbikge1xuICB2YXIgYWN0aW9uVHlwZSA9IGFjdGlvbiAmJiBhY3Rpb24udHlwZTtcbiAgdmFyIGFjdGlvbk5hbWUgPSBhY3Rpb25UeXBlICYmICdcIicgKyBhY3Rpb25UeXBlLnRvU3RyaW5nKCkgKyAnXCInIHx8ICdhbiBhY3Rpb24nO1xuXG4gIHJldHVybiAnR2l2ZW4gYWN0aW9uICcgKyBhY3Rpb25OYW1lICsgJywgcmVkdWNlciBcIicgKyBrZXkgKyAnXCIgcmV0dXJuZWQgdW5kZWZpbmVkLiAnICsgJ1RvIGlnbm9yZSBhbiBhY3Rpb24sIHlvdSBtdXN0IGV4cGxpY2l0bHkgcmV0dXJuIHRoZSBwcmV2aW91cyBzdGF0ZS4nO1xufVxuXG5mdW5jdGlvbiBnZXRVbmV4cGVjdGVkU3RhdGVTaGFwZVdhcm5pbmdNZXNzYWdlKGlucHV0U3RhdGUsIHJlZHVjZXJzLCBhY3Rpb24sIHVuZXhwZWN0ZWRLZXlDYWNoZSkge1xuICB2YXIgcmVkdWNlcktleXMgPSBPYmplY3Qua2V5cyhyZWR1Y2Vycyk7XG4gIHZhciBhcmd1bWVudE5hbWUgPSBhY3Rpb24gJiYgYWN0aW9uLnR5cGUgPT09IEFjdGlvblR5cGVzLklOSVQgPyAncHJlbG9hZGVkU3RhdGUgYXJndW1lbnQgcGFzc2VkIHRvIGNyZWF0ZVN0b3JlJyA6ICdwcmV2aW91cyBzdGF0ZSByZWNlaXZlZCBieSB0aGUgcmVkdWNlcic7XG5cbiAgaWYgKHJlZHVjZXJLZXlzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiAnU3RvcmUgZG9lcyBub3QgaGF2ZSBhIHZhbGlkIHJlZHVjZXIuIE1ha2Ugc3VyZSB0aGUgYXJndW1lbnQgcGFzc2VkICcgKyAndG8gY29tYmluZVJlZHVjZXJzIGlzIGFuIG9iamVjdCB3aG9zZSB2YWx1ZXMgYXJlIHJlZHVjZXJzLic7XG4gIH1cblxuICBpZiAoIWlzUGxhaW5PYmplY3QoaW5wdXRTdGF0ZSkpIHtcbiAgICByZXR1cm4gJ1RoZSAnICsgYXJndW1lbnROYW1lICsgJyBoYXMgdW5leHBlY3RlZCB0eXBlIG9mIFwiJyArIHt9LnRvU3RyaW5nLmNhbGwoaW5wdXRTdGF0ZSkubWF0Y2goL1xccyhbYS16fEEtWl0rKS8pWzFdICsgJ1wiLiBFeHBlY3RlZCBhcmd1bWVudCB0byBiZSBhbiBvYmplY3Qgd2l0aCB0aGUgZm9sbG93aW5nICcgKyAoJ2tleXM6IFwiJyArIHJlZHVjZXJLZXlzLmpvaW4oJ1wiLCBcIicpICsgJ1wiJyk7XG4gIH1cblxuICB2YXIgdW5leHBlY3RlZEtleXMgPSBPYmplY3Qua2V5cyhpbnB1dFN0YXRlKS5maWx0ZXIoZnVuY3Rpb24gKGtleSkge1xuICAgIHJldHVybiAhcmVkdWNlcnMuaGFzT3duUHJvcGVydHkoa2V5KSAmJiAhdW5leHBlY3RlZEtleUNhY2hlW2tleV07XG4gIH0pO1xuXG4gIHVuZXhwZWN0ZWRLZXlzLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgIHVuZXhwZWN0ZWRLZXlDYWNoZVtrZXldID0gdHJ1ZTtcbiAgfSk7XG5cbiAgaWYgKHVuZXhwZWN0ZWRLZXlzLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gJ1VuZXhwZWN0ZWQgJyArICh1bmV4cGVjdGVkS2V5cy5sZW5ndGggPiAxID8gJ2tleXMnIDogJ2tleScpICsgJyAnICsgKCdcIicgKyB1bmV4cGVjdGVkS2V5cy5qb2luKCdcIiwgXCInKSArICdcIiBmb3VuZCBpbiAnICsgYXJndW1lbnROYW1lICsgJy4gJykgKyAnRXhwZWN0ZWQgdG8gZmluZCBvbmUgb2YgdGhlIGtub3duIHJlZHVjZXIga2V5cyBpbnN0ZWFkOiAnICsgKCdcIicgKyByZWR1Y2VyS2V5cy5qb2luKCdcIiwgXCInKSArICdcIi4gVW5leHBlY3RlZCBrZXlzIHdpbGwgYmUgaWdub3JlZC4nKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBhc3NlcnRSZWR1Y2VyU2FuaXR5KHJlZHVjZXJzKSB7XG4gIE9iamVjdC5rZXlzKHJlZHVjZXJzKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICB2YXIgcmVkdWNlciA9IHJlZHVjZXJzW2tleV07XG4gICAgdmFyIGluaXRpYWxTdGF0ZSA9IHJlZHVjZXIodW5kZWZpbmVkLCB7IHR5cGU6IEFjdGlvblR5cGVzLklOSVQgfSk7XG5cbiAgICBpZiAodHlwZW9mIGluaXRpYWxTdGF0ZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUmVkdWNlciBcIicgKyBrZXkgKyAnXCIgcmV0dXJuZWQgdW5kZWZpbmVkIGR1cmluZyBpbml0aWFsaXphdGlvbi4gJyArICdJZiB0aGUgc3RhdGUgcGFzc2VkIHRvIHRoZSByZWR1Y2VyIGlzIHVuZGVmaW5lZCwgeW91IG11c3QgJyArICdleHBsaWNpdGx5IHJldHVybiB0aGUgaW5pdGlhbCBzdGF0ZS4gVGhlIGluaXRpYWwgc3RhdGUgbWF5ICcgKyAnbm90IGJlIHVuZGVmaW5lZC4nKTtcbiAgICB9XG5cbiAgICB2YXIgdHlwZSA9ICdAQHJlZHV4L1BST0JFX1VOS05PV05fQUNUSU9OXycgKyBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoNykuc3BsaXQoJycpLmpvaW4oJy4nKTtcbiAgICBpZiAodHlwZW9mIHJlZHVjZXIodW5kZWZpbmVkLCB7IHR5cGU6IHR5cGUgfSkgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlZHVjZXIgXCInICsga2V5ICsgJ1wiIHJldHVybmVkIHVuZGVmaW5lZCB3aGVuIHByb2JlZCB3aXRoIGEgcmFuZG9tIHR5cGUuICcgKyAoJ0RvblxcJ3QgdHJ5IHRvIGhhbmRsZSAnICsgQWN0aW9uVHlwZXMuSU5JVCArICcgb3Igb3RoZXIgYWN0aW9ucyBpbiBcInJlZHV4LypcIiAnKSArICduYW1lc3BhY2UuIFRoZXkgYXJlIGNvbnNpZGVyZWQgcHJpdmF0ZS4gSW5zdGVhZCwgeW91IG11c3QgcmV0dXJuIHRoZSAnICsgJ2N1cnJlbnQgc3RhdGUgZm9yIGFueSB1bmtub3duIGFjdGlvbnMsIHVubGVzcyBpdCBpcyB1bmRlZmluZWQsICcgKyAnaW4gd2hpY2ggY2FzZSB5b3UgbXVzdCByZXR1cm4gdGhlIGluaXRpYWwgc3RhdGUsIHJlZ2FyZGxlc3Mgb2YgdGhlICcgKyAnYWN0aW9uIHR5cGUuIFRoZSBpbml0aWFsIHN0YXRlIG1heSBub3QgYmUgdW5kZWZpbmVkLicpO1xuICAgIH1cbiAgfSk7XG59XG5cbi8qKlxuICogVHVybnMgYW4gb2JqZWN0IHdob3NlIHZhbHVlcyBhcmUgZGlmZmVyZW50IHJlZHVjZXIgZnVuY3Rpb25zLCBpbnRvIGEgc2luZ2xlXG4gKiByZWR1Y2VyIGZ1bmN0aW9uLiBJdCB3aWxsIGNhbGwgZXZlcnkgY2hpbGQgcmVkdWNlciwgYW5kIGdhdGhlciB0aGVpciByZXN1bHRzXG4gKiBpbnRvIGEgc2luZ2xlIHN0YXRlIG9iamVjdCwgd2hvc2Uga2V5cyBjb3JyZXNwb25kIHRvIHRoZSBrZXlzIG9mIHRoZSBwYXNzZWRcbiAqIHJlZHVjZXIgZnVuY3Rpb25zLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSByZWR1Y2VycyBBbiBvYmplY3Qgd2hvc2UgdmFsdWVzIGNvcnJlc3BvbmQgdG8gZGlmZmVyZW50XG4gKiByZWR1Y2VyIGZ1bmN0aW9ucyB0aGF0IG5lZWQgdG8gYmUgY29tYmluZWQgaW50byBvbmUuIE9uZSBoYW5keSB3YXkgdG8gb2J0YWluXG4gKiBpdCBpcyB0byB1c2UgRVM2IGBpbXBvcnQgKiBhcyByZWR1Y2Vyc2Agc3ludGF4LiBUaGUgcmVkdWNlcnMgbWF5IG5ldmVyIHJldHVyblxuICogdW5kZWZpbmVkIGZvciBhbnkgYWN0aW9uLiBJbnN0ZWFkLCB0aGV5IHNob3VsZCByZXR1cm4gdGhlaXIgaW5pdGlhbCBzdGF0ZVxuICogaWYgdGhlIHN0YXRlIHBhc3NlZCB0byB0aGVtIHdhcyB1bmRlZmluZWQsIGFuZCB0aGUgY3VycmVudCBzdGF0ZSBmb3IgYW55XG4gKiB1bnJlY29nbml6ZWQgYWN0aW9uLlxuICpcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gQSByZWR1Y2VyIGZ1bmN0aW9uIHRoYXQgaW52b2tlcyBldmVyeSByZWR1Y2VyIGluc2lkZSB0aGVcbiAqIHBhc3NlZCBvYmplY3QsIGFuZCBidWlsZHMgYSBzdGF0ZSBvYmplY3Qgd2l0aCB0aGUgc2FtZSBzaGFwZS5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY29tYmluZVJlZHVjZXJzKHJlZHVjZXJzKSB7XG4gIHZhciByZWR1Y2VyS2V5cyA9IE9iamVjdC5rZXlzKHJlZHVjZXJzKTtcbiAgdmFyIGZpbmFsUmVkdWNlcnMgPSB7fTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCByZWR1Y2VyS2V5cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBrZXkgPSByZWR1Y2VyS2V5c1tpXTtcblxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBpZiAodHlwZW9mIHJlZHVjZXJzW2tleV0gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHdhcm5pbmcoJ05vIHJlZHVjZXIgcHJvdmlkZWQgZm9yIGtleSBcIicgKyBrZXkgKyAnXCInKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHJlZHVjZXJzW2tleV0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGZpbmFsUmVkdWNlcnNba2V5XSA9IHJlZHVjZXJzW2tleV07XG4gICAgfVxuICB9XG4gIHZhciBmaW5hbFJlZHVjZXJLZXlzID0gT2JqZWN0LmtleXMoZmluYWxSZWR1Y2Vycyk7XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICB2YXIgdW5leHBlY3RlZEtleUNhY2hlID0ge307XG4gIH1cblxuICB2YXIgc2FuaXR5RXJyb3I7XG4gIHRyeSB7XG4gICAgYXNzZXJ0UmVkdWNlclNhbml0eShmaW5hbFJlZHVjZXJzKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHNhbml0eUVycm9yID0gZTtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiBjb21iaW5hdGlvbigpIHtcbiAgICB2YXIgc3RhdGUgPSBhcmd1bWVudHMubGVuZ3RoIDw9IDAgfHwgYXJndW1lbnRzWzBdID09PSB1bmRlZmluZWQgPyB7fSA6IGFyZ3VtZW50c1swXTtcbiAgICB2YXIgYWN0aW9uID0gYXJndW1lbnRzWzFdO1xuXG4gICAgaWYgKHNhbml0eUVycm9yKSB7XG4gICAgICB0aHJvdyBzYW5pdHlFcnJvcjtcbiAgICB9XG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgdmFyIHdhcm5pbmdNZXNzYWdlID0gZ2V0VW5leHBlY3RlZFN0YXRlU2hhcGVXYXJuaW5nTWVzc2FnZShzdGF0ZSwgZmluYWxSZWR1Y2VycywgYWN0aW9uLCB1bmV4cGVjdGVkS2V5Q2FjaGUpO1xuICAgICAgaWYgKHdhcm5pbmdNZXNzYWdlKSB7XG4gICAgICAgIHdhcm5pbmcod2FybmluZ01lc3NhZ2UpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBoYXNDaGFuZ2VkID0gZmFsc2U7XG4gICAgdmFyIG5leHRTdGF0ZSA9IHt9O1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZmluYWxSZWR1Y2VyS2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGtleSA9IGZpbmFsUmVkdWNlcktleXNbaV07XG4gICAgICB2YXIgcmVkdWNlciA9IGZpbmFsUmVkdWNlcnNba2V5XTtcbiAgICAgIHZhciBwcmV2aW91c1N0YXRlRm9yS2V5ID0gc3RhdGVba2V5XTtcbiAgICAgIHZhciBuZXh0U3RhdGVGb3JLZXkgPSByZWR1Y2VyKHByZXZpb3VzU3RhdGVGb3JLZXksIGFjdGlvbik7XG4gICAgICBpZiAodHlwZW9mIG5leHRTdGF0ZUZvcktleSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgdmFyIGVycm9yTWVzc2FnZSA9IGdldFVuZGVmaW5lZFN0YXRlRXJyb3JNZXNzYWdlKGtleSwgYWN0aW9uKTtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGVycm9yTWVzc2FnZSk7XG4gICAgICB9XG4gICAgICBuZXh0U3RhdGVba2V5XSA9IG5leHRTdGF0ZUZvcktleTtcbiAgICAgIGhhc0NoYW5nZWQgPSBoYXNDaGFuZ2VkIHx8IG5leHRTdGF0ZUZvcktleSAhPT0gcHJldmlvdXNTdGF0ZUZvcktleTtcbiAgICB9XG4gICAgcmV0dXJuIGhhc0NoYW5nZWQgPyBuZXh0U3RhdGUgOiBzdGF0ZTtcbiAgfTtcbn1cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3JlZHV4L2VzL2NvbWJpbmVSZWR1Y2Vycy5qcyIsIid1c2Ugc3RyaWN0JztcblxudmFyIGlzQWJzb2x1dGUgPSBmdW5jdGlvbiBpc0Fic29sdXRlKHBhdGhuYW1lKSB7XG4gIHJldHVybiBwYXRobmFtZS5jaGFyQXQoMCkgPT09ICcvJztcbn07XG5cbi8vIEFib3V0IDEuNXggZmFzdGVyIHRoYW4gdGhlIHR3by1hcmcgdmVyc2lvbiBvZiBBcnJheSNzcGxpY2UoKVxudmFyIHNwbGljZU9uZSA9IGZ1bmN0aW9uIHNwbGljZU9uZShsaXN0LCBpbmRleCkge1xuICBmb3IgKHZhciBpID0gaW5kZXgsIGsgPSBpICsgMSwgbiA9IGxpc3QubGVuZ3RoOyBrIDwgbjsgaSArPSAxLCBrICs9IDEpIHtcbiAgICBsaXN0W2ldID0gbGlzdFtrXTtcbiAgfWxpc3QucG9wKCk7XG59O1xuXG4vLyBUaGlzIGltcGxlbWVudGF0aW9uIGlzIGJhc2VkIGhlYXZpbHkgb24gbm9kZSdzIHVybC5wYXJzZVxudmFyIHJlc29sdmVQYXRobmFtZSA9IGZ1bmN0aW9uIHJlc29sdmVQYXRobmFtZSh0bykge1xuICB2YXIgZnJvbSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogJyc7XG5cbiAgdmFyIHRvUGFydHMgPSB0byAmJiB0by5zcGxpdCgnLycpIHx8IFtdO1xuICB2YXIgZnJvbVBhcnRzID0gZnJvbSAmJiBmcm9tLnNwbGl0KCcvJykgfHwgW107XG5cbiAgdmFyIGlzVG9BYnMgPSB0byAmJiBpc0Fic29sdXRlKHRvKTtcbiAgdmFyIGlzRnJvbUFicyA9IGZyb20gJiYgaXNBYnNvbHV0ZShmcm9tKTtcbiAgdmFyIG11c3RFbmRBYnMgPSBpc1RvQWJzIHx8IGlzRnJvbUFicztcblxuICBpZiAodG8gJiYgaXNBYnNvbHV0ZSh0bykpIHtcbiAgICAvLyB0byBpcyBhYnNvbHV0ZVxuICAgIGZyb21QYXJ0cyA9IHRvUGFydHM7XG4gIH0gZWxzZSBpZiAodG9QYXJ0cy5sZW5ndGgpIHtcbiAgICAvLyB0byBpcyByZWxhdGl2ZSwgZHJvcCB0aGUgZmlsZW5hbWVcbiAgICBmcm9tUGFydHMucG9wKCk7XG4gICAgZnJvbVBhcnRzID0gZnJvbVBhcnRzLmNvbmNhdCh0b1BhcnRzKTtcbiAgfVxuXG4gIGlmICghZnJvbVBhcnRzLmxlbmd0aCkgcmV0dXJuICcvJztcblxuICB2YXIgaGFzVHJhaWxpbmdTbGFzaCA9IHZvaWQgMDtcbiAgaWYgKGZyb21QYXJ0cy5sZW5ndGgpIHtcbiAgICB2YXIgbGFzdCA9IGZyb21QYXJ0c1tmcm9tUGFydHMubGVuZ3RoIC0gMV07XG4gICAgaGFzVHJhaWxpbmdTbGFzaCA9IGxhc3QgPT09ICcuJyB8fCBsYXN0ID09PSAnLi4nIHx8IGxhc3QgPT09ICcnO1xuICB9IGVsc2Uge1xuICAgIGhhc1RyYWlsaW5nU2xhc2ggPSBmYWxzZTtcbiAgfVxuXG4gIHZhciB1cCA9IDA7XG4gIGZvciAodmFyIGkgPSBmcm9tUGFydHMubGVuZ3RoOyBpID49IDA7IGktLSkge1xuICAgIHZhciBwYXJ0ID0gZnJvbVBhcnRzW2ldO1xuXG4gICAgaWYgKHBhcnQgPT09ICcuJykge1xuICAgICAgc3BsaWNlT25lKGZyb21QYXJ0cywgaSk7XG4gICAgfSBlbHNlIGlmIChwYXJ0ID09PSAnLi4nKSB7XG4gICAgICBzcGxpY2VPbmUoZnJvbVBhcnRzLCBpKTtcbiAgICAgIHVwKys7XG4gICAgfSBlbHNlIGlmICh1cCkge1xuICAgICAgc3BsaWNlT25lKGZyb21QYXJ0cywgaSk7XG4gICAgICB1cC0tO1xuICAgIH1cbiAgfVxuXG4gIGlmICghbXVzdEVuZEFicykgZm9yICg7IHVwLS07IHVwKSB7XG4gICAgZnJvbVBhcnRzLnVuc2hpZnQoJy4uJyk7XG4gIH1pZiAobXVzdEVuZEFicyAmJiBmcm9tUGFydHNbMF0gIT09ICcnICYmICghZnJvbVBhcnRzWzBdIHx8ICFpc0Fic29sdXRlKGZyb21QYXJ0c1swXSkpKSBmcm9tUGFydHMudW5zaGlmdCgnJyk7XG5cbiAgdmFyIHJlc3VsdCA9IGZyb21QYXJ0cy5qb2luKCcvJyk7XG5cbiAgaWYgKGhhc1RyYWlsaW5nU2xhc2ggJiYgcmVzdWx0LnN1YnN0cigtMSkgIT09ICcvJykgcmVzdWx0ICs9ICcvJztcblxuICByZXR1cm4gcmVzdWx0O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSByZXNvbHZlUGF0aG5hbWU7XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9yZXNvbHZlLXBhdGhuYW1lL2luZGV4LmpzIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2xpYi9pbmRleCcpO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9zeW1ib2wtb2JzZXJ2YWJsZS9pbmRleC5qcyIsIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxudmFyIF9wb255ZmlsbCA9IHJlcXVpcmUoJy4vcG9ueWZpbGwnKTtcblxudmFyIF9wb255ZmlsbDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9wb255ZmlsbCk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7ICdkZWZhdWx0Jzogb2JqIH07IH1cblxudmFyIHJvb3Q7IC8qIGdsb2JhbCB3aW5kb3cgKi9cblxuXG5pZiAodHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnKSB7XG4gIHJvb3QgPSBzZWxmO1xufSBlbHNlIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICByb290ID0gd2luZG93O1xufSBlbHNlIGlmICh0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJykge1xuICByb290ID0gZ2xvYmFsO1xufSBlbHNlIGlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJykge1xuICByb290ID0gbW9kdWxlO1xufSBlbHNlIHtcbiAgcm9vdCA9IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG59XG5cbnZhciByZXN1bHQgPSAoMCwgX3BvbnlmaWxsMlsnZGVmYXVsdCddKShyb290KTtcbmV4cG9ydHNbJ2RlZmF1bHQnXSA9IHJlc3VsdDtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3N5bWJvbC1vYnNlcnZhYmxlL2xpYi9pbmRleC5qcyIsIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG5cdHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHNbJ2RlZmF1bHQnXSA9IHN5bWJvbE9ic2VydmFibGVQb255ZmlsbDtcbmZ1bmN0aW9uIHN5bWJvbE9ic2VydmFibGVQb255ZmlsbChyb290KSB7XG5cdHZhciByZXN1bHQ7XG5cdHZhciBfU3ltYm9sID0gcm9vdC5TeW1ib2w7XG5cblx0aWYgKHR5cGVvZiBfU3ltYm9sID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0aWYgKF9TeW1ib2wub2JzZXJ2YWJsZSkge1xuXHRcdFx0cmVzdWx0ID0gX1N5bWJvbC5vYnNlcnZhYmxlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXN1bHQgPSBfU3ltYm9sKCdvYnNlcnZhYmxlJyk7XG5cdFx0XHRfU3ltYm9sLm9ic2VydmFibGUgPSByZXN1bHQ7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdHJlc3VsdCA9ICdAQG9ic2VydmFibGUnO1xuXHR9XG5cblx0cmV0dXJuIHJlc3VsdDtcbn07XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vfi9zeW1ib2wtb2JzZXJ2YWJsZS9saWIvcG9ueWZpbGwuanMiLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cbnZhciBfdHlwZW9mID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIgPyBmdW5jdGlvbiAob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9IDogZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTtcblxudmFyIHZhbHVlRXF1YWwgPSBmdW5jdGlvbiB2YWx1ZUVxdWFsKGEsIGIpIHtcbiAgaWYgKGEgPT09IGIpIHJldHVybiB0cnVlO1xuXG4gIGlmIChhID09IG51bGwgfHwgYiA9PSBudWxsKSByZXR1cm4gZmFsc2U7XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkoYSkpIHJldHVybiBBcnJheS5pc0FycmF5KGIpICYmIGEubGVuZ3RoID09PSBiLmxlbmd0aCAmJiBhLmV2ZXJ5KGZ1bmN0aW9uIChpdGVtLCBpbmRleCkge1xuICAgIHJldHVybiB2YWx1ZUVxdWFsKGl0ZW0sIGJbaW5kZXhdKTtcbiAgfSk7XG5cbiAgdmFyIGFUeXBlID0gdHlwZW9mIGEgPT09ICd1bmRlZmluZWQnID8gJ3VuZGVmaW5lZCcgOiBfdHlwZW9mKGEpO1xuICB2YXIgYlR5cGUgPSB0eXBlb2YgYiA9PT0gJ3VuZGVmaW5lZCcgPyAndW5kZWZpbmVkJyA6IF90eXBlb2YoYik7XG5cbiAgaWYgKGFUeXBlICE9PSBiVHlwZSkgcmV0dXJuIGZhbHNlO1xuXG4gIGlmIChhVHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICB2YXIgYVZhbHVlID0gYS52YWx1ZU9mKCk7XG4gICAgdmFyIGJWYWx1ZSA9IGIudmFsdWVPZigpO1xuXG4gICAgaWYgKGFWYWx1ZSAhPT0gYSB8fCBiVmFsdWUgIT09IGIpIHJldHVybiB2YWx1ZUVxdWFsKGFWYWx1ZSwgYlZhbHVlKTtcblxuICAgIHZhciBhS2V5cyA9IE9iamVjdC5rZXlzKGEpO1xuICAgIHZhciBiS2V5cyA9IE9iamVjdC5rZXlzKGIpO1xuXG4gICAgaWYgKGFLZXlzLmxlbmd0aCAhPT0gYktleXMubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG5cbiAgICByZXR1cm4gYUtleXMuZXZlcnkoZnVuY3Rpb24gKGtleSkge1xuICAgICAgcmV0dXJuIHZhbHVlRXF1YWwoYVtrZXldLCBiW2tleV0pO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufTtcblxuZXhwb3J0cy5kZWZhdWx0ID0gdmFsdWVFcXVhbDtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9+L3ZhbHVlLWVxdWFsL2luZGV4LmpzIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihtb2R1bGUpIHtcclxuXHRpZighbW9kdWxlLndlYnBhY2tQb2x5ZmlsbCkge1xyXG5cdFx0bW9kdWxlLmRlcHJlY2F0ZSA9IGZ1bmN0aW9uKCkge307XHJcblx0XHRtb2R1bGUucGF0aHMgPSBbXTtcclxuXHRcdC8vIG1vZHVsZS5wYXJlbnQgPSB1bmRlZmluZWQgYnkgZGVmYXVsdFxyXG5cdFx0aWYoIW1vZHVsZS5jaGlsZHJlbikgbW9kdWxlLmNoaWxkcmVuID0gW107XHJcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobW9kdWxlLCBcImxvYWRlZFwiLCB7XHJcblx0XHRcdGVudW1lcmFibGU6IHRydWUsXHJcblx0XHRcdGdldDogZnVuY3Rpb24oKSB7XHJcblx0XHRcdFx0cmV0dXJuIG1vZHVsZS5sO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtb2R1bGUsIFwiaWRcIiwge1xyXG5cdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxyXG5cdFx0XHRnZXQ6IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRcdHJldHVybiBtb2R1bGUuaTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0XHRtb2R1bGUud2VicGFja1BvbHlmaWxsID0gMTtcclxuXHR9XHJcblx0cmV0dXJuIG1vZHVsZTtcclxufTtcclxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vICh3ZWJwYWNrKS9idWlsZGluL21vZHVsZS5qcyIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQge2Nvbm5lY3R9IGZyb20gJ3JlYWN0LXJlZHV4JztcbmltcG9ydCBGaWxlSW5wdXQgZnJvbSAncmVhY3QtZmlsZS1pbnB1dCc7XG5cbmltcG9ydCBJdGVtTGlzdCBmcm9tICcuL2l0ZW0tbGlzdCc7XG5pbXBvcnQgZ2V0UGF0aCBmcm9tICcuLi8uLi91dGlsL2dldFBhdGgnO1xuXG5cbmZ1bmN0aW9uIGdldEZpbGVzKGZzKSB7XG4gIHJldHVybiBmcy5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0udHlwZSA9PT0gJ2ZpbGUnKTtcbn1cblxubGV0IG1hcFN0YXRlVG9Qcm9wcyA9IGZ1bmN0aW9uIChzdGF0ZSkge1xuICByZXR1cm4ge1xuICAgIHRpdGxlOiAnRmlsZXMnLFxuICAgIGl0ZW1zOiBnZXRGaWxlcyhnZXRQYXRoKHN0YXRlKSksXG4gICAgaGVhZGVyRXh0cmFzOiAoPGlucHV0IGNsYXNzTmFtZT1cImZpbGVzLXVwbG9hZFwiIHR5cGU9XCJmaWxlXCIvPilcbiAgfTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNvbm5lY3QobWFwU3RhdGVUb1Byb3BzLCAoKSA9PiAoe30pKShJdGVtTGlzdCk7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvY29tcG9uZW50cy9jb250ZW50L2ZpbGUtbGlzdC5qc3giLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtjb25uZWN0fSBmcm9tICdyZWFjdC1yZWR1eCc7XG5cbmltcG9ydCBJdGVtTGlzdCBmcm9tICcuL2l0ZW0tbGlzdCc7XG5pbXBvcnQgZ2V0UGF0aCBmcm9tICcuLi8uLi91dGlsL2dldFBhdGgnO1xuXG5cbmZ1bmN0aW9uIGdldEZvbGRlcnMoZnMpIHtcbiAgcmV0dXJuIGZzLmZpbHRlcihpdGVtID0+IGl0ZW0udHlwZSA9PT0gJ2ZvbGRlcicpO1xufVxuXG5jb25zdCBtYXBTdGF0ZVRvUHJvcHMgPSBmdW5jdGlvbiAoc3RhdGUpIHtcbiAgcmV0dXJuIHtcbiAgICB0aXRsZTogJ0ZvbGRlcnMnLFxuICAgIGl0ZW1zOiBnZXRGb2xkZXJzKGdldFBhdGgoc3RhdGUpLCBzdGF0ZS5jdXJyZW50UGF0aCksXG4gICAgaGVhZGVyRXh0cmFzOiAoPHNwYW4gY2xhc3NOYW1lPVwiZmEgZmEtZm9sZGVyXCIvPilcbiAgfTtcbn07XG5cbmNvbnN0IG1hcERpc3BhdGNoVG9Qcm9wcyA9IGZ1bmN0aW9uIChkaXNwYXRjaCkge1xuICByZXR1cm4ge1xuICAgIGhhbmRsZUl0ZW1DbGljazogZnVuY3Rpb24gKHBhdGgpIHtcbiAgICAgIGRpc3BhdGNoKHtcbiAgICAgICAgdHlwZTogJ25hdmlnYXRlLXRvJyxcbiAgICAgICAgcGF5bG9hZDogeyBwYXRoIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNvbm5lY3QobWFwU3RhdGVUb1Byb3BzLCBtYXBEaXNwYXRjaFRvUHJvcHMpKEl0ZW1MaXN0KTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9jb21wb25lbnRzL2NvbnRlbnQvZm9sZGVyLWxpc3QuanN4IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7Y29ubmVjdH0gZnJvbSAncmVhY3QtcmVkdXgnO1xuXG5jb25zdCBpY29uTWFwID0ge1xuICBmaWxlOiAnYWNyb2JhdC1maWxlJyxcbiAgZm9sZGVyOiAnc2hhcmVkMScsXG4gIG11c2ljOiAnbXVzaWMnLFxuICBwaWN0dXJlOiAncGhvdG9zJyxcbiAgc2hhcmVkOiAnc2hhcmVkMSdcbn07XG5cbmZ1bmN0aW9uIGdldEltYWdlUGF0aChpdGVtKSB7XG4gIGlmIChpdGVtLmJhY2tncm91bmRJbWFnZSB8fCBpdGVtLnR5cGUgPT09ICdwaWN0dXJlJykge1xuICAgIHJldHVybiAnLi9pbWFnZXMvJyArIChpdGVtLmJhY2tncm91bmRJbWFnZSB8fCBpdGVtLnRpdGxlKTtcbiAgfVxuICByZXR1cm4gJy4vaWNvbnMvdGV4dC1maWxlLnBuZyc7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUNsaWNrSGFuZGxlcihoYW5kbGVDbGljaywgLi4uYXJncykge1xuICByZXR1cm4gZnVuY3Rpb24gKGUpIHtcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgaGFuZGxlQ2xpY2suYXBwbHkobnVsbCwgYXJncyk7XG4gIH07XG59XG5cbmNvbnN0IEl0ZW0gPSBmdW5jdGlvbiAoe2l0ZW0sIHNlbGVjdE1vZGUsIGhhbmRsZUNsaWNrLCBjdXJyZW50UGF0aH0pIHtcblxuICBjb25zdCBpY29uID0gaWNvbk1hcFtpdGVtLnR5cGVdO1xuICBsZXQgZWxlbWVudFN0eWxlID0ge1xuICAgIGJhY2tncm91bmRJbWFnZTogYHVybCgke2dldEltYWdlUGF0aChpdGVtKX0pYCxcbiAgICBiYWNrZ3JvdW5kUmVwZWF0OiAnbm8tcmVwZWF0JyxcbiAgICBiYWNrZ3JvdW5kU2l6ZTogJ2NvbnRhaW4nXG4gIH07XG5cbiAgcmV0dXJuIChcbiAgICA8YSBocmVmPXsnIyd9IG9uQ2xpY2s9e3NlbGVjdE1vZGUgPyAoKCk9Pnt9KSA6IGNyZWF0ZUNsaWNrSGFuZGxlcihoYW5kbGVDbGljaywgY3VycmVudFBhdGggKyAnLycgKyBpdGVtLnRpdGxlKX0+XG4gICAgICA8bGFiZWwgY2xhc3NOYW1lPXsnZmlsZXMtY29udGVudC1pdGVtJyArIChzZWxlY3RNb2RlICYmIGl0ZW0uc2VsZWN0ZWQgPyAnIGZpbGVzLWNvbnRlbnQtaXRlbS0tc2VsZWN0ZWQnIDogJycpfSBodG1sRm9yPXtgY2hrLSR7aXRlbS50aXRsZS5zcGxpdCgnLicpWzBdfWB9PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImltYWdlLXBsYWNlaG9sZGVyXCIgc3R5bGU9e2VsZW1lbnRTdHlsZX0vPlxuICAgICAgICA8cD5cbiAgICAgICAgICB7IHNlbGVjdE1vZGUgPyA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgaWQ9e2BjaGstJHtpdGVtLnRpdGxlLnNwbGl0KCcuJylbMF19YH0vPiA6IDxpbWcgc3JjPXtgL2ljb25zLyR7aWNvbn0ucG5nYCB9IC8+IH1cbiAgICAgICAgICB7aXRlbS50aXRsZX1cbiAgICAgICAgPC9wPlxuICAgICAgPC9sYWJlbD5cbiAgICA8L2E+XG4gICk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjb25uZWN0KChzdGF0ZSkgPT4gKHtjdXJyZW50UGF0aDogc3RhdGUuY3VycmVudFBhdGh9KSwgKCkgPT4gKHt9KSkoSXRlbSk7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvY29tcG9uZW50cy9jb250ZW50L2l0ZW0uanN4IiwiaW1wb3J0IHtjb25uZWN0fSBmcm9tICdyZWFjdC1yZWR1eCc7XG5cbmltcG9ydCBJdGVtTGlzdCBmcm9tICcuL2l0ZW0tbGlzdCc7XG5cblxuZnVuY3Rpb24gZ2V0TXVzaWMoZnMpIHtcbiAgcmV0dXJuIGZzLmZpbHRlcihpdGVtID0+IGl0ZW0udHlwZSA9PT0gJ211c2ljJyk7XG59XG5cbmNvbnN0IG1hcFN0YXRlVG9Qcm9wcyA9IGZ1bmN0aW9uIChzdGF0ZSkge1xuICByZXR1cm4ge1xuICAgIHRpdGxlOiAnTXVzaWMnLFxuICAgIGl0ZW1zOiBnZXRNdXNpYyhzdGF0ZS5maWxlc3lzdGVtLmNvbnRlbnRzKVxuICB9O1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY29ubmVjdChtYXBTdGF0ZVRvUHJvcHMsICgpID0+ICh7fSkpKEl0ZW1MaXN0KTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9jb21wb25lbnRzL2NvbnRlbnQvbXVzaWMtbGlzdC5qc3giLCJpbXBvcnQge2Nvbm5lY3R9IGZyb20gJ3JlYWN0LXJlZHV4JztcblxuaW1wb3J0IEl0ZW1MaXN0IGZyb20gJy4vaXRlbS1saXN0JztcblxuXG5mdW5jdGlvbiBnZXRQaG90b3MoZnMpIHtcbiAgcmV0dXJuIGZzLmZpbHRlcihpdGVtID0+IGl0ZW0udHlwZSA9PT0gJ3BpY3R1cmUnKTtcbn1cblxuY29uc3QgbWFwU3RhdGVUb1Byb3BzID0gZnVuY3Rpb24gKHN0YXRlKSB7XG4gIHJldHVybiB7XG4gICAgdGl0bGU6ICdQaG90b3MnLFxuICAgIGl0ZW1zOiBnZXRQaG90b3Moc3RhdGUuZmlsZXN5c3RlbS5jb250ZW50cylcbiAgfTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNvbm5lY3QobWFwU3RhdGVUb1Byb3BzLCAoKSA9PiAoe30pKShJdGVtTGlzdCk7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvY29tcG9uZW50cy9jb250ZW50L3Bob3RvLWxpc3QuanN4IiwiaW1wb3J0IHtjb25uZWN0fSBmcm9tICdyZWFjdC1yZWR1eCc7XG5cbmltcG9ydCBJdGVtTGlzdCBmcm9tICcuL2l0ZW0tbGlzdCc7XG5cblxuZnVuY3Rpb24gZ2V0U2hhcmVkKGZzKSB7XG4gIHJldHVybiBmcy5maWx0ZXIoaXRlbSA9PiBpdGVtLnR5cGUgPT09ICdzaGFyZWQnKTtcbn1cblxuY29uc3QgbWFwU3RhdGVUb1Byb3BzID0gZnVuY3Rpb24gKHN0YXRlKSB7XG4gIHJldHVybiB7XG4gICAgdGl0bGU6ICdTaGFyZWQnLFxuICAgIGl0ZW1zOiBnZXRTaGFyZWQoc3RhdGUuZmlsZXN5c3RlbS5jb250ZW50cylcbiAgfTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNvbm5lY3QobWFwU3RhdGVUb1Byb3BzLCAoKSA9PiAoe30pKShJdGVtTGlzdCk7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvY29tcG9uZW50cy9jb250ZW50L3NoYXJlZC1saXN0LmpzeCIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQge2Nvbm5lY3R9IGZyb20gJ3JlYWN0LXJlZHV4JztcblxuY29uc3QgQnJlYWRjcnVtYnMgPSBmdW5jdGlvbiAoe2N1cnJlbnRQYXRoLCBoYW5kbGVDbGlja30pIHtcbiAgbGV0IGNydW1icyA9IFtdO1xuXG4gIGZ1bmN0aW9uIGNyZWF0ZUNsaWNrSGFuZGxlcihwYXRoKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChlKSB7XG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICByZXR1cm4gaGFuZGxlQ2xpY2socGF0aCk7XG4gICAgfTtcbiAgfVxuXG4gIGlmIChjdXJyZW50UGF0aCkge1xuICAgIGNvbnN0IGN1cnJlbnRMaW5rID0gWycnXTtcbiAgICBjcnVtYnMgPSBjdXJyZW50UGF0aC5zcGxpdCgnLycpLnNsaWNlKDEpLm1hcChmdW5jdGlvbiAoY3J1bWIsIGlkeCkge1xuICAgICAgY3VycmVudExpbmsucHVzaChjcnVtYik7XG5cbiAgICAgIHJldHVybiA8bGkga2V5PXtpZHggKyAxfT48YSBocmVmPVwiXCIgb25DbGljaz17Y3JlYXRlQ2xpY2tIYW5kbGVyKGN1cnJlbnRMaW5rLmpvaW4oJy8nKSl9PntjcnVtYn0gPHNwYW4gY2xhc3NOYW1lPVwiZmEgZmEtZWxsaXBzaXMtaFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiLz48L2E+PC9saT47XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIChcbiAgICA8b2wgY2xhc3NOYW1lPVwiYnJlYWRjcnVtYlwiPlxuICAgICAgPGxpIGtleT17MH0+PGEgaHJlZj1cIlwiIG9uQ2xpY2s9e2NyZWF0ZUNsaWNrSGFuZGxlcignJyl9PkhvbWUgPHNwYW4gY2xhc3NOYW1lPVwiZmEgZmEtZWxsaXBzaXMtaFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiLz48L2E+PC9saT5cbiAgICAgIHtjcnVtYnN9XG4gICAgPC9vbD5cbiAgKTtcbn07XG5cbmNvbnN0IG1hcFN0YXRlVG9Qcm9wcyA9IGZ1bmN0aW9uIChzdGF0ZSkge1xuICByZXR1cm4ge1xuICAgIGN1cnJlbnRQYXRoOiBzdGF0ZS5jdXJyZW50UGF0aFxuICB9O1xufTtcblxuY29uc3QgbWFwRGlzcGF0Y2hUb1Byb3BzID0gZnVuY3Rpb24gKGRpc3BhdGNoKSB7XG4gIHJldHVybiB7XG4gICAgaGFuZGxlQ2xpY2s6IGZ1bmN0aW9uIChwYXRoKSB7XG4gICAgICBkaXNwYXRjaCh7dHlwZTogJ25hdmlnYXRlLXRvJywgcGF5bG9hZDoge3BhdGh9fSk7XG4gICAgfVxuICB9O1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY29ubmVjdChtYXBTdGF0ZVRvUHJvcHMsIG1hcERpc3BhdGNoVG9Qcm9wcykoQnJlYWRjcnVtYnMpO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2NvbXBvbmVudHMvbmF2aWdhdGlvbi9icmVhZGNydW1icy5qc3giLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtjb25uZWN0fSBmcm9tICdyZWFjdC1yZWR1eCc7XG5cbmNvbnN0IERpc3BsYXlNZW51ID0gZnVuY3Rpb24gKCkge1xuICAndXNlIHN0cmljdCc7XG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJkaXNwbGF5LW1lbnVcIj5cbiAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInNvcnRcIj5Tb3J0PC9zcGFuPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJkcm9wZG93blwiPlxuICAgICAgICA8YnV0dG9uIGNsYXNzTmFtZT1cImJ0biBidG4tZGVmYXVsdCBkcm9wZG93bi10b2dnbGVcIiB0eXBlPVwiYnV0dG9uXCIgaWQ9XCJkcm9wZG93bk1lbnUxXCIgZGF0YS10b2dnbGU9XCIuZHJvcGRvd25cIiBhcmlhLWhhc3BvcHVwPVwidHJ1ZVwiIGFyaWEtZXhwYW5kZWQ9XCJ0cnVlXCI+XG4gICAgICAgICAgTmFtZSAoRGVzY2VuZGluZylcbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJjYXJldFwiLz5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDx1bCBjbGFzc05hbWU9XCJkcm9wZG93bi1tZW51XCIgYXJpYS1sYWJlbGxlZGJ5PVwiZHJvcGRvd25NZW51MVwiPlxuICAgICAgICAgIDxsaT48YSBocmVmPVwiI1wiPkFjdGlvbjwvYT48L2xpPlxuICAgICAgICAgIDxsaT48YSBocmVmPVwiI1wiPkFub3RoZXIgYWN0aW9uPC9hPjwvbGk+XG4gICAgICAgICAgPGxpPjxhIGhyZWY9XCIjXCI+U29tZXRoaW5nIGVsc2UgaGVyZTwvYT48L2xpPlxuICAgICAgICAgIDxsaSByb2xlPVwic2VwYXJhdG9yXCIgY2xhc3NOYW1lPVwiZGl2aWRlclwiLz5cbiAgICAgICAgICA8bGk+PGEgaHJlZj1cIiNcIj5TZXBhcmF0ZWQgbGluazwvYT48L2xpPlxuICAgICAgICA8L3VsPlxuICAgICAgPC9kaXY+XG4gICAgICA8YnV0dG9uIGNsYXNzTmFtZT1cInZpZXdzdHlsZS1sZWZ0IHZpZXdzdHlsZS1hY3RpdmVcIj5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiZmEgZmEtdGhcIi8+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gY2xhc3NOYW1lPVwidmlld3N0eWxlLXJpZ2h0IHZpZXdzdHlsZS1pbmFjdGl2ZVwiPlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJmYSBmYS1saXN0LXVsXCIvPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+KTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNvbm5lY3QoKCkgPT4gKHt9KSwgKCkgPT4gKHt9KSkoRGlzcGxheU1lbnUpO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9jb21wb25lbnRzL25hdmlnYXRpb24vZGlzcGxheS1tZW51LmpzeCIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQge2Nvbm5lY3R9IGZyb20gJ3JlYWN0LXJlZHV4JztcblxuY29uc3QgVG9wTmF2ID0gZnVuY3Rpb24gKHtxdWVyeXN0cmluZywgc2VhcmNoQnlRdWVyeX0pIHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cImhlYWRlclwiPlxuICAgICAgPGZvcm0gY2xhc3NOYW1lPVwibmF2YmFyLWZvcm0gbmF2YmFyLWxlZnRcIiBvblN1Ym1pdD17c2VhcmNoQnlRdWVyeX0+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzTmFtZT1cImZvcm0tY29udHJvbFwiIHBsYWNlaG9sZGVyPVwiU2VhcmNoXCIgdmFsdWU9e3F1ZXJ5c3RyaW5nfSAvPlxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwic3VibWl0XCIgY2xhc3NOYW1lPVwiYnRuIGJ0bi1kZWZhdWx0IG5hdmJhci1idG5cIiB2YWx1ZT1cIlNlbGVjdFwiIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9mb3JtPlxuICAgIDwvZGl2PlxuICApO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY29ubmVjdCgoKSA9PiAoe30pLCAoKSA9PiAoe30pKShUb3BOYXYpO1xuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9jb21wb25lbnRzL25hdmlnYXRpb24vdG9wLW5hdi5qc3giLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHtyZW5kZXJ9IGZyb20gJ3JlYWN0LWRvbSc7XG5pbXBvcnQge2NyZWF0ZVN0b3JlfSBmcm9tICdyZWR1eCc7XG5pbXBvcnQge1Byb3ZpZGVyfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQge0hhc2hSb3V0ZXIgYXMgUm91dGVyLCBTd2l0Y2gsIFJvdXRlfSBmcm9tICdyZWFjdC1yb3V0ZXItZG9tJztcblxuaW1wb3J0IE1haW4gZnJvbSAnLi9jb21wb25lbnRzL21haW4nO1xuaW1wb3J0IE1lbnUgZnJvbSAnLi9jb21wb25lbnRzL25hdmlnYXRpb24vbWVudSc7XG5pbXBvcnQgcmVkdWNlciBmcm9tICcuL3JlZHVjZXJzL21haW4nO1xuXG5yZW5kZXIgKFxuICAoXG4gICAgPFByb3ZpZGVyIHN0b3JlPXtjcmVhdGVTdG9yZShyZWR1Y2VyKX0gPlxuICAgICAgPFJvdXRlcj5cbiAgICAgICAgPFN3aXRjaD5cbiAgICAgICAgICA8Um91dGUgY29tcG9uZW50PXtNZW51fSBwYXRoPVwiL21lbnVcIi8+XG4gICAgICAgICAgPFJvdXRlIGNvbXBvbmVudD17TWFpbn0gcGF0aD1cIi9cIiAvPlxuICAgICAgICA8L1N3aXRjaD5cbiAgICAgIDwvUm91dGVyPlxuICAgIDwvUHJvdmlkZXI+XG4gICksXG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21haW4nKVxuKTtcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvaW5kZXguanN4IiwiZXhwb3J0IGRlZmF1bHQge1xuICBjdXJyZW50UGF0aDogJycsXG4gIGZpbGVzeXN0ZW06IHtcbiAgICBjb250ZW50czogW1xuICAgICAge1xuICAgICAgICBjb250ZW50czogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvbnRlbnRzOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb250ZW50czogW10sXG4gICAgICAgICAgICAgICAgdGl0bGU6ICcyMDE2LjEyLjE0am91cm5hbC5kb2MnLFxuICAgICAgICAgICAgICAgIGRhdGU6ICcyMDE2LjEyLjE0JyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnZmlsZScsXG4gICAgICAgICAgICAgICAgdmlzaWJpbGl0eToge1xuICAgICAgICAgICAgICAgICAgb3duZXI6IHRydWUsXG4gICAgICAgICAgICAgICAgICBhbm9uOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgIHVzZXJncm91cDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICBzcGVjaWZpY1VzZXI6IHRydWVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBiYWNrZ3JvdW5kSW1hZ2U6ICdmb2xkZXIyLnBuZycsXG4gICAgICAgICAgICB0aXRsZTogJ0ZvbGRlciAyJyxcbiAgICAgICAgICAgIGRhdGU6ICcyMDE2LjEyLjI0JyxcbiAgICAgICAgICAgIHR5cGU6ICdmb2xkZXInLFxuICAgICAgICAgICAgdmlzaWJpbGl0eToge1xuICAgICAgICAgICAgICBvd25lcjogdHJ1ZSxcbiAgICAgICAgICAgICAgYW5vbjogZmFsc2UsXG4gICAgICAgICAgICAgIHVzZXJncm91cDogdHJ1ZSxcbiAgICAgICAgICAgICAgc3BlY2lmaWNVc2VyOiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb250ZW50czogW10sXG4gICAgICAgICAgICB0aXRsZTogJzIwMTYuMTIuMTRqb3VybmFsLmRvYycsXG4gICAgICAgICAgICBkYXRlOiAnMjAxNi4xMi4xNCcsXG4gICAgICAgICAgICB0eXBlOiAnZmlsZScsXG4gICAgICAgICAgICB2aXNpYmlsaXR5OiB7XG4gICAgICAgICAgICAgIG93bmVyOiB0cnVlLFxuICAgICAgICAgICAgICBhbm9uOiBmYWxzZSxcbiAgICAgICAgICAgICAgdXNlcmdyb3VwOiBmYWxzZSxcbiAgICAgICAgICAgICAgc3BlY2lmaWNVc2VyOiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICBiYWNrZ3JvdW5kSW1hZ2U6ICdmb2xkZXIxLnBuZycsXG4gICAgICAgIHRpdGxlOiAnRmluYWwgUGFwZXJzJyxcbiAgICAgICAgZGF0ZTogJzIwMTYuMTIuMjQnLFxuICAgICAgICB0eXBlOiAnZm9sZGVyJyxcbiAgICAgICAgdmlzaWJpbGl0eToge1xuICAgICAgICAgIG93bmVyOiB0cnVlLFxuICAgICAgICAgIGFub246IGZhbHNlLFxuICAgICAgICAgIHVzZXJncm91cDogdHJ1ZSxcbiAgICAgICAgICBzcGVjaWZpY1VzZXI6IHRydWVcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY29udGVudHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb250ZW50czogW10sXG4gICAgICAgICAgICB0aXRsZTogJzIwMTYuMTIuMTRqb3VybmFsLmRvYycsXG4gICAgICAgICAgICBkYXRlOiAnMjAxNi4xMi4xNCcsXG4gICAgICAgICAgICB0eXBlOiAnZmlsZScsXG4gICAgICAgICAgICB2aXNpYmlsaXR5OiB7XG4gICAgICAgICAgICAgIG93bmVyOiB0cnVlLFxuICAgICAgICAgICAgICBhbm9uOiBmYWxzZSxcbiAgICAgICAgICAgICAgdXNlcmdyb3VwOiBmYWxzZSxcbiAgICAgICAgICAgICAgc3BlY2lmaWNVc2VyOiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICBiYWNrZ3JvdW5kSW1hZ2U6ICdmb2xkZXIyLnBuZycsXG4gICAgICAgIHRpdGxlOiAnR3JvdXAgUHJvamVjdHMnLFxuICAgICAgICBkYXRlOiAnMjAxNi4xMi4yNCcsXG4gICAgICAgIHR5cGU6ICdmb2xkZXInLFxuICAgICAgICB2aXNpYmlsaXR5OiB7XG4gICAgICAgICAgb3duZXI6IHRydWUsXG4gICAgICAgICAgYW5vbjogZmFsc2UsXG4gICAgICAgICAgdXNlcmdyb3VwOiB0cnVlLFxuICAgICAgICAgIHNwZWNpZmljVXNlcjogdHJ1ZVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjb250ZW50czogW10sXG4gICAgICAgIGJhY2tncm91bmRJbWFnZTogJ2ZvbGRlcjMucG5nJyxcbiAgICAgICAgdGl0bGU6ICdGYW1pbHkgTWVtb3JpZXMnLFxuICAgICAgICBkYXRlOiAnMjAxNi4xMi4yNCcsXG4gICAgICAgIHR5cGU6ICdmb2xkZXInLFxuICAgICAgICB2aXNpYmlsaXR5OiB7XG4gICAgICAgICAgb3duZXI6IHRydWUsXG4gICAgICAgICAgYW5vbjogZmFsc2UsXG4gICAgICAgICAgdXNlcmdyb3VwOiB0cnVlLFxuICAgICAgICAgIHNwZWNpZmljVXNlcjogdHJ1ZVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjb250ZW50czogW10sXG4gICAgICAgIGJhY2tncm91bmRJbWFnZTogJ2ZvbGRlcjQucG5nJyxcbiAgICAgICAgdGl0bGU6ICdXaW50ZXIgVmFjYXRpb24nLFxuICAgICAgICBkYXRlOiAnMjAxNy4xLjI0JyxcbiAgICAgICAgdHlwZTogJ2ZvbGRlcicsXG4gICAgICAgIHZpc2liaWxpdHk6IHtcbiAgICAgICAgICBvd25lcjogdHJ1ZSxcbiAgICAgICAgICBhbm9uOiBmYWxzZSxcbiAgICAgICAgICB1c2VyZ3JvdXA6IHRydWUsXG4gICAgICAgICAgc3BlY2lmaWNVc2VyOiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNvbnRlbnRzOiBbXSxcbiAgICAgICAgYmFja2dyb3VuZEltYWdlOiAnZm9sZGVyNS5wbmcnLFxuICAgICAgICB0aXRsZTogJ05hdHVyZSBQaWNzJyxcbiAgICAgICAgZGF0ZTogJzIwMTcuMS4yNCcsXG4gICAgICAgIHR5cGU6ICdmb2xkZXInLFxuICAgICAgICB2aXNpYmlsaXR5OiB7XG4gICAgICAgICAgb3duZXI6IHRydWUsXG4gICAgICAgICAgYW5vbjogZmFsc2UsXG4gICAgICAgICAgdXNlcmdyb3VwOiBmYWxzZSxcbiAgICAgICAgICBzcGVjaWZpY1VzZXI6IGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNvbnRlbnRzOiBbXSxcbiAgICAgICAgdGl0bGU6ICdJTUdfMDE0NS5wbmcnLFxuICAgICAgICBkYXRlOiAnMjAxNi4xMi4yNCcsXG4gICAgICAgIHR5cGU6ICdwaWN0dXJlJyxcbiAgICAgICAgdmlzaWJpbGl0eToge1xuICAgICAgICAgIG93bmVyOiB0cnVlLFxuICAgICAgICAgIGFub246IGZhbHNlLFxuICAgICAgICAgIHVzZXJncm91cDogdHJ1ZSxcbiAgICAgICAgICBzcGVjaWZpY1VzZXI6IHRydWVcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY29udGVudHM6IFtdLFxuICAgICAgICB0aXRsZTogJ0lNR18wMTQ2LnBuZycsXG4gICAgICAgIGRhdGU6ICcyMDE2LjEyLjI1JyxcbiAgICAgICAgdHlwZTogJ3BpY3R1cmUnLFxuICAgICAgICB2aXNpYmlsaXR5OiB7XG4gICAgICAgICAgb3duZXI6IHRydWUsXG4gICAgICAgICAgYW5vbjogZmFsc2UsXG4gICAgICAgICAgdXNlcmdyb3VwOiB0cnVlLFxuICAgICAgICAgIHNwZWNpZmljVXNlcjogdHJ1ZVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjb250ZW50czogW10sXG4gICAgICAgIHRpdGxlOiAnSU1HXzAxNDcucG5nJyxcbiAgICAgICAgZGF0ZTogJzIwMTYuMTIuMjUnLFxuICAgICAgICB0eXBlOiAncGljdHVyZScsXG4gICAgICAgIHZpc2liaWxpdHk6IHtcbiAgICAgICAgICBvd25lcjogdHJ1ZSxcbiAgICAgICAgICBhbm9uOiBmYWxzZSxcbiAgICAgICAgICB1c2VyZ3JvdXA6IHRydWUsXG4gICAgICAgICAgc3BlY2lmaWNVc2VyOiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNvbnRlbnRzOiBbXSxcbiAgICAgICAgdGl0bGU6ICdzcXJjaHJpc3RtYXNwcmVzZW50LnBuZycsXG4gICAgICAgIGRhdGU6ICcyMDE2LjEyLjI1JyxcbiAgICAgICAgdHlwZTogJ3BpY3R1cmUnLFxuICAgICAgICB2aXNpYmlsaXR5OiB7XG4gICAgICAgICAgb3duZXI6IHRydWUsXG4gICAgICAgICAgYW5vbjogZmFsc2UsXG4gICAgICAgICAgdXNlcmdyb3VwOiB0cnVlLFxuICAgICAgICAgIHNwZWNpZmljVXNlcjogdHJ1ZVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjb250ZW50czogW10sXG4gICAgICAgIHRpdGxlOiAnc3FyYXdrd2FyZGZhbS5wbmcnLFxuICAgICAgICBkYXRlOiAnMjAxNi4xMi4yNycsXG4gICAgICAgIHR5cGU6ICdwaWN0dXJlJyxcbiAgICAgICAgdmlzaWJpbGl0eToge1xuICAgICAgICAgIG93bmVyOiB0cnVlLFxuICAgICAgICAgIGFub246IGZhbHNlLFxuICAgICAgICAgIHVzZXJncm91cDogdHJ1ZSxcbiAgICAgICAgICBzcGVjaWZpY1VzZXI6IHRydWVcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY29udGVudHM6IFtdLFxuICAgICAgICB0aXRsZTogJ0lNR18wMTUwLnBuZycsXG4gICAgICAgIGRhdGU6ICcyMDE2LjEyLjMwJyxcbiAgICAgICAgdHlwZTogJ3BpY3R1cmUnLFxuICAgICAgICB2aXNpYmlsaXR5OiB7XG4gICAgICAgICAgb3duZXI6IHRydWUsXG4gICAgICAgICAgYW5vbjogZmFsc2UsXG4gICAgICAgICAgdXNlcmdyb3VwOiB0cnVlLFxuICAgICAgICAgIHNwZWNpZmljVXNlcjogdHJ1ZVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjb250ZW50czogW10sXG4gICAgICAgIHRpdGxlOiAnc3FyYmx1ZXN0ZWVsbWFuLnBuZycsXG4gICAgICAgIGRhdGU6ICcyMDE3LjAxLjAyJyxcbiAgICAgICAgdHlwZTogJ3BpY3R1cmUnLFxuICAgICAgICB2aXNpYmlsaXR5OiB7XG4gICAgICAgICAgb3duZXI6IHRydWUsXG4gICAgICAgICAgYW5vbjogZmFsc2UsXG4gICAgICAgICAgdXNlcmdyb3VwOiB0cnVlLFxuICAgICAgICAgIHNwZWNpZmljVXNlcjogdHJ1ZVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjb250ZW50czogW10sXG4gICAgICAgIHRpdGxlOiAnSU1HXzAxNTIucG5nJyxcbiAgICAgICAgZGF0ZTogJzIwMTcuMDEuMDInLFxuICAgICAgICB0eXBlOiAncGljdHVyZScsXG4gICAgICAgIHZpc2liaWxpdHk6IHtcbiAgICAgICAgICBvd25lcjogdHJ1ZSxcbiAgICAgICAgICBhbm9uOiBmYWxzZSxcbiAgICAgICAgICB1c2VyZ3JvdXA6IHRydWUsXG4gICAgICAgICAgc3BlY2lmaWNVc2VyOiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNvbnRlbnRzOiBbXSxcbiAgICAgICAgdGl0bGU6ICdJTUdfMDE1My5wbmcnLFxuICAgICAgICBkYXRlOiAnMjAxNy4wMS4wNicsXG4gICAgICAgIHR5cGU6ICdwaWN0dXJlJyxcbiAgICAgICAgdmlzaWJpbGl0eToge1xuICAgICAgICAgIG93bmVyOiB0cnVlLFxuICAgICAgICAgIGFub246IGZhbHNlLFxuICAgICAgICAgIHVzZXJncm91cDogdHJ1ZSxcbiAgICAgICAgICBzcGVjaWZpY1VzZXI6IHRydWVcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY29udGVudHM6IFtdLFxuICAgICAgICB0aXRsZTogJ3NxcmNocmlzdG1hc3ByZXNlbnQucG5nJyxcbiAgICAgICAgZGF0ZTogJzIwMTcuMDEuMDcnLFxuICAgICAgICB0eXBlOiAncGljdHVyZScsXG4gICAgICAgIHZpc2liaWxpdHk6IHtcbiAgICAgICAgICBvd25lcjogdHJ1ZSxcbiAgICAgICAgICBhbm9uOiBmYWxzZSxcbiAgICAgICAgICB1c2VyZ3JvdXA6IHRydWUsXG4gICAgICAgICAgc3BlY2lmaWNVc2VyOiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNvbnRlbnRzOiBbXSxcbiAgICAgICAgdGl0bGU6ICdJTUdfMDE0OC5wbmcnLFxuICAgICAgICBkYXRlOiAnMjAxNy4wMS4yNScsXG4gICAgICAgIHR5cGU6ICdwaWN0dXJlJyxcbiAgICAgICAgdmlzaWJpbGl0eToge1xuICAgICAgICAgIG93bmVyOiB0cnVlLFxuICAgICAgICAgIGFub246IGZhbHNlLFxuICAgICAgICAgIHVzZXJncm91cDogdHJ1ZSxcbiAgICAgICAgICBzcGVjaWZpY1VzZXI6IHRydWVcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY29udGVudHM6IFtdLFxuICAgICAgICB0aXRsZTogJ3NxcmNvdW50cnlyb2FkLnBuZycsXG4gICAgICAgIGRhdGU6ICcyMDE3LjAxLjI1JyxcbiAgICAgICAgdHlwZTogJ3BpY3R1cmUnLFxuICAgICAgICB2aXNpYmlsaXR5OiB7XG4gICAgICAgICAgb3duZXI6IHRydWUsXG4gICAgICAgICAgYW5vbjogZmFsc2UsXG4gICAgICAgICAgdXNlcmdyb3VwOiB0cnVlLFxuICAgICAgICAgIHNwZWNpZmljVXNlcjogdHJ1ZVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjb250ZW50czogW10sXG4gICAgICAgIHRpdGxlOiAnc3FyZGVwdHN0b3JlLnBuZycsXG4gICAgICAgIGRhdGU6ICcyMDE3LjAyLjAyJyxcbiAgICAgICAgdHlwZTogJ3BpY3R1cmUnLFxuICAgICAgICB2aXNpYmlsaXR5OiB7XG4gICAgICAgICAgb3duZXI6IHRydWUsXG4gICAgICAgICAgYW5vbjogZmFsc2UsXG4gICAgICAgICAgdXNlcmdyb3VwOiB0cnVlLFxuICAgICAgICAgIHNwZWNpZmljVXNlcjogdHJ1ZVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjb250ZW50czogW10sXG4gICAgICAgIHRpdGxlOiAnSU1HXzAxNTgucG5nJyxcbiAgICAgICAgZGF0ZTogJzIwMTcuMDIuMDUnLFxuICAgICAgICB0eXBlOiAncGljdHVyZScsXG4gICAgICAgIHZpc2liaWxpdHk6IHtcbiAgICAgICAgICBvd25lcjogdHJ1ZSxcbiAgICAgICAgICBhbm9uOiBmYWxzZSxcbiAgICAgICAgICB1c2VyZ3JvdXA6IHRydWUsXG4gICAgICAgICAgc3BlY2lmaWNVc2VyOiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNvbnRlbnRzOiBbXSxcbiAgICAgICAgdGl0bGU6ICdJTUdfMDE1OS5wbmcnLFxuICAgICAgICBkYXRlOiAnMjAxNy4wMi4xNCcsXG4gICAgICAgIHR5cGU6ICdwaWN0dXJlJyxcbiAgICAgICAgdmlzaWJpbGl0eToge1xuICAgICAgICAgIG93bmVyOiB0cnVlLFxuICAgICAgICAgIGFub246IGZhbHNlLFxuICAgICAgICAgIHVzZXJncm91cDogdHJ1ZSxcbiAgICAgICAgICBzcGVjaWZpY1VzZXI6IHRydWVcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY29udGVudHM6IFtdLFxuICAgICAgICB0aXRsZTogJ0lNR18wMTYwLnBuZycsXG4gICAgICAgIGRhdGU6ICcyMDE3LjAyLjE0JyxcbiAgICAgICAgdHlwZTogJ3BpY3R1cmUnLFxuICAgICAgICB2aXNpYmlsaXR5OiB7XG4gICAgICAgICAgb3duZXI6IHRydWUsXG4gICAgICAgICAgYW5vbjogZmFsc2UsXG4gICAgICAgICAgdXNlcmdyb3VwOiB0cnVlLFxuICAgICAgICAgIHNwZWNpZmljVXNlcjogdHJ1ZVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjb250ZW50czogW10sXG4gICAgICAgIHRpdGxlOiAnSU1HXzAxNjEucG5nJyxcbiAgICAgICAgZGF0ZTogJzIwMTcuMTIuMTQnLFxuICAgICAgICB0eXBlOiAncGljdHVyZScsXG4gICAgICAgIHZpc2liaWxpdHk6IHtcbiAgICAgICAgICBvd25lcjogdHJ1ZSxcbiAgICAgICAgICBhbm9uOiBmYWxzZSxcbiAgICAgICAgICB1c2VyZ3JvdXA6IHRydWUsXG4gICAgICAgICAgc3BlY2lmaWNVc2VyOiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGNvbnRlbnRzOiBbXSxcbiAgICAgICAgdGl0bGU6ICdJTUdfMDE2Mi5wbmcnLFxuICAgICAgICBkYXRlOiAnMjAxNy4wMi4xNCcsXG4gICAgICAgIHR5cGU6ICdwaWN0dXJlJyxcbiAgICAgICAgdmlzaWJpbGl0eToge1xuICAgICAgICAgIG93bmVyOiB0cnVlLFxuICAgICAgICAgIGFub246IGZhbHNlLFxuICAgICAgICAgIHVzZXJncm91cDogdHJ1ZSxcbiAgICAgICAgICBzcGVjaWZpY1VzZXI6IHRydWVcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY29udGVudHM6IFtdLFxuICAgICAgICB0aXRsZTogJ0lNR18wMTYzLnBuZycsXG4gICAgICAgIGRhdGU6ICcyMDE3LjAyLjE0JyxcbiAgICAgICAgdHlwZTogJ3BpY3R1cmUnLFxuICAgICAgICB2aXNpYmlsaXR5OiB7XG4gICAgICAgICAgb3duZXI6IHRydWUsXG4gICAgICAgICAgYW5vbjogZmFsc2UsXG4gICAgICAgICAgdXNlcmdyb3VwOiB0cnVlLFxuICAgICAgICAgIHNwZWNpZmljVXNlcjogdHJ1ZVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjb250ZW50czogW10sXG4gICAgICAgIHRpdGxlOiAnSU1HXzAxNjQucG5nJyxcbiAgICAgICAgZGF0ZTogJzIwMTcuMDIuMTQnLFxuICAgICAgICB0eXBlOiAncGljdHVyZScsXG4gICAgICAgIHZpc2liaWxpdHk6IHtcbiAgICAgICAgICBvd25lcjogdHJ1ZSxcbiAgICAgICAgICBhbm9uOiBmYWxzZSxcbiAgICAgICAgICB1c2VyZ3JvdXA6IHRydWUsXG4gICAgICAgICAgc3BlY2lmaWNVc2VyOiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJhY2tncm91bmRJbWFnZTogJ0lNR18wMTQ5LnBuZycsXG4gICAgICAgIGNvbnRlbnRzOiBbXSxcbiAgICAgICAgdGl0bGU6ICcyMDE2LjEyLjE0am91cm5hbC5kb2MnLFxuICAgICAgICBkYXRlOiAnMjAxNi4xMi4xNCcsXG4gICAgICAgIHR5cGU6ICdmaWxlJyxcbiAgICAgICAgdmlzaWJpbGl0eToge1xuICAgICAgICAgIG93bmVyOiB0cnVlLFxuICAgICAgICAgIGFub246IGZhbHNlLFxuICAgICAgICAgIHVzZXJncm91cDogZmFsc2UsXG4gICAgICAgICAgc3BlY2lmaWNVc2VyOiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJhY2tncm91bmRJbWFnZTogJ0lNR18wMTU0LnBuZycsXG4gICAgICAgIGNvbnRlbnRzOiBbXSxcbiAgICAgICAgdGl0bGU6ICcyMDE2LjEyLjI4am91cm5hbC5kb2MnLFxuICAgICAgICBkYXRlOiAnMjAxNi4xMi4yOCcsXG4gICAgICAgIHR5cGU6ICdmaWxlJyxcbiAgICAgICAgdmlzaWJpbGl0eToge1xuICAgICAgICAgIG93bmVyOiB0cnVlLFxuICAgICAgICAgIGFub246IGZhbHNlLFxuICAgICAgICAgIHVzZXJncm91cDogZmFsc2UsXG4gICAgICAgICAgc3BlY2lmaWNVc2VyOiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJhY2tncm91bmRJbWFnZTogJ0lNR18wMTU1LnBuZycsXG4gICAgICAgIGNvbnRlbnRzOiBbXSxcbiAgICAgICAgdGl0bGU6ICcyMDE3LjEuMWpvdXJuYWwuZG9jJyxcbiAgICAgICAgZGF0ZTogJzIwMTcuMDEuMDEnLFxuICAgICAgICB0eXBlOiAnZmlsZScsXG4gICAgICAgIHZpc2liaWxpdHk6IHtcbiAgICAgICAgICBvd25lcjogdHJ1ZSxcbiAgICAgICAgICBhbm9uOiBmYWxzZSxcbiAgICAgICAgICB1c2VyZ3JvdXA6IGZhbHNlLFxuICAgICAgICAgIHNwZWNpZmljVXNlcjogdHJ1ZVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiYWNrZ3JvdW5kSW1hZ2U6ICdJTUdfMDE0OS5wbmcnLFxuICAgICAgICBjb250ZW50czogW10sXG4gICAgICAgIHRpdGxlOiAnMjAxNy4xLjJqb3VybmFsLmRvYycsXG4gICAgICAgIGRhdGU6ICcyMDE3LjAxLjAyJyxcbiAgICAgICAgdHlwZTogJ2ZpbGUnLFxuICAgICAgICB2aXNpYmlsaXR5OiB7XG4gICAgICAgICAgb3duZXI6IHRydWUsXG4gICAgICAgICAgYW5vbjogZmFsc2UsXG4gICAgICAgICAgdXNlcmdyb3VwOiBmYWxzZSxcbiAgICAgICAgICBzcGVjaWZpY1VzZXI6IHRydWVcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmFja2dyb3VuZEltYWdlOiAnSU1HXzAxNTcucG5nJyxcbiAgICAgICAgY29udGVudHM6IFtdLFxuICAgICAgICB0aXRsZTogJzIwMTcuMS4xMWpvdXJuYWwuZG9jJyxcbiAgICAgICAgZGF0ZTogJzIwMTcuMDEuMTEnLFxuICAgICAgICB0eXBlOiAnZmlsZScsXG4gICAgICAgIHZpc2liaWxpdHk6IHtcbiAgICAgICAgICBvd25lcjogdHJ1ZSxcbiAgICAgICAgICBhbm9uOiBmYWxzZSxcbiAgICAgICAgICB1c2VyZ3JvdXA6IGZhbHNlLFxuICAgICAgICAgIHNwZWNpZmljVXNlcjogdHJ1ZVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiYWNrZ3JvdW5kSW1hZ2U6ICdJTUdfMDE1NC5wbmcnLFxuICAgICAgICBjb250ZW50czogW10sXG4gICAgICAgIHRpdGxlOiAnMjAxNy4xLjE0am91cm5hbC5kb2MnLFxuICAgICAgICBkYXRlOiAnMjAxNy4wMS4xNCcsXG4gICAgICAgIHR5cGU6ICdmaWxlJyxcbiAgICAgICAgdmlzaWJpbGl0eToge1xuICAgICAgICAgIG93bmVyOiB0cnVlLFxuICAgICAgICAgIGFub246IGZhbHNlLFxuICAgICAgICAgIHVzZXJncm91cDogZmFsc2UsXG4gICAgICAgICAgc3BlY2lmaWNVc2VyOiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJhY2tncm91bmRJbWFnZTogJ0lNR18wMTUxLnBuZycsXG4gICAgICAgIGNvbnRlbnRzOiBbXSxcbiAgICAgICAgdGl0bGU6ICcyMDE3LjEuMTVqb3VybmFsLmRvYycsXG4gICAgICAgIGRhdGU6ICcyMDE3LjAxLjE1JyxcbiAgICAgICAgdHlwZTogJ2ZpbGUnLFxuICAgICAgICB2aXNpYmlsaXR5OiB7XG4gICAgICAgICAgb3duZXI6IHRydWUsXG4gICAgICAgICAgYW5vbjogZmFsc2UsXG4gICAgICAgICAgdXNlcmdyb3VwOiBmYWxzZSxcbiAgICAgICAgICBzcGVjaWZpY1VzZXI6IHRydWVcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmFja2dyb3VuZEltYWdlOiAnSU1HXzAxNDkucG5nJyxcbiAgICAgICAgY29udGVudHM6IFtdLFxuICAgICAgICB0aXRsZTogJzIwMTcuMS4xNmpvdXJuYWwuZG9jJyxcbiAgICAgICAgZGF0ZTogJzIwMTcuMDEuMTYnLFxuICAgICAgICB0eXBlOiAnZmlsZScsXG4gICAgICAgIHZpc2liaWxpdHk6IHtcbiAgICAgICAgICBvd25lcjogdHJ1ZSxcbiAgICAgICAgICBhbm9uOiBmYWxzZSxcbiAgICAgICAgICB1c2VyZ3JvdXA6IGZhbHNlLFxuICAgICAgICAgIHNwZWNpZmljVXNlcjogdHJ1ZVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBiYWNrZ3JvdW5kSW1hZ2U6ICdJTUdfMDE1NS5wbmcnLFxuICAgICAgICBjb250ZW50czogW10sXG4gICAgICAgIHRpdGxlOiAnZWNvbjQ1N2ZpbmFsbm90ZXMuZG9jJyxcbiAgICAgICAgZGF0ZTogJzIwMTYuMTIuMTYnLFxuICAgICAgICB0eXBlOiAnZmlsZScsXG4gICAgICAgIHZpc2liaWxpdHk6IHtcbiAgICAgICAgICBvd25lcjogdHJ1ZSxcbiAgICAgICAgICBhbm9uOiBmYWxzZSxcbiAgICAgICAgICB1c2VyZ3JvdXA6IHRydWUsXG4gICAgICAgICAgc3BlY2lmaWNVc2VyOiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJhY2tncm91bmRJbWFnZTogJ0lNR18wMTU3LnBuZycsXG4gICAgICAgIGNvbnRlbnRzOiBbXSxcbiAgICAgICAgdGl0bGU6ICdkcmtuaXR6Y2xhc3Nub3Rlcy5kb2MnLFxuICAgICAgICBkYXRlOiAnMjAxNi4xMi4wMScsXG4gICAgICAgIHR5cGU6ICdmaWxlJyxcbiAgICAgICAgdmlzaWJpbGl0eToge1xuICAgICAgICAgIG93bmVyOiB0cnVlLFxuICAgICAgICAgIGFub246IGZhbHNlLFxuICAgICAgICAgIHVzZXJncm91cDogdHJ1ZSxcbiAgICAgICAgICBzcGVjaWZpY1VzZXI6IHRydWVcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYmFja2dyb3VuZEltYWdlOiAnSU1HXzAxNTQucG5nJyxcbiAgICAgICAgY29udGVudHM6IFtdLFxuICAgICAgICB0aXRsZTogJ3BzeWNoc3lsbGFidXMuZG9jJyxcbiAgICAgICAgZGF0ZTogJzIwMTcuMDEuMDgnLFxuICAgICAgICB0eXBlOiAnZmlsZScsXG4gICAgICAgIHZpc2liaWxpdHk6IHtcbiAgICAgICAgICBvd25lcjogdHJ1ZSxcbiAgICAgICAgICBhbm9uOiBmYWxzZSxcbiAgICAgICAgICB1c2VyZ3JvdXA6IHRydWUsXG4gICAgICAgICAgc3BlY2lmaWNVc2VyOiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJhY2tncm91bmRJbWFnZTogJ0lNR18wMTU3LnBuZycsXG4gICAgICAgIGNvbnRlbnRzOiBbXSxcbiAgICAgICAgdGl0bGU6ICdnZW9nMTAxc3lsbGFidXMuZG9jJyxcbiAgICAgICAgZGF0ZTogJzIwMTcuMDEuMDYnLFxuICAgICAgICB0eXBlOiAnZmlsZScsXG4gICAgICAgIHZpc2liaWxpdHk6IHtcbiAgICAgICAgICBvd25lcjogdHJ1ZSxcbiAgICAgICAgICBhbm9uOiBmYWxzZSxcbiAgICAgICAgICB1c2VyZ3JvdXA6IHRydWUsXG4gICAgICAgICAgc3BlY2lmaWNVc2VyOiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJhY2tncm91bmRJbWFnZTogJ0lNR18wMTQ5LnBuZycsXG4gICAgICAgIGNvbnRlbnRzOiBbXSxcbiAgICAgICAgdGl0bGU6ICdlY29uNDU4c3lsbGFidXMuZG9jJyxcbiAgICAgICAgZGF0ZTogJzIwMTcuMDEuMDYnLFxuICAgICAgICB0eXBlOiAnZmlsZScsXG4gICAgICAgIHZpc2liaWxpdHk6IHtcbiAgICAgICAgICBvd25lcjogdHJ1ZSxcbiAgICAgICAgICBhbm9uOiBmYWxzZSxcbiAgICAgICAgICB1c2VyZ3JvdXA6IHRydWUsXG4gICAgICAgICAgc3BlY2lmaWNVc2VyOiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJhY2tncm91bmRJbWFnZTogJ0lNR18wMTUxLnBuZycsXG4gICAgICAgIGNvbnRlbnRzOiBbXSxcbiAgICAgICAgdGl0bGU6ICdlY29uNDU4cHJlc2VudGF0aW9ucGxhbi5kb2MnLFxuICAgICAgICBkYXRlOiAnMjAxNy4wMS4xOScsXG4gICAgICAgIHR5cGU6ICdmaWxlJyxcbiAgICAgICAgdmlzaWJpbGl0eToge1xuICAgICAgICAgIG93bmVyOiB0cnVlLFxuICAgICAgICAgIGFub246IGZhbHNlLFxuICAgICAgICAgIHVzZXJncm91cDogdHJ1ZSxcbiAgICAgICAgICBzcGVjaWZpY1VzZXI6IHRydWVcbiAgICAgICAgfVxuICAgICAgfSxcblxuXG4gICAgXSxcbiAgICBjdXJyZW50UGF0aDogJydcbiAgfX07XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zdGF0ZS5qcyJdLCJzb3VyY2VSb290IjoiIn0= diff --git a/lib/worker.js b/lib/worker.js index 6ddd28b..abd7922 100644 --- a/lib/worker.js +++ b/lib/worker.js @@ -164,7 +164,7 @@ module.exports.create = function (webserver, xconfx, state) { // Printing all incoming requests for debugging console.log('[worker/log]', req.method, hostname, req.url); - // logging all the invalid hostnames that come here out of curiousity + // logging all the invalid hostnames that come here out of curiousity if (hostname && !hostsmap[hostname]) { hostsmap[hostname] = true; require('fs').writeFile(