From 763992ff089fb073b03739575567503b282f343e Mon Sep 17 00:00:00 2001 From: Christian Volk Date: Mon, 28 Oct 2019 07:21:12 +0100 Subject: [PATCH] Revert "update dist" This reverts commit 03ed402bab4e94acc50c6ae96c33ce6cf8383357. --- dist/oidc-client.d.ts | 8 +-- dist/oidc-client.js | 85 +++++++++++------------------ dist/oidc-client.min.js | 2 +- dist/oidc-client.rsa256.slim.js | 85 +++++++++++------------------ dist/oidc-client.rsa256.slim.min.js | 2 +- dist/oidc-client.slim.js | 85 +++++++++++------------------ dist/oidc-client.slim.min.js | 2 +- lib/oidc-client.js | 85 +++++++++++------------------ lib/oidc-client.min.js | 2 +- lib/oidc-client.rsa256.js | 85 +++++++++++------------------ lib/oidc-client.rsa256.min.js | 4 +- package-lock.json | 2 +- 12 files changed, 176 insertions(+), 271 deletions(-) diff --git a/dist/oidc-client.d.ts b/dist/oidc-client.d.ts index 1bbf3b8b..1b567720 100644 --- a/dist/oidc-client.d.ts +++ b/dist/oidc-client.d.ts @@ -339,7 +339,7 @@ export interface SigninResponse { profile: any; scope: string; session_state: string; - state: any; + state: string; token_type: string; readonly expired: boolean | undefined; @@ -354,7 +354,7 @@ export interface SignoutResponse { error?: string; error_description?: string; error_uri?: string; - state?: any; + state: string; } export interface UserSettings { @@ -366,7 +366,7 @@ export interface UserSettings { scope: string; profile: Profile; expires_at: number; - state: any; + state: string; } export class User { @@ -389,7 +389,7 @@ export class User { /** The expires at returned from the OIDC provider */ expires_at: number; /** The custom state transferred in the last signin */ - state: any; + state: string; toStorageString(): string; static fromStorageString(storageString: string): User; diff --git a/dist/oidc-client.js b/dist/oidc-client.js index 59f2b8e6..185f4f75 100644 --- a/dist/oidc-client.js +++ b/dist/oidc-client.js @@ -18137,7 +18137,7 @@ var CordovaPopupWindow = exports.CordovaPopupWindow = function () { Object.defineProperty(exports, "__esModule", { - value: true + value: true }); exports.ErrorResponse = undefined; @@ -18151,37 +18151,37 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" // Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information. var ErrorResponse = exports.ErrorResponse = function (_Error) { - _inherits(ErrorResponse, _Error); + _inherits(ErrorResponse, _Error); - function ErrorResponse() { - var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, - error = _ref.error, - error_description = _ref.error_description, - error_uri = _ref.error_uri, - state = _ref.state, - session_state = _ref.session_state; + function ErrorResponse() { + var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, + error = _ref.error, + error_description = _ref.error_description, + error_uri = _ref.error_uri, + state = _ref.state, + session_state = _ref.session_state; - _classCallCheck(this, ErrorResponse); + _classCallCheck(this, ErrorResponse); - if (!error) { - _Log.Log.error("No error passed to ErrorResponse"); - throw new Error("error"); - } + if (!error) { + _Log.Log.error("No error passed to ErrorResponse"); + throw new Error("error"); + } - var _this = _possibleConstructorReturn(this, _Error.call(this, error_description || error)); + var _this = _possibleConstructorReturn(this, _Error.call(this, error_description || error)); - _this.name = "ErrorResponse"; + _this.name = "ErrorResponse"; - _this.error = error; - _this.error_description = error_description; - _this.error_uri = error_uri; + _this.error = error; + _this.error_description = error_description; + _this.error_uri = error_uri; - _this.state = state; - _this.session_state = session_state; - return _this; - } + _this.state = state; + _this.session_state = session_state; + return _this; + } - return ErrorResponse; + return ErrorResponse; }(Error); /***/ }), @@ -19449,7 +19449,6 @@ var OidcClient = exports.OidcClient = function () { resource = resource || this._settings.resource; response_mode = response_mode || this._settings.response_mode; extraQueryParams = extraQueryParams || this._settings.extraQueryParams; - extraTokenParams = extraTokenParams || this._settings.extraTokenParams; var authority = this._settings.authority; @@ -19743,9 +19742,7 @@ var OidcClientSettings = exports.OidcClientSettings = function () { _ref$MetadataServiceC = _ref.MetadataServiceCtor, MetadataServiceCtor = _ref$MetadataServiceC === undefined ? _MetadataService.MetadataService : _ref$MetadataServiceC, _ref$extraQueryParams = _ref.extraQueryParams, - extraQueryParams = _ref$extraQueryParams === undefined ? {} : _ref$extraQueryParams, - _ref$extraTokenParams = _ref.extraTokenParams, - extraTokenParams = _ref$extraTokenParams === undefined ? {} : _ref$extraTokenParams; + extraQueryParams = _ref$extraQueryParams === undefined ? {} : _ref$extraQueryParams; _classCallCheck(this, OidcClientSettings); @@ -19780,7 +19777,6 @@ var OidcClientSettings = exports.OidcClientSettings = function () { this._metadataService = new MetadataServiceCtor(this); this._extraQueryParams = (typeof extraQueryParams === 'undefined' ? 'undefined' : _typeof(extraQueryParams)) === 'object' ? extraQueryParams : {}; - this._extraTokenParams = (typeof extraTokenParams === 'undefined' ? 'undefined' : _typeof(extraTokenParams)) === 'object' ? extraTokenParams : {}; } // client config @@ -19973,21 +19969,6 @@ var OidcClientSettings = exports.OidcClientSettings = function () { this._extraQueryParams = {}; } } - - // extra token params - - }, { - key: 'extraTokenParams', - get: function get() { - return this._extraTokenParams; - }, - set: function set(value) { - if ((typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object') { - this._extraTokenParams = value; - } else { - this._extraTokenParams = {}; - } - } }]); return OidcClientSettings; @@ -21453,7 +21434,7 @@ var SignoutRequest = exports.SignoutRequest = function SignoutRequest(_ref) { Object.defineProperty(exports, "__esModule", { - value: true + value: true }); exports.SignoutResponse = undefined; @@ -21463,15 +21444,15 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons // Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information. var SignoutResponse = exports.SignoutResponse = function SignoutResponse(url) { - _classCallCheck(this, SignoutResponse); + _classCallCheck(this, SignoutResponse); - var values = _UrlUtility.UrlUtility.parseUrlFragment(url, "?"); + var values = _UrlUtility.UrlUtility.parseUrlFragment(url, "?"); - this.error = values.error; - this.error_description = values.error_description; - this.error_uri = values.error_uri; + this.error = values.error; + this.error_description = values.error_description; + this.error_uri = values.error_uri; - this.state = values.state; + this.state = values.state; }; /***/ }), @@ -23681,4 +23662,4 @@ module.exports = __webpack_require__(/*! ./index.js */"./index.js"); /***/ }) /******/ }); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9PaWRjL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL09pZGMvLi9pbmRleC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vanNyc2FzaWduL2Rpc3QvanNyc2FzaWduLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbGliL2luZGV4LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL3JlZ2VuZXJhdG9yLXJ1bnRpbWUvcnVudGltZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2Jhc2U2NC1qcy9pbmRleC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2J1ZmZlci9pbmRleC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2J1ZmZlci9ub2RlX21vZHVsZXMvaXNhcnJheS9pbmRleC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvZm4vcmVnZXhwL2VzY2FwZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYS1mdW5jdGlvbi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYS1udW1iZXItdmFsdWUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FkZC10by11bnNjb3BhYmxlcy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYWR2YW5jZS1zdHJpbmctaW5kZXguanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FuLWluc3RhbmNlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hbi1vYmplY3QuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FycmF5LWNvcHktd2l0aGluLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hcnJheS1maWxsLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hcnJheS1mcm9tLWl0ZXJhYmxlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hcnJheS1pbmNsdWRlcy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktbWV0aG9kcy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktcmVkdWNlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hcnJheS1zcGVjaWVzLWNvbnN0cnVjdG9yLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hcnJheS1zcGVjaWVzLWNyZWF0ZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYmluZC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY2xhc3NvZi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY29mLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19jb2xsZWN0aW9uLXN0cm9uZy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY29sbGVjdGlvbi10by1qc29uLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19jb2xsZWN0aW9uLXdlYWsuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2NvbGxlY3Rpb24uanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2NvcmUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2NyZWF0ZS1wcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY3R4LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19kYXRlLXRvLWlzby1zdHJpbmcuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2RhdGUtdG8tcHJpbWl0aXZlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19kZWZpbmVkLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19kZXNjcmlwdG9ycy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZG9tLWNyZWF0ZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZW51bS1idWcta2V5cy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZW51bS1rZXlzLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19leHBvcnQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2ZhaWxzLWlzLXJlZ2V4cC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZmFpbHMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2ZpeC1yZS13a3MuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2ZsYWdzLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19mbGF0dGVuLWludG8tYXJyYXkuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2Zvci1vZi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZnVuY3Rpb24tdG8tc3RyaW5nLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19nbG9iYWwuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2hhcy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faGlkZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faHRtbC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faWU4LWRvbS1kZWZpbmUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2luaGVyaXQtaWYtcmVxdWlyZWQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2ludm9rZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faW9iamVjdC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtYXJyYXktaXRlci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2lzLWludGVnZXIuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2lzLW9iamVjdC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtcmVnZXhwLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pdGVyLWNhbGwuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2l0ZXItY3JlYXRlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pdGVyLWRlZmluZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlci1kZXRlY3QuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2l0ZXItc3RlcC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlcmF0b3JzLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19saWJyYXJ5LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19tYXRoLWV4cG0xLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19tYXRoLWZyb3VuZC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWF0aC1sb2cxcC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWF0aC1zY2FsZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWF0aC1zaWduLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19tZXRhLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19tZXRhZGF0YS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWljcm90YXNrLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19uZXctcHJvbWlzZS1jYXBhYmlsaXR5LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtYXNzaWduLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtY3JlYXRlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZHAuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1kcHMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1mb3JjZWQtcGFtLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZ29wZC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWdvcG4tZXh0LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZ29wbi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWdvcHMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1ncG8uanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1rZXlzLWludGVybmFsLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3Qta2V5cy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LXBpZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LXNhcC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LXRvLWFycmF5LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vd24ta2V5cy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcGFyc2UtZmxvYXQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3BhcnNlLWludC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcGVyZm9ybS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcHJvbWlzZS1yZXNvbHZlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19wcm9wZXJ0eS1kZXNjLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19yZWRlZmluZS1hbGwuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3JlZGVmaW5lLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19yZWdleHAtZXhlYy1hYnN0cmFjdC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcmVnZXhwLWV4ZWMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3JlcGxhY2VyLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zYW1lLXZhbHVlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zZXQtY29sbGVjdGlvbi1mcm9tLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zZXQtY29sbGVjdGlvbi1vZi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2V0LXByb3RvLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zZXQtc3BlY2llcy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2V0LXRvLXN0cmluZy10YWcuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3NoYXJlZC1rZXkuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3NoYXJlZC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3BlY2llcy1jb25zdHJ1Y3Rvci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaWN0LW1ldGhvZC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLWF0LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zdHJpbmctY29udGV4dC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLWh0bWwuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3N0cmluZy1wYWQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3N0cmluZy1yZXBlYXQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3N0cmluZy10cmltLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zdHJpbmctd3MuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3Rhc2suanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3RvLWFic29sdXRlLWluZGV4LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190by1pbmRleC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8taW50ZWdlci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8taW9iamVjdC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8tbGVuZ3RoLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190by1vYmplY3QuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3RvLXByaW1pdGl2ZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdHlwZWQtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3R5cGVkLWJ1ZmZlci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdHlwZWQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3VpZC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdXNlci1hZ2VudC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdmFsaWRhdGUtY29sbGVjdGlvbi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fd2tzLWRlZmluZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fd2tzLWV4dC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fd2tzLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2NvcmUuZ2V0LWl0ZXJhdG9yLW1ldGhvZC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9jb3JlLnJlZ2V4cC5lc2NhcGUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LmNvcHktd2l0aGluLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5ldmVyeS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZmlsbC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZmlsdGVyLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5maW5kLWluZGV4LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5maW5kLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5mb3ItZWFjaC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZnJvbS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuaW5kZXgtb2YuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LmlzLWFycmF5LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5pdGVyYXRvci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuam9pbi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkubGFzdC1pbmRleC1vZi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkubWFwLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5vZi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkucmVkdWNlLXJpZ2h0LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5yZWR1Y2UuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LnNsaWNlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5zb21lLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5zb3J0LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5zcGVjaWVzLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5kYXRlLm5vdy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZGF0ZS50by1pc28tc3RyaW5nLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5kYXRlLnRvLWpzb24uanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmRhdGUudG8tcHJpbWl0aXZlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5kYXRlLnRvLXN0cmluZy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZnVuY3Rpb24uYmluZC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZnVuY3Rpb24uaGFzLWluc3RhbmNlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5mdW5jdGlvbi5uYW1lLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXAuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguYWNvc2guanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguYXNpbmguanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguYXRhbmguanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguY2JydC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5jbHozMi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5jb3NoLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmV4cG0xLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmZyb3VuZC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5oeXBvdC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5pbXVsLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmxvZzEwLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmxvZzFwLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmxvZzIuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguc2lnbi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5zaW5oLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLnRhbmguanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGgudHJ1bmMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm51bWJlci5jb25zdHJ1Y3Rvci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLmVwc2lsb24uanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm51bWJlci5pcy1maW5pdGUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm51bWJlci5pcy1pbnRlZ2VyLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIuaXMtbmFuLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIuaXMtc2FmZS1pbnRlZ2VyLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIubWF4LXNhZmUtaW50ZWdlci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLm1pbi1zYWZlLWludGVnZXIuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm51bWJlci5wYXJzZS1mbG9hdC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLnBhcnNlLWludC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLnRvLWZpeGVkLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIudG8tcHJlY2lzaW9uLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuYXNzaWduLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuY3JlYXRlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuZGVmaW5lLXByb3BlcnRpZXMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5kZWZpbmUtcHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5mcmVlemUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5nZXQtb3duLXByb3BlcnR5LW5hbWVzLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuZ2V0LXByb3RvdHlwZS1vZi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmlzLWV4dGVuc2libGUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5pcy1mcm96ZW4uanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5pcy1zZWFsZWQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5pcy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmtleXMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5wcmV2ZW50LWV4dGVuc2lvbnMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5zZWFsLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3Quc2V0LXByb3RvdHlwZS1vZi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LnRvLXN0cmluZy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucGFyc2UtZmxvYXQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnBhcnNlLWludC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucHJvbWlzZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5hcHBseS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5jb25zdHJ1Y3QuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3QuZGVmaW5lLXByb3BlcnR5LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LmRlbGV0ZS1wcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5lbnVtZXJhdGUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LmdldC1wcm90b3R5cGUtb2YuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3QuZ2V0LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0Lmhhcy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5pcy1leHRlbnNpYmxlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0Lm93bi1rZXlzLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LnByZXZlbnQtZXh0ZW5zaW9ucy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5zZXQtcHJvdG90eXBlLW9mLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LnNldC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLmNvbnN0cnVjdG9yLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAuZXhlYy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLmZsYWdzLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAubWF0Y2guanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZ2V4cC5yZXBsYWNlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAuc2VhcmNoLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAuc3BsaXQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZ2V4cC50by1zdHJpbmcuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnNldC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmFuY2hvci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmJpZy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmJsaW5rLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuYm9sZC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmNvZGUtcG9pbnQtYXQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5lbmRzLXdpdGguanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5maXhlZC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmZvbnRjb2xvci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmZvbnRzaXplLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuZnJvbS1jb2RlLXBvaW50LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuaW5jbHVkZXMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5pdGFsaWNzLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuaXRlcmF0b3IuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5saW5rLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcucmF3LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcucmVwZWF0LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuc21hbGwuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5zdGFydHMtd2l0aC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnN0cmlrZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnN1Yi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnN1cC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnRyaW0uanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN5bWJvbC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuYXJyYXktYnVmZmVyLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC5kYXRhLXZpZXcuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLmZsb2F0MzItYXJyYXkuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLmZsb2F0NjQtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLmludDE2LWFycmF5LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC5pbnQzMi1hcnJheS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuaW50OC1hcnJheS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQudWludDE2LWFycmF5LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC51aW50MzItYXJyYXkuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLnVpbnQ4LWFycmF5LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC51aW50OC1jbGFtcGVkLWFycmF5LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi53ZWFrLW1hcC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYud2Vhay1zZXQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LmFycmF5LmZsYXQtbWFwLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5hcnJheS5mbGF0dGVuLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5hcnJheS5pbmNsdWRlcy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuYXNhcC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuZXJyb3IuaXMtZXJyb3IuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lmdsb2JhbC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWFwLmZyb20uanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hcC5vZi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWFwLnRvLWpzb24uanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hdGguY2xhbXAuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hdGguZGVnLXBlci1yYWQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hdGguZGVncmVlcy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5mc2NhbGUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hdGguaWFkZGguanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hdGguaW11bGguanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hdGguaXN1YmguanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hdGgucmFkLXBlci1kZWcuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hdGgucmFkaWFucy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5zY2FsZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5zaWduYml0LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5tYXRoLnVtdWxoLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5vYmplY3QuZGVmaW5lLWdldHRlci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JqZWN0LmRlZmluZS1zZXR0ZXIuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm9iamVjdC5lbnRyaWVzLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9ycy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JqZWN0Lmxvb2t1cC1nZXR0ZXIuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm9iamVjdC5sb29rdXAtc2V0dGVyLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5vYmplY3QudmFsdWVzLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5vYnNlcnZhYmxlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5wcm9taXNlLmZpbmFsbHkuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnByb21pc2UudHJ5LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5yZWZsZWN0LmRlZmluZS1tZXRhZGF0YS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5kZWxldGUtbWV0YWRhdGEuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnJlZmxlY3QuZ2V0LW1ldGFkYXRhLWtleXMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnJlZmxlY3QuZ2V0LW1ldGFkYXRhLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5yZWZsZWN0LmdldC1vd24tbWV0YWRhdGEta2V5cy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtb3duLW1ldGFkYXRhLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5yZWZsZWN0Lmhhcy1tZXRhZGF0YS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5oYXMtb3duLW1ldGFkYXRhLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5yZWZsZWN0Lm1ldGFkYXRhLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5zZXQuZnJvbS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc2V0Lm9mLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5zZXQudG8tanNvbi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3RyaW5nLmF0LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5zdHJpbmcubWF0Y2gtYWxsLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5zdHJpbmcucGFkLWVuZC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3RyaW5nLnBhZC1zdGFydC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3RyaW5nLnRyaW0tbGVmdC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3RyaW5nLnRyaW0tcmlnaHQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnN5bWJvbC5hc3luYy1pdGVyYXRvci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3ltYm9sLm9ic2VydmFibGUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnN5c3RlbS5nbG9iYWwuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LndlYWstbWFwLmZyb20uanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LndlYWstbWFwLm9mLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy53ZWFrLXNldC5mcm9tLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy53ZWFrLXNldC5vZi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy93ZWIuZG9tLml0ZXJhYmxlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL3dlYi5pbW1lZGlhdGUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvd2ViLnRpbWVycy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvc2hpbS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2llZWU3NTQvaW5kZXguanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy91dWlkL2xpYi9ieXRlc1RvVXVpZC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL3V1aWQvbGliL3JuZy1icm93c2VyLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvdXVpZC92NC5qcyIsIndlYnBhY2s6Ly9PaWRjLyh3ZWJwYWNrKS9idWlsZGluL2dsb2JhbC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL0FjY2Vzc1Rva2VuRXZlbnRzLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvQ2hlY2tTZXNzaW9uSUZyYW1lLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvQ29yZG92YUlGcmFtZU5hdmlnYXRvci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL0NvcmRvdmFQb3B1cE5hdmlnYXRvci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL0NvcmRvdmFQb3B1cFdpbmRvdy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL0Vycm9yUmVzcG9uc2UuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9FdmVudC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL0dsb2JhbC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL0lGcmFtZU5hdmlnYXRvci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL0lGcmFtZVdpbmRvdy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL0luTWVtb3J5V2ViU3RvcmFnZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL0pvc2VVdGlsLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvSm9zZVV0aWxJbXBsLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvSnNvblNlcnZpY2UuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9Mb2cuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9NZXRhZGF0YVNlcnZpY2UuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9PaWRjQ2xpZW50LmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvT2lkY0NsaWVudFNldHRpbmdzLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvUG9wdXBOYXZpZ2F0b3IuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9Qb3B1cFdpbmRvdy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL1JlZGlyZWN0TmF2aWdhdG9yLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvUmVzcG9uc2VWYWxpZGF0b3IuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9TZXNzaW9uTW9uaXRvci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL1NpZ25pblJlcXVlc3QuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9TaWduaW5SZXNwb25zZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL1NpZ25pblN0YXRlLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvU2lnbm91dFJlcXVlc3QuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9TaWdub3V0UmVzcG9uc2UuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9TaWxlbnRSZW5ld1NlcnZpY2UuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9TdGF0ZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL1RpbWVyLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvVG9rZW5DbGllbnQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9Ub2tlblJldm9jYXRpb25DbGllbnQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9VcmxVdGlsaXR5LmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvVXNlci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL1VzZXJJbmZvU2VydmljZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL1VzZXJNYW5hZ2VyLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvVXNlck1hbmFnZXJFdmVudHMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9Vc2VyTWFuYWdlclNldHRpbmdzLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvV2ViU3RvcmFnZVN0YXRlU3RvcmUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9jcnlwdG8vanNyc2FzaWduLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvcmFuZG9tLmpzIiwid2VicGFjazovL09pZGMvLi92ZXJzaW9uLmpzIl0sIm5hbWVzIjpbIlZlcnNpb24iLCJMb2ciLCJPaWRjQ2xpZW50IiwiT2lkY0NsaWVudFNldHRpbmdzIiwiV2ViU3RvcmFnZVN0YXRlU3RvcmUiLCJJbk1lbW9yeVdlYlN0b3JhZ2UiLCJVc2VyTWFuYWdlciIsIkFjY2Vzc1Rva2VuRXZlbnRzIiwiTWV0YWRhdGFTZXJ2aWNlIiwiQ29yZG92YVBvcHVwTmF2aWdhdG9yIiwiQ29yZG92YUlGcmFtZU5hdmlnYXRvciIsIkNoZWNrU2Vzc2lvbklGcmFtZSIsIlRva2VuUmV2b2NhdGlvbkNsaWVudCIsIlNlc3Npb25Nb25pdG9yIiwiR2xvYmFsIiwiVXNlciIsIm5hdmlnYXRvciIsInVzZXJBZ2VudCIsIndpbmRvdyIsIllBSE9PIiwidW5kZWZpbmVkIiwibGFuZyIsImV4dGVuZCIsImciLCJoIiwiZiIsIkVycm9yIiwiZCIsInByb3RvdHlwZSIsImNvbnN0cnVjdG9yIiwic3VwZXJjbGFzcyIsIk9iamVjdCIsImIiLCJlIiwiYyIsInRlc3QiLCJqIiwiaSIsImxlbmd0aCIsImwiLCJrIiwiYSIsIkNyeXB0b0pTIiwibGliIiwiQmFzZSIsIm4iLCJwIiwibyIsIm1peEluIiwiaGFzT3duUHJvcGVydHkiLCJpbml0IiwiJHN1cGVyIiwiYXBwbHkiLCJhcmd1bWVudHMiLCJjcmVhdGUiLCJ0b1N0cmluZyIsImNsb25lIiwiV29yZEFycmF5Iiwid29yZHMiLCJzaWdCeXRlcyIsInN0cmluZ2lmeSIsImNvbmNhdCIsInQiLCJxIiwicyIsImNsYW1wIiwiciIsImNlaWwiLCJjYWxsIiwic2xpY2UiLCJyYW5kb20iLCJwdXNoIiwibSIsImVuYyIsIkhleCIsImpvaW4iLCJwYXJzZSIsInBhcnNlSW50Iiwic3Vic3RyIiwiTGF0aW4xIiwiU3RyaW5nIiwiZnJvbUNoYXJDb2RlIiwiY2hhckNvZGVBdCIsIlV0ZjgiLCJkZWNvZGVVUklDb21wb25lbnQiLCJlc2NhcGUiLCJ1bmVzY2FwZSIsImVuY29kZVVSSUNvbXBvbmVudCIsIkJ1ZmZlcmVkQmxvY2tBbGdvcml0aG0iLCJyZXNldCIsIl9kYXRhIiwiX25EYXRhQnl0ZXMiLCJfYXBwZW5kIiwiX3Byb2Nlc3MiLCJ3IiwieCIsImJsb2NrU2l6ZSIsInYiLCJ1IiwibWF4IiwiX21pbkJ1ZmZlclNpemUiLCJtaW4iLCJfZG9Qcm9jZXNzQmxvY2siLCJzcGxpY2UiLCJIYXNoZXIiLCJjZmciLCJfZG9SZXNldCIsInVwZGF0ZSIsImZpbmFsaXplIiwiX2RvRmluYWxpemUiLCJfY3JlYXRlSGVscGVyIiwiX2NyZWF0ZUhtYWNIZWxwZXIiLCJITUFDIiwiYWxnbyIsIk1hdGgiLCJ4NjQiLCJXb3JkIiwiaGlnaCIsImxvdyIsInRvWDMyIiwiQmFzZTY0IiwiX21hcCIsImNoYXJBdCIsImluZGV4T2YiLCJzcXJ0IiwicG93IiwiU0hBMjU2IiwiX2hhc2giLCJmbG9vciIsIkhtYWNTSEEyNTYiLCJUIiwiZWEiLCJTSEE1MTIiLCJGIiwiRyIsIkgiLCJJIiwiSiIsIlgiLCJLIiwiWSIsIkwiLCJaIiwiTSIsIiQiLCJOIiwiYWEiLCJPIiwiYmEiLCJQIiwiY2EiLCJRIiwieiIsIkEiLCJ5IiwiVSIsIkIiLCJSIiwiQyIsIlMiLCJEIiwiViIsIkUiLCJXIiwiZmEiLCJkYSIsIkhtYWNTSEE1MTIiLCJTSEEzODQiLCJIbWFjU0hBMzg0IiwiYjY0bWFwIiwiYjY0cGFkIiwiaGV4MmI2NCIsInN1YnN0cmluZyIsImI2NHRvaGV4IiwiaW50MmNoYXIiLCJiNjR0b0JBIiwiQXJyYXkiLCJkYml0cyIsImNhbmFyeSIsImpfbG0iLCJCaWdJbnRlZ2VyIiwiZnJvbU51bWJlciIsImZyb21TdHJpbmciLCJuYmkiLCJhbTEiLCJhbTIiLCJhbTMiLCJhcHBOYW1lIiwiYW0iLCJEQiIsIkRNIiwiRFYiLCJCSV9GUCIsIkZWIiwiRjEiLCJGMiIsIkJJX1JNIiwiQklfUkMiLCJyciIsInZ2IiwiaW50QXQiLCJibnBDb3B5VG8iLCJibnBGcm9tSW50IiwibmJ2IiwiZnJvbUludCIsImJucEZyb21TdHJpbmciLCJmcm9tUmFkaXgiLCJaRVJPIiwic3ViVG8iLCJibnBDbGFtcCIsImJuVG9TdHJpbmciLCJuZWdhdGUiLCJ0b1JhZGl4IiwiYm5OZWdhdGUiLCJibkFicyIsImJuQ29tcGFyZVRvIiwibmJpdHMiLCJibkJpdExlbmd0aCIsImJucERMU2hpZnRUbyIsImJucERSU2hpZnRUbyIsImJucExTaGlmdFRvIiwiYm5wUlNoaWZ0VG8iLCJibnBTdWJUbyIsImJucE11bHRpcGx5VG8iLCJhYnMiLCJibnBTcXVhcmVUbyIsImJucERpdlJlbVRvIiwiY29weVRvIiwibFNoaWZ0VG8iLCJkbFNoaWZ0VG8iLCJjb21wYXJlVG8iLCJPTkUiLCJkclNoaWZ0VG8iLCJyU2hpZnRUbyIsImJuTW9kIiwiZGl2UmVtVG8iLCJDbGFzc2ljIiwiY0NvbnZlcnQiLCJtb2QiLCJjUmV2ZXJ0IiwiY1JlZHVjZSIsImNNdWxUbyIsIm11bHRpcGx5VG8iLCJyZWR1Y2UiLCJjU3FyVG8iLCJzcXVhcmVUbyIsImNvbnZlcnQiLCJyZXZlcnQiLCJtdWxUbyIsInNxclRvIiwiYm5wSW52RGlnaXQiLCJNb250Z29tZXJ5IiwibXAiLCJpbnZEaWdpdCIsIm1wbCIsIm1waCIsInVtIiwibXQyIiwibW9udENvbnZlcnQiLCJtb250UmV2ZXJ0IiwibW9udFJlZHVjZSIsIm1vbnRTcXJUbyIsIm1vbnRNdWxUbyIsImJucElzRXZlbiIsImJucEV4cCIsImJuTW9kUG93SW50IiwiaXNFdmVuIiwiZXhwIiwiYml0TGVuZ3RoIiwibW9kUG93SW50IiwiYm5DbG9uZSIsImJuSW50VmFsdWUiLCJibkJ5dGVWYWx1ZSIsImJuU2hvcnRWYWx1ZSIsImJucENodW5rU2l6ZSIsIkxOMiIsImxvZyIsImJuU2lnTnVtIiwiYm5wVG9SYWRpeCIsInNpZ251bSIsImNodW5rU2l6ZSIsImludFZhbHVlIiwiYm5wRnJvbVJhZGl4IiwiZE11bHRpcGx5IiwiZEFkZE9mZnNldCIsImJucEZyb21OdW1iZXIiLCJ0ZXN0Qml0IiwiYml0d2lzZVRvIiwic2hpZnRMZWZ0Iiwib3Bfb3IiLCJpc1Byb2JhYmxlUHJpbWUiLCJuZXh0Qnl0ZXMiLCJiblRvQnl0ZUFycmF5IiwiYm5FcXVhbHMiLCJibk1pbiIsImJuTWF4IiwiYm5wQml0d2lzZVRvIiwib3BfYW5kIiwiYm5BbmQiLCJibk9yIiwib3BfeG9yIiwiYm5Yb3IiLCJvcF9hbmRub3QiLCJibkFuZE5vdCIsImJuTm90IiwiYm5TaGlmdExlZnQiLCJiblNoaWZ0UmlnaHQiLCJsYml0IiwiYm5HZXRMb3dlc3RTZXRCaXQiLCJjYml0IiwiYm5CaXRDb3VudCIsImJuVGVzdEJpdCIsImJucENoYW5nZUJpdCIsImJuU2V0Qml0IiwiY2hhbmdlQml0IiwiYm5DbGVhckJpdCIsImJuRmxpcEJpdCIsImJucEFkZFRvIiwiYm5BZGQiLCJhZGRUbyIsImJuU3VidHJhY3QiLCJibk11bHRpcGx5IiwiYm5TcXVhcmUiLCJibkRpdmlkZSIsImJuUmVtYWluZGVyIiwiYm5EaXZpZGVBbmRSZW1haW5kZXIiLCJibnBETXVsdGlwbHkiLCJibnBEQWRkT2Zmc2V0IiwiTnVsbEV4cCIsIm5Ob3AiLCJuTXVsVG8iLCJuU3FyVG8iLCJiblBvdyIsImJucE11bHRpcGx5TG93ZXJUbyIsImJucE11bHRpcGx5VXBwZXJUbyIsIkJhcnJldHQiLCJyMiIsInEzIiwibXUiLCJkaXZpZGUiLCJiYXJyZXR0Q29udmVydCIsImJhcnJldHRSZXZlcnQiLCJiYXJyZXR0UmVkdWNlIiwibXVsdGlwbHlVcHBlclRvIiwibXVsdGlwbHlMb3dlclRvIiwiYmFycmV0dFNxclRvIiwiYmFycmV0dE11bFRvIiwiYm5Nb2RQb3ciLCJibkdDRCIsImdldExvd2VzdFNldEJpdCIsImJucE1vZEludCIsImJuTW9kSW52ZXJzZSIsInN1YnRyYWN0IiwiYWRkIiwibG93cHJpbWVzIiwibHBsaW0iLCJibklzUHJvYmFibGVQcmltZSIsIm1vZEludCIsIm1pbGxlclJhYmluIiwiYm5wTWlsbGVyUmFiaW4iLCJzaGlmdFJpZ2h0IiwibW9kUG93IiwiYnl0ZVZhbHVlIiwic2hvcnRWYWx1ZSIsInRvQnl0ZUFycmF5IiwiZXF1YWxzIiwiYW5kIiwib3IiLCJ4b3IiLCJhbmROb3QiLCJub3QiLCJiaXRDb3VudCIsInNldEJpdCIsImNsZWFyQml0IiwiZmxpcEJpdCIsIm11bHRpcGx5IiwicmVtYWluZGVyIiwiZGl2aWRlQW5kUmVtYWluZGVyIiwibW9kSW52ZXJzZSIsImdjZCIsInNxdWFyZSIsIkFyY2ZvdXIiLCJBUkM0aW5pdCIsIkFSQzRuZXh0IiwibmV4dCIsInBybmdfbmV3c3RhdGUiLCJybmdfcHNpemUiLCJybmdfc3RhdGUiLCJybmdfcG9vbCIsInJuZ19wcHRyIiwicm5nX3NlZWRfaW50Iiwicm5nX3NlZWRfdGltZSIsIkRhdGUiLCJnZXRUaW1lIiwiY3J5cHRvIiwibXNDcnlwdG8iLCJnZXRSYW5kb21WYWx1ZXMiLCJ1YSIsIlVpbnQ4QXJyYXkiLCJhcHBWZXJzaW9uIiwicm5nX2dldF9ieXRlIiwicm5nX2dldF9ieXRlcyIsIlNlY3VyZVJhbmRvbSIsInBhcnNlQmlnSW50IiwibGluZWJyayIsImJ5dGUySGV4IiwicGtjczFwYWQyIiwib2FlcF9tZ2YxX2FyciIsIm9hZXBfcGFkIiwiS0pVUiIsIk1lc3NhZ2VEaWdlc3QiLCJVdGlsIiwiZ2V0Q2Fub25pY2FsQWxnTmFtZSIsImdldEhhc2hMZW5ndGgiLCJoZXh0b3JzdHIiLCJoYXNoSGV4IiwicnN0cnRvaGV4IiwiUlNBS2V5IiwiZG1wMSIsImRtcTEiLCJjb2VmZiIsIlJTQVNldFB1YmxpYyIsImlzUHVibGljIiwiaXNQcml2YXRlIiwiUlNBRG9QdWJsaWMiLCJSU0FFbmNyeXB0IiwiZG9QdWJsaWMiLCJSU0FFbmNyeXB0T0FFUCIsInNldFB1YmxpYyIsImVuY3J5cHQiLCJlbmNyeXB0T0FFUCIsInR5cGUiLCJFQ0ZpZWxkRWxlbWVudEZwIiwiZmVGcEVxdWFscyIsImZlRnBUb0JpZ0ludGVnZXIiLCJmZUZwTmVnYXRlIiwiZmVGcEFkZCIsInRvQmlnSW50ZWdlciIsImZlRnBTdWJ0cmFjdCIsImZlRnBNdWx0aXBseSIsImZlRnBTcXVhcmUiLCJmZUZwRGl2aWRlIiwiRUNQb2ludEZwIiwiY3VydmUiLCJ6aW52IiwicG9pbnRGcEdldFgiLCJmcm9tQmlnSW50ZWdlciIsInBvaW50RnBHZXRZIiwicG9pbnRGcEVxdWFscyIsImlzSW5maW5pdHkiLCJwb2ludEZwSXNJbmZpbml0eSIsInBvaW50RnBOZWdhdGUiLCJwb2ludEZwQWRkIiwidHdpY2UiLCJnZXRJbmZpbml0eSIsInBvaW50RnBUd2ljZSIsInBvaW50RnBNdWx0aXBseSIsInBvaW50RnBNdWx0aXBseVR3byIsImdldFgiLCJnZXRZIiwibXVsdGlwbHlUd28iLCJFQ0N1cnZlRnAiLCJpbmZpbml0eSIsImN1cnZlRnBHZXRRIiwiY3VydmVGcEdldEEiLCJjdXJ2ZUZwR2V0QiIsImN1cnZlRnBFcXVhbHMiLCJjdXJ2ZUZwR2V0SW5maW5pdHkiLCJjdXJ2ZUZwRnJvbUJpZ0ludGVnZXIiLCJjdXJ2ZUZwRGVjb2RlUG9pbnRIZXgiLCJnZXRRIiwiZ2V0QSIsImdldEIiLCJkZWNvZGVQb2ludEhleCIsImdldEJ5dGVMZW5ndGgiLCJnZXRFbmNvZGVkIiwidG9CeXRlQXJyYXlVbnNpZ25lZCIsInVuc2hpZnQiLCJkZWNvZGVGcm9tIiwiZGVjb2RlRnJvbUhleCIsImFkZDJEIiwidHdpY2UyRCIsInZhbHVlT2YiLCJtdWx0aXBseTJEIiwiaXNPbkN1cnZlIiwidmFsaWRhdGUiLCJqc29uUGFyc2UiLCJSZWdFeHAiLCJtYXRjaCIsInJlcGxhY2UiLCJzaGlmdCIsImFzbjEiLCJBU04xVXRpbCIsImludGVnZXJUb0J5dGVIZXgiLCJiaWdJbnRUb01pblR3b3NDb21wbGVtZW50c0hleCIsImdldFBFTVN0cmluZ0Zyb21IZXgiLCJoZXh0b3BlbSIsIm5ld09iamVjdCIsIkRFUkJvb2xlYW4iLCJERVJJbnRlZ2VyIiwiREVSQml0U3RyaW5nIiwiREVST2N0ZXRTdHJpbmciLCJERVJOdWxsIiwiREVST2JqZWN0SWRlbnRpZmllciIsIkRFUkVudW1lcmF0ZWQiLCJERVJVVEY4U3RyaW5nIiwiREVSTnVtZXJpY1N0cmluZyIsIkRFUlByaW50YWJsZVN0cmluZyIsIkRFUlRlbGV0ZXhTdHJpbmciLCJERVJJQTVTdHJpbmciLCJERVJVVENUaW1lIiwiREVSR2VuZXJhbGl6ZWRUaW1lIiwiREVSU2VxdWVuY2UiLCJERVJTZXQiLCJERVJUYWdnZWRPYmplY3QiLCJrZXlzIiwiYXJyYXkiLCJ0YWciLCJleHBsaWNpdCIsIm9iaiIsImpzb25Ub0FTTjFIRVgiLCJnZXRFbmNvZGVkSGV4Iiwib2lkSGV4VG9JbnQiLCJvaWRJbnRUb0hleCIsInNwbGl0IiwiQVNOMU9iamVjdCIsImdldExlbmd0aEhleEZyb21WYWx1ZSIsImhWIiwiaFRMViIsImlzTW9kaWZpZWQiLCJnZXRGcmVzaFZhbHVlSGV4IiwiaEwiLCJoVCIsImdldFZhbHVlSGV4IiwiREVSQWJzdHJhY3RTdHJpbmciLCJnZXRTdHJpbmciLCJzZXRTdHJpbmciLCJ1dGY4dG9oZXgiLCJ0b0xvd2VyQ2FzZSIsInNldFN0cmluZ0hleCIsInN0ciIsImhleCIsIkRFUkFic3RyYWN0VGltZSIsImxvY2FsRGF0ZVRvVVRDIiwidXRjIiwiZ2V0VGltZXpvbmVPZmZzZXQiLCJmb3JtYXREYXRlIiwiemVyb1BhZGRpbmciLCJnZXRGdWxsWWVhciIsImdldE1vbnRoIiwiZ2V0RGF0ZSIsImdldEhvdXJzIiwiZ2V0TWludXRlcyIsImdldFNlY29uZHMiLCJnZXRNaWxsaXNlY29uZHMiLCJzdG9oZXgiLCJzZXRCeURhdGVWYWx1ZSIsIlVUQyIsInNldEJ5RGF0ZSIsIkRFUkFic3RyYWN0U3RydWN0dXJlZCIsInNldEJ5QVNOMU9iamVjdEFycmF5IiwiYXNuMUFycmF5IiwiYXBwZW5kQVNOMU9iamVjdCIsInNldEJ5QmlnSW50ZWdlciIsInNldEJ5SW50ZWdlciIsInNldFZhbHVlSGV4IiwiYmlnaW50Iiwic2V0SGV4VmFsdWVJbmNsdWRpbmdVbnVzZWRCaXRzIiwic2V0VW51c2VkQml0c0FuZEhleFZhbHVlIiwic2V0QnlCaW5hcnlTdHJpbmciLCJzZXRCeUJvb2xlYW5BcnJheSIsIm5ld0ZhbHNlQXJyYXkiLCJiaW4iLCJzZXRWYWx1ZU9pZFN0cmluZyIsInNldFZhbHVlTmFtZSIsIng1MDkiLCJPSUQiLCJuYW1lMm9pZCIsIm9pZCIsIm5hbWUiLCJkYXRlIiwid2l0aE1pbGxpcyIsIm1pbGxpcyIsInNvcnRGbGFnIiwic29ydCIsInNvcnRmbGFnIiwiaXNFeHBsaWNpdCIsImFzbjFPYmplY3QiLCJzZXRBU04xT2JqZWN0IiwiQVNOMUhFWCIsImdldExibGVuIiwiZ2V0TCIsImdldFZibGVuIiwiZ2V0VmlkeCIsImdldFYiLCJnZXRUTFYiLCJnZXROZXh0U2libGluZ0lkeCIsImdldENoaWxkSWR4IiwiZ2V0TnRoQ2hpbGRJZHgiLCJnZXRJZHhieUxpc3QiLCJnZXRUTFZieUxpc3QiLCJnZXRWYnlMaXN0IiwiaGV4dG9vaWRzdHIiLCJkdW1wIiwib21taXRfbG9uZ19vY3RldCIsImlzQVNOMUhFWCIsIm9pZDJuYW1lIiwiaGV4dG91dGY4Iiwib2lkbmFtZSIsIkpTT04iLCJ4NTA5RXh0TmFtZSIsImlzSGV4IiwiQmFzZTY0eCIsInN0b0JBIiwiQkF0b3MiLCJCQXRvaGV4Iiwic3RvYjY0Iiwic3RvYjY0dSIsImI2NHRvYjY0dSIsImI2NHV0b3MiLCJiNjR1dG9iNjQiLCJoZXh0b2I2NHUiLCJiNjR1dG9oZXgiLCJ1dGY4dG9iNjR1IiwiYjY0dXRvdXRmOCIsIkJ1ZmZlciIsInVyaWNtcHRvaGV4IiwiZW5jb2RlVVJJQ29tcG9uZW50QWxsIiwiaGV4dG91cmljbXAiLCJ1dGY4dG9iNjQiLCJiNjR0b3V0ZjgiLCJoZXh0b2I2NCIsImhleHRvYjY0bmwiLCJiNjRubHRvaGV4IiwicGVtdG9oZXgiLCJoZXh0b0FycmF5QnVmZmVyIiwiQXJyYXlCdWZmZXIiLCJEYXRhVmlldyIsInNldFVpbnQ4IiwiQXJyYXlCdWZmZXJ0b2hleCIsImJ5dGVMZW5ndGgiLCJnZXRVaW50OCIsInp1bHV0b21zZWMiLCJ6dWx1dG9zZWMiLCJ6dWx1dG9kYXRlIiwiZGF0ZXRvenVsdSIsImdldFVUQ0Z1bGxZZWFyIiwiZ2V0VVRDTW9udGgiLCJnZXRVVENEYXRlIiwiZ2V0VVRDSG91cnMiLCJnZXRVVENNaW51dGVzIiwiZ2V0VVRDU2Vjb25kcyIsImdldFVUQ01pbGxpc2Vjb25kcyIsImlwdjZ0b2hleCIsInJlcGVhdCIsImhleHRvaXB2NiIsImhleHRvaXAiLCJpcHRvaGV4IiwibmV3bGluZV90b1VuaXgiLCJuZXdsaW5lX3RvRG9zIiwiaXNJbnRlZ2VyIiwiaXNCYXNlNjQiLCJpc0Jhc2U2NFVSTCIsImlzSW50ZWdlckFycmF5IiwiaGV4dG9wb3NoZXgiLCJpbnRhcnlzdHJ0b2hleCIsIm1hcCIsInN0cmRpZmZpZHgiLCJESUdFU1RJTkZPSEVBRCIsInNoYTEiLCJzaGEyMjQiLCJzaGEyNTYiLCJzaGEzODQiLCJzaGE1MTIiLCJtZDIiLCJtZDUiLCJyaXBlbWQxNjAiLCJERUZBVUxUUFJPVklERVIiLCJobWFjbWQ1IiwiaG1hY3NoYTEiLCJobWFjc2hhMjI0IiwiaG1hY3NoYTI1NiIsImhtYWNzaGEzODQiLCJobWFjc2hhNTEyIiwiaG1hY3JpcGVtZDE2MCIsIk1ENXdpdGhSU0EiLCJTSEExd2l0aFJTQSIsIlNIQTIyNHdpdGhSU0EiLCJTSEEyNTZ3aXRoUlNBIiwiU0hBMzg0d2l0aFJTQSIsIlNIQTUxMndpdGhSU0EiLCJSSVBFTUQxNjB3aXRoUlNBIiwiTUQ1d2l0aEVDRFNBIiwiU0hBMXdpdGhFQ0RTQSIsIlNIQTIyNHdpdGhFQ0RTQSIsIlNIQTI1NndpdGhFQ0RTQSIsIlNIQTM4NHdpdGhFQ0RTQSIsIlNIQTUxMndpdGhFQ0RTQSIsIlJJUEVNRDE2MHdpdGhFQ0RTQSIsIlNIQTF3aXRoRFNBIiwiU0hBMjI0d2l0aERTQSIsIlNIQTI1NndpdGhEU0EiLCJNRDV3aXRoUlNBYW5kTUdGMSIsIlNIQTF3aXRoUlNBYW5kTUdGMSIsIlNIQTIyNHdpdGhSU0FhbmRNR0YxIiwiU0hBMjU2d2l0aFJTQWFuZE1HRjEiLCJTSEEzODR3aXRoUlNBYW5kTUdGMSIsIlNIQTUxMndpdGhSU0FhbmRNR0YxIiwiUklQRU1EMTYwd2l0aFJTQWFuZE1HRjEiLCJDUllQVE9KU01FU1NBR0VESUdFU1ROQU1FIiwiTUQ1IiwiU0hBMSIsIlNIQTIyNCIsIlJJUEVNRDE2MCIsImdldERpZ2VzdEluZm9IZXgiLCJnZXRQYWRkZWREaWdlc3RJbmZvSGV4IiwiaGFzaFN0cmluZyIsImFsZyIsImRpZ2VzdFN0cmluZyIsImRpZ2VzdEhleCIsInByb3YiLCJzaGEyNTZIZXgiLCJzaGE1MTJIZXgiLCJTRUNVUkVSQU5ET01HRU4iLCJnZXRSYW5kb21IZXhPZk5ieXRlcyIsImdldFJhbmRvbUJpZ0ludGVnZXJPZk5ieXRlcyIsImdldFJhbmRvbUhleE9mTmJpdHMiLCJnZXRSYW5kb21CaWdJbnRlZ2VyT2ZOYml0cyIsImdldFJhbmRvbUJpZ0ludGVnZXJaZXJvVG9NYXgiLCJnZXRSYW5kb21CaWdJbnRlZ2VyTWluVG9NYXgiLCJzZXRBbGdBbmRQcm92aWRlciIsIm1kIiwidXBkYXRlU3RyaW5nIiwidXBkYXRlSGV4IiwiZGlnZXN0Iiwic2pjbCIsImhhc2giLCJjb2RlYyIsInRvQml0cyIsImZyb21CaXRzIiwiYWxnTmFtZSIsInByb3ZOYW1lIiwiSEFTSExFTkdUSCIsIk1hYyIsImFsZ1Byb3YiLCJtYWMiLCJwYXNzIiwiZG9GaW5hbCIsImRvRmluYWxTdHJpbmciLCJkb0ZpbmFsSGV4Iiwic2V0UGFzc3dvcmQiLCJ1dGY4IiwicnN0ciIsImI2NCIsImI2NHUiLCJTaWduYXR1cmUiLCJfc2V0QWxnTmFtZXMiLCJtZEFsZ05hbWUiLCJwdWJrZXlBbGdOYW1lIiwiX3plcm9QYWRkaW5nT2ZTaWduYXR1cmUiLCJLRVlVVElMIiwiZ2V0S2V5IiwicHJ2S2V5Iiwic3RhdGUiLCJwdWJLZXkiLCJzaWduIiwic0hhc2hIZXgiLCJlY3BydmhleCIsImVjY3VydmVuYW1lIiwiRUNEU0EiLCJoU2lnbiIsInNpZ25IZXgiLCJzaWduV2l0aE1lc3NhZ2VIYXNoUFNTIiwicHNzU2FsdExlbiIsInNpZ25XaXRoTWVzc2FnZUhhc2giLCJEU0EiLCJzaWduU3RyaW5nIiwidmVyaWZ5IiwiZWNwdWJoZXgiLCJ2ZXJpZnlIZXgiLCJ2ZXJpZnlXaXRoTWVzc2FnZUhhc2hQU1MiLCJ2ZXJpZnlXaXRoTWVzc2FnZUhhc2giLCJhbGdQcm92TmFtZSIsImluaXRQYXJhbXMiLCJwc3NzYWx0bGVuIiwicHJ2a2V5cGVtIiwicHJ2a2V5cGFzIiwiQ2lwaGVyIiwiZ2V0QWxnQnlLZXlBbmROYW1lIiwiZGVjcnlwdCIsImRlY3J5cHRPQUVQIiwib2lkaGV4Mm5hbWUiLCJnZXRCaWdSYW5kb20iLCJzZXROYW1lZEN1cnZlIiwiZWNwYXJhbXMiLCJFQ1BhcmFtZXRlckRCIiwiZ2V0QnlOYW1lIiwicHJ2S2V5SGV4IiwicHViS2V5SGV4IiwiY3VydmVOYW1lIiwic2V0UHJpdmF0ZUtleUhleCIsInNldFB1YmxpY0tleUhleCIsImdldFB1YmxpY0tleVhZSGV4Iiwia2V5bGVuIiwiZ2V0U2hvcnROSVNUUEN1cnZlTmFtZSIsImdlbmVyYXRlS2V5UGFpckhleCIsImJpUlNTaWdUb0FTTjFTaWciLCJmcm9tQnl0ZUFycmF5VW5zaWduZWQiLCJzZXJpYWxpemVTaWciLCJwYXJzZVNpZ0hleCIsInZlcmlmeVJhdyIsIkJpdGNvaW4iLCJpc0FycmF5IiwicGFyc2VTaWciLCJ0b0J5dGVBcnJheVNpZ25lZCIsInBhcnNlU2lnQ29tcGFjdCIsInJlYWRQS0NTNVBydktleUhleCIsImdldE5hbWUiLCJyZWFkUEtDUzhQcnZLZXlIZXgiLCJyZWFkUEtDUzhQdWJLZXlIZXgiLCJyZWFkQ2VydFB1YktleUhleCIsInBydiIsInB1YiIsInBhcnNlU2lnSGV4SW5IZXhSUyIsImFzbjFTaWdUb0NvbmNhdFNpZyIsImNvbmNhdFNpZ1RvQVNOMVNpZyIsImhleFJTU2lnVG9BU04xU2lnIiwicmVnaXN0IiwiQUVTIiwiVHJpcGxlREVTIiwiREVTIiwia2V5IiwiaXYiLCJjaXBoZXJ0ZXh0IiwicHJvYyIsImVwcm9jIiwiaXZsZW4iLCJjaXBoZXIiLCJpdnNhbHQiLCJkYXRhIiwia2V5aGV4IiwiaXZoZXgiLCJ2ZXJzaW9uIiwicGFyc2VQS0NTNVBFTSIsImdldEtleUFuZFVudXNlZEl2QnlQYXNzY29kZUFuZEl2c2FsdCIsImRlY3J5cHRLZXlCNjQiLCJnZXREZWNyeXB0ZWRLZXlIZXgiLCJnZXRFbmNyeXB0ZWRQS0NTNVBFTUZyb21QcnZLZXlIZXgiLCJ0b1VwcGVyQ2FzZSIsInBhcnNlSGV4T2ZFbmNyeXB0ZWRQS0NTOCIsImVuY3J5cHRpb25TY2hlbWVBbGciLCJlbmNyeXB0aW9uU2NoZW1lSVYiLCJwYmtkZjJTYWx0IiwicGJrZGYySXRlciIsImdldFBCS0RGMktleUhleEZyb21QYXJhbSIsIlBCS0RGMiIsImtleVNpemUiLCJpdGVyYXRpb25zIiwiX2dldFBsYWluUEtDUzhIZXhGcm9tRW5jcnlwdGVkUEtDUzhQRU0iLCJnZXRLZXlGcm9tRW5jcnlwdGVkUEtDUzhQRU0iLCJnZXRLZXlGcm9tUGxhaW5Qcml2YXRlUEtDUzhIZXgiLCJwYXJzZVBsYWluUHJpdmF0ZVBLQ1M4SGV4IiwiYWxncGFyYW0iLCJhbGdvaWQiLCJrZXlpZHgiLCJnZXRLZXlGcm9tUGxhaW5Qcml2YXRlUEtDUzhQRU0iLCJfZ2V0S2V5RnJvbVB1YmxpY1BLQ1M4SGV4IiwicGFyc2VQdWJsaWNSYXdSU0FLZXlIZXgiLCJwYXJzZVB1YmxpY1BLQ1M4SGV4IiwieHkiLCJrdHkiLCJkcCIsImRxIiwiY28iLCJxaSIsInNldFByaXZhdGVFeCIsInNldFByaXZhdGUiLCJjcnYiLCJYNTA5IiwiZ2V0UHVibGljS2V5RnJvbUNlcnRIZXgiLCJnZXRQdWJsaWNLZXlGcm9tQ2VydFBFTSIsImdlbmVyYXRlS2V5cGFpciIsImdlbmVyYXRlIiwicHJ2S2V5T2JqIiwicHViS2V5T2JqIiwiZ2V0UEVNIiwiU3ViamVjdFB1YmxpY0tleUluZm8iLCJzZXEiLCJvY3RzdHIiLCJiaXRzdHIiLCJnZXRLZXlGcm9tQ1NSUEVNIiwiZ2V0S2V5RnJvbUNTUkhleCIsInBhcnNlQ1NSSGV4IiwicDhwdWJrZXloZXgiLCJnZXRKV0tGcm9tS2V5IiwiZ2V0UG9zQXJyYXlPZkNoaWxkcmVuRnJvbUhleCIsImdldEhleFZhbHVlQXJyYXlPZkNoaWxkcmVuRnJvbUhleCIsInJlYWRQcml2YXRlS2V5RnJvbVBFTVN0cmluZyIsInJlYWRQS0NTNVB1YktleUhleCIsInJlYWRDZXJ0SGV4IiwiZ2V0UHVibGljS2V5SGV4IiwiX1JFX0hFWERFQ09OTFkiLCJjb21waWxlIiwiX3JzYXNpZ25fZ2V0SGV4UGFkZGVkRGlnZXN0SW5mb0ZvclN0cmluZyIsImRvUHJpdmF0ZSIsInBzc19tZ2YxX3N0ciIsInNpZ25QU1MiLCJfcnNhc2lnbl9nZXREZWNyeXB0U2lnbmF0dXJlQkkiLCJfcnNhc2lnbl9nZXRIZXhEaWdlc3RJbmZvRnJvbVNpZyIsIl9yc2FzaWduX2dldEFsZ05hbWVBbmRIYXNoRnJvbUhleERpc2dlc3RJbmZvIiwidmVyaWZ5UFNTIiwiU0FMVF9MRU5fSExFTiIsIlNBTFRfTEVOX01BWCIsIlNBTFRfTEVOX1JFQ09WRVIiLCJmb2Zmc2V0IiwiYUV4dEluZm8iLCJnZXRWZXJzaW9uIiwiZ2V0U2VyaWFsTnVtYmVySGV4IiwiZ2V0U2lnbmF0dXJlQWxnb3JpdGhtRmllbGQiLCJnZXRJc3N1ZXJIZXgiLCJnZXRJc3N1ZXJTdHJpbmciLCJoZXgyZG4iLCJnZXRTdWJqZWN0SGV4IiwiZ2V0U3ViamVjdFN0cmluZyIsImdldE5vdEJlZm9yZSIsImdldE5vdEFmdGVyIiwiZ2V0UHVibGljS2V5SWR4IiwiZ2V0UHVibGljS2V5Q29udGVudElkeCIsImdldFB1YmxpY0tleSIsImdldFNpZ25hdHVyZUFsZ29yaXRobU5hbWUiLCJnZXRTaWduYXR1cmVWYWx1ZUhleCIsInZlcmlmeVNpZ25hdHVyZSIsInBhcnNlRXh0IiwiY3JpdGljYWwiLCJ2aWR4IiwiZ2V0RXh0SW5mbyIsImdldEV4dEJhc2ljQ29uc3RyYWludHMiLCJjQSIsInBhdGhMZW4iLCJnZXRFeHRLZXlVc2FnZUJpbiIsImdldEV4dEtleVVzYWdlU3RyaW5nIiwiS0VZVVNBR0VfTkFNRSIsImdldEV4dFN1YmplY3RLZXlJZGVudGlmaWVyIiwiZ2V0RXh0QXV0aG9yaXR5S2V5SWRlbnRpZmllciIsImtpZCIsImdldEV4dEV4dEtleVVzYWdlTmFtZSIsImdldEV4dFN1YmplY3RBbHROYW1lIiwiZ2V0RXh0U3ViamVjdEFsdE5hbWUyIiwiZ2V0RXh0Q1JMRGlzdHJpYnV0aW9uUG9pbnRzVVJJIiwiZ2V0RXh0QUlBSW5mbyIsIm9jc3AiLCJjYWlzc3VlciIsImdldEV4dENlcnRpZmljYXRlUG9saWNpZXMiLCJpZCIsImNwcyIsInVub3RpY2UiLCJyZWFkQ2VydFBFTSIsImdldEluZm8iLCJoZXgycmRuIiwiaGV4MmF0dHJUeXBlVmFsdWUiLCJvaWQyYXR5cGUiLCJnZXRQdWJsaWNLZXlJbmZvUHJvcE9mQ2VydFBFTSIsImp3cyIsIkpXUyIsImlzU2FmZUpTT05TdHJpbmciLCJwYXJzZUpXUyIsInBhcnNlZEpXUyIsInNpZ3ZhbEgiLCJoZWFkQjY0VSIsInBheWxvYWRCNjRVIiwic2lndmFsQjY0VSIsInNpIiwic2lndmFsQkkiLCJoZWFkUyIsInBheWxvYWRTIiwicmVhZFNhZmVKU09OU3RyaW5nIiwiandzYWxnMnNpZ2FsZyIsImhBU04xU2lnIiwiaGVhZGVyT2JqIiwicGF5bG9hZE9iaiIsImhlYWRlclBQIiwicGF5bG9hZFBQIiwic2lnSGV4IiwidmVyaWZ5SldUIiwiaW5BcnJheSIsImluY2x1ZGVkQXJyYXkiLCJpc3MiLCJzdWIiLCJhdWQiLCJJbnREYXRlIiwiZ2V0Tm93IiwidmVyaWZ5QXQiLCJncmFjZVBlcmlvZCIsIm5iZiIsImlhdCIsImp0aSIsIkhTMjU2IiwiSFMzODQiLCJIUzUxMiIsIlJTMjU2IiwiUlMzODQiLCJSUzUxMiIsIkVTMjU2IiwiRVMzODQiLCJQUzI1NiIsIlBTMzg0IiwiUFM1MTIiLCJub25lIiwiZ2V0RW5jb2RlZFNpZ25hdHVyZVZhbHVlRnJvbUpXUyIsImdldEpXS3RodW1icHJpbnQiLCJnZXQiLCJnZXRadWx1IiwiaW50RGF0ZTJVVENTdHJpbmciLCJ0b1VUQ1N0cmluZyIsImludERhdGUyWnVsdSIsIkVEU0EiLCJfY3J5cHRvIiwiRGVmYXVsdEFjY2Vzc1Rva2VuRXhwaXJpbmdOb3RpZmljYXRpb25UaW1lIiwiYWNjZXNzVG9rZW5FeHBpcmluZ05vdGlmaWNhdGlvblRpbWUiLCJhY2Nlc3NUb2tlbkV4cGlyaW5nVGltZXIiLCJUaW1lciIsImFjY2Vzc1Rva2VuRXhwaXJlZFRpbWVyIiwiX2FjY2Vzc1Rva2VuRXhwaXJpbmdOb3RpZmljYXRpb25UaW1lIiwiX2FjY2Vzc1Rva2VuRXhwaXJpbmciLCJfYWNjZXNzVG9rZW5FeHBpcmVkIiwibG9hZCIsImNvbnRhaW5lciIsImFjY2Vzc190b2tlbiIsImV4cGlyZXNfaW4iLCJkdXJhdGlvbiIsImRlYnVnIiwiZXhwaXJpbmciLCJjYW5jZWwiLCJleHBpcmVkIiwidW5sb2FkIiwiYWRkQWNjZXNzVG9rZW5FeHBpcmluZyIsImNiIiwiYWRkSGFuZGxlciIsInJlbW92ZUFjY2Vzc1Rva2VuRXhwaXJpbmciLCJyZW1vdmVIYW5kbGVyIiwiYWRkQWNjZXNzVG9rZW5FeHBpcmVkIiwicmVtb3ZlQWNjZXNzVG9rZW5FeHBpcmVkIiwiRGVmYXVsdEludGVydmFsIiwiY2FsbGJhY2siLCJjbGllbnRfaWQiLCJ1cmwiLCJpbnRlcnZhbCIsInN0b3BPbkVycm9yIiwiX2NhbGxiYWNrIiwiX2NsaWVudF9pZCIsIl91cmwiLCJfaW50ZXJ2YWwiLCJfc3RvcE9uRXJyb3IiLCJpZHgiLCJfZnJhbWVfb3JpZ2luIiwiX2ZyYW1lIiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50Iiwic3R5bGUiLCJ2aXNpYmlsaXR5IiwicG9zaXRpb24iLCJkaXNwbGF5Iiwid2lkdGgiLCJoZWlnaHQiLCJzcmMiLCJQcm9taXNlIiwicmVzb2x2ZSIsIm9ubG9hZCIsImJvZHkiLCJhcHBlbmRDaGlsZCIsIl9ib3VuZE1lc3NhZ2VFdmVudCIsIl9tZXNzYWdlIiwiYmluZCIsImFkZEV2ZW50TGlzdGVuZXIiLCJvcmlnaW4iLCJzb3VyY2UiLCJjb250ZW50V2luZG93IiwiZXJyb3IiLCJzdG9wIiwic3RhcnQiLCJzZXNzaW9uX3N0YXRlIiwiX3Nlc3Npb25fc3RhdGUiLCJzZW5kIiwicG9zdE1lc3NhZ2UiLCJfdGltZXIiLCJzZXRJbnRlcnZhbCIsImNsZWFySW50ZXJ2YWwiLCJwcmVwYXJlIiwicGFyYW1zIiwicG9wdXBXaW5kb3dGZWF0dXJlcyIsInBvcHVwIiwiQ29yZG92YVBvcHVwV2luZG93IiwiRGVmYXVsdFBvcHVwRmVhdHVyZXMiLCJEZWZhdWx0UG9wdXBUYXJnZXQiLCJfcHJvbWlzZSIsInJlamVjdCIsIl9yZXNvbHZlIiwiX3JlamVjdCIsImZlYXR1cmVzIiwidGFyZ2V0IiwicG9wdXBXaW5kb3dUYXJnZXQiLCJyZWRpcmVjdF91cmkiLCJzdGFydFVybCIsIl9pc0luQXBwQnJvd3Nlckluc3RhbGxlZCIsImNvcmRvdmFNZXRhZGF0YSIsInNvbWUiLCJuYXZpZ2F0ZSIsIl9lcnJvciIsImNvcmRvdmEiLCJyZXF1aXJlIiwibWV0YWRhdGEiLCJfcG9wdXAiLCJJbkFwcEJyb3dzZXIiLCJvcGVuIiwiX2V4aXRDYWxsYmFja0V2ZW50IiwiX2V4aXRDYWxsYmFjayIsIl9sb2FkU3RhcnRDYWxsYmFja0V2ZW50IiwiX2xvYWRTdGFydENhbGxiYWNrIiwicHJvbWlzZSIsImV2ZW50IiwiX3N1Y2Nlc3MiLCJtZXNzYWdlIiwiX2NsZWFudXAiLCJjbG9zZSIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJFcnJvclJlc3BvbnNlIiwiZXJyb3JfZGVzY3JpcHRpb24iLCJlcnJvcl91cmkiLCJFdmVudCIsIl9uYW1lIiwiX2NhbGxiYWNrcyIsImZpbmRJbmRleCIsIml0ZW0iLCJyYWlzZSIsInRpbWVyIiwiaGFuZGxlIiwidGVzdGluZyIsInJlcXVlc3QiLCJfdGVzdGluZyIsInNldFhNTEh0dHBSZXF1ZXN0IiwibmV3UmVxdWVzdCIsImxvY2F0aW9uIiwibG9jYWxTdG9yYWdlIiwic2Vzc2lvblN0b3JhZ2UiLCJYTUxIdHRwUmVxdWVzdCIsIklGcmFtZU5hdmlnYXRvciIsImZyYW1lIiwiSUZyYW1lV2luZG93Iiwibm90aWZ5UGFyZW50IiwiRGVmYXVsdFRpbWVvdXQiLCJ0aW1lb3V0Iiwic2lsZW50UmVxdWVzdFRpbWVvdXQiLCJzZXRUaW1lb3V0IiwiX3RpbWVvdXQiLCJjbGVhclRpbWVvdXQiLCJyZW1vdmVDaGlsZCIsIl9vcmlnaW4iLCJmcmFtZUVsZW1lbnQiLCJocmVmIiwicGFyZW50IiwicHJvdG9jb2wiLCJob3N0IiwiZ2V0SXRlbSIsInNldEl0ZW0iLCJ2YWx1ZSIsInJlbW92ZUl0ZW0iLCJpbmRleCIsImdldE93blByb3BlcnR5TmFtZXMiLCJKb3NlVXRpbCIsIktleVV0aWwiLCJBbGxvd2VkU2lnbmluZ0FsZ3MiLCJnZXRKb3NlVXRpbCIsInBhcnNlSnd0Iiwiand0IiwidG9rZW4iLCJoZWFkZXIiLCJwYXlsb2FkIiwidmFsaWRhdGVKd3QiLCJpc3N1ZXIiLCJhdWRpZW5jZSIsImNsb2NrU2tldyIsIm5vdyIsInRpbWVJbnNlbnNpdGl2ZSIsIng1YyIsIl92YWxpZGF0ZUp3dCIsInZhbGlkYXRlSnd0QXR0cmlidXRlcyIsInZhbGlkQXVkaWVuY2UiLCJhenAiLCJsb3dlck5vdyIsInVwcGVyTm93IiwidGhlbiIsImhleFRvQmFzZTY0VXJsIiwiSnNvblNlcnZpY2UiLCJhZGRpdGlvbmFsQ29udGVudFR5cGVzIiwiWE1MSHR0cFJlcXVlc3RDdG9yIiwiand0SGFuZGxlciIsIl9jb250ZW50VHlwZXMiLCJfWE1MSHR0cFJlcXVlc3QiLCJfand0SGFuZGxlciIsImdldEpzb24iLCJyZXEiLCJhbGxvd2VkQ29udGVudFR5cGVzIiwic3RhdHVzIiwiY29udGVudFR5cGUiLCJnZXRSZXNwb25zZUhlYWRlciIsImZvdW5kIiwiZmluZCIsInN0YXJ0c1dpdGgiLCJyZXNwb25zZVRleHQiLCJzdGF0dXNUZXh0Iiwib25lcnJvciIsInNldFJlcXVlc3RIZWFkZXIiLCJwb3N0Rm9ybSIsIm5vcExvZ2dlciIsImluZm8iLCJ3YXJuIiwiTk9ORSIsIkVSUk9SIiwiV0FSTiIsIklORk8iLCJERUJVRyIsImxvZ2dlciIsImxldmVsIiwiYXJncyIsImZyb20iLCJPaWRjTWV0YWRhdGFVcmxQYXRoIiwic2V0dGluZ3MiLCJKc29uU2VydmljZUN0b3IiLCJfc2V0dGluZ3MiLCJfanNvblNlcnZpY2UiLCJnZXRNZXRhZGF0YSIsIm1ldGFkYXRhVXJsIiwiZ2V0SXNzdWVyIiwiX2dldE1ldGFkYXRhUHJvcGVydHkiLCJnZXRBdXRob3JpemF0aW9uRW5kcG9pbnQiLCJnZXRVc2VySW5mb0VuZHBvaW50IiwiZ2V0VG9rZW5FbmRwb2ludCIsIm9wdGlvbmFsIiwiZ2V0Q2hlY2tTZXNzaW9uSWZyYW1lIiwiZ2V0RW5kU2Vzc2lvbkVuZHBvaW50IiwiZ2V0UmV2b2NhdGlvbkVuZHBvaW50IiwiZ2V0S2V5c0VuZHBvaW50IiwiZ2V0U2lnbmluZ0tleXMiLCJzaWduaW5nS2V5cyIsImp3a3NfdXJpIiwia2V5U2V0IiwiX21ldGFkYXRhVXJsIiwiYXV0aG9yaXR5IiwiY3JlYXRlU2lnbmluUmVxdWVzdCIsInJlc3BvbnNlX3R5cGUiLCJzY29wZSIsInByb21wdCIsIm1heF9hZ2UiLCJ1aV9sb2NhbGVzIiwiaWRfdG9rZW5faGludCIsImxvZ2luX2hpbnQiLCJhY3JfdmFsdWVzIiwicmVzb3VyY2UiLCJyZXF1ZXN0X3VyaSIsInJlc3BvbnNlX21vZGUiLCJleHRyYVF1ZXJ5UGFyYW1zIiwiZXh0cmFUb2tlblBhcmFtcyIsInJlcXVlc3RfdHlwZSIsInNraXBVc2VySW5mbyIsInN0YXRlU3RvcmUiLCJTaWduaW5SZXF1ZXN0IiwiaXNDb2RlIiwiX21ldGFkYXRhU2VydmljZSIsInNpZ25pblJlcXVlc3QiLCJjbGllbnRfc2VjcmV0Iiwic2lnbmluU3RhdGUiLCJfc3RhdGVTdG9yZSIsInNldCIsInRvU3RvcmFnZVN0cmluZyIsInJlYWRTaWduaW5SZXNwb25zZVN0YXRlIiwicmVtb3ZlU3RhdGUiLCJ1c2VRdWVyeSIsImRlbGltaXRlciIsInJlc3BvbnNlIiwiU2lnbmluUmVzcG9uc2UiLCJzdGF0ZUFwaSIsInJlbW92ZSIsInN0b3JlZFN0YXRlU3RyaW5nIiwiU2lnbmluU3RhdGUiLCJmcm9tU3RvcmFnZVN0cmluZyIsInByb2Nlc3NTaWduaW5SZXNwb25zZSIsIl92YWxpZGF0b3IiLCJ2YWxpZGF0ZVNpZ25pblJlc3BvbnNlIiwiY3JlYXRlU2lnbm91dFJlcXVlc3QiLCJwb3N0X2xvZ291dF9yZWRpcmVjdF91cmkiLCJTaWdub3V0UmVxdWVzdCIsInNpZ25vdXRTdGF0ZSIsInJlYWRTaWdub3V0UmVzcG9uc2VTdGF0ZSIsIlNpZ25vdXRSZXNwb25zZSIsInN0YXRlS2V5IiwiU3RhdGUiLCJwcm9jZXNzU2lnbm91dFJlc3BvbnNlIiwidmFsaWRhdGVTaWdub3V0UmVzcG9uc2UiLCJjbGVhclN0YWxlU3RhdGUiLCJzdGFsZVN0YXRlQWdlIiwidmFsaWRhdG9yIiwibWV0YWRhdGFTZXJ2aWNlIiwiRGVmYXVsdFJlc3BvbnNlVHlwZSIsIkRlZmF1bHRTY29wZSIsIkRlZmF1bHRTdGFsZVN0YXRlQWdlIiwiRGVmYXVsdENsb2NrU2tld0luU2Vjb25kcyIsImZpbHRlclByb3RvY29sQ2xhaW1zIiwibG9hZFVzZXJJbmZvIiwidXNlckluZm9Kd3RJc3N1ZXIiLCJSZXNwb25zZVZhbGlkYXRvckN0b3IiLCJSZXNwb25zZVZhbGlkYXRvciIsIk1ldGFkYXRhU2VydmljZUN0b3IiLCJfYXV0aG9yaXR5IiwiX21ldGFkYXRhIiwiX3NpZ25pbmdLZXlzIiwiX2NsaWVudF9zZWNyZXQiLCJfcmVzcG9uc2VfdHlwZSIsIl9zY29wZSIsIl9yZWRpcmVjdF91cmkiLCJfcG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpIiwiX3Byb21wdCIsIl9kaXNwbGF5IiwiX21heF9hZ2UiLCJfdWlfbG9jYWxlcyIsIl9hY3JfdmFsdWVzIiwiX3Jlc291cmNlIiwiX3Jlc3BvbnNlX21vZGUiLCJfZmlsdGVyUHJvdG9jb2xDbGFpbXMiLCJfbG9hZFVzZXJJbmZvIiwiX3N0YWxlU3RhdGVBZ2UiLCJfY2xvY2tTa2V3IiwiX3VzZXJJbmZvSnd0SXNzdWVyIiwiX2V4dHJhUXVlcnlQYXJhbXMiLCJfZXh0cmFUb2tlblBhcmFtcyIsIlBvcHVwTmF2aWdhdG9yIiwiUG9wdXBXaW5kb3ciLCJrZWVwT3BlbiIsIm5vdGlmeU9wZW5lciIsIkNoZWNrRm9yUG9wdXBDbG9zZWRJbnRlcnZhbCIsIl9jaGVja0ZvclBvcHVwQ2xvc2VkVGltZXIiLCJfY2hlY2tGb3JQb3B1cENsb3NlZCIsIl9pZCIsImZvY3VzIiwiY2xvc2VkIiwib3BlbmVyIiwiVXJsVXRpbGl0eSIsInBhcnNlVXJsRnJhZ21lbnQiLCJSZWRpcmVjdE5hdmlnYXRvciIsInVzZVJlcGxhY2VUb05hdmlnYXRlIiwiUHJvdG9jb2xDbGFpbXMiLCJVc2VySW5mb1NlcnZpY2VDdG9yIiwiVXNlckluZm9TZXJ2aWNlIiwiam9zZVV0aWwiLCJUb2tlbkNsaWVudEN0b3IiLCJUb2tlbkNsaWVudCIsIl91c2VySW5mb1NlcnZpY2UiLCJfam9zZVV0aWwiLCJfdG9rZW5DbGllbnQiLCJfcHJvY2Vzc1NpZ25pblBhcmFtcyIsIl92YWxpZGF0ZVRva2VucyIsIl9wcm9jZXNzQ2xhaW1zIiwibm9uY2UiLCJpZF90b2tlbiIsImNvZGVfdmVyaWZpZXIiLCJjb2RlIiwiaXNPcGVuSWRDb25uZWN0IiwicHJvZmlsZSIsImdldENsYWltcyIsImNsYWltcyIsIl9tZXJnZUNsYWltcyIsImNsYWltczEiLCJjbGFpbXMyIiwicmVzdWx0IiwiYXNzaWduIiwidmFsdWVzIiwiZm9yRWFjaCIsIl9wcm9jZXNzQ29kZSIsIl92YWxpZGF0ZUlkVG9rZW5BbmRBY2Nlc3NUb2tlbiIsIl92YWxpZGF0ZUlkVG9rZW4iLCJleGNoYW5nZUNvZGUiLCJ0b2tlblJlc3BvbnNlIiwiX3ZhbGlkYXRlSWRUb2tlbkF0dHJpYnV0ZXMiLCJjbG9ja1NrZXdJblNlY29uZHMiLCJfdmFsaWRhdGVBY2Nlc3NUb2tlbiIsIl9maWx0ZXJCeUFsZyIsImZpbHRlciIsImF0X2hhc2giLCJoYXNoQWxnIiwiaGFzaEJpdHMiLCJzaGEiLCJsZWZ0IiwibGVmdF9iNjR1IiwidXNlck1hbmFnZXIiLCJDaGVja1Nlc3Npb25JRnJhbWVDdG9yIiwiX3VzZXJNYW5hZ2VyIiwiX0NoZWNrU2Vzc2lvbklGcmFtZUN0b3IiLCJldmVudHMiLCJhZGRVc2VyTG9hZGVkIiwiX3N0YXJ0IiwiYWRkVXNlclVubG9hZGVkIiwiX3N0b3AiLCJnZXRVc2VyIiwidXNlciIsIm1vbml0b3JBbm9ueW1vdXNTZXNzaW9uIiwicXVlcnlTZXNzaW9uU3RhdHVzIiwidG1wVXNlciIsInNlc3Npb24iLCJzaWQiLCJjYXRjaCIsImVyciIsIl9zdWIiLCJfc2lkIiwiX2NoZWNrU2Vzc2lvbklGcmFtZSIsIl9jaGVja1Nlc3Npb25JbnRlcnZhbCIsIl9zdG9wQ2hlY2tTZXNzaW9uT25FcnJvciIsInJhaXNlRXZlbnQiLCJfcmFpc2VVc2VyU2Vzc2lvbkNoYW5nZWQiLCJfcmFpc2VVc2VyU2lnbmVkT3V0IiwiX3JhaXNlVXNlclNpZ25lZEluIiwiY2hlY2tTZXNzaW9uSW50ZXJ2YWwiLCJzdG9wQ2hlY2tTZXNzaW9uT25FcnJvciIsIm9pZGMiLCJpc09pZGMiLCJhZGRRdWVyeVBhcmFtIiwiY29kZV9jaGFsbGVuZ2UiLCJpc09BdXRoIiwiT2lkY1Njb3BlIiwidG9rZW5fdHlwZSIsImV4cGlyZXNfYXQiLCJzY29wZXMiLCJfbm9uY2UiLCJfY29kZV92ZXJpZmllciIsIl9jb2RlX2NoYWxsZW5nZSIsIl9za2lwVXNlckluZm8iLCJjcmVhdGVkIiwic3RvcmFnZVN0cmluZyIsIlNpbGVudFJlbmV3U2VydmljZSIsIl90b2tlbkV4cGlyaW5nIiwic2lnbmluU2lsZW50IiwiX3JhaXNlU2lsZW50UmVuZXdFcnJvciIsIl9jcmVhdGVkIiwiX3JlcXVlc3RfdHlwZSIsInN0b3JhZ2UiLCJhZ2UiLCJjdXRvZmYiLCJnZXRBbGxLZXlzIiwicHJvbWlzZXMiLCJhbGwiLCJUaW1lckR1cmF0aW9uIiwibm93RnVuYyIsIl9ub3dGdW5jIiwiZXhwaXJhdGlvbiIsIl90aW1lckhhbmRsZSIsIl9leHBpcmF0aW9uIiwidGltZXJEdXJhdGlvbiIsImRpZmYiLCJncmFudF90eXBlIiwiZXhjaGFuZ2VSZWZyZXNoVG9rZW4iLCJyZWZyZXNoX3Rva2VuIiwiQWNjZXNzVG9rZW5UeXBlSGludCIsIlJlZnJlc2hUb2tlblR5cGVIaW50IiwiX1hNTEh0dHBSZXF1ZXN0Q3RvciIsInJldm9rZSIsInJlcXVpcmVkIiwiX3Jldm9rZSIsInhociIsImdsb2JhbCIsImxhc3RJbmRleE9mIiwicmVnZXgiLCJjb3VudGVyIiwiZXhlYyIsInByb3AiLCJfZ2V0Q2xhaW1zRnJvbUp3dCIsImlzc3VlclByb21pc2UiLCJTaWxlbnRSZW5ld1NlcnZpY2VDdG9yIiwiU2Vzc2lvbk1vbml0b3JDdG9yIiwiVG9rZW5SZXZvY2F0aW9uQ2xpZW50Q3RvciIsIlVzZXJNYW5hZ2VyU2V0dGluZ3MiLCJfZXZlbnRzIiwiVXNlck1hbmFnZXJFdmVudHMiLCJfc2lsZW50UmVuZXdTZXJ2aWNlIiwiYXV0b21hdGljU2lsZW50UmVuZXciLCJzdGFydFNpbGVudFJlbmV3IiwibW9uaXRvclNlc3Npb24iLCJfc2Vzc2lvbk1vbml0b3IiLCJfdG9rZW5SZXZvY2F0aW9uQ2xpZW50IiwiX2xvYWRVc2VyIiwicmVtb3ZlVXNlciIsInN0b3JlVXNlciIsInNpZ25pblJlZGlyZWN0IiwibmF2UGFyYW1zIiwiX3NpZ25pblN0YXJ0IiwiX3JlZGlyZWN0TmF2aWdhdG9yIiwic2lnbmluUmVkaXJlY3RDYWxsYmFjayIsIl9zaWduaW5FbmQiLCJzaWduaW5Qb3B1cCIsInBvcHVwX3JlZGlyZWN0X3VyaSIsIl9zaWduaW4iLCJfcG9wdXBOYXZpZ2F0b3IiLCJzaWduaW5Qb3B1cENhbGxiYWNrIiwiX3NpZ25pbkNhbGxiYWNrIiwiX3VzZVJlZnJlc2hUb2tlbiIsImluY2x1ZGVJZFRva2VuSW5TaWxlbnRSZW5ldyIsInZhbGlkYXRlU3ViT25TaWxlbnRSZW5ldyIsImN1cnJlbnRfc3ViIiwiX3NpZ25pblNpbGVudElmcmFtZSIsImlkVG9rZW5WYWxpZGF0aW9uIiwiX3ZhbGlkYXRlSWRUb2tlbkZyb21Ub2tlblJlZnJlc2hUb2tlbiIsImF1dGhfdGltZSIsInNpbGVudF9yZWRpcmVjdF91cmkiLCJfaWZyYW1lTmF2aWdhdG9yIiwic2lnbmluU2lsZW50Q2FsbGJhY2siLCJzaWduaW5DYWxsYmFjayIsInNpZ25vdXRDYWxsYmFjayIsInNpZ25vdXRSZWRpcmVjdENhbGxiYWNrIiwic2lnbm91dFBvcHVwQ2FsbGJhY2siLCJxdWVyeV9zdGF0dXNfcmVzcG9uc2VfdHlwZSIsIm5hdlJlc3BvbnNlIiwic2lnbmluUmVzcG9uc2UiLCJuYXZpZ2F0b3JQYXJhbXMiLCJzaWdub3V0UmVkaXJlY3QiLCJwb3N0TG9nb3V0UmVkaXJlY3RVcmkiLCJfc2lnbm91dFN0YXJ0IiwiX3NpZ25vdXRFbmQiLCJzaWdub3V0UG9wdXAiLCJwb3B1cF9wb3N0X2xvZ291dF9yZWRpcmVjdF91cmkiLCJfc2lnbm91dCIsInJldm9rZVByb21pc2UiLCJyZXZva2VBY2Nlc3NUb2tlbk9uU2lnbm91dCIsIl9yZXZva2VJbnRlcm5hbCIsInNpZ25vdXRSZXF1ZXN0Iiwic2lnbm91dFJlc3BvbnNlIiwicmV2b2tlQWNjZXNzVG9rZW4iLCJzdWNjZXNzIiwiX3Jldm9rZUFjY2Vzc1Rva2VuSW50ZXJuYWwiLCJfcmV2b2tlUmVmcmVzaFRva2VuSW50ZXJuYWwiLCJhdFN1Y2Nlc3MiLCJydFN1Y2Nlc3MiLCJzdG9wU2lsZW50UmVuZXciLCJfdXNlclN0b3JlIiwiX3VzZXJTdG9yZUtleSIsInJlZGlyZWN0TmF2aWdhdG9yIiwicG9wdXBOYXZpZ2F0b3IiLCJpZnJhbWVOYXZpZ2F0b3IiLCJ1c2VyU3RvcmUiLCJfdXNlckxvYWRlZCIsIl91c2VyVW5sb2FkZWQiLCJfc2lsZW50UmVuZXdFcnJvciIsIl91c2VyU2lnbmVkSW4iLCJfdXNlclNpZ25lZE91dCIsIl91c2VyU2Vzc2lvbkNoYW5nZWQiLCJyZW1vdmVVc2VyTG9hZGVkIiwicmVtb3ZlVXNlclVubG9hZGVkIiwiYWRkU2lsZW50UmVuZXdFcnJvciIsInJlbW92ZVNpbGVudFJlbmV3RXJyb3IiLCJhZGRVc2VyU2lnbmVkSW4iLCJyZW1vdmVVc2VyU2lnbmVkSW4iLCJhZGRVc2VyU2lnbmVkT3V0IiwicmVtb3ZlVXNlclNpZ25lZE91dCIsImFkZFVzZXJTZXNzaW9uQ2hhbmdlZCIsInJlbW92ZVVzZXJTZXNzaW9uQ2hhbmdlZCIsIkRlZmF1bHRDaGVja1Nlc3Npb25JbnRlcnZhbCIsInN0b3JlIiwiX3BvcHVwX3JlZGlyZWN0X3VyaSIsIl9wb3B1cF9wb3N0X2xvZ291dF9yZWRpcmVjdF91cmkiLCJfcG9wdXBXaW5kb3dGZWF0dXJlcyIsIl9wb3B1cFdpbmRvd1RhcmdldCIsIl9zaWxlbnRfcmVkaXJlY3RfdXJpIiwiX3NpbGVudFJlcXVlc3RUaW1lb3V0IiwiX2F1dG9tYXRpY1NpbGVudFJlbmV3IiwiX3ZhbGlkYXRlU3ViT25TaWxlbnRSZW5ldyIsIl9pbmNsdWRlSWRUb2tlbkluU2lsZW50UmVuZXciLCJfbW9uaXRvclNlc3Npb24iLCJfbW9uaXRvckFub255bW91c1Nlc3Npb24iLCJfcXVlcnlfc3RhdHVzX3Jlc3BvbnNlX3R5cGUiLCJfcmV2b2tlQWNjZXNzVG9rZW5PblNpZ25vdXQiLCJwcmVmaXgiLCJfc3RvcmUiLCJfcHJlZml4Il0sIm1hcHBpbmdzIjoiOztBQUFBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esa0RBQTBDLGdDQUFnQztBQUMxRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGdFQUF3RCxrQkFBa0I7QUFDMUU7QUFDQSx5REFBaUQsY0FBYztBQUMvRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaURBQXlDLGlDQUFpQztBQUMxRSx3SEFBZ0gsbUJBQW1CLEVBQUU7QUFDckk7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBMkIsMEJBQTBCLEVBQUU7QUFDdkQseUNBQWlDLGVBQWU7QUFDaEQ7QUFDQTtBQUNBOztBQUVBO0FBQ0EsOERBQXNELCtEQUErRDs7QUFFckg7QUFDQTs7O0FBR0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQy9FQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQTs7QUFuQkE7QUFDQTs7a0JBb0JlO0FBQ1hBLDZCQURXO0FBRVhDLGlCQUZXO0FBR1hDLHNDQUhXO0FBSVhDLDhEQUpXO0FBS1hDLG9FQUxXO0FBTVhDLDhEQU5XO0FBT1hDLHlDQVBXO0FBUVhDLDJEQVJXO0FBU1hDLHFEQVRXO0FBVVhDLHVFQVZXO0FBV1hDLDBFQVhXO0FBWVhDLDhEQVpXO0FBYVhDLHVFQWJXO0FB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O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBLFdBQVc7QUFDWDs7QUFFQTtBQUNBO0FBQ0Esd0NBQXdDLFdBQVc7QUFDbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDJCQUEyQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLFNBQVM7QUFDVDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esb0NBQW9DLGNBQWM7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlDQUFpQyxrQkFBa0I7QUFDbkQ7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGlCQUFpQjs7QUFFakI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLGlCQUFpQjtBQUN6QztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFlBQVk7QUFDWjtBQUNBOztBQUVBO0FBQ0EsWUFBWTtBQUNaOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsOENBQThDLFFBQVE7QUFDdEQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBOztBQUVBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7O0FBRUEsV0FBVztBQUNYO0FBQ0E7QUFDQTs7QUFFQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0EsOENBQThDLFFBQVE7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQSw4Q0FBOEMsUUFBUTtBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQSw4Q0FBOEMsUUFBUTtBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7QUMvdEJZOztBQUVaO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxrQ0FBa0MsU0FBUztBQUMzQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaUJBQWlCLFNBQVM7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQixTQUFTO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsMENBQTBDLFVBQVU7QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7QUN0SkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRVk7O0FBRVosYUFBYSxtQkFBTyxDQUFDLG9EQUFXO0FBQ2hDLGNBQWMsbUJBQU8sQ0FBQyxnREFBUztBQUMvQixjQUFjLG1CQUFPLENBQUMsb0VBQVM7O0FBRS9CO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUIsbURBQW1EO0FBQ3hFO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsVUFBVTtBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsWUFBWTtBQUM3QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsMEJBQTBCO0FBQzFCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLHVDQUF1QyxTQUFTO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsaUJBQWlCO0FBQ2hDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsYUFBYSxpQkFBaUI7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLFNBQVM7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixTQUFTO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixTQUFTO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0RBQWdELEVBQUU7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsaUJBQWlCLFNBQVM7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlDQUF5QztBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLGVBQWU7QUFDdkM7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0Esd0JBQXdCLFFBQVE7QUFDaEM7QUFDQSxxQkFBcUIsZUFBZTtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsWUFBWTtBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEscUJBQXFCLFNBQVM7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHFCQUFxQixTQUFTO0FBQzlCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLHFCQUFxQixTQUFTO0FBQzlCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixrQkFBa0I7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLG1CQUFtQixjQUFjO0FBQ2pDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx1REFBdUQsT0FBTztBQUM5RDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsdURBQXVELE9BQU87QUFDOUQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztB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TyxDQUFDLDRHQUF1QztBQUMvQyxtQkFBTyxDQUFDLG9GQUEyQjtBQUNuQyxtQkFBTyxDQUFDLHdIQUE2QztBQUNyRCxtQkFBTyxDQUFDLHdGQUE2QjtBQUNyQyxtQkFBTyxDQUFDLG9GQUEyQjtBQUNuQyxtQkFBTyxDQUFDLGdIQUF5QztBQUNqRCxtQkFBTyxDQUFDLDhGQUFnQztBQUN4QyxtQkFBTyxDQUFDLDhGQUFnQztBQUN4QyxtQkFBTyxDQUFDLHNHQUFvQztBQUM1QyxtQkFBTyxDQUFDLHdGQUE2QjtBQUNyQyxtQkFBTyxDQUFDLGdGQUF5QjtBQUNqQyxtQkFBTyxDQUFDLDRHQUF1QztBQUMvQyxtQkFBTyxDQUFDLDhGQUFnQztBQUN4QyxtQkFBTyxDQUFDLHdGQUE2QjtBQUNyQyxtQkFBTyxDQUFDLHdGQUE2QjtBQUNyQyxtQkFBTyxDQUFDLHdHQUFxQztBQUM3QyxtQkFBTyxDQUFDLGdGQUF5QjtBQUNqQyxtQkFBTyxDQUFDLG9GQUEyQjtBQUNuQyxtQkFBTyxDQUFDLGtHQUFrQztBQUMxQyxtQkFBTyxDQUFDLDRGQUErQjtBQUN2QyxtQkFBTyxDQUFDLG9HQUFtQztBQUMzQyxtQkFBTyxDQUFDLDBGQUE4QjtBQUN0QyxtQkFBTyxDQUFDLDhGQUFnQztBQUN4QyxtQkFBTyxDQUFDLGdHQUFpQztBQUN6QyxtQkFBTyxDQUFDLHdGQUE2QjtBQUNyQyxtQkFBTyxDQUFDLDBHQUFzQztBQUM5QyxtQkFBTyxDQUFDLDRHQUF1QztBQUMvQyxtQkFBTyxDQUFDLDRHQUF1QztBQUMvQyxtQkFBTyxDQUFDLGtHQUFrQztBQUMxQyxtQkFBTyxDQUFDLDhGQUFnQztBQUN4QyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLGdGQUF5QjtBQUNqQyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLGdGQUF5QjtBQUNqQyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLG9GQUEyQjtBQUNuQyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLGdGQUF5QjtBQUNqQyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLGdGQUF5QjtBQUNqQyxtQkFBTyxDQUFDLGdGQUF5QjtBQUNqQyxtQkFBTyxDQUFDLGdGQUF5QjtBQUNqQyxtQkFBTyxDQUFDLGdGQUF5QjtBQUNqQyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLDBHQUFzQztBQUM5QyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLG9GQUEyQjtBQUNuQyxtQkFBTyxDQUFDLDRGQUErQjtBQUN2QyxtQkFBTyxDQUFDLHNHQUFvQztBQUM1QyxtQkFBTyxDQUFDLDhGQUFnQztBQUN4QyxtQkFBTyxDQUFDLDRGQUErQjtBQUN2QyxtQkFBTyxDQUFDLHdGQUE2QjtBQUNyQyxtQkFBTyxDQUFDLGtHQUFrQztBQUMxQyxtQkFBTyxDQUFDLHdGQUE2QjtBQUNyQyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLHNGQUE0QjtBQUNwQyxtQkFBTyxDQUFDLG9GQUEyQjtBQUNuQyxtQkFBTyxDQUFDLHNGQUE0QjtBQUNwQyxtQkFBTyxDQUFDLDhGQUFnQztBQUN4QyxtQkFBTyxDQUFDLDRGQUErQjtBQUN2QyxtQkFBTyxDQUFDLDBGQUE4QjtBQUN0QyxtQkFBTyxDQUFDLG9GQUEyQjtBQUNuQyxtQkFBTyxDQUFDLHNGQUE0QjtBQUNwQyxtQkFBTyxDQUFDLHdGQUE2QjtBQUNyQyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLDhFQUF3QjtBQUNoQyxtQkFBTyxDQUFDLHNGQUE0QjtBQUNwQyxtQkFBTyxDQUFDLGtHQUFrQztBQUMxQyxtQkFBTyxDQUFDLDBGQUE4QjtBQUN0QyxtQkFBTyxDQUFDLGdHQUFpQztBQUN6QyxtQkFBTyxDQUFDLDBGQUE4QjtBQUN0QyxtQkFB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TyxDQUFDLHNHQUFvQztBQUM1QyxtQkFBTyxDQUFDLG9GQUEyQjtBQUNuQyxtQkFBTyxDQUFDLG9GQUEyQjtBQUNuQyxtQkFBTyxDQUFDLDBFQUFzQjtBQUM5QixtQkFBTyxDQUFDLDBFQUFzQjtBQUM5QixtQkFBTyxDQUFDLG9GQUEyQjtBQUNuQyxtQkFBTyxDQUFDLG9GQUEyQjtBQUNuQyxtQkFBTyxDQUFDLDhFQUF3QjtBQUNoQyxtQkFBTyxDQUFDLDhFQUF3QjtBQUNoQyxtQkFBTyxDQUFDLHdGQUE2QjtBQUNyQyxtQkFBTyxDQUFDLHdGQUE2QjtBQUNyQyxtQkFBTyxDQUFDLDBFQUFzQjtBQUM5QixtQkFBTyxDQUFDLHdGQUE2QjtBQUNyQyxtQkFBTyxDQUFDLDBGQUE4QjtBQUN0QyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLDhGQUFnQztBQUN4QyxtQkFBTyxDQUFDLHNGQUE0QjtBQUNwQyxtQkFBTyxDQUFDLG9GQUEyQjtBQUNuQyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLDhGQUFnQztBQUN4QyxtQkFBTyxDQUFDLHNGQUE0QjtBQUNwQyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLHNGQUE0QjtBQUNwQyxtQkFBTyxDQUFDLDRGQUErQjtBQUN2QyxtQkFBTyxDQUFDLG9GQUEyQjtBQUNuQyxtQkFBTyxDQUFDLDRHQUF1QztBQUMvQyxtQkFBTyxDQUFDLDRHQUF1QztBQUMvQyxtQkFBTyxDQUFDLHNHQUFvQztBQUM1QyxtQkFBTyxDQUFDLGdIQUF5QztBQUNqRCxtQkFBTyxDQUFDLDhHQUF3QztBQUNoRCxtQkFBTyxDQUFDLHdIQUE2QztBQUNyRCxtQkFBTyxDQUFDLHNHQUFvQztBQUM1QyxtQkFBTyxDQUFDLDhHQUF3QztBQUNoRCxtQkFBTyxDQUFDLDhGQUFnQztBQUN4QyxtQkFBTyxDQUFDLHNFQUFv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QixFQUFzQixFQUF0QixDQUFQO0FBQ0Q7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ1JELElBQU16ZSxVQUFVLGVBQWhCLEMsUUFBeUNBLE8sR0FBQUEsTyIsImZpbGUiOiJvaWRjLWNsaWVudC5qcyIsInNvdXJjZXNDb250ZW50IjpbIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbiBcdFx0fVxuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuIFx0fTtcblxuIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbiBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbiBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbiBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbiBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4gXHRcdHJldHVybiBucztcbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSAwKTtcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXG5cbmltcG9ydCB7IExvZyB9IGZyb20gJy4vc3JjL0xvZy5qcyc7XG5pbXBvcnQgeyBPaWRjQ2xpZW50IH0gZnJvbSAnLi9zcmMvT2lkY0NsaWVudC5qcyc7XG5pbXBvcnQgeyBPaWRjQ2xpZW50U2V0dGluZ3MgfSBmcm9tICcuL3NyYy9PaWRjQ2xpZW50U2V0dGluZ3MuanMnO1xuaW1wb3J0IHsgV2ViU3RvcmFnZVN0YXRlU3RvcmUgfSBmcm9tICcuL3NyYy9XZWJTdG9yYWdlU3RhdGVTdG9yZS5qcyc7XG5pbXBvcnQgeyBJbk1lbW9yeVdlYlN0b3JhZ2UgfSBmcm9tICcuL3NyYy9Jbk1lbW9yeVdlYlN0b3JhZ2UuanMnO1xuaW1wb3J0IHsgVXNlck1hbmFnZXIgfSBmcm9tICcuL3NyYy9Vc2VyTWFuYWdlci5qcyc7XG5pbXBvcnQgeyBBY2Nlc3NUb2tlbkV2ZW50cyB9IGZyb20gJy4vc3JjL0FjY2Vzc1Rva2VuRXZlbnRzLmpzJztcbmltcG9ydCB7IE1ldGFkYXRhU2VydmljZSB9IGZyb20gJy4vc3JjL01ldGFkYXRhU2VydmljZS5qcyc7XG5pbXBvcnQgeyBDb3Jkb3ZhUG9wdXBOYXZpZ2F0b3IgfSBmcm9tICcuL3NyYy9Db3Jkb3ZhUG9wdXBOYXZpZ2F0b3IuanMnO1xuaW1wb3J0IHsgQ29yZG92YUlGcmFtZU5hdmlnYXRvciB9IGZyb20gJy4vc3JjL0NvcmRvdmFJRnJhbWVOYXZpZ2F0b3IuanMnO1xuaW1wb3J0IHsgQ2hlY2tTZXNzaW9uSUZyYW1lIH0gZnJvbSAnLi9zcmMvQ2hlY2tTZXNzaW9uSUZyYW1lLmpzJztcbmltcG9ydCB7IFRva2VuUmV2b2NhdGlvbkNsaWVudCB9IGZyb20gJy4vc3JjL1Rva2VuUmV2b2NhdGlvbkNsaWVudC5qcyc7XG5pbXBvcnQgeyBTZXNzaW9uTW9uaXRvciB9IGZyb20gJy4vc3JjL1Nlc3Npb25Nb25pdG9yLmpzJztcbmltcG9ydCB7IEdsb2JhbCB9IGZyb20gJy4vc3JjL0dsb2JhbC5qcyc7XG5pbXBvcnQgeyBVc2VyIH0gZnJvbSAnLi9zcmMvVXNlci5qcyc7XG5cbmltcG9ydCB7IFZlcnNpb24gfSBmcm9tICcuL3ZlcnNpb24uanMnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gICAgVmVyc2lvbixcbiAgICBMb2csXG4gICAgT2lkY0NsaWVudCxcbiAgICBPaWRjQ2xpZW50U2V0dGluZ3MsXG4gICAgV2ViU3RvcmFnZVN0YXRlU3RvcmUsXG4gICAgSW5NZW1vcnlXZWJTdG9yYWdlLFxuICAgIFVzZXJNYW5hZ2VyLFxuICAgIEFjY2Vzc1Rva2VuRXZlbnRzLFxuICAgIE1ldGFkYXRhU2VydmljZSxcbiAgICBDb3Jkb3ZhUG9wdXBOYXZpZ2F0b3IsXG4gICAgQ29yZG92YUlGcmFtZU5hdmlnYXRvcixcbiAgICBDaGVja1Nlc3Npb25JRnJhbWUsXG4gICAgVG9rZW5SZXZvY2F0aW9uQ2xpZW50LFxuICAgIFNlc3Npb25Nb25pdG9yLFxuICAgIEdsb2JhbCxcbiAgICBVc2VyXG59O1xuIiwiLypcbiAqIGpzcnNhc2lnbihhbGwpIDguMC4xMiAoMjAxOC0wNC0yMikgKGMpIDIwMTAtMjAxOCBLZW5qaSBVcnVzaGltYSB8IGtqdXIuZ2l0aHViLmNvbS9qc3JzYXNpZ24vbGljZW5zZVxuICovXG5cbnZhciBuYXZpZ2F0b3IgPSB7fTtcbm5hdmlnYXRvci51c2VyQWdlbnQgPSBmYWxzZTtcblxudmFyIHdpbmRvdyA9IHt9O1xuXG4vKiFcbkNvcHlyaWdodCAoYykgMjAxMSwgWWFob28hIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbkNvZGUgbGljZW5zZWQgdW5kZXIgdGhlIEJTRCBMaWNlbnNlOlxuaHR0cDovL2RldmVsb3Blci55YWhvby5jb20veXVpL2xpY2Vuc2UuaHRtbFxudmVyc2lvbjogMi45LjBcbiovXG5pZihZQUhPTz09PXVuZGVmaW5lZCl7dmFyIFlBSE9PPXt9fVlBSE9PLmxhbmc9e2V4dGVuZDpmdW5jdGlvbihnLGgsZil7aWYoIWh8fCFnKXt0aHJvdyBuZXcgRXJyb3IoXCJZQUhPTy5sYW5nLmV4dGVuZCBmYWlsZWQsIHBsZWFzZSBjaGVjayB0aGF0IGFsbCBkZXBlbmRlbmNpZXMgYXJlIGluY2x1ZGVkLlwiKX12YXIgZD1mdW5jdGlvbigpe307ZC5wcm90b3R5cGU9aC5wcm90b3R5cGU7Zy5wcm90b3R5cGU9bmV3IGQoKTtnLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1nO2cuc3VwZXJjbGFzcz1oLnByb3RvdHlwZTtpZihoLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj09T2JqZWN0LnByb3RvdHlwZS5jb25zdHJ1Y3Rvcil7aC5wcm90b3R5cGUuY29uc3RydWN0b3I9aH1pZihmKXt2YXIgYjtmb3IoYiBpbiBmKXtnLnByb3RvdHlwZVtiXT1mW2JdfXZhciBlPWZ1bmN0aW9uKCl7fSxjPVtcInRvU3RyaW5nXCIsXCJ2YWx1ZU9mXCJdO3RyeXtpZigvTVNJRS8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSl7ZT1mdW5jdGlvbihqLGkpe2ZvcihiPTA7YjxjLmxlbmd0aDtiPWIrMSl7dmFyIGw9Y1tiXSxrPWlbbF07aWYodHlwZW9mIGs9PT1cImZ1bmN0aW9uXCImJmshPU9iamVjdC5wcm90b3R5cGVbbF0pe2pbbF09a319fX19Y2F0Y2goYSl7fWUoZy5wcm90b3R5cGUsZil9fX07XG4vKiEgQ3J5cHRvSlMgdjMuMS4yIGNvcmUtZml4LmpzXG4gKiBjb2RlLmdvb2dsZS5jb20vcC9jcnlwdG8tanNcbiAqIChjKSAyMDA5LTIwMTMgYnkgSmVmZiBNb3R0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogY29kZS5nb29nbGUuY29tL3AvY3J5cHRvLWpzL3dpa2kvTGljZW5zZVxuICogVEhJUyBJUyBGSVggb2YgJ2NvcmUuanMnIHRvIGZpeCBIbWFjIGlzc3VlLlxuICogaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9jcnlwdG8tanMvaXNzdWVzL2RldGFpbD9pZD04NFxuICogaHR0cHM6Ly9jcnlwdG8tanMuZ29vZ2xlY29kZS5jb20vc3ZuLWhpc3RvcnkvcjY2Ny9icmFuY2hlcy8zLngvc3JjL2NvcmUuanNcbiAqL1xudmFyIENyeXB0b0pTPUNyeXB0b0pTfHwoZnVuY3Rpb24oZSxnKXt2YXIgYT17fTt2YXIgYj1hLmxpYj17fTt2YXIgaj1iLkJhc2U9KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gbigpe31yZXR1cm57ZXh0ZW5kOmZ1bmN0aW9uKHApe24ucHJvdG90eXBlPXRoaXM7dmFyIG89bmV3IG4oKTtpZihwKXtvLm1peEluKHApfWlmKCFvLmhhc093blByb3BlcnR5KFwiaW5pdFwiKSl7by5pbml0PWZ1bmN0aW9uKCl7by4kc3VwZXIuaW5pdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fW8uaW5pdC5wcm90b3R5cGU9bztvLiRzdXBlcj10aGlzO3JldHVybiBvfSxjcmVhdGU6ZnVuY3Rpb24oKXt2YXIgbz10aGlzLmV4dGVuZCgpO28uaW5pdC5hcHBseShvLGFyZ3VtZW50cyk7cmV0dXJuIG99LGluaXQ6ZnVuY3Rpb24oKXt9LG1peEluOmZ1bmN0aW9uKHApe2Zvcih2YXIgbyBpbiBwKXtpZihwLmhhc093blByb3BlcnR5KG8pKXt0aGlzW29dPXBbb119fWlmKHAuaGFzT3duUHJvcGVydHkoXCJ0b1N0cmluZ1wiKSl7dGhpcy50b1N0cmluZz1wLnRvU3RyaW5nfX0sY2xvbmU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbml0LnByb3RvdHlwZS5leHRlbmQodGhpcyl9fX0oKSk7dmFyIGw9Yi5Xb3JkQXJyYXk9ai5leHRlbmQoe2luaXQ6ZnVuY3Rpb24obyxuKXtvPXRoaXMud29yZHM9b3x8W107aWYobiE9Zyl7dGhpcy5zaWdCeXRlcz1ufWVsc2V7dGhpcy5zaWdCeXRlcz1vLmxlbmd0aCo0fX0sdG9TdHJpbmc6ZnVuY3Rpb24obil7cmV0dXJuKG58fGgpLnN0cmluZ2lmeSh0aGlzKX0sY29uY2F0OmZ1bmN0aW9uKHQpe3ZhciBxPXRoaXMud29yZHM7dmFyIHA9dC53b3Jkczt2YXIgbj10aGlzLnNpZ0J5dGVzO3ZhciBzPXQuc2lnQnl0ZXM7dGhpcy5jbGFtcCgpO2lmKG4lNCl7Zm9yKHZhciByPTA7cjxzO3IrKyl7dmFyIG89KHBbcj4+PjJdPj4+KDI0LShyJTQpKjgpKSYyNTU7cVsobityKT4+PjJdfD1vPDwoMjQtKChuK3IpJTQpKjgpfX1lbHNle2Zvcih2YXIgcj0wO3I8cztyKz00KXtxWyhuK3IpPj4+Ml09cFtyPj4+Ml19fXRoaXMuc2lnQnl0ZXMrPXM7cmV0dXJuIHRoaXN9LGNsYW1wOmZ1bmN0aW9uKCl7dmFyIG89dGhpcy53b3Jkczt2YXIgbj10aGlzLnNpZ0J5dGVzO29bbj4+PjJdJj00Mjk0OTY3Mjk1PDwoMzItKG4lNCkqOCk7by5sZW5ndGg9ZS5jZWlsKG4vNCl9LGNsb25lOmZ1bmN0aW9uKCl7dmFyIG49ai5jbG9uZS5jYWxsKHRoaXMpO24ud29yZHM9dGhpcy53b3Jkcy5zbGljZSgwKTtyZXR1cm4gbn0scmFuZG9tOmZ1bmN0aW9uKHApe3ZhciBvPVtdO2Zvcih2YXIgbj0wO248cDtuKz00KXtvLnB1c2goKGUucmFuZG9tKCkqNDI5NDk2NzI5Nil8MCl9cmV0dXJuIG5ldyBsLmluaXQobyxwKX19KTt2YXIgbT1hLmVuYz17fTt2YXIgaD1tLkhleD17c3RyaW5naWZ5OmZ1bmN0aW9uKHApe3ZhciByPXAud29yZHM7dmFyIG89cC5zaWdCeXRlczt2YXIgcT1bXTtmb3IodmFyIG49MDtuPG87bisrKXt2YXIgcz0ocltuPj4+Ml0+Pj4oMjQtKG4lNCkqOCkpJjI1NTtxLnB1c2goKHM+Pj40KS50b1N0cmluZygxNikpO3EucHVzaCgocyYxNSkudG9TdHJpbmcoMTYpKX1yZXR1cm4gcS5qb2luKFwiXCIpfSxwYXJzZTpmdW5jdGlvbihwKXt2YXIgbj1wLmxlbmd0aDt2YXIgcT1bXTtmb3IodmFyIG89MDtvPG47bys9Mil7cVtvPj4+M118PXBhcnNlSW50KHAuc3Vic3RyKG8sMiksMTYpPDwoMjQtKG8lOCkqNCl9cmV0dXJuIG5ldyBsLmluaXQocSxuLzIpfX07dmFyIGQ9bS5MYXRpbjE9e3N0cmluZ2lmeTpmdW5jdGlvbihxKXt2YXIgcj1xLndvcmRzO3ZhciBwPXEuc2lnQnl0ZXM7dmFyIG49W107Zm9yKHZhciBvPTA7bzxwO28rKyl7dmFyIHM9KHJbbz4+PjJdPj4+KDI0LShvJTQpKjgpKSYyNTU7bi5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUocykpfXJldHVybiBuLmpvaW4oXCJcIil9LHBhcnNlOmZ1bmN0aW9uKHApe3ZhciBuPXAubGVuZ3RoO3ZhciBxPVtdO2Zvcih2YXIgbz0wO288bjtvKyspe3Fbbz4+PjJdfD0ocC5jaGFyQ29kZUF0KG8pJjI1NSk8PCgyNC0obyU0KSo4KX1yZXR1cm4gbmV3IGwuaW5pdChxLG4pfX07dmFyIGM9bS5VdGY4PXtzdHJpbmdpZnk6ZnVuY3Rpb24obil7dHJ5e3JldHVybiBkZWNvZGVVUklDb21wb25lbnQoZXNjYXBlKGQuc3RyaW5naWZ5KG4pKSl9Y2F0Y2gobyl7dGhyb3cgbmV3IEVycm9yKFwiTWFsZm9ybWVkIFVURi04IGRhdGFcIil9fSxwYXJzZTpmdW5jdGlvbihuKXtyZXR1cm4gZC5wYXJzZSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQobikpKX19O3ZhciBpPWIuQnVmZmVyZWRCbG9ja0FsZ29yaXRobT1qLmV4dGVuZCh7cmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLl9kYXRhPW5ldyBsLmluaXQoKTt0aGlzLl9uRGF0YUJ5dGVzPTB9LF9hcHBlbmQ6ZnVuY3Rpb24obil7aWYodHlwZW9mIG49PVwic3RyaW5nXCIpe249Yy5wYXJzZShuKX10aGlzLl9kYXRhLmNvbmNhdChuKTt0aGlzLl9uRGF0YUJ5dGVzKz1uLnNpZ0J5dGVzfSxfcHJvY2VzczpmdW5jdGlvbih3KXt2YXIgcT10aGlzLl9kYXRhO3ZhciB4PXEud29yZHM7dmFyIG49cS5zaWdCeXRlczt2YXIgdD10aGlzLmJsb2NrU2l6ZTt2YXIgdj10KjQ7dmFyIHU9bi92O2lmKHcpe3U9ZS5jZWlsKHUpfWVsc2V7dT1lLm1heCgodXwwKS10aGlzLl9taW5CdWZmZXJTaXplLDApfXZhciBzPXUqdDt2YXIgcj1lLm1pbihzKjQsbik7aWYocyl7Zm9yKHZhciBwPTA7cDxzO3ArPXQpe3RoaXMuX2RvUHJvY2Vzc0Jsb2NrKHgscCl9dmFyIG89eC5zcGxpY2UoMCxzKTtxLnNpZ0J5dGVzLT1yfXJldHVybiBuZXcgbC5pbml0KG8scil9LGNsb25lOmZ1bmN0aW9uKCl7dmFyIG49ai5jbG9uZS5jYWxsKHRoaXMpO24uX2RhdGE9dGhpcy5fZGF0YS5jbG9uZSgpO3JldHVybiBufSxfbWluQnVmZmVyU2l6ZTowfSk7dmFyIGY9Yi5IYXNoZXI9aS5leHRlbmQoe2NmZzpqLmV4dGVuZCgpLGluaXQ6ZnVuY3Rpb24obil7dGhpcy5jZmc9dGhpcy5jZmcuZXh0ZW5kKG4pO3RoaXMucmVzZXQoKX0scmVzZXQ6ZnVuY3Rpb24oKXtpLnJlc2V0LmNhbGwodGhpcyk7dGhpcy5fZG9SZXNldCgpfSx1cGRhdGU6ZnVuY3Rpb24obil7dGhpcy5fYXBwZW5kKG4pO3RoaXMuX3Byb2Nlc3MoKTtyZXR1cm4gdGhpc30sZmluYWxpemU6ZnVuY3Rpb24obil7aWYobil7dGhpcy5fYXBwZW5kKG4pfXZhciBvPXRoaXMuX2RvRmluYWxpemUoKTtyZXR1cm4gb30sYmxvY2tTaXplOjUxMi8zMixfY3JlYXRlSGVscGVyOmZ1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbihwLG8pe3JldHVybiBuZXcgbi5pbml0KG8pLmZpbmFsaXplKHApfX0sX2NyZWF0ZUhtYWNIZWxwZXI6ZnVuY3Rpb24obil7cmV0dXJuIGZ1bmN0aW9uKHAsbyl7cmV0dXJuIG5ldyBrLkhNQUMuaW5pdChuLG8pLmZpbmFsaXplKHApfX19KTt2YXIgaz1hLmFsZ289e307cmV0dXJuIGF9KE1hdGgpKTtcbi8qXG5DcnlwdG9KUyB2My4xLjIgeDY0LWNvcmUtbWluLmpzXG5jb2RlLmdvb2dsZS5jb20vcC9jcnlwdG8tanNcbihjKSAyMDA5LTIwMTMgYnkgSmVmZiBNb3R0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuY29kZS5nb29nbGUuY29tL3AvY3J5cHRvLWpzL3dpa2kvTGljZW5zZVxuKi9cbihmdW5jdGlvbihnKXt2YXIgYT1DcnlwdG9KUyxmPWEubGliLGU9Zi5CYXNlLGg9Zi5Xb3JkQXJyYXksYT1hLng2ND17fTthLldvcmQ9ZS5leHRlbmQoe2luaXQ6ZnVuY3Rpb24oYixjKXt0aGlzLmhpZ2g9Yjt0aGlzLmxvdz1jfX0pO2EuV29yZEFycmF5PWUuZXh0ZW5kKHtpbml0OmZ1bmN0aW9uKGIsYyl7Yj10aGlzLndvcmRzPWJ8fFtdO3RoaXMuc2lnQnl0ZXM9YyE9Zz9jOjgqYi5sZW5ndGh9LHRvWDMyOmZ1bmN0aW9uKCl7Zm9yKHZhciBiPXRoaXMud29yZHMsYz1iLmxlbmd0aCxhPVtdLGQ9MDtkPGM7ZCsrKXt2YXIgZT1iW2RdO2EucHVzaChlLmhpZ2gpO2EucHVzaChlLmxvdyl9cmV0dXJuIGguY3JlYXRlKGEsdGhpcy5zaWdCeXRlcyl9LGNsb25lOmZ1bmN0aW9uKCl7Zm9yKHZhciBiPWUuY2xvbmUuY2FsbCh0aGlzKSxjPWIud29yZHM9dGhpcy53b3Jkcy5zbGljZSgwKSxhPWMubGVuZ3RoLGQ9MDtkPGE7ZCsrKWNbZF09Y1tkXS5jbG9uZSgpO3JldHVybiBifX0pfSkoKTtcblxuLypcbkNyeXB0b0pTIHYzLjEuMiBlbmMtYmFzZTY0LmpzXG5jb2RlLmdvb2dsZS5jb20vcC9jcnlwdG8tanNcbihjKSAyMDA5LTIwMTMgYnkgSmVmZiBNb3R0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuY29kZS5nb29nbGUuY29tL3AvY3J5cHRvLWpzL3dpa2kvTGljZW5zZVxuKi9cbihmdW5jdGlvbigpe3ZhciBoPUNyeXB0b0pTLGo9aC5saWIuV29yZEFycmF5O2guZW5jLkJhc2U2ND17c3RyaW5naWZ5OmZ1bmN0aW9uKGIpe3ZhciBlPWIud29yZHMsZj1iLnNpZ0J5dGVzLGM9dGhpcy5fbWFwO2IuY2xhbXAoKTtiPVtdO2Zvcih2YXIgYT0wO2E8ZjthKz0zKWZvcih2YXIgZD0oZVthPj4+Ml0+Pj4yNC04KihhJTQpJjI1NSk8PDE2fChlW2ErMT4+PjJdPj4+MjQtOCooKGErMSklNCkmMjU1KTw8OHxlW2ErMj4+PjJdPj4+MjQtOCooKGErMiklNCkmMjU1LGc9MDs0PmcmJmErMC43NSpnPGY7ZysrKWIucHVzaChjLmNoYXJBdChkPj4+NiooMy1nKSY2MykpO2lmKGU9Yy5jaGFyQXQoNjQpKWZvcig7Yi5sZW5ndGglNDspYi5wdXNoKGUpO3JldHVybiBiLmpvaW4oXCJcIil9LHBhcnNlOmZ1bmN0aW9uKGIpe3ZhciBlPWIubGVuZ3RoLGY9dGhpcy5fbWFwLGM9Zi5jaGFyQXQoNjQpO2MmJihjPWIuaW5kZXhPZihjKSwtMSE9YyYmKGU9YykpO2Zvcih2YXIgYz1bXSxhPTAsZD0wO2Q8XG5lO2QrKylpZihkJTQpe3ZhciBnPWYuaW5kZXhPZihiLmNoYXJBdChkLTEpKTw8MiooZCU0KSxoPWYuaW5kZXhPZihiLmNoYXJBdChkKSk+Pj42LTIqKGQlNCk7Y1thPj4+Ml18PShnfGgpPDwyNC04KihhJTQpO2ErK31yZXR1cm4gai5jcmVhdGUoYyxhKX0sX21hcDpcIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky89XCJ9fSkoKTtcblxuLypcbkNyeXB0b0pTIHYzLjEuMiBzaGEyNTYtbWluLmpzXG5jb2RlLmdvb2dsZS5jb20vcC9jcnlwdG8tanNcbihjKSAyMDA5LTIwMTMgYnkgSmVmZiBNb3R0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuY29kZS5nb29nbGUuY29tL3AvY3J5cHRvLWpzL3dpa2kvTGljZW5zZVxuKi9cbihmdW5jdGlvbihrKXtmb3IodmFyIGc9Q3J5cHRvSlMsaD1nLmxpYix2PWguV29yZEFycmF5LGo9aC5IYXNoZXIsaD1nLmFsZ28scz1bXSx0PVtdLHU9ZnVuY3Rpb24ocSl7cmV0dXJuIDQyOTQ5NjcyOTYqKHEtKHF8MCkpfDB9LGw9MixiPTA7NjQ+Yjspe3ZhciBkO2E6e2Q9bDtmb3IodmFyIHc9ay5zcXJ0KGQpLHI9MjtyPD13O3IrKylpZighKGQlcikpe2Q9ITE7YnJlYWsgYX1kPSEwfWQmJig4PmImJihzW2JdPXUoay5wb3cobCwwLjUpKSksdFtiXT11KGsucG93KGwsMS8zKSksYisrKTtsKyt9dmFyIG49W10saD1oLlNIQTI1Nj1qLmV4dGVuZCh7X2RvUmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLl9oYXNoPW5ldyB2LmluaXQocy5zbGljZSgwKSl9LF9kb1Byb2Nlc3NCbG9jazpmdW5jdGlvbihxLGgpe2Zvcih2YXIgYT10aGlzLl9oYXNoLndvcmRzLGM9YVswXSxkPWFbMV0sYj1hWzJdLGs9YVszXSxmPWFbNF0sZz1hWzVdLGo9YVs2XSxsPWFbN10sZT0wOzY0PmU7ZSsrKXtpZigxNj5lKW5bZV09XG5xW2grZV18MDtlbHNle3ZhciBtPW5bZS0xNV0scD1uW2UtMl07bltlXT0oKG08PDI1fG0+Pj43KV4obTw8MTR8bT4+PjE4KV5tPj4+MykrbltlLTddKygocDw8MTV8cD4+PjE3KV4ocDw8MTN8cD4+PjE5KV5wPj4+MTApK25bZS0xNl19bT1sKygoZjw8MjZ8Zj4+PjYpXihmPDwyMXxmPj4+MTEpXihmPDw3fGY+Pj4yNSkpKyhmJmdefmYmaikrdFtlXStuW2VdO3A9KChjPDwzMHxjPj4+MileKGM8PDE5fGM+Pj4xMyleKGM8PDEwfGM+Pj4yMikpKyhjJmReYyZiXmQmYik7bD1qO2o9ZztnPWY7Zj1rK218MDtrPWI7Yj1kO2Q9YztjPW0rcHwwfWFbMF09YVswXStjfDA7YVsxXT1hWzFdK2R8MDthWzJdPWFbMl0rYnwwO2FbM109YVszXStrfDA7YVs0XT1hWzRdK2Z8MDthWzVdPWFbNV0rZ3wwO2FbNl09YVs2XStqfDA7YVs3XT1hWzddK2x8MH0sX2RvRmluYWxpemU6ZnVuY3Rpb24oKXt2YXIgZD10aGlzLl9kYXRhLGI9ZC53b3JkcyxhPTgqdGhpcy5fbkRhdGFCeXRlcyxjPTgqZC5zaWdCeXRlcztcbmJbYz4+PjVdfD0xMjg8PDI0LWMlMzI7YlsoYys2ND4+Pjk8PDQpKzE0XT1rLmZsb29yKGEvNDI5NDk2NzI5Nik7YlsoYys2ND4+Pjk8PDQpKzE1XT1hO2Quc2lnQnl0ZXM9NCpiLmxlbmd0aDt0aGlzLl9wcm9jZXNzKCk7cmV0dXJuIHRoaXMuX2hhc2h9LGNsb25lOmZ1bmN0aW9uKCl7dmFyIGI9ai5jbG9uZS5jYWxsKHRoaXMpO2IuX2hhc2g9dGhpcy5faGFzaC5jbG9uZSgpO3JldHVybiBifX0pO2cuU0hBMjU2PWouX2NyZWF0ZUhlbHBlcihoKTtnLkhtYWNTSEEyNTY9ai5fY3JlYXRlSG1hY0hlbHBlcihoKX0pKE1hdGgpO1xuXG4vKlxuQ3J5cHRvSlMgdjMuMS4yIHNoYTUxMi1taW4uanNcbmNvZGUuZ29vZ2xlLmNvbS9wL2NyeXB0by1qc1xuKGMpIDIwMDktMjAxMyBieSBKZWZmIE1vdHQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG5jb2RlLmdvb2dsZS5jb20vcC9jcnlwdG8tanMvd2lraS9MaWNlbnNlXG4qL1xuKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gYSgpe3JldHVybiBkLmNyZWF0ZS5hcHBseShkLGFyZ3VtZW50cyl9Zm9yKHZhciBuPUNyeXB0b0pTLHI9bi5saWIuSGFzaGVyLGU9bi54NjQsZD1lLldvcmQsVD1lLldvcmRBcnJheSxlPW4uYWxnbyxlYT1bYSgxMTE2MzUyNDA4LDM2MDk3Njc0NTgpLGEoMTg5OTQ0NzQ0MSw2MDI4OTE3MjUpLGEoMzA0OTMyMzQ3MSwzOTY0NDg0Mzk5KSxhKDM5MjEwMDk1NzMsMjE3MzI5NTU0OCksYSg5NjE5ODcxNjMsNDA4MTYyODQ3MiksYSgxNTA4OTcwOTkzLDMwNTM4MzQyNjUpLGEoMjQ1MzYzNTc0OCwyOTM3NjcxNTc5KSxhKDI4NzA3NjMyMjEsMzY2NDYwOTU2MCksYSgzNjI0MzgxMDgwLDI3MzQ4ODMzOTQpLGEoMzEwNTk4NDAxLDExNjQ5OTY1NDIpLGEoNjA3MjI1Mjc4LDEzMjM2MTA3NjQpLGEoMTQyNjg4MTk4NywzNTkwMzA0OTk0KSxhKDE5MjUwNzgzODgsNDA2ODE4MjM4MyksYSgyMTYyMDc4MjA2LDk5MTMzNjExMyksYSgyNjE0ODg4MTAzLDYzMzgwMzMxNyksXG5hKDMyNDgyMjI1ODAsMzQ3OTc3NDg2OCksYSgzODM1MzkwNDAxLDI2NjY2MTM0NTgpLGEoNDAyMjIyNDc3NCw5NDQ3MTExMzkpLGEoMjY0MzQ3MDc4LDIzNDEyNjI3NzMpLGEoNjA0ODA3NjI4LDIwMDc4MDA5MzMpLGEoNzcwMjU1OTgzLDE0OTU5OTA5MDEpLGEoMTI0OTE1MDEyMiwxODU2NDMxMjM1KSxhKDE1NTUwODE2OTIsMzE3NTIxODEzMiksYSgxOTk2MDY0OTg2LDIxOTg5NTA4MzcpLGEoMjU1NDIyMDg4MiwzOTk5NzE5MzM5KSxhKDI4MjE4MzQzNDksNzY2Nzg0MDE2KSxhKDI5NTI5OTY4MDgsMjU2NjU5NDg3OSksYSgzMjEwMzEzNjcxLDMyMDMzMzc5NTYpLGEoMzMzNjU3MTg5MSwxMDM0NDU3MDI2KSxhKDM1ODQ1Mjg3MTEsMjQ2Njk0ODkwMSksYSgxMTM5MjY5OTMsMzc1ODMyNjM4MyksYSgzMzgyNDE4OTUsMTY4NzE3OTM2KSxhKDY2NjMwNzIwNSwxMTg4MTc5OTY0KSxhKDc3MzUyOTkxMiwxNTQ2MDQ1NzM0KSxhKDEyOTQ3NTczNzIsMTUyMjgwNTQ4NSksYSgxMzk2MTgyMjkxLFxuMjY0MzgzMzgyMyksYSgxNjk1MTgzNzAwLDIzNDM1MjczOTApLGEoMTk4NjY2MTA1MSwxMDE0NDc3NDgwKSxhKDIxNzcwMjYzNTAsMTIwNjc1OTE0MiksYSgyNDU2OTU2MDM3LDM0NDA3NzYyNyksYSgyNzMwNDg1OTIxLDEyOTA4NjM0NjApLGEoMjgyMDMwMjQxMSwzMTU4NDU0MjczKSxhKDMyNTk3MzA4MDAsMzUwNTk1MjY1NyksYSgzMzQ1NzY0NzcxLDEwNjIxNzAwOCksYSgzNTE2MDY1ODE3LDM2MDYwMDgzNDQpLGEoMzYwMDM1MjgwNCwxNDMyNzI1Nzc2KSxhKDQwOTQ1NzE5MDksMTQ2NzAzMTU5NCksYSgyNzU0MjMzNDQsODUxMTY5NzIwKSxhKDQzMDIyNzczNCwzMTAwODIzNzUyKSxhKDUwNjk0ODYxNiwxMzYzMjU4MTk1KSxhKDY1OTA2MDU1NiwzNzUwNjg1NTkzKSxhKDg4Mzk5Nzg3NywzNzg1MDUwMjgwKSxhKDk1ODEzOTU3MSwzMzE4MzA3NDI3KSxhKDEzMjI4MjIyMTgsMzgxMjcyMzQwMyksYSgxNTM3MDAyMDYzLDIwMDMwMzQ5OTUpLGEoMTc0Nzg3Mzc3OSwzNjAyMDM2ODk5KSxcbmEoMTk1NTU2MjIyMiwxNTc1OTkwMDEyKSxhKDIwMjQxMDQ4MTUsMTEyNTU5MjkyOCksYSgyMjI3NzMwNDUyLDI3MTY5MDQzMDYpLGEoMjM2MTg1MjQyNCw0NDI3NzYwNDQpLGEoMjQyODQzNjQ3NCw1OTM2OTgzNDQpLGEoMjc1NjczNDE4NywzNzMzMTEwMjQ5KSxhKDMyMDQwMzE0NzksMjk5OTM1MTU3MyksYSgzMzI5MzI1Mjk4LDM4MTU5MjA0MjcpLGEoMzM5MTU2OTYxNCwzOTI4MzgzOTAwKSxhKDM1MTUyNjcyNzEsNTY2MjgwNzExKSxhKDM5NDAxODc2MDYsMzQ1NDA2OTUzNCksYSg0MTE4NjMwMjcxLDQwMDAyMzk5OTIpLGEoMTE2NDE4NDc0LDE5MTQxMzg1NTQpLGEoMTc0MjkyNDIxLDI3MzEwNTUyNzApLGEoMjg5MzgwMzU2LDMyMDM5OTMwMDYpLGEoNDYwMzkzMjY5LDMyMDYyMDMxNSksYSg2ODU0NzE3MzMsNTg3NDk2ODM2KSxhKDg1MjE0Mjk3MSwxMDg2NzkyODUxKSxhKDEwMTcwMzYyOTgsMzY1NTQzMTAwKSxhKDExMjYwMDA1ODAsMjYxODI5NzY3NiksYSgxMjg4MDMzNDcwLFxuMzQwOTg1NTE1OCksYSgxNTAxNTA1OTQ4LDQyMzQ1MDk4NjYpLGEoMTYwNzE2NzkxNSw5ODcxNjc0NjgpLGEoMTgxNjQwMjMxNiwxMjQ2MTg5NTkxKV0sdj1bXSx3PTA7ODA+dzt3Kyspdlt3XT1hKCk7ZT1lLlNIQTUxMj1yLmV4dGVuZCh7X2RvUmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLl9oYXNoPW5ldyBULmluaXQoW25ldyBkLmluaXQoMTc3OTAzMzcwMyw0MDg5MjM1NzIwKSxuZXcgZC5pbml0KDMxNDQxMzQyNzcsMjIyNzg3MzU5NSksbmV3IGQuaW5pdCgxMDEzOTA0MjQyLDQyNzExNzU3MjMpLG5ldyBkLmluaXQoMjc3MzQ4MDc2MiwxNTk1NzUwMTI5KSxuZXcgZC5pbml0KDEzNTk4OTMxMTksMjkxNzU2NTEzNyksbmV3IGQuaW5pdCgyNjAwODIyOTI0LDcyNTUxMTE5OSksbmV3IGQuaW5pdCg1Mjg3MzQ2MzUsNDIxNTM4OTU0NyksbmV3IGQuaW5pdCgxNTQxNDU5MjI1LDMyNzAzMzIwOSldKX0sX2RvUHJvY2Vzc0Jsb2NrOmZ1bmN0aW9uKGEsZCl7Zm9yKHZhciBmPXRoaXMuX2hhc2gud29yZHMsXG5GPWZbMF0sZT1mWzFdLG49ZlsyXSxyPWZbM10sRz1mWzRdLEg9Zls1XSxJPWZbNl0sZj1mWzddLHc9Ri5oaWdoLEo9Ri5sb3csWD1lLmhpZ2gsSz1lLmxvdyxZPW4uaGlnaCxMPW4ubG93LFo9ci5oaWdoLE09ci5sb3csJD1HLmhpZ2gsTj1HLmxvdyxhYT1ILmhpZ2gsTz1ILmxvdyxiYT1JLmhpZ2gsUD1JLmxvdyxjYT1mLmhpZ2gsUT1mLmxvdyxrPXcsZz1KLHo9WCx4PUssQT1ZLHk9TCxVPVosQj1NLGw9JCxoPU4sUj1hYSxDPU8sUz1iYSxEPVAsVj1jYSxFPVEsbT0wOzgwPm07bSsrKXt2YXIgcz12W21dO2lmKDE2Pm0pdmFyIGo9cy5oaWdoPWFbZCsyKm1dfDAsYj1zLmxvdz1hW2QrMiptKzFdfDA7ZWxzZXt2YXIgaj12W20tMTVdLGI9ai5oaWdoLHA9ai5sb3csaj0oYj4+PjF8cDw8MzEpXihiPj4+OHxwPDwyNCleYj4+PjcscD0ocD4+PjF8Yjw8MzEpXihwPj4+OHxiPDwyNCleKHA+Pj43fGI8PDI1KSx1PXZbbS0yXSxiPXUuaGlnaCxjPXUubG93LHU9KGI+Pj4xOXxjPDwxMyleKGI8PFxuM3xjPj4+MjkpXmI+Pj42LGM9KGM+Pj4xOXxiPDwxMyleKGM8PDN8Yj4+PjI5KV4oYz4+PjZ8Yjw8MjYpLGI9dlttLTddLFc9Yi5oaWdoLHQ9dlttLTE2XSxxPXQuaGlnaCx0PXQubG93LGI9cCtiLmxvdyxqPWorVysoYj4+PjA8cD4+PjA/MTowKSxiPWIrYyxqPWordSsoYj4+PjA8Yz4+PjA/MTowKSxiPWIrdCxqPWorcSsoYj4+PjA8dD4+PjA/MTowKTtzLmhpZ2g9ajtzLmxvdz1ifXZhciBXPWwmUl5+bCZTLHQ9aCZDXn5oJkQscz1rJnpeayZBXnomQSxUPWcmeF5nJnleeCZ5LHA9KGs+Pj4yOHxnPDw0KV4oazw8MzB8Zz4+PjIpXihrPDwyNXxnPj4+NyksdT0oZz4+PjI4fGs8PDQpXihnPDwzMHxrPj4+MileKGc8PDI1fGs+Pj43KSxjPWVhW21dLGZhPWMuaGlnaCxkYT1jLmxvdyxjPUUrKChoPj4+MTR8bDw8MTgpXihoPj4+MTh8bDw8MTQpXihoPDwyM3xsPj4+OSkpLHE9VisoKGw+Pj4xNHxoPDwxOCleKGw+Pj4xOHxoPDwxNCleKGw8PDIzfGg+Pj45KSkrKGM+Pj4wPEU+Pj4wPzE6XG4wKSxjPWMrdCxxPXErVysoYz4+PjA8dD4+PjA/MTowKSxjPWMrZGEscT1xK2ZhKyhjPj4+MDxkYT4+PjA/MTowKSxjPWMrYixxPXEraisoYz4+PjA8Yj4+PjA/MTowKSxiPXUrVCxzPXArcysoYj4+PjA8dT4+PjA/MTowKSxWPVMsRT1ELFM9UixEPUMsUj1sLEM9aCxoPUIrY3wwLGw9VStxKyhoPj4+MDxCPj4+MD8xOjApfDAsVT1BLEI9eSxBPXoseT14LHo9ayx4PWcsZz1jK2J8MCxrPXErcysoZz4+PjA8Yz4+PjA/MTowKXwwfUo9Ri5sb3c9SitnO0YuaGlnaD13K2srKEo+Pj4wPGc+Pj4wPzE6MCk7Sz1lLmxvdz1LK3g7ZS5oaWdoPVgreisoSz4+PjA8eD4+PjA/MTowKTtMPW4ubG93PUwreTtuLmhpZ2g9WStBKyhMPj4+MDx5Pj4+MD8xOjApO009ci5sb3c9TStCO3IuaGlnaD1aK1UrKE0+Pj4wPEI+Pj4wPzE6MCk7Tj1HLmxvdz1OK2g7Ry5oaWdoPSQrbCsoTj4+PjA8aD4+PjA/MTowKTtPPUgubG93PU8rQztILmhpZ2g9YWErUisoTz4+PjA8Qz4+PjA/MTowKTtQPUkubG93PVArRDtcbkkuaGlnaD1iYStTKyhQPj4+MDxEPj4+MD8xOjApO1E9Zi5sb3c9UStFO2YuaGlnaD1jYStWKyhRPj4+MDxFPj4+MD8xOjApfSxfZG9GaW5hbGl6ZTpmdW5jdGlvbigpe3ZhciBhPXRoaXMuX2RhdGEsZD1hLndvcmRzLGY9OCp0aGlzLl9uRGF0YUJ5dGVzLGU9OCphLnNpZ0J5dGVzO2RbZT4+PjVdfD0xMjg8PDI0LWUlMzI7ZFsoZSsxMjg+Pj4xMDw8NSkrMzBdPU1hdGguZmxvb3IoZi80Mjk0OTY3Mjk2KTtkWyhlKzEyOD4+PjEwPDw1KSszMV09ZjthLnNpZ0J5dGVzPTQqZC5sZW5ndGg7dGhpcy5fcHJvY2VzcygpO3JldHVybiB0aGlzLl9oYXNoLnRvWDMyKCl9LGNsb25lOmZ1bmN0aW9uKCl7dmFyIGE9ci5jbG9uZS5jYWxsKHRoaXMpO2EuX2hhc2g9dGhpcy5faGFzaC5jbG9uZSgpO3JldHVybiBhfSxibG9ja1NpemU6MzJ9KTtuLlNIQTUxMj1yLl9jcmVhdGVIZWxwZXIoZSk7bi5IbWFjU0hBNTEyPXIuX2NyZWF0ZUhtYWNIZWxwZXIoZSl9KSgpO1xuXG4vKlxuQ3J5cHRvSlMgdjMuMS4yIHNoYTM4NC1taW4uanNcbmNvZGUuZ29vZ2xlLmNvbS9wL2NyeXB0by1qc1xuKGMpIDIwMDktMjAxMyBieSBKZWZmIE1vdHQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG5jb2RlLmdvb2dsZS5jb20vcC9jcnlwdG8tanMvd2lraS9MaWNlbnNlXG4qL1xuKGZ1bmN0aW9uKCl7dmFyIGM9Q3J5cHRvSlMsYT1jLng2NCxiPWEuV29yZCxlPWEuV29yZEFycmF5LGE9Yy5hbGdvLGQ9YS5TSEE1MTIsYT1hLlNIQTM4ND1kLmV4dGVuZCh7X2RvUmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLl9oYXNoPW5ldyBlLmluaXQoW25ldyBiLmluaXQoMzQxODA3MDM2NSwzMjM4MzcxMDMyKSxuZXcgYi5pbml0KDE2NTQyNzAyNTAsOTE0MTUwNjYzKSxuZXcgYi5pbml0KDI0Mzg1MjkzNzAsODEyNzAyOTk5KSxuZXcgYi5pbml0KDM1NTQ2MjM2MCw0MTQ0OTEyNjk3KSxuZXcgYi5pbml0KDE3MzE0MDU0MTUsNDI5MDc3NTg1NyksbmV3IGIuaW5pdCgyMzk0MTgwMjMxLDE3NTA2MDMwMjUpLG5ldyBiLmluaXQoMzY3NTAwODUyNSwxNjk0MDc2ODM5KSxuZXcgYi5pbml0KDEyMDMwNjI4MTMsMzIwNDA3NTQyOCldKX0sX2RvRmluYWxpemU6ZnVuY3Rpb24oKXt2YXIgYT1kLl9kb0ZpbmFsaXplLmNhbGwodGhpcyk7YS5zaWdCeXRlcy09MTY7cmV0dXJuIGF9fSk7Yy5TSEEzODQ9XG5kLl9jcmVhdGVIZWxwZXIoYSk7Yy5IbWFjU0hBMzg0PWQuX2NyZWF0ZUhtYWNIZWxwZXIoYSl9KSgpO1xuXG4vKiEgKGMpIFRvbSBXdSB8IGh0dHA6Ly93d3ctY3Mtc3R1ZGVudHMuc3RhbmZvcmQuZWR1L350ancvanNibi9cbiAqL1xudmFyIGI2NG1hcD1cIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky9cIjt2YXIgYjY0cGFkPVwiPVwiO2Z1bmN0aW9uIGhleDJiNjQoZCl7dmFyIGI7dmFyIGU7dmFyIGE9XCJcIjtmb3IoYj0wO2IrMzw9ZC5sZW5ndGg7Yis9Myl7ZT1wYXJzZUludChkLnN1YnN0cmluZyhiLGIrMyksMTYpO2ErPWI2NG1hcC5jaGFyQXQoZT4+NikrYjY0bWFwLmNoYXJBdChlJjYzKX1pZihiKzE9PWQubGVuZ3RoKXtlPXBhcnNlSW50KGQuc3Vic3RyaW5nKGIsYisxKSwxNik7YSs9YjY0bWFwLmNoYXJBdChlPDwyKX1lbHNle2lmKGIrMj09ZC5sZW5ndGgpe2U9cGFyc2VJbnQoZC5zdWJzdHJpbmcoYixiKzIpLDE2KTthKz1iNjRtYXAuY2hhckF0KGU+PjIpK2I2NG1hcC5jaGFyQXQoKGUmMyk8PDQpfX1pZihiNjRwYWQpe3doaWxlKChhLmxlbmd0aCYzKT4wKXthKz1iNjRwYWR9fXJldHVybiBhfWZ1bmN0aW9uIGI2NHRvaGV4KGYpe3ZhciBkPVwiXCI7dmFyIGU7dmFyIGI9MDt2YXIgYzt2YXIgYTtmb3IoZT0wO2U8Zi5sZW5ndGg7KytlKXtpZihmLmNoYXJBdChlKT09YjY0cGFkKXticmVha31hPWI2NG1hcC5pbmRleE9mKGYuY2hhckF0KGUpKTtpZihhPDApe2NvbnRpbnVlfWlmKGI9PTApe2QrPWludDJjaGFyKGE+PjIpO2M9YSYzO2I9MX1lbHNle2lmKGI9PTEpe2QrPWludDJjaGFyKChjPDwyKXwoYT4+NCkpO2M9YSYxNTtiPTJ9ZWxzZXtpZihiPT0yKXtkKz1pbnQyY2hhcihjKTtkKz1pbnQyY2hhcihhPj4yKTtjPWEmMztiPTN9ZWxzZXtkKz1pbnQyY2hhcigoYzw8Mil8KGE+PjQpKTtkKz1pbnQyY2hhcihhJjE1KTtiPTB9fX19aWYoYj09MSl7ZCs9aW50MmNoYXIoYzw8Mil9cmV0dXJuIGR9ZnVuY3Rpb24gYjY0dG9CQShlKXt2YXIgZD1iNjR0b2hleChlKTt2YXIgYzt2YXIgYj1uZXcgQXJyYXkoKTtmb3IoYz0wOzIqYzxkLmxlbmd0aDsrK2Mpe2JbY109cGFyc2VJbnQoZC5zdWJzdHJpbmcoMipjLDIqYysyKSwxNil9cmV0dXJuIGJ9O1xuLyohIChjKSBUb20gV3UgfCBodHRwOi8vd3d3LWNzLXN0dWRlbnRzLnN0YW5mb3JkLmVkdS9+dGp3L2pzYm4vXG4gKi9cbnZhciBkYml0czt2YXIgY2FuYXJ5PTI0NDgzNzgxNDA5NDU5MDt2YXIgal9sbT0oKGNhbmFyeSYxNjc3NzIxNSk9PTE1NzE1MDcwKTtmdW5jdGlvbiBCaWdJbnRlZ2VyKGUsZCxmKXtpZihlIT1udWxsKXtpZihcIm51bWJlclwiPT10eXBlb2YgZSl7dGhpcy5mcm9tTnVtYmVyKGUsZCxmKX1lbHNle2lmKGQ9PW51bGwmJlwic3RyaW5nXCIhPXR5cGVvZiBlKXt0aGlzLmZyb21TdHJpbmcoZSwyNTYpfWVsc2V7dGhpcy5mcm9tU3RyaW5nKGUsZCl9fX19ZnVuY3Rpb24gbmJpKCl7cmV0dXJuIG5ldyBCaWdJbnRlZ2VyKG51bGwpfWZ1bmN0aW9uIGFtMShmLGEsYixlLGgsZyl7d2hpbGUoLS1nPj0wKXt2YXIgZD1hKnRoaXNbZisrXStiW2VdK2g7aD1NYXRoLmZsb29yKGQvNjcxMDg4NjQpO2JbZSsrXT1kJjY3MTA4ODYzfXJldHVybiBofWZ1bmN0aW9uIGFtMihmLHEscixlLG8sYSl7dmFyIGs9cSYzMjc2NyxwPXE+PjE1O3doaWxlKC0tYT49MCl7dmFyIGQ9dGhpc1tmXSYzMjc2Nzt2YXIgZz10aGlzW2YrK10+PjE1O3ZhciBiPXAqZCtnKms7ZD1rKmQrKChiJjMyNzY3KTw8MTUpK3JbZV0rKG8mMTA3Mzc0MTgyMyk7bz0oZD4+PjMwKSsoYj4+PjE1KStwKmcrKG8+Pj4zMCk7cltlKytdPWQmMTA3Mzc0MTgyM31yZXR1cm4gb31mdW5jdGlvbiBhbTMoZixxLHIsZSxvLGEpe3ZhciBrPXEmMTYzODMscD1xPj4xNDt3aGlsZSgtLWE+PTApe3ZhciBkPXRoaXNbZl0mMTYzODM7dmFyIGc9dGhpc1tmKytdPj4xNDt2YXIgYj1wKmQrZyprO2Q9aypkKygoYiYxNjM4Myk8PDE0KStyW2VdK287bz0oZD4+MjgpKyhiPj4xNCkrcCpnO3JbZSsrXT1kJjI2ODQzNTQ1NX1yZXR1cm4gb31pZihqX2xtJiYobmF2aWdhdG9yLmFwcE5hbWU9PVwiTWljcm9zb2Z0IEludGVybmV0IEV4cGxvcmVyXCIpKXtCaWdJbnRlZ2VyLnByb3RvdHlwZS5hbT1hbTI7ZGJpdHM9MzB9ZWxzZXtpZihqX2xtJiYobmF2aWdhdG9yLmFwcE5hbWUhPVwiTmV0c2NhcGVcIikpe0JpZ0ludGVnZXIucHJvdG90eXBlLmFtPWFtMTtkYml0cz0yNn1lbHNle0JpZ0ludGVnZXIucHJvdG90eXBlLmFtPWFtMztkYml0cz0yOH19QmlnSW50ZWdlci5wcm90b3R5cGUuREI9ZGJpdHM7QmlnSW50ZWdlci5wcm90b3R5cGUuRE09KCgxPDxkYml0cyktMSk7QmlnSW50ZWdlci5wcm90b3R5cGUuRFY9KDE8PGRiaXRzKTt2YXIgQklfRlA9NTI7QmlnSW50ZWdlci5wcm90b3R5cGUuRlY9TWF0aC5wb3coMixCSV9GUCk7QmlnSW50ZWdlci5wcm90b3R5cGUuRjE9QklfRlAtZGJpdHM7QmlnSW50ZWdlci5wcm90b3R5cGUuRjI9MipkYml0cy1CSV9GUDt2YXIgQklfUk09XCIwMTIzNDU2Nzg5YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpcIjt2YXIgQklfUkM9bmV3IEFycmF5KCk7dmFyIHJyLHZ2O3JyPVwiMFwiLmNoYXJDb2RlQXQoMCk7Zm9yKHZ2PTA7dnY8PTk7Kyt2dil7QklfUkNbcnIrK109dnZ9cnI9XCJhXCIuY2hhckNvZGVBdCgwKTtmb3IodnY9MTA7dnY8MzY7Kyt2dil7QklfUkNbcnIrK109dnZ9cnI9XCJBXCIuY2hhckNvZGVBdCgwKTtmb3IodnY9MTA7dnY8MzY7Kyt2dil7QklfUkNbcnIrK109dnZ9ZnVuY3Rpb24gaW50MmNoYXIoYSl7cmV0dXJuIEJJX1JNLmNoYXJBdChhKX1mdW5jdGlvbiBpbnRBdChiLGEpe3ZhciBkPUJJX1JDW2IuY2hhckNvZGVBdChhKV07cmV0dXJuKGQ9PW51bGwpPy0xOmR9ZnVuY3Rpb24gYm5wQ29weVRvKGIpe2Zvcih2YXIgYT10aGlzLnQtMTthPj0wOy0tYSl7YlthXT10aGlzW2FdfWIudD10aGlzLnQ7Yi5zPXRoaXMuc31mdW5jdGlvbiBibnBGcm9tSW50KGEpe3RoaXMudD0xO3RoaXMucz0oYTwwKT8tMTowO2lmKGE+MCl7dGhpc1swXT1hfWVsc2V7aWYoYTwtMSl7dGhpc1swXT1hK3RoaXMuRFZ9ZWxzZXt0aGlzLnQ9MH19fWZ1bmN0aW9uIG5idihhKXt2YXIgYj1uYmkoKTtiLmZyb21JbnQoYSk7cmV0dXJuIGJ9ZnVuY3Rpb24gYm5wRnJvbVN0cmluZyhoLGMpe3ZhciBlO2lmKGM9PTE2KXtlPTR9ZWxzZXtpZihjPT04KXtlPTN9ZWxzZXtpZihjPT0yNTYpe2U9OH1lbHNle2lmKGM9PTIpe2U9MX1lbHNle2lmKGM9PTMyKXtlPTV9ZWxzZXtpZihjPT00KXtlPTJ9ZWxzZXt0aGlzLmZyb21SYWRpeChoLGMpO3JldHVybn19fX19fXRoaXMudD0wO3RoaXMucz0wO3ZhciBnPWgubGVuZ3RoLGQ9ZmFsc2UsZj0wO3doaWxlKC0tZz49MCl7dmFyIGE9KGU9PTgpP2hbZ10mMjU1OmludEF0KGgsZyk7aWYoYTwwKXtpZihoLmNoYXJBdChnKT09XCItXCIpe2Q9dHJ1ZX1jb250aW51ZX1kPWZhbHNlO2lmKGY9PTApe3RoaXNbdGhpcy50KytdPWF9ZWxzZXtpZihmK2U+dGhpcy5EQil7dGhpc1t0aGlzLnQtMV18PShhJigoMTw8KHRoaXMuREItZikpLTEpKTw8Zjt0aGlzW3RoaXMudCsrXT0oYT4+KHRoaXMuREItZikpfWVsc2V7dGhpc1t0aGlzLnQtMV18PWE8PGZ9fWYrPWU7aWYoZj49dGhpcy5EQil7Zi09dGhpcy5EQn19aWYoZT09OCYmKGhbMF0mMTI4KSE9MCl7dGhpcy5zPS0xO2lmKGY+MCl7dGhpc1t0aGlzLnQtMV18PSgoMTw8KHRoaXMuREItZikpLTEpPDxmfX10aGlzLmNsYW1wKCk7aWYoZCl7QmlnSW50ZWdlci5aRVJPLnN1YlRvKHRoaXMsdGhpcyl9fWZ1bmN0aW9uIGJucENsYW1wKCl7dmFyIGE9dGhpcy5zJnRoaXMuRE07d2hpbGUodGhpcy50PjAmJnRoaXNbdGhpcy50LTFdPT1hKXstLXRoaXMudH19ZnVuY3Rpb24gYm5Ub1N0cmluZyhjKXtpZih0aGlzLnM8MCl7cmV0dXJuXCItXCIrdGhpcy5uZWdhdGUoKS50b1N0cmluZyhjKX12YXIgZTtpZihjPT0xNil7ZT00fWVsc2V7aWYoYz09OCl7ZT0zfWVsc2V7aWYoYz09Mil7ZT0xfWVsc2V7aWYoYz09MzIpe2U9NX1lbHNle2lmKGM9PTQpe2U9Mn1lbHNle3JldHVybiB0aGlzLnRvUmFkaXgoYyl9fX19fXZhciBnPSgxPDxlKS0xLGwsYT1mYWxzZSxoPVwiXCIsZj10aGlzLnQ7dmFyIGo9dGhpcy5EQi0oZip0aGlzLkRCKSVlO2lmKGYtLT4wKXtpZihqPHRoaXMuREImJihsPXRoaXNbZl0+PmopPjApe2E9dHJ1ZTtoPWludDJjaGFyKGwpfXdoaWxlKGY+PTApe2lmKGo8ZSl7bD0odGhpc1tmXSYoKDE8PGopLTEpKTw8KGUtaik7bHw9dGhpc1stLWZdPj4oais9dGhpcy5EQi1lKX1lbHNle2w9KHRoaXNbZl0+PihqLT1lKSkmZztpZihqPD0wKXtqKz10aGlzLkRCOy0tZn19aWYobD4wKXthPXRydWV9aWYoYSl7aCs9aW50MmNoYXIobCl9fX1yZXR1cm4gYT9oOlwiMFwifWZ1bmN0aW9uIGJuTmVnYXRlKCl7dmFyIGE9bmJpKCk7QmlnSW50ZWdlci5aRVJPLnN1YlRvKHRoaXMsYSk7cmV0dXJuIGF9ZnVuY3Rpb24gYm5BYnMoKXtyZXR1cm4odGhpcy5zPDApP3RoaXMubmVnYXRlKCk6dGhpc31mdW5jdGlvbiBibkNvbXBhcmVUbyhiKXt2YXIgZD10aGlzLnMtYi5zO2lmKGQhPTApe3JldHVybiBkfXZhciBjPXRoaXMudDtkPWMtYi50O2lmKGQhPTApe3JldHVybih0aGlzLnM8MCk/LWQ6ZH13aGlsZSgtLWM+PTApe2lmKChkPXRoaXNbY10tYltjXSkhPTApe3JldHVybiBkfX1yZXR1cm4gMH1mdW5jdGlvbiBuYml0cyhhKXt2YXIgYz0xLGI7aWYoKGI9YT4+PjE2KSE9MCl7YT1iO2MrPTE2fWlmKChiPWE+PjgpIT0wKXthPWI7Yys9OH1pZigoYj1hPj40KSE9MCl7YT1iO2MrPTR9aWYoKGI9YT4+MikhPTApe2E9YjtjKz0yfWlmKChiPWE+PjEpIT0wKXthPWI7Yys9MX1yZXR1cm4gY31mdW5jdGlvbiBibkJpdExlbmd0aCgpe2lmKHRoaXMudDw9MCl7cmV0dXJuIDB9cmV0dXJuIHRoaXMuREIqKHRoaXMudC0xKStuYml0cyh0aGlzW3RoaXMudC0xXV4odGhpcy5zJnRoaXMuRE0pKX1mdW5jdGlvbiBibnBETFNoaWZ0VG8oYyxiKXt2YXIgYTtmb3IoYT10aGlzLnQtMTthPj0wOy0tYSl7YlthK2NdPXRoaXNbYV19Zm9yKGE9Yy0xO2E+PTA7LS1hKXtiW2FdPTB9Yi50PXRoaXMudCtjO2Iucz10aGlzLnN9ZnVuY3Rpb24gYm5wRFJTaGlmdFRvKGMsYil7Zm9yKHZhciBhPWM7YTx0aGlzLnQ7KythKXtiW2EtY109dGhpc1thXX1iLnQ9TWF0aC5tYXgodGhpcy50LWMsMCk7Yi5zPXRoaXMuc31mdW5jdGlvbiBibnBMU2hpZnRUbyhqLGUpe3ZhciBiPWoldGhpcy5EQjt2YXIgYT10aGlzLkRCLWI7dmFyIGc9KDE8PGEpLTE7dmFyIGY9TWF0aC5mbG9vcihqL3RoaXMuREIpLGg9KHRoaXMuczw8YikmdGhpcy5ETSxkO2ZvcihkPXRoaXMudC0xO2Q+PTA7LS1kKXtlW2QrZisxXT0odGhpc1tkXT4+YSl8aDtoPSh0aGlzW2RdJmcpPDxifWZvcihkPWYtMTtkPj0wOy0tZCl7ZVtkXT0wfWVbZl09aDtlLnQ9dGhpcy50K2YrMTtlLnM9dGhpcy5zO2UuY2xhbXAoKX1mdW5jdGlvbiBibnBSU2hpZnRUbyhnLGQpe2Qucz10aGlzLnM7dmFyIGU9TWF0aC5mbG9vcihnL3RoaXMuREIpO2lmKGU+PXRoaXMudCl7ZC50PTA7cmV0dXJufXZhciBiPWcldGhpcy5EQjt2YXIgYT10aGlzLkRCLWI7dmFyIGY9KDE8PGIpLTE7ZFswXT10aGlzW2VdPj5iO2Zvcih2YXIgYz1lKzE7Yzx0aGlzLnQ7KytjKXtkW2MtZS0xXXw9KHRoaXNbY10mZik8PGE7ZFtjLWVdPXRoaXNbY10+PmJ9aWYoYj4wKXtkW3RoaXMudC1lLTFdfD0odGhpcy5zJmYpPDxhfWQudD10aGlzLnQtZTtkLmNsYW1wKCl9ZnVuY3Rpb24gYm5wU3ViVG8oZCxmKXt2YXIgZT0wLGc9MCxiPU1hdGgubWluKGQudCx0aGlzLnQpO3doaWxlKGU8Yil7Zys9dGhpc1tlXS1kW2VdO2ZbZSsrXT1nJnRoaXMuRE07Zz4+PXRoaXMuREJ9aWYoZC50PHRoaXMudCl7Zy09ZC5zO3doaWxlKGU8dGhpcy50KXtnKz10aGlzW2VdO2ZbZSsrXT1nJnRoaXMuRE07Zz4+PXRoaXMuREJ9Zys9dGhpcy5zfWVsc2V7Zys9dGhpcy5zO3doaWxlKGU8ZC50KXtnLT1kW2VdO2ZbZSsrXT1nJnRoaXMuRE07Zz4+PXRoaXMuREJ9Zy09ZC5zfWYucz0oZzwwKT8tMTowO2lmKGc8LTEpe2ZbZSsrXT10aGlzLkRWK2d9ZWxzZXtpZihnPjApe2ZbZSsrXT1nfX1mLnQ9ZTtmLmNsYW1wKCl9ZnVuY3Rpb24gYm5wTXVsdGlwbHlUbyhjLGUpe3ZhciBiPXRoaXMuYWJzKCksZj1jLmFicygpO3ZhciBkPWIudDtlLnQ9ZCtmLnQ7d2hpbGUoLS1kPj0wKXtlW2RdPTB9Zm9yKGQ9MDtkPGYudDsrK2Qpe2VbZCtiLnRdPWIuYW0oMCxmW2RdLGUsZCwwLGIudCl9ZS5zPTA7ZS5jbGFtcCgpO2lmKHRoaXMucyE9Yy5zKXtCaWdJbnRlZ2VyLlpFUk8uc3ViVG8oZSxlKX19ZnVuY3Rpb24gYm5wU3F1YXJlVG8oZCl7dmFyIGE9dGhpcy5hYnMoKTt2YXIgYj1kLnQ9MiphLnQ7d2hpbGUoLS1iPj0wKXtkW2JdPTB9Zm9yKGI9MDtiPGEudC0xOysrYil7dmFyIGU9YS5hbShiLGFbYl0sZCwyKmIsMCwxKTtpZigoZFtiK2EudF0rPWEuYW0oYisxLDIqYVtiXSxkLDIqYisxLGUsYS50LWItMSkpPj1hLkRWKXtkW2IrYS50XS09YS5EVjtkW2IrYS50KzFdPTF9fWlmKGQudD4wKXtkW2QudC0xXSs9YS5hbShiLGFbYl0sZCwyKmIsMCwxKX1kLnM9MDtkLmNsYW1wKCl9ZnVuY3Rpb24gYm5wRGl2UmVtVG8obixoLGcpe3ZhciB3PW4uYWJzKCk7aWYody50PD0wKXtyZXR1cm59dmFyIGs9dGhpcy5hYnMoKTtpZihrLnQ8dy50KXtpZihoIT1udWxsKXtoLmZyb21JbnQoMCl9aWYoZyE9bnVsbCl7dGhpcy5jb3B5VG8oZyl9cmV0dXJufWlmKGc9PW51bGwpe2c9bmJpKCl9dmFyIGQ9bmJpKCksYT10aGlzLnMsbD1uLnM7dmFyIHY9dGhpcy5EQi1uYml0cyh3W3cudC0xXSk7aWYodj4wKXt3LmxTaGlmdFRvKHYsZCk7ay5sU2hpZnRUbyh2LGcpfWVsc2V7dy5jb3B5VG8oZCk7ay5jb3B5VG8oZyl9dmFyIHA9ZC50O3ZhciBiPWRbcC0xXTtpZihiPT0wKXtyZXR1cm59dmFyIG89YiooMTw8dGhpcy5GMSkrKChwPjEpP2RbcC0yXT4+dGhpcy5GMjowKTt2YXIgQT10aGlzLkZWL28sej0oMTw8dGhpcy5GMSkvbyx4PTE8PHRoaXMuRjI7dmFyIHU9Zy50LHM9dS1wLGY9KGg9PW51bGwpP25iaSgpOmg7ZC5kbFNoaWZ0VG8ocyxmKTtpZihnLmNvbXBhcmVUbyhmKT49MCl7Z1tnLnQrK109MTtnLnN1YlRvKGYsZyl9QmlnSW50ZWdlci5PTkUuZGxTaGlmdFRvKHAsZik7Zi5zdWJUbyhkLGQpO3doaWxlKGQudDxwKXtkW2QudCsrXT0wfXdoaWxlKC0tcz49MCl7dmFyIGM9KGdbLS11XT09Yik/dGhpcy5ETTpNYXRoLmZsb29yKGdbdV0qQSsoZ1t1LTFdK3gpKnopO2lmKChnW3VdKz1kLmFtKDAsYyxnLHMsMCxwKSk8Yyl7ZC5kbFNoaWZ0VG8ocyxmKTtnLnN1YlRvKGYsZyk7d2hpbGUoZ1t1XTwtLWMpe2cuc3ViVG8oZixnKX19fWlmKGghPW51bGwpe2cuZHJTaGlmdFRvKHAsaCk7aWYoYSE9bCl7QmlnSW50ZWdlci5aRVJPLnN1YlRvKGgsaCl9fWcudD1wO2cuY2xhbXAoKTtpZih2PjApe2cuclNoaWZ0VG8odixnKX1pZihhPDApe0JpZ0ludGVnZXIuWkVSTy5zdWJUbyhnLGcpfX1mdW5jdGlvbiBibk1vZChiKXt2YXIgYz1uYmkoKTt0aGlzLmFicygpLmRpdlJlbVRvKGIsbnVsbCxjKTtpZih0aGlzLnM8MCYmYy5jb21wYXJlVG8oQmlnSW50ZWdlci5aRVJPKT4wKXtiLnN1YlRvKGMsYyl9cmV0dXJuIGN9ZnVuY3Rpb24gQ2xhc3NpYyhhKXt0aGlzLm09YX1mdW5jdGlvbiBjQ29udmVydChhKXtpZihhLnM8MHx8YS5jb21wYXJlVG8odGhpcy5tKT49MCl7cmV0dXJuIGEubW9kKHRoaXMubSl9ZWxzZXtyZXR1cm4gYX19ZnVuY3Rpb24gY1JldmVydChhKXtyZXR1cm4gYX1mdW5jdGlvbiBjUmVkdWNlKGEpe2EuZGl2UmVtVG8odGhpcy5tLG51bGwsYSl9ZnVuY3Rpb24gY011bFRvKGEsYyxiKXthLm11bHRpcGx5VG8oYyxiKTt0aGlzLnJlZHVjZShiKX1mdW5jdGlvbiBjU3FyVG8oYSxiKXthLnNxdWFyZVRvKGIpO3RoaXMucmVkdWNlKGIpfUNsYXNzaWMucHJvdG90eXBlLmNvbnZlcnQ9Y0NvbnZlcnQ7Q2xhc3NpYy5wcm90b3R5cGUucmV2ZXJ0PWNSZXZlcnQ7Q2xhc3NpYy5wcm90b3R5cGUucmVkdWNlPWNSZWR1Y2U7Q2xhc3NpYy5wcm90b3R5cGUubXVsVG89Y011bFRvO0NsYXNzaWMucHJvdG90eXBlLnNxclRvPWNTcXJUbztmdW5jdGlvbiBibnBJbnZEaWdpdCgpe2lmKHRoaXMudDwxKXtyZXR1cm4gMH12YXIgYT10aGlzWzBdO2lmKChhJjEpPT0wKXtyZXR1cm4gMH12YXIgYj1hJjM7Yj0oYiooMi0oYSYxNSkqYikpJjE1O2I9KGIqKDItKGEmMjU1KSpiKSkmMjU1O2I9KGIqKDItKCgoYSY2NTUzNSkqYikmNjU1MzUpKSkmNjU1MzU7Yj0oYiooMi1hKmIldGhpcy5EVikpJXRoaXMuRFY7cmV0dXJuKGI+MCk/dGhpcy5EVi1iOi1ifWZ1bmN0aW9uIE1vbnRnb21lcnkoYSl7dGhpcy5tPWE7dGhpcy5tcD1hLmludkRpZ2l0KCk7dGhpcy5tcGw9dGhpcy5tcCYzMjc2Nzt0aGlzLm1waD10aGlzLm1wPj4xNTt0aGlzLnVtPSgxPDwoYS5EQi0xNSkpLTE7dGhpcy5tdDI9MiphLnR9ZnVuY3Rpb24gbW9udENvbnZlcnQoYSl7dmFyIGI9bmJpKCk7YS5hYnMoKS5kbFNoaWZ0VG8odGhpcy5tLnQsYik7Yi5kaXZSZW1Ubyh0aGlzLm0sbnVsbCxiKTtpZihhLnM8MCYmYi5jb21wYXJlVG8oQmlnSW50ZWdlci5aRVJPKT4wKXt0aGlzLm0uc3ViVG8oYixiKX1yZXR1cm4gYn1mdW5jdGlvbiBtb250UmV2ZXJ0KGEpe3ZhciBiPW5iaSgpO2EuY29weVRvKGIpO3RoaXMucmVkdWNlKGIpO3JldHVybiBifWZ1bmN0aW9uIG1vbnRSZWR1Y2UoYSl7d2hpbGUoYS50PD10aGlzLm10Mil7YVthLnQrK109MH1mb3IodmFyIGM9MDtjPHRoaXMubS50OysrYyl7dmFyIGI9YVtjXSYzMjc2Nzt2YXIgZD0oYip0aGlzLm1wbCsoKChiKnRoaXMubXBoKyhhW2NdPj4xNSkqdGhpcy5tcGwpJnRoaXMudW0pPDwxNSkpJmEuRE07Yj1jK3RoaXMubS50O2FbYl0rPXRoaXMubS5hbSgwLGQsYSxjLDAsdGhpcy5tLnQpO3doaWxlKGFbYl0+PWEuRFYpe2FbYl0tPWEuRFY7YVsrK2JdKyt9fWEuY2xhbXAoKTthLmRyU2hpZnRUbyh0aGlzLm0udCxhKTtpZihhLmNvbXBhcmVUbyh0aGlzLm0pPj0wKXthLnN1YlRvKHRoaXMubSxhKX19ZnVuY3Rpb24gbW9udFNxclRvKGEsYil7YS5zcXVhcmVUbyhiKTt0aGlzLnJlZHVjZShiKX1mdW5jdGlvbiBtb250TXVsVG8oYSxjLGIpe2EubXVsdGlwbHlUbyhjLGIpO3RoaXMucmVkdWNlKGIpfU1vbnRnb21lcnkucHJvdG90eXBlLmNvbnZlcnQ9bW9udENvbnZlcnQ7TW9udGdvbWVyeS5wcm90b3R5cGUucmV2ZXJ0PW1vbnRSZXZlcnQ7TW9udGdvbWVyeS5wcm90b3R5cGUucmVkdWNlPW1vbnRSZWR1Y2U7TW9udGdvbWVyeS5wcm90b3R5cGUubXVsVG89bW9udE11bFRvO01vbnRnb21lcnkucHJvdG90eXBlLnNxclRvPW1vbnRTcXJUbztmdW5jdGlvbiBibnBJc0V2ZW4oKXtyZXR1cm4oKHRoaXMudD4wKT8odGhpc1swXSYxKTp0aGlzLnMpPT0wfWZ1bmN0aW9uIGJucEV4cChoLGope2lmKGg+NDI5NDk2NzI5NXx8aDwxKXtyZXR1cm4gQmlnSW50ZWdlci5PTkV9dmFyIGY9bmJpKCksYT1uYmkoKSxkPWouY29udmVydCh0aGlzKSxjPW5iaXRzKGgpLTE7ZC5jb3B5VG8oZik7d2hpbGUoLS1jPj0wKXtqLnNxclRvKGYsYSk7aWYoKGgmKDE8PGMpKT4wKXtqLm11bFRvKGEsZCxmKX1lbHNle3ZhciBiPWY7Zj1hO2E9Yn19cmV0dXJuIGoucmV2ZXJ0KGYpfWZ1bmN0aW9uIGJuTW9kUG93SW50KGIsYSl7dmFyIGM7aWYoYjwyNTZ8fGEuaXNFdmVuKCkpe2M9bmV3IENsYXNzaWMoYSl9ZWxzZXtjPW5ldyBNb250Z29tZXJ5KGEpfXJldHVybiB0aGlzLmV4cChiLGMpfUJpZ0ludGVnZXIucHJvdG90eXBlLmNvcHlUbz1ibnBDb3B5VG87QmlnSW50ZWdlci5wcm90b3R5cGUuZnJvbUludD1ibnBGcm9tSW50O0JpZ0ludGVnZXIucHJvdG90eXBlLmZyb21TdHJpbmc9Ym5wRnJvbVN0cmluZztCaWdJbnRlZ2VyLnByb3RvdHlwZS5jbGFtcD1ibnBDbGFtcDtCaWdJbnRlZ2VyLnByb3RvdHlwZS5kbFNoaWZ0VG89Ym5wRExTaGlmdFRvO0JpZ0ludGVnZXIucHJvdG90eXBlLmRyU2hpZnRUbz1ibnBEUlNoaWZ0VG87QmlnSW50ZWdlci5wcm90b3R5cGUubFNoaWZ0VG89Ym5wTFNoaWZ0VG87QmlnSW50ZWdlci5wcm90b3R5cGUuclNoaWZ0VG89Ym5wUlNoaWZ0VG87QmlnSW50ZWdlci5wcm90b3R5cGUuc3ViVG89Ym5wU3ViVG87QmlnSW50ZWdlci5wcm90b3R5cGUubXVsdGlwbHlUbz1ibnBNdWx0aXBseVRvO0JpZ0ludGVnZXIucHJvdG90eXBlLnNxdWFyZVRvPWJucFNxdWFyZVRvO0JpZ0ludGVnZXIucHJvdG90eXBlLmRpdlJlbVRvPWJucERpdlJlbVRvO0JpZ0ludGVnZXIucHJvdG90eXBlLmludkRpZ2l0PWJucEludkRpZ2l0O0JpZ0ludGVnZXIucHJvdG90eXBlLmlzRXZlbj1ibnBJc0V2ZW47QmlnSW50ZWdlci5wcm90b3R5cGUuZXhwPWJucEV4cDtCaWdJbnRlZ2VyLnByb3RvdHlwZS50b1N0cmluZz1iblRvU3RyaW5nO0JpZ0ludGVnZXIucHJvdG90eXBlLm5lZ2F0ZT1ibk5lZ2F0ZTtCaWdJbnRlZ2VyLnByb3RvdHlwZS5hYnM9Ym5BYnM7QmlnSW50ZWdlci5wcm90b3R5cGUuY29tcGFyZVRvPWJuQ29tcGFyZVRvO0JpZ0ludGVnZXIucHJvdG90eXBlLmJpdExlbmd0aD1ibkJpdExlbmd0aDtCaWdJbnRlZ2VyLnByb3RvdHlwZS5tb2Q9Ym5Nb2Q7QmlnSW50ZWdlci5wcm90b3R5cGUubW9kUG93SW50PWJuTW9kUG93SW50O0JpZ0ludGVnZXIuWkVSTz1uYnYoMCk7QmlnSW50ZWdlci5PTkU9bmJ2KDEpO1xuLyohIChjKSBUb20gV3UgfCBodHRwOi8vd3d3LWNzLXN0dWRlbnRzLnN0YW5mb3JkLmVkdS9+dGp3L2pzYm4vXG4gKi9cbmZ1bmN0aW9uIGJuQ2xvbmUoKXt2YXIgYT1uYmkoKTt0aGlzLmNvcHlUbyhhKTtyZXR1cm4gYX1mdW5jdGlvbiBibkludFZhbHVlKCl7aWYodGhpcy5zPDApe2lmKHRoaXMudD09MSl7cmV0dXJuIHRoaXNbMF0tdGhpcy5EVn1lbHNle2lmKHRoaXMudD09MCl7cmV0dXJuIC0xfX19ZWxzZXtpZih0aGlzLnQ9PTEpe3JldHVybiB0aGlzWzBdfWVsc2V7aWYodGhpcy50PT0wKXtyZXR1cm4gMH19fXJldHVybigodGhpc1sxXSYoKDE8PCgzMi10aGlzLkRCKSktMSkpPDx0aGlzLkRCKXx0aGlzWzBdfWZ1bmN0aW9uIGJuQnl0ZVZhbHVlKCl7cmV0dXJuKHRoaXMudD09MCk/dGhpcy5zOih0aGlzWzBdPDwyNCk+PjI0fWZ1bmN0aW9uIGJuU2hvcnRWYWx1ZSgpe3JldHVybih0aGlzLnQ9PTApP3RoaXMuczoodGhpc1swXTw8MTYpPj4xNn1mdW5jdGlvbiBibnBDaHVua1NpemUoYSl7cmV0dXJuIE1hdGguZmxvb3IoTWF0aC5MTjIqdGhpcy5EQi9NYXRoLmxvZyhhKSl9ZnVuY3Rpb24gYm5TaWdOdW0oKXtpZih0aGlzLnM8MCl7cmV0dXJuIC0xfWVsc2V7aWYodGhpcy50PD0wfHwodGhpcy50PT0xJiZ0aGlzWzBdPD0wKSl7cmV0dXJuIDB9ZWxzZXtyZXR1cm4gMX19fWZ1bmN0aW9uIGJucFRvUmFkaXgoYyl7aWYoYz09bnVsbCl7Yz0xMH1pZih0aGlzLnNpZ251bSgpPT0wfHxjPDJ8fGM+MzYpe3JldHVyblwiMFwifXZhciBmPXRoaXMuY2h1bmtTaXplKGMpO3ZhciBlPU1hdGgucG93KGMsZik7dmFyIGk9bmJ2KGUpLGo9bmJpKCksaD1uYmkoKSxnPVwiXCI7dGhpcy5kaXZSZW1UbyhpLGosaCk7d2hpbGUoai5zaWdudW0oKT4wKXtnPShlK2guaW50VmFsdWUoKSkudG9TdHJpbmcoYykuc3Vic3RyKDEpK2c7ai5kaXZSZW1UbyhpLGosaCl9cmV0dXJuIGguaW50VmFsdWUoKS50b1N0cmluZyhjKStnfWZ1bmN0aW9uIGJucEZyb21SYWRpeChtLGgpe3RoaXMuZnJvbUludCgwKTtpZihoPT1udWxsKXtoPTEwfXZhciBmPXRoaXMuY2h1bmtTaXplKGgpO3ZhciBnPU1hdGgucG93KGgsZiksZT1mYWxzZSxhPTAsbD0wO2Zvcih2YXIgYz0wO2M8bS5sZW5ndGg7KytjKXt2YXIgaz1pbnRBdChtLGMpO2lmKGs8MCl7aWYobS5jaGFyQXQoYyk9PVwiLVwiJiZ0aGlzLnNpZ251bSgpPT0wKXtlPXRydWV9Y29udGludWV9bD1oKmwraztpZigrK2E+PWYpe3RoaXMuZE11bHRpcGx5KGcpO3RoaXMuZEFkZE9mZnNldChsLDApO2E9MDtsPTB9fWlmKGE+MCl7dGhpcy5kTXVsdGlwbHkoTWF0aC5wb3coaCxhKSk7dGhpcy5kQWRkT2Zmc2V0KGwsMCl9aWYoZSl7QmlnSW50ZWdlci5aRVJPLnN1YlRvKHRoaXMsdGhpcyl9fWZ1bmN0aW9uIGJucEZyb21OdW1iZXIoZixlLGgpe2lmKFwibnVtYmVyXCI9PXR5cGVvZiBlKXtpZihmPDIpe3RoaXMuZnJvbUludCgxKX1lbHNle3RoaXMuZnJvbU51bWJlcihmLGgpO2lmKCF0aGlzLnRlc3RCaXQoZi0xKSl7dGhpcy5iaXR3aXNlVG8oQmlnSW50ZWdlci5PTkUuc2hpZnRMZWZ0KGYtMSksb3Bfb3IsdGhpcyl9aWYodGhpcy5pc0V2ZW4oKSl7dGhpcy5kQWRkT2Zmc2V0KDEsMCl9d2hpbGUoIXRoaXMuaXNQcm9iYWJsZVByaW1lKGUpKXt0aGlzLmRBZGRPZmZzZXQoMiwwKTtpZih0aGlzLmJpdExlbmd0aCgpPmYpe3RoaXMuc3ViVG8oQmlnSW50ZWdlci5PTkUuc2hpZnRMZWZ0KGYtMSksdGhpcyl9fX19ZWxzZXt2YXIgZD1uZXcgQXJyYXkoKSxnPWYmNztkLmxlbmd0aD0oZj4+MykrMTtlLm5leHRCeXRlcyhkKTtpZihnPjApe2RbMF0mPSgoMTw8ZyktMSl9ZWxzZXtkWzBdPTB9dGhpcy5mcm9tU3RyaW5nKGQsMjU2KX19ZnVuY3Rpb24gYm5Ub0J5dGVBcnJheSgpe3ZhciBiPXRoaXMudCxjPW5ldyBBcnJheSgpO2NbMF09dGhpcy5zO3ZhciBlPXRoaXMuREItKGIqdGhpcy5EQiklOCxmLGE9MDtpZihiLS0+MCl7aWYoZTx0aGlzLkRCJiYoZj10aGlzW2JdPj5lKSE9KHRoaXMucyZ0aGlzLkRNKT4+ZSl7Y1thKytdPWZ8KHRoaXMuczw8KHRoaXMuREItZSkpfXdoaWxlKGI+PTApe2lmKGU8OCl7Zj0odGhpc1tiXSYoKDE8PGUpLTEpKTw8KDgtZSk7Znw9dGhpc1stLWJdPj4oZSs9dGhpcy5EQi04KX1lbHNle2Y9KHRoaXNbYl0+PihlLT04KSkmMjU1O2lmKGU8PTApe2UrPXRoaXMuREI7LS1ifX1pZigoZiYxMjgpIT0wKXtmfD0tMjU2fWlmKGE9PTAmJih0aGlzLnMmMTI4KSE9KGYmMTI4KSl7KythfWlmKGE+MHx8ZiE9dGhpcy5zKXtjW2ErK109Zn19fXJldHVybiBjfWZ1bmN0aW9uIGJuRXF1YWxzKGIpe3JldHVybih0aGlzLmNvbXBhcmVUbyhiKT09MCl9ZnVuY3Rpb24gYm5NaW4oYil7cmV0dXJuKHRoaXMuY29tcGFyZVRvKGIpPDApP3RoaXM6Yn1mdW5jdGlvbiBibk1heChiKXtyZXR1cm4odGhpcy5jb21wYXJlVG8oYik+MCk/dGhpczpifWZ1bmN0aW9uIGJucEJpdHdpc2VUbyhjLGgsZSl7dmFyIGQsZyxiPU1hdGgubWluKGMudCx0aGlzLnQpO2ZvcihkPTA7ZDxiOysrZCl7ZVtkXT1oKHRoaXNbZF0sY1tkXSl9aWYoYy50PHRoaXMudCl7Zz1jLnMmdGhpcy5ETTtmb3IoZD1iO2Q8dGhpcy50OysrZCl7ZVtkXT1oKHRoaXNbZF0sZyl9ZS50PXRoaXMudH1lbHNle2c9dGhpcy5zJnRoaXMuRE07Zm9yKGQ9YjtkPGMudDsrK2Qpe2VbZF09aChnLGNbZF0pfWUudD1jLnR9ZS5zPWgodGhpcy5zLGMucyk7ZS5jbGFtcCgpfWZ1bmN0aW9uIG9wX2FuZChhLGIpe3JldHVybiBhJmJ9ZnVuY3Rpb24gYm5BbmQoYil7dmFyIGM9bmJpKCk7dGhpcy5iaXR3aXNlVG8oYixvcF9hbmQsYyk7cmV0dXJuIGN9ZnVuY3Rpb24gb3Bfb3IoYSxiKXtyZXR1cm4gYXxifWZ1bmN0aW9uIGJuT3IoYil7dmFyIGM9bmJpKCk7dGhpcy5iaXR3aXNlVG8oYixvcF9vcixjKTtyZXR1cm4gY31mdW5jdGlvbiBvcF94b3IoYSxiKXtyZXR1cm4gYV5ifWZ1bmN0aW9uIGJuWG9yKGIpe3ZhciBjPW5iaSgpO3RoaXMuYml0d2lzZVRvKGIsb3BfeG9yLGMpO3JldHVybiBjfWZ1bmN0aW9uIG9wX2FuZG5vdChhLGIpe3JldHVybiBhJn5ifWZ1bmN0aW9uIGJuQW5kTm90KGIpe3ZhciBjPW5iaSgpO3RoaXMuYml0d2lzZVRvKGIsb3BfYW5kbm90LGMpO3JldHVybiBjfWZ1bmN0aW9uIGJuTm90KCl7dmFyIGI9bmJpKCk7Zm9yKHZhciBhPTA7YTx0aGlzLnQ7KythKXtiW2FdPXRoaXMuRE0mfnRoaXNbYV19Yi50PXRoaXMudDtiLnM9fnRoaXMucztyZXR1cm4gYn1mdW5jdGlvbiBiblNoaWZ0TGVmdChiKXt2YXIgYT1uYmkoKTtpZihiPDApe3RoaXMuclNoaWZ0VG8oLWIsYSl9ZWxzZXt0aGlzLmxTaGlmdFRvKGIsYSl9cmV0dXJuIGF9ZnVuY3Rpb24gYm5TaGlmdFJpZ2h0KGIpe3ZhciBhPW5iaSgpO2lmKGI8MCl7dGhpcy5sU2hpZnRUbygtYixhKX1lbHNle3RoaXMuclNoaWZ0VG8oYixhKX1yZXR1cm4gYX1mdW5jdGlvbiBsYml0KGEpe2lmKGE9PTApe3JldHVybiAtMX12YXIgYj0wO2lmKChhJjY1NTM1KT09MCl7YT4+PTE2O2IrPTE2fWlmKChhJjI1NSk9PTApe2E+Pj04O2IrPTh9aWYoKGEmMTUpPT0wKXthPj49NDtiKz00fWlmKChhJjMpPT0wKXthPj49MjtiKz0yfWlmKChhJjEpPT0wKXsrK2J9cmV0dXJuIGJ9ZnVuY3Rpb24gYm5HZXRMb3dlc3RTZXRCaXQoKXtmb3IodmFyIGE9MDthPHRoaXMudDsrK2Epe2lmKHRoaXNbYV0hPTApe3JldHVybiBhKnRoaXMuREIrbGJpdCh0aGlzW2FdKX19aWYodGhpcy5zPDApe3JldHVybiB0aGlzLnQqdGhpcy5EQn1yZXR1cm4gLTF9ZnVuY3Rpb24gY2JpdChhKXt2YXIgYj0wO3doaWxlKGEhPTApe2EmPWEtMTsrK2J9cmV0dXJuIGJ9ZnVuY3Rpb24gYm5CaXRDb3VudCgpe3ZhciBjPTAsYT10aGlzLnMmdGhpcy5ETTtmb3IodmFyIGI9MDtiPHRoaXMudDsrK2Ipe2MrPWNiaXQodGhpc1tiXV5hKX1yZXR1cm4gY31mdW5jdGlvbiBiblRlc3RCaXQoYil7dmFyIGE9TWF0aC5mbG9vcihiL3RoaXMuREIpO2lmKGE+PXRoaXMudCl7cmV0dXJuKHRoaXMucyE9MCl9cmV0dXJuKCh0aGlzW2FdJigxPDwoYiV0aGlzLkRCKSkpIT0wKX1mdW5jdGlvbiBibnBDaGFuZ2VCaXQoYyxiKXt2YXIgYT1CaWdJbnRlZ2VyLk9ORS5zaGlmdExlZnQoYyk7dGhpcy5iaXR3aXNlVG8oYSxiLGEpO3JldHVybiBhfWZ1bmN0aW9uIGJuU2V0Qml0KGEpe3JldHVybiB0aGlzLmNoYW5nZUJpdChhLG9wX29yKX1mdW5jdGlvbiBibkNsZWFyQml0KGEpe3JldHVybiB0aGlzLmNoYW5nZUJpdChhLG9wX2FuZG5vdCl9ZnVuY3Rpb24gYm5GbGlwQml0KGEpe3JldHVybiB0aGlzLmNoYW5nZUJpdChhLG9wX3hvcil9ZnVuY3Rpb24gYm5wQWRkVG8oZCxmKXt2YXIgZT0wLGc9MCxiPU1hdGgubWluKGQudCx0aGlzLnQpO3doaWxlKGU8Yil7Zys9dGhpc1tlXStkW2VdO2ZbZSsrXT1nJnRoaXMuRE07Zz4+PXRoaXMuREJ9aWYoZC50PHRoaXMudCl7Zys9ZC5zO3doaWxlKGU8dGhpcy50KXtnKz10aGlzW2VdO2ZbZSsrXT1nJnRoaXMuRE07Zz4+PXRoaXMuREJ9Zys9dGhpcy5zfWVsc2V7Zys9dGhpcy5zO3doaWxlKGU8ZC50KXtnKz1kW2VdO2ZbZSsrXT1nJnRoaXMuRE07Zz4+PXRoaXMuREJ9Zys9ZC5zfWYucz0oZzwwKT8tMTowO2lmKGc+MCl7ZltlKytdPWd9ZWxzZXtpZihnPC0xKXtmW2UrK109dGhpcy5EVitnfX1mLnQ9ZTtmLmNsYW1wKCl9ZnVuY3Rpb24gYm5BZGQoYil7dmFyIGM9bmJpKCk7dGhpcy5hZGRUbyhiLGMpO3JldHVybiBjfWZ1bmN0aW9uIGJuU3VidHJhY3QoYil7dmFyIGM9bmJpKCk7dGhpcy5zdWJUbyhiLGMpO3JldHVybiBjfWZ1bmN0aW9uIGJuTXVsdGlwbHkoYil7dmFyIGM9bmJpKCk7dGhpcy5tdWx0aXBseVRvKGIsYyk7cmV0dXJuIGN9ZnVuY3Rpb24gYm5TcXVhcmUoKXt2YXIgYT1uYmkoKTt0aGlzLnNxdWFyZVRvKGEpO3JldHVybiBhfWZ1bmN0aW9uIGJuRGl2aWRlKGIpe3ZhciBjPW5iaSgpO3RoaXMuZGl2UmVtVG8oYixjLG51bGwpO3JldHVybiBjfWZ1bmN0aW9uIGJuUmVtYWluZGVyKGIpe3ZhciBjPW5iaSgpO3RoaXMuZGl2UmVtVG8oYixudWxsLGMpO3JldHVybiBjfWZ1bmN0aW9uIGJuRGl2aWRlQW5kUmVtYWluZGVyKGIpe3ZhciBkPW5iaSgpLGM9bmJpKCk7dGhpcy5kaXZSZW1UbyhiLGQsYyk7cmV0dXJuIG5ldyBBcnJheShkLGMpfWZ1bmN0aW9uIGJucERNdWx0aXBseShhKXt0aGlzW3RoaXMudF09dGhpcy5hbSgwLGEtMSx0aGlzLDAsMCx0aGlzLnQpOysrdGhpcy50O3RoaXMuY2xhbXAoKX1mdW5jdGlvbiBibnBEQWRkT2Zmc2V0KGIsYSl7aWYoYj09MCl7cmV0dXJufXdoaWxlKHRoaXMudDw9YSl7dGhpc1t0aGlzLnQrK109MH10aGlzW2FdKz1iO3doaWxlKHRoaXNbYV0+PXRoaXMuRFYpe3RoaXNbYV0tPXRoaXMuRFY7aWYoKythPj10aGlzLnQpe3RoaXNbdGhpcy50KytdPTB9Kyt0aGlzW2FdfX1mdW5jdGlvbiBOdWxsRXhwKCl7fWZ1bmN0aW9uIG5Ob3AoYSl7cmV0dXJuIGF9ZnVuY3Rpb24gbk11bFRvKGEsYyxiKXthLm11bHRpcGx5VG8oYyxiKX1mdW5jdGlvbiBuU3FyVG8oYSxiKXthLnNxdWFyZVRvKGIpfU51bGxFeHAucHJvdG90eXBlLmNvbnZlcnQ9bk5vcDtOdWxsRXhwLnByb3RvdHlwZS5yZXZlcnQ9bk5vcDtOdWxsRXhwLnByb3RvdHlwZS5tdWxUbz1uTXVsVG87TnVsbEV4cC5wcm90b3R5cGUuc3FyVG89blNxclRvO2Z1bmN0aW9uIGJuUG93KGEpe3JldHVybiB0aGlzLmV4cChhLG5ldyBOdWxsRXhwKCkpfWZ1bmN0aW9uIGJucE11bHRpcGx5TG93ZXJUbyhiLGYsZSl7dmFyIGQ9TWF0aC5taW4odGhpcy50K2IudCxmKTtlLnM9MDtlLnQ9ZDt3aGlsZShkPjApe2VbLS1kXT0wfXZhciBjO2ZvcihjPWUudC10aGlzLnQ7ZDxjOysrZCl7ZVtkK3RoaXMudF09dGhpcy5hbSgwLGJbZF0sZSxkLDAsdGhpcy50KX1mb3IoYz1NYXRoLm1pbihiLnQsZik7ZDxjOysrZCl7dGhpcy5hbSgwLGJbZF0sZSxkLDAsZi1kKX1lLmNsYW1wKCl9ZnVuY3Rpb24gYm5wTXVsdGlwbHlVcHBlclRvKGIsZSxkKXstLWU7dmFyIGM9ZC50PXRoaXMudCtiLnQtZTtkLnM9MDt3aGlsZSgtLWM+PTApe2RbY109MH1mb3IoYz1NYXRoLm1heChlLXRoaXMudCwwKTtjPGIudDsrK2Mpe2RbdGhpcy50K2MtZV09dGhpcy5hbShlLWMsYltjXSxkLDAsMCx0aGlzLnQrYy1lKX1kLmNsYW1wKCk7ZC5kclNoaWZ0VG8oMSxkKX1mdW5jdGlvbiBCYXJyZXR0KGEpe3RoaXMucjI9bmJpKCk7dGhpcy5xMz1uYmkoKTtCaWdJbnRlZ2VyLk9ORS5kbFNoaWZ0VG8oMiphLnQsdGhpcy5yMik7dGhpcy5tdT10aGlzLnIyLmRpdmlkZShhKTt0aGlzLm09YX1mdW5jdGlvbiBiYXJyZXR0Q29udmVydChhKXtpZihhLnM8MHx8YS50PjIqdGhpcy5tLnQpe3JldHVybiBhLm1vZCh0aGlzLm0pfWVsc2V7aWYoYS5jb21wYXJlVG8odGhpcy5tKTwwKXtyZXR1cm4gYX1lbHNle3ZhciBiPW5iaSgpO2EuY29weVRvKGIpO3RoaXMucmVkdWNlKGIpO3JldHVybiBifX19ZnVuY3Rpb24gYmFycmV0dFJldmVydChhKXtyZXR1cm4gYX1mdW5jdGlvbiBiYXJyZXR0UmVkdWNlKGEpe2EuZHJTaGlmdFRvKHRoaXMubS50LTEsdGhpcy5yMik7aWYoYS50PnRoaXMubS50KzEpe2EudD10aGlzLm0udCsxO2EuY2xhbXAoKX10aGlzLm11Lm11bHRpcGx5VXBwZXJUbyh0aGlzLnIyLHRoaXMubS50KzEsdGhpcy5xMyk7dGhpcy5tLm11bHRpcGx5TG93ZXJUbyh0aGlzLnEzLHRoaXMubS50KzEsdGhpcy5yMik7d2hpbGUoYS5jb21wYXJlVG8odGhpcy5yMik8MCl7YS5kQWRkT2Zmc2V0KDEsdGhpcy5tLnQrMSl9YS5zdWJUbyh0aGlzLnIyLGEpO3doaWxlKGEuY29tcGFyZVRvKHRoaXMubSk+PTApe2Euc3ViVG8odGhpcy5tLGEpfX1mdW5jdGlvbiBiYXJyZXR0U3FyVG8oYSxiKXthLnNxdWFyZVRvKGIpO3RoaXMucmVkdWNlKGIpfWZ1bmN0aW9uIGJhcnJldHRNdWxUbyhhLGMsYil7YS5tdWx0aXBseVRvKGMsYik7dGhpcy5yZWR1Y2UoYil9QmFycmV0dC5wcm90b3R5cGUuY29udmVydD1iYXJyZXR0Q29udmVydDtCYXJyZXR0LnByb3RvdHlwZS5yZXZlcnQ9YmFycmV0dFJldmVydDtCYXJyZXR0LnByb3RvdHlwZS5yZWR1Y2U9YmFycmV0dFJlZHVjZTtCYXJyZXR0LnByb3RvdHlwZS5tdWxUbz1iYXJyZXR0TXVsVG87QmFycmV0dC5wcm90b3R5cGUuc3FyVG89YmFycmV0dFNxclRvO2Z1bmN0aW9uIGJuTW9kUG93KHEsZil7dmFyIG89cS5iaXRMZW5ndGgoKSxoLGI9bmJ2KDEpLHY7aWYobzw9MCl7cmV0dXJuIGJ9ZWxzZXtpZihvPDE4KXtoPTF9ZWxzZXtpZihvPDQ4KXtoPTN9ZWxzZXtpZihvPDE0NCl7aD00fWVsc2V7aWYobzw3Njgpe2g9NX1lbHNle2g9Nn19fX19aWYobzw4KXt2PW5ldyBDbGFzc2ljKGYpfWVsc2V7aWYoZi5pc0V2ZW4oKSl7dj1uZXcgQmFycmV0dChmKX1lbHNle3Y9bmV3IE1vbnRnb21lcnkoZil9fXZhciBwPW5ldyBBcnJheSgpLGQ9MyxzPWgtMSxhPSgxPDxoKS0xO3BbMV09di5jb252ZXJ0KHRoaXMpO2lmKGg+MSl7dmFyIEE9bmJpKCk7di5zcXJUbyhwWzFdLEEpO3doaWxlKGQ8PWEpe3BbZF09bmJpKCk7di5tdWxUbyhBLHBbZC0yXSxwW2RdKTtkKz0yfX12YXIgbD1xLnQtMSx4LHU9dHJ1ZSxjPW5iaSgpLHk7bz1uYml0cyhxW2xdKS0xO3doaWxlKGw+PTApe2lmKG8+PXMpe3g9KHFbbF0+PihvLXMpKSZhfWVsc2V7eD0ocVtsXSYoKDE8PChvKzEpKS0xKSk8PChzLW8pO2lmKGw+MCl7eHw9cVtsLTFdPj4odGhpcy5EQitvLXMpfX1kPWg7d2hpbGUoKHgmMSk9PTApe3g+Pj0xOy0tZH1pZigoby09ZCk8MCl7bys9dGhpcy5EQjstLWx9aWYodSl7cFt4XS5jb3B5VG8oYik7dT1mYWxzZX1lbHNle3doaWxlKGQ+MSl7di5zcXJUbyhiLGMpO3Yuc3FyVG8oYyxiKTtkLT0yfWlmKGQ+MCl7di5zcXJUbyhiLGMpfWVsc2V7eT1iO2I9YztjPXl9di5tdWxUbyhjLHBbeF0sYil9d2hpbGUobD49MCYmKHFbbF0mKDE8PG8pKT09MCl7di5zcXJUbyhiLGMpO3k9YjtiPWM7Yz15O2lmKC0tbzwwKXtvPXRoaXMuREItMTstLWx9fX1yZXR1cm4gdi5yZXZlcnQoYil9ZnVuY3Rpb24gYm5HQ0QoYyl7dmFyIGI9KHRoaXMuczwwKT90aGlzLm5lZ2F0ZSgpOnRoaXMuY2xvbmUoKTt2YXIgaD0oYy5zPDApP2MubmVnYXRlKCk6Yy5jbG9uZSgpO2lmKGIuY29tcGFyZVRvKGgpPDApe3ZhciBlPWI7Yj1oO2g9ZX12YXIgZD1iLmdldExvd2VzdFNldEJpdCgpLGY9aC5nZXRMb3dlc3RTZXRCaXQoKTtpZihmPDApe3JldHVybiBifWlmKGQ8Zil7Zj1kfWlmKGY+MCl7Yi5yU2hpZnRUbyhmLGIpO2guclNoaWZ0VG8oZixoKX13aGlsZShiLnNpZ251bSgpPjApe2lmKChkPWIuZ2V0TG93ZXN0U2V0Qml0KCkpPjApe2IuclNoaWZ0VG8oZCxiKX1pZigoZD1oLmdldExvd2VzdFNldEJpdCgpKT4wKXtoLnJTaGlmdFRvKGQsaCl9aWYoYi5jb21wYXJlVG8oaCk+PTApe2Iuc3ViVG8oaCxiKTtiLnJTaGlmdFRvKDEsYil9ZWxzZXtoLnN1YlRvKGIsaCk7aC5yU2hpZnRUbygxLGgpfX1pZihmPjApe2gubFNoaWZ0VG8oZixoKX1yZXR1cm4gaH1mdW5jdGlvbiBibnBNb2RJbnQoZSl7aWYoZTw9MCl7cmV0dXJuIDB9dmFyIGM9dGhpcy5EViVlLGI9KHRoaXMuczwwKT9lLTE6MDtpZih0aGlzLnQ+MCl7aWYoYz09MCl7Yj10aGlzWzBdJWV9ZWxzZXtmb3IodmFyIGE9dGhpcy50LTE7YT49MDstLWEpe2I9KGMqYit0aGlzW2FdKSVlfX19cmV0dXJuIGJ9ZnVuY3Rpb24gYm5Nb2RJbnZlcnNlKGYpe3ZhciBqPWYuaXNFdmVuKCk7aWYoKHRoaXMuaXNFdmVuKCkmJmopfHxmLnNpZ251bSgpPT0wKXtyZXR1cm4gQmlnSW50ZWdlci5aRVJPfXZhciBpPWYuY2xvbmUoKSxoPXRoaXMuY2xvbmUoKTt2YXIgZz1uYnYoMSksZT1uYnYoMCksbD1uYnYoMCksaz1uYnYoMSk7d2hpbGUoaS5zaWdudW0oKSE9MCl7d2hpbGUoaS5pc0V2ZW4oKSl7aS5yU2hpZnRUbygxLGkpO2lmKGope2lmKCFnLmlzRXZlbigpfHwhZS5pc0V2ZW4oKSl7Zy5hZGRUbyh0aGlzLGcpO2Uuc3ViVG8oZixlKX1nLnJTaGlmdFRvKDEsZyl9ZWxzZXtpZighZS5pc0V2ZW4oKSl7ZS5zdWJUbyhmLGUpfX1lLnJTaGlmdFRvKDEsZSl9d2hpbGUoaC5pc0V2ZW4oKSl7aC5yU2hpZnRUbygxLGgpO2lmKGope2lmKCFsLmlzRXZlbigpfHwhay5pc0V2ZW4oKSl7bC5hZGRUbyh0aGlzLGwpO2suc3ViVG8oZixrKX1sLnJTaGlmdFRvKDEsbCl9ZWxzZXtpZighay5pc0V2ZW4oKSl7ay5zdWJUbyhmLGspfX1rLnJTaGlmdFRvKDEsayl9aWYoaS5jb21wYXJlVG8oaCk+PTApe2kuc3ViVG8oaCxpKTtpZihqKXtnLnN1YlRvKGwsZyl9ZS5zdWJUbyhrLGUpfWVsc2V7aC5zdWJUbyhpLGgpO2lmKGope2wuc3ViVG8oZyxsKX1rLnN1YlRvKGUsayl9fWlmKGguY29tcGFyZVRvKEJpZ0ludGVnZXIuT05FKSE9MCl7cmV0dXJuIEJpZ0ludGVnZXIuWkVST31pZihrLmNvbXBhcmVUbyhmKT49MCl7cmV0dXJuIGsuc3VidHJhY3QoZil9aWYoay5zaWdudW0oKTwwKXtrLmFkZFRvKGYsayl9ZWxzZXtyZXR1cm4ga31pZihrLnNpZ251bSgpPDApe3JldHVybiBrLmFkZChmKX1lbHNle3JldHVybiBrfX12YXIgbG93cHJpbWVzPVsyLDMsNSw3LDExLDEzLDE3LDE5LDIzLDI5LDMxLDM3LDQxLDQzLDQ3LDUzLDU5LDYxLDY3LDcxLDczLDc5LDgzLDg5LDk3LDEwMSwxMDMsMTA3LDEwOSwxMTMsMTI3LDEzMSwxMzcsMTM5LDE0OSwxNTEsMTU3LDE2MywxNjcsMTczLDE3OSwxODEsMTkxLDE5MywxOTcsMTk5LDIxMSwyMjMsMjI3LDIyOSwyMzMsMjM5LDI0MSwyNTEsMjU3LDI2MywyNjksMjcxLDI3NywyODEsMjgzLDI5MywzMDcsMzExLDMxMywzMTcsMzMxLDMzNywzNDcsMzQ5LDM1MywzNTksMzY3LDM3MywzNzksMzgzLDM4OSwzOTcsNDAxLDQwOSw0MTksNDIxLDQzMSw0MzMsNDM5LDQ0Myw0NDksNDU3LDQ2MSw0NjMsNDY3LDQ3OSw0ODcsNDkxLDQ5OSw1MDMsNTA5LDUyMSw1MjMsNTQxLDU0Nyw1NTcsNTYzLDU2OSw1NzEsNTc3LDU4Nyw1OTMsNTk5LDYwMSw2MDcsNjEzLDYxNyw2MTksNjMxLDY0MSw2NDMsNjQ3LDY1Myw2NTksNjYxLDY3Myw2NzcsNjgzLDY5MSw3MDEsNzA5LDcxOSw3MjcsNzMzLDczOSw3NDMsNzUxLDc1Nyw3NjEsNzY5LDc3Myw3ODcsNzk3LDgwOSw4MTEsODIxLDgyMyw4MjcsODI5LDgzOSw4NTMsODU3LDg1OSw4NjMsODc3LDg4MSw4ODMsODg3LDkwNyw5MTEsOTE5LDkyOSw5MzcsOTQxLDk0Nyw5NTMsOTY3LDk3MSw5NzcsOTgzLDk5MSw5OTddO3ZhciBscGxpbT0oMTw8MjYpL2xvd3ByaW1lc1tsb3dwcmltZXMubGVuZ3RoLTFdO2Z1bmN0aW9uIGJuSXNQcm9iYWJsZVByaW1lKGUpe3ZhciBkLGI9dGhpcy5hYnMoKTtpZihiLnQ9PTEmJmJbMF08PWxvd3ByaW1lc1tsb3dwcmltZXMubGVuZ3RoLTFdKXtmb3IoZD0wO2Q8bG93cHJpbWVzLmxlbmd0aDsrK2Qpe2lmKGJbMF09PWxvd3ByaW1lc1tkXSl7cmV0dXJuIHRydWV9fXJldHVybiBmYWxzZX1pZihiLmlzRXZlbigpKXtyZXR1cm4gZmFsc2V9ZD0xO3doaWxlKGQ8bG93cHJpbWVzLmxlbmd0aCl7dmFyIGE9bG93cHJpbWVzW2RdLGM9ZCsxO3doaWxlKGM8bG93cHJpbWVzLmxlbmd0aCYmYTxscGxpbSl7YSo9bG93cHJpbWVzW2MrK119YT1iLm1vZEludChhKTt3aGlsZShkPGMpe2lmKGElbG93cHJpbWVzW2QrK109PTApe3JldHVybiBmYWxzZX19fXJldHVybiBiLm1pbGxlclJhYmluKGUpfWZ1bmN0aW9uIGJucE1pbGxlclJhYmluKGYpe3ZhciBnPXRoaXMuc3VidHJhY3QoQmlnSW50ZWdlci5PTkUpO3ZhciBjPWcuZ2V0TG93ZXN0U2V0Qml0KCk7aWYoYzw9MCl7cmV0dXJuIGZhbHNlfXZhciBoPWcuc2hpZnRSaWdodChjKTtmPShmKzEpPj4xO2lmKGY+bG93cHJpbWVzLmxlbmd0aCl7Zj1sb3dwcmltZXMubGVuZ3RofXZhciBiPW5iaSgpO2Zvcih2YXIgZT0wO2U8ZjsrK2Upe2IuZnJvbUludChsb3dwcmltZXNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKmxvd3ByaW1lcy5sZW5ndGgpXSk7dmFyIGw9Yi5tb2RQb3coaCx0aGlzKTtpZihsLmNvbXBhcmVUbyhCaWdJbnRlZ2VyLk9ORSkhPTAmJmwuY29tcGFyZVRvKGcpIT0wKXt2YXIgZD0xO3doaWxlKGQrKzxjJiZsLmNvbXBhcmVUbyhnKSE9MCl7bD1sLm1vZFBvd0ludCgyLHRoaXMpO2lmKGwuY29tcGFyZVRvKEJpZ0ludGVnZXIuT05FKT09MCl7cmV0dXJuIGZhbHNlfX1pZihsLmNvbXBhcmVUbyhnKSE9MCl7cmV0dXJuIGZhbHNlfX19cmV0dXJuIHRydWV9QmlnSW50ZWdlci5wcm90b3R5cGUuY2h1bmtTaXplPWJucENodW5rU2l6ZTtCaWdJbnRlZ2VyLnByb3RvdHlwZS50b1JhZGl4PWJucFRvUmFkaXg7QmlnSW50ZWdlci5wcm90b3R5cGUuZnJvbVJhZGl4PWJucEZyb21SYWRpeDtCaWdJbnRlZ2VyLnByb3RvdHlwZS5mcm9tTnVtYmVyPWJucEZyb21OdW1iZXI7QmlnSW50ZWdlci5wcm90b3R5cGUuYml0d2lzZVRvPWJucEJpdHdpc2VUbztCaWdJbnRlZ2VyLnByb3RvdHlwZS5jaGFuZ2VCaXQ9Ym5wQ2hhbmdlQml0O0JpZ0ludGVnZXIucHJvdG90eXBlLmFkZFRvPWJucEFkZFRvO0JpZ0ludGVnZXIucHJvdG90eXBlLmRNdWx0aXBseT1ibnBETXVsdGlwbHk7QmlnSW50ZWdlci5wcm90b3R5cGUuZEFkZE9mZnNldD1ibnBEQWRkT2Zmc2V0O0JpZ0ludGVnZXIucHJvdG90eXBlLm11bHRpcGx5TG93ZXJUbz1ibnBNdWx0aXBseUxvd2VyVG87QmlnSW50ZWdlci5wcm90b3R5cGUubXVsdGlwbHlVcHBlclRvPWJucE11bHRpcGx5VXBwZXJUbztCaWdJbnRlZ2VyLnByb3RvdHlwZS5tb2RJbnQ9Ym5wTW9kSW50O0JpZ0ludGVnZXIucHJvdG90eXBlLm1pbGxlclJhYmluPWJucE1pbGxlclJhYmluO0JpZ0ludGVnZXIucHJvdG90eXBlLmNsb25lPWJuQ2xvbmU7QmlnSW50ZWdlci5wcm90b3R5cGUuaW50VmFsdWU9Ym5JbnRWYWx1ZTtCaWdJbnRlZ2VyLnByb3RvdHlwZS5ieXRlVmFsdWU9Ym5CeXRlVmFsdWU7QmlnSW50ZWdlci5wcm90b3R5cGUuc2hvcnRWYWx1ZT1iblNob3J0VmFsdWU7QmlnSW50ZWdlci5wcm90b3R5cGUuc2lnbnVtPWJuU2lnTnVtO0JpZ0ludGVnZXIucHJvdG90eXBlLnRvQnl0ZUFycmF5PWJuVG9CeXRlQXJyYXk7QmlnSW50ZWdlci5wcm90b3R5cGUuZXF1YWxzPWJuRXF1YWxzO0JpZ0ludGVnZXIucHJvdG90eXBlLm1pbj1ibk1pbjtCaWdJbnRlZ2VyLnByb3RvdHlwZS5tYXg9Ym5NYXg7QmlnSW50ZWdlci5wcm90b3R5cGUuYW5kPWJuQW5kO0JpZ0ludGVnZXIucHJvdG90eXBlLm9yPWJuT3I7QmlnSW50ZWdlci5wcm90b3R5cGUueG9yPWJuWG9yO0JpZ0ludGVnZXIucHJvdG90eXBlLmFuZE5vdD1ibkFuZE5vdDtCaWdJbnRlZ2VyLnByb3RvdHlwZS5ub3Q9Ym5Ob3Q7QmlnSW50ZWdlci5wcm90b3R5cGUuc2hpZnRMZWZ0PWJuU2hpZnRMZWZ0O0JpZ0ludGVnZXIucHJvdG90eXBlLnNoaWZ0UmlnaHQ9Ym5TaGlmdFJpZ2h0O0JpZ0ludGVnZXIucHJvdG90eXBlLmdldExvd2VzdFNldEJpdD1ibkdldExvd2VzdFNldEJpdDtCaWdJbnRlZ2VyLnByb3RvdHlwZS5iaXRDb3VudD1ibkJpdENvdW50O0JpZ0ludGVnZXIucHJvdG90eXBlLnRlc3RCaXQ9Ym5UZXN0Qml0O0JpZ0ludGVnZXIucHJvdG90eXBlLnNldEJpdD1iblNldEJpdDtCaWdJbnRlZ2VyLnByb3RvdHlwZS5jbGVhckJpdD1ibkNsZWFyQml0O0JpZ0ludGVnZXIucHJvdG90eXBlLmZsaXBCaXQ9Ym5GbGlwQml0O0JpZ0ludGVnZXIucHJvdG90eXBlLmFkZD1ibkFkZDtCaWdJbnRlZ2VyLnByb3RvdHlwZS5zdWJ0cmFjdD1iblN1YnRyYWN0O0JpZ0ludGVnZXIucHJvdG90eXBlLm11bHRpcGx5PWJuTXVsdGlwbHk7QmlnSW50ZWdlci5wcm90b3R5cGUuZGl2aWRlPWJuRGl2aWRlO0JpZ0ludGVnZXIucHJvdG90eXBlLnJlbWFpbmRlcj1iblJlbWFpbmRlcjtCaWdJbnRlZ2VyLnByb3RvdHlwZS5kaXZpZGVBbmRSZW1haW5kZXI9Ym5EaXZpZGVBbmRSZW1haW5kZXI7QmlnSW50ZWdlci5wcm90b3R5cGUubW9kUG93PWJuTW9kUG93O0JpZ0ludGVnZXIucHJvdG90eXBlLm1vZEludmVyc2U9Ym5Nb2RJbnZlcnNlO0JpZ0ludGVnZXIucHJvdG90eXBlLnBvdz1iblBvdztCaWdJbnRlZ2VyLnByb3RvdHlwZS5nY2Q9Ym5HQ0Q7QmlnSW50ZWdlci5wcm90b3R5cGUuaXNQcm9iYWJsZVByaW1lPWJuSXNQcm9iYWJsZVByaW1lO0JpZ0ludGVnZXIucHJvdG90eXBlLnNxdWFyZT1iblNxdWFyZTtcbi8qISAoYykgVG9tIFd1IHwgaHR0cDovL3d3dy1jcy1zdHVkZW50cy5zdGFuZm9yZC5lZHUvfnRqdy9qc2JuL1xuICovXG5mdW5jdGlvbiBBcmNmb3VyKCl7dGhpcy5pPTA7dGhpcy5qPTA7dGhpcy5TPW5ldyBBcnJheSgpfWZ1bmN0aW9uIEFSQzRpbml0KGQpe3ZhciBjLGEsYjtmb3IoYz0wO2M8MjU2OysrYyl7dGhpcy5TW2NdPWN9YT0wO2ZvcihjPTA7YzwyNTY7KytjKXthPShhK3RoaXMuU1tjXStkW2MlZC5sZW5ndGhdKSYyNTU7Yj10aGlzLlNbY107dGhpcy5TW2NdPXRoaXMuU1thXTt0aGlzLlNbYV09Yn10aGlzLmk9MDt0aGlzLmo9MH1mdW5jdGlvbiBBUkM0bmV4dCgpe3ZhciBhO3RoaXMuaT0odGhpcy5pKzEpJjI1NTt0aGlzLmo9KHRoaXMuait0aGlzLlNbdGhpcy5pXSkmMjU1O2E9dGhpcy5TW3RoaXMuaV07dGhpcy5TW3RoaXMuaV09dGhpcy5TW3RoaXMual07dGhpcy5TW3RoaXMual09YTtyZXR1cm4gdGhpcy5TWyhhK3RoaXMuU1t0aGlzLmldKSYyNTVdfUFyY2ZvdXIucHJvdG90eXBlLmluaXQ9QVJDNGluaXQ7QXJjZm91ci5wcm90b3R5cGUubmV4dD1BUkM0bmV4dDtmdW5jdGlvbiBwcm5nX25ld3N0YXRlKCl7cmV0dXJuIG5ldyBBcmNmb3VyKCl9dmFyIHJuZ19wc2l6ZT0yNTY7XG4vKiEgKGMpIFRvbSBXdSB8IGh0dHA6Ly93d3ctY3Mtc3R1ZGVudHMuc3RhbmZvcmQuZWR1L350ancvanNibi9cbiAqL1xudmFyIHJuZ19zdGF0ZTt2YXIgcm5nX3Bvb2w7dmFyIHJuZ19wcHRyO2Z1bmN0aW9uIHJuZ19zZWVkX2ludChhKXtybmdfcG9vbFtybmdfcHB0cisrXV49YSYyNTU7cm5nX3Bvb2xbcm5nX3BwdHIrK11ePShhPj44KSYyNTU7cm5nX3Bvb2xbcm5nX3BwdHIrK11ePShhPj4xNikmMjU1O3JuZ19wb29sW3JuZ19wcHRyKytdXj0oYT4+MjQpJjI1NTtpZihybmdfcHB0cj49cm5nX3BzaXplKXtybmdfcHB0ci09cm5nX3BzaXplfX1mdW5jdGlvbiBybmdfc2VlZF90aW1lKCl7cm5nX3NlZWRfaW50KG5ldyBEYXRlKCkuZ2V0VGltZSgpKX1pZihybmdfcG9vbD09bnVsbCl7cm5nX3Bvb2w9bmV3IEFycmF5KCk7cm5nX3BwdHI9MDt2YXIgdDtpZih3aW5kb3chPT11bmRlZmluZWQmJih3aW5kb3cuY3J5cHRvIT09dW5kZWZpbmVkfHx3aW5kb3cubXNDcnlwdG8hPT11bmRlZmluZWQpKXt2YXIgY3J5cHRvPXdpbmRvdy5jcnlwdG98fHdpbmRvdy5tc0NyeXB0bztpZihjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKXt2YXIgdWE9bmV3IFVpbnQ4QXJyYXkoMzIpO2NyeXB0by5nZXRSYW5kb21WYWx1ZXModWEpO2Zvcih0PTA7dDwzMjsrK3Qpe3JuZ19wb29sW3JuZ19wcHRyKytdPXVhW3RdfX1lbHNle2lmKG5hdmlnYXRvci5hcHBOYW1lPT1cIk5ldHNjYXBlXCImJm5hdmlnYXRvci5hcHBWZXJzaW9uPFwiNVwiKXt2YXIgej13aW5kb3cuY3J5cHRvLnJhbmRvbSgzMik7Zm9yKHQ9MDt0PHoubGVuZ3RoOysrdCl7cm5nX3Bvb2xbcm5nX3BwdHIrK109ei5jaGFyQ29kZUF0KHQpJjI1NX19fX13aGlsZShybmdfcHB0cjxybmdfcHNpemUpe3Q9TWF0aC5mbG9vcig2NTUzNipNYXRoLnJhbmRvbSgpKTtybmdfcG9vbFtybmdfcHB0cisrXT10Pj4+ODtybmdfcG9vbFtybmdfcHB0cisrXT10JjI1NX1ybmdfcHB0cj0wO3JuZ19zZWVkX3RpbWUoKX1mdW5jdGlvbiBybmdfZ2V0X2J5dGUoKXtpZihybmdfc3RhdGU9PW51bGwpe3JuZ19zZWVkX3RpbWUoKTtybmdfc3RhdGU9cHJuZ19uZXdzdGF0ZSgpO3JuZ19zdGF0ZS5pbml0KHJuZ19wb29sKTtmb3Iocm5nX3BwdHI9MDtybmdfcHB0cjxybmdfcG9vbC5sZW5ndGg7KytybmdfcHB0cil7cm5nX3Bvb2xbcm5nX3BwdHJdPTB9cm5nX3BwdHI9MH1yZXR1cm4gcm5nX3N0YXRlLm5leHQoKX1mdW5jdGlvbiBybmdfZ2V0X2J5dGVzKGIpe3ZhciBhO2ZvcihhPTA7YTxiLmxlbmd0aDsrK2Epe2JbYV09cm5nX2dldF9ieXRlKCl9fWZ1bmN0aW9uIFNlY3VyZVJhbmRvbSgpe31TZWN1cmVSYW5kb20ucHJvdG90eXBlLm5leHRCeXRlcz1ybmdfZ2V0X2J5dGVzO1xuLyohIChjKSBUb20gV3UgfCBodHRwOi8vd3d3LWNzLXN0dWRlbnRzLnN0YW5mb3JkLmVkdS9+dGp3L2pzYm4vXG4gKi9cbmZ1bmN0aW9uIHBhcnNlQmlnSW50KGIsYSl7cmV0dXJuIG5ldyBCaWdJbnRlZ2VyKGIsYSl9ZnVuY3Rpb24gbGluZWJyayhjLGQpe3ZhciBhPVwiXCI7dmFyIGI9MDt3aGlsZShiK2Q8Yy5sZW5ndGgpe2ErPWMuc3Vic3RyaW5nKGIsYitkKStcIlxcblwiO2IrPWR9cmV0dXJuIGErYy5zdWJzdHJpbmcoYixjLmxlbmd0aCl9ZnVuY3Rpb24gYnl0ZTJIZXgoYSl7aWYoYTwxNil7cmV0dXJuXCIwXCIrYS50b1N0cmluZygxNil9ZWxzZXtyZXR1cm4gYS50b1N0cmluZygxNil9fWZ1bmN0aW9uIHBrY3MxcGFkMihlLGgpe2lmKGg8ZS5sZW5ndGgrMTEpe3Rocm93XCJNZXNzYWdlIHRvbyBsb25nIGZvciBSU0FcIjtyZXR1cm4gbnVsbH12YXIgZz1uZXcgQXJyYXkoKTt2YXIgZD1lLmxlbmd0aC0xO3doaWxlKGQ+PTAmJmg+MCl7dmFyIGY9ZS5jaGFyQ29kZUF0KGQtLSk7aWYoZjwxMjgpe2dbLS1oXT1mfWVsc2V7aWYoKGY+MTI3KSYmKGY8MjA0OCkpe2dbLS1oXT0oZiY2Myl8MTI4O2dbLS1oXT0oZj4+Nil8MTkyfWVsc2V7Z1stLWhdPShmJjYzKXwxMjg7Z1stLWhdPSgoZj4+NikmNjMpfDEyODtnWy0taF09KGY+PjEyKXwyMjR9fX1nWy0taF09MDt2YXIgYj1uZXcgU2VjdXJlUmFuZG9tKCk7dmFyIGE9bmV3IEFycmF5KCk7d2hpbGUoaD4yKXthWzBdPTA7d2hpbGUoYVswXT09MCl7Yi5uZXh0Qnl0ZXMoYSl9Z1stLWhdPWFbMF19Z1stLWhdPTI7Z1stLWhdPTA7cmV0dXJuIG5ldyBCaWdJbnRlZ2VyKGcpfWZ1bmN0aW9uIG9hZXBfbWdmMV9hcnIoYyxhLGUpe3ZhciBiPVwiXCIsZD0wO3doaWxlKGIubGVuZ3RoPGEpe2IrPWUoU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsYy5jb25jYXQoWyhkJjQyNzgxOTAwODApPj4yNCwoZCYxNjcxMTY4MCk+PjE2LChkJjY1MjgwKT4+OCxkJjI1NV0pKSk7ZCs9MX1yZXR1cm4gYn1mdW5jdGlvbiBvYWVwX3BhZChxLGEsZixsKXt2YXIgYz1LSlVSLmNyeXB0by5NZXNzYWdlRGlnZXN0O3ZhciBvPUtKVVIuY3J5cHRvLlV0aWw7dmFyIGI9bnVsbDtpZighZil7Zj1cInNoYTFcIn1pZih0eXBlb2YgZj09PVwic3RyaW5nXCIpe2I9Yy5nZXRDYW5vbmljYWxBbGdOYW1lKGYpO2w9Yy5nZXRIYXNoTGVuZ3RoKGIpO2Y9ZnVuY3Rpb24oaSl7cmV0dXJuIGhleHRvcnN0cihvLmhhc2hIZXgocnN0cnRvaGV4KGkpLGIpKX19aWYocS5sZW5ndGgrMipsKzI+YSl7dGhyb3dcIk1lc3NhZ2UgdG9vIGxvbmcgZm9yIFJTQVwifXZhciBrPVwiXCIsZTtmb3IoZT0wO2U8YS1xLmxlbmd0aC0yKmwtMjtlKz0xKXtrKz1cIlxceDAwXCJ9dmFyIGg9ZihcIlwiKStrK1wiXFx4MDFcIitxO3ZhciBnPW5ldyBBcnJheShsKTtuZXcgU2VjdXJlUmFuZG9tKCkubmV4dEJ5dGVzKGcpO3ZhciBqPW9hZXBfbWdmMV9hcnIoZyxoLmxlbmd0aCxmKTt2YXIgcD1bXTtmb3IoZT0wO2U8aC5sZW5ndGg7ZSs9MSl7cFtlXT1oLmNoYXJDb2RlQXQoZSleai5jaGFyQ29kZUF0KGUpfXZhciBtPW9hZXBfbWdmMV9hcnIocCxnLmxlbmd0aCxmKTt2YXIgZD1bMF07Zm9yKGU9MDtlPGcubGVuZ3RoO2UrPTEpe2RbZSsxXT1nW2VdXm0uY2hhckNvZGVBdChlKX1yZXR1cm4gbmV3IEJpZ0ludGVnZXIoZC5jb25jYXQocCkpfWZ1bmN0aW9uIFJTQUtleSgpe3RoaXMubj1udWxsO3RoaXMuZT0wO3RoaXMuZD1udWxsO3RoaXMucD1udWxsO3RoaXMucT1udWxsO3RoaXMuZG1wMT1udWxsO3RoaXMuZG1xMT1udWxsO3RoaXMuY29lZmY9bnVsbH1mdW5jdGlvbiBSU0FTZXRQdWJsaWMoYixhKXt0aGlzLmlzUHVibGljPXRydWU7dGhpcy5pc1ByaXZhdGU9ZmFsc2U7aWYodHlwZW9mIGIhPT1cInN0cmluZ1wiKXt0aGlzLm49Yjt0aGlzLmU9YX1lbHNle2lmKGIhPW51bGwmJmEhPW51bGwmJmIubGVuZ3RoPjAmJmEubGVuZ3RoPjApe3RoaXMubj1wYXJzZUJpZ0ludChiLDE2KTt0aGlzLmU9cGFyc2VJbnQoYSwxNil9ZWxzZXt0aHJvd1wiSW52YWxpZCBSU0EgcHVibGljIGtleVwifX19ZnVuY3Rpb24gUlNBRG9QdWJsaWMoYSl7cmV0dXJuIGEubW9kUG93SW50KHRoaXMuZSx0aGlzLm4pfWZ1bmN0aW9uIFJTQUVuY3J5cHQoZCl7dmFyIGE9cGtjczFwYWQyKGQsKHRoaXMubi5iaXRMZW5ndGgoKSs3KT4+Myk7aWYoYT09bnVsbCl7cmV0dXJuIG51bGx9dmFyIGU9dGhpcy5kb1B1YmxpYyhhKTtpZihlPT1udWxsKXtyZXR1cm4gbnVsbH12YXIgYj1lLnRvU3RyaW5nKDE2KTtpZigoYi5sZW5ndGgmMSk9PTApe3JldHVybiBifWVsc2V7cmV0dXJuXCIwXCIrYn19ZnVuY3Rpb24gUlNBRW5jcnlwdE9BRVAoZixlLGIpe3ZhciBhPW9hZXBfcGFkKGYsKHRoaXMubi5iaXRMZW5ndGgoKSs3KT4+MyxlLGIpO2lmKGE9PW51bGwpe3JldHVybiBudWxsfXZhciBnPXRoaXMuZG9QdWJsaWMoYSk7aWYoZz09bnVsbCl7cmV0dXJuIG51bGx9dmFyIGQ9Zy50b1N0cmluZygxNik7aWYoKGQubGVuZ3RoJjEpPT0wKXtyZXR1cm4gZH1lbHNle3JldHVyblwiMFwiK2R9fVJTQUtleS5wcm90b3R5cGUuZG9QdWJsaWM9UlNBRG9QdWJsaWM7UlNBS2V5LnByb3RvdHlwZS5zZXRQdWJsaWM9UlNBU2V0UHVibGljO1JTQUtleS5wcm90b3R5cGUuZW5jcnlwdD1SU0FFbmNyeXB0O1JTQUtleS5wcm90b3R5cGUuZW5jcnlwdE9BRVA9UlNBRW5jcnlwdE9BRVA7UlNBS2V5LnByb3RvdHlwZS50eXBlPVwiUlNBXCI7XG4vKiEgKGMpIFRvbSBXdSB8IGh0dHA6Ly93d3ctY3Mtc3R1ZGVudHMuc3RhbmZvcmQuZWR1L350ancvanNibi9cbiAqL1xuZnVuY3Rpb24gRUNGaWVsZEVsZW1lbnRGcChiLGEpe3RoaXMueD1hO3RoaXMucT1ifWZ1bmN0aW9uIGZlRnBFcXVhbHMoYSl7aWYoYT09dGhpcyl7cmV0dXJuIHRydWV9cmV0dXJuKHRoaXMucS5lcXVhbHMoYS5xKSYmdGhpcy54LmVxdWFscyhhLngpKX1mdW5jdGlvbiBmZUZwVG9CaWdJbnRlZ2VyKCl7cmV0dXJuIHRoaXMueH1mdW5jdGlvbiBmZUZwTmVnYXRlKCl7cmV0dXJuIG5ldyBFQ0ZpZWxkRWxlbWVudEZwKHRoaXMucSx0aGlzLngubmVnYXRlKCkubW9kKHRoaXMucSkpfWZ1bmN0aW9uIGZlRnBBZGQoYSl7cmV0dXJuIG5ldyBFQ0ZpZWxkRWxlbWVudEZwKHRoaXMucSx0aGlzLnguYWRkKGEudG9CaWdJbnRlZ2VyKCkpLm1vZCh0aGlzLnEpKX1mdW5jdGlvbiBmZUZwU3VidHJhY3QoYSl7cmV0dXJuIG5ldyBFQ0ZpZWxkRWxlbWVudEZwKHRoaXMucSx0aGlzLnguc3VidHJhY3QoYS50b0JpZ0ludGVnZXIoKSkubW9kKHRoaXMucSkpfWZ1bmN0aW9uIGZlRnBNdWx0aXBseShhKXtyZXR1cm4gbmV3IEVDRmllbGRFbGVtZW50RnAodGhpcy5xLHRoaXMueC5tdWx0aXBseShhLnRvQmlnSW50ZWdlcigpKS5tb2QodGhpcy5xKSl9ZnVuY3Rpb24gZmVGcFNxdWFyZSgpe3JldHVybiBuZXcgRUNGaWVsZEVsZW1lbnRGcCh0aGlzLnEsdGhpcy54LnNxdWFyZSgpLm1vZCh0aGlzLnEpKX1mdW5jdGlvbiBmZUZwRGl2aWRlKGEpe3JldHVybiBuZXcgRUNGaWVsZEVsZW1lbnRGcCh0aGlzLnEsdGhpcy54Lm11bHRpcGx5KGEudG9CaWdJbnRlZ2VyKCkubW9kSW52ZXJzZSh0aGlzLnEpKS5tb2QodGhpcy5xKSl9RUNGaWVsZEVsZW1lbnRGcC5wcm90b3R5cGUuZXF1YWxzPWZlRnBFcXVhbHM7RUNGaWVsZEVsZW1lbnRGcC5wcm90b3R5cGUudG9CaWdJbnRlZ2VyPWZlRnBUb0JpZ0ludGVnZXI7RUNGaWVsZEVsZW1lbnRGcC5wcm90b3R5cGUubmVnYXRlPWZlRnBOZWdhdGU7RUNGaWVsZEVsZW1lbnRGcC5wcm90b3R5cGUuYWRkPWZlRnBBZGQ7RUNGaWVsZEVsZW1lbnRGcC5wcm90b3R5cGUuc3VidHJhY3Q9ZmVGcFN1YnRyYWN0O0VDRmllbGRFbGVtZW50RnAucHJvdG90eXBlLm11bHRpcGx5PWZlRnBNdWx0aXBseTtFQ0ZpZWxkRWxlbWVudEZwLnByb3RvdHlwZS5zcXVhcmU9ZmVGcFNxdWFyZTtFQ0ZpZWxkRWxlbWVudEZwLnByb3RvdHlwZS5kaXZpZGU9ZmVGcERpdmlkZTtmdW5jdGlvbiBFQ1BvaW50RnAoYyxhLGQsYil7dGhpcy5jdXJ2ZT1jO3RoaXMueD1hO3RoaXMueT1kO2lmKGI9PW51bGwpe3RoaXMuej1CaWdJbnRlZ2VyLk9ORX1lbHNle3RoaXMuej1ifXRoaXMuemludj1udWxsfWZ1bmN0aW9uIHBvaW50RnBHZXRYKCl7aWYodGhpcy56aW52PT1udWxsKXt0aGlzLnppbnY9dGhpcy56Lm1vZEludmVyc2UodGhpcy5jdXJ2ZS5xKX1yZXR1cm4gdGhpcy5jdXJ2ZS5mcm9tQmlnSW50ZWdlcih0aGlzLngudG9CaWdJbnRlZ2VyKCkubXVsdGlwbHkodGhpcy56aW52KS5tb2QodGhpcy5jdXJ2ZS5xKSl9ZnVuY3Rpb24gcG9pbnRGcEdldFkoKXtpZih0aGlzLnppbnY9PW51bGwpe3RoaXMuemludj10aGlzLnoubW9kSW52ZXJzZSh0aGlzLmN1cnZlLnEpfXJldHVybiB0aGlzLmN1cnZlLmZyb21CaWdJbnRlZ2VyKHRoaXMueS50b0JpZ0ludGVnZXIoKS5tdWx0aXBseSh0aGlzLnppbnYpLm1vZCh0aGlzLmN1cnZlLnEpKX1mdW5jdGlvbiBwb2ludEZwRXF1YWxzKGEpe2lmKGE9PXRoaXMpe3JldHVybiB0cnVlfWlmKHRoaXMuaXNJbmZpbml0eSgpKXtyZXR1cm4gYS5pc0luZmluaXR5KCl9aWYoYS5pc0luZmluaXR5KCkpe3JldHVybiB0aGlzLmlzSW5maW5pdHkoKX12YXIgYyxiO2M9YS55LnRvQmlnSW50ZWdlcigpLm11bHRpcGx5KHRoaXMueikuc3VidHJhY3QodGhpcy55LnRvQmlnSW50ZWdlcigpLm11bHRpcGx5KGEueikpLm1vZCh0aGlzLmN1cnZlLnEpO2lmKCFjLmVxdWFscyhCaWdJbnRlZ2VyLlpFUk8pKXtyZXR1cm4gZmFsc2V9Yj1hLngudG9CaWdJbnRlZ2VyKCkubXVsdGlwbHkodGhpcy56KS5zdWJ0cmFjdCh0aGlzLngudG9CaWdJbnRlZ2VyKCkubXVsdGlwbHkoYS56KSkubW9kKHRoaXMuY3VydmUucSk7cmV0dXJuIGIuZXF1YWxzKEJpZ0ludGVnZXIuWkVSTyl9ZnVuY3Rpb24gcG9pbnRGcElzSW5maW5pdHkoKXtpZigodGhpcy54PT1udWxsKSYmKHRoaXMueT09bnVsbCkpe3JldHVybiB0cnVlfXJldHVybiB0aGlzLnouZXF1YWxzKEJpZ0ludGVnZXIuWkVSTykmJiF0aGlzLnkudG9CaWdJbnRlZ2VyKCkuZXF1YWxzKEJpZ0ludGVnZXIuWkVSTyl9ZnVuY3Rpb24gcG9pbnRGcE5lZ2F0ZSgpe3JldHVybiBuZXcgRUNQb2ludEZwKHRoaXMuY3VydmUsdGhpcy54LHRoaXMueS5uZWdhdGUoKSx0aGlzLnopfWZ1bmN0aW9uIHBvaW50RnBBZGQobCl7aWYodGhpcy5pc0luZmluaXR5KCkpe3JldHVybiBsfWlmKGwuaXNJbmZpbml0eSgpKXtyZXR1cm4gdGhpc312YXIgcD1sLnkudG9CaWdJbnRlZ2VyKCkubXVsdGlwbHkodGhpcy56KS5zdWJ0cmFjdCh0aGlzLnkudG9CaWdJbnRlZ2VyKCkubXVsdGlwbHkobC56KSkubW9kKHRoaXMuY3VydmUucSk7dmFyIG89bC54LnRvQmlnSW50ZWdlcigpLm11bHRpcGx5KHRoaXMueikuc3VidHJhY3QodGhpcy54LnRvQmlnSW50ZWdlcigpLm11bHRpcGx5KGwueikpLm1vZCh0aGlzLmN1cnZlLnEpO2lmKEJpZ0ludGVnZXIuWkVSTy5lcXVhbHMobykpe2lmKEJpZ0ludGVnZXIuWkVSTy5lcXVhbHMocCkpe3JldHVybiB0aGlzLnR3aWNlKCl9cmV0dXJuIHRoaXMuY3VydmUuZ2V0SW5maW5pdHkoKX12YXIgaj1uZXcgQmlnSW50ZWdlcihcIjNcIik7dmFyIGU9dGhpcy54LnRvQmlnSW50ZWdlcigpO3ZhciBuPXRoaXMueS50b0JpZ0ludGVnZXIoKTt2YXIgYz1sLngudG9CaWdJbnRlZ2VyKCk7dmFyIGs9bC55LnRvQmlnSW50ZWdlcigpO3ZhciBtPW8uc3F1YXJlKCk7dmFyIGk9bS5tdWx0aXBseShvKTt2YXIgZD1lLm11bHRpcGx5KG0pO3ZhciBnPXAuc3F1YXJlKCkubXVsdGlwbHkodGhpcy56KTt2YXIgYT1nLnN1YnRyYWN0KGQuc2hpZnRMZWZ0KDEpKS5tdWx0aXBseShsLnopLnN1YnRyYWN0KGkpLm11bHRpcGx5KG8pLm1vZCh0aGlzLmN1cnZlLnEpO3ZhciBoPWQubXVsdGlwbHkoaikubXVsdGlwbHkocCkuc3VidHJhY3Qobi5tdWx0aXBseShpKSkuc3VidHJhY3QoZy5tdWx0aXBseShwKSkubXVsdGlwbHkobC56KS5hZGQocC5tdWx0aXBseShpKSkubW9kKHRoaXMuY3VydmUucSk7dmFyIGY9aS5tdWx0aXBseSh0aGlzLnopLm11bHRpcGx5KGwueikubW9kKHRoaXMuY3VydmUucSk7cmV0dXJuIG5ldyBFQ1BvaW50RnAodGhpcy5jdXJ2ZSx0aGlzLmN1cnZlLmZyb21CaWdJbnRlZ2VyKGEpLHRoaXMuY3VydmUuZnJvbUJpZ0ludGVnZXIoaCksZil9ZnVuY3Rpb24gcG9pbnRGcFR3aWNlKCl7aWYodGhpcy5pc0luZmluaXR5KCkpe3JldHVybiB0aGlzfWlmKHRoaXMueS50b0JpZ0ludGVnZXIoKS5zaWdudW0oKT09MCl7cmV0dXJuIHRoaXMuY3VydmUuZ2V0SW5maW5pdHkoKX12YXIgZz1uZXcgQmlnSW50ZWdlcihcIjNcIik7dmFyIGM9dGhpcy54LnRvQmlnSW50ZWdlcigpO3ZhciBoPXRoaXMueS50b0JpZ0ludGVnZXIoKTt2YXIgZT1oLm11bHRpcGx5KHRoaXMueik7dmFyIGo9ZS5tdWx0aXBseShoKS5tb2QodGhpcy5jdXJ2ZS5xKTt2YXIgaT10aGlzLmN1cnZlLmEudG9CaWdJbnRlZ2VyKCk7dmFyIGs9Yy5zcXVhcmUoKS5tdWx0aXBseShnKTtpZighQmlnSW50ZWdlci5aRVJPLmVxdWFscyhpKSl7az1rLmFkZCh0aGlzLnouc3F1YXJlKCkubXVsdGlwbHkoaSkpfWs9ay5tb2QodGhpcy5jdXJ2ZS5xKTt2YXIgYj1rLnNxdWFyZSgpLnN1YnRyYWN0KGMuc2hpZnRMZWZ0KDMpLm11bHRpcGx5KGopKS5zaGlmdExlZnQoMSkubXVsdGlwbHkoZSkubW9kKHRoaXMuY3VydmUucSk7dmFyIGY9ay5tdWx0aXBseShnKS5tdWx0aXBseShjKS5zdWJ0cmFjdChqLnNoaWZ0TGVmdCgxKSkuc2hpZnRMZWZ0KDIpLm11bHRpcGx5KGopLnN1YnRyYWN0KGsuc3F1YXJlKCkubXVsdGlwbHkoaykpLm1vZCh0aGlzLmN1cnZlLnEpO3ZhciBkPWUuc3F1YXJlKCkubXVsdGlwbHkoZSkuc2hpZnRMZWZ0KDMpLm1vZCh0aGlzLmN1cnZlLnEpO3JldHVybiBuZXcgRUNQb2ludEZwKHRoaXMuY3VydmUsdGhpcy5jdXJ2ZS5mcm9tQmlnSW50ZWdlcihiKSx0aGlzLmN1cnZlLmZyb21CaWdJbnRlZ2VyKGYpLGQpfWZ1bmN0aW9uIHBvaW50RnBNdWx0aXBseShiKXtpZih0aGlzLmlzSW5maW5pdHkoKSl7cmV0dXJuIHRoaXN9aWYoYi5zaWdudW0oKT09MCl7cmV0dXJuIHRoaXMuY3VydmUuZ2V0SW5maW5pdHkoKX12YXIgZz1iO3ZhciBmPWcubXVsdGlwbHkobmV3IEJpZ0ludGVnZXIoXCIzXCIpKTt2YXIgbD10aGlzLm5lZ2F0ZSgpO3ZhciBkPXRoaXM7dmFyIGM7Zm9yKGM9Zi5iaXRMZW5ndGgoKS0yO2M+MDstLWMpe2Q9ZC50d2ljZSgpO3ZhciBhPWYudGVzdEJpdChjKTt2YXIgaj1nLnRlc3RCaXQoYyk7aWYoYSE9ail7ZD1kLmFkZChhP3RoaXM6bCl9fXJldHVybiBkfWZ1bmN0aW9uIHBvaW50RnBNdWx0aXBseVR3byhjLGEsYil7dmFyIGQ7aWYoYy5iaXRMZW5ndGgoKT5iLmJpdExlbmd0aCgpKXtkPWMuYml0TGVuZ3RoKCktMX1lbHNle2Q9Yi5iaXRMZW5ndGgoKS0xfXZhciBmPXRoaXMuY3VydmUuZ2V0SW5maW5pdHkoKTt2YXIgZT10aGlzLmFkZChhKTt3aGlsZShkPj0wKXtmPWYudHdpY2UoKTtpZihjLnRlc3RCaXQoZCkpe2lmKGIudGVzdEJpdChkKSl7Zj1mLmFkZChlKX1lbHNle2Y9Zi5hZGQodGhpcyl9fWVsc2V7aWYoYi50ZXN0Qml0KGQpKXtmPWYuYWRkKGEpfX0tLWR9cmV0dXJuIGZ9RUNQb2ludEZwLnByb3RvdHlwZS5nZXRYPXBvaW50RnBHZXRYO0VDUG9pbnRGcC5wcm90b3R5cGUuZ2V0WT1wb2ludEZwR2V0WTtFQ1BvaW50RnAucHJvdG90eXBlLmVxdWFscz1wb2ludEZwRXF1YWxzO0VDUG9pbnRGcC5wcm90b3R5cGUuaXNJbmZpbml0eT1wb2ludEZwSXNJbmZpbml0eTtFQ1BvaW50RnAucHJvdG90eXBlLm5lZ2F0ZT1wb2ludEZwTmVnYXRlO0VDUG9pbnRGcC5wcm90b3R5cGUuYWRkPXBvaW50RnBBZGQ7RUNQb2ludEZwLnByb3RvdHlwZS50d2ljZT1wb2ludEZwVHdpY2U7RUNQb2ludEZwLnByb3RvdHlwZS5tdWx0aXBseT1wb2ludEZwTXVsdGlwbHk7RUNQb2ludEZwLnByb3RvdHlwZS5tdWx0aXBseVR3bz1wb2ludEZwTXVsdGlwbHlUd287ZnVuY3Rpb24gRUNDdXJ2ZUZwKGUsZCxjKXt0aGlzLnE9ZTt0aGlzLmE9dGhpcy5mcm9tQmlnSW50ZWdlcihkKTt0aGlzLmI9dGhpcy5mcm9tQmlnSW50ZWdlcihjKTt0aGlzLmluZmluaXR5PW5ldyBFQ1BvaW50RnAodGhpcyxudWxsLG51bGwpfWZ1bmN0aW9uIGN1cnZlRnBHZXRRKCl7cmV0dXJuIHRoaXMucX1mdW5jdGlvbiBjdXJ2ZUZwR2V0QSgpe3JldHVybiB0aGlzLmF9ZnVuY3Rpb24gY3VydmVGcEdldEIoKXtyZXR1cm4gdGhpcy5ifWZ1bmN0aW9uIGN1cnZlRnBFcXVhbHMoYSl7aWYoYT09dGhpcyl7cmV0dXJuIHRydWV9cmV0dXJuKHRoaXMucS5lcXVhbHMoYS5xKSYmdGhpcy5hLmVxdWFscyhhLmEpJiZ0aGlzLmIuZXF1YWxzKGEuYikpfWZ1bmN0aW9uIGN1cnZlRnBHZXRJbmZpbml0eSgpe3JldHVybiB0aGlzLmluZmluaXR5fWZ1bmN0aW9uIGN1cnZlRnBGcm9tQmlnSW50ZWdlcihhKXtyZXR1cm4gbmV3IEVDRmllbGRFbGVtZW50RnAodGhpcy5xLGEpfWZ1bmN0aW9uIGN1cnZlRnBEZWNvZGVQb2ludEhleChkKXtzd2l0Y2gocGFyc2VJbnQoZC5zdWJzdHIoMCwyKSwxNikpe2Nhc2UgMDpyZXR1cm4gdGhpcy5pbmZpbml0eTtjYXNlIDI6Y2FzZSAzOnJldHVybiBudWxsO2Nhc2UgNDpjYXNlIDY6Y2FzZSA3OnZhciBhPShkLmxlbmd0aC0yKS8yO3ZhciBjPWQuc3Vic3RyKDIsYSk7dmFyIGI9ZC5zdWJzdHIoYSsyLGEpO3JldHVybiBuZXcgRUNQb2ludEZwKHRoaXMsdGhpcy5mcm9tQmlnSW50ZWdlcihuZXcgQmlnSW50ZWdlcihjLDE2KSksdGhpcy5mcm9tQmlnSW50ZWdlcihuZXcgQmlnSW50ZWdlcihiLDE2KSkpO2RlZmF1bHQ6cmV0dXJuIG51bGx9fUVDQ3VydmVGcC5wcm90b3R5cGUuZ2V0UT1jdXJ2ZUZwR2V0UTtFQ0N1cnZlRnAucHJvdG90eXBlLmdldEE9Y3VydmVGcEdldEE7RUNDdXJ2ZUZwLnByb3RvdHlwZS5nZXRCPWN1cnZlRnBHZXRCO0VDQ3VydmVGcC5wcm90b3R5cGUuZXF1YWxzPWN1cnZlRnBFcXVhbHM7RUNDdXJ2ZUZwLnByb3RvdHlwZS5nZXRJbmZpbml0eT1jdXJ2ZUZwR2V0SW5maW5pdHk7RUNDdXJ2ZUZwLnByb3RvdHlwZS5mcm9tQmlnSW50ZWdlcj1jdXJ2ZUZwRnJvbUJpZ0ludGVnZXI7RUNDdXJ2ZUZwLnByb3RvdHlwZS5kZWNvZGVQb2ludEhleD1jdXJ2ZUZwRGVjb2RlUG9pbnRIZXg7XG4vKiEgKGMpIFN0ZWZhbiBUaG9tYXMgfCBodHRwczovL2dpdGh1Yi5jb20vYml0Y29pbmpzL2JpdGNvaW5qcy1saWJcbiAqL1xuRUNGaWVsZEVsZW1lbnRGcC5wcm90b3R5cGUuZ2V0Qnl0ZUxlbmd0aD1mdW5jdGlvbigpe3JldHVybiBNYXRoLmZsb29yKCh0aGlzLnRvQmlnSW50ZWdlcigpLmJpdExlbmd0aCgpKzcpLzgpfTtFQ1BvaW50RnAucHJvdG90eXBlLmdldEVuY29kZWQ9ZnVuY3Rpb24oYyl7dmFyIGQ9ZnVuY3Rpb24oaCxmKXt2YXIgZz1oLnRvQnl0ZUFycmF5VW5zaWduZWQoKTtpZihmPGcubGVuZ3RoKXtnPWcuc2xpY2UoZy5sZW5ndGgtZil9ZWxzZXt3aGlsZShmPmcubGVuZ3RoKXtnLnVuc2hpZnQoMCl9fXJldHVybiBnfTt2YXIgYT10aGlzLmdldFgoKS50b0JpZ0ludGVnZXIoKTt2YXIgZT10aGlzLmdldFkoKS50b0JpZ0ludGVnZXIoKTt2YXIgYj1kKGEsMzIpO2lmKGMpe2lmKGUuaXNFdmVuKCkpe2IudW5zaGlmdCgyKX1lbHNle2IudW5zaGlmdCgzKX19ZWxzZXtiLnVuc2hpZnQoNCk7Yj1iLmNvbmNhdChkKGUsMzIpKX1yZXR1cm4gYn07RUNQb2ludEZwLmRlY29kZUZyb209ZnVuY3Rpb24oZyxjKXt2YXIgZj1jWzBdO3ZhciBlPWMubGVuZ3RoLTE7dmFyIGQ9Yy5zbGljZSgxLDErZS8yKTt2YXIgYj1jLnNsaWNlKDErZS8yLDErZSk7ZC51bnNoaWZ0KDApO2IudW5zaGlmdCgwKTt2YXIgYT1uZXcgQmlnSW50ZWdlcihkKTt2YXIgaD1uZXcgQmlnSW50ZWdlcihiKTtyZXR1cm4gbmV3IEVDUG9pbnRGcChnLGcuZnJvbUJpZ0ludGVnZXIoYSksZy5mcm9tQmlnSW50ZWdlcihoKSl9O0VDUG9pbnRGcC5kZWNvZGVGcm9tSGV4PWZ1bmN0aW9uKGcsYyl7dmFyIGY9Yy5zdWJzdHIoMCwyKTt2YXIgZT1jLmxlbmd0aC0yO3ZhciBkPWMuc3Vic3RyKDIsZS8yKTt2YXIgYj1jLnN1YnN0cigyK2UvMixlLzIpO3ZhciBhPW5ldyBCaWdJbnRlZ2VyKGQsMTYpO3ZhciBoPW5ldyBCaWdJbnRlZ2VyKGIsMTYpO3JldHVybiBuZXcgRUNQb2ludEZwKGcsZy5mcm9tQmlnSW50ZWdlcihhKSxnLmZyb21CaWdJbnRlZ2VyKGgpKX07RUNQb2ludEZwLnByb3RvdHlwZS5hZGQyRD1mdW5jdGlvbihjKXtpZih0aGlzLmlzSW5maW5pdHkoKSl7cmV0dXJuIGN9aWYoYy5pc0luZmluaXR5KCkpe3JldHVybiB0aGlzfWlmKHRoaXMueC5lcXVhbHMoYy54KSl7aWYodGhpcy55LmVxdWFscyhjLnkpKXtyZXR1cm4gdGhpcy50d2ljZSgpfXJldHVybiB0aGlzLmN1cnZlLmdldEluZmluaXR5KCl9dmFyIGc9Yy54LnN1YnRyYWN0KHRoaXMueCk7dmFyIGU9Yy55LnN1YnRyYWN0KHRoaXMueSk7dmFyIGE9ZS5kaXZpZGUoZyk7dmFyIGQ9YS5zcXVhcmUoKS5zdWJ0cmFjdCh0aGlzLngpLnN1YnRyYWN0KGMueCk7dmFyIGY9YS5tdWx0aXBseSh0aGlzLnguc3VidHJhY3QoZCkpLnN1YnRyYWN0KHRoaXMueSk7cmV0dXJuIG5ldyBFQ1BvaW50RnAodGhpcy5jdXJ2ZSxkLGYpfTtFQ1BvaW50RnAucHJvdG90eXBlLnR3aWNlMkQ9ZnVuY3Rpb24oKXtpZih0aGlzLmlzSW5maW5pdHkoKSl7cmV0dXJuIHRoaXN9aWYodGhpcy55LnRvQmlnSW50ZWdlcigpLnNpZ251bSgpPT0wKXtyZXR1cm4gdGhpcy5jdXJ2ZS5nZXRJbmZpbml0eSgpfXZhciBiPXRoaXMuY3VydmUuZnJvbUJpZ0ludGVnZXIoQmlnSW50ZWdlci52YWx1ZU9mKDIpKTt2YXIgZT10aGlzLmN1cnZlLmZyb21CaWdJbnRlZ2VyKEJpZ0ludGVnZXIudmFsdWVPZigzKSk7dmFyIGE9dGhpcy54LnNxdWFyZSgpLm11bHRpcGx5KGUpLmFkZCh0aGlzLmN1cnZlLmEpLmRpdmlkZSh0aGlzLnkubXVsdGlwbHkoYikpO3ZhciBjPWEuc3F1YXJlKCkuc3VidHJhY3QodGhpcy54Lm11bHRpcGx5KGIpKTt2YXIgZD1hLm11bHRpcGx5KHRoaXMueC5zdWJ0cmFjdChjKSkuc3VidHJhY3QodGhpcy55KTtyZXR1cm4gbmV3IEVDUG9pbnRGcCh0aGlzLmN1cnZlLGMsZCl9O0VDUG9pbnRGcC5wcm90b3R5cGUubXVsdGlwbHkyRD1mdW5jdGlvbihiKXtpZih0aGlzLmlzSW5maW5pdHkoKSl7cmV0dXJuIHRoaXN9aWYoYi5zaWdudW0oKT09MCl7cmV0dXJuIHRoaXMuY3VydmUuZ2V0SW5maW5pdHkoKX12YXIgZz1iO3ZhciBmPWcubXVsdGlwbHkobmV3IEJpZ0ludGVnZXIoXCIzXCIpKTt2YXIgbD10aGlzLm5lZ2F0ZSgpO3ZhciBkPXRoaXM7dmFyIGM7Zm9yKGM9Zi5iaXRMZW5ndGgoKS0yO2M+MDstLWMpe2Q9ZC50d2ljZSgpO3ZhciBhPWYudGVzdEJpdChjKTt2YXIgaj1nLnRlc3RCaXQoYyk7aWYoYSE9ail7ZD1kLmFkZDJEKGE/dGhpczpsKX19cmV0dXJuIGR9O0VDUG9pbnRGcC5wcm90b3R5cGUuaXNPbkN1cnZlPWZ1bmN0aW9uKCl7dmFyIGQ9dGhpcy5nZXRYKCkudG9CaWdJbnRlZ2VyKCk7dmFyIGk9dGhpcy5nZXRZKCkudG9CaWdJbnRlZ2VyKCk7dmFyIGY9dGhpcy5jdXJ2ZS5nZXRBKCkudG9CaWdJbnRlZ2VyKCk7dmFyIGM9dGhpcy5jdXJ2ZS5nZXRCKCkudG9CaWdJbnRlZ2VyKCk7dmFyIGg9dGhpcy5jdXJ2ZS5nZXRRKCk7dmFyIGU9aS5tdWx0aXBseShpKS5tb2QoaCk7dmFyIGc9ZC5tdWx0aXBseShkKS5tdWx0aXBseShkKS5hZGQoZi5tdWx0aXBseShkKSkuYWRkKGMpLm1vZChoKTtyZXR1cm4gZS5lcXVhbHMoZyl9O0VDUG9pbnRGcC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm5cIihcIit0aGlzLmdldFgoKS50b0JpZ0ludGVnZXIoKS50b1N0cmluZygpK1wiLFwiK3RoaXMuZ2V0WSgpLnRvQmlnSW50ZWdlcigpLnRvU3RyaW5nKCkrXCIpXCJ9O0VDUG9pbnRGcC5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24oKXt2YXIgYz10aGlzLmN1cnZlLmdldFEoKTtpZih0aGlzLmlzSW5maW5pdHkoKSl7dGhyb3cgbmV3IEVycm9yKFwiUG9pbnQgaXMgYXQgaW5maW5pdHkuXCIpfXZhciBhPXRoaXMuZ2V0WCgpLnRvQmlnSW50ZWdlcigpO3ZhciBiPXRoaXMuZ2V0WSgpLnRvQmlnSW50ZWdlcigpO2lmKGEuY29tcGFyZVRvKEJpZ0ludGVnZXIuT05FKTwwfHxhLmNvbXBhcmVUbyhjLnN1YnRyYWN0KEJpZ0ludGVnZXIuT05FKSk+MCl7dGhyb3cgbmV3IEVycm9yKFwieCBjb29yZGluYXRlIG91dCBvZiBib3VuZHNcIil9aWYoYi5jb21wYXJlVG8oQmlnSW50ZWdlci5PTkUpPDB8fGIuY29tcGFyZVRvKGMuc3VidHJhY3QoQmlnSW50ZWdlci5PTkUpKT4wKXt0aHJvdyBuZXcgRXJyb3IoXCJ5IGNvb3JkaW5hdGUgb3V0IG9mIGJvdW5kc1wiKX1pZighdGhpcy5pc09uQ3VydmUoKSl7dGhyb3cgbmV3IEVycm9yKFwiUG9pbnQgaXMgbm90IG9uIHRoZSBjdXJ2ZS5cIil9aWYodGhpcy5tdWx0aXBseShjKS5pc0luZmluaXR5KCkpe3Rocm93IG5ldyBFcnJvcihcIlBvaW50IGlzIG5vdCBhIHNjYWxhciBtdWx0aXBsZSBvZiBHLlwiKX1yZXR1cm4gdHJ1ZX07XG4vKiEgTWlrZSBTYW11ZWwgKGMpIDIwMDkgfCBjb2RlLmdvb2dsZS5jb20vcC9qc29uLXNhbnMtZXZhbFxuICovXG52YXIganNvblBhcnNlPShmdW5jdGlvbigpe3ZhciBlPVwiKD86LT9cXFxcYig/OjB8WzEtOV1bMC05XSopKD86XFxcXC5bMC05XSspPyg/OltlRV1bKy1dP1swLTldKyk/XFxcXGIpXCI7dmFyIGo9Jyg/OlteXFxcXDAtXFxcXHgwOFxcXFx4MGEtXFxcXHgxZlwiXFxcXFxcXFxdfFxcXFxcXFxcKD86W1wiL1xcXFxcXFxcYmZucnRdfHVbMC05QS1GYS1mXXs0fSkpJzt2YXIgaT0nKD86XCInK2orJypcIiknO3ZhciBkPW5ldyBSZWdFeHAoXCIoPzpmYWxzZXx0cnVlfG51bGx8W1xcXFx7XFxcXH1cXFxcW1xcXFxdXXxcIitlK1wifFwiK2krXCIpXCIsXCJnXCIpO3ZhciBrPW5ldyBSZWdFeHAoXCJcXFxcXFxcXCg/OihbXnVdKXx1KC57NH0pKVwiLFwiZ1wiKTt2YXIgZz17J1wiJzonXCInLFwiL1wiOlwiL1wiLFwiXFxcXFwiOlwiXFxcXFwiLGI6XCJcXGJcIixmOlwiXFxmXCIsbjpcIlxcblwiLHI6XCJcXHJcIix0OlwiXFx0XCJ9O2Z1bmN0aW9uIGgobCxtLG4pe3JldHVybiBtP2dbbV06U3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludChuLDE2KSl9dmFyIGM9bmV3IFN0cmluZyhcIlwiKTt2YXIgYT1cIlxcXFxcIjt2YXIgZj17XCJ7XCI6T2JqZWN0LFwiW1wiOkFycmF5fTt2YXIgYj1PYmplY3QuaGFzT3duUHJvcGVydHk7cmV0dXJuIGZ1bmN0aW9uKHUscSl7dmFyIHA9dS5tYXRjaChkKTt2YXIgeDt2YXIgdj1wWzBdO3ZhciBsPWZhbHNlO2lmKFwie1wiPT09dil7eD17fX1lbHNle2lmKFwiW1wiPT09dil7eD1bXX1lbHNle3g9W107bD10cnVlfX12YXIgdDt2YXIgcj1beF07Zm9yKHZhciBvPTEtbCxtPXAubGVuZ3RoO288bTsrK28pe3Y9cFtvXTt2YXIgdztzd2l0Y2godi5jaGFyQ29kZUF0KDApKXtkZWZhdWx0Onc9clswXTt3W3R8fHcubGVuZ3RoXT0rKHYpO3Q9dm9pZCAwO2JyZWFrO2Nhc2UgMzQ6dj12LnN1YnN0cmluZygxLHYubGVuZ3RoLTEpO2lmKHYuaW5kZXhPZihhKSE9PS0xKXt2PXYucmVwbGFjZShrLGgpfXc9clswXTtpZighdCl7aWYodyBpbnN0YW5jZW9mIEFycmF5KXt0PXcubGVuZ3RofWVsc2V7dD12fHxjO2JyZWFrfX13W3RdPXY7dD12b2lkIDA7YnJlYWs7Y2FzZSA5MTp3PXJbMF07ci51bnNoaWZ0KHdbdHx8dy5sZW5ndGhdPVtdKTt0PXZvaWQgMDticmVhaztjYXNlIDkzOnIuc2hpZnQoKTticmVhaztjYXNlIDEwMjp3PXJbMF07d1t0fHx3Lmxlbmd0aF09ZmFsc2U7dD12b2lkIDA7YnJlYWs7Y2FzZSAxMTA6dz1yWzBdO3dbdHx8dy5sZW5ndGhdPW51bGw7dD12b2lkIDA7YnJlYWs7Y2FzZSAxMTY6dz1yWzBdO3dbdHx8dy5sZW5ndGhdPXRydWU7dD12b2lkIDA7YnJlYWs7Y2FzZSAxMjM6dz1yWzBdO3IudW5zaGlmdCh3W3R8fHcubGVuZ3RoXT17fSk7dD12b2lkIDA7YnJlYWs7Y2FzZSAxMjU6ci5zaGlmdCgpO2JyZWFrfX1pZihsKXtpZihyLmxlbmd0aCE9PTEpe3Rocm93IG5ldyBFcnJvcigpfXg9eFswXX1lbHNle2lmKHIubGVuZ3RoKXt0aHJvdyBuZXcgRXJyb3IoKX19aWYocSl7dmFyIHM9ZnVuY3Rpb24oQyxCKXt2YXIgRD1DW0JdO2lmKEQmJnR5cGVvZiBEPT09XCJvYmplY3RcIil7dmFyIG49bnVsbDtmb3IodmFyIHogaW4gRCl7aWYoYi5jYWxsKEQseikmJkQhPT1DKXt2YXIgeT1zKEQseik7aWYoeSE9PXZvaWQgMCl7RFt6XT15fWVsc2V7aWYoIW4pe249W119bi5wdXNoKHopfX19aWYobil7Zm9yKHZhciBBPW4ubGVuZ3RoOy0tQT49MDspe2RlbGV0ZSBEW25bQV1dfX19cmV0dXJuIHEuY2FsbChDLEIsRCl9O3g9cyh7XCJcIjp4fSxcIlwiKX1yZXR1cm4geH19KSgpO1xuaWYodHlwZW9mIEtKVVI9PVwidW5kZWZpbmVkXCJ8fCFLSlVSKXtLSlVSPXt9fWlmKHR5cGVvZiBLSlVSLmFzbjE9PVwidW5kZWZpbmVkXCJ8fCFLSlVSLmFzbjEpe0tKVVIuYXNuMT17fX1LSlVSLmFzbjEuQVNOMVV0aWw9bmV3IGZ1bmN0aW9uKCl7dGhpcy5pbnRlZ2VyVG9CeXRlSGV4PWZ1bmN0aW9uKGEpe3ZhciBiPWEudG9TdHJpbmcoMTYpO2lmKChiLmxlbmd0aCUyKT09MSl7Yj1cIjBcIitifXJldHVybiBifTt0aGlzLmJpZ0ludFRvTWluVHdvc0NvbXBsZW1lbnRzSGV4PWZ1bmN0aW9uKGope3ZhciBmPWoudG9TdHJpbmcoMTYpO2lmKGYuc3Vic3RyKDAsMSkhPVwiLVwiKXtpZihmLmxlbmd0aCUyPT0xKXtmPVwiMFwiK2Z9ZWxzZXtpZighZi5tYXRjaCgvXlswLTddLykpe2Y9XCIwMFwiK2Z9fX1lbHNle3ZhciBhPWYuc3Vic3RyKDEpO3ZhciBlPWEubGVuZ3RoO2lmKGUlMj09MSl7ZSs9MX1lbHNle2lmKCFmLm1hdGNoKC9eWzAtN10vKSl7ZSs9Mn19dmFyIGc9XCJcIjtmb3IodmFyIGQ9MDtkPGU7ZCsrKXtnKz1cImZcIn12YXIgYz1uZXcgQmlnSW50ZWdlcihnLDE2KTt2YXIgYj1jLnhvcihqKS5hZGQoQmlnSW50ZWdlci5PTkUpO2Y9Yi50b1N0cmluZygxNikucmVwbGFjZSgvXi0vLFwiXCIpfXJldHVybiBmfTt0aGlzLmdldFBFTVN0cmluZ0Zyb21IZXg9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gaGV4dG9wZW0oYSxiKX07dGhpcy5uZXdPYmplY3Q9ZnVuY3Rpb24oayl7dmFyIEQ9S0pVUixuPUQuYXNuMSx6PW4uREVSQm9vbGVhbixlPW4uREVSSW50ZWdlcixzPW4uREVSQml0U3RyaW5nLGg9bi5ERVJPY3RldFN0cmluZyx2PW4uREVSTnVsbCx3PW4uREVST2JqZWN0SWRlbnRpZmllcixsPW4uREVSRW51bWVyYXRlZCxnPW4uREVSVVRGOFN0cmluZyxmPW4uREVSTnVtZXJpY1N0cmluZyx5PW4uREVSUHJpbnRhYmxlU3RyaW5nLHU9bi5ERVJUZWxldGV4U3RyaW5nLHA9bi5ERVJJQTVTdHJpbmcsQz1uLkRFUlVUQ1RpbWUsaj1uLkRFUkdlbmVyYWxpemVkVGltZSxtPW4uREVSU2VxdWVuY2UsYz1uLkRFUlNldCxyPW4uREVSVGFnZ2VkT2JqZWN0LG89bi5BU04xVXRpbC5uZXdPYmplY3Q7dmFyIHQ9T2JqZWN0LmtleXMoayk7aWYodC5sZW5ndGghPTEpe3Rocm93XCJrZXkgb2YgcGFyYW0gc2hhbGwgYmUgb25seSBvbmUuXCJ9dmFyIEY9dFswXTtpZihcIjpib29sOmludDpiaXRzdHI6b2N0c3RyOm51bGw6b2lkOmVudW06dXRmOHN0cjpudW1zdHI6cHJuc3RyOnRlbHN0cjppYTVzdHI6dXRjdGltZTpnZW50aW1lOnNlcTpzZXQ6dGFnOlwiLmluZGV4T2YoXCI6XCIrRitcIjpcIik9PS0xKXt0aHJvd1widW5kZWZpbmVkIGtleTogXCIrRn1pZihGPT1cImJvb2xcIil7cmV0dXJuIG5ldyB6KGtbRl0pfWlmKEY9PVwiaW50XCIpe3JldHVybiBuZXcgZShrW0ZdKX1pZihGPT1cImJpdHN0clwiKXtyZXR1cm4gbmV3IHMoa1tGXSl9aWYoRj09XCJvY3RzdHJcIil7cmV0dXJuIG5ldyBoKGtbRl0pfWlmKEY9PVwibnVsbFwiKXtyZXR1cm4gbmV3IHYoa1tGXSl9aWYoRj09XCJvaWRcIil7cmV0dXJuIG5ldyB3KGtbRl0pfWlmKEY9PVwiZW51bVwiKXtyZXR1cm4gbmV3IGwoa1tGXSl9aWYoRj09XCJ1dGY4c3RyXCIpe3JldHVybiBuZXcgZyhrW0ZdKX1pZihGPT1cIm51bXN0clwiKXtyZXR1cm4gbmV3IGYoa1tGXSl9aWYoRj09XCJwcm5zdHJcIil7cmV0dXJuIG5ldyB5KGtbRl0pfWlmKEY9PVwidGVsc3RyXCIpe3JldHVybiBuZXcgdShrW0ZdKX1pZihGPT1cImlhNXN0clwiKXtyZXR1cm4gbmV3IHAoa1tGXSl9aWYoRj09XCJ1dGN0aW1lXCIpe3JldHVybiBuZXcgQyhrW0ZdKX1pZihGPT1cImdlbnRpbWVcIil7cmV0dXJuIG5ldyBqKGtbRl0pfWlmKEY9PVwic2VxXCIpe3ZhciBkPWtbRl07dmFyIEU9W107Zm9yKHZhciB4PTA7eDxkLmxlbmd0aDt4Kyspe3ZhciBCPW8oZFt4XSk7RS5wdXNoKEIpfXJldHVybiBuZXcgbSh7YXJyYXk6RX0pfWlmKEY9PVwic2V0XCIpe3ZhciBkPWtbRl07dmFyIEU9W107Zm9yKHZhciB4PTA7eDxkLmxlbmd0aDt4Kyspe3ZhciBCPW8oZFt4XSk7RS5wdXNoKEIpfXJldHVybiBuZXcgYyh7YXJyYXk6RX0pfWlmKEY9PVwidGFnXCIpe3ZhciBBPWtbRl07aWYoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKEEpPT09XCJbb2JqZWN0IEFycmF5XVwiJiZBLmxlbmd0aD09Myl7dmFyIHE9byhBWzJdKTtyZXR1cm4gbmV3IHIoe3RhZzpBWzBdLGV4cGxpY2l0OkFbMV0sb2JqOnF9KX1lbHNle3ZhciBiPXt9O2lmKEEuZXhwbGljaXQhPT11bmRlZmluZWQpe2IuZXhwbGljaXQ9QS5leHBsaWNpdH1pZihBLnRhZyE9PXVuZGVmaW5lZCl7Yi50YWc9QS50YWd9aWYoQS5vYmo9PT11bmRlZmluZWQpe3Rocm93XCJvYmogc2hhbGwgYmUgc3BlY2lmaWVkIGZvciAndGFnJy5cIn1iLm9iaj1vKEEub2JqKTtyZXR1cm4gbmV3IHIoYil9fX07dGhpcy5qc29uVG9BU04xSEVYPWZ1bmN0aW9uKGIpe3ZhciBhPXRoaXMubmV3T2JqZWN0KGIpO3JldHVybiBhLmdldEVuY29kZWRIZXgoKX19O0tKVVIuYXNuMS5BU04xVXRpbC5vaWRIZXhUb0ludD1mdW5jdGlvbihhKXt2YXIgaj1cIlwiO3ZhciBrPXBhcnNlSW50KGEuc3Vic3RyKDAsMiksMTYpO3ZhciBkPU1hdGguZmxvb3Ioay80MCk7dmFyIGM9ayU0MDt2YXIgaj1kK1wiLlwiK2M7dmFyIGU9XCJcIjtmb3IodmFyIGY9MjtmPGEubGVuZ3RoO2YrPTIpe3ZhciBnPXBhcnNlSW50KGEuc3Vic3RyKGYsMiksMTYpO3ZhciBoPShcIjAwMDAwMDAwXCIrZy50b1N0cmluZygyKSkuc2xpY2UoLTgpO2U9ZStoLnN1YnN0cigxLDcpO2lmKGguc3Vic3RyKDAsMSk9PVwiMFwiKXt2YXIgYj1uZXcgQmlnSW50ZWdlcihlLDIpO2o9aitcIi5cIitiLnRvU3RyaW5nKDEwKTtlPVwiXCJ9fXJldHVybiBqfTtLSlVSLmFzbjEuQVNOMVV0aWwub2lkSW50VG9IZXg9ZnVuY3Rpb24oZil7dmFyIGU9ZnVuY3Rpb24oYSl7dmFyIGs9YS50b1N0cmluZygxNik7aWYoay5sZW5ndGg9PTEpe2s9XCIwXCIra31yZXR1cm4ga307dmFyIGQ9ZnVuY3Rpb24obyl7dmFyIG49XCJcIjt2YXIgaz1uZXcgQmlnSW50ZWdlcihvLDEwKTt2YXIgYT1rLnRvU3RyaW5nKDIpO3ZhciBsPTctYS5sZW5ndGglNztpZihsPT03KXtsPTB9dmFyIHE9XCJcIjtmb3IodmFyIG09MDttPGw7bSsrKXtxKz1cIjBcIn1hPXErYTtmb3IodmFyIG09MDttPGEubGVuZ3RoLTE7bSs9Nyl7dmFyIHA9YS5zdWJzdHIobSw3KTtpZihtIT1hLmxlbmd0aC03KXtwPVwiMVwiK3B9bis9ZShwYXJzZUludChwLDIpKX1yZXR1cm4gbn07aWYoIWYubWF0Y2goL15bMC05Ll0rJC8pKXt0aHJvd1wibWFsZm9ybWVkIG9pZCBzdHJpbmc6IFwiK2Z9dmFyIGc9XCJcIjt2YXIgYj1mLnNwbGl0KFwiLlwiKTt2YXIgaj1wYXJzZUludChiWzBdKSo0MCtwYXJzZUludChiWzFdKTtnKz1lKGopO2Iuc3BsaWNlKDAsMik7Zm9yKHZhciBjPTA7YzxiLmxlbmd0aDtjKyspe2crPWQoYltjXSl9cmV0dXJuIGd9O0tKVVIuYXNuMS5BU04xT2JqZWN0PWZ1bmN0aW9uKCl7dmFyIGM9dHJ1ZTt2YXIgYj1udWxsO3ZhciBkPVwiMDBcIjt2YXIgZT1cIjAwXCI7dmFyIGE9XCJcIjt0aGlzLmdldExlbmd0aEhleEZyb21WYWx1ZT1mdW5jdGlvbigpe2lmKHR5cGVvZiB0aGlzLmhWPT1cInVuZGVmaW5lZFwifHx0aGlzLmhWPT1udWxsKXt0aHJvd1widGhpcy5oViBpcyBudWxsIG9yIHVuZGVmaW5lZC5cIn1pZih0aGlzLmhWLmxlbmd0aCUyPT0xKXt0aHJvd1widmFsdWUgaGV4IG11c3QgYmUgZXZlbiBsZW5ndGg6IG49XCIrYS5sZW5ndGgrXCIsdj1cIit0aGlzLmhWfXZhciBpPXRoaXMuaFYubGVuZ3RoLzI7dmFyIGg9aS50b1N0cmluZygxNik7aWYoaC5sZW5ndGglMj09MSl7aD1cIjBcIitofWlmKGk8MTI4KXtyZXR1cm4gaH1lbHNle3ZhciBnPWgubGVuZ3RoLzI7aWYoZz4xNSl7dGhyb3dcIkFTTi4xIGxlbmd0aCB0b28gbG9uZyB0byByZXByZXNlbnQgYnkgOHg6IG4gPSBcIitpLnRvU3RyaW5nKDE2KX12YXIgZj0xMjgrZztyZXR1cm4gZi50b1N0cmluZygxNikraH19O3RoaXMuZ2V0RW5jb2RlZEhleD1mdW5jdGlvbigpe2lmKHRoaXMuaFRMVj09bnVsbHx8dGhpcy5pc01vZGlmaWVkKXt0aGlzLmhWPXRoaXMuZ2V0RnJlc2hWYWx1ZUhleCgpO3RoaXMuaEw9dGhpcy5nZXRMZW5ndGhIZXhGcm9tVmFsdWUoKTt0aGlzLmhUTFY9dGhpcy5oVCt0aGlzLmhMK3RoaXMuaFY7dGhpcy5pc01vZGlmaWVkPWZhbHNlfXJldHVybiB0aGlzLmhUTFZ9O3RoaXMuZ2V0VmFsdWVIZXg9ZnVuY3Rpb24oKXt0aGlzLmdldEVuY29kZWRIZXgoKTtyZXR1cm4gdGhpcy5oVn07dGhpcy5nZXRGcmVzaFZhbHVlSGV4PWZ1bmN0aW9uKCl7cmV0dXJuXCJcIn19O0tKVVIuYXNuMS5ERVJBYnN0cmFjdFN0cmluZz1mdW5jdGlvbihjKXtLSlVSLmFzbjEuREVSQWJzdHJhY3RTdHJpbmcuc3VwZXJjbGFzcy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMpO3ZhciBiPW51bGw7dmFyIGE9bnVsbDt0aGlzLmdldFN0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnN9O3RoaXMuc2V0U3RyaW5nPWZ1bmN0aW9uKGQpe3RoaXMuaFRMVj1udWxsO3RoaXMuaXNNb2RpZmllZD10cnVlO3RoaXMucz1kO3RoaXMuaFY9dXRmOHRvaGV4KHRoaXMucykudG9Mb3dlckNhc2UoKX07dGhpcy5zZXRTdHJpbmdIZXg9ZnVuY3Rpb24oZCl7dGhpcy5oVExWPW51bGw7dGhpcy5pc01vZGlmaWVkPXRydWU7dGhpcy5zPW51bGw7dGhpcy5oVj1kfTt0aGlzLmdldEZyZXNoVmFsdWVIZXg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oVn07aWYodHlwZW9mIGMhPVwidW5kZWZpbmVkXCIpe2lmKHR5cGVvZiBjPT1cInN0cmluZ1wiKXt0aGlzLnNldFN0cmluZyhjKX1lbHNle2lmKHR5cGVvZiBjLnN0ciE9XCJ1bmRlZmluZWRcIil7dGhpcy5zZXRTdHJpbmcoYy5zdHIpfWVsc2V7aWYodHlwZW9mIGMuaGV4IT1cInVuZGVmaW5lZFwiKXt0aGlzLnNldFN0cmluZ0hleChjLmhleCl9fX19fTtZQUhPTy5sYW5nLmV4dGVuZChLSlVSLmFzbjEuREVSQWJzdHJhY3RTdHJpbmcsS0pVUi5hc24xLkFTTjFPYmplY3QpO0tKVVIuYXNuMS5ERVJBYnN0cmFjdFRpbWU9ZnVuY3Rpb24oYyl7S0pVUi5hc24xLkRFUkFic3RyYWN0VGltZS5zdXBlcmNsYXNzLmNvbnN0cnVjdG9yLmNhbGwodGhpcyk7dmFyIGI9bnVsbDt2YXIgYT1udWxsO3RoaXMubG9jYWxEYXRlVG9VVEM9ZnVuY3Rpb24oZil7dXRjPWYuZ2V0VGltZSgpKyhmLmdldFRpbWV6b25lT2Zmc2V0KCkqNjAwMDApO3ZhciBlPW5ldyBEYXRlKHV0Yyk7cmV0dXJuIGV9O3RoaXMuZm9ybWF0RGF0ZT1mdW5jdGlvbihtLG8sZSl7dmFyIGc9dGhpcy56ZXJvUGFkZGluZzt2YXIgbj10aGlzLmxvY2FsRGF0ZVRvVVRDKG0pO3ZhciBwPVN0cmluZyhuLmdldEZ1bGxZZWFyKCkpO2lmKG89PVwidXRjXCIpe3A9cC5zdWJzdHIoMiwyKX12YXIgbD1nKFN0cmluZyhuLmdldE1vbnRoKCkrMSksMik7dmFyIHE9ZyhTdHJpbmcobi5nZXREYXRlKCkpLDIpO3ZhciBoPWcoU3RyaW5nKG4uZ2V0SG91cnMoKSksMik7dmFyIGk9ZyhTdHJpbmcobi5nZXRNaW51dGVzKCkpLDIpO3ZhciBqPWcoU3RyaW5nKG4uZ2V0U2Vjb25kcygpKSwyKTt2YXIgcj1wK2wrcStoK2krajtpZihlPT09dHJ1ZSl7dmFyIGY9bi5nZXRNaWxsaXNlY29uZHMoKTtpZihmIT0wKXt2YXIgaz1nKFN0cmluZyhmKSwzKTtrPWsucmVwbGFjZSgvWzBdKyQvLFwiXCIpO3I9citcIi5cIitrfX1yZXR1cm4gcitcIlpcIn07dGhpcy56ZXJvUGFkZGluZz1mdW5jdGlvbihlLGQpe2lmKGUubGVuZ3RoPj1kKXtyZXR1cm4gZX1yZXR1cm4gbmV3IEFycmF5KGQtZS5sZW5ndGgrMSkuam9pbihcIjBcIikrZX07dGhpcy5nZXRTdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zfTt0aGlzLnNldFN0cmluZz1mdW5jdGlvbihkKXt0aGlzLmhUTFY9bnVsbDt0aGlzLmlzTW9kaWZpZWQ9dHJ1ZTt0aGlzLnM9ZDt0aGlzLmhWPXN0b2hleChkKX07dGhpcy5zZXRCeURhdGVWYWx1ZT1mdW5jdGlvbihoLGosZSxkLGYsZyl7dmFyIGk9bmV3IERhdGUoRGF0ZS5VVEMoaCxqLTEsZSxkLGYsZywwKSk7dGhpcy5zZXRCeURhdGUoaSl9O3RoaXMuZ2V0RnJlc2hWYWx1ZUhleD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmhWfX07WUFIT08ubGFuZy5leHRlbmQoS0pVUi5hc24xLkRFUkFic3RyYWN0VGltZSxLSlVSLmFzbjEuQVNOMU9iamVjdCk7S0pVUi5hc24xLkRFUkFic3RyYWN0U3RydWN0dXJlZD1mdW5jdGlvbihiKXtLSlVSLmFzbjEuREVSQWJzdHJhY3RTdHJpbmcuc3VwZXJjbGFzcy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMpO3ZhciBhPW51bGw7dGhpcy5zZXRCeUFTTjFPYmplY3RBcnJheT1mdW5jdGlvbihjKXt0aGlzLmhUTFY9bnVsbDt0aGlzLmlzTW9kaWZpZWQ9dHJ1ZTt0aGlzLmFzbjFBcnJheT1jfTt0aGlzLmFwcGVuZEFTTjFPYmplY3Q9ZnVuY3Rpb24oYyl7dGhpcy5oVExWPW51bGw7dGhpcy5pc01vZGlmaWVkPXRydWU7dGhpcy5hc24xQXJyYXkucHVzaChjKX07dGhpcy5hc24xQXJyYXk9bmV3IEFycmF5KCk7aWYodHlwZW9mIGIhPVwidW5kZWZpbmVkXCIpe2lmKHR5cGVvZiBiLmFycmF5IT1cInVuZGVmaW5lZFwiKXt0aGlzLmFzbjFBcnJheT1iLmFycmF5fX19O1lBSE9PLmxhbmcuZXh0ZW5kKEtKVVIuYXNuMS5ERVJBYnN0cmFjdFN0cnVjdHVyZWQsS0pVUi5hc24xLkFTTjFPYmplY3QpO0tKVVIuYXNuMS5ERVJCb29sZWFuPWZ1bmN0aW9uKCl7S0pVUi5hc24xLkRFUkJvb2xlYW4uc3VwZXJjbGFzcy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMpO3RoaXMuaFQ9XCIwMVwiO3RoaXMuaFRMVj1cIjAxMDFmZlwifTtZQUhPTy5sYW5nLmV4dGVuZChLSlVSLmFzbjEuREVSQm9vbGVhbixLSlVSLmFzbjEuQVNOMU9iamVjdCk7S0pVUi5hc24xLkRFUkludGVnZXI9ZnVuY3Rpb24oYSl7S0pVUi5hc24xLkRFUkludGVnZXIuc3VwZXJjbGFzcy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMpO3RoaXMuaFQ9XCIwMlwiO3RoaXMuc2V0QnlCaWdJbnRlZ2VyPWZ1bmN0aW9uKGIpe3RoaXMuaFRMVj1udWxsO3RoaXMuaXNNb2RpZmllZD10cnVlO3RoaXMuaFY9S0pVUi5hc24xLkFTTjFVdGlsLmJpZ0ludFRvTWluVHdvc0NvbXBsZW1lbnRzSGV4KGIpfTt0aGlzLnNldEJ5SW50ZWdlcj1mdW5jdGlvbihjKXt2YXIgYj1uZXcgQmlnSW50ZWdlcihTdHJpbmcoYyksMTApO3RoaXMuc2V0QnlCaWdJbnRlZ2VyKGIpfTt0aGlzLnNldFZhbHVlSGV4PWZ1bmN0aW9uKGIpe3RoaXMuaFY9Yn07dGhpcy5nZXRGcmVzaFZhbHVlSGV4PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaFZ9O2lmKHR5cGVvZiBhIT1cInVuZGVmaW5lZFwiKXtpZih0eXBlb2YgYS5iaWdpbnQhPVwidW5kZWZpbmVkXCIpe3RoaXMuc2V0QnlCaWdJbnRlZ2VyKGEuYmlnaW50KX1lbHNle2lmKHR5cGVvZiBhW1wiaW50XCJdIT1cInVuZGVmaW5lZFwiKXt0aGlzLnNldEJ5SW50ZWdlcihhW1wiaW50XCJdKX1lbHNle2lmKHR5cGVvZiBhPT1cIm51bWJlclwiKXt0aGlzLnNldEJ5SW50ZWdlcihhKX1lbHNle2lmKHR5cGVvZiBhLmhleCE9XCJ1bmRlZmluZWRcIil7dGhpcy5zZXRWYWx1ZUhleChhLmhleCl9fX19fX07WUFIT08ubGFuZy5leHRlbmQoS0pVUi5hc24xLkRFUkludGVnZXIsS0pVUi5hc24xLkFTTjFPYmplY3QpO0tKVVIuYXNuMS5ERVJCaXRTdHJpbmc9ZnVuY3Rpb24oYil7aWYoYiE9PXVuZGVmaW5lZCYmdHlwZW9mIGIub2JqIT09XCJ1bmRlZmluZWRcIil7dmFyIGE9S0pVUi5hc24xLkFTTjFVdGlsLm5ld09iamVjdChiLm9iaik7Yi5oZXg9XCIwMFwiK2EuZ2V0RW5jb2RlZEhleCgpfUtKVVIuYXNuMS5ERVJCaXRTdHJpbmcuc3VwZXJjbGFzcy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMpO3RoaXMuaFQ9XCIwM1wiO3RoaXMuc2V0SGV4VmFsdWVJbmNsdWRpbmdVbnVzZWRCaXRzPWZ1bmN0aW9uKGMpe3RoaXMuaFRMVj1udWxsO3RoaXMuaXNNb2RpZmllZD10cnVlO3RoaXMuaFY9Y307dGhpcy5zZXRVbnVzZWRCaXRzQW5kSGV4VmFsdWU9ZnVuY3Rpb24oYyxlKXtpZihjPDB8fDc8Yyl7dGhyb3dcInVudXNlZCBiaXRzIHNoYWxsIGJlIGZyb20gMCB0byA3OiB1ID0gXCIrY312YXIgZD1cIjBcIitjO3RoaXMuaFRMVj1udWxsO3RoaXMuaXNNb2RpZmllZD10cnVlO3RoaXMuaFY9ZCtlfTt0aGlzLnNldEJ5QmluYXJ5U3RyaW5nPWZ1bmN0aW9uKGUpe2U9ZS5yZXBsYWNlKC8wKyQvLFwiXCIpO3ZhciBmPTgtZS5sZW5ndGglODtpZihmPT04KXtmPTB9Zm9yKHZhciBnPTA7Zzw9ZjtnKyspe2UrPVwiMFwifXZhciBqPVwiXCI7Zm9yKHZhciBnPTA7ZzxlLmxlbmd0aC0xO2crPTgpe3ZhciBkPWUuc3Vic3RyKGcsOCk7dmFyIGM9cGFyc2VJbnQoZCwyKS50b1N0cmluZygxNik7aWYoYy5sZW5ndGg9PTEpe2M9XCIwXCIrY31qKz1jfXRoaXMuaFRMVj1udWxsO3RoaXMuaXNNb2RpZmllZD10cnVlO3RoaXMuaFY9XCIwXCIrZitqfTt0aGlzLnNldEJ5Qm9vbGVhbkFycmF5PWZ1bmN0aW9uKGUpe3ZhciBkPVwiXCI7Zm9yKHZhciBjPTA7YzxlLmxlbmd0aDtjKyspe2lmKGVbY109PXRydWUpe2QrPVwiMVwifWVsc2V7ZCs9XCIwXCJ9fXRoaXMuc2V0QnlCaW5hcnlTdHJpbmcoZCl9O3RoaXMubmV3RmFsc2VBcnJheT1mdW5jdGlvbihlKXt2YXIgYz1uZXcgQXJyYXkoZSk7Zm9yKHZhciBkPTA7ZDxlO2QrKyl7Y1tkXT1mYWxzZX1yZXR1cm4gY307dGhpcy5nZXRGcmVzaFZhbHVlSGV4PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaFZ9O2lmKHR5cGVvZiBiIT1cInVuZGVmaW5lZFwiKXtpZih0eXBlb2YgYj09XCJzdHJpbmdcIiYmYi50b0xvd2VyQ2FzZSgpLm1hdGNoKC9eWzAtOWEtZl0rJC8pKXt0aGlzLnNldEhleFZhbHVlSW5jbHVkaW5nVW51c2VkQml0cyhiKX1lbHNle2lmKHR5cGVvZiBiLmhleCE9XCJ1bmRlZmluZWRcIil7dGhpcy5zZXRIZXhWYWx1ZUluY2x1ZGluZ1VudXNlZEJpdHMoYi5oZXgpfWVsc2V7aWYodHlwZW9mIGIuYmluIT1cInVuZGVmaW5lZFwiKXt0aGlzLnNldEJ5QmluYXJ5U3RyaW5nKGIuYmluKX1lbHNle2lmKHR5cGVvZiBiLmFycmF5IT1cInVuZGVmaW5lZFwiKXt0aGlzLnNldEJ5Qm9vbGVhbkFycmF5KGIuYXJyYXkpfX19fX19O1lBSE9PLmxhbmcuZXh0ZW5kKEtKVVIuYXNuMS5ERVJCaXRTdHJpbmcsS0pVUi5hc24xLkFTTjFPYmplY3QpO0tKVVIuYXNuMS5ERVJPY3RldFN0cmluZz1mdW5jdGlvbihiKXtpZihiIT09dW5kZWZpbmVkJiZ0eXBlb2YgYi5vYmohPT1cInVuZGVmaW5lZFwiKXt2YXIgYT1LSlVSLmFzbjEuQVNOMVV0aWwubmV3T2JqZWN0KGIub2JqKTtiLmhleD1hLmdldEVuY29kZWRIZXgoKX1LSlVSLmFzbjEuREVST2N0ZXRTdHJpbmcuc3VwZXJjbGFzcy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsYik7dGhpcy5oVD1cIjA0XCJ9O1lBSE9PLmxhbmcuZXh0ZW5kKEtKVVIuYXNuMS5ERVJPY3RldFN0cmluZyxLSlVSLmFzbjEuREVSQWJzdHJhY3RTdHJpbmcpO0tKVVIuYXNuMS5ERVJOdWxsPWZ1bmN0aW9uKCl7S0pVUi5hc24xLkRFUk51bGwuc3VwZXJjbGFzcy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMpO3RoaXMuaFQ9XCIwNVwiO3RoaXMuaFRMVj1cIjA1MDBcIn07WUFIT08ubGFuZy5leHRlbmQoS0pVUi5hc24xLkRFUk51bGwsS0pVUi5hc24xLkFTTjFPYmplY3QpO0tKVVIuYXNuMS5ERVJPYmplY3RJZGVudGlmaWVyPWZ1bmN0aW9uKGMpe3ZhciBiPWZ1bmN0aW9uKGQpe3ZhciBlPWQudG9TdHJpbmcoMTYpO2lmKGUubGVuZ3RoPT0xKXtlPVwiMFwiK2V9cmV0dXJuIGV9O3ZhciBhPWZ1bmN0aW9uKGspe3ZhciBqPVwiXCI7dmFyIGU9bmV3IEJpZ0ludGVnZXIoaywxMCk7dmFyIGQ9ZS50b1N0cmluZygyKTt2YXIgZj03LWQubGVuZ3RoJTc7aWYoZj09Nyl7Zj0wfXZhciBtPVwiXCI7Zm9yKHZhciBnPTA7ZzxmO2crKyl7bSs9XCIwXCJ9ZD1tK2Q7Zm9yKHZhciBnPTA7ZzxkLmxlbmd0aC0xO2crPTcpe3ZhciBsPWQuc3Vic3RyKGcsNyk7aWYoZyE9ZC5sZW5ndGgtNyl7bD1cIjFcIitsfWorPWIocGFyc2VJbnQobCwyKSl9cmV0dXJuIGp9O0tKVVIuYXNuMS5ERVJPYmplY3RJZGVudGlmaWVyLnN1cGVyY2xhc3MuY29uc3RydWN0b3IuY2FsbCh0aGlzKTt0aGlzLmhUPVwiMDZcIjt0aGlzLnNldFZhbHVlSGV4PWZ1bmN0aW9uKGQpe3RoaXMuaFRMVj1udWxsO3RoaXMuaXNNb2RpZmllZD10cnVlO3RoaXMucz1udWxsO3RoaXMuaFY9ZH07dGhpcy5zZXRWYWx1ZU9pZFN0cmluZz1mdW5jdGlvbihmKXtpZighZi5tYXRjaCgvXlswLTkuXSskLykpe3Rocm93XCJtYWxmb3JtZWQgb2lkIHN0cmluZzogXCIrZn12YXIgZz1cIlwiO3ZhciBkPWYuc3BsaXQoXCIuXCIpO3ZhciBqPXBhcnNlSW50KGRbMF0pKjQwK3BhcnNlSW50KGRbMV0pO2crPWIoaik7ZC5zcGxpY2UoMCwyKTtmb3IodmFyIGU9MDtlPGQubGVuZ3RoO2UrKyl7Zys9YShkW2VdKX10aGlzLmhUTFY9bnVsbDt0aGlzLmlzTW9kaWZpZWQ9dHJ1ZTt0aGlzLnM9bnVsbDt0aGlzLmhWPWd9O3RoaXMuc2V0VmFsdWVOYW1lPWZ1bmN0aW9uKGUpe3ZhciBkPUtKVVIuYXNuMS54NTA5Lk9JRC5uYW1lMm9pZChlKTtpZihkIT09XCJcIil7dGhpcy5zZXRWYWx1ZU9pZFN0cmluZyhkKX1lbHNle3Rocm93XCJERVJPYmplY3RJZGVudGlmaWVyIG9pZE5hbWUgdW5kZWZpbmVkOiBcIitlfX07dGhpcy5nZXRGcmVzaFZhbHVlSGV4PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaFZ9O2lmKGMhPT11bmRlZmluZWQpe2lmKHR5cGVvZiBjPT09XCJzdHJpbmdcIil7aWYoYy5tYXRjaCgvXlswLTJdLlswLTkuXSskLykpe3RoaXMuc2V0VmFsdWVPaWRTdHJpbmcoYyl9ZWxzZXt0aGlzLnNldFZhbHVlTmFtZShjKX19ZWxzZXtpZihjLm9pZCE9PXVuZGVmaW5lZCl7dGhpcy5zZXRWYWx1ZU9pZFN0cmluZyhjLm9pZCl9ZWxzZXtpZihjLmhleCE9PXVuZGVmaW5lZCl7dGhpcy5zZXRWYWx1ZUhleChjLmhleCl9ZWxzZXtpZihjLm5hbWUhPT11bmRlZmluZWQpe3RoaXMuc2V0VmFsdWVOYW1lKGMubmFtZSl9fX19fX07WUFIT08ubGFuZy5leHRlbmQoS0pVUi5hc24xLkRFUk9iamVjdElkZW50aWZpZXIsS0pVUi5hc24xLkFTTjFPYmplY3QpO0tKVVIuYXNuMS5ERVJFbnVtZXJhdGVkPWZ1bmN0aW9uKGEpe0tKVVIuYXNuMS5ERVJFbnVtZXJhdGVkLnN1cGVyY2xhc3MuY29uc3RydWN0b3IuY2FsbCh0aGlzKTt0aGlzLmhUPVwiMGFcIjt0aGlzLnNldEJ5QmlnSW50ZWdlcj1mdW5jdGlvbihiKXt0aGlzLmhUTFY9bnVsbDt0aGlzLmlzTW9kaWZpZWQ9dHJ1ZTt0aGlzLmhWPUtKVVIuYXNuMS5BU04xVXRpbC5iaWdJbnRUb01pblR3b3NDb21wbGVtZW50c0hleChiKX07dGhpcy5zZXRCeUludGVnZXI9ZnVuY3Rpb24oYyl7dmFyIGI9bmV3IEJpZ0ludGVnZXIoU3RyaW5nKGMpLDEwKTt0aGlzLnNldEJ5QmlnSW50ZWdlcihiKX07dGhpcy5zZXRWYWx1ZUhleD1mdW5jdGlvbihiKXt0aGlzLmhWPWJ9O3RoaXMuZ2V0RnJlc2hWYWx1ZUhleD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmhWfTtpZih0eXBlb2YgYSE9XCJ1bmRlZmluZWRcIil7aWYodHlwZW9mIGFbXCJpbnRcIl0hPVwidW5kZWZpbmVkXCIpe3RoaXMuc2V0QnlJbnRlZ2VyKGFbXCJpbnRcIl0pfWVsc2V7aWYodHlwZW9mIGE9PVwibnVtYmVyXCIpe3RoaXMuc2V0QnlJbnRlZ2VyKGEpfWVsc2V7aWYodHlwZW9mIGEuaGV4IT1cInVuZGVmaW5lZFwiKXt0aGlzLnNldFZhbHVlSGV4KGEuaGV4KX19fX19O1lBSE9PLmxhbmcuZXh0ZW5kKEtKVVIuYXNuMS5ERVJFbnVtZXJhdGVkLEtKVVIuYXNuMS5BU04xT2JqZWN0KTtLSlVSLmFzbjEuREVSVVRGOFN0cmluZz1mdW5jdGlvbihhKXtLSlVSLmFzbjEuREVSVVRGOFN0cmluZy5zdXBlcmNsYXNzLmNvbnN0cnVjdG9yLmNhbGwodGhpcyxhKTt0aGlzLmhUPVwiMGNcIn07WUFIT08ubGFuZy5leHRlbmQoS0pVUi5hc24xLkRFUlVURjhTdHJpbmcsS0pVUi5hc24xLkRFUkFic3RyYWN0U3RyaW5nKTtLSlVSLmFzbjEuREVSTnVtZXJpY1N0cmluZz1mdW5jdGlvbihhKXtLSlVSLmFzbjEuREVSTnVtZXJpY1N0cmluZy5zdXBlcmNsYXNzLmNvbnN0cnVjdG9yLmNhbGwodGhpcyxhKTt0aGlzLmhUPVwiMTJcIn07WUFIT08ubGFuZy5leHRlbmQoS0pVUi5hc24xLkRFUk51bWVyaWNTdHJpbmcsS0pVUi5hc24xLkRFUkFic3RyYWN0U3RyaW5nKTtLSlVSLmFzbjEuREVSUHJpbnRhYmxlU3RyaW5nPWZ1bmN0aW9uKGEpe0tKVVIuYXNuMS5ERVJQcmludGFibGVTdHJpbmcuc3VwZXJjbGFzcy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsYSk7dGhpcy5oVD1cIjEzXCJ9O1lBSE9PLmxhbmcuZXh0ZW5kKEtKVVIuYXNuMS5ERVJQcmludGFibGVTdHJpbmcsS0pVUi5hc24xLkRFUkFic3RyYWN0U3RyaW5nKTtLSlVSLmFzbjEuREVSVGVsZXRleFN0cmluZz1mdW5jdGlvbihhKXtLSlVSLmFzbjEuREVSVGVsZXRleFN0cmluZy5zdXBlcmNsYXNzLmNvbnN0cnVjdG9yLmNhbGwodGhpcyxhKTt0aGlzLmhUPVwiMTRcIn07WUFIT08ubGFuZy5leHRlbmQoS0pVUi5hc24xLkRFUlRlbGV0ZXhTdHJpbmcsS0pVUi5hc24xLkRFUkFic3RyYWN0U3RyaW5nKTtLSlVSLmFzbjEuREVSSUE1U3RyaW5nPWZ1bmN0aW9uKGEpe0tKVVIuYXNuMS5ERVJJQTVTdHJpbmcuc3VwZXJjbGFzcy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsYSk7dGhpcy5oVD1cIjE2XCJ9O1lBSE9PLmxhbmcuZXh0ZW5kKEtKVVIuYXNuMS5ERVJJQTVTdHJpbmcsS0pVUi5hc24xLkRFUkFic3RyYWN0U3RyaW5nKTtLSlVSLmFzbjEuREVSVVRDVGltZT1mdW5jdGlvbihhKXtLSlVSLmFzbjEuREVSVVRDVGltZS5zdXBlcmNsYXNzLmNvbnN0cnVjdG9yLmNhbGwodGhpcyxhKTt0aGlzLmhUPVwiMTdcIjt0aGlzLnNldEJ5RGF0ZT1mdW5jdGlvbihiKXt0aGlzLmhUTFY9bnVsbDt0aGlzLmlzTW9kaWZpZWQ9dHJ1ZTt0aGlzLmRhdGU9Yjt0aGlzLnM9dGhpcy5mb3JtYXREYXRlKHRoaXMuZGF0ZSxcInV0Y1wiKTt0aGlzLmhWPXN0b2hleCh0aGlzLnMpfTt0aGlzLmdldEZyZXNoVmFsdWVIZXg9ZnVuY3Rpb24oKXtpZih0eXBlb2YgdGhpcy5kYXRlPT1cInVuZGVmaW5lZFwiJiZ0eXBlb2YgdGhpcy5zPT1cInVuZGVmaW5lZFwiKXt0aGlzLmRhdGU9bmV3IERhdGUoKTt0aGlzLnM9dGhpcy5mb3JtYXREYXRlKHRoaXMuZGF0ZSxcInV0Y1wiKTt0aGlzLmhWPXN0b2hleCh0aGlzLnMpfXJldHVybiB0aGlzLmhWfTtpZihhIT09dW5kZWZpbmVkKXtpZihhLnN0ciE9PXVuZGVmaW5lZCl7dGhpcy5zZXRTdHJpbmcoYS5zdHIpfWVsc2V7aWYodHlwZW9mIGE9PVwic3RyaW5nXCImJmEubWF0Y2goL15bMC05XXsxMn1aJC8pKXt0aGlzLnNldFN0cmluZyhhKX1lbHNle2lmKGEuaGV4IT09dW5kZWZpbmVkKXt0aGlzLnNldFN0cmluZ0hleChhLmhleCl9ZWxzZXtpZihhLmRhdGUhPT11bmRlZmluZWQpe3RoaXMuc2V0QnlEYXRlKGEuZGF0ZSl9fX19fX07WUFIT08ubGFuZy5leHRlbmQoS0pVUi5hc24xLkRFUlVUQ1RpbWUsS0pVUi5hc24xLkRFUkFic3RyYWN0VGltZSk7S0pVUi5hc24xLkRFUkdlbmVyYWxpemVkVGltZT1mdW5jdGlvbihhKXtLSlVSLmFzbjEuREVSR2VuZXJhbGl6ZWRUaW1lLnN1cGVyY2xhc3MuY29uc3RydWN0b3IuY2FsbCh0aGlzLGEpO3RoaXMuaFQ9XCIxOFwiO3RoaXMud2l0aE1pbGxpcz1mYWxzZTt0aGlzLnNldEJ5RGF0ZT1mdW5jdGlvbihiKXt0aGlzLmhUTFY9bnVsbDt0aGlzLmlzTW9kaWZpZWQ9dHJ1ZTt0aGlzLmRhdGU9Yjt0aGlzLnM9dGhpcy5mb3JtYXREYXRlKHRoaXMuZGF0ZSxcImdlblwiLHRoaXMud2l0aE1pbGxpcyk7dGhpcy5oVj1zdG9oZXgodGhpcy5zKX07dGhpcy5nZXRGcmVzaFZhbHVlSGV4PWZ1bmN0aW9uKCl7aWYodGhpcy5kYXRlPT09dW5kZWZpbmVkJiZ0aGlzLnM9PT11bmRlZmluZWQpe3RoaXMuZGF0ZT1uZXcgRGF0ZSgpO3RoaXMucz10aGlzLmZvcm1hdERhdGUodGhpcy5kYXRlLFwiZ2VuXCIsdGhpcy53aXRoTWlsbGlzKTt0aGlzLmhWPXN0b2hleCh0aGlzLnMpfXJldHVybiB0aGlzLmhWfTtpZihhIT09dW5kZWZpbmVkKXtpZihhLnN0ciE9PXVuZGVmaW5lZCl7dGhpcy5zZXRTdHJpbmcoYS5zdHIpfWVsc2V7aWYodHlwZW9mIGE9PVwic3RyaW5nXCImJmEubWF0Y2goL15bMC05XXsxNH1aJC8pKXt0aGlzLnNldFN0cmluZyhhKX1lbHNle2lmKGEuaGV4IT09dW5kZWZpbmVkKXt0aGlzLnNldFN0cmluZ0hleChhLmhleCl9ZWxzZXtpZihhLmRhdGUhPT11bmRlZmluZWQpe3RoaXMuc2V0QnlEYXRlKGEuZGF0ZSl9fX19aWYoYS5taWxsaXM9PT10cnVlKXt0aGlzLndpdGhNaWxsaXM9dHJ1ZX19fTtZQUhPTy5sYW5nLmV4dGVuZChLSlVSLmFzbjEuREVSR2VuZXJhbGl6ZWRUaW1lLEtKVVIuYXNuMS5ERVJBYnN0cmFjdFRpbWUpO0tKVVIuYXNuMS5ERVJTZXF1ZW5jZT1mdW5jdGlvbihhKXtLSlVSLmFzbjEuREVSU2VxdWVuY2Uuc3VwZXJjbGFzcy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsYSk7dGhpcy5oVD1cIjMwXCI7dGhpcy5nZXRGcmVzaFZhbHVlSGV4PWZ1bmN0aW9uKCl7dmFyIGM9XCJcIjtmb3IodmFyIGI9MDtiPHRoaXMuYXNuMUFycmF5Lmxlbmd0aDtiKyspe3ZhciBkPXRoaXMuYXNuMUFycmF5W2JdO2MrPWQuZ2V0RW5jb2RlZEhleCgpfXRoaXMuaFY9YztyZXR1cm4gdGhpcy5oVn19O1lBSE9PLmxhbmcuZXh0ZW5kKEtKVVIuYXNuMS5ERVJTZXF1ZW5jZSxLSlVSLmFzbjEuREVSQWJzdHJhY3RTdHJ1Y3R1cmVkKTtLSlVSLmFzbjEuREVSU2V0PWZ1bmN0aW9uKGEpe0tKVVIuYXNuMS5ERVJTZXQuc3VwZXJjbGFzcy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsYSk7dGhpcy5oVD1cIjMxXCI7dGhpcy5zb3J0RmxhZz10cnVlO3RoaXMuZ2V0RnJlc2hWYWx1ZUhleD1mdW5jdGlvbigpe3ZhciBiPW5ldyBBcnJheSgpO2Zvcih2YXIgYz0wO2M8dGhpcy5hc24xQXJyYXkubGVuZ3RoO2MrKyl7dmFyIGQ9dGhpcy5hc24xQXJyYXlbY107Yi5wdXNoKGQuZ2V0RW5jb2RlZEhleCgpKX1pZih0aGlzLnNvcnRGbGFnPT10cnVlKXtiLnNvcnQoKX10aGlzLmhWPWIuam9pbihcIlwiKTtyZXR1cm4gdGhpcy5oVn07aWYodHlwZW9mIGEhPVwidW5kZWZpbmVkXCIpe2lmKHR5cGVvZiBhLnNvcnRmbGFnIT1cInVuZGVmaW5lZFwiJiZhLnNvcnRmbGFnPT1mYWxzZSl7dGhpcy5zb3J0RmxhZz1mYWxzZX19fTtZQUhPTy5sYW5nLmV4dGVuZChLSlVSLmFzbjEuREVSU2V0LEtKVVIuYXNuMS5ERVJBYnN0cmFjdFN0cnVjdHVyZWQpO0tKVVIuYXNuMS5ERVJUYWdnZWRPYmplY3Q9ZnVuY3Rpb24oYSl7S0pVUi5hc24xLkRFUlRhZ2dlZE9iamVjdC5zdXBlcmNsYXNzLmNvbnN0cnVjdG9yLmNhbGwodGhpcyk7dGhpcy5oVD1cImEwXCI7dGhpcy5oVj1cIlwiO3RoaXMuaXNFeHBsaWNpdD10cnVlO3RoaXMuYXNuMU9iamVjdD1udWxsO3RoaXMuc2V0QVNOMU9iamVjdD1mdW5jdGlvbihiLGMsZCl7dGhpcy5oVD1jO3RoaXMuaXNFeHBsaWNpdD1iO3RoaXMuYXNuMU9iamVjdD1kO2lmKHRoaXMuaXNFeHBsaWNpdCl7dGhpcy5oVj10aGlzLmFzbjFPYmplY3QuZ2V0RW5jb2RlZEhleCgpO3RoaXMuaFRMVj1udWxsO3RoaXMuaXNNb2RpZmllZD10cnVlfWVsc2V7dGhpcy5oVj1udWxsO3RoaXMuaFRMVj1kLmdldEVuY29kZWRIZXgoKTt0aGlzLmhUTFY9dGhpcy5oVExWLnJlcGxhY2UoL14uLi8sYyk7dGhpcy5pc01vZGlmaWVkPWZhbHNlfX07dGhpcy5nZXRGcmVzaFZhbHVlSGV4PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaFZ9O2lmKHR5cGVvZiBhIT1cInVuZGVmaW5lZFwiKXtpZih0eXBlb2YgYS50YWchPVwidW5kZWZpbmVkXCIpe3RoaXMuaFQ9YS50YWd9aWYodHlwZW9mIGEuZXhwbGljaXQhPVwidW5kZWZpbmVkXCIpe3RoaXMuaXNFeHBsaWNpdD1hLmV4cGxpY2l0fWlmKHR5cGVvZiBhLm9iaiE9XCJ1bmRlZmluZWRcIil7dGhpcy5hc24xT2JqZWN0PWEub2JqO3RoaXMuc2V0QVNOMU9iamVjdCh0aGlzLmlzRXhwbGljaXQsdGhpcy5oVCx0aGlzLmFzbjFPYmplY3QpfX19O1lBSE9PLmxhbmcuZXh0ZW5kKEtKVVIuYXNuMS5ERVJUYWdnZWRPYmplY3QsS0pVUi5hc24xLkFTTjFPYmplY3QpO1xudmFyIEFTTjFIRVg9bmV3IGZ1bmN0aW9uKCl7fTtBU04xSEVYLmdldExibGVuPWZ1bmN0aW9uKGMsYSl7aWYoYy5zdWJzdHIoYSsyLDEpIT1cIjhcIil7cmV0dXJuIDF9dmFyIGI9cGFyc2VJbnQoYy5zdWJzdHIoYSszLDEpKTtpZihiPT0wKXtyZXR1cm4gLTF9aWYoMDxiJiZiPDEwKXtyZXR1cm4gYisxfXJldHVybiAtMn07QVNOMUhFWC5nZXRMPWZ1bmN0aW9uKGMsYil7dmFyIGE9QVNOMUhFWC5nZXRMYmxlbihjLGIpO2lmKGE8MSl7cmV0dXJuXCJcIn1yZXR1cm4gYy5zdWJzdHIoYisyLGEqMil9O0FTTjFIRVguZ2V0VmJsZW49ZnVuY3Rpb24oZCxhKXt2YXIgYyxiO2M9QVNOMUhFWC5nZXRMKGQsYSk7aWYoYz09XCJcIil7cmV0dXJuIC0xfWlmKGMuc3Vic3RyKDAsMSk9PT1cIjhcIil7Yj1uZXcgQmlnSW50ZWdlcihjLnN1YnN0cigyKSwxNil9ZWxzZXtiPW5ldyBCaWdJbnRlZ2VyKGMsMTYpfXJldHVybiBiLmludFZhbHVlKCl9O0FTTjFIRVguZ2V0VmlkeD1mdW5jdGlvbihjLGIpe3ZhciBhPUFTTjFIRVguZ2V0TGJsZW4oYyxiKTtpZihhPDApe3JldHVybiBhfXJldHVybiBiKyhhKzEpKjJ9O0FTTjFIRVguZ2V0Vj1mdW5jdGlvbihkLGEpe3ZhciBjPUFTTjFIRVguZ2V0VmlkeChkLGEpO3ZhciBiPUFTTjFIRVguZ2V0VmJsZW4oZCxhKTtyZXR1cm4gZC5zdWJzdHIoYyxiKjIpfTtBU04xSEVYLmdldFRMVj1mdW5jdGlvbihiLGEpe3JldHVybiBiLnN1YnN0cihhLDIpK0FTTjFIRVguZ2V0TChiLGEpK0FTTjFIRVguZ2V0VihiLGEpfTtBU04xSEVYLmdldE5leHRTaWJsaW5nSWR4PWZ1bmN0aW9uKGQsYSl7dmFyIGM9QVNOMUhFWC5nZXRWaWR4KGQsYSk7dmFyIGI9QVNOMUhFWC5nZXRWYmxlbihkLGEpO3JldHVybiBjK2IqMn07QVNOMUhFWC5nZXRDaGlsZElkeD1mdW5jdGlvbihlLGYpe3ZhciBqPUFTTjFIRVg7dmFyIGc9bmV3IEFycmF5KCk7dmFyIGk9ai5nZXRWaWR4KGUsZik7aWYoZS5zdWJzdHIoZiwyKT09XCIwM1wiKXtnLnB1c2goaSsyKX1lbHNle2cucHVzaChpKX12YXIgbD1qLmdldFZibGVuKGUsZik7dmFyIGM9aTt2YXIgZD0wO3doaWxlKDEpe3ZhciBiPWouZ2V0TmV4dFNpYmxpbmdJZHgoZSxjKTtpZihiPT1udWxsfHwoYi1pPj0obCoyKSkpe2JyZWFrfWlmKGQ+PTIwMCl7YnJlYWt9Zy5wdXNoKGIpO2M9YjtkKyt9cmV0dXJuIGd9O0FTTjFIRVguZ2V0TnRoQ2hpbGRJZHg9ZnVuY3Rpb24oZCxiLGUpe3ZhciBjPUFTTjFIRVguZ2V0Q2hpbGRJZHgoZCxiKTtyZXR1cm4gY1tlXX07QVNOMUhFWC5nZXRJZHhieUxpc3Q9ZnVuY3Rpb24oZSxkLGMsaSl7dmFyIGc9QVNOMUhFWDt2YXIgZixiO2lmKGMubGVuZ3RoPT0wKXtpZihpIT09dW5kZWZpbmVkKXtpZihlLnN1YnN0cihkLDIpIT09aSl7dGhyb3dcImNoZWNraW5nIHRhZyBkb2Vzbid0IG1hdGNoOiBcIitlLnN1YnN0cihkLDIpK1wiIT1cIitpfX1yZXR1cm4gZH1mPWMuc2hpZnQoKTtiPWcuZ2V0Q2hpbGRJZHgoZSxkKTtyZXR1cm4gZy5nZXRJZHhieUxpc3QoZSxiW2ZdLGMsaSl9O0FTTjFIRVguZ2V0VExWYnlMaXN0PWZ1bmN0aW9uKGQsYyxiLGYpe3ZhciBlPUFTTjFIRVg7dmFyIGE9ZS5nZXRJZHhieUxpc3QoZCxjLGIpO2lmKGE9PT11bmRlZmluZWQpe3Rocm93XCJjYW4ndCBmaW5kIG50aExpc3Qgb2JqZWN0XCJ9aWYoZiE9PXVuZGVmaW5lZCl7aWYoZC5zdWJzdHIoYSwyKSE9Zil7dGhyb3dcImNoZWNraW5nIHRhZyBkb2Vzbid0IG1hdGNoOiBcIitkLnN1YnN0cihhLDIpK1wiIT1cIitmfX1yZXR1cm4gZS5nZXRUTFYoZCxhKX07QVNOMUhFWC5nZXRWYnlMaXN0PWZ1bmN0aW9uKGUsYyxiLGcsaSl7dmFyIGY9QVNOMUhFWDt2YXIgYSxkO2E9Zi5nZXRJZHhieUxpc3QoZSxjLGIsZyk7aWYoYT09PXVuZGVmaW5lZCl7dGhyb3dcImNhbid0IGZpbmQgbnRoTGlzdCBvYmplY3RcIn1kPWYuZ2V0VihlLGEpO2lmKGk9PT10cnVlKXtkPWQuc3Vic3RyKDIpfXJldHVybiBkfTtBU04xSEVYLmhleHRvb2lkc3RyPWZ1bmN0aW9uKGUpe3ZhciBoPWZ1bmN0aW9uKGIsYSl7aWYoYi5sZW5ndGg+PWEpe3JldHVybiBifXJldHVybiBuZXcgQXJyYXkoYS1iLmxlbmd0aCsxKS5qb2luKFwiMFwiKStifTt2YXIgbD1bXTt2YXIgbz1lLnN1YnN0cigwLDIpO3ZhciBmPXBhcnNlSW50KG8sMTYpO2xbMF09bmV3IFN0cmluZyhNYXRoLmZsb29yKGYvNDApKTtsWzFdPW5ldyBTdHJpbmcoZiU0MCk7dmFyIG09ZS5zdWJzdHIoMik7dmFyIGs9W107Zm9yKHZhciBnPTA7ZzxtLmxlbmd0aC8yO2crKyl7ay5wdXNoKHBhcnNlSW50KG0uc3Vic3RyKGcqMiwyKSwxNikpfXZhciBqPVtdO3ZhciBkPVwiXCI7Zm9yKHZhciBnPTA7ZzxrLmxlbmd0aDtnKyspe2lmKGtbZ10mMTI4KXtkPWQraCgoa1tnXSYxMjcpLnRvU3RyaW5nKDIpLDcpfWVsc2V7ZD1kK2goKGtbZ10mMTI3KS50b1N0cmluZygyKSw3KTtqLnB1c2gobmV3IFN0cmluZyhwYXJzZUludChkLDIpKSk7ZD1cIlwifX12YXIgbj1sLmpvaW4oXCIuXCIpO2lmKGoubGVuZ3RoPjApe249bitcIi5cIitqLmpvaW4oXCIuXCIpfXJldHVybiBufTtBU04xSEVYLmR1bXA9ZnVuY3Rpb24odCxjLGwsZyl7dmFyIHA9QVNOMUhFWDt2YXIgaj1wLmdldFY7dmFyIHk9cC5kdW1wO3ZhciB3PXAuZ2V0Q2hpbGRJZHg7dmFyIGU9dDtpZih0IGluc3RhbmNlb2YgS0pVUi5hc24xLkFTTjFPYmplY3Qpe2U9dC5nZXRFbmNvZGVkSGV4KCl9dmFyIHE9ZnVuY3Rpb24oQSxpKXtpZihBLmxlbmd0aDw9aSoyKXtyZXR1cm4gQX1lbHNle3ZhciB2PUEuc3Vic3RyKDAsaSkrXCIuLih0b3RhbCBcIitBLmxlbmd0aC8yK1wiYnl0ZXMpLi5cIitBLnN1YnN0cihBLmxlbmd0aC1pLGkpO3JldHVybiB2fX07aWYoYz09PXVuZGVmaW5lZCl7Yz17b21taXRfbG9uZ19vY3RldDozMn19aWYobD09PXVuZGVmaW5lZCl7bD0wfWlmKGc9PT11bmRlZmluZWQpe2c9XCJcIn12YXIgeD1jLm9tbWl0X2xvbmdfb2N0ZXQ7aWYoZS5zdWJzdHIobCwyKT09XCIwMVwiKXt2YXIgaD1qKGUsbCk7aWYoaD09XCIwMFwiKXtyZXR1cm4gZytcIkJPT0xFQU4gRkFMU0VcXG5cIn1lbHNle3JldHVybiBnK1wiQk9PTEVBTiBUUlVFXFxuXCJ9fWlmKGUuc3Vic3RyKGwsMik9PVwiMDJcIil7dmFyIGg9aihlLGwpO3JldHVybiBnK1wiSU5URUdFUiBcIitxKGgseCkrXCJcXG5cIn1pZihlLnN1YnN0cihsLDIpPT1cIjAzXCIpe3ZhciBoPWooZSxsKTtyZXR1cm4gZytcIkJJVFNUUklORyBcIitxKGgseCkrXCJcXG5cIn1pZihlLnN1YnN0cihsLDIpPT1cIjA0XCIpe3ZhciBoPWooZSxsKTtpZihwLmlzQVNOMUhFWChoKSl7dmFyIGs9ZytcIk9DVEVUU1RSSU5HLCBlbmNhcHN1bGF0ZXNcXG5cIjtrPWsreShoLGMsMCxnK1wiICBcIik7cmV0dXJuIGt9ZWxzZXtyZXR1cm4gZytcIk9DVEVUU1RSSU5HIFwiK3EoaCx4KStcIlxcblwifX1pZihlLnN1YnN0cihsLDIpPT1cIjA1XCIpe3JldHVybiBnK1wiTlVMTFxcblwifWlmKGUuc3Vic3RyKGwsMik9PVwiMDZcIil7dmFyIG09aihlLGwpO3ZhciBhPUtKVVIuYXNuMS5BU04xVXRpbC5vaWRIZXhUb0ludChtKTt2YXIgbz1LSlVSLmFzbjEueDUwOS5PSUQub2lkMm5hbWUoYSk7dmFyIGI9YS5yZXBsYWNlKC9cXC4vZyxcIiBcIik7aWYobyE9XCJcIil7cmV0dXJuIGcrXCJPYmplY3RJZGVudGlmaWVyIFwiK28rXCIgKFwiK2IrXCIpXFxuXCJ9ZWxzZXtyZXR1cm4gZytcIk9iamVjdElkZW50aWZpZXIgKFwiK2IrXCIpXFxuXCJ9fWlmKGUuc3Vic3RyKGwsMik9PVwiMGNcIil7cmV0dXJuIGcrXCJVVEY4U3RyaW5nICdcIitoZXh0b3V0ZjgoaihlLGwpKStcIidcXG5cIn1pZihlLnN1YnN0cihsLDIpPT1cIjEzXCIpe3JldHVybiBnK1wiUHJpbnRhYmxlU3RyaW5nICdcIitoZXh0b3V0ZjgoaihlLGwpKStcIidcXG5cIn1pZihlLnN1YnN0cihsLDIpPT1cIjE0XCIpe3JldHVybiBnK1wiVGVsZXRleFN0cmluZyAnXCIraGV4dG91dGY4KGooZSxsKSkrXCInXFxuXCJ9aWYoZS5zdWJzdHIobCwyKT09XCIxNlwiKXtyZXR1cm4gZytcIklBNVN0cmluZyAnXCIraGV4dG91dGY4KGooZSxsKSkrXCInXFxuXCJ9aWYoZS5zdWJzdHIobCwyKT09XCIxN1wiKXtyZXR1cm4gZytcIlVUQ1RpbWUgXCIraGV4dG91dGY4KGooZSxsKSkrXCJcXG5cIn1pZihlLnN1YnN0cihsLDIpPT1cIjE4XCIpe3JldHVybiBnK1wiR2VuZXJhbGl6ZWRUaW1lIFwiK2hleHRvdXRmOChqKGUsbCkpK1wiXFxuXCJ9aWYoZS5zdWJzdHIobCwyKT09XCIzMFwiKXtpZihlLnN1YnN0cihsLDQpPT1cIjMwMDBcIil7cmV0dXJuIGcrXCJTRVFVRU5DRSB7fVxcblwifXZhciBrPWcrXCJTRVFVRU5DRVxcblwiO3ZhciBkPXcoZSxsKTt2YXIgZj1jO2lmKChkLmxlbmd0aD09Mnx8ZC5sZW5ndGg9PTMpJiZlLnN1YnN0cihkWzBdLDIpPT1cIjA2XCImJmUuc3Vic3RyKGRbZC5sZW5ndGgtMV0sMik9PVwiMDRcIil7dmFyIG89cC5vaWRuYW1lKGooZSxkWzBdKSk7dmFyIHI9SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShjKSk7ci54NTA5RXh0TmFtZT1vO2Y9cn1mb3IodmFyIHU9MDt1PGQubGVuZ3RoO3UrKyl7az1rK3koZSxmLGRbdV0sZytcIiAgXCIpfXJldHVybiBrfWlmKGUuc3Vic3RyKGwsMik9PVwiMzFcIil7dmFyIGs9ZytcIlNFVFxcblwiO3ZhciBkPXcoZSxsKTtmb3IodmFyIHU9MDt1PGQubGVuZ3RoO3UrKyl7az1rK3koZSxjLGRbdV0sZytcIiAgXCIpfXJldHVybiBrfXZhciB6PXBhcnNlSW50KGUuc3Vic3RyKGwsMiksMTYpO2lmKCh6JjEyOCkhPTApe3ZhciBuPXomMzE7aWYoKHomMzIpIT0wKXt2YXIgaz1nK1wiW1wiK24rXCJdXFxuXCI7dmFyIGQ9dyhlLGwpO2Zvcih2YXIgdT0wO3U8ZC5sZW5ndGg7dSsrKXtrPWsreShlLGMsZFt1XSxnK1wiICBcIil9cmV0dXJuIGt9ZWxzZXt2YXIgaD1qKGUsbCk7aWYoaC5zdWJzdHIoMCw4KT09XCI2ODc0NzQ3MFwiKXtoPWhleHRvdXRmOChoKX1pZihjLng1MDlFeHROYW1lPT09XCJzdWJqZWN0QWx0TmFtZVwiJiZuPT0yKXtoPWhleHRvdXRmOChoKX12YXIgaz1nK1wiW1wiK24rXCJdIFwiK2grXCJcXG5cIjtyZXR1cm4ga319cmV0dXJuIGcrXCJVTktOT1dOKFwiK2Uuc3Vic3RyKGwsMikrXCIpIFwiK2ooZSxsKStcIlxcblwifTtBU04xSEVYLmlzQVNOMUhFWD1mdW5jdGlvbihlKXt2YXIgZD1BU04xSEVYO2lmKGUubGVuZ3RoJTI9PTEpe3JldHVybiBmYWxzZX12YXIgYz1kLmdldFZibGVuKGUsMCk7dmFyIGI9ZS5zdWJzdHIoMCwyKTt2YXIgZj1kLmdldEwoZSwwKTt2YXIgYT1lLmxlbmd0aC1iLmxlbmd0aC1mLmxlbmd0aDtpZihhPT1jKjIpe3JldHVybiB0cnVlfXJldHVybiBmYWxzZX07QVNOMUhFWC5vaWRuYW1lPWZ1bmN0aW9uKGEpe3ZhciBjPUtKVVIuYXNuMTtpZihLSlVSLmxhbmcuU3RyaW5nLmlzSGV4KGEpKXthPWMuQVNOMVV0aWwub2lkSGV4VG9JbnQoYSl9dmFyIGI9Yy54NTA5Lk9JRC5vaWQybmFtZShhKTtpZihiPT09XCJcIil7Yj1hfXJldHVybiBifTtcbnZhciBLSlVSO2lmKHR5cGVvZiBLSlVSPT1cInVuZGVmaW5lZFwifHwhS0pVUil7S0pVUj17fX1pZih0eXBlb2YgS0pVUi5sYW5nPT1cInVuZGVmaW5lZFwifHwhS0pVUi5sYW5nKXtLSlVSLmxhbmc9e319S0pVUi5sYW5nLlN0cmluZz1mdW5jdGlvbigpe307ZnVuY3Rpb24gQmFzZTY0eCgpe31mdW5jdGlvbiBzdG9CQShkKXt2YXIgYj1uZXcgQXJyYXkoKTtmb3IodmFyIGM9MDtjPGQubGVuZ3RoO2MrKyl7YltjXT1kLmNoYXJDb2RlQXQoYyl9cmV0dXJuIGJ9ZnVuY3Rpb24gQkF0b3MoYil7dmFyIGQ9XCJcIjtmb3IodmFyIGM9MDtjPGIubGVuZ3RoO2MrKyl7ZD1kK1N0cmluZy5mcm9tQ2hhckNvZGUoYltjXSl9cmV0dXJuIGR9ZnVuY3Rpb24gQkF0b2hleChiKXt2YXIgZT1cIlwiO2Zvcih2YXIgZD0wO2Q8Yi5sZW5ndGg7ZCsrKXt2YXIgYz1iW2RdLnRvU3RyaW5nKDE2KTtpZihjLmxlbmd0aD09MSl7Yz1cIjBcIitjfWU9ZStjfXJldHVybiBlfWZ1bmN0aW9uIHN0b2hleChhKXtyZXR1cm4gQkF0b2hleChzdG9CQShhKSl9ZnVuY3Rpb24gc3RvYjY0KGEpe3JldHVybiBoZXgyYjY0KHN0b2hleChhKSl9ZnVuY3Rpb24gc3RvYjY0dShhKXtyZXR1cm4gYjY0dG9iNjR1KGhleDJiNjQoc3RvaGV4KGEpKSl9ZnVuY3Rpb24gYjY0dXRvcyhhKXtyZXR1cm4gQkF0b3MoYjY0dG9CQShiNjR1dG9iNjQoYSkpKX1mdW5jdGlvbiBiNjR0b2I2NHUoYSl7YT1hLnJlcGxhY2UoL1xcPS9nLFwiXCIpO2E9YS5yZXBsYWNlKC9cXCsvZyxcIi1cIik7YT1hLnJlcGxhY2UoL1xcLy9nLFwiX1wiKTtyZXR1cm4gYX1mdW5jdGlvbiBiNjR1dG9iNjQoYSl7aWYoYS5sZW5ndGglND09Mil7YT1hK1wiPT1cIn1lbHNle2lmKGEubGVuZ3RoJTQ9PTMpe2E9YStcIj1cIn19YT1hLnJlcGxhY2UoLy0vZyxcIitcIik7YT1hLnJlcGxhY2UoL18vZyxcIi9cIik7cmV0dXJuIGF9ZnVuY3Rpb24gaGV4dG9iNjR1KGEpe2lmKGEubGVuZ3RoJTI9PTEpe2E9XCIwXCIrYX1yZXR1cm4gYjY0dG9iNjR1KGhleDJiNjQoYSkpfWZ1bmN0aW9uIGI2NHV0b2hleChhKXtyZXR1cm4gYjY0dG9oZXgoYjY0dXRvYjY0KGEpKX12YXIgdXRmOHRvYjY0dSxiNjR1dG91dGY4O2lmKHR5cGVvZiBCdWZmZXI9PT1cImZ1bmN0aW9uXCIpe3V0Zjh0b2I2NHU9ZnVuY3Rpb24oYSl7cmV0dXJuIGI2NHRvYjY0dShuZXcgQnVmZmVyKGEsXCJ1dGY4XCIpLnRvU3RyaW5nKFwiYmFzZTY0XCIpKX07YjY0dXRvdXRmOD1mdW5jdGlvbihhKXtyZXR1cm4gbmV3IEJ1ZmZlcihiNjR1dG9iNjQoYSksXCJiYXNlNjRcIikudG9TdHJpbmcoXCJ1dGY4XCIpfX1lbHNle3V0Zjh0b2I2NHU9ZnVuY3Rpb24oYSl7cmV0dXJuIGhleHRvYjY0dSh1cmljbXB0b2hleChlbmNvZGVVUklDb21wb25lbnRBbGwoYSkpKX07YjY0dXRvdXRmOD1mdW5jdGlvbihhKXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGhleHRvdXJpY21wKGI2NHV0b2hleChhKSkpfX1mdW5jdGlvbiB1dGY4dG9iNjQoYSl7cmV0dXJuIGhleDJiNjQodXJpY21wdG9oZXgoZW5jb2RlVVJJQ29tcG9uZW50QWxsKGEpKSl9ZnVuY3Rpb24gYjY0dG91dGY4KGEpe3JldHVybiBkZWNvZGVVUklDb21wb25lbnQoaGV4dG91cmljbXAoYjY0dG9oZXgoYSkpKX1mdW5jdGlvbiB1dGY4dG9oZXgoYSl7cmV0dXJuIHVyaWNtcHRvaGV4KGVuY29kZVVSSUNvbXBvbmVudEFsbChhKSl9ZnVuY3Rpb24gaGV4dG91dGY4KGEpe3JldHVybiBkZWNvZGVVUklDb21wb25lbnQoaGV4dG91cmljbXAoYSkpfWZ1bmN0aW9uIGhleHRvcnN0cihjKXt2YXIgYj1cIlwiO2Zvcih2YXIgYT0wO2E8Yy5sZW5ndGgtMTthKz0yKXtiKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KGMuc3Vic3RyKGEsMiksMTYpKX1yZXR1cm4gYn1mdW5jdGlvbiByc3RydG9oZXgoYyl7dmFyIGE9XCJcIjtmb3IodmFyIGI9MDtiPGMubGVuZ3RoO2IrKyl7YSs9KFwiMFwiK2MuY2hhckNvZGVBdChiKS50b1N0cmluZygxNikpLnNsaWNlKC0yKX1yZXR1cm4gYX1mdW5jdGlvbiBoZXh0b2I2NChhKXtyZXR1cm4gaGV4MmI2NChhKX1mdW5jdGlvbiBoZXh0b2I2NG5sKGIpe3ZhciBhPWhleHRvYjY0KGIpO3ZhciBjPWEucmVwbGFjZSgvKC57NjR9KS9nLFwiJDFcXHJcXG5cIik7Yz1jLnJlcGxhY2UoL1xcclxcbiQvLFwiXCIpO3JldHVybiBjfWZ1bmN0aW9uIGI2NG5sdG9oZXgoYil7dmFyIGE9Yi5yZXBsYWNlKC9bXjAtOUEtWmEtelxcLys9XSovZyxcIlwiKTt2YXIgYz1iNjR0b2hleChhKTtyZXR1cm4gY31mdW5jdGlvbiBoZXh0b3BlbShhLGIpe3ZhciBjPWhleHRvYjY0bmwoYSk7cmV0dXJuXCItLS0tLUJFR0lOIFwiK2IrXCItLS0tLVxcclxcblwiK2MrXCJcXHJcXG4tLS0tLUVORCBcIitiK1wiLS0tLS1cXHJcXG5cIn1mdW5jdGlvbiBwZW10b2hleChhLGIpe2lmKGEuaW5kZXhPZihcIi0tLS0tQkVHSU4gXCIpPT0tMSl7dGhyb3dcImNhbid0IGZpbmQgUEVNIGhlYWRlcjogXCIrYn1pZihiIT09dW5kZWZpbmVkKXthPWEucmVwbGFjZShcIi0tLS0tQkVHSU4gXCIrYitcIi0tLS0tXCIsXCJcIik7YT1hLnJlcGxhY2UoXCItLS0tLUVORCBcIitiK1wiLS0tLS1cIixcIlwiKX1lbHNle2E9YS5yZXBsYWNlKC8tLS0tLUJFR0lOIFteLV0rLS0tLS0vLFwiXCIpO2E9YS5yZXBsYWNlKC8tLS0tLUVORCBbXi1dKy0tLS0tLyxcIlwiKX1yZXR1cm4gYjY0bmx0b2hleChhKX1mdW5jdGlvbiBoZXh0b0FycmF5QnVmZmVyKGQpe2lmKGQubGVuZ3RoJTIhPTApe3Rocm93XCJpbnB1dCBpcyBub3QgZXZlbiBsZW5ndGhcIn1pZihkLm1hdGNoKC9eWzAtOUEtRmEtZl0rJC8pPT1udWxsKXt0aHJvd1wiaW5wdXQgaXMgbm90IGhleGFkZWNpbWFsXCJ9dmFyIGI9bmV3IEFycmF5QnVmZmVyKGQubGVuZ3RoLzIpO3ZhciBhPW5ldyBEYXRhVmlldyhiKTtmb3IodmFyIGM9MDtjPGQubGVuZ3RoLzI7YysrKXthLnNldFVpbnQ4KGMscGFyc2VJbnQoZC5zdWJzdHIoYyoyLDIpLDE2KSl9cmV0dXJuIGJ9ZnVuY3Rpb24gQXJyYXlCdWZmZXJ0b2hleChiKXt2YXIgZD1cIlwiO3ZhciBhPW5ldyBEYXRhVmlldyhiKTtmb3IodmFyIGM9MDtjPGIuYnl0ZUxlbmd0aDtjKyspe2QrPShcIjAwXCIrYS5nZXRVaW50OChjKS50b1N0cmluZygxNikpLnNsaWNlKC0yKX1yZXR1cm4gZH1mdW5jdGlvbiB6dWx1dG9tc2VjKG4pe3ZhciBsLGosbSxlLGYsaSxiLGs7dmFyIGEsaCxnLGM7Yz1uLm1hdGNoKC9eKFxcZHsyfXxcXGR7NH0pKFxcZFxcZCkoXFxkXFxkKShcXGRcXGQpKFxcZFxcZCkoXFxkXFxkKSh8XFwuXFxkKylaJC8pO2lmKGMpe2E9Y1sxXTtsPXBhcnNlSW50KGEpO2lmKGEubGVuZ3RoPT09Mil7aWYoNTA8PWwmJmw8MTAwKXtsPTE5MDArbH1lbHNle2lmKDA8PWwmJmw8NTApe2w9MjAwMCtsfX19aj1wYXJzZUludChjWzJdKS0xO209cGFyc2VJbnQoY1szXSk7ZT1wYXJzZUludChjWzRdKTtmPXBhcnNlSW50KGNbNV0pO2k9cGFyc2VJbnQoY1s2XSk7Yj0wO2g9Y1s3XTtpZihoIT09XCJcIil7Zz0oaC5zdWJzdHIoMSkrXCIwMFwiKS5zdWJzdHIoMCwzKTtiPXBhcnNlSW50KGcpfXJldHVybiBEYXRlLlVUQyhsLGosbSxlLGYsaSxiKX10aHJvd1widW5zdXBwb3J0ZWQgenVsdSBmb3JtYXQ6IFwiK259ZnVuY3Rpb24genVsdXRvc2VjKGEpe3ZhciBiPXp1bHV0b21zZWMoYSk7cmV0dXJuIH5+KGIvMTAwMCl9ZnVuY3Rpb24genVsdXRvZGF0ZShhKXtyZXR1cm4gbmV3IERhdGUoenVsdXRvbXNlYyhhKSl9ZnVuY3Rpb24gZGF0ZXRvenVsdShnLGUsZil7dmFyIGI7dmFyIGE9Zy5nZXRVVENGdWxsWWVhcigpO2lmKGUpe2lmKGE8MTk1MHx8MjA0OTxhKXt0aHJvd1wibm90IHByb3BlciB5ZWFyIGZvciBVVENUaW1lOiBcIithfWI9KFwiXCIrYSkuc2xpY2UoLTIpfWVsc2V7Yj0oXCIwMDBcIithKS5zbGljZSgtNCl9Yis9KFwiMFwiKyhnLmdldFVUQ01vbnRoKCkrMSkpLnNsaWNlKC0yKTtiKz0oXCIwXCIrZy5nZXRVVENEYXRlKCkpLnNsaWNlKC0yKTtiKz0oXCIwXCIrZy5nZXRVVENIb3VycygpKS5zbGljZSgtMik7Yis9KFwiMFwiK2cuZ2V0VVRDTWludXRlcygpKS5zbGljZSgtMik7Yis9KFwiMFwiK2cuZ2V0VVRDU2Vjb25kcygpKS5zbGljZSgtMik7aWYoZil7dmFyIGM9Zy5nZXRVVENNaWxsaXNlY29uZHMoKTtpZihjIT09MCl7Yz0oXCIwMFwiK2MpLnNsaWNlKC0zKTtjPWMucmVwbGFjZSgvMCskL2csXCJcIik7Yis9XCIuXCIrY319Yis9XCJaXCI7cmV0dXJuIGJ9ZnVuY3Rpb24gdXJpY21wdG9oZXgoYSl7cmV0dXJuIGEucmVwbGFjZSgvJS9nLFwiXCIpfWZ1bmN0aW9uIGhleHRvdXJpY21wKGEpe3JldHVybiBhLnJlcGxhY2UoLyguLikvZyxcIiUkMVwiKX1mdW5jdGlvbiBpcHY2dG9oZXgoZyl7dmFyIGI9XCJtYWxmb3JtZWQgSVB2NiBhZGRyZXNzXCI7aWYoIWcubWF0Y2goL15bMC05QS1GYS1mOl0rJC8pKXt0aHJvdyBifWc9Zy50b0xvd2VyQ2FzZSgpO3ZhciBkPWcuc3BsaXQoXCI6XCIpLmxlbmd0aC0xO2lmKGQ8Mil7dGhyb3cgYn12YXIgZT1cIjpcIi5yZXBlYXQoNy1kKzIpO2c9Zy5yZXBsYWNlKFwiOjpcIixlKTt2YXIgYz1nLnNwbGl0KFwiOlwiKTtpZihjLmxlbmd0aCE9OCl7dGhyb3cgYn1mb3IodmFyIGY9MDtmPDg7ZisrKXtjW2ZdPShcIjAwMDBcIitjW2ZdKS5zbGljZSgtNCl9cmV0dXJuIGMuam9pbihcIlwiKX1mdW5jdGlvbiBoZXh0b2lwdjYoZSl7aWYoIWUubWF0Y2goL15bMC05QS1GYS1mXXszMn0kLykpe3Rocm93XCJtYWxmb3JtZWQgSVB2NiBhZGRyZXNzIG9jdGV0XCJ9ZT1lLnRvTG93ZXJDYXNlKCk7dmFyIGI9ZS5tYXRjaCgvLnsxLDR9L2cpO2Zvcih2YXIgZD0wO2Q8ODtkKyspe2JbZF09YltkXS5yZXBsYWNlKC9eMCsvLFwiXCIpO2lmKGJbZF09PVwiXCIpe2JbZF09XCIwXCJ9fWU9XCI6XCIrYi5qb2luKFwiOlwiKStcIjpcIjt2YXIgYz1lLm1hdGNoKC86KDA6KXsyLH0vZyk7aWYoYz09PW51bGwpe3JldHVybiBlLnNsaWNlKDEsLTEpfXZhciBmPVwiXCI7Zm9yKHZhciBkPTA7ZDxjLmxlbmd0aDtkKyspe2lmKGNbZF0ubGVuZ3RoPmYubGVuZ3RoKXtmPWNbZF19fWU9ZS5yZXBsYWNlKGYsXCI6OlwiKTtyZXR1cm4gZS5zbGljZSgxLC0xKX1mdW5jdGlvbiBoZXh0b2lwKGIpe3ZhciBkPVwibWFsZm9ybWVkIGhleCB2YWx1ZVwiO2lmKCFiLm1hdGNoKC9eKFswLTlBLUZhLWZdWzAtOUEtRmEtZl0pezEsfSQvKSl7dGhyb3cgZH1pZihiLmxlbmd0aD09OCl7dmFyIGM7dHJ5e2M9cGFyc2VJbnQoYi5zdWJzdHIoMCwyKSwxNikrXCIuXCIrcGFyc2VJbnQoYi5zdWJzdHIoMiwyKSwxNikrXCIuXCIrcGFyc2VJbnQoYi5zdWJzdHIoNCwyKSwxNikrXCIuXCIrcGFyc2VJbnQoYi5zdWJzdHIoNiwyKSwxNik7cmV0dXJuIGN9Y2F0Y2goYSl7dGhyb3cgZH19ZWxzZXtpZihiLmxlbmd0aD09MzIpe3JldHVybiBoZXh0b2lwdjYoYil9ZWxzZXtyZXR1cm4gYn19fWZ1bmN0aW9uIGlwdG9oZXgoZil7dmFyIGo9XCJtYWxmb3JtZWQgSVAgYWRkcmVzc1wiO2Y9Zi50b0xvd2VyQ2FzZShmKTtpZihmLm1hdGNoKC9eWzAtOS5dKyQvKSl7dmFyIGI9Zi5zcGxpdChcIi5cIik7aWYoYi5sZW5ndGghPT00KXt0aHJvdyBqfXZhciBnPVwiXCI7dHJ5e2Zvcih2YXIgZT0wO2U8NDtlKyspe3ZhciBoPXBhcnNlSW50KGJbZV0pO2crPShcIjBcIitoLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTIpfXJldHVybiBnfWNhdGNoKGMpe3Rocm93IGp9fWVsc2V7aWYoZi5tYXRjaCgvXlswLTlhLWY6XSskLykmJmYuaW5kZXhPZihcIjpcIikhPT0tMSl7cmV0dXJuIGlwdjZ0b2hleChmKX1lbHNle3Rocm93IGp9fX1mdW5jdGlvbiBlbmNvZGVVUklDb21wb25lbnRBbGwoYSl7dmFyIGQ9ZW5jb2RlVVJJQ29tcG9uZW50KGEpO3ZhciBiPVwiXCI7Zm9yKHZhciBjPTA7YzxkLmxlbmd0aDtjKyspe2lmKGRbY109PVwiJVwiKXtiPWIrZC5zdWJzdHIoYywzKTtjPWMrMn1lbHNle2I9YitcIiVcIitzdG9oZXgoZFtjXSl9fXJldHVybiBifWZ1bmN0aW9uIG5ld2xpbmVfdG9Vbml4KGEpe2E9YS5yZXBsYWNlKC9cXHJcXG4vbWcsXCJcXG5cIik7cmV0dXJuIGF9ZnVuY3Rpb24gbmV3bGluZV90b0RvcyhhKXthPWEucmVwbGFjZSgvXFxyXFxuL21nLFwiXFxuXCIpO2E9YS5yZXBsYWNlKC9cXG4vbWcsXCJcXHJcXG5cIik7cmV0dXJuIGF9S0pVUi5sYW5nLlN0cmluZy5pc0ludGVnZXI9ZnVuY3Rpb24oYSl7aWYoYS5tYXRjaCgvXlswLTldKyQvKSl7cmV0dXJuIHRydWV9ZWxzZXtpZihhLm1hdGNoKC9eLVswLTldKyQvKSl7cmV0dXJuIHRydWV9ZWxzZXtyZXR1cm4gZmFsc2V9fX07S0pVUi5sYW5nLlN0cmluZy5pc0hleD1mdW5jdGlvbihhKXtpZihhLmxlbmd0aCUyPT0wJiYoYS5tYXRjaCgvXlswLTlhLWZdKyQvKXx8YS5tYXRjaCgvXlswLTlBLUZdKyQvKSkpe3JldHVybiB0cnVlfWVsc2V7cmV0dXJuIGZhbHNlfX07S0pVUi5sYW5nLlN0cmluZy5pc0Jhc2U2ND1mdW5jdGlvbihhKXthPWEucmVwbGFjZSgvXFxzKy9nLFwiXCIpO2lmKGEubWF0Y2goL15bMC05QS1aYS16K1xcL10rPXswLDN9JC8pJiZhLmxlbmd0aCU0PT0wKXtyZXR1cm4gdHJ1ZX1lbHNle3JldHVybiBmYWxzZX19O0tKVVIubGFuZy5TdHJpbmcuaXNCYXNlNjRVUkw9ZnVuY3Rpb24oYSl7aWYoYS5tYXRjaCgvWysvPV0vKSl7cmV0dXJuIGZhbHNlfWE9YjY0dXRvYjY0KGEpO3JldHVybiBLSlVSLmxhbmcuU3RyaW5nLmlzQmFzZTY0KGEpfTtLSlVSLmxhbmcuU3RyaW5nLmlzSW50ZWdlckFycmF5PWZ1bmN0aW9uKGEpe2E9YS5yZXBsYWNlKC9cXHMrL2csXCJcIik7aWYoYS5tYXRjaCgvXlxcW1swLTksXStcXF0kLykpe3JldHVybiB0cnVlfWVsc2V7cmV0dXJuIGZhbHNlfX07ZnVuY3Rpb24gaGV4dG9wb3NoZXgoYSl7aWYoYS5sZW5ndGglMj09MSl7cmV0dXJuXCIwXCIrYX1pZihhLnN1YnN0cigwLDEpPlwiN1wiKXtyZXR1cm5cIjAwXCIrYX1yZXR1cm4gYX1mdW5jdGlvbiBpbnRhcnlzdHJ0b2hleChiKXtiPWIucmVwbGFjZSgvXlxccypcXFtcXHMqLyxcIlwiKTtiPWIucmVwbGFjZSgvXFxzKlxcXVxccyokLyxcIlwiKTtiPWIucmVwbGFjZSgvXFxzKi9nLFwiXCIpO3RyeXt2YXIgYz1iLnNwbGl0KC8sLykubWFwKGZ1bmN0aW9uKGcsZSxoKXt2YXIgZj1wYXJzZUludChnKTtpZihmPDB8fDI1NTxmKXt0aHJvd1wiaW50ZWdlciBub3QgaW4gcmFuZ2UgMC0yNTVcIn12YXIgZD0oXCIwMFwiK2YudG9TdHJpbmcoMTYpKS5zbGljZSgtMik7cmV0dXJuIGR9KS5qb2luKFwiXCIpO3JldHVybiBjfWNhdGNoKGEpe3Rocm93XCJtYWxmb3JtZWQgaW50ZWdlciBhcnJheSBzdHJpbmc6IFwiK2F9fXZhciBzdHJkaWZmaWR4PWZ1bmN0aW9uKGMsYSl7dmFyIGQ9Yy5sZW5ndGg7aWYoYy5sZW5ndGg+YS5sZW5ndGgpe2Q9YS5sZW5ndGh9Zm9yKHZhciBiPTA7YjxkO2IrKyl7aWYoYy5jaGFyQ29kZUF0KGIpIT1hLmNoYXJDb2RlQXQoYikpe3JldHVybiBifX1pZihjLmxlbmd0aCE9YS5sZW5ndGgpe3JldHVybiBkfXJldHVybiAtMX07XG5pZih0eXBlb2YgS0pVUj09XCJ1bmRlZmluZWRcInx8IUtKVVIpe0tKVVI9e319aWYodHlwZW9mIEtKVVIuY3J5cHRvPT1cInVuZGVmaW5lZFwifHwhS0pVUi5jcnlwdG8pe0tKVVIuY3J5cHRvPXt9fUtKVVIuY3J5cHRvLlV0aWw9bmV3IGZ1bmN0aW9uKCl7dGhpcy5ESUdFU1RJTkZPSEVBRD17c2hhMTpcIjMwMjEzMDA5MDYwNTJiMGUwMzAyMWEwNTAwMDQxNFwiLHNoYTIyNDpcIjMwMmQzMDBkMDYwOTYwODY0ODAxNjUwMzA0MDIwNDA1MDAwNDFjXCIsc2hhMjU2OlwiMzAzMTMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjAxMDUwMDA0MjBcIixzaGEzODQ6XCIzMDQxMzAwZDA2MDk2MDg2NDgwMTY1MDMwNDAyMDIwNTAwMDQzMFwiLHNoYTUxMjpcIjMwNTEzMDBkMDYwOTYwODY0ODAxNjUwMzA0MDIwMzA1MDAwNDQwXCIsbWQyOlwiMzAyMDMwMGMwNjA4MmE4NjQ4ODZmNzBkMDIwMjA1MDAwNDEwXCIsbWQ1OlwiMzAyMDMwMGMwNjA4MmE4NjQ4ODZmNzBkMDIwNTA1MDAwNDEwXCIscmlwZW1kMTYwOlwiMzAyMTMwMDkwNjA1MmIyNDAzMDIwMTA1MDAwNDE0XCIsfTt0aGlzLkRFRkFVTFRQUk9WSURFUj17bWQ1OlwiY3J5cHRvanNcIixzaGExOlwiY3J5cHRvanNcIixzaGEyMjQ6XCJjcnlwdG9qc1wiLHNoYTI1NjpcImNyeXB0b2pzXCIsc2hhMzg0OlwiY3J5cHRvanNcIixzaGE1MTI6XCJjcnlwdG9qc1wiLHJpcGVtZDE2MDpcImNyeXB0b2pzXCIsaG1hY21kNTpcImNyeXB0b2pzXCIsaG1hY3NoYTE6XCJjcnlwdG9qc1wiLGhtYWNzaGEyMjQ6XCJjcnlwdG9qc1wiLGhtYWNzaGEyNTY6XCJjcnlwdG9qc1wiLGhtYWNzaGEzODQ6XCJjcnlwdG9qc1wiLGhtYWNzaGE1MTI6XCJjcnlwdG9qc1wiLGhtYWNyaXBlbWQxNjA6XCJjcnlwdG9qc1wiLE1ENXdpdGhSU0E6XCJjcnlwdG9qcy9qc3JzYVwiLFNIQTF3aXRoUlNBOlwiY3J5cHRvanMvanNyc2FcIixTSEEyMjR3aXRoUlNBOlwiY3J5cHRvanMvanNyc2FcIixTSEEyNTZ3aXRoUlNBOlwiY3J5cHRvanMvanNyc2FcIixTSEEzODR3aXRoUlNBOlwiY3J5cHRvanMvanNyc2FcIixTSEE1MTJ3aXRoUlNBOlwiY3J5cHRvanMvanNyc2FcIixSSVBFTUQxNjB3aXRoUlNBOlwiY3J5cHRvanMvanNyc2FcIixNRDV3aXRoRUNEU0E6XCJjcnlwdG9qcy9qc3JzYVwiLFNIQTF3aXRoRUNEU0E6XCJjcnlwdG9qcy9qc3JzYVwiLFNIQTIyNHdpdGhFQ0RTQTpcImNyeXB0b2pzL2pzcnNhXCIsU0hBMjU2d2l0aEVDRFNBOlwiY3J5cHRvanMvanNyc2FcIixTSEEzODR3aXRoRUNEU0E6XCJjcnlwdG9qcy9qc3JzYVwiLFNIQTUxMndpdGhFQ0RTQTpcImNyeXB0b2pzL2pzcnNhXCIsUklQRU1EMTYwd2l0aEVDRFNBOlwiY3J5cHRvanMvanNyc2FcIixTSEExd2l0aERTQTpcImNyeXB0b2pzL2pzcnNhXCIsU0hBMjI0d2l0aERTQTpcImNyeXB0b2pzL2pzcnNhXCIsU0hBMjU2d2l0aERTQTpcImNyeXB0b2pzL2pzcnNhXCIsTUQ1d2l0aFJTQWFuZE1HRjE6XCJjcnlwdG9qcy9qc3JzYVwiLFNIQTF3aXRoUlNBYW5kTUdGMTpcImNyeXB0b2pzL2pzcnNhXCIsU0hBMjI0d2l0aFJTQWFuZE1HRjE6XCJjcnlwdG9qcy9qc3JzYVwiLFNIQTI1NndpdGhSU0FhbmRNR0YxOlwiY3J5cHRvanMvanNyc2FcIixTSEEzODR3aXRoUlNBYW5kTUdGMTpcImNyeXB0b2pzL2pzcnNhXCIsU0hBNTEyd2l0aFJTQWFuZE1HRjE6XCJjcnlwdG9qcy9qc3JzYVwiLFJJUEVNRDE2MHdpdGhSU0FhbmRNR0YxOlwiY3J5cHRvanMvanNyc2FcIix9O3RoaXMuQ1JZUFRPSlNNRVNTQUdFRElHRVNUTkFNRT17bWQ1OkNyeXB0b0pTLmFsZ28uTUQ1LHNoYTE6Q3J5cHRvSlMuYWxnby5TSEExLHNoYTIyNDpDcnlwdG9KUy5hbGdvLlNIQTIyNCxzaGEyNTY6Q3J5cHRvSlMuYWxnby5TSEEyNTYsc2hhMzg0OkNyeXB0b0pTLmFsZ28uU0hBMzg0LHNoYTUxMjpDcnlwdG9KUy5hbGdvLlNIQTUxMixyaXBlbWQxNjA6Q3J5cHRvSlMuYWxnby5SSVBFTUQxNjB9O3RoaXMuZ2V0RGlnZXN0SW5mb0hleD1mdW5jdGlvbihhLGIpe2lmKHR5cGVvZiB0aGlzLkRJR0VTVElORk9IRUFEW2JdPT1cInVuZGVmaW5lZFwiKXt0aHJvd1wiYWxnIG5vdCBzdXBwb3J0ZWQgaW4gVXRpbC5ESUdFU1RJTkZPSEVBRDogXCIrYn1yZXR1cm4gdGhpcy5ESUdFU1RJTkZPSEVBRFtiXSthfTt0aGlzLmdldFBhZGRlZERpZ2VzdEluZm9IZXg9ZnVuY3Rpb24oaCxhLGope3ZhciBjPXRoaXMuZ2V0RGlnZXN0SW5mb0hleChoLGEpO3ZhciBkPWovNDtpZihjLmxlbmd0aCsyMj5kKXt0aHJvd1wia2V5IGlzIHRvbyBzaG9ydCBmb3IgU2lnQWxnOiBrZXlsZW49XCIraitcIixcIithfXZhciBiPVwiMDAwMVwiO3ZhciBrPVwiMDBcIitjO3ZhciBnPVwiXCI7dmFyIGw9ZC1iLmxlbmd0aC1rLmxlbmd0aDtmb3IodmFyIGY9MDtmPGw7Zis9Mil7Zys9XCJmZlwifXZhciBlPWIrZytrO3JldHVybiBlfTt0aGlzLmhhc2hTdHJpbmc9ZnVuY3Rpb24oYSxjKXt2YXIgYj1uZXcgS0pVUi5jcnlwdG8uTWVzc2FnZURpZ2VzdCh7YWxnOmN9KTtyZXR1cm4gYi5kaWdlc3RTdHJpbmcoYSl9O3RoaXMuaGFzaEhleD1mdW5jdGlvbihiLGMpe3ZhciBhPW5ldyBLSlVSLmNyeXB0by5NZXNzYWdlRGlnZXN0KHthbGc6Y30pO3JldHVybiBhLmRpZ2VzdEhleChiKX07dGhpcy5zaGExPWZ1bmN0aW9uKGEpe3ZhciBiPW5ldyBLSlVSLmNyeXB0by5NZXNzYWdlRGlnZXN0KHthbGc6XCJzaGExXCIscHJvdjpcImNyeXB0b2pzXCJ9KTtyZXR1cm4gYi5kaWdlc3RTdHJpbmcoYSl9O3RoaXMuc2hhMjU2PWZ1bmN0aW9uKGEpe3ZhciBiPW5ldyBLSlVSLmNyeXB0by5NZXNzYWdlRGlnZXN0KHthbGc6XCJzaGEyNTZcIixwcm92OlwiY3J5cHRvanNcIn0pO3JldHVybiBiLmRpZ2VzdFN0cmluZyhhKX07dGhpcy5zaGEyNTZIZXg9ZnVuY3Rpb24oYSl7dmFyIGI9bmV3IEtKVVIuY3J5cHRvLk1lc3NhZ2VEaWdlc3Qoe2FsZzpcInNoYTI1NlwiLHByb3Y6XCJjcnlwdG9qc1wifSk7cmV0dXJuIGIuZGlnZXN0SGV4KGEpfTt0aGlzLnNoYTUxMj1mdW5jdGlvbihhKXt2YXIgYj1uZXcgS0pVUi5jcnlwdG8uTWVzc2FnZURpZ2VzdCh7YWxnOlwic2hhNTEyXCIscHJvdjpcImNyeXB0b2pzXCJ9KTtyZXR1cm4gYi5kaWdlc3RTdHJpbmcoYSl9O3RoaXMuc2hhNTEySGV4PWZ1bmN0aW9uKGEpe3ZhciBiPW5ldyBLSlVSLmNyeXB0by5NZXNzYWdlRGlnZXN0KHthbGc6XCJzaGE1MTJcIixwcm92OlwiY3J5cHRvanNcIn0pO3JldHVybiBiLmRpZ2VzdEhleChhKX19O0tKVVIuY3J5cHRvLlV0aWwubWQ1PWZ1bmN0aW9uKGEpe3ZhciBiPW5ldyBLSlVSLmNyeXB0by5NZXNzYWdlRGlnZXN0KHthbGc6XCJtZDVcIixwcm92OlwiY3J5cHRvanNcIn0pO3JldHVybiBiLmRpZ2VzdFN0cmluZyhhKX07S0pVUi5jcnlwdG8uVXRpbC5yaXBlbWQxNjA9ZnVuY3Rpb24oYSl7dmFyIGI9bmV3IEtKVVIuY3J5cHRvLk1lc3NhZ2VEaWdlc3Qoe2FsZzpcInJpcGVtZDE2MFwiLHByb3Y6XCJjcnlwdG9qc1wifSk7cmV0dXJuIGIuZGlnZXN0U3RyaW5nKGEpfTtLSlVSLmNyeXB0by5VdGlsLlNFQ1VSRVJBTkRPTUdFTj1uZXcgU2VjdXJlUmFuZG9tKCk7S0pVUi5jcnlwdG8uVXRpbC5nZXRSYW5kb21IZXhPZk5ieXRlcz1mdW5jdGlvbihiKXt2YXIgYT1uZXcgQXJyYXkoYik7S0pVUi5jcnlwdG8uVXRpbC5TRUNVUkVSQU5ET01HRU4ubmV4dEJ5dGVzKGEpO3JldHVybiBCQXRvaGV4KGEpfTtLSlVSLmNyeXB0by5VdGlsLmdldFJhbmRvbUJpZ0ludGVnZXJPZk5ieXRlcz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3IEJpZ0ludGVnZXIoS0pVUi5jcnlwdG8uVXRpbC5nZXRSYW5kb21IZXhPZk5ieXRlcyhhKSwxNil9O0tKVVIuY3J5cHRvLlV0aWwuZ2V0UmFuZG9tSGV4T2ZOYml0cz1mdW5jdGlvbihkKXt2YXIgYz1kJTg7dmFyIGE9KGQtYykvODt2YXIgYj1uZXcgQXJyYXkoYSsxKTtLSlVSLmNyeXB0by5VdGlsLlNFQ1VSRVJBTkRPTUdFTi5uZXh0Qnl0ZXMoYik7YlswXT0oKCgyNTU8PGMpJjI1NSleMjU1KSZiWzBdO3JldHVybiBCQXRvaGV4KGIpfTtLSlVSLmNyeXB0by5VdGlsLmdldFJhbmRvbUJpZ0ludGVnZXJPZk5iaXRzPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcgQmlnSW50ZWdlcihLSlVSLmNyeXB0by5VdGlsLmdldFJhbmRvbUhleE9mTmJpdHMoYSksMTYpfTtLSlVSLmNyeXB0by5VdGlsLmdldFJhbmRvbUJpZ0ludGVnZXJaZXJvVG9NYXg9ZnVuY3Rpb24oYil7dmFyIGE9Yi5iaXRMZW5ndGgoKTt3aGlsZSgxKXt2YXIgYz1LSlVSLmNyeXB0by5VdGlsLmdldFJhbmRvbUJpZ0ludGVnZXJPZk5iaXRzKGEpO2lmKGIuY29tcGFyZVRvKGMpIT0tMSl7cmV0dXJuIGN9fX07S0pVUi5jcnlwdG8uVXRpbC5nZXRSYW5kb21CaWdJbnRlZ2VyTWluVG9NYXg9ZnVuY3Rpb24oZSxiKXt2YXIgYz1lLmNvbXBhcmVUbyhiKTtpZihjPT0xKXt0aHJvd1wiYmlNaW4gaXMgZ3JlYXRlciB0aGFuIGJpTWF4XCJ9aWYoYz09MCl7cmV0dXJuIGV9dmFyIGE9Yi5zdWJ0cmFjdChlKTt2YXIgZD1LSlVSLmNyeXB0by5VdGlsLmdldFJhbmRvbUJpZ0ludGVnZXJaZXJvVG9NYXgoYSk7cmV0dXJuIGQuYWRkKGUpfTtLSlVSLmNyeXB0by5NZXNzYWdlRGlnZXN0PWZ1bmN0aW9uKGMpe3ZhciBiPW51bGw7dmFyIGE9bnVsbDt2YXIgZD1udWxsO3RoaXMuc2V0QWxnQW5kUHJvdmlkZXI9ZnVuY3Rpb24oZyxmKXtnPUtKVVIuY3J5cHRvLk1lc3NhZ2VEaWdlc3QuZ2V0Q2Fub25pY2FsQWxnTmFtZShnKTtpZihnIT09bnVsbCYmZj09PXVuZGVmaW5lZCl7Zj1LSlVSLmNyeXB0by5VdGlsLkRFRkFVTFRQUk9WSURFUltnXX1pZihcIjptZDU6c2hhMTpzaGEyMjQ6c2hhMjU2OnNoYTM4NDpzaGE1MTI6cmlwZW1kMTYwOlwiLmluZGV4T2YoZykhPS0xJiZmPT1cImNyeXB0b2pzXCIpe3RyeXt0aGlzLm1kPUtKVVIuY3J5cHRvLlV0aWwuQ1JZUFRPSlNNRVNTQUdFRElHRVNUTkFNRVtnXS5jcmVhdGUoKX1jYXRjaChlKXt0aHJvd1wic2V0QWxnQW5kUHJvdmlkZXIgaGFzaCBhbGcgc2V0IGZhaWwgYWxnPVwiK2crXCIvXCIrZX10aGlzLnVwZGF0ZVN0cmluZz1mdW5jdGlvbihoKXt0aGlzLm1kLnVwZGF0ZShoKX07dGhpcy51cGRhdGVIZXg9ZnVuY3Rpb24oaCl7dmFyIGk9Q3J5cHRvSlMuZW5jLkhleC5wYXJzZShoKTt0aGlzLm1kLnVwZGF0ZShpKX07dGhpcy5kaWdlc3Q9ZnVuY3Rpb24oKXt2YXIgaD10aGlzLm1kLmZpbmFsaXplKCk7cmV0dXJuIGgudG9TdHJpbmcoQ3J5cHRvSlMuZW5jLkhleCl9O3RoaXMuZGlnZXN0U3RyaW5nPWZ1bmN0aW9uKGgpe3RoaXMudXBkYXRlU3RyaW5nKGgpO3JldHVybiB0aGlzLmRpZ2VzdCgpfTt0aGlzLmRpZ2VzdEhleD1mdW5jdGlvbihoKXt0aGlzLnVwZGF0ZUhleChoKTtyZXR1cm4gdGhpcy5kaWdlc3QoKX19aWYoXCI6c2hhMjU2OlwiLmluZGV4T2YoZykhPS0xJiZmPT1cInNqY2xcIil7dHJ5e3RoaXMubWQ9bmV3IHNqY2wuaGFzaC5zaGEyNTYoKX1jYXRjaChlKXt0aHJvd1wic2V0QWxnQW5kUHJvdmlkZXIgaGFzaCBhbGcgc2V0IGZhaWwgYWxnPVwiK2crXCIvXCIrZX10aGlzLnVwZGF0ZVN0cmluZz1mdW5jdGlvbihoKXt0aGlzLm1kLnVwZGF0ZShoKX07dGhpcy51cGRhdGVIZXg9ZnVuY3Rpb24oaSl7dmFyIGg9c2pjbC5jb2RlYy5oZXgudG9CaXRzKGkpO3RoaXMubWQudXBkYXRlKGgpfTt0aGlzLmRpZ2VzdD1mdW5jdGlvbigpe3ZhciBoPXRoaXMubWQuZmluYWxpemUoKTtyZXR1cm4gc2pjbC5jb2RlYy5oZXguZnJvbUJpdHMoaCl9O3RoaXMuZGlnZXN0U3RyaW5nPWZ1bmN0aW9uKGgpe3RoaXMudXBkYXRlU3RyaW5nKGgpO3JldHVybiB0aGlzLmRpZ2VzdCgpfTt0aGlzLmRpZ2VzdEhleD1mdW5jdGlvbihoKXt0aGlzLnVwZGF0ZUhleChoKTtyZXR1cm4gdGhpcy5kaWdlc3QoKX19fTt0aGlzLnVwZGF0ZVN0cmluZz1mdW5jdGlvbihlKXt0aHJvd1widXBkYXRlU3RyaW5nKHN0cikgbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBhbGcvcHJvdjogXCIrdGhpcy5hbGdOYW1lK1wiL1wiK3RoaXMucHJvdk5hbWV9O3RoaXMudXBkYXRlSGV4PWZ1bmN0aW9uKGUpe3Rocm93XCJ1cGRhdGVIZXgoaGV4KSBub3Qgc3VwcG9ydGVkIGZvciB0aGlzIGFsZy9wcm92OiBcIit0aGlzLmFsZ05hbWUrXCIvXCIrdGhpcy5wcm92TmFtZX07dGhpcy5kaWdlc3Q9ZnVuY3Rpb24oKXt0aHJvd1wiZGlnZXN0KCkgbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBhbGcvcHJvdjogXCIrdGhpcy5hbGdOYW1lK1wiL1wiK3RoaXMucHJvdk5hbWV9O3RoaXMuZGlnZXN0U3RyaW5nPWZ1bmN0aW9uKGUpe3Rocm93XCJkaWdlc3RTdHJpbmcoc3RyKSBub3Qgc3VwcG9ydGVkIGZvciB0aGlzIGFsZy9wcm92OiBcIit0aGlzLmFsZ05hbWUrXCIvXCIrdGhpcy5wcm92TmFtZX07dGhpcy5kaWdlc3RIZXg9ZnVuY3Rpb24oZSl7dGhyb3dcImRpZ2VzdEhleChoZXgpIG5vdCBzdXBwb3J0ZWQgZm9yIHRoaXMgYWxnL3Byb3Y6IFwiK3RoaXMuYWxnTmFtZStcIi9cIit0aGlzLnByb3ZOYW1lfTtpZihjIT09dW5kZWZpbmVkKXtpZihjLmFsZyE9PXVuZGVmaW5lZCl7dGhpcy5hbGdOYW1lPWMuYWxnO2lmKGMucHJvdj09PXVuZGVmaW5lZCl7dGhpcy5wcm92TmFtZT1LSlVSLmNyeXB0by5VdGlsLkRFRkFVTFRQUk9WSURFUlt0aGlzLmFsZ05hbWVdfXRoaXMuc2V0QWxnQW5kUHJvdmlkZXIodGhpcy5hbGdOYW1lLHRoaXMucHJvdk5hbWUpfX19O0tKVVIuY3J5cHRvLk1lc3NhZ2VEaWdlc3QuZ2V0Q2Fub25pY2FsQWxnTmFtZT1mdW5jdGlvbihhKXtpZih0eXBlb2YgYT09PVwic3RyaW5nXCIpe2E9YS50b0xvd2VyQ2FzZSgpO2E9YS5yZXBsYWNlKC8tLyxcIlwiKX1yZXR1cm4gYX07S0pVUi5jcnlwdG8uTWVzc2FnZURpZ2VzdC5nZXRIYXNoTGVuZ3RoPWZ1bmN0aW9uKGMpe3ZhciBiPUtKVVIuY3J5cHRvLk1lc3NhZ2VEaWdlc3Q7dmFyIGE9Yi5nZXRDYW5vbmljYWxBbGdOYW1lKGMpO2lmKGIuSEFTSExFTkdUSFthXT09PXVuZGVmaW5lZCl7dGhyb3dcIm5vdCBzdXBwb3J0ZWQgYWxnb3JpdGhtOiBcIitjfXJldHVybiBiLkhBU0hMRU5HVEhbYV19O0tKVVIuY3J5cHRvLk1lc3NhZ2VEaWdlc3QuSEFTSExFTkdUSD17bWQ1OjE2LHNoYTE6MjAsc2hhMjI0OjI4LHNoYTI1NjozMixzaGEzODQ6NDgsc2hhNTEyOjY0LHJpcGVtZDE2MDoyMH07S0pVUi5jcnlwdG8uTWFjPWZ1bmN0aW9uKGQpe3ZhciBmPW51bGw7dmFyIGM9bnVsbDt2YXIgYT1udWxsO3ZhciBlPW51bGw7dmFyIGI9bnVsbDt0aGlzLnNldEFsZ0FuZFByb3ZpZGVyPWZ1bmN0aW9uKGssaSl7az1rLnRvTG93ZXJDYXNlKCk7aWYoaz09bnVsbCl7az1cImhtYWNzaGExXCJ9az1rLnRvTG93ZXJDYXNlKCk7aWYoay5zdWJzdHIoMCw0KSE9XCJobWFjXCIpe3Rocm93XCJzZXRBbGdBbmRQcm92aWRlciB1bnN1cHBvcnRlZCBITUFDIGFsZzogXCIra31pZihpPT09dW5kZWZpbmVkKXtpPUtKVVIuY3J5cHRvLlV0aWwuREVGQVVMVFBST1ZJREVSW2tdfXRoaXMuYWxnUHJvdj1rK1wiL1wiK2k7dmFyIGc9ay5zdWJzdHIoNCk7aWYoXCI6bWQ1OnNoYTE6c2hhMjI0OnNoYTI1NjpzaGEzODQ6c2hhNTEyOnJpcGVtZDE2MDpcIi5pbmRleE9mKGcpIT0tMSYmaT09XCJjcnlwdG9qc1wiKXt0cnl7dmFyIGo9S0pVUi5jcnlwdG8uVXRpbC5DUllQVE9KU01FU1NBR0VESUdFU1ROQU1FW2ddO3RoaXMubWFjPUNyeXB0b0pTLmFsZ28uSE1BQy5jcmVhdGUoaix0aGlzLnBhc3MpfWNhdGNoKGgpe3Rocm93XCJzZXRBbGdBbmRQcm92aWRlciBoYXNoIGFsZyBzZXQgZmFpbCBoYXNoQWxnPVwiK2crXCIvXCIraH10aGlzLnVwZGF0ZVN0cmluZz1mdW5jdGlvbihsKXt0aGlzLm1hYy51cGRhdGUobCl9O3RoaXMudXBkYXRlSGV4PWZ1bmN0aW9uKGwpe3ZhciBtPUNyeXB0b0pTLmVuYy5IZXgucGFyc2UobCk7dGhpcy5tYWMudXBkYXRlKG0pfTt0aGlzLmRvRmluYWw9ZnVuY3Rpb24oKXt2YXIgbD10aGlzLm1hYy5maW5hbGl6ZSgpO3JldHVybiBsLnRvU3RyaW5nKENyeXB0b0pTLmVuYy5IZXgpfTt0aGlzLmRvRmluYWxTdHJpbmc9ZnVuY3Rpb24obCl7dGhpcy51cGRhdGVTdHJpbmcobCk7cmV0dXJuIHRoaXMuZG9GaW5hbCgpfTt0aGlzLmRvRmluYWxIZXg9ZnVuY3Rpb24obCl7dGhpcy51cGRhdGVIZXgobCk7cmV0dXJuIHRoaXMuZG9GaW5hbCgpfX19O3RoaXMudXBkYXRlU3RyaW5nPWZ1bmN0aW9uKGcpe3Rocm93XCJ1cGRhdGVTdHJpbmcoc3RyKSBub3Qgc3VwcG9ydGVkIGZvciB0aGlzIGFsZy9wcm92OiBcIit0aGlzLmFsZ1Byb3Z9O3RoaXMudXBkYXRlSGV4PWZ1bmN0aW9uKGcpe3Rocm93XCJ1cGRhdGVIZXgoaGV4KSBub3Qgc3VwcG9ydGVkIGZvciB0aGlzIGFsZy9wcm92OiBcIit0aGlzLmFsZ1Byb3Z9O3RoaXMuZG9GaW5hbD1mdW5jdGlvbigpe3Rocm93XCJkaWdlc3QoKSBub3Qgc3VwcG9ydGVkIGZvciB0aGlzIGFsZy9wcm92OiBcIit0aGlzLmFsZ1Byb3Z9O3RoaXMuZG9GaW5hbFN0cmluZz1mdW5jdGlvbihnKXt0aHJvd1wiZGlnZXN0U3RyaW5nKHN0cikgbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBhbGcvcHJvdjogXCIrdGhpcy5hbGdQcm92fTt0aGlzLmRvRmluYWxIZXg9ZnVuY3Rpb24oZyl7dGhyb3dcImRpZ2VzdEhleChoZXgpIG5vdCBzdXBwb3J0ZWQgZm9yIHRoaXMgYWxnL3Byb3Y6IFwiK3RoaXMuYWxnUHJvdn07dGhpcy5zZXRQYXNzd29yZD1mdW5jdGlvbihoKXtpZih0eXBlb2YgaD09XCJzdHJpbmdcIil7dmFyIGc9aDtpZihoLmxlbmd0aCUyPT0xfHwhaC5tYXRjaCgvXlswLTlBLUZhLWZdKyQvKSl7Zz1yc3RydG9oZXgoaCl9dGhpcy5wYXNzPUNyeXB0b0pTLmVuYy5IZXgucGFyc2UoZyk7cmV0dXJufWlmKHR5cGVvZiBoIT1cIm9iamVjdFwiKXt0aHJvd1wiS0pVUi5jcnlwdG8uTWFjIHVuc3VwcG9ydGVkIHBhc3N3b3JkIHR5cGU6IFwiK2h9dmFyIGc9bnVsbDtpZihoLmhleCE9PXVuZGVmaW5lZCl7aWYoaC5oZXgubGVuZ3RoJTIhPTB8fCFoLmhleC5tYXRjaCgvXlswLTlBLUZhLWZdKyQvKSl7dGhyb3dcIk1hYzogd3JvbmcgaGV4IHBhc3N3b3JkOiBcIitoLmhleH1nPWguaGV4fWlmKGgudXRmOCE9PXVuZGVmaW5lZCl7Zz11dGY4dG9oZXgoaC51dGY4KX1pZihoLnJzdHIhPT11bmRlZmluZWQpe2c9cnN0cnRvaGV4KGgucnN0cil9aWYoaC5iNjQhPT11bmRlZmluZWQpe2c9YjY0dG9oZXgoaC5iNjQpfWlmKGguYjY0dSE9PXVuZGVmaW5lZCl7Zz1iNjR1dG9oZXgoaC5iNjR1KX1pZihnPT1udWxsKXt0aHJvd1wiS0pVUi5jcnlwdG8uTWFjIHVuc3VwcG9ydGVkIHBhc3N3b3JkIHR5cGU6IFwiK2h9dGhpcy5wYXNzPUNyeXB0b0pTLmVuYy5IZXgucGFyc2UoZyl9O2lmKGQhPT11bmRlZmluZWQpe2lmKGQucGFzcyE9PXVuZGVmaW5lZCl7dGhpcy5zZXRQYXNzd29yZChkLnBhc3MpfWlmKGQuYWxnIT09dW5kZWZpbmVkKXt0aGlzLmFsZ05hbWU9ZC5hbGc7aWYoZC5wcm92PT09dW5kZWZpbmVkKXt0aGlzLnByb3ZOYW1lPUtKVVIuY3J5cHRvLlV0aWwuREVGQVVMVFBST1ZJREVSW3RoaXMuYWxnTmFtZV19dGhpcy5zZXRBbGdBbmRQcm92aWRlcih0aGlzLmFsZ05hbWUsdGhpcy5wcm92TmFtZSl9fX07S0pVUi5jcnlwdG8uU2lnbmF0dXJlPWZ1bmN0aW9uKG8pe3ZhciBxPW51bGw7dmFyIG49bnVsbDt2YXIgcj1udWxsO3ZhciBjPW51bGw7dmFyIGw9bnVsbDt2YXIgZD1udWxsO3ZhciBrPW51bGw7dmFyIGg9bnVsbDt2YXIgcD1udWxsO3ZhciBlPW51bGw7dmFyIGI9LTE7dmFyIGc9bnVsbDt2YXIgaj1udWxsO3ZhciBhPW51bGw7dmFyIGk9bnVsbDt2YXIgZj1udWxsO3RoaXMuX3NldEFsZ05hbWVzPWZ1bmN0aW9uKCl7dmFyIHM9dGhpcy5hbGdOYW1lLm1hdGNoKC9eKC4rKXdpdGgoLispJC8pO2lmKHMpe3RoaXMubWRBbGdOYW1lPXNbMV0udG9Mb3dlckNhc2UoKTt0aGlzLnB1YmtleUFsZ05hbWU9c1syXS50b0xvd2VyQ2FzZSgpfX07dGhpcy5femVyb1BhZGRpbmdPZlNpZ25hdHVyZT1mdW5jdGlvbih4LHcpe3ZhciB2PVwiXCI7dmFyIHQ9dy80LXgubGVuZ3RoO2Zvcih2YXIgdT0wO3U8dDt1Kyspe3Y9ditcIjBcIn1yZXR1cm4gdit4fTt0aGlzLnNldEFsZ0FuZFByb3ZpZGVyPWZ1bmN0aW9uKHUsdCl7dGhpcy5fc2V0QWxnTmFtZXMoKTtpZih0IT1cImNyeXB0b2pzL2pzcnNhXCIpe3Rocm93XCJwcm92aWRlciBub3Qgc3VwcG9ydGVkOiBcIit0fWlmKFwiOm1kNTpzaGExOnNoYTIyNDpzaGEyNTY6c2hhMzg0OnNoYTUxMjpyaXBlbWQxNjA6XCIuaW5kZXhPZih0aGlzLm1kQWxnTmFtZSkhPS0xKXt0cnl7dGhpcy5tZD1uZXcgS0pVUi5jcnlwdG8uTWVzc2FnZURpZ2VzdCh7YWxnOnRoaXMubWRBbGdOYW1lfSl9Y2F0Y2gocyl7dGhyb3dcInNldEFsZ0FuZFByb3ZpZGVyIGhhc2ggYWxnIHNldCBmYWlsIGFsZz1cIit0aGlzLm1kQWxnTmFtZStcIi9cIitzfXRoaXMuaW5pdD1mdW5jdGlvbih3LHgpe3ZhciB5PW51bGw7dHJ5e2lmKHg9PT11bmRlZmluZWQpe3k9S0VZVVRJTC5nZXRLZXkodyl9ZWxzZXt5PUtFWVVUSUwuZ2V0S2V5KHcseCl9fWNhdGNoKHYpe3Rocm93XCJpbml0IGZhaWxlZDpcIit2fWlmKHkuaXNQcml2YXRlPT09dHJ1ZSl7dGhpcy5wcnZLZXk9eTt0aGlzLnN0YXRlPVwiU0lHTlwifWVsc2V7aWYoeS5pc1B1YmxpYz09PXRydWUpe3RoaXMucHViS2V5PXk7dGhpcy5zdGF0ZT1cIlZFUklGWVwifWVsc2V7dGhyb3dcImluaXQgZmFpbGVkLjpcIit5fX19O3RoaXMudXBkYXRlU3RyaW5nPWZ1bmN0aW9uKHYpe3RoaXMubWQudXBkYXRlU3RyaW5nKHYpfTt0aGlzLnVwZGF0ZUhleD1mdW5jdGlvbih2KXt0aGlzLm1kLnVwZGF0ZUhleCh2KX07dGhpcy5zaWduPWZ1bmN0aW9uKCl7dGhpcy5zSGFzaEhleD10aGlzLm1kLmRpZ2VzdCgpO2lmKHR5cGVvZiB0aGlzLmVjcHJ2aGV4IT1cInVuZGVmaW5lZFwiJiZ0eXBlb2YgdGhpcy5lY2N1cnZlbmFtZSE9XCJ1bmRlZmluZWRcIil7dmFyIHY9bmV3IEtKVVIuY3J5cHRvLkVDRFNBKHtjdXJ2ZTp0aGlzLmVjY3VydmVuYW1lfSk7dGhpcy5oU2lnbj12LnNpZ25IZXgodGhpcy5zSGFzaEhleCx0aGlzLmVjcHJ2aGV4KX1lbHNle2lmKHRoaXMucHJ2S2V5IGluc3RhbmNlb2YgUlNBS2V5JiZ0aGlzLnB1YmtleUFsZ05hbWU9PT1cInJzYWFuZG1nZjFcIil7dGhpcy5oU2lnbj10aGlzLnBydktleS5zaWduV2l0aE1lc3NhZ2VIYXNoUFNTKHRoaXMuc0hhc2hIZXgsdGhpcy5tZEFsZ05hbWUsdGhpcy5wc3NTYWx0TGVuKX1lbHNle2lmKHRoaXMucHJ2S2V5IGluc3RhbmNlb2YgUlNBS2V5JiZ0aGlzLnB1YmtleUFsZ05hbWU9PT1cInJzYVwiKXt0aGlzLmhTaWduPXRoaXMucHJ2S2V5LnNpZ25XaXRoTWVzc2FnZUhhc2godGhpcy5zSGFzaEhleCx0aGlzLm1kQWxnTmFtZSl9ZWxzZXtpZih0aGlzLnBydktleSBpbnN0YW5jZW9mIEtKVVIuY3J5cHRvLkVDRFNBKXt0aGlzLmhTaWduPXRoaXMucHJ2S2V5LnNpZ25XaXRoTWVzc2FnZUhhc2godGhpcy5zSGFzaEhleCl9ZWxzZXtpZih0aGlzLnBydktleSBpbnN0YW5jZW9mIEtKVVIuY3J5cHRvLkRTQSl7dGhpcy5oU2lnbj10aGlzLnBydktleS5zaWduV2l0aE1lc3NhZ2VIYXNoKHRoaXMuc0hhc2hIZXgpfWVsc2V7dGhyb3dcIlNpZ25hdHVyZTogdW5zdXBwb3J0ZWQgcHJpdmF0ZSBrZXkgYWxnOiBcIit0aGlzLnB1YmtleUFsZ05hbWV9fX19fXJldHVybiB0aGlzLmhTaWdufTt0aGlzLnNpZ25TdHJpbmc9ZnVuY3Rpb24odil7dGhpcy51cGRhdGVTdHJpbmcodik7cmV0dXJuIHRoaXMuc2lnbigpfTt0aGlzLnNpZ25IZXg9ZnVuY3Rpb24odil7dGhpcy51cGRhdGVIZXgodik7cmV0dXJuIHRoaXMuc2lnbigpfTt0aGlzLnZlcmlmeT1mdW5jdGlvbih2KXt0aGlzLnNIYXNoSGV4PXRoaXMubWQuZGlnZXN0KCk7aWYodHlwZW9mIHRoaXMuZWNwdWJoZXghPVwidW5kZWZpbmVkXCImJnR5cGVvZiB0aGlzLmVjY3VydmVuYW1lIT1cInVuZGVmaW5lZFwiKXt2YXIgdz1uZXcgS0pVUi5jcnlwdG8uRUNEU0Eoe2N1cnZlOnRoaXMuZWNjdXJ2ZW5hbWV9KTtyZXR1cm4gdy52ZXJpZnlIZXgodGhpcy5zSGFzaEhleCx2LHRoaXMuZWNwdWJoZXgpfWVsc2V7aWYodGhpcy5wdWJLZXkgaW5zdGFuY2VvZiBSU0FLZXkmJnRoaXMucHVia2V5QWxnTmFtZT09PVwicnNhYW5kbWdmMVwiKXtyZXR1cm4gdGhpcy5wdWJLZXkudmVyaWZ5V2l0aE1lc3NhZ2VIYXNoUFNTKHRoaXMuc0hhc2hIZXgsdix0aGlzLm1kQWxnTmFtZSx0aGlzLnBzc1NhbHRMZW4pfWVsc2V7aWYodGhpcy5wdWJLZXkgaW5zdGFuY2VvZiBSU0FLZXkmJnRoaXMucHVia2V5QWxnTmFtZT09PVwicnNhXCIpe3JldHVybiB0aGlzLnB1YktleS52ZXJpZnlXaXRoTWVzc2FnZUhhc2godGhpcy5zSGFzaEhleCx2KX1lbHNle2lmKEtKVVIuY3J5cHRvLkVDRFNBIT09dW5kZWZpbmVkJiZ0aGlzLnB1YktleSBpbnN0YW5jZW9mIEtKVVIuY3J5cHRvLkVDRFNBKXtyZXR1cm4gdGhpcy5wdWJLZXkudmVyaWZ5V2l0aE1lc3NhZ2VIYXNoKHRoaXMuc0hhc2hIZXgsdil9ZWxzZXtpZihLSlVSLmNyeXB0by5EU0EhPT11bmRlZmluZWQmJnRoaXMucHViS2V5IGluc3RhbmNlb2YgS0pVUi5jcnlwdG8uRFNBKXtyZXR1cm4gdGhpcy5wdWJLZXkudmVyaWZ5V2l0aE1lc3NhZ2VIYXNoKHRoaXMuc0hhc2hIZXgsdil9ZWxzZXt0aHJvd1wiU2lnbmF0dXJlOiB1bnN1cHBvcnRlZCBwdWJsaWMga2V5IGFsZzogXCIrdGhpcy5wdWJrZXlBbGdOYW1lfX19fX19fX07dGhpcy5pbml0PWZ1bmN0aW9uKHMsdCl7dGhyb3dcImluaXQoa2V5LCBwYXNzKSBub3Qgc3VwcG9ydGVkIGZvciB0aGlzIGFsZzpwcm92PVwiK3RoaXMuYWxnUHJvdk5hbWV9O3RoaXMudXBkYXRlU3RyaW5nPWZ1bmN0aW9uKHMpe3Rocm93XCJ1cGRhdGVTdHJpbmcoc3RyKSBub3Qgc3VwcG9ydGVkIGZvciB0aGlzIGFsZzpwcm92PVwiK3RoaXMuYWxnUHJvdk5hbWV9O3RoaXMudXBkYXRlSGV4PWZ1bmN0aW9uKHMpe3Rocm93XCJ1cGRhdGVIZXgoaGV4KSBub3Qgc3VwcG9ydGVkIGZvciB0aGlzIGFsZzpwcm92PVwiK3RoaXMuYWxnUHJvdk5hbWV9O3RoaXMuc2lnbj1mdW5jdGlvbigpe3Rocm93XCJzaWduKCkgbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBhbGc6cHJvdj1cIit0aGlzLmFsZ1Byb3ZOYW1lfTt0aGlzLnNpZ25TdHJpbmc9ZnVuY3Rpb24ocyl7dGhyb3dcImRpZ2VzdFN0cmluZyhzdHIpIG5vdCBzdXBwb3J0ZWQgZm9yIHRoaXMgYWxnOnByb3Y9XCIrdGhpcy5hbGdQcm92TmFtZX07dGhpcy5zaWduSGV4PWZ1bmN0aW9uKHMpe3Rocm93XCJkaWdlc3RIZXgoaGV4KSBub3Qgc3VwcG9ydGVkIGZvciB0aGlzIGFsZzpwcm92PVwiK3RoaXMuYWxnUHJvdk5hbWV9O3RoaXMudmVyaWZ5PWZ1bmN0aW9uKHMpe3Rocm93XCJ2ZXJpZnkoaFNpZ1ZhbCkgbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBhbGc6cHJvdj1cIit0aGlzLmFsZ1Byb3ZOYW1lfTt0aGlzLmluaXRQYXJhbXM9bztpZihvIT09dW5kZWZpbmVkKXtpZihvLmFsZyE9PXVuZGVmaW5lZCl7dGhpcy5hbGdOYW1lPW8uYWxnO2lmKG8ucHJvdj09PXVuZGVmaW5lZCl7dGhpcy5wcm92TmFtZT1LSlVSLmNyeXB0by5VdGlsLkRFRkFVTFRQUk9WSURFUlt0aGlzLmFsZ05hbWVdfWVsc2V7dGhpcy5wcm92TmFtZT1vLnByb3Z9dGhpcy5hbGdQcm92TmFtZT10aGlzLmFsZ05hbWUrXCI6XCIrdGhpcy5wcm92TmFtZTt0aGlzLnNldEFsZ0FuZFByb3ZpZGVyKHRoaXMuYWxnTmFtZSx0aGlzLnByb3ZOYW1lKTt0aGlzLl9zZXRBbGdOYW1lcygpfWlmKG8ucHNzc2FsdGxlbiE9PXVuZGVmaW5lZCl7dGhpcy5wc3NTYWx0TGVuPW8ucHNzc2FsdGxlbn1pZihvLnBydmtleXBlbSE9PXVuZGVmaW5lZCl7aWYoby5wcnZrZXlwYXMhPT11bmRlZmluZWQpe3Rocm93XCJib3RoIHBydmtleXBlbSBhbmQgcHJ2a2V5cGFzIHBhcmFtZXRlcnMgbm90IHN1cHBvcnRlZFwifWVsc2V7dHJ5e3ZhciBxPUtFWVVUSUwuZ2V0S2V5KG8ucHJ2a2V5cGVtKTt0aGlzLmluaXQocSl9Y2F0Y2gobSl7dGhyb3dcImZhdGFsIGVycm9yIHRvIGxvYWQgcGVtIHByaXZhdGUga2V5OiBcIittfX19fX07S0pVUi5jcnlwdG8uQ2lwaGVyPWZ1bmN0aW9uKGEpe307S0pVUi5jcnlwdG8uQ2lwaGVyLmVuY3J5cHQ9ZnVuY3Rpb24oZSxmLGQpe2lmKGYgaW5zdGFuY2VvZiBSU0FLZXkmJmYuaXNQdWJsaWMpe3ZhciBjPUtKVVIuY3J5cHRvLkNpcGhlci5nZXRBbGdCeUtleUFuZE5hbWUoZixkKTtpZihjPT09XCJSU0FcIil7cmV0dXJuIGYuZW5jcnlwdChlKX1pZihjPT09XCJSU0FPQUVQXCIpe3JldHVybiBmLmVuY3J5cHRPQUVQKGUsXCJzaGExXCIpfXZhciBiPWMubWF0Y2goL15SU0FPQUVQKFxcZCspJC8pO2lmKGIhPT1udWxsKXtyZXR1cm4gZi5lbmNyeXB0T0FFUChlLFwic2hhXCIrYlsxXSl9dGhyb3dcIkNpcGhlci5lbmNyeXB0OiB1bnN1cHBvcnRlZCBhbGdvcml0aG0gZm9yIFJTQUtleTogXCIrZH1lbHNle3Rocm93XCJDaXBoZXIuZW5jcnlwdDogdW5zdXBwb3J0ZWQga2V5IG9yIGFsZ29yaXRobVwifX07S0pVUi5jcnlwdG8uQ2lwaGVyLmRlY3J5cHQ9ZnVuY3Rpb24oZSxmLGQpe2lmKGYgaW5zdGFuY2VvZiBSU0FLZXkmJmYuaXNQcml2YXRlKXt2YXIgYz1LSlVSLmNyeXB0by5DaXBoZXIuZ2V0QWxnQnlLZXlBbmROYW1lKGYsZCk7aWYoYz09PVwiUlNBXCIpe3JldHVybiBmLmRlY3J5cHQoZSl9aWYoYz09PVwiUlNBT0FFUFwiKXtyZXR1cm4gZi5kZWNyeXB0T0FFUChlLFwic2hhMVwiKX12YXIgYj1jLm1hdGNoKC9eUlNBT0FFUChcXGQrKSQvKTtpZihiIT09bnVsbCl7cmV0dXJuIGYuZGVjcnlwdE9BRVAoZSxcInNoYVwiK2JbMV0pfXRocm93XCJDaXBoZXIuZGVjcnlwdDogdW5zdXBwb3J0ZWQgYWxnb3JpdGhtIGZvciBSU0FLZXk6IFwiK2R9ZWxzZXt0aHJvd1wiQ2lwaGVyLmRlY3J5cHQ6IHVuc3VwcG9ydGVkIGtleSBvciBhbGdvcml0aG1cIn19O0tKVVIuY3J5cHRvLkNpcGhlci5nZXRBbGdCeUtleUFuZE5hbWU9ZnVuY3Rpb24oYixhKXtpZihiIGluc3RhbmNlb2YgUlNBS2V5KXtpZihcIjpSU0E6UlNBT0FFUDpSU0FPQUVQMjI0OlJTQU9BRVAyNTY6UlNBT0FFUDM4NDpSU0FPQUVQNTEyOlwiLmluZGV4T2YoYSkhPS0xKXtyZXR1cm4gYX1pZihhPT09bnVsbHx8YT09PXVuZGVmaW5lZCl7cmV0dXJuXCJSU0FcIn10aHJvd1wiZ2V0QWxnQnlLZXlBbmROYW1lOiBub3Qgc3VwcG9ydGVkIGFsZ29yaXRobSBuYW1lIGZvciBSU0FLZXk6IFwiK2F9dGhyb3dcImdldEFsZ0J5S2V5QW5kTmFtZTogbm90IHN1cHBvcnRlZCBhbGdvcml0aG0gbmFtZTogXCIrYX07S0pVUi5jcnlwdG8uT0lEPW5ldyBmdW5jdGlvbigpe3RoaXMub2lkaGV4Mm5hbWU9e1wiMmE4NjQ4ODZmNzBkMDEwMTAxXCI6XCJyc2FFbmNyeXB0aW9uXCIsXCIyYTg2NDhjZTNkMDIwMVwiOlwiZWNQdWJsaWNLZXlcIixcIjJhODY0OGNlMzgwNDAxXCI6XCJkc2FcIixcIjJhODY0OGNlM2QwMzAxMDdcIjpcInNlY3AyNTZyMVwiLFwiMmI4MTA0MDAxZlwiOlwic2VjcDE5MmsxXCIsXCIyYjgxMDQwMDIxXCI6XCJzZWNwMjI0cjFcIixcIjJiODEwNDAwMGFcIjpcInNlY3AyNTZrMVwiLFwiMmI4MTA0MDAyM1wiOlwic2VjcDUyMXIxXCIsXCIyYjgxMDQwMDIyXCI6XCJzZWNwMzg0cjFcIixcIjJhODY0OGNlMzgwNDAzXCI6XCJTSEExd2l0aERTQVwiLFwiNjA4NjQ4MDE2NTAzMDQwMzAxXCI6XCJTSEEyMjR3aXRoRFNBXCIsXCI2MDg2NDgwMTY1MDMwNDAzMDJcIjpcIlNIQTI1NndpdGhEU0FcIix9fTtcbmlmKHR5cGVvZiBLSlVSPT1cInVuZGVmaW5lZFwifHwhS0pVUil7S0pVUj17fX1pZih0eXBlb2YgS0pVUi5jcnlwdG89PVwidW5kZWZpbmVkXCJ8fCFLSlVSLmNyeXB0byl7S0pVUi5jcnlwdG89e319S0pVUi5jcnlwdG8uRUNEU0E9ZnVuY3Rpb24oaCl7dmFyIGU9XCJzZWNwMjU2cjFcIjt2YXIgZz1udWxsO3ZhciBiPW51bGw7dmFyIGY9bnVsbDt2YXIgYT1uZXcgU2VjdXJlUmFuZG9tKCk7dmFyIGQ9bnVsbDt0aGlzLnR5cGU9XCJFQ1wiO3RoaXMuaXNQcml2YXRlPWZhbHNlO3RoaXMuaXNQdWJsaWM9ZmFsc2U7ZnVuY3Rpb24gYyhzLG8scixuKXt2YXIgaj1NYXRoLm1heChvLmJpdExlbmd0aCgpLG4uYml0TGVuZ3RoKCkpO3ZhciB0PXMuYWRkMkQocik7dmFyIHE9cy5jdXJ2ZS5nZXRJbmZpbml0eSgpO2Zvcih2YXIgcD1qLTE7cD49MDstLXApe3E9cS50d2ljZTJEKCk7cS56PUJpZ0ludGVnZXIuT05FO2lmKG8udGVzdEJpdChwKSl7aWYobi50ZXN0Qml0KHApKXtxPXEuYWRkMkQodCl9ZWxzZXtxPXEuYWRkMkQocyl9fWVsc2V7aWYobi50ZXN0Qml0KHApKXtxPXEuYWRkMkQocil9fX1yZXR1cm4gcX10aGlzLmdldEJpZ1JhbmRvbT1mdW5jdGlvbihpKXtyZXR1cm4gbmV3IEJpZ0ludGVnZXIoaS5iaXRMZW5ndGgoKSxhKS5tb2QoaS5zdWJ0cmFjdChCaWdJbnRlZ2VyLk9ORSkpLmFkZChCaWdJbnRlZ2VyLk9ORSl9O3RoaXMuc2V0TmFtZWRDdXJ2ZT1mdW5jdGlvbihpKXt0aGlzLmVjcGFyYW1zPUtKVVIuY3J5cHRvLkVDUGFyYW1ldGVyREIuZ2V0QnlOYW1lKGkpO3RoaXMucHJ2S2V5SGV4PW51bGw7dGhpcy5wdWJLZXlIZXg9bnVsbDt0aGlzLmN1cnZlTmFtZT1pfTt0aGlzLnNldFByaXZhdGVLZXlIZXg9ZnVuY3Rpb24oaSl7dGhpcy5pc1ByaXZhdGU9dHJ1ZTt0aGlzLnBydktleUhleD1pfTt0aGlzLnNldFB1YmxpY0tleUhleD1mdW5jdGlvbihpKXt0aGlzLmlzUHVibGljPXRydWU7dGhpcy5wdWJLZXlIZXg9aX07dGhpcy5nZXRQdWJsaWNLZXlYWUhleD1mdW5jdGlvbigpe3ZhciBrPXRoaXMucHViS2V5SGV4O2lmKGsuc3Vic3RyKDAsMikhPT1cIjA0XCIpe3Rocm93XCJ0aGlzIG1ldGhvZCBzdXBwb3J0cyB1bmNvbXByZXNzZWQgZm9ybWF0KDA0KSBvbmx5XCJ9dmFyIGo9dGhpcy5lY3BhcmFtcy5rZXlsZW4vNDtpZihrLmxlbmd0aCE9PTIraioyKXt0aHJvd1wibWFsZm9ybWVkIHB1YmxpYyBrZXkgaGV4IGxlbmd0aFwifXZhciBpPXt9O2kueD1rLnN1YnN0cigyLGopO2kueT1rLnN1YnN0cigyK2opO3JldHVybiBpfTt0aGlzLmdldFNob3J0TklTVFBDdXJ2ZU5hbWU9ZnVuY3Rpb24oKXt2YXIgaT10aGlzLmN1cnZlTmFtZTtpZihpPT09XCJzZWNwMjU2cjFcInx8aT09PVwiTklTVCBQLTI1NlwifHxpPT09XCJQLTI1NlwifHxpPT09XCJwcmltZTI1NnYxXCIpe3JldHVyblwiUC0yNTZcIn1pZihpPT09XCJzZWNwMzg0cjFcInx8aT09PVwiTklTVCBQLTM4NFwifHxpPT09XCJQLTM4NFwiKXtyZXR1cm5cIlAtMzg0XCJ9cmV0dXJuIG51bGx9O3RoaXMuZ2VuZXJhdGVLZXlQYWlySGV4PWZ1bmN0aW9uKCl7dmFyIGs9dGhpcy5lY3BhcmFtcy5uO3ZhciBuPXRoaXMuZ2V0QmlnUmFuZG9tKGspO3ZhciBsPXRoaXMuZWNwYXJhbXMuRy5tdWx0aXBseShuKTt2YXIgcT1sLmdldFgoKS50b0JpZ0ludGVnZXIoKTt2YXIgbz1sLmdldFkoKS50b0JpZ0ludGVnZXIoKTt2YXIgaT10aGlzLmVjcGFyYW1zLmtleWxlbi80O3ZhciBtPShcIjAwMDAwMDAwMDBcIituLnRvU3RyaW5nKDE2KSkuc2xpY2UoLWkpO3ZhciByPShcIjAwMDAwMDAwMDBcIitxLnRvU3RyaW5nKDE2KSkuc2xpY2UoLWkpO3ZhciBwPShcIjAwMDAwMDAwMDBcIitvLnRvU3RyaW5nKDE2KSkuc2xpY2UoLWkpO3ZhciBqPVwiMDRcIityK3A7dGhpcy5zZXRQcml2YXRlS2V5SGV4KG0pO3RoaXMuc2V0UHVibGljS2V5SGV4KGopO3JldHVybntlY3BydmhleDptLGVjcHViaGV4Omp9fTt0aGlzLnNpZ25XaXRoTWVzc2FnZUhhc2g9ZnVuY3Rpb24oaSl7cmV0dXJuIHRoaXMuc2lnbkhleChpLHRoaXMucHJ2S2V5SGV4KX07dGhpcy5zaWduSGV4PWZ1bmN0aW9uKG8sail7dmFyIHQ9bmV3IEJpZ0ludGVnZXIoaiwxNik7dmFyIGw9dGhpcy5lY3BhcmFtcy5uO3ZhciBxPW5ldyBCaWdJbnRlZ2VyKG8sMTYpO2Rve3ZhciBtPXRoaXMuZ2V0QmlnUmFuZG9tKGwpO3ZhciB1PXRoaXMuZWNwYXJhbXMuRzt2YXIgcD11Lm11bHRpcGx5KG0pO3ZhciBpPXAuZ2V0WCgpLnRvQmlnSW50ZWdlcigpLm1vZChsKX13aGlsZShpLmNvbXBhcmVUbyhCaWdJbnRlZ2VyLlpFUk8pPD0wKTt2YXIgdj1tLm1vZEludmVyc2UobCkubXVsdGlwbHkocS5hZGQodC5tdWx0aXBseShpKSkpLm1vZChsKTtyZXR1cm4gS0pVUi5jcnlwdG8uRUNEU0EuYmlSU1NpZ1RvQVNOMVNpZyhpLHYpfTt0aGlzLnNpZ249ZnVuY3Rpb24obSx1KXt2YXIgcT11O3ZhciBqPXRoaXMuZWNwYXJhbXMubjt2YXIgcD1CaWdJbnRlZ2VyLmZyb21CeXRlQXJyYXlVbnNpZ25lZChtKTtkb3t2YXIgbD10aGlzLmdldEJpZ1JhbmRvbShqKTt2YXIgdD10aGlzLmVjcGFyYW1zLkc7dmFyIG89dC5tdWx0aXBseShsKTt2YXIgaT1vLmdldFgoKS50b0JpZ0ludGVnZXIoKS5tb2Qoail9d2hpbGUoaS5jb21wYXJlVG8oQmlnSW50ZWdlci5aRVJPKTw9MCk7dmFyIHY9bC5tb2RJbnZlcnNlKGopLm11bHRpcGx5KHAuYWRkKHEubXVsdGlwbHkoaSkpKS5tb2Qoaik7cmV0dXJuIHRoaXMuc2VyaWFsaXplU2lnKGksdil9O3RoaXMudmVyaWZ5V2l0aE1lc3NhZ2VIYXNoPWZ1bmN0aW9uKGosaSl7cmV0dXJuIHRoaXMudmVyaWZ5SGV4KGosaSx0aGlzLnB1YktleUhleCl9O3RoaXMudmVyaWZ5SGV4PWZ1bmN0aW9uKG0saSxwKXt2YXIgbCxqO3ZhciBvPUtKVVIuY3J5cHRvLkVDRFNBLnBhcnNlU2lnSGV4KGkpO2w9by5yO2o9by5zO3ZhciBrO2s9RUNQb2ludEZwLmRlY29kZUZyb21IZXgodGhpcy5lY3BhcmFtcy5jdXJ2ZSxwKTt2YXIgbj1uZXcgQmlnSW50ZWdlcihtLDE2KTtyZXR1cm4gdGhpcy52ZXJpZnlSYXcobixsLGosayl9O3RoaXMudmVyaWZ5PWZ1bmN0aW9uKG8scCxqKXt2YXIgbCxpO2lmKEJpdGNvaW4uVXRpbC5pc0FycmF5KHApKXt2YXIgbj10aGlzLnBhcnNlU2lnKHApO2w9bi5yO2k9bi5zfWVsc2V7aWYoXCJvYmplY3RcIj09PXR5cGVvZiBwJiZwLnImJnAucyl7bD1wLnI7aT1wLnN9ZWxzZXt0aHJvd1wiSW52YWxpZCB2YWx1ZSBmb3Igc2lnbmF0dXJlXCJ9fXZhciBrO2lmKGogaW5zdGFuY2VvZiBFQ1BvaW50RnApe2s9an1lbHNle2lmKEJpdGNvaW4uVXRpbC5pc0FycmF5KGopKXtrPUVDUG9pbnRGcC5kZWNvZGVGcm9tKHRoaXMuZWNwYXJhbXMuY3VydmUsail9ZWxzZXt0aHJvd1wiSW52YWxpZCBmb3JtYXQgZm9yIHB1YmtleSB2YWx1ZSwgbXVzdCBiZSBieXRlIGFycmF5IG9yIEVDUG9pbnRGcFwifX12YXIgbT1CaWdJbnRlZ2VyLmZyb21CeXRlQXJyYXlVbnNpZ25lZChvKTtyZXR1cm4gdGhpcy52ZXJpZnlSYXcobSxsLGksayl9O3RoaXMudmVyaWZ5UmF3PWZ1bmN0aW9uKG8saSx3LG0pe3ZhciBsPXRoaXMuZWNwYXJhbXMubjt2YXIgdT10aGlzLmVjcGFyYW1zLkc7aWYoaS5jb21wYXJlVG8oQmlnSW50ZWdlci5PTkUpPDB8fGkuY29tcGFyZVRvKGwpPj0wKXtyZXR1cm4gZmFsc2V9aWYody5jb21wYXJlVG8oQmlnSW50ZWdlci5PTkUpPDB8fHcuY29tcGFyZVRvKGwpPj0wKXtyZXR1cm4gZmFsc2V9dmFyIHA9dy5tb2RJbnZlcnNlKGwpO3ZhciBrPW8ubXVsdGlwbHkocCkubW9kKGwpO3ZhciBqPWkubXVsdGlwbHkocCkubW9kKGwpO3ZhciBxPXUubXVsdGlwbHkoaykuYWRkKG0ubXVsdGlwbHkoaikpO3ZhciB0PXEuZ2V0WCgpLnRvQmlnSW50ZWdlcigpLm1vZChsKTtyZXR1cm4gdC5lcXVhbHMoaSl9O3RoaXMuc2VyaWFsaXplU2lnPWZ1bmN0aW9uKGssail7dmFyIGw9ay50b0J5dGVBcnJheVNpZ25lZCgpO3ZhciBpPWoudG9CeXRlQXJyYXlTaWduZWQoKTt2YXIgbT1bXTttLnB1c2goMik7bS5wdXNoKGwubGVuZ3RoKTttPW0uY29uY2F0KGwpO20ucHVzaCgyKTttLnB1c2goaS5sZW5ndGgpO209bS5jb25jYXQoaSk7bS51bnNoaWZ0KG0ubGVuZ3RoKTttLnVuc2hpZnQoNDgpO3JldHVybiBtfTt0aGlzLnBhcnNlU2lnPWZ1bmN0aW9uKG4pe3ZhciBtO2lmKG5bMF0hPTQ4KXt0aHJvdyBuZXcgRXJyb3IoXCJTaWduYXR1cmUgbm90IGEgdmFsaWQgREVSU2VxdWVuY2VcIil9bT0yO2lmKG5bbV0hPTIpe3Rocm93IG5ldyBFcnJvcihcIkZpcnN0IGVsZW1lbnQgaW4gc2lnbmF0dXJlIG11c3QgYmUgYSBERVJJbnRlZ2VyXCIpfXZhciBsPW4uc2xpY2UobSsyLG0rMituW20rMV0pO20rPTIrblttKzFdO2lmKG5bbV0hPTIpe3Rocm93IG5ldyBFcnJvcihcIlNlY29uZCBlbGVtZW50IGluIHNpZ25hdHVyZSBtdXN0IGJlIGEgREVSSW50ZWdlclwiKX12YXIgaT1uLnNsaWNlKG0rMixtKzIrblttKzFdKTttKz0yK25bbSsxXTt2YXIgaz1CaWdJbnRlZ2VyLmZyb21CeXRlQXJyYXlVbnNpZ25lZChsKTt2YXIgaj1CaWdJbnRlZ2VyLmZyb21CeXRlQXJyYXlVbnNpZ25lZChpKTtyZXR1cm57cjprLHM6an19O3RoaXMucGFyc2VTaWdDb21wYWN0PWZ1bmN0aW9uKG0pe2lmKG0ubGVuZ3RoIT09NjUpe3Rocm93XCJTaWduYXR1cmUgaGFzIHRoZSB3cm9uZyBsZW5ndGhcIn12YXIgaj1tWzBdLTI3O2lmKGo8MHx8aj43KXt0aHJvd1wiSW52YWxpZCBzaWduYXR1cmUgdHlwZVwifXZhciBvPXRoaXMuZWNwYXJhbXMubjt2YXIgbD1CaWdJbnRlZ2VyLmZyb21CeXRlQXJyYXlVbnNpZ25lZChtLnNsaWNlKDEsMzMpKS5tb2Qobyk7dmFyIGs9QmlnSW50ZWdlci5mcm9tQnl0ZUFycmF5VW5zaWduZWQobS5zbGljZSgzMyw2NSkpLm1vZChvKTtyZXR1cm57cjpsLHM6ayxpOmp9fTt0aGlzLnJlYWRQS0NTNVBydktleUhleD1mdW5jdGlvbihsKXt2YXIgbj1BU04xSEVYO3ZhciBtPUtKVVIuY3J5cHRvLkVDRFNBLmdldE5hbWU7dmFyIHA9bi5nZXRWYnlMaXN0O2lmKG4uaXNBU04xSEVYKGwpPT09ZmFsc2Upe3Rocm93XCJub3QgQVNOLjEgaGV4IHN0cmluZ1wifXZhciBpLGssbzt0cnl7aT1wKGwsMCxbMiwwXSxcIjA2XCIpO2s9cChsLDAsWzFdLFwiMDRcIik7dHJ5e289cChsLDAsWzMsMF0sXCIwM1wiKS5zdWJzdHIoMil9Y2F0Y2goail7fX1jYXRjaChqKXt0aHJvd1wibWFsZm9ybWVkIFBLQ1MjMS81IHBsYWluIEVDQyBwcml2YXRlIGtleVwifXRoaXMuY3VydmVOYW1lPW0oaSk7aWYodGhpcy5jdXJ2ZU5hbWU9PT11bmRlZmluZWQpe3Rocm93XCJ1bnN1cHBvcnRlZCBjdXJ2ZSBuYW1lXCJ9dGhpcy5zZXROYW1lZEN1cnZlKHRoaXMuY3VydmVOYW1lKTt0aGlzLnNldFB1YmxpY0tleUhleChvKTt0aGlzLnNldFByaXZhdGVLZXlIZXgoayk7dGhpcy5pc1B1YmxpYz1mYWxzZX07dGhpcy5yZWFkUEtDUzhQcnZLZXlIZXg9ZnVuY3Rpb24obCl7dmFyIHE9QVNOMUhFWDt2YXIgaT1LSlVSLmNyeXB0by5FQ0RTQS5nZXROYW1lO3ZhciBuPXEuZ2V0VmJ5TGlzdDtpZihxLmlzQVNOMUhFWChsKT09PWZhbHNlKXt0aHJvd1wibm90IEFTTi4xIGhleCBzdHJpbmdcIn12YXIgaixwLG0sazt0cnl7aj1uKGwsMCxbMSwwXSxcIjA2XCIpO3A9bihsLDAsWzEsMV0sXCIwNlwiKTttPW4obCwwLFsyLDAsMV0sXCIwNFwiKTt0cnl7az1uKGwsMCxbMiwwLDIsMF0sXCIwM1wiKS5zdWJzdHIoMil9Y2F0Y2gobyl7fX1jYXRjaChvKXt0aHJvd1wibWFsZm9ybWVkIFBLQ1MjOCBwbGFpbiBFQ0MgcHJpdmF0ZSBrZXlcIn10aGlzLmN1cnZlTmFtZT1pKHApO2lmKHRoaXMuY3VydmVOYW1lPT09dW5kZWZpbmVkKXt0aHJvd1widW5zdXBwb3J0ZWQgY3VydmUgbmFtZVwifXRoaXMuc2V0TmFtZWRDdXJ2ZSh0aGlzLmN1cnZlTmFtZSk7dGhpcy5zZXRQdWJsaWNLZXlIZXgoayk7dGhpcy5zZXRQcml2YXRlS2V5SGV4KG0pO3RoaXMuaXNQdWJsaWM9ZmFsc2V9O3RoaXMucmVhZFBLQ1M4UHViS2V5SGV4PWZ1bmN0aW9uKGwpe3ZhciBuPUFTTjFIRVg7dmFyIG09S0pVUi5jcnlwdG8uRUNEU0EuZ2V0TmFtZTt2YXIgcD1uLmdldFZieUxpc3Q7aWYobi5pc0FTTjFIRVgobCk9PT1mYWxzZSl7dGhyb3dcIm5vdCBBU04uMSBoZXggc3RyaW5nXCJ9dmFyIGssaSxvO3RyeXtrPXAobCwwLFswLDBdLFwiMDZcIik7aT1wKGwsMCxbMCwxXSxcIjA2XCIpO289cChsLDAsWzFdLFwiMDNcIikuc3Vic3RyKDIpfWNhdGNoKGope3Rocm93XCJtYWxmb3JtZWQgUEtDUyM4IEVDQyBwdWJsaWMga2V5XCJ9dGhpcy5jdXJ2ZU5hbWU9bShpKTtpZih0aGlzLmN1cnZlTmFtZT09PW51bGwpe3Rocm93XCJ1bnN1cHBvcnRlZCBjdXJ2ZSBuYW1lXCJ9dGhpcy5zZXROYW1lZEN1cnZlKHRoaXMuY3VydmVOYW1lKTt0aGlzLnNldFB1YmxpY0tleUhleChvKX07dGhpcy5yZWFkQ2VydFB1YktleUhleD1mdW5jdGlvbihrLHApe2lmKHAhPT01KXtwPTZ9dmFyIG09QVNOMUhFWDt2YXIgbD1LSlVSLmNyeXB0by5FQ0RTQS5nZXROYW1lO3ZhciBvPW0uZ2V0VmJ5TGlzdDtpZihtLmlzQVNOMUhFWChrKT09PWZhbHNlKXt0aHJvd1wibm90IEFTTi4xIGhleCBzdHJpbmdcIn12YXIgaSxuO3RyeXtpPW8oaywwLFswLHAsMCwxXSxcIjA2XCIpO249byhrLDAsWzAscCwxXSxcIjAzXCIpLnN1YnN0cigyKX1jYXRjaChqKXt0aHJvd1wibWFsZm9ybWVkIFguNTA5IGNlcnRpZmljYXRlIEVDQyBwdWJsaWMga2V5XCJ9dGhpcy5jdXJ2ZU5hbWU9bChpKTtpZih0aGlzLmN1cnZlTmFtZT09PW51bGwpe3Rocm93XCJ1bnN1cHBvcnRlZCBjdXJ2ZSBuYW1lXCJ9dGhpcy5zZXROYW1lZEN1cnZlKHRoaXMuY3VydmVOYW1lKTt0aGlzLnNldFB1YmxpY0tleUhleChuKX07aWYoaCE9PXVuZGVmaW5lZCl7aWYoaC5jdXJ2ZSE9PXVuZGVmaW5lZCl7dGhpcy5jdXJ2ZU5hbWU9aC5jdXJ2ZX19aWYodGhpcy5jdXJ2ZU5hbWU9PT11bmRlZmluZWQpe3RoaXMuY3VydmVOYW1lPWV9dGhpcy5zZXROYW1lZEN1cnZlKHRoaXMuY3VydmVOYW1lKTtpZihoIT09dW5kZWZpbmVkKXtpZihoLnBydiE9PXVuZGVmaW5lZCl7dGhpcy5zZXRQcml2YXRlS2V5SGV4KGgucHJ2KX1pZihoLnB1YiE9PXVuZGVmaW5lZCl7dGhpcy5zZXRQdWJsaWNLZXlIZXgoaC5wdWIpfX19O0tKVVIuY3J5cHRvLkVDRFNBLnBhcnNlU2lnSGV4PWZ1bmN0aW9uKGEpe3ZhciBiPUtKVVIuY3J5cHRvLkVDRFNBLnBhcnNlU2lnSGV4SW5IZXhSUyhhKTt2YXIgZD1uZXcgQmlnSW50ZWdlcihiLnIsMTYpO3ZhciBjPW5ldyBCaWdJbnRlZ2VyKGIucywxNik7cmV0dXJue3I6ZCxzOmN9fTtLSlVSLmNyeXB0by5FQ0RTQS5wYXJzZVNpZ0hleEluSGV4UlM9ZnVuY3Rpb24oZil7dmFyIGo9QVNOMUhFWDt2YXIgaT1qLmdldENoaWxkSWR4O3ZhciBnPWouZ2V0VjtpZihmLnN1YnN0cigwLDIpIT1cIjMwXCIpe3Rocm93XCJzaWduYXR1cmUgaXMgbm90IGEgQVNOLjEgc2VxdWVuY2VcIn12YXIgaD1pKGYsMCk7aWYoaC5sZW5ndGghPTIpe3Rocm93XCJudW1iZXIgb2Ygc2lnbmF0dXJlIEFTTi4xIHNlcXVlbmNlIGVsZW1lbnRzIHNlZW0gd3JvbmdcIn12YXIgZT1oWzBdO3ZhciBkPWhbMV07aWYoZi5zdWJzdHIoZSwyKSE9XCIwMlwiKXt0aHJvd1wiMXN0IGl0ZW0gb2Ygc2VxdWVuZSBvZiBzaWduYXR1cmUgaXMgbm90IEFTTi4xIGludGVnZXJcIn1pZihmLnN1YnN0cihkLDIpIT1cIjAyXCIpe3Rocm93XCIybmQgaXRlbSBvZiBzZXF1ZW5lIG9mIHNpZ25hdHVyZSBpcyBub3QgQVNOLjEgaW50ZWdlclwifXZhciBjPWcoZixlKTt2YXIgYj1nKGYsZCk7cmV0dXJue3I6YyxzOmJ9fTtLSlVSLmNyeXB0by5FQ0RTQS5hc24xU2lnVG9Db25jYXRTaWc9ZnVuY3Rpb24oYyl7dmFyIGQ9S0pVUi5jcnlwdG8uRUNEU0EucGFyc2VTaWdIZXhJbkhleFJTKGMpO3ZhciBiPWQucjt2YXIgYT1kLnM7aWYoYi5zdWJzdHIoMCwyKT09XCIwMFwiJiYoYi5sZW5ndGglMzIpPT0yKXtiPWIuc3Vic3RyKDIpfWlmKGEuc3Vic3RyKDAsMik9PVwiMDBcIiYmKGEubGVuZ3RoJTMyKT09Mil7YT1hLnN1YnN0cigyKX1pZigoYi5sZW5ndGglMzIpPT0zMCl7Yj1cIjAwXCIrYn1pZigoYS5sZW5ndGglMzIpPT0zMCl7YT1cIjAwXCIrYX1pZihiLmxlbmd0aCUzMiE9MCl7dGhyb3dcInVua25vd24gRUNEU0Egc2lnIHIgbGVuZ3RoIGVycm9yXCJ9aWYoYS5sZW5ndGglMzIhPTApe3Rocm93XCJ1bmtub3duIEVDRFNBIHNpZyBzIGxlbmd0aCBlcnJvclwifXJldHVybiBiK2F9O0tKVVIuY3J5cHRvLkVDRFNBLmNvbmNhdFNpZ1RvQVNOMVNpZz1mdW5jdGlvbihhKXtpZigoKChhLmxlbmd0aC8yKSo4KSUoMTYqOCkpIT0wKXt0aHJvd1widW5rbm93biBFQ0RTQSBjb25jYXRpbmF0ZWQgci1zIHNpZyAgbGVuZ3RoIGVycm9yXCJ9dmFyIGM9YS5zdWJzdHIoMCxhLmxlbmd0aC8yKTt2YXIgYj1hLnN1YnN0cihhLmxlbmd0aC8yKTtyZXR1cm4gS0pVUi5jcnlwdG8uRUNEU0EuaGV4UlNTaWdUb0FTTjFTaWcoYyxiKX07S0pVUi5jcnlwdG8uRUNEU0EuaGV4UlNTaWdUb0FTTjFTaWc9ZnVuY3Rpb24oYixhKXt2YXIgZD1uZXcgQmlnSW50ZWdlcihiLDE2KTt2YXIgYz1uZXcgQmlnSW50ZWdlcihhLDE2KTtyZXR1cm4gS0pVUi5jcnlwdG8uRUNEU0EuYmlSU1NpZ1RvQVNOMVNpZyhkLGMpfTtLSlVSLmNyeXB0by5FQ0RTQS5iaVJTU2lnVG9BU04xU2lnPWZ1bmN0aW9uKGYsZCl7dmFyIGM9S0pVUi5hc24xO3ZhciBiPW5ldyBjLkRFUkludGVnZXIoe2JpZ2ludDpmfSk7dmFyIGE9bmV3IGMuREVSSW50ZWdlcih7YmlnaW50OmR9KTt2YXIgZT1uZXcgYy5ERVJTZXF1ZW5jZSh7YXJyYXk6W2IsYV19KTtyZXR1cm4gZS5nZXRFbmNvZGVkSGV4KCl9O0tKVVIuY3J5cHRvLkVDRFNBLmdldE5hbWU9ZnVuY3Rpb24oYSl7aWYoYT09PVwiMmE4NjQ4Y2UzZDAzMDEwN1wiKXtyZXR1cm5cInNlY3AyNTZyMVwifWlmKGE9PT1cIjJiODEwNDAwMGFcIil7cmV0dXJuXCJzZWNwMjU2azFcIn1pZihhPT09XCIyYjgxMDQwMDIyXCIpe3JldHVyblwic2VjcDM4NHIxXCJ9aWYoXCJ8c2VjcDI1NnIxfE5JU1QgUC0yNTZ8UC0yNTZ8cHJpbWUyNTZ2MXxcIi5pbmRleE9mKGEpIT09LTEpe3JldHVyblwic2VjcDI1NnIxXCJ9aWYoXCJ8c2VjcDI1NmsxfFwiLmluZGV4T2YoYSkhPT0tMSl7cmV0dXJuXCJzZWNwMjU2azFcIn1pZihcInxzZWNwMzg0cjF8TklTVCBQLTM4NHxQLTM4NHxcIi5pbmRleE9mKGEpIT09LTEpe3JldHVyblwic2VjcDM4NHIxXCJ9cmV0dXJuIG51bGx9O1xuaWYodHlwZW9mIEtKVVI9PVwidW5kZWZpbmVkXCJ8fCFLSlVSKXtLSlVSPXt9fWlmKHR5cGVvZiBLSlVSLmNyeXB0bz09XCJ1bmRlZmluZWRcInx8IUtKVVIuY3J5cHRvKXtLSlVSLmNyeXB0bz17fX1LSlVSLmNyeXB0by5FQ1BhcmFtZXRlckRCPW5ldyBmdW5jdGlvbigpe3ZhciBiPXt9O3ZhciBjPXt9O2Z1bmN0aW9uIGEoZCl7cmV0dXJuIG5ldyBCaWdJbnRlZ2VyKGQsMTYpfXRoaXMuZ2V0QnlOYW1lPWZ1bmN0aW9uKGUpe3ZhciBkPWU7aWYodHlwZW9mIGNbZF0hPVwidW5kZWZpbmVkXCIpe2Q9Y1tlXX1pZih0eXBlb2YgYltkXSE9XCJ1bmRlZmluZWRcIil7cmV0dXJuIGJbZF19dGhyb3dcInVucmVnaXN0ZXJlZCBFQyBjdXJ2ZSBuYW1lOiBcIitkfTt0aGlzLnJlZ2lzdD1mdW5jdGlvbihBLGwsbyxnLG0sZSxqLGYsayx1LGQseCl7YltBXT17fTt2YXIgcz1hKG8pO3ZhciB6PWEoZyk7dmFyIHk9YShtKTt2YXIgdD1hKGUpO3ZhciB3PWEoaik7dmFyIHI9bmV3IEVDQ3VydmVGcChzLHoseSk7dmFyIHE9ci5kZWNvZGVQb2ludEhleChcIjA0XCIrZitrKTtiW0FdW1wibmFtZVwiXT1BO2JbQV1bXCJrZXlsZW5cIl09bDtiW0FdW1wiY3VydmVcIl09cjtiW0FdW1wiR1wiXT1xO2JbQV1bXCJuXCJdPXQ7YltBXVtcImhcIl09dztiW0FdW1wib2lkXCJdPWQ7YltBXVtcImluZm9cIl09eDtmb3IodmFyIHY9MDt2PHUubGVuZ3RoO3YrKyl7Y1t1W3ZdXT1BfX19O0tKVVIuY3J5cHRvLkVDUGFyYW1ldGVyREIucmVnaXN0KFwic2VjcDEyOHIxXCIsMTI4LFwiRkZGRkZGRkRGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZcIixcIkZGRkZGRkZERkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZDXCIsXCJFODc1NzlDMTEwNzlGNDNERDgyNDk5M0MyQ0VFNUVEM1wiLFwiRkZGRkZGRkUwMDAwMDAwMDc1QTMwRDFCOTAzOEExMTVcIixcIjFcIixcIjE2MUZGNzUyOEI4OTlCMkQwQzI4NjA3Q0E1MkM1Qjg2XCIsXCJDRjVBQzgzOTVCQUZFQjEzQzAyREEyOTJEREVEN0E4M1wiLFtdLFwiXCIsXCJzZWNwMTI4cjEgOiBTRUNHIGN1cnZlIG92ZXIgYSAxMjggYml0IHByaW1lIGZpZWxkXCIpO0tKVVIuY3J5cHRvLkVDUGFyYW1ldGVyREIucmVnaXN0KFwic2VjcDE2MGsxXCIsMTYwLFwiRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkVGRkZGQUM3M1wiLFwiMFwiLFwiN1wiLFwiMDEwMDAwMDAwMDAwMDAwMDAwMDAwMUI4RkExNkRGQUI5QUNBMTZCNkIzXCIsXCIxXCIsXCIzQjRDMzgyQ0UzN0FBMTkyQTQwMTlFNzYzMDM2RjRGNURENEQ3RUJCXCIsXCI5MzhDRjkzNTMxOEZEQ0VENkJDMjgyODY1MzE3MzNDM0YwM0M0RkVFXCIsW10sXCJcIixcInNlY3AxNjBrMSA6IFNFQ0cgY3VydmUgb3ZlciBhIDE2MCBiaXQgcHJpbWUgZmllbGRcIik7S0pVUi5jcnlwdG8uRUNQYXJhbWV0ZXJEQi5yZWdpc3QoXCJzZWNwMTYwcjFcIiwxNjAsXCJGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjdGRkZGRkZGXCIsXCJGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjdGRkZGRkZDXCIsXCIxQzk3QkVGQzU0QkQ3QThCNjVBQ0Y4OUY4MUQ0RDRBREM1NjVGQTQ1XCIsXCIwMTAwMDAwMDAwMDAwMDAwMDAwMDAxRjRDOEY5MjdBRUQzQ0E3NTIyNTdcIixcIjFcIixcIjRBOTZCNTY4OEVGNTczMjg0NjY0Njk4OTY4QzM4QkI5MTNDQkZDODJcIixcIjIzQTYyODU1MzE2ODk0N0Q1OURDQzkxMjA0MjM1MTM3N0FDNUZCMzJcIixbXSxcIlwiLFwic2VjcDE2MHIxIDogU0VDRyBjdXJ2ZSBvdmVyIGEgMTYwIGJpdCBwcmltZSBmaWVsZFwiKTtLSlVSLmNyeXB0by5FQ1BhcmFtZXRlckRCLnJlZ2lzdChcInNlY3AxOTJrMVwiLDE5MixcIkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkVGRkZGRUUzN1wiLFwiMFwiLFwiM1wiLFwiRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZFMjZGMkZDMTcwRjY5NDY2QTc0REVGRDhEXCIsXCIxXCIsXCJEQjRGRjEwRUMwNTdFOUFFMjZCMDdEMDI4MEI3RjQzNDFEQTVEMUIxRUFFMDZDN0RcIixcIjlCMkYyRjZEOUM1NjI4QTc4NDQxNjNEMDE1QkU4NjM0NDA4MkFBODhEOTVFMkY5RFwiLFtdKTtLSlVSLmNyeXB0by5FQ1BhcmFtZXRlckRCLnJlZ2lzdChcInNlY3AxOTJyMVwiLDE5MixcIkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZFRkZGRkZGRkZGRkZGRkZGRlwiLFwiRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkVGRkZGRkZGRkZGRkZGRkZDXCIsXCI2NDIxMDUxOUU1OUM4MEU3MEZBN0U5QUI3MjI0MzA0OUZFQjhERUVDQzE0NkI5QjFcIixcIkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjk5REVGODM2MTQ2QkM5QjFCNEQyMjgzMVwiLFwiMVwiLFwiMTg4REE4MEVCMDMwOTBGNjdDQkYyMEVCNDNBMTg4MDBGNEZGMEFGRDgyRkYxMDEyXCIsXCIwNzE5MkI5NUZGQzhEQTc4NjMxMDExRUQ2QjI0Q0RENTczRjk3N0ExMUU3OTQ4MTFcIixbXSk7S0pVUi5jcnlwdG8uRUNQYXJhbWV0ZXJEQi5yZWdpc3QoXCJzZWNwMjI0cjFcIiwyMjQsXCJGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMVwiLFwiRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkVGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkVcIixcIkI0MDUwQTg1MEMwNEIzQUJGNTQxMzI1NjUwNDRCMEI3RDdCRkQ4QkEyNzBCMzk0MzIzNTVGRkI0XCIsXCJGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGMTZBMkUwQjhGMDNFMTNERDI5NDU1QzVDMkEzRFwiLFwiMVwiLFwiQjcwRTBDQkQ2QkI0QkY3RjMyMTM5MEI5NEEwM0MxRDM1NkMyMTEyMjM0MzI4MEQ2MTE1QzFEMjFcIixcIkJEMzc2Mzg4QjVGNzIzRkI0QzIyREZFNkNENDM3NUEwNUEwNzQ3NjQ0NEQ1ODE5OTg1MDA3RTM0XCIsW10pO0tKVVIuY3J5cHRvLkVDUGFyYW1ldGVyREIucmVnaXN0KFwic2VjcDI1NmsxXCIsMjU2LFwiRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkVGRkZGRkMyRlwiLFwiMFwiLFwiN1wiLFwiRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkVCQUFFRENFNkFGNDhBMDNCQkZEMjVFOENEMDM2NDE0MVwiLFwiMVwiLFwiNzlCRTY2N0VGOURDQkJBQzU1QTA2Mjk1Q0U4NzBCMDcwMjlCRkNEQjJEQ0UyOEQ5NTlGMjgxNUIxNkY4MTc5OFwiLFwiNDgzQURBNzcyNkEzQzQ2NTVEQTRGQkZDMEUxMTA4QThGRDE3QjQ0OEE2ODU1NDE5OUM0N0QwOEZGQjEwRDRCOFwiLFtdKTtLSlVSLmNyeXB0by5FQ1BhcmFtZXRlckRCLnJlZ2lzdChcInNlY3AyNTZyMVwiLDI1NixcIkZGRkZGRkZGMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZcIixcIkZGRkZGRkZGMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkNcIixcIjVBQzYzNUQ4QUEzQTkzRTdCM0VCQkQ1NTc2OTg4NkJDNjUxRDA2QjBDQzUzQjBGNjNCQ0UzQzNFMjdEMjYwNEJcIixcIkZGRkZGRkZGMDAwMDAwMDBGRkZGRkZGRkZGRkZGRkZGQkNFNkZBQURBNzE3OUU4NEYzQjlDQUMyRkM2MzI1NTFcIixcIjFcIixcIjZCMTdEMUYyRTEyQzQyNDdGOEJDRTZFNTYzQTQ0MEYyNzcwMzdEODEyREVCMzNBMEY0QTEzOTQ1RDg5OEMyOTZcIixcIjRGRTM0MkUyRkUxQTdGOUI4RUU3RUI0QTdDMEY5RTE2MkJDRTMzNTc2QjMxNUVDRUNCQjY0MDY4MzdCRjUxRjVcIixbXCJOSVNUIFAtMjU2XCIsXCJQLTI1NlwiLFwicHJpbWUyNTZ2MVwiXSk7S0pVUi5jcnlwdG8uRUNQYXJhbWV0ZXJEQi5yZWdpc3QoXCJzZWNwMzg0cjFcIiwzODQsXCJGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZFRkZGRkZGRkYwMDAwMDAwMDAwMDAwMDAwRkZGRkZGRkZcIixcIkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkVGRkZGRkZGRjAwMDAwMDAwMDAwMDAwMDBGRkZGRkZGQ1wiLFwiQjMzMTJGQTdFMjNFRTdFNDk4OEUwNTZCRTNGODJEMTkxODFEOUM2RUZFODE0MTEyMDMxNDA4OEY1MDEzODc1QUM2NTYzOThEOEEyRUQxOUQyQTg1QzhFREQzRUMyQUVGXCIsXCJGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZDNzYzNEQ4MUY0MzcyRERGNTgxQTBEQjI0OEIwQTc3QUVDRUMxOTZBQ0NDNTI5NzNcIixcIjFcIixcIkFBODdDQTIyQkU4QjA1Mzc4RUIxQzcxRUYzMjBBRDc0NkUxRDNCNjI4QkE3OUI5ODU5Rjc0MUUwODI1NDJBMzg1NTAyRjI1REJGNTUyOTZDM0E1NDVFMzg3Mjc2MEFCN1wiLFwiMzYxN2RlNGE5NjI2MmM2ZjVkOWU5OGJmOTI5MmRjMjlmOGY0MWRiZDI4OWExNDdjZTlkYTMxMTNiNWYwYjhjMDBhNjBiMWNlMWQ3ZTgxOWQ3YTQzMWQ3YzkwZWEwZTVmXCIsW1wiTklTVCBQLTM4NFwiLFwiUC0zODRcIl0pO0tKVVIuY3J5cHRvLkVDUGFyYW1ldGVyREIucmVnaXN0KFwic2VjcDUyMXIxXCIsNTIxLFwiMUZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZcIixcIjFGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZDXCIsXCIwNTE5NTNFQjk2MThFMUM5QTFGOTI5QTIxQTBCNjg1NDBFRUEyREE3MjVCOTlCMzE1RjNCOEI0ODk5MThFRjEwOUUxNTYxOTM5NTFFQzdFOTM3QjE2NTJDMEJEM0JCMUJGMDczNTczREY4ODNEMkMzNEYxRUY0NTFGRDQ2QjUwM0YwMFwiLFwiMUZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGQTUxODY4NzgzQkYyRjk2NkI3RkNDMDE0OEY3MDlBNUQwM0JCNUM5Qjg4OTlDNDdBRUJCNkZCNzFFOTEzODY0MDlcIixcIjFcIixcIkM2ODU4RTA2QjcwNDA0RTlDRDlFM0VDQjY2MjM5NUI0NDI5QzY0ODEzOTA1M0ZCNTIxRjgyOEFGNjA2QjREM0RCQUExNEI1RTc3RUZFNzU5MjhGRTFEQzEyN0EyRkZBOERFMzM0OEIzQzE4NTZBNDI5QkY5N0U3RTMxQzJFNUJENjZcIixcIjAxMTgzOTI5NmE3ODlhM2JjMDA0NWM4YTVmYjQyYzdkMWJkOTk4ZjU0NDQ5NTc5YjQ0NjgxN2FmYmQxNzI3M2U2NjJjOTdlZTcyOTk1ZWY0MjY0MGM1NTBiOTAxM2ZhZDA3NjEzNTNjNzA4NmEyNzJjMjQwODhiZTk0NzY5ZmQxNjY1MFwiLFtcIk5JU1QgUC01MjFcIixcIlAtNTIxXCJdKTtcbnZhciBLRVlVVElMPWZ1bmN0aW9uKCl7dmFyIGQ9ZnVuY3Rpb24ocCxyLHEpe3JldHVybiBrKENyeXB0b0pTLkFFUyxwLHIscSl9O3ZhciBlPWZ1bmN0aW9uKHAscixxKXtyZXR1cm4gayhDcnlwdG9KUy5UcmlwbGVERVMscCxyLHEpfTt2YXIgYT1mdW5jdGlvbihwLHIscSl7cmV0dXJuIGsoQ3J5cHRvSlMuREVTLHAscixxKX07dmFyIGs9ZnVuY3Rpb24ocyx4LHUscSl7dmFyIHI9Q3J5cHRvSlMuZW5jLkhleC5wYXJzZSh4KTt2YXIgdz1DcnlwdG9KUy5lbmMuSGV4LnBhcnNlKHUpO3ZhciBwPUNyeXB0b0pTLmVuYy5IZXgucGFyc2UocSk7dmFyIHQ9e307dC5rZXk9dzt0Lml2PXA7dC5jaXBoZXJ0ZXh0PXI7dmFyIHY9cy5kZWNyeXB0KHQsdyx7aXY6cH0pO3JldHVybiBDcnlwdG9KUy5lbmMuSGV4LnN0cmluZ2lmeSh2KX07dmFyIGw9ZnVuY3Rpb24ocCxyLHEpe3JldHVybiBnKENyeXB0b0pTLkFFUyxwLHIscSl9O3ZhciBvPWZ1bmN0aW9uKHAscixxKXtyZXR1cm4gZyhDcnlwdG9KUy5UcmlwbGVERVMscCxyLHEpfTt2YXIgZj1mdW5jdGlvbihwLHIscSl7cmV0dXJuIGcoQ3J5cHRvSlMuREVTLHAscixxKX07dmFyIGc9ZnVuY3Rpb24odCx5LHYscSl7dmFyIHM9Q3J5cHRvSlMuZW5jLkhleC5wYXJzZSh5KTt2YXIgeD1DcnlwdG9KUy5lbmMuSGV4LnBhcnNlKHYpO3ZhciBwPUNyeXB0b0pTLmVuYy5IZXgucGFyc2UocSk7dmFyIHc9dC5lbmNyeXB0KHMseCx7aXY6cH0pO3ZhciByPUNyeXB0b0pTLmVuYy5IZXgucGFyc2Uody50b1N0cmluZygpKTt2YXIgdT1DcnlwdG9KUy5lbmMuQmFzZTY0LnN0cmluZ2lmeShyKTtyZXR1cm4gdX07dmFyIGk9e1wiQUVTLTI1Ni1DQkNcIjp7cHJvYzpkLGVwcm9jOmwsa2V5bGVuOjMyLGl2bGVuOjE2fSxcIkFFUy0xOTItQ0JDXCI6e3Byb2M6ZCxlcHJvYzpsLGtleWxlbjoyNCxpdmxlbjoxNn0sXCJBRVMtMTI4LUNCQ1wiOntwcm9jOmQsZXByb2M6bCxrZXlsZW46MTYsaXZsZW46MTZ9LFwiREVTLUVERTMtQ0JDXCI6e3Byb2M6ZSxlcHJvYzpvLGtleWxlbjoyNCxpdmxlbjo4fSxcIkRFUy1DQkNcIjp7cHJvYzphLGVwcm9jOmYsa2V5bGVuOjgsaXZsZW46OH19O3ZhciBjPWZ1bmN0aW9uKHApe3JldHVybiBpW3BdW1wicHJvY1wiXX07dmFyIG09ZnVuY3Rpb24ocCl7dmFyIHI9Q3J5cHRvSlMubGliLldvcmRBcnJheS5yYW5kb20ocCk7dmFyIHE9Q3J5cHRvSlMuZW5jLkhleC5zdHJpbmdpZnkocik7cmV0dXJuIHF9O3ZhciBuPWZ1bmN0aW9uKHYpe3ZhciB3PXt9O3ZhciBxPXYubWF0Y2gobmV3IFJlZ0V4cChcIkRFSy1JbmZvOiAoW14sXSspLChbMC05QS1GYS1mXSspXCIsXCJtXCIpKTtpZihxKXt3LmNpcGhlcj1xWzFdO3cuaXZzYWx0PXFbMl19dmFyIHA9di5tYXRjaChuZXcgUmVnRXhwKFwiLS0tLS1CRUdJTiAoW0EtWl0rKSBQUklWQVRFIEtFWS0tLS0tXCIpKTtpZihwKXt3LnR5cGU9cFsxXX12YXIgdT0tMTt2YXIgeD0wO2lmKHYuaW5kZXhPZihcIlxcclxcblxcclxcblwiKSE9LTEpe3U9di5pbmRleE9mKFwiXFxyXFxuXFxyXFxuXCIpO3g9Mn1pZih2LmluZGV4T2YoXCJcXG5cXG5cIikhPS0xKXt1PXYuaW5kZXhPZihcIlxcblxcblwiKTt4PTF9dmFyIHQ9di5pbmRleE9mKFwiLS0tLS1FTkRcIik7aWYodSE9LTEmJnQhPS0xKXt2YXIgcj12LnN1YnN0cmluZyh1K3gqMix0LXgpO3I9ci5yZXBsYWNlKC9cXHMrL2csXCJcIik7dy5kYXRhPXJ9cmV0dXJuIHd9O3ZhciBqPWZ1bmN0aW9uKHEseSxwKXt2YXIgdj1wLnN1YnN0cmluZygwLDE2KTt2YXIgdD1DcnlwdG9KUy5lbmMuSGV4LnBhcnNlKHYpO3ZhciByPUNyeXB0b0pTLmVuYy5VdGY4LnBhcnNlKHkpO3ZhciB1PWlbcV1bXCJrZXlsZW5cIl0raVtxXVtcIml2bGVuXCJdO3ZhciB4PVwiXCI7dmFyIHc9bnVsbDtmb3IoOzspe3ZhciBzPUNyeXB0b0pTLmFsZ28uTUQ1LmNyZWF0ZSgpO2lmKHchPW51bGwpe3MudXBkYXRlKHcpfXMudXBkYXRlKHIpO3MudXBkYXRlKHQpO3c9cy5maW5hbGl6ZSgpO3g9eCtDcnlwdG9KUy5lbmMuSGV4LnN0cmluZ2lmeSh3KTtpZih4Lmxlbmd0aD49dSoyKXticmVha319dmFyIHo9e307ei5rZXloZXg9eC5zdWJzdHIoMCxpW3FdW1wia2V5bGVuXCJdKjIpO3ouaXZoZXg9eC5zdWJzdHIoaVtxXVtcImtleWxlblwiXSoyLGlbcV1bXCJpdmxlblwiXSoyKTtyZXR1cm4gen07dmFyIGI9ZnVuY3Rpb24ocCx2LHIsdyl7dmFyIHM9Q3J5cHRvSlMuZW5jLkJhc2U2NC5wYXJzZShwKTt2YXIgcT1DcnlwdG9KUy5lbmMuSGV4LnN0cmluZ2lmeShzKTt2YXIgdT1pW3ZdW1wicHJvY1wiXTt2YXIgdD11KHEscix3KTtyZXR1cm4gdH07dmFyIGg9ZnVuY3Rpb24ocCxzLHEsdSl7dmFyIHI9aVtzXVtcImVwcm9jXCJdO3ZhciB0PXIocCxxLHUpO3JldHVybiB0fTtyZXR1cm57dmVyc2lvbjpcIjEuMC4wXCIscGFyc2VQS0NTNVBFTTpmdW5jdGlvbihwKXtyZXR1cm4gbihwKX0sZ2V0S2V5QW5kVW51c2VkSXZCeVBhc3Njb2RlQW5kSXZzYWx0OmZ1bmN0aW9uKHEscCxyKXtyZXR1cm4gaihxLHAscil9LGRlY3J5cHRLZXlCNjQ6ZnVuY3Rpb24ocCxyLHEscyl7cmV0dXJuIGIocCxyLHEscyl9LGdldERlY3J5cHRlZEtleUhleDpmdW5jdGlvbih5LHgpe3ZhciBxPW4oeSk7dmFyIHQ9cS50eXBlO3ZhciByPXEuY2lwaGVyO3ZhciBwPXEuaXZzYWx0O3ZhciBzPXEuZGF0YTt2YXIgdz1qKHIseCxwKTt2YXIgdj13LmtleWhleDt2YXIgdT1iKHMscix2LHApO3JldHVybiB1fSxnZXRFbmNyeXB0ZWRQS0NTNVBFTUZyb21QcnZLZXlIZXg6ZnVuY3Rpb24oeCxzLEEsdCxyKXt2YXIgcD1cIlwiO2lmKHR5cGVvZiB0PT1cInVuZGVmaW5lZFwifHx0PT1udWxsKXt0PVwiQUVTLTI1Ni1DQkNcIn1pZih0eXBlb2YgaVt0XT09XCJ1bmRlZmluZWRcIil7dGhyb3dcIktFWVVUSUwgdW5zdXBwb3J0ZWQgYWxnb3JpdGhtOiBcIit0fWlmKHR5cGVvZiByPT1cInVuZGVmaW5lZFwifHxyPT1udWxsKXt2YXIgdj1pW3RdW1wiaXZsZW5cIl07dmFyIHU9bSh2KTtyPXUudG9VcHBlckNhc2UoKX12YXIgej1qKHQsQSxyKTt2YXIgeT16LmtleWhleDt2YXIgdz1oKHMsdCx5LHIpO3ZhciBxPXcucmVwbGFjZSgvKC57NjR9KS9nLFwiJDFcXHJcXG5cIik7dmFyIHA9XCItLS0tLUJFR0lOIFwiK3grXCIgUFJJVkFURSBLRVktLS0tLVxcclxcblwiO3ArPVwiUHJvYy1UeXBlOiA0LEVOQ1JZUFRFRFxcclxcblwiO3ArPVwiREVLLUluZm86IFwiK3QrXCIsXCIrcitcIlxcclxcblwiO3ArPVwiXFxyXFxuXCI7cCs9cTtwKz1cIlxcclxcbi0tLS0tRU5EIFwiK3grXCIgUFJJVkFURSBLRVktLS0tLVxcclxcblwiO3JldHVybiBwfSxwYXJzZUhleE9mRW5jcnlwdGVkUEtDUzg6ZnVuY3Rpb24oeSl7dmFyIEI9QVNOMUhFWDt2YXIgej1CLmdldENoaWxkSWR4O3ZhciB3PUIuZ2V0Vjt2YXIgdD17fTt2YXIgcj16KHksMCk7aWYoci5sZW5ndGghPTIpe3Rocm93XCJtYWxmb3JtZWQgZm9ybWF0OiBTRVFVRU5DRSgwKS5pdGVtcyAhPSAyOiBcIityLmxlbmd0aH10LmNpcGhlcnRleHQ9dyh5LHJbMV0pO3ZhciBBPXooeSxyWzBdKTtpZihBLmxlbmd0aCE9Mil7dGhyb3dcIm1hbGZvcm1lZCBmb3JtYXQ6IFNFUVVFTkNFKDAuMCkuaXRlbXMgIT0gMjogXCIrQS5sZW5ndGh9aWYodyh5LEFbMF0pIT1cIjJhODY0ODg2ZjcwZDAxMDUwZFwiKXt0aHJvd1widGhpcyBvbmx5IHN1cHBvcnRzIHBrY3M1UEJFUzJcIn12YXIgcD16KHksQVsxXSk7aWYoQS5sZW5ndGghPTIpe3Rocm93XCJtYWxmb3JtZWQgZm9ybWF0OiBTRVFVRU5DRSgwLjAuMSkuaXRlbXMgIT0gMjogXCIrcC5sZW5ndGh9dmFyIHE9eih5LHBbMV0pO2lmKHEubGVuZ3RoIT0yKXt0aHJvd1wibWFsZm9ybWVkIGZvcm1hdDogU0VRVUVOQ0UoMC4wLjEuMSkuaXRlbXMgIT0gMjogXCIrcS5sZW5ndGh9aWYodyh5LHFbMF0pIT1cIjJhODY0ODg2ZjcwZDAzMDdcIil7dGhyb3dcInRoaXMgb25seSBzdXBwb3J0cyBUcmlwbGVERVNcIn10LmVuY3J5cHRpb25TY2hlbWVBbGc9XCJUcmlwbGVERVNcIjt0LmVuY3J5cHRpb25TY2hlbWVJVj13KHkscVsxXSk7dmFyIHM9eih5LHBbMF0pO2lmKHMubGVuZ3RoIT0yKXt0aHJvd1wibWFsZm9ybWVkIGZvcm1hdDogU0VRVUVOQ0UoMC4wLjEuMCkuaXRlbXMgIT0gMjogXCIrcy5sZW5ndGh9aWYodyh5LHNbMF0pIT1cIjJhODY0ODg2ZjcwZDAxMDUwY1wiKXt0aHJvd1widGhpcyBvbmx5IHN1cHBvcnRzIHBrY3M1UEJLREYyXCJ9dmFyIHg9eih5LHNbMV0pO2lmKHgubGVuZ3RoPDIpe3Rocm93XCJtYWxmb3JtZWQgZm9ybWF0OiBTRVFVRU5DRSgwLjAuMS4wLjEpLml0ZW1zIDwgMjogXCIreC5sZW5ndGh9dC5wYmtkZjJTYWx0PXcoeSx4WzBdKTt2YXIgdT13KHkseFsxXSk7dHJ5e3QucGJrZGYySXRlcj1wYXJzZUludCh1LDE2KX1jYXRjaCh2KXt0aHJvd1wibWFsZm9ybWVkIGZvcm1hdCBwYmtkZjJJdGVyOiBcIit1fXJldHVybiB0fSxnZXRQQktERjJLZXlIZXhGcm9tUGFyYW06ZnVuY3Rpb24odSxwKXt2YXIgdD1DcnlwdG9KUy5lbmMuSGV4LnBhcnNlKHUucGJrZGYyU2FsdCk7dmFyIHE9dS5wYmtkZjJJdGVyO3ZhciBzPUNyeXB0b0pTLlBCS0RGMihwLHQse2tleVNpemU6MTkyLzMyLGl0ZXJhdGlvbnM6cX0pO3ZhciByPUNyeXB0b0pTLmVuYy5IZXguc3RyaW5naWZ5KHMpO3JldHVybiByfSxfZ2V0UGxhaW5QS0NTOEhleEZyb21FbmNyeXB0ZWRQS0NTOFBFTTpmdW5jdGlvbih4LHkpe3ZhciByPXBlbXRvaGV4KHgsXCJFTkNSWVBURUQgUFJJVkFURSBLRVlcIik7dmFyIHA9dGhpcy5wYXJzZUhleE9mRW5jcnlwdGVkUEtDUzgocik7dmFyIHU9S0VZVVRJTC5nZXRQQktERjJLZXlIZXhGcm9tUGFyYW0ocCx5KTt2YXIgdj17fTt2LmNpcGhlcnRleHQ9Q3J5cHRvSlMuZW5jLkhleC5wYXJzZShwLmNpcGhlcnRleHQpO3ZhciB0PUNyeXB0b0pTLmVuYy5IZXgucGFyc2UodSk7dmFyIHM9Q3J5cHRvSlMuZW5jLkhleC5wYXJzZShwLmVuY3J5cHRpb25TY2hlbWVJVik7dmFyIHc9Q3J5cHRvSlMuVHJpcGxlREVTLmRlY3J5cHQodix0LHtpdjpzfSk7dmFyIHE9Q3J5cHRvSlMuZW5jLkhleC5zdHJpbmdpZnkodyk7cmV0dXJuIHF9LGdldEtleUZyb21FbmNyeXB0ZWRQS0NTOFBFTTpmdW5jdGlvbihzLHEpe3ZhciBwPXRoaXMuX2dldFBsYWluUEtDUzhIZXhGcm9tRW5jcnlwdGVkUEtDUzhQRU0ocyxxKTt2YXIgcj10aGlzLmdldEtleUZyb21QbGFpblByaXZhdGVQS0NTOEhleChwKTtyZXR1cm4gcn0scGFyc2VQbGFpblByaXZhdGVQS0NTOEhleDpmdW5jdGlvbihzKXt2YXIgdj1BU04xSEVYO3ZhciB1PXYuZ2V0Q2hpbGRJZHg7dmFyIHQ9di5nZXRWO3ZhciBxPXt9O3EuYWxncGFyYW09bnVsbDtpZihzLnN1YnN0cigwLDIpIT1cIjMwXCIpe3Rocm93XCJtYWxmb3JtZWQgcGxhaW4gUEtDUzggcHJpdmF0ZSBrZXkoY29kZTowMDEpXCJ9dmFyIHI9dShzLDApO2lmKHIubGVuZ3RoIT0zKXt0aHJvd1wibWFsZm9ybWVkIHBsYWluIFBLQ1M4IHByaXZhdGUga2V5KGNvZGU6MDAyKVwifWlmKHMuc3Vic3RyKHJbMV0sMikhPVwiMzBcIil7dGhyb3dcIm1hbGZvcm1lZCBQS0NTOCBwcml2YXRlIGtleShjb2RlOjAwMylcIn12YXIgcD11KHMsclsxXSk7aWYocC5sZW5ndGghPTIpe3Rocm93XCJtYWxmb3JtZWQgUEtDUzggcHJpdmF0ZSBrZXkoY29kZTowMDQpXCJ9aWYocy5zdWJzdHIocFswXSwyKSE9XCIwNlwiKXt0aHJvd1wibWFsZm9ybWVkIFBLQ1M4IHByaXZhdGUga2V5KGNvZGU6MDA1KVwifXEuYWxnb2lkPXQocyxwWzBdKTtpZihzLnN1YnN0cihwWzFdLDIpPT1cIjA2XCIpe3EuYWxncGFyYW09dChzLHBbMV0pfWlmKHMuc3Vic3RyKHJbMl0sMikhPVwiMDRcIil7dGhyb3dcIm1hbGZvcm1lZCBQS0NTOCBwcml2YXRlIGtleShjb2RlOjAwNilcIn1xLmtleWlkeD12LmdldFZpZHgocyxyWzJdKTtyZXR1cm4gcX0sZ2V0S2V5RnJvbVBsYWluUHJpdmF0ZVBLQ1M4UEVNOmZ1bmN0aW9uKHEpe3ZhciBwPXBlbXRvaGV4KHEsXCJQUklWQVRFIEtFWVwiKTt2YXIgcj10aGlzLmdldEtleUZyb21QbGFpblByaXZhdGVQS0NTOEhleChwKTtyZXR1cm4gcn0sZ2V0S2V5RnJvbVBsYWluUHJpdmF0ZVBLQ1M4SGV4OmZ1bmN0aW9uKHApe3ZhciBxPXRoaXMucGFyc2VQbGFpblByaXZhdGVQS0NTOEhleChwKTt2YXIgcjtpZihxLmFsZ29pZD09XCIyYTg2NDg4NmY3MGQwMTAxMDFcIil7cj1uZXcgUlNBS2V5KCl9ZWxzZXtpZihxLmFsZ29pZD09XCIyYTg2NDhjZTM4MDQwMVwiKXtyPW5ldyBLSlVSLmNyeXB0by5EU0EoKX1lbHNle2lmKHEuYWxnb2lkPT1cIjJhODY0OGNlM2QwMjAxXCIpe3I9bmV3IEtKVVIuY3J5cHRvLkVDRFNBKCl9ZWxzZXt0aHJvd1widW5zdXBwb3J0ZWQgcHJpdmF0ZSBrZXkgYWxnb3JpdGhtXCJ9fX1yLnJlYWRQS0NTOFBydktleUhleChwKTtyZXR1cm4gcn0sX2dldEtleUZyb21QdWJsaWNQS0NTOEhleDpmdW5jdGlvbihxKXt2YXIgcDt2YXIgcj1BU04xSEVYLmdldFZieUxpc3QocSwwLFswLDBdLFwiMDZcIik7aWYocj09PVwiMmE4NjQ4ODZmNzBkMDEwMTAxXCIpe3A9bmV3IFJTQUtleSgpfWVsc2V7aWYocj09PVwiMmE4NjQ4Y2UzODA0MDFcIil7cD1uZXcgS0pVUi5jcnlwdG8uRFNBKCl9ZWxzZXtpZihyPT09XCIyYTg2NDhjZTNkMDIwMVwiKXtwPW5ldyBLSlVSLmNyeXB0by5FQ0RTQSgpfWVsc2V7dGhyb3dcInVuc3VwcG9ydGVkIFBLQ1MjOCBwdWJsaWMga2V5IGhleFwifX19cC5yZWFkUEtDUzhQdWJLZXlIZXgocSk7cmV0dXJuIHB9LHBhcnNlUHVibGljUmF3UlNBS2V5SGV4OmZ1bmN0aW9uKHIpe3ZhciB1PUFTTjFIRVg7dmFyIHQ9dS5nZXRDaGlsZElkeDt2YXIgcz11LmdldFY7dmFyIHA9e307aWYoci5zdWJzdHIoMCwyKSE9XCIzMFwiKXt0aHJvd1wibWFsZm9ybWVkIFJTQSBrZXkoY29kZTowMDEpXCJ9dmFyIHE9dChyLDApO2lmKHEubGVuZ3RoIT0yKXt0aHJvd1wibWFsZm9ybWVkIFJTQSBrZXkoY29kZTowMDIpXCJ9aWYoci5zdWJzdHIocVswXSwyKSE9XCIwMlwiKXt0aHJvd1wibWFsZm9ybWVkIFJTQSBrZXkoY29kZTowMDMpXCJ9cC5uPXMocixxWzBdKTtpZihyLnN1YnN0cihxWzFdLDIpIT1cIjAyXCIpe3Rocm93XCJtYWxmb3JtZWQgUlNBIGtleShjb2RlOjAwNClcIn1wLmU9cyhyLHFbMV0pO3JldHVybiBwfSxwYXJzZVB1YmxpY1BLQ1M4SGV4OmZ1bmN0aW9uKHQpe3ZhciB2PUFTTjFIRVg7dmFyIHU9di5nZXRDaGlsZElkeDt2YXIgcz12LmdldFY7dmFyIHE9e307cS5hbGdwYXJhbT1udWxsO3ZhciByPXUodCwwKTtpZihyLmxlbmd0aCE9Mil7dGhyb3dcIm91dGVyIERFUlNlcXVlbmNlIHNoYWxsIGhhdmUgMiBlbGVtZW50czogXCIrci5sZW5ndGh9dmFyIHc9clswXTtpZih0LnN1YnN0cih3LDIpIT1cIjMwXCIpe3Rocm93XCJtYWxmb3JtZWQgUEtDUzggcHVibGljIGtleShjb2RlOjAwMSlcIn12YXIgcD11KHQsdyk7aWYocC5sZW5ndGghPTIpe3Rocm93XCJtYWxmb3JtZWQgUEtDUzggcHVibGljIGtleShjb2RlOjAwMilcIn1pZih0LnN1YnN0cihwWzBdLDIpIT1cIjA2XCIpe3Rocm93XCJtYWxmb3JtZWQgUEtDUzggcHVibGljIGtleShjb2RlOjAwMylcIn1xLmFsZ29pZD1zKHQscFswXSk7aWYodC5zdWJzdHIocFsxXSwyKT09XCIwNlwiKXtxLmFsZ3BhcmFtPXModCxwWzFdKX1lbHNle2lmKHQuc3Vic3RyKHBbMV0sMik9PVwiMzBcIil7cS5hbGdwYXJhbT17fTtxLmFsZ3BhcmFtLnA9di5nZXRWYnlMaXN0KHQscFsxXSxbMF0sXCIwMlwiKTtxLmFsZ3BhcmFtLnE9di5nZXRWYnlMaXN0KHQscFsxXSxbMV0sXCIwMlwiKTtxLmFsZ3BhcmFtLmc9di5nZXRWYnlMaXN0KHQscFsxXSxbMl0sXCIwMlwiKX19aWYodC5zdWJzdHIoclsxXSwyKSE9XCIwM1wiKXt0aHJvd1wibWFsZm9ybWVkIFBLQ1M4IHB1YmxpYyBrZXkoY29kZTowMDQpXCJ9cS5rZXk9cyh0LHJbMV0pLnN1YnN0cigyKTtyZXR1cm4gcX0sfX0oKTtLRVlVVElMLmdldEtleT1mdW5jdGlvbihsLGssbil7dmFyIEc9QVNOMUhFWCxMPUcuZ2V0Q2hpbGRJZHgsdj1HLmdldFYsZD1HLmdldFZieUxpc3QsYz1LSlVSLmNyeXB0byxpPWMuRUNEU0EsQz1jLkRTQSx3PVJTQUtleSxNPXBlbXRvaGV4LEY9S0VZVVRJTDtpZih0eXBlb2YgdyE9XCJ1bmRlZmluZWRcIiYmbCBpbnN0YW5jZW9mIHcpe3JldHVybiBsfWlmKHR5cGVvZiBpIT1cInVuZGVmaW5lZFwiJiZsIGluc3RhbmNlb2YgaSl7cmV0dXJuIGx9aWYodHlwZW9mIEMhPVwidW5kZWZpbmVkXCImJmwgaW5zdGFuY2VvZiBDKXtyZXR1cm4gbH1pZihsLmN1cnZlIT09dW5kZWZpbmVkJiZsLnh5IT09dW5kZWZpbmVkJiZsLmQ9PT11bmRlZmluZWQpe3JldHVybiBuZXcgaSh7cHViOmwueHksY3VydmU6bC5jdXJ2ZX0pfWlmKGwuY3VydmUhPT11bmRlZmluZWQmJmwuZCE9PXVuZGVmaW5lZCl7cmV0dXJuIG5ldyBpKHtwcnY6bC5kLGN1cnZlOmwuY3VydmV9KX1pZihsLmt0eT09PXVuZGVmaW5lZCYmbC5uIT09dW5kZWZpbmVkJiZsLmUhPT11bmRlZmluZWQmJmwuZD09PXVuZGVmaW5lZCl7dmFyIFA9bmV3IHcoKTtQLnNldFB1YmxpYyhsLm4sbC5lKTtyZXR1cm4gUH1pZihsLmt0eT09PXVuZGVmaW5lZCYmbC5uIT09dW5kZWZpbmVkJiZsLmUhPT11bmRlZmluZWQmJmwuZCE9PXVuZGVmaW5lZCYmbC5wIT09dW5kZWZpbmVkJiZsLnEhPT11bmRlZmluZWQmJmwuZHAhPT11bmRlZmluZWQmJmwuZHEhPT11bmRlZmluZWQmJmwuY28hPT11bmRlZmluZWQmJmwucWk9PT11bmRlZmluZWQpe3ZhciBQPW5ldyB3KCk7UC5zZXRQcml2YXRlRXgobC5uLGwuZSxsLmQsbC5wLGwucSxsLmRwLGwuZHEsbC5jbyk7cmV0dXJuIFB9aWYobC5rdHk9PT11bmRlZmluZWQmJmwubiE9PXVuZGVmaW5lZCYmbC5lIT09dW5kZWZpbmVkJiZsLmQhPT11bmRlZmluZWQmJmwucD09PXVuZGVmaW5lZCl7dmFyIFA9bmV3IHcoKTtQLnNldFByaXZhdGUobC5uLGwuZSxsLmQpO3JldHVybiBQfWlmKGwucCE9PXVuZGVmaW5lZCYmbC5xIT09dW5kZWZpbmVkJiZsLmchPT11bmRlZmluZWQmJmwueSE9PXVuZGVmaW5lZCYmbC54PT09dW5kZWZpbmVkKXt2YXIgUD1uZXcgQygpO1Auc2V0UHVibGljKGwucCxsLnEsbC5nLGwueSk7cmV0dXJuIFB9aWYobC5wIT09dW5kZWZpbmVkJiZsLnEhPT11bmRlZmluZWQmJmwuZyE9PXVuZGVmaW5lZCYmbC55IT09dW5kZWZpbmVkJiZsLnghPT11bmRlZmluZWQpe3ZhciBQPW5ldyBDKCk7UC5zZXRQcml2YXRlKGwucCxsLnEsbC5nLGwueSxsLngpO3JldHVybiBQfWlmKGwua3R5PT09XCJSU0FcIiYmbC5uIT09dW5kZWZpbmVkJiZsLmUhPT11bmRlZmluZWQmJmwuZD09PXVuZGVmaW5lZCl7dmFyIFA9bmV3IHcoKTtQLnNldFB1YmxpYyhiNjR1dG9oZXgobC5uKSxiNjR1dG9oZXgobC5lKSk7cmV0dXJuIFB9aWYobC5rdHk9PT1cIlJTQVwiJiZsLm4hPT11bmRlZmluZWQmJmwuZSE9PXVuZGVmaW5lZCYmbC5kIT09dW5kZWZpbmVkJiZsLnAhPT11bmRlZmluZWQmJmwucSE9PXVuZGVmaW5lZCYmbC5kcCE9PXVuZGVmaW5lZCYmbC5kcSE9PXVuZGVmaW5lZCYmbC5xaSE9PXVuZGVmaW5lZCl7dmFyIFA9bmV3IHcoKTtQLnNldFByaXZhdGVFeChiNjR1dG9oZXgobC5uKSxiNjR1dG9oZXgobC5lKSxiNjR1dG9oZXgobC5kKSxiNjR1dG9oZXgobC5wKSxiNjR1dG9oZXgobC5xKSxiNjR1dG9oZXgobC5kcCksYjY0dXRvaGV4KGwuZHEpLGI2NHV0b2hleChsLnFpKSk7cmV0dXJuIFB9aWYobC5rdHk9PT1cIlJTQVwiJiZsLm4hPT11bmRlZmluZWQmJmwuZSE9PXVuZGVmaW5lZCYmbC5kIT09dW5kZWZpbmVkKXt2YXIgUD1uZXcgdygpO1Auc2V0UHJpdmF0ZShiNjR1dG9oZXgobC5uKSxiNjR1dG9oZXgobC5lKSxiNjR1dG9oZXgobC5kKSk7cmV0dXJuIFB9aWYobC5rdHk9PT1cIkVDXCImJmwuY3J2IT09dW5kZWZpbmVkJiZsLnghPT11bmRlZmluZWQmJmwueSE9PXVuZGVmaW5lZCYmbC5kPT09dW5kZWZpbmVkKXt2YXIgaj1uZXcgaSh7Y3VydmU6bC5jcnZ9KTt2YXIgdD1qLmVjcGFyYW1zLmtleWxlbi80O3ZhciBCPShcIjAwMDAwMDAwMDBcIitiNjR1dG9oZXgobC54KSkuc2xpY2UoLXQpO3ZhciB6PShcIjAwMDAwMDAwMDBcIitiNjR1dG9oZXgobC55KSkuc2xpY2UoLXQpO3ZhciB1PVwiMDRcIitCK3o7ai5zZXRQdWJsaWNLZXlIZXgodSk7cmV0dXJuIGp9aWYobC5rdHk9PT1cIkVDXCImJmwuY3J2IT09dW5kZWZpbmVkJiZsLnghPT11bmRlZmluZWQmJmwueSE9PXVuZGVmaW5lZCYmbC5kIT09dW5kZWZpbmVkKXt2YXIgaj1uZXcgaSh7Y3VydmU6bC5jcnZ9KTt2YXIgdD1qLmVjcGFyYW1zLmtleWxlbi80O3ZhciBCPShcIjAwMDAwMDAwMDBcIitiNjR1dG9oZXgobC54KSkuc2xpY2UoLXQpO3ZhciB6PShcIjAwMDAwMDAwMDBcIitiNjR1dG9oZXgobC55KSkuc2xpY2UoLXQpO3ZhciB1PVwiMDRcIitCK3o7dmFyIGI9KFwiMDAwMDAwMDAwMFwiK2I2NHV0b2hleChsLmQpKS5zbGljZSgtdCk7ai5zZXRQdWJsaWNLZXlIZXgodSk7ai5zZXRQcml2YXRlS2V5SGV4KGIpO3JldHVybiBqfWlmKG49PT1cInBrY3M1cHJ2XCIpe3ZhciBKPWwsRz1BU04xSEVYLE4sUDtOPUwoSiwwKTtpZihOLmxlbmd0aD09PTkpe1A9bmV3IHcoKTtQLnJlYWRQS0NTNVBydktleUhleChKKX1lbHNle2lmKE4ubGVuZ3RoPT09Nil7UD1uZXcgQygpO1AucmVhZFBLQ1M1UHJ2S2V5SGV4KEopfWVsc2V7aWYoTi5sZW5ndGg+MiYmSi5zdWJzdHIoTlsxXSwyKT09PVwiMDRcIil7UD1uZXcgaSgpO1AucmVhZFBLQ1M1UHJ2S2V5SGV4KEopfWVsc2V7dGhyb3dcInVuc3VwcG9ydGVkIFBLQ1MjMS81IGhleGFkZWNpbWFsIGtleVwifX19cmV0dXJuIFB9aWYobj09PVwicGtjczhwcnZcIil7dmFyIFA9Ri5nZXRLZXlGcm9tUGxhaW5Qcml2YXRlUEtDUzhIZXgobCk7cmV0dXJuIFB9aWYobj09PVwicGtjczhwdWJcIil7cmV0dXJuIEYuX2dldEtleUZyb21QdWJsaWNQS0NTOEhleChsKX1pZihuPT09XCJ4NTA5cHViXCIpe3JldHVybiBYNTA5LmdldFB1YmxpY0tleUZyb21DZXJ0SGV4KGwpfWlmKGwuaW5kZXhPZihcIi1FTkQgQ0VSVElGSUNBVEUtXCIsMCkhPS0xfHxsLmluZGV4T2YoXCItRU5EIFg1MDkgQ0VSVElGSUNBVEUtXCIsMCkhPS0xfHxsLmluZGV4T2YoXCItRU5EIFRSVVNURUQgQ0VSVElGSUNBVEUtXCIsMCkhPS0xKXtyZXR1cm4gWDUwOS5nZXRQdWJsaWNLZXlGcm9tQ2VydFBFTShsKX1pZihsLmluZGV4T2YoXCItRU5EIFBVQkxJQyBLRVktXCIpIT0tMSl7dmFyIE89cGVtdG9oZXgobCxcIlBVQkxJQyBLRVlcIik7cmV0dXJuIEYuX2dldEtleUZyb21QdWJsaWNQS0NTOEhleChPKX1pZihsLmluZGV4T2YoXCItRU5EIFJTQSBQUklWQVRFIEtFWS1cIikhPS0xJiZsLmluZGV4T2YoXCI0LEVOQ1JZUFRFRFwiKT09LTEpe3ZhciBtPU0obCxcIlJTQSBQUklWQVRFIEtFWVwiKTtyZXR1cm4gRi5nZXRLZXkobSxudWxsLFwicGtjczVwcnZcIil9aWYobC5pbmRleE9mKFwiLUVORCBEU0EgUFJJVkFURSBLRVktXCIpIT0tMSYmbC5pbmRleE9mKFwiNCxFTkNSWVBURURcIik9PS0xKXt2YXIgST1NKGwsXCJEU0EgUFJJVkFURSBLRVlcIik7dmFyIEU9ZChJLDAsWzFdLFwiMDJcIik7dmFyIEQ9ZChJLDAsWzJdLFwiMDJcIik7dmFyIEs9ZChJLDAsWzNdLFwiMDJcIik7dmFyIHI9ZChJLDAsWzRdLFwiMDJcIik7dmFyIHM9ZChJLDAsWzVdLFwiMDJcIik7dmFyIFA9bmV3IEMoKTtQLnNldFByaXZhdGUobmV3IEJpZ0ludGVnZXIoRSwxNiksbmV3IEJpZ0ludGVnZXIoRCwxNiksbmV3IEJpZ0ludGVnZXIoSywxNiksbmV3IEJpZ0ludGVnZXIociwxNiksbmV3IEJpZ0ludGVnZXIocywxNikpO3JldHVybiBQfWlmKGwuaW5kZXhPZihcIi1FTkQgUFJJVkFURSBLRVktXCIpIT0tMSl7cmV0dXJuIEYuZ2V0S2V5RnJvbVBsYWluUHJpdmF0ZVBLQ1M4UEVNKGwpfWlmKGwuaW5kZXhPZihcIi1FTkQgUlNBIFBSSVZBVEUgS0VZLVwiKSE9LTEmJmwuaW5kZXhPZihcIjQsRU5DUllQVEVEXCIpIT0tMSl7dmFyIG89Ri5nZXREZWNyeXB0ZWRLZXlIZXgobCxrKTt2YXIgSD1uZXcgUlNBS2V5KCk7SC5yZWFkUEtDUzVQcnZLZXlIZXgobyk7cmV0dXJuIEh9aWYobC5pbmRleE9mKFwiLUVORCBFQyBQUklWQVRFIEtFWS1cIikhPS0xJiZsLmluZGV4T2YoXCI0LEVOQ1JZUFRFRFwiKSE9LTEpe3ZhciBJPUYuZ2V0RGVjcnlwdGVkS2V5SGV4KGwsayk7dmFyIFA9ZChJLDAsWzFdLFwiMDRcIik7dmFyIGY9ZChJLDAsWzIsMF0sXCIwNlwiKTt2YXIgQT1kKEksMCxbMywwXSxcIjAzXCIpLnN1YnN0cigyKTt2YXIgZT1cIlwiO2lmKEtKVVIuY3J5cHRvLk9JRC5vaWRoZXgybmFtZVtmXSE9PXVuZGVmaW5lZCl7ZT1LSlVSLmNyeXB0by5PSUQub2lkaGV4Mm5hbWVbZl19ZWxzZXt0aHJvd1widW5kZWZpbmVkIE9JRChoZXgpIGluIEtKVVIuY3J5cHRvLk9JRDogXCIrZn12YXIgaj1uZXcgaSh7Y3VydmU6ZX0pO2ouc2V0UHVibGljS2V5SGV4KEEpO2ouc2V0UHJpdmF0ZUtleUhleChQKTtqLmlzUHVibGljPWZhbHNlO3JldHVybiBqfWlmKGwuaW5kZXhPZihcIi1FTkQgRFNBIFBSSVZBVEUgS0VZLVwiKSE9LTEmJmwuaW5kZXhPZihcIjQsRU5DUllQVEVEXCIpIT0tMSl7dmFyIEk9Ri5nZXREZWNyeXB0ZWRLZXlIZXgobCxrKTt2YXIgRT1kKEksMCxbMV0sXCIwMlwiKTt2YXIgRD1kKEksMCxbMl0sXCIwMlwiKTt2YXIgSz1kKEksMCxbM10sXCIwMlwiKTt2YXIgcj1kKEksMCxbNF0sXCIwMlwiKTt2YXIgcz1kKEksMCxbNV0sXCIwMlwiKTt2YXIgUD1uZXcgQygpO1Auc2V0UHJpdmF0ZShuZXcgQmlnSW50ZWdlcihFLDE2KSxuZXcgQmlnSW50ZWdlcihELDE2KSxuZXcgQmlnSW50ZWdlcihLLDE2KSxuZXcgQmlnSW50ZWdlcihyLDE2KSxuZXcgQmlnSW50ZWdlcihzLDE2KSk7cmV0dXJuIFB9aWYobC5pbmRleE9mKFwiLUVORCBFTkNSWVBURUQgUFJJVkFURSBLRVktXCIpIT0tMSl7cmV0dXJuIEYuZ2V0S2V5RnJvbUVuY3J5cHRlZFBLQ1M4UEVNKGwsayl9dGhyb3dcIm5vdCBzdXBwb3J0ZWQgYXJndW1lbnRcIn07S0VZVVRJTC5nZW5lcmF0ZUtleXBhaXI9ZnVuY3Rpb24oYSxjKXtpZihhPT1cIlJTQVwiKXt2YXIgYj1jO3ZhciBoPW5ldyBSU0FLZXkoKTtoLmdlbmVyYXRlKGIsXCIxMDAwMVwiKTtoLmlzUHJpdmF0ZT10cnVlO2guaXNQdWJsaWM9dHJ1ZTt2YXIgZj1uZXcgUlNBS2V5KCk7dmFyIGU9aC5uLnRvU3RyaW5nKDE2KTt2YXIgaT1oLmUudG9TdHJpbmcoMTYpO2Yuc2V0UHVibGljKGUsaSk7Zi5pc1ByaXZhdGU9ZmFsc2U7Zi5pc1B1YmxpYz10cnVlO3ZhciBrPXt9O2sucHJ2S2V5T2JqPWg7ay5wdWJLZXlPYmo9ZjtyZXR1cm4ga31lbHNle2lmKGE9PVwiRUNcIil7dmFyIGQ9Yzt2YXIgZz1uZXcgS0pVUi5jcnlwdG8uRUNEU0Eoe2N1cnZlOmR9KTt2YXIgaj1nLmdlbmVyYXRlS2V5UGFpckhleCgpO3ZhciBoPW5ldyBLSlVSLmNyeXB0by5FQ0RTQSh7Y3VydmU6ZH0pO2guc2V0UHVibGljS2V5SGV4KGouZWNwdWJoZXgpO2guc2V0UHJpdmF0ZUtleUhleChqLmVjcHJ2aGV4KTtoLmlzUHJpdmF0ZT10cnVlO2guaXNQdWJsaWM9ZmFsc2U7dmFyIGY9bmV3IEtKVVIuY3J5cHRvLkVDRFNBKHtjdXJ2ZTpkfSk7Zi5zZXRQdWJsaWNLZXlIZXgoai5lY3B1YmhleCk7Zi5pc1ByaXZhdGU9ZmFsc2U7Zi5pc1B1YmxpYz10cnVlO3ZhciBrPXt9O2sucHJ2S2V5T2JqPWg7ay5wdWJLZXlPYmo9ZjtyZXR1cm4ga31lbHNle3Rocm93XCJ1bmtub3duIGFsZ29yaXRobTogXCIrYX19fTtLRVlVVElMLmdldFBFTT1mdW5jdGlvbihiLEQseSxtLHEsail7dmFyIEY9S0pVUixrPUYuYXNuMSx6PWsuREVST2JqZWN0SWRlbnRpZmllcixmPWsuREVSSW50ZWdlcixsPWsuQVNOMVV0aWwubmV3T2JqZWN0LGE9ay54NTA5LEM9YS5TdWJqZWN0UHVibGljS2V5SW5mbyxlPUYuY3J5cHRvLHU9ZS5EU0Escj1lLkVDRFNBLG49UlNBS2V5O2Z1bmN0aW9uIEEocyl7dmFyIEc9bCh7c2VxOlt7XCJpbnRcIjowfSx7XCJpbnRcIjp7YmlnaW50OnMubn19LHtcImludFwiOnMuZX0se1wiaW50XCI6e2JpZ2ludDpzLmR9fSx7XCJpbnRcIjp7YmlnaW50OnMucH19LHtcImludFwiOntiaWdpbnQ6cy5xfX0se1wiaW50XCI6e2JpZ2ludDpzLmRtcDF9fSx7XCJpbnRcIjp7YmlnaW50OnMuZG1xMX19LHtcImludFwiOntiaWdpbnQ6cy5jb2VmZn19XX0pO3JldHVybiBHfWZ1bmN0aW9uIEIoRyl7dmFyIHM9bCh7c2VxOlt7XCJpbnRcIjoxfSx7b2N0c3RyOntoZXg6Ry5wcnZLZXlIZXh9fSx7dGFnOltcImEwXCIsdHJ1ZSx7b2lkOntuYW1lOkcuY3VydmVOYW1lfX1dfSx7dGFnOltcImExXCIsdHJ1ZSx7Yml0c3RyOntoZXg6XCIwMFwiK0cucHViS2V5SGV4fX1dfV19KTtyZXR1cm4gc31mdW5jdGlvbiB4KHMpe3ZhciBHPWwoe3NlcTpbe1wiaW50XCI6MH0se1wiaW50XCI6e2JpZ2ludDpzLnB9fSx7XCJpbnRcIjp7YmlnaW50OnMucX19LHtcImludFwiOntiaWdpbnQ6cy5nfX0se1wiaW50XCI6e2JpZ2ludDpzLnl9fSx7XCJpbnRcIjp7YmlnaW50OnMueH19XX0pO3JldHVybiBHfWlmKCgobiE9PXVuZGVmaW5lZCYmYiBpbnN0YW5jZW9mIG4pfHwodSE9PXVuZGVmaW5lZCYmYiBpbnN0YW5jZW9mIHUpfHwociE9PXVuZGVmaW5lZCYmYiBpbnN0YW5jZW9mIHIpKSYmYi5pc1B1YmxpYz09dHJ1ZSYmKEQ9PT11bmRlZmluZWR8fEQ9PVwiUEtDUzhQVUJcIikpe3ZhciBFPW5ldyBDKGIpO3ZhciB3PUUuZ2V0RW5jb2RlZEhleCgpO3JldHVybiBoZXh0b3BlbSh3LFwiUFVCTElDIEtFWVwiKX1pZihEPT1cIlBLQ1MxUFJWXCImJm4hPT11bmRlZmluZWQmJmIgaW5zdGFuY2VvZiBuJiYoeT09PXVuZGVmaW5lZHx8eT09bnVsbCkmJmIuaXNQcml2YXRlPT10cnVlKXt2YXIgRT1BKGIpO3ZhciB3PUUuZ2V0RW5jb2RlZEhleCgpO3JldHVybiBoZXh0b3BlbSh3LFwiUlNBIFBSSVZBVEUgS0VZXCIpfWlmKEQ9PVwiUEtDUzFQUlZcIiYmciE9PXVuZGVmaW5lZCYmYiBpbnN0YW5jZW9mIHImJih5PT09dW5kZWZpbmVkfHx5PT1udWxsKSYmYi5pc1ByaXZhdGU9PXRydWUpe3ZhciBpPW5ldyB6KHtuYW1lOmIuY3VydmVOYW1lfSk7dmFyIHY9aS5nZXRFbmNvZGVkSGV4KCk7dmFyIGg9QihiKTt2YXIgdD1oLmdldEVuY29kZWRIZXgoKTt2YXIgcD1cIlwiO3ArPWhleHRvcGVtKHYsXCJFQyBQQVJBTUVURVJTXCIpO3ArPWhleHRvcGVtKHQsXCJFQyBQUklWQVRFIEtFWVwiKTtyZXR1cm4gcH1pZihEPT1cIlBLQ1MxUFJWXCImJnUhPT11bmRlZmluZWQmJmIgaW5zdGFuY2VvZiB1JiYoeT09PXVuZGVmaW5lZHx8eT09bnVsbCkmJmIuaXNQcml2YXRlPT10cnVlKXt2YXIgRT14KGIpO3ZhciB3PUUuZ2V0RW5jb2RlZEhleCgpO3JldHVybiBoZXh0b3BlbSh3LFwiRFNBIFBSSVZBVEUgS0VZXCIpfWlmKEQ9PVwiUEtDUzVQUlZcIiYmbiE9PXVuZGVmaW5lZCYmYiBpbnN0YW5jZW9mIG4mJih5IT09dW5kZWZpbmVkJiZ5IT1udWxsKSYmYi5pc1ByaXZhdGU9PXRydWUpe3ZhciBFPUEoYik7dmFyIHc9RS5nZXRFbmNvZGVkSGV4KCk7aWYobT09PXVuZGVmaW5lZCl7bT1cIkRFUy1FREUzLUNCQ1wifXJldHVybiB0aGlzLmdldEVuY3J5cHRlZFBLQ1M1UEVNRnJvbVBydktleUhleChcIlJTQVwiLHcseSxtLGopfWlmKEQ9PVwiUEtDUzVQUlZcIiYmciE9PXVuZGVmaW5lZCYmYiBpbnN0YW5jZW9mIHImJih5IT09dW5kZWZpbmVkJiZ5IT1udWxsKSYmYi5pc1ByaXZhdGU9PXRydWUpe3ZhciBFPUIoYik7dmFyIHc9RS5nZXRFbmNvZGVkSGV4KCk7aWYobT09PXVuZGVmaW5lZCl7bT1cIkRFUy1FREUzLUNCQ1wifXJldHVybiB0aGlzLmdldEVuY3J5cHRlZFBLQ1M1UEVNRnJvbVBydktleUhleChcIkVDXCIsdyx5LG0sail9aWYoRD09XCJQS0NTNVBSVlwiJiZ1IT09dW5kZWZpbmVkJiZiIGluc3RhbmNlb2YgdSYmKHkhPT11bmRlZmluZWQmJnkhPW51bGwpJiZiLmlzUHJpdmF0ZT09dHJ1ZSl7dmFyIEU9eChiKTt2YXIgdz1FLmdldEVuY29kZWRIZXgoKTtpZihtPT09dW5kZWZpbmVkKXttPVwiREVTLUVERTMtQ0JDXCJ9cmV0dXJuIHRoaXMuZ2V0RW5jcnlwdGVkUEtDUzVQRU1Gcm9tUHJ2S2V5SGV4KFwiRFNBXCIsdyx5LG0sail9dmFyIG89ZnVuY3Rpb24oRyxzKXt2YXIgST1jKEcscyk7dmFyIEg9bmV3IGwoe3NlcTpbe3NlcTpbe29pZDp7bmFtZTpcInBrY3M1UEJFUzJcIn19LHtzZXE6W3tzZXE6W3tvaWQ6e25hbWU6XCJwa2NzNVBCS0RGMlwifX0se3NlcTpbe29jdHN0cjp7aGV4OkkucGJrZGYyU2FsdH19LHtcImludFwiOkkucGJrZGYySXRlcn1dfV19LHtzZXE6W3tvaWQ6e25hbWU6XCJkZXMtRURFMy1DQkNcIn19LHtvY3RzdHI6e2hleDpJLmVuY3J5cHRpb25TY2hlbWVJVn19XX1dfV19LHtvY3RzdHI6e2hleDpJLmNpcGhlcnRleHR9fV19KTtyZXR1cm4gSC5nZXRFbmNvZGVkSGV4KCl9O3ZhciBjPWZ1bmN0aW9uKE4sTyl7dmFyIEg9MTAwO3ZhciBNPUNyeXB0b0pTLmxpYi5Xb3JkQXJyYXkucmFuZG9tKDgpO3ZhciBMPVwiREVTLUVERTMtQ0JDXCI7dmFyIHM9Q3J5cHRvSlMubGliLldvcmRBcnJheS5yYW5kb20oOCk7dmFyIEk9Q3J5cHRvSlMuUEJLREYyKE8sTSx7a2V5U2l6ZToxOTIvMzIsaXRlcmF0aW9uczpIfSk7dmFyIEo9Q3J5cHRvSlMuZW5jLkhleC5wYXJzZShOKTt2YXIgSz1DcnlwdG9KUy5UcmlwbGVERVMuZW5jcnlwdChKLEkse2l2OnN9KStcIlwiO3ZhciBHPXt9O0cuY2lwaGVydGV4dD1LO0cucGJrZGYyU2FsdD1DcnlwdG9KUy5lbmMuSGV4LnN0cmluZ2lmeShNKTtHLnBia2RmMkl0ZXI9SDtHLmVuY3J5cHRpb25TY2hlbWVBbGc9TDtHLmVuY3J5cHRpb25TY2hlbWVJVj1DcnlwdG9KUy5lbmMuSGV4LnN0cmluZ2lmeShzKTtyZXR1cm4gR307aWYoRD09XCJQS0NTOFBSVlwiJiZuIT11bmRlZmluZWQmJmIgaW5zdGFuY2VvZiBuJiZiLmlzUHJpdmF0ZT09dHJ1ZSl7dmFyIGc9QShiKTt2YXIgZD1nLmdldEVuY29kZWRIZXgoKTt2YXIgRT1sKHtzZXE6W3tcImludFwiOjB9LHtzZXE6W3tvaWQ6e25hbWU6XCJyc2FFbmNyeXB0aW9uXCJ9fSx7XCJudWxsXCI6dHJ1ZX1dfSx7b2N0c3RyOntoZXg6ZH19XX0pO3ZhciB3PUUuZ2V0RW5jb2RlZEhleCgpO2lmKHk9PT11bmRlZmluZWR8fHk9PW51bGwpe3JldHVybiBoZXh0b3BlbSh3LFwiUFJJVkFURSBLRVlcIil9ZWxzZXt2YXIgdD1vKHcseSk7cmV0dXJuIGhleHRvcGVtKHQsXCJFTkNSWVBURUQgUFJJVkFURSBLRVlcIil9fWlmKEQ9PVwiUEtDUzhQUlZcIiYmciE9PXVuZGVmaW5lZCYmYiBpbnN0YW5jZW9mIHImJmIuaXNQcml2YXRlPT10cnVlKXt2YXIgZz1uZXcgbCh7c2VxOlt7XCJpbnRcIjoxfSx7b2N0c3RyOntoZXg6Yi5wcnZLZXlIZXh9fSx7dGFnOltcImExXCIsdHJ1ZSx7Yml0c3RyOntoZXg6XCIwMFwiK2IucHViS2V5SGV4fX1dfV19KTt2YXIgZD1nLmdldEVuY29kZWRIZXgoKTt2YXIgRT1sKHtzZXE6W3tcImludFwiOjB9LHtzZXE6W3tvaWQ6e25hbWU6XCJlY1B1YmxpY0tleVwifX0se29pZDp7bmFtZTpiLmN1cnZlTmFtZX19XX0se29jdHN0cjp7aGV4OmR9fV19KTt2YXIgdz1FLmdldEVuY29kZWRIZXgoKTtpZih5PT09dW5kZWZpbmVkfHx5PT1udWxsKXtyZXR1cm4gaGV4dG9wZW0odyxcIlBSSVZBVEUgS0VZXCIpfWVsc2V7dmFyIHQ9byh3LHkpO3JldHVybiBoZXh0b3BlbSh0LFwiRU5DUllQVEVEIFBSSVZBVEUgS0VZXCIpfX1pZihEPT1cIlBLQ1M4UFJWXCImJnUhPT11bmRlZmluZWQmJmIgaW5zdGFuY2VvZiB1JiZiLmlzUHJpdmF0ZT09dHJ1ZSl7dmFyIGc9bmV3IGYoe2JpZ2ludDpiLnh9KTt2YXIgZD1nLmdldEVuY29kZWRIZXgoKTt2YXIgRT1sKHtzZXE6W3tcImludFwiOjB9LHtzZXE6W3tvaWQ6e25hbWU6XCJkc2FcIn19LHtzZXE6W3tcImludFwiOntiaWdpbnQ6Yi5wfX0se1wiaW50XCI6e2JpZ2ludDpiLnF9fSx7XCJpbnRcIjp7YmlnaW50OmIuZ319XX1dfSx7b2N0c3RyOntoZXg6ZH19XX0pO3ZhciB3PUUuZ2V0RW5jb2RlZEhleCgpO2lmKHk9PT11bmRlZmluZWR8fHk9PW51bGwpe3JldHVybiBoZXh0b3BlbSh3LFwiUFJJVkFURSBLRVlcIil9ZWxzZXt2YXIgdD1vKHcseSk7cmV0dXJuIGhleHRvcGVtKHQsXCJFTkNSWVBURUQgUFJJVkFURSBLRVlcIil9fXRocm93XCJ1bnN1cHBvcnRlZCBvYmplY3Qgbm9yIGZvcm1hdFwifTtLRVlVVElMLmdldEtleUZyb21DU1JQRU09ZnVuY3Rpb24oYil7dmFyIGE9cGVtdG9oZXgoYixcIkNFUlRJRklDQVRFIFJFUVVFU1RcIik7dmFyIGM9S0VZVVRJTC5nZXRLZXlGcm9tQ1NSSGV4KGEpO3JldHVybiBjfTtLRVlVVElMLmdldEtleUZyb21DU1JIZXg9ZnVuY3Rpb24oYSl7dmFyIGM9S0VZVVRJTC5wYXJzZUNTUkhleChhKTt2YXIgYj1LRVlVVElMLmdldEtleShjLnA4cHVia2V5aGV4LG51bGwsXCJwa2NzOHB1YlwiKTtyZXR1cm4gYn07S0VZVVRJTC5wYXJzZUNTUkhleD1mdW5jdGlvbihkKXt2YXIgaT1BU04xSEVYO3ZhciBmPWkuZ2V0Q2hpbGRJZHg7dmFyIGM9aS5nZXRUTFY7dmFyIGI9e307dmFyIGc9ZDtpZihnLnN1YnN0cigwLDIpIT1cIjMwXCIpe3Rocm93XCJtYWxmb3JtZWQgQ1NSKGNvZGU6MDAxKVwifXZhciBlPWYoZywwKTtpZihlLmxlbmd0aDwxKXt0aHJvd1wibWFsZm9ybWVkIENTUihjb2RlOjAwMilcIn1pZihnLnN1YnN0cihlWzBdLDIpIT1cIjMwXCIpe3Rocm93XCJtYWxmb3JtZWQgQ1NSKGNvZGU6MDAzKVwifXZhciBhPWYoZyxlWzBdKTtpZihhLmxlbmd0aDwzKXt0aHJvd1wibWFsZm9ybWVkIENTUihjb2RlOjAwNClcIn1iLnA4cHVia2V5aGV4PWMoZyxhWzJdKTtyZXR1cm4gYn07S0VZVVRJTC5nZXRKV0tGcm9tS2V5PWZ1bmN0aW9uKGQpe3ZhciBiPXt9O2lmKGQgaW5zdGFuY2VvZiBSU0FLZXkmJmQuaXNQcml2YXRlKXtiLmt0eT1cIlJTQVwiO2Iubj1oZXh0b2I2NHUoZC5uLnRvU3RyaW5nKDE2KSk7Yi5lPWhleHRvYjY0dShkLmUudG9TdHJpbmcoMTYpKTtiLmQ9aGV4dG9iNjR1KGQuZC50b1N0cmluZygxNikpO2IucD1oZXh0b2I2NHUoZC5wLnRvU3RyaW5nKDE2KSk7Yi5xPWhleHRvYjY0dShkLnEudG9TdHJpbmcoMTYpKTtiLmRwPWhleHRvYjY0dShkLmRtcDEudG9TdHJpbmcoMTYpKTtiLmRxPWhleHRvYjY0dShkLmRtcTEudG9TdHJpbmcoMTYpKTtiLnFpPWhleHRvYjY0dShkLmNvZWZmLnRvU3RyaW5nKDE2KSk7cmV0dXJuIGJ9ZWxzZXtpZihkIGluc3RhbmNlb2YgUlNBS2V5JiZkLmlzUHVibGljKXtiLmt0eT1cIlJTQVwiO2Iubj1oZXh0b2I2NHUoZC5uLnRvU3RyaW5nKDE2KSk7Yi5lPWhleHRvYjY0dShkLmUudG9TdHJpbmcoMTYpKTtyZXR1cm4gYn1lbHNle2lmKGQgaW5zdGFuY2VvZiBLSlVSLmNyeXB0by5FQ0RTQSYmZC5pc1ByaXZhdGUpe3ZhciBhPWQuZ2V0U2hvcnROSVNUUEN1cnZlTmFtZSgpO2lmKGEhPT1cIlAtMjU2XCImJmEhPT1cIlAtMzg0XCIpe3Rocm93XCJ1bnN1cHBvcnRlZCBjdXJ2ZSBuYW1lIGZvciBKV1Q6IFwiK2F9dmFyIGM9ZC5nZXRQdWJsaWNLZXlYWUhleCgpO2Iua3R5PVwiRUNcIjtiLmNydj1hO2IueD1oZXh0b2I2NHUoYy54KTtiLnk9aGV4dG9iNjR1KGMueSk7Yi5kPWhleHRvYjY0dShkLnBydktleUhleCk7cmV0dXJuIGJ9ZWxzZXtpZihkIGluc3RhbmNlb2YgS0pVUi5jcnlwdG8uRUNEU0EmJmQuaXNQdWJsaWMpe3ZhciBhPWQuZ2V0U2hvcnROSVNUUEN1cnZlTmFtZSgpO2lmKGEhPT1cIlAtMjU2XCImJmEhPT1cIlAtMzg0XCIpe3Rocm93XCJ1bnN1cHBvcnRlZCBjdXJ2ZSBuYW1lIGZvciBKV1Q6IFwiK2F9dmFyIGM9ZC5nZXRQdWJsaWNLZXlYWUhleCgpO2Iua3R5PVwiRUNcIjtiLmNydj1hO2IueD1oZXh0b2I2NHUoYy54KTtiLnk9aGV4dG9iNjR1KGMueSk7cmV0dXJuIGJ9fX19dGhyb3dcIm5vdCBzdXBwb3J0ZWQga2V5IG9iamVjdFwifTtcblJTQUtleS5nZXRQb3NBcnJheU9mQ2hpbGRyZW5Gcm9tSGV4PWZ1bmN0aW9uKGEpe3JldHVybiBBU04xSEVYLmdldENoaWxkSWR4KGEsMCl9O1JTQUtleS5nZXRIZXhWYWx1ZUFycmF5T2ZDaGlsZHJlbkZyb21IZXg9ZnVuY3Rpb24oZil7dmFyIG49QVNOMUhFWDt2YXIgaT1uLmdldFY7dmFyIGs9UlNBS2V5LmdldFBvc0FycmF5T2ZDaGlsZHJlbkZyb21IZXgoZik7dmFyIGU9aShmLGtbMF0pO3ZhciBqPWkoZixrWzFdKTt2YXIgYj1pKGYsa1syXSk7dmFyIGM9aShmLGtbM10pO3ZhciBoPWkoZixrWzRdKTt2YXIgZz1pKGYsa1s1XSk7dmFyIG09aShmLGtbNl0pO3ZhciBsPWkoZixrWzddKTt2YXIgZD1pKGYsa1s4XSk7dmFyIGs9bmV3IEFycmF5KCk7ay5wdXNoKGUsaixiLGMsaCxnLG0sbCxkKTtyZXR1cm4ga307UlNBS2V5LnByb3RvdHlwZS5yZWFkUHJpdmF0ZUtleUZyb21QRU1TdHJpbmc9ZnVuY3Rpb24oZCl7dmFyIGM9cGVtdG9oZXgoZCk7dmFyIGI9UlNBS2V5LmdldEhleFZhbHVlQXJyYXlPZkNoaWxkcmVuRnJvbUhleChjKTt0aGlzLnNldFByaXZhdGVFeChiWzFdLGJbMl0sYlszXSxiWzRdLGJbNV0sYls2XSxiWzddLGJbOF0pfTtSU0FLZXkucHJvdG90eXBlLnJlYWRQS0NTNVBydktleUhleD1mdW5jdGlvbihjKXt2YXIgYj1SU0FLZXkuZ2V0SGV4VmFsdWVBcnJheU9mQ2hpbGRyZW5Gcm9tSGV4KGMpO3RoaXMuc2V0UHJpdmF0ZUV4KGJbMV0sYlsyXSxiWzNdLGJbNF0sYls1XSxiWzZdLGJbN10sYls4XSl9O1JTQUtleS5wcm90b3R5cGUucmVhZFBLQ1M4UHJ2S2V5SGV4PWZ1bmN0aW9uKGUpe3ZhciBjLGosbCxiLGEsZixkLGs7dmFyIG09QVNOMUhFWDt2YXIgZz1tLmdldFZieUxpc3Q7aWYobS5pc0FTTjFIRVgoZSk9PT1mYWxzZSl7dGhyb3dcIm5vdCBBU04uMSBoZXggc3RyaW5nXCJ9dHJ5e2M9ZyhlLDAsWzIsMCwxXSxcIjAyXCIpO2o9ZyhlLDAsWzIsMCwyXSxcIjAyXCIpO2w9ZyhlLDAsWzIsMCwzXSxcIjAyXCIpO2I9ZyhlLDAsWzIsMCw0XSxcIjAyXCIpO2E9ZyhlLDAsWzIsMCw1XSxcIjAyXCIpO2Y9ZyhlLDAsWzIsMCw2XSxcIjAyXCIpO2Q9ZyhlLDAsWzIsMCw3XSxcIjAyXCIpO2s9ZyhlLDAsWzIsMCw4XSxcIjAyXCIpfWNhdGNoKGkpe3Rocm93XCJtYWxmb3JtZWQgUEtDUyM4IHBsYWluIFJTQSBwcml2YXRlIGtleVwifXRoaXMuc2V0UHJpdmF0ZUV4KGMsaixsLGIsYSxmLGQsayl9O1JTQUtleS5wcm90b3R5cGUucmVhZFBLQ1M1UHViS2V5SGV4PWZ1bmN0aW9uKGMpe3ZhciBlPUFTTjFIRVg7dmFyIGI9ZS5nZXRWO2lmKGUuaXNBU04xSEVYKGMpPT09ZmFsc2Upe3Rocm93XCJrZXlIZXggaXMgbm90IEFTTi4xIGhleCBzdHJpbmdcIn12YXIgYT1lLmdldENoaWxkSWR4KGMsMCk7aWYoYS5sZW5ndGghPT0yfHxjLnN1YnN0cihhWzBdLDIpIT09XCIwMlwifHxjLnN1YnN0cihhWzFdLDIpIT09XCIwMlwiKXt0aHJvd1wid3JvbmcgaGV4IGZvciBQS0NTIzUgcHVibGljIGtleVwifXZhciBmPWIoYyxhWzBdKTt2YXIgZD1iKGMsYVsxXSk7dGhpcy5zZXRQdWJsaWMoZixkKX07UlNBS2V5LnByb3RvdHlwZS5yZWFkUEtDUzhQdWJLZXlIZXg9ZnVuY3Rpb24oYil7dmFyIGM9QVNOMUhFWDtpZihjLmlzQVNOMUhFWChiKT09PWZhbHNlKXt0aHJvd1wibm90IEFTTi4xIGhleCBzdHJpbmdcIn1pZihjLmdldFRMVmJ5TGlzdChiLDAsWzAsMF0pIT09XCIwNjA5MmE4NjQ4ODZmNzBkMDEwMTAxXCIpe3Rocm93XCJub3QgUEtDUzggUlNBIHB1YmxpYyBrZXlcIn12YXIgYT1jLmdldFRMVmJ5TGlzdChiLDAsWzEsMF0pO3RoaXMucmVhZFBLQ1M1UHViS2V5SGV4KGEpfTtSU0FLZXkucHJvdG90eXBlLnJlYWRDZXJ0UHViS2V5SGV4PWZ1bmN0aW9uKGIsZCl7dmFyIGEsYzthPW5ldyBYNTA5KCk7YS5yZWFkQ2VydEhleChiKTtjPWEuZ2V0UHVibGljS2V5SGV4KCk7dGhpcy5yZWFkUEtDUzhQdWJLZXlIZXgoYyl9O1xudmFyIF9SRV9IRVhERUNPTkxZPW5ldyBSZWdFeHAoXCJcIik7X1JFX0hFWERFQ09OTFkuY29tcGlsZShcIlteMC05YS1mXVwiLFwiZ2lcIik7ZnVuY3Rpb24gX3JzYXNpZ25fZ2V0SGV4UGFkZGVkRGlnZXN0SW5mb0ZvclN0cmluZyhkLGUsYSl7dmFyIGI9ZnVuY3Rpb24oZil7cmV0dXJuIEtKVVIuY3J5cHRvLlV0aWwuaGFzaFN0cmluZyhmLGEpfTt2YXIgYz1iKGQpO3JldHVybiBLSlVSLmNyeXB0by5VdGlsLmdldFBhZGRlZERpZ2VzdEluZm9IZXgoYyxhLGUpfWZ1bmN0aW9uIF96ZXJvUGFkZGluZ09mU2lnbmF0dXJlKGUsZCl7dmFyIGM9XCJcIjt2YXIgYT1kLzQtZS5sZW5ndGg7Zm9yKHZhciBiPTA7YjxhO2IrKyl7Yz1jK1wiMFwifXJldHVybiBjK2V9UlNBS2V5LnByb3RvdHlwZS5zaWduPWZ1bmN0aW9uKGQsYSl7dmFyIGI9ZnVuY3Rpb24oZSl7cmV0dXJuIEtKVVIuY3J5cHRvLlV0aWwuaGFzaFN0cmluZyhlLGEpfTt2YXIgYz1iKGQpO3JldHVybiB0aGlzLnNpZ25XaXRoTWVzc2FnZUhhc2goYyxhKX07UlNBS2V5LnByb3RvdHlwZS5zaWduV2l0aE1lc3NhZ2VIYXNoPWZ1bmN0aW9uKGUsYyl7dmFyIGY9S0pVUi5jcnlwdG8uVXRpbC5nZXRQYWRkZWREaWdlc3RJbmZvSGV4KGUsYyx0aGlzLm4uYml0TGVuZ3RoKCkpO3ZhciBiPXBhcnNlQmlnSW50KGYsMTYpO3ZhciBkPXRoaXMuZG9Qcml2YXRlKGIpO3ZhciBhPWQudG9TdHJpbmcoMTYpO3JldHVybiBfemVyb1BhZGRpbmdPZlNpZ25hdHVyZShhLHRoaXMubi5iaXRMZW5ndGgoKSl9O2Z1bmN0aW9uIHBzc19tZ2YxX3N0cihjLGEsZSl7dmFyIGI9XCJcIixkPTA7d2hpbGUoYi5sZW5ndGg8YSl7Yis9aGV4dG9yc3RyKGUocnN0cnRvaGV4KGMrU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsWyhkJjQyNzgxOTAwODApPj4yNCwoZCYxNjcxMTY4MCk+PjE2LChkJjY1MjgwKT4+OCxkJjI1NV0pKSkpO2QrPTF9cmV0dXJuIGJ9UlNBS2V5LnByb3RvdHlwZS5zaWduUFNTPWZ1bmN0aW9uKGUsYSxkKXt2YXIgYz1mdW5jdGlvbihmKXtyZXR1cm4gS0pVUi5jcnlwdG8uVXRpbC5oYXNoSGV4KGYsYSl9O3ZhciBiPWMocnN0cnRvaGV4KGUpKTtpZihkPT09dW5kZWZpbmVkKXtkPS0xfXJldHVybiB0aGlzLnNpZ25XaXRoTWVzc2FnZUhhc2hQU1MoYixhLGQpfTtSU0FLZXkucHJvdG90eXBlLnNpZ25XaXRoTWVzc2FnZUhhc2hQU1M9ZnVuY3Rpb24obCxhLGspe3ZhciBiPWhleHRvcnN0cihsKTt2YXIgZz1iLmxlbmd0aDt2YXIgbT10aGlzLm4uYml0TGVuZ3RoKCktMTt2YXIgYz1NYXRoLmNlaWwobS84KTt2YXIgZDt2YXIgbz1mdW5jdGlvbihpKXtyZXR1cm4gS0pVUi5jcnlwdG8uVXRpbC5oYXNoSGV4KGksYSl9O2lmKGs9PT0tMXx8az09PXVuZGVmaW5lZCl7az1nfWVsc2V7aWYoaz09PS0yKXtrPWMtZy0yfWVsc2V7aWYoazwtMil7dGhyb3dcImludmFsaWQgc2FsdCBsZW5ndGhcIn19fWlmKGM8KGcraysyKSl7dGhyb3dcImRhdGEgdG9vIGxvbmdcIn12YXIgZj1cIlwiO2lmKGs+MCl7Zj1uZXcgQXJyYXkoayk7bmV3IFNlY3VyZVJhbmRvbSgpLm5leHRCeXRlcyhmKTtmPVN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLGYpfXZhciBuPWhleHRvcnN0cihvKHJzdHJ0b2hleChcIlxceDAwXFx4MDBcXHgwMFxceDAwXFx4MDBcXHgwMFxceDAwXFx4MDBcIitiK2YpKSk7dmFyIGo9W107Zm9yKGQ9MDtkPGMtay1nLTI7ZCs9MSl7altkXT0wfXZhciBlPVN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLGopK1wiXFx4MDFcIitmO3ZhciBoPXBzc19tZ2YxX3N0cihuLGUubGVuZ3RoLG8pO3ZhciBxPVtdO2ZvcihkPTA7ZDxlLmxlbmd0aDtkKz0xKXtxW2RdPWUuY2hhckNvZGVBdChkKV5oLmNoYXJDb2RlQXQoZCl9dmFyIHA9KDY1MjgwPj4oOCpjLW0pKSYyNTU7cVswXSY9fnA7Zm9yKGQ9MDtkPGc7ZCsrKXtxLnB1c2gobi5jaGFyQ29kZUF0KGQpKX1xLnB1c2goMTg4KTtyZXR1cm4gX3plcm9QYWRkaW5nT2ZTaWduYXR1cmUodGhpcy5kb1ByaXZhdGUobmV3IEJpZ0ludGVnZXIocSkpLnRvU3RyaW5nKDE2KSx0aGlzLm4uYml0TGVuZ3RoKCkpfTtmdW5jdGlvbiBfcnNhc2lnbl9nZXREZWNyeXB0U2lnbmF0dXJlQkkoYSxkLGMpe3ZhciBiPW5ldyBSU0FLZXkoKTtiLnNldFB1YmxpYyhkLGMpO3ZhciBlPWIuZG9QdWJsaWMoYSk7cmV0dXJuIGV9ZnVuY3Rpb24gX3JzYXNpZ25fZ2V0SGV4RGlnZXN0SW5mb0Zyb21TaWcoYSxjLGIpe3ZhciBlPV9yc2FzaWduX2dldERlY3J5cHRTaWduYXR1cmVCSShhLGMsYik7dmFyIGQ9ZS50b1N0cmluZygxNikucmVwbGFjZSgvXjFmKzAwLyxcIlwiKTtyZXR1cm4gZH1mdW5jdGlvbiBfcnNhc2lnbl9nZXRBbGdOYW1lQW5kSGFzaEZyb21IZXhEaXNnZXN0SW5mbyhmKXtmb3IodmFyIGUgaW4gS0pVUi5jcnlwdG8uVXRpbC5ESUdFU1RJTkZPSEVBRCl7dmFyIGQ9S0pVUi5jcnlwdG8uVXRpbC5ESUdFU1RJTkZPSEVBRFtlXTt2YXIgYj1kLmxlbmd0aDtpZihmLnN1YnN0cmluZygwLGIpPT1kKXt2YXIgYz1bZSxmLnN1YnN0cmluZyhiKV07cmV0dXJuIGN9fXJldHVybltdfVJTQUtleS5wcm90b3R5cGUudmVyaWZ5PWZ1bmN0aW9uKGYsail7aj1qLnJlcGxhY2UoX1JFX0hFWERFQ09OTFksXCJcIik7aj1qLnJlcGxhY2UoL1sgXFxuXSsvZyxcIlwiKTt2YXIgYj1wYXJzZUJpZ0ludChqLDE2KTtpZihiLmJpdExlbmd0aCgpPnRoaXMubi5iaXRMZW5ndGgoKSl7cmV0dXJuIDB9dmFyIGk9dGhpcy5kb1B1YmxpYyhiKTt2YXIgZT1pLnRvU3RyaW5nKDE2KS5yZXBsYWNlKC9eMWYrMDAvLFwiXCIpO3ZhciBnPV9yc2FzaWduX2dldEFsZ05hbWVBbmRIYXNoRnJvbUhleERpc2dlc3RJbmZvKGUpO2lmKGcubGVuZ3RoPT0wKXtyZXR1cm4gZmFsc2V9dmFyIGQ9Z1swXTt2YXIgaD1nWzFdO3ZhciBhPWZ1bmN0aW9uKGspe3JldHVybiBLSlVSLmNyeXB0by5VdGlsLmhhc2hTdHJpbmcoayxkKX07dmFyIGM9YShmKTtyZXR1cm4oaD09Yyl9O1JTQUtleS5wcm90b3R5cGUudmVyaWZ5V2l0aE1lc3NhZ2VIYXNoPWZ1bmN0aW9uKGUsYSl7YT1hLnJlcGxhY2UoX1JFX0hFWERFQ09OTFksXCJcIik7YT1hLnJlcGxhY2UoL1sgXFxuXSsvZyxcIlwiKTt2YXIgYj1wYXJzZUJpZ0ludChhLDE2KTtpZihiLmJpdExlbmd0aCgpPnRoaXMubi5iaXRMZW5ndGgoKSl7cmV0dXJuIDB9dmFyIGg9dGhpcy5kb1B1YmxpYyhiKTt2YXIgZz1oLnRvU3RyaW5nKDE2KS5yZXBsYWNlKC9eMWYrMDAvLFwiXCIpO3ZhciBjPV9yc2FzaWduX2dldEFsZ05hbWVBbmRIYXNoRnJvbUhleERpc2dlc3RJbmZvKGcpO2lmKGMubGVuZ3RoPT0wKXtyZXR1cm4gZmFsc2V9dmFyIGQ9Y1swXTt2YXIgZj1jWzFdO3JldHVybihmPT1lKX07UlNBS2V5LnByb3RvdHlwZS52ZXJpZnlQU1M9ZnVuY3Rpb24oYyxiLGEsZil7dmFyIGU9ZnVuY3Rpb24oZyl7cmV0dXJuIEtKVVIuY3J5cHRvLlV0aWwuaGFzaEhleChnLGEpfTt2YXIgZD1lKHJzdHJ0b2hleChjKSk7aWYoZj09PXVuZGVmaW5lZCl7Zj0tMX1yZXR1cm4gdGhpcy52ZXJpZnlXaXRoTWVzc2FnZUhhc2hQU1MoZCxiLGEsZil9O1JTQUtleS5wcm90b3R5cGUudmVyaWZ5V2l0aE1lc3NhZ2VIYXNoUFNTPWZ1bmN0aW9uKGYscyxsLGMpe3ZhciBrPW5ldyBCaWdJbnRlZ2VyKHMsMTYpO2lmKGsuYml0TGVuZ3RoKCk+dGhpcy5uLmJpdExlbmd0aCgpKXtyZXR1cm4gZmFsc2V9dmFyIHI9ZnVuY3Rpb24oaSl7cmV0dXJuIEtKVVIuY3J5cHRvLlV0aWwuaGFzaEhleChpLGwpfTt2YXIgaj1oZXh0b3JzdHIoZik7dmFyIGg9ai5sZW5ndGg7dmFyIGc9dGhpcy5uLmJpdExlbmd0aCgpLTE7dmFyIG09TWF0aC5jZWlsKGcvOCk7dmFyIHE7aWYoYz09PS0xfHxjPT09dW5kZWZpbmVkKXtjPWh9ZWxzZXtpZihjPT09LTIpe2M9bS1oLTJ9ZWxzZXtpZihjPC0yKXt0aHJvd1wiaW52YWxpZCBzYWx0IGxlbmd0aFwifX19aWYobTwoaCtjKzIpKXt0aHJvd1wiZGF0YSB0b28gbG9uZ1wifXZhciBhPXRoaXMuZG9QdWJsaWMoaykudG9CeXRlQXJyYXkoKTtmb3IocT0wO3E8YS5sZW5ndGg7cSs9MSl7YVtxXSY9MjU1fXdoaWxlKGEubGVuZ3RoPG0pe2EudW5zaGlmdCgwKX1pZihhW20tMV0hPT0xODgpe3Rocm93XCJlbmNvZGVkIG1lc3NhZ2UgZG9lcyBub3QgZW5kIGluIDB4YmNcIn1hPVN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLGEpO3ZhciBkPWEuc3Vic3RyKDAsbS1oLTEpO3ZhciBlPWEuc3Vic3RyKGQubGVuZ3RoLGgpO3ZhciBwPSg2NTI4MD4+KDgqbS1nKSkmMjU1O2lmKChkLmNoYXJDb2RlQXQoMCkmcCkhPT0wKXt0aHJvd1wiYml0cyBiZXlvbmQga2V5c2l6ZSBub3QgemVyb1wifXZhciBuPXBzc19tZ2YxX3N0cihlLGQubGVuZ3RoLHIpO3ZhciBvPVtdO2ZvcihxPTA7cTxkLmxlbmd0aDtxKz0xKXtvW3FdPWQuY2hhckNvZGVBdChxKV5uLmNoYXJDb2RlQXQocSl9b1swXSY9fnA7dmFyIGI9bS1oLWMtMjtmb3IocT0wO3E8YjtxKz0xKXtpZihvW3FdIT09MCl7dGhyb3dcImxlZnRtb3N0IG9jdGV0cyBub3QgemVyb1wifX1pZihvW2JdIT09MSl7dGhyb3dcIjB4MDEgbWFya2VyIG5vdCBmb3VuZFwifXJldHVybiBlPT09aGV4dG9yc3RyKHIocnN0cnRvaGV4KFwiXFx4MDBcXHgwMFxceDAwXFx4MDBcXHgwMFxceDAwXFx4MDBcXHgwMFwiK2orU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsby5zbGljZSgtYykpKSkpfTtSU0FLZXkuU0FMVF9MRU5fSExFTj0tMTtSU0FLZXkuU0FMVF9MRU5fTUFYPS0yO1JTQUtleS5TQUxUX0xFTl9SRUNPVkVSPS0yO1xuZnVuY3Rpb24gWDUwOSgpe3ZhciBrPUFTTjFIRVgsaj1rLmdldENoaWxkSWR4LGg9ay5nZXRWLGI9ay5nZXRUTFYsZj1rLmdldFZieUxpc3QsYz1rLmdldFRMVmJ5TGlzdCxnPWsuZ2V0SWR4YnlMaXN0LGQ9ay5nZXRWaWR4LGk9ay5vaWRuYW1lLGE9WDUwOSxlPXBlbXRvaGV4O3RoaXMuaGV4PW51bGw7dGhpcy52ZXJzaW9uPTA7dGhpcy5mb2Zmc2V0PTA7dGhpcy5hRXh0SW5mbz1udWxsO3RoaXMuZ2V0VmVyc2lvbj1mdW5jdGlvbigpe2lmKHRoaXMuaGV4PT09bnVsbHx8dGhpcy52ZXJzaW9uIT09MCl7cmV0dXJuIHRoaXMudmVyc2lvbn1pZihjKHRoaXMuaGV4LDAsWzAsMF0pIT09XCJhMDAzMDIwMTAyXCIpe3RoaXMudmVyc2lvbj0xO3RoaXMuZm9mZnNldD0tMTtyZXR1cm4gMX10aGlzLnZlcnNpb249MztyZXR1cm4gM307dGhpcy5nZXRTZXJpYWxOdW1iZXJIZXg9ZnVuY3Rpb24oKXtyZXR1cm4gZih0aGlzLmhleCwwLFswLDErdGhpcy5mb2Zmc2V0XSxcIjAyXCIpfTt0aGlzLmdldFNpZ25hdHVyZUFsZ29yaXRobUZpZWxkPWZ1bmN0aW9uKCl7cmV0dXJuIGkoZih0aGlzLmhleCwwLFswLDIrdGhpcy5mb2Zmc2V0LDBdLFwiMDZcIikpfTt0aGlzLmdldElzc3VlckhleD1mdW5jdGlvbigpe3JldHVybiBjKHRoaXMuaGV4LDAsWzAsMyt0aGlzLmZvZmZzZXRdLFwiMzBcIil9O3RoaXMuZ2V0SXNzdWVyU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIGEuaGV4MmRuKHRoaXMuZ2V0SXNzdWVySGV4KCkpfTt0aGlzLmdldFN1YmplY3RIZXg9ZnVuY3Rpb24oKXtyZXR1cm4gYyh0aGlzLmhleCwwLFswLDUrdGhpcy5mb2Zmc2V0XSxcIjMwXCIpfTt0aGlzLmdldFN1YmplY3RTdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gYS5oZXgyZG4odGhpcy5nZXRTdWJqZWN0SGV4KCkpfTt0aGlzLmdldE5vdEJlZm9yZT1mdW5jdGlvbigpe3ZhciBsPWYodGhpcy5oZXgsMCxbMCw0K3RoaXMuZm9mZnNldCwwXSk7bD1sLnJlcGxhY2UoLyguLikvZyxcIiUkMVwiKTtsPWRlY29kZVVSSUNvbXBvbmVudChsKTtyZXR1cm4gbH07dGhpcy5nZXROb3RBZnRlcj1mdW5jdGlvbigpe3ZhciBsPWYodGhpcy5oZXgsMCxbMCw0K3RoaXMuZm9mZnNldCwxXSk7bD1sLnJlcGxhY2UoLyguLikvZyxcIiUkMVwiKTtsPWRlY29kZVVSSUNvbXBvbmVudChsKTtyZXR1cm4gbH07dGhpcy5nZXRQdWJsaWNLZXlIZXg9ZnVuY3Rpb24oKXtyZXR1cm4gay5nZXRUTFZieUxpc3QodGhpcy5oZXgsMCxbMCw2K3RoaXMuZm9mZnNldF0sXCIzMFwiKX07dGhpcy5nZXRQdWJsaWNLZXlJZHg9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLmhleCwwLFswLDYrdGhpcy5mb2Zmc2V0XSxcIjMwXCIpfTt0aGlzLmdldFB1YmxpY0tleUNvbnRlbnRJZHg9ZnVuY3Rpb24oKXt2YXIgbD10aGlzLmdldFB1YmxpY0tleUlkeCgpO3JldHVybiBnKHRoaXMuaGV4LGwsWzEsMF0sXCIzMFwiKX07dGhpcy5nZXRQdWJsaWNLZXk9ZnVuY3Rpb24oKXtyZXR1cm4gS0VZVVRJTC5nZXRLZXkodGhpcy5nZXRQdWJsaWNLZXlIZXgoKSxudWxsLFwicGtjczhwdWJcIil9O3RoaXMuZ2V0U2lnbmF0dXJlQWxnb3JpdGhtTmFtZT1mdW5jdGlvbigpe3JldHVybiBpKGYodGhpcy5oZXgsMCxbMSwwXSxcIjA2XCIpKX07dGhpcy5nZXRTaWduYXR1cmVWYWx1ZUhleD1mdW5jdGlvbigpe3JldHVybiBmKHRoaXMuaGV4LDAsWzJdLFwiMDNcIix0cnVlKX07dGhpcy52ZXJpZnlTaWduYXR1cmU9ZnVuY3Rpb24obil7dmFyIG89dGhpcy5nZXRTaWduYXR1cmVBbGdvcml0aG1OYW1lKCk7dmFyIGw9dGhpcy5nZXRTaWduYXR1cmVWYWx1ZUhleCgpO3ZhciBtPWModGhpcy5oZXgsMCxbMF0sXCIzMFwiKTt2YXIgcD1uZXcgS0pVUi5jcnlwdG8uU2lnbmF0dXJlKHthbGc6b30pO3AuaW5pdChuKTtwLnVwZGF0ZUhleChtKTtyZXR1cm4gcC52ZXJpZnkobCl9O3RoaXMucGFyc2VFeHQ9ZnVuY3Rpb24oKXtpZih0aGlzLnZlcnNpb24hPT0zKXtyZXR1cm4gLTF9dmFyIHA9Zyh0aGlzLmhleCwwLFswLDcsMF0sXCIzMFwiKTt2YXIgbT1qKHRoaXMuaGV4LHApO3RoaXMuYUV4dEluZm89bmV3IEFycmF5KCk7Zm9yKHZhciBuPTA7bjxtLmxlbmd0aDtuKyspe3ZhciBxPXt9O3EuY3JpdGljYWw9ZmFsc2U7dmFyIGw9aih0aGlzLmhleCxtW25dKTt2YXIgcj0wO2lmKGwubGVuZ3RoPT09Myl7cS5jcml0aWNhbD10cnVlO3I9MX1xLm9pZD1rLmhleHRvb2lkc3RyKGYodGhpcy5oZXgsbVtuXSxbMF0sXCIwNlwiKSk7dmFyIG89Zyh0aGlzLmhleCxtW25dLFsxK3JdKTtxLnZpZHg9ZCh0aGlzLmhleCxvKTt0aGlzLmFFeHRJbmZvLnB1c2gocSl9fTt0aGlzLmdldEV4dEluZm89ZnVuY3Rpb24obil7dmFyIGw9dGhpcy5hRXh0SW5mbzt2YXIgbz1uO2lmKCFuLm1hdGNoKC9eWzAtOS5dKyQvKSl7bz1LSlVSLmFzbjEueDUwOS5PSUQubmFtZTJvaWQobil9aWYobz09PVwiXCIpe3JldHVybiB1bmRlZmluZWR9Zm9yKHZhciBtPTA7bTxsLmxlbmd0aDttKyspe2lmKGxbbV0ub2lkPT09byl7cmV0dXJuIGxbbV19fXJldHVybiB1bmRlZmluZWR9O3RoaXMuZ2V0RXh0QmFzaWNDb25zdHJhaW50cz1mdW5jdGlvbigpe3ZhciBuPXRoaXMuZ2V0RXh0SW5mbyhcImJhc2ljQ29uc3RyYWludHNcIik7aWYobj09PXVuZGVmaW5lZCl7cmV0dXJuIG59dmFyIGw9aCh0aGlzLmhleCxuLnZpZHgpO2lmKGw9PT1cIlwiKXtyZXR1cm57fX1pZihsPT09XCIwMTAxZmZcIil7cmV0dXJue2NBOnRydWV9fWlmKGwuc3Vic3RyKDAsOCk9PT1cIjAxMDFmZjAyXCIpe3ZhciBvPWgobCw2KTt2YXIgbT1wYXJzZUludChvLDE2KTtyZXR1cm57Y0E6dHJ1ZSxwYXRoTGVuOm19fXRocm93XCJiYXNpY0NvbnN0cmFpbnRzIHBhcnNlIGVycm9yXCJ9O3RoaXMuZ2V0RXh0S2V5VXNhZ2VCaW49ZnVuY3Rpb24oKXt2YXIgbz10aGlzLmdldEV4dEluZm8oXCJrZXlVc2FnZVwiKTtpZihvPT09dW5kZWZpbmVkKXtyZXR1cm5cIlwifXZhciBtPWgodGhpcy5oZXgsby52aWR4KTtpZihtLmxlbmd0aCUyIT0wfHxtLmxlbmd0aDw9Mil7dGhyb3dcIm1hbGZvcm1lZCBrZXkgdXNhZ2UgdmFsdWVcIn12YXIgbD1wYXJzZUludChtLnN1YnN0cigwLDIpKTt2YXIgbj1wYXJzZUludChtLnN1YnN0cigyKSwxNikudG9TdHJpbmcoMik7cmV0dXJuIG4uc3Vic3RyKDAsbi5sZW5ndGgtbCl9O3RoaXMuZ2V0RXh0S2V5VXNhZ2VTdHJpbmc9ZnVuY3Rpb24oKXt2YXIgbj10aGlzLmdldEV4dEtleVVzYWdlQmluKCk7dmFyIGw9bmV3IEFycmF5KCk7Zm9yKHZhciBtPTA7bTxuLmxlbmd0aDttKyspe2lmKG4uc3Vic3RyKG0sMSk9PVwiMVwiKXtsLnB1c2goWDUwOS5LRVlVU0FHRV9OQU1FW21dKX19cmV0dXJuIGwuam9pbihcIixcIil9O3RoaXMuZ2V0RXh0U3ViamVjdEtleUlkZW50aWZpZXI9ZnVuY3Rpb24oKXt2YXIgbD10aGlzLmdldEV4dEluZm8oXCJzdWJqZWN0S2V5SWRlbnRpZmllclwiKTtpZihsPT09dW5kZWZpbmVkKXtyZXR1cm4gbH1yZXR1cm4gaCh0aGlzLmhleCxsLnZpZHgpfTt0aGlzLmdldEV4dEF1dGhvcml0eUtleUlkZW50aWZpZXI9ZnVuY3Rpb24oKXt2YXIgcD10aGlzLmdldEV4dEluZm8oXCJhdXRob3JpdHlLZXlJZGVudGlmaWVyXCIpO2lmKHA9PT11bmRlZmluZWQpe3JldHVybiBwfXZhciBsPXt9O3ZhciBvPWIodGhpcy5oZXgscC52aWR4KTt2YXIgbT1qKG8sMCk7Zm9yKHZhciBuPTA7bjxtLmxlbmd0aDtuKyspe2lmKG8uc3Vic3RyKG1bbl0sMik9PT1cIjgwXCIpe2wua2lkPWgobyxtW25dKX19cmV0dXJuIGx9O3RoaXMuZ2V0RXh0RXh0S2V5VXNhZ2VOYW1lPWZ1bmN0aW9uKCl7dmFyIHA9dGhpcy5nZXRFeHRJbmZvKFwiZXh0S2V5VXNhZ2VcIik7aWYocD09PXVuZGVmaW5lZCl7cmV0dXJuIHB9dmFyIGw9bmV3IEFycmF5KCk7dmFyIG89Yih0aGlzLmhleCxwLnZpZHgpO2lmKG89PT1cIlwiKXtyZXR1cm4gbH12YXIgbT1qKG8sMCk7Zm9yKHZhciBuPTA7bjxtLmxlbmd0aDtuKyspe2wucHVzaChpKGgobyxtW25dKSkpfXJldHVybiBsfTt0aGlzLmdldEV4dFN1YmplY3RBbHROYW1lPWZ1bmN0aW9uKCl7dmFyIG09dGhpcy5nZXRFeHRTdWJqZWN0QWx0TmFtZTIoKTt2YXIgbD1uZXcgQXJyYXkoKTtmb3IodmFyIG49MDtuPG0ubGVuZ3RoO24rKyl7aWYobVtuXVswXT09PVwiRE5TXCIpe2wucHVzaChtW25dWzFdKX19cmV0dXJuIGx9O3RoaXMuZ2V0RXh0U3ViamVjdEFsdE5hbWUyPWZ1bmN0aW9uKCl7dmFyIHAscyxyO3ZhciBxPXRoaXMuZ2V0RXh0SW5mbyhcInN1YmplY3RBbHROYW1lXCIpO2lmKHE9PT11bmRlZmluZWQpe3JldHVybiBxfXZhciBsPW5ldyBBcnJheSgpO3ZhciBvPWIodGhpcy5oZXgscS52aWR4KTt2YXIgbT1qKG8sMCk7Zm9yKHZhciBuPTA7bjxtLmxlbmd0aDtuKyspe3I9by5zdWJzdHIobVtuXSwyKTtwPWgobyxtW25dKTtpZihyPT09XCI4MVwiKXtzPWhleHRvdXRmOChwKTtsLnB1c2goW1wiTUFJTFwiLHNdKX1pZihyPT09XCI4MlwiKXtzPWhleHRvdXRmOChwKTtsLnB1c2goW1wiRE5TXCIsc10pfWlmKHI9PT1cIjg0XCIpe3M9WDUwOS5oZXgyZG4ocCwwKTtsLnB1c2goW1wiRE5cIixzXSl9aWYocj09PVwiODZcIil7cz1oZXh0b3V0ZjgocCk7bC5wdXNoKFtcIlVSSVwiLHNdKX1pZihyPT09XCI4N1wiKXtzPWhleHRvaXAocCk7bC5wdXNoKFtcIklQXCIsc10pfX1yZXR1cm4gbH07dGhpcy5nZXRFeHRDUkxEaXN0cmlidXRpb25Qb2ludHNVUkk9ZnVuY3Rpb24oKXt2YXIgcT10aGlzLmdldEV4dEluZm8oXCJjUkxEaXN0cmlidXRpb25Qb2ludHNcIik7aWYocT09PXVuZGVmaW5lZCl7cmV0dXJuIHF9dmFyIGw9bmV3IEFycmF5KCk7dmFyIG09aih0aGlzLmhleCxxLnZpZHgpO2Zvcih2YXIgbz0wO288bS5sZW5ndGg7bysrKXt0cnl7dmFyIHI9Zih0aGlzLmhleCxtW29dLFswLDAsMF0sXCI4NlwiKTt2YXIgcD1oZXh0b3V0Zjgocik7bC5wdXNoKHApfWNhdGNoKG4pe319cmV0dXJuIGx9O3RoaXMuZ2V0RXh0QUlBSW5mbz1mdW5jdGlvbigpe3ZhciBwPXRoaXMuZ2V0RXh0SW5mbyhcImF1dGhvcml0eUluZm9BY2Nlc3NcIik7aWYocD09PXVuZGVmaW5lZCl7cmV0dXJuIHB9dmFyIGw9e29jc3A6W10sY2Fpc3N1ZXI6W119O3ZhciBtPWoodGhpcy5oZXgscC52aWR4KTtmb3IodmFyIG49MDtuPG0ubGVuZ3RoO24rKyl7dmFyIHE9Zih0aGlzLmhleCxtW25dLFswXSxcIjA2XCIpO3ZhciBvPWYodGhpcy5oZXgsbVtuXSxbMV0sXCI4NlwiKTtpZihxPT09XCIyYjA2MDEwNTA1MDczMDAxXCIpe2wub2NzcC5wdXNoKGhleHRvdXRmOChvKSl9aWYocT09PVwiMmIwNjAxMDUwNTA3MzAwMlwiKXtsLmNhaXNzdWVyLnB1c2goaGV4dG91dGY4KG8pKX19cmV0dXJuIGx9O3RoaXMuZ2V0RXh0Q2VydGlmaWNhdGVQb2xpY2llcz1mdW5jdGlvbigpe3ZhciBvPXRoaXMuZ2V0RXh0SW5mbyhcImNlcnRpZmljYXRlUG9saWNpZXNcIik7aWYobz09PXVuZGVmaW5lZCl7cmV0dXJuIG99dmFyIGw9Yih0aGlzLmhleCxvLnZpZHgpO3ZhciB1PVtdO3ZhciBzPWoobCwwKTtmb3IodmFyIHI9MDtyPHMubGVuZ3RoO3IrKyl7dmFyIHQ9e307dmFyIG49aihsLHNbcl0pO3QuaWQ9aShoKGwsblswXSkpO2lmKG4ubGVuZ3RoPT09Mil7dmFyIG09aihsLG5bMV0pO2Zvcih2YXIgcT0wO3E8bS5sZW5ndGg7cSsrKXt2YXIgcD1mKGwsbVtxXSxbMF0sXCIwNlwiKTtpZihwPT09XCIyYjA2MDEwNTA1MDcwMjAxXCIpe3QuY3BzPWhleHRvdXRmOChmKGwsbVtxXSxbMV0pKX1lbHNle2lmKHA9PT1cIjJiMDYwMTA1MDUwNzAyMDJcIil7dC51bm90aWNlPWhleHRvdXRmOChmKGwsbVtxXSxbMSwwXSkpfX19fXUucHVzaCh0KX1yZXR1cm4gdX07dGhpcy5yZWFkQ2VydFBFTT1mdW5jdGlvbihsKXt0aGlzLnJlYWRDZXJ0SGV4KGUobCkpfTt0aGlzLnJlYWRDZXJ0SGV4PWZ1bmN0aW9uKGwpe3RoaXMuaGV4PWw7dGhpcy5nZXRWZXJzaW9uKCk7dHJ5e2codGhpcy5oZXgsMCxbMCw3XSxcImEzXCIpO3RoaXMucGFyc2VFeHQoKX1jYXRjaChtKXt9fTt0aGlzLmdldEluZm89ZnVuY3Rpb24oKXt2YXIgbT1YNTA5O3ZhciBCLHUsejtCPVwiQmFzaWMgRmllbGRzXFxuXCI7Qis9XCIgIHNlcmlhbCBudW1iZXI6IFwiK3RoaXMuZ2V0U2VyaWFsTnVtYmVySGV4KCkrXCJcXG5cIjtCKz1cIiAgc2lnbmF0dXJlIGFsZ29yaXRobTogXCIrdGhpcy5nZXRTaWduYXR1cmVBbGdvcml0aG1GaWVsZCgpK1wiXFxuXCI7Qis9XCIgIGlzc3VlcjogXCIrdGhpcy5nZXRJc3N1ZXJTdHJpbmcoKStcIlxcblwiO0IrPVwiICBub3RCZWZvcmU6IFwiK3RoaXMuZ2V0Tm90QmVmb3JlKCkrXCJcXG5cIjtCKz1cIiAgbm90QWZ0ZXI6IFwiK3RoaXMuZ2V0Tm90QWZ0ZXIoKStcIlxcblwiO0IrPVwiICBzdWJqZWN0OiBcIit0aGlzLmdldFN1YmplY3RTdHJpbmcoKStcIlxcblwiO0IrPVwiICBzdWJqZWN0IHB1YmxpYyBrZXkgaW5mbzogXFxuXCI7dT10aGlzLmdldFB1YmxpY0tleSgpO0IrPVwiICAgIGtleSBhbGdvcml0aG06IFwiK3UudHlwZStcIlxcblwiO2lmKHUudHlwZT09PVwiUlNBXCIpe0IrPVwiICAgIG49XCIraGV4dG9wb3NoZXgodS5uLnRvU3RyaW5nKDE2KSkuc3Vic3RyKDAsMTYpK1wiLi4uXFxuXCI7Qis9XCIgICAgZT1cIitoZXh0b3Bvc2hleCh1LmUudG9TdHJpbmcoMTYpKStcIlxcblwifXo9dGhpcy5hRXh0SW5mbztpZih6IT09dW5kZWZpbmVkJiZ6IT09bnVsbCl7Qis9XCJYNTA5djMgRXh0ZW5zaW9uczpcXG5cIjtmb3IodmFyIHI9MDtyPHoubGVuZ3RoO3IrKyl7dmFyIG49eltyXTt2YXIgQT1LSlVSLmFzbjEueDUwOS5PSUQub2lkMm5hbWUobi5vaWQpO2lmKEE9PT1cIlwiKXtBPW4ub2lkfXZhciB4PVwiXCI7aWYobi5jcml0aWNhbD09PXRydWUpe3g9XCJDUklUSUNBTFwifUIrPVwiICBcIitBK1wiIFwiK3grXCI6XFxuXCI7aWYoQT09PVwiYmFzaWNDb25zdHJhaW50c1wiKXt2YXIgdj10aGlzLmdldEV4dEJhc2ljQ29uc3RyYWludHMoKTtpZih2LmNBPT09dW5kZWZpbmVkKXtCKz1cIiAgICB7fVxcblwifWVsc2V7Qis9XCIgICAgY0E9dHJ1ZVwiO2lmKHYucGF0aExlbiE9PXVuZGVmaW5lZCl7Qis9XCIsIHBhdGhMZW49XCIrdi5wYXRoTGVufUIrPVwiXFxuXCJ9fWVsc2V7aWYoQT09PVwia2V5VXNhZ2VcIil7Qis9XCIgICAgXCIrdGhpcy5nZXRFeHRLZXlVc2FnZVN0cmluZygpK1wiXFxuXCJ9ZWxzZXtpZihBPT09XCJzdWJqZWN0S2V5SWRlbnRpZmllclwiKXtCKz1cIiAgICBcIit0aGlzLmdldEV4dFN1YmplY3RLZXlJZGVudGlmaWVyKCkrXCJcXG5cIn1lbHNle2lmKEE9PT1cImF1dGhvcml0eUtleUlkZW50aWZpZXJcIil7dmFyIGw9dGhpcy5nZXRFeHRBdXRob3JpdHlLZXlJZGVudGlmaWVyKCk7aWYobC5raWQhPT11bmRlZmluZWQpe0IrPVwiICAgIGtpZD1cIitsLmtpZCtcIlxcblwifX1lbHNle2lmKEE9PT1cImV4dEtleVVzYWdlXCIpe3ZhciB3PXRoaXMuZ2V0RXh0RXh0S2V5VXNhZ2VOYW1lKCk7Qis9XCIgICAgXCIrdy5qb2luKFwiLCBcIikrXCJcXG5cIn1lbHNle2lmKEE9PT1cInN1YmplY3RBbHROYW1lXCIpe3ZhciB0PXRoaXMuZ2V0RXh0U3ViamVjdEFsdE5hbWUyKCk7Qis9XCIgICAgXCIrdCtcIlxcblwifWVsc2V7aWYoQT09PVwiY1JMRGlzdHJpYnV0aW9uUG9pbnRzXCIpe3ZhciB5PXRoaXMuZ2V0RXh0Q1JMRGlzdHJpYnV0aW9uUG9pbnRzVVJJKCk7Qis9XCIgICAgXCIreStcIlxcblwifWVsc2V7aWYoQT09PVwiYXV0aG9yaXR5SW5mb0FjY2Vzc1wiKXt2YXIgcD10aGlzLmdldEV4dEFJQUluZm8oKTtpZihwLm9jc3AhPT11bmRlZmluZWQpe0IrPVwiICAgIG9jc3A6IFwiK3Aub2NzcC5qb2luKFwiLFwiKStcIlxcblwifWlmKHAuY2Fpc3N1ZXIhPT11bmRlZmluZWQpe0IrPVwiICAgIGNhaXNzdWVyOiBcIitwLmNhaXNzdWVyLmpvaW4oXCIsXCIpK1wiXFxuXCJ9fWVsc2V7aWYoQT09PVwiY2VydGlmaWNhdGVQb2xpY2llc1wiKXt2YXIgbz10aGlzLmdldEV4dENlcnRpZmljYXRlUG9saWNpZXMoKTtmb3IodmFyIHE9MDtxPG8ubGVuZ3RoO3ErKyl7aWYob1txXS5pZCE9PXVuZGVmaW5lZCl7Qis9XCIgICAgcG9saWN5IG9pZDogXCIrb1txXS5pZCtcIlxcblwifWlmKG9bcV0uY3BzIT09dW5kZWZpbmVkKXtCKz1cIiAgICBjcHM6IFwiK29bcV0uY3BzK1wiXFxuXCJ9fX19fX19fX19fX19Qis9XCJzaWduYXR1cmUgYWxnb3JpdGhtOiBcIit0aGlzLmdldFNpZ25hdHVyZUFsZ29yaXRobU5hbWUoKStcIlxcblwiO0IrPVwic2lnbmF0dXJlOiBcIit0aGlzLmdldFNpZ25hdHVyZVZhbHVlSGV4KCkuc3Vic3RyKDAsMTYpK1wiLi4uXFxuXCI7cmV0dXJuIEJ9fVg1MDkuaGV4MmRuPWZ1bmN0aW9uKGYsYil7aWYoYj09PXVuZGVmaW5lZCl7Yj0wfWlmKGYuc3Vic3RyKGIsMikhPT1cIjMwXCIpe3Rocm93XCJtYWxmb3JtZWQgRE5cIn12YXIgYz1uZXcgQXJyYXkoKTt2YXIgZD1BU04xSEVYLmdldENoaWxkSWR4KGYsYik7Zm9yKHZhciBlPTA7ZTxkLmxlbmd0aDtlKyspe2MucHVzaChYNTA5LmhleDJyZG4oZixkW2VdKSl9Yz1jLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gYS5yZXBsYWNlKFwiL1wiLFwiXFxcXC9cIil9KTtyZXR1cm5cIi9cIitjLmpvaW4oXCIvXCIpfTtYNTA5LmhleDJyZG49ZnVuY3Rpb24oZixiKXtpZihiPT09dW5kZWZpbmVkKXtiPTB9aWYoZi5zdWJzdHIoYiwyKSE9PVwiMzFcIil7dGhyb3dcIm1hbGZvcm1lZCBSRE5cIn12YXIgYz1uZXcgQXJyYXkoKTt2YXIgZD1BU04xSEVYLmdldENoaWxkSWR4KGYsYik7Zm9yKHZhciBlPTA7ZTxkLmxlbmd0aDtlKyspe2MucHVzaChYNTA5LmhleDJhdHRyVHlwZVZhbHVlKGYsZFtlXSkpfWM9Yy5tYXAoZnVuY3Rpb24oYSl7cmV0dXJuIGEucmVwbGFjZShcIitcIixcIlxcXFwrXCIpfSk7cmV0dXJuIGMuam9pbihcIitcIil9O1g1MDkuaGV4MmF0dHJUeXBlVmFsdWU9ZnVuY3Rpb24oZCxpKXt2YXIgaj1BU04xSEVYO3ZhciBoPWouZ2V0VjtpZihpPT09dW5kZWZpbmVkKXtpPTB9aWYoZC5zdWJzdHIoaSwyKSE9PVwiMzBcIil7dGhyb3dcIm1hbGZvcm1lZCBhdHRyaWJ1dGUgdHlwZSBhbmQgdmFsdWVcIn12YXIgZz1qLmdldENoaWxkSWR4KGQsaSk7aWYoZy5sZW5ndGghPT0yfHxkLnN1YnN0cihnWzBdLDIpIT09XCIwNlwiKXtcIm1hbGZvcm1lZCBhdHRyaWJ1dGUgdHlwZSBhbmQgdmFsdWVcIn12YXIgYj1oKGQsZ1swXSk7dmFyIGY9S0pVUi5hc24xLkFTTjFVdGlsLm9pZEhleFRvSW50KGIpO3ZhciBlPUtKVVIuYXNuMS54NTA5Lk9JRC5vaWQyYXR5cGUoZik7dmFyIGE9aChkLGdbMV0pO3ZhciBjPWhleHRvcnN0cihhKTtyZXR1cm4gZStcIj1cIitjfTtYNTA5LmdldFB1YmxpY0tleUZyb21DZXJ0SGV4PWZ1bmN0aW9uKGIpe3ZhciBhPW5ldyBYNTA5KCk7YS5yZWFkQ2VydEhleChiKTtyZXR1cm4gYS5nZXRQdWJsaWNLZXkoKX07WDUwOS5nZXRQdWJsaWNLZXlGcm9tQ2VydFBFTT1mdW5jdGlvbihiKXt2YXIgYT1uZXcgWDUwOSgpO2EucmVhZENlcnRQRU0oYik7cmV0dXJuIGEuZ2V0UHVibGljS2V5KCl9O1g1MDkuZ2V0UHVibGljS2V5SW5mb1Byb3BPZkNlcnRQRU09ZnVuY3Rpb24oYyl7dmFyIGU9QVNOMUhFWDt2YXIgZz1lLmdldFZieUxpc3Q7dmFyIGI9e307dmFyIGEsZixkO2IuYWxncGFyYW09bnVsbDthPW5ldyBYNTA5KCk7YS5yZWFkQ2VydFBFTShjKTtmPWEuZ2V0UHVibGljS2V5SGV4KCk7Yi5rZXloZXg9ZyhmLDAsWzFdLFwiMDNcIikuc3Vic3RyKDIpO2IuYWxnb2lkPWcoZiwwLFswLDBdLFwiMDZcIik7aWYoYi5hbGdvaWQ9PT1cIjJhODY0OGNlM2QwMjAxXCIpe2IuYWxncGFyYW09ZyhmLDAsWzAsMV0sXCIwNlwiKX1yZXR1cm4gYn07WDUwOS5LRVlVU0FHRV9OQU1FPVtcImRpZ2l0YWxTaWduYXR1cmVcIixcIm5vblJlcHVkaWF0aW9uXCIsXCJrZXlFbmNpcGhlcm1lbnRcIixcImRhdGFFbmNpcGhlcm1lbnRcIixcImtleUFncmVlbWVudFwiLFwia2V5Q2VydFNpZ25cIixcImNSTFNpZ25cIixcImVuY2lwaGVyT25seVwiLFwiZGVjaXBoZXJPbmx5XCJdO1xuaWYodHlwZW9mIEtKVVI9PVwidW5kZWZpbmVkXCJ8fCFLSlVSKXtLSlVSPXt9fWlmKHR5cGVvZiBLSlVSLmp3cz09XCJ1bmRlZmluZWRcInx8IUtKVVIuandzKXtLSlVSLmp3cz17fX1LSlVSLmp3cy5KV1M9ZnVuY3Rpb24oKXt2YXIgYj1LSlVSLGE9Yi5qd3MuSldTLGM9YS5pc1NhZmVKU09OU3RyaW5nO3RoaXMucGFyc2VKV1M9ZnVuY3Rpb24oZyxqKXtpZigodGhpcy5wYXJzZWRKV1MhPT11bmRlZmluZWQpJiYoanx8KHRoaXMucGFyc2VkSldTLnNpZ3ZhbEghPT11bmRlZmluZWQpKSl7cmV0dXJufXZhciBpPWcubWF0Y2goL14oW14uXSspXFwuKFteLl0rKVxcLihbXi5dKykkLyk7aWYoaT09bnVsbCl7dGhyb3dcIkpXUyBzaWduYXR1cmUgaXMgbm90IGEgZm9ybSBvZiAnSGVhZC5QYXlsb2FkLlNpZ1ZhbHVlJy5cIn12YXIgaz1pWzFdO3ZhciBlPWlbMl07dmFyIGw9aVszXTt2YXIgbj1rK1wiLlwiK2U7dGhpcy5wYXJzZWRKV1M9e307dGhpcy5wYXJzZWRKV1MuaGVhZEI2NFU9azt0aGlzLnBhcnNlZEpXUy5wYXlsb2FkQjY0VT1lO3RoaXMucGFyc2VkSldTLnNpZ3ZhbEI2NFU9bDt0aGlzLnBhcnNlZEpXUy5zaT1uO2lmKCFqKXt2YXIgaD1iNjR1dG9oZXgobCk7dmFyIGY9cGFyc2VCaWdJbnQoaCwxNik7dGhpcy5wYXJzZWRKV1Muc2lndmFsSD1oO3RoaXMucGFyc2VkSldTLnNpZ3ZhbEJJPWZ9dmFyIGQ9YjY0dXRvdXRmOChrKTt2YXIgbT1iNjR1dG91dGY4KGUpO3RoaXMucGFyc2VkSldTLmhlYWRTPWQ7dGhpcy5wYXJzZWRKV1MucGF5bG9hZFM9bTtpZighYyhkLHRoaXMucGFyc2VkSldTLFwiaGVhZFBcIikpe3Rocm93XCJtYWxmb3JtZWQgSlNPTiBzdHJpbmcgZm9yIEpXUyBIZWFkOiBcIitkfX19O0tKVVIuandzLkpXUy5zaWduPWZ1bmN0aW9uKGksdix5LHosYSl7dmFyIHc9S0pVUixtPXcuandzLHE9bS5KV1MsZz1xLnJlYWRTYWZlSlNPTlN0cmluZyxwPXEuaXNTYWZlSlNPTlN0cmluZyxkPXcuY3J5cHRvLGs9ZC5FQ0RTQSxvPWQuTWFjLGM9ZC5TaWduYXR1cmUsdD1KU09OO3ZhciBzLGosbjtpZih0eXBlb2YgdiE9XCJzdHJpbmdcIiYmdHlwZW9mIHYhPVwib2JqZWN0XCIpe3Rocm93XCJzcEhlYWRlciBtdXN0IGJlIEpTT04gc3RyaW5nIG9yIG9iamVjdDogXCIrdn1pZih0eXBlb2Ygdj09XCJvYmplY3RcIil7aj12O3M9dC5zdHJpbmdpZnkoail9aWYodHlwZW9mIHY9PVwic3RyaW5nXCIpe3M9djtpZighcChzKSl7dGhyb3dcIkpXUyBIZWFkIGlzIG5vdCBzYWZlIEpTT04gc3RyaW5nOiBcIitzfWo9ZyhzKX1uPXk7aWYodHlwZW9mIHk9PVwib2JqZWN0XCIpe249dC5zdHJpbmdpZnkoeSl9aWYoKGk9PVwiXCJ8fGk9PW51bGwpJiZqLmFsZyE9PXVuZGVmaW5lZCl7aT1qLmFsZ31pZigoaSE9XCJcIiYmaSE9bnVsbCkmJmouYWxnPT09dW5kZWZpbmVkKXtqLmFsZz1pO3M9dC5zdHJpbmdpZnkoail9aWYoaSE9PWouYWxnKXt0aHJvd1wiYWxnIGFuZCBzSGVhZGVyLmFsZyBkb2Vzbid0IG1hdGNoOiBcIitpK1wiIT1cIitqLmFsZ312YXIgcj1udWxsO2lmKHEuandzYWxnMnNpZ2FsZ1tpXT09PXVuZGVmaW5lZCl7dGhyb3dcInVuc3VwcG9ydGVkIGFsZyBuYW1lOiBcIitpfWVsc2V7cj1xLmp3c2FsZzJzaWdhbGdbaV19dmFyIGU9dXRmOHRvYjY0dShzKTt2YXIgbD11dGY4dG9iNjR1KG4pO3ZhciBiPWUrXCIuXCIrbDt2YXIgeD1cIlwiO2lmKHIuc3Vic3RyKDAsNCk9PVwiSG1hY1wiKXtpZih6PT09dW5kZWZpbmVkKXt0aHJvd1wibWFjIGtleSBzaGFsbCBiZSBzcGVjaWZpZWQgZm9yIEhTKiBhbGdcIn12YXIgaD1uZXcgbyh7YWxnOnIscHJvdjpcImNyeXB0b2pzXCIscGFzczp6fSk7aC51cGRhdGVTdHJpbmcoYik7eD1oLmRvRmluYWwoKX1lbHNle2lmKHIuaW5kZXhPZihcIndpdGhFQ0RTQVwiKSE9LTEpe3ZhciBmPW5ldyBjKHthbGc6cn0pO2YuaW5pdCh6LGEpO2YudXBkYXRlU3RyaW5nKGIpO2hBU04xU2lnPWYuc2lnbigpO3g9S0pVUi5jcnlwdG8uRUNEU0EuYXNuMVNpZ1RvQ29uY2F0U2lnKGhBU04xU2lnKX1lbHNle2lmKHIhPVwibm9uZVwiKXt2YXIgZj1uZXcgYyh7YWxnOnJ9KTtmLmluaXQoeixhKTtmLnVwZGF0ZVN0cmluZyhiKTt4PWYuc2lnbigpfX19dmFyIHU9aGV4dG9iNjR1KHgpO3JldHVybiBiK1wiLlwiK3V9O0tKVVIuandzLkpXUy52ZXJpZnk9ZnVuY3Rpb24odyxCLG4pe3ZhciB4PUtKVVIscT14Lmp3cyx0PXEuSldTLGk9dC5yZWFkU2FmZUpTT05TdHJpbmcsZT14LmNyeXB0byxwPWUuRUNEU0Escz1lLk1hYyxkPWUuU2lnbmF0dXJlLG07aWYodHlwZW9mIFJTQUtleSE9PXVuZGVmaW5lZCl7bT1SU0FLZXl9dmFyIHk9dy5zcGxpdChcIi5cIik7aWYoeS5sZW5ndGghPT0zKXtyZXR1cm4gZmFsc2V9dmFyIGY9eVswXTt2YXIgcj15WzFdO3ZhciBjPWYrXCIuXCIrcjt2YXIgQT1iNjR1dG9oZXgoeVsyXSk7dmFyIGw9aShiNjR1dG91dGY4KHlbMF0pKTt2YXIgaz1udWxsO3ZhciB6PW51bGw7aWYobC5hbGc9PT11bmRlZmluZWQpe3Rocm93XCJhbGdvcml0aG0gbm90IHNwZWNpZmllZCBpbiBoZWFkZXJcIn1lbHNle2s9bC5hbGc7ej1rLnN1YnN0cigwLDIpfWlmKG4hPW51bGwmJk9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChuKT09PVwiW29iamVjdCBBcnJheV1cIiYmbi5sZW5ndGg+MCl7dmFyIGI9XCI6XCIrbi5qb2luKFwiOlwiKStcIjpcIjtpZihiLmluZGV4T2YoXCI6XCIraytcIjpcIik9PS0xKXt0aHJvd1wiYWxnb3JpdGhtICdcIitrK1wiJyBub3QgYWNjZXB0ZWQgaW4gdGhlIGxpc3RcIn19aWYoayE9XCJub25lXCImJkI9PT1udWxsKXt0aHJvd1wia2V5IHNoYWxsIGJlIHNwZWNpZmllZCB0byB2ZXJpZnkuXCJ9aWYodHlwZW9mIEI9PVwic3RyaW5nXCImJkIuaW5kZXhPZihcIi0tLS0tQkVHSU4gXCIpIT0tMSl7Qj1LRVlVVElMLmdldEtleShCKX1pZih6PT1cIlJTXCJ8fHo9PVwiUFNcIil7aWYoIShCIGluc3RhbmNlb2YgbSkpe3Rocm93XCJrZXkgc2hhbGwgYmUgYSBSU0FLZXkgb2JqIGZvciBSUyogYW5kIFBTKiBhbGdzXCJ9fWlmKHo9PVwiRVNcIil7aWYoIShCIGluc3RhbmNlb2YgcCkpe3Rocm93XCJrZXkgc2hhbGwgYmUgYSBFQ0RTQSBvYmogZm9yIEVTKiBhbGdzXCJ9fWlmKGs9PVwibm9uZVwiKXt9dmFyIHU9bnVsbDtpZih0Lmp3c2FsZzJzaWdhbGdbbC5hbGddPT09dW5kZWZpbmVkKXt0aHJvd1widW5zdXBwb3J0ZWQgYWxnIG5hbWU6IFwiK2t9ZWxzZXt1PXQuandzYWxnMnNpZ2FsZ1trXX1pZih1PT1cIm5vbmVcIil7dGhyb3dcIm5vdCBzdXBwb3J0ZWRcIn1lbHNle2lmKHUuc3Vic3RyKDAsNCk9PVwiSG1hY1wiKXt2YXIgbz1udWxsO2lmKEI9PT11bmRlZmluZWQpe3Rocm93XCJoZXhhZGVjaW1hbCBrZXkgc2hhbGwgYmUgc3BlY2lmaWVkIGZvciBITUFDXCJ9dmFyIGo9bmV3IHMoe2FsZzp1LHBhc3M6Qn0pO2oudXBkYXRlU3RyaW5nKGMpO289ai5kb0ZpbmFsKCk7cmV0dXJuIEE9PW99ZWxzZXtpZih1LmluZGV4T2YoXCJ3aXRoRUNEU0FcIikhPS0xKXt2YXIgaD1udWxsO3RyeXtoPXAuY29uY2F0U2lnVG9BU04xU2lnKEEpfWNhdGNoKHYpe3JldHVybiBmYWxzZX12YXIgZz1uZXcgZCh7YWxnOnV9KTtnLmluaXQoQik7Zy51cGRhdGVTdHJpbmcoYyk7cmV0dXJuIGcudmVyaWZ5KGgpfWVsc2V7dmFyIGc9bmV3IGQoe2FsZzp1fSk7Zy5pbml0KEIpO2cudXBkYXRlU3RyaW5nKGMpO3JldHVybiBnLnZlcmlmeShBKX19fX07S0pVUi5qd3MuSldTLnBhcnNlPWZ1bmN0aW9uKGcpe3ZhciBjPWcuc3BsaXQoXCIuXCIpO3ZhciBiPXt9O3ZhciBmLGUsZDtpZihjLmxlbmd0aCE9MiYmYy5sZW5ndGghPTMpe3Rocm93XCJtYWxmb3JtZWQgc0pXUzogd3JvbmcgbnVtYmVyIG9mICcuJyBzcGxpdHRlZCBlbGVtZW50c1wifWY9Y1swXTtlPWNbMV07aWYoYy5sZW5ndGg9PTMpe2Q9Y1syXX1iLmhlYWRlck9iaj1LSlVSLmp3cy5KV1MucmVhZFNhZmVKU09OU3RyaW5nKGI2NHV0b3V0ZjgoZikpO2IucGF5bG9hZE9iaj1LSlVSLmp3cy5KV1MucmVhZFNhZmVKU09OU3RyaW5nKGI2NHV0b3V0ZjgoZSkpO2IuaGVhZGVyUFA9SlNPTi5zdHJpbmdpZnkoYi5oZWFkZXJPYmosbnVsbCxcIiAgXCIpO2lmKGIucGF5bG9hZE9iaj09bnVsbCl7Yi5wYXlsb2FkUFA9YjY0dXRvdXRmOChlKX1lbHNle2IucGF5bG9hZFBQPUpTT04uc3RyaW5naWZ5KGIucGF5bG9hZE9iaixudWxsLFwiICBcIil9aWYoZCE9PXVuZGVmaW5lZCl7Yi5zaWdIZXg9YjY0dXRvaGV4KGQpfXJldHVybiBifTtLSlVSLmp3cy5KV1MudmVyaWZ5SldUPWZ1bmN0aW9uKGUsbCxyKXt2YXIgZD1LSlVSLGo9ZC5qd3Msbz1qLkpXUyxuPW8ucmVhZFNhZmVKU09OU3RyaW5nLHA9by5pbkFycmF5LGY9by5pbmNsdWRlZEFycmF5O3ZhciBrPWUuc3BsaXQoXCIuXCIpO3ZhciBjPWtbMF07dmFyIGk9a1sxXTt2YXIgcT1jK1wiLlwiK2k7dmFyIG09YjY0dXRvaGV4KGtbMl0pO3ZhciBoPW4oYjY0dXRvdXRmOChjKSk7dmFyIGc9bihiNjR1dG91dGY4KGkpKTtpZihoLmFsZz09PXVuZGVmaW5lZCl7cmV0dXJuIGZhbHNlfWlmKHIuYWxnPT09dW5kZWZpbmVkKXt0aHJvd1wiYWNjZXB0RmllbGQuYWxnIHNoYWxsIGJlIHNwZWNpZmllZFwifWlmKCFwKGguYWxnLHIuYWxnKSl7cmV0dXJuIGZhbHNlfWlmKGcuaXNzIT09dW5kZWZpbmVkJiZ0eXBlb2Ygci5pc3M9PT1cIm9iamVjdFwiKXtpZighcChnLmlzcyxyLmlzcykpe3JldHVybiBmYWxzZX19aWYoZy5zdWIhPT11bmRlZmluZWQmJnR5cGVvZiByLnN1Yj09PVwib2JqZWN0XCIpe2lmKCFwKGcuc3ViLHIuc3ViKSl7cmV0dXJuIGZhbHNlfX1pZihnLmF1ZCE9PXVuZGVmaW5lZCYmdHlwZW9mIHIuYXVkPT09XCJvYmplY3RcIil7aWYodHlwZW9mIGcuYXVkPT1cInN0cmluZ1wiKXtpZighcChnLmF1ZCxyLmF1ZCkpe3JldHVybiBmYWxzZX19ZWxzZXtpZih0eXBlb2YgZy5hdWQ9PVwib2JqZWN0XCIpe2lmKCFmKGcuYXVkLHIuYXVkKSl7cmV0dXJuIGZhbHNlfX19fXZhciBiPWouSW50RGF0ZS5nZXROb3coKTtpZihyLnZlcmlmeUF0IT09dW5kZWZpbmVkJiZ0eXBlb2Ygci52ZXJpZnlBdD09PVwibnVtYmVyXCIpe2I9ci52ZXJpZnlBdH1pZihyLmdyYWNlUGVyaW9kPT09dW5kZWZpbmVkfHx0eXBlb2Ygci5ncmFjZVBlcmlvZCE9PVwibnVtYmVyXCIpe3IuZ3JhY2VQZXJpb2Q9MH1pZihnLmV4cCE9PXVuZGVmaW5lZCYmdHlwZW9mIGcuZXhwPT1cIm51bWJlclwiKXtpZihnLmV4cCtyLmdyYWNlUGVyaW9kPGIpe3JldHVybiBmYWxzZX19aWYoZy5uYmYhPT11bmRlZmluZWQmJnR5cGVvZiBnLm5iZj09XCJudW1iZXJcIil7aWYoYjxnLm5iZi1yLmdyYWNlUGVyaW9kKXtyZXR1cm4gZmFsc2V9fWlmKGcuaWF0IT09dW5kZWZpbmVkJiZ0eXBlb2YgZy5pYXQ9PVwibnVtYmVyXCIpe2lmKGI8Zy5pYXQtci5ncmFjZVBlcmlvZCl7cmV0dXJuIGZhbHNlfX1pZihnLmp0aSE9PXVuZGVmaW5lZCYmci5qdGkhPT11bmRlZmluZWQpe2lmKGcuanRpIT09ci5qdGkpe3JldHVybiBmYWxzZX19aWYoIW8udmVyaWZ5KGUsbCxyLmFsZykpe3JldHVybiBmYWxzZX1yZXR1cm4gdHJ1ZX07S0pVUi5qd3MuSldTLmluY2x1ZGVkQXJyYXk9ZnVuY3Rpb24oYixhKXt2YXIgYz1LSlVSLmp3cy5KV1MuaW5BcnJheTtpZihiPT09bnVsbCl7cmV0dXJuIGZhbHNlfWlmKHR5cGVvZiBiIT09XCJvYmplY3RcIil7cmV0dXJuIGZhbHNlfWlmKHR5cGVvZiBiLmxlbmd0aCE9PVwibnVtYmVyXCIpe3JldHVybiBmYWxzZX1mb3IodmFyIGQ9MDtkPGIubGVuZ3RoO2QrKyl7aWYoIWMoYltkXSxhKSl7cmV0dXJuIGZhbHNlfX1yZXR1cm4gdHJ1ZX07S0pVUi5qd3MuSldTLmluQXJyYXk9ZnVuY3Rpb24oZCxiKXtpZihiPT09bnVsbCl7cmV0dXJuIGZhbHNlfWlmKHR5cGVvZiBiIT09XCJvYmplY3RcIil7cmV0dXJuIGZhbHNlfWlmKHR5cGVvZiBiLmxlbmd0aCE9PVwibnVtYmVyXCIpe3JldHVybiBmYWxzZX1mb3IodmFyIGM9MDtjPGIubGVuZ3RoO2MrKyl7aWYoYltjXT09ZCl7cmV0dXJuIHRydWV9fXJldHVybiBmYWxzZX07S0pVUi5qd3MuSldTLmp3c2FsZzJzaWdhbGc9e0hTMjU2OlwiSG1hY1NIQTI1NlwiLEhTMzg0OlwiSG1hY1NIQTM4NFwiLEhTNTEyOlwiSG1hY1NIQTUxMlwiLFJTMjU2OlwiU0hBMjU2d2l0aFJTQVwiLFJTMzg0OlwiU0hBMzg0d2l0aFJTQVwiLFJTNTEyOlwiU0hBNTEyd2l0aFJTQVwiLEVTMjU2OlwiU0hBMjU2d2l0aEVDRFNBXCIsRVMzODQ6XCJTSEEzODR3aXRoRUNEU0FcIixQUzI1NjpcIlNIQTI1NndpdGhSU0FhbmRNR0YxXCIsUFMzODQ6XCJTSEEzODR3aXRoUlNBYW5kTUdGMVwiLFBTNTEyOlwiU0hBNTEyd2l0aFJTQWFuZE1HRjFcIixub25lOlwibm9uZVwiLH07S0pVUi5qd3MuSldTLmlzU2FmZUpTT05TdHJpbmc9ZnVuY3Rpb24oYyxiLGQpe3ZhciBlPW51bGw7dHJ5e2U9anNvblBhcnNlKGMpO2lmKHR5cGVvZiBlIT1cIm9iamVjdFwiKXtyZXR1cm4gMH1pZihlLmNvbnN0cnVjdG9yPT09QXJyYXkpe3JldHVybiAwfWlmKGIpe2JbZF09ZX1yZXR1cm4gMX1jYXRjaChhKXtyZXR1cm4gMH19O0tKVVIuandzLkpXUy5yZWFkU2FmZUpTT05TdHJpbmc9ZnVuY3Rpb24oYil7dmFyIGM9bnVsbDt0cnl7Yz1qc29uUGFyc2UoYik7aWYodHlwZW9mIGMhPVwib2JqZWN0XCIpe3JldHVybiBudWxsfWlmKGMuY29uc3RydWN0b3I9PT1BcnJheSl7cmV0dXJuIG51bGx9cmV0dXJuIGN9Y2F0Y2goYSl7cmV0dXJuIG51bGx9fTtLSlVSLmp3cy5KV1MuZ2V0RW5jb2RlZFNpZ25hdHVyZVZhbHVlRnJvbUpXUz1mdW5jdGlvbihiKXt2YXIgYT1iLm1hdGNoKC9eW14uXStcXC5bXi5dK1xcLihbXi5dKykkLyk7aWYoYT09bnVsbCl7dGhyb3dcIkpXUyBzaWduYXR1cmUgaXMgbm90IGEgZm9ybSBvZiAnSGVhZC5QYXlsb2FkLlNpZ1ZhbHVlJy5cIn1yZXR1cm4gYVsxXX07S0pVUi5qd3MuSldTLmdldEpXS3RodW1icHJpbnQ9ZnVuY3Rpb24oZCl7aWYoZC5rdHkhPT1cIlJTQVwiJiZkLmt0eSE9PVwiRUNcIiYmZC5rdHkhPT1cIm9jdFwiKXt0aHJvd1widW5zdXBwb3J0ZWQgYWxnb3JpdGhtIGZvciBKV0sgVGh1bXByaW50XCJ9dmFyIGE9XCJ7XCI7aWYoZC5rdHk9PT1cIlJTQVwiKXtpZih0eXBlb2YgZC5uIT1cInN0cmluZ1wifHx0eXBlb2YgZC5lIT1cInN0cmluZ1wiKXt0aHJvd1wid3JvbmcgbiBhbmQgZSB2YWx1ZSBmb3IgUlNBIGtleVwifWErPSdcImVcIjpcIicrZC5lKydcIiwnO2ErPSdcImt0eVwiOlwiJytkLmt0eSsnXCIsJzthKz0nXCJuXCI6XCInK2QubisnXCJ9J31lbHNle2lmKGQua3R5PT09XCJFQ1wiKXtpZih0eXBlb2YgZC5jcnYhPVwic3RyaW5nXCJ8fHR5cGVvZiBkLnghPVwic3RyaW5nXCJ8fHR5cGVvZiBkLnkhPVwic3RyaW5nXCIpe3Rocm93XCJ3cm9uZyBjcnYsIHggYW5kIHkgdmFsdWUgZm9yIEVDIGtleVwifWErPSdcImNydlwiOlwiJytkLmNydisnXCIsJzthKz0nXCJrdHlcIjpcIicrZC5rdHkrJ1wiLCc7YSs9J1wieFwiOlwiJytkLngrJ1wiLCc7YSs9J1wieVwiOlwiJytkLnkrJ1wifSd9ZWxzZXtpZihkLmt0eT09PVwib2N0XCIpe2lmKHR5cGVvZiBkLmshPVwic3RyaW5nXCIpe3Rocm93XCJ3cm9uZyBrIHZhbHVlIGZvciBvY3Qoc3ltbWV0cmljKSBrZXlcIn1hKz0nXCJrdHlcIjpcIicrZC5rdHkrJ1wiLCc7YSs9J1wia1wiOlwiJytkLmsrJ1wifSd9fX12YXIgYj1yc3RydG9oZXgoYSk7dmFyIGM9S0pVUi5jcnlwdG8uVXRpbC5oYXNoSGV4KGIsXCJzaGEyNTZcIik7dmFyIGU9aGV4dG9iNjR1KGMpO3JldHVybiBlfTtLSlVSLmp3cy5JbnREYXRlPXt9O0tKVVIuandzLkludERhdGUuZ2V0PWZ1bmN0aW9uKGMpe3ZhciBiPUtKVVIuandzLkludERhdGUsZD1iLmdldE5vdyxhPWIuZ2V0WnVsdTtpZihjPT1cIm5vd1wiKXtyZXR1cm4gZCgpfWVsc2V7aWYoYz09XCJub3cgKyAxaG91clwiKXtyZXR1cm4gZCgpKzYwKjYwfWVsc2V7aWYoYz09XCJub3cgKyAxZGF5XCIpe3JldHVybiBkKCkrNjAqNjAqMjR9ZWxzZXtpZihjPT1cIm5vdyArIDFtb250aFwiKXtyZXR1cm4gZCgpKzYwKjYwKjI0KjMwfWVsc2V7aWYoYz09XCJub3cgKyAxeWVhclwiKXtyZXR1cm4gZCgpKzYwKjYwKjI0KjM2NX1lbHNle2lmKGMubWF0Y2goL1okLykpe3JldHVybiBhKGMpfWVsc2V7aWYoYy5tYXRjaCgvXlswLTldKyQvKSl7cmV0dXJuIHBhcnNlSW50KGMpfX19fX19fXRocm93XCJ1bnN1cHBvcnRlZCBmb3JtYXQ6IFwiK2N9O0tKVVIuandzLkludERhdGUuZ2V0WnVsdT1mdW5jdGlvbihhKXtyZXR1cm4genVsdXRvc2VjKGEpfTtLSlVSLmp3cy5JbnREYXRlLmdldE5vdz1mdW5jdGlvbigpe3ZhciBhPX5+KG5ldyBEYXRlKCkvMTAwMCk7cmV0dXJuIGF9O0tKVVIuandzLkludERhdGUuaW50RGF0ZTJVVENTdHJpbmc9ZnVuY3Rpb24oYSl7dmFyIGI9bmV3IERhdGUoYSoxMDAwKTtyZXR1cm4gYi50b1VUQ1N0cmluZygpfTtLSlVSLmp3cy5JbnREYXRlLmludERhdGUyWnVsdT1mdW5jdGlvbihlKXt2YXIgaT1uZXcgRGF0ZShlKjEwMDApLGg9KFwiMDAwMFwiK2kuZ2V0VVRDRnVsbFllYXIoKSkuc2xpY2UoLTQpLGc9KFwiMDBcIisoaS5nZXRVVENNb250aCgpKzEpKS5zbGljZSgtMiksYj0oXCIwMFwiK2kuZ2V0VVRDRGF0ZSgpKS5zbGljZSgtMiksYT0oXCIwMFwiK2kuZ2V0VVRDSG91cnMoKSkuc2xpY2UoLTIpLGM9KFwiMDBcIitpLmdldFVUQ01pbnV0ZXMoKSkuc2xpY2UoLTIpLGY9KFwiMDBcIitpLmdldFVUQ1NlY29uZHMoKSkuc2xpY2UoLTIpO3JldHVybiBoK2crYithK2MrZitcIlpcIn07XG5leHBvcnQgeyBTZWN1cmVSYW5kb20gfTtcbmV4cG9ydCB7IHJuZ19zZWVkX3RpbWUgfTtcblxuZXhwb3J0IHsgQmlnSW50ZWdlciB9O1xuZXhwb3J0IHsgUlNBS2V5IH07XG5leHBvcnQgY29uc3QgeyBFRFNBIH0gPSBLSlVSLmNyeXB0bztcbmV4cG9ydCBjb25zdCB7IERTQSB9ID0gS0pVUi5jcnlwdG87XG5leHBvcnQgY29uc3QgeyBTaWduYXR1cmUgfSA9IEtKVVIuY3J5cHRvO1xuZXhwb3J0IGNvbnN0IHsgTWVzc2FnZURpZ2VzdCB9ID0gIEtKVVIuY3J5cHRvO1xuZXhwb3J0IGNvbnN0IHsgTWFjIH0gPSBLSlVSLmNyeXB0bztcbmV4cG9ydCBjb25zdCB7IENpcGhlciB9ID0gIEtKVVIuY3J5cHRvO1xuZXhwb3J0IHsgS0VZVVRJTCB9O1xuZXhwb3J0IHsgQVNOMUhFWCB9O1xuZXhwb3J0IHsgWDUwOSB9O1xuZXhwb3J0IHsgQ3J5cHRvSlMgfTtcblxuLy8gZXh0L2Jhc2U2NC5qc1xuZXhwb3J0IHsgYjY0dG9oZXggfTtcbmV4cG9ydCB7IGI2NHRvQkEgfTtcblxuLy8gYmFzZTY0eC5qc1xuZXhwb3J0IHsgc3RvQkEgfTtcbmV4cG9ydCB7IEJBdG9zIH07XG5leHBvcnQgeyBCQXRvaGV4IH07XG5leHBvcnQgeyBzdG9oZXggfTtcbmV4cG9ydCB7IHN0b2I2NCB9O1xuZXhwb3J0IHsgc3RvYjY0dSB9O1xuZXhwb3J0IHsgYjY0dXRvcyB9O1xuZXhwb3J0IHsgYjY0dG9iNjR1IH07XG5leHBvcnQgeyBiNjR1dG9iNjQgfTtcbmV4cG9ydCB7IGhleDJiNjQgfTtcbmV4cG9ydCB7IGhleHRvYjY0dSB9O1xuZXhwb3J0IHsgYjY0dXRvaGV4IH07XG5leHBvcnQgeyB1dGY4dG9iNjR1IH07XG5leHBvcnQgeyBiNjR1dG91dGY4IH07XG5leHBvcnQgeyB1dGY4dG9iNjQgfTtcbmV4cG9ydCB7IGI2NHRvdXRmOCB9O1xuZXhwb3J0IHsgdXRmOHRvaGV4IH07XG5leHBvcnQgeyBoZXh0b3V0ZjggfTtcbmV4cG9ydCB7IGhleHRvcnN0ciB9O1xuZXhwb3J0IHsgcnN0cnRvaGV4IH07XG5leHBvcnQgeyBoZXh0b2I2NCB9O1xuZXhwb3J0IHsgaGV4dG9iNjRubCB9O1xuZXhwb3J0IHsgYjY0bmx0b2hleCB9O1xuZXhwb3J0IHsgaGV4dG9wZW0gfTtcbmV4cG9ydCB7IHBlbXRvaGV4IH07XG5leHBvcnQgeyBoZXh0b0FycmF5QnVmZmVyIH07XG5leHBvcnQgeyBBcnJheUJ1ZmZlcnRvaGV4IH07XG5leHBvcnQgeyB6dWx1dG9tc2VjIH07XG5leHBvcnQgeyB6dWx1dG9zZWMgfTtcbmV4cG9ydCB7IHp1bHV0b2RhdGUgfTtcbmV4cG9ydCB7IGRhdGV0b3p1bHUgfTtcbmV4cG9ydCB7IHVyaWNtcHRvaGV4IH07XG5leHBvcnQgeyBoZXh0b3VyaWNtcCB9O1xuZXhwb3J0IHsgaXB2NnRvaGV4IH07XG5leHBvcnQgeyBoZXh0b2lwdjYgfTtcbmV4cG9ydCB7IGhleHRvaXAgfTtcbmV4cG9ydCB7IGlwdG9oZXggfTtcbmV4cG9ydCB7IGVuY29kZVVSSUNvbXBvbmVudEFsbCB9O1xuZXhwb3J0IHsgbmV3bGluZV90b1VuaXggfTtcbmV4cG9ydCB7IG5ld2xpbmVfdG9Eb3MgfTtcbmV4cG9ydCB7IGhleHRvcG9zaGV4IH07XG5leHBvcnQgeyBpbnRhcnlzdHJ0b2hleCB9O1xuZXhwb3J0IHsgc3RyZGlmZmlkeCB9O1xuXG4vLyBuYW1lIHNwYWNlc1xuZXhwb3J0IHsgS0pVUiB9O1xuY29uc3QgX2NyeXB0byA9ICBLSlVSLmNyeXB0bztcbmV4cG9ydCB7IF9jcnlwdG8gYXMgY3J5cHRvIH07XG5leHBvcnQgY29uc3QgeyBhc24xIH0gPSBLSlVSO1xuZXhwb3J0IGNvbnN0IHsgandzIH0gPSBLSlVSO1xuZXhwb3J0IGNvbnN0IHsgbGFuZyB9ID0gS0pVUjtcblxuXG4iLCJcInVzZSBzdHJpY3RcIjtcblxucmVxdWlyZShcImNvcmUtanMvc2hpbVwiKTtcblxucmVxdWlyZShcInJlZ2VuZXJhdG9yLXJ1bnRpbWUvcnVudGltZVwiKTtcblxucmVxdWlyZShcImNvcmUtanMvZm4vcmVnZXhwL2VzY2FwZVwiKTtcblxuaWYgKGdsb2JhbC5fYmFiZWxQb2x5ZmlsbCkge1xuICB0aHJvdyBuZXcgRXJyb3IoXCJvbmx5IG9uZSBpbnN0YW5jZSBvZiBiYWJlbC1wb2x5ZmlsbCBpcyBhbGxvd2VkXCIpO1xufVxuZ2xvYmFsLl9iYWJlbFBvbHlmaWxsID0gdHJ1ZTtcblxudmFyIERFRklORV9QUk9QRVJUWSA9IFwiZGVmaW5lUHJvcGVydHlcIjtcbmZ1bmN0aW9uIGRlZmluZShPLCBrZXksIHZhbHVlKSB7XG4gIE9ba2V5XSB8fCBPYmplY3RbREVGSU5FX1BST1BFUlRZXShPLCBrZXksIHtcbiAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgdmFsdWU6IHZhbHVlXG4gIH0pO1xufVxuXG5kZWZpbmUoU3RyaW5nLnByb3RvdHlwZSwgXCJwYWRMZWZ0XCIsIFwiXCIucGFkU3RhcnQpO1xuZGVmaW5lKFN0cmluZy5wcm90b3R5cGUsIFwicGFkUmlnaHRcIiwgXCJcIi5wYWRFbmQpO1xuXG5cInBvcCxyZXZlcnNlLHNoaWZ0LGtleXMsdmFsdWVzLGVudHJpZXMsaW5kZXhPZixldmVyeSxzb21lLGZvckVhY2gsbWFwLGZpbHRlcixmaW5kLGZpbmRJbmRleCxpbmNsdWRlcyxqb2luLHNsaWNlLGNvbmNhdCxwdXNoLHNwbGljZSx1bnNoaWZ0LHNvcnQsbGFzdEluZGV4T2YscmVkdWNlLHJlZHVjZVJpZ2h0LGNvcHlXaXRoaW4sZmlsbFwiLnNwbGl0KFwiLFwiKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgW11ba2V5XSAmJiBkZWZpbmUoQXJyYXksIGtleSwgRnVuY3Rpb24uY2FsbC5iaW5kKFtdW2tleV0pKTtcbn0pOyIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE0LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIGh0dHBzOi8vcmF3LmdpdGh1Yi5jb20vZmFjZWJvb2svcmVnZW5lcmF0b3IvbWFzdGVyL0xJQ0VOU0UgZmlsZS4gQW5cbiAqIGFkZGl0aW9uYWwgZ3JhbnQgb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpblxuICogdGhlIHNhbWUgZGlyZWN0b3J5LlxuICovXG5cbiEoZnVuY3Rpb24oZ2xvYmFsKSB7XG4gIFwidXNlIHN0cmljdFwiO1xuXG4gIHZhciBPcCA9IE9iamVjdC5wcm90b3R5cGU7XG4gIHZhciBoYXNPd24gPSBPcC5oYXNPd25Qcm9wZXJ0eTtcbiAgdmFyIHVuZGVmaW5lZDsgLy8gTW9yZSBjb21wcmVzc2libGUgdGhhbiB2b2lkIDAuXG4gIHZhciAkU3ltYm9sID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiID8gU3ltYm9sIDoge307XG4gIHZhciBpdGVyYXRvclN5bWJvbCA9ICRTeW1ib2wuaXRlcmF0b3IgfHwgXCJAQGl0ZXJhdG9yXCI7XG4gIHZhciBhc3luY0l0ZXJhdG9yU3ltYm9sID0gJFN5bWJvbC5hc3luY0l0ZXJhdG9yIHx8IFwiQEBhc3luY0l0ZXJhdG9yXCI7XG4gIHZhciB0b1N0cmluZ1RhZ1N5bWJvbCA9ICRTeW1ib2wudG9TdHJpbmdUYWcgfHwgXCJAQHRvU3RyaW5nVGFnXCI7XG5cbiAgdmFyIGluTW9kdWxlID0gdHlwZW9mIG1vZHVsZSA9PT0gXCJvYmplY3RcIjtcbiAgdmFyIHJ1bnRpbWUgPSBnbG9iYWwucmVnZW5lcmF0b3JSdW50aW1lO1xuICBpZiAocnVudGltZSkge1xuICAgIGlmIChpbk1vZHVsZSkge1xuICAgICAgLy8gSWYgcmVnZW5lcmF0b3JSdW50aW1lIGlzIGRlZmluZWQgZ2xvYmFsbHkgYW5kIHdlJ3JlIGluIGEgbW9kdWxlLFxuICAgICAgLy8gbWFrZSB0aGUgZXhwb3J0cyBvYmplY3QgaWRlbnRpY2FsIHRvIHJlZ2VuZXJhdG9yUnVudGltZS5cbiAgICAgIG1vZHVsZS5leHBvcnRzID0gcnVudGltZTtcbiAgICB9XG4gICAgLy8gRG9uJ3QgYm90aGVyIGV2YWx1YXRpbmcgdGhlIHJlc3Qgb2YgdGhpcyBmaWxlIGlmIHRoZSBydW50aW1lIHdhc1xuICAgIC8vIGFscmVhZHkgZGVmaW5lZCBnbG9iYWxseS5cbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBEZWZpbmUgdGhlIHJ1bnRpbWUgZ2xvYmFsbHkgKGFzIGV4cGVjdGVkIGJ5IGdlbmVyYXRlZCBjb2RlKSBhcyBlaXRoZXJcbiAgLy8gbW9kdWxlLmV4cG9ydHMgKGlmIHdlJ3JlIGluIGEgbW9kdWxlKSBvciBhIG5ldywgZW1wdHkgb2JqZWN0LlxuICBydW50aW1lID0gZ2xvYmFsLnJlZ2VuZXJhdG9yUnVudGltZSA9IGluTW9kdWxlID8gbW9kdWxlLmV4cG9ydHMgOiB7fTtcblxuICBmdW5jdGlvbiB3cmFwKGlubmVyRm4sIG91dGVyRm4sIHNlbGYsIHRyeUxvY3NMaXN0KSB7XG4gICAgLy8gSWYgb3V0ZXJGbiBwcm92aWRlZCBhbmQgb3V0ZXJGbi5wcm90b3R5cGUgaXMgYSBHZW5lcmF0b3IsIHRoZW4gb3V0ZXJGbi5wcm90b3R5cGUgaW5zdGFuY2VvZiBHZW5lcmF0b3IuXG4gICAgdmFyIHByb3RvR2VuZXJhdG9yID0gb3V0ZXJGbiAmJiBvdXRlckZuLnByb3RvdHlwZSBpbnN0YW5jZW9mIEdlbmVyYXRvciA/IG91dGVyRm4gOiBHZW5lcmF0b3I7XG4gICAgdmFyIGdlbmVyYXRvciA9IE9iamVjdC5jcmVhdGUocHJvdG9HZW5lcmF0b3IucHJvdG90eXBlKTtcbiAgICB2YXIgY29udGV4dCA9IG5ldyBDb250ZXh0KHRyeUxvY3NMaXN0IHx8IFtdKTtcblxuICAgIC8vIFRoZSAuX2ludm9rZSBtZXRob2QgdW5pZmllcyB0aGUgaW1wbGVtZW50YXRpb25zIG9mIHRoZSAubmV4dCxcbiAgICAvLyAudGhyb3csIGFuZCAucmV0dXJuIG1ldGhvZHMuXG4gICAgZ2VuZXJhdG9yLl9pbnZva2UgPSBtYWtlSW52b2tlTWV0aG9kKGlubmVyRm4sIHNlbGYsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGdlbmVyYXRvcjtcbiAgfVxuICBydW50aW1lLndyYXAgPSB3cmFwO1xuXG4gIC8vIFRyeS9jYXRjaCBoZWxwZXIgdG8gbWluaW1pemUgZGVvcHRpbWl6YXRpb25zLiBSZXR1cm5zIGEgY29tcGxldGlvblxuICAvLyByZWNvcmQgbGlrZSBjb250ZXh0LnRyeUVudHJpZXNbaV0uY29tcGxldGlvbi4gVGhpcyBpbnRlcmZhY2UgY291bGRcbiAgLy8gaGF2ZSBiZWVuIChhbmQgd2FzIHByZXZpb3VzbHkpIGRlc2lnbmVkIHRvIHRha2UgYSBjbG9zdXJlIHRvIGJlXG4gIC8vIGludm9rZWQgd2l0aG91dCBhcmd1bWVudHMsIGJ1dCBpbiBhbGwgdGhlIGNhc2VzIHdlIGNhcmUgYWJvdXQgd2VcbiAgLy8gYWxyZWFkeSBoYXZlIGFuIGV4aXN0aW5nIG1ldGhvZCB3ZSB3YW50IHRvIGNhbGwsIHNvIHRoZXJlJ3Mgbm8gbmVlZFxuICAvLyB0byBjcmVhdGUgYSBuZXcgZnVuY3Rpb24gb2JqZWN0LiBXZSBjYW4gZXZlbiBnZXQgYXdheSB3aXRoIGFzc3VtaW5nXG4gIC8vIHRoZSBtZXRob2QgdGFrZXMgZXhhY3RseSBvbmUgYXJndW1lbnQsIHNpbmNlIHRoYXQgaGFwcGVucyB0byBiZSB0cnVlXG4gIC8vIGluIGV2ZXJ5IGNhc2UsIHNvIHdlIGRvbid0IGhhdmUgdG8gdG91Y2ggdGhlIGFyZ3VtZW50cyBvYmplY3QuIFRoZVxuICAvLyBvbmx5IGFkZGl0aW9uYWwgYWxsb2NhdGlvbiByZXF1aXJlZCBpcyB0aGUgY29tcGxldGlvbiByZWNvcmQsIHdoaWNoXG4gIC8vIGhhcyBhIHN0YWJsZSBzaGFwZSBhbmQgc28gaG9wZWZ1bGx5IHNob3VsZCBiZSBjaGVhcCB0byBhbGxvY2F0ZS5cbiAgZnVuY3Rpb24gdHJ5Q2F0Y2goZm4sIG9iaiwgYXJnKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB7IHR5cGU6IFwibm9ybWFsXCIsIGFyZzogZm4uY2FsbChvYmosIGFyZykgfTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHJldHVybiB7IHR5cGU6IFwidGhyb3dcIiwgYXJnOiBlcnIgfTtcbiAgICB9XG4gIH1cblxuICB2YXIgR2VuU3RhdGVTdXNwZW5kZWRTdGFydCA9IFwic3VzcGVuZGVkU3RhcnRcIjtcbiAgdmFyIEdlblN0YXRlU3VzcGVuZGVkWWllbGQgPSBcInN1c3BlbmRlZFlpZWxkXCI7XG4gIHZhciBHZW5TdGF0ZUV4ZWN1dGluZyA9IFwiZXhlY3V0aW5nXCI7XG4gIHZhciBHZW5TdGF0ZUNvbXBsZXRlZCA9IFwiY29tcGxldGVkXCI7XG5cbiAgLy8gUmV0dXJuaW5nIHRoaXMgb2JqZWN0IGZyb20gdGhlIGlubmVyRm4gaGFzIHRoZSBzYW1lIGVmZmVjdCBhc1xuICAvLyBicmVha2luZyBvdXQgb2YgdGhlIGRpc3BhdGNoIHN3aXRjaCBzdGF0ZW1lbnQuXG4gIHZhciBDb250aW51ZVNlbnRpbmVsID0ge307XG5cbiAgLy8gRHVtbXkgY29uc3RydWN0b3IgZnVuY3Rpb25zIHRoYXQgd2UgdXNlIGFzIHRoZSAuY29uc3RydWN0b3IgYW5kXG4gIC8vIC5jb25zdHJ1Y3Rvci5wcm90b3R5cGUgcHJvcGVydGllcyBmb3IgZnVuY3Rpb25zIHRoYXQgcmV0dXJuIEdlbmVyYXRvclxuICAvLyBvYmplY3RzLiBGb3IgZnVsbCBzcGVjIGNvbXBsaWFuY2UsIHlvdSBtYXkgd2lzaCB0byBjb25maWd1cmUgeW91clxuICAvLyBtaW5pZmllciBub3QgdG8gbWFuZ2xlIHRoZSBuYW1lcyBvZiB0aGVzZSB0d28gZnVuY3Rpb25zLlxuICBmdW5jdGlvbiBHZW5lcmF0b3IoKSB7fVxuICBmdW5jdGlvbiBHZW5lcmF0b3JGdW5jdGlvbigpIHt9XG4gIGZ1bmN0aW9uIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlKCkge31cblxuICAvLyBUaGlzIGlzIGEgcG9seWZpbGwgZm9yICVJdGVyYXRvclByb3RvdHlwZSUgZm9yIGVudmlyb25tZW50cyB0aGF0XG4gIC8vIGRvbid0IG5hdGl2ZWx5IHN1cHBvcnQgaXQuXG4gIHZhciBJdGVyYXRvclByb3RvdHlwZSA9IHt9O1xuICBJdGVyYXRvclByb3RvdHlwZVtpdGVyYXRvclN5bWJvbF0gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgdmFyIGdldFByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mO1xuICB2YXIgTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUgPSBnZXRQcm90byAmJiBnZXRQcm90byhnZXRQcm90byh2YWx1ZXMoW10pKSk7XG4gIGlmIChOYXRpdmVJdGVyYXRvclByb3RvdHlwZSAmJlxuICAgICAgTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUgIT09IE9wICYmXG4gICAgICBoYXNPd24uY2FsbChOYXRpdmVJdGVyYXRvclByb3RvdHlwZSwgaXRlcmF0b3JTeW1ib2wpKSB7XG4gICAgLy8gVGhpcyBlbnZpcm9ubWVudCBoYXMgYSBuYXRpdmUgJUl0ZXJhdG9yUHJvdG90eXBlJTsgdXNlIGl0IGluc3RlYWRcbiAgICAvLyBvZiB0aGUgcG9seWZpbGwuXG4gICAgSXRlcmF0b3JQcm90b3R5cGUgPSBOYXRpdmVJdGVyYXRvclByb3RvdHlwZTtcbiAgfVxuXG4gIHZhciBHcCA9IEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLnByb3RvdHlwZSA9XG4gICAgR2VuZXJhdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoSXRlcmF0b3JQcm90b3R5cGUpO1xuICBHZW5lcmF0b3JGdW5jdGlvbi5wcm90b3R5cGUgPSBHcC5jb25zdHJ1Y3RvciA9IEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlO1xuICBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEdlbmVyYXRvckZ1bmN0aW9uO1xuICBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZVt0b1N0cmluZ1RhZ1N5bWJvbF0gPVxuICAgIEdlbmVyYXRvckZ1bmN0aW9uLmRpc3BsYXlOYW1lID0gXCJHZW5lcmF0b3JGdW5jdGlvblwiO1xuXG4gIC8vIEhlbHBlciBmb3IgZGVmaW5pbmcgdGhlIC5uZXh0LCAudGhyb3csIGFuZCAucmV0dXJuIG1ldGhvZHMgb2YgdGhlXG4gIC8vIEl0ZXJhdG9yIGludGVyZmFjZSBpbiB0ZXJtcyBvZiBhIHNpbmdsZSAuX2ludm9rZSBtZXRob2QuXG4gIGZ1bmN0aW9uIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhwcm90b3R5cGUpIHtcbiAgICBbXCJuZXh0XCIsIFwidGhyb3dcIiwgXCJyZXR1cm5cIl0uZm9yRWFjaChmdW5jdGlvbihtZXRob2QpIHtcbiAgICAgIHByb3RvdHlwZVttZXRob2RdID0gZnVuY3Rpb24oYXJnKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbnZva2UobWV0aG9kLCBhcmcpO1xuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIHJ1bnRpbWUuaXNHZW5lcmF0b3JGdW5jdGlvbiA9IGZ1bmN0aW9uKGdlbkZ1bikge1xuICAgIHZhciBjdG9yID0gdHlwZW9mIGdlbkZ1biA9PT0gXCJmdW5jdGlvblwiICYmIGdlbkZ1bi5jb25zdHJ1Y3RvcjtcbiAgICByZXR1cm4gY3RvclxuICAgICAgPyBjdG9yID09PSBHZW5lcmF0b3JGdW5jdGlvbiB8fFxuICAgICAgICAvLyBGb3IgdGhlIG5hdGl2ZSBHZW5lcmF0b3JGdW5jdGlvbiBjb25zdHJ1Y3RvciwgdGhlIGJlc3Qgd2UgY2FuXG4gICAgICAgIC8vIGRvIGlzIHRvIGNoZWNrIGl0cyAubmFtZSBwcm9wZXJ0eS5cbiAgICAgICAgKGN0b3IuZGlzcGxheU5hbWUgfHwgY3Rvci5uYW1lKSA9PT0gXCJHZW5lcmF0b3JGdW5jdGlvblwiXG4gICAgICA6IGZhbHNlO1xuICB9O1xuXG4gIHJ1bnRpbWUubWFyayA9IGZ1bmN0aW9uKGdlbkZ1bikge1xuICAgIGlmIChPYmplY3Quc2V0UHJvdG90eXBlT2YpIHtcbiAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihnZW5GdW4sIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZ2VuRnVuLl9fcHJvdG9fXyA9IEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlO1xuICAgICAgaWYgKCEodG9TdHJpbmdUYWdTeW1ib2wgaW4gZ2VuRnVuKSkge1xuICAgICAgICBnZW5GdW5bdG9TdHJpbmdUYWdTeW1ib2xdID0gXCJHZW5lcmF0b3JGdW5jdGlvblwiO1xuICAgICAgfVxuICAgIH1cbiAgICBnZW5GdW4ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShHcCk7XG4gICAgcmV0dXJuIGdlbkZ1bjtcbiAgfTtcblxuICAvLyBXaXRoaW4gdGhlIGJvZHkgb2YgYW55IGFzeW5jIGZ1bmN0aW9uLCBgYXdhaXQgeGAgaXMgdHJhbnNmb3JtZWQgdG9cbiAgLy8gYHlpZWxkIHJlZ2VuZXJhdG9yUnVudGltZS5hd3JhcCh4KWAsIHNvIHRoYXQgdGhlIHJ1bnRpbWUgY2FuIHRlc3RcbiAgLy8gYGhhc093bi5jYWxsKHZhbHVlLCBcIl9fYXdhaXRcIilgIHRvIGRldGVybWluZSBpZiB0aGUgeWllbGRlZCB2YWx1ZSBpc1xuICAvLyBtZWFudCB0byBiZSBhd2FpdGVkLlxuICBydW50aW1lLmF3cmFwID0gZnVuY3Rpb24oYXJnKSB7XG4gICAgcmV0dXJuIHsgX19hd2FpdDogYXJnIH07XG4gIH07XG5cbiAgZnVuY3Rpb24gQXN5bmNJdGVyYXRvcihnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBpbnZva2UobWV0aG9kLCBhcmcsIHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgdmFyIHJlY29yZCA9IHRyeUNhdGNoKGdlbmVyYXRvclttZXRob2RdLCBnZW5lcmF0b3IsIGFyZyk7XG4gICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICByZWplY3QocmVjb3JkLmFyZyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgcmVzdWx0ID0gcmVjb3JkLmFyZztcbiAgICAgICAgdmFyIHZhbHVlID0gcmVzdWx0LnZhbHVlO1xuICAgICAgICBpZiAodmFsdWUgJiZcbiAgICAgICAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICAgICAgaGFzT3duLmNhbGwodmFsdWUsIFwiX19hd2FpdFwiKSkge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodmFsdWUuX19hd2FpdCkudGhlbihmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICAgICAgaW52b2tlKFwibmV4dFwiLCB2YWx1ZSwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICB9LCBmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgICAgIGludm9rZShcInRocm93XCIsIGVyciwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodmFsdWUpLnRoZW4oZnVuY3Rpb24odW53cmFwcGVkKSB7XG4gICAgICAgICAgLy8gV2hlbiBhIHlpZWxkZWQgUHJvbWlzZSBpcyByZXNvbHZlZCwgaXRzIGZpbmFsIHZhbHVlIGJlY29tZXNcbiAgICAgICAgICAvLyB0aGUgLnZhbHVlIG9mIHRoZSBQcm9taXNlPHt2YWx1ZSxkb25lfT4gcmVzdWx0IGZvciB0aGVcbiAgICAgICAgICAvLyBjdXJyZW50IGl0ZXJhdGlvbi4gSWYgdGhlIFByb21pc2UgaXMgcmVqZWN0ZWQsIGhvd2V2ZXIsIHRoZVxuICAgICAgICAgIC8vIHJlc3VsdCBmb3IgdGhpcyBpdGVyYXRpb24gd2lsbCBiZSByZWplY3RlZCB3aXRoIHRoZSBzYW1lXG4gICAgICAgICAgLy8gcmVhc29uLiBOb3RlIHRoYXQgcmVqZWN0aW9ucyBvZiB5aWVsZGVkIFByb21pc2VzIGFyZSBub3RcbiAgICAgICAgICAvLyB0aHJvd24gYmFjayBpbnRvIHRoZSBnZW5lcmF0b3IgZnVuY3Rpb24sIGFzIGlzIHRoZSBjYXNlXG4gICAgICAgICAgLy8gd2hlbiBhbiBhd2FpdGVkIFByb21pc2UgaXMgcmVqZWN0ZWQuIFRoaXMgZGlmZmVyZW5jZSBpblxuICAgICAgICAgIC8vIGJlaGF2aW9yIGJldHdlZW4geWllbGQgYW5kIGF3YWl0IGlzIGltcG9ydGFudCwgYmVjYXVzZSBpdFxuICAgICAgICAgIC8vIGFsbG93cyB0aGUgY29uc3VtZXIgdG8gZGVjaWRlIHdoYXQgdG8gZG8gd2l0aCB0aGUgeWllbGRlZFxuICAgICAgICAgIC8vIHJlamVjdGlvbiAoc3dhbGxvdyBpdCBhbmQgY29udGludWUsIG1hbnVhbGx5IC50aHJvdyBpdCBiYWNrXG4gICAgICAgICAgLy8gaW50byB0aGUgZ2VuZXJhdG9yLCBhYmFuZG9uIGl0ZXJhdGlvbiwgd2hhdGV2ZXIpLiBXaXRoXG4gICAgICAgICAgLy8gYXdhaXQsIGJ5IGNvbnRyYXN0LCB0aGVyZSBpcyBubyBvcHBvcnR1bml0eSB0byBleGFtaW5lIHRoZVxuICAgICAgICAgIC8vIHJlamVjdGlvbiByZWFzb24gb3V0c2lkZSB0aGUgZ2VuZXJhdG9yIGZ1bmN0aW9uLCBzbyB0aGVcbiAgICAgICAgICAvLyBvbmx5IG9wdGlvbiBpcyB0byB0aHJvdyBpdCBmcm9tIHRoZSBhd2FpdCBleHByZXNzaW9uLCBhbmRcbiAgICAgICAgICAvLyBsZXQgdGhlIGdlbmVyYXRvciBmdW5jdGlvbiBoYW5kbGUgdGhlIGV4Y2VwdGlvbi5cbiAgICAgICAgICByZXN1bHQudmFsdWUgPSB1bndyYXBwZWQ7XG4gICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICB9LCByZWplY3QpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZ2xvYmFsLnByb2Nlc3MgPT09IFwib2JqZWN0XCIgJiYgZ2xvYmFsLnByb2Nlc3MuZG9tYWluKSB7XG4gICAgICBpbnZva2UgPSBnbG9iYWwucHJvY2Vzcy5kb21haW4uYmluZChpbnZva2UpO1xuICAgIH1cblxuICAgIHZhciBwcmV2aW91c1Byb21pc2U7XG5cbiAgICBmdW5jdGlvbiBlbnF1ZXVlKG1ldGhvZCwgYXJnKSB7XG4gICAgICBmdW5jdGlvbiBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZygpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgIGludm9rZShtZXRob2QsIGFyZywgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwcmV2aW91c1Byb21pc2UgPVxuICAgICAgICAvLyBJZiBlbnF1ZXVlIGhhcyBiZWVuIGNhbGxlZCBiZWZvcmUsIHRoZW4gd2Ugd2FudCB0byB3YWl0IHVudGlsXG4gICAgICAgIC8vIGFsbCBwcmV2aW91cyBQcm9taXNlcyBoYXZlIGJlZW4gcmVzb2x2ZWQgYmVmb3JlIGNhbGxpbmcgaW52b2tlLFxuICAgICAgICAvLyBzbyB0aGF0IHJlc3VsdHMgYXJlIGFsd2F5cyBkZWxpdmVyZWQgaW4gdGhlIGNvcnJlY3Qgb3JkZXIuIElmXG4gICAgICAgIC8vIGVucXVldWUgaGFzIG5vdCBiZWVuIGNhbGxlZCBiZWZvcmUsIHRoZW4gaXQgaXMgaW1wb3J0YW50IHRvXG4gICAgICAgIC8vIGNhbGwgaW52b2tlIGltbWVkaWF0ZWx5LCB3aXRob3V0IHdhaXRpbmcgb24gYSBjYWxsYmFjayB0byBmaXJlLFxuICAgICAgICAvLyBzbyB0aGF0IHRoZSBhc3luYyBnZW5lcmF0b3IgZnVuY3Rpb24gaGFzIHRoZSBvcHBvcnR1bml0eSB0byBkb1xuICAgICAgICAvLyBhbnkgbmVjZXNzYXJ5IHNldHVwIGluIGEgcHJlZGljdGFibGUgd2F5LiBUaGlzIHByZWRpY3RhYmlsaXR5XG4gICAgICAgIC8vIGlzIHdoeSB0aGUgUHJvbWlzZSBjb25zdHJ1Y3RvciBzeW5jaHJvbm91c2x5IGludm9rZXMgaXRzXG4gICAgICAgIC8vIGV4ZWN1dG9yIGNhbGxiYWNrLCBhbmQgd2h5IGFzeW5jIGZ1bmN0aW9ucyBzeW5jaHJvbm91c2x5XG4gICAgICAgIC8vIGV4ZWN1dGUgY29kZSBiZWZvcmUgdGhlIGZpcnN0IGF3YWl0LiBTaW5jZSB3ZSBpbXBsZW1lbnQgc2ltcGxlXG4gICAgICAgIC8vIGFzeW5jIGZ1bmN0aW9ucyBpbiB0ZXJtcyBvZiBhc3luYyBnZW5lcmF0b3JzLCBpdCBpcyBlc3BlY2lhbGx5XG4gICAgICAgIC8vIGltcG9ydGFudCB0byBnZXQgdGhpcyByaWdodCwgZXZlbiB0aG91Z2ggaXQgcmVxdWlyZXMgY2FyZS5cbiAgICAgICAgcHJldmlvdXNQcm9taXNlID8gcHJldmlvdXNQcm9taXNlLnRoZW4oXG4gICAgICAgICAgY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcsXG4gICAgICAgICAgLy8gQXZvaWQgcHJvcGFnYXRpbmcgZmFpbHVyZXMgdG8gUHJvbWlzZXMgcmV0dXJuZWQgYnkgbGF0ZXJcbiAgICAgICAgICAvLyBpbnZvY2F0aW9ucyBvZiB0aGUgaXRlcmF0b3IuXG4gICAgICAgICAgY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmdcbiAgICAgICAgKSA6IGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnKCk7XG4gICAgfVxuXG4gICAgLy8gRGVmaW5lIHRoZSB1bmlmaWVkIGhlbHBlciBtZXRob2QgdGhhdCBpcyB1c2VkIHRvIGltcGxlbWVudCAubmV4dCxcbiAgICAvLyAudGhyb3csIGFuZCAucmV0dXJuIChzZWUgZGVmaW5lSXRlcmF0b3JNZXRob2RzKS5cbiAgICB0aGlzLl9pbnZva2UgPSBlbnF1ZXVlO1xuICB9XG5cbiAgZGVmaW5lSXRlcmF0b3JNZXRob2RzKEFzeW5jSXRlcmF0b3IucHJvdG90eXBlKTtcbiAgQXN5bmNJdGVyYXRvci5wcm90b3R5cGVbYXN5bmNJdGVyYXRvclN5bWJvbF0gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG4gIHJ1bnRpbWUuQXN5bmNJdGVyYXRvciA9IEFzeW5jSXRlcmF0b3I7XG5cbiAgLy8gTm90ZSB0aGF0IHNpbXBsZSBhc3luYyBmdW5jdGlvbnMgYXJlIGltcGxlbWVudGVkIG9uIHRvcCBvZlxuICAvLyBBc3luY0l0ZXJhdG9yIG9iamVjdHM7IHRoZXkganVzdCByZXR1cm4gYSBQcm9taXNlIGZvciB0aGUgdmFsdWUgb2ZcbiAgLy8gdGhlIGZpbmFsIHJlc3VsdCBwcm9kdWNlZCBieSB0aGUgaXRlcmF0b3IuXG4gIHJ1bnRpbWUuYXN5bmMgPSBmdW5jdGlvbihpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdCkge1xuICAgIHZhciBpdGVyID0gbmV3IEFzeW5jSXRlcmF0b3IoXG4gICAgICB3cmFwKGlubmVyRm4sIG91dGVyRm4sIHNlbGYsIHRyeUxvY3NMaXN0KVxuICAgICk7XG5cbiAgICByZXR1cm4gcnVudGltZS5pc0dlbmVyYXRvckZ1bmN0aW9uKG91dGVyRm4pXG4gICAgICA/IGl0ZXIgLy8gSWYgb3V0ZXJGbiBpcyBhIGdlbmVyYXRvciwgcmV0dXJuIHRoZSBmdWxsIGl0ZXJhdG9yLlxuICAgICAgOiBpdGVyLm5leHQoKS50aGVuKGZ1bmN0aW9uKHJlc3VsdCkge1xuICAgICAgICAgIHJldHVybiByZXN1bHQuZG9uZSA/IHJlc3VsdC52YWx1ZSA6IGl0ZXIubmV4dCgpO1xuICAgICAgICB9KTtcbiAgfTtcblxuICBmdW5jdGlvbiBtYWtlSW52b2tlTWV0aG9kKGlubmVyRm4sIHNlbGYsIGNvbnRleHQpIHtcbiAgICB2YXIgc3RhdGUgPSBHZW5TdGF0ZVN1c3BlbmRlZFN0YXJ0O1xuXG4gICAgcmV0dXJuIGZ1bmN0aW9uIGludm9rZShtZXRob2QsIGFyZykge1xuICAgICAgaWYgKHN0YXRlID09PSBHZW5TdGF0ZUV4ZWN1dGluZykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nXCIpO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3RhdGUgPT09IEdlblN0YXRlQ29tcGxldGVkKSB7XG4gICAgICAgIGlmIChtZXRob2QgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgIHRocm93IGFyZztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEJlIGZvcmdpdmluZywgcGVyIDI1LjMuMy4zLjMgb2YgdGhlIHNwZWM6XG4gICAgICAgIC8vIGh0dHBzOi8vcGVvcGxlLm1vemlsbGEub3JnL35qb3JlbmRvcmZmL2VzNi1kcmFmdC5odG1sI3NlYy1nZW5lcmF0b3JyZXN1bWVcbiAgICAgICAgcmV0dXJuIGRvbmVSZXN1bHQoKTtcbiAgICAgIH1cblxuICAgICAgY29udGV4dC5tZXRob2QgPSBtZXRob2Q7XG4gICAgICBjb250ZXh0LmFyZyA9IGFyZztcblxuICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgdmFyIGRlbGVnYXRlID0gY29udGV4dC5kZWxlZ2F0ZTtcbiAgICAgICAgaWYgKGRlbGVnYXRlKSB7XG4gICAgICAgICAgdmFyIGRlbGVnYXRlUmVzdWx0ID0gbWF5YmVJbnZva2VEZWxlZ2F0ZShkZWxlZ2F0ZSwgY29udGV4dCk7XG4gICAgICAgICAgaWYgKGRlbGVnYXRlUmVzdWx0KSB7XG4gICAgICAgICAgICBpZiAoZGVsZWdhdGVSZXN1bHQgPT09IENvbnRpbnVlU2VudGluZWwpIGNvbnRpbnVlO1xuICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRlUmVzdWx0O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJuZXh0XCIpIHtcbiAgICAgICAgICAvLyBTZXR0aW5nIGNvbnRleHQuX3NlbnQgZm9yIGxlZ2FjeSBzdXBwb3J0IG9mIEJhYmVsJ3NcbiAgICAgICAgICAvLyBmdW5jdGlvbi5zZW50IGltcGxlbWVudGF0aW9uLlxuICAgICAgICAgIGNvbnRleHQuc2VudCA9IGNvbnRleHQuX3NlbnQgPSBjb250ZXh0LmFyZztcblxuICAgICAgICB9IGVsc2UgaWYgKGNvbnRleHQubWV0aG9kID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICBpZiAoc3RhdGUgPT09IEdlblN0YXRlU3VzcGVuZGVkU3RhcnQpIHtcbiAgICAgICAgICAgIHN0YXRlID0gR2VuU3RhdGVDb21wbGV0ZWQ7XG4gICAgICAgICAgICB0aHJvdyBjb250ZXh0LmFyZztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb250ZXh0LmRpc3BhdGNoRXhjZXB0aW9uKGNvbnRleHQuYXJnKTtcblxuICAgICAgICB9IGVsc2UgaWYgKGNvbnRleHQubWV0aG9kID09PSBcInJldHVyblwiKSB7XG4gICAgICAgICAgY29udGV4dC5hYnJ1cHQoXCJyZXR1cm5cIiwgY29udGV4dC5hcmcpO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RhdGUgPSBHZW5TdGF0ZUV4ZWN1dGluZztcblxuICAgICAgICB2YXIgcmVjb3JkID0gdHJ5Q2F0Y2goaW5uZXJGbiwgc2VsZiwgY29udGV4dCk7XG4gICAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJub3JtYWxcIikge1xuICAgICAgICAgIC8vIElmIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24gZnJvbSBpbm5lckZuLCB3ZSBsZWF2ZSBzdGF0ZSA9PT1cbiAgICAgICAgICAvLyBHZW5TdGF0ZUV4ZWN1dGluZyBhbmQgbG9vcCBiYWNrIGZvciBhbm90aGVyIGludm9jYXRpb24uXG4gICAgICAgICAgc3RhdGUgPSBjb250ZXh0LmRvbmVcbiAgICAgICAgICAgID8gR2VuU3RhdGVDb21wbGV0ZWRcbiAgICAgICAgICAgIDogR2VuU3RhdGVTdXNwZW5kZWRZaWVsZDtcblxuICAgICAgICAgIGlmIChyZWNvcmQuYXJnID09PSBDb250aW51ZVNlbnRpbmVsKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdmFsdWU6IHJlY29yZC5hcmcsXG4gICAgICAgICAgICBkb25lOiBjb250ZXh0LmRvbmVcbiAgICAgICAgICB9O1xuXG4gICAgICAgIH0gZWxzZSBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgIHN0YXRlID0gR2VuU3RhdGVDb21wbGV0ZWQ7XG4gICAgICAgICAgLy8gRGlzcGF0Y2ggdGhlIGV4Y2VwdGlvbiBieSBsb29waW5nIGJhY2sgYXJvdW5kIHRvIHRoZVxuICAgICAgICAgIC8vIGNvbnRleHQuZGlzcGF0Y2hFeGNlcHRpb24oY29udGV4dC5hcmcpIGNhbGwgYWJvdmUuXG4gICAgICAgICAgY29udGV4dC5tZXRob2QgPSBcInRocm93XCI7XG4gICAgICAgICAgY29udGV4dC5hcmcgPSByZWNvcmQuYXJnO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIC8vIENhbGwgZGVsZWdhdGUuaXRlcmF0b3JbY29udGV4dC5tZXRob2RdKGNvbnRleHQuYXJnKSBhbmQgaGFuZGxlIHRoZVxuICAvLyByZXN1bHQsIGVpdGhlciBieSByZXR1cm5pbmcgYSB7IHZhbHVlLCBkb25lIH0gcmVzdWx0IGZyb20gdGhlXG4gIC8vIGRlbGVnYXRlIGl0ZXJhdG9yLCBvciBieSBtb2RpZnlpbmcgY29udGV4dC5tZXRob2QgYW5kIGNvbnRleHQuYXJnLFxuICAvLyBzZXR0aW5nIGNvbnRleHQuZGVsZWdhdGUgdG8gbnVsbCwgYW5kIHJldHVybmluZyB0aGUgQ29udGludWVTZW50aW5lbC5cbiAgZnVuY3Rpb24gbWF5YmVJbnZva2VEZWxlZ2F0ZShkZWxlZ2F0ZSwgY29udGV4dCkge1xuICAgIHZhciBtZXRob2QgPSBkZWxlZ2F0ZS5pdGVyYXRvcltjb250ZXh0Lm1ldGhvZF07XG4gICAgaWYgKG1ldGhvZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBBIC50aHJvdyBvciAucmV0dXJuIHdoZW4gdGhlIGRlbGVnYXRlIGl0ZXJhdG9yIGhhcyBubyAudGhyb3dcbiAgICAgIC8vIG1ldGhvZCBhbHdheXMgdGVybWluYXRlcyB0aGUgeWllbGQqIGxvb3AuXG4gICAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDtcblxuICAgICAgaWYgKGNvbnRleHQubWV0aG9kID09PSBcInRocm93XCIpIHtcbiAgICAgICAgaWYgKGRlbGVnYXRlLml0ZXJhdG9yLnJldHVybikge1xuICAgICAgICAgIC8vIElmIHRoZSBkZWxlZ2F0ZSBpdGVyYXRvciBoYXMgYSByZXR1cm4gbWV0aG9kLCBnaXZlIGl0IGFcbiAgICAgICAgICAvLyBjaGFuY2UgdG8gY2xlYW4gdXAuXG4gICAgICAgICAgY29udGV4dC5tZXRob2QgPSBcInJldHVyblwiO1xuICAgICAgICAgIGNvbnRleHQuYXJnID0gdW5kZWZpbmVkO1xuICAgICAgICAgIG1heWJlSW52b2tlRGVsZWdhdGUoZGVsZWdhdGUsIGNvbnRleHQpO1xuXG4gICAgICAgICAgaWYgKGNvbnRleHQubWV0aG9kID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICAgIC8vIElmIG1heWJlSW52b2tlRGVsZWdhdGUoY29udGV4dCkgY2hhbmdlZCBjb250ZXh0Lm1ldGhvZCBmcm9tXG4gICAgICAgICAgICAvLyBcInJldHVyblwiIHRvIFwidGhyb3dcIiwgbGV0IHRoYXQgb3ZlcnJpZGUgdGhlIFR5cGVFcnJvciBiZWxvdy5cbiAgICAgICAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiO1xuICAgICAgICBjb250ZXh0LmFyZyA9IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgXCJUaGUgaXRlcmF0b3IgZG9lcyBub3QgcHJvdmlkZSBhICd0aHJvdycgbWV0aG9kXCIpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICB9XG5cbiAgICB2YXIgcmVjb3JkID0gdHJ5Q2F0Y2gobWV0aG9kLCBkZWxlZ2F0ZS5pdGVyYXRvciwgY29udGV4dC5hcmcpO1xuXG4gICAgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgIGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiO1xuICAgICAgY29udGV4dC5hcmcgPSByZWNvcmQuYXJnO1xuICAgICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7XG4gICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICB9XG5cbiAgICB2YXIgaW5mbyA9IHJlY29yZC5hcmc7XG5cbiAgICBpZiAoISBpbmZvKSB7XG4gICAgICBjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIjtcbiAgICAgIGNvbnRleHQuYXJnID0gbmV3IFR5cGVFcnJvcihcIml0ZXJhdG9yIHJlc3VsdCBpcyBub3QgYW4gb2JqZWN0XCIpO1xuICAgICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7XG4gICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICB9XG5cbiAgICBpZiAoaW5mby5kb25lKSB7XG4gICAgICAvLyBBc3NpZ24gdGhlIHJlc3VsdCBvZiB0aGUgZmluaXNoZWQgZGVsZWdhdGUgdG8gdGhlIHRlbXBvcmFyeVxuICAgICAgLy8gdmFyaWFibGUgc3BlY2lmaWVkIGJ5IGRlbGVnYXRlLnJlc3VsdE5hbWUgKHNlZSBkZWxlZ2F0ZVlpZWxkKS5cbiAgICAgIGNvbnRleHRbZGVsZWdhdGUucmVzdWx0TmFtZV0gPSBpbmZvLnZhbHVlO1xuXG4gICAgICAvLyBSZXN1bWUgZXhlY3V0aW9uIGF0IHRoZSBkZXNpcmVkIGxvY2F0aW9uIChzZWUgZGVsZWdhdGVZaWVsZCkuXG4gICAgICBjb250ZXh0Lm5leHQgPSBkZWxlZ2F0ZS5uZXh0TG9jO1xuXG4gICAgICAvLyBJZiBjb250ZXh0Lm1ldGhvZCB3YXMgXCJ0aHJvd1wiIGJ1dCB0aGUgZGVsZWdhdGUgaGFuZGxlZCB0aGVcbiAgICAgIC8vIGV4Y2VwdGlvbiwgbGV0IHRoZSBvdXRlciBnZW5lcmF0b3IgcHJvY2VlZCBub3JtYWxseS4gSWZcbiAgICAgIC8vIGNvbnRleHQubWV0aG9kIHdhcyBcIm5leHRcIiwgZm9yZ2V0IGNvbnRleHQuYXJnIHNpbmNlIGl0IGhhcyBiZWVuXG4gICAgICAvLyBcImNvbnN1bWVkXCIgYnkgdGhlIGRlbGVnYXRlIGl0ZXJhdG9yLiBJZiBjb250ZXh0Lm1ldGhvZCB3YXNcbiAgICAgIC8vIFwicmV0dXJuXCIsIGFsbG93IHRoZSBvcmlnaW5hbCAucmV0dXJuIGNhbGwgdG8gY29udGludWUgaW4gdGhlXG4gICAgICAvLyBvdXRlciBnZW5lcmF0b3IuXG4gICAgICBpZiAoY29udGV4dC5tZXRob2QgIT09IFwicmV0dXJuXCIpIHtcbiAgICAgICAgY29udGV4dC5tZXRob2QgPSBcIm5leHRcIjtcbiAgICAgICAgY29udGV4dC5hcmcgPSB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gUmUteWllbGQgdGhlIHJlc3VsdCByZXR1cm5lZCBieSB0aGUgZGVsZWdhdGUgbWV0aG9kLlxuICAgICAgcmV0dXJuIGluZm87XG4gICAgfVxuXG4gICAgLy8gVGhlIGRlbGVnYXRlIGl0ZXJhdG9yIGlzIGZpbmlzaGVkLCBzbyBmb3JnZXQgaXQgYW5kIGNvbnRpbnVlIHdpdGhcbiAgICAvLyB0aGUgb3V0ZXIgZ2VuZXJhdG9yLlxuICAgIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsO1xuICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICB9XG5cbiAgLy8gRGVmaW5lIEdlbmVyYXRvci5wcm90b3R5cGUue25leHQsdGhyb3cscmV0dXJufSBpbiB0ZXJtcyBvZiB0aGVcbiAgLy8gdW5pZmllZCAuX2ludm9rZSBoZWxwZXIgbWV0aG9kLlxuICBkZWZpbmVJdGVyYXRvck1ldGhvZHMoR3ApO1xuXG4gIEdwW3RvU3RyaW5nVGFnU3ltYm9sXSA9IFwiR2VuZXJhdG9yXCI7XG5cbiAgLy8gQSBHZW5lcmF0b3Igc2hvdWxkIGFsd2F5cyByZXR1cm4gaXRzZWxmIGFzIHRoZSBpdGVyYXRvciBvYmplY3Qgd2hlbiB0aGVcbiAgLy8gQEBpdGVyYXRvciBmdW5jdGlvbiBpcyBjYWxsZWQgb24gaXQuIFNvbWUgYnJvd3NlcnMnIGltcGxlbWVudGF0aW9ucyBvZiB0aGVcbiAgLy8gaXRlcmF0b3IgcHJvdG90eXBlIGNoYWluIGluY29ycmVjdGx5IGltcGxlbWVudCB0aGlzLCBjYXVzaW5nIHRoZSBHZW5lcmF0b3JcbiAgLy8gb2JqZWN0IHRvIG5vdCBiZSByZXR1cm5lZCBmcm9tIHRoaXMgY2FsbC4gVGhpcyBlbnN1cmVzIHRoYXQgZG9lc24ndCBoYXBwZW4uXG4gIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVnZW5lcmF0b3IvaXNzdWVzLzI3NCBmb3IgbW9yZSBkZXRhaWxzLlxuICBHcFtpdGVyYXRvclN5bWJvbF0gPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBHcC50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBcIltvYmplY3QgR2VuZXJhdG9yXVwiO1xuICB9O1xuXG4gIGZ1bmN0aW9uIHB1c2hUcnlFbnRyeShsb2NzKSB7XG4gICAgdmFyIGVudHJ5ID0geyB0cnlMb2M6IGxvY3NbMF0gfTtcblxuICAgIGlmICgxIGluIGxvY3MpIHtcbiAgICAgIGVudHJ5LmNhdGNoTG9jID0gbG9jc1sxXTtcbiAgICB9XG5cbiAgICBpZiAoMiBpbiBsb2NzKSB7XG4gICAgICBlbnRyeS5maW5hbGx5TG9jID0gbG9jc1syXTtcbiAgICAgIGVudHJ5LmFmdGVyTG9jID0gbG9jc1szXTtcbiAgICB9XG5cbiAgICB0aGlzLnRyeUVudHJpZXMucHVzaChlbnRyeSk7XG4gIH1cblxuICBmdW5jdGlvbiByZXNldFRyeUVudHJ5KGVudHJ5KSB7XG4gICAgdmFyIHJlY29yZCA9IGVudHJ5LmNvbXBsZXRpb24gfHwge307XG4gICAgcmVjb3JkLnR5cGUgPSBcIm5vcm1hbFwiO1xuICAgIGRlbGV0ZSByZWNvcmQuYXJnO1xuICAgIGVudHJ5LmNvbXBsZXRpb24gPSByZWNvcmQ7XG4gIH1cblxuICBmdW5jdGlvbiBDb250ZXh0KHRyeUxvY3NMaXN0KSB7XG4gICAgLy8gVGhlIHJvb3QgZW50cnkgb2JqZWN0IChlZmZlY3RpdmVseSBhIHRyeSBzdGF0ZW1lbnQgd2l0aG91dCBhIGNhdGNoXG4gICAgLy8gb3IgYSBmaW5hbGx5IGJsb2NrKSBnaXZlcyB1cyBhIHBsYWNlIHRvIHN0b3JlIHZhbHVlcyB0aHJvd24gZnJvbVxuICAgIC8vIGxvY2F0aW9ucyB3aGVyZSB0aGVyZSBpcyBubyBlbmNsb3NpbmcgdHJ5IHN0YXRlbWVudC5cbiAgICB0aGlzLnRyeUVudHJpZXMgPSBbeyB0cnlMb2M6IFwicm9vdFwiIH1dO1xuICAgIHRyeUxvY3NMaXN0LmZvckVhY2gocHVzaFRyeUVudHJ5LCB0aGlzKTtcbiAgICB0aGlzLnJlc2V0KHRydWUpO1xuICB9XG5cbiAgcnVudGltZS5rZXlzID0gZnVuY3Rpb24ob2JqZWN0KSB7XG4gICAgdmFyIGtleXMgPSBbXTtcbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqZWN0KSB7XG4gICAgICBrZXlzLnB1c2goa2V5KTtcbiAgICB9XG4gICAga2V5cy5yZXZlcnNlKCk7XG5cbiAgICAvLyBSYXRoZXIgdGhhbiByZXR1cm5pbmcgYW4gb2JqZWN0IHdpdGggYSBuZXh0IG1ldGhvZCwgd2Uga2VlcFxuICAgIC8vIHRoaW5ncyBzaW1wbGUgYW5kIHJldHVybiB0aGUgbmV4dCBmdW5jdGlvbiBpdHNlbGYuXG4gICAgcmV0dXJuIGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICB3aGlsZSAoa2V5cy5sZW5ndGgpIHtcbiAgICAgICAgdmFyIGtleSA9IGtleXMucG9wKCk7XG4gICAgICAgIGlmIChrZXkgaW4gb2JqZWN0KSB7XG4gICAgICAgICAgbmV4dC52YWx1ZSA9IGtleTtcbiAgICAgICAgICBuZXh0LmRvbmUgPSBmYWxzZTtcbiAgICAgICAgICByZXR1cm4gbmV4dDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBUbyBhdm9pZCBjcmVhdGluZyBhbiBhZGRpdGlvbmFsIG9iamVjdCwgd2UganVzdCBoYW5nIHRoZSAudmFsdWVcbiAgICAgIC8vIGFuZCAuZG9uZSBwcm9wZXJ0aWVzIG9mZiB0aGUgbmV4dCBmdW5jdGlvbiBvYmplY3QgaXRzZWxmLiBUaGlzXG4gICAgICAvLyBhbHNvIGVuc3VyZXMgdGhhdCB0aGUgbWluaWZpZXIgd2lsbCBub3QgYW5vbnltaXplIHRoZSBmdW5jdGlvbi5cbiAgICAgIG5leHQuZG9uZSA9IHRydWU7XG4gICAgICByZXR1cm4gbmV4dDtcbiAgICB9O1xuICB9O1xuXG4gIGZ1bmN0aW9uIHZhbHVlcyhpdGVyYWJsZSkge1xuICAgIGlmIChpdGVyYWJsZSkge1xuICAgICAgdmFyIGl0ZXJhdG9yTWV0aG9kID0gaXRlcmFibGVbaXRlcmF0b3JTeW1ib2xdO1xuICAgICAgaWYgKGl0ZXJhdG9yTWV0aG9kKSB7XG4gICAgICAgIHJldHVybiBpdGVyYXRvck1ldGhvZC5jYWxsKGl0ZXJhYmxlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBpdGVyYWJsZS5uZXh0ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgcmV0dXJuIGl0ZXJhYmxlO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWlzTmFOKGl0ZXJhYmxlLmxlbmd0aCkpIHtcbiAgICAgICAgdmFyIGkgPSAtMSwgbmV4dCA9IGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICAgICAgd2hpbGUgKCsraSA8IGl0ZXJhYmxlLmxlbmd0aCkge1xuICAgICAgICAgICAgaWYgKGhhc093bi5jYWxsKGl0ZXJhYmxlLCBpKSkge1xuICAgICAgICAgICAgICBuZXh0LnZhbHVlID0gaXRlcmFibGVbaV07XG4gICAgICAgICAgICAgIG5leHQuZG9uZSA9IGZhbHNlO1xuICAgICAgICAgICAgICByZXR1cm4gbmV4dDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBuZXh0LnZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgICAgIG5leHQuZG9uZSA9IHRydWU7XG5cbiAgICAgICAgICByZXR1cm4gbmV4dDtcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gbmV4dC5uZXh0ID0gbmV4dDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBSZXR1cm4gYW4gaXRlcmF0b3Igd2l0aCBubyB2YWx1ZXMuXG4gICAgcmV0dXJuIHsgbmV4dDogZG9uZVJlc3VsdCB9O1xuICB9XG4gIHJ1bnRpbWUudmFsdWVzID0gdmFsdWVzO1xuXG4gIGZ1bmN0aW9uIGRvbmVSZXN1bHQoKSB7XG4gICAgcmV0dXJuIHsgdmFsdWU6IHVuZGVmaW5lZCwgZG9uZTogdHJ1ZSB9O1xuICB9XG5cbiAgQ29udGV4dC5wcm90b3R5cGUgPSB7XG4gICAgY29uc3RydWN0b3I6IENvbnRleHQsXG5cbiAgICByZXNldDogZnVuY3Rpb24oc2tpcFRlbXBSZXNldCkge1xuICAgICAgdGhpcy5wcmV2ID0gMDtcbiAgICAgIHRoaXMubmV4dCA9IDA7XG4gICAgICAvLyBSZXNldHRpbmcgY29udGV4dC5fc2VudCBmb3IgbGVnYWN5IHN1cHBvcnQgb2YgQmFiZWwnc1xuICAgICAgLy8gZnVuY3Rpb24uc2VudCBpbXBsZW1lbnRhdGlvbi5cbiAgICAgIHRoaXMuc2VudCA9IHRoaXMuX3NlbnQgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLmRvbmUgPSBmYWxzZTtcbiAgICAgIHRoaXMuZGVsZWdhdGUgPSBudWxsO1xuXG4gICAgICB0aGlzLm1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgdGhpcy5hcmcgPSB1bmRlZmluZWQ7XG5cbiAgICAgIHRoaXMudHJ5RW50cmllcy5mb3JFYWNoKHJlc2V0VHJ5RW50cnkpO1xuXG4gICAgICBpZiAoIXNraXBUZW1wUmVzZXQpIHtcbiAgICAgICAgZm9yICh2YXIgbmFtZSBpbiB0aGlzKSB7XG4gICAgICAgICAgLy8gTm90IHN1cmUgYWJvdXQgdGhlIG9wdGltYWwgb3JkZXIgb2YgdGhlc2UgY29uZGl0aW9uczpcbiAgICAgICAgICBpZiAobmFtZS5jaGFyQXQoMCkgPT09IFwidFwiICYmXG4gICAgICAgICAgICAgIGhhc093bi5jYWxsKHRoaXMsIG5hbWUpICYmXG4gICAgICAgICAgICAgICFpc05hTigrbmFtZS5zbGljZSgxKSkpIHtcbiAgICAgICAgICAgIHRoaXNbbmFtZV0gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIHN0b3A6IGZ1bmN0aW9uKCkge1xuICAgICAgdGhpcy5kb25lID0gdHJ1ZTtcblxuICAgICAgdmFyIHJvb3RFbnRyeSA9IHRoaXMudHJ5RW50cmllc1swXTtcbiAgICAgIHZhciByb290UmVjb3JkID0gcm9vdEVudHJ5LmNvbXBsZXRpb247XG4gICAgICBpZiAocm9vdFJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgdGhyb3cgcm9vdFJlY29yZC5hcmc7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLnJ2YWw7XG4gICAgfSxcblxuICAgIGRpc3BhdGNoRXhjZXB0aW9uOiBmdW5jdGlvbihleGNlcHRpb24pIHtcbiAgICAgIGlmICh0aGlzLmRvbmUpIHtcbiAgICAgICAgdGhyb3cgZXhjZXB0aW9uO1xuICAgICAgfVxuXG4gICAgICB2YXIgY29udGV4dCA9IHRoaXM7XG4gICAgICBmdW5jdGlvbiBoYW5kbGUobG9jLCBjYXVnaHQpIHtcbiAgICAgICAgcmVjb3JkLnR5cGUgPSBcInRocm93XCI7XG4gICAgICAgIHJlY29yZC5hcmcgPSBleGNlcHRpb247XG4gICAgICAgIGNvbnRleHQubmV4dCA9IGxvYztcblxuICAgICAgICBpZiAoY2F1Z2h0KSB7XG4gICAgICAgICAgLy8gSWYgdGhlIGRpc3BhdGNoZWQgZXhjZXB0aW9uIHdhcyBjYXVnaHQgYnkgYSBjYXRjaCBibG9jayxcbiAgICAgICAgICAvLyB0aGVuIGxldCB0aGF0IGNhdGNoIGJsb2NrIGhhbmRsZSB0aGUgZXhjZXB0aW9uIG5vcm1hbGx5LlxuICAgICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJuZXh0XCI7XG4gICAgICAgICAgY29udGV4dC5hcmcgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gISEgY2F1Z2h0O1xuICAgICAgfVxuXG4gICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcbiAgICAgICAgdmFyIHJlY29yZCA9IGVudHJ5LmNvbXBsZXRpb247XG5cbiAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA9PT0gXCJyb290XCIpIHtcbiAgICAgICAgICAvLyBFeGNlcHRpb24gdGhyb3duIG91dHNpZGUgb2YgYW55IHRyeSBibG9jayB0aGF0IGNvdWxkIGhhbmRsZVxuICAgICAgICAgIC8vIGl0LCBzbyBzZXQgdGhlIGNvbXBsZXRpb24gdmFsdWUgb2YgdGhlIGVudGlyZSBmdW5jdGlvbiB0b1xuICAgICAgICAgIC8vIHRocm93IHRoZSBleGNlcHRpb24uXG4gICAgICAgICAgcmV0dXJuIGhhbmRsZShcImVuZFwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlbnRyeS50cnlMb2MgPD0gdGhpcy5wcmV2KSB7XG4gICAgICAgICAgdmFyIGhhc0NhdGNoID0gaGFzT3duLmNhbGwoZW50cnksIFwiY2F0Y2hMb2NcIik7XG4gICAgICAgICAgdmFyIGhhc0ZpbmFsbHkgPSBoYXNPd24uY2FsbChlbnRyeSwgXCJmaW5hbGx5TG9jXCIpO1xuXG4gICAgICAgICAgaWYgKGhhc0NhdGNoICYmIGhhc0ZpbmFsbHkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBlbnRyeS5jYXRjaExvYykge1xuICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlKGVudHJ5LmNhdGNoTG9jLCB0cnVlKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5wcmV2IDwgZW50cnkuZmluYWxseUxvYykge1xuICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlKGVudHJ5LmZpbmFsbHlMb2MpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgfSBlbHNlIGlmIChoYXNDYXRjaCkge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGVudHJ5LmNhdGNoTG9jKSB7XG4gICAgICAgICAgICAgIHJldHVybiBoYW5kbGUoZW50cnkuY2F0Y2hMb2MsIHRydWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgfSBlbHNlIGlmIChoYXNGaW5hbGx5KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgZW50cnkuZmluYWxseUxvYykge1xuICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlKGVudHJ5LmZpbmFsbHlMb2MpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInRyeSBzdGF0ZW1lbnQgd2l0aG91dCBjYXRjaCBvciBmaW5hbGx5XCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhYnJ1cHQ6IGZ1bmN0aW9uKHR5cGUsIGFyZykge1xuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIGlmIChlbnRyeS50cnlMb2MgPD0gdGhpcy5wcmV2ICYmXG4gICAgICAgICAgICBoYXNPd24uY2FsbChlbnRyeSwgXCJmaW5hbGx5TG9jXCIpICYmXG4gICAgICAgICAgICB0aGlzLnByZXYgPCBlbnRyeS5maW5hbGx5TG9jKSB7XG4gICAgICAgICAgdmFyIGZpbmFsbHlFbnRyeSA9IGVudHJ5O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChmaW5hbGx5RW50cnkgJiZcbiAgICAgICAgICAodHlwZSA9PT0gXCJicmVha1wiIHx8XG4gICAgICAgICAgIHR5cGUgPT09IFwiY29udGludWVcIikgJiZcbiAgICAgICAgICBmaW5hbGx5RW50cnkudHJ5TG9jIDw9IGFyZyAmJlxuICAgICAgICAgIGFyZyA8PSBmaW5hbGx5RW50cnkuZmluYWxseUxvYykge1xuICAgICAgICAvLyBJZ25vcmUgdGhlIGZpbmFsbHkgZW50cnkgaWYgY29udHJvbCBpcyBub3QganVtcGluZyB0byBhXG4gICAgICAgIC8vIGxvY2F0aW9uIG91dHNpZGUgdGhlIHRyeS9jYXRjaCBibG9jay5cbiAgICAgICAgZmluYWxseUVudHJ5ID0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgdmFyIHJlY29yZCA9IGZpbmFsbHlFbnRyeSA/IGZpbmFsbHlFbnRyeS5jb21wbGV0aW9uIDoge307XG4gICAgICByZWNvcmQudHlwZSA9IHR5cGU7XG4gICAgICByZWNvcmQuYXJnID0gYXJnO1xuXG4gICAgICBpZiAoZmluYWxseUVudHJ5KSB7XG4gICAgICAgIHRoaXMubWV0aG9kID0gXCJuZXh0XCI7XG4gICAgICAgIHRoaXMubmV4dCA9IGZpbmFsbHlFbnRyeS5maW5hbGx5TG9jO1xuICAgICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuY29tcGxldGUocmVjb3JkKTtcbiAgICB9LFxuXG4gICAgY29tcGxldGU6IGZ1bmN0aW9uKHJlY29yZCwgYWZ0ZXJMb2MpIHtcbiAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIHRocm93IHJlY29yZC5hcmc7XG4gICAgICB9XG5cbiAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJicmVha1wiIHx8XG4gICAgICAgICAgcmVjb3JkLnR5cGUgPT09IFwiY29udGludWVcIikge1xuICAgICAgICB0aGlzLm5leHQgPSByZWNvcmQuYXJnO1xuICAgICAgfSBlbHNlIGlmIChyZWNvcmQudHlwZSA9PT0gXCJyZXR1cm5cIikge1xuICAgICAgICB0aGlzLnJ2YWwgPSB0aGlzLmFyZyA9IHJlY29yZC5hcmc7XG4gICAgICAgIHRoaXMubWV0aG9kID0gXCJyZXR1cm5cIjtcbiAgICAgICAgdGhpcy5uZXh0ID0gXCJlbmRcIjtcbiAgICAgIH0gZWxzZSBpZiAocmVjb3JkLnR5cGUgPT09IFwibm9ybWFsXCIgJiYgYWZ0ZXJMb2MpIHtcbiAgICAgICAgdGhpcy5uZXh0ID0gYWZ0ZXJMb2M7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH0sXG5cbiAgICBmaW5pc2g6IGZ1bmN0aW9uKGZpbmFsbHlMb2MpIHtcbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICBpZiAoZW50cnkuZmluYWxseUxvYyA9PT0gZmluYWxseUxvYykge1xuICAgICAgICAgIHRoaXMuY29tcGxldGUoZW50cnkuY29tcGxldGlvbiwgZW50cnkuYWZ0ZXJMb2MpO1xuICAgICAgICAgIHJlc2V0VHJ5RW50cnkoZW50cnkpO1xuICAgICAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIFwiY2F0Y2hcIjogZnVuY3Rpb24odHJ5TG9jKSB7XG4gICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcbiAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA9PT0gdHJ5TG9jKSB7XG4gICAgICAgICAgdmFyIHJlY29yZCA9IGVudHJ5LmNvbXBsZXRpb247XG4gICAgICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICAgIHZhciB0aHJvd24gPSByZWNvcmQuYXJnO1xuICAgICAgICAgICAgcmVzZXRUcnlFbnRyeShlbnRyeSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0aHJvd247XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gVGhlIGNvbnRleHQuY2F0Y2ggbWV0aG9kIG11c3Qgb25seSBiZSBjYWxsZWQgd2l0aCBhIGxvY2F0aW9uXG4gICAgICAvLyBhcmd1bWVudCB0aGF0IGNvcnJlc3BvbmRzIHRvIGEga25vd24gY2F0Y2ggYmxvY2suXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJpbGxlZ2FsIGNhdGNoIGF0dGVtcHRcIik7XG4gICAgfSxcblxuICAgIGRlbGVnYXRlWWllbGQ6IGZ1bmN0aW9uKGl0ZXJhYmxlLCByZXN1bHROYW1lLCBuZXh0TG9jKSB7XG4gICAgICB0aGlzLmRlbGVnYXRlID0ge1xuICAgICAgICBpdGVyYXRvcjogdmFsdWVzKGl0ZXJhYmxlKSxcbiAgICAgICAgcmVzdWx0TmFtZTogcmVzdWx0TmFtZSxcbiAgICAgICAgbmV4dExvYzogbmV4dExvY1xuICAgICAgfTtcblxuICAgICAgaWYgKHRoaXMubWV0aG9kID09PSBcIm5leHRcIikge1xuICAgICAgICAvLyBEZWxpYmVyYXRlbHkgZm9yZ2V0IHRoZSBsYXN0IHNlbnQgdmFsdWUgc28gdGhhdCB3ZSBkb24ndFxuICAgICAgICAvLyBhY2NpZGVudGFsbHkgcGFzcyBpdCBvbiB0byB0aGUgZGVsZWdhdGUuXG4gICAgICAgIHRoaXMuYXJnID0gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICB9XG4gIH07XG59KShcbiAgLy8gQW1vbmcgdGhlIHZhcmlvdXMgdHJpY2tzIGZvciBvYnRhaW5pbmcgYSByZWZlcmVuY2UgdG8gdGhlIGdsb2JhbFxuICAvLyBvYmplY3QsIHRoaXMgc2VlbXMgdG8gYmUgdGhlIG1vc3QgcmVsaWFibGUgdGVjaG5pcXVlIHRoYXQgZG9lcyBub3RcbiAgLy8gdXNlIGluZGlyZWN0IGV2YWwgKHdoaWNoIHZpb2xhdGVzIENvbnRlbnQgU2VjdXJpdHkgUG9saWN5KS5cbiAgdHlwZW9mIGdsb2JhbCA9PT0gXCJvYmplY3RcIiA/IGdsb2JhbCA6XG4gIHR5cGVvZiB3aW5kb3cgPT09IFwib2JqZWN0XCIgPyB3aW5kb3cgOlxuICB0eXBlb2Ygc2VsZiA9PT0gXCJvYmplY3RcIiA/IHNlbGYgOiB0aGlzXG4pO1xuIiwiJ3VzZSBzdHJpY3QnXG5cbmV4cG9ydHMuYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGhcbmV4cG9ydHMudG9CeXRlQXJyYXkgPSB0b0J5dGVBcnJheVxuZXhwb3J0cy5mcm9tQnl0ZUFycmF5ID0gZnJvbUJ5dGVBcnJheVxuXG52YXIgbG9va3VwID0gW11cbnZhciByZXZMb29rdXAgPSBbXVxudmFyIEFyciA9IHR5cGVvZiBVaW50OEFycmF5ICE9PSAndW5kZWZpbmVkJyA/IFVpbnQ4QXJyYXkgOiBBcnJheVxuXG52YXIgY29kZSA9ICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvJ1xuZm9yICh2YXIgaSA9IDAsIGxlbiA9IGNvZGUubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHtcbiAgbG9va3VwW2ldID0gY29kZVtpXVxuICByZXZMb29rdXBbY29kZS5jaGFyQ29kZUF0KGkpXSA9IGlcbn1cblxuLy8gU3VwcG9ydCBkZWNvZGluZyBVUkwtc2FmZSBiYXNlNjQgc3RyaW5ncywgYXMgTm9kZS5qcyBkb2VzLlxuLy8gU2VlOiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9CYXNlNjQjVVJMX2FwcGxpY2F0aW9uc1xucmV2TG9va3VwWyctJy5jaGFyQ29kZUF0KDApXSA9IDYyXG5yZXZMb29rdXBbJ18nLmNoYXJDb2RlQXQoMCldID0gNjNcblxuZnVuY3Rpb24gZ2V0TGVucyAoYjY0KSB7XG4gIHZhciBsZW4gPSBiNjQubGVuZ3RoXG5cbiAgaWYgKGxlbiAlIDQgPiAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHN0cmluZy4gTGVuZ3RoIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0JylcbiAgfVxuXG4gIC8vIFRyaW0gb2ZmIGV4dHJhIGJ5dGVzIGFmdGVyIHBsYWNlaG9sZGVyIGJ5dGVzIGFyZSBmb3VuZFxuICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9iZWF0Z2FtbWl0L2Jhc2U2NC1qcy9pc3N1ZXMvNDJcbiAgdmFyIHZhbGlkTGVuID0gYjY0LmluZGV4T2YoJz0nKVxuICBpZiAodmFsaWRMZW4gPT09IC0xKSB2YWxpZExlbiA9IGxlblxuXG4gIHZhciBwbGFjZUhvbGRlcnNMZW4gPSB2YWxpZExlbiA9PT0gbGVuXG4gICAgPyAwXG4gICAgOiA0IC0gKHZhbGlkTGVuICUgNClcblxuICByZXR1cm4gW3ZhbGlkTGVuLCBwbGFjZUhvbGRlcnNMZW5dXG59XG5cbi8vIGJhc2U2NCBpcyA0LzMgKyB1cCB0byB0d28gY2hhcmFjdGVycyBvZiB0aGUgb3JpZ2luYWwgZGF0YVxuZnVuY3Rpb24gYnl0ZUxlbmd0aCAoYjY0KSB7XG4gIHZhciBsZW5zID0gZ2V0TGVucyhiNjQpXG4gIHZhciB2YWxpZExlbiA9IGxlbnNbMF1cbiAgdmFyIHBsYWNlSG9sZGVyc0xlbiA9IGxlbnNbMV1cbiAgcmV0dXJuICgodmFsaWRMZW4gKyBwbGFjZUhvbGRlcnNMZW4pICogMyAvIDQpIC0gcGxhY2VIb2xkZXJzTGVuXG59XG5cbmZ1bmN0aW9uIF9ieXRlTGVuZ3RoIChiNjQsIHZhbGlkTGVuLCBwbGFjZUhvbGRlcnNMZW4pIHtcbiAgcmV0dXJuICgodmFsaWRMZW4gKyBwbGFjZUhvbGRlcnNMZW4pICogMyAvIDQpIC0gcGxhY2VIb2xkZXJzTGVuXG59XG5cbmZ1bmN0aW9uIHRvQnl0ZUFycmF5IChiNjQpIHtcbiAgdmFyIHRtcFxuICB2YXIgbGVucyA9IGdldExlbnMoYjY0KVxuICB2YXIgdmFsaWRMZW4gPSBsZW5zWzBdXG4gIHZhciBwbGFjZUhvbGRlcnNMZW4gPSBsZW5zWzFdXG5cbiAgdmFyIGFyciA9IG5ldyBBcnIoX2J5dGVMZW5ndGgoYjY0LCB2YWxpZExlbiwgcGxhY2VIb2xkZXJzTGVuKSlcblxuICB2YXIgY3VyQnl0ZSA9IDBcblxuICAvLyBpZiB0aGVyZSBhcmUgcGxhY2Vob2xkZXJzLCBvbmx5IGdldCB1cCB0byB0aGUgbGFzdCBjb21wbGV0ZSA0IGNoYXJzXG4gIHZhciBsZW4gPSBwbGFjZUhvbGRlcnNMZW4gPiAwXG4gICAgPyB2YWxpZExlbiAtIDRcbiAgICA6IHZhbGlkTGVuXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkgKz0gNCkge1xuICAgIHRtcCA9XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkpXSA8PCAxOCkgfFxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMSldIDw8IDEyKSB8XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAyKV0gPDwgNikgfFxuICAgICAgcmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAzKV1cbiAgICBhcnJbY3VyQnl0ZSsrXSA9ICh0bXAgPj4gMTYpICYgMHhGRlxuICAgIGFycltjdXJCeXRlKytdID0gKHRtcCA+PiA4KSAmIDB4RkZcbiAgICBhcnJbY3VyQnl0ZSsrXSA9IHRtcCAmIDB4RkZcbiAgfVxuXG4gIGlmIChwbGFjZUhvbGRlcnNMZW4gPT09IDIpIHtcbiAgICB0bXAgPVxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpKV0gPDwgMikgfFxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMSldID4+IDQpXG4gICAgYXJyW2N1ckJ5dGUrK10gPSB0bXAgJiAweEZGXG4gIH1cblxuICBpZiAocGxhY2VIb2xkZXJzTGVuID09PSAxKSB7XG4gICAgdG1wID1cbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSldIDw8IDEwKSB8XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAxKV0gPDwgNCkgfFxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMildID4+IDIpXG4gICAgYXJyW2N1ckJ5dGUrK10gPSAodG1wID4+IDgpICYgMHhGRlxuICAgIGFycltjdXJCeXRlKytdID0gdG1wICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIGFyclxufVxuXG5mdW5jdGlvbiB0cmlwbGV0VG9CYXNlNjQgKG51bSkge1xuICByZXR1cm4gbG9va3VwW251bSA+PiAxOCAmIDB4M0ZdICtcbiAgICBsb29rdXBbbnVtID4+IDEyICYgMHgzRl0gK1xuICAgIGxvb2t1cFtudW0gPj4gNiAmIDB4M0ZdICtcbiAgICBsb29rdXBbbnVtICYgMHgzRl1cbn1cblxuZnVuY3Rpb24gZW5jb2RlQ2h1bmsgKHVpbnQ4LCBzdGFydCwgZW5kKSB7XG4gIHZhciB0bXBcbiAgdmFyIG91dHB1dCA9IFtdXG4gIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgaSArPSAzKSB7XG4gICAgdG1wID1cbiAgICAgICgodWludDhbaV0gPDwgMTYpICYgMHhGRjAwMDApICtcbiAgICAgICgodWludDhbaSArIDFdIDw8IDgpICYgMHhGRjAwKSArXG4gICAgICAodWludDhbaSArIDJdICYgMHhGRilcbiAgICBvdXRwdXQucHVzaCh0cmlwbGV0VG9CYXNlNjQodG1wKSlcbiAgfVxuICByZXR1cm4gb3V0cHV0LmpvaW4oJycpXG59XG5cbmZ1bmN0aW9uIGZyb21CeXRlQXJyYXkgKHVpbnQ4KSB7XG4gIHZhciB0bXBcbiAgdmFyIGxlbiA9IHVpbnQ4Lmxlbmd0aFxuICB2YXIgZXh0cmFCeXRlcyA9IGxlbiAlIDMgLy8gaWYgd2UgaGF2ZSAxIGJ5dGUgbGVmdCwgcGFkIDIgYnl0ZXNcbiAgdmFyIHBhcnRzID0gW11cbiAgdmFyIG1heENodW5rTGVuZ3RoID0gMTYzODMgLy8gbXVzdCBiZSBtdWx0aXBsZSBvZiAzXG5cbiAgLy8gZ28gdGhyb3VnaCB0aGUgYXJyYXkgZXZlcnkgdGhyZWUgYnl0ZXMsIHdlJ2xsIGRlYWwgd2l0aCB0cmFpbGluZyBzdHVmZiBsYXRlclxuICBmb3IgKHZhciBpID0gMCwgbGVuMiA9IGxlbiAtIGV4dHJhQnl0ZXM7IGkgPCBsZW4yOyBpICs9IG1heENodW5rTGVuZ3RoKSB7XG4gICAgcGFydHMucHVzaChlbmNvZGVDaHVuayhcbiAgICAgIHVpbnQ4LCBpLCAoaSArIG1heENodW5rTGVuZ3RoKSA+IGxlbjIgPyBsZW4yIDogKGkgKyBtYXhDaHVua0xlbmd0aClcbiAgICApKVxuICB9XG5cbiAgLy8gcGFkIHRoZSBlbmQgd2l0aCB6ZXJvcywgYnV0IG1ha2Ugc3VyZSB0byBub3QgZm9yZ2V0IHRoZSBleHRyYSBieXRlc1xuICBpZiAoZXh0cmFCeXRlcyA9PT0gMSkge1xuICAgIHRtcCA9IHVpbnQ4W2xlbiAtIDFdXG4gICAgcGFydHMucHVzaChcbiAgICAgIGxvb2t1cFt0bXAgPj4gMl0gK1xuICAgICAgbG9va3VwWyh0bXAgPDwgNCkgJiAweDNGXSArXG4gICAgICAnPT0nXG4gICAgKVxuICB9IGVsc2UgaWYgKGV4dHJhQnl0ZXMgPT09IDIpIHtcbiAgICB0bXAgPSAodWludDhbbGVuIC0gMl0gPDwgOCkgKyB1aW50OFtsZW4gLSAxXVxuICAgIHBhcnRzLnB1c2goXG4gICAgICBsb29rdXBbdG1wID4+IDEwXSArXG4gICAgICBsb29rdXBbKHRtcCA+PiA0KSAmIDB4M0ZdICtcbiAgICAgIGxvb2t1cFsodG1wIDw8IDIpICYgMHgzRl0gK1xuICAgICAgJz0nXG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIHBhcnRzLmpvaW4oJycpXG59XG4iLCIvKiFcbiAqIFRoZSBidWZmZXIgbW9kdWxlIGZyb20gbm9kZS5qcywgZm9yIHRoZSBicm93c2VyLlxuICpcbiAqIEBhdXRob3IgICBGZXJvc3MgQWJvdWtoYWRpamVoIDxmZXJvc3NAZmVyb3NzLm9yZz4gPGh0dHA6Ly9mZXJvc3Mub3JnPlxuICogQGxpY2Vuc2UgIE1JVFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90byAqL1xuXG4ndXNlIHN0cmljdCdcblxudmFyIGJhc2U2NCA9IHJlcXVpcmUoJ2Jhc2U2NC1qcycpXG52YXIgaWVlZTc1NCA9IHJlcXVpcmUoJ2llZWU3NTQnKVxudmFyIGlzQXJyYXkgPSByZXF1aXJlKCdpc2FycmF5JylcblxuZXhwb3J0cy5CdWZmZXIgPSBCdWZmZXJcbmV4cG9ydHMuU2xvd0J1ZmZlciA9IFNsb3dCdWZmZXJcbmV4cG9ydHMuSU5TUEVDVF9NQVhfQllURVMgPSA1MFxuXG4vKipcbiAqIElmIGBCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVGA6XG4gKiAgID09PSB0cnVlICAgIFVzZSBVaW50OEFycmF5IGltcGxlbWVudGF0aW9uIChmYXN0ZXN0KVxuICogICA9PT0gZmFsc2UgICBVc2UgT2JqZWN0IGltcGxlbWVudGF0aW9uIChtb3N0IGNvbXBhdGlibGUsIGV2ZW4gSUU2KVxuICpcbiAqIEJyb3dzZXJzIHRoYXQgc3VwcG9ydCB0eXBlZCBhcnJheXMgYXJlIElFIDEwKywgRmlyZWZveCA0KywgQ2hyb21lIDcrLCBTYWZhcmkgNS4xKyxcbiAqIE9wZXJhIDExLjYrLCBpT1MgNC4yKy5cbiAqXG4gKiBEdWUgdG8gdmFyaW91cyBicm93c2VyIGJ1Z3MsIHNvbWV0aW1lcyB0aGUgT2JqZWN0IGltcGxlbWVudGF0aW9uIHdpbGwgYmUgdXNlZCBldmVuXG4gKiB3aGVuIHRoZSBicm93c2VyIHN1cHBvcnRzIHR5cGVkIGFycmF5cy5cbiAqXG4gKiBOb3RlOlxuICpcbiAqICAgLSBGaXJlZm94IDQtMjkgbGFja3Mgc3VwcG9ydCBmb3IgYWRkaW5nIG5ldyBwcm9wZXJ0aWVzIHRvIGBVaW50OEFycmF5YCBpbnN0YW5jZXMsXG4gKiAgICAgU2VlOiBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD02OTU0MzguXG4gKlxuICogICAtIENocm9tZSA5LTEwIGlzIG1pc3NpbmcgdGhlIGBUeXBlZEFycmF5LnByb3RvdHlwZS5zdWJhcnJheWAgZnVuY3Rpb24uXG4gKlxuICogICAtIElFMTAgaGFzIGEgYnJva2VuIGBUeXBlZEFycmF5LnByb3RvdHlwZS5zdWJhcnJheWAgZnVuY3Rpb24gd2hpY2ggcmV0dXJucyBhcnJheXMgb2ZcbiAqICAgICBpbmNvcnJlY3QgbGVuZ3RoIGluIHNvbWUgc2l0dWF0aW9ucy5cblxuICogV2UgZGV0ZWN0IHRoZXNlIGJ1Z2d5IGJyb3dzZXJzIGFuZCBzZXQgYEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUYCB0byBgZmFsc2VgIHNvIHRoZXlcbiAqIGdldCB0aGUgT2JqZWN0IGltcGxlbWVudGF0aW9uLCB3aGljaCBpcyBzbG93ZXIgYnV0IGJlaGF2ZXMgY29ycmVjdGx5LlxuICovXG5CdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCA9IGdsb2JhbC5UWVBFRF9BUlJBWV9TVVBQT1JUICE9PSB1bmRlZmluZWRcbiAgPyBnbG9iYWwuVFlQRURfQVJSQVlfU1VQUE9SVFxuICA6IHR5cGVkQXJyYXlTdXBwb3J0KClcblxuLypcbiAqIEV4cG9ydCBrTWF4TGVuZ3RoIGFmdGVyIHR5cGVkIGFycmF5IHN1cHBvcnQgaXMgZGV0ZXJtaW5lZC5cbiAqL1xuZXhwb3J0cy5rTWF4TGVuZ3RoID0ga01heExlbmd0aCgpXG5cbmZ1bmN0aW9uIHR5cGVkQXJyYXlTdXBwb3J0ICgpIHtcbiAgdHJ5IHtcbiAgICB2YXIgYXJyID0gbmV3IFVpbnQ4QXJyYXkoMSlcbiAgICBhcnIuX19wcm90b19fID0ge19fcHJvdG9fXzogVWludDhBcnJheS5wcm90b3R5cGUsIGZvbzogZnVuY3Rpb24gKCkgeyByZXR1cm4gNDIgfX1cbiAgICByZXR1cm4gYXJyLmZvbygpID09PSA0MiAmJiAvLyB0eXBlZCBhcnJheSBpbnN0YW5jZXMgY2FuIGJlIGF1Z21lbnRlZFxuICAgICAgICB0eXBlb2YgYXJyLnN1YmFycmF5ID09PSAnZnVuY3Rpb24nICYmIC8vIGNocm9tZSA5LTEwIGxhY2sgYHN1YmFycmF5YFxuICAgICAgICBhcnIuc3ViYXJyYXkoMSwgMSkuYnl0ZUxlbmd0aCA9PT0gMCAvLyBpZTEwIGhhcyBicm9rZW4gYHN1YmFycmF5YFxuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cblxuZnVuY3Rpb24ga01heExlbmd0aCAoKSB7XG4gIHJldHVybiBCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVFxuICAgID8gMHg3ZmZmZmZmZlxuICAgIDogMHgzZmZmZmZmZlxufVxuXG5mdW5jdGlvbiBjcmVhdGVCdWZmZXIgKHRoYXQsIGxlbmd0aCkge1xuICBpZiAoa01heExlbmd0aCgpIDwgbGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0ludmFsaWQgdHlwZWQgYXJyYXkgbGVuZ3RoJylcbiAgfVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICAvLyBSZXR1cm4gYW4gYXVnbWVudGVkIGBVaW50OEFycmF5YCBpbnN0YW5jZSwgZm9yIGJlc3QgcGVyZm9ybWFuY2VcbiAgICB0aGF0ID0gbmV3IFVpbnQ4QXJyYXkobGVuZ3RoKVxuICAgIHRoYXQuX19wcm90b19fID0gQnVmZmVyLnByb3RvdHlwZVxuICB9IGVsc2Uge1xuICAgIC8vIEZhbGxiYWNrOiBSZXR1cm4gYW4gb2JqZWN0IGluc3RhbmNlIG9mIHRoZSBCdWZmZXIgY2xhc3NcbiAgICBpZiAodGhhdCA9PT0gbnVsbCkge1xuICAgICAgdGhhdCA9IG5ldyBCdWZmZXIobGVuZ3RoKVxuICAgIH1cbiAgICB0aGF0Lmxlbmd0aCA9IGxlbmd0aFxuICB9XG5cbiAgcmV0dXJuIHRoYXRcbn1cblxuLyoqXG4gKiBUaGUgQnVmZmVyIGNvbnN0cnVjdG9yIHJldHVybnMgaW5zdGFuY2VzIG9mIGBVaW50OEFycmF5YCB0aGF0IGhhdmUgdGhlaXJcbiAqIHByb3RvdHlwZSBjaGFuZ2VkIHRvIGBCdWZmZXIucHJvdG90eXBlYC4gRnVydGhlcm1vcmUsIGBCdWZmZXJgIGlzIGEgc3ViY2xhc3Mgb2ZcbiAqIGBVaW50OEFycmF5YCwgc28gdGhlIHJldHVybmVkIGluc3RhbmNlcyB3aWxsIGhhdmUgYWxsIHRoZSBub2RlIGBCdWZmZXJgIG1ldGhvZHNcbiAqIGFuZCB0aGUgYFVpbnQ4QXJyYXlgIG1ldGhvZHMuIFNxdWFyZSBicmFja2V0IG5vdGF0aW9uIHdvcmtzIGFzIGV4cGVjdGVkIC0tIGl0XG4gKiByZXR1cm5zIGEgc2luZ2xlIG9jdGV0LlxuICpcbiAqIFRoZSBgVWludDhBcnJheWAgcHJvdG90eXBlIHJlbWFpbnMgdW5tb2RpZmllZC5cbiAqL1xuXG5mdW5jdGlvbiBCdWZmZXIgKGFyZywgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKSB7XG4gIGlmICghQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQgJiYgISh0aGlzIGluc3RhbmNlb2YgQnVmZmVyKSkge1xuICAgIHJldHVybiBuZXcgQnVmZmVyKGFyZywgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKVxuICB9XG5cbiAgLy8gQ29tbW9uIGNhc2UuXG4gIGlmICh0eXBlb2YgYXJnID09PSAnbnVtYmVyJykge1xuICAgIGlmICh0eXBlb2YgZW5jb2RpbmdPck9mZnNldCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ0lmIGVuY29kaW5nIGlzIHNwZWNpZmllZCB0aGVuIHRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nJ1xuICAgICAgKVxuICAgIH1cbiAgICByZXR1cm4gYWxsb2NVbnNhZmUodGhpcywgYXJnKVxuICB9XG4gIHJldHVybiBmcm9tKHRoaXMsIGFyZywgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKVxufVxuXG5CdWZmZXIucG9vbFNpemUgPSA4MTkyIC8vIG5vdCB1c2VkIGJ5IHRoaXMgaW1wbGVtZW50YXRpb25cblxuLy8gVE9ETzogTGVnYWN5LCBub3QgbmVlZGVkIGFueW1vcmUuIFJlbW92ZSBpbiBuZXh0IG1ham9yIHZlcnNpb24uXG5CdWZmZXIuX2F1Z21lbnQgPSBmdW5jdGlvbiAoYXJyKSB7XG4gIGFyci5fX3Byb3RvX18gPSBCdWZmZXIucHJvdG90eXBlXG4gIHJldHVybiBhcnJcbn1cblxuZnVuY3Rpb24gZnJvbSAodGhhdCwgdmFsdWUsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCkge1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1widmFsdWVcIiBhcmd1bWVudCBtdXN0IG5vdCBiZSBhIG51bWJlcicpXG4gIH1cblxuICBpZiAodHlwZW9mIEFycmF5QnVmZmVyICE9PSAndW5kZWZpbmVkJyAmJiB2YWx1ZSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSB7XG4gICAgcmV0dXJuIGZyb21BcnJheUJ1ZmZlcih0aGF0LCB2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKVxuICB9XG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZnJvbVN0cmluZyh0aGF0LCB2YWx1ZSwgZW5jb2RpbmdPck9mZnNldClcbiAgfVxuXG4gIHJldHVybiBmcm9tT2JqZWN0KHRoYXQsIHZhbHVlKVxufVxuXG4vKipcbiAqIEZ1bmN0aW9uYWxseSBlcXVpdmFsZW50IHRvIEJ1ZmZlcihhcmcsIGVuY29kaW5nKSBidXQgdGhyb3dzIGEgVHlwZUVycm9yXG4gKiBpZiB2YWx1ZSBpcyBhIG51bWJlci5cbiAqIEJ1ZmZlci5mcm9tKHN0clssIGVuY29kaW5nXSlcbiAqIEJ1ZmZlci5mcm9tKGFycmF5KVxuICogQnVmZmVyLmZyb20oYnVmZmVyKVxuICogQnVmZmVyLmZyb20oYXJyYXlCdWZmZXJbLCBieXRlT2Zmc2V0WywgbGVuZ3RoXV0pXG4gKiovXG5CdWZmZXIuZnJvbSA9IGZ1bmN0aW9uICh2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBmcm9tKG51bGwsIHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG59XG5cbmlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICBCdWZmZXIucHJvdG90eXBlLl9fcHJvdG9fXyA9IFVpbnQ4QXJyYXkucHJvdG90eXBlXG4gIEJ1ZmZlci5fX3Byb3RvX18gPSBVaW50OEFycmF5XG4gIGlmICh0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wuc3BlY2llcyAmJlxuICAgICAgQnVmZmVyW1N5bWJvbC5zcGVjaWVzXSA9PT0gQnVmZmVyKSB7XG4gICAgLy8gRml4IHN1YmFycmF5KCkgaW4gRVMyMDE2LiBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9mZXJvc3MvYnVmZmVyL3B1bGwvOTdcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQnVmZmVyLCBTeW1ib2wuc3BlY2llcywge1xuICAgICAgdmFsdWU6IG51bGwsXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KVxuICB9XG59XG5cbmZ1bmN0aW9uIGFzc2VydFNpemUgKHNpemUpIHtcbiAgaWYgKHR5cGVvZiBzaXplICE9PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wic2l6ZVwiIGFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXInKVxuICB9IGVsc2UgaWYgKHNpemUgPCAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1wic2l6ZVwiIGFyZ3VtZW50IG11c3Qgbm90IGJlIG5lZ2F0aXZlJylcbiAgfVxufVxuXG5mdW5jdGlvbiBhbGxvYyAodGhhdCwgc2l6ZSwgZmlsbCwgZW5jb2RpbmcpIHtcbiAgYXNzZXJ0U2l6ZShzaXplKVxuICBpZiAoc2l6ZSA8PSAwKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUJ1ZmZlcih0aGF0LCBzaXplKVxuICB9XG4gIGlmIChmaWxsICE9PSB1bmRlZmluZWQpIHtcbiAgICAvLyBPbmx5IHBheSBhdHRlbnRpb24gdG8gZW5jb2RpbmcgaWYgaXQncyBhIHN0cmluZy4gVGhpc1xuICAgIC8vIHByZXZlbnRzIGFjY2lkZW50YWxseSBzZW5kaW5nIGluIGEgbnVtYmVyIHRoYXQgd291bGRcbiAgICAvLyBiZSBpbnRlcnByZXR0ZWQgYXMgYSBzdGFydCBvZmZzZXQuXG4gICAgcmV0dXJuIHR5cGVvZiBlbmNvZGluZyA9PT0gJ3N0cmluZydcbiAgICAgID8gY3JlYXRlQnVmZmVyKHRoYXQsIHNpemUpLmZpbGwoZmlsbCwgZW5jb2RpbmcpXG4gICAgICA6IGNyZWF0ZUJ1ZmZlcih0aGF0LCBzaXplKS5maWxsKGZpbGwpXG4gIH1cbiAgcmV0dXJuIGNyZWF0ZUJ1ZmZlcih0aGF0LCBzaXplKVxufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgZmlsbGVkIEJ1ZmZlciBpbnN0YW5jZS5cbiAqIGFsbG9jKHNpemVbLCBmaWxsWywgZW5jb2RpbmddXSlcbiAqKi9cbkJ1ZmZlci5hbGxvYyA9IGZ1bmN0aW9uIChzaXplLCBmaWxsLCBlbmNvZGluZykge1xuICByZXR1cm4gYWxsb2MobnVsbCwgc2l6ZSwgZmlsbCwgZW5jb2RpbmcpXG59XG5cbmZ1bmN0aW9uIGFsbG9jVW5zYWZlICh0aGF0LCBzaXplKSB7XG4gIGFzc2VydFNpemUoc2l6ZSlcbiAgdGhhdCA9IGNyZWF0ZUJ1ZmZlcih0aGF0LCBzaXplIDwgMCA/IDAgOiBjaGVja2VkKHNpemUpIHwgMClcbiAgaWYgKCFCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7XG4gICAgICB0aGF0W2ldID0gMFxuICAgIH1cbiAgfVxuICByZXR1cm4gdGhhdFxufVxuXG4vKipcbiAqIEVxdWl2YWxlbnQgdG8gQnVmZmVyKG51bSksIGJ5IGRlZmF1bHQgY3JlYXRlcyBhIG5vbi16ZXJvLWZpbGxlZCBCdWZmZXIgaW5zdGFuY2UuXG4gKiAqL1xuQnVmZmVyLmFsbG9jVW5zYWZlID0gZnVuY3Rpb24gKHNpemUpIHtcbiAgcmV0dXJuIGFsbG9jVW5zYWZlKG51bGwsIHNpemUpXG59XG4vKipcbiAqIEVxdWl2YWxlbnQgdG8gU2xvd0J1ZmZlcihudW0pLCBieSBkZWZhdWx0IGNyZWF0ZXMgYSBub24temVyby1maWxsZWQgQnVmZmVyIGluc3RhbmNlLlxuICovXG5CdWZmZXIuYWxsb2NVbnNhZmVTbG93ID0gZnVuY3Rpb24gKHNpemUpIHtcbiAgcmV0dXJuIGFsbG9jVW5zYWZlKG51bGwsIHNpemUpXG59XG5cbmZ1bmN0aW9uIGZyb21TdHJpbmcgKHRoYXQsIHN0cmluZywgZW5jb2RpbmcpIHtcbiAgaWYgKHR5cGVvZiBlbmNvZGluZyAhPT0gJ3N0cmluZycgfHwgZW5jb2RpbmcgPT09ICcnKSB7XG4gICAgZW5jb2RpbmcgPSAndXRmOCdcbiAgfVxuXG4gIGlmICghQnVmZmVyLmlzRW5jb2RpbmcoZW5jb2RpbmcpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJlbmNvZGluZ1wiIG11c3QgYmUgYSB2YWxpZCBzdHJpbmcgZW5jb2RpbmcnKVxuICB9XG5cbiAgdmFyIGxlbmd0aCA9IGJ5dGVMZW5ndGgoc3RyaW5nLCBlbmNvZGluZykgfCAwXG4gIHRoYXQgPSBjcmVhdGVCdWZmZXIodGhhdCwgbGVuZ3RoKVxuXG4gIHZhciBhY3R1YWwgPSB0aGF0LndyaXRlKHN0cmluZywgZW5jb2RpbmcpXG5cbiAgaWYgKGFjdHVhbCAhPT0gbGVuZ3RoKSB7XG4gICAgLy8gV3JpdGluZyBhIGhleCBzdHJpbmcsIGZvciBleGFtcGxlLCB0aGF0IGNvbnRhaW5zIGludmFsaWQgY2hhcmFjdGVycyB3aWxsXG4gICAgLy8gY2F1c2UgZXZlcnl0aGluZyBhZnRlciB0aGUgZmlyc3QgaW52YWxpZCBjaGFyYWN0ZXIgdG8gYmUgaWdub3JlZC4gKGUuZy5cbiAgICAvLyAnYWJ4eGNkJyB3aWxsIGJlIHRyZWF0ZWQgYXMgJ2FiJylcbiAgICB0aGF0ID0gdGhhdC5zbGljZSgwLCBhY3R1YWwpXG4gIH1cblxuICByZXR1cm4gdGhhdFxufVxuXG5mdW5jdGlvbiBmcm9tQXJyYXlMaWtlICh0aGF0LCBhcnJheSkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoIDwgMCA/IDAgOiBjaGVja2VkKGFycmF5Lmxlbmd0aCkgfCAwXG4gIHRoYXQgPSBjcmVhdGVCdWZmZXIodGhhdCwgbGVuZ3RoKVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSArPSAxKSB7XG4gICAgdGhhdFtpXSA9IGFycmF5W2ldICYgMjU1XG4gIH1cbiAgcmV0dXJuIHRoYXRcbn1cblxuZnVuY3Rpb24gZnJvbUFycmF5QnVmZmVyICh0aGF0LCBhcnJheSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gIGFycmF5LmJ5dGVMZW5ndGggLy8gdGhpcyB0aHJvd3MgaWYgYGFycmF5YCBpcyBub3QgYSB2YWxpZCBBcnJheUJ1ZmZlclxuXG4gIGlmIChieXRlT2Zmc2V0IDwgMCB8fCBhcnJheS5ieXRlTGVuZ3RoIDwgYnl0ZU9mZnNldCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdcXCdvZmZzZXRcXCcgaXMgb3V0IG9mIGJvdW5kcycpXG4gIH1cblxuICBpZiAoYXJyYXkuYnl0ZUxlbmd0aCA8IGJ5dGVPZmZzZXQgKyAobGVuZ3RoIHx8IDApKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1xcJ2xlbmd0aFxcJyBpcyBvdXQgb2YgYm91bmRzJylcbiAgfVxuXG4gIGlmIChieXRlT2Zmc2V0ID09PSB1bmRlZmluZWQgJiYgbGVuZ3RoID09PSB1bmRlZmluZWQpIHtcbiAgICBhcnJheSA9IG5ldyBVaW50OEFycmF5KGFycmF5KVxuICB9IGVsc2UgaWYgKGxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgYXJyYXkgPSBuZXcgVWludDhBcnJheShhcnJheSwgYnl0ZU9mZnNldClcbiAgfSBlbHNlIHtcbiAgICBhcnJheSA9IG5ldyBVaW50OEFycmF5KGFycmF5LCBieXRlT2Zmc2V0LCBsZW5ndGgpXG4gIH1cblxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICAvLyBSZXR1cm4gYW4gYXVnbWVudGVkIGBVaW50OEFycmF5YCBpbnN0YW5jZSwgZm9yIGJlc3QgcGVyZm9ybWFuY2VcbiAgICB0aGF0ID0gYXJyYXlcbiAgICB0aGF0Ll9fcHJvdG9fXyA9IEJ1ZmZlci5wcm90b3R5cGVcbiAgfSBlbHNlIHtcbiAgICAvLyBGYWxsYmFjazogUmV0dXJuIGFuIG9iamVjdCBpbnN0YW5jZSBvZiB0aGUgQnVmZmVyIGNsYXNzXG4gICAgdGhhdCA9IGZyb21BcnJheUxpa2UodGhhdCwgYXJyYXkpXG4gIH1cbiAgcmV0dXJuIHRoYXRcbn1cblxuZnVuY3Rpb24gZnJvbU9iamVjdCAodGhhdCwgb2JqKSB7XG4gIGlmIChCdWZmZXIuaXNCdWZmZXIob2JqKSkge1xuICAgIHZhciBsZW4gPSBjaGVja2VkKG9iai5sZW5ndGgpIHwgMFxuICAgIHRoYXQgPSBjcmVhdGVCdWZmZXIodGhhdCwgbGVuKVxuXG4gICAgaWYgKHRoYXQubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gdGhhdFxuICAgIH1cblxuICAgIG9iai5jb3B5KHRoYXQsIDAsIDAsIGxlbilcbiAgICByZXR1cm4gdGhhdFxuICB9XG5cbiAgaWYgKG9iaikge1xuICAgIGlmICgodHlwZW9mIEFycmF5QnVmZmVyICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICBvYmouYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHx8ICdsZW5ndGgnIGluIG9iaikge1xuICAgICAgaWYgKHR5cGVvZiBvYmoubGVuZ3RoICE9PSAnbnVtYmVyJyB8fCBpc25hbihvYmoubGVuZ3RoKSkge1xuICAgICAgICByZXR1cm4gY3JlYXRlQnVmZmVyKHRoYXQsIDApXG4gICAgICB9XG4gICAgICByZXR1cm4gZnJvbUFycmF5TGlrZSh0aGF0LCBvYmopXG4gICAgfVxuXG4gICAgaWYgKG9iai50eXBlID09PSAnQnVmZmVyJyAmJiBpc0FycmF5KG9iai5kYXRhKSkge1xuICAgICAgcmV0dXJuIGZyb21BcnJheUxpa2UodGhhdCwgb2JqLmRhdGEpXG4gICAgfVxuICB9XG5cbiAgdGhyb3cgbmV3IFR5cGVFcnJvcignRmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksIG9yIGFycmF5LWxpa2Ugb2JqZWN0LicpXG59XG5cbmZ1bmN0aW9uIGNoZWNrZWQgKGxlbmd0aCkge1xuICAvLyBOb3RlOiBjYW5ub3QgdXNlIGBsZW5ndGggPCBrTWF4TGVuZ3RoKClgIGhlcmUgYmVjYXVzZSB0aGF0IGZhaWxzIHdoZW5cbiAgLy8gbGVuZ3RoIGlzIE5hTiAod2hpY2ggaXMgb3RoZXJ3aXNlIGNvZXJjZWQgdG8gemVyby4pXG4gIGlmIChsZW5ndGggPj0ga01heExlbmd0aCgpKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0F0dGVtcHQgdG8gYWxsb2NhdGUgQnVmZmVyIGxhcmdlciB0aGFuIG1heGltdW0gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgJ3NpemU6IDB4JyArIGtNYXhMZW5ndGgoKS50b1N0cmluZygxNikgKyAnIGJ5dGVzJylcbiAgfVxuICByZXR1cm4gbGVuZ3RoIHwgMFxufVxuXG5mdW5jdGlvbiBTbG93QnVmZmVyIChsZW5ndGgpIHtcbiAgaWYgKCtsZW5ndGggIT0gbGVuZ3RoKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZXFlcWVxXG4gICAgbGVuZ3RoID0gMFxuICB9XG4gIHJldHVybiBCdWZmZXIuYWxsb2MoK2xlbmd0aClcbn1cblxuQnVmZmVyLmlzQnVmZmVyID0gZnVuY3Rpb24gaXNCdWZmZXIgKGIpIHtcbiAgcmV0dXJuICEhKGIgIT0gbnVsbCAmJiBiLl9pc0J1ZmZlcilcbn1cblxuQnVmZmVyLmNvbXBhcmUgPSBmdW5jdGlvbiBjb21wYXJlIChhLCBiKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGEpIHx8ICFCdWZmZXIuaXNCdWZmZXIoYikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudHMgbXVzdCBiZSBCdWZmZXJzJylcbiAgfVxuXG4gIGlmIChhID09PSBiKSByZXR1cm4gMFxuXG4gIHZhciB4ID0gYS5sZW5ndGhcbiAgdmFyIHkgPSBiLmxlbmd0aFxuXG4gIGZvciAodmFyIGkgPSAwLCBsZW4gPSBNYXRoLm1pbih4LCB5KTsgaSA8IGxlbjsgKytpKSB7XG4gICAgaWYgKGFbaV0gIT09IGJbaV0pIHtcbiAgICAgIHggPSBhW2ldXG4gICAgICB5ID0gYltpXVxuICAgICAgYnJlYWtcbiAgICB9XG4gIH1cblxuICBpZiAoeCA8IHkpIHJldHVybiAtMVxuICBpZiAoeSA8IHgpIHJldHVybiAxXG4gIHJldHVybiAwXG59XG5cbkJ1ZmZlci5pc0VuY29kaW5nID0gZnVuY3Rpb24gaXNFbmNvZGluZyAoZW5jb2RpbmcpIHtcbiAgc3dpdGNoIChTdHJpbmcoZW5jb2RpbmcpLnRvTG93ZXJDYXNlKCkpIHtcbiAgICBjYXNlICdoZXgnOlxuICAgIGNhc2UgJ3V0ZjgnOlxuICAgIGNhc2UgJ3V0Zi04JzpcbiAgICBjYXNlICdhc2NpaSc6XG4gICAgY2FzZSAnbGF0aW4xJzpcbiAgICBjYXNlICdiaW5hcnknOlxuICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgY2FzZSAndWNzMic6XG4gICAgY2FzZSAndWNzLTInOlxuICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgIHJldHVybiB0cnVlXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbkJ1ZmZlci5jb25jYXQgPSBmdW5jdGlvbiBjb25jYXQgKGxpc3QsIGxlbmd0aCkge1xuICBpZiAoIWlzQXJyYXkobGlzdCkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcImxpc3RcIiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKVxuICB9XG5cbiAgaWYgKGxpc3QubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIEJ1ZmZlci5hbGxvYygwKVxuICB9XG5cbiAgdmFyIGlcbiAgaWYgKGxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgbGVuZ3RoID0gMFxuICAgIGZvciAoaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgKytpKSB7XG4gICAgICBsZW5ndGggKz0gbGlzdFtpXS5sZW5ndGhcbiAgICB9XG4gIH1cblxuICB2YXIgYnVmZmVyID0gQnVmZmVyLmFsbG9jVW5zYWZlKGxlbmd0aClcbiAgdmFyIHBvcyA9IDBcbiAgZm9yIChpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyArK2kpIHtcbiAgICB2YXIgYnVmID0gbGlzdFtpXVxuICAgIGlmICghQnVmZmVyLmlzQnVmZmVyKGJ1ZikpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wibGlzdFwiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpXG4gICAgfVxuICAgIGJ1Zi5jb3B5KGJ1ZmZlciwgcG9zKVxuICAgIHBvcyArPSBidWYubGVuZ3RoXG4gIH1cbiAgcmV0dXJuIGJ1ZmZlclxufVxuXG5mdW5jdGlvbiBieXRlTGVuZ3RoIChzdHJpbmcsIGVuY29kaW5nKSB7XG4gIGlmIChCdWZmZXIuaXNCdWZmZXIoc3RyaW5nKSkge1xuICAgIHJldHVybiBzdHJpbmcubGVuZ3RoXG4gIH1cbiAgaWYgKHR5cGVvZiBBcnJheUJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIEFycmF5QnVmZmVyLmlzVmlldyA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgICAgKEFycmF5QnVmZmVyLmlzVmlldyhzdHJpbmcpIHx8IHN0cmluZyBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSkge1xuICAgIHJldHVybiBzdHJpbmcuYnl0ZUxlbmd0aFxuICB9XG4gIGlmICh0eXBlb2Ygc3RyaW5nICE9PSAnc3RyaW5nJykge1xuICAgIHN0cmluZyA9ICcnICsgc3RyaW5nXG4gIH1cblxuICB2YXIgbGVuID0gc3RyaW5nLmxlbmd0aFxuICBpZiAobGVuID09PSAwKSByZXR1cm4gMFxuXG4gIC8vIFVzZSBhIGZvciBsb29wIHRvIGF2b2lkIHJlY3Vyc2lvblxuICB2YXIgbG93ZXJlZENhc2UgPSBmYWxzZVxuICBmb3IgKDs7KSB7XG4gICAgc3dpdGNoIChlbmNvZGluZykge1xuICAgICAgY2FzZSAnYXNjaWknOlxuICAgICAgY2FzZSAnbGF0aW4xJzpcbiAgICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgICAgIHJldHVybiBsZW5cbiAgICAgIGNhc2UgJ3V0ZjgnOlxuICAgICAgY2FzZSAndXRmLTgnOlxuICAgICAgY2FzZSB1bmRlZmluZWQ6XG4gICAgICAgIHJldHVybiB1dGY4VG9CeXRlcyhzdHJpbmcpLmxlbmd0aFxuICAgICAgY2FzZSAndWNzMic6XG4gICAgICBjYXNlICd1Y3MtMic6XG4gICAgICBjYXNlICd1dGYxNmxlJzpcbiAgICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgICAgcmV0dXJuIGxlbiAqIDJcbiAgICAgIGNhc2UgJ2hleCc6XG4gICAgICAgIHJldHVybiBsZW4gPj4+IDFcbiAgICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgICAgIHJldHVybiBiYXNlNjRUb0J5dGVzKHN0cmluZykubGVuZ3RoXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAobG93ZXJlZENhc2UpIHJldHVybiB1dGY4VG9CeXRlcyhzdHJpbmcpLmxlbmd0aCAvLyBhc3N1bWUgdXRmOFxuICAgICAgICBlbmNvZGluZyA9ICgnJyArIGVuY29kaW5nKS50b0xvd2VyQ2FzZSgpXG4gICAgICAgIGxvd2VyZWRDYXNlID0gdHJ1ZVxuICAgIH1cbiAgfVxufVxuQnVmZmVyLmJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoXG5cbmZ1bmN0aW9uIHNsb3dUb1N0cmluZyAoZW5jb2RpbmcsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIGxvd2VyZWRDYXNlID0gZmFsc2VcblxuICAvLyBObyBuZWVkIHRvIHZlcmlmeSB0aGF0IFwidGhpcy5sZW5ndGggPD0gTUFYX1VJTlQzMlwiIHNpbmNlIGl0J3MgYSByZWFkLW9ubHlcbiAgLy8gcHJvcGVydHkgb2YgYSB0eXBlZCBhcnJheS5cblxuICAvLyBUaGlzIGJlaGF2ZXMgbmVpdGhlciBsaWtlIFN0cmluZyBub3IgVWludDhBcnJheSBpbiB0aGF0IHdlIHNldCBzdGFydC9lbmRcbiAgLy8gdG8gdGhlaXIgdXBwZXIvbG93ZXIgYm91bmRzIGlmIHRoZSB2YWx1ZSBwYXNzZWQgaXMgb3V0IG9mIHJhbmdlLlxuICAvLyB1bmRlZmluZWQgaXMgaGFuZGxlZCBzcGVjaWFsbHkgYXMgcGVyIEVDTUEtMjYyIDZ0aCBFZGl0aW9uLFxuICAvLyBTZWN0aW9uIDEzLjMuMy43IFJ1bnRpbWUgU2VtYW50aWNzOiBLZXllZEJpbmRpbmdJbml0aWFsaXphdGlvbi5cbiAgaWYgKHN0YXJ0ID09PSB1bmRlZmluZWQgfHwgc3RhcnQgPCAwKSB7XG4gICAgc3RhcnQgPSAwXG4gIH1cbiAgLy8gUmV0dXJuIGVhcmx5IGlmIHN0YXJ0ID4gdGhpcy5sZW5ndGguIERvbmUgaGVyZSB0byBwcmV2ZW50IHBvdGVudGlhbCB1aW50MzJcbiAgLy8gY29lcmNpb24gZmFpbCBiZWxvdy5cbiAgaWYgKHN0YXJ0ID4gdGhpcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gJydcbiAgfVxuXG4gIGlmIChlbmQgPT09IHVuZGVmaW5lZCB8fCBlbmQgPiB0aGlzLmxlbmd0aCkge1xuICAgIGVuZCA9IHRoaXMubGVuZ3RoXG4gIH1cblxuICBpZiAoZW5kIDw9IDApIHtcbiAgICByZXR1cm4gJydcbiAgfVxuXG4gIC8vIEZvcmNlIGNvZXJzaW9uIHRvIHVpbnQzMi4gVGhpcyB3aWxsIGFsc28gY29lcmNlIGZhbHNleS9OYU4gdmFsdWVzIHRvIDAuXG4gIGVuZCA+Pj49IDBcbiAgc3RhcnQgPj4+PSAwXG5cbiAgaWYgKGVuZCA8PSBzdGFydCkge1xuICAgIHJldHVybiAnJ1xuICB9XG5cbiAgaWYgKCFlbmNvZGluZykgZW5jb2RpbmcgPSAndXRmOCdcblxuICB3aGlsZSAodHJ1ZSkge1xuICAgIHN3aXRjaCAoZW5jb2RpbmcpIHtcbiAgICAgIGNhc2UgJ2hleCc6XG4gICAgICAgIHJldHVybiBoZXhTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBjYXNlICd1dGY4JzpcbiAgICAgIGNhc2UgJ3V0Zi04JzpcbiAgICAgICAgcmV0dXJuIHV0ZjhTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBjYXNlICdhc2NpaSc6XG4gICAgICAgIHJldHVybiBhc2NpaVNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ2xhdGluMSc6XG4gICAgICBjYXNlICdiaW5hcnknOlxuICAgICAgICByZXR1cm4gbGF0aW4xU2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAnYmFzZTY0JzpcbiAgICAgICAgcmV0dXJuIGJhc2U2NFNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ3VjczInOlxuICAgICAgY2FzZSAndWNzLTInOlxuICAgICAgY2FzZSAndXRmMTZsZSc6XG4gICAgICBjYXNlICd1dGYtMTZsZSc6XG4gICAgICAgIHJldHVybiB1dGYxNmxlU2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKGxvd2VyZWRDYXNlKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmtub3duIGVuY29kaW5nOiAnICsgZW5jb2RpbmcpXG4gICAgICAgIGVuY29kaW5nID0gKGVuY29kaW5nICsgJycpLnRvTG93ZXJDYXNlKClcbiAgICAgICAgbG93ZXJlZENhc2UgPSB0cnVlXG4gICAgfVxuICB9XG59XG5cbi8vIFRoZSBwcm9wZXJ0eSBpcyB1c2VkIGJ5IGBCdWZmZXIuaXNCdWZmZXJgIGFuZCBgaXMtYnVmZmVyYCAoaW4gU2FmYXJpIDUtNykgdG8gZGV0ZWN0XG4vLyBCdWZmZXIgaW5zdGFuY2VzLlxuQnVmZmVyLnByb3RvdHlwZS5faXNCdWZmZXIgPSB0cnVlXG5cbmZ1bmN0aW9uIHN3YXAgKGIsIG4sIG0pIHtcbiAgdmFyIGkgPSBiW25dXG4gIGJbbl0gPSBiW21dXG4gIGJbbV0gPSBpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuc3dhcDE2ID0gZnVuY3Rpb24gc3dhcDE2ICgpIHtcbiAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoXG4gIGlmIChsZW4gJSAyICE9PSAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0J1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAxNi1iaXRzJylcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSArPSAyKSB7XG4gICAgc3dhcCh0aGlzLCBpLCBpICsgMSlcbiAgfVxuICByZXR1cm4gdGhpc1xufVxuXG5CdWZmZXIucHJvdG90eXBlLnN3YXAzMiA9IGZ1bmN0aW9uIHN3YXAzMiAoKSB7XG4gIHZhciBsZW4gPSB0aGlzLmxlbmd0aFxuICBpZiAobGVuICUgNCAhPT0gMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMzItYml0cycpXG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkgKz0gNCkge1xuICAgIHN3YXAodGhpcywgaSwgaSArIDMpXG4gICAgc3dhcCh0aGlzLCBpICsgMSwgaSArIDIpXG4gIH1cbiAgcmV0dXJuIHRoaXNcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5zd2FwNjQgPSBmdW5jdGlvbiBzd2FwNjQgKCkge1xuICB2YXIgbGVuID0gdGhpcy5sZW5ndGhcbiAgaWYgKGxlbiAlIDggIT09IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDY0LWJpdHMnKVxuICB9XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpICs9IDgpIHtcbiAgICBzd2FwKHRoaXMsIGksIGkgKyA3KVxuICAgIHN3YXAodGhpcywgaSArIDEsIGkgKyA2KVxuICAgIHN3YXAodGhpcywgaSArIDIsIGkgKyA1KVxuICAgIHN3YXAodGhpcywgaSArIDMsIGkgKyA0KVxuICB9XG4gIHJldHVybiB0aGlzXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZyAoKSB7XG4gIHZhciBsZW5ndGggPSB0aGlzLmxlbmd0aCB8IDBcbiAgaWYgKGxlbmd0aCA9PT0gMCkgcmV0dXJuICcnXG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSByZXR1cm4gdXRmOFNsaWNlKHRoaXMsIDAsIGxlbmd0aClcbiAgcmV0dXJuIHNsb3dUb1N0cmluZy5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24gZXF1YWxzIChiKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyJylcbiAgaWYgKHRoaXMgPT09IGIpIHJldHVybiB0cnVlXG4gIHJldHVybiBCdWZmZXIuY29tcGFyZSh0aGlzLCBiKSA9PT0gMFxufVxuXG5CdWZmZXIucHJvdG90eXBlLmluc3BlY3QgPSBmdW5jdGlvbiBpbnNwZWN0ICgpIHtcbiAgdmFyIHN0ciA9ICcnXG4gIHZhciBtYXggPSBleHBvcnRzLklOU1BFQ1RfTUFYX0JZVEVTXG4gIGlmICh0aGlzLmxlbmd0aCA+IDApIHtcbiAgICBzdHIgPSB0aGlzLnRvU3RyaW5nKCdoZXgnLCAwLCBtYXgpLm1hdGNoKC8uezJ9L2cpLmpvaW4oJyAnKVxuICAgIGlmICh0aGlzLmxlbmd0aCA+IG1heCkgc3RyICs9ICcgLi4uICdcbiAgfVxuICByZXR1cm4gJzxCdWZmZXIgJyArIHN0ciArICc+J1xufVxuXG5CdWZmZXIucHJvdG90eXBlLmNvbXBhcmUgPSBmdW5jdGlvbiBjb21wYXJlICh0YXJnZXQsIHN0YXJ0LCBlbmQsIHRoaXNTdGFydCwgdGhpc0VuZCkge1xuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcih0YXJnZXQpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlcicpXG4gIH1cblxuICBpZiAoc3RhcnQgPT09IHVuZGVmaW5lZCkge1xuICAgIHN0YXJ0ID0gMFxuICB9XG4gIGlmIChlbmQgPT09IHVuZGVmaW5lZCkge1xuICAgIGVuZCA9IHRhcmdldCA/IHRhcmdldC5sZW5ndGggOiAwXG4gIH1cbiAgaWYgKHRoaXNTdGFydCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhpc1N0YXJ0ID0gMFxuICB9XG4gIGlmICh0aGlzRW5kID09PSB1bmRlZmluZWQpIHtcbiAgICB0aGlzRW5kID0gdGhpcy5sZW5ndGhcbiAgfVxuXG4gIGlmIChzdGFydCA8IDAgfHwgZW5kID4gdGFyZ2V0Lmxlbmd0aCB8fCB0aGlzU3RhcnQgPCAwIHx8IHRoaXNFbmQgPiB0aGlzLmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdvdXQgb2YgcmFuZ2UgaW5kZXgnKVxuICB9XG5cbiAgaWYgKHRoaXNTdGFydCA+PSB0aGlzRW5kICYmIHN0YXJ0ID49IGVuZCkge1xuICAgIHJldHVybiAwXG4gIH1cbiAgaWYgKHRoaXNTdGFydCA+PSB0aGlzRW5kKSB7XG4gICAgcmV0dXJuIC0xXG4gIH1cbiAgaWYgKHN0YXJ0ID49IGVuZCkge1xuICAgIHJldHVybiAxXG4gIH1cblxuICBzdGFydCA+Pj49IDBcbiAgZW5kID4+Pj0gMFxuICB0aGlzU3RhcnQgPj4+PSAwXG4gIHRoaXNFbmQgPj4+PSAwXG5cbiAgaWYgKHRoaXMgPT09IHRhcmdldCkgcmV0dXJuIDBcblxuICB2YXIgeCA9IHRoaXNFbmQgLSB0aGlzU3RhcnRcbiAgdmFyIHkgPSBlbmQgLSBzdGFydFxuICB2YXIgbGVuID0gTWF0aC5taW4oeCwgeSlcblxuICB2YXIgdGhpc0NvcHkgPSB0aGlzLnNsaWNlKHRoaXNTdGFydCwgdGhpc0VuZClcbiAgdmFyIHRhcmdldENvcHkgPSB0YXJnZXQuc2xpY2Uoc3RhcnQsIGVuZClcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7XG4gICAgaWYgKHRoaXNDb3B5W2ldICE9PSB0YXJnZXRDb3B5W2ldKSB7XG4gICAgICB4ID0gdGhpc0NvcHlbaV1cbiAgICAgIHkgPSB0YXJnZXRDb3B5W2ldXG4gICAgICBicmVha1xuICAgIH1cbiAgfVxuXG4gIGlmICh4IDwgeSkgcmV0dXJuIC0xXG4gIGlmICh5IDwgeCkgcmV0dXJuIDFcbiAgcmV0dXJuIDBcbn1cblxuLy8gRmluZHMgZWl0aGVyIHRoZSBmaXJzdCBpbmRleCBvZiBgdmFsYCBpbiBgYnVmZmVyYCBhdCBvZmZzZXQgPj0gYGJ5dGVPZmZzZXRgLFxuLy8gT1IgdGhlIGxhc3QgaW5kZXggb2YgYHZhbGAgaW4gYGJ1ZmZlcmAgYXQgb2Zmc2V0IDw9IGBieXRlT2Zmc2V0YC5cbi8vXG4vLyBBcmd1bWVudHM6XG4vLyAtIGJ1ZmZlciAtIGEgQnVmZmVyIHRvIHNlYXJjaFxuLy8gLSB2YWwgLSBhIHN0cmluZywgQnVmZmVyLCBvciBudW1iZXJcbi8vIC0gYnl0ZU9mZnNldCAtIGFuIGluZGV4IGludG8gYGJ1ZmZlcmA7IHdpbGwgYmUgY2xhbXBlZCB0byBhbiBpbnQzMlxuLy8gLSBlbmNvZGluZyAtIGFuIG9wdGlvbmFsIGVuY29kaW5nLCByZWxldmFudCBpcyB2YWwgaXMgYSBzdHJpbmdcbi8vIC0gZGlyIC0gdHJ1ZSBmb3IgaW5kZXhPZiwgZmFsc2UgZm9yIGxhc3RJbmRleE9mXG5mdW5jdGlvbiBiaWRpcmVjdGlvbmFsSW5kZXhPZiAoYnVmZmVyLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBkaXIpIHtcbiAgLy8gRW1wdHkgYnVmZmVyIG1lYW5zIG5vIG1hdGNoXG4gIGlmIChidWZmZXIubGVuZ3RoID09PSAwKSByZXR1cm4gLTFcblxuICAvLyBOb3JtYWxpemUgYnl0ZU9mZnNldFxuICBpZiAodHlwZW9mIGJ5dGVPZmZzZXQgPT09ICdzdHJpbmcnKSB7XG4gICAgZW5jb2RpbmcgPSBieXRlT2Zmc2V0XG4gICAgYnl0ZU9mZnNldCA9IDBcbiAgfSBlbHNlIGlmIChieXRlT2Zmc2V0ID4gMHg3ZmZmZmZmZikge1xuICAgIGJ5dGVPZmZzZXQgPSAweDdmZmZmZmZmXG4gIH0gZWxzZSBpZiAoYnl0ZU9mZnNldCA8IC0weDgwMDAwMDAwKSB7XG4gICAgYnl0ZU9mZnNldCA9IC0weDgwMDAwMDAwXG4gIH1cbiAgYnl0ZU9mZnNldCA9ICtieXRlT2Zmc2V0ICAvLyBDb2VyY2UgdG8gTnVtYmVyLlxuICBpZiAoaXNOYU4oYnl0ZU9mZnNldCkpIHtcbiAgICAvLyBieXRlT2Zmc2V0OiBpdCBpdCdzIHVuZGVmaW5lZCwgbnVsbCwgTmFOLCBcImZvb1wiLCBldGMsIHNlYXJjaCB3aG9sZSBidWZmZXJcbiAgICBieXRlT2Zmc2V0ID0gZGlyID8gMCA6IChidWZmZXIubGVuZ3RoIC0gMSlcbiAgfVxuXG4gIC8vIE5vcm1hbGl6ZSBieXRlT2Zmc2V0OiBuZWdhdGl2ZSBvZmZzZXRzIHN0YXJ0IGZyb20gdGhlIGVuZCBvZiB0aGUgYnVmZmVyXG4gIGlmIChieXRlT2Zmc2V0IDwgMCkgYnl0ZU9mZnNldCA9IGJ1ZmZlci5sZW5ndGggKyBieXRlT2Zmc2V0XG4gIGlmIChieXRlT2Zmc2V0ID49IGJ1ZmZlci5sZW5ndGgpIHtcbiAgICBpZiAoZGlyKSByZXR1cm4gLTFcbiAgICBlbHNlIGJ5dGVPZmZzZXQgPSBidWZmZXIubGVuZ3RoIC0gMVxuICB9IGVsc2UgaWYgKGJ5dGVPZmZzZXQgPCAwKSB7XG4gICAgaWYgKGRpcikgYnl0ZU9mZnNldCA9IDBcbiAgICBlbHNlIHJldHVybiAtMVxuICB9XG5cbiAgLy8gTm9ybWFsaXplIHZhbFxuICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpIHtcbiAgICB2YWwgPSBCdWZmZXIuZnJvbSh2YWwsIGVuY29kaW5nKVxuICB9XG5cbiAgLy8gRmluYWxseSwgc2VhcmNoIGVpdGhlciBpbmRleE9mIChpZiBkaXIgaXMgdHJ1ZSkgb3IgbGFzdEluZGV4T2ZcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcih2YWwpKSB7XG4gICAgLy8gU3BlY2lhbCBjYXNlOiBsb29raW5nIGZvciBlbXB0eSBzdHJpbmcvYnVmZmVyIGFsd2F5cyBmYWlsc1xuICAgIGlmICh2YWwubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gLTFcbiAgICB9XG4gICAgcmV0dXJuIGFycmF5SW5kZXhPZihidWZmZXIsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGRpcilcbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsID09PSAnbnVtYmVyJykge1xuICAgIHZhbCA9IHZhbCAmIDB4RkYgLy8gU2VhcmNoIGZvciBhIGJ5dGUgdmFsdWUgWzAtMjU1XVxuICAgIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCAmJlxuICAgICAgICB0eXBlb2YgVWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgaWYgKGRpcikge1xuICAgICAgICByZXR1cm4gVWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKGJ1ZmZlciwgdmFsLCBieXRlT2Zmc2V0KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFVpbnQ4QXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mLmNhbGwoYnVmZmVyLCB2YWwsIGJ5dGVPZmZzZXQpXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhcnJheUluZGV4T2YoYnVmZmVyLCBbIHZhbCBdLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZGlyKVxuICB9XG5cbiAgdGhyb3cgbmV3IFR5cGVFcnJvcigndmFsIG11c3QgYmUgc3RyaW5nLCBudW1iZXIgb3IgQnVmZmVyJylcbn1cblxuZnVuY3Rpb24gYXJyYXlJbmRleE9mIChhcnIsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGRpcikge1xuICB2YXIgaW5kZXhTaXplID0gMVxuICB2YXIgYXJyTGVuZ3RoID0gYXJyLmxlbmd0aFxuICB2YXIgdmFsTGVuZ3RoID0gdmFsLmxlbmd0aFxuXG4gIGlmIChlbmNvZGluZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgZW5jb2RpbmcgPSBTdHJpbmcoZW5jb2RpbmcpLnRvTG93ZXJDYXNlKClcbiAgICBpZiAoZW5jb2RpbmcgPT09ICd1Y3MyJyB8fCBlbmNvZGluZyA9PT0gJ3Vjcy0yJyB8fFxuICAgICAgICBlbmNvZGluZyA9PT0gJ3V0ZjE2bGUnIHx8IGVuY29kaW5nID09PSAndXRmLTE2bGUnKSB7XG4gICAgICBpZiAoYXJyLmxlbmd0aCA8IDIgfHwgdmFsLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgcmV0dXJuIC0xXG4gICAgICB9XG4gICAgICBpbmRleFNpemUgPSAyXG4gICAgICBhcnJMZW5ndGggLz0gMlxuICAgICAgdmFsTGVuZ3RoIC89IDJcbiAgICAgIGJ5dGVPZmZzZXQgLz0gMlxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHJlYWQgKGJ1ZiwgaSkge1xuICAgIGlmIChpbmRleFNpemUgPT09IDEpIHtcbiAgICAgIHJldHVybiBidWZbaV1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGJ1Zi5yZWFkVUludDE2QkUoaSAqIGluZGV4U2l6ZSlcbiAgICB9XG4gIH1cblxuICB2YXIgaVxuICBpZiAoZGlyKSB7XG4gICAgdmFyIGZvdW5kSW5kZXggPSAtMVxuICAgIGZvciAoaSA9IGJ5dGVPZmZzZXQ7IGkgPCBhcnJMZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHJlYWQoYXJyLCBpKSA9PT0gcmVhZCh2YWwsIGZvdW5kSW5kZXggPT09IC0xID8gMCA6IGkgLSBmb3VuZEluZGV4KSkge1xuICAgICAgICBpZiAoZm91bmRJbmRleCA9PT0gLTEpIGZvdW5kSW5kZXggPSBpXG4gICAgICAgIGlmIChpIC0gZm91bmRJbmRleCArIDEgPT09IHZhbExlbmd0aCkgcmV0dXJuIGZvdW5kSW5kZXggKiBpbmRleFNpemVcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChmb3VuZEluZGV4ICE9PSAtMSkgaSAtPSBpIC0gZm91bmRJbmRleFxuICAgICAgICBmb3VuZEluZGV4ID0gLTFcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKGJ5dGVPZmZzZXQgKyB2YWxMZW5ndGggPiBhcnJMZW5ndGgpIGJ5dGVPZmZzZXQgPSBhcnJMZW5ndGggLSB2YWxMZW5ndGhcbiAgICBmb3IgKGkgPSBieXRlT2Zmc2V0OyBpID49IDA7IGktLSkge1xuICAgICAgdmFyIGZvdW5kID0gdHJ1ZVxuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB2YWxMZW5ndGg7IGorKykge1xuICAgICAgICBpZiAocmVhZChhcnIsIGkgKyBqKSAhPT0gcmVhZCh2YWwsIGopKSB7XG4gICAgICAgICAgZm91bmQgPSBmYWxzZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChmb3VuZCkgcmV0dXJuIGlcbiAgICB9XG4gIH1cblxuICByZXR1cm4gLTFcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5pbmNsdWRlcyA9IGZ1bmN0aW9uIGluY2x1ZGVzICh2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nKSB7XG4gIHJldHVybiB0aGlzLmluZGV4T2YodmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZykgIT09IC0xXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuaW5kZXhPZiA9IGZ1bmN0aW9uIGluZGV4T2YgKHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcpIHtcbiAgcmV0dXJuIGJpZGlyZWN0aW9uYWxJbmRleE9mKHRoaXMsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIHRydWUpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUubGFzdEluZGV4T2YgPSBmdW5jdGlvbiBsYXN0SW5kZXhPZiAodmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZykge1xuICByZXR1cm4gYmlkaXJlY3Rpb25hbEluZGV4T2YodGhpcywgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZmFsc2UpXG59XG5cbmZ1bmN0aW9uIGhleFdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgb2Zmc2V0ID0gTnVtYmVyKG9mZnNldCkgfHwgMFxuICB2YXIgcmVtYWluaW5nID0gYnVmLmxlbmd0aCAtIG9mZnNldFxuICBpZiAoIWxlbmd0aCkge1xuICAgIGxlbmd0aCA9IHJlbWFpbmluZ1xuICB9IGVsc2Uge1xuICAgIGxlbmd0aCA9IE51bWJlcihsZW5ndGgpXG4gICAgaWYgKGxlbmd0aCA+IHJlbWFpbmluZykge1xuICAgICAgbGVuZ3RoID0gcmVtYWluaW5nXG4gICAgfVxuICB9XG5cbiAgLy8gbXVzdCBiZSBhbiBldmVuIG51bWJlciBvZiBkaWdpdHNcbiAgdmFyIHN0ckxlbiA9IHN0cmluZy5sZW5ndGhcbiAgaWYgKHN0ckxlbiAlIDIgIT09IDApIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgaGV4IHN0cmluZycpXG5cbiAgaWYgKGxlbmd0aCA+IHN0ckxlbiAvIDIpIHtcbiAgICBsZW5ndGggPSBzdHJMZW4gLyAyXG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgIHZhciBwYXJzZWQgPSBwYXJzZUludChzdHJpbmcuc3Vic3RyKGkgKiAyLCAyKSwgMTYpXG4gICAgaWYgKGlzTmFOKHBhcnNlZCkpIHJldHVybiBpXG4gICAgYnVmW29mZnNldCArIGldID0gcGFyc2VkXG4gIH1cbiAgcmV0dXJuIGlcbn1cblxuZnVuY3Rpb24gdXRmOFdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGJsaXRCdWZmZXIodXRmOFRvQnl0ZXMoc3RyaW5nLCBidWYubGVuZ3RoIC0gb2Zmc2V0KSwgYnVmLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuZnVuY3Rpb24gYXNjaWlXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBibGl0QnVmZmVyKGFzY2lpVG9CeXRlcyhzdHJpbmcpLCBidWYsIG9mZnNldCwgbGVuZ3RoKVxufVxuXG5mdW5jdGlvbiBsYXRpbjFXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBhc2NpaVdyaXRlKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuZnVuY3Rpb24gYmFzZTY0V3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICByZXR1cm4gYmxpdEJ1ZmZlcihiYXNlNjRUb0J5dGVzKHN0cmluZyksIGJ1Ziwgb2Zmc2V0LCBsZW5ndGgpXG59XG5cbmZ1bmN0aW9uIHVjczJXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBibGl0QnVmZmVyKHV0ZjE2bGVUb0J5dGVzKHN0cmluZywgYnVmLmxlbmd0aCAtIG9mZnNldCksIGJ1Ziwgb2Zmc2V0LCBsZW5ndGgpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbiB3cml0ZSAoc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCwgZW5jb2RpbmcpIHtcbiAgLy8gQnVmZmVyI3dyaXRlKHN0cmluZylcbiAgaWYgKG9mZnNldCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZW5jb2RpbmcgPSAndXRmOCdcbiAgICBsZW5ndGggPSB0aGlzLmxlbmd0aFxuICAgIG9mZnNldCA9IDBcbiAgLy8gQnVmZmVyI3dyaXRlKHN0cmluZywgZW5jb2RpbmcpXG4gIH0gZWxzZSBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQgJiYgdHlwZW9mIG9mZnNldCA9PT0gJ3N0cmluZycpIHtcbiAgICBlbmNvZGluZyA9IG9mZnNldFxuICAgIGxlbmd0aCA9IHRoaXMubGVuZ3RoXG4gICAgb2Zmc2V0ID0gMFxuICAvLyBCdWZmZXIjd3JpdGUoc3RyaW5nLCBvZmZzZXRbLCBsZW5ndGhdWywgZW5jb2RpbmddKVxuICB9IGVsc2UgaWYgKGlzRmluaXRlKG9mZnNldCkpIHtcbiAgICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gICAgaWYgKGlzRmluaXRlKGxlbmd0aCkpIHtcbiAgICAgIGxlbmd0aCA9IGxlbmd0aCB8IDBcbiAgICAgIGlmIChlbmNvZGluZyA9PT0gdW5kZWZpbmVkKSBlbmNvZGluZyA9ICd1dGY4J1xuICAgIH0gZWxzZSB7XG4gICAgICBlbmNvZGluZyA9IGxlbmd0aFxuICAgICAgbGVuZ3RoID0gdW5kZWZpbmVkXG4gICAgfVxuICAvLyBsZWdhY3kgd3JpdGUoc3RyaW5nLCBlbmNvZGluZywgb2Zmc2V0LCBsZW5ndGgpIC0gcmVtb3ZlIGluIHYwLjEzXG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgJ0J1ZmZlci53cml0ZShzdHJpbmcsIGVuY29kaW5nLCBvZmZzZXRbLCBsZW5ndGhdKSBpcyBubyBsb25nZXIgc3VwcG9ydGVkJ1xuICAgIClcbiAgfVxuXG4gIHZhciByZW1haW5pbmcgPSB0aGlzLmxlbmd0aCAtIG9mZnNldFxuICBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQgfHwgbGVuZ3RoID4gcmVtYWluaW5nKSBsZW5ndGggPSByZW1haW5pbmdcblxuICBpZiAoKHN0cmluZy5sZW5ndGggPiAwICYmIChsZW5ndGggPCAwIHx8IG9mZnNldCA8IDApKSB8fCBvZmZzZXQgPiB0aGlzLmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdBdHRlbXB0IHRvIHdyaXRlIG91dHNpZGUgYnVmZmVyIGJvdW5kcycpXG4gIH1cblxuICBpZiAoIWVuY29kaW5nKSBlbmNvZGluZyA9ICd1dGY4J1xuXG4gIHZhciBsb3dlcmVkQ2FzZSA9IGZhbHNlXG4gIGZvciAoOzspIHtcbiAgICBzd2l0Y2ggKGVuY29kaW5nKSB7XG4gICAgICBjYXNlICdoZXgnOlxuICAgICAgICByZXR1cm4gaGV4V3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgY2FzZSAndXRmOCc6XG4gICAgICBjYXNlICd1dGYtOCc6XG4gICAgICAgIHJldHVybiB1dGY4V3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgY2FzZSAnYXNjaWknOlxuICAgICAgICByZXR1cm4gYXNjaWlXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBjYXNlICdsYXRpbjEnOlxuICAgICAgY2FzZSAnYmluYXJ5JzpcbiAgICAgICAgcmV0dXJuIGxhdGluMVdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgICAgIC8vIFdhcm5pbmc6IG1heExlbmd0aCBub3QgdGFrZW4gaW50byBhY2NvdW50IGluIGJhc2U2NFdyaXRlXG4gICAgICAgIHJldHVybiBiYXNlNjRXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBjYXNlICd1Y3MyJzpcbiAgICAgIGNhc2UgJ3Vjcy0yJzpcbiAgICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgICAgY2FzZSAndXRmLTE2bGUnOlxuICAgICAgICByZXR1cm4gdWNzMldyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChsb3dlcmVkQ2FzZSkgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5rbm93biBlbmNvZGluZzogJyArIGVuY29kaW5nKVxuICAgICAgICBlbmNvZGluZyA9ICgnJyArIGVuY29kaW5nKS50b0xvd2VyQ2FzZSgpXG4gICAgICAgIGxvd2VyZWRDYXNlID0gdHJ1ZVxuICAgIH1cbiAgfVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uIHRvSlNPTiAoKSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogJ0J1ZmZlcicsXG4gICAgZGF0YTogQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5fYXJyIHx8IHRoaXMsIDApXG4gIH1cbn1cblxuZnVuY3Rpb24gYmFzZTY0U2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICBpZiAoc3RhcnQgPT09IDAgJiYgZW5kID09PSBidWYubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGJhc2U2NC5mcm9tQnl0ZUFycmF5KGJ1ZilcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gYmFzZTY0LmZyb21CeXRlQXJyYXkoYnVmLnNsaWNlKHN0YXJ0LCBlbmQpKVxuICB9XG59XG5cbmZ1bmN0aW9uIHV0ZjhTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIGVuZCA9IE1hdGgubWluKGJ1Zi5sZW5ndGgsIGVuZClcbiAgdmFyIHJlcyA9IFtdXG5cbiAgdmFyIGkgPSBzdGFydFxuICB3aGlsZSAoaSA8IGVuZCkge1xuICAgIHZhciBmaXJzdEJ5dGUgPSBidWZbaV1cbiAgICB2YXIgY29kZVBvaW50ID0gbnVsbFxuICAgIHZhciBieXRlc1BlclNlcXVlbmNlID0gKGZpcnN0Qnl0ZSA+IDB4RUYpID8gNFxuICAgICAgOiAoZmlyc3RCeXRlID4gMHhERikgPyAzXG4gICAgICA6IChmaXJzdEJ5dGUgPiAweEJGKSA/IDJcbiAgICAgIDogMVxuXG4gICAgaWYgKGkgKyBieXRlc1BlclNlcXVlbmNlIDw9IGVuZCkge1xuICAgICAgdmFyIHNlY29uZEJ5dGUsIHRoaXJkQnl0ZSwgZm91cnRoQnl0ZSwgdGVtcENvZGVQb2ludFxuXG4gICAgICBzd2l0Y2ggKGJ5dGVzUGVyU2VxdWVuY2UpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIGlmIChmaXJzdEJ5dGUgPCAweDgwKSB7XG4gICAgICAgICAgICBjb2RlUG9pbnQgPSBmaXJzdEJ5dGVcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIHNlY29uZEJ5dGUgPSBidWZbaSArIDFdXG4gICAgICAgICAgaWYgKChzZWNvbmRCeXRlICYgMHhDMCkgPT09IDB4ODApIHtcbiAgICAgICAgICAgIHRlbXBDb2RlUG9pbnQgPSAoZmlyc3RCeXRlICYgMHgxRikgPDwgMHg2IHwgKHNlY29uZEJ5dGUgJiAweDNGKVxuICAgICAgICAgICAgaWYgKHRlbXBDb2RlUG9pbnQgPiAweDdGKSB7XG4gICAgICAgICAgICAgIGNvZGVQb2ludCA9IHRlbXBDb2RlUG9pbnRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIHNlY29uZEJ5dGUgPSBidWZbaSArIDFdXG4gICAgICAgICAgdGhpcmRCeXRlID0gYnVmW2kgKyAyXVxuICAgICAgICAgIGlmICgoc2Vjb25kQnl0ZSAmIDB4QzApID09PSAweDgwICYmICh0aGlyZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCkge1xuICAgICAgICAgICAgdGVtcENvZGVQb2ludCA9IChmaXJzdEJ5dGUgJiAweEYpIDw8IDB4QyB8IChzZWNvbmRCeXRlICYgMHgzRikgPDwgMHg2IHwgKHRoaXJkQnl0ZSAmIDB4M0YpXG4gICAgICAgICAgICBpZiAodGVtcENvZGVQb2ludCA+IDB4N0ZGICYmICh0ZW1wQ29kZVBvaW50IDwgMHhEODAwIHx8IHRlbXBDb2RlUG9pbnQgPiAweERGRkYpKSB7XG4gICAgICAgICAgICAgIGNvZGVQb2ludCA9IHRlbXBDb2RlUG9pbnRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIHNlY29uZEJ5dGUgPSBidWZbaSArIDFdXG4gICAgICAgICAgdGhpcmRCeXRlID0gYnVmW2kgKyAyXVxuICAgICAgICAgIGZvdXJ0aEJ5dGUgPSBidWZbaSArIDNdXG4gICAgICAgICAgaWYgKChzZWNvbmRCeXRlICYgMHhDMCkgPT09IDB4ODAgJiYgKHRoaXJkQnl0ZSAmIDB4QzApID09PSAweDgwICYmIChmb3VydGhCeXRlICYgMHhDMCkgPT09IDB4ODApIHtcbiAgICAgICAgICAgIHRlbXBDb2RlUG9pbnQgPSAoZmlyc3RCeXRlICYgMHhGKSA8PCAweDEyIHwgKHNlY29uZEJ5dGUgJiAweDNGKSA8PCAweEMgfCAodGhpcmRCeXRlICYgMHgzRikgPDwgMHg2IHwgKGZvdXJ0aEJ5dGUgJiAweDNGKVxuICAgICAgICAgICAgaWYgKHRlbXBDb2RlUG9pbnQgPiAweEZGRkYgJiYgdGVtcENvZGVQb2ludCA8IDB4MTEwMDAwKSB7XG4gICAgICAgICAgICAgIGNvZGVQb2ludCA9IHRlbXBDb2RlUG9pbnRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNvZGVQb2ludCA9PT0gbnVsbCkge1xuICAgICAgLy8gd2UgZGlkIG5vdCBnZW5lcmF0ZSBhIHZhbGlkIGNvZGVQb2ludCBzbyBpbnNlcnQgYVxuICAgICAgLy8gcmVwbGFjZW1lbnQgY2hhciAoVStGRkZEKSBhbmQgYWR2YW5jZSBvbmx5IDEgYnl0ZVxuICAgICAgY29kZVBvaW50ID0gMHhGRkZEXG4gICAgICBieXRlc1BlclNlcXVlbmNlID0gMVxuICAgIH0gZWxzZSBpZiAoY29kZVBvaW50ID4gMHhGRkZGKSB7XG4gICAgICAvLyBlbmNvZGUgdG8gdXRmMTYgKHN1cnJvZ2F0ZSBwYWlyIGRhbmNlKVxuICAgICAgY29kZVBvaW50IC09IDB4MTAwMDBcbiAgICAgIHJlcy5wdXNoKGNvZGVQb2ludCA+Pj4gMTAgJiAweDNGRiB8IDB4RDgwMClcbiAgICAgIGNvZGVQb2ludCA9IDB4REMwMCB8IGNvZGVQb2ludCAmIDB4M0ZGXG4gICAgfVxuXG4gICAgcmVzLnB1c2goY29kZVBvaW50KVxuICAgIGkgKz0gYnl0ZXNQZXJTZXF1ZW5jZVxuICB9XG5cbiAgcmV0dXJuIGRlY29kZUNvZGVQb2ludHNBcnJheShyZXMpXG59XG5cbi8vIEJhc2VkIG9uIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzIyNzQ3MjcyLzY4MDc0MiwgdGhlIGJyb3dzZXIgd2l0aFxuLy8gdGhlIGxvd2VzdCBsaW1pdCBpcyBDaHJvbWUsIHdpdGggMHgxMDAwMCBhcmdzLlxuLy8gV2UgZ28gMSBtYWduaXR1ZGUgbGVzcywgZm9yIHNhZmV0eVxudmFyIE1BWF9BUkdVTUVOVFNfTEVOR1RIID0gMHgxMDAwXG5cbmZ1bmN0aW9uIGRlY29kZUNvZGVQb2ludHNBcnJheSAoY29kZVBvaW50cykge1xuICB2YXIgbGVuID0gY29kZVBvaW50cy5sZW5ndGhcbiAgaWYgKGxlbiA8PSBNQVhfQVJHVU1FTlRTX0xFTkdUSCkge1xuICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZywgY29kZVBvaW50cykgLy8gYXZvaWQgZXh0cmEgc2xpY2UoKVxuICB9XG5cbiAgLy8gRGVjb2RlIGluIGNodW5rcyB0byBhdm9pZCBcImNhbGwgc3RhY2sgc2l6ZSBleGNlZWRlZFwiLlxuICB2YXIgcmVzID0gJydcbiAgdmFyIGkgPSAwXG4gIHdoaWxlIChpIDwgbGVuKSB7XG4gICAgcmVzICs9IFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoXG4gICAgICBTdHJpbmcsXG4gICAgICBjb2RlUG9pbnRzLnNsaWNlKGksIGkgKz0gTUFYX0FSR1VNRU5UU19MRU5HVEgpXG4gICAgKVxuICB9XG4gIHJldHVybiByZXNcbn1cblxuZnVuY3Rpb24gYXNjaWlTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIHZhciByZXQgPSAnJ1xuICBlbmQgPSBNYXRoLm1pbihidWYubGVuZ3RoLCBlbmQpXG5cbiAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpIHtcbiAgICByZXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShidWZbaV0gJiAweDdGKVxuICB9XG4gIHJldHVybiByZXRcbn1cblxuZnVuY3Rpb24gbGF0aW4xU2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICB2YXIgcmV0ID0gJydcbiAgZW5kID0gTWF0aC5taW4oYnVmLmxlbmd0aCwgZW5kKVxuXG4gIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgKytpKSB7XG4gICAgcmV0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnVmW2ldKVxuICB9XG4gIHJldHVybiByZXRcbn1cblxuZnVuY3Rpb24gaGV4U2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICB2YXIgbGVuID0gYnVmLmxlbmd0aFxuXG4gIGlmICghc3RhcnQgfHwgc3RhcnQgPCAwKSBzdGFydCA9IDBcbiAgaWYgKCFlbmQgfHwgZW5kIDwgMCB8fCBlbmQgPiBsZW4pIGVuZCA9IGxlblxuXG4gIHZhciBvdXQgPSAnJ1xuICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7ICsraSkge1xuICAgIG91dCArPSB0b0hleChidWZbaV0pXG4gIH1cbiAgcmV0dXJuIG91dFxufVxuXG5mdW5jdGlvbiB1dGYxNmxlU2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICB2YXIgYnl0ZXMgPSBidWYuc2xpY2Uoc3RhcnQsIGVuZClcbiAgdmFyIHJlcyA9ICcnXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYnl0ZXMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICByZXMgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShieXRlc1tpXSArIGJ5dGVzW2kgKyAxXSAqIDI1NilcbiAgfVxuICByZXR1cm4gcmVzXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuc2xpY2UgPSBmdW5jdGlvbiBzbGljZSAoc3RhcnQsIGVuZCkge1xuICB2YXIgbGVuID0gdGhpcy5sZW5ndGhcbiAgc3RhcnQgPSB+fnN0YXJ0XG4gIGVuZCA9IGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuIDogfn5lbmRcblxuICBpZiAoc3RhcnQgPCAwKSB7XG4gICAgc3RhcnQgKz0gbGVuXG4gICAgaWYgKHN0YXJ0IDwgMCkgc3RhcnQgPSAwXG4gIH0gZWxzZSBpZiAoc3RhcnQgPiBsZW4pIHtcbiAgICBzdGFydCA9IGxlblxuICB9XG5cbiAgaWYgKGVuZCA8IDApIHtcbiAgICBlbmQgKz0gbGVuXG4gICAgaWYgKGVuZCA8IDApIGVuZCA9IDBcbiAgfSBlbHNlIGlmIChlbmQgPiBsZW4pIHtcbiAgICBlbmQgPSBsZW5cbiAgfVxuXG4gIGlmIChlbmQgPCBzdGFydCkgZW5kID0gc3RhcnRcblxuICB2YXIgbmV3QnVmXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIG5ld0J1ZiA9IHRoaXMuc3ViYXJyYXkoc3RhcnQsIGVuZClcbiAgICBuZXdCdWYuX19wcm90b19fID0gQnVmZmVyLnByb3RvdHlwZVxuICB9IGVsc2Uge1xuICAgIHZhciBzbGljZUxlbiA9IGVuZCAtIHN0YXJ0XG4gICAgbmV3QnVmID0gbmV3IEJ1ZmZlcihzbGljZUxlbiwgdW5kZWZpbmVkKVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2xpY2VMZW47ICsraSkge1xuICAgICAgbmV3QnVmW2ldID0gdGhpc1tpICsgc3RhcnRdXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ld0J1ZlxufVxuXG4vKlxuICogTmVlZCB0byBtYWtlIHN1cmUgdGhhdCBidWZmZXIgaXNuJ3QgdHJ5aW5nIHRvIHdyaXRlIG91dCBvZiBib3VuZHMuXG4gKi9cbmZ1bmN0aW9uIGNoZWNrT2Zmc2V0IChvZmZzZXQsIGV4dCwgbGVuZ3RoKSB7XG4gIGlmICgob2Zmc2V0ICUgMSkgIT09IDAgfHwgb2Zmc2V0IDwgMCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ29mZnNldCBpcyBub3QgdWludCcpXG4gIGlmIChvZmZzZXQgKyBleHQgPiBsZW5ndGgpIHRocm93IG5ldyBSYW5nZUVycm9yKCdUcnlpbmcgdG8gYWNjZXNzIGJleW9uZCBidWZmZXIgbGVuZ3RoJylcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludExFID0gZnVuY3Rpb24gcmVhZFVJbnRMRSAob2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoIHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIGJ5dGVMZW5ndGgsIHRoaXMubGVuZ3RoKVxuXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldF1cbiAgdmFyIG11bCA9IDFcbiAgdmFyIGkgPSAwXG4gIHdoaWxlICgrK2kgPCBieXRlTGVuZ3RoICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdmFsICs9IHRoaXNbb2Zmc2V0ICsgaV0gKiBtdWxcbiAgfVxuXG4gIHJldHVybiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludEJFID0gZnVuY3Rpb24gcmVhZFVJbnRCRSAob2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoIHwgMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgY2hlY2tPZmZzZXQob2Zmc2V0LCBieXRlTGVuZ3RoLCB0aGlzLmxlbmd0aClcbiAgfVxuXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldCArIC0tYnl0ZUxlbmd0aF1cbiAgdmFyIG11bCA9IDFcbiAgd2hpbGUgKGJ5dGVMZW5ndGggPiAwICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdmFsICs9IHRoaXNbb2Zmc2V0ICsgLS1ieXRlTGVuZ3RoXSAqIG11bFxuICB9XG5cbiAgcmV0dXJuIHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50OCA9IGZ1bmN0aW9uIHJlYWRVSW50OCAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDEsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gdGhpc1tvZmZzZXRdXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQxNkxFID0gZnVuY3Rpb24gcmVhZFVJbnQxNkxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMiwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiB0aGlzW29mZnNldF0gfCAodGhpc1tvZmZzZXQgKyAxXSA8PCA4KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50MTZCRSA9IGZ1bmN0aW9uIHJlYWRVSW50MTZCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDIsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gKHRoaXNbb2Zmc2V0XSA8PCA4KSB8IHRoaXNbb2Zmc2V0ICsgMV1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDMyTEUgPSBmdW5jdGlvbiByZWFkVUludDMyTEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcblxuICByZXR1cm4gKCh0aGlzW29mZnNldF0pIHxcbiAgICAgICh0aGlzW29mZnNldCArIDFdIDw8IDgpIHxcbiAgICAgICh0aGlzW29mZnNldCArIDJdIDw8IDE2KSkgK1xuICAgICAgKHRoaXNbb2Zmc2V0ICsgM10gKiAweDEwMDAwMDApXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQzMkJFID0gZnVuY3Rpb24gcmVhZFVJbnQzMkJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG5cbiAgcmV0dXJuICh0aGlzW29mZnNldF0gKiAweDEwMDAwMDApICtcbiAgICAoKHRoaXNbb2Zmc2V0ICsgMV0gPDwgMTYpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAyXSA8PCA4KSB8XG4gICAgdGhpc1tvZmZzZXQgKyAzXSlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50TEUgPSBmdW5jdGlvbiByZWFkSW50TEUgKG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCBieXRlTGVuZ3RoLCB0aGlzLmxlbmd0aClcblxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXRdXG4gIHZhciBtdWwgPSAxXG4gIHZhciBpID0gMFxuICB3aGlsZSAoKytpIDwgYnl0ZUxlbmd0aCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHZhbCArPSB0aGlzW29mZnNldCArIGldICogbXVsXG4gIH1cbiAgbXVsICo9IDB4ODBcblxuICBpZiAodmFsID49IG11bCkgdmFsIC09IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoKVxuXG4gIHJldHVybiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50QkUgPSBmdW5jdGlvbiByZWFkSW50QkUgKG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCBieXRlTGVuZ3RoLCB0aGlzLmxlbmd0aClcblxuICB2YXIgaSA9IGJ5dGVMZW5ndGhcbiAgdmFyIG11bCA9IDFcbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0ICsgLS1pXVxuICB3aGlsZSAoaSA+IDAgJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB2YWwgKz0gdGhpc1tvZmZzZXQgKyAtLWldICogbXVsXG4gIH1cbiAgbXVsICo9IDB4ODBcblxuICBpZiAodmFsID49IG11bCkgdmFsIC09IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoKVxuXG4gIHJldHVybiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50OCA9IGZ1bmN0aW9uIHJlYWRJbnQ4IChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMSwgdGhpcy5sZW5ndGgpXG4gIGlmICghKHRoaXNbb2Zmc2V0XSAmIDB4ODApKSByZXR1cm4gKHRoaXNbb2Zmc2V0XSlcbiAgcmV0dXJuICgoMHhmZiAtIHRoaXNbb2Zmc2V0XSArIDEpICogLTEpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDE2TEUgPSBmdW5jdGlvbiByZWFkSW50MTZMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDIsIHRoaXMubGVuZ3RoKVxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXRdIHwgKHRoaXNbb2Zmc2V0ICsgMV0gPDwgOClcbiAgcmV0dXJuICh2YWwgJiAweDgwMDApID8gdmFsIHwgMHhGRkZGMDAwMCA6IHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQxNkJFID0gZnVuY3Rpb24gcmVhZEludDE2QkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAyLCB0aGlzLmxlbmd0aClcbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0ICsgMV0gfCAodGhpc1tvZmZzZXRdIDw8IDgpXG4gIHJldHVybiAodmFsICYgMHg4MDAwKSA/IHZhbCB8IDB4RkZGRjAwMDAgOiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50MzJMRSA9IGZ1bmN0aW9uIHJlYWRJbnQzMkxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG5cbiAgcmV0dXJuICh0aGlzW29mZnNldF0pIHxcbiAgICAodGhpc1tvZmZzZXQgKyAxXSA8PCA4KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgMl0gPDwgMTYpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAzXSA8PCAyNClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50MzJCRSA9IGZ1bmN0aW9uIHJlYWRJbnQzMkJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG5cbiAgcmV0dXJuICh0aGlzW29mZnNldF0gPDwgMjQpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAxXSA8PCAxNikgfFxuICAgICh0aGlzW29mZnNldCArIDJdIDw8IDgpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAzXSlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkRmxvYXRMRSA9IGZ1bmN0aW9uIHJlYWRGbG9hdExFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiBpZWVlNzU0LnJlYWQodGhpcywgb2Zmc2V0LCB0cnVlLCAyMywgNClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkRmxvYXRCRSA9IGZ1bmN0aW9uIHJlYWRGbG9hdEJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiBpZWVlNzU0LnJlYWQodGhpcywgb2Zmc2V0LCBmYWxzZSwgMjMsIDQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZERvdWJsZUxFID0gZnVuY3Rpb24gcmVhZERvdWJsZUxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgOCwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiBpZWVlNzU0LnJlYWQodGhpcywgb2Zmc2V0LCB0cnVlLCA1MiwgOClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkRG91YmxlQkUgPSBmdW5jdGlvbiByZWFkRG91YmxlQkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA4LCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIGllZWU3NTQucmVhZCh0aGlzLCBvZmZzZXQsIGZhbHNlLCA1MiwgOClcbn1cblxuZnVuY3Rpb24gY2hlY2tJbnQgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgZXh0LCBtYXgsIG1pbikge1xuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihidWYpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdcImJ1ZmZlclwiIGFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIgaW5zdGFuY2UnKVxuICBpZiAodmFsdWUgPiBtYXggfHwgdmFsdWUgPCBtaW4pIHRocm93IG5ldyBSYW5nZUVycm9yKCdcInZhbHVlXCIgYXJndW1lbnQgaXMgb3V0IG9mIGJvdW5kcycpXG4gIGlmIChvZmZzZXQgKyBleHQgPiBidWYubGVuZ3RoKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW5kZXggb3V0IG9mIHJhbmdlJylcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnRMRSA9IGZ1bmN0aW9uIHdyaXRlVUludExFICh2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoIHwgMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgdmFyIG1heEJ5dGVzID0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGgpIC0gMVxuICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG1heEJ5dGVzLCAwKVxuICB9XG5cbiAgdmFyIG11bCA9IDFcbiAgdmFyIGkgPSAwXG4gIHRoaXNbb2Zmc2V0XSA9IHZhbHVlICYgMHhGRlxuICB3aGlsZSAoKytpIDwgYnl0ZUxlbmd0aCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHRoaXNbb2Zmc2V0ICsgaV0gPSAodmFsdWUgLyBtdWwpICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIG9mZnNldCArIGJ5dGVMZW5ndGhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnRCRSA9IGZ1bmN0aW9uIHdyaXRlVUludEJFICh2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoIHwgMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgdmFyIG1heEJ5dGVzID0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGgpIC0gMVxuICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG1heEJ5dGVzLCAwKVxuICB9XG5cbiAgdmFyIGkgPSBieXRlTGVuZ3RoIC0gMVxuICB2YXIgbXVsID0gMVxuICB0aGlzW29mZnNldCArIGldID0gdmFsdWUgJiAweEZGXG4gIHdoaWxlICgtLWkgPj0gMCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHRoaXNbb2Zmc2V0ICsgaV0gPSAodmFsdWUgLyBtdWwpICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIG9mZnNldCArIGJ5dGVMZW5ndGhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQ4ID0gZnVuY3Rpb24gd3JpdGVVSW50OCAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAxLCAweGZmLCAwKVxuICBpZiAoIUJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB2YWx1ZSA9IE1hdGguZmxvb3IodmFsdWUpXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHJldHVybiBvZmZzZXQgKyAxXG59XG5cbmZ1bmN0aW9uIG9iamVjdFdyaXRlVUludDE2IChidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbikge1xuICBpZiAodmFsdWUgPCAwKSB2YWx1ZSA9IDB4ZmZmZiArIHZhbHVlICsgMVxuICBmb3IgKHZhciBpID0gMCwgaiA9IE1hdGgubWluKGJ1Zi5sZW5ndGggLSBvZmZzZXQsIDIpOyBpIDwgajsgKytpKSB7XG4gICAgYnVmW29mZnNldCArIGldID0gKHZhbHVlICYgKDB4ZmYgPDwgKDggKiAobGl0dGxlRW5kaWFuID8gaSA6IDEgLSBpKSkpKSA+Pj5cbiAgICAgIChsaXR0bGVFbmRpYW4gPyBpIDogMSAtIGkpICogOFxuICB9XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50MTZMRSA9IGZ1bmN0aW9uIHdyaXRlVUludDE2TEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMiwgMHhmZmZmLCAwKVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDgpXG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0V3JpdGVVSW50MTYodGhpcywgdmFsdWUsIG9mZnNldCwgdHJ1ZSlcbiAgfVxuICByZXR1cm4gb2Zmc2V0ICsgMlxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDE2QkUgPSBmdW5jdGlvbiB3cml0ZVVJbnQxNkJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDIsIDB4ZmZmZiwgMClcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgdGhpc1tvZmZzZXRdID0gKHZhbHVlID4+PiA4KVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgJiAweGZmKVxuICB9IGVsc2Uge1xuICAgIG9iamVjdFdyaXRlVUludDE2KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGZhbHNlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyAyXG59XG5cbmZ1bmN0aW9uIG9iamVjdFdyaXRlVUludDMyIChidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbikge1xuICBpZiAodmFsdWUgPCAwKSB2YWx1ZSA9IDB4ZmZmZmZmZmYgKyB2YWx1ZSArIDFcbiAgZm9yICh2YXIgaSA9IDAsIGogPSBNYXRoLm1pbihidWYubGVuZ3RoIC0gb2Zmc2V0LCA0KTsgaSA8IGo7ICsraSkge1xuICAgIGJ1ZltvZmZzZXQgKyBpXSA9ICh2YWx1ZSA+Pj4gKGxpdHRsZUVuZGlhbiA/IGkgOiAzIC0gaSkgKiA4KSAmIDB4ZmZcbiAgfVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDMyTEUgPSBmdW5jdGlvbiB3cml0ZVVJbnQzMkxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDQsIDB4ZmZmZmZmZmYsIDApXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIHRoaXNbb2Zmc2V0ICsgM10gPSAodmFsdWUgPj4+IDI0KVxuICAgIHRoaXNbb2Zmc2V0ICsgMl0gPSAodmFsdWUgPj4+IDE2KVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDgpXG4gICAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgfSBlbHNlIHtcbiAgICBvYmplY3RXcml0ZVVJbnQzMih0aGlzLCB2YWx1ZSwgb2Zmc2V0LCB0cnVlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50MzJCRSA9IGZ1bmN0aW9uIHdyaXRlVUludDMyQkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgNCwgMHhmZmZmZmZmZiwgMClcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgdGhpc1tvZmZzZXRdID0gKHZhbHVlID4+PiAyNClcbiAgICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiAxNilcbiAgICB0aGlzW29mZnNldCArIDJdID0gKHZhbHVlID4+PiA4KVxuICAgIHRoaXNbb2Zmc2V0ICsgM10gPSAodmFsdWUgJiAweGZmKVxuICB9IGVsc2Uge1xuICAgIG9iamVjdFdyaXRlVUludDMyKHRoaXMsIHZhbHVlLCBvZmZzZXQsIGZhbHNlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnRMRSA9IGZ1bmN0aW9uIHdyaXRlSW50TEUgKHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIHZhciBsaW1pdCA9IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoIC0gMSlcblxuICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIGxpbWl0IC0gMSwgLWxpbWl0KVxuICB9XG5cbiAgdmFyIGkgPSAwXG4gIHZhciBtdWwgPSAxXG4gIHZhciBzdWIgPSAwXG4gIHRoaXNbb2Zmc2V0XSA9IHZhbHVlICYgMHhGRlxuICB3aGlsZSAoKytpIDwgYnl0ZUxlbmd0aCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIGlmICh2YWx1ZSA8IDAgJiYgc3ViID09PSAwICYmIHRoaXNbb2Zmc2V0ICsgaSAtIDFdICE9PSAwKSB7XG4gICAgICBzdWIgPSAxXG4gICAgfVxuICAgIHRoaXNbb2Zmc2V0ICsgaV0gPSAoKHZhbHVlIC8gbXVsKSA+PiAwKSAtIHN1YiAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBvZmZzZXQgKyBieXRlTGVuZ3RoXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnRCRSA9IGZ1bmN0aW9uIHdyaXRlSW50QkUgKHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIHZhciBsaW1pdCA9IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoIC0gMSlcblxuICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIGxpbWl0IC0gMSwgLWxpbWl0KVxuICB9XG5cbiAgdmFyIGkgPSBieXRlTGVuZ3RoIC0gMVxuICB2YXIgbXVsID0gMVxuICB2YXIgc3ViID0gMFxuICB0aGlzW29mZnNldCArIGldID0gdmFsdWUgJiAweEZGXG4gIHdoaWxlICgtLWkgPj0gMCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIGlmICh2YWx1ZSA8IDAgJiYgc3ViID09PSAwICYmIHRoaXNbb2Zmc2V0ICsgaSArIDFdICE9PSAwKSB7XG4gICAgICBzdWIgPSAxXG4gICAgfVxuICAgIHRoaXNbb2Zmc2V0ICsgaV0gPSAoKHZhbHVlIC8gbXVsKSA+PiAwKSAtIHN1YiAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBvZmZzZXQgKyBieXRlTGVuZ3RoXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQ4ID0gZnVuY3Rpb24gd3JpdGVJbnQ4ICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDEsIDB4N2YsIC0weDgwKVxuICBpZiAoIUJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB2YWx1ZSA9IE1hdGguZmxvb3IodmFsdWUpXG4gIGlmICh2YWx1ZSA8IDApIHZhbHVlID0gMHhmZiArIHZhbHVlICsgMVxuICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICByZXR1cm4gb2Zmc2V0ICsgMVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50MTZMRSA9IGZ1bmN0aW9uIHdyaXRlSW50MTZMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAyLCAweDdmZmYsIC0weDgwMDApXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gOClcbiAgfSBlbHNlIHtcbiAgICBvYmplY3RXcml0ZVVJbnQxNih0aGlzLCB2YWx1ZSwgb2Zmc2V0LCB0cnVlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyAyXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQxNkJFID0gZnVuY3Rpb24gd3JpdGVJbnQxNkJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDIsIDB4N2ZmZiwgLTB4ODAwMClcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgdGhpc1tvZmZzZXRdID0gKHZhbHVlID4+PiA4KVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgJiAweGZmKVxuICB9IGVsc2Uge1xuICAgIG9iamVjdFdyaXRlVUludDE2KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGZhbHNlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyAyXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQzMkxFID0gZnVuY3Rpb24gd3JpdGVJbnQzMkxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDQsIDB4N2ZmZmZmZmYsIC0weDgwMDAwMDAwKVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDgpXG4gICAgdGhpc1tvZmZzZXQgKyAyXSA9ICh2YWx1ZSA+Pj4gMTYpXG4gICAgdGhpc1tvZmZzZXQgKyAzXSA9ICh2YWx1ZSA+Pj4gMjQpXG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0V3JpdGVVSW50MzIodGhpcywgdmFsdWUsIG9mZnNldCwgdHJ1ZSlcbiAgfVxuICByZXR1cm4gb2Zmc2V0ICsgNFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50MzJCRSA9IGZ1bmN0aW9uIHdyaXRlSW50MzJCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCA0LCAweDdmZmZmZmZmLCAtMHg4MDAwMDAwMClcbiAgaWYgKHZhbHVlIDwgMCkgdmFsdWUgPSAweGZmZmZmZmZmICsgdmFsdWUgKyAxXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSA+Pj4gMjQpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gMTYpXG4gICAgdGhpc1tvZmZzZXQgKyAyXSA9ICh2YWx1ZSA+Pj4gOClcbiAgICB0aGlzW29mZnNldCArIDNdID0gKHZhbHVlICYgMHhmZilcbiAgfSBlbHNlIHtcbiAgICBvYmplY3RXcml0ZVVJbnQzMih0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBmYWxzZSlcbiAgfVxuICByZXR1cm4gb2Zmc2V0ICsgNFxufVxuXG5mdW5jdGlvbiBjaGVja0lFRUU3NTQgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgZXh0LCBtYXgsIG1pbikge1xuICBpZiAob2Zmc2V0ICsgZXh0ID4gYnVmLmxlbmd0aCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0luZGV4IG91dCBvZiByYW5nZScpXG4gIGlmIChvZmZzZXQgPCAwKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW5kZXggb3V0IG9mIHJhbmdlJylcbn1cblxuZnVuY3Rpb24gd3JpdGVGbG9hdCAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICBjaGVja0lFRUU3NTQoYnVmLCB2YWx1ZSwgb2Zmc2V0LCA0LCAzLjQwMjgyMzQ2NjM4NTI4ODZlKzM4LCAtMy40MDI4MjM0NjYzODUyODg2ZSszOClcbiAgfVxuICBpZWVlNzU0LndyaXRlKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuLCAyMywgNClcbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUZsb2F0TEUgPSBmdW5jdGlvbiB3cml0ZUZsb2F0TEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHJldHVybiB3cml0ZUZsb2F0KHRoaXMsIHZhbHVlLCBvZmZzZXQsIHRydWUsIG5vQXNzZXJ0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlRmxvYXRCRSA9IGZ1bmN0aW9uIHdyaXRlRmxvYXRCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgcmV0dXJuIHdyaXRlRmxvYXQodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UsIG5vQXNzZXJ0KVxufVxuXG5mdW5jdGlvbiB3cml0ZURvdWJsZSAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICBjaGVja0lFRUU3NTQoYnVmLCB2YWx1ZSwgb2Zmc2V0LCA4LCAxLjc5NzY5MzEzNDg2MjMxNTdFKzMwOCwgLTEuNzk3NjkzMTM0ODYyMzE1N0UrMzA4KVxuICB9XG4gIGllZWU3NTQud3JpdGUoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIDUyLCA4KVxuICByZXR1cm4gb2Zmc2V0ICsgOFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlRG91YmxlTEUgPSBmdW5jdGlvbiB3cml0ZURvdWJsZUxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICByZXR1cm4gd3JpdGVEb3VibGUodGhpcywgdmFsdWUsIG9mZnNldCwgdHJ1ZSwgbm9Bc3NlcnQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVEb3VibGVCRSA9IGZ1bmN0aW9uIHdyaXRlRG91YmxlQkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHJldHVybiB3cml0ZURvdWJsZSh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBmYWxzZSwgbm9Bc3NlcnQpXG59XG5cbi8vIGNvcHkodGFyZ2V0QnVmZmVyLCB0YXJnZXRTdGFydD0wLCBzb3VyY2VTdGFydD0wLCBzb3VyY2VFbmQ9YnVmZmVyLmxlbmd0aClcbkJ1ZmZlci5wcm90b3R5cGUuY29weSA9IGZ1bmN0aW9uIGNvcHkgKHRhcmdldCwgdGFyZ2V0U3RhcnQsIHN0YXJ0LCBlbmQpIHtcbiAgaWYgKCFzdGFydCkgc3RhcnQgPSAwXG4gIGlmICghZW5kICYmIGVuZCAhPT0gMCkgZW5kID0gdGhpcy5sZW5ndGhcbiAgaWYgKHRhcmdldFN0YXJ0ID49IHRhcmdldC5sZW5ndGgpIHRhcmdldFN0YXJ0ID0gdGFyZ2V0Lmxlbmd0aFxuICBpZiAoIXRhcmdldFN0YXJ0KSB0YXJnZXRTdGFydCA9IDBcbiAgaWYgKGVuZCA+IDAgJiYgZW5kIDwgc3RhcnQpIGVuZCA9IHN0YXJ0XG5cbiAgLy8gQ29weSAwIGJ5dGVzOyB3ZSdyZSBkb25lXG4gIGlmIChlbmQgPT09IHN0YXJ0KSByZXR1cm4gMFxuICBpZiAodGFyZ2V0Lmxlbmd0aCA9PT0gMCB8fCB0aGlzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIDBcblxuICAvLyBGYXRhbCBlcnJvciBjb25kaXRpb25zXG4gIGlmICh0YXJnZXRTdGFydCA8IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigndGFyZ2V0U3RhcnQgb3V0IG9mIGJvdW5kcycpXG4gIH1cbiAgaWYgKHN0YXJ0IDwgMCB8fCBzdGFydCA+PSB0aGlzLmxlbmd0aCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3NvdXJjZVN0YXJ0IG91dCBvZiBib3VuZHMnKVxuICBpZiAoZW5kIDwgMCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3NvdXJjZUVuZCBvdXQgb2YgYm91bmRzJylcblxuICAvLyBBcmUgd2Ugb29iP1xuICBpZiAoZW5kID4gdGhpcy5sZW5ndGgpIGVuZCA9IHRoaXMubGVuZ3RoXG4gIGlmICh0YXJnZXQubGVuZ3RoIC0gdGFyZ2V0U3RhcnQgPCBlbmQgLSBzdGFydCkge1xuICAgIGVuZCA9IHRhcmdldC5sZW5ndGggLSB0YXJnZXRTdGFydCArIHN0YXJ0XG4gIH1cblxuICB2YXIgbGVuID0gZW5kIC0gc3RhcnRcbiAgdmFyIGlcblxuICBpZiAodGhpcyA9PT0gdGFyZ2V0ICYmIHN0YXJ0IDwgdGFyZ2V0U3RhcnQgJiYgdGFyZ2V0U3RhcnQgPCBlbmQpIHtcbiAgICAvLyBkZXNjZW5kaW5nIGNvcHkgZnJvbSBlbmRcbiAgICBmb3IgKGkgPSBsZW4gLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgdGFyZ2V0W2kgKyB0YXJnZXRTdGFydF0gPSB0aGlzW2kgKyBzdGFydF1cbiAgICB9XG4gIH0gZWxzZSBpZiAobGVuIDwgMTAwMCB8fCAhQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICAvLyBhc2NlbmRpbmcgY29weSBmcm9tIHN0YXJ0XG4gICAgZm9yIChpID0gMDsgaSA8IGxlbjsgKytpKSB7XG4gICAgICB0YXJnZXRbaSArIHRhcmdldFN0YXJ0XSA9IHRoaXNbaSArIHN0YXJ0XVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBVaW50OEFycmF5LnByb3RvdHlwZS5zZXQuY2FsbChcbiAgICAgIHRhcmdldCxcbiAgICAgIHRoaXMuc3ViYXJyYXkoc3RhcnQsIHN0YXJ0ICsgbGVuKSxcbiAgICAgIHRhcmdldFN0YXJ0XG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIGxlblxufVxuXG4vLyBVc2FnZTpcbi8vICAgIGJ1ZmZlci5maWxsKG51bWJlclssIG9mZnNldFssIGVuZF1dKVxuLy8gICAgYnVmZmVyLmZpbGwoYnVmZmVyWywgb2Zmc2V0WywgZW5kXV0pXG4vLyAgICBidWZmZXIuZmlsbChzdHJpbmdbLCBvZmZzZXRbLCBlbmRdXVssIGVuY29kaW5nXSlcbkJ1ZmZlci5wcm90b3R5cGUuZmlsbCA9IGZ1bmN0aW9uIGZpbGwgKHZhbCwgc3RhcnQsIGVuZCwgZW5jb2RpbmcpIHtcbiAgLy8gSGFuZGxlIHN0cmluZyBjYXNlczpcbiAgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSB7XG4gICAgaWYgKHR5cGVvZiBzdGFydCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGVuY29kaW5nID0gc3RhcnRcbiAgICAgIHN0YXJ0ID0gMFxuICAgICAgZW5kID0gdGhpcy5sZW5ndGhcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBlbmQgPT09ICdzdHJpbmcnKSB7XG4gICAgICBlbmNvZGluZyA9IGVuZFxuICAgICAgZW5kID0gdGhpcy5sZW5ndGhcbiAgICB9XG4gICAgaWYgKHZhbC5sZW5ndGggPT09IDEpIHtcbiAgICAgIHZhciBjb2RlID0gdmFsLmNoYXJDb2RlQXQoMClcbiAgICAgIGlmIChjb2RlIDwgMjU2KSB7XG4gICAgICAgIHZhbCA9IGNvZGVcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGVuY29kaW5nICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIGVuY29kaW5nICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZW5jb2RpbmcgbXVzdCBiZSBhIHN0cmluZycpXG4gICAgfVxuICAgIGlmICh0eXBlb2YgZW5jb2RpbmcgPT09ICdzdHJpbmcnICYmICFCdWZmZXIuaXNFbmNvZGluZyhlbmNvZGluZykpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vua25vd24gZW5jb2Rpbmc6ICcgKyBlbmNvZGluZylcbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZW9mIHZhbCA9PT0gJ251bWJlcicpIHtcbiAgICB2YWwgPSB2YWwgJiAyNTVcbiAgfVxuXG4gIC8vIEludmFsaWQgcmFuZ2VzIGFyZSBub3Qgc2V0IHRvIGEgZGVmYXVsdCwgc28gY2FuIHJhbmdlIGNoZWNrIGVhcmx5LlxuICBpZiAoc3RhcnQgPCAwIHx8IHRoaXMubGVuZ3RoIDwgc3RhcnQgfHwgdGhpcy5sZW5ndGggPCBlbmQpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignT3V0IG9mIHJhbmdlIGluZGV4JylcbiAgfVxuXG4gIGlmIChlbmQgPD0gc3RhcnQpIHtcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgc3RhcnQgPSBzdGFydCA+Pj4gMFxuICBlbmQgPSBlbmQgPT09IHVuZGVmaW5lZCA/IHRoaXMubGVuZ3RoIDogZW5kID4+PiAwXG5cbiAgaWYgKCF2YWwpIHZhbCA9IDBcblxuICB2YXIgaVxuICBpZiAodHlwZW9mIHZhbCA9PT0gJ251bWJlcicpIHtcbiAgICBmb3IgKGkgPSBzdGFydDsgaSA8IGVuZDsgKytpKSB7XG4gICAgICB0aGlzW2ldID0gdmFsXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciBieXRlcyA9IEJ1ZmZlci5pc0J1ZmZlcih2YWwpXG4gICAgICA/IHZhbFxuICAgICAgOiB1dGY4VG9CeXRlcyhuZXcgQnVmZmVyKHZhbCwgZW5jb2RpbmcpLnRvU3RyaW5nKCkpXG4gICAgdmFyIGxlbiA9IGJ5dGVzLmxlbmd0aFxuICAgIGZvciAoaSA9IDA7IGkgPCBlbmQgLSBzdGFydDsgKytpKSB7XG4gICAgICB0aGlzW2kgKyBzdGFydF0gPSBieXRlc1tpICUgbGVuXVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0aGlzXG59XG5cbi8vIEhFTFBFUiBGVU5DVElPTlNcbi8vID09PT09PT09PT09PT09PT1cblxudmFyIElOVkFMSURfQkFTRTY0X1JFID0gL1teK1xcLzAtOUEtWmEtei1fXS9nXG5cbmZ1bmN0aW9uIGJhc2U2NGNsZWFuIChzdHIpIHtcbiAgLy8gTm9kZSBzdHJpcHMgb3V0IGludmFsaWQgY2hhcmFjdGVycyBsaWtlIFxcbiBhbmQgXFx0IGZyb20gdGhlIHN0cmluZywgYmFzZTY0LWpzIGRvZXMgbm90XG4gIHN0ciA9IHN0cmluZ3RyaW0oc3RyKS5yZXBsYWNlKElOVkFMSURfQkFTRTY0X1JFLCAnJylcbiAgLy8gTm9kZSBjb252ZXJ0cyBzdHJpbmdzIHdpdGggbGVuZ3RoIDwgMiB0byAnJ1xuICBpZiAoc3RyLmxlbmd0aCA8IDIpIHJldHVybiAnJ1xuICAvLyBOb2RlIGFsbG93cyBmb3Igbm9uLXBhZGRlZCBiYXNlNjQgc3RyaW5ncyAobWlzc2luZyB0cmFpbGluZyA9PT0pLCBiYXNlNjQtanMgZG9lcyBub3RcbiAgd2hpbGUgKHN0ci5sZW5ndGggJSA0ICE9PSAwKSB7XG4gICAgc3RyID0gc3RyICsgJz0nXG4gIH1cbiAgcmV0dXJuIHN0clxufVxuXG5mdW5jdGlvbiBzdHJpbmd0cmltIChzdHIpIHtcbiAgaWYgKHN0ci50cmltKSByZXR1cm4gc3RyLnRyaW0oKVxuICByZXR1cm4gc3RyLnJlcGxhY2UoL15cXHMrfFxccyskL2csICcnKVxufVxuXG5mdW5jdGlvbiB0b0hleCAobikge1xuICBpZiAobiA8IDE2KSByZXR1cm4gJzAnICsgbi50b1N0cmluZygxNilcbiAgcmV0dXJuIG4udG9TdHJpbmcoMTYpXG59XG5cbmZ1bmN0aW9uIHV0ZjhUb0J5dGVzIChzdHJpbmcsIHVuaXRzKSB7XG4gIHVuaXRzID0gdW5pdHMgfHwgSW5maW5pdHlcbiAgdmFyIGNvZGVQb2ludFxuICB2YXIgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aFxuICB2YXIgbGVhZFN1cnJvZ2F0ZSA9IG51bGxcbiAgdmFyIGJ5dGVzID0gW11cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgY29kZVBvaW50ID0gc3RyaW5nLmNoYXJDb2RlQXQoaSlcblxuICAgIC8vIGlzIHN1cnJvZ2F0ZSBjb21wb25lbnRcbiAgICBpZiAoY29kZVBvaW50ID4gMHhEN0ZGICYmIGNvZGVQb2ludCA8IDB4RTAwMCkge1xuICAgICAgLy8gbGFzdCBjaGFyIHdhcyBhIGxlYWRcbiAgICAgIGlmICghbGVhZFN1cnJvZ2F0ZSkge1xuICAgICAgICAvLyBubyBsZWFkIHlldFxuICAgICAgICBpZiAoY29kZVBvaW50ID4gMHhEQkZGKSB7XG4gICAgICAgICAgLy8gdW5leHBlY3RlZCB0cmFpbFxuICAgICAgICAgIGlmICgodW5pdHMgLT0gMykgPiAtMSkgYnl0ZXMucHVzaCgweEVGLCAweEJGLCAweEJEKVxuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH0gZWxzZSBpZiAoaSArIDEgPT09IGxlbmd0aCkge1xuICAgICAgICAgIC8vIHVucGFpcmVkIGxlYWRcbiAgICAgICAgICBpZiAoKHVuaXRzIC09IDMpID4gLTEpIGJ5dGVzLnB1c2goMHhFRiwgMHhCRiwgMHhCRClcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gdmFsaWQgbGVhZFxuICAgICAgICBsZWFkU3Vycm9nYXRlID0gY29kZVBvaW50XG5cbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgLy8gMiBsZWFkcyBpbiBhIHJvd1xuICAgICAgaWYgKGNvZGVQb2ludCA8IDB4REMwMCkge1xuICAgICAgICBpZiAoKHVuaXRzIC09IDMpID4gLTEpIGJ5dGVzLnB1c2goMHhFRiwgMHhCRiwgMHhCRClcbiAgICAgICAgbGVhZFN1cnJvZ2F0ZSA9IGNvZGVQb2ludFxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICAvLyB2YWxpZCBzdXJyb2dhdGUgcGFpclxuICAgICAgY29kZVBvaW50ID0gKGxlYWRTdXJyb2dhdGUgLSAweEQ4MDAgPDwgMTAgfCBjb2RlUG9pbnQgLSAweERDMDApICsgMHgxMDAwMFxuICAgIH0gZWxzZSBpZiAobGVhZFN1cnJvZ2F0ZSkge1xuICAgICAgLy8gdmFsaWQgYm1wIGNoYXIsIGJ1dCBsYXN0IGNoYXIgd2FzIGEgbGVhZFxuICAgICAgaWYgKCh1bml0cyAtPSAzKSA+IC0xKSBieXRlcy5wdXNoKDB4RUYsIDB4QkYsIDB4QkQpXG4gICAgfVxuXG4gICAgbGVhZFN1cnJvZ2F0ZSA9IG51bGxcblxuICAgIC8vIGVuY29kZSB1dGY4XG4gICAgaWYgKGNvZGVQb2ludCA8IDB4ODApIHtcbiAgICAgIGlmICgodW5pdHMgLT0gMSkgPCAwKSBicmVha1xuICAgICAgYnl0ZXMucHVzaChjb2RlUG9pbnQpXG4gICAgfSBlbHNlIGlmIChjb2RlUG9pbnQgPCAweDgwMCkge1xuICAgICAgaWYgKCh1bml0cyAtPSAyKSA8IDApIGJyZWFrXG4gICAgICBieXRlcy5wdXNoKFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHg2IHwgMHhDMCxcbiAgICAgICAgY29kZVBvaW50ICYgMHgzRiB8IDB4ODBcbiAgICAgIClcbiAgICB9IGVsc2UgaWYgKGNvZGVQb2ludCA8IDB4MTAwMDApIHtcbiAgICAgIGlmICgodW5pdHMgLT0gMykgPCAwKSBicmVha1xuICAgICAgYnl0ZXMucHVzaChcbiAgICAgICAgY29kZVBvaW50ID4+IDB4QyB8IDB4RTAsXG4gICAgICAgIGNvZGVQb2ludCA+PiAweDYgJiAweDNGIHwgMHg4MCxcbiAgICAgICAgY29kZVBvaW50ICYgMHgzRiB8IDB4ODBcbiAgICAgIClcbiAgICB9IGVsc2UgaWYgKGNvZGVQb2ludCA8IDB4MTEwMDAwKSB7XG4gICAgICBpZiAoKHVuaXRzIC09IDQpIDwgMCkgYnJlYWtcbiAgICAgIGJ5dGVzLnB1c2goXG4gICAgICAgIGNvZGVQb2ludCA+PiAweDEyIHwgMHhGMCxcbiAgICAgICAgY29kZVBvaW50ID4+IDB4QyAmIDB4M0YgfCAweDgwLFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHg2ICYgMHgzRiB8IDB4ODAsXG4gICAgICAgIGNvZGVQb2ludCAmIDB4M0YgfCAweDgwXG4gICAgICApXG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBjb2RlIHBvaW50JylcbiAgICB9XG4gIH1cblxuICByZXR1cm4gYnl0ZXNcbn1cblxuZnVuY3Rpb24gYXNjaWlUb0J5dGVzIChzdHIpIHtcbiAgdmFyIGJ5dGVBcnJheSA9IFtdXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgKytpKSB7XG4gICAgLy8gTm9kZSdzIGNvZGUgc2VlbXMgdG8gYmUgZG9pbmcgdGhpcyBhbmQgbm90ICYgMHg3Ri4uXG4gICAgYnl0ZUFycmF5LnB1c2goc3RyLmNoYXJDb2RlQXQoaSkgJiAweEZGKVxuICB9XG4gIHJldHVybiBieXRlQXJyYXlcbn1cblxuZnVuY3Rpb24gdXRmMTZsZVRvQnl0ZXMgKHN0ciwgdW5pdHMpIHtcbiAgdmFyIGMsIGhpLCBsb1xuICB2YXIgYnl0ZUFycmF5ID0gW11cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyArK2kpIHtcbiAgICBpZiAoKHVuaXRzIC09IDIpIDwgMCkgYnJlYWtcblxuICAgIGMgPSBzdHIuY2hhckNvZGVBdChpKVxuICAgIGhpID0gYyA+PiA4XG4gICAgbG8gPSBjICUgMjU2XG4gICAgYnl0ZUFycmF5LnB1c2gobG8pXG4gICAgYnl0ZUFycmF5LnB1c2goaGkpXG4gIH1cblxuICByZXR1cm4gYnl0ZUFycmF5XG59XG5cbmZ1bmN0aW9uIGJhc2U2NFRvQnl0ZXMgKHN0cikge1xuICByZXR1cm4gYmFzZTY0LnRvQnl0ZUFycmF5KGJhc2U2NGNsZWFuKHN0cikpXG59XG5cbmZ1bmN0aW9uIGJsaXRCdWZmZXIgKHNyYywgZHN0LCBvZmZzZXQsIGxlbmd0aCkge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgaWYgKChpICsgb2Zmc2V0ID49IGRzdC5sZW5ndGgpIHx8IChpID49IHNyYy5sZW5ndGgpKSBicmVha1xuICAgIGRzdFtpICsgb2Zmc2V0XSA9IHNyY1tpXVxuICB9XG4gIHJldHVybiBpXG59XG5cbmZ1bmN0aW9uIGlzbmFuICh2YWwpIHtcbiAgcmV0dXJuIHZhbCAhPT0gdmFsIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tc2VsZi1jb21wYXJlXG59XG4iLCJ2YXIgdG9TdHJpbmcgPSB7fS50b1N0cmluZztcblxubW9kdWxlLmV4cG9ydHMgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIChhcnIpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwoYXJyKSA9PSAnW29iamVjdCBBcnJheV0nO1xufTtcbiIsInJlcXVpcmUoJy4uLy4uL21vZHVsZXMvY29yZS5yZWdleHAuZXNjYXBlJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL21vZHVsZXMvX2NvcmUnKS5SZWdFeHAuZXNjYXBlO1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKHR5cGVvZiBpdCAhPSAnZnVuY3Rpb24nKSB0aHJvdyBUeXBlRXJyb3IoaXQgKyAnIGlzIG5vdCBhIGZ1bmN0aW9uIScpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwidmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIG1zZykge1xuICBpZiAodHlwZW9mIGl0ICE9ICdudW1iZXInICYmIGNvZihpdCkgIT0gJ051bWJlcicpIHRocm93IFR5cGVFcnJvcihtc2cpO1xuICByZXR1cm4gK2l0O1xufTtcbiIsIi8vIDIyLjEuMy4zMSBBcnJheS5wcm90b3R5cGVbQEB1bnNjb3BhYmxlc11cbnZhciBVTlNDT1BBQkxFUyA9IHJlcXVpcmUoJy4vX3drcycpKCd1bnNjb3BhYmxlcycpO1xudmFyIEFycmF5UHJvdG8gPSBBcnJheS5wcm90b3R5cGU7XG5pZiAoQXJyYXlQcm90b1tVTlNDT1BBQkxFU10gPT0gdW5kZWZpbmVkKSByZXF1aXJlKCcuL19oaWRlJykoQXJyYXlQcm90bywgVU5TQ09QQUJMRVMsIHt9KTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICBBcnJheVByb3RvW1VOU0NPUEFCTEVTXVtrZXldID0gdHJ1ZTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgYXQgPSByZXF1aXJlKCcuL19zdHJpbmctYXQnKSh0cnVlKTtcblxuIC8vIGBBZHZhbmNlU3RyaW5nSW5kZXhgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtYWR2YW5jZXN0cmluZ2luZGV4XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChTLCBpbmRleCwgdW5pY29kZSkge1xuICByZXR1cm4gaW5kZXggKyAodW5pY29kZSA/IGF0KFMsIGluZGV4KS5sZW5ndGggOiAxKTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgQ29uc3RydWN0b3IsIG5hbWUsIGZvcmJpZGRlbkZpZWxkKSB7XG4gIGlmICghKGl0IGluc3RhbmNlb2YgQ29uc3RydWN0b3IpIHx8IChmb3JiaWRkZW5GaWVsZCAhPT0gdW5kZWZpbmVkICYmIGZvcmJpZGRlbkZpZWxkIGluIGl0KSkge1xuICAgIHRocm93IFR5cGVFcnJvcihuYW1lICsgJzogaW5jb3JyZWN0IGludm9jYXRpb24hJyk7XG4gIH0gcmV0dXJuIGl0O1xufTtcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKCFpc09iamVjdChpdCkpIHRocm93IFR5cGVFcnJvcihpdCArICcgaXMgbm90IGFuIG9iamVjdCEnKTtcbiAgcmV0dXJuIGl0O1xufTtcbiIsIi8vIDIyLjEuMy4zIEFycmF5LnByb3RvdHlwZS5jb3B5V2l0aGluKHRhcmdldCwgc3RhcnQsIGVuZCA9IHRoaXMubGVuZ3RoKVxuJ3VzZSBzdHJpY3QnO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi9fdG8tYWJzb2x1dGUtaW5kZXgnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFtdLmNvcHlXaXRoaW4gfHwgZnVuY3Rpb24gY29weVdpdGhpbih0YXJnZXQgLyogPSAwICovLCBzdGFydCAvKiA9IDAsIGVuZCA9IEBsZW5ndGggKi8pIHtcbiAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgdmFyIGxlbiA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgdmFyIHRvID0gdG9BYnNvbHV0ZUluZGV4KHRhcmdldCwgbGVuKTtcbiAgdmFyIGZyb20gPSB0b0Fic29sdXRlSW5kZXgoc3RhcnQsIGxlbik7XG4gIHZhciBlbmQgPSBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZDtcbiAgdmFyIGNvdW50ID0gTWF0aC5taW4oKGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuIDogdG9BYnNvbHV0ZUluZGV4KGVuZCwgbGVuKSkgLSBmcm9tLCBsZW4gLSB0byk7XG4gIHZhciBpbmMgPSAxO1xuICBpZiAoZnJvbSA8IHRvICYmIHRvIDwgZnJvbSArIGNvdW50KSB7XG4gICAgaW5jID0gLTE7XG4gICAgZnJvbSArPSBjb3VudCAtIDE7XG4gICAgdG8gKz0gY291bnQgLSAxO1xuICB9XG4gIHdoaWxlIChjb3VudC0tID4gMCkge1xuICAgIGlmIChmcm9tIGluIE8pIE9bdG9dID0gT1tmcm9tXTtcbiAgICBlbHNlIGRlbGV0ZSBPW3RvXTtcbiAgICB0byArPSBpbmM7XG4gICAgZnJvbSArPSBpbmM7XG4gIH0gcmV0dXJuIE87XG59O1xuIiwiLy8gMjIuMS4zLjYgQXJyYXkucHJvdG90eXBlLmZpbGwodmFsdWUsIHN0YXJ0ID0gMCwgZW5kID0gdGhpcy5sZW5ndGgpXG4ndXNlIHN0cmljdCc7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuL190by1hYnNvbHV0ZS1pbmRleCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGZpbGwodmFsdWUgLyogLCBzdGFydCA9IDAsIGVuZCA9IEBsZW5ndGggKi8pIHtcbiAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICB2YXIgaW5kZXggPSB0b0Fic29sdXRlSW5kZXgoYUxlbiA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQsIGxlbmd0aCk7XG4gIHZhciBlbmQgPSBhTGVuID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZDtcbiAgdmFyIGVuZFBvcyA9IGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuZ3RoIDogdG9BYnNvbHV0ZUluZGV4KGVuZCwgbGVuZ3RoKTtcbiAgd2hpbGUgKGVuZFBvcyA+IGluZGV4KSBPW2luZGV4KytdID0gdmFsdWU7XG4gIHJldHVybiBPO1xufTtcbiIsInZhciBmb3JPZiA9IHJlcXVpcmUoJy4vX2Zvci1vZicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVyLCBJVEVSQVRPUikge1xuICB2YXIgcmVzdWx0ID0gW107XG4gIGZvck9mKGl0ZXIsIGZhbHNlLCByZXN1bHQucHVzaCwgcmVzdWx0LCBJVEVSQVRPUik7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwiLy8gZmFsc2UgLT4gQXJyYXkjaW5kZXhPZlxuLy8gdHJ1ZSAgLT4gQXJyYXkjaW5jbHVkZXNcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuL190by1hYnNvbHV0ZS1pbmRleCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoSVNfSU5DTFVERVMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgZWwsIGZyb21JbmRleCkge1xuICAgIHZhciBPID0gdG9JT2JqZWN0KCR0aGlzKTtcbiAgICB2YXIgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICAgIHZhciBpbmRleCA9IHRvQWJzb2x1dGVJbmRleChmcm9tSW5kZXgsIGxlbmd0aCk7XG4gICAgdmFyIHZhbHVlO1xuICAgIC8vIEFycmF5I2luY2x1ZGVzIHVzZXMgU2FtZVZhbHVlWmVybyBlcXVhbGl0eSBhbGdvcml0aG1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgaWYgKElTX0lOQ0xVREVTICYmIGVsICE9IGVsKSB3aGlsZSAobGVuZ3RoID4gaW5kZXgpIHtcbiAgICAgIHZhbHVlID0gT1tpbmRleCsrXTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICAgIGlmICh2YWx1ZSAhPSB2YWx1ZSkgcmV0dXJuIHRydWU7XG4gICAgLy8gQXJyYXkjaW5kZXhPZiBpZ25vcmVzIGhvbGVzLCBBcnJheSNpbmNsdWRlcyAtIG5vdFxuICAgIH0gZWxzZSBmb3IgKDtsZW5ndGggPiBpbmRleDsgaW5kZXgrKykgaWYgKElTX0lOQ0xVREVTIHx8IGluZGV4IGluIE8pIHtcbiAgICAgIGlmIChPW2luZGV4XSA9PT0gZWwpIHJldHVybiBJU19JTkNMVURFUyB8fCBpbmRleCB8fCAwO1xuICAgIH0gcmV0dXJuICFJU19JTkNMVURFUyAmJiAtMTtcbiAgfTtcbn07XG4iLCIvLyAwIC0+IEFycmF5I2ZvckVhY2hcbi8vIDEgLT4gQXJyYXkjbWFwXG4vLyAyIC0+IEFycmF5I2ZpbHRlclxuLy8gMyAtPiBBcnJheSNzb21lXG4vLyA0IC0+IEFycmF5I2V2ZXJ5XG4vLyA1IC0+IEFycmF5I2ZpbmRcbi8vIDYgLT4gQXJyYXkjZmluZEluZGV4XG52YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgSU9iamVjdCA9IHJlcXVpcmUoJy4vX2lvYmplY3QnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgYXNjID0gcmVxdWlyZSgnLi9fYXJyYXktc3BlY2llcy1jcmVhdGUnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFRZUEUsICRjcmVhdGUpIHtcbiAgdmFyIElTX01BUCA9IFRZUEUgPT0gMTtcbiAgdmFyIElTX0ZJTFRFUiA9IFRZUEUgPT0gMjtcbiAgdmFyIElTX1NPTUUgPSBUWVBFID09IDM7XG4gIHZhciBJU19FVkVSWSA9IFRZUEUgPT0gNDtcbiAgdmFyIElTX0ZJTkRfSU5ERVggPSBUWVBFID09IDY7XG4gIHZhciBOT19IT0xFUyA9IFRZUEUgPT0gNSB8fCBJU19GSU5EX0lOREVYO1xuICB2YXIgY3JlYXRlID0gJGNyZWF0ZSB8fCBhc2M7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIGNhbGxiYWNrZm4sIHRoYXQpIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KCR0aGlzKTtcbiAgICB2YXIgc2VsZiA9IElPYmplY3QoTyk7XG4gICAgdmFyIGYgPSBjdHgoY2FsbGJhY2tmbiwgdGhhdCwgMyk7XG4gICAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoKHNlbGYubGVuZ3RoKTtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHZhciByZXN1bHQgPSBJU19NQVAgPyBjcmVhdGUoJHRoaXMsIGxlbmd0aCkgOiBJU19GSUxURVIgPyBjcmVhdGUoJHRoaXMsIDApIDogdW5kZWZpbmVkO1xuICAgIHZhciB2YWwsIHJlcztcbiAgICBmb3IgKDtsZW5ndGggPiBpbmRleDsgaW5kZXgrKykgaWYgKE5PX0hPTEVTIHx8IGluZGV4IGluIHNlbGYpIHtcbiAgICAgIHZhbCA9IHNlbGZbaW5kZXhdO1xuICAgICAgcmVzID0gZih2YWwsIGluZGV4LCBPKTtcbiAgICAgIGlmIChUWVBFKSB7XG4gICAgICAgIGlmIChJU19NQVApIHJlc3VsdFtpbmRleF0gPSByZXM7ICAgLy8gbWFwXG4gICAgICAgIGVsc2UgaWYgKHJlcykgc3dpdGNoIChUWVBFKSB7XG4gICAgICAgICAgY2FzZSAzOiByZXR1cm4gdHJ1ZTsgICAgICAgICAgICAgLy8gc29tZVxuICAgICAgICAgIGNhc2UgNTogcmV0dXJuIHZhbDsgICAgICAgICAgICAgIC8vIGZpbmRcbiAgICAgICAgICBjYXNlIDY6IHJldHVybiBpbmRleDsgICAgICAgICAgICAvLyBmaW5kSW5kZXhcbiAgICAgICAgICBjYXNlIDI6IHJlc3VsdC5wdXNoKHZhbCk7ICAgICAgICAvLyBmaWx0ZXJcbiAgICAgICAgfSBlbHNlIGlmIChJU19FVkVSWSkgcmV0dXJuIGZhbHNlOyAvLyBldmVyeVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gSVNfRklORF9JTkRFWCA/IC0xIDogSVNfU09NRSB8fCBJU19FVkVSWSA/IElTX0VWRVJZIDogcmVzdWx0O1xuICB9O1xufTtcbiIsInZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciBJT2JqZWN0ID0gcmVxdWlyZSgnLi9faW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRoYXQsIGNhbGxiYWNrZm4sIGFMZW4sIG1lbW8sIGlzUmlnaHQpIHtcbiAgYUZ1bmN0aW9uKGNhbGxiYWNrZm4pO1xuICB2YXIgTyA9IHRvT2JqZWN0KHRoYXQpO1xuICB2YXIgc2VsZiA9IElPYmplY3QoTyk7XG4gIHZhciBsZW5ndGggPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gIHZhciBpbmRleCA9IGlzUmlnaHQgPyBsZW5ndGggLSAxIDogMDtcbiAgdmFyIGkgPSBpc1JpZ2h0ID8gLTEgOiAxO1xuICBpZiAoYUxlbiA8IDIpIGZvciAoOzspIHtcbiAgICBpZiAoaW5kZXggaW4gc2VsZikge1xuICAgICAgbWVtbyA9IHNlbGZbaW5kZXhdO1xuICAgICAgaW5kZXggKz0gaTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBpbmRleCArPSBpO1xuICAgIGlmIChpc1JpZ2h0ID8gaW5kZXggPCAwIDogbGVuZ3RoIDw9IGluZGV4KSB7XG4gICAgICB0aHJvdyBUeXBlRXJyb3IoJ1JlZHVjZSBvZiBlbXB0eSBhcnJheSB3aXRoIG5vIGluaXRpYWwgdmFsdWUnKTtcbiAgICB9XG4gIH1cbiAgZm9yICg7aXNSaWdodCA/IGluZGV4ID49IDAgOiBsZW5ndGggPiBpbmRleDsgaW5kZXggKz0gaSkgaWYgKGluZGV4IGluIHNlbGYpIHtcbiAgICBtZW1vID0gY2FsbGJhY2tmbihtZW1vLCBzZWxmW2luZGV4XSwgaW5kZXgsIE8pO1xuICB9XG4gIHJldHVybiBtZW1vO1xufTtcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuL19pcy1hcnJheScpO1xudmFyIFNQRUNJRVMgPSByZXF1aXJlKCcuL193a3MnKSgnc3BlY2llcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvcmlnaW5hbCkge1xuICB2YXIgQztcbiAgaWYgKGlzQXJyYXkob3JpZ2luYWwpKSB7XG4gICAgQyA9IG9yaWdpbmFsLmNvbnN0cnVjdG9yO1xuICAgIC8vIGNyb3NzLXJlYWxtIGZhbGxiYWNrXG4gICAgaWYgKHR5cGVvZiBDID09ICdmdW5jdGlvbicgJiYgKEMgPT09IEFycmF5IHx8IGlzQXJyYXkoQy5wcm90b3R5cGUpKSkgQyA9IHVuZGVmaW5lZDtcbiAgICBpZiAoaXNPYmplY3QoQykpIHtcbiAgICAgIEMgPSBDW1NQRUNJRVNdO1xuICAgICAgaWYgKEMgPT09IG51bGwpIEMgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9IHJldHVybiBDID09PSB1bmRlZmluZWQgPyBBcnJheSA6IEM7XG59O1xuIiwiLy8gOS40LjIuMyBBcnJheVNwZWNpZXNDcmVhdGUob3JpZ2luYWxBcnJheSwgbGVuZ3RoKVxudmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4vX2FycmF5LXNwZWNpZXMtY29uc3RydWN0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob3JpZ2luYWwsIGxlbmd0aCkge1xuICByZXR1cm4gbmV3IChzcGVjaWVzQ29uc3RydWN0b3Iob3JpZ2luYWwpKShsZW5ndGgpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBpbnZva2UgPSByZXF1aXJlKCcuL19pbnZva2UnKTtcbnZhciBhcnJheVNsaWNlID0gW10uc2xpY2U7XG52YXIgZmFjdG9yaWVzID0ge307XG5cbnZhciBjb25zdHJ1Y3QgPSBmdW5jdGlvbiAoRiwgbGVuLCBhcmdzKSB7XG4gIGlmICghKGxlbiBpbiBmYWN0b3JpZXMpKSB7XG4gICAgZm9yICh2YXIgbiA9IFtdLCBpID0gMDsgaSA8IGxlbjsgaSsrKSBuW2ldID0gJ2FbJyArIGkgKyAnXSc7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jXG4gICAgZmFjdG9yaWVzW2xlbl0gPSBGdW5jdGlvbignRixhJywgJ3JldHVybiBuZXcgRignICsgbi5qb2luKCcsJykgKyAnKScpO1xuICB9IHJldHVybiBmYWN0b3JpZXNbbGVuXShGLCBhcmdzKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gRnVuY3Rpb24uYmluZCB8fCBmdW5jdGlvbiBiaW5kKHRoYXQgLyogLCAuLi5hcmdzICovKSB7XG4gIHZhciBmbiA9IGFGdW5jdGlvbih0aGlzKTtcbiAgdmFyIHBhcnRBcmdzID0gYXJyYXlTbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gIHZhciBib3VuZCA9IGZ1bmN0aW9uICgvKiBhcmdzLi4uICovKSB7XG4gICAgdmFyIGFyZ3MgPSBwYXJ0QXJncy5jb25jYXQoYXJyYXlTbGljZS5jYWxsKGFyZ3VtZW50cykpO1xuICAgIHJldHVybiB0aGlzIGluc3RhbmNlb2YgYm91bmQgPyBjb25zdHJ1Y3QoZm4sIGFyZ3MubGVuZ3RoLCBhcmdzKSA6IGludm9rZShmbiwgYXJncywgdGhhdCk7XG4gIH07XG4gIGlmIChpc09iamVjdChmbi5wcm90b3R5cGUpKSBib3VuZC5wcm90b3R5cGUgPSBmbi5wcm90b3R5cGU7XG4gIHJldHVybiBib3VuZDtcbn07XG4iLCIvLyBnZXR0aW5nIHRhZyBmcm9tIDE5LjEuMy42IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcoKVxudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xudmFyIFRBRyA9IHJlcXVpcmUoJy4vX3drcycpKCd0b1N0cmluZ1RhZycpO1xuLy8gRVMzIHdyb25nIGhlcmVcbnZhciBBUkcgPSBjb2YoZnVuY3Rpb24gKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpID09ICdBcmd1bWVudHMnO1xuXG4vLyBmYWxsYmFjayBmb3IgSUUxMSBTY3JpcHQgQWNjZXNzIERlbmllZCBlcnJvclxudmFyIHRyeUdldCA9IGZ1bmN0aW9uIChpdCwga2V5KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGl0W2tleV07XG4gIH0gY2F0Y2ggKGUpIHsgLyogZW1wdHkgKi8gfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIE8sIFQsIEI7XG4gIHJldHVybiBpdCA9PT0gdW5kZWZpbmVkID8gJ1VuZGVmaW5lZCcgOiBpdCA9PT0gbnVsbCA/ICdOdWxsJ1xuICAgIC8vIEBAdG9TdHJpbmdUYWcgY2FzZVxuICAgIDogdHlwZW9mIChUID0gdHJ5R2V0KE8gPSBPYmplY3QoaXQpLCBUQUcpKSA9PSAnc3RyaW5nJyA/IFRcbiAgICAvLyBidWlsdGluVGFnIGNhc2VcbiAgICA6IEFSRyA/IGNvZihPKVxuICAgIC8vIEVTMyBhcmd1bWVudHMgZmFsbGJhY2tcbiAgICA6IChCID0gY29mKE8pKSA9PSAnT2JqZWN0JyAmJiB0eXBlb2YgTy5jYWxsZWUgPT0gJ2Z1bmN0aW9uJyA/ICdBcmd1bWVudHMnIDogQjtcbn07XG4iLCJ2YXIgdG9TdHJpbmcgPSB7fS50b1N0cmluZztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwoaXQpLnNsaWNlKDgsIC0xKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKTtcbnZhciByZWRlZmluZUFsbCA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lLWFsbCcpO1xudmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuL19hbi1pbnN0YW5jZScpO1xudmFyIGZvck9mID0gcmVxdWlyZSgnLi9fZm9yLW9mJyk7XG52YXIgJGl0ZXJEZWZpbmUgPSByZXF1aXJlKCcuL19pdGVyLWRlZmluZScpO1xudmFyIHN0ZXAgPSByZXF1aXJlKCcuL19pdGVyLXN0ZXAnKTtcbnZhciBzZXRTcGVjaWVzID0gcmVxdWlyZSgnLi9fc2V0LXNwZWNpZXMnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyk7XG52YXIgZmFzdEtleSA9IHJlcXVpcmUoJy4vX21ldGEnKS5mYXN0S2V5O1xudmFyIHZhbGlkYXRlID0gcmVxdWlyZSgnLi9fdmFsaWRhdGUtY29sbGVjdGlvbicpO1xudmFyIFNJWkUgPSBERVNDUklQVE9SUyA/ICdfcycgOiAnc2l6ZSc7XG5cbnZhciBnZXRFbnRyeSA9IGZ1bmN0aW9uICh0aGF0LCBrZXkpIHtcbiAgLy8gZmFzdCBjYXNlXG4gIHZhciBpbmRleCA9IGZhc3RLZXkoa2V5KTtcbiAgdmFyIGVudHJ5O1xuICBpZiAoaW5kZXggIT09ICdGJykgcmV0dXJuIHRoYXQuX2lbaW5kZXhdO1xuICAvLyBmcm96ZW4gb2JqZWN0IGNhc2VcbiAgZm9yIChlbnRyeSA9IHRoYXQuX2Y7IGVudHJ5OyBlbnRyeSA9IGVudHJ5Lm4pIHtcbiAgICBpZiAoZW50cnkuayA9PSBrZXkpIHJldHVybiBlbnRyeTtcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGdldENvbnN0cnVjdG9yOiBmdW5jdGlvbiAod3JhcHBlciwgTkFNRSwgSVNfTUFQLCBBRERFUikge1xuICAgIHZhciBDID0gd3JhcHBlcihmdW5jdGlvbiAodGhhdCwgaXRlcmFibGUpIHtcbiAgICAgIGFuSW5zdGFuY2UodGhhdCwgQywgTkFNRSwgJ19pJyk7XG4gICAgICB0aGF0Ll90ID0gTkFNRTsgICAgICAgICAvLyBjb2xsZWN0aW9uIHR5cGVcbiAgICAgIHRoYXQuX2kgPSBjcmVhdGUobnVsbCk7IC8vIGluZGV4XG4gICAgICB0aGF0Ll9mID0gdW5kZWZpbmVkOyAgICAvLyBmaXJzdCBlbnRyeVxuICAgICAgdGhhdC5fbCA9IHVuZGVmaW5lZDsgICAgLy8gbGFzdCBlbnRyeVxuICAgICAgdGhhdFtTSVpFXSA9IDA7ICAgICAgICAgLy8gc2l6ZVxuICAgICAgaWYgKGl0ZXJhYmxlICE9IHVuZGVmaW5lZCkgZm9yT2YoaXRlcmFibGUsIElTX01BUCwgdGhhdFtBRERFUl0sIHRoYXQpO1xuICAgIH0pO1xuICAgIHJlZGVmaW5lQWxsKEMucHJvdG90eXBlLCB7XG4gICAgICAvLyAyMy4xLjMuMSBNYXAucHJvdG90eXBlLmNsZWFyKClcbiAgICAgIC8vIDIzLjIuMy4yIFNldC5wcm90b3R5cGUuY2xlYXIoKVxuICAgICAgY2xlYXI6IGZ1bmN0aW9uIGNsZWFyKCkge1xuICAgICAgICBmb3IgKHZhciB0aGF0ID0gdmFsaWRhdGUodGhpcywgTkFNRSksIGRhdGEgPSB0aGF0Ll9pLCBlbnRyeSA9IHRoYXQuX2Y7IGVudHJ5OyBlbnRyeSA9IGVudHJ5Lm4pIHtcbiAgICAgICAgICBlbnRyeS5yID0gdHJ1ZTtcbiAgICAgICAgICBpZiAoZW50cnkucCkgZW50cnkucCA9IGVudHJ5LnAubiA9IHVuZGVmaW5lZDtcbiAgICAgICAgICBkZWxldGUgZGF0YVtlbnRyeS5pXTtcbiAgICAgICAgfVxuICAgICAgICB0aGF0Ll9mID0gdGhhdC5fbCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhhdFtTSVpFXSA9IDA7XG4gICAgICB9LFxuICAgICAgLy8gMjMuMS4zLjMgTWFwLnByb3RvdHlwZS5kZWxldGUoa2V5KVxuICAgICAgLy8gMjMuMi4zLjQgU2V0LnByb3RvdHlwZS5kZWxldGUodmFsdWUpXG4gICAgICAnZGVsZXRlJzogZnVuY3Rpb24gKGtleSkge1xuICAgICAgICB2YXIgdGhhdCA9IHZhbGlkYXRlKHRoaXMsIE5BTUUpO1xuICAgICAgICB2YXIgZW50cnkgPSBnZXRFbnRyeSh0aGF0LCBrZXkpO1xuICAgICAgICBpZiAoZW50cnkpIHtcbiAgICAgICAgICB2YXIgbmV4dCA9IGVudHJ5Lm47XG4gICAgICAgICAgdmFyIHByZXYgPSBlbnRyeS5wO1xuICAgICAgICAgIGRlbGV0ZSB0aGF0Ll9pW2VudHJ5LmldO1xuICAgICAgICAgIGVudHJ5LnIgPSB0cnVlO1xuICAgICAgICAgIGlmIChwcmV2KSBwcmV2Lm4gPSBuZXh0O1xuICAgICAgICAgIGlmIChuZXh0KSBuZXh0LnAgPSBwcmV2O1xuICAgICAgICAgIGlmICh0aGF0Ll9mID09IGVudHJ5KSB0aGF0Ll9mID0gbmV4dDtcbiAgICAgICAgICBpZiAodGhhdC5fbCA9PSBlbnRyeSkgdGhhdC5fbCA9IHByZXY7XG4gICAgICAgICAgdGhhdFtTSVpFXS0tO1xuICAgICAgICB9IHJldHVybiAhIWVudHJ5O1xuICAgICAgfSxcbiAgICAgIC8vIDIzLjIuMy42IFNldC5wcm90b3R5cGUuZm9yRWFjaChjYWxsYmFja2ZuLCB0aGlzQXJnID0gdW5kZWZpbmVkKVxuICAgICAgLy8gMjMuMS4zLjUgTWFwLnByb3RvdHlwZS5mb3JFYWNoKGNhbGxiYWNrZm4sIHRoaXNBcmcgPSB1bmRlZmluZWQpXG4gICAgICBmb3JFYWNoOiBmdW5jdGlvbiBmb3JFYWNoKGNhbGxiYWNrZm4gLyogLCB0aGF0ID0gdW5kZWZpbmVkICovKSB7XG4gICAgICAgIHZhbGlkYXRlKHRoaXMsIE5BTUUpO1xuICAgICAgICB2YXIgZiA9IGN0eChjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCwgMyk7XG4gICAgICAgIHZhciBlbnRyeTtcbiAgICAgICAgd2hpbGUgKGVudHJ5ID0gZW50cnkgPyBlbnRyeS5uIDogdGhpcy5fZikge1xuICAgICAgICAgIGYoZW50cnkudiwgZW50cnkuaywgdGhpcyk7XG4gICAgICAgICAgLy8gcmV2ZXJ0IHRvIHRoZSBsYXN0IGV4aXN0aW5nIGVudHJ5XG4gICAgICAgICAgd2hpbGUgKGVudHJ5ICYmIGVudHJ5LnIpIGVudHJ5ID0gZW50cnkucDtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIC8vIDIzLjEuMy43IE1hcC5wcm90b3R5cGUuaGFzKGtleSlcbiAgICAgIC8vIDIzLjIuMy43IFNldC5wcm90b3R5cGUuaGFzKHZhbHVlKVxuICAgICAgaGFzOiBmdW5jdGlvbiBoYXMoa2V5KSB7XG4gICAgICAgIHJldHVybiAhIWdldEVudHJ5KHZhbGlkYXRlKHRoaXMsIE5BTUUpLCBrZXkpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmIChERVNDUklQVE9SUykgZFAoQy5wcm90b3R5cGUsICdzaXplJywge1xuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB2YWxpZGF0ZSh0aGlzLCBOQU1FKVtTSVpFXTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gQztcbiAgfSxcbiAgZGVmOiBmdW5jdGlvbiAodGhhdCwga2V5LCB2YWx1ZSkge1xuICAgIHZhciBlbnRyeSA9IGdldEVudHJ5KHRoYXQsIGtleSk7XG4gICAgdmFyIHByZXYsIGluZGV4O1xuICAgIC8vIGNoYW5nZSBleGlzdGluZyBlbnRyeVxuICAgIGlmIChlbnRyeSkge1xuICAgICAgZW50cnkudiA9IHZhbHVlO1xuICAgIC8vIGNyZWF0ZSBuZXcgZW50cnlcbiAgICB9IGVsc2Uge1xuICAgICAgdGhhdC5fbCA9IGVudHJ5ID0ge1xuICAgICAgICBpOiBpbmRleCA9IGZhc3RLZXkoa2V5LCB0cnVlKSwgLy8gPC0gaW5kZXhcbiAgICAgICAgazoga2V5LCAgICAgICAgICAgICAgICAgICAgICAgIC8vIDwtIGtleVxuICAgICAgICB2OiB2YWx1ZSwgICAgICAgICAgICAgICAgICAgICAgLy8gPC0gdmFsdWVcbiAgICAgICAgcDogcHJldiA9IHRoYXQuX2wsICAgICAgICAgICAgIC8vIDwtIHByZXZpb3VzIGVudHJ5XG4gICAgICAgIG46IHVuZGVmaW5lZCwgICAgICAgICAgICAgICAgICAvLyA8LSBuZXh0IGVudHJ5XG4gICAgICAgIHI6IGZhbHNlICAgICAgICAgICAgICAgICAgICAgICAvLyA8LSByZW1vdmVkXG4gICAgICB9O1xuICAgICAgaWYgKCF0aGF0Ll9mKSB0aGF0Ll9mID0gZW50cnk7XG4gICAgICBpZiAocHJldikgcHJldi5uID0gZW50cnk7XG4gICAgICB0aGF0W1NJWkVdKys7XG4gICAgICAvLyBhZGQgdG8gaW5kZXhcbiAgICAgIGlmIChpbmRleCAhPT0gJ0YnKSB0aGF0Ll9pW2luZGV4XSA9IGVudHJ5O1xuICAgIH0gcmV0dXJuIHRoYXQ7XG4gIH0sXG4gIGdldEVudHJ5OiBnZXRFbnRyeSxcbiAgc2V0U3Ryb25nOiBmdW5jdGlvbiAoQywgTkFNRSwgSVNfTUFQKSB7XG4gICAgLy8gYWRkIC5rZXlzLCAudmFsdWVzLCAuZW50cmllcywgW0BAaXRlcmF0b3JdXG4gICAgLy8gMjMuMS4zLjQsIDIzLjEuMy44LCAyMy4xLjMuMTEsIDIzLjEuMy4xMiwgMjMuMi4zLjUsIDIzLjIuMy44LCAyMy4yLjMuMTAsIDIzLjIuMy4xMVxuICAgICRpdGVyRGVmaW5lKEMsIE5BTUUsIGZ1bmN0aW9uIChpdGVyYXRlZCwga2luZCkge1xuICAgICAgdGhpcy5fdCA9IHZhbGlkYXRlKGl0ZXJhdGVkLCBOQU1FKTsgLy8gdGFyZ2V0XG4gICAgICB0aGlzLl9rID0ga2luZDsgICAgICAgICAgICAgICAgICAgICAvLyBraW5kXG4gICAgICB0aGlzLl9sID0gdW5kZWZpbmVkOyAgICAgICAgICAgICAgICAvLyBwcmV2aW91c1xuICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgIHZhciBraW5kID0gdGhhdC5faztcbiAgICAgIHZhciBlbnRyeSA9IHRoYXQuX2w7XG4gICAgICAvLyByZXZlcnQgdG8gdGhlIGxhc3QgZXhpc3RpbmcgZW50cnlcbiAgICAgIHdoaWxlIChlbnRyeSAmJiBlbnRyeS5yKSBlbnRyeSA9IGVudHJ5LnA7XG4gICAgICAvLyBnZXQgbmV4dCBlbnRyeVxuICAgICAgaWYgKCF0aGF0Ll90IHx8ICEodGhhdC5fbCA9IGVudHJ5ID0gZW50cnkgPyBlbnRyeS5uIDogdGhhdC5fdC5fZikpIHtcbiAgICAgICAgLy8gb3IgZmluaXNoIHRoZSBpdGVyYXRpb25cbiAgICAgICAgdGhhdC5fdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIHN0ZXAoMSk7XG4gICAgICB9XG4gICAgICAvLyByZXR1cm4gc3RlcCBieSBraW5kXG4gICAgICBpZiAoa2luZCA9PSAna2V5cycpIHJldHVybiBzdGVwKDAsIGVudHJ5LmspO1xuICAgICAgaWYgKGtpbmQgPT0gJ3ZhbHVlcycpIHJldHVybiBzdGVwKDAsIGVudHJ5LnYpO1xuICAgICAgcmV0dXJuIHN0ZXAoMCwgW2VudHJ5LmssIGVudHJ5LnZdKTtcbiAgICB9LCBJU19NQVAgPyAnZW50cmllcycgOiAndmFsdWVzJywgIUlTX01BUCwgdHJ1ZSk7XG5cbiAgICAvLyBhZGQgW0BAc3BlY2llc10sIDIzLjEuMi4yLCAyMy4yLjIuMlxuICAgIHNldFNwZWNpZXMoTkFNRSk7XG4gIH1cbn07XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vRGF2aWRCcnVhbnQvTWFwLVNldC5wcm90b3R5cGUudG9KU09OXG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4vX2NsYXNzb2YnKTtcbnZhciBmcm9tID0gcmVxdWlyZSgnLi9fYXJyYXktZnJvbS1pdGVyYWJsZScpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTkFNRSkge1xuICByZXR1cm4gZnVuY3Rpb24gdG9KU09OKCkge1xuICAgIGlmIChjbGFzc29mKHRoaXMpICE9IE5BTUUpIHRocm93IFR5cGVFcnJvcihOQU1FICsgXCIjdG9KU09OIGlzbid0IGdlbmVyaWNcIik7XG4gICAgcmV0dXJuIGZyb20odGhpcyk7XG4gIH07XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHJlZGVmaW5lQWxsID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUtYWxsJyk7XG52YXIgZ2V0V2VhayA9IHJlcXVpcmUoJy4vX21ldGEnKS5nZXRXZWFrO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBhbkluc3RhbmNlID0gcmVxdWlyZSgnLi9fYW4taW5zdGFuY2UnKTtcbnZhciBmb3JPZiA9IHJlcXVpcmUoJy4vX2Zvci1vZicpO1xudmFyIGNyZWF0ZUFycmF5TWV0aG9kID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpO1xudmFyICRoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciB2YWxpZGF0ZSA9IHJlcXVpcmUoJy4vX3ZhbGlkYXRlLWNvbGxlY3Rpb24nKTtcbnZhciBhcnJheUZpbmQgPSBjcmVhdGVBcnJheU1ldGhvZCg1KTtcbnZhciBhcnJheUZpbmRJbmRleCA9IGNyZWF0ZUFycmF5TWV0aG9kKDYpO1xudmFyIGlkID0gMDtcblxuLy8gZmFsbGJhY2sgZm9yIHVuY2F1Z2h0IGZyb3plbiBrZXlzXG52YXIgdW5jYXVnaHRGcm96ZW5TdG9yZSA9IGZ1bmN0aW9uICh0aGF0KSB7XG4gIHJldHVybiB0aGF0Ll9sIHx8ICh0aGF0Ll9sID0gbmV3IFVuY2F1Z2h0RnJvemVuU3RvcmUoKSk7XG59O1xudmFyIFVuY2F1Z2h0RnJvemVuU3RvcmUgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuYSA9IFtdO1xufTtcbnZhciBmaW5kVW5jYXVnaHRGcm96ZW4gPSBmdW5jdGlvbiAoc3RvcmUsIGtleSkge1xuICByZXR1cm4gYXJyYXlGaW5kKHN0b3JlLmEsIGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBpdFswXSA9PT0ga2V5O1xuICB9KTtcbn07XG5VbmNhdWdodEZyb3plblN0b3JlLnByb3RvdHlwZSA9IHtcbiAgZ2V0OiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIGVudHJ5ID0gZmluZFVuY2F1Z2h0RnJvemVuKHRoaXMsIGtleSk7XG4gICAgaWYgKGVudHJ5KSByZXR1cm4gZW50cnlbMV07XG4gIH0sXG4gIGhhczogZnVuY3Rpb24gKGtleSkge1xuICAgIHJldHVybiAhIWZpbmRVbmNhdWdodEZyb3plbih0aGlzLCBrZXkpO1xuICB9LFxuICBzZXQ6IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgdmFyIGVudHJ5ID0gZmluZFVuY2F1Z2h0RnJvemVuKHRoaXMsIGtleSk7XG4gICAgaWYgKGVudHJ5KSBlbnRyeVsxXSA9IHZhbHVlO1xuICAgIGVsc2UgdGhpcy5hLnB1c2goW2tleSwgdmFsdWVdKTtcbiAgfSxcbiAgJ2RlbGV0ZSc6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICB2YXIgaW5kZXggPSBhcnJheUZpbmRJbmRleCh0aGlzLmEsIGZ1bmN0aW9uIChpdCkge1xuICAgICAgcmV0dXJuIGl0WzBdID09PSBrZXk7XG4gICAgfSk7XG4gICAgaWYgKH5pbmRleCkgdGhpcy5hLnNwbGljZShpbmRleCwgMSk7XG4gICAgcmV0dXJuICEhfmluZGV4O1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZ2V0Q29uc3RydWN0b3I6IGZ1bmN0aW9uICh3cmFwcGVyLCBOQU1FLCBJU19NQVAsIEFEREVSKSB7XG4gICAgdmFyIEMgPSB3cmFwcGVyKGZ1bmN0aW9uICh0aGF0LCBpdGVyYWJsZSkge1xuICAgICAgYW5JbnN0YW5jZSh0aGF0LCBDLCBOQU1FLCAnX2knKTtcbiAgICAgIHRoYXQuX3QgPSBOQU1FOyAgICAgIC8vIGNvbGxlY3Rpb24gdHlwZVxuICAgICAgdGhhdC5faSA9IGlkKys7ICAgICAgLy8gY29sbGVjdGlvbiBpZFxuICAgICAgdGhhdC5fbCA9IHVuZGVmaW5lZDsgLy8gbGVhayBzdG9yZSBmb3IgdW5jYXVnaHQgZnJvemVuIG9iamVjdHNcbiAgICAgIGlmIChpdGVyYWJsZSAhPSB1bmRlZmluZWQpIGZvck9mKGl0ZXJhYmxlLCBJU19NQVAsIHRoYXRbQURERVJdLCB0aGF0KTtcbiAgICB9KTtcbiAgICByZWRlZmluZUFsbChDLnByb3RvdHlwZSwge1xuICAgICAgLy8gMjMuMy4zLjIgV2Vha01hcC5wcm90b3R5cGUuZGVsZXRlKGtleSlcbiAgICAgIC8vIDIzLjQuMy4zIFdlYWtTZXQucHJvdG90eXBlLmRlbGV0ZSh2YWx1ZSlcbiAgICAgICdkZWxldGUnOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIGlmICghaXNPYmplY3Qoa2V5KSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICB2YXIgZGF0YSA9IGdldFdlYWsoa2V5KTtcbiAgICAgICAgaWYgKGRhdGEgPT09IHRydWUpIHJldHVybiB1bmNhdWdodEZyb3plblN0b3JlKHZhbGlkYXRlKHRoaXMsIE5BTUUpKVsnZGVsZXRlJ10oa2V5KTtcbiAgICAgICAgcmV0dXJuIGRhdGEgJiYgJGhhcyhkYXRhLCB0aGlzLl9pKSAmJiBkZWxldGUgZGF0YVt0aGlzLl9pXTtcbiAgICAgIH0sXG4gICAgICAvLyAyMy4zLjMuNCBXZWFrTWFwLnByb3RvdHlwZS5oYXMoa2V5KVxuICAgICAgLy8gMjMuNC4zLjQgV2Vha1NldC5wcm90b3R5cGUuaGFzKHZhbHVlKVxuICAgICAgaGFzOiBmdW5jdGlvbiBoYXMoa2V5KSB7XG4gICAgICAgIGlmICghaXNPYmplY3Qoa2V5KSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICB2YXIgZGF0YSA9IGdldFdlYWsoa2V5KTtcbiAgICAgICAgaWYgKGRhdGEgPT09IHRydWUpIHJldHVybiB1bmNhdWdodEZyb3plblN0b3JlKHZhbGlkYXRlKHRoaXMsIE5BTUUpKS5oYXMoa2V5KTtcbiAgICAgICAgcmV0dXJuIGRhdGEgJiYgJGhhcyhkYXRhLCB0aGlzLl9pKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gQztcbiAgfSxcbiAgZGVmOiBmdW5jdGlvbiAodGhhdCwga2V5LCB2YWx1ZSkge1xuICAgIHZhciBkYXRhID0gZ2V0V2Vhayhhbk9iamVjdChrZXkpLCB0cnVlKTtcbiAgICBpZiAoZGF0YSA9PT0gdHJ1ZSkgdW5jYXVnaHRGcm96ZW5TdG9yZSh0aGF0KS5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgZWxzZSBkYXRhW3RoYXQuX2ldID0gdmFsdWU7XG4gICAgcmV0dXJuIHRoYXQ7XG4gIH0sXG4gIHVmc3RvcmU6IHVuY2F1Z2h0RnJvemVuU3RvcmVcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUnKTtcbnZhciByZWRlZmluZUFsbCA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lLWFsbCcpO1xudmFyIG1ldGEgPSByZXF1aXJlKCcuL19tZXRhJyk7XG52YXIgZm9yT2YgPSByZXF1aXJlKCcuL19mb3Itb2YnKTtcbnZhciBhbkluc3RhbmNlID0gcmVxdWlyZSgnLi9fYW4taW5zdGFuY2UnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciAkaXRlckRldGVjdCA9IHJlcXVpcmUoJy4vX2l0ZXItZGV0ZWN0Jyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuL19zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIGluaGVyaXRJZlJlcXVpcmVkID0gcmVxdWlyZSgnLi9faW5oZXJpdC1pZi1yZXF1aXJlZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChOQU1FLCB3cmFwcGVyLCBtZXRob2RzLCBjb21tb24sIElTX01BUCwgSVNfV0VBSykge1xuICB2YXIgQmFzZSA9IGdsb2JhbFtOQU1FXTtcbiAgdmFyIEMgPSBCYXNlO1xuICB2YXIgQURERVIgPSBJU19NQVAgPyAnc2V0JyA6ICdhZGQnO1xuICB2YXIgcHJvdG8gPSBDICYmIEMucHJvdG90eXBlO1xuICB2YXIgTyA9IHt9O1xuICB2YXIgZml4TWV0aG9kID0gZnVuY3Rpb24gKEtFWSkge1xuICAgIHZhciBmbiA9IHByb3RvW0tFWV07XG4gICAgcmVkZWZpbmUocHJvdG8sIEtFWSxcbiAgICAgIEtFWSA9PSAnZGVsZXRlJyA/IGZ1bmN0aW9uIChhKSB7XG4gICAgICAgIHJldHVybiBJU19XRUFLICYmICFpc09iamVjdChhKSA/IGZhbHNlIDogZm4uY2FsbCh0aGlzLCBhID09PSAwID8gMCA6IGEpO1xuICAgICAgfSA6IEtFWSA9PSAnaGFzJyA/IGZ1bmN0aW9uIGhhcyhhKSB7XG4gICAgICAgIHJldHVybiBJU19XRUFLICYmICFpc09iamVjdChhKSA/IGZhbHNlIDogZm4uY2FsbCh0aGlzLCBhID09PSAwID8gMCA6IGEpO1xuICAgICAgfSA6IEtFWSA9PSAnZ2V0JyA/IGZ1bmN0aW9uIGdldChhKSB7XG4gICAgICAgIHJldHVybiBJU19XRUFLICYmICFpc09iamVjdChhKSA/IHVuZGVmaW5lZCA6IGZuLmNhbGwodGhpcywgYSA9PT0gMCA/IDAgOiBhKTtcbiAgICAgIH0gOiBLRVkgPT0gJ2FkZCcgPyBmdW5jdGlvbiBhZGQoYSkgeyBmbi5jYWxsKHRoaXMsIGEgPT09IDAgPyAwIDogYSk7IHJldHVybiB0aGlzOyB9XG4gICAgICAgIDogZnVuY3Rpb24gc2V0KGEsIGIpIHsgZm4uY2FsbCh0aGlzLCBhID09PSAwID8gMCA6IGEsIGIpOyByZXR1cm4gdGhpczsgfVxuICAgICk7XG4gIH07XG4gIGlmICh0eXBlb2YgQyAhPSAnZnVuY3Rpb24nIHx8ICEoSVNfV0VBSyB8fCBwcm90by5mb3JFYWNoICYmICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgbmV3IEMoKS5lbnRyaWVzKCkubmV4dCgpO1xuICB9KSkpIHtcbiAgICAvLyBjcmVhdGUgY29sbGVjdGlvbiBjb25zdHJ1Y3RvclxuICAgIEMgPSBjb21tb24uZ2V0Q29uc3RydWN0b3Iod3JhcHBlciwgTkFNRSwgSVNfTUFQLCBBRERFUik7XG4gICAgcmVkZWZpbmVBbGwoQy5wcm90b3R5cGUsIG1ldGhvZHMpO1xuICAgIG1ldGEuTkVFRCA9IHRydWU7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGluc3RhbmNlID0gbmV3IEMoKTtcbiAgICAvLyBlYXJseSBpbXBsZW1lbnRhdGlvbnMgbm90IHN1cHBvcnRzIGNoYWluaW5nXG4gICAgdmFyIEhBU05UX0NIQUlOSU5HID0gaW5zdGFuY2VbQURERVJdKElTX1dFQUsgPyB7fSA6IC0wLCAxKSAhPSBpbnN0YW5jZTtcbiAgICAvLyBWOCB+ICBDaHJvbWl1bSA0MC0gd2Vhay1jb2xsZWN0aW9ucyB0aHJvd3Mgb24gcHJpbWl0aXZlcywgYnV0IHNob3VsZCByZXR1cm4gZmFsc2VcbiAgICB2YXIgVEhST1dTX09OX1BSSU1JVElWRVMgPSBmYWlscyhmdW5jdGlvbiAoKSB7IGluc3RhbmNlLmhhcygxKTsgfSk7XG4gICAgLy8gbW9zdCBlYXJseSBpbXBsZW1lbnRhdGlvbnMgZG9lc24ndCBzdXBwb3J0cyBpdGVyYWJsZXMsIG1vc3QgbW9kZXJuIC0gbm90IGNsb3NlIGl0IGNvcnJlY3RseVxuICAgIHZhciBBQ0NFUFRfSVRFUkFCTEVTID0gJGl0ZXJEZXRlY3QoZnVuY3Rpb24gKGl0ZXIpIHsgbmV3IEMoaXRlcik7IH0pOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgIC8vIGZvciBlYXJseSBpbXBsZW1lbnRhdGlvbnMgLTAgYW5kICswIG5vdCB0aGUgc2FtZVxuICAgIHZhciBCVUdHWV9aRVJPID0gIUlTX1dFQUsgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgICAgLy8gVjggfiBDaHJvbWl1bSA0Mi0gZmFpbHMgb25seSB3aXRoIDUrIGVsZW1lbnRzXG4gICAgICB2YXIgJGluc3RhbmNlID0gbmV3IEMoKTtcbiAgICAgIHZhciBpbmRleCA9IDU7XG4gICAgICB3aGlsZSAoaW5kZXgtLSkgJGluc3RhbmNlW0FEREVSXShpbmRleCwgaW5kZXgpO1xuICAgICAgcmV0dXJuICEkaW5zdGFuY2UuaGFzKC0wKTtcbiAgICB9KTtcbiAgICBpZiAoIUFDQ0VQVF9JVEVSQUJMRVMpIHtcbiAgICAgIEMgPSB3cmFwcGVyKGZ1bmN0aW9uICh0YXJnZXQsIGl0ZXJhYmxlKSB7XG4gICAgICAgIGFuSW5zdGFuY2UodGFyZ2V0LCBDLCBOQU1FKTtcbiAgICAgICAgdmFyIHRoYXQgPSBpbmhlcml0SWZSZXF1aXJlZChuZXcgQmFzZSgpLCB0YXJnZXQsIEMpO1xuICAgICAgICBpZiAoaXRlcmFibGUgIT0gdW5kZWZpbmVkKSBmb3JPZihpdGVyYWJsZSwgSVNfTUFQLCB0aGF0W0FEREVSXSwgdGhhdCk7XG4gICAgICAgIHJldHVybiB0aGF0O1xuICAgICAgfSk7XG4gICAgICBDLnByb3RvdHlwZSA9IHByb3RvO1xuICAgICAgcHJvdG8uY29uc3RydWN0b3IgPSBDO1xuICAgIH1cbiAgICBpZiAoVEhST1dTX09OX1BSSU1JVElWRVMgfHwgQlVHR1lfWkVSTykge1xuICAgICAgZml4TWV0aG9kKCdkZWxldGUnKTtcbiAgICAgIGZpeE1ldGhvZCgnaGFzJyk7XG4gICAgICBJU19NQVAgJiYgZml4TWV0aG9kKCdnZXQnKTtcbiAgICB9XG4gICAgaWYgKEJVR0dZX1pFUk8gfHwgSEFTTlRfQ0hBSU5JTkcpIGZpeE1ldGhvZChBRERFUik7XG4gICAgLy8gd2VhayBjb2xsZWN0aW9ucyBzaG91bGQgbm90IGNvbnRhaW5zIC5jbGVhciBtZXRob2RcbiAgICBpZiAoSVNfV0VBSyAmJiBwcm90by5jbGVhcikgZGVsZXRlIHByb3RvLmNsZWFyO1xuICB9XG5cbiAgc2V0VG9TdHJpbmdUYWcoQywgTkFNRSk7XG5cbiAgT1tOQU1FXSA9IEM7XG4gICRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5XICsgJGV4cG9ydC5GICogKEMgIT0gQmFzZSksIE8pO1xuXG4gIGlmICghSVNfV0VBSykgY29tbW9uLnNldFN0cm9uZyhDLCBOQU1FLCBJU19NQVApO1xuXG4gIHJldHVybiBDO1xufTtcbiIsInZhciBjb3JlID0gbW9kdWxlLmV4cG9ydHMgPSB7IHZlcnNpb246ICcyLjYuNCcgfTtcbmlmICh0eXBlb2YgX19lID09ICdudW1iZXInKSBfX2UgPSBjb3JlOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmXG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG52YXIgY3JlYXRlRGVzYyA9IHJlcXVpcmUoJy4vX3Byb3BlcnR5LWRlc2MnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBpbmRleCwgdmFsdWUpIHtcbiAgaWYgKGluZGV4IGluIG9iamVjdCkgJGRlZmluZVByb3BlcnR5LmYob2JqZWN0LCBpbmRleCwgY3JlYXRlRGVzYygwLCB2YWx1ZSkpO1xuICBlbHNlIG9iamVjdFtpbmRleF0gPSB2YWx1ZTtcbn07XG4iLCIvLyBvcHRpb25hbCAvIHNpbXBsZSBjb250ZXh0IGJpbmRpbmdcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChmbiwgdGhhdCwgbGVuZ3RoKSB7XG4gIGFGdW5jdGlvbihmbik7XG4gIGlmICh0aGF0ID09PSB1bmRlZmluZWQpIHJldHVybiBmbjtcbiAgc3dpdGNoIChsZW5ndGgpIHtcbiAgICBjYXNlIDE6IHJldHVybiBmdW5jdGlvbiAoYSkge1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSk7XG4gICAgfTtcbiAgICBjYXNlIDI6IHJldHVybiBmdW5jdGlvbiAoYSwgYikge1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSwgYik7XG4gICAgfTtcbiAgICBjYXNlIDM6IHJldHVybiBmdW5jdGlvbiAoYSwgYiwgYykge1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSwgYiwgYyk7XG4gICAgfTtcbiAgfVxuICByZXR1cm4gZnVuY3Rpb24gKC8qIC4uLmFyZ3MgKi8pIHtcbiAgICByZXR1cm4gZm4uYXBwbHkodGhhdCwgYXJndW1lbnRzKTtcbiAgfTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vLyAyMC4zLjQuMzYgLyAxNS45LjUuNDMgRGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmcoKVxudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciBnZXRUaW1lID0gRGF0ZS5wcm90b3R5cGUuZ2V0VGltZTtcbnZhciAkdG9JU09TdHJpbmcgPSBEYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZztcblxudmFyIGx6ID0gZnVuY3Rpb24gKG51bSkge1xuICByZXR1cm4gbnVtID4gOSA/IG51bSA6ICcwJyArIG51bTtcbn07XG5cbi8vIFBoYW50b21KUyAvIG9sZCBXZWJLaXQgaGFzIGEgYnJva2VuIGltcGxlbWVudGF0aW9uc1xubW9kdWxlLmV4cG9ydHMgPSAoZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gJHRvSVNPU3RyaW5nLmNhbGwobmV3IERhdGUoLTVlMTMgLSAxKSkgIT0gJzAzODUtMDctMjVUMDc6MDY6MzkuOTk5Wic7XG59KSB8fCAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAkdG9JU09TdHJpbmcuY2FsbChuZXcgRGF0ZShOYU4pKTtcbn0pKSA/IGZ1bmN0aW9uIHRvSVNPU3RyaW5nKCkge1xuICBpZiAoIWlzRmluaXRlKGdldFRpbWUuY2FsbCh0aGlzKSkpIHRocm93IFJhbmdlRXJyb3IoJ0ludmFsaWQgdGltZSB2YWx1ZScpO1xuICB2YXIgZCA9IHRoaXM7XG4gIHZhciB5ID0gZC5nZXRVVENGdWxsWWVhcigpO1xuICB2YXIgbSA9IGQuZ2V0VVRDTWlsbGlzZWNvbmRzKCk7XG4gIHZhciBzID0geSA8IDAgPyAnLScgOiB5ID4gOTk5OSA/ICcrJyA6ICcnO1xuICByZXR1cm4gcyArICgnMDAwMDAnICsgTWF0aC5hYnMoeSkpLnNsaWNlKHMgPyAtNiA6IC00KSArXG4gICAgJy0nICsgbHooZC5nZXRVVENNb250aCgpICsgMSkgKyAnLScgKyBseihkLmdldFVUQ0RhdGUoKSkgK1xuICAgICdUJyArIGx6KGQuZ2V0VVRDSG91cnMoKSkgKyAnOicgKyBseihkLmdldFVUQ01pbnV0ZXMoKSkgK1xuICAgICc6JyArIGx6KGQuZ2V0VVRDU2Vjb25kcygpKSArICcuJyArIChtID4gOTkgPyBtIDogJzAnICsgbHoobSkpICsgJ1onO1xufSA6ICR0b0lTT1N0cmluZztcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG52YXIgTlVNQkVSID0gJ251bWJlcic7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGhpbnQpIHtcbiAgaWYgKGhpbnQgIT09ICdzdHJpbmcnICYmIGhpbnQgIT09IE5VTUJFUiAmJiBoaW50ICE9PSAnZGVmYXVsdCcpIHRocm93IFR5cGVFcnJvcignSW5jb3JyZWN0IGhpbnQnKTtcbiAgcmV0dXJuIHRvUHJpbWl0aXZlKGFuT2JqZWN0KHRoaXMpLCBoaW50ICE9IE5VTUJFUik7XG59O1xuIiwiLy8gNy4yLjEgUmVxdWlyZU9iamVjdENvZXJjaWJsZShhcmd1bWVudClcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpdCA9PSB1bmRlZmluZWQpIHRocm93IFR5cGVFcnJvcihcIkNhbid0IGNhbGwgbWV0aG9kIG9uICBcIiArIGl0KTtcbiAgcmV0dXJuIGl0O1xufTtcbiIsIi8vIFRoYW5rJ3MgSUU4IGZvciBoaXMgZnVubnkgZGVmaW5lUHJvcGVydHlcbm1vZHVsZS5leHBvcnRzID0gIXJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCAnYScsIHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9IH0pLmEgIT0gNztcbn0pO1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgZG9jdW1lbnQgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5kb2N1bWVudDtcbi8vIHR5cGVvZiBkb2N1bWVudC5jcmVhdGVFbGVtZW50IGlzICdvYmplY3QnIGluIG9sZCBJRVxudmFyIGlzID0gaXNPYmplY3QoZG9jdW1lbnQpICYmIGlzT2JqZWN0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGlzID8gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChpdCkgOiB7fTtcbn07XG4iLCIvLyBJRSA4LSBkb24ndCBlbnVtIGJ1ZyBrZXlzXG5tb2R1bGUuZXhwb3J0cyA9IChcbiAgJ2NvbnN0cnVjdG9yLGhhc093blByb3BlcnR5LGlzUHJvdG90eXBlT2YscHJvcGVydHlJc0VudW1lcmFibGUsdG9Mb2NhbGVTdHJpbmcsdG9TdHJpbmcsdmFsdWVPZidcbikuc3BsaXQoJywnKTtcbiIsIi8vIGFsbCBlbnVtZXJhYmxlIG9iamVjdCBrZXlzLCBpbmNsdWRlcyBzeW1ib2xzXG52YXIgZ2V0S2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG52YXIgZ09QUyA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BzJyk7XG52YXIgcElFID0gcmVxdWlyZSgnLi9fb2JqZWN0LXBpZScpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIHJlc3VsdCA9IGdldEtleXMoaXQpO1xuICB2YXIgZ2V0U3ltYm9scyA9IGdPUFMuZjtcbiAgaWYgKGdldFN5bWJvbHMpIHtcbiAgICB2YXIgc3ltYm9scyA9IGdldFN5bWJvbHMoaXQpO1xuICAgIHZhciBpc0VudW0gPSBwSUUuZjtcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIGtleTtcbiAgICB3aGlsZSAoc3ltYm9scy5sZW5ndGggPiBpKSBpZiAoaXNFbnVtLmNhbGwoaXQsIGtleSA9IHN5bWJvbHNbaSsrXSkpIHJlc3VsdC5wdXNoKGtleSk7XG4gIH0gcmV0dXJuIHJlc3VsdDtcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgY29yZSA9IHJlcXVpcmUoJy4vX2NvcmUnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUnKTtcbnZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbnZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcblxudmFyICRleHBvcnQgPSBmdW5jdGlvbiAodHlwZSwgbmFtZSwgc291cmNlKSB7XG4gIHZhciBJU19GT1JDRUQgPSB0eXBlICYgJGV4cG9ydC5GO1xuICB2YXIgSVNfR0xPQkFMID0gdHlwZSAmICRleHBvcnQuRztcbiAgdmFyIElTX1NUQVRJQyA9IHR5cGUgJiAkZXhwb3J0LlM7XG4gIHZhciBJU19QUk9UTyA9IHR5cGUgJiAkZXhwb3J0LlA7XG4gIHZhciBJU19CSU5EID0gdHlwZSAmICRleHBvcnQuQjtcbiAgdmFyIHRhcmdldCA9IElTX0dMT0JBTCA/IGdsb2JhbCA6IElTX1NUQVRJQyA/IGdsb2JhbFtuYW1lXSB8fCAoZ2xvYmFsW25hbWVdID0ge30pIDogKGdsb2JhbFtuYW1lXSB8fCB7fSlbUFJPVE9UWVBFXTtcbiAgdmFyIGV4cG9ydHMgPSBJU19HTE9CQUwgPyBjb3JlIDogY29yZVtuYW1lXSB8fCAoY29yZVtuYW1lXSA9IHt9KTtcbiAgdmFyIGV4cFByb3RvID0gZXhwb3J0c1tQUk9UT1RZUEVdIHx8IChleHBvcnRzW1BST1RPVFlQRV0gPSB7fSk7XG4gIHZhciBrZXksIG93biwgb3V0LCBleHA7XG4gIGlmIChJU19HTE9CQUwpIHNvdXJjZSA9IG5hbWU7XG4gIGZvciAoa2V5IGluIHNvdXJjZSkge1xuICAgIC8vIGNvbnRhaW5zIGluIG5hdGl2ZVxuICAgIG93biA9ICFJU19GT1JDRUQgJiYgdGFyZ2V0ICYmIHRhcmdldFtrZXldICE9PSB1bmRlZmluZWQ7XG4gICAgLy8gZXhwb3J0IG5hdGl2ZSBvciBwYXNzZWRcbiAgICBvdXQgPSAob3duID8gdGFyZ2V0IDogc291cmNlKVtrZXldO1xuICAgIC8vIGJpbmQgdGltZXJzIHRvIGdsb2JhbCBmb3IgY2FsbCBmcm9tIGV4cG9ydCBjb250ZXh0XG4gICAgZXhwID0gSVNfQklORCAmJiBvd24gPyBjdHgob3V0LCBnbG9iYWwpIDogSVNfUFJPVE8gJiYgdHlwZW9mIG91dCA9PSAnZnVuY3Rpb24nID8gY3R4KEZ1bmN0aW9uLmNhbGwsIG91dCkgOiBvdXQ7XG4gICAgLy8gZXh0ZW5kIGdsb2JhbFxuICAgIGlmICh0YXJnZXQpIHJlZGVmaW5lKHRhcmdldCwga2V5LCBvdXQsIHR5cGUgJiAkZXhwb3J0LlUpO1xuICAgIC8vIGV4cG9ydFxuICAgIGlmIChleHBvcnRzW2tleV0gIT0gb3V0KSBoaWRlKGV4cG9ydHMsIGtleSwgZXhwKTtcbiAgICBpZiAoSVNfUFJPVE8gJiYgZXhwUHJvdG9ba2V5XSAhPSBvdXQpIGV4cFByb3RvW2tleV0gPSBvdXQ7XG4gIH1cbn07XG5nbG9iYWwuY29yZSA9IGNvcmU7XG4vLyB0eXBlIGJpdG1hcFxuJGV4cG9ydC5GID0gMTsgICAvLyBmb3JjZWRcbiRleHBvcnQuRyA9IDI7ICAgLy8gZ2xvYmFsXG4kZXhwb3J0LlMgPSA0OyAgIC8vIHN0YXRpY1xuJGV4cG9ydC5QID0gODsgICAvLyBwcm90b1xuJGV4cG9ydC5CID0gMTY7ICAvLyBiaW5kXG4kZXhwb3J0LlcgPSAzMjsgIC8vIHdyYXBcbiRleHBvcnQuVSA9IDY0OyAgLy8gc2FmZVxuJGV4cG9ydC5SID0gMTI4OyAvLyByZWFsIHByb3RvIG1ldGhvZCBmb3IgYGxpYnJhcnlgXG5tb2R1bGUuZXhwb3J0cyA9ICRleHBvcnQ7XG4iLCJ2YXIgTUFUQ0ggPSByZXF1aXJlKCcuL193a3MnKSgnbWF0Y2gnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEtFWSkge1xuICB2YXIgcmUgPSAvLi87XG4gIHRyeSB7XG4gICAgJy8uLydbS0VZXShyZSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB0cnkge1xuICAgICAgcmVbTUFUQ0hdID0gZmFsc2U7XG4gICAgICByZXR1cm4gIScvLi8nW0tFWV0ocmUpO1xuICAgIH0gY2F0Y2ggKGYpIHsgLyogZW1wdHkgKi8gfVxuICB9IHJldHVybiB0cnVlO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gISFleGVjKCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4vZXM2LnJlZ2V4cC5leGVjJyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG52YXIgd2tzID0gcmVxdWlyZSgnLi9fd2tzJyk7XG52YXIgcmVnZXhwRXhlYyA9IHJlcXVpcmUoJy4vX3JlZ2V4cC1leGVjJyk7XG5cbnZhciBTUEVDSUVTID0gd2tzKCdzcGVjaWVzJyk7XG5cbnZhciBSRVBMQUNFX1NVUFBPUlRTX05BTUVEX0dST1VQUyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vICNyZXBsYWNlIG5lZWRzIGJ1aWx0LWluIHN1cHBvcnQgZm9yIG5hbWVkIGdyb3Vwcy5cbiAgLy8gI21hdGNoIHdvcmtzIGZpbmUgYmVjYXVzZSBpdCBqdXN0IHJldHVybiB0aGUgZXhlYyByZXN1bHRzLCBldmVuIGlmIGl0IGhhc1xuICAvLyBhIFwiZ3JvcHNcIiBwcm9wZXJ0eS5cbiAgdmFyIHJlID0gLy4vO1xuICByZS5leGVjID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICByZXN1bHQuZ3JvdXBzID0geyBhOiAnNycgfTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuICByZXR1cm4gJycucmVwbGFjZShyZSwgJyQ8YT4nKSAhPT0gJzcnO1xufSk7XG5cbnZhciBTUExJVF9XT1JLU19XSVRIX09WRVJXUklUVEVOX0VYRUMgPSAoZnVuY3Rpb24gKCkge1xuICAvLyBDaHJvbWUgNTEgaGFzIGEgYnVnZ3kgXCJzcGxpdFwiIGltcGxlbWVudGF0aW9uIHdoZW4gUmVnRXhwI2V4ZWMgIT09IG5hdGl2ZUV4ZWNcbiAgdmFyIHJlID0gLyg/OikvO1xuICB2YXIgb3JpZ2luYWxFeGVjID0gcmUuZXhlYztcbiAgcmUuZXhlYyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG9yaWdpbmFsRXhlYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9O1xuICB2YXIgcmVzdWx0ID0gJ2FiJy5zcGxpdChyZSk7XG4gIHJldHVybiByZXN1bHQubGVuZ3RoID09PSAyICYmIHJlc3VsdFswXSA9PT0gJ2EnICYmIHJlc3VsdFsxXSA9PT0gJ2InO1xufSkoKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoS0VZLCBsZW5ndGgsIGV4ZWMpIHtcbiAgdmFyIFNZTUJPTCA9IHdrcyhLRVkpO1xuXG4gIHZhciBERUxFR0FURVNfVE9fU1lNQk9MID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAvLyBTdHJpbmcgbWV0aG9kcyBjYWxsIHN5bWJvbC1uYW1lZCBSZWdFcCBtZXRob2RzXG4gICAgdmFyIE8gPSB7fTtcbiAgICBPW1NZTUJPTF0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9O1xuICAgIHJldHVybiAnJ1tLRVldKE8pICE9IDc7XG4gIH0pO1xuXG4gIHZhciBERUxFR0FURVNfVE9fRVhFQyA9IERFTEVHQVRFU19UT19TWU1CT0wgPyAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIC8vIFN5bWJvbC1uYW1lZCBSZWdFeHAgbWV0aG9kcyBjYWxsIC5leGVjXG4gICAgdmFyIGV4ZWNDYWxsZWQgPSBmYWxzZTtcbiAgICB2YXIgcmUgPSAvYS87XG4gICAgcmUuZXhlYyA9IGZ1bmN0aW9uICgpIHsgZXhlY0NhbGxlZCA9IHRydWU7IHJldHVybiBudWxsOyB9O1xuICAgIGlmIChLRVkgPT09ICdzcGxpdCcpIHtcbiAgICAgIC8vIFJlZ0V4cFtAQHNwbGl0XSBkb2Vzbid0IGNhbGwgdGhlIHJlZ2V4J3MgZXhlYyBtZXRob2QsIGJ1dCBmaXJzdCBjcmVhdGVzXG4gICAgICAvLyBhIG5ldyBvbmUuIFdlIG5lZWQgdG8gcmV0dXJuIHRoZSBwYXRjaGVkIHJlZ2V4IHdoZW4gY3JlYXRpbmcgdGhlIG5ldyBvbmUuXG4gICAgICByZS5jb25zdHJ1Y3RvciA9IHt9O1xuICAgICAgcmUuY29uc3RydWN0b3JbU1BFQ0lFU10gPSBmdW5jdGlvbiAoKSB7IHJldHVybiByZTsgfTtcbiAgICB9XG4gICAgcmVbU1lNQk9MXSgnJyk7XG4gICAgcmV0dXJuICFleGVjQ2FsbGVkO1xuICB9KSA6IHVuZGVmaW5lZDtcblxuICBpZiAoXG4gICAgIURFTEVHQVRFU19UT19TWU1CT0wgfHxcbiAgICAhREVMRUdBVEVTX1RPX0VYRUMgfHxcbiAgICAoS0VZID09PSAncmVwbGFjZScgJiYgIVJFUExBQ0VfU1VQUE9SVFNfTkFNRURfR1JPVVBTKSB8fFxuICAgIChLRVkgPT09ICdzcGxpdCcgJiYgIVNQTElUX1dPUktTX1dJVEhfT1ZFUldSSVRURU5fRVhFQylcbiAgKSB7XG4gICAgdmFyIG5hdGl2ZVJlZ0V4cE1ldGhvZCA9IC8uL1tTWU1CT0xdO1xuICAgIHZhciBmbnMgPSBleGVjKFxuICAgICAgZGVmaW5lZCxcbiAgICAgIFNZTUJPTCxcbiAgICAgICcnW0tFWV0sXG4gICAgICBmdW5jdGlvbiBtYXliZUNhbGxOYXRpdmUobmF0aXZlTWV0aG9kLCByZWdleHAsIHN0ciwgYXJnMiwgZm9yY2VTdHJpbmdNZXRob2QpIHtcbiAgICAgICAgaWYgKHJlZ2V4cC5leGVjID09PSByZWdleHBFeGVjKSB7XG4gICAgICAgICAgaWYgKERFTEVHQVRFU19UT19TWU1CT0wgJiYgIWZvcmNlU3RyaW5nTWV0aG9kKSB7XG4gICAgICAgICAgICAvLyBUaGUgbmF0aXZlIFN0cmluZyBtZXRob2QgYWxyZWFkeSBkZWxlZ2F0ZXMgdG8gQEBtZXRob2QgKHRoaXNcbiAgICAgICAgICAgIC8vIHBvbHlmaWxsZWQgZnVuY3Rpb24pLCBsZWFzaW5nIHRvIGluZmluaXRlIHJlY3Vyc2lvbi5cbiAgICAgICAgICAgIC8vIFdlIGF2b2lkIGl0IGJ5IGRpcmVjdGx5IGNhbGxpbmcgdGhlIG5hdGl2ZSBAQG1ldGhvZCBtZXRob2QuXG4gICAgICAgICAgICByZXR1cm4geyBkb25lOiB0cnVlLCB2YWx1ZTogbmF0aXZlUmVnRXhwTWV0aG9kLmNhbGwocmVnZXhwLCBzdHIsIGFyZzIpIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB7IGRvbmU6IHRydWUsIHZhbHVlOiBuYXRpdmVNZXRob2QuY2FsbChzdHIsIHJlZ2V4cCwgYXJnMikgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBkb25lOiBmYWxzZSB9O1xuICAgICAgfVxuICAgICk7XG4gICAgdmFyIHN0cmZuID0gZm5zWzBdO1xuICAgIHZhciByeGZuID0gZm5zWzFdO1xuXG4gICAgcmVkZWZpbmUoU3RyaW5nLnByb3RvdHlwZSwgS0VZLCBzdHJmbik7XG4gICAgaGlkZShSZWdFeHAucHJvdG90eXBlLCBTWU1CT0wsIGxlbmd0aCA9PSAyXG4gICAgICAvLyAyMS4yLjUuOCBSZWdFeHAucHJvdG90eXBlW0BAcmVwbGFjZV0oc3RyaW5nLCByZXBsYWNlVmFsdWUpXG4gICAgICAvLyAyMS4yLjUuMTEgUmVnRXhwLnByb3RvdHlwZVtAQHNwbGl0XShzdHJpbmcsIGxpbWl0KVxuICAgICAgPyBmdW5jdGlvbiAoc3RyaW5nLCBhcmcpIHsgcmV0dXJuIHJ4Zm4uY2FsbChzdHJpbmcsIHRoaXMsIGFyZyk7IH1cbiAgICAgIC8vIDIxLjIuNS42IFJlZ0V4cC5wcm90b3R5cGVbQEBtYXRjaF0oc3RyaW5nKVxuICAgICAgLy8gMjEuMi41LjkgUmVnRXhwLnByb3RvdHlwZVtAQHNlYXJjaF0oc3RyaW5nKVxuICAgICAgOiBmdW5jdGlvbiAoc3RyaW5nKSB7IHJldHVybiByeGZuLmNhbGwoc3RyaW5nLCB0aGlzKTsgfVxuICAgICk7XG4gIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG4vLyAyMS4yLjUuMyBnZXQgUmVnRXhwLnByb3RvdHlwZS5mbGFnc1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHRoYXQgPSBhbk9iamVjdCh0aGlzKTtcbiAgdmFyIHJlc3VsdCA9ICcnO1xuICBpZiAodGhhdC5nbG9iYWwpIHJlc3VsdCArPSAnZyc7XG4gIGlmICh0aGF0Lmlnbm9yZUNhc2UpIHJlc3VsdCArPSAnaSc7XG4gIGlmICh0aGF0Lm11bHRpbGluZSkgcmVzdWx0ICs9ICdtJztcbiAgaWYgKHRoYXQudW5pY29kZSkgcmVzdWx0ICs9ICd1JztcbiAgaWYgKHRoYXQuc3RpY2t5KSByZXN1bHQgKz0gJ3knO1xuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtZmxhdE1hcC8jc2VjLUZsYXR0ZW5JbnRvQXJyYXlcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi9faXMtYXJyYXknKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgSVNfQ09OQ0FUX1NQUkVBREFCTEUgPSByZXF1aXJlKCcuL193a3MnKSgnaXNDb25jYXRTcHJlYWRhYmxlJyk7XG5cbmZ1bmN0aW9uIGZsYXR0ZW5JbnRvQXJyYXkodGFyZ2V0LCBvcmlnaW5hbCwgc291cmNlLCBzb3VyY2VMZW4sIHN0YXJ0LCBkZXB0aCwgbWFwcGVyLCB0aGlzQXJnKSB7XG4gIHZhciB0YXJnZXRJbmRleCA9IHN0YXJ0O1xuICB2YXIgc291cmNlSW5kZXggPSAwO1xuICB2YXIgbWFwRm4gPSBtYXBwZXIgPyBjdHgobWFwcGVyLCB0aGlzQXJnLCAzKSA6IGZhbHNlO1xuICB2YXIgZWxlbWVudCwgc3ByZWFkYWJsZTtcblxuICB3aGlsZSAoc291cmNlSW5kZXggPCBzb3VyY2VMZW4pIHtcbiAgICBpZiAoc291cmNlSW5kZXggaW4gc291cmNlKSB7XG4gICAgICBlbGVtZW50ID0gbWFwRm4gPyBtYXBGbihzb3VyY2Vbc291cmNlSW5kZXhdLCBzb3VyY2VJbmRleCwgb3JpZ2luYWwpIDogc291cmNlW3NvdXJjZUluZGV4XTtcblxuICAgICAgc3ByZWFkYWJsZSA9IGZhbHNlO1xuICAgICAgaWYgKGlzT2JqZWN0KGVsZW1lbnQpKSB7XG4gICAgICAgIHNwcmVhZGFibGUgPSBlbGVtZW50W0lTX0NPTkNBVF9TUFJFQURBQkxFXTtcbiAgICAgICAgc3ByZWFkYWJsZSA9IHNwcmVhZGFibGUgIT09IHVuZGVmaW5lZCA/ICEhc3ByZWFkYWJsZSA6IGlzQXJyYXkoZWxlbWVudCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChzcHJlYWRhYmxlICYmIGRlcHRoID4gMCkge1xuICAgICAgICB0YXJnZXRJbmRleCA9IGZsYXR0ZW5JbnRvQXJyYXkodGFyZ2V0LCBvcmlnaW5hbCwgZWxlbWVudCwgdG9MZW5ndGgoZWxlbWVudC5sZW5ndGgpLCB0YXJnZXRJbmRleCwgZGVwdGggLSAxKSAtIDE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodGFyZ2V0SW5kZXggPj0gMHgxZmZmZmZmZmZmZmZmZikgdGhyb3cgVHlwZUVycm9yKCk7XG4gICAgICAgIHRhcmdldFt0YXJnZXRJbmRleF0gPSBlbGVtZW50O1xuICAgICAgfVxuXG4gICAgICB0YXJnZXRJbmRleCsrO1xuICAgIH1cbiAgICBzb3VyY2VJbmRleCsrO1xuICB9XG4gIHJldHVybiB0YXJnZXRJbmRleDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmbGF0dGVuSW50b0FycmF5O1xuIiwidmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuL19pdGVyLWNhbGwnKTtcbnZhciBpc0FycmF5SXRlciA9IHJlcXVpcmUoJy4vX2lzLWFycmF5LWl0ZXInKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgZ2V0SXRlckZuID0gcmVxdWlyZSgnLi9jb3JlLmdldC1pdGVyYXRvci1tZXRob2QnKTtcbnZhciBCUkVBSyA9IHt9O1xudmFyIFJFVFVSTiA9IHt9O1xudmFyIGV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVyYWJsZSwgZW50cmllcywgZm4sIHRoYXQsIElURVJBVE9SKSB7XG4gIHZhciBpdGVyRm4gPSBJVEVSQVRPUiA/IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGl0ZXJhYmxlOyB9IDogZ2V0SXRlckZuKGl0ZXJhYmxlKTtcbiAgdmFyIGYgPSBjdHgoZm4sIHRoYXQsIGVudHJpZXMgPyAyIDogMSk7XG4gIHZhciBpbmRleCA9IDA7XG4gIHZhciBsZW5ndGgsIHN0ZXAsIGl0ZXJhdG9yLCByZXN1bHQ7XG4gIGlmICh0eXBlb2YgaXRlckZuICE9ICdmdW5jdGlvbicpIHRocm93IFR5cGVFcnJvcihpdGVyYWJsZSArICcgaXMgbm90IGl0ZXJhYmxlIScpO1xuICAvLyBmYXN0IGNhc2UgZm9yIGFycmF5cyB3aXRoIGRlZmF1bHQgaXRlcmF0b3JcbiAgaWYgKGlzQXJyYXlJdGVyKGl0ZXJGbikpIGZvciAobGVuZ3RoID0gdG9MZW5ndGgoaXRlcmFibGUubGVuZ3RoKTsgbGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIHtcbiAgICByZXN1bHQgPSBlbnRyaWVzID8gZihhbk9iamVjdChzdGVwID0gaXRlcmFibGVbaW5kZXhdKVswXSwgc3RlcFsxXSkgOiBmKGl0ZXJhYmxlW2luZGV4XSk7XG4gICAgaWYgKHJlc3VsdCA9PT0gQlJFQUsgfHwgcmVzdWx0ID09PSBSRVRVUk4pIHJldHVybiByZXN1bHQ7XG4gIH0gZWxzZSBmb3IgKGl0ZXJhdG9yID0gaXRlckZuLmNhbGwoaXRlcmFibGUpOyAhKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmU7KSB7XG4gICAgcmVzdWx0ID0gY2FsbChpdGVyYXRvciwgZiwgc3RlcC52YWx1ZSwgZW50cmllcyk7XG4gICAgaWYgKHJlc3VsdCA9PT0gQlJFQUsgfHwgcmVzdWx0ID09PSBSRVRVUk4pIHJldHVybiByZXN1bHQ7XG4gIH1cbn07XG5leHBvcnRzLkJSRUFLID0gQlJFQUs7XG5leHBvcnRzLlJFVFVSTiA9IFJFVFVSTjtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fc2hhcmVkJykoJ25hdGl2ZS1mdW5jdGlvbi10by1zdHJpbmcnLCBGdW5jdGlvbi50b1N0cmluZyk7XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvODYjaXNzdWVjb21tZW50LTExNTc1OTAyOFxudmFyIGdsb2JhbCA9IG1vZHVsZS5leHBvcnRzID0gdHlwZW9mIHdpbmRvdyAhPSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuTWF0aCA9PSBNYXRoXG4gID8gd2luZG93IDogdHlwZW9mIHNlbGYgIT0gJ3VuZGVmaW5lZCcgJiYgc2VsZi5NYXRoID09IE1hdGggPyBzZWxmXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXctZnVuY1xuICA6IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG5pZiAodHlwZW9mIF9fZyA9PSAnbnVtYmVyJykgX19nID0gZ2xvYmFsOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmXG4iLCJ2YXIgaGFzT3duUHJvcGVydHkgPSB7fS5oYXNPd25Qcm9wZXJ0eTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBrZXkpIHtcbiAgcmV0dXJuIGhhc093blByb3BlcnR5LmNhbGwoaXQsIGtleSk7XG59O1xuIiwidmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG52YXIgY3JlYXRlRGVzYyA9IHJlcXVpcmUoJy4vX3Byb3BlcnR5LWRlc2MnKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSA/IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIGRQLmYob2JqZWN0LCBrZXksIGNyZWF0ZURlc2MoMSwgdmFsdWUpKTtcbn0gOiBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIG9iamVjdFtrZXldID0gdmFsdWU7XG4gIHJldHVybiBvYmplY3Q7XG59O1xuIiwidmFyIGRvY3VtZW50ID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykuZG9jdW1lbnQ7XG5tb2R1bGUuZXhwb3J0cyA9IGRvY3VtZW50ICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiIsIm1vZHVsZS5leHBvcnRzID0gIXJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgIXJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHJlcXVpcmUoJy4vX2RvbS1jcmVhdGUnKSgnZGl2JyksICdhJywgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH0gfSkuYSAhPSA3O1xufSk7XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBzZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX3NldC1wcm90bycpLnNldDtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRoYXQsIHRhcmdldCwgQykge1xuICB2YXIgUyA9IHRhcmdldC5jb25zdHJ1Y3RvcjtcbiAgdmFyIFA7XG4gIGlmIChTICE9PSBDICYmIHR5cGVvZiBTID09ICdmdW5jdGlvbicgJiYgKFAgPSBTLnByb3RvdHlwZSkgIT09IEMucHJvdG90eXBlICYmIGlzT2JqZWN0KFApICYmIHNldFByb3RvdHlwZU9mKSB7XG4gICAgc2V0UHJvdG90eXBlT2YodGhhdCwgUCk7XG4gIH0gcmV0dXJuIHRoYXQ7XG59O1xuIiwiLy8gZmFzdCBhcHBseSwgaHR0cDovL2pzcGVyZi5sbmtpdC5jb20vZmFzdC1hcHBseS81XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChmbiwgYXJncywgdGhhdCkge1xuICB2YXIgdW4gPSB0aGF0ID09PSB1bmRlZmluZWQ7XG4gIHN3aXRjaCAoYXJncy5sZW5ndGgpIHtcbiAgICBjYXNlIDA6IHJldHVybiB1biA/IGZuKClcbiAgICAgICAgICAgICAgICAgICAgICA6IGZuLmNhbGwodGhhdCk7XG4gICAgY2FzZSAxOiByZXR1cm4gdW4gPyBmbihhcmdzWzBdKVxuICAgICAgICAgICAgICAgICAgICAgIDogZm4uY2FsbCh0aGF0LCBhcmdzWzBdKTtcbiAgICBjYXNlIDI6IHJldHVybiB1biA/IGZuKGFyZ3NbMF0sIGFyZ3NbMV0pXG4gICAgICAgICAgICAgICAgICAgICAgOiBmbi5jYWxsKHRoYXQsIGFyZ3NbMF0sIGFyZ3NbMV0pO1xuICAgIGNhc2UgMzogcmV0dXJuIHVuID8gZm4oYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSlcbiAgICAgICAgICAgICAgICAgICAgICA6IGZuLmNhbGwodGhhdCwgYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSk7XG4gICAgY2FzZSA0OiByZXR1cm4gdW4gPyBmbihhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdKVxuICAgICAgICAgICAgICAgICAgICAgIDogZm4uY2FsbCh0aGF0LCBhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdKTtcbiAgfSByZXR1cm4gZm4uYXBwbHkodGhhdCwgYXJncyk7XG59O1xuIiwiLy8gZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBhbmQgbm9uLWVudW1lcmFibGUgb2xkIFY4IHN0cmluZ3NcbnZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0KCd6JykucHJvcGVydHlJc0VudW1lcmFibGUoMCkgPyBPYmplY3QgOiBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGNvZihpdCkgPT0gJ1N0cmluZycgPyBpdC5zcGxpdCgnJykgOiBPYmplY3QoaXQpO1xufTtcbiIsIi8vIGNoZWNrIG9uIGRlZmF1bHQgQXJyYXkgaXRlcmF0b3JcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuL19pdGVyYXRvcnMnKTtcbnZhciBJVEVSQVRPUiA9IHJlcXVpcmUoJy4vX3drcycpKCdpdGVyYXRvcicpO1xudmFyIEFycmF5UHJvdG8gPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCAhPT0gdW5kZWZpbmVkICYmIChJdGVyYXRvcnMuQXJyYXkgPT09IGl0IHx8IEFycmF5UHJvdG9bSVRFUkFUT1JdID09PSBpdCk7XG59O1xuIiwiLy8gNy4yLjIgSXNBcnJheShhcmd1bWVudClcbnZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcbm1vZHVsZS5leHBvcnRzID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiBpc0FycmF5KGFyZykge1xuICByZXR1cm4gY29mKGFyZykgPT0gJ0FycmF5Jztcbn07XG4iLCIvLyAyMC4xLjIuMyBOdW1iZXIuaXNJbnRlZ2VyKG51bWJlcilcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNJbnRlZ2VyKGl0KSB7XG4gIHJldHVybiAhaXNPYmplY3QoaXQpICYmIGlzRmluaXRlKGl0KSAmJiBmbG9vcihpdCkgPT09IGl0O1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT09ICdvYmplY3QnID8gaXQgIT09IG51bGwgOiB0eXBlb2YgaXQgPT09ICdmdW5jdGlvbic7XG59O1xuIiwiLy8gNy4yLjggSXNSZWdFeHAoYXJndW1lbnQpXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcbnZhciBNQVRDSCA9IHJlcXVpcmUoJy4vX3drcycpKCdtYXRjaCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIGlzUmVnRXhwO1xuICByZXR1cm4gaXNPYmplY3QoaXQpICYmICgoaXNSZWdFeHAgPSBpdFtNQVRDSF0pICE9PSB1bmRlZmluZWQgPyAhIWlzUmVnRXhwIDogY29mKGl0KSA9PSAnUmVnRXhwJyk7XG59O1xuIiwiLy8gY2FsbCBzb21ldGhpbmcgb24gaXRlcmF0b3Igc3RlcCB3aXRoIHNhZmUgY2xvc2luZyBvbiBlcnJvclxudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVyYXRvciwgZm4sIHZhbHVlLCBlbnRyaWVzKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGVudHJpZXMgPyBmbihhbk9iamVjdCh2YWx1ZSlbMF0sIHZhbHVlWzFdKSA6IGZuKHZhbHVlKTtcbiAgLy8gNy40LjYgSXRlcmF0b3JDbG9zZShpdGVyYXRvciwgY29tcGxldGlvbilcbiAgfSBjYXRjaCAoZSkge1xuICAgIHZhciByZXQgPSBpdGVyYXRvclsncmV0dXJuJ107XG4gICAgaWYgKHJldCAhPT0gdW5kZWZpbmVkKSBhbk9iamVjdChyZXQuY2FsbChpdGVyYXRvcikpO1xuICAgIHRocm93IGU7XG4gIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi9fb2JqZWN0LWNyZWF0ZScpO1xudmFyIGRlc2NyaXB0b3IgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuL19zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIEl0ZXJhdG9yUHJvdG90eXBlID0ge307XG5cbi8vIDI1LjEuMi4xLjEgJUl0ZXJhdG9yUHJvdG90eXBlJVtAQGl0ZXJhdG9yXSgpXG5yZXF1aXJlKCcuL19oaWRlJykoSXRlcmF0b3JQcm90b3R5cGUsIHJlcXVpcmUoJy4vX3drcycpKCdpdGVyYXRvcicpLCBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9KTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIE5BTUUsIG5leHQpIHtcbiAgQ29uc3RydWN0b3IucHJvdG90eXBlID0gY3JlYXRlKEl0ZXJhdG9yUHJvdG90eXBlLCB7IG5leHQ6IGRlc2NyaXB0b3IoMSwgbmV4dCkgfSk7XG4gIHNldFRvU3RyaW5nVGFnKENvbnN0cnVjdG9yLCBOQU1FICsgJyBJdGVyYXRvcicpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBMSUJSQVJZID0gcmVxdWlyZSgnLi9fbGlicmFyeScpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuL19pdGVyYXRvcnMnKTtcbnZhciAkaXRlckNyZWF0ZSA9IHJlcXVpcmUoJy4vX2l0ZXItY3JlYXRlJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuL19zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIElURVJBVE9SID0gcmVxdWlyZSgnLi9fd2tzJykoJ2l0ZXJhdG9yJyk7XG52YXIgQlVHR1kgPSAhKFtdLmtleXMgJiYgJ25leHQnIGluIFtdLmtleXMoKSk7IC8vIFNhZmFyaSBoYXMgYnVnZ3kgaXRlcmF0b3JzIHcvbyBgbmV4dGBcbnZhciBGRl9JVEVSQVRPUiA9ICdAQGl0ZXJhdG9yJztcbnZhciBLRVlTID0gJ2tleXMnO1xudmFyIFZBTFVFUyA9ICd2YWx1ZXMnO1xuXG52YXIgcmV0dXJuVGhpcyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEJhc2UsIE5BTUUsIENvbnN0cnVjdG9yLCBuZXh0LCBERUZBVUxULCBJU19TRVQsIEZPUkNFRCkge1xuICAkaXRlckNyZWF0ZShDb25zdHJ1Y3RvciwgTkFNRSwgbmV4dCk7XG4gIHZhciBnZXRNZXRob2QgPSBmdW5jdGlvbiAoa2luZCkge1xuICAgIGlmICghQlVHR1kgJiYga2luZCBpbiBwcm90bykgcmV0dXJuIHByb3RvW2tpbmRdO1xuICAgIHN3aXRjaCAoa2luZCkge1xuICAgICAgY2FzZSBLRVlTOiByZXR1cm4gZnVuY3Rpb24ga2V5cygpIHsgcmV0dXJuIG5ldyBDb25zdHJ1Y3Rvcih0aGlzLCBraW5kKTsgfTtcbiAgICAgIGNhc2UgVkFMVUVTOiByZXR1cm4gZnVuY3Rpb24gdmFsdWVzKCkgeyByZXR1cm4gbmV3IENvbnN0cnVjdG9yKHRoaXMsIGtpbmQpOyB9O1xuICAgIH0gcmV0dXJuIGZ1bmN0aW9uIGVudHJpZXMoKSB7IHJldHVybiBuZXcgQ29uc3RydWN0b3IodGhpcywga2luZCk7IH07XG4gIH07XG4gIHZhciBUQUcgPSBOQU1FICsgJyBJdGVyYXRvcic7XG4gIHZhciBERUZfVkFMVUVTID0gREVGQVVMVCA9PSBWQUxVRVM7XG4gIHZhciBWQUxVRVNfQlVHID0gZmFsc2U7XG4gIHZhciBwcm90byA9IEJhc2UucHJvdG90eXBlO1xuICB2YXIgJG5hdGl2ZSA9IHByb3RvW0lURVJBVE9SXSB8fCBwcm90b1tGRl9JVEVSQVRPUl0gfHwgREVGQVVMVCAmJiBwcm90b1tERUZBVUxUXTtcbiAgdmFyICRkZWZhdWx0ID0gJG5hdGl2ZSB8fCBnZXRNZXRob2QoREVGQVVMVCk7XG4gIHZhciAkZW50cmllcyA9IERFRkFVTFQgPyAhREVGX1ZBTFVFUyA/ICRkZWZhdWx0IDogZ2V0TWV0aG9kKCdlbnRyaWVzJykgOiB1bmRlZmluZWQ7XG4gIHZhciAkYW55TmF0aXZlID0gTkFNRSA9PSAnQXJyYXknID8gcHJvdG8uZW50cmllcyB8fCAkbmF0aXZlIDogJG5hdGl2ZTtcbiAgdmFyIG1ldGhvZHMsIGtleSwgSXRlcmF0b3JQcm90b3R5cGU7XG4gIC8vIEZpeCBuYXRpdmVcbiAgaWYgKCRhbnlOYXRpdmUpIHtcbiAgICBJdGVyYXRvclByb3RvdHlwZSA9IGdldFByb3RvdHlwZU9mKCRhbnlOYXRpdmUuY2FsbChuZXcgQmFzZSgpKSk7XG4gICAgaWYgKEl0ZXJhdG9yUHJvdG90eXBlICE9PSBPYmplY3QucHJvdG90eXBlICYmIEl0ZXJhdG9yUHJvdG90eXBlLm5leHQpIHtcbiAgICAgIC8vIFNldCBAQHRvU3RyaW5nVGFnIHRvIG5hdGl2ZSBpdGVyYXRvcnNcbiAgICAgIHNldFRvU3RyaW5nVGFnKEl0ZXJhdG9yUHJvdG90eXBlLCBUQUcsIHRydWUpO1xuICAgICAgLy8gZml4IGZvciBzb21lIG9sZCBlbmdpbmVzXG4gICAgICBpZiAoIUxJQlJBUlkgJiYgdHlwZW9mIEl0ZXJhdG9yUHJvdG90eXBlW0lURVJBVE9SXSAhPSAnZnVuY3Rpb24nKSBoaWRlKEl0ZXJhdG9yUHJvdG90eXBlLCBJVEVSQVRPUiwgcmV0dXJuVGhpcyk7XG4gICAgfVxuICB9XG4gIC8vIGZpeCBBcnJheSN7dmFsdWVzLCBAQGl0ZXJhdG9yfS5uYW1lIGluIFY4IC8gRkZcbiAgaWYgKERFRl9WQUxVRVMgJiYgJG5hdGl2ZSAmJiAkbmF0aXZlLm5hbWUgIT09IFZBTFVFUykge1xuICAgIFZBTFVFU19CVUcgPSB0cnVlO1xuICAgICRkZWZhdWx0ID0gZnVuY3Rpb24gdmFsdWVzKCkgeyByZXR1cm4gJG5hdGl2ZS5jYWxsKHRoaXMpOyB9O1xuICB9XG4gIC8vIERlZmluZSBpdGVyYXRvclxuICBpZiAoKCFMSUJSQVJZIHx8IEZPUkNFRCkgJiYgKEJVR0dZIHx8IFZBTFVFU19CVUcgfHwgIXByb3RvW0lURVJBVE9SXSkpIHtcbiAgICBoaWRlKHByb3RvLCBJVEVSQVRPUiwgJGRlZmF1bHQpO1xuICB9XG4gIC8vIFBsdWcgZm9yIGxpYnJhcnlcbiAgSXRlcmF0b3JzW05BTUVdID0gJGRlZmF1bHQ7XG4gIEl0ZXJhdG9yc1tUQUddID0gcmV0dXJuVGhpcztcbiAgaWYgKERFRkFVTFQpIHtcbiAgICBtZXRob2RzID0ge1xuICAgICAgdmFsdWVzOiBERUZfVkFMVUVTID8gJGRlZmF1bHQgOiBnZXRNZXRob2QoVkFMVUVTKSxcbiAgICAgIGtleXM6IElTX1NFVCA/ICRkZWZhdWx0IDogZ2V0TWV0aG9kKEtFWVMpLFxuICAgICAgZW50cmllczogJGVudHJpZXNcbiAgICB9O1xuICAgIGlmIChGT1JDRUQpIGZvciAoa2V5IGluIG1ldGhvZHMpIHtcbiAgICAgIGlmICghKGtleSBpbiBwcm90bykpIHJlZGVmaW5lKHByb3RvLCBrZXksIG1ldGhvZHNba2V5XSk7XG4gICAgfSBlbHNlICRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogKEJVR0dZIHx8IFZBTFVFU19CVUcpLCBOQU1FLCBtZXRob2RzKTtcbiAgfVxuICByZXR1cm4gbWV0aG9kcztcbn07XG4iLCJ2YXIgSVRFUkFUT1IgPSByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKTtcbnZhciBTQUZFX0NMT1NJTkcgPSBmYWxzZTtcblxudHJ5IHtcbiAgdmFyIHJpdGVyID0gWzddW0lURVJBVE9SXSgpO1xuICByaXRlclsncmV0dXJuJ10gPSBmdW5jdGlvbiAoKSB7IFNBRkVfQ0xPU0lORyA9IHRydWU7IH07XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby10aHJvdy1saXRlcmFsXG4gIEFycmF5LmZyb20ocml0ZXIsIGZ1bmN0aW9uICgpIHsgdGhyb3cgMjsgfSk7XG59IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYywgc2tpcENsb3NpbmcpIHtcbiAgaWYgKCFza2lwQ2xvc2luZyAmJiAhU0FGRV9DTE9TSU5HKSByZXR1cm4gZmFsc2U7XG4gIHZhciBzYWZlID0gZmFsc2U7XG4gIHRyeSB7XG4gICAgdmFyIGFyciA9IFs3XTtcbiAgICB2YXIgaXRlciA9IGFycltJVEVSQVRPUl0oKTtcbiAgICBpdGVyLm5leHQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB7IGRvbmU6IHNhZmUgPSB0cnVlIH07IH07XG4gICAgYXJyW0lURVJBVE9SXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGl0ZXI7IH07XG4gICAgZXhlYyhhcnIpO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbiAgcmV0dXJuIHNhZmU7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZG9uZSwgdmFsdWUpIHtcbiAgcmV0dXJuIHsgdmFsdWU6IHZhbHVlLCBkb25lOiAhIWRvbmUgfTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHt9O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmYWxzZTtcbiIsIi8vIDIwLjIuMi4xNCBNYXRoLmV4cG0xKHgpXG52YXIgJGV4cG0xID0gTWF0aC5leHBtMTtcbm1vZHVsZS5leHBvcnRzID0gKCEkZXhwbTFcbiAgLy8gT2xkIEZGIGJ1Z1xuICB8fCAkZXhwbTEoMTApID4gMjIwMjUuNDY1Nzk0ODA2NzE5IHx8ICRleHBtMSgxMCkgPCAyMjAyNS40NjU3OTQ4MDY3MTY1MTY4XG4gIC8vIFRvciBCcm93c2VyIGJ1Z1xuICB8fCAkZXhwbTEoLTJlLTE3KSAhPSAtMmUtMTdcbikgPyBmdW5jdGlvbiBleHBtMSh4KSB7XG4gIHJldHVybiAoeCA9ICt4KSA9PSAwID8geCA6IHggPiAtMWUtNiAmJiB4IDwgMWUtNiA/IHggKyB4ICogeCAvIDIgOiBNYXRoLmV4cCh4KSAtIDE7XG59IDogJGV4cG0xO1xuIiwiLy8gMjAuMi4yLjE2IE1hdGguZnJvdW5kKHgpXG52YXIgc2lnbiA9IHJlcXVpcmUoJy4vX21hdGgtc2lnbicpO1xudmFyIHBvdyA9IE1hdGgucG93O1xudmFyIEVQU0lMT04gPSBwb3coMiwgLTUyKTtcbnZhciBFUFNJTE9OMzIgPSBwb3coMiwgLTIzKTtcbnZhciBNQVgzMiA9IHBvdygyLCAxMjcpICogKDIgLSBFUFNJTE9OMzIpO1xudmFyIE1JTjMyID0gcG93KDIsIC0xMjYpO1xuXG52YXIgcm91bmRUaWVzVG9FdmVuID0gZnVuY3Rpb24gKG4pIHtcbiAgcmV0dXJuIG4gKyAxIC8gRVBTSUxPTiAtIDEgLyBFUFNJTE9OO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBNYXRoLmZyb3VuZCB8fCBmdW5jdGlvbiBmcm91bmQoeCkge1xuICB2YXIgJGFicyA9IE1hdGguYWJzKHgpO1xuICB2YXIgJHNpZ24gPSBzaWduKHgpO1xuICB2YXIgYSwgcmVzdWx0O1xuICBpZiAoJGFicyA8IE1JTjMyKSByZXR1cm4gJHNpZ24gKiByb3VuZFRpZXNUb0V2ZW4oJGFicyAvIE1JTjMyIC8gRVBTSUxPTjMyKSAqIE1JTjMyICogRVBTSUxPTjMyO1xuICBhID0gKDEgKyBFUFNJTE9OMzIgLyBFUFNJTE9OKSAqICRhYnM7XG4gIHJlc3VsdCA9IGEgLSAoYSAtICRhYnMpO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gIGlmIChyZXN1bHQgPiBNQVgzMiB8fCByZXN1bHQgIT0gcmVzdWx0KSByZXR1cm4gJHNpZ24gKiBJbmZpbml0eTtcbiAgcmV0dXJuICRzaWduICogcmVzdWx0O1xufTtcbiIsIi8vIDIwLjIuMi4yMCBNYXRoLmxvZzFwKHgpXG5tb2R1bGUuZXhwb3J0cyA9IE1hdGgubG9nMXAgfHwgZnVuY3Rpb24gbG9nMXAoeCkge1xuICByZXR1cm4gKHggPSAreCkgPiAtMWUtOCAmJiB4IDwgMWUtOCA/IHggLSB4ICogeCAvIDIgOiBNYXRoLmxvZygxICsgeCk7XG59O1xuIiwiLy8gaHR0cHM6Ly9yd2FsZHJvbi5naXRodWIuaW8vcHJvcG9zYWwtbWF0aC1leHRlbnNpb25zL1xubW9kdWxlLmV4cG9ydHMgPSBNYXRoLnNjYWxlIHx8IGZ1bmN0aW9uIHNjYWxlKHgsIGluTG93LCBpbkhpZ2gsIG91dExvdywgb3V0SGlnaCkge1xuICBpZiAoXG4gICAgYXJndW1lbnRzLmxlbmd0aCA9PT0gMFxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgICAgfHwgeCAhPSB4XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICB8fCBpbkxvdyAhPSBpbkxvd1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgICAgfHwgaW5IaWdoICE9IGluSGlnaFxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgICAgfHwgb3V0TG93ICE9IG91dExvd1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgICAgfHwgb3V0SGlnaCAhPSBvdXRIaWdoXG4gICkgcmV0dXJuIE5hTjtcbiAgaWYgKHggPT09IEluZmluaXR5IHx8IHggPT09IC1JbmZpbml0eSkgcmV0dXJuIHg7XG4gIHJldHVybiAoeCAtIGluTG93KSAqIChvdXRIaWdoIC0gb3V0TG93KSAvIChpbkhpZ2ggLSBpbkxvdykgKyBvdXRMb3c7XG59O1xuIiwiLy8gMjAuMi4yLjI4IE1hdGguc2lnbih4KVxubW9kdWxlLmV4cG9ydHMgPSBNYXRoLnNpZ24gfHwgZnVuY3Rpb24gc2lnbih4KSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgcmV0dXJuICh4ID0gK3gpID09IDAgfHwgeCAhPSB4ID8geCA6IHggPCAwID8gLTEgOiAxO1xufTtcbiIsInZhciBNRVRBID0gcmVxdWlyZSgnLi9fdWlkJykoJ21ldGEnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIHNldERlc2MgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mO1xudmFyIGlkID0gMDtcbnZhciBpc0V4dGVuc2libGUgPSBPYmplY3QuaXNFeHRlbnNpYmxlIHx8IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRydWU7XG59O1xudmFyIEZSRUVaRSA9ICFyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGlzRXh0ZW5zaWJsZShPYmplY3QucHJldmVudEV4dGVuc2lvbnMoe30pKTtcbn0pO1xudmFyIHNldE1ldGEgPSBmdW5jdGlvbiAoaXQpIHtcbiAgc2V0RGVzYyhpdCwgTUVUQSwgeyB2YWx1ZToge1xuICAgIGk6ICdPJyArICsraWQsIC8vIG9iamVjdCBJRFxuICAgIHc6IHt9ICAgICAgICAgIC8vIHdlYWsgY29sbGVjdGlvbnMgSURzXG4gIH0gfSk7XG59O1xudmFyIGZhc3RLZXkgPSBmdW5jdGlvbiAoaXQsIGNyZWF0ZSkge1xuICAvLyByZXR1cm4gcHJpbWl0aXZlIHdpdGggcHJlZml4XG4gIGlmICghaXNPYmplY3QoaXQpKSByZXR1cm4gdHlwZW9mIGl0ID09ICdzeW1ib2wnID8gaXQgOiAodHlwZW9mIGl0ID09ICdzdHJpbmcnID8gJ1MnIDogJ1AnKSArIGl0O1xuICBpZiAoIWhhcyhpdCwgTUVUQSkpIHtcbiAgICAvLyBjYW4ndCBzZXQgbWV0YWRhdGEgdG8gdW5jYXVnaHQgZnJvemVuIG9iamVjdFxuICAgIGlmICghaXNFeHRlbnNpYmxlKGl0KSkgcmV0dXJuICdGJztcbiAgICAvLyBub3QgbmVjZXNzYXJ5IHRvIGFkZCBtZXRhZGF0YVxuICAgIGlmICghY3JlYXRlKSByZXR1cm4gJ0UnO1xuICAgIC8vIGFkZCBtaXNzaW5nIG1ldGFkYXRhXG4gICAgc2V0TWV0YShpdCk7XG4gIC8vIHJldHVybiBvYmplY3QgSURcbiAgfSByZXR1cm4gaXRbTUVUQV0uaTtcbn07XG52YXIgZ2V0V2VhayA9IGZ1bmN0aW9uIChpdCwgY3JlYXRlKSB7XG4gIGlmICghaGFzKGl0LCBNRVRBKSkge1xuICAgIC8vIGNhbid0IHNldCBtZXRhZGF0YSB0byB1bmNhdWdodCBmcm96ZW4gb2JqZWN0XG4gICAgaWYgKCFpc0V4dGVuc2libGUoaXQpKSByZXR1cm4gdHJ1ZTtcbiAgICAvLyBub3QgbmVjZXNzYXJ5IHRvIGFkZCBtZXRhZGF0YVxuICAgIGlmICghY3JlYXRlKSByZXR1cm4gZmFsc2U7XG4gICAgLy8gYWRkIG1pc3NpbmcgbWV0YWRhdGFcbiAgICBzZXRNZXRhKGl0KTtcbiAgLy8gcmV0dXJuIGhhc2ggd2VhayBjb2xsZWN0aW9ucyBJRHNcbiAgfSByZXR1cm4gaXRbTUVUQV0udztcbn07XG4vLyBhZGQgbWV0YWRhdGEgb24gZnJlZXplLWZhbWlseSBtZXRob2RzIGNhbGxpbmdcbnZhciBvbkZyZWV6ZSA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoRlJFRVpFICYmIG1ldGEuTkVFRCAmJiBpc0V4dGVuc2libGUoaXQpICYmICFoYXMoaXQsIE1FVEEpKSBzZXRNZXRhKGl0KTtcbiAgcmV0dXJuIGl0O1xufTtcbnZhciBtZXRhID0gbW9kdWxlLmV4cG9ydHMgPSB7XG4gIEtFWTogTUVUQSxcbiAgTkVFRDogZmFsc2UsXG4gIGZhc3RLZXk6IGZhc3RLZXksXG4gIGdldFdlYWs6IGdldFdlYWssXG4gIG9uRnJlZXplOiBvbkZyZWV6ZVxufTtcbiIsInZhciBNYXAgPSByZXF1aXJlKCcuL2VzNi5tYXAnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi9fc2hhcmVkJykoJ21ldGFkYXRhJyk7XG52YXIgc3RvcmUgPSBzaGFyZWQuc3RvcmUgfHwgKHNoYXJlZC5zdG9yZSA9IG5ldyAocmVxdWlyZSgnLi9lczYud2Vhay1tYXAnKSkoKSk7XG5cbnZhciBnZXRPckNyZWF0ZU1ldGFkYXRhTWFwID0gZnVuY3Rpb24gKHRhcmdldCwgdGFyZ2V0S2V5LCBjcmVhdGUpIHtcbiAgdmFyIHRhcmdldE1ldGFkYXRhID0gc3RvcmUuZ2V0KHRhcmdldCk7XG4gIGlmICghdGFyZ2V0TWV0YWRhdGEpIHtcbiAgICBpZiAoIWNyZWF0ZSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBzdG9yZS5zZXQodGFyZ2V0LCB0YXJnZXRNZXRhZGF0YSA9IG5ldyBNYXAoKSk7XG4gIH1cbiAgdmFyIGtleU1ldGFkYXRhID0gdGFyZ2V0TWV0YWRhdGEuZ2V0KHRhcmdldEtleSk7XG4gIGlmICgha2V5TWV0YWRhdGEpIHtcbiAgICBpZiAoIWNyZWF0ZSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB0YXJnZXRNZXRhZGF0YS5zZXQodGFyZ2V0S2V5LCBrZXlNZXRhZGF0YSA9IG5ldyBNYXAoKSk7XG4gIH0gcmV0dXJuIGtleU1ldGFkYXRhO1xufTtcbnZhciBvcmRpbmFyeUhhc093bk1ldGFkYXRhID0gZnVuY3Rpb24gKE1ldGFkYXRhS2V5LCBPLCBQKSB7XG4gIHZhciBtZXRhZGF0YU1hcCA9IGdldE9yQ3JlYXRlTWV0YWRhdGFNYXAoTywgUCwgZmFsc2UpO1xuICByZXR1cm4gbWV0YWRhdGFNYXAgPT09IHVuZGVmaW5lZCA/IGZhbHNlIDogbWV0YWRhdGFNYXAuaGFzKE1ldGFkYXRhS2V5KTtcbn07XG52YXIgb3JkaW5hcnlHZXRPd25NZXRhZGF0YSA9IGZ1bmN0aW9uIChNZXRhZGF0YUtleSwgTywgUCkge1xuICB2YXIgbWV0YWRhdGFNYXAgPSBnZXRPckNyZWF0ZU1ldGFkYXRhTWFwKE8sIFAsIGZhbHNlKTtcbiAgcmV0dXJuIG1ldGFkYXRhTWFwID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBtZXRhZGF0YU1hcC5nZXQoTWV0YWRhdGFLZXkpO1xufTtcbnZhciBvcmRpbmFyeURlZmluZU93bk1ldGFkYXRhID0gZnVuY3Rpb24gKE1ldGFkYXRhS2V5LCBNZXRhZGF0YVZhbHVlLCBPLCBQKSB7XG4gIGdldE9yQ3JlYXRlTWV0YWRhdGFNYXAoTywgUCwgdHJ1ZSkuc2V0KE1ldGFkYXRhS2V5LCBNZXRhZGF0YVZhbHVlKTtcbn07XG52YXIgb3JkaW5hcnlPd25NZXRhZGF0YUtleXMgPSBmdW5jdGlvbiAodGFyZ2V0LCB0YXJnZXRLZXkpIHtcbiAgdmFyIG1ldGFkYXRhTWFwID0gZ2V0T3JDcmVhdGVNZXRhZGF0YU1hcCh0YXJnZXQsIHRhcmdldEtleSwgZmFsc2UpO1xuICB2YXIga2V5cyA9IFtdO1xuICBpZiAobWV0YWRhdGFNYXApIG1ldGFkYXRhTWFwLmZvckVhY2goZnVuY3Rpb24gKF8sIGtleSkgeyBrZXlzLnB1c2goa2V5KTsgfSk7XG4gIHJldHVybiBrZXlzO1xufTtcbnZhciB0b01ldGFLZXkgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIGl0ID09ICdzeW1ib2wnID8gaXQgOiBTdHJpbmcoaXQpO1xufTtcbnZhciBleHAgPSBmdW5jdGlvbiAoTykge1xuICAkZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCBPKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzdG9yZTogc3RvcmUsXG4gIG1hcDogZ2V0T3JDcmVhdGVNZXRhZGF0YU1hcCxcbiAgaGFzOiBvcmRpbmFyeUhhc093bk1ldGFkYXRhLFxuICBnZXQ6IG9yZGluYXJ5R2V0T3duTWV0YWRhdGEsXG4gIHNldDogb3JkaW5hcnlEZWZpbmVPd25NZXRhZGF0YSxcbiAga2V5czogb3JkaW5hcnlPd25NZXRhZGF0YUtleXMsXG4gIGtleTogdG9NZXRhS2V5LFxuICBleHA6IGV4cFxufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBtYWNyb3Rhc2sgPSByZXF1aXJlKCcuL190YXNrJykuc2V0O1xudmFyIE9ic2VydmVyID0gZ2xvYmFsLk11dGF0aW9uT2JzZXJ2ZXIgfHwgZ2xvYmFsLldlYktpdE11dGF0aW9uT2JzZXJ2ZXI7XG52YXIgcHJvY2VzcyA9IGdsb2JhbC5wcm9jZXNzO1xudmFyIFByb21pc2UgPSBnbG9iYWwuUHJvbWlzZTtcbnZhciBpc05vZGUgPSByZXF1aXJlKCcuL19jb2YnKShwcm9jZXNzKSA9PSAncHJvY2Vzcyc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgaGVhZCwgbGFzdCwgbm90aWZ5O1xuXG4gIHZhciBmbHVzaCA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcGFyZW50LCBmbjtcbiAgICBpZiAoaXNOb2RlICYmIChwYXJlbnQgPSBwcm9jZXNzLmRvbWFpbikpIHBhcmVudC5leGl0KCk7XG4gICAgd2hpbGUgKGhlYWQpIHtcbiAgICAgIGZuID0gaGVhZC5mbjtcbiAgICAgIGhlYWQgPSBoZWFkLm5leHQ7XG4gICAgICB0cnkge1xuICAgICAgICBmbigpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBpZiAoaGVhZCkgbm90aWZ5KCk7XG4gICAgICAgIGVsc2UgbGFzdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICB9IGxhc3QgPSB1bmRlZmluZWQ7XG4gICAgaWYgKHBhcmVudCkgcGFyZW50LmVudGVyKCk7XG4gIH07XG5cbiAgLy8gTm9kZS5qc1xuICBpZiAoaXNOb2RlKSB7XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhmbHVzaCk7XG4gICAgfTtcbiAgLy8gYnJvd3NlcnMgd2l0aCBNdXRhdGlvbk9ic2VydmVyLCBleGNlcHQgaU9TIFNhZmFyaSAtIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8zMzlcbiAgfSBlbHNlIGlmIChPYnNlcnZlciAmJiAhKGdsb2JhbC5uYXZpZ2F0b3IgJiYgZ2xvYmFsLm5hdmlnYXRvci5zdGFuZGFsb25lKSkge1xuICAgIHZhciB0b2dnbGUgPSB0cnVlO1xuICAgIHZhciBub2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJycpO1xuICAgIG5ldyBPYnNlcnZlcihmbHVzaCkub2JzZXJ2ZShub2RlLCB7IGNoYXJhY3RlckRhdGE6IHRydWUgfSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgbm9kZS5kYXRhID0gdG9nZ2xlID0gIXRvZ2dsZTtcbiAgICB9O1xuICAvLyBlbnZpcm9ubWVudHMgd2l0aCBtYXliZSBub24tY29tcGxldGVseSBjb3JyZWN0LCBidXQgZXhpc3RlbnQgUHJvbWlzZVxuICB9IGVsc2UgaWYgKFByb21pc2UgJiYgUHJvbWlzZS5yZXNvbHZlKSB7XG4gICAgLy8gUHJvbWlzZS5yZXNvbHZlIHdpdGhvdXQgYW4gYXJndW1lbnQgdGhyb3dzIGFuIGVycm9yIGluIExHIFdlYk9TIDJcbiAgICB2YXIgcHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHByb21pc2UudGhlbihmbHVzaCk7XG4gICAgfTtcbiAgLy8gZm9yIG90aGVyIGVudmlyb25tZW50cyAtIG1hY3JvdGFzayBiYXNlZCBvbjpcbiAgLy8gLSBzZXRJbW1lZGlhdGVcbiAgLy8gLSBNZXNzYWdlQ2hhbm5lbFxuICAvLyAtIHdpbmRvdy5wb3N0TWVzc2FnXG4gIC8vIC0gb25yZWFkeXN0YXRlY2hhbmdlXG4gIC8vIC0gc2V0VGltZW91dFxuICB9IGVsc2Uge1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIHN0cmFuZ2UgSUUgKyB3ZWJwYWNrIGRldiBzZXJ2ZXIgYnVnIC0gdXNlIC5jYWxsKGdsb2JhbClcbiAgICAgIG1hY3JvdGFzay5jYWxsKGdsb2JhbCwgZmx1c2gpO1xuICAgIH07XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gKGZuKSB7XG4gICAgdmFyIHRhc2sgPSB7IGZuOiBmbiwgbmV4dDogdW5kZWZpbmVkIH07XG4gICAgaWYgKGxhc3QpIGxhc3QubmV4dCA9IHRhc2s7XG4gICAgaWYgKCFoZWFkKSB7XG4gICAgICBoZWFkID0gdGFzaztcbiAgICAgIG5vdGlmeSgpO1xuICAgIH0gbGFzdCA9IHRhc2s7XG4gIH07XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gMjUuNC4xLjUgTmV3UHJvbWlzZUNhcGFiaWxpdHkoQylcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG5cbmZ1bmN0aW9uIFByb21pc2VDYXBhYmlsaXR5KEMpIHtcbiAgdmFyIHJlc29sdmUsIHJlamVjdDtcbiAgdGhpcy5wcm9taXNlID0gbmV3IEMoZnVuY3Rpb24gKCQkcmVzb2x2ZSwgJCRyZWplY3QpIHtcbiAgICBpZiAocmVzb2x2ZSAhPT0gdW5kZWZpbmVkIHx8IHJlamVjdCAhPT0gdW5kZWZpbmVkKSB0aHJvdyBUeXBlRXJyb3IoJ0JhZCBQcm9taXNlIGNvbnN0cnVjdG9yJyk7XG4gICAgcmVzb2x2ZSA9ICQkcmVzb2x2ZTtcbiAgICByZWplY3QgPSAkJHJlamVjdDtcbiAgfSk7XG4gIHRoaXMucmVzb2x2ZSA9IGFGdW5jdGlvbihyZXNvbHZlKTtcbiAgdGhpcy5yZWplY3QgPSBhRnVuY3Rpb24ocmVqZWN0KTtcbn1cblxubW9kdWxlLmV4cG9ydHMuZiA9IGZ1bmN0aW9uIChDKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZUNhcGFiaWxpdHkoQyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gMTkuMS4yLjEgT2JqZWN0LmFzc2lnbih0YXJnZXQsIHNvdXJjZSwgLi4uKVxudmFyIGdldEtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpO1xudmFyIGdPUFMgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wcycpO1xudmFyIHBJRSA9IHJlcXVpcmUoJy4vX29iamVjdC1waWUnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIElPYmplY3QgPSByZXF1aXJlKCcuL19pb2JqZWN0Jyk7XG52YXIgJGFzc2lnbiA9IE9iamVjdC5hc3NpZ247XG5cbi8vIHNob3VsZCB3b3JrIHdpdGggc3ltYm9scyBhbmQgc2hvdWxkIGhhdmUgZGV0ZXJtaW5pc3RpYyBwcm9wZXJ0eSBvcmRlciAoVjggYnVnKVxubW9kdWxlLmV4cG9ydHMgPSAhJGFzc2lnbiB8fCByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgdmFyIEEgPSB7fTtcbiAgdmFyIEIgPSB7fTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gIHZhciBTID0gU3ltYm9sKCk7XG4gIHZhciBLID0gJ2FiY2RlZmdoaWprbG1ub3BxcnN0JztcbiAgQVtTXSA9IDc7XG4gIEsuc3BsaXQoJycpLmZvckVhY2goZnVuY3Rpb24gKGspIHsgQltrXSA9IGs7IH0pO1xuICByZXR1cm4gJGFzc2lnbih7fSwgQSlbU10gIT0gNyB8fCBPYmplY3Qua2V5cygkYXNzaWduKHt9LCBCKSkuam9pbignJykgIT0gSztcbn0pID8gZnVuY3Rpb24gYXNzaWduKHRhcmdldCwgc291cmNlKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgdmFyIFQgPSB0b09iamVjdCh0YXJnZXQpO1xuICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gIHZhciBpbmRleCA9IDE7XG4gIHZhciBnZXRTeW1ib2xzID0gZ09QUy5mO1xuICB2YXIgaXNFbnVtID0gcElFLmY7XG4gIHdoaWxlIChhTGVuID4gaW5kZXgpIHtcbiAgICB2YXIgUyA9IElPYmplY3QoYXJndW1lbnRzW2luZGV4KytdKTtcbiAgICB2YXIga2V5cyA9IGdldFN5bWJvbHMgPyBnZXRLZXlzKFMpLmNvbmNhdChnZXRTeW1ib2xzKFMpKSA6IGdldEtleXMoUyk7XG4gICAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICAgIHZhciBqID0gMDtcbiAgICB2YXIga2V5O1xuICAgIHdoaWxlIChsZW5ndGggPiBqKSBpZiAoaXNFbnVtLmNhbGwoUywga2V5ID0ga2V5c1tqKytdKSkgVFtrZXldID0gU1trZXldO1xuICB9IHJldHVybiBUO1xufSA6ICRhc3NpZ247XG4iLCIvLyAxOS4xLjIuMiAvIDE1LjIuMy41IE9iamVjdC5jcmVhdGUoTyBbLCBQcm9wZXJ0aWVzXSlcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGRQcyA9IHJlcXVpcmUoJy4vX29iamVjdC1kcHMnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4vX2VudW0tYnVnLWtleXMnKTtcbnZhciBJRV9QUk9UTyA9IHJlcXVpcmUoJy4vX3NoYXJlZC1rZXknKSgnSUVfUFJPVE8nKTtcbnZhciBFbXB0eSA9IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfTtcbnZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcblxuLy8gQ3JlYXRlIG9iamVjdCB3aXRoIGZha2UgYG51bGxgIHByb3RvdHlwZTogdXNlIGlmcmFtZSBPYmplY3Qgd2l0aCBjbGVhcmVkIHByb3RvdHlwZVxudmFyIGNyZWF0ZURpY3QgPSBmdW5jdGlvbiAoKSB7XG4gIC8vIFRocmFzaCwgd2FzdGUgYW5kIHNvZG9teTogSUUgR0MgYnVnXG4gIHZhciBpZnJhbWUgPSByZXF1aXJlKCcuL19kb20tY3JlYXRlJykoJ2lmcmFtZScpO1xuICB2YXIgaSA9IGVudW1CdWdLZXlzLmxlbmd0aDtcbiAgdmFyIGx0ID0gJzwnO1xuICB2YXIgZ3QgPSAnPic7XG4gIHZhciBpZnJhbWVEb2N1bWVudDtcbiAgaWZyYW1lLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gIHJlcXVpcmUoJy4vX2h0bWwnKS5hcHBlbmRDaGlsZChpZnJhbWUpO1xuICBpZnJhbWUuc3JjID0gJ2phdmFzY3JpcHQ6JzsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1zY3JpcHQtdXJsXG4gIC8vIGNyZWF0ZURpY3QgPSBpZnJhbWUuY29udGVudFdpbmRvdy5PYmplY3Q7XG4gIC8vIGh0bWwucmVtb3ZlQ2hpbGQoaWZyYW1lKTtcbiAgaWZyYW1lRG9jdW1lbnQgPSBpZnJhbWUuY29udGVudFdpbmRvdy5kb2N1bWVudDtcbiAgaWZyYW1lRG9jdW1lbnQub3BlbigpO1xuICBpZnJhbWVEb2N1bWVudC53cml0ZShsdCArICdzY3JpcHQnICsgZ3QgKyAnZG9jdW1lbnQuRj1PYmplY3QnICsgbHQgKyAnL3NjcmlwdCcgKyBndCk7XG4gIGlmcmFtZURvY3VtZW50LmNsb3NlKCk7XG4gIGNyZWF0ZURpY3QgPSBpZnJhbWVEb2N1bWVudC5GO1xuICB3aGlsZSAoaS0tKSBkZWxldGUgY3JlYXRlRGljdFtQUk9UT1RZUEVdW2VudW1CdWdLZXlzW2ldXTtcbiAgcmV0dXJuIGNyZWF0ZURpY3QoKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmNyZWF0ZSB8fCBmdW5jdGlvbiBjcmVhdGUoTywgUHJvcGVydGllcykge1xuICB2YXIgcmVzdWx0O1xuICBpZiAoTyAhPT0gbnVsbCkge1xuICAgIEVtcHR5W1BST1RPVFlQRV0gPSBhbk9iamVjdChPKTtcbiAgICByZXN1bHQgPSBuZXcgRW1wdHkoKTtcbiAgICBFbXB0eVtQUk9UT1RZUEVdID0gbnVsbDtcbiAgICAvLyBhZGQgXCJfX3Byb3RvX19cIiBmb3IgT2JqZWN0LmdldFByb3RvdHlwZU9mIHBvbHlmaWxsXG4gICAgcmVzdWx0W0lFX1BST1RPXSA9IE87XG4gIH0gZWxzZSByZXN1bHQgPSBjcmVhdGVEaWN0KCk7XG4gIHJldHVybiBQcm9wZXJ0aWVzID09PSB1bmRlZmluZWQgPyByZXN1bHQgOiBkUHMocmVzdWx0LCBQcm9wZXJ0aWVzKTtcbn07XG4iLCJ2YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBJRThfRE9NX0RFRklORSA9IHJlcXVpcmUoJy4vX2llOC1kb20tZGVmaW5lJyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcbnZhciBkUCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcblxuZXhwb3J0cy5mID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIFAgPSB0b1ByaW1pdGl2ZShQLCB0cnVlKTtcbiAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICByZXR1cm4gZFAoTywgUCwgQXR0cmlidXRlcyk7XG4gIH0gY2F0Y2ggKGUpIHsgLyogZW1wdHkgKi8gfVxuICBpZiAoJ2dldCcgaW4gQXR0cmlidXRlcyB8fCAnc2V0JyBpbiBBdHRyaWJ1dGVzKSB0aHJvdyBUeXBlRXJyb3IoJ0FjY2Vzc29ycyBub3Qgc3VwcG9ydGVkIScpO1xuICBpZiAoJ3ZhbHVlJyBpbiBBdHRyaWJ1dGVzKSBPW1BdID0gQXR0cmlidXRlcy52YWx1ZTtcbiAgcmV0dXJuIE87XG59O1xuIiwidmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBnZXRLZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMgOiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKE8sIFByb3BlcnRpZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIHZhciBrZXlzID0gZ2V0S2V5cyhQcm9wZXJ0aWVzKTtcbiAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICB2YXIgaSA9IDA7XG4gIHZhciBQO1xuICB3aGlsZSAobGVuZ3RoID4gaSkgZFAuZihPLCBQID0ga2V5c1tpKytdLCBQcm9wZXJ0aWVzW1BdKTtcbiAgcmV0dXJuIE87XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gRm9yY2VkIHJlcGxhY2VtZW50IHByb3RvdHlwZSBhY2Nlc3NvcnMgbWV0aG9kc1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19saWJyYXJ5JykgfHwgIXJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICB2YXIgSyA9IE1hdGgucmFuZG9tKCk7XG4gIC8vIEluIEZGIHRocm93cyBvbmx5IGRlZmluZSBtZXRob2RzXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZiwgbm8tdXNlbGVzcy1jYWxsXG4gIF9fZGVmaW5lU2V0dGVyX18uY2FsbChudWxsLCBLLCBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0pO1xuICBkZWxldGUgcmVxdWlyZSgnLi9fZ2xvYmFsJylbS107XG59KTtcbiIsInZhciBwSUUgPSByZXF1aXJlKCcuL19vYmplY3QtcGllJyk7XG52YXIgY3JlYXRlRGVzYyA9IHJlcXVpcmUoJy4vX3Byb3BlcnR5LWRlc2MnKTtcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciBJRThfRE9NX0RFRklORSA9IHJlcXVpcmUoJy4vX2llOC1kb20tZGVmaW5lJyk7XG52YXIgZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbmV4cG9ydHMuZiA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgPyBnT1BEIDogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApIHtcbiAgTyA9IHRvSU9iamVjdChPKTtcbiAgUCA9IHRvUHJpbWl0aXZlKFAsIHRydWUpO1xuICBpZiAoSUU4X0RPTV9ERUZJTkUpIHRyeSB7XG4gICAgcmV0dXJuIGdPUEQoTywgUCk7XG4gIH0gY2F0Y2ggKGUpIHsgLyogZW1wdHkgKi8gfVxuICBpZiAoaGFzKE8sIFApKSByZXR1cm4gY3JlYXRlRGVzYyghcElFLmYuY2FsbChPLCBQKSwgT1tQXSk7XG59O1xuIiwiLy8gZmFsbGJhY2sgZm9yIElFMTEgYnVnZ3kgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgd2l0aCBpZnJhbWUgYW5kIHdpbmRvd1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciBnT1BOID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4nKS5mO1xudmFyIHRvU3RyaW5nID0ge30udG9TdHJpbmc7XG5cbnZhciB3aW5kb3dOYW1lcyA9IHR5cGVvZiB3aW5kb3cgPT0gJ29iamVjdCcgJiYgd2luZG93ICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzXG4gID8gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMod2luZG93KSA6IFtdO1xuXG52YXIgZ2V0V2luZG93TmFtZXMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gZ09QTihpdCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gd2luZG93TmFtZXMuc2xpY2UoKTtcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMuZiA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoaXQpIHtcbiAgcmV0dXJuIHdpbmRvd05hbWVzICYmIHRvU3RyaW5nLmNhbGwoaXQpID09ICdbb2JqZWN0IFdpbmRvd10nID8gZ2V0V2luZG93TmFtZXMoaXQpIDogZ09QTih0b0lPYmplY3QoaXQpKTtcbn07XG4iLCIvLyAxOS4xLjIuNyAvIDE1LjIuMy40IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKE8pXG52YXIgJGtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cy1pbnRlcm5hbCcpO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuL19lbnVtLWJ1Zy1rZXlzJykuY29uY2F0KCdsZW5ndGgnLCAncHJvdG90eXBlJyk7XG5cbmV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHx8IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoTykge1xuICByZXR1cm4gJGtleXMoTywgaGlkZGVuS2V5cyk7XG59O1xuIiwiZXhwb3J0cy5mID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbiIsIi8vIDE5LjEuMi45IC8gMTUuMi4zLjIgT2JqZWN0LmdldFByb3RvdHlwZU9mKE8pXG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciBJRV9QUk9UTyA9IHJlcXVpcmUoJy4vX3NoYXJlZC1rZXknKSgnSUVfUFJPVE8nKTtcbnZhciBPYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmdldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIChPKSB7XG4gIE8gPSB0b09iamVjdChPKTtcbiAgaWYgKGhhcyhPLCBJRV9QUk9UTykpIHJldHVybiBPW0lFX1BST1RPXTtcbiAgaWYgKHR5cGVvZiBPLmNvbnN0cnVjdG9yID09ICdmdW5jdGlvbicgJiYgTyBpbnN0YW5jZW9mIE8uY29uc3RydWN0b3IpIHtcbiAgICByZXR1cm4gTy5jb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG4gIH0gcmV0dXJuIE8gaW5zdGFuY2VvZiBPYmplY3QgPyBPYmplY3RQcm90byA6IG51bGw7XG59O1xuIiwidmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciBhcnJheUluZGV4T2YgPSByZXF1aXJlKCcuL19hcnJheS1pbmNsdWRlcycpKGZhbHNlKTtcbnZhciBJRV9QUk9UTyA9IHJlcXVpcmUoJy4vX3NoYXJlZC1rZXknKSgnSUVfUFJPVE8nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBuYW1lcykge1xuICB2YXIgTyA9IHRvSU9iamVjdChvYmplY3QpO1xuICB2YXIgaSA9IDA7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgdmFyIGtleTtcbiAgZm9yIChrZXkgaW4gTykgaWYgKGtleSAhPSBJRV9QUk9UTykgaGFzKE8sIGtleSkgJiYgcmVzdWx0LnB1c2goa2V5KTtcbiAgLy8gRG9uJ3QgZW51bSBidWcgJiBoaWRkZW4ga2V5c1xuICB3aGlsZSAobmFtZXMubGVuZ3RoID4gaSkgaWYgKGhhcyhPLCBrZXkgPSBuYW1lc1tpKytdKSkge1xuICAgIH5hcnJheUluZGV4T2YocmVzdWx0LCBrZXkpIHx8IHJlc3VsdC5wdXNoKGtleSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCIvLyAxOS4xLjIuMTQgLyAxNS4yLjMuMTQgT2JqZWN0LmtleXMoTylcbnZhciAka2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzLWludGVybmFsJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuL19lbnVtLWJ1Zy1rZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmtleXMgfHwgZnVuY3Rpb24ga2V5cyhPKSB7XG4gIHJldHVybiAka2V5cyhPLCBlbnVtQnVnS2V5cyk7XG59O1xuIiwiZXhwb3J0cy5mID0ge30ucHJvcGVydHlJc0VudW1lcmFibGU7XG4iLCIvLyBtb3N0IE9iamVjdCBtZXRob2RzIGJ5IEVTNiBzaG91bGQgYWNjZXB0IHByaW1pdGl2ZXNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgY29yZSA9IHJlcXVpcmUoJy4vX2NvcmUnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChLRVksIGV4ZWMpIHtcbiAgdmFyIGZuID0gKGNvcmUuT2JqZWN0IHx8IHt9KVtLRVldIHx8IE9iamVjdFtLRVldO1xuICB2YXIgZXhwID0ge307XG4gIGV4cFtLRVldID0gZXhlYyhmbik7XG4gICRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogZmFpbHMoZnVuY3Rpb24gKCkgeyBmbigxKTsgfSksICdPYmplY3QnLCBleHApO1xufTtcbiIsInZhciBnZXRLZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgaXNFbnVtID0gcmVxdWlyZSgnLi9fb2JqZWN0LXBpZScpLmY7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpc0VudHJpZXMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChpdCkge1xuICAgIHZhciBPID0gdG9JT2JqZWN0KGl0KTtcbiAgICB2YXIga2V5cyA9IGdldEtleXMoTyk7XG4gICAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgdmFyIGtleTtcbiAgICB3aGlsZSAobGVuZ3RoID4gaSkgaWYgKGlzRW51bS5jYWxsKE8sIGtleSA9IGtleXNbaSsrXSkpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGlzRW50cmllcyA/IFtrZXksIE9ba2V5XV0gOiBPW2tleV0pO1xuICAgIH0gcmV0dXJuIHJlc3VsdDtcbiAgfTtcbn07XG4iLCIvLyBhbGwgb2JqZWN0IGtleXMsIGluY2x1ZGVzIG5vbi1lbnVtZXJhYmxlIGFuZCBzeW1ib2xzXG52YXIgZ09QTiA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJyk7XG52YXIgZ09QUyA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BzJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBSZWZsZWN0ID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykuUmVmbGVjdDtcbm1vZHVsZS5leHBvcnRzID0gUmVmbGVjdCAmJiBSZWZsZWN0Lm93bktleXMgfHwgZnVuY3Rpb24gb3duS2V5cyhpdCkge1xuICB2YXIga2V5cyA9IGdPUE4uZihhbk9iamVjdChpdCkpO1xuICB2YXIgZ2V0U3ltYm9scyA9IGdPUFMuZjtcbiAgcmV0dXJuIGdldFN5bWJvbHMgPyBrZXlzLmNvbmNhdChnZXRTeW1ib2xzKGl0KSkgOiBrZXlzO1xufTtcbiIsInZhciAkcGFyc2VGbG9hdCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLnBhcnNlRmxvYXQ7XG52YXIgJHRyaW0gPSByZXF1aXJlKCcuL19zdHJpbmctdHJpbScpLnRyaW07XG5cbm1vZHVsZS5leHBvcnRzID0gMSAvICRwYXJzZUZsb2F0KHJlcXVpcmUoJy4vX3N0cmluZy13cycpICsgJy0wJykgIT09IC1JbmZpbml0eSA/IGZ1bmN0aW9uIHBhcnNlRmxvYXQoc3RyKSB7XG4gIHZhciBzdHJpbmcgPSAkdHJpbShTdHJpbmcoc3RyKSwgMyk7XG4gIHZhciByZXN1bHQgPSAkcGFyc2VGbG9hdChzdHJpbmcpO1xuICByZXR1cm4gcmVzdWx0ID09PSAwICYmIHN0cmluZy5jaGFyQXQoMCkgPT0gJy0nID8gLTAgOiByZXN1bHQ7XG59IDogJHBhcnNlRmxvYXQ7XG4iLCJ2YXIgJHBhcnNlSW50ID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykucGFyc2VJbnQ7XG52YXIgJHRyaW0gPSByZXF1aXJlKCcuL19zdHJpbmctdHJpbScpLnRyaW07XG52YXIgd3MgPSByZXF1aXJlKCcuL19zdHJpbmctd3MnKTtcbnZhciBoZXggPSAvXlstK10/MFt4WF0vO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICRwYXJzZUludCh3cyArICcwOCcpICE9PSA4IHx8ICRwYXJzZUludCh3cyArICcweDE2JykgIT09IDIyID8gZnVuY3Rpb24gcGFyc2VJbnQoc3RyLCByYWRpeCkge1xuICB2YXIgc3RyaW5nID0gJHRyaW0oU3RyaW5nKHN0ciksIDMpO1xuICByZXR1cm4gJHBhcnNlSW50KHN0cmluZywgKHJhZGl4ID4+PiAwKSB8fCAoaGV4LnRlc3Qoc3RyaW5nKSA/IDE2IDogMTApKTtcbn0gOiAkcGFyc2VJbnQ7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHsgZTogZmFsc2UsIHY6IGV4ZWMoKSB9O1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIHsgZTogdHJ1ZSwgdjogZSB9O1xuICB9XG59O1xuIiwidmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IHJlcXVpcmUoJy4vX25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQywgeCkge1xuICBhbk9iamVjdChDKTtcbiAgaWYgKGlzT2JqZWN0KHgpICYmIHguY29uc3RydWN0b3IgPT09IEMpIHJldHVybiB4O1xuICB2YXIgcHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eS5mKEMpO1xuICB2YXIgcmVzb2x2ZSA9IHByb21pc2VDYXBhYmlsaXR5LnJlc29sdmU7XG4gIHJlc29sdmUoeCk7XG4gIHJldHVybiBwcm9taXNlQ2FwYWJpbGl0eS5wcm9taXNlO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGJpdG1hcCwgdmFsdWUpIHtcbiAgcmV0dXJuIHtcbiAgICBlbnVtZXJhYmxlOiAhKGJpdG1hcCAmIDEpLFxuICAgIGNvbmZpZ3VyYWJsZTogIShiaXRtYXAgJiAyKSxcbiAgICB3cml0YWJsZTogIShiaXRtYXAgJiA0KSxcbiAgICB2YWx1ZTogdmFsdWVcbiAgfTtcbn07XG4iLCJ2YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGFyZ2V0LCBzcmMsIHNhZmUpIHtcbiAgZm9yICh2YXIga2V5IGluIHNyYykgcmVkZWZpbmUodGFyZ2V0LCBrZXksIHNyY1trZXldLCBzYWZlKTtcbiAgcmV0dXJuIHRhcmdldDtcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciBTUkMgPSByZXF1aXJlKCcuL191aWQnKSgnc3JjJyk7XG52YXIgJHRvU3RyaW5nID0gcmVxdWlyZSgnLi9fZnVuY3Rpb24tdG8tc3RyaW5nJyk7XG52YXIgVE9fU1RSSU5HID0gJ3RvU3RyaW5nJztcbnZhciBUUEwgPSAoJycgKyAkdG9TdHJpbmcpLnNwbGl0KFRPX1NUUklORyk7XG5cbnJlcXVpcmUoJy4vX2NvcmUnKS5pbnNwZWN0U291cmNlID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiAkdG9TdHJpbmcuY2FsbChpdCk7XG59O1xuXG4obW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTywga2V5LCB2YWwsIHNhZmUpIHtcbiAgdmFyIGlzRnVuY3Rpb24gPSB0eXBlb2YgdmFsID09ICdmdW5jdGlvbic7XG4gIGlmIChpc0Z1bmN0aW9uKSBoYXModmFsLCAnbmFtZScpIHx8IGhpZGUodmFsLCAnbmFtZScsIGtleSk7XG4gIGlmIChPW2tleV0gPT09IHZhbCkgcmV0dXJuO1xuICBpZiAoaXNGdW5jdGlvbikgaGFzKHZhbCwgU1JDKSB8fCBoaWRlKHZhbCwgU1JDLCBPW2tleV0gPyAnJyArIE9ba2V5XSA6IFRQTC5qb2luKFN0cmluZyhrZXkpKSk7XG4gIGlmIChPID09PSBnbG9iYWwpIHtcbiAgICBPW2tleV0gPSB2YWw7XG4gIH0gZWxzZSBpZiAoIXNhZmUpIHtcbiAgICBkZWxldGUgT1trZXldO1xuICAgIGhpZGUoTywga2V5LCB2YWwpO1xuICB9IGVsc2UgaWYgKE9ba2V5XSkge1xuICAgIE9ba2V5XSA9IHZhbDtcbiAgfSBlbHNlIHtcbiAgICBoaWRlKE8sIGtleSwgdmFsKTtcbiAgfVxuLy8gYWRkIGZha2UgRnVuY3Rpb24jdG9TdHJpbmcgZm9yIGNvcnJlY3Qgd29yayB3cmFwcGVkIG1ldGhvZHMgLyBjb25zdHJ1Y3RvcnMgd2l0aCBtZXRob2RzIGxpa2UgTG9EYXNoIGlzTmF0aXZlXG59KShGdW5jdGlvbi5wcm90b3R5cGUsIFRPX1NUUklORywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gIHJldHVybiB0eXBlb2YgdGhpcyA9PSAnZnVuY3Rpb24nICYmIHRoaXNbU1JDXSB8fCAkdG9TdHJpbmcuY2FsbCh0aGlzKTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4vX2NsYXNzb2YnKTtcbnZhciBidWlsdGluRXhlYyA9IFJlZ0V4cC5wcm90b3R5cGUuZXhlYztcblxuIC8vIGBSZWdFeHBFeGVjYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXJlZ2V4cGV4ZWNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFIsIFMpIHtcbiAgdmFyIGV4ZWMgPSBSLmV4ZWM7XG4gIGlmICh0eXBlb2YgZXhlYyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHZhciByZXN1bHQgPSBleGVjLmNhbGwoUiwgUyk7XG4gICAgaWYgKHR5cGVvZiByZXN1bHQgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdSZWdFeHAgZXhlYyBtZXRob2QgcmV0dXJuZWQgc29tZXRoaW5nIG90aGVyIHRoYW4gYW4gT2JqZWN0IG9yIG51bGwnKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBpZiAoY2xhc3NvZihSKSAhPT0gJ1JlZ0V4cCcpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdSZWdFeHAjZXhlYyBjYWxsZWQgb24gaW5jb21wYXRpYmxlIHJlY2VpdmVyJyk7XG4gIH1cbiAgcmV0dXJuIGJ1aWx0aW5FeGVjLmNhbGwoUiwgUyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgcmVnZXhwRmxhZ3MgPSByZXF1aXJlKCcuL19mbGFncycpO1xuXG52YXIgbmF0aXZlRXhlYyA9IFJlZ0V4cC5wcm90b3R5cGUuZXhlYztcbi8vIFRoaXMgYWx3YXlzIHJlZmVycyB0byB0aGUgbmF0aXZlIGltcGxlbWVudGF0aW9uLCBiZWNhdXNlIHRoZVxuLy8gU3RyaW5nI3JlcGxhY2UgcG9seWZpbGwgdXNlcyAuL2ZpeC1yZWdleHAtd2VsbC1rbm93bi1zeW1ib2wtbG9naWMuanMsXG4vLyB3aGljaCBsb2FkcyB0aGlzIGZpbGUgYmVmb3JlIHBhdGNoaW5nIHRoZSBtZXRob2QuXG52YXIgbmF0aXZlUmVwbGFjZSA9IFN0cmluZy5wcm90b3R5cGUucmVwbGFjZTtcblxudmFyIHBhdGNoZWRFeGVjID0gbmF0aXZlRXhlYztcblxudmFyIExBU1RfSU5ERVggPSAnbGFzdEluZGV4JztcblxudmFyIFVQREFURVNfTEFTVF9JTkRFWF9XUk9ORyA9IChmdW5jdGlvbiAoKSB7XG4gIHZhciByZTEgPSAvYS8sXG4gICAgICByZTIgPSAvYiovZztcbiAgbmF0aXZlRXhlYy5jYWxsKHJlMSwgJ2EnKTtcbiAgbmF0aXZlRXhlYy5jYWxsKHJlMiwgJ2EnKTtcbiAgcmV0dXJuIHJlMVtMQVNUX0lOREVYXSAhPT0gMCB8fCByZTJbTEFTVF9JTkRFWF0gIT09IDA7XG59KSgpO1xuXG4vLyBub25wYXJ0aWNpcGF0aW5nIGNhcHR1cmluZyBncm91cCwgY29waWVkIGZyb20gZXM1LXNoaW0ncyBTdHJpbmcjc3BsaXQgcGF0Y2guXG52YXIgTlBDR19JTkNMVURFRCA9IC8oKT8/Ly5leGVjKCcnKVsxXSAhPT0gdW5kZWZpbmVkO1xuXG52YXIgUEFUQ0ggPSBVUERBVEVTX0xBU1RfSU5ERVhfV1JPTkcgfHwgTlBDR19JTkNMVURFRDtcblxuaWYgKFBBVENIKSB7XG4gIHBhdGNoZWRFeGVjID0gZnVuY3Rpb24gZXhlYyhzdHIpIHtcbiAgICB2YXIgcmUgPSB0aGlzO1xuICAgIHZhciBsYXN0SW5kZXgsIHJlQ29weSwgbWF0Y2gsIGk7XG5cbiAgICBpZiAoTlBDR19JTkNMVURFRCkge1xuICAgICAgcmVDb3B5ID0gbmV3IFJlZ0V4cCgnXicgKyByZS5zb3VyY2UgKyAnJCg/IVxcXFxzKScsIHJlZ2V4cEZsYWdzLmNhbGwocmUpKTtcbiAgICB9XG4gICAgaWYgKFVQREFURVNfTEFTVF9JTkRFWF9XUk9ORykgbGFzdEluZGV4ID0gcmVbTEFTVF9JTkRFWF07XG5cbiAgICBtYXRjaCA9IG5hdGl2ZUV4ZWMuY2FsbChyZSwgc3RyKTtcblxuICAgIGlmIChVUERBVEVTX0xBU1RfSU5ERVhfV1JPTkcgJiYgbWF0Y2gpIHtcbiAgICAgIHJlW0xBU1RfSU5ERVhdID0gcmUuZ2xvYmFsID8gbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGggOiBsYXN0SW5kZXg7XG4gICAgfVxuICAgIGlmIChOUENHX0lOQ0xVREVEICYmIG1hdGNoICYmIG1hdGNoLmxlbmd0aCA+IDEpIHtcbiAgICAgIC8vIEZpeCBicm93c2VycyB3aG9zZSBgZXhlY2AgbWV0aG9kcyBkb24ndCBjb25zaXN0ZW50bHkgcmV0dXJuIGB1bmRlZmluZWRgXG4gICAgICAvLyBmb3IgTlBDRywgbGlrZSBJRTguIE5PVEU6IFRoaXMgZG9lc24nIHdvcmsgZm9yIC8oLj8pPy9cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1sb29wLWZ1bmNcbiAgICAgIG5hdGl2ZVJlcGxhY2UuY2FsbChtYXRjaFswXSwgcmVDb3B5LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGZvciAoaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoIC0gMjsgaSsrKSB7XG4gICAgICAgICAgaWYgKGFyZ3VtZW50c1tpXSA9PT0gdW5kZWZpbmVkKSBtYXRjaFtpXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hdGNoO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGNoZWRFeGVjO1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAocmVnRXhwLCByZXBsYWNlKSB7XG4gIHZhciByZXBsYWNlciA9IHJlcGxhY2UgPT09IE9iamVjdChyZXBsYWNlKSA/IGZ1bmN0aW9uIChwYXJ0KSB7XG4gICAgcmV0dXJuIHJlcGxhY2VbcGFydF07XG4gIH0gOiByZXBsYWNlO1xuICByZXR1cm4gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIFN0cmluZyhpdCkucmVwbGFjZShyZWdFeHAsIHJlcGxhY2VyKTtcbiAgfTtcbn07XG4iLCIvLyA3LjIuOSBTYW1lVmFsdWUoeCwgeSlcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmlzIHx8IGZ1bmN0aW9uIGlzKHgsIHkpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICByZXR1cm4geCA9PT0geSA/IHggIT09IDAgfHwgMSAvIHggPT09IDEgLyB5IDogeCAhPSB4ICYmIHkgIT0geTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbnZhciBmb3JPZiA9IHJlcXVpcmUoJy4vX2Zvci1vZicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChDT0xMRUNUSU9OKSB7XG4gICRleHBvcnQoJGV4cG9ydC5TLCBDT0xMRUNUSU9OLCB7IGZyb206IGZ1bmN0aW9uIGZyb20oc291cmNlIC8qICwgbWFwRm4sIHRoaXNBcmcgKi8pIHtcbiAgICB2YXIgbWFwRm4gPSBhcmd1bWVudHNbMV07XG4gICAgdmFyIG1hcHBpbmcsIEEsIG4sIGNiO1xuICAgIGFGdW5jdGlvbih0aGlzKTtcbiAgICBtYXBwaW5nID0gbWFwRm4gIT09IHVuZGVmaW5lZDtcbiAgICBpZiAobWFwcGluZykgYUZ1bmN0aW9uKG1hcEZuKTtcbiAgICBpZiAoc291cmNlID09IHVuZGVmaW5lZCkgcmV0dXJuIG5ldyB0aGlzKCk7XG4gICAgQSA9IFtdO1xuICAgIGlmIChtYXBwaW5nKSB7XG4gICAgICBuID0gMDtcbiAgICAgIGNiID0gY3R4KG1hcEZuLCBhcmd1bWVudHNbMl0sIDIpO1xuICAgICAgZm9yT2Yoc291cmNlLCBmYWxzZSwgZnVuY3Rpb24gKG5leHRJdGVtKSB7XG4gICAgICAgIEEucHVzaChjYihuZXh0SXRlbSwgbisrKSk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZm9yT2Yoc291cmNlLCBmYWxzZSwgQS5wdXNoLCBBKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyB0aGlzKEEpO1xuICB9IH0pO1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS9cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKENPTExFQ1RJT04pIHtcbiAgJGV4cG9ydCgkZXhwb3J0LlMsIENPTExFQ1RJT04sIHsgb2Y6IGZ1bmN0aW9uIG9mKCkge1xuICAgIHZhciBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciBBID0gbmV3IEFycmF5KGxlbmd0aCk7XG4gICAgd2hpbGUgKGxlbmd0aC0tKSBBW2xlbmd0aF0gPSBhcmd1bWVudHNbbGVuZ3RoXTtcbiAgICByZXR1cm4gbmV3IHRoaXMoQSk7XG4gIH0gfSk7XG59O1xuIiwiLy8gV29ya3Mgd2l0aCBfX3Byb3RvX18gb25seS4gT2xkIHY4IGNhbid0IHdvcmsgd2l0aCBudWxsIHByb3RvIG9iamVjdHMuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90byAqL1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBjaGVjayA9IGZ1bmN0aW9uIChPLCBwcm90bykge1xuICBhbk9iamVjdChPKTtcbiAgaWYgKCFpc09iamVjdChwcm90bykgJiYgcHJvdG8gIT09IG51bGwpIHRocm93IFR5cGVFcnJvcihwcm90byArIFwiOiBjYW4ndCBzZXQgYXMgcHJvdG90eXBlIVwiKTtcbn07XG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc2V0OiBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgKCdfX3Byb3RvX18nIGluIHt9ID8gLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICAgIGZ1bmN0aW9uICh0ZXN0LCBidWdneSwgc2V0KSB7XG4gICAgICB0cnkge1xuICAgICAgICBzZXQgPSByZXF1aXJlKCcuL19jdHgnKShGdW5jdGlvbi5jYWxsLCByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpLmYoT2JqZWN0LnByb3RvdHlwZSwgJ19fcHJvdG9fXycpLnNldCwgMik7XG4gICAgICAgIHNldCh0ZXN0LCBbXSk7XG4gICAgICAgIGJ1Z2d5ID0gISh0ZXN0IGluc3RhbmNlb2YgQXJyYXkpO1xuICAgICAgfSBjYXRjaCAoZSkgeyBidWdneSA9IHRydWU7IH1cbiAgICAgIHJldHVybiBmdW5jdGlvbiBzZXRQcm90b3R5cGVPZihPLCBwcm90bykge1xuICAgICAgICBjaGVjayhPLCBwcm90byk7XG4gICAgICAgIGlmIChidWdneSkgTy5fX3Byb3RvX18gPSBwcm90bztcbiAgICAgICAgZWxzZSBzZXQoTywgcHJvdG8pO1xuICAgICAgICByZXR1cm4gTztcbiAgICAgIH07XG4gICAgfSh7fSwgZmFsc2UpIDogdW5kZWZpbmVkKSxcbiAgY2hlY2s6IGNoZWNrXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpO1xudmFyIFNQRUNJRVMgPSByZXF1aXJlKCcuL193a3MnKSgnc3BlY2llcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChLRVkpIHtcbiAgdmFyIEMgPSBnbG9iYWxbS0VZXTtcbiAgaWYgKERFU0NSSVBUT1JTICYmIEMgJiYgIUNbU1BFQ0lFU10pIGRQLmYoQywgU1BFQ0lFUywge1xuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH1cbiAgfSk7XG59O1xuIiwidmFyIGRlZiA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgVEFHID0gcmVxdWlyZSgnLi9fd2tzJykoJ3RvU3RyaW5nVGFnJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCB0YWcsIHN0YXQpIHtcbiAgaWYgKGl0ICYmICFoYXMoaXQgPSBzdGF0ID8gaXQgOiBpdC5wcm90b3R5cGUsIFRBRykpIGRlZihpdCwgVEFHLCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgdmFsdWU6IHRhZyB9KTtcbn07XG4iLCJ2YXIgc2hhcmVkID0gcmVxdWlyZSgnLi9fc2hhcmVkJykoJ2tleXMnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuL191aWQnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4gc2hhcmVkW2tleV0gfHwgKHNoYXJlZFtrZXldID0gdWlkKGtleSkpO1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIFNIQVJFRCA9ICdfX2NvcmUtanNfc2hhcmVkX18nO1xudmFyIHN0b3JlID0gZ2xvYmFsW1NIQVJFRF0gfHwgKGdsb2JhbFtTSEFSRURdID0ge30pO1xuXG4obW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICByZXR1cm4gc3RvcmVba2V5XSB8fCAoc3RvcmVba2V5XSA9IHZhbHVlICE9PSB1bmRlZmluZWQgPyB2YWx1ZSA6IHt9KTtcbn0pKCd2ZXJzaW9ucycsIFtdKS5wdXNoKHtcbiAgdmVyc2lvbjogY29yZS52ZXJzaW9uLFxuICBtb2RlOiByZXF1aXJlKCcuL19saWJyYXJ5JykgPyAncHVyZScgOiAnZ2xvYmFsJyxcbiAgY29weXJpZ2h0OiAnwqkgMjAxOSBEZW5pcyBQdXNoa2FyZXYgKHpsb2lyb2NrLnJ1KSdcbn0pO1xuIiwiLy8gNy4zLjIwIFNwZWNpZXNDb25zdHJ1Y3RvcihPLCBkZWZhdWx0Q29uc3RydWN0b3IpXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgU1BFQ0lFUyA9IHJlcXVpcmUoJy4vX3drcycpKCdzcGVjaWVzJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBEKSB7XG4gIHZhciBDID0gYW5PYmplY3QoTykuY29uc3RydWN0b3I7XG4gIHZhciBTO1xuICByZXR1cm4gQyA9PT0gdW5kZWZpbmVkIHx8IChTID0gYW5PYmplY3QoQylbU1BFQ0lFU10pID09IHVuZGVmaW5lZCA/IEQgOiBhRnVuY3Rpb24oUyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobWV0aG9kLCBhcmcpIHtcbiAgcmV0dXJuICEhbWV0aG9kICYmIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlbGVzcy1jYWxsXG4gICAgYXJnID8gbWV0aG9kLmNhbGwobnVsbCwgZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9LCAxKSA6IG1ldGhvZC5jYWxsKG51bGwpO1xuICB9KTtcbn07XG4iLCJ2YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG4vLyB0cnVlICAtPiBTdHJpbmcjYXRcbi8vIGZhbHNlIC0+IFN0cmluZyNjb2RlUG9pbnRBdFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoVE9fU1RSSU5HKSB7XG4gIHJldHVybiBmdW5jdGlvbiAodGhhdCwgcG9zKSB7XG4gICAgdmFyIHMgPSBTdHJpbmcoZGVmaW5lZCh0aGF0KSk7XG4gICAgdmFyIGkgPSB0b0ludGVnZXIocG9zKTtcbiAgICB2YXIgbCA9IHMubGVuZ3RoO1xuICAgIHZhciBhLCBiO1xuICAgIGlmIChpIDwgMCB8fCBpID49IGwpIHJldHVybiBUT19TVFJJTkcgPyAnJyA6IHVuZGVmaW5lZDtcbiAgICBhID0gcy5jaGFyQ29kZUF0KGkpO1xuICAgIHJldHVybiBhIDwgMHhkODAwIHx8IGEgPiAweGRiZmYgfHwgaSArIDEgPT09IGwgfHwgKGIgPSBzLmNoYXJDb2RlQXQoaSArIDEpKSA8IDB4ZGMwMCB8fCBiID4gMHhkZmZmXG4gICAgICA/IFRPX1NUUklORyA/IHMuY2hhckF0KGkpIDogYVxuICAgICAgOiBUT19TVFJJTkcgPyBzLnNsaWNlKGksIGkgKyAyKSA6IChhIC0gMHhkODAwIDw8IDEwKSArIChiIC0gMHhkYzAwKSArIDB4MTAwMDA7XG4gIH07XG59O1xuIiwiLy8gaGVscGVyIGZvciBTdHJpbmcje3N0YXJ0c1dpdGgsIGVuZHNXaXRoLCBpbmNsdWRlc31cbnZhciBpc1JlZ0V4cCA9IHJlcXVpcmUoJy4vX2lzLXJlZ2V4cCcpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRoYXQsIHNlYXJjaFN0cmluZywgTkFNRSkge1xuICBpZiAoaXNSZWdFeHAoc2VhcmNoU3RyaW5nKSkgdGhyb3cgVHlwZUVycm9yKCdTdHJpbmcjJyArIE5BTUUgKyBcIiBkb2Vzbid0IGFjY2VwdCByZWdleCFcIik7XG4gIHJldHVybiBTdHJpbmcoZGVmaW5lZCh0aGF0KSk7XG59O1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbnZhciBxdW90ID0gL1wiL2c7XG4vLyBCLjIuMy4yLjEgQ3JlYXRlSFRNTChzdHJpbmcsIHRhZywgYXR0cmlidXRlLCB2YWx1ZSlcbnZhciBjcmVhdGVIVE1MID0gZnVuY3Rpb24gKHN0cmluZywgdGFnLCBhdHRyaWJ1dGUsIHZhbHVlKSB7XG4gIHZhciBTID0gU3RyaW5nKGRlZmluZWQoc3RyaW5nKSk7XG4gIHZhciBwMSA9ICc8JyArIHRhZztcbiAgaWYgKGF0dHJpYnV0ZSAhPT0gJycpIHAxICs9ICcgJyArIGF0dHJpYnV0ZSArICc9XCInICsgU3RyaW5nKHZhbHVlKS5yZXBsYWNlKHF1b3QsICcmcXVvdDsnKSArICdcIic7XG4gIHJldHVybiBwMSArICc+JyArIFMgKyAnPC8nICsgdGFnICsgJz4nO1xufTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE5BTUUsIGV4ZWMpIHtcbiAgdmFyIE8gPSB7fTtcbiAgT1tOQU1FXSA9IGV4ZWMoY3JlYXRlSFRNTCk7XG4gICRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIHZhciB0ZXN0ID0gJydbTkFNRV0oJ1wiJyk7XG4gICAgcmV0dXJuIHRlc3QgIT09IHRlc3QudG9Mb3dlckNhc2UoKSB8fCB0ZXN0LnNwbGl0KCdcIicpLmxlbmd0aCA+IDM7XG4gIH0pLCAnU3RyaW5nJywgTyk7XG59O1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc3RyaW5nLXBhZC1zdGFydC1lbmRcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIHJlcGVhdCA9IHJlcXVpcmUoJy4vX3N0cmluZy1yZXBlYXQnKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0aGF0LCBtYXhMZW5ndGgsIGZpbGxTdHJpbmcsIGxlZnQpIHtcbiAgdmFyIFMgPSBTdHJpbmcoZGVmaW5lZCh0aGF0KSk7XG4gIHZhciBzdHJpbmdMZW5ndGggPSBTLmxlbmd0aDtcbiAgdmFyIGZpbGxTdHIgPSBmaWxsU3RyaW5nID09PSB1bmRlZmluZWQgPyAnICcgOiBTdHJpbmcoZmlsbFN0cmluZyk7XG4gIHZhciBpbnRNYXhMZW5ndGggPSB0b0xlbmd0aChtYXhMZW5ndGgpO1xuICBpZiAoaW50TWF4TGVuZ3RoIDw9IHN0cmluZ0xlbmd0aCB8fCBmaWxsU3RyID09ICcnKSByZXR1cm4gUztcbiAgdmFyIGZpbGxMZW4gPSBpbnRNYXhMZW5ndGggLSBzdHJpbmdMZW5ndGg7XG4gIHZhciBzdHJpbmdGaWxsZXIgPSByZXBlYXQuY2FsbChmaWxsU3RyLCBNYXRoLmNlaWwoZmlsbExlbiAvIGZpbGxTdHIubGVuZ3RoKSk7XG4gIGlmIChzdHJpbmdGaWxsZXIubGVuZ3RoID4gZmlsbExlbikgc3RyaW5nRmlsbGVyID0gc3RyaW5nRmlsbGVyLnNsaWNlKDAsIGZpbGxMZW4pO1xuICByZXR1cm4gbGVmdCA/IHN0cmluZ0ZpbGxlciArIFMgOiBTICsgc3RyaW5nRmlsbGVyO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiByZXBlYXQoY291bnQpIHtcbiAgdmFyIHN0ciA9IFN0cmluZyhkZWZpbmVkKHRoaXMpKTtcbiAgdmFyIHJlcyA9ICcnO1xuICB2YXIgbiA9IHRvSW50ZWdlcihjb3VudCk7XG4gIGlmIChuIDwgMCB8fCBuID09IEluZmluaXR5KSB0aHJvdyBSYW5nZUVycm9yKFwiQ291bnQgY2FuJ3QgYmUgbmVnYXRpdmVcIik7XG4gIGZvciAoO24gPiAwOyAobiA+Pj49IDEpICYmIChzdHIgKz0gc3RyKSkgaWYgKG4gJiAxKSByZXMgKz0gc3RyO1xuICByZXR1cm4gcmVzO1xufTtcbiIsInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgc3BhY2VzID0gcmVxdWlyZSgnLi9fc3RyaW5nLXdzJyk7XG52YXIgc3BhY2UgPSAnWycgKyBzcGFjZXMgKyAnXSc7XG52YXIgbm9uID0gJ1xcdTIwMGJcXHUwMDg1JztcbnZhciBsdHJpbSA9IFJlZ0V4cCgnXicgKyBzcGFjZSArIHNwYWNlICsgJyonKTtcbnZhciBydHJpbSA9IFJlZ0V4cChzcGFjZSArIHNwYWNlICsgJyokJyk7XG5cbnZhciBleHBvcnRlciA9IGZ1bmN0aW9uIChLRVksIGV4ZWMsIEFMSUFTKSB7XG4gIHZhciBleHAgPSB7fTtcbiAgdmFyIEZPUkNFID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiAhIXNwYWNlc1tLRVldKCkgfHwgbm9uW0tFWV0oKSAhPSBub247XG4gIH0pO1xuICB2YXIgZm4gPSBleHBbS0VZXSA9IEZPUkNFID8gZXhlYyh0cmltKSA6IHNwYWNlc1tLRVldO1xuICBpZiAoQUxJQVMpIGV4cFtBTElBU10gPSBmbjtcbiAgJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiBGT1JDRSwgJ1N0cmluZycsIGV4cCk7XG59O1xuXG4vLyAxIC0+IFN0cmluZyN0cmltTGVmdFxuLy8gMiAtPiBTdHJpbmcjdHJpbVJpZ2h0XG4vLyAzIC0+IFN0cmluZyN0cmltXG52YXIgdHJpbSA9IGV4cG9ydGVyLnRyaW0gPSBmdW5jdGlvbiAoc3RyaW5nLCBUWVBFKSB7XG4gIHN0cmluZyA9IFN0cmluZyhkZWZpbmVkKHN0cmluZykpO1xuICBpZiAoVFlQRSAmIDEpIHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKGx0cmltLCAnJyk7XG4gIGlmIChUWVBFICYgMikgc3RyaW5nID0gc3RyaW5nLnJlcGxhY2UocnRyaW0sICcnKTtcbiAgcmV0dXJuIHN0cmluZztcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0ZXI7XG4iLCJtb2R1bGUuZXhwb3J0cyA9ICdcXHgwOVxceDBBXFx4MEJcXHgwQ1xceDBEXFx4MjBcXHhBMFxcdTE2ODBcXHUxODBFXFx1MjAwMFxcdTIwMDFcXHUyMDAyXFx1MjAwMycgK1xuICAnXFx1MjAwNFxcdTIwMDVcXHUyMDA2XFx1MjAwN1xcdTIwMDhcXHUyMDA5XFx1MjAwQVxcdTIwMkZcXHUyMDVGXFx1MzAwMFxcdTIwMjhcXHUyMDI5XFx1RkVGRic7XG4iLCJ2YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgaW52b2tlID0gcmVxdWlyZSgnLi9faW52b2tlJyk7XG52YXIgaHRtbCA9IHJlcXVpcmUoJy4vX2h0bWwnKTtcbnZhciBjZWwgPSByZXF1aXJlKCcuL19kb20tY3JlYXRlJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgcHJvY2VzcyA9IGdsb2JhbC5wcm9jZXNzO1xudmFyIHNldFRhc2sgPSBnbG9iYWwuc2V0SW1tZWRpYXRlO1xudmFyIGNsZWFyVGFzayA9IGdsb2JhbC5jbGVhckltbWVkaWF0ZTtcbnZhciBNZXNzYWdlQ2hhbm5lbCA9IGdsb2JhbC5NZXNzYWdlQ2hhbm5lbDtcbnZhciBEaXNwYXRjaCA9IGdsb2JhbC5EaXNwYXRjaDtcbnZhciBjb3VudGVyID0gMDtcbnZhciBxdWV1ZSA9IHt9O1xudmFyIE9OUkVBRFlTVEFURUNIQU5HRSA9ICdvbnJlYWR5c3RhdGVjaGFuZ2UnO1xudmFyIGRlZmVyLCBjaGFubmVsLCBwb3J0O1xudmFyIHJ1biA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGlkID0gK3RoaXM7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgaWYgKHF1ZXVlLmhhc093blByb3BlcnR5KGlkKSkge1xuICAgIHZhciBmbiA9IHF1ZXVlW2lkXTtcbiAgICBkZWxldGUgcXVldWVbaWRdO1xuICAgIGZuKCk7XG4gIH1cbn07XG52YXIgbGlzdGVuZXIgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgcnVuLmNhbGwoZXZlbnQuZGF0YSk7XG59O1xuLy8gTm9kZS5qcyAwLjkrICYgSUUxMCsgaGFzIHNldEltbWVkaWF0ZSwgb3RoZXJ3aXNlOlxuaWYgKCFzZXRUYXNrIHx8ICFjbGVhclRhc2spIHtcbiAgc2V0VGFzayA9IGZ1bmN0aW9uIHNldEltbWVkaWF0ZShmbikge1xuICAgIHZhciBhcmdzID0gW107XG4gICAgdmFyIGkgPSAxO1xuICAgIHdoaWxlIChhcmd1bWVudHMubGVuZ3RoID4gaSkgYXJncy5wdXNoKGFyZ3VtZW50c1tpKytdKTtcbiAgICBxdWV1ZVsrK2NvdW50ZXJdID0gZnVuY3Rpb24gKCkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jXG4gICAgICBpbnZva2UodHlwZW9mIGZuID09ICdmdW5jdGlvbicgPyBmbiA6IEZ1bmN0aW9uKGZuKSwgYXJncyk7XG4gICAgfTtcbiAgICBkZWZlcihjb3VudGVyKTtcbiAgICByZXR1cm4gY291bnRlcjtcbiAgfTtcbiAgY2xlYXJUYXNrID0gZnVuY3Rpb24gY2xlYXJJbW1lZGlhdGUoaWQpIHtcbiAgICBkZWxldGUgcXVldWVbaWRdO1xuICB9O1xuICAvLyBOb2RlLmpzIDAuOC1cbiAgaWYgKHJlcXVpcmUoJy4vX2NvZicpKHByb2Nlc3MpID09ICdwcm9jZXNzJykge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGN0eChydW4sIGlkLCAxKSk7XG4gICAgfTtcbiAgLy8gU3BoZXJlIChKUyBnYW1lIGVuZ2luZSkgRGlzcGF0Y2ggQVBJXG4gIH0gZWxzZSBpZiAoRGlzcGF0Y2ggJiYgRGlzcGF0Y2gubm93KSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIERpc3BhdGNoLm5vdyhjdHgocnVuLCBpZCwgMSkpO1xuICAgIH07XG4gIC8vIEJyb3dzZXJzIHdpdGggTWVzc2FnZUNoYW5uZWwsIGluY2x1ZGVzIFdlYldvcmtlcnNcbiAgfSBlbHNlIGlmIChNZXNzYWdlQ2hhbm5lbCkge1xuICAgIGNoYW5uZWwgPSBuZXcgTWVzc2FnZUNoYW5uZWwoKTtcbiAgICBwb3J0ID0gY2hhbm5lbC5wb3J0MjtcbiAgICBjaGFubmVsLnBvcnQxLm9ubWVzc2FnZSA9IGxpc3RlbmVyO1xuICAgIGRlZmVyID0gY3R4KHBvcnQucG9zdE1lc3NhZ2UsIHBvcnQsIDEpO1xuICAvLyBCcm93c2VycyB3aXRoIHBvc3RNZXNzYWdlLCBza2lwIFdlYldvcmtlcnNcbiAgLy8gSUU4IGhhcyBwb3N0TWVzc2FnZSwgYnV0IGl0J3Mgc3luYyAmIHR5cGVvZiBpdHMgcG9zdE1lc3NhZ2UgaXMgJ29iamVjdCdcbiAgfSBlbHNlIGlmIChnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lciAmJiB0eXBlb2YgcG9zdE1lc3NhZ2UgPT0gJ2Z1bmN0aW9uJyAmJiAhZ2xvYmFsLmltcG9ydFNjcmlwdHMpIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgZ2xvYmFsLnBvc3RNZXNzYWdlKGlkICsgJycsICcqJyk7XG4gICAgfTtcbiAgICBnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGxpc3RlbmVyLCBmYWxzZSk7XG4gIC8vIElFOC1cbiAgfSBlbHNlIGlmIChPTlJFQURZU1RBVEVDSEFOR0UgaW4gY2VsKCdzY3JpcHQnKSkge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBodG1sLmFwcGVuZENoaWxkKGNlbCgnc2NyaXB0JykpW09OUkVBRFlTVEFURUNIQU5HRV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGh0bWwucmVtb3ZlQ2hpbGQodGhpcyk7XG4gICAgICAgIHJ1bi5jYWxsKGlkKTtcbiAgICAgIH07XG4gICAgfTtcbiAgLy8gUmVzdCBvbGQgYnJvd3NlcnNcbiAgfSBlbHNlIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgc2V0VGltZW91dChjdHgocnVuLCBpZCwgMSksIDApO1xuICAgIH07XG4gIH1cbn1cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzZXQ6IHNldFRhc2ssXG4gIGNsZWFyOiBjbGVhclRhc2tcbn07XG4iLCJ2YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIG1heCA9IE1hdGgubWF4O1xudmFyIG1pbiA9IE1hdGgubWluO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5kZXgsIGxlbmd0aCkge1xuICBpbmRleCA9IHRvSW50ZWdlcihpbmRleCk7XG4gIHJldHVybiBpbmRleCA8IDAgPyBtYXgoaW5kZXggKyBsZW5ndGgsIDApIDogbWluKGluZGV4LCBsZW5ndGgpO1xufTtcbiIsIi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXRvaW5kZXhcbnZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpdCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gMDtcbiAgdmFyIG51bWJlciA9IHRvSW50ZWdlcihpdCk7XG4gIHZhciBsZW5ndGggPSB0b0xlbmd0aChudW1iZXIpO1xuICBpZiAobnVtYmVyICE9PSBsZW5ndGgpIHRocm93IFJhbmdlRXJyb3IoJ1dyb25nIGxlbmd0aCEnKTtcbiAgcmV0dXJuIGxlbmd0aDtcbn07XG4iLCIvLyA3LjEuNCBUb0ludGVnZXJcbnZhciBjZWlsID0gTWF0aC5jZWlsO1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpc05hTihpdCA9ICtpdCkgPyAwIDogKGl0ID4gMCA/IGZsb29yIDogY2VpbCkoaXQpO1xufTtcbiIsIi8vIHRvIGluZGV4ZWQgb2JqZWN0LCB0b09iamVjdCB3aXRoIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgc3RyaW5nc1xudmFyIElPYmplY3QgPSByZXF1aXJlKCcuL19pb2JqZWN0Jyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBJT2JqZWN0KGRlZmluZWQoaXQpKTtcbn07XG4iLCIvLyA3LjEuMTUgVG9MZW5ndGhcbnZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgbWluID0gTWF0aC5taW47XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgPiAwID8gbWluKHRvSW50ZWdlcihpdCksIDB4MWZmZmZmZmZmZmZmZmYpIDogMDsgLy8gcG93KDIsIDUzKSAtIDEgPT0gOTAwNzE5OTI1NDc0MDk5MVxufTtcbiIsIi8vIDcuMS4xMyBUb09iamVjdChhcmd1bWVudClcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIE9iamVjdChkZWZpbmVkKGl0KSk7XG59O1xuIiwiLy8gNy4xLjEgVG9QcmltaXRpdmUoaW5wdXQgWywgUHJlZmVycmVkVHlwZV0pXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbi8vIGluc3RlYWQgb2YgdGhlIEVTNiBzcGVjIHZlcnNpb24sIHdlIGRpZG4ndCBpbXBsZW1lbnQgQEB0b1ByaW1pdGl2ZSBjYXNlXG4vLyBhbmQgdGhlIHNlY29uZCBhcmd1bWVudCAtIGZsYWcgLSBwcmVmZXJyZWQgdHlwZSBpcyBhIHN0cmluZ1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIFMpIHtcbiAgaWYgKCFpc09iamVjdChpdCkpIHJldHVybiBpdDtcbiAgdmFyIGZuLCB2YWw7XG4gIGlmIChTICYmIHR5cGVvZiAoZm4gPSBpdC50b1N0cmluZykgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNPYmplY3QodmFsID0gZm4uY2FsbChpdCkpKSByZXR1cm4gdmFsO1xuICBpZiAodHlwZW9mIChmbiA9IGl0LnZhbHVlT2YpID09ICdmdW5jdGlvbicgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaXQpKSkgcmV0dXJuIHZhbDtcbiAgaWYgKCFTICYmIHR5cGVvZiAoZm4gPSBpdC50b1N0cmluZykgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNPYmplY3QodmFsID0gZm4uY2FsbChpdCkpKSByZXR1cm4gdmFsO1xuICB0aHJvdyBUeXBlRXJyb3IoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIik7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuaWYgKHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykpIHtcbiAgdmFyIExJQlJBUlkgPSByZXF1aXJlKCcuL19saWJyYXJ5Jyk7XG4gIHZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbiAgdmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbiAgdmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbiAgdmFyICR0eXBlZCA9IHJlcXVpcmUoJy4vX3R5cGVkJyk7XG4gIHZhciAkYnVmZmVyID0gcmVxdWlyZSgnLi9fdHlwZWQtYnVmZmVyJyk7XG4gIHZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbiAgdmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuL19hbi1pbnN0YW5jZScpO1xuICB2YXIgcHJvcGVydHlEZXNjID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xuICB2YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbiAgdmFyIHJlZGVmaW5lQWxsID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUtYWxsJyk7XG4gIHZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG4gIHZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xuICB2YXIgdG9JbmRleCA9IHJlcXVpcmUoJy4vX3RvLWluZGV4Jyk7XG4gIHZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuL190by1hYnNvbHV0ZS1pbmRleCcpO1xuICB2YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcbiAgdmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xuICB2YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4vX2NsYXNzb2YnKTtcbiAgdmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG4gIHZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xuICB2YXIgaXNBcnJheUl0ZXIgPSByZXF1aXJlKCcuL19pcy1hcnJheS1pdGVyJyk7XG4gIHZhciBjcmVhdGUgPSByZXF1aXJlKCcuL19vYmplY3QtY3JlYXRlJyk7XG4gIHZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbiAgdmFyIGdPUE4gPSByZXF1aXJlKCcuL19vYmplY3QtZ29wbicpLmY7XG4gIHZhciBnZXRJdGVyRm4gPSByZXF1aXJlKCcuL2NvcmUuZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xuICB2YXIgdWlkID0gcmVxdWlyZSgnLi9fdWlkJyk7XG4gIHZhciB3a3MgPSByZXF1aXJlKCcuL193a3MnKTtcbiAgdmFyIGNyZWF0ZUFycmF5TWV0aG9kID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpO1xuICB2YXIgY3JlYXRlQXJyYXlJbmNsdWRlcyA9IHJlcXVpcmUoJy4vX2FycmF5LWluY2x1ZGVzJyk7XG4gIHZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuL19zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG4gIHZhciBBcnJheUl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vZXM2LmFycmF5Lml0ZXJhdG9yJyk7XG4gIHZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuL19pdGVyYXRvcnMnKTtcbiAgdmFyICRpdGVyRGV0ZWN0ID0gcmVxdWlyZSgnLi9faXRlci1kZXRlY3QnKTtcbiAgdmFyIHNldFNwZWNpZXMgPSByZXF1aXJlKCcuL19zZXQtc3BlY2llcycpO1xuICB2YXIgYXJyYXlGaWxsID0gcmVxdWlyZSgnLi9fYXJyYXktZmlsbCcpO1xuICB2YXIgYXJyYXlDb3B5V2l0aGluID0gcmVxdWlyZSgnLi9fYXJyYXktY29weS13aXRoaW4nKTtcbiAgdmFyICREUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xuICB2YXIgJEdPUEQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpO1xuICB2YXIgZFAgPSAkRFAuZjtcbiAgdmFyIGdPUEQgPSAkR09QRC5mO1xuICB2YXIgUmFuZ2VFcnJvciA9IGdsb2JhbC5SYW5nZUVycm9yO1xuICB2YXIgVHlwZUVycm9yID0gZ2xvYmFsLlR5cGVFcnJvcjtcbiAgdmFyIFVpbnQ4QXJyYXkgPSBnbG9iYWwuVWludDhBcnJheTtcbiAgdmFyIEFSUkFZX0JVRkZFUiA9ICdBcnJheUJ1ZmZlcic7XG4gIHZhciBTSEFSRURfQlVGRkVSID0gJ1NoYXJlZCcgKyBBUlJBWV9CVUZGRVI7XG4gIHZhciBCWVRFU19QRVJfRUxFTUVOVCA9ICdCWVRFU19QRVJfRUxFTUVOVCc7XG4gIHZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcbiAgdmFyIEFycmF5UHJvdG8gPSBBcnJheVtQUk9UT1RZUEVdO1xuICB2YXIgJEFycmF5QnVmZmVyID0gJGJ1ZmZlci5BcnJheUJ1ZmZlcjtcbiAgdmFyICREYXRhVmlldyA9ICRidWZmZXIuRGF0YVZpZXc7XG4gIHZhciBhcnJheUZvckVhY2ggPSBjcmVhdGVBcnJheU1ldGhvZCgwKTtcbiAgdmFyIGFycmF5RmlsdGVyID0gY3JlYXRlQXJyYXlNZXRob2QoMik7XG4gIHZhciBhcnJheVNvbWUgPSBjcmVhdGVBcnJheU1ldGhvZCgzKTtcbiAgdmFyIGFycmF5RXZlcnkgPSBjcmVhdGVBcnJheU1ldGhvZCg0KTtcbiAgdmFyIGFycmF5RmluZCA9IGNyZWF0ZUFycmF5TWV0aG9kKDUpO1xuICB2YXIgYXJyYXlGaW5kSW5kZXggPSBjcmVhdGVBcnJheU1ldGhvZCg2KTtcbiAgdmFyIGFycmF5SW5jbHVkZXMgPSBjcmVhdGVBcnJheUluY2x1ZGVzKHRydWUpO1xuICB2YXIgYXJyYXlJbmRleE9mID0gY3JlYXRlQXJyYXlJbmNsdWRlcyhmYWxzZSk7XG4gIHZhciBhcnJheVZhbHVlcyA9IEFycmF5SXRlcmF0b3JzLnZhbHVlcztcbiAgdmFyIGFycmF5S2V5cyA9IEFycmF5SXRlcmF0b3JzLmtleXM7XG4gIHZhciBhcnJheUVudHJpZXMgPSBBcnJheUl0ZXJhdG9ycy5lbnRyaWVzO1xuICB2YXIgYXJyYXlMYXN0SW5kZXhPZiA9IEFycmF5UHJvdG8ubGFzdEluZGV4T2Y7XG4gIHZhciBhcnJheVJlZHVjZSA9IEFycmF5UHJvdG8ucmVkdWNlO1xuICB2YXIgYXJyYXlSZWR1Y2VSaWdodCA9IEFycmF5UHJvdG8ucmVkdWNlUmlnaHQ7XG4gIHZhciBhcnJheUpvaW4gPSBBcnJheVByb3RvLmpvaW47XG4gIHZhciBhcnJheVNvcnQgPSBBcnJheVByb3RvLnNvcnQ7XG4gIHZhciBhcnJheVNsaWNlID0gQXJyYXlQcm90by5zbGljZTtcbiAgdmFyIGFycmF5VG9TdHJpbmcgPSBBcnJheVByb3RvLnRvU3RyaW5nO1xuICB2YXIgYXJyYXlUb0xvY2FsZVN0cmluZyA9IEFycmF5UHJvdG8udG9Mb2NhbGVTdHJpbmc7XG4gIHZhciBJVEVSQVRPUiA9IHdrcygnaXRlcmF0b3InKTtcbiAgdmFyIFRBRyA9IHdrcygndG9TdHJpbmdUYWcnKTtcbiAgdmFyIFRZUEVEX0NPTlNUUlVDVE9SID0gdWlkKCd0eXBlZF9jb25zdHJ1Y3RvcicpO1xuICB2YXIgREVGX0NPTlNUUlVDVE9SID0gdWlkKCdkZWZfY29uc3RydWN0b3InKTtcbiAgdmFyIEFMTF9DT05TVFJVQ1RPUlMgPSAkdHlwZWQuQ09OU1RSO1xuICB2YXIgVFlQRURfQVJSQVkgPSAkdHlwZWQuVFlQRUQ7XG4gIHZhciBWSUVXID0gJHR5cGVkLlZJRVc7XG4gIHZhciBXUk9OR19MRU5HVEggPSAnV3JvbmcgbGVuZ3RoISc7XG5cbiAgdmFyICRtYXAgPSBjcmVhdGVBcnJheU1ldGhvZCgxLCBmdW5jdGlvbiAoTywgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIGFsbG9jYXRlKHNwZWNpZXNDb25zdHJ1Y3RvcihPLCBPW0RFRl9DT05TVFJVQ1RPUl0pLCBsZW5ndGgpO1xuICB9KTtcblxuICB2YXIgTElUVExFX0VORElBTiA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkobmV3IFVpbnQxNkFycmF5KFsxXSkuYnVmZmVyKVswXSA9PT0gMTtcbiAgfSk7XG5cbiAgdmFyIEZPUkNFRF9TRVQgPSAhIVVpbnQ4QXJyYXkgJiYgISFVaW50OEFycmF5W1BST1RPVFlQRV0uc2V0ICYmIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICBuZXcgVWludDhBcnJheSgxKS5zZXQoe30pO1xuICB9KTtcblxuICB2YXIgdG9PZmZzZXQgPSBmdW5jdGlvbiAoaXQsIEJZVEVTKSB7XG4gICAgdmFyIG9mZnNldCA9IHRvSW50ZWdlcihpdCk7XG4gICAgaWYgKG9mZnNldCA8IDAgfHwgb2Zmc2V0ICUgQllURVMpIHRocm93IFJhbmdlRXJyb3IoJ1dyb25nIG9mZnNldCEnKTtcbiAgICByZXR1cm4gb2Zmc2V0O1xuICB9O1xuXG4gIHZhciB2YWxpZGF0ZSA9IGZ1bmN0aW9uIChpdCkge1xuICAgIGlmIChpc09iamVjdChpdCkgJiYgVFlQRURfQVJSQVkgaW4gaXQpIHJldHVybiBpdDtcbiAgICB0aHJvdyBUeXBlRXJyb3IoaXQgKyAnIGlzIG5vdCBhIHR5cGVkIGFycmF5IScpO1xuICB9O1xuXG4gIHZhciBhbGxvY2F0ZSA9IGZ1bmN0aW9uIChDLCBsZW5ndGgpIHtcbiAgICBpZiAoIShpc09iamVjdChDKSAmJiBUWVBFRF9DT05TVFJVQ1RPUiBpbiBDKSkge1xuICAgICAgdGhyb3cgVHlwZUVycm9yKCdJdCBpcyBub3QgYSB0eXBlZCBhcnJheSBjb25zdHJ1Y3RvciEnKTtcbiAgICB9IHJldHVybiBuZXcgQyhsZW5ndGgpO1xuICB9O1xuXG4gIHZhciBzcGVjaWVzRnJvbUxpc3QgPSBmdW5jdGlvbiAoTywgbGlzdCkge1xuICAgIHJldHVybiBmcm9tTGlzdChzcGVjaWVzQ29uc3RydWN0b3IoTywgT1tERUZfQ09OU1RSVUNUT1JdKSwgbGlzdCk7XG4gIH07XG5cbiAgdmFyIGZyb21MaXN0ID0gZnVuY3Rpb24gKEMsIGxpc3QpIHtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHZhciBsZW5ndGggPSBsaXN0Lmxlbmd0aDtcbiAgICB2YXIgcmVzdWx0ID0gYWxsb2NhdGUoQywgbGVuZ3RoKTtcbiAgICB3aGlsZSAobGVuZ3RoID4gaW5kZXgpIHJlc3VsdFtpbmRleF0gPSBsaXN0W2luZGV4KytdO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgdmFyIGFkZEdldHRlciA9IGZ1bmN0aW9uIChpdCwga2V5LCBpbnRlcm5hbCkge1xuICAgIGRQKGl0LCBrZXksIHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLl9kW2ludGVybmFsXTsgfSB9KTtcbiAgfTtcblxuICB2YXIgJGZyb20gPSBmdW5jdGlvbiBmcm9tKHNvdXJjZSAvKiAsIG1hcGZuLCB0aGlzQXJnICovKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdChzb3VyY2UpO1xuICAgIHZhciBhTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgbWFwZm4gPSBhTGVuID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgbWFwcGluZyA9IG1hcGZuICE9PSB1bmRlZmluZWQ7XG4gICAgdmFyIGl0ZXJGbiA9IGdldEl0ZXJGbihPKTtcbiAgICB2YXIgaSwgbGVuZ3RoLCB2YWx1ZXMsIHJlc3VsdCwgc3RlcCwgaXRlcmF0b3I7XG4gICAgaWYgKGl0ZXJGbiAhPSB1bmRlZmluZWQgJiYgIWlzQXJyYXlJdGVyKGl0ZXJGbikpIHtcbiAgICAgIGZvciAoaXRlcmF0b3IgPSBpdGVyRm4uY2FsbChPKSwgdmFsdWVzID0gW10sIGkgPSAwOyAhKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmU7IGkrKykge1xuICAgICAgICB2YWx1ZXMucHVzaChzdGVwLnZhbHVlKTtcbiAgICAgIH0gTyA9IHZhbHVlcztcbiAgICB9XG4gICAgaWYgKG1hcHBpbmcgJiYgYUxlbiA+IDIpIG1hcGZuID0gY3R4KG1hcGZuLCBhcmd1bWVudHNbMl0sIDIpO1xuICAgIGZvciAoaSA9IDAsIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKSwgcmVzdWx0ID0gYWxsb2NhdGUodGhpcywgbGVuZ3RoKTsgbGVuZ3RoID4gaTsgaSsrKSB7XG4gICAgICByZXN1bHRbaV0gPSBtYXBwaW5nID8gbWFwZm4oT1tpXSwgaSkgOiBPW2ldO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIHZhciAkb2YgPSBmdW5jdGlvbiBvZigvKiAuLi5pdGVtcyAqLykge1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIHJlc3VsdCA9IGFsbG9jYXRlKHRoaXMsIGxlbmd0aCk7XG4gICAgd2hpbGUgKGxlbmd0aCA+IGluZGV4KSByZXN1bHRbaW5kZXhdID0gYXJndW1lbnRzW2luZGV4KytdO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgLy8gaU9TIFNhZmFyaSA2LnggZmFpbHMgaGVyZVxuICB2YXIgVE9fTE9DQUxFX0JVRyA9ICEhVWludDhBcnJheSAmJiBmYWlscyhmdW5jdGlvbiAoKSB7IGFycmF5VG9Mb2NhbGVTdHJpbmcuY2FsbChuZXcgVWludDhBcnJheSgxKSk7IH0pO1xuXG4gIHZhciAkdG9Mb2NhbGVTdHJpbmcgPSBmdW5jdGlvbiB0b0xvY2FsZVN0cmluZygpIHtcbiAgICByZXR1cm4gYXJyYXlUb0xvY2FsZVN0cmluZy5hcHBseShUT19MT0NBTEVfQlVHID8gYXJyYXlTbGljZS5jYWxsKHZhbGlkYXRlKHRoaXMpKSA6IHZhbGlkYXRlKHRoaXMpLCBhcmd1bWVudHMpO1xuICB9O1xuXG4gIHZhciBwcm90byA9IHtcbiAgICBjb3B5V2l0aGluOiBmdW5jdGlvbiBjb3B5V2l0aGluKHRhcmdldCwgc3RhcnQgLyogLCBlbmQgKi8pIHtcbiAgICAgIHJldHVybiBhcnJheUNvcHlXaXRoaW4uY2FsbCh2YWxpZGF0ZSh0aGlzKSwgdGFyZ2V0LCBzdGFydCwgYXJndW1lbnRzLmxlbmd0aCA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgZXZlcnk6IGZ1bmN0aW9uIGV2ZXJ5KGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgICByZXR1cm4gYXJyYXlFdmVyeSh2YWxpZGF0ZSh0aGlzKSwgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgZmlsbDogZnVuY3Rpb24gZmlsbCh2YWx1ZSAvKiAsIHN0YXJ0LCBlbmQgKi8pIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgICAgcmV0dXJuIGFycmF5RmlsbC5hcHBseSh2YWxpZGF0ZSh0aGlzKSwgYXJndW1lbnRzKTtcbiAgICB9LFxuICAgIGZpbHRlcjogZnVuY3Rpb24gZmlsdGVyKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgICByZXR1cm4gc3BlY2llc0Zyb21MaXN0KHRoaXMsIGFycmF5RmlsdGVyKHZhbGlkYXRlKHRoaXMpLCBjYWxsYmFja2ZuLFxuICAgICAgICBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCkpO1xuICAgIH0sXG4gICAgZmluZDogZnVuY3Rpb24gZmluZChwcmVkaWNhdGUgLyogLCB0aGlzQXJnICovKSB7XG4gICAgICByZXR1cm4gYXJyYXlGaW5kKHZhbGlkYXRlKHRoaXMpLCBwcmVkaWNhdGUsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgICB9LFxuICAgIGZpbmRJbmRleDogZnVuY3Rpb24gZmluZEluZGV4KHByZWRpY2F0ZSAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICAgIHJldHVybiBhcnJheUZpbmRJbmRleCh2YWxpZGF0ZSh0aGlzKSwgcHJlZGljYXRlLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBmb3JFYWNoOiBmdW5jdGlvbiBmb3JFYWNoKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgICBhcnJheUZvckVhY2godmFsaWRhdGUodGhpcyksIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgICB9LFxuICAgIGluZGV4T2Y6IGZ1bmN0aW9uIGluZGV4T2Yoc2VhcmNoRWxlbWVudCAvKiAsIGZyb21JbmRleCAqLykge1xuICAgICAgcmV0dXJuIGFycmF5SW5kZXhPZih2YWxpZGF0ZSh0aGlzKSwgc2VhcmNoRWxlbWVudCwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgaW5jbHVkZXM6IGZ1bmN0aW9uIGluY2x1ZGVzKHNlYXJjaEVsZW1lbnQgLyogLCBmcm9tSW5kZXggKi8pIHtcbiAgICAgIHJldHVybiBhcnJheUluY2x1ZGVzKHZhbGlkYXRlKHRoaXMpLCBzZWFyY2hFbGVtZW50LCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBqb2luOiBmdW5jdGlvbiBqb2luKHNlcGFyYXRvcikgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgICByZXR1cm4gYXJyYXlKb2luLmFwcGx5KHZhbGlkYXRlKHRoaXMpLCBhcmd1bWVudHMpO1xuICAgIH0sXG4gICAgbGFzdEluZGV4T2Y6IGZ1bmN0aW9uIGxhc3RJbmRleE9mKHNlYXJjaEVsZW1lbnQgLyogLCBmcm9tSW5kZXggKi8pIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgICAgcmV0dXJuIGFycmF5TGFzdEluZGV4T2YuYXBwbHkodmFsaWRhdGUodGhpcyksIGFyZ3VtZW50cyk7XG4gICAgfSxcbiAgICBtYXA6IGZ1bmN0aW9uIG1hcChtYXBmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICAgIHJldHVybiAkbWFwKHZhbGlkYXRlKHRoaXMpLCBtYXBmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgcmVkdWNlOiBmdW5jdGlvbiByZWR1Y2UoY2FsbGJhY2tmbiAvKiAsIGluaXRpYWxWYWx1ZSAqLykgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgICByZXR1cm4gYXJyYXlSZWR1Y2UuYXBwbHkodmFsaWRhdGUodGhpcyksIGFyZ3VtZW50cyk7XG4gICAgfSxcbiAgICByZWR1Y2VSaWdodDogZnVuY3Rpb24gcmVkdWNlUmlnaHQoY2FsbGJhY2tmbiAvKiAsIGluaXRpYWxWYWx1ZSAqLykgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgICByZXR1cm4gYXJyYXlSZWR1Y2VSaWdodC5hcHBseSh2YWxpZGF0ZSh0aGlzKSwgYXJndW1lbnRzKTtcbiAgICB9LFxuICAgIHJldmVyc2U6IGZ1bmN0aW9uIHJldmVyc2UoKSB7XG4gICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICB2YXIgbGVuZ3RoID0gdmFsaWRhdGUodGhhdCkubGVuZ3RoO1xuICAgICAgdmFyIG1pZGRsZSA9IE1hdGguZmxvb3IobGVuZ3RoIC8gMik7XG4gICAgICB2YXIgaW5kZXggPSAwO1xuICAgICAgdmFyIHZhbHVlO1xuICAgICAgd2hpbGUgKGluZGV4IDwgbWlkZGxlKSB7XG4gICAgICAgIHZhbHVlID0gdGhhdFtpbmRleF07XG4gICAgICAgIHRoYXRbaW5kZXgrK10gPSB0aGF0Wy0tbGVuZ3RoXTtcbiAgICAgICAgdGhhdFtsZW5ndGhdID0gdmFsdWU7XG4gICAgICB9IHJldHVybiB0aGF0O1xuICAgIH0sXG4gICAgc29tZTogZnVuY3Rpb24gc29tZShjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgICAgcmV0dXJuIGFycmF5U29tZSh2YWxpZGF0ZSh0aGlzKSwgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgc29ydDogZnVuY3Rpb24gc29ydChjb21wYXJlZm4pIHtcbiAgICAgIHJldHVybiBhcnJheVNvcnQuY2FsbCh2YWxpZGF0ZSh0aGlzKSwgY29tcGFyZWZuKTtcbiAgICB9LFxuICAgIHN1YmFycmF5OiBmdW5jdGlvbiBzdWJhcnJheShiZWdpbiwgZW5kKSB7XG4gICAgICB2YXIgTyA9IHZhbGlkYXRlKHRoaXMpO1xuICAgICAgdmFyIGxlbmd0aCA9IE8ubGVuZ3RoO1xuICAgICAgdmFyICRiZWdpbiA9IHRvQWJzb2x1dGVJbmRleChiZWdpbiwgbGVuZ3RoKTtcbiAgICAgIHJldHVybiBuZXcgKHNwZWNpZXNDb25zdHJ1Y3RvcihPLCBPW0RFRl9DT05TVFJVQ1RPUl0pKShcbiAgICAgICAgTy5idWZmZXIsXG4gICAgICAgIE8uYnl0ZU9mZnNldCArICRiZWdpbiAqIE8uQllURVNfUEVSX0VMRU1FTlQsXG4gICAgICAgIHRvTGVuZ3RoKChlbmQgPT09IHVuZGVmaW5lZCA/IGxlbmd0aCA6IHRvQWJzb2x1dGVJbmRleChlbmQsIGxlbmd0aCkpIC0gJGJlZ2luKVxuICAgICAgKTtcbiAgICB9XG4gIH07XG5cbiAgdmFyICRzbGljZSA9IGZ1bmN0aW9uIHNsaWNlKHN0YXJ0LCBlbmQpIHtcbiAgICByZXR1cm4gc3BlY2llc0Zyb21MaXN0KHRoaXMsIGFycmF5U2xpY2UuY2FsbCh2YWxpZGF0ZSh0aGlzKSwgc3RhcnQsIGVuZCkpO1xuICB9O1xuXG4gIHZhciAkc2V0ID0gZnVuY3Rpb24gc2V0KGFycmF5TGlrZSAvKiAsIG9mZnNldCAqLykge1xuICAgIHZhbGlkYXRlKHRoaXMpO1xuICAgIHZhciBvZmZzZXQgPSB0b09mZnNldChhcmd1bWVudHNbMV0sIDEpO1xuICAgIHZhciBsZW5ndGggPSB0aGlzLmxlbmd0aDtcbiAgICB2YXIgc3JjID0gdG9PYmplY3QoYXJyYXlMaWtlKTtcbiAgICB2YXIgbGVuID0gdG9MZW5ndGgoc3JjLmxlbmd0aCk7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICBpZiAobGVuICsgb2Zmc2V0ID4gbGVuZ3RoKSB0aHJvdyBSYW5nZUVycm9yKFdST05HX0xFTkdUSCk7XG4gICAgd2hpbGUgKGluZGV4IDwgbGVuKSB0aGlzW29mZnNldCArIGluZGV4XSA9IHNyY1tpbmRleCsrXTtcbiAgfTtcblxuICB2YXIgJGl0ZXJhdG9ycyA9IHtcbiAgICBlbnRyaWVzOiBmdW5jdGlvbiBlbnRyaWVzKCkge1xuICAgICAgcmV0dXJuIGFycmF5RW50cmllcy5jYWxsKHZhbGlkYXRlKHRoaXMpKTtcbiAgICB9LFxuICAgIGtleXM6IGZ1bmN0aW9uIGtleXMoKSB7XG4gICAgICByZXR1cm4gYXJyYXlLZXlzLmNhbGwodmFsaWRhdGUodGhpcykpO1xuICAgIH0sXG4gICAgdmFsdWVzOiBmdW5jdGlvbiB2YWx1ZXMoKSB7XG4gICAgICByZXR1cm4gYXJyYXlWYWx1ZXMuY2FsbCh2YWxpZGF0ZSh0aGlzKSk7XG4gICAgfVxuICB9O1xuXG4gIHZhciBpc1RBSW5kZXggPSBmdW5jdGlvbiAodGFyZ2V0LCBrZXkpIHtcbiAgICByZXR1cm4gaXNPYmplY3QodGFyZ2V0KVxuICAgICAgJiYgdGFyZ2V0W1RZUEVEX0FSUkFZXVxuICAgICAgJiYgdHlwZW9mIGtleSAhPSAnc3ltYm9sJ1xuICAgICAgJiYga2V5IGluIHRhcmdldFxuICAgICAgJiYgU3RyaW5nKCtrZXkpID09IFN0cmluZyhrZXkpO1xuICB9O1xuICB2YXIgJGdldERlc2MgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIHtcbiAgICByZXR1cm4gaXNUQUluZGV4KHRhcmdldCwga2V5ID0gdG9QcmltaXRpdmUoa2V5LCB0cnVlKSlcbiAgICAgID8gcHJvcGVydHlEZXNjKDIsIHRhcmdldFtrZXldKVxuICAgICAgOiBnT1BEKHRhcmdldCwga2V5KTtcbiAgfTtcbiAgdmFyICRzZXREZXNjID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIGRlc2MpIHtcbiAgICBpZiAoaXNUQUluZGV4KHRhcmdldCwga2V5ID0gdG9QcmltaXRpdmUoa2V5LCB0cnVlKSlcbiAgICAgICYmIGlzT2JqZWN0KGRlc2MpXG4gICAgICAmJiBoYXMoZGVzYywgJ3ZhbHVlJylcbiAgICAgICYmICFoYXMoZGVzYywgJ2dldCcpXG4gICAgICAmJiAhaGFzKGRlc2MsICdzZXQnKVxuICAgICAgLy8gVE9ETzogYWRkIHZhbGlkYXRpb24gZGVzY3JpcHRvciB3L28gY2FsbGluZyBhY2Nlc3NvcnNcbiAgICAgICYmICFkZXNjLmNvbmZpZ3VyYWJsZVxuICAgICAgJiYgKCFoYXMoZGVzYywgJ3dyaXRhYmxlJykgfHwgZGVzYy53cml0YWJsZSlcbiAgICAgICYmICghaGFzKGRlc2MsICdlbnVtZXJhYmxlJykgfHwgZGVzYy5lbnVtZXJhYmxlKVxuICAgICkge1xuICAgICAgdGFyZ2V0W2tleV0gPSBkZXNjLnZhbHVlO1xuICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9IHJldHVybiBkUCh0YXJnZXQsIGtleSwgZGVzYyk7XG4gIH07XG5cbiAgaWYgKCFBTExfQ09OU1RSVUNUT1JTKSB7XG4gICAgJEdPUEQuZiA9ICRnZXREZXNjO1xuICAgICREUC5mID0gJHNldERlc2M7XG4gIH1cblxuICAkZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFBTExfQ09OU1RSVUNUT1JTLCAnT2JqZWN0Jywge1xuICAgIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogJGdldERlc2MsXG4gICAgZGVmaW5lUHJvcGVydHk6ICRzZXREZXNjXG4gIH0pO1xuXG4gIGlmIChmYWlscyhmdW5jdGlvbiAoKSB7IGFycmF5VG9TdHJpbmcuY2FsbCh7fSk7IH0pKSB7XG4gICAgYXJyYXlUb1N0cmluZyA9IGFycmF5VG9Mb2NhbGVTdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICAgIHJldHVybiBhcnJheUpvaW4uY2FsbCh0aGlzKTtcbiAgICB9O1xuICB9XG5cbiAgdmFyICRUeXBlZEFycmF5UHJvdG90eXBlJCA9IHJlZGVmaW5lQWxsKHt9LCBwcm90byk7XG4gIHJlZGVmaW5lQWxsKCRUeXBlZEFycmF5UHJvdG90eXBlJCwgJGl0ZXJhdG9ycyk7XG4gIGhpZGUoJFR5cGVkQXJyYXlQcm90b3R5cGUkLCBJVEVSQVRPUiwgJGl0ZXJhdG9ycy52YWx1ZXMpO1xuICByZWRlZmluZUFsbCgkVHlwZWRBcnJheVByb3RvdHlwZSQsIHtcbiAgICBzbGljZTogJHNsaWNlLFxuICAgIHNldDogJHNldCxcbiAgICBjb25zdHJ1Y3RvcjogZnVuY3Rpb24gKCkgeyAvKiBub29wICovIH0sXG4gICAgdG9TdHJpbmc6IGFycmF5VG9TdHJpbmcsXG4gICAgdG9Mb2NhbGVTdHJpbmc6ICR0b0xvY2FsZVN0cmluZ1xuICB9KTtcbiAgYWRkR2V0dGVyKCRUeXBlZEFycmF5UHJvdG90eXBlJCwgJ2J1ZmZlcicsICdiJyk7XG4gIGFkZEdldHRlcigkVHlwZWRBcnJheVByb3RvdHlwZSQsICdieXRlT2Zmc2V0JywgJ28nKTtcbiAgYWRkR2V0dGVyKCRUeXBlZEFycmF5UHJvdG90eXBlJCwgJ2J5dGVMZW5ndGgnLCAnbCcpO1xuICBhZGRHZXR0ZXIoJFR5cGVkQXJyYXlQcm90b3R5cGUkLCAnbGVuZ3RoJywgJ2UnKTtcbiAgZFAoJFR5cGVkQXJyYXlQcm90b3R5cGUkLCBUQUcsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXNbVFlQRURfQVJSQVldOyB9XG4gIH0pO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtc3RhdGVtZW50c1xuICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChLRVksIEJZVEVTLCB3cmFwcGVyLCBDTEFNUEVEKSB7XG4gICAgQ0xBTVBFRCA9ICEhQ0xBTVBFRDtcbiAgICB2YXIgTkFNRSA9IEtFWSArIChDTEFNUEVEID8gJ0NsYW1wZWQnIDogJycpICsgJ0FycmF5JztcbiAgICB2YXIgR0VUVEVSID0gJ2dldCcgKyBLRVk7XG4gICAgdmFyIFNFVFRFUiA9ICdzZXQnICsgS0VZO1xuICAgIHZhciBUeXBlZEFycmF5ID0gZ2xvYmFsW05BTUVdO1xuICAgIHZhciBCYXNlID0gVHlwZWRBcnJheSB8fCB7fTtcbiAgICB2YXIgVEFDID0gVHlwZWRBcnJheSAmJiBnZXRQcm90b3R5cGVPZihUeXBlZEFycmF5KTtcbiAgICB2YXIgRk9SQ0VEID0gIVR5cGVkQXJyYXkgfHwgISR0eXBlZC5BQlY7XG4gICAgdmFyIE8gPSB7fTtcbiAgICB2YXIgVHlwZWRBcnJheVByb3RvdHlwZSA9IFR5cGVkQXJyYXkgJiYgVHlwZWRBcnJheVtQUk9UT1RZUEVdO1xuICAgIHZhciBnZXR0ZXIgPSBmdW5jdGlvbiAodGhhdCwgaW5kZXgpIHtcbiAgICAgIHZhciBkYXRhID0gdGhhdC5fZDtcbiAgICAgIHJldHVybiBkYXRhLnZbR0VUVEVSXShpbmRleCAqIEJZVEVTICsgZGF0YS5vLCBMSVRUTEVfRU5ESUFOKTtcbiAgICB9O1xuICAgIHZhciBzZXR0ZXIgPSBmdW5jdGlvbiAodGhhdCwgaW5kZXgsIHZhbHVlKSB7XG4gICAgICB2YXIgZGF0YSA9IHRoYXQuX2Q7XG4gICAgICBpZiAoQ0xBTVBFRCkgdmFsdWUgPSAodmFsdWUgPSBNYXRoLnJvdW5kKHZhbHVlKSkgPCAwID8gMCA6IHZhbHVlID4gMHhmZiA/IDB4ZmYgOiB2YWx1ZSAmIDB4ZmY7XG4gICAgICBkYXRhLnZbU0VUVEVSXShpbmRleCAqIEJZVEVTICsgZGF0YS5vLCB2YWx1ZSwgTElUVExFX0VORElBTik7XG4gICAgfTtcbiAgICB2YXIgYWRkRWxlbWVudCA9IGZ1bmN0aW9uICh0aGF0LCBpbmRleCkge1xuICAgICAgZFAodGhhdCwgaW5kZXgsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIGdldHRlcih0aGlzLCBpbmRleCk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgcmV0dXJuIHNldHRlcih0aGlzLCBpbmRleCwgdmFsdWUpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlXG4gICAgICB9KTtcbiAgICB9O1xuICAgIGlmIChGT1JDRUQpIHtcbiAgICAgIFR5cGVkQXJyYXkgPSB3cmFwcGVyKGZ1bmN0aW9uICh0aGF0LCBkYXRhLCAkb2Zmc2V0LCAkbGVuZ3RoKSB7XG4gICAgICAgIGFuSW5zdGFuY2UodGhhdCwgVHlwZWRBcnJheSwgTkFNRSwgJ19kJyk7XG4gICAgICAgIHZhciBpbmRleCA9IDA7XG4gICAgICAgIHZhciBvZmZzZXQgPSAwO1xuICAgICAgICB2YXIgYnVmZmVyLCBieXRlTGVuZ3RoLCBsZW5ndGgsIGtsYXNzO1xuICAgICAgICBpZiAoIWlzT2JqZWN0KGRhdGEpKSB7XG4gICAgICAgICAgbGVuZ3RoID0gdG9JbmRleChkYXRhKTtcbiAgICAgICAgICBieXRlTGVuZ3RoID0gbGVuZ3RoICogQllURVM7XG4gICAgICAgICAgYnVmZmVyID0gbmV3ICRBcnJheUJ1ZmZlcihieXRlTGVuZ3RoKTtcbiAgICAgICAgfSBlbHNlIGlmIChkYXRhIGluc3RhbmNlb2YgJEFycmF5QnVmZmVyIHx8IChrbGFzcyA9IGNsYXNzb2YoZGF0YSkpID09IEFSUkFZX0JVRkZFUiB8fCBrbGFzcyA9PSBTSEFSRURfQlVGRkVSKSB7XG4gICAgICAgICAgYnVmZmVyID0gZGF0YTtcbiAgICAgICAgICBvZmZzZXQgPSB0b09mZnNldCgkb2Zmc2V0LCBCWVRFUyk7XG4gICAgICAgICAgdmFyICRsZW4gPSBkYXRhLmJ5dGVMZW5ndGg7XG4gICAgICAgICAgaWYgKCRsZW5ndGggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaWYgKCRsZW4gJSBCWVRFUykgdGhyb3cgUmFuZ2VFcnJvcihXUk9OR19MRU5HVEgpO1xuICAgICAgICAgICAgYnl0ZUxlbmd0aCA9ICRsZW4gLSBvZmZzZXQ7XG4gICAgICAgICAgICBpZiAoYnl0ZUxlbmd0aCA8IDApIHRocm93IFJhbmdlRXJyb3IoV1JPTkdfTEVOR1RIKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYnl0ZUxlbmd0aCA9IHRvTGVuZ3RoKCRsZW5ndGgpICogQllURVM7XG4gICAgICAgICAgICBpZiAoYnl0ZUxlbmd0aCArIG9mZnNldCA+ICRsZW4pIHRocm93IFJhbmdlRXJyb3IoV1JPTkdfTEVOR1RIKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbGVuZ3RoID0gYnl0ZUxlbmd0aCAvIEJZVEVTO1xuICAgICAgICB9IGVsc2UgaWYgKFRZUEVEX0FSUkFZIGluIGRhdGEpIHtcbiAgICAgICAgICByZXR1cm4gZnJvbUxpc3QoVHlwZWRBcnJheSwgZGF0YSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuICRmcm9tLmNhbGwoVHlwZWRBcnJheSwgZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgaGlkZSh0aGF0LCAnX2QnLCB7XG4gICAgICAgICAgYjogYnVmZmVyLFxuICAgICAgICAgIG86IG9mZnNldCxcbiAgICAgICAgICBsOiBieXRlTGVuZ3RoLFxuICAgICAgICAgIGU6IGxlbmd0aCxcbiAgICAgICAgICB2OiBuZXcgJERhdGFWaWV3KGJ1ZmZlcilcbiAgICAgICAgfSk7XG4gICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkgYWRkRWxlbWVudCh0aGF0LCBpbmRleCsrKTtcbiAgICAgIH0pO1xuICAgICAgVHlwZWRBcnJheVByb3RvdHlwZSA9IFR5cGVkQXJyYXlbUFJPVE9UWVBFXSA9IGNyZWF0ZSgkVHlwZWRBcnJheVByb3RvdHlwZSQpO1xuICAgICAgaGlkZShUeXBlZEFycmF5UHJvdG90eXBlLCAnY29uc3RydWN0b3InLCBUeXBlZEFycmF5KTtcbiAgICB9IGVsc2UgaWYgKCFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgICBUeXBlZEFycmF5KDEpO1xuICAgIH0pIHx8ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgICBuZXcgVHlwZWRBcnJheSgtMSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgfSkgfHwgISRpdGVyRGV0ZWN0KGZ1bmN0aW9uIChpdGVyKSB7XG4gICAgICBuZXcgVHlwZWRBcnJheSgpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgICAgbmV3IFR5cGVkQXJyYXkobnVsbCk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgICBuZXcgVHlwZWRBcnJheSgxLjUpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgICAgbmV3IFR5cGVkQXJyYXkoaXRlcik7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgfSwgdHJ1ZSkpIHtcbiAgICAgIFR5cGVkQXJyYXkgPSB3cmFwcGVyKGZ1bmN0aW9uICh0aGF0LCBkYXRhLCAkb2Zmc2V0LCAkbGVuZ3RoKSB7XG4gICAgICAgIGFuSW5zdGFuY2UodGhhdCwgVHlwZWRBcnJheSwgTkFNRSk7XG4gICAgICAgIHZhciBrbGFzcztcbiAgICAgICAgLy8gYHdzYCBtb2R1bGUgYnVnLCB0ZW1wb3JhcmlseSByZW1vdmUgdmFsaWRhdGlvbiBsZW5ndGggZm9yIFVpbnQ4QXJyYXlcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3dlYnNvY2tldHMvd3MvcHVsbC82NDVcbiAgICAgICAgaWYgKCFpc09iamVjdChkYXRhKSkgcmV0dXJuIG5ldyBCYXNlKHRvSW5kZXgoZGF0YSkpO1xuICAgICAgICBpZiAoZGF0YSBpbnN0YW5jZW9mICRBcnJheUJ1ZmZlciB8fCAoa2xhc3MgPSBjbGFzc29mKGRhdGEpKSA9PSBBUlJBWV9CVUZGRVIgfHwga2xhc3MgPT0gU0hBUkVEX0JVRkZFUikge1xuICAgICAgICAgIHJldHVybiAkbGVuZ3RoICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgID8gbmV3IEJhc2UoZGF0YSwgdG9PZmZzZXQoJG9mZnNldCwgQllURVMpLCAkbGVuZ3RoKVxuICAgICAgICAgICAgOiAkb2Zmc2V0ICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgPyBuZXcgQmFzZShkYXRhLCB0b09mZnNldCgkb2Zmc2V0LCBCWVRFUykpXG4gICAgICAgICAgICAgIDogbmV3IEJhc2UoZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFRZUEVEX0FSUkFZIGluIGRhdGEpIHJldHVybiBmcm9tTGlzdChUeXBlZEFycmF5LCBkYXRhKTtcbiAgICAgICAgcmV0dXJuICRmcm9tLmNhbGwoVHlwZWRBcnJheSwgZGF0YSk7XG4gICAgICB9KTtcbiAgICAgIGFycmF5Rm9yRWFjaChUQUMgIT09IEZ1bmN0aW9uLnByb3RvdHlwZSA/IGdPUE4oQmFzZSkuY29uY2F0KGdPUE4oVEFDKSkgOiBnT1BOKEJhc2UpLCBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIGlmICghKGtleSBpbiBUeXBlZEFycmF5KSkgaGlkZShUeXBlZEFycmF5LCBrZXksIEJhc2Vba2V5XSk7XG4gICAgICB9KTtcbiAgICAgIFR5cGVkQXJyYXlbUFJPVE9UWVBFXSA9IFR5cGVkQXJyYXlQcm90b3R5cGU7XG4gICAgICBpZiAoIUxJQlJBUlkpIFR5cGVkQXJyYXlQcm90b3R5cGUuY29uc3RydWN0b3IgPSBUeXBlZEFycmF5O1xuICAgIH1cbiAgICB2YXIgJG5hdGl2ZUl0ZXJhdG9yID0gVHlwZWRBcnJheVByb3RvdHlwZVtJVEVSQVRPUl07XG4gICAgdmFyIENPUlJFQ1RfSVRFUl9OQU1FID0gISEkbmF0aXZlSXRlcmF0b3JcbiAgICAgICYmICgkbmF0aXZlSXRlcmF0b3IubmFtZSA9PSAndmFsdWVzJyB8fCAkbmF0aXZlSXRlcmF0b3IubmFtZSA9PSB1bmRlZmluZWQpO1xuICAgIHZhciAkaXRlcmF0b3IgPSAkaXRlcmF0b3JzLnZhbHVlcztcbiAgICBoaWRlKFR5cGVkQXJyYXksIFRZUEVEX0NPTlNUUlVDVE9SLCB0cnVlKTtcbiAgICBoaWRlKFR5cGVkQXJyYXlQcm90b3R5cGUsIFRZUEVEX0FSUkFZLCBOQU1FKTtcbiAgICBoaWRlKFR5cGVkQXJyYXlQcm90b3R5cGUsIFZJRVcsIHRydWUpO1xuICAgIGhpZGUoVHlwZWRBcnJheVByb3RvdHlwZSwgREVGX0NPTlNUUlVDVE9SLCBUeXBlZEFycmF5KTtcblxuICAgIGlmIChDTEFNUEVEID8gbmV3IFR5cGVkQXJyYXkoMSlbVEFHXSAhPSBOQU1FIDogIShUQUcgaW4gVHlwZWRBcnJheVByb3RvdHlwZSkpIHtcbiAgICAgIGRQKFR5cGVkQXJyYXlQcm90b3R5cGUsIFRBRywge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIE5BTUU7IH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIE9bTkFNRV0gPSBUeXBlZEFycmF5O1xuXG4gICAgJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LlcgKyAkZXhwb3J0LkYgKiAoVHlwZWRBcnJheSAhPSBCYXNlKSwgTyk7XG5cbiAgICAkZXhwb3J0KCRleHBvcnQuUywgTkFNRSwge1xuICAgICAgQllURVNfUEVSX0VMRU1FTlQ6IEJZVEVTXG4gICAgfSk7XG5cbiAgICAkZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIGZhaWxzKGZ1bmN0aW9uICgpIHsgQmFzZS5vZi5jYWxsKFR5cGVkQXJyYXksIDEpOyB9KSwgTkFNRSwge1xuICAgICAgZnJvbTogJGZyb20sXG4gICAgICBvZjogJG9mXG4gICAgfSk7XG5cbiAgICBpZiAoIShCWVRFU19QRVJfRUxFTUVOVCBpbiBUeXBlZEFycmF5UHJvdG90eXBlKSkgaGlkZShUeXBlZEFycmF5UHJvdG90eXBlLCBCWVRFU19QRVJfRUxFTUVOVCwgQllURVMpO1xuXG4gICAgJGV4cG9ydCgkZXhwb3J0LlAsIE5BTUUsIHByb3RvKTtcblxuICAgIHNldFNwZWNpZXMoTkFNRSk7XG5cbiAgICAkZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIEZPUkNFRF9TRVQsIE5BTUUsIHsgc2V0OiAkc2V0IH0pO1xuXG4gICAgJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAhQ09SUkVDVF9JVEVSX05BTUUsIE5BTUUsICRpdGVyYXRvcnMpO1xuXG4gICAgaWYgKCFMSUJSQVJZICYmIFR5cGVkQXJyYXlQcm90b3R5cGUudG9TdHJpbmcgIT0gYXJyYXlUb1N0cmluZykgVHlwZWRBcnJheVByb3RvdHlwZS50b1N0cmluZyA9IGFycmF5VG9TdHJpbmc7XG5cbiAgICAkZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAgIG5ldyBUeXBlZEFycmF5KDEpLnNsaWNlKCk7XG4gICAgfSksIE5BTUUsIHsgc2xpY2U6ICRzbGljZSB9KTtcblxuICAgICRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogKGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBbMSwgMl0udG9Mb2NhbGVTdHJpbmcoKSAhPSBuZXcgVHlwZWRBcnJheShbMSwgMl0pLnRvTG9jYWxlU3RyaW5nKCk7XG4gICAgfSkgfHwgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAgIFR5cGVkQXJyYXlQcm90b3R5cGUudG9Mb2NhbGVTdHJpbmcuY2FsbChbMSwgMl0pO1xuICAgIH0pKSwgTkFNRSwgeyB0b0xvY2FsZVN0cmluZzogJHRvTG9jYWxlU3RyaW5nIH0pO1xuXG4gICAgSXRlcmF0b3JzW05BTUVdID0gQ09SUkVDVF9JVEVSX05BTUUgPyAkbmF0aXZlSXRlcmF0b3IgOiAkaXRlcmF0b3I7XG4gICAgaWYgKCFMSUJSQVJZICYmICFDT1JSRUNUX0lURVJfTkFNRSkgaGlkZShUeXBlZEFycmF5UHJvdG90eXBlLCBJVEVSQVRPUiwgJGl0ZXJhdG9yKTtcbiAgfTtcbn0gZWxzZSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyk7XG52YXIgTElCUkFSWSA9IHJlcXVpcmUoJy4vX2xpYnJhcnknKTtcbnZhciAkdHlwZWQgPSByZXF1aXJlKCcuL190eXBlZCcpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgcmVkZWZpbmVBbGwgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG52YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgdG9JbmRleCA9IHJlcXVpcmUoJy4vX3RvLWluZGV4Jyk7XG52YXIgZ09QTiA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJykuZjtcbnZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG52YXIgYXJyYXlGaWxsID0gcmVxdWlyZSgnLi9fYXJyYXktZmlsbCcpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBBUlJBWV9CVUZGRVIgPSAnQXJyYXlCdWZmZXInO1xudmFyIERBVEFfVklFVyA9ICdEYXRhVmlldyc7XG52YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG52YXIgV1JPTkdfTEVOR1RIID0gJ1dyb25nIGxlbmd0aCEnO1xudmFyIFdST05HX0lOREVYID0gJ1dyb25nIGluZGV4ISc7XG52YXIgJEFycmF5QnVmZmVyID0gZ2xvYmFsW0FSUkFZX0JVRkZFUl07XG52YXIgJERhdGFWaWV3ID0gZ2xvYmFsW0RBVEFfVklFV107XG52YXIgTWF0aCA9IGdsb2JhbC5NYXRoO1xudmFyIFJhbmdlRXJyb3IgPSBnbG9iYWwuUmFuZ2VFcnJvcjtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zaGFkb3ctcmVzdHJpY3RlZC1uYW1lc1xudmFyIEluZmluaXR5ID0gZ2xvYmFsLkluZmluaXR5O1xudmFyIEJhc2VCdWZmZXIgPSAkQXJyYXlCdWZmZXI7XG52YXIgYWJzID0gTWF0aC5hYnM7XG52YXIgcG93ID0gTWF0aC5wb3c7XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xudmFyIGxvZyA9IE1hdGgubG9nO1xudmFyIExOMiA9IE1hdGguTE4yO1xudmFyIEJVRkZFUiA9ICdidWZmZXInO1xudmFyIEJZVEVfTEVOR1RIID0gJ2J5dGVMZW5ndGgnO1xudmFyIEJZVEVfT0ZGU0VUID0gJ2J5dGVPZmZzZXQnO1xudmFyICRCVUZGRVIgPSBERVNDUklQVE9SUyA/ICdfYicgOiBCVUZGRVI7XG52YXIgJExFTkdUSCA9IERFU0NSSVBUT1JTID8gJ19sJyA6IEJZVEVfTEVOR1RIO1xudmFyICRPRkZTRVQgPSBERVNDUklQVE9SUyA/ICdfbycgOiBCWVRFX09GRlNFVDtcblxuLy8gSUVFRTc1NCBjb252ZXJzaW9ucyBiYXNlZCBvbiBodHRwczovL2dpdGh1Yi5jb20vZmVyb3NzL2llZWU3NTRcbmZ1bmN0aW9uIHBhY2tJRUVFNzU0KHZhbHVlLCBtTGVuLCBuQnl0ZXMpIHtcbiAgdmFyIGJ1ZmZlciA9IG5ldyBBcnJheShuQnl0ZXMpO1xuICB2YXIgZUxlbiA9IG5CeXRlcyAqIDggLSBtTGVuIC0gMTtcbiAgdmFyIGVNYXggPSAoMSA8PCBlTGVuKSAtIDE7XG4gIHZhciBlQmlhcyA9IGVNYXggPj4gMTtcbiAgdmFyIHJ0ID0gbUxlbiA9PT0gMjMgPyBwb3coMiwgLTI0KSAtIHBvdygyLCAtNzcpIDogMDtcbiAgdmFyIGkgPSAwO1xuICB2YXIgcyA9IHZhbHVlIDwgMCB8fCB2YWx1ZSA9PT0gMCAmJiAxIC8gdmFsdWUgPCAwID8gMSA6IDA7XG4gIHZhciBlLCBtLCBjO1xuICB2YWx1ZSA9IGFicyh2YWx1ZSk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgaWYgKHZhbHVlICE9IHZhbHVlIHx8IHZhbHVlID09PSBJbmZpbml0eSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICBtID0gdmFsdWUgIT0gdmFsdWUgPyAxIDogMDtcbiAgICBlID0gZU1heDtcbiAgfSBlbHNlIHtcbiAgICBlID0gZmxvb3IobG9nKHZhbHVlKSAvIExOMik7XG4gICAgaWYgKHZhbHVlICogKGMgPSBwb3coMiwgLWUpKSA8IDEpIHtcbiAgICAgIGUtLTtcbiAgICAgIGMgKj0gMjtcbiAgICB9XG4gICAgaWYgKGUgKyBlQmlhcyA+PSAxKSB7XG4gICAgICB2YWx1ZSArPSBydCAvIGM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbHVlICs9IHJ0ICogcG93KDIsIDEgLSBlQmlhcyk7XG4gICAgfVxuICAgIGlmICh2YWx1ZSAqIGMgPj0gMikge1xuICAgICAgZSsrO1xuICAgICAgYyAvPSAyO1xuICAgIH1cbiAgICBpZiAoZSArIGVCaWFzID49IGVNYXgpIHtcbiAgICAgIG0gPSAwO1xuICAgICAgZSA9IGVNYXg7XG4gICAgfSBlbHNlIGlmIChlICsgZUJpYXMgPj0gMSkge1xuICAgICAgbSA9ICh2YWx1ZSAqIGMgLSAxKSAqIHBvdygyLCBtTGVuKTtcbiAgICAgIGUgPSBlICsgZUJpYXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIG0gPSB2YWx1ZSAqIHBvdygyLCBlQmlhcyAtIDEpICogcG93KDIsIG1MZW4pO1xuICAgICAgZSA9IDA7XG4gICAgfVxuICB9XG4gIGZvciAoOyBtTGVuID49IDg7IGJ1ZmZlcltpKytdID0gbSAmIDI1NSwgbSAvPSAyNTYsIG1MZW4gLT0gOCk7XG4gIGUgPSBlIDw8IG1MZW4gfCBtO1xuICBlTGVuICs9IG1MZW47XG4gIGZvciAoOyBlTGVuID4gMDsgYnVmZmVyW2krK10gPSBlICYgMjU1LCBlIC89IDI1NiwgZUxlbiAtPSA4KTtcbiAgYnVmZmVyWy0taV0gfD0gcyAqIDEyODtcbiAgcmV0dXJuIGJ1ZmZlcjtcbn1cbmZ1bmN0aW9uIHVucGFja0lFRUU3NTQoYnVmZmVyLCBtTGVuLCBuQnl0ZXMpIHtcbiAgdmFyIGVMZW4gPSBuQnl0ZXMgKiA4IC0gbUxlbiAtIDE7XG4gIHZhciBlTWF4ID0gKDEgPDwgZUxlbikgLSAxO1xuICB2YXIgZUJpYXMgPSBlTWF4ID4+IDE7XG4gIHZhciBuQml0cyA9IGVMZW4gLSA3O1xuICB2YXIgaSA9IG5CeXRlcyAtIDE7XG4gIHZhciBzID0gYnVmZmVyW2ktLV07XG4gIHZhciBlID0gcyAmIDEyNztcbiAgdmFyIG07XG4gIHMgPj49IDc7XG4gIGZvciAoOyBuQml0cyA+IDA7IGUgPSBlICogMjU2ICsgYnVmZmVyW2ldLCBpLS0sIG5CaXRzIC09IDgpO1xuICBtID0gZSAmICgxIDw8IC1uQml0cykgLSAxO1xuICBlID4+PSAtbkJpdHM7XG4gIG5CaXRzICs9IG1MZW47XG4gIGZvciAoOyBuQml0cyA+IDA7IG0gPSBtICogMjU2ICsgYnVmZmVyW2ldLCBpLS0sIG5CaXRzIC09IDgpO1xuICBpZiAoZSA9PT0gMCkge1xuICAgIGUgPSAxIC0gZUJpYXM7XG4gIH0gZWxzZSBpZiAoZSA9PT0gZU1heCkge1xuICAgIHJldHVybiBtID8gTmFOIDogcyA/IC1JbmZpbml0eSA6IEluZmluaXR5O1xuICB9IGVsc2Uge1xuICAgIG0gPSBtICsgcG93KDIsIG1MZW4pO1xuICAgIGUgPSBlIC0gZUJpYXM7XG4gIH0gcmV0dXJuIChzID8gLTEgOiAxKSAqIG0gKiBwb3coMiwgZSAtIG1MZW4pO1xufVxuXG5mdW5jdGlvbiB1bnBhY2tJMzIoYnl0ZXMpIHtcbiAgcmV0dXJuIGJ5dGVzWzNdIDw8IDI0IHwgYnl0ZXNbMl0gPDwgMTYgfCBieXRlc1sxXSA8PCA4IHwgYnl0ZXNbMF07XG59XG5mdW5jdGlvbiBwYWNrSTgoaXQpIHtcbiAgcmV0dXJuIFtpdCAmIDB4ZmZdO1xufVxuZnVuY3Rpb24gcGFja0kxNihpdCkge1xuICByZXR1cm4gW2l0ICYgMHhmZiwgaXQgPj4gOCAmIDB4ZmZdO1xufVxuZnVuY3Rpb24gcGFja0kzMihpdCkge1xuICByZXR1cm4gW2l0ICYgMHhmZiwgaXQgPj4gOCAmIDB4ZmYsIGl0ID4+IDE2ICYgMHhmZiwgaXQgPj4gMjQgJiAweGZmXTtcbn1cbmZ1bmN0aW9uIHBhY2tGNjQoaXQpIHtcbiAgcmV0dXJuIHBhY2tJRUVFNzU0KGl0LCA1MiwgOCk7XG59XG5mdW5jdGlvbiBwYWNrRjMyKGl0KSB7XG4gIHJldHVybiBwYWNrSUVFRTc1NChpdCwgMjMsIDQpO1xufVxuXG5mdW5jdGlvbiBhZGRHZXR0ZXIoQywga2V5LCBpbnRlcm5hbCkge1xuICBkUChDW1BST1RPVFlQRV0sIGtleSwgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXNbaW50ZXJuYWxdOyB9IH0pO1xufVxuXG5mdW5jdGlvbiBnZXQodmlldywgYnl0ZXMsIGluZGV4LCBpc0xpdHRsZUVuZGlhbikge1xuICB2YXIgbnVtSW5kZXggPSAraW5kZXg7XG4gIHZhciBpbnRJbmRleCA9IHRvSW5kZXgobnVtSW5kZXgpO1xuICBpZiAoaW50SW5kZXggKyBieXRlcyA+IHZpZXdbJExFTkdUSF0pIHRocm93IFJhbmdlRXJyb3IoV1JPTkdfSU5ERVgpO1xuICB2YXIgc3RvcmUgPSB2aWV3WyRCVUZGRVJdLl9iO1xuICB2YXIgc3RhcnQgPSBpbnRJbmRleCArIHZpZXdbJE9GRlNFVF07XG4gIHZhciBwYWNrID0gc3RvcmUuc2xpY2Uoc3RhcnQsIHN0YXJ0ICsgYnl0ZXMpO1xuICByZXR1cm4gaXNMaXR0bGVFbmRpYW4gPyBwYWNrIDogcGFjay5yZXZlcnNlKCk7XG59XG5mdW5jdGlvbiBzZXQodmlldywgYnl0ZXMsIGluZGV4LCBjb252ZXJzaW9uLCB2YWx1ZSwgaXNMaXR0bGVFbmRpYW4pIHtcbiAgdmFyIG51bUluZGV4ID0gK2luZGV4O1xuICB2YXIgaW50SW5kZXggPSB0b0luZGV4KG51bUluZGV4KTtcbiAgaWYgKGludEluZGV4ICsgYnl0ZXMgPiB2aWV3WyRMRU5HVEhdKSB0aHJvdyBSYW5nZUVycm9yKFdST05HX0lOREVYKTtcbiAgdmFyIHN0b3JlID0gdmlld1skQlVGRkVSXS5fYjtcbiAgdmFyIHN0YXJ0ID0gaW50SW5kZXggKyB2aWV3WyRPRkZTRVRdO1xuICB2YXIgcGFjayA9IGNvbnZlcnNpb24oK3ZhbHVlKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBieXRlczsgaSsrKSBzdG9yZVtzdGFydCArIGldID0gcGFja1tpc0xpdHRsZUVuZGlhbiA/IGkgOiBieXRlcyAtIGkgLSAxXTtcbn1cblxuaWYgKCEkdHlwZWQuQUJWKSB7XG4gICRBcnJheUJ1ZmZlciA9IGZ1bmN0aW9uIEFycmF5QnVmZmVyKGxlbmd0aCkge1xuICAgIGFuSW5zdGFuY2UodGhpcywgJEFycmF5QnVmZmVyLCBBUlJBWV9CVUZGRVIpO1xuICAgIHZhciBieXRlTGVuZ3RoID0gdG9JbmRleChsZW5ndGgpO1xuICAgIHRoaXMuX2IgPSBhcnJheUZpbGwuY2FsbChuZXcgQXJyYXkoYnl0ZUxlbmd0aCksIDApO1xuICAgIHRoaXNbJExFTkdUSF0gPSBieXRlTGVuZ3RoO1xuICB9O1xuXG4gICREYXRhVmlldyA9IGZ1bmN0aW9uIERhdGFWaWV3KGJ1ZmZlciwgYnl0ZU9mZnNldCwgYnl0ZUxlbmd0aCkge1xuICAgIGFuSW5zdGFuY2UodGhpcywgJERhdGFWaWV3LCBEQVRBX1ZJRVcpO1xuICAgIGFuSW5zdGFuY2UoYnVmZmVyLCAkQXJyYXlCdWZmZXIsIERBVEFfVklFVyk7XG4gICAgdmFyIGJ1ZmZlckxlbmd0aCA9IGJ1ZmZlclskTEVOR1RIXTtcbiAgICB2YXIgb2Zmc2V0ID0gdG9JbnRlZ2VyKGJ5dGVPZmZzZXQpO1xuICAgIGlmIChvZmZzZXQgPCAwIHx8IG9mZnNldCA+IGJ1ZmZlckxlbmd0aCkgdGhyb3cgUmFuZ2VFcnJvcignV3Jvbmcgb2Zmc2V0IScpO1xuICAgIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoID09PSB1bmRlZmluZWQgPyBidWZmZXJMZW5ndGggLSBvZmZzZXQgOiB0b0xlbmd0aChieXRlTGVuZ3RoKTtcbiAgICBpZiAob2Zmc2V0ICsgYnl0ZUxlbmd0aCA+IGJ1ZmZlckxlbmd0aCkgdGhyb3cgUmFuZ2VFcnJvcihXUk9OR19MRU5HVEgpO1xuICAgIHRoaXNbJEJVRkZFUl0gPSBidWZmZXI7XG4gICAgdGhpc1skT0ZGU0VUXSA9IG9mZnNldDtcbiAgICB0aGlzWyRMRU5HVEhdID0gYnl0ZUxlbmd0aDtcbiAgfTtcblxuICBpZiAoREVTQ1JJUFRPUlMpIHtcbiAgICBhZGRHZXR0ZXIoJEFycmF5QnVmZmVyLCBCWVRFX0xFTkdUSCwgJ19sJyk7XG4gICAgYWRkR2V0dGVyKCREYXRhVmlldywgQlVGRkVSLCAnX2InKTtcbiAgICBhZGRHZXR0ZXIoJERhdGFWaWV3LCBCWVRFX0xFTkdUSCwgJ19sJyk7XG4gICAgYWRkR2V0dGVyKCREYXRhVmlldywgQllURV9PRkZTRVQsICdfbycpO1xuICB9XG5cbiAgcmVkZWZpbmVBbGwoJERhdGFWaWV3W1BST1RPVFlQRV0sIHtcbiAgICBnZXRJbnQ4OiBmdW5jdGlvbiBnZXRJbnQ4KGJ5dGVPZmZzZXQpIHtcbiAgICAgIHJldHVybiBnZXQodGhpcywgMSwgYnl0ZU9mZnNldClbMF0gPDwgMjQgPj4gMjQ7XG4gICAgfSxcbiAgICBnZXRVaW50ODogZnVuY3Rpb24gZ2V0VWludDgoYnl0ZU9mZnNldCkge1xuICAgICAgcmV0dXJuIGdldCh0aGlzLCAxLCBieXRlT2Zmc2V0KVswXTtcbiAgICB9LFxuICAgIGdldEludDE2OiBmdW5jdGlvbiBnZXRJbnQxNihieXRlT2Zmc2V0IC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICB2YXIgYnl0ZXMgPSBnZXQodGhpcywgMiwgYnl0ZU9mZnNldCwgYXJndW1lbnRzWzFdKTtcbiAgICAgIHJldHVybiAoYnl0ZXNbMV0gPDwgOCB8IGJ5dGVzWzBdKSA8PCAxNiA+PiAxNjtcbiAgICB9LFxuICAgIGdldFVpbnQxNjogZnVuY3Rpb24gZ2V0VWludDE2KGJ5dGVPZmZzZXQgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHZhciBieXRlcyA9IGdldCh0aGlzLCAyLCBieXRlT2Zmc2V0LCBhcmd1bWVudHNbMV0pO1xuICAgICAgcmV0dXJuIGJ5dGVzWzFdIDw8IDggfCBieXRlc1swXTtcbiAgICB9LFxuICAgIGdldEludDMyOiBmdW5jdGlvbiBnZXRJbnQzMihieXRlT2Zmc2V0IC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICByZXR1cm4gdW5wYWNrSTMyKGdldCh0aGlzLCA0LCBieXRlT2Zmc2V0LCBhcmd1bWVudHNbMV0pKTtcbiAgICB9LFxuICAgIGdldFVpbnQzMjogZnVuY3Rpb24gZ2V0VWludDMyKGJ5dGVPZmZzZXQgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHJldHVybiB1bnBhY2tJMzIoZ2V0KHRoaXMsIDQsIGJ5dGVPZmZzZXQsIGFyZ3VtZW50c1sxXSkpID4+PiAwO1xuICAgIH0sXG4gICAgZ2V0RmxvYXQzMjogZnVuY3Rpb24gZ2V0RmxvYXQzMihieXRlT2Zmc2V0IC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICByZXR1cm4gdW5wYWNrSUVFRTc1NChnZXQodGhpcywgNCwgYnl0ZU9mZnNldCwgYXJndW1lbnRzWzFdKSwgMjMsIDQpO1xuICAgIH0sXG4gICAgZ2V0RmxvYXQ2NDogZnVuY3Rpb24gZ2V0RmxvYXQ2NChieXRlT2Zmc2V0IC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICByZXR1cm4gdW5wYWNrSUVFRTc1NChnZXQodGhpcywgOCwgYnl0ZU9mZnNldCwgYXJndW1lbnRzWzFdKSwgNTIsIDgpO1xuICAgIH0sXG4gICAgc2V0SW50ODogZnVuY3Rpb24gc2V0SW50OChieXRlT2Zmc2V0LCB2YWx1ZSkge1xuICAgICAgc2V0KHRoaXMsIDEsIGJ5dGVPZmZzZXQsIHBhY2tJOCwgdmFsdWUpO1xuICAgIH0sXG4gICAgc2V0VWludDg6IGZ1bmN0aW9uIHNldFVpbnQ4KGJ5dGVPZmZzZXQsIHZhbHVlKSB7XG4gICAgICBzZXQodGhpcywgMSwgYnl0ZU9mZnNldCwgcGFja0k4LCB2YWx1ZSk7XG4gICAgfSxcbiAgICBzZXRJbnQxNjogZnVuY3Rpb24gc2V0SW50MTYoYnl0ZU9mZnNldCwgdmFsdWUgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHNldCh0aGlzLCAyLCBieXRlT2Zmc2V0LCBwYWNrSTE2LCB2YWx1ZSwgYXJndW1lbnRzWzJdKTtcbiAgICB9LFxuICAgIHNldFVpbnQxNjogZnVuY3Rpb24gc2V0VWludDE2KGJ5dGVPZmZzZXQsIHZhbHVlIC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICBzZXQodGhpcywgMiwgYnl0ZU9mZnNldCwgcGFja0kxNiwgdmFsdWUsIGFyZ3VtZW50c1syXSk7XG4gICAgfSxcbiAgICBzZXRJbnQzMjogZnVuY3Rpb24gc2V0SW50MzIoYnl0ZU9mZnNldCwgdmFsdWUgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHNldCh0aGlzLCA0LCBieXRlT2Zmc2V0LCBwYWNrSTMyLCB2YWx1ZSwgYXJndW1lbnRzWzJdKTtcbiAgICB9LFxuICAgIHNldFVpbnQzMjogZnVuY3Rpb24gc2V0VWludDMyKGJ5dGVPZmZzZXQsIHZhbHVlIC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICBzZXQodGhpcywgNCwgYnl0ZU9mZnNldCwgcGFja0kzMiwgdmFsdWUsIGFyZ3VtZW50c1syXSk7XG4gICAgfSxcbiAgICBzZXRGbG9hdDMyOiBmdW5jdGlvbiBzZXRGbG9hdDMyKGJ5dGVPZmZzZXQsIHZhbHVlIC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICBzZXQodGhpcywgNCwgYnl0ZU9mZnNldCwgcGFja0YzMiwgdmFsdWUsIGFyZ3VtZW50c1syXSk7XG4gICAgfSxcbiAgICBzZXRGbG9hdDY0OiBmdW5jdGlvbiBzZXRGbG9hdDY0KGJ5dGVPZmZzZXQsIHZhbHVlIC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICBzZXQodGhpcywgOCwgYnl0ZU9mZnNldCwgcGFja0Y2NCwgdmFsdWUsIGFyZ3VtZW50c1syXSk7XG4gICAgfVxuICB9KTtcbn0gZWxzZSB7XG4gIGlmICghZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgICRBcnJheUJ1ZmZlcigxKTtcbiAgfSkgfHwgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICBuZXcgJEFycmF5QnVmZmVyKC0xKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgfSkgfHwgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIG5ldyAkQXJyYXlCdWZmZXIoKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICBuZXcgJEFycmF5QnVmZmVyKDEuNSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgbmV3ICRBcnJheUJ1ZmZlcihOYU4pOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgIHJldHVybiAkQXJyYXlCdWZmZXIubmFtZSAhPSBBUlJBWV9CVUZGRVI7XG4gIH0pKSB7XG4gICAgJEFycmF5QnVmZmVyID0gZnVuY3Rpb24gQXJyYXlCdWZmZXIobGVuZ3RoKSB7XG4gICAgICBhbkluc3RhbmNlKHRoaXMsICRBcnJheUJ1ZmZlcik7XG4gICAgICByZXR1cm4gbmV3IEJhc2VCdWZmZXIodG9JbmRleChsZW5ndGgpKTtcbiAgICB9O1xuICAgIHZhciBBcnJheUJ1ZmZlclByb3RvID0gJEFycmF5QnVmZmVyW1BST1RPVFlQRV0gPSBCYXNlQnVmZmVyW1BST1RPVFlQRV07XG4gICAgZm9yICh2YXIga2V5cyA9IGdPUE4oQmFzZUJ1ZmZlciksIGogPSAwLCBrZXk7IGtleXMubGVuZ3RoID4gajspIHtcbiAgICAgIGlmICghKChrZXkgPSBrZXlzW2orK10pIGluICRBcnJheUJ1ZmZlcikpIGhpZGUoJEFycmF5QnVmZmVyLCBrZXksIEJhc2VCdWZmZXJba2V5XSk7XG4gICAgfVxuICAgIGlmICghTElCUkFSWSkgQXJyYXlCdWZmZXJQcm90by5jb25zdHJ1Y3RvciA9ICRBcnJheUJ1ZmZlcjtcbiAgfVxuICAvLyBpT1MgU2FmYXJpIDcueCBidWdcbiAgdmFyIHZpZXcgPSBuZXcgJERhdGFWaWV3KG5ldyAkQXJyYXlCdWZmZXIoMikpO1xuICB2YXIgJHNldEludDggPSAkRGF0YVZpZXdbUFJPVE9UWVBFXS5zZXRJbnQ4O1xuICB2aWV3LnNldEludDgoMCwgMjE0NzQ4MzY0OCk7XG4gIHZpZXcuc2V0SW50OCgxLCAyMTQ3NDgzNjQ5KTtcbiAgaWYgKHZpZXcuZ2V0SW50OCgwKSB8fCAhdmlldy5nZXRJbnQ4KDEpKSByZWRlZmluZUFsbCgkRGF0YVZpZXdbUFJPVE9UWVBFXSwge1xuICAgIHNldEludDg6IGZ1bmN0aW9uIHNldEludDgoYnl0ZU9mZnNldCwgdmFsdWUpIHtcbiAgICAgICRzZXRJbnQ4LmNhbGwodGhpcywgYnl0ZU9mZnNldCwgdmFsdWUgPDwgMjQgPj4gMjQpO1xuICAgIH0sXG4gICAgc2V0VWludDg6IGZ1bmN0aW9uIHNldFVpbnQ4KGJ5dGVPZmZzZXQsIHZhbHVlKSB7XG4gICAgICAkc2V0SW50OC5jYWxsKHRoaXMsIGJ5dGVPZmZzZXQsIHZhbHVlIDw8IDI0ID4+IDI0KTtcbiAgICB9XG4gIH0sIHRydWUpO1xufVxuc2V0VG9TdHJpbmdUYWcoJEFycmF5QnVmZmVyLCBBUlJBWV9CVUZGRVIpO1xuc2V0VG9TdHJpbmdUYWcoJERhdGFWaWV3LCBEQVRBX1ZJRVcpO1xuaGlkZSgkRGF0YVZpZXdbUFJPVE9UWVBFXSwgJHR5cGVkLlZJRVcsIHRydWUpO1xuZXhwb3J0c1tBUlJBWV9CVUZGRVJdID0gJEFycmF5QnVmZmVyO1xuZXhwb3J0c1tEQVRBX1ZJRVddID0gJERhdGFWaWV3O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi9fdWlkJyk7XG52YXIgVFlQRUQgPSB1aWQoJ3R5cGVkX2FycmF5Jyk7XG52YXIgVklFVyA9IHVpZCgndmlldycpO1xudmFyIEFCViA9ICEhKGdsb2JhbC5BcnJheUJ1ZmZlciAmJiBnbG9iYWwuRGF0YVZpZXcpO1xudmFyIENPTlNUUiA9IEFCVjtcbnZhciBpID0gMDtcbnZhciBsID0gOTtcbnZhciBUeXBlZDtcblxudmFyIFR5cGVkQXJyYXlDb25zdHJ1Y3RvcnMgPSAoXG4gICdJbnQ4QXJyYXksVWludDhBcnJheSxVaW50OENsYW1wZWRBcnJheSxJbnQxNkFycmF5LFVpbnQxNkFycmF5LEludDMyQXJyYXksVWludDMyQXJyYXksRmxvYXQzMkFycmF5LEZsb2F0NjRBcnJheSdcbikuc3BsaXQoJywnKTtcblxud2hpbGUgKGkgPCBsKSB7XG4gIGlmIChUeXBlZCA9IGdsb2JhbFtUeXBlZEFycmF5Q29uc3RydWN0b3JzW2krK11dKSB7XG4gICAgaGlkZShUeXBlZC5wcm90b3R5cGUsIFRZUEVELCB0cnVlKTtcbiAgICBoaWRlKFR5cGVkLnByb3RvdHlwZSwgVklFVywgdHJ1ZSk7XG4gIH0gZWxzZSBDT05TVFIgPSBmYWxzZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEFCVjogQUJWLFxuICBDT05TVFI6IENPTlNUUixcbiAgVFlQRUQ6IFRZUEVELFxuICBWSUVXOiBWSUVXXG59O1xuIiwidmFyIGlkID0gMDtcbnZhciBweCA9IE1hdGgucmFuZG9tKCk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgcmV0dXJuICdTeW1ib2woJy5jb25jYXQoa2V5ID09PSB1bmRlZmluZWQgPyAnJyA6IGtleSwgJylfJywgKCsraWQgKyBweCkudG9TdHJpbmcoMzYpKTtcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgbmF2aWdhdG9yID0gZ2xvYmFsLm5hdmlnYXRvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBuYXZpZ2F0b3IgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudCB8fCAnJztcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIFRZUEUpIHtcbiAgaWYgKCFpc09iamVjdChpdCkgfHwgaXQuX3QgIT09IFRZUEUpIHRocm93IFR5cGVFcnJvcignSW5jb21wYXRpYmxlIHJlY2VpdmVyLCAnICsgVFlQRSArICcgcmVxdWlyZWQhJyk7XG4gIHJldHVybiBpdDtcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgY29yZSA9IHJlcXVpcmUoJy4vX2NvcmUnKTtcbnZhciBMSUJSQVJZID0gcmVxdWlyZSgnLi9fbGlicmFyeScpO1xudmFyIHdrc0V4dCA9IHJlcXVpcmUoJy4vX3drcy1leHQnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIHZhciAkU3ltYm9sID0gY29yZS5TeW1ib2wgfHwgKGNvcmUuU3ltYm9sID0gTElCUkFSWSA/IHt9IDogZ2xvYmFsLlN5bWJvbCB8fCB7fSk7XG4gIGlmIChuYW1lLmNoYXJBdCgwKSAhPSAnXycgJiYgIShuYW1lIGluICRTeW1ib2wpKSBkZWZpbmVQcm9wZXJ0eSgkU3ltYm9sLCBuYW1lLCB7IHZhbHVlOiB3a3NFeHQuZihuYW1lKSB9KTtcbn07XG4iLCJleHBvcnRzLmYgPSByZXF1aXJlKCcuL193a3MnKTtcbiIsInZhciBzdG9yZSA9IHJlcXVpcmUoJy4vX3NoYXJlZCcpKCd3a3MnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuL191aWQnKTtcbnZhciBTeW1ib2wgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5TeW1ib2w7XG52YXIgVVNFX1NZTUJPTCA9IHR5cGVvZiBTeW1ib2wgPT0gJ2Z1bmN0aW9uJztcblxudmFyICRleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZSkge1xuICByZXR1cm4gc3RvcmVbbmFtZV0gfHwgKHN0b3JlW25hbWVdID1cbiAgICBVU0VfU1lNQk9MICYmIFN5bWJvbFtuYW1lXSB8fCAoVVNFX1NZTUJPTCA/IFN5bWJvbCA6IHVpZCkoJ1N5bWJvbC4nICsgbmFtZSkpO1xufTtcblxuJGV4cG9ydHMuc3RvcmUgPSBzdG9yZTtcbiIsInZhciBjbGFzc29mID0gcmVxdWlyZSgnLi9fY2xhc3NvZicpO1xudmFyIElURVJBVE9SID0gcmVxdWlyZSgnLi9fd2tzJykoJ2l0ZXJhdG9yJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2NvcmUnKS5nZXRJdGVyYXRvck1ldGhvZCA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoaXQgIT0gdW5kZWZpbmVkKSByZXR1cm4gaXRbSVRFUkFUT1JdXG4gICAgfHwgaXRbJ0BAaXRlcmF0b3InXVxuICAgIHx8IEl0ZXJhdG9yc1tjbGFzc29mKGl0KV07XG59O1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL2JlbmphbWluZ3IvUmV4RXhwLmVzY2FwZVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkcmUgPSByZXF1aXJlKCcuL19yZXBsYWNlcicpKC9bXFxcXF4kKis/LigpfFtcXF17fV0vZywgJ1xcXFwkJicpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZ0V4cCcsIHsgZXNjYXBlOiBmdW5jdGlvbiBlc2NhcGUoaXQpIHsgcmV0dXJuICRyZShpdCk7IH0gfSk7XG4iLCIvLyAyMi4xLjMuMyBBcnJheS5wcm90b3R5cGUuY29weVdpdGhpbih0YXJnZXQsIHN0YXJ0LCBlbmQgPSB0aGlzLmxlbmd0aClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QLCAnQXJyYXknLCB7IGNvcHlXaXRoaW46IHJlcXVpcmUoJy4vX2FycmF5LWNvcHktd2l0aGluJykgfSk7XG5cbnJlcXVpcmUoJy4vX2FkZC10by11bnNjb3BhYmxlcycpKCdjb3B5V2l0aGluJyk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRldmVyeSA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKSg0KTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKFtdLmV2ZXJ5LCB0cnVlKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuNSAvIDE1LjQuNC4xNiBBcnJheS5wcm90b3R5cGUuZXZlcnkoY2FsbGJhY2tmbiBbLCB0aGlzQXJnXSlcbiAgZXZlcnk6IGZ1bmN0aW9uIGV2ZXJ5KGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgcmV0dXJuICRldmVyeSh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHNbMV0pO1xuICB9XG59KTtcbiIsIi8vIDIyLjEuMy42IEFycmF5LnByb3RvdHlwZS5maWxsKHZhbHVlLCBzdGFydCA9IDAsIGVuZCA9IHRoaXMubGVuZ3RoKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdBcnJheScsIHsgZmlsbDogcmVxdWlyZSgnLi9fYXJyYXktZmlsbCcpIH0pO1xuXG5yZXF1aXJlKCcuL19hZGQtdG8tdW5zY29wYWJsZXMnKSgnZmlsbCcpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkZmlsdGVyID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpKDIpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoW10uZmlsdGVyLCB0cnVlKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuNyAvIDE1LjQuNC4yMCBBcnJheS5wcm90b3R5cGUuZmlsdGVyKGNhbGxiYWNrZm4gWywgdGhpc0FyZ10pXG4gIGZpbHRlcjogZnVuY3Rpb24gZmlsdGVyKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgcmV0dXJuICRmaWx0ZXIodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzWzFdKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyAyMi4xLjMuOSBBcnJheS5wcm90b3R5cGUuZmluZEluZGV4KHByZWRpY2F0ZSwgdGhpc0FyZyA9IHVuZGVmaW5lZClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGZpbmQgPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJykoNik7XG52YXIgS0VZID0gJ2ZpbmRJbmRleCc7XG52YXIgZm9yY2VkID0gdHJ1ZTtcbi8vIFNob3VsZG4ndCBza2lwIGhvbGVzXG5pZiAoS0VZIGluIFtdKSBBcnJheSgxKVtLRVldKGZ1bmN0aW9uICgpIHsgZm9yY2VkID0gZmFsc2U7IH0pO1xuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiBmb3JjZWQsICdBcnJheScsIHtcbiAgZmluZEluZGV4OiBmdW5jdGlvbiBmaW5kSW5kZXgoY2FsbGJhY2tmbiAvKiAsIHRoYXQgPSB1bmRlZmluZWQgKi8pIHtcbiAgICByZXR1cm4gJGZpbmQodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcbnJlcXVpcmUoJy4vX2FkZC10by11bnNjb3BhYmxlcycpKEtFWSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyAyMi4xLjMuOCBBcnJheS5wcm90b3R5cGUuZmluZChwcmVkaWNhdGUsIHRoaXNBcmcgPSB1bmRlZmluZWQpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRmaW5kID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpKDUpO1xudmFyIEtFWSA9ICdmaW5kJztcbnZhciBmb3JjZWQgPSB0cnVlO1xuLy8gU2hvdWxkbid0IHNraXAgaG9sZXNcbmlmIChLRVkgaW4gW10pIEFycmF5KDEpW0tFWV0oZnVuY3Rpb24gKCkgeyBmb3JjZWQgPSBmYWxzZTsgfSk7XG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIGZvcmNlZCwgJ0FycmF5Jywge1xuICBmaW5kOiBmdW5jdGlvbiBmaW5kKGNhbGxiYWNrZm4gLyogLCB0aGF0ID0gdW5kZWZpbmVkICovKSB7XG4gICAgcmV0dXJuICRmaW5kKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG5yZXF1aXJlKCcuL19hZGQtdG8tdW5zY29wYWJsZXMnKShLRVkpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkZm9yRWFjaCA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKSgwKTtcbnZhciBTVFJJQ1QgPSByZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoW10uZm9yRWFjaCwgdHJ1ZSk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogIVNUUklDVCwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuMTAgLyAxNS40LjQuMTggQXJyYXkucHJvdG90eXBlLmZvckVhY2goY2FsbGJhY2tmbiBbLCB0aGlzQXJnXSlcbiAgZm9yRWFjaDogZnVuY3Rpb24gZm9yRWFjaChjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgIHJldHVybiAkZm9yRWFjaCh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHNbMV0pO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi9faXRlci1jYWxsJyk7XG52YXIgaXNBcnJheUl0ZXIgPSByZXF1aXJlKCcuL19pcy1hcnJheS1pdGVyJyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX2NyZWF0ZS1wcm9wZXJ0eScpO1xudmFyIGdldEl0ZXJGbiA9IHJlcXVpcmUoJy4vY29yZS5nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIXJlcXVpcmUoJy4vX2l0ZXItZGV0ZWN0JykoZnVuY3Rpb24gKGl0ZXIpIHsgQXJyYXkuZnJvbShpdGVyKTsgfSksICdBcnJheScsIHtcbiAgLy8gMjIuMS4yLjEgQXJyYXkuZnJvbShhcnJheUxpa2UsIG1hcGZuID0gdW5kZWZpbmVkLCB0aGlzQXJnID0gdW5kZWZpbmVkKVxuICBmcm9tOiBmdW5jdGlvbiBmcm9tKGFycmF5TGlrZSAvKiAsIG1hcGZuID0gdW5kZWZpbmVkLCB0aGlzQXJnID0gdW5kZWZpbmVkICovKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdChhcnJheUxpa2UpO1xuICAgIHZhciBDID0gdHlwZW9mIHRoaXMgPT0gJ2Z1bmN0aW9uJyA/IHRoaXMgOiBBcnJheTtcbiAgICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIG1hcGZuID0gYUxlbiA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQ7XG4gICAgdmFyIG1hcHBpbmcgPSBtYXBmbiAhPT0gdW5kZWZpbmVkO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGl0ZXJGbiA9IGdldEl0ZXJGbihPKTtcbiAgICB2YXIgbGVuZ3RoLCByZXN1bHQsIHN0ZXAsIGl0ZXJhdG9yO1xuICAgIGlmIChtYXBwaW5nKSBtYXBmbiA9IGN0eChtYXBmbiwgYUxlbiA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQsIDIpO1xuICAgIC8vIGlmIG9iamVjdCBpc24ndCBpdGVyYWJsZSBvciBpdCdzIGFycmF5IHdpdGggZGVmYXVsdCBpdGVyYXRvciAtIHVzZSBzaW1wbGUgY2FzZVxuICAgIGlmIChpdGVyRm4gIT0gdW5kZWZpbmVkICYmICEoQyA9PSBBcnJheSAmJiBpc0FycmF5SXRlcihpdGVyRm4pKSkge1xuICAgICAgZm9yIChpdGVyYXRvciA9IGl0ZXJGbi5jYWxsKE8pLCByZXN1bHQgPSBuZXcgQygpOyAhKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmU7IGluZGV4KyspIHtcbiAgICAgICAgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBpbmRleCwgbWFwcGluZyA/IGNhbGwoaXRlcmF0b3IsIG1hcGZuLCBbc3RlcC52YWx1ZSwgaW5kZXhdLCB0cnVlKSA6IHN0ZXAudmFsdWUpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBsZW5ndGggPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gICAgICBmb3IgKHJlc3VsdCA9IG5ldyBDKGxlbmd0aCk7IGxlbmd0aCA+IGluZGV4OyBpbmRleCsrKSB7XG4gICAgICAgIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwgaW5kZXgsIG1hcHBpbmcgPyBtYXBmbihPW2luZGV4XSwgaW5kZXgpIDogT1tpbmRleF0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXN1bHQubGVuZ3RoID0gaW5kZXg7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRpbmRleE9mID0gcmVxdWlyZSgnLi9fYXJyYXktaW5jbHVkZXMnKShmYWxzZSk7XG52YXIgJG5hdGl2ZSA9IFtdLmluZGV4T2Y7XG52YXIgTkVHQVRJVkVfWkVSTyA9ICEhJG5hdGl2ZSAmJiAxIC8gWzFdLmluZGV4T2YoMSwgLTApIDwgMDtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoTkVHQVRJVkVfWkVSTyB8fCAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKCRuYXRpdmUpKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuMTEgLyAxNS40LjQuMTQgQXJyYXkucHJvdG90eXBlLmluZGV4T2Yoc2VhcmNoRWxlbWVudCBbLCBmcm9tSW5kZXhdKVxuICBpbmRleE9mOiBmdW5jdGlvbiBpbmRleE9mKHNlYXJjaEVsZW1lbnQgLyogLCBmcm9tSW5kZXggPSAwICovKSB7XG4gICAgcmV0dXJuIE5FR0FUSVZFX1pFUk9cbiAgICAgIC8vIGNvbnZlcnQgLTAgdG8gKzBcbiAgICAgID8gJG5hdGl2ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IDBcbiAgICAgIDogJGluZGV4T2YodGhpcywgc2VhcmNoRWxlbWVudCwgYXJndW1lbnRzWzFdKTtcbiAgfVxufSk7XG4iLCIvLyAyMi4xLjIuMiAvIDE1LjQuMy4yIEFycmF5LmlzQXJyYXkoYXJnKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdBcnJheScsIHsgaXNBcnJheTogcmVxdWlyZSgnLi9faXMtYXJyYXknKSB9KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBhZGRUb1Vuc2NvcGFibGVzID0gcmVxdWlyZSgnLi9fYWRkLXRvLXVuc2NvcGFibGVzJyk7XG52YXIgc3RlcCA9IHJlcXVpcmUoJy4vX2l0ZXItc3RlcCcpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcblxuLy8gMjIuMS4zLjQgQXJyYXkucHJvdG90eXBlLmVudHJpZXMoKVxuLy8gMjIuMS4zLjEzIEFycmF5LnByb3RvdHlwZS5rZXlzKClcbi8vIDIyLjEuMy4yOSBBcnJheS5wcm90b3R5cGUudmFsdWVzKClcbi8vIDIyLjEuMy4zMCBBcnJheS5wcm90b3R5cGVbQEBpdGVyYXRvcl0oKVxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19pdGVyLWRlZmluZScpKEFycmF5LCAnQXJyYXknLCBmdW5jdGlvbiAoaXRlcmF0ZWQsIGtpbmQpIHtcbiAgdGhpcy5fdCA9IHRvSU9iamVjdChpdGVyYXRlZCk7IC8vIHRhcmdldFxuICB0aGlzLl9pID0gMDsgICAgICAgICAgICAgICAgICAgLy8gbmV4dCBpbmRleFxuICB0aGlzLl9rID0ga2luZDsgICAgICAgICAgICAgICAgLy8ga2luZFxuLy8gMjIuMS41LjIuMSAlQXJyYXlJdGVyYXRvclByb3RvdHlwZSUubmV4dCgpXG59LCBmdW5jdGlvbiAoKSB7XG4gIHZhciBPID0gdGhpcy5fdDtcbiAgdmFyIGtpbmQgPSB0aGlzLl9rO1xuICB2YXIgaW5kZXggPSB0aGlzLl9pKys7XG4gIGlmICghTyB8fCBpbmRleCA+PSBPLmxlbmd0aCkge1xuICAgIHRoaXMuX3QgPSB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHN0ZXAoMSk7XG4gIH1cbiAgaWYgKGtpbmQgPT0gJ2tleXMnKSByZXR1cm4gc3RlcCgwLCBpbmRleCk7XG4gIGlmIChraW5kID09ICd2YWx1ZXMnKSByZXR1cm4gc3RlcCgwLCBPW2luZGV4XSk7XG4gIHJldHVybiBzdGVwKDAsIFtpbmRleCwgT1tpbmRleF1dKTtcbn0sICd2YWx1ZXMnKTtcblxuLy8gYXJndW1lbnRzTGlzdFtAQGl0ZXJhdG9yXSBpcyAlQXJyYXlQcm90b192YWx1ZXMlICg5LjQuNC42LCA5LjQuNC43KVxuSXRlcmF0b3JzLkFyZ3VtZW50cyA9IEl0ZXJhdG9ycy5BcnJheTtcblxuYWRkVG9VbnNjb3BhYmxlcygna2V5cycpO1xuYWRkVG9VbnNjb3BhYmxlcygndmFsdWVzJyk7XG5hZGRUb1Vuc2NvcGFibGVzKCdlbnRyaWVzJyk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyAyMi4xLjMuMTMgQXJyYXkucHJvdG90eXBlLmpvaW4oc2VwYXJhdG9yKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgYXJyYXlKb2luID0gW10uam9pbjtcblxuLy8gZmFsbGJhY2sgZm9yIG5vdCBhcnJheS1saWtlIHN0cmluZ3NcbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogKHJlcXVpcmUoJy4vX2lvYmplY3QnKSAhPSBPYmplY3QgfHwgIXJlcXVpcmUoJy4vX3N0cmljdC1tZXRob2QnKShhcnJheUpvaW4pKSwgJ0FycmF5Jywge1xuICBqb2luOiBmdW5jdGlvbiBqb2luKHNlcGFyYXRvcikge1xuICAgIHJldHVybiBhcnJheUpvaW4uY2FsbCh0b0lPYmplY3QodGhpcyksIHNlcGFyYXRvciA9PT0gdW5kZWZpbmVkID8gJywnIDogc2VwYXJhdG9yKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciAkbmF0aXZlID0gW10ubGFzdEluZGV4T2Y7XG52YXIgTkVHQVRJVkVfWkVSTyA9ICEhJG5hdGl2ZSAmJiAxIC8gWzFdLmxhc3RJbmRleE9mKDEsIC0wKSA8IDA7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogKE5FR0FUSVZFX1pFUk8gfHwgIXJlcXVpcmUoJy4vX3N0cmljdC1tZXRob2QnKSgkbmF0aXZlKSksICdBcnJheScsIHtcbiAgLy8gMjIuMS4zLjE0IC8gMTUuNC40LjE1IEFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZihzZWFyY2hFbGVtZW50IFssIGZyb21JbmRleF0pXG4gIGxhc3RJbmRleE9mOiBmdW5jdGlvbiBsYXN0SW5kZXhPZihzZWFyY2hFbGVtZW50IC8qICwgZnJvbUluZGV4ID0gQFsqLTFdICovKSB7XG4gICAgLy8gY29udmVydCAtMCB0byArMFxuICAgIGlmIChORUdBVElWRV9aRVJPKSByZXR1cm4gJG5hdGl2ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IDA7XG4gICAgdmFyIE8gPSB0b0lPYmplY3QodGhpcyk7XG4gICAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgICB2YXIgaW5kZXggPSBsZW5ndGggLSAxO1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkgaW5kZXggPSBNYXRoLm1pbihpbmRleCwgdG9JbnRlZ2VyKGFyZ3VtZW50c1sxXSkpO1xuICAgIGlmIChpbmRleCA8IDApIGluZGV4ID0gbGVuZ3RoICsgaW5kZXg7XG4gICAgZm9yICg7aW5kZXggPj0gMDsgaW5kZXgtLSkgaWYgKGluZGV4IGluIE8pIGlmIChPW2luZGV4XSA9PT0gc2VhcmNoRWxlbWVudCkgcmV0dXJuIGluZGV4IHx8IDA7XG4gICAgcmV0dXJuIC0xO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJG1hcCA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKSgxKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKFtdLm1hcCwgdHJ1ZSksICdBcnJheScsIHtcbiAgLy8gMjIuMS4zLjE1IC8gMTUuNC40LjE5IEFycmF5LnByb3RvdHlwZS5tYXAoY2FsbGJhY2tmbiBbLCB0aGlzQXJnXSlcbiAgbWFwOiBmdW5jdGlvbiBtYXAoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJG1hcCh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHNbMV0pO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgY3JlYXRlUHJvcGVydHkgPSByZXF1aXJlKCcuL19jcmVhdGUtcHJvcGVydHknKTtcblxuLy8gV2ViS2l0IEFycmF5Lm9mIGlzbid0IGdlbmVyaWNcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIEYoKSB7IC8qIGVtcHR5ICovIH1cbiAgcmV0dXJuICEoQXJyYXkub2YuY2FsbChGKSBpbnN0YW5jZW9mIEYpO1xufSksICdBcnJheScsIHtcbiAgLy8gMjIuMS4yLjMgQXJyYXkub2YoIC4uLml0ZW1zKVxuICBvZjogZnVuY3Rpb24gb2YoLyogLi4uYXJncyAqLykge1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciByZXN1bHQgPSBuZXcgKHR5cGVvZiB0aGlzID09ICdmdW5jdGlvbicgPyB0aGlzIDogQXJyYXkpKGFMZW4pO1xuICAgIHdoaWxlIChhTGVuID4gaW5kZXgpIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwgaW5kZXgsIGFyZ3VtZW50c1tpbmRleCsrXSk7XG4gICAgcmVzdWx0Lmxlbmd0aCA9IGFMZW47XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRyZWR1Y2UgPSByZXF1aXJlKCcuL19hcnJheS1yZWR1Y2UnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKFtdLnJlZHVjZVJpZ2h0LCB0cnVlKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuMTkgLyAxNS40LjQuMjIgQXJyYXkucHJvdG90eXBlLnJlZHVjZVJpZ2h0KGNhbGxiYWNrZm4gWywgaW5pdGlhbFZhbHVlXSlcbiAgcmVkdWNlUmlnaHQ6IGZ1bmN0aW9uIHJlZHVjZVJpZ2h0KGNhbGxiYWNrZm4gLyogLCBpbml0aWFsVmFsdWUgKi8pIHtcbiAgICByZXR1cm4gJHJlZHVjZSh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoLCBhcmd1bWVudHNbMV0sIHRydWUpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHJlZHVjZSA9IHJlcXVpcmUoJy4vX2FycmF5LXJlZHVjZScpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoW10ucmVkdWNlLCB0cnVlKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuMTggLyAxNS40LjQuMjEgQXJyYXkucHJvdG90eXBlLnJlZHVjZShjYWxsYmFja2ZuIFssIGluaXRpYWxWYWx1ZV0pXG4gIHJlZHVjZTogZnVuY3Rpb24gcmVkdWNlKGNhbGxiYWNrZm4gLyogLCBpbml0aWFsVmFsdWUgKi8pIHtcbiAgICByZXR1cm4gJHJlZHVjZSh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoLCBhcmd1bWVudHNbMV0sIGZhbHNlKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGh0bWwgPSByZXF1aXJlKCcuL19odG1sJyk7XG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi9fdG8tYWJzb2x1dGUtaW5kZXgnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGFycmF5U2xpY2UgPSBbXS5zbGljZTtcblxuLy8gZmFsbGJhY2sgZm9yIG5vdCBhcnJheS1saWtlIEVTMyBzdHJpbmdzIGFuZCBET00gb2JqZWN0c1xuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgaWYgKGh0bWwpIGFycmF5U2xpY2UuY2FsbChodG1sKTtcbn0pLCAnQXJyYXknLCB7XG4gIHNsaWNlOiBmdW5jdGlvbiBzbGljZShiZWdpbiwgZW5kKSB7XG4gICAgdmFyIGxlbiA9IHRvTGVuZ3RoKHRoaXMubGVuZ3RoKTtcbiAgICB2YXIga2xhc3MgPSBjb2YodGhpcyk7XG4gICAgZW5kID0gZW5kID09PSB1bmRlZmluZWQgPyBsZW4gOiBlbmQ7XG4gICAgaWYgKGtsYXNzID09ICdBcnJheScpIHJldHVybiBhcnJheVNsaWNlLmNhbGwodGhpcywgYmVnaW4sIGVuZCk7XG4gICAgdmFyIHN0YXJ0ID0gdG9BYnNvbHV0ZUluZGV4KGJlZ2luLCBsZW4pO1xuICAgIHZhciB1cFRvID0gdG9BYnNvbHV0ZUluZGV4KGVuZCwgbGVuKTtcbiAgICB2YXIgc2l6ZSA9IHRvTGVuZ3RoKHVwVG8gLSBzdGFydCk7XG4gICAgdmFyIGNsb25lZCA9IG5ldyBBcnJheShzaXplKTtcbiAgICB2YXIgaSA9IDA7XG4gICAgZm9yICg7IGkgPCBzaXplOyBpKyspIGNsb25lZFtpXSA9IGtsYXNzID09ICdTdHJpbmcnXG4gICAgICA/IHRoaXMuY2hhckF0KHN0YXJ0ICsgaSlcbiAgICAgIDogdGhpc1tzdGFydCArIGldO1xuICAgIHJldHVybiBjbG9uZWQ7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkc29tZSA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKSgzKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKFtdLnNvbWUsIHRydWUpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy4yMyAvIDE1LjQuNC4xNyBBcnJheS5wcm90b3R5cGUuc29tZShjYWxsYmFja2ZuIFssIHRoaXNBcmddKVxuICBzb21lOiBmdW5jdGlvbiBzb21lKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgcmV0dXJuICRzb21lKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50c1sxXSk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgJHNvcnQgPSBbXS5zb3J0O1xudmFyIHRlc3QgPSBbMSwgMiwgM107XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogKGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gSUU4LVxuICB0ZXN0LnNvcnQodW5kZWZpbmVkKTtcbn0pIHx8ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIFY4IGJ1Z1xuICB0ZXN0LnNvcnQobnVsbCk7XG4gIC8vIE9sZCBXZWJLaXRcbn0pIHx8ICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoJHNvcnQpKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuMjUgQXJyYXkucHJvdG90eXBlLnNvcnQoY29tcGFyZWZuKVxuICBzb3J0OiBmdW5jdGlvbiBzb3J0KGNvbXBhcmVmbikge1xuICAgIHJldHVybiBjb21wYXJlZm4gPT09IHVuZGVmaW5lZFxuICAgICAgPyAkc29ydC5jYWxsKHRvT2JqZWN0KHRoaXMpKVxuICAgICAgOiAkc29ydC5jYWxsKHRvT2JqZWN0KHRoaXMpLCBhRnVuY3Rpb24oY29tcGFyZWZuKSk7XG4gIH1cbn0pO1xuIiwicmVxdWlyZSgnLi9fc2V0LXNwZWNpZXMnKSgnQXJyYXknKTtcbiIsIi8vIDIwLjMuMy4xIC8gMTUuOS40LjQgRGF0ZS5ub3coKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdEYXRlJywgeyBub3c6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBEYXRlKCkuZ2V0VGltZSgpOyB9IH0pO1xuIiwiLy8gMjAuMy40LjM2IC8gMTUuOS41LjQzIERhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nKClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9JU09TdHJpbmcgPSByZXF1aXJlKCcuL19kYXRlLXRvLWlzby1zdHJpbmcnKTtcblxuLy8gUGhhbnRvbUpTIC8gb2xkIFdlYktpdCBoYXMgYSBicm9rZW4gaW1wbGVtZW50YXRpb25zXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIChEYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZyAhPT0gdG9JU09TdHJpbmcpLCAnRGF0ZScsIHtcbiAgdG9JU09TdHJpbmc6IHRvSVNPU3RyaW5nXG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gbmV3IERhdGUoTmFOKS50b0pTT04oKSAhPT0gbnVsbFxuICAgIHx8IERhdGUucHJvdG90eXBlLnRvSlNPTi5jYWxsKHsgdG9JU09TdHJpbmc6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDE7IH0gfSkgIT09IDE7XG59KSwgJ0RhdGUnLCB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuICB0b0pTT046IGZ1bmN0aW9uIHRvSlNPTihrZXkpIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgIHZhciBwdiA9IHRvUHJpbWl0aXZlKE8pO1xuICAgIHJldHVybiB0eXBlb2YgcHYgPT0gJ251bWJlcicgJiYgIWlzRmluaXRlKHB2KSA/IG51bGwgOiBPLnRvSVNPU3RyaW5nKCk7XG4gIH1cbn0pO1xuIiwidmFyIFRPX1BSSU1JVElWRSA9IHJlcXVpcmUoJy4vX3drcycpKCd0b1ByaW1pdGl2ZScpO1xudmFyIHByb3RvID0gRGF0ZS5wcm90b3R5cGU7XG5cbmlmICghKFRPX1BSSU1JVElWRSBpbiBwcm90bykpIHJlcXVpcmUoJy4vX2hpZGUnKShwcm90bywgVE9fUFJJTUlUSVZFLCByZXF1aXJlKCcuL19kYXRlLXRvLXByaW1pdGl2ZScpKTtcbiIsInZhciBEYXRlUHJvdG8gPSBEYXRlLnByb3RvdHlwZTtcbnZhciBJTlZBTElEX0RBVEUgPSAnSW52YWxpZCBEYXRlJztcbnZhciBUT19TVFJJTkcgPSAndG9TdHJpbmcnO1xudmFyICR0b1N0cmluZyA9IERhdGVQcm90b1tUT19TVFJJTkddO1xudmFyIGdldFRpbWUgPSBEYXRlUHJvdG8uZ2V0VGltZTtcbmlmIChuZXcgRGF0ZShOYU4pICsgJycgIT0gSU5WQUxJRF9EQVRFKSB7XG4gIHJlcXVpcmUoJy4vX3JlZGVmaW5lJykoRGF0ZVByb3RvLCBUT19TVFJJTkcsIGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHZhciB2YWx1ZSA9IGdldFRpbWUuY2FsbCh0aGlzKTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgcmV0dXJuIHZhbHVlID09PSB2YWx1ZSA/ICR0b1N0cmluZy5jYWxsKHRoaXMpIDogSU5WQUxJRF9EQVRFO1xuICB9KTtcbn1cbiIsIi8vIDE5LjIuMy4yIC8gMTUuMy40LjUgRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQodGhpc0FyZywgYXJncy4uLilcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QLCAnRnVuY3Rpb24nLCB7IGJpbmQ6IHJlcXVpcmUoJy4vX2JpbmQnKSB9KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIEhBU19JTlNUQU5DRSA9IHJlcXVpcmUoJy4vX3drcycpKCdoYXNJbnN0YW5jZScpO1xudmFyIEZ1bmN0aW9uUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGU7XG4vLyAxOS4yLjMuNiBGdW5jdGlvbi5wcm90b3R5cGVbQEBoYXNJbnN0YW5jZV0oVilcbmlmICghKEhBU19JTlNUQU5DRSBpbiBGdW5jdGlvblByb3RvKSkgcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZihGdW5jdGlvblByb3RvLCBIQVNfSU5TVEFOQ0UsIHsgdmFsdWU6IGZ1bmN0aW9uIChPKSB7XG4gIGlmICh0eXBlb2YgdGhpcyAhPSAnZnVuY3Rpb24nIHx8ICFpc09iamVjdChPKSkgcmV0dXJuIGZhbHNlO1xuICBpZiAoIWlzT2JqZWN0KHRoaXMucHJvdG90eXBlKSkgcmV0dXJuIE8gaW5zdGFuY2VvZiB0aGlzO1xuICAvLyBmb3IgZW52aXJvbm1lbnQgdy9vIG5hdGl2ZSBgQEBoYXNJbnN0YW5jZWAgbG9naWMgZW5vdWdoIGBpbnN0YW5jZW9mYCwgYnV0IGFkZCB0aGlzOlxuICB3aGlsZSAoTyA9IGdldFByb3RvdHlwZU9mKE8pKSBpZiAodGhpcy5wcm90b3R5cGUgPT09IE8pIHJldHVybiB0cnVlO1xuICByZXR1cm4gZmFsc2U7XG59IH0pO1xuIiwidmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbnZhciBGUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGU7XG52YXIgbmFtZVJFID0gL15cXHMqZnVuY3Rpb24gKFteIChdKikvO1xudmFyIE5BTUUgPSAnbmFtZSc7XG5cbi8vIDE5LjIuNC4yIG5hbWVcbk5BTUUgaW4gRlByb3RvIHx8IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgZFAoRlByb3RvLCBOQU1FLCB7XG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiAoJycgKyB0aGlzKS5tYXRjaChuYW1lUkUpWzFdO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHN0cm9uZyA9IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24tc3Ryb25nJyk7XG52YXIgdmFsaWRhdGUgPSByZXF1aXJlKCcuL192YWxpZGF0ZS1jb2xsZWN0aW9uJyk7XG52YXIgTUFQID0gJ01hcCc7XG5cbi8vIDIzLjEgTWFwIE9iamVjdHNcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fY29sbGVjdGlvbicpKE1BUCwgZnVuY3Rpb24gKGdldCkge1xuICByZXR1cm4gZnVuY3Rpb24gTWFwKCkgeyByZXR1cm4gZ2V0KHRoaXMsIGFyZ3VtZW50cy5sZW5ndGggPiAwID8gYXJndW1lbnRzWzBdIDogdW5kZWZpbmVkKTsgfTtcbn0sIHtcbiAgLy8gMjMuMS4zLjYgTWFwLnByb3RvdHlwZS5nZXQoa2V5KVxuICBnZXQ6IGZ1bmN0aW9uIGdldChrZXkpIHtcbiAgICB2YXIgZW50cnkgPSBzdHJvbmcuZ2V0RW50cnkodmFsaWRhdGUodGhpcywgTUFQKSwga2V5KTtcbiAgICByZXR1cm4gZW50cnkgJiYgZW50cnkudjtcbiAgfSxcbiAgLy8gMjMuMS4zLjkgTWFwLnByb3RvdHlwZS5zZXQoa2V5LCB2YWx1ZSlcbiAgc2V0OiBmdW5jdGlvbiBzZXQoa2V5LCB2YWx1ZSkge1xuICAgIHJldHVybiBzdHJvbmcuZGVmKHZhbGlkYXRlKHRoaXMsIE1BUCksIGtleSA9PT0gMCA/IDAgOiBrZXksIHZhbHVlKTtcbiAgfVxufSwgc3Ryb25nLCB0cnVlKTtcbiIsIi8vIDIwLjIuMi4zIE1hdGguYWNvc2goeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgbG9nMXAgPSByZXF1aXJlKCcuL19tYXRoLWxvZzFwJyk7XG52YXIgc3FydCA9IE1hdGguc3FydDtcbnZhciAkYWNvc2ggPSBNYXRoLmFjb3NoO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICEoJGFjb3NoXG4gIC8vIFY4IGJ1ZzogaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTM1MDlcbiAgJiYgTWF0aC5mbG9vcigkYWNvc2goTnVtYmVyLk1BWF9WQUxVRSkpID09IDcxMFxuICAvLyBUb3IgQnJvd3NlciBidWc6IE1hdGguYWNvc2goSW5maW5pdHkpIC0+IE5hTlxuICAmJiAkYWNvc2goSW5maW5pdHkpID09IEluZmluaXR5XG4pLCAnTWF0aCcsIHtcbiAgYWNvc2g6IGZ1bmN0aW9uIGFjb3NoKHgpIHtcbiAgICByZXR1cm4gKHggPSAreCkgPCAxID8gTmFOIDogeCA+IDk0OTA2MjY1LjYyNDI1MTU2XG4gICAgICA/IE1hdGgubG9nKHgpICsgTWF0aC5MTjJcbiAgICAgIDogbG9nMXAoeCAtIDEgKyBzcXJ0KHggLSAxKSAqIHNxcnQoeCArIDEpKTtcbiAgfVxufSk7XG4iLCIvLyAyMC4yLjIuNSBNYXRoLmFzaW5oKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRhc2luaCA9IE1hdGguYXNpbmg7XG5cbmZ1bmN0aW9uIGFzaW5oKHgpIHtcbiAgcmV0dXJuICFpc0Zpbml0ZSh4ID0gK3gpIHx8IHggPT0gMCA/IHggOiB4IDwgMCA/IC1hc2luaCgteCkgOiBNYXRoLmxvZyh4ICsgTWF0aC5zcXJ0KHggKiB4ICsgMSkpO1xufVxuXG4vLyBUb3IgQnJvd3NlciBidWc6IE1hdGguYXNpbmgoMCkgLT4gLTBcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogISgkYXNpbmggJiYgMSAvICRhc2luaCgwKSA+IDApLCAnTWF0aCcsIHsgYXNpbmg6IGFzaW5oIH0pO1xuIiwiLy8gMjAuMi4yLjcgTWF0aC5hdGFuaCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkYXRhbmggPSBNYXRoLmF0YW5oO1xuXG4vLyBUb3IgQnJvd3NlciBidWc6IE1hdGguYXRhbmgoLTApIC0+IDBcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogISgkYXRhbmggJiYgMSAvICRhdGFuaCgtMCkgPCAwKSwgJ01hdGgnLCB7XG4gIGF0YW5oOiBmdW5jdGlvbiBhdGFuaCh4KSB7XG4gICAgcmV0dXJuICh4ID0gK3gpID09IDAgPyB4IDogTWF0aC5sb2coKDEgKyB4KSAvICgxIC0geCkpIC8gMjtcbiAgfVxufSk7XG4iLCIvLyAyMC4yLjIuOSBNYXRoLmNicnQoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgc2lnbiA9IHJlcXVpcmUoJy4vX21hdGgtc2lnbicpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGNicnQ6IGZ1bmN0aW9uIGNicnQoeCkge1xuICAgIHJldHVybiBzaWduKHggPSAreCkgKiBNYXRoLnBvdyhNYXRoLmFicyh4KSwgMSAvIDMpO1xuICB9XG59KTtcbiIsIi8vIDIwLjIuMi4xMSBNYXRoLmNsejMyKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGNsejMyOiBmdW5jdGlvbiBjbHozMih4KSB7XG4gICAgcmV0dXJuICh4ID4+Pj0gMCkgPyAzMSAtIE1hdGguZmxvb3IoTWF0aC5sb2coeCArIDAuNSkgKiBNYXRoLkxPRzJFKSA6IDMyO1xuICB9XG59KTtcbiIsIi8vIDIwLjIuMi4xMiBNYXRoLmNvc2goeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZXhwID0gTWF0aC5leHA7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgY29zaDogZnVuY3Rpb24gY29zaCh4KSB7XG4gICAgcmV0dXJuIChleHAoeCA9ICt4KSArIGV4cCgteCkpIC8gMjtcbiAgfVxufSk7XG4iLCIvLyAyMC4yLjIuMTQgTWF0aC5leHBtMSh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkZXhwbTEgPSByZXF1aXJlKCcuL19tYXRoLWV4cG0xJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogKCRleHBtMSAhPSBNYXRoLmV4cG0xKSwgJ01hdGgnLCB7IGV4cG0xOiAkZXhwbTEgfSk7XG4iLCIvLyAyMC4yLjIuMTYgTWF0aC5mcm91bmQoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHsgZnJvdW5kOiByZXF1aXJlKCcuL19tYXRoLWZyb3VuZCcpIH0pO1xuIiwiLy8gMjAuMi4yLjE3IE1hdGguaHlwb3QoW3ZhbHVlMVssIHZhbHVlMlssIOKApiBdXV0pXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGFicyA9IE1hdGguYWJzO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGh5cG90OiBmdW5jdGlvbiBoeXBvdCh2YWx1ZTEsIHZhbHVlMikgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgdmFyIHN1bSA9IDA7XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBhTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgbGFyZyA9IDA7XG4gICAgdmFyIGFyZywgZGl2O1xuICAgIHdoaWxlIChpIDwgYUxlbikge1xuICAgICAgYXJnID0gYWJzKGFyZ3VtZW50c1tpKytdKTtcbiAgICAgIGlmIChsYXJnIDwgYXJnKSB7XG4gICAgICAgIGRpdiA9IGxhcmcgLyBhcmc7XG4gICAgICAgIHN1bSA9IHN1bSAqIGRpdiAqIGRpdiArIDE7XG4gICAgICAgIGxhcmcgPSBhcmc7XG4gICAgICB9IGVsc2UgaWYgKGFyZyA+IDApIHtcbiAgICAgICAgZGl2ID0gYXJnIC8gbGFyZztcbiAgICAgICAgc3VtICs9IGRpdiAqIGRpdjtcbiAgICAgIH0gZWxzZSBzdW0gKz0gYXJnO1xuICAgIH1cbiAgICByZXR1cm4gbGFyZyA9PT0gSW5maW5pdHkgPyBJbmZpbml0eSA6IGxhcmcgKiBNYXRoLnNxcnQoc3VtKTtcbiAgfVxufSk7XG4iLCIvLyAyMC4yLjIuMTggTWF0aC5pbXVsKHgsIHkpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRpbXVsID0gTWF0aC5pbXVsO1xuXG4vLyBzb21lIFdlYktpdCB2ZXJzaW9ucyBmYWlscyB3aXRoIGJpZyBudW1iZXJzLCBzb21lIGhhcyB3cm9uZyBhcml0eVxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICRpbXVsKDB4ZmZmZmZmZmYsIDUpICE9IC01IHx8ICRpbXVsLmxlbmd0aCAhPSAyO1xufSksICdNYXRoJywge1xuICBpbXVsOiBmdW5jdGlvbiBpbXVsKHgsIHkpIHtcbiAgICB2YXIgVUlOVDE2ID0gMHhmZmZmO1xuICAgIHZhciB4biA9ICt4O1xuICAgIHZhciB5biA9ICt5O1xuICAgIHZhciB4bCA9IFVJTlQxNiAmIHhuO1xuICAgIHZhciB5bCA9IFVJTlQxNiAmIHluO1xuICAgIHJldHVybiAwIHwgeGwgKiB5bCArICgoVUlOVDE2ICYgeG4gPj4+IDE2KSAqIHlsICsgeGwgKiAoVUlOVDE2ICYgeW4gPj4+IDE2KSA8PCAxNiA+Pj4gMCk7XG4gIH1cbn0pO1xuIiwiLy8gMjAuMi4yLjIxIE1hdGgubG9nMTAoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgbG9nMTA6IGZ1bmN0aW9uIGxvZzEwKHgpIHtcbiAgICByZXR1cm4gTWF0aC5sb2coeCkgKiBNYXRoLkxPRzEwRTtcbiAgfVxufSk7XG4iLCIvLyAyMC4yLjIuMjAgTWF0aC5sb2cxcCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywgeyBsb2cxcDogcmVxdWlyZSgnLi9fbWF0aC1sb2cxcCcpIH0pO1xuIiwiLy8gMjAuMi4yLjIyIE1hdGgubG9nMih4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBsb2cyOiBmdW5jdGlvbiBsb2cyKHgpIHtcbiAgICByZXR1cm4gTWF0aC5sb2coeCkgLyBNYXRoLkxOMjtcbiAgfVxufSk7XG4iLCIvLyAyMC4yLjIuMjggTWF0aC5zaWduKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7IHNpZ246IHJlcXVpcmUoJy4vX21hdGgtc2lnbicpIH0pO1xuIiwiLy8gMjAuMi4yLjMwIE1hdGguc2luaCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBleHBtMSA9IHJlcXVpcmUoJy4vX21hdGgtZXhwbTEnKTtcbnZhciBleHAgPSBNYXRoLmV4cDtcblxuLy8gVjggbmVhciBDaHJvbWl1bSAzOCBoYXMgYSBwcm9ibGVtIHdpdGggdmVyeSBzbWFsbCBudW1iZXJzXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gIU1hdGguc2luaCgtMmUtMTcpICE9IC0yZS0xNztcbn0pLCAnTWF0aCcsIHtcbiAgc2luaDogZnVuY3Rpb24gc2luaCh4KSB7XG4gICAgcmV0dXJuIE1hdGguYWJzKHggPSAreCkgPCAxXG4gICAgICA/IChleHBtMSh4KSAtIGV4cG0xKC14KSkgLyAyXG4gICAgICA6IChleHAoeCAtIDEpIC0gZXhwKC14IC0gMSkpICogKE1hdGguRSAvIDIpO1xuICB9XG59KTtcbiIsIi8vIDIwLjIuMi4zMyBNYXRoLnRhbmgoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZXhwbTEgPSByZXF1aXJlKCcuL19tYXRoLWV4cG0xJyk7XG52YXIgZXhwID0gTWF0aC5leHA7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgdGFuaDogZnVuY3Rpb24gdGFuaCh4KSB7XG4gICAgdmFyIGEgPSBleHBtMSh4ID0gK3gpO1xuICAgIHZhciBiID0gZXhwbTEoLXgpO1xuICAgIHJldHVybiBhID09IEluZmluaXR5ID8gMSA6IGIgPT0gSW5maW5pdHkgPyAtMSA6IChhIC0gYikgLyAoZXhwKHgpICsgZXhwKC14KSk7XG4gIH1cbn0pO1xuIiwiLy8gMjAuMi4yLjM0IE1hdGgudHJ1bmMoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgdHJ1bmM6IGZ1bmN0aW9uIHRydW5jKGl0KSB7XG4gICAgcmV0dXJuIChpdCA+IDAgPyBNYXRoLmZsb29yIDogTWF0aC5jZWlsKShpdCk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xudmFyIGluaGVyaXRJZlJlcXVpcmVkID0gcmVxdWlyZSgnLi9faW5oZXJpdC1pZi1yZXF1aXJlZCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIGdPUE4gPSByZXF1aXJlKCcuL19vYmplY3QtZ29wbicpLmY7XG52YXIgZ09QRCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJykuZjtcbnZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG52YXIgJHRyaW0gPSByZXF1aXJlKCcuL19zdHJpbmctdHJpbScpLnRyaW07XG52YXIgTlVNQkVSID0gJ051bWJlcic7XG52YXIgJE51bWJlciA9IGdsb2JhbFtOVU1CRVJdO1xudmFyIEJhc2UgPSAkTnVtYmVyO1xudmFyIHByb3RvID0gJE51bWJlci5wcm90b3R5cGU7XG4vLyBPcGVyYSB+MTIgaGFzIGJyb2tlbiBPYmplY3QjdG9TdHJpbmdcbnZhciBCUk9LRU5fQ09GID0gY29mKHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKShwcm90bykpID09IE5VTUJFUjtcbnZhciBUUklNID0gJ3RyaW0nIGluIFN0cmluZy5wcm90b3R5cGU7XG5cbi8vIDcuMS4zIFRvTnVtYmVyKGFyZ3VtZW50KVxudmFyIHRvTnVtYmVyID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHZhciBpdCA9IHRvUHJpbWl0aXZlKGFyZ3VtZW50LCBmYWxzZSk7XG4gIGlmICh0eXBlb2YgaXQgPT0gJ3N0cmluZycgJiYgaXQubGVuZ3RoID4gMikge1xuICAgIGl0ID0gVFJJTSA/IGl0LnRyaW0oKSA6ICR0cmltKGl0LCAzKTtcbiAgICB2YXIgZmlyc3QgPSBpdC5jaGFyQ29kZUF0KDApO1xuICAgIHZhciB0aGlyZCwgcmFkaXgsIG1heENvZGU7XG4gICAgaWYgKGZpcnN0ID09PSA0MyB8fCBmaXJzdCA9PT0gNDUpIHtcbiAgICAgIHRoaXJkID0gaXQuY2hhckNvZGVBdCgyKTtcbiAgICAgIGlmICh0aGlyZCA9PT0gODggfHwgdGhpcmQgPT09IDEyMCkgcmV0dXJuIE5hTjsgLy8gTnVtYmVyKCcrMHgxJykgc2hvdWxkIGJlIE5hTiwgb2xkIFY4IGZpeFxuICAgIH0gZWxzZSBpZiAoZmlyc3QgPT09IDQ4KSB7XG4gICAgICBzd2l0Y2ggKGl0LmNoYXJDb2RlQXQoMSkpIHtcbiAgICAgICAgY2FzZSA2NjogY2FzZSA5ODogcmFkaXggPSAyOyBtYXhDb2RlID0gNDk7IGJyZWFrOyAvLyBmYXN0IGVxdWFsIC9eMGJbMDFdKyQvaVxuICAgICAgICBjYXNlIDc5OiBjYXNlIDExMTogcmFkaXggPSA4OyBtYXhDb2RlID0gNTU7IGJyZWFrOyAvLyBmYXN0IGVxdWFsIC9eMG9bMC03XSskL2lcbiAgICAgICAgZGVmYXVsdDogcmV0dXJuICtpdDtcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIGRpZ2l0cyA9IGl0LnNsaWNlKDIpLCBpID0gMCwgbCA9IGRpZ2l0cy5sZW5ndGgsIGNvZGU7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgY29kZSA9IGRpZ2l0cy5jaGFyQ29kZUF0KGkpO1xuICAgICAgICAvLyBwYXJzZUludCBwYXJzZXMgYSBzdHJpbmcgdG8gYSBmaXJzdCB1bmF2YWlsYWJsZSBzeW1ib2xcbiAgICAgICAgLy8gYnV0IFRvTnVtYmVyIHNob3VsZCByZXR1cm4gTmFOIGlmIGEgc3RyaW5nIGNvbnRhaW5zIHVuYXZhaWxhYmxlIHN5bWJvbHNcbiAgICAgICAgaWYgKGNvZGUgPCA0OCB8fCBjb2RlID4gbWF4Q29kZSkgcmV0dXJuIE5hTjtcbiAgICAgIH0gcmV0dXJuIHBhcnNlSW50KGRpZ2l0cywgcmFkaXgpO1xuICAgIH1cbiAgfSByZXR1cm4gK2l0O1xufTtcblxuaWYgKCEkTnVtYmVyKCcgMG8xJykgfHwgISROdW1iZXIoJzBiMScpIHx8ICROdW1iZXIoJysweDEnKSkge1xuICAkTnVtYmVyID0gZnVuY3Rpb24gTnVtYmVyKHZhbHVlKSB7XG4gICAgdmFyIGl0ID0gYXJndW1lbnRzLmxlbmd0aCA8IDEgPyAwIDogdmFsdWU7XG4gICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgIHJldHVybiB0aGF0IGluc3RhbmNlb2YgJE51bWJlclxuICAgICAgLy8gY2hlY2sgb24gMS4uY29uc3RydWN0b3IoZm9vKSBjYXNlXG4gICAgICAmJiAoQlJPS0VOX0NPRiA/IGZhaWxzKGZ1bmN0aW9uICgpIHsgcHJvdG8udmFsdWVPZi5jYWxsKHRoYXQpOyB9KSA6IGNvZih0aGF0KSAhPSBOVU1CRVIpXG4gICAgICAgID8gaW5oZXJpdElmUmVxdWlyZWQobmV3IEJhc2UodG9OdW1iZXIoaXQpKSwgdGhhdCwgJE51bWJlcikgOiB0b051bWJlcihpdCk7XG4gIH07XG4gIGZvciAodmFyIGtleXMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpID8gZ09QTihCYXNlKSA6IChcbiAgICAvLyBFUzM6XG4gICAgJ01BWF9WQUxVRSxNSU5fVkFMVUUsTmFOLE5FR0FUSVZFX0lORklOSVRZLFBPU0lUSVZFX0lORklOSVRZLCcgK1xuICAgIC8vIEVTNiAoaW4gY2FzZSwgaWYgbW9kdWxlcyB3aXRoIEVTNiBOdW1iZXIgc3RhdGljcyByZXF1aXJlZCBiZWZvcmUpOlxuICAgICdFUFNJTE9OLGlzRmluaXRlLGlzSW50ZWdlcixpc05hTixpc1NhZmVJbnRlZ2VyLE1BWF9TQUZFX0lOVEVHRVIsJyArXG4gICAgJ01JTl9TQUZFX0lOVEVHRVIscGFyc2VGbG9hdCxwYXJzZUludCxpc0ludGVnZXInXG4gICkuc3BsaXQoJywnKSwgaiA9IDAsIGtleTsga2V5cy5sZW5ndGggPiBqOyBqKyspIHtcbiAgICBpZiAoaGFzKEJhc2UsIGtleSA9IGtleXNbal0pICYmICFoYXMoJE51bWJlciwga2V5KSkge1xuICAgICAgZFAoJE51bWJlciwga2V5LCBnT1BEKEJhc2UsIGtleSkpO1xuICAgIH1cbiAgfVxuICAkTnVtYmVyLnByb3RvdHlwZSA9IHByb3RvO1xuICBwcm90by5jb25zdHJ1Y3RvciA9ICROdW1iZXI7XG4gIHJlcXVpcmUoJy4vX3JlZGVmaW5lJykoZ2xvYmFsLCBOVU1CRVIsICROdW1iZXIpO1xufVxuIiwiLy8gMjAuMS4yLjEgTnVtYmVyLkVQU0lMT05cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTnVtYmVyJywgeyBFUFNJTE9OOiBNYXRoLnBvdygyLCAtNTIpIH0pO1xuIiwiLy8gMjAuMS4yLjIgTnVtYmVyLmlzRmluaXRlKG51bWJlcilcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgX2lzRmluaXRlID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykuaXNGaW5pdGU7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTnVtYmVyJywge1xuICBpc0Zpbml0ZTogZnVuY3Rpb24gaXNGaW5pdGUoaXQpIHtcbiAgICByZXR1cm4gdHlwZW9mIGl0ID09ICdudW1iZXInICYmIF9pc0Zpbml0ZShpdCk7XG4gIH1cbn0pO1xuIiwiLy8gMjAuMS4yLjMgTnVtYmVyLmlzSW50ZWdlcihudW1iZXIpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ051bWJlcicsIHsgaXNJbnRlZ2VyOiByZXF1aXJlKCcuL19pcy1pbnRlZ2VyJykgfSk7XG4iLCIvLyAyMC4xLjIuNCBOdW1iZXIuaXNOYU4obnVtYmVyKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdOdW1iZXInLCB7XG4gIGlzTmFOOiBmdW5jdGlvbiBpc05hTihudW1iZXIpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgcmV0dXJuIG51bWJlciAhPSBudW1iZXI7XG4gIH1cbn0pO1xuIiwiLy8gMjAuMS4yLjUgTnVtYmVyLmlzU2FmZUludGVnZXIobnVtYmVyKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBpc0ludGVnZXIgPSByZXF1aXJlKCcuL19pcy1pbnRlZ2VyJyk7XG52YXIgYWJzID0gTWF0aC5hYnM7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTnVtYmVyJywge1xuICBpc1NhZmVJbnRlZ2VyOiBmdW5jdGlvbiBpc1NhZmVJbnRlZ2VyKG51bWJlcikge1xuICAgIHJldHVybiBpc0ludGVnZXIobnVtYmVyKSAmJiBhYnMobnVtYmVyKSA8PSAweDFmZmZmZmZmZmZmZmZmO1xuICB9XG59KTtcbiIsIi8vIDIwLjEuMi42IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ051bWJlcicsIHsgTUFYX1NBRkVfSU5URUdFUjogMHgxZmZmZmZmZmZmZmZmZiB9KTtcbiIsIi8vIDIwLjEuMi4xMCBOdW1iZXIuTUlOX1NBRkVfSU5URUdFUlxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdOdW1iZXInLCB7IE1JTl9TQUZFX0lOVEVHRVI6IC0weDFmZmZmZmZmZmZmZmZmIH0pO1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkcGFyc2VGbG9hdCA9IHJlcXVpcmUoJy4vX3BhcnNlLWZsb2F0Jyk7XG4vLyAyMC4xLjIuMTIgTnVtYmVyLnBhcnNlRmxvYXQoc3RyaW5nKVxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAoTnVtYmVyLnBhcnNlRmxvYXQgIT0gJHBhcnNlRmxvYXQpLCAnTnVtYmVyJywgeyBwYXJzZUZsb2F0OiAkcGFyc2VGbG9hdCB9KTtcbiIsInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHBhcnNlSW50ID0gcmVxdWlyZSgnLi9fcGFyc2UtaW50Jyk7XG4vLyAyMC4xLjIuMTMgTnVtYmVyLnBhcnNlSW50KHN0cmluZywgcmFkaXgpXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIChOdW1iZXIucGFyc2VJbnQgIT0gJHBhcnNlSW50KSwgJ051bWJlcicsIHsgcGFyc2VJbnQ6ICRwYXJzZUludCB9KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIGFOdW1iZXJWYWx1ZSA9IHJlcXVpcmUoJy4vX2EtbnVtYmVyLXZhbHVlJyk7XG52YXIgcmVwZWF0ID0gcmVxdWlyZSgnLi9fc3RyaW5nLXJlcGVhdCcpO1xudmFyICR0b0ZpeGVkID0gMS4wLnRvRml4ZWQ7XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xudmFyIGRhdGEgPSBbMCwgMCwgMCwgMCwgMCwgMF07XG52YXIgRVJST1IgPSAnTnVtYmVyLnRvRml4ZWQ6IGluY29ycmVjdCBpbnZvY2F0aW9uISc7XG52YXIgWkVSTyA9ICcwJztcblxudmFyIG11bHRpcGx5ID0gZnVuY3Rpb24gKG4sIGMpIHtcbiAgdmFyIGkgPSAtMTtcbiAgdmFyIGMyID0gYztcbiAgd2hpbGUgKCsraSA8IDYpIHtcbiAgICBjMiArPSBuICogZGF0YVtpXTtcbiAgICBkYXRhW2ldID0gYzIgJSAxZTc7XG4gICAgYzIgPSBmbG9vcihjMiAvIDFlNyk7XG4gIH1cbn07XG52YXIgZGl2aWRlID0gZnVuY3Rpb24gKG4pIHtcbiAgdmFyIGkgPSA2O1xuICB2YXIgYyA9IDA7XG4gIHdoaWxlICgtLWkgPj0gMCkge1xuICAgIGMgKz0gZGF0YVtpXTtcbiAgICBkYXRhW2ldID0gZmxvb3IoYyAvIG4pO1xuICAgIGMgPSAoYyAlIG4pICogMWU3O1xuICB9XG59O1xudmFyIG51bVRvU3RyaW5nID0gZnVuY3Rpb24gKCkge1xuICB2YXIgaSA9IDY7XG4gIHZhciBzID0gJyc7XG4gIHdoaWxlICgtLWkgPj0gMCkge1xuICAgIGlmIChzICE9PSAnJyB8fCBpID09PSAwIHx8IGRhdGFbaV0gIT09IDApIHtcbiAgICAgIHZhciB0ID0gU3RyaW5nKGRhdGFbaV0pO1xuICAgICAgcyA9IHMgPT09ICcnID8gdCA6IHMgKyByZXBlYXQuY2FsbChaRVJPLCA3IC0gdC5sZW5ndGgpICsgdDtcbiAgICB9XG4gIH0gcmV0dXJuIHM7XG59O1xudmFyIHBvdyA9IGZ1bmN0aW9uICh4LCBuLCBhY2MpIHtcbiAgcmV0dXJuIG4gPT09IDAgPyBhY2MgOiBuICUgMiA9PT0gMSA/IHBvdyh4LCBuIC0gMSwgYWNjICogeCkgOiBwb3coeCAqIHgsIG4gLyAyLCBhY2MpO1xufTtcbnZhciBsb2cgPSBmdW5jdGlvbiAoeCkge1xuICB2YXIgbiA9IDA7XG4gIHZhciB4MiA9IHg7XG4gIHdoaWxlICh4MiA+PSA0MDk2KSB7XG4gICAgbiArPSAxMjtcbiAgICB4MiAvPSA0MDk2O1xuICB9XG4gIHdoaWxlICh4MiA+PSAyKSB7XG4gICAgbiArPSAxO1xuICAgIHgyIC89IDI7XG4gIH0gcmV0dXJuIG47XG59O1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICghISR0b0ZpeGVkICYmIChcbiAgMC4wMDAwOC50b0ZpeGVkKDMpICE9PSAnMC4wMDAnIHx8XG4gIDAuOS50b0ZpeGVkKDApICE9PSAnMScgfHxcbiAgMS4yNTUudG9GaXhlZCgyKSAhPT0gJzEuMjUnIHx8XG4gIDEwMDAwMDAwMDAwMDAwMDAxMjguMC50b0ZpeGVkKDApICE9PSAnMTAwMDAwMDAwMDAwMDAwMDEyOCdcbikgfHwgIXJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICAvLyBWOCB+IEFuZHJvaWQgNC4zLVxuICAkdG9GaXhlZC5jYWxsKHt9KTtcbn0pKSwgJ051bWJlcicsIHtcbiAgdG9GaXhlZDogZnVuY3Rpb24gdG9GaXhlZChmcmFjdGlvbkRpZ2l0cykge1xuICAgIHZhciB4ID0gYU51bWJlclZhbHVlKHRoaXMsIEVSUk9SKTtcbiAgICB2YXIgZiA9IHRvSW50ZWdlcihmcmFjdGlvbkRpZ2l0cyk7XG4gICAgdmFyIHMgPSAnJztcbiAgICB2YXIgbSA9IFpFUk87XG4gICAgdmFyIGUsIHosIGosIGs7XG4gICAgaWYgKGYgPCAwIHx8IGYgPiAyMCkgdGhyb3cgUmFuZ2VFcnJvcihFUlJPUik7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgIGlmICh4ICE9IHgpIHJldHVybiAnTmFOJztcbiAgICBpZiAoeCA8PSAtMWUyMSB8fCB4ID49IDFlMjEpIHJldHVybiBTdHJpbmcoeCk7XG4gICAgaWYgKHggPCAwKSB7XG4gICAgICBzID0gJy0nO1xuICAgICAgeCA9IC14O1xuICAgIH1cbiAgICBpZiAoeCA+IDFlLTIxKSB7XG4gICAgICBlID0gbG9nKHggKiBwb3coMiwgNjksIDEpKSAtIDY5O1xuICAgICAgeiA9IGUgPCAwID8geCAqIHBvdygyLCAtZSwgMSkgOiB4IC8gcG93KDIsIGUsIDEpO1xuICAgICAgeiAqPSAweDEwMDAwMDAwMDAwMDAwO1xuICAgICAgZSA9IDUyIC0gZTtcbiAgICAgIGlmIChlID4gMCkge1xuICAgICAgICBtdWx0aXBseSgwLCB6KTtcbiAgICAgICAgaiA9IGY7XG4gICAgICAgIHdoaWxlIChqID49IDcpIHtcbiAgICAgICAgICBtdWx0aXBseSgxZTcsIDApO1xuICAgICAgICAgIGogLT0gNztcbiAgICAgICAgfVxuICAgICAgICBtdWx0aXBseShwb3coMTAsIGosIDEpLCAwKTtcbiAgICAgICAgaiA9IGUgLSAxO1xuICAgICAgICB3aGlsZSAoaiA+PSAyMykge1xuICAgICAgICAgIGRpdmlkZSgxIDw8IDIzKTtcbiAgICAgICAgICBqIC09IDIzO1xuICAgICAgICB9XG4gICAgICAgIGRpdmlkZSgxIDw8IGopO1xuICAgICAgICBtdWx0aXBseSgxLCAxKTtcbiAgICAgICAgZGl2aWRlKDIpO1xuICAgICAgICBtID0gbnVtVG9TdHJpbmcoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG11bHRpcGx5KDAsIHopO1xuICAgICAgICBtdWx0aXBseSgxIDw8IC1lLCAwKTtcbiAgICAgICAgbSA9IG51bVRvU3RyaW5nKCkgKyByZXBlYXQuY2FsbChaRVJPLCBmKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGYgPiAwKSB7XG4gICAgICBrID0gbS5sZW5ndGg7XG4gICAgICBtID0gcyArIChrIDw9IGYgPyAnMC4nICsgcmVwZWF0LmNhbGwoWkVSTywgZiAtIGspICsgbSA6IG0uc2xpY2UoMCwgayAtIGYpICsgJy4nICsgbS5zbGljZShrIC0gZikpO1xuICAgIH0gZWxzZSB7XG4gICAgICBtID0gcyArIG07XG4gICAgfSByZXR1cm4gbTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgYU51bWJlclZhbHVlID0gcmVxdWlyZSgnLi9fYS1udW1iZXItdmFsdWUnKTtcbnZhciAkdG9QcmVjaXNpb24gPSAxLjAudG9QcmVjaXNpb247XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogKCRmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIElFNy1cbiAgcmV0dXJuICR0b1ByZWNpc2lvbi5jYWxsKDEsIHVuZGVmaW5lZCkgIT09ICcxJztcbn0pIHx8ICEkZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBWOCB+IEFuZHJvaWQgNC4zLVxuICAkdG9QcmVjaXNpb24uY2FsbCh7fSk7XG59KSksICdOdW1iZXInLCB7XG4gIHRvUHJlY2lzaW9uOiBmdW5jdGlvbiB0b1ByZWNpc2lvbihwcmVjaXNpb24pIHtcbiAgICB2YXIgdGhhdCA9IGFOdW1iZXJWYWx1ZSh0aGlzLCAnTnVtYmVyI3RvUHJlY2lzaW9uOiBpbmNvcnJlY3QgaW52b2NhdGlvbiEnKTtcbiAgICByZXR1cm4gcHJlY2lzaW9uID09PSB1bmRlZmluZWQgPyAkdG9QcmVjaXNpb24uY2FsbCh0aGF0KSA6ICR0b1ByZWNpc2lvbi5jYWxsKHRoYXQsIHByZWNpc2lvbik7XG4gIH1cbn0pO1xuIiwiLy8gMTkuMS4zLjEgT2JqZWN0LmFzc2lnbih0YXJnZXQsIHNvdXJjZSlcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GLCAnT2JqZWN0JywgeyBhc3NpZ246IHJlcXVpcmUoJy4vX29iamVjdC1hc3NpZ24nKSB9KTtcbiIsInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG4vLyAxOS4xLjIuMiAvIDE1LjIuMy41IE9iamVjdC5jcmVhdGUoTyBbLCBQcm9wZXJ0aWVzXSlcbiRleHBvcnQoJGV4cG9ydC5TLCAnT2JqZWN0JywgeyBjcmVhdGU6IHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKSB9KTtcbiIsInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG4vLyAxOS4xLjIuMyAvIDE1LjIuMy43IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE8sIFByb3BlcnRpZXMpXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpLCAnT2JqZWN0JywgeyBkZWZpbmVQcm9wZXJ0aWVzOiByZXF1aXJlKCcuL19vYmplY3QtZHBzJykgfSk7XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuLy8gMTkuMS4yLjQgLyAxNS4yLjMuNiBPYmplY3QuZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcylcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIXJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyksICdPYmplY3QnLCB7IGRlZmluZVByb3BlcnR5OiByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mIH0pO1xuIiwiLy8gMTkuMS4yLjUgT2JqZWN0LmZyZWV6ZShPKVxudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgbWV0YSA9IHJlcXVpcmUoJy4vX21ldGEnKS5vbkZyZWV6ZTtcblxucmVxdWlyZSgnLi9fb2JqZWN0LXNhcCcpKCdmcmVlemUnLCBmdW5jdGlvbiAoJGZyZWV6ZSkge1xuICByZXR1cm4gZnVuY3Rpb24gZnJlZXplKGl0KSB7XG4gICAgcmV0dXJuICRmcmVlemUgJiYgaXNPYmplY3QoaXQpID8gJGZyZWV6ZShtZXRhKGl0KSkgOiBpdDtcbiAgfTtcbn0pO1xuIiwiLy8gMTkuMS4yLjYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKVxudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKS5mO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ2dldE93blByb3BlcnR5RGVzY3JpcHRvcicsIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihpdCwga2V5KSB7XG4gICAgcmV0dXJuICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodG9JT2JqZWN0KGl0KSwga2V5KTtcbiAgfTtcbn0pO1xuIiwiLy8gMTkuMS4yLjcgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoTylcbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgnZ2V0T3duUHJvcGVydHlOYW1lcycsIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHJlcXVpcmUoJy4vX29iamVjdC1nb3BuLWV4dCcpLmY7XG59KTtcbiIsIi8vIDE5LjEuMi45IE9iamVjdC5nZXRQcm90b3R5cGVPZihPKVxudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgJGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ2dldFByb3RvdHlwZU9mJywgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gZnVuY3Rpb24gZ2V0UHJvdG90eXBlT2YoaXQpIHtcbiAgICByZXR1cm4gJGdldFByb3RvdHlwZU9mKHRvT2JqZWN0KGl0KSk7XG4gIH07XG59KTtcbiIsIi8vIDE5LjEuMi4xMSBPYmplY3QuaXNFeHRlbnNpYmxlKE8pXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcblxucmVxdWlyZSgnLi9fb2JqZWN0LXNhcCcpKCdpc0V4dGVuc2libGUnLCBmdW5jdGlvbiAoJGlzRXh0ZW5zaWJsZSkge1xuICByZXR1cm4gZnVuY3Rpb24gaXNFeHRlbnNpYmxlKGl0KSB7XG4gICAgcmV0dXJuIGlzT2JqZWN0KGl0KSA/ICRpc0V4dGVuc2libGUgPyAkaXNFeHRlbnNpYmxlKGl0KSA6IHRydWUgOiBmYWxzZTtcbiAgfTtcbn0pO1xuIiwiLy8gMTkuMS4yLjEyIE9iamVjdC5pc0Zyb3plbihPKVxudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgnaXNGcm96ZW4nLCBmdW5jdGlvbiAoJGlzRnJvemVuKSB7XG4gIHJldHVybiBmdW5jdGlvbiBpc0Zyb3plbihpdCkge1xuICAgIHJldHVybiBpc09iamVjdChpdCkgPyAkaXNGcm96ZW4gPyAkaXNGcm96ZW4oaXQpIDogZmFsc2UgOiB0cnVlO1xuICB9O1xufSk7XG4iLCIvLyAxOS4xLjIuMTMgT2JqZWN0LmlzU2VhbGVkKE8pXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcblxucmVxdWlyZSgnLi9fb2JqZWN0LXNhcCcpKCdpc1NlYWxlZCcsIGZ1bmN0aW9uICgkaXNTZWFsZWQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGlzU2VhbGVkKGl0KSB7XG4gICAgcmV0dXJuIGlzT2JqZWN0KGl0KSA/ICRpc1NlYWxlZCA/ICRpc1NlYWxlZChpdCkgOiBmYWxzZSA6IHRydWU7XG4gIH07XG59KTtcbiIsIi8vIDE5LjEuMy4xMCBPYmplY3QuaXModmFsdWUxLCB2YWx1ZTIpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuJGV4cG9ydCgkZXhwb3J0LlMsICdPYmplY3QnLCB7IGlzOiByZXF1aXJlKCcuL19zYW1lLXZhbHVlJykgfSk7XG4iLCIvLyAxOS4xLjIuMTQgT2JqZWN0LmtleXMoTylcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyICRrZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcblxucmVxdWlyZSgnLi9fb2JqZWN0LXNhcCcpKCdrZXlzJywgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gZnVuY3Rpb24ga2V5cyhpdCkge1xuICAgIHJldHVybiAka2V5cyh0b09iamVjdChpdCkpO1xuICB9O1xufSk7XG4iLCIvLyAxOS4xLjIuMTUgT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKE8pXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBtZXRhID0gcmVxdWlyZSgnLi9fbWV0YScpLm9uRnJlZXplO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ3ByZXZlbnRFeHRlbnNpb25zJywgZnVuY3Rpb24gKCRwcmV2ZW50RXh0ZW5zaW9ucykge1xuICByZXR1cm4gZnVuY3Rpb24gcHJldmVudEV4dGVuc2lvbnMoaXQpIHtcbiAgICByZXR1cm4gJHByZXZlbnRFeHRlbnNpb25zICYmIGlzT2JqZWN0KGl0KSA/ICRwcmV2ZW50RXh0ZW5zaW9ucyhtZXRhKGl0KSkgOiBpdDtcbiAgfTtcbn0pO1xuIiwiLy8gMTkuMS4yLjE3IE9iamVjdC5zZWFsKE8pXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBtZXRhID0gcmVxdWlyZSgnLi9fbWV0YScpLm9uRnJlZXplO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ3NlYWwnLCBmdW5jdGlvbiAoJHNlYWwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHNlYWwoaXQpIHtcbiAgICByZXR1cm4gJHNlYWwgJiYgaXNPYmplY3QoaXQpID8gJHNlYWwobWV0YShpdCkpIDogaXQ7XG4gIH07XG59KTtcbiIsIi8vIDE5LjEuMy4xOSBPYmplY3Quc2V0UHJvdG90eXBlT2YoTywgcHJvdG8pXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuJGV4cG9ydCgkZXhwb3J0LlMsICdPYmplY3QnLCB7IHNldFByb3RvdHlwZU9mOiByZXF1aXJlKCcuL19zZXQtcHJvdG8nKS5zZXQgfSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyAxOS4xLjMuNiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nKClcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi9fY2xhc3NvZicpO1xudmFyIHRlc3QgPSB7fTtcbnRlc3RbcmVxdWlyZSgnLi9fd2tzJykoJ3RvU3RyaW5nVGFnJyldID0gJ3onO1xuaWYgKHRlc3QgKyAnJyAhPSAnW29iamVjdCB6XScpIHtcbiAgcmVxdWlyZSgnLi9fcmVkZWZpbmUnKShPYmplY3QucHJvdG90eXBlLCAndG9TdHJpbmcnLCBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gJ1tvYmplY3QgJyArIGNsYXNzb2YodGhpcykgKyAnXSc7XG4gIH0sIHRydWUpO1xufVxuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkcGFyc2VGbG9hdCA9IHJlcXVpcmUoJy4vX3BhcnNlLWZsb2F0Jyk7XG4vLyAxOC4yLjQgcGFyc2VGbG9hdChzdHJpbmcpXG4kZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuRiAqIChwYXJzZUZsb2F0ICE9ICRwYXJzZUZsb2F0KSwgeyBwYXJzZUZsb2F0OiAkcGFyc2VGbG9hdCB9KTtcbiIsInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHBhcnNlSW50ID0gcmVxdWlyZSgnLi9fcGFyc2UtaW50Jyk7XG4vLyAxOC4yLjUgcGFyc2VJbnQoc3RyaW5nLCByYWRpeClcbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5GICogKHBhcnNlSW50ICE9ICRwYXJzZUludCksIHsgcGFyc2VJbnQ6ICRwYXJzZUludCB9KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBMSUJSQVJZID0gcmVxdWlyZSgnLi9fbGlicmFyeScpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuL19jbGFzc29mJyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuL19hbi1pbnN0YW5jZScpO1xudmFyIGZvck9mID0gcmVxdWlyZSgnLi9fZm9yLW9mJyk7XG52YXIgc3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi9fc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xudmFyIHRhc2sgPSByZXF1aXJlKCcuL190YXNrJykuc2V0O1xudmFyIG1pY3JvdGFzayA9IHJlcXVpcmUoJy4vX21pY3JvdGFzaycpKCk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUgPSByZXF1aXJlKCcuL19uZXctcHJvbWlzZS1jYXBhYmlsaXR5Jyk7XG52YXIgcGVyZm9ybSA9IHJlcXVpcmUoJy4vX3BlcmZvcm0nKTtcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuL191c2VyLWFnZW50Jyk7XG52YXIgcHJvbWlzZVJlc29sdmUgPSByZXF1aXJlKCcuL19wcm9taXNlLXJlc29sdmUnKTtcbnZhciBQUk9NSVNFID0gJ1Byb21pc2UnO1xudmFyIFR5cGVFcnJvciA9IGdsb2JhbC5UeXBlRXJyb3I7XG52YXIgcHJvY2VzcyA9IGdsb2JhbC5wcm9jZXNzO1xudmFyIHZlcnNpb25zID0gcHJvY2VzcyAmJiBwcm9jZXNzLnZlcnNpb25zO1xudmFyIHY4ID0gdmVyc2lvbnMgJiYgdmVyc2lvbnMudjggfHwgJyc7XG52YXIgJFByb21pc2UgPSBnbG9iYWxbUFJPTUlTRV07XG52YXIgaXNOb2RlID0gY2xhc3NvZihwcm9jZXNzKSA9PSAncHJvY2Vzcyc7XG52YXIgZW1wdHkgPSBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH07XG52YXIgSW50ZXJuYWwsIG5ld0dlbmVyaWNQcm9taXNlQ2FwYWJpbGl0eSwgT3duUHJvbWlzZUNhcGFiaWxpdHksIFdyYXBwZXI7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdHZW5lcmljUHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZS5mO1xuXG52YXIgVVNFX05BVElWRSA9ICEhZnVuY3Rpb24gKCkge1xuICB0cnkge1xuICAgIC8vIGNvcnJlY3Qgc3ViY2xhc3Npbmcgd2l0aCBAQHNwZWNpZXMgc3VwcG9ydFxuICAgIHZhciBwcm9taXNlID0gJFByb21pc2UucmVzb2x2ZSgxKTtcbiAgICB2YXIgRmFrZVByb21pc2UgPSAocHJvbWlzZS5jb25zdHJ1Y3RvciA9IHt9KVtyZXF1aXJlKCcuL193a3MnKSgnc3BlY2llcycpXSA9IGZ1bmN0aW9uIChleGVjKSB7XG4gICAgICBleGVjKGVtcHR5LCBlbXB0eSk7XG4gICAgfTtcbiAgICAvLyB1bmhhbmRsZWQgcmVqZWN0aW9ucyB0cmFja2luZyBzdXBwb3J0LCBOb2RlSlMgUHJvbWlzZSB3aXRob3V0IGl0IGZhaWxzIEBAc3BlY2llcyB0ZXN0XG4gICAgcmV0dXJuIChpc05vZGUgfHwgdHlwZW9mIFByb21pc2VSZWplY3Rpb25FdmVudCA9PSAnZnVuY3Rpb24nKVxuICAgICAgJiYgcHJvbWlzZS50aGVuKGVtcHR5KSBpbnN0YW5jZW9mIEZha2VQcm9taXNlXG4gICAgICAvLyB2OCA2LjYgKE5vZGUgMTAgYW5kIENocm9tZSA2NikgaGF2ZSBhIGJ1ZyB3aXRoIHJlc29sdmluZyBjdXN0b20gdGhlbmFibGVzXG4gICAgICAvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD04MzA1NjVcbiAgICAgIC8vIHdlIGNhbid0IGRldGVjdCBpdCBzeW5jaHJvbm91c2x5LCBzbyBqdXN0IGNoZWNrIHZlcnNpb25zXG4gICAgICAmJiB2OC5pbmRleE9mKCc2LjYnKSAhPT0gMFxuICAgICAgJiYgdXNlckFnZW50LmluZGV4T2YoJ0Nocm9tZS82NicpID09PSAtMTtcbiAgfSBjYXRjaCAoZSkgeyAvKiBlbXB0eSAqLyB9XG59KCk7XG5cbi8vIGhlbHBlcnNcbnZhciBpc1RoZW5hYmxlID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciB0aGVuO1xuICByZXR1cm4gaXNPYmplY3QoaXQpICYmIHR5cGVvZiAodGhlbiA9IGl0LnRoZW4pID09ICdmdW5jdGlvbicgPyB0aGVuIDogZmFsc2U7XG59O1xudmFyIG5vdGlmeSA9IGZ1bmN0aW9uIChwcm9taXNlLCBpc1JlamVjdCkge1xuICBpZiAocHJvbWlzZS5fbikgcmV0dXJuO1xuICBwcm9taXNlLl9uID0gdHJ1ZTtcbiAgdmFyIGNoYWluID0gcHJvbWlzZS5fYztcbiAgbWljcm90YXNrKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdmFsdWUgPSBwcm9taXNlLl92O1xuICAgIHZhciBvayA9IHByb21pc2UuX3MgPT0gMTtcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIHJ1biA9IGZ1bmN0aW9uIChyZWFjdGlvbikge1xuICAgICAgdmFyIGhhbmRsZXIgPSBvayA/IHJlYWN0aW9uLm9rIDogcmVhY3Rpb24uZmFpbDtcbiAgICAgIHZhciByZXNvbHZlID0gcmVhY3Rpb24ucmVzb2x2ZTtcbiAgICAgIHZhciByZWplY3QgPSByZWFjdGlvbi5yZWplY3Q7XG4gICAgICB2YXIgZG9tYWluID0gcmVhY3Rpb24uZG9tYWluO1xuICAgICAgdmFyIHJlc3VsdCwgdGhlbiwgZXhpdGVkO1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKGhhbmRsZXIpIHtcbiAgICAgICAgICBpZiAoIW9rKSB7XG4gICAgICAgICAgICBpZiAocHJvbWlzZS5faCA9PSAyKSBvbkhhbmRsZVVuaGFuZGxlZChwcm9taXNlKTtcbiAgICAgICAgICAgIHByb21pc2UuX2ggPSAxO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaGFuZGxlciA9PT0gdHJ1ZSkgcmVzdWx0ID0gdmFsdWU7XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoZG9tYWluKSBkb21haW4uZW50ZXIoKTtcbiAgICAgICAgICAgIHJlc3VsdCA9IGhhbmRsZXIodmFsdWUpOyAvLyBtYXkgdGhyb3dcbiAgICAgICAgICAgIGlmIChkb21haW4pIHtcbiAgICAgICAgICAgICAgZG9tYWluLmV4aXQoKTtcbiAgICAgICAgICAgICAgZXhpdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHJlc3VsdCA9PT0gcmVhY3Rpb24ucHJvbWlzZSkge1xuICAgICAgICAgICAgcmVqZWN0KFR5cGVFcnJvcignUHJvbWlzZS1jaGFpbiBjeWNsZScpKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoZW4gPSBpc1RoZW5hYmxlKHJlc3VsdCkpIHtcbiAgICAgICAgICAgIHRoZW4uY2FsbChyZXN1bHQsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgfSBlbHNlIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgfSBlbHNlIHJlamVjdCh2YWx1ZSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlmIChkb21haW4gJiYgIWV4aXRlZCkgZG9tYWluLmV4aXQoKTtcbiAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgfVxuICAgIH07XG4gICAgd2hpbGUgKGNoYWluLmxlbmd0aCA+IGkpIHJ1bihjaGFpbltpKytdKTsgLy8gdmFyaWFibGUgbGVuZ3RoIC0gY2FuJ3QgdXNlIGZvckVhY2hcbiAgICBwcm9taXNlLl9jID0gW107XG4gICAgcHJvbWlzZS5fbiA9IGZhbHNlO1xuICAgIGlmIChpc1JlamVjdCAmJiAhcHJvbWlzZS5faCkgb25VbmhhbmRsZWQocHJvbWlzZSk7XG4gIH0pO1xufTtcbnZhciBvblVuaGFuZGxlZCA9IGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gIHRhc2suY2FsbChnbG9iYWwsIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdmFsdWUgPSBwcm9taXNlLl92O1xuICAgIHZhciB1bmhhbmRsZWQgPSBpc1VuaGFuZGxlZChwcm9taXNlKTtcbiAgICB2YXIgcmVzdWx0LCBoYW5kbGVyLCBjb25zb2xlO1xuICAgIGlmICh1bmhhbmRsZWQpIHtcbiAgICAgIHJlc3VsdCA9IHBlcmZvcm0oZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoaXNOb2RlKSB7XG4gICAgICAgICAgcHJvY2Vzcy5lbWl0KCd1bmhhbmRsZWRSZWplY3Rpb24nLCB2YWx1ZSwgcHJvbWlzZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaGFuZGxlciA9IGdsb2JhbC5vbnVuaGFuZGxlZHJlamVjdGlvbikge1xuICAgICAgICAgIGhhbmRsZXIoeyBwcm9taXNlOiBwcm9taXNlLCByZWFzb246IHZhbHVlIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKChjb25zb2xlID0gZ2xvYmFsLmNvbnNvbGUpICYmIGNvbnNvbGUuZXJyb3IpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdVbmhhbmRsZWQgcHJvbWlzZSByZWplY3Rpb24nLCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgLy8gQnJvd3NlcnMgc2hvdWxkIG5vdCB0cmlnZ2VyIGByZWplY3Rpb25IYW5kbGVkYCBldmVudCBpZiBpdCB3YXMgaGFuZGxlZCBoZXJlLCBOb2RlSlMgLSBzaG91bGRcbiAgICAgIHByb21pc2UuX2ggPSBpc05vZGUgfHwgaXNVbmhhbmRsZWQocHJvbWlzZSkgPyAyIDogMTtcbiAgICB9IHByb21pc2UuX2EgPSB1bmRlZmluZWQ7XG4gICAgaWYgKHVuaGFuZGxlZCAmJiByZXN1bHQuZSkgdGhyb3cgcmVzdWx0LnY7XG4gIH0pO1xufTtcbnZhciBpc1VuaGFuZGxlZCA9IGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gIHJldHVybiBwcm9taXNlLl9oICE9PSAxICYmIChwcm9taXNlLl9hIHx8IHByb21pc2UuX2MpLmxlbmd0aCA9PT0gMDtcbn07XG52YXIgb25IYW5kbGVVbmhhbmRsZWQgPSBmdW5jdGlvbiAocHJvbWlzZSkge1xuICB0YXNrLmNhbGwoZ2xvYmFsLCBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGhhbmRsZXI7XG4gICAgaWYgKGlzTm9kZSkge1xuICAgICAgcHJvY2Vzcy5lbWl0KCdyZWplY3Rpb25IYW5kbGVkJywgcHJvbWlzZSk7XG4gICAgfSBlbHNlIGlmIChoYW5kbGVyID0gZ2xvYmFsLm9ucmVqZWN0aW9uaGFuZGxlZCkge1xuICAgICAgaGFuZGxlcih7IHByb21pc2U6IHByb21pc2UsIHJlYXNvbjogcHJvbWlzZS5fdiB9KTtcbiAgICB9XG4gIH0pO1xufTtcbnZhciAkcmVqZWN0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gIHZhciBwcm9taXNlID0gdGhpcztcbiAgaWYgKHByb21pc2UuX2QpIHJldHVybjtcbiAgcHJvbWlzZS5fZCA9IHRydWU7XG4gIHByb21pc2UgPSBwcm9taXNlLl93IHx8IHByb21pc2U7IC8vIHVud3JhcFxuICBwcm9taXNlLl92ID0gdmFsdWU7XG4gIHByb21pc2UuX3MgPSAyO1xuICBpZiAoIXByb21pc2UuX2EpIHByb21pc2UuX2EgPSBwcm9taXNlLl9jLnNsaWNlKCk7XG4gIG5vdGlmeShwcm9taXNlLCB0cnVlKTtcbn07XG52YXIgJHJlc29sdmUgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgdmFyIHByb21pc2UgPSB0aGlzO1xuICB2YXIgdGhlbjtcbiAgaWYgKHByb21pc2UuX2QpIHJldHVybjtcbiAgcHJvbWlzZS5fZCA9IHRydWU7XG4gIHByb21pc2UgPSBwcm9taXNlLl93IHx8IHByb21pc2U7IC8vIHVud3JhcFxuICB0cnkge1xuICAgIGlmIChwcm9taXNlID09PSB2YWx1ZSkgdGhyb3cgVHlwZUVycm9yKFwiUHJvbWlzZSBjYW4ndCBiZSByZXNvbHZlZCBpdHNlbGZcIik7XG4gICAgaWYgKHRoZW4gPSBpc1RoZW5hYmxlKHZhbHVlKSkge1xuICAgICAgbWljcm90YXNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHdyYXBwZXIgPSB7IF93OiBwcm9taXNlLCBfZDogZmFsc2UgfTsgLy8gd3JhcFxuICAgICAgICB0cnkge1xuICAgICAgICAgIHRoZW4uY2FsbCh2YWx1ZSwgY3R4KCRyZXNvbHZlLCB3cmFwcGVyLCAxKSwgY3R4KCRyZWplY3QsIHdyYXBwZXIsIDEpKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICRyZWplY3QuY2FsbCh3cmFwcGVyLCBlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHByb21pc2UuX3YgPSB2YWx1ZTtcbiAgICAgIHByb21pc2UuX3MgPSAxO1xuICAgICAgbm90aWZ5KHByb21pc2UsIGZhbHNlKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAkcmVqZWN0LmNhbGwoeyBfdzogcHJvbWlzZSwgX2Q6IGZhbHNlIH0sIGUpOyAvLyB3cmFwXG4gIH1cbn07XG5cbi8vIGNvbnN0cnVjdG9yIHBvbHlmaWxsXG5pZiAoIVVTRV9OQVRJVkUpIHtcbiAgLy8gMjUuNC4zLjEgUHJvbWlzZShleGVjdXRvcilcbiAgJFByb21pc2UgPSBmdW5jdGlvbiBQcm9taXNlKGV4ZWN1dG9yKSB7XG4gICAgYW5JbnN0YW5jZSh0aGlzLCAkUHJvbWlzZSwgUFJPTUlTRSwgJ19oJyk7XG4gICAgYUZ1bmN0aW9uKGV4ZWN1dG9yKTtcbiAgICBJbnRlcm5hbC5jYWxsKHRoaXMpO1xuICAgIHRyeSB7XG4gICAgICBleGVjdXRvcihjdHgoJHJlc29sdmUsIHRoaXMsIDEpLCBjdHgoJHJlamVjdCwgdGhpcywgMSkpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgJHJlamVjdC5jYWxsKHRoaXMsIGVycik7XG4gICAgfVxuICB9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgSW50ZXJuYWwgPSBmdW5jdGlvbiBQcm9taXNlKGV4ZWN1dG9yKSB7XG4gICAgdGhpcy5fYyA9IFtdOyAgICAgICAgICAgICAvLyA8LSBhd2FpdGluZyByZWFjdGlvbnNcbiAgICB0aGlzLl9hID0gdW5kZWZpbmVkOyAgICAgIC8vIDwtIGNoZWNrZWQgaW4gaXNVbmhhbmRsZWQgcmVhY3Rpb25zXG4gICAgdGhpcy5fcyA9IDA7ICAgICAgICAgICAgICAvLyA8LSBzdGF0ZVxuICAgIHRoaXMuX2QgPSBmYWxzZTsgICAgICAgICAgLy8gPC0gZG9uZVxuICAgIHRoaXMuX3YgPSB1bmRlZmluZWQ7ICAgICAgLy8gPC0gdmFsdWVcbiAgICB0aGlzLl9oID0gMDsgICAgICAgICAgICAgIC8vIDwtIHJlamVjdGlvbiBzdGF0ZSwgMCAtIGRlZmF1bHQsIDEgLSBoYW5kbGVkLCAyIC0gdW5oYW5kbGVkXG4gICAgdGhpcy5fbiA9IGZhbHNlOyAgICAgICAgICAvLyA8LSBub3RpZnlcbiAgfTtcbiAgSW50ZXJuYWwucHJvdG90eXBlID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUtYWxsJykoJFByb21pc2UucHJvdG90eXBlLCB7XG4gICAgLy8gMjUuNC41LjMgUHJvbWlzZS5wcm90b3R5cGUudGhlbihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZClcbiAgICB0aGVuOiBmdW5jdGlvbiB0aGVuKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKSB7XG4gICAgICB2YXIgcmVhY3Rpb24gPSBuZXdQcm9taXNlQ2FwYWJpbGl0eShzcGVjaWVzQ29uc3RydWN0b3IodGhpcywgJFByb21pc2UpKTtcbiAgICAgIHJlYWN0aW9uLm9rID0gdHlwZW9mIG9uRnVsZmlsbGVkID09ICdmdW5jdGlvbicgPyBvbkZ1bGZpbGxlZCA6IHRydWU7XG4gICAgICByZWFjdGlvbi5mYWlsID0gdHlwZW9mIG9uUmVqZWN0ZWQgPT0gJ2Z1bmN0aW9uJyAmJiBvblJlamVjdGVkO1xuICAgICAgcmVhY3Rpb24uZG9tYWluID0gaXNOb2RlID8gcHJvY2Vzcy5kb21haW4gOiB1bmRlZmluZWQ7XG4gICAgICB0aGlzLl9jLnB1c2gocmVhY3Rpb24pO1xuICAgICAgaWYgKHRoaXMuX2EpIHRoaXMuX2EucHVzaChyZWFjdGlvbik7XG4gICAgICBpZiAodGhpcy5fcykgbm90aWZ5KHRoaXMsIGZhbHNlKTtcbiAgICAgIHJldHVybiByZWFjdGlvbi5wcm9taXNlO1xuICAgIH0sXG4gICAgLy8gMjUuNC41LjEgUHJvbWlzZS5wcm90b3R5cGUuY2F0Y2gob25SZWplY3RlZClcbiAgICAnY2F0Y2gnOiBmdW5jdGlvbiAob25SZWplY3RlZCkge1xuICAgICAgcmV0dXJuIHRoaXMudGhlbih1bmRlZmluZWQsIG9uUmVqZWN0ZWQpO1xuICAgIH1cbiAgfSk7XG4gIE93blByb21pc2VDYXBhYmlsaXR5ID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBwcm9taXNlID0gbmV3IEludGVybmFsKCk7XG4gICAgdGhpcy5wcm9taXNlID0gcHJvbWlzZTtcbiAgICB0aGlzLnJlc29sdmUgPSBjdHgoJHJlc29sdmUsIHByb21pc2UsIDEpO1xuICAgIHRoaXMucmVqZWN0ID0gY3R4KCRyZWplY3QsIHByb21pc2UsIDEpO1xuICB9O1xuICBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZS5mID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkgPSBmdW5jdGlvbiAoQykge1xuICAgIHJldHVybiBDID09PSAkUHJvbWlzZSB8fCBDID09PSBXcmFwcGVyXG4gICAgICA/IG5ldyBPd25Qcm9taXNlQ2FwYWJpbGl0eShDKVxuICAgICAgOiBuZXdHZW5lcmljUHJvbWlzZUNhcGFiaWxpdHkoQyk7XG4gIH07XG59XG5cbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5XICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsIHsgUHJvbWlzZTogJFByb21pc2UgfSk7XG5yZXF1aXJlKCcuL19zZXQtdG8tc3RyaW5nLXRhZycpKCRQcm9taXNlLCBQUk9NSVNFKTtcbnJlcXVpcmUoJy4vX3NldC1zcGVjaWVzJykoUFJPTUlTRSk7XG5XcmFwcGVyID0gcmVxdWlyZSgnLi9fY29yZScpW1BST01JU0VdO1xuXG4vLyBzdGF0aWNzXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFVU0VfTkFUSVZFLCBQUk9NSVNFLCB7XG4gIC8vIDI1LjQuNC41IFByb21pc2UucmVqZWN0KHIpXG4gIHJlamVjdDogZnVuY3Rpb24gcmVqZWN0KHIpIHtcbiAgICB2YXIgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5KHRoaXMpO1xuICAgIHZhciAkJHJlamVjdCA9IGNhcGFiaWxpdHkucmVqZWN0O1xuICAgICQkcmVqZWN0KHIpO1xuICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cbn0pO1xuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAoTElCUkFSWSB8fCAhVVNFX05BVElWRSksIFBST01JU0UsIHtcbiAgLy8gMjUuNC40LjYgUHJvbWlzZS5yZXNvbHZlKHgpXG4gIHJlc29sdmU6IGZ1bmN0aW9uIHJlc29sdmUoeCkge1xuICAgIHJldHVybiBwcm9taXNlUmVzb2x2ZShMSUJSQVJZICYmIHRoaXMgPT09IFdyYXBwZXIgPyAkUHJvbWlzZSA6IHRoaXMsIHgpO1xuICB9XG59KTtcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIShVU0VfTkFUSVZFICYmIHJlcXVpcmUoJy4vX2l0ZXItZGV0ZWN0JykoZnVuY3Rpb24gKGl0ZXIpIHtcbiAgJFByb21pc2UuYWxsKGl0ZXIpWydjYXRjaCddKGVtcHR5KTtcbn0pKSwgUFJPTUlTRSwge1xuICAvLyAyNS40LjQuMSBQcm9taXNlLmFsbChpdGVyYWJsZSlcbiAgYWxsOiBmdW5jdGlvbiBhbGwoaXRlcmFibGUpIHtcbiAgICB2YXIgQyA9IHRoaXM7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eShDKTtcbiAgICB2YXIgcmVzb2x2ZSA9IGNhcGFiaWxpdHkucmVzb2x2ZTtcbiAgICB2YXIgcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgdmFyIHJlc3VsdCA9IHBlcmZvcm0oZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHZhbHVlcyA9IFtdO1xuICAgICAgdmFyIGluZGV4ID0gMDtcbiAgICAgIHZhciByZW1haW5pbmcgPSAxO1xuICAgICAgZm9yT2YoaXRlcmFibGUsIGZhbHNlLCBmdW5jdGlvbiAocHJvbWlzZSkge1xuICAgICAgICB2YXIgJGluZGV4ID0gaW5kZXgrKztcbiAgICAgICAgdmFyIGFscmVhZHlDYWxsZWQgPSBmYWxzZTtcbiAgICAgICAgdmFsdWVzLnB1c2godW5kZWZpbmVkKTtcbiAgICAgICAgcmVtYWluaW5nKys7XG4gICAgICAgIEMucmVzb2x2ZShwcm9taXNlKS50aGVuKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgIGlmIChhbHJlYWR5Q2FsbGVkKSByZXR1cm47XG4gICAgICAgICAgYWxyZWFkeUNhbGxlZCA9IHRydWU7XG4gICAgICAgICAgdmFsdWVzWyRpbmRleF0gPSB2YWx1ZTtcbiAgICAgICAgICAtLXJlbWFpbmluZyB8fCByZXNvbHZlKHZhbHVlcyk7XG4gICAgICAgIH0sIHJlamVjdCk7XG4gICAgICB9KTtcbiAgICAgIC0tcmVtYWluaW5nIHx8IHJlc29sdmUodmFsdWVzKTtcbiAgICB9KTtcbiAgICBpZiAocmVzdWx0LmUpIHJlamVjdChyZXN1bHQudik7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfSxcbiAgLy8gMjUuNC40LjQgUHJvbWlzZS5yYWNlKGl0ZXJhYmxlKVxuICByYWNlOiBmdW5jdGlvbiByYWNlKGl0ZXJhYmxlKSB7XG4gICAgdmFyIEMgPSB0aGlzO1xuICAgIHZhciBjYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkoQyk7XG4gICAgdmFyIHJlamVjdCA9IGNhcGFiaWxpdHkucmVqZWN0O1xuICAgIHZhciByZXN1bHQgPSBwZXJmb3JtKGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvck9mKGl0ZXJhYmxlLCBmYWxzZSwgZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgICAgICAgQy5yZXNvbHZlKHByb21pc2UpLnRoZW4oY2FwYWJpbGl0eS5yZXNvbHZlLCByZWplY3QpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgaWYgKHJlc3VsdC5lKSByZWplY3QocmVzdWx0LnYpO1xuICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cbn0pO1xuIiwiLy8gMjYuMS4xIFJlZmxlY3QuYXBwbHkodGFyZ2V0LCB0aGlzQXJndW1lbnQsIGFyZ3VtZW50c0xpc3QpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHJBcHBseSA9IChyZXF1aXJlKCcuL19nbG9iYWwnKS5SZWZsZWN0IHx8IHt9KS5hcHBseTtcbnZhciBmQXBwbHkgPSBGdW5jdGlvbi5hcHBseTtcbi8vIE1TIEVkZ2UgYXJndW1lbnRzTGlzdCBhcmd1bWVudCBpcyBvcHRpb25hbFxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJBcHBseShmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0pO1xufSksICdSZWZsZWN0Jywge1xuICBhcHBseTogZnVuY3Rpb24gYXBwbHkodGFyZ2V0LCB0aGlzQXJndW1lbnQsIGFyZ3VtZW50c0xpc3QpIHtcbiAgICB2YXIgVCA9IGFGdW5jdGlvbih0YXJnZXQpO1xuICAgIHZhciBMID0gYW5PYmplY3QoYXJndW1lbnRzTGlzdCk7XG4gICAgcmV0dXJuIHJBcHBseSA/IHJBcHBseShULCB0aGlzQXJndW1lbnQsIEwpIDogZkFwcGx5LmNhbGwoVCwgdGhpc0FyZ3VtZW50LCBMKTtcbiAgfVxufSk7XG4iLCIvLyAyNi4xLjIgUmVmbGVjdC5jb25zdHJ1Y3QodGFyZ2V0LCBhcmd1bWVudHNMaXN0IFssIG5ld1RhcmdldF0pXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciBiaW5kID0gcmVxdWlyZSgnLi9fYmluZCcpO1xudmFyIHJDb25zdHJ1Y3QgPSAocmVxdWlyZSgnLi9fZ2xvYmFsJykuUmVmbGVjdCB8fCB7fSkuY29uc3RydWN0O1xuXG4vLyBNUyBFZGdlIHN1cHBvcnRzIG9ubHkgMiBhcmd1bWVudHMgYW5kIGFyZ3VtZW50c0xpc3QgYXJndW1lbnQgaXMgb3B0aW9uYWxcbi8vIEZGIE5pZ2h0bHkgc2V0cyB0aGlyZCBhcmd1bWVudCBhcyBgbmV3LnRhcmdldGAsIGJ1dCBkb2VzIG5vdCBjcmVhdGUgYHRoaXNgIGZyb20gaXRcbnZhciBORVdfVEFSR0VUX0JVRyA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gRigpIHsgLyogZW1wdHkgKi8gfVxuICByZXR1cm4gIShyQ29uc3RydWN0KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSwgW10sIEYpIGluc3RhbmNlb2YgRik7XG59KTtcbnZhciBBUkdTX0JVRyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJDb25zdHJ1Y3QoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9KTtcbn0pO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIChORVdfVEFSR0VUX0JVRyB8fCBBUkdTX0JVRyksICdSZWZsZWN0Jywge1xuICBjb25zdHJ1Y3Q6IGZ1bmN0aW9uIGNvbnN0cnVjdChUYXJnZXQsIGFyZ3MgLyogLCBuZXdUYXJnZXQgKi8pIHtcbiAgICBhRnVuY3Rpb24oVGFyZ2V0KTtcbiAgICBhbk9iamVjdChhcmdzKTtcbiAgICB2YXIgbmV3VGFyZ2V0ID0gYXJndW1lbnRzLmxlbmd0aCA8IDMgPyBUYXJnZXQgOiBhRnVuY3Rpb24oYXJndW1lbnRzWzJdKTtcbiAgICBpZiAoQVJHU19CVUcgJiYgIU5FV19UQVJHRVRfQlVHKSByZXR1cm4gckNvbnN0cnVjdChUYXJnZXQsIGFyZ3MsIG5ld1RhcmdldCk7XG4gICAgaWYgKFRhcmdldCA9PSBuZXdUYXJnZXQpIHtcbiAgICAgIC8vIHcvbyBhbHRlcmVkIG5ld1RhcmdldCwgb3B0aW1pemF0aW9uIGZvciAwLTQgYXJndW1lbnRzXG4gICAgICBzd2l0Y2ggKGFyZ3MubGVuZ3RoKSB7XG4gICAgICAgIGNhc2UgMDogcmV0dXJuIG5ldyBUYXJnZXQoKTtcbiAgICAgICAgY2FzZSAxOiByZXR1cm4gbmV3IFRhcmdldChhcmdzWzBdKTtcbiAgICAgICAgY2FzZSAyOiByZXR1cm4gbmV3IFRhcmdldChhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICAgICAgY2FzZSAzOiByZXR1cm4gbmV3IFRhcmdldChhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTtcbiAgICAgICAgY2FzZSA0OiByZXR1cm4gbmV3IFRhcmdldChhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdKTtcbiAgICAgIH1cbiAgICAgIC8vIHcvbyBhbHRlcmVkIG5ld1RhcmdldCwgbG90IG9mIGFyZ3VtZW50cyBjYXNlXG4gICAgICB2YXIgJGFyZ3MgPSBbbnVsbF07XG4gICAgICAkYXJncy5wdXNoLmFwcGx5KCRhcmdzLCBhcmdzKTtcbiAgICAgIHJldHVybiBuZXcgKGJpbmQuYXBwbHkoVGFyZ2V0LCAkYXJncykpKCk7XG4gICAgfVxuICAgIC8vIHdpdGggYWx0ZXJlZCBuZXdUYXJnZXQsIG5vdCBzdXBwb3J0IGJ1aWx0LWluIGNvbnN0cnVjdG9yc1xuICAgIHZhciBwcm90byA9IG5ld1RhcmdldC5wcm90b3R5cGU7XG4gICAgdmFyIGluc3RhbmNlID0gY3JlYXRlKGlzT2JqZWN0KHByb3RvKSA/IHByb3RvIDogT2JqZWN0LnByb3RvdHlwZSk7XG4gICAgdmFyIHJlc3VsdCA9IEZ1bmN0aW9uLmFwcGx5LmNhbGwoVGFyZ2V0LCBpbnN0YW5jZSwgYXJncyk7XG4gICAgcmV0dXJuIGlzT2JqZWN0KHJlc3VsdCkgPyByZXN1bHQgOiBpbnN0YW5jZTtcbiAgfVxufSk7XG4iLCIvLyAyNi4xLjMgUmVmbGVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIHByb3BlcnR5S2V5LCBhdHRyaWJ1dGVzKVxudmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcblxuLy8gTVMgRWRnZSBoYXMgYnJva2VuIFJlZmxlY3QuZGVmaW5lUHJvcGVydHkgLSB0aHJvd2luZyBpbnN0ZWFkIG9mIHJldHVybmluZyBmYWxzZVxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gIFJlZmxlY3QuZGVmaW5lUHJvcGVydHkoZFAuZih7fSwgMSwgeyB2YWx1ZTogMSB9KSwgMSwgeyB2YWx1ZTogMiB9KTtcbn0pLCAnUmVmbGVjdCcsIHtcbiAgZGVmaW5lUHJvcGVydHk6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHlLZXksIGF0dHJpYnV0ZXMpIHtcbiAgICBhbk9iamVjdCh0YXJnZXQpO1xuICAgIHByb3BlcnR5S2V5ID0gdG9QcmltaXRpdmUocHJvcGVydHlLZXksIHRydWUpO1xuICAgIGFuT2JqZWN0KGF0dHJpYnV0ZXMpO1xuICAgIHRyeSB7XG4gICAgICBkUC5mKHRhcmdldCwgcHJvcGVydHlLZXksIGF0dHJpYnV0ZXMpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxufSk7XG4iLCIvLyAyNi4xLjQgUmVmbGVjdC5kZWxldGVQcm9wZXJ0eSh0YXJnZXQsIHByb3BlcnR5S2V5KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBnT1BEID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKS5mO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHtcbiAgZGVsZXRlUHJvcGVydHk6IGZ1bmN0aW9uIGRlbGV0ZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHlLZXkpIHtcbiAgICB2YXIgZGVzYyA9IGdPUEQoYW5PYmplY3QodGFyZ2V0KSwgcHJvcGVydHlLZXkpO1xuICAgIHJldHVybiBkZXNjICYmICFkZXNjLmNvbmZpZ3VyYWJsZSA/IGZhbHNlIDogZGVsZXRlIHRhcmdldFtwcm9wZXJ0eUtleV07XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gMjYuMS41IFJlZmxlY3QuZW51bWVyYXRlKHRhcmdldClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBFbnVtZXJhdGUgPSBmdW5jdGlvbiAoaXRlcmF0ZWQpIHtcbiAgdGhpcy5fdCA9IGFuT2JqZWN0KGl0ZXJhdGVkKTsgLy8gdGFyZ2V0XG4gIHRoaXMuX2kgPSAwOyAgICAgICAgICAgICAgICAgIC8vIG5leHQgaW5kZXhcbiAgdmFyIGtleXMgPSB0aGlzLl9rID0gW107ICAgICAgLy8ga2V5c1xuICB2YXIga2V5O1xuICBmb3IgKGtleSBpbiBpdGVyYXRlZCkga2V5cy5wdXNoKGtleSk7XG59O1xucmVxdWlyZSgnLi9faXRlci1jcmVhdGUnKShFbnVtZXJhdGUsICdPYmplY3QnLCBmdW5jdGlvbiAoKSB7XG4gIHZhciB0aGF0ID0gdGhpcztcbiAgdmFyIGtleXMgPSB0aGF0Ll9rO1xuICB2YXIga2V5O1xuICBkbyB7XG4gICAgaWYgKHRoYXQuX2kgPj0ga2V5cy5sZW5ndGgpIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfTtcbiAgfSB3aGlsZSAoISgoa2V5ID0ga2V5c1t0aGF0Ll9pKytdKSBpbiB0aGF0Ll90KSk7XG4gIHJldHVybiB7IHZhbHVlOiBrZXksIGRvbmU6IGZhbHNlIH07XG59KTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0Jywge1xuICBlbnVtZXJhdGU6IGZ1bmN0aW9uIGVudW1lcmF0ZSh0YXJnZXQpIHtcbiAgICByZXR1cm4gbmV3IEVudW1lcmF0ZSh0YXJnZXQpO1xuICB9XG59KTtcbiIsIi8vIDI2LjEuNyBSZWZsZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIHByb3BlcnR5S2V5KVxudmFyIGdPUEQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7XG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgcHJvcGVydHlLZXkpIHtcbiAgICByZXR1cm4gZ09QRC5mKGFuT2JqZWN0KHRhcmdldCksIHByb3BlcnR5S2V5KTtcbiAgfVxufSk7XG4iLCIvLyAyNi4xLjggUmVmbGVjdC5nZXRQcm90b3R5cGVPZih0YXJnZXQpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGdldFByb3RvID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHtcbiAgZ2V0UHJvdG90eXBlT2Y6IGZ1bmN0aW9uIGdldFByb3RvdHlwZU9mKHRhcmdldCkge1xuICAgIHJldHVybiBnZXRQcm90byhhbk9iamVjdCh0YXJnZXQpKTtcbiAgfVxufSk7XG4iLCIvLyAyNi4xLjYgUmVmbGVjdC5nZXQodGFyZ2V0LCBwcm9wZXJ0eUtleSBbLCByZWNlaXZlcl0pXG52YXIgZ09QRCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcblxuZnVuY3Rpb24gZ2V0KHRhcmdldCwgcHJvcGVydHlLZXkgLyogLCByZWNlaXZlciAqLykge1xuICB2YXIgcmVjZWl2ZXIgPSBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IHRhcmdldCA6IGFyZ3VtZW50c1syXTtcbiAgdmFyIGRlc2MsIHByb3RvO1xuICBpZiAoYW5PYmplY3QodGFyZ2V0KSA9PT0gcmVjZWl2ZXIpIHJldHVybiB0YXJnZXRbcHJvcGVydHlLZXldO1xuICBpZiAoZGVzYyA9IGdPUEQuZih0YXJnZXQsIHByb3BlcnR5S2V5KSkgcmV0dXJuIGhhcyhkZXNjLCAndmFsdWUnKVxuICAgID8gZGVzYy52YWx1ZVxuICAgIDogZGVzYy5nZXQgIT09IHVuZGVmaW5lZFxuICAgICAgPyBkZXNjLmdldC5jYWxsKHJlY2VpdmVyKVxuICAgICAgOiB1bmRlZmluZWQ7XG4gIGlmIChpc09iamVjdChwcm90byA9IGdldFByb3RvdHlwZU9mKHRhcmdldCkpKSByZXR1cm4gZ2V0KHByb3RvLCBwcm9wZXJ0eUtleSwgcmVjZWl2ZXIpO1xufVxuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7IGdldDogZ2V0IH0pO1xuIiwiLy8gMjYuMS45IFJlZmxlY3QuaGFzKHRhcmdldCwgcHJvcGVydHlLZXkpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7XG4gIGhhczogZnVuY3Rpb24gaGFzKHRhcmdldCwgcHJvcGVydHlLZXkpIHtcbiAgICByZXR1cm4gcHJvcGVydHlLZXkgaW4gdGFyZ2V0O1xuICB9XG59KTtcbiIsIi8vIDI2LjEuMTAgUmVmbGVjdC5pc0V4dGVuc2libGUodGFyZ2V0KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyICRpc0V4dGVuc2libGUgPSBPYmplY3QuaXNFeHRlbnNpYmxlO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7XG4gIGlzRXh0ZW5zaWJsZTogZnVuY3Rpb24gaXNFeHRlbnNpYmxlKHRhcmdldCkge1xuICAgIGFuT2JqZWN0KHRhcmdldCk7XG4gICAgcmV0dXJuICRpc0V4dGVuc2libGUgPyAkaXNFeHRlbnNpYmxlKHRhcmdldCkgOiB0cnVlO1xuICB9XG59KTtcbiIsIi8vIDI2LjEuMTEgUmVmbGVjdC5vd25LZXlzKHRhcmdldClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHsgb3duS2V5czogcmVxdWlyZSgnLi9fb3duLWtleXMnKSB9KTtcbiIsIi8vIDI2LjEuMTIgUmVmbGVjdC5wcmV2ZW50RXh0ZW5zaW9ucyh0YXJnZXQpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgJHByZXZlbnRFeHRlbnNpb25zID0gT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7XG4gIHByZXZlbnRFeHRlbnNpb25zOiBmdW5jdGlvbiBwcmV2ZW50RXh0ZW5zaW9ucyh0YXJnZXQpIHtcbiAgICBhbk9iamVjdCh0YXJnZXQpO1xuICAgIHRyeSB7XG4gICAgICBpZiAoJHByZXZlbnRFeHRlbnNpb25zKSAkcHJldmVudEV4dGVuc2lvbnModGFyZ2V0KTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbn0pO1xuIiwiLy8gMjYuMS4xNCBSZWZsZWN0LnNldFByb3RvdHlwZU9mKHRhcmdldCwgcHJvdG8pXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHNldFByb3RvID0gcmVxdWlyZSgnLi9fc2V0LXByb3RvJyk7XG5cbmlmIChzZXRQcm90bykgJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0Jywge1xuICBzZXRQcm90b3R5cGVPZjogZnVuY3Rpb24gc2V0UHJvdG90eXBlT2YodGFyZ2V0LCBwcm90bykge1xuICAgIHNldFByb3RvLmNoZWNrKHRhcmdldCwgcHJvdG8pO1xuICAgIHRyeSB7XG4gICAgICBzZXRQcm90by5zZXQodGFyZ2V0LCBwcm90byk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG59KTtcbiIsIi8vIDI2LjEuMTMgUmVmbGVjdC5zZXQodGFyZ2V0LCBwcm9wZXJ0eUtleSwgViBbLCByZWNlaXZlcl0pXG52YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciBnT1BEID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgY3JlYXRlRGVzYyA9IHJlcXVpcmUoJy4vX3Byb3BlcnR5LWRlc2MnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG5cbmZ1bmN0aW9uIHNldCh0YXJnZXQsIHByb3BlcnR5S2V5LCBWIC8qICwgcmVjZWl2ZXIgKi8pIHtcbiAgdmFyIHJlY2VpdmVyID0gYXJndW1lbnRzLmxlbmd0aCA8IDQgPyB0YXJnZXQgOiBhcmd1bWVudHNbM107XG4gIHZhciBvd25EZXNjID0gZ09QRC5mKGFuT2JqZWN0KHRhcmdldCksIHByb3BlcnR5S2V5KTtcbiAgdmFyIGV4aXN0aW5nRGVzY3JpcHRvciwgcHJvdG87XG4gIGlmICghb3duRGVzYykge1xuICAgIGlmIChpc09iamVjdChwcm90byA9IGdldFByb3RvdHlwZU9mKHRhcmdldCkpKSB7XG4gICAgICByZXR1cm4gc2V0KHByb3RvLCBwcm9wZXJ0eUtleSwgViwgcmVjZWl2ZXIpO1xuICAgIH1cbiAgICBvd25EZXNjID0gY3JlYXRlRGVzYygwKTtcbiAgfVxuICBpZiAoaGFzKG93bkRlc2MsICd2YWx1ZScpKSB7XG4gICAgaWYgKG93bkRlc2Mud3JpdGFibGUgPT09IGZhbHNlIHx8ICFpc09iamVjdChyZWNlaXZlcikpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoZXhpc3RpbmdEZXNjcmlwdG9yID0gZ09QRC5mKHJlY2VpdmVyLCBwcm9wZXJ0eUtleSkpIHtcbiAgICAgIGlmIChleGlzdGluZ0Rlc2NyaXB0b3IuZ2V0IHx8IGV4aXN0aW5nRGVzY3JpcHRvci5zZXQgfHwgZXhpc3RpbmdEZXNjcmlwdG9yLndyaXRhYmxlID09PSBmYWxzZSkgcmV0dXJuIGZhbHNlO1xuICAgICAgZXhpc3RpbmdEZXNjcmlwdG9yLnZhbHVlID0gVjtcbiAgICAgIGRQLmYocmVjZWl2ZXIsIHByb3BlcnR5S2V5LCBleGlzdGluZ0Rlc2NyaXB0b3IpO1xuICAgIH0gZWxzZSBkUC5mKHJlY2VpdmVyLCBwcm9wZXJ0eUtleSwgY3JlYXRlRGVzYygwLCBWKSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIG93bkRlc2Muc2V0ID09PSB1bmRlZmluZWQgPyBmYWxzZSA6IChvd25EZXNjLnNldC5jYWxsKHJlY2VpdmVyLCBWKSwgdHJ1ZSk7XG59XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHsgc2V0OiBzZXQgfSk7XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgaW5oZXJpdElmUmVxdWlyZWQgPSByZXF1aXJlKCcuL19pbmhlcml0LWlmLXJlcXVpcmVkJyk7XG52YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mO1xudmFyIGdPUE4gPSByZXF1aXJlKCcuL19vYmplY3QtZ29wbicpLmY7XG52YXIgaXNSZWdFeHAgPSByZXF1aXJlKCcuL19pcy1yZWdleHAnKTtcbnZhciAkZmxhZ3MgPSByZXF1aXJlKCcuL19mbGFncycpO1xudmFyICRSZWdFeHAgPSBnbG9iYWwuUmVnRXhwO1xudmFyIEJhc2UgPSAkUmVnRXhwO1xudmFyIHByb3RvID0gJFJlZ0V4cC5wcm90b3R5cGU7XG52YXIgcmUxID0gL2EvZztcbnZhciByZTIgPSAvYS9nO1xuLy8gXCJuZXdcIiBjcmVhdGVzIGEgbmV3IG9iamVjdCwgb2xkIHdlYmtpdCBidWdneSBoZXJlXG52YXIgQ09SUkVDVF9ORVcgPSBuZXcgJFJlZ0V4cChyZTEpICE9PSByZTE7XG5cbmlmIChyZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpICYmICghQ09SUkVDVF9ORVcgfHwgcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJlMltyZXF1aXJlKCcuL193a3MnKSgnbWF0Y2gnKV0gPSBmYWxzZTtcbiAgLy8gUmVnRXhwIGNvbnN0cnVjdG9yIGNhbiBhbHRlciBmbGFncyBhbmQgSXNSZWdFeHAgd29ya3MgY29ycmVjdCB3aXRoIEBAbWF0Y2hcbiAgcmV0dXJuICRSZWdFeHAocmUxKSAhPSByZTEgfHwgJFJlZ0V4cChyZTIpID09IHJlMiB8fCAkUmVnRXhwKHJlMSwgJ2knKSAhPSAnL2EvaSc7XG59KSkpIHtcbiAgJFJlZ0V4cCA9IGZ1bmN0aW9uIFJlZ0V4cChwLCBmKSB7XG4gICAgdmFyIHRpUkUgPSB0aGlzIGluc3RhbmNlb2YgJFJlZ0V4cDtcbiAgICB2YXIgcGlSRSA9IGlzUmVnRXhwKHApO1xuICAgIHZhciBmaVUgPSBmID09PSB1bmRlZmluZWQ7XG4gICAgcmV0dXJuICF0aVJFICYmIHBpUkUgJiYgcC5jb25zdHJ1Y3RvciA9PT0gJFJlZ0V4cCAmJiBmaVUgPyBwXG4gICAgICA6IGluaGVyaXRJZlJlcXVpcmVkKENPUlJFQ1RfTkVXXG4gICAgICAgID8gbmV3IEJhc2UocGlSRSAmJiAhZmlVID8gcC5zb3VyY2UgOiBwLCBmKVxuICAgICAgICA6IEJhc2UoKHBpUkUgPSBwIGluc3RhbmNlb2YgJFJlZ0V4cCkgPyBwLnNvdXJjZSA6IHAsIHBpUkUgJiYgZmlVID8gJGZsYWdzLmNhbGwocCkgOiBmKVxuICAgICAgLCB0aVJFID8gdGhpcyA6IHByb3RvLCAkUmVnRXhwKTtcbiAgfTtcbiAgdmFyIHByb3h5ID0gZnVuY3Rpb24gKGtleSkge1xuICAgIGtleSBpbiAkUmVnRXhwIHx8IGRQKCRSZWdFeHAsIGtleSwge1xuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBCYXNlW2tleV07IH0sXG4gICAgICBzZXQ6IGZ1bmN0aW9uIChpdCkgeyBCYXNlW2tleV0gPSBpdDsgfVxuICAgIH0pO1xuICB9O1xuICBmb3IgKHZhciBrZXlzID0gZ09QTihCYXNlKSwgaSA9IDA7IGtleXMubGVuZ3RoID4gaTspIHByb3h5KGtleXNbaSsrXSk7XG4gIHByb3RvLmNvbnN0cnVjdG9yID0gJFJlZ0V4cDtcbiAgJFJlZ0V4cC5wcm90b3R5cGUgPSBwcm90bztcbiAgcmVxdWlyZSgnLi9fcmVkZWZpbmUnKShnbG9iYWwsICdSZWdFeHAnLCAkUmVnRXhwKTtcbn1cblxucmVxdWlyZSgnLi9fc2V0LXNwZWNpZXMnKSgnUmVnRXhwJyk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgcmVnZXhwRXhlYyA9IHJlcXVpcmUoJy4vX3JlZ2V4cC1leGVjJyk7XG5yZXF1aXJlKCcuL19leHBvcnQnKSh7XG4gIHRhcmdldDogJ1JlZ0V4cCcsXG4gIHByb3RvOiB0cnVlLFxuICBmb3JjZWQ6IHJlZ2V4cEV4ZWMgIT09IC8uLy5leGVjXG59LCB7XG4gIGV4ZWM6IHJlZ2V4cEV4ZWNcbn0pO1xuIiwiLy8gMjEuMi41LjMgZ2V0IFJlZ0V4cC5wcm90b3R5cGUuZmxhZ3MoKVxuaWYgKHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgLy4vZy5mbGFncyAhPSAnZycpIHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmYoUmVnRXhwLnByb3RvdHlwZSwgJ2ZsYWdzJywge1xuICBjb25maWd1cmFibGU6IHRydWUsXG4gIGdldDogcmVxdWlyZSgnLi9fZmxhZ3MnKVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgYWR2YW5jZVN0cmluZ0luZGV4ID0gcmVxdWlyZSgnLi9fYWR2YW5jZS1zdHJpbmctaW5kZXgnKTtcbnZhciByZWdFeHBFeGVjID0gcmVxdWlyZSgnLi9fcmVnZXhwLWV4ZWMtYWJzdHJhY3QnKTtcblxuLy8gQEBtYXRjaCBsb2dpY1xucmVxdWlyZSgnLi9fZml4LXJlLXdrcycpKCdtYXRjaCcsIDEsIGZ1bmN0aW9uIChkZWZpbmVkLCBNQVRDSCwgJG1hdGNoLCBtYXliZUNhbGxOYXRpdmUpIHtcbiAgcmV0dXJuIFtcbiAgICAvLyBgU3RyaW5nLnByb3RvdHlwZS5tYXRjaGAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5tYXRjaFxuICAgIGZ1bmN0aW9uIG1hdGNoKHJlZ2V4cCkge1xuICAgICAgdmFyIE8gPSBkZWZpbmVkKHRoaXMpO1xuICAgICAgdmFyIGZuID0gcmVnZXhwID09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHJlZ2V4cFtNQVRDSF07XG4gICAgICByZXR1cm4gZm4gIT09IHVuZGVmaW5lZCA/IGZuLmNhbGwocmVnZXhwLCBPKSA6IG5ldyBSZWdFeHAocmVnZXhwKVtNQVRDSF0oU3RyaW5nKE8pKTtcbiAgICB9LFxuICAgIC8vIGBSZWdFeHAucHJvdG90eXBlW0BAbWF0Y2hdYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1yZWdleHAucHJvdG90eXBlLUBAbWF0Y2hcbiAgICBmdW5jdGlvbiAocmVnZXhwKSB7XG4gICAgICB2YXIgcmVzID0gbWF5YmVDYWxsTmF0aXZlKCRtYXRjaCwgcmVnZXhwLCB0aGlzKTtcbiAgICAgIGlmIChyZXMuZG9uZSkgcmV0dXJuIHJlcy52YWx1ZTtcbiAgICAgIHZhciByeCA9IGFuT2JqZWN0KHJlZ2V4cCk7XG4gICAgICB2YXIgUyA9IFN0cmluZyh0aGlzKTtcbiAgICAgIGlmICghcnguZ2xvYmFsKSByZXR1cm4gcmVnRXhwRXhlYyhyeCwgUyk7XG4gICAgICB2YXIgZnVsbFVuaWNvZGUgPSByeC51bmljb2RlO1xuICAgICAgcngubGFzdEluZGV4ID0gMDtcbiAgICAgIHZhciBBID0gW107XG4gICAgICB2YXIgbiA9IDA7XG4gICAgICB2YXIgcmVzdWx0O1xuICAgICAgd2hpbGUgKChyZXN1bHQgPSByZWdFeHBFeGVjKHJ4LCBTKSkgIT09IG51bGwpIHtcbiAgICAgICAgdmFyIG1hdGNoU3RyID0gU3RyaW5nKHJlc3VsdFswXSk7XG4gICAgICAgIEFbbl0gPSBtYXRjaFN0cjtcbiAgICAgICAgaWYgKG1hdGNoU3RyID09PSAnJykgcngubGFzdEluZGV4ID0gYWR2YW5jZVN0cmluZ0luZGV4KFMsIHRvTGVuZ3RoKHJ4Lmxhc3RJbmRleCksIGZ1bGxVbmljb2RlKTtcbiAgICAgICAgbisrO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG4gPT09IDAgPyBudWxsIDogQTtcbiAgICB9XG4gIF07XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciBhZHZhbmNlU3RyaW5nSW5kZXggPSByZXF1aXJlKCcuL19hZHZhbmNlLXN0cmluZy1pbmRleCcpO1xudmFyIHJlZ0V4cEV4ZWMgPSByZXF1aXJlKCcuL19yZWdleHAtZXhlYy1hYnN0cmFjdCcpO1xudmFyIG1heCA9IE1hdGgubWF4O1xudmFyIG1pbiA9IE1hdGgubWluO1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcbnZhciBTVUJTVElUVVRJT05fU1lNQk9MUyA9IC9cXCQoWyQmYCddfFxcZFxcZD98PFtePl0qPikvZztcbnZhciBTVUJTVElUVVRJT05fU1lNQk9MU19OT19OQU1FRCA9IC9cXCQoWyQmYCddfFxcZFxcZD8pL2c7XG5cbnZhciBtYXliZVRvU3RyaW5nID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCA9PT0gdW5kZWZpbmVkID8gaXQgOiBTdHJpbmcoaXQpO1xufTtcblxuLy8gQEByZXBsYWNlIGxvZ2ljXG5yZXF1aXJlKCcuL19maXgtcmUtd2tzJykoJ3JlcGxhY2UnLCAyLCBmdW5jdGlvbiAoZGVmaW5lZCwgUkVQTEFDRSwgJHJlcGxhY2UsIG1heWJlQ2FsbE5hdGl2ZSkge1xuICByZXR1cm4gW1xuICAgIC8vIGBTdHJpbmcucHJvdG90eXBlLnJlcGxhY2VgIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUucmVwbGFjZVxuICAgIGZ1bmN0aW9uIHJlcGxhY2Uoc2VhcmNoVmFsdWUsIHJlcGxhY2VWYWx1ZSkge1xuICAgICAgdmFyIE8gPSBkZWZpbmVkKHRoaXMpO1xuICAgICAgdmFyIGZuID0gc2VhcmNoVmFsdWUgPT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogc2VhcmNoVmFsdWVbUkVQTEFDRV07XG4gICAgICByZXR1cm4gZm4gIT09IHVuZGVmaW5lZFxuICAgICAgICA/IGZuLmNhbGwoc2VhcmNoVmFsdWUsIE8sIHJlcGxhY2VWYWx1ZSlcbiAgICAgICAgOiAkcmVwbGFjZS5jYWxsKFN0cmluZyhPKSwgc2VhcmNoVmFsdWUsIHJlcGxhY2VWYWx1ZSk7XG4gICAgfSxcbiAgICAvLyBgUmVnRXhwLnByb3RvdHlwZVtAQHJlcGxhY2VdYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1yZWdleHAucHJvdG90eXBlLUBAcmVwbGFjZVxuICAgIGZ1bmN0aW9uIChyZWdleHAsIHJlcGxhY2VWYWx1ZSkge1xuICAgICAgdmFyIHJlcyA9IG1heWJlQ2FsbE5hdGl2ZSgkcmVwbGFjZSwgcmVnZXhwLCB0aGlzLCByZXBsYWNlVmFsdWUpO1xuICAgICAgaWYgKHJlcy5kb25lKSByZXR1cm4gcmVzLnZhbHVlO1xuXG4gICAgICB2YXIgcnggPSBhbk9iamVjdChyZWdleHApO1xuICAgICAgdmFyIFMgPSBTdHJpbmcodGhpcyk7XG4gICAgICB2YXIgZnVuY3Rpb25hbFJlcGxhY2UgPSB0eXBlb2YgcmVwbGFjZVZhbHVlID09PSAnZnVuY3Rpb24nO1xuICAgICAgaWYgKCFmdW5jdGlvbmFsUmVwbGFjZSkgcmVwbGFjZVZhbHVlID0gU3RyaW5nKHJlcGxhY2VWYWx1ZSk7XG4gICAgICB2YXIgZ2xvYmFsID0gcnguZ2xvYmFsO1xuICAgICAgaWYgKGdsb2JhbCkge1xuICAgICAgICB2YXIgZnVsbFVuaWNvZGUgPSByeC51bmljb2RlO1xuICAgICAgICByeC5sYXN0SW5kZXggPSAwO1xuICAgICAgfVxuICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSByZWdFeHBFeGVjKHJ4LCBTKTtcbiAgICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCkgYnJlYWs7XG4gICAgICAgIHJlc3VsdHMucHVzaChyZXN1bHQpO1xuICAgICAgICBpZiAoIWdsb2JhbCkgYnJlYWs7XG4gICAgICAgIHZhciBtYXRjaFN0ciA9IFN0cmluZyhyZXN1bHRbMF0pO1xuICAgICAgICBpZiAobWF0Y2hTdHIgPT09ICcnKSByeC5sYXN0SW5kZXggPSBhZHZhbmNlU3RyaW5nSW5kZXgoUywgdG9MZW5ndGgocngubGFzdEluZGV4KSwgZnVsbFVuaWNvZGUpO1xuICAgICAgfVxuICAgICAgdmFyIGFjY3VtdWxhdGVkUmVzdWx0ID0gJyc7XG4gICAgICB2YXIgbmV4dFNvdXJjZVBvc2l0aW9uID0gMDtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVzdWx0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICByZXN1bHQgPSByZXN1bHRzW2ldO1xuICAgICAgICB2YXIgbWF0Y2hlZCA9IFN0cmluZyhyZXN1bHRbMF0pO1xuICAgICAgICB2YXIgcG9zaXRpb24gPSBtYXgobWluKHRvSW50ZWdlcihyZXN1bHQuaW5kZXgpLCBTLmxlbmd0aCksIDApO1xuICAgICAgICB2YXIgY2FwdHVyZXMgPSBbXTtcbiAgICAgICAgLy8gTk9URTogVGhpcyBpcyBlcXVpdmFsZW50IHRvXG4gICAgICAgIC8vICAgY2FwdHVyZXMgPSByZXN1bHQuc2xpY2UoMSkubWFwKG1heWJlVG9TdHJpbmcpXG4gICAgICAgIC8vIGJ1dCBmb3Igc29tZSByZWFzb24gYG5hdGl2ZVNsaWNlLmNhbGwocmVzdWx0LCAxLCByZXN1bHQubGVuZ3RoKWAgKGNhbGxlZCBpblxuICAgICAgICAvLyB0aGUgc2xpY2UgcG9seWZpbGwgd2hlbiBzbGljaW5nIG5hdGl2ZSBhcnJheXMpIFwiZG9lc24ndCB3b3JrXCIgaW4gc2FmYXJpIDkgYW5kXG4gICAgICAgIC8vIGNhdXNlcyBhIGNyYXNoIChodHRwczovL3Bhc3RlYmluLmNvbS9OMjFRemVRQSkgd2hlbiB0cnlpbmcgdG8gZGVidWcgaXQuXG4gICAgICAgIGZvciAodmFyIGogPSAxOyBqIDwgcmVzdWx0Lmxlbmd0aDsgaisrKSBjYXB0dXJlcy5wdXNoKG1heWJlVG9TdHJpbmcocmVzdWx0W2pdKSk7XG4gICAgICAgIHZhciBuYW1lZENhcHR1cmVzID0gcmVzdWx0Lmdyb3VwcztcbiAgICAgICAgaWYgKGZ1bmN0aW9uYWxSZXBsYWNlKSB7XG4gICAgICAgICAgdmFyIHJlcGxhY2VyQXJncyA9IFttYXRjaGVkXS5jb25jYXQoY2FwdHVyZXMsIHBvc2l0aW9uLCBTKTtcbiAgICAgICAgICBpZiAobmFtZWRDYXB0dXJlcyAhPT0gdW5kZWZpbmVkKSByZXBsYWNlckFyZ3MucHVzaChuYW1lZENhcHR1cmVzKTtcbiAgICAgICAgICB2YXIgcmVwbGFjZW1lbnQgPSBTdHJpbmcocmVwbGFjZVZhbHVlLmFwcGx5KHVuZGVmaW5lZCwgcmVwbGFjZXJBcmdzKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVwbGFjZW1lbnQgPSBnZXRTdWJzdGl0dXRpb24obWF0Y2hlZCwgUywgcG9zaXRpb24sIGNhcHR1cmVzLCBuYW1lZENhcHR1cmVzLCByZXBsYWNlVmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwb3NpdGlvbiA+PSBuZXh0U291cmNlUG9zaXRpb24pIHtcbiAgICAgICAgICBhY2N1bXVsYXRlZFJlc3VsdCArPSBTLnNsaWNlKG5leHRTb3VyY2VQb3NpdGlvbiwgcG9zaXRpb24pICsgcmVwbGFjZW1lbnQ7XG4gICAgICAgICAgbmV4dFNvdXJjZVBvc2l0aW9uID0gcG9zaXRpb24gKyBtYXRjaGVkLmxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGFjY3VtdWxhdGVkUmVzdWx0ICsgUy5zbGljZShuZXh0U291cmNlUG9zaXRpb24pO1xuICAgIH1cbiAgXTtcblxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWdldHN1YnN0aXR1dGlvblxuICBmdW5jdGlvbiBnZXRTdWJzdGl0dXRpb24obWF0Y2hlZCwgc3RyLCBwb3NpdGlvbiwgY2FwdHVyZXMsIG5hbWVkQ2FwdHVyZXMsIHJlcGxhY2VtZW50KSB7XG4gICAgdmFyIHRhaWxQb3MgPSBwb3NpdGlvbiArIG1hdGNoZWQubGVuZ3RoO1xuICAgIHZhciBtID0gY2FwdHVyZXMubGVuZ3RoO1xuICAgIHZhciBzeW1ib2xzID0gU1VCU1RJVFVUSU9OX1NZTUJPTFNfTk9fTkFNRUQ7XG4gICAgaWYgKG5hbWVkQ2FwdHVyZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgbmFtZWRDYXB0dXJlcyA9IHRvT2JqZWN0KG5hbWVkQ2FwdHVyZXMpO1xuICAgICAgc3ltYm9scyA9IFNVQlNUSVRVVElPTl9TWU1CT0xTO1xuICAgIH1cbiAgICByZXR1cm4gJHJlcGxhY2UuY2FsbChyZXBsYWNlbWVudCwgc3ltYm9scywgZnVuY3Rpb24gKG1hdGNoLCBjaCkge1xuICAgICAgdmFyIGNhcHR1cmU7XG4gICAgICBzd2l0Y2ggKGNoLmNoYXJBdCgwKSkge1xuICAgICAgICBjYXNlICckJzogcmV0dXJuICckJztcbiAgICAgICAgY2FzZSAnJic6IHJldHVybiBtYXRjaGVkO1xuICAgICAgICBjYXNlICdgJzogcmV0dXJuIHN0ci5zbGljZSgwLCBwb3NpdGlvbik7XG4gICAgICAgIGNhc2UgXCInXCI6IHJldHVybiBzdHIuc2xpY2UodGFpbFBvcyk7XG4gICAgICAgIGNhc2UgJzwnOlxuICAgICAgICAgIGNhcHR1cmUgPSBuYW1lZENhcHR1cmVzW2NoLnNsaWNlKDEsIC0xKV07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6IC8vIFxcZFxcZD9cbiAgICAgICAgICB2YXIgbiA9ICtjaDtcbiAgICAgICAgICBpZiAobiA9PT0gMCkgcmV0dXJuIG1hdGNoO1xuICAgICAgICAgIGlmIChuID4gbSkge1xuICAgICAgICAgICAgdmFyIGYgPSBmbG9vcihuIC8gMTApO1xuICAgICAgICAgICAgaWYgKGYgPT09IDApIHJldHVybiBtYXRjaDtcbiAgICAgICAgICAgIGlmIChmIDw9IG0pIHJldHVybiBjYXB0dXJlc1tmIC0gMV0gPT09IHVuZGVmaW5lZCA/IGNoLmNoYXJBdCgxKSA6IGNhcHR1cmVzW2YgLSAxXSArIGNoLmNoYXJBdCgxKTtcbiAgICAgICAgICAgIHJldHVybiBtYXRjaDtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FwdHVyZSA9IGNhcHR1cmVzW24gLSAxXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjYXB0dXJlID09PSB1bmRlZmluZWQgPyAnJyA6IGNhcHR1cmU7XG4gICAgfSk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBzYW1lVmFsdWUgPSByZXF1aXJlKCcuL19zYW1lLXZhbHVlJyk7XG52YXIgcmVnRXhwRXhlYyA9IHJlcXVpcmUoJy4vX3JlZ2V4cC1leGVjLWFic3RyYWN0Jyk7XG5cbi8vIEBAc2VhcmNoIGxvZ2ljXG5yZXF1aXJlKCcuL19maXgtcmUtd2tzJykoJ3NlYXJjaCcsIDEsIGZ1bmN0aW9uIChkZWZpbmVkLCBTRUFSQ0gsICRzZWFyY2gsIG1heWJlQ2FsbE5hdGl2ZSkge1xuICByZXR1cm4gW1xuICAgIC8vIGBTdHJpbmcucHJvdG90eXBlLnNlYXJjaGAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5zZWFyY2hcbiAgICBmdW5jdGlvbiBzZWFyY2gocmVnZXhwKSB7XG4gICAgICB2YXIgTyA9IGRlZmluZWQodGhpcyk7XG4gICAgICB2YXIgZm4gPSByZWdleHAgPT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogcmVnZXhwW1NFQVJDSF07XG4gICAgICByZXR1cm4gZm4gIT09IHVuZGVmaW5lZCA/IGZuLmNhbGwocmVnZXhwLCBPKSA6IG5ldyBSZWdFeHAocmVnZXhwKVtTRUFSQ0hdKFN0cmluZyhPKSk7XG4gICAgfSxcbiAgICAvLyBgUmVnRXhwLnByb3RvdHlwZVtAQHNlYXJjaF1gIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXJlZ2V4cC5wcm90b3R5cGUtQEBzZWFyY2hcbiAgICBmdW5jdGlvbiAocmVnZXhwKSB7XG4gICAgICB2YXIgcmVzID0gbWF5YmVDYWxsTmF0aXZlKCRzZWFyY2gsIHJlZ2V4cCwgdGhpcyk7XG4gICAgICBpZiAocmVzLmRvbmUpIHJldHVybiByZXMudmFsdWU7XG4gICAgICB2YXIgcnggPSBhbk9iamVjdChyZWdleHApO1xuICAgICAgdmFyIFMgPSBTdHJpbmcodGhpcyk7XG4gICAgICB2YXIgcHJldmlvdXNMYXN0SW5kZXggPSByeC5sYXN0SW5kZXg7XG4gICAgICBpZiAoIXNhbWVWYWx1ZShwcmV2aW91c0xhc3RJbmRleCwgMCkpIHJ4Lmxhc3RJbmRleCA9IDA7XG4gICAgICB2YXIgcmVzdWx0ID0gcmVnRXhwRXhlYyhyeCwgUyk7XG4gICAgICBpZiAoIXNhbWVWYWx1ZShyeC5sYXN0SW5kZXgsIHByZXZpb3VzTGFzdEluZGV4KSkgcngubGFzdEluZGV4ID0gcHJldmlvdXNMYXN0SW5kZXg7XG4gICAgICByZXR1cm4gcmVzdWx0ID09PSBudWxsID8gLTEgOiByZXN1bHQuaW5kZXg7XG4gICAgfVxuICBdO1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBpc1JlZ0V4cCA9IHJlcXVpcmUoJy4vX2lzLXJlZ2V4cCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgc3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi9fc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xudmFyIGFkdmFuY2VTdHJpbmdJbmRleCA9IHJlcXVpcmUoJy4vX2FkdmFuY2Utc3RyaW5nLWluZGV4Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBjYWxsUmVnRXhwRXhlYyA9IHJlcXVpcmUoJy4vX3JlZ2V4cC1leGVjLWFic3RyYWN0Jyk7XG52YXIgcmVnZXhwRXhlYyA9IHJlcXVpcmUoJy4vX3JlZ2V4cC1leGVjJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyICRtaW4gPSBNYXRoLm1pbjtcbnZhciAkcHVzaCA9IFtdLnB1c2g7XG52YXIgJFNQTElUID0gJ3NwbGl0JztcbnZhciBMRU5HVEggPSAnbGVuZ3RoJztcbnZhciBMQVNUX0lOREVYID0gJ2xhc3RJbmRleCc7XG52YXIgTUFYX1VJTlQzMiA9IDB4ZmZmZmZmZmY7XG5cbi8vIGJhYmVsLW1pbmlmeSB0cmFuc3BpbGVzIFJlZ0V4cCgneCcsICd5JykgLT4gL3gveSBhbmQgaXQgY2F1c2VzIFN5bnRheEVycm9yXG52YXIgU1VQUE9SVFNfWSA9ICFmYWlscyhmdW5jdGlvbiAoKSB7IFJlZ0V4cChNQVhfVUlOVDMyLCAneScpOyB9KTtcblxuLy8gQEBzcGxpdCBsb2dpY1xucmVxdWlyZSgnLi9fZml4LXJlLXdrcycpKCdzcGxpdCcsIDIsIGZ1bmN0aW9uIChkZWZpbmVkLCBTUExJVCwgJHNwbGl0LCBtYXliZUNhbGxOYXRpdmUpIHtcbiAgdmFyIGludGVybmFsU3BsaXQ7XG4gIGlmIChcbiAgICAnYWJiYydbJFNQTElUXSgvKGIpKi8pWzFdID09ICdjJyB8fFxuICAgICd0ZXN0J1skU1BMSVRdKC8oPzopLywgLTEpW0xFTkdUSF0gIT0gNCB8fFxuICAgICdhYidbJFNQTElUXSgvKD86YWIpKi8pW0xFTkdUSF0gIT0gMiB8fFxuICAgICcuJ1skU1BMSVRdKC8oLj8pKC4/KS8pW0xFTkdUSF0gIT0gNCB8fFxuICAgICcuJ1skU1BMSVRdKC8oKSgpLylbTEVOR1RIXSA+IDEgfHxcbiAgICAnJ1skU1BMSVRdKC8uPy8pW0xFTkdUSF1cbiAgKSB7XG4gICAgLy8gYmFzZWQgb24gZXM1LXNoaW0gaW1wbGVtZW50YXRpb24sIG5lZWQgdG8gcmV3b3JrIGl0XG4gICAgaW50ZXJuYWxTcGxpdCA9IGZ1bmN0aW9uIChzZXBhcmF0b3IsIGxpbWl0KSB7XG4gICAgICB2YXIgc3RyaW5nID0gU3RyaW5nKHRoaXMpO1xuICAgICAgaWYgKHNlcGFyYXRvciA9PT0gdW5kZWZpbmVkICYmIGxpbWl0ID09PSAwKSByZXR1cm4gW107XG4gICAgICAvLyBJZiBgc2VwYXJhdG9yYCBpcyBub3QgYSByZWdleCwgdXNlIG5hdGl2ZSBzcGxpdFxuICAgICAgaWYgKCFpc1JlZ0V4cChzZXBhcmF0b3IpKSByZXR1cm4gJHNwbGl0LmNhbGwoc3RyaW5nLCBzZXBhcmF0b3IsIGxpbWl0KTtcbiAgICAgIHZhciBvdXRwdXQgPSBbXTtcbiAgICAgIHZhciBmbGFncyA9IChzZXBhcmF0b3IuaWdub3JlQ2FzZSA/ICdpJyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAoc2VwYXJhdG9yLm11bHRpbGluZSA/ICdtJyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAoc2VwYXJhdG9yLnVuaWNvZGUgPyAndScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHNlcGFyYXRvci5zdGlja3kgPyAneScgOiAnJyk7XG4gICAgICB2YXIgbGFzdExhc3RJbmRleCA9IDA7XG4gICAgICB2YXIgc3BsaXRMaW1pdCA9IGxpbWl0ID09PSB1bmRlZmluZWQgPyBNQVhfVUlOVDMyIDogbGltaXQgPj4+IDA7XG4gICAgICAvLyBNYWtlIGBnbG9iYWxgIGFuZCBhdm9pZCBgbGFzdEluZGV4YCBpc3N1ZXMgYnkgd29ya2luZyB3aXRoIGEgY29weVxuICAgICAgdmFyIHNlcGFyYXRvckNvcHkgPSBuZXcgUmVnRXhwKHNlcGFyYXRvci5zb3VyY2UsIGZsYWdzICsgJ2cnKTtcbiAgICAgIHZhciBtYXRjaCwgbGFzdEluZGV4LCBsYXN0TGVuZ3RoO1xuICAgICAgd2hpbGUgKG1hdGNoID0gcmVnZXhwRXhlYy5jYWxsKHNlcGFyYXRvckNvcHksIHN0cmluZykpIHtcbiAgICAgICAgbGFzdEluZGV4ID0gc2VwYXJhdG9yQ29weVtMQVNUX0lOREVYXTtcbiAgICAgICAgaWYgKGxhc3RJbmRleCA+IGxhc3RMYXN0SW5kZXgpIHtcbiAgICAgICAgICBvdXRwdXQucHVzaChzdHJpbmcuc2xpY2UobGFzdExhc3RJbmRleCwgbWF0Y2guaW5kZXgpKTtcbiAgICAgICAgICBpZiAobWF0Y2hbTEVOR1RIXSA+IDEgJiYgbWF0Y2guaW5kZXggPCBzdHJpbmdbTEVOR1RIXSkgJHB1c2guYXBwbHkob3V0cHV0LCBtYXRjaC5zbGljZSgxKSk7XG4gICAgICAgICAgbGFzdExlbmd0aCA9IG1hdGNoWzBdW0xFTkdUSF07XG4gICAgICAgICAgbGFzdExhc3RJbmRleCA9IGxhc3RJbmRleDtcbiAgICAgICAgICBpZiAob3V0cHV0W0xFTkdUSF0gPj0gc3BsaXRMaW1pdCkgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNlcGFyYXRvckNvcHlbTEFTVF9JTkRFWF0gPT09IG1hdGNoLmluZGV4KSBzZXBhcmF0b3JDb3B5W0xBU1RfSU5ERVhdKys7IC8vIEF2b2lkIGFuIGluZmluaXRlIGxvb3BcbiAgICAgIH1cbiAgICAgIGlmIChsYXN0TGFzdEluZGV4ID09PSBzdHJpbmdbTEVOR1RIXSkge1xuICAgICAgICBpZiAobGFzdExlbmd0aCB8fCAhc2VwYXJhdG9yQ29weS50ZXN0KCcnKSkgb3V0cHV0LnB1c2goJycpO1xuICAgICAgfSBlbHNlIG91dHB1dC5wdXNoKHN0cmluZy5zbGljZShsYXN0TGFzdEluZGV4KSk7XG4gICAgICByZXR1cm4gb3V0cHV0W0xFTkdUSF0gPiBzcGxpdExpbWl0ID8gb3V0cHV0LnNsaWNlKDAsIHNwbGl0TGltaXQpIDogb3V0cHV0O1xuICAgIH07XG4gIC8vIENoYWtyYSwgVjhcbiAgfSBlbHNlIGlmICgnMCdbJFNQTElUXSh1bmRlZmluZWQsIDApW0xFTkdUSF0pIHtcbiAgICBpbnRlcm5hbFNwbGl0ID0gZnVuY3Rpb24gKHNlcGFyYXRvciwgbGltaXQpIHtcbiAgICAgIHJldHVybiBzZXBhcmF0b3IgPT09IHVuZGVmaW5lZCAmJiBsaW1pdCA9PT0gMCA/IFtdIDogJHNwbGl0LmNhbGwodGhpcywgc2VwYXJhdG9yLCBsaW1pdCk7XG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBpbnRlcm5hbFNwbGl0ID0gJHNwbGl0O1xuICB9XG5cbiAgcmV0dXJuIFtcbiAgICAvLyBgU3RyaW5nLnByb3RvdHlwZS5zcGxpdGAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5zcGxpdFxuICAgIGZ1bmN0aW9uIHNwbGl0KHNlcGFyYXRvciwgbGltaXQpIHtcbiAgICAgIHZhciBPID0gZGVmaW5lZCh0aGlzKTtcbiAgICAgIHZhciBzcGxpdHRlciA9IHNlcGFyYXRvciA9PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBzZXBhcmF0b3JbU1BMSVRdO1xuICAgICAgcmV0dXJuIHNwbGl0dGVyICE9PSB1bmRlZmluZWRcbiAgICAgICAgPyBzcGxpdHRlci5jYWxsKHNlcGFyYXRvciwgTywgbGltaXQpXG4gICAgICAgIDogaW50ZXJuYWxTcGxpdC5jYWxsKFN0cmluZyhPKSwgc2VwYXJhdG9yLCBsaW1pdCk7XG4gICAgfSxcbiAgICAvLyBgUmVnRXhwLnByb3RvdHlwZVtAQHNwbGl0XWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtcmVnZXhwLnByb3RvdHlwZS1AQHNwbGl0XG4gICAgLy9cbiAgICAvLyBOT1RFOiBUaGlzIGNhbm5vdCBiZSBwcm9wZXJseSBwb2x5ZmlsbGVkIGluIGVuZ2luZXMgdGhhdCBkb24ndCBzdXBwb3J0XG4gICAgLy8gdGhlICd5JyBmbGFnLlxuICAgIGZ1bmN0aW9uIChyZWdleHAsIGxpbWl0KSB7XG4gICAgICB2YXIgcmVzID0gbWF5YmVDYWxsTmF0aXZlKGludGVybmFsU3BsaXQsIHJlZ2V4cCwgdGhpcywgbGltaXQsIGludGVybmFsU3BsaXQgIT09ICRzcGxpdCk7XG4gICAgICBpZiAocmVzLmRvbmUpIHJldHVybiByZXMudmFsdWU7XG5cbiAgICAgIHZhciByeCA9IGFuT2JqZWN0KHJlZ2V4cCk7XG4gICAgICB2YXIgUyA9IFN0cmluZyh0aGlzKTtcbiAgICAgIHZhciBDID0gc3BlY2llc0NvbnN0cnVjdG9yKHJ4LCBSZWdFeHApO1xuXG4gICAgICB2YXIgdW5pY29kZU1hdGNoaW5nID0gcngudW5pY29kZTtcbiAgICAgIHZhciBmbGFncyA9IChyeC5pZ25vcmVDYXNlID8gJ2knIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChyeC5tdWx0aWxpbmUgPyAnbScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHJ4LnVuaWNvZGUgPyAndScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKFNVUFBPUlRTX1kgPyAneScgOiAnZycpO1xuXG4gICAgICAvLyBeKD8gKyByeCArICkgaXMgbmVlZGVkLCBpbiBjb21iaW5hdGlvbiB3aXRoIHNvbWUgUyBzbGljaW5nLCB0b1xuICAgICAgLy8gc2ltdWxhdGUgdGhlICd5JyBmbGFnLlxuICAgICAgdmFyIHNwbGl0dGVyID0gbmV3IEMoU1VQUE9SVFNfWSA/IHJ4IDogJ14oPzonICsgcnguc291cmNlICsgJyknLCBmbGFncyk7XG4gICAgICB2YXIgbGltID0gbGltaXQgPT09IHVuZGVmaW5lZCA/IE1BWF9VSU5UMzIgOiBsaW1pdCA+Pj4gMDtcbiAgICAgIGlmIChsaW0gPT09IDApIHJldHVybiBbXTtcbiAgICAgIGlmIChTLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGNhbGxSZWdFeHBFeGVjKHNwbGl0dGVyLCBTKSA9PT0gbnVsbCA/IFtTXSA6IFtdO1xuICAgICAgdmFyIHAgPSAwO1xuICAgICAgdmFyIHEgPSAwO1xuICAgICAgdmFyIEEgPSBbXTtcbiAgICAgIHdoaWxlIChxIDwgUy5sZW5ndGgpIHtcbiAgICAgICAgc3BsaXR0ZXIubGFzdEluZGV4ID0gU1VQUE9SVFNfWSA/IHEgOiAwO1xuICAgICAgICB2YXIgeiA9IGNhbGxSZWdFeHBFeGVjKHNwbGl0dGVyLCBTVVBQT1JUU19ZID8gUyA6IFMuc2xpY2UocSkpO1xuICAgICAgICB2YXIgZTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHogPT09IG51bGwgfHxcbiAgICAgICAgICAoZSA9ICRtaW4odG9MZW5ndGgoc3BsaXR0ZXIubGFzdEluZGV4ICsgKFNVUFBPUlRTX1kgPyAwIDogcSkpLCBTLmxlbmd0aCkpID09PSBwXG4gICAgICAgICkge1xuICAgICAgICAgIHEgPSBhZHZhbmNlU3RyaW5nSW5kZXgoUywgcSwgdW5pY29kZU1hdGNoaW5nKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBBLnB1c2goUy5zbGljZShwLCBxKSk7XG4gICAgICAgICAgaWYgKEEubGVuZ3RoID09PSBsaW0pIHJldHVybiBBO1xuICAgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDw9IHoubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICAgICAgICBBLnB1c2goeltpXSk7XG4gICAgICAgICAgICBpZiAoQS5sZW5ndGggPT09IGxpbSkgcmV0dXJuIEE7XG4gICAgICAgICAgfVxuICAgICAgICAgIHEgPSBwID0gZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgQS5wdXNoKFMuc2xpY2UocCkpO1xuICAgICAgcmV0dXJuIEE7XG4gICAgfVxuICBdO1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuL2VzNi5yZWdleHAuZmxhZ3MnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyICRmbGFncyA9IHJlcXVpcmUoJy4vX2ZsYWdzJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpO1xudmFyIFRPX1NUUklORyA9ICd0b1N0cmluZyc7XG52YXIgJHRvU3RyaW5nID0gLy4vW1RPX1NUUklOR107XG5cbnZhciBkZWZpbmUgPSBmdW5jdGlvbiAoZm4pIHtcbiAgcmVxdWlyZSgnLi9fcmVkZWZpbmUnKShSZWdFeHAucHJvdG90eXBlLCBUT19TVFJJTkcsIGZuLCB0cnVlKTtcbn07XG5cbi8vIDIxLjIuNS4xNCBSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nKClcbmlmIChyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHsgcmV0dXJuICR0b1N0cmluZy5jYWxsKHsgc291cmNlOiAnYScsIGZsYWdzOiAnYicgfSkgIT0gJy9hL2InOyB9KSkge1xuICBkZWZpbmUoZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgdmFyIFIgPSBhbk9iamVjdCh0aGlzKTtcbiAgICByZXR1cm4gJy8nLmNvbmNhdChSLnNvdXJjZSwgJy8nLFxuICAgICAgJ2ZsYWdzJyBpbiBSID8gUi5mbGFncyA6ICFERVNDUklQVE9SUyAmJiBSIGluc3RhbmNlb2YgUmVnRXhwID8gJGZsYWdzLmNhbGwoUikgOiB1bmRlZmluZWQpO1xuICB9KTtcbi8vIEZGNDQtIFJlZ0V4cCN0b1N0cmluZyBoYXMgYSB3cm9uZyBuYW1lXG59IGVsc2UgaWYgKCR0b1N0cmluZy5uYW1lICE9IFRPX1NUUklORykge1xuICBkZWZpbmUoZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuICR0b1N0cmluZy5jYWxsKHRoaXMpO1xuICB9KTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcbnZhciBzdHJvbmcgPSByZXF1aXJlKCcuL19jb2xsZWN0aW9uLXN0cm9uZycpO1xudmFyIHZhbGlkYXRlID0gcmVxdWlyZSgnLi9fdmFsaWRhdGUtY29sbGVjdGlvbicpO1xudmFyIFNFVCA9ICdTZXQnO1xuXG4vLyAyMy4yIFNldCBPYmplY3RzXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24nKShTRVQsIGZ1bmN0aW9uIChnZXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIFNldCgpIHsgcmV0dXJuIGdldCh0aGlzLCBhcmd1bWVudHMubGVuZ3RoID4gMCA/IGFyZ3VtZW50c1swXSA6IHVuZGVmaW5lZCk7IH07XG59LCB7XG4gIC8vIDIzLjIuMy4xIFNldC5wcm90b3R5cGUuYWRkKHZhbHVlKVxuICBhZGQ6IGZ1bmN0aW9uIGFkZCh2YWx1ZSkge1xuICAgIHJldHVybiBzdHJvbmcuZGVmKHZhbGlkYXRlKHRoaXMsIFNFVCksIHZhbHVlID0gdmFsdWUgPT09IDAgPyAwIDogdmFsdWUsIHZhbHVlKTtcbiAgfVxufSwgc3Ryb25nKTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjIgU3RyaW5nLnByb3RvdHlwZS5hbmNob3IobmFtZSlcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ2FuY2hvcicsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBhbmNob3IobmFtZSkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdhJywgJ25hbWUnLCBuYW1lKTtcbiAgfTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuMyBTdHJpbmcucHJvdG90eXBlLmJpZygpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdiaWcnLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gYmlnKCkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdiaWcnLCAnJywgJycpO1xuICB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy40IFN0cmluZy5wcm90b3R5cGUuYmxpbmsoKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnYmxpbmsnLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gYmxpbmsoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ2JsaW5rJywgJycsICcnKTtcbiAgfTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuNSBTdHJpbmcucHJvdG90eXBlLmJvbGQoKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnYm9sZCcsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBib2xkKCkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdiJywgJycsICcnKTtcbiAgfTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkYXQgPSByZXF1aXJlKCcuL19zdHJpbmctYXQnKShmYWxzZSk7XG4kZXhwb3J0KCRleHBvcnQuUCwgJ1N0cmluZycsIHtcbiAgLy8gMjEuMS4zLjMgU3RyaW5nLnByb3RvdHlwZS5jb2RlUG9pbnRBdChwb3MpXG4gIGNvZGVQb2ludEF0OiBmdW5jdGlvbiBjb2RlUG9pbnRBdChwb3MpIHtcbiAgICByZXR1cm4gJGF0KHRoaXMsIHBvcyk7XG4gIH1cbn0pO1xuIiwiLy8gMjEuMS4zLjYgU3RyaW5nLnByb3RvdHlwZS5lbmRzV2l0aChzZWFyY2hTdHJpbmcgWywgZW5kUG9zaXRpb25dKVxuJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGNvbnRleHQgPSByZXF1aXJlKCcuL19zdHJpbmctY29udGV4dCcpO1xudmFyIEVORFNfV0lUSCA9ICdlbmRzV2l0aCc7XG52YXIgJGVuZHNXaXRoID0gJydbRU5EU19XSVRIXTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiByZXF1aXJlKCcuL19mYWlscy1pcy1yZWdleHAnKShFTkRTX1dJVEgpLCAnU3RyaW5nJywge1xuICBlbmRzV2l0aDogZnVuY3Rpb24gZW5kc1dpdGgoc2VhcmNoU3RyaW5nIC8qICwgZW5kUG9zaXRpb24gPSBAbGVuZ3RoICovKSB7XG4gICAgdmFyIHRoYXQgPSBjb250ZXh0KHRoaXMsIHNlYXJjaFN0cmluZywgRU5EU19XSVRIKTtcbiAgICB2YXIgZW5kUG9zaXRpb24gPSBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgbGVuID0gdG9MZW5ndGgodGhhdC5sZW5ndGgpO1xuICAgIHZhciBlbmQgPSBlbmRQb3NpdGlvbiA9PT0gdW5kZWZpbmVkID8gbGVuIDogTWF0aC5taW4odG9MZW5ndGgoZW5kUG9zaXRpb24pLCBsZW4pO1xuICAgIHZhciBzZWFyY2ggPSBTdHJpbmcoc2VhcmNoU3RyaW5nKTtcbiAgICByZXR1cm4gJGVuZHNXaXRoXG4gICAgICA/ICRlbmRzV2l0aC5jYWxsKHRoYXQsIHNlYXJjaCwgZW5kKVxuICAgICAgOiB0aGF0LnNsaWNlKGVuZCAtIHNlYXJjaC5sZW5ndGgsIGVuZCkgPT09IHNlYXJjaDtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy42IFN0cmluZy5wcm90b3R5cGUuZml4ZWQoKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnZml4ZWQnLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gZml4ZWQoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ3R0JywgJycsICcnKTtcbiAgfTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuNyBTdHJpbmcucHJvdG90eXBlLmZvbnRjb2xvcihjb2xvcilcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ2ZvbnRjb2xvcicsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBmb250Y29sb3IoY29sb3IpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnZm9udCcsICdjb2xvcicsIGNvbG9yKTtcbiAgfTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuOCBTdHJpbmcucHJvdG90eXBlLmZvbnRzaXplKHNpemUpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdmb250c2l6ZScsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBmb250c2l6ZShzaXplKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ2ZvbnQnLCAnc2l6ZScsIHNpemUpO1xuICB9O1xufSk7XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4vX3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgZnJvbUNoYXJDb2RlID0gU3RyaW5nLmZyb21DaGFyQ29kZTtcbnZhciAkZnJvbUNvZGVQb2ludCA9IFN0cmluZy5mcm9tQ29kZVBvaW50O1xuXG4vLyBsZW5ndGggc2hvdWxkIGJlIDEsIG9sZCBGRiBwcm9ibGVtXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICghISRmcm9tQ29kZVBvaW50ICYmICRmcm9tQ29kZVBvaW50Lmxlbmd0aCAhPSAxKSwgJ1N0cmluZycsIHtcbiAgLy8gMjEuMS4yLjIgU3RyaW5nLmZyb21Db2RlUG9pbnQoLi4uY29kZVBvaW50cylcbiAgZnJvbUNvZGVQb2ludDogZnVuY3Rpb24gZnJvbUNvZGVQb2ludCh4KSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICB2YXIgcmVzID0gW107XG4gICAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIgY29kZTtcbiAgICB3aGlsZSAoYUxlbiA+IGkpIHtcbiAgICAgIGNvZGUgPSArYXJndW1lbnRzW2krK107XG4gICAgICBpZiAodG9BYnNvbHV0ZUluZGV4KGNvZGUsIDB4MTBmZmZmKSAhPT0gY29kZSkgdGhyb3cgUmFuZ2VFcnJvcihjb2RlICsgJyBpcyBub3QgYSB2YWxpZCBjb2RlIHBvaW50Jyk7XG4gICAgICByZXMucHVzaChjb2RlIDwgMHgxMDAwMFxuICAgICAgICA/IGZyb21DaGFyQ29kZShjb2RlKVxuICAgICAgICA6IGZyb21DaGFyQ29kZSgoKGNvZGUgLT0gMHgxMDAwMCkgPj4gMTApICsgMHhkODAwLCBjb2RlICUgMHg0MDAgKyAweGRjMDApXG4gICAgICApO1xuICAgIH0gcmV0dXJuIHJlcy5qb2luKCcnKTtcbiAgfVxufSk7XG4iLCIvLyAyMS4xLjMuNyBTdHJpbmcucHJvdG90eXBlLmluY2x1ZGVzKHNlYXJjaFN0cmluZywgcG9zaXRpb24gPSAwKVxuJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBjb250ZXh0ID0gcmVxdWlyZSgnLi9fc3RyaW5nLWNvbnRleHQnKTtcbnZhciBJTkNMVURFUyA9ICdpbmNsdWRlcyc7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMtaXMtcmVnZXhwJykoSU5DTFVERVMpLCAnU3RyaW5nJywge1xuICBpbmNsdWRlczogZnVuY3Rpb24gaW5jbHVkZXMoc2VhcmNoU3RyaW5nIC8qICwgcG9zaXRpb24gPSAwICovKSB7XG4gICAgcmV0dXJuICEhfmNvbnRleHQodGhpcywgc2VhcmNoU3RyaW5nLCBJTkNMVURFUylcbiAgICAgIC5pbmRleE9mKHNlYXJjaFN0cmluZywgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjkgU3RyaW5nLnByb3RvdHlwZS5pdGFsaWNzKClcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ2l0YWxpY3MnLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gaXRhbGljcygpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnaScsICcnLCAnJyk7XG4gIH07XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkYXQgPSByZXF1aXJlKCcuL19zdHJpbmctYXQnKSh0cnVlKTtcblxuLy8gMjEuMS4zLjI3IFN0cmluZy5wcm90b3R5cGVbQEBpdGVyYXRvcl0oKVxucmVxdWlyZSgnLi9faXRlci1kZWZpbmUnKShTdHJpbmcsICdTdHJpbmcnLCBmdW5jdGlvbiAoaXRlcmF0ZWQpIHtcbiAgdGhpcy5fdCA9IFN0cmluZyhpdGVyYXRlZCk7IC8vIHRhcmdldFxuICB0aGlzLl9pID0gMDsgICAgICAgICAgICAgICAgLy8gbmV4dCBpbmRleFxuLy8gMjEuMS41LjIuMSAlU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUlLm5leHQoKVxufSwgZnVuY3Rpb24gKCkge1xuICB2YXIgTyA9IHRoaXMuX3Q7XG4gIHZhciBpbmRleCA9IHRoaXMuX2k7XG4gIHZhciBwb2ludDtcbiAgaWYgKGluZGV4ID49IE8ubGVuZ3RoKSByZXR1cm4geyB2YWx1ZTogdW5kZWZpbmVkLCBkb25lOiB0cnVlIH07XG4gIHBvaW50ID0gJGF0KE8sIGluZGV4KTtcbiAgdGhpcy5faSArPSBwb2ludC5sZW5ndGg7XG4gIHJldHVybiB7IHZhbHVlOiBwb2ludCwgZG9uZTogZmFsc2UgfTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuMTAgU3RyaW5nLnByb3RvdHlwZS5saW5rKHVybClcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ2xpbmsnLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gbGluayh1cmwpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnYScsICdocmVmJywgdXJsKTtcbiAgfTtcbn0pO1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdTdHJpbmcnLCB7XG4gIC8vIDIxLjEuMi40IFN0cmluZy5yYXcoY2FsbFNpdGUsIC4uLnN1YnN0aXR1dGlvbnMpXG4gIHJhdzogZnVuY3Rpb24gcmF3KGNhbGxTaXRlKSB7XG4gICAgdmFyIHRwbCA9IHRvSU9iamVjdChjYWxsU2l0ZS5yYXcpO1xuICAgIHZhciBsZW4gPSB0b0xlbmd0aCh0cGwubGVuZ3RoKTtcbiAgICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIHJlcyA9IFtdO1xuICAgIHZhciBpID0gMDtcbiAgICB3aGlsZSAobGVuID4gaSkge1xuICAgICAgcmVzLnB1c2goU3RyaW5nKHRwbFtpKytdKSk7XG4gICAgICBpZiAoaSA8IGFMZW4pIHJlcy5wdXNoKFN0cmluZyhhcmd1bWVudHNbaV0pKTtcbiAgICB9IHJldHVybiByZXMuam9pbignJyk7XG4gIH1cbn0pO1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdTdHJpbmcnLCB7XG4gIC8vIDIxLjEuMy4xMyBTdHJpbmcucHJvdG90eXBlLnJlcGVhdChjb3VudClcbiAgcmVwZWF0OiByZXF1aXJlKCcuL19zdHJpbmctcmVwZWF0Jylcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuMTEgU3RyaW5nLnByb3RvdHlwZS5zbWFsbCgpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdzbWFsbCcsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBzbWFsbCgpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnc21hbGwnLCAnJywgJycpO1xuICB9O1xufSk7XG4iLCIvLyAyMS4xLjMuMTggU3RyaW5nLnByb3RvdHlwZS5zdGFydHNXaXRoKHNlYXJjaFN0cmluZyBbLCBwb3NpdGlvbiBdKVxuJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGNvbnRleHQgPSByZXF1aXJlKCcuL19zdHJpbmctY29udGV4dCcpO1xudmFyIFNUQVJUU19XSVRIID0gJ3N0YXJ0c1dpdGgnO1xudmFyICRzdGFydHNXaXRoID0gJydbU1RBUlRTX1dJVEhdO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzLWlzLXJlZ2V4cCcpKFNUQVJUU19XSVRIKSwgJ1N0cmluZycsIHtcbiAgc3RhcnRzV2l0aDogZnVuY3Rpb24gc3RhcnRzV2l0aChzZWFyY2hTdHJpbmcgLyogLCBwb3NpdGlvbiA9IDAgKi8pIHtcbiAgICB2YXIgdGhhdCA9IGNvbnRleHQodGhpcywgc2VhcmNoU3RyaW5nLCBTVEFSVFNfV0lUSCk7XG4gICAgdmFyIGluZGV4ID0gdG9MZW5ndGgoTWF0aC5taW4oYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQsIHRoYXQubGVuZ3RoKSk7XG4gICAgdmFyIHNlYXJjaCA9IFN0cmluZyhzZWFyY2hTdHJpbmcpO1xuICAgIHJldHVybiAkc3RhcnRzV2l0aFxuICAgICAgPyAkc3RhcnRzV2l0aC5jYWxsKHRoYXQsIHNlYXJjaCwgaW5kZXgpXG4gICAgICA6IHRoYXQuc2xpY2UoaW5kZXgsIGluZGV4ICsgc2VhcmNoLmxlbmd0aCkgPT09IHNlYXJjaDtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy4xMiBTdHJpbmcucHJvdG90eXBlLnN0cmlrZSgpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdzdHJpa2UnLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gc3RyaWtlKCkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdzdHJpa2UnLCAnJywgJycpO1xuICB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy4xMyBTdHJpbmcucHJvdG90eXBlLnN1YigpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdzdWInLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gc3ViKCkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdzdWInLCAnJywgJycpO1xuICB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy4xNCBTdHJpbmcucHJvdG90eXBlLnN1cCgpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdzdXAnLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gc3VwKCkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdzdXAnLCAnJywgJycpO1xuICB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyAyMS4xLjMuMjUgU3RyaW5nLnByb3RvdHlwZS50cmltKClcbnJlcXVpcmUoJy4vX3N0cmluZy10cmltJykoJ3RyaW0nLCBmdW5jdGlvbiAoJHRyaW0pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHRyaW0oKSB7XG4gICAgcmV0dXJuICR0cmltKHRoaXMsIDMpO1xuICB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBFQ01BU2NyaXB0IDYgc3ltYm9scyBzaGltXG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG52YXIgTUVUQSA9IHJlcXVpcmUoJy4vX21ldGEnKS5LRVk7XG52YXIgJGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuL19zaGFyZWQnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi9fdWlkJyk7XG52YXIgd2tzID0gcmVxdWlyZSgnLi9fd2tzJyk7XG52YXIgd2tzRXh0ID0gcmVxdWlyZSgnLi9fd2tzLWV4dCcpO1xudmFyIHdrc0RlZmluZSA9IHJlcXVpcmUoJy4vX3drcy1kZWZpbmUnKTtcbnZhciBlbnVtS2V5cyA9IHJlcXVpcmUoJy4vX2VudW0ta2V5cycpO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuL19pcy1hcnJheScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcbnZhciBjcmVhdGVEZXNjID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xudmFyIF9jcmVhdGUgPSByZXF1aXJlKCcuL19vYmplY3QtY3JlYXRlJyk7XG52YXIgZ09QTkV4dCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BuLWV4dCcpO1xudmFyICRHT1BEID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKTtcbnZhciAkRFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciAka2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG52YXIgZ09QRCA9ICRHT1BELmY7XG52YXIgZFAgPSAkRFAuZjtcbnZhciBnT1BOID0gZ09QTkV4dC5mO1xudmFyICRTeW1ib2wgPSBnbG9iYWwuU3ltYm9sO1xudmFyICRKU09OID0gZ2xvYmFsLkpTT047XG52YXIgX3N0cmluZ2lmeSA9ICRKU09OICYmICRKU09OLnN0cmluZ2lmeTtcbnZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcbnZhciBISURERU4gPSB3a3MoJ19oaWRkZW4nKTtcbnZhciBUT19QUklNSVRJVkUgPSB3a3MoJ3RvUHJpbWl0aXZlJyk7XG52YXIgaXNFbnVtID0ge30ucHJvcGVydHlJc0VudW1lcmFibGU7XG52YXIgU3ltYm9sUmVnaXN0cnkgPSBzaGFyZWQoJ3N5bWJvbC1yZWdpc3RyeScpO1xudmFyIEFsbFN5bWJvbHMgPSBzaGFyZWQoJ3N5bWJvbHMnKTtcbnZhciBPUFN5bWJvbHMgPSBzaGFyZWQoJ29wLXN5bWJvbHMnKTtcbnZhciBPYmplY3RQcm90byA9IE9iamVjdFtQUk9UT1RZUEVdO1xudmFyIFVTRV9OQVRJVkUgPSB0eXBlb2YgJFN5bWJvbCA9PSAnZnVuY3Rpb24nO1xudmFyIFFPYmplY3QgPSBnbG9iYWwuUU9iamVjdDtcbi8vIERvbid0IHVzZSBzZXR0ZXJzIGluIFF0IFNjcmlwdCwgaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzE3M1xudmFyIHNldHRlciA9ICFRT2JqZWN0IHx8ICFRT2JqZWN0W1BST1RPVFlQRV0gfHwgIVFPYmplY3RbUFJPVE9UWVBFXS5maW5kQ2hpbGQ7XG5cbi8vIGZhbGxiYWNrIGZvciBvbGQgQW5kcm9pZCwgaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTY4N1xudmFyIHNldFN5bWJvbERlc2MgPSBERVNDUklQVE9SUyAmJiAkZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gX2NyZWF0ZShkUCh7fSwgJ2EnLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBkUCh0aGlzLCAnYScsIHsgdmFsdWU6IDcgfSkuYTsgfVxuICB9KSkuYSAhPSA3O1xufSkgPyBmdW5jdGlvbiAoaXQsIGtleSwgRCkge1xuICB2YXIgcHJvdG9EZXNjID0gZ09QRChPYmplY3RQcm90bywga2V5KTtcbiAgaWYgKHByb3RvRGVzYykgZGVsZXRlIE9iamVjdFByb3RvW2tleV07XG4gIGRQKGl0LCBrZXksIEQpO1xuICBpZiAocHJvdG9EZXNjICYmIGl0ICE9PSBPYmplY3RQcm90bykgZFAoT2JqZWN0UHJvdG8sIGtleSwgcHJvdG9EZXNjKTtcbn0gOiBkUDtcblxudmFyIHdyYXAgPSBmdW5jdGlvbiAodGFnKSB7XG4gIHZhciBzeW0gPSBBbGxTeW1ib2xzW3RhZ10gPSBfY3JlYXRlKCRTeW1ib2xbUFJPVE9UWVBFXSk7XG4gIHN5bS5fayA9IHRhZztcbiAgcmV0dXJuIHN5bTtcbn07XG5cbnZhciBpc1N5bWJvbCA9IFVTRV9OQVRJVkUgJiYgdHlwZW9mICRTeW1ib2wuaXRlcmF0b3IgPT0gJ3N5bWJvbCcgPyBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PSAnc3ltYm9sJztcbn0gOiBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0IGluc3RhbmNlb2YgJFN5bWJvbDtcbn07XG5cbnZhciAkZGVmaW5lUHJvcGVydHkgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShpdCwga2V5LCBEKSB7XG4gIGlmIChpdCA9PT0gT2JqZWN0UHJvdG8pICRkZWZpbmVQcm9wZXJ0eShPUFN5bWJvbHMsIGtleSwgRCk7XG4gIGFuT2JqZWN0KGl0KTtcbiAga2V5ID0gdG9QcmltaXRpdmUoa2V5LCB0cnVlKTtcbiAgYW5PYmplY3QoRCk7XG4gIGlmIChoYXMoQWxsU3ltYm9scywga2V5KSkge1xuICAgIGlmICghRC5lbnVtZXJhYmxlKSB7XG4gICAgICBpZiAoIWhhcyhpdCwgSElEREVOKSkgZFAoaXQsIEhJRERFTiwgY3JlYXRlRGVzYygxLCB7fSkpO1xuICAgICAgaXRbSElEREVOXVtrZXldID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGhhcyhpdCwgSElEREVOKSAmJiBpdFtISURERU5dW2tleV0pIGl0W0hJRERFTl1ba2V5XSA9IGZhbHNlO1xuICAgICAgRCA9IF9jcmVhdGUoRCwgeyBlbnVtZXJhYmxlOiBjcmVhdGVEZXNjKDAsIGZhbHNlKSB9KTtcbiAgICB9IHJldHVybiBzZXRTeW1ib2xEZXNjKGl0LCBrZXksIEQpO1xuICB9IHJldHVybiBkUChpdCwga2V5LCBEKTtcbn07XG52YXIgJGRlZmluZVByb3BlcnRpZXMgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKGl0LCBQKSB7XG4gIGFuT2JqZWN0KGl0KTtcbiAgdmFyIGtleXMgPSBlbnVtS2V5cyhQID0gdG9JT2JqZWN0KFApKTtcbiAgdmFyIGkgPSAwO1xuICB2YXIgbCA9IGtleXMubGVuZ3RoO1xuICB2YXIga2V5O1xuICB3aGlsZSAobCA+IGkpICRkZWZpbmVQcm9wZXJ0eShpdCwga2V5ID0ga2V5c1tpKytdLCBQW2tleV0pO1xuICByZXR1cm4gaXQ7XG59O1xudmFyICRjcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUoaXQsIFApIHtcbiAgcmV0dXJuIFAgPT09IHVuZGVmaW5lZCA/IF9jcmVhdGUoaXQpIDogJGRlZmluZVByb3BlcnRpZXMoX2NyZWF0ZShpdCksIFApO1xufTtcbnZhciAkcHJvcGVydHlJc0VudW1lcmFibGUgPSBmdW5jdGlvbiBwcm9wZXJ0eUlzRW51bWVyYWJsZShrZXkpIHtcbiAgdmFyIEUgPSBpc0VudW0uY2FsbCh0aGlzLCBrZXkgPSB0b1ByaW1pdGl2ZShrZXksIHRydWUpKTtcbiAgaWYgKHRoaXMgPT09IE9iamVjdFByb3RvICYmIGhhcyhBbGxTeW1ib2xzLCBrZXkpICYmICFoYXMoT1BTeW1ib2xzLCBrZXkpKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiBFIHx8ICFoYXModGhpcywga2V5KSB8fCAhaGFzKEFsbFN5bWJvbHMsIGtleSkgfHwgaGFzKHRoaXMsIEhJRERFTikgJiYgdGhpc1tISURERU5dW2tleV0gPyBFIDogdHJ1ZTtcbn07XG52YXIgJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihpdCwga2V5KSB7XG4gIGl0ID0gdG9JT2JqZWN0KGl0KTtcbiAga2V5ID0gdG9QcmltaXRpdmUoa2V5LCB0cnVlKTtcbiAgaWYgKGl0ID09PSBPYmplY3RQcm90byAmJiBoYXMoQWxsU3ltYm9scywga2V5KSAmJiAhaGFzKE9QU3ltYm9scywga2V5KSkgcmV0dXJuO1xuICB2YXIgRCA9IGdPUEQoaXQsIGtleSk7XG4gIGlmIChEICYmIGhhcyhBbGxTeW1ib2xzLCBrZXkpICYmICEoaGFzKGl0LCBISURERU4pICYmIGl0W0hJRERFTl1ba2V5XSkpIEQuZW51bWVyYWJsZSA9IHRydWU7XG4gIHJldHVybiBEO1xufTtcbnZhciAkZ2V0T3duUHJvcGVydHlOYW1lcyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoaXQpIHtcbiAgdmFyIG5hbWVzID0gZ09QTih0b0lPYmplY3QoaXQpKTtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIgaSA9IDA7XG4gIHZhciBrZXk7XG4gIHdoaWxlIChuYW1lcy5sZW5ndGggPiBpKSB7XG4gICAgaWYgKCFoYXMoQWxsU3ltYm9scywga2V5ID0gbmFtZXNbaSsrXSkgJiYga2V5ICE9IEhJRERFTiAmJiBrZXkgIT0gTUVUQSkgcmVzdWx0LnB1c2goa2V5KTtcbiAgfSByZXR1cm4gcmVzdWx0O1xufTtcbnZhciAkZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlTeW1ib2xzKGl0KSB7XG4gIHZhciBJU19PUCA9IGl0ID09PSBPYmplY3RQcm90bztcbiAgdmFyIG5hbWVzID0gZ09QTihJU19PUCA/IE9QU3ltYm9scyA6IHRvSU9iamVjdChpdCkpO1xuICB2YXIgcmVzdWx0ID0gW107XG4gIHZhciBpID0gMDtcbiAgdmFyIGtleTtcbiAgd2hpbGUgKG5hbWVzLmxlbmd0aCA+IGkpIHtcbiAgICBpZiAoaGFzKEFsbFN5bWJvbHMsIGtleSA9IG5hbWVzW2krK10pICYmIChJU19PUCA/IGhhcyhPYmplY3RQcm90bywga2V5KSA6IHRydWUpKSByZXN1bHQucHVzaChBbGxTeW1ib2xzW2tleV0pO1xuICB9IHJldHVybiByZXN1bHQ7XG59O1xuXG4vLyAxOS40LjEuMSBTeW1ib2woW2Rlc2NyaXB0aW9uXSlcbmlmICghVVNFX05BVElWRSkge1xuICAkU3ltYm9sID0gZnVuY3Rpb24gU3ltYm9sKCkge1xuICAgIGlmICh0aGlzIGluc3RhbmNlb2YgJFN5bWJvbCkgdGhyb3cgVHlwZUVycm9yKCdTeW1ib2wgaXMgbm90IGEgY29uc3RydWN0b3IhJyk7XG4gICAgdmFyIHRhZyA9IHVpZChhcmd1bWVudHMubGVuZ3RoID4gMCA/IGFyZ3VtZW50c1swXSA6IHVuZGVmaW5lZCk7XG4gICAgdmFyICRzZXQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIGlmICh0aGlzID09PSBPYmplY3RQcm90bykgJHNldC5jYWxsKE9QU3ltYm9scywgdmFsdWUpO1xuICAgICAgaWYgKGhhcyh0aGlzLCBISURERU4pICYmIGhhcyh0aGlzW0hJRERFTl0sIHRhZykpIHRoaXNbSElEREVOXVt0YWddID0gZmFsc2U7XG4gICAgICBzZXRTeW1ib2xEZXNjKHRoaXMsIHRhZywgY3JlYXRlRGVzYygxLCB2YWx1ZSkpO1xuICAgIH07XG4gICAgaWYgKERFU0NSSVBUT1JTICYmIHNldHRlcikgc2V0U3ltYm9sRGVzYyhPYmplY3RQcm90bywgdGFnLCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgc2V0OiAkc2V0IH0pO1xuICAgIHJldHVybiB3cmFwKHRhZyk7XG4gIH07XG4gIHJlZGVmaW5lKCRTeW1ib2xbUFJPVE9UWVBFXSwgJ3RvU3RyaW5nJywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2s7XG4gIH0pO1xuXG4gICRHT1BELmYgPSAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuICAkRFAuZiA9ICRkZWZpbmVQcm9wZXJ0eTtcbiAgcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4nKS5mID0gZ09QTkV4dC5mID0gJGdldE93blByb3BlcnR5TmFtZXM7XG4gIHJlcXVpcmUoJy4vX29iamVjdC1waWUnKS5mID0gJHByb3BlcnR5SXNFbnVtZXJhYmxlO1xuICByZXF1aXJlKCcuL19vYmplY3QtZ29wcycpLmYgPSAkZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xuXG4gIGlmIChERVNDUklQVE9SUyAmJiAhcmVxdWlyZSgnLi9fbGlicmFyeScpKSB7XG4gICAgcmVkZWZpbmUoT2JqZWN0UHJvdG8sICdwcm9wZXJ0eUlzRW51bWVyYWJsZScsICRwcm9wZXJ0eUlzRW51bWVyYWJsZSwgdHJ1ZSk7XG4gIH1cblxuICB3a3NFeHQuZiA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgcmV0dXJuIHdyYXAod2tzKG5hbWUpKTtcbiAgfTtcbn1cblxuJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LlcgKyAkZXhwb3J0LkYgKiAhVVNFX05BVElWRSwgeyBTeW1ib2w6ICRTeW1ib2wgfSk7XG5cbmZvciAodmFyIGVzNlN5bWJvbHMgPSAoXG4gIC8vIDE5LjQuMi4yLCAxOS40LjIuMywgMTkuNC4yLjQsIDE5LjQuMi42LCAxOS40LjIuOCwgMTkuNC4yLjksIDE5LjQuMi4xMCwgMTkuNC4yLjExLCAxOS40LjIuMTIsIDE5LjQuMi4xMywgMTkuNC4yLjE0XG4gICdoYXNJbnN0YW5jZSxpc0NvbmNhdFNwcmVhZGFibGUsaXRlcmF0b3IsbWF0Y2gscmVwbGFjZSxzZWFyY2gsc3BlY2llcyxzcGxpdCx0b1ByaW1pdGl2ZSx0b1N0cmluZ1RhZyx1bnNjb3BhYmxlcydcbikuc3BsaXQoJywnKSwgaiA9IDA7IGVzNlN5bWJvbHMubGVuZ3RoID4gajspd2tzKGVzNlN5bWJvbHNbaisrXSk7XG5cbmZvciAodmFyIHdlbGxLbm93blN5bWJvbHMgPSAka2V5cyh3a3Muc3RvcmUpLCBrID0gMDsgd2VsbEtub3duU3ltYm9scy5sZW5ndGggPiBrOykgd2tzRGVmaW5lKHdlbGxLbm93blN5bWJvbHNbaysrXSk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsICdTeW1ib2wnLCB7XG4gIC8vIDE5LjQuMi4xIFN5bWJvbC5mb3Ioa2V5KVxuICAnZm9yJzogZnVuY3Rpb24gKGtleSkge1xuICAgIHJldHVybiBoYXMoU3ltYm9sUmVnaXN0cnksIGtleSArPSAnJylcbiAgICAgID8gU3ltYm9sUmVnaXN0cnlba2V5XVxuICAgICAgOiBTeW1ib2xSZWdpc3RyeVtrZXldID0gJFN5bWJvbChrZXkpO1xuICB9LFxuICAvLyAxOS40LjIuNSBTeW1ib2wua2V5Rm9yKHN5bSlcbiAga2V5Rm9yOiBmdW5jdGlvbiBrZXlGb3Ioc3ltKSB7XG4gICAgaWYgKCFpc1N5bWJvbChzeW0pKSB0aHJvdyBUeXBlRXJyb3Ioc3ltICsgJyBpcyBub3QgYSBzeW1ib2whJyk7XG4gICAgZm9yICh2YXIga2V5IGluIFN5bWJvbFJlZ2lzdHJ5KSBpZiAoU3ltYm9sUmVnaXN0cnlba2V5XSA9PT0gc3ltKSByZXR1cm4ga2V5O1xuICB9LFxuICB1c2VTZXR0ZXI6IGZ1bmN0aW9uICgpIHsgc2V0dGVyID0gdHJ1ZTsgfSxcbiAgdXNlU2ltcGxlOiBmdW5jdGlvbiAoKSB7IHNldHRlciA9IGZhbHNlOyB9XG59KTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhVVNFX05BVElWRSwgJ09iamVjdCcsIHtcbiAgLy8gMTkuMS4yLjIgT2JqZWN0LmNyZWF0ZShPIFssIFByb3BlcnRpZXNdKVxuICBjcmVhdGU6ICRjcmVhdGUsXG4gIC8vIDE5LjEuMi40IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKVxuICBkZWZpbmVQcm9wZXJ0eTogJGRlZmluZVByb3BlcnR5LFxuICAvLyAxOS4xLjIuMyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhPLCBQcm9wZXJ0aWVzKVxuICBkZWZpbmVQcm9wZXJ0aWVzOiAkZGVmaW5lUHJvcGVydGllcyxcbiAgLy8gMTkuMS4yLjYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKVxuICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6ICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsXG4gIC8vIDE5LjEuMi43IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKE8pXG4gIGdldE93blByb3BlcnR5TmFtZXM6ICRnZXRPd25Qcm9wZXJ0eU5hbWVzLFxuICAvLyAxOS4xLjIuOCBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKE8pXG4gIGdldE93blByb3BlcnR5U3ltYm9sczogJGdldE93blByb3BlcnR5U3ltYm9sc1xufSk7XG5cbi8vIDI0LjMuMiBKU09OLnN0cmluZ2lmeSh2YWx1ZSBbLCByZXBsYWNlciBbLCBzcGFjZV1dKVxuJEpTT04gJiYgJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAoIVVTRV9OQVRJVkUgfHwgJGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIFMgPSAkU3ltYm9sKCk7XG4gIC8vIE1TIEVkZ2UgY29udmVydHMgc3ltYm9sIHZhbHVlcyB0byBKU09OIGFzIHt9XG4gIC8vIFdlYktpdCBjb252ZXJ0cyBzeW1ib2wgdmFsdWVzIHRvIEpTT04gYXMgbnVsbFxuICAvLyBWOCB0aHJvd3Mgb24gYm94ZWQgc3ltYm9sc1xuICByZXR1cm4gX3N0cmluZ2lmeShbU10pICE9ICdbbnVsbF0nIHx8IF9zdHJpbmdpZnkoeyBhOiBTIH0pICE9ICd7fScgfHwgX3N0cmluZ2lmeShPYmplY3QoUykpICE9ICd7fSc7XG59KSksICdKU09OJywge1xuICBzdHJpbmdpZnk6IGZ1bmN0aW9uIHN0cmluZ2lmeShpdCkge1xuICAgIHZhciBhcmdzID0gW2l0XTtcbiAgICB2YXIgaSA9IDE7XG4gICAgdmFyIHJlcGxhY2VyLCAkcmVwbGFjZXI7XG4gICAgd2hpbGUgKGFyZ3VtZW50cy5sZW5ndGggPiBpKSBhcmdzLnB1c2goYXJndW1lbnRzW2krK10pO1xuICAgICRyZXBsYWNlciA9IHJlcGxhY2VyID0gYXJnc1sxXTtcbiAgICBpZiAoIWlzT2JqZWN0KHJlcGxhY2VyKSAmJiBpdCA9PT0gdW5kZWZpbmVkIHx8IGlzU3ltYm9sKGl0KSkgcmV0dXJuOyAvLyBJRTggcmV0dXJucyBzdHJpbmcgb24gdW5kZWZpbmVkXG4gICAgaWYgKCFpc0FycmF5KHJlcGxhY2VyKSkgcmVwbGFjZXIgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgICAgaWYgKHR5cGVvZiAkcmVwbGFjZXIgPT0gJ2Z1bmN0aW9uJykgdmFsdWUgPSAkcmVwbGFjZXIuY2FsbCh0aGlzLCBrZXksIHZhbHVlKTtcbiAgICAgIGlmICghaXNTeW1ib2wodmFsdWUpKSByZXR1cm4gdmFsdWU7XG4gICAgfTtcbiAgICBhcmdzWzFdID0gcmVwbGFjZXI7XG4gICAgcmV0dXJuIF9zdHJpbmdpZnkuYXBwbHkoJEpTT04sIGFyZ3MpO1xuICB9XG59KTtcblxuLy8gMTkuNC4zLjQgU3ltYm9sLnByb3RvdHlwZVtAQHRvUHJpbWl0aXZlXShoaW50KVxuJFN5bWJvbFtQUk9UT1RZUEVdW1RPX1BSSU1JVElWRV0gfHwgcmVxdWlyZSgnLi9faGlkZScpKCRTeW1ib2xbUFJPVE9UWVBFXSwgVE9fUFJJTUlUSVZFLCAkU3ltYm9sW1BST1RPVFlQRV0udmFsdWVPZik7XG4vLyAxOS40LjMuNSBTeW1ib2wucHJvdG90eXBlW0BAdG9TdHJpbmdUYWddXG5zZXRUb1N0cmluZ1RhZygkU3ltYm9sLCAnU3ltYm9sJyk7XG4vLyAyMC4yLjEuOSBNYXRoW0BAdG9TdHJpbmdUYWddXG5zZXRUb1N0cmluZ1RhZyhNYXRoLCAnTWF0aCcsIHRydWUpO1xuLy8gMjQuMy4zIEpTT05bQEB0b1N0cmluZ1RhZ11cbnNldFRvU3RyaW5nVGFnKGdsb2JhbC5KU09OLCAnSlNPTicsIHRydWUpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkdHlwZWQgPSByZXF1aXJlKCcuL190eXBlZCcpO1xudmFyIGJ1ZmZlciA9IHJlcXVpcmUoJy4vX3R5cGVkLWJ1ZmZlcicpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi9fdG8tYWJzb2x1dGUtaW5kZXgnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgQXJyYXlCdWZmZXIgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5BcnJheUJ1ZmZlcjtcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuL19zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG52YXIgJEFycmF5QnVmZmVyID0gYnVmZmVyLkFycmF5QnVmZmVyO1xudmFyICREYXRhVmlldyA9IGJ1ZmZlci5EYXRhVmlldztcbnZhciAkaXNWaWV3ID0gJHR5cGVkLkFCViAmJiBBcnJheUJ1ZmZlci5pc1ZpZXc7XG52YXIgJHNsaWNlID0gJEFycmF5QnVmZmVyLnByb3RvdHlwZS5zbGljZTtcbnZhciBWSUVXID0gJHR5cGVkLlZJRVc7XG52YXIgQVJSQVlfQlVGRkVSID0gJ0FycmF5QnVmZmVyJztcblxuJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LlcgKyAkZXhwb3J0LkYgKiAoQXJyYXlCdWZmZXIgIT09ICRBcnJheUJ1ZmZlciksIHsgQXJyYXlCdWZmZXI6ICRBcnJheUJ1ZmZlciB9KTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhJHR5cGVkLkNPTlNUUiwgQVJSQVlfQlVGRkVSLCB7XG4gIC8vIDI0LjEuMy4xIEFycmF5QnVmZmVyLmlzVmlldyhhcmcpXG4gIGlzVmlldzogZnVuY3Rpb24gaXNWaWV3KGl0KSB7XG4gICAgcmV0dXJuICRpc1ZpZXcgJiYgJGlzVmlldyhpdCkgfHwgaXNPYmplY3QoaXQpICYmIFZJRVcgaW4gaXQ7XG4gIH1cbn0pO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuVSArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gIW5ldyAkQXJyYXlCdWZmZXIoMikuc2xpY2UoMSwgdW5kZWZpbmVkKS5ieXRlTGVuZ3RoO1xufSksIEFSUkFZX0JVRkZFUiwge1xuICAvLyAyNC4xLjQuMyBBcnJheUJ1ZmZlci5wcm90b3R5cGUuc2xpY2Uoc3RhcnQsIGVuZClcbiAgc2xpY2U6IGZ1bmN0aW9uIHNsaWNlKHN0YXJ0LCBlbmQpIHtcbiAgICBpZiAoJHNsaWNlICE9PSB1bmRlZmluZWQgJiYgZW5kID09PSB1bmRlZmluZWQpIHJldHVybiAkc2xpY2UuY2FsbChhbk9iamVjdCh0aGlzKSwgc3RhcnQpOyAvLyBGRiBmaXhcbiAgICB2YXIgbGVuID0gYW5PYmplY3QodGhpcykuYnl0ZUxlbmd0aDtcbiAgICB2YXIgZmlyc3QgPSB0b0Fic29sdXRlSW5kZXgoc3RhcnQsIGxlbik7XG4gICAgdmFyIGZpbiA9IHRvQWJzb2x1dGVJbmRleChlbmQgPT09IHVuZGVmaW5lZCA/IGxlbiA6IGVuZCwgbGVuKTtcbiAgICB2YXIgcmVzdWx0ID0gbmV3IChzcGVjaWVzQ29uc3RydWN0b3IodGhpcywgJEFycmF5QnVmZmVyKSkodG9MZW5ndGgoZmluIC0gZmlyc3QpKTtcbiAgICB2YXIgdmlld1MgPSBuZXcgJERhdGFWaWV3KHRoaXMpO1xuICAgIHZhciB2aWV3VCA9IG5ldyAkRGF0YVZpZXcocmVzdWx0KTtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHdoaWxlIChmaXJzdCA8IGZpbikge1xuICAgICAgdmlld1Quc2V0VWludDgoaW5kZXgrKywgdmlld1MuZ2V0VWludDgoZmlyc3QrKykpO1xuICAgIH0gcmV0dXJuIHJlc3VsdDtcbiAgfVxufSk7XG5cbnJlcXVpcmUoJy4vX3NldC1zcGVjaWVzJykoQVJSQVlfQlVGRkVSKTtcbiIsInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG4kZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuVyArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL190eXBlZCcpLkFCViwge1xuICBEYXRhVmlldzogcmVxdWlyZSgnLi9fdHlwZWQtYnVmZmVyJykuRGF0YVZpZXdcbn0pO1xuIiwicmVxdWlyZSgnLi9fdHlwZWQtYXJyYXknKSgnRmxvYXQzMicsIDQsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBGbG9hdDMyQXJyYXkoZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIGluaXQodGhpcywgZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKTtcbiAgfTtcbn0pO1xuIiwicmVxdWlyZSgnLi9fdHlwZWQtYXJyYXknKSgnRmxvYXQ2NCcsIDgsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBGbG9hdDY0QXJyYXkoZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIGluaXQodGhpcywgZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKTtcbiAgfTtcbn0pO1xuIiwicmVxdWlyZSgnLi9fdHlwZWQtYXJyYXknKSgnSW50MTYnLCAyLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gSW50MTZBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iLCJyZXF1aXJlKCcuL190eXBlZC1hcnJheScpKCdJbnQzMicsIDQsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBJbnQzMkFycmF5KGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCkge1xuICAgIHJldHVybiBpbml0KHRoaXMsIGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7XG4gIH07XG59KTtcbiIsInJlcXVpcmUoJy4vX3R5cGVkLWFycmF5JykoJ0ludDgnLCAxLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gSW50OEFycmF5KGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCkge1xuICAgIHJldHVybiBpbml0KHRoaXMsIGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7XG4gIH07XG59KTtcbiIsInJlcXVpcmUoJy4vX3R5cGVkLWFycmF5JykoJ1VpbnQxNicsIDIsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBVaW50MTZBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iLCJyZXF1aXJlKCcuL190eXBlZC1hcnJheScpKCdVaW50MzInLCA0LCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gVWludDMyQXJyYXkoZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIGluaXQodGhpcywgZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKTtcbiAgfTtcbn0pO1xuIiwicmVxdWlyZSgnLi9fdHlwZWQtYXJyYXknKSgnVWludDgnLCAxLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gVWludDhBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iLCJyZXF1aXJlKCcuL190eXBlZC1hcnJheScpKCdVaW50OCcsIDEsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBVaW50OENsYW1wZWRBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSwgdHJ1ZSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgZWFjaCA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKSgwKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG52YXIgbWV0YSA9IHJlcXVpcmUoJy4vX21ldGEnKTtcbnZhciBhc3NpZ24gPSByZXF1aXJlKCcuL19vYmplY3QtYXNzaWduJyk7XG52YXIgd2VhayA9IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24td2VhaycpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgdmFsaWRhdGUgPSByZXF1aXJlKCcuL192YWxpZGF0ZS1jb2xsZWN0aW9uJyk7XG52YXIgTkFUSVZFX1dFQUtfTUFQID0gcmVxdWlyZSgnLi9fdmFsaWRhdGUtY29sbGVjdGlvbicpO1xudmFyIElTX0lFMTEgPSAhZ2xvYmFsLkFjdGl2ZVhPYmplY3QgJiYgJ0FjdGl2ZVhPYmplY3QnIGluIGdsb2JhbDtcbnZhciBXRUFLX01BUCA9ICdXZWFrTWFwJztcbnZhciBnZXRXZWFrID0gbWV0YS5nZXRXZWFrO1xudmFyIGlzRXh0ZW5zaWJsZSA9IE9iamVjdC5pc0V4dGVuc2libGU7XG52YXIgdW5jYXVnaHRGcm96ZW5TdG9yZSA9IHdlYWsudWZzdG9yZTtcbnZhciBJbnRlcm5hbE1hcDtcblxudmFyIHdyYXBwZXIgPSBmdW5jdGlvbiAoZ2V0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBXZWFrTWFwKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgYXJndW1lbnRzLmxlbmd0aCA+IDAgPyBhcmd1bWVudHNbMF0gOiB1bmRlZmluZWQpO1xuICB9O1xufTtcblxudmFyIG1ldGhvZHMgPSB7XG4gIC8vIDIzLjMuMy4zIFdlYWtNYXAucHJvdG90eXBlLmdldChrZXkpXG4gIGdldDogZnVuY3Rpb24gZ2V0KGtleSkge1xuICAgIGlmIChpc09iamVjdChrZXkpKSB7XG4gICAgICB2YXIgZGF0YSA9IGdldFdlYWsoa2V5KTtcbiAgICAgIGlmIChkYXRhID09PSB0cnVlKSByZXR1cm4gdW5jYXVnaHRGcm96ZW5TdG9yZSh2YWxpZGF0ZSh0aGlzLCBXRUFLX01BUCkpLmdldChrZXkpO1xuICAgICAgcmV0dXJuIGRhdGEgPyBkYXRhW3RoaXMuX2ldIDogdW5kZWZpbmVkO1xuICAgIH1cbiAgfSxcbiAgLy8gMjMuMy4zLjUgV2Vha01hcC5wcm90b3R5cGUuc2V0KGtleSwgdmFsdWUpXG4gIHNldDogZnVuY3Rpb24gc2V0KGtleSwgdmFsdWUpIHtcbiAgICByZXR1cm4gd2Vhay5kZWYodmFsaWRhdGUodGhpcywgV0VBS19NQVApLCBrZXksIHZhbHVlKTtcbiAgfVxufTtcblxuLy8gMjMuMyBXZWFrTWFwIE9iamVjdHNcbnZhciAkV2Vha01hcCA9IG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fY29sbGVjdGlvbicpKFdFQUtfTUFQLCB3cmFwcGVyLCBtZXRob2RzLCB3ZWFrLCB0cnVlLCB0cnVlKTtcblxuLy8gSUUxMSBXZWFrTWFwIGZyb3plbiBrZXlzIGZpeFxuaWYgKE5BVElWRV9XRUFLX01BUCAmJiBJU19JRTExKSB7XG4gIEludGVybmFsTWFwID0gd2Vhay5nZXRDb25zdHJ1Y3Rvcih3cmFwcGVyLCBXRUFLX01BUCk7XG4gIGFzc2lnbihJbnRlcm5hbE1hcC5wcm90b3R5cGUsIG1ldGhvZHMpO1xuICBtZXRhLk5FRUQgPSB0cnVlO1xuICBlYWNoKFsnZGVsZXRlJywgJ2hhcycsICdnZXQnLCAnc2V0J10sIGZ1bmN0aW9uIChrZXkpIHtcbiAgICB2YXIgcHJvdG8gPSAkV2Vha01hcC5wcm90b3R5cGU7XG4gICAgdmFyIG1ldGhvZCA9IHByb3RvW2tleV07XG4gICAgcmVkZWZpbmUocHJvdG8sIGtleSwgZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgIC8vIHN0b3JlIGZyb3plbiBvYmplY3RzIG9uIGludGVybmFsIHdlYWttYXAgc2hpbVxuICAgICAgaWYgKGlzT2JqZWN0KGEpICYmICFpc0V4dGVuc2libGUoYSkpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9mKSB0aGlzLl9mID0gbmV3IEludGVybmFsTWFwKCk7XG4gICAgICAgIHZhciByZXN1bHQgPSB0aGlzLl9mW2tleV0oYSwgYik7XG4gICAgICAgIHJldHVybiBrZXkgPT0gJ3NldCcgPyB0aGlzIDogcmVzdWx0O1xuICAgICAgLy8gc3RvcmUgYWxsIHRoZSByZXN0IG9uIG5hdGl2ZSB3ZWFrbWFwXG4gICAgICB9IHJldHVybiBtZXRob2QuY2FsbCh0aGlzLCBhLCBiKTtcbiAgICB9KTtcbiAgfSk7XG59XG4iLCIndXNlIHN0cmljdCc7XG52YXIgd2VhayA9IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24td2VhaycpO1xudmFyIHZhbGlkYXRlID0gcmVxdWlyZSgnLi9fdmFsaWRhdGUtY29sbGVjdGlvbicpO1xudmFyIFdFQUtfU0VUID0gJ1dlYWtTZXQnO1xuXG4vLyAyMy40IFdlYWtTZXQgT2JqZWN0c1xucmVxdWlyZSgnLi9fY29sbGVjdGlvbicpKFdFQUtfU0VULCBmdW5jdGlvbiAoZ2V0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBXZWFrU2V0KCkgeyByZXR1cm4gZ2V0KHRoaXMsIGFyZ3VtZW50cy5sZW5ndGggPiAwID8gYXJndW1lbnRzWzBdIDogdW5kZWZpbmVkKTsgfTtcbn0sIHtcbiAgLy8gMjMuNC4zLjEgV2Vha1NldC5wcm90b3R5cGUuYWRkKHZhbHVlKVxuICBhZGQ6IGZ1bmN0aW9uIGFkZCh2YWx1ZSkge1xuICAgIHJldHVybiB3ZWFrLmRlZih2YWxpZGF0ZSh0aGlzLCBXRUFLX1NFVCksIHZhbHVlLCB0cnVlKTtcbiAgfVxufSwgd2VhaywgZmFsc2UsIHRydWUpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1mbGF0TWFwLyNzZWMtQXJyYXkucHJvdG90eXBlLmZsYXRNYXBcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZmxhdHRlbkludG9BcnJheSA9IHJlcXVpcmUoJy4vX2ZsYXR0ZW4taW50by1hcnJheScpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgYXJyYXlTcGVjaWVzQ3JlYXRlID0gcmVxdWlyZSgnLi9fYXJyYXktc3BlY2llcy1jcmVhdGUnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdBcnJheScsIHtcbiAgZmxhdE1hcDogZnVuY3Rpb24gZmxhdE1hcChjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gICAgdmFyIHNvdXJjZUxlbiwgQTtcbiAgICBhRnVuY3Rpb24oY2FsbGJhY2tmbik7XG4gICAgc291cmNlTGVuID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICAgIEEgPSBhcnJheVNwZWNpZXNDcmVhdGUoTywgMCk7XG4gICAgZmxhdHRlbkludG9BcnJheShBLCBPLCBPLCBzb3VyY2VMZW4sIDAsIDEsIGNhbGxiYWNrZm4sIGFyZ3VtZW50c1sxXSk7XG4gICAgcmV0dXJuIEE7XG4gIH1cbn0pO1xuXG5yZXF1aXJlKCcuL19hZGQtdG8tdW5zY29wYWJsZXMnKSgnZmxhdE1hcCcpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1mbGF0TWFwLyNzZWMtQXJyYXkucHJvdG90eXBlLmZsYXR0ZW5cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZmxhdHRlbkludG9BcnJheSA9IHJlcXVpcmUoJy4vX2ZsYXR0ZW4taW50by1hcnJheScpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgYXJyYXlTcGVjaWVzQ3JlYXRlID0gcmVxdWlyZSgnLi9fYXJyYXktc3BlY2llcy1jcmVhdGUnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdBcnJheScsIHtcbiAgZmxhdHRlbjogZnVuY3Rpb24gZmxhdHRlbigvKiBkZXB0aEFyZyA9IDEgKi8pIHtcbiAgICB2YXIgZGVwdGhBcmcgPSBhcmd1bWVudHNbMF07XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICB2YXIgc291cmNlTGVuID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICAgIHZhciBBID0gYXJyYXlTcGVjaWVzQ3JlYXRlKE8sIDApO1xuICAgIGZsYXR0ZW5JbnRvQXJyYXkoQSwgTywgTywgc291cmNlTGVuLCAwLCBkZXB0aEFyZyA9PT0gdW5kZWZpbmVkID8gMSA6IHRvSW50ZWdlcihkZXB0aEFyZykpO1xuICAgIHJldHVybiBBO1xuICB9XG59KTtcblxucmVxdWlyZSgnLi9fYWRkLXRvLXVuc2NvcGFibGVzJykoJ2ZsYXR0ZW4nKTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L0FycmF5LnByb3RvdHlwZS5pbmNsdWRlc1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkaW5jbHVkZXMgPSByZXF1aXJlKCcuL19hcnJheS1pbmNsdWRlcycpKHRydWUpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCwgJ0FycmF5Jywge1xuICBpbmNsdWRlczogZnVuY3Rpb24gaW5jbHVkZXMoZWwgLyogLCBmcm9tSW5kZXggPSAwICovKSB7XG4gICAgcmV0dXJuICRpbmNsdWRlcyh0aGlzLCBlbCwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcblxucmVxdWlyZSgnLi9fYWRkLXRvLXVuc2NvcGFibGVzJykoJ2luY2x1ZGVzJyk7XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vcndhbGRyb24vdGMzOS1ub3Rlcy9ibG9iL21hc3Rlci9lczYvMjAxNC0wOS9zZXB0LTI1Lm1kIzUxMC1nbG9iYWxhc2FwLWZvci1lbnF1ZXVpbmctYS1taWNyb3Rhc2tcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgbWljcm90YXNrID0gcmVxdWlyZSgnLi9fbWljcm90YXNrJykoKTtcbnZhciBwcm9jZXNzID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykucHJvY2VzcztcbnZhciBpc05vZGUgPSByZXF1aXJlKCcuL19jb2YnKShwcm9jZXNzKSA9PSAncHJvY2Vzcyc7XG5cbiRleHBvcnQoJGV4cG9ydC5HLCB7XG4gIGFzYXA6IGZ1bmN0aW9uIGFzYXAoZm4pIHtcbiAgICB2YXIgZG9tYWluID0gaXNOb2RlICYmIHByb2Nlc3MuZG9tYWluO1xuICAgIG1pY3JvdGFzayhkb21haW4gPyBkb21haW4uYmluZChmbikgOiBmbik7XG4gIH1cbn0pO1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL2xqaGFyYi9wcm9wb3NhbC1pcy1lcnJvclxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdFcnJvcicsIHtcbiAgaXNFcnJvcjogZnVuY3Rpb24gaXNFcnJvcihpdCkge1xuICAgIHJldHVybiBjb2YoaXQpID09PSAnRXJyb3InO1xuICB9XG59KTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWdsb2JhbFxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LkcsIHsgZ2xvYmFsOiByZXF1aXJlKCcuL19nbG9iYWwnKSB9KTtcbiIsIi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS8jc2VjLW1hcC5mcm9tXG5yZXF1aXJlKCcuL19zZXQtY29sbGVjdGlvbi1mcm9tJykoJ01hcCcpO1xuIiwiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tLyNzZWMtbWFwLm9mXG5yZXF1aXJlKCcuL19zZXQtY29sbGVjdGlvbi1vZicpKCdNYXAnKTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9EYXZpZEJydWFudC9NYXAtU2V0LnByb3RvdHlwZS50b0pTT05cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5SLCAnTWFwJywgeyB0b0pTT046IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24tdG8tanNvbicpKCdNYXAnKSB9KTtcbiIsIi8vIGh0dHBzOi8vcndhbGRyb24uZ2l0aHViLmlvL3Byb3Bvc2FsLW1hdGgtZXh0ZW5zaW9ucy9cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgY2xhbXA6IGZ1bmN0aW9uIGNsYW1wKHgsIGxvd2VyLCB1cHBlcikge1xuICAgIHJldHVybiBNYXRoLm1pbih1cHBlciwgTWF0aC5tYXgobG93ZXIsIHgpKTtcbiAgfVxufSk7XG4iLCIvLyBodHRwczovL3J3YWxkcm9uLmdpdGh1Yi5pby9wcm9wb3NhbC1tYXRoLWV4dGVuc2lvbnMvXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7IERFR19QRVJfUkFEOiBNYXRoLlBJIC8gMTgwIH0pO1xuIiwiLy8gaHR0cHM6Ly9yd2FsZHJvbi5naXRodWIuaW8vcHJvcG9zYWwtbWF0aC1leHRlbnNpb25zL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBSQURfUEVSX0RFRyA9IDE4MCAvIE1hdGguUEk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgZGVncmVlczogZnVuY3Rpb24gZGVncmVlcyhyYWRpYW5zKSB7XG4gICAgcmV0dXJuIHJhZGlhbnMgKiBSQURfUEVSX0RFRztcbiAgfVxufSk7XG4iLCIvLyBodHRwczovL3J3YWxkcm9uLmdpdGh1Yi5pby9wcm9wb3NhbC1tYXRoLWV4dGVuc2lvbnMvXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHNjYWxlID0gcmVxdWlyZSgnLi9fbWF0aC1zY2FsZScpO1xudmFyIGZyb3VuZCA9IHJlcXVpcmUoJy4vX21hdGgtZnJvdW5kJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgZnNjYWxlOiBmdW5jdGlvbiBmc2NhbGUoeCwgaW5Mb3csIGluSGlnaCwgb3V0TG93LCBvdXRIaWdoKSB7XG4gICAgcmV0dXJuIGZyb3VuZChzY2FsZSh4LCBpbkxvdywgaW5IaWdoLCBvdXRMb3csIG91dEhpZ2gpKTtcbiAgfVxufSk7XG4iLCIvLyBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9CcmVuZGFuRWljaC80Mjk0ZDVjMjEyYTZkMjI1NDcwM1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBpYWRkaDogZnVuY3Rpb24gaWFkZGgoeDAsIHgxLCB5MCwgeTEpIHtcbiAgICB2YXIgJHgwID0geDAgPj4+IDA7XG4gICAgdmFyICR4MSA9IHgxID4+PiAwO1xuICAgIHZhciAkeTAgPSB5MCA+Pj4gMDtcbiAgICByZXR1cm4gJHgxICsgKHkxID4+PiAwKSArICgoJHgwICYgJHkwIHwgKCR4MCB8ICR5MCkgJiB+KCR4MCArICR5MCA+Pj4gMCkpID4+PiAzMSkgfCAwO1xuICB9XG59KTtcbiIsIi8vIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL0JyZW5kYW5FaWNoLzQyOTRkNWMyMTJhNmQyMjU0NzAzXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGltdWxoOiBmdW5jdGlvbiBpbXVsaCh1LCB2KSB7XG4gICAgdmFyIFVJTlQxNiA9IDB4ZmZmZjtcbiAgICB2YXIgJHUgPSArdTtcbiAgICB2YXIgJHYgPSArdjtcbiAgICB2YXIgdTAgPSAkdSAmIFVJTlQxNjtcbiAgICB2YXIgdjAgPSAkdiAmIFVJTlQxNjtcbiAgICB2YXIgdTEgPSAkdSA+PiAxNjtcbiAgICB2YXIgdjEgPSAkdiA+PiAxNjtcbiAgICB2YXIgdCA9ICh1MSAqIHYwID4+PiAwKSArICh1MCAqIHYwID4+PiAxNik7XG4gICAgcmV0dXJuIHUxICogdjEgKyAodCA+PiAxNikgKyAoKHUwICogdjEgPj4+IDApICsgKHQgJiBVSU5UMTYpID4+IDE2KTtcbiAgfVxufSk7XG4iLCIvLyBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9CcmVuZGFuRWljaC80Mjk0ZDVjMjEyYTZkMjI1NDcwM1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBpc3ViaDogZnVuY3Rpb24gaXN1YmgoeDAsIHgxLCB5MCwgeTEpIHtcbiAgICB2YXIgJHgwID0geDAgPj4+IDA7XG4gICAgdmFyICR4MSA9IHgxID4+PiAwO1xuICAgIHZhciAkeTAgPSB5MCA+Pj4gMDtcbiAgICByZXR1cm4gJHgxIC0gKHkxID4+PiAwKSAtICgofiR4MCAmICR5MCB8IH4oJHgwIF4gJHkwKSAmICR4MCAtICR5MCA+Pj4gMCkgPj4+IDMxKSB8IDA7XG4gIH1cbn0pO1xuIiwiLy8gaHR0cHM6Ly9yd2FsZHJvbi5naXRodWIuaW8vcHJvcG9zYWwtbWF0aC1leHRlbnNpb25zL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywgeyBSQURfUEVSX0RFRzogMTgwIC8gTWF0aC5QSSB9KTtcbiIsIi8vIGh0dHBzOi8vcndhbGRyb24uZ2l0aHViLmlvL3Byb3Bvc2FsLW1hdGgtZXh0ZW5zaW9ucy9cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgREVHX1BFUl9SQUQgPSBNYXRoLlBJIC8gMTgwO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIHJhZGlhbnM6IGZ1bmN0aW9uIHJhZGlhbnMoZGVncmVlcykge1xuICAgIHJldHVybiBkZWdyZWVzICogREVHX1BFUl9SQUQ7XG4gIH1cbn0pO1xuIiwiLy8gaHR0cHM6Ly9yd2FsZHJvbi5naXRodWIuaW8vcHJvcG9zYWwtbWF0aC1leHRlbnNpb25zL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywgeyBzY2FsZTogcmVxdWlyZSgnLi9fbWF0aC1zY2FsZScpIH0pO1xuIiwiLy8gaHR0cDovL2pmYmFzdGllbi5naXRodWIuaW8vcGFwZXJzL01hdGguc2lnbmJpdC5odG1sXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7IHNpZ25iaXQ6IGZ1bmN0aW9uIHNpZ25iaXQoeCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gIHJldHVybiAoeCA9ICt4KSAhPSB4ID8geCA6IHggPT0gMCA/IDEgLyB4ID09IEluZmluaXR5IDogeCA+IDA7XG59IH0pO1xuIiwiLy8gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vQnJlbmRhbkVpY2gvNDI5NGQ1YzIxMmE2ZDIyNTQ3MDNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgdW11bGg6IGZ1bmN0aW9uIHVtdWxoKHUsIHYpIHtcbiAgICB2YXIgVUlOVDE2ID0gMHhmZmZmO1xuICAgIHZhciAkdSA9ICt1O1xuICAgIHZhciAkdiA9ICt2O1xuICAgIHZhciB1MCA9ICR1ICYgVUlOVDE2O1xuICAgIHZhciB2MCA9ICR2ICYgVUlOVDE2O1xuICAgIHZhciB1MSA9ICR1ID4+PiAxNjtcbiAgICB2YXIgdjEgPSAkdiA+Pj4gMTY7XG4gICAgdmFyIHQgPSAodTEgKiB2MCA+Pj4gMCkgKyAodTAgKiB2MCA+Pj4gMTYpO1xuICAgIHJldHVybiB1MSAqIHYxICsgKHQgPj4+IDE2KSArICgodTAgKiB2MSA+Pj4gMCkgKyAodCAmIFVJTlQxNikgPj4+IDE2KTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyICRkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xuXG4vLyBCLjIuMi4yIE9iamVjdC5wcm90b3R5cGUuX19kZWZpbmVHZXR0ZXJfXyhQLCBnZXR0ZXIpXG5yZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpICYmICRleHBvcnQoJGV4cG9ydC5QICsgcmVxdWlyZSgnLi9fb2JqZWN0LWZvcmNlZC1wYW0nKSwgJ09iamVjdCcsIHtcbiAgX19kZWZpbmVHZXR0ZXJfXzogZnVuY3Rpb24gX19kZWZpbmVHZXR0ZXJfXyhQLCBnZXR0ZXIpIHtcbiAgICAkZGVmaW5lUHJvcGVydHkuZih0b09iamVjdCh0aGlzKSwgUCwgeyBnZXQ6IGFGdW5jdGlvbihnZXR0ZXIpLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciAkZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcblxuLy8gQi4yLjIuMyBPYmplY3QucHJvdG90eXBlLl9fZGVmaW5lU2V0dGVyX18oUCwgc2V0dGVyKVxucmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSAmJiAkZXhwb3J0KCRleHBvcnQuUCArIHJlcXVpcmUoJy4vX29iamVjdC1mb3JjZWQtcGFtJyksICdPYmplY3QnLCB7XG4gIF9fZGVmaW5lU2V0dGVyX186IGZ1bmN0aW9uIF9fZGVmaW5lU2V0dGVyX18oUCwgc2V0dGVyKSB7XG4gICAgJGRlZmluZVByb3BlcnR5LmYodG9PYmplY3QodGhpcyksIFAsIHsgc2V0OiBhRnVuY3Rpb24oc2V0dGVyKSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0pO1xuICB9XG59KTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLW9iamVjdC12YWx1ZXMtZW50cmllc1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkZW50cmllcyA9IHJlcXVpcmUoJy4vX29iamVjdC10by1hcnJheScpKHRydWUpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ09iamVjdCcsIHtcbiAgZW50cmllczogZnVuY3Rpb24gZW50cmllcyhpdCkge1xuICAgIHJldHVybiAkZW50cmllcyhpdCk7XG4gIH1cbn0pO1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvcnNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgb3duS2V5cyA9IHJlcXVpcmUoJy4vX293bi1rZXlzJyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIGdPUEQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpO1xudmFyIGNyZWF0ZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fY3JlYXRlLXByb3BlcnR5Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnT2JqZWN0Jywge1xuICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCkge1xuICAgIHZhciBPID0gdG9JT2JqZWN0KG9iamVjdCk7XG4gICAgdmFyIGdldERlc2MgPSBnT1BELmY7XG4gICAgdmFyIGtleXMgPSBvd25LZXlzKE8pO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIGtleSwgZGVzYztcbiAgICB3aGlsZSAoa2V5cy5sZW5ndGggPiBpKSB7XG4gICAgICBkZXNjID0gZ2V0RGVzYyhPLCBrZXkgPSBrZXlzW2krK10pO1xuICAgICAgaWYgKGRlc2MgIT09IHVuZGVmaW5lZCkgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBrZXksIGRlc2MpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJykuZjtcblxuLy8gQi4yLjIuNCBPYmplY3QucHJvdG90eXBlLl9fbG9va3VwR2V0dGVyX18oUClcbnJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgJGV4cG9ydCgkZXhwb3J0LlAgKyByZXF1aXJlKCcuL19vYmplY3QtZm9yY2VkLXBhbScpLCAnT2JqZWN0Jywge1xuICBfX2xvb2t1cEdldHRlcl9fOiBmdW5jdGlvbiBfX2xvb2t1cEdldHRlcl9fKFApIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgIHZhciBLID0gdG9QcmltaXRpdmUoUCwgdHJ1ZSk7XG4gICAgdmFyIEQ7XG4gICAgZG8ge1xuICAgICAgaWYgKEQgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgSykpIHJldHVybiBELmdldDtcbiAgICB9IHdoaWxlIChPID0gZ2V0UHJvdG90eXBlT2YoTykpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJykuZjtcblxuLy8gQi4yLjIuNSBPYmplY3QucHJvdG90eXBlLl9fbG9va3VwU2V0dGVyX18oUClcbnJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgJGV4cG9ydCgkZXhwb3J0LlAgKyByZXF1aXJlKCcuL19vYmplY3QtZm9yY2VkLXBhbScpLCAnT2JqZWN0Jywge1xuICBfX2xvb2t1cFNldHRlcl9fOiBmdW5jdGlvbiBfX2xvb2t1cFNldHRlcl9fKFApIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgIHZhciBLID0gdG9QcmltaXRpdmUoUCwgdHJ1ZSk7XG4gICAgdmFyIEQ7XG4gICAgZG8ge1xuICAgICAgaWYgKEQgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgSykpIHJldHVybiBELnNldDtcbiAgICB9IHdoaWxlIChPID0gZ2V0UHJvdG90eXBlT2YoTykpO1xuICB9XG59KTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLW9iamVjdC12YWx1ZXMtZW50cmllc1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkdmFsdWVzID0gcmVxdWlyZSgnLi9fb2JqZWN0LXRvLWFycmF5JykoZmFsc2UpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ09iamVjdCcsIHtcbiAgdmFsdWVzOiBmdW5jdGlvbiB2YWx1ZXMoaXQpIHtcbiAgICByZXR1cm4gJHZhbHVlcyhpdCk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3plbnBhcnNpbmcvZXMtb2JzZXJ2YWJsZVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIG1pY3JvdGFzayA9IHJlcXVpcmUoJy4vX21pY3JvdGFzaycpKCk7XG52YXIgT0JTRVJWQUJMRSA9IHJlcXVpcmUoJy4vX3drcycpKCdvYnNlcnZhYmxlJyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG52YXIgcmVkZWZpbmVBbGwgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIGZvck9mID0gcmVxdWlyZSgnLi9fZm9yLW9mJyk7XG52YXIgUkVUVVJOID0gZm9yT2YuUkVUVVJOO1xuXG52YXIgZ2V0TWV0aG9kID0gZnVuY3Rpb24gKGZuKSB7XG4gIHJldHVybiBmbiA9PSBudWxsID8gdW5kZWZpbmVkIDogYUZ1bmN0aW9uKGZuKTtcbn07XG5cbnZhciBjbGVhbnVwU3Vic2NyaXB0aW9uID0gZnVuY3Rpb24gKHN1YnNjcmlwdGlvbikge1xuICB2YXIgY2xlYW51cCA9IHN1YnNjcmlwdGlvbi5fYztcbiAgaWYgKGNsZWFudXApIHtcbiAgICBzdWJzY3JpcHRpb24uX2MgPSB1bmRlZmluZWQ7XG4gICAgY2xlYW51cCgpO1xuICB9XG59O1xuXG52YXIgc3Vic2NyaXB0aW9uQ2xvc2VkID0gZnVuY3Rpb24gKHN1YnNjcmlwdGlvbikge1xuICByZXR1cm4gc3Vic2NyaXB0aW9uLl9vID09PSB1bmRlZmluZWQ7XG59O1xuXG52YXIgY2xvc2VTdWJzY3JpcHRpb24gPSBmdW5jdGlvbiAoc3Vic2NyaXB0aW9uKSB7XG4gIGlmICghc3Vic2NyaXB0aW9uQ2xvc2VkKHN1YnNjcmlwdGlvbikpIHtcbiAgICBzdWJzY3JpcHRpb24uX28gPSB1bmRlZmluZWQ7XG4gICAgY2xlYW51cFN1YnNjcmlwdGlvbihzdWJzY3JpcHRpb24pO1xuICB9XG59O1xuXG52YXIgU3Vic2NyaXB0aW9uID0gZnVuY3Rpb24gKG9ic2VydmVyLCBzdWJzY3JpYmVyKSB7XG4gIGFuT2JqZWN0KG9ic2VydmVyKTtcbiAgdGhpcy5fYyA9IHVuZGVmaW5lZDtcbiAgdGhpcy5fbyA9IG9ic2VydmVyO1xuICBvYnNlcnZlciA9IG5ldyBTdWJzY3JpcHRpb25PYnNlcnZlcih0aGlzKTtcbiAgdHJ5IHtcbiAgICB2YXIgY2xlYW51cCA9IHN1YnNjcmliZXIob2JzZXJ2ZXIpO1xuICAgIHZhciBzdWJzY3JpcHRpb24gPSBjbGVhbnVwO1xuICAgIGlmIChjbGVhbnVwICE9IG51bGwpIHtcbiAgICAgIGlmICh0eXBlb2YgY2xlYW51cC51bnN1YnNjcmliZSA9PT0gJ2Z1bmN0aW9uJykgY2xlYW51cCA9IGZ1bmN0aW9uICgpIHsgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7IH07XG4gICAgICBlbHNlIGFGdW5jdGlvbihjbGVhbnVwKTtcbiAgICAgIHRoaXMuX2MgPSBjbGVhbnVwO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIG9ic2VydmVyLmVycm9yKGUpO1xuICAgIHJldHVybjtcbiAgfSBpZiAoc3Vic2NyaXB0aW9uQ2xvc2VkKHRoaXMpKSBjbGVhbnVwU3Vic2NyaXB0aW9uKHRoaXMpO1xufTtcblxuU3Vic2NyaXB0aW9uLnByb3RvdHlwZSA9IHJlZGVmaW5lQWxsKHt9LCB7XG4gIHVuc3Vic2NyaWJlOiBmdW5jdGlvbiB1bnN1YnNjcmliZSgpIHsgY2xvc2VTdWJzY3JpcHRpb24odGhpcyk7IH1cbn0pO1xuXG52YXIgU3Vic2NyaXB0aW9uT2JzZXJ2ZXIgPSBmdW5jdGlvbiAoc3Vic2NyaXB0aW9uKSB7XG4gIHRoaXMuX3MgPSBzdWJzY3JpcHRpb247XG59O1xuXG5TdWJzY3JpcHRpb25PYnNlcnZlci5wcm90b3R5cGUgPSByZWRlZmluZUFsbCh7fSwge1xuICBuZXh0OiBmdW5jdGlvbiBuZXh0KHZhbHVlKSB7XG4gICAgdmFyIHN1YnNjcmlwdGlvbiA9IHRoaXMuX3M7XG4gICAgaWYgKCFzdWJzY3JpcHRpb25DbG9zZWQoc3Vic2NyaXB0aW9uKSkge1xuICAgICAgdmFyIG9ic2VydmVyID0gc3Vic2NyaXB0aW9uLl9vO1xuICAgICAgdHJ5IHtcbiAgICAgICAgdmFyIG0gPSBnZXRNZXRob2Qob2JzZXJ2ZXIubmV4dCk7XG4gICAgICAgIGlmIChtKSByZXR1cm4gbS5jYWxsKG9ic2VydmVyLCB2YWx1ZSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY2xvc2VTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LFxuICBlcnJvcjogZnVuY3Rpb24gZXJyb3IodmFsdWUpIHtcbiAgICB2YXIgc3Vic2NyaXB0aW9uID0gdGhpcy5fcztcbiAgICBpZiAoc3Vic2NyaXB0aW9uQ2xvc2VkKHN1YnNjcmlwdGlvbikpIHRocm93IHZhbHVlO1xuICAgIHZhciBvYnNlcnZlciA9IHN1YnNjcmlwdGlvbi5fbztcbiAgICBzdWJzY3JpcHRpb24uX28gPSB1bmRlZmluZWQ7XG4gICAgdHJ5IHtcbiAgICAgIHZhciBtID0gZ2V0TWV0aG9kKG9ic2VydmVyLmVycm9yKTtcbiAgICAgIGlmICghbSkgdGhyb3cgdmFsdWU7XG4gICAgICB2YWx1ZSA9IG0uY2FsbChvYnNlcnZlciwgdmFsdWUpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNsZWFudXBTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgfSBjbGVhbnVwU3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvbik7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9LFxuICBjb21wbGV0ZTogZnVuY3Rpb24gY29tcGxldGUodmFsdWUpIHtcbiAgICB2YXIgc3Vic2NyaXB0aW9uID0gdGhpcy5fcztcbiAgICBpZiAoIXN1YnNjcmlwdGlvbkNsb3NlZChzdWJzY3JpcHRpb24pKSB7XG4gICAgICB2YXIgb2JzZXJ2ZXIgPSBzdWJzY3JpcHRpb24uX287XG4gICAgICBzdWJzY3JpcHRpb24uX28gPSB1bmRlZmluZWQ7XG4gICAgICB0cnkge1xuICAgICAgICB2YXIgbSA9IGdldE1ldGhvZChvYnNlcnZlci5jb21wbGV0ZSk7XG4gICAgICAgIHZhbHVlID0gbSA/IG0uY2FsbChvYnNlcnZlciwgdmFsdWUpIDogdW5kZWZpbmVkO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNsZWFudXBTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgICB9IGNsZWFudXBTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKTtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gIH1cbn0pO1xuXG52YXIgJE9ic2VydmFibGUgPSBmdW5jdGlvbiBPYnNlcnZhYmxlKHN1YnNjcmliZXIpIHtcbiAgYW5JbnN0YW5jZSh0aGlzLCAkT2JzZXJ2YWJsZSwgJ09ic2VydmFibGUnLCAnX2YnKS5fZiA9IGFGdW5jdGlvbihzdWJzY3JpYmVyKTtcbn07XG5cbnJlZGVmaW5lQWxsKCRPYnNlcnZhYmxlLnByb3RvdHlwZSwge1xuICBzdWJzY3JpYmU6IGZ1bmN0aW9uIHN1YnNjcmliZShvYnNlcnZlcikge1xuICAgIHJldHVybiBuZXcgU3Vic2NyaXB0aW9uKG9ic2VydmVyLCB0aGlzLl9mKTtcbiAgfSxcbiAgZm9yRWFjaDogZnVuY3Rpb24gZm9yRWFjaChmbikge1xuICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICByZXR1cm4gbmV3IChjb3JlLlByb21pc2UgfHwgZ2xvYmFsLlByb21pc2UpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIGFGdW5jdGlvbihmbik7XG4gICAgICB2YXIgc3Vic2NyaXB0aW9uID0gdGhhdC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIGZuKHZhbHVlKTtcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgICBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiByZWplY3QsXG4gICAgICAgIGNvbXBsZXRlOiByZXNvbHZlXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxufSk7XG5cbnJlZGVmaW5lQWxsKCRPYnNlcnZhYmxlLCB7XG4gIGZyb206IGZ1bmN0aW9uIGZyb20oeCkge1xuICAgIHZhciBDID0gdHlwZW9mIHRoaXMgPT09ICdmdW5jdGlvbicgPyB0aGlzIDogJE9ic2VydmFibGU7XG4gICAgdmFyIG1ldGhvZCA9IGdldE1ldGhvZChhbk9iamVjdCh4KVtPQlNFUlZBQkxFXSk7XG4gICAgaWYgKG1ldGhvZCkge1xuICAgICAgdmFyIG9ic2VydmFibGUgPSBhbk9iamVjdChtZXRob2QuY2FsbCh4KSk7XG4gICAgICByZXR1cm4gb2JzZXJ2YWJsZS5jb25zdHJ1Y3RvciA9PT0gQyA/IG9ic2VydmFibGUgOiBuZXcgQyhmdW5jdGlvbiAob2JzZXJ2ZXIpIHtcbiAgICAgICAgcmV0dXJuIG9ic2VydmFibGUuc3Vic2NyaWJlKG9ic2VydmVyKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IEMoZnVuY3Rpb24gKG9ic2VydmVyKSB7XG4gICAgICB2YXIgZG9uZSA9IGZhbHNlO1xuICAgICAgbWljcm90YXNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCFkb25lKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChmb3JPZih4LCBmYWxzZSwgZnVuY3Rpb24gKGl0KSB7XG4gICAgICAgICAgICAgIG9ic2VydmVyLm5leHQoaXQpO1xuICAgICAgICAgICAgICBpZiAoZG9uZSkgcmV0dXJuIFJFVFVSTjtcbiAgICAgICAgICAgIH0pID09PSBSRVRVUk4pIHJldHVybjtcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBpZiAoZG9uZSkgdGhyb3cgZTtcbiAgICAgICAgICAgIG9ic2VydmVyLmVycm9yKGUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH0gb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyBkb25lID0gdHJ1ZTsgfTtcbiAgICB9KTtcbiAgfSxcbiAgb2Y6IGZ1bmN0aW9uIG9mKCkge1xuICAgIGZvciAodmFyIGkgPSAwLCBsID0gYXJndW1lbnRzLmxlbmd0aCwgaXRlbXMgPSBuZXcgQXJyYXkobCk7IGkgPCBsOykgaXRlbXNbaV0gPSBhcmd1bWVudHNbaSsrXTtcbiAgICByZXR1cm4gbmV3ICh0eXBlb2YgdGhpcyA9PT0gJ2Z1bmN0aW9uJyA/IHRoaXMgOiAkT2JzZXJ2YWJsZSkoZnVuY3Rpb24gKG9ic2VydmVyKSB7XG4gICAgICB2YXIgZG9uZSA9IGZhbHNlO1xuICAgICAgbWljcm90YXNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCFkb25lKSB7XG4gICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBpdGVtcy5sZW5ndGg7ICsraikge1xuICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dChpdGVtc1tqXSk7XG4gICAgICAgICAgICBpZiAoZG9uZSkgcmV0dXJuO1xuICAgICAgICAgIH0gb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyBkb25lID0gdHJ1ZTsgfTtcbiAgICB9KTtcbiAgfVxufSk7XG5cbmhpZGUoJE9ic2VydmFibGUucHJvdG90eXBlLCBPQlNFUlZBQkxFLCBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9KTtcblxuJGV4cG9ydCgkZXhwb3J0LkcsIHsgT2JzZXJ2YWJsZTogJE9ic2VydmFibGUgfSk7XG5cbnJlcXVpcmUoJy4vX3NldC1zcGVjaWVzJykoJ09ic2VydmFibGUnKTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXByb21pc2UtZmluYWxseVxuJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4vX3NwZWNpZXMtY29uc3RydWN0b3InKTtcbnZhciBwcm9taXNlUmVzb2x2ZSA9IHJlcXVpcmUoJy4vX3Byb21pc2UtcmVzb2x2ZScpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuUiwgJ1Byb21pc2UnLCB7ICdmaW5hbGx5JzogZnVuY3Rpb24gKG9uRmluYWxseSkge1xuICB2YXIgQyA9IHNwZWNpZXNDb25zdHJ1Y3Rvcih0aGlzLCBjb3JlLlByb21pc2UgfHwgZ2xvYmFsLlByb21pc2UpO1xuICB2YXIgaXNGdW5jdGlvbiA9IHR5cGVvZiBvbkZpbmFsbHkgPT0gJ2Z1bmN0aW9uJztcbiAgcmV0dXJuIHRoaXMudGhlbihcbiAgICBpc0Z1bmN0aW9uID8gZnVuY3Rpb24gKHgpIHtcbiAgICAgIHJldHVybiBwcm9taXNlUmVzb2x2ZShDLCBvbkZpbmFsbHkoKSkudGhlbihmdW5jdGlvbiAoKSB7IHJldHVybiB4OyB9KTtcbiAgICB9IDogb25GaW5hbGx5LFxuICAgIGlzRnVuY3Rpb24gPyBmdW5jdGlvbiAoZSkge1xuICAgICAgcmV0dXJuIHByb21pc2VSZXNvbHZlKEMsIG9uRmluYWxseSgpKS50aGVuKGZ1bmN0aW9uICgpIHsgdGhyb3cgZTsgfSk7XG4gICAgfSA6IG9uRmluYWxseVxuICApO1xufSB9KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXByb21pc2UtdHJ5XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5ID0gcmVxdWlyZSgnLi9fbmV3LXByb21pc2UtY2FwYWJpbGl0eScpO1xudmFyIHBlcmZvcm0gPSByZXF1aXJlKCcuL19wZXJmb3JtJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUHJvbWlzZScsIHsgJ3RyeSc6IGZ1bmN0aW9uIChjYWxsYmFja2ZuKSB7XG4gIHZhciBwcm9taXNlQ2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5LmYodGhpcyk7XG4gIHZhciByZXN1bHQgPSBwZXJmb3JtKGNhbGxiYWNrZm4pO1xuICAocmVzdWx0LmUgPyBwcm9taXNlQ2FwYWJpbGl0eS5yZWplY3QgOiBwcm9taXNlQ2FwYWJpbGl0eS5yZXNvbHZlKShyZXN1bHQudik7XG4gIHJldHVybiBwcm9taXNlQ2FwYWJpbGl0eS5wcm9taXNlO1xufSB9KTtcbiIsInZhciBtZXRhZGF0YSA9IHJlcXVpcmUoJy4vX21ldGFkYXRhJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciB0b01ldGFLZXkgPSBtZXRhZGF0YS5rZXk7XG52YXIgb3JkaW5hcnlEZWZpbmVPd25NZXRhZGF0YSA9IG1ldGFkYXRhLnNldDtcblxubWV0YWRhdGEuZXhwKHsgZGVmaW5lTWV0YWRhdGE6IGZ1bmN0aW9uIGRlZmluZU1ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlLCB0YXJnZXQsIHRhcmdldEtleSkge1xuICBvcmRpbmFyeURlZmluZU93bk1ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlLCBhbk9iamVjdCh0YXJnZXQpLCB0b01ldGFLZXkodGFyZ2V0S2V5KSk7XG59IH0pO1xuIiwidmFyIG1ldGFkYXRhID0gcmVxdWlyZSgnLi9fbWV0YWRhdGEnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHRvTWV0YUtleSA9IG1ldGFkYXRhLmtleTtcbnZhciBnZXRPckNyZWF0ZU1ldGFkYXRhTWFwID0gbWV0YWRhdGEubWFwO1xudmFyIHN0b3JlID0gbWV0YWRhdGEuc3RvcmU7XG5cbm1ldGFkYXRhLmV4cCh7IGRlbGV0ZU1ldGFkYXRhOiBmdW5jdGlvbiBkZWxldGVNZXRhZGF0YShtZXRhZGF0YUtleSwgdGFyZ2V0IC8qICwgdGFyZ2V0S2V5ICovKSB7XG4gIHZhciB0YXJnZXRLZXkgPSBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IHVuZGVmaW5lZCA6IHRvTWV0YUtleShhcmd1bWVudHNbMl0pO1xuICB2YXIgbWV0YWRhdGFNYXAgPSBnZXRPckNyZWF0ZU1ldGFkYXRhTWFwKGFuT2JqZWN0KHRhcmdldCksIHRhcmdldEtleSwgZmFsc2UpO1xuICBpZiAobWV0YWRhdGFNYXAgPT09IHVuZGVmaW5lZCB8fCAhbWV0YWRhdGFNYXBbJ2RlbGV0ZSddKG1ldGFkYXRhS2V5KSkgcmV0dXJuIGZhbHNlO1xuICBpZiAobWV0YWRhdGFNYXAuc2l6ZSkgcmV0dXJuIHRydWU7XG4gIHZhciB0YXJnZXRNZXRhZGF0YSA9IHN0b3JlLmdldCh0YXJnZXQpO1xuICB0YXJnZXRNZXRhZGF0YVsnZGVsZXRlJ10odGFyZ2V0S2V5KTtcbiAgcmV0dXJuICEhdGFyZ2V0TWV0YWRhdGEuc2l6ZSB8fCBzdG9yZVsnZGVsZXRlJ10odGFyZ2V0KTtcbn0gfSk7XG4iLCJ2YXIgU2V0ID0gcmVxdWlyZSgnLi9lczYuc2V0Jyk7XG52YXIgZnJvbSA9IHJlcXVpcmUoJy4vX2FycmF5LWZyb20taXRlcmFibGUnKTtcbnZhciBtZXRhZGF0YSA9IHJlcXVpcmUoJy4vX21ldGFkYXRhJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbnZhciBvcmRpbmFyeU93bk1ldGFkYXRhS2V5cyA9IG1ldGFkYXRhLmtleXM7XG52YXIgdG9NZXRhS2V5ID0gbWV0YWRhdGEua2V5O1xuXG52YXIgb3JkaW5hcnlNZXRhZGF0YUtleXMgPSBmdW5jdGlvbiAoTywgUCkge1xuICB2YXIgb0tleXMgPSBvcmRpbmFyeU93bk1ldGFkYXRhS2V5cyhPLCBQKTtcbiAgdmFyIHBhcmVudCA9IGdldFByb3RvdHlwZU9mKE8pO1xuICBpZiAocGFyZW50ID09PSBudWxsKSByZXR1cm4gb0tleXM7XG4gIHZhciBwS2V5cyA9IG9yZGluYXJ5TWV0YWRhdGFLZXlzKHBhcmVudCwgUCk7XG4gIHJldHVybiBwS2V5cy5sZW5ndGggPyBvS2V5cy5sZW5ndGggPyBmcm9tKG5ldyBTZXQob0tleXMuY29uY2F0KHBLZXlzKSkpIDogcEtleXMgOiBvS2V5cztcbn07XG5cbm1ldGFkYXRhLmV4cCh7IGdldE1ldGFkYXRhS2V5czogZnVuY3Rpb24gZ2V0TWV0YWRhdGFLZXlzKHRhcmdldCAvKiAsIHRhcmdldEtleSAqLykge1xuICByZXR1cm4gb3JkaW5hcnlNZXRhZGF0YUtleXMoYW5PYmplY3QodGFyZ2V0KSwgYXJndW1lbnRzLmxlbmd0aCA8IDIgPyB1bmRlZmluZWQgOiB0b01ldGFLZXkoYXJndW1lbnRzWzFdKSk7XG59IH0pO1xuIiwidmFyIG1ldGFkYXRhID0gcmVxdWlyZSgnLi9fbWV0YWRhdGEnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIG9yZGluYXJ5SGFzT3duTWV0YWRhdGEgPSBtZXRhZGF0YS5oYXM7XG52YXIgb3JkaW5hcnlHZXRPd25NZXRhZGF0YSA9IG1ldGFkYXRhLmdldDtcbnZhciB0b01ldGFLZXkgPSBtZXRhZGF0YS5rZXk7XG5cbnZhciBvcmRpbmFyeUdldE1ldGFkYXRhID0gZnVuY3Rpb24gKE1ldGFkYXRhS2V5LCBPLCBQKSB7XG4gIHZhciBoYXNPd24gPSBvcmRpbmFyeUhhc093bk1ldGFkYXRhKE1ldGFkYXRhS2V5LCBPLCBQKTtcbiAgaWYgKGhhc093bikgcmV0dXJuIG9yZGluYXJ5R2V0T3duTWV0YWRhdGEoTWV0YWRhdGFLZXksIE8sIFApO1xuICB2YXIgcGFyZW50ID0gZ2V0UHJvdG90eXBlT2YoTyk7XG4gIHJldHVybiBwYXJlbnQgIT09IG51bGwgPyBvcmRpbmFyeUdldE1ldGFkYXRhKE1ldGFkYXRhS2V5LCBwYXJlbnQsIFApIDogdW5kZWZpbmVkO1xufTtcblxubWV0YWRhdGEuZXhwKHsgZ2V0TWV0YWRhdGE6IGZ1bmN0aW9uIGdldE1ldGFkYXRhKG1ldGFkYXRhS2V5LCB0YXJnZXQgLyogLCB0YXJnZXRLZXkgKi8pIHtcbiAgcmV0dXJuIG9yZGluYXJ5R2V0TWV0YWRhdGEobWV0YWRhdGFLZXksIGFuT2JqZWN0KHRhcmdldCksIGFyZ3VtZW50cy5sZW5ndGggPCAzID8gdW5kZWZpbmVkIDogdG9NZXRhS2V5KGFyZ3VtZW50c1syXSkpO1xufSB9KTtcbiIsInZhciBtZXRhZGF0YSA9IHJlcXVpcmUoJy4vX21ldGFkYXRhJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBvcmRpbmFyeU93bk1ldGFkYXRhS2V5cyA9IG1ldGFkYXRhLmtleXM7XG52YXIgdG9NZXRhS2V5ID0gbWV0YWRhdGEua2V5O1xuXG5tZXRhZGF0YS5leHAoeyBnZXRPd25NZXRhZGF0YUtleXM6IGZ1bmN0aW9uIGdldE93bk1ldGFkYXRhS2V5cyh0YXJnZXQgLyogLCB0YXJnZXRLZXkgKi8pIHtcbiAgcmV0dXJuIG9yZGluYXJ5T3duTWV0YWRhdGFLZXlzKGFuT2JqZWN0KHRhcmdldCksIGFyZ3VtZW50cy5sZW5ndGggPCAyID8gdW5kZWZpbmVkIDogdG9NZXRhS2V5KGFyZ3VtZW50c1sxXSkpO1xufSB9KTtcbiIsInZhciBtZXRhZGF0YSA9IHJlcXVpcmUoJy4vX21ldGFkYXRhJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBvcmRpbmFyeUdldE93bk1ldGFkYXRhID0gbWV0YWRhdGEuZ2V0O1xudmFyIHRvTWV0YUtleSA9IG1ldGFkYXRhLmtleTtcblxubWV0YWRhdGEuZXhwKHsgZ2V0T3duTWV0YWRhdGE6IGZ1bmN0aW9uIGdldE93bk1ldGFkYXRhKG1ldGFkYXRhS2V5LCB0YXJnZXQgLyogLCB0YXJnZXRLZXkgKi8pIHtcbiAgcmV0dXJuIG9yZGluYXJ5R2V0T3duTWV0YWRhdGEobWV0YWRhdGFLZXksIGFuT2JqZWN0KHRhcmdldClcbiAgICAsIGFyZ3VtZW50cy5sZW5ndGggPCAzID8gdW5kZWZpbmVkIDogdG9NZXRhS2V5KGFyZ3VtZW50c1syXSkpO1xufSB9KTtcbiIsInZhciBtZXRhZGF0YSA9IHJlcXVpcmUoJy4vX21ldGFkYXRhJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbnZhciBvcmRpbmFyeUhhc093bk1ldGFkYXRhID0gbWV0YWRhdGEuaGFzO1xudmFyIHRvTWV0YUtleSA9IG1ldGFkYXRhLmtleTtcblxudmFyIG9yZGluYXJ5SGFzTWV0YWRhdGEgPSBmdW5jdGlvbiAoTWV0YWRhdGFLZXksIE8sIFApIHtcbiAgdmFyIGhhc093biA9IG9yZGluYXJ5SGFzT3duTWV0YWRhdGEoTWV0YWRhdGFLZXksIE8sIFApO1xuICBpZiAoaGFzT3duKSByZXR1cm4gdHJ1ZTtcbiAgdmFyIHBhcmVudCA9IGdldFByb3RvdHlwZU9mKE8pO1xuICByZXR1cm4gcGFyZW50ICE9PSBudWxsID8gb3JkaW5hcnlIYXNNZXRhZGF0YShNZXRhZGF0YUtleSwgcGFyZW50LCBQKSA6IGZhbHNlO1xufTtcblxubWV0YWRhdGEuZXhwKHsgaGFzTWV0YWRhdGE6IGZ1bmN0aW9uIGhhc01ldGFkYXRhKG1ldGFkYXRhS2V5LCB0YXJnZXQgLyogLCB0YXJnZXRLZXkgKi8pIHtcbiAgcmV0dXJuIG9yZGluYXJ5SGFzTWV0YWRhdGEobWV0YWRhdGFLZXksIGFuT2JqZWN0KHRhcmdldCksIGFyZ3VtZW50cy5sZW5ndGggPCAzID8gdW5kZWZpbmVkIDogdG9NZXRhS2V5KGFyZ3VtZW50c1syXSkpO1xufSB9KTtcbiIsInZhciBtZXRhZGF0YSA9IHJlcXVpcmUoJy4vX21ldGFkYXRhJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBvcmRpbmFyeUhhc093bk1ldGFkYXRhID0gbWV0YWRhdGEuaGFzO1xudmFyIHRvTWV0YUtleSA9IG1ldGFkYXRhLmtleTtcblxubWV0YWRhdGEuZXhwKHsgaGFzT3duTWV0YWRhdGE6IGZ1bmN0aW9uIGhhc093bk1ldGFkYXRhKG1ldGFkYXRhS2V5LCB0YXJnZXQgLyogLCB0YXJnZXRLZXkgKi8pIHtcbiAgcmV0dXJuIG9yZGluYXJ5SGFzT3duTWV0YWRhdGEobWV0YWRhdGFLZXksIGFuT2JqZWN0KHRhcmdldClcbiAgICAsIGFyZ3VtZW50cy5sZW5ndGggPCAzID8gdW5kZWZpbmVkIDogdG9NZXRhS2V5KGFyZ3VtZW50c1syXSkpO1xufSB9KTtcbiIsInZhciAkbWV0YWRhdGEgPSByZXF1aXJlKCcuL19tZXRhZGF0YScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIHRvTWV0YUtleSA9ICRtZXRhZGF0YS5rZXk7XG52YXIgb3JkaW5hcnlEZWZpbmVPd25NZXRhZGF0YSA9ICRtZXRhZGF0YS5zZXQ7XG5cbiRtZXRhZGF0YS5leHAoeyBtZXRhZGF0YTogZnVuY3Rpb24gbWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGRlY29yYXRvcih0YXJnZXQsIHRhcmdldEtleSkge1xuICAgIG9yZGluYXJ5RGVmaW5lT3duTWV0YWRhdGEoXG4gICAgICBtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSxcbiAgICAgICh0YXJnZXRLZXkgIT09IHVuZGVmaW5lZCA/IGFuT2JqZWN0IDogYUZ1bmN0aW9uKSh0YXJnZXQpLFxuICAgICAgdG9NZXRhS2V5KHRhcmdldEtleSlcbiAgICApO1xuICB9O1xufSB9KTtcbiIsIi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS8jc2VjLXNldC5mcm9tXG5yZXF1aXJlKCcuL19zZXQtY29sbGVjdGlvbi1mcm9tJykoJ1NldCcpO1xuIiwiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tLyNzZWMtc2V0Lm9mXG5yZXF1aXJlKCcuL19zZXQtY29sbGVjdGlvbi1vZicpKCdTZXQnKTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9EYXZpZEJydWFudC9NYXAtU2V0LnByb3RvdHlwZS50b0pTT05cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5SLCAnU2V0JywgeyB0b0pTT046IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24tdG8tanNvbicpKCdTZXQnKSB9KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXRoaWFzYnluZW5zL1N0cmluZy5wcm90b3R5cGUuYXRcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGF0ID0gcmVxdWlyZSgnLi9fc3RyaW5nLWF0JykodHJ1ZSk7XG5cbiRleHBvcnQoJGV4cG9ydC5QLCAnU3RyaW5nJywge1xuICBhdDogZnVuY3Rpb24gYXQocG9zKSB7XG4gICAgcmV0dXJuICRhdCh0aGlzLCBwb3MpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vU3RyaW5nLnByb3RvdHlwZS5tYXRjaEFsbC9cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGlzUmVnRXhwID0gcmVxdWlyZSgnLi9faXMtcmVnZXhwJyk7XG52YXIgZ2V0RmxhZ3MgPSByZXF1aXJlKCcuL19mbGFncycpO1xudmFyIFJlZ0V4cFByb3RvID0gUmVnRXhwLnByb3RvdHlwZTtcblxudmFyICRSZWdFeHBTdHJpbmdJdGVyYXRvciA9IGZ1bmN0aW9uIChyZWdleHAsIHN0cmluZykge1xuICB0aGlzLl9yID0gcmVnZXhwO1xuICB0aGlzLl9zID0gc3RyaW5nO1xufTtcblxucmVxdWlyZSgnLi9faXRlci1jcmVhdGUnKSgkUmVnRXhwU3RyaW5nSXRlcmF0b3IsICdSZWdFeHAgU3RyaW5nJywgZnVuY3Rpb24gbmV4dCgpIHtcbiAgdmFyIG1hdGNoID0gdGhpcy5fci5leGVjKHRoaXMuX3MpO1xuICByZXR1cm4geyB2YWx1ZTogbWF0Y2gsIGRvbmU6IG1hdGNoID09PSBudWxsIH07XG59KTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdTdHJpbmcnLCB7XG4gIG1hdGNoQWxsOiBmdW5jdGlvbiBtYXRjaEFsbChyZWdleHApIHtcbiAgICBkZWZpbmVkKHRoaXMpO1xuICAgIGlmICghaXNSZWdFeHAocmVnZXhwKSkgdGhyb3cgVHlwZUVycm9yKHJlZ2V4cCArICcgaXMgbm90IGEgcmVnZXhwIScpO1xuICAgIHZhciBTID0gU3RyaW5nKHRoaXMpO1xuICAgIHZhciBmbGFncyA9ICdmbGFncycgaW4gUmVnRXhwUHJvdG8gPyBTdHJpbmcocmVnZXhwLmZsYWdzKSA6IGdldEZsYWdzLmNhbGwocmVnZXhwKTtcbiAgICB2YXIgcnggPSBuZXcgUmVnRXhwKHJlZ2V4cC5zb3VyY2UsIH5mbGFncy5pbmRleE9mKCdnJykgPyBmbGFncyA6ICdnJyArIGZsYWdzKTtcbiAgICByeC5sYXN0SW5kZXggPSB0b0xlbmd0aChyZWdleHAubGFzdEluZGV4KTtcbiAgICByZXR1cm4gbmV3ICRSZWdFeHBTdHJpbmdJdGVyYXRvcihyeCwgUyk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc3RyaW5nLXBhZC1zdGFydC1lbmRcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHBhZCA9IHJlcXVpcmUoJy4vX3N0cmluZy1wYWQnKTtcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuL191c2VyLWFnZW50Jyk7XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8yODBcbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogL1ZlcnNpb25cXC8xMFxcLlxcZCsoXFwuXFxkKyk/IFNhZmFyaVxcLy8udGVzdCh1c2VyQWdlbnQpLCAnU3RyaW5nJywge1xuICBwYWRFbmQ6IGZ1bmN0aW9uIHBhZEVuZChtYXhMZW5ndGggLyogLCBmaWxsU3RyaW5nID0gJyAnICovKSB7XG4gICAgcmV0dXJuICRwYWQodGhpcywgbWF4TGVuZ3RoLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCwgZmFsc2UpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXN0cmluZy1wYWQtc3RhcnQtZW5kXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRwYWQgPSByZXF1aXJlKCcuL19zdHJpbmctcGFkJyk7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi9fdXNlci1hZ2VudCcpO1xuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvMjgwXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIC9WZXJzaW9uXFwvMTBcXC5cXGQrKFxcLlxcZCspPyBTYWZhcmlcXC8vLnRlc3QodXNlckFnZW50KSwgJ1N0cmluZycsIHtcbiAgcGFkU3RhcnQ6IGZ1bmN0aW9uIHBhZFN0YXJ0KG1heExlbmd0aCAvKiAsIGZpbGxTdHJpbmcgPSAnICcgKi8pIHtcbiAgICByZXR1cm4gJHBhZCh0aGlzLCBtYXhMZW5ndGgsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkLCB0cnVlKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vc2VibWFya2JhZ2UvZWNtYXNjcmlwdC1zdHJpbmctbGVmdC1yaWdodC10cmltXG5yZXF1aXJlKCcuL19zdHJpbmctdHJpbScpKCd0cmltTGVmdCcsIGZ1bmN0aW9uICgkdHJpbSkge1xuICByZXR1cm4gZnVuY3Rpb24gdHJpbUxlZnQoKSB7XG4gICAgcmV0dXJuICR0cmltKHRoaXMsIDEpO1xuICB9O1xufSwgJ3RyaW1TdGFydCcpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3NlYm1hcmtiYWdlL2VjbWFzY3JpcHQtc3RyaW5nLWxlZnQtcmlnaHQtdHJpbVxucmVxdWlyZSgnLi9fc3RyaW5nLXRyaW0nKSgndHJpbVJpZ2h0JywgZnVuY3Rpb24gKCR0cmltKSB7XG4gIHJldHVybiBmdW5jdGlvbiB0cmltUmlnaHQoKSB7XG4gICAgcmV0dXJuICR0cmltKHRoaXMsIDIpO1xuICB9O1xufSwgJ3RyaW1FbmQnKTtcbiIsInJlcXVpcmUoJy4vX3drcy1kZWZpbmUnKSgnYXN5bmNJdGVyYXRvcicpO1xuIiwicmVxdWlyZSgnLi9fd2tzLWRlZmluZScpKCdvYnNlcnZhYmxlJyk7XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1nbG9iYWxcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnU3lzdGVtJywgeyBnbG9iYWw6IHJlcXVpcmUoJy4vX2dsb2JhbCcpIH0pO1xuIiwiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tLyNzZWMtd2Vha21hcC5mcm9tXG5yZXF1aXJlKCcuL19zZXQtY29sbGVjdGlvbi1mcm9tJykoJ1dlYWtNYXAnKTtcbiIsIi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS8jc2VjLXdlYWttYXAub2ZcbnJlcXVpcmUoJy4vX3NldC1jb2xsZWN0aW9uLW9mJykoJ1dlYWtNYXAnKTtcbiIsIi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS8jc2VjLXdlYWtzZXQuZnJvbVxucmVxdWlyZSgnLi9fc2V0LWNvbGxlY3Rpb24tZnJvbScpKCdXZWFrU2V0Jyk7XG4iLCIvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vI3NlYy13ZWFrc2V0Lm9mXG5yZXF1aXJlKCcuL19zZXQtY29sbGVjdGlvbi1vZicpKCdXZWFrU2V0Jyk7XG4iLCJ2YXIgJGl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vZXM2LmFycmF5Lml0ZXJhdG9yJyk7XG52YXIgZ2V0S2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJyk7XG52YXIgd2tzID0gcmVxdWlyZSgnLi9fd2tzJyk7XG52YXIgSVRFUkFUT1IgPSB3a3MoJ2l0ZXJhdG9yJyk7XG52YXIgVE9fU1RSSU5HX1RBRyA9IHdrcygndG9TdHJpbmdUYWcnKTtcbnZhciBBcnJheVZhbHVlcyA9IEl0ZXJhdG9ycy5BcnJheTtcblxudmFyIERPTUl0ZXJhYmxlcyA9IHtcbiAgQ1NTUnVsZUxpc3Q6IHRydWUsIC8vIFRPRE86IE5vdCBzcGVjIGNvbXBsaWFudCwgc2hvdWxkIGJlIGZhbHNlLlxuICBDU1NTdHlsZURlY2xhcmF0aW9uOiBmYWxzZSxcbiAgQ1NTVmFsdWVMaXN0OiBmYWxzZSxcbiAgQ2xpZW50UmVjdExpc3Q6IGZhbHNlLFxuICBET01SZWN0TGlzdDogZmFsc2UsXG4gIERPTVN0cmluZ0xpc3Q6IGZhbHNlLFxuICBET01Ub2tlbkxpc3Q6IHRydWUsXG4gIERhdGFUcmFuc2Zlckl0ZW1MaXN0OiBmYWxzZSxcbiAgRmlsZUxpc3Q6IGZhbHNlLFxuICBIVE1MQWxsQ29sbGVjdGlvbjogZmFsc2UsXG4gIEhUTUxDb2xsZWN0aW9uOiBmYWxzZSxcbiAgSFRNTEZvcm1FbGVtZW50OiBmYWxzZSxcbiAgSFRNTFNlbGVjdEVsZW1lbnQ6IGZhbHNlLFxuICBNZWRpYUxpc3Q6IHRydWUsIC8vIFRPRE86IE5vdCBzcGVjIGNvbXBsaWFudCwgc2hvdWxkIGJlIGZhbHNlLlxuICBNaW1lVHlwZUFycmF5OiBmYWxzZSxcbiAgTmFtZWROb2RlTWFwOiBmYWxzZSxcbiAgTm9kZUxpc3Q6IHRydWUsXG4gIFBhaW50UmVxdWVzdExpc3Q6IGZhbHNlLFxuICBQbHVnaW46IGZhbHNlLFxuICBQbHVnaW5BcnJheTogZmFsc2UsXG4gIFNWR0xlbmd0aExpc3Q6IGZhbHNlLFxuICBTVkdOdW1iZXJMaXN0OiBmYWxzZSxcbiAgU1ZHUGF0aFNlZ0xpc3Q6IGZhbHNlLFxuICBTVkdQb2ludExpc3Q6IGZhbHNlLFxuICBTVkdTdHJpbmdMaXN0OiBmYWxzZSxcbiAgU1ZHVHJhbnNmb3JtTGlzdDogZmFsc2UsXG4gIFNvdXJjZUJ1ZmZlckxpc3Q6IGZhbHNlLFxuICBTdHlsZVNoZWV0TGlzdDogdHJ1ZSwgLy8gVE9ETzogTm90IHNwZWMgY29tcGxpYW50LCBzaG91bGQgYmUgZmFsc2UuXG4gIFRleHRUcmFja0N1ZUxpc3Q6IGZhbHNlLFxuICBUZXh0VHJhY2tMaXN0OiBmYWxzZSxcbiAgVG91Y2hMaXN0OiBmYWxzZVxufTtcblxuZm9yICh2YXIgY29sbGVjdGlvbnMgPSBnZXRLZXlzKERPTUl0ZXJhYmxlcyksIGkgPSAwOyBpIDwgY29sbGVjdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgdmFyIE5BTUUgPSBjb2xsZWN0aW9uc1tpXTtcbiAgdmFyIGV4cGxpY2l0ID0gRE9NSXRlcmFibGVzW05BTUVdO1xuICB2YXIgQ29sbGVjdGlvbiA9IGdsb2JhbFtOQU1FXTtcbiAgdmFyIHByb3RvID0gQ29sbGVjdGlvbiAmJiBDb2xsZWN0aW9uLnByb3RvdHlwZTtcbiAgdmFyIGtleTtcbiAgaWYgKHByb3RvKSB7XG4gICAgaWYgKCFwcm90b1tJVEVSQVRPUl0pIGhpZGUocHJvdG8sIElURVJBVE9SLCBBcnJheVZhbHVlcyk7XG4gICAgaWYgKCFwcm90b1tUT19TVFJJTkdfVEFHXSkgaGlkZShwcm90bywgVE9fU1RSSU5HX1RBRywgTkFNRSk7XG4gICAgSXRlcmF0b3JzW05BTUVdID0gQXJyYXlWYWx1ZXM7XG4gICAgaWYgKGV4cGxpY2l0KSBmb3IgKGtleSBpbiAkaXRlcmF0b3JzKSBpZiAoIXByb3RvW2tleV0pIHJlZGVmaW5lKHByb3RvLCBrZXksICRpdGVyYXRvcnNba2V5XSwgdHJ1ZSk7XG4gIH1cbn1cbiIsInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHRhc2sgPSByZXF1aXJlKCcuL190YXNrJyk7XG4kZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuQiwge1xuICBzZXRJbW1lZGlhdGU6ICR0YXNrLnNldCxcbiAgY2xlYXJJbW1lZGlhdGU6ICR0YXNrLmNsZWFyXG59KTtcbiIsIi8vIGllOS0gc2V0VGltZW91dCAmIHNldEludGVydmFsIGFkZGl0aW9uYWwgcGFyYW1ldGVycyBmaXhcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi9fdXNlci1hZ2VudCcpO1xudmFyIHNsaWNlID0gW10uc2xpY2U7XG52YXIgTVNJRSA9IC9NU0lFIC5cXC4vLnRlc3QodXNlckFnZW50KTsgLy8gPC0gZGlydHkgaWU5LSBjaGVja1xudmFyIHdyYXAgPSBmdW5jdGlvbiAoc2V0KSB7XG4gIHJldHVybiBmdW5jdGlvbiAoZm4sIHRpbWUgLyogLCAuLi5hcmdzICovKSB7XG4gICAgdmFyIGJvdW5kQXJncyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyO1xuICAgIHZhciBhcmdzID0gYm91bmRBcmdzID8gc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpIDogZmFsc2U7XG4gICAgcmV0dXJuIHNldChib3VuZEFyZ3MgPyBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmNcbiAgICAgICh0eXBlb2YgZm4gPT0gJ2Z1bmN0aW9uJyA/IGZuIDogRnVuY3Rpb24oZm4pKS5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9IDogZm4sIHRpbWUpO1xuICB9O1xufTtcbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5CICsgJGV4cG9ydC5GICogTVNJRSwge1xuICBzZXRUaW1lb3V0OiB3cmFwKGdsb2JhbC5zZXRUaW1lb3V0KSxcbiAgc2V0SW50ZXJ2YWw6IHdyYXAoZ2xvYmFsLnNldEludGVydmFsKVxufSk7XG4iLCJyZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN5bWJvbCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuY3JlYXRlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5kZWZpbmUtcHJvcGVydHknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmRlZmluZS1wcm9wZXJ0aWVzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmdldC1wcm90b3R5cGUtb2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmtleXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmdldC1vd24tcHJvcGVydHktbmFtZXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmZyZWV6ZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3Quc2VhbCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QucHJldmVudC1leHRlbnNpb25zJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5pcy1mcm96ZW4nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmlzLXNlYWxlZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuaXMtZXh0ZW5zaWJsZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuYXNzaWduJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5pcycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3Quc2V0LXByb3RvdHlwZS1vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QudG8tc3RyaW5nJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmZ1bmN0aW9uLmJpbmQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuZnVuY3Rpb24ubmFtZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5mdW5jdGlvbi5oYXMtaW5zdGFuY2UnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucGFyc2UtaW50Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnBhcnNlLWZsb2F0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci5jb25zdHJ1Y3RvcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIudG8tZml4ZWQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubnVtYmVyLnRvLXByZWNpc2lvbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIuZXBzaWxvbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIuaXMtZmluaXRlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci5pcy1pbnRlZ2VyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci5pcy1uYW4nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubnVtYmVyLmlzLXNhZmUtaW50ZWdlcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIubWF4LXNhZmUtaW50ZWdlcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIubWluLXNhZmUtaW50ZWdlcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIucGFyc2UtZmxvYXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubnVtYmVyLnBhcnNlLWludCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmFjb3NoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguYXNpbmgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5hdGFuaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmNicnQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5jbHozMicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmNvc2gnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5leHBtMScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmZyb3VuZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmh5cG90Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguaW11bCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmxvZzEwJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGgubG9nMXAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5sb2cyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguc2lnbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLnNpbmgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC50YW5oJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGgudHJ1bmMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLmZyb20tY29kZS1wb2ludCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcucmF3Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy50cmltJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuY29kZS1wb2ludC1hdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuZW5kcy13aXRoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5pbmNsdWRlcycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcucmVwZWF0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5zdGFydHMtd2l0aCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuYW5jaG9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5iaWcnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLmJsaW5rJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5ib2xkJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5maXhlZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuZm9udGNvbG9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5mb250c2l6ZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuaXRhbGljcycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcubGluaycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuc21hbGwnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLnN0cmlrZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuc3ViJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5zdXAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuZGF0ZS5ub3cnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuZGF0ZS50by1qc29uJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmRhdGUudG8taXNvLXN0cmluZycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5kYXRlLnRvLXN0cmluZycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5kYXRlLnRvLXByaW1pdGl2ZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5pcy1hcnJheScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5mcm9tJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5Lm9mJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmpvaW4nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuc2xpY2UnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuc29ydCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5mb3ItZWFjaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5tYXAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuZmlsdGVyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LnNvbWUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuZXZlcnknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkucmVkdWNlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LnJlZHVjZS1yaWdodCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5pbmRleC1vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5sYXN0LWluZGV4LW9mJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmNvcHktd2l0aGluJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmZpbGwnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuZmluZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5maW5kLWluZGV4Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LnNwZWNpZXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVnZXhwLmNvbnN0cnVjdG9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZ2V4cC5leGVjJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZ2V4cC50by1zdHJpbmcnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVnZXhwLmZsYWdzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZ2V4cC5tYXRjaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWdleHAucmVwbGFjZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWdleHAuc2VhcmNoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZ2V4cC5zcGxpdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5wcm9taXNlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hcCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zZXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYud2Vhay1tYXAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYud2Vhay1zZXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQuYXJyYXktYnVmZmVyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLmRhdGEtdmlldycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi50eXBlZC5pbnQ4LWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLnVpbnQ4LWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLnVpbnQ4LWNsYW1wZWQtYXJyYXknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQuaW50MTYtYXJyYXknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQudWludDE2LWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLmludDMyLWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLnVpbnQzMi1hcnJheScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi50eXBlZC5mbG9hdDMyLWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLmZsb2F0NjQtYXJyYXknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5hcHBseScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmNvbnN0cnVjdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmRlZmluZS1wcm9wZXJ0eScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmRlbGV0ZS1wcm9wZXJ0eScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmVudW1lcmF0ZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmdldCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmdldC1wcm90b3R5cGUtb2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5oYXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5pcy1leHRlbnNpYmxlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZmxlY3Qub3duLWtleXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5wcmV2ZW50LWV4dGVuc2lvbnMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5zZXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5zZXQtcHJvdG90eXBlLW9mJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LmFycmF5LmluY2x1ZGVzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LmFycmF5LmZsYXQtbWFwJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LmFycmF5LmZsYXR0ZW4nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc3RyaW5nLmF0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnN0cmluZy5wYWQtc3RhcnQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc3RyaW5nLnBhZC1lbmQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc3RyaW5nLnRyaW0tbGVmdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zdHJpbmcudHJpbS1yaWdodCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zdHJpbmcubWF0Y2gtYWxsJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnN5bWJvbC5hc3luYy1pdGVyYXRvcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zeW1ib2wub2JzZXJ2YWJsZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9ycycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5vYmplY3QudmFsdWVzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9iamVjdC5lbnRyaWVzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9iamVjdC5kZWZpbmUtZ2V0dGVyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9iamVjdC5kZWZpbmUtc2V0dGVyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9iamVjdC5sb29rdXAtZ2V0dGVyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9iamVjdC5sb29rdXAtc2V0dGVyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hcC50by1qc29uJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnNldC50by1qc29uJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hcC5vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zZXQub2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcud2Vhay1tYXAub2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcud2Vhay1zZXQub2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWFwLmZyb20nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc2V0LmZyb20nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcud2Vhay1tYXAuZnJvbScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy53ZWFrLXNldC5mcm9tJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lmdsb2JhbCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zeXN0ZW0uZ2xvYmFsJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LmVycm9yLmlzLWVycm9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGguY2xhbXAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5kZWctcGVyLXJhZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLmRlZ3JlZXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5mc2NhbGUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5pYWRkaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLmlzdWJoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGguaW11bGgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5yYWQtcGVyLWRlZycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLnJhZGlhbnMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5zY2FsZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLnVtdWxoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGguc2lnbmJpdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5wcm9taXNlLmZpbmFsbHknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucHJvbWlzZS50cnknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5kZWZpbmUtbWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5kZWxldGUtbWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtbWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtbWV0YWRhdGEta2V5cycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5yZWZsZWN0LmdldC1vd24tbWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtb3duLW1ldGFkYXRhLWtleXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5oYXMtbWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5oYXMtb3duLW1ldGFkYXRhJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnJlZmxlY3QubWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuYXNhcCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5vYnNlcnZhYmxlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvd2ViLnRpbWVycycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL3dlYi5pbW1lZGlhdGUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy93ZWIuZG9tLml0ZXJhYmxlJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vbW9kdWxlcy9fY29yZScpO1xuIiwiZXhwb3J0cy5yZWFkID0gZnVuY3Rpb24gKGJ1ZmZlciwgb2Zmc2V0LCBpc0xFLCBtTGVuLCBuQnl0ZXMpIHtcbiAgdmFyIGUsIG1cbiAgdmFyIGVMZW4gPSAobkJ5dGVzICogOCkgLSBtTGVuIC0gMVxuICB2YXIgZU1heCA9ICgxIDw8IGVMZW4pIC0gMVxuICB2YXIgZUJpYXMgPSBlTWF4ID4+IDFcbiAgdmFyIG5CaXRzID0gLTdcbiAgdmFyIGkgPSBpc0xFID8gKG5CeXRlcyAtIDEpIDogMFxuICB2YXIgZCA9IGlzTEUgPyAtMSA6IDFcbiAgdmFyIHMgPSBidWZmZXJbb2Zmc2V0ICsgaV1cblxuICBpICs9IGRcblxuICBlID0gcyAmICgoMSA8PCAoLW5CaXRzKSkgLSAxKVxuICBzID4+PSAoLW5CaXRzKVxuICBuQml0cyArPSBlTGVuXG4gIGZvciAoOyBuQml0cyA+IDA7IGUgPSAoZSAqIDI1NikgKyBidWZmZXJbb2Zmc2V0ICsgaV0sIGkgKz0gZCwgbkJpdHMgLT0gOCkge31cblxuICBtID0gZSAmICgoMSA8PCAoLW5CaXRzKSkgLSAxKVxuICBlID4+PSAoLW5CaXRzKVxuICBuQml0cyArPSBtTGVuXG4gIGZvciAoOyBuQml0cyA+IDA7IG0gPSAobSAqIDI1NikgKyBidWZmZXJbb2Zmc2V0ICsgaV0sIGkgKz0gZCwgbkJpdHMgLT0gOCkge31cblxuICBpZiAoZSA9PT0gMCkge1xuICAgIGUgPSAxIC0gZUJpYXNcbiAgfSBlbHNlIGlmIChlID09PSBlTWF4KSB7XG4gICAgcmV0dXJuIG0gPyBOYU4gOiAoKHMgPyAtMSA6IDEpICogSW5maW5pdHkpXG4gIH0gZWxzZSB7XG4gICAgbSA9IG0gKyBNYXRoLnBvdygyLCBtTGVuKVxuICAgIGUgPSBlIC0gZUJpYXNcbiAgfVxuICByZXR1cm4gKHMgPyAtMSA6IDEpICogbSAqIE1hdGgucG93KDIsIGUgLSBtTGVuKVxufVxuXG5leHBvcnRzLndyaXRlID0gZnVuY3Rpb24gKGJ1ZmZlciwgdmFsdWUsIG9mZnNldCwgaXNMRSwgbUxlbiwgbkJ5dGVzKSB7XG4gIHZhciBlLCBtLCBjXG4gIHZhciBlTGVuID0gKG5CeXRlcyAqIDgpIC0gbUxlbiAtIDFcbiAgdmFyIGVNYXggPSAoMSA8PCBlTGVuKSAtIDFcbiAgdmFyIGVCaWFzID0gZU1heCA+PiAxXG4gIHZhciBydCA9IChtTGVuID09PSAyMyA/IE1hdGgucG93KDIsIC0yNCkgLSBNYXRoLnBvdygyLCAtNzcpIDogMClcbiAgdmFyIGkgPSBpc0xFID8gMCA6IChuQnl0ZXMgLSAxKVxuICB2YXIgZCA9IGlzTEUgPyAxIDogLTFcbiAgdmFyIHMgPSB2YWx1ZSA8IDAgfHwgKHZhbHVlID09PSAwICYmIDEgLyB2YWx1ZSA8IDApID8gMSA6IDBcblxuICB2YWx1ZSA9IE1hdGguYWJzKHZhbHVlKVxuXG4gIGlmIChpc05hTih2YWx1ZSkgfHwgdmFsdWUgPT09IEluZmluaXR5KSB7XG4gICAgbSA9IGlzTmFOKHZhbHVlKSA/IDEgOiAwXG4gICAgZSA9IGVNYXhcbiAgfSBlbHNlIHtcbiAgICBlID0gTWF0aC5mbG9vcihNYXRoLmxvZyh2YWx1ZSkgLyBNYXRoLkxOMilcbiAgICBpZiAodmFsdWUgKiAoYyA9IE1hdGgucG93KDIsIC1lKSkgPCAxKSB7XG4gICAgICBlLS1cbiAgICAgIGMgKj0gMlxuICAgIH1cbiAgICBpZiAoZSArIGVCaWFzID49IDEpIHtcbiAgICAgIHZhbHVlICs9IHJ0IC8gY1xuICAgIH0gZWxzZSB7XG4gICAgICB2YWx1ZSArPSBydCAqIE1hdGgucG93KDIsIDEgLSBlQmlhcylcbiAgICB9XG4gICAgaWYgKHZhbHVlICogYyA+PSAyKSB7XG4gICAgICBlKytcbiAgICAgIGMgLz0gMlxuICAgIH1cblxuICAgIGlmIChlICsgZUJpYXMgPj0gZU1heCkge1xuICAgICAgbSA9IDBcbiAgICAgIGUgPSBlTWF4XG4gICAgfSBlbHNlIGlmIChlICsgZUJpYXMgPj0gMSkge1xuICAgICAgbSA9ICgodmFsdWUgKiBjKSAtIDEpICogTWF0aC5wb3coMiwgbUxlbilcbiAgICAgIGUgPSBlICsgZUJpYXNcbiAgICB9IGVsc2Uge1xuICAgICAgbSA9IHZhbHVlICogTWF0aC5wb3coMiwgZUJpYXMgLSAxKSAqIE1hdGgucG93KDIsIG1MZW4pXG4gICAgICBlID0gMFxuICAgIH1cbiAgfVxuXG4gIGZvciAoOyBtTGVuID49IDg7IGJ1ZmZlcltvZmZzZXQgKyBpXSA9IG0gJiAweGZmLCBpICs9IGQsIG0gLz0gMjU2LCBtTGVuIC09IDgpIHt9XG5cbiAgZSA9IChlIDw8IG1MZW4pIHwgbVxuICBlTGVuICs9IG1MZW5cbiAgZm9yICg7IGVMZW4gPiAwOyBidWZmZXJbb2Zmc2V0ICsgaV0gPSBlICYgMHhmZiwgaSArPSBkLCBlIC89IDI1NiwgZUxlbiAtPSA4KSB7fVxuXG4gIGJ1ZmZlcltvZmZzZXQgKyBpIC0gZF0gfD0gcyAqIDEyOFxufVxuIiwiLyoqXG4gKiBDb252ZXJ0IGFycmF5IG9mIDE2IGJ5dGUgdmFsdWVzIHRvIFVVSUQgc3RyaW5nIGZvcm1hdCBvZiB0aGUgZm9ybTpcbiAqIFhYWFhYWFhYLVhYWFgtWFhYWC1YWFhYLVhYWFhYWFhYWFhYWFxuICovXG52YXIgYnl0ZVRvSGV4ID0gW107XG5mb3IgKHZhciBpID0gMDsgaSA8IDI1NjsgKytpKSB7XG4gIGJ5dGVUb0hleFtpXSA9IChpICsgMHgxMDApLnRvU3RyaW5nKDE2KS5zdWJzdHIoMSk7XG59XG5cbmZ1bmN0aW9uIGJ5dGVzVG9VdWlkKGJ1Ziwgb2Zmc2V0KSB7XG4gIHZhciBpID0gb2Zmc2V0IHx8IDA7XG4gIHZhciBidGggPSBieXRlVG9IZXg7XG4gIC8vIGpvaW4gdXNlZCB0byBmaXggbWVtb3J5IGlzc3VlIGNhdXNlZCBieSBjb25jYXRlbmF0aW9uOiBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zMTc1I2M0XG4gIHJldHVybiAoW2J0aFtidWZbaSsrXV0sIGJ0aFtidWZbaSsrXV0sIFxuXHRidGhbYnVmW2krK11dLCBidGhbYnVmW2krK11dLCAnLScsXG5cdGJ0aFtidWZbaSsrXV0sIGJ0aFtidWZbaSsrXV0sICctJyxcblx0YnRoW2J1ZltpKytdXSwgYnRoW2J1ZltpKytdXSwgJy0nLFxuXHRidGhbYnVmW2krK11dLCBidGhbYnVmW2krK11dLCAnLScsXG5cdGJ0aFtidWZbaSsrXV0sIGJ0aFtidWZbaSsrXV0sXG5cdGJ0aFtidWZbaSsrXV0sIGJ0aFtidWZbaSsrXV0sXG5cdGJ0aFtidWZbaSsrXV0sIGJ0aFtidWZbaSsrXV1dKS5qb2luKCcnKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBieXRlc1RvVXVpZDtcbiIsIi8vIFVuaXF1ZSBJRCBjcmVhdGlvbiByZXF1aXJlcyBhIGhpZ2ggcXVhbGl0eSByYW5kb20gIyBnZW5lcmF0b3IuICBJbiB0aGVcbi8vIGJyb3dzZXIgdGhpcyBpcyBhIGxpdHRsZSBjb21wbGljYXRlZCBkdWUgdG8gdW5rbm93biBxdWFsaXR5IG9mIE1hdGgucmFuZG9tKClcbi8vIGFuZCBpbmNvbnNpc3RlbnQgc3VwcG9ydCBmb3IgdGhlIGBjcnlwdG9gIEFQSS4gIFdlIGRvIHRoZSBiZXN0IHdlIGNhbiB2aWFcbi8vIGZlYXR1cmUtZGV0ZWN0aW9uXG5cbi8vIGdldFJhbmRvbVZhbHVlcyBuZWVkcyB0byBiZSBpbnZva2VkIGluIGEgY29udGV4dCB3aGVyZSBcInRoaXNcIiBpcyBhIENyeXB0b1xuLy8gaW1wbGVtZW50YXRpb24uIEFsc28sIGZpbmQgdGhlIGNvbXBsZXRlIGltcGxlbWVudGF0aW9uIG9mIGNyeXB0byBvbiBJRTExLlxudmFyIGdldFJhbmRvbVZhbHVlcyA9ICh0eXBlb2YoY3J5cHRvKSAhPSAndW5kZWZpbmVkJyAmJiBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzICYmIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMuYmluZChjcnlwdG8pKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICh0eXBlb2YobXNDcnlwdG8pICE9ICd1bmRlZmluZWQnICYmIHR5cGVvZiB3aW5kb3cubXNDcnlwdG8uZ2V0UmFuZG9tVmFsdWVzID09ICdmdW5jdGlvbicgJiYgbXNDcnlwdG8uZ2V0UmFuZG9tVmFsdWVzLmJpbmQobXNDcnlwdG8pKTtcblxuaWYgKGdldFJhbmRvbVZhbHVlcykge1xuICAvLyBXSEFUV0cgY3J5cHRvIFJORyAtIGh0dHA6Ly93aWtpLndoYXR3Zy5vcmcvd2lraS9DcnlwdG9cbiAgdmFyIHJuZHM4ID0gbmV3IFVpbnQ4QXJyYXkoMTYpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmXG5cbiAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiB3aGF0d2dSTkcoKSB7XG4gICAgZ2V0UmFuZG9tVmFsdWVzKHJuZHM4KTtcbiAgICByZXR1cm4gcm5kczg7XG4gIH07XG59IGVsc2Uge1xuICAvLyBNYXRoLnJhbmRvbSgpLWJhc2VkIChSTkcpXG4gIC8vXG4gIC8vIElmIGFsbCBlbHNlIGZhaWxzLCB1c2UgTWF0aC5yYW5kb20oKS4gIEl0J3MgZmFzdCwgYnV0IGlzIG9mIHVuc3BlY2lmaWVkXG4gIC8vIHF1YWxpdHkuXG4gIHZhciBybmRzID0gbmV3IEFycmF5KDE2KTtcblxuICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIG1hdGhSTkcoKSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIHI7IGkgPCAxNjsgaSsrKSB7XG4gICAgICBpZiAoKGkgJiAweDAzKSA9PT0gMCkgciA9IE1hdGgucmFuZG9tKCkgKiAweDEwMDAwMDAwMDtcbiAgICAgIHJuZHNbaV0gPSByID4+PiAoKGkgJiAweDAzKSA8PCAzKSAmIDB4ZmY7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJuZHM7XG4gIH07XG59XG4iLCJ2YXIgcm5nID0gcmVxdWlyZSgnLi9saWIvcm5nJyk7XG52YXIgYnl0ZXNUb1V1aWQgPSByZXF1aXJlKCcuL2xpYi9ieXRlc1RvVXVpZCcpO1xuXG5mdW5jdGlvbiB2NChvcHRpb25zLCBidWYsIG9mZnNldCkge1xuICB2YXIgaSA9IGJ1ZiAmJiBvZmZzZXQgfHwgMDtcblxuICBpZiAodHlwZW9mKG9wdGlvbnMpID09ICdzdHJpbmcnKSB7XG4gICAgYnVmID0gb3B0aW9ucyA9PT0gJ2JpbmFyeScgPyBuZXcgQXJyYXkoMTYpIDogbnVsbDtcbiAgICBvcHRpb25zID0gbnVsbDtcbiAgfVxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICB2YXIgcm5kcyA9IG9wdGlvbnMucmFuZG9tIHx8IChvcHRpb25zLnJuZyB8fCBybmcpKCk7XG5cbiAgLy8gUGVyIDQuNCwgc2V0IGJpdHMgZm9yIHZlcnNpb24gYW5kIGBjbG9ja19zZXFfaGlfYW5kX3Jlc2VydmVkYFxuICBybmRzWzZdID0gKHJuZHNbNl0gJiAweDBmKSB8IDB4NDA7XG4gIHJuZHNbOF0gPSAocm5kc1s4XSAmIDB4M2YpIHwgMHg4MDtcblxuICAvLyBDb3B5IGJ5dGVzIHRvIGJ1ZmZlciwgaWYgcHJvdmlkZWRcbiAgaWYgKGJ1Zikge1xuICAgIGZvciAodmFyIGlpID0gMDsgaWkgPCAxNjsgKytpaSkge1xuICAgICAgYnVmW2kgKyBpaV0gPSBybmRzW2lpXTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gYnVmIHx8IGJ5dGVzVG9VdWlkKHJuZHMpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHY0O1xuIiwidmFyIGc7XG5cbi8vIFRoaXMgd29ya3MgaW4gbm9uLXN0cmljdCBtb2RlXG5nID0gKGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gdGhpcztcbn0pKCk7XG5cbnRyeSB7XG5cdC8vIFRoaXMgd29ya3MgaWYgZXZhbCBpcyBhbGxvd2VkIChzZWUgQ1NQKVxuXHRnID0gZyB8fCBuZXcgRnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpO1xufSBjYXRjaCAoZSkge1xuXHQvLyBUaGlzIHdvcmtzIGlmIHRoZSB3aW5kb3cgcmVmZXJlbmNlIGlzIGF2YWlsYWJsZVxuXHRpZiAodHlwZW9mIHdpbmRvdyA9PT0gXCJvYmplY3RcIikgZyA9IHdpbmRvdztcbn1cblxuLy8gZyBjYW4gc3RpbGwgYmUgdW5kZWZpbmVkLCBidXQgbm90aGluZyB0byBkbyBhYm91dCBpdC4uLlxuLy8gV2UgcmV0dXJuIHVuZGVmaW5lZCwgaW5zdGVhZCBvZiBub3RoaW5nIGhlcmUsIHNvIGl0J3Ncbi8vIGVhc2llciB0byBoYW5kbGUgdGhpcyBjYXNlLiBpZighZ2xvYmFsKSB7IC4uLn1cblxubW9kdWxlLmV4cG9ydHMgPSBnO1xuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cblxuaW1wb3J0IHsgTG9nIH0gZnJvbSAnLi9Mb2cuanMnO1xuaW1wb3J0IHsgVGltZXIgfSBmcm9tICcuL1RpbWVyLmpzJztcblxuY29uc3QgRGVmYXVsdEFjY2Vzc1Rva2VuRXhwaXJpbmdOb3RpZmljYXRpb25UaW1lID0gNjA7IC8vIHNlY29uZHNcblxuZXhwb3J0IGNsYXNzIEFjY2Vzc1Rva2VuRXZlbnRzIHtcblxuICAgIGNvbnN0cnVjdG9yKHtcbiAgICAgICAgYWNjZXNzVG9rZW5FeHBpcmluZ05vdGlmaWNhdGlvblRpbWUgPSBEZWZhdWx0QWNjZXNzVG9rZW5FeHBpcmluZ05vdGlmaWNhdGlvblRpbWUsXG4gICAgICAgIGFjY2Vzc1Rva2VuRXhwaXJpbmdUaW1lciA9IG5ldyBUaW1lcihcIkFjY2VzcyB0b2tlbiBleHBpcmluZ1wiKSxcbiAgICAgICAgYWNjZXNzVG9rZW5FeHBpcmVkVGltZXIgPSBuZXcgVGltZXIoXCJBY2Nlc3MgdG9rZW4gZXhwaXJlZFwiKVxuICAgIH0gPSB7fSkge1xuICAgICAgICB0aGlzLl9hY2Nlc3NUb2tlbkV4cGlyaW5nTm90aWZpY2F0aW9uVGltZSA9IGFjY2Vzc1Rva2VuRXhwaXJpbmdOb3RpZmljYXRpb25UaW1lO1xuXG4gICAgICAgIHRoaXMuX2FjY2Vzc1Rva2VuRXhwaXJpbmcgPSBhY2Nlc3NUb2tlbkV4cGlyaW5nVGltZXI7XG4gICAgICAgIHRoaXMuX2FjY2Vzc1Rva2VuRXhwaXJlZCA9IGFjY2Vzc1Rva2VuRXhwaXJlZFRpbWVyO1xuICAgIH1cblxuICAgIGxvYWQoY29udGFpbmVyKSB7XG4gICAgICAgIC8vIG9ubHkgcmVnaXN0ZXIgZXZlbnRzIGlmIHRoZXJlJ3MgYW4gYWNjZXNzIHRva2VuIGFuZCBpdCBoYXMgYW4gZXhwaXJhdGlvblxuICAgICAgICBpZiAoY29udGFpbmVyLmFjY2Vzc190b2tlbiAmJiBjb250YWluZXIuZXhwaXJlc19pbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBsZXQgZHVyYXRpb24gPSBjb250YWluZXIuZXhwaXJlc19pbjtcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIkFjY2Vzc1Rva2VuRXZlbnRzLmxvYWQ6IGFjY2VzcyB0b2tlbiBwcmVzZW50LCByZW1haW5pbmcgZHVyYXRpb246XCIsIGR1cmF0aW9uKTtcblxuICAgICAgICAgICAgaWYgKGR1cmF0aW9uID4gMCkge1xuICAgICAgICAgICAgICAgIC8vIG9ubHkgcmVnaXN0ZXIgZXhwaXJpbmcgaWYgd2Ugc3RpbGwgaGF2ZSB0aW1lXG4gICAgICAgICAgICAgICAgbGV0IGV4cGlyaW5nID0gZHVyYXRpb24gLSB0aGlzLl9hY2Nlc3NUb2tlbkV4cGlyaW5nTm90aWZpY2F0aW9uVGltZTtcbiAgICAgICAgICAgICAgICBpZiAoZXhwaXJpbmcgPD0gMCl7XG4gICAgICAgICAgICAgICAgICAgIGV4cGlyaW5nID0gMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiQWNjZXNzVG9rZW5FdmVudHMubG9hZDogcmVnaXN0ZXJpbmcgZXhwaXJpbmcgdGltZXIgaW46XCIsIGV4cGlyaW5nKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9hY2Nlc3NUb2tlbkV4cGlyaW5nLmluaXQoZXhwaXJpbmcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiQWNjZXNzVG9rZW5FdmVudHMubG9hZDogY2FuY2VsaW5nIGV4aXN0aW5nIGV4cGlyaW5nIHRpbWVyIGJlY2FzZSB3ZSdyZSBwYXN0IGV4cGlyYXRpb24uXCIpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2FjY2Vzc1Rva2VuRXhwaXJpbmcuY2FuY2VsKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGlmIGl0J3MgbmVnYXRpdmUsIGl0IHdpbGwgc3RpbGwgZmlyZVxuICAgICAgICAgICAgbGV0IGV4cGlyZWQgPSBkdXJhdGlvbiArIDE7XG4gICAgICAgICAgICBMb2cuZGVidWcoXCJBY2Nlc3NUb2tlbkV2ZW50cy5sb2FkOiByZWdpc3RlcmluZyBleHBpcmVkIHRpbWVyIGluOlwiLCBleHBpcmVkKTtcbiAgICAgICAgICAgIHRoaXMuX2FjY2Vzc1Rva2VuRXhwaXJlZC5pbml0KGV4cGlyZWQpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fYWNjZXNzVG9rZW5FeHBpcmluZy5jYW5jZWwoKTtcbiAgICAgICAgICAgIHRoaXMuX2FjY2Vzc1Rva2VuRXhwaXJlZC5jYW5jZWwoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHVubG9hZCgpIHtcbiAgICAgICAgTG9nLmRlYnVnKFwiQWNjZXNzVG9rZW5FdmVudHMudW5sb2FkOiBjYW5jZWxpbmcgZXhpc3RpbmcgYWNjZXNzIHRva2VuIHRpbWVyc1wiKTtcbiAgICAgICAgdGhpcy5fYWNjZXNzVG9rZW5FeHBpcmluZy5jYW5jZWwoKTtcbiAgICAgICAgdGhpcy5fYWNjZXNzVG9rZW5FeHBpcmVkLmNhbmNlbCgpO1xuICAgIH1cblxuICAgIGFkZEFjY2Vzc1Rva2VuRXhwaXJpbmcoY2IpIHtcbiAgICAgICAgdGhpcy5fYWNjZXNzVG9rZW5FeHBpcmluZy5hZGRIYW5kbGVyKGNiKTtcbiAgICB9XG4gICAgcmVtb3ZlQWNjZXNzVG9rZW5FeHBpcmluZyhjYikge1xuICAgICAgICB0aGlzLl9hY2Nlc3NUb2tlbkV4cGlyaW5nLnJlbW92ZUhhbmRsZXIoY2IpO1xuICAgIH1cblxuICAgIGFkZEFjY2Vzc1Rva2VuRXhwaXJlZChjYikge1xuICAgICAgICB0aGlzLl9hY2Nlc3NUb2tlbkV4cGlyZWQuYWRkSGFuZGxlcihjYik7XG4gICAgfVxuICAgIHJlbW92ZUFjY2Vzc1Rva2VuRXhwaXJlZChjYikge1xuICAgICAgICB0aGlzLl9hY2Nlc3NUb2tlbkV4cGlyZWQucmVtb3ZlSGFuZGxlcihjYik7XG4gICAgfVxufVxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cblxuaW1wb3J0IHsgTG9nIH0gZnJvbSAnLi9Mb2cuanMnO1xuXG5jb25zdCBEZWZhdWx0SW50ZXJ2YWwgPSAyMDAwO1xuXG5leHBvcnQgY2xhc3MgQ2hlY2tTZXNzaW9uSUZyYW1lIHtcbiAgICBjb25zdHJ1Y3RvcihjYWxsYmFjaywgY2xpZW50X2lkLCB1cmwsIGludGVydmFsLCBzdG9wT25FcnJvciA9IHRydWUpIHtcbiAgICAgICAgdGhpcy5fY2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICAgICAgdGhpcy5fY2xpZW50X2lkID0gY2xpZW50X2lkO1xuICAgICAgICB0aGlzLl91cmwgPSB1cmw7XG4gICAgICAgIHRoaXMuX2ludGVydmFsID0gaW50ZXJ2YWwgfHwgRGVmYXVsdEludGVydmFsO1xuICAgICAgICB0aGlzLl9zdG9wT25FcnJvciA9IHN0b3BPbkVycm9yO1xuXG4gICAgICAgIHZhciBpZHggPSB1cmwuaW5kZXhPZihcIi9cIiwgdXJsLmluZGV4T2YoXCIvL1wiKSArIDIpO1xuICAgICAgICB0aGlzLl9mcmFtZV9vcmlnaW4gPSB1cmwuc3Vic3RyKDAsIGlkeCk7XG5cbiAgICAgICAgdGhpcy5fZnJhbWUgPSB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlmcmFtZVwiKTtcblxuICAgICAgICAvLyBzaG90Z3VuIGFwcHJvYWNoXG4gICAgICAgIHRoaXMuX2ZyYW1lLnN0eWxlLnZpc2liaWxpdHkgPSBcImhpZGRlblwiO1xuICAgICAgICB0aGlzLl9mcmFtZS5zdHlsZS5wb3NpdGlvbiA9IFwiYWJzb2x1dGVcIjtcbiAgICAgICAgdGhpcy5fZnJhbWUuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xuICAgICAgICB0aGlzLl9mcmFtZS5zdHlsZS53aWR0aCA9IDA7XG4gICAgICAgIHRoaXMuX2ZyYW1lLnN0eWxlLmhlaWdodCA9IDA7XG5cbiAgICAgICAgdGhpcy5fZnJhbWUuc3JjID0gdXJsO1xuICAgIH1cbiAgICBsb2FkKCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2ZyYW1lLm9ubG9hZCA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHdpbmRvdy5kb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRoaXMuX2ZyYW1lKTtcbiAgICAgICAgICAgIHRoaXMuX2JvdW5kTWVzc2FnZUV2ZW50ID0gdGhpcy5fbWVzc2FnZS5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIHRoaXMuX2JvdW5kTWVzc2FnZUV2ZW50LCBmYWxzZSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBfbWVzc2FnZShlKSB7XG4gICAgICAgIGlmIChlLm9yaWdpbiA9PT0gdGhpcy5fZnJhbWVfb3JpZ2luICYmXG4gICAgICAgICAgICBlLnNvdXJjZSA9PT0gdGhpcy5fZnJhbWUuY29udGVudFdpbmRvd1xuICAgICAgICApIHtcbiAgICAgICAgICAgIGlmIChlLmRhdGEgPT09IFwiZXJyb3JcIikge1xuICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIkNoZWNrU2Vzc2lvbklGcmFtZTogZXJyb3IgbWVzc2FnZSBmcm9tIGNoZWNrIHNlc3Npb24gb3AgaWZyYW1lXCIpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9zdG9wT25FcnJvcikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0b3AoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChlLmRhdGEgPT09IFwiY2hhbmdlZFwiKSB7XG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiQ2hlY2tTZXNzaW9uSUZyYW1lOiBjaGFuZ2VkIG1lc3NhZ2UgZnJvbSBjaGVjayBzZXNzaW9uIG9wIGlmcmFtZVwiKTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0b3AoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9jYWxsYmFjaygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiQ2hlY2tTZXNzaW9uSUZyYW1lOiBcIiArIGUuZGF0YSArIFwiIG1lc3NhZ2UgZnJvbSBjaGVjayBzZXNzaW9uIG9wIGlmcmFtZVwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGFydChzZXNzaW9uX3N0YXRlKSB7XG4gICAgICAgIGlmICh0aGlzLl9zZXNzaW9uX3N0YXRlICE9PSBzZXNzaW9uX3N0YXRlKSB7XG4gICAgICAgICAgICBMb2cuZGVidWcoXCJDaGVja1Nlc3Npb25JRnJhbWUuc3RhcnRcIik7XG5cbiAgICAgICAgICAgIHRoaXMuc3RvcCgpO1xuXG4gICAgICAgICAgICB0aGlzLl9zZXNzaW9uX3N0YXRlID0gc2Vzc2lvbl9zdGF0ZTtcblxuICAgICAgICAgICAgbGV0IHNlbmQgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZnJhbWUuY29udGVudFdpbmRvdy5wb3N0TWVzc2FnZSh0aGlzLl9jbGllbnRfaWQgKyBcIiBcIiArIHRoaXMuX3Nlc3Npb25fc3RhdGUsIHRoaXMuX2ZyYW1lX29yaWdpbik7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyB0cmlnZ2VyIG5vd1xuICAgICAgICAgICAgc2VuZCgpO1xuXG4gICAgICAgICAgICAvLyBhbmQgc2V0dXAgdGltZXJcbiAgICAgICAgICAgIHRoaXMuX3RpbWVyID0gd2luZG93LnNldEludGVydmFsKHNlbmQsIHRoaXMuX2ludGVydmFsKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0b3AoKSB7XG4gICAgICAgIHRoaXMuX3Nlc3Npb25fc3RhdGUgPSBudWxsO1xuXG4gICAgICAgIGlmICh0aGlzLl90aW1lcikge1xuICAgICAgICAgICAgTG9nLmRlYnVnKFwiQ2hlY2tTZXNzaW9uSUZyYW1lLnN0b3BcIik7XG5cbiAgICAgICAgICAgIHdpbmRvdy5jbGVhckludGVydmFsKHRoaXMuX3RpbWVyKTtcbiAgICAgICAgICAgIHRoaXMuX3RpbWVyID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXG5cbmltcG9ydCB7IENvcmRvdmFQb3B1cFdpbmRvdyB9IGZyb20gJy4vQ29yZG92YVBvcHVwV2luZG93LmpzJztcblxuZXhwb3J0IGNsYXNzIENvcmRvdmFJRnJhbWVOYXZpZ2F0b3Ige1xuXG4gICAgcHJlcGFyZShwYXJhbXMpIHtcbiAgICAgICAgcGFyYW1zLnBvcHVwV2luZG93RmVhdHVyZXMgPSAnaGlkZGVuPXllcyc7XG4gICAgICAgIGxldCBwb3B1cCA9IG5ldyBDb3Jkb3ZhUG9wdXBXaW5kb3cocGFyYW1zKTtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShwb3B1cCk7XG4gICAgfVxufVxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cblxuaW1wb3J0IHsgQ29yZG92YVBvcHVwV2luZG93IH0gZnJvbSAnLi9Db3Jkb3ZhUG9wdXBXaW5kb3cuanMnO1xuXG5leHBvcnQgY2xhc3MgQ29yZG92YVBvcHVwTmF2aWdhdG9yIHtcblxuICAgIHByZXBhcmUocGFyYW1zKSB7XG4gICAgICAgIGxldCBwb3B1cCA9IG5ldyBDb3Jkb3ZhUG9wdXBXaW5kb3cocGFyYW1zKTtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShwb3B1cCk7XG4gICAgfVxufVxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cblxuaW1wb3J0IHsgTG9nIH0gZnJvbSAnLi9Mb2cuanMnO1xuXG5jb25zdCBEZWZhdWx0UG9wdXBGZWF0dXJlcyA9ICdsb2NhdGlvbj1ubyx0b29sYmFyPW5vLHpvb209bm8nO1xuY29uc3QgRGVmYXVsdFBvcHVwVGFyZ2V0ID0gXCJfYmxhbmtcIjtcblxuZXhwb3J0IGNsYXNzIENvcmRvdmFQb3B1cFdpbmRvdyB7XG5cbiAgICBjb25zdHJ1Y3RvcihwYXJhbXMpIHtcbiAgICAgICAgdGhpcy5fcHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX3Jlc29sdmUgPSByZXNvbHZlO1xuICAgICAgICAgICAgdGhpcy5fcmVqZWN0ID0gcmVqZWN0O1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmZlYXR1cmVzID0gcGFyYW1zLnBvcHVwV2luZG93RmVhdHVyZXMgfHwgRGVmYXVsdFBvcHVwRmVhdHVyZXM7XG4gICAgICAgIHRoaXMudGFyZ2V0ID0gcGFyYW1zLnBvcHVwV2luZG93VGFyZ2V0IHx8IERlZmF1bHRQb3B1cFRhcmdldDtcbiAgICAgICAgXG4gICAgICAgIHRoaXMucmVkaXJlY3RfdXJpID0gcGFyYW1zLnN0YXJ0VXJsO1xuICAgICAgICBMb2cuZGVidWcoXCJDb3Jkb3ZhUG9wdXBXaW5kb3cuY3RvcjogcmVkaXJlY3RfdXJpOiBcIiArIHRoaXMucmVkaXJlY3RfdXJpKTtcbiAgICB9XG5cbiAgICBfaXNJbkFwcEJyb3dzZXJJbnN0YWxsZWQoY29yZG92YU1ldGFkYXRhKSB7XG4gICAgICAgIHJldHVybiBbXCJjb3Jkb3ZhLXBsdWdpbi1pbmFwcGJyb3dzZXJcIiwgXCJjb3Jkb3ZhLXBsdWdpbi1pbmFwcGJyb3dzZXIuaW5hcHBicm93c2VyXCIsIFwib3JnLmFwYWNoZS5jb3Jkb3ZhLmluYXBwYnJvd3NlclwiXS5zb21lKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gY29yZG92YU1ldGFkYXRhLmhhc093blByb3BlcnR5KG5hbWUpXG4gICAgICAgIH0pXG4gICAgfVxuICAgIFxuICAgIG5hdmlnYXRlKHBhcmFtcykge1xuICAgICAgICBpZiAoIXBhcmFtcyB8fCAhcGFyYW1zLnVybCkge1xuICAgICAgICAgICAgdGhpcy5fZXJyb3IoXCJObyB1cmwgcHJvdmlkZWRcIik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIXdpbmRvdy5jb3Jkb3ZhKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Vycm9yKFwiY29yZG92YSBpcyB1bmRlZmluZWRcIilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdmFyIGNvcmRvdmFNZXRhZGF0YSA9IHdpbmRvdy5jb3Jkb3ZhLnJlcXVpcmUoXCJjb3Jkb3ZhL3BsdWdpbl9saXN0XCIpLm1ldGFkYXRhO1xuICAgICAgICAgICAgaWYgKHRoaXMuX2lzSW5BcHBCcm93c2VySW5zdGFsbGVkKGNvcmRvdmFNZXRhZGF0YSkgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Vycm9yKFwiSW5BcHBCcm93c2VyIHBsdWdpbiBub3QgZm91bmRcIilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3BvcHVwID0gY29yZG92YS5JbkFwcEJyb3dzZXIub3BlbihwYXJhbXMudXJsLCB0aGlzLnRhcmdldCwgdGhpcy5mZWF0dXJlcyk7XG4gICAgICAgICAgICBpZiAodGhpcy5fcG9wdXApIHtcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJDb3Jkb3ZhUG9wdXBXaW5kb3cubmF2aWdhdGU6IHBvcHVwIHN1Y2Nlc3NmdWxseSBjcmVhdGVkXCIpO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIHRoaXMuX2V4aXRDYWxsYmFja0V2ZW50ID0gdGhpcy5fZXhpdENhbGxiYWNrLmJpbmQodGhpcyk7IFxuICAgICAgICAgICAgICAgIHRoaXMuX2xvYWRTdGFydENhbGxiYWNrRXZlbnQgPSB0aGlzLl9sb2FkU3RhcnRDYWxsYmFjay5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIHRoaXMuX3BvcHVwLmFkZEV2ZW50TGlzdGVuZXIoXCJleGl0XCIsIHRoaXMuX2V4aXRDYWxsYmFja0V2ZW50LCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fcG9wdXAuYWRkRXZlbnRMaXN0ZW5lcihcImxvYWRzdGFydFwiLCB0aGlzLl9sb2FkU3RhcnRDYWxsYmFja0V2ZW50LCBmYWxzZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX2Vycm9yKFwiRXJyb3Igb3BlbmluZyBwb3B1cCB3aW5kb3dcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMucHJvbWlzZTtcbiAgICB9XG5cbiAgICBnZXQgcHJvbWlzZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Byb21pc2U7XG4gICAgfVxuXG4gICAgX2xvYWRTdGFydENhbGxiYWNrKGV2ZW50KSB7XG4gICAgICAgIGlmIChldmVudC51cmwuaW5kZXhPZih0aGlzLnJlZGlyZWN0X3VyaSkgPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuX3N1Y2Nlc3MoeyB1cmw6IGV2ZW50LnVybCB9KTtcbiAgICAgICAgfSAgICBcbiAgICB9XG4gICAgX2V4aXRDYWxsYmFjayhtZXNzYWdlKSB7XG4gICAgICAgIHRoaXMuX2Vycm9yKG1lc3NhZ2UpOyAgICBcbiAgICB9XG4gICAgXG4gICAgX3N1Y2Nlc3MoZGF0YSkge1xuICAgICAgICB0aGlzLl9jbGVhbnVwKCk7XG5cbiAgICAgICAgTG9nLmRlYnVnKFwiQ29yZG92YVBvcHVwV2luZG93OiBTdWNjZXNzZnVsIHJlc3BvbnNlIGZyb20gY29yZG92YSBwb3B1cCB3aW5kb3dcIik7XG4gICAgICAgIHRoaXMuX3Jlc29sdmUoZGF0YSk7XG4gICAgfVxuICAgIF9lcnJvcihtZXNzYWdlKSB7XG4gICAgICAgIHRoaXMuX2NsZWFudXAoKTtcblxuICAgICAgICBMb2cuZXJyb3IobWVzc2FnZSk7XG4gICAgICAgIHRoaXMuX3JlamVjdChuZXcgRXJyb3IobWVzc2FnZSkpO1xuICAgIH1cblxuICAgIGNsb3NlKCkge1xuICAgICAgICB0aGlzLl9jbGVhbnVwKCk7XG4gICAgfVxuXG4gICAgX2NsZWFudXAoKSB7XG4gICAgICAgIGlmICh0aGlzLl9wb3B1cCl7XG4gICAgICAgICAgICBMb2cuZGVidWcoXCJDb3Jkb3ZhUG9wdXBXaW5kb3c6IGNsZWFuaW5nIHVwIHBvcHVwXCIpO1xuICAgICAgICAgICAgdGhpcy5fcG9wdXAucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImV4aXRcIiwgdGhpcy5fZXhpdENhbGxiYWNrRXZlbnQsIGZhbHNlKTtcbiAgICAgICAgICAgIHRoaXMuX3BvcHVwLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJsb2Fkc3RhcnRcIiwgdGhpcy5fbG9hZFN0YXJ0Q2FsbGJhY2tFdmVudCwgZmFsc2UpO1xuICAgICAgICAgICAgdGhpcy5fcG9wdXAuY2xvc2UoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9wb3B1cCA9IG51bGw7XG4gICAgfVxufVxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cblxuaW1wb3J0IHsgTG9nIH0gZnJvbSAnLi9Mb2cuanMnO1xuXG5leHBvcnQgY2xhc3MgRXJyb3JSZXNwb25zZSBleHRlbmRzIEVycm9yIHtcbiAgICBjb25zdHJ1Y3Rvcih7ZXJyb3IsIGVycm9yX2Rlc2NyaXB0aW9uLCBlcnJvcl91cmksIHN0YXRlLCBzZXNzaW9uX3N0YXRlfT17fVxuICAgICkge1xuICAgICAgICAgaWYgKCFlcnJvcil7XG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJObyBlcnJvciBwYXNzZWQgdG8gRXJyb3JSZXNwb25zZVwiKTtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImVycm9yXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgc3VwZXIoZXJyb3JfZGVzY3JpcHRpb24gfHwgZXJyb3IpO1xuXG4gICAgICAgIHRoaXMubmFtZSA9IFwiRXJyb3JSZXNwb25zZVwiO1xuXG4gICAgICAgIHRoaXMuZXJyb3IgPSBlcnJvcjtcbiAgICAgICAgdGhpcy5lcnJvcl9kZXNjcmlwdGlvbiA9IGVycm9yX2Rlc2NyaXB0aW9uO1xuICAgICAgICB0aGlzLmVycm9yX3VyaSA9IGVycm9yX3VyaTtcblxuICAgICAgICB0aGlzLnN0YXRlID0gc3RhdGU7XG4gICAgICAgIHRoaXMuc2Vzc2lvbl9zdGF0ZSA9IHNlc3Npb25fc3RhdGU7XG4gICAgfVxufVxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cblxuaW1wb3J0IHsgTG9nIH0gZnJvbSAnLi9Mb2cuanMnO1xuXG5leHBvcnQgY2xhc3MgRXZlbnQge1xuXG4gICAgY29uc3RydWN0b3IobmFtZSkge1xuICAgICAgICB0aGlzLl9uYW1lID0gbmFtZTtcbiAgICAgICAgdGhpcy5fY2FsbGJhY2tzID0gW107XG4gICAgfVxuXG4gICAgYWRkSGFuZGxlcihjYikge1xuICAgICAgICB0aGlzLl9jYWxsYmFja3MucHVzaChjYik7XG4gICAgfVxuXG4gICAgcmVtb3ZlSGFuZGxlcihjYikge1xuICAgICAgICB2YXIgaWR4ID0gdGhpcy5fY2FsbGJhY2tzLmZpbmRJbmRleChpdGVtID0+IGl0ZW0gPT09IGNiKTtcbiAgICAgICAgaWYgKGlkeCA+PSAwKSB7XG4gICAgICAgICAgICB0aGlzLl9jYWxsYmFja3Muc3BsaWNlKGlkeCwgMSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByYWlzZSguLi5wYXJhbXMpIHtcbiAgICAgICAgTG9nLmRlYnVnKFwiRXZlbnQ6IFJhaXNpbmcgZXZlbnQ6IFwiICsgdGhpcy5fbmFtZSk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5fY2FsbGJhY2tzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB0aGlzLl9jYWxsYmFja3NbaV0oLi4ucGFyYW1zKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXG5cbmNvbnN0IHRpbWVyID0ge1xuICAgIHNldEludGVydmFsOiBmdW5jdGlvbiAoY2IsIGR1cmF0aW9uKSB7XG4gICAgICAgIHJldHVybiBzZXRJbnRlcnZhbChjYiwgZHVyYXRpb24pO1xuICAgIH0sXG4gICAgY2xlYXJJbnRlcnZhbDogZnVuY3Rpb24gKGhhbmRsZSkge1xuICAgICAgICByZXR1cm4gY2xlYXJJbnRlcnZhbChoYW5kbGUpO1xuICAgIH1cbn07XG5cbmxldCB0ZXN0aW5nID0gZmFsc2U7XG5sZXQgcmVxdWVzdCA9IG51bGw7XG5cbmV4cG9ydCBjbGFzcyBHbG9iYWwge1xuXG4gICAgc3RhdGljIF90ZXN0aW5nKCkge1xuICAgICAgICB0ZXN0aW5nID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0IGxvY2F0aW9uKCkge1xuICAgICAgICBpZiAoIXRlc3RpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBsb2NhdGlvbjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBnZXQgbG9jYWxTdG9yYWdlKCkge1xuICAgICAgICBpZiAoIXRlc3RpbmcgJiYgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHJldHVybiBsb2NhbFN0b3JhZ2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0IHNlc3Npb25TdG9yYWdlKCkge1xuICAgICAgICBpZiAoIXRlc3RpbmcgJiYgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHJldHVybiBzZXNzaW9uU3RvcmFnZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBzZXRYTUxIdHRwUmVxdWVzdChuZXdSZXF1ZXN0KSB7XG4gICAgICAgIHJlcXVlc3QgPSBuZXdSZXF1ZXN0O1xuICAgIH1cblxuICAgIHN0YXRpYyBnZXQgWE1MSHR0cFJlcXVlc3QoKSB7XG4gICAgICAgIGlmICghdGVzdGluZyAmJiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgcmV0dXJuIHJlcXVlc3QgfHwgWE1MSHR0cFJlcXVlc3Q7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0IHRpbWVyKCkge1xuICAgICAgICBpZiAoIXRlc3RpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiB0aW1lcjtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXG5cbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcbmltcG9ydCB7IElGcmFtZVdpbmRvdyB9IGZyb20gJy4vSUZyYW1lV2luZG93LmpzJztcblxuZXhwb3J0IGNsYXNzIElGcmFtZU5hdmlnYXRvciB7XG5cbiAgICBwcmVwYXJlKHBhcmFtcykge1xuICAgICAgICBsZXQgZnJhbWUgPSBuZXcgSUZyYW1lV2luZG93KHBhcmFtcyk7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZnJhbWUpO1xuICAgIH1cblxuICAgIGNhbGxiYWNrKHVybCkge1xuICAgICAgICBMb2cuZGVidWcoXCJJRnJhbWVOYXZpZ2F0b3IuY2FsbGJhY2tcIik7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIElGcmFtZVdpbmRvdy5ub3RpZnlQYXJlbnQodXJsKTtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGUpO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cblxuaW1wb3J0IHsgTG9nIH0gZnJvbSAnLi9Mb2cuanMnO1xuXG5jb25zdCBEZWZhdWx0VGltZW91dCA9IDEwMDAwO1xuXG5leHBvcnQgY2xhc3MgSUZyYW1lV2luZG93IHtcblxuICAgIGNvbnN0cnVjdG9yKHBhcmFtcykge1xuICAgICAgICB0aGlzLl9wcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fcmVzb2x2ZSA9IHJlc29sdmU7XG4gICAgICAgICAgICB0aGlzLl9yZWplY3QgPSByZWplY3Q7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX2JvdW5kTWVzc2FnZUV2ZW50ID0gdGhpcy5fbWVzc2FnZS5iaW5kKHRoaXMpO1xuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgdGhpcy5fYm91bmRNZXNzYWdlRXZlbnQsIGZhbHNlKTtcblxuICAgICAgICB0aGlzLl9mcmFtZSA9IHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaWZyYW1lXCIpO1xuXG4gICAgICAgIC8vIHNob3RndW4gYXBwcm9hY2hcbiAgICAgICAgdGhpcy5fZnJhbWUuc3R5bGUudmlzaWJpbGl0eSA9IFwiaGlkZGVuXCI7XG4gICAgICAgIHRoaXMuX2ZyYW1lLnN0eWxlLnBvc2l0aW9uID0gXCJhYnNvbHV0ZVwiO1xuICAgICAgICB0aGlzLl9mcmFtZS5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XG4gICAgICAgIHRoaXMuX2ZyYW1lLnN0eWxlLndpZHRoID0gMDtcbiAgICAgICAgdGhpcy5fZnJhbWUuc3R5bGUuaGVpZ2h0ID0gMDtcblxuICAgICAgICB3aW5kb3cuZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGlzLl9mcmFtZSk7XG4gICAgfVxuXG4gICAgbmF2aWdhdGUocGFyYW1zKSB7XG4gICAgICAgIGlmICghcGFyYW1zIHx8ICFwYXJhbXMudXJsKSB7XG4gICAgICAgICAgICB0aGlzLl9lcnJvcihcIk5vIHVybCBwcm92aWRlZFwiKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGxldCB0aW1lb3V0ID0gcGFyYW1zLnNpbGVudFJlcXVlc3RUaW1lb3V0IHx8IERlZmF1bHRUaW1lb3V0O1xuICAgICAgICAgICAgTG9nLmRlYnVnKFwiSUZyYW1lV2luZG93Lm5hdmlnYXRlOiBVc2luZyB0aW1lb3V0IG9mOlwiLCB0aW1lb3V0KTtcbiAgICAgICAgICAgIHRoaXMuX3RpbWVyID0gd2luZG93LnNldFRpbWVvdXQodGhpcy5fdGltZW91dC5iaW5kKHRoaXMpLCB0aW1lb3V0KTtcbiAgICAgICAgICAgIHRoaXMuX2ZyYW1lLnNyYyA9IHBhcmFtcy51cmw7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5wcm9taXNlO1xuICAgIH1cblxuICAgIGdldCBwcm9taXNlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHJvbWlzZTtcbiAgICB9XG5cbiAgICBfc3VjY2VzcyhkYXRhKSB7XG4gICAgICAgIHRoaXMuX2NsZWFudXAoKTtcblxuICAgICAgICBMb2cuZGVidWcoXCJJRnJhbWVXaW5kb3c6IFN1Y2Nlc3NmdWwgcmVzcG9uc2UgZnJvbSBmcmFtZSB3aW5kb3dcIik7XG4gICAgICAgIHRoaXMuX3Jlc29sdmUoZGF0YSk7XG4gICAgfVxuICAgIF9lcnJvcihtZXNzYWdlKSB7XG4gICAgICAgIHRoaXMuX2NsZWFudXAoKTtcblxuICAgICAgICBMb2cuZXJyb3IobWVzc2FnZSk7XG4gICAgICAgIHRoaXMuX3JlamVjdChuZXcgRXJyb3IobWVzc2FnZSkpO1xuICAgIH1cblxuICAgIGNsb3NlKCkge1xuICAgICAgICB0aGlzLl9jbGVhbnVwKCk7XG4gICAgfVxuXG4gICAgX2NsZWFudXAoKSB7XG4gICAgICAgIGlmICh0aGlzLl9mcmFtZSkge1xuICAgICAgICAgICAgTG9nLmRlYnVnKFwiSUZyYW1lV2luZG93OiBjbGVhbnVwXCIpO1xuXG4gICAgICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgdGhpcy5fYm91bmRNZXNzYWdlRXZlbnQsIGZhbHNlKTtcbiAgICAgICAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQodGhpcy5fdGltZXIpO1xuICAgICAgICAgICAgd2luZG93LmRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodGhpcy5fZnJhbWUpO1xuXG4gICAgICAgICAgICB0aGlzLl90aW1lciA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLl9mcmFtZSA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLl9ib3VuZE1lc3NhZ2VFdmVudCA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfdGltZW91dCgpIHtcbiAgICAgICAgTG9nLmRlYnVnKFwiSUZyYW1lV2luZG93LnRpbWVvdXRcIik7XG4gICAgICAgIHRoaXMuX2Vycm9yKFwiRnJhbWUgd2luZG93IHRpbWVkIG91dFwiKTtcbiAgICB9XG5cbiAgICBfbWVzc2FnZShlKSB7XG4gICAgICAgIExvZy5kZWJ1ZyhcIklGcmFtZVdpbmRvdy5tZXNzYWdlXCIpO1xuXG4gICAgICAgIGlmICh0aGlzLl90aW1lciAmJlxuICAgICAgICAgICAgZS5vcmlnaW4gPT09IHRoaXMuX29yaWdpbiAmJlxuICAgICAgICAgICAgZS5zb3VyY2UgPT09IHRoaXMuX2ZyYW1lLmNvbnRlbnRXaW5kb3dcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBsZXQgdXJsID0gZS5kYXRhO1xuICAgICAgICAgICAgaWYgKHVybCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3N1Y2Nlc3MoeyB1cmw6IHVybCB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX2Vycm9yKFwiSW52YWxpZCByZXNwb25zZSBmcm9tIGZyYW1lXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0IF9vcmlnaW4oKSB7XG4gICAgICAgIHJldHVybiBsb2NhdGlvbi5wcm90b2NvbCArIFwiLy9cIiArIGxvY2F0aW9uLmhvc3Q7XG4gICAgfVxuXG4gICAgc3RhdGljIG5vdGlmeVBhcmVudCh1cmwpIHtcbiAgICAgICAgTG9nLmRlYnVnKFwiSUZyYW1lV2luZG93Lm5vdGlmeVBhcmVudFwiKTtcbiAgICAgICAgaWYgKHdpbmRvdy5mcmFtZUVsZW1lbnQpIHtcbiAgICAgICAgICAgIHVybCA9IHVybCB8fCB3aW5kb3cubG9jYXRpb24uaHJlZjtcbiAgICAgICAgICAgIGlmICh1cmwpIHtcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJJRnJhbWVXaW5kb3cubm90aWZ5UGFyZW50OiBwb3N0aW5nIHVybCBtZXNzYWdlIHRvIHBhcmVudFwiKTtcbiAgICAgICAgICAgICAgICB3aW5kb3cucGFyZW50LnBvc3RNZXNzYWdlKHVybCwgbG9jYXRpb24ucHJvdG9jb2wgKyBcIi8vXCIgKyBsb2NhdGlvbi5ob3N0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXG5cbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcblxuZXhwb3J0IGNsYXNzIEluTWVtb3J5V2ViU3RvcmFnZXtcbiAgICBjb25zdHJ1Y3Rvcigpe1xuICAgICAgICB0aGlzLl9kYXRhID0ge307XG4gICAgfVxuXG4gICAgZ2V0SXRlbShrZXkpIHtcbiAgICAgICAgTG9nLmRlYnVnKFwiSW5NZW1vcnlXZWJTdG9yYWdlLmdldEl0ZW1cIiwga2V5KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGFba2V5XTtcbiAgICB9XG5cbiAgICBzZXRJdGVtKGtleSwgdmFsdWUpe1xuICAgICAgICBMb2cuZGVidWcoXCJJbk1lbW9yeVdlYlN0b3JhZ2Uuc2V0SXRlbVwiLCBrZXkpO1xuICAgICAgICB0aGlzLl9kYXRhW2tleV0gPSB2YWx1ZTtcbiAgICB9XG5cbiAgICByZW1vdmVJdGVtKGtleSl7XG4gICAgICAgIExvZy5kZWJ1ZyhcIkluTWVtb3J5V2ViU3RvcmFnZS5yZW1vdmVJdGVtXCIsIGtleSk7XG4gICAgICAgIGRlbGV0ZSB0aGlzLl9kYXRhW2tleV07XG4gICAgfVxuXG4gICAgZ2V0IGxlbmd0aCgpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMuX2RhdGEpLmxlbmd0aDtcbiAgICB9XG5cbiAgICBrZXkoaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMuX2RhdGEpW2luZGV4XTtcbiAgICB9XG59XG4iLCJpbXBvcnQgeyBqd3MsIEtleVV0aWwsIFg1MDksIGNyeXB0bywgaGV4dG9iNjR1LCBiNjR0b2hleCwgQWxsb3dlZFNpZ25pbmdBbGdzIH0gZnJvbSAnLi9jcnlwdG8vanNyc2FzaWduJztcbmltcG9ydCBnZXRKb3NlVXRpbCBmcm9tICcuL0pvc2VVdGlsSW1wbCc7XG5cbmV4cG9ydCBjb25zdCBKb3NlVXRpbCA9IGdldEpvc2VVdGlsKHsgandzLCBLZXlVdGlsLCBYNTA5LCBjcnlwdG8sIGhleHRvYjY0dSwgYjY0dG9oZXgsIEFsbG93ZWRTaWduaW5nQWxncyB9KTtcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXG5cbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0Sm9zZVV0aWwoeyBqd3MsIEtleVV0aWwsIFg1MDksIGNyeXB0bywgaGV4dG9iNjR1LCBiNjR0b2hleCwgQWxsb3dlZFNpZ25pbmdBbGdzIH0pIHtcbiAgICByZXR1cm4gY2xhc3MgSm9zZVV0aWwge1xuXG4gICAgICAgIHN0YXRpYyBwYXJzZUp3dChqd3QpIHtcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIkpvc2VVdGlsLnBhcnNlSnd0XCIpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICB2YXIgdG9rZW4gPSBqd3MuSldTLnBhcnNlKGp3dCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyOiB0b2tlbi5oZWFkZXJPYmosXG4gICAgICAgICAgICAgICAgICAgIHBheWxvYWQ6IHRva2VuLnBheWxvYWRPYmpcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgTG9nLmVycm9yKGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgc3RhdGljIHZhbGlkYXRlSnd0KGp3dCwga2V5LCBpc3N1ZXIsIGF1ZGllbmNlLCBjbG9ja1NrZXcsIG5vdywgdGltZUluc2Vuc2l0aXZlKSB7XG4gICAgICAgICAgICBMb2cuZGVidWcoXCJKb3NlVXRpbC52YWxpZGF0ZUp3dFwiKTtcblxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBpZiAoa2V5Lmt0eSA9PT0gXCJSU0FcIikge1xuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5LmUgJiYga2V5Lm4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleSA9IEtleVV0aWwuZ2V0S2V5KGtleSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoa2V5Lng1YyAmJiBrZXkueDVjLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhleCA9IGI2NHRvaGV4KGtleS54NWNbMF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAga2V5ID0gWDUwOS5nZXRQdWJsaWNLZXlGcm9tQ2VydEhleChoZXgpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiSm9zZVV0aWwudmFsaWRhdGVKd3Q6IFJTQSBrZXkgbWlzc2luZyBrZXkgbWF0ZXJpYWxcIiwga2V5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJSU0Ega2V5IG1pc3Npbmcga2V5IG1hdGVyaWFsXCIpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoa2V5Lmt0eSA9PT0gXCJFQ1wiKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChrZXkuY3J2ICYmIGtleS54ICYmIGtleS55KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBrZXkgPSBLZXlVdGlsLmdldEtleShrZXkpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiSm9zZVV0aWwudmFsaWRhdGVKd3Q6IEVDIGtleSBtaXNzaW5nIGtleSBtYXRlcmlhbFwiLCBrZXkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIkVDIGtleSBtaXNzaW5nIGtleSBtYXRlcmlhbFwiKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJKb3NlVXRpbC52YWxpZGF0ZUp3dDogVW5zdXBwb3J0ZWQga2V5IHR5cGVcIiwga2V5ICYmIGtleS5rdHkpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiVW5zdXBwb3J0ZWQga2V5IHR5cGU6IFwiICsga2V5ICYmIGtleS5rdHkpKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gSm9zZVV0aWwuX3ZhbGlkYXRlSnd0KGp3dCwga2V5LCBpc3N1ZXIsIGF1ZGllbmNlLCBjbG9ja1NrZXcsIG5vdywgdGltZUluc2Vuc2l0aXZlKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBMb2cuZXJyb3IoZSAmJiBlLm1lc3NhZ2UgfHwgZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KFwiSldUIHZhbGlkYXRpb24gZmFpbGVkXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgc3RhdGljIHZhbGlkYXRlSnd0QXR0cmlidXRlcyhqd3QsIGlzc3VlciwgYXVkaWVuY2UsIGNsb2NrU2tldywgbm93LCB0aW1lSW5zZW5zaXRpdmUpIHtcbiAgICAgICAgICAgIGlmICghY2xvY2tTa2V3KSB7XG4gICAgICAgICAgICAgICAgY2xvY2tTa2V3ID0gMDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFub3cpIHtcbiAgICAgICAgICAgICAgICBub3cgPSBwYXJzZUludChEYXRlLm5vdygpIC8gMTAwMCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBwYXlsb2FkID0gSm9zZVV0aWwucGFyc2VKd3Qoand0KS5wYXlsb2FkO1xuXG4gICAgICAgICAgICBpZiAoIXBheWxvYWQuaXNzKSB7XG4gICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiSm9zZVV0aWwuX3ZhbGlkYXRlSnd0OiBpc3N1ZXIgd2FzIG5vdCBwcm92aWRlZFwiKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiaXNzdWVyIHdhcyBub3QgcHJvdmlkZWRcIikpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHBheWxvYWQuaXNzICE9PSBpc3N1ZXIpIHtcbiAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJKb3NlVXRpbC5fdmFsaWRhdGVKd3Q6IEludmFsaWQgaXNzdWVyIGluIHRva2VuXCIsIHBheWxvYWQuaXNzKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiSW52YWxpZCBpc3N1ZXIgaW4gdG9rZW46IFwiICsgcGF5bG9hZC5pc3MpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFwYXlsb2FkLmF1ZCkge1xuICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIkpvc2VVdGlsLl92YWxpZGF0ZUp3dDogYXVkIHdhcyBub3QgcHJvdmlkZWRcIik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcImF1ZCB3YXMgbm90IHByb3ZpZGVkXCIpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciB2YWxpZEF1ZGllbmNlID0gcGF5bG9hZC5hdWQgPT09IGF1ZGllbmNlIHx8IChBcnJheS5pc0FycmF5KHBheWxvYWQuYXVkKSAmJiBwYXlsb2FkLmF1ZC5pbmRleE9mKGF1ZGllbmNlKSA+PSAwKTtcbiAgICAgICAgICAgIGlmICghdmFsaWRBdWRpZW5jZSkge1xuICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIkpvc2VVdGlsLl92YWxpZGF0ZUp3dDogSW52YWxpZCBhdWRpZW5jZSBpbiB0b2tlblwiLCBwYXlsb2FkLmF1ZCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIkludmFsaWQgYXVkaWVuY2UgaW4gdG9rZW46IFwiICsgcGF5bG9hZC5hdWQpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwYXlsb2FkLmF6cCAmJiBwYXlsb2FkLmF6cCAhPT0gYXVkaWVuY2UpIHtcbiAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJKb3NlVXRpbC5fdmFsaWRhdGVKd3Q6IEludmFsaWQgYXpwIGluIHRva2VuXCIsIHBheWxvYWQuYXpwKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiSW52YWxpZCBhenAgaW4gdG9rZW46IFwiICsgcGF5bG9hZC5henApKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCF0aW1lSW5zZW5zaXRpdmUpIHtcbiAgICAgICAgICAgICAgICB2YXIgbG93ZXJOb3cgPSBub3cgKyBjbG9ja1NrZXc7XG4gICAgICAgICAgICAgICAgdmFyIHVwcGVyTm93ID0gbm93IC0gY2xvY2tTa2V3O1xuXG4gICAgICAgICAgICAgICAgaWYgKCFwYXlsb2FkLmlhdCkge1xuICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJKb3NlVXRpbC5fdmFsaWRhdGVKd3Q6IGlhdCB3YXMgbm90IHByb3ZpZGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiaWF0IHdhcyBub3QgcHJvdmlkZWRcIikpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAobG93ZXJOb3cgPCBwYXlsb2FkLmlhdCkge1xuICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJKb3NlVXRpbC5fdmFsaWRhdGVKd3Q6IGlhdCBpcyBpbiB0aGUgZnV0dXJlXCIsIHBheWxvYWQuaWF0KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcImlhdCBpcyBpbiB0aGUgZnV0dXJlOiBcIiArIHBheWxvYWQuaWF0KSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHBheWxvYWQubmJmICYmIGxvd2VyTm93IDwgcGF5bG9hZC5uYmYpIHtcbiAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiSm9zZVV0aWwuX3ZhbGlkYXRlSnd0OiBuYmYgaXMgaW4gdGhlIGZ1dHVyZVwiLCBwYXlsb2FkLm5iZik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJuYmYgaXMgaW4gdGhlIGZ1dHVyZTogXCIgKyBwYXlsb2FkLm5iZikpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICghcGF5bG9hZC5leHApIHtcbiAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiSm9zZVV0aWwuX3ZhbGlkYXRlSnd0OiBleHAgd2FzIG5vdCBwcm92aWRlZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcImV4cCB3YXMgbm90IHByb3ZpZGVkXCIpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHBheWxvYWQuZXhwIDwgdXBwZXJOb3cpIHtcbiAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiSm9zZVV0aWwuX3ZhbGlkYXRlSnd0OiBleHAgaXMgaW4gdGhlIHBhc3RcIiwgcGF5bG9hZC5leHApO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiZXhwIGlzIGluIHRoZSBwYXN0OlwiICsgcGF5bG9hZC5leHApKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocGF5bG9hZCk7XG4gICAgICAgIH1cblxuICAgICAgICBzdGF0aWMgX3ZhbGlkYXRlSnd0KGp3dCwga2V5LCBpc3N1ZXIsIGF1ZGllbmNlLCBjbG9ja1NrZXcsIG5vdywgdGltZUluc2Vuc2l0aXZlKSB7XG5cbiAgICAgICAgICAgIHJldHVybiBKb3NlVXRpbC52YWxpZGF0ZUp3dEF0dHJpYnV0ZXMoand0LCBpc3N1ZXIsIGF1ZGllbmNlLCBjbG9ja1NrZXcsIG5vdywgdGltZUluc2Vuc2l0aXZlKS50aGVuKHBheWxvYWQgPT4ge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghandzLkpXUy52ZXJpZnkoand0LCBrZXksIEFsbG93ZWRTaWduaW5nQWxncykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIkpvc2VVdGlsLl92YWxpZGF0ZUp3dDogc2lnbmF0dXJlIHZhbGlkYXRpb24gZmFpbGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcInNpZ25hdHVyZSB2YWxpZGF0aW9uIGZhaWxlZFwiKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihlICYmIGUubWVzc2FnZSB8fCBlKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcInNpZ25hdHVyZSB2YWxpZGF0aW9uIGZhaWxlZFwiKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBzdGF0aWMgaGFzaFN0cmluZyh2YWx1ZSwgYWxnKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjcnlwdG8uVXRpbC5oYXNoU3RyaW5nKHZhbHVlLCBhbGcpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIExvZy5lcnJvcihlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHN0YXRpYyBoZXhUb0Jhc2U2NFVybCh2YWx1ZSkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaGV4dG9iNjR1KHZhbHVlKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBMb2cuZXJyb3IoZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxuXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XG5pbXBvcnQgeyBHbG9iYWwgfSBmcm9tICcuL0dsb2JhbC5qcyc7XG5cbmV4cG9ydCBjbGFzcyBKc29uU2VydmljZSB7XG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIGFkZGl0aW9uYWxDb250ZW50VHlwZXMgPSBudWxsLCBcbiAgICAgICAgWE1MSHR0cFJlcXVlc3RDdG9yID0gR2xvYmFsLlhNTEh0dHBSZXF1ZXN0LCBcbiAgICAgICAgand0SGFuZGxlciA9IG51bGxcbiAgICApIHtcbiAgICAgICAgaWYgKGFkZGl0aW9uYWxDb250ZW50VHlwZXMgJiYgQXJyYXkuaXNBcnJheShhZGRpdGlvbmFsQ29udGVudFR5cGVzKSlcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fY29udGVudFR5cGVzID0gYWRkaXRpb25hbENvbnRlbnRUeXBlcy5zbGljZSgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgdGhpcy5fY29udGVudFR5cGVzID0gW107XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fY29udGVudFR5cGVzLnB1c2goJ2FwcGxpY2F0aW9uL2pzb24nKTtcbiAgICAgICAgaWYgKGp3dEhhbmRsZXIpIHtcbiAgICAgICAgICAgIHRoaXMuX2NvbnRlbnRUeXBlcy5wdXNoKCdhcHBsaWNhdGlvbi9qd3QnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX1hNTEh0dHBSZXF1ZXN0ID0gWE1MSHR0cFJlcXVlc3RDdG9yO1xuICAgICAgICB0aGlzLl9qd3RIYW5kbGVyID0gand0SGFuZGxlcjtcbiAgICB9XG5cbiAgICBnZXRKc29uKHVybCwgdG9rZW4pIHtcbiAgICAgICAgaWYgKCF1cmwpe1xuICAgICAgICAgICAgTG9nLmVycm9yKFwiSnNvblNlcnZpY2UuZ2V0SnNvbjogTm8gdXJsIHBhc3NlZFwiKTtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInVybFwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIExvZy5kZWJ1ZyhcIkpzb25TZXJ2aWNlLmdldEpzb24sIHVybDogXCIsIHVybCk7XG5cbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblxuICAgICAgICAgICAgdmFyIHJlcSA9IG5ldyB0aGlzLl9YTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICAgICAgcmVxLm9wZW4oJ0dFVCcsIHVybCk7XG5cbiAgICAgICAgICAgIHZhciBhbGxvd2VkQ29udGVudFR5cGVzID0gdGhpcy5fY29udGVudFR5cGVzO1xuICAgICAgICAgICAgdmFyIGp3dEhhbmRsZXIgPSB0aGlzLl9qd3RIYW5kbGVyO1xuXG4gICAgICAgICAgICByZXEub25sb2FkID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiSnNvblNlcnZpY2UuZ2V0SnNvbjogSFRUUCByZXNwb25zZSByZWNlaXZlZCwgc3RhdHVzXCIsIHJlcS5zdGF0dXMpO1xuXG4gICAgICAgICAgICAgICAgaWYgKHJlcS5zdGF0dXMgPT09IDIwMCkge1xuXG4gICAgICAgICAgICAgICAgICAgIHZhciBjb250ZW50VHlwZSA9IHJlcS5nZXRSZXNwb25zZUhlYWRlcihcIkNvbnRlbnQtVHlwZVwiKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRlbnRUeXBlKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmb3VuZCA9IGFsbG93ZWRDb250ZW50VHlwZXMuZmluZChpdGVtPT57XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRlbnRUeXBlLnN0YXJ0c1dpdGgoaXRlbSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmb3VuZCA9PSBcImFwcGxpY2F0aW9uL2p3dFwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgand0SGFuZGxlcihyZXEpLnRoZW4ocmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmb3VuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoSlNPTi5wYXJzZShyZXEucmVzcG9uc2VUZXh0KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiSnNvblNlcnZpY2UuZ2V0SnNvbjogRXJyb3IgcGFyc2luZyBKU09OIHJlc3BvbnNlXCIsIGUubWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChFcnJvcihcIkludmFsaWQgcmVzcG9uc2UgQ29udGVudC1UeXBlOiBcIiArIGNvbnRlbnRUeXBlICsgXCIsIGZyb20gVVJMOiBcIiArIHVybCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KEVycm9yKHJlcS5zdGF0dXNUZXh0ICsgXCIgKFwiICsgcmVxLnN0YXR1cyArIFwiKVwiKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgcmVxLm9uZXJyb3IgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJKc29uU2VydmljZS5nZXRKc29uOiBuZXR3b3JrIGVycm9yXCIpO1xuICAgICAgICAgICAgICAgIHJlamVjdChFcnJvcihcIk5ldHdvcmsgRXJyb3JcIikpO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgaWYgKHRva2VuKSB7XG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiSnNvblNlcnZpY2UuZ2V0SnNvbjogdG9rZW4gcGFzc2VkLCBzZXR0aW5nIEF1dGhvcml6YXRpb24gaGVhZGVyXCIpO1xuICAgICAgICAgICAgICAgIHJlcS5zZXRSZXF1ZXN0SGVhZGVyKFwiQXV0aG9yaXphdGlvblwiLCBcIkJlYXJlciBcIiArIHRva2VuKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmVxLnNlbmQoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcG9zdEZvcm0odXJsLCBwYXlsb2FkKSB7XG4gICAgICAgIGlmICghdXJsKXtcbiAgICAgICAgICAgIExvZy5lcnJvcihcIkpzb25TZXJ2aWNlLnBvc3RGb3JtOiBObyB1cmwgcGFzc2VkXCIpO1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidXJsXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgTG9nLmRlYnVnKFwiSnNvblNlcnZpY2UucG9zdEZvcm0sIHVybDogXCIsIHVybCk7XG5cbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblxuICAgICAgICAgICAgdmFyIHJlcSA9IG5ldyB0aGlzLl9YTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICAgICAgcmVxLm9wZW4oJ1BPU1QnLCB1cmwpO1xuXG4gICAgICAgICAgICB2YXIgYWxsb3dlZENvbnRlbnRUeXBlcyA9IHRoaXMuX2NvbnRlbnRUeXBlcztcblxuICAgICAgICAgICAgcmVxLm9ubG9hZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIkpzb25TZXJ2aWNlLnBvc3RGb3JtOiBIVFRQIHJlc3BvbnNlIHJlY2VpdmVkLCBzdGF0dXNcIiwgcmVxLnN0YXR1cyk7XG5cbiAgICAgICAgICAgICAgICBpZiAocmVxLnN0YXR1cyA9PT0gMjAwKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIGNvbnRlbnRUeXBlID0gcmVxLmdldFJlc3BvbnNlSGVhZGVyKFwiQ29udGVudC1UeXBlXCIpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY29udGVudFR5cGUpIHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZvdW5kID0gYWxsb3dlZENvbnRlbnRUeXBlcy5maW5kKGl0ZW09PntcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29udGVudFR5cGUuc3RhcnRzV2l0aChpdGVtKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShKU09OLnBhcnNlKHJlcS5yZXNwb25zZVRleHQpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJKc29uU2VydmljZS5wb3N0Rm9ybTogRXJyb3IgcGFyc2luZyBKU09OIHJlc3BvbnNlXCIsIGUubWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChFcnJvcihcIkludmFsaWQgcmVzcG9uc2UgQ29udGVudC1UeXBlOiBcIiArIGNvbnRlbnRUeXBlICsgXCIsIGZyb20gVVJMOiBcIiArIHVybCkpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHJlcS5zdGF0dXMgPT09IDQwMCkge1xuXG4gICAgICAgICAgICAgICAgICAgIHZhciBjb250ZW50VHlwZSA9IHJlcS5nZXRSZXNwb25zZUhlYWRlcihcIkNvbnRlbnQtVHlwZVwiKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRlbnRUeXBlKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmb3VuZCA9IGFsbG93ZWRDb250ZW50VHlwZXMuZmluZChpdGVtPT57XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRlbnRUeXBlLnN0YXJ0c1dpdGgoaXRlbSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmb3VuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXlsb2FkID0gSlNPTi5wYXJzZShyZXEucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBheWxvYWQgJiYgcGF5bG9hZC5lcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiSnNvblNlcnZpY2UucG9zdEZvcm06IEVycm9yIGZyb20gc2VydmVyOiBcIiwgcGF5bG9hZC5lcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKHBheWxvYWQuZXJyb3IpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJKc29uU2VydmljZS5wb3N0Rm9ybTogRXJyb3IgcGFyc2luZyBKU09OIHJlc3BvbnNlXCIsIGUubWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJlamVjdChFcnJvcihyZXEuc3RhdHVzVGV4dCArIFwiIChcIiArIHJlcS5zdGF0dXMgKyBcIilcIikpO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgcmVxLm9uZXJyb3IgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJKc29uU2VydmljZS5wb3N0Rm9ybTogbmV0d29yayBlcnJvclwiKTtcbiAgICAgICAgICAgICAgICByZWplY3QoRXJyb3IoXCJOZXR3b3JrIEVycm9yXCIpKTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGxldCBib2R5ID0gXCJcIjtcbiAgICAgICAgICAgIGZvcihsZXQga2V5IGluIHBheWxvYWQpIHtcblxuICAgICAgICAgICAgICAgIGxldCB2YWx1ZSA9IHBheWxvYWRba2V5XTtcblxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSkge1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChib2R5Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvZHkgKz0gXCImXCI7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBib2R5ICs9IGVuY29kZVVSSUNvbXBvbmVudChrZXkpO1xuICAgICAgICAgICAgICAgICAgICBib2R5ICs9IFwiPVwiO1xuICAgICAgICAgICAgICAgICAgICBib2R5ICs9IGVuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXEuc2V0UmVxdWVzdEhlYWRlcihcIkNvbnRlbnQtVHlwZVwiLCBcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiKTtcbiAgICAgICAgICAgIHJlcS5zZW5kKGJvZHkpO1xuICAgICAgICB9KTtcbiAgICB9XG59XG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxuXG5sZXQgbm9wTG9nZ2VyID0ge1xuICAgIGRlYnVnKCl7fSxcbiAgICBpbmZvKCl7fSxcbiAgICB3YXJuKCl7fSxcbiAgICBlcnJvcigpe31cbn07XG5cbmNvbnN0IE5PTkUgPSAwO1xuY29uc3QgRVJST1IgPSAxO1xuY29uc3QgV0FSTiA9IDI7XG5jb25zdCBJTkZPID0gMztcbmNvbnN0IERFQlVHID0gNDtcblxubGV0IGxvZ2dlcjtcbmxldCBsZXZlbDtcblxuZXhwb3J0IGNsYXNzIExvZyB7XG4gICAgc3RhdGljIGdldCBOT05FKCkge3JldHVybiBOT05FfTtcbiAgICBzdGF0aWMgZ2V0IEVSUk9SKCkge3JldHVybiBFUlJPUn07XG4gICAgc3RhdGljIGdldCBXQVJOKCkge3JldHVybiBXQVJOfTtcbiAgICBzdGF0aWMgZ2V0IElORk8oKSB7cmV0dXJuIElORk99O1xuICAgIHN0YXRpYyBnZXQgREVCVUcoKSB7cmV0dXJuIERFQlVHfTtcbiAgICBcbiAgICBzdGF0aWMgcmVzZXQoKXtcbiAgICAgICAgbGV2ZWwgPSBJTkZPO1xuICAgICAgICBsb2dnZXIgPSBub3BMb2dnZXI7XG4gICAgfVxuICAgIFxuICAgIHN0YXRpYyBnZXQgbGV2ZWwoKXtcbiAgICAgICAgcmV0dXJuIGxldmVsO1xuICAgIH1cbiAgICBzdGF0aWMgc2V0IGxldmVsKHZhbHVlKXtcbiAgICAgICAgaWYgKE5PTkUgPD0gdmFsdWUgJiYgdmFsdWUgPD0gREVCVUcpe1xuICAgICAgICAgICAgbGV2ZWwgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgbG9nIGxldmVsXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIFxuICAgIHN0YXRpYyBnZXQgbG9nZ2VyKCl7XG4gICAgICAgIHJldHVybiBsb2dnZXI7XG4gICAgfVxuICAgIHN0YXRpYyBzZXQgbG9nZ2VyKHZhbHVlKXtcbiAgICAgICAgaWYgKCF2YWx1ZS5kZWJ1ZyAmJiB2YWx1ZS5pbmZvKSB7XG4gICAgICAgICAgICAvLyBqdXN0IHRvIHN0YXkgYmFja3dhcmRzIGNvbXBhdC4gY2FuIHJlbW92ZSBpbiAyLjBcbiAgICAgICAgICAgIHZhbHVlLmRlYnVnID0gdmFsdWUuaW5mbztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2YWx1ZS5kZWJ1ZyAmJiB2YWx1ZS5pbmZvICYmIHZhbHVlLndhcm4gJiYgdmFsdWUuZXJyb3Ipe1xuICAgICAgICAgICAgbG9nZ2VyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGxvZ2dlclwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBcbiAgICBzdGF0aWMgZGVidWcoLi4uYXJncyl7XG4gICAgICAgIGlmIChsZXZlbCA+PSBERUJVRyl7XG4gICAgICAgICAgICBsb2dnZXIuZGVidWcuYXBwbHkobG9nZ2VyLCBBcnJheS5mcm9tKGFyZ3MpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgaW5mbyguLi5hcmdzKXtcbiAgICAgICAgaWYgKGxldmVsID49IElORk8pe1xuICAgICAgICAgICAgbG9nZ2VyLmluZm8uYXBwbHkobG9nZ2VyLCBBcnJheS5mcm9tKGFyZ3MpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgd2FybiguLi5hcmdzKXtcbiAgICAgICAgaWYgKGxldmVsID49IFdBUk4pe1xuICAgICAgICAgICAgbG9nZ2VyLndhcm4uYXBwbHkobG9nZ2VyLCBBcnJheS5mcm9tKGFyZ3MpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdGF0aWMgZXJyb3IoLi4uYXJncyl7XG4gICAgICAgIGlmIChsZXZlbCA+PSBFUlJPUil7XG4gICAgICAgICAgICBsb2dnZXIuZXJyb3IuYXBwbHkobG9nZ2VyLCBBcnJheS5mcm9tKGFyZ3MpKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuTG9nLnJlc2V0KCk7XG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxuXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XG5pbXBvcnQgeyBKc29uU2VydmljZSB9IGZyb20gJy4vSnNvblNlcnZpY2UuanMnO1xuXG5jb25zdCBPaWRjTWV0YWRhdGFVcmxQYXRoID0gJy53ZWxsLWtub3duL29wZW5pZC1jb25maWd1cmF0aW9uJztcblxuZXhwb3J0IGNsYXNzIE1ldGFkYXRhU2VydmljZSB7XG4gICAgY29uc3RydWN0b3Ioc2V0dGluZ3MsIEpzb25TZXJ2aWNlQ3RvciA9IEpzb25TZXJ2aWNlKSB7XG4gICAgICAgIGlmICghc2V0dGluZ3MpIHtcbiAgICAgICAgICAgIExvZy5lcnJvcihcIk1ldGFkYXRhU2VydmljZTogTm8gc2V0dGluZ3MgcGFzc2VkIHRvIE1ldGFkYXRhU2VydmljZVwiKTtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInNldHRpbmdzXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fc2V0dGluZ3MgPSBzZXR0aW5ncztcbiAgICAgICAgdGhpcy5fanNvblNlcnZpY2UgPSBuZXcgSnNvblNlcnZpY2VDdG9yKFsnYXBwbGljYXRpb24vandrLXNldCtqc29uJ10pO1xuICAgIH1cblxuICAgIGdldCBtZXRhZGF0YVVybCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9tZXRhZGF0YVVybCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuX3NldHRpbmdzLm1ldGFkYXRhVXJsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWV0YWRhdGFVcmwgPSB0aGlzLl9zZXR0aW5ncy5tZXRhZGF0YVVybDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX21ldGFkYXRhVXJsID0gdGhpcy5fc2V0dGluZ3MuYXV0aG9yaXR5O1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX21ldGFkYXRhVXJsICYmIHRoaXMuX21ldGFkYXRhVXJsLmluZGV4T2YoT2lkY01ldGFkYXRhVXJsUGF0aCkgPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9tZXRhZGF0YVVybFt0aGlzLl9tZXRhZGF0YVVybC5sZW5ndGggLSAxXSAhPT0gJy8nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9tZXRhZGF0YVVybCArPSAnLyc7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbWV0YWRhdGFVcmwgKz0gT2lkY01ldGFkYXRhVXJsUGF0aDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5fbWV0YWRhdGFVcmw7XG4gICAgfVxuXG4gICAgZ2V0TWV0YWRhdGEoKSB7XG4gICAgICAgIGlmICh0aGlzLl9zZXR0aW5ncy5tZXRhZGF0YSkge1xuICAgICAgICAgICAgTG9nLmRlYnVnKFwiTWV0YWRhdGFTZXJ2aWNlLmdldE1ldGFkYXRhOiBSZXR1cm5pbmcgbWV0YWRhdGEgZnJvbSBzZXR0aW5nc1wiKTtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fc2V0dGluZ3MubWV0YWRhdGEpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLm1ldGFkYXRhVXJsKSB7XG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJNZXRhZGF0YVNlcnZpY2UuZ2V0TWV0YWRhdGE6IE5vIGF1dGhvcml0eSBvciBtZXRhZGF0YVVybCBjb25maWd1cmVkIG9uIHNldHRpbmdzXCIpO1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIk5vIGF1dGhvcml0eSBvciBtZXRhZGF0YVVybCBjb25maWd1cmVkIG9uIHNldHRpbmdzXCIpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIExvZy5kZWJ1ZyhcIk1ldGFkYXRhU2VydmljZS5nZXRNZXRhZGF0YTogZ2V0dGluZyBtZXRhZGF0YSBmcm9tXCIsIHRoaXMubWV0YWRhdGFVcmwpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLl9qc29uU2VydmljZS5nZXRKc29uKHRoaXMubWV0YWRhdGFVcmwpXG4gICAgICAgICAgICAudGhlbihtZXRhZGF0YSA9PiB7XG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiTWV0YWRhdGFTZXJ2aWNlLmdldE1ldGFkYXRhOiBqc29uIHJlY2VpdmVkXCIpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3NldHRpbmdzLm1ldGFkYXRhID0gbWV0YWRhdGE7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1ldGFkYXRhO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZ2V0SXNzdWVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0TWV0YWRhdGFQcm9wZXJ0eShcImlzc3VlclwiKTtcbiAgICB9XG5cbiAgICBnZXRBdXRob3JpemF0aW9uRW5kcG9pbnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRNZXRhZGF0YVByb3BlcnR5KFwiYXV0aG9yaXphdGlvbl9lbmRwb2ludFwiKTtcbiAgICB9XG5cbiAgICBnZXRVc2VySW5mb0VuZHBvaW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0TWV0YWRhdGFQcm9wZXJ0eShcInVzZXJpbmZvX2VuZHBvaW50XCIpO1xuICAgIH1cblxuICAgIGdldFRva2VuRW5kcG9pbnQob3B0aW9uYWw9dHJ1ZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0TWV0YWRhdGFQcm9wZXJ0eShcInRva2VuX2VuZHBvaW50XCIsIG9wdGlvbmFsKTtcbiAgICB9XG5cbiAgICBnZXRDaGVja1Nlc3Npb25JZnJhbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRNZXRhZGF0YVByb3BlcnR5KFwiY2hlY2tfc2Vzc2lvbl9pZnJhbWVcIiwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgZ2V0RW5kU2Vzc2lvbkVuZHBvaW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0TWV0YWRhdGFQcm9wZXJ0eShcImVuZF9zZXNzaW9uX2VuZHBvaW50XCIsIHRydWUpO1xuICAgIH1cblxuICAgIGdldFJldm9jYXRpb25FbmRwb2ludCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldE1ldGFkYXRhUHJvcGVydHkoXCJyZXZvY2F0aW9uX2VuZHBvaW50XCIsIHRydWUpO1xuICAgIH1cblxuICAgIGdldEtleXNFbmRwb2ludCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldE1ldGFkYXRhUHJvcGVydHkoXCJqd2tzX3VyaVwiLCB0cnVlKTtcbiAgICB9XG5cbiAgICBfZ2V0TWV0YWRhdGFQcm9wZXJ0eShuYW1lLCBvcHRpb25hbD1mYWxzZSkge1xuICAgICAgICBMb2cuZGVidWcoXCJNZXRhZGF0YVNlcnZpY2UuZ2V0TWV0YWRhdGFQcm9wZXJ0eSBmb3I6IFwiICsgbmFtZSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TWV0YWRhdGEoKS50aGVuKG1ldGFkYXRhID0+IHtcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIk1ldGFkYXRhU2VydmljZS5nZXRNZXRhZGF0YVByb3BlcnR5OiBtZXRhZGF0YSByZWNpZXZlZFwiKTtcblxuICAgICAgICAgICAgaWYgKG1ldGFkYXRhW25hbWVdID09PSB1bmRlZmluZWQpIHtcblxuICAgICAgICAgICAgICAgIGlmIChvcHRpb25hbCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICBMb2cud2FybihcIk1ldGFkYXRhU2VydmljZS5nZXRNZXRhZGF0YVByb3BlcnR5OiBNZXRhZGF0YSBkb2VzIG5vdCBjb250YWluIG9wdGlvbmFsIHByb3BlcnR5IFwiICsgbmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJNZXRhZGF0YVNlcnZpY2UuZ2V0TWV0YWRhdGFQcm9wZXJ0eTogTWV0YWRhdGEgZG9lcyBub3QgY29udGFpbiBwcm9wZXJ0eSBcIiArIG5hbWUpO1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXRhZGF0YSBkb2VzIG5vdCBjb250YWluIHByb3BlcnR5IFwiICsgbmFtZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gbWV0YWRhdGFbbmFtZV07XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGdldFNpZ25pbmdLZXlzKCkge1xuICAgICAgICBpZiAodGhpcy5fc2V0dGluZ3Muc2lnbmluZ0tleXMpIHtcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIk1ldGFkYXRhU2VydmljZS5nZXRTaWduaW5nS2V5czogUmV0dXJuaW5nIHNpZ25pbmdLZXlzIGZyb20gc2V0dGluZ3NcIik7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX3NldHRpbmdzLnNpZ25pbmdLZXlzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRNZXRhZGF0YVByb3BlcnR5KFwiandrc191cmlcIikudGhlbihqd2tzX3VyaSA9PiB7XG4gICAgICAgICAgICBMb2cuZGVidWcoXCJNZXRhZGF0YVNlcnZpY2UuZ2V0U2lnbmluZ0tleXM6IGp3a3NfdXJpIHJlY2VpdmVkXCIsIGp3a3NfdXJpKTtcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2pzb25TZXJ2aWNlLmdldEpzb24oandrc191cmkpLnRoZW4oa2V5U2V0ID0+IHtcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJNZXRhZGF0YVNlcnZpY2UuZ2V0U2lnbmluZ0tleXM6IGtleSBzZXQgcmVjZWl2ZWRcIiwga2V5U2V0KTtcblxuICAgICAgICAgICAgICAgIGlmICgha2V5U2V0LmtleXMpIHtcbiAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiTWV0YWRhdGFTZXJ2aWNlLmdldFNpZ25pbmdLZXlzOiBNaXNzaW5nIGtleXMgb24ga2V5c2V0XCIpO1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNaXNzaW5nIGtleXMgb24ga2V5c2V0XCIpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuX3NldHRpbmdzLnNpZ25pbmdLZXlzID0ga2V5U2V0LmtleXM7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NldHRpbmdzLnNpZ25pbmdLZXlzO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXG5cbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcbmltcG9ydCB7IE9pZGNDbGllbnRTZXR0aW5ncyB9IGZyb20gJy4vT2lkY0NsaWVudFNldHRpbmdzLmpzJztcbmltcG9ydCB7IEVycm9yUmVzcG9uc2UgfSBmcm9tICcuL0Vycm9yUmVzcG9uc2UuanMnO1xuaW1wb3J0IHsgU2lnbmluUmVxdWVzdCB9IGZyb20gJy4vU2lnbmluUmVxdWVzdC5qcyc7XG5pbXBvcnQgeyBTaWduaW5SZXNwb25zZSB9IGZyb20gJy4vU2lnbmluUmVzcG9uc2UuanMnO1xuaW1wb3J0IHsgU2lnbm91dFJlcXVlc3QgfSBmcm9tICcuL1NpZ25vdXRSZXF1ZXN0LmpzJztcbmltcG9ydCB7IFNpZ25vdXRSZXNwb25zZSB9IGZyb20gJy4vU2lnbm91dFJlc3BvbnNlLmpzJztcbmltcG9ydCB7IFNpZ25pblN0YXRlIH0gZnJvbSAnLi9TaWduaW5TdGF0ZS5qcyc7XG5pbXBvcnQgeyBTdGF0ZSB9IGZyb20gJy4vU3RhdGUuanMnO1xuXG5leHBvcnQgY2xhc3MgT2lkY0NsaWVudCB7XG4gICAgY29uc3RydWN0b3Ioc2V0dGluZ3MgPSB7fSkge1xuICAgICAgICBpZiAoc2V0dGluZ3MgaW5zdGFuY2VvZiBPaWRjQ2xpZW50U2V0dGluZ3MpIHtcbiAgICAgICAgICAgIHRoaXMuX3NldHRpbmdzID0gc2V0dGluZ3M7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9zZXR0aW5ncyA9IG5ldyBPaWRjQ2xpZW50U2V0dGluZ3Moc2V0dGluZ3MpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0IF9zdGF0ZVN0b3JlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zZXR0aW5ncy5zdGF0ZVN0b3JlO1xuICAgIH1cbiAgICBnZXQgX3ZhbGlkYXRvcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0dGluZ3MudmFsaWRhdG9yO1xuICAgIH1cbiAgICBnZXQgX21ldGFkYXRhU2VydmljZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0dGluZ3MubWV0YWRhdGFTZXJ2aWNlO1xuICAgIH1cblxuICAgIGdldCBzZXR0aW5ncygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NldHRpbmdzO1xuICAgIH1cbiAgICBnZXQgbWV0YWRhdGFTZXJ2aWNlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWV0YWRhdGFTZXJ2aWNlO1xuICAgIH1cblxuICAgIGNyZWF0ZVNpZ25pblJlcXVlc3Qoe1xuICAgICAgICByZXNwb25zZV90eXBlLCBzY29wZSwgcmVkaXJlY3RfdXJpLFxuICAgICAgICAvLyBkYXRhIHdhcyBtZWFudCB0byBiZSB0aGUgcGxhY2UgYSBjYWxsZXIgY291bGQgaW5kaWNhdGUgdGhlIGRhdGEgdG9cbiAgICAgICAgLy8gaGF2ZSByb3VuZCB0cmlwcGVkLCBidXQgcGVvcGxlIHdlcmUgZ2V0dGluZyBjb25mdXNlZCwgc28gaSBhZGRlZCBzdGF0ZSAoc2luY2UgdGhhdCBtYXRjaGVzIHRoZSBzcGVjKVxuICAgICAgICAvLyBhbmQgc28gbm93IGlmIGRhdGEgaXMgbm90IHBhc3NlZCwgYnV0IHN0YXRlIGlzIHRoZW4gc3RhdGUgd2lsbCBiZSB1c2VkXG4gICAgICAgIGRhdGEsIHN0YXRlLCBwcm9tcHQsIGRpc3BsYXksIG1heF9hZ2UsIHVpX2xvY2FsZXMsIGlkX3Rva2VuX2hpbnQsIGxvZ2luX2hpbnQsIGFjcl92YWx1ZXMsXG4gICAgICAgIHJlc291cmNlLCByZXF1ZXN0LCByZXF1ZXN0X3VyaSwgcmVzcG9uc2VfbW9kZSwgZXh0cmFRdWVyeVBhcmFtcywgZXh0cmFUb2tlblBhcmFtcywgcmVxdWVzdF90eXBlLCBza2lwVXNlckluZm8gfSA9IHt9LFxuICAgICAgICBzdGF0ZVN0b3JlXG4gICAgKSB7XG4gICAgICAgIExvZy5kZWJ1ZyhcIk9pZGNDbGllbnQuY3JlYXRlU2lnbmluUmVxdWVzdFwiKTtcblxuICAgICAgICBsZXQgY2xpZW50X2lkID0gdGhpcy5fc2V0dGluZ3MuY2xpZW50X2lkO1xuICAgICAgICByZXNwb25zZV90eXBlID0gcmVzcG9uc2VfdHlwZSB8fCB0aGlzLl9zZXR0aW5ncy5yZXNwb25zZV90eXBlO1xuICAgICAgICBzY29wZSA9IHNjb3BlIHx8IHRoaXMuX3NldHRpbmdzLnNjb3BlO1xuICAgICAgICByZWRpcmVjdF91cmkgPSByZWRpcmVjdF91cmkgfHwgdGhpcy5fc2V0dGluZ3MucmVkaXJlY3RfdXJpO1xuXG4gICAgICAgIC8vIGlkX3Rva2VuX2hpbnQsIGxvZ2luX2hpbnQgYXJlbid0IGFsbG93ZWQgb24gX3NldHRpbmdzXG4gICAgICAgIHByb21wdCA9IHByb21wdCB8fCB0aGlzLl9zZXR0aW5ncy5wcm9tcHQ7XG4gICAgICAgIGRpc3BsYXkgPSBkaXNwbGF5IHx8IHRoaXMuX3NldHRpbmdzLmRpc3BsYXk7XG4gICAgICAgIG1heF9hZ2UgPSBtYXhfYWdlIHx8IHRoaXMuX3NldHRpbmdzLm1heF9hZ2U7XG4gICAgICAgIHVpX2xvY2FsZXMgPSB1aV9sb2NhbGVzIHx8IHRoaXMuX3NldHRpbmdzLnVpX2xvY2FsZXM7XG4gICAgICAgIGFjcl92YWx1ZXMgPSBhY3JfdmFsdWVzIHx8IHRoaXMuX3NldHRpbmdzLmFjcl92YWx1ZXM7XG4gICAgICAgIHJlc291cmNlID0gcmVzb3VyY2UgfHwgdGhpcy5fc2V0dGluZ3MucmVzb3VyY2U7XG4gICAgICAgIHJlc3BvbnNlX21vZGUgPSByZXNwb25zZV9tb2RlIHx8IHRoaXMuX3NldHRpbmdzLnJlc3BvbnNlX21vZGU7XG4gICAgICAgIGV4dHJhUXVlcnlQYXJhbXMgPSBleHRyYVF1ZXJ5UGFyYW1zIHx8IHRoaXMuX3NldHRpbmdzLmV4dHJhUXVlcnlQYXJhbXM7XG4gICAgICAgIGV4dHJhVG9rZW5QYXJhbXMgPSBleHRyYVRva2VuUGFyYW1zIHx8IHRoaXMuX3NldHRpbmdzLmV4dHJhVG9rZW5QYXJhbXM7XG5cbiAgICAgICAgbGV0IGF1dGhvcml0eSA9IHRoaXMuX3NldHRpbmdzLmF1dGhvcml0eTtcblxuICAgICAgICBpZiAoU2lnbmluUmVxdWVzdC5pc0NvZGUocmVzcG9uc2VfdHlwZSkgJiYgcmVzcG9uc2VfdHlwZSAhPT0gXCJjb2RlXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJPcGVuSUQgQ29ubmVjdCBoeWJyaWQgZmxvdyBpcyBub3Qgc3VwcG9ydGVkXCIpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLl9tZXRhZGF0YVNlcnZpY2UuZ2V0QXV0aG9yaXphdGlvbkVuZHBvaW50KCkudGhlbih1cmwgPT4ge1xuICAgICAgICAgICAgTG9nLmRlYnVnKFwiT2lkY0NsaWVudC5jcmVhdGVTaWduaW5SZXF1ZXN0OiBSZWNlaXZlZCBhdXRob3JpemF0aW9uIGVuZHBvaW50XCIsIHVybCk7XG5cbiAgICAgICAgICAgIGxldCBzaWduaW5SZXF1ZXN0ID0gbmV3IFNpZ25pblJlcXVlc3Qoe1xuICAgICAgICAgICAgICAgIHVybCxcbiAgICAgICAgICAgICAgICBjbGllbnRfaWQsXG4gICAgICAgICAgICAgICAgcmVkaXJlY3RfdXJpLFxuICAgICAgICAgICAgICAgIHJlc3BvbnNlX3R5cGUsXG4gICAgICAgICAgICAgICAgc2NvcGUsXG4gICAgICAgICAgICAgICAgZGF0YTogZGF0YSB8fCBzdGF0ZSxcbiAgICAgICAgICAgICAgICBhdXRob3JpdHksXG4gICAgICAgICAgICAgICAgcHJvbXB0LCBkaXNwbGF5LCBtYXhfYWdlLCB1aV9sb2NhbGVzLCBpZF90b2tlbl9oaW50LCBsb2dpbl9oaW50LCBhY3JfdmFsdWVzLFxuICAgICAgICAgICAgICAgIHJlc291cmNlLCByZXF1ZXN0LCByZXF1ZXN0X3VyaSwgZXh0cmFRdWVyeVBhcmFtcywgZXh0cmFUb2tlblBhcmFtcywgcmVxdWVzdF90eXBlLCByZXNwb25zZV9tb2RlLFxuICAgICAgICAgICAgICAgIGNsaWVudF9zZWNyZXQ6IHRoaXMuX3NldHRpbmdzLmNsaWVudF9zZWNyZXQsXG4gICAgICAgICAgICAgICAgc2tpcFVzZXJJbmZvXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdmFyIHNpZ25pblN0YXRlID0gc2lnbmluUmVxdWVzdC5zdGF0ZTtcbiAgICAgICAgICAgIHN0YXRlU3RvcmUgPSBzdGF0ZVN0b3JlIHx8IHRoaXMuX3N0YXRlU3RvcmU7XG5cbiAgICAgICAgICAgIHJldHVybiBzdGF0ZVN0b3JlLnNldChzaWduaW5TdGF0ZS5pZCwgc2lnbmluU3RhdGUudG9TdG9yYWdlU3RyaW5nKCkpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBzaWduaW5SZXF1ZXN0O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHJlYWRTaWduaW5SZXNwb25zZVN0YXRlKHVybCwgc3RhdGVTdG9yZSwgcmVtb3ZlU3RhdGUgPSBmYWxzZSkge1xuICAgICAgICBMb2cuZGVidWcoXCJPaWRjQ2xpZW50LnJlYWRTaWduaW5SZXNwb25zZVN0YXRlXCIpO1xuXG4gICAgICAgIGxldCB1c2VRdWVyeSA9IHRoaXMuX3NldHRpbmdzLnJlc3BvbnNlX21vZGUgPT09IFwicXVlcnlcIiB8fCBcbiAgICAgICAgICAgICghdGhpcy5fc2V0dGluZ3MucmVzcG9uc2VfbW9kZSAmJiBTaWduaW5SZXF1ZXN0LmlzQ29kZSh0aGlzLl9zZXR0aW5ncy5yZXNwb25zZV90eXBlKSk7XG4gICAgICAgIGxldCBkZWxpbWl0ZXIgPSB1c2VRdWVyeSA/IFwiP1wiIDogXCIjXCI7XG5cbiAgICAgICAgdmFyIHJlc3BvbnNlID0gbmV3IFNpZ25pblJlc3BvbnNlKHVybCwgZGVsaW1pdGVyKTtcblxuICAgICAgICBpZiAoIXJlc3BvbnNlLnN0YXRlKSB7XG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJPaWRjQ2xpZW50LnJlYWRTaWduaW5SZXNwb25zZVN0YXRlOiBObyBzdGF0ZSBpbiByZXNwb25zZVwiKTtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJObyBzdGF0ZSBpbiByZXNwb25zZVwiKSk7XG4gICAgICAgIH1cblxuICAgICAgICBzdGF0ZVN0b3JlID0gc3RhdGVTdG9yZSB8fCB0aGlzLl9zdGF0ZVN0b3JlO1xuXG4gICAgICAgIHZhciBzdGF0ZUFwaSA9IHJlbW92ZVN0YXRlID8gc3RhdGVTdG9yZS5yZW1vdmUuYmluZChzdGF0ZVN0b3JlKSA6IHN0YXRlU3RvcmUuZ2V0LmJpbmQoc3RhdGVTdG9yZSk7XG5cbiAgICAgICAgcmV0dXJuIHN0YXRlQXBpKHJlc3BvbnNlLnN0YXRlKS50aGVuKHN0b3JlZFN0YXRlU3RyaW5nID0+IHtcbiAgICAgICAgICAgIGlmICghc3RvcmVkU3RhdGVTdHJpbmcpIHtcbiAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJPaWRjQ2xpZW50LnJlYWRTaWduaW5SZXNwb25zZVN0YXRlOiBObyBtYXRjaGluZyBzdGF0ZSBmb3VuZCBpbiBzdG9yYWdlXCIpO1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIG1hdGNoaW5nIHN0YXRlIGZvdW5kIGluIHN0b3JhZ2VcIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBzdGF0ZSA9IFNpZ25pblN0YXRlLmZyb21TdG9yYWdlU3RyaW5nKHN0b3JlZFN0YXRlU3RyaW5nKTtcbiAgICAgICAgICAgIHJldHVybiB7c3RhdGUsIHJlc3BvbnNlfTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJvY2Vzc1NpZ25pblJlc3BvbnNlKHVybCwgc3RhdGVTdG9yZSkge1xuICAgICAgICBMb2cuZGVidWcoXCJPaWRjQ2xpZW50LnByb2Nlc3NTaWduaW5SZXNwb25zZVwiKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5yZWFkU2lnbmluUmVzcG9uc2VTdGF0ZSh1cmwsIHN0YXRlU3RvcmUsIHRydWUpLnRoZW4oKHtzdGF0ZSwgcmVzcG9uc2V9KSA9PiB7XG4gICAgICAgICAgICBMb2cuZGVidWcoXCJPaWRjQ2xpZW50LnByb2Nlc3NTaWduaW5SZXNwb25zZTogUmVjZWl2ZWQgc3RhdGUgZnJvbSBzdG9yYWdlOyB2YWxpZGF0aW5nIHJlc3BvbnNlXCIpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbGlkYXRvci52YWxpZGF0ZVNpZ25pblJlc3BvbnNlKHN0YXRlLCByZXNwb25zZSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNyZWF0ZVNpZ25vdXRSZXF1ZXN0KHtpZF90b2tlbl9oaW50LCBkYXRhLCBzdGF0ZSwgcG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpLCBleHRyYVF1ZXJ5UGFyYW1zLCByZXF1ZXN0X3R5cGUgfSA9IHt9LFxuICAgICAgICBzdGF0ZVN0b3JlXG4gICAgKSB7XG4gICAgICAgIExvZy5kZWJ1ZyhcIk9pZGNDbGllbnQuY3JlYXRlU2lnbm91dFJlcXVlc3RcIik7XG5cbiAgICAgICAgcG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpID0gcG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpIHx8IHRoaXMuX3NldHRpbmdzLnBvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaTtcbiAgICAgICAgZXh0cmFRdWVyeVBhcmFtcyA9IGV4dHJhUXVlcnlQYXJhbXMgfHwgdGhpcy5fc2V0dGluZ3MuZXh0cmFRdWVyeVBhcmFtcztcblxuICAgICAgICByZXR1cm4gdGhpcy5fbWV0YWRhdGFTZXJ2aWNlLmdldEVuZFNlc3Npb25FbmRwb2ludCgpLnRoZW4odXJsID0+IHtcbiAgICAgICAgICAgIGlmICghdXJsKSB7XG4gICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiT2lkY0NsaWVudC5jcmVhdGVTaWdub3V0UmVxdWVzdDogTm8gZW5kIHNlc3Npb24gZW5kcG9pbnQgdXJsIHJldHVybmVkXCIpO1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIm5vIGVuZCBzZXNzaW9uIGVuZHBvaW50XCIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJPaWRjQ2xpZW50LmNyZWF0ZVNpZ25vdXRSZXF1ZXN0OiBSZWNlaXZlZCBlbmQgc2Vzc2lvbiBlbmRwb2ludFwiLCB1cmwpO1xuXG4gICAgICAgICAgICBsZXQgcmVxdWVzdCA9IG5ldyBTaWdub3V0UmVxdWVzdCh7XG4gICAgICAgICAgICAgICAgdXJsLFxuICAgICAgICAgICAgICAgIGlkX3Rva2VuX2hpbnQsXG4gICAgICAgICAgICAgICAgcG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpLFxuICAgICAgICAgICAgICAgIGRhdGE6IGRhdGEgfHwgc3RhdGUsXG4gICAgICAgICAgICAgICAgZXh0cmFRdWVyeVBhcmFtcyxcbiAgICAgICAgICAgICAgICByZXF1ZXN0X3R5cGVcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB2YXIgc2lnbm91dFN0YXRlID0gcmVxdWVzdC5zdGF0ZTtcbiAgICAgICAgICAgIGlmIChzaWdub3V0U3RhdGUpIHtcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJPaWRjQ2xpZW50LmNyZWF0ZVNpZ25vdXRSZXF1ZXN0OiBTaWdub3V0IHJlcXVlc3QgaGFzIHN0YXRlIHRvIHBlcnNpc3RcIik7XG5cbiAgICAgICAgICAgICAgICBzdGF0ZVN0b3JlID0gc3RhdGVTdG9yZSB8fCB0aGlzLl9zdGF0ZVN0b3JlO1xuICAgICAgICAgICAgICAgIHN0YXRlU3RvcmUuc2V0KHNpZ25vdXRTdGF0ZS5pZCwgc2lnbm91dFN0YXRlLnRvU3RvcmFnZVN0cmluZygpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHJlcXVlc3Q7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHJlYWRTaWdub3V0UmVzcG9uc2VTdGF0ZSh1cmwsIHN0YXRlU3RvcmUsIHJlbW92ZVN0YXRlID0gZmFsc2UpIHtcbiAgICAgICAgTG9nLmRlYnVnKFwiT2lkY0NsaWVudC5yZWFkU2lnbm91dFJlc3BvbnNlU3RhdGVcIik7XG5cbiAgICAgICAgdmFyIHJlc3BvbnNlID0gbmV3IFNpZ25vdXRSZXNwb25zZSh1cmwpO1xuICAgICAgICBpZiAoIXJlc3BvbnNlLnN0YXRlKSB7XG4gICAgICAgICAgICBMb2cuZGVidWcoXCJPaWRjQ2xpZW50LnJlYWRTaWdub3V0UmVzcG9uc2VTdGF0ZTogTm8gc3RhdGUgaW4gcmVzcG9uc2VcIik7XG5cbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5lcnJvcikge1xuICAgICAgICAgICAgICAgIExvZy53YXJuKFwiT2lkY0NsaWVudC5yZWFkU2lnbm91dFJlc3BvbnNlU3RhdGU6IFJlc3BvbnNlIHdhcyBlcnJvcjogXCIsIHJlc3BvbnNlLmVycm9yKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yUmVzcG9uc2UocmVzcG9uc2UpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7dW5kZWZpbmVkLCByZXNwb25zZX0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHN0YXRlS2V5ID0gcmVzcG9uc2Uuc3RhdGU7XG5cbiAgICAgICAgc3RhdGVTdG9yZSA9IHN0YXRlU3RvcmUgfHwgdGhpcy5fc3RhdGVTdG9yZTtcblxuICAgICAgICB2YXIgc3RhdGVBcGkgPSByZW1vdmVTdGF0ZSA/IHN0YXRlU3RvcmUucmVtb3ZlLmJpbmQoc3RhdGVTdG9yZSkgOiBzdGF0ZVN0b3JlLmdldC5iaW5kKHN0YXRlU3RvcmUpO1xuICAgICAgICByZXR1cm4gc3RhdGVBcGkoc3RhdGVLZXkpLnRoZW4oc3RvcmVkU3RhdGVTdHJpbmcgPT4ge1xuICAgICAgICAgICAgaWYgKCFzdG9yZWRTdGF0ZVN0cmluZykge1xuICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIk9pZGNDbGllbnQucmVhZFNpZ25vdXRSZXNwb25zZVN0YXRlOiBObyBtYXRjaGluZyBzdGF0ZSBmb3VuZCBpbiBzdG9yYWdlXCIpO1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIG1hdGNoaW5nIHN0YXRlIGZvdW5kIGluIHN0b3JhZ2VcIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBzdGF0ZSA9IFN0YXRlLmZyb21TdG9yYWdlU3RyaW5nKHN0b3JlZFN0YXRlU3RyaW5nKTtcblxuICAgICAgICAgICAgcmV0dXJuIHtzdGF0ZSwgcmVzcG9uc2V9O1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcm9jZXNzU2lnbm91dFJlc3BvbnNlKHVybCwgc3RhdGVTdG9yZSkge1xuICAgICAgICBMb2cuZGVidWcoXCJPaWRjQ2xpZW50LnByb2Nlc3NTaWdub3V0UmVzcG9uc2VcIik7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMucmVhZFNpZ25vdXRSZXNwb25zZVN0YXRlKHVybCwgc3RhdGVTdG9yZSwgdHJ1ZSkudGhlbigoe3N0YXRlLCByZXNwb25zZX0pID0+IHtcbiAgICAgICAgICAgIGlmIChzdGF0ZSkge1xuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIk9pZGNDbGllbnQucHJvY2Vzc1NpZ25vdXRSZXNwb25zZTogUmVjZWl2ZWQgc3RhdGUgZnJvbSBzdG9yYWdlOyB2YWxpZGF0aW5nIHJlc3BvbnNlXCIpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl92YWxpZGF0b3IudmFsaWRhdGVTaWdub3V0UmVzcG9uc2Uoc3RhdGUsIHJlc3BvbnNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIk9pZGNDbGllbnQucHJvY2Vzc1NpZ25vdXRSZXNwb25zZTogTm8gc3RhdGUgZnJvbSBzdG9yYWdlOyBza2lwcGluZyB2YWxpZGF0aW5nIHJlc3BvbnNlXCIpO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgY2xlYXJTdGFsZVN0YXRlKHN0YXRlU3RvcmUpIHtcbiAgICAgICAgTG9nLmRlYnVnKFwiT2lkY0NsaWVudC5jbGVhclN0YWxlU3RhdGVcIik7XG5cbiAgICAgICAgc3RhdGVTdG9yZSA9IHN0YXRlU3RvcmUgfHwgdGhpcy5fc3RhdGVTdG9yZTtcblxuICAgICAgICByZXR1cm4gU3RhdGUuY2xlYXJTdGFsZVN0YXRlKHN0YXRlU3RvcmUsIHRoaXMuc2V0dGluZ3Muc3RhbGVTdGF0ZUFnZSk7XG4gICAgfVxufVxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cblxuaW1wb3J0IHsgTG9nIH0gZnJvbSAnLi9Mb2cuanMnO1xuaW1wb3J0IHsgV2ViU3RvcmFnZVN0YXRlU3RvcmUgfSBmcm9tICcuL1dlYlN0b3JhZ2VTdGF0ZVN0b3JlLmpzJztcbmltcG9ydCB7IFJlc3BvbnNlVmFsaWRhdG9yIH0gZnJvbSAnLi9SZXNwb25zZVZhbGlkYXRvci5qcyc7XG5pbXBvcnQgeyBNZXRhZGF0YVNlcnZpY2UgfSBmcm9tICcuL01ldGFkYXRhU2VydmljZS5qcyc7XG5cbmNvbnN0IE9pZGNNZXRhZGF0YVVybFBhdGggPSAnLndlbGwta25vd24vb3BlbmlkLWNvbmZpZ3VyYXRpb24nO1xuXG5jb25zdCBEZWZhdWx0UmVzcG9uc2VUeXBlID0gXCJpZF90b2tlblwiO1xuY29uc3QgRGVmYXVsdFNjb3BlID0gXCJvcGVuaWRcIjtcbmNvbnN0IERlZmF1bHRTdGFsZVN0YXRlQWdlID0gNjAgKiAxNTsgLy8gc2Vjb25kc1xuY29uc3QgRGVmYXVsdENsb2NrU2tld0luU2Vjb25kcyA9IDYwICogNTtcblxuZXhwb3J0IGNsYXNzIE9pZGNDbGllbnRTZXR0aW5ncyB7XG4gICAgY29uc3RydWN0b3Ioe1xuICAgICAgICAvLyBtZXRhZGF0YSByZWxhdGVkXG4gICAgICAgIGF1dGhvcml0eSwgbWV0YWRhdGFVcmwsIG1ldGFkYXRhLCBzaWduaW5nS2V5cyxcbiAgICAgICAgLy8gY2xpZW50IHJlbGF0ZWRcbiAgICAgICAgY2xpZW50X2lkLCBjbGllbnRfc2VjcmV0LCByZXNwb25zZV90eXBlID0gRGVmYXVsdFJlc3BvbnNlVHlwZSwgc2NvcGUgPSBEZWZhdWx0U2NvcGUsXG4gICAgICAgIHJlZGlyZWN0X3VyaSwgcG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpLFxuICAgICAgICAvLyBvcHRpb25hbCBwcm90b2NvbFxuICAgICAgICBwcm9tcHQsIGRpc3BsYXksIG1heF9hZ2UsIHVpX2xvY2FsZXMsIGFjcl92YWx1ZXMsIHJlc291cmNlLCByZXNwb25zZV9tb2RlLFxuICAgICAgICAvLyBiZWhhdmlvciBmbGFnc1xuICAgICAgICBmaWx0ZXJQcm90b2NvbENsYWltcyA9IHRydWUsIGxvYWRVc2VySW5mbyA9IHRydWUsXG4gICAgICAgIHN0YWxlU3RhdGVBZ2UgPSBEZWZhdWx0U3RhbGVTdGF0ZUFnZSwgY2xvY2tTa2V3ID0gRGVmYXVsdENsb2NrU2tld0luU2Vjb25kcyxcbiAgICAgICAgdXNlckluZm9Kd3RJc3N1ZXIgPSAnT1AnLFxuICAgICAgICAvLyBvdGhlciBiZWhhdmlvclxuICAgICAgICBzdGF0ZVN0b3JlID0gbmV3IFdlYlN0b3JhZ2VTdGF0ZVN0b3JlKCksXG4gICAgICAgIFJlc3BvbnNlVmFsaWRhdG9yQ3RvciA9IFJlc3BvbnNlVmFsaWRhdG9yLFxuICAgICAgICBNZXRhZGF0YVNlcnZpY2VDdG9yID0gTWV0YWRhdGFTZXJ2aWNlLFxuICAgICAgICAvLyBleHRyYSBxdWVyeSBwYXJhbXNcbiAgICAgICAgZXh0cmFRdWVyeVBhcmFtcyA9IHt9LFxuICAgICAgICBleHRyYVRva2VuUGFyYW1zID0ge31cbiAgICB9ID0ge30pIHtcblxuICAgICAgICB0aGlzLl9hdXRob3JpdHkgPSBhdXRob3JpdHk7XG4gICAgICAgIHRoaXMuX21ldGFkYXRhVXJsID0gbWV0YWRhdGFVcmw7XG4gICAgICAgIHRoaXMuX21ldGFkYXRhID0gbWV0YWRhdGE7XG4gICAgICAgIHRoaXMuX3NpZ25pbmdLZXlzID0gc2lnbmluZ0tleXM7XG5cbiAgICAgICAgdGhpcy5fY2xpZW50X2lkID0gY2xpZW50X2lkO1xuICAgICAgICB0aGlzLl9jbGllbnRfc2VjcmV0ID0gY2xpZW50X3NlY3JldDtcbiAgICAgICAgdGhpcy5fcmVzcG9uc2VfdHlwZSA9IHJlc3BvbnNlX3R5cGU7XG4gICAgICAgIHRoaXMuX3Njb3BlID0gc2NvcGU7XG4gICAgICAgIHRoaXMuX3JlZGlyZWN0X3VyaSA9IHJlZGlyZWN0X3VyaTtcbiAgICAgICAgdGhpcy5fcG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpID0gcG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpO1xuXG4gICAgICAgIHRoaXMuX3Byb21wdCA9IHByb21wdDtcbiAgICAgICAgdGhpcy5fZGlzcGxheSA9IGRpc3BsYXk7XG4gICAgICAgIHRoaXMuX21heF9hZ2UgPSBtYXhfYWdlO1xuICAgICAgICB0aGlzLl91aV9sb2NhbGVzID0gdWlfbG9jYWxlcztcbiAgICAgICAgdGhpcy5fYWNyX3ZhbHVlcyA9IGFjcl92YWx1ZXM7XG4gICAgICAgIHRoaXMuX3Jlc291cmNlID0gcmVzb3VyY2U7XG4gICAgICAgIHRoaXMuX3Jlc3BvbnNlX21vZGUgPSByZXNwb25zZV9tb2RlO1xuXG4gICAgICAgIHRoaXMuX2ZpbHRlclByb3RvY29sQ2xhaW1zID0gISFmaWx0ZXJQcm90b2NvbENsYWltcztcbiAgICAgICAgdGhpcy5fbG9hZFVzZXJJbmZvID0gISFsb2FkVXNlckluZm87XG4gICAgICAgIHRoaXMuX3N0YWxlU3RhdGVBZ2UgPSBzdGFsZVN0YXRlQWdlO1xuICAgICAgICB0aGlzLl9jbG9ja1NrZXcgPSBjbG9ja1NrZXc7XG4gICAgICAgIHRoaXMuX3VzZXJJbmZvSnd0SXNzdWVyID0gdXNlckluZm9Kd3RJc3N1ZXI7XG5cbiAgICAgICAgdGhpcy5fc3RhdGVTdG9yZSA9IHN0YXRlU3RvcmU7XG4gICAgICAgIHRoaXMuX3ZhbGlkYXRvciA9IG5ldyBSZXNwb25zZVZhbGlkYXRvckN0b3IodGhpcyk7XG4gICAgICAgIHRoaXMuX21ldGFkYXRhU2VydmljZSA9IG5ldyBNZXRhZGF0YVNlcnZpY2VDdG9yKHRoaXMpO1xuXG4gICAgICAgIHRoaXMuX2V4dHJhUXVlcnlQYXJhbXMgPSB0eXBlb2YgZXh0cmFRdWVyeVBhcmFtcyA9PT0gJ29iamVjdCcgPyBleHRyYVF1ZXJ5UGFyYW1zIDoge307XG4gICAgICAgIHRoaXMuX2V4dHJhVG9rZW5QYXJhbXMgPSB0eXBlb2YgZXh0cmFUb2tlblBhcmFtcyA9PT0gJ29iamVjdCcgPyBleHRyYVRva2VuUGFyYW1zIDoge307XG4gICAgfVxuXG4gICAgLy8gY2xpZW50IGNvbmZpZ1xuICAgIGdldCBjbGllbnRfaWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jbGllbnRfaWQ7XG4gICAgfVxuICAgIHNldCBjbGllbnRfaWQodmFsdWUpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9jbGllbnRfaWQpIHtcbiAgICAgICAgICAgIC8vIG9uZS10aW1lIHNldCBvbmx5XG4gICAgICAgICAgICB0aGlzLl9jbGllbnRfaWQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIExvZy5lcnJvcihcIk9pZGNDbGllbnRTZXR0aW5ncy5zZXRfY2xpZW50X2lkOiBjbGllbnRfaWQgaGFzIGFscmVhZHkgYmVlbiBhc3NpZ25lZC5cIilcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImNsaWVudF9pZCBoYXMgYWxyZWFkeSBiZWVuIGFzc2lnbmVkLlwiKVxuICAgICAgICB9XG4gICAgfVxuICAgIGdldCBjbGllbnRfc2VjcmV0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY2xpZW50X3NlY3JldDtcbiAgICB9XG4gICAgZ2V0IHJlc3BvbnNlX3R5cGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZXNwb25zZV90eXBlO1xuICAgIH1cbiAgICBnZXQgc2NvcGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zY29wZTtcbiAgICB9XG4gICAgZ2V0IHJlZGlyZWN0X3VyaSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlZGlyZWN0X3VyaTtcbiAgICB9XG4gICAgZ2V0IHBvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Bvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaTtcbiAgICB9XG5cblxuICAgIC8vIG9wdGlvbmFsIHByb3RvY29sIHBhcmFtc1xuICAgIGdldCBwcm9tcHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wcm9tcHQ7XG4gICAgfVxuICAgIGdldCBkaXNwbGF5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGlzcGxheTtcbiAgICB9XG4gICAgZ2V0IG1heF9hZ2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tYXhfYWdlO1xuICAgIH1cbiAgICBnZXQgdWlfbG9jYWxlcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3VpX2xvY2FsZXM7XG4gICAgfVxuICAgIGdldCBhY3JfdmFsdWVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWNyX3ZhbHVlcztcbiAgICB9XG4gICAgZ2V0IHJlc291cmNlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVzb3VyY2U7XG4gICAgfVxuICAgIGdldCByZXNwb25zZV9tb2RlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVzcG9uc2VfbW9kZTtcbiAgICB9XG5cblxuICAgIC8vIG1ldGFkYXRhXG4gICAgZ2V0IGF1dGhvcml0eSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2F1dGhvcml0eTtcbiAgICB9XG4gICAgc2V0IGF1dGhvcml0eSh2YWx1ZSkge1xuICAgICAgICBpZiAoIXRoaXMuX2F1dGhvcml0eSkge1xuICAgICAgICAgICAgLy8gb25lLXRpbWUgc2V0IG9ubHlcbiAgICAgICAgICAgIHRoaXMuX2F1dGhvcml0eSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgTG9nLmVycm9yKFwiT2lkY0NsaWVudFNldHRpbmdzLnNldF9hdXRob3JpdHk6IGF1dGhvcml0eSBoYXMgYWxyZWFkeSBiZWVuIGFzc2lnbmVkLlwiKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYXV0aG9yaXR5IGhhcyBhbHJlYWR5IGJlZW4gYXNzaWduZWQuXCIpXG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0IG1ldGFkYXRhVXJsKCkge1xuICAgICAgICBpZiAoIXRoaXMuX21ldGFkYXRhVXJsKSB7XG4gICAgICAgICAgICB0aGlzLl9tZXRhZGF0YVVybCA9IHRoaXMuYXV0aG9yaXR5O1xuXG4gICAgICAgICAgICBpZiAodGhpcy5fbWV0YWRhdGFVcmwgJiYgdGhpcy5fbWV0YWRhdGFVcmwuaW5kZXhPZihPaWRjTWV0YWRhdGFVcmxQYXRoKSA8IDApIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fbWV0YWRhdGFVcmxbdGhpcy5fbWV0YWRhdGFVcmwubGVuZ3RoIC0gMV0gIT09ICcvJykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9tZXRhZGF0YVVybCArPSAnLyc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuX21ldGFkYXRhVXJsICs9IE9pZGNNZXRhZGF0YVVybFBhdGg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5fbWV0YWRhdGFVcmw7XG4gICAgfVxuXG4gICAgLy8gc2V0dGFibGUvY2FjaGFibGUgbWV0YWRhdGEgdmFsdWVzXG4gICAgZ2V0IG1ldGFkYXRhKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWV0YWRhdGE7XG4gICAgfVxuICAgIHNldCBtZXRhZGF0YSh2YWx1ZSkge1xuICAgICAgICB0aGlzLl9tZXRhZGF0YSA9IHZhbHVlO1xuICAgIH1cblxuICAgIGdldCBzaWduaW5nS2V5cygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NpZ25pbmdLZXlzO1xuICAgIH1cbiAgICBzZXQgc2lnbmluZ0tleXModmFsdWUpIHtcbiAgICAgICAgdGhpcy5fc2lnbmluZ0tleXMgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICAvLyBiZWhhdmlvciBmbGFnc1xuICAgIGdldCBmaWx0ZXJQcm90b2NvbENsYWltcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbHRlclByb3RvY29sQ2xhaW1zO1xuICAgIH1cbiAgICBnZXQgbG9hZFVzZXJJbmZvKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbG9hZFVzZXJJbmZvO1xuICAgIH1cbiAgICBnZXQgc3RhbGVTdGF0ZUFnZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0YWxlU3RhdGVBZ2U7XG4gICAgfVxuICAgIGdldCBjbG9ja1NrZXcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jbG9ja1NrZXc7XG4gICAgfVxuICAgIGdldCB1c2VySW5mb0p3dElzc3VlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3VzZXJJbmZvSnd0SXNzdWVyO1xuICAgIH1cblxuICAgIGdldCBzdGF0ZVN0b3JlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc3RhdGVTdG9yZTtcbiAgICB9XG4gICAgZ2V0IHZhbGlkYXRvcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbGlkYXRvcjtcbiAgICB9XG4gICAgZ2V0IG1ldGFkYXRhU2VydmljZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21ldGFkYXRhU2VydmljZTtcbiAgICB9XG5cbiAgICAvLyBleHRyYSBxdWVyeSBwYXJhbXNcbiAgICBnZXQgZXh0cmFRdWVyeVBhcmFtcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2V4dHJhUXVlcnlQYXJhbXM7XG4gICAgfVxuICAgIHNldCBleHRyYVF1ZXJ5UGFyYW1zKHZhbHVlKSB7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKXtcbiAgICAgICAgICAgIHRoaXMuX2V4dHJhUXVlcnlQYXJhbXMgPSB2YWx1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2V4dHJhUXVlcnlQYXJhbXMgPSB7fTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGV4dHJhIHRva2VuIHBhcmFtc1xuICAgIGdldCBleHRyYVRva2VuUGFyYW1zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZXh0cmFUb2tlblBhcmFtcztcbiAgICB9XG4gICAgc2V0IGV4dHJhVG9rZW5QYXJhbXModmFsdWUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpe1xuICAgICAgICAgICAgdGhpcy5fZXh0cmFUb2tlblBhcmFtcyA9IHZhbHVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fZXh0cmFUb2tlblBhcmFtcyA9IHt9O1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cblxuaW1wb3J0IHsgTG9nIH0gZnJvbSAnLi9Mb2cuanMnO1xuaW1wb3J0IHsgUG9wdXBXaW5kb3cgfSBmcm9tICcuL1BvcHVwV2luZG93LmpzJztcblxuZXhwb3J0IGNsYXNzIFBvcHVwTmF2aWdhdG9yIHtcblxuICAgIHByZXBhcmUocGFyYW1zKSB7XG4gICAgICAgIGxldCBwb3B1cCA9IG5ldyBQb3B1cFdpbmRvdyhwYXJhbXMpO1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHBvcHVwKTtcbiAgICB9XG5cbiAgICBjYWxsYmFjayh1cmwsIGtlZXBPcGVuLCBkZWxpbWl0ZXIpIHtcbiAgICAgICAgTG9nLmRlYnVnKFwiUG9wdXBOYXZpZ2F0b3IuY2FsbGJhY2tcIik7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIFBvcHVwV2luZG93Lm5vdGlmeU9wZW5lcih1cmwsIGtlZXBPcGVuLCBkZWxpbWl0ZXIpO1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZSk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxuXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XG5pbXBvcnQgeyBVcmxVdGlsaXR5IH0gZnJvbSAnLi9VcmxVdGlsaXR5LmpzJztcblxuY29uc3QgQ2hlY2tGb3JQb3B1cENsb3NlZEludGVydmFsID0gNTAwO1xuY29uc3QgRGVmYXVsdFBvcHVwRmVhdHVyZXMgPSAnbG9jYXRpb249bm8sdG9vbGJhcj1ubyx3aWR0aD01MDAsaGVpZ2h0PTUwMCxsZWZ0PTEwMCx0b3A9MTAwOyc7XG4vL2NvbnN0IERlZmF1bHRQb3B1cEZlYXR1cmVzID0gJ2xvY2F0aW9uPW5vLHRvb2xiYXI9bm8sd2lkdGg9NTAwLGhlaWdodD01MDAsbGVmdD0xMDAsdG9wPTEwMDtyZXNpemFibGU9eWVzJztcblxuY29uc3QgRGVmYXVsdFBvcHVwVGFyZ2V0ID0gXCJfYmxhbmtcIjtcblxuZXhwb3J0IGNsYXNzIFBvcHVwV2luZG93IHtcblxuICAgIGNvbnN0cnVjdG9yKHBhcmFtcykge1xuICAgICAgICB0aGlzLl9wcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fcmVzb2x2ZSA9IHJlc29sdmU7XG4gICAgICAgICAgICB0aGlzLl9yZWplY3QgPSByZWplY3Q7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGxldCB0YXJnZXQgPSBwYXJhbXMucG9wdXBXaW5kb3dUYXJnZXQgfHwgRGVmYXVsdFBvcHVwVGFyZ2V0O1xuICAgICAgICBsZXQgZmVhdHVyZXMgPSBwYXJhbXMucG9wdXBXaW5kb3dGZWF0dXJlcyB8fCBEZWZhdWx0UG9wdXBGZWF0dXJlcztcblxuICAgICAgICB0aGlzLl9wb3B1cCA9IHdpbmRvdy5vcGVuKCcnLCB0YXJnZXQsIGZlYXR1cmVzKTtcbiAgICAgICAgaWYgKHRoaXMuX3BvcHVwKSB7XG4gICAgICAgICAgICBMb2cuZGVidWcoXCJQb3B1cFdpbmRvdy5jdG9yOiBwb3B1cCBzdWNjZXNzZnVsbHkgY3JlYXRlZFwiKTtcbiAgICAgICAgICAgIHRoaXMuX2NoZWNrRm9yUG9wdXBDbG9zZWRUaW1lciA9IHdpbmRvdy5zZXRJbnRlcnZhbCh0aGlzLl9jaGVja0ZvclBvcHVwQ2xvc2VkLmJpbmQodGhpcyksIENoZWNrRm9yUG9wdXBDbG9zZWRJbnRlcnZhbCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXQgcHJvbWlzZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Byb21pc2U7XG4gICAgfVxuXG4gICAgbmF2aWdhdGUocGFyYW1zKSB7XG4gICAgICAgIGlmICghdGhpcy5fcG9wdXApIHtcbiAgICAgICAgICAgIHRoaXMuX2Vycm9yKFwiUG9wdXBXaW5kb3cubmF2aWdhdGU6IEVycm9yIG9wZW5pbmcgcG9wdXAgd2luZG93XCIpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCFwYXJhbXMgfHwgIXBhcmFtcy51cmwpIHtcbiAgICAgICAgICAgIHRoaXMuX2Vycm9yKFwiUG9wdXBXaW5kb3cubmF2aWdhdGU6IG5vIHVybCBwcm92aWRlZFwiKTtcbiAgICAgICAgICAgIHRoaXMuX2Vycm9yKFwiTm8gdXJsIHByb3ZpZGVkXCIpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgTG9nLmRlYnVnKFwiUG9wdXBXaW5kb3cubmF2aWdhdGU6IFNldHRpbmcgVVJMIGluIHBvcHVwXCIpO1xuXG4gICAgICAgICAgICB0aGlzLl9pZCA9IHBhcmFtcy5pZDtcbiAgICAgICAgICAgIGlmICh0aGlzLl9pZCkge1xuICAgICAgICAgICAgICAgIHdpbmRvd1tcInBvcHVwQ2FsbGJhY2tfXCIgKyBwYXJhbXMuaWRdID0gdGhpcy5fY2FsbGJhY2suYmluZCh0aGlzKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fcG9wdXAuZm9jdXMoKTtcbiAgICAgICAgICAgIHRoaXMuX3BvcHVwLndpbmRvdy5sb2NhdGlvbiA9IHBhcmFtcy51cmw7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5wcm9taXNlO1xuICAgIH1cblxuICAgIF9zdWNjZXNzKGRhdGEpIHtcbiAgICAgICAgTG9nLmRlYnVnKFwiUG9wdXBXaW5kb3cuY2FsbGJhY2s6IFN1Y2Nlc3NmdWwgcmVzcG9uc2UgZnJvbSBwb3B1cCB3aW5kb3dcIik7XG5cbiAgICAgICAgdGhpcy5fY2xlYW51cCgpO1xuICAgICAgICB0aGlzLl9yZXNvbHZlKGRhdGEpO1xuICAgIH1cbiAgICBfZXJyb3IobWVzc2FnZSkge1xuICAgICAgICBMb2cuZXJyb3IoXCJQb3B1cFdpbmRvdy5lcnJvcjogXCIsIG1lc3NhZ2UpO1xuICAgICAgICBcbiAgICAgICAgdGhpcy5fY2xlYW51cCgpO1xuICAgICAgICB0aGlzLl9yZWplY3QobmV3IEVycm9yKG1lc3NhZ2UpKTtcbiAgICB9XG5cbiAgICBjbG9zZSgpIHtcbiAgICAgICAgdGhpcy5fY2xlYW51cChmYWxzZSk7XG4gICAgfVxuXG4gICAgX2NsZWFudXAoa2VlcE9wZW4pIHtcbiAgICAgICAgTG9nLmRlYnVnKFwiUG9wdXBXaW5kb3cuY2xlYW51cFwiKTtcblxuICAgICAgICB3aW5kb3cuY2xlYXJJbnRlcnZhbCh0aGlzLl9jaGVja0ZvclBvcHVwQ2xvc2VkVGltZXIpO1xuICAgICAgICB0aGlzLl9jaGVja0ZvclBvcHVwQ2xvc2VkVGltZXIgPSBudWxsO1xuXG4gICAgICAgIGRlbGV0ZSB3aW5kb3dbXCJwb3B1cENhbGxiYWNrX1wiICsgdGhpcy5faWRdO1xuXG4gICAgICAgIGlmICh0aGlzLl9wb3B1cCAmJiAha2VlcE9wZW4pIHtcbiAgICAgICAgICAgIHRoaXMuX3BvcHVwLmNsb3NlKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fcG9wdXAgPSBudWxsO1xuICAgIH1cblxuICAgIF9jaGVja0ZvclBvcHVwQ2xvc2VkKCkge1xuICAgICAgICBpZiAoIXRoaXMuX3BvcHVwIHx8IHRoaXMuX3BvcHVwLmNsb3NlZCkge1xuICAgICAgICAgICAgdGhpcy5fZXJyb3IoXCJQb3B1cCB3aW5kb3cgY2xvc2VkXCIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgX2NhbGxiYWNrKHVybCwga2VlcE9wZW4pIHtcbiAgICAgICAgdGhpcy5fY2xlYW51cChrZWVwT3Blbik7XG5cbiAgICAgICAgaWYgKHVybCkge1xuICAgICAgICAgICAgTG9nLmRlYnVnKFwiUG9wdXBXaW5kb3cuY2FsbGJhY2sgc3VjY2Vzc1wiKTtcbiAgICAgICAgICAgIHRoaXMuX3N1Y2Nlc3MoeyB1cmw6IHVybCB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlBvcHVwV2luZG93LmNhbGxiYWNrOiBJbnZhbGlkIHJlc3BvbnNlIGZyb20gcG9wdXBcIik7XG4gICAgICAgICAgICB0aGlzLl9lcnJvcihcIkludmFsaWQgcmVzcG9uc2UgZnJvbSBwb3B1cFwiKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBub3RpZnlPcGVuZXIodXJsLCBrZWVwT3BlbiwgZGVsaW1pdGVyKSB7XG4gICAgICAgIGlmICh3aW5kb3cub3BlbmVyKSB7XG4gICAgICAgICAgICB1cmwgPSB1cmwgfHwgd2luZG93LmxvY2F0aW9uLmhyZWY7XG4gICAgICAgICAgICBpZiAodXJsKSB7XG4gICAgICAgICAgICAgICAgdmFyIGRhdGEgPSBVcmxVdGlsaXR5LnBhcnNlVXJsRnJhZ21lbnQodXJsLCBkZWxpbWl0ZXIpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuc3RhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5hbWUgPSBcInBvcHVwQ2FsbGJhY2tfXCIgKyBkYXRhLnN0YXRlO1xuICAgICAgICAgICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSB3aW5kb3cub3BlbmVyW25hbWVdO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlBvcHVwV2luZG93Lm5vdGlmeU9wZW5lcjogcGFzc2luZyB1cmwgbWVzc2FnZSB0byBvcGVuZXJcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayh1cmwsIGtlZXBPcGVuKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIExvZy53YXJuKFwiUG9wdXBXaW5kb3cubm90aWZ5T3BlbmVyOiBubyBtYXRjaGluZyBjYWxsYmFjayBmb3VuZCBvbiBvcGVuZXJcIik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIExvZy53YXJuKFwiUG9wdXBXaW5kb3cubm90aWZ5T3BlbmVyOiBubyBzdGF0ZSBmb3VuZCBpbiByZXNwb25zZSB1cmxcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgTG9nLndhcm4oXCJQb3B1cFdpbmRvdy5ub3RpZnlPcGVuZXI6IG5vIHdpbmRvdy5vcGVuZXIuIENhbid0IGNvbXBsZXRlIG5vdGlmaWNhdGlvbi5cIik7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxuXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XG5cbmV4cG9ydCBjbGFzcyBSZWRpcmVjdE5hdmlnYXRvciB7XG5cbiAgICBwcmVwYXJlKCkge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMpO1xuICAgIH1cblxuICAgIG5hdmlnYXRlKHBhcmFtcykge1xuICAgICAgICBpZiAoIXBhcmFtcyB8fCAhcGFyYW1zLnVybCkge1xuICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVkaXJlY3ROYXZpZ2F0b3IubmF2aWdhdGU6IE5vIHVybCBwcm92aWRlZFwiKTtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJObyB1cmwgcHJvdmlkZWRcIikpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBhcmFtcy51c2VSZXBsYWNlVG9OYXZpZ2F0ZSkge1xuICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlcGxhY2UocGFyYW1zLnVybCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB3aW5kb3cubG9jYXRpb24gPSBwYXJhbXMudXJsO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH1cblxuICAgIGdldCB1cmwoKSB7XG4gICAgICAgIHJldHVybiB3aW5kb3cubG9jYXRpb24uaHJlZjtcbiAgICB9XG59XG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxuXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XG5pbXBvcnQgeyBNZXRhZGF0YVNlcnZpY2UgfSBmcm9tICcuL01ldGFkYXRhU2VydmljZS5qcyc7XG5pbXBvcnQgeyBVc2VySW5mb1NlcnZpY2UgfSBmcm9tICcuL1VzZXJJbmZvU2VydmljZS5qcyc7XG5pbXBvcnQgeyBUb2tlbkNsaWVudCB9IGZyb20gJy4vVG9rZW5DbGllbnQuanMnO1xuaW1wb3J0IHsgRXJyb3JSZXNwb25zZSB9IGZyb20gJy4vRXJyb3JSZXNwb25zZS5qcyc7XG5pbXBvcnQgeyBKb3NlVXRpbCB9IGZyb20gJy4vSm9zZVV0aWwuanMnO1xuXG5jb25zdCBQcm90b2NvbENsYWltcyA9IFtcIm5vbmNlXCIsIFwiYXRfaGFzaFwiLCBcImlhdFwiLCBcIm5iZlwiLCBcImV4cFwiLCBcImF1ZFwiLCBcImlzc1wiLCBcImNfaGFzaFwiXTtcblxuZXhwb3J0IGNsYXNzIFJlc3BvbnNlVmFsaWRhdG9yIHtcblxuICAgIGNvbnN0cnVjdG9yKHNldHRpbmdzLCBcbiAgICAgICAgTWV0YWRhdGFTZXJ2aWNlQ3RvciA9IE1ldGFkYXRhU2VydmljZSxcbiAgICAgICAgVXNlckluZm9TZXJ2aWNlQ3RvciA9IFVzZXJJbmZvU2VydmljZSwgXG4gICAgICAgIGpvc2VVdGlsID0gSm9zZVV0aWwsXG4gICAgICAgIFRva2VuQ2xpZW50Q3RvciA9IFRva2VuQ2xpZW50KSB7XG4gICAgICAgIGlmICghc2V0dGluZ3MpIHtcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLmN0b3I6IE5vIHNldHRpbmdzIHBhc3NlZCB0byBSZXNwb25zZVZhbGlkYXRvclwiKTtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInNldHRpbmdzXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fc2V0dGluZ3MgPSBzZXR0aW5ncztcbiAgICAgICAgdGhpcy5fbWV0YWRhdGFTZXJ2aWNlID0gbmV3IE1ldGFkYXRhU2VydmljZUN0b3IodGhpcy5fc2V0dGluZ3MpO1xuICAgICAgICB0aGlzLl91c2VySW5mb1NlcnZpY2UgPSBuZXcgVXNlckluZm9TZXJ2aWNlQ3Rvcih0aGlzLl9zZXR0aW5ncyk7XG4gICAgICAgIHRoaXMuX2pvc2VVdGlsID0gam9zZVV0aWw7XG4gICAgICAgIHRoaXMuX3Rva2VuQ2xpZW50ID0gbmV3IFRva2VuQ2xpZW50Q3Rvcih0aGlzLl9zZXR0aW5ncyk7XG4gICAgfVxuXG4gICAgdmFsaWRhdGVTaWduaW5SZXNwb25zZShzdGF0ZSwgcmVzcG9uc2UpIHtcbiAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IudmFsaWRhdGVTaWduaW5SZXNwb25zZVwiKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5fcHJvY2Vzc1NpZ25pblBhcmFtcyhzdGF0ZSwgcmVzcG9uc2UpLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IudmFsaWRhdGVTaWduaW5SZXNwb25zZTogc3RhdGUgcHJvY2Vzc2VkXCIpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbGlkYXRlVG9rZW5zKHN0YXRlLCByZXNwb25zZSkudGhlbihyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IudmFsaWRhdGVTaWduaW5SZXNwb25zZTogdG9rZW5zIHZhbGlkYXRlZFwiKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcHJvY2Vzc0NsYWltcyhzdGF0ZSwgcmVzcG9uc2UpLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJSZXNwb25zZVZhbGlkYXRvci52YWxpZGF0ZVNpZ25pblJlc3BvbnNlOiBjbGFpbXMgcHJvY2Vzc2VkXCIpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgdmFsaWRhdGVTaWdub3V0UmVzcG9uc2Uoc3RhdGUsIHJlc3BvbnNlKSB7XG4gICAgICAgIGlmIChzdGF0ZS5pZCAhPT0gcmVzcG9uc2Uuc3RhdGUpIHtcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLnZhbGlkYXRlU2lnbm91dFJlc3BvbnNlOiBTdGF0ZSBkb2VzIG5vdCBtYXRjaFwiKTtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJTdGF0ZSBkb2VzIG5vdCBtYXRjaFwiKSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBub3cgdGhhdCB3ZSBrbm93IHRoZSBzdGF0ZSBtYXRjaGVzLCB0YWtlIHRoZSBzdG9yZWQgZGF0YVxuICAgICAgICAvLyBhbmQgc2V0IGl0IGludG8gdGhlIHJlc3BvbnNlIHNvIGNhbGxlcnMgY2FuIGdldCB0aGVpciBzdGF0ZVxuICAgICAgICAvLyB0aGlzIGlzIGltcG9ydGFudCBmb3IgYm90aCBzdWNjZXNzICYgZXJyb3Igb3V0Y29tZXNcbiAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IudmFsaWRhdGVTaWdub3V0UmVzcG9uc2U6IHN0YXRlIHZhbGlkYXRlZFwiKTtcbiAgICAgICAgcmVzcG9uc2Uuc3RhdGUgPSBzdGF0ZS5kYXRhO1xuXG4gICAgICAgIGlmIChyZXNwb25zZS5lcnJvcikge1xuICAgICAgICAgICAgTG9nLndhcm4oXCJSZXNwb25zZVZhbGlkYXRvci52YWxpZGF0ZVNpZ25vdXRSZXNwb25zZTogUmVzcG9uc2Ugd2FzIGVycm9yXCIsIHJlc3BvbnNlLmVycm9yKTtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3JSZXNwb25zZShyZXNwb25zZSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShyZXNwb25zZSk7XG4gICAgfVxuXG4gICAgX3Byb2Nlc3NTaWduaW5QYXJhbXMoc3RhdGUsIHJlc3BvbnNlKSB7XG4gICAgICAgIGlmIChzdGF0ZS5pZCAhPT0gcmVzcG9uc2Uuc3RhdGUpIHtcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLl9wcm9jZXNzU2lnbmluUGFyYW1zOiBTdGF0ZSBkb2VzIG5vdCBtYXRjaFwiKTtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJTdGF0ZSBkb2VzIG5vdCBtYXRjaFwiKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXN0YXRlLmNsaWVudF9pZCkge1xuICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3Byb2Nlc3NTaWduaW5QYXJhbXM6IE5vIGNsaWVudF9pZCBvbiBzdGF0ZVwiKTtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJObyBjbGllbnRfaWQgb24gc3RhdGVcIikpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFzdGF0ZS5hdXRob3JpdHkpIHtcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLl9wcm9jZXNzU2lnbmluUGFyYW1zOiBObyBhdXRob3JpdHkgb24gc3RhdGVcIik7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiTm8gYXV0aG9yaXR5IG9uIHN0YXRlXCIpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHRoaXMgYWxsb3dzIHRoZSBhdXRob3JpdHkgdG8gYmUgbG9hZGVkIGZyb20gdGhlIHNpZ25pbiBzdGF0ZVxuICAgICAgICBpZiAoIXRoaXMuX3NldHRpbmdzLmF1dGhvcml0eSkge1xuICAgICAgICAgICAgdGhpcy5fc2V0dGluZ3MuYXV0aG9yaXR5ID0gc3RhdGUuYXV0aG9yaXR5O1xuICAgICAgICB9XG4gICAgICAgIC8vIGVuc3VyZSB3ZSdyZSB1c2luZyB0aGUgY29ycmVjdCBhdXRob3JpdHkgaWYgdGhlIGF1dGhvcml0eSBpcyBub3QgbG9hZGVkIGZyb20gc2lnbmluIHN0YXRlXG4gICAgICAgIGVsc2UgaWYgKHRoaXMuX3NldHRpbmdzLmF1dGhvcml0eSAmJiB0aGlzLl9zZXR0aW5ncy5hdXRob3JpdHkgIT09IHN0YXRlLmF1dGhvcml0eSkge1xuICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3Byb2Nlc3NTaWduaW5QYXJhbXM6IGF1dGhvcml0eSBtaXNtYXRjaCBvbiBzZXR0aW5ncyB2cy4gc2lnbmluIHN0YXRlXCIpO1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcImF1dGhvcml0eSBtaXNtYXRjaCBvbiBzZXR0aW5ncyB2cy4gc2lnbmluIHN0YXRlXCIpKTtcbiAgICAgICAgfVxuICAgICAgICAvLyB0aGlzIGFsbG93cyB0aGUgY2xpZW50X2lkIHRvIGJlIGxvYWRlZCBmcm9tIHRoZSBzaWduaW4gc3RhdGVcbiAgICAgICAgaWYgKCF0aGlzLl9zZXR0aW5ncy5jbGllbnRfaWQpIHtcbiAgICAgICAgICAgIHRoaXMuX3NldHRpbmdzLmNsaWVudF9pZCA9IHN0YXRlLmNsaWVudF9pZDtcbiAgICAgICAgfVxuICAgICAgICAvLyBlbnN1cmUgd2UncmUgdXNpbmcgdGhlIGNvcnJlY3QgY2xpZW50X2lkIGlmIHRoZSBjbGllbnRfaWQgaXMgbm90IGxvYWRlZCBmcm9tIHNpZ25pbiBzdGF0ZVxuICAgICAgICBlbHNlIGlmICh0aGlzLl9zZXR0aW5ncy5jbGllbnRfaWQgJiYgdGhpcy5fc2V0dGluZ3MuY2xpZW50X2lkICE9PSBzdGF0ZS5jbGllbnRfaWQpIHtcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLl9wcm9jZXNzU2lnbmluUGFyYW1zOiBjbGllbnRfaWQgbWlzbWF0Y2ggb24gc2V0dGluZ3MgdnMuIHNpZ25pbiBzdGF0ZVwiKTtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJjbGllbnRfaWQgbWlzbWF0Y2ggb24gc2V0dGluZ3MgdnMuIHNpZ25pbiBzdGF0ZVwiKSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBub3cgdGhhdCB3ZSBrbm93IHRoZSBzdGF0ZSBtYXRjaGVzLCB0YWtlIHRoZSBzdG9yZWQgZGF0YVxuICAgICAgICAvLyBhbmQgc2V0IGl0IGludG8gdGhlIHJlc3BvbnNlIHNvIGNhbGxlcnMgY2FuIGdldCB0aGVpciBzdGF0ZVxuICAgICAgICAvLyB0aGlzIGlzIGltcG9ydGFudCBmb3IgYm90aCBzdWNjZXNzICYgZXJyb3Igb3V0Y29tZXNcbiAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3Byb2Nlc3NTaWduaW5QYXJhbXM6IHN0YXRlIHZhbGlkYXRlZFwiKTtcbiAgICAgICAgcmVzcG9uc2Uuc3RhdGUgPSBzdGF0ZS5kYXRhO1xuXG4gICAgICAgIGlmIChyZXNwb25zZS5lcnJvcikge1xuICAgICAgICAgICAgTG9nLndhcm4oXCJSZXNwb25zZVZhbGlkYXRvci5fcHJvY2Vzc1NpZ25pblBhcmFtczogUmVzcG9uc2Ugd2FzIGVycm9yXCIsIHJlc3BvbnNlLmVycm9yKTtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3JSZXNwb25zZShyZXNwb25zZSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0YXRlLm5vbmNlICYmICFyZXNwb25zZS5pZF90b2tlbikge1xuICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3Byb2Nlc3NTaWduaW5QYXJhbXM6IEV4cGVjdGluZyBpZF90b2tlbiBpbiByZXNwb25zZVwiKTtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJObyBpZF90b2tlbiBpbiByZXNwb25zZVwiKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXN0YXRlLm5vbmNlICYmIHJlc3BvbnNlLmlkX3Rva2VuKSB7XG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5fcHJvY2Vzc1NpZ25pblBhcmFtczogTm90IGV4cGVjdGluZyBpZF90b2tlbiBpbiByZXNwb25zZVwiKTtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJVbmV4cGVjdGVkIGlkX3Rva2VuIGluIHJlc3BvbnNlXCIpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdGF0ZS5jb2RlX3ZlcmlmaWVyICYmICFyZXNwb25zZS5jb2RlKSB7XG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5fcHJvY2Vzc1NpZ25pblBhcmFtczogRXhwZWN0aW5nIGNvZGUgaW4gcmVzcG9uc2VcIik7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiTm8gY29kZSBpbiByZXNwb25zZVwiKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXN0YXRlLmNvZGVfdmVyaWZpZXIgJiYgcmVzcG9uc2UuY29kZSkge1xuICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3Byb2Nlc3NTaWduaW5QYXJhbXM6IE5vdCBleHBlY3RpbmcgY29kZSBpbiByZXNwb25zZVwiKTtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJVbmV4cGVjdGVkIGNvZGUgaW4gcmVzcG9uc2VcIikpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFyZXNwb25zZS5zY29wZSkge1xuICAgICAgICAgICAgLy8gaWYgdGhlcmUncyBubyBzY29wZSBvbiB0aGUgcmVzcG9uc2UsIHRoZW4gYXNzdW1lIGFsbCBzY29wZXMgZ3JhbnRlZCAocGVyLXNwZWMpIGFuZCBjb3B5IG92ZXIgc2NvcGVzIGZyb20gb3JpZ2luYWwgcmVxdWVzdFxuICAgICAgICAgICAgcmVzcG9uc2Uuc2NvcGUgPSBzdGF0ZS5zY29wZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocmVzcG9uc2UpO1xuICAgIH1cblxuICAgIF9wcm9jZXNzQ2xhaW1zKHN0YXRlLCByZXNwb25zZSkge1xuICAgICAgICBpZiAocmVzcG9uc2UuaXNPcGVuSWRDb25uZWN0KSB7XG4gICAgICAgICAgICBMb2cuZGVidWcoXCJSZXNwb25zZVZhbGlkYXRvci5fcHJvY2Vzc0NsYWltczogcmVzcG9uc2UgaXMgT0lEQywgcHJvY2Vzc2luZyBjbGFpbXNcIik7XG5cbiAgICAgICAgICAgIHJlc3BvbnNlLnByb2ZpbGUgPSB0aGlzLl9maWx0ZXJQcm90b2NvbENsYWltcyhyZXNwb25zZS5wcm9maWxlKTtcblxuICAgICAgICAgICAgaWYgKHN0YXRlLnNraXBVc2VySW5mbyAhPT0gdHJ1ZSAmJiB0aGlzLl9zZXR0aW5ncy5sb2FkVXNlckluZm8gJiYgcmVzcG9uc2UuYWNjZXNzX3Rva2VuKSB7XG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3Byb2Nlc3NDbGFpbXM6IGxvYWRpbmcgdXNlciBpbmZvXCIpO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3VzZXJJbmZvU2VydmljZS5nZXRDbGFpbXMocmVzcG9uc2UuYWNjZXNzX3Rva2VuKS50aGVuKGNsYWltcyA9PiB7XG4gICAgICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLl9wcm9jZXNzQ2xhaW1zOiB1c2VyIGluZm8gY2xhaW1zIHJlY2VpdmVkIGZyb20gdXNlciBpbmZvIGVuZHBvaW50XCIpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChjbGFpbXMuc3ViICE9PSByZXNwb25zZS5wcm9maWxlLnN1Yikge1xuICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3Byb2Nlc3NDbGFpbXM6IHN1YiBmcm9tIHVzZXIgaW5mbyBlbmRwb2ludCBkb2VzIG5vdCBtYXRjaCBzdWIgaW4gYWNjZXNzX3Rva2VuXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcInN1YiBmcm9tIHVzZXIgaW5mbyBlbmRwb2ludCBkb2VzIG5vdCBtYXRjaCBzdWIgaW4gYWNjZXNzX3Rva2VuXCIpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLnByb2ZpbGUgPSB0aGlzLl9tZXJnZUNsYWltcyhyZXNwb25zZS5wcm9maWxlLCBjbGFpbXMpO1xuICAgICAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJSZXNwb25zZVZhbGlkYXRvci5fcHJvY2Vzc0NsYWltczogdXNlciBpbmZvIGNsYWltcyByZWNlaXZlZCwgdXBkYXRlZCBwcm9maWxlOlwiLCByZXNwb25zZS5wcm9maWxlKTtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJSZXNwb25zZVZhbGlkYXRvci5fcHJvY2Vzc0NsYWltczogbm90IGxvYWRpbmcgdXNlciBpbmZvXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3Byb2Nlc3NDbGFpbXM6IHJlc3BvbnNlIGlzIG5vdCBPSURDLCBub3QgcHJvY2Vzc2luZyBjbGFpbXNcIik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlc3BvbnNlKTtcbiAgICB9XG5cbiAgICBfbWVyZ2VDbGFpbXMoY2xhaW1zMSwgY2xhaW1zMikge1xuICAgICAgICB2YXIgcmVzdWx0ID0gT2JqZWN0LmFzc2lnbih7fSwgY2xhaW1zMSk7XG5cbiAgICAgICAgZm9yIChsZXQgbmFtZSBpbiBjbGFpbXMyKSB7XG4gICAgICAgICAgICB2YXIgdmFsdWVzID0gY2xhaW1zMltuYW1lXTtcbiAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZXMpKSB7XG4gICAgICAgICAgICAgICAgdmFsdWVzID0gW3ZhbHVlc107XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbGV0IHZhbHVlID0gdmFsdWVzW2ldO1xuICAgICAgICAgICAgICAgIGlmICghcmVzdWx0W25hbWVdKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdFtuYW1lXSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KHJlc3VsdFtuYW1lXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdFtuYW1lXS5pbmRleE9mKHZhbHVlKSA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFtuYW1lXS5wdXNoKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChyZXN1bHRbbmFtZV0gIT09IHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRbbmFtZV0gPSB0aGlzLl9tZXJnZUNsYWltcyhyZXN1bHRbbmFtZV0sIHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfSBcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRbbmFtZV0gPSBbcmVzdWx0W25hbWVdLCB2YWx1ZV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIF9maWx0ZXJQcm90b2NvbENsYWltcyhjbGFpbXMpIHtcbiAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX2ZpbHRlclByb3RvY29sQ2xhaW1zLCBpbmNvbWluZyBjbGFpbXM6XCIsIGNsYWltcyk7XG5cbiAgICAgICAgdmFyIHJlc3VsdCA9IE9iamVjdC5hc3NpZ24oe30sIGNsYWltcyk7XG5cbiAgICAgICAgaWYgKHRoaXMuX3NldHRpbmdzLl9maWx0ZXJQcm90b2NvbENsYWltcykge1xuICAgICAgICAgICAgUHJvdG9jb2xDbGFpbXMuZm9yRWFjaCh0eXBlID0+IHtcbiAgICAgICAgICAgICAgICBkZWxldGUgcmVzdWx0W3R5cGVdO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLl9maWx0ZXJQcm90b2NvbENsYWltczogcHJvdG9jb2wgY2xhaW1zIGZpbHRlcmVkXCIsIHJlc3VsdCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBMb2cuZGVidWcoXCJSZXNwb25zZVZhbGlkYXRvci5fZmlsdGVyUHJvdG9jb2xDbGFpbXM6IHByb3RvY29sIGNsYWltcyBub3QgZmlsdGVyZWRcIilcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgX3ZhbGlkYXRlVG9rZW5zKHN0YXRlLCByZXNwb25zZSkge1xuICAgICAgICBpZiAocmVzcG9uc2UuY29kZSkge1xuICAgICAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlVG9rZW5zOiBWYWxpZGF0aW5nIGNvZGVcIik7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcHJvY2Vzc0NvZGUoc3RhdGUsIHJlc3BvbnNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyZXNwb25zZS5pZF90b2tlbikge1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmFjY2Vzc190b2tlbikge1xuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLl92YWxpZGF0ZVRva2VuczogVmFsaWRhdGluZyBpZF90b2tlbiBhbmQgYWNjZXNzX3Rva2VuXCIpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl92YWxpZGF0ZUlkVG9rZW5BbmRBY2Nlc3NUb2tlbihzdGF0ZSwgcmVzcG9uc2UpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJSZXNwb25zZVZhbGlkYXRvci5fdmFsaWRhdGVUb2tlbnM6IFZhbGlkYXRpbmcgaWRfdG9rZW5cIik7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdmFsaWRhdGVJZFRva2VuKHN0YXRlLCByZXNwb25zZSk7XG4gICAgICAgIH1cblxuICAgICAgICBMb2cuZGVidWcoXCJSZXNwb25zZVZhbGlkYXRvci5fdmFsaWRhdGVUb2tlbnM6IE5vIGNvZGUgdG8gcHJvY2VzcyBvciBpZF90b2tlbiB0byB2YWxpZGF0ZVwiKTtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShyZXNwb25zZSk7XG4gICAgfVxuXG4gICAgX3Byb2Nlc3NDb2RlKHN0YXRlLCByZXNwb25zZSkge1xuICAgICAgICB2YXIgcmVxdWVzdCA9IHtcbiAgICAgICAgICAgIGNsaWVudF9pZDogc3RhdGUuY2xpZW50X2lkLFxuICAgICAgICAgICAgY2xpZW50X3NlY3JldDogc3RhdGUuY2xpZW50X3NlY3JldCxcbiAgICAgICAgICAgIGNvZGUgOiByZXNwb25zZS5jb2RlLFxuICAgICAgICAgICAgcmVkaXJlY3RfdXJpOiBzdGF0ZS5yZWRpcmVjdF91cmksXG4gICAgICAgICAgICBjb2RlX3ZlcmlmaWVyOiBzdGF0ZS5jb2RlX3ZlcmlmaWVyXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKHN0YXRlLmV4dHJhVG9rZW5QYXJhbXMgJiYgdHlwZW9mKHN0YXRlLmV4dHJhVG9rZW5QYXJhbXMpID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihyZXF1ZXN0LCBzdGF0ZS5leHRyYVRva2VuUGFyYW1zKTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Rva2VuQ2xpZW50LmV4Y2hhbmdlQ29kZShyZXF1ZXN0KS50aGVuKHRva2VuUmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBmb3IodmFyIGtleSBpbiB0b2tlblJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2Vba2V5XSA9IHRva2VuUmVzcG9uc2Vba2V5XTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmlkX3Rva2VuKSB7XG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3Byb2Nlc3NDb2RlOiB0b2tlbiByZXNwb25zZSBzdWNjZXNzZnVsLCBwcm9jZXNzaW5nIGlkX3Rva2VuXCIpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl92YWxpZGF0ZUlkVG9rZW5BdHRyaWJ1dGVzKHN0YXRlLCByZXNwb25zZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJSZXNwb25zZVZhbGlkYXRvci5fcHJvY2Vzc0NvZGU6IHRva2VuIHJlc3BvbnNlIHN1Y2Nlc3NmdWwsIHJldHVybmluZyByZXNwb25zZVwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBfdmFsaWRhdGVJZFRva2VuQXR0cmlidXRlcyhzdGF0ZSwgcmVzcG9uc2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21ldGFkYXRhU2VydmljZS5nZXRJc3N1ZXIoKS50aGVuKGlzc3VlciA9PiB7XG5cbiAgICAgICAgICAgIGxldCBhdWRpZW5jZSA9IHN0YXRlLmNsaWVudF9pZDtcbiAgICAgICAgICAgIGxldCBjbG9ja1NrZXdJblNlY29uZHMgPSB0aGlzLl9zZXR0aW5ncy5jbG9ja1NrZXc7XG4gICAgICAgICAgICBMb2cuZGVidWcoXCJSZXNwb25zZVZhbGlkYXRvci5fdmFsaWRhdGVJZFRva2VuQXR0cmlidXRlczogVmFsaWRhaW5nIEpXVCBhdHRyaWJ1dGVzOyB1c2luZyBjbG9jayBza2V3IChpbiBzZWNvbmRzKSBvZjogXCIsIGNsb2NrU2tld0luU2Vjb25kcyk7XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9qb3NlVXRpbC52YWxpZGF0ZUp3dEF0dHJpYnV0ZXMocmVzcG9uc2UuaWRfdG9rZW4sIGlzc3VlciwgYXVkaWVuY2UsIGNsb2NrU2tld0luU2Vjb25kcykudGhlbihwYXlsb2FkID0+IHtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5ub25jZSAmJiBzdGF0ZS5ub25jZSAhPT0gcGF5bG9hZC5ub25jZSkge1xuICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5fdmFsaWRhdGVJZFRva2VuQXR0cmlidXRlczogSW52YWxpZCBub25jZSBpbiBpZF90b2tlblwiKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIkludmFsaWQgbm9uY2UgaW4gaWRfdG9rZW5cIikpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICghcGF5bG9hZC5zdWIpIHtcbiAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlSWRUb2tlbkF0dHJpYnV0ZXM6IE5vIHN1YiBwcmVzZW50IGluIGlkX3Rva2VuXCIpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiTm8gc3ViIHByZXNlbnQgaW4gaWRfdG9rZW5cIikpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJlc3BvbnNlLnByb2ZpbGUgPSBwYXlsb2FkO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBfdmFsaWRhdGVJZFRva2VuQW5kQWNjZXNzVG9rZW4oc3RhdGUsIHJlc3BvbnNlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl92YWxpZGF0ZUlkVG9rZW4oc3RhdGUsIHJlc3BvbnNlKS50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl92YWxpZGF0ZUFjY2Vzc1Rva2VuKHJlc3BvbnNlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgX3ZhbGlkYXRlSWRUb2tlbihzdGF0ZSwgcmVzcG9uc2UpIHtcbiAgICAgICAgaWYgKCFzdGF0ZS5ub25jZSkge1xuICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlSWRUb2tlbjogTm8gbm9uY2Ugb24gc3RhdGVcIik7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiTm8gbm9uY2Ugb24gc3RhdGVcIikpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGp3dCA9IHRoaXMuX2pvc2VVdGlsLnBhcnNlSnd0KHJlc3BvbnNlLmlkX3Rva2VuKTtcbiAgICAgICAgaWYgKCFqd3QgfHwgIWp3dC5oZWFkZXIgfHwgIWp3dC5wYXlsb2FkKSB7XG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5fdmFsaWRhdGVJZFRva2VuOiBGYWlsZWQgdG8gcGFyc2UgaWRfdG9rZW5cIiwgand0KTtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJGYWlsZWQgdG8gcGFyc2UgaWRfdG9rZW5cIikpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0YXRlLm5vbmNlICE9PSBqd3QucGF5bG9hZC5ub25jZSkge1xuICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlSWRUb2tlbjogSW52YWxpZCBub25jZSBpbiBpZF90b2tlblwiKTtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJJbnZhbGlkIG5vbmNlIGluIGlkX3Rva2VuXCIpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBraWQgPSBqd3QuaGVhZGVyLmtpZDtcblxuICAgICAgICByZXR1cm4gdGhpcy5fbWV0YWRhdGFTZXJ2aWNlLmdldElzc3VlcigpLnRoZW4oaXNzdWVyID0+IHtcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLl92YWxpZGF0ZUlkVG9rZW46IFJlY2VpdmVkIGlzc3VlclwiKTtcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21ldGFkYXRhU2VydmljZS5nZXRTaWduaW5nS2V5cygpLnRoZW4oa2V5cyA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFrZXlzKSB7XG4gICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLl92YWxpZGF0ZUlkVG9rZW46IE5vIHNpZ25pbmcga2V5cyBmcm9tIG1ldGFkYXRhXCIpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiTm8gc2lnbmluZyBrZXlzIGZyb20gbWV0YWRhdGFcIikpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLl92YWxpZGF0ZUlkVG9rZW46IFJlY2VpdmVkIHNpZ25pbmcga2V5c1wiKTtcbiAgICAgICAgICAgICAgICBsZXQga2V5O1xuICAgICAgICAgICAgICAgIGlmICgha2lkKSB7XG4gICAgICAgICAgICAgICAgICAgIGtleXMgPSB0aGlzLl9maWx0ZXJCeUFsZyhrZXlzLCBqd3QuaGVhZGVyLmFsZyk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGtleXMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlSWRUb2tlbjogTm8ga2lkIGZvdW5kIGluIGlkX3Rva2VuIGFuZCBtb3JlIHRoYW4gb25lIGtleSBmb3VuZCBpbiBtZXRhZGF0YVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJObyBraWQgZm91bmQgaW4gaWRfdG9rZW4gYW5kIG1vcmUgdGhhbiBvbmUga2V5IGZvdW5kIGluIG1ldGFkYXRhXCIpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGtpZCBpcyBtYW5kYXRvcnkgb25seSB3aGVuIHRoZXJlIGFyZSBtdWx0aXBsZSBrZXlzIGluIHRoZSByZWZlcmVuY2VkIEpXSyBTZXQgZG9jdW1lbnRcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNlZSBodHRwOi8vb3BlbmlkLm5ldC9zcGVjcy9vcGVuaWQtY29ubmVjdC1jb3JlLTFfMC5odG1sI1NpZ25pbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleSA9IGtleXNbMF07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGtleSA9IGtleXMuZmlsdGVyKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ga2V5LmtpZCA9PT0ga2lkO1xuICAgICAgICAgICAgICAgICAgICB9KVswXTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoIWtleSkge1xuICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5fdmFsaWRhdGVJZFRva2VuOiBObyBrZXkgbWF0Y2hpbmcga2lkIG9yIGFsZyBmb3VuZCBpbiBzaWduaW5nIGtleXNcIik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJObyBrZXkgbWF0Y2hpbmcga2lkIG9yIGFsZyBmb3VuZCBpbiBzaWduaW5nIGtleXNcIikpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGxldCBhdWRpZW5jZSA9IHN0YXRlLmNsaWVudF9pZDtcblxuICAgICAgICAgICAgICAgIGxldCBjbG9ja1NrZXdJblNlY29uZHMgPSB0aGlzLl9zZXR0aW5ncy5jbG9ja1NrZXc7XG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlSWRUb2tlbjogVmFsaWRhaW5nIEpXVDsgdXNpbmcgY2xvY2sgc2tldyAoaW4gc2Vjb25kcykgb2Y6IFwiLCBjbG9ja1NrZXdJblNlY29uZHMpO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2pvc2VVdGlsLnZhbGlkYXRlSnd0KHJlc3BvbnNlLmlkX3Rva2VuLCBrZXksIGlzc3VlciwgYXVkaWVuY2UsIGNsb2NrU2tld0luU2Vjb25kcykudGhlbigoKT0+e1xuICAgICAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJSZXNwb25zZVZhbGlkYXRvci5fdmFsaWRhdGVJZFRva2VuOiBKV1QgdmFsaWRhdGlvbiBzdWNjZXNzZnVsXCIpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICghand0LnBheWxvYWQuc3ViKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5fdmFsaWRhdGVJZFRva2VuOiBObyBzdWIgcHJlc2VudCBpbiBpZF90b2tlblwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJObyBzdWIgcHJlc2VudCBpbiBpZF90b2tlblwiKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5wcm9maWxlID0gand0LnBheWxvYWQ7XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIF9maWx0ZXJCeUFsZyhrZXlzLCBhbGcpe1xuICAgICAgICB2YXIga3R5ID0gbnVsbDtcbiAgICAgICAgaWYgKGFsZy5zdGFydHNXaXRoKFwiUlNcIikpIHtcbiAgICAgICAgICAgIGt0eSA9IFwiUlNBXCI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoYWxnLnN0YXJ0c1dpdGgoXCJQU1wiKSkge1xuICAgICAgICAgICAga3R5ID0gXCJQU1wiO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGFsZy5zdGFydHNXaXRoKFwiRVNcIikpIHtcbiAgICAgICAgICAgIGt0eSA9IFwiRUNcIjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLl9maWx0ZXJCeUFsZzogYWxnIG5vdCBzdXBwb3J0ZWQ6IFwiLCBhbGcpO1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX2ZpbHRlckJ5QWxnOiBMb29raW5nIGZvciBrZXlzIHRoYXQgbWF0Y2gga3R5OiBcIiwga3R5KTtcblxuICAgICAgICBrZXlzID0ga2V5cy5maWx0ZXIoa2V5ID0+IHtcbiAgICAgICAgICAgIHJldHVybiBrZXkua3R5ID09PSBrdHk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLl9maWx0ZXJCeUFsZzogTnVtYmVyIG9mIGtleXMgdGhhdCBtYXRjaCBrdHk6IFwiLCBrdHksIGtleXMubGVuZ3RoKTtcblxuICAgICAgICByZXR1cm4ga2V5cztcbiAgICB9XG5cbiAgICBfdmFsaWRhdGVBY2Nlc3NUb2tlbihyZXNwb25zZSkge1xuICAgICAgICBpZiAoIXJlc3BvbnNlLnByb2ZpbGUpIHtcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLl92YWxpZGF0ZUFjY2Vzc1Rva2VuOiBObyBwcm9maWxlIGxvYWRlZCBmcm9tIGlkX3Rva2VuXCIpO1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIk5vIHByb2ZpbGUgbG9hZGVkIGZyb20gaWRfdG9rZW5cIikpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFyZXNwb25zZS5wcm9maWxlLmF0X2hhc2gpIHtcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLl92YWxpZGF0ZUFjY2Vzc1Rva2VuOiBObyBhdF9oYXNoIGluIGlkX3Rva2VuXCIpO1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIk5vIGF0X2hhc2ggaW4gaWRfdG9rZW5cIikpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFyZXNwb25zZS5pZF90b2tlbikge1xuICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlQWNjZXNzVG9rZW46IE5vIGlkX3Rva2VuXCIpO1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIk5vIGlkX3Rva2VuXCIpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBqd3QgPSB0aGlzLl9qb3NlVXRpbC5wYXJzZUp3dChyZXNwb25zZS5pZF90b2tlbik7XG4gICAgICAgIGlmICghand0IHx8ICFqd3QuaGVhZGVyKSB7XG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5fdmFsaWRhdGVBY2Nlc3NUb2tlbjogRmFpbGVkIHRvIHBhcnNlIGlkX3Rva2VuXCIsIGp3dCk7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiRmFpbGVkIHRvIHBhcnNlIGlkX3Rva2VuXCIpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBoYXNoQWxnID0gand0LmhlYWRlci5hbGc7XG4gICAgICAgIGlmICghaGFzaEFsZyB8fCBoYXNoQWxnLmxlbmd0aCAhPT0gNSkge1xuICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlQWNjZXNzVG9rZW46IFVuc3VwcG9ydGVkIGFsZzpcIiwgaGFzaEFsZyk7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiVW5zdXBwb3J0ZWQgYWxnOiBcIiArIGhhc2hBbGcpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBoYXNoQml0cyA9IGhhc2hBbGcuc3Vic3RyKDIsIDMpO1xuICAgICAgICBpZiAoIWhhc2hCaXRzKSB7XG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5fdmFsaWRhdGVBY2Nlc3NUb2tlbjogVW5zdXBwb3J0ZWQgYWxnOlwiLCBoYXNoQWxnLCBoYXNoQml0cyk7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiVW5zdXBwb3J0ZWQgYWxnOiBcIiArIGhhc2hBbGcpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGhhc2hCaXRzID0gcGFyc2VJbnQoaGFzaEJpdHMpO1xuICAgICAgICBpZiAoaGFzaEJpdHMgIT09IDI1NiAmJiBoYXNoQml0cyAhPT0gMzg0ICYmIGhhc2hCaXRzICE9PSA1MTIpIHtcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLl92YWxpZGF0ZUFjY2Vzc1Rva2VuOiBVbnN1cHBvcnRlZCBhbGc6XCIsIGhhc2hBbGcsIGhhc2hCaXRzKTtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJVbnN1cHBvcnRlZCBhbGc6IFwiICsgaGFzaEFsZykpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHNoYSA9IFwic2hhXCIgKyBoYXNoQml0cztcbiAgICAgICAgdmFyIGhhc2ggPSB0aGlzLl9qb3NlVXRpbC5oYXNoU3RyaW5nKHJlc3BvbnNlLmFjY2Vzc190b2tlbiwgc2hhKTtcbiAgICAgICAgaWYgKCFoYXNoKSB7XG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5fdmFsaWRhdGVBY2Nlc3NUb2tlbjogYWNjZXNzX3Rva2VuIGhhc2ggZmFpbGVkOlwiLCBzaGEpO1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIkZhaWxlZCB0byB2YWxpZGF0ZSBhdF9oYXNoXCIpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBsZWZ0ID0gaGFzaC5zdWJzdHIoMCwgaGFzaC5sZW5ndGggLyAyKTtcbiAgICAgICAgdmFyIGxlZnRfYjY0dSA9IHRoaXMuX2pvc2VVdGlsLmhleFRvQmFzZTY0VXJsKGxlZnQpO1xuICAgICAgICBpZiAobGVmdF9iNjR1ICE9PSByZXNwb25zZS5wcm9maWxlLmF0X2hhc2gpIHtcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLl92YWxpZGF0ZUFjY2Vzc1Rva2VuOiBGYWlsZWQgdG8gdmFsaWRhdGUgYXRfaGFzaFwiLCBsZWZ0X2I2NHUsIHJlc3BvbnNlLnByb2ZpbGUuYXRfaGFzaCk7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiRmFpbGVkIHRvIHZhbGlkYXRlIGF0X2hhc2hcIikpO1xuICAgICAgICB9XG5cbiAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlQWNjZXNzVG9rZW46IHN1Y2Nlc3NcIik7XG5cbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShyZXNwb25zZSk7XG4gICAgfVxufVxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cblxuaW1wb3J0IHsgTG9nIH0gZnJvbSAnLi9Mb2cuanMnO1xuaW1wb3J0IHsgQ2hlY2tTZXNzaW9uSUZyYW1lIH0gZnJvbSAnLi9DaGVja1Nlc3Npb25JRnJhbWUuanMnO1xuXG5leHBvcnQgY2xhc3MgU2Vzc2lvbk1vbml0b3Ige1xuXG4gICAgY29uc3RydWN0b3IodXNlck1hbmFnZXIsIENoZWNrU2Vzc2lvbklGcmFtZUN0b3IgPSBDaGVja1Nlc3Npb25JRnJhbWUpIHtcbiAgICAgICAgaWYgKCF1c2VyTWFuYWdlcikge1xuICAgICAgICAgICAgTG9nLmVycm9yKFwiU2Vzc2lvbk1vbml0b3IuY3RvcjogTm8gdXNlciBtYW5hZ2VyIHBhc3NlZCB0byBTZXNzaW9uTW9uaXRvclwiKTtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInVzZXJNYW5hZ2VyXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fdXNlck1hbmFnZXIgPSB1c2VyTWFuYWdlcjtcbiAgICAgICAgdGhpcy5fQ2hlY2tTZXNzaW9uSUZyYW1lQ3RvciA9IENoZWNrU2Vzc2lvbklGcmFtZUN0b3I7XG5cbiAgICAgICAgdGhpcy5fdXNlck1hbmFnZXIuZXZlbnRzLmFkZFVzZXJMb2FkZWQodGhpcy5fc3RhcnQuYmluZCh0aGlzKSk7XG4gICAgICAgIHRoaXMuX3VzZXJNYW5hZ2VyLmV2ZW50cy5hZGRVc2VyVW5sb2FkZWQodGhpcy5fc3RvcC5iaW5kKHRoaXMpKTtcblxuICAgICAgICB0aGlzLl91c2VyTWFuYWdlci5nZXRVc2VyKCkudGhlbih1c2VyID0+IHtcbiAgICAgICAgICAgIC8vIGRvaW5nIHRoaXMgbWFudWFsbHkgaGVyZSBzaW5jZSBjYWxsaW5nIGdldFVzZXIgXG4gICAgICAgICAgICAvLyBkb2Vzbid0IHRyaWdnZXIgbG9hZCBldmVudC5cbiAgICAgICAgICAgIGlmICh1c2VyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhcnQodXNlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0aGlzLl9zZXR0aW5ncy5tb25pdG9yQW5vbnltb3VzU2Vzc2lvbikge1xuICAgICAgICAgICAgICAgIHRoaXMuX3VzZXJNYW5hZ2VyLnF1ZXJ5U2Vzc2lvblN0YXR1cygpLnRoZW4oc2Vzc2lvbiA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGxldCB0bXBVc2VyID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbl9zdGF0ZSA6IHNlc3Npb24uc2Vzc2lvbl9zdGF0ZVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2Vzc2lvbi5zdWIgJiYgc2Vzc2lvbi5zaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRtcFVzZXIucHJvZmlsZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWI6IHNlc3Npb24uc3ViLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZDogc2Vzc2lvbi5zaWRcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3RhcnQodG1wVXNlcik7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICAgICAgICAgICAgLy8gY2F0Y2ggdG8gc3VwcHJlc3MgZXJyb3JzIHNpbmNlIHdlJ3JlIGluIGEgY3RvclxuICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJTZXNzaW9uTW9uaXRvciBjdG9yOiBlcnJvciBmcm9tIHF1ZXJ5U2Vzc2lvblN0YXR1czpcIiwgZXJyLm1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KS5jYXRjaChlcnIgPT4ge1xuICAgICAgICAgICAgLy8gY2F0Y2ggdG8gc3VwcHJlc3MgZXJyb3JzIHNpbmNlIHdlJ3JlIGluIGEgY3RvclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiU2Vzc2lvbk1vbml0b3IgY3RvcjogZXJyb3IgZnJvbSBnZXRVc2VyOlwiLCBlcnIubWVzc2FnZSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGdldCBfc2V0dGluZ3MoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl91c2VyTWFuYWdlci5zZXR0aW5ncztcbiAgICB9XG4gICAgZ2V0IF9tZXRhZGF0YVNlcnZpY2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl91c2VyTWFuYWdlci5tZXRhZGF0YVNlcnZpY2U7XG4gICAgfVxuICAgIGdldCBfY2xpZW50X2lkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2V0dGluZ3MuY2xpZW50X2lkO1xuICAgIH1cbiAgICBnZXQgX2NoZWNrU2Vzc2lvbkludGVydmFsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2V0dGluZ3MuY2hlY2tTZXNzaW9uSW50ZXJ2YWw7XG4gICAgfVxuICAgIGdldCBfc3RvcENoZWNrU2Vzc2lvbk9uRXJyb3IoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zZXR0aW5ncy5zdG9wQ2hlY2tTZXNzaW9uT25FcnJvcjtcbiAgICB9XG5cbiAgICBfc3RhcnQodXNlcikge1xuICAgICAgICBsZXQgc2Vzc2lvbl9zdGF0ZSA9IHVzZXIuc2Vzc2lvbl9zdGF0ZTtcblxuICAgICAgICBpZiAoc2Vzc2lvbl9zdGF0ZSkge1xuICAgICAgICAgICAgaWYgKHVzZXIucHJvZmlsZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3N1YiA9IHVzZXIucHJvZmlsZS5zdWI7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2lkID0gdXNlci5wcm9maWxlLnNpZDtcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJTZXNzaW9uTW9uaXRvci5fc3RhcnQ6IHNlc3Npb25fc3RhdGU6XCIsIHNlc3Npb25fc3RhdGUsIFwiLCBzdWI6XCIsIHRoaXMuX3N1Yik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdWIgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2lkID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlNlc3Npb25Nb25pdG9yLl9zdGFydDogc2Vzc2lvbl9zdGF0ZTpcIiwgc2Vzc2lvbl9zdGF0ZSwgXCIsIGFub255bW91cyB1c2VyXCIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIXRoaXMuX2NoZWNrU2Vzc2lvbklGcmFtZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX21ldGFkYXRhU2VydmljZS5nZXRDaGVja1Nlc3Npb25JZnJhbWUoKS50aGVuKHVybCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1cmwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlNlc3Npb25Nb25pdG9yLl9zdGFydDogSW5pdGlhbGl6aW5nIGNoZWNrIHNlc3Npb24gaWZyYW1lXCIpXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjbGllbnRfaWQgPSB0aGlzLl9jbGllbnRfaWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgaW50ZXJ2YWwgPSB0aGlzLl9jaGVja1Nlc3Npb25JbnRlcnZhbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzdG9wT25FcnJvciA9IHRoaXMuX3N0b3BDaGVja1Nlc3Npb25PbkVycm9yO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGVja1Nlc3Npb25JRnJhbWUgPSBuZXcgdGhpcy5fQ2hlY2tTZXNzaW9uSUZyYW1lQ3Rvcih0aGlzLl9jYWxsYmFjay5iaW5kKHRoaXMpLCBjbGllbnRfaWQsIHVybCwgaW50ZXJ2YWwsIHN0b3BPbkVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoZWNrU2Vzc2lvbklGcmFtZS5sb2FkKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hlY2tTZXNzaW9uSUZyYW1lLnN0YXJ0KHNlc3Npb25fc3RhdGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBMb2cud2FybihcIlNlc3Npb25Nb25pdG9yLl9zdGFydDogTm8gY2hlY2sgc2Vzc2lvbiBpZnJhbWUgZm91bmQgaW4gdGhlIG1ldGFkYXRhXCIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICAgICAgICAgICAgLy8gY2F0Y2ggdG8gc3VwcHJlc3MgZXJyb3JzIHNpbmNlIHdlJ3JlIGluIG5vbi1wcm9taXNlIGNhbGxiYWNrXG4gICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIlNlc3Npb25Nb25pdG9yLl9zdGFydDogRXJyb3IgZnJvbSBnZXRDaGVja1Nlc3Npb25JZnJhbWU6XCIsIGVyci5tZXNzYWdlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX2NoZWNrU2Vzc2lvbklGcmFtZS5zdGFydChzZXNzaW9uX3N0YXRlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIF9zdG9wKCkge1xuICAgICAgICB0aGlzLl9zdWIgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuX3NpZCA9IHVuZGVmaW5lZDtcblxuICAgICAgICBpZiAodGhpcy5fY2hlY2tTZXNzaW9uSUZyYW1lKSB7XG4gICAgICAgICAgICBMb2cuZGVidWcoXCJTZXNzaW9uTW9uaXRvci5fc3RvcFwiKTtcbiAgICAgICAgICAgIHRoaXMuX2NoZWNrU2Vzc2lvbklGcmFtZS5zdG9wKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fc2V0dGluZ3MubW9uaXRvckFub255bW91c1Nlc3Npb24pIHtcbiAgICAgICAgICAgIHRoaXMuX3VzZXJNYW5hZ2VyLnF1ZXJ5U2Vzc2lvblN0YXR1cygpLnRoZW4oc2Vzc2lvbiA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IHRtcFVzZXIgPSB7XG4gICAgICAgICAgICAgICAgICAgIHNlc3Npb25fc3RhdGUgOiBzZXNzaW9uLnNlc3Npb25fc3RhdGVcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGlmIChzZXNzaW9uLnN1YiAmJiBzZXNzaW9uLnNpZCkge1xuICAgICAgICAgICAgICAgICAgICB0bXBVc2VyLnByb2ZpbGUgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdWI6IHNlc3Npb24uc3ViLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2lkOiBzZXNzaW9uLnNpZFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLl9zdGFydCh0bXBVc2VyKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICAgICAgICAvLyBjYXRjaCB0byBzdXBwcmVzcyBlcnJvcnMgc2luY2Ugd2UncmUgaW4gYSBjYWxsYmFja1xuICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIlNlc3Npb25Nb25pdG9yOiBlcnJvciBmcm9tIHF1ZXJ5U2Vzc2lvblN0YXR1czpcIiwgZXJyLm1lc3NhZ2UpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfY2FsbGJhY2soKSB7XG4gICAgICAgIHRoaXMuX3VzZXJNYW5hZ2VyLnF1ZXJ5U2Vzc2lvblN0YXR1cygpLnRoZW4oc2Vzc2lvbiA9PiB7XG4gICAgICAgICAgICB2YXIgcmFpc2VFdmVudCA9IHRydWU7XG5cbiAgICAgICAgICAgIGlmIChzZXNzaW9uKSB7XG4gICAgICAgICAgICAgICAgaWYgKHNlc3Npb24uc3ViID09PSB0aGlzLl9zdWIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmFpc2VFdmVudCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGVja1Nlc3Npb25JRnJhbWUuc3RhcnQoc2Vzc2lvbi5zZXNzaW9uX3N0YXRlKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoc2Vzc2lvbi5zaWQgPT09IHRoaXMuX3NpZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiU2Vzc2lvbk1vbml0b3IuX2NhbGxiYWNrOiBTYW1lIHN1YiBzdGlsbCBsb2dnZWQgaW4gYXQgT1AsIHJlc3RhcnRpbmcgY2hlY2sgc2Vzc2lvbiBpZnJhbWU7IHNlc3Npb25fc3RhdGU6XCIsIHNlc3Npb24uc2Vzc2lvbl9zdGF0ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJTZXNzaW9uTW9uaXRvci5fY2FsbGJhY2s6IFNhbWUgc3ViIHN0aWxsIGxvZ2dlZCBpbiBhdCBPUCwgc2Vzc2lvbiBzdGF0ZSBoYXMgY2hhbmdlZCwgcmVzdGFydGluZyBjaGVjayBzZXNzaW9uIGlmcmFtZTsgc2Vzc2lvbl9zdGF0ZTpcIiwgc2Vzc2lvbi5zZXNzaW9uX3N0YXRlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3VzZXJNYW5hZ2VyLmV2ZW50cy5fcmFpc2VVc2VyU2Vzc2lvbkNoYW5nZWQoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiU2Vzc2lvbk1vbml0b3IuX2NhbGxiYWNrOiBEaWZmZXJlbnQgc3ViamVjdCBzaWduZWQgaW50byBPUDpcIiwgc2Vzc2lvbi5zdWIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlNlc3Npb25Nb25pdG9yLl9jYWxsYmFjazogU3ViamVjdCBubyBsb25nZXIgc2lnbmVkIGludG8gT1BcIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChyYWlzZUV2ZW50KSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX3N1Yikge1xuICAgICAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJTZXNzaW9uTW9uaXRvci5fY2FsbGJhY2s6IFNlc3Npb25Nb25pdG9yLl9jYWxsYmFjazsgcmFpc2luZyBzaWduZWQgb3V0IGV2ZW50XCIpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl91c2VyTWFuYWdlci5ldmVudHMuX3JhaXNlVXNlclNpZ25lZE91dCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiU2Vzc2lvbk1vbml0b3IuX2NhbGxiYWNrOiBTZXNzaW9uTW9uaXRvci5fY2FsbGJhY2s7IHJhaXNpbmcgc2lnbmVkIGluIGV2ZW50XCIpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl91c2VyTWFuYWdlci5ldmVudHMuX3JhaXNlVXNlclNpZ25lZEluKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KS5jYXRjaChlcnIgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuX3N1Yikge1xuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlNlc3Npb25Nb25pdG9yLl9jYWxsYmFjazogRXJyb3IgY2FsbGluZyBxdWVyeUN1cnJlbnRTaWduaW5TZXNzaW9uOyByYWlzaW5nIHNpZ25lZCBvdXQgZXZlbnRcIiwgZXJyLm1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3VzZXJNYW5hZ2VyLmV2ZW50cy5fcmFpc2VVc2VyU2lnbmVkT3V0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXG5cbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcbmltcG9ydCB7IFVybFV0aWxpdHkgfSBmcm9tICcuL1VybFV0aWxpdHkuanMnO1xuaW1wb3J0IHsgU2lnbmluU3RhdGUgfSBmcm9tICcuL1NpZ25pblN0YXRlLmpzJztcblxuZXhwb3J0IGNsYXNzIFNpZ25pblJlcXVlc3Qge1xuICAgIGNvbnN0cnVjdG9yKHtcbiAgICAgICAgLy8gbWFuZGF0b3J5XG4gICAgICAgIHVybCwgY2xpZW50X2lkLCByZWRpcmVjdF91cmksIHJlc3BvbnNlX3R5cGUsIHNjb3BlLCBhdXRob3JpdHksXG4gICAgICAgIC8vIG9wdGlvbmFsXG4gICAgICAgIGRhdGEsIHByb21wdCwgZGlzcGxheSwgbWF4X2FnZSwgdWlfbG9jYWxlcywgaWRfdG9rZW5faGludCwgbG9naW5faGludCwgYWNyX3ZhbHVlcywgcmVzb3VyY2UsIHJlc3BvbnNlX21vZGUsXG4gICAgICAgIHJlcXVlc3QsIHJlcXVlc3RfdXJpLCBleHRyYVF1ZXJ5UGFyYW1zLCByZXF1ZXN0X3R5cGUsIGNsaWVudF9zZWNyZXQsIGV4dHJhVG9rZW5QYXJhbXMsIHNraXBVc2VySW5mb1xuICAgIH0pIHtcbiAgICAgICAgaWYgKCF1cmwpIHtcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlNpZ25pblJlcXVlc3QuY3RvcjogTm8gdXJsIHBhc3NlZFwiKTtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInVybFwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWNsaWVudF9pZCkge1xuICAgICAgICAgICAgTG9nLmVycm9yKFwiU2lnbmluUmVxdWVzdC5jdG9yOiBObyBjbGllbnRfaWQgcGFzc2VkXCIpO1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiY2xpZW50X2lkXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghcmVkaXJlY3RfdXJpKSB7XG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJTaWduaW5SZXF1ZXN0LmN0b3I6IE5vIHJlZGlyZWN0X3VyaSBwYXNzZWRcIik7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJyZWRpcmVjdF91cmlcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFyZXNwb25zZV90eXBlKSB7XG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJTaWduaW5SZXF1ZXN0LmN0b3I6IE5vIHJlc3BvbnNlX3R5cGUgcGFzc2VkXCIpO1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwicmVzcG9uc2VfdHlwZVwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXNjb3BlKSB7XG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJTaWduaW5SZXF1ZXN0LmN0b3I6IE5vIHNjb3BlIHBhc3NlZFwiKTtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInNjb3BlXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghYXV0aG9yaXR5KSB7XG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJTaWduaW5SZXF1ZXN0LmN0b3I6IE5vIGF1dGhvcml0eSBwYXNzZWRcIik7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJhdXRob3JpdHlcIik7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgb2lkYyA9IFNpZ25pblJlcXVlc3QuaXNPaWRjKHJlc3BvbnNlX3R5cGUpO1xuICAgICAgICBsZXQgY29kZSA9IFNpZ25pblJlcXVlc3QuaXNDb2RlKHJlc3BvbnNlX3R5cGUpO1xuXG4gICAgICAgIGlmICghcmVzcG9uc2VfbW9kZSkge1xuICAgICAgICAgICAgcmVzcG9uc2VfbW9kZSA9IFNpZ25pblJlcXVlc3QuaXNDb2RlKHJlc3BvbnNlX3R5cGUpID8gXCJxdWVyeVwiIDogbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc3RhdGUgPSBuZXcgU2lnbmluU3RhdGUoeyBub25jZTogb2lkYywgXG4gICAgICAgICAgICBkYXRhLCBjbGllbnRfaWQsIGF1dGhvcml0eSwgcmVkaXJlY3RfdXJpLCBcbiAgICAgICAgICAgIGNvZGVfdmVyaWZpZXI6IGNvZGUsIFxuICAgICAgICAgICAgcmVxdWVzdF90eXBlLCByZXNwb25zZV9tb2RlLFxuICAgICAgICAgICAgY2xpZW50X3NlY3JldCwgc2NvcGUsIGV4dHJhVG9rZW5QYXJhbXMsIHNraXBVc2VySW5mbyB9KTtcblxuICAgICAgICB1cmwgPSBVcmxVdGlsaXR5LmFkZFF1ZXJ5UGFyYW0odXJsLCBcImNsaWVudF9pZFwiLCBjbGllbnRfaWQpO1xuICAgICAgICB1cmwgPSBVcmxVdGlsaXR5LmFkZFF1ZXJ5UGFyYW0odXJsLCBcInJlZGlyZWN0X3VyaVwiLCByZWRpcmVjdF91cmkpO1xuICAgICAgICB1cmwgPSBVcmxVdGlsaXR5LmFkZFF1ZXJ5UGFyYW0odXJsLCBcInJlc3BvbnNlX3R5cGVcIiwgcmVzcG9uc2VfdHlwZSk7XG4gICAgICAgIHVybCA9IFVybFV0aWxpdHkuYWRkUXVlcnlQYXJhbSh1cmwsIFwic2NvcGVcIiwgc2NvcGUpO1xuXG4gICAgICAgIHVybCA9IFVybFV0aWxpdHkuYWRkUXVlcnlQYXJhbSh1cmwsIFwic3RhdGVcIiwgdGhpcy5zdGF0ZS5pZCk7XG4gICAgICAgIGlmIChvaWRjKSB7XG4gICAgICAgICAgICB1cmwgPSBVcmxVdGlsaXR5LmFkZFF1ZXJ5UGFyYW0odXJsLCBcIm5vbmNlXCIsIHRoaXMuc3RhdGUubm9uY2UpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb2RlKSB7XG4gICAgICAgICAgICB1cmwgPSBVcmxVdGlsaXR5LmFkZFF1ZXJ5UGFyYW0odXJsLCBcImNvZGVfY2hhbGxlbmdlXCIsIHRoaXMuc3RhdGUuY29kZV9jaGFsbGVuZ2UpO1xuICAgICAgICAgICAgdXJsID0gVXJsVXRpbGl0eS5hZGRRdWVyeVBhcmFtKHVybCwgXCJjb2RlX2NoYWxsZW5nZV9tZXRob2RcIiwgXCJTMjU2XCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIG9wdGlvbmFsID0geyBwcm9tcHQsIGRpc3BsYXksIG1heF9hZ2UsIHVpX2xvY2FsZXMsIGlkX3Rva2VuX2hpbnQsIGxvZ2luX2hpbnQsIGFjcl92YWx1ZXMsIHJlc291cmNlLCByZXF1ZXN0LCByZXF1ZXN0X3VyaSwgcmVzcG9uc2VfbW9kZSB9O1xuICAgICAgICBmb3IobGV0IGtleSBpbiBvcHRpb25hbCl7XG4gICAgICAgICAgICBpZiAob3B0aW9uYWxba2V5XSkge1xuICAgICAgICAgICAgICAgIHVybCA9IFVybFV0aWxpdHkuYWRkUXVlcnlQYXJhbSh1cmwsIGtleSwgb3B0aW9uYWxba2V5XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmb3IobGV0IGtleSBpbiBleHRyYVF1ZXJ5UGFyYW1zKXtcbiAgICAgICAgICAgIHVybCA9IFVybFV0aWxpdHkuYWRkUXVlcnlQYXJhbSh1cmwsIGtleSwgZXh0cmFRdWVyeVBhcmFtc1trZXldKVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy51cmwgPSB1cmw7XG4gICAgfVxuXG4gICAgc3RhdGljIGlzT2lkYyhyZXNwb25zZV90eXBlKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSByZXNwb25zZV90eXBlLnNwbGl0KC9cXHMrL2cpLmZpbHRlcihmdW5jdGlvbihpdGVtKSB7XG4gICAgICAgICAgICByZXR1cm4gaXRlbSA9PT0gXCJpZF90b2tlblwiO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuICEhKHJlc3VsdFswXSk7XG4gICAgfVxuXG4gICAgc3RhdGljIGlzT0F1dGgocmVzcG9uc2VfdHlwZSkge1xuICAgICAgICB2YXIgcmVzdWx0ID0gcmVzcG9uc2VfdHlwZS5zcGxpdCgvXFxzKy9nKS5maWx0ZXIoZnVuY3Rpb24oaXRlbSkge1xuICAgICAgICAgICAgcmV0dXJuIGl0ZW0gPT09IFwidG9rZW5cIjtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiAhIShyZXN1bHRbMF0pO1xuICAgIH1cbiAgICBcbiAgICBzdGF0aWMgaXNDb2RlKHJlc3BvbnNlX3R5cGUpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHJlc3BvbnNlX3R5cGUuc3BsaXQoL1xccysvZykuZmlsdGVyKGZ1bmN0aW9uKGl0ZW0pIHtcbiAgICAgICAgICAgIHJldHVybiBpdGVtID09PSBcImNvZGVcIjtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiAhIShyZXN1bHRbMF0pO1xuICAgIH1cbn1cbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXG5cbmltcG9ydCB7IFVybFV0aWxpdHkgfSBmcm9tICcuL1VybFV0aWxpdHkuanMnO1xuXG5jb25zdCBPaWRjU2NvcGUgPSBcIm9wZW5pZFwiO1xuXG5leHBvcnQgY2xhc3MgU2lnbmluUmVzcG9uc2Uge1xuICAgIGNvbnN0cnVjdG9yKHVybCwgZGVsaW1pdGVyID0gXCIjXCIpIHtcblxuICAgICAgICB2YXIgdmFsdWVzID0gVXJsVXRpbGl0eS5wYXJzZVVybEZyYWdtZW50KHVybCwgZGVsaW1pdGVyKTtcblxuICAgICAgICB0aGlzLmVycm9yID0gdmFsdWVzLmVycm9yO1xuICAgICAgICB0aGlzLmVycm9yX2Rlc2NyaXB0aW9uID0gdmFsdWVzLmVycm9yX2Rlc2NyaXB0aW9uO1xuICAgICAgICB0aGlzLmVycm9yX3VyaSA9IHZhbHVlcy5lcnJvcl91cmk7XG5cbiAgICAgICAgdGhpcy5jb2RlID0gdmFsdWVzLmNvZGU7XG4gICAgICAgIHRoaXMuc3RhdGUgPSB2YWx1ZXMuc3RhdGU7XG4gICAgICAgIHRoaXMuaWRfdG9rZW4gPSB2YWx1ZXMuaWRfdG9rZW47XG4gICAgICAgIHRoaXMuc2Vzc2lvbl9zdGF0ZSA9IHZhbHVlcy5zZXNzaW9uX3N0YXRlO1xuICAgICAgICB0aGlzLmFjY2Vzc190b2tlbiA9IHZhbHVlcy5hY2Nlc3NfdG9rZW47XG4gICAgICAgIHRoaXMudG9rZW5fdHlwZSA9IHZhbHVlcy50b2tlbl90eXBlO1xuICAgICAgICB0aGlzLnNjb3BlID0gdmFsdWVzLnNjb3BlO1xuICAgICAgICB0aGlzLnByb2ZpbGUgPSB1bmRlZmluZWQ7IC8vIHdpbGwgYmUgc2V0IGZyb20gUmVzcG9uc2VWYWxpZGF0b3JcblxuICAgICAgICB0aGlzLmV4cGlyZXNfaW4gPSB2YWx1ZXMuZXhwaXJlc19pbjtcbiAgICB9XG5cbiAgICBnZXQgZXhwaXJlc19pbigpIHtcbiAgICAgICAgaWYgKHRoaXMuZXhwaXJlc19hdCkge1xuICAgICAgICAgICAgbGV0IG5vdyA9IHBhcnNlSW50KERhdGUubm93KCkgLyAxMDAwKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmV4cGlyZXNfYXQgLSBub3c7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgc2V0IGV4cGlyZXNfaW4odmFsdWUpe1xuICAgICAgICBsZXQgZXhwaXJlc19pbiA9IHBhcnNlSW50KHZhbHVlKTtcbiAgICAgICAgaWYgKHR5cGVvZiBleHBpcmVzX2luID09PSAnbnVtYmVyJyAmJiBleHBpcmVzX2luID4gMCkge1xuICAgICAgICAgICAgbGV0IG5vdyA9IHBhcnNlSW50KERhdGUubm93KCkgLyAxMDAwKTtcbiAgICAgICAgICAgIHRoaXMuZXhwaXJlc19hdCA9IG5vdyArIGV4cGlyZXNfaW47XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXQgZXhwaXJlZCgpIHtcbiAgICAgICAgbGV0IGV4cGlyZXNfaW4gPSB0aGlzLmV4cGlyZXNfaW47XG4gICAgICAgIGlmIChleHBpcmVzX2luICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBleHBpcmVzX2luIDw9IDA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBnZXQgc2NvcGVzKCkge1xuICAgICAgICByZXR1cm4gKHRoaXMuc2NvcGUgfHwgXCJcIikuc3BsaXQoXCIgXCIpO1xuICAgIH1cblxuICAgIGdldCBpc09wZW5JZENvbm5lY3QoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNjb3Blcy5pbmRleE9mKE9pZGNTY29wZSkgPj0gMCB8fCAhIXRoaXMuaWRfdG9rZW47XG4gICAgfVxufVxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cblxuaW1wb3J0IHsgTG9nIH0gZnJvbSAnLi9Mb2cuanMnO1xuaW1wb3J0IHsgU3RhdGUgfSBmcm9tICcuL1N0YXRlLmpzJztcbmltcG9ydCB7IEpvc2VVdGlsIH0gZnJvbSAnLi9Kb3NlVXRpbC5qcyc7XG5pbXBvcnQgcmFuZG9tIGZyb20gJy4vcmFuZG9tLmpzJztcblxuZXhwb3J0IGNsYXNzIFNpZ25pblN0YXRlIGV4dGVuZHMgU3RhdGUge1xuICAgIGNvbnN0cnVjdG9yKHtub25jZSwgYXV0aG9yaXR5LCBjbGllbnRfaWQsIHJlZGlyZWN0X3VyaSwgY29kZV92ZXJpZmllciwgcmVzcG9uc2VfbW9kZSwgY2xpZW50X3NlY3JldCwgc2NvcGUsIGV4dHJhVG9rZW5QYXJhbXMsIHNraXBVc2VySW5mb30gPSB7fSkge1xuICAgICAgICBzdXBlcihhcmd1bWVudHNbMF0pO1xuXG4gICAgICAgIGlmIChub25jZSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgdGhpcy5fbm9uY2UgPSByYW5kb20oKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChub25jZSkge1xuICAgICAgICAgICAgdGhpcy5fbm9uY2UgPSBub25jZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb2RlX3ZlcmlmaWVyID09PSB0cnVlKSB7XG4gICAgICAgICAgICAvLyByYW5kb20oKSBwcm9kdWNlcyAzMiBsZW5ndGhcbiAgICAgICAgICAgIHRoaXMuX2NvZGVfdmVyaWZpZXIgPSByYW5kb20oKSArIHJhbmRvbSgpICsgcmFuZG9tKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY29kZV92ZXJpZmllcikge1xuICAgICAgICAgICAgdGhpcy5fY29kZV92ZXJpZmllciA9IGNvZGVfdmVyaWZpZXI7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGlmICh0aGlzLmNvZGVfdmVyaWZpZXIpIHtcbiAgICAgICAgICAgIGxldCBoYXNoID0gSm9zZVV0aWwuaGFzaFN0cmluZyh0aGlzLmNvZGVfdmVyaWZpZXIsIFwiU0hBMjU2XCIpO1xuICAgICAgICAgICAgdGhpcy5fY29kZV9jaGFsbGVuZ2UgPSBKb3NlVXRpbC5oZXhUb0Jhc2U2NFVybChoYXNoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3JlZGlyZWN0X3VyaSA9IHJlZGlyZWN0X3VyaTtcbiAgICAgICAgdGhpcy5fYXV0aG9yaXR5ID0gYXV0aG9yaXR5O1xuICAgICAgICB0aGlzLl9jbGllbnRfaWQgPSBjbGllbnRfaWQ7XG4gICAgICAgIHRoaXMuX3Jlc3BvbnNlX21vZGUgPSByZXNwb25zZV9tb2RlO1xuICAgICAgICB0aGlzLl9jbGllbnRfc2VjcmV0ID0gY2xpZW50X3NlY3JldDtcbiAgICAgICAgdGhpcy5fc2NvcGUgPSBzY29wZTtcbiAgICAgICAgdGhpcy5fZXh0cmFUb2tlblBhcmFtcyA9IGV4dHJhVG9rZW5QYXJhbXM7XG4gICAgICAgIHRoaXMuX3NraXBVc2VySW5mbyA9IHNraXBVc2VySW5mbztcbiAgICB9XG5cbiAgICBnZXQgbm9uY2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9ub25jZTtcbiAgICB9XG4gICAgZ2V0IGF1dGhvcml0eSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2F1dGhvcml0eTtcbiAgICB9XG4gICAgZ2V0IGNsaWVudF9pZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NsaWVudF9pZDtcbiAgICB9XG4gICAgZ2V0IHJlZGlyZWN0X3VyaSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlZGlyZWN0X3VyaTtcbiAgICB9XG4gICAgZ2V0IGNvZGVfdmVyaWZpZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb2RlX3ZlcmlmaWVyO1xuICAgIH1cbiAgICBnZXQgY29kZV9jaGFsbGVuZ2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb2RlX2NoYWxsZW5nZTtcbiAgICB9XG4gICAgZ2V0IHJlc3BvbnNlX21vZGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZXNwb25zZV9tb2RlO1xuICAgIH1cbiAgICBnZXQgY2xpZW50X3NlY3JldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NsaWVudF9zZWNyZXQ7XG4gICAgfVxuICAgIGdldCBzY29wZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Njb3BlO1xuICAgIH1cbiAgICBnZXQgZXh0cmFUb2tlblBhcmFtcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2V4dHJhVG9rZW5QYXJhbXM7XG4gICAgfVxuICAgIGdldCBza2lwVXNlckluZm8oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9za2lwVXNlckluZm87XG4gICAgfVxuICAgIFxuICAgIHRvU3RvcmFnZVN0cmluZygpIHtcbiAgICAgICAgTG9nLmRlYnVnKFwiU2lnbmluU3RhdGUudG9TdG9yYWdlU3RyaW5nXCIpO1xuICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgaWQ6IHRoaXMuaWQsXG4gICAgICAgICAgICBkYXRhOiB0aGlzLmRhdGEsXG4gICAgICAgICAgICBjcmVhdGVkOiB0aGlzLmNyZWF0ZWQsXG4gICAgICAgICAgICByZXF1ZXN0X3R5cGU6IHRoaXMucmVxdWVzdF90eXBlLFxuICAgICAgICAgICAgbm9uY2U6IHRoaXMubm9uY2UsXG4gICAgICAgICAgICBjb2RlX3ZlcmlmaWVyOiB0aGlzLmNvZGVfdmVyaWZpZXIsXG4gICAgICAgICAgICByZWRpcmVjdF91cmk6IHRoaXMucmVkaXJlY3RfdXJpLFxuICAgICAgICAgICAgYXV0aG9yaXR5OiB0aGlzLmF1dGhvcml0eSxcbiAgICAgICAgICAgIGNsaWVudF9pZDogdGhpcy5jbGllbnRfaWQsXG4gICAgICAgICAgICByZXNwb25zZV9tb2RlOiB0aGlzLnJlc3BvbnNlX21vZGUsXG4gICAgICAgICAgICBjbGllbnRfc2VjcmV0OiB0aGlzLmNsaWVudF9zZWNyZXQsXG4gICAgICAgICAgICBzY29wZTogdGhpcy5zY29wZSxcbiAgICAgICAgICAgIGV4dHJhVG9rZW5QYXJhbXMgOiB0aGlzLmV4dHJhVG9rZW5QYXJhbXMsXG4gICAgICAgICAgICBza2lwVXNlckluZm86IHRoaXMuc2tpcFVzZXJJbmZvXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tU3RvcmFnZVN0cmluZyhzdG9yYWdlU3RyaW5nKSB7XG4gICAgICAgIExvZy5kZWJ1ZyhcIlNpZ25pblN0YXRlLmZyb21TdG9yYWdlU3RyaW5nXCIpO1xuICAgICAgICB2YXIgZGF0YSA9IEpTT04ucGFyc2Uoc3RvcmFnZVN0cmluZyk7XG4gICAgICAgIHJldHVybiBuZXcgU2lnbmluU3RhdGUoZGF0YSk7XG4gICAgfVxufVxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cblxuaW1wb3J0IHsgTG9nIH0gZnJvbSAnLi9Mb2cuanMnO1xuaW1wb3J0IHsgVXJsVXRpbGl0eSB9IGZyb20gJy4vVXJsVXRpbGl0eS5qcyc7XG5pbXBvcnQgeyBTdGF0ZSB9IGZyb20gJy4vU3RhdGUuanMnO1xuXG5leHBvcnQgY2xhc3MgU2lnbm91dFJlcXVlc3Qge1xuICAgIGNvbnN0cnVjdG9yKHt1cmwsIGlkX3Rva2VuX2hpbnQsIHBvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaSwgZGF0YSwgZXh0cmFRdWVyeVBhcmFtcywgcmVxdWVzdF90eXBlfSkge1xuICAgICAgICBpZiAoIXVybCkge1xuICAgICAgICAgICAgTG9nLmVycm9yKFwiU2lnbm91dFJlcXVlc3QuY3RvcjogTm8gdXJsIHBhc3NlZFwiKTtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInVybFwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpZF90b2tlbl9oaW50KSB7XG4gICAgICAgICAgICB1cmwgPSBVcmxVdGlsaXR5LmFkZFF1ZXJ5UGFyYW0odXJsLCBcImlkX3Rva2VuX2hpbnRcIiwgaWRfdG9rZW5faGludCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpKSB7XG4gICAgICAgICAgICB1cmwgPSBVcmxVdGlsaXR5LmFkZFF1ZXJ5UGFyYW0odXJsLCBcInBvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaVwiLCBwb3N0X2xvZ291dF9yZWRpcmVjdF91cmkpO1xuXG4gICAgICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBuZXcgU3RhdGUoeyBkYXRhLCByZXF1ZXN0X3R5cGUgfSk7XG5cbiAgICAgICAgICAgICAgICB1cmwgPSBVcmxVdGlsaXR5LmFkZFF1ZXJ5UGFyYW0odXJsLCBcInN0YXRlXCIsIHRoaXMuc3RhdGUuaWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZm9yKGxldCBrZXkgaW4gZXh0cmFRdWVyeVBhcmFtcyl7XG4gICAgICAgICAgICB1cmwgPSBVcmxVdGlsaXR5LmFkZFF1ZXJ5UGFyYW0odXJsLCBrZXksIGV4dHJhUXVlcnlQYXJhbXNba2V5XSlcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudXJsID0gdXJsO1xuICAgIH1cbn1cbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXG5cbmltcG9ydCB7IFVybFV0aWxpdHkgfSBmcm9tICcuL1VybFV0aWxpdHkuanMnO1xuXG5leHBvcnQgY2xhc3MgU2lnbm91dFJlc3BvbnNlIHtcbiAgICBjb25zdHJ1Y3Rvcih1cmwpIHtcblxuICAgICAgICB2YXIgdmFsdWVzID0gVXJsVXRpbGl0eS5wYXJzZVVybEZyYWdtZW50KHVybCwgXCI/XCIpO1xuXG4gICAgICAgIHRoaXMuZXJyb3IgPSB2YWx1ZXMuZXJyb3I7XG4gICAgICAgIHRoaXMuZXJyb3JfZGVzY3JpcHRpb24gPSB2YWx1ZXMuZXJyb3JfZGVzY3JpcHRpb247XG4gICAgICAgIHRoaXMuZXJyb3JfdXJpID0gdmFsdWVzLmVycm9yX3VyaTtcblxuICAgICAgICB0aGlzLnN0YXRlID0gdmFsdWVzLnN0YXRlO1xuICAgIH1cbn1cbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXG5cbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcblxuZXhwb3J0IGNsYXNzIFNpbGVudFJlbmV3U2VydmljZSB7XG5cbiAgICBjb25zdHJ1Y3Rvcih1c2VyTWFuYWdlcikge1xuICAgICAgICB0aGlzLl91c2VyTWFuYWdlciA9IHVzZXJNYW5hZ2VyO1xuICAgIH1cblxuICAgIHN0YXJ0KCkge1xuICAgICAgICBpZiAoIXRoaXMuX2NhbGxiYWNrKSB7XG4gICAgICAgICAgICB0aGlzLl9jYWxsYmFjayA9IHRoaXMuX3Rva2VuRXhwaXJpbmcuYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuX3VzZXJNYW5hZ2VyLmV2ZW50cy5hZGRBY2Nlc3NUb2tlbkV4cGlyaW5nKHRoaXMuX2NhbGxiYWNrKTtcblxuICAgICAgICAgICAgLy8gdGhpcyB3aWxsIHRyaWdnZXIgbG9hZGluZyBvZiB0aGUgdXNlciBzbyB0aGUgZXhwaXJpbmcgZXZlbnRzIGNhbiBiZSBpbml0aWFsaXplZFxuICAgICAgICAgICAgdGhpcy5fdXNlck1hbmFnZXIuZ2V0VXNlcigpLnRoZW4odXNlcj0+e1xuICAgICAgICAgICAgICAgIC8vIGRlbGliZXJhdGUgbm9wXG4gICAgICAgICAgICB9KS5jYXRjaChlcnI9PntcbiAgICAgICAgICAgICAgICAvLyBjYXRjaCB0byBzdXBwcmVzcyBlcnJvcnMgc2luY2Ugd2UncmUgaW4gYSBjdG9yXG4gICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiU2lsZW50UmVuZXdTZXJ2aWNlLnN0YXJ0OiBFcnJvciBmcm9tIGdldFVzZXI6XCIsIGVyci5tZXNzYWdlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RvcCgpIHtcbiAgICAgICAgaWYgKHRoaXMuX2NhbGxiYWNrKSB7XG4gICAgICAgICAgICB0aGlzLl91c2VyTWFuYWdlci5ldmVudHMucmVtb3ZlQWNjZXNzVG9rZW5FeHBpcmluZyh0aGlzLl9jYWxsYmFjayk7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5fY2FsbGJhY2s7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfdG9rZW5FeHBpcmluZygpIHtcbiAgICAgICAgdGhpcy5fdXNlck1hbmFnZXIuc2lnbmluU2lsZW50KCkudGhlbih1c2VyID0+IHtcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlNpbGVudFJlbmV3U2VydmljZS5fdG9rZW5FeHBpcmluZzogU2lsZW50IHRva2VuIHJlbmV3YWwgc3VjY2Vzc2Z1bFwiKTtcbiAgICAgICAgfSwgZXJyID0+IHtcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlNpbGVudFJlbmV3U2VydmljZS5fdG9rZW5FeHBpcmluZzogRXJyb3IgZnJvbSBzaWduaW5TaWxlbnQ6XCIsIGVyci5tZXNzYWdlKTtcbiAgICAgICAgICAgIHRoaXMuX3VzZXJNYW5hZ2VyLmV2ZW50cy5fcmFpc2VTaWxlbnRSZW5ld0Vycm9yKGVycik7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXG5cbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcbmltcG9ydCByYW5kb20gZnJvbSAnLi9yYW5kb20uanMnO1xuXG5leHBvcnQgY2xhc3MgU3RhdGUge1xuICAgIGNvbnN0cnVjdG9yKHtpZCwgZGF0YSwgY3JlYXRlZCwgcmVxdWVzdF90eXBlfSA9IHt9KSB7XG4gICAgICAgIHRoaXMuX2lkID0gaWQgfHwgcmFuZG9tKCk7XG4gICAgICAgIHRoaXMuX2RhdGEgPSBkYXRhO1xuXG4gICAgICAgIGlmICh0eXBlb2YgY3JlYXRlZCA9PT0gJ251bWJlcicgJiYgY3JlYXRlZCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuX2NyZWF0ZWQgPSBjcmVhdGVkO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fY3JlYXRlZCA9IHBhcnNlSW50KERhdGUubm93KCkgLyAxMDAwKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9yZXF1ZXN0X3R5cGUgPSAgcmVxdWVzdF90eXBlO1xuICAgIH1cblxuICAgIGdldCBpZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lkO1xuICAgIH1cbiAgICBnZXQgZGF0YSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGE7XG4gICAgfVxuICAgIGdldCBjcmVhdGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY3JlYXRlZDtcbiAgICB9XG4gICAgZ2V0IHJlcXVlc3RfdHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlcXVlc3RfdHlwZTtcbiAgICB9XG5cbiAgICB0b1N0b3JhZ2VTdHJpbmcoKSB7XG4gICAgICAgIExvZy5kZWJ1ZyhcIlN0YXRlLnRvU3RvcmFnZVN0cmluZ1wiKTtcbiAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgIGlkOiB0aGlzLmlkLFxuICAgICAgICAgICAgZGF0YTogdGhpcy5kYXRhLFxuICAgICAgICAgICAgY3JlYXRlZDogdGhpcy5jcmVhdGVkLFxuICAgICAgICAgICAgcmVxdWVzdF90eXBlOiB0aGlzLnJlcXVlc3RfdHlwZVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbVN0b3JhZ2VTdHJpbmcoc3RvcmFnZVN0cmluZykge1xuICAgICAgICBMb2cuZGVidWcoXCJTdGF0ZS5mcm9tU3RvcmFnZVN0cmluZ1wiKTtcbiAgICAgICAgcmV0dXJuIG5ldyBTdGF0ZShKU09OLnBhcnNlKHN0b3JhZ2VTdHJpbmcpKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgY2xlYXJTdGFsZVN0YXRlKHN0b3JhZ2UsIGFnZSkge1xuXG4gICAgICAgIHZhciBjdXRvZmYgPSBEYXRlLm5vdygpIC8gMTAwMCAtIGFnZTtcblxuICAgICAgICByZXR1cm4gc3RvcmFnZS5nZXRBbGxLZXlzKCkudGhlbihrZXlzID0+IHtcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlN0YXRlLmNsZWFyU3RhbGVTdGF0ZTogZ290IGtleXNcIiwga2V5cyk7XG5cbiAgICAgICAgICAgIHZhciBwcm9taXNlcyA9IFtdO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbGV0IGtleSA9IGtleXNbaV07XG4gICAgICAgICAgICAgICAgdmFyIHAgPSBzdG9yYWdlLmdldChrZXkpLnRoZW4oaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGxldCByZW1vdmUgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RhdGUgPSBTdGF0ZS5mcm9tU3RvcmFnZVN0cmluZyhpdGVtKVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiU3RhdGUuY2xlYXJTdGFsZVN0YXRlOiBnb3QgaXRlbSBmcm9tIGtleTogXCIsIGtleSwgc3RhdGUuY3JlYXRlZCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGUuY3JlYXRlZCA8PSBjdXRvZmYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIlN0YXRlLmNsZWFyU3RhbGVTdGF0ZTogRXJyb3IgcGFyc2luZyBzdGF0ZSBmb3Iga2V5XCIsIGtleSwgZS5tZXNzYWdlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiU3RhdGUuY2xlYXJTdGFsZVN0YXRlOiBubyBpdGVtIGluIHN0b3JhZ2UgZm9yIGtleTogXCIsIGtleSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZW1vdmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlbW92ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiU3RhdGUuY2xlYXJTdGFsZVN0YXRlOiByZW1vdmVkIGl0ZW0gZm9yIGtleTogXCIsIGtleSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RvcmFnZS5yZW1vdmUoa2V5KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgcHJvbWlzZXMucHVzaChwKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiU3RhdGUuY2xlYXJTdGFsZVN0YXRlOiB3YWl0aW5nIG9uIHByb21pc2UgY291bnQ6XCIsIHByb21pc2VzLmxlbmd0aCk7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xuICAgICAgICB9KTtcbiAgICB9XG59XG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxuXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XG5pbXBvcnQgeyBHbG9iYWwgfSBmcm9tICcuL0dsb2JhbC5qcyc7XG5pbXBvcnQgeyBFdmVudCB9IGZyb20gJy4vRXZlbnQuanMnO1xuXG5jb25zdCBUaW1lckR1cmF0aW9uID0gNTsgLy8gc2Vjb25kc1xuXG5leHBvcnQgY2xhc3MgVGltZXIgZXh0ZW5kcyBFdmVudCB7XG5cbiAgICBjb25zdHJ1Y3RvcihuYW1lLCB0aW1lciA9IEdsb2JhbC50aW1lciwgbm93RnVuYyA9IHVuZGVmaW5lZCkge1xuICAgICAgICBzdXBlcihuYW1lKTtcbiAgICAgICAgdGhpcy5fdGltZXIgPSB0aW1lcjtcblxuICAgICAgICBpZiAobm93RnVuYykge1xuICAgICAgICAgICAgdGhpcy5fbm93RnVuYyA9IG5vd0Z1bmM7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9ub3dGdW5jID0gKCkgPT4gRGF0ZS5ub3coKSAvIDEwMDA7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXQgbm93KCkge1xuICAgICAgICByZXR1cm4gcGFyc2VJbnQodGhpcy5fbm93RnVuYygpKTtcbiAgICB9XG5cbiAgICBpbml0KGR1cmF0aW9uKSB7XG4gICAgICAgIGlmIChkdXJhdGlvbiA8PSAwKSB7XG4gICAgICAgICAgICBkdXJhdGlvbiA9IDE7XG4gICAgICAgIH1cbiAgICAgICAgZHVyYXRpb24gPSBwYXJzZUludChkdXJhdGlvbik7XG5cbiAgICAgICAgdmFyIGV4cGlyYXRpb24gPSB0aGlzLm5vdyArIGR1cmF0aW9uO1xuICAgICAgICBpZiAodGhpcy5leHBpcmF0aW9uID09PSBleHBpcmF0aW9uICYmIHRoaXMuX3RpbWVySGFuZGxlKSB7XG4gICAgICAgICAgICAvLyBubyBuZWVkIHRvIHJlaW5pdGlhbGl6ZSB0byBzYW1lIGV4cGlyYXRpb24sIHNvIGJhaWwgb3V0XG4gICAgICAgICAgICBMb2cuZGVidWcoXCJUaW1lci5pbml0IHRpbWVyIFwiICsgdGhpcy5fbmFtZSArIFwiIHNraXBwaW5nIGluaXRpYWxpemF0aW9uIHNpbmNlIGFscmVhZHkgaW5pdGlhbGl6ZWQgZm9yIGV4cGlyYXRpb246XCIsIHRoaXMuZXhwaXJhdGlvbik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNhbmNlbCgpO1xuXG4gICAgICAgIExvZy5kZWJ1ZyhcIlRpbWVyLmluaXQgdGltZXIgXCIgKyB0aGlzLl9uYW1lICsgXCIgZm9yIGR1cmF0aW9uOlwiLCBkdXJhdGlvbik7XG4gICAgICAgIHRoaXMuX2V4cGlyYXRpb24gPSBleHBpcmF0aW9uO1xuXG4gICAgICAgIC8vIHdlJ3JlIHVzaW5nIGEgZmFpcmx5IHNob3J0IHRpbWVyIGFuZCB0aGVuIGNoZWNraW5nIHRoZSBleHBpcmF0aW9uIGluIHRoZVxuICAgICAgICAvLyBjYWxsYmFjayB0byBoYW5kbGUgc2NlbmFyaW9zIHdoZXJlIHRoZSBicm93c2VyIGRldmljZSBzbGVlcHMsIGFuZCB0aGVuXG4gICAgICAgIC8vIHRoZSB0aW1lcnMgZW5kIHVwIGdldHRpbmcgZGVsYXllZC5cbiAgICAgICAgdmFyIHRpbWVyRHVyYXRpb24gPSBUaW1lckR1cmF0aW9uO1xuICAgICAgICBpZiAoZHVyYXRpb24gPCB0aW1lckR1cmF0aW9uKSB7XG4gICAgICAgICAgICB0aW1lckR1cmF0aW9uID0gZHVyYXRpb247XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fdGltZXJIYW5kbGUgPSB0aGlzLl90aW1lci5zZXRJbnRlcnZhbCh0aGlzLl9jYWxsYmFjay5iaW5kKHRoaXMpLCB0aW1lckR1cmF0aW9uICogMTAwMCk7XG4gICAgfVxuICAgIFxuICAgIGdldCBleHBpcmF0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZXhwaXJhdGlvbjtcbiAgICB9XG5cbiAgICBjYW5jZWwoKSB7XG4gICAgICAgIGlmICh0aGlzLl90aW1lckhhbmRsZSkge1xuICAgICAgICAgICAgTG9nLmRlYnVnKFwiVGltZXIuY2FuY2VsOiBcIiwgdGhpcy5fbmFtZSk7XG4gICAgICAgICAgICB0aGlzLl90aW1lci5jbGVhckludGVydmFsKHRoaXMuX3RpbWVySGFuZGxlKTtcbiAgICAgICAgICAgIHRoaXMuX3RpbWVySGFuZGxlID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIF9jYWxsYmFjaygpIHtcbiAgICAgICAgdmFyIGRpZmYgPSB0aGlzLl9leHBpcmF0aW9uIC0gdGhpcy5ub3c7XG4gICAgICAgIExvZy5kZWJ1ZyhcIlRpbWVyLmNhbGxiYWNrOyBcIiArIHRoaXMuX25hbWUgKyBcIiB0aW1lciBleHBpcmVzIGluOlwiLCBkaWZmKTtcblxuICAgICAgICBpZiAodGhpcy5fZXhwaXJhdGlvbiA8PSB0aGlzLm5vdykge1xuICAgICAgICAgICAgdGhpcy5jYW5jZWwoKTtcbiAgICAgICAgICAgIHN1cGVyLnJhaXNlKCk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxuXG5pbXBvcnQgeyBKc29uU2VydmljZSB9IGZyb20gJy4vSnNvblNlcnZpY2UuanMnO1xuaW1wb3J0IHsgTWV0YWRhdGFTZXJ2aWNlIH0gZnJvbSAnLi9NZXRhZGF0YVNlcnZpY2UuanMnO1xuaW1wb3J0IHsgTG9nIH0gZnJvbSAnLi9Mb2cuanMnO1xuXG5leHBvcnQgY2xhc3MgVG9rZW5DbGllbnQge1xuICAgIGNvbnN0cnVjdG9yKHNldHRpbmdzLCBKc29uU2VydmljZUN0b3IgPSBKc29uU2VydmljZSwgTWV0YWRhdGFTZXJ2aWNlQ3RvciA9IE1ldGFkYXRhU2VydmljZSkge1xuICAgICAgICBpZiAoIXNldHRpbmdzKSB7XG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJUb2tlbkNsaWVudC5jdG9yOiBObyBzZXR0aW5ncyBwYXNzZWRcIik7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJzZXR0aW5nc1wiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3NldHRpbmdzID0gc2V0dGluZ3M7XG4gICAgICAgIHRoaXMuX2pzb25TZXJ2aWNlID0gbmV3IEpzb25TZXJ2aWNlQ3RvcigpO1xuICAgICAgICB0aGlzLl9tZXRhZGF0YVNlcnZpY2UgPSBuZXcgTWV0YWRhdGFTZXJ2aWNlQ3Rvcih0aGlzLl9zZXR0aW5ncyk7XG4gICAgfVxuXG4gICAgZXhjaGFuZ2VDb2RlKGFyZ3MgPSB7fSkge1xuICAgICAgICBhcmdzID0gT2JqZWN0LmFzc2lnbih7fSwgYXJncyk7XG5cbiAgICAgICAgYXJncy5ncmFudF90eXBlID0gYXJncy5ncmFudF90eXBlIHx8IFwiYXV0aG9yaXphdGlvbl9jb2RlXCI7XG4gICAgICAgIGFyZ3MuY2xpZW50X2lkID0gYXJncy5jbGllbnRfaWQgfHwgdGhpcy5fc2V0dGluZ3MuY2xpZW50X2lkO1xuICAgICAgICBhcmdzLnJlZGlyZWN0X3VyaSA9IGFyZ3MucmVkaXJlY3RfdXJpIHx8IHRoaXMuX3NldHRpbmdzLnJlZGlyZWN0X3VyaTtcblxuICAgICAgICBpZiAoIWFyZ3MuY29kZSkge1xuICAgICAgICAgICAgTG9nLmVycm9yKFwiVG9rZW5DbGllbnQuZXhjaGFuZ2VDb2RlOiBObyBjb2RlIHBhc3NlZFwiKTtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJBIGNvZGUgaXMgcmVxdWlyZWRcIikpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghYXJncy5yZWRpcmVjdF91cmkpIHtcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlRva2VuQ2xpZW50LmV4Y2hhbmdlQ29kZTogTm8gcmVkaXJlY3RfdXJpIHBhc3NlZFwiKTtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJBIHJlZGlyZWN0X3VyaSBpcyByZXF1aXJlZFwiKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFhcmdzLmNvZGVfdmVyaWZpZXIpIHtcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlRva2VuQ2xpZW50LmV4Y2hhbmdlQ29kZTogTm8gY29kZV92ZXJpZmllciBwYXNzZWRcIik7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiQSBjb2RlX3ZlcmlmaWVyIGlzIHJlcXVpcmVkXCIpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWFyZ3MuY2xpZW50X2lkKSB7XG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJUb2tlbkNsaWVudC5leGNoYW5nZUNvZGU6IE5vIGNsaWVudF9pZCBwYXNzZWRcIik7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiQSBjbGllbnRfaWQgaXMgcmVxdWlyZWRcIikpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX21ldGFkYXRhU2VydmljZS5nZXRUb2tlbkVuZHBvaW50KGZhbHNlKS50aGVuKHVybCA9PiB7XG4gICAgICAgICAgICBMb2cuZGVidWcoXCJUb2tlbkNsaWVudC5leGNoYW5nZUNvZGU6IFJlY2VpdmVkIHRva2VuIGVuZHBvaW50XCIpO1xuXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fanNvblNlcnZpY2UucG9zdEZvcm0odXJsLCBhcmdzKS50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJUb2tlbkNsaWVudC5leGNoYW5nZUNvZGU6IHJlc3BvbnNlIHJlY2VpdmVkXCIpO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBleGNoYW5nZVJlZnJlc2hUb2tlbihhcmdzID0ge30pIHtcbiAgICAgICAgYXJncyA9IE9iamVjdC5hc3NpZ24oe30sIGFyZ3MpO1xuXG4gICAgICAgIGFyZ3MuZ3JhbnRfdHlwZSA9IGFyZ3MuZ3JhbnRfdHlwZSB8fCBcInJlZnJlc2hfdG9rZW5cIjtcbiAgICAgICAgYXJncy5jbGllbnRfaWQgPSBhcmdzLmNsaWVudF9pZCB8fCB0aGlzLl9zZXR0aW5ncy5jbGllbnRfaWQ7XG4gICAgICAgIGFyZ3MuY2xpZW50X3NlY3JldCA9IGFyZ3MuY2xpZW50X3NlY3JldCB8fCB0aGlzLl9zZXR0aW5ncy5jbGllbnRfc2VjcmV0O1xuXG4gICAgICAgIGlmICghYXJncy5yZWZyZXNoX3Rva2VuKSB7XG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJUb2tlbkNsaWVudC5leGNoYW5nZVJlZnJlc2hUb2tlbjogTm8gcmVmcmVzaF90b2tlbiBwYXNzZWRcIik7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiQSByZWZyZXNoX3Rva2VuIGlzIHJlcXVpcmVkXCIpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWFyZ3MuY2xpZW50X2lkKSB7XG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJUb2tlbkNsaWVudC5leGNoYW5nZVJlZnJlc2hUb2tlbjogTm8gY2xpZW50X2lkIHBhc3NlZFwiKTtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJBIGNsaWVudF9pZCBpcyByZXF1aXJlZFwiKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5fbWV0YWRhdGFTZXJ2aWNlLmdldFRva2VuRW5kcG9pbnQoZmFsc2UpLnRoZW4odXJsID0+IHtcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlRva2VuQ2xpZW50LmV4Y2hhbmdlUmVmcmVzaFRva2VuOiBSZWNlaXZlZCB0b2tlbiBlbmRwb2ludFwiKTtcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2pzb25TZXJ2aWNlLnBvc3RGb3JtKHVybCwgYXJncykudGhlbihyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiVG9rZW5DbGllbnQuZXhjaGFuZ2VSZWZyZXNoVG9rZW46IHJlc3BvbnNlIHJlY2VpdmVkXCIpO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG59XG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxuXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XG5pbXBvcnQgeyBNZXRhZGF0YVNlcnZpY2UgfSBmcm9tICcuL01ldGFkYXRhU2VydmljZS5qcyc7XG5pbXBvcnQgeyBHbG9iYWwgfSBmcm9tICcuL0dsb2JhbC5qcyc7XG5cbmNvbnN0IEFjY2Vzc1Rva2VuVHlwZUhpbnQgPSBcImFjY2Vzc190b2tlblwiO1xuY29uc3QgUmVmcmVzaFRva2VuVHlwZUhpbnQgPSBcInJlZnJlc2hfdG9rZW5cIjtcblxuZXhwb3J0IGNsYXNzIFRva2VuUmV2b2NhdGlvbkNsaWVudCB7XG4gICAgY29uc3RydWN0b3Ioc2V0dGluZ3MsIFhNTEh0dHBSZXF1ZXN0Q3RvciA9IEdsb2JhbC5YTUxIdHRwUmVxdWVzdCwgTWV0YWRhdGFTZXJ2aWNlQ3RvciA9IE1ldGFkYXRhU2VydmljZSkge1xuICAgICAgICBpZiAoIXNldHRpbmdzKSB7XG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJUb2tlblJldm9jYXRpb25DbGllbnQuY3RvcjogTm8gc2V0dGluZ3MgcHJvdmlkZWRcIik7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBzZXR0aW5ncyBwcm92aWRlZC5cIik7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9zZXR0aW5ncyA9IHNldHRpbmdzO1xuICAgICAgICB0aGlzLl9YTUxIdHRwUmVxdWVzdEN0b3IgPSBYTUxIdHRwUmVxdWVzdEN0b3I7XG4gICAgICAgIHRoaXMuX21ldGFkYXRhU2VydmljZSA9IG5ldyBNZXRhZGF0YVNlcnZpY2VDdG9yKHRoaXMuX3NldHRpbmdzKTtcbiAgICB9XG5cbiAgICByZXZva2UodG9rZW4sIHJlcXVpcmVkLCB0eXBlID0gXCJhY2Nlc3NfdG9rZW5cIikge1xuICAgICAgICBpZiAoIXRva2VuKSB7XG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJUb2tlblJldm9jYXRpb25DbGllbnQucmV2b2tlOiBObyB0b2tlbiBwcm92aWRlZFwiKTtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHRva2VuIHByb3ZpZGVkLlwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlICE9PSBBY2Nlc3NUb2tlblR5cGVIaW50ICYmIHR5cGUgIT0gUmVmcmVzaFRva2VuVHlwZUhpbnQpIHtcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlRva2VuUmV2b2NhdGlvbkNsaWVudC5yZXZva2U6IEludmFsaWQgdG9rZW4gdHlwZVwiKTtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgdG9rZW4gdHlwZS5cIik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5fbWV0YWRhdGFTZXJ2aWNlLmdldFJldm9jYXRpb25FbmRwb2ludCgpLnRoZW4odXJsID0+IHtcbiAgICAgICAgICAgIGlmICghdXJsKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlcXVpcmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIlRva2VuUmV2b2NhdGlvbkNsaWVudC5yZXZva2U6IFJldm9jYXRpb24gbm90IHN1cHBvcnRlZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUmV2b2NhdGlvbiBub3Qgc3VwcG9ydGVkXCIpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIG5vdCByZXF1aXJlZCwgc28gZG9uJ3QgZXJyb3IgYW5kIGp1c3QgcmV0dXJuXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJUb2tlblJldm9jYXRpb25DbGllbnQucmV2b2tlOiBSZXZva2luZyBcIiArIHR5cGUpO1xuICAgICAgICAgICAgdmFyIGNsaWVudF9pZCA9IHRoaXMuX3NldHRpbmdzLmNsaWVudF9pZDtcbiAgICAgICAgICAgIHZhciBjbGllbnRfc2VjcmV0ID0gdGhpcy5fc2V0dGluZ3MuY2xpZW50X3NlY3JldDtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZXZva2UodXJsLCBjbGllbnRfaWQsIGNsaWVudF9zZWNyZXQsIHRva2VuLCB0eXBlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgX3Jldm9rZSh1cmwsIGNsaWVudF9pZCwgY2xpZW50X3NlY3JldCwgdG9rZW4sIHR5cGUpIHtcblxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXG4gICAgICAgICAgICB2YXIgeGhyID0gbmV3IHRoaXMuX1hNTEh0dHBSZXF1ZXN0Q3RvcigpO1xuICAgICAgICAgICAgeGhyLm9wZW4oXCJQT1NUXCIsIHVybCk7XG5cbiAgICAgICAgICAgIHhoci5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiVG9rZW5SZXZvY2F0aW9uQ2xpZW50LnJldm9rZTogSFRUUCByZXNwb25zZSByZWNlaXZlZCwgc3RhdHVzXCIsIHhoci5zdGF0dXMpO1xuXG4gICAgICAgICAgICAgICAgaWYgKHhoci5zdGF0dXMgPT09IDIwMCkge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoRXJyb3IoeGhyLnN0YXR1c1RleHQgKyBcIiAoXCIgKyB4aHIuc3RhdHVzICsgXCIpXCIpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgeGhyLm9uZXJyb3IgPSAoKSA9PiB7IFxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlRva2VuUmV2b2NhdGlvbkNsaWVudC5yZXZva2U6IE5ldHdvcmsgRXJyb3IuXCIpXG4gICAgICAgICAgICAgICAgcmVqZWN0KFwiTmV0d29yayBFcnJvclwiKTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHZhciBib2R5ID0gXCJjbGllbnRfaWQ9XCIgKyBlbmNvZGVVUklDb21wb25lbnQoY2xpZW50X2lkKTtcbiAgICAgICAgICAgIGlmIChjbGllbnRfc2VjcmV0KSB7XG4gICAgICAgICAgICAgICAgYm9keSArPSBcIiZjbGllbnRfc2VjcmV0PVwiICsgZW5jb2RlVVJJQ29tcG9uZW50KGNsaWVudF9zZWNyZXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYm9keSArPSBcIiZ0b2tlbl90eXBlX2hpbnQ9XCIgKyBlbmNvZGVVUklDb21wb25lbnQodHlwZSk7XG4gICAgICAgICAgICBib2R5ICs9IFwiJnRva2VuPVwiICsgZW5jb2RlVVJJQ29tcG9uZW50KHRva2VuKTtcblxuICAgICAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoXCJDb250ZW50LVR5cGVcIiwgXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcIik7XG4gICAgICAgICAgICB4aHIuc2VuZChib2R5KTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cblxuaW1wb3J0IHsgTG9nIH0gZnJvbSAnLi9Mb2cuanMnO1xuaW1wb3J0IHsgR2xvYmFsIH0gZnJvbSAnLi9HbG9iYWwuanMnO1xuXG5leHBvcnQgY2xhc3MgVXJsVXRpbGl0eSB7XG4gICAgc3RhdGljIGFkZFF1ZXJ5UGFyYW0odXJsLCBuYW1lLCB2YWx1ZSkge1xuICAgICAgICBpZiAodXJsLmluZGV4T2YoJz8nKSA8IDApIHtcbiAgICAgICAgICAgIHVybCArPSBcIj9cIjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh1cmxbdXJsLmxlbmd0aCAtIDFdICE9PSBcIj9cIikge1xuICAgICAgICAgICAgdXJsICs9IFwiJlwiO1xuICAgICAgICB9XG5cbiAgICAgICAgdXJsICs9IGVuY29kZVVSSUNvbXBvbmVudChuYW1lKTtcbiAgICAgICAgdXJsICs9IFwiPVwiO1xuICAgICAgICB1cmwgKz0gZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKTtcblxuICAgICAgICByZXR1cm4gdXJsO1xuICAgIH1cblxuICAgIHN0YXRpYyBwYXJzZVVybEZyYWdtZW50KHZhbHVlLCBkZWxpbWl0ZXIgPSBcIiNcIiwgZ2xvYmFsID0gR2xvYmFsKSB7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnKXtcbiAgICAgICAgICAgIHZhbHVlID0gZ2xvYmFsLmxvY2F0aW9uLmhyZWY7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgaWR4ID0gdmFsdWUubGFzdEluZGV4T2YoZGVsaW1pdGVyKTtcbiAgICAgICAgaWYgKGlkeCA+PSAwKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnN1YnN0cihpZHggKyAxKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkZWxpbWl0ZXIgPT09IFwiP1wiKSB7XG4gICAgICAgICAgICAvLyBpZiB3ZSdyZSBkb2luZyBxdWVyeSwgdGhlbiBzdHJpcCBvZmYgaGFzaCBmcmFnbWVudCBiZWZvcmUgd2UgcGFyc2VcbiAgICAgICAgICAgIGlkeCA9IHZhbHVlLmluZGV4T2YoJyMnKTtcbiAgICAgICAgICAgIGlmIChpZHggPj0gMCkge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuc3Vic3RyKDAsIGlkeCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcGFyYW1zID0ge30sXG4gICAgICAgICAgICByZWdleCA9IC8oW14mPV0rKT0oW14mXSopL2csXG4gICAgICAgICAgICBtO1xuXG4gICAgICAgIHZhciBjb3VudGVyID0gMDtcbiAgICAgICAgd2hpbGUgKG0gPSByZWdleC5leGVjKHZhbHVlKSkge1xuICAgICAgICAgICAgcGFyYW1zW2RlY29kZVVSSUNvbXBvbmVudChtWzFdKV0gPSBkZWNvZGVVUklDb21wb25lbnQobVsyXSk7XG4gICAgICAgICAgICBpZiAoY291bnRlcisrID4gNTApIHtcbiAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJVcmxVdGlsaXR5LnBhcnNlVXJsRnJhZ21lbnQ6IHJlc3BvbnNlIGV4Y2VlZGVkIGV4cGVjdGVkIG51bWJlciBvZiBwYXJhbWV0ZXJzXCIsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBlcnJvcjogXCJSZXNwb25zZSBleGNlZWRlZCBleHBlY3RlZCBudW1iZXIgb2YgcGFyYW1ldGVyc1wiXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAodmFyIHByb3AgaW4gcGFyYW1zKSB7XG4gICAgICAgICAgICByZXR1cm4gcGFyYW1zO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbn1cbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXG5cbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcblxuZXhwb3J0IGNsYXNzIFVzZXIge1xuICAgIGNvbnN0cnVjdG9yKHtpZF90b2tlbiwgc2Vzc2lvbl9zdGF0ZSwgYWNjZXNzX3Rva2VuLCByZWZyZXNoX3Rva2VuLCB0b2tlbl90eXBlLCBzY29wZSwgcHJvZmlsZSwgZXhwaXJlc19hdCwgc3RhdGV9KSB7XG4gICAgICAgIHRoaXMuaWRfdG9rZW4gPSBpZF90b2tlbjtcbiAgICAgICAgdGhpcy5zZXNzaW9uX3N0YXRlID0gc2Vzc2lvbl9zdGF0ZTtcbiAgICAgICAgdGhpcy5hY2Nlc3NfdG9rZW4gPSBhY2Nlc3NfdG9rZW47XG4gICAgICAgIHRoaXMucmVmcmVzaF90b2tlbiA9IHJlZnJlc2hfdG9rZW47XG4gICAgICAgIHRoaXMudG9rZW5fdHlwZSA9IHRva2VuX3R5cGU7XG4gICAgICAgIHRoaXMuc2NvcGUgPSBzY29wZTtcbiAgICAgICAgdGhpcy5wcm9maWxlID0gcHJvZmlsZTtcbiAgICAgICAgdGhpcy5leHBpcmVzX2F0ID0gZXhwaXJlc19hdDtcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHN0YXRlO1xuICAgIH1cblxuICAgIGdldCBleHBpcmVzX2luKCkge1xuICAgICAgICBpZiAodGhpcy5leHBpcmVzX2F0KSB7XG4gICAgICAgICAgICBsZXQgbm93ID0gcGFyc2VJbnQoRGF0ZS5ub3coKSAvIDEwMDApO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXhwaXJlc19hdCAtIG5vdztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBzZXQgZXhwaXJlc19pbih2YWx1ZSkge1xuICAgICAgICBsZXQgZXhwaXJlc19pbiA9IHBhcnNlSW50KHZhbHVlKTtcbiAgICAgICAgaWYgKHR5cGVvZiBleHBpcmVzX2luID09PSAnbnVtYmVyJyAmJiBleHBpcmVzX2luID4gMCkge1xuICAgICAgICAgICAgbGV0IG5vdyA9IHBhcnNlSW50KERhdGUubm93KCkgLyAxMDAwKTtcbiAgICAgICAgICAgIHRoaXMuZXhwaXJlc19hdCA9IG5vdyArIGV4cGlyZXNfaW47XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXQgZXhwaXJlZCgpIHtcbiAgICAgICAgbGV0IGV4cGlyZXNfaW4gPSB0aGlzLmV4cGlyZXNfaW47XG4gICAgICAgIGlmIChleHBpcmVzX2luICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBleHBpcmVzX2luIDw9IDA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBnZXQgc2NvcGVzKCkge1xuICAgICAgICByZXR1cm4gKHRoaXMuc2NvcGUgfHwgXCJcIikuc3BsaXQoXCIgXCIpO1xuICAgIH1cblxuICAgIHRvU3RvcmFnZVN0cmluZygpIHtcbiAgICAgICAgTG9nLmRlYnVnKFwiVXNlci50b1N0b3JhZ2VTdHJpbmdcIik7XG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICBpZF90b2tlbjogdGhpcy5pZF90b2tlbixcbiAgICAgICAgICAgIHNlc3Npb25fc3RhdGU6IHRoaXMuc2Vzc2lvbl9zdGF0ZSxcbiAgICAgICAgICAgIGFjY2Vzc190b2tlbjogdGhpcy5hY2Nlc3NfdG9rZW4sXG4gICAgICAgICAgICByZWZyZXNoX3Rva2VuOiB0aGlzLnJlZnJlc2hfdG9rZW4sXG4gICAgICAgICAgICB0b2tlbl90eXBlOiB0aGlzLnRva2VuX3R5cGUsXG4gICAgICAgICAgICBzY29wZTogdGhpcy5zY29wZSxcbiAgICAgICAgICAgIHByb2ZpbGU6IHRoaXMucHJvZmlsZSxcbiAgICAgICAgICAgIGV4cGlyZXNfYXQ6IHRoaXMuZXhwaXJlc19hdFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZnJvbVN0b3JhZ2VTdHJpbmcoc3RvcmFnZVN0cmluZykge1xuICAgICAgICBMb2cuZGVidWcoXCJVc2VyLmZyb21TdG9yYWdlU3RyaW5nXCIpO1xuICAgICAgICByZXR1cm4gbmV3IFVzZXIoSlNPTi5wYXJzZShzdG9yYWdlU3RyaW5nKSk7XG4gICAgfVxufVxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cblxuaW1wb3J0IHsgSnNvblNlcnZpY2UgfSBmcm9tICcuL0pzb25TZXJ2aWNlLmpzJztcbmltcG9ydCB7IE1ldGFkYXRhU2VydmljZSB9IGZyb20gJy4vTWV0YWRhdGFTZXJ2aWNlLmpzJztcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcbmltcG9ydCB7IEpvc2VVdGlsIH0gZnJvbSAnLi9Kb3NlVXRpbC5qcyc7XG5cbmV4cG9ydCBjbGFzcyBVc2VySW5mb1NlcnZpY2Uge1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBzZXR0aW5ncywgXG4gICAgICAgIEpzb25TZXJ2aWNlQ3RvciA9IEpzb25TZXJ2aWNlLCBcbiAgICAgICAgTWV0YWRhdGFTZXJ2aWNlQ3RvciA9IE1ldGFkYXRhU2VydmljZSwgXG4gICAgICAgIGpvc2VVdGlsID0gSm9zZVV0aWxcbiAgICApIHtcbiAgICAgICAgaWYgKCFzZXR0aW5ncykge1xuICAgICAgICAgICAgTG9nLmVycm9yKFwiVXNlckluZm9TZXJ2aWNlLmN0b3I6IE5vIHNldHRpbmdzIHBhc3NlZFwiKTtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInNldHRpbmdzXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fc2V0dGluZ3MgPSBzZXR0aW5ncztcbiAgICAgICAgdGhpcy5fanNvblNlcnZpY2UgPSBuZXcgSnNvblNlcnZpY2VDdG9yKHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB0aGlzLl9nZXRDbGFpbXNGcm9tSnd0LmJpbmQodGhpcykpO1xuICAgICAgICB0aGlzLl9tZXRhZGF0YVNlcnZpY2UgPSBuZXcgTWV0YWRhdGFTZXJ2aWNlQ3Rvcih0aGlzLl9zZXR0aW5ncyk7XG4gICAgICAgIHRoaXMuX2pvc2VVdGlsID0gam9zZVV0aWw7XG4gICAgfVxuXG4gICAgZ2V0Q2xhaW1zKHRva2VuKSB7XG4gICAgICAgIGlmICghdG9rZW4pIHtcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlVzZXJJbmZvU2VydmljZS5nZXRDbGFpbXM6IE5vIHRva2VuIHBhc3NlZFwiKTtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJBIHRva2VuIGlzIHJlcXVpcmVkXCIpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLl9tZXRhZGF0YVNlcnZpY2UuZ2V0VXNlckluZm9FbmRwb2ludCgpLnRoZW4odXJsID0+IHtcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJJbmZvU2VydmljZS5nZXRDbGFpbXM6IHJlY2VpdmVkIHVzZXJpbmZvIHVybFwiLCB1cmwpO1xuXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fanNvblNlcnZpY2UuZ2V0SnNvbih1cmwsIHRva2VuKS50aGVuKGNsYWltcyA9PiB7XG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlckluZm9TZXJ2aWNlLmdldENsYWltczogY2xhaW1zIHJlY2VpdmVkXCIsIGNsYWltcyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNsYWltcztcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBfZ2V0Q2xhaW1zRnJvbUp3dChyZXEpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGxldCBqd3QgPSB0aGlzLl9qb3NlVXRpbC5wYXJzZUp3dChyZXEucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgIGlmICghand0IHx8ICFqd3QuaGVhZGVyIHx8ICFqd3QucGF5bG9hZCkge1xuICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIlVzZXJJbmZvU2VydmljZS5fZ2V0Q2xhaW1zRnJvbUp3dDogRmFpbGVkIHRvIHBhcnNlIEpXVFwiLCBqd3QpO1xuICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJGYWlsZWQgdG8gcGFyc2UgaWRfdG9rZW5cIikpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIga2lkID0gand0LmhlYWRlci5raWQ7XG5cbiAgICAgICAgICAgIGxldCBpc3N1ZXJQcm9taXNlO1xuICAgICAgICAgICAgc3dpdGNoICh0aGlzLl9zZXR0aW5ncy51c2VySW5mb0p3dElzc3Vlcikge1xuICAgICAgICAgICAgICAgIGNhc2UgJ09QJzpcbiAgICAgICAgICAgICAgICAgICAgaXNzdWVyUHJvbWlzZSA9IHRoaXMuX21ldGFkYXRhU2VydmljZS5nZXRJc3N1ZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnQU5ZJzpcbiAgICAgICAgICAgICAgICAgICAgaXNzdWVyUHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZShqd3QucGF5bG9hZC5pc3MpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBpc3N1ZXJQcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX3NldHRpbmdzLnVzZXJJbmZvSnd0SXNzdWVyKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBpc3N1ZXJQcm9taXNlLnRoZW4oaXNzdWVyID0+IHtcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VySW5mb1NlcnZpY2UuX2dldENsYWltc0Zyb21Kd3Q6IFJlY2VpdmVkIGlzc3VlcjpcIiArIGlzc3Vlcik7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fbWV0YWRhdGFTZXJ2aWNlLmdldFNpZ25pbmdLZXlzKCkudGhlbihrZXlzID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFrZXlzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJVc2VySW5mb1NlcnZpY2UuX2dldENsYWltc0Zyb21Kd3Q6IE5vIHNpZ25pbmcga2V5cyBmcm9tIG1ldGFkYXRhXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIk5vIHNpZ25pbmcga2V5cyBmcm9tIG1ldGFkYXRhXCIpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJJbmZvU2VydmljZS5fZ2V0Q2xhaW1zRnJvbUp3dDogUmVjZWl2ZWQgc2lnbmluZyBrZXlzXCIpO1xuICAgICAgICAgICAgICAgICAgICBsZXQga2V5O1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWtpZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAga2V5cyA9IHRoaXMuX2ZpbHRlckJ5QWxnKGtleXMsIGp3dC5oZWFkZXIuYWxnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGtleXMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIlVzZXJJbmZvU2VydmljZS5fZ2V0Q2xhaW1zRnJvbUp3dDogTm8ga2lkIGZvdW5kIGluIGlkX3Rva2VuIGFuZCBtb3JlIHRoYW4gb25lIGtleSBmb3VuZCBpbiBtZXRhZGF0YVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiTm8ga2lkIGZvdW5kIGluIGlkX3Rva2VuIGFuZCBtb3JlIHRoYW4gb25lIGtleSBmb3VuZCBpbiBtZXRhZGF0YVwiKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBraWQgaXMgbWFuZGF0b3J5IG9ubHkgd2hlbiB0aGVyZSBhcmUgbXVsdGlwbGUga2V5cyBpbiB0aGUgcmVmZXJlbmNlZCBKV0sgU2V0IGRvY3VtZW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2VlIGh0dHA6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LWNvcmUtMV8wLmh0bWwjU2lnbmluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleSA9IGtleXNbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBrZXkgPSBrZXlzLmZpbHRlcihrZXkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBrZXkua2lkID09PSBraWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KVswXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmICgha2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJVc2VySW5mb1NlcnZpY2UuX2dldENsYWltc0Zyb21Kd3Q6IE5vIGtleSBtYXRjaGluZyBraWQgb3IgYWxnIGZvdW5kIGluIHNpZ25pbmcga2V5c1wiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJObyBrZXkgbWF0Y2hpbmcga2lkIG9yIGFsZyBmb3VuZCBpbiBzaWduaW5nIGtleXNcIikpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgbGV0IGF1ZGllbmNlID0gdGhpcy5fc2V0dGluZ3MuY2xpZW50X2lkO1xuXG4gICAgICAgICAgICAgICAgICAgIGxldCBjbG9ja1NrZXdJblNlY29uZHMgPSB0aGlzLl9zZXR0aW5ncy5jbG9ja1NrZXc7XG4gICAgICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJJbmZvU2VydmljZS5fZ2V0Q2xhaW1zRnJvbUp3dDogVmFsaWRhaW5nIEpXVDsgdXNpbmcgY2xvY2sgc2tldyAoaW4gc2Vjb25kcykgb2Y6IFwiLCBjbG9ja1NrZXdJblNlY29uZHMpO1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9qb3NlVXRpbC52YWxpZGF0ZUp3dChyZXEucmVzcG9uc2VUZXh0LCBrZXksIGlzc3VlciwgYXVkaWVuY2UsIGNsb2NrU2tld0luU2Vjb25kcywgdW5kZWZpbmVkLCB0cnVlKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJJbmZvU2VydmljZS5fZ2V0Q2xhaW1zRnJvbUp3dDogSldUIHZhbGlkYXRpb24gc3VjY2Vzc2Z1bFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBqd3QucGF5bG9hZDtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgTG9nLmVycm9yKFwiVXNlckluZm9TZXJ2aWNlLl9nZXRDbGFpbXNGcm9tSnd0OiBFcnJvciBwYXJzaW5nIEpXVCByZXNwb25zZVwiLCBlLm1lc3NhZ2UpO1xuICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgX2ZpbHRlckJ5QWxnKGtleXMsIGFsZykge1xuICAgICAgICB2YXIga3R5ID0gbnVsbDtcbiAgICAgICAgaWYgKGFsZy5zdGFydHNXaXRoKFwiUlNcIikpIHtcbiAgICAgICAgICAgIGt0eSA9IFwiUlNBXCI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoYWxnLnN0YXJ0c1dpdGgoXCJQU1wiKSkge1xuICAgICAgICAgICAga3R5ID0gXCJQU1wiO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGFsZy5zdGFydHNXaXRoKFwiRVNcIikpIHtcbiAgICAgICAgICAgIGt0eSA9IFwiRUNcIjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJJbmZvU2VydmljZS5fZmlsdGVyQnlBbGc6IGFsZyBub3Qgc3VwcG9ydGVkOiBcIiwgYWxnKTtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuXG4gICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJJbmZvU2VydmljZS5fZmlsdGVyQnlBbGc6IExvb2tpbmcgZm9yIGtleXMgdGhhdCBtYXRjaCBrdHk6IFwiLCBrdHkpO1xuXG4gICAgICAgIGtleXMgPSBrZXlzLmZpbHRlcihrZXkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGtleS5rdHkgPT09IGt0eTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgTG9nLmRlYnVnKFwiVXNlckluZm9TZXJ2aWNlLl9maWx0ZXJCeUFsZzogTnVtYmVyIG9mIGtleXMgdGhhdCBtYXRjaCBrdHk6IFwiLCBrdHksIGtleXMubGVuZ3RoKTtcblxuICAgICAgICByZXR1cm4ga2V5cztcbiAgICB9XG59XG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxuXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XG5pbXBvcnQgeyBPaWRjQ2xpZW50IH0gZnJvbSAnLi9PaWRjQ2xpZW50LmpzJztcbmltcG9ydCB7IFVzZXJNYW5hZ2VyU2V0dGluZ3MgfSBmcm9tICcuL1VzZXJNYW5hZ2VyU2V0dGluZ3MuanMnO1xuaW1wb3J0IHsgVXNlciB9IGZyb20gJy4vVXNlci5qcyc7XG5pbXBvcnQgeyBVc2VyTWFuYWdlckV2ZW50cyB9IGZyb20gJy4vVXNlck1hbmFnZXJFdmVudHMuanMnO1xuaW1wb3J0IHsgU2lsZW50UmVuZXdTZXJ2aWNlIH0gZnJvbSAnLi9TaWxlbnRSZW5ld1NlcnZpY2UuanMnO1xuaW1wb3J0IHsgU2Vzc2lvbk1vbml0b3IgfSBmcm9tICcuL1Nlc3Npb25Nb25pdG9yLmpzJztcbmltcG9ydCB7IFRva2VuUmV2b2NhdGlvbkNsaWVudCB9IGZyb20gJy4vVG9rZW5SZXZvY2F0aW9uQ2xpZW50LmpzJztcbmltcG9ydCB7IFRva2VuQ2xpZW50IH0gZnJvbSAnLi9Ub2tlbkNsaWVudC5qcyc7XG5pbXBvcnQgeyBKb3NlVXRpbCB9IGZyb20gJy4vSm9zZVV0aWwuanMnO1xuXG5cbmV4cG9ydCBjbGFzcyBVc2VyTWFuYWdlciBleHRlbmRzIE9pZGNDbGllbnQge1xuICAgIGNvbnN0cnVjdG9yKHNldHRpbmdzID0ge30sXG4gICAgICAgIFNpbGVudFJlbmV3U2VydmljZUN0b3IgPSBTaWxlbnRSZW5ld1NlcnZpY2UsXG4gICAgICAgIFNlc3Npb25Nb25pdG9yQ3RvciA9IFNlc3Npb25Nb25pdG9yLFxuICAgICAgICBUb2tlblJldm9jYXRpb25DbGllbnRDdG9yID0gVG9rZW5SZXZvY2F0aW9uQ2xpZW50LFxuICAgICAgICBUb2tlbkNsaWVudEN0b3IgPSBUb2tlbkNsaWVudCxcbiAgICAgICAgam9zZVV0aWwgPSBKb3NlVXRpbFxuICAgICkge1xuXG4gICAgICAgIGlmICghKHNldHRpbmdzIGluc3RhbmNlb2YgVXNlck1hbmFnZXJTZXR0aW5ncykpIHtcbiAgICAgICAgICAgIHNldHRpbmdzID0gbmV3IFVzZXJNYW5hZ2VyU2V0dGluZ3Moc2V0dGluZ3MpO1xuICAgICAgICB9XG4gICAgICAgIHN1cGVyKHNldHRpbmdzKTtcblxuICAgICAgICB0aGlzLl9ldmVudHMgPSBuZXcgVXNlck1hbmFnZXJFdmVudHMoc2V0dGluZ3MpO1xuICAgICAgICB0aGlzLl9zaWxlbnRSZW5ld1NlcnZpY2UgPSBuZXcgU2lsZW50UmVuZXdTZXJ2aWNlQ3Rvcih0aGlzKTtcblxuICAgICAgICAvLyBvcmRlciBpcyBpbXBvcnRhbnQgZm9yIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczsgdGhlc2Ugc2VydmljZXMgZGVwZW5kIHVwb24gdGhlIGV2ZW50cy5cbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZ3MuYXV0b21hdGljU2lsZW50UmVuZXcpIHtcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyLmN0b3I6IGF1dG9tYXRpY1NpbGVudFJlbmV3IGlzIGNvbmZpZ3VyZWQsIHNldHRpbmcgdXAgc2lsZW50IHJlbmV3XCIpO1xuICAgICAgICAgICAgdGhpcy5zdGFydFNpbGVudFJlbmV3KCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5zZXR0aW5ncy5tb25pdG9yU2Vzc2lvbikge1xuICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXIuY3RvcjogbW9uaXRvclNlc3Npb24gaXMgY29uZmlndXJlZCwgc2V0dGluZyB1cCBzZXNzaW9uIG1vbml0b3JcIik7XG4gICAgICAgICAgICB0aGlzLl9zZXNzaW9uTW9uaXRvciA9IG5ldyBTZXNzaW9uTW9uaXRvckN0b3IodGhpcyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl90b2tlblJldm9jYXRpb25DbGllbnQgPSBuZXcgVG9rZW5SZXZvY2F0aW9uQ2xpZW50Q3Rvcih0aGlzLl9zZXR0aW5ncyk7XG4gICAgICAgIHRoaXMuX3Rva2VuQ2xpZW50ID0gbmV3IFRva2VuQ2xpZW50Q3Rvcih0aGlzLl9zZXR0aW5ncyk7XG4gICAgICAgIHRoaXMuX2pvc2VVdGlsID0gam9zZVV0aWw7XG4gICAgfVxuXG4gICAgZ2V0IF9yZWRpcmVjdE5hdmlnYXRvcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0dGluZ3MucmVkaXJlY3ROYXZpZ2F0b3I7XG4gICAgfVxuICAgIGdldCBfcG9wdXBOYXZpZ2F0b3IoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNldHRpbmdzLnBvcHVwTmF2aWdhdG9yO1xuICAgIH1cbiAgICBnZXQgX2lmcmFtZU5hdmlnYXRvcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0dGluZ3MuaWZyYW1lTmF2aWdhdG9yO1xuICAgIH1cbiAgICBnZXQgX3VzZXJTdG9yZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0dGluZ3MudXNlclN0b3JlO1xuICAgIH1cblxuICAgIGdldCBldmVudHMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9ldmVudHM7XG4gICAgfVxuXG4gICAgZ2V0VXNlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xvYWRVc2VyKCkudGhlbih1c2VyID0+IHtcbiAgICAgICAgICAgIGlmICh1c2VyKSB7XG4gICAgICAgICAgICAgICAgTG9nLmluZm8oXCJVc2VyTWFuYWdlci5nZXRVc2VyOiB1c2VyIGxvYWRlZFwiKTtcblxuICAgICAgICAgICAgICAgIHRoaXMuX2V2ZW50cy5sb2FkKHVzZXIsIGZhbHNlKTtcblxuICAgICAgICAgICAgICAgIHJldHVybiB1c2VyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgTG9nLmluZm8oXCJVc2VyTWFuYWdlci5nZXRVc2VyOiB1c2VyIG5vdCBmb3VuZCBpbiBzdG9yYWdlXCIpO1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICByZW1vdmVVc2VyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdG9yZVVzZXIobnVsbCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBMb2cuaW5mbyhcIlVzZXJNYW5hZ2VyLnJlbW92ZVVzZXI6IHVzZXIgcmVtb3ZlZCBmcm9tIHN0b3JhZ2VcIik7XG4gICAgICAgICAgICB0aGlzLl9ldmVudHMudW5sb2FkKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHNpZ25pblJlZGlyZWN0KGFyZ3MgPSB7fSkge1xuICAgICAgICBhcmdzID0gT2JqZWN0LmFzc2lnbih7fSwgYXJncyk7XG5cbiAgICAgICAgYXJncy5yZXF1ZXN0X3R5cGUgPSBcInNpOnJcIjtcbiAgICAgICAgbGV0IG5hdlBhcmFtcyA9IHtcbiAgICAgICAgICAgIHVzZVJlcGxhY2VUb05hdmlnYXRlIDogYXJncy51c2VSZXBsYWNlVG9OYXZpZ2F0ZVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gdGhpcy5fc2lnbmluU3RhcnQoYXJncywgdGhpcy5fcmVkaXJlY3ROYXZpZ2F0b3IsIG5hdlBhcmFtcykudGhlbigoKT0+e1xuICAgICAgICAgICAgTG9nLmluZm8oXCJVc2VyTWFuYWdlci5zaWduaW5SZWRpcmVjdDogc3VjY2Vzc2Z1bFwiKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHNpZ25pblJlZGlyZWN0Q2FsbGJhY2sodXJsKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zaWduaW5FbmQodXJsIHx8IHRoaXMuX3JlZGlyZWN0TmF2aWdhdG9yLnVybCkudGhlbih1c2VyID0+IHtcbiAgICAgICAgICAgIGlmICh1c2VyLnByb2ZpbGUgJiYgdXNlci5wcm9maWxlLnN1Yikge1xuICAgICAgICAgICAgICAgIExvZy5pbmZvKFwiVXNlck1hbmFnZXIuc2lnbmluUmVkaXJlY3RDYWxsYmFjazogc3VjY2Vzc2Z1bCwgc2lnbmVkIGluIHN1YjogXCIsIHVzZXIucHJvZmlsZS5zdWIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgTG9nLmluZm8oXCJVc2VyTWFuYWdlci5zaWduaW5SZWRpcmVjdENhbGxiYWNrOiBubyBzdWJcIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB1c2VyO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBzaWduaW5Qb3B1cChhcmdzID0ge30pIHtcbiAgICAgICAgYXJncyA9IE9iamVjdC5hc3NpZ24oe30sIGFyZ3MpO1xuXG4gICAgICAgIGFyZ3MucmVxdWVzdF90eXBlID0gXCJzaTpwXCI7XG4gICAgICAgIGxldCB1cmwgPSBhcmdzLnJlZGlyZWN0X3VyaSB8fCB0aGlzLnNldHRpbmdzLnBvcHVwX3JlZGlyZWN0X3VyaSB8fCB0aGlzLnNldHRpbmdzLnJlZGlyZWN0X3VyaTtcbiAgICAgICAgaWYgKCF1cmwpIHtcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlVzZXJNYW5hZ2VyLnNpZ25pblBvcHVwOiBObyBwb3B1cF9yZWRpcmVjdF91cmkgb3IgcmVkaXJlY3RfdXJpIGNvbmZpZ3VyZWRcIik7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiTm8gcG9wdXBfcmVkaXJlY3RfdXJpIG9yIHJlZGlyZWN0X3VyaSBjb25maWd1cmVkXCIpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGFyZ3MucmVkaXJlY3RfdXJpID0gdXJsO1xuICAgICAgICBhcmdzLmRpc3BsYXkgPSBcInBvcHVwXCI7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX3NpZ25pbihhcmdzLCB0aGlzLl9wb3B1cE5hdmlnYXRvciwge1xuICAgICAgICAgICAgc3RhcnRVcmw6IHVybCxcbiAgICAgICAgICAgIHBvcHVwV2luZG93RmVhdHVyZXM6IGFyZ3MucG9wdXBXaW5kb3dGZWF0dXJlcyB8fCB0aGlzLnNldHRpbmdzLnBvcHVwV2luZG93RmVhdHVyZXMsXG4gICAgICAgICAgICBwb3B1cFdpbmRvd1RhcmdldDogYXJncy5wb3B1cFdpbmRvd1RhcmdldCB8fCB0aGlzLnNldHRpbmdzLnBvcHVwV2luZG93VGFyZ2V0XG4gICAgICAgIH0pLnRoZW4odXNlciA9PiB7XG4gICAgICAgICAgICBpZiAodXNlcikge1xuICAgICAgICAgICAgICAgIGlmICh1c2VyLnByb2ZpbGUgJiYgdXNlci5wcm9maWxlLnN1Yikge1xuICAgICAgICAgICAgICAgICAgICBMb2cuaW5mbyhcIlVzZXJNYW5hZ2VyLnNpZ25pblBvcHVwOiBzaWduaW5Qb3B1cCBzdWNjZXNzZnVsLCBzaWduZWQgaW4gc3ViOiBcIiwgdXNlci5wcm9maWxlLnN1Yik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBMb2cuaW5mbyhcIlVzZXJNYW5hZ2VyLnNpZ25pblBvcHVwOiBubyBzdWJcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdXNlcjtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHNpZ25pblBvcHVwQ2FsbGJhY2sodXJsKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zaWduaW5DYWxsYmFjayh1cmwsIHRoaXMuX3BvcHVwTmF2aWdhdG9yKS50aGVuKHVzZXIgPT4ge1xuICAgICAgICAgICAgaWYgKHVzZXIpIHtcbiAgICAgICAgICAgICAgICBpZiAodXNlci5wcm9maWxlICYmIHVzZXIucHJvZmlsZS5zdWIpIHtcbiAgICAgICAgICAgICAgICAgICAgTG9nLmluZm8oXCJVc2VyTWFuYWdlci5zaWduaW5Qb3B1cENhbGxiYWNrOiBzdWNjZXNzZnVsLCBzaWduZWQgaW4gc3ViOiBcIiwgdXNlci5wcm9maWxlLnN1Yik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBMb2cuaW5mbyhcIlVzZXJNYW5hZ2VyLnNpZ25pblBvcHVwQ2FsbGJhY2s6IG5vIHN1YlwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB1c2VyO1xuICAgICAgICB9KS5jYXRjaChlcnI9PntcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlVzZXJNYW5hZ2VyLnNpZ25pblBvcHVwQ2FsbGJhY2sgZXJyb3I6IFwiICsgZXJyICYmIGVyci5tZXNzYWdlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgc2lnbmluU2lsZW50KGFyZ3MgPSB7fSkge1xuICAgICAgICBhcmdzID0gT2JqZWN0LmFzc2lnbih7fSwgYXJncyk7XG5cbiAgICAgICAgYXJncy5yZXF1ZXN0X3R5cGUgPSBcInNpOnNcIjtcbiAgICAgICAgLy8gZmlyc3QgZGV0ZXJtaW5lIGlmIHdlIGhhdmUgYSByZWZyZXNoIHRva2VuLCBvciBuZWVkIHRvIHVzZSBpZnJhbWVcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xvYWRVc2VyKCkudGhlbih1c2VyID0+IHtcbiAgICAgICAgICAgIGlmICh1c2VyICYmIHVzZXIucmVmcmVzaF90b2tlbikge1xuICAgICAgICAgICAgICAgIGFyZ3MucmVmcmVzaF90b2tlbiA9IHVzZXIucmVmcmVzaF90b2tlbjtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fdXNlUmVmcmVzaFRva2VuKGFyZ3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgYXJncy5pZF90b2tlbl9oaW50ID0gYXJncy5pZF90b2tlbl9oaW50IHx8ICh0aGlzLnNldHRpbmdzLmluY2x1ZGVJZFRva2VuSW5TaWxlbnRSZW5ldyAmJiB1c2VyICYmIHVzZXIuaWRfdG9rZW4pO1xuICAgICAgICAgICAgICAgIGlmICh1c2VyICYmIHRoaXMuX3NldHRpbmdzLnZhbGlkYXRlU3ViT25TaWxlbnRSZW5ldykge1xuICAgICAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlci5zaWduaW5TaWxlbnQsIHN1YmplY3QgcHJpb3IgdG8gc2lsZW50IHJlbmV3OiBcIiwgdXNlci5wcm9maWxlLnN1Yik7XG4gICAgICAgICAgICAgICAgICAgIGFyZ3MuY3VycmVudF9zdWIgPSB1c2VyLnByb2ZpbGUuc3ViO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fc2lnbmluU2lsZW50SWZyYW1lKGFyZ3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBfdXNlUmVmcmVzaFRva2VuKGFyZ3MgPSB7fSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdG9rZW5DbGllbnQuZXhjaGFuZ2VSZWZyZXNoVG9rZW4oYXJncykudGhlbihyZXN1bHQgPT4ge1xuICAgICAgICAgICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJVc2VyTWFuYWdlci5fdXNlUmVmcmVzaFRva2VuOiBObyByZXNwb25zZSByZXR1cm5lZCBmcm9tIHRva2VuIGVuZHBvaW50XCIpO1xuICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChcIk5vIHJlc3BvbnNlIHJldHVybmVkIGZyb20gdG9rZW4gZW5kcG9pbnRcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXJlc3VsdC5hY2Nlc3NfdG9rZW4pIHtcbiAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJVc2VyTWFuYWdlci5fdXNlUmVmcmVzaFRva2VuOiBObyBhY2Nlc3MgdG9rZW4gcmV0dXJuZWQgZnJvbSB0b2tlbiBlbmRwb2ludFwiKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoXCJObyBhY2Nlc3MgdG9rZW4gcmV0dXJuZWQgZnJvbSB0b2tlbiBlbmRwb2ludFwiKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2xvYWRVc2VyKCkudGhlbih1c2VyID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodXNlcikge1xuICAgICAgICAgICAgICAgICAgICBsZXQgaWRUb2tlblZhbGlkYXRpb24gPSBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5pZF90b2tlbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWRUb2tlblZhbGlkYXRpb24gPSB0aGlzLl92YWxpZGF0ZUlkVG9rZW5Gcm9tVG9rZW5SZWZyZXNoVG9rZW4odXNlci5wcm9maWxlLCByZXN1bHQuaWRfdG9rZW4pO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlkVG9rZW5WYWxpZGF0aW9uLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXIuX3VzZVJlZnJlc2hUb2tlbjogcmVmcmVzaCB0b2tlbiByZXNwb25zZSBzdWNjZXNzXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdXNlci5pZF90b2tlbiA9IHJlc3VsdC5pZF90b2tlbjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIuYWNjZXNzX3Rva2VuID0gcmVzdWx0LmFjY2Vzc190b2tlbjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIucmVmcmVzaF90b2tlbiA9IHJlc3VsdC5yZWZyZXNoX3Rva2VuIHx8IHVzZXIucmVmcmVzaF90b2tlbjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIuZXhwaXJlc19pbiA9IHJlc3VsdC5leHBpcmVzX2luO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zdG9yZVVzZXIodXNlcikudGhlbigoKT0+e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2V2ZW50cy5sb2FkKHVzZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1c2VyO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIF92YWxpZGF0ZUlkVG9rZW5Gcm9tVG9rZW5SZWZyZXNoVG9rZW4ocHJvZmlsZSwgaWRfdG9rZW4pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21ldGFkYXRhU2VydmljZS5nZXRJc3N1ZXIoKS50aGVuKGlzc3VlciA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fam9zZVV0aWwudmFsaWRhdGVKd3RBdHRyaWJ1dGVzKGlkX3Rva2VuLCBpc3N1ZXIsIHRoaXMuX3NldHRpbmdzLmNsaWVudF9pZCwgdGhpcy5fc2V0dGluZ3MuY2xvY2tTa2V3KS50aGVuKHBheWxvYWQgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghcGF5bG9hZCkge1xuICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJVc2VyTWFuYWdlci5fdmFsaWRhdGVJZFRva2VuRnJvbVRva2VuUmVmcmVzaFRva2VuOiBGYWlsZWQgdG8gdmFsaWRhdGUgaWRfdG9rZW5cIik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJGYWlsZWQgdG8gdmFsaWRhdGUgaWRfdG9rZW5cIikpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocGF5bG9hZC5zdWIgIT09IHByb2ZpbGUuc3ViKSB7XG4gICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIlVzZXJNYW5hZ2VyLl92YWxpZGF0ZUlkVG9rZW5Gcm9tVG9rZW5SZWZyZXNoVG9rZW46IHN1YiBpbiBpZF90b2tlbiBkb2VzIG5vdCBtYXRjaCBjdXJyZW50IHN1YlwiKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcInN1YiBpbiBpZF90b2tlbiBkb2VzIG5vdCBtYXRjaCBjdXJyZW50IHN1YlwiKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChwYXlsb2FkLmF1dGhfdGltZSAmJiBwYXlsb2FkLmF1dGhfdGltZSAhPT0gcHJvZmlsZS5hdXRoX3RpbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiVXNlck1hbmFnZXIuX3ZhbGlkYXRlSWRUb2tlbkZyb21Ub2tlblJlZnJlc2hUb2tlbjogYXV0aF90aW1lIGluIGlkX3Rva2VuIGRvZXMgbm90IG1hdGNoIG9yaWdpbmFsIGF1dGhfdGltZVwiKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcImF1dGhfdGltZSBpbiBpZF90b2tlbiBkb2VzIG5vdCBtYXRjaCBvcmlnaW5hbCBhdXRoX3RpbWVcIikpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocGF5bG9hZC5henAgJiYgcGF5bG9hZC5henAgIT09IHByb2ZpbGUuYXpwKSB7XG4gICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIlVzZXJNYW5hZ2VyLl92YWxpZGF0ZUlkVG9rZW5Gcm9tVG9rZW5SZWZyZXNoVG9rZW46IGF6cCBpbiBpZF90b2tlbiBkb2VzIG5vdCBtYXRjaCBvcmlnaW5hbCBhenBcIik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJhenAgaW4gaWRfdG9rZW4gZG9lcyBub3QgbWF0Y2ggb3JpZ2luYWwgYXpwXCIpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCFwYXlsb2FkLmF6cCAmJiBwcm9maWxlLmF6cCkge1xuICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJVc2VyTWFuYWdlci5fdmFsaWRhdGVJZFRva2VuRnJvbVRva2VuUmVmcmVzaFRva2VuOiBhenAgbm90IGluIGlkX3Rva2VuLCBidXQgcHJlc2VudCBpbiBvcmlnaW5hbCBpZF90b2tlblwiKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcImF6cCBub3QgaW4gaWRfdG9rZW4sIGJ1dCBwcmVzZW50IGluIG9yaWdpbmFsIGlkX3Rva2VuXCIpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIFxuICAgIF9zaWduaW5TaWxlbnRJZnJhbWUoYXJncyA9IHt9KSB7XG4gICAgICAgIGxldCB1cmwgPSBhcmdzLnJlZGlyZWN0X3VyaSB8fCB0aGlzLnNldHRpbmdzLnNpbGVudF9yZWRpcmVjdF91cmkgfHwgdGhpcy5zZXR0aW5ncy5yZWRpcmVjdF91cmk7XG4gICAgICAgIGlmICghdXJsKSB7XG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJVc2VyTWFuYWdlci5zaWduaW5TaWxlbnQ6IE5vIHNpbGVudF9yZWRpcmVjdF91cmkgY29uZmlndXJlZFwiKTtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJObyBzaWxlbnRfcmVkaXJlY3RfdXJpIGNvbmZpZ3VyZWRcIikpO1xuICAgICAgICB9XG5cbiAgICAgICAgYXJncy5yZWRpcmVjdF91cmkgPSB1cmw7XG4gICAgICAgIGFyZ3MucHJvbXB0ID0gYXJncy5wcm9tcHQgfHwgXCJub25lXCI7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX3NpZ25pbihhcmdzLCB0aGlzLl9pZnJhbWVOYXZpZ2F0b3IsIHtcbiAgICAgICAgICAgIHN0YXJ0VXJsOiB1cmwsXG4gICAgICAgICAgICBzaWxlbnRSZXF1ZXN0VGltZW91dDogYXJncy5zaWxlbnRSZXF1ZXN0VGltZW91dCB8fCB0aGlzLnNldHRpbmdzLnNpbGVudFJlcXVlc3RUaW1lb3V0XG4gICAgICAgIH0pLnRoZW4odXNlciA9PiB7XG4gICAgICAgICAgICBpZiAodXNlcikge1xuICAgICAgICAgICAgICAgIGlmICh1c2VyLnByb2ZpbGUgJiYgdXNlci5wcm9maWxlLnN1Yikge1xuICAgICAgICAgICAgICAgICAgICBMb2cuaW5mbyhcIlVzZXJNYW5hZ2VyLnNpZ25pblNpbGVudDogc3VjY2Vzc2Z1bCwgc2lnbmVkIGluIHN1YjogXCIsIHVzZXIucHJvZmlsZS5zdWIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgTG9nLmluZm8oXCJVc2VyTWFuYWdlci5zaWduaW5TaWxlbnQ6IG5vIHN1YlwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB1c2VyO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBzaWduaW5TaWxlbnRDYWxsYmFjayh1cmwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NpZ25pbkNhbGxiYWNrKHVybCwgdGhpcy5faWZyYW1lTmF2aWdhdG9yKS50aGVuKHVzZXIgPT4ge1xuICAgICAgICAgICAgaWYgKHVzZXIpIHtcbiAgICAgICAgICAgICAgICBpZiAodXNlci5wcm9maWxlICYmIHVzZXIucHJvZmlsZS5zdWIpIHtcbiAgICAgICAgICAgICAgICAgICAgTG9nLmluZm8oXCJVc2VyTWFuYWdlci5zaWduaW5TaWxlbnRDYWxsYmFjazogc3VjY2Vzc2Z1bCwgc2lnbmVkIGluIHN1YjogXCIsIHVzZXIucHJvZmlsZS5zdWIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgTG9nLmluZm8oXCJVc2VyTWFuYWdlci5zaWduaW5TaWxlbnRDYWxsYmFjazogbm8gc3ViXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHVzZXI7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHNpZ25pbkNhbGxiYWNrKHVybCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZWFkU2lnbmluUmVzcG9uc2VTdGF0ZSh1cmwpLnRoZW4oKHtzdGF0ZSwgcmVzcG9uc2V9KSA9PiB7XG4gICAgICAgICAgICBpZiAoc3RhdGUucmVxdWVzdF90eXBlID09PSBcInNpOnJcIikge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNpZ25pblJlZGlyZWN0Q2FsbGJhY2sodXJsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzdGF0ZS5yZXF1ZXN0X3R5cGUgPT09IFwic2k6cFwiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2lnbmluUG9wdXBDYWxsYmFjayh1cmwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHN0YXRlLnJlcXVlc3RfdHlwZSA9PT0gXCJzaTpzXCIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zaWduaW5TaWxlbnRDYWxsYmFjayh1cmwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcImludmFsaWQgcmVzcG9uc2VfdHlwZSBpbiBzdGF0ZVwiKSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHNpZ25vdXRDYWxsYmFjayh1cmwsIGtlZXBPcGVuKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlYWRTaWdub3V0UmVzcG9uc2VTdGF0ZSh1cmwpLnRoZW4oKHtzdGF0ZSwgcmVzcG9uc2V9KSA9PiB7XG4gICAgICAgICAgICBpZiAoc3RhdGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoc3RhdGUucmVxdWVzdF90eXBlID09PSBcInNvOnJcIikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zaWdub3V0UmVkaXJlY3RDYWxsYmFjayh1cmwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoc3RhdGUucmVxdWVzdF90eXBlID09PSBcInNvOnBcIikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zaWdub3V0UG9wdXBDYWxsYmFjayh1cmwsIGtlZXBPcGVuKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcImludmFsaWQgcmVzcG9uc2VfdHlwZSBpbiBzdGF0ZVwiKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHF1ZXJ5U2Vzc2lvblN0YXR1cyhhcmdzID0ge30pIHtcbiAgICAgICAgYXJncyA9IE9iamVjdC5hc3NpZ24oe30sIGFyZ3MpO1xuXG4gICAgICAgIGFyZ3MucmVxdWVzdF90eXBlID0gXCJzaTpzXCI7IC8vIHRoaXMgYWN0cyBsaWtlIGEgc2lnbmluIHNpbGVudFxuICAgICAgICBsZXQgdXJsID0gYXJncy5yZWRpcmVjdF91cmkgfHwgdGhpcy5zZXR0aW5ncy5zaWxlbnRfcmVkaXJlY3RfdXJpIHx8IHRoaXMuc2V0dGluZ3MucmVkaXJlY3RfdXJpO1xuICAgICAgICBpZiAoIXVybCkge1xuICAgICAgICAgICAgTG9nLmVycm9yKFwiVXNlck1hbmFnZXIucXVlcnlTZXNzaW9uU3RhdHVzOiBObyBzaWxlbnRfcmVkaXJlY3RfdXJpIGNvbmZpZ3VyZWRcIik7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiTm8gc2lsZW50X3JlZGlyZWN0X3VyaSBjb25maWd1cmVkXCIpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGFyZ3MucmVkaXJlY3RfdXJpID0gdXJsO1xuICAgICAgICBhcmdzLnByb21wdCA9IFwibm9uZVwiO1xuICAgICAgICBhcmdzLnJlc3BvbnNlX3R5cGUgPSBhcmdzLnJlc3BvbnNlX3R5cGUgfHwgdGhpcy5zZXR0aW5ncy5xdWVyeV9zdGF0dXNfcmVzcG9uc2VfdHlwZTtcbiAgICAgICAgYXJncy5zY29wZSA9IGFyZ3Muc2NvcGUgfHwgXCJvcGVuaWRcIjtcbiAgICAgICAgYXJncy5za2lwVXNlckluZm8gPSB0cnVlO1xuXG4gICAgICAgIHJldHVybiB0aGlzLl9zaWduaW5TdGFydChhcmdzLCB0aGlzLl9pZnJhbWVOYXZpZ2F0b3IsIHtcbiAgICAgICAgICAgIHN0YXJ0VXJsOiB1cmwsXG4gICAgICAgICAgICBzaWxlbnRSZXF1ZXN0VGltZW91dDogYXJncy5zaWxlbnRSZXF1ZXN0VGltZW91dCB8fCB0aGlzLnNldHRpbmdzLnNpbGVudFJlcXVlc3RUaW1lb3V0XG4gICAgICAgIH0pLnRoZW4obmF2UmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc1NpZ25pblJlc3BvbnNlKG5hdlJlc3BvbnNlLnVybCkudGhlbihzaWduaW5SZXNwb25zZSA9PiB7XG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXIucXVlcnlTZXNzaW9uU3RhdHVzOiBnb3Qgc2lnbmluIHJlc3BvbnNlXCIpO1xuXG4gICAgICAgICAgICAgICAgaWYgKHNpZ25pblJlc3BvbnNlLnNlc3Npb25fc3RhdGUgJiYgc2lnbmluUmVzcG9uc2UucHJvZmlsZS5zdWIpIHtcbiAgICAgICAgICAgICAgICAgICAgTG9nLmluZm8oXCJVc2VyTWFuYWdlci5xdWVyeVNlc3Npb25TdGF0dXM6IHF1ZXJ5U2Vzc2lvblN0YXR1cyBzdWNjZXNzIGZvciBzdWI6IFwiLCAgc2lnbmluUmVzcG9uc2UucHJvZmlsZS5zdWIpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbl9zdGF0ZTogc2lnbmluUmVzcG9uc2Uuc2Vzc2lvbl9zdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1Yjogc2lnbmluUmVzcG9uc2UucHJvZmlsZS5zdWIsXG4gICAgICAgICAgICAgICAgICAgICAgICBzaWQ6IHNpZ25pblJlc3BvbnNlLnByb2ZpbGUuc2lkXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBMb2cuaW5mbyhcInF1ZXJ5U2Vzc2lvblN0YXR1cyBzdWNjZXNzZnVsLCB1c2VyIG5vdCBhdXRoZW50aWNhdGVkXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyLnNlc3Npb25fc3RhdGUgJiYgdGhpcy5zZXR0aW5ncy5tb25pdG9yQW5vbnltb3VzU2Vzc2lvbikge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyLm1lc3NhZ2UgPT0gXCJsb2dpbl9yZXF1aXJlZFwiIHx8IFxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyLm1lc3NhZ2UgPT0gXCJjb25zZW50X3JlcXVpcmVkXCIgfHwgXG4gICAgICAgICAgICAgICAgICAgICAgICBlcnIubWVzc2FnZSA9PSBcImludGVyYWN0aW9uX3JlcXVpcmVkXCIgfHwgXG4gICAgICAgICAgICAgICAgICAgICAgICBlcnIubWVzc2FnZSA9PSBcImFjY291bnRfc2VsZWN0aW9uX3JlcXVpcmVkXCJcbiAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBMb2cuaW5mbyhcIlVzZXJNYW5hZ2VyLnF1ZXJ5U2Vzc2lvblN0YXR1czogcXVlcnlTZXNzaW9uU3RhdHVzIHN1Y2Nlc3MgZm9yIGFub255bW91cyB1c2VyXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uX3N0YXRlOiBlcnIuc2Vzc2lvbl9zdGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBfc2lnbmluKGFyZ3MsIG5hdmlnYXRvciwgbmF2aWdhdG9yUGFyYW1zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NpZ25pblN0YXJ0KGFyZ3MsIG5hdmlnYXRvciwgbmF2aWdhdG9yUGFyYW1zKS50aGVuKG5hdlJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9zaWduaW5FbmQobmF2UmVzcG9uc2UudXJsLCBhcmdzKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIF9zaWduaW5TdGFydChhcmdzLCBuYXZpZ2F0b3IsIG5hdmlnYXRvclBhcmFtcyA9IHt9KSB7XG5cbiAgICAgICAgcmV0dXJuIG5hdmlnYXRvci5wcmVwYXJlKG5hdmlnYXRvclBhcmFtcykudGhlbihoYW5kbGUgPT4ge1xuICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXIuX3NpZ25pblN0YXJ0OiBnb3QgbmF2aWdhdG9yIHdpbmRvdyBoYW5kbGVcIik7XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZVNpZ25pblJlcXVlc3QoYXJncykudGhlbihzaWduaW5SZXF1ZXN0ID0+IHtcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlci5fc2lnbmluU3RhcnQ6IGdvdCBzaWduaW4gcmVxdWVzdFwiKTtcblxuICAgICAgICAgICAgICAgIG5hdmlnYXRvclBhcmFtcy51cmwgPSBzaWduaW5SZXF1ZXN0LnVybDtcbiAgICAgICAgICAgICAgICBuYXZpZ2F0b3JQYXJhbXMuaWQgPSBzaWduaW5SZXF1ZXN0LnN0YXRlLmlkO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZS5uYXZpZ2F0ZShuYXZpZ2F0b3JQYXJhbXMpO1xuICAgICAgICAgICAgfSkuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaGFuZGxlLmNsb3NlKSB7XG4gICAgICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyLl9zaWduaW5TdGFydDogRXJyb3IgYWZ0ZXIgcHJlcGFyaW5nIG5hdmlnYXRvciwgY2xvc2luZyBuYXZpZ2F0b3Igd2luZG93XCIpO1xuICAgICAgICAgICAgICAgICAgICBoYW5kbGUuY2xvc2UoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBfc2lnbmluRW5kKHVybCwgYXJncyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NTaWduaW5SZXNwb25zZSh1cmwpLnRoZW4oc2lnbmluUmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXIuX3NpZ25pbkVuZDogZ290IHNpZ25pbiByZXNwb25zZVwiKTtcblxuICAgICAgICAgICAgbGV0IHVzZXIgPSBuZXcgVXNlcihzaWduaW5SZXNwb25zZSk7XG5cbiAgICAgICAgICAgIGlmIChhcmdzLmN1cnJlbnRfc3ViKSB7XG4gICAgICAgICAgICAgICAgaWYgKGFyZ3MuY3VycmVudF9zdWIgIT09IHVzZXIucHJvZmlsZS5zdWIpIHtcbiAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXIuX3NpZ25pbkVuZDogY3VycmVudCB1c2VyIGRvZXMgbm90IG1hdGNoIHVzZXIgcmV0dXJuZWQgZnJvbSBzaWduaW4uIHN1YiBmcm9tIHNpZ25pbjogXCIsIHVzZXIucHJvZmlsZS5zdWIpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwibG9naW5fcmVxdWlyZWRcIikpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXIuX3NpZ25pbkVuZDogY3VycmVudCB1c2VyIG1hdGNoZXMgdXNlciByZXR1cm5lZCBmcm9tIHNpZ25pblwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzLnN0b3JlVXNlcih1c2VyKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlci5fc2lnbmluRW5kOiB1c2VyIHN0b3JlZFwiKTtcblxuICAgICAgICAgICAgICAgIHRoaXMuX2V2ZW50cy5sb2FkKHVzZXIpO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHVzZXI7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIF9zaWduaW5DYWxsYmFjayh1cmwsIG5hdmlnYXRvcikge1xuICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlci5fc2lnbmluQ2FsbGJhY2tcIik7XG4gICAgICAgIHJldHVybiBuYXZpZ2F0b3IuY2FsbGJhY2sodXJsKTtcbiAgICB9XG5cbiAgICBzaWdub3V0UmVkaXJlY3QoYXJncyA9IHt9KSB7XG4gICAgICAgIGFyZ3MgPSBPYmplY3QuYXNzaWduKHt9LCBhcmdzKTtcblxuICAgICAgICBhcmdzLnJlcXVlc3RfdHlwZSA9IFwic286clwiO1xuICAgICAgICBsZXQgcG9zdExvZ291dFJlZGlyZWN0VXJpID0gYXJncy5wb3N0X2xvZ291dF9yZWRpcmVjdF91cmkgfHwgdGhpcy5zZXR0aW5ncy5wb3N0X2xvZ291dF9yZWRpcmVjdF91cmk7XG4gICAgICAgIGlmIChwb3N0TG9nb3V0UmVkaXJlY3RVcmkpe1xuICAgICAgICAgICAgYXJncy5wb3N0X2xvZ291dF9yZWRpcmVjdF91cmkgPSBwb3N0TG9nb3V0UmVkaXJlY3RVcmk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IG5hdlBhcmFtcyA9IHtcbiAgICAgICAgICAgIHVzZVJlcGxhY2VUb05hdmlnYXRlIDogYXJncy51c2VSZXBsYWNlVG9OYXZpZ2F0ZVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gdGhpcy5fc2lnbm91dFN0YXJ0KGFyZ3MsIHRoaXMuX3JlZGlyZWN0TmF2aWdhdG9yLCBuYXZQYXJhbXMpLnRoZW4oKCk9PntcbiAgICAgICAgICAgIExvZy5pbmZvKFwiVXNlck1hbmFnZXIuc2lnbm91dFJlZGlyZWN0OiBzdWNjZXNzZnVsXCIpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgc2lnbm91dFJlZGlyZWN0Q2FsbGJhY2sodXJsKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zaWdub3V0RW5kKHVybCB8fCB0aGlzLl9yZWRpcmVjdE5hdmlnYXRvci51cmwpLnRoZW4ocmVzcG9uc2U9PntcbiAgICAgICAgICAgIExvZy5pbmZvKFwiVXNlck1hbmFnZXIuc2lnbm91dFJlZGlyZWN0Q2FsbGJhY2s6IHN1Y2Nlc3NmdWxcIik7XG4gICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHNpZ25vdXRQb3B1cChhcmdzID0ge30pIHtcbiAgICAgICAgYXJncyA9IE9iamVjdC5hc3NpZ24oe30sIGFyZ3MpO1xuXG4gICAgICAgIGFyZ3MucmVxdWVzdF90eXBlID0gXCJzbzpwXCI7XG4gICAgICAgIGxldCB1cmwgPSBhcmdzLnBvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaSB8fCB0aGlzLnNldHRpbmdzLnBvcHVwX3Bvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaSB8fCB0aGlzLnNldHRpbmdzLnBvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaTtcbiAgICAgICAgYXJncy5wb3N0X2xvZ291dF9yZWRpcmVjdF91cmkgPSB1cmw7XG4gICAgICAgIGFyZ3MuZGlzcGxheSA9IFwicG9wdXBcIjtcbiAgICAgICAgaWYgKGFyZ3MucG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpKXtcbiAgICAgICAgICAgIC8vIHdlJ3JlIHB1dHRpbmcgYSBkdW1teSBlbnRyeSBpbiBoZXJlIGJlY2F1c2Ugd2VcbiAgICAgICAgICAgIC8vIG5lZWQgYSB1bmlxdWUgaWQgZnJvbSB0aGUgc3RhdGUgZm9yIG5vdGlmaWNhdGlvblxuICAgICAgICAgICAgLy8gdG8gdGhlIHBhcmVudCB3aW5kb3csIHdoaWNoIGlzIG5lY2Vzc2FyeSBpZiB3ZVxuICAgICAgICAgICAgLy8gcGxhbiB0byByZXR1cm4gYmFjayB0byB0aGUgY2xpZW50IGFmdGVyIHNpZ25vdXRcbiAgICAgICAgICAgIC8vIGFuZCBzbyB3ZSBjYW4gY2xvc2UgdGhlIHBvcHVwIGFmdGVyIHNpZ25vdXRcbiAgICAgICAgICAgIGFyZ3Muc3RhdGUgPSBhcmdzLnN0YXRlIHx8IHt9O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX3NpZ25vdXQoYXJncywgdGhpcy5fcG9wdXBOYXZpZ2F0b3IsIHtcbiAgICAgICAgICAgIHN0YXJ0VXJsOiB1cmwsXG4gICAgICAgICAgICBwb3B1cFdpbmRvd0ZlYXR1cmVzOiBhcmdzLnBvcHVwV2luZG93RmVhdHVyZXMgfHwgdGhpcy5zZXR0aW5ncy5wb3B1cFdpbmRvd0ZlYXR1cmVzLFxuICAgICAgICAgICAgcG9wdXBXaW5kb3dUYXJnZXQ6IGFyZ3MucG9wdXBXaW5kb3dUYXJnZXQgfHwgdGhpcy5zZXR0aW5ncy5wb3B1cFdpbmRvd1RhcmdldFxuICAgICAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIExvZy5pbmZvKFwiVXNlck1hbmFnZXIuc2lnbm91dFBvcHVwOiBzdWNjZXNzZnVsXCIpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgc2lnbm91dFBvcHVwQ2FsbGJhY2sodXJsLCBrZWVwT3Blbikge1xuICAgICAgICBpZiAodHlwZW9mKGtlZXBPcGVuKSA9PT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mKHVybCkgPT09ICdib29sZWFuJykge1xuICAgICAgICAgICAga2VlcE9wZW4gPSB1cmw7XG4gICAgICAgICAgICB1cmwgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGRlbGltaXRlciA9ICc/JztcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BvcHVwTmF2aWdhdG9yLmNhbGxiYWNrKHVybCwga2VlcE9wZW4sIGRlbGltaXRlcikudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBMb2cuaW5mbyhcIlVzZXJNYW5hZ2VyLnNpZ25vdXRQb3B1cENhbGxiYWNrOiBzdWNjZXNzZnVsXCIpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBfc2lnbm91dChhcmdzLCBuYXZpZ2F0b3IsIG5hdmlnYXRvclBhcmFtcyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zaWdub3V0U3RhcnQoYXJncywgbmF2aWdhdG9yLCBuYXZpZ2F0b3JQYXJhbXMpLnRoZW4obmF2UmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NpZ25vdXRFbmQobmF2UmVzcG9uc2UudXJsKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIF9zaWdub3V0U3RhcnQoYXJncyA9IHt9LCBuYXZpZ2F0b3IsIG5hdmlnYXRvclBhcmFtcyA9IHt9KSB7XG4gICAgICAgIHJldHVybiBuYXZpZ2F0b3IucHJlcGFyZShuYXZpZ2F0b3JQYXJhbXMpLnRoZW4oaGFuZGxlID0+IHtcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyLl9zaWdub3V0U3RhcnQ6IGdvdCBuYXZpZ2F0b3Igd2luZG93IGhhbmRsZVwiKTtcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2xvYWRVc2VyKCkudGhlbih1c2VyID0+IHtcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlci5fc2lnbm91dFN0YXJ0OiBsb2FkZWQgY3VycmVudCB1c2VyIGZyb20gc3RvcmFnZVwiKTtcblxuICAgICAgICAgICAgICAgIHZhciByZXZva2VQcm9taXNlID0gdGhpcy5fc2V0dGluZ3MucmV2b2tlQWNjZXNzVG9rZW5PblNpZ25vdXQgPyB0aGlzLl9yZXZva2VJbnRlcm5hbCh1c2VyKSA6IFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXZva2VQcm9taXNlLnRoZW4oKCkgPT4ge1xuXG4gICAgICAgICAgICAgICAgICAgIHZhciBpZF90b2tlbiA9IGFyZ3MuaWRfdG9rZW5faGludCB8fCB1c2VyICYmIHVzZXIuaWRfdG9rZW47XG4gICAgICAgICAgICAgICAgICAgIGlmIChpZF90b2tlbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXIuX3NpZ25vdXRTdGFydDogU2V0dGluZyBpZF90b2tlbiBpbnRvIHNpZ25vdXQgcmVxdWVzdFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MuaWRfdG9rZW5faGludCA9IGlkX3Rva2VuO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVtb3ZlVXNlcigpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXIuX3NpZ25vdXRTdGFydDogdXNlciByZW1vdmVkLCBjcmVhdGluZyBzaWdub3V0IHJlcXVlc3RcIik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZVNpZ25vdXRSZXF1ZXN0KGFyZ3MpLnRoZW4oc2lnbm91dFJlcXVlc3QgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyLl9zaWdub3V0U3RhcnQ6IGdvdCBzaWdub3V0IHJlcXVlc3RcIik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXZpZ2F0b3JQYXJhbXMudXJsID0gc2lnbm91dFJlcXVlc3QudXJsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzaWdub3V0UmVxdWVzdC5zdGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXZpZ2F0b3JQYXJhbXMuaWQgPSBzaWdub3V0UmVxdWVzdC5zdGF0ZS5pZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZS5uYXZpZ2F0ZShuYXZpZ2F0b3JQYXJhbXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSkuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaGFuZGxlLmNsb3NlKSB7XG4gICAgICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyLl9zaWdub3V0U3RhcnQ6IEVycm9yIGFmdGVyIHByZXBhcmluZyBuYXZpZ2F0b3IsIGNsb3NpbmcgbmF2aWdhdG9yIHdpbmRvd1wiKTtcbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlLmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgX3NpZ25vdXRFbmQodXJsKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NTaWdub3V0UmVzcG9uc2UodXJsKS50aGVuKHNpZ25vdXRSZXNwb25zZSA9PiB7XG4gICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlci5fc2lnbm91dEVuZDogZ290IHNpZ25vdXQgcmVzcG9uc2VcIik7XG5cbiAgICAgICAgICAgIHJldHVybiBzaWdub3V0UmVzcG9uc2U7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldm9rZUFjY2Vzc1Rva2VuKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbG9hZFVzZXIoKS50aGVuKHVzZXIgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Jldm9rZUludGVybmFsKHVzZXIsIHRydWUpLnRoZW4oc3VjY2VzcyA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXIucmV2b2tlQWNjZXNzVG9rZW46IHJlbW92aW5nIHRva2VuIHByb3BlcnRpZXMgZnJvbSB1c2VyIGFuZCByZS1zdG9yaW5nXCIpO1xuXG4gICAgICAgICAgICAgICAgICAgIHVzZXIuYWNjZXNzX3Rva2VuID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgdXNlci5yZWZyZXNoX3Rva2VuID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgdXNlci5leHBpcmVzX2F0ID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgdXNlci50b2tlbl90eXBlID0gbnVsbDtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zdG9yZVVzZXIodXNlcikudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlci5yZXZva2VBY2Nlc3NUb2tlbjogdXNlciBzdG9yZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9ldmVudHMubG9hZCh1c2VyKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pLnRoZW4oKCk9PntcbiAgICAgICAgICAgIExvZy5pbmZvKFwiVXNlck1hbmFnZXIucmV2b2tlQWNjZXNzVG9rZW46IGFjY2VzcyB0b2tlbiByZXZva2VkIHN1Y2Nlc3NmdWxseVwiKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgX3Jldm9rZUludGVybmFsKHVzZXIsIHJlcXVpcmVkKSB7XG4gICAgICAgIGlmICh1c2VyKSB7XG4gICAgICAgICAgICB2YXIgYWNjZXNzX3Rva2VuID0gdXNlci5hY2Nlc3NfdG9rZW47XG4gICAgICAgICAgICB2YXIgcmVmcmVzaF90b2tlbiA9IHVzZXIucmVmcmVzaF90b2tlbjtcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Jldm9rZUFjY2Vzc1Rva2VuSW50ZXJuYWwoYWNjZXNzX3Rva2VuLCByZXF1aXJlZClcbiAgICAgICAgICAgICAgICAudGhlbihhdFN1Y2Nlc3MgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcmV2b2tlUmVmcmVzaFRva2VuSW50ZXJuYWwocmVmcmVzaF90b2tlbiwgcmVxdWlyZWQpXG4gICAgICAgICAgICAgICAgICAgICAgICAudGhlbihydFN1Y2Nlc3MgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYXRTdWNjZXNzICYmICFydFN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXIucmV2b2tlQWNjZXNzVG9rZW46IG5vIG5lZWQgdG8gcmV2b2tlIGR1ZSB0byBubyB0b2tlbihzKSwgb3IgSldUIGZvcm1hdFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGF0U3VjY2VzcyB8fCBydFN1Y2Nlc3M7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xuICAgIH1cblxuICAgIF9yZXZva2VBY2Nlc3NUb2tlbkludGVybmFsKGFjY2Vzc190b2tlbiwgcmVxdWlyZWQpIHtcbiAgICAgICAgLy8gY2hlY2sgZm9yIEpXVCB2cy4gcmVmZXJlbmNlIHRva2VuXG4gICAgICAgIGlmICghYWNjZXNzX3Rva2VuIHx8IGFjY2Vzc190b2tlbi5pbmRleE9mKCcuJykgPj0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5fdG9rZW5SZXZvY2F0aW9uQ2xpZW50LnJldm9rZShhY2Nlc3NfdG9rZW4sIHJlcXVpcmVkKS50aGVuKCgpID0+IHRydWUpO1xuICAgIH1cblxuICAgIF9yZXZva2VSZWZyZXNoVG9rZW5JbnRlcm5hbChyZWZyZXNoX3Rva2VuLCByZXF1aXJlZCkge1xuICAgICAgICBpZiAoIXJlZnJlc2hfdG9rZW4pIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX3Rva2VuUmV2b2NhdGlvbkNsaWVudC5yZXZva2UocmVmcmVzaF90b2tlbiwgcmVxdWlyZWQsIFwicmVmcmVzaF90b2tlblwiKS50aGVuKCgpID0+IHRydWUpO1xuICAgIH1cblxuICAgIHN0YXJ0U2lsZW50UmVuZXcoKSB7XG4gICAgICAgIHRoaXMuX3NpbGVudFJlbmV3U2VydmljZS5zdGFydCgpO1xuICAgIH1cblxuICAgIHN0b3BTaWxlbnRSZW5ldygpIHtcbiAgICAgICAgdGhpcy5fc2lsZW50UmVuZXdTZXJ2aWNlLnN0b3AoKTtcbiAgICB9XG5cbiAgICBnZXQgX3VzZXJTdG9yZUtleSgpIHtcbiAgICAgICAgcmV0dXJuIGB1c2VyOiR7dGhpcy5zZXR0aW5ncy5hdXRob3JpdHl9OiR7dGhpcy5zZXR0aW5ncy5jbGllbnRfaWR9YDtcbiAgICB9XG5cbiAgICBfbG9hZFVzZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl91c2VyU3RvcmUuZ2V0KHRoaXMuX3VzZXJTdG9yZUtleSkudGhlbihzdG9yYWdlU3RyaW5nID0+IHtcbiAgICAgICAgICAgIGlmIChzdG9yYWdlU3RyaW5nKSB7XG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXIuX2xvYWRVc2VyOiB1c2VyIHN0b3JhZ2VTdHJpbmcgbG9hZGVkXCIpO1xuICAgICAgICAgICAgICAgIHJldHVybiBVc2VyLmZyb21TdG9yYWdlU3RyaW5nKHN0b3JhZ2VTdHJpbmcpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlci5fbG9hZFVzZXI6IG5vIHVzZXIgc3RvcmFnZVN0cmluZ1wiKTtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBzdG9yZVVzZXIodXNlcikge1xuICAgICAgICBpZiAodXNlcikge1xuICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXIuc3RvcmVVc2VyOiBzdG9yaW5nIHVzZXJcIik7XG5cbiAgICAgICAgICAgIHZhciBzdG9yYWdlU3RyaW5nID0gdXNlci50b1N0b3JhZ2VTdHJpbmcoKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl91c2VyU3RvcmUuc2V0KHRoaXMuX3VzZXJTdG9yZUtleSwgc3RvcmFnZVN0cmluZyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBMb2cuZGVidWcoXCJzdG9yZVVzZXIuc3RvcmVVc2VyOiByZW1vdmluZyB1c2VyXCIpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3VzZXJTdG9yZS5yZW1vdmUodGhpcy5fdXNlclN0b3JlS2V5KTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXG5cbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcbmltcG9ydCB7IEFjY2Vzc1Rva2VuRXZlbnRzIH0gZnJvbSAnLi9BY2Nlc3NUb2tlbkV2ZW50cy5qcyc7XG5pbXBvcnQgeyBFdmVudCB9IGZyb20gJy4vRXZlbnQuanMnO1xuXG5leHBvcnQgY2xhc3MgVXNlck1hbmFnZXJFdmVudHMgZXh0ZW5kcyBBY2Nlc3NUb2tlbkV2ZW50cyB7XG5cbiAgICBjb25zdHJ1Y3RvcihzZXR0aW5ncykge1xuICAgICAgICBzdXBlcihzZXR0aW5ncyk7XG4gICAgICAgIHRoaXMuX3VzZXJMb2FkZWQgPSBuZXcgRXZlbnQoXCJVc2VyIGxvYWRlZFwiKTtcbiAgICAgICAgdGhpcy5fdXNlclVubG9hZGVkID0gbmV3IEV2ZW50KFwiVXNlciB1bmxvYWRlZFwiKTtcbiAgICAgICAgdGhpcy5fc2lsZW50UmVuZXdFcnJvciA9IG5ldyBFdmVudChcIlNpbGVudCByZW5ldyBlcnJvclwiKTtcbiAgICAgICAgdGhpcy5fdXNlclNpZ25lZEluID0gbmV3IEV2ZW50KFwiVXNlciBzaWduZWQgaW5cIik7XG4gICAgICAgIHRoaXMuX3VzZXJTaWduZWRPdXQgPSBuZXcgRXZlbnQoXCJVc2VyIHNpZ25lZCBvdXRcIik7XG4gICAgICAgIHRoaXMuX3VzZXJTZXNzaW9uQ2hhbmdlZCA9IG5ldyBFdmVudChcIlVzZXIgc2Vzc2lvbiBjaGFuZ2VkXCIpO1xuICAgIH1cblxuICAgIGxvYWQodXNlciwgcmFpc2VFdmVudD10cnVlKSB7XG4gICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyRXZlbnRzLmxvYWRcIik7XG4gICAgICAgIHN1cGVyLmxvYWQodXNlcik7XG4gICAgICAgIGlmIChyYWlzZUV2ZW50KSB7XG4gICAgICAgICAgICB0aGlzLl91c2VyTG9hZGVkLnJhaXNlKHVzZXIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHVubG9hZCgpIHtcbiAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXJFdmVudHMudW5sb2FkXCIpO1xuICAgICAgICBzdXBlci51bmxvYWQoKTtcbiAgICAgICAgdGhpcy5fdXNlclVubG9hZGVkLnJhaXNlKCk7XG4gICAgfVxuXG4gICAgYWRkVXNlckxvYWRlZChjYikge1xuICAgICAgICB0aGlzLl91c2VyTG9hZGVkLmFkZEhhbmRsZXIoY2IpO1xuICAgIH1cbiAgICByZW1vdmVVc2VyTG9hZGVkKGNiKSB7XG4gICAgICAgIHRoaXMuX3VzZXJMb2FkZWQucmVtb3ZlSGFuZGxlcihjYik7XG4gICAgfVxuXG4gICAgYWRkVXNlclVubG9hZGVkKGNiKSB7XG4gICAgICAgIHRoaXMuX3VzZXJVbmxvYWRlZC5hZGRIYW5kbGVyKGNiKTtcbiAgICB9XG4gICAgcmVtb3ZlVXNlclVubG9hZGVkKGNiKSB7XG4gICAgICAgIHRoaXMuX3VzZXJVbmxvYWRlZC5yZW1vdmVIYW5kbGVyKGNiKTtcbiAgICB9XG5cbiAgICBhZGRTaWxlbnRSZW5ld0Vycm9yKGNiKSB7XG4gICAgICAgIHRoaXMuX3NpbGVudFJlbmV3RXJyb3IuYWRkSGFuZGxlcihjYik7XG4gICAgfVxuICAgIHJlbW92ZVNpbGVudFJlbmV3RXJyb3IoY2IpIHtcbiAgICAgICAgdGhpcy5fc2lsZW50UmVuZXdFcnJvci5yZW1vdmVIYW5kbGVyKGNiKTtcbiAgICB9XG4gICAgX3JhaXNlU2lsZW50UmVuZXdFcnJvcihlKSB7XG4gICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyRXZlbnRzLl9yYWlzZVNpbGVudFJlbmV3RXJyb3JcIiwgZS5tZXNzYWdlKTtcbiAgICAgICAgdGhpcy5fc2lsZW50UmVuZXdFcnJvci5yYWlzZShlKTtcbiAgICB9XG5cbiAgICBhZGRVc2VyU2lnbmVkSW4oY2IpIHtcbiAgICAgICAgdGhpcy5fdXNlclNpZ25lZEluLmFkZEhhbmRsZXIoY2IpO1xuICAgIH1cbiAgICByZW1vdmVVc2VyU2lnbmVkSW4oY2IpIHtcbiAgICAgICAgdGhpcy5fdXNlclNpZ25lZEluLnJlbW92ZUhhbmRsZXIoY2IpO1xuICAgIH1cbiAgICBfcmFpc2VVc2VyU2lnbmVkSW4oKSB7XG4gICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyRXZlbnRzLl9yYWlzZVVzZXJTaWduZWRJblwiKTtcbiAgICAgICAgdGhpcy5fdXNlclNpZ25lZEluLnJhaXNlKCk7XG4gICAgfVxuXG4gICAgYWRkVXNlclNpZ25lZE91dChjYikge1xuICAgICAgICB0aGlzLl91c2VyU2lnbmVkT3V0LmFkZEhhbmRsZXIoY2IpO1xuICAgIH1cbiAgICByZW1vdmVVc2VyU2lnbmVkT3V0KGNiKSB7XG4gICAgICAgIHRoaXMuX3VzZXJTaWduZWRPdXQucmVtb3ZlSGFuZGxlcihjYik7XG4gICAgfVxuICAgIF9yYWlzZVVzZXJTaWduZWRPdXQoKSB7XG4gICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyRXZlbnRzLl9yYWlzZVVzZXJTaWduZWRPdXRcIik7XG4gICAgICAgIHRoaXMuX3VzZXJTaWduZWRPdXQucmFpc2UoKTtcbiAgICB9XG5cbiAgICBhZGRVc2VyU2Vzc2lvbkNoYW5nZWQoY2IpIHtcbiAgICAgICAgdGhpcy5fdXNlclNlc3Npb25DaGFuZ2VkLmFkZEhhbmRsZXIoY2IpO1xuICAgIH1cbiAgICByZW1vdmVVc2VyU2Vzc2lvbkNoYW5nZWQoY2IpIHtcbiAgICAgICAgdGhpcy5fdXNlclNlc3Npb25DaGFuZ2VkLnJlbW92ZUhhbmRsZXIoY2IpO1xuICAgIH1cbiAgICBfcmFpc2VVc2VyU2Vzc2lvbkNoYW5nZWQoKSB7XG4gICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyRXZlbnRzLl9yYWlzZVVzZXJTZXNzaW9uQ2hhbmdlZFwiKTtcbiAgICAgICAgdGhpcy5fdXNlclNlc3Npb25DaGFuZ2VkLnJhaXNlKCk7XG4gICAgfVxufVxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cblxuaW1wb3J0IHsgTG9nIH0gZnJvbSAnLi9Mb2cuanMnO1xuaW1wb3J0IHsgT2lkY0NsaWVudFNldHRpbmdzIH0gZnJvbSAnLi9PaWRjQ2xpZW50U2V0dGluZ3MuanMnO1xuaW1wb3J0IHsgUmVkaXJlY3ROYXZpZ2F0b3IgfSBmcm9tICcuL1JlZGlyZWN0TmF2aWdhdG9yLmpzJztcbmltcG9ydCB7IFBvcHVwTmF2aWdhdG9yIH0gZnJvbSAnLi9Qb3B1cE5hdmlnYXRvci5qcyc7XG5pbXBvcnQgeyBJRnJhbWVOYXZpZ2F0b3IgfSBmcm9tICcuL0lGcmFtZU5hdmlnYXRvci5qcyc7XG5pbXBvcnQgeyBXZWJTdG9yYWdlU3RhdGVTdG9yZSB9IGZyb20gJy4vV2ViU3RvcmFnZVN0YXRlU3RvcmUuanMnO1xuaW1wb3J0IHsgR2xvYmFsIH0gZnJvbSAnLi9HbG9iYWwuanMnO1xuaW1wb3J0IHsgU2lnbmluUmVxdWVzdCB9IGZyb20gJy4vU2lnbmluUmVxdWVzdC5qcyc7XG5cbmNvbnN0IERlZmF1bHRBY2Nlc3NUb2tlbkV4cGlyaW5nTm90aWZpY2F0aW9uVGltZSA9IDYwO1xuY29uc3QgRGVmYXVsdENoZWNrU2Vzc2lvbkludGVydmFsID0gMjAwMDtcblxuZXhwb3J0IGNsYXNzIFVzZXJNYW5hZ2VyU2V0dGluZ3MgZXh0ZW5kcyBPaWRjQ2xpZW50U2V0dGluZ3Mge1xuICAgIGNvbnN0cnVjdG9yKHtcbiAgICAgICAgcG9wdXBfcmVkaXJlY3RfdXJpLFxuICAgICAgICBwb3B1cF9wb3N0X2xvZ291dF9yZWRpcmVjdF91cmksXG4gICAgICAgIHBvcHVwV2luZG93RmVhdHVyZXMsXG4gICAgICAgIHBvcHVwV2luZG93VGFyZ2V0LFxuICAgICAgICBzaWxlbnRfcmVkaXJlY3RfdXJpLFxuICAgICAgICBzaWxlbnRSZXF1ZXN0VGltZW91dCxcbiAgICAgICAgYXV0b21hdGljU2lsZW50UmVuZXcgPSBmYWxzZSxcbiAgICAgICAgdmFsaWRhdGVTdWJPblNpbGVudFJlbmV3ID0gZmFsc2UsXG4gICAgICAgIGluY2x1ZGVJZFRva2VuSW5TaWxlbnRSZW5ldyA9IHRydWUsXG4gICAgICAgIG1vbml0b3JTZXNzaW9uID0gdHJ1ZSxcbiAgICAgICAgbW9uaXRvckFub255bW91c1Nlc3Npb24gPSBmYWxzZSxcbiAgICAgICAgY2hlY2tTZXNzaW9uSW50ZXJ2YWwgPSBEZWZhdWx0Q2hlY2tTZXNzaW9uSW50ZXJ2YWwsXG4gICAgICAgIHN0b3BDaGVja1Nlc3Npb25PbkVycm9yID0gdHJ1ZSxcbiAgICAgICAgcXVlcnlfc3RhdHVzX3Jlc3BvbnNlX3R5cGUsXG4gICAgICAgIHJldm9rZUFjY2Vzc1Rva2VuT25TaWdub3V0ID0gZmFsc2UsXG4gICAgICAgIGFjY2Vzc1Rva2VuRXhwaXJpbmdOb3RpZmljYXRpb25UaW1lID0gRGVmYXVsdEFjY2Vzc1Rva2VuRXhwaXJpbmdOb3RpZmljYXRpb25UaW1lLFxuICAgICAgICByZWRpcmVjdE5hdmlnYXRvciA9IG5ldyBSZWRpcmVjdE5hdmlnYXRvcigpLFxuICAgICAgICBwb3B1cE5hdmlnYXRvciA9IG5ldyBQb3B1cE5hdmlnYXRvcigpLFxuICAgICAgICBpZnJhbWVOYXZpZ2F0b3IgPSBuZXcgSUZyYW1lTmF2aWdhdG9yKCksXG4gICAgICAgIHVzZXJTdG9yZSA9IG5ldyBXZWJTdG9yYWdlU3RhdGVTdG9yZSh7IHN0b3JlOiBHbG9iYWwuc2Vzc2lvblN0b3JhZ2UgfSlcbiAgICB9ID0ge30pIHtcbiAgICAgICAgc3VwZXIoYXJndW1lbnRzWzBdKTtcblxuICAgICAgICB0aGlzLl9wb3B1cF9yZWRpcmVjdF91cmkgPSBwb3B1cF9yZWRpcmVjdF91cmk7XG4gICAgICAgIHRoaXMuX3BvcHVwX3Bvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaSA9IHBvcHVwX3Bvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaTtcbiAgICAgICAgdGhpcy5fcG9wdXBXaW5kb3dGZWF0dXJlcyA9IHBvcHVwV2luZG93RmVhdHVyZXM7XG4gICAgICAgIHRoaXMuX3BvcHVwV2luZG93VGFyZ2V0ID0gcG9wdXBXaW5kb3dUYXJnZXQ7XG5cbiAgICAgICAgdGhpcy5fc2lsZW50X3JlZGlyZWN0X3VyaSA9IHNpbGVudF9yZWRpcmVjdF91cmk7XG4gICAgICAgIHRoaXMuX3NpbGVudFJlcXVlc3RUaW1lb3V0ID0gc2lsZW50UmVxdWVzdFRpbWVvdXQ7XG4gICAgICAgIHRoaXMuX2F1dG9tYXRpY1NpbGVudFJlbmV3ID0gYXV0b21hdGljU2lsZW50UmVuZXc7XG4gICAgICAgIHRoaXMuX3ZhbGlkYXRlU3ViT25TaWxlbnRSZW5ldyA9IHZhbGlkYXRlU3ViT25TaWxlbnRSZW5ldztcbiAgICAgICAgdGhpcy5faW5jbHVkZUlkVG9rZW5JblNpbGVudFJlbmV3ID0gaW5jbHVkZUlkVG9rZW5JblNpbGVudFJlbmV3O1xuICAgICAgICB0aGlzLl9hY2Nlc3NUb2tlbkV4cGlyaW5nTm90aWZpY2F0aW9uVGltZSA9IGFjY2Vzc1Rva2VuRXhwaXJpbmdOb3RpZmljYXRpb25UaW1lO1xuXG4gICAgICAgIHRoaXMuX21vbml0b3JTZXNzaW9uID0gbW9uaXRvclNlc3Npb247XG4gICAgICAgIHRoaXMuX21vbml0b3JBbm9ueW1vdXNTZXNzaW9uID0gbW9uaXRvckFub255bW91c1Nlc3Npb247XG4gICAgICAgIHRoaXMuX2NoZWNrU2Vzc2lvbkludGVydmFsID0gY2hlY2tTZXNzaW9uSW50ZXJ2YWw7XG4gICAgICAgIHRoaXMuX3N0b3BDaGVja1Nlc3Npb25PbkVycm9yID0gc3RvcENoZWNrU2Vzc2lvbk9uRXJyb3I7XG4gICAgICAgIGlmIChxdWVyeV9zdGF0dXNfcmVzcG9uc2VfdHlwZSkge1xuICAgICAgICAgICAgdGhpcy5fcXVlcnlfc3RhdHVzX3Jlc3BvbnNlX3R5cGUgPSBxdWVyeV9zdGF0dXNfcmVzcG9uc2VfdHlwZTtcbiAgICAgICAgfSBcbiAgICAgICAgZWxzZSBpZiAoYXJndW1lbnRzWzBdICYmIGFyZ3VtZW50c1swXS5yZXNwb25zZV90eXBlKSB7XG4gICAgICAgICAgICB0aGlzLl9xdWVyeV9zdGF0dXNfcmVzcG9uc2VfdHlwZSA9IFNpZ25pblJlcXVlc3QuaXNPaWRjKGFyZ3VtZW50c1swXS5yZXNwb25zZV90eXBlKSA/IFwiaWRfdG9rZW5cIiA6IFwiY29kZVwiO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fcXVlcnlfc3RhdHVzX3Jlc3BvbnNlX3R5cGUgPSBcImlkX3Rva2VuXCI7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fcmV2b2tlQWNjZXNzVG9rZW5PblNpZ25vdXQgPSByZXZva2VBY2Nlc3NUb2tlbk9uU2lnbm91dDtcblxuICAgICAgICB0aGlzLl9yZWRpcmVjdE5hdmlnYXRvciA9IHJlZGlyZWN0TmF2aWdhdG9yO1xuICAgICAgICB0aGlzLl9wb3B1cE5hdmlnYXRvciA9IHBvcHVwTmF2aWdhdG9yO1xuICAgICAgICB0aGlzLl9pZnJhbWVOYXZpZ2F0b3IgPSBpZnJhbWVOYXZpZ2F0b3I7XG5cbiAgICAgICAgdGhpcy5fdXNlclN0b3JlID0gdXNlclN0b3JlO1xuICAgIH1cblxuICAgIGdldCBwb3B1cF9yZWRpcmVjdF91cmkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wb3B1cF9yZWRpcmVjdF91cmk7XG4gICAgfVxuICAgIGdldCBwb3B1cF9wb3N0X2xvZ291dF9yZWRpcmVjdF91cmkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wb3B1cF9wb3N0X2xvZ291dF9yZWRpcmVjdF91cmk7XG4gICAgfVxuICAgIGdldCBwb3B1cFdpbmRvd0ZlYXR1cmVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcG9wdXBXaW5kb3dGZWF0dXJlcztcbiAgICB9XG4gICAgZ2V0IHBvcHVwV2luZG93VGFyZ2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcG9wdXBXaW5kb3dUYXJnZXQ7XG4gICAgfVxuXG4gICAgZ2V0IHNpbGVudF9yZWRpcmVjdF91cmkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zaWxlbnRfcmVkaXJlY3RfdXJpO1xuICAgIH1cbiAgICAgZ2V0IHNpbGVudFJlcXVlc3RUaW1lb3V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2lsZW50UmVxdWVzdFRpbWVvdXQ7XG4gICAgfVxuICAgIGdldCBhdXRvbWF0aWNTaWxlbnRSZW5ldygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2F1dG9tYXRpY1NpbGVudFJlbmV3O1xuICAgIH1cbiAgICBnZXQgdmFsaWRhdGVTdWJPblNpbGVudFJlbmV3KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdmFsaWRhdGVTdWJPblNpbGVudFJlbmV3O1xuICAgIH1cbiAgICBnZXQgaW5jbHVkZUlkVG9rZW5JblNpbGVudFJlbmV3KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faW5jbHVkZUlkVG9rZW5JblNpbGVudFJlbmV3O1xuICAgIH1cbiAgICBnZXQgYWNjZXNzVG9rZW5FeHBpcmluZ05vdGlmaWNhdGlvblRpbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hY2Nlc3NUb2tlbkV4cGlyaW5nTm90aWZpY2F0aW9uVGltZTtcbiAgICB9XG5cbiAgICBnZXQgbW9uaXRvclNlc3Npb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tb25pdG9yU2Vzc2lvbjtcbiAgICB9XG4gICAgZ2V0IG1vbml0b3JBbm9ueW1vdXNTZXNzaW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbW9uaXRvckFub255bW91c1Nlc3Npb247XG4gICAgfVxuICAgIGdldCBjaGVja1Nlc3Npb25JbnRlcnZhbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NoZWNrU2Vzc2lvbkludGVydmFsO1xuICAgIH1cbiAgICBnZXQgc3RvcENoZWNrU2Vzc2lvbk9uRXJyb3IoKXtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0b3BDaGVja1Nlc3Npb25PbkVycm9yO1xuICAgIH1cbiAgICBnZXQgcXVlcnlfc3RhdHVzX3Jlc3BvbnNlX3R5cGUoKXtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3F1ZXJ5X3N0YXR1c19yZXNwb25zZV90eXBlO1xuICAgIH1cbiAgICBnZXQgcmV2b2tlQWNjZXNzVG9rZW5PblNpZ25vdXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZXZva2VBY2Nlc3NUb2tlbk9uU2lnbm91dDtcbiAgICB9XG5cbiAgICBnZXQgcmVkaXJlY3ROYXZpZ2F0b3IoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZWRpcmVjdE5hdmlnYXRvcjtcbiAgICB9XG4gICAgZ2V0IHBvcHVwTmF2aWdhdG9yKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcG9wdXBOYXZpZ2F0b3I7XG4gICAgfVxuICAgIGdldCBpZnJhbWVOYXZpZ2F0b3IoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pZnJhbWVOYXZpZ2F0b3I7XG4gICAgfVxuXG4gICAgZ2V0IHVzZXJTdG9yZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3VzZXJTdG9yZTtcbiAgICB9XG59XG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxuXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XG5pbXBvcnQgeyBHbG9iYWwgfSBmcm9tICcuL0dsb2JhbC5qcyc7XG5cbmV4cG9ydCBjbGFzcyBXZWJTdG9yYWdlU3RhdGVTdG9yZSB7XG4gICAgY29uc3RydWN0b3Ioe3ByZWZpeCA9IFwib2lkYy5cIiwgc3RvcmUgPSBHbG9iYWwubG9jYWxTdG9yYWdlfSA9IHt9KSB7XG4gICAgICAgIHRoaXMuX3N0b3JlID0gc3RvcmU7XG4gICAgICAgIHRoaXMuX3ByZWZpeCA9IHByZWZpeDtcbiAgICB9XG5cbiAgICBzZXQoa2V5LCB2YWx1ZSkge1xuICAgICAgICBMb2cuZGVidWcoXCJXZWJTdG9yYWdlU3RhdGVTdG9yZS5zZXRcIiwga2V5KTtcblxuICAgICAgICBrZXkgPSB0aGlzLl9wcmVmaXggKyBrZXk7XG5cbiAgICAgICAgdGhpcy5fc3RvcmUuc2V0SXRlbShrZXksIHZhbHVlKTtcblxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgfVxuXG4gICAgZ2V0KGtleSkge1xuICAgICAgICBMb2cuZGVidWcoXCJXZWJTdG9yYWdlU3RhdGVTdG9yZS5nZXRcIiwga2V5KTtcblxuICAgICAgICBrZXkgPSB0aGlzLl9wcmVmaXggKyBrZXk7XG5cbiAgICAgICAgbGV0IGl0ZW0gPSB0aGlzLl9zdG9yZS5nZXRJdGVtKGtleSk7XG5cbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShpdGVtKTtcbiAgICB9XG5cbiAgICByZW1vdmUoa2V5KSB7XG4gICAgICAgIExvZy5kZWJ1ZyhcIldlYlN0b3JhZ2VTdGF0ZVN0b3JlLnJlbW92ZVwiLCBrZXkpO1xuXG4gICAgICAgIGtleSA9IHRoaXMuX3ByZWZpeCArIGtleTtcblxuICAgICAgICBsZXQgaXRlbSA9IHRoaXMuX3N0b3JlLmdldEl0ZW0oa2V5KTtcbiAgICAgICAgdGhpcy5fc3RvcmUucmVtb3ZlSXRlbShrZXkpO1xuXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoaXRlbSk7XG4gICAgfVxuXG4gICAgZ2V0QWxsS2V5cygpIHtcbiAgICAgICAgTG9nLmRlYnVnKFwiV2ViU3RvcmFnZVN0YXRlU3RvcmUuZ2V0QWxsS2V5c1wiKTtcblxuICAgICAgICB2YXIga2V5cyA9IFtdO1xuXG4gICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCB0aGlzLl9zdG9yZS5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICAgIGxldCBrZXkgPSB0aGlzLl9zdG9yZS5rZXkoaW5kZXgpO1xuXG4gICAgICAgICAgICBpZiAoa2V5LmluZGV4T2YodGhpcy5fcHJlZml4KSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGtleXMucHVzaChrZXkuc3Vic3RyKHRoaXMuX3ByZWZpeC5sZW5ndGgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoa2V5cyk7XG4gICAgfVxufVxuIiwiaW1wb3J0IHsgandzLCBLRVlVVElMIGFzIEtleVV0aWwsIFg1MDksIGNyeXB0bywgaGV4dG9iNjR1LCBiNjR0b2hleCB9IGZyb20gJy4uLy4uL2pzcnNhc2lnbi9kaXN0L2pzcnNhc2lnbi5qcyc7XG5cbmNvbnN0IEFsbG93ZWRTaWduaW5nQWxncyA9IFsnUlMyNTYnLCAnUlMzODQnLCAnUlM1MTInLCAnUFMyNTYnLCAnUFMzODQnLCAnUFM1MTInLCAnRVMyNTYnLCAnRVMzODQnLCAnRVM1MTInXTtcblxuZXhwb3J0IHtcbiAgICBqd3MsXG4gICAgS2V5VXRpbCxcbiAgICBYNTA5LFxuICAgIGNyeXB0byxcbiAgICBoZXh0b2I2NHUsXG4gICAgYjY0dG9oZXgsXG4gICAgQWxsb3dlZFNpZ25pbmdBbGdzXG59O1xuIiwiaW1wb3J0IHV1aWQ0IGZyb20gJ3V1aWQvdjQnO1xuXG4vKipcbiAqIEdlbmVyYXRlcyBSRkM0MTIyIHZlcnNpb24gNCBndWlkICgpXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmFuZG9tKCkge1xuICByZXR1cm4gdXVpZDQoKS5yZXBsYWNlKC8tL2csICcnKTtcbn1cbiIsImNvbnN0IFZlcnNpb24gPSBcIjEuMTAuMC1iZXRhLjFcIjsgZXhwb3J0IHtWZXJzaW9ufTsiXSwic291cmNlUm9vdCI6IiJ9 \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9PaWRjL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL09pZGMvLi9pbmRleC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vanNyc2FzaWduL2Rpc3QvanNyc2FzaWduLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbGliL2luZGV4LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvYmFiZWwtcG9seWZpbGwvbm9kZV9tb2R1bGVzL3JlZ2VuZXJhdG9yLXJ1bnRpbWUvcnVudGltZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2Jhc2U2NC1qcy9pbmRleC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2J1ZmZlci9pbmRleC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2J1ZmZlci9ub2RlX21vZHVsZXMvaXNhcnJheS9pbmRleC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvZm4vcmVnZXhwL2VzY2FwZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYS1mdW5jdGlvbi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYS1udW1iZXItdmFsdWUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FkZC10by11bnNjb3BhYmxlcy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYWR2YW5jZS1zdHJpbmctaW5kZXguanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FuLWluc3RhbmNlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hbi1vYmplY3QuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FycmF5LWNvcHktd2l0aGluLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hcnJheS1maWxsLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hcnJheS1mcm9tLWl0ZXJhYmxlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hcnJheS1pbmNsdWRlcy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktbWV0aG9kcy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktcmVkdWNlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hcnJheS1zcGVjaWVzLWNvbnN0cnVjdG9yLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hcnJheS1zcGVjaWVzLWNyZWF0ZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYmluZC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY2xhc3NvZi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY29mLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19jb2xsZWN0aW9uLXN0cm9uZy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY29sbGVjdGlvbi10by1qc29uLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19jb2xsZWN0aW9uLXdlYWsuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2NvbGxlY3Rpb24uanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2NvcmUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2NyZWF0ZS1wcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY3R4LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19kYXRlLXRvLWlzby1zdHJpbmcuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2RhdGUtdG8tcHJpbWl0aXZlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19kZWZpbmVkLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19kZXNjcmlwdG9ycy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZG9tLWNyZWF0ZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZW51bS1idWcta2V5cy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZW51bS1rZXlzLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19leHBvcnQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2ZhaWxzLWlzLXJlZ2V4cC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZmFpbHMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2ZpeC1yZS13a3MuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2ZsYWdzLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19mbGF0dGVuLWludG8tYXJyYXkuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2Zvci1vZi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZnVuY3Rpb24tdG8tc3RyaW5nLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19nbG9iYWwuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2hhcy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faGlkZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faHRtbC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faWU4LWRvbS1kZWZpbmUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2luaGVyaXQtaWYtcmVxdWlyZWQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2ludm9rZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faW9iamVjdC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtYXJyYXktaXRlci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2lzLWludGVnZXIuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2lzLW9iamVjdC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtcmVnZXhwLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pdGVyLWNhbGwuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2l0ZXItY3JlYXRlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pdGVyLWRlZmluZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlci1kZXRlY3QuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2l0ZXItc3RlcC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlcmF0b3JzLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19saWJyYXJ5LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19tYXRoLWV4cG0xLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19tYXRoLWZyb3VuZC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWF0aC1sb2cxcC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWF0aC1zY2FsZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWF0aC1zaWduLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19tZXRhLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19tZXRhZGF0YS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWljcm90YXNrLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19uZXctcHJvbWlzZS1jYXBhYmlsaXR5LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtYXNzaWduLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtY3JlYXRlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZHAuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1kcHMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1mb3JjZWQtcGFtLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZ29wZC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWdvcG4tZXh0LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZ29wbi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWdvcHMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1ncG8uanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1rZXlzLWludGVybmFsLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3Qta2V5cy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LXBpZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LXNhcC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LXRvLWFycmF5LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vd24ta2V5cy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcGFyc2UtZmxvYXQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3BhcnNlLWludC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcGVyZm9ybS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcHJvbWlzZS1yZXNvbHZlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19wcm9wZXJ0eS1kZXNjLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19yZWRlZmluZS1hbGwuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3JlZGVmaW5lLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19yZWdleHAtZXhlYy1hYnN0cmFjdC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcmVnZXhwLWV4ZWMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3JlcGxhY2VyLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zYW1lLXZhbHVlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zZXQtY29sbGVjdGlvbi1mcm9tLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zZXQtY29sbGVjdGlvbi1vZi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2V0LXByb3RvLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zZXQtc3BlY2llcy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2V0LXRvLXN0cmluZy10YWcuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3NoYXJlZC1rZXkuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3NoYXJlZC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3BlY2llcy1jb25zdHJ1Y3Rvci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaWN0LW1ldGhvZC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLWF0LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zdHJpbmctY29udGV4dC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLWh0bWwuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3N0cmluZy1wYWQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3N0cmluZy1yZXBlYXQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3N0cmluZy10cmltLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zdHJpbmctd3MuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3Rhc2suanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3RvLWFic29sdXRlLWluZGV4LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190by1pbmRleC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8taW50ZWdlci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8taW9iamVjdC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8tbGVuZ3RoLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190by1vYmplY3QuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3RvLXByaW1pdGl2ZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdHlwZWQtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3R5cGVkLWJ1ZmZlci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdHlwZWQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3VpZC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdXNlci1hZ2VudC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdmFsaWRhdGUtY29sbGVjdGlvbi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fd2tzLWRlZmluZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fd2tzLWV4dC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fd2tzLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2NvcmUuZ2V0LWl0ZXJhdG9yLW1ldGhvZC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9jb3JlLnJlZ2V4cC5lc2NhcGUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LmNvcHktd2l0aGluLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5ldmVyeS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZmlsbC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZmlsdGVyLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5maW5kLWluZGV4LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5maW5kLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5mb3ItZWFjaC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZnJvbS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuaW5kZXgtb2YuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LmlzLWFycmF5LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5pdGVyYXRvci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuam9pbi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkubGFzdC1pbmRleC1vZi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkubWFwLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5vZi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkucmVkdWNlLXJpZ2h0LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5yZWR1Y2UuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LnNsaWNlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5zb21lLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5zb3J0LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5zcGVjaWVzLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5kYXRlLm5vdy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZGF0ZS50by1pc28tc3RyaW5nLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5kYXRlLnRvLWpzb24uanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmRhdGUudG8tcHJpbWl0aXZlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5kYXRlLnRvLXN0cmluZy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZnVuY3Rpb24uYmluZC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZnVuY3Rpb24uaGFzLWluc3RhbmNlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5mdW5jdGlvbi5uYW1lLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXAuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguYWNvc2guanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguYXNpbmguanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguYXRhbmguanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguY2JydC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5jbHozMi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5jb3NoLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmV4cG0xLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmZyb3VuZC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5oeXBvdC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5pbXVsLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmxvZzEwLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmxvZzFwLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmxvZzIuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguc2lnbi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5zaW5oLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLnRhbmguanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGgudHJ1bmMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm51bWJlci5jb25zdHJ1Y3Rvci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLmVwc2lsb24uanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm51bWJlci5pcy1maW5pdGUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm51bWJlci5pcy1pbnRlZ2VyLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIuaXMtbmFuLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIuaXMtc2FmZS1pbnRlZ2VyLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIubWF4LXNhZmUtaW50ZWdlci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLm1pbi1zYWZlLWludGVnZXIuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm51bWJlci5wYXJzZS1mbG9hdC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLnBhcnNlLWludC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLnRvLWZpeGVkLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIudG8tcHJlY2lzaW9uLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuYXNzaWduLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuY3JlYXRlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuZGVmaW5lLXByb3BlcnRpZXMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5kZWZpbmUtcHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5mcmVlemUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5nZXQtb3duLXByb3BlcnR5LW5hbWVzLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuZ2V0LXByb3RvdHlwZS1vZi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmlzLWV4dGVuc2libGUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5pcy1mcm96ZW4uanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5pcy1zZWFsZWQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5pcy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmtleXMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5wcmV2ZW50LWV4dGVuc2lvbnMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5zZWFsLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3Quc2V0LXByb3RvdHlwZS1vZi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LnRvLXN0cmluZy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucGFyc2UtZmxvYXQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnBhcnNlLWludC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucHJvbWlzZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5hcHBseS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5jb25zdHJ1Y3QuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3QuZGVmaW5lLXByb3BlcnR5LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LmRlbGV0ZS1wcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5lbnVtZXJhdGUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LmdldC1wcm90b3R5cGUtb2YuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3QuZ2V0LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0Lmhhcy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5pcy1leHRlbnNpYmxlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0Lm93bi1rZXlzLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LnByZXZlbnQtZXh0ZW5zaW9ucy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5zZXQtcHJvdG90eXBlLW9mLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LnNldC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLmNvbnN0cnVjdG9yLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAuZXhlYy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLmZsYWdzLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAubWF0Y2guanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZ2V4cC5yZXBsYWNlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAuc2VhcmNoLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAuc3BsaXQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZ2V4cC50by1zdHJpbmcuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnNldC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmFuY2hvci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmJpZy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmJsaW5rLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuYm9sZC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmNvZGUtcG9pbnQtYXQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5lbmRzLXdpdGguanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5maXhlZC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmZvbnRjb2xvci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmZvbnRzaXplLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuZnJvbS1jb2RlLXBvaW50LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuaW5jbHVkZXMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5pdGFsaWNzLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuaXRlcmF0b3IuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5saW5rLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcucmF3LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcucmVwZWF0LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuc21hbGwuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5zdGFydHMtd2l0aC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnN0cmlrZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnN1Yi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnN1cC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnRyaW0uanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN5bWJvbC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuYXJyYXktYnVmZmVyLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC5kYXRhLXZpZXcuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLmZsb2F0MzItYXJyYXkuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLmZsb2F0NjQtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLmludDE2LWFycmF5LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC5pbnQzMi1hcnJheS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuaW50OC1hcnJheS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQudWludDE2LWFycmF5LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC51aW50MzItYXJyYXkuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLnVpbnQ4LWFycmF5LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC51aW50OC1jbGFtcGVkLWFycmF5LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi53ZWFrLW1hcC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYud2Vhay1zZXQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LmFycmF5LmZsYXQtbWFwLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5hcnJheS5mbGF0dGVuLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5hcnJheS5pbmNsdWRlcy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuYXNhcC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuZXJyb3IuaXMtZXJyb3IuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lmdsb2JhbC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWFwLmZyb20uanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hcC5vZi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWFwLnRvLWpzb24uanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hdGguY2xhbXAuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hdGguZGVnLXBlci1yYWQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hdGguZGVncmVlcy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5mc2NhbGUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hdGguaWFkZGguanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hdGguaW11bGguanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hdGguaXN1YmguanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hdGgucmFkLXBlci1kZWcuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hdGgucmFkaWFucy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5zY2FsZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5zaWduYml0LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5tYXRoLnVtdWxoLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5vYmplY3QuZGVmaW5lLWdldHRlci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JqZWN0LmRlZmluZS1zZXR0ZXIuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm9iamVjdC5lbnRyaWVzLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9ycy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JqZWN0Lmxvb2t1cC1nZXR0ZXIuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm9iamVjdC5sb29rdXAtc2V0dGVyLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5vYmplY3QudmFsdWVzLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5vYnNlcnZhYmxlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5wcm9taXNlLmZpbmFsbHkuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnByb21pc2UudHJ5LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5yZWZsZWN0LmRlZmluZS1tZXRhZGF0YS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5kZWxldGUtbWV0YWRhdGEuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnJlZmxlY3QuZ2V0LW1ldGFkYXRhLWtleXMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnJlZmxlY3QuZ2V0LW1ldGFkYXRhLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5yZWZsZWN0LmdldC1vd24tbWV0YWRhdGEta2V5cy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtb3duLW1ldGFkYXRhLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5yZWZsZWN0Lmhhcy1tZXRhZGF0YS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5oYXMtb3duLW1ldGFkYXRhLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5yZWZsZWN0Lm1ldGFkYXRhLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5zZXQuZnJvbS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc2V0Lm9mLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5zZXQudG8tanNvbi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3RyaW5nLmF0LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5zdHJpbmcubWF0Y2gtYWxsLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5zdHJpbmcucGFkLWVuZC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3RyaW5nLnBhZC1zdGFydC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3RyaW5nLnRyaW0tbGVmdC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3RyaW5nLnRyaW0tcmlnaHQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnN5bWJvbC5hc3luYy1pdGVyYXRvci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3ltYm9sLm9ic2VydmFibGUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnN5c3RlbS5nbG9iYWwuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LndlYWstbWFwLmZyb20uanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LndlYWstbWFwLm9mLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy53ZWFrLXNldC5mcm9tLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy53ZWFrLXNldC5vZi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy93ZWIuZG9tLml0ZXJhYmxlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL3dlYi5pbW1lZGlhdGUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvd2ViLnRpbWVycy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvc2hpbS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2llZWU3NTQvaW5kZXguanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy91dWlkL2xpYi9ieXRlc1RvVXVpZC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL3V1aWQvbGliL3JuZy1icm93c2VyLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvdXVpZC92NC5qcyIsIndlYnBhY2s6Ly9PaWRjLyh3ZWJwYWNrKS9idWlsZGluL2dsb2JhbC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL0FjY2Vzc1Rva2VuRXZlbnRzLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvQ2hlY2tTZXNzaW9uSUZyYW1lLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvQ29yZG92YUlGcmFtZU5hdmlnYXRvci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL0NvcmRvdmFQb3B1cE5hdmlnYXRvci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL0NvcmRvdmFQb3B1cFdpbmRvdy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL0Vycm9yUmVzcG9uc2UuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9FdmVudC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL0dsb2JhbC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL0lGcmFtZU5hdmlnYXRvci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL0lGcmFtZVdpbmRvdy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL0luTWVtb3J5V2ViU3RvcmFnZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL0pvc2VVdGlsLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvSm9zZVV0aWxJbXBsLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvSnNvblNlcnZpY2UuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9Mb2cuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9NZXRhZGF0YVNlcnZpY2UuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9PaWRjQ2xpZW50LmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvT2lkY0NsaWVudFNldHRpbmdzLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvUG9wdXBOYXZpZ2F0b3IuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9Qb3B1cFdpbmRvdy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL1JlZGlyZWN0TmF2aWdhdG9yLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvUmVzcG9uc2VWYWxpZGF0b3IuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9TZXNzaW9uTW9uaXRvci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL1NpZ25pblJlcXVlc3QuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9TaWduaW5SZXNwb25zZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL1NpZ25pblN0YXRlLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvU2lnbm91dFJlcXVlc3QuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9TaWdub3V0UmVzcG9uc2UuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9TaWxlbnRSZW5ld1NlcnZpY2UuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9TdGF0ZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL1RpbWVyLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvVG9rZW5DbGllbnQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9Ub2tlblJldm9jYXRpb25DbGllbnQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9VcmxVdGlsaXR5LmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvVXNlci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL1VzZXJJbmZvU2VydmljZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL1VzZXJNYW5hZ2VyLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvVXNlck1hbmFnZXJFdmVudHMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9Vc2VyTWFuYWdlclNldHRpbmdzLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvV2ViU3RvcmFnZVN0YXRlU3RvcmUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9jcnlwdG8vanNyc2FzaWduLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvcmFuZG9tLmpzIiwid2VicGFjazovL09pZGMvLi92ZXJzaW9uLmpzIl0sIm5hbWVzIjpbIlZlcnNpb24iLCJMb2ciLCJPaWRjQ2xpZW50IiwiT2lkY0NsaWVudFNldHRpbmdzIiwiV2ViU3RvcmFnZVN0YXRlU3RvcmUiLCJJbk1lbW9yeVdlYlN0b3JhZ2UiLCJVc2VyTWFuYWdlciIsIkFjY2Vzc1Rva2VuRXZlbnRzIiwiTWV0YWRhdGFTZXJ2aWNlIiwiQ29yZG92YVBvcHVwTmF2aWdhdG9yIiwiQ29yZG92YUlGcmFtZU5hdmlnYXRvciIsIkNoZWNrU2Vzc2lvbklGcmFtZSIsIlRva2VuUmV2b2NhdGlvbkNsaWVudCIsIlNlc3Npb25Nb25pdG9yIiwiR2xvYmFsIiwiVXNlciIsIm5hdmlnYXRvciIsInVzZXJBZ2VudCIsIndpbmRvdyIsIllBSE9PIiwidW5kZWZpbmVkIiwibGFuZyIsImV4dGVuZCIsImciLCJoIiwiZiIsIkVycm9yIiwiZCIsInByb3RvdHlwZSIsImNvbnN0cnVjdG9yIiwic3VwZXJjbGFzcyIsIk9iamVjdCIsImIiLCJlIiwiYyIsInRlc3QiLCJqIiwiaSIsImxlbmd0aCIsImwiLCJrIiwiYSIsIkNyeXB0b0pTIiwibGliIiwiQmFzZSIsIm4iLCJwIiwibyIsIm1peEluIiwiaGFzT3duUHJvcGVydHkiLCJpbml0IiwiJHN1cGVyIiwiYXBwbHkiLCJhcmd1bWVudHMiLCJjcmVhdGUiLCJ0b1N0cmluZyIsImNsb25lIiwiV29yZEFycmF5Iiwid29yZHMiLCJzaWdCeXRlcyIsInN0cmluZ2lmeSIsImNvbmNhdCIsInQiLCJxIiwicyIsImNsYW1wIiwiciIsImNlaWwiLCJjYWxsIiwic2xpY2UiLCJyYW5kb20iLCJwdXNoIiwibSIsImVuYyIsIkhleCIsImpvaW4iLCJwYXJzZSIsInBhcnNlSW50Iiwic3Vic3RyIiwiTGF0aW4xIiwiU3RyaW5nIiwiZnJvbUNoYXJDb2RlIiwiY2hhckNvZGVBdCIsIlV0ZjgiLCJkZWNvZGVVUklDb21wb25lbnQiLCJlc2NhcGUiLCJ1bmVzY2FwZSIsImVuY29kZVVSSUNvbXBvbmVudCIsIkJ1ZmZlcmVkQmxvY2tBbGdvcml0aG0iLCJyZXNldCIsIl9kYXRhIiwiX25EYXRhQnl0ZXMiLCJfYXBwZW5kIiwiX3Byb2Nlc3MiLCJ3IiwieCIsImJsb2NrU2l6ZSIsInYiLCJ1IiwibWF4IiwiX21pbkJ1ZmZlclNpemUiLCJtaW4iLCJfZG9Qcm9jZXNzQmxvY2siLCJzcGxpY2UiLCJIYXNoZXIiLCJjZmciLCJfZG9SZXNldCIsInVwZGF0ZSIsImZpbmFsaXplIiwiX2RvRmluYWxpemUiLCJfY3JlYXRlSGVscGVyIiwiX2NyZWF0ZUhtYWNIZWxwZXIiLCJITUFDIiwiYWxnbyIsIk1hdGgiLCJ4NjQiLCJXb3JkIiwiaGlnaCIsImxvdyIsInRvWDMyIiwiQmFzZTY0IiwiX21hcCIsImNoYXJBdCIsImluZGV4T2YiLCJzcXJ0IiwicG93IiwiU0hBMjU2IiwiX2hhc2giLCJmbG9vciIsIkhtYWNTSEEyNTYiLCJUIiwiZWEiLCJTSEE1MTIiLCJGIiwiRyIsIkgiLCJJIiwiSiIsIlgiLCJLIiwiWSIsIkwiLCJaIiwiTSIsIiQiLCJOIiwiYWEiLCJPIiwiYmEiLCJQIiwiY2EiLCJRIiwieiIsIkEiLCJ5IiwiVSIsIkIiLCJSIiwiQyIsIlMiLCJEIiwiViIsIkUiLCJXIiwiZmEiLCJkYSIsIkhtYWNTSEE1MTIiLCJTSEEzODQiLCJIbWFjU0hBMzg0IiwiYjY0bWFwIiwiYjY0cGFkIiwiaGV4MmI2NCIsInN1YnN0cmluZyIsImI2NHRvaGV4IiwiaW50MmNoYXIiLCJiNjR0b0JBIiwiQXJyYXkiLCJkYml0cyIsImNhbmFyeSIsImpfbG0iLCJCaWdJbnRlZ2VyIiwiZnJvbU51bWJlciIsImZyb21TdHJpbmciLCJuYmkiLCJhbTEiLCJhbTIiLCJhbTMiLCJhcHBOYW1lIiwiYW0iLCJEQiIsIkRNIiwiRFYiLCJCSV9GUCIsIkZWIiwiRjEiLCJGMiIsIkJJX1JNIiwiQklfUkMiLCJyciIsInZ2IiwiaW50QXQiLCJibnBDb3B5VG8iLCJibnBGcm9tSW50IiwibmJ2IiwiZnJvbUludCIsImJucEZyb21TdHJpbmciLCJmcm9tUmFkaXgiLCJaRVJPIiwic3ViVG8iLCJibnBDbGFtcCIsImJuVG9TdHJpbmciLCJuZWdhdGUiLCJ0b1JhZGl4IiwiYm5OZWdhdGUiLCJibkFicyIsImJuQ29tcGFyZVRvIiwibmJpdHMiLCJibkJpdExlbmd0aCIsImJucERMU2hpZnRUbyIsImJucERSU2hpZnRUbyIsImJucExTaGlmdFRvIiwiYm5wUlNoaWZ0VG8iLCJibnBTdWJUbyIsImJucE11bHRpcGx5VG8iLCJhYnMiLCJibnBTcXVhcmVUbyIsImJucERpdlJlbVRvIiwiY29weVRvIiwibFNoaWZ0VG8iLCJkbFNoaWZ0VG8iLCJjb21wYXJlVG8iLCJPTkUiLCJkclNoaWZ0VG8iLCJyU2hpZnRUbyIsImJuTW9kIiwiZGl2UmVtVG8iLCJDbGFzc2ljIiwiY0NvbnZlcnQiLCJtb2QiLCJjUmV2ZXJ0IiwiY1JlZHVjZSIsImNNdWxUbyIsIm11bHRpcGx5VG8iLCJyZWR1Y2UiLCJjU3FyVG8iLCJzcXVhcmVUbyIsImNvbnZlcnQiLCJyZXZlcnQiLCJtdWxUbyIsInNxclRvIiwiYm5wSW52RGlnaXQiLCJNb250Z29tZXJ5IiwibXAiLCJpbnZEaWdpdCIsIm1wbCIsIm1waCIsInVtIiwibXQyIiwibW9udENvbnZlcnQiLCJtb250UmV2ZXJ0IiwibW9udFJlZHVjZSIsIm1vbnRTcXJUbyIsIm1vbnRNdWxUbyIsImJucElzRXZlbiIsImJucEV4cCIsImJuTW9kUG93SW50IiwiaXNFdmVuIiwiZXhwIiwiYml0TGVuZ3RoIiwibW9kUG93SW50IiwiYm5DbG9uZSIsImJuSW50VmFsdWUiLCJibkJ5dGVWYWx1ZSIsImJuU2hvcnRWYWx1ZSIsImJucENodW5rU2l6ZSIsIkxOMiIsImxvZyIsImJuU2lnTnVtIiwiYm5wVG9SYWRpeCIsInNpZ251bSIsImNodW5rU2l6ZSIsImludFZhbHVlIiwiYm5wRnJvbVJhZGl4IiwiZE11bHRpcGx5IiwiZEFkZE9mZnNldCIsImJucEZyb21OdW1iZXIiLCJ0ZXN0Qml0IiwiYml0d2lzZVRvIiwic2hpZnRMZWZ0Iiwib3Bfb3IiLCJpc1Byb2JhYmxlUHJpbWUiLCJuZXh0Qnl0ZXMiLCJiblRvQnl0ZUFycmF5IiwiYm5FcXVhbHMiLCJibk1pbiIsImJuTWF4IiwiYm5wQml0d2lzZVRvIiwib3BfYW5kIiwiYm5BbmQiLCJibk9yIiwib3BfeG9yIiwiYm5Yb3IiLCJvcF9hbmRub3QiLCJibkFuZE5vdCIsImJuTm90IiwiYm5TaGlmdExlZnQiLCJiblNoaWZ0UmlnaHQiLCJsYml0IiwiYm5HZXRMb3dlc3RTZXRCaXQiLCJjYml0IiwiYm5CaXRDb3VudCIsImJuVGVzdEJpdCIsImJucENoYW5nZUJpdCIsImJuU2V0Qml0IiwiY2hhbmdlQml0IiwiYm5DbGVhckJpdCIsImJuRmxpcEJpdCIsImJucEFkZFRvIiwiYm5BZGQiLCJhZGRUbyIsImJuU3VidHJhY3QiLCJibk11bHRpcGx5IiwiYm5TcXVhcmUiLCJibkRpdmlkZSIsImJuUmVtYWluZGVyIiwiYm5EaXZpZGVBbmRSZW1haW5kZXIiLCJibnBETXVsdGlwbHkiLCJibnBEQWRkT2Zmc2V0IiwiTnVsbEV4cCIsIm5Ob3AiLCJuTXVsVG8iLCJuU3FyVG8iLCJiblBvdyIsImJucE11bHRpcGx5TG93ZXJUbyIsImJucE11bHRpcGx5VXBwZXJUbyIsIkJhcnJldHQiLCJyMiIsInEzIiwibXUiLCJkaXZpZGUiLCJiYXJyZXR0Q29udmVydCIsImJhcnJldHRSZXZlcnQiLCJiYXJyZXR0UmVkdWNlIiwibXVsdGlwbHlVcHBlclRvIiwibXVsdGlwbHlMb3dlclRvIiwiYmFycmV0dFNxclRvIiwiYmFycmV0dE11bFRvIiwiYm5Nb2RQb3ciLCJibkdDRCIsImdldExvd2VzdFNldEJpdCIsImJucE1vZEludCIsImJuTW9kSW52ZXJzZSIsInN1YnRyYWN0IiwiYWRkIiwibG93cHJpbWVzIiwibHBsaW0iLCJibklzUHJvYmFibGVQcmltZSIsIm1vZEludCIsIm1pbGxlclJhYmluIiwiYm5wTWlsbGVyUmFiaW4iLCJzaGlmdFJpZ2h0IiwibW9kUG93IiwiYnl0ZVZhbHVlIiwic2hvcnRWYWx1ZSIsInRvQnl0ZUFycmF5IiwiZXF1YWxzIiwiYW5kIiwib3IiLCJ4b3IiLCJhbmROb3QiLCJub3QiLCJiaXRDb3VudCIsInNldEJpdCIsImNsZWFyQml0IiwiZmxpcEJpdCIsIm11bHRpcGx5IiwicmVtYWluZGVyIiwiZGl2aWRlQW5kUmVtYWluZGVyIiwibW9kSW52ZXJzZSIsImdjZCIsInNxdWFyZSIsIkFyY2ZvdXIiLCJBUkM0aW5pdCIsIkFSQzRuZXh0IiwibmV4dCIsInBybmdfbmV3c3RhdGUiLCJybmdfcHNpemUiLCJybmdfc3RhdGUiLCJybmdfcG9vbCIsInJuZ19wcHRyIiwicm5nX3NlZWRfaW50Iiwicm5nX3NlZWRfdGltZSIsIkRhdGUiLCJnZXRUaW1lIiwiY3J5cHRvIiwibXNDcnlwdG8iLCJnZXRSYW5kb21WYWx1ZXMiLCJ1YSIsIlVpbnQ4QXJyYXkiLCJhcHBWZXJzaW9uIiwicm5nX2dldF9ieXRlIiwicm5nX2dldF9ieXRlcyIsIlNlY3VyZVJhbmRvbSIsInBhcnNlQmlnSW50IiwibGluZWJyayIsImJ5dGUySGV4IiwicGtjczFwYWQyIiwib2FlcF9tZ2YxX2FyciIsIm9hZXBfcGFkIiwiS0pVUiIsIk1lc3NhZ2VEaWdlc3QiLCJVdGlsIiwiZ2V0Q2Fub25pY2FsQWxnTmFtZSIsImdldEhhc2hMZW5ndGgiLCJoZXh0b3JzdHIiLCJoYXNoSGV4IiwicnN0cnRvaGV4IiwiUlNBS2V5IiwiZG1wMSIsImRtcTEiLCJjb2VmZiIsIlJTQVNldFB1YmxpYyIsImlzUHVibGljIiwiaXNQcml2YXRlIiwiUlNBRG9QdWJsaWMiLCJSU0FFbmNyeXB0IiwiZG9QdWJsaWMiLCJSU0FFbmNyeXB0T0FFUCIsInNldFB1YmxpYyIsImVuY3J5cHQiLCJlbmNyeXB0T0FFUCIsInR5cGUiLCJFQ0ZpZWxkRWxlbWVudEZwIiwiZmVGcEVxdWFscyIsImZlRnBUb0JpZ0ludGVnZXIiLCJmZUZwTmVnYXRlIiwiZmVGcEFkZCIsInRvQmlnSW50ZWdlciIsImZlRnBTdWJ0cmFjdCIsImZlRnBNdWx0aXBseSIsImZlRnBTcXVhcmUiLCJmZUZwRGl2aWRlIiwiRUNQb2ludEZwIiwiY3VydmUiLCJ6aW52IiwicG9pbnRGcEdldFgiLCJmcm9tQmlnSW50ZWdlciIsInBvaW50RnBHZXRZIiwicG9pbnRGcEVxdWFscyIsImlzSW5maW5pdHkiLCJwb2ludEZwSXNJbmZpbml0eSIsInBvaW50RnBOZWdhdGUiLCJwb2ludEZwQWRkIiwidHdpY2UiLCJnZXRJbmZpbml0eSIsInBvaW50RnBUd2ljZSIsInBvaW50RnBNdWx0aXBseSIsInBvaW50RnBNdWx0aXBseVR3byIsImdldFgiLCJnZXRZIiwibXVsdGlwbHlUd28iLCJFQ0N1cnZlRnAiLCJpbmZpbml0eSIsImN1cnZlRnBHZXRRIiwiY3VydmVGcEdldEEiLCJjdXJ2ZUZwR2V0QiIsImN1cnZlRnBFcXVhbHMiLCJjdXJ2ZUZwR2V0SW5maW5pdHkiLCJjdXJ2ZUZwRnJvbUJpZ0ludGVnZXIiLCJjdXJ2ZUZwRGVjb2RlUG9pbnRIZXgiLCJnZXRRIiwiZ2V0QSIsImdldEIiLCJkZWNvZGVQb2ludEhleCIsImdldEJ5dGVMZW5ndGgiLCJnZXRFbmNvZGVkIiwidG9CeXRlQXJyYXlVbnNpZ25lZCIsInVuc2hpZnQiLCJkZWNvZGVGcm9tIiwiZGVjb2RlRnJvbUhleCIsImFkZDJEIiwidHdpY2UyRCIsInZhbHVlT2YiLCJtdWx0aXBseTJEIiwiaXNPbkN1cnZlIiwidmFsaWRhdGUiLCJqc29uUGFyc2UiLCJSZWdFeHAiLCJtYXRjaCIsInJlcGxhY2UiLCJzaGlmdCIsImFzbjEiLCJBU04xVXRpbCIsImludGVnZXJUb0J5dGVIZXgiLCJiaWdJbnRUb01pblR3b3NDb21wbGVtZW50c0hleCIsImdldFBFTVN0cmluZ0Zyb21IZXgiLCJoZXh0b3BlbSIsIm5ld09iamVjdCIsIkRFUkJvb2xlYW4iLCJERVJJbnRlZ2VyIiwiREVSQml0U3RyaW5nIiwiREVST2N0ZXRTdHJpbmciLCJERVJOdWxsIiwiREVST2JqZWN0SWRlbnRpZmllciIsIkRFUkVudW1lcmF0ZWQiLCJERVJVVEY4U3RyaW5nIiwiREVSTnVtZXJpY1N0cmluZyIsIkRFUlByaW50YWJsZVN0cmluZyIsIkRFUlRlbGV0ZXhTdHJpbmciLCJERVJJQTVTdHJpbmciLCJERVJVVENUaW1lIiwiREVSR2VuZXJhbGl6ZWRUaW1lIiwiREVSU2VxdWVuY2UiLCJERVJTZXQiLCJERVJUYWdnZWRPYmplY3QiLCJrZXlzIiwiYXJyYXkiLCJ0YWciLCJleHBsaWNpdCIsIm9iaiIsImpzb25Ub0FTTjFIRVgiLCJnZXRFbmNvZGVkSGV4Iiwib2lkSGV4VG9JbnQiLCJvaWRJbnRUb0hleCIsInNwbGl0IiwiQVNOMU9iamVjdCIsImdldExlbmd0aEhleEZyb21WYWx1ZSIsImhWIiwiaFRMViIsImlzTW9kaWZpZWQiLCJnZXRGcmVzaFZhbHVlSGV4IiwiaEwiLCJoVCIsImdldFZhbHVlSGV4IiwiREVSQWJzdHJhY3RTdHJpbmciLCJnZXRTdHJpbmciLCJzZXRTdHJpbmciLCJ1dGY4dG9oZXgiLCJ0b0xvd2VyQ2FzZSIsInNldFN0cmluZ0hleCIsInN0ciIsImhleCIsIkRFUkFic3RyYWN0VGltZSIsImxvY2FsRGF0ZVRvVVRDIiwidXRjIiwiZ2V0VGltZXpvbmVPZmZzZXQiLCJmb3JtYXREYXRlIiwiemVyb1BhZGRpbmciLCJnZXRGdWxsWWVhciIsImdldE1vbnRoIiwiZ2V0RGF0ZSIsImdldEhvdXJzIiwiZ2V0TWludXRlcyIsImdldFNlY29uZHMiLCJnZXRNaWxsaXNlY29uZHMiLCJzdG9oZXgiLCJzZXRCeURhdGVWYWx1ZSIsIlVUQyIsInNldEJ5RGF0ZSIsIkRFUkFic3RyYWN0U3RydWN0dXJlZCIsInNldEJ5QVNOMU9iamVjdEFycmF5IiwiYXNuMUFycmF5IiwiYXBwZW5kQVNOMU9iamVjdCIsInNldEJ5QmlnSW50ZWdlciIsInNldEJ5SW50ZWdlciIsInNldFZhbHVlSGV4IiwiYmlnaW50Iiwic2V0SGV4VmFsdWVJbmNsdWRpbmdVbnVzZWRCaXRzIiwic2V0VW51c2VkQml0c0FuZEhleFZhbHVlIiwic2V0QnlCaW5hcnlTdHJpbmciLCJzZXRCeUJvb2xlYW5BcnJheSIsIm5ld0ZhbHNlQXJyYXkiLCJiaW4iLCJzZXRWYWx1ZU9pZFN0cmluZyIsInNldFZhbHVlTmFtZSIsIng1MDkiLCJPSUQiLCJuYW1lMm9pZCIsIm9pZCIsIm5hbWUiLCJkYXRlIiwid2l0aE1pbGxpcyIsIm1pbGxpcyIsInNvcnRGbGFnIiwic29ydCIsInNvcnRmbGFnIiwiaXNFeHBsaWNpdCIsImFzbjFPYmplY3QiLCJzZXRBU04xT2JqZWN0IiwiQVNOMUhFWCIsImdldExibGVuIiwiZ2V0TCIsImdldFZibGVuIiwiZ2V0VmlkeCIsImdldFYiLCJnZXRUTFYiLCJnZXROZXh0U2libGluZ0lkeCIsImdldENoaWxkSWR4IiwiZ2V0TnRoQ2hpbGRJZHgiLCJnZXRJZHhieUxpc3QiLCJnZXRUTFZieUxpc3QiLCJnZXRWYnlMaXN0IiwiaGV4dG9vaWRzdHIiLCJkdW1wIiwib21taXRfbG9uZ19vY3RldCIsImlzQVNOMUhFWCIsIm9pZDJuYW1lIiwiaGV4dG91dGY4Iiwib2lkbmFtZSIsIkpTT04iLCJ4NTA5RXh0TmFtZSIsImlzSGV4IiwiQmFzZTY0eCIsInN0b0JBIiwiQkF0b3MiLCJCQXRvaGV4Iiwic3RvYjY0Iiwic3RvYjY0dSIsImI2NHRvYjY0dSIsImI2NHV0b3MiLCJiNjR1dG9iNjQiLCJoZXh0b2I2NHUiLCJiNjR1dG9oZXgiLCJ1dGY4dG9iNjR1IiwiYjY0dXRvdXRmOCIsIkJ1ZmZlciIsInVyaWNtcHRvaGV4IiwiZW5jb2RlVVJJQ29tcG9uZW50QWxsIiwiaGV4dG91cmljbXAiLCJ1dGY4dG9iNjQiLCJiNjR0b3V0ZjgiLCJoZXh0b2I2NCIsImhleHRvYjY0bmwiLCJiNjRubHRvaGV4IiwicGVtdG9oZXgiLCJoZXh0b0FycmF5QnVmZmVyIiwiQXJyYXlCdWZmZXIiLCJEYXRhVmlldyIsInNldFVpbnQ4IiwiQXJyYXlCdWZmZXJ0b2hleCIsImJ5dGVMZW5ndGgiLCJnZXRVaW50OCIsInp1bHV0b21zZWMiLCJ6dWx1dG9zZWMiLCJ6dWx1dG9kYXRlIiwiZGF0ZXRvenVsdSIsImdldFVUQ0Z1bGxZZWFyIiwiZ2V0VVRDTW9udGgiLCJnZXRVVENEYXRlIiwiZ2V0VVRDSG91cnMiLCJnZXRVVENNaW51dGVzIiwiZ2V0VVRDU2Vjb25kcyIsImdldFVUQ01pbGxpc2Vjb25kcyIsImlwdjZ0b2hleCIsInJlcGVhdCIsImhleHRvaXB2NiIsImhleHRvaXAiLCJpcHRvaGV4IiwibmV3bGluZV90b1VuaXgiLCJuZXdsaW5lX3RvRG9zIiwiaXNJbnRlZ2VyIiwiaXNCYXNlNjQiLCJpc0Jhc2U2NFVSTCIsImlzSW50ZWdlckFycmF5IiwiaGV4dG9wb3NoZXgiLCJpbnRhcnlzdHJ0b2hleCIsIm1hcCIsInN0cmRpZmZpZHgiLCJESUdFU1RJTkZPSEVBRCIsInNoYTEiLCJzaGEyMjQiLCJzaGEyNTYiLCJzaGEzODQiLCJzaGE1MTIiLCJtZDIiLCJtZDUiLCJyaXBlbWQxNjAiLCJERUZBVUxUUFJPVklERVIiLCJobWFjbWQ1IiwiaG1hY3NoYTEiLCJobWFjc2hhMjI0IiwiaG1hY3NoYTI1NiIsImhtYWNzaGEzODQiLCJobWFjc2hhNTEyIiwiaG1hY3JpcGVtZDE2MCIsIk1ENXdpdGhSU0EiLCJTSEExd2l0aFJTQSIsIlNIQTIyNHdpdGhSU0EiLCJTSEEyNTZ3aXRoUlNBIiwiU0hBMzg0d2l0aFJTQSIsIlNIQTUxMndpdGhSU0EiLCJSSVBFTUQxNjB3aXRoUlNBIiwiTUQ1d2l0aEVDRFNBIiwiU0hBMXdpdGhFQ0RTQSIsIlNIQTIyNHdpdGhFQ0RTQSIsIlNIQTI1NndpdGhFQ0RTQSIsIlNIQTM4NHdpdGhFQ0RTQSIsIlNIQTUxMndpdGhFQ0RTQSIsIlJJUEVNRDE2MHdpdGhFQ0RTQSIsIlNIQTF3aXRoRFNBIiwiU0hBMjI0d2l0aERTQSIsIlNIQTI1NndpdGhEU0EiLCJNRDV3aXRoUlNBYW5kTUdGMSIsIlNIQTF3aXRoUlNBYW5kTUdGMSIsIlNIQTIyNHdpdGhSU0FhbmRNR0YxIiwiU0hBMjU2d2l0aFJTQWFuZE1HRjEiLCJTSEEzODR3aXRoUlNBYW5kTUdGMSIsIlNIQTUxMndpdGhSU0FhbmRNR0YxIiwiUklQRU1EMTYwd2l0aFJTQWFuZE1HRjEiLCJDUllQVE9KU01FU1NBR0VESUdFU1ROQU1FIiwiTUQ1IiwiU0hBMSIsIlNIQTIyNCIsIlJJUEVNRDE2MCIsImdldERpZ2VzdEluZm9IZXgiLCJnZXRQYWRkZWREaWdlc3RJbmZvSGV4IiwiaGFzaFN0cmluZyIsImFsZyIsImRpZ2VzdFN0cmluZyIsImRpZ2VzdEhleCIsInByb3YiLCJzaGEyNTZIZXgiLCJzaGE1MTJIZXgiLCJTRUNVUkVSQU5ET01HRU4iLCJnZXRSYW5kb21IZXhPZk5ieXRlcyIsImdldFJhbmRvbUJpZ0ludGVnZXJPZk5ieXRlcyIsImdldFJhbmRvbUhleE9mTmJpdHMiLCJnZXRSYW5kb21CaWdJbnRlZ2VyT2ZOYml0cyIsImdldFJhbmRvbUJpZ0ludGVnZXJaZXJvVG9NYXgiLCJnZXRSYW5kb21CaWdJbnRlZ2VyTWluVG9NYXgiLCJzZXRBbGdBbmRQcm92aWRlciIsIm1kIiwidXBkYXRlU3RyaW5nIiwidXBkYXRlSGV4IiwiZGlnZXN0Iiwic2pjbCIsImhhc2giLCJjb2RlYyIsInRvQml0cyIsImZyb21CaXRzIiwiYWxnTmFtZSIsInByb3ZOYW1lIiwiSEFTSExFTkdUSCIsIk1hYyIsImFsZ1Byb3YiLCJtYWMiLCJwYXNzIiwiZG9GaW5hbCIsImRvRmluYWxTdHJpbmciLCJkb0ZpbmFsSGV4Iiwic2V0UGFzc3dvcmQiLCJ1dGY4IiwicnN0ciIsImI2NCIsImI2NHUiLCJTaWduYXR1cmUiLCJfc2V0QWxnTmFtZXMiLCJtZEFsZ05hbWUiLCJwdWJrZXlBbGdOYW1lIiwiX3plcm9QYWRkaW5nT2ZTaWduYXR1cmUiLCJLRVlVVElMIiwiZ2V0S2V5IiwicHJ2S2V5Iiwic3RhdGUiLCJwdWJLZXkiLCJzaWduIiwic0hhc2hIZXgiLCJlY3BydmhleCIsImVjY3VydmVuYW1lIiwiRUNEU0EiLCJoU2lnbiIsInNpZ25IZXgiLCJzaWduV2l0aE1lc3NhZ2VIYXNoUFNTIiwicHNzU2FsdExlbiIsInNpZ25XaXRoTWVzc2FnZUhhc2giLCJEU0EiLCJzaWduU3RyaW5nIiwidmVyaWZ5IiwiZWNwdWJoZXgiLCJ2ZXJpZnlIZXgiLCJ2ZXJpZnlXaXRoTWVzc2FnZUhhc2hQU1MiLCJ2ZXJpZnlXaXRoTWVzc2FnZUhhc2giLCJhbGdQcm92TmFtZSIsImluaXRQYXJhbXMiLCJwc3NzYWx0bGVuIiwicHJ2a2V5cGVtIiwicHJ2a2V5cGFzIiwiQ2lwaGVyIiwiZ2V0QWxnQnlLZXlBbmROYW1lIiwiZGVjcnlwdCIsImRlY3J5cHRPQUVQIiwib2lkaGV4Mm5hbWUiLCJnZXRCaWdSYW5kb20iLCJzZXROYW1lZEN1cnZlIiwiZWNwYXJhbXMiLCJFQ1BhcmFtZXRlckRCIiwiZ2V0QnlOYW1lIiwicHJ2S2V5SGV4IiwicHViS2V5SGV4IiwiY3VydmVOYW1lIiwic2V0UHJpdmF0ZUtleUhleCIsInNldFB1YmxpY0tleUhleCIsImdldFB1YmxpY0tleVhZSGV4Iiwia2V5bGVuIiwiZ2V0U2hvcnROSVNUUEN1cnZlTmFtZSIsImdlbmVyYXRlS2V5UGFpckhleCIsImJpUlNTaWdUb0FTTjFTaWciLCJmcm9tQnl0ZUFycmF5VW5zaWduZWQiLCJzZXJpYWxpemVTaWciLCJwYXJzZVNpZ0hleCIsInZlcmlmeVJhdyIsIkJpdGNvaW4iLCJpc0FycmF5IiwicGFyc2VTaWciLCJ0b0J5dGVBcnJheVNpZ25lZCIsInBhcnNlU2lnQ29tcGFjdCIsInJlYWRQS0NTNVBydktleUhleCIsImdldE5hbWUiLCJyZWFkUEtDUzhQcnZLZXlIZXgiLCJyZWFkUEtDUzhQdWJLZXlIZXgiLCJyZWFkQ2VydFB1YktleUhleCIsInBydiIsInB1YiIsInBhcnNlU2lnSGV4SW5IZXhSUyIsImFzbjFTaWdUb0NvbmNhdFNpZyIsImNvbmNhdFNpZ1RvQVNOMVNpZyIsImhleFJTU2lnVG9BU04xU2lnIiwicmVnaXN0IiwiQUVTIiwiVHJpcGxlREVTIiwiREVTIiwia2V5IiwiaXYiLCJjaXBoZXJ0ZXh0IiwicHJvYyIsImVwcm9jIiwiaXZsZW4iLCJjaXBoZXIiLCJpdnNhbHQiLCJkYXRhIiwia2V5aGV4IiwiaXZoZXgiLCJ2ZXJzaW9uIiwicGFyc2VQS0NTNVBFTSIsImdldEtleUFuZFVudXNlZEl2QnlQYXNzY29kZUFuZEl2c2FsdCIsImRlY3J5cHRLZXlCNjQiLCJnZXREZWNyeXB0ZWRLZXlIZXgiLCJnZXRFbmNyeXB0ZWRQS0NTNVBFTUZyb21QcnZLZXlIZXgiLCJ0b1VwcGVyQ2FzZSIsInBhcnNlSGV4T2ZFbmNyeXB0ZWRQS0NTOCIsImVuY3J5cHRpb25TY2hlbWVBbGciLCJlbmNyeXB0aW9uU2NoZW1lSVYiLCJwYmtkZjJTYWx0IiwicGJrZGYySXRlciIsImdldFBCS0RGMktleUhleEZyb21QYXJhbSIsIlBCS0RGMiIsImtleVNpemUiLCJpdGVyYXRpb25zIiwiX2dldFBsYWluUEtDUzhIZXhGcm9tRW5jcnlwdGVkUEtDUzhQRU0iLCJnZXRLZXlGcm9tRW5jcnlwdGVkUEtDUzhQRU0iLCJnZXRLZXlGcm9tUGxhaW5Qcml2YXRlUEtDUzhIZXgiLCJwYXJzZVBsYWluUHJpdmF0ZVBLQ1M4SGV4IiwiYWxncGFyYW0iLCJhbGdvaWQiLCJrZXlpZHgiLCJnZXRLZXlGcm9tUGxhaW5Qcml2YXRlUEtDUzhQRU0iLCJfZ2V0S2V5RnJvbVB1YmxpY1BLQ1M4SGV4IiwicGFyc2VQdWJsaWNSYXdSU0FLZXlIZXgiLCJwYXJzZVB1YmxpY1BLQ1M4SGV4IiwieHkiLCJrdHkiLCJkcCIsImRxIiwiY28iLCJxaSIsInNldFByaXZhdGVFeCIsInNldFByaXZhdGUiLCJjcnYiLCJYNTA5IiwiZ2V0UHVibGljS2V5RnJvbUNlcnRIZXgiLCJnZXRQdWJsaWNLZXlGcm9tQ2VydFBFTSIsImdlbmVyYXRlS2V5cGFpciIsImdlbmVyYXRlIiwicHJ2S2V5T2JqIiwicHViS2V5T2JqIiwiZ2V0UEVNIiwiU3ViamVjdFB1YmxpY0tleUluZm8iLCJzZXEiLCJvY3RzdHIiLCJiaXRzdHIiLCJnZXRLZXlGcm9tQ1NSUEVNIiwiZ2V0S2V5RnJvbUNTUkhleCIsInBhcnNlQ1NSSGV4IiwicDhwdWJrZXloZXgiLCJnZXRKV0tGcm9tS2V5IiwiZ2V0UG9zQXJyYXlPZkNoaWxkcmVuRnJvbUhleCIsImdldEhleFZhbHVlQXJyYXlPZkNoaWxkcmVuRnJvbUhleCIsInJlYWRQcml2YXRlS2V5RnJvbVBFTVN0cmluZyIsInJlYWRQS0NTNVB1YktleUhleCIsInJlYWRDZXJ0SGV4IiwiZ2V0UHVibGljS2V5SGV4IiwiX1JFX0hFWERFQ09OTFkiLCJjb21waWxlIiwiX3JzYXNpZ25fZ2V0SGV4UGFkZGVkRGlnZXN0SW5mb0ZvclN0cmluZyIsImRvUHJpdmF0ZSIsInBzc19tZ2YxX3N0ciIsInNpZ25QU1MiLCJfcnNhc2lnbl9nZXREZWNyeXB0U2lnbmF0dXJlQkkiLCJfcnNhc2lnbl9nZXRIZXhEaWdlc3RJbmZvRnJvbVNpZyIsIl9yc2FzaWduX2dldEFsZ05hbWVBbmRIYXNoRnJvbUhleERpc2dlc3RJbmZvIiwidmVyaWZ5UFNTIiwiU0FMVF9MRU5fSExFTiIsIlNBTFRfTEVOX01BWCIsIlNBTFRfTEVOX1JFQ09WRVIiLCJmb2Zmc2V0IiwiYUV4dEluZm8iLCJnZXRWZXJzaW9uIiwiZ2V0U2VyaWFsTnVtYmVySGV4IiwiZ2V0U2lnbmF0dXJlQWxnb3JpdGhtRmllbGQiLCJnZXRJc3N1ZXJIZXgiLCJnZXRJc3N1ZXJTdHJpbmciLCJoZXgyZG4iLCJnZXRTdWJqZWN0SGV4IiwiZ2V0U3ViamVjdFN0cmluZyIsImdldE5vdEJlZm9yZSIsImdldE5vdEFmdGVyIiwiZ2V0UHVibGljS2V5SWR4IiwiZ2V0UHVibGljS2V5Q29udGVudElkeCIsImdldFB1YmxpY0tleSIsImdldFNpZ25hdHVyZUFsZ29yaXRobU5hbWUiLCJnZXRTaWduYXR1cmVWYWx1ZUhleCIsInZlcmlmeVNpZ25hdHVyZSIsInBhcnNlRXh0IiwiY3JpdGljYWwiLCJ2aWR4IiwiZ2V0RXh0SW5mbyIsImdldEV4dEJhc2ljQ29uc3RyYWludHMiLCJjQSIsInBhdGhMZW4iLCJnZXRFeHRLZXlVc2FnZUJpbiIsImdldEV4dEtleVVzYWdlU3RyaW5nIiwiS0VZVVNBR0VfTkFNRSIsImdldEV4dFN1YmplY3RLZXlJZGVudGlmaWVyIiwiZ2V0RXh0QXV0aG9yaXR5S2V5SWRlbnRpZmllciIsImtpZCIsImdldEV4dEV4dEtleVVzYWdlTmFtZSIsImdldEV4dFN1YmplY3RBbHROYW1lIiwiZ2V0RXh0U3ViamVjdEFsdE5hbWUyIiwiZ2V0RXh0Q1JMRGlzdHJpYnV0aW9uUG9pbnRzVVJJIiwiZ2V0RXh0QUlBSW5mbyIsIm9jc3AiLCJjYWlzc3VlciIsImdldEV4dENlcnRpZmljYXRlUG9saWNpZXMiLCJpZCIsImNwcyIsInVub3RpY2UiLCJyZWFkQ2VydFBFTSIsImdldEluZm8iLCJoZXgycmRuIiwiaGV4MmF0dHJUeXBlVmFsdWUiLCJvaWQyYXR5cGUiLCJnZXRQdWJsaWNLZXlJbmZvUHJvcE9mQ2VydFBFTSIsImp3cyIsIkpXUyIsImlzU2FmZUpTT05TdHJpbmciLCJwYXJzZUpXUyIsInBhcnNlZEpXUyIsInNpZ3ZhbEgiLCJoZWFkQjY0VSIsInBheWxvYWRCNjRVIiwic2lndmFsQjY0VSIsInNpIiwic2lndmFsQkkiLCJoZWFkUyIsInBheWxvYWRTIiwicmVhZFNhZmVKU09OU3RyaW5nIiwiandzYWxnMnNpZ2FsZyIsImhBU04xU2lnIiwiaGVhZGVyT2JqIiwicGF5bG9hZE9iaiIsImhlYWRlclBQIiwicGF5bG9hZFBQIiwic2lnSGV4IiwidmVyaWZ5SldUIiwiaW5BcnJheSIsImluY2x1ZGVkQXJyYXkiLCJpc3MiLCJzdWIiLCJhdWQiLCJJbnREYXRlIiwiZ2V0Tm93IiwidmVyaWZ5QXQiLCJncmFjZVBlcmlvZCIsIm5iZiIsImlhdCIsImp0aSIsIkhTMjU2IiwiSFMzODQiLCJIUzUxMiIsIlJTMjU2IiwiUlMzODQiLCJSUzUxMiIsIkVTMjU2IiwiRVMzODQiLCJQUzI1NiIsIlBTMzg0IiwiUFM1MTIiLCJub25lIiwiZ2V0RW5jb2RlZFNpZ25hdHVyZVZhbHVlRnJvbUpXUyIsImdldEpXS3RodW1icHJpbnQiLCJnZXQiLCJnZXRadWx1IiwiaW50RGF0ZTJVVENTdHJpbmciLCJ0b1VUQ1N0cmluZyIsImludERhdGUyWnVsdSIsIkVEU0EiLCJfY3J5cHRvIiwiRGVmYXVsdEFjY2Vzc1Rva2VuRXhwaXJpbmdOb3RpZmljYXRpb25UaW1lIiwiYWNjZXNzVG9rZW5FeHBpcmluZ05vdGlmaWNhdGlvblRpbWUiLCJhY2Nlc3NUb2tlbkV4cGlyaW5nVGltZXIiLCJUaW1lciIsImFjY2Vzc1Rva2VuRXhwaXJlZFRpbWVyIiwiX2FjY2Vzc1Rva2VuRXhwaXJpbmdOb3RpZmljYXRpb25UaW1lIiwiX2FjY2Vzc1Rva2VuRXhwaXJpbmciLCJfYWNjZXNzVG9rZW5FeHBpcmVkIiwibG9hZCIsImNvbnRhaW5lciIsImFjY2Vzc190b2tlbiIsImV4cGlyZXNfaW4iLCJkdXJhdGlvbiIsImRlYnVnIiwiZXhwaXJpbmciLCJjYW5jZWwiLCJleHBpcmVkIiwidW5sb2FkIiwiYWRkQWNjZXNzVG9rZW5FeHBpcmluZyIsImNiIiwiYWRkSGFuZGxlciIsInJlbW92ZUFjY2Vzc1Rva2VuRXhwaXJpbmciLCJyZW1vdmVIYW5kbGVyIiwiYWRkQWNjZXNzVG9rZW5FeHBpcmVkIiwicmVtb3ZlQWNjZXNzVG9rZW5FeHBpcmVkIiwiRGVmYXVsdEludGVydmFsIiwiY2FsbGJhY2siLCJjbGllbnRfaWQiLCJ1cmwiLCJpbnRlcnZhbCIsInN0b3BPbkVycm9yIiwiX2NhbGxiYWNrIiwiX2NsaWVudF9pZCIsIl91cmwiLCJfaW50ZXJ2YWwiLCJfc3RvcE9uRXJyb3IiLCJpZHgiLCJfZnJhbWVfb3JpZ2luIiwiX2ZyYW1lIiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50Iiwic3R5bGUiLCJ2aXNpYmlsaXR5IiwicG9zaXRpb24iLCJkaXNwbGF5Iiwid2lkdGgiLCJoZWlnaHQiLCJzcmMiLCJQcm9taXNlIiwicmVzb2x2ZSIsIm9ubG9hZCIsImJvZHkiLCJhcHBlbmRDaGlsZCIsIl9ib3VuZE1lc3NhZ2VFdmVudCIsIl9tZXNzYWdlIiwiYmluZCIsImFkZEV2ZW50TGlzdGVuZXIiLCJvcmlnaW4iLCJzb3VyY2UiLCJjb250ZW50V2luZG93IiwiZXJyb3IiLCJzdG9wIiwic3RhcnQiLCJzZXNzaW9uX3N0YXRlIiwiX3Nlc3Npb25fc3RhdGUiLCJzZW5kIiwicG9zdE1lc3NhZ2UiLCJfdGltZXIiLCJzZXRJbnRlcnZhbCIsImNsZWFySW50ZXJ2YWwiLCJwcmVwYXJlIiwicGFyYW1zIiwicG9wdXBXaW5kb3dGZWF0dXJlcyIsInBvcHVwIiwiQ29yZG92YVBvcHVwV2luZG93IiwiRGVmYXVsdFBvcHVwRmVhdHVyZXMiLCJEZWZhdWx0UG9wdXBUYXJnZXQiLCJfcHJvbWlzZSIsInJlamVjdCIsIl9yZXNvbHZlIiwiX3JlamVjdCIsImZlYXR1cmVzIiwidGFyZ2V0IiwicG9wdXBXaW5kb3dUYXJnZXQiLCJyZWRpcmVjdF91cmkiLCJzdGFydFVybCIsIl9pc0luQXBwQnJvd3Nlckluc3RhbGxlZCIsImNvcmRvdmFNZXRhZGF0YSIsInNvbWUiLCJuYXZpZ2F0ZSIsIl9lcnJvciIsImNvcmRvdmEiLCJyZXF1aXJlIiwibWV0YWRhdGEiLCJfcG9wdXAiLCJJbkFwcEJyb3dzZXIiLCJvcGVuIiwiX2V4aXRDYWxsYmFja0V2ZW50IiwiX2V4aXRDYWxsYmFjayIsIl9sb2FkU3RhcnRDYWxsYmFja0V2ZW50IiwiX2xvYWRTdGFydENhbGxiYWNrIiwicHJvbWlzZSIsImV2ZW50IiwiX3N1Y2Nlc3MiLCJtZXNzYWdlIiwiX2NsZWFudXAiLCJjbG9zZSIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJFcnJvclJlc3BvbnNlIiwiZXJyb3JfZGVzY3JpcHRpb24iLCJlcnJvcl91cmkiLCJFdmVudCIsIl9uYW1lIiwiX2NhbGxiYWNrcyIsImZpbmRJbmRleCIsIml0ZW0iLCJyYWlzZSIsInRpbWVyIiwiaGFuZGxlIiwidGVzdGluZyIsInJlcXVlc3QiLCJfdGVzdGluZyIsInNldFhNTEh0dHBSZXF1ZXN0IiwibmV3UmVxdWVzdCIsImxvY2F0aW9uIiwibG9jYWxTdG9yYWdlIiwic2Vzc2lvblN0b3JhZ2UiLCJYTUxIdHRwUmVxdWVzdCIsIklGcmFtZU5hdmlnYXRvciIsImZyYW1lIiwiSUZyYW1lV2luZG93Iiwibm90aWZ5UGFyZW50IiwiRGVmYXVsdFRpbWVvdXQiLCJ0aW1lb3V0Iiwic2lsZW50UmVxdWVzdFRpbWVvdXQiLCJzZXRUaW1lb3V0IiwiX3RpbWVvdXQiLCJjbGVhclRpbWVvdXQiLCJyZW1vdmVDaGlsZCIsIl9vcmlnaW4iLCJmcmFtZUVsZW1lbnQiLCJocmVmIiwicGFyZW50IiwicHJvdG9jb2wiLCJob3N0IiwiZ2V0SXRlbSIsInNldEl0ZW0iLCJ2YWx1ZSIsInJlbW92ZUl0ZW0iLCJpbmRleCIsImdldE93blByb3BlcnR5TmFtZXMiLCJKb3NlVXRpbCIsIktleVV0aWwiLCJBbGxvd2VkU2lnbmluZ0FsZ3MiLCJnZXRKb3NlVXRpbCIsInBhcnNlSnd0Iiwiand0IiwidG9rZW4iLCJoZWFkZXIiLCJwYXlsb2FkIiwidmFsaWRhdGVKd3QiLCJpc3N1ZXIiLCJhdWRpZW5jZSIsImNsb2NrU2tldyIsIm5vdyIsInRpbWVJbnNlbnNpdGl2ZSIsIng1YyIsIl92YWxpZGF0ZUp3dCIsInZhbGlkYXRlSnd0QXR0cmlidXRlcyIsInZhbGlkQXVkaWVuY2UiLCJhenAiLCJsb3dlck5vdyIsInVwcGVyTm93IiwidGhlbiIsImhleFRvQmFzZTY0VXJsIiwiSnNvblNlcnZpY2UiLCJhZGRpdGlvbmFsQ29udGVudFR5cGVzIiwiWE1MSHR0cFJlcXVlc3RDdG9yIiwiand0SGFuZGxlciIsIl9jb250ZW50VHlwZXMiLCJfWE1MSHR0cFJlcXVlc3QiLCJfand0SGFuZGxlciIsImdldEpzb24iLCJyZXEiLCJhbGxvd2VkQ29udGVudFR5cGVzIiwic3RhdHVzIiwiY29udGVudFR5cGUiLCJnZXRSZXNwb25zZUhlYWRlciIsImZvdW5kIiwiZmluZCIsInN0YXJ0c1dpdGgiLCJyZXNwb25zZVRleHQiLCJzdGF0dXNUZXh0Iiwib25lcnJvciIsInNldFJlcXVlc3RIZWFkZXIiLCJwb3N0Rm9ybSIsIm5vcExvZ2dlciIsImluZm8iLCJ3YXJuIiwiTk9ORSIsIkVSUk9SIiwiV0FSTiIsIklORk8iLCJERUJVRyIsImxvZ2dlciIsImxldmVsIiwiYXJncyIsImZyb20iLCJPaWRjTWV0YWRhdGFVcmxQYXRoIiwic2V0dGluZ3MiLCJKc29uU2VydmljZUN0b3IiLCJfc2V0dGluZ3MiLCJfanNvblNlcnZpY2UiLCJnZXRNZXRhZGF0YSIsIm1ldGFkYXRhVXJsIiwiZ2V0SXNzdWVyIiwiX2dldE1ldGFkYXRhUHJvcGVydHkiLCJnZXRBdXRob3JpemF0aW9uRW5kcG9pbnQiLCJnZXRVc2VySW5mb0VuZHBvaW50IiwiZ2V0VG9rZW5FbmRwb2ludCIsIm9wdGlvbmFsIiwiZ2V0Q2hlY2tTZXNzaW9uSWZyYW1lIiwiZ2V0RW5kU2Vzc2lvbkVuZHBvaW50IiwiZ2V0UmV2b2NhdGlvbkVuZHBvaW50IiwiZ2V0S2V5c0VuZHBvaW50IiwiZ2V0U2lnbmluZ0tleXMiLCJzaWduaW5nS2V5cyIsImp3a3NfdXJpIiwia2V5U2V0IiwiX21ldGFkYXRhVXJsIiwiYXV0aG9yaXR5IiwiY3JlYXRlU2lnbmluUmVxdWVzdCIsInJlc3BvbnNlX3R5cGUiLCJzY29wZSIsInByb21wdCIsIm1heF9hZ2UiLCJ1aV9sb2NhbGVzIiwiaWRfdG9rZW5faGludCIsImxvZ2luX2hpbnQiLCJhY3JfdmFsdWVzIiwicmVzb3VyY2UiLCJyZXF1ZXN0X3VyaSIsInJlc3BvbnNlX21vZGUiLCJleHRyYVF1ZXJ5UGFyYW1zIiwiZXh0cmFUb2tlblBhcmFtcyIsInJlcXVlc3RfdHlwZSIsInNraXBVc2VySW5mbyIsInN0YXRlU3RvcmUiLCJTaWduaW5SZXF1ZXN0IiwiaXNDb2RlIiwiX21ldGFkYXRhU2VydmljZSIsInNpZ25pblJlcXVlc3QiLCJjbGllbnRfc2VjcmV0Iiwic2lnbmluU3RhdGUiLCJfc3RhdGVTdG9yZSIsInNldCIsInRvU3RvcmFnZVN0cmluZyIsInJlYWRTaWduaW5SZXNwb25zZVN0YXRlIiwicmVtb3ZlU3RhdGUiLCJ1c2VRdWVyeSIsImRlbGltaXRlciIsInJlc3BvbnNlIiwiU2lnbmluUmVzcG9uc2UiLCJzdGF0ZUFwaSIsInJlbW92ZSIsInN0b3JlZFN0YXRlU3RyaW5nIiwiU2lnbmluU3RhdGUiLCJmcm9tU3RvcmFnZVN0cmluZyIsInByb2Nlc3NTaWduaW5SZXNwb25zZSIsIl92YWxpZGF0b3IiLCJ2YWxpZGF0ZVNpZ25pblJlc3BvbnNlIiwiY3JlYXRlU2lnbm91dFJlcXVlc3QiLCJwb3N0X2xvZ291dF9yZWRpcmVjdF91cmkiLCJTaWdub3V0UmVxdWVzdCIsInNpZ25vdXRTdGF0ZSIsInJlYWRTaWdub3V0UmVzcG9uc2VTdGF0ZSIsIlNpZ25vdXRSZXNwb25zZSIsInN0YXRlS2V5IiwiU3RhdGUiLCJwcm9jZXNzU2lnbm91dFJlc3BvbnNlIiwidmFsaWRhdGVTaWdub3V0UmVzcG9uc2UiLCJjbGVhclN0YWxlU3RhdGUiLCJzdGFsZVN0YXRlQWdlIiwidmFsaWRhdG9yIiwibWV0YWRhdGFTZXJ2aWNlIiwiRGVmYXVsdFJlc3BvbnNlVHlwZSIsIkRlZmF1bHRTY29wZSIsIkRlZmF1bHRTdGFsZVN0YXRlQWdlIiwiRGVmYXVsdENsb2NrU2tld0luU2Vjb25kcyIsImZpbHRlclByb3RvY29sQ2xhaW1zIiwibG9hZFVzZXJJbmZvIiwidXNlckluZm9Kd3RJc3N1ZXIiLCJSZXNwb25zZVZhbGlkYXRvckN0b3IiLCJSZXNwb25zZVZhbGlkYXRvciIsIk1ldGFkYXRhU2VydmljZUN0b3IiLCJfYXV0aG9yaXR5IiwiX21ldGFkYXRhIiwiX3NpZ25pbmdLZXlzIiwiX2NsaWVudF9zZWNyZXQiLCJfcmVzcG9uc2VfdHlwZSIsIl9zY29wZSIsIl9yZWRpcmVjdF91cmkiLCJfcG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpIiwiX3Byb21wdCIsIl9kaXNwbGF5IiwiX21heF9hZ2UiLCJfdWlfbG9jYWxlcyIsIl9hY3JfdmFsdWVzIiwiX3Jlc291cmNlIiwiX3Jlc3BvbnNlX21vZGUiLCJfZmlsdGVyUHJvdG9jb2xDbGFpbXMiLCJfbG9hZFVzZXJJbmZvIiwiX3N0YWxlU3RhdGVBZ2UiLCJfY2xvY2tTa2V3IiwiX3VzZXJJbmZvSnd0SXNzdWVyIiwiX2V4dHJhUXVlcnlQYXJhbXMiLCJQb3B1cE5hdmlnYXRvciIsIlBvcHVwV2luZG93Iiwia2VlcE9wZW4iLCJub3RpZnlPcGVuZXIiLCJDaGVja0ZvclBvcHVwQ2xvc2VkSW50ZXJ2YWwiLCJfY2hlY2tGb3JQb3B1cENsb3NlZFRpbWVyIiwiX2NoZWNrRm9yUG9wdXBDbG9zZWQiLCJfaWQiLCJmb2N1cyIsImNsb3NlZCIsIm9wZW5lciIsIlVybFV0aWxpdHkiLCJwYXJzZVVybEZyYWdtZW50IiwiUmVkaXJlY3ROYXZpZ2F0b3IiLCJ1c2VSZXBsYWNlVG9OYXZpZ2F0ZSIsIlByb3RvY29sQ2xhaW1zIiwiVXNlckluZm9TZXJ2aWNlQ3RvciIsIlVzZXJJbmZvU2VydmljZSIsImpvc2VVdGlsIiwiVG9rZW5DbGllbnRDdG9yIiwiVG9rZW5DbGllbnQiLCJfdXNlckluZm9TZXJ2aWNlIiwiX2pvc2VVdGlsIiwiX3Rva2VuQ2xpZW50IiwiX3Byb2Nlc3NTaWduaW5QYXJhbXMiLCJfdmFsaWRhdGVUb2tlbnMiLCJfcHJvY2Vzc0NsYWltcyIsIm5vbmNlIiwiaWRfdG9rZW4iLCJjb2RlX3ZlcmlmaWVyIiwiY29kZSIsImlzT3BlbklkQ29ubmVjdCIsInByb2ZpbGUiLCJnZXRDbGFpbXMiLCJjbGFpbXMiLCJfbWVyZ2VDbGFpbXMiLCJjbGFpbXMxIiwiY2xhaW1zMiIsInJlc3VsdCIsImFzc2lnbiIsInZhbHVlcyIsImZvckVhY2giLCJfcHJvY2Vzc0NvZGUiLCJfdmFsaWRhdGVJZFRva2VuQW5kQWNjZXNzVG9rZW4iLCJfdmFsaWRhdGVJZFRva2VuIiwiZXhjaGFuZ2VDb2RlIiwidG9rZW5SZXNwb25zZSIsIl92YWxpZGF0ZUlkVG9rZW5BdHRyaWJ1dGVzIiwiY2xvY2tTa2V3SW5TZWNvbmRzIiwiX3ZhbGlkYXRlQWNjZXNzVG9rZW4iLCJfZmlsdGVyQnlBbGciLCJmaWx0ZXIiLCJhdF9oYXNoIiwiaGFzaEFsZyIsImhhc2hCaXRzIiwic2hhIiwibGVmdCIsImxlZnRfYjY0dSIsInVzZXJNYW5hZ2VyIiwiQ2hlY2tTZXNzaW9uSUZyYW1lQ3RvciIsIl91c2VyTWFuYWdlciIsIl9DaGVja1Nlc3Npb25JRnJhbWVDdG9yIiwiZXZlbnRzIiwiYWRkVXNlckxvYWRlZCIsIl9zdGFydCIsImFkZFVzZXJVbmxvYWRlZCIsIl9zdG9wIiwiZ2V0VXNlciIsInVzZXIiLCJtb25pdG9yQW5vbnltb3VzU2Vzc2lvbiIsInF1ZXJ5U2Vzc2lvblN0YXR1cyIsInRtcFVzZXIiLCJzZXNzaW9uIiwic2lkIiwiY2F0Y2giLCJlcnIiLCJfc3ViIiwiX3NpZCIsIl9jaGVja1Nlc3Npb25JRnJhbWUiLCJfY2hlY2tTZXNzaW9uSW50ZXJ2YWwiLCJfc3RvcENoZWNrU2Vzc2lvbk9uRXJyb3IiLCJyYWlzZUV2ZW50IiwiX3JhaXNlVXNlclNlc3Npb25DaGFuZ2VkIiwiX3JhaXNlVXNlclNpZ25lZE91dCIsIl9yYWlzZVVzZXJTaWduZWRJbiIsImNoZWNrU2Vzc2lvbkludGVydmFsIiwic3RvcENoZWNrU2Vzc2lvbk9uRXJyb3IiLCJvaWRjIiwiaXNPaWRjIiwiYWRkUXVlcnlQYXJhbSIsImNvZGVfY2hhbGxlbmdlIiwiaXNPQXV0aCIsIk9pZGNTY29wZSIsInRva2VuX3R5cGUiLCJleHBpcmVzX2F0Iiwic2NvcGVzIiwiX25vbmNlIiwiX2NvZGVfdmVyaWZpZXIiLCJfY29kZV9jaGFsbGVuZ2UiLCJfZXh0cmFUb2tlblBhcmFtcyIsIl9za2lwVXNlckluZm8iLCJjcmVhdGVkIiwic3RvcmFnZVN0cmluZyIsIlNpbGVudFJlbmV3U2VydmljZSIsIl90b2tlbkV4cGlyaW5nIiwic2lnbmluU2lsZW50IiwiX3JhaXNlU2lsZW50UmVuZXdFcnJvciIsIl9jcmVhdGVkIiwiX3JlcXVlc3RfdHlwZSIsInN0b3JhZ2UiLCJhZ2UiLCJjdXRvZmYiLCJnZXRBbGxLZXlzIiwicHJvbWlzZXMiLCJhbGwiLCJUaW1lckR1cmF0aW9uIiwibm93RnVuYyIsIl9ub3dGdW5jIiwiZXhwaXJhdGlvbiIsIl90aW1lckhhbmRsZSIsIl9leHBpcmF0aW9uIiwidGltZXJEdXJhdGlvbiIsImRpZmYiLCJncmFudF90eXBlIiwiZXhjaGFuZ2VSZWZyZXNoVG9rZW4iLCJyZWZyZXNoX3Rva2VuIiwiQWNjZXNzVG9rZW5UeXBlSGludCIsIlJlZnJlc2hUb2tlblR5cGVIaW50IiwiX1hNTEh0dHBSZXF1ZXN0Q3RvciIsInJldm9rZSIsInJlcXVpcmVkIiwiX3Jldm9rZSIsInhociIsImdsb2JhbCIsImxhc3RJbmRleE9mIiwicmVnZXgiLCJjb3VudGVyIiwiZXhlYyIsInByb3AiLCJfZ2V0Q2xhaW1zRnJvbUp3dCIsImlzc3VlclByb21pc2UiLCJTaWxlbnRSZW5ld1NlcnZpY2VDdG9yIiwiU2Vzc2lvbk1vbml0b3JDdG9yIiwiVG9rZW5SZXZvY2F0aW9uQ2xpZW50Q3RvciIsIlVzZXJNYW5hZ2VyU2V0dGluZ3MiLCJfZXZlbnRzIiwiVXNlck1hbmFnZXJFdmVudHMiLCJfc2lsZW50UmVuZXdTZXJ2aWNlIiwiYXV0b21hdGljU2lsZW50UmVuZXciLCJzdGFydFNpbGVudFJlbmV3IiwibW9uaXRvclNlc3Npb24iLCJfc2Vzc2lvbk1vbml0b3IiLCJfdG9rZW5SZXZvY2F0aW9uQ2xpZW50IiwiX2xvYWRVc2VyIiwicmVtb3ZlVXNlciIsInN0b3JlVXNlciIsInNpZ25pblJlZGlyZWN0IiwibmF2UGFyYW1zIiwiX3NpZ25pblN0YXJ0IiwiX3JlZGlyZWN0TmF2aWdhdG9yIiwic2lnbmluUmVkaXJlY3RDYWxsYmFjayIsIl9zaWduaW5FbmQiLCJzaWduaW5Qb3B1cCIsInBvcHVwX3JlZGlyZWN0X3VyaSIsIl9zaWduaW4iLCJfcG9wdXBOYXZpZ2F0b3IiLCJzaWduaW5Qb3B1cENhbGxiYWNrIiwiX3NpZ25pbkNhbGxiYWNrIiwiX3VzZVJlZnJlc2hUb2tlbiIsImluY2x1ZGVJZFRva2VuSW5TaWxlbnRSZW5ldyIsInZhbGlkYXRlU3ViT25TaWxlbnRSZW5ldyIsImN1cnJlbnRfc3ViIiwiX3NpZ25pblNpbGVudElmcmFtZSIsImlkVG9rZW5WYWxpZGF0aW9uIiwiX3ZhbGlkYXRlSWRUb2tlbkZyb21Ub2tlblJlZnJlc2hUb2tlbiIsImF1dGhfdGltZSIsInNpbGVudF9yZWRpcmVjdF91cmkiLCJfaWZyYW1lTmF2aWdhdG9yIiwic2lnbmluU2lsZW50Q2FsbGJhY2siLCJzaWduaW5DYWxsYmFjayIsInNpZ25vdXRDYWxsYmFjayIsInNpZ25vdXRSZWRpcmVjdENhbGxiYWNrIiwic2lnbm91dFBvcHVwQ2FsbGJhY2siLCJxdWVyeV9zdGF0dXNfcmVzcG9uc2VfdHlwZSIsIm5hdlJlc3BvbnNlIiwic2lnbmluUmVzcG9uc2UiLCJuYXZpZ2F0b3JQYXJhbXMiLCJzaWdub3V0UmVkaXJlY3QiLCJwb3N0TG9nb3V0UmVkaXJlY3RVcmkiLCJfc2lnbm91dFN0YXJ0IiwiX3NpZ25vdXRFbmQiLCJzaWdub3V0UG9wdXAiLCJwb3B1cF9wb3N0X2xvZ291dF9yZWRpcmVjdF91cmkiLCJfc2lnbm91dCIsInJldm9rZVByb21pc2UiLCJyZXZva2VBY2Nlc3NUb2tlbk9uU2lnbm91dCIsIl9yZXZva2VJbnRlcm5hbCIsInNpZ25vdXRSZXF1ZXN0Iiwic2lnbm91dFJlc3BvbnNlIiwicmV2b2tlQWNjZXNzVG9rZW4iLCJzdWNjZXNzIiwiX3Jldm9rZUFjY2Vzc1Rva2VuSW50ZXJuYWwiLCJfcmV2b2tlUmVmcmVzaFRva2VuSW50ZXJuYWwiLCJhdFN1Y2Nlc3MiLCJydFN1Y2Nlc3MiLCJzdG9wU2lsZW50UmVuZXciLCJfdXNlclN0b3JlIiwiX3VzZXJTdG9yZUtleSIsInJlZGlyZWN0TmF2aWdhdG9yIiwicG9wdXBOYXZpZ2F0b3IiLCJpZnJhbWVOYXZpZ2F0b3IiLCJ1c2VyU3RvcmUiLCJfdXNlckxvYWRlZCIsIl91c2VyVW5sb2FkZWQiLCJfc2lsZW50UmVuZXdFcnJvciIsIl91c2VyU2lnbmVkSW4iLCJfdXNlclNpZ25lZE91dCIsIl91c2VyU2Vzc2lvbkNoYW5nZWQiLCJyZW1vdmVVc2VyTG9hZGVkIiwicmVtb3ZlVXNlclVubG9hZGVkIiwiYWRkU2lsZW50UmVuZXdFcnJvciIsInJlbW92ZVNpbGVudFJlbmV3RXJyb3IiLCJhZGRVc2VyU2lnbmVkSW4iLCJyZW1vdmVVc2VyU2lnbmVkSW4iLCJhZGRVc2VyU2lnbmVkT3V0IiwicmVtb3ZlVXNlclNpZ25lZE91dCIsImFkZFVzZXJTZXNzaW9uQ2hhbmdlZCIsInJlbW92ZVVzZXJTZXNzaW9uQ2hhbmdlZCIsIkRlZmF1bHRDaGVja1Nlc3Npb25JbnRlcnZhbCIsInN0b3JlIiwiX3BvcHVwX3JlZGlyZWN0X3VyaSIsIl9wb3B1cF9wb3N0X2xvZ291dF9yZWRpcmVjdF91cmkiLCJfcG9wdXBXaW5kb3dGZWF0dXJlcyIsIl9wb3B1cFdpbmRvd1RhcmdldCIsIl9zaWxlbnRfcmVkaXJlY3RfdXJpIiwiX3NpbGVudFJlcXVlc3RUaW1lb3V0IiwiX2F1dG9tYXRpY1NpbGVudFJlbmV3IiwiX3ZhbGlkYXRlU3ViT25TaWxlbnRSZW5ldyIsIl9pbmNsdWRlSWRUb2tlbkluU2lsZW50UmVuZXciLCJfbW9uaXRvclNlc3Npb24iLCJfbW9uaXRvckFub255bW91c1Nlc3Npb24iLCJfcXVlcnlfc3RhdHVzX3Jlc3BvbnNlX3R5cGUiLCJfcmV2b2tlQWNjZXNzVG9rZW5PblNpZ25vdXQiLCJwcmVmaXgiLCJfc3RvcmUiLCJfcHJlZml4Il0sIm1hcHBpbmdzIjoiOztBQUFBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esa0RBQTBDLGdDQUFnQztBQUMxRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGdFQUF3RCxrQkFBa0I7QUFDMUU7QUFDQSx5REFBaUQsY0FBYztBQUMvRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaURBQXlDLGlDQUFpQztBQUMxRSx3SEFBZ0gsbUJBQW1CLEVBQUU7QUFDckk7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBMkIsMEJBQTBCLEVBQUU7QUFDdkQseUNBQWlDLGVBQWU7QUFDaEQ7QUFDQTtBQUNBOztBQUVBO0FBQ0EsOERBQXNELCtEQUErRDs7QUFFckg7QUFDQTs7O0FBR0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQy9FQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFFQTs7QUFuQkE7QUFDQTs7a0JBb0JlO0FBQ1hBLDZCQURXO0FBRVhDLGlCQUZXO0FBR1hDLHNDQUhXO0FBSVhDLDhEQUpXO0FBS1hDLG9FQUxXO0FBTVhDLDhEQU5XO0FBT1hDLHlDQVBXO0FBUVhDLDJEQVJXO0FBU1hDLHFEQVRXO0FBVVhDLHVFQVZXO0FBV1hDLDBFQVhXO0FBWVhDLDhEQVpXO0FBYVhDLHVFQWJXO0FB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O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBLFdBQVc7QUFDWDs7QUFFQTtBQUNBO0FBQ0Esd0NBQXdDLFdBQVc7QUFDbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDJCQUEyQjtBQUMzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLFNBQVM7QUFDVDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esb0NBQW9DLGNBQWM7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlDQUFpQyxrQkFBa0I7QUFDbkQ7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGlCQUFpQjs7QUFFakI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLGlCQUFpQjtBQUN6QztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFlBQVk7QUFDWjtBQUNBOztBQUVBO0FBQ0EsWUFBWTtBQUNaOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsOENBQThDLFFBQVE7QUFDdEQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBOztBQUVBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7O0FBRUEsV0FBVztBQUNYO0FBQ0E7QUFDQTs7QUFFQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0EsOENBQThDLFFBQVE7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQSw4Q0FBOEMsUUFBUTtBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQSw4Q0FBOEMsUUFBUTtBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7QUMvdEJZOztBQUVaO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxrQ0FBa0MsU0FBUztBQUMzQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaUJBQWlCLFNBQVM7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQixTQUFTO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsMENBQTBDLFVBQVU7QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7QUN0SkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRVk7O0FBRVosYUFBYSxtQkFBTyxDQUFDLG9EQUFXO0FBQ2hDLGNBQWMsbUJBQU8sQ0FBQyxnREFBUztBQUMvQixjQUFjLG1CQUFPLENBQUMsb0VBQVM7O0FBRS9CO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUIsbURBQW1EO0FBQ3hFO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsVUFBVTtBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsWUFBWTtBQUM3QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsMEJBQTBCO0FBQzFCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBLHVDQUF1QyxTQUFTO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsaUJBQWlCO0FBQ2hDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsYUFBYSxpQkFBaUI7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLFNBQVM7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixTQUFTO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixTQUFTO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0RBQWdELEVBQUU7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsaUJBQWlCLFNBQVM7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlDQUF5QztBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLGVBQWU7QUFDdkM7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0Esd0JBQXdCLFFBQVE7QUFDaEM7QUFDQSxxQkFBcUIsZUFBZTtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsWUFBWTtBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEscUJBQXFCLFNBQVM7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHFCQUFxQixTQUFTO0FBQzlCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLHFCQUFxQixTQUFTO0FBQzlCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixrQkFBa0I7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLG1CQUFtQixjQUFjO0FBQ2pDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx1REFBdUQsT0FBTztBQUM5RDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsdURBQXVELE9BQU87QUFDOUQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztB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TyxDQUFDLDRHQUF1QztBQUMvQyxtQkFBTyxDQUFDLG9GQUEyQjtBQUNuQyxtQkFBTyxDQUFDLHdIQUE2QztBQUNyRCxtQkFBTyxDQUFDLHdGQUE2QjtBQUNyQyxtQkFBTyxDQUFDLG9GQUEyQjtBQUNuQyxtQkFBTyxDQUFDLGdIQUF5QztBQUNqRCxtQkFBTyxDQUFDLDhGQUFnQztBQUN4QyxtQkFBTyxDQUFDLDhGQUFnQztBQUN4QyxtQkFBTyxDQUFDLHNHQUFvQztBQUM1QyxtQkFBTyxDQUFDLHdGQUE2QjtBQUNyQyxtQkFBTyxDQUFDLGdGQUF5QjtBQUNqQyxtQkFBTyxDQUFDLDRHQUF1QztBQUMvQyxtQkFBTyxDQUFDLDhGQUFnQztBQUN4QyxtQkFBTyxDQUFDLHdGQUE2QjtBQUNyQyxtQkFBTyxDQUFDLHdGQUE2QjtBQUNyQyxtQkFBTyxDQUFDLHdHQUFxQztBQUM3QyxtQkFBTyxDQUFDLGdGQUF5QjtBQUNqQyxtQkFBTyxDQUFDLG9GQUEyQjtBQUNuQyxtQkFBTyxDQUFDLGtHQUFrQztBQUMxQyxtQkFBTyxDQUFDLDRGQUErQjtBQUN2QyxtQkFBTyxDQUFDLG9HQUFtQztBQUMzQyxtQkFBTyxDQUFDLDBGQUE4QjtBQUN0QyxtQkFBTyxDQUFDLDhGQUFnQztBQUN4QyxtQkFBTyxDQUFDLGdHQUFpQztBQUN6QyxtQkFBTyxDQUFDLHdGQUE2QjtBQUNyQyxtQkFBTyxDQUFDLDBHQUFzQztBQUM5QyxtQkFBTyxDQUFDLDRHQUF1QztBQUMvQyxtQkFBTyxDQUFDLDRHQUF1QztBQUMvQyxtQkFBTyxDQUFDLGtHQUFrQztBQUMxQyxtQkFBTyxDQUFDLDhGQUFnQztBQUN4QyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLGdGQUF5QjtBQUNqQyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLGdGQUF5QjtBQUNqQyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLG9GQUEyQjtBQUNuQyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLGdGQUF5QjtBQUNqQyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLGdGQUF5QjtBQUNqQyxtQkFBTyxDQUFDLGdGQUF5QjtBQUNqQyxtQkFBTyxDQUFDLGdGQUF5QjtBQUNqQyxtQkFBTyxDQUFDLGdGQUF5QjtBQUNqQyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLDBHQUFzQztBQUM5QyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLG9GQUEyQjtBQUNuQyxtQkFBTyxDQUFDLDRGQUErQjtBQUN2QyxtQkFBTyxDQUFDLHNHQUFvQztBQUM1QyxtQkFBTyxDQUFDLDhGQUFnQztBQUN4QyxtQkFBTyxDQUFDLDRGQUErQjtBQUN2QyxtQkFBTyxDQUFDLHdGQUE2QjtBQUNyQyxtQkFBTyxDQUFDLGtHQUFrQztBQUMxQyxtQkFBTyxDQUFDLHdGQUE2QjtBQUNyQyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLHNGQUE0QjtBQUNwQyxtQkFBTyxDQUFDLG9GQUEyQjtBQUNuQyxtQkFBTyxDQUFDLHNGQUE0QjtBQUNwQyxtQkFBTyxDQUFDLDhGQUFnQztBQUN4QyxtQkFBTyxDQUFDLDRGQUErQjtBQUN2QyxtQkFBTyxDQUFDLDBGQUE4QjtBQUN0QyxtQkFBTyxDQUFDLG9GQUEyQjtBQUNuQyxtQkFBTyxDQUFDLHNGQUE0QjtBQUNwQyxtQkFBTyxDQUFDLHdGQUE2QjtBQUNyQyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLDhFQUF3QjtBQUNoQyxtQkFBTyxDQUFDLHNGQUE0QjtBQUNwQyxtQkFBTyxDQUFDLGtHQUFrQztBQUMxQyxtQkFBTyxDQUFDLDBGQUE4QjtBQUN0QyxtQkFBTyxDQUFDLGdHQUFpQztBQUN6QyxtQkFBTyxDQUFDLDBGQUE4QjtBQUN0QyxtQkFB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TyxDQUFDLHNHQUFvQztBQUM1QyxtQkFBTyxDQUFDLG9GQUEyQjtBQUNuQyxtQkFBTyxDQUFDLG9GQUEyQjtBQUNuQyxtQkFBTyxDQUFDLDBFQUFzQjtBQUM5QixtQkFBTyxDQUFDLDBFQUFzQjtBQUM5QixtQkFBTyxDQUFDLG9GQUEyQjtBQUNuQyxtQkFBTyxDQUFDLG9GQUEyQjtBQUNuQyxtQkFBTyxDQUFDLDhFQUF3QjtBQUNoQyxtQkFBTyxDQUFDLDhFQUF3QjtBQUNoQyxtQkFBTyxDQUFDLHdGQUE2QjtBQUNyQyxtQkFBTyxDQUFDLHdGQUE2QjtBQUNyQyxtQkFBTyxDQUFDLDBFQUFzQjtBQUM5QixtQkFBTyxDQUFDLHdGQUE2QjtBQUNyQyxtQkFBTyxDQUFDLDBGQUE4QjtBQUN0QyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLDhGQUFnQztBQUN4QyxtQkFBTyxDQUFDLHNGQUE0QjtBQUNwQyxtQkFBTyxDQUFDLG9GQUEyQjtBQUNuQyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLDhGQUFnQztBQUN4QyxtQkFBTyxDQUFDLHNGQUE0QjtBQUNwQyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLGtGQUEwQjtBQUNsQyxtQkFBTyxDQUFDLHNGQUE0QjtBQUNwQyxtQkFBTyxDQUFDLDRGQUErQjtBQUN2QyxtQkFBTyxDQUFDLG9GQUEyQjtBQUNuQyxtQkFBTyxDQUFDLDRHQUF1QztBQUMvQyxtQkFBTyxDQUFDLDRHQUF1QztBQUMvQyxtQkFBTyxDQUFDLHNHQUFvQztBQUM1QyxtQkFBTyxDQUFDLGdIQUF5QztBQUNqRCxtQkFBTyxDQUFDLDhHQUF3QztBQUNoRCxtQkFBTyxDQUFDLHdIQUE2QztBQUNyRCxtQkFBTyxDQUFDLHNHQUFvQztBQUM1QyxtQkFBTyxDQUFDLDhHQUF3QztBQUNoRCxtQkFBTyxDQUFDLDhGQUFnQztBQUN4QyxtQkFBTyxDQUFDLHNFQUFv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QyxxQkFBSzViLElBQUwsQ0FBVXd2QixJQUFJanZCLE1BQUosQ0FBVyxLQUFLNDlDLE9BQUwsQ0FBYXBnRCxNQUF4QixDQUFWO0FBQ0g7QUFDSjs7QUFFRCxlQUFPbWdDLFFBQVFDLE9BQVIsQ0FBZ0J2aUIsSUFBaEIsQ0FBUDtBQUNILEs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUN6REw7O0FBRUEsSUFBTStvQixxQkFBcUIsQ0FBQyxPQUFELEVBQVUsT0FBVixFQUFtQixPQUFuQixFQUE0QixPQUE1QixFQUFxQyxPQUFyQyxFQUE4QyxPQUE5QyxFQUF1RCxPQUF2RCxFQUFnRSxPQUFoRSxFQUF5RSxPQUF6RSxDQUEzQjs7UUFHSWhOLEcsR0FBQUEsYztRQUNBK00sTyxHQUFBQSxrQjtRQUNBblMsSSxHQUFBQSxlO1FBQ0FwZSxNLEdBQUFBLGlCO1FBQ0FtTyxTLEdBQUFBLG9CO1FBQ0FoYyxRLEdBQUFBLG1CO1FBQ0FxK0Isa0IsR0FBQUEsa0I7Ozs7Ozs7Ozs7Ozs7Ozs7O2tCQ0xvQjVrQyxNOztBQU54Qjs7Ozs7O0FBRUE7Ozs7QUFJZSxTQUFTQSxNQUFULEdBQWtCO0FBQy9CLFNBQU8sbUJBQVFtYSxPQUFSLENBQWdCLElBQWhCLEVBQXNCLEVBQXRCLENBQVA7QUFDRDs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDUkQsSUFBTXplLFVBQVUsZUFBaEIsQyxRQUF5Q0EsTyxHQUFBQSxPIiwiZmlsZSI6Im9pZGMtY2xpZW50LmpzIiwic291cmNlc0NvbnRlbnQiOlsiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuIFx0XHR9XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gXHR9O1xuXG4gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3RcbiBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3RcbiBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbiBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbiBcdFx0cmV0dXJuIG5zO1xuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IDApO1xuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG5cclxuaW1wb3J0IHsgTG9nIH0gZnJvbSAnLi9zcmMvTG9nLmpzJztcclxuaW1wb3J0IHsgT2lkY0NsaWVudCB9IGZyb20gJy4vc3JjL09pZGNDbGllbnQuanMnO1xyXG5pbXBvcnQgeyBPaWRjQ2xpZW50U2V0dGluZ3MgfSBmcm9tICcuL3NyYy9PaWRjQ2xpZW50U2V0dGluZ3MuanMnO1xyXG5pbXBvcnQgeyBXZWJTdG9yYWdlU3RhdGVTdG9yZSB9IGZyb20gJy4vc3JjL1dlYlN0b3JhZ2VTdGF0ZVN0b3JlLmpzJztcclxuaW1wb3J0IHsgSW5NZW1vcnlXZWJTdG9yYWdlIH0gZnJvbSAnLi9zcmMvSW5NZW1vcnlXZWJTdG9yYWdlLmpzJztcclxuaW1wb3J0IHsgVXNlck1hbmFnZXIgfSBmcm9tICcuL3NyYy9Vc2VyTWFuYWdlci5qcyc7XHJcbmltcG9ydCB7IEFjY2Vzc1Rva2VuRXZlbnRzIH0gZnJvbSAnLi9zcmMvQWNjZXNzVG9rZW5FdmVudHMuanMnO1xyXG5pbXBvcnQgeyBNZXRhZGF0YVNlcnZpY2UgfSBmcm9tICcuL3NyYy9NZXRhZGF0YVNlcnZpY2UuanMnO1xyXG5pbXBvcnQgeyBDb3Jkb3ZhUG9wdXBOYXZpZ2F0b3IgfSBmcm9tICcuL3NyYy9Db3Jkb3ZhUG9wdXBOYXZpZ2F0b3IuanMnO1xyXG5pbXBvcnQgeyBDb3Jkb3ZhSUZyYW1lTmF2aWdhdG9yIH0gZnJvbSAnLi9zcmMvQ29yZG92YUlGcmFtZU5hdmlnYXRvci5qcyc7XHJcbmltcG9ydCB7IENoZWNrU2Vzc2lvbklGcmFtZSB9IGZyb20gJy4vc3JjL0NoZWNrU2Vzc2lvbklGcmFtZS5qcyc7XHJcbmltcG9ydCB7IFRva2VuUmV2b2NhdGlvbkNsaWVudCB9IGZyb20gJy4vc3JjL1Rva2VuUmV2b2NhdGlvbkNsaWVudC5qcyc7XHJcbmltcG9ydCB7IFNlc3Npb25Nb25pdG9yIH0gZnJvbSAnLi9zcmMvU2Vzc2lvbk1vbml0b3IuanMnO1xyXG5pbXBvcnQgeyBHbG9iYWwgfSBmcm9tICcuL3NyYy9HbG9iYWwuanMnO1xyXG5pbXBvcnQgeyBVc2VyIH0gZnJvbSAnLi9zcmMvVXNlci5qcyc7XHJcblxyXG5pbXBvcnQgeyBWZXJzaW9uIH0gZnJvbSAnLi92ZXJzaW9uLmpzJztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICAgIFZlcnNpb24sXHJcbiAgICBMb2csXHJcbiAgICBPaWRjQ2xpZW50LFxyXG4gICAgT2lkY0NsaWVudFNldHRpbmdzLFxyXG4gICAgV2ViU3RvcmFnZVN0YXRlU3RvcmUsXHJcbiAgICBJbk1lbW9yeVdlYlN0b3JhZ2UsXHJcbiAgICBVc2VyTWFuYWdlcixcclxuICAgIEFjY2Vzc1Rva2VuRXZlbnRzLFxyXG4gICAgTWV0YWRhdGFTZXJ2aWNlLFxyXG4gICAgQ29yZG92YVBvcHVwTmF2aWdhdG9yLFxyXG4gICAgQ29yZG92YUlGcmFtZU5hdmlnYXRvcixcclxuICAgIENoZWNrU2Vzc2lvbklGcmFtZSxcclxuICAgIFRva2VuUmV2b2NhdGlvbkNsaWVudCxcclxuICAgIFNlc3Npb25Nb25pdG9yLFxyXG4gICAgR2xvYmFsLFxyXG4gICAgVXNlclxyXG59O1xyXG4iLCIvKlxyXG4gKiBqc3JzYXNpZ24oYWxsKSA4LjAuMTIgKDIwMTgtMDQtMjIpIChjKSAyMDEwLTIwMTggS2VuamkgVXJ1c2hpbWEgfCBranVyLmdpdGh1Yi5jb20vanNyc2FzaWduL2xpY2Vuc2VcclxuICovXHJcblxyXG52YXIgbmF2aWdhdG9yID0ge307XHJcbm5hdmlnYXRvci51c2VyQWdlbnQgPSBmYWxzZTtcclxuXHJcbnZhciB3aW5kb3cgPSB7fTtcclxuXG4vKiFcclxuQ29weXJpZ2h0IChjKSAyMDExLCBZYWhvbyEgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG5Db2RlIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0QgTGljZW5zZTpcclxuaHR0cDovL2RldmVsb3Blci55YWhvby5jb20veXVpL2xpY2Vuc2UuaHRtbFxyXG52ZXJzaW9uOiAyLjkuMFxyXG4qL1xyXG5pZihZQUhPTz09PXVuZGVmaW5lZCl7dmFyIFlBSE9PPXt9fVlBSE9PLmxhbmc9e2V4dGVuZDpmdW5jdGlvbihnLGgsZil7aWYoIWh8fCFnKXt0aHJvdyBuZXcgRXJyb3IoXCJZQUhPTy5sYW5nLmV4dGVuZCBmYWlsZWQsIHBsZWFzZSBjaGVjayB0aGF0IGFsbCBkZXBlbmRlbmNpZXMgYXJlIGluY2x1ZGVkLlwiKX12YXIgZD1mdW5jdGlvbigpe307ZC5wcm90b3R5cGU9aC5wcm90b3R5cGU7Zy5wcm90b3R5cGU9bmV3IGQoKTtnLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1nO2cuc3VwZXJjbGFzcz1oLnByb3RvdHlwZTtpZihoLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj09T2JqZWN0LnByb3RvdHlwZS5jb25zdHJ1Y3Rvcil7aC5wcm90b3R5cGUuY29uc3RydWN0b3I9aH1pZihmKXt2YXIgYjtmb3IoYiBpbiBmKXtnLnByb3RvdHlwZVtiXT1mW2JdfXZhciBlPWZ1bmN0aW9uKCl7fSxjPVtcInRvU3RyaW5nXCIsXCJ2YWx1ZU9mXCJdO3RyeXtpZigvTVNJRS8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSl7ZT1mdW5jdGlvbihqLGkpe2ZvcihiPTA7YjxjLmxlbmd0aDtiPWIrMSl7dmFyIGw9Y1tiXSxrPWlbbF07aWYodHlwZW9mIGs9PT1cImZ1bmN0aW9uXCImJmshPU9iamVjdC5wcm90b3R5cGVbbF0pe2pbbF09a319fX19Y2F0Y2goYSl7fWUoZy5wcm90b3R5cGUsZil9fX07XG4vKiEgQ3J5cHRvSlMgdjMuMS4yIGNvcmUtZml4LmpzXHJcbiAqIGNvZGUuZ29vZ2xlLmNvbS9wL2NyeXB0by1qc1xyXG4gKiAoYykgMjAwOS0yMDEzIGJ5IEplZmYgTW90dC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuICogY29kZS5nb29nbGUuY29tL3AvY3J5cHRvLWpzL3dpa2kvTGljZW5zZVxyXG4gKiBUSElTIElTIEZJWCBvZiAnY29yZS5qcycgdG8gZml4IEhtYWMgaXNzdWUuXHJcbiAqIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvY3J5cHRvLWpzL2lzc3Vlcy9kZXRhaWw/aWQ9ODRcclxuICogaHR0cHM6Ly9jcnlwdG8tanMuZ29vZ2xlY29kZS5jb20vc3ZuLWhpc3RvcnkvcjY2Ny9icmFuY2hlcy8zLngvc3JjL2NvcmUuanNcclxuICovXHJcbnZhciBDcnlwdG9KUz1DcnlwdG9KU3x8KGZ1bmN0aW9uKGUsZyl7dmFyIGE9e307dmFyIGI9YS5saWI9e307dmFyIGo9Yi5CYXNlPShmdW5jdGlvbigpe2Z1bmN0aW9uIG4oKXt9cmV0dXJue2V4dGVuZDpmdW5jdGlvbihwKXtuLnByb3RvdHlwZT10aGlzO3ZhciBvPW5ldyBuKCk7aWYocCl7by5taXhJbihwKX1pZighby5oYXNPd25Qcm9wZXJ0eShcImluaXRcIikpe28uaW5pdD1mdW5jdGlvbigpe28uJHN1cGVyLmluaXQuYXBwbHkodGhpcyxhcmd1bWVudHMpfX1vLmluaXQucHJvdG90eXBlPW87by4kc3VwZXI9dGhpcztyZXR1cm4gb30sY3JlYXRlOmZ1bmN0aW9uKCl7dmFyIG89dGhpcy5leHRlbmQoKTtvLmluaXQuYXBwbHkobyxhcmd1bWVudHMpO3JldHVybiBvfSxpbml0OmZ1bmN0aW9uKCl7fSxtaXhJbjpmdW5jdGlvbihwKXtmb3IodmFyIG8gaW4gcCl7aWYocC5oYXNPd25Qcm9wZXJ0eShvKSl7dGhpc1tvXT1wW29dfX1pZihwLmhhc093blByb3BlcnR5KFwidG9TdHJpbmdcIikpe3RoaXMudG9TdHJpbmc9cC50b1N0cmluZ319LGNsb25lOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5pdC5wcm90b3R5cGUuZXh0ZW5kKHRoaXMpfX19KCkpO3ZhciBsPWIuV29yZEFycmF5PWouZXh0ZW5kKHtpbml0OmZ1bmN0aW9uKG8sbil7bz10aGlzLndvcmRzPW98fFtdO2lmKG4hPWcpe3RoaXMuc2lnQnl0ZXM9bn1lbHNle3RoaXMuc2lnQnl0ZXM9by5sZW5ndGgqNH19LHRvU3RyaW5nOmZ1bmN0aW9uKG4pe3JldHVybihufHxoKS5zdHJpbmdpZnkodGhpcyl9LGNvbmNhdDpmdW5jdGlvbih0KXt2YXIgcT10aGlzLndvcmRzO3ZhciBwPXQud29yZHM7dmFyIG49dGhpcy5zaWdCeXRlczt2YXIgcz10LnNpZ0J5dGVzO3RoaXMuY2xhbXAoKTtpZihuJTQpe2Zvcih2YXIgcj0wO3I8cztyKyspe3ZhciBvPShwW3I+Pj4yXT4+PigyNC0ociU0KSo4KSkmMjU1O3FbKG4rcik+Pj4yXXw9bzw8KDI0LSgobityKSU0KSo4KX19ZWxzZXtmb3IodmFyIHI9MDtyPHM7cis9NCl7cVsobityKT4+PjJdPXBbcj4+PjJdfX10aGlzLnNpZ0J5dGVzKz1zO3JldHVybiB0aGlzfSxjbGFtcDpmdW5jdGlvbigpe3ZhciBvPXRoaXMud29yZHM7dmFyIG49dGhpcy5zaWdCeXRlcztvW24+Pj4yXSY9NDI5NDk2NzI5NTw8KDMyLShuJTQpKjgpO28ubGVuZ3RoPWUuY2VpbChuLzQpfSxjbG9uZTpmdW5jdGlvbigpe3ZhciBuPWouY2xvbmUuY2FsbCh0aGlzKTtuLndvcmRzPXRoaXMud29yZHMuc2xpY2UoMCk7cmV0dXJuIG59LHJhbmRvbTpmdW5jdGlvbihwKXt2YXIgbz1bXTtmb3IodmFyIG49MDtuPHA7bis9NCl7by5wdXNoKChlLnJhbmRvbSgpKjQyOTQ5NjcyOTYpfDApfXJldHVybiBuZXcgbC5pbml0KG8scCl9fSk7dmFyIG09YS5lbmM9e307dmFyIGg9bS5IZXg9e3N0cmluZ2lmeTpmdW5jdGlvbihwKXt2YXIgcj1wLndvcmRzO3ZhciBvPXAuc2lnQnl0ZXM7dmFyIHE9W107Zm9yKHZhciBuPTA7bjxvO24rKyl7dmFyIHM9KHJbbj4+PjJdPj4+KDI0LShuJTQpKjgpKSYyNTU7cS5wdXNoKChzPj4+NCkudG9TdHJpbmcoMTYpKTtxLnB1c2goKHMmMTUpLnRvU3RyaW5nKDE2KSl9cmV0dXJuIHEuam9pbihcIlwiKX0scGFyc2U6ZnVuY3Rpb24ocCl7dmFyIG49cC5sZW5ndGg7dmFyIHE9W107Zm9yKHZhciBvPTA7bzxuO28rPTIpe3Fbbz4+PjNdfD1wYXJzZUludChwLnN1YnN0cihvLDIpLDE2KTw8KDI0LShvJTgpKjQpfXJldHVybiBuZXcgbC5pbml0KHEsbi8yKX19O3ZhciBkPW0uTGF0aW4xPXtzdHJpbmdpZnk6ZnVuY3Rpb24ocSl7dmFyIHI9cS53b3Jkczt2YXIgcD1xLnNpZ0J5dGVzO3ZhciBuPVtdO2Zvcih2YXIgbz0wO288cDtvKyspe3ZhciBzPShyW28+Pj4yXT4+PigyNC0obyU0KSo4KSkmMjU1O24ucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKHMpKX1yZXR1cm4gbi5qb2luKFwiXCIpfSxwYXJzZTpmdW5jdGlvbihwKXt2YXIgbj1wLmxlbmd0aDt2YXIgcT1bXTtmb3IodmFyIG89MDtvPG47bysrKXtxW28+Pj4yXXw9KHAuY2hhckNvZGVBdChvKSYyNTUpPDwoMjQtKG8lNCkqOCl9cmV0dXJuIG5ldyBsLmluaXQocSxuKX19O3ZhciBjPW0uVXRmOD17c3RyaW5naWZ5OmZ1bmN0aW9uKG4pe3RyeXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGVzY2FwZShkLnN0cmluZ2lmeShuKSkpfWNhdGNoKG8pe3Rocm93IG5ldyBFcnJvcihcIk1hbGZvcm1lZCBVVEYtOCBkYXRhXCIpfX0scGFyc2U6ZnVuY3Rpb24obil7cmV0dXJuIGQucGFyc2UodW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KG4pKSl9fTt2YXIgaT1iLkJ1ZmZlcmVkQmxvY2tBbGdvcml0aG09ai5leHRlbmQoe3Jlc2V0OmZ1bmN0aW9uKCl7dGhpcy5fZGF0YT1uZXcgbC5pbml0KCk7dGhpcy5fbkRhdGFCeXRlcz0wfSxfYXBwZW5kOmZ1bmN0aW9uKG4pe2lmKHR5cGVvZiBuPT1cInN0cmluZ1wiKXtuPWMucGFyc2Uobil9dGhpcy5fZGF0YS5jb25jYXQobik7dGhpcy5fbkRhdGFCeXRlcys9bi5zaWdCeXRlc30sX3Byb2Nlc3M6ZnVuY3Rpb24odyl7dmFyIHE9dGhpcy5fZGF0YTt2YXIgeD1xLndvcmRzO3ZhciBuPXEuc2lnQnl0ZXM7dmFyIHQ9dGhpcy5ibG9ja1NpemU7dmFyIHY9dCo0O3ZhciB1PW4vdjtpZih3KXt1PWUuY2VpbCh1KX1lbHNle3U9ZS5tYXgoKHV8MCktdGhpcy5fbWluQnVmZmVyU2l6ZSwwKX12YXIgcz11KnQ7dmFyIHI9ZS5taW4ocyo0LG4pO2lmKHMpe2Zvcih2YXIgcD0wO3A8cztwKz10KXt0aGlzLl9kb1Byb2Nlc3NCbG9jayh4LHApfXZhciBvPXguc3BsaWNlKDAscyk7cS5zaWdCeXRlcy09cn1yZXR1cm4gbmV3IGwuaW5pdChvLHIpfSxjbG9uZTpmdW5jdGlvbigpe3ZhciBuPWouY2xvbmUuY2FsbCh0aGlzKTtuLl9kYXRhPXRoaXMuX2RhdGEuY2xvbmUoKTtyZXR1cm4gbn0sX21pbkJ1ZmZlclNpemU6MH0pO3ZhciBmPWIuSGFzaGVyPWkuZXh0ZW5kKHtjZmc6ai5leHRlbmQoKSxpbml0OmZ1bmN0aW9uKG4pe3RoaXMuY2ZnPXRoaXMuY2ZnLmV4dGVuZChuKTt0aGlzLnJlc2V0KCl9LHJlc2V0OmZ1bmN0aW9uKCl7aS5yZXNldC5jYWxsKHRoaXMpO3RoaXMuX2RvUmVzZXQoKX0sdXBkYXRlOmZ1bmN0aW9uKG4pe3RoaXMuX2FwcGVuZChuKTt0aGlzLl9wcm9jZXNzKCk7cmV0dXJuIHRoaXN9LGZpbmFsaXplOmZ1bmN0aW9uKG4pe2lmKG4pe3RoaXMuX2FwcGVuZChuKX12YXIgbz10aGlzLl9kb0ZpbmFsaXplKCk7cmV0dXJuIG99LGJsb2NrU2l6ZTo1MTIvMzIsX2NyZWF0ZUhlbHBlcjpmdW5jdGlvbihuKXtyZXR1cm4gZnVuY3Rpb24ocCxvKXtyZXR1cm4gbmV3IG4uaW5pdChvKS5maW5hbGl6ZShwKX19LF9jcmVhdGVIbWFjSGVscGVyOmZ1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbihwLG8pe3JldHVybiBuZXcgay5ITUFDLmluaXQobixvKS5maW5hbGl6ZShwKX19fSk7dmFyIGs9YS5hbGdvPXt9O3JldHVybiBhfShNYXRoKSk7XG4vKlxyXG5DcnlwdG9KUyB2My4xLjIgeDY0LWNvcmUtbWluLmpzXHJcbmNvZGUuZ29vZ2xlLmNvbS9wL2NyeXB0by1qc1xyXG4oYykgMjAwOS0yMDEzIGJ5IEplZmYgTW90dC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuY29kZS5nb29nbGUuY29tL3AvY3J5cHRvLWpzL3dpa2kvTGljZW5zZVxyXG4qL1xyXG4oZnVuY3Rpb24oZyl7dmFyIGE9Q3J5cHRvSlMsZj1hLmxpYixlPWYuQmFzZSxoPWYuV29yZEFycmF5LGE9YS54NjQ9e307YS5Xb3JkPWUuZXh0ZW5kKHtpbml0OmZ1bmN0aW9uKGIsYyl7dGhpcy5oaWdoPWI7dGhpcy5sb3c9Y319KTthLldvcmRBcnJheT1lLmV4dGVuZCh7aW5pdDpmdW5jdGlvbihiLGMpe2I9dGhpcy53b3Jkcz1ifHxbXTt0aGlzLnNpZ0J5dGVzPWMhPWc/Yzo4KmIubGVuZ3RofSx0b1gzMjpmdW5jdGlvbigpe2Zvcih2YXIgYj10aGlzLndvcmRzLGM9Yi5sZW5ndGgsYT1bXSxkPTA7ZDxjO2QrKyl7dmFyIGU9YltkXTthLnB1c2goZS5oaWdoKTthLnB1c2goZS5sb3cpfXJldHVybiBoLmNyZWF0ZShhLHRoaXMuc2lnQnl0ZXMpfSxjbG9uZTpmdW5jdGlvbigpe2Zvcih2YXIgYj1lLmNsb25lLmNhbGwodGhpcyksYz1iLndvcmRzPXRoaXMud29yZHMuc2xpY2UoMCksYT1jLmxlbmd0aCxkPTA7ZDxhO2QrKyljW2RdPWNbZF0uY2xvbmUoKTtyZXR1cm4gYn19KX0pKCk7XHJcblxuLypcclxuQ3J5cHRvSlMgdjMuMS4yIGVuYy1iYXNlNjQuanNcclxuY29kZS5nb29nbGUuY29tL3AvY3J5cHRvLWpzXHJcbihjKSAyMDA5LTIwMTMgYnkgSmVmZiBNb3R0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG5jb2RlLmdvb2dsZS5jb20vcC9jcnlwdG8tanMvd2lraS9MaWNlbnNlXHJcbiovXHJcbihmdW5jdGlvbigpe3ZhciBoPUNyeXB0b0pTLGo9aC5saWIuV29yZEFycmF5O2guZW5jLkJhc2U2ND17c3RyaW5naWZ5OmZ1bmN0aW9uKGIpe3ZhciBlPWIud29yZHMsZj1iLnNpZ0J5dGVzLGM9dGhpcy5fbWFwO2IuY2xhbXAoKTtiPVtdO2Zvcih2YXIgYT0wO2E8ZjthKz0zKWZvcih2YXIgZD0oZVthPj4+Ml0+Pj4yNC04KihhJTQpJjI1NSk8PDE2fChlW2ErMT4+PjJdPj4+MjQtOCooKGErMSklNCkmMjU1KTw8OHxlW2ErMj4+PjJdPj4+MjQtOCooKGErMiklNCkmMjU1LGc9MDs0PmcmJmErMC43NSpnPGY7ZysrKWIucHVzaChjLmNoYXJBdChkPj4+NiooMy1nKSY2MykpO2lmKGU9Yy5jaGFyQXQoNjQpKWZvcig7Yi5sZW5ndGglNDspYi5wdXNoKGUpO3JldHVybiBiLmpvaW4oXCJcIil9LHBhcnNlOmZ1bmN0aW9uKGIpe3ZhciBlPWIubGVuZ3RoLGY9dGhpcy5fbWFwLGM9Zi5jaGFyQXQoNjQpO2MmJihjPWIuaW5kZXhPZihjKSwtMSE9YyYmKGU9YykpO2Zvcih2YXIgYz1bXSxhPTAsZD0wO2Q8XHJcbmU7ZCsrKWlmKGQlNCl7dmFyIGc9Zi5pbmRleE9mKGIuY2hhckF0KGQtMSkpPDwyKihkJTQpLGg9Zi5pbmRleE9mKGIuY2hhckF0KGQpKT4+PjYtMiooZCU0KTtjW2E+Pj4yXXw9KGd8aCk8PDI0LTgqKGElNCk7YSsrfXJldHVybiBqLmNyZWF0ZShjLGEpfSxfbWFwOlwiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz1cIn19KSgpO1xyXG5cbi8qXHJcbkNyeXB0b0pTIHYzLjEuMiBzaGEyNTYtbWluLmpzXHJcbmNvZGUuZ29vZ2xlLmNvbS9wL2NyeXB0by1qc1xyXG4oYykgMjAwOS0yMDEzIGJ5IEplZmYgTW90dC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuY29kZS5nb29nbGUuY29tL3AvY3J5cHRvLWpzL3dpa2kvTGljZW5zZVxyXG4qL1xyXG4oZnVuY3Rpb24oayl7Zm9yKHZhciBnPUNyeXB0b0pTLGg9Zy5saWIsdj1oLldvcmRBcnJheSxqPWguSGFzaGVyLGg9Zy5hbGdvLHM9W10sdD1bXSx1PWZ1bmN0aW9uKHEpe3JldHVybiA0Mjk0OTY3Mjk2KihxLShxfDApKXwwfSxsPTIsYj0wOzY0PmI7KXt2YXIgZDthOntkPWw7Zm9yKHZhciB3PWsuc3FydChkKSxyPTI7cjw9dztyKyspaWYoIShkJXIpKXtkPSExO2JyZWFrIGF9ZD0hMH1kJiYoOD5iJiYoc1tiXT11KGsucG93KGwsMC41KSkpLHRbYl09dShrLnBvdyhsLDEvMykpLGIrKyk7bCsrfXZhciBuPVtdLGg9aC5TSEEyNTY9ai5leHRlbmQoe19kb1Jlc2V0OmZ1bmN0aW9uKCl7dGhpcy5faGFzaD1uZXcgdi5pbml0KHMuc2xpY2UoMCkpfSxfZG9Qcm9jZXNzQmxvY2s6ZnVuY3Rpb24ocSxoKXtmb3IodmFyIGE9dGhpcy5faGFzaC53b3JkcyxjPWFbMF0sZD1hWzFdLGI9YVsyXSxrPWFbM10sZj1hWzRdLGc9YVs1XSxqPWFbNl0sbD1hWzddLGU9MDs2ND5lO2UrKyl7aWYoMTY+ZSluW2VdPVxyXG5xW2grZV18MDtlbHNle3ZhciBtPW5bZS0xNV0scD1uW2UtMl07bltlXT0oKG08PDI1fG0+Pj43KV4obTw8MTR8bT4+PjE4KV5tPj4+MykrbltlLTddKygocDw8MTV8cD4+PjE3KV4ocDw8MTN8cD4+PjE5KV5wPj4+MTApK25bZS0xNl19bT1sKygoZjw8MjZ8Zj4+PjYpXihmPDwyMXxmPj4+MTEpXihmPDw3fGY+Pj4yNSkpKyhmJmdefmYmaikrdFtlXStuW2VdO3A9KChjPDwzMHxjPj4+MileKGM8PDE5fGM+Pj4xMyleKGM8PDEwfGM+Pj4yMikpKyhjJmReYyZiXmQmYik7bD1qO2o9ZztnPWY7Zj1rK218MDtrPWI7Yj1kO2Q9YztjPW0rcHwwfWFbMF09YVswXStjfDA7YVsxXT1hWzFdK2R8MDthWzJdPWFbMl0rYnwwO2FbM109YVszXStrfDA7YVs0XT1hWzRdK2Z8MDthWzVdPWFbNV0rZ3wwO2FbNl09YVs2XStqfDA7YVs3XT1hWzddK2x8MH0sX2RvRmluYWxpemU6ZnVuY3Rpb24oKXt2YXIgZD10aGlzLl9kYXRhLGI9ZC53b3JkcyxhPTgqdGhpcy5fbkRhdGFCeXRlcyxjPTgqZC5zaWdCeXRlcztcclxuYltjPj4+NV18PTEyODw8MjQtYyUzMjtiWyhjKzY0Pj4+OTw8NCkrMTRdPWsuZmxvb3IoYS80Mjk0OTY3Mjk2KTtiWyhjKzY0Pj4+OTw8NCkrMTVdPWE7ZC5zaWdCeXRlcz00KmIubGVuZ3RoO3RoaXMuX3Byb2Nlc3MoKTtyZXR1cm4gdGhpcy5faGFzaH0sY2xvbmU6ZnVuY3Rpb24oKXt2YXIgYj1qLmNsb25lLmNhbGwodGhpcyk7Yi5faGFzaD10aGlzLl9oYXNoLmNsb25lKCk7cmV0dXJuIGJ9fSk7Zy5TSEEyNTY9ai5fY3JlYXRlSGVscGVyKGgpO2cuSG1hY1NIQTI1Nj1qLl9jcmVhdGVIbWFjSGVscGVyKGgpfSkoTWF0aCk7XHJcblxuLypcclxuQ3J5cHRvSlMgdjMuMS4yIHNoYTUxMi1taW4uanNcclxuY29kZS5nb29nbGUuY29tL3AvY3J5cHRvLWpzXHJcbihjKSAyMDA5LTIwMTMgYnkgSmVmZiBNb3R0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG5jb2RlLmdvb2dsZS5jb20vcC9jcnlwdG8tanMvd2lraS9MaWNlbnNlXHJcbiovXHJcbihmdW5jdGlvbigpe2Z1bmN0aW9uIGEoKXtyZXR1cm4gZC5jcmVhdGUuYXBwbHkoZCxhcmd1bWVudHMpfWZvcih2YXIgbj1DcnlwdG9KUyxyPW4ubGliLkhhc2hlcixlPW4ueDY0LGQ9ZS5Xb3JkLFQ9ZS5Xb3JkQXJyYXksZT1uLmFsZ28sZWE9W2EoMTExNjM1MjQwOCwzNjA5NzY3NDU4KSxhKDE4OTk0NDc0NDEsNjAyODkxNzI1KSxhKDMwNDkzMjM0NzEsMzk2NDQ4NDM5OSksYSgzOTIxMDA5NTczLDIxNzMyOTU1NDgpLGEoOTYxOTg3MTYzLDQwODE2Mjg0NzIpLGEoMTUwODk3MDk5MywzMDUzODM0MjY1KSxhKDI0NTM2MzU3NDgsMjkzNzY3MTU3OSksYSgyODcwNzYzMjIxLDM2NjQ2MDk1NjApLGEoMzYyNDM4MTA4MCwyNzM0ODgzMzk0KSxhKDMxMDU5ODQwMSwxMTY0OTk2NTQyKSxhKDYwNzIyNTI3OCwxMzIzNjEwNzY0KSxhKDE0MjY4ODE5ODcsMzU5MDMwNDk5NCksYSgxOTI1MDc4Mzg4LDQwNjgxODIzODMpLGEoMjE2MjA3ODIwNiw5OTEzMzYxMTMpLGEoMjYxNDg4ODEwMyw2MzM4MDMzMTcpLFxyXG5hKDMyNDgyMjI1ODAsMzQ3OTc3NDg2OCksYSgzODM1MzkwNDAxLDI2NjY2MTM0NTgpLGEoNDAyMjIyNDc3NCw5NDQ3MTExMzkpLGEoMjY0MzQ3MDc4LDIzNDEyNjI3NzMpLGEoNjA0ODA3NjI4LDIwMDc4MDA5MzMpLGEoNzcwMjU1OTgzLDE0OTU5OTA5MDEpLGEoMTI0OTE1MDEyMiwxODU2NDMxMjM1KSxhKDE1NTUwODE2OTIsMzE3NTIxODEzMiksYSgxOTk2MDY0OTg2LDIxOTg5NTA4MzcpLGEoMjU1NDIyMDg4MiwzOTk5NzE5MzM5KSxhKDI4MjE4MzQzNDksNzY2Nzg0MDE2KSxhKDI5NTI5OTY4MDgsMjU2NjU5NDg3OSksYSgzMjEwMzEzNjcxLDMyMDMzMzc5NTYpLGEoMzMzNjU3MTg5MSwxMDM0NDU3MDI2KSxhKDM1ODQ1Mjg3MTEsMjQ2Njk0ODkwMSksYSgxMTM5MjY5OTMsMzc1ODMyNjM4MyksYSgzMzgyNDE4OTUsMTY4NzE3OTM2KSxhKDY2NjMwNzIwNSwxMTg4MTc5OTY0KSxhKDc3MzUyOTkxMiwxNTQ2MDQ1NzM0KSxhKDEyOTQ3NTczNzIsMTUyMjgwNTQ4NSksYSgxMzk2MTgyMjkxLFxyXG4yNjQzODMzODIzKSxhKDE2OTUxODM3MDAsMjM0MzUyNzM5MCksYSgxOTg2NjYxMDUxLDEwMTQ0Nzc0ODApLGEoMjE3NzAyNjM1MCwxMjA2NzU5MTQyKSxhKDI0NTY5NTYwMzcsMzQ0MDc3NjI3KSxhKDI3MzA0ODU5MjEsMTI5MDg2MzQ2MCksYSgyODIwMzAyNDExLDMxNTg0NTQyNzMpLGEoMzI1OTczMDgwMCwzNTA1OTUyNjU3KSxhKDMzNDU3NjQ3NzEsMTA2MjE3MDA4KSxhKDM1MTYwNjU4MTcsMzYwNjAwODM0NCksYSgzNjAwMzUyODA0LDE0MzI3MjU3NzYpLGEoNDA5NDU3MTkwOSwxNDY3MDMxNTk0KSxhKDI3NTQyMzM0NCw4NTExNjk3MjApLGEoNDMwMjI3NzM0LDMxMDA4MjM3NTIpLGEoNTA2OTQ4NjE2LDEzNjMyNTgxOTUpLGEoNjU5MDYwNTU2LDM3NTA2ODU1OTMpLGEoODgzOTk3ODc3LDM3ODUwNTAyODApLGEoOTU4MTM5NTcxLDMzMTgzMDc0MjcpLGEoMTMyMjgyMjIxOCwzODEyNzIzNDAzKSxhKDE1MzcwMDIwNjMsMjAwMzAzNDk5NSksYSgxNzQ3ODczNzc5LDM2MDIwMzY4OTkpLFxyXG5hKDE5NTU1NjIyMjIsMTU3NTk5MDAxMiksYSgyMDI0MTA0ODE1LDExMjU1OTI5MjgpLGEoMjIyNzczMDQ1MiwyNzE2OTA0MzA2KSxhKDIzNjE4NTI0MjQsNDQyNzc2MDQ0KSxhKDI0Mjg0MzY0NzQsNTkzNjk4MzQ0KSxhKDI3NTY3MzQxODcsMzczMzExMDI0OSksYSgzMjA0MDMxNDc5LDI5OTkzNTE1NzMpLGEoMzMyOTMyNTI5OCwzODE1OTIwNDI3KSxhKDMzOTE1Njk2MTQsMzkyODM4MzkwMCksYSgzNTE1MjY3MjcxLDU2NjI4MDcxMSksYSgzOTQwMTg3NjA2LDM0NTQwNjk1MzQpLGEoNDExODYzMDI3MSw0MDAwMjM5OTkyKSxhKDExNjQxODQ3NCwxOTE0MTM4NTU0KSxhKDE3NDI5MjQyMSwyNzMxMDU1MjcwKSxhKDI4OTM4MDM1NiwzMjAzOTkzMDA2KSxhKDQ2MDM5MzI2OSwzMjA2MjAzMTUpLGEoNjg1NDcxNzMzLDU4NzQ5NjgzNiksYSg4NTIxNDI5NzEsMTA4Njc5Mjg1MSksYSgxMDE3MDM2Mjk4LDM2NTU0MzEwMCksYSgxMTI2MDAwNTgwLDI2MTgyOTc2NzYpLGEoMTI4ODAzMzQ3MCxcclxuMzQwOTg1NTE1OCksYSgxNTAxNTA1OTQ4LDQyMzQ1MDk4NjYpLGEoMTYwNzE2NzkxNSw5ODcxNjc0NjgpLGEoMTgxNjQwMjMxNiwxMjQ2MTg5NTkxKV0sdj1bXSx3PTA7ODA+dzt3Kyspdlt3XT1hKCk7ZT1lLlNIQTUxMj1yLmV4dGVuZCh7X2RvUmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLl9oYXNoPW5ldyBULmluaXQoW25ldyBkLmluaXQoMTc3OTAzMzcwMyw0MDg5MjM1NzIwKSxuZXcgZC5pbml0KDMxNDQxMzQyNzcsMjIyNzg3MzU5NSksbmV3IGQuaW5pdCgxMDEzOTA0MjQyLDQyNzExNzU3MjMpLG5ldyBkLmluaXQoMjc3MzQ4MDc2MiwxNTk1NzUwMTI5KSxuZXcgZC5pbml0KDEzNTk4OTMxMTksMjkxNzU2NTEzNyksbmV3IGQuaW5pdCgyNjAwODIyOTI0LDcyNTUxMTE5OSksbmV3IGQuaW5pdCg1Mjg3MzQ2MzUsNDIxNTM4OTU0NyksbmV3IGQuaW5pdCgxNTQxNDU5MjI1LDMyNzAzMzIwOSldKX0sX2RvUHJvY2Vzc0Jsb2NrOmZ1bmN0aW9uKGEsZCl7Zm9yKHZhciBmPXRoaXMuX2hhc2gud29yZHMsXHJcbkY9ZlswXSxlPWZbMV0sbj1mWzJdLHI9ZlszXSxHPWZbNF0sSD1mWzVdLEk9Zls2XSxmPWZbN10sdz1GLmhpZ2gsSj1GLmxvdyxYPWUuaGlnaCxLPWUubG93LFk9bi5oaWdoLEw9bi5sb3csWj1yLmhpZ2gsTT1yLmxvdywkPUcuaGlnaCxOPUcubG93LGFhPUguaGlnaCxPPUgubG93LGJhPUkuaGlnaCxQPUkubG93LGNhPWYuaGlnaCxRPWYubG93LGs9dyxnPUosej1YLHg9SyxBPVkseT1MLFU9WixCPU0sbD0kLGg9TixSPWFhLEM9TyxTPWJhLEQ9UCxWPWNhLEU9USxtPTA7ODA+bTttKyspe3ZhciBzPXZbbV07aWYoMTY+bSl2YXIgaj1zLmhpZ2g9YVtkKzIqbV18MCxiPXMubG93PWFbZCsyKm0rMV18MDtlbHNle3ZhciBqPXZbbS0xNV0sYj1qLmhpZ2gscD1qLmxvdyxqPShiPj4+MXxwPDwzMSleKGI+Pj44fHA8PDI0KV5iPj4+NyxwPShwPj4+MXxiPDwzMSleKHA+Pj44fGI8PDI0KV4ocD4+Pjd8Yjw8MjUpLHU9dlttLTJdLGI9dS5oaWdoLGM9dS5sb3csdT0oYj4+PjE5fGM8PDEzKV4oYjw8XHJcbjN8Yz4+PjI5KV5iPj4+NixjPShjPj4+MTl8Yjw8MTMpXihjPDwzfGI+Pj4yOSleKGM+Pj42fGI8PDI2KSxiPXZbbS03XSxXPWIuaGlnaCx0PXZbbS0xNl0scT10LmhpZ2gsdD10LmxvdyxiPXArYi5sb3csaj1qK1crKGI+Pj4wPHA+Pj4wPzE6MCksYj1iK2Msaj1qK3UrKGI+Pj4wPGM+Pj4wPzE6MCksYj1iK3Qsaj1qK3ErKGI+Pj4wPHQ+Pj4wPzE6MCk7cy5oaWdoPWo7cy5sb3c9Yn12YXIgVz1sJlJefmwmUyx0PWgmQ15+aCZELHM9ayZ6XmsmQV56JkEsVD1nJnheZyZ5XngmeSxwPShrPj4+Mjh8Zzw8NCleKGs8PDMwfGc+Pj4yKV4oazw8MjV8Zz4+PjcpLHU9KGc+Pj4yOHxrPDw0KV4oZzw8MzB8az4+PjIpXihnPDwyNXxrPj4+NyksYz1lYVttXSxmYT1jLmhpZ2gsZGE9Yy5sb3csYz1FKygoaD4+PjE0fGw8PDE4KV4oaD4+PjE4fGw8PDE0KV4oaDw8MjN8bD4+PjkpKSxxPVYrKChsPj4+MTR8aDw8MTgpXihsPj4+MTh8aDw8MTQpXihsPDwyM3xoPj4+OSkpKyhjPj4+MDxFPj4+MD8xOlxyXG4wKSxjPWMrdCxxPXErVysoYz4+PjA8dD4+PjA/MTowKSxjPWMrZGEscT1xK2ZhKyhjPj4+MDxkYT4+PjA/MTowKSxjPWMrYixxPXEraisoYz4+PjA8Yj4+PjA/MTowKSxiPXUrVCxzPXArcysoYj4+PjA8dT4+PjA/MTowKSxWPVMsRT1ELFM9UixEPUMsUj1sLEM9aCxoPUIrY3wwLGw9VStxKyhoPj4+MDxCPj4+MD8xOjApfDAsVT1BLEI9eSxBPXoseT14LHo9ayx4PWcsZz1jK2J8MCxrPXErcysoZz4+PjA8Yz4+PjA/MTowKXwwfUo9Ri5sb3c9SitnO0YuaGlnaD13K2srKEo+Pj4wPGc+Pj4wPzE6MCk7Sz1lLmxvdz1LK3g7ZS5oaWdoPVgreisoSz4+PjA8eD4+PjA/MTowKTtMPW4ubG93PUwreTtuLmhpZ2g9WStBKyhMPj4+MDx5Pj4+MD8xOjApO009ci5sb3c9TStCO3IuaGlnaD1aK1UrKE0+Pj4wPEI+Pj4wPzE6MCk7Tj1HLmxvdz1OK2g7Ry5oaWdoPSQrbCsoTj4+PjA8aD4+PjA/MTowKTtPPUgubG93PU8rQztILmhpZ2g9YWErUisoTz4+PjA8Qz4+PjA/MTowKTtQPUkubG93PVArRDtcclxuSS5oaWdoPWJhK1MrKFA+Pj4wPEQ+Pj4wPzE6MCk7UT1mLmxvdz1RK0U7Zi5oaWdoPWNhK1YrKFE+Pj4wPEU+Pj4wPzE6MCl9LF9kb0ZpbmFsaXplOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5fZGF0YSxkPWEud29yZHMsZj04KnRoaXMuX25EYXRhQnl0ZXMsZT04KmEuc2lnQnl0ZXM7ZFtlPj4+NV18PTEyODw8MjQtZSUzMjtkWyhlKzEyOD4+PjEwPDw1KSszMF09TWF0aC5mbG9vcihmLzQyOTQ5NjcyOTYpO2RbKGUrMTI4Pj4+MTA8PDUpKzMxXT1mO2Euc2lnQnl0ZXM9NCpkLmxlbmd0aDt0aGlzLl9wcm9jZXNzKCk7cmV0dXJuIHRoaXMuX2hhc2gudG9YMzIoKX0sY2xvbmU6ZnVuY3Rpb24oKXt2YXIgYT1yLmNsb25lLmNhbGwodGhpcyk7YS5faGFzaD10aGlzLl9oYXNoLmNsb25lKCk7cmV0dXJuIGF9LGJsb2NrU2l6ZTozMn0pO24uU0hBNTEyPXIuX2NyZWF0ZUhlbHBlcihlKTtuLkhtYWNTSEE1MTI9ci5fY3JlYXRlSG1hY0hlbHBlcihlKX0pKCk7XHJcblxuLypcclxuQ3J5cHRvSlMgdjMuMS4yIHNoYTM4NC1taW4uanNcclxuY29kZS5nb29nbGUuY29tL3AvY3J5cHRvLWpzXHJcbihjKSAyMDA5LTIwMTMgYnkgSmVmZiBNb3R0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG5jb2RlLmdvb2dsZS5jb20vcC9jcnlwdG8tanMvd2lraS9MaWNlbnNlXHJcbiovXHJcbihmdW5jdGlvbigpe3ZhciBjPUNyeXB0b0pTLGE9Yy54NjQsYj1hLldvcmQsZT1hLldvcmRBcnJheSxhPWMuYWxnbyxkPWEuU0hBNTEyLGE9YS5TSEEzODQ9ZC5leHRlbmQoe19kb1Jlc2V0OmZ1bmN0aW9uKCl7dGhpcy5faGFzaD1uZXcgZS5pbml0KFtuZXcgYi5pbml0KDM0MTgwNzAzNjUsMzIzODM3MTAzMiksbmV3IGIuaW5pdCgxNjU0MjcwMjUwLDkxNDE1MDY2MyksbmV3IGIuaW5pdCgyNDM4NTI5MzcwLDgxMjcwMjk5OSksbmV3IGIuaW5pdCgzNTU0NjIzNjAsNDE0NDkxMjY5NyksbmV3IGIuaW5pdCgxNzMxNDA1NDE1LDQyOTA3NzU4NTcpLG5ldyBiLmluaXQoMjM5NDE4MDIzMSwxNzUwNjAzMDI1KSxuZXcgYi5pbml0KDM2NzUwMDg1MjUsMTY5NDA3NjgzOSksbmV3IGIuaW5pdCgxMjAzMDYyODEzLDMyMDQwNzU0MjgpXSl9LF9kb0ZpbmFsaXplOmZ1bmN0aW9uKCl7dmFyIGE9ZC5fZG9GaW5hbGl6ZS5jYWxsKHRoaXMpO2Euc2lnQnl0ZXMtPTE2O3JldHVybiBhfX0pO2MuU0hBMzg0PVxyXG5kLl9jcmVhdGVIZWxwZXIoYSk7Yy5IbWFjU0hBMzg0PWQuX2NyZWF0ZUhtYWNIZWxwZXIoYSl9KSgpO1xyXG5cbi8qISAoYykgVG9tIFd1IHwgaHR0cDovL3d3dy1jcy1zdHVkZW50cy5zdGFuZm9yZC5lZHUvfnRqdy9qc2JuL1xyXG4gKi9cclxudmFyIGI2NG1hcD1cIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky9cIjt2YXIgYjY0cGFkPVwiPVwiO2Z1bmN0aW9uIGhleDJiNjQoZCl7dmFyIGI7dmFyIGU7dmFyIGE9XCJcIjtmb3IoYj0wO2IrMzw9ZC5sZW5ndGg7Yis9Myl7ZT1wYXJzZUludChkLnN1YnN0cmluZyhiLGIrMyksMTYpO2ErPWI2NG1hcC5jaGFyQXQoZT4+NikrYjY0bWFwLmNoYXJBdChlJjYzKX1pZihiKzE9PWQubGVuZ3RoKXtlPXBhcnNlSW50KGQuc3Vic3RyaW5nKGIsYisxKSwxNik7YSs9YjY0bWFwLmNoYXJBdChlPDwyKX1lbHNle2lmKGIrMj09ZC5sZW5ndGgpe2U9cGFyc2VJbnQoZC5zdWJzdHJpbmcoYixiKzIpLDE2KTthKz1iNjRtYXAuY2hhckF0KGU+PjIpK2I2NG1hcC5jaGFyQXQoKGUmMyk8PDQpfX1pZihiNjRwYWQpe3doaWxlKChhLmxlbmd0aCYzKT4wKXthKz1iNjRwYWR9fXJldHVybiBhfWZ1bmN0aW9uIGI2NHRvaGV4KGYpe3ZhciBkPVwiXCI7dmFyIGU7dmFyIGI9MDt2YXIgYzt2YXIgYTtmb3IoZT0wO2U8Zi5sZW5ndGg7KytlKXtpZihmLmNoYXJBdChlKT09YjY0cGFkKXticmVha31hPWI2NG1hcC5pbmRleE9mKGYuY2hhckF0KGUpKTtpZihhPDApe2NvbnRpbnVlfWlmKGI9PTApe2QrPWludDJjaGFyKGE+PjIpO2M9YSYzO2I9MX1lbHNle2lmKGI9PTEpe2QrPWludDJjaGFyKChjPDwyKXwoYT4+NCkpO2M9YSYxNTtiPTJ9ZWxzZXtpZihiPT0yKXtkKz1pbnQyY2hhcihjKTtkKz1pbnQyY2hhcihhPj4yKTtjPWEmMztiPTN9ZWxzZXtkKz1pbnQyY2hhcigoYzw8Mil8KGE+PjQpKTtkKz1pbnQyY2hhcihhJjE1KTtiPTB9fX19aWYoYj09MSl7ZCs9aW50MmNoYXIoYzw8Mil9cmV0dXJuIGR9ZnVuY3Rpb24gYjY0dG9CQShlKXt2YXIgZD1iNjR0b2hleChlKTt2YXIgYzt2YXIgYj1uZXcgQXJyYXkoKTtmb3IoYz0wOzIqYzxkLmxlbmd0aDsrK2Mpe2JbY109cGFyc2VJbnQoZC5zdWJzdHJpbmcoMipjLDIqYysyKSwxNil9cmV0dXJuIGJ9O1xuLyohIChjKSBUb20gV3UgfCBodHRwOi8vd3d3LWNzLXN0dWRlbnRzLnN0YW5mb3JkLmVkdS9+dGp3L2pzYm4vXHJcbiAqL1xyXG52YXIgZGJpdHM7dmFyIGNhbmFyeT0yNDQ4Mzc4MTQwOTQ1OTA7dmFyIGpfbG09KChjYW5hcnkmMTY3NzcyMTUpPT0xNTcxNTA3MCk7ZnVuY3Rpb24gQmlnSW50ZWdlcihlLGQsZil7aWYoZSE9bnVsbCl7aWYoXCJudW1iZXJcIj09dHlwZW9mIGUpe3RoaXMuZnJvbU51bWJlcihlLGQsZil9ZWxzZXtpZihkPT1udWxsJiZcInN0cmluZ1wiIT10eXBlb2YgZSl7dGhpcy5mcm9tU3RyaW5nKGUsMjU2KX1lbHNle3RoaXMuZnJvbVN0cmluZyhlLGQpfX19fWZ1bmN0aW9uIG5iaSgpe3JldHVybiBuZXcgQmlnSW50ZWdlcihudWxsKX1mdW5jdGlvbiBhbTEoZixhLGIsZSxoLGcpe3doaWxlKC0tZz49MCl7dmFyIGQ9YSp0aGlzW2YrK10rYltlXStoO2g9TWF0aC5mbG9vcihkLzY3MTA4ODY0KTtiW2UrK109ZCY2NzEwODg2M31yZXR1cm4gaH1mdW5jdGlvbiBhbTIoZixxLHIsZSxvLGEpe3ZhciBrPXEmMzI3NjcscD1xPj4xNTt3aGlsZSgtLWE+PTApe3ZhciBkPXRoaXNbZl0mMzI3Njc7dmFyIGc9dGhpc1tmKytdPj4xNTt2YXIgYj1wKmQrZyprO2Q9aypkKygoYiYzMjc2Nyk8PDE1KStyW2VdKyhvJjEwNzM3NDE4MjMpO289KGQ+Pj4zMCkrKGI+Pj4xNSkrcCpnKyhvPj4+MzApO3JbZSsrXT1kJjEwNzM3NDE4MjN9cmV0dXJuIG99ZnVuY3Rpb24gYW0zKGYscSxyLGUsbyxhKXt2YXIgaz1xJjE2MzgzLHA9cT4+MTQ7d2hpbGUoLS1hPj0wKXt2YXIgZD10aGlzW2ZdJjE2MzgzO3ZhciBnPXRoaXNbZisrXT4+MTQ7dmFyIGI9cCpkK2cqaztkPWsqZCsoKGImMTYzODMpPDwxNCkrcltlXStvO289KGQ+PjI4KSsoYj4+MTQpK3AqZztyW2UrK109ZCYyNjg0MzU0NTV9cmV0dXJuIG99aWYoal9sbSYmKG5hdmlnYXRvci5hcHBOYW1lPT1cIk1pY3Jvc29mdCBJbnRlcm5ldCBFeHBsb3JlclwiKSl7QmlnSW50ZWdlci5wcm90b3R5cGUuYW09YW0yO2RiaXRzPTMwfWVsc2V7aWYoal9sbSYmKG5hdmlnYXRvci5hcHBOYW1lIT1cIk5ldHNjYXBlXCIpKXtCaWdJbnRlZ2VyLnByb3RvdHlwZS5hbT1hbTE7ZGJpdHM9MjZ9ZWxzZXtCaWdJbnRlZ2VyLnByb3RvdHlwZS5hbT1hbTM7ZGJpdHM9Mjh9fUJpZ0ludGVnZXIucHJvdG90eXBlLkRCPWRiaXRzO0JpZ0ludGVnZXIucHJvdG90eXBlLkRNPSgoMTw8ZGJpdHMpLTEpO0JpZ0ludGVnZXIucHJvdG90eXBlLkRWPSgxPDxkYml0cyk7dmFyIEJJX0ZQPTUyO0JpZ0ludGVnZXIucHJvdG90eXBlLkZWPU1hdGgucG93KDIsQklfRlApO0JpZ0ludGVnZXIucHJvdG90eXBlLkYxPUJJX0ZQLWRiaXRzO0JpZ0ludGVnZXIucHJvdG90eXBlLkYyPTIqZGJpdHMtQklfRlA7dmFyIEJJX1JNPVwiMDEyMzQ1Njc4OWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6XCI7dmFyIEJJX1JDPW5ldyBBcnJheSgpO3ZhciBycix2djtycj1cIjBcIi5jaGFyQ29kZUF0KDApO2Zvcih2dj0wO3Z2PD05OysrdnYpe0JJX1JDW3JyKytdPXZ2fXJyPVwiYVwiLmNoYXJDb2RlQXQoMCk7Zm9yKHZ2PTEwO3Z2PDM2OysrdnYpe0JJX1JDW3JyKytdPXZ2fXJyPVwiQVwiLmNoYXJDb2RlQXQoMCk7Zm9yKHZ2PTEwO3Z2PDM2OysrdnYpe0JJX1JDW3JyKytdPXZ2fWZ1bmN0aW9uIGludDJjaGFyKGEpe3JldHVybiBCSV9STS5jaGFyQXQoYSl9ZnVuY3Rpb24gaW50QXQoYixhKXt2YXIgZD1CSV9SQ1tiLmNoYXJDb2RlQXQoYSldO3JldHVybihkPT1udWxsKT8tMTpkfWZ1bmN0aW9uIGJucENvcHlUbyhiKXtmb3IodmFyIGE9dGhpcy50LTE7YT49MDstLWEpe2JbYV09dGhpc1thXX1iLnQ9dGhpcy50O2Iucz10aGlzLnN9ZnVuY3Rpb24gYm5wRnJvbUludChhKXt0aGlzLnQ9MTt0aGlzLnM9KGE8MCk/LTE6MDtpZihhPjApe3RoaXNbMF09YX1lbHNle2lmKGE8LTEpe3RoaXNbMF09YSt0aGlzLkRWfWVsc2V7dGhpcy50PTB9fX1mdW5jdGlvbiBuYnYoYSl7dmFyIGI9bmJpKCk7Yi5mcm9tSW50KGEpO3JldHVybiBifWZ1bmN0aW9uIGJucEZyb21TdHJpbmcoaCxjKXt2YXIgZTtpZihjPT0xNil7ZT00fWVsc2V7aWYoYz09OCl7ZT0zfWVsc2V7aWYoYz09MjU2KXtlPTh9ZWxzZXtpZihjPT0yKXtlPTF9ZWxzZXtpZihjPT0zMil7ZT01fWVsc2V7aWYoYz09NCl7ZT0yfWVsc2V7dGhpcy5mcm9tUmFkaXgoaCxjKTtyZXR1cm59fX19fX10aGlzLnQ9MDt0aGlzLnM9MDt2YXIgZz1oLmxlbmd0aCxkPWZhbHNlLGY9MDt3aGlsZSgtLWc+PTApe3ZhciBhPShlPT04KT9oW2ddJjI1NTppbnRBdChoLGcpO2lmKGE8MCl7aWYoaC5jaGFyQXQoZyk9PVwiLVwiKXtkPXRydWV9Y29udGludWV9ZD1mYWxzZTtpZihmPT0wKXt0aGlzW3RoaXMudCsrXT1hfWVsc2V7aWYoZitlPnRoaXMuREIpe3RoaXNbdGhpcy50LTFdfD0oYSYoKDE8PCh0aGlzLkRCLWYpKS0xKSk8PGY7dGhpc1t0aGlzLnQrK109KGE+Pih0aGlzLkRCLWYpKX1lbHNle3RoaXNbdGhpcy50LTFdfD1hPDxmfX1mKz1lO2lmKGY+PXRoaXMuREIpe2YtPXRoaXMuREJ9fWlmKGU9PTgmJihoWzBdJjEyOCkhPTApe3RoaXMucz0tMTtpZihmPjApe3RoaXNbdGhpcy50LTFdfD0oKDE8PCh0aGlzLkRCLWYpKS0xKTw8Zn19dGhpcy5jbGFtcCgpO2lmKGQpe0JpZ0ludGVnZXIuWkVSTy5zdWJUbyh0aGlzLHRoaXMpfX1mdW5jdGlvbiBibnBDbGFtcCgpe3ZhciBhPXRoaXMucyZ0aGlzLkRNO3doaWxlKHRoaXMudD4wJiZ0aGlzW3RoaXMudC0xXT09YSl7LS10aGlzLnR9fWZ1bmN0aW9uIGJuVG9TdHJpbmcoYyl7aWYodGhpcy5zPDApe3JldHVyblwiLVwiK3RoaXMubmVnYXRlKCkudG9TdHJpbmcoYyl9dmFyIGU7aWYoYz09MTYpe2U9NH1lbHNle2lmKGM9PTgpe2U9M31lbHNle2lmKGM9PTIpe2U9MX1lbHNle2lmKGM9PTMyKXtlPTV9ZWxzZXtpZihjPT00KXtlPTJ9ZWxzZXtyZXR1cm4gdGhpcy50b1JhZGl4KGMpfX19fX12YXIgZz0oMTw8ZSktMSxsLGE9ZmFsc2UsaD1cIlwiLGY9dGhpcy50O3ZhciBqPXRoaXMuREItKGYqdGhpcy5EQiklZTtpZihmLS0+MCl7aWYoajx0aGlzLkRCJiYobD10aGlzW2ZdPj5qKT4wKXthPXRydWU7aD1pbnQyY2hhcihsKX13aGlsZShmPj0wKXtpZihqPGUpe2w9KHRoaXNbZl0mKCgxPDxqKS0xKSk8PChlLWopO2x8PXRoaXNbLS1mXT4+KGorPXRoaXMuREItZSl9ZWxzZXtsPSh0aGlzW2ZdPj4oai09ZSkpJmc7aWYoajw9MCl7ais9dGhpcy5EQjstLWZ9fWlmKGw+MCl7YT10cnVlfWlmKGEpe2grPWludDJjaGFyKGwpfX19cmV0dXJuIGE/aDpcIjBcIn1mdW5jdGlvbiBibk5lZ2F0ZSgpe3ZhciBhPW5iaSgpO0JpZ0ludGVnZXIuWkVSTy5zdWJUbyh0aGlzLGEpO3JldHVybiBhfWZ1bmN0aW9uIGJuQWJzKCl7cmV0dXJuKHRoaXMuczwwKT90aGlzLm5lZ2F0ZSgpOnRoaXN9ZnVuY3Rpb24gYm5Db21wYXJlVG8oYil7dmFyIGQ9dGhpcy5zLWIucztpZihkIT0wKXtyZXR1cm4gZH12YXIgYz10aGlzLnQ7ZD1jLWIudDtpZihkIT0wKXtyZXR1cm4odGhpcy5zPDApPy1kOmR9d2hpbGUoLS1jPj0wKXtpZigoZD10aGlzW2NdLWJbY10pIT0wKXtyZXR1cm4gZH19cmV0dXJuIDB9ZnVuY3Rpb24gbmJpdHMoYSl7dmFyIGM9MSxiO2lmKChiPWE+Pj4xNikhPTApe2E9YjtjKz0xNn1pZigoYj1hPj44KSE9MCl7YT1iO2MrPTh9aWYoKGI9YT4+NCkhPTApe2E9YjtjKz00fWlmKChiPWE+PjIpIT0wKXthPWI7Yys9Mn1pZigoYj1hPj4xKSE9MCl7YT1iO2MrPTF9cmV0dXJuIGN9ZnVuY3Rpb24gYm5CaXRMZW5ndGgoKXtpZih0aGlzLnQ8PTApe3JldHVybiAwfXJldHVybiB0aGlzLkRCKih0aGlzLnQtMSkrbmJpdHModGhpc1t0aGlzLnQtMV1eKHRoaXMucyZ0aGlzLkRNKSl9ZnVuY3Rpb24gYm5wRExTaGlmdFRvKGMsYil7dmFyIGE7Zm9yKGE9dGhpcy50LTE7YT49MDstLWEpe2JbYStjXT10aGlzW2FdfWZvcihhPWMtMTthPj0wOy0tYSl7YlthXT0wfWIudD10aGlzLnQrYztiLnM9dGhpcy5zfWZ1bmN0aW9uIGJucERSU2hpZnRUbyhjLGIpe2Zvcih2YXIgYT1jO2E8dGhpcy50OysrYSl7YlthLWNdPXRoaXNbYV19Yi50PU1hdGgubWF4KHRoaXMudC1jLDApO2Iucz10aGlzLnN9ZnVuY3Rpb24gYm5wTFNoaWZ0VG8oaixlKXt2YXIgYj1qJXRoaXMuREI7dmFyIGE9dGhpcy5EQi1iO3ZhciBnPSgxPDxhKS0xO3ZhciBmPU1hdGguZmxvb3Ioai90aGlzLkRCKSxoPSh0aGlzLnM8PGIpJnRoaXMuRE0sZDtmb3IoZD10aGlzLnQtMTtkPj0wOy0tZCl7ZVtkK2YrMV09KHRoaXNbZF0+PmEpfGg7aD0odGhpc1tkXSZnKTw8Yn1mb3IoZD1mLTE7ZD49MDstLWQpe2VbZF09MH1lW2ZdPWg7ZS50PXRoaXMudCtmKzE7ZS5zPXRoaXMucztlLmNsYW1wKCl9ZnVuY3Rpb24gYm5wUlNoaWZ0VG8oZyxkKXtkLnM9dGhpcy5zO3ZhciBlPU1hdGguZmxvb3IoZy90aGlzLkRCKTtpZihlPj10aGlzLnQpe2QudD0wO3JldHVybn12YXIgYj1nJXRoaXMuREI7dmFyIGE9dGhpcy5EQi1iO3ZhciBmPSgxPDxiKS0xO2RbMF09dGhpc1tlXT4+Yjtmb3IodmFyIGM9ZSsxO2M8dGhpcy50OysrYyl7ZFtjLWUtMV18PSh0aGlzW2NdJmYpPDxhO2RbYy1lXT10aGlzW2NdPj5ifWlmKGI+MCl7ZFt0aGlzLnQtZS0xXXw9KHRoaXMucyZmKTw8YX1kLnQ9dGhpcy50LWU7ZC5jbGFtcCgpfWZ1bmN0aW9uIGJucFN1YlRvKGQsZil7dmFyIGU9MCxnPTAsYj1NYXRoLm1pbihkLnQsdGhpcy50KTt3aGlsZShlPGIpe2crPXRoaXNbZV0tZFtlXTtmW2UrK109ZyZ0aGlzLkRNO2c+Pj10aGlzLkRCfWlmKGQudDx0aGlzLnQpe2ctPWQuczt3aGlsZShlPHRoaXMudCl7Zys9dGhpc1tlXTtmW2UrK109ZyZ0aGlzLkRNO2c+Pj10aGlzLkRCfWcrPXRoaXMuc31lbHNle2crPXRoaXMuczt3aGlsZShlPGQudCl7Zy09ZFtlXTtmW2UrK109ZyZ0aGlzLkRNO2c+Pj10aGlzLkRCfWctPWQuc31mLnM9KGc8MCk/LTE6MDtpZihnPC0xKXtmW2UrK109dGhpcy5EVitnfWVsc2V7aWYoZz4wKXtmW2UrK109Z319Zi50PWU7Zi5jbGFtcCgpfWZ1bmN0aW9uIGJucE11bHRpcGx5VG8oYyxlKXt2YXIgYj10aGlzLmFicygpLGY9Yy5hYnMoKTt2YXIgZD1iLnQ7ZS50PWQrZi50O3doaWxlKC0tZD49MCl7ZVtkXT0wfWZvcihkPTA7ZDxmLnQ7KytkKXtlW2QrYi50XT1iLmFtKDAsZltkXSxlLGQsMCxiLnQpfWUucz0wO2UuY2xhbXAoKTtpZih0aGlzLnMhPWMucyl7QmlnSW50ZWdlci5aRVJPLnN1YlRvKGUsZSl9fWZ1bmN0aW9uIGJucFNxdWFyZVRvKGQpe3ZhciBhPXRoaXMuYWJzKCk7dmFyIGI9ZC50PTIqYS50O3doaWxlKC0tYj49MCl7ZFtiXT0wfWZvcihiPTA7YjxhLnQtMTsrK2Ipe3ZhciBlPWEuYW0oYixhW2JdLGQsMipiLDAsMSk7aWYoKGRbYithLnRdKz1hLmFtKGIrMSwyKmFbYl0sZCwyKmIrMSxlLGEudC1iLTEpKT49YS5EVil7ZFtiK2EudF0tPWEuRFY7ZFtiK2EudCsxXT0xfX1pZihkLnQ+MCl7ZFtkLnQtMV0rPWEuYW0oYixhW2JdLGQsMipiLDAsMSl9ZC5zPTA7ZC5jbGFtcCgpfWZ1bmN0aW9uIGJucERpdlJlbVRvKG4saCxnKXt2YXIgdz1uLmFicygpO2lmKHcudDw9MCl7cmV0dXJufXZhciBrPXRoaXMuYWJzKCk7aWYoay50PHcudCl7aWYoaCE9bnVsbCl7aC5mcm9tSW50KDApfWlmKGchPW51bGwpe3RoaXMuY29weVRvKGcpfXJldHVybn1pZihnPT1udWxsKXtnPW5iaSgpfXZhciBkPW5iaSgpLGE9dGhpcy5zLGw9bi5zO3ZhciB2PXRoaXMuREItbmJpdHMod1t3LnQtMV0pO2lmKHY+MCl7dy5sU2hpZnRUbyh2LGQpO2subFNoaWZ0VG8odixnKX1lbHNle3cuY29weVRvKGQpO2suY29weVRvKGcpfXZhciBwPWQudDt2YXIgYj1kW3AtMV07aWYoYj09MCl7cmV0dXJufXZhciBvPWIqKDE8PHRoaXMuRjEpKygocD4xKT9kW3AtMl0+PnRoaXMuRjI6MCk7dmFyIEE9dGhpcy5GVi9vLHo9KDE8PHRoaXMuRjEpL28seD0xPDx0aGlzLkYyO3ZhciB1PWcudCxzPXUtcCxmPShoPT1udWxsKT9uYmkoKTpoO2QuZGxTaGlmdFRvKHMsZik7aWYoZy5jb21wYXJlVG8oZik+PTApe2dbZy50KytdPTE7Zy5zdWJUbyhmLGcpfUJpZ0ludGVnZXIuT05FLmRsU2hpZnRUbyhwLGYpO2Yuc3ViVG8oZCxkKTt3aGlsZShkLnQ8cCl7ZFtkLnQrK109MH13aGlsZSgtLXM+PTApe3ZhciBjPShnWy0tdV09PWIpP3RoaXMuRE06TWF0aC5mbG9vcihnW3VdKkErKGdbdS0xXSt4KSp6KTtpZigoZ1t1XSs9ZC5hbSgwLGMsZyxzLDAscCkpPGMpe2QuZGxTaGlmdFRvKHMsZik7Zy5zdWJUbyhmLGcpO3doaWxlKGdbdV08LS1jKXtnLnN1YlRvKGYsZyl9fX1pZihoIT1udWxsKXtnLmRyU2hpZnRUbyhwLGgpO2lmKGEhPWwpe0JpZ0ludGVnZXIuWkVSTy5zdWJUbyhoLGgpfX1nLnQ9cDtnLmNsYW1wKCk7aWYodj4wKXtnLnJTaGlmdFRvKHYsZyl9aWYoYTwwKXtCaWdJbnRlZ2VyLlpFUk8uc3ViVG8oZyxnKX19ZnVuY3Rpb24gYm5Nb2QoYil7dmFyIGM9bmJpKCk7dGhpcy5hYnMoKS5kaXZSZW1UbyhiLG51bGwsYyk7aWYodGhpcy5zPDAmJmMuY29tcGFyZVRvKEJpZ0ludGVnZXIuWkVSTyk+MCl7Yi5zdWJUbyhjLGMpfXJldHVybiBjfWZ1bmN0aW9uIENsYXNzaWMoYSl7dGhpcy5tPWF9ZnVuY3Rpb24gY0NvbnZlcnQoYSl7aWYoYS5zPDB8fGEuY29tcGFyZVRvKHRoaXMubSk+PTApe3JldHVybiBhLm1vZCh0aGlzLm0pfWVsc2V7cmV0dXJuIGF9fWZ1bmN0aW9uIGNSZXZlcnQoYSl7cmV0dXJuIGF9ZnVuY3Rpb24gY1JlZHVjZShhKXthLmRpdlJlbVRvKHRoaXMubSxudWxsLGEpfWZ1bmN0aW9uIGNNdWxUbyhhLGMsYil7YS5tdWx0aXBseVRvKGMsYik7dGhpcy5yZWR1Y2UoYil9ZnVuY3Rpb24gY1NxclRvKGEsYil7YS5zcXVhcmVUbyhiKTt0aGlzLnJlZHVjZShiKX1DbGFzc2ljLnByb3RvdHlwZS5jb252ZXJ0PWNDb252ZXJ0O0NsYXNzaWMucHJvdG90eXBlLnJldmVydD1jUmV2ZXJ0O0NsYXNzaWMucHJvdG90eXBlLnJlZHVjZT1jUmVkdWNlO0NsYXNzaWMucHJvdG90eXBlLm11bFRvPWNNdWxUbztDbGFzc2ljLnByb3RvdHlwZS5zcXJUbz1jU3FyVG87ZnVuY3Rpb24gYm5wSW52RGlnaXQoKXtpZih0aGlzLnQ8MSl7cmV0dXJuIDB9dmFyIGE9dGhpc1swXTtpZigoYSYxKT09MCl7cmV0dXJuIDB9dmFyIGI9YSYzO2I9KGIqKDItKGEmMTUpKmIpKSYxNTtiPShiKigyLShhJjI1NSkqYikpJjI1NTtiPShiKigyLSgoKGEmNjU1MzUpKmIpJjY1NTM1KSkpJjY1NTM1O2I9KGIqKDItYSpiJXRoaXMuRFYpKSV0aGlzLkRWO3JldHVybihiPjApP3RoaXMuRFYtYjotYn1mdW5jdGlvbiBNb250Z29tZXJ5KGEpe3RoaXMubT1hO3RoaXMubXA9YS5pbnZEaWdpdCgpO3RoaXMubXBsPXRoaXMubXAmMzI3Njc7dGhpcy5tcGg9dGhpcy5tcD4+MTU7dGhpcy51bT0oMTw8KGEuREItMTUpKS0xO3RoaXMubXQyPTIqYS50fWZ1bmN0aW9uIG1vbnRDb252ZXJ0KGEpe3ZhciBiPW5iaSgpO2EuYWJzKCkuZGxTaGlmdFRvKHRoaXMubS50LGIpO2IuZGl2UmVtVG8odGhpcy5tLG51bGwsYik7aWYoYS5zPDAmJmIuY29tcGFyZVRvKEJpZ0ludGVnZXIuWkVSTyk+MCl7dGhpcy5tLnN1YlRvKGIsYil9cmV0dXJuIGJ9ZnVuY3Rpb24gbW9udFJldmVydChhKXt2YXIgYj1uYmkoKTthLmNvcHlUbyhiKTt0aGlzLnJlZHVjZShiKTtyZXR1cm4gYn1mdW5jdGlvbiBtb250UmVkdWNlKGEpe3doaWxlKGEudDw9dGhpcy5tdDIpe2FbYS50KytdPTB9Zm9yKHZhciBjPTA7Yzx0aGlzLm0udDsrK2Mpe3ZhciBiPWFbY10mMzI3Njc7dmFyIGQ9KGIqdGhpcy5tcGwrKCgoYip0aGlzLm1waCsoYVtjXT4+MTUpKnRoaXMubXBsKSZ0aGlzLnVtKTw8MTUpKSZhLkRNO2I9Yyt0aGlzLm0udDthW2JdKz10aGlzLm0uYW0oMCxkLGEsYywwLHRoaXMubS50KTt3aGlsZShhW2JdPj1hLkRWKXthW2JdLT1hLkRWO2FbKytiXSsrfX1hLmNsYW1wKCk7YS5kclNoaWZ0VG8odGhpcy5tLnQsYSk7aWYoYS5jb21wYXJlVG8odGhpcy5tKT49MCl7YS5zdWJUbyh0aGlzLm0sYSl9fWZ1bmN0aW9uIG1vbnRTcXJUbyhhLGIpe2Euc3F1YXJlVG8oYik7dGhpcy5yZWR1Y2UoYil9ZnVuY3Rpb24gbW9udE11bFRvKGEsYyxiKXthLm11bHRpcGx5VG8oYyxiKTt0aGlzLnJlZHVjZShiKX1Nb250Z29tZXJ5LnByb3RvdHlwZS5jb252ZXJ0PW1vbnRDb252ZXJ0O01vbnRnb21lcnkucHJvdG90eXBlLnJldmVydD1tb250UmV2ZXJ0O01vbnRnb21lcnkucHJvdG90eXBlLnJlZHVjZT1tb250UmVkdWNlO01vbnRnb21lcnkucHJvdG90eXBlLm11bFRvPW1vbnRNdWxUbztNb250Z29tZXJ5LnByb3RvdHlwZS5zcXJUbz1tb250U3FyVG87ZnVuY3Rpb24gYm5wSXNFdmVuKCl7cmV0dXJuKCh0aGlzLnQ+MCk/KHRoaXNbMF0mMSk6dGhpcy5zKT09MH1mdW5jdGlvbiBibnBFeHAoaCxqKXtpZihoPjQyOTQ5NjcyOTV8fGg8MSl7cmV0dXJuIEJpZ0ludGVnZXIuT05FfXZhciBmPW5iaSgpLGE9bmJpKCksZD1qLmNvbnZlcnQodGhpcyksYz1uYml0cyhoKS0xO2QuY29weVRvKGYpO3doaWxlKC0tYz49MCl7ai5zcXJUbyhmLGEpO2lmKChoJigxPDxjKSk+MCl7ai5tdWxUbyhhLGQsZil9ZWxzZXt2YXIgYj1mO2Y9YTthPWJ9fXJldHVybiBqLnJldmVydChmKX1mdW5jdGlvbiBibk1vZFBvd0ludChiLGEpe3ZhciBjO2lmKGI8MjU2fHxhLmlzRXZlbigpKXtjPW5ldyBDbGFzc2ljKGEpfWVsc2V7Yz1uZXcgTW9udGdvbWVyeShhKX1yZXR1cm4gdGhpcy5leHAoYixjKX1CaWdJbnRlZ2VyLnByb3RvdHlwZS5jb3B5VG89Ym5wQ29weVRvO0JpZ0ludGVnZXIucHJvdG90eXBlLmZyb21JbnQ9Ym5wRnJvbUludDtCaWdJbnRlZ2VyLnByb3RvdHlwZS5mcm9tU3RyaW5nPWJucEZyb21TdHJpbmc7QmlnSW50ZWdlci5wcm90b3R5cGUuY2xhbXA9Ym5wQ2xhbXA7QmlnSW50ZWdlci5wcm90b3R5cGUuZGxTaGlmdFRvPWJucERMU2hpZnRUbztCaWdJbnRlZ2VyLnByb3RvdHlwZS5kclNoaWZ0VG89Ym5wRFJTaGlmdFRvO0JpZ0ludGVnZXIucHJvdG90eXBlLmxTaGlmdFRvPWJucExTaGlmdFRvO0JpZ0ludGVnZXIucHJvdG90eXBlLnJTaGlmdFRvPWJucFJTaGlmdFRvO0JpZ0ludGVnZXIucHJvdG90eXBlLnN1YlRvPWJucFN1YlRvO0JpZ0ludGVnZXIucHJvdG90eXBlLm11bHRpcGx5VG89Ym5wTXVsdGlwbHlUbztCaWdJbnRlZ2VyLnByb3RvdHlwZS5zcXVhcmVUbz1ibnBTcXVhcmVUbztCaWdJbnRlZ2VyLnByb3RvdHlwZS5kaXZSZW1Ubz1ibnBEaXZSZW1UbztCaWdJbnRlZ2VyLnByb3RvdHlwZS5pbnZEaWdpdD1ibnBJbnZEaWdpdDtCaWdJbnRlZ2VyLnByb3RvdHlwZS5pc0V2ZW49Ym5wSXNFdmVuO0JpZ0ludGVnZXIucHJvdG90eXBlLmV4cD1ibnBFeHA7QmlnSW50ZWdlci5wcm90b3R5cGUudG9TdHJpbmc9Ym5Ub1N0cmluZztCaWdJbnRlZ2VyLnByb3RvdHlwZS5uZWdhdGU9Ym5OZWdhdGU7QmlnSW50ZWdlci5wcm90b3R5cGUuYWJzPWJuQWJzO0JpZ0ludGVnZXIucHJvdG90eXBlLmNvbXBhcmVUbz1ibkNvbXBhcmVUbztCaWdJbnRlZ2VyLnByb3RvdHlwZS5iaXRMZW5ndGg9Ym5CaXRMZW5ndGg7QmlnSW50ZWdlci5wcm90b3R5cGUubW9kPWJuTW9kO0JpZ0ludGVnZXIucHJvdG90eXBlLm1vZFBvd0ludD1ibk1vZFBvd0ludDtCaWdJbnRlZ2VyLlpFUk89bmJ2KDApO0JpZ0ludGVnZXIuT05FPW5idigxKTtcbi8qISAoYykgVG9tIFd1IHwgaHR0cDovL3d3dy1jcy1zdHVkZW50cy5zdGFuZm9yZC5lZHUvfnRqdy9qc2JuL1xyXG4gKi9cclxuZnVuY3Rpb24gYm5DbG9uZSgpe3ZhciBhPW5iaSgpO3RoaXMuY29weVRvKGEpO3JldHVybiBhfWZ1bmN0aW9uIGJuSW50VmFsdWUoKXtpZih0aGlzLnM8MCl7aWYodGhpcy50PT0xKXtyZXR1cm4gdGhpc1swXS10aGlzLkRWfWVsc2V7aWYodGhpcy50PT0wKXtyZXR1cm4gLTF9fX1lbHNle2lmKHRoaXMudD09MSl7cmV0dXJuIHRoaXNbMF19ZWxzZXtpZih0aGlzLnQ9PTApe3JldHVybiAwfX19cmV0dXJuKCh0aGlzWzFdJigoMTw8KDMyLXRoaXMuREIpKS0xKSk8PHRoaXMuREIpfHRoaXNbMF19ZnVuY3Rpb24gYm5CeXRlVmFsdWUoKXtyZXR1cm4odGhpcy50PT0wKT90aGlzLnM6KHRoaXNbMF08PDI0KT4+MjR9ZnVuY3Rpb24gYm5TaG9ydFZhbHVlKCl7cmV0dXJuKHRoaXMudD09MCk/dGhpcy5zOih0aGlzWzBdPDwxNik+PjE2fWZ1bmN0aW9uIGJucENodW5rU2l6ZShhKXtyZXR1cm4gTWF0aC5mbG9vcihNYXRoLkxOMip0aGlzLkRCL01hdGgubG9nKGEpKX1mdW5jdGlvbiBiblNpZ051bSgpe2lmKHRoaXMuczwwKXtyZXR1cm4gLTF9ZWxzZXtpZih0aGlzLnQ8PTB8fCh0aGlzLnQ9PTEmJnRoaXNbMF08PTApKXtyZXR1cm4gMH1lbHNle3JldHVybiAxfX19ZnVuY3Rpb24gYm5wVG9SYWRpeChjKXtpZihjPT1udWxsKXtjPTEwfWlmKHRoaXMuc2lnbnVtKCk9PTB8fGM8Mnx8Yz4zNil7cmV0dXJuXCIwXCJ9dmFyIGY9dGhpcy5jaHVua1NpemUoYyk7dmFyIGU9TWF0aC5wb3coYyxmKTt2YXIgaT1uYnYoZSksaj1uYmkoKSxoPW5iaSgpLGc9XCJcIjt0aGlzLmRpdlJlbVRvKGksaixoKTt3aGlsZShqLnNpZ251bSgpPjApe2c9KGUraC5pbnRWYWx1ZSgpKS50b1N0cmluZyhjKS5zdWJzdHIoMSkrZztqLmRpdlJlbVRvKGksaixoKX1yZXR1cm4gaC5pbnRWYWx1ZSgpLnRvU3RyaW5nKGMpK2d9ZnVuY3Rpb24gYm5wRnJvbVJhZGl4KG0saCl7dGhpcy5mcm9tSW50KDApO2lmKGg9PW51bGwpe2g9MTB9dmFyIGY9dGhpcy5jaHVua1NpemUoaCk7dmFyIGc9TWF0aC5wb3coaCxmKSxlPWZhbHNlLGE9MCxsPTA7Zm9yKHZhciBjPTA7YzxtLmxlbmd0aDsrK2Mpe3ZhciBrPWludEF0KG0sYyk7aWYoazwwKXtpZihtLmNoYXJBdChjKT09XCItXCImJnRoaXMuc2lnbnVtKCk9PTApe2U9dHJ1ZX1jb250aW51ZX1sPWgqbCtrO2lmKCsrYT49Zil7dGhpcy5kTXVsdGlwbHkoZyk7dGhpcy5kQWRkT2Zmc2V0KGwsMCk7YT0wO2w9MH19aWYoYT4wKXt0aGlzLmRNdWx0aXBseShNYXRoLnBvdyhoLGEpKTt0aGlzLmRBZGRPZmZzZXQobCwwKX1pZihlKXtCaWdJbnRlZ2VyLlpFUk8uc3ViVG8odGhpcyx0aGlzKX19ZnVuY3Rpb24gYm5wRnJvbU51bWJlcihmLGUsaCl7aWYoXCJudW1iZXJcIj09dHlwZW9mIGUpe2lmKGY8Mil7dGhpcy5mcm9tSW50KDEpfWVsc2V7dGhpcy5mcm9tTnVtYmVyKGYsaCk7aWYoIXRoaXMudGVzdEJpdChmLTEpKXt0aGlzLmJpdHdpc2VUbyhCaWdJbnRlZ2VyLk9ORS5zaGlmdExlZnQoZi0xKSxvcF9vcix0aGlzKX1pZih0aGlzLmlzRXZlbigpKXt0aGlzLmRBZGRPZmZzZXQoMSwwKX13aGlsZSghdGhpcy5pc1Byb2JhYmxlUHJpbWUoZSkpe3RoaXMuZEFkZE9mZnNldCgyLDApO2lmKHRoaXMuYml0TGVuZ3RoKCk+Zil7dGhpcy5zdWJUbyhCaWdJbnRlZ2VyLk9ORS5zaGlmdExlZnQoZi0xKSx0aGlzKX19fX1lbHNle3ZhciBkPW5ldyBBcnJheSgpLGc9ZiY3O2QubGVuZ3RoPShmPj4zKSsxO2UubmV4dEJ5dGVzKGQpO2lmKGc+MCl7ZFswXSY9KCgxPDxnKS0xKX1lbHNle2RbMF09MH10aGlzLmZyb21TdHJpbmcoZCwyNTYpfX1mdW5jdGlvbiBiblRvQnl0ZUFycmF5KCl7dmFyIGI9dGhpcy50LGM9bmV3IEFycmF5KCk7Y1swXT10aGlzLnM7dmFyIGU9dGhpcy5EQi0oYip0aGlzLkRCKSU4LGYsYT0wO2lmKGItLT4wKXtpZihlPHRoaXMuREImJihmPXRoaXNbYl0+PmUpIT0odGhpcy5zJnRoaXMuRE0pPj5lKXtjW2ErK109ZnwodGhpcy5zPDwodGhpcy5EQi1lKSl9d2hpbGUoYj49MCl7aWYoZTw4KXtmPSh0aGlzW2JdJigoMTw8ZSktMSkpPDwoOC1lKTtmfD10aGlzWy0tYl0+PihlKz10aGlzLkRCLTgpfWVsc2V7Zj0odGhpc1tiXT4+KGUtPTgpKSYyNTU7aWYoZTw9MCl7ZSs9dGhpcy5EQjstLWJ9fWlmKChmJjEyOCkhPTApe2Z8PS0yNTZ9aWYoYT09MCYmKHRoaXMucyYxMjgpIT0oZiYxMjgpKXsrK2F9aWYoYT4wfHxmIT10aGlzLnMpe2NbYSsrXT1mfX19cmV0dXJuIGN9ZnVuY3Rpb24gYm5FcXVhbHMoYil7cmV0dXJuKHRoaXMuY29tcGFyZVRvKGIpPT0wKX1mdW5jdGlvbiBibk1pbihiKXtyZXR1cm4odGhpcy5jb21wYXJlVG8oYik8MCk/dGhpczpifWZ1bmN0aW9uIGJuTWF4KGIpe3JldHVybih0aGlzLmNvbXBhcmVUbyhiKT4wKT90aGlzOmJ9ZnVuY3Rpb24gYm5wQml0d2lzZVRvKGMsaCxlKXt2YXIgZCxnLGI9TWF0aC5taW4oYy50LHRoaXMudCk7Zm9yKGQ9MDtkPGI7KytkKXtlW2RdPWgodGhpc1tkXSxjW2RdKX1pZihjLnQ8dGhpcy50KXtnPWMucyZ0aGlzLkRNO2ZvcihkPWI7ZDx0aGlzLnQ7KytkKXtlW2RdPWgodGhpc1tkXSxnKX1lLnQ9dGhpcy50fWVsc2V7Zz10aGlzLnMmdGhpcy5ETTtmb3IoZD1iO2Q8Yy50OysrZCl7ZVtkXT1oKGcsY1tkXSl9ZS50PWMudH1lLnM9aCh0aGlzLnMsYy5zKTtlLmNsYW1wKCl9ZnVuY3Rpb24gb3BfYW5kKGEsYil7cmV0dXJuIGEmYn1mdW5jdGlvbiBibkFuZChiKXt2YXIgYz1uYmkoKTt0aGlzLmJpdHdpc2VUbyhiLG9wX2FuZCxjKTtyZXR1cm4gY31mdW5jdGlvbiBvcF9vcihhLGIpe3JldHVybiBhfGJ9ZnVuY3Rpb24gYm5PcihiKXt2YXIgYz1uYmkoKTt0aGlzLmJpdHdpc2VUbyhiLG9wX29yLGMpO3JldHVybiBjfWZ1bmN0aW9uIG9wX3hvcihhLGIpe3JldHVybiBhXmJ9ZnVuY3Rpb24gYm5Yb3IoYil7dmFyIGM9bmJpKCk7dGhpcy5iaXR3aXNlVG8oYixvcF94b3IsYyk7cmV0dXJuIGN9ZnVuY3Rpb24gb3BfYW5kbm90KGEsYil7cmV0dXJuIGEmfmJ9ZnVuY3Rpb24gYm5BbmROb3QoYil7dmFyIGM9bmJpKCk7dGhpcy5iaXR3aXNlVG8oYixvcF9hbmRub3QsYyk7cmV0dXJuIGN9ZnVuY3Rpb24gYm5Ob3QoKXt2YXIgYj1uYmkoKTtmb3IodmFyIGE9MDthPHRoaXMudDsrK2Epe2JbYV09dGhpcy5ETSZ+dGhpc1thXX1iLnQ9dGhpcy50O2Iucz1+dGhpcy5zO3JldHVybiBifWZ1bmN0aW9uIGJuU2hpZnRMZWZ0KGIpe3ZhciBhPW5iaSgpO2lmKGI8MCl7dGhpcy5yU2hpZnRUbygtYixhKX1lbHNle3RoaXMubFNoaWZ0VG8oYixhKX1yZXR1cm4gYX1mdW5jdGlvbiBiblNoaWZ0UmlnaHQoYil7dmFyIGE9bmJpKCk7aWYoYjwwKXt0aGlzLmxTaGlmdFRvKC1iLGEpfWVsc2V7dGhpcy5yU2hpZnRUbyhiLGEpfXJldHVybiBhfWZ1bmN0aW9uIGxiaXQoYSl7aWYoYT09MCl7cmV0dXJuIC0xfXZhciBiPTA7aWYoKGEmNjU1MzUpPT0wKXthPj49MTY7Yis9MTZ9aWYoKGEmMjU1KT09MCl7YT4+PTg7Yis9OH1pZigoYSYxNSk9PTApe2E+Pj00O2IrPTR9aWYoKGEmMyk9PTApe2E+Pj0yO2IrPTJ9aWYoKGEmMSk9PTApeysrYn1yZXR1cm4gYn1mdW5jdGlvbiBibkdldExvd2VzdFNldEJpdCgpe2Zvcih2YXIgYT0wO2E8dGhpcy50OysrYSl7aWYodGhpc1thXSE9MCl7cmV0dXJuIGEqdGhpcy5EQitsYml0KHRoaXNbYV0pfX1pZih0aGlzLnM8MCl7cmV0dXJuIHRoaXMudCp0aGlzLkRCfXJldHVybiAtMX1mdW5jdGlvbiBjYml0KGEpe3ZhciBiPTA7d2hpbGUoYSE9MCl7YSY9YS0xOysrYn1yZXR1cm4gYn1mdW5jdGlvbiBibkJpdENvdW50KCl7dmFyIGM9MCxhPXRoaXMucyZ0aGlzLkRNO2Zvcih2YXIgYj0wO2I8dGhpcy50OysrYil7Yys9Y2JpdCh0aGlzW2JdXmEpfXJldHVybiBjfWZ1bmN0aW9uIGJuVGVzdEJpdChiKXt2YXIgYT1NYXRoLmZsb29yKGIvdGhpcy5EQik7aWYoYT49dGhpcy50KXtyZXR1cm4odGhpcy5zIT0wKX1yZXR1cm4oKHRoaXNbYV0mKDE8PChiJXRoaXMuREIpKSkhPTApfWZ1bmN0aW9uIGJucENoYW5nZUJpdChjLGIpe3ZhciBhPUJpZ0ludGVnZXIuT05FLnNoaWZ0TGVmdChjKTt0aGlzLmJpdHdpc2VUbyhhLGIsYSk7cmV0dXJuIGF9ZnVuY3Rpb24gYm5TZXRCaXQoYSl7cmV0dXJuIHRoaXMuY2hhbmdlQml0KGEsb3Bfb3IpfWZ1bmN0aW9uIGJuQ2xlYXJCaXQoYSl7cmV0dXJuIHRoaXMuY2hhbmdlQml0KGEsb3BfYW5kbm90KX1mdW5jdGlvbiBibkZsaXBCaXQoYSl7cmV0dXJuIHRoaXMuY2hhbmdlQml0KGEsb3BfeG9yKX1mdW5jdGlvbiBibnBBZGRUbyhkLGYpe3ZhciBlPTAsZz0wLGI9TWF0aC5taW4oZC50LHRoaXMudCk7d2hpbGUoZTxiKXtnKz10aGlzW2VdK2RbZV07ZltlKytdPWcmdGhpcy5ETTtnPj49dGhpcy5EQn1pZihkLnQ8dGhpcy50KXtnKz1kLnM7d2hpbGUoZTx0aGlzLnQpe2crPXRoaXNbZV07ZltlKytdPWcmdGhpcy5ETTtnPj49dGhpcy5EQn1nKz10aGlzLnN9ZWxzZXtnKz10aGlzLnM7d2hpbGUoZTxkLnQpe2crPWRbZV07ZltlKytdPWcmdGhpcy5ETTtnPj49dGhpcy5EQn1nKz1kLnN9Zi5zPShnPDApPy0xOjA7aWYoZz4wKXtmW2UrK109Z31lbHNle2lmKGc8LTEpe2ZbZSsrXT10aGlzLkRWK2d9fWYudD1lO2YuY2xhbXAoKX1mdW5jdGlvbiBibkFkZChiKXt2YXIgYz1uYmkoKTt0aGlzLmFkZFRvKGIsYyk7cmV0dXJuIGN9ZnVuY3Rpb24gYm5TdWJ0cmFjdChiKXt2YXIgYz1uYmkoKTt0aGlzLnN1YlRvKGIsYyk7cmV0dXJuIGN9ZnVuY3Rpb24gYm5NdWx0aXBseShiKXt2YXIgYz1uYmkoKTt0aGlzLm11bHRpcGx5VG8oYixjKTtyZXR1cm4gY31mdW5jdGlvbiBiblNxdWFyZSgpe3ZhciBhPW5iaSgpO3RoaXMuc3F1YXJlVG8oYSk7cmV0dXJuIGF9ZnVuY3Rpb24gYm5EaXZpZGUoYil7dmFyIGM9bmJpKCk7dGhpcy5kaXZSZW1UbyhiLGMsbnVsbCk7cmV0dXJuIGN9ZnVuY3Rpb24gYm5SZW1haW5kZXIoYil7dmFyIGM9bmJpKCk7dGhpcy5kaXZSZW1UbyhiLG51bGwsYyk7cmV0dXJuIGN9ZnVuY3Rpb24gYm5EaXZpZGVBbmRSZW1haW5kZXIoYil7dmFyIGQ9bmJpKCksYz1uYmkoKTt0aGlzLmRpdlJlbVRvKGIsZCxjKTtyZXR1cm4gbmV3IEFycmF5KGQsYyl9ZnVuY3Rpb24gYm5wRE11bHRpcGx5KGEpe3RoaXNbdGhpcy50XT10aGlzLmFtKDAsYS0xLHRoaXMsMCwwLHRoaXMudCk7Kyt0aGlzLnQ7dGhpcy5jbGFtcCgpfWZ1bmN0aW9uIGJucERBZGRPZmZzZXQoYixhKXtpZihiPT0wKXtyZXR1cm59d2hpbGUodGhpcy50PD1hKXt0aGlzW3RoaXMudCsrXT0wfXRoaXNbYV0rPWI7d2hpbGUodGhpc1thXT49dGhpcy5EVil7dGhpc1thXS09dGhpcy5EVjtpZigrK2E+PXRoaXMudCl7dGhpc1t0aGlzLnQrK109MH0rK3RoaXNbYV19fWZ1bmN0aW9uIE51bGxFeHAoKXt9ZnVuY3Rpb24gbk5vcChhKXtyZXR1cm4gYX1mdW5jdGlvbiBuTXVsVG8oYSxjLGIpe2EubXVsdGlwbHlUbyhjLGIpfWZ1bmN0aW9uIG5TcXJUbyhhLGIpe2Euc3F1YXJlVG8oYil9TnVsbEV4cC5wcm90b3R5cGUuY29udmVydD1uTm9wO051bGxFeHAucHJvdG90eXBlLnJldmVydD1uTm9wO051bGxFeHAucHJvdG90eXBlLm11bFRvPW5NdWxUbztOdWxsRXhwLnByb3RvdHlwZS5zcXJUbz1uU3FyVG87ZnVuY3Rpb24gYm5Qb3coYSl7cmV0dXJuIHRoaXMuZXhwKGEsbmV3IE51bGxFeHAoKSl9ZnVuY3Rpb24gYm5wTXVsdGlwbHlMb3dlclRvKGIsZixlKXt2YXIgZD1NYXRoLm1pbih0aGlzLnQrYi50LGYpO2Uucz0wO2UudD1kO3doaWxlKGQ+MCl7ZVstLWRdPTB9dmFyIGM7Zm9yKGM9ZS50LXRoaXMudDtkPGM7KytkKXtlW2QrdGhpcy50XT10aGlzLmFtKDAsYltkXSxlLGQsMCx0aGlzLnQpfWZvcihjPU1hdGgubWluKGIudCxmKTtkPGM7KytkKXt0aGlzLmFtKDAsYltkXSxlLGQsMCxmLWQpfWUuY2xhbXAoKX1mdW5jdGlvbiBibnBNdWx0aXBseVVwcGVyVG8oYixlLGQpey0tZTt2YXIgYz1kLnQ9dGhpcy50K2IudC1lO2Qucz0wO3doaWxlKC0tYz49MCl7ZFtjXT0wfWZvcihjPU1hdGgubWF4KGUtdGhpcy50LDApO2M8Yi50OysrYyl7ZFt0aGlzLnQrYy1lXT10aGlzLmFtKGUtYyxiW2NdLGQsMCwwLHRoaXMudCtjLWUpfWQuY2xhbXAoKTtkLmRyU2hpZnRUbygxLGQpfWZ1bmN0aW9uIEJhcnJldHQoYSl7dGhpcy5yMj1uYmkoKTt0aGlzLnEzPW5iaSgpO0JpZ0ludGVnZXIuT05FLmRsU2hpZnRUbygyKmEudCx0aGlzLnIyKTt0aGlzLm11PXRoaXMucjIuZGl2aWRlKGEpO3RoaXMubT1hfWZ1bmN0aW9uIGJhcnJldHRDb252ZXJ0KGEpe2lmKGEuczwwfHxhLnQ+Mip0aGlzLm0udCl7cmV0dXJuIGEubW9kKHRoaXMubSl9ZWxzZXtpZihhLmNvbXBhcmVUbyh0aGlzLm0pPDApe3JldHVybiBhfWVsc2V7dmFyIGI9bmJpKCk7YS5jb3B5VG8oYik7dGhpcy5yZWR1Y2UoYik7cmV0dXJuIGJ9fX1mdW5jdGlvbiBiYXJyZXR0UmV2ZXJ0KGEpe3JldHVybiBhfWZ1bmN0aW9uIGJhcnJldHRSZWR1Y2UoYSl7YS5kclNoaWZ0VG8odGhpcy5tLnQtMSx0aGlzLnIyKTtpZihhLnQ+dGhpcy5tLnQrMSl7YS50PXRoaXMubS50KzE7YS5jbGFtcCgpfXRoaXMubXUubXVsdGlwbHlVcHBlclRvKHRoaXMucjIsdGhpcy5tLnQrMSx0aGlzLnEzKTt0aGlzLm0ubXVsdGlwbHlMb3dlclRvKHRoaXMucTMsdGhpcy5tLnQrMSx0aGlzLnIyKTt3aGlsZShhLmNvbXBhcmVUbyh0aGlzLnIyKTwwKXthLmRBZGRPZmZzZXQoMSx0aGlzLm0udCsxKX1hLnN1YlRvKHRoaXMucjIsYSk7d2hpbGUoYS5jb21wYXJlVG8odGhpcy5tKT49MCl7YS5zdWJUbyh0aGlzLm0sYSl9fWZ1bmN0aW9uIGJhcnJldHRTcXJUbyhhLGIpe2Euc3F1YXJlVG8oYik7dGhpcy5yZWR1Y2UoYil9ZnVuY3Rpb24gYmFycmV0dE11bFRvKGEsYyxiKXthLm11bHRpcGx5VG8oYyxiKTt0aGlzLnJlZHVjZShiKX1CYXJyZXR0LnByb3RvdHlwZS5jb252ZXJ0PWJhcnJldHRDb252ZXJ0O0JhcnJldHQucHJvdG90eXBlLnJldmVydD1iYXJyZXR0UmV2ZXJ0O0JhcnJldHQucHJvdG90eXBlLnJlZHVjZT1iYXJyZXR0UmVkdWNlO0JhcnJldHQucHJvdG90eXBlLm11bFRvPWJhcnJldHRNdWxUbztCYXJyZXR0LnByb3RvdHlwZS5zcXJUbz1iYXJyZXR0U3FyVG87ZnVuY3Rpb24gYm5Nb2RQb3cocSxmKXt2YXIgbz1xLmJpdExlbmd0aCgpLGgsYj1uYnYoMSksdjtpZihvPD0wKXtyZXR1cm4gYn1lbHNle2lmKG88MTgpe2g9MX1lbHNle2lmKG88NDgpe2g9M31lbHNle2lmKG88MTQ0KXtoPTR9ZWxzZXtpZihvPDc2OCl7aD01fWVsc2V7aD02fX19fX1pZihvPDgpe3Y9bmV3IENsYXNzaWMoZil9ZWxzZXtpZihmLmlzRXZlbigpKXt2PW5ldyBCYXJyZXR0KGYpfWVsc2V7dj1uZXcgTW9udGdvbWVyeShmKX19dmFyIHA9bmV3IEFycmF5KCksZD0zLHM9aC0xLGE9KDE8PGgpLTE7cFsxXT12LmNvbnZlcnQodGhpcyk7aWYoaD4xKXt2YXIgQT1uYmkoKTt2LnNxclRvKHBbMV0sQSk7d2hpbGUoZDw9YSl7cFtkXT1uYmkoKTt2Lm11bFRvKEEscFtkLTJdLHBbZF0pO2QrPTJ9fXZhciBsPXEudC0xLHgsdT10cnVlLGM9bmJpKCkseTtvPW5iaXRzKHFbbF0pLTE7d2hpbGUobD49MCl7aWYobz49cyl7eD0ocVtsXT4+KG8tcykpJmF9ZWxzZXt4PShxW2xdJigoMTw8KG8rMSkpLTEpKTw8KHMtbyk7aWYobD4wKXt4fD1xW2wtMV0+Pih0aGlzLkRCK28tcyl9fWQ9aDt3aGlsZSgoeCYxKT09MCl7eD4+PTE7LS1kfWlmKChvLT1kKTwwKXtvKz10aGlzLkRCOy0tbH1pZih1KXtwW3hdLmNvcHlUbyhiKTt1PWZhbHNlfWVsc2V7d2hpbGUoZD4xKXt2LnNxclRvKGIsYyk7di5zcXJUbyhjLGIpO2QtPTJ9aWYoZD4wKXt2LnNxclRvKGIsYyl9ZWxzZXt5PWI7Yj1jO2M9eX12Lm11bFRvKGMscFt4XSxiKX13aGlsZShsPj0wJiYocVtsXSYoMTw8bykpPT0wKXt2LnNxclRvKGIsYyk7eT1iO2I9YztjPXk7aWYoLS1vPDApe289dGhpcy5EQi0xOy0tbH19fXJldHVybiB2LnJldmVydChiKX1mdW5jdGlvbiBibkdDRChjKXt2YXIgYj0odGhpcy5zPDApP3RoaXMubmVnYXRlKCk6dGhpcy5jbG9uZSgpO3ZhciBoPShjLnM8MCk/Yy5uZWdhdGUoKTpjLmNsb25lKCk7aWYoYi5jb21wYXJlVG8oaCk8MCl7dmFyIGU9YjtiPWg7aD1lfXZhciBkPWIuZ2V0TG93ZXN0U2V0Qml0KCksZj1oLmdldExvd2VzdFNldEJpdCgpO2lmKGY8MCl7cmV0dXJuIGJ9aWYoZDxmKXtmPWR9aWYoZj4wKXtiLnJTaGlmdFRvKGYsYik7aC5yU2hpZnRUbyhmLGgpfXdoaWxlKGIuc2lnbnVtKCk+MCl7aWYoKGQ9Yi5nZXRMb3dlc3RTZXRCaXQoKSk+MCl7Yi5yU2hpZnRUbyhkLGIpfWlmKChkPWguZ2V0TG93ZXN0U2V0Qml0KCkpPjApe2guclNoaWZ0VG8oZCxoKX1pZihiLmNvbXBhcmVUbyhoKT49MCl7Yi5zdWJUbyhoLGIpO2IuclNoaWZ0VG8oMSxiKX1lbHNle2guc3ViVG8oYixoKTtoLnJTaGlmdFRvKDEsaCl9fWlmKGY+MCl7aC5sU2hpZnRUbyhmLGgpfXJldHVybiBofWZ1bmN0aW9uIGJucE1vZEludChlKXtpZihlPD0wKXtyZXR1cm4gMH12YXIgYz10aGlzLkRWJWUsYj0odGhpcy5zPDApP2UtMTowO2lmKHRoaXMudD4wKXtpZihjPT0wKXtiPXRoaXNbMF0lZX1lbHNle2Zvcih2YXIgYT10aGlzLnQtMTthPj0wOy0tYSl7Yj0oYypiK3RoaXNbYV0pJWV9fX1yZXR1cm4gYn1mdW5jdGlvbiBibk1vZEludmVyc2UoZil7dmFyIGo9Zi5pc0V2ZW4oKTtpZigodGhpcy5pc0V2ZW4oKSYmail8fGYuc2lnbnVtKCk9PTApe3JldHVybiBCaWdJbnRlZ2VyLlpFUk99dmFyIGk9Zi5jbG9uZSgpLGg9dGhpcy5jbG9uZSgpO3ZhciBnPW5idigxKSxlPW5idigwKSxsPW5idigwKSxrPW5idigxKTt3aGlsZShpLnNpZ251bSgpIT0wKXt3aGlsZShpLmlzRXZlbigpKXtpLnJTaGlmdFRvKDEsaSk7aWYoail7aWYoIWcuaXNFdmVuKCl8fCFlLmlzRXZlbigpKXtnLmFkZFRvKHRoaXMsZyk7ZS5zdWJUbyhmLGUpfWcuclNoaWZ0VG8oMSxnKX1lbHNle2lmKCFlLmlzRXZlbigpKXtlLnN1YlRvKGYsZSl9fWUuclNoaWZ0VG8oMSxlKX13aGlsZShoLmlzRXZlbigpKXtoLnJTaGlmdFRvKDEsaCk7aWYoail7aWYoIWwuaXNFdmVuKCl8fCFrLmlzRXZlbigpKXtsLmFkZFRvKHRoaXMsbCk7ay5zdWJUbyhmLGspfWwuclNoaWZ0VG8oMSxsKX1lbHNle2lmKCFrLmlzRXZlbigpKXtrLnN1YlRvKGYsayl9fWsuclNoaWZ0VG8oMSxrKX1pZihpLmNvbXBhcmVUbyhoKT49MCl7aS5zdWJUbyhoLGkpO2lmKGope2cuc3ViVG8obCxnKX1lLnN1YlRvKGssZSl9ZWxzZXtoLnN1YlRvKGksaCk7aWYoail7bC5zdWJUbyhnLGwpfWsuc3ViVG8oZSxrKX19aWYoaC5jb21wYXJlVG8oQmlnSW50ZWdlci5PTkUpIT0wKXtyZXR1cm4gQmlnSW50ZWdlci5aRVJPfWlmKGsuY29tcGFyZVRvKGYpPj0wKXtyZXR1cm4gay5zdWJ0cmFjdChmKX1pZihrLnNpZ251bSgpPDApe2suYWRkVG8oZixrKX1lbHNle3JldHVybiBrfWlmKGsuc2lnbnVtKCk8MCl7cmV0dXJuIGsuYWRkKGYpfWVsc2V7cmV0dXJuIGt9fXZhciBsb3dwcmltZXM9WzIsMyw1LDcsMTEsMTMsMTcsMTksMjMsMjksMzEsMzcsNDEsNDMsNDcsNTMsNTksNjEsNjcsNzEsNzMsNzksODMsODksOTcsMTAxLDEwMywxMDcsMTA5LDExMywxMjcsMTMxLDEzNywxMzksMTQ5LDE1MSwxNTcsMTYzLDE2NywxNzMsMTc5LDE4MSwxOTEsMTkzLDE5NywxOTksMjExLDIyMywyMjcsMjI5LDIzMywyMzksMjQxLDI1MSwyNTcsMjYzLDI2OSwyNzEsMjc3LDI4MSwyODMsMjkzLDMwNywzMTEsMzEzLDMxNywzMzEsMzM3LDM0NywzNDksMzUzLDM1OSwzNjcsMzczLDM3OSwzODMsMzg5LDM5Nyw0MDEsNDA5LDQxOSw0MjEsNDMxLDQzMyw0MzksNDQzLDQ0OSw0NTcsNDYxLDQ2Myw0NjcsNDc5LDQ4Nyw0OTEsNDk5LDUwMyw1MDksNTIxLDUyMyw1NDEsNTQ3LDU1Nyw1NjMsNTY5LDU3MSw1NzcsNTg3LDU5Myw1OTksNjAxLDYwNyw2MTMsNjE3LDYxOSw2MzEsNjQxLDY0Myw2NDcsNjUzLDY1OSw2NjEsNjczLDY3Nyw2ODMsNjkxLDcwMSw3MDksNzE5LDcyNyw3MzMsNzM5LDc0Myw3NTEsNzU3LDc2MSw3NjksNzczLDc4Nyw3OTcsODA5LDgxMSw4MjEsODIzLDgyNyw4MjksODM5LDg1Myw4NTcsODU5LDg2Myw4NzcsODgxLDg4Myw4ODcsOTA3LDkxMSw5MTksOTI5LDkzNyw5NDEsOTQ3LDk1Myw5NjcsOTcxLDk3Nyw5ODMsOTkxLDk5N107dmFyIGxwbGltPSgxPDwyNikvbG93cHJpbWVzW2xvd3ByaW1lcy5sZW5ndGgtMV07ZnVuY3Rpb24gYm5Jc1Byb2JhYmxlUHJpbWUoZSl7dmFyIGQsYj10aGlzLmFicygpO2lmKGIudD09MSYmYlswXTw9bG93cHJpbWVzW2xvd3ByaW1lcy5sZW5ndGgtMV0pe2ZvcihkPTA7ZDxsb3dwcmltZXMubGVuZ3RoOysrZCl7aWYoYlswXT09bG93cHJpbWVzW2RdKXtyZXR1cm4gdHJ1ZX19cmV0dXJuIGZhbHNlfWlmKGIuaXNFdmVuKCkpe3JldHVybiBmYWxzZX1kPTE7d2hpbGUoZDxsb3dwcmltZXMubGVuZ3RoKXt2YXIgYT1sb3dwcmltZXNbZF0sYz1kKzE7d2hpbGUoYzxsb3dwcmltZXMubGVuZ3RoJiZhPGxwbGltKXthKj1sb3dwcmltZXNbYysrXX1hPWIubW9kSW50KGEpO3doaWxlKGQ8Yyl7aWYoYSVsb3dwcmltZXNbZCsrXT09MCl7cmV0dXJuIGZhbHNlfX19cmV0dXJuIGIubWlsbGVyUmFiaW4oZSl9ZnVuY3Rpb24gYm5wTWlsbGVyUmFiaW4oZil7dmFyIGc9dGhpcy5zdWJ0cmFjdChCaWdJbnRlZ2VyLk9ORSk7dmFyIGM9Zy5nZXRMb3dlc3RTZXRCaXQoKTtpZihjPD0wKXtyZXR1cm4gZmFsc2V9dmFyIGg9Zy5zaGlmdFJpZ2h0KGMpO2Y9KGYrMSk+PjE7aWYoZj5sb3dwcmltZXMubGVuZ3RoKXtmPWxvd3ByaW1lcy5sZW5ndGh9dmFyIGI9bmJpKCk7Zm9yKHZhciBlPTA7ZTxmOysrZSl7Yi5mcm9tSW50KGxvd3ByaW1lc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqbG93cHJpbWVzLmxlbmd0aCldKTt2YXIgbD1iLm1vZFBvdyhoLHRoaXMpO2lmKGwuY29tcGFyZVRvKEJpZ0ludGVnZXIuT05FKSE9MCYmbC5jb21wYXJlVG8oZykhPTApe3ZhciBkPTE7d2hpbGUoZCsrPGMmJmwuY29tcGFyZVRvKGcpIT0wKXtsPWwubW9kUG93SW50KDIsdGhpcyk7aWYobC5jb21wYXJlVG8oQmlnSW50ZWdlci5PTkUpPT0wKXtyZXR1cm4gZmFsc2V9fWlmKGwuY29tcGFyZVRvKGcpIT0wKXtyZXR1cm4gZmFsc2V9fX1yZXR1cm4gdHJ1ZX1CaWdJbnRlZ2VyLnByb3RvdHlwZS5jaHVua1NpemU9Ym5wQ2h1bmtTaXplO0JpZ0ludGVnZXIucHJvdG90eXBlLnRvUmFkaXg9Ym5wVG9SYWRpeDtCaWdJbnRlZ2VyLnByb3RvdHlwZS5mcm9tUmFkaXg9Ym5wRnJvbVJhZGl4O0JpZ0ludGVnZXIucHJvdG90eXBlLmZyb21OdW1iZXI9Ym5wRnJvbU51bWJlcjtCaWdJbnRlZ2VyLnByb3RvdHlwZS5iaXR3aXNlVG89Ym5wQml0d2lzZVRvO0JpZ0ludGVnZXIucHJvdG90eXBlLmNoYW5nZUJpdD1ibnBDaGFuZ2VCaXQ7QmlnSW50ZWdlci5wcm90b3R5cGUuYWRkVG89Ym5wQWRkVG87QmlnSW50ZWdlci5wcm90b3R5cGUuZE11bHRpcGx5PWJucERNdWx0aXBseTtCaWdJbnRlZ2VyLnByb3RvdHlwZS5kQWRkT2Zmc2V0PWJucERBZGRPZmZzZXQ7QmlnSW50ZWdlci5wcm90b3R5cGUubXVsdGlwbHlMb3dlclRvPWJucE11bHRpcGx5TG93ZXJUbztCaWdJbnRlZ2VyLnByb3RvdHlwZS5tdWx0aXBseVVwcGVyVG89Ym5wTXVsdGlwbHlVcHBlclRvO0JpZ0ludGVnZXIucHJvdG90eXBlLm1vZEludD1ibnBNb2RJbnQ7QmlnSW50ZWdlci5wcm90b3R5cGUubWlsbGVyUmFiaW49Ym5wTWlsbGVyUmFiaW47QmlnSW50ZWdlci5wcm90b3R5cGUuY2xvbmU9Ym5DbG9uZTtCaWdJbnRlZ2VyLnByb3RvdHlwZS5pbnRWYWx1ZT1ibkludFZhbHVlO0JpZ0ludGVnZXIucHJvdG90eXBlLmJ5dGVWYWx1ZT1ibkJ5dGVWYWx1ZTtCaWdJbnRlZ2VyLnByb3RvdHlwZS5zaG9ydFZhbHVlPWJuU2hvcnRWYWx1ZTtCaWdJbnRlZ2VyLnByb3RvdHlwZS5zaWdudW09Ym5TaWdOdW07QmlnSW50ZWdlci5wcm90b3R5cGUudG9CeXRlQXJyYXk9Ym5Ub0J5dGVBcnJheTtCaWdJbnRlZ2VyLnByb3RvdHlwZS5lcXVhbHM9Ym5FcXVhbHM7QmlnSW50ZWdlci5wcm90b3R5cGUubWluPWJuTWluO0JpZ0ludGVnZXIucHJvdG90eXBlLm1heD1ibk1heDtCaWdJbnRlZ2VyLnByb3RvdHlwZS5hbmQ9Ym5BbmQ7QmlnSW50ZWdlci5wcm90b3R5cGUub3I9Ym5PcjtCaWdJbnRlZ2VyLnByb3RvdHlwZS54b3I9Ym5Yb3I7QmlnSW50ZWdlci5wcm90b3R5cGUuYW5kTm90PWJuQW5kTm90O0JpZ0ludGVnZXIucHJvdG90eXBlLm5vdD1ibk5vdDtCaWdJbnRlZ2VyLnByb3RvdHlwZS5zaGlmdExlZnQ9Ym5TaGlmdExlZnQ7QmlnSW50ZWdlci5wcm90b3R5cGUuc2hpZnRSaWdodD1iblNoaWZ0UmlnaHQ7QmlnSW50ZWdlci5wcm90b3R5cGUuZ2V0TG93ZXN0U2V0Qml0PWJuR2V0TG93ZXN0U2V0Qml0O0JpZ0ludGVnZXIucHJvdG90eXBlLmJpdENvdW50PWJuQml0Q291bnQ7QmlnSW50ZWdlci5wcm90b3R5cGUudGVzdEJpdD1iblRlc3RCaXQ7QmlnSW50ZWdlci5wcm90b3R5cGUuc2V0Qml0PWJuU2V0Qml0O0JpZ0ludGVnZXIucHJvdG90eXBlLmNsZWFyQml0PWJuQ2xlYXJCaXQ7QmlnSW50ZWdlci5wcm90b3R5cGUuZmxpcEJpdD1ibkZsaXBCaXQ7QmlnSW50ZWdlci5wcm90b3R5cGUuYWRkPWJuQWRkO0JpZ0ludGVnZXIucHJvdG90eXBlLnN1YnRyYWN0PWJuU3VidHJhY3Q7QmlnSW50ZWdlci5wcm90b3R5cGUubXVsdGlwbHk9Ym5NdWx0aXBseTtCaWdJbnRlZ2VyLnByb3RvdHlwZS5kaXZpZGU9Ym5EaXZpZGU7QmlnSW50ZWdlci5wcm90b3R5cGUucmVtYWluZGVyPWJuUmVtYWluZGVyO0JpZ0ludGVnZXIucHJvdG90eXBlLmRpdmlkZUFuZFJlbWFpbmRlcj1ibkRpdmlkZUFuZFJlbWFpbmRlcjtCaWdJbnRlZ2VyLnByb3RvdHlwZS5tb2RQb3c9Ym5Nb2RQb3c7QmlnSW50ZWdlci5wcm90b3R5cGUubW9kSW52ZXJzZT1ibk1vZEludmVyc2U7QmlnSW50ZWdlci5wcm90b3R5cGUucG93PWJuUG93O0JpZ0ludGVnZXIucHJvdG90eXBlLmdjZD1ibkdDRDtCaWdJbnRlZ2VyLnByb3RvdHlwZS5pc1Byb2JhYmxlUHJpbWU9Ym5Jc1Byb2JhYmxlUHJpbWU7QmlnSW50ZWdlci5wcm90b3R5cGUuc3F1YXJlPWJuU3F1YXJlO1xuLyohIChjKSBUb20gV3UgfCBodHRwOi8vd3d3LWNzLXN0dWRlbnRzLnN0YW5mb3JkLmVkdS9+dGp3L2pzYm4vXHJcbiAqL1xyXG5mdW5jdGlvbiBBcmNmb3VyKCl7dGhpcy5pPTA7dGhpcy5qPTA7dGhpcy5TPW5ldyBBcnJheSgpfWZ1bmN0aW9uIEFSQzRpbml0KGQpe3ZhciBjLGEsYjtmb3IoYz0wO2M8MjU2OysrYyl7dGhpcy5TW2NdPWN9YT0wO2ZvcihjPTA7YzwyNTY7KytjKXthPShhK3RoaXMuU1tjXStkW2MlZC5sZW5ndGhdKSYyNTU7Yj10aGlzLlNbY107dGhpcy5TW2NdPXRoaXMuU1thXTt0aGlzLlNbYV09Yn10aGlzLmk9MDt0aGlzLmo9MH1mdW5jdGlvbiBBUkM0bmV4dCgpe3ZhciBhO3RoaXMuaT0odGhpcy5pKzEpJjI1NTt0aGlzLmo9KHRoaXMuait0aGlzLlNbdGhpcy5pXSkmMjU1O2E9dGhpcy5TW3RoaXMuaV07dGhpcy5TW3RoaXMuaV09dGhpcy5TW3RoaXMual07dGhpcy5TW3RoaXMual09YTtyZXR1cm4gdGhpcy5TWyhhK3RoaXMuU1t0aGlzLmldKSYyNTVdfUFyY2ZvdXIucHJvdG90eXBlLmluaXQ9QVJDNGluaXQ7QXJjZm91ci5wcm90b3R5cGUubmV4dD1BUkM0bmV4dDtmdW5jdGlvbiBwcm5nX25ld3N0YXRlKCl7cmV0dXJuIG5ldyBBcmNmb3VyKCl9dmFyIHJuZ19wc2l6ZT0yNTY7XG4vKiEgKGMpIFRvbSBXdSB8IGh0dHA6Ly93d3ctY3Mtc3R1ZGVudHMuc3RhbmZvcmQuZWR1L350ancvanNibi9cclxuICovXHJcbnZhciBybmdfc3RhdGU7dmFyIHJuZ19wb29sO3ZhciBybmdfcHB0cjtmdW5jdGlvbiBybmdfc2VlZF9pbnQoYSl7cm5nX3Bvb2xbcm5nX3BwdHIrK11ePWEmMjU1O3JuZ19wb29sW3JuZ19wcHRyKytdXj0oYT4+OCkmMjU1O3JuZ19wb29sW3JuZ19wcHRyKytdXj0oYT4+MTYpJjI1NTtybmdfcG9vbFtybmdfcHB0cisrXV49KGE+PjI0KSYyNTU7aWYocm5nX3BwdHI+PXJuZ19wc2l6ZSl7cm5nX3BwdHItPXJuZ19wc2l6ZX19ZnVuY3Rpb24gcm5nX3NlZWRfdGltZSgpe3JuZ19zZWVkX2ludChuZXcgRGF0ZSgpLmdldFRpbWUoKSl9aWYocm5nX3Bvb2w9PW51bGwpe3JuZ19wb29sPW5ldyBBcnJheSgpO3JuZ19wcHRyPTA7dmFyIHQ7aWYod2luZG93IT09dW5kZWZpbmVkJiYod2luZG93LmNyeXB0byE9PXVuZGVmaW5lZHx8d2luZG93Lm1zQ3J5cHRvIT09dW5kZWZpbmVkKSl7dmFyIGNyeXB0bz13aW5kb3cuY3J5cHRvfHx3aW5kb3cubXNDcnlwdG87aWYoY3J5cHRvLmdldFJhbmRvbVZhbHVlcyl7dmFyIHVhPW5ldyBVaW50OEFycmF5KDMyKTtjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKHVhKTtmb3IodD0wO3Q8MzI7Kyt0KXtybmdfcG9vbFtybmdfcHB0cisrXT11YVt0XX19ZWxzZXtpZihuYXZpZ2F0b3IuYXBwTmFtZT09XCJOZXRzY2FwZVwiJiZuYXZpZ2F0b3IuYXBwVmVyc2lvbjxcIjVcIil7dmFyIHo9d2luZG93LmNyeXB0by5yYW5kb20oMzIpO2Zvcih0PTA7dDx6Lmxlbmd0aDsrK3Qpe3JuZ19wb29sW3JuZ19wcHRyKytdPXouY2hhckNvZGVBdCh0KSYyNTV9fX19d2hpbGUocm5nX3BwdHI8cm5nX3BzaXplKXt0PU1hdGguZmxvb3IoNjU1MzYqTWF0aC5yYW5kb20oKSk7cm5nX3Bvb2xbcm5nX3BwdHIrK109dD4+Pjg7cm5nX3Bvb2xbcm5nX3BwdHIrK109dCYyNTV9cm5nX3BwdHI9MDtybmdfc2VlZF90aW1lKCl9ZnVuY3Rpb24gcm5nX2dldF9ieXRlKCl7aWYocm5nX3N0YXRlPT1udWxsKXtybmdfc2VlZF90aW1lKCk7cm5nX3N0YXRlPXBybmdfbmV3c3RhdGUoKTtybmdfc3RhdGUuaW5pdChybmdfcG9vbCk7Zm9yKHJuZ19wcHRyPTA7cm5nX3BwdHI8cm5nX3Bvb2wubGVuZ3RoOysrcm5nX3BwdHIpe3JuZ19wb29sW3JuZ19wcHRyXT0wfXJuZ19wcHRyPTB9cmV0dXJuIHJuZ19zdGF0ZS5uZXh0KCl9ZnVuY3Rpb24gcm5nX2dldF9ieXRlcyhiKXt2YXIgYTtmb3IoYT0wO2E8Yi5sZW5ndGg7KythKXtiW2FdPXJuZ19nZXRfYnl0ZSgpfX1mdW5jdGlvbiBTZWN1cmVSYW5kb20oKXt9U2VjdXJlUmFuZG9tLnByb3RvdHlwZS5uZXh0Qnl0ZXM9cm5nX2dldF9ieXRlcztcbi8qISAoYykgVG9tIFd1IHwgaHR0cDovL3d3dy1jcy1zdHVkZW50cy5zdGFuZm9yZC5lZHUvfnRqdy9qc2JuL1xyXG4gKi9cclxuZnVuY3Rpb24gcGFyc2VCaWdJbnQoYixhKXtyZXR1cm4gbmV3IEJpZ0ludGVnZXIoYixhKX1mdW5jdGlvbiBsaW5lYnJrKGMsZCl7dmFyIGE9XCJcIjt2YXIgYj0wO3doaWxlKGIrZDxjLmxlbmd0aCl7YSs9Yy5zdWJzdHJpbmcoYixiK2QpK1wiXFxuXCI7Yis9ZH1yZXR1cm4gYStjLnN1YnN0cmluZyhiLGMubGVuZ3RoKX1mdW5jdGlvbiBieXRlMkhleChhKXtpZihhPDE2KXtyZXR1cm5cIjBcIithLnRvU3RyaW5nKDE2KX1lbHNle3JldHVybiBhLnRvU3RyaW5nKDE2KX19ZnVuY3Rpb24gcGtjczFwYWQyKGUsaCl7aWYoaDxlLmxlbmd0aCsxMSl7dGhyb3dcIk1lc3NhZ2UgdG9vIGxvbmcgZm9yIFJTQVwiO3JldHVybiBudWxsfXZhciBnPW5ldyBBcnJheSgpO3ZhciBkPWUubGVuZ3RoLTE7d2hpbGUoZD49MCYmaD4wKXt2YXIgZj1lLmNoYXJDb2RlQXQoZC0tKTtpZihmPDEyOCl7Z1stLWhdPWZ9ZWxzZXtpZigoZj4xMjcpJiYoZjwyMDQ4KSl7Z1stLWhdPShmJjYzKXwxMjg7Z1stLWhdPShmPj42KXwxOTJ9ZWxzZXtnWy0taF09KGYmNjMpfDEyODtnWy0taF09KChmPj42KSY2Myl8MTI4O2dbLS1oXT0oZj4+MTIpfDIyNH19fWdbLS1oXT0wO3ZhciBiPW5ldyBTZWN1cmVSYW5kb20oKTt2YXIgYT1uZXcgQXJyYXkoKTt3aGlsZShoPjIpe2FbMF09MDt3aGlsZShhWzBdPT0wKXtiLm5leHRCeXRlcyhhKX1nWy0taF09YVswXX1nWy0taF09MjtnWy0taF09MDtyZXR1cm4gbmV3IEJpZ0ludGVnZXIoZyl9ZnVuY3Rpb24gb2FlcF9tZ2YxX2FycihjLGEsZSl7dmFyIGI9XCJcIixkPTA7d2hpbGUoYi5sZW5ndGg8YSl7Yis9ZShTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyxjLmNvbmNhdChbKGQmNDI3ODE5MDA4MCk+PjI0LChkJjE2NzExNjgwKT4+MTYsKGQmNjUyODApPj44LGQmMjU1XSkpKTtkKz0xfXJldHVybiBifWZ1bmN0aW9uIG9hZXBfcGFkKHEsYSxmLGwpe3ZhciBjPUtKVVIuY3J5cHRvLk1lc3NhZ2VEaWdlc3Q7dmFyIG89S0pVUi5jcnlwdG8uVXRpbDt2YXIgYj1udWxsO2lmKCFmKXtmPVwic2hhMVwifWlmKHR5cGVvZiBmPT09XCJzdHJpbmdcIil7Yj1jLmdldENhbm9uaWNhbEFsZ05hbWUoZik7bD1jLmdldEhhc2hMZW5ndGgoYik7Zj1mdW5jdGlvbihpKXtyZXR1cm4gaGV4dG9yc3RyKG8uaGFzaEhleChyc3RydG9oZXgoaSksYikpfX1pZihxLmxlbmd0aCsyKmwrMj5hKXt0aHJvd1wiTWVzc2FnZSB0b28gbG9uZyBmb3IgUlNBXCJ9dmFyIGs9XCJcIixlO2ZvcihlPTA7ZTxhLXEubGVuZ3RoLTIqbC0yO2UrPTEpe2srPVwiXFx4MDBcIn12YXIgaD1mKFwiXCIpK2srXCJcXHgwMVwiK3E7dmFyIGc9bmV3IEFycmF5KGwpO25ldyBTZWN1cmVSYW5kb20oKS5uZXh0Qnl0ZXMoZyk7dmFyIGo9b2FlcF9tZ2YxX2FycihnLGgubGVuZ3RoLGYpO3ZhciBwPVtdO2ZvcihlPTA7ZTxoLmxlbmd0aDtlKz0xKXtwW2VdPWguY2hhckNvZGVBdChlKV5qLmNoYXJDb2RlQXQoZSl9dmFyIG09b2FlcF9tZ2YxX2FycihwLGcubGVuZ3RoLGYpO3ZhciBkPVswXTtmb3IoZT0wO2U8Zy5sZW5ndGg7ZSs9MSl7ZFtlKzFdPWdbZV1ebS5jaGFyQ29kZUF0KGUpfXJldHVybiBuZXcgQmlnSW50ZWdlcihkLmNvbmNhdChwKSl9ZnVuY3Rpb24gUlNBS2V5KCl7dGhpcy5uPW51bGw7dGhpcy5lPTA7dGhpcy5kPW51bGw7dGhpcy5wPW51bGw7dGhpcy5xPW51bGw7dGhpcy5kbXAxPW51bGw7dGhpcy5kbXExPW51bGw7dGhpcy5jb2VmZj1udWxsfWZ1bmN0aW9uIFJTQVNldFB1YmxpYyhiLGEpe3RoaXMuaXNQdWJsaWM9dHJ1ZTt0aGlzLmlzUHJpdmF0ZT1mYWxzZTtpZih0eXBlb2YgYiE9PVwic3RyaW5nXCIpe3RoaXMubj1iO3RoaXMuZT1hfWVsc2V7aWYoYiE9bnVsbCYmYSE9bnVsbCYmYi5sZW5ndGg+MCYmYS5sZW5ndGg+MCl7dGhpcy5uPXBhcnNlQmlnSW50KGIsMTYpO3RoaXMuZT1wYXJzZUludChhLDE2KX1lbHNle3Rocm93XCJJbnZhbGlkIFJTQSBwdWJsaWMga2V5XCJ9fX1mdW5jdGlvbiBSU0FEb1B1YmxpYyhhKXtyZXR1cm4gYS5tb2RQb3dJbnQodGhpcy5lLHRoaXMubil9ZnVuY3Rpb24gUlNBRW5jcnlwdChkKXt2YXIgYT1wa2NzMXBhZDIoZCwodGhpcy5uLmJpdExlbmd0aCgpKzcpPj4zKTtpZihhPT1udWxsKXtyZXR1cm4gbnVsbH12YXIgZT10aGlzLmRvUHVibGljKGEpO2lmKGU9PW51bGwpe3JldHVybiBudWxsfXZhciBiPWUudG9TdHJpbmcoMTYpO2lmKChiLmxlbmd0aCYxKT09MCl7cmV0dXJuIGJ9ZWxzZXtyZXR1cm5cIjBcIitifX1mdW5jdGlvbiBSU0FFbmNyeXB0T0FFUChmLGUsYil7dmFyIGE9b2FlcF9wYWQoZiwodGhpcy5uLmJpdExlbmd0aCgpKzcpPj4zLGUsYik7aWYoYT09bnVsbCl7cmV0dXJuIG51bGx9dmFyIGc9dGhpcy5kb1B1YmxpYyhhKTtpZihnPT1udWxsKXtyZXR1cm4gbnVsbH12YXIgZD1nLnRvU3RyaW5nKDE2KTtpZigoZC5sZW5ndGgmMSk9PTApe3JldHVybiBkfWVsc2V7cmV0dXJuXCIwXCIrZH19UlNBS2V5LnByb3RvdHlwZS5kb1B1YmxpYz1SU0FEb1B1YmxpYztSU0FLZXkucHJvdG90eXBlLnNldFB1YmxpYz1SU0FTZXRQdWJsaWM7UlNBS2V5LnByb3RvdHlwZS5lbmNyeXB0PVJTQUVuY3J5cHQ7UlNBS2V5LnByb3RvdHlwZS5lbmNyeXB0T0FFUD1SU0FFbmNyeXB0T0FFUDtSU0FLZXkucHJvdG90eXBlLnR5cGU9XCJSU0FcIjtcbi8qISAoYykgVG9tIFd1IHwgaHR0cDovL3d3dy1jcy1zdHVkZW50cy5zdGFuZm9yZC5lZHUvfnRqdy9qc2JuL1xyXG4gKi9cclxuZnVuY3Rpb24gRUNGaWVsZEVsZW1lbnRGcChiLGEpe3RoaXMueD1hO3RoaXMucT1ifWZ1bmN0aW9uIGZlRnBFcXVhbHMoYSl7aWYoYT09dGhpcyl7cmV0dXJuIHRydWV9cmV0dXJuKHRoaXMucS5lcXVhbHMoYS5xKSYmdGhpcy54LmVxdWFscyhhLngpKX1mdW5jdGlvbiBmZUZwVG9CaWdJbnRlZ2VyKCl7cmV0dXJuIHRoaXMueH1mdW5jdGlvbiBmZUZwTmVnYXRlKCl7cmV0dXJuIG5ldyBFQ0ZpZWxkRWxlbWVudEZwKHRoaXMucSx0aGlzLngubmVnYXRlKCkubW9kKHRoaXMucSkpfWZ1bmN0aW9uIGZlRnBBZGQoYSl7cmV0dXJuIG5ldyBFQ0ZpZWxkRWxlbWVudEZwKHRoaXMucSx0aGlzLnguYWRkKGEudG9CaWdJbnRlZ2VyKCkpLm1vZCh0aGlzLnEpKX1mdW5jdGlvbiBmZUZwU3VidHJhY3QoYSl7cmV0dXJuIG5ldyBFQ0ZpZWxkRWxlbWVudEZwKHRoaXMucSx0aGlzLnguc3VidHJhY3QoYS50b0JpZ0ludGVnZXIoKSkubW9kKHRoaXMucSkpfWZ1bmN0aW9uIGZlRnBNdWx0aXBseShhKXtyZXR1cm4gbmV3IEVDRmllbGRFbGVtZW50RnAodGhpcy5xLHRoaXMueC5tdWx0aXBseShhLnRvQmlnSW50ZWdlcigpKS5tb2QodGhpcy5xKSl9ZnVuY3Rpb24gZmVGcFNxdWFyZSgpe3JldHVybiBuZXcgRUNGaWVsZEVsZW1lbnRGcCh0aGlzLnEsdGhpcy54LnNxdWFyZSgpLm1vZCh0aGlzLnEpKX1mdW5jdGlvbiBmZUZwRGl2aWRlKGEpe3JldHVybiBuZXcgRUNGaWVsZEVsZW1lbnRGcCh0aGlzLnEsdGhpcy54Lm11bHRpcGx5KGEudG9CaWdJbnRlZ2VyKCkubW9kSW52ZXJzZSh0aGlzLnEpKS5tb2QodGhpcy5xKSl9RUNGaWVsZEVsZW1lbnRGcC5wcm90b3R5cGUuZXF1YWxzPWZlRnBFcXVhbHM7RUNGaWVsZEVsZW1lbnRGcC5wcm90b3R5cGUudG9CaWdJbnRlZ2VyPWZlRnBUb0JpZ0ludGVnZXI7RUNGaWVsZEVsZW1lbnRGcC5wcm90b3R5cGUubmVnYXRlPWZlRnBOZWdhdGU7RUNGaWVsZEVsZW1lbnRGcC5wcm90b3R5cGUuYWRkPWZlRnBBZGQ7RUNGaWVsZEVsZW1lbnRGcC5wcm90b3R5cGUuc3VidHJhY3Q9ZmVGcFN1YnRyYWN0O0VDRmllbGRFbGVtZW50RnAucHJvdG90eXBlLm11bHRpcGx5PWZlRnBNdWx0aXBseTtFQ0ZpZWxkRWxlbWVudEZwLnByb3RvdHlwZS5zcXVhcmU9ZmVGcFNxdWFyZTtFQ0ZpZWxkRWxlbWVudEZwLnByb3RvdHlwZS5kaXZpZGU9ZmVGcERpdmlkZTtmdW5jdGlvbiBFQ1BvaW50RnAoYyxhLGQsYil7dGhpcy5jdXJ2ZT1jO3RoaXMueD1hO3RoaXMueT1kO2lmKGI9PW51bGwpe3RoaXMuej1CaWdJbnRlZ2VyLk9ORX1lbHNle3RoaXMuej1ifXRoaXMuemludj1udWxsfWZ1bmN0aW9uIHBvaW50RnBHZXRYKCl7aWYodGhpcy56aW52PT1udWxsKXt0aGlzLnppbnY9dGhpcy56Lm1vZEludmVyc2UodGhpcy5jdXJ2ZS5xKX1yZXR1cm4gdGhpcy5jdXJ2ZS5mcm9tQmlnSW50ZWdlcih0aGlzLngudG9CaWdJbnRlZ2VyKCkubXVsdGlwbHkodGhpcy56aW52KS5tb2QodGhpcy5jdXJ2ZS5xKSl9ZnVuY3Rpb24gcG9pbnRGcEdldFkoKXtpZih0aGlzLnppbnY9PW51bGwpe3RoaXMuemludj10aGlzLnoubW9kSW52ZXJzZSh0aGlzLmN1cnZlLnEpfXJldHVybiB0aGlzLmN1cnZlLmZyb21CaWdJbnRlZ2VyKHRoaXMueS50b0JpZ0ludGVnZXIoKS5tdWx0aXBseSh0aGlzLnppbnYpLm1vZCh0aGlzLmN1cnZlLnEpKX1mdW5jdGlvbiBwb2ludEZwRXF1YWxzKGEpe2lmKGE9PXRoaXMpe3JldHVybiB0cnVlfWlmKHRoaXMuaXNJbmZpbml0eSgpKXtyZXR1cm4gYS5pc0luZmluaXR5KCl9aWYoYS5pc0luZmluaXR5KCkpe3JldHVybiB0aGlzLmlzSW5maW5pdHkoKX12YXIgYyxiO2M9YS55LnRvQmlnSW50ZWdlcigpLm11bHRpcGx5KHRoaXMueikuc3VidHJhY3QodGhpcy55LnRvQmlnSW50ZWdlcigpLm11bHRpcGx5KGEueikpLm1vZCh0aGlzLmN1cnZlLnEpO2lmKCFjLmVxdWFscyhCaWdJbnRlZ2VyLlpFUk8pKXtyZXR1cm4gZmFsc2V9Yj1hLngudG9CaWdJbnRlZ2VyKCkubXVsdGlwbHkodGhpcy56KS5zdWJ0cmFjdCh0aGlzLngudG9CaWdJbnRlZ2VyKCkubXVsdGlwbHkoYS56KSkubW9kKHRoaXMuY3VydmUucSk7cmV0dXJuIGIuZXF1YWxzKEJpZ0ludGVnZXIuWkVSTyl9ZnVuY3Rpb24gcG9pbnRGcElzSW5maW5pdHkoKXtpZigodGhpcy54PT1udWxsKSYmKHRoaXMueT09bnVsbCkpe3JldHVybiB0cnVlfXJldHVybiB0aGlzLnouZXF1YWxzKEJpZ0ludGVnZXIuWkVSTykmJiF0aGlzLnkudG9CaWdJbnRlZ2VyKCkuZXF1YWxzKEJpZ0ludGVnZXIuWkVSTyl9ZnVuY3Rpb24gcG9pbnRGcE5lZ2F0ZSgpe3JldHVybiBuZXcgRUNQb2ludEZwKHRoaXMuY3VydmUsdGhpcy54LHRoaXMueS5uZWdhdGUoKSx0aGlzLnopfWZ1bmN0aW9uIHBvaW50RnBBZGQobCl7aWYodGhpcy5pc0luZmluaXR5KCkpe3JldHVybiBsfWlmKGwuaXNJbmZpbml0eSgpKXtyZXR1cm4gdGhpc312YXIgcD1sLnkudG9CaWdJbnRlZ2VyKCkubXVsdGlwbHkodGhpcy56KS5zdWJ0cmFjdCh0aGlzLnkudG9CaWdJbnRlZ2VyKCkubXVsdGlwbHkobC56KSkubW9kKHRoaXMuY3VydmUucSk7dmFyIG89bC54LnRvQmlnSW50ZWdlcigpLm11bHRpcGx5KHRoaXMueikuc3VidHJhY3QodGhpcy54LnRvQmlnSW50ZWdlcigpLm11bHRpcGx5KGwueikpLm1vZCh0aGlzLmN1cnZlLnEpO2lmKEJpZ0ludGVnZXIuWkVSTy5lcXVhbHMobykpe2lmKEJpZ0ludGVnZXIuWkVSTy5lcXVhbHMocCkpe3JldHVybiB0aGlzLnR3aWNlKCl9cmV0dXJuIHRoaXMuY3VydmUuZ2V0SW5maW5pdHkoKX12YXIgaj1uZXcgQmlnSW50ZWdlcihcIjNcIik7dmFyIGU9dGhpcy54LnRvQmlnSW50ZWdlcigpO3ZhciBuPXRoaXMueS50b0JpZ0ludGVnZXIoKTt2YXIgYz1sLngudG9CaWdJbnRlZ2VyKCk7dmFyIGs9bC55LnRvQmlnSW50ZWdlcigpO3ZhciBtPW8uc3F1YXJlKCk7dmFyIGk9bS5tdWx0aXBseShvKTt2YXIgZD1lLm11bHRpcGx5KG0pO3ZhciBnPXAuc3F1YXJlKCkubXVsdGlwbHkodGhpcy56KTt2YXIgYT1nLnN1YnRyYWN0KGQuc2hpZnRMZWZ0KDEpKS5tdWx0aXBseShsLnopLnN1YnRyYWN0KGkpLm11bHRpcGx5KG8pLm1vZCh0aGlzLmN1cnZlLnEpO3ZhciBoPWQubXVsdGlwbHkoaikubXVsdGlwbHkocCkuc3VidHJhY3Qobi5tdWx0aXBseShpKSkuc3VidHJhY3QoZy5tdWx0aXBseShwKSkubXVsdGlwbHkobC56KS5hZGQocC5tdWx0aXBseShpKSkubW9kKHRoaXMuY3VydmUucSk7dmFyIGY9aS5tdWx0aXBseSh0aGlzLnopLm11bHRpcGx5KGwueikubW9kKHRoaXMuY3VydmUucSk7cmV0dXJuIG5ldyBFQ1BvaW50RnAodGhpcy5jdXJ2ZSx0aGlzLmN1cnZlLmZyb21CaWdJbnRlZ2VyKGEpLHRoaXMuY3VydmUuZnJvbUJpZ0ludGVnZXIoaCksZil9ZnVuY3Rpb24gcG9pbnRGcFR3aWNlKCl7aWYodGhpcy5pc0luZmluaXR5KCkpe3JldHVybiB0aGlzfWlmKHRoaXMueS50b0JpZ0ludGVnZXIoKS5zaWdudW0oKT09MCl7cmV0dXJuIHRoaXMuY3VydmUuZ2V0SW5maW5pdHkoKX12YXIgZz1uZXcgQmlnSW50ZWdlcihcIjNcIik7dmFyIGM9dGhpcy54LnRvQmlnSW50ZWdlcigpO3ZhciBoPXRoaXMueS50b0JpZ0ludGVnZXIoKTt2YXIgZT1oLm11bHRpcGx5KHRoaXMueik7dmFyIGo9ZS5tdWx0aXBseShoKS5tb2QodGhpcy5jdXJ2ZS5xKTt2YXIgaT10aGlzLmN1cnZlLmEudG9CaWdJbnRlZ2VyKCk7dmFyIGs9Yy5zcXVhcmUoKS5tdWx0aXBseShnKTtpZighQmlnSW50ZWdlci5aRVJPLmVxdWFscyhpKSl7az1rLmFkZCh0aGlzLnouc3F1YXJlKCkubXVsdGlwbHkoaSkpfWs9ay5tb2QodGhpcy5jdXJ2ZS5xKTt2YXIgYj1rLnNxdWFyZSgpLnN1YnRyYWN0KGMuc2hpZnRMZWZ0KDMpLm11bHRpcGx5KGopKS5zaGlmdExlZnQoMSkubXVsdGlwbHkoZSkubW9kKHRoaXMuY3VydmUucSk7dmFyIGY9ay5tdWx0aXBseShnKS5tdWx0aXBseShjKS5zdWJ0cmFjdChqLnNoaWZ0TGVmdCgxKSkuc2hpZnRMZWZ0KDIpLm11bHRpcGx5KGopLnN1YnRyYWN0KGsuc3F1YXJlKCkubXVsdGlwbHkoaykpLm1vZCh0aGlzLmN1cnZlLnEpO3ZhciBkPWUuc3F1YXJlKCkubXVsdGlwbHkoZSkuc2hpZnRMZWZ0KDMpLm1vZCh0aGlzLmN1cnZlLnEpO3JldHVybiBuZXcgRUNQb2ludEZwKHRoaXMuY3VydmUsdGhpcy5jdXJ2ZS5mcm9tQmlnSW50ZWdlcihiKSx0aGlzLmN1cnZlLmZyb21CaWdJbnRlZ2VyKGYpLGQpfWZ1bmN0aW9uIHBvaW50RnBNdWx0aXBseShiKXtpZih0aGlzLmlzSW5maW5pdHkoKSl7cmV0dXJuIHRoaXN9aWYoYi5zaWdudW0oKT09MCl7cmV0dXJuIHRoaXMuY3VydmUuZ2V0SW5maW5pdHkoKX12YXIgZz1iO3ZhciBmPWcubXVsdGlwbHkobmV3IEJpZ0ludGVnZXIoXCIzXCIpKTt2YXIgbD10aGlzLm5lZ2F0ZSgpO3ZhciBkPXRoaXM7dmFyIGM7Zm9yKGM9Zi5iaXRMZW5ndGgoKS0yO2M+MDstLWMpe2Q9ZC50d2ljZSgpO3ZhciBhPWYudGVzdEJpdChjKTt2YXIgaj1nLnRlc3RCaXQoYyk7aWYoYSE9ail7ZD1kLmFkZChhP3RoaXM6bCl9fXJldHVybiBkfWZ1bmN0aW9uIHBvaW50RnBNdWx0aXBseVR3byhjLGEsYil7dmFyIGQ7aWYoYy5iaXRMZW5ndGgoKT5iLmJpdExlbmd0aCgpKXtkPWMuYml0TGVuZ3RoKCktMX1lbHNle2Q9Yi5iaXRMZW5ndGgoKS0xfXZhciBmPXRoaXMuY3VydmUuZ2V0SW5maW5pdHkoKTt2YXIgZT10aGlzLmFkZChhKTt3aGlsZShkPj0wKXtmPWYudHdpY2UoKTtpZihjLnRlc3RCaXQoZCkpe2lmKGIudGVzdEJpdChkKSl7Zj1mLmFkZChlKX1lbHNle2Y9Zi5hZGQodGhpcyl9fWVsc2V7aWYoYi50ZXN0Qml0KGQpKXtmPWYuYWRkKGEpfX0tLWR9cmV0dXJuIGZ9RUNQb2ludEZwLnByb3RvdHlwZS5nZXRYPXBvaW50RnBHZXRYO0VDUG9pbnRGcC5wcm90b3R5cGUuZ2V0WT1wb2ludEZwR2V0WTtFQ1BvaW50RnAucHJvdG90eXBlLmVxdWFscz1wb2ludEZwRXF1YWxzO0VDUG9pbnRGcC5wcm90b3R5cGUuaXNJbmZpbml0eT1wb2ludEZwSXNJbmZpbml0eTtFQ1BvaW50RnAucHJvdG90eXBlLm5lZ2F0ZT1wb2ludEZwTmVnYXRlO0VDUG9pbnRGcC5wcm90b3R5cGUuYWRkPXBvaW50RnBBZGQ7RUNQb2ludEZwLnByb3RvdHlwZS50d2ljZT1wb2ludEZwVHdpY2U7RUNQb2ludEZwLnByb3RvdHlwZS5tdWx0aXBseT1wb2ludEZwTXVsdGlwbHk7RUNQb2ludEZwLnByb3RvdHlwZS5tdWx0aXBseVR3bz1wb2ludEZwTXVsdGlwbHlUd287ZnVuY3Rpb24gRUNDdXJ2ZUZwKGUsZCxjKXt0aGlzLnE9ZTt0aGlzLmE9dGhpcy5mcm9tQmlnSW50ZWdlcihkKTt0aGlzLmI9dGhpcy5mcm9tQmlnSW50ZWdlcihjKTt0aGlzLmluZmluaXR5PW5ldyBFQ1BvaW50RnAodGhpcyxudWxsLG51bGwpfWZ1bmN0aW9uIGN1cnZlRnBHZXRRKCl7cmV0dXJuIHRoaXMucX1mdW5jdGlvbiBjdXJ2ZUZwR2V0QSgpe3JldHVybiB0aGlzLmF9ZnVuY3Rpb24gY3VydmVGcEdldEIoKXtyZXR1cm4gdGhpcy5ifWZ1bmN0aW9uIGN1cnZlRnBFcXVhbHMoYSl7aWYoYT09dGhpcyl7cmV0dXJuIHRydWV9cmV0dXJuKHRoaXMucS5lcXVhbHMoYS5xKSYmdGhpcy5hLmVxdWFscyhhLmEpJiZ0aGlzLmIuZXF1YWxzKGEuYikpfWZ1bmN0aW9uIGN1cnZlRnBHZXRJbmZpbml0eSgpe3JldHVybiB0aGlzLmluZmluaXR5fWZ1bmN0aW9uIGN1cnZlRnBGcm9tQmlnSW50ZWdlcihhKXtyZXR1cm4gbmV3IEVDRmllbGRFbGVtZW50RnAodGhpcy5xLGEpfWZ1bmN0aW9uIGN1cnZlRnBEZWNvZGVQb2ludEhleChkKXtzd2l0Y2gocGFyc2VJbnQoZC5zdWJzdHIoMCwyKSwxNikpe2Nhc2UgMDpyZXR1cm4gdGhpcy5pbmZpbml0eTtjYXNlIDI6Y2FzZSAzOnJldHVybiBudWxsO2Nhc2UgNDpjYXNlIDY6Y2FzZSA3OnZhciBhPShkLmxlbmd0aC0yKS8yO3ZhciBjPWQuc3Vic3RyKDIsYSk7dmFyIGI9ZC5zdWJzdHIoYSsyLGEpO3JldHVybiBuZXcgRUNQb2ludEZwKHRoaXMsdGhpcy5mcm9tQmlnSW50ZWdlcihuZXcgQmlnSW50ZWdlcihjLDE2KSksdGhpcy5mcm9tQmlnSW50ZWdlcihuZXcgQmlnSW50ZWdlcihiLDE2KSkpO2RlZmF1bHQ6cmV0dXJuIG51bGx9fUVDQ3VydmVGcC5wcm90b3R5cGUuZ2V0UT1jdXJ2ZUZwR2V0UTtFQ0N1cnZlRnAucHJvdG90eXBlLmdldEE9Y3VydmVGcEdldEE7RUNDdXJ2ZUZwLnByb3RvdHlwZS5nZXRCPWN1cnZlRnBHZXRCO0VDQ3VydmVGcC5wcm90b3R5cGUuZXF1YWxzPWN1cnZlRnBFcXVhbHM7RUNDdXJ2ZUZwLnByb3RvdHlwZS5nZXRJbmZpbml0eT1jdXJ2ZUZwR2V0SW5maW5pdHk7RUNDdXJ2ZUZwLnByb3RvdHlwZS5mcm9tQmlnSW50ZWdlcj1jdXJ2ZUZwRnJvbUJpZ0ludGVnZXI7RUNDdXJ2ZUZwLnByb3RvdHlwZS5kZWNvZGVQb2ludEhleD1jdXJ2ZUZwRGVjb2RlUG9pbnRIZXg7XG4vKiEgKGMpIFN0ZWZhbiBUaG9tYXMgfCBodHRwczovL2dpdGh1Yi5jb20vYml0Y29pbmpzL2JpdGNvaW5qcy1saWJcclxuICovXHJcbkVDRmllbGRFbGVtZW50RnAucHJvdG90eXBlLmdldEJ5dGVMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5mbG9vcigodGhpcy50b0JpZ0ludGVnZXIoKS5iaXRMZW5ndGgoKSs3KS84KX07RUNQb2ludEZwLnByb3RvdHlwZS5nZXRFbmNvZGVkPWZ1bmN0aW9uKGMpe3ZhciBkPWZ1bmN0aW9uKGgsZil7dmFyIGc9aC50b0J5dGVBcnJheVVuc2lnbmVkKCk7aWYoZjxnLmxlbmd0aCl7Zz1nLnNsaWNlKGcubGVuZ3RoLWYpfWVsc2V7d2hpbGUoZj5nLmxlbmd0aCl7Zy51bnNoaWZ0KDApfX1yZXR1cm4gZ307dmFyIGE9dGhpcy5nZXRYKCkudG9CaWdJbnRlZ2VyKCk7dmFyIGU9dGhpcy5nZXRZKCkudG9CaWdJbnRlZ2VyKCk7dmFyIGI9ZChhLDMyKTtpZihjKXtpZihlLmlzRXZlbigpKXtiLnVuc2hpZnQoMil9ZWxzZXtiLnVuc2hpZnQoMyl9fWVsc2V7Yi51bnNoaWZ0KDQpO2I9Yi5jb25jYXQoZChlLDMyKSl9cmV0dXJuIGJ9O0VDUG9pbnRGcC5kZWNvZGVGcm9tPWZ1bmN0aW9uKGcsYyl7dmFyIGY9Y1swXTt2YXIgZT1jLmxlbmd0aC0xO3ZhciBkPWMuc2xpY2UoMSwxK2UvMik7dmFyIGI9Yy5zbGljZSgxK2UvMiwxK2UpO2QudW5zaGlmdCgwKTtiLnVuc2hpZnQoMCk7dmFyIGE9bmV3IEJpZ0ludGVnZXIoZCk7dmFyIGg9bmV3IEJpZ0ludGVnZXIoYik7cmV0dXJuIG5ldyBFQ1BvaW50RnAoZyxnLmZyb21CaWdJbnRlZ2VyKGEpLGcuZnJvbUJpZ0ludGVnZXIoaCkpfTtFQ1BvaW50RnAuZGVjb2RlRnJvbUhleD1mdW5jdGlvbihnLGMpe3ZhciBmPWMuc3Vic3RyKDAsMik7dmFyIGU9Yy5sZW5ndGgtMjt2YXIgZD1jLnN1YnN0cigyLGUvMik7dmFyIGI9Yy5zdWJzdHIoMitlLzIsZS8yKTt2YXIgYT1uZXcgQmlnSW50ZWdlcihkLDE2KTt2YXIgaD1uZXcgQmlnSW50ZWdlcihiLDE2KTtyZXR1cm4gbmV3IEVDUG9pbnRGcChnLGcuZnJvbUJpZ0ludGVnZXIoYSksZy5mcm9tQmlnSW50ZWdlcihoKSl9O0VDUG9pbnRGcC5wcm90b3R5cGUuYWRkMkQ9ZnVuY3Rpb24oYyl7aWYodGhpcy5pc0luZmluaXR5KCkpe3JldHVybiBjfWlmKGMuaXNJbmZpbml0eSgpKXtyZXR1cm4gdGhpc31pZih0aGlzLnguZXF1YWxzKGMueCkpe2lmKHRoaXMueS5lcXVhbHMoYy55KSl7cmV0dXJuIHRoaXMudHdpY2UoKX1yZXR1cm4gdGhpcy5jdXJ2ZS5nZXRJbmZpbml0eSgpfXZhciBnPWMueC5zdWJ0cmFjdCh0aGlzLngpO3ZhciBlPWMueS5zdWJ0cmFjdCh0aGlzLnkpO3ZhciBhPWUuZGl2aWRlKGcpO3ZhciBkPWEuc3F1YXJlKCkuc3VidHJhY3QodGhpcy54KS5zdWJ0cmFjdChjLngpO3ZhciBmPWEubXVsdGlwbHkodGhpcy54LnN1YnRyYWN0KGQpKS5zdWJ0cmFjdCh0aGlzLnkpO3JldHVybiBuZXcgRUNQb2ludEZwKHRoaXMuY3VydmUsZCxmKX07RUNQb2ludEZwLnByb3RvdHlwZS50d2ljZTJEPWZ1bmN0aW9uKCl7aWYodGhpcy5pc0luZmluaXR5KCkpe3JldHVybiB0aGlzfWlmKHRoaXMueS50b0JpZ0ludGVnZXIoKS5zaWdudW0oKT09MCl7cmV0dXJuIHRoaXMuY3VydmUuZ2V0SW5maW5pdHkoKX12YXIgYj10aGlzLmN1cnZlLmZyb21CaWdJbnRlZ2VyKEJpZ0ludGVnZXIudmFsdWVPZigyKSk7dmFyIGU9dGhpcy5jdXJ2ZS5mcm9tQmlnSW50ZWdlcihCaWdJbnRlZ2VyLnZhbHVlT2YoMykpO3ZhciBhPXRoaXMueC5zcXVhcmUoKS5tdWx0aXBseShlKS5hZGQodGhpcy5jdXJ2ZS5hKS5kaXZpZGUodGhpcy55Lm11bHRpcGx5KGIpKTt2YXIgYz1hLnNxdWFyZSgpLnN1YnRyYWN0KHRoaXMueC5tdWx0aXBseShiKSk7dmFyIGQ9YS5tdWx0aXBseSh0aGlzLnguc3VidHJhY3QoYykpLnN1YnRyYWN0KHRoaXMueSk7cmV0dXJuIG5ldyBFQ1BvaW50RnAodGhpcy5jdXJ2ZSxjLGQpfTtFQ1BvaW50RnAucHJvdG90eXBlLm11bHRpcGx5MkQ9ZnVuY3Rpb24oYil7aWYodGhpcy5pc0luZmluaXR5KCkpe3JldHVybiB0aGlzfWlmKGIuc2lnbnVtKCk9PTApe3JldHVybiB0aGlzLmN1cnZlLmdldEluZmluaXR5KCl9dmFyIGc9Yjt2YXIgZj1nLm11bHRpcGx5KG5ldyBCaWdJbnRlZ2VyKFwiM1wiKSk7dmFyIGw9dGhpcy5uZWdhdGUoKTt2YXIgZD10aGlzO3ZhciBjO2ZvcihjPWYuYml0TGVuZ3RoKCktMjtjPjA7LS1jKXtkPWQudHdpY2UoKTt2YXIgYT1mLnRlc3RCaXQoYyk7dmFyIGo9Zy50ZXN0Qml0KGMpO2lmKGEhPWope2Q9ZC5hZGQyRChhP3RoaXM6bCl9fXJldHVybiBkfTtFQ1BvaW50RnAucHJvdG90eXBlLmlzT25DdXJ2ZT1mdW5jdGlvbigpe3ZhciBkPXRoaXMuZ2V0WCgpLnRvQmlnSW50ZWdlcigpO3ZhciBpPXRoaXMuZ2V0WSgpLnRvQmlnSW50ZWdlcigpO3ZhciBmPXRoaXMuY3VydmUuZ2V0QSgpLnRvQmlnSW50ZWdlcigpO3ZhciBjPXRoaXMuY3VydmUuZ2V0QigpLnRvQmlnSW50ZWdlcigpO3ZhciBoPXRoaXMuY3VydmUuZ2V0USgpO3ZhciBlPWkubXVsdGlwbHkoaSkubW9kKGgpO3ZhciBnPWQubXVsdGlwbHkoZCkubXVsdGlwbHkoZCkuYWRkKGYubXVsdGlwbHkoZCkpLmFkZChjKS5tb2QoaCk7cmV0dXJuIGUuZXF1YWxzKGcpfTtFQ1BvaW50RnAucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuXCIoXCIrdGhpcy5nZXRYKCkudG9CaWdJbnRlZ2VyKCkudG9TdHJpbmcoKStcIixcIit0aGlzLmdldFkoKS50b0JpZ0ludGVnZXIoKS50b1N0cmluZygpK1wiKVwifTtFQ1BvaW50RnAucHJvdG90eXBlLnZhbGlkYXRlPWZ1bmN0aW9uKCl7dmFyIGM9dGhpcy5jdXJ2ZS5nZXRRKCk7aWYodGhpcy5pc0luZmluaXR5KCkpe3Rocm93IG5ldyBFcnJvcihcIlBvaW50IGlzIGF0IGluZmluaXR5LlwiKX12YXIgYT10aGlzLmdldFgoKS50b0JpZ0ludGVnZXIoKTt2YXIgYj10aGlzLmdldFkoKS50b0JpZ0ludGVnZXIoKTtpZihhLmNvbXBhcmVUbyhCaWdJbnRlZ2VyLk9ORSk8MHx8YS5jb21wYXJlVG8oYy5zdWJ0cmFjdChCaWdJbnRlZ2VyLk9ORSkpPjApe3Rocm93IG5ldyBFcnJvcihcInggY29vcmRpbmF0ZSBvdXQgb2YgYm91bmRzXCIpfWlmKGIuY29tcGFyZVRvKEJpZ0ludGVnZXIuT05FKTwwfHxiLmNvbXBhcmVUbyhjLnN1YnRyYWN0KEJpZ0ludGVnZXIuT05FKSk+MCl7dGhyb3cgbmV3IEVycm9yKFwieSBjb29yZGluYXRlIG91dCBvZiBib3VuZHNcIil9aWYoIXRoaXMuaXNPbkN1cnZlKCkpe3Rocm93IG5ldyBFcnJvcihcIlBvaW50IGlzIG5vdCBvbiB0aGUgY3VydmUuXCIpfWlmKHRoaXMubXVsdGlwbHkoYykuaXNJbmZpbml0eSgpKXt0aHJvdyBuZXcgRXJyb3IoXCJQb2ludCBpcyBub3QgYSBzY2FsYXIgbXVsdGlwbGUgb2YgRy5cIil9cmV0dXJuIHRydWV9O1xuLyohIE1pa2UgU2FtdWVsIChjKSAyMDA5IHwgY29kZS5nb29nbGUuY29tL3AvanNvbi1zYW5zLWV2YWxcclxuICovXHJcbnZhciBqc29uUGFyc2U9KGZ1bmN0aW9uKCl7dmFyIGU9XCIoPzotP1xcXFxiKD86MHxbMS05XVswLTldKikoPzpcXFxcLlswLTldKyk/KD86W2VFXVsrLV0/WzAtOV0rKT9cXFxcYilcIjt2YXIgaj0nKD86W15cXFxcMC1cXFxceDA4XFxcXHgwYS1cXFxceDFmXCJcXFxcXFxcXF18XFxcXFxcXFwoPzpbXCIvXFxcXFxcXFxiZm5ydF18dVswLTlBLUZhLWZdezR9KSknO3ZhciBpPScoPzpcIicraisnKlwiKSc7dmFyIGQ9bmV3IFJlZ0V4cChcIig/OmZhbHNlfHRydWV8bnVsbHxbXFxcXHtcXFxcfVxcXFxbXFxcXF1dfFwiK2UrXCJ8XCIraStcIilcIixcImdcIik7dmFyIGs9bmV3IFJlZ0V4cChcIlxcXFxcXFxcKD86KFtedV0pfHUoLns0fSkpXCIsXCJnXCIpO3ZhciBnPXsnXCInOidcIicsXCIvXCI6XCIvXCIsXCJcXFxcXCI6XCJcXFxcXCIsYjpcIlxcYlwiLGY6XCJcXGZcIixuOlwiXFxuXCIscjpcIlxcclwiLHQ6XCJcXHRcIn07ZnVuY3Rpb24gaChsLG0sbil7cmV0dXJuIG0/Z1ttXTpTdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KG4sMTYpKX12YXIgYz1uZXcgU3RyaW5nKFwiXCIpO3ZhciBhPVwiXFxcXFwiO3ZhciBmPXtcIntcIjpPYmplY3QsXCJbXCI6QXJyYXl9O3ZhciBiPU9iamVjdC5oYXNPd25Qcm9wZXJ0eTtyZXR1cm4gZnVuY3Rpb24odSxxKXt2YXIgcD11Lm1hdGNoKGQpO3ZhciB4O3ZhciB2PXBbMF07dmFyIGw9ZmFsc2U7aWYoXCJ7XCI9PT12KXt4PXt9fWVsc2V7aWYoXCJbXCI9PT12KXt4PVtdfWVsc2V7eD1bXTtsPXRydWV9fXZhciB0O3ZhciByPVt4XTtmb3IodmFyIG89MS1sLG09cC5sZW5ndGg7bzxtOysrbyl7dj1wW29dO3ZhciB3O3N3aXRjaCh2LmNoYXJDb2RlQXQoMCkpe2RlZmF1bHQ6dz1yWzBdO3dbdHx8dy5sZW5ndGhdPSsodik7dD12b2lkIDA7YnJlYWs7Y2FzZSAzNDp2PXYuc3Vic3RyaW5nKDEsdi5sZW5ndGgtMSk7aWYodi5pbmRleE9mKGEpIT09LTEpe3Y9di5yZXBsYWNlKGssaCl9dz1yWzBdO2lmKCF0KXtpZih3IGluc3RhbmNlb2YgQXJyYXkpe3Q9dy5sZW5ndGh9ZWxzZXt0PXZ8fGM7YnJlYWt9fXdbdF09djt0PXZvaWQgMDticmVhaztjYXNlIDkxOnc9clswXTtyLnVuc2hpZnQod1t0fHx3Lmxlbmd0aF09W10pO3Q9dm9pZCAwO2JyZWFrO2Nhc2UgOTM6ci5zaGlmdCgpO2JyZWFrO2Nhc2UgMTAyOnc9clswXTt3W3R8fHcubGVuZ3RoXT1mYWxzZTt0PXZvaWQgMDticmVhaztjYXNlIDExMDp3PXJbMF07d1t0fHx3Lmxlbmd0aF09bnVsbDt0PXZvaWQgMDticmVhaztjYXNlIDExNjp3PXJbMF07d1t0fHx3Lmxlbmd0aF09dHJ1ZTt0PXZvaWQgMDticmVhaztjYXNlIDEyMzp3PXJbMF07ci51bnNoaWZ0KHdbdHx8dy5sZW5ndGhdPXt9KTt0PXZvaWQgMDticmVhaztjYXNlIDEyNTpyLnNoaWZ0KCk7YnJlYWt9fWlmKGwpe2lmKHIubGVuZ3RoIT09MSl7dGhyb3cgbmV3IEVycm9yKCl9eD14WzBdfWVsc2V7aWYoci5sZW5ndGgpe3Rocm93IG5ldyBFcnJvcigpfX1pZihxKXt2YXIgcz1mdW5jdGlvbihDLEIpe3ZhciBEPUNbQl07aWYoRCYmdHlwZW9mIEQ9PT1cIm9iamVjdFwiKXt2YXIgbj1udWxsO2Zvcih2YXIgeiBpbiBEKXtpZihiLmNhbGwoRCx6KSYmRCE9PUMpe3ZhciB5PXMoRCx6KTtpZih5IT09dm9pZCAwKXtEW3pdPXl9ZWxzZXtpZighbil7bj1bXX1uLnB1c2goeil9fX1pZihuKXtmb3IodmFyIEE9bi5sZW5ndGg7LS1BPj0wOyl7ZGVsZXRlIERbbltBXV19fX1yZXR1cm4gcS5jYWxsKEMsQixEKX07eD1zKHtcIlwiOnh9LFwiXCIpfXJldHVybiB4fX0pKCk7XG5pZih0eXBlb2YgS0pVUj09XCJ1bmRlZmluZWRcInx8IUtKVVIpe0tKVVI9e319aWYodHlwZW9mIEtKVVIuYXNuMT09XCJ1bmRlZmluZWRcInx8IUtKVVIuYXNuMSl7S0pVUi5hc24xPXt9fUtKVVIuYXNuMS5BU04xVXRpbD1uZXcgZnVuY3Rpb24oKXt0aGlzLmludGVnZXJUb0J5dGVIZXg9ZnVuY3Rpb24oYSl7dmFyIGI9YS50b1N0cmluZygxNik7aWYoKGIubGVuZ3RoJTIpPT0xKXtiPVwiMFwiK2J9cmV0dXJuIGJ9O3RoaXMuYmlnSW50VG9NaW5Ud29zQ29tcGxlbWVudHNIZXg9ZnVuY3Rpb24oail7dmFyIGY9ai50b1N0cmluZygxNik7aWYoZi5zdWJzdHIoMCwxKSE9XCItXCIpe2lmKGYubGVuZ3RoJTI9PTEpe2Y9XCIwXCIrZn1lbHNle2lmKCFmLm1hdGNoKC9eWzAtN10vKSl7Zj1cIjAwXCIrZn19fWVsc2V7dmFyIGE9Zi5zdWJzdHIoMSk7dmFyIGU9YS5sZW5ndGg7aWYoZSUyPT0xKXtlKz0xfWVsc2V7aWYoIWYubWF0Y2goL15bMC03XS8pKXtlKz0yfX12YXIgZz1cIlwiO2Zvcih2YXIgZD0wO2Q8ZTtkKyspe2crPVwiZlwifXZhciBjPW5ldyBCaWdJbnRlZ2VyKGcsMTYpO3ZhciBiPWMueG9yKGopLmFkZChCaWdJbnRlZ2VyLk9ORSk7Zj1iLnRvU3RyaW5nKDE2KS5yZXBsYWNlKC9eLS8sXCJcIil9cmV0dXJuIGZ9O3RoaXMuZ2V0UEVNU3RyaW5nRnJvbUhleD1mdW5jdGlvbihhLGIpe3JldHVybiBoZXh0b3BlbShhLGIpfTt0aGlzLm5ld09iamVjdD1mdW5jdGlvbihrKXt2YXIgRD1LSlVSLG49RC5hc24xLHo9bi5ERVJCb29sZWFuLGU9bi5ERVJJbnRlZ2VyLHM9bi5ERVJCaXRTdHJpbmcsaD1uLkRFUk9jdGV0U3RyaW5nLHY9bi5ERVJOdWxsLHc9bi5ERVJPYmplY3RJZGVudGlmaWVyLGw9bi5ERVJFbnVtZXJhdGVkLGc9bi5ERVJVVEY4U3RyaW5nLGY9bi5ERVJOdW1lcmljU3RyaW5nLHk9bi5ERVJQcmludGFibGVTdHJpbmcsdT1uLkRFUlRlbGV0ZXhTdHJpbmcscD1uLkRFUklBNVN0cmluZyxDPW4uREVSVVRDVGltZSxqPW4uREVSR2VuZXJhbGl6ZWRUaW1lLG09bi5ERVJTZXF1ZW5jZSxjPW4uREVSU2V0LHI9bi5ERVJUYWdnZWRPYmplY3Qsbz1uLkFTTjFVdGlsLm5ld09iamVjdDt2YXIgdD1PYmplY3Qua2V5cyhrKTtpZih0Lmxlbmd0aCE9MSl7dGhyb3dcImtleSBvZiBwYXJhbSBzaGFsbCBiZSBvbmx5IG9uZS5cIn12YXIgRj10WzBdO2lmKFwiOmJvb2w6aW50OmJpdHN0cjpvY3RzdHI6bnVsbDpvaWQ6ZW51bTp1dGY4c3RyOm51bXN0cjpwcm5zdHI6dGVsc3RyOmlhNXN0cjp1dGN0aW1lOmdlbnRpbWU6c2VxOnNldDp0YWc6XCIuaW5kZXhPZihcIjpcIitGK1wiOlwiKT09LTEpe3Rocm93XCJ1bmRlZmluZWQga2V5OiBcIitGfWlmKEY9PVwiYm9vbFwiKXtyZXR1cm4gbmV3IHooa1tGXSl9aWYoRj09XCJpbnRcIil7cmV0dXJuIG5ldyBlKGtbRl0pfWlmKEY9PVwiYml0c3RyXCIpe3JldHVybiBuZXcgcyhrW0ZdKX1pZihGPT1cIm9jdHN0clwiKXtyZXR1cm4gbmV3IGgoa1tGXSl9aWYoRj09XCJudWxsXCIpe3JldHVybiBuZXcgdihrW0ZdKX1pZihGPT1cIm9pZFwiKXtyZXR1cm4gbmV3IHcoa1tGXSl9aWYoRj09XCJlbnVtXCIpe3JldHVybiBuZXcgbChrW0ZdKX1pZihGPT1cInV0ZjhzdHJcIil7cmV0dXJuIG5ldyBnKGtbRl0pfWlmKEY9PVwibnVtc3RyXCIpe3JldHVybiBuZXcgZihrW0ZdKX1pZihGPT1cInBybnN0clwiKXtyZXR1cm4gbmV3IHkoa1tGXSl9aWYoRj09XCJ0ZWxzdHJcIil7cmV0dXJuIG5ldyB1KGtbRl0pfWlmKEY9PVwiaWE1c3RyXCIpe3JldHVybiBuZXcgcChrW0ZdKX1pZihGPT1cInV0Y3RpbWVcIil7cmV0dXJuIG5ldyBDKGtbRl0pfWlmKEY9PVwiZ2VudGltZVwiKXtyZXR1cm4gbmV3IGooa1tGXSl9aWYoRj09XCJzZXFcIil7dmFyIGQ9a1tGXTt2YXIgRT1bXTtmb3IodmFyIHg9MDt4PGQubGVuZ3RoO3grKyl7dmFyIEI9byhkW3hdKTtFLnB1c2goQil9cmV0dXJuIG5ldyBtKHthcnJheTpFfSl9aWYoRj09XCJzZXRcIil7dmFyIGQ9a1tGXTt2YXIgRT1bXTtmb3IodmFyIHg9MDt4PGQubGVuZ3RoO3grKyl7dmFyIEI9byhkW3hdKTtFLnB1c2goQil9cmV0dXJuIG5ldyBjKHthcnJheTpFfSl9aWYoRj09XCJ0YWdcIil7dmFyIEE9a1tGXTtpZihPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoQSk9PT1cIltvYmplY3QgQXJyYXldXCImJkEubGVuZ3RoPT0zKXt2YXIgcT1vKEFbMl0pO3JldHVybiBuZXcgcih7dGFnOkFbMF0sZXhwbGljaXQ6QVsxXSxvYmo6cX0pfWVsc2V7dmFyIGI9e307aWYoQS5leHBsaWNpdCE9PXVuZGVmaW5lZCl7Yi5leHBsaWNpdD1BLmV4cGxpY2l0fWlmKEEudGFnIT09dW5kZWZpbmVkKXtiLnRhZz1BLnRhZ31pZihBLm9iaj09PXVuZGVmaW5lZCl7dGhyb3dcIm9iaiBzaGFsbCBiZSBzcGVjaWZpZWQgZm9yICd0YWcnLlwifWIub2JqPW8oQS5vYmopO3JldHVybiBuZXcgcihiKX19fTt0aGlzLmpzb25Ub0FTTjFIRVg9ZnVuY3Rpb24oYil7dmFyIGE9dGhpcy5uZXdPYmplY3QoYik7cmV0dXJuIGEuZ2V0RW5jb2RlZEhleCgpfX07S0pVUi5hc24xLkFTTjFVdGlsLm9pZEhleFRvSW50PWZ1bmN0aW9uKGEpe3ZhciBqPVwiXCI7dmFyIGs9cGFyc2VJbnQoYS5zdWJzdHIoMCwyKSwxNik7dmFyIGQ9TWF0aC5mbG9vcihrLzQwKTt2YXIgYz1rJTQwO3ZhciBqPWQrXCIuXCIrYzt2YXIgZT1cIlwiO2Zvcih2YXIgZj0yO2Y8YS5sZW5ndGg7Zis9Mil7dmFyIGc9cGFyc2VJbnQoYS5zdWJzdHIoZiwyKSwxNik7dmFyIGg9KFwiMDAwMDAwMDBcIitnLnRvU3RyaW5nKDIpKS5zbGljZSgtOCk7ZT1lK2guc3Vic3RyKDEsNyk7aWYoaC5zdWJzdHIoMCwxKT09XCIwXCIpe3ZhciBiPW5ldyBCaWdJbnRlZ2VyKGUsMik7aj1qK1wiLlwiK2IudG9TdHJpbmcoMTApO2U9XCJcIn19cmV0dXJuIGp9O0tKVVIuYXNuMS5BU04xVXRpbC5vaWRJbnRUb0hleD1mdW5jdGlvbihmKXt2YXIgZT1mdW5jdGlvbihhKXt2YXIgaz1hLnRvU3RyaW5nKDE2KTtpZihrLmxlbmd0aD09MSl7az1cIjBcIitrfXJldHVybiBrfTt2YXIgZD1mdW5jdGlvbihvKXt2YXIgbj1cIlwiO3ZhciBrPW5ldyBCaWdJbnRlZ2VyKG8sMTApO3ZhciBhPWsudG9TdHJpbmcoMik7dmFyIGw9Ny1hLmxlbmd0aCU3O2lmKGw9PTcpe2w9MH12YXIgcT1cIlwiO2Zvcih2YXIgbT0wO208bDttKyspe3ErPVwiMFwifWE9cSthO2Zvcih2YXIgbT0wO208YS5sZW5ndGgtMTttKz03KXt2YXIgcD1hLnN1YnN0cihtLDcpO2lmKG0hPWEubGVuZ3RoLTcpe3A9XCIxXCIrcH1uKz1lKHBhcnNlSW50KHAsMikpfXJldHVybiBufTtpZighZi5tYXRjaCgvXlswLTkuXSskLykpe3Rocm93XCJtYWxmb3JtZWQgb2lkIHN0cmluZzogXCIrZn12YXIgZz1cIlwiO3ZhciBiPWYuc3BsaXQoXCIuXCIpO3ZhciBqPXBhcnNlSW50KGJbMF0pKjQwK3BhcnNlSW50KGJbMV0pO2crPWUoaik7Yi5zcGxpY2UoMCwyKTtmb3IodmFyIGM9MDtjPGIubGVuZ3RoO2MrKyl7Zys9ZChiW2NdKX1yZXR1cm4gZ307S0pVUi5hc24xLkFTTjFPYmplY3Q9ZnVuY3Rpb24oKXt2YXIgYz10cnVlO3ZhciBiPW51bGw7dmFyIGQ9XCIwMFwiO3ZhciBlPVwiMDBcIjt2YXIgYT1cIlwiO3RoaXMuZ2V0TGVuZ3RoSGV4RnJvbVZhbHVlPWZ1bmN0aW9uKCl7aWYodHlwZW9mIHRoaXMuaFY9PVwidW5kZWZpbmVkXCJ8fHRoaXMuaFY9PW51bGwpe3Rocm93XCJ0aGlzLmhWIGlzIG51bGwgb3IgdW5kZWZpbmVkLlwifWlmKHRoaXMuaFYubGVuZ3RoJTI9PTEpe3Rocm93XCJ2YWx1ZSBoZXggbXVzdCBiZSBldmVuIGxlbmd0aDogbj1cIithLmxlbmd0aCtcIix2PVwiK3RoaXMuaFZ9dmFyIGk9dGhpcy5oVi5sZW5ndGgvMjt2YXIgaD1pLnRvU3RyaW5nKDE2KTtpZihoLmxlbmd0aCUyPT0xKXtoPVwiMFwiK2h9aWYoaTwxMjgpe3JldHVybiBofWVsc2V7dmFyIGc9aC5sZW5ndGgvMjtpZihnPjE1KXt0aHJvd1wiQVNOLjEgbGVuZ3RoIHRvbyBsb25nIHRvIHJlcHJlc2VudCBieSA4eDogbiA9IFwiK2kudG9TdHJpbmcoMTYpfXZhciBmPTEyOCtnO3JldHVybiBmLnRvU3RyaW5nKDE2KStofX07dGhpcy5nZXRFbmNvZGVkSGV4PWZ1bmN0aW9uKCl7aWYodGhpcy5oVExWPT1udWxsfHx0aGlzLmlzTW9kaWZpZWQpe3RoaXMuaFY9dGhpcy5nZXRGcmVzaFZhbHVlSGV4KCk7dGhpcy5oTD10aGlzLmdldExlbmd0aEhleEZyb21WYWx1ZSgpO3RoaXMuaFRMVj10aGlzLmhUK3RoaXMuaEwrdGhpcy5oVjt0aGlzLmlzTW9kaWZpZWQ9ZmFsc2V9cmV0dXJuIHRoaXMuaFRMVn07dGhpcy5nZXRWYWx1ZUhleD1mdW5jdGlvbigpe3RoaXMuZ2V0RW5jb2RlZEhleCgpO3JldHVybiB0aGlzLmhWfTt0aGlzLmdldEZyZXNoVmFsdWVIZXg9ZnVuY3Rpb24oKXtyZXR1cm5cIlwifX07S0pVUi5hc24xLkRFUkFic3RyYWN0U3RyaW5nPWZ1bmN0aW9uKGMpe0tKVVIuYXNuMS5ERVJBYnN0cmFjdFN0cmluZy5zdXBlcmNsYXNzLmNvbnN0cnVjdG9yLmNhbGwodGhpcyk7dmFyIGI9bnVsbDt2YXIgYT1udWxsO3RoaXMuZ2V0U3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc307dGhpcy5zZXRTdHJpbmc9ZnVuY3Rpb24oZCl7dGhpcy5oVExWPW51bGw7dGhpcy5pc01vZGlmaWVkPXRydWU7dGhpcy5zPWQ7dGhpcy5oVj11dGY4dG9oZXgodGhpcy5zKS50b0xvd2VyQ2FzZSgpfTt0aGlzLnNldFN0cmluZ0hleD1mdW5jdGlvbihkKXt0aGlzLmhUTFY9bnVsbDt0aGlzLmlzTW9kaWZpZWQ9dHJ1ZTt0aGlzLnM9bnVsbDt0aGlzLmhWPWR9O3RoaXMuZ2V0RnJlc2hWYWx1ZUhleD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmhWfTtpZih0eXBlb2YgYyE9XCJ1bmRlZmluZWRcIil7aWYodHlwZW9mIGM9PVwic3RyaW5nXCIpe3RoaXMuc2V0U3RyaW5nKGMpfWVsc2V7aWYodHlwZW9mIGMuc3RyIT1cInVuZGVmaW5lZFwiKXt0aGlzLnNldFN0cmluZyhjLnN0cil9ZWxzZXtpZih0eXBlb2YgYy5oZXghPVwidW5kZWZpbmVkXCIpe3RoaXMuc2V0U3RyaW5nSGV4KGMuaGV4KX19fX19O1lBSE9PLmxhbmcuZXh0ZW5kKEtKVVIuYXNuMS5ERVJBYnN0cmFjdFN0cmluZyxLSlVSLmFzbjEuQVNOMU9iamVjdCk7S0pVUi5hc24xLkRFUkFic3RyYWN0VGltZT1mdW5jdGlvbihjKXtLSlVSLmFzbjEuREVSQWJzdHJhY3RUaW1lLnN1cGVyY2xhc3MuY29uc3RydWN0b3IuY2FsbCh0aGlzKTt2YXIgYj1udWxsO3ZhciBhPW51bGw7dGhpcy5sb2NhbERhdGVUb1VUQz1mdW5jdGlvbihmKXt1dGM9Zi5nZXRUaW1lKCkrKGYuZ2V0VGltZXpvbmVPZmZzZXQoKSo2MDAwMCk7dmFyIGU9bmV3IERhdGUodXRjKTtyZXR1cm4gZX07dGhpcy5mb3JtYXREYXRlPWZ1bmN0aW9uKG0sbyxlKXt2YXIgZz10aGlzLnplcm9QYWRkaW5nO3ZhciBuPXRoaXMubG9jYWxEYXRlVG9VVEMobSk7dmFyIHA9U3RyaW5nKG4uZ2V0RnVsbFllYXIoKSk7aWYobz09XCJ1dGNcIil7cD1wLnN1YnN0cigyLDIpfXZhciBsPWcoU3RyaW5nKG4uZ2V0TW9udGgoKSsxKSwyKTt2YXIgcT1nKFN0cmluZyhuLmdldERhdGUoKSksMik7dmFyIGg9ZyhTdHJpbmcobi5nZXRIb3VycygpKSwyKTt2YXIgaT1nKFN0cmluZyhuLmdldE1pbnV0ZXMoKSksMik7dmFyIGo9ZyhTdHJpbmcobi5nZXRTZWNvbmRzKCkpLDIpO3ZhciByPXArbCtxK2graStqO2lmKGU9PT10cnVlKXt2YXIgZj1uLmdldE1pbGxpc2Vjb25kcygpO2lmKGYhPTApe3ZhciBrPWcoU3RyaW5nKGYpLDMpO2s9ay5yZXBsYWNlKC9bMF0rJC8sXCJcIik7cj1yK1wiLlwiK2t9fXJldHVybiByK1wiWlwifTt0aGlzLnplcm9QYWRkaW5nPWZ1bmN0aW9uKGUsZCl7aWYoZS5sZW5ndGg+PWQpe3JldHVybiBlfXJldHVybiBuZXcgQXJyYXkoZC1lLmxlbmd0aCsxKS5qb2luKFwiMFwiKStlfTt0aGlzLmdldFN0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnN9O3RoaXMuc2V0U3RyaW5nPWZ1bmN0aW9uKGQpe3RoaXMuaFRMVj1udWxsO3RoaXMuaXNNb2RpZmllZD10cnVlO3RoaXMucz1kO3RoaXMuaFY9c3RvaGV4KGQpfTt0aGlzLnNldEJ5RGF0ZVZhbHVlPWZ1bmN0aW9uKGgsaixlLGQsZixnKXt2YXIgaT1uZXcgRGF0ZShEYXRlLlVUQyhoLGotMSxlLGQsZixnLDApKTt0aGlzLnNldEJ5RGF0ZShpKX07dGhpcy5nZXRGcmVzaFZhbHVlSGV4PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaFZ9fTtZQUhPTy5sYW5nLmV4dGVuZChLSlVSLmFzbjEuREVSQWJzdHJhY3RUaW1lLEtKVVIuYXNuMS5BU04xT2JqZWN0KTtLSlVSLmFzbjEuREVSQWJzdHJhY3RTdHJ1Y3R1cmVkPWZ1bmN0aW9uKGIpe0tKVVIuYXNuMS5ERVJBYnN0cmFjdFN0cmluZy5zdXBlcmNsYXNzLmNvbnN0cnVjdG9yLmNhbGwodGhpcyk7dmFyIGE9bnVsbDt0aGlzLnNldEJ5QVNOMU9iamVjdEFycmF5PWZ1bmN0aW9uKGMpe3RoaXMuaFRMVj1udWxsO3RoaXMuaXNNb2RpZmllZD10cnVlO3RoaXMuYXNuMUFycmF5PWN9O3RoaXMuYXBwZW5kQVNOMU9iamVjdD1mdW5jdGlvbihjKXt0aGlzLmhUTFY9bnVsbDt0aGlzLmlzTW9kaWZpZWQ9dHJ1ZTt0aGlzLmFzbjFBcnJheS5wdXNoKGMpfTt0aGlzLmFzbjFBcnJheT1uZXcgQXJyYXkoKTtpZih0eXBlb2YgYiE9XCJ1bmRlZmluZWRcIil7aWYodHlwZW9mIGIuYXJyYXkhPVwidW5kZWZpbmVkXCIpe3RoaXMuYXNuMUFycmF5PWIuYXJyYXl9fX07WUFIT08ubGFuZy5leHRlbmQoS0pVUi5hc24xLkRFUkFic3RyYWN0U3RydWN0dXJlZCxLSlVSLmFzbjEuQVNOMU9iamVjdCk7S0pVUi5hc24xLkRFUkJvb2xlYW49ZnVuY3Rpb24oKXtLSlVSLmFzbjEuREVSQm9vbGVhbi5zdXBlcmNsYXNzLmNvbnN0cnVjdG9yLmNhbGwodGhpcyk7dGhpcy5oVD1cIjAxXCI7dGhpcy5oVExWPVwiMDEwMWZmXCJ9O1lBSE9PLmxhbmcuZXh0ZW5kKEtKVVIuYXNuMS5ERVJCb29sZWFuLEtKVVIuYXNuMS5BU04xT2JqZWN0KTtLSlVSLmFzbjEuREVSSW50ZWdlcj1mdW5jdGlvbihhKXtLSlVSLmFzbjEuREVSSW50ZWdlci5zdXBlcmNsYXNzLmNvbnN0cnVjdG9yLmNhbGwodGhpcyk7dGhpcy5oVD1cIjAyXCI7dGhpcy5zZXRCeUJpZ0ludGVnZXI9ZnVuY3Rpb24oYil7dGhpcy5oVExWPW51bGw7dGhpcy5pc01vZGlmaWVkPXRydWU7dGhpcy5oVj1LSlVSLmFzbjEuQVNOMVV0aWwuYmlnSW50VG9NaW5Ud29zQ29tcGxlbWVudHNIZXgoYil9O3RoaXMuc2V0QnlJbnRlZ2VyPWZ1bmN0aW9uKGMpe3ZhciBiPW5ldyBCaWdJbnRlZ2VyKFN0cmluZyhjKSwxMCk7dGhpcy5zZXRCeUJpZ0ludGVnZXIoYil9O3RoaXMuc2V0VmFsdWVIZXg9ZnVuY3Rpb24oYil7dGhpcy5oVj1ifTt0aGlzLmdldEZyZXNoVmFsdWVIZXg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oVn07aWYodHlwZW9mIGEhPVwidW5kZWZpbmVkXCIpe2lmKHR5cGVvZiBhLmJpZ2ludCE9XCJ1bmRlZmluZWRcIil7dGhpcy5zZXRCeUJpZ0ludGVnZXIoYS5iaWdpbnQpfWVsc2V7aWYodHlwZW9mIGFbXCJpbnRcIl0hPVwidW5kZWZpbmVkXCIpe3RoaXMuc2V0QnlJbnRlZ2VyKGFbXCJpbnRcIl0pfWVsc2V7aWYodHlwZW9mIGE9PVwibnVtYmVyXCIpe3RoaXMuc2V0QnlJbnRlZ2VyKGEpfWVsc2V7aWYodHlwZW9mIGEuaGV4IT1cInVuZGVmaW5lZFwiKXt0aGlzLnNldFZhbHVlSGV4KGEuaGV4KX19fX19fTtZQUhPTy5sYW5nLmV4dGVuZChLSlVSLmFzbjEuREVSSW50ZWdlcixLSlVSLmFzbjEuQVNOMU9iamVjdCk7S0pVUi5hc24xLkRFUkJpdFN0cmluZz1mdW5jdGlvbihiKXtpZihiIT09dW5kZWZpbmVkJiZ0eXBlb2YgYi5vYmohPT1cInVuZGVmaW5lZFwiKXt2YXIgYT1LSlVSLmFzbjEuQVNOMVV0aWwubmV3T2JqZWN0KGIub2JqKTtiLmhleD1cIjAwXCIrYS5nZXRFbmNvZGVkSGV4KCl9S0pVUi5hc24xLkRFUkJpdFN0cmluZy5zdXBlcmNsYXNzLmNvbnN0cnVjdG9yLmNhbGwodGhpcyk7dGhpcy5oVD1cIjAzXCI7dGhpcy5zZXRIZXhWYWx1ZUluY2x1ZGluZ1VudXNlZEJpdHM9ZnVuY3Rpb24oYyl7dGhpcy5oVExWPW51bGw7dGhpcy5pc01vZGlmaWVkPXRydWU7dGhpcy5oVj1jfTt0aGlzLnNldFVudXNlZEJpdHNBbmRIZXhWYWx1ZT1mdW5jdGlvbihjLGUpe2lmKGM8MHx8NzxjKXt0aHJvd1widW51c2VkIGJpdHMgc2hhbGwgYmUgZnJvbSAwIHRvIDc6IHUgPSBcIitjfXZhciBkPVwiMFwiK2M7dGhpcy5oVExWPW51bGw7dGhpcy5pc01vZGlmaWVkPXRydWU7dGhpcy5oVj1kK2V9O3RoaXMuc2V0QnlCaW5hcnlTdHJpbmc9ZnVuY3Rpb24oZSl7ZT1lLnJlcGxhY2UoLzArJC8sXCJcIik7dmFyIGY9OC1lLmxlbmd0aCU4O2lmKGY9PTgpe2Y9MH1mb3IodmFyIGc9MDtnPD1mO2crKyl7ZSs9XCIwXCJ9dmFyIGo9XCJcIjtmb3IodmFyIGc9MDtnPGUubGVuZ3RoLTE7Zys9OCl7dmFyIGQ9ZS5zdWJzdHIoZyw4KTt2YXIgYz1wYXJzZUludChkLDIpLnRvU3RyaW5nKDE2KTtpZihjLmxlbmd0aD09MSl7Yz1cIjBcIitjfWorPWN9dGhpcy5oVExWPW51bGw7dGhpcy5pc01vZGlmaWVkPXRydWU7dGhpcy5oVj1cIjBcIitmK2p9O3RoaXMuc2V0QnlCb29sZWFuQXJyYXk9ZnVuY3Rpb24oZSl7dmFyIGQ9XCJcIjtmb3IodmFyIGM9MDtjPGUubGVuZ3RoO2MrKyl7aWYoZVtjXT09dHJ1ZSl7ZCs9XCIxXCJ9ZWxzZXtkKz1cIjBcIn19dGhpcy5zZXRCeUJpbmFyeVN0cmluZyhkKX07dGhpcy5uZXdGYWxzZUFycmF5PWZ1bmN0aW9uKGUpe3ZhciBjPW5ldyBBcnJheShlKTtmb3IodmFyIGQ9MDtkPGU7ZCsrKXtjW2RdPWZhbHNlfXJldHVybiBjfTt0aGlzLmdldEZyZXNoVmFsdWVIZXg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oVn07aWYodHlwZW9mIGIhPVwidW5kZWZpbmVkXCIpe2lmKHR5cGVvZiBiPT1cInN0cmluZ1wiJiZiLnRvTG93ZXJDYXNlKCkubWF0Y2goL15bMC05YS1mXSskLykpe3RoaXMuc2V0SGV4VmFsdWVJbmNsdWRpbmdVbnVzZWRCaXRzKGIpfWVsc2V7aWYodHlwZW9mIGIuaGV4IT1cInVuZGVmaW5lZFwiKXt0aGlzLnNldEhleFZhbHVlSW5jbHVkaW5nVW51c2VkQml0cyhiLmhleCl9ZWxzZXtpZih0eXBlb2YgYi5iaW4hPVwidW5kZWZpbmVkXCIpe3RoaXMuc2V0QnlCaW5hcnlTdHJpbmcoYi5iaW4pfWVsc2V7aWYodHlwZW9mIGIuYXJyYXkhPVwidW5kZWZpbmVkXCIpe3RoaXMuc2V0QnlCb29sZWFuQXJyYXkoYi5hcnJheSl9fX19fX07WUFIT08ubGFuZy5leHRlbmQoS0pVUi5hc24xLkRFUkJpdFN0cmluZyxLSlVSLmFzbjEuQVNOMU9iamVjdCk7S0pVUi5hc24xLkRFUk9jdGV0U3RyaW5nPWZ1bmN0aW9uKGIpe2lmKGIhPT11bmRlZmluZWQmJnR5cGVvZiBiLm9iaiE9PVwidW5kZWZpbmVkXCIpe3ZhciBhPUtKVVIuYXNuMS5BU04xVXRpbC5uZXdPYmplY3QoYi5vYmopO2IuaGV4PWEuZ2V0RW5jb2RlZEhleCgpfUtKVVIuYXNuMS5ERVJPY3RldFN0cmluZy5zdXBlcmNsYXNzLmNvbnN0cnVjdG9yLmNhbGwodGhpcyxiKTt0aGlzLmhUPVwiMDRcIn07WUFIT08ubGFuZy5leHRlbmQoS0pVUi5hc24xLkRFUk9jdGV0U3RyaW5nLEtKVVIuYXNuMS5ERVJBYnN0cmFjdFN0cmluZyk7S0pVUi5hc24xLkRFUk51bGw9ZnVuY3Rpb24oKXtLSlVSLmFzbjEuREVSTnVsbC5zdXBlcmNsYXNzLmNvbnN0cnVjdG9yLmNhbGwodGhpcyk7dGhpcy5oVD1cIjA1XCI7dGhpcy5oVExWPVwiMDUwMFwifTtZQUhPTy5sYW5nLmV4dGVuZChLSlVSLmFzbjEuREVSTnVsbCxLSlVSLmFzbjEuQVNOMU9iamVjdCk7S0pVUi5hc24xLkRFUk9iamVjdElkZW50aWZpZXI9ZnVuY3Rpb24oYyl7dmFyIGI9ZnVuY3Rpb24oZCl7dmFyIGU9ZC50b1N0cmluZygxNik7aWYoZS5sZW5ndGg9PTEpe2U9XCIwXCIrZX1yZXR1cm4gZX07dmFyIGE9ZnVuY3Rpb24oayl7dmFyIGo9XCJcIjt2YXIgZT1uZXcgQmlnSW50ZWdlcihrLDEwKTt2YXIgZD1lLnRvU3RyaW5nKDIpO3ZhciBmPTctZC5sZW5ndGglNztpZihmPT03KXtmPTB9dmFyIG09XCJcIjtmb3IodmFyIGc9MDtnPGY7ZysrKXttKz1cIjBcIn1kPW0rZDtmb3IodmFyIGc9MDtnPGQubGVuZ3RoLTE7Zys9Nyl7dmFyIGw9ZC5zdWJzdHIoZyw3KTtpZihnIT1kLmxlbmd0aC03KXtsPVwiMVwiK2x9ais9YihwYXJzZUludChsLDIpKX1yZXR1cm4gan07S0pVUi5hc24xLkRFUk9iamVjdElkZW50aWZpZXIuc3VwZXJjbGFzcy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMpO3RoaXMuaFQ9XCIwNlwiO3RoaXMuc2V0VmFsdWVIZXg9ZnVuY3Rpb24oZCl7dGhpcy5oVExWPW51bGw7dGhpcy5pc01vZGlmaWVkPXRydWU7dGhpcy5zPW51bGw7dGhpcy5oVj1kfTt0aGlzLnNldFZhbHVlT2lkU3RyaW5nPWZ1bmN0aW9uKGYpe2lmKCFmLm1hdGNoKC9eWzAtOS5dKyQvKSl7dGhyb3dcIm1hbGZvcm1lZCBvaWQgc3RyaW5nOiBcIitmfXZhciBnPVwiXCI7dmFyIGQ9Zi5zcGxpdChcIi5cIik7dmFyIGo9cGFyc2VJbnQoZFswXSkqNDArcGFyc2VJbnQoZFsxXSk7Zys9YihqKTtkLnNwbGljZSgwLDIpO2Zvcih2YXIgZT0wO2U8ZC5sZW5ndGg7ZSsrKXtnKz1hKGRbZV0pfXRoaXMuaFRMVj1udWxsO3RoaXMuaXNNb2RpZmllZD10cnVlO3RoaXMucz1udWxsO3RoaXMuaFY9Z307dGhpcy5zZXRWYWx1ZU5hbWU9ZnVuY3Rpb24oZSl7dmFyIGQ9S0pVUi5hc24xLng1MDkuT0lELm5hbWUyb2lkKGUpO2lmKGQhPT1cIlwiKXt0aGlzLnNldFZhbHVlT2lkU3RyaW5nKGQpfWVsc2V7dGhyb3dcIkRFUk9iamVjdElkZW50aWZpZXIgb2lkTmFtZSB1bmRlZmluZWQ6IFwiK2V9fTt0aGlzLmdldEZyZXNoVmFsdWVIZXg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oVn07aWYoYyE9PXVuZGVmaW5lZCl7aWYodHlwZW9mIGM9PT1cInN0cmluZ1wiKXtpZihjLm1hdGNoKC9eWzAtMl0uWzAtOS5dKyQvKSl7dGhpcy5zZXRWYWx1ZU9pZFN0cmluZyhjKX1lbHNle3RoaXMuc2V0VmFsdWVOYW1lKGMpfX1lbHNle2lmKGMub2lkIT09dW5kZWZpbmVkKXt0aGlzLnNldFZhbHVlT2lkU3RyaW5nKGMub2lkKX1lbHNle2lmKGMuaGV4IT09dW5kZWZpbmVkKXt0aGlzLnNldFZhbHVlSGV4KGMuaGV4KX1lbHNle2lmKGMubmFtZSE9PXVuZGVmaW5lZCl7dGhpcy5zZXRWYWx1ZU5hbWUoYy5uYW1lKX19fX19fTtZQUhPTy5sYW5nLmV4dGVuZChLSlVSLmFzbjEuREVST2JqZWN0SWRlbnRpZmllcixLSlVSLmFzbjEuQVNOMU9iamVjdCk7S0pVUi5hc24xLkRFUkVudW1lcmF0ZWQ9ZnVuY3Rpb24oYSl7S0pVUi5hc24xLkRFUkVudW1lcmF0ZWQuc3VwZXJjbGFzcy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMpO3RoaXMuaFQ9XCIwYVwiO3RoaXMuc2V0QnlCaWdJbnRlZ2VyPWZ1bmN0aW9uKGIpe3RoaXMuaFRMVj1udWxsO3RoaXMuaXNNb2RpZmllZD10cnVlO3RoaXMuaFY9S0pVUi5hc24xLkFTTjFVdGlsLmJpZ0ludFRvTWluVHdvc0NvbXBsZW1lbnRzSGV4KGIpfTt0aGlzLnNldEJ5SW50ZWdlcj1mdW5jdGlvbihjKXt2YXIgYj1uZXcgQmlnSW50ZWdlcihTdHJpbmcoYyksMTApO3RoaXMuc2V0QnlCaWdJbnRlZ2VyKGIpfTt0aGlzLnNldFZhbHVlSGV4PWZ1bmN0aW9uKGIpe3RoaXMuaFY9Yn07dGhpcy5nZXRGcmVzaFZhbHVlSGV4PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaFZ9O2lmKHR5cGVvZiBhIT1cInVuZGVmaW5lZFwiKXtpZih0eXBlb2YgYVtcImludFwiXSE9XCJ1bmRlZmluZWRcIil7dGhpcy5zZXRCeUludGVnZXIoYVtcImludFwiXSl9ZWxzZXtpZih0eXBlb2YgYT09XCJudW1iZXJcIil7dGhpcy5zZXRCeUludGVnZXIoYSl9ZWxzZXtpZih0eXBlb2YgYS5oZXghPVwidW5kZWZpbmVkXCIpe3RoaXMuc2V0VmFsdWVIZXgoYS5oZXgpfX19fX07WUFIT08ubGFuZy5leHRlbmQoS0pVUi5hc24xLkRFUkVudW1lcmF0ZWQsS0pVUi5hc24xLkFTTjFPYmplY3QpO0tKVVIuYXNuMS5ERVJVVEY4U3RyaW5nPWZ1bmN0aW9uKGEpe0tKVVIuYXNuMS5ERVJVVEY4U3RyaW5nLnN1cGVyY2xhc3MuY29uc3RydWN0b3IuY2FsbCh0aGlzLGEpO3RoaXMuaFQ9XCIwY1wifTtZQUhPTy5sYW5nLmV4dGVuZChLSlVSLmFzbjEuREVSVVRGOFN0cmluZyxLSlVSLmFzbjEuREVSQWJzdHJhY3RTdHJpbmcpO0tKVVIuYXNuMS5ERVJOdW1lcmljU3RyaW5nPWZ1bmN0aW9uKGEpe0tKVVIuYXNuMS5ERVJOdW1lcmljU3RyaW5nLnN1cGVyY2xhc3MuY29uc3RydWN0b3IuY2FsbCh0aGlzLGEpO3RoaXMuaFQ9XCIxMlwifTtZQUhPTy5sYW5nLmV4dGVuZChLSlVSLmFzbjEuREVSTnVtZXJpY1N0cmluZyxLSlVSLmFzbjEuREVSQWJzdHJhY3RTdHJpbmcpO0tKVVIuYXNuMS5ERVJQcmludGFibGVTdHJpbmc9ZnVuY3Rpb24oYSl7S0pVUi5hc24xLkRFUlByaW50YWJsZVN0cmluZy5zdXBlcmNsYXNzLmNvbnN0cnVjdG9yLmNhbGwodGhpcyxhKTt0aGlzLmhUPVwiMTNcIn07WUFIT08ubGFuZy5leHRlbmQoS0pVUi5hc24xLkRFUlByaW50YWJsZVN0cmluZyxLSlVSLmFzbjEuREVSQWJzdHJhY3RTdHJpbmcpO0tKVVIuYXNuMS5ERVJUZWxldGV4U3RyaW5nPWZ1bmN0aW9uKGEpe0tKVVIuYXNuMS5ERVJUZWxldGV4U3RyaW5nLnN1cGVyY2xhc3MuY29uc3RydWN0b3IuY2FsbCh0aGlzLGEpO3RoaXMuaFQ9XCIxNFwifTtZQUhPTy5sYW5nLmV4dGVuZChLSlVSLmFzbjEuREVSVGVsZXRleFN0cmluZyxLSlVSLmFzbjEuREVSQWJzdHJhY3RTdHJpbmcpO0tKVVIuYXNuMS5ERVJJQTVTdHJpbmc9ZnVuY3Rpb24oYSl7S0pVUi5hc24xLkRFUklBNVN0cmluZy5zdXBlcmNsYXNzLmNvbnN0cnVjdG9yLmNhbGwodGhpcyxhKTt0aGlzLmhUPVwiMTZcIn07WUFIT08ubGFuZy5leHRlbmQoS0pVUi5hc24xLkRFUklBNVN0cmluZyxLSlVSLmFzbjEuREVSQWJzdHJhY3RTdHJpbmcpO0tKVVIuYXNuMS5ERVJVVENUaW1lPWZ1bmN0aW9uKGEpe0tKVVIuYXNuMS5ERVJVVENUaW1lLnN1cGVyY2xhc3MuY29uc3RydWN0b3IuY2FsbCh0aGlzLGEpO3RoaXMuaFQ9XCIxN1wiO3RoaXMuc2V0QnlEYXRlPWZ1bmN0aW9uKGIpe3RoaXMuaFRMVj1udWxsO3RoaXMuaXNNb2RpZmllZD10cnVlO3RoaXMuZGF0ZT1iO3RoaXMucz10aGlzLmZvcm1hdERhdGUodGhpcy5kYXRlLFwidXRjXCIpO3RoaXMuaFY9c3RvaGV4KHRoaXMucyl9O3RoaXMuZ2V0RnJlc2hWYWx1ZUhleD1mdW5jdGlvbigpe2lmKHR5cGVvZiB0aGlzLmRhdGU9PVwidW5kZWZpbmVkXCImJnR5cGVvZiB0aGlzLnM9PVwidW5kZWZpbmVkXCIpe3RoaXMuZGF0ZT1uZXcgRGF0ZSgpO3RoaXMucz10aGlzLmZvcm1hdERhdGUodGhpcy5kYXRlLFwidXRjXCIpO3RoaXMuaFY9c3RvaGV4KHRoaXMucyl9cmV0dXJuIHRoaXMuaFZ9O2lmKGEhPT11bmRlZmluZWQpe2lmKGEuc3RyIT09dW5kZWZpbmVkKXt0aGlzLnNldFN0cmluZyhhLnN0cil9ZWxzZXtpZih0eXBlb2YgYT09XCJzdHJpbmdcIiYmYS5tYXRjaCgvXlswLTldezEyfVokLykpe3RoaXMuc2V0U3RyaW5nKGEpfWVsc2V7aWYoYS5oZXghPT11bmRlZmluZWQpe3RoaXMuc2V0U3RyaW5nSGV4KGEuaGV4KX1lbHNle2lmKGEuZGF0ZSE9PXVuZGVmaW5lZCl7dGhpcy5zZXRCeURhdGUoYS5kYXRlKX19fX19fTtZQUhPTy5sYW5nLmV4dGVuZChLSlVSLmFzbjEuREVSVVRDVGltZSxLSlVSLmFzbjEuREVSQWJzdHJhY3RUaW1lKTtLSlVSLmFzbjEuREVSR2VuZXJhbGl6ZWRUaW1lPWZ1bmN0aW9uKGEpe0tKVVIuYXNuMS5ERVJHZW5lcmFsaXplZFRpbWUuc3VwZXJjbGFzcy5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsYSk7dGhpcy5oVD1cIjE4XCI7dGhpcy53aXRoTWlsbGlzPWZhbHNlO3RoaXMuc2V0QnlEYXRlPWZ1bmN0aW9uKGIpe3RoaXMuaFRMVj1udWxsO3RoaXMuaXNNb2RpZmllZD10cnVlO3RoaXMuZGF0ZT1iO3RoaXMucz10aGlzLmZvcm1hdERhdGUodGhpcy5kYXRlLFwiZ2VuXCIsdGhpcy53aXRoTWlsbGlzKTt0aGlzLmhWPXN0b2hleCh0aGlzLnMpfTt0aGlzLmdldEZyZXNoVmFsdWVIZXg9ZnVuY3Rpb24oKXtpZih0aGlzLmRhdGU9PT11bmRlZmluZWQmJnRoaXMucz09PXVuZGVmaW5lZCl7dGhpcy5kYXRlPW5ldyBEYXRlKCk7dGhpcy5zPXRoaXMuZm9ybWF0RGF0ZSh0aGlzLmRhdGUsXCJnZW5cIix0aGlzLndpdGhNaWxsaXMpO3RoaXMuaFY9c3RvaGV4KHRoaXMucyl9cmV0dXJuIHRoaXMuaFZ9O2lmKGEhPT11bmRlZmluZWQpe2lmKGEuc3RyIT09dW5kZWZpbmVkKXt0aGlzLnNldFN0cmluZyhhLnN0cil9ZWxzZXtpZih0eXBlb2YgYT09XCJzdHJpbmdcIiYmYS5tYXRjaCgvXlswLTldezE0fVokLykpe3RoaXMuc2V0U3RyaW5nKGEpfWVsc2V7aWYoYS5oZXghPT11bmRlZmluZWQpe3RoaXMuc2V0U3RyaW5nSGV4KGEuaGV4KX1lbHNle2lmKGEuZGF0ZSE9PXVuZGVmaW5lZCl7dGhpcy5zZXRCeURhdGUoYS5kYXRlKX19fX1pZihhLm1pbGxpcz09PXRydWUpe3RoaXMud2l0aE1pbGxpcz10cnVlfX19O1lBSE9PLmxhbmcuZXh0ZW5kKEtKVVIuYXNuMS5ERVJHZW5lcmFsaXplZFRpbWUsS0pVUi5hc24xLkRFUkFic3RyYWN0VGltZSk7S0pVUi5hc24xLkRFUlNlcXVlbmNlPWZ1bmN0aW9uKGEpe0tKVVIuYXNuMS5ERVJTZXF1ZW5jZS5zdXBlcmNsYXNzLmNvbnN0cnVjdG9yLmNhbGwodGhpcyxhKTt0aGlzLmhUPVwiMzBcIjt0aGlzLmdldEZyZXNoVmFsdWVIZXg9ZnVuY3Rpb24oKXt2YXIgYz1cIlwiO2Zvcih2YXIgYj0wO2I8dGhpcy5hc24xQXJyYXkubGVuZ3RoO2IrKyl7dmFyIGQ9dGhpcy5hc24xQXJyYXlbYl07Yys9ZC5nZXRFbmNvZGVkSGV4KCl9dGhpcy5oVj1jO3JldHVybiB0aGlzLmhWfX07WUFIT08ubGFuZy5leHRlbmQoS0pVUi5hc24xLkRFUlNlcXVlbmNlLEtKVVIuYXNuMS5ERVJBYnN0cmFjdFN0cnVjdHVyZWQpO0tKVVIuYXNuMS5ERVJTZXQ9ZnVuY3Rpb24oYSl7S0pVUi5hc24xLkRFUlNldC5zdXBlcmNsYXNzLmNvbnN0cnVjdG9yLmNhbGwodGhpcyxhKTt0aGlzLmhUPVwiMzFcIjt0aGlzLnNvcnRGbGFnPXRydWU7dGhpcy5nZXRGcmVzaFZhbHVlSGV4PWZ1bmN0aW9uKCl7dmFyIGI9bmV3IEFycmF5KCk7Zm9yKHZhciBjPTA7Yzx0aGlzLmFzbjFBcnJheS5sZW5ndGg7YysrKXt2YXIgZD10aGlzLmFzbjFBcnJheVtjXTtiLnB1c2goZC5nZXRFbmNvZGVkSGV4KCkpfWlmKHRoaXMuc29ydEZsYWc9PXRydWUpe2Iuc29ydCgpfXRoaXMuaFY9Yi5qb2luKFwiXCIpO3JldHVybiB0aGlzLmhWfTtpZih0eXBlb2YgYSE9XCJ1bmRlZmluZWRcIil7aWYodHlwZW9mIGEuc29ydGZsYWchPVwidW5kZWZpbmVkXCImJmEuc29ydGZsYWc9PWZhbHNlKXt0aGlzLnNvcnRGbGFnPWZhbHNlfX19O1lBSE9PLmxhbmcuZXh0ZW5kKEtKVVIuYXNuMS5ERVJTZXQsS0pVUi5hc24xLkRFUkFic3RyYWN0U3RydWN0dXJlZCk7S0pVUi5hc24xLkRFUlRhZ2dlZE9iamVjdD1mdW5jdGlvbihhKXtLSlVSLmFzbjEuREVSVGFnZ2VkT2JqZWN0LnN1cGVyY2xhc3MuY29uc3RydWN0b3IuY2FsbCh0aGlzKTt0aGlzLmhUPVwiYTBcIjt0aGlzLmhWPVwiXCI7dGhpcy5pc0V4cGxpY2l0PXRydWU7dGhpcy5hc24xT2JqZWN0PW51bGw7dGhpcy5zZXRBU04xT2JqZWN0PWZ1bmN0aW9uKGIsYyxkKXt0aGlzLmhUPWM7dGhpcy5pc0V4cGxpY2l0PWI7dGhpcy5hc24xT2JqZWN0PWQ7aWYodGhpcy5pc0V4cGxpY2l0KXt0aGlzLmhWPXRoaXMuYXNuMU9iamVjdC5nZXRFbmNvZGVkSGV4KCk7dGhpcy5oVExWPW51bGw7dGhpcy5pc01vZGlmaWVkPXRydWV9ZWxzZXt0aGlzLmhWPW51bGw7dGhpcy5oVExWPWQuZ2V0RW5jb2RlZEhleCgpO3RoaXMuaFRMVj10aGlzLmhUTFYucmVwbGFjZSgvXi4uLyxjKTt0aGlzLmlzTW9kaWZpZWQ9ZmFsc2V9fTt0aGlzLmdldEZyZXNoVmFsdWVIZXg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oVn07aWYodHlwZW9mIGEhPVwidW5kZWZpbmVkXCIpe2lmKHR5cGVvZiBhLnRhZyE9XCJ1bmRlZmluZWRcIil7dGhpcy5oVD1hLnRhZ31pZih0eXBlb2YgYS5leHBsaWNpdCE9XCJ1bmRlZmluZWRcIil7dGhpcy5pc0V4cGxpY2l0PWEuZXhwbGljaXR9aWYodHlwZW9mIGEub2JqIT1cInVuZGVmaW5lZFwiKXt0aGlzLmFzbjFPYmplY3Q9YS5vYmo7dGhpcy5zZXRBU04xT2JqZWN0KHRoaXMuaXNFeHBsaWNpdCx0aGlzLmhULHRoaXMuYXNuMU9iamVjdCl9fX07WUFIT08ubGFuZy5leHRlbmQoS0pVUi5hc24xLkRFUlRhZ2dlZE9iamVjdCxLSlVSLmFzbjEuQVNOMU9iamVjdCk7XG52YXIgQVNOMUhFWD1uZXcgZnVuY3Rpb24oKXt9O0FTTjFIRVguZ2V0TGJsZW49ZnVuY3Rpb24oYyxhKXtpZihjLnN1YnN0cihhKzIsMSkhPVwiOFwiKXtyZXR1cm4gMX12YXIgYj1wYXJzZUludChjLnN1YnN0cihhKzMsMSkpO2lmKGI9PTApe3JldHVybiAtMX1pZigwPGImJmI8MTApe3JldHVybiBiKzF9cmV0dXJuIC0yfTtBU04xSEVYLmdldEw9ZnVuY3Rpb24oYyxiKXt2YXIgYT1BU04xSEVYLmdldExibGVuKGMsYik7aWYoYTwxKXtyZXR1cm5cIlwifXJldHVybiBjLnN1YnN0cihiKzIsYSoyKX07QVNOMUhFWC5nZXRWYmxlbj1mdW5jdGlvbihkLGEpe3ZhciBjLGI7Yz1BU04xSEVYLmdldEwoZCxhKTtpZihjPT1cIlwiKXtyZXR1cm4gLTF9aWYoYy5zdWJzdHIoMCwxKT09PVwiOFwiKXtiPW5ldyBCaWdJbnRlZ2VyKGMuc3Vic3RyKDIpLDE2KX1lbHNle2I9bmV3IEJpZ0ludGVnZXIoYywxNil9cmV0dXJuIGIuaW50VmFsdWUoKX07QVNOMUhFWC5nZXRWaWR4PWZ1bmN0aW9uKGMsYil7dmFyIGE9QVNOMUhFWC5nZXRMYmxlbihjLGIpO2lmKGE8MCl7cmV0dXJuIGF9cmV0dXJuIGIrKGErMSkqMn07QVNOMUhFWC5nZXRWPWZ1bmN0aW9uKGQsYSl7dmFyIGM9QVNOMUhFWC5nZXRWaWR4KGQsYSk7dmFyIGI9QVNOMUhFWC5nZXRWYmxlbihkLGEpO3JldHVybiBkLnN1YnN0cihjLGIqMil9O0FTTjFIRVguZ2V0VExWPWZ1bmN0aW9uKGIsYSl7cmV0dXJuIGIuc3Vic3RyKGEsMikrQVNOMUhFWC5nZXRMKGIsYSkrQVNOMUhFWC5nZXRWKGIsYSl9O0FTTjFIRVguZ2V0TmV4dFNpYmxpbmdJZHg9ZnVuY3Rpb24oZCxhKXt2YXIgYz1BU04xSEVYLmdldFZpZHgoZCxhKTt2YXIgYj1BU04xSEVYLmdldFZibGVuKGQsYSk7cmV0dXJuIGMrYioyfTtBU04xSEVYLmdldENoaWxkSWR4PWZ1bmN0aW9uKGUsZil7dmFyIGo9QVNOMUhFWDt2YXIgZz1uZXcgQXJyYXkoKTt2YXIgaT1qLmdldFZpZHgoZSxmKTtpZihlLnN1YnN0cihmLDIpPT1cIjAzXCIpe2cucHVzaChpKzIpfWVsc2V7Zy5wdXNoKGkpfXZhciBsPWouZ2V0VmJsZW4oZSxmKTt2YXIgYz1pO3ZhciBkPTA7d2hpbGUoMSl7dmFyIGI9ai5nZXROZXh0U2libGluZ0lkeChlLGMpO2lmKGI9PW51bGx8fChiLWk+PShsKjIpKSl7YnJlYWt9aWYoZD49MjAwKXticmVha31nLnB1c2goYik7Yz1iO2QrK31yZXR1cm4gZ307QVNOMUhFWC5nZXROdGhDaGlsZElkeD1mdW5jdGlvbihkLGIsZSl7dmFyIGM9QVNOMUhFWC5nZXRDaGlsZElkeChkLGIpO3JldHVybiBjW2VdfTtBU04xSEVYLmdldElkeGJ5TGlzdD1mdW5jdGlvbihlLGQsYyxpKXt2YXIgZz1BU04xSEVYO3ZhciBmLGI7aWYoYy5sZW5ndGg9PTApe2lmKGkhPT11bmRlZmluZWQpe2lmKGUuc3Vic3RyKGQsMikhPT1pKXt0aHJvd1wiY2hlY2tpbmcgdGFnIGRvZXNuJ3QgbWF0Y2g6IFwiK2Uuc3Vic3RyKGQsMikrXCIhPVwiK2l9fXJldHVybiBkfWY9Yy5zaGlmdCgpO2I9Zy5nZXRDaGlsZElkeChlLGQpO3JldHVybiBnLmdldElkeGJ5TGlzdChlLGJbZl0sYyxpKX07QVNOMUhFWC5nZXRUTFZieUxpc3Q9ZnVuY3Rpb24oZCxjLGIsZil7dmFyIGU9QVNOMUhFWDt2YXIgYT1lLmdldElkeGJ5TGlzdChkLGMsYik7aWYoYT09PXVuZGVmaW5lZCl7dGhyb3dcImNhbid0IGZpbmQgbnRoTGlzdCBvYmplY3RcIn1pZihmIT09dW5kZWZpbmVkKXtpZihkLnN1YnN0cihhLDIpIT1mKXt0aHJvd1wiY2hlY2tpbmcgdGFnIGRvZXNuJ3QgbWF0Y2g6IFwiK2Quc3Vic3RyKGEsMikrXCIhPVwiK2Z9fXJldHVybiBlLmdldFRMVihkLGEpfTtBU04xSEVYLmdldFZieUxpc3Q9ZnVuY3Rpb24oZSxjLGIsZyxpKXt2YXIgZj1BU04xSEVYO3ZhciBhLGQ7YT1mLmdldElkeGJ5TGlzdChlLGMsYixnKTtpZihhPT09dW5kZWZpbmVkKXt0aHJvd1wiY2FuJ3QgZmluZCBudGhMaXN0IG9iamVjdFwifWQ9Zi5nZXRWKGUsYSk7aWYoaT09PXRydWUpe2Q9ZC5zdWJzdHIoMil9cmV0dXJuIGR9O0FTTjFIRVguaGV4dG9vaWRzdHI9ZnVuY3Rpb24oZSl7dmFyIGg9ZnVuY3Rpb24oYixhKXtpZihiLmxlbmd0aD49YSl7cmV0dXJuIGJ9cmV0dXJuIG5ldyBBcnJheShhLWIubGVuZ3RoKzEpLmpvaW4oXCIwXCIpK2J9O3ZhciBsPVtdO3ZhciBvPWUuc3Vic3RyKDAsMik7dmFyIGY9cGFyc2VJbnQobywxNik7bFswXT1uZXcgU3RyaW5nKE1hdGguZmxvb3IoZi80MCkpO2xbMV09bmV3IFN0cmluZyhmJTQwKTt2YXIgbT1lLnN1YnN0cigyKTt2YXIgaz1bXTtmb3IodmFyIGc9MDtnPG0ubGVuZ3RoLzI7ZysrKXtrLnB1c2gocGFyc2VJbnQobS5zdWJzdHIoZyoyLDIpLDE2KSl9dmFyIGo9W107dmFyIGQ9XCJcIjtmb3IodmFyIGc9MDtnPGsubGVuZ3RoO2crKyl7aWYoa1tnXSYxMjgpe2Q9ZCtoKChrW2ddJjEyNykudG9TdHJpbmcoMiksNyl9ZWxzZXtkPWQraCgoa1tnXSYxMjcpLnRvU3RyaW5nKDIpLDcpO2oucHVzaChuZXcgU3RyaW5nKHBhcnNlSW50KGQsMikpKTtkPVwiXCJ9fXZhciBuPWwuam9pbihcIi5cIik7aWYoai5sZW5ndGg+MCl7bj1uK1wiLlwiK2ouam9pbihcIi5cIil9cmV0dXJuIG59O0FTTjFIRVguZHVtcD1mdW5jdGlvbih0LGMsbCxnKXt2YXIgcD1BU04xSEVYO3ZhciBqPXAuZ2V0Vjt2YXIgeT1wLmR1bXA7dmFyIHc9cC5nZXRDaGlsZElkeDt2YXIgZT10O2lmKHQgaW5zdGFuY2VvZiBLSlVSLmFzbjEuQVNOMU9iamVjdCl7ZT10LmdldEVuY29kZWRIZXgoKX12YXIgcT1mdW5jdGlvbihBLGkpe2lmKEEubGVuZ3RoPD1pKjIpe3JldHVybiBBfWVsc2V7dmFyIHY9QS5zdWJzdHIoMCxpKStcIi4uKHRvdGFsIFwiK0EubGVuZ3RoLzIrXCJieXRlcykuLlwiK0Euc3Vic3RyKEEubGVuZ3RoLWksaSk7cmV0dXJuIHZ9fTtpZihjPT09dW5kZWZpbmVkKXtjPXtvbW1pdF9sb25nX29jdGV0OjMyfX1pZihsPT09dW5kZWZpbmVkKXtsPTB9aWYoZz09PXVuZGVmaW5lZCl7Zz1cIlwifXZhciB4PWMub21taXRfbG9uZ19vY3RldDtpZihlLnN1YnN0cihsLDIpPT1cIjAxXCIpe3ZhciBoPWooZSxsKTtpZihoPT1cIjAwXCIpe3JldHVybiBnK1wiQk9PTEVBTiBGQUxTRVxcblwifWVsc2V7cmV0dXJuIGcrXCJCT09MRUFOIFRSVUVcXG5cIn19aWYoZS5zdWJzdHIobCwyKT09XCIwMlwiKXt2YXIgaD1qKGUsbCk7cmV0dXJuIGcrXCJJTlRFR0VSIFwiK3EoaCx4KStcIlxcblwifWlmKGUuc3Vic3RyKGwsMik9PVwiMDNcIil7dmFyIGg9aihlLGwpO3JldHVybiBnK1wiQklUU1RSSU5HIFwiK3EoaCx4KStcIlxcblwifWlmKGUuc3Vic3RyKGwsMik9PVwiMDRcIil7dmFyIGg9aihlLGwpO2lmKHAuaXNBU04xSEVYKGgpKXt2YXIgaz1nK1wiT0NURVRTVFJJTkcsIGVuY2Fwc3VsYXRlc1xcblwiO2s9ayt5KGgsYywwLGcrXCIgIFwiKTtyZXR1cm4ga31lbHNle3JldHVybiBnK1wiT0NURVRTVFJJTkcgXCIrcShoLHgpK1wiXFxuXCJ9fWlmKGUuc3Vic3RyKGwsMik9PVwiMDVcIil7cmV0dXJuIGcrXCJOVUxMXFxuXCJ9aWYoZS5zdWJzdHIobCwyKT09XCIwNlwiKXt2YXIgbT1qKGUsbCk7dmFyIGE9S0pVUi5hc24xLkFTTjFVdGlsLm9pZEhleFRvSW50KG0pO3ZhciBvPUtKVVIuYXNuMS54NTA5Lk9JRC5vaWQybmFtZShhKTt2YXIgYj1hLnJlcGxhY2UoL1xcLi9nLFwiIFwiKTtpZihvIT1cIlwiKXtyZXR1cm4gZytcIk9iamVjdElkZW50aWZpZXIgXCIrbytcIiAoXCIrYitcIilcXG5cIn1lbHNle3JldHVybiBnK1wiT2JqZWN0SWRlbnRpZmllciAoXCIrYitcIilcXG5cIn19aWYoZS5zdWJzdHIobCwyKT09XCIwY1wiKXtyZXR1cm4gZytcIlVURjhTdHJpbmcgJ1wiK2hleHRvdXRmOChqKGUsbCkpK1wiJ1xcblwifWlmKGUuc3Vic3RyKGwsMik9PVwiMTNcIil7cmV0dXJuIGcrXCJQcmludGFibGVTdHJpbmcgJ1wiK2hleHRvdXRmOChqKGUsbCkpK1wiJ1xcblwifWlmKGUuc3Vic3RyKGwsMik9PVwiMTRcIil7cmV0dXJuIGcrXCJUZWxldGV4U3RyaW5nICdcIitoZXh0b3V0ZjgoaihlLGwpKStcIidcXG5cIn1pZihlLnN1YnN0cihsLDIpPT1cIjE2XCIpe3JldHVybiBnK1wiSUE1U3RyaW5nICdcIitoZXh0b3V0ZjgoaihlLGwpKStcIidcXG5cIn1pZihlLnN1YnN0cihsLDIpPT1cIjE3XCIpe3JldHVybiBnK1wiVVRDVGltZSBcIitoZXh0b3V0ZjgoaihlLGwpKStcIlxcblwifWlmKGUuc3Vic3RyKGwsMik9PVwiMThcIil7cmV0dXJuIGcrXCJHZW5lcmFsaXplZFRpbWUgXCIraGV4dG91dGY4KGooZSxsKSkrXCJcXG5cIn1pZihlLnN1YnN0cihsLDIpPT1cIjMwXCIpe2lmKGUuc3Vic3RyKGwsNCk9PVwiMzAwMFwiKXtyZXR1cm4gZytcIlNFUVVFTkNFIHt9XFxuXCJ9dmFyIGs9ZytcIlNFUVVFTkNFXFxuXCI7dmFyIGQ9dyhlLGwpO3ZhciBmPWM7aWYoKGQubGVuZ3RoPT0yfHxkLmxlbmd0aD09MykmJmUuc3Vic3RyKGRbMF0sMik9PVwiMDZcIiYmZS5zdWJzdHIoZFtkLmxlbmd0aC0xXSwyKT09XCIwNFwiKXt2YXIgbz1wLm9pZG5hbWUoaihlLGRbMF0pKTt2YXIgcj1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGMpKTtyLng1MDlFeHROYW1lPW87Zj1yfWZvcih2YXIgdT0wO3U8ZC5sZW5ndGg7dSsrKXtrPWsreShlLGYsZFt1XSxnK1wiICBcIil9cmV0dXJuIGt9aWYoZS5zdWJzdHIobCwyKT09XCIzMVwiKXt2YXIgaz1nK1wiU0VUXFxuXCI7dmFyIGQ9dyhlLGwpO2Zvcih2YXIgdT0wO3U8ZC5sZW5ndGg7dSsrKXtrPWsreShlLGMsZFt1XSxnK1wiICBcIil9cmV0dXJuIGt9dmFyIHo9cGFyc2VJbnQoZS5zdWJzdHIobCwyKSwxNik7aWYoKHomMTI4KSE9MCl7dmFyIG49eiYzMTtpZigoeiYzMikhPTApe3ZhciBrPWcrXCJbXCIrbitcIl1cXG5cIjt2YXIgZD13KGUsbCk7Zm9yKHZhciB1PTA7dTxkLmxlbmd0aDt1Kyspe2s9ayt5KGUsYyxkW3VdLGcrXCIgIFwiKX1yZXR1cm4ga31lbHNle3ZhciBoPWooZSxsKTtpZihoLnN1YnN0cigwLDgpPT1cIjY4NzQ3NDcwXCIpe2g9aGV4dG91dGY4KGgpfWlmKGMueDUwOUV4dE5hbWU9PT1cInN1YmplY3RBbHROYW1lXCImJm49PTIpe2g9aGV4dG91dGY4KGgpfXZhciBrPWcrXCJbXCIrbitcIl0gXCIraCtcIlxcblwiO3JldHVybiBrfX1yZXR1cm4gZytcIlVOS05PV04oXCIrZS5zdWJzdHIobCwyKStcIikgXCIraihlLGwpK1wiXFxuXCJ9O0FTTjFIRVguaXNBU04xSEVYPWZ1bmN0aW9uKGUpe3ZhciBkPUFTTjFIRVg7aWYoZS5sZW5ndGglMj09MSl7cmV0dXJuIGZhbHNlfXZhciBjPWQuZ2V0VmJsZW4oZSwwKTt2YXIgYj1lLnN1YnN0cigwLDIpO3ZhciBmPWQuZ2V0TChlLDApO3ZhciBhPWUubGVuZ3RoLWIubGVuZ3RoLWYubGVuZ3RoO2lmKGE9PWMqMil7cmV0dXJuIHRydWV9cmV0dXJuIGZhbHNlfTtBU04xSEVYLm9pZG5hbWU9ZnVuY3Rpb24oYSl7dmFyIGM9S0pVUi5hc24xO2lmKEtKVVIubGFuZy5TdHJpbmcuaXNIZXgoYSkpe2E9Yy5BU04xVXRpbC5vaWRIZXhUb0ludChhKX12YXIgYj1jLng1MDkuT0lELm9pZDJuYW1lKGEpO2lmKGI9PT1cIlwiKXtiPWF9cmV0dXJuIGJ9O1xudmFyIEtKVVI7aWYodHlwZW9mIEtKVVI9PVwidW5kZWZpbmVkXCJ8fCFLSlVSKXtLSlVSPXt9fWlmKHR5cGVvZiBLSlVSLmxhbmc9PVwidW5kZWZpbmVkXCJ8fCFLSlVSLmxhbmcpe0tKVVIubGFuZz17fX1LSlVSLmxhbmcuU3RyaW5nPWZ1bmN0aW9uKCl7fTtmdW5jdGlvbiBCYXNlNjR4KCl7fWZ1bmN0aW9uIHN0b0JBKGQpe3ZhciBiPW5ldyBBcnJheSgpO2Zvcih2YXIgYz0wO2M8ZC5sZW5ndGg7YysrKXtiW2NdPWQuY2hhckNvZGVBdChjKX1yZXR1cm4gYn1mdW5jdGlvbiBCQXRvcyhiKXt2YXIgZD1cIlwiO2Zvcih2YXIgYz0wO2M8Yi5sZW5ndGg7YysrKXtkPWQrU3RyaW5nLmZyb21DaGFyQ29kZShiW2NdKX1yZXR1cm4gZH1mdW5jdGlvbiBCQXRvaGV4KGIpe3ZhciBlPVwiXCI7Zm9yKHZhciBkPTA7ZDxiLmxlbmd0aDtkKyspe3ZhciBjPWJbZF0udG9TdHJpbmcoMTYpO2lmKGMubGVuZ3RoPT0xKXtjPVwiMFwiK2N9ZT1lK2N9cmV0dXJuIGV9ZnVuY3Rpb24gc3RvaGV4KGEpe3JldHVybiBCQXRvaGV4KHN0b0JBKGEpKX1mdW5jdGlvbiBzdG9iNjQoYSl7cmV0dXJuIGhleDJiNjQoc3RvaGV4KGEpKX1mdW5jdGlvbiBzdG9iNjR1KGEpe3JldHVybiBiNjR0b2I2NHUoaGV4MmI2NChzdG9oZXgoYSkpKX1mdW5jdGlvbiBiNjR1dG9zKGEpe3JldHVybiBCQXRvcyhiNjR0b0JBKGI2NHV0b2I2NChhKSkpfWZ1bmN0aW9uIGI2NHRvYjY0dShhKXthPWEucmVwbGFjZSgvXFw9L2csXCJcIik7YT1hLnJlcGxhY2UoL1xcKy9nLFwiLVwiKTthPWEucmVwbGFjZSgvXFwvL2csXCJfXCIpO3JldHVybiBhfWZ1bmN0aW9uIGI2NHV0b2I2NChhKXtpZihhLmxlbmd0aCU0PT0yKXthPWErXCI9PVwifWVsc2V7aWYoYS5sZW5ndGglND09Myl7YT1hK1wiPVwifX1hPWEucmVwbGFjZSgvLS9nLFwiK1wiKTthPWEucmVwbGFjZSgvXy9nLFwiL1wiKTtyZXR1cm4gYX1mdW5jdGlvbiBoZXh0b2I2NHUoYSl7aWYoYS5sZW5ndGglMj09MSl7YT1cIjBcIithfXJldHVybiBiNjR0b2I2NHUoaGV4MmI2NChhKSl9ZnVuY3Rpb24gYjY0dXRvaGV4KGEpe3JldHVybiBiNjR0b2hleChiNjR1dG9iNjQoYSkpfXZhciB1dGY4dG9iNjR1LGI2NHV0b3V0Zjg7aWYodHlwZW9mIEJ1ZmZlcj09PVwiZnVuY3Rpb25cIil7dXRmOHRvYjY0dT1mdW5jdGlvbihhKXtyZXR1cm4gYjY0dG9iNjR1KG5ldyBCdWZmZXIoYSxcInV0ZjhcIikudG9TdHJpbmcoXCJiYXNlNjRcIikpfTtiNjR1dG91dGY4PWZ1bmN0aW9uKGEpe3JldHVybiBuZXcgQnVmZmVyKGI2NHV0b2I2NChhKSxcImJhc2U2NFwiKS50b1N0cmluZyhcInV0ZjhcIil9fWVsc2V7dXRmOHRvYjY0dT1mdW5jdGlvbihhKXtyZXR1cm4gaGV4dG9iNjR1KHVyaWNtcHRvaGV4KGVuY29kZVVSSUNvbXBvbmVudEFsbChhKSkpfTtiNjR1dG91dGY4PWZ1bmN0aW9uKGEpe3JldHVybiBkZWNvZGVVUklDb21wb25lbnQoaGV4dG91cmljbXAoYjY0dXRvaGV4KGEpKSl9fWZ1bmN0aW9uIHV0Zjh0b2I2NChhKXtyZXR1cm4gaGV4MmI2NCh1cmljbXB0b2hleChlbmNvZGVVUklDb21wb25lbnRBbGwoYSkpKX1mdW5jdGlvbiBiNjR0b3V0ZjgoYSl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChoZXh0b3VyaWNtcChiNjR0b2hleChhKSkpfWZ1bmN0aW9uIHV0Zjh0b2hleChhKXtyZXR1cm4gdXJpY21wdG9oZXgoZW5jb2RlVVJJQ29tcG9uZW50QWxsKGEpKX1mdW5jdGlvbiBoZXh0b3V0ZjgoYSl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChoZXh0b3VyaWNtcChhKSl9ZnVuY3Rpb24gaGV4dG9yc3RyKGMpe3ZhciBiPVwiXCI7Zm9yKHZhciBhPTA7YTxjLmxlbmd0aC0xO2ErPTIpe2IrPVN0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQoYy5zdWJzdHIoYSwyKSwxNikpfXJldHVybiBifWZ1bmN0aW9uIHJzdHJ0b2hleChjKXt2YXIgYT1cIlwiO2Zvcih2YXIgYj0wO2I8Yy5sZW5ndGg7YisrKXthKz0oXCIwXCIrYy5jaGFyQ29kZUF0KGIpLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTIpfXJldHVybiBhfWZ1bmN0aW9uIGhleHRvYjY0KGEpe3JldHVybiBoZXgyYjY0KGEpfWZ1bmN0aW9uIGhleHRvYjY0bmwoYil7dmFyIGE9aGV4dG9iNjQoYik7dmFyIGM9YS5yZXBsYWNlKC8oLns2NH0pL2csXCIkMVxcclxcblwiKTtjPWMucmVwbGFjZSgvXFxyXFxuJC8sXCJcIik7cmV0dXJuIGN9ZnVuY3Rpb24gYjY0bmx0b2hleChiKXt2YXIgYT1iLnJlcGxhY2UoL1teMC05QS1aYS16XFwvKz1dKi9nLFwiXCIpO3ZhciBjPWI2NHRvaGV4KGEpO3JldHVybiBjfWZ1bmN0aW9uIGhleHRvcGVtKGEsYil7dmFyIGM9aGV4dG9iNjRubChhKTtyZXR1cm5cIi0tLS0tQkVHSU4gXCIrYitcIi0tLS0tXFxyXFxuXCIrYytcIlxcclxcbi0tLS0tRU5EIFwiK2IrXCItLS0tLVxcclxcblwifWZ1bmN0aW9uIHBlbXRvaGV4KGEsYil7aWYoYS5pbmRleE9mKFwiLS0tLS1CRUdJTiBcIik9PS0xKXt0aHJvd1wiY2FuJ3QgZmluZCBQRU0gaGVhZGVyOiBcIitifWlmKGIhPT11bmRlZmluZWQpe2E9YS5yZXBsYWNlKFwiLS0tLS1CRUdJTiBcIitiK1wiLS0tLS1cIixcIlwiKTthPWEucmVwbGFjZShcIi0tLS0tRU5EIFwiK2IrXCItLS0tLVwiLFwiXCIpfWVsc2V7YT1hLnJlcGxhY2UoLy0tLS0tQkVHSU4gW14tXSstLS0tLS8sXCJcIik7YT1hLnJlcGxhY2UoLy0tLS0tRU5EIFteLV0rLS0tLS0vLFwiXCIpfXJldHVybiBiNjRubHRvaGV4KGEpfWZ1bmN0aW9uIGhleHRvQXJyYXlCdWZmZXIoZCl7aWYoZC5sZW5ndGglMiE9MCl7dGhyb3dcImlucHV0IGlzIG5vdCBldmVuIGxlbmd0aFwifWlmKGQubWF0Y2goL15bMC05QS1GYS1mXSskLyk9PW51bGwpe3Rocm93XCJpbnB1dCBpcyBub3QgaGV4YWRlY2ltYWxcIn12YXIgYj1uZXcgQXJyYXlCdWZmZXIoZC5sZW5ndGgvMik7dmFyIGE9bmV3IERhdGFWaWV3KGIpO2Zvcih2YXIgYz0wO2M8ZC5sZW5ndGgvMjtjKyspe2Euc2V0VWludDgoYyxwYXJzZUludChkLnN1YnN0cihjKjIsMiksMTYpKX1yZXR1cm4gYn1mdW5jdGlvbiBBcnJheUJ1ZmZlcnRvaGV4KGIpe3ZhciBkPVwiXCI7dmFyIGE9bmV3IERhdGFWaWV3KGIpO2Zvcih2YXIgYz0wO2M8Yi5ieXRlTGVuZ3RoO2MrKyl7ZCs9KFwiMDBcIithLmdldFVpbnQ4KGMpLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTIpfXJldHVybiBkfWZ1bmN0aW9uIHp1bHV0b21zZWMobil7dmFyIGwsaixtLGUsZixpLGIsazt2YXIgYSxoLGcsYztjPW4ubWF0Y2goL14oXFxkezJ9fFxcZHs0fSkoXFxkXFxkKShcXGRcXGQpKFxcZFxcZCkoXFxkXFxkKShcXGRcXGQpKHxcXC5cXGQrKVokLyk7aWYoYyl7YT1jWzFdO2w9cGFyc2VJbnQoYSk7aWYoYS5sZW5ndGg9PT0yKXtpZig1MDw9bCYmbDwxMDApe2w9MTkwMCtsfWVsc2V7aWYoMDw9bCYmbDw1MCl7bD0yMDAwK2x9fX1qPXBhcnNlSW50KGNbMl0pLTE7bT1wYXJzZUludChjWzNdKTtlPXBhcnNlSW50KGNbNF0pO2Y9cGFyc2VJbnQoY1s1XSk7aT1wYXJzZUludChjWzZdKTtiPTA7aD1jWzddO2lmKGghPT1cIlwiKXtnPShoLnN1YnN0cigxKStcIjAwXCIpLnN1YnN0cigwLDMpO2I9cGFyc2VJbnQoZyl9cmV0dXJuIERhdGUuVVRDKGwsaixtLGUsZixpLGIpfXRocm93XCJ1bnN1cHBvcnRlZCB6dWx1IGZvcm1hdDogXCIrbn1mdW5jdGlvbiB6dWx1dG9zZWMoYSl7dmFyIGI9enVsdXRvbXNlYyhhKTtyZXR1cm4gfn4oYi8xMDAwKX1mdW5jdGlvbiB6dWx1dG9kYXRlKGEpe3JldHVybiBuZXcgRGF0ZSh6dWx1dG9tc2VjKGEpKX1mdW5jdGlvbiBkYXRldG96dWx1KGcsZSxmKXt2YXIgYjt2YXIgYT1nLmdldFVUQ0Z1bGxZZWFyKCk7aWYoZSl7aWYoYTwxOTUwfHwyMDQ5PGEpe3Rocm93XCJub3QgcHJvcGVyIHllYXIgZm9yIFVUQ1RpbWU6IFwiK2F9Yj0oXCJcIithKS5zbGljZSgtMil9ZWxzZXtiPShcIjAwMFwiK2EpLnNsaWNlKC00KX1iKz0oXCIwXCIrKGcuZ2V0VVRDTW9udGgoKSsxKSkuc2xpY2UoLTIpO2IrPShcIjBcIitnLmdldFVUQ0RhdGUoKSkuc2xpY2UoLTIpO2IrPShcIjBcIitnLmdldFVUQ0hvdXJzKCkpLnNsaWNlKC0yKTtiKz0oXCIwXCIrZy5nZXRVVENNaW51dGVzKCkpLnNsaWNlKC0yKTtiKz0oXCIwXCIrZy5nZXRVVENTZWNvbmRzKCkpLnNsaWNlKC0yKTtpZihmKXt2YXIgYz1nLmdldFVUQ01pbGxpc2Vjb25kcygpO2lmKGMhPT0wKXtjPShcIjAwXCIrYykuc2xpY2UoLTMpO2M9Yy5yZXBsYWNlKC8wKyQvZyxcIlwiKTtiKz1cIi5cIitjfX1iKz1cIlpcIjtyZXR1cm4gYn1mdW5jdGlvbiB1cmljbXB0b2hleChhKXtyZXR1cm4gYS5yZXBsYWNlKC8lL2csXCJcIil9ZnVuY3Rpb24gaGV4dG91cmljbXAoYSl7cmV0dXJuIGEucmVwbGFjZSgvKC4uKS9nLFwiJSQxXCIpfWZ1bmN0aW9uIGlwdjZ0b2hleChnKXt2YXIgYj1cIm1hbGZvcm1lZCBJUHY2IGFkZHJlc3NcIjtpZighZy5tYXRjaCgvXlswLTlBLUZhLWY6XSskLykpe3Rocm93IGJ9Zz1nLnRvTG93ZXJDYXNlKCk7dmFyIGQ9Zy5zcGxpdChcIjpcIikubGVuZ3RoLTE7aWYoZDwyKXt0aHJvdyBifXZhciBlPVwiOlwiLnJlcGVhdCg3LWQrMik7Zz1nLnJlcGxhY2UoXCI6OlwiLGUpO3ZhciBjPWcuc3BsaXQoXCI6XCIpO2lmKGMubGVuZ3RoIT04KXt0aHJvdyBifWZvcih2YXIgZj0wO2Y8ODtmKyspe2NbZl09KFwiMDAwMFwiK2NbZl0pLnNsaWNlKC00KX1yZXR1cm4gYy5qb2luKFwiXCIpfWZ1bmN0aW9uIGhleHRvaXB2NihlKXtpZighZS5tYXRjaCgvXlswLTlBLUZhLWZdezMyfSQvKSl7dGhyb3dcIm1hbGZvcm1lZCBJUHY2IGFkZHJlc3Mgb2N0ZXRcIn1lPWUudG9Mb3dlckNhc2UoKTt2YXIgYj1lLm1hdGNoKC8uezEsNH0vZyk7Zm9yKHZhciBkPTA7ZDw4O2QrKyl7YltkXT1iW2RdLnJlcGxhY2UoL14wKy8sXCJcIik7aWYoYltkXT09XCJcIil7YltkXT1cIjBcIn19ZT1cIjpcIitiLmpvaW4oXCI6XCIpK1wiOlwiO3ZhciBjPWUubWF0Y2goLzooMDopezIsfS9nKTtpZihjPT09bnVsbCl7cmV0dXJuIGUuc2xpY2UoMSwtMSl9dmFyIGY9XCJcIjtmb3IodmFyIGQ9MDtkPGMubGVuZ3RoO2QrKyl7aWYoY1tkXS5sZW5ndGg+Zi5sZW5ndGgpe2Y9Y1tkXX19ZT1lLnJlcGxhY2UoZixcIjo6XCIpO3JldHVybiBlLnNsaWNlKDEsLTEpfWZ1bmN0aW9uIGhleHRvaXAoYil7dmFyIGQ9XCJtYWxmb3JtZWQgaGV4IHZhbHVlXCI7aWYoIWIubWF0Y2goL14oWzAtOUEtRmEtZl1bMC05QS1GYS1mXSl7MSx9JC8pKXt0aHJvdyBkfWlmKGIubGVuZ3RoPT04KXt2YXIgYzt0cnl7Yz1wYXJzZUludChiLnN1YnN0cigwLDIpLDE2KStcIi5cIitwYXJzZUludChiLnN1YnN0cigyLDIpLDE2KStcIi5cIitwYXJzZUludChiLnN1YnN0cig0LDIpLDE2KStcIi5cIitwYXJzZUludChiLnN1YnN0cig2LDIpLDE2KTtyZXR1cm4gY31jYXRjaChhKXt0aHJvdyBkfX1lbHNle2lmKGIubGVuZ3RoPT0zMil7cmV0dXJuIGhleHRvaXB2NihiKX1lbHNle3JldHVybiBifX19ZnVuY3Rpb24gaXB0b2hleChmKXt2YXIgaj1cIm1hbGZvcm1lZCBJUCBhZGRyZXNzXCI7Zj1mLnRvTG93ZXJDYXNlKGYpO2lmKGYubWF0Y2goL15bMC05Ll0rJC8pKXt2YXIgYj1mLnNwbGl0KFwiLlwiKTtpZihiLmxlbmd0aCE9PTQpe3Rocm93IGp9dmFyIGc9XCJcIjt0cnl7Zm9yKHZhciBlPTA7ZTw0O2UrKyl7dmFyIGg9cGFyc2VJbnQoYltlXSk7Zys9KFwiMFwiK2gudG9TdHJpbmcoMTYpKS5zbGljZSgtMil9cmV0dXJuIGd9Y2F0Y2goYyl7dGhyb3cgan19ZWxzZXtpZihmLm1hdGNoKC9eWzAtOWEtZjpdKyQvKSYmZi5pbmRleE9mKFwiOlwiKSE9PS0xKXtyZXR1cm4gaXB2NnRvaGV4KGYpfWVsc2V7dGhyb3cgan19fWZ1bmN0aW9uIGVuY29kZVVSSUNvbXBvbmVudEFsbChhKXt2YXIgZD1lbmNvZGVVUklDb21wb25lbnQoYSk7dmFyIGI9XCJcIjtmb3IodmFyIGM9MDtjPGQubGVuZ3RoO2MrKyl7aWYoZFtjXT09XCIlXCIpe2I9YitkLnN1YnN0cihjLDMpO2M9YysyfWVsc2V7Yj1iK1wiJVwiK3N0b2hleChkW2NdKX19cmV0dXJuIGJ9ZnVuY3Rpb24gbmV3bGluZV90b1VuaXgoYSl7YT1hLnJlcGxhY2UoL1xcclxcbi9tZyxcIlxcblwiKTtyZXR1cm4gYX1mdW5jdGlvbiBuZXdsaW5lX3RvRG9zKGEpe2E9YS5yZXBsYWNlKC9cXHJcXG4vbWcsXCJcXG5cIik7YT1hLnJlcGxhY2UoL1xcbi9tZyxcIlxcclxcblwiKTtyZXR1cm4gYX1LSlVSLmxhbmcuU3RyaW5nLmlzSW50ZWdlcj1mdW5jdGlvbihhKXtpZihhLm1hdGNoKC9eWzAtOV0rJC8pKXtyZXR1cm4gdHJ1ZX1lbHNle2lmKGEubWF0Y2goL14tWzAtOV0rJC8pKXtyZXR1cm4gdHJ1ZX1lbHNle3JldHVybiBmYWxzZX19fTtLSlVSLmxhbmcuU3RyaW5nLmlzSGV4PWZ1bmN0aW9uKGEpe2lmKGEubGVuZ3RoJTI9PTAmJihhLm1hdGNoKC9eWzAtOWEtZl0rJC8pfHxhLm1hdGNoKC9eWzAtOUEtRl0rJC8pKSl7cmV0dXJuIHRydWV9ZWxzZXtyZXR1cm4gZmFsc2V9fTtLSlVSLmxhbmcuU3RyaW5nLmlzQmFzZTY0PWZ1bmN0aW9uKGEpe2E9YS5yZXBsYWNlKC9cXHMrL2csXCJcIik7aWYoYS5tYXRjaCgvXlswLTlBLVphLXorXFwvXSs9ezAsM30kLykmJmEubGVuZ3RoJTQ9PTApe3JldHVybiB0cnVlfWVsc2V7cmV0dXJuIGZhbHNlfX07S0pVUi5sYW5nLlN0cmluZy5pc0Jhc2U2NFVSTD1mdW5jdGlvbihhKXtpZihhLm1hdGNoKC9bKy89XS8pKXtyZXR1cm4gZmFsc2V9YT1iNjR1dG9iNjQoYSk7cmV0dXJuIEtKVVIubGFuZy5TdHJpbmcuaXNCYXNlNjQoYSl9O0tKVVIubGFuZy5TdHJpbmcuaXNJbnRlZ2VyQXJyYXk9ZnVuY3Rpb24oYSl7YT1hLnJlcGxhY2UoL1xccysvZyxcIlwiKTtpZihhLm1hdGNoKC9eXFxbWzAtOSxdK1xcXSQvKSl7cmV0dXJuIHRydWV9ZWxzZXtyZXR1cm4gZmFsc2V9fTtmdW5jdGlvbiBoZXh0b3Bvc2hleChhKXtpZihhLmxlbmd0aCUyPT0xKXtyZXR1cm5cIjBcIithfWlmKGEuc3Vic3RyKDAsMSk+XCI3XCIpe3JldHVyblwiMDBcIithfXJldHVybiBhfWZ1bmN0aW9uIGludGFyeXN0cnRvaGV4KGIpe2I9Yi5yZXBsYWNlKC9eXFxzKlxcW1xccyovLFwiXCIpO2I9Yi5yZXBsYWNlKC9cXHMqXFxdXFxzKiQvLFwiXCIpO2I9Yi5yZXBsYWNlKC9cXHMqL2csXCJcIik7dHJ5e3ZhciBjPWIuc3BsaXQoLywvKS5tYXAoZnVuY3Rpb24oZyxlLGgpe3ZhciBmPXBhcnNlSW50KGcpO2lmKGY8MHx8MjU1PGYpe3Rocm93XCJpbnRlZ2VyIG5vdCBpbiByYW5nZSAwLTI1NVwifXZhciBkPShcIjAwXCIrZi50b1N0cmluZygxNikpLnNsaWNlKC0yKTtyZXR1cm4gZH0pLmpvaW4oXCJcIik7cmV0dXJuIGN9Y2F0Y2goYSl7dGhyb3dcIm1hbGZvcm1lZCBpbnRlZ2VyIGFycmF5IHN0cmluZzogXCIrYX19dmFyIHN0cmRpZmZpZHg9ZnVuY3Rpb24oYyxhKXt2YXIgZD1jLmxlbmd0aDtpZihjLmxlbmd0aD5hLmxlbmd0aCl7ZD1hLmxlbmd0aH1mb3IodmFyIGI9MDtiPGQ7YisrKXtpZihjLmNoYXJDb2RlQXQoYikhPWEuY2hhckNvZGVBdChiKSl7cmV0dXJuIGJ9fWlmKGMubGVuZ3RoIT1hLmxlbmd0aCl7cmV0dXJuIGR9cmV0dXJuIC0xfTtcbmlmKHR5cGVvZiBLSlVSPT1cInVuZGVmaW5lZFwifHwhS0pVUil7S0pVUj17fX1pZih0eXBlb2YgS0pVUi5jcnlwdG89PVwidW5kZWZpbmVkXCJ8fCFLSlVSLmNyeXB0byl7S0pVUi5jcnlwdG89e319S0pVUi5jcnlwdG8uVXRpbD1uZXcgZnVuY3Rpb24oKXt0aGlzLkRJR0VTVElORk9IRUFEPXtzaGExOlwiMzAyMTMwMDkwNjA1MmIwZTAzMDIxYTA1MDAwNDE0XCIsc2hhMjI0OlwiMzAyZDMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjA0MDUwMDA0MWNcIixzaGEyNTY6XCIzMDMxMzAwZDA2MDk2MDg2NDgwMTY1MDMwNDAyMDEwNTAwMDQyMFwiLHNoYTM4NDpcIjMwNDEzMDBkMDYwOTYwODY0ODAxNjUwMzA0MDIwMjA1MDAwNDMwXCIsc2hhNTEyOlwiMzA1MTMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjAzMDUwMDA0NDBcIixtZDI6XCIzMDIwMzAwYzA2MDgyYTg2NDg4NmY3MGQwMjAyMDUwMDA0MTBcIixtZDU6XCIzMDIwMzAwYzA2MDgyYTg2NDg4NmY3MGQwMjA1MDUwMDA0MTBcIixyaXBlbWQxNjA6XCIzMDIxMzAwOTA2MDUyYjI0MDMwMjAxMDUwMDA0MTRcIix9O3RoaXMuREVGQVVMVFBST1ZJREVSPXttZDU6XCJjcnlwdG9qc1wiLHNoYTE6XCJjcnlwdG9qc1wiLHNoYTIyNDpcImNyeXB0b2pzXCIsc2hhMjU2OlwiY3J5cHRvanNcIixzaGEzODQ6XCJjcnlwdG9qc1wiLHNoYTUxMjpcImNyeXB0b2pzXCIscmlwZW1kMTYwOlwiY3J5cHRvanNcIixobWFjbWQ1OlwiY3J5cHRvanNcIixobWFjc2hhMTpcImNyeXB0b2pzXCIsaG1hY3NoYTIyNDpcImNyeXB0b2pzXCIsaG1hY3NoYTI1NjpcImNyeXB0b2pzXCIsaG1hY3NoYTM4NDpcImNyeXB0b2pzXCIsaG1hY3NoYTUxMjpcImNyeXB0b2pzXCIsaG1hY3JpcGVtZDE2MDpcImNyeXB0b2pzXCIsTUQ1d2l0aFJTQTpcImNyeXB0b2pzL2pzcnNhXCIsU0hBMXdpdGhSU0E6XCJjcnlwdG9qcy9qc3JzYVwiLFNIQTIyNHdpdGhSU0E6XCJjcnlwdG9qcy9qc3JzYVwiLFNIQTI1NndpdGhSU0E6XCJjcnlwdG9qcy9qc3JzYVwiLFNIQTM4NHdpdGhSU0E6XCJjcnlwdG9qcy9qc3JzYVwiLFNIQTUxMndpdGhSU0E6XCJjcnlwdG9qcy9qc3JzYVwiLFJJUEVNRDE2MHdpdGhSU0E6XCJjcnlwdG9qcy9qc3JzYVwiLE1ENXdpdGhFQ0RTQTpcImNyeXB0b2pzL2pzcnNhXCIsU0hBMXdpdGhFQ0RTQTpcImNyeXB0b2pzL2pzcnNhXCIsU0hBMjI0d2l0aEVDRFNBOlwiY3J5cHRvanMvanNyc2FcIixTSEEyNTZ3aXRoRUNEU0E6XCJjcnlwdG9qcy9qc3JzYVwiLFNIQTM4NHdpdGhFQ0RTQTpcImNyeXB0b2pzL2pzcnNhXCIsU0hBNTEyd2l0aEVDRFNBOlwiY3J5cHRvanMvanNyc2FcIixSSVBFTUQxNjB3aXRoRUNEU0E6XCJjcnlwdG9qcy9qc3JzYVwiLFNIQTF3aXRoRFNBOlwiY3J5cHRvanMvanNyc2FcIixTSEEyMjR3aXRoRFNBOlwiY3J5cHRvanMvanNyc2FcIixTSEEyNTZ3aXRoRFNBOlwiY3J5cHRvanMvanNyc2FcIixNRDV3aXRoUlNBYW5kTUdGMTpcImNyeXB0b2pzL2pzcnNhXCIsU0hBMXdpdGhSU0FhbmRNR0YxOlwiY3J5cHRvanMvanNyc2FcIixTSEEyMjR3aXRoUlNBYW5kTUdGMTpcImNyeXB0b2pzL2pzcnNhXCIsU0hBMjU2d2l0aFJTQWFuZE1HRjE6XCJjcnlwdG9qcy9qc3JzYVwiLFNIQTM4NHdpdGhSU0FhbmRNR0YxOlwiY3J5cHRvanMvanNyc2FcIixTSEE1MTJ3aXRoUlNBYW5kTUdGMTpcImNyeXB0b2pzL2pzcnNhXCIsUklQRU1EMTYwd2l0aFJTQWFuZE1HRjE6XCJjcnlwdG9qcy9qc3JzYVwiLH07dGhpcy5DUllQVE9KU01FU1NBR0VESUdFU1ROQU1FPXttZDU6Q3J5cHRvSlMuYWxnby5NRDUsc2hhMTpDcnlwdG9KUy5hbGdvLlNIQTEsc2hhMjI0OkNyeXB0b0pTLmFsZ28uU0hBMjI0LHNoYTI1NjpDcnlwdG9KUy5hbGdvLlNIQTI1NixzaGEzODQ6Q3J5cHRvSlMuYWxnby5TSEEzODQsc2hhNTEyOkNyeXB0b0pTLmFsZ28uU0hBNTEyLHJpcGVtZDE2MDpDcnlwdG9KUy5hbGdvLlJJUEVNRDE2MH07dGhpcy5nZXREaWdlc3RJbmZvSGV4PWZ1bmN0aW9uKGEsYil7aWYodHlwZW9mIHRoaXMuRElHRVNUSU5GT0hFQURbYl09PVwidW5kZWZpbmVkXCIpe3Rocm93XCJhbGcgbm90IHN1cHBvcnRlZCBpbiBVdGlsLkRJR0VTVElORk9IRUFEOiBcIitifXJldHVybiB0aGlzLkRJR0VTVElORk9IRUFEW2JdK2F9O3RoaXMuZ2V0UGFkZGVkRGlnZXN0SW5mb0hleD1mdW5jdGlvbihoLGEsail7dmFyIGM9dGhpcy5nZXREaWdlc3RJbmZvSGV4KGgsYSk7dmFyIGQ9ai80O2lmKGMubGVuZ3RoKzIyPmQpe3Rocm93XCJrZXkgaXMgdG9vIHNob3J0IGZvciBTaWdBbGc6IGtleWxlbj1cIitqK1wiLFwiK2F9dmFyIGI9XCIwMDAxXCI7dmFyIGs9XCIwMFwiK2M7dmFyIGc9XCJcIjt2YXIgbD1kLWIubGVuZ3RoLWsubGVuZ3RoO2Zvcih2YXIgZj0wO2Y8bDtmKz0yKXtnKz1cImZmXCJ9dmFyIGU9YitnK2s7cmV0dXJuIGV9O3RoaXMuaGFzaFN0cmluZz1mdW5jdGlvbihhLGMpe3ZhciBiPW5ldyBLSlVSLmNyeXB0by5NZXNzYWdlRGlnZXN0KHthbGc6Y30pO3JldHVybiBiLmRpZ2VzdFN0cmluZyhhKX07dGhpcy5oYXNoSGV4PWZ1bmN0aW9uKGIsYyl7dmFyIGE9bmV3IEtKVVIuY3J5cHRvLk1lc3NhZ2VEaWdlc3Qoe2FsZzpjfSk7cmV0dXJuIGEuZGlnZXN0SGV4KGIpfTt0aGlzLnNoYTE9ZnVuY3Rpb24oYSl7dmFyIGI9bmV3IEtKVVIuY3J5cHRvLk1lc3NhZ2VEaWdlc3Qoe2FsZzpcInNoYTFcIixwcm92OlwiY3J5cHRvanNcIn0pO3JldHVybiBiLmRpZ2VzdFN0cmluZyhhKX07dGhpcy5zaGEyNTY9ZnVuY3Rpb24oYSl7dmFyIGI9bmV3IEtKVVIuY3J5cHRvLk1lc3NhZ2VEaWdlc3Qoe2FsZzpcInNoYTI1NlwiLHByb3Y6XCJjcnlwdG9qc1wifSk7cmV0dXJuIGIuZGlnZXN0U3RyaW5nKGEpfTt0aGlzLnNoYTI1NkhleD1mdW5jdGlvbihhKXt2YXIgYj1uZXcgS0pVUi5jcnlwdG8uTWVzc2FnZURpZ2VzdCh7YWxnOlwic2hhMjU2XCIscHJvdjpcImNyeXB0b2pzXCJ9KTtyZXR1cm4gYi5kaWdlc3RIZXgoYSl9O3RoaXMuc2hhNTEyPWZ1bmN0aW9uKGEpe3ZhciBiPW5ldyBLSlVSLmNyeXB0by5NZXNzYWdlRGlnZXN0KHthbGc6XCJzaGE1MTJcIixwcm92OlwiY3J5cHRvanNcIn0pO3JldHVybiBiLmRpZ2VzdFN0cmluZyhhKX07dGhpcy5zaGE1MTJIZXg9ZnVuY3Rpb24oYSl7dmFyIGI9bmV3IEtKVVIuY3J5cHRvLk1lc3NhZ2VEaWdlc3Qoe2FsZzpcInNoYTUxMlwiLHByb3Y6XCJjcnlwdG9qc1wifSk7cmV0dXJuIGIuZGlnZXN0SGV4KGEpfX07S0pVUi5jcnlwdG8uVXRpbC5tZDU9ZnVuY3Rpb24oYSl7dmFyIGI9bmV3IEtKVVIuY3J5cHRvLk1lc3NhZ2VEaWdlc3Qoe2FsZzpcIm1kNVwiLHByb3Y6XCJjcnlwdG9qc1wifSk7cmV0dXJuIGIuZGlnZXN0U3RyaW5nKGEpfTtLSlVSLmNyeXB0by5VdGlsLnJpcGVtZDE2MD1mdW5jdGlvbihhKXt2YXIgYj1uZXcgS0pVUi5jcnlwdG8uTWVzc2FnZURpZ2VzdCh7YWxnOlwicmlwZW1kMTYwXCIscHJvdjpcImNyeXB0b2pzXCJ9KTtyZXR1cm4gYi5kaWdlc3RTdHJpbmcoYSl9O0tKVVIuY3J5cHRvLlV0aWwuU0VDVVJFUkFORE9NR0VOPW5ldyBTZWN1cmVSYW5kb20oKTtLSlVSLmNyeXB0by5VdGlsLmdldFJhbmRvbUhleE9mTmJ5dGVzPWZ1bmN0aW9uKGIpe3ZhciBhPW5ldyBBcnJheShiKTtLSlVSLmNyeXB0by5VdGlsLlNFQ1VSRVJBTkRPTUdFTi5uZXh0Qnl0ZXMoYSk7cmV0dXJuIEJBdG9oZXgoYSl9O0tKVVIuY3J5cHRvLlV0aWwuZ2V0UmFuZG9tQmlnSW50ZWdlck9mTmJ5dGVzPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcgQmlnSW50ZWdlcihLSlVSLmNyeXB0by5VdGlsLmdldFJhbmRvbUhleE9mTmJ5dGVzKGEpLDE2KX07S0pVUi5jcnlwdG8uVXRpbC5nZXRSYW5kb21IZXhPZk5iaXRzPWZ1bmN0aW9uKGQpe3ZhciBjPWQlODt2YXIgYT0oZC1jKS84O3ZhciBiPW5ldyBBcnJheShhKzEpO0tKVVIuY3J5cHRvLlV0aWwuU0VDVVJFUkFORE9NR0VOLm5leHRCeXRlcyhiKTtiWzBdPSgoKDI1NTw8YykmMjU1KV4yNTUpJmJbMF07cmV0dXJuIEJBdG9oZXgoYil9O0tKVVIuY3J5cHRvLlV0aWwuZ2V0UmFuZG9tQmlnSW50ZWdlck9mTmJpdHM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyBCaWdJbnRlZ2VyKEtKVVIuY3J5cHRvLlV0aWwuZ2V0UmFuZG9tSGV4T2ZOYml0cyhhKSwxNil9O0tKVVIuY3J5cHRvLlV0aWwuZ2V0UmFuZG9tQmlnSW50ZWdlclplcm9Ub01heD1mdW5jdGlvbihiKXt2YXIgYT1iLmJpdExlbmd0aCgpO3doaWxlKDEpe3ZhciBjPUtKVVIuY3J5cHRvLlV0aWwuZ2V0UmFuZG9tQmlnSW50ZWdlck9mTmJpdHMoYSk7aWYoYi5jb21wYXJlVG8oYykhPS0xKXtyZXR1cm4gY319fTtLSlVSLmNyeXB0by5VdGlsLmdldFJhbmRvbUJpZ0ludGVnZXJNaW5Ub01heD1mdW5jdGlvbihlLGIpe3ZhciBjPWUuY29tcGFyZVRvKGIpO2lmKGM9PTEpe3Rocm93XCJiaU1pbiBpcyBncmVhdGVyIHRoYW4gYmlNYXhcIn1pZihjPT0wKXtyZXR1cm4gZX12YXIgYT1iLnN1YnRyYWN0KGUpO3ZhciBkPUtKVVIuY3J5cHRvLlV0aWwuZ2V0UmFuZG9tQmlnSW50ZWdlclplcm9Ub01heChhKTtyZXR1cm4gZC5hZGQoZSl9O0tKVVIuY3J5cHRvLk1lc3NhZ2VEaWdlc3Q9ZnVuY3Rpb24oYyl7dmFyIGI9bnVsbDt2YXIgYT1udWxsO3ZhciBkPW51bGw7dGhpcy5zZXRBbGdBbmRQcm92aWRlcj1mdW5jdGlvbihnLGYpe2c9S0pVUi5jcnlwdG8uTWVzc2FnZURpZ2VzdC5nZXRDYW5vbmljYWxBbGdOYW1lKGcpO2lmKGchPT1udWxsJiZmPT09dW5kZWZpbmVkKXtmPUtKVVIuY3J5cHRvLlV0aWwuREVGQVVMVFBST1ZJREVSW2ddfWlmKFwiOm1kNTpzaGExOnNoYTIyNDpzaGEyNTY6c2hhMzg0OnNoYTUxMjpyaXBlbWQxNjA6XCIuaW5kZXhPZihnKSE9LTEmJmY9PVwiY3J5cHRvanNcIil7dHJ5e3RoaXMubWQ9S0pVUi5jcnlwdG8uVXRpbC5DUllQVE9KU01FU1NBR0VESUdFU1ROQU1FW2ddLmNyZWF0ZSgpfWNhdGNoKGUpe3Rocm93XCJzZXRBbGdBbmRQcm92aWRlciBoYXNoIGFsZyBzZXQgZmFpbCBhbGc9XCIrZytcIi9cIitlfXRoaXMudXBkYXRlU3RyaW5nPWZ1bmN0aW9uKGgpe3RoaXMubWQudXBkYXRlKGgpfTt0aGlzLnVwZGF0ZUhleD1mdW5jdGlvbihoKXt2YXIgaT1DcnlwdG9KUy5lbmMuSGV4LnBhcnNlKGgpO3RoaXMubWQudXBkYXRlKGkpfTt0aGlzLmRpZ2VzdD1mdW5jdGlvbigpe3ZhciBoPXRoaXMubWQuZmluYWxpemUoKTtyZXR1cm4gaC50b1N0cmluZyhDcnlwdG9KUy5lbmMuSGV4KX07dGhpcy5kaWdlc3RTdHJpbmc9ZnVuY3Rpb24oaCl7dGhpcy51cGRhdGVTdHJpbmcoaCk7cmV0dXJuIHRoaXMuZGlnZXN0KCl9O3RoaXMuZGlnZXN0SGV4PWZ1bmN0aW9uKGgpe3RoaXMudXBkYXRlSGV4KGgpO3JldHVybiB0aGlzLmRpZ2VzdCgpfX1pZihcIjpzaGEyNTY6XCIuaW5kZXhPZihnKSE9LTEmJmY9PVwic2pjbFwiKXt0cnl7dGhpcy5tZD1uZXcgc2pjbC5oYXNoLnNoYTI1NigpfWNhdGNoKGUpe3Rocm93XCJzZXRBbGdBbmRQcm92aWRlciBoYXNoIGFsZyBzZXQgZmFpbCBhbGc9XCIrZytcIi9cIitlfXRoaXMudXBkYXRlU3RyaW5nPWZ1bmN0aW9uKGgpe3RoaXMubWQudXBkYXRlKGgpfTt0aGlzLnVwZGF0ZUhleD1mdW5jdGlvbihpKXt2YXIgaD1zamNsLmNvZGVjLmhleC50b0JpdHMoaSk7dGhpcy5tZC51cGRhdGUoaCl9O3RoaXMuZGlnZXN0PWZ1bmN0aW9uKCl7dmFyIGg9dGhpcy5tZC5maW5hbGl6ZSgpO3JldHVybiBzamNsLmNvZGVjLmhleC5mcm9tQml0cyhoKX07dGhpcy5kaWdlc3RTdHJpbmc9ZnVuY3Rpb24oaCl7dGhpcy51cGRhdGVTdHJpbmcoaCk7cmV0dXJuIHRoaXMuZGlnZXN0KCl9O3RoaXMuZGlnZXN0SGV4PWZ1bmN0aW9uKGgpe3RoaXMudXBkYXRlSGV4KGgpO3JldHVybiB0aGlzLmRpZ2VzdCgpfX19O3RoaXMudXBkYXRlU3RyaW5nPWZ1bmN0aW9uKGUpe3Rocm93XCJ1cGRhdGVTdHJpbmcoc3RyKSBub3Qgc3VwcG9ydGVkIGZvciB0aGlzIGFsZy9wcm92OiBcIit0aGlzLmFsZ05hbWUrXCIvXCIrdGhpcy5wcm92TmFtZX07dGhpcy51cGRhdGVIZXg9ZnVuY3Rpb24oZSl7dGhyb3dcInVwZGF0ZUhleChoZXgpIG5vdCBzdXBwb3J0ZWQgZm9yIHRoaXMgYWxnL3Byb3Y6IFwiK3RoaXMuYWxnTmFtZStcIi9cIit0aGlzLnByb3ZOYW1lfTt0aGlzLmRpZ2VzdD1mdW5jdGlvbigpe3Rocm93XCJkaWdlc3QoKSBub3Qgc3VwcG9ydGVkIGZvciB0aGlzIGFsZy9wcm92OiBcIit0aGlzLmFsZ05hbWUrXCIvXCIrdGhpcy5wcm92TmFtZX07dGhpcy5kaWdlc3RTdHJpbmc9ZnVuY3Rpb24oZSl7dGhyb3dcImRpZ2VzdFN0cmluZyhzdHIpIG5vdCBzdXBwb3J0ZWQgZm9yIHRoaXMgYWxnL3Byb3Y6IFwiK3RoaXMuYWxnTmFtZStcIi9cIit0aGlzLnByb3ZOYW1lfTt0aGlzLmRpZ2VzdEhleD1mdW5jdGlvbihlKXt0aHJvd1wiZGlnZXN0SGV4KGhleCkgbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBhbGcvcHJvdjogXCIrdGhpcy5hbGdOYW1lK1wiL1wiK3RoaXMucHJvdk5hbWV9O2lmKGMhPT11bmRlZmluZWQpe2lmKGMuYWxnIT09dW5kZWZpbmVkKXt0aGlzLmFsZ05hbWU9Yy5hbGc7aWYoYy5wcm92PT09dW5kZWZpbmVkKXt0aGlzLnByb3ZOYW1lPUtKVVIuY3J5cHRvLlV0aWwuREVGQVVMVFBST1ZJREVSW3RoaXMuYWxnTmFtZV19dGhpcy5zZXRBbGdBbmRQcm92aWRlcih0aGlzLmFsZ05hbWUsdGhpcy5wcm92TmFtZSl9fX07S0pVUi5jcnlwdG8uTWVzc2FnZURpZ2VzdC5nZXRDYW5vbmljYWxBbGdOYW1lPWZ1bmN0aW9uKGEpe2lmKHR5cGVvZiBhPT09XCJzdHJpbmdcIil7YT1hLnRvTG93ZXJDYXNlKCk7YT1hLnJlcGxhY2UoLy0vLFwiXCIpfXJldHVybiBhfTtLSlVSLmNyeXB0by5NZXNzYWdlRGlnZXN0LmdldEhhc2hMZW5ndGg9ZnVuY3Rpb24oYyl7dmFyIGI9S0pVUi5jcnlwdG8uTWVzc2FnZURpZ2VzdDt2YXIgYT1iLmdldENhbm9uaWNhbEFsZ05hbWUoYyk7aWYoYi5IQVNITEVOR1RIW2FdPT09dW5kZWZpbmVkKXt0aHJvd1wibm90IHN1cHBvcnRlZCBhbGdvcml0aG06IFwiK2N9cmV0dXJuIGIuSEFTSExFTkdUSFthXX07S0pVUi5jcnlwdG8uTWVzc2FnZURpZ2VzdC5IQVNITEVOR1RIPXttZDU6MTYsc2hhMToyMCxzaGEyMjQ6Mjgsc2hhMjU2OjMyLHNoYTM4NDo0OCxzaGE1MTI6NjQscmlwZW1kMTYwOjIwfTtLSlVSLmNyeXB0by5NYWM9ZnVuY3Rpb24oZCl7dmFyIGY9bnVsbDt2YXIgYz1udWxsO3ZhciBhPW51bGw7dmFyIGU9bnVsbDt2YXIgYj1udWxsO3RoaXMuc2V0QWxnQW5kUHJvdmlkZXI9ZnVuY3Rpb24oayxpKXtrPWsudG9Mb3dlckNhc2UoKTtpZihrPT1udWxsKXtrPVwiaG1hY3NoYTFcIn1rPWsudG9Mb3dlckNhc2UoKTtpZihrLnN1YnN0cigwLDQpIT1cImhtYWNcIil7dGhyb3dcInNldEFsZ0FuZFByb3ZpZGVyIHVuc3VwcG9ydGVkIEhNQUMgYWxnOiBcIitrfWlmKGk9PT11bmRlZmluZWQpe2k9S0pVUi5jcnlwdG8uVXRpbC5ERUZBVUxUUFJPVklERVJba119dGhpcy5hbGdQcm92PWsrXCIvXCIraTt2YXIgZz1rLnN1YnN0cig0KTtpZihcIjptZDU6c2hhMTpzaGEyMjQ6c2hhMjU2OnNoYTM4NDpzaGE1MTI6cmlwZW1kMTYwOlwiLmluZGV4T2YoZykhPS0xJiZpPT1cImNyeXB0b2pzXCIpe3RyeXt2YXIgaj1LSlVSLmNyeXB0by5VdGlsLkNSWVBUT0pTTUVTU0FHRURJR0VTVE5BTUVbZ107dGhpcy5tYWM9Q3J5cHRvSlMuYWxnby5ITUFDLmNyZWF0ZShqLHRoaXMucGFzcyl9Y2F0Y2goaCl7dGhyb3dcInNldEFsZ0FuZFByb3ZpZGVyIGhhc2ggYWxnIHNldCBmYWlsIGhhc2hBbGc9XCIrZytcIi9cIitofXRoaXMudXBkYXRlU3RyaW5nPWZ1bmN0aW9uKGwpe3RoaXMubWFjLnVwZGF0ZShsKX07dGhpcy51cGRhdGVIZXg9ZnVuY3Rpb24obCl7dmFyIG09Q3J5cHRvSlMuZW5jLkhleC5wYXJzZShsKTt0aGlzLm1hYy51cGRhdGUobSl9O3RoaXMuZG9GaW5hbD1mdW5jdGlvbigpe3ZhciBsPXRoaXMubWFjLmZpbmFsaXplKCk7cmV0dXJuIGwudG9TdHJpbmcoQ3J5cHRvSlMuZW5jLkhleCl9O3RoaXMuZG9GaW5hbFN0cmluZz1mdW5jdGlvbihsKXt0aGlzLnVwZGF0ZVN0cmluZyhsKTtyZXR1cm4gdGhpcy5kb0ZpbmFsKCl9O3RoaXMuZG9GaW5hbEhleD1mdW5jdGlvbihsKXt0aGlzLnVwZGF0ZUhleChsKTtyZXR1cm4gdGhpcy5kb0ZpbmFsKCl9fX07dGhpcy51cGRhdGVTdHJpbmc9ZnVuY3Rpb24oZyl7dGhyb3dcInVwZGF0ZVN0cmluZyhzdHIpIG5vdCBzdXBwb3J0ZWQgZm9yIHRoaXMgYWxnL3Byb3Y6IFwiK3RoaXMuYWxnUHJvdn07dGhpcy51cGRhdGVIZXg9ZnVuY3Rpb24oZyl7dGhyb3dcInVwZGF0ZUhleChoZXgpIG5vdCBzdXBwb3J0ZWQgZm9yIHRoaXMgYWxnL3Byb3Y6IFwiK3RoaXMuYWxnUHJvdn07dGhpcy5kb0ZpbmFsPWZ1bmN0aW9uKCl7dGhyb3dcImRpZ2VzdCgpIG5vdCBzdXBwb3J0ZWQgZm9yIHRoaXMgYWxnL3Byb3Y6IFwiK3RoaXMuYWxnUHJvdn07dGhpcy5kb0ZpbmFsU3RyaW5nPWZ1bmN0aW9uKGcpe3Rocm93XCJkaWdlc3RTdHJpbmcoc3RyKSBub3Qgc3VwcG9ydGVkIGZvciB0aGlzIGFsZy9wcm92OiBcIit0aGlzLmFsZ1Byb3Z9O3RoaXMuZG9GaW5hbEhleD1mdW5jdGlvbihnKXt0aHJvd1wiZGlnZXN0SGV4KGhleCkgbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBhbGcvcHJvdjogXCIrdGhpcy5hbGdQcm92fTt0aGlzLnNldFBhc3N3b3JkPWZ1bmN0aW9uKGgpe2lmKHR5cGVvZiBoPT1cInN0cmluZ1wiKXt2YXIgZz1oO2lmKGgubGVuZ3RoJTI9PTF8fCFoLm1hdGNoKC9eWzAtOUEtRmEtZl0rJC8pKXtnPXJzdHJ0b2hleChoKX10aGlzLnBhc3M9Q3J5cHRvSlMuZW5jLkhleC5wYXJzZShnKTtyZXR1cm59aWYodHlwZW9mIGghPVwib2JqZWN0XCIpe3Rocm93XCJLSlVSLmNyeXB0by5NYWMgdW5zdXBwb3J0ZWQgcGFzc3dvcmQgdHlwZTogXCIraH12YXIgZz1udWxsO2lmKGguaGV4IT09dW5kZWZpbmVkKXtpZihoLmhleC5sZW5ndGglMiE9MHx8IWguaGV4Lm1hdGNoKC9eWzAtOUEtRmEtZl0rJC8pKXt0aHJvd1wiTWFjOiB3cm9uZyBoZXggcGFzc3dvcmQ6IFwiK2guaGV4fWc9aC5oZXh9aWYoaC51dGY4IT09dW5kZWZpbmVkKXtnPXV0Zjh0b2hleChoLnV0ZjgpfWlmKGgucnN0ciE9PXVuZGVmaW5lZCl7Zz1yc3RydG9oZXgoaC5yc3RyKX1pZihoLmI2NCE9PXVuZGVmaW5lZCl7Zz1iNjR0b2hleChoLmI2NCl9aWYoaC5iNjR1IT09dW5kZWZpbmVkKXtnPWI2NHV0b2hleChoLmI2NHUpfWlmKGc9PW51bGwpe3Rocm93XCJLSlVSLmNyeXB0by5NYWMgdW5zdXBwb3J0ZWQgcGFzc3dvcmQgdHlwZTogXCIraH10aGlzLnBhc3M9Q3J5cHRvSlMuZW5jLkhleC5wYXJzZShnKX07aWYoZCE9PXVuZGVmaW5lZCl7aWYoZC5wYXNzIT09dW5kZWZpbmVkKXt0aGlzLnNldFBhc3N3b3JkKGQucGFzcyl9aWYoZC5hbGchPT11bmRlZmluZWQpe3RoaXMuYWxnTmFtZT1kLmFsZztpZihkLnByb3Y9PT11bmRlZmluZWQpe3RoaXMucHJvdk5hbWU9S0pVUi5jcnlwdG8uVXRpbC5ERUZBVUxUUFJPVklERVJbdGhpcy5hbGdOYW1lXX10aGlzLnNldEFsZ0FuZFByb3ZpZGVyKHRoaXMuYWxnTmFtZSx0aGlzLnByb3ZOYW1lKX19fTtLSlVSLmNyeXB0by5TaWduYXR1cmU9ZnVuY3Rpb24obyl7dmFyIHE9bnVsbDt2YXIgbj1udWxsO3ZhciByPW51bGw7dmFyIGM9bnVsbDt2YXIgbD1udWxsO3ZhciBkPW51bGw7dmFyIGs9bnVsbDt2YXIgaD1udWxsO3ZhciBwPW51bGw7dmFyIGU9bnVsbDt2YXIgYj0tMTt2YXIgZz1udWxsO3ZhciBqPW51bGw7dmFyIGE9bnVsbDt2YXIgaT1udWxsO3ZhciBmPW51bGw7dGhpcy5fc2V0QWxnTmFtZXM9ZnVuY3Rpb24oKXt2YXIgcz10aGlzLmFsZ05hbWUubWF0Y2goL14oLispd2l0aCguKykkLyk7aWYocyl7dGhpcy5tZEFsZ05hbWU9c1sxXS50b0xvd2VyQ2FzZSgpO3RoaXMucHVia2V5QWxnTmFtZT1zWzJdLnRvTG93ZXJDYXNlKCl9fTt0aGlzLl96ZXJvUGFkZGluZ09mU2lnbmF0dXJlPWZ1bmN0aW9uKHgsdyl7dmFyIHY9XCJcIjt2YXIgdD13LzQteC5sZW5ndGg7Zm9yKHZhciB1PTA7dTx0O3UrKyl7dj12K1wiMFwifXJldHVybiB2K3h9O3RoaXMuc2V0QWxnQW5kUHJvdmlkZXI9ZnVuY3Rpb24odSx0KXt0aGlzLl9zZXRBbGdOYW1lcygpO2lmKHQhPVwiY3J5cHRvanMvanNyc2FcIil7dGhyb3dcInByb3ZpZGVyIG5vdCBzdXBwb3J0ZWQ6IFwiK3R9aWYoXCI6bWQ1OnNoYTE6c2hhMjI0OnNoYTI1NjpzaGEzODQ6c2hhNTEyOnJpcGVtZDE2MDpcIi5pbmRleE9mKHRoaXMubWRBbGdOYW1lKSE9LTEpe3RyeXt0aGlzLm1kPW5ldyBLSlVSLmNyeXB0by5NZXNzYWdlRGlnZXN0KHthbGc6dGhpcy5tZEFsZ05hbWV9KX1jYXRjaChzKXt0aHJvd1wic2V0QWxnQW5kUHJvdmlkZXIgaGFzaCBhbGcgc2V0IGZhaWwgYWxnPVwiK3RoaXMubWRBbGdOYW1lK1wiL1wiK3N9dGhpcy5pbml0PWZ1bmN0aW9uKHcseCl7dmFyIHk9bnVsbDt0cnl7aWYoeD09PXVuZGVmaW5lZCl7eT1LRVlVVElMLmdldEtleSh3KX1lbHNle3k9S0VZVVRJTC5nZXRLZXkodyx4KX19Y2F0Y2godil7dGhyb3dcImluaXQgZmFpbGVkOlwiK3Z9aWYoeS5pc1ByaXZhdGU9PT10cnVlKXt0aGlzLnBydktleT15O3RoaXMuc3RhdGU9XCJTSUdOXCJ9ZWxzZXtpZih5LmlzUHVibGljPT09dHJ1ZSl7dGhpcy5wdWJLZXk9eTt0aGlzLnN0YXRlPVwiVkVSSUZZXCJ9ZWxzZXt0aHJvd1wiaW5pdCBmYWlsZWQuOlwiK3l9fX07dGhpcy51cGRhdGVTdHJpbmc9ZnVuY3Rpb24odil7dGhpcy5tZC51cGRhdGVTdHJpbmcodil9O3RoaXMudXBkYXRlSGV4PWZ1bmN0aW9uKHYpe3RoaXMubWQudXBkYXRlSGV4KHYpfTt0aGlzLnNpZ249ZnVuY3Rpb24oKXt0aGlzLnNIYXNoSGV4PXRoaXMubWQuZGlnZXN0KCk7aWYodHlwZW9mIHRoaXMuZWNwcnZoZXghPVwidW5kZWZpbmVkXCImJnR5cGVvZiB0aGlzLmVjY3VydmVuYW1lIT1cInVuZGVmaW5lZFwiKXt2YXIgdj1uZXcgS0pVUi5jcnlwdG8uRUNEU0Eoe2N1cnZlOnRoaXMuZWNjdXJ2ZW5hbWV9KTt0aGlzLmhTaWduPXYuc2lnbkhleCh0aGlzLnNIYXNoSGV4LHRoaXMuZWNwcnZoZXgpfWVsc2V7aWYodGhpcy5wcnZLZXkgaW5zdGFuY2VvZiBSU0FLZXkmJnRoaXMucHVia2V5QWxnTmFtZT09PVwicnNhYW5kbWdmMVwiKXt0aGlzLmhTaWduPXRoaXMucHJ2S2V5LnNpZ25XaXRoTWVzc2FnZUhhc2hQU1ModGhpcy5zSGFzaEhleCx0aGlzLm1kQWxnTmFtZSx0aGlzLnBzc1NhbHRMZW4pfWVsc2V7aWYodGhpcy5wcnZLZXkgaW5zdGFuY2VvZiBSU0FLZXkmJnRoaXMucHVia2V5QWxnTmFtZT09PVwicnNhXCIpe3RoaXMuaFNpZ249dGhpcy5wcnZLZXkuc2lnbldpdGhNZXNzYWdlSGFzaCh0aGlzLnNIYXNoSGV4LHRoaXMubWRBbGdOYW1lKX1lbHNle2lmKHRoaXMucHJ2S2V5IGluc3RhbmNlb2YgS0pVUi5jcnlwdG8uRUNEU0Epe3RoaXMuaFNpZ249dGhpcy5wcnZLZXkuc2lnbldpdGhNZXNzYWdlSGFzaCh0aGlzLnNIYXNoSGV4KX1lbHNle2lmKHRoaXMucHJ2S2V5IGluc3RhbmNlb2YgS0pVUi5jcnlwdG8uRFNBKXt0aGlzLmhTaWduPXRoaXMucHJ2S2V5LnNpZ25XaXRoTWVzc2FnZUhhc2godGhpcy5zSGFzaEhleCl9ZWxzZXt0aHJvd1wiU2lnbmF0dXJlOiB1bnN1cHBvcnRlZCBwcml2YXRlIGtleSBhbGc6IFwiK3RoaXMucHVia2V5QWxnTmFtZX19fX19cmV0dXJuIHRoaXMuaFNpZ259O3RoaXMuc2lnblN0cmluZz1mdW5jdGlvbih2KXt0aGlzLnVwZGF0ZVN0cmluZyh2KTtyZXR1cm4gdGhpcy5zaWduKCl9O3RoaXMuc2lnbkhleD1mdW5jdGlvbih2KXt0aGlzLnVwZGF0ZUhleCh2KTtyZXR1cm4gdGhpcy5zaWduKCl9O3RoaXMudmVyaWZ5PWZ1bmN0aW9uKHYpe3RoaXMuc0hhc2hIZXg9dGhpcy5tZC5kaWdlc3QoKTtpZih0eXBlb2YgdGhpcy5lY3B1YmhleCE9XCJ1bmRlZmluZWRcIiYmdHlwZW9mIHRoaXMuZWNjdXJ2ZW5hbWUhPVwidW5kZWZpbmVkXCIpe3ZhciB3PW5ldyBLSlVSLmNyeXB0by5FQ0RTQSh7Y3VydmU6dGhpcy5lY2N1cnZlbmFtZX0pO3JldHVybiB3LnZlcmlmeUhleCh0aGlzLnNIYXNoSGV4LHYsdGhpcy5lY3B1YmhleCl9ZWxzZXtpZih0aGlzLnB1YktleSBpbnN0YW5jZW9mIFJTQUtleSYmdGhpcy5wdWJrZXlBbGdOYW1lPT09XCJyc2FhbmRtZ2YxXCIpe3JldHVybiB0aGlzLnB1YktleS52ZXJpZnlXaXRoTWVzc2FnZUhhc2hQU1ModGhpcy5zSGFzaEhleCx2LHRoaXMubWRBbGdOYW1lLHRoaXMucHNzU2FsdExlbil9ZWxzZXtpZih0aGlzLnB1YktleSBpbnN0YW5jZW9mIFJTQUtleSYmdGhpcy5wdWJrZXlBbGdOYW1lPT09XCJyc2FcIil7cmV0dXJuIHRoaXMucHViS2V5LnZlcmlmeVdpdGhNZXNzYWdlSGFzaCh0aGlzLnNIYXNoSGV4LHYpfWVsc2V7aWYoS0pVUi5jcnlwdG8uRUNEU0EhPT11bmRlZmluZWQmJnRoaXMucHViS2V5IGluc3RhbmNlb2YgS0pVUi5jcnlwdG8uRUNEU0Epe3JldHVybiB0aGlzLnB1YktleS52ZXJpZnlXaXRoTWVzc2FnZUhhc2godGhpcy5zSGFzaEhleCx2KX1lbHNle2lmKEtKVVIuY3J5cHRvLkRTQSE9PXVuZGVmaW5lZCYmdGhpcy5wdWJLZXkgaW5zdGFuY2VvZiBLSlVSLmNyeXB0by5EU0Epe3JldHVybiB0aGlzLnB1YktleS52ZXJpZnlXaXRoTWVzc2FnZUhhc2godGhpcy5zSGFzaEhleCx2KX1lbHNle3Rocm93XCJTaWduYXR1cmU6IHVuc3VwcG9ydGVkIHB1YmxpYyBrZXkgYWxnOiBcIit0aGlzLnB1YmtleUFsZ05hbWV9fX19fX19fTt0aGlzLmluaXQ9ZnVuY3Rpb24ocyx0KXt0aHJvd1wiaW5pdChrZXksIHBhc3MpIG5vdCBzdXBwb3J0ZWQgZm9yIHRoaXMgYWxnOnByb3Y9XCIrdGhpcy5hbGdQcm92TmFtZX07dGhpcy51cGRhdGVTdHJpbmc9ZnVuY3Rpb24ocyl7dGhyb3dcInVwZGF0ZVN0cmluZyhzdHIpIG5vdCBzdXBwb3J0ZWQgZm9yIHRoaXMgYWxnOnByb3Y9XCIrdGhpcy5hbGdQcm92TmFtZX07dGhpcy51cGRhdGVIZXg9ZnVuY3Rpb24ocyl7dGhyb3dcInVwZGF0ZUhleChoZXgpIG5vdCBzdXBwb3J0ZWQgZm9yIHRoaXMgYWxnOnByb3Y9XCIrdGhpcy5hbGdQcm92TmFtZX07dGhpcy5zaWduPWZ1bmN0aW9uKCl7dGhyb3dcInNpZ24oKSBub3Qgc3VwcG9ydGVkIGZvciB0aGlzIGFsZzpwcm92PVwiK3RoaXMuYWxnUHJvdk5hbWV9O3RoaXMuc2lnblN0cmluZz1mdW5jdGlvbihzKXt0aHJvd1wiZGlnZXN0U3RyaW5nKHN0cikgbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBhbGc6cHJvdj1cIit0aGlzLmFsZ1Byb3ZOYW1lfTt0aGlzLnNpZ25IZXg9ZnVuY3Rpb24ocyl7dGhyb3dcImRpZ2VzdEhleChoZXgpIG5vdCBzdXBwb3J0ZWQgZm9yIHRoaXMgYWxnOnByb3Y9XCIrdGhpcy5hbGdQcm92TmFtZX07dGhpcy52ZXJpZnk9ZnVuY3Rpb24ocyl7dGhyb3dcInZlcmlmeShoU2lnVmFsKSBub3Qgc3VwcG9ydGVkIGZvciB0aGlzIGFsZzpwcm92PVwiK3RoaXMuYWxnUHJvdk5hbWV9O3RoaXMuaW5pdFBhcmFtcz1vO2lmKG8hPT11bmRlZmluZWQpe2lmKG8uYWxnIT09dW5kZWZpbmVkKXt0aGlzLmFsZ05hbWU9by5hbGc7aWYoby5wcm92PT09dW5kZWZpbmVkKXt0aGlzLnByb3ZOYW1lPUtKVVIuY3J5cHRvLlV0aWwuREVGQVVMVFBST1ZJREVSW3RoaXMuYWxnTmFtZV19ZWxzZXt0aGlzLnByb3ZOYW1lPW8ucHJvdn10aGlzLmFsZ1Byb3ZOYW1lPXRoaXMuYWxnTmFtZStcIjpcIit0aGlzLnByb3ZOYW1lO3RoaXMuc2V0QWxnQW5kUHJvdmlkZXIodGhpcy5hbGdOYW1lLHRoaXMucHJvdk5hbWUpO3RoaXMuX3NldEFsZ05hbWVzKCl9aWYoby5wc3NzYWx0bGVuIT09dW5kZWZpbmVkKXt0aGlzLnBzc1NhbHRMZW49by5wc3NzYWx0bGVufWlmKG8ucHJ2a2V5cGVtIT09dW5kZWZpbmVkKXtpZihvLnBydmtleXBhcyE9PXVuZGVmaW5lZCl7dGhyb3dcImJvdGggcHJ2a2V5cGVtIGFuZCBwcnZrZXlwYXMgcGFyYW1ldGVycyBub3Qgc3VwcG9ydGVkXCJ9ZWxzZXt0cnl7dmFyIHE9S0VZVVRJTC5nZXRLZXkoby5wcnZrZXlwZW0pO3RoaXMuaW5pdChxKX1jYXRjaChtKXt0aHJvd1wiZmF0YWwgZXJyb3IgdG8gbG9hZCBwZW0gcHJpdmF0ZSBrZXk6IFwiK219fX19fTtLSlVSLmNyeXB0by5DaXBoZXI9ZnVuY3Rpb24oYSl7fTtLSlVSLmNyeXB0by5DaXBoZXIuZW5jcnlwdD1mdW5jdGlvbihlLGYsZCl7aWYoZiBpbnN0YW5jZW9mIFJTQUtleSYmZi5pc1B1YmxpYyl7dmFyIGM9S0pVUi5jcnlwdG8uQ2lwaGVyLmdldEFsZ0J5S2V5QW5kTmFtZShmLGQpO2lmKGM9PT1cIlJTQVwiKXtyZXR1cm4gZi5lbmNyeXB0KGUpfWlmKGM9PT1cIlJTQU9BRVBcIil7cmV0dXJuIGYuZW5jcnlwdE9BRVAoZSxcInNoYTFcIil9dmFyIGI9Yy5tYXRjaCgvXlJTQU9BRVAoXFxkKykkLyk7aWYoYiE9PW51bGwpe3JldHVybiBmLmVuY3J5cHRPQUVQKGUsXCJzaGFcIitiWzFdKX10aHJvd1wiQ2lwaGVyLmVuY3J5cHQ6IHVuc3VwcG9ydGVkIGFsZ29yaXRobSBmb3IgUlNBS2V5OiBcIitkfWVsc2V7dGhyb3dcIkNpcGhlci5lbmNyeXB0OiB1bnN1cHBvcnRlZCBrZXkgb3IgYWxnb3JpdGhtXCJ9fTtLSlVSLmNyeXB0by5DaXBoZXIuZGVjcnlwdD1mdW5jdGlvbihlLGYsZCl7aWYoZiBpbnN0YW5jZW9mIFJTQUtleSYmZi5pc1ByaXZhdGUpe3ZhciBjPUtKVVIuY3J5cHRvLkNpcGhlci5nZXRBbGdCeUtleUFuZE5hbWUoZixkKTtpZihjPT09XCJSU0FcIil7cmV0dXJuIGYuZGVjcnlwdChlKX1pZihjPT09XCJSU0FPQUVQXCIpe3JldHVybiBmLmRlY3J5cHRPQUVQKGUsXCJzaGExXCIpfXZhciBiPWMubWF0Y2goL15SU0FPQUVQKFxcZCspJC8pO2lmKGIhPT1udWxsKXtyZXR1cm4gZi5kZWNyeXB0T0FFUChlLFwic2hhXCIrYlsxXSl9dGhyb3dcIkNpcGhlci5kZWNyeXB0OiB1bnN1cHBvcnRlZCBhbGdvcml0aG0gZm9yIFJTQUtleTogXCIrZH1lbHNle3Rocm93XCJDaXBoZXIuZGVjcnlwdDogdW5zdXBwb3J0ZWQga2V5IG9yIGFsZ29yaXRobVwifX07S0pVUi5jcnlwdG8uQ2lwaGVyLmdldEFsZ0J5S2V5QW5kTmFtZT1mdW5jdGlvbihiLGEpe2lmKGIgaW5zdGFuY2VvZiBSU0FLZXkpe2lmKFwiOlJTQTpSU0FPQUVQOlJTQU9BRVAyMjQ6UlNBT0FFUDI1NjpSU0FPQUVQMzg0OlJTQU9BRVA1MTI6XCIuaW5kZXhPZihhKSE9LTEpe3JldHVybiBhfWlmKGE9PT1udWxsfHxhPT09dW5kZWZpbmVkKXtyZXR1cm5cIlJTQVwifXRocm93XCJnZXRBbGdCeUtleUFuZE5hbWU6IG5vdCBzdXBwb3J0ZWQgYWxnb3JpdGhtIG5hbWUgZm9yIFJTQUtleTogXCIrYX10aHJvd1wiZ2V0QWxnQnlLZXlBbmROYW1lOiBub3Qgc3VwcG9ydGVkIGFsZ29yaXRobSBuYW1lOiBcIithfTtLSlVSLmNyeXB0by5PSUQ9bmV3IGZ1bmN0aW9uKCl7dGhpcy5vaWRoZXgybmFtZT17XCIyYTg2NDg4NmY3MGQwMTAxMDFcIjpcInJzYUVuY3J5cHRpb25cIixcIjJhODY0OGNlM2QwMjAxXCI6XCJlY1B1YmxpY0tleVwiLFwiMmE4NjQ4Y2UzODA0MDFcIjpcImRzYVwiLFwiMmE4NjQ4Y2UzZDAzMDEwN1wiOlwic2VjcDI1NnIxXCIsXCIyYjgxMDQwMDFmXCI6XCJzZWNwMTkyazFcIixcIjJiODEwNDAwMjFcIjpcInNlY3AyMjRyMVwiLFwiMmI4MTA0MDAwYVwiOlwic2VjcDI1NmsxXCIsXCIyYjgxMDQwMDIzXCI6XCJzZWNwNTIxcjFcIixcIjJiODEwNDAwMjJcIjpcInNlY3AzODRyMVwiLFwiMmE4NjQ4Y2UzODA0MDNcIjpcIlNIQTF3aXRoRFNBXCIsXCI2MDg2NDgwMTY1MDMwNDAzMDFcIjpcIlNIQTIyNHdpdGhEU0FcIixcIjYwODY0ODAxNjUwMzA0MDMwMlwiOlwiU0hBMjU2d2l0aERTQVwiLH19O1xuaWYodHlwZW9mIEtKVVI9PVwidW5kZWZpbmVkXCJ8fCFLSlVSKXtLSlVSPXt9fWlmKHR5cGVvZiBLSlVSLmNyeXB0bz09XCJ1bmRlZmluZWRcInx8IUtKVVIuY3J5cHRvKXtLSlVSLmNyeXB0bz17fX1LSlVSLmNyeXB0by5FQ0RTQT1mdW5jdGlvbihoKXt2YXIgZT1cInNlY3AyNTZyMVwiO3ZhciBnPW51bGw7dmFyIGI9bnVsbDt2YXIgZj1udWxsO3ZhciBhPW5ldyBTZWN1cmVSYW5kb20oKTt2YXIgZD1udWxsO3RoaXMudHlwZT1cIkVDXCI7dGhpcy5pc1ByaXZhdGU9ZmFsc2U7dGhpcy5pc1B1YmxpYz1mYWxzZTtmdW5jdGlvbiBjKHMsbyxyLG4pe3ZhciBqPU1hdGgubWF4KG8uYml0TGVuZ3RoKCksbi5iaXRMZW5ndGgoKSk7dmFyIHQ9cy5hZGQyRChyKTt2YXIgcT1zLmN1cnZlLmdldEluZmluaXR5KCk7Zm9yKHZhciBwPWotMTtwPj0wOy0tcCl7cT1xLnR3aWNlMkQoKTtxLno9QmlnSW50ZWdlci5PTkU7aWYoby50ZXN0Qml0KHApKXtpZihuLnRlc3RCaXQocCkpe3E9cS5hZGQyRCh0KX1lbHNle3E9cS5hZGQyRChzKX19ZWxzZXtpZihuLnRlc3RCaXQocCkpe3E9cS5hZGQyRChyKX19fXJldHVybiBxfXRoaXMuZ2V0QmlnUmFuZG9tPWZ1bmN0aW9uKGkpe3JldHVybiBuZXcgQmlnSW50ZWdlcihpLmJpdExlbmd0aCgpLGEpLm1vZChpLnN1YnRyYWN0KEJpZ0ludGVnZXIuT05FKSkuYWRkKEJpZ0ludGVnZXIuT05FKX07dGhpcy5zZXROYW1lZEN1cnZlPWZ1bmN0aW9uKGkpe3RoaXMuZWNwYXJhbXM9S0pVUi5jcnlwdG8uRUNQYXJhbWV0ZXJEQi5nZXRCeU5hbWUoaSk7dGhpcy5wcnZLZXlIZXg9bnVsbDt0aGlzLnB1YktleUhleD1udWxsO3RoaXMuY3VydmVOYW1lPWl9O3RoaXMuc2V0UHJpdmF0ZUtleUhleD1mdW5jdGlvbihpKXt0aGlzLmlzUHJpdmF0ZT10cnVlO3RoaXMucHJ2S2V5SGV4PWl9O3RoaXMuc2V0UHVibGljS2V5SGV4PWZ1bmN0aW9uKGkpe3RoaXMuaXNQdWJsaWM9dHJ1ZTt0aGlzLnB1YktleUhleD1pfTt0aGlzLmdldFB1YmxpY0tleVhZSGV4PWZ1bmN0aW9uKCl7dmFyIGs9dGhpcy5wdWJLZXlIZXg7aWYoay5zdWJzdHIoMCwyKSE9PVwiMDRcIil7dGhyb3dcInRoaXMgbWV0aG9kIHN1cHBvcnRzIHVuY29tcHJlc3NlZCBmb3JtYXQoMDQpIG9ubHlcIn12YXIgaj10aGlzLmVjcGFyYW1zLmtleWxlbi80O2lmKGsubGVuZ3RoIT09MitqKjIpe3Rocm93XCJtYWxmb3JtZWQgcHVibGljIGtleSBoZXggbGVuZ3RoXCJ9dmFyIGk9e307aS54PWsuc3Vic3RyKDIsaik7aS55PWsuc3Vic3RyKDIraik7cmV0dXJuIGl9O3RoaXMuZ2V0U2hvcnROSVNUUEN1cnZlTmFtZT1mdW5jdGlvbigpe3ZhciBpPXRoaXMuY3VydmVOYW1lO2lmKGk9PT1cInNlY3AyNTZyMVwifHxpPT09XCJOSVNUIFAtMjU2XCJ8fGk9PT1cIlAtMjU2XCJ8fGk9PT1cInByaW1lMjU2djFcIil7cmV0dXJuXCJQLTI1NlwifWlmKGk9PT1cInNlY3AzODRyMVwifHxpPT09XCJOSVNUIFAtMzg0XCJ8fGk9PT1cIlAtMzg0XCIpe3JldHVyblwiUC0zODRcIn1yZXR1cm4gbnVsbH07dGhpcy5nZW5lcmF0ZUtleVBhaXJIZXg9ZnVuY3Rpb24oKXt2YXIgaz10aGlzLmVjcGFyYW1zLm47dmFyIG49dGhpcy5nZXRCaWdSYW5kb20oayk7dmFyIGw9dGhpcy5lY3BhcmFtcy5HLm11bHRpcGx5KG4pO3ZhciBxPWwuZ2V0WCgpLnRvQmlnSW50ZWdlcigpO3ZhciBvPWwuZ2V0WSgpLnRvQmlnSW50ZWdlcigpO3ZhciBpPXRoaXMuZWNwYXJhbXMua2V5bGVuLzQ7dmFyIG09KFwiMDAwMDAwMDAwMFwiK24udG9TdHJpbmcoMTYpKS5zbGljZSgtaSk7dmFyIHI9KFwiMDAwMDAwMDAwMFwiK3EudG9TdHJpbmcoMTYpKS5zbGljZSgtaSk7dmFyIHA9KFwiMDAwMDAwMDAwMFwiK28udG9TdHJpbmcoMTYpKS5zbGljZSgtaSk7dmFyIGo9XCIwNFwiK3IrcDt0aGlzLnNldFByaXZhdGVLZXlIZXgobSk7dGhpcy5zZXRQdWJsaWNLZXlIZXgoaik7cmV0dXJue2VjcHJ2aGV4Om0sZWNwdWJoZXg6an19O3RoaXMuc2lnbldpdGhNZXNzYWdlSGFzaD1mdW5jdGlvbihpKXtyZXR1cm4gdGhpcy5zaWduSGV4KGksdGhpcy5wcnZLZXlIZXgpfTt0aGlzLnNpZ25IZXg9ZnVuY3Rpb24obyxqKXt2YXIgdD1uZXcgQmlnSW50ZWdlcihqLDE2KTt2YXIgbD10aGlzLmVjcGFyYW1zLm47dmFyIHE9bmV3IEJpZ0ludGVnZXIobywxNik7ZG97dmFyIG09dGhpcy5nZXRCaWdSYW5kb20obCk7dmFyIHU9dGhpcy5lY3BhcmFtcy5HO3ZhciBwPXUubXVsdGlwbHkobSk7dmFyIGk9cC5nZXRYKCkudG9CaWdJbnRlZ2VyKCkubW9kKGwpfXdoaWxlKGkuY29tcGFyZVRvKEJpZ0ludGVnZXIuWkVSTyk8PTApO3ZhciB2PW0ubW9kSW52ZXJzZShsKS5tdWx0aXBseShxLmFkZCh0Lm11bHRpcGx5KGkpKSkubW9kKGwpO3JldHVybiBLSlVSLmNyeXB0by5FQ0RTQS5iaVJTU2lnVG9BU04xU2lnKGksdil9O3RoaXMuc2lnbj1mdW5jdGlvbihtLHUpe3ZhciBxPXU7dmFyIGo9dGhpcy5lY3BhcmFtcy5uO3ZhciBwPUJpZ0ludGVnZXIuZnJvbUJ5dGVBcnJheVVuc2lnbmVkKG0pO2Rve3ZhciBsPXRoaXMuZ2V0QmlnUmFuZG9tKGopO3ZhciB0PXRoaXMuZWNwYXJhbXMuRzt2YXIgbz10Lm11bHRpcGx5KGwpO3ZhciBpPW8uZ2V0WCgpLnRvQmlnSW50ZWdlcigpLm1vZChqKX13aGlsZShpLmNvbXBhcmVUbyhCaWdJbnRlZ2VyLlpFUk8pPD0wKTt2YXIgdj1sLm1vZEludmVyc2UoaikubXVsdGlwbHkocC5hZGQocS5tdWx0aXBseShpKSkpLm1vZChqKTtyZXR1cm4gdGhpcy5zZXJpYWxpemVTaWcoaSx2KX07dGhpcy52ZXJpZnlXaXRoTWVzc2FnZUhhc2g9ZnVuY3Rpb24oaixpKXtyZXR1cm4gdGhpcy52ZXJpZnlIZXgoaixpLHRoaXMucHViS2V5SGV4KX07dGhpcy52ZXJpZnlIZXg9ZnVuY3Rpb24obSxpLHApe3ZhciBsLGo7dmFyIG89S0pVUi5jcnlwdG8uRUNEU0EucGFyc2VTaWdIZXgoaSk7bD1vLnI7aj1vLnM7dmFyIGs7az1FQ1BvaW50RnAuZGVjb2RlRnJvbUhleCh0aGlzLmVjcGFyYW1zLmN1cnZlLHApO3ZhciBuPW5ldyBCaWdJbnRlZ2VyKG0sMTYpO3JldHVybiB0aGlzLnZlcmlmeVJhdyhuLGwsaixrKX07dGhpcy52ZXJpZnk9ZnVuY3Rpb24obyxwLGope3ZhciBsLGk7aWYoQml0Y29pbi5VdGlsLmlzQXJyYXkocCkpe3ZhciBuPXRoaXMucGFyc2VTaWcocCk7bD1uLnI7aT1uLnN9ZWxzZXtpZihcIm9iamVjdFwiPT09dHlwZW9mIHAmJnAuciYmcC5zKXtsPXAucjtpPXAuc31lbHNle3Rocm93XCJJbnZhbGlkIHZhbHVlIGZvciBzaWduYXR1cmVcIn19dmFyIGs7aWYoaiBpbnN0YW5jZW9mIEVDUG9pbnRGcCl7az1qfWVsc2V7aWYoQml0Y29pbi5VdGlsLmlzQXJyYXkoaikpe2s9RUNQb2ludEZwLmRlY29kZUZyb20odGhpcy5lY3BhcmFtcy5jdXJ2ZSxqKX1lbHNle3Rocm93XCJJbnZhbGlkIGZvcm1hdCBmb3IgcHVia2V5IHZhbHVlLCBtdXN0IGJlIGJ5dGUgYXJyYXkgb3IgRUNQb2ludEZwXCJ9fXZhciBtPUJpZ0ludGVnZXIuZnJvbUJ5dGVBcnJheVVuc2lnbmVkKG8pO3JldHVybiB0aGlzLnZlcmlmeVJhdyhtLGwsaSxrKX07dGhpcy52ZXJpZnlSYXc9ZnVuY3Rpb24obyxpLHcsbSl7dmFyIGw9dGhpcy5lY3BhcmFtcy5uO3ZhciB1PXRoaXMuZWNwYXJhbXMuRztpZihpLmNvbXBhcmVUbyhCaWdJbnRlZ2VyLk9ORSk8MHx8aS5jb21wYXJlVG8obCk+PTApe3JldHVybiBmYWxzZX1pZih3LmNvbXBhcmVUbyhCaWdJbnRlZ2VyLk9ORSk8MHx8dy5jb21wYXJlVG8obCk+PTApe3JldHVybiBmYWxzZX12YXIgcD13Lm1vZEludmVyc2UobCk7dmFyIGs9by5tdWx0aXBseShwKS5tb2QobCk7dmFyIGo9aS5tdWx0aXBseShwKS5tb2QobCk7dmFyIHE9dS5tdWx0aXBseShrKS5hZGQobS5tdWx0aXBseShqKSk7dmFyIHQ9cS5nZXRYKCkudG9CaWdJbnRlZ2VyKCkubW9kKGwpO3JldHVybiB0LmVxdWFscyhpKX07dGhpcy5zZXJpYWxpemVTaWc9ZnVuY3Rpb24oayxqKXt2YXIgbD1rLnRvQnl0ZUFycmF5U2lnbmVkKCk7dmFyIGk9ai50b0J5dGVBcnJheVNpZ25lZCgpO3ZhciBtPVtdO20ucHVzaCgyKTttLnB1c2gobC5sZW5ndGgpO209bS5jb25jYXQobCk7bS5wdXNoKDIpO20ucHVzaChpLmxlbmd0aCk7bT1tLmNvbmNhdChpKTttLnVuc2hpZnQobS5sZW5ndGgpO20udW5zaGlmdCg0OCk7cmV0dXJuIG19O3RoaXMucGFyc2VTaWc9ZnVuY3Rpb24obil7dmFyIG07aWYoblswXSE9NDgpe3Rocm93IG5ldyBFcnJvcihcIlNpZ25hdHVyZSBub3QgYSB2YWxpZCBERVJTZXF1ZW5jZVwiKX1tPTI7aWYoblttXSE9Mil7dGhyb3cgbmV3IEVycm9yKFwiRmlyc3QgZWxlbWVudCBpbiBzaWduYXR1cmUgbXVzdCBiZSBhIERFUkludGVnZXJcIil9dmFyIGw9bi5zbGljZShtKzIsbSsyK25bbSsxXSk7bSs9MituW20rMV07aWYoblttXSE9Mil7dGhyb3cgbmV3IEVycm9yKFwiU2Vjb25kIGVsZW1lbnQgaW4gc2lnbmF0dXJlIG11c3QgYmUgYSBERVJJbnRlZ2VyXCIpfXZhciBpPW4uc2xpY2UobSsyLG0rMituW20rMV0pO20rPTIrblttKzFdO3ZhciBrPUJpZ0ludGVnZXIuZnJvbUJ5dGVBcnJheVVuc2lnbmVkKGwpO3ZhciBqPUJpZ0ludGVnZXIuZnJvbUJ5dGVBcnJheVVuc2lnbmVkKGkpO3JldHVybntyOmssczpqfX07dGhpcy5wYXJzZVNpZ0NvbXBhY3Q9ZnVuY3Rpb24obSl7aWYobS5sZW5ndGghPT02NSl7dGhyb3dcIlNpZ25hdHVyZSBoYXMgdGhlIHdyb25nIGxlbmd0aFwifXZhciBqPW1bMF0tMjc7aWYoajwwfHxqPjcpe3Rocm93XCJJbnZhbGlkIHNpZ25hdHVyZSB0eXBlXCJ9dmFyIG89dGhpcy5lY3BhcmFtcy5uO3ZhciBsPUJpZ0ludGVnZXIuZnJvbUJ5dGVBcnJheVVuc2lnbmVkKG0uc2xpY2UoMSwzMykpLm1vZChvKTt2YXIgaz1CaWdJbnRlZ2VyLmZyb21CeXRlQXJyYXlVbnNpZ25lZChtLnNsaWNlKDMzLDY1KSkubW9kKG8pO3JldHVybntyOmwsczprLGk6an19O3RoaXMucmVhZFBLQ1M1UHJ2S2V5SGV4PWZ1bmN0aW9uKGwpe3ZhciBuPUFTTjFIRVg7dmFyIG09S0pVUi5jcnlwdG8uRUNEU0EuZ2V0TmFtZTt2YXIgcD1uLmdldFZieUxpc3Q7aWYobi5pc0FTTjFIRVgobCk9PT1mYWxzZSl7dGhyb3dcIm5vdCBBU04uMSBoZXggc3RyaW5nXCJ9dmFyIGksayxvO3RyeXtpPXAobCwwLFsyLDBdLFwiMDZcIik7az1wKGwsMCxbMV0sXCIwNFwiKTt0cnl7bz1wKGwsMCxbMywwXSxcIjAzXCIpLnN1YnN0cigyKX1jYXRjaChqKXt9fWNhdGNoKGope3Rocm93XCJtYWxmb3JtZWQgUEtDUyMxLzUgcGxhaW4gRUNDIHByaXZhdGUga2V5XCJ9dGhpcy5jdXJ2ZU5hbWU9bShpKTtpZih0aGlzLmN1cnZlTmFtZT09PXVuZGVmaW5lZCl7dGhyb3dcInVuc3VwcG9ydGVkIGN1cnZlIG5hbWVcIn10aGlzLnNldE5hbWVkQ3VydmUodGhpcy5jdXJ2ZU5hbWUpO3RoaXMuc2V0UHVibGljS2V5SGV4KG8pO3RoaXMuc2V0UHJpdmF0ZUtleUhleChrKTt0aGlzLmlzUHVibGljPWZhbHNlfTt0aGlzLnJlYWRQS0NTOFBydktleUhleD1mdW5jdGlvbihsKXt2YXIgcT1BU04xSEVYO3ZhciBpPUtKVVIuY3J5cHRvLkVDRFNBLmdldE5hbWU7dmFyIG49cS5nZXRWYnlMaXN0O2lmKHEuaXNBU04xSEVYKGwpPT09ZmFsc2Upe3Rocm93XCJub3QgQVNOLjEgaGV4IHN0cmluZ1wifXZhciBqLHAsbSxrO3RyeXtqPW4obCwwLFsxLDBdLFwiMDZcIik7cD1uKGwsMCxbMSwxXSxcIjA2XCIpO209bihsLDAsWzIsMCwxXSxcIjA0XCIpO3RyeXtrPW4obCwwLFsyLDAsMiwwXSxcIjAzXCIpLnN1YnN0cigyKX1jYXRjaChvKXt9fWNhdGNoKG8pe3Rocm93XCJtYWxmb3JtZWQgUEtDUyM4IHBsYWluIEVDQyBwcml2YXRlIGtleVwifXRoaXMuY3VydmVOYW1lPWkocCk7aWYodGhpcy5jdXJ2ZU5hbWU9PT11bmRlZmluZWQpe3Rocm93XCJ1bnN1cHBvcnRlZCBjdXJ2ZSBuYW1lXCJ9dGhpcy5zZXROYW1lZEN1cnZlKHRoaXMuY3VydmVOYW1lKTt0aGlzLnNldFB1YmxpY0tleUhleChrKTt0aGlzLnNldFByaXZhdGVLZXlIZXgobSk7dGhpcy5pc1B1YmxpYz1mYWxzZX07dGhpcy5yZWFkUEtDUzhQdWJLZXlIZXg9ZnVuY3Rpb24obCl7dmFyIG49QVNOMUhFWDt2YXIgbT1LSlVSLmNyeXB0by5FQ0RTQS5nZXROYW1lO3ZhciBwPW4uZ2V0VmJ5TGlzdDtpZihuLmlzQVNOMUhFWChsKT09PWZhbHNlKXt0aHJvd1wibm90IEFTTi4xIGhleCBzdHJpbmdcIn12YXIgayxpLG87dHJ5e2s9cChsLDAsWzAsMF0sXCIwNlwiKTtpPXAobCwwLFswLDFdLFwiMDZcIik7bz1wKGwsMCxbMV0sXCIwM1wiKS5zdWJzdHIoMil9Y2F0Y2goail7dGhyb3dcIm1hbGZvcm1lZCBQS0NTIzggRUNDIHB1YmxpYyBrZXlcIn10aGlzLmN1cnZlTmFtZT1tKGkpO2lmKHRoaXMuY3VydmVOYW1lPT09bnVsbCl7dGhyb3dcInVuc3VwcG9ydGVkIGN1cnZlIG5hbWVcIn10aGlzLnNldE5hbWVkQ3VydmUodGhpcy5jdXJ2ZU5hbWUpO3RoaXMuc2V0UHVibGljS2V5SGV4KG8pfTt0aGlzLnJlYWRDZXJ0UHViS2V5SGV4PWZ1bmN0aW9uKGsscCl7aWYocCE9PTUpe3A9Nn12YXIgbT1BU04xSEVYO3ZhciBsPUtKVVIuY3J5cHRvLkVDRFNBLmdldE5hbWU7dmFyIG89bS5nZXRWYnlMaXN0O2lmKG0uaXNBU04xSEVYKGspPT09ZmFsc2Upe3Rocm93XCJub3QgQVNOLjEgaGV4IHN0cmluZ1wifXZhciBpLG47dHJ5e2k9byhrLDAsWzAscCwwLDFdLFwiMDZcIik7bj1vKGssMCxbMCxwLDFdLFwiMDNcIikuc3Vic3RyKDIpfWNhdGNoKGope3Rocm93XCJtYWxmb3JtZWQgWC41MDkgY2VydGlmaWNhdGUgRUNDIHB1YmxpYyBrZXlcIn10aGlzLmN1cnZlTmFtZT1sKGkpO2lmKHRoaXMuY3VydmVOYW1lPT09bnVsbCl7dGhyb3dcInVuc3VwcG9ydGVkIGN1cnZlIG5hbWVcIn10aGlzLnNldE5hbWVkQ3VydmUodGhpcy5jdXJ2ZU5hbWUpO3RoaXMuc2V0UHVibGljS2V5SGV4KG4pfTtpZihoIT09dW5kZWZpbmVkKXtpZihoLmN1cnZlIT09dW5kZWZpbmVkKXt0aGlzLmN1cnZlTmFtZT1oLmN1cnZlfX1pZih0aGlzLmN1cnZlTmFtZT09PXVuZGVmaW5lZCl7dGhpcy5jdXJ2ZU5hbWU9ZX10aGlzLnNldE5hbWVkQ3VydmUodGhpcy5jdXJ2ZU5hbWUpO2lmKGghPT11bmRlZmluZWQpe2lmKGgucHJ2IT09dW5kZWZpbmVkKXt0aGlzLnNldFByaXZhdGVLZXlIZXgoaC5wcnYpfWlmKGgucHViIT09dW5kZWZpbmVkKXt0aGlzLnNldFB1YmxpY0tleUhleChoLnB1Yil9fX07S0pVUi5jcnlwdG8uRUNEU0EucGFyc2VTaWdIZXg9ZnVuY3Rpb24oYSl7dmFyIGI9S0pVUi5jcnlwdG8uRUNEU0EucGFyc2VTaWdIZXhJbkhleFJTKGEpO3ZhciBkPW5ldyBCaWdJbnRlZ2VyKGIuciwxNik7dmFyIGM9bmV3IEJpZ0ludGVnZXIoYi5zLDE2KTtyZXR1cm57cjpkLHM6Y319O0tKVVIuY3J5cHRvLkVDRFNBLnBhcnNlU2lnSGV4SW5IZXhSUz1mdW5jdGlvbihmKXt2YXIgaj1BU04xSEVYO3ZhciBpPWouZ2V0Q2hpbGRJZHg7dmFyIGc9ai5nZXRWO2lmKGYuc3Vic3RyKDAsMikhPVwiMzBcIil7dGhyb3dcInNpZ25hdHVyZSBpcyBub3QgYSBBU04uMSBzZXF1ZW5jZVwifXZhciBoPWkoZiwwKTtpZihoLmxlbmd0aCE9Mil7dGhyb3dcIm51bWJlciBvZiBzaWduYXR1cmUgQVNOLjEgc2VxdWVuY2UgZWxlbWVudHMgc2VlbSB3cm9uZ1wifXZhciBlPWhbMF07dmFyIGQ9aFsxXTtpZihmLnN1YnN0cihlLDIpIT1cIjAyXCIpe3Rocm93XCIxc3QgaXRlbSBvZiBzZXF1ZW5lIG9mIHNpZ25hdHVyZSBpcyBub3QgQVNOLjEgaW50ZWdlclwifWlmKGYuc3Vic3RyKGQsMikhPVwiMDJcIil7dGhyb3dcIjJuZCBpdGVtIG9mIHNlcXVlbmUgb2Ygc2lnbmF0dXJlIGlzIG5vdCBBU04uMSBpbnRlZ2VyXCJ9dmFyIGM9ZyhmLGUpO3ZhciBiPWcoZixkKTtyZXR1cm57cjpjLHM6Yn19O0tKVVIuY3J5cHRvLkVDRFNBLmFzbjFTaWdUb0NvbmNhdFNpZz1mdW5jdGlvbihjKXt2YXIgZD1LSlVSLmNyeXB0by5FQ0RTQS5wYXJzZVNpZ0hleEluSGV4UlMoYyk7dmFyIGI9ZC5yO3ZhciBhPWQucztpZihiLnN1YnN0cigwLDIpPT1cIjAwXCImJihiLmxlbmd0aCUzMik9PTIpe2I9Yi5zdWJzdHIoMil9aWYoYS5zdWJzdHIoMCwyKT09XCIwMFwiJiYoYS5sZW5ndGglMzIpPT0yKXthPWEuc3Vic3RyKDIpfWlmKChiLmxlbmd0aCUzMik9PTMwKXtiPVwiMDBcIitifWlmKChhLmxlbmd0aCUzMik9PTMwKXthPVwiMDBcIithfWlmKGIubGVuZ3RoJTMyIT0wKXt0aHJvd1widW5rbm93biBFQ0RTQSBzaWcgciBsZW5ndGggZXJyb3JcIn1pZihhLmxlbmd0aCUzMiE9MCl7dGhyb3dcInVua25vd24gRUNEU0Egc2lnIHMgbGVuZ3RoIGVycm9yXCJ9cmV0dXJuIGIrYX07S0pVUi5jcnlwdG8uRUNEU0EuY29uY2F0U2lnVG9BU04xU2lnPWZ1bmN0aW9uKGEpe2lmKCgoKGEubGVuZ3RoLzIpKjgpJSgxNio4KSkhPTApe3Rocm93XCJ1bmtub3duIEVDRFNBIGNvbmNhdGluYXRlZCByLXMgc2lnICBsZW5ndGggZXJyb3JcIn12YXIgYz1hLnN1YnN0cigwLGEubGVuZ3RoLzIpO3ZhciBiPWEuc3Vic3RyKGEubGVuZ3RoLzIpO3JldHVybiBLSlVSLmNyeXB0by5FQ0RTQS5oZXhSU1NpZ1RvQVNOMVNpZyhjLGIpfTtLSlVSLmNyeXB0by5FQ0RTQS5oZXhSU1NpZ1RvQVNOMVNpZz1mdW5jdGlvbihiLGEpe3ZhciBkPW5ldyBCaWdJbnRlZ2VyKGIsMTYpO3ZhciBjPW5ldyBCaWdJbnRlZ2VyKGEsMTYpO3JldHVybiBLSlVSLmNyeXB0by5FQ0RTQS5iaVJTU2lnVG9BU04xU2lnKGQsYyl9O0tKVVIuY3J5cHRvLkVDRFNBLmJpUlNTaWdUb0FTTjFTaWc9ZnVuY3Rpb24oZixkKXt2YXIgYz1LSlVSLmFzbjE7dmFyIGI9bmV3IGMuREVSSW50ZWdlcih7YmlnaW50OmZ9KTt2YXIgYT1uZXcgYy5ERVJJbnRlZ2VyKHtiaWdpbnQ6ZH0pO3ZhciBlPW5ldyBjLkRFUlNlcXVlbmNlKHthcnJheTpbYixhXX0pO3JldHVybiBlLmdldEVuY29kZWRIZXgoKX07S0pVUi5jcnlwdG8uRUNEU0EuZ2V0TmFtZT1mdW5jdGlvbihhKXtpZihhPT09XCIyYTg2NDhjZTNkMDMwMTA3XCIpe3JldHVyblwic2VjcDI1NnIxXCJ9aWYoYT09PVwiMmI4MTA0MDAwYVwiKXtyZXR1cm5cInNlY3AyNTZrMVwifWlmKGE9PT1cIjJiODEwNDAwMjJcIil7cmV0dXJuXCJzZWNwMzg0cjFcIn1pZihcInxzZWNwMjU2cjF8TklTVCBQLTI1NnxQLTI1NnxwcmltZTI1NnYxfFwiLmluZGV4T2YoYSkhPT0tMSl7cmV0dXJuXCJzZWNwMjU2cjFcIn1pZihcInxzZWNwMjU2azF8XCIuaW5kZXhPZihhKSE9PS0xKXtyZXR1cm5cInNlY3AyNTZrMVwifWlmKFwifHNlY3AzODRyMXxOSVNUIFAtMzg0fFAtMzg0fFwiLmluZGV4T2YoYSkhPT0tMSl7cmV0dXJuXCJzZWNwMzg0cjFcIn1yZXR1cm4gbnVsbH07XG5pZih0eXBlb2YgS0pVUj09XCJ1bmRlZmluZWRcInx8IUtKVVIpe0tKVVI9e319aWYodHlwZW9mIEtKVVIuY3J5cHRvPT1cInVuZGVmaW5lZFwifHwhS0pVUi5jcnlwdG8pe0tKVVIuY3J5cHRvPXt9fUtKVVIuY3J5cHRvLkVDUGFyYW1ldGVyREI9bmV3IGZ1bmN0aW9uKCl7dmFyIGI9e307dmFyIGM9e307ZnVuY3Rpb24gYShkKXtyZXR1cm4gbmV3IEJpZ0ludGVnZXIoZCwxNil9dGhpcy5nZXRCeU5hbWU9ZnVuY3Rpb24oZSl7dmFyIGQ9ZTtpZih0eXBlb2YgY1tkXSE9XCJ1bmRlZmluZWRcIil7ZD1jW2VdfWlmKHR5cGVvZiBiW2RdIT1cInVuZGVmaW5lZFwiKXtyZXR1cm4gYltkXX10aHJvd1widW5yZWdpc3RlcmVkIEVDIGN1cnZlIG5hbWU6IFwiK2R9O3RoaXMucmVnaXN0PWZ1bmN0aW9uKEEsbCxvLGcsbSxlLGosZixrLHUsZCx4KXtiW0FdPXt9O3ZhciBzPWEobyk7dmFyIHo9YShnKTt2YXIgeT1hKG0pO3ZhciB0PWEoZSk7dmFyIHc9YShqKTt2YXIgcj1uZXcgRUNDdXJ2ZUZwKHMseix5KTt2YXIgcT1yLmRlY29kZVBvaW50SGV4KFwiMDRcIitmK2spO2JbQV1bXCJuYW1lXCJdPUE7YltBXVtcImtleWxlblwiXT1sO2JbQV1bXCJjdXJ2ZVwiXT1yO2JbQV1bXCJHXCJdPXE7YltBXVtcIm5cIl09dDtiW0FdW1wiaFwiXT13O2JbQV1bXCJvaWRcIl09ZDtiW0FdW1wiaW5mb1wiXT14O2Zvcih2YXIgdj0wO3Y8dS5sZW5ndGg7disrKXtjW3Vbdl1dPUF9fX07S0pVUi5jcnlwdG8uRUNQYXJhbWV0ZXJEQi5yZWdpc3QoXCJzZWNwMTI4cjFcIiwxMjgsXCJGRkZGRkZGREZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRlwiLFwiRkZGRkZGRkRGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkNcIixcIkU4NzU3OUMxMTA3OUY0M0REODI0OTkzQzJDRUU1RUQzXCIsXCJGRkZGRkZGRTAwMDAwMDAwNzVBMzBEMUI5MDM4QTExNVwiLFwiMVwiLFwiMTYxRkY3NTI4Qjg5OUIyRDBDMjg2MDdDQTUyQzVCODZcIixcIkNGNUFDODM5NUJBRkVCMTNDMDJEQTI5MkRERUQ3QTgzXCIsW10sXCJcIixcInNlY3AxMjhyMSA6IFNFQ0cgY3VydmUgb3ZlciBhIDEyOCBiaXQgcHJpbWUgZmllbGRcIik7S0pVUi5jcnlwdG8uRUNQYXJhbWV0ZXJEQi5yZWdpc3QoXCJzZWNwMTYwazFcIiwxNjAsXCJGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRUZGRkZBQzczXCIsXCIwXCIsXCI3XCIsXCIwMTAwMDAwMDAwMDAwMDAwMDAwMDAxQjhGQTE2REZBQjlBQ0ExNkI2QjNcIixcIjFcIixcIjNCNEMzODJDRTM3QUExOTJBNDAxOUU3NjMwMzZGNEY1REQ0RDdFQkJcIixcIjkzOENGOTM1MzE4RkRDRUQ2QkMyODI4NjUzMTczM0MzRjAzQzRGRUVcIixbXSxcIlwiLFwic2VjcDE2MGsxIDogU0VDRyBjdXJ2ZSBvdmVyIGEgMTYwIGJpdCBwcmltZSBmaWVsZFwiKTtLSlVSLmNyeXB0by5FQ1BhcmFtZXRlckRCLnJlZ2lzdChcInNlY3AxNjByMVwiLDE2MCxcIkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGN0ZGRkZGRkZcIixcIkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGN0ZGRkZGRkNcIixcIjFDOTdCRUZDNTRCRDdBOEI2NUFDRjg5RjgxRDRENEFEQzU2NUZBNDVcIixcIjAxMDAwMDAwMDAwMDAwMDAwMDAwMDFGNEM4RjkyN0FFRDNDQTc1MjI1N1wiLFwiMVwiLFwiNEE5NkI1Njg4RUY1NzMyODQ2NjQ2OTg5NjhDMzhCQjkxM0NCRkM4MlwiLFwiMjNBNjI4NTUzMTY4OTQ3RDU5RENDOTEyMDQyMzUxMzc3QUM1RkIzMlwiLFtdLFwiXCIsXCJzZWNwMTYwcjEgOiBTRUNHIGN1cnZlIG92ZXIgYSAxNjAgYml0IHByaW1lIGZpZWxkXCIpO0tKVVIuY3J5cHRvLkVDUGFyYW1ldGVyREIucmVnaXN0KFwic2VjcDE5MmsxXCIsMTkyLFwiRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRUZGRkZFRTM3XCIsXCIwXCIsXCIzXCIsXCJGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkUyNkYyRkMxNzBGNjk0NjZBNzRERUZEOERcIixcIjFcIixcIkRCNEZGMTBFQzA1N0U5QUUyNkIwN0QwMjgwQjdGNDM0MURBNUQxQjFFQUUwNkM3RFwiLFwiOUIyRjJGNkQ5QzU2MjhBNzg0NDE2M0QwMTVCRTg2MzQ0MDgyQUE4OEQ5NUUyRjlEXCIsW10pO0tKVVIuY3J5cHRvLkVDUGFyYW1ldGVyREIucmVnaXN0KFwic2VjcDE5MnIxXCIsMTkyLFwiRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkVGRkZGRkZGRkZGRkZGRkZGXCIsXCJGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRUZGRkZGRkZGRkZGRkZGRkNcIixcIjY0MjEwNTE5RTU5QzgwRTcwRkE3RTlBQjcyMjQzMDQ5RkVCOERFRUNDMTQ2QjlCMVwiLFwiRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGOTlERUY4MzYxNDZCQzlCMUI0RDIyODMxXCIsXCIxXCIsXCIxODhEQTgwRUIwMzA5MEY2N0NCRjIwRUI0M0ExODgwMEY0RkYwQUZEODJGRjEwMTJcIixcIjA3MTkyQjk1RkZDOERBNzg2MzEwMTFFRDZCMjRDREQ1NzNGOTc3QTExRTc5NDgxMVwiLFtdKTtLSlVSLmNyeXB0by5FQ1BhcmFtZXRlckRCLnJlZ2lzdChcInNlY3AyMjRyMVwiLDIyNCxcIkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxXCIsXCJGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRUZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRVwiLFwiQjQwNTBBODUwQzA0QjNBQkY1NDEzMjU2NTA0NEIwQjdEN0JGRDhCQTI3MEIzOTQzMjM1NUZGQjRcIixcIkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYxNkEyRTBCOEYwM0UxM0REMjk0NTVDNUMyQTNEXCIsXCIxXCIsXCJCNzBFMENCRDZCQjRCRjdGMzIxMzkwQjk0QTAzQzFEMzU2QzIxMTIyMzQzMjgwRDYxMTVDMUQyMVwiLFwiQkQzNzYzODhCNUY3MjNGQjRDMjJERkU2Q0Q0Mzc1QTA1QTA3NDc2NDQ0RDU4MTk5ODUwMDdFMzRcIixbXSk7S0pVUi5jcnlwdG8uRUNQYXJhbWV0ZXJEQi5yZWdpc3QoXCJzZWNwMjU2azFcIiwyNTYsXCJGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRUZGRkZGQzJGXCIsXCIwXCIsXCI3XCIsXCJGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRUJBQUVEQ0U2QUY0OEEwM0JCRkQyNUU4Q0QwMzY0MTQxXCIsXCIxXCIsXCI3OUJFNjY3RUY5RENCQkFDNTVBMDYyOTVDRTg3MEIwNzAyOUJGQ0RCMkRDRTI4RDk1OUYyODE1QjE2RjgxNzk4XCIsXCI0ODNBREE3NzI2QTNDNDY1NURBNEZCRkMwRTExMDhBOEZEMTdCNDQ4QTY4NTU0MTk5QzQ3RDA4RkZCMTBENEI4XCIsW10pO0tKVVIuY3J5cHRvLkVDUGFyYW1ldGVyREIucmVnaXN0KFwic2VjcDI1NnIxXCIsMjU2LFwiRkZGRkZGRkYwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRlwiLFwiRkZGRkZGRkYwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGQ1wiLFwiNUFDNjM1RDhBQTNBOTNFN0IzRUJCRDU1NzY5ODg2QkM2NTFEMDZCMENDNTNCMEY2M0JDRTNDM0UyN0QyNjA0QlwiLFwiRkZGRkZGRkYwMDAwMDAwMEZGRkZGRkZGRkZGRkZGRkZCQ0U2RkFBREE3MTc5RTg0RjNCOUNBQzJGQzYzMjU1MVwiLFwiMVwiLFwiNkIxN0QxRjJFMTJDNDI0N0Y4QkNFNkU1NjNBNDQwRjI3NzAzN0Q4MTJERUIzM0EwRjRBMTM5NDVEODk4QzI5NlwiLFwiNEZFMzQyRTJGRTFBN0Y5QjhFRTdFQjRBN0MwRjlFMTYyQkNFMzM1NzZCMzE1RUNFQ0JCNjQwNjgzN0JGNTFGNVwiLFtcIk5JU1QgUC0yNTZcIixcIlAtMjU2XCIsXCJwcmltZTI1NnYxXCJdKTtLSlVSLmNyeXB0by5FQ1BhcmFtZXRlckRCLnJlZ2lzdChcInNlY3AzODRyMVwiLDM4NCxcIkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkVGRkZGRkZGRjAwMDAwMDAwMDAwMDAwMDBGRkZGRkZGRlwiLFwiRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRUZGRkZGRkZGMDAwMDAwMDAwMDAwMDAwMEZGRkZGRkZDXCIsXCJCMzMxMkZBN0UyM0VFN0U0OTg4RTA1NkJFM0Y4MkQxOTE4MUQ5QzZFRkU4MTQxMTIwMzE0MDg4RjUwMTM4NzVBQzY1NjM5OEQ4QTJFRDE5RDJBODVDOEVERDNFQzJBRUZcIixcIkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkM3NjM0RDgxRjQzNzJEREY1ODFBMERCMjQ4QjBBNzdBRUNFQzE5NkFDQ0M1Mjk3M1wiLFwiMVwiLFwiQUE4N0NBMjJCRThCMDUzNzhFQjFDNzFFRjMyMEFENzQ2RTFEM0I2MjhCQTc5Qjk4NTlGNzQxRTA4MjU0MkEzODU1MDJGMjVEQkY1NTI5NkMzQTU0NUUzODcyNzYwQUI3XCIsXCIzNjE3ZGU0YTk2MjYyYzZmNWQ5ZTk4YmY5MjkyZGMyOWY4ZjQxZGJkMjg5YTE0N2NlOWRhMzExM2I1ZjBiOGMwMGE2MGIxY2UxZDdlODE5ZDdhNDMxZDdjOTBlYTBlNWZcIixbXCJOSVNUIFAtMzg0XCIsXCJQLTM4NFwiXSk7S0pVUi5jcnlwdG8uRUNQYXJhbWV0ZXJEQi5yZWdpc3QoXCJzZWNwNTIxcjFcIiw1MjEsXCIxRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRlwiLFwiMUZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkNcIixcIjA1MTk1M0VCOTYxOEUxQzlBMUY5MjlBMjFBMEI2ODU0MEVFQTJEQTcyNUI5OUIzMTVGM0I4QjQ4OTkxOEVGMTA5RTE1NjE5Mzk1MUVDN0U5MzdCMTY1MkMwQkQzQkIxQkYwNzM1NzNERjg4M0QyQzM0RjFFRjQ1MUZENDZCNTAzRjAwXCIsXCIxRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZBNTE4Njg3ODNCRjJGOTY2QjdGQ0MwMTQ4RjcwOUE1RDAzQkI1QzlCODg5OUM0N0FFQkI2RkI3MUU5MTM4NjQwOVwiLFwiMVwiLFwiQzY4NThFMDZCNzA0MDRFOUNEOUUzRUNCNjYyMzk1QjQ0MjlDNjQ4MTM5MDUzRkI1MjFGODI4QUY2MDZCNEQzREJBQTE0QjVFNzdFRkU3NTkyOEZFMURDMTI3QTJGRkE4REUzMzQ4QjNDMTg1NkE0MjlCRjk3RTdFMzFDMkU1QkQ2NlwiLFwiMDExODM5Mjk2YTc4OWEzYmMwMDQ1YzhhNWZiNDJjN2QxYmQ5OThmNTQ0NDk1NzliNDQ2ODE3YWZiZDE3MjczZTY2MmM5N2VlNzI5OTVlZjQyNjQwYzU1MGI5MDEzZmFkMDc2MTM1M2M3MDg2YTI3MmMyNDA4OGJlOTQ3NjlmZDE2NjUwXCIsW1wiTklTVCBQLTUyMVwiLFwiUC01MjFcIl0pO1xudmFyIEtFWVVUSUw9ZnVuY3Rpb24oKXt2YXIgZD1mdW5jdGlvbihwLHIscSl7cmV0dXJuIGsoQ3J5cHRvSlMuQUVTLHAscixxKX07dmFyIGU9ZnVuY3Rpb24ocCxyLHEpe3JldHVybiBrKENyeXB0b0pTLlRyaXBsZURFUyxwLHIscSl9O3ZhciBhPWZ1bmN0aW9uKHAscixxKXtyZXR1cm4gayhDcnlwdG9KUy5ERVMscCxyLHEpfTt2YXIgaz1mdW5jdGlvbihzLHgsdSxxKXt2YXIgcj1DcnlwdG9KUy5lbmMuSGV4LnBhcnNlKHgpO3ZhciB3PUNyeXB0b0pTLmVuYy5IZXgucGFyc2UodSk7dmFyIHA9Q3J5cHRvSlMuZW5jLkhleC5wYXJzZShxKTt2YXIgdD17fTt0LmtleT13O3QuaXY9cDt0LmNpcGhlcnRleHQ9cjt2YXIgdj1zLmRlY3J5cHQodCx3LHtpdjpwfSk7cmV0dXJuIENyeXB0b0pTLmVuYy5IZXguc3RyaW5naWZ5KHYpfTt2YXIgbD1mdW5jdGlvbihwLHIscSl7cmV0dXJuIGcoQ3J5cHRvSlMuQUVTLHAscixxKX07dmFyIG89ZnVuY3Rpb24ocCxyLHEpe3JldHVybiBnKENyeXB0b0pTLlRyaXBsZURFUyxwLHIscSl9O3ZhciBmPWZ1bmN0aW9uKHAscixxKXtyZXR1cm4gZyhDcnlwdG9KUy5ERVMscCxyLHEpfTt2YXIgZz1mdW5jdGlvbih0LHksdixxKXt2YXIgcz1DcnlwdG9KUy5lbmMuSGV4LnBhcnNlKHkpO3ZhciB4PUNyeXB0b0pTLmVuYy5IZXgucGFyc2Uodik7dmFyIHA9Q3J5cHRvSlMuZW5jLkhleC5wYXJzZShxKTt2YXIgdz10LmVuY3J5cHQocyx4LHtpdjpwfSk7dmFyIHI9Q3J5cHRvSlMuZW5jLkhleC5wYXJzZSh3LnRvU3RyaW5nKCkpO3ZhciB1PUNyeXB0b0pTLmVuYy5CYXNlNjQuc3RyaW5naWZ5KHIpO3JldHVybiB1fTt2YXIgaT17XCJBRVMtMjU2LUNCQ1wiOntwcm9jOmQsZXByb2M6bCxrZXlsZW46MzIsaXZsZW46MTZ9LFwiQUVTLTE5Mi1DQkNcIjp7cHJvYzpkLGVwcm9jOmwsa2V5bGVuOjI0LGl2bGVuOjE2fSxcIkFFUy0xMjgtQ0JDXCI6e3Byb2M6ZCxlcHJvYzpsLGtleWxlbjoxNixpdmxlbjoxNn0sXCJERVMtRURFMy1DQkNcIjp7cHJvYzplLGVwcm9jOm8sa2V5bGVuOjI0LGl2bGVuOjh9LFwiREVTLUNCQ1wiOntwcm9jOmEsZXByb2M6ZixrZXlsZW46OCxpdmxlbjo4fX07dmFyIGM9ZnVuY3Rpb24ocCl7cmV0dXJuIGlbcF1bXCJwcm9jXCJdfTt2YXIgbT1mdW5jdGlvbihwKXt2YXIgcj1DcnlwdG9KUy5saWIuV29yZEFycmF5LnJhbmRvbShwKTt2YXIgcT1DcnlwdG9KUy5lbmMuSGV4LnN0cmluZ2lmeShyKTtyZXR1cm4gcX07dmFyIG49ZnVuY3Rpb24odil7dmFyIHc9e307dmFyIHE9di5tYXRjaChuZXcgUmVnRXhwKFwiREVLLUluZm86IChbXixdKyksKFswLTlBLUZhLWZdKylcIixcIm1cIikpO2lmKHEpe3cuY2lwaGVyPXFbMV07dy5pdnNhbHQ9cVsyXX12YXIgcD12Lm1hdGNoKG5ldyBSZWdFeHAoXCItLS0tLUJFR0lOIChbQS1aXSspIFBSSVZBVEUgS0VZLS0tLS1cIikpO2lmKHApe3cudHlwZT1wWzFdfXZhciB1PS0xO3ZhciB4PTA7aWYodi5pbmRleE9mKFwiXFxyXFxuXFxyXFxuXCIpIT0tMSl7dT12LmluZGV4T2YoXCJcXHJcXG5cXHJcXG5cIik7eD0yfWlmKHYuaW5kZXhPZihcIlxcblxcblwiKSE9LTEpe3U9di5pbmRleE9mKFwiXFxuXFxuXCIpO3g9MX12YXIgdD12LmluZGV4T2YoXCItLS0tLUVORFwiKTtpZih1IT0tMSYmdCE9LTEpe3ZhciByPXYuc3Vic3RyaW5nKHUreCoyLHQteCk7cj1yLnJlcGxhY2UoL1xccysvZyxcIlwiKTt3LmRhdGE9cn1yZXR1cm4gd307dmFyIGo9ZnVuY3Rpb24ocSx5LHApe3ZhciB2PXAuc3Vic3RyaW5nKDAsMTYpO3ZhciB0PUNyeXB0b0pTLmVuYy5IZXgucGFyc2Uodik7dmFyIHI9Q3J5cHRvSlMuZW5jLlV0ZjgucGFyc2UoeSk7dmFyIHU9aVtxXVtcImtleWxlblwiXStpW3FdW1wiaXZsZW5cIl07dmFyIHg9XCJcIjt2YXIgdz1udWxsO2Zvcig7Oyl7dmFyIHM9Q3J5cHRvSlMuYWxnby5NRDUuY3JlYXRlKCk7aWYodyE9bnVsbCl7cy51cGRhdGUodyl9cy51cGRhdGUocik7cy51cGRhdGUodCk7dz1zLmZpbmFsaXplKCk7eD14K0NyeXB0b0pTLmVuYy5IZXguc3RyaW5naWZ5KHcpO2lmKHgubGVuZ3RoPj11KjIpe2JyZWFrfX12YXIgej17fTt6LmtleWhleD14LnN1YnN0cigwLGlbcV1bXCJrZXlsZW5cIl0qMik7ei5pdmhleD14LnN1YnN0cihpW3FdW1wia2V5bGVuXCJdKjIsaVtxXVtcIml2bGVuXCJdKjIpO3JldHVybiB6fTt2YXIgYj1mdW5jdGlvbihwLHYscix3KXt2YXIgcz1DcnlwdG9KUy5lbmMuQmFzZTY0LnBhcnNlKHApO3ZhciBxPUNyeXB0b0pTLmVuYy5IZXguc3RyaW5naWZ5KHMpO3ZhciB1PWlbdl1bXCJwcm9jXCJdO3ZhciB0PXUocSxyLHcpO3JldHVybiB0fTt2YXIgaD1mdW5jdGlvbihwLHMscSx1KXt2YXIgcj1pW3NdW1wiZXByb2NcIl07dmFyIHQ9cihwLHEsdSk7cmV0dXJuIHR9O3JldHVybnt2ZXJzaW9uOlwiMS4wLjBcIixwYXJzZVBLQ1M1UEVNOmZ1bmN0aW9uKHApe3JldHVybiBuKHApfSxnZXRLZXlBbmRVbnVzZWRJdkJ5UGFzc2NvZGVBbmRJdnNhbHQ6ZnVuY3Rpb24ocSxwLHIpe3JldHVybiBqKHEscCxyKX0sZGVjcnlwdEtleUI2NDpmdW5jdGlvbihwLHIscSxzKXtyZXR1cm4gYihwLHIscSxzKX0sZ2V0RGVjcnlwdGVkS2V5SGV4OmZ1bmN0aW9uKHkseCl7dmFyIHE9bih5KTt2YXIgdD1xLnR5cGU7dmFyIHI9cS5jaXBoZXI7dmFyIHA9cS5pdnNhbHQ7dmFyIHM9cS5kYXRhO3ZhciB3PWoocix4LHApO3ZhciB2PXcua2V5aGV4O3ZhciB1PWIocyxyLHYscCk7cmV0dXJuIHV9LGdldEVuY3J5cHRlZFBLQ1M1UEVNRnJvbVBydktleUhleDpmdW5jdGlvbih4LHMsQSx0LHIpe3ZhciBwPVwiXCI7aWYodHlwZW9mIHQ9PVwidW5kZWZpbmVkXCJ8fHQ9PW51bGwpe3Q9XCJBRVMtMjU2LUNCQ1wifWlmKHR5cGVvZiBpW3RdPT1cInVuZGVmaW5lZFwiKXt0aHJvd1wiS0VZVVRJTCB1bnN1cHBvcnRlZCBhbGdvcml0aG06IFwiK3R9aWYodHlwZW9mIHI9PVwidW5kZWZpbmVkXCJ8fHI9PW51bGwpe3ZhciB2PWlbdF1bXCJpdmxlblwiXTt2YXIgdT1tKHYpO3I9dS50b1VwcGVyQ2FzZSgpfXZhciB6PWoodCxBLHIpO3ZhciB5PXoua2V5aGV4O3ZhciB3PWgocyx0LHkscik7dmFyIHE9dy5yZXBsYWNlKC8oLns2NH0pL2csXCIkMVxcclxcblwiKTt2YXIgcD1cIi0tLS0tQkVHSU4gXCIreCtcIiBQUklWQVRFIEtFWS0tLS0tXFxyXFxuXCI7cCs9XCJQcm9jLVR5cGU6IDQsRU5DUllQVEVEXFxyXFxuXCI7cCs9XCJERUstSW5mbzogXCIrdCtcIixcIityK1wiXFxyXFxuXCI7cCs9XCJcXHJcXG5cIjtwKz1xO3ArPVwiXFxyXFxuLS0tLS1FTkQgXCIreCtcIiBQUklWQVRFIEtFWS0tLS0tXFxyXFxuXCI7cmV0dXJuIHB9LHBhcnNlSGV4T2ZFbmNyeXB0ZWRQS0NTODpmdW5jdGlvbih5KXt2YXIgQj1BU04xSEVYO3ZhciB6PUIuZ2V0Q2hpbGRJZHg7dmFyIHc9Qi5nZXRWO3ZhciB0PXt9O3ZhciByPXooeSwwKTtpZihyLmxlbmd0aCE9Mil7dGhyb3dcIm1hbGZvcm1lZCBmb3JtYXQ6IFNFUVVFTkNFKDApLml0ZW1zICE9IDI6IFwiK3IubGVuZ3RofXQuY2lwaGVydGV4dD13KHksclsxXSk7dmFyIEE9eih5LHJbMF0pO2lmKEEubGVuZ3RoIT0yKXt0aHJvd1wibWFsZm9ybWVkIGZvcm1hdDogU0VRVUVOQ0UoMC4wKS5pdGVtcyAhPSAyOiBcIitBLmxlbmd0aH1pZih3KHksQVswXSkhPVwiMmE4NjQ4ODZmNzBkMDEwNTBkXCIpe3Rocm93XCJ0aGlzIG9ubHkgc3VwcG9ydHMgcGtjczVQQkVTMlwifXZhciBwPXooeSxBWzFdKTtpZihBLmxlbmd0aCE9Mil7dGhyb3dcIm1hbGZvcm1lZCBmb3JtYXQ6IFNFUVVFTkNFKDAuMC4xKS5pdGVtcyAhPSAyOiBcIitwLmxlbmd0aH12YXIgcT16KHkscFsxXSk7aWYocS5sZW5ndGghPTIpe3Rocm93XCJtYWxmb3JtZWQgZm9ybWF0OiBTRVFVRU5DRSgwLjAuMS4xKS5pdGVtcyAhPSAyOiBcIitxLmxlbmd0aH1pZih3KHkscVswXSkhPVwiMmE4NjQ4ODZmNzBkMDMwN1wiKXt0aHJvd1widGhpcyBvbmx5IHN1cHBvcnRzIFRyaXBsZURFU1wifXQuZW5jcnlwdGlvblNjaGVtZUFsZz1cIlRyaXBsZURFU1wiO3QuZW5jcnlwdGlvblNjaGVtZUlWPXcoeSxxWzFdKTt2YXIgcz16KHkscFswXSk7aWYocy5sZW5ndGghPTIpe3Rocm93XCJtYWxmb3JtZWQgZm9ybWF0OiBTRVFVRU5DRSgwLjAuMS4wKS5pdGVtcyAhPSAyOiBcIitzLmxlbmd0aH1pZih3KHksc1swXSkhPVwiMmE4NjQ4ODZmNzBkMDEwNTBjXCIpe3Rocm93XCJ0aGlzIG9ubHkgc3VwcG9ydHMgcGtjczVQQktERjJcIn12YXIgeD16KHksc1sxXSk7aWYoeC5sZW5ndGg8Mil7dGhyb3dcIm1hbGZvcm1lZCBmb3JtYXQ6IFNFUVVFTkNFKDAuMC4xLjAuMSkuaXRlbXMgPCAyOiBcIit4Lmxlbmd0aH10LnBia2RmMlNhbHQ9dyh5LHhbMF0pO3ZhciB1PXcoeSx4WzFdKTt0cnl7dC5wYmtkZjJJdGVyPXBhcnNlSW50KHUsMTYpfWNhdGNoKHYpe3Rocm93XCJtYWxmb3JtZWQgZm9ybWF0IHBia2RmMkl0ZXI6IFwiK3V9cmV0dXJuIHR9LGdldFBCS0RGMktleUhleEZyb21QYXJhbTpmdW5jdGlvbih1LHApe3ZhciB0PUNyeXB0b0pTLmVuYy5IZXgucGFyc2UodS5wYmtkZjJTYWx0KTt2YXIgcT11LnBia2RmMkl0ZXI7dmFyIHM9Q3J5cHRvSlMuUEJLREYyKHAsdCx7a2V5U2l6ZToxOTIvMzIsaXRlcmF0aW9uczpxfSk7dmFyIHI9Q3J5cHRvSlMuZW5jLkhleC5zdHJpbmdpZnkocyk7cmV0dXJuIHJ9LF9nZXRQbGFpblBLQ1M4SGV4RnJvbUVuY3J5cHRlZFBLQ1M4UEVNOmZ1bmN0aW9uKHgseSl7dmFyIHI9cGVtdG9oZXgoeCxcIkVOQ1JZUFRFRCBQUklWQVRFIEtFWVwiKTt2YXIgcD10aGlzLnBhcnNlSGV4T2ZFbmNyeXB0ZWRQS0NTOChyKTt2YXIgdT1LRVlVVElMLmdldFBCS0RGMktleUhleEZyb21QYXJhbShwLHkpO3ZhciB2PXt9O3YuY2lwaGVydGV4dD1DcnlwdG9KUy5lbmMuSGV4LnBhcnNlKHAuY2lwaGVydGV4dCk7dmFyIHQ9Q3J5cHRvSlMuZW5jLkhleC5wYXJzZSh1KTt2YXIgcz1DcnlwdG9KUy5lbmMuSGV4LnBhcnNlKHAuZW5jcnlwdGlvblNjaGVtZUlWKTt2YXIgdz1DcnlwdG9KUy5UcmlwbGVERVMuZGVjcnlwdCh2LHQse2l2OnN9KTt2YXIgcT1DcnlwdG9KUy5lbmMuSGV4LnN0cmluZ2lmeSh3KTtyZXR1cm4gcX0sZ2V0S2V5RnJvbUVuY3J5cHRlZFBLQ1M4UEVNOmZ1bmN0aW9uKHMscSl7dmFyIHA9dGhpcy5fZ2V0UGxhaW5QS0NTOEhleEZyb21FbmNyeXB0ZWRQS0NTOFBFTShzLHEpO3ZhciByPXRoaXMuZ2V0S2V5RnJvbVBsYWluUHJpdmF0ZVBLQ1M4SGV4KHApO3JldHVybiByfSxwYXJzZVBsYWluUHJpdmF0ZVBLQ1M4SGV4OmZ1bmN0aW9uKHMpe3ZhciB2PUFTTjFIRVg7dmFyIHU9di5nZXRDaGlsZElkeDt2YXIgdD12LmdldFY7dmFyIHE9e307cS5hbGdwYXJhbT1udWxsO2lmKHMuc3Vic3RyKDAsMikhPVwiMzBcIil7dGhyb3dcIm1hbGZvcm1lZCBwbGFpbiBQS0NTOCBwcml2YXRlIGtleShjb2RlOjAwMSlcIn12YXIgcj11KHMsMCk7aWYoci5sZW5ndGghPTMpe3Rocm93XCJtYWxmb3JtZWQgcGxhaW4gUEtDUzggcHJpdmF0ZSBrZXkoY29kZTowMDIpXCJ9aWYocy5zdWJzdHIoclsxXSwyKSE9XCIzMFwiKXt0aHJvd1wibWFsZm9ybWVkIFBLQ1M4IHByaXZhdGUga2V5KGNvZGU6MDAzKVwifXZhciBwPXUocyxyWzFdKTtpZihwLmxlbmd0aCE9Mil7dGhyb3dcIm1hbGZvcm1lZCBQS0NTOCBwcml2YXRlIGtleShjb2RlOjAwNClcIn1pZihzLnN1YnN0cihwWzBdLDIpIT1cIjA2XCIpe3Rocm93XCJtYWxmb3JtZWQgUEtDUzggcHJpdmF0ZSBrZXkoY29kZTowMDUpXCJ9cS5hbGdvaWQ9dChzLHBbMF0pO2lmKHMuc3Vic3RyKHBbMV0sMik9PVwiMDZcIil7cS5hbGdwYXJhbT10KHMscFsxXSl9aWYocy5zdWJzdHIoclsyXSwyKSE9XCIwNFwiKXt0aHJvd1wibWFsZm9ybWVkIFBLQ1M4IHByaXZhdGUga2V5KGNvZGU6MDA2KVwifXEua2V5aWR4PXYuZ2V0VmlkeChzLHJbMl0pO3JldHVybiBxfSxnZXRLZXlGcm9tUGxhaW5Qcml2YXRlUEtDUzhQRU06ZnVuY3Rpb24ocSl7dmFyIHA9cGVtdG9oZXgocSxcIlBSSVZBVEUgS0VZXCIpO3ZhciByPXRoaXMuZ2V0S2V5RnJvbVBsYWluUHJpdmF0ZVBLQ1M4SGV4KHApO3JldHVybiByfSxnZXRLZXlGcm9tUGxhaW5Qcml2YXRlUEtDUzhIZXg6ZnVuY3Rpb24ocCl7dmFyIHE9dGhpcy5wYXJzZVBsYWluUHJpdmF0ZVBLQ1M4SGV4KHApO3ZhciByO2lmKHEuYWxnb2lkPT1cIjJhODY0ODg2ZjcwZDAxMDEwMVwiKXtyPW5ldyBSU0FLZXkoKX1lbHNle2lmKHEuYWxnb2lkPT1cIjJhODY0OGNlMzgwNDAxXCIpe3I9bmV3IEtKVVIuY3J5cHRvLkRTQSgpfWVsc2V7aWYocS5hbGdvaWQ9PVwiMmE4NjQ4Y2UzZDAyMDFcIil7cj1uZXcgS0pVUi5jcnlwdG8uRUNEU0EoKX1lbHNle3Rocm93XCJ1bnN1cHBvcnRlZCBwcml2YXRlIGtleSBhbGdvcml0aG1cIn19fXIucmVhZFBLQ1M4UHJ2S2V5SGV4KHApO3JldHVybiByfSxfZ2V0S2V5RnJvbVB1YmxpY1BLQ1M4SGV4OmZ1bmN0aW9uKHEpe3ZhciBwO3ZhciByPUFTTjFIRVguZ2V0VmJ5TGlzdChxLDAsWzAsMF0sXCIwNlwiKTtpZihyPT09XCIyYTg2NDg4NmY3MGQwMTAxMDFcIil7cD1uZXcgUlNBS2V5KCl9ZWxzZXtpZihyPT09XCIyYTg2NDhjZTM4MDQwMVwiKXtwPW5ldyBLSlVSLmNyeXB0by5EU0EoKX1lbHNle2lmKHI9PT1cIjJhODY0OGNlM2QwMjAxXCIpe3A9bmV3IEtKVVIuY3J5cHRvLkVDRFNBKCl9ZWxzZXt0aHJvd1widW5zdXBwb3J0ZWQgUEtDUyM4IHB1YmxpYyBrZXkgaGV4XCJ9fX1wLnJlYWRQS0NTOFB1YktleUhleChxKTtyZXR1cm4gcH0scGFyc2VQdWJsaWNSYXdSU0FLZXlIZXg6ZnVuY3Rpb24ocil7dmFyIHU9QVNOMUhFWDt2YXIgdD11LmdldENoaWxkSWR4O3ZhciBzPXUuZ2V0Vjt2YXIgcD17fTtpZihyLnN1YnN0cigwLDIpIT1cIjMwXCIpe3Rocm93XCJtYWxmb3JtZWQgUlNBIGtleShjb2RlOjAwMSlcIn12YXIgcT10KHIsMCk7aWYocS5sZW5ndGghPTIpe3Rocm93XCJtYWxmb3JtZWQgUlNBIGtleShjb2RlOjAwMilcIn1pZihyLnN1YnN0cihxWzBdLDIpIT1cIjAyXCIpe3Rocm93XCJtYWxmb3JtZWQgUlNBIGtleShjb2RlOjAwMylcIn1wLm49cyhyLHFbMF0pO2lmKHIuc3Vic3RyKHFbMV0sMikhPVwiMDJcIil7dGhyb3dcIm1hbGZvcm1lZCBSU0Ega2V5KGNvZGU6MDA0KVwifXAuZT1zKHIscVsxXSk7cmV0dXJuIHB9LHBhcnNlUHVibGljUEtDUzhIZXg6ZnVuY3Rpb24odCl7dmFyIHY9QVNOMUhFWDt2YXIgdT12LmdldENoaWxkSWR4O3ZhciBzPXYuZ2V0Vjt2YXIgcT17fTtxLmFsZ3BhcmFtPW51bGw7dmFyIHI9dSh0LDApO2lmKHIubGVuZ3RoIT0yKXt0aHJvd1wib3V0ZXIgREVSU2VxdWVuY2Ugc2hhbGwgaGF2ZSAyIGVsZW1lbnRzOiBcIityLmxlbmd0aH12YXIgdz1yWzBdO2lmKHQuc3Vic3RyKHcsMikhPVwiMzBcIil7dGhyb3dcIm1hbGZvcm1lZCBQS0NTOCBwdWJsaWMga2V5KGNvZGU6MDAxKVwifXZhciBwPXUodCx3KTtpZihwLmxlbmd0aCE9Mil7dGhyb3dcIm1hbGZvcm1lZCBQS0NTOCBwdWJsaWMga2V5KGNvZGU6MDAyKVwifWlmKHQuc3Vic3RyKHBbMF0sMikhPVwiMDZcIil7dGhyb3dcIm1hbGZvcm1lZCBQS0NTOCBwdWJsaWMga2V5KGNvZGU6MDAzKVwifXEuYWxnb2lkPXModCxwWzBdKTtpZih0LnN1YnN0cihwWzFdLDIpPT1cIjA2XCIpe3EuYWxncGFyYW09cyh0LHBbMV0pfWVsc2V7aWYodC5zdWJzdHIocFsxXSwyKT09XCIzMFwiKXtxLmFsZ3BhcmFtPXt9O3EuYWxncGFyYW0ucD12LmdldFZieUxpc3QodCxwWzFdLFswXSxcIjAyXCIpO3EuYWxncGFyYW0ucT12LmdldFZieUxpc3QodCxwWzFdLFsxXSxcIjAyXCIpO3EuYWxncGFyYW0uZz12LmdldFZieUxpc3QodCxwWzFdLFsyXSxcIjAyXCIpfX1pZih0LnN1YnN0cihyWzFdLDIpIT1cIjAzXCIpe3Rocm93XCJtYWxmb3JtZWQgUEtDUzggcHVibGljIGtleShjb2RlOjAwNClcIn1xLmtleT1zKHQsclsxXSkuc3Vic3RyKDIpO3JldHVybiBxfSx9fSgpO0tFWVVUSUwuZ2V0S2V5PWZ1bmN0aW9uKGwsayxuKXt2YXIgRz1BU04xSEVYLEw9Ry5nZXRDaGlsZElkeCx2PUcuZ2V0VixkPUcuZ2V0VmJ5TGlzdCxjPUtKVVIuY3J5cHRvLGk9Yy5FQ0RTQSxDPWMuRFNBLHc9UlNBS2V5LE09cGVtdG9oZXgsRj1LRVlVVElMO2lmKHR5cGVvZiB3IT1cInVuZGVmaW5lZFwiJiZsIGluc3RhbmNlb2Ygdyl7cmV0dXJuIGx9aWYodHlwZW9mIGkhPVwidW5kZWZpbmVkXCImJmwgaW5zdGFuY2VvZiBpKXtyZXR1cm4gbH1pZih0eXBlb2YgQyE9XCJ1bmRlZmluZWRcIiYmbCBpbnN0YW5jZW9mIEMpe3JldHVybiBsfWlmKGwuY3VydmUhPT11bmRlZmluZWQmJmwueHkhPT11bmRlZmluZWQmJmwuZD09PXVuZGVmaW5lZCl7cmV0dXJuIG5ldyBpKHtwdWI6bC54eSxjdXJ2ZTpsLmN1cnZlfSl9aWYobC5jdXJ2ZSE9PXVuZGVmaW5lZCYmbC5kIT09dW5kZWZpbmVkKXtyZXR1cm4gbmV3IGkoe3BydjpsLmQsY3VydmU6bC5jdXJ2ZX0pfWlmKGwua3R5PT09dW5kZWZpbmVkJiZsLm4hPT11bmRlZmluZWQmJmwuZSE9PXVuZGVmaW5lZCYmbC5kPT09dW5kZWZpbmVkKXt2YXIgUD1uZXcgdygpO1Auc2V0UHVibGljKGwubixsLmUpO3JldHVybiBQfWlmKGwua3R5PT09dW5kZWZpbmVkJiZsLm4hPT11bmRlZmluZWQmJmwuZSE9PXVuZGVmaW5lZCYmbC5kIT09dW5kZWZpbmVkJiZsLnAhPT11bmRlZmluZWQmJmwucSE9PXVuZGVmaW5lZCYmbC5kcCE9PXVuZGVmaW5lZCYmbC5kcSE9PXVuZGVmaW5lZCYmbC5jbyE9PXVuZGVmaW5lZCYmbC5xaT09PXVuZGVmaW5lZCl7dmFyIFA9bmV3IHcoKTtQLnNldFByaXZhdGVFeChsLm4sbC5lLGwuZCxsLnAsbC5xLGwuZHAsbC5kcSxsLmNvKTtyZXR1cm4gUH1pZihsLmt0eT09PXVuZGVmaW5lZCYmbC5uIT09dW5kZWZpbmVkJiZsLmUhPT11bmRlZmluZWQmJmwuZCE9PXVuZGVmaW5lZCYmbC5wPT09dW5kZWZpbmVkKXt2YXIgUD1uZXcgdygpO1Auc2V0UHJpdmF0ZShsLm4sbC5lLGwuZCk7cmV0dXJuIFB9aWYobC5wIT09dW5kZWZpbmVkJiZsLnEhPT11bmRlZmluZWQmJmwuZyE9PXVuZGVmaW5lZCYmbC55IT09dW5kZWZpbmVkJiZsLng9PT11bmRlZmluZWQpe3ZhciBQPW5ldyBDKCk7UC5zZXRQdWJsaWMobC5wLGwucSxsLmcsbC55KTtyZXR1cm4gUH1pZihsLnAhPT11bmRlZmluZWQmJmwucSE9PXVuZGVmaW5lZCYmbC5nIT09dW5kZWZpbmVkJiZsLnkhPT11bmRlZmluZWQmJmwueCE9PXVuZGVmaW5lZCl7dmFyIFA9bmV3IEMoKTtQLnNldFByaXZhdGUobC5wLGwucSxsLmcsbC55LGwueCk7cmV0dXJuIFB9aWYobC5rdHk9PT1cIlJTQVwiJiZsLm4hPT11bmRlZmluZWQmJmwuZSE9PXVuZGVmaW5lZCYmbC5kPT09dW5kZWZpbmVkKXt2YXIgUD1uZXcgdygpO1Auc2V0UHVibGljKGI2NHV0b2hleChsLm4pLGI2NHV0b2hleChsLmUpKTtyZXR1cm4gUH1pZihsLmt0eT09PVwiUlNBXCImJmwubiE9PXVuZGVmaW5lZCYmbC5lIT09dW5kZWZpbmVkJiZsLmQhPT11bmRlZmluZWQmJmwucCE9PXVuZGVmaW5lZCYmbC5xIT09dW5kZWZpbmVkJiZsLmRwIT09dW5kZWZpbmVkJiZsLmRxIT09dW5kZWZpbmVkJiZsLnFpIT09dW5kZWZpbmVkKXt2YXIgUD1uZXcgdygpO1Auc2V0UHJpdmF0ZUV4KGI2NHV0b2hleChsLm4pLGI2NHV0b2hleChsLmUpLGI2NHV0b2hleChsLmQpLGI2NHV0b2hleChsLnApLGI2NHV0b2hleChsLnEpLGI2NHV0b2hleChsLmRwKSxiNjR1dG9oZXgobC5kcSksYjY0dXRvaGV4KGwucWkpKTtyZXR1cm4gUH1pZihsLmt0eT09PVwiUlNBXCImJmwubiE9PXVuZGVmaW5lZCYmbC5lIT09dW5kZWZpbmVkJiZsLmQhPT11bmRlZmluZWQpe3ZhciBQPW5ldyB3KCk7UC5zZXRQcml2YXRlKGI2NHV0b2hleChsLm4pLGI2NHV0b2hleChsLmUpLGI2NHV0b2hleChsLmQpKTtyZXR1cm4gUH1pZihsLmt0eT09PVwiRUNcIiYmbC5jcnYhPT11bmRlZmluZWQmJmwueCE9PXVuZGVmaW5lZCYmbC55IT09dW5kZWZpbmVkJiZsLmQ9PT11bmRlZmluZWQpe3ZhciBqPW5ldyBpKHtjdXJ2ZTpsLmNydn0pO3ZhciB0PWouZWNwYXJhbXMua2V5bGVuLzQ7dmFyIEI9KFwiMDAwMDAwMDAwMFwiK2I2NHV0b2hleChsLngpKS5zbGljZSgtdCk7dmFyIHo9KFwiMDAwMDAwMDAwMFwiK2I2NHV0b2hleChsLnkpKS5zbGljZSgtdCk7dmFyIHU9XCIwNFwiK0IrejtqLnNldFB1YmxpY0tleUhleCh1KTtyZXR1cm4gan1pZihsLmt0eT09PVwiRUNcIiYmbC5jcnYhPT11bmRlZmluZWQmJmwueCE9PXVuZGVmaW5lZCYmbC55IT09dW5kZWZpbmVkJiZsLmQhPT11bmRlZmluZWQpe3ZhciBqPW5ldyBpKHtjdXJ2ZTpsLmNydn0pO3ZhciB0PWouZWNwYXJhbXMua2V5bGVuLzQ7dmFyIEI9KFwiMDAwMDAwMDAwMFwiK2I2NHV0b2hleChsLngpKS5zbGljZSgtdCk7dmFyIHo9KFwiMDAwMDAwMDAwMFwiK2I2NHV0b2hleChsLnkpKS5zbGljZSgtdCk7dmFyIHU9XCIwNFwiK0Irejt2YXIgYj0oXCIwMDAwMDAwMDAwXCIrYjY0dXRvaGV4KGwuZCkpLnNsaWNlKC10KTtqLnNldFB1YmxpY0tleUhleCh1KTtqLnNldFByaXZhdGVLZXlIZXgoYik7cmV0dXJuIGp9aWYobj09PVwicGtjczVwcnZcIil7dmFyIEo9bCxHPUFTTjFIRVgsTixQO049TChKLDApO2lmKE4ubGVuZ3RoPT09OSl7UD1uZXcgdygpO1AucmVhZFBLQ1M1UHJ2S2V5SGV4KEopfWVsc2V7aWYoTi5sZW5ndGg9PT02KXtQPW5ldyBDKCk7UC5yZWFkUEtDUzVQcnZLZXlIZXgoSil9ZWxzZXtpZihOLmxlbmd0aD4yJiZKLnN1YnN0cihOWzFdLDIpPT09XCIwNFwiKXtQPW5ldyBpKCk7UC5yZWFkUEtDUzVQcnZLZXlIZXgoSil9ZWxzZXt0aHJvd1widW5zdXBwb3J0ZWQgUEtDUyMxLzUgaGV4YWRlY2ltYWwga2V5XCJ9fX1yZXR1cm4gUH1pZihuPT09XCJwa2NzOHBydlwiKXt2YXIgUD1GLmdldEtleUZyb21QbGFpblByaXZhdGVQS0NTOEhleChsKTtyZXR1cm4gUH1pZihuPT09XCJwa2NzOHB1YlwiKXtyZXR1cm4gRi5fZ2V0S2V5RnJvbVB1YmxpY1BLQ1M4SGV4KGwpfWlmKG49PT1cIng1MDlwdWJcIil7cmV0dXJuIFg1MDkuZ2V0UHVibGljS2V5RnJvbUNlcnRIZXgobCl9aWYobC5pbmRleE9mKFwiLUVORCBDRVJUSUZJQ0FURS1cIiwwKSE9LTF8fGwuaW5kZXhPZihcIi1FTkQgWDUwOSBDRVJUSUZJQ0FURS1cIiwwKSE9LTF8fGwuaW5kZXhPZihcIi1FTkQgVFJVU1RFRCBDRVJUSUZJQ0FURS1cIiwwKSE9LTEpe3JldHVybiBYNTA5LmdldFB1YmxpY0tleUZyb21DZXJ0UEVNKGwpfWlmKGwuaW5kZXhPZihcIi1FTkQgUFVCTElDIEtFWS1cIikhPS0xKXt2YXIgTz1wZW10b2hleChsLFwiUFVCTElDIEtFWVwiKTtyZXR1cm4gRi5fZ2V0S2V5RnJvbVB1YmxpY1BLQ1M4SGV4KE8pfWlmKGwuaW5kZXhPZihcIi1FTkQgUlNBIFBSSVZBVEUgS0VZLVwiKSE9LTEmJmwuaW5kZXhPZihcIjQsRU5DUllQVEVEXCIpPT0tMSl7dmFyIG09TShsLFwiUlNBIFBSSVZBVEUgS0VZXCIpO3JldHVybiBGLmdldEtleShtLG51bGwsXCJwa2NzNXBydlwiKX1pZihsLmluZGV4T2YoXCItRU5EIERTQSBQUklWQVRFIEtFWS1cIikhPS0xJiZsLmluZGV4T2YoXCI0LEVOQ1JZUFRFRFwiKT09LTEpe3ZhciBJPU0obCxcIkRTQSBQUklWQVRFIEtFWVwiKTt2YXIgRT1kKEksMCxbMV0sXCIwMlwiKTt2YXIgRD1kKEksMCxbMl0sXCIwMlwiKTt2YXIgSz1kKEksMCxbM10sXCIwMlwiKTt2YXIgcj1kKEksMCxbNF0sXCIwMlwiKTt2YXIgcz1kKEksMCxbNV0sXCIwMlwiKTt2YXIgUD1uZXcgQygpO1Auc2V0UHJpdmF0ZShuZXcgQmlnSW50ZWdlcihFLDE2KSxuZXcgQmlnSW50ZWdlcihELDE2KSxuZXcgQmlnSW50ZWdlcihLLDE2KSxuZXcgQmlnSW50ZWdlcihyLDE2KSxuZXcgQmlnSW50ZWdlcihzLDE2KSk7cmV0dXJuIFB9aWYobC5pbmRleE9mKFwiLUVORCBQUklWQVRFIEtFWS1cIikhPS0xKXtyZXR1cm4gRi5nZXRLZXlGcm9tUGxhaW5Qcml2YXRlUEtDUzhQRU0obCl9aWYobC5pbmRleE9mKFwiLUVORCBSU0EgUFJJVkFURSBLRVktXCIpIT0tMSYmbC5pbmRleE9mKFwiNCxFTkNSWVBURURcIikhPS0xKXt2YXIgbz1GLmdldERlY3J5cHRlZEtleUhleChsLGspO3ZhciBIPW5ldyBSU0FLZXkoKTtILnJlYWRQS0NTNVBydktleUhleChvKTtyZXR1cm4gSH1pZihsLmluZGV4T2YoXCItRU5EIEVDIFBSSVZBVEUgS0VZLVwiKSE9LTEmJmwuaW5kZXhPZihcIjQsRU5DUllQVEVEXCIpIT0tMSl7dmFyIEk9Ri5nZXREZWNyeXB0ZWRLZXlIZXgobCxrKTt2YXIgUD1kKEksMCxbMV0sXCIwNFwiKTt2YXIgZj1kKEksMCxbMiwwXSxcIjA2XCIpO3ZhciBBPWQoSSwwLFszLDBdLFwiMDNcIikuc3Vic3RyKDIpO3ZhciBlPVwiXCI7aWYoS0pVUi5jcnlwdG8uT0lELm9pZGhleDJuYW1lW2ZdIT09dW5kZWZpbmVkKXtlPUtKVVIuY3J5cHRvLk9JRC5vaWRoZXgybmFtZVtmXX1lbHNle3Rocm93XCJ1bmRlZmluZWQgT0lEKGhleCkgaW4gS0pVUi5jcnlwdG8uT0lEOiBcIitmfXZhciBqPW5ldyBpKHtjdXJ2ZTplfSk7ai5zZXRQdWJsaWNLZXlIZXgoQSk7ai5zZXRQcml2YXRlS2V5SGV4KFApO2ouaXNQdWJsaWM9ZmFsc2U7cmV0dXJuIGp9aWYobC5pbmRleE9mKFwiLUVORCBEU0EgUFJJVkFURSBLRVktXCIpIT0tMSYmbC5pbmRleE9mKFwiNCxFTkNSWVBURURcIikhPS0xKXt2YXIgST1GLmdldERlY3J5cHRlZEtleUhleChsLGspO3ZhciBFPWQoSSwwLFsxXSxcIjAyXCIpO3ZhciBEPWQoSSwwLFsyXSxcIjAyXCIpO3ZhciBLPWQoSSwwLFszXSxcIjAyXCIpO3ZhciByPWQoSSwwLFs0XSxcIjAyXCIpO3ZhciBzPWQoSSwwLFs1XSxcIjAyXCIpO3ZhciBQPW5ldyBDKCk7UC5zZXRQcml2YXRlKG5ldyBCaWdJbnRlZ2VyKEUsMTYpLG5ldyBCaWdJbnRlZ2VyKEQsMTYpLG5ldyBCaWdJbnRlZ2VyKEssMTYpLG5ldyBCaWdJbnRlZ2VyKHIsMTYpLG5ldyBCaWdJbnRlZ2VyKHMsMTYpKTtyZXR1cm4gUH1pZihsLmluZGV4T2YoXCItRU5EIEVOQ1JZUFRFRCBQUklWQVRFIEtFWS1cIikhPS0xKXtyZXR1cm4gRi5nZXRLZXlGcm9tRW5jcnlwdGVkUEtDUzhQRU0obCxrKX10aHJvd1wibm90IHN1cHBvcnRlZCBhcmd1bWVudFwifTtLRVlVVElMLmdlbmVyYXRlS2V5cGFpcj1mdW5jdGlvbihhLGMpe2lmKGE9PVwiUlNBXCIpe3ZhciBiPWM7dmFyIGg9bmV3IFJTQUtleSgpO2guZ2VuZXJhdGUoYixcIjEwMDAxXCIpO2guaXNQcml2YXRlPXRydWU7aC5pc1B1YmxpYz10cnVlO3ZhciBmPW5ldyBSU0FLZXkoKTt2YXIgZT1oLm4udG9TdHJpbmcoMTYpO3ZhciBpPWguZS50b1N0cmluZygxNik7Zi5zZXRQdWJsaWMoZSxpKTtmLmlzUHJpdmF0ZT1mYWxzZTtmLmlzUHVibGljPXRydWU7dmFyIGs9e307ay5wcnZLZXlPYmo9aDtrLnB1YktleU9iaj1mO3JldHVybiBrfWVsc2V7aWYoYT09XCJFQ1wiKXt2YXIgZD1jO3ZhciBnPW5ldyBLSlVSLmNyeXB0by5FQ0RTQSh7Y3VydmU6ZH0pO3ZhciBqPWcuZ2VuZXJhdGVLZXlQYWlySGV4KCk7dmFyIGg9bmV3IEtKVVIuY3J5cHRvLkVDRFNBKHtjdXJ2ZTpkfSk7aC5zZXRQdWJsaWNLZXlIZXgoai5lY3B1YmhleCk7aC5zZXRQcml2YXRlS2V5SGV4KGouZWNwcnZoZXgpO2guaXNQcml2YXRlPXRydWU7aC5pc1B1YmxpYz1mYWxzZTt2YXIgZj1uZXcgS0pVUi5jcnlwdG8uRUNEU0Eoe2N1cnZlOmR9KTtmLnNldFB1YmxpY0tleUhleChqLmVjcHViaGV4KTtmLmlzUHJpdmF0ZT1mYWxzZTtmLmlzUHVibGljPXRydWU7dmFyIGs9e307ay5wcnZLZXlPYmo9aDtrLnB1YktleU9iaj1mO3JldHVybiBrfWVsc2V7dGhyb3dcInVua25vd24gYWxnb3JpdGhtOiBcIithfX19O0tFWVVUSUwuZ2V0UEVNPWZ1bmN0aW9uKGIsRCx5LG0scSxqKXt2YXIgRj1LSlVSLGs9Ri5hc24xLHo9ay5ERVJPYmplY3RJZGVudGlmaWVyLGY9ay5ERVJJbnRlZ2VyLGw9ay5BU04xVXRpbC5uZXdPYmplY3QsYT1rLng1MDksQz1hLlN1YmplY3RQdWJsaWNLZXlJbmZvLGU9Ri5jcnlwdG8sdT1lLkRTQSxyPWUuRUNEU0Esbj1SU0FLZXk7ZnVuY3Rpb24gQShzKXt2YXIgRz1sKHtzZXE6W3tcImludFwiOjB9LHtcImludFwiOntiaWdpbnQ6cy5ufX0se1wiaW50XCI6cy5lfSx7XCJpbnRcIjp7YmlnaW50OnMuZH19LHtcImludFwiOntiaWdpbnQ6cy5wfX0se1wiaW50XCI6e2JpZ2ludDpzLnF9fSx7XCJpbnRcIjp7YmlnaW50OnMuZG1wMX19LHtcImludFwiOntiaWdpbnQ6cy5kbXExfX0se1wiaW50XCI6e2JpZ2ludDpzLmNvZWZmfX1dfSk7cmV0dXJuIEd9ZnVuY3Rpb24gQihHKXt2YXIgcz1sKHtzZXE6W3tcImludFwiOjF9LHtvY3RzdHI6e2hleDpHLnBydktleUhleH19LHt0YWc6W1wiYTBcIix0cnVlLHtvaWQ6e25hbWU6Ry5jdXJ2ZU5hbWV9fV19LHt0YWc6W1wiYTFcIix0cnVlLHtiaXRzdHI6e2hleDpcIjAwXCIrRy5wdWJLZXlIZXh9fV19XX0pO3JldHVybiBzfWZ1bmN0aW9uIHgocyl7dmFyIEc9bCh7c2VxOlt7XCJpbnRcIjowfSx7XCJpbnRcIjp7YmlnaW50OnMucH19LHtcImludFwiOntiaWdpbnQ6cy5xfX0se1wiaW50XCI6e2JpZ2ludDpzLmd9fSx7XCJpbnRcIjp7YmlnaW50OnMueX19LHtcImludFwiOntiaWdpbnQ6cy54fX1dfSk7cmV0dXJuIEd9aWYoKChuIT09dW5kZWZpbmVkJiZiIGluc3RhbmNlb2Ygbil8fCh1IT09dW5kZWZpbmVkJiZiIGluc3RhbmNlb2YgdSl8fChyIT09dW5kZWZpbmVkJiZiIGluc3RhbmNlb2YgcikpJiZiLmlzUHVibGljPT10cnVlJiYoRD09PXVuZGVmaW5lZHx8RD09XCJQS0NTOFBVQlwiKSl7dmFyIEU9bmV3IEMoYik7dmFyIHc9RS5nZXRFbmNvZGVkSGV4KCk7cmV0dXJuIGhleHRvcGVtKHcsXCJQVUJMSUMgS0VZXCIpfWlmKEQ9PVwiUEtDUzFQUlZcIiYmbiE9PXVuZGVmaW5lZCYmYiBpbnN0YW5jZW9mIG4mJih5PT09dW5kZWZpbmVkfHx5PT1udWxsKSYmYi5pc1ByaXZhdGU9PXRydWUpe3ZhciBFPUEoYik7dmFyIHc9RS5nZXRFbmNvZGVkSGV4KCk7cmV0dXJuIGhleHRvcGVtKHcsXCJSU0EgUFJJVkFURSBLRVlcIil9aWYoRD09XCJQS0NTMVBSVlwiJiZyIT09dW5kZWZpbmVkJiZiIGluc3RhbmNlb2YgciYmKHk9PT11bmRlZmluZWR8fHk9PW51bGwpJiZiLmlzUHJpdmF0ZT09dHJ1ZSl7dmFyIGk9bmV3IHooe25hbWU6Yi5jdXJ2ZU5hbWV9KTt2YXIgdj1pLmdldEVuY29kZWRIZXgoKTt2YXIgaD1CKGIpO3ZhciB0PWguZ2V0RW5jb2RlZEhleCgpO3ZhciBwPVwiXCI7cCs9aGV4dG9wZW0odixcIkVDIFBBUkFNRVRFUlNcIik7cCs9aGV4dG9wZW0odCxcIkVDIFBSSVZBVEUgS0VZXCIpO3JldHVybiBwfWlmKEQ9PVwiUEtDUzFQUlZcIiYmdSE9PXVuZGVmaW5lZCYmYiBpbnN0YW5jZW9mIHUmJih5PT09dW5kZWZpbmVkfHx5PT1udWxsKSYmYi5pc1ByaXZhdGU9PXRydWUpe3ZhciBFPXgoYik7dmFyIHc9RS5nZXRFbmNvZGVkSGV4KCk7cmV0dXJuIGhleHRvcGVtKHcsXCJEU0EgUFJJVkFURSBLRVlcIil9aWYoRD09XCJQS0NTNVBSVlwiJiZuIT09dW5kZWZpbmVkJiZiIGluc3RhbmNlb2YgbiYmKHkhPT11bmRlZmluZWQmJnkhPW51bGwpJiZiLmlzUHJpdmF0ZT09dHJ1ZSl7dmFyIEU9QShiKTt2YXIgdz1FLmdldEVuY29kZWRIZXgoKTtpZihtPT09dW5kZWZpbmVkKXttPVwiREVTLUVERTMtQ0JDXCJ9cmV0dXJuIHRoaXMuZ2V0RW5jcnlwdGVkUEtDUzVQRU1Gcm9tUHJ2S2V5SGV4KFwiUlNBXCIsdyx5LG0sail9aWYoRD09XCJQS0NTNVBSVlwiJiZyIT09dW5kZWZpbmVkJiZiIGluc3RhbmNlb2YgciYmKHkhPT11bmRlZmluZWQmJnkhPW51bGwpJiZiLmlzUHJpdmF0ZT09dHJ1ZSl7dmFyIEU9QihiKTt2YXIgdz1FLmdldEVuY29kZWRIZXgoKTtpZihtPT09dW5kZWZpbmVkKXttPVwiREVTLUVERTMtQ0JDXCJ9cmV0dXJuIHRoaXMuZ2V0RW5jcnlwdGVkUEtDUzVQRU1Gcm9tUHJ2S2V5SGV4KFwiRUNcIix3LHksbSxqKX1pZihEPT1cIlBLQ1M1UFJWXCImJnUhPT11bmRlZmluZWQmJmIgaW5zdGFuY2VvZiB1JiYoeSE9PXVuZGVmaW5lZCYmeSE9bnVsbCkmJmIuaXNQcml2YXRlPT10cnVlKXt2YXIgRT14KGIpO3ZhciB3PUUuZ2V0RW5jb2RlZEhleCgpO2lmKG09PT11bmRlZmluZWQpe209XCJERVMtRURFMy1DQkNcIn1yZXR1cm4gdGhpcy5nZXRFbmNyeXB0ZWRQS0NTNVBFTUZyb21QcnZLZXlIZXgoXCJEU0FcIix3LHksbSxqKX12YXIgbz1mdW5jdGlvbihHLHMpe3ZhciBJPWMoRyxzKTt2YXIgSD1uZXcgbCh7c2VxOlt7c2VxOlt7b2lkOntuYW1lOlwicGtjczVQQkVTMlwifX0se3NlcTpbe3NlcTpbe29pZDp7bmFtZTpcInBrY3M1UEJLREYyXCJ9fSx7c2VxOlt7b2N0c3RyOntoZXg6SS5wYmtkZjJTYWx0fX0se1wiaW50XCI6SS5wYmtkZjJJdGVyfV19XX0se3NlcTpbe29pZDp7bmFtZTpcImRlcy1FREUzLUNCQ1wifX0se29jdHN0cjp7aGV4OkkuZW5jcnlwdGlvblNjaGVtZUlWfX1dfV19XX0se29jdHN0cjp7aGV4OkkuY2lwaGVydGV4dH19XX0pO3JldHVybiBILmdldEVuY29kZWRIZXgoKX07dmFyIGM9ZnVuY3Rpb24oTixPKXt2YXIgSD0xMDA7dmFyIE09Q3J5cHRvSlMubGliLldvcmRBcnJheS5yYW5kb20oOCk7dmFyIEw9XCJERVMtRURFMy1DQkNcIjt2YXIgcz1DcnlwdG9KUy5saWIuV29yZEFycmF5LnJhbmRvbSg4KTt2YXIgST1DcnlwdG9KUy5QQktERjIoTyxNLHtrZXlTaXplOjE5Mi8zMixpdGVyYXRpb25zOkh9KTt2YXIgSj1DcnlwdG9KUy5lbmMuSGV4LnBhcnNlKE4pO3ZhciBLPUNyeXB0b0pTLlRyaXBsZURFUy5lbmNyeXB0KEosSSx7aXY6c30pK1wiXCI7dmFyIEc9e307Ry5jaXBoZXJ0ZXh0PUs7Ry5wYmtkZjJTYWx0PUNyeXB0b0pTLmVuYy5IZXguc3RyaW5naWZ5KE0pO0cucGJrZGYySXRlcj1IO0cuZW5jcnlwdGlvblNjaGVtZUFsZz1MO0cuZW5jcnlwdGlvblNjaGVtZUlWPUNyeXB0b0pTLmVuYy5IZXguc3RyaW5naWZ5KHMpO3JldHVybiBHfTtpZihEPT1cIlBLQ1M4UFJWXCImJm4hPXVuZGVmaW5lZCYmYiBpbnN0YW5jZW9mIG4mJmIuaXNQcml2YXRlPT10cnVlKXt2YXIgZz1BKGIpO3ZhciBkPWcuZ2V0RW5jb2RlZEhleCgpO3ZhciBFPWwoe3NlcTpbe1wiaW50XCI6MH0se3NlcTpbe29pZDp7bmFtZTpcInJzYUVuY3J5cHRpb25cIn19LHtcIm51bGxcIjp0cnVlfV19LHtvY3RzdHI6e2hleDpkfX1dfSk7dmFyIHc9RS5nZXRFbmNvZGVkSGV4KCk7aWYoeT09PXVuZGVmaW5lZHx8eT09bnVsbCl7cmV0dXJuIGhleHRvcGVtKHcsXCJQUklWQVRFIEtFWVwiKX1lbHNle3ZhciB0PW8odyx5KTtyZXR1cm4gaGV4dG9wZW0odCxcIkVOQ1JZUFRFRCBQUklWQVRFIEtFWVwiKX19aWYoRD09XCJQS0NTOFBSVlwiJiZyIT09dW5kZWZpbmVkJiZiIGluc3RhbmNlb2YgciYmYi5pc1ByaXZhdGU9PXRydWUpe3ZhciBnPW5ldyBsKHtzZXE6W3tcImludFwiOjF9LHtvY3RzdHI6e2hleDpiLnBydktleUhleH19LHt0YWc6W1wiYTFcIix0cnVlLHtiaXRzdHI6e2hleDpcIjAwXCIrYi5wdWJLZXlIZXh9fV19XX0pO3ZhciBkPWcuZ2V0RW5jb2RlZEhleCgpO3ZhciBFPWwoe3NlcTpbe1wiaW50XCI6MH0se3NlcTpbe29pZDp7bmFtZTpcImVjUHVibGljS2V5XCJ9fSx7b2lkOntuYW1lOmIuY3VydmVOYW1lfX1dfSx7b2N0c3RyOntoZXg6ZH19XX0pO3ZhciB3PUUuZ2V0RW5jb2RlZEhleCgpO2lmKHk9PT11bmRlZmluZWR8fHk9PW51bGwpe3JldHVybiBoZXh0b3BlbSh3LFwiUFJJVkFURSBLRVlcIil9ZWxzZXt2YXIgdD1vKHcseSk7cmV0dXJuIGhleHRvcGVtKHQsXCJFTkNSWVBURUQgUFJJVkFURSBLRVlcIil9fWlmKEQ9PVwiUEtDUzhQUlZcIiYmdSE9PXVuZGVmaW5lZCYmYiBpbnN0YW5jZW9mIHUmJmIuaXNQcml2YXRlPT10cnVlKXt2YXIgZz1uZXcgZih7YmlnaW50OmIueH0pO3ZhciBkPWcuZ2V0RW5jb2RlZEhleCgpO3ZhciBFPWwoe3NlcTpbe1wiaW50XCI6MH0se3NlcTpbe29pZDp7bmFtZTpcImRzYVwifX0se3NlcTpbe1wiaW50XCI6e2JpZ2ludDpiLnB9fSx7XCJpbnRcIjp7YmlnaW50OmIucX19LHtcImludFwiOntiaWdpbnQ6Yi5nfX1dfV19LHtvY3RzdHI6e2hleDpkfX1dfSk7dmFyIHc9RS5nZXRFbmNvZGVkSGV4KCk7aWYoeT09PXVuZGVmaW5lZHx8eT09bnVsbCl7cmV0dXJuIGhleHRvcGVtKHcsXCJQUklWQVRFIEtFWVwiKX1lbHNle3ZhciB0PW8odyx5KTtyZXR1cm4gaGV4dG9wZW0odCxcIkVOQ1JZUFRFRCBQUklWQVRFIEtFWVwiKX19dGhyb3dcInVuc3VwcG9ydGVkIG9iamVjdCBub3IgZm9ybWF0XCJ9O0tFWVVUSUwuZ2V0S2V5RnJvbUNTUlBFTT1mdW5jdGlvbihiKXt2YXIgYT1wZW10b2hleChiLFwiQ0VSVElGSUNBVEUgUkVRVUVTVFwiKTt2YXIgYz1LRVlVVElMLmdldEtleUZyb21DU1JIZXgoYSk7cmV0dXJuIGN9O0tFWVVUSUwuZ2V0S2V5RnJvbUNTUkhleD1mdW5jdGlvbihhKXt2YXIgYz1LRVlVVElMLnBhcnNlQ1NSSGV4KGEpO3ZhciBiPUtFWVVUSUwuZ2V0S2V5KGMucDhwdWJrZXloZXgsbnVsbCxcInBrY3M4cHViXCIpO3JldHVybiBifTtLRVlVVElMLnBhcnNlQ1NSSGV4PWZ1bmN0aW9uKGQpe3ZhciBpPUFTTjFIRVg7dmFyIGY9aS5nZXRDaGlsZElkeDt2YXIgYz1pLmdldFRMVjt2YXIgYj17fTt2YXIgZz1kO2lmKGcuc3Vic3RyKDAsMikhPVwiMzBcIil7dGhyb3dcIm1hbGZvcm1lZCBDU1IoY29kZTowMDEpXCJ9dmFyIGU9ZihnLDApO2lmKGUubGVuZ3RoPDEpe3Rocm93XCJtYWxmb3JtZWQgQ1NSKGNvZGU6MDAyKVwifWlmKGcuc3Vic3RyKGVbMF0sMikhPVwiMzBcIil7dGhyb3dcIm1hbGZvcm1lZCBDU1IoY29kZTowMDMpXCJ9dmFyIGE9ZihnLGVbMF0pO2lmKGEubGVuZ3RoPDMpe3Rocm93XCJtYWxmb3JtZWQgQ1NSKGNvZGU6MDA0KVwifWIucDhwdWJrZXloZXg9YyhnLGFbMl0pO3JldHVybiBifTtLRVlVVElMLmdldEpXS0Zyb21LZXk9ZnVuY3Rpb24oZCl7dmFyIGI9e307aWYoZCBpbnN0YW5jZW9mIFJTQUtleSYmZC5pc1ByaXZhdGUpe2Iua3R5PVwiUlNBXCI7Yi5uPWhleHRvYjY0dShkLm4udG9TdHJpbmcoMTYpKTtiLmU9aGV4dG9iNjR1KGQuZS50b1N0cmluZygxNikpO2IuZD1oZXh0b2I2NHUoZC5kLnRvU3RyaW5nKDE2KSk7Yi5wPWhleHRvYjY0dShkLnAudG9TdHJpbmcoMTYpKTtiLnE9aGV4dG9iNjR1KGQucS50b1N0cmluZygxNikpO2IuZHA9aGV4dG9iNjR1KGQuZG1wMS50b1N0cmluZygxNikpO2IuZHE9aGV4dG9iNjR1KGQuZG1xMS50b1N0cmluZygxNikpO2IucWk9aGV4dG9iNjR1KGQuY29lZmYudG9TdHJpbmcoMTYpKTtyZXR1cm4gYn1lbHNle2lmKGQgaW5zdGFuY2VvZiBSU0FLZXkmJmQuaXNQdWJsaWMpe2Iua3R5PVwiUlNBXCI7Yi5uPWhleHRvYjY0dShkLm4udG9TdHJpbmcoMTYpKTtiLmU9aGV4dG9iNjR1KGQuZS50b1N0cmluZygxNikpO3JldHVybiBifWVsc2V7aWYoZCBpbnN0YW5jZW9mIEtKVVIuY3J5cHRvLkVDRFNBJiZkLmlzUHJpdmF0ZSl7dmFyIGE9ZC5nZXRTaG9ydE5JU1RQQ3VydmVOYW1lKCk7aWYoYSE9PVwiUC0yNTZcIiYmYSE9PVwiUC0zODRcIil7dGhyb3dcInVuc3VwcG9ydGVkIGN1cnZlIG5hbWUgZm9yIEpXVDogXCIrYX12YXIgYz1kLmdldFB1YmxpY0tleVhZSGV4KCk7Yi5rdHk9XCJFQ1wiO2IuY3J2PWE7Yi54PWhleHRvYjY0dShjLngpO2IueT1oZXh0b2I2NHUoYy55KTtiLmQ9aGV4dG9iNjR1KGQucHJ2S2V5SGV4KTtyZXR1cm4gYn1lbHNle2lmKGQgaW5zdGFuY2VvZiBLSlVSLmNyeXB0by5FQ0RTQSYmZC5pc1B1YmxpYyl7dmFyIGE9ZC5nZXRTaG9ydE5JU1RQQ3VydmVOYW1lKCk7aWYoYSE9PVwiUC0yNTZcIiYmYSE9PVwiUC0zODRcIil7dGhyb3dcInVuc3VwcG9ydGVkIGN1cnZlIG5hbWUgZm9yIEpXVDogXCIrYX12YXIgYz1kLmdldFB1YmxpY0tleVhZSGV4KCk7Yi5rdHk9XCJFQ1wiO2IuY3J2PWE7Yi54PWhleHRvYjY0dShjLngpO2IueT1oZXh0b2I2NHUoYy55KTtyZXR1cm4gYn19fX10aHJvd1wibm90IHN1cHBvcnRlZCBrZXkgb2JqZWN0XCJ9O1xuUlNBS2V5LmdldFBvc0FycmF5T2ZDaGlsZHJlbkZyb21IZXg9ZnVuY3Rpb24oYSl7cmV0dXJuIEFTTjFIRVguZ2V0Q2hpbGRJZHgoYSwwKX07UlNBS2V5LmdldEhleFZhbHVlQXJyYXlPZkNoaWxkcmVuRnJvbUhleD1mdW5jdGlvbihmKXt2YXIgbj1BU04xSEVYO3ZhciBpPW4uZ2V0Vjt2YXIgaz1SU0FLZXkuZ2V0UG9zQXJyYXlPZkNoaWxkcmVuRnJvbUhleChmKTt2YXIgZT1pKGYsa1swXSk7dmFyIGo9aShmLGtbMV0pO3ZhciBiPWkoZixrWzJdKTt2YXIgYz1pKGYsa1szXSk7dmFyIGg9aShmLGtbNF0pO3ZhciBnPWkoZixrWzVdKTt2YXIgbT1pKGYsa1s2XSk7dmFyIGw9aShmLGtbN10pO3ZhciBkPWkoZixrWzhdKTt2YXIgaz1uZXcgQXJyYXkoKTtrLnB1c2goZSxqLGIsYyxoLGcsbSxsLGQpO3JldHVybiBrfTtSU0FLZXkucHJvdG90eXBlLnJlYWRQcml2YXRlS2V5RnJvbVBFTVN0cmluZz1mdW5jdGlvbihkKXt2YXIgYz1wZW10b2hleChkKTt2YXIgYj1SU0FLZXkuZ2V0SGV4VmFsdWVBcnJheU9mQ2hpbGRyZW5Gcm9tSGV4KGMpO3RoaXMuc2V0UHJpdmF0ZUV4KGJbMV0sYlsyXSxiWzNdLGJbNF0sYls1XSxiWzZdLGJbN10sYls4XSl9O1JTQUtleS5wcm90b3R5cGUucmVhZFBLQ1M1UHJ2S2V5SGV4PWZ1bmN0aW9uKGMpe3ZhciBiPVJTQUtleS5nZXRIZXhWYWx1ZUFycmF5T2ZDaGlsZHJlbkZyb21IZXgoYyk7dGhpcy5zZXRQcml2YXRlRXgoYlsxXSxiWzJdLGJbM10sYls0XSxiWzVdLGJbNl0sYls3XSxiWzhdKX07UlNBS2V5LnByb3RvdHlwZS5yZWFkUEtDUzhQcnZLZXlIZXg9ZnVuY3Rpb24oZSl7dmFyIGMsaixsLGIsYSxmLGQsazt2YXIgbT1BU04xSEVYO3ZhciBnPW0uZ2V0VmJ5TGlzdDtpZihtLmlzQVNOMUhFWChlKT09PWZhbHNlKXt0aHJvd1wibm90IEFTTi4xIGhleCBzdHJpbmdcIn10cnl7Yz1nKGUsMCxbMiwwLDFdLFwiMDJcIik7aj1nKGUsMCxbMiwwLDJdLFwiMDJcIik7bD1nKGUsMCxbMiwwLDNdLFwiMDJcIik7Yj1nKGUsMCxbMiwwLDRdLFwiMDJcIik7YT1nKGUsMCxbMiwwLDVdLFwiMDJcIik7Zj1nKGUsMCxbMiwwLDZdLFwiMDJcIik7ZD1nKGUsMCxbMiwwLDddLFwiMDJcIik7az1nKGUsMCxbMiwwLDhdLFwiMDJcIil9Y2F0Y2goaSl7dGhyb3dcIm1hbGZvcm1lZCBQS0NTIzggcGxhaW4gUlNBIHByaXZhdGUga2V5XCJ9dGhpcy5zZXRQcml2YXRlRXgoYyxqLGwsYixhLGYsZCxrKX07UlNBS2V5LnByb3RvdHlwZS5yZWFkUEtDUzVQdWJLZXlIZXg9ZnVuY3Rpb24oYyl7dmFyIGU9QVNOMUhFWDt2YXIgYj1lLmdldFY7aWYoZS5pc0FTTjFIRVgoYyk9PT1mYWxzZSl7dGhyb3dcImtleUhleCBpcyBub3QgQVNOLjEgaGV4IHN0cmluZ1wifXZhciBhPWUuZ2V0Q2hpbGRJZHgoYywwKTtpZihhLmxlbmd0aCE9PTJ8fGMuc3Vic3RyKGFbMF0sMikhPT1cIjAyXCJ8fGMuc3Vic3RyKGFbMV0sMikhPT1cIjAyXCIpe3Rocm93XCJ3cm9uZyBoZXggZm9yIFBLQ1MjNSBwdWJsaWMga2V5XCJ9dmFyIGY9YihjLGFbMF0pO3ZhciBkPWIoYyxhWzFdKTt0aGlzLnNldFB1YmxpYyhmLGQpfTtSU0FLZXkucHJvdG90eXBlLnJlYWRQS0NTOFB1YktleUhleD1mdW5jdGlvbihiKXt2YXIgYz1BU04xSEVYO2lmKGMuaXNBU04xSEVYKGIpPT09ZmFsc2Upe3Rocm93XCJub3QgQVNOLjEgaGV4IHN0cmluZ1wifWlmKGMuZ2V0VExWYnlMaXN0KGIsMCxbMCwwXSkhPT1cIjA2MDkyYTg2NDg4NmY3MGQwMTAxMDFcIil7dGhyb3dcIm5vdCBQS0NTOCBSU0EgcHVibGljIGtleVwifXZhciBhPWMuZ2V0VExWYnlMaXN0KGIsMCxbMSwwXSk7dGhpcy5yZWFkUEtDUzVQdWJLZXlIZXgoYSl9O1JTQUtleS5wcm90b3R5cGUucmVhZENlcnRQdWJLZXlIZXg9ZnVuY3Rpb24oYixkKXt2YXIgYSxjO2E9bmV3IFg1MDkoKTthLnJlYWRDZXJ0SGV4KGIpO2M9YS5nZXRQdWJsaWNLZXlIZXgoKTt0aGlzLnJlYWRQS0NTOFB1YktleUhleChjKX07XG52YXIgX1JFX0hFWERFQ09OTFk9bmV3IFJlZ0V4cChcIlwiKTtfUkVfSEVYREVDT05MWS5jb21waWxlKFwiW14wLTlhLWZdXCIsXCJnaVwiKTtmdW5jdGlvbiBfcnNhc2lnbl9nZXRIZXhQYWRkZWREaWdlc3RJbmZvRm9yU3RyaW5nKGQsZSxhKXt2YXIgYj1mdW5jdGlvbihmKXtyZXR1cm4gS0pVUi5jcnlwdG8uVXRpbC5oYXNoU3RyaW5nKGYsYSl9O3ZhciBjPWIoZCk7cmV0dXJuIEtKVVIuY3J5cHRvLlV0aWwuZ2V0UGFkZGVkRGlnZXN0SW5mb0hleChjLGEsZSl9ZnVuY3Rpb24gX3plcm9QYWRkaW5nT2ZTaWduYXR1cmUoZSxkKXt2YXIgYz1cIlwiO3ZhciBhPWQvNC1lLmxlbmd0aDtmb3IodmFyIGI9MDtiPGE7YisrKXtjPWMrXCIwXCJ9cmV0dXJuIGMrZX1SU0FLZXkucHJvdG90eXBlLnNpZ249ZnVuY3Rpb24oZCxhKXt2YXIgYj1mdW5jdGlvbihlKXtyZXR1cm4gS0pVUi5jcnlwdG8uVXRpbC5oYXNoU3RyaW5nKGUsYSl9O3ZhciBjPWIoZCk7cmV0dXJuIHRoaXMuc2lnbldpdGhNZXNzYWdlSGFzaChjLGEpfTtSU0FLZXkucHJvdG90eXBlLnNpZ25XaXRoTWVzc2FnZUhhc2g9ZnVuY3Rpb24oZSxjKXt2YXIgZj1LSlVSLmNyeXB0by5VdGlsLmdldFBhZGRlZERpZ2VzdEluZm9IZXgoZSxjLHRoaXMubi5iaXRMZW5ndGgoKSk7dmFyIGI9cGFyc2VCaWdJbnQoZiwxNik7dmFyIGQ9dGhpcy5kb1ByaXZhdGUoYik7dmFyIGE9ZC50b1N0cmluZygxNik7cmV0dXJuIF96ZXJvUGFkZGluZ09mU2lnbmF0dXJlKGEsdGhpcy5uLmJpdExlbmd0aCgpKX07ZnVuY3Rpb24gcHNzX21nZjFfc3RyKGMsYSxlKXt2YXIgYj1cIlwiLGQ9MDt3aGlsZShiLmxlbmd0aDxhKXtiKz1oZXh0b3JzdHIoZShyc3RydG9oZXgoYytTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyxbKGQmNDI3ODE5MDA4MCk+PjI0LChkJjE2NzExNjgwKT4+MTYsKGQmNjUyODApPj44LGQmMjU1XSkpKSk7ZCs9MX1yZXR1cm4gYn1SU0FLZXkucHJvdG90eXBlLnNpZ25QU1M9ZnVuY3Rpb24oZSxhLGQpe3ZhciBjPWZ1bmN0aW9uKGYpe3JldHVybiBLSlVSLmNyeXB0by5VdGlsLmhhc2hIZXgoZixhKX07dmFyIGI9Yyhyc3RydG9oZXgoZSkpO2lmKGQ9PT11bmRlZmluZWQpe2Q9LTF9cmV0dXJuIHRoaXMuc2lnbldpdGhNZXNzYWdlSGFzaFBTUyhiLGEsZCl9O1JTQUtleS5wcm90b3R5cGUuc2lnbldpdGhNZXNzYWdlSGFzaFBTUz1mdW5jdGlvbihsLGEsayl7dmFyIGI9aGV4dG9yc3RyKGwpO3ZhciBnPWIubGVuZ3RoO3ZhciBtPXRoaXMubi5iaXRMZW5ndGgoKS0xO3ZhciBjPU1hdGguY2VpbChtLzgpO3ZhciBkO3ZhciBvPWZ1bmN0aW9uKGkpe3JldHVybiBLSlVSLmNyeXB0by5VdGlsLmhhc2hIZXgoaSxhKX07aWYoaz09PS0xfHxrPT09dW5kZWZpbmVkKXtrPWd9ZWxzZXtpZihrPT09LTIpe2s9Yy1nLTJ9ZWxzZXtpZihrPC0yKXt0aHJvd1wiaW52YWxpZCBzYWx0IGxlbmd0aFwifX19aWYoYzwoZytrKzIpKXt0aHJvd1wiZGF0YSB0b28gbG9uZ1wifXZhciBmPVwiXCI7aWYoaz4wKXtmPW5ldyBBcnJheShrKTtuZXcgU2VjdXJlUmFuZG9tKCkubmV4dEJ5dGVzKGYpO2Y9U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsZil9dmFyIG49aGV4dG9yc3RyKG8ocnN0cnRvaGV4KFwiXFx4MDBcXHgwMFxceDAwXFx4MDBcXHgwMFxceDAwXFx4MDBcXHgwMFwiK2IrZikpKTt2YXIgaj1bXTtmb3IoZD0wO2Q8Yy1rLWctMjtkKz0xKXtqW2RdPTB9dmFyIGU9U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsaikrXCJcXHgwMVwiK2Y7dmFyIGg9cHNzX21nZjFfc3RyKG4sZS5sZW5ndGgsbyk7dmFyIHE9W107Zm9yKGQ9MDtkPGUubGVuZ3RoO2QrPTEpe3FbZF09ZS5jaGFyQ29kZUF0KGQpXmguY2hhckNvZGVBdChkKX12YXIgcD0oNjUyODA+Pig4KmMtbSkpJjI1NTtxWzBdJj1+cDtmb3IoZD0wO2Q8ZztkKyspe3EucHVzaChuLmNoYXJDb2RlQXQoZCkpfXEucHVzaCgxODgpO3JldHVybiBfemVyb1BhZGRpbmdPZlNpZ25hdHVyZSh0aGlzLmRvUHJpdmF0ZShuZXcgQmlnSW50ZWdlcihxKSkudG9TdHJpbmcoMTYpLHRoaXMubi5iaXRMZW5ndGgoKSl9O2Z1bmN0aW9uIF9yc2FzaWduX2dldERlY3J5cHRTaWduYXR1cmVCSShhLGQsYyl7dmFyIGI9bmV3IFJTQUtleSgpO2Iuc2V0UHVibGljKGQsYyk7dmFyIGU9Yi5kb1B1YmxpYyhhKTtyZXR1cm4gZX1mdW5jdGlvbiBfcnNhc2lnbl9nZXRIZXhEaWdlc3RJbmZvRnJvbVNpZyhhLGMsYil7dmFyIGU9X3JzYXNpZ25fZ2V0RGVjcnlwdFNpZ25hdHVyZUJJKGEsYyxiKTt2YXIgZD1lLnRvU3RyaW5nKDE2KS5yZXBsYWNlKC9eMWYrMDAvLFwiXCIpO3JldHVybiBkfWZ1bmN0aW9uIF9yc2FzaWduX2dldEFsZ05hbWVBbmRIYXNoRnJvbUhleERpc2dlc3RJbmZvKGYpe2Zvcih2YXIgZSBpbiBLSlVSLmNyeXB0by5VdGlsLkRJR0VTVElORk9IRUFEKXt2YXIgZD1LSlVSLmNyeXB0by5VdGlsLkRJR0VTVElORk9IRUFEW2VdO3ZhciBiPWQubGVuZ3RoO2lmKGYuc3Vic3RyaW5nKDAsYik9PWQpe3ZhciBjPVtlLGYuc3Vic3RyaW5nKGIpXTtyZXR1cm4gY319cmV0dXJuW119UlNBS2V5LnByb3RvdHlwZS52ZXJpZnk9ZnVuY3Rpb24oZixqKXtqPWoucmVwbGFjZShfUkVfSEVYREVDT05MWSxcIlwiKTtqPWoucmVwbGFjZSgvWyBcXG5dKy9nLFwiXCIpO3ZhciBiPXBhcnNlQmlnSW50KGosMTYpO2lmKGIuYml0TGVuZ3RoKCk+dGhpcy5uLmJpdExlbmd0aCgpKXtyZXR1cm4gMH12YXIgaT10aGlzLmRvUHVibGljKGIpO3ZhciBlPWkudG9TdHJpbmcoMTYpLnJlcGxhY2UoL14xZiswMC8sXCJcIik7dmFyIGc9X3JzYXNpZ25fZ2V0QWxnTmFtZUFuZEhhc2hGcm9tSGV4RGlzZ2VzdEluZm8oZSk7aWYoZy5sZW5ndGg9PTApe3JldHVybiBmYWxzZX12YXIgZD1nWzBdO3ZhciBoPWdbMV07dmFyIGE9ZnVuY3Rpb24oayl7cmV0dXJuIEtKVVIuY3J5cHRvLlV0aWwuaGFzaFN0cmluZyhrLGQpfTt2YXIgYz1hKGYpO3JldHVybihoPT1jKX07UlNBS2V5LnByb3RvdHlwZS52ZXJpZnlXaXRoTWVzc2FnZUhhc2g9ZnVuY3Rpb24oZSxhKXthPWEucmVwbGFjZShfUkVfSEVYREVDT05MWSxcIlwiKTthPWEucmVwbGFjZSgvWyBcXG5dKy9nLFwiXCIpO3ZhciBiPXBhcnNlQmlnSW50KGEsMTYpO2lmKGIuYml0TGVuZ3RoKCk+dGhpcy5uLmJpdExlbmd0aCgpKXtyZXR1cm4gMH12YXIgaD10aGlzLmRvUHVibGljKGIpO3ZhciBnPWgudG9TdHJpbmcoMTYpLnJlcGxhY2UoL14xZiswMC8sXCJcIik7dmFyIGM9X3JzYXNpZ25fZ2V0QWxnTmFtZUFuZEhhc2hGcm9tSGV4RGlzZ2VzdEluZm8oZyk7aWYoYy5sZW5ndGg9PTApe3JldHVybiBmYWxzZX12YXIgZD1jWzBdO3ZhciBmPWNbMV07cmV0dXJuKGY9PWUpfTtSU0FLZXkucHJvdG90eXBlLnZlcmlmeVBTUz1mdW5jdGlvbihjLGIsYSxmKXt2YXIgZT1mdW5jdGlvbihnKXtyZXR1cm4gS0pVUi5jcnlwdG8uVXRpbC5oYXNoSGV4KGcsYSl9O3ZhciBkPWUocnN0cnRvaGV4KGMpKTtpZihmPT09dW5kZWZpbmVkKXtmPS0xfXJldHVybiB0aGlzLnZlcmlmeVdpdGhNZXNzYWdlSGFzaFBTUyhkLGIsYSxmKX07UlNBS2V5LnByb3RvdHlwZS52ZXJpZnlXaXRoTWVzc2FnZUhhc2hQU1M9ZnVuY3Rpb24oZixzLGwsYyl7dmFyIGs9bmV3IEJpZ0ludGVnZXIocywxNik7aWYoay5iaXRMZW5ndGgoKT50aGlzLm4uYml0TGVuZ3RoKCkpe3JldHVybiBmYWxzZX12YXIgcj1mdW5jdGlvbihpKXtyZXR1cm4gS0pVUi5jcnlwdG8uVXRpbC5oYXNoSGV4KGksbCl9O3ZhciBqPWhleHRvcnN0cihmKTt2YXIgaD1qLmxlbmd0aDt2YXIgZz10aGlzLm4uYml0TGVuZ3RoKCktMTt2YXIgbT1NYXRoLmNlaWwoZy84KTt2YXIgcTtpZihjPT09LTF8fGM9PT11bmRlZmluZWQpe2M9aH1lbHNle2lmKGM9PT0tMil7Yz1tLWgtMn1lbHNle2lmKGM8LTIpe3Rocm93XCJpbnZhbGlkIHNhbHQgbGVuZ3RoXCJ9fX1pZihtPChoK2MrMikpe3Rocm93XCJkYXRhIHRvbyBsb25nXCJ9dmFyIGE9dGhpcy5kb1B1YmxpYyhrKS50b0J5dGVBcnJheSgpO2ZvcihxPTA7cTxhLmxlbmd0aDtxKz0xKXthW3FdJj0yNTV9d2hpbGUoYS5sZW5ndGg8bSl7YS51bnNoaWZ0KDApfWlmKGFbbS0xXSE9PTE4OCl7dGhyb3dcImVuY29kZWQgbWVzc2FnZSBkb2VzIG5vdCBlbmQgaW4gMHhiY1wifWE9U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsYSk7dmFyIGQ9YS5zdWJzdHIoMCxtLWgtMSk7dmFyIGU9YS5zdWJzdHIoZC5sZW5ndGgsaCk7dmFyIHA9KDY1MjgwPj4oOCptLWcpKSYyNTU7aWYoKGQuY2hhckNvZGVBdCgwKSZwKSE9PTApe3Rocm93XCJiaXRzIGJleW9uZCBrZXlzaXplIG5vdCB6ZXJvXCJ9dmFyIG49cHNzX21nZjFfc3RyKGUsZC5sZW5ndGgscik7dmFyIG89W107Zm9yKHE9MDtxPGQubGVuZ3RoO3ErPTEpe29bcV09ZC5jaGFyQ29kZUF0KHEpXm4uY2hhckNvZGVBdChxKX1vWzBdJj1+cDt2YXIgYj1tLWgtYy0yO2ZvcihxPTA7cTxiO3ErPTEpe2lmKG9bcV0hPT0wKXt0aHJvd1wibGVmdG1vc3Qgb2N0ZXRzIG5vdCB6ZXJvXCJ9fWlmKG9bYl0hPT0xKXt0aHJvd1wiMHgwMSBtYXJrZXIgbm90IGZvdW5kXCJ9cmV0dXJuIGU9PT1oZXh0b3JzdHIocihyc3RydG9oZXgoXCJcXHgwMFxceDAwXFx4MDBcXHgwMFxceDAwXFx4MDBcXHgwMFxceDAwXCIraitTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyxvLnNsaWNlKC1jKSkpKSl9O1JTQUtleS5TQUxUX0xFTl9ITEVOPS0xO1JTQUtleS5TQUxUX0xFTl9NQVg9LTI7UlNBS2V5LlNBTFRfTEVOX1JFQ09WRVI9LTI7XG5mdW5jdGlvbiBYNTA5KCl7dmFyIGs9QVNOMUhFWCxqPWsuZ2V0Q2hpbGRJZHgsaD1rLmdldFYsYj1rLmdldFRMVixmPWsuZ2V0VmJ5TGlzdCxjPWsuZ2V0VExWYnlMaXN0LGc9ay5nZXRJZHhieUxpc3QsZD1rLmdldFZpZHgsaT1rLm9pZG5hbWUsYT1YNTA5LGU9cGVtdG9oZXg7dGhpcy5oZXg9bnVsbDt0aGlzLnZlcnNpb249MDt0aGlzLmZvZmZzZXQ9MDt0aGlzLmFFeHRJbmZvPW51bGw7dGhpcy5nZXRWZXJzaW9uPWZ1bmN0aW9uKCl7aWYodGhpcy5oZXg9PT1udWxsfHx0aGlzLnZlcnNpb24hPT0wKXtyZXR1cm4gdGhpcy52ZXJzaW9ufWlmKGModGhpcy5oZXgsMCxbMCwwXSkhPT1cImEwMDMwMjAxMDJcIil7dGhpcy52ZXJzaW9uPTE7dGhpcy5mb2Zmc2V0PS0xO3JldHVybiAxfXRoaXMudmVyc2lvbj0zO3JldHVybiAzfTt0aGlzLmdldFNlcmlhbE51bWJlckhleD1mdW5jdGlvbigpe3JldHVybiBmKHRoaXMuaGV4LDAsWzAsMSt0aGlzLmZvZmZzZXRdLFwiMDJcIil9O3RoaXMuZ2V0U2lnbmF0dXJlQWxnb3JpdGhtRmllbGQ9ZnVuY3Rpb24oKXtyZXR1cm4gaShmKHRoaXMuaGV4LDAsWzAsMit0aGlzLmZvZmZzZXQsMF0sXCIwNlwiKSl9O3RoaXMuZ2V0SXNzdWVySGV4PWZ1bmN0aW9uKCl7cmV0dXJuIGModGhpcy5oZXgsMCxbMCwzK3RoaXMuZm9mZnNldF0sXCIzMFwiKX07dGhpcy5nZXRJc3N1ZXJTdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gYS5oZXgyZG4odGhpcy5nZXRJc3N1ZXJIZXgoKSl9O3RoaXMuZ2V0U3ViamVjdEhleD1mdW5jdGlvbigpe3JldHVybiBjKHRoaXMuaGV4LDAsWzAsNSt0aGlzLmZvZmZzZXRdLFwiMzBcIil9O3RoaXMuZ2V0U3ViamVjdFN0cmluZz1mdW5jdGlvbigpe3JldHVybiBhLmhleDJkbih0aGlzLmdldFN1YmplY3RIZXgoKSl9O3RoaXMuZ2V0Tm90QmVmb3JlPWZ1bmN0aW9uKCl7dmFyIGw9Zih0aGlzLmhleCwwLFswLDQrdGhpcy5mb2Zmc2V0LDBdKTtsPWwucmVwbGFjZSgvKC4uKS9nLFwiJSQxXCIpO2w9ZGVjb2RlVVJJQ29tcG9uZW50KGwpO3JldHVybiBsfTt0aGlzLmdldE5vdEFmdGVyPWZ1bmN0aW9uKCl7dmFyIGw9Zih0aGlzLmhleCwwLFswLDQrdGhpcy5mb2Zmc2V0LDFdKTtsPWwucmVwbGFjZSgvKC4uKS9nLFwiJSQxXCIpO2w9ZGVjb2RlVVJJQ29tcG9uZW50KGwpO3JldHVybiBsfTt0aGlzLmdldFB1YmxpY0tleUhleD1mdW5jdGlvbigpe3JldHVybiBrLmdldFRMVmJ5TGlzdCh0aGlzLmhleCwwLFswLDYrdGhpcy5mb2Zmc2V0XSxcIjMwXCIpfTt0aGlzLmdldFB1YmxpY0tleUlkeD1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMuaGV4LDAsWzAsNit0aGlzLmZvZmZzZXRdLFwiMzBcIil9O3RoaXMuZ2V0UHVibGljS2V5Q29udGVudElkeD1mdW5jdGlvbigpe3ZhciBsPXRoaXMuZ2V0UHVibGljS2V5SWR4KCk7cmV0dXJuIGcodGhpcy5oZXgsbCxbMSwwXSxcIjMwXCIpfTt0aGlzLmdldFB1YmxpY0tleT1mdW5jdGlvbigpe3JldHVybiBLRVlVVElMLmdldEtleSh0aGlzLmdldFB1YmxpY0tleUhleCgpLG51bGwsXCJwa2NzOHB1YlwiKX07dGhpcy5nZXRTaWduYXR1cmVBbGdvcml0aG1OYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIGkoZih0aGlzLmhleCwwLFsxLDBdLFwiMDZcIikpfTt0aGlzLmdldFNpZ25hdHVyZVZhbHVlSGV4PWZ1bmN0aW9uKCl7cmV0dXJuIGYodGhpcy5oZXgsMCxbMl0sXCIwM1wiLHRydWUpfTt0aGlzLnZlcmlmeVNpZ25hdHVyZT1mdW5jdGlvbihuKXt2YXIgbz10aGlzLmdldFNpZ25hdHVyZUFsZ29yaXRobU5hbWUoKTt2YXIgbD10aGlzLmdldFNpZ25hdHVyZVZhbHVlSGV4KCk7dmFyIG09Yyh0aGlzLmhleCwwLFswXSxcIjMwXCIpO3ZhciBwPW5ldyBLSlVSLmNyeXB0by5TaWduYXR1cmUoe2FsZzpvfSk7cC5pbml0KG4pO3AudXBkYXRlSGV4KG0pO3JldHVybiBwLnZlcmlmeShsKX07dGhpcy5wYXJzZUV4dD1mdW5jdGlvbigpe2lmKHRoaXMudmVyc2lvbiE9PTMpe3JldHVybiAtMX12YXIgcD1nKHRoaXMuaGV4LDAsWzAsNywwXSxcIjMwXCIpO3ZhciBtPWoodGhpcy5oZXgscCk7dGhpcy5hRXh0SW5mbz1uZXcgQXJyYXkoKTtmb3IodmFyIG49MDtuPG0ubGVuZ3RoO24rKyl7dmFyIHE9e307cS5jcml0aWNhbD1mYWxzZTt2YXIgbD1qKHRoaXMuaGV4LG1bbl0pO3ZhciByPTA7aWYobC5sZW5ndGg9PT0zKXtxLmNyaXRpY2FsPXRydWU7cj0xfXEub2lkPWsuaGV4dG9vaWRzdHIoZih0aGlzLmhleCxtW25dLFswXSxcIjA2XCIpKTt2YXIgbz1nKHRoaXMuaGV4LG1bbl0sWzErcl0pO3EudmlkeD1kKHRoaXMuaGV4LG8pO3RoaXMuYUV4dEluZm8ucHVzaChxKX19O3RoaXMuZ2V0RXh0SW5mbz1mdW5jdGlvbihuKXt2YXIgbD10aGlzLmFFeHRJbmZvO3ZhciBvPW47aWYoIW4ubWF0Y2goL15bMC05Ll0rJC8pKXtvPUtKVVIuYXNuMS54NTA5Lk9JRC5uYW1lMm9pZChuKX1pZihvPT09XCJcIil7cmV0dXJuIHVuZGVmaW5lZH1mb3IodmFyIG09MDttPGwubGVuZ3RoO20rKyl7aWYobFttXS5vaWQ9PT1vKXtyZXR1cm4gbFttXX19cmV0dXJuIHVuZGVmaW5lZH07dGhpcy5nZXRFeHRCYXNpY0NvbnN0cmFpbnRzPWZ1bmN0aW9uKCl7dmFyIG49dGhpcy5nZXRFeHRJbmZvKFwiYmFzaWNDb25zdHJhaW50c1wiKTtpZihuPT09dW5kZWZpbmVkKXtyZXR1cm4gbn12YXIgbD1oKHRoaXMuaGV4LG4udmlkeCk7aWYobD09PVwiXCIpe3JldHVybnt9fWlmKGw9PT1cIjAxMDFmZlwiKXtyZXR1cm57Y0E6dHJ1ZX19aWYobC5zdWJzdHIoMCw4KT09PVwiMDEwMWZmMDJcIil7dmFyIG89aChsLDYpO3ZhciBtPXBhcnNlSW50KG8sMTYpO3JldHVybntjQTp0cnVlLHBhdGhMZW46bX19dGhyb3dcImJhc2ljQ29uc3RyYWludHMgcGFyc2UgZXJyb3JcIn07dGhpcy5nZXRFeHRLZXlVc2FnZUJpbj1mdW5jdGlvbigpe3ZhciBvPXRoaXMuZ2V0RXh0SW5mbyhcImtleVVzYWdlXCIpO2lmKG89PT11bmRlZmluZWQpe3JldHVyblwiXCJ9dmFyIG09aCh0aGlzLmhleCxvLnZpZHgpO2lmKG0ubGVuZ3RoJTIhPTB8fG0ubGVuZ3RoPD0yKXt0aHJvd1wibWFsZm9ybWVkIGtleSB1c2FnZSB2YWx1ZVwifXZhciBsPXBhcnNlSW50KG0uc3Vic3RyKDAsMikpO3ZhciBuPXBhcnNlSW50KG0uc3Vic3RyKDIpLDE2KS50b1N0cmluZygyKTtyZXR1cm4gbi5zdWJzdHIoMCxuLmxlbmd0aC1sKX07dGhpcy5nZXRFeHRLZXlVc2FnZVN0cmluZz1mdW5jdGlvbigpe3ZhciBuPXRoaXMuZ2V0RXh0S2V5VXNhZ2VCaW4oKTt2YXIgbD1uZXcgQXJyYXkoKTtmb3IodmFyIG09MDttPG4ubGVuZ3RoO20rKyl7aWYobi5zdWJzdHIobSwxKT09XCIxXCIpe2wucHVzaChYNTA5LktFWVVTQUdFX05BTUVbbV0pfX1yZXR1cm4gbC5qb2luKFwiLFwiKX07dGhpcy5nZXRFeHRTdWJqZWN0S2V5SWRlbnRpZmllcj1mdW5jdGlvbigpe3ZhciBsPXRoaXMuZ2V0RXh0SW5mbyhcInN1YmplY3RLZXlJZGVudGlmaWVyXCIpO2lmKGw9PT11bmRlZmluZWQpe3JldHVybiBsfXJldHVybiBoKHRoaXMuaGV4LGwudmlkeCl9O3RoaXMuZ2V0RXh0QXV0aG9yaXR5S2V5SWRlbnRpZmllcj1mdW5jdGlvbigpe3ZhciBwPXRoaXMuZ2V0RXh0SW5mbyhcImF1dGhvcml0eUtleUlkZW50aWZpZXJcIik7aWYocD09PXVuZGVmaW5lZCl7cmV0dXJuIHB9dmFyIGw9e307dmFyIG89Yih0aGlzLmhleCxwLnZpZHgpO3ZhciBtPWoobywwKTtmb3IodmFyIG49MDtuPG0ubGVuZ3RoO24rKyl7aWYoby5zdWJzdHIobVtuXSwyKT09PVwiODBcIil7bC5raWQ9aChvLG1bbl0pfX1yZXR1cm4gbH07dGhpcy5nZXRFeHRFeHRLZXlVc2FnZU5hbWU9ZnVuY3Rpb24oKXt2YXIgcD10aGlzLmdldEV4dEluZm8oXCJleHRLZXlVc2FnZVwiKTtpZihwPT09dW5kZWZpbmVkKXtyZXR1cm4gcH12YXIgbD1uZXcgQXJyYXkoKTt2YXIgbz1iKHRoaXMuaGV4LHAudmlkeCk7aWYobz09PVwiXCIpe3JldHVybiBsfXZhciBtPWoobywwKTtmb3IodmFyIG49MDtuPG0ubGVuZ3RoO24rKyl7bC5wdXNoKGkoaChvLG1bbl0pKSl9cmV0dXJuIGx9O3RoaXMuZ2V0RXh0U3ViamVjdEFsdE5hbWU9ZnVuY3Rpb24oKXt2YXIgbT10aGlzLmdldEV4dFN1YmplY3RBbHROYW1lMigpO3ZhciBsPW5ldyBBcnJheSgpO2Zvcih2YXIgbj0wO248bS5sZW5ndGg7bisrKXtpZihtW25dWzBdPT09XCJETlNcIil7bC5wdXNoKG1bbl1bMV0pfX1yZXR1cm4gbH07dGhpcy5nZXRFeHRTdWJqZWN0QWx0TmFtZTI9ZnVuY3Rpb24oKXt2YXIgcCxzLHI7dmFyIHE9dGhpcy5nZXRFeHRJbmZvKFwic3ViamVjdEFsdE5hbWVcIik7aWYocT09PXVuZGVmaW5lZCl7cmV0dXJuIHF9dmFyIGw9bmV3IEFycmF5KCk7dmFyIG89Yih0aGlzLmhleCxxLnZpZHgpO3ZhciBtPWoobywwKTtmb3IodmFyIG49MDtuPG0ubGVuZ3RoO24rKyl7cj1vLnN1YnN0cihtW25dLDIpO3A9aChvLG1bbl0pO2lmKHI9PT1cIjgxXCIpe3M9aGV4dG91dGY4KHApO2wucHVzaChbXCJNQUlMXCIsc10pfWlmKHI9PT1cIjgyXCIpe3M9aGV4dG91dGY4KHApO2wucHVzaChbXCJETlNcIixzXSl9aWYocj09PVwiODRcIil7cz1YNTA5LmhleDJkbihwLDApO2wucHVzaChbXCJETlwiLHNdKX1pZihyPT09XCI4NlwiKXtzPWhleHRvdXRmOChwKTtsLnB1c2goW1wiVVJJXCIsc10pfWlmKHI9PT1cIjg3XCIpe3M9aGV4dG9pcChwKTtsLnB1c2goW1wiSVBcIixzXSl9fXJldHVybiBsfTt0aGlzLmdldEV4dENSTERpc3RyaWJ1dGlvblBvaW50c1VSST1mdW5jdGlvbigpe3ZhciBxPXRoaXMuZ2V0RXh0SW5mbyhcImNSTERpc3RyaWJ1dGlvblBvaW50c1wiKTtpZihxPT09dW5kZWZpbmVkKXtyZXR1cm4gcX12YXIgbD1uZXcgQXJyYXkoKTt2YXIgbT1qKHRoaXMuaGV4LHEudmlkeCk7Zm9yKHZhciBvPTA7bzxtLmxlbmd0aDtvKyspe3RyeXt2YXIgcj1mKHRoaXMuaGV4LG1bb10sWzAsMCwwXSxcIjg2XCIpO3ZhciBwPWhleHRvdXRmOChyKTtsLnB1c2gocCl9Y2F0Y2gobil7fX1yZXR1cm4gbH07dGhpcy5nZXRFeHRBSUFJbmZvPWZ1bmN0aW9uKCl7dmFyIHA9dGhpcy5nZXRFeHRJbmZvKFwiYXV0aG9yaXR5SW5mb0FjY2Vzc1wiKTtpZihwPT09dW5kZWZpbmVkKXtyZXR1cm4gcH12YXIgbD17b2NzcDpbXSxjYWlzc3VlcjpbXX07dmFyIG09aih0aGlzLmhleCxwLnZpZHgpO2Zvcih2YXIgbj0wO248bS5sZW5ndGg7bisrKXt2YXIgcT1mKHRoaXMuaGV4LG1bbl0sWzBdLFwiMDZcIik7dmFyIG89Zih0aGlzLmhleCxtW25dLFsxXSxcIjg2XCIpO2lmKHE9PT1cIjJiMDYwMTA1MDUwNzMwMDFcIil7bC5vY3NwLnB1c2goaGV4dG91dGY4KG8pKX1pZihxPT09XCIyYjA2MDEwNTA1MDczMDAyXCIpe2wuY2Fpc3N1ZXIucHVzaChoZXh0b3V0ZjgobykpfX1yZXR1cm4gbH07dGhpcy5nZXRFeHRDZXJ0aWZpY2F0ZVBvbGljaWVzPWZ1bmN0aW9uKCl7dmFyIG89dGhpcy5nZXRFeHRJbmZvKFwiY2VydGlmaWNhdGVQb2xpY2llc1wiKTtpZihvPT09dW5kZWZpbmVkKXtyZXR1cm4gb312YXIgbD1iKHRoaXMuaGV4LG8udmlkeCk7dmFyIHU9W107dmFyIHM9aihsLDApO2Zvcih2YXIgcj0wO3I8cy5sZW5ndGg7cisrKXt2YXIgdD17fTt2YXIgbj1qKGwsc1tyXSk7dC5pZD1pKGgobCxuWzBdKSk7aWYobi5sZW5ndGg9PT0yKXt2YXIgbT1qKGwsblsxXSk7Zm9yKHZhciBxPTA7cTxtLmxlbmd0aDtxKyspe3ZhciBwPWYobCxtW3FdLFswXSxcIjA2XCIpO2lmKHA9PT1cIjJiMDYwMTA1MDUwNzAyMDFcIil7dC5jcHM9aGV4dG91dGY4KGYobCxtW3FdLFsxXSkpfWVsc2V7aWYocD09PVwiMmIwNjAxMDUwNTA3MDIwMlwiKXt0LnVub3RpY2U9aGV4dG91dGY4KGYobCxtW3FdLFsxLDBdKSl9fX19dS5wdXNoKHQpfXJldHVybiB1fTt0aGlzLnJlYWRDZXJ0UEVNPWZ1bmN0aW9uKGwpe3RoaXMucmVhZENlcnRIZXgoZShsKSl9O3RoaXMucmVhZENlcnRIZXg9ZnVuY3Rpb24obCl7dGhpcy5oZXg9bDt0aGlzLmdldFZlcnNpb24oKTt0cnl7Zyh0aGlzLmhleCwwLFswLDddLFwiYTNcIik7dGhpcy5wYXJzZUV4dCgpfWNhdGNoKG0pe319O3RoaXMuZ2V0SW5mbz1mdW5jdGlvbigpe3ZhciBtPVg1MDk7dmFyIEIsdSx6O0I9XCJCYXNpYyBGaWVsZHNcXG5cIjtCKz1cIiAgc2VyaWFsIG51bWJlcjogXCIrdGhpcy5nZXRTZXJpYWxOdW1iZXJIZXgoKStcIlxcblwiO0IrPVwiICBzaWduYXR1cmUgYWxnb3JpdGhtOiBcIit0aGlzLmdldFNpZ25hdHVyZUFsZ29yaXRobUZpZWxkKCkrXCJcXG5cIjtCKz1cIiAgaXNzdWVyOiBcIit0aGlzLmdldElzc3VlclN0cmluZygpK1wiXFxuXCI7Qis9XCIgIG5vdEJlZm9yZTogXCIrdGhpcy5nZXROb3RCZWZvcmUoKStcIlxcblwiO0IrPVwiICBub3RBZnRlcjogXCIrdGhpcy5nZXROb3RBZnRlcigpK1wiXFxuXCI7Qis9XCIgIHN1YmplY3Q6IFwiK3RoaXMuZ2V0U3ViamVjdFN0cmluZygpK1wiXFxuXCI7Qis9XCIgIHN1YmplY3QgcHVibGljIGtleSBpbmZvOiBcXG5cIjt1PXRoaXMuZ2V0UHVibGljS2V5KCk7Qis9XCIgICAga2V5IGFsZ29yaXRobTogXCIrdS50eXBlK1wiXFxuXCI7aWYodS50eXBlPT09XCJSU0FcIil7Qis9XCIgICAgbj1cIitoZXh0b3Bvc2hleCh1Lm4udG9TdHJpbmcoMTYpKS5zdWJzdHIoMCwxNikrXCIuLi5cXG5cIjtCKz1cIiAgICBlPVwiK2hleHRvcG9zaGV4KHUuZS50b1N0cmluZygxNikpK1wiXFxuXCJ9ej10aGlzLmFFeHRJbmZvO2lmKHohPT11bmRlZmluZWQmJnohPT1udWxsKXtCKz1cIlg1MDl2MyBFeHRlbnNpb25zOlxcblwiO2Zvcih2YXIgcj0wO3I8ei5sZW5ndGg7cisrKXt2YXIgbj16W3JdO3ZhciBBPUtKVVIuYXNuMS54NTA5Lk9JRC5vaWQybmFtZShuLm9pZCk7aWYoQT09PVwiXCIpe0E9bi5vaWR9dmFyIHg9XCJcIjtpZihuLmNyaXRpY2FsPT09dHJ1ZSl7eD1cIkNSSVRJQ0FMXCJ9Qis9XCIgIFwiK0ErXCIgXCIreCtcIjpcXG5cIjtpZihBPT09XCJiYXNpY0NvbnN0cmFpbnRzXCIpe3ZhciB2PXRoaXMuZ2V0RXh0QmFzaWNDb25zdHJhaW50cygpO2lmKHYuY0E9PT11bmRlZmluZWQpe0IrPVwiICAgIHt9XFxuXCJ9ZWxzZXtCKz1cIiAgICBjQT10cnVlXCI7aWYodi5wYXRoTGVuIT09dW5kZWZpbmVkKXtCKz1cIiwgcGF0aExlbj1cIit2LnBhdGhMZW59Qis9XCJcXG5cIn19ZWxzZXtpZihBPT09XCJrZXlVc2FnZVwiKXtCKz1cIiAgICBcIit0aGlzLmdldEV4dEtleVVzYWdlU3RyaW5nKCkrXCJcXG5cIn1lbHNle2lmKEE9PT1cInN1YmplY3RLZXlJZGVudGlmaWVyXCIpe0IrPVwiICAgIFwiK3RoaXMuZ2V0RXh0U3ViamVjdEtleUlkZW50aWZpZXIoKStcIlxcblwifWVsc2V7aWYoQT09PVwiYXV0aG9yaXR5S2V5SWRlbnRpZmllclwiKXt2YXIgbD10aGlzLmdldEV4dEF1dGhvcml0eUtleUlkZW50aWZpZXIoKTtpZihsLmtpZCE9PXVuZGVmaW5lZCl7Qis9XCIgICAga2lkPVwiK2wua2lkK1wiXFxuXCJ9fWVsc2V7aWYoQT09PVwiZXh0S2V5VXNhZ2VcIil7dmFyIHc9dGhpcy5nZXRFeHRFeHRLZXlVc2FnZU5hbWUoKTtCKz1cIiAgICBcIit3LmpvaW4oXCIsIFwiKStcIlxcblwifWVsc2V7aWYoQT09PVwic3ViamVjdEFsdE5hbWVcIil7dmFyIHQ9dGhpcy5nZXRFeHRTdWJqZWN0QWx0TmFtZTIoKTtCKz1cIiAgICBcIit0K1wiXFxuXCJ9ZWxzZXtpZihBPT09XCJjUkxEaXN0cmlidXRpb25Qb2ludHNcIil7dmFyIHk9dGhpcy5nZXRFeHRDUkxEaXN0cmlidXRpb25Qb2ludHNVUkkoKTtCKz1cIiAgICBcIit5K1wiXFxuXCJ9ZWxzZXtpZihBPT09XCJhdXRob3JpdHlJbmZvQWNjZXNzXCIpe3ZhciBwPXRoaXMuZ2V0RXh0QUlBSW5mbygpO2lmKHAub2NzcCE9PXVuZGVmaW5lZCl7Qis9XCIgICAgb2NzcDogXCIrcC5vY3NwLmpvaW4oXCIsXCIpK1wiXFxuXCJ9aWYocC5jYWlzc3VlciE9PXVuZGVmaW5lZCl7Qis9XCIgICAgY2Fpc3N1ZXI6IFwiK3AuY2Fpc3N1ZXIuam9pbihcIixcIikrXCJcXG5cIn19ZWxzZXtpZihBPT09XCJjZXJ0aWZpY2F0ZVBvbGljaWVzXCIpe3ZhciBvPXRoaXMuZ2V0RXh0Q2VydGlmaWNhdGVQb2xpY2llcygpO2Zvcih2YXIgcT0wO3E8by5sZW5ndGg7cSsrKXtpZihvW3FdLmlkIT09dW5kZWZpbmVkKXtCKz1cIiAgICBwb2xpY3kgb2lkOiBcIitvW3FdLmlkK1wiXFxuXCJ9aWYob1txXS5jcHMhPT11bmRlZmluZWQpe0IrPVwiICAgIGNwczogXCIrb1txXS5jcHMrXCJcXG5cIn19fX19fX19fX19fX1CKz1cInNpZ25hdHVyZSBhbGdvcml0aG06IFwiK3RoaXMuZ2V0U2lnbmF0dXJlQWxnb3JpdGhtTmFtZSgpK1wiXFxuXCI7Qis9XCJzaWduYXR1cmU6IFwiK3RoaXMuZ2V0U2lnbmF0dXJlVmFsdWVIZXgoKS5zdWJzdHIoMCwxNikrXCIuLi5cXG5cIjtyZXR1cm4gQn19WDUwOS5oZXgyZG49ZnVuY3Rpb24oZixiKXtpZihiPT09dW5kZWZpbmVkKXtiPTB9aWYoZi5zdWJzdHIoYiwyKSE9PVwiMzBcIil7dGhyb3dcIm1hbGZvcm1lZCBETlwifXZhciBjPW5ldyBBcnJheSgpO3ZhciBkPUFTTjFIRVguZ2V0Q2hpbGRJZHgoZixiKTtmb3IodmFyIGU9MDtlPGQubGVuZ3RoO2UrKyl7Yy5wdXNoKFg1MDkuaGV4MnJkbihmLGRbZV0pKX1jPWMubWFwKGZ1bmN0aW9uKGEpe3JldHVybiBhLnJlcGxhY2UoXCIvXCIsXCJcXFxcL1wiKX0pO3JldHVyblwiL1wiK2Muam9pbihcIi9cIil9O1g1MDkuaGV4MnJkbj1mdW5jdGlvbihmLGIpe2lmKGI9PT11bmRlZmluZWQpe2I9MH1pZihmLnN1YnN0cihiLDIpIT09XCIzMVwiKXt0aHJvd1wibWFsZm9ybWVkIFJETlwifXZhciBjPW5ldyBBcnJheSgpO3ZhciBkPUFTTjFIRVguZ2V0Q2hpbGRJZHgoZixiKTtmb3IodmFyIGU9MDtlPGQubGVuZ3RoO2UrKyl7Yy5wdXNoKFg1MDkuaGV4MmF0dHJUeXBlVmFsdWUoZixkW2VdKSl9Yz1jLm1hcChmdW5jdGlvbihhKXtyZXR1cm4gYS5yZXBsYWNlKFwiK1wiLFwiXFxcXCtcIil9KTtyZXR1cm4gYy5qb2luKFwiK1wiKX07WDUwOS5oZXgyYXR0clR5cGVWYWx1ZT1mdW5jdGlvbihkLGkpe3ZhciBqPUFTTjFIRVg7dmFyIGg9ai5nZXRWO2lmKGk9PT11bmRlZmluZWQpe2k9MH1pZihkLnN1YnN0cihpLDIpIT09XCIzMFwiKXt0aHJvd1wibWFsZm9ybWVkIGF0dHJpYnV0ZSB0eXBlIGFuZCB2YWx1ZVwifXZhciBnPWouZ2V0Q2hpbGRJZHgoZCxpKTtpZihnLmxlbmd0aCE9PTJ8fGQuc3Vic3RyKGdbMF0sMikhPT1cIjA2XCIpe1wibWFsZm9ybWVkIGF0dHJpYnV0ZSB0eXBlIGFuZCB2YWx1ZVwifXZhciBiPWgoZCxnWzBdKTt2YXIgZj1LSlVSLmFzbjEuQVNOMVV0aWwub2lkSGV4VG9JbnQoYik7dmFyIGU9S0pVUi5hc24xLng1MDkuT0lELm9pZDJhdHlwZShmKTt2YXIgYT1oKGQsZ1sxXSk7dmFyIGM9aGV4dG9yc3RyKGEpO3JldHVybiBlK1wiPVwiK2N9O1g1MDkuZ2V0UHVibGljS2V5RnJvbUNlcnRIZXg9ZnVuY3Rpb24oYil7dmFyIGE9bmV3IFg1MDkoKTthLnJlYWRDZXJ0SGV4KGIpO3JldHVybiBhLmdldFB1YmxpY0tleSgpfTtYNTA5LmdldFB1YmxpY0tleUZyb21DZXJ0UEVNPWZ1bmN0aW9uKGIpe3ZhciBhPW5ldyBYNTA5KCk7YS5yZWFkQ2VydFBFTShiKTtyZXR1cm4gYS5nZXRQdWJsaWNLZXkoKX07WDUwOS5nZXRQdWJsaWNLZXlJbmZvUHJvcE9mQ2VydFBFTT1mdW5jdGlvbihjKXt2YXIgZT1BU04xSEVYO3ZhciBnPWUuZ2V0VmJ5TGlzdDt2YXIgYj17fTt2YXIgYSxmLGQ7Yi5hbGdwYXJhbT1udWxsO2E9bmV3IFg1MDkoKTthLnJlYWRDZXJ0UEVNKGMpO2Y9YS5nZXRQdWJsaWNLZXlIZXgoKTtiLmtleWhleD1nKGYsMCxbMV0sXCIwM1wiKS5zdWJzdHIoMik7Yi5hbGdvaWQ9ZyhmLDAsWzAsMF0sXCIwNlwiKTtpZihiLmFsZ29pZD09PVwiMmE4NjQ4Y2UzZDAyMDFcIil7Yi5hbGdwYXJhbT1nKGYsMCxbMCwxXSxcIjA2XCIpfXJldHVybiBifTtYNTA5LktFWVVTQUdFX05BTUU9W1wiZGlnaXRhbFNpZ25hdHVyZVwiLFwibm9uUmVwdWRpYXRpb25cIixcImtleUVuY2lwaGVybWVudFwiLFwiZGF0YUVuY2lwaGVybWVudFwiLFwia2V5QWdyZWVtZW50XCIsXCJrZXlDZXJ0U2lnblwiLFwiY1JMU2lnblwiLFwiZW5jaXBoZXJPbmx5XCIsXCJkZWNpcGhlck9ubHlcIl07XG5pZih0eXBlb2YgS0pVUj09XCJ1bmRlZmluZWRcInx8IUtKVVIpe0tKVVI9e319aWYodHlwZW9mIEtKVVIuandzPT1cInVuZGVmaW5lZFwifHwhS0pVUi5qd3Mpe0tKVVIuandzPXt9fUtKVVIuandzLkpXUz1mdW5jdGlvbigpe3ZhciBiPUtKVVIsYT1iLmp3cy5KV1MsYz1hLmlzU2FmZUpTT05TdHJpbmc7dGhpcy5wYXJzZUpXUz1mdW5jdGlvbihnLGope2lmKCh0aGlzLnBhcnNlZEpXUyE9PXVuZGVmaW5lZCkmJihqfHwodGhpcy5wYXJzZWRKV1Muc2lndmFsSCE9PXVuZGVmaW5lZCkpKXtyZXR1cm59dmFyIGk9Zy5tYXRjaCgvXihbXi5dKylcXC4oW14uXSspXFwuKFteLl0rKSQvKTtpZihpPT1udWxsKXt0aHJvd1wiSldTIHNpZ25hdHVyZSBpcyBub3QgYSBmb3JtIG9mICdIZWFkLlBheWxvYWQuU2lnVmFsdWUnLlwifXZhciBrPWlbMV07dmFyIGU9aVsyXTt2YXIgbD1pWzNdO3ZhciBuPWsrXCIuXCIrZTt0aGlzLnBhcnNlZEpXUz17fTt0aGlzLnBhcnNlZEpXUy5oZWFkQjY0VT1rO3RoaXMucGFyc2VkSldTLnBheWxvYWRCNjRVPWU7dGhpcy5wYXJzZWRKV1Muc2lndmFsQjY0VT1sO3RoaXMucGFyc2VkSldTLnNpPW47aWYoIWope3ZhciBoPWI2NHV0b2hleChsKTt2YXIgZj1wYXJzZUJpZ0ludChoLDE2KTt0aGlzLnBhcnNlZEpXUy5zaWd2YWxIPWg7dGhpcy5wYXJzZWRKV1Muc2lndmFsQkk9Zn12YXIgZD1iNjR1dG91dGY4KGspO3ZhciBtPWI2NHV0b3V0ZjgoZSk7dGhpcy5wYXJzZWRKV1MuaGVhZFM9ZDt0aGlzLnBhcnNlZEpXUy5wYXlsb2FkUz1tO2lmKCFjKGQsdGhpcy5wYXJzZWRKV1MsXCJoZWFkUFwiKSl7dGhyb3dcIm1hbGZvcm1lZCBKU09OIHN0cmluZyBmb3IgSldTIEhlYWQ6IFwiK2R9fX07S0pVUi5qd3MuSldTLnNpZ249ZnVuY3Rpb24oaSx2LHkseixhKXt2YXIgdz1LSlVSLG09dy5qd3MscT1tLkpXUyxnPXEucmVhZFNhZmVKU09OU3RyaW5nLHA9cS5pc1NhZmVKU09OU3RyaW5nLGQ9dy5jcnlwdG8saz1kLkVDRFNBLG89ZC5NYWMsYz1kLlNpZ25hdHVyZSx0PUpTT047dmFyIHMsaixuO2lmKHR5cGVvZiB2IT1cInN0cmluZ1wiJiZ0eXBlb2YgdiE9XCJvYmplY3RcIil7dGhyb3dcInNwSGVhZGVyIG11c3QgYmUgSlNPTiBzdHJpbmcgb3Igb2JqZWN0OiBcIit2fWlmKHR5cGVvZiB2PT1cIm9iamVjdFwiKXtqPXY7cz10LnN0cmluZ2lmeShqKX1pZih0eXBlb2Ygdj09XCJzdHJpbmdcIil7cz12O2lmKCFwKHMpKXt0aHJvd1wiSldTIEhlYWQgaXMgbm90IHNhZmUgSlNPTiBzdHJpbmc6IFwiK3N9aj1nKHMpfW49eTtpZih0eXBlb2YgeT09XCJvYmplY3RcIil7bj10LnN0cmluZ2lmeSh5KX1pZigoaT09XCJcInx8aT09bnVsbCkmJmouYWxnIT09dW5kZWZpbmVkKXtpPWouYWxnfWlmKChpIT1cIlwiJiZpIT1udWxsKSYmai5hbGc9PT11bmRlZmluZWQpe2ouYWxnPWk7cz10LnN0cmluZ2lmeShqKX1pZihpIT09ai5hbGcpe3Rocm93XCJhbGcgYW5kIHNIZWFkZXIuYWxnIGRvZXNuJ3QgbWF0Y2g6IFwiK2krXCIhPVwiK2ouYWxnfXZhciByPW51bGw7aWYocS5qd3NhbGcyc2lnYWxnW2ldPT09dW5kZWZpbmVkKXt0aHJvd1widW5zdXBwb3J0ZWQgYWxnIG5hbWU6IFwiK2l9ZWxzZXtyPXEuandzYWxnMnNpZ2FsZ1tpXX12YXIgZT11dGY4dG9iNjR1KHMpO3ZhciBsPXV0Zjh0b2I2NHUobik7dmFyIGI9ZStcIi5cIitsO3ZhciB4PVwiXCI7aWYoci5zdWJzdHIoMCw0KT09XCJIbWFjXCIpe2lmKHo9PT11bmRlZmluZWQpe3Rocm93XCJtYWMga2V5IHNoYWxsIGJlIHNwZWNpZmllZCBmb3IgSFMqIGFsZ1wifXZhciBoPW5ldyBvKHthbGc6cixwcm92OlwiY3J5cHRvanNcIixwYXNzOnp9KTtoLnVwZGF0ZVN0cmluZyhiKTt4PWguZG9GaW5hbCgpfWVsc2V7aWYoci5pbmRleE9mKFwid2l0aEVDRFNBXCIpIT0tMSl7dmFyIGY9bmV3IGMoe2FsZzpyfSk7Zi5pbml0KHosYSk7Zi51cGRhdGVTdHJpbmcoYik7aEFTTjFTaWc9Zi5zaWduKCk7eD1LSlVSLmNyeXB0by5FQ0RTQS5hc24xU2lnVG9Db25jYXRTaWcoaEFTTjFTaWcpfWVsc2V7aWYociE9XCJub25lXCIpe3ZhciBmPW5ldyBjKHthbGc6cn0pO2YuaW5pdCh6LGEpO2YudXBkYXRlU3RyaW5nKGIpO3g9Zi5zaWduKCl9fX12YXIgdT1oZXh0b2I2NHUoeCk7cmV0dXJuIGIrXCIuXCIrdX07S0pVUi5qd3MuSldTLnZlcmlmeT1mdW5jdGlvbih3LEIsbil7dmFyIHg9S0pVUixxPXguandzLHQ9cS5KV1MsaT10LnJlYWRTYWZlSlNPTlN0cmluZyxlPXguY3J5cHRvLHA9ZS5FQ0RTQSxzPWUuTWFjLGQ9ZS5TaWduYXR1cmUsbTtpZih0eXBlb2YgUlNBS2V5IT09dW5kZWZpbmVkKXttPVJTQUtleX12YXIgeT13LnNwbGl0KFwiLlwiKTtpZih5Lmxlbmd0aCE9PTMpe3JldHVybiBmYWxzZX12YXIgZj15WzBdO3ZhciByPXlbMV07dmFyIGM9ZitcIi5cIityO3ZhciBBPWI2NHV0b2hleCh5WzJdKTt2YXIgbD1pKGI2NHV0b3V0ZjgoeVswXSkpO3ZhciBrPW51bGw7dmFyIHo9bnVsbDtpZihsLmFsZz09PXVuZGVmaW5lZCl7dGhyb3dcImFsZ29yaXRobSBub3Qgc3BlY2lmaWVkIGluIGhlYWRlclwifWVsc2V7az1sLmFsZzt6PWsuc3Vic3RyKDAsMil9aWYobiE9bnVsbCYmT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG4pPT09XCJbb2JqZWN0IEFycmF5XVwiJiZuLmxlbmd0aD4wKXt2YXIgYj1cIjpcIituLmpvaW4oXCI6XCIpK1wiOlwiO2lmKGIuaW5kZXhPZihcIjpcIitrK1wiOlwiKT09LTEpe3Rocm93XCJhbGdvcml0aG0gJ1wiK2srXCInIG5vdCBhY2NlcHRlZCBpbiB0aGUgbGlzdFwifX1pZihrIT1cIm5vbmVcIiYmQj09PW51bGwpe3Rocm93XCJrZXkgc2hhbGwgYmUgc3BlY2lmaWVkIHRvIHZlcmlmeS5cIn1pZih0eXBlb2YgQj09XCJzdHJpbmdcIiYmQi5pbmRleE9mKFwiLS0tLS1CRUdJTiBcIikhPS0xKXtCPUtFWVVUSUwuZ2V0S2V5KEIpfWlmKHo9PVwiUlNcInx8ej09XCJQU1wiKXtpZighKEIgaW5zdGFuY2VvZiBtKSl7dGhyb3dcImtleSBzaGFsbCBiZSBhIFJTQUtleSBvYmogZm9yIFJTKiBhbmQgUFMqIGFsZ3NcIn19aWYoej09XCJFU1wiKXtpZighKEIgaW5zdGFuY2VvZiBwKSl7dGhyb3dcImtleSBzaGFsbCBiZSBhIEVDRFNBIG9iaiBmb3IgRVMqIGFsZ3NcIn19aWYoaz09XCJub25lXCIpe312YXIgdT1udWxsO2lmKHQuandzYWxnMnNpZ2FsZ1tsLmFsZ109PT11bmRlZmluZWQpe3Rocm93XCJ1bnN1cHBvcnRlZCBhbGcgbmFtZTogXCIra31lbHNle3U9dC5qd3NhbGcyc2lnYWxnW2tdfWlmKHU9PVwibm9uZVwiKXt0aHJvd1wibm90IHN1cHBvcnRlZFwifWVsc2V7aWYodS5zdWJzdHIoMCw0KT09XCJIbWFjXCIpe3ZhciBvPW51bGw7aWYoQj09PXVuZGVmaW5lZCl7dGhyb3dcImhleGFkZWNpbWFsIGtleSBzaGFsbCBiZSBzcGVjaWZpZWQgZm9yIEhNQUNcIn12YXIgaj1uZXcgcyh7YWxnOnUscGFzczpCfSk7ai51cGRhdGVTdHJpbmcoYyk7bz1qLmRvRmluYWwoKTtyZXR1cm4gQT09b31lbHNle2lmKHUuaW5kZXhPZihcIndpdGhFQ0RTQVwiKSE9LTEpe3ZhciBoPW51bGw7dHJ5e2g9cC5jb25jYXRTaWdUb0FTTjFTaWcoQSl9Y2F0Y2godil7cmV0dXJuIGZhbHNlfXZhciBnPW5ldyBkKHthbGc6dX0pO2cuaW5pdChCKTtnLnVwZGF0ZVN0cmluZyhjKTtyZXR1cm4gZy52ZXJpZnkoaCl9ZWxzZXt2YXIgZz1uZXcgZCh7YWxnOnV9KTtnLmluaXQoQik7Zy51cGRhdGVTdHJpbmcoYyk7cmV0dXJuIGcudmVyaWZ5KEEpfX19fTtLSlVSLmp3cy5KV1MucGFyc2U9ZnVuY3Rpb24oZyl7dmFyIGM9Zy5zcGxpdChcIi5cIik7dmFyIGI9e307dmFyIGYsZSxkO2lmKGMubGVuZ3RoIT0yJiZjLmxlbmd0aCE9Myl7dGhyb3dcIm1hbGZvcm1lZCBzSldTOiB3cm9uZyBudW1iZXIgb2YgJy4nIHNwbGl0dGVkIGVsZW1lbnRzXCJ9Zj1jWzBdO2U9Y1sxXTtpZihjLmxlbmd0aD09Myl7ZD1jWzJdfWIuaGVhZGVyT2JqPUtKVVIuandzLkpXUy5yZWFkU2FmZUpTT05TdHJpbmcoYjY0dXRvdXRmOChmKSk7Yi5wYXlsb2FkT2JqPUtKVVIuandzLkpXUy5yZWFkU2FmZUpTT05TdHJpbmcoYjY0dXRvdXRmOChlKSk7Yi5oZWFkZXJQUD1KU09OLnN0cmluZ2lmeShiLmhlYWRlck9iaixudWxsLFwiICBcIik7aWYoYi5wYXlsb2FkT2JqPT1udWxsKXtiLnBheWxvYWRQUD1iNjR1dG91dGY4KGUpfWVsc2V7Yi5wYXlsb2FkUFA9SlNPTi5zdHJpbmdpZnkoYi5wYXlsb2FkT2JqLG51bGwsXCIgIFwiKX1pZihkIT09dW5kZWZpbmVkKXtiLnNpZ0hleD1iNjR1dG9oZXgoZCl9cmV0dXJuIGJ9O0tKVVIuandzLkpXUy52ZXJpZnlKV1Q9ZnVuY3Rpb24oZSxsLHIpe3ZhciBkPUtKVVIsaj1kLmp3cyxvPWouSldTLG49by5yZWFkU2FmZUpTT05TdHJpbmcscD1vLmluQXJyYXksZj1vLmluY2x1ZGVkQXJyYXk7dmFyIGs9ZS5zcGxpdChcIi5cIik7dmFyIGM9a1swXTt2YXIgaT1rWzFdO3ZhciBxPWMrXCIuXCIraTt2YXIgbT1iNjR1dG9oZXgoa1syXSk7dmFyIGg9bihiNjR1dG91dGY4KGMpKTt2YXIgZz1uKGI2NHV0b3V0ZjgoaSkpO2lmKGguYWxnPT09dW5kZWZpbmVkKXtyZXR1cm4gZmFsc2V9aWYoci5hbGc9PT11bmRlZmluZWQpe3Rocm93XCJhY2NlcHRGaWVsZC5hbGcgc2hhbGwgYmUgc3BlY2lmaWVkXCJ9aWYoIXAoaC5hbGcsci5hbGcpKXtyZXR1cm4gZmFsc2V9aWYoZy5pc3MhPT11bmRlZmluZWQmJnR5cGVvZiByLmlzcz09PVwib2JqZWN0XCIpe2lmKCFwKGcuaXNzLHIuaXNzKSl7cmV0dXJuIGZhbHNlfX1pZihnLnN1YiE9PXVuZGVmaW5lZCYmdHlwZW9mIHIuc3ViPT09XCJvYmplY3RcIil7aWYoIXAoZy5zdWIsci5zdWIpKXtyZXR1cm4gZmFsc2V9fWlmKGcuYXVkIT09dW5kZWZpbmVkJiZ0eXBlb2Ygci5hdWQ9PT1cIm9iamVjdFwiKXtpZih0eXBlb2YgZy5hdWQ9PVwic3RyaW5nXCIpe2lmKCFwKGcuYXVkLHIuYXVkKSl7cmV0dXJuIGZhbHNlfX1lbHNle2lmKHR5cGVvZiBnLmF1ZD09XCJvYmplY3RcIil7aWYoIWYoZy5hdWQsci5hdWQpKXtyZXR1cm4gZmFsc2V9fX19dmFyIGI9ai5JbnREYXRlLmdldE5vdygpO2lmKHIudmVyaWZ5QXQhPT11bmRlZmluZWQmJnR5cGVvZiByLnZlcmlmeUF0PT09XCJudW1iZXJcIil7Yj1yLnZlcmlmeUF0fWlmKHIuZ3JhY2VQZXJpb2Q9PT11bmRlZmluZWR8fHR5cGVvZiByLmdyYWNlUGVyaW9kIT09XCJudW1iZXJcIil7ci5ncmFjZVBlcmlvZD0wfWlmKGcuZXhwIT09dW5kZWZpbmVkJiZ0eXBlb2YgZy5leHA9PVwibnVtYmVyXCIpe2lmKGcuZXhwK3IuZ3JhY2VQZXJpb2Q8Yil7cmV0dXJuIGZhbHNlfX1pZihnLm5iZiE9PXVuZGVmaW5lZCYmdHlwZW9mIGcubmJmPT1cIm51bWJlclwiKXtpZihiPGcubmJmLXIuZ3JhY2VQZXJpb2Qpe3JldHVybiBmYWxzZX19aWYoZy5pYXQhPT11bmRlZmluZWQmJnR5cGVvZiBnLmlhdD09XCJudW1iZXJcIil7aWYoYjxnLmlhdC1yLmdyYWNlUGVyaW9kKXtyZXR1cm4gZmFsc2V9fWlmKGcuanRpIT09dW5kZWZpbmVkJiZyLmp0aSE9PXVuZGVmaW5lZCl7aWYoZy5qdGkhPT1yLmp0aSl7cmV0dXJuIGZhbHNlfX1pZighby52ZXJpZnkoZSxsLHIuYWxnKSl7cmV0dXJuIGZhbHNlfXJldHVybiB0cnVlfTtLSlVSLmp3cy5KV1MuaW5jbHVkZWRBcnJheT1mdW5jdGlvbihiLGEpe3ZhciBjPUtKVVIuandzLkpXUy5pbkFycmF5O2lmKGI9PT1udWxsKXtyZXR1cm4gZmFsc2V9aWYodHlwZW9mIGIhPT1cIm9iamVjdFwiKXtyZXR1cm4gZmFsc2V9aWYodHlwZW9mIGIubGVuZ3RoIT09XCJudW1iZXJcIil7cmV0dXJuIGZhbHNlfWZvcih2YXIgZD0wO2Q8Yi5sZW5ndGg7ZCsrKXtpZighYyhiW2RdLGEpKXtyZXR1cm4gZmFsc2V9fXJldHVybiB0cnVlfTtLSlVSLmp3cy5KV1MuaW5BcnJheT1mdW5jdGlvbihkLGIpe2lmKGI9PT1udWxsKXtyZXR1cm4gZmFsc2V9aWYodHlwZW9mIGIhPT1cIm9iamVjdFwiKXtyZXR1cm4gZmFsc2V9aWYodHlwZW9mIGIubGVuZ3RoIT09XCJudW1iZXJcIil7cmV0dXJuIGZhbHNlfWZvcih2YXIgYz0wO2M8Yi5sZW5ndGg7YysrKXtpZihiW2NdPT1kKXtyZXR1cm4gdHJ1ZX19cmV0dXJuIGZhbHNlfTtLSlVSLmp3cy5KV1MuandzYWxnMnNpZ2FsZz17SFMyNTY6XCJIbWFjU0hBMjU2XCIsSFMzODQ6XCJIbWFjU0hBMzg0XCIsSFM1MTI6XCJIbWFjU0hBNTEyXCIsUlMyNTY6XCJTSEEyNTZ3aXRoUlNBXCIsUlMzODQ6XCJTSEEzODR3aXRoUlNBXCIsUlM1MTI6XCJTSEE1MTJ3aXRoUlNBXCIsRVMyNTY6XCJTSEEyNTZ3aXRoRUNEU0FcIixFUzM4NDpcIlNIQTM4NHdpdGhFQ0RTQVwiLFBTMjU2OlwiU0hBMjU2d2l0aFJTQWFuZE1HRjFcIixQUzM4NDpcIlNIQTM4NHdpdGhSU0FhbmRNR0YxXCIsUFM1MTI6XCJTSEE1MTJ3aXRoUlNBYW5kTUdGMVwiLG5vbmU6XCJub25lXCIsfTtLSlVSLmp3cy5KV1MuaXNTYWZlSlNPTlN0cmluZz1mdW5jdGlvbihjLGIsZCl7dmFyIGU9bnVsbDt0cnl7ZT1qc29uUGFyc2UoYyk7aWYodHlwZW9mIGUhPVwib2JqZWN0XCIpe3JldHVybiAwfWlmKGUuY29uc3RydWN0b3I9PT1BcnJheSl7cmV0dXJuIDB9aWYoYil7YltkXT1lfXJldHVybiAxfWNhdGNoKGEpe3JldHVybiAwfX07S0pVUi5qd3MuSldTLnJlYWRTYWZlSlNPTlN0cmluZz1mdW5jdGlvbihiKXt2YXIgYz1udWxsO3RyeXtjPWpzb25QYXJzZShiKTtpZih0eXBlb2YgYyE9XCJvYmplY3RcIil7cmV0dXJuIG51bGx9aWYoYy5jb25zdHJ1Y3Rvcj09PUFycmF5KXtyZXR1cm4gbnVsbH1yZXR1cm4gY31jYXRjaChhKXtyZXR1cm4gbnVsbH19O0tKVVIuandzLkpXUy5nZXRFbmNvZGVkU2lnbmF0dXJlVmFsdWVGcm9tSldTPWZ1bmN0aW9uKGIpe3ZhciBhPWIubWF0Y2goL15bXi5dK1xcLlteLl0rXFwuKFteLl0rKSQvKTtpZihhPT1udWxsKXt0aHJvd1wiSldTIHNpZ25hdHVyZSBpcyBub3QgYSBmb3JtIG9mICdIZWFkLlBheWxvYWQuU2lnVmFsdWUnLlwifXJldHVybiBhWzFdfTtLSlVSLmp3cy5KV1MuZ2V0SldLdGh1bWJwcmludD1mdW5jdGlvbihkKXtpZihkLmt0eSE9PVwiUlNBXCImJmQua3R5IT09XCJFQ1wiJiZkLmt0eSE9PVwib2N0XCIpe3Rocm93XCJ1bnN1cHBvcnRlZCBhbGdvcml0aG0gZm9yIEpXSyBUaHVtcHJpbnRcIn12YXIgYT1cIntcIjtpZihkLmt0eT09PVwiUlNBXCIpe2lmKHR5cGVvZiBkLm4hPVwic3RyaW5nXCJ8fHR5cGVvZiBkLmUhPVwic3RyaW5nXCIpe3Rocm93XCJ3cm9uZyBuIGFuZCBlIHZhbHVlIGZvciBSU0Ega2V5XCJ9YSs9J1wiZVwiOlwiJytkLmUrJ1wiLCc7YSs9J1wia3R5XCI6XCInK2Qua3R5KydcIiwnO2ErPSdcIm5cIjpcIicrZC5uKydcIn0nfWVsc2V7aWYoZC5rdHk9PT1cIkVDXCIpe2lmKHR5cGVvZiBkLmNydiE9XCJzdHJpbmdcInx8dHlwZW9mIGQueCE9XCJzdHJpbmdcInx8dHlwZW9mIGQueSE9XCJzdHJpbmdcIil7dGhyb3dcIndyb25nIGNydiwgeCBhbmQgeSB2YWx1ZSBmb3IgRUMga2V5XCJ9YSs9J1wiY3J2XCI6XCInK2QuY3J2KydcIiwnO2ErPSdcImt0eVwiOlwiJytkLmt0eSsnXCIsJzthKz0nXCJ4XCI6XCInK2QueCsnXCIsJzthKz0nXCJ5XCI6XCInK2QueSsnXCJ9J31lbHNle2lmKGQua3R5PT09XCJvY3RcIil7aWYodHlwZW9mIGQuayE9XCJzdHJpbmdcIil7dGhyb3dcIndyb25nIGsgdmFsdWUgZm9yIG9jdChzeW1tZXRyaWMpIGtleVwifWErPSdcImt0eVwiOlwiJytkLmt0eSsnXCIsJzthKz0nXCJrXCI6XCInK2QuaysnXCJ9J319fXZhciBiPXJzdHJ0b2hleChhKTt2YXIgYz1LSlVSLmNyeXB0by5VdGlsLmhhc2hIZXgoYixcInNoYTI1NlwiKTt2YXIgZT1oZXh0b2I2NHUoYyk7cmV0dXJuIGV9O0tKVVIuandzLkludERhdGU9e307S0pVUi5qd3MuSW50RGF0ZS5nZXQ9ZnVuY3Rpb24oYyl7dmFyIGI9S0pVUi5qd3MuSW50RGF0ZSxkPWIuZ2V0Tm93LGE9Yi5nZXRadWx1O2lmKGM9PVwibm93XCIpe3JldHVybiBkKCl9ZWxzZXtpZihjPT1cIm5vdyArIDFob3VyXCIpe3JldHVybiBkKCkrNjAqNjB9ZWxzZXtpZihjPT1cIm5vdyArIDFkYXlcIil7cmV0dXJuIGQoKSs2MCo2MCoyNH1lbHNle2lmKGM9PVwibm93ICsgMW1vbnRoXCIpe3JldHVybiBkKCkrNjAqNjAqMjQqMzB9ZWxzZXtpZihjPT1cIm5vdyArIDF5ZWFyXCIpe3JldHVybiBkKCkrNjAqNjAqMjQqMzY1fWVsc2V7aWYoYy5tYXRjaCgvWiQvKSl7cmV0dXJuIGEoYyl9ZWxzZXtpZihjLm1hdGNoKC9eWzAtOV0rJC8pKXtyZXR1cm4gcGFyc2VJbnQoYyl9fX19fX19dGhyb3dcInVuc3VwcG9ydGVkIGZvcm1hdDogXCIrY307S0pVUi5qd3MuSW50RGF0ZS5nZXRadWx1PWZ1bmN0aW9uKGEpe3JldHVybiB6dWx1dG9zZWMoYSl9O0tKVVIuandzLkludERhdGUuZ2V0Tm93PWZ1bmN0aW9uKCl7dmFyIGE9fn4obmV3IERhdGUoKS8xMDAwKTtyZXR1cm4gYX07S0pVUi5qd3MuSW50RGF0ZS5pbnREYXRlMlVUQ1N0cmluZz1mdW5jdGlvbihhKXt2YXIgYj1uZXcgRGF0ZShhKjEwMDApO3JldHVybiBiLnRvVVRDU3RyaW5nKCl9O0tKVVIuandzLkludERhdGUuaW50RGF0ZTJadWx1PWZ1bmN0aW9uKGUpe3ZhciBpPW5ldyBEYXRlKGUqMTAwMCksaD0oXCIwMDAwXCIraS5nZXRVVENGdWxsWWVhcigpKS5zbGljZSgtNCksZz0oXCIwMFwiKyhpLmdldFVUQ01vbnRoKCkrMSkpLnNsaWNlKC0yKSxiPShcIjAwXCIraS5nZXRVVENEYXRlKCkpLnNsaWNlKC0yKSxhPShcIjAwXCIraS5nZXRVVENIb3VycygpKS5zbGljZSgtMiksYz0oXCIwMFwiK2kuZ2V0VVRDTWludXRlcygpKS5zbGljZSgtMiksZj0oXCIwMFwiK2kuZ2V0VVRDU2Vjb25kcygpKS5zbGljZSgtMik7cmV0dXJuIGgrZytiK2ErYytmK1wiWlwifTtcbmV4cG9ydCB7IFNlY3VyZVJhbmRvbSB9O1xyXG5leHBvcnQgeyBybmdfc2VlZF90aW1lIH07XHJcblxyXG5leHBvcnQgeyBCaWdJbnRlZ2VyIH07XHJcbmV4cG9ydCB7IFJTQUtleSB9O1xyXG5leHBvcnQgY29uc3QgeyBFRFNBIH0gPSBLSlVSLmNyeXB0bztcclxuZXhwb3J0IGNvbnN0IHsgRFNBIH0gPSBLSlVSLmNyeXB0bztcclxuZXhwb3J0IGNvbnN0IHsgU2lnbmF0dXJlIH0gPSBLSlVSLmNyeXB0bztcclxuZXhwb3J0IGNvbnN0IHsgTWVzc2FnZURpZ2VzdCB9ID0gIEtKVVIuY3J5cHRvO1xyXG5leHBvcnQgY29uc3QgeyBNYWMgfSA9IEtKVVIuY3J5cHRvO1xyXG5leHBvcnQgY29uc3QgeyBDaXBoZXIgfSA9ICBLSlVSLmNyeXB0bztcclxuZXhwb3J0IHsgS0VZVVRJTCB9O1xyXG5leHBvcnQgeyBBU04xSEVYIH07XHJcbmV4cG9ydCB7IFg1MDkgfTtcclxuZXhwb3J0IHsgQ3J5cHRvSlMgfTtcclxuXHJcbi8vIGV4dC9iYXNlNjQuanNcclxuZXhwb3J0IHsgYjY0dG9oZXggfTtcclxuZXhwb3J0IHsgYjY0dG9CQSB9O1xyXG5cclxuLy8gYmFzZTY0eC5qc1xyXG5leHBvcnQgeyBzdG9CQSB9O1xyXG5leHBvcnQgeyBCQXRvcyB9O1xyXG5leHBvcnQgeyBCQXRvaGV4IH07XHJcbmV4cG9ydCB7IHN0b2hleCB9O1xyXG5leHBvcnQgeyBzdG9iNjQgfTtcclxuZXhwb3J0IHsgc3RvYjY0dSB9O1xyXG5leHBvcnQgeyBiNjR1dG9zIH07XHJcbmV4cG9ydCB7IGI2NHRvYjY0dSB9O1xyXG5leHBvcnQgeyBiNjR1dG9iNjQgfTtcclxuZXhwb3J0IHsgaGV4MmI2NCB9O1xyXG5leHBvcnQgeyBoZXh0b2I2NHUgfTtcclxuZXhwb3J0IHsgYjY0dXRvaGV4IH07XHJcbmV4cG9ydCB7IHV0Zjh0b2I2NHUgfTtcclxuZXhwb3J0IHsgYjY0dXRvdXRmOCB9O1xyXG5leHBvcnQgeyB1dGY4dG9iNjQgfTtcclxuZXhwb3J0IHsgYjY0dG91dGY4IH07XHJcbmV4cG9ydCB7IHV0Zjh0b2hleCB9O1xyXG5leHBvcnQgeyBoZXh0b3V0ZjggfTtcclxuZXhwb3J0IHsgaGV4dG9yc3RyIH07XHJcbmV4cG9ydCB7IHJzdHJ0b2hleCB9O1xyXG5leHBvcnQgeyBoZXh0b2I2NCB9O1xyXG5leHBvcnQgeyBoZXh0b2I2NG5sIH07XHJcbmV4cG9ydCB7IGI2NG5sdG9oZXggfTtcclxuZXhwb3J0IHsgaGV4dG9wZW0gfTtcclxuZXhwb3J0IHsgcGVtdG9oZXggfTtcclxuZXhwb3J0IHsgaGV4dG9BcnJheUJ1ZmZlciB9O1xyXG5leHBvcnQgeyBBcnJheUJ1ZmZlcnRvaGV4IH07XHJcbmV4cG9ydCB7IHp1bHV0b21zZWMgfTtcclxuZXhwb3J0IHsgenVsdXRvc2VjIH07XHJcbmV4cG9ydCB7IHp1bHV0b2RhdGUgfTtcclxuZXhwb3J0IHsgZGF0ZXRvenVsdSB9O1xyXG5leHBvcnQgeyB1cmljbXB0b2hleCB9O1xyXG5leHBvcnQgeyBoZXh0b3VyaWNtcCB9O1xyXG5leHBvcnQgeyBpcHY2dG9oZXggfTtcclxuZXhwb3J0IHsgaGV4dG9pcHY2IH07XHJcbmV4cG9ydCB7IGhleHRvaXAgfTtcclxuZXhwb3J0IHsgaXB0b2hleCB9O1xyXG5leHBvcnQgeyBlbmNvZGVVUklDb21wb25lbnRBbGwgfTtcclxuZXhwb3J0IHsgbmV3bGluZV90b1VuaXggfTtcclxuZXhwb3J0IHsgbmV3bGluZV90b0RvcyB9O1xyXG5leHBvcnQgeyBoZXh0b3Bvc2hleCB9O1xyXG5leHBvcnQgeyBpbnRhcnlzdHJ0b2hleCB9O1xyXG5leHBvcnQgeyBzdHJkaWZmaWR4IH07XHJcblxyXG4vLyBuYW1lIHNwYWNlc1xyXG5leHBvcnQgeyBLSlVSIH07XHJcbmNvbnN0IF9jcnlwdG8gPSAgS0pVUi5jcnlwdG87XHJcbmV4cG9ydCB7IF9jcnlwdG8gYXMgY3J5cHRvIH07XHJcbmV4cG9ydCBjb25zdCB7IGFzbjEgfSA9IEtKVVI7XHJcbmV4cG9ydCBjb25zdCB7IGp3cyB9ID0gS0pVUjtcclxuZXhwb3J0IGNvbnN0IHsgbGFuZyB9ID0gS0pVUjtcclxuXHJcblxyXG4iLCJcInVzZSBzdHJpY3RcIjtcblxucmVxdWlyZShcImNvcmUtanMvc2hpbVwiKTtcblxucmVxdWlyZShcInJlZ2VuZXJhdG9yLXJ1bnRpbWUvcnVudGltZVwiKTtcblxucmVxdWlyZShcImNvcmUtanMvZm4vcmVnZXhwL2VzY2FwZVwiKTtcblxuaWYgKGdsb2JhbC5fYmFiZWxQb2x5ZmlsbCkge1xuICB0aHJvdyBuZXcgRXJyb3IoXCJvbmx5IG9uZSBpbnN0YW5jZSBvZiBiYWJlbC1wb2x5ZmlsbCBpcyBhbGxvd2VkXCIpO1xufVxuZ2xvYmFsLl9iYWJlbFBvbHlmaWxsID0gdHJ1ZTtcblxudmFyIERFRklORV9QUk9QRVJUWSA9IFwiZGVmaW5lUHJvcGVydHlcIjtcbmZ1bmN0aW9uIGRlZmluZShPLCBrZXksIHZhbHVlKSB7XG4gIE9ba2V5XSB8fCBPYmplY3RbREVGSU5FX1BST1BFUlRZXShPLCBrZXksIHtcbiAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgdmFsdWU6IHZhbHVlXG4gIH0pO1xufVxuXG5kZWZpbmUoU3RyaW5nLnByb3RvdHlwZSwgXCJwYWRMZWZ0XCIsIFwiXCIucGFkU3RhcnQpO1xuZGVmaW5lKFN0cmluZy5wcm90b3R5cGUsIFwicGFkUmlnaHRcIiwgXCJcIi5wYWRFbmQpO1xuXG5cInBvcCxyZXZlcnNlLHNoaWZ0LGtleXMsdmFsdWVzLGVudHJpZXMsaW5kZXhPZixldmVyeSxzb21lLGZvckVhY2gsbWFwLGZpbHRlcixmaW5kLGZpbmRJbmRleCxpbmNsdWRlcyxqb2luLHNsaWNlLGNvbmNhdCxwdXNoLHNwbGljZSx1bnNoaWZ0LHNvcnQsbGFzdEluZGV4T2YscmVkdWNlLHJlZHVjZVJpZ2h0LGNvcHlXaXRoaW4sZmlsbFwiLnNwbGl0KFwiLFwiKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgW11ba2V5XSAmJiBkZWZpbmUoQXJyYXksIGtleSwgRnVuY3Rpb24uY2FsbC5iaW5kKFtdW2tleV0pKTtcbn0pOyIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE0LCBGYWNlYm9vaywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0Qtc3R5bGUgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIGh0dHBzOi8vcmF3LmdpdGh1Yi5jb20vZmFjZWJvb2svcmVnZW5lcmF0b3IvbWFzdGVyL0xJQ0VOU0UgZmlsZS4gQW5cbiAqIGFkZGl0aW9uYWwgZ3JhbnQgb2YgcGF0ZW50IHJpZ2h0cyBjYW4gYmUgZm91bmQgaW4gdGhlIFBBVEVOVFMgZmlsZSBpblxuICogdGhlIHNhbWUgZGlyZWN0b3J5LlxuICovXG5cbiEoZnVuY3Rpb24oZ2xvYmFsKSB7XG4gIFwidXNlIHN0cmljdFwiO1xuXG4gIHZhciBPcCA9IE9iamVjdC5wcm90b3R5cGU7XG4gIHZhciBoYXNPd24gPSBPcC5oYXNPd25Qcm9wZXJ0eTtcbiAgdmFyIHVuZGVmaW5lZDsgLy8gTW9yZSBjb21wcmVzc2libGUgdGhhbiB2b2lkIDAuXG4gIHZhciAkU3ltYm9sID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiID8gU3ltYm9sIDoge307XG4gIHZhciBpdGVyYXRvclN5bWJvbCA9ICRTeW1ib2wuaXRlcmF0b3IgfHwgXCJAQGl0ZXJhdG9yXCI7XG4gIHZhciBhc3luY0l0ZXJhdG9yU3ltYm9sID0gJFN5bWJvbC5hc3luY0l0ZXJhdG9yIHx8IFwiQEBhc3luY0l0ZXJhdG9yXCI7XG4gIHZhciB0b1N0cmluZ1RhZ1N5bWJvbCA9ICRTeW1ib2wudG9TdHJpbmdUYWcgfHwgXCJAQHRvU3RyaW5nVGFnXCI7XG5cbiAgdmFyIGluTW9kdWxlID0gdHlwZW9mIG1vZHVsZSA9PT0gXCJvYmplY3RcIjtcbiAgdmFyIHJ1bnRpbWUgPSBnbG9iYWwucmVnZW5lcmF0b3JSdW50aW1lO1xuICBpZiAocnVudGltZSkge1xuICAgIGlmIChpbk1vZHVsZSkge1xuICAgICAgLy8gSWYgcmVnZW5lcmF0b3JSdW50aW1lIGlzIGRlZmluZWQgZ2xvYmFsbHkgYW5kIHdlJ3JlIGluIGEgbW9kdWxlLFxuICAgICAgLy8gbWFrZSB0aGUgZXhwb3J0cyBvYmplY3QgaWRlbnRpY2FsIHRvIHJlZ2VuZXJhdG9yUnVudGltZS5cbiAgICAgIG1vZHVsZS5leHBvcnRzID0gcnVudGltZTtcbiAgICB9XG4gICAgLy8gRG9uJ3QgYm90aGVyIGV2YWx1YXRpbmcgdGhlIHJlc3Qgb2YgdGhpcyBmaWxlIGlmIHRoZSBydW50aW1lIHdhc1xuICAgIC8vIGFscmVhZHkgZGVmaW5lZCBnbG9iYWxseS5cbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBEZWZpbmUgdGhlIHJ1bnRpbWUgZ2xvYmFsbHkgKGFzIGV4cGVjdGVkIGJ5IGdlbmVyYXRlZCBjb2RlKSBhcyBlaXRoZXJcbiAgLy8gbW9kdWxlLmV4cG9ydHMgKGlmIHdlJ3JlIGluIGEgbW9kdWxlKSBvciBhIG5ldywgZW1wdHkgb2JqZWN0LlxuICBydW50aW1lID0gZ2xvYmFsLnJlZ2VuZXJhdG9yUnVudGltZSA9IGluTW9kdWxlID8gbW9kdWxlLmV4cG9ydHMgOiB7fTtcblxuICBmdW5jdGlvbiB3cmFwKGlubmVyRm4sIG91dGVyRm4sIHNlbGYsIHRyeUxvY3NMaXN0KSB7XG4gICAgLy8gSWYgb3V0ZXJGbiBwcm92aWRlZCBhbmQgb3V0ZXJGbi5wcm90b3R5cGUgaXMgYSBHZW5lcmF0b3IsIHRoZW4gb3V0ZXJGbi5wcm90b3R5cGUgaW5zdGFuY2VvZiBHZW5lcmF0b3IuXG4gICAgdmFyIHByb3RvR2VuZXJhdG9yID0gb3V0ZXJGbiAmJiBvdXRlckZuLnByb3RvdHlwZSBpbnN0YW5jZW9mIEdlbmVyYXRvciA/IG91dGVyRm4gOiBHZW5lcmF0b3I7XG4gICAgdmFyIGdlbmVyYXRvciA9IE9iamVjdC5jcmVhdGUocHJvdG9HZW5lcmF0b3IucHJvdG90eXBlKTtcbiAgICB2YXIgY29udGV4dCA9IG5ldyBDb250ZXh0KHRyeUxvY3NMaXN0IHx8IFtdKTtcblxuICAgIC8vIFRoZSAuX2ludm9rZSBtZXRob2QgdW5pZmllcyB0aGUgaW1wbGVtZW50YXRpb25zIG9mIHRoZSAubmV4dCxcbiAgICAvLyAudGhyb3csIGFuZCAucmV0dXJuIG1ldGhvZHMuXG4gICAgZ2VuZXJhdG9yLl9pbnZva2UgPSBtYWtlSW52b2tlTWV0aG9kKGlubmVyRm4sIHNlbGYsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGdlbmVyYXRvcjtcbiAgfVxuICBydW50aW1lLndyYXAgPSB3cmFwO1xuXG4gIC8vIFRyeS9jYXRjaCBoZWxwZXIgdG8gbWluaW1pemUgZGVvcHRpbWl6YXRpb25zLiBSZXR1cm5zIGEgY29tcGxldGlvblxuICAvLyByZWNvcmQgbGlrZSBjb250ZXh0LnRyeUVudHJpZXNbaV0uY29tcGxldGlvbi4gVGhpcyBpbnRlcmZhY2UgY291bGRcbiAgLy8gaGF2ZSBiZWVuIChhbmQgd2FzIHByZXZpb3VzbHkpIGRlc2lnbmVkIHRvIHRha2UgYSBjbG9zdXJlIHRvIGJlXG4gIC8vIGludm9rZWQgd2l0aG91dCBhcmd1bWVudHMsIGJ1dCBpbiBhbGwgdGhlIGNhc2VzIHdlIGNhcmUgYWJvdXQgd2VcbiAgLy8gYWxyZWFkeSBoYXZlIGFuIGV4aXN0aW5nIG1ldGhvZCB3ZSB3YW50IHRvIGNhbGwsIHNvIHRoZXJlJ3Mgbm8gbmVlZFxuICAvLyB0byBjcmVhdGUgYSBuZXcgZnVuY3Rpb24gb2JqZWN0LiBXZSBjYW4gZXZlbiBnZXQgYXdheSB3aXRoIGFzc3VtaW5nXG4gIC8vIHRoZSBtZXRob2QgdGFrZXMgZXhhY3RseSBvbmUgYXJndW1lbnQsIHNpbmNlIHRoYXQgaGFwcGVucyB0byBiZSB0cnVlXG4gIC8vIGluIGV2ZXJ5IGNhc2UsIHNvIHdlIGRvbid0IGhhdmUgdG8gdG91Y2ggdGhlIGFyZ3VtZW50cyBvYmplY3QuIFRoZVxuICAvLyBvbmx5IGFkZGl0aW9uYWwgYWxsb2NhdGlvbiByZXF1aXJlZCBpcyB0aGUgY29tcGxldGlvbiByZWNvcmQsIHdoaWNoXG4gIC8vIGhhcyBhIHN0YWJsZSBzaGFwZSBhbmQgc28gaG9wZWZ1bGx5IHNob3VsZCBiZSBjaGVhcCB0byBhbGxvY2F0ZS5cbiAgZnVuY3Rpb24gdHJ5Q2F0Y2goZm4sIG9iaiwgYXJnKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB7IHR5cGU6IFwibm9ybWFsXCIsIGFyZzogZm4uY2FsbChvYmosIGFyZykgfTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHJldHVybiB7IHR5cGU6IFwidGhyb3dcIiwgYXJnOiBlcnIgfTtcbiAgICB9XG4gIH1cblxuICB2YXIgR2VuU3RhdGVTdXNwZW5kZWRTdGFydCA9IFwic3VzcGVuZGVkU3RhcnRcIjtcbiAgdmFyIEdlblN0YXRlU3VzcGVuZGVkWWllbGQgPSBcInN1c3BlbmRlZFlpZWxkXCI7XG4gIHZhciBHZW5TdGF0ZUV4ZWN1dGluZyA9IFwiZXhlY3V0aW5nXCI7XG4gIHZhciBHZW5TdGF0ZUNvbXBsZXRlZCA9IFwiY29tcGxldGVkXCI7XG5cbiAgLy8gUmV0dXJuaW5nIHRoaXMgb2JqZWN0IGZyb20gdGhlIGlubmVyRm4gaGFzIHRoZSBzYW1lIGVmZmVjdCBhc1xuICAvLyBicmVha2luZyBvdXQgb2YgdGhlIGRpc3BhdGNoIHN3aXRjaCBzdGF0ZW1lbnQuXG4gIHZhciBDb250aW51ZVNlbnRpbmVsID0ge307XG5cbiAgLy8gRHVtbXkgY29uc3RydWN0b3IgZnVuY3Rpb25zIHRoYXQgd2UgdXNlIGFzIHRoZSAuY29uc3RydWN0b3IgYW5kXG4gIC8vIC5jb25zdHJ1Y3Rvci5wcm90b3R5cGUgcHJvcGVydGllcyBmb3IgZnVuY3Rpb25zIHRoYXQgcmV0dXJuIEdlbmVyYXRvclxuICAvLyBvYmplY3RzLiBGb3IgZnVsbCBzcGVjIGNvbXBsaWFuY2UsIHlvdSBtYXkgd2lzaCB0byBjb25maWd1cmUgeW91clxuICAvLyBtaW5pZmllciBub3QgdG8gbWFuZ2xlIHRoZSBuYW1lcyBvZiB0aGVzZSB0d28gZnVuY3Rpb25zLlxuICBmdW5jdGlvbiBHZW5lcmF0b3IoKSB7fVxuICBmdW5jdGlvbiBHZW5lcmF0b3JGdW5jdGlvbigpIHt9XG4gIGZ1bmN0aW9uIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlKCkge31cblxuICAvLyBUaGlzIGlzIGEgcG9seWZpbGwgZm9yICVJdGVyYXRvclByb3RvdHlwZSUgZm9yIGVudmlyb25tZW50cyB0aGF0XG4gIC8vIGRvbid0IG5hdGl2ZWx5IHN1cHBvcnQgaXQuXG4gIHZhciBJdGVyYXRvclByb3RvdHlwZSA9IHt9O1xuICBJdGVyYXRvclByb3RvdHlwZVtpdGVyYXRvclN5bWJvbF0gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgdmFyIGdldFByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mO1xuICB2YXIgTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUgPSBnZXRQcm90byAmJiBnZXRQcm90byhnZXRQcm90byh2YWx1ZXMoW10pKSk7XG4gIGlmIChOYXRpdmVJdGVyYXRvclByb3RvdHlwZSAmJlxuICAgICAgTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUgIT09IE9wICYmXG4gICAgICBoYXNPd24uY2FsbChOYXRpdmVJdGVyYXRvclByb3RvdHlwZSwgaXRlcmF0b3JTeW1ib2wpKSB7XG4gICAgLy8gVGhpcyBlbnZpcm9ubWVudCBoYXMgYSBuYXRpdmUgJUl0ZXJhdG9yUHJvdG90eXBlJTsgdXNlIGl0IGluc3RlYWRcbiAgICAvLyBvZiB0aGUgcG9seWZpbGwuXG4gICAgSXRlcmF0b3JQcm90b3R5cGUgPSBOYXRpdmVJdGVyYXRvclByb3RvdHlwZTtcbiAgfVxuXG4gIHZhciBHcCA9IEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLnByb3RvdHlwZSA9XG4gICAgR2VuZXJhdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoSXRlcmF0b3JQcm90b3R5cGUpO1xuICBHZW5lcmF0b3JGdW5jdGlvbi5wcm90b3R5cGUgPSBHcC5jb25zdHJ1Y3RvciA9IEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlO1xuICBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEdlbmVyYXRvckZ1bmN0aW9uO1xuICBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZVt0b1N0cmluZ1RhZ1N5bWJvbF0gPVxuICAgIEdlbmVyYXRvckZ1bmN0aW9uLmRpc3BsYXlOYW1lID0gXCJHZW5lcmF0b3JGdW5jdGlvblwiO1xuXG4gIC8vIEhlbHBlciBmb3IgZGVmaW5pbmcgdGhlIC5uZXh0LCAudGhyb3csIGFuZCAucmV0dXJuIG1ldGhvZHMgb2YgdGhlXG4gIC8vIEl0ZXJhdG9yIGludGVyZmFjZSBpbiB0ZXJtcyBvZiBhIHNpbmdsZSAuX2ludm9rZSBtZXRob2QuXG4gIGZ1bmN0aW9uIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhwcm90b3R5cGUpIHtcbiAgICBbXCJuZXh0XCIsIFwidGhyb3dcIiwgXCJyZXR1cm5cIl0uZm9yRWFjaChmdW5jdGlvbihtZXRob2QpIHtcbiAgICAgIHByb3RvdHlwZVttZXRob2RdID0gZnVuY3Rpb24oYXJnKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbnZva2UobWV0aG9kLCBhcmcpO1xuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIHJ1bnRpbWUuaXNHZW5lcmF0b3JGdW5jdGlvbiA9IGZ1bmN0aW9uKGdlbkZ1bikge1xuICAgIHZhciBjdG9yID0gdHlwZW9mIGdlbkZ1biA9PT0gXCJmdW5jdGlvblwiICYmIGdlbkZ1bi5jb25zdHJ1Y3RvcjtcbiAgICByZXR1cm4gY3RvclxuICAgICAgPyBjdG9yID09PSBHZW5lcmF0b3JGdW5jdGlvbiB8fFxuICAgICAgICAvLyBGb3IgdGhlIG5hdGl2ZSBHZW5lcmF0b3JGdW5jdGlvbiBjb25zdHJ1Y3RvciwgdGhlIGJlc3Qgd2UgY2FuXG4gICAgICAgIC8vIGRvIGlzIHRvIGNoZWNrIGl0cyAubmFtZSBwcm9wZXJ0eS5cbiAgICAgICAgKGN0b3IuZGlzcGxheU5hbWUgfHwgY3Rvci5uYW1lKSA9PT0gXCJHZW5lcmF0b3JGdW5jdGlvblwiXG4gICAgICA6IGZhbHNlO1xuICB9O1xuXG4gIHJ1bnRpbWUubWFyayA9IGZ1bmN0aW9uKGdlbkZ1bikge1xuICAgIGlmIChPYmplY3Quc2V0UHJvdG90eXBlT2YpIHtcbiAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihnZW5GdW4sIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZ2VuRnVuLl9fcHJvdG9fXyA9IEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlO1xuICAgICAgaWYgKCEodG9TdHJpbmdUYWdTeW1ib2wgaW4gZ2VuRnVuKSkge1xuICAgICAgICBnZW5GdW5bdG9TdHJpbmdUYWdTeW1ib2xdID0gXCJHZW5lcmF0b3JGdW5jdGlvblwiO1xuICAgICAgfVxuICAgIH1cbiAgICBnZW5GdW4ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShHcCk7XG4gICAgcmV0dXJuIGdlbkZ1bjtcbiAgfTtcblxuICAvLyBXaXRoaW4gdGhlIGJvZHkgb2YgYW55IGFzeW5jIGZ1bmN0aW9uLCBgYXdhaXQgeGAgaXMgdHJhbnNmb3JtZWQgdG9cbiAgLy8gYHlpZWxkIHJlZ2VuZXJhdG9yUnVudGltZS5hd3JhcCh4KWAsIHNvIHRoYXQgdGhlIHJ1bnRpbWUgY2FuIHRlc3RcbiAgLy8gYGhhc093bi5jYWxsKHZhbHVlLCBcIl9fYXdhaXRcIilgIHRvIGRldGVybWluZSBpZiB0aGUgeWllbGRlZCB2YWx1ZSBpc1xuICAvLyBtZWFudCB0byBiZSBhd2FpdGVkLlxuICBydW50aW1lLmF3cmFwID0gZnVuY3Rpb24oYXJnKSB7XG4gICAgcmV0dXJuIHsgX19hd2FpdDogYXJnIH07XG4gIH07XG5cbiAgZnVuY3Rpb24gQXN5bmNJdGVyYXRvcihnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBpbnZva2UobWV0aG9kLCBhcmcsIHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgdmFyIHJlY29yZCA9IHRyeUNhdGNoKGdlbmVyYXRvclttZXRob2RdLCBnZW5lcmF0b3IsIGFyZyk7XG4gICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICByZWplY3QocmVjb3JkLmFyZyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgcmVzdWx0ID0gcmVjb3JkLmFyZztcbiAgICAgICAgdmFyIHZhbHVlID0gcmVzdWx0LnZhbHVlO1xuICAgICAgICBpZiAodmFsdWUgJiZcbiAgICAgICAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICAgICAgaGFzT3duLmNhbGwodmFsdWUsIFwiX19hd2FpdFwiKSkge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodmFsdWUuX19hd2FpdCkudGhlbihmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICAgICAgaW52b2tlKFwibmV4dFwiLCB2YWx1ZSwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICB9LCBmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgICAgIGludm9rZShcInRocm93XCIsIGVyciwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodmFsdWUpLnRoZW4oZnVuY3Rpb24odW53cmFwcGVkKSB7XG4gICAgICAgICAgLy8gV2hlbiBhIHlpZWxkZWQgUHJvbWlzZSBpcyByZXNvbHZlZCwgaXRzIGZpbmFsIHZhbHVlIGJlY29tZXNcbiAgICAgICAgICAvLyB0aGUgLnZhbHVlIG9mIHRoZSBQcm9taXNlPHt2YWx1ZSxkb25lfT4gcmVzdWx0IGZvciB0aGVcbiAgICAgICAgICAvLyBjdXJyZW50IGl0ZXJhdGlvbi4gSWYgdGhlIFByb21pc2UgaXMgcmVqZWN0ZWQsIGhvd2V2ZXIsIHRoZVxuICAgICAgICAgIC8vIHJlc3VsdCBmb3IgdGhpcyBpdGVyYXRpb24gd2lsbCBiZSByZWplY3RlZCB3aXRoIHRoZSBzYW1lXG4gICAgICAgICAgLy8gcmVhc29uLiBOb3RlIHRoYXQgcmVqZWN0aW9ucyBvZiB5aWVsZGVkIFByb21pc2VzIGFyZSBub3RcbiAgICAgICAgICAvLyB0aHJvd24gYmFjayBpbnRvIHRoZSBnZW5lcmF0b3IgZnVuY3Rpb24sIGFzIGlzIHRoZSBjYXNlXG4gICAgICAgICAgLy8gd2hlbiBhbiBhd2FpdGVkIFByb21pc2UgaXMgcmVqZWN0ZWQuIFRoaXMgZGlmZmVyZW5jZSBpblxuICAgICAgICAgIC8vIGJlaGF2aW9yIGJldHdlZW4geWllbGQgYW5kIGF3YWl0IGlzIGltcG9ydGFudCwgYmVjYXVzZSBpdFxuICAgICAgICAgIC8vIGFsbG93cyB0aGUgY29uc3VtZXIgdG8gZGVjaWRlIHdoYXQgdG8gZG8gd2l0aCB0aGUgeWllbGRlZFxuICAgICAgICAgIC8vIHJlamVjdGlvbiAoc3dhbGxvdyBpdCBhbmQgY29udGludWUsIG1hbnVhbGx5IC50aHJvdyBpdCBiYWNrXG4gICAgICAgICAgLy8gaW50byB0aGUgZ2VuZXJhdG9yLCBhYmFuZG9uIGl0ZXJhdGlvbiwgd2hhdGV2ZXIpLiBXaXRoXG4gICAgICAgICAgLy8gYXdhaXQsIGJ5IGNvbnRyYXN0LCB0aGVyZSBpcyBubyBvcHBvcnR1bml0eSB0byBleGFtaW5lIHRoZVxuICAgICAgICAgIC8vIHJlamVjdGlvbiByZWFzb24gb3V0c2lkZSB0aGUgZ2VuZXJhdG9yIGZ1bmN0aW9uLCBzbyB0aGVcbiAgICAgICAgICAvLyBvbmx5IG9wdGlvbiBpcyB0byB0aHJvdyBpdCBmcm9tIHRoZSBhd2FpdCBleHByZXNzaW9uLCBhbmRcbiAgICAgICAgICAvLyBsZXQgdGhlIGdlbmVyYXRvciBmdW5jdGlvbiBoYW5kbGUgdGhlIGV4Y2VwdGlvbi5cbiAgICAgICAgICByZXN1bHQudmFsdWUgPSB1bndyYXBwZWQ7XG4gICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICB9LCByZWplY3QpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZ2xvYmFsLnByb2Nlc3MgPT09IFwib2JqZWN0XCIgJiYgZ2xvYmFsLnByb2Nlc3MuZG9tYWluKSB7XG4gICAgICBpbnZva2UgPSBnbG9iYWwucHJvY2Vzcy5kb21haW4uYmluZChpbnZva2UpO1xuICAgIH1cblxuICAgIHZhciBwcmV2aW91c1Byb21pc2U7XG5cbiAgICBmdW5jdGlvbiBlbnF1ZXVlKG1ldGhvZCwgYXJnKSB7XG4gICAgICBmdW5jdGlvbiBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZygpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgIGludm9rZShtZXRob2QsIGFyZywgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwcmV2aW91c1Byb21pc2UgPVxuICAgICAgICAvLyBJZiBlbnF1ZXVlIGhhcyBiZWVuIGNhbGxlZCBiZWZvcmUsIHRoZW4gd2Ugd2FudCB0byB3YWl0IHVudGlsXG4gICAgICAgIC8vIGFsbCBwcmV2aW91cyBQcm9taXNlcyBoYXZlIGJlZW4gcmVzb2x2ZWQgYmVmb3JlIGNhbGxpbmcgaW52b2tlLFxuICAgICAgICAvLyBzbyB0aGF0IHJlc3VsdHMgYXJlIGFsd2F5cyBkZWxpdmVyZWQgaW4gdGhlIGNvcnJlY3Qgb3JkZXIuIElmXG4gICAgICAgIC8vIGVucXVldWUgaGFzIG5vdCBiZWVuIGNhbGxlZCBiZWZvcmUsIHRoZW4gaXQgaXMgaW1wb3J0YW50IHRvXG4gICAgICAgIC8vIGNhbGwgaW52b2tlIGltbWVkaWF0ZWx5LCB3aXRob3V0IHdhaXRpbmcgb24gYSBjYWxsYmFjayB0byBmaXJlLFxuICAgICAgICAvLyBzbyB0aGF0IHRoZSBhc3luYyBnZW5lcmF0b3IgZnVuY3Rpb24gaGFzIHRoZSBvcHBvcnR1bml0eSB0byBkb1xuICAgICAgICAvLyBhbnkgbmVjZXNzYXJ5IHNldHVwIGluIGEgcHJlZGljdGFibGUgd2F5LiBUaGlzIHByZWRpY3RhYmlsaXR5XG4gICAgICAgIC8vIGlzIHdoeSB0aGUgUHJvbWlzZSBjb25zdHJ1Y3RvciBzeW5jaHJvbm91c2x5IGludm9rZXMgaXRzXG4gICAgICAgIC8vIGV4ZWN1dG9yIGNhbGxiYWNrLCBhbmQgd2h5IGFzeW5jIGZ1bmN0aW9ucyBzeW5jaHJvbm91c2x5XG4gICAgICAgIC8vIGV4ZWN1dGUgY29kZSBiZWZvcmUgdGhlIGZpcnN0IGF3YWl0LiBTaW5jZSB3ZSBpbXBsZW1lbnQgc2ltcGxlXG4gICAgICAgIC8vIGFzeW5jIGZ1bmN0aW9ucyBpbiB0ZXJtcyBvZiBhc3luYyBnZW5lcmF0b3JzLCBpdCBpcyBlc3BlY2lhbGx5XG4gICAgICAgIC8vIGltcG9ydGFudCB0byBnZXQgdGhpcyByaWdodCwgZXZlbiB0aG91Z2ggaXQgcmVxdWlyZXMgY2FyZS5cbiAgICAgICAgcHJldmlvdXNQcm9taXNlID8gcHJldmlvdXNQcm9taXNlLnRoZW4oXG4gICAgICAgICAgY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcsXG4gICAgICAgICAgLy8gQXZvaWQgcHJvcGFnYXRpbmcgZmFpbHVyZXMgdG8gUHJvbWlzZXMgcmV0dXJuZWQgYnkgbGF0ZXJcbiAgICAgICAgICAvLyBpbnZvY2F0aW9ucyBvZiB0aGUgaXRlcmF0b3IuXG4gICAgICAgICAgY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmdcbiAgICAgICAgKSA6IGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnKCk7XG4gICAgfVxuXG4gICAgLy8gRGVmaW5lIHRoZSB1bmlmaWVkIGhlbHBlciBtZXRob2QgdGhhdCBpcyB1c2VkIHRvIGltcGxlbWVudCAubmV4dCxcbiAgICAvLyAudGhyb3csIGFuZCAucmV0dXJuIChzZWUgZGVmaW5lSXRlcmF0b3JNZXRob2RzKS5cbiAgICB0aGlzLl9pbnZva2UgPSBlbnF1ZXVlO1xuICB9XG5cbiAgZGVmaW5lSXRlcmF0b3JNZXRob2RzKEFzeW5jSXRlcmF0b3IucHJvdG90eXBlKTtcbiAgQXN5bmNJdGVyYXRvci5wcm90b3R5cGVbYXN5bmNJdGVyYXRvclN5bWJvbF0gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG4gIHJ1bnRpbWUuQXN5bmNJdGVyYXRvciA9IEFzeW5jSXRlcmF0b3I7XG5cbiAgLy8gTm90ZSB0aGF0IHNpbXBsZSBhc3luYyBmdW5jdGlvbnMgYXJlIGltcGxlbWVudGVkIG9uIHRvcCBvZlxuICAvLyBBc3luY0l0ZXJhdG9yIG9iamVjdHM7IHRoZXkganVzdCByZXR1cm4gYSBQcm9taXNlIGZvciB0aGUgdmFsdWUgb2ZcbiAgLy8gdGhlIGZpbmFsIHJlc3VsdCBwcm9kdWNlZCBieSB0aGUgaXRlcmF0b3IuXG4gIHJ1bnRpbWUuYXN5bmMgPSBmdW5jdGlvbihpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdCkge1xuICAgIHZhciBpdGVyID0gbmV3IEFzeW5jSXRlcmF0b3IoXG4gICAgICB3cmFwKGlubmVyRm4sIG91dGVyRm4sIHNlbGYsIHRyeUxvY3NMaXN0KVxuICAgICk7XG5cbiAgICByZXR1cm4gcnVudGltZS5pc0dlbmVyYXRvckZ1bmN0aW9uKG91dGVyRm4pXG4gICAgICA/IGl0ZXIgLy8gSWYgb3V0ZXJGbiBpcyBhIGdlbmVyYXRvciwgcmV0dXJuIHRoZSBmdWxsIGl0ZXJhdG9yLlxuICAgICAgOiBpdGVyLm5leHQoKS50aGVuKGZ1bmN0aW9uKHJlc3VsdCkge1xuICAgICAgICAgIHJldHVybiByZXN1bHQuZG9uZSA/IHJlc3VsdC52YWx1ZSA6IGl0ZXIubmV4dCgpO1xuICAgICAgICB9KTtcbiAgfTtcblxuICBmdW5jdGlvbiBtYWtlSW52b2tlTWV0aG9kKGlubmVyRm4sIHNlbGYsIGNvbnRleHQpIHtcbiAgICB2YXIgc3RhdGUgPSBHZW5TdGF0ZVN1c3BlbmRlZFN0YXJ0O1xuXG4gICAgcmV0dXJuIGZ1bmN0aW9uIGludm9rZShtZXRob2QsIGFyZykge1xuICAgICAgaWYgKHN0YXRlID09PSBHZW5TdGF0ZUV4ZWN1dGluZykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nXCIpO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3RhdGUgPT09IEdlblN0YXRlQ29tcGxldGVkKSB7XG4gICAgICAgIGlmIChtZXRob2QgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgIHRocm93IGFyZztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEJlIGZvcmdpdmluZywgcGVyIDI1LjMuMy4zLjMgb2YgdGhlIHNwZWM6XG4gICAgICAgIC8vIGh0dHBzOi8vcGVvcGxlLm1vemlsbGEub3JnL35qb3JlbmRvcmZmL2VzNi1kcmFmdC5odG1sI3NlYy1nZW5lcmF0b3JyZXN1bWVcbiAgICAgICAgcmV0dXJuIGRvbmVSZXN1bHQoKTtcbiAgICAgIH1cblxuICAgICAgY29udGV4dC5tZXRob2QgPSBtZXRob2Q7XG4gICAgICBjb250ZXh0LmFyZyA9IGFyZztcblxuICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgdmFyIGRlbGVnYXRlID0gY29udGV4dC5kZWxlZ2F0ZTtcbiAgICAgICAgaWYgKGRlbGVnYXRlKSB7XG4gICAgICAgICAgdmFyIGRlbGVnYXRlUmVzdWx0ID0gbWF5YmVJbnZva2VEZWxlZ2F0ZShkZWxlZ2F0ZSwgY29udGV4dCk7XG4gICAgICAgICAgaWYgKGRlbGVnYXRlUmVzdWx0KSB7XG4gICAgICAgICAgICBpZiAoZGVsZWdhdGVSZXN1bHQgPT09IENvbnRpbnVlU2VudGluZWwpIGNvbnRpbnVlO1xuICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRlUmVzdWx0O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJuZXh0XCIpIHtcbiAgICAgICAgICAvLyBTZXR0aW5nIGNvbnRleHQuX3NlbnQgZm9yIGxlZ2FjeSBzdXBwb3J0IG9mIEJhYmVsJ3NcbiAgICAgICAgICAvLyBmdW5jdGlvbi5zZW50IGltcGxlbWVudGF0aW9uLlxuICAgICAgICAgIGNvbnRleHQuc2VudCA9IGNvbnRleHQuX3NlbnQgPSBjb250ZXh0LmFyZztcblxuICAgICAgICB9IGVsc2UgaWYgKGNvbnRleHQubWV0aG9kID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICBpZiAoc3RhdGUgPT09IEdlblN0YXRlU3VzcGVuZGVkU3RhcnQpIHtcbiAgICAgICAgICAgIHN0YXRlID0gR2VuU3RhdGVDb21wbGV0ZWQ7XG4gICAgICAgICAgICB0aHJvdyBjb250ZXh0LmFyZztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb250ZXh0LmRpc3BhdGNoRXhjZXB0aW9uKGNvbnRleHQuYXJnKTtcblxuICAgICAgICB9IGVsc2UgaWYgKGNvbnRleHQubWV0aG9kID09PSBcInJldHVyblwiKSB7XG4gICAgICAgICAgY29udGV4dC5hYnJ1cHQoXCJyZXR1cm5cIiwgY29udGV4dC5hcmcpO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RhdGUgPSBHZW5TdGF0ZUV4ZWN1dGluZztcblxuICAgICAgICB2YXIgcmVjb3JkID0gdHJ5Q2F0Y2goaW5uZXJGbiwgc2VsZiwgY29udGV4dCk7XG4gICAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJub3JtYWxcIikge1xuICAgICAgICAgIC8vIElmIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24gZnJvbSBpbm5lckZuLCB3ZSBsZWF2ZSBzdGF0ZSA9PT1cbiAgICAgICAgICAvLyBHZW5TdGF0ZUV4ZWN1dGluZyBhbmQgbG9vcCBiYWNrIGZvciBhbm90aGVyIGludm9jYXRpb24uXG4gICAgICAgICAgc3RhdGUgPSBjb250ZXh0LmRvbmVcbiAgICAgICAgICAgID8gR2VuU3RhdGVDb21wbGV0ZWRcbiAgICAgICAgICAgIDogR2VuU3RhdGVTdXNwZW5kZWRZaWVsZDtcblxuICAgICAgICAgIGlmIChyZWNvcmQuYXJnID09PSBDb250aW51ZVNlbnRpbmVsKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdmFsdWU6IHJlY29yZC5hcmcsXG4gICAgICAgICAgICBkb25lOiBjb250ZXh0LmRvbmVcbiAgICAgICAgICB9O1xuXG4gICAgICAgIH0gZWxzZSBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgIHN0YXRlID0gR2VuU3RhdGVDb21wbGV0ZWQ7XG4gICAgICAgICAgLy8gRGlzcGF0Y2ggdGhlIGV4Y2VwdGlvbiBieSBsb29waW5nIGJhY2sgYXJvdW5kIHRvIHRoZVxuICAgICAgICAgIC8vIGNvbnRleHQuZGlzcGF0Y2hFeGNlcHRpb24oY29udGV4dC5hcmcpIGNhbGwgYWJvdmUuXG4gICAgICAgICAgY29udGV4dC5tZXRob2QgPSBcInRocm93XCI7XG4gICAgICAgICAgY29udGV4dC5hcmcgPSByZWNvcmQuYXJnO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIC8vIENhbGwgZGVsZWdhdGUuaXRlcmF0b3JbY29udGV4dC5tZXRob2RdKGNvbnRleHQuYXJnKSBhbmQgaGFuZGxlIHRoZVxuICAvLyByZXN1bHQsIGVpdGhlciBieSByZXR1cm5pbmcgYSB7IHZhbHVlLCBkb25lIH0gcmVzdWx0IGZyb20gdGhlXG4gIC8vIGRlbGVnYXRlIGl0ZXJhdG9yLCBvciBieSBtb2RpZnlpbmcgY29udGV4dC5tZXRob2QgYW5kIGNvbnRleHQuYXJnLFxuICAvLyBzZXR0aW5nIGNvbnRleHQuZGVsZWdhdGUgdG8gbnVsbCwgYW5kIHJldHVybmluZyB0aGUgQ29udGludWVTZW50aW5lbC5cbiAgZnVuY3Rpb24gbWF5YmVJbnZva2VEZWxlZ2F0ZShkZWxlZ2F0ZSwgY29udGV4dCkge1xuICAgIHZhciBtZXRob2QgPSBkZWxlZ2F0ZS5pdGVyYXRvcltjb250ZXh0Lm1ldGhvZF07XG4gICAgaWYgKG1ldGhvZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBBIC50aHJvdyBvciAucmV0dXJuIHdoZW4gdGhlIGRlbGVnYXRlIGl0ZXJhdG9yIGhhcyBubyAudGhyb3dcbiAgICAgIC8vIG1ldGhvZCBhbHdheXMgdGVybWluYXRlcyB0aGUgeWllbGQqIGxvb3AuXG4gICAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDtcblxuICAgICAgaWYgKGNvbnRleHQubWV0aG9kID09PSBcInRocm93XCIpIHtcbiAgICAgICAgaWYgKGRlbGVnYXRlLml0ZXJhdG9yLnJldHVybikge1xuICAgICAgICAgIC8vIElmIHRoZSBkZWxlZ2F0ZSBpdGVyYXRvciBoYXMgYSByZXR1cm4gbWV0aG9kLCBnaXZlIGl0IGFcbiAgICAgICAgICAvLyBjaGFuY2UgdG8gY2xlYW4gdXAuXG4gICAgICAgICAgY29udGV4dC5tZXRob2QgPSBcInJldHVyblwiO1xuICAgICAgICAgIGNvbnRleHQuYXJnID0gdW5kZWZpbmVkO1xuICAgICAgICAgIG1heWJlSW52b2tlRGVsZWdhdGUoZGVsZWdhdGUsIGNvbnRleHQpO1xuXG4gICAgICAgICAgaWYgKGNvbnRleHQubWV0aG9kID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICAgIC8vIElmIG1heWJlSW52b2tlRGVsZWdhdGUoY29udGV4dCkgY2hhbmdlZCBjb250ZXh0Lm1ldGhvZCBmcm9tXG4gICAgICAgICAgICAvLyBcInJldHVyblwiIHRvIFwidGhyb3dcIiwgbGV0IHRoYXQgb3ZlcnJpZGUgdGhlIFR5cGVFcnJvciBiZWxvdy5cbiAgICAgICAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiO1xuICAgICAgICBjb250ZXh0LmFyZyA9IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgXCJUaGUgaXRlcmF0b3IgZG9lcyBub3QgcHJvdmlkZSBhICd0aHJvdycgbWV0aG9kXCIpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICB9XG5cbiAgICB2YXIgcmVjb3JkID0gdHJ5Q2F0Y2gobWV0aG9kLCBkZWxlZ2F0ZS5pdGVyYXRvciwgY29udGV4dC5hcmcpO1xuXG4gICAgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgIGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiO1xuICAgICAgY29udGV4dC5hcmcgPSByZWNvcmQuYXJnO1xuICAgICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7XG4gICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICB9XG5cbiAgICB2YXIgaW5mbyA9IHJlY29yZC5hcmc7XG5cbiAgICBpZiAoISBpbmZvKSB7XG4gICAgICBjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIjtcbiAgICAgIGNvbnRleHQuYXJnID0gbmV3IFR5cGVFcnJvcihcIml0ZXJhdG9yIHJlc3VsdCBpcyBub3QgYW4gb2JqZWN0XCIpO1xuICAgICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7XG4gICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICB9XG5cbiAgICBpZiAoaW5mby5kb25lKSB7XG4gICAgICAvLyBBc3NpZ24gdGhlIHJlc3VsdCBvZiB0aGUgZmluaXNoZWQgZGVsZWdhdGUgdG8gdGhlIHRlbXBvcmFyeVxuICAgICAgLy8gdmFyaWFibGUgc3BlY2lmaWVkIGJ5IGRlbGVnYXRlLnJlc3VsdE5hbWUgKHNlZSBkZWxlZ2F0ZVlpZWxkKS5cbiAgICAgIGNvbnRleHRbZGVsZWdhdGUucmVzdWx0TmFtZV0gPSBpbmZvLnZhbHVlO1xuXG4gICAgICAvLyBSZXN1bWUgZXhlY3V0aW9uIGF0IHRoZSBkZXNpcmVkIGxvY2F0aW9uIChzZWUgZGVsZWdhdGVZaWVsZCkuXG4gICAgICBjb250ZXh0Lm5leHQgPSBkZWxlZ2F0ZS5uZXh0TG9jO1xuXG4gICAgICAvLyBJZiBjb250ZXh0Lm1ldGhvZCB3YXMgXCJ0aHJvd1wiIGJ1dCB0aGUgZGVsZWdhdGUgaGFuZGxlZCB0aGVcbiAgICAgIC8vIGV4Y2VwdGlvbiwgbGV0IHRoZSBvdXRlciBnZW5lcmF0b3IgcHJvY2VlZCBub3JtYWxseS4gSWZcbiAgICAgIC8vIGNvbnRleHQubWV0aG9kIHdhcyBcIm5leHRcIiwgZm9yZ2V0IGNvbnRleHQuYXJnIHNpbmNlIGl0IGhhcyBiZWVuXG4gICAgICAvLyBcImNvbnN1bWVkXCIgYnkgdGhlIGRlbGVnYXRlIGl0ZXJhdG9yLiBJZiBjb250ZXh0Lm1ldGhvZCB3YXNcbiAgICAgIC8vIFwicmV0dXJuXCIsIGFsbG93IHRoZSBvcmlnaW5hbCAucmV0dXJuIGNhbGwgdG8gY29udGludWUgaW4gdGhlXG4gICAgICAvLyBvdXRlciBnZW5lcmF0b3IuXG4gICAgICBpZiAoY29udGV4dC5tZXRob2QgIT09IFwicmV0dXJuXCIpIHtcbiAgICAgICAgY29udGV4dC5tZXRob2QgPSBcIm5leHRcIjtcbiAgICAgICAgY29udGV4dC5hcmcgPSB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gUmUteWllbGQgdGhlIHJlc3VsdCByZXR1cm5lZCBieSB0aGUgZGVsZWdhdGUgbWV0aG9kLlxuICAgICAgcmV0dXJuIGluZm87XG4gICAgfVxuXG4gICAgLy8gVGhlIGRlbGVnYXRlIGl0ZXJhdG9yIGlzIGZpbmlzaGVkLCBzbyBmb3JnZXQgaXQgYW5kIGNvbnRpbnVlIHdpdGhcbiAgICAvLyB0aGUgb3V0ZXIgZ2VuZXJhdG9yLlxuICAgIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsO1xuICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICB9XG5cbiAgLy8gRGVmaW5lIEdlbmVyYXRvci5wcm90b3R5cGUue25leHQsdGhyb3cscmV0dXJufSBpbiB0ZXJtcyBvZiB0aGVcbiAgLy8gdW5pZmllZCAuX2ludm9rZSBoZWxwZXIgbWV0aG9kLlxuICBkZWZpbmVJdGVyYXRvck1ldGhvZHMoR3ApO1xuXG4gIEdwW3RvU3RyaW5nVGFnU3ltYm9sXSA9IFwiR2VuZXJhdG9yXCI7XG5cbiAgLy8gQSBHZW5lcmF0b3Igc2hvdWxkIGFsd2F5cyByZXR1cm4gaXRzZWxmIGFzIHRoZSBpdGVyYXRvciBvYmplY3Qgd2hlbiB0aGVcbiAgLy8gQEBpdGVyYXRvciBmdW5jdGlvbiBpcyBjYWxsZWQgb24gaXQuIFNvbWUgYnJvd3NlcnMnIGltcGxlbWVudGF0aW9ucyBvZiB0aGVcbiAgLy8gaXRlcmF0b3IgcHJvdG90eXBlIGNoYWluIGluY29ycmVjdGx5IGltcGxlbWVudCB0aGlzLCBjYXVzaW5nIHRoZSBHZW5lcmF0b3JcbiAgLy8gb2JqZWN0IHRvIG5vdCBiZSByZXR1cm5lZCBmcm9tIHRoaXMgY2FsbC4gVGhpcyBlbnN1cmVzIHRoYXQgZG9lc24ndCBoYXBwZW4uXG4gIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVnZW5lcmF0b3IvaXNzdWVzLzI3NCBmb3IgbW9yZSBkZXRhaWxzLlxuICBHcFtpdGVyYXRvclN5bWJvbF0gPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBHcC50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBcIltvYmplY3QgR2VuZXJhdG9yXVwiO1xuICB9O1xuXG4gIGZ1bmN0aW9uIHB1c2hUcnlFbnRyeShsb2NzKSB7XG4gICAgdmFyIGVudHJ5ID0geyB0cnlMb2M6IGxvY3NbMF0gfTtcblxuICAgIGlmICgxIGluIGxvY3MpIHtcbiAgICAgIGVudHJ5LmNhdGNoTG9jID0gbG9jc1sxXTtcbiAgICB9XG5cbiAgICBpZiAoMiBpbiBsb2NzKSB7XG4gICAgICBlbnRyeS5maW5hbGx5TG9jID0gbG9jc1syXTtcbiAgICAgIGVudHJ5LmFmdGVyTG9jID0gbG9jc1szXTtcbiAgICB9XG5cbiAgICB0aGlzLnRyeUVudHJpZXMucHVzaChlbnRyeSk7XG4gIH1cblxuICBmdW5jdGlvbiByZXNldFRyeUVudHJ5KGVudHJ5KSB7XG4gICAgdmFyIHJlY29yZCA9IGVudHJ5LmNvbXBsZXRpb24gfHwge307XG4gICAgcmVjb3JkLnR5cGUgPSBcIm5vcm1hbFwiO1xuICAgIGRlbGV0ZSByZWNvcmQuYXJnO1xuICAgIGVudHJ5LmNvbXBsZXRpb24gPSByZWNvcmQ7XG4gIH1cblxuICBmdW5jdGlvbiBDb250ZXh0KHRyeUxvY3NMaXN0KSB7XG4gICAgLy8gVGhlIHJvb3QgZW50cnkgb2JqZWN0IChlZmZlY3RpdmVseSBhIHRyeSBzdGF0ZW1lbnQgd2l0aG91dCBhIGNhdGNoXG4gICAgLy8gb3IgYSBmaW5hbGx5IGJsb2NrKSBnaXZlcyB1cyBhIHBsYWNlIHRvIHN0b3JlIHZhbHVlcyB0aHJvd24gZnJvbVxuICAgIC8vIGxvY2F0aW9ucyB3aGVyZSB0aGVyZSBpcyBubyBlbmNsb3NpbmcgdHJ5IHN0YXRlbWVudC5cbiAgICB0aGlzLnRyeUVudHJpZXMgPSBbeyB0cnlMb2M6IFwicm9vdFwiIH1dO1xuICAgIHRyeUxvY3NMaXN0LmZvckVhY2gocHVzaFRyeUVudHJ5LCB0aGlzKTtcbiAgICB0aGlzLnJlc2V0KHRydWUpO1xuICB9XG5cbiAgcnVudGltZS5rZXlzID0gZnVuY3Rpb24ob2JqZWN0KSB7XG4gICAgdmFyIGtleXMgPSBbXTtcbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqZWN0KSB7XG4gICAgICBrZXlzLnB1c2goa2V5KTtcbiAgICB9XG4gICAga2V5cy5yZXZlcnNlKCk7XG5cbiAgICAvLyBSYXRoZXIgdGhhbiByZXR1cm5pbmcgYW4gb2JqZWN0IHdpdGggYSBuZXh0IG1ldGhvZCwgd2Uga2VlcFxuICAgIC8vIHRoaW5ncyBzaW1wbGUgYW5kIHJldHVybiB0aGUgbmV4dCBmdW5jdGlvbiBpdHNlbGYuXG4gICAgcmV0dXJuIGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICB3aGlsZSAoa2V5cy5sZW5ndGgpIHtcbiAgICAgICAgdmFyIGtleSA9IGtleXMucG9wKCk7XG4gICAgICAgIGlmIChrZXkgaW4gb2JqZWN0KSB7XG4gICAgICAgICAgbmV4dC52YWx1ZSA9IGtleTtcbiAgICAgICAgICBuZXh0LmRvbmUgPSBmYWxzZTtcbiAgICAgICAgICByZXR1cm4gbmV4dDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBUbyBhdm9pZCBjcmVhdGluZyBhbiBhZGRpdGlvbmFsIG9iamVjdCwgd2UganVzdCBoYW5nIHRoZSAudmFsdWVcbiAgICAgIC8vIGFuZCAuZG9uZSBwcm9wZXJ0aWVzIG9mZiB0aGUgbmV4dCBmdW5jdGlvbiBvYmplY3QgaXRzZWxmLiBUaGlzXG4gICAgICAvLyBhbHNvIGVuc3VyZXMgdGhhdCB0aGUgbWluaWZpZXIgd2lsbCBub3QgYW5vbnltaXplIHRoZSBmdW5jdGlvbi5cbiAgICAgIG5leHQuZG9uZSA9IHRydWU7XG4gICAgICByZXR1cm4gbmV4dDtcbiAgICB9O1xuICB9O1xuXG4gIGZ1bmN0aW9uIHZhbHVlcyhpdGVyYWJsZSkge1xuICAgIGlmIChpdGVyYWJsZSkge1xuICAgICAgdmFyIGl0ZXJhdG9yTWV0aG9kID0gaXRlcmFibGVbaXRlcmF0b3JTeW1ib2xdO1xuICAgICAgaWYgKGl0ZXJhdG9yTWV0aG9kKSB7XG4gICAgICAgIHJldHVybiBpdGVyYXRvck1ldGhvZC5jYWxsKGl0ZXJhYmxlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBpdGVyYWJsZS5uZXh0ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgcmV0dXJuIGl0ZXJhYmxlO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWlzTmFOKGl0ZXJhYmxlLmxlbmd0aCkpIHtcbiAgICAgICAgdmFyIGkgPSAtMSwgbmV4dCA9IGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICAgICAgd2hpbGUgKCsraSA8IGl0ZXJhYmxlLmxlbmd0aCkge1xuICAgICAgICAgICAgaWYgKGhhc093bi5jYWxsKGl0ZXJhYmxlLCBpKSkge1xuICAgICAgICAgICAgICBuZXh0LnZhbHVlID0gaXRlcmFibGVbaV07XG4gICAgICAgICAgICAgIG5leHQuZG9uZSA9IGZhbHNlO1xuICAgICAgICAgICAgICByZXR1cm4gbmV4dDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBuZXh0LnZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgICAgIG5leHQuZG9uZSA9IHRydWU7XG5cbiAgICAgICAgICByZXR1cm4gbmV4dDtcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gbmV4dC5uZXh0ID0gbmV4dDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBSZXR1cm4gYW4gaXRlcmF0b3Igd2l0aCBubyB2YWx1ZXMuXG4gICAgcmV0dXJuIHsgbmV4dDogZG9uZVJlc3VsdCB9O1xuICB9XG4gIHJ1bnRpbWUudmFsdWVzID0gdmFsdWVzO1xuXG4gIGZ1bmN0aW9uIGRvbmVSZXN1bHQoKSB7XG4gICAgcmV0dXJuIHsgdmFsdWU6IHVuZGVmaW5lZCwgZG9uZTogdHJ1ZSB9O1xuICB9XG5cbiAgQ29udGV4dC5wcm90b3R5cGUgPSB7XG4gICAgY29uc3RydWN0b3I6IENvbnRleHQsXG5cbiAgICByZXNldDogZnVuY3Rpb24oc2tpcFRlbXBSZXNldCkge1xuICAgICAgdGhpcy5wcmV2ID0gMDtcbiAgICAgIHRoaXMubmV4dCA9IDA7XG4gICAgICAvLyBSZXNldHRpbmcgY29udGV4dC5fc2VudCBmb3IgbGVnYWN5IHN1cHBvcnQgb2YgQmFiZWwnc1xuICAgICAgLy8gZnVuY3Rpb24uc2VudCBpbXBsZW1lbnRhdGlvbi5cbiAgICAgIHRoaXMuc2VudCA9IHRoaXMuX3NlbnQgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLmRvbmUgPSBmYWxzZTtcbiAgICAgIHRoaXMuZGVsZWdhdGUgPSBudWxsO1xuXG4gICAgICB0aGlzLm1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgdGhpcy5hcmcgPSB1bmRlZmluZWQ7XG5cbiAgICAgIHRoaXMudHJ5RW50cmllcy5mb3JFYWNoKHJlc2V0VHJ5RW50cnkpO1xuXG4gICAgICBpZiAoIXNraXBUZW1wUmVzZXQpIHtcbiAgICAgICAgZm9yICh2YXIgbmFtZSBpbiB0aGlzKSB7XG4gICAgICAgICAgLy8gTm90IHN1cmUgYWJvdXQgdGhlIG9wdGltYWwgb3JkZXIgb2YgdGhlc2UgY29uZGl0aW9uczpcbiAgICAgICAgICBpZiAobmFtZS5jaGFyQXQoMCkgPT09IFwidFwiICYmXG4gICAgICAgICAgICAgIGhhc093bi5jYWxsKHRoaXMsIG5hbWUpICYmXG4gICAgICAgICAgICAgICFpc05hTigrbmFtZS5zbGljZSgxKSkpIHtcbiAgICAgICAgICAgIHRoaXNbbmFtZV0gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIHN0b3A6IGZ1bmN0aW9uKCkge1xuICAgICAgdGhpcy5kb25lID0gdHJ1ZTtcblxuICAgICAgdmFyIHJvb3RFbnRyeSA9IHRoaXMudHJ5RW50cmllc1swXTtcbiAgICAgIHZhciByb290UmVjb3JkID0gcm9vdEVudHJ5LmNvbXBsZXRpb247XG4gICAgICBpZiAocm9vdFJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgdGhyb3cgcm9vdFJlY29yZC5hcmc7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLnJ2YWw7XG4gICAgfSxcblxuICAgIGRpc3BhdGNoRXhjZXB0aW9uOiBmdW5jdGlvbihleGNlcHRpb24pIHtcbiAgICAgIGlmICh0aGlzLmRvbmUpIHtcbiAgICAgICAgdGhyb3cgZXhjZXB0aW9uO1xuICAgICAgfVxuXG4gICAgICB2YXIgY29udGV4dCA9IHRoaXM7XG4gICAgICBmdW5jdGlvbiBoYW5kbGUobG9jLCBjYXVnaHQpIHtcbiAgICAgICAgcmVjb3JkLnR5cGUgPSBcInRocm93XCI7XG4gICAgICAgIHJlY29yZC5hcmcgPSBleGNlcHRpb247XG4gICAgICAgIGNvbnRleHQubmV4dCA9IGxvYztcblxuICAgICAgICBpZiAoY2F1Z2h0KSB7XG4gICAgICAgICAgLy8gSWYgdGhlIGRpc3BhdGNoZWQgZXhjZXB0aW9uIHdhcyBjYXVnaHQgYnkgYSBjYXRjaCBibG9jayxcbiAgICAgICAgICAvLyB0aGVuIGxldCB0aGF0IGNhdGNoIGJsb2NrIGhhbmRsZSB0aGUgZXhjZXB0aW9uIG5vcm1hbGx5LlxuICAgICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJuZXh0XCI7XG4gICAgICAgICAgY29udGV4dC5hcmcgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gISEgY2F1Z2h0O1xuICAgICAgfVxuXG4gICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcbiAgICAgICAgdmFyIHJlY29yZCA9IGVudHJ5LmNvbXBsZXRpb247XG5cbiAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA9PT0gXCJyb290XCIpIHtcbiAgICAgICAgICAvLyBFeGNlcHRpb24gdGhyb3duIG91dHNpZGUgb2YgYW55IHRyeSBibG9jayB0aGF0IGNvdWxkIGhhbmRsZVxuICAgICAgICAgIC8vIGl0LCBzbyBzZXQgdGhlIGNvbXBsZXRpb24gdmFsdWUgb2YgdGhlIGVudGlyZSBmdW5jdGlvbiB0b1xuICAgICAgICAgIC8vIHRocm93IHRoZSBleGNlcHRpb24uXG4gICAgICAgICAgcmV0dXJuIGhhbmRsZShcImVuZFwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlbnRyeS50cnlMb2MgPD0gdGhpcy5wcmV2KSB7XG4gICAgICAgICAgdmFyIGhhc0NhdGNoID0gaGFzT3duLmNhbGwoZW50cnksIFwiY2F0Y2hMb2NcIik7XG4gICAgICAgICAgdmFyIGhhc0ZpbmFsbHkgPSBoYXNPd24uY2FsbChlbnRyeSwgXCJmaW5hbGx5TG9jXCIpO1xuXG4gICAgICAgICAgaWYgKGhhc0NhdGNoICYmIGhhc0ZpbmFsbHkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBlbnRyeS5jYXRjaExvYykge1xuICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlKGVudHJ5LmNhdGNoTG9jLCB0cnVlKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5wcmV2IDwgZW50cnkuZmluYWxseUxvYykge1xuICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlKGVudHJ5LmZpbmFsbHlMb2MpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgfSBlbHNlIGlmIChoYXNDYXRjaCkge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGVudHJ5LmNhdGNoTG9jKSB7XG4gICAgICAgICAgICAgIHJldHVybiBoYW5kbGUoZW50cnkuY2F0Y2hMb2MsIHRydWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgfSBlbHNlIGlmIChoYXNGaW5hbGx5KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgZW50cnkuZmluYWxseUxvYykge1xuICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlKGVudHJ5LmZpbmFsbHlMb2MpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInRyeSBzdGF0ZW1lbnQgd2l0aG91dCBjYXRjaCBvciBmaW5hbGx5XCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhYnJ1cHQ6IGZ1bmN0aW9uKHR5cGUsIGFyZykge1xuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIGlmIChlbnRyeS50cnlMb2MgPD0gdGhpcy5wcmV2ICYmXG4gICAgICAgICAgICBoYXNPd24uY2FsbChlbnRyeSwgXCJmaW5hbGx5TG9jXCIpICYmXG4gICAgICAgICAgICB0aGlzLnByZXYgPCBlbnRyeS5maW5hbGx5TG9jKSB7XG4gICAgICAgICAgdmFyIGZpbmFsbHlFbnRyeSA9IGVudHJ5O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChmaW5hbGx5RW50cnkgJiZcbiAgICAgICAgICAodHlwZSA9PT0gXCJicmVha1wiIHx8XG4gICAgICAgICAgIHR5cGUgPT09IFwiY29udGludWVcIikgJiZcbiAgICAgICAgICBmaW5hbGx5RW50cnkudHJ5TG9jIDw9IGFyZyAmJlxuICAgICAgICAgIGFyZyA8PSBmaW5hbGx5RW50cnkuZmluYWxseUxvYykge1xuICAgICAgICAvLyBJZ25vcmUgdGhlIGZpbmFsbHkgZW50cnkgaWYgY29udHJvbCBpcyBub3QganVtcGluZyB0byBhXG4gICAgICAgIC8vIGxvY2F0aW9uIG91dHNpZGUgdGhlIHRyeS9jYXRjaCBibG9jay5cbiAgICAgICAgZmluYWxseUVudHJ5ID0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgdmFyIHJlY29yZCA9IGZpbmFsbHlFbnRyeSA/IGZpbmFsbHlFbnRyeS5jb21wbGV0aW9uIDoge307XG4gICAgICByZWNvcmQudHlwZSA9IHR5cGU7XG4gICAgICByZWNvcmQuYXJnID0gYXJnO1xuXG4gICAgICBpZiAoZmluYWxseUVudHJ5KSB7XG4gICAgICAgIHRoaXMubWV0aG9kID0gXCJuZXh0XCI7XG4gICAgICAgIHRoaXMubmV4dCA9IGZpbmFsbHlFbnRyeS5maW5hbGx5TG9jO1xuICAgICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuY29tcGxldGUocmVjb3JkKTtcbiAgICB9LFxuXG4gICAgY29tcGxldGU6IGZ1bmN0aW9uKHJlY29yZCwgYWZ0ZXJMb2MpIHtcbiAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIHRocm93IHJlY29yZC5hcmc7XG4gICAgICB9XG5cbiAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJicmVha1wiIHx8XG4gICAgICAgICAgcmVjb3JkLnR5cGUgPT09IFwiY29udGludWVcIikge1xuICAgICAgICB0aGlzLm5leHQgPSByZWNvcmQuYXJnO1xuICAgICAgfSBlbHNlIGlmIChyZWNvcmQudHlwZSA9PT0gXCJyZXR1cm5cIikge1xuICAgICAgICB0aGlzLnJ2YWwgPSB0aGlzLmFyZyA9IHJlY29yZC5hcmc7XG4gICAgICAgIHRoaXMubWV0aG9kID0gXCJyZXR1cm5cIjtcbiAgICAgICAgdGhpcy5uZXh0ID0gXCJlbmRcIjtcbiAgICAgIH0gZWxzZSBpZiAocmVjb3JkLnR5cGUgPT09IFwibm9ybWFsXCIgJiYgYWZ0ZXJMb2MpIHtcbiAgICAgICAgdGhpcy5uZXh0ID0gYWZ0ZXJMb2M7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH0sXG5cbiAgICBmaW5pc2g6IGZ1bmN0aW9uKGZpbmFsbHlMb2MpIHtcbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICBpZiAoZW50cnkuZmluYWxseUxvYyA9PT0gZmluYWxseUxvYykge1xuICAgICAgICAgIHRoaXMuY29tcGxldGUoZW50cnkuY29tcGxldGlvbiwgZW50cnkuYWZ0ZXJMb2MpO1xuICAgICAgICAgIHJlc2V0VHJ5RW50cnkoZW50cnkpO1xuICAgICAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIFwiY2F0Y2hcIjogZnVuY3Rpb24odHJ5TG9jKSB7XG4gICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcbiAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA9PT0gdHJ5TG9jKSB7XG4gICAgICAgICAgdmFyIHJlY29yZCA9IGVudHJ5LmNvbXBsZXRpb247XG4gICAgICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICAgIHZhciB0aHJvd24gPSByZWNvcmQuYXJnO1xuICAgICAgICAgICAgcmVzZXRUcnlFbnRyeShlbnRyeSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0aHJvd247XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gVGhlIGNvbnRleHQuY2F0Y2ggbWV0aG9kIG11c3Qgb25seSBiZSBjYWxsZWQgd2l0aCBhIGxvY2F0aW9uXG4gICAgICAvLyBhcmd1bWVudCB0aGF0IGNvcnJlc3BvbmRzIHRvIGEga25vd24gY2F0Y2ggYmxvY2suXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJpbGxlZ2FsIGNhdGNoIGF0dGVtcHRcIik7XG4gICAgfSxcblxuICAgIGRlbGVnYXRlWWllbGQ6IGZ1bmN0aW9uKGl0ZXJhYmxlLCByZXN1bHROYW1lLCBuZXh0TG9jKSB7XG4gICAgICB0aGlzLmRlbGVnYXRlID0ge1xuICAgICAgICBpdGVyYXRvcjogdmFsdWVzKGl0ZXJhYmxlKSxcbiAgICAgICAgcmVzdWx0TmFtZTogcmVzdWx0TmFtZSxcbiAgICAgICAgbmV4dExvYzogbmV4dExvY1xuICAgICAgfTtcblxuICAgICAgaWYgKHRoaXMubWV0aG9kID09PSBcIm5leHRcIikge1xuICAgICAgICAvLyBEZWxpYmVyYXRlbHkgZm9yZ2V0IHRoZSBsYXN0IHNlbnQgdmFsdWUgc28gdGhhdCB3ZSBkb24ndFxuICAgICAgICAvLyBhY2NpZGVudGFsbHkgcGFzcyBpdCBvbiB0byB0aGUgZGVsZWdhdGUuXG4gICAgICAgIHRoaXMuYXJnID0gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICB9XG4gIH07XG59KShcbiAgLy8gQW1vbmcgdGhlIHZhcmlvdXMgdHJpY2tzIGZvciBvYnRhaW5pbmcgYSByZWZlcmVuY2UgdG8gdGhlIGdsb2JhbFxuICAvLyBvYmplY3QsIHRoaXMgc2VlbXMgdG8gYmUgdGhlIG1vc3QgcmVsaWFibGUgdGVjaG5pcXVlIHRoYXQgZG9lcyBub3RcbiAgLy8gdXNlIGluZGlyZWN0IGV2YWwgKHdoaWNoIHZpb2xhdGVzIENvbnRlbnQgU2VjdXJpdHkgUG9saWN5KS5cbiAgdHlwZW9mIGdsb2JhbCA9PT0gXCJvYmplY3RcIiA/IGdsb2JhbCA6XG4gIHR5cGVvZiB3aW5kb3cgPT09IFwib2JqZWN0XCIgPyB3aW5kb3cgOlxuICB0eXBlb2Ygc2VsZiA9PT0gXCJvYmplY3RcIiA/IHNlbGYgOiB0aGlzXG4pO1xuIiwiJ3VzZSBzdHJpY3QnXG5cbmV4cG9ydHMuYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGhcbmV4cG9ydHMudG9CeXRlQXJyYXkgPSB0b0J5dGVBcnJheVxuZXhwb3J0cy5mcm9tQnl0ZUFycmF5ID0gZnJvbUJ5dGVBcnJheVxuXG52YXIgbG9va3VwID0gW11cbnZhciByZXZMb29rdXAgPSBbXVxudmFyIEFyciA9IHR5cGVvZiBVaW50OEFycmF5ICE9PSAndW5kZWZpbmVkJyA/IFVpbnQ4QXJyYXkgOiBBcnJheVxuXG52YXIgY29kZSA9ICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvJ1xuZm9yICh2YXIgaSA9IDAsIGxlbiA9IGNvZGUubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHtcbiAgbG9va3VwW2ldID0gY29kZVtpXVxuICByZXZMb29rdXBbY29kZS5jaGFyQ29kZUF0KGkpXSA9IGlcbn1cblxuLy8gU3VwcG9ydCBkZWNvZGluZyBVUkwtc2FmZSBiYXNlNjQgc3RyaW5ncywgYXMgTm9kZS5qcyBkb2VzLlxuLy8gU2VlOiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9CYXNlNjQjVVJMX2FwcGxpY2F0aW9uc1xucmV2TG9va3VwWyctJy5jaGFyQ29kZUF0KDApXSA9IDYyXG5yZXZMb29rdXBbJ18nLmNoYXJDb2RlQXQoMCldID0gNjNcblxuZnVuY3Rpb24gZ2V0TGVucyAoYjY0KSB7XG4gIHZhciBsZW4gPSBiNjQubGVuZ3RoXG5cbiAgaWYgKGxlbiAlIDQgPiAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHN0cmluZy4gTGVuZ3RoIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0JylcbiAgfVxuXG4gIC8vIFRyaW0gb2ZmIGV4dHJhIGJ5dGVzIGFmdGVyIHBsYWNlaG9sZGVyIGJ5dGVzIGFyZSBmb3VuZFxuICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9iZWF0Z2FtbWl0L2Jhc2U2NC1qcy9pc3N1ZXMvNDJcbiAgdmFyIHZhbGlkTGVuID0gYjY0LmluZGV4T2YoJz0nKVxuICBpZiAodmFsaWRMZW4gPT09IC0xKSB2YWxpZExlbiA9IGxlblxuXG4gIHZhciBwbGFjZUhvbGRlcnNMZW4gPSB2YWxpZExlbiA9PT0gbGVuXG4gICAgPyAwXG4gICAgOiA0IC0gKHZhbGlkTGVuICUgNClcblxuICByZXR1cm4gW3ZhbGlkTGVuLCBwbGFjZUhvbGRlcnNMZW5dXG59XG5cbi8vIGJhc2U2NCBpcyA0LzMgKyB1cCB0byB0d28gY2hhcmFjdGVycyBvZiB0aGUgb3JpZ2luYWwgZGF0YVxuZnVuY3Rpb24gYnl0ZUxlbmd0aCAoYjY0KSB7XG4gIHZhciBsZW5zID0gZ2V0TGVucyhiNjQpXG4gIHZhciB2YWxpZExlbiA9IGxlbnNbMF1cbiAgdmFyIHBsYWNlSG9sZGVyc0xlbiA9IGxlbnNbMV1cbiAgcmV0dXJuICgodmFsaWRMZW4gKyBwbGFjZUhvbGRlcnNMZW4pICogMyAvIDQpIC0gcGxhY2VIb2xkZXJzTGVuXG59XG5cbmZ1bmN0aW9uIF9ieXRlTGVuZ3RoIChiNjQsIHZhbGlkTGVuLCBwbGFjZUhvbGRlcnNMZW4pIHtcbiAgcmV0dXJuICgodmFsaWRMZW4gKyBwbGFjZUhvbGRlcnNMZW4pICogMyAvIDQpIC0gcGxhY2VIb2xkZXJzTGVuXG59XG5cbmZ1bmN0aW9uIHRvQnl0ZUFycmF5IChiNjQpIHtcbiAgdmFyIHRtcFxuICB2YXIgbGVucyA9IGdldExlbnMoYjY0KVxuICB2YXIgdmFsaWRMZW4gPSBsZW5zWzBdXG4gIHZhciBwbGFjZUhvbGRlcnNMZW4gPSBsZW5zWzFdXG5cbiAgdmFyIGFyciA9IG5ldyBBcnIoX2J5dGVMZW5ndGgoYjY0LCB2YWxpZExlbiwgcGxhY2VIb2xkZXJzTGVuKSlcblxuICB2YXIgY3VyQnl0ZSA9IDBcblxuICAvLyBpZiB0aGVyZSBhcmUgcGxhY2Vob2xkZXJzLCBvbmx5IGdldCB1cCB0byB0aGUgbGFzdCBjb21wbGV0ZSA0IGNoYXJzXG4gIHZhciBsZW4gPSBwbGFjZUhvbGRlcnNMZW4gPiAwXG4gICAgPyB2YWxpZExlbiAtIDRcbiAgICA6IHZhbGlkTGVuXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkgKz0gNCkge1xuICAgIHRtcCA9XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkpXSA8PCAxOCkgfFxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMSldIDw8IDEyKSB8XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAyKV0gPDwgNikgfFxuICAgICAgcmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAzKV1cbiAgICBhcnJbY3VyQnl0ZSsrXSA9ICh0bXAgPj4gMTYpICYgMHhGRlxuICAgIGFycltjdXJCeXRlKytdID0gKHRtcCA+PiA4KSAmIDB4RkZcbiAgICBhcnJbY3VyQnl0ZSsrXSA9IHRtcCAmIDB4RkZcbiAgfVxuXG4gIGlmIChwbGFjZUhvbGRlcnNMZW4gPT09IDIpIHtcbiAgICB0bXAgPVxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpKV0gPDwgMikgfFxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMSldID4+IDQpXG4gICAgYXJyW2N1ckJ5dGUrK10gPSB0bXAgJiAweEZGXG4gIH1cblxuICBpZiAocGxhY2VIb2xkZXJzTGVuID09PSAxKSB7XG4gICAgdG1wID1cbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSldIDw8IDEwKSB8XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAxKV0gPDwgNCkgfFxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMildID4+IDIpXG4gICAgYXJyW2N1ckJ5dGUrK10gPSAodG1wID4+IDgpICYgMHhGRlxuICAgIGFycltjdXJCeXRlKytdID0gdG1wICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIGFyclxufVxuXG5mdW5jdGlvbiB0cmlwbGV0VG9CYXNlNjQgKG51bSkge1xuICByZXR1cm4gbG9va3VwW251bSA+PiAxOCAmIDB4M0ZdICtcbiAgICBsb29rdXBbbnVtID4+IDEyICYgMHgzRl0gK1xuICAgIGxvb2t1cFtudW0gPj4gNiAmIDB4M0ZdICtcbiAgICBsb29rdXBbbnVtICYgMHgzRl1cbn1cblxuZnVuY3Rpb24gZW5jb2RlQ2h1bmsgKHVpbnQ4LCBzdGFydCwgZW5kKSB7XG4gIHZhciB0bXBcbiAgdmFyIG91dHB1dCA9IFtdXG4gIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgaSArPSAzKSB7XG4gICAgdG1wID1cbiAgICAgICgodWludDhbaV0gPDwgMTYpICYgMHhGRjAwMDApICtcbiAgICAgICgodWludDhbaSArIDFdIDw8IDgpICYgMHhGRjAwKSArXG4gICAgICAodWludDhbaSArIDJdICYgMHhGRilcbiAgICBvdXRwdXQucHVzaCh0cmlwbGV0VG9CYXNlNjQodG1wKSlcbiAgfVxuICByZXR1cm4gb3V0cHV0LmpvaW4oJycpXG59XG5cbmZ1bmN0aW9uIGZyb21CeXRlQXJyYXkgKHVpbnQ4KSB7XG4gIHZhciB0bXBcbiAgdmFyIGxlbiA9IHVpbnQ4Lmxlbmd0aFxuICB2YXIgZXh0cmFCeXRlcyA9IGxlbiAlIDMgLy8gaWYgd2UgaGF2ZSAxIGJ5dGUgbGVmdCwgcGFkIDIgYnl0ZXNcbiAgdmFyIHBhcnRzID0gW11cbiAgdmFyIG1heENodW5rTGVuZ3RoID0gMTYzODMgLy8gbXVzdCBiZSBtdWx0aXBsZSBvZiAzXG5cbiAgLy8gZ28gdGhyb3VnaCB0aGUgYXJyYXkgZXZlcnkgdGhyZWUgYnl0ZXMsIHdlJ2xsIGRlYWwgd2l0aCB0cmFpbGluZyBzdHVmZiBsYXRlclxuICBmb3IgKHZhciBpID0gMCwgbGVuMiA9IGxlbiAtIGV4dHJhQnl0ZXM7IGkgPCBsZW4yOyBpICs9IG1heENodW5rTGVuZ3RoKSB7XG4gICAgcGFydHMucHVzaChlbmNvZGVDaHVuayhcbiAgICAgIHVpbnQ4LCBpLCAoaSArIG1heENodW5rTGVuZ3RoKSA+IGxlbjIgPyBsZW4yIDogKGkgKyBtYXhDaHVua0xlbmd0aClcbiAgICApKVxuICB9XG5cbiAgLy8gcGFkIHRoZSBlbmQgd2l0aCB6ZXJvcywgYnV0IG1ha2Ugc3VyZSB0byBub3QgZm9yZ2V0IHRoZSBleHRyYSBieXRlc1xuICBpZiAoZXh0cmFCeXRlcyA9PT0gMSkge1xuICAgIHRtcCA9IHVpbnQ4W2xlbiAtIDFdXG4gICAgcGFydHMucHVzaChcbiAgICAgIGxvb2t1cFt0bXAgPj4gMl0gK1xuICAgICAgbG9va3VwWyh0bXAgPDwgNCkgJiAweDNGXSArXG4gICAgICAnPT0nXG4gICAgKVxuICB9IGVsc2UgaWYgKGV4dHJhQnl0ZXMgPT09IDIpIHtcbiAgICB0bXAgPSAodWludDhbbGVuIC0gMl0gPDwgOCkgKyB1aW50OFtsZW4gLSAxXVxuICAgIHBhcnRzLnB1c2goXG4gICAgICBsb29rdXBbdG1wID4+IDEwXSArXG4gICAgICBsb29rdXBbKHRtcCA+PiA0KSAmIDB4M0ZdICtcbiAgICAgIGxvb2t1cFsodG1wIDw8IDIpICYgMHgzRl0gK1xuICAgICAgJz0nXG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIHBhcnRzLmpvaW4oJycpXG59XG4iLCIvKiFcbiAqIFRoZSBidWZmZXIgbW9kdWxlIGZyb20gbm9kZS5qcywgZm9yIHRoZSBicm93c2VyLlxuICpcbiAqIEBhdXRob3IgICBGZXJvc3MgQWJvdWtoYWRpamVoIDxmZXJvc3NAZmVyb3NzLm9yZz4gPGh0dHA6Ly9mZXJvc3Mub3JnPlxuICogQGxpY2Vuc2UgIE1JVFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90byAqL1xuXG4ndXNlIHN0cmljdCdcblxudmFyIGJhc2U2NCA9IHJlcXVpcmUoJ2Jhc2U2NC1qcycpXG52YXIgaWVlZTc1NCA9IHJlcXVpcmUoJ2llZWU3NTQnKVxudmFyIGlzQXJyYXkgPSByZXF1aXJlKCdpc2FycmF5JylcblxuZXhwb3J0cy5CdWZmZXIgPSBCdWZmZXJcbmV4cG9ydHMuU2xvd0J1ZmZlciA9IFNsb3dCdWZmZXJcbmV4cG9ydHMuSU5TUEVDVF9NQVhfQllURVMgPSA1MFxuXG4vKipcbiAqIElmIGBCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVGA6XG4gKiAgID09PSB0cnVlICAgIFVzZSBVaW50OEFycmF5IGltcGxlbWVudGF0aW9uIChmYXN0ZXN0KVxuICogICA9PT0gZmFsc2UgICBVc2UgT2JqZWN0IGltcGxlbWVudGF0aW9uIChtb3N0IGNvbXBhdGlibGUsIGV2ZW4gSUU2KVxuICpcbiAqIEJyb3dzZXJzIHRoYXQgc3VwcG9ydCB0eXBlZCBhcnJheXMgYXJlIElFIDEwKywgRmlyZWZveCA0KywgQ2hyb21lIDcrLCBTYWZhcmkgNS4xKyxcbiAqIE9wZXJhIDExLjYrLCBpT1MgNC4yKy5cbiAqXG4gKiBEdWUgdG8gdmFyaW91cyBicm93c2VyIGJ1Z3MsIHNvbWV0aW1lcyB0aGUgT2JqZWN0IGltcGxlbWVudGF0aW9uIHdpbGwgYmUgdXNlZCBldmVuXG4gKiB3aGVuIHRoZSBicm93c2VyIHN1cHBvcnRzIHR5cGVkIGFycmF5cy5cbiAqXG4gKiBOb3RlOlxuICpcbiAqICAgLSBGaXJlZm94IDQtMjkgbGFja3Mgc3VwcG9ydCBmb3IgYWRkaW5nIG5ldyBwcm9wZXJ0aWVzIHRvIGBVaW50OEFycmF5YCBpbnN0YW5jZXMsXG4gKiAgICAgU2VlOiBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD02OTU0MzguXG4gKlxuICogICAtIENocm9tZSA5LTEwIGlzIG1pc3NpbmcgdGhlIGBUeXBlZEFycmF5LnByb3RvdHlwZS5zdWJhcnJheWAgZnVuY3Rpb24uXG4gKlxuICogICAtIElFMTAgaGFzIGEgYnJva2VuIGBUeXBlZEFycmF5LnByb3RvdHlwZS5zdWJhcnJheWAgZnVuY3Rpb24gd2hpY2ggcmV0dXJucyBhcnJheXMgb2ZcbiAqICAgICBpbmNvcnJlY3QgbGVuZ3RoIGluIHNvbWUgc2l0dWF0aW9ucy5cblxuICogV2UgZGV0ZWN0IHRoZXNlIGJ1Z2d5IGJyb3dzZXJzIGFuZCBzZXQgYEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUYCB0byBgZmFsc2VgIHNvIHRoZXlcbiAqIGdldCB0aGUgT2JqZWN0IGltcGxlbWVudGF0aW9uLCB3aGljaCBpcyBzbG93ZXIgYnV0IGJlaGF2ZXMgY29ycmVjdGx5LlxuICovXG5CdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCA9IGdsb2JhbC5UWVBFRF9BUlJBWV9TVVBQT1JUICE9PSB1bmRlZmluZWRcbiAgPyBnbG9iYWwuVFlQRURfQVJSQVlfU1VQUE9SVFxuICA6IHR5cGVkQXJyYXlTdXBwb3J0KClcblxuLypcbiAqIEV4cG9ydCBrTWF4TGVuZ3RoIGFmdGVyIHR5cGVkIGFycmF5IHN1cHBvcnQgaXMgZGV0ZXJtaW5lZC5cbiAqL1xuZXhwb3J0cy5rTWF4TGVuZ3RoID0ga01heExlbmd0aCgpXG5cbmZ1bmN0aW9uIHR5cGVkQXJyYXlTdXBwb3J0ICgpIHtcbiAgdHJ5IHtcbiAgICB2YXIgYXJyID0gbmV3IFVpbnQ4QXJyYXkoMSlcbiAgICBhcnIuX19wcm90b19fID0ge19fcHJvdG9fXzogVWludDhBcnJheS5wcm90b3R5cGUsIGZvbzogZnVuY3Rpb24gKCkgeyByZXR1cm4gNDIgfX1cbiAgICByZXR1cm4gYXJyLmZvbygpID09PSA0MiAmJiAvLyB0eXBlZCBhcnJheSBpbnN0YW5jZXMgY2FuIGJlIGF1Z21lbnRlZFxuICAgICAgICB0eXBlb2YgYXJyLnN1YmFycmF5ID09PSAnZnVuY3Rpb24nICYmIC8vIGNocm9tZSA5LTEwIGxhY2sgYHN1YmFycmF5YFxuICAgICAgICBhcnIuc3ViYXJyYXkoMSwgMSkuYnl0ZUxlbmd0aCA9PT0gMCAvLyBpZTEwIGhhcyBicm9rZW4gYHN1YmFycmF5YFxuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cblxuZnVuY3Rpb24ga01heExlbmd0aCAoKSB7XG4gIHJldHVybiBCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVFxuICAgID8gMHg3ZmZmZmZmZlxuICAgIDogMHgzZmZmZmZmZlxufVxuXG5mdW5jdGlvbiBjcmVhdGVCdWZmZXIgKHRoYXQsIGxlbmd0aCkge1xuICBpZiAoa01heExlbmd0aCgpIDwgbGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0ludmFsaWQgdHlwZWQgYXJyYXkgbGVuZ3RoJylcbiAgfVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICAvLyBSZXR1cm4gYW4gYXVnbWVudGVkIGBVaW50OEFycmF5YCBpbnN0YW5jZSwgZm9yIGJlc3QgcGVyZm9ybWFuY2VcbiAgICB0aGF0ID0gbmV3IFVpbnQ4QXJyYXkobGVuZ3RoKVxuICAgIHRoYXQuX19wcm90b19fID0gQnVmZmVyLnByb3RvdHlwZVxuICB9IGVsc2Uge1xuICAgIC8vIEZhbGxiYWNrOiBSZXR1cm4gYW4gb2JqZWN0IGluc3RhbmNlIG9mIHRoZSBCdWZmZXIgY2xhc3NcbiAgICBpZiAodGhhdCA9PT0gbnVsbCkge1xuICAgICAgdGhhdCA9IG5ldyBCdWZmZXIobGVuZ3RoKVxuICAgIH1cbiAgICB0aGF0Lmxlbmd0aCA9IGxlbmd0aFxuICB9XG5cbiAgcmV0dXJuIHRoYXRcbn1cblxuLyoqXG4gKiBUaGUgQnVmZmVyIGNvbnN0cnVjdG9yIHJldHVybnMgaW5zdGFuY2VzIG9mIGBVaW50OEFycmF5YCB0aGF0IGhhdmUgdGhlaXJcbiAqIHByb3RvdHlwZSBjaGFuZ2VkIHRvIGBCdWZmZXIucHJvdG90eXBlYC4gRnVydGhlcm1vcmUsIGBCdWZmZXJgIGlzIGEgc3ViY2xhc3Mgb2ZcbiAqIGBVaW50OEFycmF5YCwgc28gdGhlIHJldHVybmVkIGluc3RhbmNlcyB3aWxsIGhhdmUgYWxsIHRoZSBub2RlIGBCdWZmZXJgIG1ldGhvZHNcbiAqIGFuZCB0aGUgYFVpbnQ4QXJyYXlgIG1ldGhvZHMuIFNxdWFyZSBicmFja2V0IG5vdGF0aW9uIHdvcmtzIGFzIGV4cGVjdGVkIC0tIGl0XG4gKiByZXR1cm5zIGEgc2luZ2xlIG9jdGV0LlxuICpcbiAqIFRoZSBgVWludDhBcnJheWAgcHJvdG90eXBlIHJlbWFpbnMgdW5tb2RpZmllZC5cbiAqL1xuXG5mdW5jdGlvbiBCdWZmZXIgKGFyZywgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKSB7XG4gIGlmICghQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQgJiYgISh0aGlzIGluc3RhbmNlb2YgQnVmZmVyKSkge1xuICAgIHJldHVybiBuZXcgQnVmZmVyKGFyZywgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKVxuICB9XG5cbiAgLy8gQ29tbW9uIGNhc2UuXG4gIGlmICh0eXBlb2YgYXJnID09PSAnbnVtYmVyJykge1xuICAgIGlmICh0eXBlb2YgZW5jb2RpbmdPck9mZnNldCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ0lmIGVuY29kaW5nIGlzIHNwZWNpZmllZCB0aGVuIHRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nJ1xuICAgICAgKVxuICAgIH1cbiAgICByZXR1cm4gYWxsb2NVbnNhZmUodGhpcywgYXJnKVxuICB9XG4gIHJldHVybiBmcm9tKHRoaXMsIGFyZywgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKVxufVxuXG5CdWZmZXIucG9vbFNpemUgPSA4MTkyIC8vIG5vdCB1c2VkIGJ5IHRoaXMgaW1wbGVtZW50YXRpb25cblxuLy8gVE9ETzogTGVnYWN5LCBub3QgbmVlZGVkIGFueW1vcmUuIFJlbW92ZSBpbiBuZXh0IG1ham9yIHZlcnNpb24uXG5CdWZmZXIuX2F1Z21lbnQgPSBmdW5jdGlvbiAoYXJyKSB7XG4gIGFyci5fX3Byb3RvX18gPSBCdWZmZXIucHJvdG90eXBlXG4gIHJldHVybiBhcnJcbn1cblxuZnVuY3Rpb24gZnJvbSAodGhhdCwgdmFsdWUsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCkge1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1widmFsdWVcIiBhcmd1bWVudCBtdXN0IG5vdCBiZSBhIG51bWJlcicpXG4gIH1cblxuICBpZiAodHlwZW9mIEFycmF5QnVmZmVyICE9PSAndW5kZWZpbmVkJyAmJiB2YWx1ZSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSB7XG4gICAgcmV0dXJuIGZyb21BcnJheUJ1ZmZlcih0aGF0LCB2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKVxuICB9XG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZnJvbVN0cmluZyh0aGF0LCB2YWx1ZSwgZW5jb2RpbmdPck9mZnNldClcbiAgfVxuXG4gIHJldHVybiBmcm9tT2JqZWN0KHRoYXQsIHZhbHVlKVxufVxuXG4vKipcbiAqIEZ1bmN0aW9uYWxseSBlcXVpdmFsZW50IHRvIEJ1ZmZlcihhcmcsIGVuY29kaW5nKSBidXQgdGhyb3dzIGEgVHlwZUVycm9yXG4gKiBpZiB2YWx1ZSBpcyBhIG51bWJlci5cbiAqIEJ1ZmZlci5mcm9tKHN0clssIGVuY29kaW5nXSlcbiAqIEJ1ZmZlci5mcm9tKGFycmF5KVxuICogQnVmZmVyLmZyb20oYnVmZmVyKVxuICogQnVmZmVyLmZyb20oYXJyYXlCdWZmZXJbLCBieXRlT2Zmc2V0WywgbGVuZ3RoXV0pXG4gKiovXG5CdWZmZXIuZnJvbSA9IGZ1bmN0aW9uICh2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBmcm9tKG51bGwsIHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG59XG5cbmlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICBCdWZmZXIucHJvdG90eXBlLl9fcHJvdG9fXyA9IFVpbnQ4QXJyYXkucHJvdG90eXBlXG4gIEJ1ZmZlci5fX3Byb3RvX18gPSBVaW50OEFycmF5XG4gIGlmICh0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wuc3BlY2llcyAmJlxuICAgICAgQnVmZmVyW1N5bWJvbC5zcGVjaWVzXSA9PT0gQnVmZmVyKSB7XG4gICAgLy8gRml4IHN1YmFycmF5KCkgaW4gRVMyMDE2LiBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9mZXJvc3MvYnVmZmVyL3B1bGwvOTdcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQnVmZmVyLCBTeW1ib2wuc3BlY2llcywge1xuICAgICAgdmFsdWU6IG51bGwsXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KVxuICB9XG59XG5cbmZ1bmN0aW9uIGFzc2VydFNpemUgKHNpemUpIHtcbiAgaWYgKHR5cGVvZiBzaXplICE9PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wic2l6ZVwiIGFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXInKVxuICB9IGVsc2UgaWYgKHNpemUgPCAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1wic2l6ZVwiIGFyZ3VtZW50IG11c3Qgbm90IGJlIG5lZ2F0aXZlJylcbiAgfVxufVxuXG5mdW5jdGlvbiBhbGxvYyAodGhhdCwgc2l6ZSwgZmlsbCwgZW5jb2RpbmcpIHtcbiAgYXNzZXJ0U2l6ZShzaXplKVxuICBpZiAoc2l6ZSA8PSAwKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUJ1ZmZlcih0aGF0LCBzaXplKVxuICB9XG4gIGlmIChmaWxsICE9PSB1bmRlZmluZWQpIHtcbiAgICAvLyBPbmx5IHBheSBhdHRlbnRpb24gdG8gZW5jb2RpbmcgaWYgaXQncyBhIHN0cmluZy4gVGhpc1xuICAgIC8vIHByZXZlbnRzIGFjY2lkZW50YWxseSBzZW5kaW5nIGluIGEgbnVtYmVyIHRoYXQgd291bGRcbiAgICAvLyBiZSBpbnRlcnByZXR0ZWQgYXMgYSBzdGFydCBvZmZzZXQuXG4gICAgcmV0dXJuIHR5cGVvZiBlbmNvZGluZyA9PT0gJ3N0cmluZydcbiAgICAgID8gY3JlYXRlQnVmZmVyKHRoYXQsIHNpemUpLmZpbGwoZmlsbCwgZW5jb2RpbmcpXG4gICAgICA6IGNyZWF0ZUJ1ZmZlcih0aGF0LCBzaXplKS5maWxsKGZpbGwpXG4gIH1cbiAgcmV0dXJuIGNyZWF0ZUJ1ZmZlcih0aGF0LCBzaXplKVxufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgZmlsbGVkIEJ1ZmZlciBpbnN0YW5jZS5cbiAqIGFsbG9jKHNpemVbLCBmaWxsWywgZW5jb2RpbmddXSlcbiAqKi9cbkJ1ZmZlci5hbGxvYyA9IGZ1bmN0aW9uIChzaXplLCBmaWxsLCBlbmNvZGluZykge1xuICByZXR1cm4gYWxsb2MobnVsbCwgc2l6ZSwgZmlsbCwgZW5jb2RpbmcpXG59XG5cbmZ1bmN0aW9uIGFsbG9jVW5zYWZlICh0aGF0LCBzaXplKSB7XG4gIGFzc2VydFNpemUoc2l6ZSlcbiAgdGhhdCA9IGNyZWF0ZUJ1ZmZlcih0aGF0LCBzaXplIDwgMCA/IDAgOiBjaGVja2VkKHNpemUpIHwgMClcbiAgaWYgKCFCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7XG4gICAgICB0aGF0W2ldID0gMFxuICAgIH1cbiAgfVxuICByZXR1cm4gdGhhdFxufVxuXG4vKipcbiAqIEVxdWl2YWxlbnQgdG8gQnVmZmVyKG51bSksIGJ5IGRlZmF1bHQgY3JlYXRlcyBhIG5vbi16ZXJvLWZpbGxlZCBCdWZmZXIgaW5zdGFuY2UuXG4gKiAqL1xuQnVmZmVyLmFsbG9jVW5zYWZlID0gZnVuY3Rpb24gKHNpemUpIHtcbiAgcmV0dXJuIGFsbG9jVW5zYWZlKG51bGwsIHNpemUpXG59XG4vKipcbiAqIEVxdWl2YWxlbnQgdG8gU2xvd0J1ZmZlcihudW0pLCBieSBkZWZhdWx0IGNyZWF0ZXMgYSBub24temVyby1maWxsZWQgQnVmZmVyIGluc3RhbmNlLlxuICovXG5CdWZmZXIuYWxsb2NVbnNhZmVTbG93ID0gZnVuY3Rpb24gKHNpemUpIHtcbiAgcmV0dXJuIGFsbG9jVW5zYWZlKG51bGwsIHNpemUpXG59XG5cbmZ1bmN0aW9uIGZyb21TdHJpbmcgKHRoYXQsIHN0cmluZywgZW5jb2RpbmcpIHtcbiAgaWYgKHR5cGVvZiBlbmNvZGluZyAhPT0gJ3N0cmluZycgfHwgZW5jb2RpbmcgPT09ICcnKSB7XG4gICAgZW5jb2RpbmcgPSAndXRmOCdcbiAgfVxuXG4gIGlmICghQnVmZmVyLmlzRW5jb2RpbmcoZW5jb2RpbmcpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJlbmNvZGluZ1wiIG11c3QgYmUgYSB2YWxpZCBzdHJpbmcgZW5jb2RpbmcnKVxuICB9XG5cbiAgdmFyIGxlbmd0aCA9IGJ5dGVMZW5ndGgoc3RyaW5nLCBlbmNvZGluZykgfCAwXG4gIHRoYXQgPSBjcmVhdGVCdWZmZXIodGhhdCwgbGVuZ3RoKVxuXG4gIHZhciBhY3R1YWwgPSB0aGF0LndyaXRlKHN0cmluZywgZW5jb2RpbmcpXG5cbiAgaWYgKGFjdHVhbCAhPT0gbGVuZ3RoKSB7XG4gICAgLy8gV3JpdGluZyBhIGhleCBzdHJpbmcsIGZvciBleGFtcGxlLCB0aGF0IGNvbnRhaW5zIGludmFsaWQgY2hhcmFjdGVycyB3aWxsXG4gICAgLy8gY2F1c2UgZXZlcnl0aGluZyBhZnRlciB0aGUgZmlyc3QgaW52YWxpZCBjaGFyYWN0ZXIgdG8gYmUgaWdub3JlZC4gKGUuZy5cbiAgICAvLyAnYWJ4eGNkJyB3aWxsIGJlIHRyZWF0ZWQgYXMgJ2FiJylcbiAgICB0aGF0ID0gdGhhdC5zbGljZSgwLCBhY3R1YWwpXG4gIH1cblxuICByZXR1cm4gdGhhdFxufVxuXG5mdW5jdGlvbiBmcm9tQXJyYXlMaWtlICh0aGF0LCBhcnJheSkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoIDwgMCA/IDAgOiBjaGVja2VkKGFycmF5Lmxlbmd0aCkgfCAwXG4gIHRoYXQgPSBjcmVhdGVCdWZmZXIodGhhdCwgbGVuZ3RoKVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSArPSAxKSB7XG4gICAgdGhhdFtpXSA9IGFycmF5W2ldICYgMjU1XG4gIH1cbiAgcmV0dXJuIHRoYXRcbn1cblxuZnVuY3Rpb24gZnJvbUFycmF5QnVmZmVyICh0aGF0LCBhcnJheSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gIGFycmF5LmJ5dGVMZW5ndGggLy8gdGhpcyB0aHJvd3MgaWYgYGFycmF5YCBpcyBub3QgYSB2YWxpZCBBcnJheUJ1ZmZlclxuXG4gIGlmIChieXRlT2Zmc2V0IDwgMCB8fCBhcnJheS5ieXRlTGVuZ3RoIDwgYnl0ZU9mZnNldCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdcXCdvZmZzZXRcXCcgaXMgb3V0IG9mIGJvdW5kcycpXG4gIH1cblxuICBpZiAoYXJyYXkuYnl0ZUxlbmd0aCA8IGJ5dGVPZmZzZXQgKyAobGVuZ3RoIHx8IDApKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1xcJ2xlbmd0aFxcJyBpcyBvdXQgb2YgYm91bmRzJylcbiAgfVxuXG4gIGlmIChieXRlT2Zmc2V0ID09PSB1bmRlZmluZWQgJiYgbGVuZ3RoID09PSB1bmRlZmluZWQpIHtcbiAgICBhcnJheSA9IG5ldyBVaW50OEFycmF5KGFycmF5KVxuICB9IGVsc2UgaWYgKGxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgYXJyYXkgPSBuZXcgVWludDhBcnJheShhcnJheSwgYnl0ZU9mZnNldClcbiAgfSBlbHNlIHtcbiAgICBhcnJheSA9IG5ldyBVaW50OEFycmF5KGFycmF5LCBieXRlT2Zmc2V0LCBsZW5ndGgpXG4gIH1cblxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICAvLyBSZXR1cm4gYW4gYXVnbWVudGVkIGBVaW50OEFycmF5YCBpbnN0YW5jZSwgZm9yIGJlc3QgcGVyZm9ybWFuY2VcbiAgICB0aGF0ID0gYXJyYXlcbiAgICB0aGF0Ll9fcHJvdG9fXyA9IEJ1ZmZlci5wcm90b3R5cGVcbiAgfSBlbHNlIHtcbiAgICAvLyBGYWxsYmFjazogUmV0dXJuIGFuIG9iamVjdCBpbnN0YW5jZSBvZiB0aGUgQnVmZmVyIGNsYXNzXG4gICAgdGhhdCA9IGZyb21BcnJheUxpa2UodGhhdCwgYXJyYXkpXG4gIH1cbiAgcmV0dXJuIHRoYXRcbn1cblxuZnVuY3Rpb24gZnJvbU9iamVjdCAodGhhdCwgb2JqKSB7XG4gIGlmIChCdWZmZXIuaXNCdWZmZXIob2JqKSkge1xuICAgIHZhciBsZW4gPSBjaGVja2VkKG9iai5sZW5ndGgpIHwgMFxuICAgIHRoYXQgPSBjcmVhdGVCdWZmZXIodGhhdCwgbGVuKVxuXG4gICAgaWYgKHRoYXQubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gdGhhdFxuICAgIH1cblxuICAgIG9iai5jb3B5KHRoYXQsIDAsIDAsIGxlbilcbiAgICByZXR1cm4gdGhhdFxuICB9XG5cbiAgaWYgKG9iaikge1xuICAgIGlmICgodHlwZW9mIEFycmF5QnVmZmVyICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICBvYmouYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHx8ICdsZW5ndGgnIGluIG9iaikge1xuICAgICAgaWYgKHR5cGVvZiBvYmoubGVuZ3RoICE9PSAnbnVtYmVyJyB8fCBpc25hbihvYmoubGVuZ3RoKSkge1xuICAgICAgICByZXR1cm4gY3JlYXRlQnVmZmVyKHRoYXQsIDApXG4gICAgICB9XG4gICAgICByZXR1cm4gZnJvbUFycmF5TGlrZSh0aGF0LCBvYmopXG4gICAgfVxuXG4gICAgaWYgKG9iai50eXBlID09PSAnQnVmZmVyJyAmJiBpc0FycmF5KG9iai5kYXRhKSkge1xuICAgICAgcmV0dXJuIGZyb21BcnJheUxpa2UodGhhdCwgb2JqLmRhdGEpXG4gICAgfVxuICB9XG5cbiAgdGhyb3cgbmV3IFR5cGVFcnJvcignRmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksIG9yIGFycmF5LWxpa2Ugb2JqZWN0LicpXG59XG5cbmZ1bmN0aW9uIGNoZWNrZWQgKGxlbmd0aCkge1xuICAvLyBOb3RlOiBjYW5ub3QgdXNlIGBsZW5ndGggPCBrTWF4TGVuZ3RoKClgIGhlcmUgYmVjYXVzZSB0aGF0IGZhaWxzIHdoZW5cbiAgLy8gbGVuZ3RoIGlzIE5hTiAod2hpY2ggaXMgb3RoZXJ3aXNlIGNvZXJjZWQgdG8gemVyby4pXG4gIGlmIChsZW5ndGggPj0ga01heExlbmd0aCgpKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0F0dGVtcHQgdG8gYWxsb2NhdGUgQnVmZmVyIGxhcmdlciB0aGFuIG1heGltdW0gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgJ3NpemU6IDB4JyArIGtNYXhMZW5ndGgoKS50b1N0cmluZygxNikgKyAnIGJ5dGVzJylcbiAgfVxuICByZXR1cm4gbGVuZ3RoIHwgMFxufVxuXG5mdW5jdGlvbiBTbG93QnVmZmVyIChsZW5ndGgpIHtcbiAgaWYgKCtsZW5ndGggIT0gbGVuZ3RoKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZXFlcWVxXG4gICAgbGVuZ3RoID0gMFxuICB9XG4gIHJldHVybiBCdWZmZXIuYWxsb2MoK2xlbmd0aClcbn1cblxuQnVmZmVyLmlzQnVmZmVyID0gZnVuY3Rpb24gaXNCdWZmZXIgKGIpIHtcbiAgcmV0dXJuICEhKGIgIT0gbnVsbCAmJiBiLl9pc0J1ZmZlcilcbn1cblxuQnVmZmVyLmNvbXBhcmUgPSBmdW5jdGlvbiBjb21wYXJlIChhLCBiKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGEpIHx8ICFCdWZmZXIuaXNCdWZmZXIoYikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudHMgbXVzdCBiZSBCdWZmZXJzJylcbiAgfVxuXG4gIGlmIChhID09PSBiKSByZXR1cm4gMFxuXG4gIHZhciB4ID0gYS5sZW5ndGhcbiAgdmFyIHkgPSBiLmxlbmd0aFxuXG4gIGZvciAodmFyIGkgPSAwLCBsZW4gPSBNYXRoLm1pbih4LCB5KTsgaSA8IGxlbjsgKytpKSB7XG4gICAgaWYgKGFbaV0gIT09IGJbaV0pIHtcbiAgICAgIHggPSBhW2ldXG4gICAgICB5ID0gYltpXVxuICAgICAgYnJlYWtcbiAgICB9XG4gIH1cblxuICBpZiAoeCA8IHkpIHJldHVybiAtMVxuICBpZiAoeSA8IHgpIHJldHVybiAxXG4gIHJldHVybiAwXG59XG5cbkJ1ZmZlci5pc0VuY29kaW5nID0gZnVuY3Rpb24gaXNFbmNvZGluZyAoZW5jb2RpbmcpIHtcbiAgc3dpdGNoIChTdHJpbmcoZW5jb2RpbmcpLnRvTG93ZXJDYXNlKCkpIHtcbiAgICBjYXNlICdoZXgnOlxuICAgIGNhc2UgJ3V0ZjgnOlxuICAgIGNhc2UgJ3V0Zi04JzpcbiAgICBjYXNlICdhc2NpaSc6XG4gICAgY2FzZSAnbGF0aW4xJzpcbiAgICBjYXNlICdiaW5hcnknOlxuICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgY2FzZSAndWNzMic6XG4gICAgY2FzZSAndWNzLTInOlxuICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgIHJldHVybiB0cnVlXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbkJ1ZmZlci5jb25jYXQgPSBmdW5jdGlvbiBjb25jYXQgKGxpc3QsIGxlbmd0aCkge1xuICBpZiAoIWlzQXJyYXkobGlzdCkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcImxpc3RcIiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKVxuICB9XG5cbiAgaWYgKGxpc3QubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIEJ1ZmZlci5hbGxvYygwKVxuICB9XG5cbiAgdmFyIGlcbiAgaWYgKGxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgbGVuZ3RoID0gMFxuICAgIGZvciAoaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgKytpKSB7XG4gICAgICBsZW5ndGggKz0gbGlzdFtpXS5sZW5ndGhcbiAgICB9XG4gIH1cblxuICB2YXIgYnVmZmVyID0gQnVmZmVyLmFsbG9jVW5zYWZlKGxlbmd0aClcbiAgdmFyIHBvcyA9IDBcbiAgZm9yIChpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyArK2kpIHtcbiAgICB2YXIgYnVmID0gbGlzdFtpXVxuICAgIGlmICghQnVmZmVyLmlzQnVmZmVyKGJ1ZikpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wibGlzdFwiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpXG4gICAgfVxuICAgIGJ1Zi5jb3B5KGJ1ZmZlciwgcG9zKVxuICAgIHBvcyArPSBidWYubGVuZ3RoXG4gIH1cbiAgcmV0dXJuIGJ1ZmZlclxufVxuXG5mdW5jdGlvbiBieXRlTGVuZ3RoIChzdHJpbmcsIGVuY29kaW5nKSB7XG4gIGlmIChCdWZmZXIuaXNCdWZmZXIoc3RyaW5nKSkge1xuICAgIHJldHVybiBzdHJpbmcubGVuZ3RoXG4gIH1cbiAgaWYgKHR5cGVvZiBBcnJheUJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIEFycmF5QnVmZmVyLmlzVmlldyA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgICAgKEFycmF5QnVmZmVyLmlzVmlldyhzdHJpbmcpIHx8IHN0cmluZyBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSkge1xuICAgIHJldHVybiBzdHJpbmcuYnl0ZUxlbmd0aFxuICB9XG4gIGlmICh0eXBlb2Ygc3RyaW5nICE9PSAnc3RyaW5nJykge1xuICAgIHN0cmluZyA9ICcnICsgc3RyaW5nXG4gIH1cblxuICB2YXIgbGVuID0gc3RyaW5nLmxlbmd0aFxuICBpZiAobGVuID09PSAwKSByZXR1cm4gMFxuXG4gIC8vIFVzZSBhIGZvciBsb29wIHRvIGF2b2lkIHJlY3Vyc2lvblxuICB2YXIgbG93ZXJlZENhc2UgPSBmYWxzZVxuICBmb3IgKDs7KSB7XG4gICAgc3dpdGNoIChlbmNvZGluZykge1xuICAgICAgY2FzZSAnYXNjaWknOlxuICAgICAgY2FzZSAnbGF0aW4xJzpcbiAgICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgICAgIHJldHVybiBsZW5cbiAgICAgIGNhc2UgJ3V0ZjgnOlxuICAgICAgY2FzZSAndXRmLTgnOlxuICAgICAgY2FzZSB1bmRlZmluZWQ6XG4gICAgICAgIHJldHVybiB1dGY4VG9CeXRlcyhzdHJpbmcpLmxlbmd0aFxuICAgICAgY2FzZSAndWNzMic6XG4gICAgICBjYXNlICd1Y3MtMic6XG4gICAgICBjYXNlICd1dGYxNmxlJzpcbiAgICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgICAgcmV0dXJuIGxlbiAqIDJcbiAgICAgIGNhc2UgJ2hleCc6XG4gICAgICAgIHJldHVybiBsZW4gPj4+IDFcbiAgICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgICAgIHJldHVybiBiYXNlNjRUb0J5dGVzKHN0cmluZykubGVuZ3RoXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAobG93ZXJlZENhc2UpIHJldHVybiB1dGY4VG9CeXRlcyhzdHJpbmcpLmxlbmd0aCAvLyBhc3N1bWUgdXRmOFxuICAgICAgICBlbmNvZGluZyA9ICgnJyArIGVuY29kaW5nKS50b0xvd2VyQ2FzZSgpXG4gICAgICAgIGxvd2VyZWRDYXNlID0gdHJ1ZVxuICAgIH1cbiAgfVxufVxuQnVmZmVyLmJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoXG5cbmZ1bmN0aW9uIHNsb3dUb1N0cmluZyAoZW5jb2RpbmcsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIGxvd2VyZWRDYXNlID0gZmFsc2VcblxuICAvLyBObyBuZWVkIHRvIHZlcmlmeSB0aGF0IFwidGhpcy5sZW5ndGggPD0gTUFYX1VJTlQzMlwiIHNpbmNlIGl0J3MgYSByZWFkLW9ubHlcbiAgLy8gcHJvcGVydHkgb2YgYSB0eXBlZCBhcnJheS5cblxuICAvLyBUaGlzIGJlaGF2ZXMgbmVpdGhlciBsaWtlIFN0cmluZyBub3IgVWludDhBcnJheSBpbiB0aGF0IHdlIHNldCBzdGFydC9lbmRcbiAgLy8gdG8gdGhlaXIgdXBwZXIvbG93ZXIgYm91bmRzIGlmIHRoZSB2YWx1ZSBwYXNzZWQgaXMgb3V0IG9mIHJhbmdlLlxuICAvLyB1bmRlZmluZWQgaXMgaGFuZGxlZCBzcGVjaWFsbHkgYXMgcGVyIEVDTUEtMjYyIDZ0aCBFZGl0aW9uLFxuICAvLyBTZWN0aW9uIDEzLjMuMy43IFJ1bnRpbWUgU2VtYW50aWNzOiBLZXllZEJpbmRpbmdJbml0aWFsaXphdGlvbi5cbiAgaWYgKHN0YXJ0ID09PSB1bmRlZmluZWQgfHwgc3RhcnQgPCAwKSB7XG4gICAgc3RhcnQgPSAwXG4gIH1cbiAgLy8gUmV0dXJuIGVhcmx5IGlmIHN0YXJ0ID4gdGhpcy5sZW5ndGguIERvbmUgaGVyZSB0byBwcmV2ZW50IHBvdGVudGlhbCB1aW50MzJcbiAgLy8gY29lcmNpb24gZmFpbCBiZWxvdy5cbiAgaWYgKHN0YXJ0ID4gdGhpcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gJydcbiAgfVxuXG4gIGlmIChlbmQgPT09IHVuZGVmaW5lZCB8fCBlbmQgPiB0aGlzLmxlbmd0aCkge1xuICAgIGVuZCA9IHRoaXMubGVuZ3RoXG4gIH1cblxuICBpZiAoZW5kIDw9IDApIHtcbiAgICByZXR1cm4gJydcbiAgfVxuXG4gIC8vIEZvcmNlIGNvZXJzaW9uIHRvIHVpbnQzMi4gVGhpcyB3aWxsIGFsc28gY29lcmNlIGZhbHNleS9OYU4gdmFsdWVzIHRvIDAuXG4gIGVuZCA+Pj49IDBcbiAgc3RhcnQgPj4+PSAwXG5cbiAgaWYgKGVuZCA8PSBzdGFydCkge1xuICAgIHJldHVybiAnJ1xuICB9XG5cbiAgaWYgKCFlbmNvZGluZykgZW5jb2RpbmcgPSAndXRmOCdcblxuICB3aGlsZSAodHJ1ZSkge1xuICAgIHN3aXRjaCAoZW5jb2RpbmcpIHtcbiAgICAgIGNhc2UgJ2hleCc6XG4gICAgICAgIHJldHVybiBoZXhTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBjYXNlICd1dGY4JzpcbiAgICAgIGNhc2UgJ3V0Zi04JzpcbiAgICAgICAgcmV0dXJuIHV0ZjhTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBjYXNlICdhc2NpaSc6XG4gICAgICAgIHJldHVybiBhc2NpaVNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ2xhdGluMSc6XG4gICAgICBjYXNlICdiaW5hcnknOlxuICAgICAgICByZXR1cm4gbGF0aW4xU2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAnYmFzZTY0JzpcbiAgICAgICAgcmV0dXJuIGJhc2U2NFNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ3VjczInOlxuICAgICAgY2FzZSAndWNzLTInOlxuICAgICAgY2FzZSAndXRmMTZsZSc6XG4gICAgICBjYXNlICd1dGYtMTZsZSc6XG4gICAgICAgIHJldHVybiB1dGYxNmxlU2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKGxvd2VyZWRDYXNlKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmtub3duIGVuY29kaW5nOiAnICsgZW5jb2RpbmcpXG4gICAgICAgIGVuY29kaW5nID0gKGVuY29kaW5nICsgJycpLnRvTG93ZXJDYXNlKClcbiAgICAgICAgbG93ZXJlZENhc2UgPSB0cnVlXG4gICAgfVxuICB9XG59XG5cbi8vIFRoZSBwcm9wZXJ0eSBpcyB1c2VkIGJ5IGBCdWZmZXIuaXNCdWZmZXJgIGFuZCBgaXMtYnVmZmVyYCAoaW4gU2FmYXJpIDUtNykgdG8gZGV0ZWN0XG4vLyBCdWZmZXIgaW5zdGFuY2VzLlxuQnVmZmVyLnByb3RvdHlwZS5faXNCdWZmZXIgPSB0cnVlXG5cbmZ1bmN0aW9uIHN3YXAgKGIsIG4sIG0pIHtcbiAgdmFyIGkgPSBiW25dXG4gIGJbbl0gPSBiW21dXG4gIGJbbV0gPSBpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuc3dhcDE2ID0gZnVuY3Rpb24gc3dhcDE2ICgpIHtcbiAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoXG4gIGlmIChsZW4gJSAyICE9PSAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0J1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAxNi1iaXRzJylcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSArPSAyKSB7XG4gICAgc3dhcCh0aGlzLCBpLCBpICsgMSlcbiAgfVxuICByZXR1cm4gdGhpc1xufVxuXG5CdWZmZXIucHJvdG90eXBlLnN3YXAzMiA9IGZ1bmN0aW9uIHN3YXAzMiAoKSB7XG4gIHZhciBsZW4gPSB0aGlzLmxlbmd0aFxuICBpZiAobGVuICUgNCAhPT0gMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMzItYml0cycpXG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkgKz0gNCkge1xuICAgIHN3YXAodGhpcywgaSwgaSArIDMpXG4gICAgc3dhcCh0aGlzLCBpICsgMSwgaSArIDIpXG4gIH1cbiAgcmV0dXJuIHRoaXNcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5zd2FwNjQgPSBmdW5jdGlvbiBzd2FwNjQgKCkge1xuICB2YXIgbGVuID0gdGhpcy5sZW5ndGhcbiAgaWYgKGxlbiAlIDggIT09IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDY0LWJpdHMnKVxuICB9XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpICs9IDgpIHtcbiAgICBzd2FwKHRoaXMsIGksIGkgKyA3KVxuICAgIHN3YXAodGhpcywgaSArIDEsIGkgKyA2KVxuICAgIHN3YXAodGhpcywgaSArIDIsIGkgKyA1KVxuICAgIHN3YXAodGhpcywgaSArIDMsIGkgKyA0KVxuICB9XG4gIHJldHVybiB0aGlzXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZyAoKSB7XG4gIHZhciBsZW5ndGggPSB0aGlzLmxlbmd0aCB8IDBcbiAgaWYgKGxlbmd0aCA9PT0gMCkgcmV0dXJuICcnXG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSByZXR1cm4gdXRmOFNsaWNlKHRoaXMsIDAsIGxlbmd0aClcbiAgcmV0dXJuIHNsb3dUb1N0cmluZy5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24gZXF1YWxzIChiKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyJylcbiAgaWYgKHRoaXMgPT09IGIpIHJldHVybiB0cnVlXG4gIHJldHVybiBCdWZmZXIuY29tcGFyZSh0aGlzLCBiKSA9PT0gMFxufVxuXG5CdWZmZXIucHJvdG90eXBlLmluc3BlY3QgPSBmdW5jdGlvbiBpbnNwZWN0ICgpIHtcbiAgdmFyIHN0ciA9ICcnXG4gIHZhciBtYXggPSBleHBvcnRzLklOU1BFQ1RfTUFYX0JZVEVTXG4gIGlmICh0aGlzLmxlbmd0aCA+IDApIHtcbiAgICBzdHIgPSB0aGlzLnRvU3RyaW5nKCdoZXgnLCAwLCBtYXgpLm1hdGNoKC8uezJ9L2cpLmpvaW4oJyAnKVxuICAgIGlmICh0aGlzLmxlbmd0aCA+IG1heCkgc3RyICs9ICcgLi4uICdcbiAgfVxuICByZXR1cm4gJzxCdWZmZXIgJyArIHN0ciArICc+J1xufVxuXG5CdWZmZXIucHJvdG90eXBlLmNvbXBhcmUgPSBmdW5jdGlvbiBjb21wYXJlICh0YXJnZXQsIHN0YXJ0LCBlbmQsIHRoaXNTdGFydCwgdGhpc0VuZCkge1xuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcih0YXJnZXQpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlcicpXG4gIH1cblxuICBpZiAoc3RhcnQgPT09IHVuZGVmaW5lZCkge1xuICAgIHN0YXJ0ID0gMFxuICB9XG4gIGlmIChlbmQgPT09IHVuZGVmaW5lZCkge1xuICAgIGVuZCA9IHRhcmdldCA/IHRhcmdldC5sZW5ndGggOiAwXG4gIH1cbiAgaWYgKHRoaXNTdGFydCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhpc1N0YXJ0ID0gMFxuICB9XG4gIGlmICh0aGlzRW5kID09PSB1bmRlZmluZWQpIHtcbiAgICB0aGlzRW5kID0gdGhpcy5sZW5ndGhcbiAgfVxuXG4gIGlmIChzdGFydCA8IDAgfHwgZW5kID4gdGFyZ2V0Lmxlbmd0aCB8fCB0aGlzU3RhcnQgPCAwIHx8IHRoaXNFbmQgPiB0aGlzLmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdvdXQgb2YgcmFuZ2UgaW5kZXgnKVxuICB9XG5cbiAgaWYgKHRoaXNTdGFydCA+PSB0aGlzRW5kICYmIHN0YXJ0ID49IGVuZCkge1xuICAgIHJldHVybiAwXG4gIH1cbiAgaWYgKHRoaXNTdGFydCA+PSB0aGlzRW5kKSB7XG4gICAgcmV0dXJuIC0xXG4gIH1cbiAgaWYgKHN0YXJ0ID49IGVuZCkge1xuICAgIHJldHVybiAxXG4gIH1cblxuICBzdGFydCA+Pj49IDBcbiAgZW5kID4+Pj0gMFxuICB0aGlzU3RhcnQgPj4+PSAwXG4gIHRoaXNFbmQgPj4+PSAwXG5cbiAgaWYgKHRoaXMgPT09IHRhcmdldCkgcmV0dXJuIDBcblxuICB2YXIgeCA9IHRoaXNFbmQgLSB0aGlzU3RhcnRcbiAgdmFyIHkgPSBlbmQgLSBzdGFydFxuICB2YXIgbGVuID0gTWF0aC5taW4oeCwgeSlcblxuICB2YXIgdGhpc0NvcHkgPSB0aGlzLnNsaWNlKHRoaXNTdGFydCwgdGhpc0VuZClcbiAgdmFyIHRhcmdldENvcHkgPSB0YXJnZXQuc2xpY2Uoc3RhcnQsIGVuZClcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7XG4gICAgaWYgKHRoaXNDb3B5W2ldICE9PSB0YXJnZXRDb3B5W2ldKSB7XG4gICAgICB4ID0gdGhpc0NvcHlbaV1cbiAgICAgIHkgPSB0YXJnZXRDb3B5W2ldXG4gICAgICBicmVha1xuICAgIH1cbiAgfVxuXG4gIGlmICh4IDwgeSkgcmV0dXJuIC0xXG4gIGlmICh5IDwgeCkgcmV0dXJuIDFcbiAgcmV0dXJuIDBcbn1cblxuLy8gRmluZHMgZWl0aGVyIHRoZSBmaXJzdCBpbmRleCBvZiBgdmFsYCBpbiBgYnVmZmVyYCBhdCBvZmZzZXQgPj0gYGJ5dGVPZmZzZXRgLFxuLy8gT1IgdGhlIGxhc3QgaW5kZXggb2YgYHZhbGAgaW4gYGJ1ZmZlcmAgYXQgb2Zmc2V0IDw9IGBieXRlT2Zmc2V0YC5cbi8vXG4vLyBBcmd1bWVudHM6XG4vLyAtIGJ1ZmZlciAtIGEgQnVmZmVyIHRvIHNlYXJjaFxuLy8gLSB2YWwgLSBhIHN0cmluZywgQnVmZmVyLCBvciBudW1iZXJcbi8vIC0gYnl0ZU9mZnNldCAtIGFuIGluZGV4IGludG8gYGJ1ZmZlcmA7IHdpbGwgYmUgY2xhbXBlZCB0byBhbiBpbnQzMlxuLy8gLSBlbmNvZGluZyAtIGFuIG9wdGlvbmFsIGVuY29kaW5nLCByZWxldmFudCBpcyB2YWwgaXMgYSBzdHJpbmdcbi8vIC0gZGlyIC0gdHJ1ZSBmb3IgaW5kZXhPZiwgZmFsc2UgZm9yIGxhc3RJbmRleE9mXG5mdW5jdGlvbiBiaWRpcmVjdGlvbmFsSW5kZXhPZiAoYnVmZmVyLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBkaXIpIHtcbiAgLy8gRW1wdHkgYnVmZmVyIG1lYW5zIG5vIG1hdGNoXG4gIGlmIChidWZmZXIubGVuZ3RoID09PSAwKSByZXR1cm4gLTFcblxuICAvLyBOb3JtYWxpemUgYnl0ZU9mZnNldFxuICBpZiAodHlwZW9mIGJ5dGVPZmZzZXQgPT09ICdzdHJpbmcnKSB7XG4gICAgZW5jb2RpbmcgPSBieXRlT2Zmc2V0XG4gICAgYnl0ZU9mZnNldCA9IDBcbiAgfSBlbHNlIGlmIChieXRlT2Zmc2V0ID4gMHg3ZmZmZmZmZikge1xuICAgIGJ5dGVPZmZzZXQgPSAweDdmZmZmZmZmXG4gIH0gZWxzZSBpZiAoYnl0ZU9mZnNldCA8IC0weDgwMDAwMDAwKSB7XG4gICAgYnl0ZU9mZnNldCA9IC0weDgwMDAwMDAwXG4gIH1cbiAgYnl0ZU9mZnNldCA9ICtieXRlT2Zmc2V0ICAvLyBDb2VyY2UgdG8gTnVtYmVyLlxuICBpZiAoaXNOYU4oYnl0ZU9mZnNldCkpIHtcbiAgICAvLyBieXRlT2Zmc2V0OiBpdCBpdCdzIHVuZGVmaW5lZCwgbnVsbCwgTmFOLCBcImZvb1wiLCBldGMsIHNlYXJjaCB3aG9sZSBidWZmZXJcbiAgICBieXRlT2Zmc2V0ID0gZGlyID8gMCA6IChidWZmZXIubGVuZ3RoIC0gMSlcbiAgfVxuXG4gIC8vIE5vcm1hbGl6ZSBieXRlT2Zmc2V0OiBuZWdhdGl2ZSBvZmZzZXRzIHN0YXJ0IGZyb20gdGhlIGVuZCBvZiB0aGUgYnVmZmVyXG4gIGlmIChieXRlT2Zmc2V0IDwgMCkgYnl0ZU9mZnNldCA9IGJ1ZmZlci5sZW5ndGggKyBieXRlT2Zmc2V0XG4gIGlmIChieXRlT2Zmc2V0ID49IGJ1ZmZlci5sZW5ndGgpIHtcbiAgICBpZiAoZGlyKSByZXR1cm4gLTFcbiAgICBlbHNlIGJ5dGVPZmZzZXQgPSBidWZmZXIubGVuZ3RoIC0gMVxuICB9IGVsc2UgaWYgKGJ5dGVPZmZzZXQgPCAwKSB7XG4gICAgaWYgKGRpcikgYnl0ZU9mZnNldCA9IDBcbiAgICBlbHNlIHJldHVybiAtMVxuICB9XG5cbiAgLy8gTm9ybWFsaXplIHZhbFxuICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpIHtcbiAgICB2YWwgPSBCdWZmZXIuZnJvbSh2YWwsIGVuY29kaW5nKVxuICB9XG5cbiAgLy8gRmluYWxseSwgc2VhcmNoIGVpdGhlciBpbmRleE9mIChpZiBkaXIgaXMgdHJ1ZSkgb3IgbGFzdEluZGV4T2ZcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcih2YWwpKSB7XG4gICAgLy8gU3BlY2lhbCBjYXNlOiBsb29raW5nIGZvciBlbXB0eSBzdHJpbmcvYnVmZmVyIGFsd2F5cyBmYWlsc1xuICAgIGlmICh2YWwubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gLTFcbiAgICB9XG4gICAgcmV0dXJuIGFycmF5SW5kZXhPZihidWZmZXIsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGRpcilcbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsID09PSAnbnVtYmVyJykge1xuICAgIHZhbCA9IHZhbCAmIDB4RkYgLy8gU2VhcmNoIGZvciBhIGJ5dGUgdmFsdWUgWzAtMjU1XVxuICAgIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCAmJlxuICAgICAgICB0eXBlb2YgVWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgaWYgKGRpcikge1xuICAgICAgICByZXR1cm4gVWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKGJ1ZmZlciwgdmFsLCBieXRlT2Zmc2V0KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFVpbnQ4QXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mLmNhbGwoYnVmZmVyLCB2YWwsIGJ5dGVPZmZzZXQpXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhcnJheUluZGV4T2YoYnVmZmVyLCBbIHZhbCBdLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZGlyKVxuICB9XG5cbiAgdGhyb3cgbmV3IFR5cGVFcnJvcigndmFsIG11c3QgYmUgc3RyaW5nLCBudW1iZXIgb3IgQnVmZmVyJylcbn1cblxuZnVuY3Rpb24gYXJyYXlJbmRleE9mIChhcnIsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGRpcikge1xuICB2YXIgaW5kZXhTaXplID0gMVxuICB2YXIgYXJyTGVuZ3RoID0gYXJyLmxlbmd0aFxuICB2YXIgdmFsTGVuZ3RoID0gdmFsLmxlbmd0aFxuXG4gIGlmIChlbmNvZGluZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgZW5jb2RpbmcgPSBTdHJpbmcoZW5jb2RpbmcpLnRvTG93ZXJDYXNlKClcbiAgICBpZiAoZW5jb2RpbmcgPT09ICd1Y3MyJyB8fCBlbmNvZGluZyA9PT0gJ3Vjcy0yJyB8fFxuICAgICAgICBlbmNvZGluZyA9PT0gJ3V0ZjE2bGUnIHx8IGVuY29kaW5nID09PSAndXRmLTE2bGUnKSB7XG4gICAgICBpZiAoYXJyLmxlbmd0aCA8IDIgfHwgdmFsLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgcmV0dXJuIC0xXG4gICAgICB9XG4gICAgICBpbmRleFNpemUgPSAyXG4gICAgICBhcnJMZW5ndGggLz0gMlxuICAgICAgdmFsTGVuZ3RoIC89IDJcbiAgICAgIGJ5dGVPZmZzZXQgLz0gMlxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHJlYWQgKGJ1ZiwgaSkge1xuICAgIGlmIChpbmRleFNpemUgPT09IDEpIHtcbiAgICAgIHJldHVybiBidWZbaV1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGJ1Zi5yZWFkVUludDE2QkUoaSAqIGluZGV4U2l6ZSlcbiAgICB9XG4gIH1cblxuICB2YXIgaVxuICBpZiAoZGlyKSB7XG4gICAgdmFyIGZvdW5kSW5kZXggPSAtMVxuICAgIGZvciAoaSA9IGJ5dGVPZmZzZXQ7IGkgPCBhcnJMZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHJlYWQoYXJyLCBpKSA9PT0gcmVhZCh2YWwsIGZvdW5kSW5kZXggPT09IC0xID8gMCA6IGkgLSBmb3VuZEluZGV4KSkge1xuICAgICAgICBpZiAoZm91bmRJbmRleCA9PT0gLTEpIGZvdW5kSW5kZXggPSBpXG4gICAgICAgIGlmIChpIC0gZm91bmRJbmRleCArIDEgPT09IHZhbExlbmd0aCkgcmV0dXJuIGZvdW5kSW5kZXggKiBpbmRleFNpemVcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChmb3VuZEluZGV4ICE9PSAtMSkgaSAtPSBpIC0gZm91bmRJbmRleFxuICAgICAgICBmb3VuZEluZGV4ID0gLTFcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKGJ5dGVPZmZzZXQgKyB2YWxMZW5ndGggPiBhcnJMZW5ndGgpIGJ5dGVPZmZzZXQgPSBhcnJMZW5ndGggLSB2YWxMZW5ndGhcbiAgICBmb3IgKGkgPSBieXRlT2Zmc2V0OyBpID49IDA7IGktLSkge1xuICAgICAgdmFyIGZvdW5kID0gdHJ1ZVxuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB2YWxMZW5ndGg7IGorKykge1xuICAgICAgICBpZiAocmVhZChhcnIsIGkgKyBqKSAhPT0gcmVhZCh2YWwsIGopKSB7XG4gICAgICAgICAgZm91bmQgPSBmYWxzZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChmb3VuZCkgcmV0dXJuIGlcbiAgICB9XG4gIH1cblxuICByZXR1cm4gLTFcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5pbmNsdWRlcyA9IGZ1bmN0aW9uIGluY2x1ZGVzICh2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nKSB7XG4gIHJldHVybiB0aGlzLmluZGV4T2YodmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZykgIT09IC0xXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuaW5kZXhPZiA9IGZ1bmN0aW9uIGluZGV4T2YgKHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcpIHtcbiAgcmV0dXJuIGJpZGlyZWN0aW9uYWxJbmRleE9mKHRoaXMsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIHRydWUpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUubGFzdEluZGV4T2YgPSBmdW5jdGlvbiBsYXN0SW5kZXhPZiAodmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZykge1xuICByZXR1cm4gYmlkaXJlY3Rpb25hbEluZGV4T2YodGhpcywgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZmFsc2UpXG59XG5cbmZ1bmN0aW9uIGhleFdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgb2Zmc2V0ID0gTnVtYmVyKG9mZnNldCkgfHwgMFxuICB2YXIgcmVtYWluaW5nID0gYnVmLmxlbmd0aCAtIG9mZnNldFxuICBpZiAoIWxlbmd0aCkge1xuICAgIGxlbmd0aCA9IHJlbWFpbmluZ1xuICB9IGVsc2Uge1xuICAgIGxlbmd0aCA9IE51bWJlcihsZW5ndGgpXG4gICAgaWYgKGxlbmd0aCA+IHJlbWFpbmluZykge1xuICAgICAgbGVuZ3RoID0gcmVtYWluaW5nXG4gICAgfVxuICB9XG5cbiAgLy8gbXVzdCBiZSBhbiBldmVuIG51bWJlciBvZiBkaWdpdHNcbiAgdmFyIHN0ckxlbiA9IHN0cmluZy5sZW5ndGhcbiAgaWYgKHN0ckxlbiAlIDIgIT09IDApIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgaGV4IHN0cmluZycpXG5cbiAgaWYgKGxlbmd0aCA+IHN0ckxlbiAvIDIpIHtcbiAgICBsZW5ndGggPSBzdHJMZW4gLyAyXG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgIHZhciBwYXJzZWQgPSBwYXJzZUludChzdHJpbmcuc3Vic3RyKGkgKiAyLCAyKSwgMTYpXG4gICAgaWYgKGlzTmFOKHBhcnNlZCkpIHJldHVybiBpXG4gICAgYnVmW29mZnNldCArIGldID0gcGFyc2VkXG4gIH1cbiAgcmV0dXJuIGlcbn1cblxuZnVuY3Rpb24gdXRmOFdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGJsaXRCdWZmZXIodXRmOFRvQnl0ZXMoc3RyaW5nLCBidWYubGVuZ3RoIC0gb2Zmc2V0KSwgYnVmLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuZnVuY3Rpb24gYXNjaWlXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBibGl0QnVmZmVyKGFzY2lpVG9CeXRlcyhzdHJpbmcpLCBidWYsIG9mZnNldCwgbGVuZ3RoKVxufVxuXG5mdW5jdGlvbiBsYXRpbjFXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBhc2NpaVdyaXRlKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuZnVuY3Rpb24gYmFzZTY0V3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICByZXR1cm4gYmxpdEJ1ZmZlcihiYXNlNjRUb0J5dGVzKHN0cmluZyksIGJ1Ziwgb2Zmc2V0LCBsZW5ndGgpXG59XG5cbmZ1bmN0aW9uIHVjczJXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBibGl0QnVmZmVyKHV0ZjE2bGVUb0J5dGVzKHN0cmluZywgYnVmLmxlbmd0aCAtIG9mZnNldCksIGJ1Ziwgb2Zmc2V0LCBsZW5ndGgpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbiB3cml0ZSAoc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCwgZW5jb2RpbmcpIHtcbiAgLy8gQnVmZmVyI3dyaXRlKHN0cmluZylcbiAgaWYgKG9mZnNldCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZW5jb2RpbmcgPSAndXRmOCdcbiAgICBsZW5ndGggPSB0aGlzLmxlbmd0aFxuICAgIG9mZnNldCA9IDBcbiAgLy8gQnVmZmVyI3dyaXRlKHN0cmluZywgZW5jb2RpbmcpXG4gIH0gZWxzZSBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQgJiYgdHlwZW9mIG9mZnNldCA9PT0gJ3N0cmluZycpIHtcbiAgICBlbmNvZGluZyA9IG9mZnNldFxuICAgIGxlbmd0aCA9IHRoaXMubGVuZ3RoXG4gICAgb2Zmc2V0ID0gMFxuICAvLyBCdWZmZXIjd3JpdGUoc3RyaW5nLCBvZmZzZXRbLCBsZW5ndGhdWywgZW5jb2RpbmddKVxuICB9IGVsc2UgaWYgKGlzRmluaXRlKG9mZnNldCkpIHtcbiAgICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gICAgaWYgKGlzRmluaXRlKGxlbmd0aCkpIHtcbiAgICAgIGxlbmd0aCA9IGxlbmd0aCB8IDBcbiAgICAgIGlmIChlbmNvZGluZyA9PT0gdW5kZWZpbmVkKSBlbmNvZGluZyA9ICd1dGY4J1xuICAgIH0gZWxzZSB7XG4gICAgICBlbmNvZGluZyA9IGxlbmd0aFxuICAgICAgbGVuZ3RoID0gdW5kZWZpbmVkXG4gICAgfVxuICAvLyBsZWdhY3kgd3JpdGUoc3RyaW5nLCBlbmNvZGluZywgb2Zmc2V0LCBsZW5ndGgpIC0gcmVtb3ZlIGluIHYwLjEzXG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgJ0J1ZmZlci53cml0ZShzdHJpbmcsIGVuY29kaW5nLCBvZmZzZXRbLCBsZW5ndGhdKSBpcyBubyBsb25nZXIgc3VwcG9ydGVkJ1xuICAgIClcbiAgfVxuXG4gIHZhciByZW1haW5pbmcgPSB0aGlzLmxlbmd0aCAtIG9mZnNldFxuICBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQgfHwgbGVuZ3RoID4gcmVtYWluaW5nKSBsZW5ndGggPSByZW1haW5pbmdcblxuICBpZiAoKHN0cmluZy5sZW5ndGggPiAwICYmIChsZW5ndGggPCAwIHx8IG9mZnNldCA8IDApKSB8fCBvZmZzZXQgPiB0aGlzLmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdBdHRlbXB0IHRvIHdyaXRlIG91dHNpZGUgYnVmZmVyIGJvdW5kcycpXG4gIH1cblxuICBpZiAoIWVuY29kaW5nKSBlbmNvZGluZyA9ICd1dGY4J1xuXG4gIHZhciBsb3dlcmVkQ2FzZSA9IGZhbHNlXG4gIGZvciAoOzspIHtcbiAgICBzd2l0Y2ggKGVuY29kaW5nKSB7XG4gICAgICBjYXNlICdoZXgnOlxuICAgICAgICByZXR1cm4gaGV4V3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgY2FzZSAndXRmOCc6XG4gICAgICBjYXNlICd1dGYtOCc6XG4gICAgICAgIHJldHVybiB1dGY4V3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgY2FzZSAnYXNjaWknOlxuICAgICAgICByZXR1cm4gYXNjaWlXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBjYXNlICdsYXRpbjEnOlxuICAgICAgY2FzZSAnYmluYXJ5JzpcbiAgICAgICAgcmV0dXJuIGxhdGluMVdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgICAgIC8vIFdhcm5pbmc6IG1heExlbmd0aCBub3QgdGFrZW4gaW50byBhY2NvdW50IGluIGJhc2U2NFdyaXRlXG4gICAgICAgIHJldHVybiBiYXNlNjRXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBjYXNlICd1Y3MyJzpcbiAgICAgIGNhc2UgJ3Vjcy0yJzpcbiAgICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgICAgY2FzZSAndXRmLTE2bGUnOlxuICAgICAgICByZXR1cm4gdWNzMldyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChsb3dlcmVkQ2FzZSkgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5rbm93biBlbmNvZGluZzogJyArIGVuY29kaW5nKVxuICAgICAgICBlbmNvZGluZyA9ICgnJyArIGVuY29kaW5nKS50b0xvd2VyQ2FzZSgpXG4gICAgICAgIGxvd2VyZWRDYXNlID0gdHJ1ZVxuICAgIH1cbiAgfVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uIHRvSlNPTiAoKSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogJ0J1ZmZlcicsXG4gICAgZGF0YTogQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5fYXJyIHx8IHRoaXMsIDApXG4gIH1cbn1cblxuZnVuY3Rpb24gYmFzZTY0U2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICBpZiAoc3RhcnQgPT09IDAgJiYgZW5kID09PSBidWYubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGJhc2U2NC5mcm9tQnl0ZUFycmF5KGJ1ZilcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gYmFzZTY0LmZyb21CeXRlQXJyYXkoYnVmLnNsaWNlKHN0YXJ0LCBlbmQpKVxuICB9XG59XG5cbmZ1bmN0aW9uIHV0ZjhTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIGVuZCA9IE1hdGgubWluKGJ1Zi5sZW5ndGgsIGVuZClcbiAgdmFyIHJlcyA9IFtdXG5cbiAgdmFyIGkgPSBzdGFydFxuICB3aGlsZSAoaSA8IGVuZCkge1xuICAgIHZhciBmaXJzdEJ5dGUgPSBidWZbaV1cbiAgICB2YXIgY29kZVBvaW50ID0gbnVsbFxuICAgIHZhciBieXRlc1BlclNlcXVlbmNlID0gKGZpcnN0Qnl0ZSA+IDB4RUYpID8gNFxuICAgICAgOiAoZmlyc3RCeXRlID4gMHhERikgPyAzXG4gICAgICA6IChmaXJzdEJ5dGUgPiAweEJGKSA/IDJcbiAgICAgIDogMVxuXG4gICAgaWYgKGkgKyBieXRlc1BlclNlcXVlbmNlIDw9IGVuZCkge1xuICAgICAgdmFyIHNlY29uZEJ5dGUsIHRoaXJkQnl0ZSwgZm91cnRoQnl0ZSwgdGVtcENvZGVQb2ludFxuXG4gICAgICBzd2l0Y2ggKGJ5dGVzUGVyU2VxdWVuY2UpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIGlmIChmaXJzdEJ5dGUgPCAweDgwKSB7XG4gICAgICAgICAgICBjb2RlUG9pbnQgPSBmaXJzdEJ5dGVcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIHNlY29uZEJ5dGUgPSBidWZbaSArIDFdXG4gICAgICAgICAgaWYgKChzZWNvbmRCeXRlICYgMHhDMCkgPT09IDB4ODApIHtcbiAgICAgICAgICAgIHRlbXBDb2RlUG9pbnQgPSAoZmlyc3RCeXRlICYgMHgxRikgPDwgMHg2IHwgKHNlY29uZEJ5dGUgJiAweDNGKVxuICAgICAgICAgICAgaWYgKHRlbXBDb2RlUG9pbnQgPiAweDdGKSB7XG4gICAgICAgICAgICAgIGNvZGVQb2ludCA9IHRlbXBDb2RlUG9pbnRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIHNlY29uZEJ5dGUgPSBidWZbaSArIDFdXG4gICAgICAgICAgdGhpcmRCeXRlID0gYnVmW2kgKyAyXVxuICAgICAgICAgIGlmICgoc2Vjb25kQnl0ZSAmIDB4QzApID09PSAweDgwICYmICh0aGlyZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCkge1xuICAgICAgICAgICAgdGVtcENvZGVQb2ludCA9IChmaXJzdEJ5dGUgJiAweEYpIDw8IDB4QyB8IChzZWNvbmRCeXRlICYgMHgzRikgPDwgMHg2IHwgKHRoaXJkQnl0ZSAmIDB4M0YpXG4gICAgICAgICAgICBpZiAodGVtcENvZGVQb2ludCA+IDB4N0ZGICYmICh0ZW1wQ29kZVBvaW50IDwgMHhEODAwIHx8IHRlbXBDb2RlUG9pbnQgPiAweERGRkYpKSB7XG4gICAgICAgICAgICAgIGNvZGVQb2ludCA9IHRlbXBDb2RlUG9pbnRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIHNlY29uZEJ5dGUgPSBidWZbaSArIDFdXG4gICAgICAgICAgdGhpcmRCeXRlID0gYnVmW2kgKyAyXVxuICAgICAgICAgIGZvdXJ0aEJ5dGUgPSBidWZbaSArIDNdXG4gICAgICAgICAgaWYgKChzZWNvbmRCeXRlICYgMHhDMCkgPT09IDB4ODAgJiYgKHRoaXJkQnl0ZSAmIDB4QzApID09PSAweDgwICYmIChmb3VydGhCeXRlICYgMHhDMCkgPT09IDB4ODApIHtcbiAgICAgICAgICAgIHRlbXBDb2RlUG9pbnQgPSAoZmlyc3RCeXRlICYgMHhGKSA8PCAweDEyIHwgKHNlY29uZEJ5dGUgJiAweDNGKSA8PCAweEMgfCAodGhpcmRCeXRlICYgMHgzRikgPDwgMHg2IHwgKGZvdXJ0aEJ5dGUgJiAweDNGKVxuICAgICAgICAgICAgaWYgKHRlbXBDb2RlUG9pbnQgPiAweEZGRkYgJiYgdGVtcENvZGVQb2ludCA8IDB4MTEwMDAwKSB7XG4gICAgICAgICAgICAgIGNvZGVQb2ludCA9IHRlbXBDb2RlUG9pbnRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNvZGVQb2ludCA9PT0gbnVsbCkge1xuICAgICAgLy8gd2UgZGlkIG5vdCBnZW5lcmF0ZSBhIHZhbGlkIGNvZGVQb2ludCBzbyBpbnNlcnQgYVxuICAgICAgLy8gcmVwbGFjZW1lbnQgY2hhciAoVStGRkZEKSBhbmQgYWR2YW5jZSBvbmx5IDEgYnl0ZVxuICAgICAgY29kZVBvaW50ID0gMHhGRkZEXG4gICAgICBieXRlc1BlclNlcXVlbmNlID0gMVxuICAgIH0gZWxzZSBpZiAoY29kZVBvaW50ID4gMHhGRkZGKSB7XG4gICAgICAvLyBlbmNvZGUgdG8gdXRmMTYgKHN1cnJvZ2F0ZSBwYWlyIGRhbmNlKVxuICAgICAgY29kZVBvaW50IC09IDB4MTAwMDBcbiAgICAgIHJlcy5wdXNoKGNvZGVQb2ludCA+Pj4gMTAgJiAweDNGRiB8IDB4RDgwMClcbiAgICAgIGNvZGVQb2ludCA9IDB4REMwMCB8IGNvZGVQb2ludCAmIDB4M0ZGXG4gICAgfVxuXG4gICAgcmVzLnB1c2goY29kZVBvaW50KVxuICAgIGkgKz0gYnl0ZXNQZXJTZXF1ZW5jZVxuICB9XG5cbiAgcmV0dXJuIGRlY29kZUNvZGVQb2ludHNBcnJheShyZXMpXG59XG5cbi8vIEJhc2VkIG9uIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzIyNzQ3MjcyLzY4MDc0MiwgdGhlIGJyb3dzZXIgd2l0aFxuLy8gdGhlIGxvd2VzdCBsaW1pdCBpcyBDaHJvbWUsIHdpdGggMHgxMDAwMCBhcmdzLlxuLy8gV2UgZ28gMSBtYWduaXR1ZGUgbGVzcywgZm9yIHNhZmV0eVxudmFyIE1BWF9BUkdVTUVOVFNfTEVOR1RIID0gMHgxMDAwXG5cbmZ1bmN0aW9uIGRlY29kZUNvZGVQb2ludHNBcnJheSAoY29kZVBvaW50cykge1xuICB2YXIgbGVuID0gY29kZVBvaW50cy5sZW5ndGhcbiAgaWYgKGxlbiA8PSBNQVhfQVJHVU1FTlRTX0xFTkdUSCkge1xuICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZywgY29kZVBvaW50cykgLy8gYXZvaWQgZXh0cmEgc2xpY2UoKVxuICB9XG5cbiAgLy8gRGVjb2RlIGluIGNodW5rcyB0byBhdm9pZCBcImNhbGwgc3RhY2sgc2l6ZSBleGNlZWRlZFwiLlxuICB2YXIgcmVzID0gJydcbiAgdmFyIGkgPSAwXG4gIHdoaWxlIChpIDwgbGVuKSB7XG4gICAgcmVzICs9IFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoXG4gICAgICBTdHJpbmcsXG4gICAgICBjb2RlUG9pbnRzLnNsaWNlKGksIGkgKz0gTUFYX0FSR1VNRU5UU19MRU5HVEgpXG4gICAgKVxuICB9XG4gIHJldHVybiByZXNcbn1cblxuZnVuY3Rpb24gYXNjaWlTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIHZhciByZXQgPSAnJ1xuICBlbmQgPSBNYXRoLm1pbihidWYubGVuZ3RoLCBlbmQpXG5cbiAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpIHtcbiAgICByZXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShidWZbaV0gJiAweDdGKVxuICB9XG4gIHJldHVybiByZXRcbn1cblxuZnVuY3Rpb24gbGF0aW4xU2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICB2YXIgcmV0ID0gJydcbiAgZW5kID0gTWF0aC5taW4oYnVmLmxlbmd0aCwgZW5kKVxuXG4gIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgKytpKSB7XG4gICAgcmV0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnVmW2ldKVxuICB9XG4gIHJldHVybiByZXRcbn1cblxuZnVuY3Rpb24gaGV4U2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICB2YXIgbGVuID0gYnVmLmxlbmd0aFxuXG4gIGlmICghc3RhcnQgfHwgc3RhcnQgPCAwKSBzdGFydCA9IDBcbiAgaWYgKCFlbmQgfHwgZW5kIDwgMCB8fCBlbmQgPiBsZW4pIGVuZCA9IGxlblxuXG4gIHZhciBvdXQgPSAnJ1xuICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7ICsraSkge1xuICAgIG91dCArPSB0b0hleChidWZbaV0pXG4gIH1cbiAgcmV0dXJuIG91dFxufVxuXG5mdW5jdGlvbiB1dGYxNmxlU2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICB2YXIgYnl0ZXMgPSBidWYuc2xpY2Uoc3RhcnQsIGVuZClcbiAgdmFyIHJlcyA9ICcnXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYnl0ZXMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICByZXMgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShieXRlc1tpXSArIGJ5dGVzW2kgKyAxXSAqIDI1NilcbiAgfVxuICByZXR1cm4gcmVzXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuc2xpY2UgPSBmdW5jdGlvbiBzbGljZSAoc3RhcnQsIGVuZCkge1xuICB2YXIgbGVuID0gdGhpcy5sZW5ndGhcbiAgc3RhcnQgPSB+fnN0YXJ0XG4gIGVuZCA9IGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuIDogfn5lbmRcblxuICBpZiAoc3RhcnQgPCAwKSB7XG4gICAgc3RhcnQgKz0gbGVuXG4gICAgaWYgKHN0YXJ0IDwgMCkgc3RhcnQgPSAwXG4gIH0gZWxzZSBpZiAoc3RhcnQgPiBsZW4pIHtcbiAgICBzdGFydCA9IGxlblxuICB9XG5cbiAgaWYgKGVuZCA8IDApIHtcbiAgICBlbmQgKz0gbGVuXG4gICAgaWYgKGVuZCA8IDApIGVuZCA9IDBcbiAgfSBlbHNlIGlmIChlbmQgPiBsZW4pIHtcbiAgICBlbmQgPSBsZW5cbiAgfVxuXG4gIGlmIChlbmQgPCBzdGFydCkgZW5kID0gc3RhcnRcblxuICB2YXIgbmV3QnVmXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIG5ld0J1ZiA9IHRoaXMuc3ViYXJyYXkoc3RhcnQsIGVuZClcbiAgICBuZXdCdWYuX19wcm90b19fID0gQnVmZmVyLnByb3RvdHlwZVxuICB9IGVsc2Uge1xuICAgIHZhciBzbGljZUxlbiA9IGVuZCAtIHN0YXJ0XG4gICAgbmV3QnVmID0gbmV3IEJ1ZmZlcihzbGljZUxlbiwgdW5kZWZpbmVkKVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2xpY2VMZW47ICsraSkge1xuICAgICAgbmV3QnVmW2ldID0gdGhpc1tpICsgc3RhcnRdXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ld0J1ZlxufVxuXG4vKlxuICogTmVlZCB0byBtYWtlIHN1cmUgdGhhdCBidWZmZXIgaXNuJ3QgdHJ5aW5nIHRvIHdyaXRlIG91dCBvZiBib3VuZHMuXG4gKi9cbmZ1bmN0aW9uIGNoZWNrT2Zmc2V0IChvZmZzZXQsIGV4dCwgbGVuZ3RoKSB7XG4gIGlmICgob2Zmc2V0ICUgMSkgIT09IDAgfHwgb2Zmc2V0IDwgMCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ29mZnNldCBpcyBub3QgdWludCcpXG4gIGlmIChvZmZzZXQgKyBleHQgPiBsZW5ndGgpIHRocm93IG5ldyBSYW5nZUVycm9yKCdUcnlpbmcgdG8gYWNjZXNzIGJleW9uZCBidWZmZXIgbGVuZ3RoJylcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludExFID0gZnVuY3Rpb24gcmVhZFVJbnRMRSAob2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoIHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIGJ5dGVMZW5ndGgsIHRoaXMubGVuZ3RoKVxuXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldF1cbiAgdmFyIG11bCA9IDFcbiAgdmFyIGkgPSAwXG4gIHdoaWxlICgrK2kgPCBieXRlTGVuZ3RoICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdmFsICs9IHRoaXNbb2Zmc2V0ICsgaV0gKiBtdWxcbiAgfVxuXG4gIHJldHVybiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludEJFID0gZnVuY3Rpb24gcmVhZFVJbnRCRSAob2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoIHwgMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgY2hlY2tPZmZzZXQob2Zmc2V0LCBieXRlTGVuZ3RoLCB0aGlzLmxlbmd0aClcbiAgfVxuXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldCArIC0tYnl0ZUxlbmd0aF1cbiAgdmFyIG11bCA9IDFcbiAgd2hpbGUgKGJ5dGVMZW5ndGggPiAwICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdmFsICs9IHRoaXNbb2Zmc2V0ICsgLS1ieXRlTGVuZ3RoXSAqIG11bFxuICB9XG5cbiAgcmV0dXJuIHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50OCA9IGZ1bmN0aW9uIHJlYWRVSW50OCAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDEsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gdGhpc1tvZmZzZXRdXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQxNkxFID0gZnVuY3Rpb24gcmVhZFVJbnQxNkxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMiwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiB0aGlzW29mZnNldF0gfCAodGhpc1tvZmZzZXQgKyAxXSA8PCA4KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50MTZCRSA9IGZ1bmN0aW9uIHJlYWRVSW50MTZCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDIsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gKHRoaXNbb2Zmc2V0XSA8PCA4KSB8IHRoaXNbb2Zmc2V0ICsgMV1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDMyTEUgPSBmdW5jdGlvbiByZWFkVUludDMyTEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcblxuICByZXR1cm4gKCh0aGlzW29mZnNldF0pIHxcbiAgICAgICh0aGlzW29mZnNldCArIDFdIDw8IDgpIHxcbiAgICAgICh0aGlzW29mZnNldCArIDJdIDw8IDE2KSkgK1xuICAgICAgKHRoaXNbb2Zmc2V0ICsgM10gKiAweDEwMDAwMDApXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQzMkJFID0gZnVuY3Rpb24gcmVhZFVJbnQzMkJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG5cbiAgcmV0dXJuICh0aGlzW29mZnNldF0gKiAweDEwMDAwMDApICtcbiAgICAoKHRoaXNbb2Zmc2V0ICsgMV0gPDwgMTYpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAyXSA8PCA4KSB8XG4gICAgdGhpc1tvZmZzZXQgKyAzXSlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50TEUgPSBmdW5jdGlvbiByZWFkSW50TEUgKG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCBieXRlTGVuZ3RoLCB0aGlzLmxlbmd0aClcblxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXRdXG4gIHZhciBtdWwgPSAxXG4gIHZhciBpID0gMFxuICB3aGlsZSAoKytpIDwgYnl0ZUxlbmd0aCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHZhbCArPSB0aGlzW29mZnNldCArIGldICogbXVsXG4gIH1cbiAgbXVsICo9IDB4ODBcblxuICBpZiAodmFsID49IG11bCkgdmFsIC09IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoKVxuXG4gIHJldHVybiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50QkUgPSBmdW5jdGlvbiByZWFkSW50QkUgKG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCBieXRlTGVuZ3RoLCB0aGlzLmxlbmd0aClcblxuICB2YXIgaSA9IGJ5dGVMZW5ndGhcbiAgdmFyIG11bCA9IDFcbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0ICsgLS1pXVxuICB3aGlsZSAoaSA+IDAgJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB2YWwgKz0gdGhpc1tvZmZzZXQgKyAtLWldICogbXVsXG4gIH1cbiAgbXVsICo9IDB4ODBcblxuICBpZiAodmFsID49IG11bCkgdmFsIC09IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoKVxuXG4gIHJldHVybiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50OCA9IGZ1bmN0aW9uIHJlYWRJbnQ4IChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMSwgdGhpcy5sZW5ndGgpXG4gIGlmICghKHRoaXNbb2Zmc2V0XSAmIDB4ODApKSByZXR1cm4gKHRoaXNbb2Zmc2V0XSlcbiAgcmV0dXJuICgoMHhmZiAtIHRoaXNbb2Zmc2V0XSArIDEpICogLTEpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDE2TEUgPSBmdW5jdGlvbiByZWFkSW50MTZMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDIsIHRoaXMubGVuZ3RoKVxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXRdIHwgKHRoaXNbb2Zmc2V0ICsgMV0gPDwgOClcbiAgcmV0dXJuICh2YWwgJiAweDgwMDApID8gdmFsIHwgMHhGRkZGMDAwMCA6IHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQxNkJFID0gZnVuY3Rpb24gcmVhZEludDE2QkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAyLCB0aGlzLmxlbmd0aClcbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0ICsgMV0gfCAodGhpc1tvZmZzZXRdIDw8IDgpXG4gIHJldHVybiAodmFsICYgMHg4MDAwKSA/IHZhbCB8IDB4RkZGRjAwMDAgOiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50MzJMRSA9IGZ1bmN0aW9uIHJlYWRJbnQzMkxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG5cbiAgcmV0dXJuICh0aGlzW29mZnNldF0pIHxcbiAgICAodGhpc1tvZmZzZXQgKyAxXSA8PCA4KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgMl0gPDwgMTYpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAzXSA8PCAyNClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50MzJCRSA9IGZ1bmN0aW9uIHJlYWRJbnQzMkJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG5cbiAgcmV0dXJuICh0aGlzW29mZnNldF0gPDwgMjQpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAxXSA8PCAxNikgfFxuICAgICh0aGlzW29mZnNldCArIDJdIDw8IDgpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAzXSlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkRmxvYXRMRSA9IGZ1bmN0aW9uIHJlYWRGbG9hdExFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiBpZWVlNzU0LnJlYWQodGhpcywgb2Zmc2V0LCB0cnVlLCAyMywgNClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkRmxvYXRCRSA9IGZ1bmN0aW9uIHJlYWRGbG9hdEJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiBpZWVlNzU0LnJlYWQodGhpcywgb2Zmc2V0LCBmYWxzZSwgMjMsIDQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZERvdWJsZUxFID0gZnVuY3Rpb24gcmVhZERvdWJsZUxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgOCwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiBpZWVlNzU0LnJlYWQodGhpcywgb2Zmc2V0LCB0cnVlLCA1MiwgOClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkRG91YmxlQkUgPSBmdW5jdGlvbiByZWFkRG91YmxlQkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA4LCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIGllZWU3NTQucmVhZCh0aGlzLCBvZmZzZXQsIGZhbHNlLCA1MiwgOClcbn1cblxuZnVuY3Rpb24gY2hlY2tJbnQgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgZXh0LCBtYXgsIG1pbikge1xuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihidWYpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdcImJ1ZmZlclwiIGFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIgaW5zdGFuY2UnKVxuICBpZiAodmFsdWUgPiBtYXggfHwgdmFsdWUgPCBtaW4pIHRocm93IG5ldyBSYW5nZUVycm9yKCdcInZhbHVlXCIgYXJndW1lbnQgaXMgb3V0IG9mIGJvdW5kcycpXG4gIGlmIChvZmZzZXQgKyBleHQgPiBidWYubGVuZ3RoKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW5kZXggb3V0IG9mIHJhbmdlJylcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnRMRSA9IGZ1bmN0aW9uIHdyaXRlVUludExFICh2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoIHwgMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgdmFyIG1heEJ5dGVzID0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGgpIC0gMVxuICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG1heEJ5dGVzLCAwKVxuICB9XG5cbiAgdmFyIG11bCA9IDFcbiAgdmFyIGkgPSAwXG4gIHRoaXNbb2Zmc2V0XSA9IHZhbHVlICYgMHhGRlxuICB3aGlsZSAoKytpIDwgYnl0ZUxlbmd0aCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHRoaXNbb2Zmc2V0ICsgaV0gPSAodmFsdWUgLyBtdWwpICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIG9mZnNldCArIGJ5dGVMZW5ndGhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnRCRSA9IGZ1bmN0aW9uIHdyaXRlVUludEJFICh2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoIHwgMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgdmFyIG1heEJ5dGVzID0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGgpIC0gMVxuICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG1heEJ5dGVzLCAwKVxuICB9XG5cbiAgdmFyIGkgPSBieXRlTGVuZ3RoIC0gMVxuICB2YXIgbXVsID0gMVxuICB0aGlzW29mZnNldCArIGldID0gdmFsdWUgJiAweEZGXG4gIHdoaWxlICgtLWkgPj0gMCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHRoaXNbb2Zmc2V0ICsgaV0gPSAodmFsdWUgLyBtdWwpICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIG9mZnNldCArIGJ5dGVMZW5ndGhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQ4ID0gZnVuY3Rpb24gd3JpdGVVSW50OCAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAxLCAweGZmLCAwKVxuICBpZiAoIUJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB2YWx1ZSA9IE1hdGguZmxvb3IodmFsdWUpXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHJldHVybiBvZmZzZXQgKyAxXG59XG5cbmZ1bmN0aW9uIG9iamVjdFdyaXRlVUludDE2IChidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbikge1xuICBpZiAodmFsdWUgPCAwKSB2YWx1ZSA9IDB4ZmZmZiArIHZhbHVlICsgMVxuICBmb3IgKHZhciBpID0gMCwgaiA9IE1hdGgubWluKGJ1Zi5sZW5ndGggLSBvZmZzZXQsIDIpOyBpIDwgajsgKytpKSB7XG4gICAgYnVmW29mZnNldCArIGldID0gKHZhbHVlICYgKDB4ZmYgPDwgKDggKiAobGl0dGxlRW5kaWFuID8gaSA6IDEgLSBpKSkpKSA+Pj5cbiAgICAgIChsaXR0bGVFbmRpYW4gPyBpIDogMSAtIGkpICogOFxuICB9XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50MTZMRSA9IGZ1bmN0aW9uIHdyaXRlVUludDE2TEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMiwgMHhmZmZmLCAwKVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDgpXG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0V3JpdGVVSW50MTYodGhpcywgdmFsdWUsIG9mZnNldCwgdHJ1ZSlcbiAgfVxuICByZXR1cm4gb2Zmc2V0ICsgMlxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDE2QkUgPSBmdW5jdGlvbiB3cml0ZVVJbnQxNkJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDIsIDB4ZmZmZiwgMClcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgdGhpc1tvZmZzZXRdID0gKHZhbHVlID4+PiA4KVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgJiAweGZmKVxuICB9IGVsc2Uge1xuICAgIG9iamVjdFdyaXRlVUludDE2KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGZhbHNlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyAyXG59XG5cbmZ1bmN0aW9uIG9iamVjdFdyaXRlVUludDMyIChidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbikge1xuICBpZiAodmFsdWUgPCAwKSB2YWx1ZSA9IDB4ZmZmZmZmZmYgKyB2YWx1ZSArIDFcbiAgZm9yICh2YXIgaSA9IDAsIGogPSBNYXRoLm1pbihidWYubGVuZ3RoIC0gb2Zmc2V0LCA0KTsgaSA8IGo7ICsraSkge1xuICAgIGJ1ZltvZmZzZXQgKyBpXSA9ICh2YWx1ZSA+Pj4gKGxpdHRsZUVuZGlhbiA/IGkgOiAzIC0gaSkgKiA4KSAmIDB4ZmZcbiAgfVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDMyTEUgPSBmdW5jdGlvbiB3cml0ZVVJbnQzMkxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDQsIDB4ZmZmZmZmZmYsIDApXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIHRoaXNbb2Zmc2V0ICsgM10gPSAodmFsdWUgPj4+IDI0KVxuICAgIHRoaXNbb2Zmc2V0ICsgMl0gPSAodmFsdWUgPj4+IDE2KVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDgpXG4gICAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgfSBlbHNlIHtcbiAgICBvYmplY3RXcml0ZVVJbnQzMih0aGlzLCB2YWx1ZSwgb2Zmc2V0LCB0cnVlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50MzJCRSA9IGZ1bmN0aW9uIHdyaXRlVUludDMyQkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgNCwgMHhmZmZmZmZmZiwgMClcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgdGhpc1tvZmZzZXRdID0gKHZhbHVlID4+PiAyNClcbiAgICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiAxNilcbiAgICB0aGlzW29mZnNldCArIDJdID0gKHZhbHVlID4+PiA4KVxuICAgIHRoaXNbb2Zmc2V0ICsgM10gPSAodmFsdWUgJiAweGZmKVxuICB9IGVsc2Uge1xuICAgIG9iamVjdFdyaXRlVUludDMyKHRoaXMsIHZhbHVlLCBvZmZzZXQsIGZhbHNlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnRMRSA9IGZ1bmN0aW9uIHdyaXRlSW50TEUgKHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIHZhciBsaW1pdCA9IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoIC0gMSlcblxuICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIGxpbWl0IC0gMSwgLWxpbWl0KVxuICB9XG5cbiAgdmFyIGkgPSAwXG4gIHZhciBtdWwgPSAxXG4gIHZhciBzdWIgPSAwXG4gIHRoaXNbb2Zmc2V0XSA9IHZhbHVlICYgMHhGRlxuICB3aGlsZSAoKytpIDwgYnl0ZUxlbmd0aCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIGlmICh2YWx1ZSA8IDAgJiYgc3ViID09PSAwICYmIHRoaXNbb2Zmc2V0ICsgaSAtIDFdICE9PSAwKSB7XG4gICAgICBzdWIgPSAxXG4gICAgfVxuICAgIHRoaXNbb2Zmc2V0ICsgaV0gPSAoKHZhbHVlIC8gbXVsKSA+PiAwKSAtIHN1YiAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBvZmZzZXQgKyBieXRlTGVuZ3RoXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnRCRSA9IGZ1bmN0aW9uIHdyaXRlSW50QkUgKHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIHZhciBsaW1pdCA9IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoIC0gMSlcblxuICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIGxpbWl0IC0gMSwgLWxpbWl0KVxuICB9XG5cbiAgdmFyIGkgPSBieXRlTGVuZ3RoIC0gMVxuICB2YXIgbXVsID0gMVxuICB2YXIgc3ViID0gMFxuICB0aGlzW29mZnNldCArIGldID0gdmFsdWUgJiAweEZGXG4gIHdoaWxlICgtLWkgPj0gMCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIGlmICh2YWx1ZSA8IDAgJiYgc3ViID09PSAwICYmIHRoaXNbb2Zmc2V0ICsgaSArIDFdICE9PSAwKSB7XG4gICAgICBzdWIgPSAxXG4gICAgfVxuICAgIHRoaXNbb2Zmc2V0ICsgaV0gPSAoKHZhbHVlIC8gbXVsKSA+PiAwKSAtIHN1YiAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBvZmZzZXQgKyBieXRlTGVuZ3RoXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQ4ID0gZnVuY3Rpb24gd3JpdGVJbnQ4ICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDEsIDB4N2YsIC0weDgwKVxuICBpZiAoIUJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB2YWx1ZSA9IE1hdGguZmxvb3IodmFsdWUpXG4gIGlmICh2YWx1ZSA8IDApIHZhbHVlID0gMHhmZiArIHZhbHVlICsgMVxuICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICByZXR1cm4gb2Zmc2V0ICsgMVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50MTZMRSA9IGZ1bmN0aW9uIHdyaXRlSW50MTZMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAyLCAweDdmZmYsIC0weDgwMDApXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gOClcbiAgfSBlbHNlIHtcbiAgICBvYmplY3RXcml0ZVVJbnQxNih0aGlzLCB2YWx1ZSwgb2Zmc2V0LCB0cnVlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyAyXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQxNkJFID0gZnVuY3Rpb24gd3JpdGVJbnQxNkJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDIsIDB4N2ZmZiwgLTB4ODAwMClcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgdGhpc1tvZmZzZXRdID0gKHZhbHVlID4+PiA4KVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgJiAweGZmKVxuICB9IGVsc2Uge1xuICAgIG9iamVjdFdyaXRlVUludDE2KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGZhbHNlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyAyXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQzMkxFID0gZnVuY3Rpb24gd3JpdGVJbnQzMkxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDQsIDB4N2ZmZmZmZmYsIC0weDgwMDAwMDAwKVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDgpXG4gICAgdGhpc1tvZmZzZXQgKyAyXSA9ICh2YWx1ZSA+Pj4gMTYpXG4gICAgdGhpc1tvZmZzZXQgKyAzXSA9ICh2YWx1ZSA+Pj4gMjQpXG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0V3JpdGVVSW50MzIodGhpcywgdmFsdWUsIG9mZnNldCwgdHJ1ZSlcbiAgfVxuICByZXR1cm4gb2Zmc2V0ICsgNFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50MzJCRSA9IGZ1bmN0aW9uIHdyaXRlSW50MzJCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCA0LCAweDdmZmZmZmZmLCAtMHg4MDAwMDAwMClcbiAgaWYgKHZhbHVlIDwgMCkgdmFsdWUgPSAweGZmZmZmZmZmICsgdmFsdWUgKyAxXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSA+Pj4gMjQpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gMTYpXG4gICAgdGhpc1tvZmZzZXQgKyAyXSA9ICh2YWx1ZSA+Pj4gOClcbiAgICB0aGlzW29mZnNldCArIDNdID0gKHZhbHVlICYgMHhmZilcbiAgfSBlbHNlIHtcbiAgICBvYmplY3RXcml0ZVVJbnQzMih0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBmYWxzZSlcbiAgfVxuICByZXR1cm4gb2Zmc2V0ICsgNFxufVxuXG5mdW5jdGlvbiBjaGVja0lFRUU3NTQgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgZXh0LCBtYXgsIG1pbikge1xuICBpZiAob2Zmc2V0ICsgZXh0ID4gYnVmLmxlbmd0aCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0luZGV4IG91dCBvZiByYW5nZScpXG4gIGlmIChvZmZzZXQgPCAwKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW5kZXggb3V0IG9mIHJhbmdlJylcbn1cblxuZnVuY3Rpb24gd3JpdGVGbG9hdCAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICBjaGVja0lFRUU3NTQoYnVmLCB2YWx1ZSwgb2Zmc2V0LCA0LCAzLjQwMjgyMzQ2NjM4NTI4ODZlKzM4LCAtMy40MDI4MjM0NjYzODUyODg2ZSszOClcbiAgfVxuICBpZWVlNzU0LndyaXRlKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuLCAyMywgNClcbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUZsb2F0TEUgPSBmdW5jdGlvbiB3cml0ZUZsb2F0TEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHJldHVybiB3cml0ZUZsb2F0KHRoaXMsIHZhbHVlLCBvZmZzZXQsIHRydWUsIG5vQXNzZXJ0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlRmxvYXRCRSA9IGZ1bmN0aW9uIHdyaXRlRmxvYXRCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgcmV0dXJuIHdyaXRlRmxvYXQodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UsIG5vQXNzZXJ0KVxufVxuXG5mdW5jdGlvbiB3cml0ZURvdWJsZSAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICBjaGVja0lFRUU3NTQoYnVmLCB2YWx1ZSwgb2Zmc2V0LCA4LCAxLjc5NzY5MzEzNDg2MjMxNTdFKzMwOCwgLTEuNzk3NjkzMTM0ODYyMzE1N0UrMzA4KVxuICB9XG4gIGllZWU3NTQud3JpdGUoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIDUyLCA4KVxuICByZXR1cm4gb2Zmc2V0ICsgOFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlRG91YmxlTEUgPSBmdW5jdGlvbiB3cml0ZURvdWJsZUxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICByZXR1cm4gd3JpdGVEb3VibGUodGhpcywgdmFsdWUsIG9mZnNldCwgdHJ1ZSwgbm9Bc3NlcnQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVEb3VibGVCRSA9IGZ1bmN0aW9uIHdyaXRlRG91YmxlQkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHJldHVybiB3cml0ZURvdWJsZSh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBmYWxzZSwgbm9Bc3NlcnQpXG59XG5cbi8vIGNvcHkodGFyZ2V0QnVmZmVyLCB0YXJnZXRTdGFydD0wLCBzb3VyY2VTdGFydD0wLCBzb3VyY2VFbmQ9YnVmZmVyLmxlbmd0aClcbkJ1ZmZlci5wcm90b3R5cGUuY29weSA9IGZ1bmN0aW9uIGNvcHkgKHRhcmdldCwgdGFyZ2V0U3RhcnQsIHN0YXJ0LCBlbmQpIHtcbiAgaWYgKCFzdGFydCkgc3RhcnQgPSAwXG4gIGlmICghZW5kICYmIGVuZCAhPT0gMCkgZW5kID0gdGhpcy5sZW5ndGhcbiAgaWYgKHRhcmdldFN0YXJ0ID49IHRhcmdldC5sZW5ndGgpIHRhcmdldFN0YXJ0ID0gdGFyZ2V0Lmxlbmd0aFxuICBpZiAoIXRhcmdldFN0YXJ0KSB0YXJnZXRTdGFydCA9IDBcbiAgaWYgKGVuZCA+IDAgJiYgZW5kIDwgc3RhcnQpIGVuZCA9IHN0YXJ0XG5cbiAgLy8gQ29weSAwIGJ5dGVzOyB3ZSdyZSBkb25lXG4gIGlmIChlbmQgPT09IHN0YXJ0KSByZXR1cm4gMFxuICBpZiAodGFyZ2V0Lmxlbmd0aCA9PT0gMCB8fCB0aGlzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIDBcblxuICAvLyBGYXRhbCBlcnJvciBjb25kaXRpb25zXG4gIGlmICh0YXJnZXRTdGFydCA8IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigndGFyZ2V0U3RhcnQgb3V0IG9mIGJvdW5kcycpXG4gIH1cbiAgaWYgKHN0YXJ0IDwgMCB8fCBzdGFydCA+PSB0aGlzLmxlbmd0aCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3NvdXJjZVN0YXJ0IG91dCBvZiBib3VuZHMnKVxuICBpZiAoZW5kIDwgMCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3NvdXJjZUVuZCBvdXQgb2YgYm91bmRzJylcblxuICAvLyBBcmUgd2Ugb29iP1xuICBpZiAoZW5kID4gdGhpcy5sZW5ndGgpIGVuZCA9IHRoaXMubGVuZ3RoXG4gIGlmICh0YXJnZXQubGVuZ3RoIC0gdGFyZ2V0U3RhcnQgPCBlbmQgLSBzdGFydCkge1xuICAgIGVuZCA9IHRhcmdldC5sZW5ndGggLSB0YXJnZXRTdGFydCArIHN0YXJ0XG4gIH1cblxuICB2YXIgbGVuID0gZW5kIC0gc3RhcnRcbiAgdmFyIGlcblxuICBpZiAodGhpcyA9PT0gdGFyZ2V0ICYmIHN0YXJ0IDwgdGFyZ2V0U3RhcnQgJiYgdGFyZ2V0U3RhcnQgPCBlbmQpIHtcbiAgICAvLyBkZXNjZW5kaW5nIGNvcHkgZnJvbSBlbmRcbiAgICBmb3IgKGkgPSBsZW4gLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgdGFyZ2V0W2kgKyB0YXJnZXRTdGFydF0gPSB0aGlzW2kgKyBzdGFydF1cbiAgICB9XG4gIH0gZWxzZSBpZiAobGVuIDwgMTAwMCB8fCAhQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICAvLyBhc2NlbmRpbmcgY29weSBmcm9tIHN0YXJ0XG4gICAgZm9yIChpID0gMDsgaSA8IGxlbjsgKytpKSB7XG4gICAgICB0YXJnZXRbaSArIHRhcmdldFN0YXJ0XSA9IHRoaXNbaSArIHN0YXJ0XVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBVaW50OEFycmF5LnByb3RvdHlwZS5zZXQuY2FsbChcbiAgICAgIHRhcmdldCxcbiAgICAgIHRoaXMuc3ViYXJyYXkoc3RhcnQsIHN0YXJ0ICsgbGVuKSxcbiAgICAgIHRhcmdldFN0YXJ0XG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIGxlblxufVxuXG4vLyBVc2FnZTpcbi8vICAgIGJ1ZmZlci5maWxsKG51bWJlclssIG9mZnNldFssIGVuZF1dKVxuLy8gICAgYnVmZmVyLmZpbGwoYnVmZmVyWywgb2Zmc2V0WywgZW5kXV0pXG4vLyAgICBidWZmZXIuZmlsbChzdHJpbmdbLCBvZmZzZXRbLCBlbmRdXVssIGVuY29kaW5nXSlcbkJ1ZmZlci5wcm90b3R5cGUuZmlsbCA9IGZ1bmN0aW9uIGZpbGwgKHZhbCwgc3RhcnQsIGVuZCwgZW5jb2RpbmcpIHtcbiAgLy8gSGFuZGxlIHN0cmluZyBjYXNlczpcbiAgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSB7XG4gICAgaWYgKHR5cGVvZiBzdGFydCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGVuY29kaW5nID0gc3RhcnRcbiAgICAgIHN0YXJ0ID0gMFxuICAgICAgZW5kID0gdGhpcy5sZW5ndGhcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBlbmQgPT09ICdzdHJpbmcnKSB7XG4gICAgICBlbmNvZGluZyA9IGVuZFxuICAgICAgZW5kID0gdGhpcy5sZW5ndGhcbiAgICB9XG4gICAgaWYgKHZhbC5sZW5ndGggPT09IDEpIHtcbiAgICAgIHZhciBjb2RlID0gdmFsLmNoYXJDb2RlQXQoMClcbiAgICAgIGlmIChjb2RlIDwgMjU2KSB7XG4gICAgICAgIHZhbCA9IGNvZGVcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGVuY29kaW5nICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIGVuY29kaW5nICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZW5jb2RpbmcgbXVzdCBiZSBhIHN0cmluZycpXG4gICAgfVxuICAgIGlmICh0eXBlb2YgZW5jb2RpbmcgPT09ICdzdHJpbmcnICYmICFCdWZmZXIuaXNFbmNvZGluZyhlbmNvZGluZykpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vua25vd24gZW5jb2Rpbmc6ICcgKyBlbmNvZGluZylcbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZW9mIHZhbCA9PT0gJ251bWJlcicpIHtcbiAgICB2YWwgPSB2YWwgJiAyNTVcbiAgfVxuXG4gIC8vIEludmFsaWQgcmFuZ2VzIGFyZSBub3Qgc2V0IHRvIGEgZGVmYXVsdCwgc28gY2FuIHJhbmdlIGNoZWNrIGVhcmx5LlxuICBpZiAoc3RhcnQgPCAwIHx8IHRoaXMubGVuZ3RoIDwgc3RhcnQgfHwgdGhpcy5sZW5ndGggPCBlbmQpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignT3V0IG9mIHJhbmdlIGluZGV4JylcbiAgfVxuXG4gIGlmIChlbmQgPD0gc3RhcnQpIHtcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgc3RhcnQgPSBzdGFydCA+Pj4gMFxuICBlbmQgPSBlbmQgPT09IHVuZGVmaW5lZCA/IHRoaXMubGVuZ3RoIDogZW5kID4+PiAwXG5cbiAgaWYgKCF2YWwpIHZhbCA9IDBcblxuICB2YXIgaVxuICBpZiAodHlwZW9mIHZhbCA9PT0gJ251bWJlcicpIHtcbiAgICBmb3IgKGkgPSBzdGFydDsgaSA8IGVuZDsgKytpKSB7XG4gICAgICB0aGlzW2ldID0gdmFsXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciBieXRlcyA9IEJ1ZmZlci5pc0J1ZmZlcih2YWwpXG4gICAgICA/IHZhbFxuICAgICAgOiB1dGY4VG9CeXRlcyhuZXcgQnVmZmVyKHZhbCwgZW5jb2RpbmcpLnRvU3RyaW5nKCkpXG4gICAgdmFyIGxlbiA9IGJ5dGVzLmxlbmd0aFxuICAgIGZvciAoaSA9IDA7IGkgPCBlbmQgLSBzdGFydDsgKytpKSB7XG4gICAgICB0aGlzW2kgKyBzdGFydF0gPSBieXRlc1tpICUgbGVuXVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0aGlzXG59XG5cbi8vIEhFTFBFUiBGVU5DVElPTlNcbi8vID09PT09PT09PT09PT09PT1cblxudmFyIElOVkFMSURfQkFTRTY0X1JFID0gL1teK1xcLzAtOUEtWmEtei1fXS9nXG5cbmZ1bmN0aW9uIGJhc2U2NGNsZWFuIChzdHIpIHtcbiAgLy8gTm9kZSBzdHJpcHMgb3V0IGludmFsaWQgY2hhcmFjdGVycyBsaWtlIFxcbiBhbmQgXFx0IGZyb20gdGhlIHN0cmluZywgYmFzZTY0LWpzIGRvZXMgbm90XG4gIHN0ciA9IHN0cmluZ3RyaW0oc3RyKS5yZXBsYWNlKElOVkFMSURfQkFTRTY0X1JFLCAnJylcbiAgLy8gTm9kZSBjb252ZXJ0cyBzdHJpbmdzIHdpdGggbGVuZ3RoIDwgMiB0byAnJ1xuICBpZiAoc3RyLmxlbmd0aCA8IDIpIHJldHVybiAnJ1xuICAvLyBOb2RlIGFsbG93cyBmb3Igbm9uLXBhZGRlZCBiYXNlNjQgc3RyaW5ncyAobWlzc2luZyB0cmFpbGluZyA9PT0pLCBiYXNlNjQtanMgZG9lcyBub3RcbiAgd2hpbGUgKHN0ci5sZW5ndGggJSA0ICE9PSAwKSB7XG4gICAgc3RyID0gc3RyICsgJz0nXG4gIH1cbiAgcmV0dXJuIHN0clxufVxuXG5mdW5jdGlvbiBzdHJpbmd0cmltIChzdHIpIHtcbiAgaWYgKHN0ci50cmltKSByZXR1cm4gc3RyLnRyaW0oKVxuICByZXR1cm4gc3RyLnJlcGxhY2UoL15cXHMrfFxccyskL2csICcnKVxufVxuXG5mdW5jdGlvbiB0b0hleCAobikge1xuICBpZiAobiA8IDE2KSByZXR1cm4gJzAnICsgbi50b1N0cmluZygxNilcbiAgcmV0dXJuIG4udG9TdHJpbmcoMTYpXG59XG5cbmZ1bmN0aW9uIHV0ZjhUb0J5dGVzIChzdHJpbmcsIHVuaXRzKSB7XG4gIHVuaXRzID0gdW5pdHMgfHwgSW5maW5pdHlcbiAgdmFyIGNvZGVQb2ludFxuICB2YXIgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aFxuICB2YXIgbGVhZFN1cnJvZ2F0ZSA9IG51bGxcbiAgdmFyIGJ5dGVzID0gW11cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgY29kZVBvaW50ID0gc3RyaW5nLmNoYXJDb2RlQXQoaSlcblxuICAgIC8vIGlzIHN1cnJvZ2F0ZSBjb21wb25lbnRcbiAgICBpZiAoY29kZVBvaW50ID4gMHhEN0ZGICYmIGNvZGVQb2ludCA8IDB4RTAwMCkge1xuICAgICAgLy8gbGFzdCBjaGFyIHdhcyBhIGxlYWRcbiAgICAgIGlmICghbGVhZFN1cnJvZ2F0ZSkge1xuICAgICAgICAvLyBubyBsZWFkIHlldFxuICAgICAgICBpZiAoY29kZVBvaW50ID4gMHhEQkZGKSB7XG4gICAgICAgICAgLy8gdW5leHBlY3RlZCB0cmFpbFxuICAgICAgICAgIGlmICgodW5pdHMgLT0gMykgPiAtMSkgYnl0ZXMucHVzaCgweEVGLCAweEJGLCAweEJEKVxuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH0gZWxzZSBpZiAoaSArIDEgPT09IGxlbmd0aCkge1xuICAgICAgICAgIC8vIHVucGFpcmVkIGxlYWRcbiAgICAgICAgICBpZiAoKHVuaXRzIC09IDMpID4gLTEpIGJ5dGVzLnB1c2goMHhFRiwgMHhCRiwgMHhCRClcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gdmFsaWQgbGVhZFxuICAgICAgICBsZWFkU3Vycm9nYXRlID0gY29kZVBvaW50XG5cbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgLy8gMiBsZWFkcyBpbiBhIHJvd1xuICAgICAgaWYgKGNvZGVQb2ludCA8IDB4REMwMCkge1xuICAgICAgICBpZiAoKHVuaXRzIC09IDMpID4gLTEpIGJ5dGVzLnB1c2goMHhFRiwgMHhCRiwgMHhCRClcbiAgICAgICAgbGVhZFN1cnJvZ2F0ZSA9IGNvZGVQb2ludFxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICAvLyB2YWxpZCBzdXJyb2dhdGUgcGFpclxuICAgICAgY29kZVBvaW50ID0gKGxlYWRTdXJyb2dhdGUgLSAweEQ4MDAgPDwgMTAgfCBjb2RlUG9pbnQgLSAweERDMDApICsgMHgxMDAwMFxuICAgIH0gZWxzZSBpZiAobGVhZFN1cnJvZ2F0ZSkge1xuICAgICAgLy8gdmFsaWQgYm1wIGNoYXIsIGJ1dCBsYXN0IGNoYXIgd2FzIGEgbGVhZFxuICAgICAgaWYgKCh1bml0cyAtPSAzKSA+IC0xKSBieXRlcy5wdXNoKDB4RUYsIDB4QkYsIDB4QkQpXG4gICAgfVxuXG4gICAgbGVhZFN1cnJvZ2F0ZSA9IG51bGxcblxuICAgIC8vIGVuY29kZSB1dGY4XG4gICAgaWYgKGNvZGVQb2ludCA8IDB4ODApIHtcbiAgICAgIGlmICgodW5pdHMgLT0gMSkgPCAwKSBicmVha1xuICAgICAgYnl0ZXMucHVzaChjb2RlUG9pbnQpXG4gICAgfSBlbHNlIGlmIChjb2RlUG9pbnQgPCAweDgwMCkge1xuICAgICAgaWYgKCh1bml0cyAtPSAyKSA8IDApIGJyZWFrXG4gICAgICBieXRlcy5wdXNoKFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHg2IHwgMHhDMCxcbiAgICAgICAgY29kZVBvaW50ICYgMHgzRiB8IDB4ODBcbiAgICAgIClcbiAgICB9IGVsc2UgaWYgKGNvZGVQb2ludCA8IDB4MTAwMDApIHtcbiAgICAgIGlmICgodW5pdHMgLT0gMykgPCAwKSBicmVha1xuICAgICAgYnl0ZXMucHVzaChcbiAgICAgICAgY29kZVBvaW50ID4+IDB4QyB8IDB4RTAsXG4gICAgICAgIGNvZGVQb2ludCA+PiAweDYgJiAweDNGIHwgMHg4MCxcbiAgICAgICAgY29kZVBvaW50ICYgMHgzRiB8IDB4ODBcbiAgICAgIClcbiAgICB9IGVsc2UgaWYgKGNvZGVQb2ludCA8IDB4MTEwMDAwKSB7XG4gICAgICBpZiAoKHVuaXRzIC09IDQpIDwgMCkgYnJlYWtcbiAgICAgIGJ5dGVzLnB1c2goXG4gICAgICAgIGNvZGVQb2ludCA+PiAweDEyIHwgMHhGMCxcbiAgICAgICAgY29kZVBvaW50ID4+IDB4QyAmIDB4M0YgfCAweDgwLFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHg2ICYgMHgzRiB8IDB4ODAsXG4gICAgICAgIGNvZGVQb2ludCAmIDB4M0YgfCAweDgwXG4gICAgICApXG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBjb2RlIHBvaW50JylcbiAgICB9XG4gIH1cblxuICByZXR1cm4gYnl0ZXNcbn1cblxuZnVuY3Rpb24gYXNjaWlUb0J5dGVzIChzdHIpIHtcbiAgdmFyIGJ5dGVBcnJheSA9IFtdXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgKytpKSB7XG4gICAgLy8gTm9kZSdzIGNvZGUgc2VlbXMgdG8gYmUgZG9pbmcgdGhpcyBhbmQgbm90ICYgMHg3Ri4uXG4gICAgYnl0ZUFycmF5LnB1c2goc3RyLmNoYXJDb2RlQXQoaSkgJiAweEZGKVxuICB9XG4gIHJldHVybiBieXRlQXJyYXlcbn1cblxuZnVuY3Rpb24gdXRmMTZsZVRvQnl0ZXMgKHN0ciwgdW5pdHMpIHtcbiAgdmFyIGMsIGhpLCBsb1xuICB2YXIgYnl0ZUFycmF5ID0gW11cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyArK2kpIHtcbiAgICBpZiAoKHVuaXRzIC09IDIpIDwgMCkgYnJlYWtcblxuICAgIGMgPSBzdHIuY2hhckNvZGVBdChpKVxuICAgIGhpID0gYyA+PiA4XG4gICAgbG8gPSBjICUgMjU2XG4gICAgYnl0ZUFycmF5LnB1c2gobG8pXG4gICAgYnl0ZUFycmF5LnB1c2goaGkpXG4gIH1cblxuICByZXR1cm4gYnl0ZUFycmF5XG59XG5cbmZ1bmN0aW9uIGJhc2U2NFRvQnl0ZXMgKHN0cikge1xuICByZXR1cm4gYmFzZTY0LnRvQnl0ZUFycmF5KGJhc2U2NGNsZWFuKHN0cikpXG59XG5cbmZ1bmN0aW9uIGJsaXRCdWZmZXIgKHNyYywgZHN0LCBvZmZzZXQsIGxlbmd0aCkge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgaWYgKChpICsgb2Zmc2V0ID49IGRzdC5sZW5ndGgpIHx8IChpID49IHNyYy5sZW5ndGgpKSBicmVha1xuICAgIGRzdFtpICsgb2Zmc2V0XSA9IHNyY1tpXVxuICB9XG4gIHJldHVybiBpXG59XG5cbmZ1bmN0aW9uIGlzbmFuICh2YWwpIHtcbiAgcmV0dXJuIHZhbCAhPT0gdmFsIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tc2VsZi1jb21wYXJlXG59XG4iLCJ2YXIgdG9TdHJpbmcgPSB7fS50b1N0cmluZztcblxubW9kdWxlLmV4cG9ydHMgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIChhcnIpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwoYXJyKSA9PSAnW29iamVjdCBBcnJheV0nO1xufTtcbiIsInJlcXVpcmUoJy4uLy4uL21vZHVsZXMvY29yZS5yZWdleHAuZXNjYXBlJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL21vZHVsZXMvX2NvcmUnKS5SZWdFeHAuZXNjYXBlO1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKHR5cGVvZiBpdCAhPSAnZnVuY3Rpb24nKSB0aHJvdyBUeXBlRXJyb3IoaXQgKyAnIGlzIG5vdCBhIGZ1bmN0aW9uIScpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwidmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIG1zZykge1xuICBpZiAodHlwZW9mIGl0ICE9ICdudW1iZXInICYmIGNvZihpdCkgIT0gJ051bWJlcicpIHRocm93IFR5cGVFcnJvcihtc2cpO1xuICByZXR1cm4gK2l0O1xufTtcbiIsIi8vIDIyLjEuMy4zMSBBcnJheS5wcm90b3R5cGVbQEB1bnNjb3BhYmxlc11cbnZhciBVTlNDT1BBQkxFUyA9IHJlcXVpcmUoJy4vX3drcycpKCd1bnNjb3BhYmxlcycpO1xudmFyIEFycmF5UHJvdG8gPSBBcnJheS5wcm90b3R5cGU7XG5pZiAoQXJyYXlQcm90b1tVTlNDT1BBQkxFU10gPT0gdW5kZWZpbmVkKSByZXF1aXJlKCcuL19oaWRlJykoQXJyYXlQcm90bywgVU5TQ09QQUJMRVMsIHt9KTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICBBcnJheVByb3RvW1VOU0NPUEFCTEVTXVtrZXldID0gdHJ1ZTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgYXQgPSByZXF1aXJlKCcuL19zdHJpbmctYXQnKSh0cnVlKTtcblxuIC8vIGBBZHZhbmNlU3RyaW5nSW5kZXhgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtYWR2YW5jZXN0cmluZ2luZGV4XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChTLCBpbmRleCwgdW5pY29kZSkge1xuICByZXR1cm4gaW5kZXggKyAodW5pY29kZSA/IGF0KFMsIGluZGV4KS5sZW5ndGggOiAxKTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgQ29uc3RydWN0b3IsIG5hbWUsIGZvcmJpZGRlbkZpZWxkKSB7XG4gIGlmICghKGl0IGluc3RhbmNlb2YgQ29uc3RydWN0b3IpIHx8IChmb3JiaWRkZW5GaWVsZCAhPT0gdW5kZWZpbmVkICYmIGZvcmJpZGRlbkZpZWxkIGluIGl0KSkge1xuICAgIHRocm93IFR5cGVFcnJvcihuYW1lICsgJzogaW5jb3JyZWN0IGludm9jYXRpb24hJyk7XG4gIH0gcmV0dXJuIGl0O1xufTtcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKCFpc09iamVjdChpdCkpIHRocm93IFR5cGVFcnJvcihpdCArICcgaXMgbm90IGFuIG9iamVjdCEnKTtcbiAgcmV0dXJuIGl0O1xufTtcbiIsIi8vIDIyLjEuMy4zIEFycmF5LnByb3RvdHlwZS5jb3B5V2l0aGluKHRhcmdldCwgc3RhcnQsIGVuZCA9IHRoaXMubGVuZ3RoKVxuJ3VzZSBzdHJpY3QnO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi9fdG8tYWJzb2x1dGUtaW5kZXgnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFtdLmNvcHlXaXRoaW4gfHwgZnVuY3Rpb24gY29weVdpdGhpbih0YXJnZXQgLyogPSAwICovLCBzdGFydCAvKiA9IDAsIGVuZCA9IEBsZW5ndGggKi8pIHtcbiAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgdmFyIGxlbiA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgdmFyIHRvID0gdG9BYnNvbHV0ZUluZGV4KHRhcmdldCwgbGVuKTtcbiAgdmFyIGZyb20gPSB0b0Fic29sdXRlSW5kZXgoc3RhcnQsIGxlbik7XG4gIHZhciBlbmQgPSBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZDtcbiAgdmFyIGNvdW50ID0gTWF0aC5taW4oKGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuIDogdG9BYnNvbHV0ZUluZGV4KGVuZCwgbGVuKSkgLSBmcm9tLCBsZW4gLSB0byk7XG4gIHZhciBpbmMgPSAxO1xuICBpZiAoZnJvbSA8IHRvICYmIHRvIDwgZnJvbSArIGNvdW50KSB7XG4gICAgaW5jID0gLTE7XG4gICAgZnJvbSArPSBjb3VudCAtIDE7XG4gICAgdG8gKz0gY291bnQgLSAxO1xuICB9XG4gIHdoaWxlIChjb3VudC0tID4gMCkge1xuICAgIGlmIChmcm9tIGluIE8pIE9bdG9dID0gT1tmcm9tXTtcbiAgICBlbHNlIGRlbGV0ZSBPW3RvXTtcbiAgICB0byArPSBpbmM7XG4gICAgZnJvbSArPSBpbmM7XG4gIH0gcmV0dXJuIE87XG59O1xuIiwiLy8gMjIuMS4zLjYgQXJyYXkucHJvdG90eXBlLmZpbGwodmFsdWUsIHN0YXJ0ID0gMCwgZW5kID0gdGhpcy5sZW5ndGgpXG4ndXNlIHN0cmljdCc7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuL190by1hYnNvbHV0ZS1pbmRleCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGZpbGwodmFsdWUgLyogLCBzdGFydCA9IDAsIGVuZCA9IEBsZW5ndGggKi8pIHtcbiAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICB2YXIgaW5kZXggPSB0b0Fic29sdXRlSW5kZXgoYUxlbiA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQsIGxlbmd0aCk7XG4gIHZhciBlbmQgPSBhTGVuID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZDtcbiAgdmFyIGVuZFBvcyA9IGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuZ3RoIDogdG9BYnNvbHV0ZUluZGV4KGVuZCwgbGVuZ3RoKTtcbiAgd2hpbGUgKGVuZFBvcyA+IGluZGV4KSBPW2luZGV4KytdID0gdmFsdWU7XG4gIHJldHVybiBPO1xufTtcbiIsInZhciBmb3JPZiA9IHJlcXVpcmUoJy4vX2Zvci1vZicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVyLCBJVEVSQVRPUikge1xuICB2YXIgcmVzdWx0ID0gW107XG4gIGZvck9mKGl0ZXIsIGZhbHNlLCByZXN1bHQucHVzaCwgcmVzdWx0LCBJVEVSQVRPUik7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwiLy8gZmFsc2UgLT4gQXJyYXkjaW5kZXhPZlxuLy8gdHJ1ZSAgLT4gQXJyYXkjaW5jbHVkZXNcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuL190by1hYnNvbHV0ZS1pbmRleCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoSVNfSU5DTFVERVMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgZWwsIGZyb21JbmRleCkge1xuICAgIHZhciBPID0gdG9JT2JqZWN0KCR0aGlzKTtcbiAgICB2YXIgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICAgIHZhciBpbmRleCA9IHRvQWJzb2x1dGVJbmRleChmcm9tSW5kZXgsIGxlbmd0aCk7XG4gICAgdmFyIHZhbHVlO1xuICAgIC8vIEFycmF5I2luY2x1ZGVzIHVzZXMgU2FtZVZhbHVlWmVybyBlcXVhbGl0eSBhbGdvcml0aG1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgaWYgKElTX0lOQ0xVREVTICYmIGVsICE9IGVsKSB3aGlsZSAobGVuZ3RoID4gaW5kZXgpIHtcbiAgICAgIHZhbHVlID0gT1tpbmRleCsrXTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICAgIGlmICh2YWx1ZSAhPSB2YWx1ZSkgcmV0dXJuIHRydWU7XG4gICAgLy8gQXJyYXkjaW5kZXhPZiBpZ25vcmVzIGhvbGVzLCBBcnJheSNpbmNsdWRlcyAtIG5vdFxuICAgIH0gZWxzZSBmb3IgKDtsZW5ndGggPiBpbmRleDsgaW5kZXgrKykgaWYgKElTX0lOQ0xVREVTIHx8IGluZGV4IGluIE8pIHtcbiAgICAgIGlmIChPW2luZGV4XSA9PT0gZWwpIHJldHVybiBJU19JTkNMVURFUyB8fCBpbmRleCB8fCAwO1xuICAgIH0gcmV0dXJuICFJU19JTkNMVURFUyAmJiAtMTtcbiAgfTtcbn07XG4iLCIvLyAwIC0+IEFycmF5I2ZvckVhY2hcbi8vIDEgLT4gQXJyYXkjbWFwXG4vLyAyIC0+IEFycmF5I2ZpbHRlclxuLy8gMyAtPiBBcnJheSNzb21lXG4vLyA0IC0+IEFycmF5I2V2ZXJ5XG4vLyA1IC0+IEFycmF5I2ZpbmRcbi8vIDYgLT4gQXJyYXkjZmluZEluZGV4XG52YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgSU9iamVjdCA9IHJlcXVpcmUoJy4vX2lvYmplY3QnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgYXNjID0gcmVxdWlyZSgnLi9fYXJyYXktc3BlY2llcy1jcmVhdGUnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFRZUEUsICRjcmVhdGUpIHtcbiAgdmFyIElTX01BUCA9IFRZUEUgPT0gMTtcbiAgdmFyIElTX0ZJTFRFUiA9IFRZUEUgPT0gMjtcbiAgdmFyIElTX1NPTUUgPSBUWVBFID09IDM7XG4gIHZhciBJU19FVkVSWSA9IFRZUEUgPT0gNDtcbiAgdmFyIElTX0ZJTkRfSU5ERVggPSBUWVBFID09IDY7XG4gIHZhciBOT19IT0xFUyA9IFRZUEUgPT0gNSB8fCBJU19GSU5EX0lOREVYO1xuICB2YXIgY3JlYXRlID0gJGNyZWF0ZSB8fCBhc2M7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIGNhbGxiYWNrZm4sIHRoYXQpIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KCR0aGlzKTtcbiAgICB2YXIgc2VsZiA9IElPYmplY3QoTyk7XG4gICAgdmFyIGYgPSBjdHgoY2FsbGJhY2tmbiwgdGhhdCwgMyk7XG4gICAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoKHNlbGYubGVuZ3RoKTtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHZhciByZXN1bHQgPSBJU19NQVAgPyBjcmVhdGUoJHRoaXMsIGxlbmd0aCkgOiBJU19GSUxURVIgPyBjcmVhdGUoJHRoaXMsIDApIDogdW5kZWZpbmVkO1xuICAgIHZhciB2YWwsIHJlcztcbiAgICBmb3IgKDtsZW5ndGggPiBpbmRleDsgaW5kZXgrKykgaWYgKE5PX0hPTEVTIHx8IGluZGV4IGluIHNlbGYpIHtcbiAgICAgIHZhbCA9IHNlbGZbaW5kZXhdO1xuICAgICAgcmVzID0gZih2YWwsIGluZGV4LCBPKTtcbiAgICAgIGlmIChUWVBFKSB7XG4gICAgICAgIGlmIChJU19NQVApIHJlc3VsdFtpbmRleF0gPSByZXM7ICAgLy8gbWFwXG4gICAgICAgIGVsc2UgaWYgKHJlcykgc3dpdGNoIChUWVBFKSB7XG4gICAgICAgICAgY2FzZSAzOiByZXR1cm4gdHJ1ZTsgICAgICAgICAgICAgLy8gc29tZVxuICAgICAgICAgIGNhc2UgNTogcmV0dXJuIHZhbDsgICAgICAgICAgICAgIC8vIGZpbmRcbiAgICAgICAgICBjYXNlIDY6IHJldHVybiBpbmRleDsgICAgICAgICAgICAvLyBmaW5kSW5kZXhcbiAgICAgICAgICBjYXNlIDI6IHJlc3VsdC5wdXNoKHZhbCk7ICAgICAgICAvLyBmaWx0ZXJcbiAgICAgICAgfSBlbHNlIGlmIChJU19FVkVSWSkgcmV0dXJuIGZhbHNlOyAvLyBldmVyeVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gSVNfRklORF9JTkRFWCA/IC0xIDogSVNfU09NRSB8fCBJU19FVkVSWSA/IElTX0VWRVJZIDogcmVzdWx0O1xuICB9O1xufTtcbiIsInZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciBJT2JqZWN0ID0gcmVxdWlyZSgnLi9faW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRoYXQsIGNhbGxiYWNrZm4sIGFMZW4sIG1lbW8sIGlzUmlnaHQpIHtcbiAgYUZ1bmN0aW9uKGNhbGxiYWNrZm4pO1xuICB2YXIgTyA9IHRvT2JqZWN0KHRoYXQpO1xuICB2YXIgc2VsZiA9IElPYmplY3QoTyk7XG4gIHZhciBsZW5ndGggPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gIHZhciBpbmRleCA9IGlzUmlnaHQgPyBsZW5ndGggLSAxIDogMDtcbiAgdmFyIGkgPSBpc1JpZ2h0ID8gLTEgOiAxO1xuICBpZiAoYUxlbiA8IDIpIGZvciAoOzspIHtcbiAgICBpZiAoaW5kZXggaW4gc2VsZikge1xuICAgICAgbWVtbyA9IHNlbGZbaW5kZXhdO1xuICAgICAgaW5kZXggKz0gaTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBpbmRleCArPSBpO1xuICAgIGlmIChpc1JpZ2h0ID8gaW5kZXggPCAwIDogbGVuZ3RoIDw9IGluZGV4KSB7XG4gICAgICB0aHJvdyBUeXBlRXJyb3IoJ1JlZHVjZSBvZiBlbXB0eSBhcnJheSB3aXRoIG5vIGluaXRpYWwgdmFsdWUnKTtcbiAgICB9XG4gIH1cbiAgZm9yICg7aXNSaWdodCA/IGluZGV4ID49IDAgOiBsZW5ndGggPiBpbmRleDsgaW5kZXggKz0gaSkgaWYgKGluZGV4IGluIHNlbGYpIHtcbiAgICBtZW1vID0gY2FsbGJhY2tmbihtZW1vLCBzZWxmW2luZGV4XSwgaW5kZXgsIE8pO1xuICB9XG4gIHJldHVybiBtZW1vO1xufTtcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuL19pcy1hcnJheScpO1xudmFyIFNQRUNJRVMgPSByZXF1aXJlKCcuL193a3MnKSgnc3BlY2llcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvcmlnaW5hbCkge1xuICB2YXIgQztcbiAgaWYgKGlzQXJyYXkob3JpZ2luYWwpKSB7XG4gICAgQyA9IG9yaWdpbmFsLmNvbnN0cnVjdG9yO1xuICAgIC8vIGNyb3NzLXJlYWxtIGZhbGxiYWNrXG4gICAgaWYgKHR5cGVvZiBDID09ICdmdW5jdGlvbicgJiYgKEMgPT09IEFycmF5IHx8IGlzQXJyYXkoQy5wcm90b3R5cGUpKSkgQyA9IHVuZGVmaW5lZDtcbiAgICBpZiAoaXNPYmplY3QoQykpIHtcbiAgICAgIEMgPSBDW1NQRUNJRVNdO1xuICAgICAgaWYgKEMgPT09IG51bGwpIEMgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9IHJldHVybiBDID09PSB1bmRlZmluZWQgPyBBcnJheSA6IEM7XG59O1xuIiwiLy8gOS40LjIuMyBBcnJheVNwZWNpZXNDcmVhdGUob3JpZ2luYWxBcnJheSwgbGVuZ3RoKVxudmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4vX2FycmF5LXNwZWNpZXMtY29uc3RydWN0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob3JpZ2luYWwsIGxlbmd0aCkge1xuICByZXR1cm4gbmV3IChzcGVjaWVzQ29uc3RydWN0b3Iob3JpZ2luYWwpKShsZW5ndGgpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBpbnZva2UgPSByZXF1aXJlKCcuL19pbnZva2UnKTtcbnZhciBhcnJheVNsaWNlID0gW10uc2xpY2U7XG52YXIgZmFjdG9yaWVzID0ge307XG5cbnZhciBjb25zdHJ1Y3QgPSBmdW5jdGlvbiAoRiwgbGVuLCBhcmdzKSB7XG4gIGlmICghKGxlbiBpbiBmYWN0b3JpZXMpKSB7XG4gICAgZm9yICh2YXIgbiA9IFtdLCBpID0gMDsgaSA8IGxlbjsgaSsrKSBuW2ldID0gJ2FbJyArIGkgKyAnXSc7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jXG4gICAgZmFjdG9yaWVzW2xlbl0gPSBGdW5jdGlvbignRixhJywgJ3JldHVybiBuZXcgRignICsgbi5qb2luKCcsJykgKyAnKScpO1xuICB9IHJldHVybiBmYWN0b3JpZXNbbGVuXShGLCBhcmdzKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gRnVuY3Rpb24uYmluZCB8fCBmdW5jdGlvbiBiaW5kKHRoYXQgLyogLCAuLi5hcmdzICovKSB7XG4gIHZhciBmbiA9IGFGdW5jdGlvbih0aGlzKTtcbiAgdmFyIHBhcnRBcmdzID0gYXJyYXlTbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gIHZhciBib3VuZCA9IGZ1bmN0aW9uICgvKiBhcmdzLi4uICovKSB7XG4gICAgdmFyIGFyZ3MgPSBwYXJ0QXJncy5jb25jYXQoYXJyYXlTbGljZS5jYWxsKGFyZ3VtZW50cykpO1xuICAgIHJldHVybiB0aGlzIGluc3RhbmNlb2YgYm91bmQgPyBjb25zdHJ1Y3QoZm4sIGFyZ3MubGVuZ3RoLCBhcmdzKSA6IGludm9rZShmbiwgYXJncywgdGhhdCk7XG4gIH07XG4gIGlmIChpc09iamVjdChmbi5wcm90b3R5cGUpKSBib3VuZC5wcm90b3R5cGUgPSBmbi5wcm90b3R5cGU7XG4gIHJldHVybiBib3VuZDtcbn07XG4iLCIvLyBnZXR0aW5nIHRhZyBmcm9tIDE5LjEuMy42IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcoKVxudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xudmFyIFRBRyA9IHJlcXVpcmUoJy4vX3drcycpKCd0b1N0cmluZ1RhZycpO1xuLy8gRVMzIHdyb25nIGhlcmVcbnZhciBBUkcgPSBjb2YoZnVuY3Rpb24gKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpID09ICdBcmd1bWVudHMnO1xuXG4vLyBmYWxsYmFjayBmb3IgSUUxMSBTY3JpcHQgQWNjZXNzIERlbmllZCBlcnJvclxudmFyIHRyeUdldCA9IGZ1bmN0aW9uIChpdCwga2V5KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGl0W2tleV07XG4gIH0gY2F0Y2ggKGUpIHsgLyogZW1wdHkgKi8gfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIE8sIFQsIEI7XG4gIHJldHVybiBpdCA9PT0gdW5kZWZpbmVkID8gJ1VuZGVmaW5lZCcgOiBpdCA9PT0gbnVsbCA/ICdOdWxsJ1xuICAgIC8vIEBAdG9TdHJpbmdUYWcgY2FzZVxuICAgIDogdHlwZW9mIChUID0gdHJ5R2V0KE8gPSBPYmplY3QoaXQpLCBUQUcpKSA9PSAnc3RyaW5nJyA/IFRcbiAgICAvLyBidWlsdGluVGFnIGNhc2VcbiAgICA6IEFSRyA/IGNvZihPKVxuICAgIC8vIEVTMyBhcmd1bWVudHMgZmFsbGJhY2tcbiAgICA6IChCID0gY29mKE8pKSA9PSAnT2JqZWN0JyAmJiB0eXBlb2YgTy5jYWxsZWUgPT0gJ2Z1bmN0aW9uJyA/ICdBcmd1bWVudHMnIDogQjtcbn07XG4iLCJ2YXIgdG9TdHJpbmcgPSB7fS50b1N0cmluZztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwoaXQpLnNsaWNlKDgsIC0xKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKTtcbnZhciByZWRlZmluZUFsbCA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lLWFsbCcpO1xudmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuL19hbi1pbnN0YW5jZScpO1xudmFyIGZvck9mID0gcmVxdWlyZSgnLi9fZm9yLW9mJyk7XG52YXIgJGl0ZXJEZWZpbmUgPSByZXF1aXJlKCcuL19pdGVyLWRlZmluZScpO1xudmFyIHN0ZXAgPSByZXF1aXJlKCcuL19pdGVyLXN0ZXAnKTtcbnZhciBzZXRTcGVjaWVzID0gcmVxdWlyZSgnLi9fc2V0LXNwZWNpZXMnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyk7XG52YXIgZmFzdEtleSA9IHJlcXVpcmUoJy4vX21ldGEnKS5mYXN0S2V5O1xudmFyIHZhbGlkYXRlID0gcmVxdWlyZSgnLi9fdmFsaWRhdGUtY29sbGVjdGlvbicpO1xudmFyIFNJWkUgPSBERVNDUklQVE9SUyA/ICdfcycgOiAnc2l6ZSc7XG5cbnZhciBnZXRFbnRyeSA9IGZ1bmN0aW9uICh0aGF0LCBrZXkpIHtcbiAgLy8gZmFzdCBjYXNlXG4gIHZhciBpbmRleCA9IGZhc3RLZXkoa2V5KTtcbiAgdmFyIGVudHJ5O1xuICBpZiAoaW5kZXggIT09ICdGJykgcmV0dXJuIHRoYXQuX2lbaW5kZXhdO1xuICAvLyBmcm96ZW4gb2JqZWN0IGNhc2VcbiAgZm9yIChlbnRyeSA9IHRoYXQuX2Y7IGVudHJ5OyBlbnRyeSA9IGVudHJ5Lm4pIHtcbiAgICBpZiAoZW50cnkuayA9PSBrZXkpIHJldHVybiBlbnRyeTtcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGdldENvbnN0cnVjdG9yOiBmdW5jdGlvbiAod3JhcHBlciwgTkFNRSwgSVNfTUFQLCBBRERFUikge1xuICAgIHZhciBDID0gd3JhcHBlcihmdW5jdGlvbiAodGhhdCwgaXRlcmFibGUpIHtcbiAgICAgIGFuSW5zdGFuY2UodGhhdCwgQywgTkFNRSwgJ19pJyk7XG4gICAgICB0aGF0Ll90ID0gTkFNRTsgICAgICAgICAvLyBjb2xsZWN0aW9uIHR5cGVcbiAgICAgIHRoYXQuX2kgPSBjcmVhdGUobnVsbCk7IC8vIGluZGV4XG4gICAgICB0aGF0Ll9mID0gdW5kZWZpbmVkOyAgICAvLyBmaXJzdCBlbnRyeVxuICAgICAgdGhhdC5fbCA9IHVuZGVmaW5lZDsgICAgLy8gbGFzdCBlbnRyeVxuICAgICAgdGhhdFtTSVpFXSA9IDA7ICAgICAgICAgLy8gc2l6ZVxuICAgICAgaWYgKGl0ZXJhYmxlICE9IHVuZGVmaW5lZCkgZm9yT2YoaXRlcmFibGUsIElTX01BUCwgdGhhdFtBRERFUl0sIHRoYXQpO1xuICAgIH0pO1xuICAgIHJlZGVmaW5lQWxsKEMucHJvdG90eXBlLCB7XG4gICAgICAvLyAyMy4xLjMuMSBNYXAucHJvdG90eXBlLmNsZWFyKClcbiAgICAgIC8vIDIzLjIuMy4yIFNldC5wcm90b3R5cGUuY2xlYXIoKVxuICAgICAgY2xlYXI6IGZ1bmN0aW9uIGNsZWFyKCkge1xuICAgICAgICBmb3IgKHZhciB0aGF0ID0gdmFsaWRhdGUodGhpcywgTkFNRSksIGRhdGEgPSB0aGF0Ll9pLCBlbnRyeSA9IHRoYXQuX2Y7IGVudHJ5OyBlbnRyeSA9IGVudHJ5Lm4pIHtcbiAgICAgICAgICBlbnRyeS5yID0gdHJ1ZTtcbiAgICAgICAgICBpZiAoZW50cnkucCkgZW50cnkucCA9IGVudHJ5LnAubiA9IHVuZGVmaW5lZDtcbiAgICAgICAgICBkZWxldGUgZGF0YVtlbnRyeS5pXTtcbiAgICAgICAgfVxuICAgICAgICB0aGF0Ll9mID0gdGhhdC5fbCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhhdFtTSVpFXSA9IDA7XG4gICAgICB9LFxuICAgICAgLy8gMjMuMS4zLjMgTWFwLnByb3RvdHlwZS5kZWxldGUoa2V5KVxuICAgICAgLy8gMjMuMi4zLjQgU2V0LnByb3RvdHlwZS5kZWxldGUodmFsdWUpXG4gICAgICAnZGVsZXRlJzogZnVuY3Rpb24gKGtleSkge1xuICAgICAgICB2YXIgdGhhdCA9IHZhbGlkYXRlKHRoaXMsIE5BTUUpO1xuICAgICAgICB2YXIgZW50cnkgPSBnZXRFbnRyeSh0aGF0LCBrZXkpO1xuICAgICAgICBpZiAoZW50cnkpIHtcbiAgICAgICAgICB2YXIgbmV4dCA9IGVudHJ5Lm47XG4gICAgICAgICAgdmFyIHByZXYgPSBlbnRyeS5wO1xuICAgICAgICAgIGRlbGV0ZSB0aGF0Ll9pW2VudHJ5LmldO1xuICAgICAgICAgIGVudHJ5LnIgPSB0cnVlO1xuICAgICAgICAgIGlmIChwcmV2KSBwcmV2Lm4gPSBuZXh0O1xuICAgICAgICAgIGlmIChuZXh0KSBuZXh0LnAgPSBwcmV2O1xuICAgICAgICAgIGlmICh0aGF0Ll9mID09IGVudHJ5KSB0aGF0Ll9mID0gbmV4dDtcbiAgICAgICAgICBpZiAodGhhdC5fbCA9PSBlbnRyeSkgdGhhdC5fbCA9IHByZXY7XG4gICAgICAgICAgdGhhdFtTSVpFXS0tO1xuICAgICAgICB9IHJldHVybiAhIWVudHJ5O1xuICAgICAgfSxcbiAgICAgIC8vIDIzLjIuMy42IFNldC5wcm90b3R5cGUuZm9yRWFjaChjYWxsYmFja2ZuLCB0aGlzQXJnID0gdW5kZWZpbmVkKVxuICAgICAgLy8gMjMuMS4zLjUgTWFwLnByb3RvdHlwZS5mb3JFYWNoKGNhbGxiYWNrZm4sIHRoaXNBcmcgPSB1bmRlZmluZWQpXG4gICAgICBmb3JFYWNoOiBmdW5jdGlvbiBmb3JFYWNoKGNhbGxiYWNrZm4gLyogLCB0aGF0ID0gdW5kZWZpbmVkICovKSB7XG4gICAgICAgIHZhbGlkYXRlKHRoaXMsIE5BTUUpO1xuICAgICAgICB2YXIgZiA9IGN0eChjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCwgMyk7XG4gICAgICAgIHZhciBlbnRyeTtcbiAgICAgICAgd2hpbGUgKGVudHJ5ID0gZW50cnkgPyBlbnRyeS5uIDogdGhpcy5fZikge1xuICAgICAgICAgIGYoZW50cnkudiwgZW50cnkuaywgdGhpcyk7XG4gICAgICAgICAgLy8gcmV2ZXJ0IHRvIHRoZSBsYXN0IGV4aXN0aW5nIGVudHJ5XG4gICAgICAgICAgd2hpbGUgKGVudHJ5ICYmIGVudHJ5LnIpIGVudHJ5ID0gZW50cnkucDtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIC8vIDIzLjEuMy43IE1hcC5wcm90b3R5cGUuaGFzKGtleSlcbiAgICAgIC8vIDIzLjIuMy43IFNldC5wcm90b3R5cGUuaGFzKHZhbHVlKVxuICAgICAgaGFzOiBmdW5jdGlvbiBoYXMoa2V5KSB7XG4gICAgICAgIHJldHVybiAhIWdldEVudHJ5KHZhbGlkYXRlKHRoaXMsIE5BTUUpLCBrZXkpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmIChERVNDUklQVE9SUykgZFAoQy5wcm90b3R5cGUsICdzaXplJywge1xuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB2YWxpZGF0ZSh0aGlzLCBOQU1FKVtTSVpFXTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gQztcbiAgfSxcbiAgZGVmOiBmdW5jdGlvbiAodGhhdCwga2V5LCB2YWx1ZSkge1xuICAgIHZhciBlbnRyeSA9IGdldEVudHJ5KHRoYXQsIGtleSk7XG4gICAgdmFyIHByZXYsIGluZGV4O1xuICAgIC8vIGNoYW5nZSBleGlzdGluZyBlbnRyeVxuICAgIGlmIChlbnRyeSkge1xuICAgICAgZW50cnkudiA9IHZhbHVlO1xuICAgIC8vIGNyZWF0ZSBuZXcgZW50cnlcbiAgICB9IGVsc2Uge1xuICAgICAgdGhhdC5fbCA9IGVudHJ5ID0ge1xuICAgICAgICBpOiBpbmRleCA9IGZhc3RLZXkoa2V5LCB0cnVlKSwgLy8gPC0gaW5kZXhcbiAgICAgICAgazoga2V5LCAgICAgICAgICAgICAgICAgICAgICAgIC8vIDwtIGtleVxuICAgICAgICB2OiB2YWx1ZSwgICAgICAgICAgICAgICAgICAgICAgLy8gPC0gdmFsdWVcbiAgICAgICAgcDogcHJldiA9IHRoYXQuX2wsICAgICAgICAgICAgIC8vIDwtIHByZXZpb3VzIGVudHJ5XG4gICAgICAgIG46IHVuZGVmaW5lZCwgICAgICAgICAgICAgICAgICAvLyA8LSBuZXh0IGVudHJ5XG4gICAgICAgIHI6IGZhbHNlICAgICAgICAgICAgICAgICAgICAgICAvLyA8LSByZW1vdmVkXG4gICAgICB9O1xuICAgICAgaWYgKCF0aGF0Ll9mKSB0aGF0Ll9mID0gZW50cnk7XG4gICAgICBpZiAocHJldikgcHJldi5uID0gZW50cnk7XG4gICAgICB0aGF0W1NJWkVdKys7XG4gICAgICAvLyBhZGQgdG8gaW5kZXhcbiAgICAgIGlmIChpbmRleCAhPT0gJ0YnKSB0aGF0Ll9pW2luZGV4XSA9IGVudHJ5O1xuICAgIH0gcmV0dXJuIHRoYXQ7XG4gIH0sXG4gIGdldEVudHJ5OiBnZXRFbnRyeSxcbiAgc2V0U3Ryb25nOiBmdW5jdGlvbiAoQywgTkFNRSwgSVNfTUFQKSB7XG4gICAgLy8gYWRkIC5rZXlzLCAudmFsdWVzLCAuZW50cmllcywgW0BAaXRlcmF0b3JdXG4gICAgLy8gMjMuMS4zLjQsIDIzLjEuMy44LCAyMy4xLjMuMTEsIDIzLjEuMy4xMiwgMjMuMi4zLjUsIDIzLjIuMy44LCAyMy4yLjMuMTAsIDIzLjIuMy4xMVxuICAgICRpdGVyRGVmaW5lKEMsIE5BTUUsIGZ1bmN0aW9uIChpdGVyYXRlZCwga2luZCkge1xuICAgICAgdGhpcy5fdCA9IHZhbGlkYXRlKGl0ZXJhdGVkLCBOQU1FKTsgLy8gdGFyZ2V0XG4gICAgICB0aGlzLl9rID0ga2luZDsgICAgICAgICAgICAgICAgICAgICAvLyBraW5kXG4gICAgICB0aGlzLl9sID0gdW5kZWZpbmVkOyAgICAgICAgICAgICAgICAvLyBwcmV2aW91c1xuICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgIHZhciBraW5kID0gdGhhdC5faztcbiAgICAgIHZhciBlbnRyeSA9IHRoYXQuX2w7XG4gICAgICAvLyByZXZlcnQgdG8gdGhlIGxhc3QgZXhpc3RpbmcgZW50cnlcbiAgICAgIHdoaWxlIChlbnRyeSAmJiBlbnRyeS5yKSBlbnRyeSA9IGVudHJ5LnA7XG4gICAgICAvLyBnZXQgbmV4dCBlbnRyeVxuICAgICAgaWYgKCF0aGF0Ll90IHx8ICEodGhhdC5fbCA9IGVudHJ5ID0gZW50cnkgPyBlbnRyeS5uIDogdGhhdC5fdC5fZikpIHtcbiAgICAgICAgLy8gb3IgZmluaXNoIHRoZSBpdGVyYXRpb25cbiAgICAgICAgdGhhdC5fdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIHN0ZXAoMSk7XG4gICAgICB9XG4gICAgICAvLyByZXR1cm4gc3RlcCBieSBraW5kXG4gICAgICBpZiAoa2luZCA9PSAna2V5cycpIHJldHVybiBzdGVwKDAsIGVudHJ5LmspO1xuICAgICAgaWYgKGtpbmQgPT0gJ3ZhbHVlcycpIHJldHVybiBzdGVwKDAsIGVudHJ5LnYpO1xuICAgICAgcmV0dXJuIHN0ZXAoMCwgW2VudHJ5LmssIGVudHJ5LnZdKTtcbiAgICB9LCBJU19NQVAgPyAnZW50cmllcycgOiAndmFsdWVzJywgIUlTX01BUCwgdHJ1ZSk7XG5cbiAgICAvLyBhZGQgW0BAc3BlY2llc10sIDIzLjEuMi4yLCAyMy4yLjIuMlxuICAgIHNldFNwZWNpZXMoTkFNRSk7XG4gIH1cbn07XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vRGF2aWRCcnVhbnQvTWFwLVNldC5wcm90b3R5cGUudG9KU09OXG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4vX2NsYXNzb2YnKTtcbnZhciBmcm9tID0gcmVxdWlyZSgnLi9fYXJyYXktZnJvbS1pdGVyYWJsZScpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTkFNRSkge1xuICByZXR1cm4gZnVuY3Rpb24gdG9KU09OKCkge1xuICAgIGlmIChjbGFzc29mKHRoaXMpICE9IE5BTUUpIHRocm93IFR5cGVFcnJvcihOQU1FICsgXCIjdG9KU09OIGlzbid0IGdlbmVyaWNcIik7XG4gICAgcmV0dXJuIGZyb20odGhpcyk7XG4gIH07XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHJlZGVmaW5lQWxsID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUtYWxsJyk7XG52YXIgZ2V0V2VhayA9IHJlcXVpcmUoJy4vX21ldGEnKS5nZXRXZWFrO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBhbkluc3RhbmNlID0gcmVxdWlyZSgnLi9fYW4taW5zdGFuY2UnKTtcbnZhciBmb3JPZiA9IHJlcXVpcmUoJy4vX2Zvci1vZicpO1xudmFyIGNyZWF0ZUFycmF5TWV0aG9kID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpO1xudmFyICRoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciB2YWxpZGF0ZSA9IHJlcXVpcmUoJy4vX3ZhbGlkYXRlLWNvbGxlY3Rpb24nKTtcbnZhciBhcnJheUZpbmQgPSBjcmVhdGVBcnJheU1ldGhvZCg1KTtcbnZhciBhcnJheUZpbmRJbmRleCA9IGNyZWF0ZUFycmF5TWV0aG9kKDYpO1xudmFyIGlkID0gMDtcblxuLy8gZmFsbGJhY2sgZm9yIHVuY2F1Z2h0IGZyb3plbiBrZXlzXG52YXIgdW5jYXVnaHRGcm96ZW5TdG9yZSA9IGZ1bmN0aW9uICh0aGF0KSB7XG4gIHJldHVybiB0aGF0Ll9sIHx8ICh0aGF0Ll9sID0gbmV3IFVuY2F1Z2h0RnJvemVuU3RvcmUoKSk7XG59O1xudmFyIFVuY2F1Z2h0RnJvemVuU3RvcmUgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuYSA9IFtdO1xufTtcbnZhciBmaW5kVW5jYXVnaHRGcm96ZW4gPSBmdW5jdGlvbiAoc3RvcmUsIGtleSkge1xuICByZXR1cm4gYXJyYXlGaW5kKHN0b3JlLmEsIGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBpdFswXSA9PT0ga2V5O1xuICB9KTtcbn07XG5VbmNhdWdodEZyb3plblN0b3JlLnByb3RvdHlwZSA9IHtcbiAgZ2V0OiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIGVudHJ5ID0gZmluZFVuY2F1Z2h0RnJvemVuKHRoaXMsIGtleSk7XG4gICAgaWYgKGVudHJ5KSByZXR1cm4gZW50cnlbMV07XG4gIH0sXG4gIGhhczogZnVuY3Rpb24gKGtleSkge1xuICAgIHJldHVybiAhIWZpbmRVbmNhdWdodEZyb3plbih0aGlzLCBrZXkpO1xuICB9LFxuICBzZXQ6IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgdmFyIGVudHJ5ID0gZmluZFVuY2F1Z2h0RnJvemVuKHRoaXMsIGtleSk7XG4gICAgaWYgKGVudHJ5KSBlbnRyeVsxXSA9IHZhbHVlO1xuICAgIGVsc2UgdGhpcy5hLnB1c2goW2tleSwgdmFsdWVdKTtcbiAgfSxcbiAgJ2RlbGV0ZSc6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICB2YXIgaW5kZXggPSBhcnJheUZpbmRJbmRleCh0aGlzLmEsIGZ1bmN0aW9uIChpdCkge1xuICAgICAgcmV0dXJuIGl0WzBdID09PSBrZXk7XG4gICAgfSk7XG4gICAgaWYgKH5pbmRleCkgdGhpcy5hLnNwbGljZShpbmRleCwgMSk7XG4gICAgcmV0dXJuICEhfmluZGV4O1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZ2V0Q29uc3RydWN0b3I6IGZ1bmN0aW9uICh3cmFwcGVyLCBOQU1FLCBJU19NQVAsIEFEREVSKSB7XG4gICAgdmFyIEMgPSB3cmFwcGVyKGZ1bmN0aW9uICh0aGF0LCBpdGVyYWJsZSkge1xuICAgICAgYW5JbnN0YW5jZSh0aGF0LCBDLCBOQU1FLCAnX2knKTtcbiAgICAgIHRoYXQuX3QgPSBOQU1FOyAgICAgIC8vIGNvbGxlY3Rpb24gdHlwZVxuICAgICAgdGhhdC5faSA9IGlkKys7ICAgICAgLy8gY29sbGVjdGlvbiBpZFxuICAgICAgdGhhdC5fbCA9IHVuZGVmaW5lZDsgLy8gbGVhayBzdG9yZSBmb3IgdW5jYXVnaHQgZnJvemVuIG9iamVjdHNcbiAgICAgIGlmIChpdGVyYWJsZSAhPSB1bmRlZmluZWQpIGZvck9mKGl0ZXJhYmxlLCBJU19NQVAsIHRoYXRbQURERVJdLCB0aGF0KTtcbiAgICB9KTtcbiAgICByZWRlZmluZUFsbChDLnByb3RvdHlwZSwge1xuICAgICAgLy8gMjMuMy4zLjIgV2Vha01hcC5wcm90b3R5cGUuZGVsZXRlKGtleSlcbiAgICAgIC8vIDIzLjQuMy4zIFdlYWtTZXQucHJvdG90eXBlLmRlbGV0ZSh2YWx1ZSlcbiAgICAgICdkZWxldGUnOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIGlmICghaXNPYmplY3Qoa2V5KSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICB2YXIgZGF0YSA9IGdldFdlYWsoa2V5KTtcbiAgICAgICAgaWYgKGRhdGEgPT09IHRydWUpIHJldHVybiB1bmNhdWdodEZyb3plblN0b3JlKHZhbGlkYXRlKHRoaXMsIE5BTUUpKVsnZGVsZXRlJ10oa2V5KTtcbiAgICAgICAgcmV0dXJuIGRhdGEgJiYgJGhhcyhkYXRhLCB0aGlzLl9pKSAmJiBkZWxldGUgZGF0YVt0aGlzLl9pXTtcbiAgICAgIH0sXG4gICAgICAvLyAyMy4zLjMuNCBXZWFrTWFwLnByb3RvdHlwZS5oYXMoa2V5KVxuICAgICAgLy8gMjMuNC4zLjQgV2Vha1NldC5wcm90b3R5cGUuaGFzKHZhbHVlKVxuICAgICAgaGFzOiBmdW5jdGlvbiBoYXMoa2V5KSB7XG4gICAgICAgIGlmICghaXNPYmplY3Qoa2V5KSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICB2YXIgZGF0YSA9IGdldFdlYWsoa2V5KTtcbiAgICAgICAgaWYgKGRhdGEgPT09IHRydWUpIHJldHVybiB1bmNhdWdodEZyb3plblN0b3JlKHZhbGlkYXRlKHRoaXMsIE5BTUUpKS5oYXMoa2V5KTtcbiAgICAgICAgcmV0dXJuIGRhdGEgJiYgJGhhcyhkYXRhLCB0aGlzLl9pKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gQztcbiAgfSxcbiAgZGVmOiBmdW5jdGlvbiAodGhhdCwga2V5LCB2YWx1ZSkge1xuICAgIHZhciBkYXRhID0gZ2V0V2Vhayhhbk9iamVjdChrZXkpLCB0cnVlKTtcbiAgICBpZiAoZGF0YSA9PT0gdHJ1ZSkgdW5jYXVnaHRGcm96ZW5TdG9yZSh0aGF0KS5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgZWxzZSBkYXRhW3RoYXQuX2ldID0gdmFsdWU7XG4gICAgcmV0dXJuIHRoYXQ7XG4gIH0sXG4gIHVmc3RvcmU6IHVuY2F1Z2h0RnJvemVuU3RvcmVcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUnKTtcbnZhciByZWRlZmluZUFsbCA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lLWFsbCcpO1xudmFyIG1ldGEgPSByZXF1aXJlKCcuL19tZXRhJyk7XG52YXIgZm9yT2YgPSByZXF1aXJlKCcuL19mb3Itb2YnKTtcbnZhciBhbkluc3RhbmNlID0gcmVxdWlyZSgnLi9fYW4taW5zdGFuY2UnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciAkaXRlckRldGVjdCA9IHJlcXVpcmUoJy4vX2l0ZXItZGV0ZWN0Jyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuL19zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIGluaGVyaXRJZlJlcXVpcmVkID0gcmVxdWlyZSgnLi9faW5oZXJpdC1pZi1yZXF1aXJlZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChOQU1FLCB3cmFwcGVyLCBtZXRob2RzLCBjb21tb24sIElTX01BUCwgSVNfV0VBSykge1xuICB2YXIgQmFzZSA9IGdsb2JhbFtOQU1FXTtcbiAgdmFyIEMgPSBCYXNlO1xuICB2YXIgQURERVIgPSBJU19NQVAgPyAnc2V0JyA6ICdhZGQnO1xuICB2YXIgcHJvdG8gPSBDICYmIEMucHJvdG90eXBlO1xuICB2YXIgTyA9IHt9O1xuICB2YXIgZml4TWV0aG9kID0gZnVuY3Rpb24gKEtFWSkge1xuICAgIHZhciBmbiA9IHByb3RvW0tFWV07XG4gICAgcmVkZWZpbmUocHJvdG8sIEtFWSxcbiAgICAgIEtFWSA9PSAnZGVsZXRlJyA/IGZ1bmN0aW9uIChhKSB7XG4gICAgICAgIHJldHVybiBJU19XRUFLICYmICFpc09iamVjdChhKSA/IGZhbHNlIDogZm4uY2FsbCh0aGlzLCBhID09PSAwID8gMCA6IGEpO1xuICAgICAgfSA6IEtFWSA9PSAnaGFzJyA/IGZ1bmN0aW9uIGhhcyhhKSB7XG4gICAgICAgIHJldHVybiBJU19XRUFLICYmICFpc09iamVjdChhKSA/IGZhbHNlIDogZm4uY2FsbCh0aGlzLCBhID09PSAwID8gMCA6IGEpO1xuICAgICAgfSA6IEtFWSA9PSAnZ2V0JyA/IGZ1bmN0aW9uIGdldChhKSB7XG4gICAgICAgIHJldHVybiBJU19XRUFLICYmICFpc09iamVjdChhKSA/IHVuZGVmaW5lZCA6IGZuLmNhbGwodGhpcywgYSA9PT0gMCA/IDAgOiBhKTtcbiAgICAgIH0gOiBLRVkgPT0gJ2FkZCcgPyBmdW5jdGlvbiBhZGQoYSkgeyBmbi5jYWxsKHRoaXMsIGEgPT09IDAgPyAwIDogYSk7IHJldHVybiB0aGlzOyB9XG4gICAgICAgIDogZnVuY3Rpb24gc2V0KGEsIGIpIHsgZm4uY2FsbCh0aGlzLCBhID09PSAwID8gMCA6IGEsIGIpOyByZXR1cm4gdGhpczsgfVxuICAgICk7XG4gIH07XG4gIGlmICh0eXBlb2YgQyAhPSAnZnVuY3Rpb24nIHx8ICEoSVNfV0VBSyB8fCBwcm90by5mb3JFYWNoICYmICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgbmV3IEMoKS5lbnRyaWVzKCkubmV4dCgpO1xuICB9KSkpIHtcbiAgICAvLyBjcmVhdGUgY29sbGVjdGlvbiBjb25zdHJ1Y3RvclxuICAgIEMgPSBjb21tb24uZ2V0Q29uc3RydWN0b3Iod3JhcHBlciwgTkFNRSwgSVNfTUFQLCBBRERFUik7XG4gICAgcmVkZWZpbmVBbGwoQy5wcm90b3R5cGUsIG1ldGhvZHMpO1xuICAgIG1ldGEuTkVFRCA9IHRydWU7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGluc3RhbmNlID0gbmV3IEMoKTtcbiAgICAvLyBlYXJseSBpbXBsZW1lbnRhdGlvbnMgbm90IHN1cHBvcnRzIGNoYWluaW5nXG4gICAgdmFyIEhBU05UX0NIQUlOSU5HID0gaW5zdGFuY2VbQURERVJdKElTX1dFQUsgPyB7fSA6IC0wLCAxKSAhPSBpbnN0YW5jZTtcbiAgICAvLyBWOCB+ICBDaHJvbWl1bSA0MC0gd2Vhay1jb2xsZWN0aW9ucyB0aHJvd3Mgb24gcHJpbWl0aXZlcywgYnV0IHNob3VsZCByZXR1cm4gZmFsc2VcbiAgICB2YXIgVEhST1dTX09OX1BSSU1JVElWRVMgPSBmYWlscyhmdW5jdGlvbiAoKSB7IGluc3RhbmNlLmhhcygxKTsgfSk7XG4gICAgLy8gbW9zdCBlYXJseSBpbXBsZW1lbnRhdGlvbnMgZG9lc24ndCBzdXBwb3J0cyBpdGVyYWJsZXMsIG1vc3QgbW9kZXJuIC0gbm90IGNsb3NlIGl0IGNvcnJlY3RseVxuICAgIHZhciBBQ0NFUFRfSVRFUkFCTEVTID0gJGl0ZXJEZXRlY3QoZnVuY3Rpb24gKGl0ZXIpIHsgbmV3IEMoaXRlcik7IH0pOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgIC8vIGZvciBlYXJseSBpbXBsZW1lbnRhdGlvbnMgLTAgYW5kICswIG5vdCB0aGUgc2FtZVxuICAgIHZhciBCVUdHWV9aRVJPID0gIUlTX1dFQUsgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgICAgLy8gVjggfiBDaHJvbWl1bSA0Mi0gZmFpbHMgb25seSB3aXRoIDUrIGVsZW1lbnRzXG4gICAgICB2YXIgJGluc3RhbmNlID0gbmV3IEMoKTtcbiAgICAgIHZhciBpbmRleCA9IDU7XG4gICAgICB3aGlsZSAoaW5kZXgtLSkgJGluc3RhbmNlW0FEREVSXShpbmRleCwgaW5kZXgpO1xuICAgICAgcmV0dXJuICEkaW5zdGFuY2UuaGFzKC0wKTtcbiAgICB9KTtcbiAgICBpZiAoIUFDQ0VQVF9JVEVSQUJMRVMpIHtcbiAgICAgIEMgPSB3cmFwcGVyKGZ1bmN0aW9uICh0YXJnZXQsIGl0ZXJhYmxlKSB7XG4gICAgICAgIGFuSW5zdGFuY2UodGFyZ2V0LCBDLCBOQU1FKTtcbiAgICAgICAgdmFyIHRoYXQgPSBpbmhlcml0SWZSZXF1aXJlZChuZXcgQmFzZSgpLCB0YXJnZXQsIEMpO1xuICAgICAgICBpZiAoaXRlcmFibGUgIT0gdW5kZWZpbmVkKSBmb3JPZihpdGVyYWJsZSwgSVNfTUFQLCB0aGF0W0FEREVSXSwgdGhhdCk7XG4gICAgICAgIHJldHVybiB0aGF0O1xuICAgICAgfSk7XG4gICAgICBDLnByb3RvdHlwZSA9IHByb3RvO1xuICAgICAgcHJvdG8uY29uc3RydWN0b3IgPSBDO1xuICAgIH1cbiAgICBpZiAoVEhST1dTX09OX1BSSU1JVElWRVMgfHwgQlVHR1lfWkVSTykge1xuICAgICAgZml4TWV0aG9kKCdkZWxldGUnKTtcbiAgICAgIGZpeE1ldGhvZCgnaGFzJyk7XG4gICAgICBJU19NQVAgJiYgZml4TWV0aG9kKCdnZXQnKTtcbiAgICB9XG4gICAgaWYgKEJVR0dZX1pFUk8gfHwgSEFTTlRfQ0hBSU5JTkcpIGZpeE1ldGhvZChBRERFUik7XG4gICAgLy8gd2VhayBjb2xsZWN0aW9ucyBzaG91bGQgbm90IGNvbnRhaW5zIC5jbGVhciBtZXRob2RcbiAgICBpZiAoSVNfV0VBSyAmJiBwcm90by5jbGVhcikgZGVsZXRlIHByb3RvLmNsZWFyO1xuICB9XG5cbiAgc2V0VG9TdHJpbmdUYWcoQywgTkFNRSk7XG5cbiAgT1tOQU1FXSA9IEM7XG4gICRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5XICsgJGV4cG9ydC5GICogKEMgIT0gQmFzZSksIE8pO1xuXG4gIGlmICghSVNfV0VBSykgY29tbW9uLnNldFN0cm9uZyhDLCBOQU1FLCBJU19NQVApO1xuXG4gIHJldHVybiBDO1xufTtcbiIsInZhciBjb3JlID0gbW9kdWxlLmV4cG9ydHMgPSB7IHZlcnNpb246ICcyLjYuNCcgfTtcbmlmICh0eXBlb2YgX19lID09ICdudW1iZXInKSBfX2UgPSBjb3JlOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmXG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG52YXIgY3JlYXRlRGVzYyA9IHJlcXVpcmUoJy4vX3Byb3BlcnR5LWRlc2MnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBpbmRleCwgdmFsdWUpIHtcbiAgaWYgKGluZGV4IGluIG9iamVjdCkgJGRlZmluZVByb3BlcnR5LmYob2JqZWN0LCBpbmRleCwgY3JlYXRlRGVzYygwLCB2YWx1ZSkpO1xuICBlbHNlIG9iamVjdFtpbmRleF0gPSB2YWx1ZTtcbn07XG4iLCIvLyBvcHRpb25hbCAvIHNpbXBsZSBjb250ZXh0IGJpbmRpbmdcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChmbiwgdGhhdCwgbGVuZ3RoKSB7XG4gIGFGdW5jdGlvbihmbik7XG4gIGlmICh0aGF0ID09PSB1bmRlZmluZWQpIHJldHVybiBmbjtcbiAgc3dpdGNoIChsZW5ndGgpIHtcbiAgICBjYXNlIDE6IHJldHVybiBmdW5jdGlvbiAoYSkge1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSk7XG4gICAgfTtcbiAgICBjYXNlIDI6IHJldHVybiBmdW5jdGlvbiAoYSwgYikge1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSwgYik7XG4gICAgfTtcbiAgICBjYXNlIDM6IHJldHVybiBmdW5jdGlvbiAoYSwgYiwgYykge1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSwgYiwgYyk7XG4gICAgfTtcbiAgfVxuICByZXR1cm4gZnVuY3Rpb24gKC8qIC4uLmFyZ3MgKi8pIHtcbiAgICByZXR1cm4gZm4uYXBwbHkodGhhdCwgYXJndW1lbnRzKTtcbiAgfTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vLyAyMC4zLjQuMzYgLyAxNS45LjUuNDMgRGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmcoKVxudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciBnZXRUaW1lID0gRGF0ZS5wcm90b3R5cGUuZ2V0VGltZTtcbnZhciAkdG9JU09TdHJpbmcgPSBEYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZztcblxudmFyIGx6ID0gZnVuY3Rpb24gKG51bSkge1xuICByZXR1cm4gbnVtID4gOSA/IG51bSA6ICcwJyArIG51bTtcbn07XG5cbi8vIFBoYW50b21KUyAvIG9sZCBXZWJLaXQgaGFzIGEgYnJva2VuIGltcGxlbWVudGF0aW9uc1xubW9kdWxlLmV4cG9ydHMgPSAoZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gJHRvSVNPU3RyaW5nLmNhbGwobmV3IERhdGUoLTVlMTMgLSAxKSkgIT0gJzAzODUtMDctMjVUMDc6MDY6MzkuOTk5Wic7XG59KSB8fCAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAkdG9JU09TdHJpbmcuY2FsbChuZXcgRGF0ZShOYU4pKTtcbn0pKSA/IGZ1bmN0aW9uIHRvSVNPU3RyaW5nKCkge1xuICBpZiAoIWlzRmluaXRlKGdldFRpbWUuY2FsbCh0aGlzKSkpIHRocm93IFJhbmdlRXJyb3IoJ0ludmFsaWQgdGltZSB2YWx1ZScpO1xuICB2YXIgZCA9IHRoaXM7XG4gIHZhciB5ID0gZC5nZXRVVENGdWxsWWVhcigpO1xuICB2YXIgbSA9IGQuZ2V0VVRDTWlsbGlzZWNvbmRzKCk7XG4gIHZhciBzID0geSA8IDAgPyAnLScgOiB5ID4gOTk5OSA/ICcrJyA6ICcnO1xuICByZXR1cm4gcyArICgnMDAwMDAnICsgTWF0aC5hYnMoeSkpLnNsaWNlKHMgPyAtNiA6IC00KSArXG4gICAgJy0nICsgbHooZC5nZXRVVENNb250aCgpICsgMSkgKyAnLScgKyBseihkLmdldFVUQ0RhdGUoKSkgK1xuICAgICdUJyArIGx6KGQuZ2V0VVRDSG91cnMoKSkgKyAnOicgKyBseihkLmdldFVUQ01pbnV0ZXMoKSkgK1xuICAgICc6JyArIGx6KGQuZ2V0VVRDU2Vjb25kcygpKSArICcuJyArIChtID4gOTkgPyBtIDogJzAnICsgbHoobSkpICsgJ1onO1xufSA6ICR0b0lTT1N0cmluZztcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG52YXIgTlVNQkVSID0gJ251bWJlcic7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGhpbnQpIHtcbiAgaWYgKGhpbnQgIT09ICdzdHJpbmcnICYmIGhpbnQgIT09IE5VTUJFUiAmJiBoaW50ICE9PSAnZGVmYXVsdCcpIHRocm93IFR5cGVFcnJvcignSW5jb3JyZWN0IGhpbnQnKTtcbiAgcmV0dXJuIHRvUHJpbWl0aXZlKGFuT2JqZWN0KHRoaXMpLCBoaW50ICE9IE5VTUJFUik7XG59O1xuIiwiLy8gNy4yLjEgUmVxdWlyZU9iamVjdENvZXJjaWJsZShhcmd1bWVudClcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpdCA9PSB1bmRlZmluZWQpIHRocm93IFR5cGVFcnJvcihcIkNhbid0IGNhbGwgbWV0aG9kIG9uICBcIiArIGl0KTtcbiAgcmV0dXJuIGl0O1xufTtcbiIsIi8vIFRoYW5rJ3MgSUU4IGZvciBoaXMgZnVubnkgZGVmaW5lUHJvcGVydHlcbm1vZHVsZS5leHBvcnRzID0gIXJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCAnYScsIHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9IH0pLmEgIT0gNztcbn0pO1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgZG9jdW1lbnQgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5kb2N1bWVudDtcbi8vIHR5cGVvZiBkb2N1bWVudC5jcmVhdGVFbGVtZW50IGlzICdvYmplY3QnIGluIG9sZCBJRVxudmFyIGlzID0gaXNPYmplY3QoZG9jdW1lbnQpICYmIGlzT2JqZWN0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGlzID8gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChpdCkgOiB7fTtcbn07XG4iLCIvLyBJRSA4LSBkb24ndCBlbnVtIGJ1ZyBrZXlzXG5tb2R1bGUuZXhwb3J0cyA9IChcbiAgJ2NvbnN0cnVjdG9yLGhhc093blByb3BlcnR5LGlzUHJvdG90eXBlT2YscHJvcGVydHlJc0VudW1lcmFibGUsdG9Mb2NhbGVTdHJpbmcsdG9TdHJpbmcsdmFsdWVPZidcbikuc3BsaXQoJywnKTtcbiIsIi8vIGFsbCBlbnVtZXJhYmxlIG9iamVjdCBrZXlzLCBpbmNsdWRlcyBzeW1ib2xzXG52YXIgZ2V0S2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG52YXIgZ09QUyA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BzJyk7XG52YXIgcElFID0gcmVxdWlyZSgnLi9fb2JqZWN0LXBpZScpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIHJlc3VsdCA9IGdldEtleXMoaXQpO1xuICB2YXIgZ2V0U3ltYm9scyA9IGdPUFMuZjtcbiAgaWYgKGdldFN5bWJvbHMpIHtcbiAgICB2YXIgc3ltYm9scyA9IGdldFN5bWJvbHMoaXQpO1xuICAgIHZhciBpc0VudW0gPSBwSUUuZjtcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIGtleTtcbiAgICB3aGlsZSAoc3ltYm9scy5sZW5ndGggPiBpKSBpZiAoaXNFbnVtLmNhbGwoaXQsIGtleSA9IHN5bWJvbHNbaSsrXSkpIHJlc3VsdC5wdXNoKGtleSk7XG4gIH0gcmV0dXJuIHJlc3VsdDtcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgY29yZSA9IHJlcXVpcmUoJy4vX2NvcmUnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUnKTtcbnZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbnZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcblxudmFyICRleHBvcnQgPSBmdW5jdGlvbiAodHlwZSwgbmFtZSwgc291cmNlKSB7XG4gIHZhciBJU19GT1JDRUQgPSB0eXBlICYgJGV4cG9ydC5GO1xuICB2YXIgSVNfR0xPQkFMID0gdHlwZSAmICRleHBvcnQuRztcbiAgdmFyIElTX1NUQVRJQyA9IHR5cGUgJiAkZXhwb3J0LlM7XG4gIHZhciBJU19QUk9UTyA9IHR5cGUgJiAkZXhwb3J0LlA7XG4gIHZhciBJU19CSU5EID0gdHlwZSAmICRleHBvcnQuQjtcbiAgdmFyIHRhcmdldCA9IElTX0dMT0JBTCA/IGdsb2JhbCA6IElTX1NUQVRJQyA/IGdsb2JhbFtuYW1lXSB8fCAoZ2xvYmFsW25hbWVdID0ge30pIDogKGdsb2JhbFtuYW1lXSB8fCB7fSlbUFJPVE9UWVBFXTtcbiAgdmFyIGV4cG9ydHMgPSBJU19HTE9CQUwgPyBjb3JlIDogY29yZVtuYW1lXSB8fCAoY29yZVtuYW1lXSA9IHt9KTtcbiAgdmFyIGV4cFByb3RvID0gZXhwb3J0c1tQUk9UT1RZUEVdIHx8IChleHBvcnRzW1BST1RPVFlQRV0gPSB7fSk7XG4gIHZhciBrZXksIG93biwgb3V0LCBleHA7XG4gIGlmIChJU19HTE9CQUwpIHNvdXJjZSA9IG5hbWU7XG4gIGZvciAoa2V5IGluIHNvdXJjZSkge1xuICAgIC8vIGNvbnRhaW5zIGluIG5hdGl2ZVxuICAgIG93biA9ICFJU19GT1JDRUQgJiYgdGFyZ2V0ICYmIHRhcmdldFtrZXldICE9PSB1bmRlZmluZWQ7XG4gICAgLy8gZXhwb3J0IG5hdGl2ZSBvciBwYXNzZWRcbiAgICBvdXQgPSAob3duID8gdGFyZ2V0IDogc291cmNlKVtrZXldO1xuICAgIC8vIGJpbmQgdGltZXJzIHRvIGdsb2JhbCBmb3IgY2FsbCBmcm9tIGV4cG9ydCBjb250ZXh0XG4gICAgZXhwID0gSVNfQklORCAmJiBvd24gPyBjdHgob3V0LCBnbG9iYWwpIDogSVNfUFJPVE8gJiYgdHlwZW9mIG91dCA9PSAnZnVuY3Rpb24nID8gY3R4KEZ1bmN0aW9uLmNhbGwsIG91dCkgOiBvdXQ7XG4gICAgLy8gZXh0ZW5kIGdsb2JhbFxuICAgIGlmICh0YXJnZXQpIHJlZGVmaW5lKHRhcmdldCwga2V5LCBvdXQsIHR5cGUgJiAkZXhwb3J0LlUpO1xuICAgIC8vIGV4cG9ydFxuICAgIGlmIChleHBvcnRzW2tleV0gIT0gb3V0KSBoaWRlKGV4cG9ydHMsIGtleSwgZXhwKTtcbiAgICBpZiAoSVNfUFJPVE8gJiYgZXhwUHJvdG9ba2V5XSAhPSBvdXQpIGV4cFByb3RvW2tleV0gPSBvdXQ7XG4gIH1cbn07XG5nbG9iYWwuY29yZSA9IGNvcmU7XG4vLyB0eXBlIGJpdG1hcFxuJGV4cG9ydC5GID0gMTsgICAvLyBmb3JjZWRcbiRleHBvcnQuRyA9IDI7ICAgLy8gZ2xvYmFsXG4kZXhwb3J0LlMgPSA0OyAgIC8vIHN0YXRpY1xuJGV4cG9ydC5QID0gODsgICAvLyBwcm90b1xuJGV4cG9ydC5CID0gMTY7ICAvLyBiaW5kXG4kZXhwb3J0LlcgPSAzMjsgIC8vIHdyYXBcbiRleHBvcnQuVSA9IDY0OyAgLy8gc2FmZVxuJGV4cG9ydC5SID0gMTI4OyAvLyByZWFsIHByb3RvIG1ldGhvZCBmb3IgYGxpYnJhcnlgXG5tb2R1bGUuZXhwb3J0cyA9ICRleHBvcnQ7XG4iLCJ2YXIgTUFUQ0ggPSByZXF1aXJlKCcuL193a3MnKSgnbWF0Y2gnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEtFWSkge1xuICB2YXIgcmUgPSAvLi87XG4gIHRyeSB7XG4gICAgJy8uLydbS0VZXShyZSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB0cnkge1xuICAgICAgcmVbTUFUQ0hdID0gZmFsc2U7XG4gICAgICByZXR1cm4gIScvLi8nW0tFWV0ocmUpO1xuICAgIH0gY2F0Y2ggKGYpIHsgLyogZW1wdHkgKi8gfVxuICB9IHJldHVybiB0cnVlO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gISFleGVjKCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4vZXM2LnJlZ2V4cC5leGVjJyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG52YXIgd2tzID0gcmVxdWlyZSgnLi9fd2tzJyk7XG52YXIgcmVnZXhwRXhlYyA9IHJlcXVpcmUoJy4vX3JlZ2V4cC1leGVjJyk7XG5cbnZhciBTUEVDSUVTID0gd2tzKCdzcGVjaWVzJyk7XG5cbnZhciBSRVBMQUNFX1NVUFBPUlRTX05BTUVEX0dST1VQUyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vICNyZXBsYWNlIG5lZWRzIGJ1aWx0LWluIHN1cHBvcnQgZm9yIG5hbWVkIGdyb3Vwcy5cbiAgLy8gI21hdGNoIHdvcmtzIGZpbmUgYmVjYXVzZSBpdCBqdXN0IHJldHVybiB0aGUgZXhlYyByZXN1bHRzLCBldmVuIGlmIGl0IGhhc1xuICAvLyBhIFwiZ3JvcHNcIiBwcm9wZXJ0eS5cbiAgdmFyIHJlID0gLy4vO1xuICByZS5leGVjID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICByZXN1bHQuZ3JvdXBzID0geyBhOiAnNycgfTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuICByZXR1cm4gJycucmVwbGFjZShyZSwgJyQ8YT4nKSAhPT0gJzcnO1xufSk7XG5cbnZhciBTUExJVF9XT1JLU19XSVRIX09WRVJXUklUVEVOX0VYRUMgPSAoZnVuY3Rpb24gKCkge1xuICAvLyBDaHJvbWUgNTEgaGFzIGEgYnVnZ3kgXCJzcGxpdFwiIGltcGxlbWVudGF0aW9uIHdoZW4gUmVnRXhwI2V4ZWMgIT09IG5hdGl2ZUV4ZWNcbiAgdmFyIHJlID0gLyg/OikvO1xuICB2YXIgb3JpZ2luYWxFeGVjID0gcmUuZXhlYztcbiAgcmUuZXhlYyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG9yaWdpbmFsRXhlYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9O1xuICB2YXIgcmVzdWx0ID0gJ2FiJy5zcGxpdChyZSk7XG4gIHJldHVybiByZXN1bHQubGVuZ3RoID09PSAyICYmIHJlc3VsdFswXSA9PT0gJ2EnICYmIHJlc3VsdFsxXSA9PT0gJ2InO1xufSkoKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoS0VZLCBsZW5ndGgsIGV4ZWMpIHtcbiAgdmFyIFNZTUJPTCA9IHdrcyhLRVkpO1xuXG4gIHZhciBERUxFR0FURVNfVE9fU1lNQk9MID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAvLyBTdHJpbmcgbWV0aG9kcyBjYWxsIHN5bWJvbC1uYW1lZCBSZWdFcCBtZXRob2RzXG4gICAgdmFyIE8gPSB7fTtcbiAgICBPW1NZTUJPTF0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9O1xuICAgIHJldHVybiAnJ1tLRVldKE8pICE9IDc7XG4gIH0pO1xuXG4gIHZhciBERUxFR0FURVNfVE9fRVhFQyA9IERFTEVHQVRFU19UT19TWU1CT0wgPyAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIC8vIFN5bWJvbC1uYW1lZCBSZWdFeHAgbWV0aG9kcyBjYWxsIC5leGVjXG4gICAgdmFyIGV4ZWNDYWxsZWQgPSBmYWxzZTtcbiAgICB2YXIgcmUgPSAvYS87XG4gICAgcmUuZXhlYyA9IGZ1bmN0aW9uICgpIHsgZXhlY0NhbGxlZCA9IHRydWU7IHJldHVybiBudWxsOyB9O1xuICAgIGlmIChLRVkgPT09ICdzcGxpdCcpIHtcbiAgICAgIC8vIFJlZ0V4cFtAQHNwbGl0XSBkb2Vzbid0IGNhbGwgdGhlIHJlZ2V4J3MgZXhlYyBtZXRob2QsIGJ1dCBmaXJzdCBjcmVhdGVzXG4gICAgICAvLyBhIG5ldyBvbmUuIFdlIG5lZWQgdG8gcmV0dXJuIHRoZSBwYXRjaGVkIHJlZ2V4IHdoZW4gY3JlYXRpbmcgdGhlIG5ldyBvbmUuXG4gICAgICByZS5jb25zdHJ1Y3RvciA9IHt9O1xuICAgICAgcmUuY29uc3RydWN0b3JbU1BFQ0lFU10gPSBmdW5jdGlvbiAoKSB7IHJldHVybiByZTsgfTtcbiAgICB9XG4gICAgcmVbU1lNQk9MXSgnJyk7XG4gICAgcmV0dXJuICFleGVjQ2FsbGVkO1xuICB9KSA6IHVuZGVmaW5lZDtcblxuICBpZiAoXG4gICAgIURFTEVHQVRFU19UT19TWU1CT0wgfHxcbiAgICAhREVMRUdBVEVTX1RPX0VYRUMgfHxcbiAgICAoS0VZID09PSAncmVwbGFjZScgJiYgIVJFUExBQ0VfU1VQUE9SVFNfTkFNRURfR1JPVVBTKSB8fFxuICAgIChLRVkgPT09ICdzcGxpdCcgJiYgIVNQTElUX1dPUktTX1dJVEhfT1ZFUldSSVRURU5fRVhFQylcbiAgKSB7XG4gICAgdmFyIG5hdGl2ZVJlZ0V4cE1ldGhvZCA9IC8uL1tTWU1CT0xdO1xuICAgIHZhciBmbnMgPSBleGVjKFxuICAgICAgZGVmaW5lZCxcbiAgICAgIFNZTUJPTCxcbiAgICAgICcnW0tFWV0sXG4gICAgICBmdW5jdGlvbiBtYXliZUNhbGxOYXRpdmUobmF0aXZlTWV0aG9kLCByZWdleHAsIHN0ciwgYXJnMiwgZm9yY2VTdHJpbmdNZXRob2QpIHtcbiAgICAgICAgaWYgKHJlZ2V4cC5leGVjID09PSByZWdleHBFeGVjKSB7XG4gICAgICAgICAgaWYgKERFTEVHQVRFU19UT19TWU1CT0wgJiYgIWZvcmNlU3RyaW5nTWV0aG9kKSB7XG4gICAgICAgICAgICAvLyBUaGUgbmF0aXZlIFN0cmluZyBtZXRob2QgYWxyZWFkeSBkZWxlZ2F0ZXMgdG8gQEBtZXRob2QgKHRoaXNcbiAgICAgICAgICAgIC8vIHBvbHlmaWxsZWQgZnVuY3Rpb24pLCBsZWFzaW5nIHRvIGluZmluaXRlIHJlY3Vyc2lvbi5cbiAgICAgICAgICAgIC8vIFdlIGF2b2lkIGl0IGJ5IGRpcmVjdGx5IGNhbGxpbmcgdGhlIG5hdGl2ZSBAQG1ldGhvZCBtZXRob2QuXG4gICAgICAgICAgICByZXR1cm4geyBkb25lOiB0cnVlLCB2YWx1ZTogbmF0aXZlUmVnRXhwTWV0aG9kLmNhbGwocmVnZXhwLCBzdHIsIGFyZzIpIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB7IGRvbmU6IHRydWUsIHZhbHVlOiBuYXRpdmVNZXRob2QuY2FsbChzdHIsIHJlZ2V4cCwgYXJnMikgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBkb25lOiBmYWxzZSB9O1xuICAgICAgfVxuICAgICk7XG4gICAgdmFyIHN0cmZuID0gZm5zWzBdO1xuICAgIHZhciByeGZuID0gZm5zWzFdO1xuXG4gICAgcmVkZWZpbmUoU3RyaW5nLnByb3RvdHlwZSwgS0VZLCBzdHJmbik7XG4gICAgaGlkZShSZWdFeHAucHJvdG90eXBlLCBTWU1CT0wsIGxlbmd0aCA9PSAyXG4gICAgICAvLyAyMS4yLjUuOCBSZWdFeHAucHJvdG90eXBlW0BAcmVwbGFjZV0oc3RyaW5nLCByZXBsYWNlVmFsdWUpXG4gICAgICAvLyAyMS4yLjUuMTEgUmVnRXhwLnByb3RvdHlwZVtAQHNwbGl0XShzdHJpbmcsIGxpbWl0KVxuICAgICAgPyBmdW5jdGlvbiAoc3RyaW5nLCBhcmcpIHsgcmV0dXJuIHJ4Zm4uY2FsbChzdHJpbmcsIHRoaXMsIGFyZyk7IH1cbiAgICAgIC8vIDIxLjIuNS42IFJlZ0V4cC5wcm90b3R5cGVbQEBtYXRjaF0oc3RyaW5nKVxuICAgICAgLy8gMjEuMi41LjkgUmVnRXhwLnByb3RvdHlwZVtAQHNlYXJjaF0oc3RyaW5nKVxuICAgICAgOiBmdW5jdGlvbiAoc3RyaW5nKSB7IHJldHVybiByeGZuLmNhbGwoc3RyaW5nLCB0aGlzKTsgfVxuICAgICk7XG4gIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG4vLyAyMS4yLjUuMyBnZXQgUmVnRXhwLnByb3RvdHlwZS5mbGFnc1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHRoYXQgPSBhbk9iamVjdCh0aGlzKTtcbiAgdmFyIHJlc3VsdCA9ICcnO1xuICBpZiAodGhhdC5nbG9iYWwpIHJlc3VsdCArPSAnZyc7XG4gIGlmICh0aGF0Lmlnbm9yZUNhc2UpIHJlc3VsdCArPSAnaSc7XG4gIGlmICh0aGF0Lm11bHRpbGluZSkgcmVzdWx0ICs9ICdtJztcbiAgaWYgKHRoYXQudW5pY29kZSkgcmVzdWx0ICs9ICd1JztcbiAgaWYgKHRoYXQuc3RpY2t5KSByZXN1bHQgKz0gJ3knO1xuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtZmxhdE1hcC8jc2VjLUZsYXR0ZW5JbnRvQXJyYXlcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi9faXMtYXJyYXknKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgSVNfQ09OQ0FUX1NQUkVBREFCTEUgPSByZXF1aXJlKCcuL193a3MnKSgnaXNDb25jYXRTcHJlYWRhYmxlJyk7XG5cbmZ1bmN0aW9uIGZsYXR0ZW5JbnRvQXJyYXkodGFyZ2V0LCBvcmlnaW5hbCwgc291cmNlLCBzb3VyY2VMZW4sIHN0YXJ0LCBkZXB0aCwgbWFwcGVyLCB0aGlzQXJnKSB7XG4gIHZhciB0YXJnZXRJbmRleCA9IHN0YXJ0O1xuICB2YXIgc291cmNlSW5kZXggPSAwO1xuICB2YXIgbWFwRm4gPSBtYXBwZXIgPyBjdHgobWFwcGVyLCB0aGlzQXJnLCAzKSA6IGZhbHNlO1xuICB2YXIgZWxlbWVudCwgc3ByZWFkYWJsZTtcblxuICB3aGlsZSAoc291cmNlSW5kZXggPCBzb3VyY2VMZW4pIHtcbiAgICBpZiAoc291cmNlSW5kZXggaW4gc291cmNlKSB7XG4gICAgICBlbGVtZW50ID0gbWFwRm4gPyBtYXBGbihzb3VyY2Vbc291cmNlSW5kZXhdLCBzb3VyY2VJbmRleCwgb3JpZ2luYWwpIDogc291cmNlW3NvdXJjZUluZGV4XTtcblxuICAgICAgc3ByZWFkYWJsZSA9IGZhbHNlO1xuICAgICAgaWYgKGlzT2JqZWN0KGVsZW1lbnQpKSB7XG4gICAgICAgIHNwcmVhZGFibGUgPSBlbGVtZW50W0lTX0NPTkNBVF9TUFJFQURBQkxFXTtcbiAgICAgICAgc3ByZWFkYWJsZSA9IHNwcmVhZGFibGUgIT09IHVuZGVmaW5lZCA/ICEhc3ByZWFkYWJsZSA6IGlzQXJyYXkoZWxlbWVudCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChzcHJlYWRhYmxlICYmIGRlcHRoID4gMCkge1xuICAgICAgICB0YXJnZXRJbmRleCA9IGZsYXR0ZW5JbnRvQXJyYXkodGFyZ2V0LCBvcmlnaW5hbCwgZWxlbWVudCwgdG9MZW5ndGgoZWxlbWVudC5sZW5ndGgpLCB0YXJnZXRJbmRleCwgZGVwdGggLSAxKSAtIDE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodGFyZ2V0SW5kZXggPj0gMHgxZmZmZmZmZmZmZmZmZikgdGhyb3cgVHlwZUVycm9yKCk7XG4gICAgICAgIHRhcmdldFt0YXJnZXRJbmRleF0gPSBlbGVtZW50O1xuICAgICAgfVxuXG4gICAgICB0YXJnZXRJbmRleCsrO1xuICAgIH1cbiAgICBzb3VyY2VJbmRleCsrO1xuICB9XG4gIHJldHVybiB0YXJnZXRJbmRleDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmbGF0dGVuSW50b0FycmF5O1xuIiwidmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuL19pdGVyLWNhbGwnKTtcbnZhciBpc0FycmF5SXRlciA9IHJlcXVpcmUoJy4vX2lzLWFycmF5LWl0ZXInKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgZ2V0SXRlckZuID0gcmVxdWlyZSgnLi9jb3JlLmdldC1pdGVyYXRvci1tZXRob2QnKTtcbnZhciBCUkVBSyA9IHt9O1xudmFyIFJFVFVSTiA9IHt9O1xudmFyIGV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVyYWJsZSwgZW50cmllcywgZm4sIHRoYXQsIElURVJBVE9SKSB7XG4gIHZhciBpdGVyRm4gPSBJVEVSQVRPUiA/IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGl0ZXJhYmxlOyB9IDogZ2V0SXRlckZuKGl0ZXJhYmxlKTtcbiAgdmFyIGYgPSBjdHgoZm4sIHRoYXQsIGVudHJpZXMgPyAyIDogMSk7XG4gIHZhciBpbmRleCA9IDA7XG4gIHZhciBsZW5ndGgsIHN0ZXAsIGl0ZXJhdG9yLCByZXN1bHQ7XG4gIGlmICh0eXBlb2YgaXRlckZuICE9ICdmdW5jdGlvbicpIHRocm93IFR5cGVFcnJvcihpdGVyYWJsZSArICcgaXMgbm90IGl0ZXJhYmxlIScpO1xuICAvLyBmYXN0IGNhc2UgZm9yIGFycmF5cyB3aXRoIGRlZmF1bHQgaXRlcmF0b3JcbiAgaWYgKGlzQXJyYXlJdGVyKGl0ZXJGbikpIGZvciAobGVuZ3RoID0gdG9MZW5ndGgoaXRlcmFibGUubGVuZ3RoKTsgbGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIHtcbiAgICByZXN1bHQgPSBlbnRyaWVzID8gZihhbk9iamVjdChzdGVwID0gaXRlcmFibGVbaW5kZXhdKVswXSwgc3RlcFsxXSkgOiBmKGl0ZXJhYmxlW2luZGV4XSk7XG4gICAgaWYgKHJlc3VsdCA9PT0gQlJFQUsgfHwgcmVzdWx0ID09PSBSRVRVUk4pIHJldHVybiByZXN1bHQ7XG4gIH0gZWxzZSBmb3IgKGl0ZXJhdG9yID0gaXRlckZuLmNhbGwoaXRlcmFibGUpOyAhKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmU7KSB7XG4gICAgcmVzdWx0ID0gY2FsbChpdGVyYXRvciwgZiwgc3RlcC52YWx1ZSwgZW50cmllcyk7XG4gICAgaWYgKHJlc3VsdCA9PT0gQlJFQUsgfHwgcmVzdWx0ID09PSBSRVRVUk4pIHJldHVybiByZXN1bHQ7XG4gIH1cbn07XG5leHBvcnRzLkJSRUFLID0gQlJFQUs7XG5leHBvcnRzLlJFVFVSTiA9IFJFVFVSTjtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fc2hhcmVkJykoJ25hdGl2ZS1mdW5jdGlvbi10by1zdHJpbmcnLCBGdW5jdGlvbi50b1N0cmluZyk7XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvODYjaXNzdWVjb21tZW50LTExNTc1OTAyOFxudmFyIGdsb2JhbCA9IG1vZHVsZS5leHBvcnRzID0gdHlwZW9mIHdpbmRvdyAhPSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuTWF0aCA9PSBNYXRoXG4gID8gd2luZG93IDogdHlwZW9mIHNlbGYgIT0gJ3VuZGVmaW5lZCcgJiYgc2VsZi5NYXRoID09IE1hdGggPyBzZWxmXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXctZnVuY1xuICA6IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG5pZiAodHlwZW9mIF9fZyA9PSAnbnVtYmVyJykgX19nID0gZ2xvYmFsOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmXG4iLCJ2YXIgaGFzT3duUHJvcGVydHkgPSB7fS5oYXNPd25Qcm9wZXJ0eTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBrZXkpIHtcbiAgcmV0dXJuIGhhc093blByb3BlcnR5LmNhbGwoaXQsIGtleSk7XG59O1xuIiwidmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG52YXIgY3JlYXRlRGVzYyA9IHJlcXVpcmUoJy4vX3Byb3BlcnR5LWRlc2MnKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSA/IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIGRQLmYob2JqZWN0LCBrZXksIGNyZWF0ZURlc2MoMSwgdmFsdWUpKTtcbn0gOiBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIG9iamVjdFtrZXldID0gdmFsdWU7XG4gIHJldHVybiBvYmplY3Q7XG59O1xuIiwidmFyIGRvY3VtZW50ID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykuZG9jdW1lbnQ7XG5tb2R1bGUuZXhwb3J0cyA9IGRvY3VtZW50ICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiIsIm1vZHVsZS5leHBvcnRzID0gIXJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgIXJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHJlcXVpcmUoJy4vX2RvbS1jcmVhdGUnKSgnZGl2JyksICdhJywgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH0gfSkuYSAhPSA3O1xufSk7XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBzZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX3NldC1wcm90bycpLnNldDtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRoYXQsIHRhcmdldCwgQykge1xuICB2YXIgUyA9IHRhcmdldC5jb25zdHJ1Y3RvcjtcbiAgdmFyIFA7XG4gIGlmIChTICE9PSBDICYmIHR5cGVvZiBTID09ICdmdW5jdGlvbicgJiYgKFAgPSBTLnByb3RvdHlwZSkgIT09IEMucHJvdG90eXBlICYmIGlzT2JqZWN0KFApICYmIHNldFByb3RvdHlwZU9mKSB7XG4gICAgc2V0UHJvdG90eXBlT2YodGhhdCwgUCk7XG4gIH0gcmV0dXJuIHRoYXQ7XG59O1xuIiwiLy8gZmFzdCBhcHBseSwgaHR0cDovL2pzcGVyZi5sbmtpdC5jb20vZmFzdC1hcHBseS81XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChmbiwgYXJncywgdGhhdCkge1xuICB2YXIgdW4gPSB0aGF0ID09PSB1bmRlZmluZWQ7XG4gIHN3aXRjaCAoYXJncy5sZW5ndGgpIHtcbiAgICBjYXNlIDA6IHJldHVybiB1biA/IGZuKClcbiAgICAgICAgICAgICAgICAgICAgICA6IGZuLmNhbGwodGhhdCk7XG4gICAgY2FzZSAxOiByZXR1cm4gdW4gPyBmbihhcmdzWzBdKVxuICAgICAgICAgICAgICAgICAgICAgIDogZm4uY2FsbCh0aGF0LCBhcmdzWzBdKTtcbiAgICBjYXNlIDI6IHJldHVybiB1biA/IGZuKGFyZ3NbMF0sIGFyZ3NbMV0pXG4gICAgICAgICAgICAgICAgICAgICAgOiBmbi5jYWxsKHRoYXQsIGFyZ3NbMF0sIGFyZ3NbMV0pO1xuICAgIGNhc2UgMzogcmV0dXJuIHVuID8gZm4oYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSlcbiAgICAgICAgICAgICAgICAgICAgICA6IGZuLmNhbGwodGhhdCwgYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSk7XG4gICAgY2FzZSA0OiByZXR1cm4gdW4gPyBmbihhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdKVxuICAgICAgICAgICAgICAgICAgICAgIDogZm4uY2FsbCh0aGF0LCBhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdKTtcbiAgfSByZXR1cm4gZm4uYXBwbHkodGhhdCwgYXJncyk7XG59O1xuIiwiLy8gZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBhbmQgbm9uLWVudW1lcmFibGUgb2xkIFY4IHN0cmluZ3NcbnZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0KCd6JykucHJvcGVydHlJc0VudW1lcmFibGUoMCkgPyBPYmplY3QgOiBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGNvZihpdCkgPT0gJ1N0cmluZycgPyBpdC5zcGxpdCgnJykgOiBPYmplY3QoaXQpO1xufTtcbiIsIi8vIGNoZWNrIG9uIGRlZmF1bHQgQXJyYXkgaXRlcmF0b3JcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuL19pdGVyYXRvcnMnKTtcbnZhciBJVEVSQVRPUiA9IHJlcXVpcmUoJy4vX3drcycpKCdpdGVyYXRvcicpO1xudmFyIEFycmF5UHJvdG8gPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCAhPT0gdW5kZWZpbmVkICYmIChJdGVyYXRvcnMuQXJyYXkgPT09IGl0IHx8IEFycmF5UHJvdG9bSVRFUkFUT1JdID09PSBpdCk7XG59O1xuIiwiLy8gNy4yLjIgSXNBcnJheShhcmd1bWVudClcbnZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcbm1vZHVsZS5leHBvcnRzID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiBpc0FycmF5KGFyZykge1xuICByZXR1cm4gY29mKGFyZykgPT0gJ0FycmF5Jztcbn07XG4iLCIvLyAyMC4xLjIuMyBOdW1iZXIuaXNJbnRlZ2VyKG51bWJlcilcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNJbnRlZ2VyKGl0KSB7XG4gIHJldHVybiAhaXNPYmplY3QoaXQpICYmIGlzRmluaXRlKGl0KSAmJiBmbG9vcihpdCkgPT09IGl0O1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT09ICdvYmplY3QnID8gaXQgIT09IG51bGwgOiB0eXBlb2YgaXQgPT09ICdmdW5jdGlvbic7XG59O1xuIiwiLy8gNy4yLjggSXNSZWdFeHAoYXJndW1lbnQpXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcbnZhciBNQVRDSCA9IHJlcXVpcmUoJy4vX3drcycpKCdtYXRjaCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIGlzUmVnRXhwO1xuICByZXR1cm4gaXNPYmplY3QoaXQpICYmICgoaXNSZWdFeHAgPSBpdFtNQVRDSF0pICE9PSB1bmRlZmluZWQgPyAhIWlzUmVnRXhwIDogY29mKGl0KSA9PSAnUmVnRXhwJyk7XG59O1xuIiwiLy8gY2FsbCBzb21ldGhpbmcgb24gaXRlcmF0b3Igc3RlcCB3aXRoIHNhZmUgY2xvc2luZyBvbiBlcnJvclxudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVyYXRvciwgZm4sIHZhbHVlLCBlbnRyaWVzKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGVudHJpZXMgPyBmbihhbk9iamVjdCh2YWx1ZSlbMF0sIHZhbHVlWzFdKSA6IGZuKHZhbHVlKTtcbiAgLy8gNy40LjYgSXRlcmF0b3JDbG9zZShpdGVyYXRvciwgY29tcGxldGlvbilcbiAgfSBjYXRjaCAoZSkge1xuICAgIHZhciByZXQgPSBpdGVyYXRvclsncmV0dXJuJ107XG4gICAgaWYgKHJldCAhPT0gdW5kZWZpbmVkKSBhbk9iamVjdChyZXQuY2FsbChpdGVyYXRvcikpO1xuICAgIHRocm93IGU7XG4gIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi9fb2JqZWN0LWNyZWF0ZScpO1xudmFyIGRlc2NyaXB0b3IgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuL19zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIEl0ZXJhdG9yUHJvdG90eXBlID0ge307XG5cbi8vIDI1LjEuMi4xLjEgJUl0ZXJhdG9yUHJvdG90eXBlJVtAQGl0ZXJhdG9yXSgpXG5yZXF1aXJlKCcuL19oaWRlJykoSXRlcmF0b3JQcm90b3R5cGUsIHJlcXVpcmUoJy4vX3drcycpKCdpdGVyYXRvcicpLCBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9KTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIE5BTUUsIG5leHQpIHtcbiAgQ29uc3RydWN0b3IucHJvdG90eXBlID0gY3JlYXRlKEl0ZXJhdG9yUHJvdG90eXBlLCB7IG5leHQ6IGRlc2NyaXB0b3IoMSwgbmV4dCkgfSk7XG4gIHNldFRvU3RyaW5nVGFnKENvbnN0cnVjdG9yLCBOQU1FICsgJyBJdGVyYXRvcicpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBMSUJSQVJZID0gcmVxdWlyZSgnLi9fbGlicmFyeScpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuL19pdGVyYXRvcnMnKTtcbnZhciAkaXRlckNyZWF0ZSA9IHJlcXVpcmUoJy4vX2l0ZXItY3JlYXRlJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuL19zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIElURVJBVE9SID0gcmVxdWlyZSgnLi9fd2tzJykoJ2l0ZXJhdG9yJyk7XG52YXIgQlVHR1kgPSAhKFtdLmtleXMgJiYgJ25leHQnIGluIFtdLmtleXMoKSk7IC8vIFNhZmFyaSBoYXMgYnVnZ3kgaXRlcmF0b3JzIHcvbyBgbmV4dGBcbnZhciBGRl9JVEVSQVRPUiA9ICdAQGl0ZXJhdG9yJztcbnZhciBLRVlTID0gJ2tleXMnO1xudmFyIFZBTFVFUyA9ICd2YWx1ZXMnO1xuXG52YXIgcmV0dXJuVGhpcyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEJhc2UsIE5BTUUsIENvbnN0cnVjdG9yLCBuZXh0LCBERUZBVUxULCBJU19TRVQsIEZPUkNFRCkge1xuICAkaXRlckNyZWF0ZShDb25zdHJ1Y3RvciwgTkFNRSwgbmV4dCk7XG4gIHZhciBnZXRNZXRob2QgPSBmdW5jdGlvbiAoa2luZCkge1xuICAgIGlmICghQlVHR1kgJiYga2luZCBpbiBwcm90bykgcmV0dXJuIHByb3RvW2tpbmRdO1xuICAgIHN3aXRjaCAoa2luZCkge1xuICAgICAgY2FzZSBLRVlTOiByZXR1cm4gZnVuY3Rpb24ga2V5cygpIHsgcmV0dXJuIG5ldyBDb25zdHJ1Y3Rvcih0aGlzLCBraW5kKTsgfTtcbiAgICAgIGNhc2UgVkFMVUVTOiByZXR1cm4gZnVuY3Rpb24gdmFsdWVzKCkgeyByZXR1cm4gbmV3IENvbnN0cnVjdG9yKHRoaXMsIGtpbmQpOyB9O1xuICAgIH0gcmV0dXJuIGZ1bmN0aW9uIGVudHJpZXMoKSB7IHJldHVybiBuZXcgQ29uc3RydWN0b3IodGhpcywga2luZCk7IH07XG4gIH07XG4gIHZhciBUQUcgPSBOQU1FICsgJyBJdGVyYXRvcic7XG4gIHZhciBERUZfVkFMVUVTID0gREVGQVVMVCA9PSBWQUxVRVM7XG4gIHZhciBWQUxVRVNfQlVHID0gZmFsc2U7XG4gIHZhciBwcm90byA9IEJhc2UucHJvdG90eXBlO1xuICB2YXIgJG5hdGl2ZSA9IHByb3RvW0lURVJBVE9SXSB8fCBwcm90b1tGRl9JVEVSQVRPUl0gfHwgREVGQVVMVCAmJiBwcm90b1tERUZBVUxUXTtcbiAgdmFyICRkZWZhdWx0ID0gJG5hdGl2ZSB8fCBnZXRNZXRob2QoREVGQVVMVCk7XG4gIHZhciAkZW50cmllcyA9IERFRkFVTFQgPyAhREVGX1ZBTFVFUyA/ICRkZWZhdWx0IDogZ2V0TWV0aG9kKCdlbnRyaWVzJykgOiB1bmRlZmluZWQ7XG4gIHZhciAkYW55TmF0aXZlID0gTkFNRSA9PSAnQXJyYXknID8gcHJvdG8uZW50cmllcyB8fCAkbmF0aXZlIDogJG5hdGl2ZTtcbiAgdmFyIG1ldGhvZHMsIGtleSwgSXRlcmF0b3JQcm90b3R5cGU7XG4gIC8vIEZpeCBuYXRpdmVcbiAgaWYgKCRhbnlOYXRpdmUpIHtcbiAgICBJdGVyYXRvclByb3RvdHlwZSA9IGdldFByb3RvdHlwZU9mKCRhbnlOYXRpdmUuY2FsbChuZXcgQmFzZSgpKSk7XG4gICAgaWYgKEl0ZXJhdG9yUHJvdG90eXBlICE9PSBPYmplY3QucHJvdG90eXBlICYmIEl0ZXJhdG9yUHJvdG90eXBlLm5leHQpIHtcbiAgICAgIC8vIFNldCBAQHRvU3RyaW5nVGFnIHRvIG5hdGl2ZSBpdGVyYXRvcnNcbiAgICAgIHNldFRvU3RyaW5nVGFnKEl0ZXJhdG9yUHJvdG90eXBlLCBUQUcsIHRydWUpO1xuICAgICAgLy8gZml4IGZvciBzb21lIG9sZCBlbmdpbmVzXG4gICAgICBpZiAoIUxJQlJBUlkgJiYgdHlwZW9mIEl0ZXJhdG9yUHJvdG90eXBlW0lURVJBVE9SXSAhPSAnZnVuY3Rpb24nKSBoaWRlKEl0ZXJhdG9yUHJvdG90eXBlLCBJVEVSQVRPUiwgcmV0dXJuVGhpcyk7XG4gICAgfVxuICB9XG4gIC8vIGZpeCBBcnJheSN7dmFsdWVzLCBAQGl0ZXJhdG9yfS5uYW1lIGluIFY4IC8gRkZcbiAgaWYgKERFRl9WQUxVRVMgJiYgJG5hdGl2ZSAmJiAkbmF0aXZlLm5hbWUgIT09IFZBTFVFUykge1xuICAgIFZBTFVFU19CVUcgPSB0cnVlO1xuICAgICRkZWZhdWx0ID0gZnVuY3Rpb24gdmFsdWVzKCkgeyByZXR1cm4gJG5hdGl2ZS5jYWxsKHRoaXMpOyB9O1xuICB9XG4gIC8vIERlZmluZSBpdGVyYXRvclxuICBpZiAoKCFMSUJSQVJZIHx8IEZPUkNFRCkgJiYgKEJVR0dZIHx8IFZBTFVFU19CVUcgfHwgIXByb3RvW0lURVJBVE9SXSkpIHtcbiAgICBoaWRlKHByb3RvLCBJVEVSQVRPUiwgJGRlZmF1bHQpO1xuICB9XG4gIC8vIFBsdWcgZm9yIGxpYnJhcnlcbiAgSXRlcmF0b3JzW05BTUVdID0gJGRlZmF1bHQ7XG4gIEl0ZXJhdG9yc1tUQUddID0gcmV0dXJuVGhpcztcbiAgaWYgKERFRkFVTFQpIHtcbiAgICBtZXRob2RzID0ge1xuICAgICAgdmFsdWVzOiBERUZfVkFMVUVTID8gJGRlZmF1bHQgOiBnZXRNZXRob2QoVkFMVUVTKSxcbiAgICAgIGtleXM6IElTX1NFVCA/ICRkZWZhdWx0IDogZ2V0TWV0aG9kKEtFWVMpLFxuICAgICAgZW50cmllczogJGVudHJpZXNcbiAgICB9O1xuICAgIGlmIChGT1JDRUQpIGZvciAoa2V5IGluIG1ldGhvZHMpIHtcbiAgICAgIGlmICghKGtleSBpbiBwcm90bykpIHJlZGVmaW5lKHByb3RvLCBrZXksIG1ldGhvZHNba2V5XSk7XG4gICAgfSBlbHNlICRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogKEJVR0dZIHx8IFZBTFVFU19CVUcpLCBOQU1FLCBtZXRob2RzKTtcbiAgfVxuICByZXR1cm4gbWV0aG9kcztcbn07XG4iLCJ2YXIgSVRFUkFUT1IgPSByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKTtcbnZhciBTQUZFX0NMT1NJTkcgPSBmYWxzZTtcblxudHJ5IHtcbiAgdmFyIHJpdGVyID0gWzddW0lURVJBVE9SXSgpO1xuICByaXRlclsncmV0dXJuJ10gPSBmdW5jdGlvbiAoKSB7IFNBRkVfQ0xPU0lORyA9IHRydWU7IH07XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby10aHJvdy1saXRlcmFsXG4gIEFycmF5LmZyb20ocml0ZXIsIGZ1bmN0aW9uICgpIHsgdGhyb3cgMjsgfSk7XG59IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYywgc2tpcENsb3NpbmcpIHtcbiAgaWYgKCFza2lwQ2xvc2luZyAmJiAhU0FGRV9DTE9TSU5HKSByZXR1cm4gZmFsc2U7XG4gIHZhciBzYWZlID0gZmFsc2U7XG4gIHRyeSB7XG4gICAgdmFyIGFyciA9IFs3XTtcbiAgICB2YXIgaXRlciA9IGFycltJVEVSQVRPUl0oKTtcbiAgICBpdGVyLm5leHQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB7IGRvbmU6IHNhZmUgPSB0cnVlIH07IH07XG4gICAgYXJyW0lURVJBVE9SXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGl0ZXI7IH07XG4gICAgZXhlYyhhcnIpO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbiAgcmV0dXJuIHNhZmU7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZG9uZSwgdmFsdWUpIHtcbiAgcmV0dXJuIHsgdmFsdWU6IHZhbHVlLCBkb25lOiAhIWRvbmUgfTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHt9O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmYWxzZTtcbiIsIi8vIDIwLjIuMi4xNCBNYXRoLmV4cG0xKHgpXG52YXIgJGV4cG0xID0gTWF0aC5leHBtMTtcbm1vZHVsZS5leHBvcnRzID0gKCEkZXhwbTFcbiAgLy8gT2xkIEZGIGJ1Z1xuICB8fCAkZXhwbTEoMTApID4gMjIwMjUuNDY1Nzk0ODA2NzE5IHx8ICRleHBtMSgxMCkgPCAyMjAyNS40NjU3OTQ4MDY3MTY1MTY4XG4gIC8vIFRvciBCcm93c2VyIGJ1Z1xuICB8fCAkZXhwbTEoLTJlLTE3KSAhPSAtMmUtMTdcbikgPyBmdW5jdGlvbiBleHBtMSh4KSB7XG4gIHJldHVybiAoeCA9ICt4KSA9PSAwID8geCA6IHggPiAtMWUtNiAmJiB4IDwgMWUtNiA/IHggKyB4ICogeCAvIDIgOiBNYXRoLmV4cCh4KSAtIDE7XG59IDogJGV4cG0xO1xuIiwiLy8gMjAuMi4yLjE2IE1hdGguZnJvdW5kKHgpXG52YXIgc2lnbiA9IHJlcXVpcmUoJy4vX21hdGgtc2lnbicpO1xudmFyIHBvdyA9IE1hdGgucG93O1xudmFyIEVQU0lMT04gPSBwb3coMiwgLTUyKTtcbnZhciBFUFNJTE9OMzIgPSBwb3coMiwgLTIzKTtcbnZhciBNQVgzMiA9IHBvdygyLCAxMjcpICogKDIgLSBFUFNJTE9OMzIpO1xudmFyIE1JTjMyID0gcG93KDIsIC0xMjYpO1xuXG52YXIgcm91bmRUaWVzVG9FdmVuID0gZnVuY3Rpb24gKG4pIHtcbiAgcmV0dXJuIG4gKyAxIC8gRVBTSUxPTiAtIDEgLyBFUFNJTE9OO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBNYXRoLmZyb3VuZCB8fCBmdW5jdGlvbiBmcm91bmQoeCkge1xuICB2YXIgJGFicyA9IE1hdGguYWJzKHgpO1xuICB2YXIgJHNpZ24gPSBzaWduKHgpO1xuICB2YXIgYSwgcmVzdWx0O1xuICBpZiAoJGFicyA8IE1JTjMyKSByZXR1cm4gJHNpZ24gKiByb3VuZFRpZXNUb0V2ZW4oJGFicyAvIE1JTjMyIC8gRVBTSUxPTjMyKSAqIE1JTjMyICogRVBTSUxPTjMyO1xuICBhID0gKDEgKyBFUFNJTE9OMzIgLyBFUFNJTE9OKSAqICRhYnM7XG4gIHJlc3VsdCA9IGEgLSAoYSAtICRhYnMpO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gIGlmIChyZXN1bHQgPiBNQVgzMiB8fCByZXN1bHQgIT0gcmVzdWx0KSByZXR1cm4gJHNpZ24gKiBJbmZpbml0eTtcbiAgcmV0dXJuICRzaWduICogcmVzdWx0O1xufTtcbiIsIi8vIDIwLjIuMi4yMCBNYXRoLmxvZzFwKHgpXG5tb2R1bGUuZXhwb3J0cyA9IE1hdGgubG9nMXAgfHwgZnVuY3Rpb24gbG9nMXAoeCkge1xuICByZXR1cm4gKHggPSAreCkgPiAtMWUtOCAmJiB4IDwgMWUtOCA/IHggLSB4ICogeCAvIDIgOiBNYXRoLmxvZygxICsgeCk7XG59O1xuIiwiLy8gaHR0cHM6Ly9yd2FsZHJvbi5naXRodWIuaW8vcHJvcG9zYWwtbWF0aC1leHRlbnNpb25zL1xubW9kdWxlLmV4cG9ydHMgPSBNYXRoLnNjYWxlIHx8IGZ1bmN0aW9uIHNjYWxlKHgsIGluTG93LCBpbkhpZ2gsIG91dExvdywgb3V0SGlnaCkge1xuICBpZiAoXG4gICAgYXJndW1lbnRzLmxlbmd0aCA9PT0gMFxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgICAgfHwgeCAhPSB4XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICB8fCBpbkxvdyAhPSBpbkxvd1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgICAgfHwgaW5IaWdoICE9IGluSGlnaFxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgICAgfHwgb3V0TG93ICE9IG91dExvd1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgICAgfHwgb3V0SGlnaCAhPSBvdXRIaWdoXG4gICkgcmV0dXJuIE5hTjtcbiAgaWYgKHggPT09IEluZmluaXR5IHx8IHggPT09IC1JbmZpbml0eSkgcmV0dXJuIHg7XG4gIHJldHVybiAoeCAtIGluTG93KSAqIChvdXRIaWdoIC0gb3V0TG93KSAvIChpbkhpZ2ggLSBpbkxvdykgKyBvdXRMb3c7XG59O1xuIiwiLy8gMjAuMi4yLjI4IE1hdGguc2lnbih4KVxubW9kdWxlLmV4cG9ydHMgPSBNYXRoLnNpZ24gfHwgZnVuY3Rpb24gc2lnbih4KSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgcmV0dXJuICh4ID0gK3gpID09IDAgfHwgeCAhPSB4ID8geCA6IHggPCAwID8gLTEgOiAxO1xufTtcbiIsInZhciBNRVRBID0gcmVxdWlyZSgnLi9fdWlkJykoJ21ldGEnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIHNldERlc2MgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mO1xudmFyIGlkID0gMDtcbnZhciBpc0V4dGVuc2libGUgPSBPYmplY3QuaXNFeHRlbnNpYmxlIHx8IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRydWU7XG59O1xudmFyIEZSRUVaRSA9ICFyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGlzRXh0ZW5zaWJsZShPYmplY3QucHJldmVudEV4dGVuc2lvbnMoe30pKTtcbn0pO1xudmFyIHNldE1ldGEgPSBmdW5jdGlvbiAoaXQpIHtcbiAgc2V0RGVzYyhpdCwgTUVUQSwgeyB2YWx1ZToge1xuICAgIGk6ICdPJyArICsraWQsIC8vIG9iamVjdCBJRFxuICAgIHc6IHt9ICAgICAgICAgIC8vIHdlYWsgY29sbGVjdGlvbnMgSURzXG4gIH0gfSk7XG59O1xudmFyIGZhc3RLZXkgPSBmdW5jdGlvbiAoaXQsIGNyZWF0ZSkge1xuICAvLyByZXR1cm4gcHJpbWl0aXZlIHdpdGggcHJlZml4XG4gIGlmICghaXNPYmplY3QoaXQpKSByZXR1cm4gdHlwZW9mIGl0ID09ICdzeW1ib2wnID8gaXQgOiAodHlwZW9mIGl0ID09ICdzdHJpbmcnID8gJ1MnIDogJ1AnKSArIGl0O1xuICBpZiAoIWhhcyhpdCwgTUVUQSkpIHtcbiAgICAvLyBjYW4ndCBzZXQgbWV0YWRhdGEgdG8gdW5jYXVnaHQgZnJvemVuIG9iamVjdFxuICAgIGlmICghaXNFeHRlbnNpYmxlKGl0KSkgcmV0dXJuICdGJztcbiAgICAvLyBub3QgbmVjZXNzYXJ5IHRvIGFkZCBtZXRhZGF0YVxuICAgIGlmICghY3JlYXRlKSByZXR1cm4gJ0UnO1xuICAgIC8vIGFkZCBtaXNzaW5nIG1ldGFkYXRhXG4gICAgc2V0TWV0YShpdCk7XG4gIC8vIHJldHVybiBvYmplY3QgSURcbiAgfSByZXR1cm4gaXRbTUVUQV0uaTtcbn07XG52YXIgZ2V0V2VhayA9IGZ1bmN0aW9uIChpdCwgY3JlYXRlKSB7XG4gIGlmICghaGFzKGl0LCBNRVRBKSkge1xuICAgIC8vIGNhbid0IHNldCBtZXRhZGF0YSB0byB1bmNhdWdodCBmcm96ZW4gb2JqZWN0XG4gICAgaWYgKCFpc0V4dGVuc2libGUoaXQpKSByZXR1cm4gdHJ1ZTtcbiAgICAvLyBub3QgbmVjZXNzYXJ5IHRvIGFkZCBtZXRhZGF0YVxuICAgIGlmICghY3JlYXRlKSByZXR1cm4gZmFsc2U7XG4gICAgLy8gYWRkIG1pc3NpbmcgbWV0YWRhdGFcbiAgICBzZXRNZXRhKGl0KTtcbiAgLy8gcmV0dXJuIGhhc2ggd2VhayBjb2xsZWN0aW9ucyBJRHNcbiAgfSByZXR1cm4gaXRbTUVUQV0udztcbn07XG4vLyBhZGQgbWV0YWRhdGEgb24gZnJlZXplLWZhbWlseSBtZXRob2RzIGNhbGxpbmdcbnZhciBvbkZyZWV6ZSA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoRlJFRVpFICYmIG1ldGEuTkVFRCAmJiBpc0V4dGVuc2libGUoaXQpICYmICFoYXMoaXQsIE1FVEEpKSBzZXRNZXRhKGl0KTtcbiAgcmV0dXJuIGl0O1xufTtcbnZhciBtZXRhID0gbW9kdWxlLmV4cG9ydHMgPSB7XG4gIEtFWTogTUVUQSxcbiAgTkVFRDogZmFsc2UsXG4gIGZhc3RLZXk6IGZhc3RLZXksXG4gIGdldFdlYWs6IGdldFdlYWssXG4gIG9uRnJlZXplOiBvbkZyZWV6ZVxufTtcbiIsInZhciBNYXAgPSByZXF1aXJlKCcuL2VzNi5tYXAnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi9fc2hhcmVkJykoJ21ldGFkYXRhJyk7XG52YXIgc3RvcmUgPSBzaGFyZWQuc3RvcmUgfHwgKHNoYXJlZC5zdG9yZSA9IG5ldyAocmVxdWlyZSgnLi9lczYud2Vhay1tYXAnKSkoKSk7XG5cbnZhciBnZXRPckNyZWF0ZU1ldGFkYXRhTWFwID0gZnVuY3Rpb24gKHRhcmdldCwgdGFyZ2V0S2V5LCBjcmVhdGUpIHtcbiAgdmFyIHRhcmdldE1ldGFkYXRhID0gc3RvcmUuZ2V0KHRhcmdldCk7XG4gIGlmICghdGFyZ2V0TWV0YWRhdGEpIHtcbiAgICBpZiAoIWNyZWF0ZSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBzdG9yZS5zZXQodGFyZ2V0LCB0YXJnZXRNZXRhZGF0YSA9IG5ldyBNYXAoKSk7XG4gIH1cbiAgdmFyIGtleU1ldGFkYXRhID0gdGFyZ2V0TWV0YWRhdGEuZ2V0KHRhcmdldEtleSk7XG4gIGlmICgha2V5TWV0YWRhdGEpIHtcbiAgICBpZiAoIWNyZWF0ZSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB0YXJnZXRNZXRhZGF0YS5zZXQodGFyZ2V0S2V5LCBrZXlNZXRhZGF0YSA9IG5ldyBNYXAoKSk7XG4gIH0gcmV0dXJuIGtleU1ldGFkYXRhO1xufTtcbnZhciBvcmRpbmFyeUhhc093bk1ldGFkYXRhID0gZnVuY3Rpb24gKE1ldGFkYXRhS2V5LCBPLCBQKSB7XG4gIHZhciBtZXRhZGF0YU1hcCA9IGdldE9yQ3JlYXRlTWV0YWRhdGFNYXAoTywgUCwgZmFsc2UpO1xuICByZXR1cm4gbWV0YWRhdGFNYXAgPT09IHVuZGVmaW5lZCA/IGZhbHNlIDogbWV0YWRhdGFNYXAuaGFzKE1ldGFkYXRhS2V5KTtcbn07XG52YXIgb3JkaW5hcnlHZXRPd25NZXRhZGF0YSA9IGZ1bmN0aW9uIChNZXRhZGF0YUtleSwgTywgUCkge1xuICB2YXIgbWV0YWRhdGFNYXAgPSBnZXRPckNyZWF0ZU1ldGFkYXRhTWFwKE8sIFAsIGZhbHNlKTtcbiAgcmV0dXJuIG1ldGFkYXRhTWFwID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBtZXRhZGF0YU1hcC5nZXQoTWV0YWRhdGFLZXkpO1xufTtcbnZhciBvcmRpbmFyeURlZmluZU93bk1ldGFkYXRhID0gZnVuY3Rpb24gKE1ldGFkYXRhS2V5LCBNZXRhZGF0YVZhbHVlLCBPLCBQKSB7XG4gIGdldE9yQ3JlYXRlTWV0YWRhdGFNYXAoTywgUCwgdHJ1ZSkuc2V0KE1ldGFkYXRhS2V5LCBNZXRhZGF0YVZhbHVlKTtcbn07XG52YXIgb3JkaW5hcnlPd25NZXRhZGF0YUtleXMgPSBmdW5jdGlvbiAodGFyZ2V0LCB0YXJnZXRLZXkpIHtcbiAgdmFyIG1ldGFkYXRhTWFwID0gZ2V0T3JDcmVhdGVNZXRhZGF0YU1hcCh0YXJnZXQsIHRhcmdldEtleSwgZmFsc2UpO1xuICB2YXIga2V5cyA9IFtdO1xuICBpZiAobWV0YWRhdGFNYXApIG1ldGFkYXRhTWFwLmZvckVhY2goZnVuY3Rpb24gKF8sIGtleSkgeyBrZXlzLnB1c2goa2V5KTsgfSk7XG4gIHJldHVybiBrZXlzO1xufTtcbnZhciB0b01ldGFLZXkgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIGl0ID09ICdzeW1ib2wnID8gaXQgOiBTdHJpbmcoaXQpO1xufTtcbnZhciBleHAgPSBmdW5jdGlvbiAoTykge1xuICAkZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCBPKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzdG9yZTogc3RvcmUsXG4gIG1hcDogZ2V0T3JDcmVhdGVNZXRhZGF0YU1hcCxcbiAgaGFzOiBvcmRpbmFyeUhhc093bk1ldGFkYXRhLFxuICBnZXQ6IG9yZGluYXJ5R2V0T3duTWV0YWRhdGEsXG4gIHNldDogb3JkaW5hcnlEZWZpbmVPd25NZXRhZGF0YSxcbiAga2V5czogb3JkaW5hcnlPd25NZXRhZGF0YUtleXMsXG4gIGtleTogdG9NZXRhS2V5LFxuICBleHA6IGV4cFxufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBtYWNyb3Rhc2sgPSByZXF1aXJlKCcuL190YXNrJykuc2V0O1xudmFyIE9ic2VydmVyID0gZ2xvYmFsLk11dGF0aW9uT2JzZXJ2ZXIgfHwgZ2xvYmFsLldlYktpdE11dGF0aW9uT2JzZXJ2ZXI7XG52YXIgcHJvY2VzcyA9IGdsb2JhbC5wcm9jZXNzO1xudmFyIFByb21pc2UgPSBnbG9iYWwuUHJvbWlzZTtcbnZhciBpc05vZGUgPSByZXF1aXJlKCcuL19jb2YnKShwcm9jZXNzKSA9PSAncHJvY2Vzcyc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgaGVhZCwgbGFzdCwgbm90aWZ5O1xuXG4gIHZhciBmbHVzaCA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcGFyZW50LCBmbjtcbiAgICBpZiAoaXNOb2RlICYmIChwYXJlbnQgPSBwcm9jZXNzLmRvbWFpbikpIHBhcmVudC5leGl0KCk7XG4gICAgd2hpbGUgKGhlYWQpIHtcbiAgICAgIGZuID0gaGVhZC5mbjtcbiAgICAgIGhlYWQgPSBoZWFkLm5leHQ7XG4gICAgICB0cnkge1xuICAgICAgICBmbigpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBpZiAoaGVhZCkgbm90aWZ5KCk7XG4gICAgICAgIGVsc2UgbGFzdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICB9IGxhc3QgPSB1bmRlZmluZWQ7XG4gICAgaWYgKHBhcmVudCkgcGFyZW50LmVudGVyKCk7XG4gIH07XG5cbiAgLy8gTm9kZS5qc1xuICBpZiAoaXNOb2RlKSB7XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhmbHVzaCk7XG4gICAgfTtcbiAgLy8gYnJvd3NlcnMgd2l0aCBNdXRhdGlvbk9ic2VydmVyLCBleGNlcHQgaU9TIFNhZmFyaSAtIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8zMzlcbiAgfSBlbHNlIGlmIChPYnNlcnZlciAmJiAhKGdsb2JhbC5uYXZpZ2F0b3IgJiYgZ2xvYmFsLm5hdmlnYXRvci5zdGFuZGFsb25lKSkge1xuICAgIHZhciB0b2dnbGUgPSB0cnVlO1xuICAgIHZhciBub2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJycpO1xuICAgIG5ldyBPYnNlcnZlcihmbHVzaCkub2JzZXJ2ZShub2RlLCB7IGNoYXJhY3RlckRhdGE6IHRydWUgfSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgbm9kZS5kYXRhID0gdG9nZ2xlID0gIXRvZ2dsZTtcbiAgICB9O1xuICAvLyBlbnZpcm9ubWVudHMgd2l0aCBtYXliZSBub24tY29tcGxldGVseSBjb3JyZWN0LCBidXQgZXhpc3RlbnQgUHJvbWlzZVxuICB9IGVsc2UgaWYgKFByb21pc2UgJiYgUHJvbWlzZS5yZXNvbHZlKSB7XG4gICAgLy8gUHJvbWlzZS5yZXNvbHZlIHdpdGhvdXQgYW4gYXJndW1lbnQgdGhyb3dzIGFuIGVycm9yIGluIExHIFdlYk9TIDJcbiAgICB2YXIgcHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHByb21pc2UudGhlbihmbHVzaCk7XG4gICAgfTtcbiAgLy8gZm9yIG90aGVyIGVudmlyb25tZW50cyAtIG1hY3JvdGFzayBiYXNlZCBvbjpcbiAgLy8gLSBzZXRJbW1lZGlhdGVcbiAgLy8gLSBNZXNzYWdlQ2hhbm5lbFxuICAvLyAtIHdpbmRvdy5wb3N0TWVzc2FnXG4gIC8vIC0gb25yZWFkeXN0YXRlY2hhbmdlXG4gIC8vIC0gc2V0VGltZW91dFxuICB9IGVsc2Uge1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIHN0cmFuZ2UgSUUgKyB3ZWJwYWNrIGRldiBzZXJ2ZXIgYnVnIC0gdXNlIC5jYWxsKGdsb2JhbClcbiAgICAgIG1hY3JvdGFzay5jYWxsKGdsb2JhbCwgZmx1c2gpO1xuICAgIH07XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gKGZuKSB7XG4gICAgdmFyIHRhc2sgPSB7IGZuOiBmbiwgbmV4dDogdW5kZWZpbmVkIH07XG4gICAgaWYgKGxhc3QpIGxhc3QubmV4dCA9IHRhc2s7XG4gICAgaWYgKCFoZWFkKSB7XG4gICAgICBoZWFkID0gdGFzaztcbiAgICAgIG5vdGlmeSgpO1xuICAgIH0gbGFzdCA9IHRhc2s7XG4gIH07XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gMjUuNC4xLjUgTmV3UHJvbWlzZUNhcGFiaWxpdHkoQylcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG5cbmZ1bmN0aW9uIFByb21pc2VDYXBhYmlsaXR5KEMpIHtcbiAgdmFyIHJlc29sdmUsIHJlamVjdDtcbiAgdGhpcy5wcm9taXNlID0gbmV3IEMoZnVuY3Rpb24gKCQkcmVzb2x2ZSwgJCRyZWplY3QpIHtcbiAgICBpZiAocmVzb2x2ZSAhPT0gdW5kZWZpbmVkIHx8IHJlamVjdCAhPT0gdW5kZWZpbmVkKSB0aHJvdyBUeXBlRXJyb3IoJ0JhZCBQcm9taXNlIGNvbnN0cnVjdG9yJyk7XG4gICAgcmVzb2x2ZSA9ICQkcmVzb2x2ZTtcbiAgICByZWplY3QgPSAkJHJlamVjdDtcbiAgfSk7XG4gIHRoaXMucmVzb2x2ZSA9IGFGdW5jdGlvbihyZXNvbHZlKTtcbiAgdGhpcy5yZWplY3QgPSBhRnVuY3Rpb24ocmVqZWN0KTtcbn1cblxubW9kdWxlLmV4cG9ydHMuZiA9IGZ1bmN0aW9uIChDKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZUNhcGFiaWxpdHkoQyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gMTkuMS4yLjEgT2JqZWN0LmFzc2lnbih0YXJnZXQsIHNvdXJjZSwgLi4uKVxudmFyIGdldEtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpO1xudmFyIGdPUFMgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wcycpO1xudmFyIHBJRSA9IHJlcXVpcmUoJy4vX29iamVjdC1waWUnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIElPYmplY3QgPSByZXF1aXJlKCcuL19pb2JqZWN0Jyk7XG52YXIgJGFzc2lnbiA9IE9iamVjdC5hc3NpZ247XG5cbi8vIHNob3VsZCB3b3JrIHdpdGggc3ltYm9scyBhbmQgc2hvdWxkIGhhdmUgZGV0ZXJtaW5pc3RpYyBwcm9wZXJ0eSBvcmRlciAoVjggYnVnKVxubW9kdWxlLmV4cG9ydHMgPSAhJGFzc2lnbiB8fCByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgdmFyIEEgPSB7fTtcbiAgdmFyIEIgPSB7fTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gIHZhciBTID0gU3ltYm9sKCk7XG4gIHZhciBLID0gJ2FiY2RlZmdoaWprbG1ub3BxcnN0JztcbiAgQVtTXSA9IDc7XG4gIEsuc3BsaXQoJycpLmZvckVhY2goZnVuY3Rpb24gKGspIHsgQltrXSA9IGs7IH0pO1xuICByZXR1cm4gJGFzc2lnbih7fSwgQSlbU10gIT0gNyB8fCBPYmplY3Qua2V5cygkYXNzaWduKHt9LCBCKSkuam9pbignJykgIT0gSztcbn0pID8gZnVuY3Rpb24gYXNzaWduKHRhcmdldCwgc291cmNlKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgdmFyIFQgPSB0b09iamVjdCh0YXJnZXQpO1xuICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gIHZhciBpbmRleCA9IDE7XG4gIHZhciBnZXRTeW1ib2xzID0gZ09QUy5mO1xuICB2YXIgaXNFbnVtID0gcElFLmY7XG4gIHdoaWxlIChhTGVuID4gaW5kZXgpIHtcbiAgICB2YXIgUyA9IElPYmplY3QoYXJndW1lbnRzW2luZGV4KytdKTtcbiAgICB2YXIga2V5cyA9IGdldFN5bWJvbHMgPyBnZXRLZXlzKFMpLmNvbmNhdChnZXRTeW1ib2xzKFMpKSA6IGdldEtleXMoUyk7XG4gICAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICAgIHZhciBqID0gMDtcbiAgICB2YXIga2V5O1xuICAgIHdoaWxlIChsZW5ndGggPiBqKSBpZiAoaXNFbnVtLmNhbGwoUywga2V5ID0ga2V5c1tqKytdKSkgVFtrZXldID0gU1trZXldO1xuICB9IHJldHVybiBUO1xufSA6ICRhc3NpZ247XG4iLCIvLyAxOS4xLjIuMiAvIDE1LjIuMy41IE9iamVjdC5jcmVhdGUoTyBbLCBQcm9wZXJ0aWVzXSlcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGRQcyA9IHJlcXVpcmUoJy4vX29iamVjdC1kcHMnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4vX2VudW0tYnVnLWtleXMnKTtcbnZhciBJRV9QUk9UTyA9IHJlcXVpcmUoJy4vX3NoYXJlZC1rZXknKSgnSUVfUFJPVE8nKTtcbnZhciBFbXB0eSA9IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfTtcbnZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcblxuLy8gQ3JlYXRlIG9iamVjdCB3aXRoIGZha2UgYG51bGxgIHByb3RvdHlwZTogdXNlIGlmcmFtZSBPYmplY3Qgd2l0aCBjbGVhcmVkIHByb3RvdHlwZVxudmFyIGNyZWF0ZURpY3QgPSBmdW5jdGlvbiAoKSB7XG4gIC8vIFRocmFzaCwgd2FzdGUgYW5kIHNvZG9teTogSUUgR0MgYnVnXG4gIHZhciBpZnJhbWUgPSByZXF1aXJlKCcuL19kb20tY3JlYXRlJykoJ2lmcmFtZScpO1xuICB2YXIgaSA9IGVudW1CdWdLZXlzLmxlbmd0aDtcbiAgdmFyIGx0ID0gJzwnO1xuICB2YXIgZ3QgPSAnPic7XG4gIHZhciBpZnJhbWVEb2N1bWVudDtcbiAgaWZyYW1lLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gIHJlcXVpcmUoJy4vX2h0bWwnKS5hcHBlbmRDaGlsZChpZnJhbWUpO1xuICBpZnJhbWUuc3JjID0gJ2phdmFzY3JpcHQ6JzsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1zY3JpcHQtdXJsXG4gIC8vIGNyZWF0ZURpY3QgPSBpZnJhbWUuY29udGVudFdpbmRvdy5PYmplY3Q7XG4gIC8vIGh0bWwucmVtb3ZlQ2hpbGQoaWZyYW1lKTtcbiAgaWZyYW1lRG9jdW1lbnQgPSBpZnJhbWUuY29udGVudFdpbmRvdy5kb2N1bWVudDtcbiAgaWZyYW1lRG9jdW1lbnQub3BlbigpO1xuICBpZnJhbWVEb2N1bWVudC53cml0ZShsdCArICdzY3JpcHQnICsgZ3QgKyAnZG9jdW1lbnQuRj1PYmplY3QnICsgbHQgKyAnL3NjcmlwdCcgKyBndCk7XG4gIGlmcmFtZURvY3VtZW50LmNsb3NlKCk7XG4gIGNyZWF0ZURpY3QgPSBpZnJhbWVEb2N1bWVudC5GO1xuICB3aGlsZSAoaS0tKSBkZWxldGUgY3JlYXRlRGljdFtQUk9UT1RZUEVdW2VudW1CdWdLZXlzW2ldXTtcbiAgcmV0dXJuIGNyZWF0ZURpY3QoKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmNyZWF0ZSB8fCBmdW5jdGlvbiBjcmVhdGUoTywgUHJvcGVydGllcykge1xuICB2YXIgcmVzdWx0O1xuICBpZiAoTyAhPT0gbnVsbCkge1xuICAgIEVtcHR5W1BST1RPVFlQRV0gPSBhbk9iamVjdChPKTtcbiAgICByZXN1bHQgPSBuZXcgRW1wdHkoKTtcbiAgICBFbXB0eVtQUk9UT1RZUEVdID0gbnVsbDtcbiAgICAvLyBhZGQgXCJfX3Byb3RvX19cIiBmb3IgT2JqZWN0LmdldFByb3RvdHlwZU9mIHBvbHlmaWxsXG4gICAgcmVzdWx0W0lFX1BST1RPXSA9IE87XG4gIH0gZWxzZSByZXN1bHQgPSBjcmVhdGVEaWN0KCk7XG4gIHJldHVybiBQcm9wZXJ0aWVzID09PSB1bmRlZmluZWQgPyByZXN1bHQgOiBkUHMocmVzdWx0LCBQcm9wZXJ0aWVzKTtcbn07XG4iLCJ2YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBJRThfRE9NX0RFRklORSA9IHJlcXVpcmUoJy4vX2llOC1kb20tZGVmaW5lJyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcbnZhciBkUCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcblxuZXhwb3J0cy5mID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIFAgPSB0b1ByaW1pdGl2ZShQLCB0cnVlKTtcbiAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICByZXR1cm4gZFAoTywgUCwgQXR0cmlidXRlcyk7XG4gIH0gY2F0Y2ggKGUpIHsgLyogZW1wdHkgKi8gfVxuICBpZiAoJ2dldCcgaW4gQXR0cmlidXRlcyB8fCAnc2V0JyBpbiBBdHRyaWJ1dGVzKSB0aHJvdyBUeXBlRXJyb3IoJ0FjY2Vzc29ycyBub3Qgc3VwcG9ydGVkIScpO1xuICBpZiAoJ3ZhbHVlJyBpbiBBdHRyaWJ1dGVzKSBPW1BdID0gQXR0cmlidXRlcy52YWx1ZTtcbiAgcmV0dXJuIE87XG59O1xuIiwidmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBnZXRLZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMgOiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKE8sIFByb3BlcnRpZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIHZhciBrZXlzID0gZ2V0S2V5cyhQcm9wZXJ0aWVzKTtcbiAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICB2YXIgaSA9IDA7XG4gIHZhciBQO1xuICB3aGlsZSAobGVuZ3RoID4gaSkgZFAuZihPLCBQID0ga2V5c1tpKytdLCBQcm9wZXJ0aWVzW1BdKTtcbiAgcmV0dXJuIE87XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gRm9yY2VkIHJlcGxhY2VtZW50IHByb3RvdHlwZSBhY2Nlc3NvcnMgbWV0aG9kc1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19saWJyYXJ5JykgfHwgIXJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICB2YXIgSyA9IE1hdGgucmFuZG9tKCk7XG4gIC8vIEluIEZGIHRocm93cyBvbmx5IGRlZmluZSBtZXRob2RzXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZiwgbm8tdXNlbGVzcy1jYWxsXG4gIF9fZGVmaW5lU2V0dGVyX18uY2FsbChudWxsLCBLLCBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0pO1xuICBkZWxldGUgcmVxdWlyZSgnLi9fZ2xvYmFsJylbS107XG59KTtcbiIsInZhciBwSUUgPSByZXF1aXJlKCcuL19vYmplY3QtcGllJyk7XG52YXIgY3JlYXRlRGVzYyA9IHJlcXVpcmUoJy4vX3Byb3BlcnR5LWRlc2MnKTtcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciBJRThfRE9NX0RFRklORSA9IHJlcXVpcmUoJy4vX2llOC1kb20tZGVmaW5lJyk7XG52YXIgZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbmV4cG9ydHMuZiA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgPyBnT1BEIDogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApIHtcbiAgTyA9IHRvSU9iamVjdChPKTtcbiAgUCA9IHRvUHJpbWl0aXZlKFAsIHRydWUpO1xuICBpZiAoSUU4X0RPTV9ERUZJTkUpIHRyeSB7XG4gICAgcmV0dXJuIGdPUEQoTywgUCk7XG4gIH0gY2F0Y2ggKGUpIHsgLyogZW1wdHkgKi8gfVxuICBpZiAoaGFzKE8sIFApKSByZXR1cm4gY3JlYXRlRGVzYyghcElFLmYuY2FsbChPLCBQKSwgT1tQXSk7XG59O1xuIiwiLy8gZmFsbGJhY2sgZm9yIElFMTEgYnVnZ3kgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgd2l0aCBpZnJhbWUgYW5kIHdpbmRvd1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciBnT1BOID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4nKS5mO1xudmFyIHRvU3RyaW5nID0ge30udG9TdHJpbmc7XG5cbnZhciB3aW5kb3dOYW1lcyA9IHR5cGVvZiB3aW5kb3cgPT0gJ29iamVjdCcgJiYgd2luZG93ICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzXG4gID8gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMod2luZG93KSA6IFtdO1xuXG52YXIgZ2V0V2luZG93TmFtZXMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gZ09QTihpdCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gd2luZG93TmFtZXMuc2xpY2UoKTtcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMuZiA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoaXQpIHtcbiAgcmV0dXJuIHdpbmRvd05hbWVzICYmIHRvU3RyaW5nLmNhbGwoaXQpID09ICdbb2JqZWN0IFdpbmRvd10nID8gZ2V0V2luZG93TmFtZXMoaXQpIDogZ09QTih0b0lPYmplY3QoaXQpKTtcbn07XG4iLCIvLyAxOS4xLjIuNyAvIDE1LjIuMy40IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKE8pXG52YXIgJGtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cy1pbnRlcm5hbCcpO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuL19lbnVtLWJ1Zy1rZXlzJykuY29uY2F0KCdsZW5ndGgnLCAncHJvdG90eXBlJyk7XG5cbmV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHx8IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoTykge1xuICByZXR1cm4gJGtleXMoTywgaGlkZGVuS2V5cyk7XG59O1xuIiwiZXhwb3J0cy5mID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbiIsIi8vIDE5LjEuMi45IC8gMTUuMi4zLjIgT2JqZWN0LmdldFByb3RvdHlwZU9mKE8pXG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciBJRV9QUk9UTyA9IHJlcXVpcmUoJy4vX3NoYXJlZC1rZXknKSgnSUVfUFJPVE8nKTtcbnZhciBPYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmdldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIChPKSB7XG4gIE8gPSB0b09iamVjdChPKTtcbiAgaWYgKGhhcyhPLCBJRV9QUk9UTykpIHJldHVybiBPW0lFX1BST1RPXTtcbiAgaWYgKHR5cGVvZiBPLmNvbnN0cnVjdG9yID09ICdmdW5jdGlvbicgJiYgTyBpbnN0YW5jZW9mIE8uY29uc3RydWN0b3IpIHtcbiAgICByZXR1cm4gTy5jb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG4gIH0gcmV0dXJuIE8gaW5zdGFuY2VvZiBPYmplY3QgPyBPYmplY3RQcm90byA6IG51bGw7XG59O1xuIiwidmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciBhcnJheUluZGV4T2YgPSByZXF1aXJlKCcuL19hcnJheS1pbmNsdWRlcycpKGZhbHNlKTtcbnZhciBJRV9QUk9UTyA9IHJlcXVpcmUoJy4vX3NoYXJlZC1rZXknKSgnSUVfUFJPVE8nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBuYW1lcykge1xuICB2YXIgTyA9IHRvSU9iamVjdChvYmplY3QpO1xuICB2YXIgaSA9IDA7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgdmFyIGtleTtcbiAgZm9yIChrZXkgaW4gTykgaWYgKGtleSAhPSBJRV9QUk9UTykgaGFzKE8sIGtleSkgJiYgcmVzdWx0LnB1c2goa2V5KTtcbiAgLy8gRG9uJ3QgZW51bSBidWcgJiBoaWRkZW4ga2V5c1xuICB3aGlsZSAobmFtZXMubGVuZ3RoID4gaSkgaWYgKGhhcyhPLCBrZXkgPSBuYW1lc1tpKytdKSkge1xuICAgIH5hcnJheUluZGV4T2YocmVzdWx0LCBrZXkpIHx8IHJlc3VsdC5wdXNoKGtleSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCIvLyAxOS4xLjIuMTQgLyAxNS4yLjMuMTQgT2JqZWN0LmtleXMoTylcbnZhciAka2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzLWludGVybmFsJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuL19lbnVtLWJ1Zy1rZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmtleXMgfHwgZnVuY3Rpb24ga2V5cyhPKSB7XG4gIHJldHVybiAka2V5cyhPLCBlbnVtQnVnS2V5cyk7XG59O1xuIiwiZXhwb3J0cy5mID0ge30ucHJvcGVydHlJc0VudW1lcmFibGU7XG4iLCIvLyBtb3N0IE9iamVjdCBtZXRob2RzIGJ5IEVTNiBzaG91bGQgYWNjZXB0IHByaW1pdGl2ZXNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgY29yZSA9IHJlcXVpcmUoJy4vX2NvcmUnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChLRVksIGV4ZWMpIHtcbiAgdmFyIGZuID0gKGNvcmUuT2JqZWN0IHx8IHt9KVtLRVldIHx8IE9iamVjdFtLRVldO1xuICB2YXIgZXhwID0ge307XG4gIGV4cFtLRVldID0gZXhlYyhmbik7XG4gICRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogZmFpbHMoZnVuY3Rpb24gKCkgeyBmbigxKTsgfSksICdPYmplY3QnLCBleHApO1xufTtcbiIsInZhciBnZXRLZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgaXNFbnVtID0gcmVxdWlyZSgnLi9fb2JqZWN0LXBpZScpLmY7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpc0VudHJpZXMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChpdCkge1xuICAgIHZhciBPID0gdG9JT2JqZWN0KGl0KTtcbiAgICB2YXIga2V5cyA9IGdldEtleXMoTyk7XG4gICAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgdmFyIGtleTtcbiAgICB3aGlsZSAobGVuZ3RoID4gaSkgaWYgKGlzRW51bS5jYWxsKE8sIGtleSA9IGtleXNbaSsrXSkpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGlzRW50cmllcyA/IFtrZXksIE9ba2V5XV0gOiBPW2tleV0pO1xuICAgIH0gcmV0dXJuIHJlc3VsdDtcbiAgfTtcbn07XG4iLCIvLyBhbGwgb2JqZWN0IGtleXMsIGluY2x1ZGVzIG5vbi1lbnVtZXJhYmxlIGFuZCBzeW1ib2xzXG52YXIgZ09QTiA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJyk7XG52YXIgZ09QUyA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BzJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBSZWZsZWN0ID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykuUmVmbGVjdDtcbm1vZHVsZS5leHBvcnRzID0gUmVmbGVjdCAmJiBSZWZsZWN0Lm93bktleXMgfHwgZnVuY3Rpb24gb3duS2V5cyhpdCkge1xuICB2YXIga2V5cyA9IGdPUE4uZihhbk9iamVjdChpdCkpO1xuICB2YXIgZ2V0U3ltYm9scyA9IGdPUFMuZjtcbiAgcmV0dXJuIGdldFN5bWJvbHMgPyBrZXlzLmNvbmNhdChnZXRTeW1ib2xzKGl0KSkgOiBrZXlzO1xufTtcbiIsInZhciAkcGFyc2VGbG9hdCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLnBhcnNlRmxvYXQ7XG52YXIgJHRyaW0gPSByZXF1aXJlKCcuL19zdHJpbmctdHJpbScpLnRyaW07XG5cbm1vZHVsZS5leHBvcnRzID0gMSAvICRwYXJzZUZsb2F0KHJlcXVpcmUoJy4vX3N0cmluZy13cycpICsgJy0wJykgIT09IC1JbmZpbml0eSA/IGZ1bmN0aW9uIHBhcnNlRmxvYXQoc3RyKSB7XG4gIHZhciBzdHJpbmcgPSAkdHJpbShTdHJpbmcoc3RyKSwgMyk7XG4gIHZhciByZXN1bHQgPSAkcGFyc2VGbG9hdChzdHJpbmcpO1xuICByZXR1cm4gcmVzdWx0ID09PSAwICYmIHN0cmluZy5jaGFyQXQoMCkgPT0gJy0nID8gLTAgOiByZXN1bHQ7XG59IDogJHBhcnNlRmxvYXQ7XG4iLCJ2YXIgJHBhcnNlSW50ID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykucGFyc2VJbnQ7XG52YXIgJHRyaW0gPSByZXF1aXJlKCcuL19zdHJpbmctdHJpbScpLnRyaW07XG52YXIgd3MgPSByZXF1aXJlKCcuL19zdHJpbmctd3MnKTtcbnZhciBoZXggPSAvXlstK10/MFt4WF0vO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICRwYXJzZUludCh3cyArICcwOCcpICE9PSA4IHx8ICRwYXJzZUludCh3cyArICcweDE2JykgIT09IDIyID8gZnVuY3Rpb24gcGFyc2VJbnQoc3RyLCByYWRpeCkge1xuICB2YXIgc3RyaW5nID0gJHRyaW0oU3RyaW5nKHN0ciksIDMpO1xuICByZXR1cm4gJHBhcnNlSW50KHN0cmluZywgKHJhZGl4ID4+PiAwKSB8fCAoaGV4LnRlc3Qoc3RyaW5nKSA/IDE2IDogMTApKTtcbn0gOiAkcGFyc2VJbnQ7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHsgZTogZmFsc2UsIHY6IGV4ZWMoKSB9O1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIHsgZTogdHJ1ZSwgdjogZSB9O1xuICB9XG59O1xuIiwidmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IHJlcXVpcmUoJy4vX25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQywgeCkge1xuICBhbk9iamVjdChDKTtcbiAgaWYgKGlzT2JqZWN0KHgpICYmIHguY29uc3RydWN0b3IgPT09IEMpIHJldHVybiB4O1xuICB2YXIgcHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eS5mKEMpO1xuICB2YXIgcmVzb2x2ZSA9IHByb21pc2VDYXBhYmlsaXR5LnJlc29sdmU7XG4gIHJlc29sdmUoeCk7XG4gIHJldHVybiBwcm9taXNlQ2FwYWJpbGl0eS5wcm9taXNlO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGJpdG1hcCwgdmFsdWUpIHtcbiAgcmV0dXJuIHtcbiAgICBlbnVtZXJhYmxlOiAhKGJpdG1hcCAmIDEpLFxuICAgIGNvbmZpZ3VyYWJsZTogIShiaXRtYXAgJiAyKSxcbiAgICB3cml0YWJsZTogIShiaXRtYXAgJiA0KSxcbiAgICB2YWx1ZTogdmFsdWVcbiAgfTtcbn07XG4iLCJ2YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGFyZ2V0LCBzcmMsIHNhZmUpIHtcbiAgZm9yICh2YXIga2V5IGluIHNyYykgcmVkZWZpbmUodGFyZ2V0LCBrZXksIHNyY1trZXldLCBzYWZlKTtcbiAgcmV0dXJuIHRhcmdldDtcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciBTUkMgPSByZXF1aXJlKCcuL191aWQnKSgnc3JjJyk7XG52YXIgJHRvU3RyaW5nID0gcmVxdWlyZSgnLi9fZnVuY3Rpb24tdG8tc3RyaW5nJyk7XG52YXIgVE9fU1RSSU5HID0gJ3RvU3RyaW5nJztcbnZhciBUUEwgPSAoJycgKyAkdG9TdHJpbmcpLnNwbGl0KFRPX1NUUklORyk7XG5cbnJlcXVpcmUoJy4vX2NvcmUnKS5pbnNwZWN0U291cmNlID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiAkdG9TdHJpbmcuY2FsbChpdCk7XG59O1xuXG4obW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTywga2V5LCB2YWwsIHNhZmUpIHtcbiAgdmFyIGlzRnVuY3Rpb24gPSB0eXBlb2YgdmFsID09ICdmdW5jdGlvbic7XG4gIGlmIChpc0Z1bmN0aW9uKSBoYXModmFsLCAnbmFtZScpIHx8IGhpZGUodmFsLCAnbmFtZScsIGtleSk7XG4gIGlmIChPW2tleV0gPT09IHZhbCkgcmV0dXJuO1xuICBpZiAoaXNGdW5jdGlvbikgaGFzKHZhbCwgU1JDKSB8fCBoaWRlKHZhbCwgU1JDLCBPW2tleV0gPyAnJyArIE9ba2V5XSA6IFRQTC5qb2luKFN0cmluZyhrZXkpKSk7XG4gIGlmIChPID09PSBnbG9iYWwpIHtcbiAgICBPW2tleV0gPSB2YWw7XG4gIH0gZWxzZSBpZiAoIXNhZmUpIHtcbiAgICBkZWxldGUgT1trZXldO1xuICAgIGhpZGUoTywga2V5LCB2YWwpO1xuICB9IGVsc2UgaWYgKE9ba2V5XSkge1xuICAgIE9ba2V5XSA9IHZhbDtcbiAgfSBlbHNlIHtcbiAgICBoaWRlKE8sIGtleSwgdmFsKTtcbiAgfVxuLy8gYWRkIGZha2UgRnVuY3Rpb24jdG9TdHJpbmcgZm9yIGNvcnJlY3Qgd29yayB3cmFwcGVkIG1ldGhvZHMgLyBjb25zdHJ1Y3RvcnMgd2l0aCBtZXRob2RzIGxpa2UgTG9EYXNoIGlzTmF0aXZlXG59KShGdW5jdGlvbi5wcm90b3R5cGUsIFRPX1NUUklORywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gIHJldHVybiB0eXBlb2YgdGhpcyA9PSAnZnVuY3Rpb24nICYmIHRoaXNbU1JDXSB8fCAkdG9TdHJpbmcuY2FsbCh0aGlzKTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4vX2NsYXNzb2YnKTtcbnZhciBidWlsdGluRXhlYyA9IFJlZ0V4cC5wcm90b3R5cGUuZXhlYztcblxuIC8vIGBSZWdFeHBFeGVjYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXJlZ2V4cGV4ZWNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFIsIFMpIHtcbiAgdmFyIGV4ZWMgPSBSLmV4ZWM7XG4gIGlmICh0eXBlb2YgZXhlYyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHZhciByZXN1bHQgPSBleGVjLmNhbGwoUiwgUyk7XG4gICAgaWYgKHR5cGVvZiByZXN1bHQgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdSZWdFeHAgZXhlYyBtZXRob2QgcmV0dXJuZWQgc29tZXRoaW5nIG90aGVyIHRoYW4gYW4gT2JqZWN0IG9yIG51bGwnKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBpZiAoY2xhc3NvZihSKSAhPT0gJ1JlZ0V4cCcpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdSZWdFeHAjZXhlYyBjYWxsZWQgb24gaW5jb21wYXRpYmxlIHJlY2VpdmVyJyk7XG4gIH1cbiAgcmV0dXJuIGJ1aWx0aW5FeGVjLmNhbGwoUiwgUyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgcmVnZXhwRmxhZ3MgPSByZXF1aXJlKCcuL19mbGFncycpO1xuXG52YXIgbmF0aXZlRXhlYyA9IFJlZ0V4cC5wcm90b3R5cGUuZXhlYztcbi8vIFRoaXMgYWx3YXlzIHJlZmVycyB0byB0aGUgbmF0aXZlIGltcGxlbWVudGF0aW9uLCBiZWNhdXNlIHRoZVxuLy8gU3RyaW5nI3JlcGxhY2UgcG9seWZpbGwgdXNlcyAuL2ZpeC1yZWdleHAtd2VsbC1rbm93bi1zeW1ib2wtbG9naWMuanMsXG4vLyB3aGljaCBsb2FkcyB0aGlzIGZpbGUgYmVmb3JlIHBhdGNoaW5nIHRoZSBtZXRob2QuXG52YXIgbmF0aXZlUmVwbGFjZSA9IFN0cmluZy5wcm90b3R5cGUucmVwbGFjZTtcblxudmFyIHBhdGNoZWRFeGVjID0gbmF0aXZlRXhlYztcblxudmFyIExBU1RfSU5ERVggPSAnbGFzdEluZGV4JztcblxudmFyIFVQREFURVNfTEFTVF9JTkRFWF9XUk9ORyA9IChmdW5jdGlvbiAoKSB7XG4gIHZhciByZTEgPSAvYS8sXG4gICAgICByZTIgPSAvYiovZztcbiAgbmF0aXZlRXhlYy5jYWxsKHJlMSwgJ2EnKTtcbiAgbmF0aXZlRXhlYy5jYWxsKHJlMiwgJ2EnKTtcbiAgcmV0dXJuIHJlMVtMQVNUX0lOREVYXSAhPT0gMCB8fCByZTJbTEFTVF9JTkRFWF0gIT09IDA7XG59KSgpO1xuXG4vLyBub25wYXJ0aWNpcGF0aW5nIGNhcHR1cmluZyBncm91cCwgY29waWVkIGZyb20gZXM1LXNoaW0ncyBTdHJpbmcjc3BsaXQgcGF0Y2guXG52YXIgTlBDR19JTkNMVURFRCA9IC8oKT8/Ly5leGVjKCcnKVsxXSAhPT0gdW5kZWZpbmVkO1xuXG52YXIgUEFUQ0ggPSBVUERBVEVTX0xBU1RfSU5ERVhfV1JPTkcgfHwgTlBDR19JTkNMVURFRDtcblxuaWYgKFBBVENIKSB7XG4gIHBhdGNoZWRFeGVjID0gZnVuY3Rpb24gZXhlYyhzdHIpIHtcbiAgICB2YXIgcmUgPSB0aGlzO1xuICAgIHZhciBsYXN0SW5kZXgsIHJlQ29weSwgbWF0Y2gsIGk7XG5cbiAgICBpZiAoTlBDR19JTkNMVURFRCkge1xuICAgICAgcmVDb3B5ID0gbmV3IFJlZ0V4cCgnXicgKyByZS5zb3VyY2UgKyAnJCg/IVxcXFxzKScsIHJlZ2V4cEZsYWdzLmNhbGwocmUpKTtcbiAgICB9XG4gICAgaWYgKFVQREFURVNfTEFTVF9JTkRFWF9XUk9ORykgbGFzdEluZGV4ID0gcmVbTEFTVF9JTkRFWF07XG5cbiAgICBtYXRjaCA9IG5hdGl2ZUV4ZWMuY2FsbChyZSwgc3RyKTtcblxuICAgIGlmIChVUERBVEVTX0xBU1RfSU5ERVhfV1JPTkcgJiYgbWF0Y2gpIHtcbiAgICAgIHJlW0xBU1RfSU5ERVhdID0gcmUuZ2xvYmFsID8gbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGggOiBsYXN0SW5kZXg7XG4gICAgfVxuICAgIGlmIChOUENHX0lOQ0xVREVEICYmIG1hdGNoICYmIG1hdGNoLmxlbmd0aCA+IDEpIHtcbiAgICAgIC8vIEZpeCBicm93c2VycyB3aG9zZSBgZXhlY2AgbWV0aG9kcyBkb24ndCBjb25zaXN0ZW50bHkgcmV0dXJuIGB1bmRlZmluZWRgXG4gICAgICAvLyBmb3IgTlBDRywgbGlrZSBJRTguIE5PVEU6IFRoaXMgZG9lc24nIHdvcmsgZm9yIC8oLj8pPy9cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1sb29wLWZ1bmNcbiAgICAgIG5hdGl2ZVJlcGxhY2UuY2FsbChtYXRjaFswXSwgcmVDb3B5LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGZvciAoaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoIC0gMjsgaSsrKSB7XG4gICAgICAgICAgaWYgKGFyZ3VtZW50c1tpXSA9PT0gdW5kZWZpbmVkKSBtYXRjaFtpXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hdGNoO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGNoZWRFeGVjO1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAocmVnRXhwLCByZXBsYWNlKSB7XG4gIHZhciByZXBsYWNlciA9IHJlcGxhY2UgPT09IE9iamVjdChyZXBsYWNlKSA/IGZ1bmN0aW9uIChwYXJ0KSB7XG4gICAgcmV0dXJuIHJlcGxhY2VbcGFydF07XG4gIH0gOiByZXBsYWNlO1xuICByZXR1cm4gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIFN0cmluZyhpdCkucmVwbGFjZShyZWdFeHAsIHJlcGxhY2VyKTtcbiAgfTtcbn07XG4iLCIvLyA3LjIuOSBTYW1lVmFsdWUoeCwgeSlcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmlzIHx8IGZ1bmN0aW9uIGlzKHgsIHkpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICByZXR1cm4geCA9PT0geSA/IHggIT09IDAgfHwgMSAvIHggPT09IDEgLyB5IDogeCAhPSB4ICYmIHkgIT0geTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbnZhciBmb3JPZiA9IHJlcXVpcmUoJy4vX2Zvci1vZicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChDT0xMRUNUSU9OKSB7XG4gICRleHBvcnQoJGV4cG9ydC5TLCBDT0xMRUNUSU9OLCB7IGZyb206IGZ1bmN0aW9uIGZyb20oc291cmNlIC8qICwgbWFwRm4sIHRoaXNBcmcgKi8pIHtcbiAgICB2YXIgbWFwRm4gPSBhcmd1bWVudHNbMV07XG4gICAgdmFyIG1hcHBpbmcsIEEsIG4sIGNiO1xuICAgIGFGdW5jdGlvbih0aGlzKTtcbiAgICBtYXBwaW5nID0gbWFwRm4gIT09IHVuZGVmaW5lZDtcbiAgICBpZiAobWFwcGluZykgYUZ1bmN0aW9uKG1hcEZuKTtcbiAgICBpZiAoc291cmNlID09IHVuZGVmaW5lZCkgcmV0dXJuIG5ldyB0aGlzKCk7XG4gICAgQSA9IFtdO1xuICAgIGlmIChtYXBwaW5nKSB7XG4gICAgICBuID0gMDtcbiAgICAgIGNiID0gY3R4KG1hcEZuLCBhcmd1bWVudHNbMl0sIDIpO1xuICAgICAgZm9yT2Yoc291cmNlLCBmYWxzZSwgZnVuY3Rpb24gKG5leHRJdGVtKSB7XG4gICAgICAgIEEucHVzaChjYihuZXh0SXRlbSwgbisrKSk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZm9yT2Yoc291cmNlLCBmYWxzZSwgQS5wdXNoLCBBKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyB0aGlzKEEpO1xuICB9IH0pO1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS9cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKENPTExFQ1RJT04pIHtcbiAgJGV4cG9ydCgkZXhwb3J0LlMsIENPTExFQ1RJT04sIHsgb2Y6IGZ1bmN0aW9uIG9mKCkge1xuICAgIHZhciBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciBBID0gbmV3IEFycmF5KGxlbmd0aCk7XG4gICAgd2hpbGUgKGxlbmd0aC0tKSBBW2xlbmd0aF0gPSBhcmd1bWVudHNbbGVuZ3RoXTtcbiAgICByZXR1cm4gbmV3IHRoaXMoQSk7XG4gIH0gfSk7XG59O1xuIiwiLy8gV29ya3Mgd2l0aCBfX3Byb3RvX18gb25seS4gT2xkIHY4IGNhbid0IHdvcmsgd2l0aCBudWxsIHByb3RvIG9iamVjdHMuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90byAqL1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBjaGVjayA9IGZ1bmN0aW9uIChPLCBwcm90bykge1xuICBhbk9iamVjdChPKTtcbiAgaWYgKCFpc09iamVjdChwcm90bykgJiYgcHJvdG8gIT09IG51bGwpIHRocm93IFR5cGVFcnJvcihwcm90byArIFwiOiBjYW4ndCBzZXQgYXMgcHJvdG90eXBlIVwiKTtcbn07XG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc2V0OiBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgKCdfX3Byb3RvX18nIGluIHt9ID8gLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICAgIGZ1bmN0aW9uICh0ZXN0LCBidWdneSwgc2V0KSB7XG4gICAgICB0cnkge1xuICAgICAgICBzZXQgPSByZXF1aXJlKCcuL19jdHgnKShGdW5jdGlvbi5jYWxsLCByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpLmYoT2JqZWN0LnByb3RvdHlwZSwgJ19fcHJvdG9fXycpLnNldCwgMik7XG4gICAgICAgIHNldCh0ZXN0LCBbXSk7XG4gICAgICAgIGJ1Z2d5ID0gISh0ZXN0IGluc3RhbmNlb2YgQXJyYXkpO1xuICAgICAgfSBjYXRjaCAoZSkgeyBidWdneSA9IHRydWU7IH1cbiAgICAgIHJldHVybiBmdW5jdGlvbiBzZXRQcm90b3R5cGVPZihPLCBwcm90bykge1xuICAgICAgICBjaGVjayhPLCBwcm90byk7XG4gICAgICAgIGlmIChidWdneSkgTy5fX3Byb3RvX18gPSBwcm90bztcbiAgICAgICAgZWxzZSBzZXQoTywgcHJvdG8pO1xuICAgICAgICByZXR1cm4gTztcbiAgICAgIH07XG4gICAgfSh7fSwgZmFsc2UpIDogdW5kZWZpbmVkKSxcbiAgY2hlY2s6IGNoZWNrXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpO1xudmFyIFNQRUNJRVMgPSByZXF1aXJlKCcuL193a3MnKSgnc3BlY2llcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChLRVkpIHtcbiAgdmFyIEMgPSBnbG9iYWxbS0VZXTtcbiAgaWYgKERFU0NSSVBUT1JTICYmIEMgJiYgIUNbU1BFQ0lFU10pIGRQLmYoQywgU1BFQ0lFUywge1xuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH1cbiAgfSk7XG59O1xuIiwidmFyIGRlZiA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgVEFHID0gcmVxdWlyZSgnLi9fd2tzJykoJ3RvU3RyaW5nVGFnJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCB0YWcsIHN0YXQpIHtcbiAgaWYgKGl0ICYmICFoYXMoaXQgPSBzdGF0ID8gaXQgOiBpdC5wcm90b3R5cGUsIFRBRykpIGRlZihpdCwgVEFHLCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgdmFsdWU6IHRhZyB9KTtcbn07XG4iLCJ2YXIgc2hhcmVkID0gcmVxdWlyZSgnLi9fc2hhcmVkJykoJ2tleXMnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuL191aWQnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4gc2hhcmVkW2tleV0gfHwgKHNoYXJlZFtrZXldID0gdWlkKGtleSkpO1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIFNIQVJFRCA9ICdfX2NvcmUtanNfc2hhcmVkX18nO1xudmFyIHN0b3JlID0gZ2xvYmFsW1NIQVJFRF0gfHwgKGdsb2JhbFtTSEFSRURdID0ge30pO1xuXG4obW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICByZXR1cm4gc3RvcmVba2V5XSB8fCAoc3RvcmVba2V5XSA9IHZhbHVlICE9PSB1bmRlZmluZWQgPyB2YWx1ZSA6IHt9KTtcbn0pKCd2ZXJzaW9ucycsIFtdKS5wdXNoKHtcbiAgdmVyc2lvbjogY29yZS52ZXJzaW9uLFxuICBtb2RlOiByZXF1aXJlKCcuL19saWJyYXJ5JykgPyAncHVyZScgOiAnZ2xvYmFsJyxcbiAgY29weXJpZ2h0OiAnwqkgMjAxOSBEZW5pcyBQdXNoa2FyZXYgKHpsb2lyb2NrLnJ1KSdcbn0pO1xuIiwiLy8gNy4zLjIwIFNwZWNpZXNDb25zdHJ1Y3RvcihPLCBkZWZhdWx0Q29uc3RydWN0b3IpXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgU1BFQ0lFUyA9IHJlcXVpcmUoJy4vX3drcycpKCdzcGVjaWVzJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBEKSB7XG4gIHZhciBDID0gYW5PYmplY3QoTykuY29uc3RydWN0b3I7XG4gIHZhciBTO1xuICByZXR1cm4gQyA9PT0gdW5kZWZpbmVkIHx8IChTID0gYW5PYmplY3QoQylbU1BFQ0lFU10pID09IHVuZGVmaW5lZCA/IEQgOiBhRnVuY3Rpb24oUyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobWV0aG9kLCBhcmcpIHtcbiAgcmV0dXJuICEhbWV0aG9kICYmIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlbGVzcy1jYWxsXG4gICAgYXJnID8gbWV0aG9kLmNhbGwobnVsbCwgZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9LCAxKSA6IG1ldGhvZC5jYWxsKG51bGwpO1xuICB9KTtcbn07XG4iLCJ2YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG4vLyB0cnVlICAtPiBTdHJpbmcjYXRcbi8vIGZhbHNlIC0+IFN0cmluZyNjb2RlUG9pbnRBdFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoVE9fU1RSSU5HKSB7XG4gIHJldHVybiBmdW5jdGlvbiAodGhhdCwgcG9zKSB7XG4gICAgdmFyIHMgPSBTdHJpbmcoZGVmaW5lZCh0aGF0KSk7XG4gICAgdmFyIGkgPSB0b0ludGVnZXIocG9zKTtcbiAgICB2YXIgbCA9IHMubGVuZ3RoO1xuICAgIHZhciBhLCBiO1xuICAgIGlmIChpIDwgMCB8fCBpID49IGwpIHJldHVybiBUT19TVFJJTkcgPyAnJyA6IHVuZGVmaW5lZDtcbiAgICBhID0gcy5jaGFyQ29kZUF0KGkpO1xuICAgIHJldHVybiBhIDwgMHhkODAwIHx8IGEgPiAweGRiZmYgfHwgaSArIDEgPT09IGwgfHwgKGIgPSBzLmNoYXJDb2RlQXQoaSArIDEpKSA8IDB4ZGMwMCB8fCBiID4gMHhkZmZmXG4gICAgICA/IFRPX1NUUklORyA/IHMuY2hhckF0KGkpIDogYVxuICAgICAgOiBUT19TVFJJTkcgPyBzLnNsaWNlKGksIGkgKyAyKSA6IChhIC0gMHhkODAwIDw8IDEwKSArIChiIC0gMHhkYzAwKSArIDB4MTAwMDA7XG4gIH07XG59O1xuIiwiLy8gaGVscGVyIGZvciBTdHJpbmcje3N0YXJ0c1dpdGgsIGVuZHNXaXRoLCBpbmNsdWRlc31cbnZhciBpc1JlZ0V4cCA9IHJlcXVpcmUoJy4vX2lzLXJlZ2V4cCcpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRoYXQsIHNlYXJjaFN0cmluZywgTkFNRSkge1xuICBpZiAoaXNSZWdFeHAoc2VhcmNoU3RyaW5nKSkgdGhyb3cgVHlwZUVycm9yKCdTdHJpbmcjJyArIE5BTUUgKyBcIiBkb2Vzbid0IGFjY2VwdCByZWdleCFcIik7XG4gIHJldHVybiBTdHJpbmcoZGVmaW5lZCh0aGF0KSk7XG59O1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbnZhciBxdW90ID0gL1wiL2c7XG4vLyBCLjIuMy4yLjEgQ3JlYXRlSFRNTChzdHJpbmcsIHRhZywgYXR0cmlidXRlLCB2YWx1ZSlcbnZhciBjcmVhdGVIVE1MID0gZnVuY3Rpb24gKHN0cmluZywgdGFnLCBhdHRyaWJ1dGUsIHZhbHVlKSB7XG4gIHZhciBTID0gU3RyaW5nKGRlZmluZWQoc3RyaW5nKSk7XG4gIHZhciBwMSA9ICc8JyArIHRhZztcbiAgaWYgKGF0dHJpYnV0ZSAhPT0gJycpIHAxICs9ICcgJyArIGF0dHJpYnV0ZSArICc9XCInICsgU3RyaW5nKHZhbHVlKS5yZXBsYWNlKHF1b3QsICcmcXVvdDsnKSArICdcIic7XG4gIHJldHVybiBwMSArICc+JyArIFMgKyAnPC8nICsgdGFnICsgJz4nO1xufTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE5BTUUsIGV4ZWMpIHtcbiAgdmFyIE8gPSB7fTtcbiAgT1tOQU1FXSA9IGV4ZWMoY3JlYXRlSFRNTCk7XG4gICRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIHZhciB0ZXN0ID0gJydbTkFNRV0oJ1wiJyk7XG4gICAgcmV0dXJuIHRlc3QgIT09IHRlc3QudG9Mb3dlckNhc2UoKSB8fCB0ZXN0LnNwbGl0KCdcIicpLmxlbmd0aCA+IDM7XG4gIH0pLCAnU3RyaW5nJywgTyk7XG59O1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc3RyaW5nLXBhZC1zdGFydC1lbmRcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIHJlcGVhdCA9IHJlcXVpcmUoJy4vX3N0cmluZy1yZXBlYXQnKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0aGF0LCBtYXhMZW5ndGgsIGZpbGxTdHJpbmcsIGxlZnQpIHtcbiAgdmFyIFMgPSBTdHJpbmcoZGVmaW5lZCh0aGF0KSk7XG4gIHZhciBzdHJpbmdMZW5ndGggPSBTLmxlbmd0aDtcbiAgdmFyIGZpbGxTdHIgPSBmaWxsU3RyaW5nID09PSB1bmRlZmluZWQgPyAnICcgOiBTdHJpbmcoZmlsbFN0cmluZyk7XG4gIHZhciBpbnRNYXhMZW5ndGggPSB0b0xlbmd0aChtYXhMZW5ndGgpO1xuICBpZiAoaW50TWF4TGVuZ3RoIDw9IHN0cmluZ0xlbmd0aCB8fCBmaWxsU3RyID09ICcnKSByZXR1cm4gUztcbiAgdmFyIGZpbGxMZW4gPSBpbnRNYXhMZW5ndGggLSBzdHJpbmdMZW5ndGg7XG4gIHZhciBzdHJpbmdGaWxsZXIgPSByZXBlYXQuY2FsbChmaWxsU3RyLCBNYXRoLmNlaWwoZmlsbExlbiAvIGZpbGxTdHIubGVuZ3RoKSk7XG4gIGlmIChzdHJpbmdGaWxsZXIubGVuZ3RoID4gZmlsbExlbikgc3RyaW5nRmlsbGVyID0gc3RyaW5nRmlsbGVyLnNsaWNlKDAsIGZpbGxMZW4pO1xuICByZXR1cm4gbGVmdCA/IHN0cmluZ0ZpbGxlciArIFMgOiBTICsgc3RyaW5nRmlsbGVyO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiByZXBlYXQoY291bnQpIHtcbiAgdmFyIHN0ciA9IFN0cmluZyhkZWZpbmVkKHRoaXMpKTtcbiAgdmFyIHJlcyA9ICcnO1xuICB2YXIgbiA9IHRvSW50ZWdlcihjb3VudCk7XG4gIGlmIChuIDwgMCB8fCBuID09IEluZmluaXR5KSB0aHJvdyBSYW5nZUVycm9yKFwiQ291bnQgY2FuJ3QgYmUgbmVnYXRpdmVcIik7XG4gIGZvciAoO24gPiAwOyAobiA+Pj49IDEpICYmIChzdHIgKz0gc3RyKSkgaWYgKG4gJiAxKSByZXMgKz0gc3RyO1xuICByZXR1cm4gcmVzO1xufTtcbiIsInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgc3BhY2VzID0gcmVxdWlyZSgnLi9fc3RyaW5nLXdzJyk7XG52YXIgc3BhY2UgPSAnWycgKyBzcGFjZXMgKyAnXSc7XG52YXIgbm9uID0gJ1xcdTIwMGJcXHUwMDg1JztcbnZhciBsdHJpbSA9IFJlZ0V4cCgnXicgKyBzcGFjZSArIHNwYWNlICsgJyonKTtcbnZhciBydHJpbSA9IFJlZ0V4cChzcGFjZSArIHNwYWNlICsgJyokJyk7XG5cbnZhciBleHBvcnRlciA9IGZ1bmN0aW9uIChLRVksIGV4ZWMsIEFMSUFTKSB7XG4gIHZhciBleHAgPSB7fTtcbiAgdmFyIEZPUkNFID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiAhIXNwYWNlc1tLRVldKCkgfHwgbm9uW0tFWV0oKSAhPSBub247XG4gIH0pO1xuICB2YXIgZm4gPSBleHBbS0VZXSA9IEZPUkNFID8gZXhlYyh0cmltKSA6IHNwYWNlc1tLRVldO1xuICBpZiAoQUxJQVMpIGV4cFtBTElBU10gPSBmbjtcbiAgJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiBGT1JDRSwgJ1N0cmluZycsIGV4cCk7XG59O1xuXG4vLyAxIC0+IFN0cmluZyN0cmltTGVmdFxuLy8gMiAtPiBTdHJpbmcjdHJpbVJpZ2h0XG4vLyAzIC0+IFN0cmluZyN0cmltXG52YXIgdHJpbSA9IGV4cG9ydGVyLnRyaW0gPSBmdW5jdGlvbiAoc3RyaW5nLCBUWVBFKSB7XG4gIHN0cmluZyA9IFN0cmluZyhkZWZpbmVkKHN0cmluZykpO1xuICBpZiAoVFlQRSAmIDEpIHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKGx0cmltLCAnJyk7XG4gIGlmIChUWVBFICYgMikgc3RyaW5nID0gc3RyaW5nLnJlcGxhY2UocnRyaW0sICcnKTtcbiAgcmV0dXJuIHN0cmluZztcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0ZXI7XG4iLCJtb2R1bGUuZXhwb3J0cyA9ICdcXHgwOVxceDBBXFx4MEJcXHgwQ1xceDBEXFx4MjBcXHhBMFxcdTE2ODBcXHUxODBFXFx1MjAwMFxcdTIwMDFcXHUyMDAyXFx1MjAwMycgK1xuICAnXFx1MjAwNFxcdTIwMDVcXHUyMDA2XFx1MjAwN1xcdTIwMDhcXHUyMDA5XFx1MjAwQVxcdTIwMkZcXHUyMDVGXFx1MzAwMFxcdTIwMjhcXHUyMDI5XFx1RkVGRic7XG4iLCJ2YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgaW52b2tlID0gcmVxdWlyZSgnLi9faW52b2tlJyk7XG52YXIgaHRtbCA9IHJlcXVpcmUoJy4vX2h0bWwnKTtcbnZhciBjZWwgPSByZXF1aXJlKCcuL19kb20tY3JlYXRlJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgcHJvY2VzcyA9IGdsb2JhbC5wcm9jZXNzO1xudmFyIHNldFRhc2sgPSBnbG9iYWwuc2V0SW1tZWRpYXRlO1xudmFyIGNsZWFyVGFzayA9IGdsb2JhbC5jbGVhckltbWVkaWF0ZTtcbnZhciBNZXNzYWdlQ2hhbm5lbCA9IGdsb2JhbC5NZXNzYWdlQ2hhbm5lbDtcbnZhciBEaXNwYXRjaCA9IGdsb2JhbC5EaXNwYXRjaDtcbnZhciBjb3VudGVyID0gMDtcbnZhciBxdWV1ZSA9IHt9O1xudmFyIE9OUkVBRFlTVEFURUNIQU5HRSA9ICdvbnJlYWR5c3RhdGVjaGFuZ2UnO1xudmFyIGRlZmVyLCBjaGFubmVsLCBwb3J0O1xudmFyIHJ1biA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGlkID0gK3RoaXM7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgaWYgKHF1ZXVlLmhhc093blByb3BlcnR5KGlkKSkge1xuICAgIHZhciBmbiA9IHF1ZXVlW2lkXTtcbiAgICBkZWxldGUgcXVldWVbaWRdO1xuICAgIGZuKCk7XG4gIH1cbn07XG52YXIgbGlzdGVuZXIgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgcnVuLmNhbGwoZXZlbnQuZGF0YSk7XG59O1xuLy8gTm9kZS5qcyAwLjkrICYgSUUxMCsgaGFzIHNldEltbWVkaWF0ZSwgb3RoZXJ3aXNlOlxuaWYgKCFzZXRUYXNrIHx8ICFjbGVhclRhc2spIHtcbiAgc2V0VGFzayA9IGZ1bmN0aW9uIHNldEltbWVkaWF0ZShmbikge1xuICAgIHZhciBhcmdzID0gW107XG4gICAgdmFyIGkgPSAxO1xuICAgIHdoaWxlIChhcmd1bWVudHMubGVuZ3RoID4gaSkgYXJncy5wdXNoKGFyZ3VtZW50c1tpKytdKTtcbiAgICBxdWV1ZVsrK2NvdW50ZXJdID0gZnVuY3Rpb24gKCkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jXG4gICAgICBpbnZva2UodHlwZW9mIGZuID09ICdmdW5jdGlvbicgPyBmbiA6IEZ1bmN0aW9uKGZuKSwgYXJncyk7XG4gICAgfTtcbiAgICBkZWZlcihjb3VudGVyKTtcbiAgICByZXR1cm4gY291bnRlcjtcbiAgfTtcbiAgY2xlYXJUYXNrID0gZnVuY3Rpb24gY2xlYXJJbW1lZGlhdGUoaWQpIHtcbiAgICBkZWxldGUgcXVldWVbaWRdO1xuICB9O1xuICAvLyBOb2RlLmpzIDAuOC1cbiAgaWYgKHJlcXVpcmUoJy4vX2NvZicpKHByb2Nlc3MpID09ICdwcm9jZXNzJykge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGN0eChydW4sIGlkLCAxKSk7XG4gICAgfTtcbiAgLy8gU3BoZXJlIChKUyBnYW1lIGVuZ2luZSkgRGlzcGF0Y2ggQVBJXG4gIH0gZWxzZSBpZiAoRGlzcGF0Y2ggJiYgRGlzcGF0Y2gubm93KSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIERpc3BhdGNoLm5vdyhjdHgocnVuLCBpZCwgMSkpO1xuICAgIH07XG4gIC8vIEJyb3dzZXJzIHdpdGggTWVzc2FnZUNoYW5uZWwsIGluY2x1ZGVzIFdlYldvcmtlcnNcbiAgfSBlbHNlIGlmIChNZXNzYWdlQ2hhbm5lbCkge1xuICAgIGNoYW5uZWwgPSBuZXcgTWVzc2FnZUNoYW5uZWwoKTtcbiAgICBwb3J0ID0gY2hhbm5lbC5wb3J0MjtcbiAgICBjaGFubmVsLnBvcnQxLm9ubWVzc2FnZSA9IGxpc3RlbmVyO1xuICAgIGRlZmVyID0gY3R4KHBvcnQucG9zdE1lc3NhZ2UsIHBvcnQsIDEpO1xuICAvLyBCcm93c2VycyB3aXRoIHBvc3RNZXNzYWdlLCBza2lwIFdlYldvcmtlcnNcbiAgLy8gSUU4IGhhcyBwb3N0TWVzc2FnZSwgYnV0IGl0J3Mgc3luYyAmIHR5cGVvZiBpdHMgcG9zdE1lc3NhZ2UgaXMgJ29iamVjdCdcbiAgfSBlbHNlIGlmIChnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lciAmJiB0eXBlb2YgcG9zdE1lc3NhZ2UgPT0gJ2Z1bmN0aW9uJyAmJiAhZ2xvYmFsLmltcG9ydFNjcmlwdHMpIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgZ2xvYmFsLnBvc3RNZXNzYWdlKGlkICsgJycsICcqJyk7XG4gICAgfTtcbiAgICBnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGxpc3RlbmVyLCBmYWxzZSk7XG4gIC8vIElFOC1cbiAgfSBlbHNlIGlmIChPTlJFQURZU1RBVEVDSEFOR0UgaW4gY2VsKCdzY3JpcHQnKSkge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBodG1sLmFwcGVuZENoaWxkKGNlbCgnc2NyaXB0JykpW09OUkVBRFlTVEFURUNIQU5HRV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGh0bWwucmVtb3ZlQ2hpbGQodGhpcyk7XG4gICAgICAgIHJ1bi5jYWxsKGlkKTtcbiAgICAgIH07XG4gICAgfTtcbiAgLy8gUmVzdCBvbGQgYnJvd3NlcnNcbiAgfSBlbHNlIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgc2V0VGltZW91dChjdHgocnVuLCBpZCwgMSksIDApO1xuICAgIH07XG4gIH1cbn1cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzZXQ6IHNldFRhc2ssXG4gIGNsZWFyOiBjbGVhclRhc2tcbn07XG4iLCJ2YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIG1heCA9IE1hdGgubWF4O1xudmFyIG1pbiA9IE1hdGgubWluO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5kZXgsIGxlbmd0aCkge1xuICBpbmRleCA9IHRvSW50ZWdlcihpbmRleCk7XG4gIHJldHVybiBpbmRleCA8IDAgPyBtYXgoaW5kZXggKyBsZW5ndGgsIDApIDogbWluKGluZGV4LCBsZW5ndGgpO1xufTtcbiIsIi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXRvaW5kZXhcbnZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpdCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gMDtcbiAgdmFyIG51bWJlciA9IHRvSW50ZWdlcihpdCk7XG4gIHZhciBsZW5ndGggPSB0b0xlbmd0aChudW1iZXIpO1xuICBpZiAobnVtYmVyICE9PSBsZW5ndGgpIHRocm93IFJhbmdlRXJyb3IoJ1dyb25nIGxlbmd0aCEnKTtcbiAgcmV0dXJuIGxlbmd0aDtcbn07XG4iLCIvLyA3LjEuNCBUb0ludGVnZXJcbnZhciBjZWlsID0gTWF0aC5jZWlsO1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpc05hTihpdCA9ICtpdCkgPyAwIDogKGl0ID4gMCA/IGZsb29yIDogY2VpbCkoaXQpO1xufTtcbiIsIi8vIHRvIGluZGV4ZWQgb2JqZWN0LCB0b09iamVjdCB3aXRoIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgc3RyaW5nc1xudmFyIElPYmplY3QgPSByZXF1aXJlKCcuL19pb2JqZWN0Jyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBJT2JqZWN0KGRlZmluZWQoaXQpKTtcbn07XG4iLCIvLyA3LjEuMTUgVG9MZW5ndGhcbnZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgbWluID0gTWF0aC5taW47XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgPiAwID8gbWluKHRvSW50ZWdlcihpdCksIDB4MWZmZmZmZmZmZmZmZmYpIDogMDsgLy8gcG93KDIsIDUzKSAtIDEgPT0gOTAwNzE5OTI1NDc0MDk5MVxufTtcbiIsIi8vIDcuMS4xMyBUb09iamVjdChhcmd1bWVudClcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIE9iamVjdChkZWZpbmVkKGl0KSk7XG59O1xuIiwiLy8gNy4xLjEgVG9QcmltaXRpdmUoaW5wdXQgWywgUHJlZmVycmVkVHlwZV0pXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbi8vIGluc3RlYWQgb2YgdGhlIEVTNiBzcGVjIHZlcnNpb24sIHdlIGRpZG4ndCBpbXBsZW1lbnQgQEB0b1ByaW1pdGl2ZSBjYXNlXG4vLyBhbmQgdGhlIHNlY29uZCBhcmd1bWVudCAtIGZsYWcgLSBwcmVmZXJyZWQgdHlwZSBpcyBhIHN0cmluZ1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIFMpIHtcbiAgaWYgKCFpc09iamVjdChpdCkpIHJldHVybiBpdDtcbiAgdmFyIGZuLCB2YWw7XG4gIGlmIChTICYmIHR5cGVvZiAoZm4gPSBpdC50b1N0cmluZykgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNPYmplY3QodmFsID0gZm4uY2FsbChpdCkpKSByZXR1cm4gdmFsO1xuICBpZiAodHlwZW9mIChmbiA9IGl0LnZhbHVlT2YpID09ICdmdW5jdGlvbicgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaXQpKSkgcmV0dXJuIHZhbDtcbiAgaWYgKCFTICYmIHR5cGVvZiAoZm4gPSBpdC50b1N0cmluZykgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNPYmplY3QodmFsID0gZm4uY2FsbChpdCkpKSByZXR1cm4gdmFsO1xuICB0aHJvdyBUeXBlRXJyb3IoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIik7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuaWYgKHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykpIHtcbiAgdmFyIExJQlJBUlkgPSByZXF1aXJlKCcuL19saWJyYXJ5Jyk7XG4gIHZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbiAgdmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbiAgdmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbiAgdmFyICR0eXBlZCA9IHJlcXVpcmUoJy4vX3R5cGVkJyk7XG4gIHZhciAkYnVmZmVyID0gcmVxdWlyZSgnLi9fdHlwZWQtYnVmZmVyJyk7XG4gIHZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbiAgdmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuL19hbi1pbnN0YW5jZScpO1xuICB2YXIgcHJvcGVydHlEZXNjID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xuICB2YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbiAgdmFyIHJlZGVmaW5lQWxsID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUtYWxsJyk7XG4gIHZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG4gIHZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xuICB2YXIgdG9JbmRleCA9IHJlcXVpcmUoJy4vX3RvLWluZGV4Jyk7XG4gIHZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuL190by1hYnNvbHV0ZS1pbmRleCcpO1xuICB2YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcbiAgdmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xuICB2YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4vX2NsYXNzb2YnKTtcbiAgdmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG4gIHZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xuICB2YXIgaXNBcnJheUl0ZXIgPSByZXF1aXJlKCcuL19pcy1hcnJheS1pdGVyJyk7XG4gIHZhciBjcmVhdGUgPSByZXF1aXJlKCcuL19vYmplY3QtY3JlYXRlJyk7XG4gIHZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbiAgdmFyIGdPUE4gPSByZXF1aXJlKCcuL19vYmplY3QtZ29wbicpLmY7XG4gIHZhciBnZXRJdGVyRm4gPSByZXF1aXJlKCcuL2NvcmUuZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xuICB2YXIgdWlkID0gcmVxdWlyZSgnLi9fdWlkJyk7XG4gIHZhciB3a3MgPSByZXF1aXJlKCcuL193a3MnKTtcbiAgdmFyIGNyZWF0ZUFycmF5TWV0aG9kID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpO1xuICB2YXIgY3JlYXRlQXJyYXlJbmNsdWRlcyA9IHJlcXVpcmUoJy4vX2FycmF5LWluY2x1ZGVzJyk7XG4gIHZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuL19zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG4gIHZhciBBcnJheUl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vZXM2LmFycmF5Lml0ZXJhdG9yJyk7XG4gIHZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuL19pdGVyYXRvcnMnKTtcbiAgdmFyICRpdGVyRGV0ZWN0ID0gcmVxdWlyZSgnLi9faXRlci1kZXRlY3QnKTtcbiAgdmFyIHNldFNwZWNpZXMgPSByZXF1aXJlKCcuL19zZXQtc3BlY2llcycpO1xuICB2YXIgYXJyYXlGaWxsID0gcmVxdWlyZSgnLi9fYXJyYXktZmlsbCcpO1xuICB2YXIgYXJyYXlDb3B5V2l0aGluID0gcmVxdWlyZSgnLi9fYXJyYXktY29weS13aXRoaW4nKTtcbiAgdmFyICREUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xuICB2YXIgJEdPUEQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpO1xuICB2YXIgZFAgPSAkRFAuZjtcbiAgdmFyIGdPUEQgPSAkR09QRC5mO1xuICB2YXIgUmFuZ2VFcnJvciA9IGdsb2JhbC5SYW5nZUVycm9yO1xuICB2YXIgVHlwZUVycm9yID0gZ2xvYmFsLlR5cGVFcnJvcjtcbiAgdmFyIFVpbnQ4QXJyYXkgPSBnbG9iYWwuVWludDhBcnJheTtcbiAgdmFyIEFSUkFZX0JVRkZFUiA9ICdBcnJheUJ1ZmZlcic7XG4gIHZhciBTSEFSRURfQlVGRkVSID0gJ1NoYXJlZCcgKyBBUlJBWV9CVUZGRVI7XG4gIHZhciBCWVRFU19QRVJfRUxFTUVOVCA9ICdCWVRFU19QRVJfRUxFTUVOVCc7XG4gIHZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcbiAgdmFyIEFycmF5UHJvdG8gPSBBcnJheVtQUk9UT1RZUEVdO1xuICB2YXIgJEFycmF5QnVmZmVyID0gJGJ1ZmZlci5BcnJheUJ1ZmZlcjtcbiAgdmFyICREYXRhVmlldyA9ICRidWZmZXIuRGF0YVZpZXc7XG4gIHZhciBhcnJheUZvckVhY2ggPSBjcmVhdGVBcnJheU1ldGhvZCgwKTtcbiAgdmFyIGFycmF5RmlsdGVyID0gY3JlYXRlQXJyYXlNZXRob2QoMik7XG4gIHZhciBhcnJheVNvbWUgPSBjcmVhdGVBcnJheU1ldGhvZCgzKTtcbiAgdmFyIGFycmF5RXZlcnkgPSBjcmVhdGVBcnJheU1ldGhvZCg0KTtcbiAgdmFyIGFycmF5RmluZCA9IGNyZWF0ZUFycmF5TWV0aG9kKDUpO1xuICB2YXIgYXJyYXlGaW5kSW5kZXggPSBjcmVhdGVBcnJheU1ldGhvZCg2KTtcbiAgdmFyIGFycmF5SW5jbHVkZXMgPSBjcmVhdGVBcnJheUluY2x1ZGVzKHRydWUpO1xuICB2YXIgYXJyYXlJbmRleE9mID0gY3JlYXRlQXJyYXlJbmNsdWRlcyhmYWxzZSk7XG4gIHZhciBhcnJheVZhbHVlcyA9IEFycmF5SXRlcmF0b3JzLnZhbHVlcztcbiAgdmFyIGFycmF5S2V5cyA9IEFycmF5SXRlcmF0b3JzLmtleXM7XG4gIHZhciBhcnJheUVudHJpZXMgPSBBcnJheUl0ZXJhdG9ycy5lbnRyaWVzO1xuICB2YXIgYXJyYXlMYXN0SW5kZXhPZiA9IEFycmF5UHJvdG8ubGFzdEluZGV4T2Y7XG4gIHZhciBhcnJheVJlZHVjZSA9IEFycmF5UHJvdG8ucmVkdWNlO1xuICB2YXIgYXJyYXlSZWR1Y2VSaWdodCA9IEFycmF5UHJvdG8ucmVkdWNlUmlnaHQ7XG4gIHZhciBhcnJheUpvaW4gPSBBcnJheVByb3RvLmpvaW47XG4gIHZhciBhcnJheVNvcnQgPSBBcnJheVByb3RvLnNvcnQ7XG4gIHZhciBhcnJheVNsaWNlID0gQXJyYXlQcm90by5zbGljZTtcbiAgdmFyIGFycmF5VG9TdHJpbmcgPSBBcnJheVByb3RvLnRvU3RyaW5nO1xuICB2YXIgYXJyYXlUb0xvY2FsZVN0cmluZyA9IEFycmF5UHJvdG8udG9Mb2NhbGVTdHJpbmc7XG4gIHZhciBJVEVSQVRPUiA9IHdrcygnaXRlcmF0b3InKTtcbiAgdmFyIFRBRyA9IHdrcygndG9TdHJpbmdUYWcnKTtcbiAgdmFyIFRZUEVEX0NPTlNUUlVDVE9SID0gdWlkKCd0eXBlZF9jb25zdHJ1Y3RvcicpO1xuICB2YXIgREVGX0NPTlNUUlVDVE9SID0gdWlkKCdkZWZfY29uc3RydWN0b3InKTtcbiAgdmFyIEFMTF9DT05TVFJVQ1RPUlMgPSAkdHlwZWQuQ09OU1RSO1xuICB2YXIgVFlQRURfQVJSQVkgPSAkdHlwZWQuVFlQRUQ7XG4gIHZhciBWSUVXID0gJHR5cGVkLlZJRVc7XG4gIHZhciBXUk9OR19MRU5HVEggPSAnV3JvbmcgbGVuZ3RoISc7XG5cbiAgdmFyICRtYXAgPSBjcmVhdGVBcnJheU1ldGhvZCgxLCBmdW5jdGlvbiAoTywgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIGFsbG9jYXRlKHNwZWNpZXNDb25zdHJ1Y3RvcihPLCBPW0RFRl9DT05TVFJVQ1RPUl0pLCBsZW5ndGgpO1xuICB9KTtcblxuICB2YXIgTElUVExFX0VORElBTiA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkobmV3IFVpbnQxNkFycmF5KFsxXSkuYnVmZmVyKVswXSA9PT0gMTtcbiAgfSk7XG5cbiAgdmFyIEZPUkNFRF9TRVQgPSAhIVVpbnQ4QXJyYXkgJiYgISFVaW50OEFycmF5W1BST1RPVFlQRV0uc2V0ICYmIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICBuZXcgVWludDhBcnJheSgxKS5zZXQoe30pO1xuICB9KTtcblxuICB2YXIgdG9PZmZzZXQgPSBmdW5jdGlvbiAoaXQsIEJZVEVTKSB7XG4gICAgdmFyIG9mZnNldCA9IHRvSW50ZWdlcihpdCk7XG4gICAgaWYgKG9mZnNldCA8IDAgfHwgb2Zmc2V0ICUgQllURVMpIHRocm93IFJhbmdlRXJyb3IoJ1dyb25nIG9mZnNldCEnKTtcbiAgICByZXR1cm4gb2Zmc2V0O1xuICB9O1xuXG4gIHZhciB2YWxpZGF0ZSA9IGZ1bmN0aW9uIChpdCkge1xuICAgIGlmIChpc09iamVjdChpdCkgJiYgVFlQRURfQVJSQVkgaW4gaXQpIHJldHVybiBpdDtcbiAgICB0aHJvdyBUeXBlRXJyb3IoaXQgKyAnIGlzIG5vdCBhIHR5cGVkIGFycmF5IScpO1xuICB9O1xuXG4gIHZhciBhbGxvY2F0ZSA9IGZ1bmN0aW9uIChDLCBsZW5ndGgpIHtcbiAgICBpZiAoIShpc09iamVjdChDKSAmJiBUWVBFRF9DT05TVFJVQ1RPUiBpbiBDKSkge1xuICAgICAgdGhyb3cgVHlwZUVycm9yKCdJdCBpcyBub3QgYSB0eXBlZCBhcnJheSBjb25zdHJ1Y3RvciEnKTtcbiAgICB9IHJldHVybiBuZXcgQyhsZW5ndGgpO1xuICB9O1xuXG4gIHZhciBzcGVjaWVzRnJvbUxpc3QgPSBmdW5jdGlvbiAoTywgbGlzdCkge1xuICAgIHJldHVybiBmcm9tTGlzdChzcGVjaWVzQ29uc3RydWN0b3IoTywgT1tERUZfQ09OU1RSVUNUT1JdKSwgbGlzdCk7XG4gIH07XG5cbiAgdmFyIGZyb21MaXN0ID0gZnVuY3Rpb24gKEMsIGxpc3QpIHtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHZhciBsZW5ndGggPSBsaXN0Lmxlbmd0aDtcbiAgICB2YXIgcmVzdWx0ID0gYWxsb2NhdGUoQywgbGVuZ3RoKTtcbiAgICB3aGlsZSAobGVuZ3RoID4gaW5kZXgpIHJlc3VsdFtpbmRleF0gPSBsaXN0W2luZGV4KytdO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgdmFyIGFkZEdldHRlciA9IGZ1bmN0aW9uIChpdCwga2V5LCBpbnRlcm5hbCkge1xuICAgIGRQKGl0LCBrZXksIHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLl9kW2ludGVybmFsXTsgfSB9KTtcbiAgfTtcblxuICB2YXIgJGZyb20gPSBmdW5jdGlvbiBmcm9tKHNvdXJjZSAvKiAsIG1hcGZuLCB0aGlzQXJnICovKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdChzb3VyY2UpO1xuICAgIHZhciBhTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgbWFwZm4gPSBhTGVuID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgbWFwcGluZyA9IG1hcGZuICE9PSB1bmRlZmluZWQ7XG4gICAgdmFyIGl0ZXJGbiA9IGdldEl0ZXJGbihPKTtcbiAgICB2YXIgaSwgbGVuZ3RoLCB2YWx1ZXMsIHJlc3VsdCwgc3RlcCwgaXRlcmF0b3I7XG4gICAgaWYgKGl0ZXJGbiAhPSB1bmRlZmluZWQgJiYgIWlzQXJyYXlJdGVyKGl0ZXJGbikpIHtcbiAgICAgIGZvciAoaXRlcmF0b3IgPSBpdGVyRm4uY2FsbChPKSwgdmFsdWVzID0gW10sIGkgPSAwOyAhKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmU7IGkrKykge1xuICAgICAgICB2YWx1ZXMucHVzaChzdGVwLnZhbHVlKTtcbiAgICAgIH0gTyA9IHZhbHVlcztcbiAgICB9XG4gICAgaWYgKG1hcHBpbmcgJiYgYUxlbiA+IDIpIG1hcGZuID0gY3R4KG1hcGZuLCBhcmd1bWVudHNbMl0sIDIpO1xuICAgIGZvciAoaSA9IDAsIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKSwgcmVzdWx0ID0gYWxsb2NhdGUodGhpcywgbGVuZ3RoKTsgbGVuZ3RoID4gaTsgaSsrKSB7XG4gICAgICByZXN1bHRbaV0gPSBtYXBwaW5nID8gbWFwZm4oT1tpXSwgaSkgOiBPW2ldO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIHZhciAkb2YgPSBmdW5jdGlvbiBvZigvKiAuLi5pdGVtcyAqLykge1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIHJlc3VsdCA9IGFsbG9jYXRlKHRoaXMsIGxlbmd0aCk7XG4gICAgd2hpbGUgKGxlbmd0aCA+IGluZGV4KSByZXN1bHRbaW5kZXhdID0gYXJndW1lbnRzW2luZGV4KytdO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgLy8gaU9TIFNhZmFyaSA2LnggZmFpbHMgaGVyZVxuICB2YXIgVE9fTE9DQUxFX0JVRyA9ICEhVWludDhBcnJheSAmJiBmYWlscyhmdW5jdGlvbiAoKSB7IGFycmF5VG9Mb2NhbGVTdHJpbmcuY2FsbChuZXcgVWludDhBcnJheSgxKSk7IH0pO1xuXG4gIHZhciAkdG9Mb2NhbGVTdHJpbmcgPSBmdW5jdGlvbiB0b0xvY2FsZVN0cmluZygpIHtcbiAgICByZXR1cm4gYXJyYXlUb0xvY2FsZVN0cmluZy5hcHBseShUT19MT0NBTEVfQlVHID8gYXJyYXlTbGljZS5jYWxsKHZhbGlkYXRlKHRoaXMpKSA6IHZhbGlkYXRlKHRoaXMpLCBhcmd1bWVudHMpO1xuICB9O1xuXG4gIHZhciBwcm90byA9IHtcbiAgICBjb3B5V2l0aGluOiBmdW5jdGlvbiBjb3B5V2l0aGluKHRhcmdldCwgc3RhcnQgLyogLCBlbmQgKi8pIHtcbiAgICAgIHJldHVybiBhcnJheUNvcHlXaXRoaW4uY2FsbCh2YWxpZGF0ZSh0aGlzKSwgdGFyZ2V0LCBzdGFydCwgYXJndW1lbnRzLmxlbmd0aCA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgZXZlcnk6IGZ1bmN0aW9uIGV2ZXJ5KGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgICByZXR1cm4gYXJyYXlFdmVyeSh2YWxpZGF0ZSh0aGlzKSwgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgZmlsbDogZnVuY3Rpb24gZmlsbCh2YWx1ZSAvKiAsIHN0YXJ0LCBlbmQgKi8pIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgICAgcmV0dXJuIGFycmF5RmlsbC5hcHBseSh2YWxpZGF0ZSh0aGlzKSwgYXJndW1lbnRzKTtcbiAgICB9LFxuICAgIGZpbHRlcjogZnVuY3Rpb24gZmlsdGVyKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgICByZXR1cm4gc3BlY2llc0Zyb21MaXN0KHRoaXMsIGFycmF5RmlsdGVyKHZhbGlkYXRlKHRoaXMpLCBjYWxsYmFja2ZuLFxuICAgICAgICBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCkpO1xuICAgIH0sXG4gICAgZmluZDogZnVuY3Rpb24gZmluZChwcmVkaWNhdGUgLyogLCB0aGlzQXJnICovKSB7XG4gICAgICByZXR1cm4gYXJyYXlGaW5kKHZhbGlkYXRlKHRoaXMpLCBwcmVkaWNhdGUsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgICB9LFxuICAgIGZpbmRJbmRleDogZnVuY3Rpb24gZmluZEluZGV4KHByZWRpY2F0ZSAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICAgIHJldHVybiBhcnJheUZpbmRJbmRleCh2YWxpZGF0ZSh0aGlzKSwgcHJlZGljYXRlLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBmb3JFYWNoOiBmdW5jdGlvbiBmb3JFYWNoKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgICBhcnJheUZvckVhY2godmFsaWRhdGUodGhpcyksIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgICB9LFxuICAgIGluZGV4T2Y6IGZ1bmN0aW9uIGluZGV4T2Yoc2VhcmNoRWxlbWVudCAvKiAsIGZyb21JbmRleCAqLykge1xuICAgICAgcmV0dXJuIGFycmF5SW5kZXhPZih2YWxpZGF0ZSh0aGlzKSwgc2VhcmNoRWxlbWVudCwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgaW5jbHVkZXM6IGZ1bmN0aW9uIGluY2x1ZGVzKHNlYXJjaEVsZW1lbnQgLyogLCBmcm9tSW5kZXggKi8pIHtcbiAgICAgIHJldHVybiBhcnJheUluY2x1ZGVzKHZhbGlkYXRlKHRoaXMpLCBzZWFyY2hFbGVtZW50LCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBqb2luOiBmdW5jdGlvbiBqb2luKHNlcGFyYXRvcikgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgICByZXR1cm4gYXJyYXlKb2luLmFwcGx5KHZhbGlkYXRlKHRoaXMpLCBhcmd1bWVudHMpO1xuICAgIH0sXG4gICAgbGFzdEluZGV4T2Y6IGZ1bmN0aW9uIGxhc3RJbmRleE9mKHNlYXJjaEVsZW1lbnQgLyogLCBmcm9tSW5kZXggKi8pIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgICAgcmV0dXJuIGFycmF5TGFzdEluZGV4T2YuYXBwbHkodmFsaWRhdGUodGhpcyksIGFyZ3VtZW50cyk7XG4gICAgfSxcbiAgICBtYXA6IGZ1bmN0aW9uIG1hcChtYXBmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICAgIHJldHVybiAkbWFwKHZhbGlkYXRlKHRoaXMpLCBtYXBmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgcmVkdWNlOiBmdW5jdGlvbiByZWR1Y2UoY2FsbGJhY2tmbiAvKiAsIGluaXRpYWxWYWx1ZSAqLykgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgICByZXR1cm4gYXJyYXlSZWR1Y2UuYXBwbHkodmFsaWRhdGUodGhpcyksIGFyZ3VtZW50cyk7XG4gICAgfSxcbiAgICByZWR1Y2VSaWdodDogZnVuY3Rpb24gcmVkdWNlUmlnaHQoY2FsbGJhY2tmbiAvKiAsIGluaXRpYWxWYWx1ZSAqLykgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgICByZXR1cm4gYXJyYXlSZWR1Y2VSaWdodC5hcHBseSh2YWxpZGF0ZSh0aGlzKSwgYXJndW1lbnRzKTtcbiAgICB9LFxuICAgIHJldmVyc2U6IGZ1bmN0aW9uIHJldmVyc2UoKSB7XG4gICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICB2YXIgbGVuZ3RoID0gdmFsaWRhdGUodGhhdCkubGVuZ3RoO1xuICAgICAgdmFyIG1pZGRsZSA9IE1hdGguZmxvb3IobGVuZ3RoIC8gMik7XG4gICAgICB2YXIgaW5kZXggPSAwO1xuICAgICAgdmFyIHZhbHVlO1xuICAgICAgd2hpbGUgKGluZGV4IDwgbWlkZGxlKSB7XG4gICAgICAgIHZhbHVlID0gdGhhdFtpbmRleF07XG4gICAgICAgIHRoYXRbaW5kZXgrK10gPSB0aGF0Wy0tbGVuZ3RoXTtcbiAgICAgICAgdGhhdFtsZW5ndGhdID0gdmFsdWU7XG4gICAgICB9IHJldHVybiB0aGF0O1xuICAgIH0sXG4gICAgc29tZTogZnVuY3Rpb24gc29tZShjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgICAgcmV0dXJuIGFycmF5U29tZSh2YWxpZGF0ZSh0aGlzKSwgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgc29ydDogZnVuY3Rpb24gc29ydChjb21wYXJlZm4pIHtcbiAgICAgIHJldHVybiBhcnJheVNvcnQuY2FsbCh2YWxpZGF0ZSh0aGlzKSwgY29tcGFyZWZuKTtcbiAgICB9LFxuICAgIHN1YmFycmF5OiBmdW5jdGlvbiBzdWJhcnJheShiZWdpbiwgZW5kKSB7XG4gICAgICB2YXIgTyA9IHZhbGlkYXRlKHRoaXMpO1xuICAgICAgdmFyIGxlbmd0aCA9IE8ubGVuZ3RoO1xuICAgICAgdmFyICRiZWdpbiA9IHRvQWJzb2x1dGVJbmRleChiZWdpbiwgbGVuZ3RoKTtcbiAgICAgIHJldHVybiBuZXcgKHNwZWNpZXNDb25zdHJ1Y3RvcihPLCBPW0RFRl9DT05TVFJVQ1RPUl0pKShcbiAgICAgICAgTy5idWZmZXIsXG4gICAgICAgIE8uYnl0ZU9mZnNldCArICRiZWdpbiAqIE8uQllURVNfUEVSX0VMRU1FTlQsXG4gICAgICAgIHRvTGVuZ3RoKChlbmQgPT09IHVuZGVmaW5lZCA/IGxlbmd0aCA6IHRvQWJzb2x1dGVJbmRleChlbmQsIGxlbmd0aCkpIC0gJGJlZ2luKVxuICAgICAgKTtcbiAgICB9XG4gIH07XG5cbiAgdmFyICRzbGljZSA9IGZ1bmN0aW9uIHNsaWNlKHN0YXJ0LCBlbmQpIHtcbiAgICByZXR1cm4gc3BlY2llc0Zyb21MaXN0KHRoaXMsIGFycmF5U2xpY2UuY2FsbCh2YWxpZGF0ZSh0aGlzKSwgc3RhcnQsIGVuZCkpO1xuICB9O1xuXG4gIHZhciAkc2V0ID0gZnVuY3Rpb24gc2V0KGFycmF5TGlrZSAvKiAsIG9mZnNldCAqLykge1xuICAgIHZhbGlkYXRlKHRoaXMpO1xuICAgIHZhciBvZmZzZXQgPSB0b09mZnNldChhcmd1bWVudHNbMV0sIDEpO1xuICAgIHZhciBsZW5ndGggPSB0aGlzLmxlbmd0aDtcbiAgICB2YXIgc3JjID0gdG9PYmplY3QoYXJyYXlMaWtlKTtcbiAgICB2YXIgbGVuID0gdG9MZW5ndGgoc3JjLmxlbmd0aCk7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICBpZiAobGVuICsgb2Zmc2V0ID4gbGVuZ3RoKSB0aHJvdyBSYW5nZUVycm9yKFdST05HX0xFTkdUSCk7XG4gICAgd2hpbGUgKGluZGV4IDwgbGVuKSB0aGlzW29mZnNldCArIGluZGV4XSA9IHNyY1tpbmRleCsrXTtcbiAgfTtcblxuICB2YXIgJGl0ZXJhdG9ycyA9IHtcbiAgICBlbnRyaWVzOiBmdW5jdGlvbiBlbnRyaWVzKCkge1xuICAgICAgcmV0dXJuIGFycmF5RW50cmllcy5jYWxsKHZhbGlkYXRlKHRoaXMpKTtcbiAgICB9LFxuICAgIGtleXM6IGZ1bmN0aW9uIGtleXMoKSB7XG4gICAgICByZXR1cm4gYXJyYXlLZXlzLmNhbGwodmFsaWRhdGUodGhpcykpO1xuICAgIH0sXG4gICAgdmFsdWVzOiBmdW5jdGlvbiB2YWx1ZXMoKSB7XG4gICAgICByZXR1cm4gYXJyYXlWYWx1ZXMuY2FsbCh2YWxpZGF0ZSh0aGlzKSk7XG4gICAgfVxuICB9O1xuXG4gIHZhciBpc1RBSW5kZXggPSBmdW5jdGlvbiAodGFyZ2V0LCBrZXkpIHtcbiAgICByZXR1cm4gaXNPYmplY3QodGFyZ2V0KVxuICAgICAgJiYgdGFyZ2V0W1RZUEVEX0FSUkFZXVxuICAgICAgJiYgdHlwZW9mIGtleSAhPSAnc3ltYm9sJ1xuICAgICAgJiYga2V5IGluIHRhcmdldFxuICAgICAgJiYgU3RyaW5nKCtrZXkpID09IFN0cmluZyhrZXkpO1xuICB9O1xuICB2YXIgJGdldERlc2MgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIHtcbiAgICByZXR1cm4gaXNUQUluZGV4KHRhcmdldCwga2V5ID0gdG9QcmltaXRpdmUoa2V5LCB0cnVlKSlcbiAgICAgID8gcHJvcGVydHlEZXNjKDIsIHRhcmdldFtrZXldKVxuICAgICAgOiBnT1BEKHRhcmdldCwga2V5KTtcbiAgfTtcbiAgdmFyICRzZXREZXNjID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIGRlc2MpIHtcbiAgICBpZiAoaXNUQUluZGV4KHRhcmdldCwga2V5ID0gdG9QcmltaXRpdmUoa2V5LCB0cnVlKSlcbiAgICAgICYmIGlzT2JqZWN0KGRlc2MpXG4gICAgICAmJiBoYXMoZGVzYywgJ3ZhbHVlJylcbiAgICAgICYmICFoYXMoZGVzYywgJ2dldCcpXG4gICAgICAmJiAhaGFzKGRlc2MsICdzZXQnKVxuICAgICAgLy8gVE9ETzogYWRkIHZhbGlkYXRpb24gZGVzY3JpcHRvciB3L28gY2FsbGluZyBhY2Nlc3NvcnNcbiAgICAgICYmICFkZXNjLmNvbmZpZ3VyYWJsZVxuICAgICAgJiYgKCFoYXMoZGVzYywgJ3dyaXRhYmxlJykgfHwgZGVzYy53cml0YWJsZSlcbiAgICAgICYmICghaGFzKGRlc2MsICdlbnVtZXJhYmxlJykgfHwgZGVzYy5lbnVtZXJhYmxlKVxuICAgICkge1xuICAgICAgdGFyZ2V0W2tleV0gPSBkZXNjLnZhbHVlO1xuICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9IHJldHVybiBkUCh0YXJnZXQsIGtleSwgZGVzYyk7XG4gIH07XG5cbiAgaWYgKCFBTExfQ09OU1RSVUNUT1JTKSB7XG4gICAgJEdPUEQuZiA9ICRnZXREZXNjO1xuICAgICREUC5mID0gJHNldERlc2M7XG4gIH1cblxuICAkZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFBTExfQ09OU1RSVUNUT1JTLCAnT2JqZWN0Jywge1xuICAgIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogJGdldERlc2MsXG4gICAgZGVmaW5lUHJvcGVydHk6ICRzZXREZXNjXG4gIH0pO1xuXG4gIGlmIChmYWlscyhmdW5jdGlvbiAoKSB7IGFycmF5VG9TdHJpbmcuY2FsbCh7fSk7IH0pKSB7XG4gICAgYXJyYXlUb1N0cmluZyA9IGFycmF5VG9Mb2NhbGVTdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICAgIHJldHVybiBhcnJheUpvaW4uY2FsbCh0aGlzKTtcbiAgICB9O1xuICB9XG5cbiAgdmFyICRUeXBlZEFycmF5UHJvdG90eXBlJCA9IHJlZGVmaW5lQWxsKHt9LCBwcm90byk7XG4gIHJlZGVmaW5lQWxsKCRUeXBlZEFycmF5UHJvdG90eXBlJCwgJGl0ZXJhdG9ycyk7XG4gIGhpZGUoJFR5cGVkQXJyYXlQcm90b3R5cGUkLCBJVEVSQVRPUiwgJGl0ZXJhdG9ycy52YWx1ZXMpO1xuICByZWRlZmluZUFsbCgkVHlwZWRBcnJheVByb3RvdHlwZSQsIHtcbiAgICBzbGljZTogJHNsaWNlLFxuICAgIHNldDogJHNldCxcbiAgICBjb25zdHJ1Y3RvcjogZnVuY3Rpb24gKCkgeyAvKiBub29wICovIH0sXG4gICAgdG9TdHJpbmc6IGFycmF5VG9TdHJpbmcsXG4gICAgdG9Mb2NhbGVTdHJpbmc6ICR0b0xvY2FsZVN0cmluZ1xuICB9KTtcbiAgYWRkR2V0dGVyKCRUeXBlZEFycmF5UHJvdG90eXBlJCwgJ2J1ZmZlcicsICdiJyk7XG4gIGFkZEdldHRlcigkVHlwZWRBcnJheVByb3RvdHlwZSQsICdieXRlT2Zmc2V0JywgJ28nKTtcbiAgYWRkR2V0dGVyKCRUeXBlZEFycmF5UHJvdG90eXBlJCwgJ2J5dGVMZW5ndGgnLCAnbCcpO1xuICBhZGRHZXR0ZXIoJFR5cGVkQXJyYXlQcm90b3R5cGUkLCAnbGVuZ3RoJywgJ2UnKTtcbiAgZFAoJFR5cGVkQXJyYXlQcm90b3R5cGUkLCBUQUcsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXNbVFlQRURfQVJSQVldOyB9XG4gIH0pO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtc3RhdGVtZW50c1xuICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChLRVksIEJZVEVTLCB3cmFwcGVyLCBDTEFNUEVEKSB7XG4gICAgQ0xBTVBFRCA9ICEhQ0xBTVBFRDtcbiAgICB2YXIgTkFNRSA9IEtFWSArIChDTEFNUEVEID8gJ0NsYW1wZWQnIDogJycpICsgJ0FycmF5JztcbiAgICB2YXIgR0VUVEVSID0gJ2dldCcgKyBLRVk7XG4gICAgdmFyIFNFVFRFUiA9ICdzZXQnICsgS0VZO1xuICAgIHZhciBUeXBlZEFycmF5ID0gZ2xvYmFsW05BTUVdO1xuICAgIHZhciBCYXNlID0gVHlwZWRBcnJheSB8fCB7fTtcbiAgICB2YXIgVEFDID0gVHlwZWRBcnJheSAmJiBnZXRQcm90b3R5cGVPZihUeXBlZEFycmF5KTtcbiAgICB2YXIgRk9SQ0VEID0gIVR5cGVkQXJyYXkgfHwgISR0eXBlZC5BQlY7XG4gICAgdmFyIE8gPSB7fTtcbiAgICB2YXIgVHlwZWRBcnJheVByb3RvdHlwZSA9IFR5cGVkQXJyYXkgJiYgVHlwZWRBcnJheVtQUk9UT1RZUEVdO1xuICAgIHZhciBnZXR0ZXIgPSBmdW5jdGlvbiAodGhhdCwgaW5kZXgpIHtcbiAgICAgIHZhciBkYXRhID0gdGhhdC5fZDtcbiAgICAgIHJldHVybiBkYXRhLnZbR0VUVEVSXShpbmRleCAqIEJZVEVTICsgZGF0YS5vLCBMSVRUTEVfRU5ESUFOKTtcbiAgICB9O1xuICAgIHZhciBzZXR0ZXIgPSBmdW5jdGlvbiAodGhhdCwgaW5kZXgsIHZhbHVlKSB7XG4gICAgICB2YXIgZGF0YSA9IHRoYXQuX2Q7XG4gICAgICBpZiAoQ0xBTVBFRCkgdmFsdWUgPSAodmFsdWUgPSBNYXRoLnJvdW5kKHZhbHVlKSkgPCAwID8gMCA6IHZhbHVlID4gMHhmZiA/IDB4ZmYgOiB2YWx1ZSAmIDB4ZmY7XG4gICAgICBkYXRhLnZbU0VUVEVSXShpbmRleCAqIEJZVEVTICsgZGF0YS5vLCB2YWx1ZSwgTElUVExFX0VORElBTik7XG4gICAgfTtcbiAgICB2YXIgYWRkRWxlbWVudCA9IGZ1bmN0aW9uICh0aGF0LCBpbmRleCkge1xuICAgICAgZFAodGhhdCwgaW5kZXgsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIGdldHRlcih0aGlzLCBpbmRleCk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgcmV0dXJuIHNldHRlcih0aGlzLCBpbmRleCwgdmFsdWUpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlXG4gICAgICB9KTtcbiAgICB9O1xuICAgIGlmIChGT1JDRUQpIHtcbiAgICAgIFR5cGVkQXJyYXkgPSB3cmFwcGVyKGZ1bmN0aW9uICh0aGF0LCBkYXRhLCAkb2Zmc2V0LCAkbGVuZ3RoKSB7XG4gICAgICAgIGFuSW5zdGFuY2UodGhhdCwgVHlwZWRBcnJheSwgTkFNRSwgJ19kJyk7XG4gICAgICAgIHZhciBpbmRleCA9IDA7XG4gICAgICAgIHZhciBvZmZzZXQgPSAwO1xuICAgICAgICB2YXIgYnVmZmVyLCBieXRlTGVuZ3RoLCBsZW5ndGgsIGtsYXNzO1xuICAgICAgICBpZiAoIWlzT2JqZWN0KGRhdGEpKSB7XG4gICAgICAgICAgbGVuZ3RoID0gdG9JbmRleChkYXRhKTtcbiAgICAgICAgICBieXRlTGVuZ3RoID0gbGVuZ3RoICogQllURVM7XG4gICAgICAgICAgYnVmZmVyID0gbmV3ICRBcnJheUJ1ZmZlcihieXRlTGVuZ3RoKTtcbiAgICAgICAgfSBlbHNlIGlmIChkYXRhIGluc3RhbmNlb2YgJEFycmF5QnVmZmVyIHx8IChrbGFzcyA9IGNsYXNzb2YoZGF0YSkpID09IEFSUkFZX0JVRkZFUiB8fCBrbGFzcyA9PSBTSEFSRURfQlVGRkVSKSB7XG4gICAgICAgICAgYnVmZmVyID0gZGF0YTtcbiAgICAgICAgICBvZmZzZXQgPSB0b09mZnNldCgkb2Zmc2V0LCBCWVRFUyk7XG4gICAgICAgICAgdmFyICRsZW4gPSBkYXRhLmJ5dGVMZW5ndGg7XG4gICAgICAgICAgaWYgKCRsZW5ndGggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaWYgKCRsZW4gJSBCWVRFUykgdGhyb3cgUmFuZ2VFcnJvcihXUk9OR19MRU5HVEgpO1xuICAgICAgICAgICAgYnl0ZUxlbmd0aCA9ICRsZW4gLSBvZmZzZXQ7XG4gICAgICAgICAgICBpZiAoYnl0ZUxlbmd0aCA8IDApIHRocm93IFJhbmdlRXJyb3IoV1JPTkdfTEVOR1RIKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYnl0ZUxlbmd0aCA9IHRvTGVuZ3RoKCRsZW5ndGgpICogQllURVM7XG4gICAgICAgICAgICBpZiAoYnl0ZUxlbmd0aCArIG9mZnNldCA+ICRsZW4pIHRocm93IFJhbmdlRXJyb3IoV1JPTkdfTEVOR1RIKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbGVuZ3RoID0gYnl0ZUxlbmd0aCAvIEJZVEVTO1xuICAgICAgICB9IGVsc2UgaWYgKFRZUEVEX0FSUkFZIGluIGRhdGEpIHtcbiAgICAgICAgICByZXR1cm4gZnJvbUxpc3QoVHlwZWRBcnJheSwgZGF0YSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuICRmcm9tLmNhbGwoVHlwZWRBcnJheSwgZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgaGlkZSh0aGF0LCAnX2QnLCB7XG4gICAgICAgICAgYjogYnVmZmVyLFxuICAgICAgICAgIG86IG9mZnNldCxcbiAgICAgICAgICBsOiBieXRlTGVuZ3RoLFxuICAgICAgICAgIGU6IGxlbmd0aCxcbiAgICAgICAgICB2OiBuZXcgJERhdGFWaWV3KGJ1ZmZlcilcbiAgICAgICAgfSk7XG4gICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkgYWRkRWxlbWVudCh0aGF0LCBpbmRleCsrKTtcbiAgICAgIH0pO1xuICAgICAgVHlwZWRBcnJheVByb3RvdHlwZSA9IFR5cGVkQXJyYXlbUFJPVE9UWVBFXSA9IGNyZWF0ZSgkVHlwZWRBcnJheVByb3RvdHlwZSQpO1xuICAgICAgaGlkZShUeXBlZEFycmF5UHJvdG90eXBlLCAnY29uc3RydWN0b3InLCBUeXBlZEFycmF5KTtcbiAgICB9IGVsc2UgaWYgKCFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgICBUeXBlZEFycmF5KDEpO1xuICAgIH0pIHx8ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgICBuZXcgVHlwZWRBcnJheSgtMSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgfSkgfHwgISRpdGVyRGV0ZWN0KGZ1bmN0aW9uIChpdGVyKSB7XG4gICAgICBuZXcgVHlwZWRBcnJheSgpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgICAgbmV3IFR5cGVkQXJyYXkobnVsbCk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgICBuZXcgVHlwZWRBcnJheSgxLjUpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgICAgbmV3IFR5cGVkQXJyYXkoaXRlcik7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgfSwgdHJ1ZSkpIHtcbiAgICAgIFR5cGVkQXJyYXkgPSB3cmFwcGVyKGZ1bmN0aW9uICh0aGF0LCBkYXRhLCAkb2Zmc2V0LCAkbGVuZ3RoKSB7XG4gICAgICAgIGFuSW5zdGFuY2UodGhhdCwgVHlwZWRBcnJheSwgTkFNRSk7XG4gICAgICAgIHZhciBrbGFzcztcbiAgICAgICAgLy8gYHdzYCBtb2R1bGUgYnVnLCB0ZW1wb3JhcmlseSByZW1vdmUgdmFsaWRhdGlvbiBsZW5ndGggZm9yIFVpbnQ4QXJyYXlcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3dlYnNvY2tldHMvd3MvcHVsbC82NDVcbiAgICAgICAgaWYgKCFpc09iamVjdChkYXRhKSkgcmV0dXJuIG5ldyBCYXNlKHRvSW5kZXgoZGF0YSkpO1xuICAgICAgICBpZiAoZGF0YSBpbnN0YW5jZW9mICRBcnJheUJ1ZmZlciB8fCAoa2xhc3MgPSBjbGFzc29mKGRhdGEpKSA9PSBBUlJBWV9CVUZGRVIgfHwga2xhc3MgPT0gU0hBUkVEX0JVRkZFUikge1xuICAgICAgICAgIHJldHVybiAkbGVuZ3RoICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgID8gbmV3IEJhc2UoZGF0YSwgdG9PZmZzZXQoJG9mZnNldCwgQllURVMpLCAkbGVuZ3RoKVxuICAgICAgICAgICAgOiAkb2Zmc2V0ICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgPyBuZXcgQmFzZShkYXRhLCB0b09mZnNldCgkb2Zmc2V0LCBCWVRFUykpXG4gICAgICAgICAgICAgIDogbmV3IEJhc2UoZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFRZUEVEX0FSUkFZIGluIGRhdGEpIHJldHVybiBmcm9tTGlzdChUeXBlZEFycmF5LCBkYXRhKTtcbiAgICAgICAgcmV0dXJuICRmcm9tLmNhbGwoVHlwZWRBcnJheSwgZGF0YSk7XG4gICAgICB9KTtcbiAgICAgIGFycmF5Rm9yRWFjaChUQUMgIT09IEZ1bmN0aW9uLnByb3RvdHlwZSA/IGdPUE4oQmFzZSkuY29uY2F0KGdPUE4oVEFDKSkgOiBnT1BOKEJhc2UpLCBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIGlmICghKGtleSBpbiBUeXBlZEFycmF5KSkgaGlkZShUeXBlZEFycmF5LCBrZXksIEJhc2Vba2V5XSk7XG4gICAgICB9KTtcbiAgICAgIFR5cGVkQXJyYXlbUFJPVE9UWVBFXSA9IFR5cGVkQXJyYXlQcm90b3R5cGU7XG4gICAgICBpZiAoIUxJQlJBUlkpIFR5cGVkQXJyYXlQcm90b3R5cGUuY29uc3RydWN0b3IgPSBUeXBlZEFycmF5O1xuICAgIH1cbiAgICB2YXIgJG5hdGl2ZUl0ZXJhdG9yID0gVHlwZWRBcnJheVByb3RvdHlwZVtJVEVSQVRPUl07XG4gICAgdmFyIENPUlJFQ1RfSVRFUl9OQU1FID0gISEkbmF0aXZlSXRlcmF0b3JcbiAgICAgICYmICgkbmF0aXZlSXRlcmF0b3IubmFtZSA9PSAndmFsdWVzJyB8fCAkbmF0aXZlSXRlcmF0b3IubmFtZSA9PSB1bmRlZmluZWQpO1xuICAgIHZhciAkaXRlcmF0b3IgPSAkaXRlcmF0b3JzLnZhbHVlcztcbiAgICBoaWRlKFR5cGVkQXJyYXksIFRZUEVEX0NPTlNUUlVDVE9SLCB0cnVlKTtcbiAgICBoaWRlKFR5cGVkQXJyYXlQcm90b3R5cGUsIFRZUEVEX0FSUkFZLCBOQU1FKTtcbiAgICBoaWRlKFR5cGVkQXJyYXlQcm90b3R5cGUsIFZJRVcsIHRydWUpO1xuICAgIGhpZGUoVHlwZWRBcnJheVByb3RvdHlwZSwgREVGX0NPTlNUUlVDVE9SLCBUeXBlZEFycmF5KTtcblxuICAgIGlmIChDTEFNUEVEID8gbmV3IFR5cGVkQXJyYXkoMSlbVEFHXSAhPSBOQU1FIDogIShUQUcgaW4gVHlwZWRBcnJheVByb3RvdHlwZSkpIHtcbiAgICAgIGRQKFR5cGVkQXJyYXlQcm90b3R5cGUsIFRBRywge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIE5BTUU7IH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIE9bTkFNRV0gPSBUeXBlZEFycmF5O1xuXG4gICAgJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LlcgKyAkZXhwb3J0LkYgKiAoVHlwZWRBcnJheSAhPSBCYXNlKSwgTyk7XG5cbiAgICAkZXhwb3J0KCRleHBvcnQuUywgTkFNRSwge1xuICAgICAgQllURVNfUEVSX0VMRU1FTlQ6IEJZVEVTXG4gICAgfSk7XG5cbiAgICAkZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIGZhaWxzKGZ1bmN0aW9uICgpIHsgQmFzZS5vZi5jYWxsKFR5cGVkQXJyYXksIDEpOyB9KSwgTkFNRSwge1xuICAgICAgZnJvbTogJGZyb20sXG4gICAgICBvZjogJG9mXG4gICAgfSk7XG5cbiAgICBpZiAoIShCWVRFU19QRVJfRUxFTUVOVCBpbiBUeXBlZEFycmF5UHJvdG90eXBlKSkgaGlkZShUeXBlZEFycmF5UHJvdG90eXBlLCBCWVRFU19QRVJfRUxFTUVOVCwgQllURVMpO1xuXG4gICAgJGV4cG9ydCgkZXhwb3J0LlAsIE5BTUUsIHByb3RvKTtcblxuICAgIHNldFNwZWNpZXMoTkFNRSk7XG5cbiAgICAkZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIEZPUkNFRF9TRVQsIE5BTUUsIHsgc2V0OiAkc2V0IH0pO1xuXG4gICAgJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAhQ09SUkVDVF9JVEVSX05BTUUsIE5BTUUsICRpdGVyYXRvcnMpO1xuXG4gICAgaWYgKCFMSUJSQVJZICYmIFR5cGVkQXJyYXlQcm90b3R5cGUudG9TdHJpbmcgIT0gYXJyYXlUb1N0cmluZykgVHlwZWRBcnJheVByb3RvdHlwZS50b1N0cmluZyA9IGFycmF5VG9TdHJpbmc7XG5cbiAgICAkZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAgIG5ldyBUeXBlZEFycmF5KDEpLnNsaWNlKCk7XG4gICAgfSksIE5BTUUsIHsgc2xpY2U6ICRzbGljZSB9KTtcblxuICAgICRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogKGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBbMSwgMl0udG9Mb2NhbGVTdHJpbmcoKSAhPSBuZXcgVHlwZWRBcnJheShbMSwgMl0pLnRvTG9jYWxlU3RyaW5nKCk7XG4gICAgfSkgfHwgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAgIFR5cGVkQXJyYXlQcm90b3R5cGUudG9Mb2NhbGVTdHJpbmcuY2FsbChbMSwgMl0pO1xuICAgIH0pKSwgTkFNRSwgeyB0b0xvY2FsZVN0cmluZzogJHRvTG9jYWxlU3RyaW5nIH0pO1xuXG4gICAgSXRlcmF0b3JzW05BTUVdID0gQ09SUkVDVF9JVEVSX05BTUUgPyAkbmF0aXZlSXRlcmF0b3IgOiAkaXRlcmF0b3I7XG4gICAgaWYgKCFMSUJSQVJZICYmICFDT1JSRUNUX0lURVJfTkFNRSkgaGlkZShUeXBlZEFycmF5UHJvdG90eXBlLCBJVEVSQVRPUiwgJGl0ZXJhdG9yKTtcbiAgfTtcbn0gZWxzZSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyk7XG52YXIgTElCUkFSWSA9IHJlcXVpcmUoJy4vX2xpYnJhcnknKTtcbnZhciAkdHlwZWQgPSByZXF1aXJlKCcuL190eXBlZCcpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgcmVkZWZpbmVBbGwgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG52YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgdG9JbmRleCA9IHJlcXVpcmUoJy4vX3RvLWluZGV4Jyk7XG52YXIgZ09QTiA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJykuZjtcbnZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG52YXIgYXJyYXlGaWxsID0gcmVxdWlyZSgnLi9fYXJyYXktZmlsbCcpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBBUlJBWV9CVUZGRVIgPSAnQXJyYXlCdWZmZXInO1xudmFyIERBVEFfVklFVyA9ICdEYXRhVmlldyc7XG52YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG52YXIgV1JPTkdfTEVOR1RIID0gJ1dyb25nIGxlbmd0aCEnO1xudmFyIFdST05HX0lOREVYID0gJ1dyb25nIGluZGV4ISc7XG52YXIgJEFycmF5QnVmZmVyID0gZ2xvYmFsW0FSUkFZX0JVRkZFUl07XG52YXIgJERhdGFWaWV3ID0gZ2xvYmFsW0RBVEFfVklFV107XG52YXIgTWF0aCA9IGdsb2JhbC5NYXRoO1xudmFyIFJhbmdlRXJyb3IgPSBnbG9iYWwuUmFuZ2VFcnJvcjtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zaGFkb3ctcmVzdHJpY3RlZC1uYW1lc1xudmFyIEluZmluaXR5ID0gZ2xvYmFsLkluZmluaXR5O1xudmFyIEJhc2VCdWZmZXIgPSAkQXJyYXlCdWZmZXI7XG52YXIgYWJzID0gTWF0aC5hYnM7XG52YXIgcG93ID0gTWF0aC5wb3c7XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xudmFyIGxvZyA9IE1hdGgubG9nO1xudmFyIExOMiA9IE1hdGguTE4yO1xudmFyIEJVRkZFUiA9ICdidWZmZXInO1xudmFyIEJZVEVfTEVOR1RIID0gJ2J5dGVMZW5ndGgnO1xudmFyIEJZVEVfT0ZGU0VUID0gJ2J5dGVPZmZzZXQnO1xudmFyICRCVUZGRVIgPSBERVNDUklQVE9SUyA/ICdfYicgOiBCVUZGRVI7XG52YXIgJExFTkdUSCA9IERFU0NSSVBUT1JTID8gJ19sJyA6IEJZVEVfTEVOR1RIO1xudmFyICRPRkZTRVQgPSBERVNDUklQVE9SUyA/ICdfbycgOiBCWVRFX09GRlNFVDtcblxuLy8gSUVFRTc1NCBjb252ZXJzaW9ucyBiYXNlZCBvbiBodHRwczovL2dpdGh1Yi5jb20vZmVyb3NzL2llZWU3NTRcbmZ1bmN0aW9uIHBhY2tJRUVFNzU0KHZhbHVlLCBtTGVuLCBuQnl0ZXMpIHtcbiAgdmFyIGJ1ZmZlciA9IG5ldyBBcnJheShuQnl0ZXMpO1xuICB2YXIgZUxlbiA9IG5CeXRlcyAqIDggLSBtTGVuIC0gMTtcbiAgdmFyIGVNYXggPSAoMSA8PCBlTGVuKSAtIDE7XG4gIHZhciBlQmlhcyA9IGVNYXggPj4gMTtcbiAgdmFyIHJ0ID0gbUxlbiA9PT0gMjMgPyBwb3coMiwgLTI0KSAtIHBvdygyLCAtNzcpIDogMDtcbiAgdmFyIGkgPSAwO1xuICB2YXIgcyA9IHZhbHVlIDwgMCB8fCB2YWx1ZSA9PT0gMCAmJiAxIC8gdmFsdWUgPCAwID8gMSA6IDA7XG4gIHZhciBlLCBtLCBjO1xuICB2YWx1ZSA9IGFicyh2YWx1ZSk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgaWYgKHZhbHVlICE9IHZhbHVlIHx8IHZhbHVlID09PSBJbmZpbml0eSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICBtID0gdmFsdWUgIT0gdmFsdWUgPyAxIDogMDtcbiAgICBlID0gZU1heDtcbiAgfSBlbHNlIHtcbiAgICBlID0gZmxvb3IobG9nKHZhbHVlKSAvIExOMik7XG4gICAgaWYgKHZhbHVlICogKGMgPSBwb3coMiwgLWUpKSA8IDEpIHtcbiAgICAgIGUtLTtcbiAgICAgIGMgKj0gMjtcbiAgICB9XG4gICAgaWYgKGUgKyBlQmlhcyA+PSAxKSB7XG4gICAgICB2YWx1ZSArPSBydCAvIGM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbHVlICs9IHJ0ICogcG93KDIsIDEgLSBlQmlhcyk7XG4gICAgfVxuICAgIGlmICh2YWx1ZSAqIGMgPj0gMikge1xuICAgICAgZSsrO1xuICAgICAgYyAvPSAyO1xuICAgIH1cbiAgICBpZiAoZSArIGVCaWFzID49IGVNYXgpIHtcbiAgICAgIG0gPSAwO1xuICAgICAgZSA9IGVNYXg7XG4gICAgfSBlbHNlIGlmIChlICsgZUJpYXMgPj0gMSkge1xuICAgICAgbSA9ICh2YWx1ZSAqIGMgLSAxKSAqIHBvdygyLCBtTGVuKTtcbiAgICAgIGUgPSBlICsgZUJpYXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIG0gPSB2YWx1ZSAqIHBvdygyLCBlQmlhcyAtIDEpICogcG93KDIsIG1MZW4pO1xuICAgICAgZSA9IDA7XG4gICAgfVxuICB9XG4gIGZvciAoOyBtTGVuID49IDg7IGJ1ZmZlcltpKytdID0gbSAmIDI1NSwgbSAvPSAyNTYsIG1MZW4gLT0gOCk7XG4gIGUgPSBlIDw8IG1MZW4gfCBtO1xuICBlTGVuICs9IG1MZW47XG4gIGZvciAoOyBlTGVuID4gMDsgYnVmZmVyW2krK10gPSBlICYgMjU1LCBlIC89IDI1NiwgZUxlbiAtPSA4KTtcbiAgYnVmZmVyWy0taV0gfD0gcyAqIDEyODtcbiAgcmV0dXJuIGJ1ZmZlcjtcbn1cbmZ1bmN0aW9uIHVucGFja0lFRUU3NTQoYnVmZmVyLCBtTGVuLCBuQnl0ZXMpIHtcbiAgdmFyIGVMZW4gPSBuQnl0ZXMgKiA4IC0gbUxlbiAtIDE7XG4gIHZhciBlTWF4ID0gKDEgPDwgZUxlbikgLSAxO1xuICB2YXIgZUJpYXMgPSBlTWF4ID4+IDE7XG4gIHZhciBuQml0cyA9IGVMZW4gLSA3O1xuICB2YXIgaSA9IG5CeXRlcyAtIDE7XG4gIHZhciBzID0gYnVmZmVyW2ktLV07XG4gIHZhciBlID0gcyAmIDEyNztcbiAgdmFyIG07XG4gIHMgPj49IDc7XG4gIGZvciAoOyBuQml0cyA+IDA7IGUgPSBlICogMjU2ICsgYnVmZmVyW2ldLCBpLS0sIG5CaXRzIC09IDgpO1xuICBtID0gZSAmICgxIDw8IC1uQml0cykgLSAxO1xuICBlID4+PSAtbkJpdHM7XG4gIG5CaXRzICs9IG1MZW47XG4gIGZvciAoOyBuQml0cyA+IDA7IG0gPSBtICogMjU2ICsgYnVmZmVyW2ldLCBpLS0sIG5CaXRzIC09IDgpO1xuICBpZiAoZSA9PT0gMCkge1xuICAgIGUgPSAxIC0gZUJpYXM7XG4gIH0gZWxzZSBpZiAoZSA9PT0gZU1heCkge1xuICAgIHJldHVybiBtID8gTmFOIDogcyA/IC1JbmZpbml0eSA6IEluZmluaXR5O1xuICB9IGVsc2Uge1xuICAgIG0gPSBtICsgcG93KDIsIG1MZW4pO1xuICAgIGUgPSBlIC0gZUJpYXM7XG4gIH0gcmV0dXJuIChzID8gLTEgOiAxKSAqIG0gKiBwb3coMiwgZSAtIG1MZW4pO1xufVxuXG5mdW5jdGlvbiB1bnBhY2tJMzIoYnl0ZXMpIHtcbiAgcmV0dXJuIGJ5dGVzWzNdIDw8IDI0IHwgYnl0ZXNbMl0gPDwgMTYgfCBieXRlc1sxXSA8PCA4IHwgYnl0ZXNbMF07XG59XG5mdW5jdGlvbiBwYWNrSTgoaXQpIHtcbiAgcmV0dXJuIFtpdCAmIDB4ZmZdO1xufVxuZnVuY3Rpb24gcGFja0kxNihpdCkge1xuICByZXR1cm4gW2l0ICYgMHhmZiwgaXQgPj4gOCAmIDB4ZmZdO1xufVxuZnVuY3Rpb24gcGFja0kzMihpdCkge1xuICByZXR1cm4gW2l0ICYgMHhmZiwgaXQgPj4gOCAmIDB4ZmYsIGl0ID4+IDE2ICYgMHhmZiwgaXQgPj4gMjQgJiAweGZmXTtcbn1cbmZ1bmN0aW9uIHBhY2tGNjQoaXQpIHtcbiAgcmV0dXJuIHBhY2tJRUVFNzU0KGl0LCA1MiwgOCk7XG59XG5mdW5jdGlvbiBwYWNrRjMyKGl0KSB7XG4gIHJldHVybiBwYWNrSUVFRTc1NChpdCwgMjMsIDQpO1xufVxuXG5mdW5jdGlvbiBhZGRHZXR0ZXIoQywga2V5LCBpbnRlcm5hbCkge1xuICBkUChDW1BST1RPVFlQRV0sIGtleSwgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXNbaW50ZXJuYWxdOyB9IH0pO1xufVxuXG5mdW5jdGlvbiBnZXQodmlldywgYnl0ZXMsIGluZGV4LCBpc0xpdHRsZUVuZGlhbikge1xuICB2YXIgbnVtSW5kZXggPSAraW5kZXg7XG4gIHZhciBpbnRJbmRleCA9IHRvSW5kZXgobnVtSW5kZXgpO1xuICBpZiAoaW50SW5kZXggKyBieXRlcyA+IHZpZXdbJExFTkdUSF0pIHRocm93IFJhbmdlRXJyb3IoV1JPTkdfSU5ERVgpO1xuICB2YXIgc3RvcmUgPSB2aWV3WyRCVUZGRVJdLl9iO1xuICB2YXIgc3RhcnQgPSBpbnRJbmRleCArIHZpZXdbJE9GRlNFVF07XG4gIHZhciBwYWNrID0gc3RvcmUuc2xpY2Uoc3RhcnQsIHN0YXJ0ICsgYnl0ZXMpO1xuICByZXR1cm4gaXNMaXR0bGVFbmRpYW4gPyBwYWNrIDogcGFjay5yZXZlcnNlKCk7XG59XG5mdW5jdGlvbiBzZXQodmlldywgYnl0ZXMsIGluZGV4LCBjb252ZXJzaW9uLCB2YWx1ZSwgaXNMaXR0bGVFbmRpYW4pIHtcbiAgdmFyIG51bUluZGV4ID0gK2luZGV4O1xuICB2YXIgaW50SW5kZXggPSB0b0luZGV4KG51bUluZGV4KTtcbiAgaWYgKGludEluZGV4ICsgYnl0ZXMgPiB2aWV3WyRMRU5HVEhdKSB0aHJvdyBSYW5nZUVycm9yKFdST05HX0lOREVYKTtcbiAgdmFyIHN0b3JlID0gdmlld1skQlVGRkVSXS5fYjtcbiAgdmFyIHN0YXJ0ID0gaW50SW5kZXggKyB2aWV3WyRPRkZTRVRdO1xuICB2YXIgcGFjayA9IGNvbnZlcnNpb24oK3ZhbHVlKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBieXRlczsgaSsrKSBzdG9yZVtzdGFydCArIGldID0gcGFja1tpc0xpdHRsZUVuZGlhbiA/IGkgOiBieXRlcyAtIGkgLSAxXTtcbn1cblxuaWYgKCEkdHlwZWQuQUJWKSB7XG4gICRBcnJheUJ1ZmZlciA9IGZ1bmN0aW9uIEFycmF5QnVmZmVyKGxlbmd0aCkge1xuICAgIGFuSW5zdGFuY2UodGhpcywgJEFycmF5QnVmZmVyLCBBUlJBWV9CVUZGRVIpO1xuICAgIHZhciBieXRlTGVuZ3RoID0gdG9JbmRleChsZW5ndGgpO1xuICAgIHRoaXMuX2IgPSBhcnJheUZpbGwuY2FsbChuZXcgQXJyYXkoYnl0ZUxlbmd0aCksIDApO1xuICAgIHRoaXNbJExFTkdUSF0gPSBieXRlTGVuZ3RoO1xuICB9O1xuXG4gICREYXRhVmlldyA9IGZ1bmN0aW9uIERhdGFWaWV3KGJ1ZmZlciwgYnl0ZU9mZnNldCwgYnl0ZUxlbmd0aCkge1xuICAgIGFuSW5zdGFuY2UodGhpcywgJERhdGFWaWV3LCBEQVRBX1ZJRVcpO1xuICAgIGFuSW5zdGFuY2UoYnVmZmVyLCAkQXJyYXlCdWZmZXIsIERBVEFfVklFVyk7XG4gICAgdmFyIGJ1ZmZlckxlbmd0aCA9IGJ1ZmZlclskTEVOR1RIXTtcbiAgICB2YXIgb2Zmc2V0ID0gdG9JbnRlZ2VyKGJ5dGVPZmZzZXQpO1xuICAgIGlmIChvZmZzZXQgPCAwIHx8IG9mZnNldCA+IGJ1ZmZlckxlbmd0aCkgdGhyb3cgUmFuZ2VFcnJvcignV3Jvbmcgb2Zmc2V0IScpO1xuICAgIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoID09PSB1bmRlZmluZWQgPyBidWZmZXJMZW5ndGggLSBvZmZzZXQgOiB0b0xlbmd0aChieXRlTGVuZ3RoKTtcbiAgICBpZiAob2Zmc2V0ICsgYnl0ZUxlbmd0aCA+IGJ1ZmZlckxlbmd0aCkgdGhyb3cgUmFuZ2VFcnJvcihXUk9OR19MRU5HVEgpO1xuICAgIHRoaXNbJEJVRkZFUl0gPSBidWZmZXI7XG4gICAgdGhpc1skT0ZGU0VUXSA9IG9mZnNldDtcbiAgICB0aGlzWyRMRU5HVEhdID0gYnl0ZUxlbmd0aDtcbiAgfTtcblxuICBpZiAoREVTQ1JJUFRPUlMpIHtcbiAgICBhZGRHZXR0ZXIoJEFycmF5QnVmZmVyLCBCWVRFX0xFTkdUSCwgJ19sJyk7XG4gICAgYWRkR2V0dGVyKCREYXRhVmlldywgQlVGRkVSLCAnX2InKTtcbiAgICBhZGRHZXR0ZXIoJERhdGFWaWV3LCBCWVRFX0xFTkdUSCwgJ19sJyk7XG4gICAgYWRkR2V0dGVyKCREYXRhVmlldywgQllURV9PRkZTRVQsICdfbycpO1xuICB9XG5cbiAgcmVkZWZpbmVBbGwoJERhdGFWaWV3W1BST1RPVFlQRV0sIHtcbiAgICBnZXRJbnQ4OiBmdW5jdGlvbiBnZXRJbnQ4KGJ5dGVPZmZzZXQpIHtcbiAgICAgIHJldHVybiBnZXQodGhpcywgMSwgYnl0ZU9mZnNldClbMF0gPDwgMjQgPj4gMjQ7XG4gICAgfSxcbiAgICBnZXRVaW50ODogZnVuY3Rpb24gZ2V0VWludDgoYnl0ZU9mZnNldCkge1xuICAgICAgcmV0dXJuIGdldCh0aGlzLCAxLCBieXRlT2Zmc2V0KVswXTtcbiAgICB9LFxuICAgIGdldEludDE2OiBmdW5jdGlvbiBnZXRJbnQxNihieXRlT2Zmc2V0IC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICB2YXIgYnl0ZXMgPSBnZXQodGhpcywgMiwgYnl0ZU9mZnNldCwgYXJndW1lbnRzWzFdKTtcbiAgICAgIHJldHVybiAoYnl0ZXNbMV0gPDwgOCB8IGJ5dGVzWzBdKSA8PCAxNiA+PiAxNjtcbiAgICB9LFxuICAgIGdldFVpbnQxNjogZnVuY3Rpb24gZ2V0VWludDE2KGJ5dGVPZmZzZXQgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHZhciBieXRlcyA9IGdldCh0aGlzLCAyLCBieXRlT2Zmc2V0LCBhcmd1bWVudHNbMV0pO1xuICAgICAgcmV0dXJuIGJ5dGVzWzFdIDw8IDggfCBieXRlc1swXTtcbiAgICB9LFxuICAgIGdldEludDMyOiBmdW5jdGlvbiBnZXRJbnQzMihieXRlT2Zmc2V0IC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICByZXR1cm4gdW5wYWNrSTMyKGdldCh0aGlzLCA0LCBieXRlT2Zmc2V0LCBhcmd1bWVudHNbMV0pKTtcbiAgICB9LFxuICAgIGdldFVpbnQzMjogZnVuY3Rpb24gZ2V0VWludDMyKGJ5dGVPZmZzZXQgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHJldHVybiB1bnBhY2tJMzIoZ2V0KHRoaXMsIDQsIGJ5dGVPZmZzZXQsIGFyZ3VtZW50c1sxXSkpID4+PiAwO1xuICAgIH0sXG4gICAgZ2V0RmxvYXQzMjogZnVuY3Rpb24gZ2V0RmxvYXQzMihieXRlT2Zmc2V0IC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICByZXR1cm4gdW5wYWNrSUVFRTc1NChnZXQodGhpcywgNCwgYnl0ZU9mZnNldCwgYXJndW1lbnRzWzFdKSwgMjMsIDQpO1xuICAgIH0sXG4gICAgZ2V0RmxvYXQ2NDogZnVuY3Rpb24gZ2V0RmxvYXQ2NChieXRlT2Zmc2V0IC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICByZXR1cm4gdW5wYWNrSUVFRTc1NChnZXQodGhpcywgOCwgYnl0ZU9mZnNldCwgYXJndW1lbnRzWzFdKSwgNTIsIDgpO1xuICAgIH0sXG4gICAgc2V0SW50ODogZnVuY3Rpb24gc2V0SW50OChieXRlT2Zmc2V0LCB2YWx1ZSkge1xuICAgICAgc2V0KHRoaXMsIDEsIGJ5dGVPZmZzZXQsIHBhY2tJOCwgdmFsdWUpO1xuICAgIH0sXG4gICAgc2V0VWludDg6IGZ1bmN0aW9uIHNldFVpbnQ4KGJ5dGVPZmZzZXQsIHZhbHVlKSB7XG4gICAgICBzZXQodGhpcywgMSwgYnl0ZU9mZnNldCwgcGFja0k4LCB2YWx1ZSk7XG4gICAgfSxcbiAgICBzZXRJbnQxNjogZnVuY3Rpb24gc2V0SW50MTYoYnl0ZU9mZnNldCwgdmFsdWUgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHNldCh0aGlzLCAyLCBieXRlT2Zmc2V0LCBwYWNrSTE2LCB2YWx1ZSwgYXJndW1lbnRzWzJdKTtcbiAgICB9LFxuICAgIHNldFVpbnQxNjogZnVuY3Rpb24gc2V0VWludDE2KGJ5dGVPZmZzZXQsIHZhbHVlIC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICBzZXQodGhpcywgMiwgYnl0ZU9mZnNldCwgcGFja0kxNiwgdmFsdWUsIGFyZ3VtZW50c1syXSk7XG4gICAgfSxcbiAgICBzZXRJbnQzMjogZnVuY3Rpb24gc2V0SW50MzIoYnl0ZU9mZnNldCwgdmFsdWUgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHNldCh0aGlzLCA0LCBieXRlT2Zmc2V0LCBwYWNrSTMyLCB2YWx1ZSwgYXJndW1lbnRzWzJdKTtcbiAgICB9LFxuICAgIHNldFVpbnQzMjogZnVuY3Rpb24gc2V0VWludDMyKGJ5dGVPZmZzZXQsIHZhbHVlIC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICBzZXQodGhpcywgNCwgYnl0ZU9mZnNldCwgcGFja0kzMiwgdmFsdWUsIGFyZ3VtZW50c1syXSk7XG4gICAgfSxcbiAgICBzZXRGbG9hdDMyOiBmdW5jdGlvbiBzZXRGbG9hdDMyKGJ5dGVPZmZzZXQsIHZhbHVlIC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICBzZXQodGhpcywgNCwgYnl0ZU9mZnNldCwgcGFja0YzMiwgdmFsdWUsIGFyZ3VtZW50c1syXSk7XG4gICAgfSxcbiAgICBzZXRGbG9hdDY0OiBmdW5jdGlvbiBzZXRGbG9hdDY0KGJ5dGVPZmZzZXQsIHZhbHVlIC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICBzZXQodGhpcywgOCwgYnl0ZU9mZnNldCwgcGFja0Y2NCwgdmFsdWUsIGFyZ3VtZW50c1syXSk7XG4gICAgfVxuICB9KTtcbn0gZWxzZSB7XG4gIGlmICghZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgICRBcnJheUJ1ZmZlcigxKTtcbiAgfSkgfHwgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICBuZXcgJEFycmF5QnVmZmVyKC0xKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgfSkgfHwgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIG5ldyAkQXJyYXlCdWZmZXIoKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICBuZXcgJEFycmF5QnVmZmVyKDEuNSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgbmV3ICRBcnJheUJ1ZmZlcihOYU4pOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgIHJldHVybiAkQXJyYXlCdWZmZXIubmFtZSAhPSBBUlJBWV9CVUZGRVI7XG4gIH0pKSB7XG4gICAgJEFycmF5QnVmZmVyID0gZnVuY3Rpb24gQXJyYXlCdWZmZXIobGVuZ3RoKSB7XG4gICAgICBhbkluc3RhbmNlKHRoaXMsICRBcnJheUJ1ZmZlcik7XG4gICAgICByZXR1cm4gbmV3IEJhc2VCdWZmZXIodG9JbmRleChsZW5ndGgpKTtcbiAgICB9O1xuICAgIHZhciBBcnJheUJ1ZmZlclByb3RvID0gJEFycmF5QnVmZmVyW1BST1RPVFlQRV0gPSBCYXNlQnVmZmVyW1BST1RPVFlQRV07XG4gICAgZm9yICh2YXIga2V5cyA9IGdPUE4oQmFzZUJ1ZmZlciksIGogPSAwLCBrZXk7IGtleXMubGVuZ3RoID4gajspIHtcbiAgICAgIGlmICghKChrZXkgPSBrZXlzW2orK10pIGluICRBcnJheUJ1ZmZlcikpIGhpZGUoJEFycmF5QnVmZmVyLCBrZXksIEJhc2VCdWZmZXJba2V5XSk7XG4gICAgfVxuICAgIGlmICghTElCUkFSWSkgQXJyYXlCdWZmZXJQcm90by5jb25zdHJ1Y3RvciA9ICRBcnJheUJ1ZmZlcjtcbiAgfVxuICAvLyBpT1MgU2FmYXJpIDcueCBidWdcbiAgdmFyIHZpZXcgPSBuZXcgJERhdGFWaWV3KG5ldyAkQXJyYXlCdWZmZXIoMikpO1xuICB2YXIgJHNldEludDggPSAkRGF0YVZpZXdbUFJPVE9UWVBFXS5zZXRJbnQ4O1xuICB2aWV3LnNldEludDgoMCwgMjE0NzQ4MzY0OCk7XG4gIHZpZXcuc2V0SW50OCgxLCAyMTQ3NDgzNjQ5KTtcbiAgaWYgKHZpZXcuZ2V0SW50OCgwKSB8fCAhdmlldy5nZXRJbnQ4KDEpKSByZWRlZmluZUFsbCgkRGF0YVZpZXdbUFJPVE9UWVBFXSwge1xuICAgIHNldEludDg6IGZ1bmN0aW9uIHNldEludDgoYnl0ZU9mZnNldCwgdmFsdWUpIHtcbiAgICAgICRzZXRJbnQ4LmNhbGwodGhpcywgYnl0ZU9mZnNldCwgdmFsdWUgPDwgMjQgPj4gMjQpO1xuICAgIH0sXG4gICAgc2V0VWludDg6IGZ1bmN0aW9uIHNldFVpbnQ4KGJ5dGVPZmZzZXQsIHZhbHVlKSB7XG4gICAgICAkc2V0SW50OC5jYWxsKHRoaXMsIGJ5dGVPZmZzZXQsIHZhbHVlIDw8IDI0ID4+IDI0KTtcbiAgICB9XG4gIH0sIHRydWUpO1xufVxuc2V0VG9TdHJpbmdUYWcoJEFycmF5QnVmZmVyLCBBUlJBWV9CVUZGRVIpO1xuc2V0VG9TdHJpbmdUYWcoJERhdGFWaWV3LCBEQVRBX1ZJRVcpO1xuaGlkZSgkRGF0YVZpZXdbUFJPVE9UWVBFXSwgJHR5cGVkLlZJRVcsIHRydWUpO1xuZXhwb3J0c1tBUlJBWV9CVUZGRVJdID0gJEFycmF5QnVmZmVyO1xuZXhwb3J0c1tEQVRBX1ZJRVddID0gJERhdGFWaWV3O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi9fdWlkJyk7XG52YXIgVFlQRUQgPSB1aWQoJ3R5cGVkX2FycmF5Jyk7XG52YXIgVklFVyA9IHVpZCgndmlldycpO1xudmFyIEFCViA9ICEhKGdsb2JhbC5BcnJheUJ1ZmZlciAmJiBnbG9iYWwuRGF0YVZpZXcpO1xudmFyIENPTlNUUiA9IEFCVjtcbnZhciBpID0gMDtcbnZhciBsID0gOTtcbnZhciBUeXBlZDtcblxudmFyIFR5cGVkQXJyYXlDb25zdHJ1Y3RvcnMgPSAoXG4gICdJbnQ4QXJyYXksVWludDhBcnJheSxVaW50OENsYW1wZWRBcnJheSxJbnQxNkFycmF5LFVpbnQxNkFycmF5LEludDMyQXJyYXksVWludDMyQXJyYXksRmxvYXQzMkFycmF5LEZsb2F0NjRBcnJheSdcbikuc3BsaXQoJywnKTtcblxud2hpbGUgKGkgPCBsKSB7XG4gIGlmIChUeXBlZCA9IGdsb2JhbFtUeXBlZEFycmF5Q29uc3RydWN0b3JzW2krK11dKSB7XG4gICAgaGlkZShUeXBlZC5wcm90b3R5cGUsIFRZUEVELCB0cnVlKTtcbiAgICBoaWRlKFR5cGVkLnByb3RvdHlwZSwgVklFVywgdHJ1ZSk7XG4gIH0gZWxzZSBDT05TVFIgPSBmYWxzZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEFCVjogQUJWLFxuICBDT05TVFI6IENPTlNUUixcbiAgVFlQRUQ6IFRZUEVELFxuICBWSUVXOiBWSUVXXG59O1xuIiwidmFyIGlkID0gMDtcbnZhciBweCA9IE1hdGgucmFuZG9tKCk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgcmV0dXJuICdTeW1ib2woJy5jb25jYXQoa2V5ID09PSB1bmRlZmluZWQgPyAnJyA6IGtleSwgJylfJywgKCsraWQgKyBweCkudG9TdHJpbmcoMzYpKTtcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgbmF2aWdhdG9yID0gZ2xvYmFsLm5hdmlnYXRvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBuYXZpZ2F0b3IgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudCB8fCAnJztcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIFRZUEUpIHtcbiAgaWYgKCFpc09iamVjdChpdCkgfHwgaXQuX3QgIT09IFRZUEUpIHRocm93IFR5cGVFcnJvcignSW5jb21wYXRpYmxlIHJlY2VpdmVyLCAnICsgVFlQRSArICcgcmVxdWlyZWQhJyk7XG4gIHJldHVybiBpdDtcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgY29yZSA9IHJlcXVpcmUoJy4vX2NvcmUnKTtcbnZhciBMSUJSQVJZID0gcmVxdWlyZSgnLi9fbGlicmFyeScpO1xudmFyIHdrc0V4dCA9IHJlcXVpcmUoJy4vX3drcy1leHQnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIHZhciAkU3ltYm9sID0gY29yZS5TeW1ib2wgfHwgKGNvcmUuU3ltYm9sID0gTElCUkFSWSA/IHt9IDogZ2xvYmFsLlN5bWJvbCB8fCB7fSk7XG4gIGlmIChuYW1lLmNoYXJBdCgwKSAhPSAnXycgJiYgIShuYW1lIGluICRTeW1ib2wpKSBkZWZpbmVQcm9wZXJ0eSgkU3ltYm9sLCBuYW1lLCB7IHZhbHVlOiB3a3NFeHQuZihuYW1lKSB9KTtcbn07XG4iLCJleHBvcnRzLmYgPSByZXF1aXJlKCcuL193a3MnKTtcbiIsInZhciBzdG9yZSA9IHJlcXVpcmUoJy4vX3NoYXJlZCcpKCd3a3MnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuL191aWQnKTtcbnZhciBTeW1ib2wgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5TeW1ib2w7XG52YXIgVVNFX1NZTUJPTCA9IHR5cGVvZiBTeW1ib2wgPT0gJ2Z1bmN0aW9uJztcblxudmFyICRleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZSkge1xuICByZXR1cm4gc3RvcmVbbmFtZV0gfHwgKHN0b3JlW25hbWVdID1cbiAgICBVU0VfU1lNQk9MICYmIFN5bWJvbFtuYW1lXSB8fCAoVVNFX1NZTUJPTCA/IFN5bWJvbCA6IHVpZCkoJ1N5bWJvbC4nICsgbmFtZSkpO1xufTtcblxuJGV4cG9ydHMuc3RvcmUgPSBzdG9yZTtcbiIsInZhciBjbGFzc29mID0gcmVxdWlyZSgnLi9fY2xhc3NvZicpO1xudmFyIElURVJBVE9SID0gcmVxdWlyZSgnLi9fd2tzJykoJ2l0ZXJhdG9yJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2NvcmUnKS5nZXRJdGVyYXRvck1ldGhvZCA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoaXQgIT0gdW5kZWZpbmVkKSByZXR1cm4gaXRbSVRFUkFUT1JdXG4gICAgfHwgaXRbJ0BAaXRlcmF0b3InXVxuICAgIHx8IEl0ZXJhdG9yc1tjbGFzc29mKGl0KV07XG59O1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL2JlbmphbWluZ3IvUmV4RXhwLmVzY2FwZVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkcmUgPSByZXF1aXJlKCcuL19yZXBsYWNlcicpKC9bXFxcXF4kKis/LigpfFtcXF17fV0vZywgJ1xcXFwkJicpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZ0V4cCcsIHsgZXNjYXBlOiBmdW5jdGlvbiBlc2NhcGUoaXQpIHsgcmV0dXJuICRyZShpdCk7IH0gfSk7XG4iLCIvLyAyMi4xLjMuMyBBcnJheS5wcm90b3R5cGUuY29weVdpdGhpbih0YXJnZXQsIHN0YXJ0LCBlbmQgPSB0aGlzLmxlbmd0aClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QLCAnQXJyYXknLCB7IGNvcHlXaXRoaW46IHJlcXVpcmUoJy4vX2FycmF5LWNvcHktd2l0aGluJykgfSk7XG5cbnJlcXVpcmUoJy4vX2FkZC10by11bnNjb3BhYmxlcycpKCdjb3B5V2l0aGluJyk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRldmVyeSA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKSg0KTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKFtdLmV2ZXJ5LCB0cnVlKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuNSAvIDE1LjQuNC4xNiBBcnJheS5wcm90b3R5cGUuZXZlcnkoY2FsbGJhY2tmbiBbLCB0aGlzQXJnXSlcbiAgZXZlcnk6IGZ1bmN0aW9uIGV2ZXJ5KGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgcmV0dXJuICRldmVyeSh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHNbMV0pO1xuICB9XG59KTtcbiIsIi8vIDIyLjEuMy42IEFycmF5LnByb3RvdHlwZS5maWxsKHZhbHVlLCBzdGFydCA9IDAsIGVuZCA9IHRoaXMubGVuZ3RoKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdBcnJheScsIHsgZmlsbDogcmVxdWlyZSgnLi9fYXJyYXktZmlsbCcpIH0pO1xuXG5yZXF1aXJlKCcuL19hZGQtdG8tdW5zY29wYWJsZXMnKSgnZmlsbCcpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkZmlsdGVyID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpKDIpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoW10uZmlsdGVyLCB0cnVlKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuNyAvIDE1LjQuNC4yMCBBcnJheS5wcm90b3R5cGUuZmlsdGVyKGNhbGxiYWNrZm4gWywgdGhpc0FyZ10pXG4gIGZpbHRlcjogZnVuY3Rpb24gZmlsdGVyKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgcmV0dXJuICRmaWx0ZXIodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzWzFdKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyAyMi4xLjMuOSBBcnJheS5wcm90b3R5cGUuZmluZEluZGV4KHByZWRpY2F0ZSwgdGhpc0FyZyA9IHVuZGVmaW5lZClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGZpbmQgPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJykoNik7XG52YXIgS0VZID0gJ2ZpbmRJbmRleCc7XG52YXIgZm9yY2VkID0gdHJ1ZTtcbi8vIFNob3VsZG4ndCBza2lwIGhvbGVzXG5pZiAoS0VZIGluIFtdKSBBcnJheSgxKVtLRVldKGZ1bmN0aW9uICgpIHsgZm9yY2VkID0gZmFsc2U7IH0pO1xuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiBmb3JjZWQsICdBcnJheScsIHtcbiAgZmluZEluZGV4OiBmdW5jdGlvbiBmaW5kSW5kZXgoY2FsbGJhY2tmbiAvKiAsIHRoYXQgPSB1bmRlZmluZWQgKi8pIHtcbiAgICByZXR1cm4gJGZpbmQodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcbnJlcXVpcmUoJy4vX2FkZC10by11bnNjb3BhYmxlcycpKEtFWSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyAyMi4xLjMuOCBBcnJheS5wcm90b3R5cGUuZmluZChwcmVkaWNhdGUsIHRoaXNBcmcgPSB1bmRlZmluZWQpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRmaW5kID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpKDUpO1xudmFyIEtFWSA9ICdmaW5kJztcbnZhciBmb3JjZWQgPSB0cnVlO1xuLy8gU2hvdWxkbid0IHNraXAgaG9sZXNcbmlmIChLRVkgaW4gW10pIEFycmF5KDEpW0tFWV0oZnVuY3Rpb24gKCkgeyBmb3JjZWQgPSBmYWxzZTsgfSk7XG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIGZvcmNlZCwgJ0FycmF5Jywge1xuICBmaW5kOiBmdW5jdGlvbiBmaW5kKGNhbGxiYWNrZm4gLyogLCB0aGF0ID0gdW5kZWZpbmVkICovKSB7XG4gICAgcmV0dXJuICRmaW5kKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG5yZXF1aXJlKCcuL19hZGQtdG8tdW5zY29wYWJsZXMnKShLRVkpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkZm9yRWFjaCA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKSgwKTtcbnZhciBTVFJJQ1QgPSByZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoW10uZm9yRWFjaCwgdHJ1ZSk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogIVNUUklDVCwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuMTAgLyAxNS40LjQuMTggQXJyYXkucHJvdG90eXBlLmZvckVhY2goY2FsbGJhY2tmbiBbLCB0aGlzQXJnXSlcbiAgZm9yRWFjaDogZnVuY3Rpb24gZm9yRWFjaChjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgIHJldHVybiAkZm9yRWFjaCh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHNbMV0pO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi9faXRlci1jYWxsJyk7XG52YXIgaXNBcnJheUl0ZXIgPSByZXF1aXJlKCcuL19pcy1hcnJheS1pdGVyJyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX2NyZWF0ZS1wcm9wZXJ0eScpO1xudmFyIGdldEl0ZXJGbiA9IHJlcXVpcmUoJy4vY29yZS5nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIXJlcXVpcmUoJy4vX2l0ZXItZGV0ZWN0JykoZnVuY3Rpb24gKGl0ZXIpIHsgQXJyYXkuZnJvbShpdGVyKTsgfSksICdBcnJheScsIHtcbiAgLy8gMjIuMS4yLjEgQXJyYXkuZnJvbShhcnJheUxpa2UsIG1hcGZuID0gdW5kZWZpbmVkLCB0aGlzQXJnID0gdW5kZWZpbmVkKVxuICBmcm9tOiBmdW5jdGlvbiBmcm9tKGFycmF5TGlrZSAvKiAsIG1hcGZuID0gdW5kZWZpbmVkLCB0aGlzQXJnID0gdW5kZWZpbmVkICovKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdChhcnJheUxpa2UpO1xuICAgIHZhciBDID0gdHlwZW9mIHRoaXMgPT0gJ2Z1bmN0aW9uJyA/IHRoaXMgOiBBcnJheTtcbiAgICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIG1hcGZuID0gYUxlbiA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQ7XG4gICAgdmFyIG1hcHBpbmcgPSBtYXBmbiAhPT0gdW5kZWZpbmVkO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGl0ZXJGbiA9IGdldEl0ZXJGbihPKTtcbiAgICB2YXIgbGVuZ3RoLCByZXN1bHQsIHN0ZXAsIGl0ZXJhdG9yO1xuICAgIGlmIChtYXBwaW5nKSBtYXBmbiA9IGN0eChtYXBmbiwgYUxlbiA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQsIDIpO1xuICAgIC8vIGlmIG9iamVjdCBpc24ndCBpdGVyYWJsZSBvciBpdCdzIGFycmF5IHdpdGggZGVmYXVsdCBpdGVyYXRvciAtIHVzZSBzaW1wbGUgY2FzZVxuICAgIGlmIChpdGVyRm4gIT0gdW5kZWZpbmVkICYmICEoQyA9PSBBcnJheSAmJiBpc0FycmF5SXRlcihpdGVyRm4pKSkge1xuICAgICAgZm9yIChpdGVyYXRvciA9IGl0ZXJGbi5jYWxsKE8pLCByZXN1bHQgPSBuZXcgQygpOyAhKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmU7IGluZGV4KyspIHtcbiAgICAgICAgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBpbmRleCwgbWFwcGluZyA/IGNhbGwoaXRlcmF0b3IsIG1hcGZuLCBbc3RlcC52YWx1ZSwgaW5kZXhdLCB0cnVlKSA6IHN0ZXAudmFsdWUpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBsZW5ndGggPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gICAgICBmb3IgKHJlc3VsdCA9IG5ldyBDKGxlbmd0aCk7IGxlbmd0aCA+IGluZGV4OyBpbmRleCsrKSB7XG4gICAgICAgIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwgaW5kZXgsIG1hcHBpbmcgPyBtYXBmbihPW2luZGV4XSwgaW5kZXgpIDogT1tpbmRleF0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXN1bHQubGVuZ3RoID0gaW5kZXg7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRpbmRleE9mID0gcmVxdWlyZSgnLi9fYXJyYXktaW5jbHVkZXMnKShmYWxzZSk7XG52YXIgJG5hdGl2ZSA9IFtdLmluZGV4T2Y7XG52YXIgTkVHQVRJVkVfWkVSTyA9ICEhJG5hdGl2ZSAmJiAxIC8gWzFdLmluZGV4T2YoMSwgLTApIDwgMDtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoTkVHQVRJVkVfWkVSTyB8fCAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKCRuYXRpdmUpKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuMTEgLyAxNS40LjQuMTQgQXJyYXkucHJvdG90eXBlLmluZGV4T2Yoc2VhcmNoRWxlbWVudCBbLCBmcm9tSW5kZXhdKVxuICBpbmRleE9mOiBmdW5jdGlvbiBpbmRleE9mKHNlYXJjaEVsZW1lbnQgLyogLCBmcm9tSW5kZXggPSAwICovKSB7XG4gICAgcmV0dXJuIE5FR0FUSVZFX1pFUk9cbiAgICAgIC8vIGNvbnZlcnQgLTAgdG8gKzBcbiAgICAgID8gJG5hdGl2ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IDBcbiAgICAgIDogJGluZGV4T2YodGhpcywgc2VhcmNoRWxlbWVudCwgYXJndW1lbnRzWzFdKTtcbiAgfVxufSk7XG4iLCIvLyAyMi4xLjIuMiAvIDE1LjQuMy4yIEFycmF5LmlzQXJyYXkoYXJnKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdBcnJheScsIHsgaXNBcnJheTogcmVxdWlyZSgnLi9faXMtYXJyYXknKSB9KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBhZGRUb1Vuc2NvcGFibGVzID0gcmVxdWlyZSgnLi9fYWRkLXRvLXVuc2NvcGFibGVzJyk7XG52YXIgc3RlcCA9IHJlcXVpcmUoJy4vX2l0ZXItc3RlcCcpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcblxuLy8gMjIuMS4zLjQgQXJyYXkucHJvdG90eXBlLmVudHJpZXMoKVxuLy8gMjIuMS4zLjEzIEFycmF5LnByb3RvdHlwZS5rZXlzKClcbi8vIDIyLjEuMy4yOSBBcnJheS5wcm90b3R5cGUudmFsdWVzKClcbi8vIDIyLjEuMy4zMCBBcnJheS5wcm90b3R5cGVbQEBpdGVyYXRvcl0oKVxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19pdGVyLWRlZmluZScpKEFycmF5LCAnQXJyYXknLCBmdW5jdGlvbiAoaXRlcmF0ZWQsIGtpbmQpIHtcbiAgdGhpcy5fdCA9IHRvSU9iamVjdChpdGVyYXRlZCk7IC8vIHRhcmdldFxuICB0aGlzLl9pID0gMDsgICAgICAgICAgICAgICAgICAgLy8gbmV4dCBpbmRleFxuICB0aGlzLl9rID0ga2luZDsgICAgICAgICAgICAgICAgLy8ga2luZFxuLy8gMjIuMS41LjIuMSAlQXJyYXlJdGVyYXRvclByb3RvdHlwZSUubmV4dCgpXG59LCBmdW5jdGlvbiAoKSB7XG4gIHZhciBPID0gdGhpcy5fdDtcbiAgdmFyIGtpbmQgPSB0aGlzLl9rO1xuICB2YXIgaW5kZXggPSB0aGlzLl9pKys7XG4gIGlmICghTyB8fCBpbmRleCA+PSBPLmxlbmd0aCkge1xuICAgIHRoaXMuX3QgPSB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHN0ZXAoMSk7XG4gIH1cbiAgaWYgKGtpbmQgPT0gJ2tleXMnKSByZXR1cm4gc3RlcCgwLCBpbmRleCk7XG4gIGlmIChraW5kID09ICd2YWx1ZXMnKSByZXR1cm4gc3RlcCgwLCBPW2luZGV4XSk7XG4gIHJldHVybiBzdGVwKDAsIFtpbmRleCwgT1tpbmRleF1dKTtcbn0sICd2YWx1ZXMnKTtcblxuLy8gYXJndW1lbnRzTGlzdFtAQGl0ZXJhdG9yXSBpcyAlQXJyYXlQcm90b192YWx1ZXMlICg5LjQuNC42LCA5LjQuNC43KVxuSXRlcmF0b3JzLkFyZ3VtZW50cyA9IEl0ZXJhdG9ycy5BcnJheTtcblxuYWRkVG9VbnNjb3BhYmxlcygna2V5cycpO1xuYWRkVG9VbnNjb3BhYmxlcygndmFsdWVzJyk7XG5hZGRUb1Vuc2NvcGFibGVzKCdlbnRyaWVzJyk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyAyMi4xLjMuMTMgQXJyYXkucHJvdG90eXBlLmpvaW4oc2VwYXJhdG9yKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgYXJyYXlKb2luID0gW10uam9pbjtcblxuLy8gZmFsbGJhY2sgZm9yIG5vdCBhcnJheS1saWtlIHN0cmluZ3NcbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogKHJlcXVpcmUoJy4vX2lvYmplY3QnKSAhPSBPYmplY3QgfHwgIXJlcXVpcmUoJy4vX3N0cmljdC1tZXRob2QnKShhcnJheUpvaW4pKSwgJ0FycmF5Jywge1xuICBqb2luOiBmdW5jdGlvbiBqb2luKHNlcGFyYXRvcikge1xuICAgIHJldHVybiBhcnJheUpvaW4uY2FsbCh0b0lPYmplY3QodGhpcyksIHNlcGFyYXRvciA9PT0gdW5kZWZpbmVkID8gJywnIDogc2VwYXJhdG9yKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciAkbmF0aXZlID0gW10ubGFzdEluZGV4T2Y7XG52YXIgTkVHQVRJVkVfWkVSTyA9ICEhJG5hdGl2ZSAmJiAxIC8gWzFdLmxhc3RJbmRleE9mKDEsIC0wKSA8IDA7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogKE5FR0FUSVZFX1pFUk8gfHwgIXJlcXVpcmUoJy4vX3N0cmljdC1tZXRob2QnKSgkbmF0aXZlKSksICdBcnJheScsIHtcbiAgLy8gMjIuMS4zLjE0IC8gMTUuNC40LjE1IEFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZihzZWFyY2hFbGVtZW50IFssIGZyb21JbmRleF0pXG4gIGxhc3RJbmRleE9mOiBmdW5jdGlvbiBsYXN0SW5kZXhPZihzZWFyY2hFbGVtZW50IC8qICwgZnJvbUluZGV4ID0gQFsqLTFdICovKSB7XG4gICAgLy8gY29udmVydCAtMCB0byArMFxuICAgIGlmIChORUdBVElWRV9aRVJPKSByZXR1cm4gJG5hdGl2ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IDA7XG4gICAgdmFyIE8gPSB0b0lPYmplY3QodGhpcyk7XG4gICAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgICB2YXIgaW5kZXggPSBsZW5ndGggLSAxO1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkgaW5kZXggPSBNYXRoLm1pbihpbmRleCwgdG9JbnRlZ2VyKGFyZ3VtZW50c1sxXSkpO1xuICAgIGlmIChpbmRleCA8IDApIGluZGV4ID0gbGVuZ3RoICsgaW5kZXg7XG4gICAgZm9yICg7aW5kZXggPj0gMDsgaW5kZXgtLSkgaWYgKGluZGV4IGluIE8pIGlmIChPW2luZGV4XSA9PT0gc2VhcmNoRWxlbWVudCkgcmV0dXJuIGluZGV4IHx8IDA7XG4gICAgcmV0dXJuIC0xO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJG1hcCA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKSgxKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKFtdLm1hcCwgdHJ1ZSksICdBcnJheScsIHtcbiAgLy8gMjIuMS4zLjE1IC8gMTUuNC40LjE5IEFycmF5LnByb3RvdHlwZS5tYXAoY2FsbGJhY2tmbiBbLCB0aGlzQXJnXSlcbiAgbWFwOiBmdW5jdGlvbiBtYXAoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJG1hcCh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHNbMV0pO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgY3JlYXRlUHJvcGVydHkgPSByZXF1aXJlKCcuL19jcmVhdGUtcHJvcGVydHknKTtcblxuLy8gV2ViS2l0IEFycmF5Lm9mIGlzbid0IGdlbmVyaWNcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIEYoKSB7IC8qIGVtcHR5ICovIH1cbiAgcmV0dXJuICEoQXJyYXkub2YuY2FsbChGKSBpbnN0YW5jZW9mIEYpO1xufSksICdBcnJheScsIHtcbiAgLy8gMjIuMS4yLjMgQXJyYXkub2YoIC4uLml0ZW1zKVxuICBvZjogZnVuY3Rpb24gb2YoLyogLi4uYXJncyAqLykge1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciByZXN1bHQgPSBuZXcgKHR5cGVvZiB0aGlzID09ICdmdW5jdGlvbicgPyB0aGlzIDogQXJyYXkpKGFMZW4pO1xuICAgIHdoaWxlIChhTGVuID4gaW5kZXgpIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwgaW5kZXgsIGFyZ3VtZW50c1tpbmRleCsrXSk7XG4gICAgcmVzdWx0Lmxlbmd0aCA9IGFMZW47XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRyZWR1Y2UgPSByZXF1aXJlKCcuL19hcnJheS1yZWR1Y2UnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKFtdLnJlZHVjZVJpZ2h0LCB0cnVlKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuMTkgLyAxNS40LjQuMjIgQXJyYXkucHJvdG90eXBlLnJlZHVjZVJpZ2h0KGNhbGxiYWNrZm4gWywgaW5pdGlhbFZhbHVlXSlcbiAgcmVkdWNlUmlnaHQ6IGZ1bmN0aW9uIHJlZHVjZVJpZ2h0KGNhbGxiYWNrZm4gLyogLCBpbml0aWFsVmFsdWUgKi8pIHtcbiAgICByZXR1cm4gJHJlZHVjZSh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoLCBhcmd1bWVudHNbMV0sIHRydWUpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHJlZHVjZSA9IHJlcXVpcmUoJy4vX2FycmF5LXJlZHVjZScpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoW10ucmVkdWNlLCB0cnVlKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuMTggLyAxNS40LjQuMjEgQXJyYXkucHJvdG90eXBlLnJlZHVjZShjYWxsYmFja2ZuIFssIGluaXRpYWxWYWx1ZV0pXG4gIHJlZHVjZTogZnVuY3Rpb24gcmVkdWNlKGNhbGxiYWNrZm4gLyogLCBpbml0aWFsVmFsdWUgKi8pIHtcbiAgICByZXR1cm4gJHJlZHVjZSh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoLCBhcmd1bWVudHNbMV0sIGZhbHNlKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGh0bWwgPSByZXF1aXJlKCcuL19odG1sJyk7XG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi9fdG8tYWJzb2x1dGUtaW5kZXgnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGFycmF5U2xpY2UgPSBbXS5zbGljZTtcblxuLy8gZmFsbGJhY2sgZm9yIG5vdCBhcnJheS1saWtlIEVTMyBzdHJpbmdzIGFuZCBET00gb2JqZWN0c1xuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgaWYgKGh0bWwpIGFycmF5U2xpY2UuY2FsbChodG1sKTtcbn0pLCAnQXJyYXknLCB7XG4gIHNsaWNlOiBmdW5jdGlvbiBzbGljZShiZWdpbiwgZW5kKSB7XG4gICAgdmFyIGxlbiA9IHRvTGVuZ3RoKHRoaXMubGVuZ3RoKTtcbiAgICB2YXIga2xhc3MgPSBjb2YodGhpcyk7XG4gICAgZW5kID0gZW5kID09PSB1bmRlZmluZWQgPyBsZW4gOiBlbmQ7XG4gICAgaWYgKGtsYXNzID09ICdBcnJheScpIHJldHVybiBhcnJheVNsaWNlLmNhbGwodGhpcywgYmVnaW4sIGVuZCk7XG4gICAgdmFyIHN0YXJ0ID0gdG9BYnNvbHV0ZUluZGV4KGJlZ2luLCBsZW4pO1xuICAgIHZhciB1cFRvID0gdG9BYnNvbHV0ZUluZGV4KGVuZCwgbGVuKTtcbiAgICB2YXIgc2l6ZSA9IHRvTGVuZ3RoKHVwVG8gLSBzdGFydCk7XG4gICAgdmFyIGNsb25lZCA9IG5ldyBBcnJheShzaXplKTtcbiAgICB2YXIgaSA9IDA7XG4gICAgZm9yICg7IGkgPCBzaXplOyBpKyspIGNsb25lZFtpXSA9IGtsYXNzID09ICdTdHJpbmcnXG4gICAgICA/IHRoaXMuY2hhckF0KHN0YXJ0ICsgaSlcbiAgICAgIDogdGhpc1tzdGFydCArIGldO1xuICAgIHJldHVybiBjbG9uZWQ7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkc29tZSA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKSgzKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKFtdLnNvbWUsIHRydWUpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy4yMyAvIDE1LjQuNC4xNyBBcnJheS5wcm90b3R5cGUuc29tZShjYWxsYmFja2ZuIFssIHRoaXNBcmddKVxuICBzb21lOiBmdW5jdGlvbiBzb21lKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgcmV0dXJuICRzb21lKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50c1sxXSk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgJHNvcnQgPSBbXS5zb3J0O1xudmFyIHRlc3QgPSBbMSwgMiwgM107XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogKGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gSUU4LVxuICB0ZXN0LnNvcnQodW5kZWZpbmVkKTtcbn0pIHx8ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIFY4IGJ1Z1xuICB0ZXN0LnNvcnQobnVsbCk7XG4gIC8vIE9sZCBXZWJLaXRcbn0pIHx8ICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoJHNvcnQpKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuMjUgQXJyYXkucHJvdG90eXBlLnNvcnQoY29tcGFyZWZuKVxuICBzb3J0OiBmdW5jdGlvbiBzb3J0KGNvbXBhcmVmbikge1xuICAgIHJldHVybiBjb21wYXJlZm4gPT09IHVuZGVmaW5lZFxuICAgICAgPyAkc29ydC5jYWxsKHRvT2JqZWN0KHRoaXMpKVxuICAgICAgOiAkc29ydC5jYWxsKHRvT2JqZWN0KHRoaXMpLCBhRnVuY3Rpb24oY29tcGFyZWZuKSk7XG4gIH1cbn0pO1xuIiwicmVxdWlyZSgnLi9fc2V0LXNwZWNpZXMnKSgnQXJyYXknKTtcbiIsIi8vIDIwLjMuMy4xIC8gMTUuOS40LjQgRGF0ZS5ub3coKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdEYXRlJywgeyBub3c6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBEYXRlKCkuZ2V0VGltZSgpOyB9IH0pO1xuIiwiLy8gMjAuMy40LjM2IC8gMTUuOS41LjQzIERhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nKClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9JU09TdHJpbmcgPSByZXF1aXJlKCcuL19kYXRlLXRvLWlzby1zdHJpbmcnKTtcblxuLy8gUGhhbnRvbUpTIC8gb2xkIFdlYktpdCBoYXMgYSBicm9rZW4gaW1wbGVtZW50YXRpb25zXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIChEYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZyAhPT0gdG9JU09TdHJpbmcpLCAnRGF0ZScsIHtcbiAgdG9JU09TdHJpbmc6IHRvSVNPU3RyaW5nXG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gbmV3IERhdGUoTmFOKS50b0pTT04oKSAhPT0gbnVsbFxuICAgIHx8IERhdGUucHJvdG90eXBlLnRvSlNPTi5jYWxsKHsgdG9JU09TdHJpbmc6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDE7IH0gfSkgIT09IDE7XG59KSwgJ0RhdGUnLCB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuICB0b0pTT046IGZ1bmN0aW9uIHRvSlNPTihrZXkpIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgIHZhciBwdiA9IHRvUHJpbWl0aXZlKE8pO1xuICAgIHJldHVybiB0eXBlb2YgcHYgPT0gJ251bWJlcicgJiYgIWlzRmluaXRlKHB2KSA/IG51bGwgOiBPLnRvSVNPU3RyaW5nKCk7XG4gIH1cbn0pO1xuIiwidmFyIFRPX1BSSU1JVElWRSA9IHJlcXVpcmUoJy4vX3drcycpKCd0b1ByaW1pdGl2ZScpO1xudmFyIHByb3RvID0gRGF0ZS5wcm90b3R5cGU7XG5cbmlmICghKFRPX1BSSU1JVElWRSBpbiBwcm90bykpIHJlcXVpcmUoJy4vX2hpZGUnKShwcm90bywgVE9fUFJJTUlUSVZFLCByZXF1aXJlKCcuL19kYXRlLXRvLXByaW1pdGl2ZScpKTtcbiIsInZhciBEYXRlUHJvdG8gPSBEYXRlLnByb3RvdHlwZTtcbnZhciBJTlZBTElEX0RBVEUgPSAnSW52YWxpZCBEYXRlJztcbnZhciBUT19TVFJJTkcgPSAndG9TdHJpbmcnO1xudmFyICR0b1N0cmluZyA9IERhdGVQcm90b1tUT19TVFJJTkddO1xudmFyIGdldFRpbWUgPSBEYXRlUHJvdG8uZ2V0VGltZTtcbmlmIChuZXcgRGF0ZShOYU4pICsgJycgIT0gSU5WQUxJRF9EQVRFKSB7XG4gIHJlcXVpcmUoJy4vX3JlZGVmaW5lJykoRGF0ZVByb3RvLCBUT19TVFJJTkcsIGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHZhciB2YWx1ZSA9IGdldFRpbWUuY2FsbCh0aGlzKTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgcmV0dXJuIHZhbHVlID09PSB2YWx1ZSA/ICR0b1N0cmluZy5jYWxsKHRoaXMpIDogSU5WQUxJRF9EQVRFO1xuICB9KTtcbn1cbiIsIi8vIDE5LjIuMy4yIC8gMTUuMy40LjUgRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQodGhpc0FyZywgYXJncy4uLilcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QLCAnRnVuY3Rpb24nLCB7IGJpbmQ6IHJlcXVpcmUoJy4vX2JpbmQnKSB9KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIEhBU19JTlNUQU5DRSA9IHJlcXVpcmUoJy4vX3drcycpKCdoYXNJbnN0YW5jZScpO1xudmFyIEZ1bmN0aW9uUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGU7XG4vLyAxOS4yLjMuNiBGdW5jdGlvbi5wcm90b3R5cGVbQEBoYXNJbnN0YW5jZV0oVilcbmlmICghKEhBU19JTlNUQU5DRSBpbiBGdW5jdGlvblByb3RvKSkgcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZihGdW5jdGlvblByb3RvLCBIQVNfSU5TVEFOQ0UsIHsgdmFsdWU6IGZ1bmN0aW9uIChPKSB7XG4gIGlmICh0eXBlb2YgdGhpcyAhPSAnZnVuY3Rpb24nIHx8ICFpc09iamVjdChPKSkgcmV0dXJuIGZhbHNlO1xuICBpZiAoIWlzT2JqZWN0KHRoaXMucHJvdG90eXBlKSkgcmV0dXJuIE8gaW5zdGFuY2VvZiB0aGlzO1xuICAvLyBmb3IgZW52aXJvbm1lbnQgdy9vIG5hdGl2ZSBgQEBoYXNJbnN0YW5jZWAgbG9naWMgZW5vdWdoIGBpbnN0YW5jZW9mYCwgYnV0IGFkZCB0aGlzOlxuICB3aGlsZSAoTyA9IGdldFByb3RvdHlwZU9mKE8pKSBpZiAodGhpcy5wcm90b3R5cGUgPT09IE8pIHJldHVybiB0cnVlO1xuICByZXR1cm4gZmFsc2U7XG59IH0pO1xuIiwidmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbnZhciBGUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGU7XG52YXIgbmFtZVJFID0gL15cXHMqZnVuY3Rpb24gKFteIChdKikvO1xudmFyIE5BTUUgPSAnbmFtZSc7XG5cbi8vIDE5LjIuNC4yIG5hbWVcbk5BTUUgaW4gRlByb3RvIHx8IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgZFAoRlByb3RvLCBOQU1FLCB7XG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiAoJycgKyB0aGlzKS5tYXRjaChuYW1lUkUpWzFdO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHN0cm9uZyA9IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24tc3Ryb25nJyk7XG52YXIgdmFsaWRhdGUgPSByZXF1aXJlKCcuL192YWxpZGF0ZS1jb2xsZWN0aW9uJyk7XG52YXIgTUFQID0gJ01hcCc7XG5cbi8vIDIzLjEgTWFwIE9iamVjdHNcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fY29sbGVjdGlvbicpKE1BUCwgZnVuY3Rpb24gKGdldCkge1xuICByZXR1cm4gZnVuY3Rpb24gTWFwKCkgeyByZXR1cm4gZ2V0KHRoaXMsIGFyZ3VtZW50cy5sZW5ndGggPiAwID8gYXJndW1lbnRzWzBdIDogdW5kZWZpbmVkKTsgfTtcbn0sIHtcbiAgLy8gMjMuMS4zLjYgTWFwLnByb3RvdHlwZS5nZXQoa2V5KVxuICBnZXQ6IGZ1bmN0aW9uIGdldChrZXkpIHtcbiAgICB2YXIgZW50cnkgPSBzdHJvbmcuZ2V0RW50cnkodmFsaWRhdGUodGhpcywgTUFQKSwga2V5KTtcbiAgICByZXR1cm4gZW50cnkgJiYgZW50cnkudjtcbiAgfSxcbiAgLy8gMjMuMS4zLjkgTWFwLnByb3RvdHlwZS5zZXQoa2V5LCB2YWx1ZSlcbiAgc2V0OiBmdW5jdGlvbiBzZXQoa2V5LCB2YWx1ZSkge1xuICAgIHJldHVybiBzdHJvbmcuZGVmKHZhbGlkYXRlKHRoaXMsIE1BUCksIGtleSA9PT0gMCA/IDAgOiBrZXksIHZhbHVlKTtcbiAgfVxufSwgc3Ryb25nLCB0cnVlKTtcbiIsIi8vIDIwLjIuMi4zIE1hdGguYWNvc2goeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgbG9nMXAgPSByZXF1aXJlKCcuL19tYXRoLWxvZzFwJyk7XG52YXIgc3FydCA9IE1hdGguc3FydDtcbnZhciAkYWNvc2ggPSBNYXRoLmFjb3NoO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICEoJGFjb3NoXG4gIC8vIFY4IGJ1ZzogaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTM1MDlcbiAgJiYgTWF0aC5mbG9vcigkYWNvc2goTnVtYmVyLk1BWF9WQUxVRSkpID09IDcxMFxuICAvLyBUb3IgQnJvd3NlciBidWc6IE1hdGguYWNvc2goSW5maW5pdHkpIC0+IE5hTlxuICAmJiAkYWNvc2goSW5maW5pdHkpID09IEluZmluaXR5XG4pLCAnTWF0aCcsIHtcbiAgYWNvc2g6IGZ1bmN0aW9uIGFjb3NoKHgpIHtcbiAgICByZXR1cm4gKHggPSAreCkgPCAxID8gTmFOIDogeCA+IDk0OTA2MjY1LjYyNDI1MTU2XG4gICAgICA/IE1hdGgubG9nKHgpICsgTWF0aC5MTjJcbiAgICAgIDogbG9nMXAoeCAtIDEgKyBzcXJ0KHggLSAxKSAqIHNxcnQoeCArIDEpKTtcbiAgfVxufSk7XG4iLCIvLyAyMC4yLjIuNSBNYXRoLmFzaW5oKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRhc2luaCA9IE1hdGguYXNpbmg7XG5cbmZ1bmN0aW9uIGFzaW5oKHgpIHtcbiAgcmV0dXJuICFpc0Zpbml0ZSh4ID0gK3gpIHx8IHggPT0gMCA/IHggOiB4IDwgMCA/IC1hc2luaCgteCkgOiBNYXRoLmxvZyh4ICsgTWF0aC5zcXJ0KHggKiB4ICsgMSkpO1xufVxuXG4vLyBUb3IgQnJvd3NlciBidWc6IE1hdGguYXNpbmgoMCkgLT4gLTBcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogISgkYXNpbmggJiYgMSAvICRhc2luaCgwKSA+IDApLCAnTWF0aCcsIHsgYXNpbmg6IGFzaW5oIH0pO1xuIiwiLy8gMjAuMi4yLjcgTWF0aC5hdGFuaCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkYXRhbmggPSBNYXRoLmF0YW5oO1xuXG4vLyBUb3IgQnJvd3NlciBidWc6IE1hdGguYXRhbmgoLTApIC0+IDBcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogISgkYXRhbmggJiYgMSAvICRhdGFuaCgtMCkgPCAwKSwgJ01hdGgnLCB7XG4gIGF0YW5oOiBmdW5jdGlvbiBhdGFuaCh4KSB7XG4gICAgcmV0dXJuICh4ID0gK3gpID09IDAgPyB4IDogTWF0aC5sb2coKDEgKyB4KSAvICgxIC0geCkpIC8gMjtcbiAgfVxufSk7XG4iLCIvLyAyMC4yLjIuOSBNYXRoLmNicnQoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgc2lnbiA9IHJlcXVpcmUoJy4vX21hdGgtc2lnbicpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGNicnQ6IGZ1bmN0aW9uIGNicnQoeCkge1xuICAgIHJldHVybiBzaWduKHggPSAreCkgKiBNYXRoLnBvdyhNYXRoLmFicyh4KSwgMSAvIDMpO1xuICB9XG59KTtcbiIsIi8vIDIwLjIuMi4xMSBNYXRoLmNsejMyKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGNsejMyOiBmdW5jdGlvbiBjbHozMih4KSB7XG4gICAgcmV0dXJuICh4ID4+Pj0gMCkgPyAzMSAtIE1hdGguZmxvb3IoTWF0aC5sb2coeCArIDAuNSkgKiBNYXRoLkxPRzJFKSA6IDMyO1xuICB9XG59KTtcbiIsIi8vIDIwLjIuMi4xMiBNYXRoLmNvc2goeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZXhwID0gTWF0aC5leHA7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgY29zaDogZnVuY3Rpb24gY29zaCh4KSB7XG4gICAgcmV0dXJuIChleHAoeCA9ICt4KSArIGV4cCgteCkpIC8gMjtcbiAgfVxufSk7XG4iLCIvLyAyMC4yLjIuMTQgTWF0aC5leHBtMSh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkZXhwbTEgPSByZXF1aXJlKCcuL19tYXRoLWV4cG0xJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogKCRleHBtMSAhPSBNYXRoLmV4cG0xKSwgJ01hdGgnLCB7IGV4cG0xOiAkZXhwbTEgfSk7XG4iLCIvLyAyMC4yLjIuMTYgTWF0aC5mcm91bmQoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHsgZnJvdW5kOiByZXF1aXJlKCcuL19tYXRoLWZyb3VuZCcpIH0pO1xuIiwiLy8gMjAuMi4yLjE3IE1hdGguaHlwb3QoW3ZhbHVlMVssIHZhbHVlMlssIOKApiBdXV0pXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGFicyA9IE1hdGguYWJzO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGh5cG90OiBmdW5jdGlvbiBoeXBvdCh2YWx1ZTEsIHZhbHVlMikgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgdmFyIHN1bSA9IDA7XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBhTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgbGFyZyA9IDA7XG4gICAgdmFyIGFyZywgZGl2O1xuICAgIHdoaWxlIChpIDwgYUxlbikge1xuICAgICAgYXJnID0gYWJzKGFyZ3VtZW50c1tpKytdKTtcbiAgICAgIGlmIChsYXJnIDwgYXJnKSB7XG4gICAgICAgIGRpdiA9IGxhcmcgLyBhcmc7XG4gICAgICAgIHN1bSA9IHN1bSAqIGRpdiAqIGRpdiArIDE7XG4gICAgICAgIGxhcmcgPSBhcmc7XG4gICAgICB9IGVsc2UgaWYgKGFyZyA+IDApIHtcbiAgICAgICAgZGl2ID0gYXJnIC8gbGFyZztcbiAgICAgICAgc3VtICs9IGRpdiAqIGRpdjtcbiAgICAgIH0gZWxzZSBzdW0gKz0gYXJnO1xuICAgIH1cbiAgICByZXR1cm4gbGFyZyA9PT0gSW5maW5pdHkgPyBJbmZpbml0eSA6IGxhcmcgKiBNYXRoLnNxcnQoc3VtKTtcbiAgfVxufSk7XG4iLCIvLyAyMC4yLjIuMTggTWF0aC5pbXVsKHgsIHkpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRpbXVsID0gTWF0aC5pbXVsO1xuXG4vLyBzb21lIFdlYktpdCB2ZXJzaW9ucyBmYWlscyB3aXRoIGJpZyBudW1iZXJzLCBzb21lIGhhcyB3cm9uZyBhcml0eVxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICRpbXVsKDB4ZmZmZmZmZmYsIDUpICE9IC01IHx8ICRpbXVsLmxlbmd0aCAhPSAyO1xufSksICdNYXRoJywge1xuICBpbXVsOiBmdW5jdGlvbiBpbXVsKHgsIHkpIHtcbiAgICB2YXIgVUlOVDE2ID0gMHhmZmZmO1xuICAgIHZhciB4biA9ICt4O1xuICAgIHZhciB5biA9ICt5O1xuICAgIHZhciB4bCA9IFVJTlQxNiAmIHhuO1xuICAgIHZhciB5bCA9IFVJTlQxNiAmIHluO1xuICAgIHJldHVybiAwIHwgeGwgKiB5bCArICgoVUlOVDE2ICYgeG4gPj4+IDE2KSAqIHlsICsgeGwgKiAoVUlOVDE2ICYgeW4gPj4+IDE2KSA8PCAxNiA+Pj4gMCk7XG4gIH1cbn0pO1xuIiwiLy8gMjAuMi4yLjIxIE1hdGgubG9nMTAoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgbG9nMTA6IGZ1bmN0aW9uIGxvZzEwKHgpIHtcbiAgICByZXR1cm4gTWF0aC5sb2coeCkgKiBNYXRoLkxPRzEwRTtcbiAgfVxufSk7XG4iLCIvLyAyMC4yLjIuMjAgTWF0aC5sb2cxcCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywgeyBsb2cxcDogcmVxdWlyZSgnLi9fbWF0aC1sb2cxcCcpIH0pO1xuIiwiLy8gMjAuMi4yLjIyIE1hdGgubG9nMih4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBsb2cyOiBmdW5jdGlvbiBsb2cyKHgpIHtcbiAgICByZXR1cm4gTWF0aC5sb2coeCkgLyBNYXRoLkxOMjtcbiAgfVxufSk7XG4iLCIvLyAyMC4yLjIuMjggTWF0aC5zaWduKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7IHNpZ246IHJlcXVpcmUoJy4vX21hdGgtc2lnbicpIH0pO1xuIiwiLy8gMjAuMi4yLjMwIE1hdGguc2luaCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBleHBtMSA9IHJlcXVpcmUoJy4vX21hdGgtZXhwbTEnKTtcbnZhciBleHAgPSBNYXRoLmV4cDtcblxuLy8gVjggbmVhciBDaHJvbWl1bSAzOCBoYXMgYSBwcm9ibGVtIHdpdGggdmVyeSBzbWFsbCBudW1iZXJzXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gIU1hdGguc2luaCgtMmUtMTcpICE9IC0yZS0xNztcbn0pLCAnTWF0aCcsIHtcbiAgc2luaDogZnVuY3Rpb24gc2luaCh4KSB7XG4gICAgcmV0dXJuIE1hdGguYWJzKHggPSAreCkgPCAxXG4gICAgICA/IChleHBtMSh4KSAtIGV4cG0xKC14KSkgLyAyXG4gICAgICA6IChleHAoeCAtIDEpIC0gZXhwKC14IC0gMSkpICogKE1hdGguRSAvIDIpO1xuICB9XG59KTtcbiIsIi8vIDIwLjIuMi4zMyBNYXRoLnRhbmgoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZXhwbTEgPSByZXF1aXJlKCcuL19tYXRoLWV4cG0xJyk7XG52YXIgZXhwID0gTWF0aC5leHA7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgdGFuaDogZnVuY3Rpb24gdGFuaCh4KSB7XG4gICAgdmFyIGEgPSBleHBtMSh4ID0gK3gpO1xuICAgIHZhciBiID0gZXhwbTEoLXgpO1xuICAgIHJldHVybiBhID09IEluZmluaXR5ID8gMSA6IGIgPT0gSW5maW5pdHkgPyAtMSA6IChhIC0gYikgLyAoZXhwKHgpICsgZXhwKC14KSk7XG4gIH1cbn0pO1xuIiwiLy8gMjAuMi4yLjM0IE1hdGgudHJ1bmMoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgdHJ1bmM6IGZ1bmN0aW9uIHRydW5jKGl0KSB7XG4gICAgcmV0dXJuIChpdCA+IDAgPyBNYXRoLmZsb29yIDogTWF0aC5jZWlsKShpdCk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xudmFyIGluaGVyaXRJZlJlcXVpcmVkID0gcmVxdWlyZSgnLi9faW5oZXJpdC1pZi1yZXF1aXJlZCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIGdPUE4gPSByZXF1aXJlKCcuL19vYmplY3QtZ29wbicpLmY7XG52YXIgZ09QRCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJykuZjtcbnZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG52YXIgJHRyaW0gPSByZXF1aXJlKCcuL19zdHJpbmctdHJpbScpLnRyaW07XG52YXIgTlVNQkVSID0gJ051bWJlcic7XG52YXIgJE51bWJlciA9IGdsb2JhbFtOVU1CRVJdO1xudmFyIEJhc2UgPSAkTnVtYmVyO1xudmFyIHByb3RvID0gJE51bWJlci5wcm90b3R5cGU7XG4vLyBPcGVyYSB+MTIgaGFzIGJyb2tlbiBPYmplY3QjdG9TdHJpbmdcbnZhciBCUk9LRU5fQ09GID0gY29mKHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKShwcm90bykpID09IE5VTUJFUjtcbnZhciBUUklNID0gJ3RyaW0nIGluIFN0cmluZy5wcm90b3R5cGU7XG5cbi8vIDcuMS4zIFRvTnVtYmVyKGFyZ3VtZW50KVxudmFyIHRvTnVtYmVyID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHZhciBpdCA9IHRvUHJpbWl0aXZlKGFyZ3VtZW50LCBmYWxzZSk7XG4gIGlmICh0eXBlb2YgaXQgPT0gJ3N0cmluZycgJiYgaXQubGVuZ3RoID4gMikge1xuICAgIGl0ID0gVFJJTSA/IGl0LnRyaW0oKSA6ICR0cmltKGl0LCAzKTtcbiAgICB2YXIgZmlyc3QgPSBpdC5jaGFyQ29kZUF0KDApO1xuICAgIHZhciB0aGlyZCwgcmFkaXgsIG1heENvZGU7XG4gICAgaWYgKGZpcnN0ID09PSA0MyB8fCBmaXJzdCA9PT0gNDUpIHtcbiAgICAgIHRoaXJkID0gaXQuY2hhckNvZGVBdCgyKTtcbiAgICAgIGlmICh0aGlyZCA9PT0gODggfHwgdGhpcmQgPT09IDEyMCkgcmV0dXJuIE5hTjsgLy8gTnVtYmVyKCcrMHgxJykgc2hvdWxkIGJlIE5hTiwgb2xkIFY4IGZpeFxuICAgIH0gZWxzZSBpZiAoZmlyc3QgPT09IDQ4KSB7XG4gICAgICBzd2l0Y2ggKGl0LmNoYXJDb2RlQXQoMSkpIHtcbiAgICAgICAgY2FzZSA2NjogY2FzZSA5ODogcmFkaXggPSAyOyBtYXhDb2RlID0gNDk7IGJyZWFrOyAvLyBmYXN0IGVxdWFsIC9eMGJbMDFdKyQvaVxuICAgICAgICBjYXNlIDc5OiBjYXNlIDExMTogcmFkaXggPSA4OyBtYXhDb2RlID0gNTU7IGJyZWFrOyAvLyBmYXN0IGVxdWFsIC9eMG9bMC03XSskL2lcbiAgICAgICAgZGVmYXVsdDogcmV0dXJuICtpdDtcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIGRpZ2l0cyA9IGl0LnNsaWNlKDIpLCBpID0gMCwgbCA9IGRpZ2l0cy5sZW5ndGgsIGNvZGU7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgY29kZSA9IGRpZ2l0cy5jaGFyQ29kZUF0KGkpO1xuICAgICAgICAvLyBwYXJzZUludCBwYXJzZXMgYSBzdHJpbmcgdG8gYSBmaXJzdCB1bmF2YWlsYWJsZSBzeW1ib2xcbiAgICAgICAgLy8gYnV0IFRvTnVtYmVyIHNob3VsZCByZXR1cm4gTmFOIGlmIGEgc3RyaW5nIGNvbnRhaW5zIHVuYXZhaWxhYmxlIHN5bWJvbHNcbiAgICAgICAgaWYgKGNvZGUgPCA0OCB8fCBjb2RlID4gbWF4Q29kZSkgcmV0dXJuIE5hTjtcbiAgICAgIH0gcmV0dXJuIHBhcnNlSW50KGRpZ2l0cywgcmFkaXgpO1xuICAgIH1cbiAgfSByZXR1cm4gK2l0O1xufTtcblxuaWYgKCEkTnVtYmVyKCcgMG8xJykgfHwgISROdW1iZXIoJzBiMScpIHx8ICROdW1iZXIoJysweDEnKSkge1xuICAkTnVtYmVyID0gZnVuY3Rpb24gTnVtYmVyKHZhbHVlKSB7XG4gICAgdmFyIGl0ID0gYXJndW1lbnRzLmxlbmd0aCA8IDEgPyAwIDogdmFsdWU7XG4gICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgIHJldHVybiB0aGF0IGluc3RhbmNlb2YgJE51bWJlclxuICAgICAgLy8gY2hlY2sgb24gMS4uY29uc3RydWN0b3IoZm9vKSBjYXNlXG4gICAgICAmJiAoQlJPS0VOX0NPRiA/IGZhaWxzKGZ1bmN0aW9uICgpIHsgcHJvdG8udmFsdWVPZi5jYWxsKHRoYXQpOyB9KSA6IGNvZih0aGF0KSAhPSBOVU1CRVIpXG4gICAgICAgID8gaW5oZXJpdElmUmVxdWlyZWQobmV3IEJhc2UodG9OdW1iZXIoaXQpKSwgdGhhdCwgJE51bWJlcikgOiB0b051bWJlcihpdCk7XG4gIH07XG4gIGZvciAodmFyIGtleXMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpID8gZ09QTihCYXNlKSA6IChcbiAgICAvLyBFUzM6XG4gICAgJ01BWF9WQUxVRSxNSU5fVkFMVUUsTmFOLE5FR0FUSVZFX0lORklOSVRZLFBPU0lUSVZFX0lORklOSVRZLCcgK1xuICAgIC8vIEVTNiAoaW4gY2FzZSwgaWYgbW9kdWxlcyB3aXRoIEVTNiBOdW1iZXIgc3RhdGljcyByZXF1aXJlZCBiZWZvcmUpOlxuICAgICdFUFNJTE9OLGlzRmluaXRlLGlzSW50ZWdlcixpc05hTixpc1NhZmVJbnRlZ2VyLE1BWF9TQUZFX0lOVEVHRVIsJyArXG4gICAgJ01JTl9TQUZFX0lOVEVHRVIscGFyc2VGbG9hdCxwYXJzZUludCxpc0ludGVnZXInXG4gICkuc3BsaXQoJywnKSwgaiA9IDAsIGtleTsga2V5cy5sZW5ndGggPiBqOyBqKyspIHtcbiAgICBpZiAoaGFzKEJhc2UsIGtleSA9IGtleXNbal0pICYmICFoYXMoJE51bWJlciwga2V5KSkge1xuICAgICAgZFAoJE51bWJlciwga2V5LCBnT1BEKEJhc2UsIGtleSkpO1xuICAgIH1cbiAgfVxuICAkTnVtYmVyLnByb3RvdHlwZSA9IHByb3RvO1xuICBwcm90by5jb25zdHJ1Y3RvciA9ICROdW1iZXI7XG4gIHJlcXVpcmUoJy4vX3JlZGVmaW5lJykoZ2xvYmFsLCBOVU1CRVIsICROdW1iZXIpO1xufVxuIiwiLy8gMjAuMS4yLjEgTnVtYmVyLkVQU0lMT05cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTnVtYmVyJywgeyBFUFNJTE9OOiBNYXRoLnBvdygyLCAtNTIpIH0pO1xuIiwiLy8gMjAuMS4yLjIgTnVtYmVyLmlzRmluaXRlKG51bWJlcilcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgX2lzRmluaXRlID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykuaXNGaW5pdGU7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTnVtYmVyJywge1xuICBpc0Zpbml0ZTogZnVuY3Rpb24gaXNGaW5pdGUoaXQpIHtcbiAgICByZXR1cm4gdHlwZW9mIGl0ID09ICdudW1iZXInICYmIF9pc0Zpbml0ZShpdCk7XG4gIH1cbn0pO1xuIiwiLy8gMjAuMS4yLjMgTnVtYmVyLmlzSW50ZWdlcihudW1iZXIpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ051bWJlcicsIHsgaXNJbnRlZ2VyOiByZXF1aXJlKCcuL19pcy1pbnRlZ2VyJykgfSk7XG4iLCIvLyAyMC4xLjIuNCBOdW1iZXIuaXNOYU4obnVtYmVyKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdOdW1iZXInLCB7XG4gIGlzTmFOOiBmdW5jdGlvbiBpc05hTihudW1iZXIpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgcmV0dXJuIG51bWJlciAhPSBudW1iZXI7XG4gIH1cbn0pO1xuIiwiLy8gMjAuMS4yLjUgTnVtYmVyLmlzU2FmZUludGVnZXIobnVtYmVyKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBpc0ludGVnZXIgPSByZXF1aXJlKCcuL19pcy1pbnRlZ2VyJyk7XG52YXIgYWJzID0gTWF0aC5hYnM7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTnVtYmVyJywge1xuICBpc1NhZmVJbnRlZ2VyOiBmdW5jdGlvbiBpc1NhZmVJbnRlZ2VyKG51bWJlcikge1xuICAgIHJldHVybiBpc0ludGVnZXIobnVtYmVyKSAmJiBhYnMobnVtYmVyKSA8PSAweDFmZmZmZmZmZmZmZmZmO1xuICB9XG59KTtcbiIsIi8vIDIwLjEuMi42IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ051bWJlcicsIHsgTUFYX1NBRkVfSU5URUdFUjogMHgxZmZmZmZmZmZmZmZmZiB9KTtcbiIsIi8vIDIwLjEuMi4xMCBOdW1iZXIuTUlOX1NBRkVfSU5URUdFUlxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdOdW1iZXInLCB7IE1JTl9TQUZFX0lOVEVHRVI6IC0weDFmZmZmZmZmZmZmZmZmIH0pO1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkcGFyc2VGbG9hdCA9IHJlcXVpcmUoJy4vX3BhcnNlLWZsb2F0Jyk7XG4vLyAyMC4xLjIuMTIgTnVtYmVyLnBhcnNlRmxvYXQoc3RyaW5nKVxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAoTnVtYmVyLnBhcnNlRmxvYXQgIT0gJHBhcnNlRmxvYXQpLCAnTnVtYmVyJywgeyBwYXJzZUZsb2F0OiAkcGFyc2VGbG9hdCB9KTtcbiIsInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHBhcnNlSW50ID0gcmVxdWlyZSgnLi9fcGFyc2UtaW50Jyk7XG4vLyAyMC4xLjIuMTMgTnVtYmVyLnBhcnNlSW50KHN0cmluZywgcmFkaXgpXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIChOdW1iZXIucGFyc2VJbnQgIT0gJHBhcnNlSW50KSwgJ051bWJlcicsIHsgcGFyc2VJbnQ6ICRwYXJzZUludCB9KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIGFOdW1iZXJWYWx1ZSA9IHJlcXVpcmUoJy4vX2EtbnVtYmVyLXZhbHVlJyk7XG52YXIgcmVwZWF0ID0gcmVxdWlyZSgnLi9fc3RyaW5nLXJlcGVhdCcpO1xudmFyICR0b0ZpeGVkID0gMS4wLnRvRml4ZWQ7XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xudmFyIGRhdGEgPSBbMCwgMCwgMCwgMCwgMCwgMF07XG52YXIgRVJST1IgPSAnTnVtYmVyLnRvRml4ZWQ6IGluY29ycmVjdCBpbnZvY2F0aW9uISc7XG52YXIgWkVSTyA9ICcwJztcblxudmFyIG11bHRpcGx5ID0gZnVuY3Rpb24gKG4sIGMpIHtcbiAgdmFyIGkgPSAtMTtcbiAgdmFyIGMyID0gYztcbiAgd2hpbGUgKCsraSA8IDYpIHtcbiAgICBjMiArPSBuICogZGF0YVtpXTtcbiAgICBkYXRhW2ldID0gYzIgJSAxZTc7XG4gICAgYzIgPSBmbG9vcihjMiAvIDFlNyk7XG4gIH1cbn07XG52YXIgZGl2aWRlID0gZnVuY3Rpb24gKG4pIHtcbiAgdmFyIGkgPSA2O1xuICB2YXIgYyA9IDA7XG4gIHdoaWxlICgtLWkgPj0gMCkge1xuICAgIGMgKz0gZGF0YVtpXTtcbiAgICBkYXRhW2ldID0gZmxvb3IoYyAvIG4pO1xuICAgIGMgPSAoYyAlIG4pICogMWU3O1xuICB9XG59O1xudmFyIG51bVRvU3RyaW5nID0gZnVuY3Rpb24gKCkge1xuICB2YXIgaSA9IDY7XG4gIHZhciBzID0gJyc7XG4gIHdoaWxlICgtLWkgPj0gMCkge1xuICAgIGlmIChzICE9PSAnJyB8fCBpID09PSAwIHx8IGRhdGFbaV0gIT09IDApIHtcbiAgICAgIHZhciB0ID0gU3RyaW5nKGRhdGFbaV0pO1xuICAgICAgcyA9IHMgPT09ICcnID8gdCA6IHMgKyByZXBlYXQuY2FsbChaRVJPLCA3IC0gdC5sZW5ndGgpICsgdDtcbiAgICB9XG4gIH0gcmV0dXJuIHM7XG59O1xudmFyIHBvdyA9IGZ1bmN0aW9uICh4LCBuLCBhY2MpIHtcbiAgcmV0dXJuIG4gPT09IDAgPyBhY2MgOiBuICUgMiA9PT0gMSA/IHBvdyh4LCBuIC0gMSwgYWNjICogeCkgOiBwb3coeCAqIHgsIG4gLyAyLCBhY2MpO1xufTtcbnZhciBsb2cgPSBmdW5jdGlvbiAoeCkge1xuICB2YXIgbiA9IDA7XG4gIHZhciB4MiA9IHg7XG4gIHdoaWxlICh4MiA+PSA0MDk2KSB7XG4gICAgbiArPSAxMjtcbiAgICB4MiAvPSA0MDk2O1xuICB9XG4gIHdoaWxlICh4MiA+PSAyKSB7XG4gICAgbiArPSAxO1xuICAgIHgyIC89IDI7XG4gIH0gcmV0dXJuIG47XG59O1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICghISR0b0ZpeGVkICYmIChcbiAgMC4wMDAwOC50b0ZpeGVkKDMpICE9PSAnMC4wMDAnIHx8XG4gIDAuOS50b0ZpeGVkKDApICE9PSAnMScgfHxcbiAgMS4yNTUudG9GaXhlZCgyKSAhPT0gJzEuMjUnIHx8XG4gIDEwMDAwMDAwMDAwMDAwMDAxMjguMC50b0ZpeGVkKDApICE9PSAnMTAwMDAwMDAwMDAwMDAwMDEyOCdcbikgfHwgIXJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICAvLyBWOCB+IEFuZHJvaWQgNC4zLVxuICAkdG9GaXhlZC5jYWxsKHt9KTtcbn0pKSwgJ051bWJlcicsIHtcbiAgdG9GaXhlZDogZnVuY3Rpb24gdG9GaXhlZChmcmFjdGlvbkRpZ2l0cykge1xuICAgIHZhciB4ID0gYU51bWJlclZhbHVlKHRoaXMsIEVSUk9SKTtcbiAgICB2YXIgZiA9IHRvSW50ZWdlcihmcmFjdGlvbkRpZ2l0cyk7XG4gICAgdmFyIHMgPSAnJztcbiAgICB2YXIgbSA9IFpFUk87XG4gICAgdmFyIGUsIHosIGosIGs7XG4gICAgaWYgKGYgPCAwIHx8IGYgPiAyMCkgdGhyb3cgUmFuZ2VFcnJvcihFUlJPUik7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgIGlmICh4ICE9IHgpIHJldHVybiAnTmFOJztcbiAgICBpZiAoeCA8PSAtMWUyMSB8fCB4ID49IDFlMjEpIHJldHVybiBTdHJpbmcoeCk7XG4gICAgaWYgKHggPCAwKSB7XG4gICAgICBzID0gJy0nO1xuICAgICAgeCA9IC14O1xuICAgIH1cbiAgICBpZiAoeCA+IDFlLTIxKSB7XG4gICAgICBlID0gbG9nKHggKiBwb3coMiwgNjksIDEpKSAtIDY5O1xuICAgICAgeiA9IGUgPCAwID8geCAqIHBvdygyLCAtZSwgMSkgOiB4IC8gcG93KDIsIGUsIDEpO1xuICAgICAgeiAqPSAweDEwMDAwMDAwMDAwMDAwO1xuICAgICAgZSA9IDUyIC0gZTtcbiAgICAgIGlmIChlID4gMCkge1xuICAgICAgICBtdWx0aXBseSgwLCB6KTtcbiAgICAgICAgaiA9IGY7XG4gICAgICAgIHdoaWxlIChqID49IDcpIHtcbiAgICAgICAgICBtdWx0aXBseSgxZTcsIDApO1xuICAgICAgICAgIGogLT0gNztcbiAgICAgICAgfVxuICAgICAgICBtdWx0aXBseShwb3coMTAsIGosIDEpLCAwKTtcbiAgICAgICAgaiA9IGUgLSAxO1xuICAgICAgICB3aGlsZSAoaiA+PSAyMykge1xuICAgICAgICAgIGRpdmlkZSgxIDw8IDIzKTtcbiAgICAgICAgICBqIC09IDIzO1xuICAgICAgICB9XG4gICAgICAgIGRpdmlkZSgxIDw8IGopO1xuICAgICAgICBtdWx0aXBseSgxLCAxKTtcbiAgICAgICAgZGl2aWRlKDIpO1xuICAgICAgICBtID0gbnVtVG9TdHJpbmcoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG11bHRpcGx5KDAsIHopO1xuICAgICAgICBtdWx0aXBseSgxIDw8IC1lLCAwKTtcbiAgICAgICAgbSA9IG51bVRvU3RyaW5nKCkgKyByZXBlYXQuY2FsbChaRVJPLCBmKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGYgPiAwKSB7XG4gICAgICBrID0gbS5sZW5ndGg7XG4gICAgICBtID0gcyArIChrIDw9IGYgPyAnMC4nICsgcmVwZWF0LmNhbGwoWkVSTywgZiAtIGspICsgbSA6IG0uc2xpY2UoMCwgayAtIGYpICsgJy4nICsgbS5zbGljZShrIC0gZikpO1xuICAgIH0gZWxzZSB7XG4gICAgICBtID0gcyArIG07XG4gICAgfSByZXR1cm4gbTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgYU51bWJlclZhbHVlID0gcmVxdWlyZSgnLi9fYS1udW1iZXItdmFsdWUnKTtcbnZhciAkdG9QcmVjaXNpb24gPSAxLjAudG9QcmVjaXNpb247XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogKCRmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIElFNy1cbiAgcmV0dXJuICR0b1ByZWNpc2lvbi5jYWxsKDEsIHVuZGVmaW5lZCkgIT09ICcxJztcbn0pIHx8ICEkZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBWOCB+IEFuZHJvaWQgNC4zLVxuICAkdG9QcmVjaXNpb24uY2FsbCh7fSk7XG59KSksICdOdW1iZXInLCB7XG4gIHRvUHJlY2lzaW9uOiBmdW5jdGlvbiB0b1ByZWNpc2lvbihwcmVjaXNpb24pIHtcbiAgICB2YXIgdGhhdCA9IGFOdW1iZXJWYWx1ZSh0aGlzLCAnTnVtYmVyI3RvUHJlY2lzaW9uOiBpbmNvcnJlY3QgaW52b2NhdGlvbiEnKTtcbiAgICByZXR1cm4gcHJlY2lzaW9uID09PSB1bmRlZmluZWQgPyAkdG9QcmVjaXNpb24uY2FsbCh0aGF0KSA6ICR0b1ByZWNpc2lvbi5jYWxsKHRoYXQsIHByZWNpc2lvbik7XG4gIH1cbn0pO1xuIiwiLy8gMTkuMS4zLjEgT2JqZWN0LmFzc2lnbih0YXJnZXQsIHNvdXJjZSlcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GLCAnT2JqZWN0JywgeyBhc3NpZ246IHJlcXVpcmUoJy4vX29iamVjdC1hc3NpZ24nKSB9KTtcbiIsInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG4vLyAxOS4xLjIuMiAvIDE1LjIuMy41IE9iamVjdC5jcmVhdGUoTyBbLCBQcm9wZXJ0aWVzXSlcbiRleHBvcnQoJGV4cG9ydC5TLCAnT2JqZWN0JywgeyBjcmVhdGU6IHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKSB9KTtcbiIsInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG4vLyAxOS4xLjIuMyAvIDE1LjIuMy43IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE8sIFByb3BlcnRpZXMpXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpLCAnT2JqZWN0JywgeyBkZWZpbmVQcm9wZXJ0aWVzOiByZXF1aXJlKCcuL19vYmplY3QtZHBzJykgfSk7XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuLy8gMTkuMS4yLjQgLyAxNS4yLjMuNiBPYmplY3QuZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcylcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIXJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyksICdPYmplY3QnLCB7IGRlZmluZVByb3BlcnR5OiByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mIH0pO1xuIiwiLy8gMTkuMS4yLjUgT2JqZWN0LmZyZWV6ZShPKVxudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgbWV0YSA9IHJlcXVpcmUoJy4vX21ldGEnKS5vbkZyZWV6ZTtcblxucmVxdWlyZSgnLi9fb2JqZWN0LXNhcCcpKCdmcmVlemUnLCBmdW5jdGlvbiAoJGZyZWV6ZSkge1xuICByZXR1cm4gZnVuY3Rpb24gZnJlZXplKGl0KSB7XG4gICAgcmV0dXJuICRmcmVlemUgJiYgaXNPYmplY3QoaXQpID8gJGZyZWV6ZShtZXRhKGl0KSkgOiBpdDtcbiAgfTtcbn0pO1xuIiwiLy8gMTkuMS4yLjYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKVxudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKS5mO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ2dldE93blByb3BlcnR5RGVzY3JpcHRvcicsIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihpdCwga2V5KSB7XG4gICAgcmV0dXJuICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodG9JT2JqZWN0KGl0KSwga2V5KTtcbiAgfTtcbn0pO1xuIiwiLy8gMTkuMS4yLjcgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoTylcbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgnZ2V0T3duUHJvcGVydHlOYW1lcycsIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHJlcXVpcmUoJy4vX29iamVjdC1nb3BuLWV4dCcpLmY7XG59KTtcbiIsIi8vIDE5LjEuMi45IE9iamVjdC5nZXRQcm90b3R5cGVPZihPKVxudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgJGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ2dldFByb3RvdHlwZU9mJywgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gZnVuY3Rpb24gZ2V0UHJvdG90eXBlT2YoaXQpIHtcbiAgICByZXR1cm4gJGdldFByb3RvdHlwZU9mKHRvT2JqZWN0KGl0KSk7XG4gIH07XG59KTtcbiIsIi8vIDE5LjEuMi4xMSBPYmplY3QuaXNFeHRlbnNpYmxlKE8pXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcblxucmVxdWlyZSgnLi9fb2JqZWN0LXNhcCcpKCdpc0V4dGVuc2libGUnLCBmdW5jdGlvbiAoJGlzRXh0ZW5zaWJsZSkge1xuICByZXR1cm4gZnVuY3Rpb24gaXNFeHRlbnNpYmxlKGl0KSB7XG4gICAgcmV0dXJuIGlzT2JqZWN0KGl0KSA/ICRpc0V4dGVuc2libGUgPyAkaXNFeHRlbnNpYmxlKGl0KSA6IHRydWUgOiBmYWxzZTtcbiAgfTtcbn0pO1xuIiwiLy8gMTkuMS4yLjEyIE9iamVjdC5pc0Zyb3plbihPKVxudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgnaXNGcm96ZW4nLCBmdW5jdGlvbiAoJGlzRnJvemVuKSB7XG4gIHJldHVybiBmdW5jdGlvbiBpc0Zyb3plbihpdCkge1xuICAgIHJldHVybiBpc09iamVjdChpdCkgPyAkaXNGcm96ZW4gPyAkaXNGcm96ZW4oaXQpIDogZmFsc2UgOiB0cnVlO1xuICB9O1xufSk7XG4iLCIvLyAxOS4xLjIuMTMgT2JqZWN0LmlzU2VhbGVkKE8pXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcblxucmVxdWlyZSgnLi9fb2JqZWN0LXNhcCcpKCdpc1NlYWxlZCcsIGZ1bmN0aW9uICgkaXNTZWFsZWQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGlzU2VhbGVkKGl0KSB7XG4gICAgcmV0dXJuIGlzT2JqZWN0KGl0KSA/ICRpc1NlYWxlZCA/ICRpc1NlYWxlZChpdCkgOiBmYWxzZSA6IHRydWU7XG4gIH07XG59KTtcbiIsIi8vIDE5LjEuMy4xMCBPYmplY3QuaXModmFsdWUxLCB2YWx1ZTIpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuJGV4cG9ydCgkZXhwb3J0LlMsICdPYmplY3QnLCB7IGlzOiByZXF1aXJlKCcuL19zYW1lLXZhbHVlJykgfSk7XG4iLCIvLyAxOS4xLjIuMTQgT2JqZWN0LmtleXMoTylcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyICRrZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcblxucmVxdWlyZSgnLi9fb2JqZWN0LXNhcCcpKCdrZXlzJywgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gZnVuY3Rpb24ga2V5cyhpdCkge1xuICAgIHJldHVybiAka2V5cyh0b09iamVjdChpdCkpO1xuICB9O1xufSk7XG4iLCIvLyAxOS4xLjIuMTUgT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKE8pXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBtZXRhID0gcmVxdWlyZSgnLi9fbWV0YScpLm9uRnJlZXplO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ3ByZXZlbnRFeHRlbnNpb25zJywgZnVuY3Rpb24gKCRwcmV2ZW50RXh0ZW5zaW9ucykge1xuICByZXR1cm4gZnVuY3Rpb24gcHJldmVudEV4dGVuc2lvbnMoaXQpIHtcbiAgICByZXR1cm4gJHByZXZlbnRFeHRlbnNpb25zICYmIGlzT2JqZWN0KGl0KSA/ICRwcmV2ZW50RXh0ZW5zaW9ucyhtZXRhKGl0KSkgOiBpdDtcbiAgfTtcbn0pO1xuIiwiLy8gMTkuMS4yLjE3IE9iamVjdC5zZWFsKE8pXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBtZXRhID0gcmVxdWlyZSgnLi9fbWV0YScpLm9uRnJlZXplO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ3NlYWwnLCBmdW5jdGlvbiAoJHNlYWwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHNlYWwoaXQpIHtcbiAgICByZXR1cm4gJHNlYWwgJiYgaXNPYmplY3QoaXQpID8gJHNlYWwobWV0YShpdCkpIDogaXQ7XG4gIH07XG59KTtcbiIsIi8vIDE5LjEuMy4xOSBPYmplY3Quc2V0UHJvdG90eXBlT2YoTywgcHJvdG8pXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuJGV4cG9ydCgkZXhwb3J0LlMsICdPYmplY3QnLCB7IHNldFByb3RvdHlwZU9mOiByZXF1aXJlKCcuL19zZXQtcHJvdG8nKS5zZXQgfSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyAxOS4xLjMuNiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nKClcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi9fY2xhc3NvZicpO1xudmFyIHRlc3QgPSB7fTtcbnRlc3RbcmVxdWlyZSgnLi9fd2tzJykoJ3RvU3RyaW5nVGFnJyldID0gJ3onO1xuaWYgKHRlc3QgKyAnJyAhPSAnW29iamVjdCB6XScpIHtcbiAgcmVxdWlyZSgnLi9fcmVkZWZpbmUnKShPYmplY3QucHJvdG90eXBlLCAndG9TdHJpbmcnLCBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gJ1tvYmplY3QgJyArIGNsYXNzb2YodGhpcykgKyAnXSc7XG4gIH0sIHRydWUpO1xufVxuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkcGFyc2VGbG9hdCA9IHJlcXVpcmUoJy4vX3BhcnNlLWZsb2F0Jyk7XG4vLyAxOC4yLjQgcGFyc2VGbG9hdChzdHJpbmcpXG4kZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuRiAqIChwYXJzZUZsb2F0ICE9ICRwYXJzZUZsb2F0KSwgeyBwYXJzZUZsb2F0OiAkcGFyc2VGbG9hdCB9KTtcbiIsInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHBhcnNlSW50ID0gcmVxdWlyZSgnLi9fcGFyc2UtaW50Jyk7XG4vLyAxOC4yLjUgcGFyc2VJbnQoc3RyaW5nLCByYWRpeClcbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5GICogKHBhcnNlSW50ICE9ICRwYXJzZUludCksIHsgcGFyc2VJbnQ6ICRwYXJzZUludCB9KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBMSUJSQVJZID0gcmVxdWlyZSgnLi9fbGlicmFyeScpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuL19jbGFzc29mJyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuL19hbi1pbnN0YW5jZScpO1xudmFyIGZvck9mID0gcmVxdWlyZSgnLi9fZm9yLW9mJyk7XG52YXIgc3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi9fc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xudmFyIHRhc2sgPSByZXF1aXJlKCcuL190YXNrJykuc2V0O1xudmFyIG1pY3JvdGFzayA9IHJlcXVpcmUoJy4vX21pY3JvdGFzaycpKCk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUgPSByZXF1aXJlKCcuL19uZXctcHJvbWlzZS1jYXBhYmlsaXR5Jyk7XG52YXIgcGVyZm9ybSA9IHJlcXVpcmUoJy4vX3BlcmZvcm0nKTtcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuL191c2VyLWFnZW50Jyk7XG52YXIgcHJvbWlzZVJlc29sdmUgPSByZXF1aXJlKCcuL19wcm9taXNlLXJlc29sdmUnKTtcbnZhciBQUk9NSVNFID0gJ1Byb21pc2UnO1xudmFyIFR5cGVFcnJvciA9IGdsb2JhbC5UeXBlRXJyb3I7XG52YXIgcHJvY2VzcyA9IGdsb2JhbC5wcm9jZXNzO1xudmFyIHZlcnNpb25zID0gcHJvY2VzcyAmJiBwcm9jZXNzLnZlcnNpb25zO1xudmFyIHY4ID0gdmVyc2lvbnMgJiYgdmVyc2lvbnMudjggfHwgJyc7XG52YXIgJFByb21pc2UgPSBnbG9iYWxbUFJPTUlTRV07XG52YXIgaXNOb2RlID0gY2xhc3NvZihwcm9jZXNzKSA9PSAncHJvY2Vzcyc7XG52YXIgZW1wdHkgPSBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH07XG52YXIgSW50ZXJuYWwsIG5ld0dlbmVyaWNQcm9taXNlQ2FwYWJpbGl0eSwgT3duUHJvbWlzZUNhcGFiaWxpdHksIFdyYXBwZXI7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdHZW5lcmljUHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZS5mO1xuXG52YXIgVVNFX05BVElWRSA9ICEhZnVuY3Rpb24gKCkge1xuICB0cnkge1xuICAgIC8vIGNvcnJlY3Qgc3ViY2xhc3Npbmcgd2l0aCBAQHNwZWNpZXMgc3VwcG9ydFxuICAgIHZhciBwcm9taXNlID0gJFByb21pc2UucmVzb2x2ZSgxKTtcbiAgICB2YXIgRmFrZVByb21pc2UgPSAocHJvbWlzZS5jb25zdHJ1Y3RvciA9IHt9KVtyZXF1aXJlKCcuL193a3MnKSgnc3BlY2llcycpXSA9IGZ1bmN0aW9uIChleGVjKSB7XG4gICAgICBleGVjKGVtcHR5LCBlbXB0eSk7XG4gICAgfTtcbiAgICAvLyB1bmhhbmRsZWQgcmVqZWN0aW9ucyB0cmFja2luZyBzdXBwb3J0LCBOb2RlSlMgUHJvbWlzZSB3aXRob3V0IGl0IGZhaWxzIEBAc3BlY2llcyB0ZXN0XG4gICAgcmV0dXJuIChpc05vZGUgfHwgdHlwZW9mIFByb21pc2VSZWplY3Rpb25FdmVudCA9PSAnZnVuY3Rpb24nKVxuICAgICAgJiYgcHJvbWlzZS50aGVuKGVtcHR5KSBpbnN0YW5jZW9mIEZha2VQcm9taXNlXG4gICAgICAvLyB2OCA2LjYgKE5vZGUgMTAgYW5kIENocm9tZSA2NikgaGF2ZSBhIGJ1ZyB3aXRoIHJlc29sdmluZyBjdXN0b20gdGhlbmFibGVzXG4gICAgICAvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD04MzA1NjVcbiAgICAgIC8vIHdlIGNhbid0IGRldGVjdCBpdCBzeW5jaHJvbm91c2x5LCBzbyBqdXN0IGNoZWNrIHZlcnNpb25zXG4gICAgICAmJiB2OC5pbmRleE9mKCc2LjYnKSAhPT0gMFxuICAgICAgJiYgdXNlckFnZW50LmluZGV4T2YoJ0Nocm9tZS82NicpID09PSAtMTtcbiAgfSBjYXRjaCAoZSkgeyAvKiBlbXB0eSAqLyB9XG59KCk7XG5cbi8vIGhlbHBlcnNcbnZhciBpc1RoZW5hYmxlID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciB0aGVuO1xuICByZXR1cm4gaXNPYmplY3QoaXQpICYmIHR5cGVvZiAodGhlbiA9IGl0LnRoZW4pID09ICdmdW5jdGlvbicgPyB0aGVuIDogZmFsc2U7XG59O1xudmFyIG5vdGlmeSA9IGZ1bmN0aW9uIChwcm9taXNlLCBpc1JlamVjdCkge1xuICBpZiAocHJvbWlzZS5fbikgcmV0dXJuO1xuICBwcm9taXNlLl9uID0gdHJ1ZTtcbiAgdmFyIGNoYWluID0gcHJvbWlzZS5fYztcbiAgbWljcm90YXNrKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdmFsdWUgPSBwcm9taXNlLl92O1xuICAgIHZhciBvayA9IHByb21pc2UuX3MgPT0gMTtcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIHJ1biA9IGZ1bmN0aW9uIChyZWFjdGlvbikge1xuICAgICAgdmFyIGhhbmRsZXIgPSBvayA/IHJlYWN0aW9uLm9rIDogcmVhY3Rpb24uZmFpbDtcbiAgICAgIHZhciByZXNvbHZlID0gcmVhY3Rpb24ucmVzb2x2ZTtcbiAgICAgIHZhciByZWplY3QgPSByZWFjdGlvbi5yZWplY3Q7XG4gICAgICB2YXIgZG9tYWluID0gcmVhY3Rpb24uZG9tYWluO1xuICAgICAgdmFyIHJlc3VsdCwgdGhlbiwgZXhpdGVkO1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKGhhbmRsZXIpIHtcbiAgICAgICAgICBpZiAoIW9rKSB7XG4gICAgICAgICAgICBpZiAocHJvbWlzZS5faCA9PSAyKSBvbkhhbmRsZVVuaGFuZGxlZChwcm9taXNlKTtcbiAgICAgICAgICAgIHByb21pc2UuX2ggPSAxO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaGFuZGxlciA9PT0gdHJ1ZSkgcmVzdWx0ID0gdmFsdWU7XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoZG9tYWluKSBkb21haW4uZW50ZXIoKTtcbiAgICAgICAgICAgIHJlc3VsdCA9IGhhbmRsZXIodmFsdWUpOyAvLyBtYXkgdGhyb3dcbiAgICAgICAgICAgIGlmIChkb21haW4pIHtcbiAgICAgICAgICAgICAgZG9tYWluLmV4aXQoKTtcbiAgICAgICAgICAgICAgZXhpdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHJlc3VsdCA9PT0gcmVhY3Rpb24ucHJvbWlzZSkge1xuICAgICAgICAgICAgcmVqZWN0KFR5cGVFcnJvcignUHJvbWlzZS1jaGFpbiBjeWNsZScpKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoZW4gPSBpc1RoZW5hYmxlKHJlc3VsdCkpIHtcbiAgICAgICAgICAgIHRoZW4uY2FsbChyZXN1bHQsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgfSBlbHNlIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgfSBlbHNlIHJlamVjdCh2YWx1ZSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlmIChkb21haW4gJiYgIWV4aXRlZCkgZG9tYWluLmV4aXQoKTtcbiAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgfVxuICAgIH07XG4gICAgd2hpbGUgKGNoYWluLmxlbmd0aCA+IGkpIHJ1bihjaGFpbltpKytdKTsgLy8gdmFyaWFibGUgbGVuZ3RoIC0gY2FuJ3QgdXNlIGZvckVhY2hcbiAgICBwcm9taXNlLl9jID0gW107XG4gICAgcHJvbWlzZS5fbiA9IGZhbHNlO1xuICAgIGlmIChpc1JlamVjdCAmJiAhcHJvbWlzZS5faCkgb25VbmhhbmRsZWQocHJvbWlzZSk7XG4gIH0pO1xufTtcbnZhciBvblVuaGFuZGxlZCA9IGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gIHRhc2suY2FsbChnbG9iYWwsIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdmFsdWUgPSBwcm9taXNlLl92O1xuICAgIHZhciB1bmhhbmRsZWQgPSBpc1VuaGFuZGxlZChwcm9taXNlKTtcbiAgICB2YXIgcmVzdWx0LCBoYW5kbGVyLCBjb25zb2xlO1xuICAgIGlmICh1bmhhbmRsZWQpIHtcbiAgICAgIHJlc3VsdCA9IHBlcmZvcm0oZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoaXNOb2RlKSB7XG4gICAgICAgICAgcHJvY2Vzcy5lbWl0KCd1bmhhbmRsZWRSZWplY3Rpb24nLCB2YWx1ZSwgcHJvbWlzZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaGFuZGxlciA9IGdsb2JhbC5vbnVuaGFuZGxlZHJlamVjdGlvbikge1xuICAgICAgICAgIGhhbmRsZXIoeyBwcm9taXNlOiBwcm9taXNlLCByZWFzb246IHZhbHVlIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKChjb25zb2xlID0gZ2xvYmFsLmNvbnNvbGUpICYmIGNvbnNvbGUuZXJyb3IpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdVbmhhbmRsZWQgcHJvbWlzZSByZWplY3Rpb24nLCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgLy8gQnJvd3NlcnMgc2hvdWxkIG5vdCB0cmlnZ2VyIGByZWplY3Rpb25IYW5kbGVkYCBldmVudCBpZiBpdCB3YXMgaGFuZGxlZCBoZXJlLCBOb2RlSlMgLSBzaG91bGRcbiAgICAgIHByb21pc2UuX2ggPSBpc05vZGUgfHwgaXNVbmhhbmRsZWQocHJvbWlzZSkgPyAyIDogMTtcbiAgICB9IHByb21pc2UuX2EgPSB1bmRlZmluZWQ7XG4gICAgaWYgKHVuaGFuZGxlZCAmJiByZXN1bHQuZSkgdGhyb3cgcmVzdWx0LnY7XG4gIH0pO1xufTtcbnZhciBpc1VuaGFuZGxlZCA9IGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gIHJldHVybiBwcm9taXNlLl9oICE9PSAxICYmIChwcm9taXNlLl9hIHx8IHByb21pc2UuX2MpLmxlbmd0aCA9PT0gMDtcbn07XG52YXIgb25IYW5kbGVVbmhhbmRsZWQgPSBmdW5jdGlvbiAocHJvbWlzZSkge1xuICB0YXNrLmNhbGwoZ2xvYmFsLCBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGhhbmRsZXI7XG4gICAgaWYgKGlzTm9kZSkge1xuICAgICAgcHJvY2Vzcy5lbWl0KCdyZWplY3Rpb25IYW5kbGVkJywgcHJvbWlzZSk7XG4gICAgfSBlbHNlIGlmIChoYW5kbGVyID0gZ2xvYmFsLm9ucmVqZWN0aW9uaGFuZGxlZCkge1xuICAgICAgaGFuZGxlcih7IHByb21pc2U6IHByb21pc2UsIHJlYXNvbjogcHJvbWlzZS5fdiB9KTtcbiAgICB9XG4gIH0pO1xufTtcbnZhciAkcmVqZWN0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gIHZhciBwcm9taXNlID0gdGhpcztcbiAgaWYgKHByb21pc2UuX2QpIHJldHVybjtcbiAgcHJvbWlzZS5fZCA9IHRydWU7XG4gIHByb21pc2UgPSBwcm9taXNlLl93IHx8IHByb21pc2U7IC8vIHVud3JhcFxuICBwcm9taXNlLl92ID0gdmFsdWU7XG4gIHByb21pc2UuX3MgPSAyO1xuICBpZiAoIXByb21pc2UuX2EpIHByb21pc2UuX2EgPSBwcm9taXNlLl9jLnNsaWNlKCk7XG4gIG5vdGlmeShwcm9taXNlLCB0cnVlKTtcbn07XG52YXIgJHJlc29sdmUgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgdmFyIHByb21pc2UgPSB0aGlzO1xuICB2YXIgdGhlbjtcbiAgaWYgKHByb21pc2UuX2QpIHJldHVybjtcbiAgcHJvbWlzZS5fZCA9IHRydWU7XG4gIHByb21pc2UgPSBwcm9taXNlLl93IHx8IHByb21pc2U7IC8vIHVud3JhcFxuICB0cnkge1xuICAgIGlmIChwcm9taXNlID09PSB2YWx1ZSkgdGhyb3cgVHlwZUVycm9yKFwiUHJvbWlzZSBjYW4ndCBiZSByZXNvbHZlZCBpdHNlbGZcIik7XG4gICAgaWYgKHRoZW4gPSBpc1RoZW5hYmxlKHZhbHVlKSkge1xuICAgICAgbWljcm90YXNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHdyYXBwZXIgPSB7IF93OiBwcm9taXNlLCBfZDogZmFsc2UgfTsgLy8gd3JhcFxuICAgICAgICB0cnkge1xuICAgICAgICAgIHRoZW4uY2FsbCh2YWx1ZSwgY3R4KCRyZXNvbHZlLCB3cmFwcGVyLCAxKSwgY3R4KCRyZWplY3QsIHdyYXBwZXIsIDEpKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICRyZWplY3QuY2FsbCh3cmFwcGVyLCBlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHByb21pc2UuX3YgPSB2YWx1ZTtcbiAgICAgIHByb21pc2UuX3MgPSAxO1xuICAgICAgbm90aWZ5KHByb21pc2UsIGZhbHNlKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAkcmVqZWN0LmNhbGwoeyBfdzogcHJvbWlzZSwgX2Q6IGZhbHNlIH0sIGUpOyAvLyB3cmFwXG4gIH1cbn07XG5cbi8vIGNvbnN0cnVjdG9yIHBvbHlmaWxsXG5pZiAoIVVTRV9OQVRJVkUpIHtcbiAgLy8gMjUuNC4zLjEgUHJvbWlzZShleGVjdXRvcilcbiAgJFByb21pc2UgPSBmdW5jdGlvbiBQcm9taXNlKGV4ZWN1dG9yKSB7XG4gICAgYW5JbnN0YW5jZSh0aGlzLCAkUHJvbWlzZSwgUFJPTUlTRSwgJ19oJyk7XG4gICAgYUZ1bmN0aW9uKGV4ZWN1dG9yKTtcbiAgICBJbnRlcm5hbC5jYWxsKHRoaXMpO1xuICAgIHRyeSB7XG4gICAgICBleGVjdXRvcihjdHgoJHJlc29sdmUsIHRoaXMsIDEpLCBjdHgoJHJlamVjdCwgdGhpcywgMSkpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgJHJlamVjdC5jYWxsKHRoaXMsIGVycik7XG4gICAgfVxuICB9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgSW50ZXJuYWwgPSBmdW5jdGlvbiBQcm9taXNlKGV4ZWN1dG9yKSB7XG4gICAgdGhpcy5fYyA9IFtdOyAgICAgICAgICAgICAvLyA8LSBhd2FpdGluZyByZWFjdGlvbnNcbiAgICB0aGlzLl9hID0gdW5kZWZpbmVkOyAgICAgIC8vIDwtIGNoZWNrZWQgaW4gaXNVbmhhbmRsZWQgcmVhY3Rpb25zXG4gICAgdGhpcy5fcyA9IDA7ICAgICAgICAgICAgICAvLyA8LSBzdGF0ZVxuICAgIHRoaXMuX2QgPSBmYWxzZTsgICAgICAgICAgLy8gPC0gZG9uZVxuICAgIHRoaXMuX3YgPSB1bmRlZmluZWQ7ICAgICAgLy8gPC0gdmFsdWVcbiAgICB0aGlzLl9oID0gMDsgICAgICAgICAgICAgIC8vIDwtIHJlamVjdGlvbiBzdGF0ZSwgMCAtIGRlZmF1bHQsIDEgLSBoYW5kbGVkLCAyIC0gdW5oYW5kbGVkXG4gICAgdGhpcy5fbiA9IGZhbHNlOyAgICAgICAgICAvLyA8LSBub3RpZnlcbiAgfTtcbiAgSW50ZXJuYWwucHJvdG90eXBlID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUtYWxsJykoJFByb21pc2UucHJvdG90eXBlLCB7XG4gICAgLy8gMjUuNC41LjMgUHJvbWlzZS5wcm90b3R5cGUudGhlbihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZClcbiAgICB0aGVuOiBmdW5jdGlvbiB0aGVuKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKSB7XG4gICAgICB2YXIgcmVhY3Rpb24gPSBuZXdQcm9taXNlQ2FwYWJpbGl0eShzcGVjaWVzQ29uc3RydWN0b3IodGhpcywgJFByb21pc2UpKTtcbiAgICAgIHJlYWN0aW9uLm9rID0gdHlwZW9mIG9uRnVsZmlsbGVkID09ICdmdW5jdGlvbicgPyBvbkZ1bGZpbGxlZCA6IHRydWU7XG4gICAgICByZWFjdGlvbi5mYWlsID0gdHlwZW9mIG9uUmVqZWN0ZWQgPT0gJ2Z1bmN0aW9uJyAmJiBvblJlamVjdGVkO1xuICAgICAgcmVhY3Rpb24uZG9tYWluID0gaXNOb2RlID8gcHJvY2Vzcy5kb21haW4gOiB1bmRlZmluZWQ7XG4gICAgICB0aGlzLl9jLnB1c2gocmVhY3Rpb24pO1xuICAgICAgaWYgKHRoaXMuX2EpIHRoaXMuX2EucHVzaChyZWFjdGlvbik7XG4gICAgICBpZiAodGhpcy5fcykgbm90aWZ5KHRoaXMsIGZhbHNlKTtcbiAgICAgIHJldHVybiByZWFjdGlvbi5wcm9taXNlO1xuICAgIH0sXG4gICAgLy8gMjUuNC41LjEgUHJvbWlzZS5wcm90b3R5cGUuY2F0Y2gob25SZWplY3RlZClcbiAgICAnY2F0Y2gnOiBmdW5jdGlvbiAob25SZWplY3RlZCkge1xuICAgICAgcmV0dXJuIHRoaXMudGhlbih1bmRlZmluZWQsIG9uUmVqZWN0ZWQpO1xuICAgIH1cbiAgfSk7XG4gIE93blByb21pc2VDYXBhYmlsaXR5ID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBwcm9taXNlID0gbmV3IEludGVybmFsKCk7XG4gICAgdGhpcy5wcm9taXNlID0gcHJvbWlzZTtcbiAgICB0aGlzLnJlc29sdmUgPSBjdHgoJHJlc29sdmUsIHByb21pc2UsIDEpO1xuICAgIHRoaXMucmVqZWN0ID0gY3R4KCRyZWplY3QsIHByb21pc2UsIDEpO1xuICB9O1xuICBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZS5mID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkgPSBmdW5jdGlvbiAoQykge1xuICAgIHJldHVybiBDID09PSAkUHJvbWlzZSB8fCBDID09PSBXcmFwcGVyXG4gICAgICA/IG5ldyBPd25Qcm9taXNlQ2FwYWJpbGl0eShDKVxuICAgICAgOiBuZXdHZW5lcmljUHJvbWlzZUNhcGFiaWxpdHkoQyk7XG4gIH07XG59XG5cbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5XICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsIHsgUHJvbWlzZTogJFByb21pc2UgfSk7XG5yZXF1aXJlKCcuL19zZXQtdG8tc3RyaW5nLXRhZycpKCRQcm9taXNlLCBQUk9NSVNFKTtcbnJlcXVpcmUoJy4vX3NldC1zcGVjaWVzJykoUFJPTUlTRSk7XG5XcmFwcGVyID0gcmVxdWlyZSgnLi9fY29yZScpW1BST01JU0VdO1xuXG4vLyBzdGF0aWNzXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFVU0VfTkFUSVZFLCBQUk9NSVNFLCB7XG4gIC8vIDI1LjQuNC41IFByb21pc2UucmVqZWN0KHIpXG4gIHJlamVjdDogZnVuY3Rpb24gcmVqZWN0KHIpIHtcbiAgICB2YXIgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5KHRoaXMpO1xuICAgIHZhciAkJHJlamVjdCA9IGNhcGFiaWxpdHkucmVqZWN0O1xuICAgICQkcmVqZWN0KHIpO1xuICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cbn0pO1xuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAoTElCUkFSWSB8fCAhVVNFX05BVElWRSksIFBST01JU0UsIHtcbiAgLy8gMjUuNC40LjYgUHJvbWlzZS5yZXNvbHZlKHgpXG4gIHJlc29sdmU6IGZ1bmN0aW9uIHJlc29sdmUoeCkge1xuICAgIHJldHVybiBwcm9taXNlUmVzb2x2ZShMSUJSQVJZICYmIHRoaXMgPT09IFdyYXBwZXIgPyAkUHJvbWlzZSA6IHRoaXMsIHgpO1xuICB9XG59KTtcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIShVU0VfTkFUSVZFICYmIHJlcXVpcmUoJy4vX2l0ZXItZGV0ZWN0JykoZnVuY3Rpb24gKGl0ZXIpIHtcbiAgJFByb21pc2UuYWxsKGl0ZXIpWydjYXRjaCddKGVtcHR5KTtcbn0pKSwgUFJPTUlTRSwge1xuICAvLyAyNS40LjQuMSBQcm9taXNlLmFsbChpdGVyYWJsZSlcbiAgYWxsOiBmdW5jdGlvbiBhbGwoaXRlcmFibGUpIHtcbiAgICB2YXIgQyA9IHRoaXM7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eShDKTtcbiAgICB2YXIgcmVzb2x2ZSA9IGNhcGFiaWxpdHkucmVzb2x2ZTtcbiAgICB2YXIgcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgdmFyIHJlc3VsdCA9IHBlcmZvcm0oZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHZhbHVlcyA9IFtdO1xuICAgICAgdmFyIGluZGV4ID0gMDtcbiAgICAgIHZhciByZW1haW5pbmcgPSAxO1xuICAgICAgZm9yT2YoaXRlcmFibGUsIGZhbHNlLCBmdW5jdGlvbiAocHJvbWlzZSkge1xuICAgICAgICB2YXIgJGluZGV4ID0gaW5kZXgrKztcbiAgICAgICAgdmFyIGFscmVhZHlDYWxsZWQgPSBmYWxzZTtcbiAgICAgICAgdmFsdWVzLnB1c2godW5kZWZpbmVkKTtcbiAgICAgICAgcmVtYWluaW5nKys7XG4gICAgICAgIEMucmVzb2x2ZShwcm9taXNlKS50aGVuKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgIGlmIChhbHJlYWR5Q2FsbGVkKSByZXR1cm47XG4gICAgICAgICAgYWxyZWFkeUNhbGxlZCA9IHRydWU7XG4gICAgICAgICAgdmFsdWVzWyRpbmRleF0gPSB2YWx1ZTtcbiAgICAgICAgICAtLXJlbWFpbmluZyB8fCByZXNvbHZlKHZhbHVlcyk7XG4gICAgICAgIH0sIHJlamVjdCk7XG4gICAgICB9KTtcbiAgICAgIC0tcmVtYWluaW5nIHx8IHJlc29sdmUodmFsdWVzKTtcbiAgICB9KTtcbiAgICBpZiAocmVzdWx0LmUpIHJlamVjdChyZXN1bHQudik7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfSxcbiAgLy8gMjUuNC40LjQgUHJvbWlzZS5yYWNlKGl0ZXJhYmxlKVxuICByYWNlOiBmdW5jdGlvbiByYWNlKGl0ZXJhYmxlKSB7XG4gICAgdmFyIEMgPSB0aGlzO1xuICAgIHZhciBjYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkoQyk7XG4gICAgdmFyIHJlamVjdCA9IGNhcGFiaWxpdHkucmVqZWN0O1xuICAgIHZhciByZXN1bHQgPSBwZXJmb3JtKGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvck9mKGl0ZXJhYmxlLCBmYWxzZSwgZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgICAgICAgQy5yZXNvbHZlKHByb21pc2UpLnRoZW4oY2FwYWJpbGl0eS5yZXNvbHZlLCByZWplY3QpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgaWYgKHJlc3VsdC5lKSByZWplY3QocmVzdWx0LnYpO1xuICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cbn0pO1xuIiwiLy8gMjYuMS4xIFJlZmxlY3QuYXBwbHkodGFyZ2V0LCB0aGlzQXJndW1lbnQsIGFyZ3VtZW50c0xpc3QpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHJBcHBseSA9IChyZXF1aXJlKCcuL19nbG9iYWwnKS5SZWZsZWN0IHx8IHt9KS5hcHBseTtcbnZhciBmQXBwbHkgPSBGdW5jdGlvbi5hcHBseTtcbi8vIE1TIEVkZ2UgYXJndW1lbnRzTGlzdCBhcmd1bWVudCBpcyBvcHRpb25hbFxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJBcHBseShmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0pO1xufSksICdSZWZsZWN0Jywge1xuICBhcHBseTogZnVuY3Rpb24gYXBwbHkodGFyZ2V0LCB0aGlzQXJndW1lbnQsIGFyZ3VtZW50c0xpc3QpIHtcbiAgICB2YXIgVCA9IGFGdW5jdGlvbih0YXJnZXQpO1xuICAgIHZhciBMID0gYW5PYmplY3QoYXJndW1lbnRzTGlzdCk7XG4gICAgcmV0dXJuIHJBcHBseSA/IHJBcHBseShULCB0aGlzQXJndW1lbnQsIEwpIDogZkFwcGx5LmNhbGwoVCwgdGhpc0FyZ3VtZW50LCBMKTtcbiAgfVxufSk7XG4iLCIvLyAyNi4xLjIgUmVmbGVjdC5jb25zdHJ1Y3QodGFyZ2V0LCBhcmd1bWVudHNMaXN0IFssIG5ld1RhcmdldF0pXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciBiaW5kID0gcmVxdWlyZSgnLi9fYmluZCcpO1xudmFyIHJDb25zdHJ1Y3QgPSAocmVxdWlyZSgnLi9fZ2xvYmFsJykuUmVmbGVjdCB8fCB7fSkuY29uc3RydWN0O1xuXG4vLyBNUyBFZGdlIHN1cHBvcnRzIG9ubHkgMiBhcmd1bWVudHMgYW5kIGFyZ3VtZW50c0xpc3QgYXJndW1lbnQgaXMgb3B0aW9uYWxcbi8vIEZGIE5pZ2h0bHkgc2V0cyB0aGlyZCBhcmd1bWVudCBhcyBgbmV3LnRhcmdldGAsIGJ1dCBkb2VzIG5vdCBjcmVhdGUgYHRoaXNgIGZyb20gaXRcbnZhciBORVdfVEFSR0VUX0JVRyA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gRigpIHsgLyogZW1wdHkgKi8gfVxuICByZXR1cm4gIShyQ29uc3RydWN0KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSwgW10sIEYpIGluc3RhbmNlb2YgRik7XG59KTtcbnZhciBBUkdTX0JVRyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJDb25zdHJ1Y3QoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9KTtcbn0pO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIChORVdfVEFSR0VUX0JVRyB8fCBBUkdTX0JVRyksICdSZWZsZWN0Jywge1xuICBjb25zdHJ1Y3Q6IGZ1bmN0aW9uIGNvbnN0cnVjdChUYXJnZXQsIGFyZ3MgLyogLCBuZXdUYXJnZXQgKi8pIHtcbiAgICBhRnVuY3Rpb24oVGFyZ2V0KTtcbiAgICBhbk9iamVjdChhcmdzKTtcbiAgICB2YXIgbmV3VGFyZ2V0ID0gYXJndW1lbnRzLmxlbmd0aCA8IDMgPyBUYXJnZXQgOiBhRnVuY3Rpb24oYXJndW1lbnRzWzJdKTtcbiAgICBpZiAoQVJHU19CVUcgJiYgIU5FV19UQVJHRVRfQlVHKSByZXR1cm4gckNvbnN0cnVjdChUYXJnZXQsIGFyZ3MsIG5ld1RhcmdldCk7XG4gICAgaWYgKFRhcmdldCA9PSBuZXdUYXJnZXQpIHtcbiAgICAgIC8vIHcvbyBhbHRlcmVkIG5ld1RhcmdldCwgb3B0aW1pemF0aW9uIGZvciAwLTQgYXJndW1lbnRzXG4gICAgICBzd2l0Y2ggKGFyZ3MubGVuZ3RoKSB7XG4gICAgICAgIGNhc2UgMDogcmV0dXJuIG5ldyBUYXJnZXQoKTtcbiAgICAgICAgY2FzZSAxOiByZXR1cm4gbmV3IFRhcmdldChhcmdzWzBdKTtcbiAgICAgICAgY2FzZSAyOiByZXR1cm4gbmV3IFRhcmdldChhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICAgICAgY2FzZSAzOiByZXR1cm4gbmV3IFRhcmdldChhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTtcbiAgICAgICAgY2FzZSA0OiByZXR1cm4gbmV3IFRhcmdldChhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdKTtcbiAgICAgIH1cbiAgICAgIC8vIHcvbyBhbHRlcmVkIG5ld1RhcmdldCwgbG90IG9mIGFyZ3VtZW50cyBjYXNlXG4gICAgICB2YXIgJGFyZ3MgPSBbbnVsbF07XG4gICAgICAkYXJncy5wdXNoLmFwcGx5KCRhcmdzLCBhcmdzKTtcbiAgICAgIHJldHVybiBuZXcgKGJpbmQuYXBwbHkoVGFyZ2V0LCAkYXJncykpKCk7XG4gICAgfVxuICAgIC8vIHdpdGggYWx0ZXJlZCBuZXdUYXJnZXQsIG5vdCBzdXBwb3J0IGJ1aWx0LWluIGNvbnN0cnVjdG9yc1xuICAgIHZhciBwcm90byA9IG5ld1RhcmdldC5wcm90b3R5cGU7XG4gICAgdmFyIGluc3RhbmNlID0gY3JlYXRlKGlzT2JqZWN0KHByb3RvKSA/IHByb3RvIDogT2JqZWN0LnByb3RvdHlwZSk7XG4gICAgdmFyIHJlc3VsdCA9IEZ1bmN0aW9uLmFwcGx5LmNhbGwoVGFyZ2V0LCBpbnN0YW5jZSwgYXJncyk7XG4gICAgcmV0dXJuIGlzT2JqZWN0KHJlc3VsdCkgPyByZXN1bHQgOiBpbnN0YW5jZTtcbiAgfVxufSk7XG4iLCIvLyAyNi4xLjMgUmVmbGVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIHByb3BlcnR5S2V5LCBhdHRyaWJ1dGVzKVxudmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcblxuLy8gTVMgRWRnZSBoYXMgYnJva2VuIFJlZmxlY3QuZGVmaW5lUHJvcGVydHkgLSB0aHJvd2luZyBpbnN0ZWFkIG9mIHJldHVybmluZyBmYWxzZVxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gIFJlZmxlY3QuZGVmaW5lUHJvcGVydHkoZFAuZih7fSwgMSwgeyB2YWx1ZTogMSB9KSwgMSwgeyB2YWx1ZTogMiB9KTtcbn0pLCAnUmVmbGVjdCcsIHtcbiAgZGVmaW5lUHJvcGVydHk6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHlLZXksIGF0dHJpYnV0ZXMpIHtcbiAgICBhbk9iamVjdCh0YXJnZXQpO1xuICAgIHByb3BlcnR5S2V5ID0gdG9QcmltaXRpdmUocHJvcGVydHlLZXksIHRydWUpO1xuICAgIGFuT2JqZWN0KGF0dHJpYnV0ZXMpO1xuICAgIHRyeSB7XG4gICAgICBkUC5mKHRhcmdldCwgcHJvcGVydHlLZXksIGF0dHJpYnV0ZXMpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxufSk7XG4iLCIvLyAyNi4xLjQgUmVmbGVjdC5kZWxldGVQcm9wZXJ0eSh0YXJnZXQsIHByb3BlcnR5S2V5KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBnT1BEID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKS5mO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHtcbiAgZGVsZXRlUHJvcGVydHk6IGZ1bmN0aW9uIGRlbGV0ZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHlLZXkpIHtcbiAgICB2YXIgZGVzYyA9IGdPUEQoYW5PYmplY3QodGFyZ2V0KSwgcHJvcGVydHlLZXkpO1xuICAgIHJldHVybiBkZXNjICYmICFkZXNjLmNvbmZpZ3VyYWJsZSA/IGZhbHNlIDogZGVsZXRlIHRhcmdldFtwcm9wZXJ0eUtleV07XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gMjYuMS41IFJlZmxlY3QuZW51bWVyYXRlKHRhcmdldClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBFbnVtZXJhdGUgPSBmdW5jdGlvbiAoaXRlcmF0ZWQpIHtcbiAgdGhpcy5fdCA9IGFuT2JqZWN0KGl0ZXJhdGVkKTsgLy8gdGFyZ2V0XG4gIHRoaXMuX2kgPSAwOyAgICAgICAgICAgICAgICAgIC8vIG5leHQgaW5kZXhcbiAgdmFyIGtleXMgPSB0aGlzLl9rID0gW107ICAgICAgLy8ga2V5c1xuICB2YXIga2V5O1xuICBmb3IgKGtleSBpbiBpdGVyYXRlZCkga2V5cy5wdXNoKGtleSk7XG59O1xucmVxdWlyZSgnLi9faXRlci1jcmVhdGUnKShFbnVtZXJhdGUsICdPYmplY3QnLCBmdW5jdGlvbiAoKSB7XG4gIHZhciB0aGF0ID0gdGhpcztcbiAgdmFyIGtleXMgPSB0aGF0Ll9rO1xuICB2YXIga2V5O1xuICBkbyB7XG4gICAgaWYgKHRoYXQuX2kgPj0ga2V5cy5sZW5ndGgpIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfTtcbiAgfSB3aGlsZSAoISgoa2V5ID0ga2V5c1t0aGF0Ll9pKytdKSBpbiB0aGF0Ll90KSk7XG4gIHJldHVybiB7IHZhbHVlOiBrZXksIGRvbmU6IGZhbHNlIH07XG59KTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0Jywge1xuICBlbnVtZXJhdGU6IGZ1bmN0aW9uIGVudW1lcmF0ZSh0YXJnZXQpIHtcbiAgICByZXR1cm4gbmV3IEVudW1lcmF0ZSh0YXJnZXQpO1xuICB9XG59KTtcbiIsIi8vIDI2LjEuNyBSZWZsZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIHByb3BlcnR5S2V5KVxudmFyIGdPUEQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7XG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgcHJvcGVydHlLZXkpIHtcbiAgICByZXR1cm4gZ09QRC5mKGFuT2JqZWN0KHRhcmdldCksIHByb3BlcnR5S2V5KTtcbiAgfVxufSk7XG4iLCIvLyAyNi4xLjggUmVmbGVjdC5nZXRQcm90b3R5cGVPZih0YXJnZXQpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGdldFByb3RvID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHtcbiAgZ2V0UHJvdG90eXBlT2Y6IGZ1bmN0aW9uIGdldFByb3RvdHlwZU9mKHRhcmdldCkge1xuICAgIHJldHVybiBnZXRQcm90byhhbk9iamVjdCh0YXJnZXQpKTtcbiAgfVxufSk7XG4iLCIvLyAyNi4xLjYgUmVmbGVjdC5nZXQodGFyZ2V0LCBwcm9wZXJ0eUtleSBbLCByZWNlaXZlcl0pXG52YXIgZ09QRCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcblxuZnVuY3Rpb24gZ2V0KHRhcmdldCwgcHJvcGVydHlLZXkgLyogLCByZWNlaXZlciAqLykge1xuICB2YXIgcmVjZWl2ZXIgPSBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IHRhcmdldCA6IGFyZ3VtZW50c1syXTtcbiAgdmFyIGRlc2MsIHByb3RvO1xuICBpZiAoYW5PYmplY3QodGFyZ2V0KSA9PT0gcmVjZWl2ZXIpIHJldHVybiB0YXJnZXRbcHJvcGVydHlLZXldO1xuICBpZiAoZGVzYyA9IGdPUEQuZih0YXJnZXQsIHByb3BlcnR5S2V5KSkgcmV0dXJuIGhhcyhkZXNjLCAndmFsdWUnKVxuICAgID8gZGVzYy52YWx1ZVxuICAgIDogZGVzYy5nZXQgIT09IHVuZGVmaW5lZFxuICAgICAgPyBkZXNjLmdldC5jYWxsKHJlY2VpdmVyKVxuICAgICAgOiB1bmRlZmluZWQ7XG4gIGlmIChpc09iamVjdChwcm90byA9IGdldFByb3RvdHlwZU9mKHRhcmdldCkpKSByZXR1cm4gZ2V0KHByb3RvLCBwcm9wZXJ0eUtleSwgcmVjZWl2ZXIpO1xufVxuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7IGdldDogZ2V0IH0pO1xuIiwiLy8gMjYuMS45IFJlZmxlY3QuaGFzKHRhcmdldCwgcHJvcGVydHlLZXkpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7XG4gIGhhczogZnVuY3Rpb24gaGFzKHRhcmdldCwgcHJvcGVydHlLZXkpIHtcbiAgICByZXR1cm4gcHJvcGVydHlLZXkgaW4gdGFyZ2V0O1xuICB9XG59KTtcbiIsIi8vIDI2LjEuMTAgUmVmbGVjdC5pc0V4dGVuc2libGUodGFyZ2V0KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyICRpc0V4dGVuc2libGUgPSBPYmplY3QuaXNFeHRlbnNpYmxlO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7XG4gIGlzRXh0ZW5zaWJsZTogZnVuY3Rpb24gaXNFeHRlbnNpYmxlKHRhcmdldCkge1xuICAgIGFuT2JqZWN0KHRhcmdldCk7XG4gICAgcmV0dXJuICRpc0V4dGVuc2libGUgPyAkaXNFeHRlbnNpYmxlKHRhcmdldCkgOiB0cnVlO1xuICB9XG59KTtcbiIsIi8vIDI2LjEuMTEgUmVmbGVjdC5vd25LZXlzKHRhcmdldClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHsgb3duS2V5czogcmVxdWlyZSgnLi9fb3duLWtleXMnKSB9KTtcbiIsIi8vIDI2LjEuMTIgUmVmbGVjdC5wcmV2ZW50RXh0ZW5zaW9ucyh0YXJnZXQpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgJHByZXZlbnRFeHRlbnNpb25zID0gT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7XG4gIHByZXZlbnRFeHRlbnNpb25zOiBmdW5jdGlvbiBwcmV2ZW50RXh0ZW5zaW9ucyh0YXJnZXQpIHtcbiAgICBhbk9iamVjdCh0YXJnZXQpO1xuICAgIHRyeSB7XG4gICAgICBpZiAoJHByZXZlbnRFeHRlbnNpb25zKSAkcHJldmVudEV4dGVuc2lvbnModGFyZ2V0KTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbn0pO1xuIiwiLy8gMjYuMS4xNCBSZWZsZWN0LnNldFByb3RvdHlwZU9mKHRhcmdldCwgcHJvdG8pXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHNldFByb3RvID0gcmVxdWlyZSgnLi9fc2V0LXByb3RvJyk7XG5cbmlmIChzZXRQcm90bykgJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0Jywge1xuICBzZXRQcm90b3R5cGVPZjogZnVuY3Rpb24gc2V0UHJvdG90eXBlT2YodGFyZ2V0LCBwcm90bykge1xuICAgIHNldFByb3RvLmNoZWNrKHRhcmdldCwgcHJvdG8pO1xuICAgIHRyeSB7XG4gICAgICBzZXRQcm90by5zZXQodGFyZ2V0LCBwcm90byk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG59KTtcbiIsIi8vIDI2LjEuMTMgUmVmbGVjdC5zZXQodGFyZ2V0LCBwcm9wZXJ0eUtleSwgViBbLCByZWNlaXZlcl0pXG52YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciBnT1BEID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgY3JlYXRlRGVzYyA9IHJlcXVpcmUoJy4vX3Byb3BlcnR5LWRlc2MnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG5cbmZ1bmN0aW9uIHNldCh0YXJnZXQsIHByb3BlcnR5S2V5LCBWIC8qICwgcmVjZWl2ZXIgKi8pIHtcbiAgdmFyIHJlY2VpdmVyID0gYXJndW1lbnRzLmxlbmd0aCA8IDQgPyB0YXJnZXQgOiBhcmd1bWVudHNbM107XG4gIHZhciBvd25EZXNjID0gZ09QRC5mKGFuT2JqZWN0KHRhcmdldCksIHByb3BlcnR5S2V5KTtcbiAgdmFyIGV4aXN0aW5nRGVzY3JpcHRvciwgcHJvdG87XG4gIGlmICghb3duRGVzYykge1xuICAgIGlmIChpc09iamVjdChwcm90byA9IGdldFByb3RvdHlwZU9mKHRhcmdldCkpKSB7XG4gICAgICByZXR1cm4gc2V0KHByb3RvLCBwcm9wZXJ0eUtleSwgViwgcmVjZWl2ZXIpO1xuICAgIH1cbiAgICBvd25EZXNjID0gY3JlYXRlRGVzYygwKTtcbiAgfVxuICBpZiAoaGFzKG93bkRlc2MsICd2YWx1ZScpKSB7XG4gICAgaWYgKG93bkRlc2Mud3JpdGFibGUgPT09IGZhbHNlIHx8ICFpc09iamVjdChyZWNlaXZlcikpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoZXhpc3RpbmdEZXNjcmlwdG9yID0gZ09QRC5mKHJlY2VpdmVyLCBwcm9wZXJ0eUtleSkpIHtcbiAgICAgIGlmIChleGlzdGluZ0Rlc2NyaXB0b3IuZ2V0IHx8IGV4aXN0aW5nRGVzY3JpcHRvci5zZXQgfHwgZXhpc3RpbmdEZXNjcmlwdG9yLndyaXRhYmxlID09PSBmYWxzZSkgcmV0dXJuIGZhbHNlO1xuICAgICAgZXhpc3RpbmdEZXNjcmlwdG9yLnZhbHVlID0gVjtcbiAgICAgIGRQLmYocmVjZWl2ZXIsIHByb3BlcnR5S2V5LCBleGlzdGluZ0Rlc2NyaXB0b3IpO1xuICAgIH0gZWxzZSBkUC5mKHJlY2VpdmVyLCBwcm9wZXJ0eUtleSwgY3JlYXRlRGVzYygwLCBWKSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIG93bkRlc2Muc2V0ID09PSB1bmRlZmluZWQgPyBmYWxzZSA6IChvd25EZXNjLnNldC5jYWxsKHJlY2VpdmVyLCBWKSwgdHJ1ZSk7XG59XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHsgc2V0OiBzZXQgfSk7XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgaW5oZXJpdElmUmVxdWlyZWQgPSByZXF1aXJlKCcuL19pbmhlcml0LWlmLXJlcXVpcmVkJyk7XG52YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mO1xudmFyIGdPUE4gPSByZXF1aXJlKCcuL19vYmplY3QtZ29wbicpLmY7XG52YXIgaXNSZWdFeHAgPSByZXF1aXJlKCcuL19pcy1yZWdleHAnKTtcbnZhciAkZmxhZ3MgPSByZXF1aXJlKCcuL19mbGFncycpO1xudmFyICRSZWdFeHAgPSBnbG9iYWwuUmVnRXhwO1xudmFyIEJhc2UgPSAkUmVnRXhwO1xudmFyIHByb3RvID0gJFJlZ0V4cC5wcm90b3R5cGU7XG52YXIgcmUxID0gL2EvZztcbnZhciByZTIgPSAvYS9nO1xuLy8gXCJuZXdcIiBjcmVhdGVzIGEgbmV3IG9iamVjdCwgb2xkIHdlYmtpdCBidWdneSBoZXJlXG52YXIgQ09SUkVDVF9ORVcgPSBuZXcgJFJlZ0V4cChyZTEpICE9PSByZTE7XG5cbmlmIChyZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpICYmICghQ09SUkVDVF9ORVcgfHwgcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJlMltyZXF1aXJlKCcuL193a3MnKSgnbWF0Y2gnKV0gPSBmYWxzZTtcbiAgLy8gUmVnRXhwIGNvbnN0cnVjdG9yIGNhbiBhbHRlciBmbGFncyBhbmQgSXNSZWdFeHAgd29ya3MgY29ycmVjdCB3aXRoIEBAbWF0Y2hcbiAgcmV0dXJuICRSZWdFeHAocmUxKSAhPSByZTEgfHwgJFJlZ0V4cChyZTIpID09IHJlMiB8fCAkUmVnRXhwKHJlMSwgJ2knKSAhPSAnL2EvaSc7XG59KSkpIHtcbiAgJFJlZ0V4cCA9IGZ1bmN0aW9uIFJlZ0V4cChwLCBmKSB7XG4gICAgdmFyIHRpUkUgPSB0aGlzIGluc3RhbmNlb2YgJFJlZ0V4cDtcbiAgICB2YXIgcGlSRSA9IGlzUmVnRXhwKHApO1xuICAgIHZhciBmaVUgPSBmID09PSB1bmRlZmluZWQ7XG4gICAgcmV0dXJuICF0aVJFICYmIHBpUkUgJiYgcC5jb25zdHJ1Y3RvciA9PT0gJFJlZ0V4cCAmJiBmaVUgPyBwXG4gICAgICA6IGluaGVyaXRJZlJlcXVpcmVkKENPUlJFQ1RfTkVXXG4gICAgICAgID8gbmV3IEJhc2UocGlSRSAmJiAhZmlVID8gcC5zb3VyY2UgOiBwLCBmKVxuICAgICAgICA6IEJhc2UoKHBpUkUgPSBwIGluc3RhbmNlb2YgJFJlZ0V4cCkgPyBwLnNvdXJjZSA6IHAsIHBpUkUgJiYgZmlVID8gJGZsYWdzLmNhbGwocCkgOiBmKVxuICAgICAgLCB0aVJFID8gdGhpcyA6IHByb3RvLCAkUmVnRXhwKTtcbiAgfTtcbiAgdmFyIHByb3h5ID0gZnVuY3Rpb24gKGtleSkge1xuICAgIGtleSBpbiAkUmVnRXhwIHx8IGRQKCRSZWdFeHAsIGtleSwge1xuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBCYXNlW2tleV07IH0sXG4gICAgICBzZXQ6IGZ1bmN0aW9uIChpdCkgeyBCYXNlW2tleV0gPSBpdDsgfVxuICAgIH0pO1xuICB9O1xuICBmb3IgKHZhciBrZXlzID0gZ09QTihCYXNlKSwgaSA9IDA7IGtleXMubGVuZ3RoID4gaTspIHByb3h5KGtleXNbaSsrXSk7XG4gIHByb3RvLmNvbnN0cnVjdG9yID0gJFJlZ0V4cDtcbiAgJFJlZ0V4cC5wcm90b3R5cGUgPSBwcm90bztcbiAgcmVxdWlyZSgnLi9fcmVkZWZpbmUnKShnbG9iYWwsICdSZWdFeHAnLCAkUmVnRXhwKTtcbn1cblxucmVxdWlyZSgnLi9fc2V0LXNwZWNpZXMnKSgnUmVnRXhwJyk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgcmVnZXhwRXhlYyA9IHJlcXVpcmUoJy4vX3JlZ2V4cC1leGVjJyk7XG5yZXF1aXJlKCcuL19leHBvcnQnKSh7XG4gIHRhcmdldDogJ1JlZ0V4cCcsXG4gIHByb3RvOiB0cnVlLFxuICBmb3JjZWQ6IHJlZ2V4cEV4ZWMgIT09IC8uLy5leGVjXG59LCB7XG4gIGV4ZWM6IHJlZ2V4cEV4ZWNcbn0pO1xuIiwiLy8gMjEuMi41LjMgZ2V0IFJlZ0V4cC5wcm90b3R5cGUuZmxhZ3MoKVxuaWYgKHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgLy4vZy5mbGFncyAhPSAnZycpIHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmYoUmVnRXhwLnByb3RvdHlwZSwgJ2ZsYWdzJywge1xuICBjb25maWd1cmFibGU6IHRydWUsXG4gIGdldDogcmVxdWlyZSgnLi9fZmxhZ3MnKVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgYWR2YW5jZVN0cmluZ0luZGV4ID0gcmVxdWlyZSgnLi9fYWR2YW5jZS1zdHJpbmctaW5kZXgnKTtcbnZhciByZWdFeHBFeGVjID0gcmVxdWlyZSgnLi9fcmVnZXhwLWV4ZWMtYWJzdHJhY3QnKTtcblxuLy8gQEBtYXRjaCBsb2dpY1xucmVxdWlyZSgnLi9fZml4LXJlLXdrcycpKCdtYXRjaCcsIDEsIGZ1bmN0aW9uIChkZWZpbmVkLCBNQVRDSCwgJG1hdGNoLCBtYXliZUNhbGxOYXRpdmUpIHtcbiAgcmV0dXJuIFtcbiAgICAvLyBgU3RyaW5nLnByb3RvdHlwZS5tYXRjaGAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5tYXRjaFxuICAgIGZ1bmN0aW9uIG1hdGNoKHJlZ2V4cCkge1xuICAgICAgdmFyIE8gPSBkZWZpbmVkKHRoaXMpO1xuICAgICAgdmFyIGZuID0gcmVnZXhwID09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHJlZ2V4cFtNQVRDSF07XG4gICAgICByZXR1cm4gZm4gIT09IHVuZGVmaW5lZCA/IGZuLmNhbGwocmVnZXhwLCBPKSA6IG5ldyBSZWdFeHAocmVnZXhwKVtNQVRDSF0oU3RyaW5nKE8pKTtcbiAgICB9LFxuICAgIC8vIGBSZWdFeHAucHJvdG90eXBlW0BAbWF0Y2hdYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1yZWdleHAucHJvdG90eXBlLUBAbWF0Y2hcbiAgICBmdW5jdGlvbiAocmVnZXhwKSB7XG4gICAgICB2YXIgcmVzID0gbWF5YmVDYWxsTmF0aXZlKCRtYXRjaCwgcmVnZXhwLCB0aGlzKTtcbiAgICAgIGlmIChyZXMuZG9uZSkgcmV0dXJuIHJlcy52YWx1ZTtcbiAgICAgIHZhciByeCA9IGFuT2JqZWN0KHJlZ2V4cCk7XG4gICAgICB2YXIgUyA9IFN0cmluZyh0aGlzKTtcbiAgICAgIGlmICghcnguZ2xvYmFsKSByZXR1cm4gcmVnRXhwRXhlYyhyeCwgUyk7XG4gICAgICB2YXIgZnVsbFVuaWNvZGUgPSByeC51bmljb2RlO1xuICAgICAgcngubGFzdEluZGV4ID0gMDtcbiAgICAgIHZhciBBID0gW107XG4gICAgICB2YXIgbiA9IDA7XG4gICAgICB2YXIgcmVzdWx0O1xuICAgICAgd2hpbGUgKChyZXN1bHQgPSByZWdFeHBFeGVjKHJ4LCBTKSkgIT09IG51bGwpIHtcbiAgICAgICAgdmFyIG1hdGNoU3RyID0gU3RyaW5nKHJlc3VsdFswXSk7XG4gICAgICAgIEFbbl0gPSBtYXRjaFN0cjtcbiAgICAgICAgaWYgKG1hdGNoU3RyID09PSAnJykgcngubGFzdEluZGV4ID0gYWR2YW5jZVN0cmluZ0luZGV4KFMsIHRvTGVuZ3RoKHJ4Lmxhc3RJbmRleCksIGZ1bGxVbmljb2RlKTtcbiAgICAgICAgbisrO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG4gPT09IDAgPyBudWxsIDogQTtcbiAgICB9XG4gIF07XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciBhZHZhbmNlU3RyaW5nSW5kZXggPSByZXF1aXJlKCcuL19hZHZhbmNlLXN0cmluZy1pbmRleCcpO1xudmFyIHJlZ0V4cEV4ZWMgPSByZXF1aXJlKCcuL19yZWdleHAtZXhlYy1hYnN0cmFjdCcpO1xudmFyIG1heCA9IE1hdGgubWF4O1xudmFyIG1pbiA9IE1hdGgubWluO1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcbnZhciBTVUJTVElUVVRJT05fU1lNQk9MUyA9IC9cXCQoWyQmYCddfFxcZFxcZD98PFtePl0qPikvZztcbnZhciBTVUJTVElUVVRJT05fU1lNQk9MU19OT19OQU1FRCA9IC9cXCQoWyQmYCddfFxcZFxcZD8pL2c7XG5cbnZhciBtYXliZVRvU3RyaW5nID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCA9PT0gdW5kZWZpbmVkID8gaXQgOiBTdHJpbmcoaXQpO1xufTtcblxuLy8gQEByZXBsYWNlIGxvZ2ljXG5yZXF1aXJlKCcuL19maXgtcmUtd2tzJykoJ3JlcGxhY2UnLCAyLCBmdW5jdGlvbiAoZGVmaW5lZCwgUkVQTEFDRSwgJHJlcGxhY2UsIG1heWJlQ2FsbE5hdGl2ZSkge1xuICByZXR1cm4gW1xuICAgIC8vIGBTdHJpbmcucHJvdG90eXBlLnJlcGxhY2VgIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUucmVwbGFjZVxuICAgIGZ1bmN0aW9uIHJlcGxhY2Uoc2VhcmNoVmFsdWUsIHJlcGxhY2VWYWx1ZSkge1xuICAgICAgdmFyIE8gPSBkZWZpbmVkKHRoaXMpO1xuICAgICAgdmFyIGZuID0gc2VhcmNoVmFsdWUgPT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogc2VhcmNoVmFsdWVbUkVQTEFDRV07XG4gICAgICByZXR1cm4gZm4gIT09IHVuZGVmaW5lZFxuICAgICAgICA/IGZuLmNhbGwoc2VhcmNoVmFsdWUsIE8sIHJlcGxhY2VWYWx1ZSlcbiAgICAgICAgOiAkcmVwbGFjZS5jYWxsKFN0cmluZyhPKSwgc2VhcmNoVmFsdWUsIHJlcGxhY2VWYWx1ZSk7XG4gICAgfSxcbiAgICAvLyBgUmVnRXhwLnByb3RvdHlwZVtAQHJlcGxhY2VdYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1yZWdleHAucHJvdG90eXBlLUBAcmVwbGFjZVxuICAgIGZ1bmN0aW9uIChyZWdleHAsIHJlcGxhY2VWYWx1ZSkge1xuICAgICAgdmFyIHJlcyA9IG1heWJlQ2FsbE5hdGl2ZSgkcmVwbGFjZSwgcmVnZXhwLCB0aGlzLCByZXBsYWNlVmFsdWUpO1xuICAgICAgaWYgKHJlcy5kb25lKSByZXR1cm4gcmVzLnZhbHVlO1xuXG4gICAgICB2YXIgcnggPSBhbk9iamVjdChyZWdleHApO1xuICAgICAgdmFyIFMgPSBTdHJpbmcodGhpcyk7XG4gICAgICB2YXIgZnVuY3Rpb25hbFJlcGxhY2UgPSB0eXBlb2YgcmVwbGFjZVZhbHVlID09PSAnZnVuY3Rpb24nO1xuICAgICAgaWYgKCFmdW5jdGlvbmFsUmVwbGFjZSkgcmVwbGFjZVZhbHVlID0gU3RyaW5nKHJlcGxhY2VWYWx1ZSk7XG4gICAgICB2YXIgZ2xvYmFsID0gcnguZ2xvYmFsO1xuICAgICAgaWYgKGdsb2JhbCkge1xuICAgICAgICB2YXIgZnVsbFVuaWNvZGUgPSByeC51bmljb2RlO1xuICAgICAgICByeC5sYXN0SW5kZXggPSAwO1xuICAgICAgfVxuICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSByZWdFeHBFeGVjKHJ4LCBTKTtcbiAgICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCkgYnJlYWs7XG4gICAgICAgIHJlc3VsdHMucHVzaChyZXN1bHQpO1xuICAgICAgICBpZiAoIWdsb2JhbCkgYnJlYWs7XG4gICAgICAgIHZhciBtYXRjaFN0ciA9IFN0cmluZyhyZXN1bHRbMF0pO1xuICAgICAgICBpZiAobWF0Y2hTdHIgPT09ICcnKSByeC5sYXN0SW5kZXggPSBhZHZhbmNlU3RyaW5nSW5kZXgoUywgdG9MZW5ndGgocngubGFzdEluZGV4KSwgZnVsbFVuaWNvZGUpO1xuICAgICAgfVxuICAgICAgdmFyIGFjY3VtdWxhdGVkUmVzdWx0ID0gJyc7XG4gICAgICB2YXIgbmV4dFNvdXJjZVBvc2l0aW9uID0gMDtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVzdWx0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICByZXN1bHQgPSByZXN1bHRzW2ldO1xuICAgICAgICB2YXIgbWF0Y2hlZCA9IFN0cmluZyhyZXN1bHRbMF0pO1xuICAgICAgICB2YXIgcG9zaXRpb24gPSBtYXgobWluKHRvSW50ZWdlcihyZXN1bHQuaW5kZXgpLCBTLmxlbmd0aCksIDApO1xuICAgICAgICB2YXIgY2FwdHVyZXMgPSBbXTtcbiAgICAgICAgLy8gTk9URTogVGhpcyBpcyBlcXVpdmFsZW50IHRvXG4gICAgICAgIC8vICAgY2FwdHVyZXMgPSByZXN1bHQuc2xpY2UoMSkubWFwKG1heWJlVG9TdHJpbmcpXG4gICAgICAgIC8vIGJ1dCBmb3Igc29tZSByZWFzb24gYG5hdGl2ZVNsaWNlLmNhbGwocmVzdWx0LCAxLCByZXN1bHQubGVuZ3RoKWAgKGNhbGxlZCBpblxuICAgICAgICAvLyB0aGUgc2xpY2UgcG9seWZpbGwgd2hlbiBzbGljaW5nIG5hdGl2ZSBhcnJheXMpIFwiZG9lc24ndCB3b3JrXCIgaW4gc2FmYXJpIDkgYW5kXG4gICAgICAgIC8vIGNhdXNlcyBhIGNyYXNoIChodHRwczovL3Bhc3RlYmluLmNvbS9OMjFRemVRQSkgd2hlbiB0cnlpbmcgdG8gZGVidWcgaXQuXG4gICAgICAgIGZvciAodmFyIGogPSAxOyBqIDwgcmVzdWx0Lmxlbmd0aDsgaisrKSBjYXB0dXJlcy5wdXNoKG1heWJlVG9TdHJpbmcocmVzdWx0W2pdKSk7XG4gICAgICAgIHZhciBuYW1lZENhcHR1cmVzID0gcmVzdWx0Lmdyb3VwcztcbiAgICAgICAgaWYgKGZ1bmN0aW9uYWxSZXBsYWNlKSB7XG4gICAgICAgICAgdmFyIHJlcGxhY2VyQXJncyA9IFttYXRjaGVkXS5jb25jYXQoY2FwdHVyZXMsIHBvc2l0aW9uLCBTKTtcbiAgICAgICAgICBpZiAobmFtZWRDYXB0dXJlcyAhPT0gdW5kZWZpbmVkKSByZXBsYWNlckFyZ3MucHVzaChuYW1lZENhcHR1cmVzKTtcbiAgICAgICAgICB2YXIgcmVwbGFjZW1lbnQgPSBTdHJpbmcocmVwbGFjZVZhbHVlLmFwcGx5KHVuZGVmaW5lZCwgcmVwbGFjZXJBcmdzKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVwbGFjZW1lbnQgPSBnZXRTdWJzdGl0dXRpb24obWF0Y2hlZCwgUywgcG9zaXRpb24sIGNhcHR1cmVzLCBuYW1lZENhcHR1cmVzLCByZXBsYWNlVmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwb3NpdGlvbiA+PSBuZXh0U291cmNlUG9zaXRpb24pIHtcbiAgICAgICAgICBhY2N1bXVsYXRlZFJlc3VsdCArPSBTLnNsaWNlKG5leHRTb3VyY2VQb3NpdGlvbiwgcG9zaXRpb24pICsgcmVwbGFjZW1lbnQ7XG4gICAgICAgICAgbmV4dFNvdXJjZVBvc2l0aW9uID0gcG9zaXRpb24gKyBtYXRjaGVkLmxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGFjY3VtdWxhdGVkUmVzdWx0ICsgUy5zbGljZShuZXh0U291cmNlUG9zaXRpb24pO1xuICAgIH1cbiAgXTtcblxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWdldHN1YnN0aXR1dGlvblxuICBmdW5jdGlvbiBnZXRTdWJzdGl0dXRpb24obWF0Y2hlZCwgc3RyLCBwb3NpdGlvbiwgY2FwdHVyZXMsIG5hbWVkQ2FwdHVyZXMsIHJlcGxhY2VtZW50KSB7XG4gICAgdmFyIHRhaWxQb3MgPSBwb3NpdGlvbiArIG1hdGNoZWQubGVuZ3RoO1xuICAgIHZhciBtID0gY2FwdHVyZXMubGVuZ3RoO1xuICAgIHZhciBzeW1ib2xzID0gU1VCU1RJVFVUSU9OX1NZTUJPTFNfTk9fTkFNRUQ7XG4gICAgaWYgKG5hbWVkQ2FwdHVyZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgbmFtZWRDYXB0dXJlcyA9IHRvT2JqZWN0KG5hbWVkQ2FwdHVyZXMpO1xuICAgICAgc3ltYm9scyA9IFNVQlNUSVRVVElPTl9TWU1CT0xTO1xuICAgIH1cbiAgICByZXR1cm4gJHJlcGxhY2UuY2FsbChyZXBsYWNlbWVudCwgc3ltYm9scywgZnVuY3Rpb24gKG1hdGNoLCBjaCkge1xuICAgICAgdmFyIGNhcHR1cmU7XG4gICAgICBzd2l0Y2ggKGNoLmNoYXJBdCgwKSkge1xuICAgICAgICBjYXNlICckJzogcmV0dXJuICckJztcbiAgICAgICAgY2FzZSAnJic6IHJldHVybiBtYXRjaGVkO1xuICAgICAgICBjYXNlICdgJzogcmV0dXJuIHN0ci5zbGljZSgwLCBwb3NpdGlvbik7XG4gICAgICAgIGNhc2UgXCInXCI6IHJldHVybiBzdHIuc2xpY2UodGFpbFBvcyk7XG4gICAgICAgIGNhc2UgJzwnOlxuICAgICAgICAgIGNhcHR1cmUgPSBuYW1lZENhcHR1cmVzW2NoLnNsaWNlKDEsIC0xKV07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6IC8vIFxcZFxcZD9cbiAgICAgICAgICB2YXIgbiA9ICtjaDtcbiAgICAgICAgICBpZiAobiA9PT0gMCkgcmV0dXJuIG1hdGNoO1xuICAgICAgICAgIGlmIChuID4gbSkge1xuICAgICAgICAgICAgdmFyIGYgPSBmbG9vcihuIC8gMTApO1xuICAgICAgICAgICAgaWYgKGYgPT09IDApIHJldHVybiBtYXRjaDtcbiAgICAgICAgICAgIGlmIChmIDw9IG0pIHJldHVybiBjYXB0dXJlc1tmIC0gMV0gPT09IHVuZGVmaW5lZCA/IGNoLmNoYXJBdCgxKSA6IGNhcHR1cmVzW2YgLSAxXSArIGNoLmNoYXJBdCgxKTtcbiAgICAgICAgICAgIHJldHVybiBtYXRjaDtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FwdHVyZSA9IGNhcHR1cmVzW24gLSAxXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjYXB0dXJlID09PSB1bmRlZmluZWQgPyAnJyA6IGNhcHR1cmU7XG4gICAgfSk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBzYW1lVmFsdWUgPSByZXF1aXJlKCcuL19zYW1lLXZhbHVlJyk7XG52YXIgcmVnRXhwRXhlYyA9IHJlcXVpcmUoJy4vX3JlZ2V4cC1leGVjLWFic3RyYWN0Jyk7XG5cbi8vIEBAc2VhcmNoIGxvZ2ljXG5yZXF1aXJlKCcuL19maXgtcmUtd2tzJykoJ3NlYXJjaCcsIDEsIGZ1bmN0aW9uIChkZWZpbmVkLCBTRUFSQ0gsICRzZWFyY2gsIG1heWJlQ2FsbE5hdGl2ZSkge1xuICByZXR1cm4gW1xuICAgIC8vIGBTdHJpbmcucHJvdG90eXBlLnNlYXJjaGAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5zZWFyY2hcbiAgICBmdW5jdGlvbiBzZWFyY2gocmVnZXhwKSB7XG4gICAgICB2YXIgTyA9IGRlZmluZWQodGhpcyk7XG4gICAgICB2YXIgZm4gPSByZWdleHAgPT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogcmVnZXhwW1NFQVJDSF07XG4gICAgICByZXR1cm4gZm4gIT09IHVuZGVmaW5lZCA/IGZuLmNhbGwocmVnZXhwLCBPKSA6IG5ldyBSZWdFeHAocmVnZXhwKVtTRUFSQ0hdKFN0cmluZyhPKSk7XG4gICAgfSxcbiAgICAvLyBgUmVnRXhwLnByb3RvdHlwZVtAQHNlYXJjaF1gIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXJlZ2V4cC5wcm90b3R5cGUtQEBzZWFyY2hcbiAgICBmdW5jdGlvbiAocmVnZXhwKSB7XG4gICAgICB2YXIgcmVzID0gbWF5YmVDYWxsTmF0aXZlKCRzZWFyY2gsIHJlZ2V4cCwgdGhpcyk7XG4gICAgICBpZiAocmVzLmRvbmUpIHJldHVybiByZXMudmFsdWU7XG4gICAgICB2YXIgcnggPSBhbk9iamVjdChyZWdleHApO1xuICAgICAgdmFyIFMgPSBTdHJpbmcodGhpcyk7XG4gICAgICB2YXIgcHJldmlvdXNMYXN0SW5kZXggPSByeC5sYXN0SW5kZXg7XG4gICAgICBpZiAoIXNhbWVWYWx1ZShwcmV2aW91c0xhc3RJbmRleCwgMCkpIHJ4Lmxhc3RJbmRleCA9IDA7XG4gICAgICB2YXIgcmVzdWx0ID0gcmVnRXhwRXhlYyhyeCwgUyk7XG4gICAgICBpZiAoIXNhbWVWYWx1ZShyeC5sYXN0SW5kZXgsIHByZXZpb3VzTGFzdEluZGV4KSkgcngubGFzdEluZGV4ID0gcHJldmlvdXNMYXN0SW5kZXg7XG4gICAgICByZXR1cm4gcmVzdWx0ID09PSBudWxsID8gLTEgOiByZXN1bHQuaW5kZXg7XG4gICAgfVxuICBdO1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBpc1JlZ0V4cCA9IHJlcXVpcmUoJy4vX2lzLXJlZ2V4cCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgc3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi9fc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xudmFyIGFkdmFuY2VTdHJpbmdJbmRleCA9IHJlcXVpcmUoJy4vX2FkdmFuY2Utc3RyaW5nLWluZGV4Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBjYWxsUmVnRXhwRXhlYyA9IHJlcXVpcmUoJy4vX3JlZ2V4cC1leGVjLWFic3RyYWN0Jyk7XG52YXIgcmVnZXhwRXhlYyA9IHJlcXVpcmUoJy4vX3JlZ2V4cC1leGVjJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyICRtaW4gPSBNYXRoLm1pbjtcbnZhciAkcHVzaCA9IFtdLnB1c2g7XG52YXIgJFNQTElUID0gJ3NwbGl0JztcbnZhciBMRU5HVEggPSAnbGVuZ3RoJztcbnZhciBMQVNUX0lOREVYID0gJ2xhc3RJbmRleCc7XG52YXIgTUFYX1VJTlQzMiA9IDB4ZmZmZmZmZmY7XG5cbi8vIGJhYmVsLW1pbmlmeSB0cmFuc3BpbGVzIFJlZ0V4cCgneCcsICd5JykgLT4gL3gveSBhbmQgaXQgY2F1c2VzIFN5bnRheEVycm9yXG52YXIgU1VQUE9SVFNfWSA9ICFmYWlscyhmdW5jdGlvbiAoKSB7IFJlZ0V4cChNQVhfVUlOVDMyLCAneScpOyB9KTtcblxuLy8gQEBzcGxpdCBsb2dpY1xucmVxdWlyZSgnLi9fZml4LXJlLXdrcycpKCdzcGxpdCcsIDIsIGZ1bmN0aW9uIChkZWZpbmVkLCBTUExJVCwgJHNwbGl0LCBtYXliZUNhbGxOYXRpdmUpIHtcbiAgdmFyIGludGVybmFsU3BsaXQ7XG4gIGlmIChcbiAgICAnYWJiYydbJFNQTElUXSgvKGIpKi8pWzFdID09ICdjJyB8fFxuICAgICd0ZXN0J1skU1BMSVRdKC8oPzopLywgLTEpW0xFTkdUSF0gIT0gNCB8fFxuICAgICdhYidbJFNQTElUXSgvKD86YWIpKi8pW0xFTkdUSF0gIT0gMiB8fFxuICAgICcuJ1skU1BMSVRdKC8oLj8pKC4/KS8pW0xFTkdUSF0gIT0gNCB8fFxuICAgICcuJ1skU1BMSVRdKC8oKSgpLylbTEVOR1RIXSA+IDEgfHxcbiAgICAnJ1skU1BMSVRdKC8uPy8pW0xFTkdUSF1cbiAgKSB7XG4gICAgLy8gYmFzZWQgb24gZXM1LXNoaW0gaW1wbGVtZW50YXRpb24sIG5lZWQgdG8gcmV3b3JrIGl0XG4gICAgaW50ZXJuYWxTcGxpdCA9IGZ1bmN0aW9uIChzZXBhcmF0b3IsIGxpbWl0KSB7XG4gICAgICB2YXIgc3RyaW5nID0gU3RyaW5nKHRoaXMpO1xuICAgICAgaWYgKHNlcGFyYXRvciA9PT0gdW5kZWZpbmVkICYmIGxpbWl0ID09PSAwKSByZXR1cm4gW107XG4gICAgICAvLyBJZiBgc2VwYXJhdG9yYCBpcyBub3QgYSByZWdleCwgdXNlIG5hdGl2ZSBzcGxpdFxuICAgICAgaWYgKCFpc1JlZ0V4cChzZXBhcmF0b3IpKSByZXR1cm4gJHNwbGl0LmNhbGwoc3RyaW5nLCBzZXBhcmF0b3IsIGxpbWl0KTtcbiAgICAgIHZhciBvdXRwdXQgPSBbXTtcbiAgICAgIHZhciBmbGFncyA9IChzZXBhcmF0b3IuaWdub3JlQ2FzZSA/ICdpJyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAoc2VwYXJhdG9yLm11bHRpbGluZSA/ICdtJyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAoc2VwYXJhdG9yLnVuaWNvZGUgPyAndScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHNlcGFyYXRvci5zdGlja3kgPyAneScgOiAnJyk7XG4gICAgICB2YXIgbGFzdExhc3RJbmRleCA9IDA7XG4gICAgICB2YXIgc3BsaXRMaW1pdCA9IGxpbWl0ID09PSB1bmRlZmluZWQgPyBNQVhfVUlOVDMyIDogbGltaXQgPj4+IDA7XG4gICAgICAvLyBNYWtlIGBnbG9iYWxgIGFuZCBhdm9pZCBgbGFzdEluZGV4YCBpc3N1ZXMgYnkgd29ya2luZyB3aXRoIGEgY29weVxuICAgICAgdmFyIHNlcGFyYXRvckNvcHkgPSBuZXcgUmVnRXhwKHNlcGFyYXRvci5zb3VyY2UsIGZsYWdzICsgJ2cnKTtcbiAgICAgIHZhciBtYXRjaCwgbGFzdEluZGV4LCBsYXN0TGVuZ3RoO1xuICAgICAgd2hpbGUgKG1hdGNoID0gcmVnZXhwRXhlYy5jYWxsKHNlcGFyYXRvckNvcHksIHN0cmluZykpIHtcbiAgICAgICAgbGFzdEluZGV4ID0gc2VwYXJhdG9yQ29weVtMQVNUX0lOREVYXTtcbiAgICAgICAgaWYgKGxhc3RJbmRleCA+IGxhc3RMYXN0SW5kZXgpIHtcbiAgICAgICAgICBvdXRwdXQucHVzaChzdHJpbmcuc2xpY2UobGFzdExhc3RJbmRleCwgbWF0Y2guaW5kZXgpKTtcbiAgICAgICAgICBpZiAobWF0Y2hbTEVOR1RIXSA+IDEgJiYgbWF0Y2guaW5kZXggPCBzdHJpbmdbTEVOR1RIXSkgJHB1c2guYXBwbHkob3V0cHV0LCBtYXRjaC5zbGljZSgxKSk7XG4gICAgICAgICAgbGFzdExlbmd0aCA9IG1hdGNoWzBdW0xFTkdUSF07XG4gICAgICAgICAgbGFzdExhc3RJbmRleCA9IGxhc3RJbmRleDtcbiAgICAgICAgICBpZiAob3V0cHV0W0xFTkdUSF0gPj0gc3BsaXRMaW1pdCkgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNlcGFyYXRvckNvcHlbTEFTVF9JTkRFWF0gPT09IG1hdGNoLmluZGV4KSBzZXBhcmF0b3JDb3B5W0xBU1RfSU5ERVhdKys7IC8vIEF2b2lkIGFuIGluZmluaXRlIGxvb3BcbiAgICAgIH1cbiAgICAgIGlmIChsYXN0TGFzdEluZGV4ID09PSBzdHJpbmdbTEVOR1RIXSkge1xuICAgICAgICBpZiAobGFzdExlbmd0aCB8fCAhc2VwYXJhdG9yQ29weS50ZXN0KCcnKSkgb3V0cHV0LnB1c2goJycpO1xuICAgICAgfSBlbHNlIG91dHB1dC5wdXNoKHN0cmluZy5zbGljZShsYXN0TGFzdEluZGV4KSk7XG4gICAgICByZXR1cm4gb3V0cHV0W0xFTkdUSF0gPiBzcGxpdExpbWl0ID8gb3V0cHV0LnNsaWNlKDAsIHNwbGl0TGltaXQpIDogb3V0cHV0O1xuICAgIH07XG4gIC8vIENoYWtyYSwgVjhcbiAgfSBlbHNlIGlmICgnMCdbJFNQTElUXSh1bmRlZmluZWQsIDApW0xFTkdUSF0pIHtcbiAgICBpbnRlcm5hbFNwbGl0ID0gZnVuY3Rpb24gKHNlcGFyYXRvciwgbGltaXQpIHtcbiAgICAgIHJldHVybiBzZXBhcmF0b3IgPT09IHVuZGVmaW5lZCAmJiBsaW1pdCA9PT0gMCA/IFtdIDogJHNwbGl0LmNhbGwodGhpcywgc2VwYXJhdG9yLCBsaW1pdCk7XG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBpbnRlcm5hbFNwbGl0ID0gJHNwbGl0O1xuICB9XG5cbiAgcmV0dXJuIFtcbiAgICAvLyBgU3RyaW5nLnByb3RvdHlwZS5zcGxpdGAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5zcGxpdFxuICAgIGZ1bmN0aW9uIHNwbGl0KHNlcGFyYXRvciwgbGltaXQpIHtcbiAgICAgIHZhciBPID0gZGVmaW5lZCh0aGlzKTtcbiAgICAgIHZhciBzcGxpdHRlciA9IHNlcGFyYXRvciA9PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBzZXBhcmF0b3JbU1BMSVRdO1xuICAgICAgcmV0dXJuIHNwbGl0dGVyICE9PSB1bmRlZmluZWRcbiAgICAgICAgPyBzcGxpdHRlci5jYWxsKHNlcGFyYXRvciwgTywgbGltaXQpXG4gICAgICAgIDogaW50ZXJuYWxTcGxpdC5jYWxsKFN0cmluZyhPKSwgc2VwYXJhdG9yLCBsaW1pdCk7XG4gICAgfSxcbiAgICAvLyBgUmVnRXhwLnByb3RvdHlwZVtAQHNwbGl0XWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtcmVnZXhwLnByb3RvdHlwZS1AQHNwbGl0XG4gICAgLy9cbiAgICAvLyBOT1RFOiBUaGlzIGNhbm5vdCBiZSBwcm9wZXJseSBwb2x5ZmlsbGVkIGluIGVuZ2luZXMgdGhhdCBkb24ndCBzdXBwb3J0XG4gICAgLy8gdGhlICd5JyBmbGFnLlxuICAgIGZ1bmN0aW9uIChyZWdleHAsIGxpbWl0KSB7XG4gICAgICB2YXIgcmVzID0gbWF5YmVDYWxsTmF0aXZlKGludGVybmFsU3BsaXQsIHJlZ2V4cCwgdGhpcywgbGltaXQsIGludGVybmFsU3BsaXQgIT09ICRzcGxpdCk7XG4gICAgICBpZiAocmVzLmRvbmUpIHJldHVybiByZXMudmFsdWU7XG5cbiAgICAgIHZhciByeCA9IGFuT2JqZWN0KHJlZ2V4cCk7XG4gICAgICB2YXIgUyA9IFN0cmluZyh0aGlzKTtcbiAgICAgIHZhciBDID0gc3BlY2llc0NvbnN0cnVjdG9yKHJ4LCBSZWdFeHApO1xuXG4gICAgICB2YXIgdW5pY29kZU1hdGNoaW5nID0gcngudW5pY29kZTtcbiAgICAgIHZhciBmbGFncyA9IChyeC5pZ25vcmVDYXNlID8gJ2knIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChyeC5tdWx0aWxpbmUgPyAnbScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHJ4LnVuaWNvZGUgPyAndScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKFNVUFBPUlRTX1kgPyAneScgOiAnZycpO1xuXG4gICAgICAvLyBeKD8gKyByeCArICkgaXMgbmVlZGVkLCBpbiBjb21iaW5hdGlvbiB3aXRoIHNvbWUgUyBzbGljaW5nLCB0b1xuICAgICAgLy8gc2ltdWxhdGUgdGhlICd5JyBmbGFnLlxuICAgICAgdmFyIHNwbGl0dGVyID0gbmV3IEMoU1VQUE9SVFNfWSA/IHJ4IDogJ14oPzonICsgcnguc291cmNlICsgJyknLCBmbGFncyk7XG4gICAgICB2YXIgbGltID0gbGltaXQgPT09IHVuZGVmaW5lZCA/IE1BWF9VSU5UMzIgOiBsaW1pdCA+Pj4gMDtcbiAgICAgIGlmIChsaW0gPT09IDApIHJldHVybiBbXTtcbiAgICAgIGlmIChTLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGNhbGxSZWdFeHBFeGVjKHNwbGl0dGVyLCBTKSA9PT0gbnVsbCA/IFtTXSA6IFtdO1xuICAgICAgdmFyIHAgPSAwO1xuICAgICAgdmFyIHEgPSAwO1xuICAgICAgdmFyIEEgPSBbXTtcbiAgICAgIHdoaWxlIChxIDwgUy5sZW5ndGgpIHtcbiAgICAgICAgc3BsaXR0ZXIubGFzdEluZGV4ID0gU1VQUE9SVFNfWSA/IHEgOiAwO1xuICAgICAgICB2YXIgeiA9IGNhbGxSZWdFeHBFeGVjKHNwbGl0dGVyLCBTVVBQT1JUU19ZID8gUyA6IFMuc2xpY2UocSkpO1xuICAgICAgICB2YXIgZTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHogPT09IG51bGwgfHxcbiAgICAgICAgICAoZSA9ICRtaW4odG9MZW5ndGgoc3BsaXR0ZXIubGFzdEluZGV4ICsgKFNVUFBPUlRTX1kgPyAwIDogcSkpLCBTLmxlbmd0aCkpID09PSBwXG4gICAgICAgICkge1xuICAgICAgICAgIHEgPSBhZHZhbmNlU3RyaW5nSW5kZXgoUywgcSwgdW5pY29kZU1hdGNoaW5nKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBBLnB1c2goUy5zbGljZShwLCBxKSk7XG4gICAgICAgICAgaWYgKEEubGVuZ3RoID09PSBsaW0pIHJldHVybiBBO1xuICAgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDw9IHoubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICAgICAgICBBLnB1c2goeltpXSk7XG4gICAgICAgICAgICBpZiAoQS5sZW5ndGggPT09IGxpbSkgcmV0dXJuIEE7XG4gICAgICAgICAgfVxuICAgICAgICAgIHEgPSBwID0gZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgQS5wdXNoKFMuc2xpY2UocCkpO1xuICAgICAgcmV0dXJuIEE7XG4gICAgfVxuICBdO1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuL2VzNi5yZWdleHAuZmxhZ3MnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyICRmbGFncyA9IHJlcXVpcmUoJy4vX2ZsYWdzJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpO1xudmFyIFRPX1NUUklORyA9ICd0b1N0cmluZyc7XG52YXIgJHRvU3RyaW5nID0gLy4vW1RPX1NUUklOR107XG5cbnZhciBkZWZpbmUgPSBmdW5jdGlvbiAoZm4pIHtcbiAgcmVxdWlyZSgnLi9fcmVkZWZpbmUnKShSZWdFeHAucHJvdG90eXBlLCBUT19TVFJJTkcsIGZuLCB0cnVlKTtcbn07XG5cbi8vIDIxLjIuNS4xNCBSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nKClcbmlmIChyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHsgcmV0dXJuICR0b1N0cmluZy5jYWxsKHsgc291cmNlOiAnYScsIGZsYWdzOiAnYicgfSkgIT0gJy9hL2InOyB9KSkge1xuICBkZWZpbmUoZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgdmFyIFIgPSBhbk9iamVjdCh0aGlzKTtcbiAgICByZXR1cm4gJy8nLmNvbmNhdChSLnNvdXJjZSwgJy8nLFxuICAgICAgJ2ZsYWdzJyBpbiBSID8gUi5mbGFncyA6ICFERVNDUklQVE9SUyAmJiBSIGluc3RhbmNlb2YgUmVnRXhwID8gJGZsYWdzLmNhbGwoUikgOiB1bmRlZmluZWQpO1xuICB9KTtcbi8vIEZGNDQtIFJlZ0V4cCN0b1N0cmluZyBoYXMgYSB3cm9uZyBuYW1lXG59IGVsc2UgaWYgKCR0b1N0cmluZy5uYW1lICE9IFRPX1NUUklORykge1xuICBkZWZpbmUoZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuICR0b1N0cmluZy5jYWxsKHRoaXMpO1xuICB9KTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcbnZhciBzdHJvbmcgPSByZXF1aXJlKCcuL19jb2xsZWN0aW9uLXN0cm9uZycpO1xudmFyIHZhbGlkYXRlID0gcmVxdWlyZSgnLi9fdmFsaWRhdGUtY29sbGVjdGlvbicpO1xudmFyIFNFVCA9ICdTZXQnO1xuXG4vLyAyMy4yIFNldCBPYmplY3RzXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24nKShTRVQsIGZ1bmN0aW9uIChnZXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIFNldCgpIHsgcmV0dXJuIGdldCh0aGlzLCBhcmd1bWVudHMubGVuZ3RoID4gMCA/IGFyZ3VtZW50c1swXSA6IHVuZGVmaW5lZCk7IH07XG59LCB7XG4gIC8vIDIzLjIuMy4xIFNldC5wcm90b3R5cGUuYWRkKHZhbHVlKVxuICBhZGQ6IGZ1bmN0aW9uIGFkZCh2YWx1ZSkge1xuICAgIHJldHVybiBzdHJvbmcuZGVmKHZhbGlkYXRlKHRoaXMsIFNFVCksIHZhbHVlID0gdmFsdWUgPT09IDAgPyAwIDogdmFsdWUsIHZhbHVlKTtcbiAgfVxufSwgc3Ryb25nKTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjIgU3RyaW5nLnByb3RvdHlwZS5hbmNob3IobmFtZSlcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ2FuY2hvcicsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBhbmNob3IobmFtZSkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdhJywgJ25hbWUnLCBuYW1lKTtcbiAgfTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuMyBTdHJpbmcucHJvdG90eXBlLmJpZygpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdiaWcnLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gYmlnKCkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdiaWcnLCAnJywgJycpO1xuICB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy40IFN0cmluZy5wcm90b3R5cGUuYmxpbmsoKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnYmxpbmsnLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gYmxpbmsoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ2JsaW5rJywgJycsICcnKTtcbiAgfTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuNSBTdHJpbmcucHJvdG90eXBlLmJvbGQoKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnYm9sZCcsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBib2xkKCkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdiJywgJycsICcnKTtcbiAgfTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkYXQgPSByZXF1aXJlKCcuL19zdHJpbmctYXQnKShmYWxzZSk7XG4kZXhwb3J0KCRleHBvcnQuUCwgJ1N0cmluZycsIHtcbiAgLy8gMjEuMS4zLjMgU3RyaW5nLnByb3RvdHlwZS5jb2RlUG9pbnRBdChwb3MpXG4gIGNvZGVQb2ludEF0OiBmdW5jdGlvbiBjb2RlUG9pbnRBdChwb3MpIHtcbiAgICByZXR1cm4gJGF0KHRoaXMsIHBvcyk7XG4gIH1cbn0pO1xuIiwiLy8gMjEuMS4zLjYgU3RyaW5nLnByb3RvdHlwZS5lbmRzV2l0aChzZWFyY2hTdHJpbmcgWywgZW5kUG9zaXRpb25dKVxuJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGNvbnRleHQgPSByZXF1aXJlKCcuL19zdHJpbmctY29udGV4dCcpO1xudmFyIEVORFNfV0lUSCA9ICdlbmRzV2l0aCc7XG52YXIgJGVuZHNXaXRoID0gJydbRU5EU19XSVRIXTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiByZXF1aXJlKCcuL19mYWlscy1pcy1yZWdleHAnKShFTkRTX1dJVEgpLCAnU3RyaW5nJywge1xuICBlbmRzV2l0aDogZnVuY3Rpb24gZW5kc1dpdGgoc2VhcmNoU3RyaW5nIC8qICwgZW5kUG9zaXRpb24gPSBAbGVuZ3RoICovKSB7XG4gICAgdmFyIHRoYXQgPSBjb250ZXh0KHRoaXMsIHNlYXJjaFN0cmluZywgRU5EU19XSVRIKTtcbiAgICB2YXIgZW5kUG9zaXRpb24gPSBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgbGVuID0gdG9MZW5ndGgodGhhdC5sZW5ndGgpO1xuICAgIHZhciBlbmQgPSBlbmRQb3NpdGlvbiA9PT0gdW5kZWZpbmVkID8gbGVuIDogTWF0aC5taW4odG9MZW5ndGgoZW5kUG9zaXRpb24pLCBsZW4pO1xuICAgIHZhciBzZWFyY2ggPSBTdHJpbmcoc2VhcmNoU3RyaW5nKTtcbiAgICByZXR1cm4gJGVuZHNXaXRoXG4gICAgICA/ICRlbmRzV2l0aC5jYWxsKHRoYXQsIHNlYXJjaCwgZW5kKVxuICAgICAgOiB0aGF0LnNsaWNlKGVuZCAtIHNlYXJjaC5sZW5ndGgsIGVuZCkgPT09IHNlYXJjaDtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy42IFN0cmluZy5wcm90b3R5cGUuZml4ZWQoKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnZml4ZWQnLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gZml4ZWQoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ3R0JywgJycsICcnKTtcbiAgfTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuNyBTdHJpbmcucHJvdG90eXBlLmZvbnRjb2xvcihjb2xvcilcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ2ZvbnRjb2xvcicsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBmb250Y29sb3IoY29sb3IpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnZm9udCcsICdjb2xvcicsIGNvbG9yKTtcbiAgfTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuOCBTdHJpbmcucHJvdG90eXBlLmZvbnRzaXplKHNpemUpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdmb250c2l6ZScsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBmb250c2l6ZShzaXplKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ2ZvbnQnLCAnc2l6ZScsIHNpemUpO1xuICB9O1xufSk7XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4vX3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgZnJvbUNoYXJDb2RlID0gU3RyaW5nLmZyb21DaGFyQ29kZTtcbnZhciAkZnJvbUNvZGVQb2ludCA9IFN0cmluZy5mcm9tQ29kZVBvaW50O1xuXG4vLyBsZW5ndGggc2hvdWxkIGJlIDEsIG9sZCBGRiBwcm9ibGVtXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICghISRmcm9tQ29kZVBvaW50ICYmICRmcm9tQ29kZVBvaW50Lmxlbmd0aCAhPSAxKSwgJ1N0cmluZycsIHtcbiAgLy8gMjEuMS4yLjIgU3RyaW5nLmZyb21Db2RlUG9pbnQoLi4uY29kZVBvaW50cylcbiAgZnJvbUNvZGVQb2ludDogZnVuY3Rpb24gZnJvbUNvZGVQb2ludCh4KSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICB2YXIgcmVzID0gW107XG4gICAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIgY29kZTtcbiAgICB3aGlsZSAoYUxlbiA+IGkpIHtcbiAgICAgIGNvZGUgPSArYXJndW1lbnRzW2krK107XG4gICAgICBpZiAodG9BYnNvbHV0ZUluZGV4KGNvZGUsIDB4MTBmZmZmKSAhPT0gY29kZSkgdGhyb3cgUmFuZ2VFcnJvcihjb2RlICsgJyBpcyBub3QgYSB2YWxpZCBjb2RlIHBvaW50Jyk7XG4gICAgICByZXMucHVzaChjb2RlIDwgMHgxMDAwMFxuICAgICAgICA/IGZyb21DaGFyQ29kZShjb2RlKVxuICAgICAgICA6IGZyb21DaGFyQ29kZSgoKGNvZGUgLT0gMHgxMDAwMCkgPj4gMTApICsgMHhkODAwLCBjb2RlICUgMHg0MDAgKyAweGRjMDApXG4gICAgICApO1xuICAgIH0gcmV0dXJuIHJlcy5qb2luKCcnKTtcbiAgfVxufSk7XG4iLCIvLyAyMS4xLjMuNyBTdHJpbmcucHJvdG90eXBlLmluY2x1ZGVzKHNlYXJjaFN0cmluZywgcG9zaXRpb24gPSAwKVxuJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBjb250ZXh0ID0gcmVxdWlyZSgnLi9fc3RyaW5nLWNvbnRleHQnKTtcbnZhciBJTkNMVURFUyA9ICdpbmNsdWRlcyc7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMtaXMtcmVnZXhwJykoSU5DTFVERVMpLCAnU3RyaW5nJywge1xuICBpbmNsdWRlczogZnVuY3Rpb24gaW5jbHVkZXMoc2VhcmNoU3RyaW5nIC8qICwgcG9zaXRpb24gPSAwICovKSB7XG4gICAgcmV0dXJuICEhfmNvbnRleHQodGhpcywgc2VhcmNoU3RyaW5nLCBJTkNMVURFUylcbiAgICAgIC5pbmRleE9mKHNlYXJjaFN0cmluZywgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjkgU3RyaW5nLnByb3RvdHlwZS5pdGFsaWNzKClcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ2l0YWxpY3MnLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gaXRhbGljcygpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnaScsICcnLCAnJyk7XG4gIH07XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkYXQgPSByZXF1aXJlKCcuL19zdHJpbmctYXQnKSh0cnVlKTtcblxuLy8gMjEuMS4zLjI3IFN0cmluZy5wcm90b3R5cGVbQEBpdGVyYXRvcl0oKVxucmVxdWlyZSgnLi9faXRlci1kZWZpbmUnKShTdHJpbmcsICdTdHJpbmcnLCBmdW5jdGlvbiAoaXRlcmF0ZWQpIHtcbiAgdGhpcy5fdCA9IFN0cmluZyhpdGVyYXRlZCk7IC8vIHRhcmdldFxuICB0aGlzLl9pID0gMDsgICAgICAgICAgICAgICAgLy8gbmV4dCBpbmRleFxuLy8gMjEuMS41LjIuMSAlU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUlLm5leHQoKVxufSwgZnVuY3Rpb24gKCkge1xuICB2YXIgTyA9IHRoaXMuX3Q7XG4gIHZhciBpbmRleCA9IHRoaXMuX2k7XG4gIHZhciBwb2ludDtcbiAgaWYgKGluZGV4ID49IE8ubGVuZ3RoKSByZXR1cm4geyB2YWx1ZTogdW5kZWZpbmVkLCBkb25lOiB0cnVlIH07XG4gIHBvaW50ID0gJGF0KE8sIGluZGV4KTtcbiAgdGhpcy5faSArPSBwb2ludC5sZW5ndGg7XG4gIHJldHVybiB7IHZhbHVlOiBwb2ludCwgZG9uZTogZmFsc2UgfTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuMTAgU3RyaW5nLnByb3RvdHlwZS5saW5rKHVybClcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ2xpbmsnLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gbGluayh1cmwpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnYScsICdocmVmJywgdXJsKTtcbiAgfTtcbn0pO1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdTdHJpbmcnLCB7XG4gIC8vIDIxLjEuMi40IFN0cmluZy5yYXcoY2FsbFNpdGUsIC4uLnN1YnN0aXR1dGlvbnMpXG4gIHJhdzogZnVuY3Rpb24gcmF3KGNhbGxTaXRlKSB7XG4gICAgdmFyIHRwbCA9IHRvSU9iamVjdChjYWxsU2l0ZS5yYXcpO1xuICAgIHZhciBsZW4gPSB0b0xlbmd0aCh0cGwubGVuZ3RoKTtcbiAgICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIHJlcyA9IFtdO1xuICAgIHZhciBpID0gMDtcbiAgICB3aGlsZSAobGVuID4gaSkge1xuICAgICAgcmVzLnB1c2goU3RyaW5nKHRwbFtpKytdKSk7XG4gICAgICBpZiAoaSA8IGFMZW4pIHJlcy5wdXNoKFN0cmluZyhhcmd1bWVudHNbaV0pKTtcbiAgICB9IHJldHVybiByZXMuam9pbignJyk7XG4gIH1cbn0pO1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdTdHJpbmcnLCB7XG4gIC8vIDIxLjEuMy4xMyBTdHJpbmcucHJvdG90eXBlLnJlcGVhdChjb3VudClcbiAgcmVwZWF0OiByZXF1aXJlKCcuL19zdHJpbmctcmVwZWF0Jylcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuMTEgU3RyaW5nLnByb3RvdHlwZS5zbWFsbCgpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdzbWFsbCcsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBzbWFsbCgpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnc21hbGwnLCAnJywgJycpO1xuICB9O1xufSk7XG4iLCIvLyAyMS4xLjMuMTggU3RyaW5nLnByb3RvdHlwZS5zdGFydHNXaXRoKHNlYXJjaFN0cmluZyBbLCBwb3NpdGlvbiBdKVxuJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGNvbnRleHQgPSByZXF1aXJlKCcuL19zdHJpbmctY29udGV4dCcpO1xudmFyIFNUQVJUU19XSVRIID0gJ3N0YXJ0c1dpdGgnO1xudmFyICRzdGFydHNXaXRoID0gJydbU1RBUlRTX1dJVEhdO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzLWlzLXJlZ2V4cCcpKFNUQVJUU19XSVRIKSwgJ1N0cmluZycsIHtcbiAgc3RhcnRzV2l0aDogZnVuY3Rpb24gc3RhcnRzV2l0aChzZWFyY2hTdHJpbmcgLyogLCBwb3NpdGlvbiA9IDAgKi8pIHtcbiAgICB2YXIgdGhhdCA9IGNvbnRleHQodGhpcywgc2VhcmNoU3RyaW5nLCBTVEFSVFNfV0lUSCk7XG4gICAgdmFyIGluZGV4ID0gdG9MZW5ndGgoTWF0aC5taW4oYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQsIHRoYXQubGVuZ3RoKSk7XG4gICAgdmFyIHNlYXJjaCA9IFN0cmluZyhzZWFyY2hTdHJpbmcpO1xuICAgIHJldHVybiAkc3RhcnRzV2l0aFxuICAgICAgPyAkc3RhcnRzV2l0aC5jYWxsKHRoYXQsIHNlYXJjaCwgaW5kZXgpXG4gICAgICA6IHRoYXQuc2xpY2UoaW5kZXgsIGluZGV4ICsgc2VhcmNoLmxlbmd0aCkgPT09IHNlYXJjaDtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy4xMiBTdHJpbmcucHJvdG90eXBlLnN0cmlrZSgpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdzdHJpa2UnLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gc3RyaWtlKCkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdzdHJpa2UnLCAnJywgJycpO1xuICB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy4xMyBTdHJpbmcucHJvdG90eXBlLnN1YigpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdzdWInLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gc3ViKCkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdzdWInLCAnJywgJycpO1xuICB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy4xNCBTdHJpbmcucHJvdG90eXBlLnN1cCgpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdzdXAnLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gc3VwKCkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdzdXAnLCAnJywgJycpO1xuICB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyAyMS4xLjMuMjUgU3RyaW5nLnByb3RvdHlwZS50cmltKClcbnJlcXVpcmUoJy4vX3N0cmluZy10cmltJykoJ3RyaW0nLCBmdW5jdGlvbiAoJHRyaW0pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHRyaW0oKSB7XG4gICAgcmV0dXJuICR0cmltKHRoaXMsIDMpO1xuICB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBFQ01BU2NyaXB0IDYgc3ltYm9scyBzaGltXG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG52YXIgTUVUQSA9IHJlcXVpcmUoJy4vX21ldGEnKS5LRVk7XG52YXIgJGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuL19zaGFyZWQnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi9fdWlkJyk7XG52YXIgd2tzID0gcmVxdWlyZSgnLi9fd2tzJyk7XG52YXIgd2tzRXh0ID0gcmVxdWlyZSgnLi9fd2tzLWV4dCcpO1xudmFyIHdrc0RlZmluZSA9IHJlcXVpcmUoJy4vX3drcy1kZWZpbmUnKTtcbnZhciBlbnVtS2V5cyA9IHJlcXVpcmUoJy4vX2VudW0ta2V5cycpO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuL19pcy1hcnJheScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcbnZhciBjcmVhdGVEZXNjID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xudmFyIF9jcmVhdGUgPSByZXF1aXJlKCcuL19vYmplY3QtY3JlYXRlJyk7XG52YXIgZ09QTkV4dCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BuLWV4dCcpO1xudmFyICRHT1BEID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKTtcbnZhciAkRFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciAka2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG52YXIgZ09QRCA9ICRHT1BELmY7XG52YXIgZFAgPSAkRFAuZjtcbnZhciBnT1BOID0gZ09QTkV4dC5mO1xudmFyICRTeW1ib2wgPSBnbG9iYWwuU3ltYm9sO1xudmFyICRKU09OID0gZ2xvYmFsLkpTT047XG52YXIgX3N0cmluZ2lmeSA9ICRKU09OICYmICRKU09OLnN0cmluZ2lmeTtcbnZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcbnZhciBISURERU4gPSB3a3MoJ19oaWRkZW4nKTtcbnZhciBUT19QUklNSVRJVkUgPSB3a3MoJ3RvUHJpbWl0aXZlJyk7XG52YXIgaXNFbnVtID0ge30ucHJvcGVydHlJc0VudW1lcmFibGU7XG52YXIgU3ltYm9sUmVnaXN0cnkgPSBzaGFyZWQoJ3N5bWJvbC1yZWdpc3RyeScpO1xudmFyIEFsbFN5bWJvbHMgPSBzaGFyZWQoJ3N5bWJvbHMnKTtcbnZhciBPUFN5bWJvbHMgPSBzaGFyZWQoJ29wLXN5bWJvbHMnKTtcbnZhciBPYmplY3RQcm90byA9IE9iamVjdFtQUk9UT1RZUEVdO1xudmFyIFVTRV9OQVRJVkUgPSB0eXBlb2YgJFN5bWJvbCA9PSAnZnVuY3Rpb24nO1xudmFyIFFPYmplY3QgPSBnbG9iYWwuUU9iamVjdDtcbi8vIERvbid0IHVzZSBzZXR0ZXJzIGluIFF0IFNjcmlwdCwgaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzE3M1xudmFyIHNldHRlciA9ICFRT2JqZWN0IHx8ICFRT2JqZWN0W1BST1RPVFlQRV0gfHwgIVFPYmplY3RbUFJPVE9UWVBFXS5maW5kQ2hpbGQ7XG5cbi8vIGZhbGxiYWNrIGZvciBvbGQgQW5kcm9pZCwgaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTY4N1xudmFyIHNldFN5bWJvbERlc2MgPSBERVNDUklQVE9SUyAmJiAkZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gX2NyZWF0ZShkUCh7fSwgJ2EnLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBkUCh0aGlzLCAnYScsIHsgdmFsdWU6IDcgfSkuYTsgfVxuICB9KSkuYSAhPSA3O1xufSkgPyBmdW5jdGlvbiAoaXQsIGtleSwgRCkge1xuICB2YXIgcHJvdG9EZXNjID0gZ09QRChPYmplY3RQcm90bywga2V5KTtcbiAgaWYgKHByb3RvRGVzYykgZGVsZXRlIE9iamVjdFByb3RvW2tleV07XG4gIGRQKGl0LCBrZXksIEQpO1xuICBpZiAocHJvdG9EZXNjICYmIGl0ICE9PSBPYmplY3RQcm90bykgZFAoT2JqZWN0UHJvdG8sIGtleSwgcHJvdG9EZXNjKTtcbn0gOiBkUDtcblxudmFyIHdyYXAgPSBmdW5jdGlvbiAodGFnKSB7XG4gIHZhciBzeW0gPSBBbGxTeW1ib2xzW3RhZ10gPSBfY3JlYXRlKCRTeW1ib2xbUFJPVE9UWVBFXSk7XG4gIHN5bS5fayA9IHRhZztcbiAgcmV0dXJuIHN5bTtcbn07XG5cbnZhciBpc1N5bWJvbCA9IFVTRV9OQVRJVkUgJiYgdHlwZW9mICRTeW1ib2wuaXRlcmF0b3IgPT0gJ3N5bWJvbCcgPyBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PSAnc3ltYm9sJztcbn0gOiBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0IGluc3RhbmNlb2YgJFN5bWJvbDtcbn07XG5cbnZhciAkZGVmaW5lUHJvcGVydHkgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShpdCwga2V5LCBEKSB7XG4gIGlmIChpdCA9PT0gT2JqZWN0UHJvdG8pICRkZWZpbmVQcm9wZXJ0eShPUFN5bWJvbHMsIGtleSwgRCk7XG4gIGFuT2JqZWN0KGl0KTtcbiAga2V5ID0gdG9QcmltaXRpdmUoa2V5LCB0cnVlKTtcbiAgYW5PYmplY3QoRCk7XG4gIGlmIChoYXMoQWxsU3ltYm9scywga2V5KSkge1xuICAgIGlmICghRC5lbnVtZXJhYmxlKSB7XG4gICAgICBpZiAoIWhhcyhpdCwgSElEREVOKSkgZFAoaXQsIEhJRERFTiwgY3JlYXRlRGVzYygxLCB7fSkpO1xuICAgICAgaXRbSElEREVOXVtrZXldID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGhhcyhpdCwgSElEREVOKSAmJiBpdFtISURERU5dW2tleV0pIGl0W0hJRERFTl1ba2V5XSA9IGZhbHNlO1xuICAgICAgRCA9IF9jcmVhdGUoRCwgeyBlbnVtZXJhYmxlOiBjcmVhdGVEZXNjKDAsIGZhbHNlKSB9KTtcbiAgICB9IHJldHVybiBzZXRTeW1ib2xEZXNjKGl0LCBrZXksIEQpO1xuICB9IHJldHVybiBkUChpdCwga2V5LCBEKTtcbn07XG52YXIgJGRlZmluZVByb3BlcnRpZXMgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKGl0LCBQKSB7XG4gIGFuT2JqZWN0KGl0KTtcbiAgdmFyIGtleXMgPSBlbnVtS2V5cyhQID0gdG9JT2JqZWN0KFApKTtcbiAgdmFyIGkgPSAwO1xuICB2YXIgbCA9IGtleXMubGVuZ3RoO1xuICB2YXIga2V5O1xuICB3aGlsZSAobCA+IGkpICRkZWZpbmVQcm9wZXJ0eShpdCwga2V5ID0ga2V5c1tpKytdLCBQW2tleV0pO1xuICByZXR1cm4gaXQ7XG59O1xudmFyICRjcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUoaXQsIFApIHtcbiAgcmV0dXJuIFAgPT09IHVuZGVmaW5lZCA/IF9jcmVhdGUoaXQpIDogJGRlZmluZVByb3BlcnRpZXMoX2NyZWF0ZShpdCksIFApO1xufTtcbnZhciAkcHJvcGVydHlJc0VudW1lcmFibGUgPSBmdW5jdGlvbiBwcm9wZXJ0eUlzRW51bWVyYWJsZShrZXkpIHtcbiAgdmFyIEUgPSBpc0VudW0uY2FsbCh0aGlzLCBrZXkgPSB0b1ByaW1pdGl2ZShrZXksIHRydWUpKTtcbiAgaWYgKHRoaXMgPT09IE9iamVjdFByb3RvICYmIGhhcyhBbGxTeW1ib2xzLCBrZXkpICYmICFoYXMoT1BTeW1ib2xzLCBrZXkpKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiBFIHx8ICFoYXModGhpcywga2V5KSB8fCAhaGFzKEFsbFN5bWJvbHMsIGtleSkgfHwgaGFzKHRoaXMsIEhJRERFTikgJiYgdGhpc1tISURERU5dW2tleV0gPyBFIDogdHJ1ZTtcbn07XG52YXIgJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihpdCwga2V5KSB7XG4gIGl0ID0gdG9JT2JqZWN0KGl0KTtcbiAga2V5ID0gdG9QcmltaXRpdmUoa2V5LCB0cnVlKTtcbiAgaWYgKGl0ID09PSBPYmplY3RQcm90byAmJiBoYXMoQWxsU3ltYm9scywga2V5KSAmJiAhaGFzKE9QU3ltYm9scywga2V5KSkgcmV0dXJuO1xuICB2YXIgRCA9IGdPUEQoaXQsIGtleSk7XG4gIGlmIChEICYmIGhhcyhBbGxTeW1ib2xzLCBrZXkpICYmICEoaGFzKGl0LCBISURERU4pICYmIGl0W0hJRERFTl1ba2V5XSkpIEQuZW51bWVyYWJsZSA9IHRydWU7XG4gIHJldHVybiBEO1xufTtcbnZhciAkZ2V0T3duUHJvcGVydHlOYW1lcyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoaXQpIHtcbiAgdmFyIG5hbWVzID0gZ09QTih0b0lPYmplY3QoaXQpKTtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIgaSA9IDA7XG4gIHZhciBrZXk7XG4gIHdoaWxlIChuYW1lcy5sZW5ndGggPiBpKSB7XG4gICAgaWYgKCFoYXMoQWxsU3ltYm9scywga2V5ID0gbmFtZXNbaSsrXSkgJiYga2V5ICE9IEhJRERFTiAmJiBrZXkgIT0gTUVUQSkgcmVzdWx0LnB1c2goa2V5KTtcbiAgfSByZXR1cm4gcmVzdWx0O1xufTtcbnZhciAkZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlTeW1ib2xzKGl0KSB7XG4gIHZhciBJU19PUCA9IGl0ID09PSBPYmplY3RQcm90bztcbiAgdmFyIG5hbWVzID0gZ09QTihJU19PUCA/IE9QU3ltYm9scyA6IHRvSU9iamVjdChpdCkpO1xuICB2YXIgcmVzdWx0ID0gW107XG4gIHZhciBpID0gMDtcbiAgdmFyIGtleTtcbiAgd2hpbGUgKG5hbWVzLmxlbmd0aCA+IGkpIHtcbiAgICBpZiAoaGFzKEFsbFN5bWJvbHMsIGtleSA9IG5hbWVzW2krK10pICYmIChJU19PUCA/IGhhcyhPYmplY3RQcm90bywga2V5KSA6IHRydWUpKSByZXN1bHQucHVzaChBbGxTeW1ib2xzW2tleV0pO1xuICB9IHJldHVybiByZXN1bHQ7XG59O1xuXG4vLyAxOS40LjEuMSBTeW1ib2woW2Rlc2NyaXB0aW9uXSlcbmlmICghVVNFX05BVElWRSkge1xuICAkU3ltYm9sID0gZnVuY3Rpb24gU3ltYm9sKCkge1xuICAgIGlmICh0aGlzIGluc3RhbmNlb2YgJFN5bWJvbCkgdGhyb3cgVHlwZUVycm9yKCdTeW1ib2wgaXMgbm90IGEgY29uc3RydWN0b3IhJyk7XG4gICAgdmFyIHRhZyA9IHVpZChhcmd1bWVudHMubGVuZ3RoID4gMCA/IGFyZ3VtZW50c1swXSA6IHVuZGVmaW5lZCk7XG4gICAgdmFyICRzZXQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIGlmICh0aGlzID09PSBPYmplY3RQcm90bykgJHNldC5jYWxsKE9QU3ltYm9scywgdmFsdWUpO1xuICAgICAgaWYgKGhhcyh0aGlzLCBISURERU4pICYmIGhhcyh0aGlzW0hJRERFTl0sIHRhZykpIHRoaXNbSElEREVOXVt0YWddID0gZmFsc2U7XG4gICAgICBzZXRTeW1ib2xEZXNjKHRoaXMsIHRhZywgY3JlYXRlRGVzYygxLCB2YWx1ZSkpO1xuICAgIH07XG4gICAgaWYgKERFU0NSSVBUT1JTICYmIHNldHRlcikgc2V0U3ltYm9sRGVzYyhPYmplY3RQcm90bywgdGFnLCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgc2V0OiAkc2V0IH0pO1xuICAgIHJldHVybiB3cmFwKHRhZyk7XG4gIH07XG4gIHJlZGVmaW5lKCRTeW1ib2xbUFJPVE9UWVBFXSwgJ3RvU3RyaW5nJywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2s7XG4gIH0pO1xuXG4gICRHT1BELmYgPSAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuICAkRFAuZiA9ICRkZWZpbmVQcm9wZXJ0eTtcbiAgcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4nKS5mID0gZ09QTkV4dC5mID0gJGdldE93blByb3BlcnR5TmFtZXM7XG4gIHJlcXVpcmUoJy4vX29iamVjdC1waWUnKS5mID0gJHByb3BlcnR5SXNFbnVtZXJhYmxlO1xuICByZXF1aXJlKCcuL19vYmplY3QtZ29wcycpLmYgPSAkZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xuXG4gIGlmIChERVNDUklQVE9SUyAmJiAhcmVxdWlyZSgnLi9fbGlicmFyeScpKSB7XG4gICAgcmVkZWZpbmUoT2JqZWN0UHJvdG8sICdwcm9wZXJ0eUlzRW51bWVyYWJsZScsICRwcm9wZXJ0eUlzRW51bWVyYWJsZSwgdHJ1ZSk7XG4gIH1cblxuICB3a3NFeHQuZiA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgcmV0dXJuIHdyYXAod2tzKG5hbWUpKTtcbiAgfTtcbn1cblxuJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LlcgKyAkZXhwb3J0LkYgKiAhVVNFX05BVElWRSwgeyBTeW1ib2w6ICRTeW1ib2wgfSk7XG5cbmZvciAodmFyIGVzNlN5bWJvbHMgPSAoXG4gIC8vIDE5LjQuMi4yLCAxOS40LjIuMywgMTkuNC4yLjQsIDE5LjQuMi42LCAxOS40LjIuOCwgMTkuNC4yLjksIDE5LjQuMi4xMCwgMTkuNC4yLjExLCAxOS40LjIuMTIsIDE5LjQuMi4xMywgMTkuNC4yLjE0XG4gICdoYXNJbnN0YW5jZSxpc0NvbmNhdFNwcmVhZGFibGUsaXRlcmF0b3IsbWF0Y2gscmVwbGFjZSxzZWFyY2gsc3BlY2llcyxzcGxpdCx0b1ByaW1pdGl2ZSx0b1N0cmluZ1RhZyx1bnNjb3BhYmxlcydcbikuc3BsaXQoJywnKSwgaiA9IDA7IGVzNlN5bWJvbHMubGVuZ3RoID4gajspd2tzKGVzNlN5bWJvbHNbaisrXSk7XG5cbmZvciAodmFyIHdlbGxLbm93blN5bWJvbHMgPSAka2V5cyh3a3Muc3RvcmUpLCBrID0gMDsgd2VsbEtub3duU3ltYm9scy5sZW5ndGggPiBrOykgd2tzRGVmaW5lKHdlbGxLbm93blN5bWJvbHNbaysrXSk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsICdTeW1ib2wnLCB7XG4gIC8vIDE5LjQuMi4xIFN5bWJvbC5mb3Ioa2V5KVxuICAnZm9yJzogZnVuY3Rpb24gKGtleSkge1xuICAgIHJldHVybiBoYXMoU3ltYm9sUmVnaXN0cnksIGtleSArPSAnJylcbiAgICAgID8gU3ltYm9sUmVnaXN0cnlba2V5XVxuICAgICAgOiBTeW1ib2xSZWdpc3RyeVtrZXldID0gJFN5bWJvbChrZXkpO1xuICB9LFxuICAvLyAxOS40LjIuNSBTeW1ib2wua2V5Rm9yKHN5bSlcbiAga2V5Rm9yOiBmdW5jdGlvbiBrZXlGb3Ioc3ltKSB7XG4gICAgaWYgKCFpc1N5bWJvbChzeW0pKSB0aHJvdyBUeXBlRXJyb3Ioc3ltICsgJyBpcyBub3QgYSBzeW1ib2whJyk7XG4gICAgZm9yICh2YXIga2V5IGluIFN5bWJvbFJlZ2lzdHJ5KSBpZiAoU3ltYm9sUmVnaXN0cnlba2V5XSA9PT0gc3ltKSByZXR1cm4ga2V5O1xuICB9LFxuICB1c2VTZXR0ZXI6IGZ1bmN0aW9uICgpIHsgc2V0dGVyID0gdHJ1ZTsgfSxcbiAgdXNlU2ltcGxlOiBmdW5jdGlvbiAoKSB7IHNldHRlciA9IGZhbHNlOyB9XG59KTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhVVNFX05BVElWRSwgJ09iamVjdCcsIHtcbiAgLy8gMTkuMS4yLjIgT2JqZWN0LmNyZWF0ZShPIFssIFByb3BlcnRpZXNdKVxuICBjcmVhdGU6ICRjcmVhdGUsXG4gIC8vIDE5LjEuMi40IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKVxuICBkZWZpbmVQcm9wZXJ0eTogJGRlZmluZVByb3BlcnR5LFxuICAvLyAxOS4xLjIuMyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhPLCBQcm9wZXJ0aWVzKVxuICBkZWZpbmVQcm9wZXJ0aWVzOiAkZGVmaW5lUHJvcGVydGllcyxcbiAgLy8gMTkuMS4yLjYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKVxuICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6ICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsXG4gIC8vIDE5LjEuMi43IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKE8pXG4gIGdldE93blByb3BlcnR5TmFtZXM6ICRnZXRPd25Qcm9wZXJ0eU5hbWVzLFxuICAvLyAxOS4xLjIuOCBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKE8pXG4gIGdldE93blByb3BlcnR5U3ltYm9sczogJGdldE93blByb3BlcnR5U3ltYm9sc1xufSk7XG5cbi8vIDI0LjMuMiBKU09OLnN0cmluZ2lmeSh2YWx1ZSBbLCByZXBsYWNlciBbLCBzcGFjZV1dKVxuJEpTT04gJiYgJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAoIVVTRV9OQVRJVkUgfHwgJGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIFMgPSAkU3ltYm9sKCk7XG4gIC8vIE1TIEVkZ2UgY29udmVydHMgc3ltYm9sIHZhbHVlcyB0byBKU09OIGFzIHt9XG4gIC8vIFdlYktpdCBjb252ZXJ0cyBzeW1ib2wgdmFsdWVzIHRvIEpTT04gYXMgbnVsbFxuICAvLyBWOCB0aHJvd3Mgb24gYm94ZWQgc3ltYm9sc1xuICByZXR1cm4gX3N0cmluZ2lmeShbU10pICE9ICdbbnVsbF0nIHx8IF9zdHJpbmdpZnkoeyBhOiBTIH0pICE9ICd7fScgfHwgX3N0cmluZ2lmeShPYmplY3QoUykpICE9ICd7fSc7XG59KSksICdKU09OJywge1xuICBzdHJpbmdpZnk6IGZ1bmN0aW9uIHN0cmluZ2lmeShpdCkge1xuICAgIHZhciBhcmdzID0gW2l0XTtcbiAgICB2YXIgaSA9IDE7XG4gICAgdmFyIHJlcGxhY2VyLCAkcmVwbGFjZXI7XG4gICAgd2hpbGUgKGFyZ3VtZW50cy5sZW5ndGggPiBpKSBhcmdzLnB1c2goYXJndW1lbnRzW2krK10pO1xuICAgICRyZXBsYWNlciA9IHJlcGxhY2VyID0gYXJnc1sxXTtcbiAgICBpZiAoIWlzT2JqZWN0KHJlcGxhY2VyKSAmJiBpdCA9PT0gdW5kZWZpbmVkIHx8IGlzU3ltYm9sKGl0KSkgcmV0dXJuOyAvLyBJRTggcmV0dXJucyBzdHJpbmcgb24gdW5kZWZpbmVkXG4gICAgaWYgKCFpc0FycmF5KHJlcGxhY2VyKSkgcmVwbGFjZXIgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgICAgaWYgKHR5cGVvZiAkcmVwbGFjZXIgPT0gJ2Z1bmN0aW9uJykgdmFsdWUgPSAkcmVwbGFjZXIuY2FsbCh0aGlzLCBrZXksIHZhbHVlKTtcbiAgICAgIGlmICghaXNTeW1ib2wodmFsdWUpKSByZXR1cm4gdmFsdWU7XG4gICAgfTtcbiAgICBhcmdzWzFdID0gcmVwbGFjZXI7XG4gICAgcmV0dXJuIF9zdHJpbmdpZnkuYXBwbHkoJEpTT04sIGFyZ3MpO1xuICB9XG59KTtcblxuLy8gMTkuNC4zLjQgU3ltYm9sLnByb3RvdHlwZVtAQHRvUHJpbWl0aXZlXShoaW50KVxuJFN5bWJvbFtQUk9UT1RZUEVdW1RPX1BSSU1JVElWRV0gfHwgcmVxdWlyZSgnLi9faGlkZScpKCRTeW1ib2xbUFJPVE9UWVBFXSwgVE9fUFJJTUlUSVZFLCAkU3ltYm9sW1BST1RPVFlQRV0udmFsdWVPZik7XG4vLyAxOS40LjMuNSBTeW1ib2wucHJvdG90eXBlW0BAdG9TdHJpbmdUYWddXG5zZXRUb1N0cmluZ1RhZygkU3ltYm9sLCAnU3ltYm9sJyk7XG4vLyAyMC4yLjEuOSBNYXRoW0BAdG9TdHJpbmdUYWddXG5zZXRUb1N0cmluZ1RhZyhNYXRoLCAnTWF0aCcsIHRydWUpO1xuLy8gMjQuMy4zIEpTT05bQEB0b1N0cmluZ1RhZ11cbnNldFRvU3RyaW5nVGFnKGdsb2JhbC5KU09OLCAnSlNPTicsIHRydWUpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkdHlwZWQgPSByZXF1aXJlKCcuL190eXBlZCcpO1xudmFyIGJ1ZmZlciA9IHJlcXVpcmUoJy4vX3R5cGVkLWJ1ZmZlcicpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi9fdG8tYWJzb2x1dGUtaW5kZXgnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgQXJyYXlCdWZmZXIgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5BcnJheUJ1ZmZlcjtcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuL19zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG52YXIgJEFycmF5QnVmZmVyID0gYnVmZmVyLkFycmF5QnVmZmVyO1xudmFyICREYXRhVmlldyA9IGJ1ZmZlci5EYXRhVmlldztcbnZhciAkaXNWaWV3ID0gJHR5cGVkLkFCViAmJiBBcnJheUJ1ZmZlci5pc1ZpZXc7XG52YXIgJHNsaWNlID0gJEFycmF5QnVmZmVyLnByb3RvdHlwZS5zbGljZTtcbnZhciBWSUVXID0gJHR5cGVkLlZJRVc7XG52YXIgQVJSQVlfQlVGRkVSID0gJ0FycmF5QnVmZmVyJztcblxuJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LlcgKyAkZXhwb3J0LkYgKiAoQXJyYXlCdWZmZXIgIT09ICRBcnJheUJ1ZmZlciksIHsgQXJyYXlCdWZmZXI6ICRBcnJheUJ1ZmZlciB9KTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhJHR5cGVkLkNPTlNUUiwgQVJSQVlfQlVGRkVSLCB7XG4gIC8vIDI0LjEuMy4xIEFycmF5QnVmZmVyLmlzVmlldyhhcmcpXG4gIGlzVmlldzogZnVuY3Rpb24gaXNWaWV3KGl0KSB7XG4gICAgcmV0dXJuICRpc1ZpZXcgJiYgJGlzVmlldyhpdCkgfHwgaXNPYmplY3QoaXQpICYmIFZJRVcgaW4gaXQ7XG4gIH1cbn0pO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuVSArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gIW5ldyAkQXJyYXlCdWZmZXIoMikuc2xpY2UoMSwgdW5kZWZpbmVkKS5ieXRlTGVuZ3RoO1xufSksIEFSUkFZX0JVRkZFUiwge1xuICAvLyAyNC4xLjQuMyBBcnJheUJ1ZmZlci5wcm90b3R5cGUuc2xpY2Uoc3RhcnQsIGVuZClcbiAgc2xpY2U6IGZ1bmN0aW9uIHNsaWNlKHN0YXJ0LCBlbmQpIHtcbiAgICBpZiAoJHNsaWNlICE9PSB1bmRlZmluZWQgJiYgZW5kID09PSB1bmRlZmluZWQpIHJldHVybiAkc2xpY2UuY2FsbChhbk9iamVjdCh0aGlzKSwgc3RhcnQpOyAvLyBGRiBmaXhcbiAgICB2YXIgbGVuID0gYW5PYmplY3QodGhpcykuYnl0ZUxlbmd0aDtcbiAgICB2YXIgZmlyc3QgPSB0b0Fic29sdXRlSW5kZXgoc3RhcnQsIGxlbik7XG4gICAgdmFyIGZpbiA9IHRvQWJzb2x1dGVJbmRleChlbmQgPT09IHVuZGVmaW5lZCA/IGxlbiA6IGVuZCwgbGVuKTtcbiAgICB2YXIgcmVzdWx0ID0gbmV3IChzcGVjaWVzQ29uc3RydWN0b3IodGhpcywgJEFycmF5QnVmZmVyKSkodG9MZW5ndGgoZmluIC0gZmlyc3QpKTtcbiAgICB2YXIgdmlld1MgPSBuZXcgJERhdGFWaWV3KHRoaXMpO1xuICAgIHZhciB2aWV3VCA9IG5ldyAkRGF0YVZpZXcocmVzdWx0KTtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHdoaWxlIChmaXJzdCA8IGZpbikge1xuICAgICAgdmlld1Quc2V0VWludDgoaW5kZXgrKywgdmlld1MuZ2V0VWludDgoZmlyc3QrKykpO1xuICAgIH0gcmV0dXJuIHJlc3VsdDtcbiAgfVxufSk7XG5cbnJlcXVpcmUoJy4vX3NldC1zcGVjaWVzJykoQVJSQVlfQlVGRkVSKTtcbiIsInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG4kZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuVyArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL190eXBlZCcpLkFCViwge1xuICBEYXRhVmlldzogcmVxdWlyZSgnLi9fdHlwZWQtYnVmZmVyJykuRGF0YVZpZXdcbn0pO1xuIiwicmVxdWlyZSgnLi9fdHlwZWQtYXJyYXknKSgnRmxvYXQzMicsIDQsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBGbG9hdDMyQXJyYXkoZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIGluaXQodGhpcywgZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKTtcbiAgfTtcbn0pO1xuIiwicmVxdWlyZSgnLi9fdHlwZWQtYXJyYXknKSgnRmxvYXQ2NCcsIDgsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBGbG9hdDY0QXJyYXkoZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIGluaXQodGhpcywgZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKTtcbiAgfTtcbn0pO1xuIiwicmVxdWlyZSgnLi9fdHlwZWQtYXJyYXknKSgnSW50MTYnLCAyLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gSW50MTZBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iLCJyZXF1aXJlKCcuL190eXBlZC1hcnJheScpKCdJbnQzMicsIDQsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBJbnQzMkFycmF5KGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCkge1xuICAgIHJldHVybiBpbml0KHRoaXMsIGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7XG4gIH07XG59KTtcbiIsInJlcXVpcmUoJy4vX3R5cGVkLWFycmF5JykoJ0ludDgnLCAxLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gSW50OEFycmF5KGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCkge1xuICAgIHJldHVybiBpbml0KHRoaXMsIGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7XG4gIH07XG59KTtcbiIsInJlcXVpcmUoJy4vX3R5cGVkLWFycmF5JykoJ1VpbnQxNicsIDIsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBVaW50MTZBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iLCJyZXF1aXJlKCcuL190eXBlZC1hcnJheScpKCdVaW50MzInLCA0LCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gVWludDMyQXJyYXkoZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIGluaXQodGhpcywgZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKTtcbiAgfTtcbn0pO1xuIiwicmVxdWlyZSgnLi9fdHlwZWQtYXJyYXknKSgnVWludDgnLCAxLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gVWludDhBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iLCJyZXF1aXJlKCcuL190eXBlZC1hcnJheScpKCdVaW50OCcsIDEsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBVaW50OENsYW1wZWRBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSwgdHJ1ZSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgZWFjaCA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKSgwKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG52YXIgbWV0YSA9IHJlcXVpcmUoJy4vX21ldGEnKTtcbnZhciBhc3NpZ24gPSByZXF1aXJlKCcuL19vYmplY3QtYXNzaWduJyk7XG52YXIgd2VhayA9IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24td2VhaycpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgdmFsaWRhdGUgPSByZXF1aXJlKCcuL192YWxpZGF0ZS1jb2xsZWN0aW9uJyk7XG52YXIgTkFUSVZFX1dFQUtfTUFQID0gcmVxdWlyZSgnLi9fdmFsaWRhdGUtY29sbGVjdGlvbicpO1xudmFyIElTX0lFMTEgPSAhZ2xvYmFsLkFjdGl2ZVhPYmplY3QgJiYgJ0FjdGl2ZVhPYmplY3QnIGluIGdsb2JhbDtcbnZhciBXRUFLX01BUCA9ICdXZWFrTWFwJztcbnZhciBnZXRXZWFrID0gbWV0YS5nZXRXZWFrO1xudmFyIGlzRXh0ZW5zaWJsZSA9IE9iamVjdC5pc0V4dGVuc2libGU7XG52YXIgdW5jYXVnaHRGcm96ZW5TdG9yZSA9IHdlYWsudWZzdG9yZTtcbnZhciBJbnRlcm5hbE1hcDtcblxudmFyIHdyYXBwZXIgPSBmdW5jdGlvbiAoZ2V0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBXZWFrTWFwKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgYXJndW1lbnRzLmxlbmd0aCA+IDAgPyBhcmd1bWVudHNbMF0gOiB1bmRlZmluZWQpO1xuICB9O1xufTtcblxudmFyIG1ldGhvZHMgPSB7XG4gIC8vIDIzLjMuMy4zIFdlYWtNYXAucHJvdG90eXBlLmdldChrZXkpXG4gIGdldDogZnVuY3Rpb24gZ2V0KGtleSkge1xuICAgIGlmIChpc09iamVjdChrZXkpKSB7XG4gICAgICB2YXIgZGF0YSA9IGdldFdlYWsoa2V5KTtcbiAgICAgIGlmIChkYXRhID09PSB0cnVlKSByZXR1cm4gdW5jYXVnaHRGcm96ZW5TdG9yZSh2YWxpZGF0ZSh0aGlzLCBXRUFLX01BUCkpLmdldChrZXkpO1xuICAgICAgcmV0dXJuIGRhdGEgPyBkYXRhW3RoaXMuX2ldIDogdW5kZWZpbmVkO1xuICAgIH1cbiAgfSxcbiAgLy8gMjMuMy4zLjUgV2Vha01hcC5wcm90b3R5cGUuc2V0KGtleSwgdmFsdWUpXG4gIHNldDogZnVuY3Rpb24gc2V0KGtleSwgdmFsdWUpIHtcbiAgICByZXR1cm4gd2Vhay5kZWYodmFsaWRhdGUodGhpcywgV0VBS19NQVApLCBrZXksIHZhbHVlKTtcbiAgfVxufTtcblxuLy8gMjMuMyBXZWFrTWFwIE9iamVjdHNcbnZhciAkV2Vha01hcCA9IG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fY29sbGVjdGlvbicpKFdFQUtfTUFQLCB3cmFwcGVyLCBtZXRob2RzLCB3ZWFrLCB0cnVlLCB0cnVlKTtcblxuLy8gSUUxMSBXZWFrTWFwIGZyb3plbiBrZXlzIGZpeFxuaWYgKE5BVElWRV9XRUFLX01BUCAmJiBJU19JRTExKSB7XG4gIEludGVybmFsTWFwID0gd2Vhay5nZXRDb25zdHJ1Y3Rvcih3cmFwcGVyLCBXRUFLX01BUCk7XG4gIGFzc2lnbihJbnRlcm5hbE1hcC5wcm90b3R5cGUsIG1ldGhvZHMpO1xuICBtZXRhLk5FRUQgPSB0cnVlO1xuICBlYWNoKFsnZGVsZXRlJywgJ2hhcycsICdnZXQnLCAnc2V0J10sIGZ1bmN0aW9uIChrZXkpIHtcbiAgICB2YXIgcHJvdG8gPSAkV2Vha01hcC5wcm90b3R5cGU7XG4gICAgdmFyIG1ldGhvZCA9IHByb3RvW2tleV07XG4gICAgcmVkZWZpbmUocHJvdG8sIGtleSwgZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgIC8vIHN0b3JlIGZyb3plbiBvYmplY3RzIG9uIGludGVybmFsIHdlYWttYXAgc2hpbVxuICAgICAgaWYgKGlzT2JqZWN0KGEpICYmICFpc0V4dGVuc2libGUoYSkpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9mKSB0aGlzLl9mID0gbmV3IEludGVybmFsTWFwKCk7XG4gICAgICAgIHZhciByZXN1bHQgPSB0aGlzLl9mW2tleV0oYSwgYik7XG4gICAgICAgIHJldHVybiBrZXkgPT0gJ3NldCcgPyB0aGlzIDogcmVzdWx0O1xuICAgICAgLy8gc3RvcmUgYWxsIHRoZSByZXN0IG9uIG5hdGl2ZSB3ZWFrbWFwXG4gICAgICB9IHJldHVybiBtZXRob2QuY2FsbCh0aGlzLCBhLCBiKTtcbiAgICB9KTtcbiAgfSk7XG59XG4iLCIndXNlIHN0cmljdCc7XG52YXIgd2VhayA9IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24td2VhaycpO1xudmFyIHZhbGlkYXRlID0gcmVxdWlyZSgnLi9fdmFsaWRhdGUtY29sbGVjdGlvbicpO1xudmFyIFdFQUtfU0VUID0gJ1dlYWtTZXQnO1xuXG4vLyAyMy40IFdlYWtTZXQgT2JqZWN0c1xucmVxdWlyZSgnLi9fY29sbGVjdGlvbicpKFdFQUtfU0VULCBmdW5jdGlvbiAoZ2V0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBXZWFrU2V0KCkgeyByZXR1cm4gZ2V0KHRoaXMsIGFyZ3VtZW50cy5sZW5ndGggPiAwID8gYXJndW1lbnRzWzBdIDogdW5kZWZpbmVkKTsgfTtcbn0sIHtcbiAgLy8gMjMuNC4zLjEgV2Vha1NldC5wcm90b3R5cGUuYWRkKHZhbHVlKVxuICBhZGQ6IGZ1bmN0aW9uIGFkZCh2YWx1ZSkge1xuICAgIHJldHVybiB3ZWFrLmRlZih2YWxpZGF0ZSh0aGlzLCBXRUFLX1NFVCksIHZhbHVlLCB0cnVlKTtcbiAgfVxufSwgd2VhaywgZmFsc2UsIHRydWUpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1mbGF0TWFwLyNzZWMtQXJyYXkucHJvdG90eXBlLmZsYXRNYXBcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZmxhdHRlbkludG9BcnJheSA9IHJlcXVpcmUoJy4vX2ZsYXR0ZW4taW50by1hcnJheScpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgYXJyYXlTcGVjaWVzQ3JlYXRlID0gcmVxdWlyZSgnLi9fYXJyYXktc3BlY2llcy1jcmVhdGUnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdBcnJheScsIHtcbiAgZmxhdE1hcDogZnVuY3Rpb24gZmxhdE1hcChjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gICAgdmFyIHNvdXJjZUxlbiwgQTtcbiAgICBhRnVuY3Rpb24oY2FsbGJhY2tmbik7XG4gICAgc291cmNlTGVuID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICAgIEEgPSBhcnJheVNwZWNpZXNDcmVhdGUoTywgMCk7XG4gICAgZmxhdHRlbkludG9BcnJheShBLCBPLCBPLCBzb3VyY2VMZW4sIDAsIDEsIGNhbGxiYWNrZm4sIGFyZ3VtZW50c1sxXSk7XG4gICAgcmV0dXJuIEE7XG4gIH1cbn0pO1xuXG5yZXF1aXJlKCcuL19hZGQtdG8tdW5zY29wYWJsZXMnKSgnZmxhdE1hcCcpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1mbGF0TWFwLyNzZWMtQXJyYXkucHJvdG90eXBlLmZsYXR0ZW5cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZmxhdHRlbkludG9BcnJheSA9IHJlcXVpcmUoJy4vX2ZsYXR0ZW4taW50by1hcnJheScpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgYXJyYXlTcGVjaWVzQ3JlYXRlID0gcmVxdWlyZSgnLi9fYXJyYXktc3BlY2llcy1jcmVhdGUnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdBcnJheScsIHtcbiAgZmxhdHRlbjogZnVuY3Rpb24gZmxhdHRlbigvKiBkZXB0aEFyZyA9IDEgKi8pIHtcbiAgICB2YXIgZGVwdGhBcmcgPSBhcmd1bWVudHNbMF07XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICB2YXIgc291cmNlTGVuID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICAgIHZhciBBID0gYXJyYXlTcGVjaWVzQ3JlYXRlKE8sIDApO1xuICAgIGZsYXR0ZW5JbnRvQXJyYXkoQSwgTywgTywgc291cmNlTGVuLCAwLCBkZXB0aEFyZyA9PT0gdW5kZWZpbmVkID8gMSA6IHRvSW50ZWdlcihkZXB0aEFyZykpO1xuICAgIHJldHVybiBBO1xuICB9XG59KTtcblxucmVxdWlyZSgnLi9fYWRkLXRvLXVuc2NvcGFibGVzJykoJ2ZsYXR0ZW4nKTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L0FycmF5LnByb3RvdHlwZS5pbmNsdWRlc1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkaW5jbHVkZXMgPSByZXF1aXJlKCcuL19hcnJheS1pbmNsdWRlcycpKHRydWUpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCwgJ0FycmF5Jywge1xuICBpbmNsdWRlczogZnVuY3Rpb24gaW5jbHVkZXMoZWwgLyogLCBmcm9tSW5kZXggPSAwICovKSB7XG4gICAgcmV0dXJuICRpbmNsdWRlcyh0aGlzLCBlbCwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcblxucmVxdWlyZSgnLi9fYWRkLXRvLXVuc2NvcGFibGVzJykoJ2luY2x1ZGVzJyk7XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vcndhbGRyb24vdGMzOS1ub3Rlcy9ibG9iL21hc3Rlci9lczYvMjAxNC0wOS9zZXB0LTI1Lm1kIzUxMC1nbG9iYWxhc2FwLWZvci1lbnF1ZXVpbmctYS1taWNyb3Rhc2tcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgbWljcm90YXNrID0gcmVxdWlyZSgnLi9fbWljcm90YXNrJykoKTtcbnZhciBwcm9jZXNzID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykucHJvY2VzcztcbnZhciBpc05vZGUgPSByZXF1aXJlKCcuL19jb2YnKShwcm9jZXNzKSA9PSAncHJvY2Vzcyc7XG5cbiRleHBvcnQoJGV4cG9ydC5HLCB7XG4gIGFzYXA6IGZ1bmN0aW9uIGFzYXAoZm4pIHtcbiAgICB2YXIgZG9tYWluID0gaXNOb2RlICYmIHByb2Nlc3MuZG9tYWluO1xuICAgIG1pY3JvdGFzayhkb21haW4gPyBkb21haW4uYmluZChmbikgOiBmbik7XG4gIH1cbn0pO1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL2xqaGFyYi9wcm9wb3NhbC1pcy1lcnJvclxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdFcnJvcicsIHtcbiAgaXNFcnJvcjogZnVuY3Rpb24gaXNFcnJvcihpdCkge1xuICAgIHJldHVybiBjb2YoaXQpID09PSAnRXJyb3InO1xuICB9XG59KTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWdsb2JhbFxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LkcsIHsgZ2xvYmFsOiByZXF1aXJlKCcuL19nbG9iYWwnKSB9KTtcbiIsIi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS8jc2VjLW1hcC5mcm9tXG5yZXF1aXJlKCcuL19zZXQtY29sbGVjdGlvbi1mcm9tJykoJ01hcCcpO1xuIiwiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tLyNzZWMtbWFwLm9mXG5yZXF1aXJlKCcuL19zZXQtY29sbGVjdGlvbi1vZicpKCdNYXAnKTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9EYXZpZEJydWFudC9NYXAtU2V0LnByb3RvdHlwZS50b0pTT05cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5SLCAnTWFwJywgeyB0b0pTT046IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24tdG8tanNvbicpKCdNYXAnKSB9KTtcbiIsIi8vIGh0dHBzOi8vcndhbGRyb24uZ2l0aHViLmlvL3Byb3Bvc2FsLW1hdGgtZXh0ZW5zaW9ucy9cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgY2xhbXA6IGZ1bmN0aW9uIGNsYW1wKHgsIGxvd2VyLCB1cHBlcikge1xuICAgIHJldHVybiBNYXRoLm1pbih1cHBlciwgTWF0aC5tYXgobG93ZXIsIHgpKTtcbiAgfVxufSk7XG4iLCIvLyBodHRwczovL3J3YWxkcm9uLmdpdGh1Yi5pby9wcm9wb3NhbC1tYXRoLWV4dGVuc2lvbnMvXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7IERFR19QRVJfUkFEOiBNYXRoLlBJIC8gMTgwIH0pO1xuIiwiLy8gaHR0cHM6Ly9yd2FsZHJvbi5naXRodWIuaW8vcHJvcG9zYWwtbWF0aC1leHRlbnNpb25zL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBSQURfUEVSX0RFRyA9IDE4MCAvIE1hdGguUEk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgZGVncmVlczogZnVuY3Rpb24gZGVncmVlcyhyYWRpYW5zKSB7XG4gICAgcmV0dXJuIHJhZGlhbnMgKiBSQURfUEVSX0RFRztcbiAgfVxufSk7XG4iLCIvLyBodHRwczovL3J3YWxkcm9uLmdpdGh1Yi5pby9wcm9wb3NhbC1tYXRoLWV4dGVuc2lvbnMvXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHNjYWxlID0gcmVxdWlyZSgnLi9fbWF0aC1zY2FsZScpO1xudmFyIGZyb3VuZCA9IHJlcXVpcmUoJy4vX21hdGgtZnJvdW5kJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgZnNjYWxlOiBmdW5jdGlvbiBmc2NhbGUoeCwgaW5Mb3csIGluSGlnaCwgb3V0TG93LCBvdXRIaWdoKSB7XG4gICAgcmV0dXJuIGZyb3VuZChzY2FsZSh4LCBpbkxvdywgaW5IaWdoLCBvdXRMb3csIG91dEhpZ2gpKTtcbiAgfVxufSk7XG4iLCIvLyBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9CcmVuZGFuRWljaC80Mjk0ZDVjMjEyYTZkMjI1NDcwM1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBpYWRkaDogZnVuY3Rpb24gaWFkZGgoeDAsIHgxLCB5MCwgeTEpIHtcbiAgICB2YXIgJHgwID0geDAgPj4+IDA7XG4gICAgdmFyICR4MSA9IHgxID4+PiAwO1xuICAgIHZhciAkeTAgPSB5MCA+Pj4gMDtcbiAgICByZXR1cm4gJHgxICsgKHkxID4+PiAwKSArICgoJHgwICYgJHkwIHwgKCR4MCB8ICR5MCkgJiB+KCR4MCArICR5MCA+Pj4gMCkpID4+PiAzMSkgfCAwO1xuICB9XG59KTtcbiIsIi8vIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL0JyZW5kYW5FaWNoLzQyOTRkNWMyMTJhNmQyMjU0NzAzXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGltdWxoOiBmdW5jdGlvbiBpbXVsaCh1LCB2KSB7XG4gICAgdmFyIFVJTlQxNiA9IDB4ZmZmZjtcbiAgICB2YXIgJHUgPSArdTtcbiAgICB2YXIgJHYgPSArdjtcbiAgICB2YXIgdTAgPSAkdSAmIFVJTlQxNjtcbiAgICB2YXIgdjAgPSAkdiAmIFVJTlQxNjtcbiAgICB2YXIgdTEgPSAkdSA+PiAxNjtcbiAgICB2YXIgdjEgPSAkdiA+PiAxNjtcbiAgICB2YXIgdCA9ICh1MSAqIHYwID4+PiAwKSArICh1MCAqIHYwID4+PiAxNik7XG4gICAgcmV0dXJuIHUxICogdjEgKyAodCA+PiAxNikgKyAoKHUwICogdjEgPj4+IDApICsgKHQgJiBVSU5UMTYpID4+IDE2KTtcbiAgfVxufSk7XG4iLCIvLyBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9CcmVuZGFuRWljaC80Mjk0ZDVjMjEyYTZkMjI1NDcwM1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBpc3ViaDogZnVuY3Rpb24gaXN1YmgoeDAsIHgxLCB5MCwgeTEpIHtcbiAgICB2YXIgJHgwID0geDAgPj4+IDA7XG4gICAgdmFyICR4MSA9IHgxID4+PiAwO1xuICAgIHZhciAkeTAgPSB5MCA+Pj4gMDtcbiAgICByZXR1cm4gJHgxIC0gKHkxID4+PiAwKSAtICgofiR4MCAmICR5MCB8IH4oJHgwIF4gJHkwKSAmICR4MCAtICR5MCA+Pj4gMCkgPj4+IDMxKSB8IDA7XG4gIH1cbn0pO1xuIiwiLy8gaHR0cHM6Ly9yd2FsZHJvbi5naXRodWIuaW8vcHJvcG9zYWwtbWF0aC1leHRlbnNpb25zL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywgeyBSQURfUEVSX0RFRzogMTgwIC8gTWF0aC5QSSB9KTtcbiIsIi8vIGh0dHBzOi8vcndhbGRyb24uZ2l0aHViLmlvL3Byb3Bvc2FsLW1hdGgtZXh0ZW5zaW9ucy9cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgREVHX1BFUl9SQUQgPSBNYXRoLlBJIC8gMTgwO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIHJhZGlhbnM6IGZ1bmN0aW9uIHJhZGlhbnMoZGVncmVlcykge1xuICAgIHJldHVybiBkZWdyZWVzICogREVHX1BFUl9SQUQ7XG4gIH1cbn0pO1xuIiwiLy8gaHR0cHM6Ly9yd2FsZHJvbi5naXRodWIuaW8vcHJvcG9zYWwtbWF0aC1leHRlbnNpb25zL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywgeyBzY2FsZTogcmVxdWlyZSgnLi9fbWF0aC1zY2FsZScpIH0pO1xuIiwiLy8gaHR0cDovL2pmYmFzdGllbi5naXRodWIuaW8vcGFwZXJzL01hdGguc2lnbmJpdC5odG1sXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7IHNpZ25iaXQ6IGZ1bmN0aW9uIHNpZ25iaXQoeCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gIHJldHVybiAoeCA9ICt4KSAhPSB4ID8geCA6IHggPT0gMCA/IDEgLyB4ID09IEluZmluaXR5IDogeCA+IDA7XG59IH0pO1xuIiwiLy8gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vQnJlbmRhbkVpY2gvNDI5NGQ1YzIxMmE2ZDIyNTQ3MDNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgdW11bGg6IGZ1bmN0aW9uIHVtdWxoKHUsIHYpIHtcbiAgICB2YXIgVUlOVDE2ID0gMHhmZmZmO1xuICAgIHZhciAkdSA9ICt1O1xuICAgIHZhciAkdiA9ICt2O1xuICAgIHZhciB1MCA9ICR1ICYgVUlOVDE2O1xuICAgIHZhciB2MCA9ICR2ICYgVUlOVDE2O1xuICAgIHZhciB1MSA9ICR1ID4+PiAxNjtcbiAgICB2YXIgdjEgPSAkdiA+Pj4gMTY7XG4gICAgdmFyIHQgPSAodTEgKiB2MCA+Pj4gMCkgKyAodTAgKiB2MCA+Pj4gMTYpO1xuICAgIHJldHVybiB1MSAqIHYxICsgKHQgPj4+IDE2KSArICgodTAgKiB2MSA+Pj4gMCkgKyAodCAmIFVJTlQxNikgPj4+IDE2KTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyICRkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xuXG4vLyBCLjIuMi4yIE9iamVjdC5wcm90b3R5cGUuX19kZWZpbmVHZXR0ZXJfXyhQLCBnZXR0ZXIpXG5yZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpICYmICRleHBvcnQoJGV4cG9ydC5QICsgcmVxdWlyZSgnLi9fb2JqZWN0LWZvcmNlZC1wYW0nKSwgJ09iamVjdCcsIHtcbiAgX19kZWZpbmVHZXR0ZXJfXzogZnVuY3Rpb24gX19kZWZpbmVHZXR0ZXJfXyhQLCBnZXR0ZXIpIHtcbiAgICAkZGVmaW5lUHJvcGVydHkuZih0b09iamVjdCh0aGlzKSwgUCwgeyBnZXQ6IGFGdW5jdGlvbihnZXR0ZXIpLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciAkZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcblxuLy8gQi4yLjIuMyBPYmplY3QucHJvdG90eXBlLl9fZGVmaW5lU2V0dGVyX18oUCwgc2V0dGVyKVxucmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSAmJiAkZXhwb3J0KCRleHBvcnQuUCArIHJlcXVpcmUoJy4vX29iamVjdC1mb3JjZWQtcGFtJyksICdPYmplY3QnLCB7XG4gIF9fZGVmaW5lU2V0dGVyX186IGZ1bmN0aW9uIF9fZGVmaW5lU2V0dGVyX18oUCwgc2V0dGVyKSB7XG4gICAgJGRlZmluZVByb3BlcnR5LmYodG9PYmplY3QodGhpcyksIFAsIHsgc2V0OiBhRnVuY3Rpb24oc2V0dGVyKSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0pO1xuICB9XG59KTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLW9iamVjdC12YWx1ZXMtZW50cmllc1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkZW50cmllcyA9IHJlcXVpcmUoJy4vX29iamVjdC10by1hcnJheScpKHRydWUpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ09iamVjdCcsIHtcbiAgZW50cmllczogZnVuY3Rpb24gZW50cmllcyhpdCkge1xuICAgIHJldHVybiAkZW50cmllcyhpdCk7XG4gIH1cbn0pO1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvcnNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgb3duS2V5cyA9IHJlcXVpcmUoJy4vX293bi1rZXlzJyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIGdPUEQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpO1xudmFyIGNyZWF0ZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fY3JlYXRlLXByb3BlcnR5Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnT2JqZWN0Jywge1xuICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCkge1xuICAgIHZhciBPID0gdG9JT2JqZWN0KG9iamVjdCk7XG4gICAgdmFyIGdldERlc2MgPSBnT1BELmY7XG4gICAgdmFyIGtleXMgPSBvd25LZXlzKE8pO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIGtleSwgZGVzYztcbiAgICB3aGlsZSAoa2V5cy5sZW5ndGggPiBpKSB7XG4gICAgICBkZXNjID0gZ2V0RGVzYyhPLCBrZXkgPSBrZXlzW2krK10pO1xuICAgICAgaWYgKGRlc2MgIT09IHVuZGVmaW5lZCkgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBrZXksIGRlc2MpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJykuZjtcblxuLy8gQi4yLjIuNCBPYmplY3QucHJvdG90eXBlLl9fbG9va3VwR2V0dGVyX18oUClcbnJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgJGV4cG9ydCgkZXhwb3J0LlAgKyByZXF1aXJlKCcuL19vYmplY3QtZm9yY2VkLXBhbScpLCAnT2JqZWN0Jywge1xuICBfX2xvb2t1cEdldHRlcl9fOiBmdW5jdGlvbiBfX2xvb2t1cEdldHRlcl9fKFApIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgIHZhciBLID0gdG9QcmltaXRpdmUoUCwgdHJ1ZSk7XG4gICAgdmFyIEQ7XG4gICAgZG8ge1xuICAgICAgaWYgKEQgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgSykpIHJldHVybiBELmdldDtcbiAgICB9IHdoaWxlIChPID0gZ2V0UHJvdG90eXBlT2YoTykpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJykuZjtcblxuLy8gQi4yLjIuNSBPYmplY3QucHJvdG90eXBlLl9fbG9va3VwU2V0dGVyX18oUClcbnJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgJGV4cG9ydCgkZXhwb3J0LlAgKyByZXF1aXJlKCcuL19vYmplY3QtZm9yY2VkLXBhbScpLCAnT2JqZWN0Jywge1xuICBfX2xvb2t1cFNldHRlcl9fOiBmdW5jdGlvbiBfX2xvb2t1cFNldHRlcl9fKFApIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgIHZhciBLID0gdG9QcmltaXRpdmUoUCwgdHJ1ZSk7XG4gICAgdmFyIEQ7XG4gICAgZG8ge1xuICAgICAgaWYgKEQgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgSykpIHJldHVybiBELnNldDtcbiAgICB9IHdoaWxlIChPID0gZ2V0UHJvdG90eXBlT2YoTykpO1xuICB9XG59KTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLW9iamVjdC12YWx1ZXMtZW50cmllc1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkdmFsdWVzID0gcmVxdWlyZSgnLi9fb2JqZWN0LXRvLWFycmF5JykoZmFsc2UpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ09iamVjdCcsIHtcbiAgdmFsdWVzOiBmdW5jdGlvbiB2YWx1ZXMoaXQpIHtcbiAgICByZXR1cm4gJHZhbHVlcyhpdCk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3plbnBhcnNpbmcvZXMtb2JzZXJ2YWJsZVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIG1pY3JvdGFzayA9IHJlcXVpcmUoJy4vX21pY3JvdGFzaycpKCk7XG52YXIgT0JTRVJWQUJMRSA9IHJlcXVpcmUoJy4vX3drcycpKCdvYnNlcnZhYmxlJyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG52YXIgcmVkZWZpbmVBbGwgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIGZvck9mID0gcmVxdWlyZSgnLi9fZm9yLW9mJyk7XG52YXIgUkVUVVJOID0gZm9yT2YuUkVUVVJOO1xuXG52YXIgZ2V0TWV0aG9kID0gZnVuY3Rpb24gKGZuKSB7XG4gIHJldHVybiBmbiA9PSBudWxsID8gdW5kZWZpbmVkIDogYUZ1bmN0aW9uKGZuKTtcbn07XG5cbnZhciBjbGVhbnVwU3Vic2NyaXB0aW9uID0gZnVuY3Rpb24gKHN1YnNjcmlwdGlvbikge1xuICB2YXIgY2xlYW51cCA9IHN1YnNjcmlwdGlvbi5fYztcbiAgaWYgKGNsZWFudXApIHtcbiAgICBzdWJzY3JpcHRpb24uX2MgPSB1bmRlZmluZWQ7XG4gICAgY2xlYW51cCgpO1xuICB9XG59O1xuXG52YXIgc3Vic2NyaXB0aW9uQ2xvc2VkID0gZnVuY3Rpb24gKHN1YnNjcmlwdGlvbikge1xuICByZXR1cm4gc3Vic2NyaXB0aW9uLl9vID09PSB1bmRlZmluZWQ7XG59O1xuXG52YXIgY2xvc2VTdWJzY3JpcHRpb24gPSBmdW5jdGlvbiAoc3Vic2NyaXB0aW9uKSB7XG4gIGlmICghc3Vic2NyaXB0aW9uQ2xvc2VkKHN1YnNjcmlwdGlvbikpIHtcbiAgICBzdWJzY3JpcHRpb24uX28gPSB1bmRlZmluZWQ7XG4gICAgY2xlYW51cFN1YnNjcmlwdGlvbihzdWJzY3JpcHRpb24pO1xuICB9XG59O1xuXG52YXIgU3Vic2NyaXB0aW9uID0gZnVuY3Rpb24gKG9ic2VydmVyLCBzdWJzY3JpYmVyKSB7XG4gIGFuT2JqZWN0KG9ic2VydmVyKTtcbiAgdGhpcy5fYyA9IHVuZGVmaW5lZDtcbiAgdGhpcy5fbyA9IG9ic2VydmVyO1xuICBvYnNlcnZlciA9IG5ldyBTdWJzY3JpcHRpb25PYnNlcnZlcih0aGlzKTtcbiAgdHJ5IHtcbiAgICB2YXIgY2xlYW51cCA9IHN1YnNjcmliZXIob2JzZXJ2ZXIpO1xuICAgIHZhciBzdWJzY3JpcHRpb24gPSBjbGVhbnVwO1xuICAgIGlmIChjbGVhbnVwICE9IG51bGwpIHtcbiAgICAgIGlmICh0eXBlb2YgY2xlYW51cC51bnN1YnNjcmliZSA9PT0gJ2Z1bmN0aW9uJykgY2xlYW51cCA9IGZ1bmN0aW9uICgpIHsgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7IH07XG4gICAgICBlbHNlIGFGdW5jdGlvbihjbGVhbnVwKTtcbiAgICAgIHRoaXMuX2MgPSBjbGVhbnVwO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIG9ic2VydmVyLmVycm9yKGUpO1xuICAgIHJldHVybjtcbiAgfSBpZiAoc3Vic2NyaXB0aW9uQ2xvc2VkKHRoaXMpKSBjbGVhbnVwU3Vic2NyaXB0aW9uKHRoaXMpO1xufTtcblxuU3Vic2NyaXB0aW9uLnByb3RvdHlwZSA9IHJlZGVmaW5lQWxsKHt9LCB7XG4gIHVuc3Vic2NyaWJlOiBmdW5jdGlvbiB1bnN1YnNjcmliZSgpIHsgY2xvc2VTdWJzY3JpcHRpb24odGhpcyk7IH1cbn0pO1xuXG52YXIgU3Vic2NyaXB0aW9uT2JzZXJ2ZXIgPSBmdW5jdGlvbiAoc3Vic2NyaXB0aW9uKSB7XG4gIHRoaXMuX3MgPSBzdWJzY3JpcHRpb247XG59O1xuXG5TdWJzY3JpcHRpb25PYnNlcnZlci5wcm90b3R5cGUgPSByZWRlZmluZUFsbCh7fSwge1xuICBuZXh0OiBmdW5jdGlvbiBuZXh0KHZhbHVlKSB7XG4gICAgdmFyIHN1YnNjcmlwdGlvbiA9IHRoaXMuX3M7XG4gICAgaWYgKCFzdWJzY3JpcHRpb25DbG9zZWQoc3Vic2NyaXB0aW9uKSkge1xuICAgICAgdmFyIG9ic2VydmVyID0gc3Vic2NyaXB0aW9uLl9vO1xuICAgICAgdHJ5IHtcbiAgICAgICAgdmFyIG0gPSBnZXRNZXRob2Qob2JzZXJ2ZXIubmV4dCk7XG4gICAgICAgIGlmIChtKSByZXR1cm4gbS5jYWxsKG9ic2VydmVyLCB2YWx1ZSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY2xvc2VTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LFxuICBlcnJvcjogZnVuY3Rpb24gZXJyb3IodmFsdWUpIHtcbiAgICB2YXIgc3Vic2NyaXB0aW9uID0gdGhpcy5fcztcbiAgICBpZiAoc3Vic2NyaXB0aW9uQ2xvc2VkKHN1YnNjcmlwdGlvbikpIHRocm93IHZhbHVlO1xuICAgIHZhciBvYnNlcnZlciA9IHN1YnNjcmlwdGlvbi5fbztcbiAgICBzdWJzY3JpcHRpb24uX28gPSB1bmRlZmluZWQ7XG4gICAgdHJ5IHtcbiAgICAgIHZhciBtID0gZ2V0TWV0aG9kKG9ic2VydmVyLmVycm9yKTtcbiAgICAgIGlmICghbSkgdGhyb3cgdmFsdWU7XG4gICAgICB2YWx1ZSA9IG0uY2FsbChvYnNlcnZlciwgdmFsdWUpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNsZWFudXBTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgfSBjbGVhbnVwU3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvbik7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9LFxuICBjb21wbGV0ZTogZnVuY3Rpb24gY29tcGxldGUodmFsdWUpIHtcbiAgICB2YXIgc3Vic2NyaXB0aW9uID0gdGhpcy5fcztcbiAgICBpZiAoIXN1YnNjcmlwdGlvbkNsb3NlZChzdWJzY3JpcHRpb24pKSB7XG4gICAgICB2YXIgb2JzZXJ2ZXIgPSBzdWJzY3JpcHRpb24uX287XG4gICAgICBzdWJzY3JpcHRpb24uX28gPSB1bmRlZmluZWQ7XG4gICAgICB0cnkge1xuICAgICAgICB2YXIgbSA9IGdldE1ldGhvZChvYnNlcnZlci5jb21wbGV0ZSk7XG4gICAgICAgIHZhbHVlID0gbSA/IG0uY2FsbChvYnNlcnZlciwgdmFsdWUpIDogdW5kZWZpbmVkO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNsZWFudXBTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgICB9IGNsZWFudXBTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKTtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gIH1cbn0pO1xuXG52YXIgJE9ic2VydmFibGUgPSBmdW5jdGlvbiBPYnNlcnZhYmxlKHN1YnNjcmliZXIpIHtcbiAgYW5JbnN0YW5jZSh0aGlzLCAkT2JzZXJ2YWJsZSwgJ09ic2VydmFibGUnLCAnX2YnKS5fZiA9IGFGdW5jdGlvbihzdWJzY3JpYmVyKTtcbn07XG5cbnJlZGVmaW5lQWxsKCRPYnNlcnZhYmxlLnByb3RvdHlwZSwge1xuICBzdWJzY3JpYmU6IGZ1bmN0aW9uIHN1YnNjcmliZShvYnNlcnZlcikge1xuICAgIHJldHVybiBuZXcgU3Vic2NyaXB0aW9uKG9ic2VydmVyLCB0aGlzLl9mKTtcbiAgfSxcbiAgZm9yRWFjaDogZnVuY3Rpb24gZm9yRWFjaChmbikge1xuICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICByZXR1cm4gbmV3IChjb3JlLlByb21pc2UgfHwgZ2xvYmFsLlByb21pc2UpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIGFGdW5jdGlvbihmbik7XG4gICAgICB2YXIgc3Vic2NyaXB0aW9uID0gdGhhdC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIGZuKHZhbHVlKTtcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgICBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiByZWplY3QsXG4gICAgICAgIGNvbXBsZXRlOiByZXNvbHZlXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxufSk7XG5cbnJlZGVmaW5lQWxsKCRPYnNlcnZhYmxlLCB7XG4gIGZyb206IGZ1bmN0aW9uIGZyb20oeCkge1xuICAgIHZhciBDID0gdHlwZW9mIHRoaXMgPT09ICdmdW5jdGlvbicgPyB0aGlzIDogJE9ic2VydmFibGU7XG4gICAgdmFyIG1ldGhvZCA9IGdldE1ldGhvZChhbk9iamVjdCh4KVtPQlNFUlZBQkxFXSk7XG4gICAgaWYgKG1ldGhvZCkge1xuICAgICAgdmFyIG9ic2VydmFibGUgPSBhbk9iamVjdChtZXRob2QuY2FsbCh4KSk7XG4gICAgICByZXR1cm4gb2JzZXJ2YWJsZS5jb25zdHJ1Y3RvciA9PT0gQyA/IG9ic2VydmFibGUgOiBuZXcgQyhmdW5jdGlvbiAob2JzZXJ2ZXIpIHtcbiAgICAgICAgcmV0dXJuIG9ic2VydmFibGUuc3Vic2NyaWJlKG9ic2VydmVyKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IEMoZnVuY3Rpb24gKG9ic2VydmVyKSB7XG4gICAgICB2YXIgZG9uZSA9IGZhbHNlO1xuICAgICAgbWljcm90YXNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCFkb25lKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChmb3JPZih4LCBmYWxzZSwgZnVuY3Rpb24gKGl0KSB7XG4gICAgICAgICAgICAgIG9ic2VydmVyLm5leHQoaXQpO1xuICAgICAgICAgICAgICBpZiAoZG9uZSkgcmV0dXJuIFJFVFVSTjtcbiAgICAgICAgICAgIH0pID09PSBSRVRVUk4pIHJldHVybjtcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBpZiAoZG9uZSkgdGhyb3cgZTtcbiAgICAgICAgICAgIG9ic2VydmVyLmVycm9yKGUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH0gb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyBkb25lID0gdHJ1ZTsgfTtcbiAgICB9KTtcbiAgfSxcbiAgb2Y6IGZ1bmN0aW9uIG9mKCkge1xuICAgIGZvciAodmFyIGkgPSAwLCBsID0gYXJndW1lbnRzLmxlbmd0aCwgaXRlbXMgPSBuZXcgQXJyYXkobCk7IGkgPCBsOykgaXRlbXNbaV0gPSBhcmd1bWVudHNbaSsrXTtcbiAgICByZXR1cm4gbmV3ICh0eXBlb2YgdGhpcyA9PT0gJ2Z1bmN0aW9uJyA/IHRoaXMgOiAkT2JzZXJ2YWJsZSkoZnVuY3Rpb24gKG9ic2VydmVyKSB7XG4gICAgICB2YXIgZG9uZSA9IGZhbHNlO1xuICAgICAgbWljcm90YXNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCFkb25lKSB7XG4gICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBpdGVtcy5sZW5ndGg7ICsraikge1xuICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dChpdGVtc1tqXSk7XG4gICAgICAgICAgICBpZiAoZG9uZSkgcmV0dXJuO1xuICAgICAgICAgIH0gb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyBkb25lID0gdHJ1ZTsgfTtcbiAgICB9KTtcbiAgfVxufSk7XG5cbmhpZGUoJE9ic2VydmFibGUucHJvdG90eXBlLCBPQlNFUlZBQkxFLCBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9KTtcblxuJGV4cG9ydCgkZXhwb3J0LkcsIHsgT2JzZXJ2YWJsZTogJE9ic2VydmFibGUgfSk7XG5cbnJlcXVpcmUoJy4vX3NldC1zcGVjaWVzJykoJ09ic2VydmFibGUnKTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXByb21pc2UtZmluYWxseVxuJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4vX3NwZWNpZXMtY29uc3RydWN0b3InKTtcbnZhciBwcm9taXNlUmVzb2x2ZSA9IHJlcXVpcmUoJy4vX3Byb21pc2UtcmVzb2x2ZScpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuUiwgJ1Byb21pc2UnLCB7ICdmaW5hbGx5JzogZnVuY3Rpb24gKG9uRmluYWxseSkge1xuICB2YXIgQyA9IHNwZWNpZXNDb25zdHJ1Y3Rvcih0aGlzLCBjb3JlLlByb21pc2UgfHwgZ2xvYmFsLlByb21pc2UpO1xuICB2YXIgaXNGdW5jdGlvbiA9IHR5cGVvZiBvbkZpbmFsbHkgPT0gJ2Z1bmN0aW9uJztcbiAgcmV0dXJuIHRoaXMudGhlbihcbiAgICBpc0Z1bmN0aW9uID8gZnVuY3Rpb24gKHgpIHtcbiAgICAgIHJldHVybiBwcm9taXNlUmVzb2x2ZShDLCBvbkZpbmFsbHkoKSkudGhlbihmdW5jdGlvbiAoKSB7IHJldHVybiB4OyB9KTtcbiAgICB9IDogb25GaW5hbGx5LFxuICAgIGlzRnVuY3Rpb24gPyBmdW5jdGlvbiAoZSkge1xuICAgICAgcmV0dXJuIHByb21pc2VSZXNvbHZlKEMsIG9uRmluYWxseSgpKS50aGVuKGZ1bmN0aW9uICgpIHsgdGhyb3cgZTsgfSk7XG4gICAgfSA6IG9uRmluYWxseVxuICApO1xufSB9KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXByb21pc2UtdHJ5XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5ID0gcmVxdWlyZSgnLi9fbmV3LXByb21pc2UtY2FwYWJpbGl0eScpO1xudmFyIHBlcmZvcm0gPSByZXF1aXJlKCcuL19wZXJmb3JtJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUHJvbWlzZScsIHsgJ3RyeSc6IGZ1bmN0aW9uIChjYWxsYmFja2ZuKSB7XG4gIHZhciBwcm9taXNlQ2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5LmYodGhpcyk7XG4gIHZhciByZXN1bHQgPSBwZXJmb3JtKGNhbGxiYWNrZm4pO1xuICAocmVzdWx0LmUgPyBwcm9taXNlQ2FwYWJpbGl0eS5yZWplY3QgOiBwcm9taXNlQ2FwYWJpbGl0eS5yZXNvbHZlKShyZXN1bHQudik7XG4gIHJldHVybiBwcm9taXNlQ2FwYWJpbGl0eS5wcm9taXNlO1xufSB9KTtcbiIsInZhciBtZXRhZGF0YSA9IHJlcXVpcmUoJy4vX21ldGFkYXRhJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciB0b01ldGFLZXkgPSBtZXRhZGF0YS5rZXk7XG52YXIgb3JkaW5hcnlEZWZpbmVPd25NZXRhZGF0YSA9IG1ldGFkYXRhLnNldDtcblxubWV0YWRhdGEuZXhwKHsgZGVmaW5lTWV0YWRhdGE6IGZ1bmN0aW9uIGRlZmluZU1ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlLCB0YXJnZXQsIHRhcmdldEtleSkge1xuICBvcmRpbmFyeURlZmluZU93bk1ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlLCBhbk9iamVjdCh0YXJnZXQpLCB0b01ldGFLZXkodGFyZ2V0S2V5KSk7XG59IH0pO1xuIiwidmFyIG1ldGFkYXRhID0gcmVxdWlyZSgnLi9fbWV0YWRhdGEnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHRvTWV0YUtleSA9IG1ldGFkYXRhLmtleTtcbnZhciBnZXRPckNyZWF0ZU1ldGFkYXRhTWFwID0gbWV0YWRhdGEubWFwO1xudmFyIHN0b3JlID0gbWV0YWRhdGEuc3RvcmU7XG5cbm1ldGFkYXRhLmV4cCh7IGRlbGV0ZU1ldGFkYXRhOiBmdW5jdGlvbiBkZWxldGVNZXRhZGF0YShtZXRhZGF0YUtleSwgdGFyZ2V0IC8qICwgdGFyZ2V0S2V5ICovKSB7XG4gIHZhciB0YXJnZXRLZXkgPSBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IHVuZGVmaW5lZCA6IHRvTWV0YUtleShhcmd1bWVudHNbMl0pO1xuICB2YXIgbWV0YWRhdGFNYXAgPSBnZXRPckNyZWF0ZU1ldGFkYXRhTWFwKGFuT2JqZWN0KHRhcmdldCksIHRhcmdldEtleSwgZmFsc2UpO1xuICBpZiAobWV0YWRhdGFNYXAgPT09IHVuZGVmaW5lZCB8fCAhbWV0YWRhdGFNYXBbJ2RlbGV0ZSddKG1ldGFkYXRhS2V5KSkgcmV0dXJuIGZhbHNlO1xuICBpZiAobWV0YWRhdGFNYXAuc2l6ZSkgcmV0dXJuIHRydWU7XG4gIHZhciB0YXJnZXRNZXRhZGF0YSA9IHN0b3JlLmdldCh0YXJnZXQpO1xuICB0YXJnZXRNZXRhZGF0YVsnZGVsZXRlJ10odGFyZ2V0S2V5KTtcbiAgcmV0dXJuICEhdGFyZ2V0TWV0YWRhdGEuc2l6ZSB8fCBzdG9yZVsnZGVsZXRlJ10odGFyZ2V0KTtcbn0gfSk7XG4iLCJ2YXIgU2V0ID0gcmVxdWlyZSgnLi9lczYuc2V0Jyk7XG52YXIgZnJvbSA9IHJlcXVpcmUoJy4vX2FycmF5LWZyb20taXRlcmFibGUnKTtcbnZhciBtZXRhZGF0YSA9IHJlcXVpcmUoJy4vX21ldGFkYXRhJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbnZhciBvcmRpbmFyeU93bk1ldGFkYXRhS2V5cyA9IG1ldGFkYXRhLmtleXM7XG52YXIgdG9NZXRhS2V5ID0gbWV0YWRhdGEua2V5O1xuXG52YXIgb3JkaW5hcnlNZXRhZGF0YUtleXMgPSBmdW5jdGlvbiAoTywgUCkge1xuICB2YXIgb0tleXMgPSBvcmRpbmFyeU93bk1ldGFkYXRhS2V5cyhPLCBQKTtcbiAgdmFyIHBhcmVudCA9IGdldFByb3RvdHlwZU9mKE8pO1xuICBpZiAocGFyZW50ID09PSBudWxsKSByZXR1cm4gb0tleXM7XG4gIHZhciBwS2V5cyA9IG9yZGluYXJ5TWV0YWRhdGFLZXlzKHBhcmVudCwgUCk7XG4gIHJldHVybiBwS2V5cy5sZW5ndGggPyBvS2V5cy5sZW5ndGggPyBmcm9tKG5ldyBTZXQob0tleXMuY29uY2F0KHBLZXlzKSkpIDogcEtleXMgOiBvS2V5cztcbn07XG5cbm1ldGFkYXRhLmV4cCh7IGdldE1ldGFkYXRhS2V5czogZnVuY3Rpb24gZ2V0TWV0YWRhdGFLZXlzKHRhcmdldCAvKiAsIHRhcmdldEtleSAqLykge1xuICByZXR1cm4gb3JkaW5hcnlNZXRhZGF0YUtleXMoYW5PYmplY3QodGFyZ2V0KSwgYXJndW1lbnRzLmxlbmd0aCA8IDIgPyB1bmRlZmluZWQgOiB0b01ldGFLZXkoYXJndW1lbnRzWzFdKSk7XG59IH0pO1xuIiwidmFyIG1ldGFkYXRhID0gcmVxdWlyZSgnLi9fbWV0YWRhdGEnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIG9yZGluYXJ5SGFzT3duTWV0YWRhdGEgPSBtZXRhZGF0YS5oYXM7XG52YXIgb3JkaW5hcnlHZXRPd25NZXRhZGF0YSA9IG1ldGFkYXRhLmdldDtcbnZhciB0b01ldGFLZXkgPSBtZXRhZGF0YS5rZXk7XG5cbnZhciBvcmRpbmFyeUdldE1ldGFkYXRhID0gZnVuY3Rpb24gKE1ldGFkYXRhS2V5LCBPLCBQKSB7XG4gIHZhciBoYXNPd24gPSBvcmRpbmFyeUhhc093bk1ldGFkYXRhKE1ldGFkYXRhS2V5LCBPLCBQKTtcbiAgaWYgKGhhc093bikgcmV0dXJuIG9yZGluYXJ5R2V0T3duTWV0YWRhdGEoTWV0YWRhdGFLZXksIE8sIFApO1xuICB2YXIgcGFyZW50ID0gZ2V0UHJvdG90eXBlT2YoTyk7XG4gIHJldHVybiBwYXJlbnQgIT09IG51bGwgPyBvcmRpbmFyeUdldE1ldGFkYXRhKE1ldGFkYXRhS2V5LCBwYXJlbnQsIFApIDogdW5kZWZpbmVkO1xufTtcblxubWV0YWRhdGEuZXhwKHsgZ2V0TWV0YWRhdGE6IGZ1bmN0aW9uIGdldE1ldGFkYXRhKG1ldGFkYXRhS2V5LCB0YXJnZXQgLyogLCB0YXJnZXRLZXkgKi8pIHtcbiAgcmV0dXJuIG9yZGluYXJ5R2V0TWV0YWRhdGEobWV0YWRhdGFLZXksIGFuT2JqZWN0KHRhcmdldCksIGFyZ3VtZW50cy5sZW5ndGggPCAzID8gdW5kZWZpbmVkIDogdG9NZXRhS2V5KGFyZ3VtZW50c1syXSkpO1xufSB9KTtcbiIsInZhciBtZXRhZGF0YSA9IHJlcXVpcmUoJy4vX21ldGFkYXRhJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBvcmRpbmFyeU93bk1ldGFkYXRhS2V5cyA9IG1ldGFkYXRhLmtleXM7XG52YXIgdG9NZXRhS2V5ID0gbWV0YWRhdGEua2V5O1xuXG5tZXRhZGF0YS5leHAoeyBnZXRPd25NZXRhZGF0YUtleXM6IGZ1bmN0aW9uIGdldE93bk1ldGFkYXRhS2V5cyh0YXJnZXQgLyogLCB0YXJnZXRLZXkgKi8pIHtcbiAgcmV0dXJuIG9yZGluYXJ5T3duTWV0YWRhdGFLZXlzKGFuT2JqZWN0KHRhcmdldCksIGFyZ3VtZW50cy5sZW5ndGggPCAyID8gdW5kZWZpbmVkIDogdG9NZXRhS2V5KGFyZ3VtZW50c1sxXSkpO1xufSB9KTtcbiIsInZhciBtZXRhZGF0YSA9IHJlcXVpcmUoJy4vX21ldGFkYXRhJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBvcmRpbmFyeUdldE93bk1ldGFkYXRhID0gbWV0YWRhdGEuZ2V0O1xudmFyIHRvTWV0YUtleSA9IG1ldGFkYXRhLmtleTtcblxubWV0YWRhdGEuZXhwKHsgZ2V0T3duTWV0YWRhdGE6IGZ1bmN0aW9uIGdldE93bk1ldGFkYXRhKG1ldGFkYXRhS2V5LCB0YXJnZXQgLyogLCB0YXJnZXRLZXkgKi8pIHtcbiAgcmV0dXJuIG9yZGluYXJ5R2V0T3duTWV0YWRhdGEobWV0YWRhdGFLZXksIGFuT2JqZWN0KHRhcmdldClcbiAgICAsIGFyZ3VtZW50cy5sZW5ndGggPCAzID8gdW5kZWZpbmVkIDogdG9NZXRhS2V5KGFyZ3VtZW50c1syXSkpO1xufSB9KTtcbiIsInZhciBtZXRhZGF0YSA9IHJlcXVpcmUoJy4vX21ldGFkYXRhJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbnZhciBvcmRpbmFyeUhhc093bk1ldGFkYXRhID0gbWV0YWRhdGEuaGFzO1xudmFyIHRvTWV0YUtleSA9IG1ldGFkYXRhLmtleTtcblxudmFyIG9yZGluYXJ5SGFzTWV0YWRhdGEgPSBmdW5jdGlvbiAoTWV0YWRhdGFLZXksIE8sIFApIHtcbiAgdmFyIGhhc093biA9IG9yZGluYXJ5SGFzT3duTWV0YWRhdGEoTWV0YWRhdGFLZXksIE8sIFApO1xuICBpZiAoaGFzT3duKSByZXR1cm4gdHJ1ZTtcbiAgdmFyIHBhcmVudCA9IGdldFByb3RvdHlwZU9mKE8pO1xuICByZXR1cm4gcGFyZW50ICE9PSBudWxsID8gb3JkaW5hcnlIYXNNZXRhZGF0YShNZXRhZGF0YUtleSwgcGFyZW50LCBQKSA6IGZhbHNlO1xufTtcblxubWV0YWRhdGEuZXhwKHsgaGFzTWV0YWRhdGE6IGZ1bmN0aW9uIGhhc01ldGFkYXRhKG1ldGFkYXRhS2V5LCB0YXJnZXQgLyogLCB0YXJnZXRLZXkgKi8pIHtcbiAgcmV0dXJuIG9yZGluYXJ5SGFzTWV0YWRhdGEobWV0YWRhdGFLZXksIGFuT2JqZWN0KHRhcmdldCksIGFyZ3VtZW50cy5sZW5ndGggPCAzID8gdW5kZWZpbmVkIDogdG9NZXRhS2V5KGFyZ3VtZW50c1syXSkpO1xufSB9KTtcbiIsInZhciBtZXRhZGF0YSA9IHJlcXVpcmUoJy4vX21ldGFkYXRhJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBvcmRpbmFyeUhhc093bk1ldGFkYXRhID0gbWV0YWRhdGEuaGFzO1xudmFyIHRvTWV0YUtleSA9IG1ldGFkYXRhLmtleTtcblxubWV0YWRhdGEuZXhwKHsgaGFzT3duTWV0YWRhdGE6IGZ1bmN0aW9uIGhhc093bk1ldGFkYXRhKG1ldGFkYXRhS2V5LCB0YXJnZXQgLyogLCB0YXJnZXRLZXkgKi8pIHtcbiAgcmV0dXJuIG9yZGluYXJ5SGFzT3duTWV0YWRhdGEobWV0YWRhdGFLZXksIGFuT2JqZWN0KHRhcmdldClcbiAgICAsIGFyZ3VtZW50cy5sZW5ndGggPCAzID8gdW5kZWZpbmVkIDogdG9NZXRhS2V5KGFyZ3VtZW50c1syXSkpO1xufSB9KTtcbiIsInZhciAkbWV0YWRhdGEgPSByZXF1aXJlKCcuL19tZXRhZGF0YScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIHRvTWV0YUtleSA9ICRtZXRhZGF0YS5rZXk7XG52YXIgb3JkaW5hcnlEZWZpbmVPd25NZXRhZGF0YSA9ICRtZXRhZGF0YS5zZXQ7XG5cbiRtZXRhZGF0YS5leHAoeyBtZXRhZGF0YTogZnVuY3Rpb24gbWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGRlY29yYXRvcih0YXJnZXQsIHRhcmdldEtleSkge1xuICAgIG9yZGluYXJ5RGVmaW5lT3duTWV0YWRhdGEoXG4gICAgICBtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSxcbiAgICAgICh0YXJnZXRLZXkgIT09IHVuZGVmaW5lZCA/IGFuT2JqZWN0IDogYUZ1bmN0aW9uKSh0YXJnZXQpLFxuICAgICAgdG9NZXRhS2V5KHRhcmdldEtleSlcbiAgICApO1xuICB9O1xufSB9KTtcbiIsIi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS8jc2VjLXNldC5mcm9tXG5yZXF1aXJlKCcuL19zZXQtY29sbGVjdGlvbi1mcm9tJykoJ1NldCcpO1xuIiwiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tLyNzZWMtc2V0Lm9mXG5yZXF1aXJlKCcuL19zZXQtY29sbGVjdGlvbi1vZicpKCdTZXQnKTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9EYXZpZEJydWFudC9NYXAtU2V0LnByb3RvdHlwZS50b0pTT05cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5SLCAnU2V0JywgeyB0b0pTT046IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24tdG8tanNvbicpKCdTZXQnKSB9KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXRoaWFzYnluZW5zL1N0cmluZy5wcm90b3R5cGUuYXRcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGF0ID0gcmVxdWlyZSgnLi9fc3RyaW5nLWF0JykodHJ1ZSk7XG5cbiRleHBvcnQoJGV4cG9ydC5QLCAnU3RyaW5nJywge1xuICBhdDogZnVuY3Rpb24gYXQocG9zKSB7XG4gICAgcmV0dXJuICRhdCh0aGlzLCBwb3MpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vU3RyaW5nLnByb3RvdHlwZS5tYXRjaEFsbC9cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGlzUmVnRXhwID0gcmVxdWlyZSgnLi9faXMtcmVnZXhwJyk7XG52YXIgZ2V0RmxhZ3MgPSByZXF1aXJlKCcuL19mbGFncycpO1xudmFyIFJlZ0V4cFByb3RvID0gUmVnRXhwLnByb3RvdHlwZTtcblxudmFyICRSZWdFeHBTdHJpbmdJdGVyYXRvciA9IGZ1bmN0aW9uIChyZWdleHAsIHN0cmluZykge1xuICB0aGlzLl9yID0gcmVnZXhwO1xuICB0aGlzLl9zID0gc3RyaW5nO1xufTtcblxucmVxdWlyZSgnLi9faXRlci1jcmVhdGUnKSgkUmVnRXhwU3RyaW5nSXRlcmF0b3IsICdSZWdFeHAgU3RyaW5nJywgZnVuY3Rpb24gbmV4dCgpIHtcbiAgdmFyIG1hdGNoID0gdGhpcy5fci5leGVjKHRoaXMuX3MpO1xuICByZXR1cm4geyB2YWx1ZTogbWF0Y2gsIGRvbmU6IG1hdGNoID09PSBudWxsIH07XG59KTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdTdHJpbmcnLCB7XG4gIG1hdGNoQWxsOiBmdW5jdGlvbiBtYXRjaEFsbChyZWdleHApIHtcbiAgICBkZWZpbmVkKHRoaXMpO1xuICAgIGlmICghaXNSZWdFeHAocmVnZXhwKSkgdGhyb3cgVHlwZUVycm9yKHJlZ2V4cCArICcgaXMgbm90IGEgcmVnZXhwIScpO1xuICAgIHZhciBTID0gU3RyaW5nKHRoaXMpO1xuICAgIHZhciBmbGFncyA9ICdmbGFncycgaW4gUmVnRXhwUHJvdG8gPyBTdHJpbmcocmVnZXhwLmZsYWdzKSA6IGdldEZsYWdzLmNhbGwocmVnZXhwKTtcbiAgICB2YXIgcnggPSBuZXcgUmVnRXhwKHJlZ2V4cC5zb3VyY2UsIH5mbGFncy5pbmRleE9mKCdnJykgPyBmbGFncyA6ICdnJyArIGZsYWdzKTtcbiAgICByeC5sYXN0SW5kZXggPSB0b0xlbmd0aChyZWdleHAubGFzdEluZGV4KTtcbiAgICByZXR1cm4gbmV3ICRSZWdFeHBTdHJpbmdJdGVyYXRvcihyeCwgUyk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc3RyaW5nLXBhZC1zdGFydC1lbmRcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHBhZCA9IHJlcXVpcmUoJy4vX3N0cmluZy1wYWQnKTtcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuL191c2VyLWFnZW50Jyk7XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8yODBcbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogL1ZlcnNpb25cXC8xMFxcLlxcZCsoXFwuXFxkKyk/IFNhZmFyaVxcLy8udGVzdCh1c2VyQWdlbnQpLCAnU3RyaW5nJywge1xuICBwYWRFbmQ6IGZ1bmN0aW9uIHBhZEVuZChtYXhMZW5ndGggLyogLCBmaWxsU3RyaW5nID0gJyAnICovKSB7XG4gICAgcmV0dXJuICRwYWQodGhpcywgbWF4TGVuZ3RoLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCwgZmFsc2UpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXN0cmluZy1wYWQtc3RhcnQtZW5kXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRwYWQgPSByZXF1aXJlKCcuL19zdHJpbmctcGFkJyk7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi9fdXNlci1hZ2VudCcpO1xuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvMjgwXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIC9WZXJzaW9uXFwvMTBcXC5cXGQrKFxcLlxcZCspPyBTYWZhcmlcXC8vLnRlc3QodXNlckFnZW50KSwgJ1N0cmluZycsIHtcbiAgcGFkU3RhcnQ6IGZ1bmN0aW9uIHBhZFN0YXJ0KG1heExlbmd0aCAvKiAsIGZpbGxTdHJpbmcgPSAnICcgKi8pIHtcbiAgICByZXR1cm4gJHBhZCh0aGlzLCBtYXhMZW5ndGgsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkLCB0cnVlKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vc2VibWFya2JhZ2UvZWNtYXNjcmlwdC1zdHJpbmctbGVmdC1yaWdodC10cmltXG5yZXF1aXJlKCcuL19zdHJpbmctdHJpbScpKCd0cmltTGVmdCcsIGZ1bmN0aW9uICgkdHJpbSkge1xuICByZXR1cm4gZnVuY3Rpb24gdHJpbUxlZnQoKSB7XG4gICAgcmV0dXJuICR0cmltKHRoaXMsIDEpO1xuICB9O1xufSwgJ3RyaW1TdGFydCcpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3NlYm1hcmtiYWdlL2VjbWFzY3JpcHQtc3RyaW5nLWxlZnQtcmlnaHQtdHJpbVxucmVxdWlyZSgnLi9fc3RyaW5nLXRyaW0nKSgndHJpbVJpZ2h0JywgZnVuY3Rpb24gKCR0cmltKSB7XG4gIHJldHVybiBmdW5jdGlvbiB0cmltUmlnaHQoKSB7XG4gICAgcmV0dXJuICR0cmltKHRoaXMsIDIpO1xuICB9O1xufSwgJ3RyaW1FbmQnKTtcbiIsInJlcXVpcmUoJy4vX3drcy1kZWZpbmUnKSgnYXN5bmNJdGVyYXRvcicpO1xuIiwicmVxdWlyZSgnLi9fd2tzLWRlZmluZScpKCdvYnNlcnZhYmxlJyk7XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1nbG9iYWxcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnU3lzdGVtJywgeyBnbG9iYWw6IHJlcXVpcmUoJy4vX2dsb2JhbCcpIH0pO1xuIiwiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tLyNzZWMtd2Vha21hcC5mcm9tXG5yZXF1aXJlKCcuL19zZXQtY29sbGVjdGlvbi1mcm9tJykoJ1dlYWtNYXAnKTtcbiIsIi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS8jc2VjLXdlYWttYXAub2ZcbnJlcXVpcmUoJy4vX3NldC1jb2xsZWN0aW9uLW9mJykoJ1dlYWtNYXAnKTtcbiIsIi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS8jc2VjLXdlYWtzZXQuZnJvbVxucmVxdWlyZSgnLi9fc2V0LWNvbGxlY3Rpb24tZnJvbScpKCdXZWFrU2V0Jyk7XG4iLCIvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vI3NlYy13ZWFrc2V0Lm9mXG5yZXF1aXJlKCcuL19zZXQtY29sbGVjdGlvbi1vZicpKCdXZWFrU2V0Jyk7XG4iLCJ2YXIgJGl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vZXM2LmFycmF5Lml0ZXJhdG9yJyk7XG52YXIgZ2V0S2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJyk7XG52YXIgd2tzID0gcmVxdWlyZSgnLi9fd2tzJyk7XG52YXIgSVRFUkFUT1IgPSB3a3MoJ2l0ZXJhdG9yJyk7XG52YXIgVE9fU1RSSU5HX1RBRyA9IHdrcygndG9TdHJpbmdUYWcnKTtcbnZhciBBcnJheVZhbHVlcyA9IEl0ZXJhdG9ycy5BcnJheTtcblxudmFyIERPTUl0ZXJhYmxlcyA9IHtcbiAgQ1NTUnVsZUxpc3Q6IHRydWUsIC8vIFRPRE86IE5vdCBzcGVjIGNvbXBsaWFudCwgc2hvdWxkIGJlIGZhbHNlLlxuICBDU1NTdHlsZURlY2xhcmF0aW9uOiBmYWxzZSxcbiAgQ1NTVmFsdWVMaXN0OiBmYWxzZSxcbiAgQ2xpZW50UmVjdExpc3Q6IGZhbHNlLFxuICBET01SZWN0TGlzdDogZmFsc2UsXG4gIERPTVN0cmluZ0xpc3Q6IGZhbHNlLFxuICBET01Ub2tlbkxpc3Q6IHRydWUsXG4gIERhdGFUcmFuc2Zlckl0ZW1MaXN0OiBmYWxzZSxcbiAgRmlsZUxpc3Q6IGZhbHNlLFxuICBIVE1MQWxsQ29sbGVjdGlvbjogZmFsc2UsXG4gIEhUTUxDb2xsZWN0aW9uOiBmYWxzZSxcbiAgSFRNTEZvcm1FbGVtZW50OiBmYWxzZSxcbiAgSFRNTFNlbGVjdEVsZW1lbnQ6IGZhbHNlLFxuICBNZWRpYUxpc3Q6IHRydWUsIC8vIFRPRE86IE5vdCBzcGVjIGNvbXBsaWFudCwgc2hvdWxkIGJlIGZhbHNlLlxuICBNaW1lVHlwZUFycmF5OiBmYWxzZSxcbiAgTmFtZWROb2RlTWFwOiBmYWxzZSxcbiAgTm9kZUxpc3Q6IHRydWUsXG4gIFBhaW50UmVxdWVzdExpc3Q6IGZhbHNlLFxuICBQbHVnaW46IGZhbHNlLFxuICBQbHVnaW5BcnJheTogZmFsc2UsXG4gIFNWR0xlbmd0aExpc3Q6IGZhbHNlLFxuICBTVkdOdW1iZXJMaXN0OiBmYWxzZSxcbiAgU1ZHUGF0aFNlZ0xpc3Q6IGZhbHNlLFxuICBTVkdQb2ludExpc3Q6IGZhbHNlLFxuICBTVkdTdHJpbmdMaXN0OiBmYWxzZSxcbiAgU1ZHVHJhbnNmb3JtTGlzdDogZmFsc2UsXG4gIFNvdXJjZUJ1ZmZlckxpc3Q6IGZhbHNlLFxuICBTdHlsZVNoZWV0TGlzdDogdHJ1ZSwgLy8gVE9ETzogTm90IHNwZWMgY29tcGxpYW50LCBzaG91bGQgYmUgZmFsc2UuXG4gIFRleHRUcmFja0N1ZUxpc3Q6IGZhbHNlLFxuICBUZXh0VHJhY2tMaXN0OiBmYWxzZSxcbiAgVG91Y2hMaXN0OiBmYWxzZVxufTtcblxuZm9yICh2YXIgY29sbGVjdGlvbnMgPSBnZXRLZXlzKERPTUl0ZXJhYmxlcyksIGkgPSAwOyBpIDwgY29sbGVjdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgdmFyIE5BTUUgPSBjb2xsZWN0aW9uc1tpXTtcbiAgdmFyIGV4cGxpY2l0ID0gRE9NSXRlcmFibGVzW05BTUVdO1xuICB2YXIgQ29sbGVjdGlvbiA9IGdsb2JhbFtOQU1FXTtcbiAgdmFyIHByb3RvID0gQ29sbGVjdGlvbiAmJiBDb2xsZWN0aW9uLnByb3RvdHlwZTtcbiAgdmFyIGtleTtcbiAgaWYgKHByb3RvKSB7XG4gICAgaWYgKCFwcm90b1tJVEVSQVRPUl0pIGhpZGUocHJvdG8sIElURVJBVE9SLCBBcnJheVZhbHVlcyk7XG4gICAgaWYgKCFwcm90b1tUT19TVFJJTkdfVEFHXSkgaGlkZShwcm90bywgVE9fU1RSSU5HX1RBRywgTkFNRSk7XG4gICAgSXRlcmF0b3JzW05BTUVdID0gQXJyYXlWYWx1ZXM7XG4gICAgaWYgKGV4cGxpY2l0KSBmb3IgKGtleSBpbiAkaXRlcmF0b3JzKSBpZiAoIXByb3RvW2tleV0pIHJlZGVmaW5lKHByb3RvLCBrZXksICRpdGVyYXRvcnNba2V5XSwgdHJ1ZSk7XG4gIH1cbn1cbiIsInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHRhc2sgPSByZXF1aXJlKCcuL190YXNrJyk7XG4kZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuQiwge1xuICBzZXRJbW1lZGlhdGU6ICR0YXNrLnNldCxcbiAgY2xlYXJJbW1lZGlhdGU6ICR0YXNrLmNsZWFyXG59KTtcbiIsIi8vIGllOS0gc2V0VGltZW91dCAmIHNldEludGVydmFsIGFkZGl0aW9uYWwgcGFyYW1ldGVycyBmaXhcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi9fdXNlci1hZ2VudCcpO1xudmFyIHNsaWNlID0gW10uc2xpY2U7XG52YXIgTVNJRSA9IC9NU0lFIC5cXC4vLnRlc3QodXNlckFnZW50KTsgLy8gPC0gZGlydHkgaWU5LSBjaGVja1xudmFyIHdyYXAgPSBmdW5jdGlvbiAoc2V0KSB7XG4gIHJldHVybiBmdW5jdGlvbiAoZm4sIHRpbWUgLyogLCAuLi5hcmdzICovKSB7XG4gICAgdmFyIGJvdW5kQXJncyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyO1xuICAgIHZhciBhcmdzID0gYm91bmRBcmdzID8gc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpIDogZmFsc2U7XG4gICAgcmV0dXJuIHNldChib3VuZEFyZ3MgPyBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmNcbiAgICAgICh0eXBlb2YgZm4gPT0gJ2Z1bmN0aW9uJyA/IGZuIDogRnVuY3Rpb24oZm4pKS5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9IDogZm4sIHRpbWUpO1xuICB9O1xufTtcbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5CICsgJGV4cG9ydC5GICogTVNJRSwge1xuICBzZXRUaW1lb3V0OiB3cmFwKGdsb2JhbC5zZXRUaW1lb3V0KSxcbiAgc2V0SW50ZXJ2YWw6IHdyYXAoZ2xvYmFsLnNldEludGVydmFsKVxufSk7XG4iLCJyZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN5bWJvbCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuY3JlYXRlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5kZWZpbmUtcHJvcGVydHknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmRlZmluZS1wcm9wZXJ0aWVzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmdldC1wcm90b3R5cGUtb2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmtleXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmdldC1vd24tcHJvcGVydHktbmFtZXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmZyZWV6ZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3Quc2VhbCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QucHJldmVudC1leHRlbnNpb25zJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5pcy1mcm96ZW4nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmlzLXNlYWxlZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuaXMtZXh0ZW5zaWJsZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuYXNzaWduJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5pcycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3Quc2V0LXByb3RvdHlwZS1vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QudG8tc3RyaW5nJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmZ1bmN0aW9uLmJpbmQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuZnVuY3Rpb24ubmFtZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5mdW5jdGlvbi5oYXMtaW5zdGFuY2UnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucGFyc2UtaW50Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnBhcnNlLWZsb2F0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci5jb25zdHJ1Y3RvcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIudG8tZml4ZWQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubnVtYmVyLnRvLXByZWNpc2lvbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIuZXBzaWxvbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIuaXMtZmluaXRlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci5pcy1pbnRlZ2VyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci5pcy1uYW4nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubnVtYmVyLmlzLXNhZmUtaW50ZWdlcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIubWF4LXNhZmUtaW50ZWdlcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIubWluLXNhZmUtaW50ZWdlcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIucGFyc2UtZmxvYXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubnVtYmVyLnBhcnNlLWludCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmFjb3NoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguYXNpbmgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5hdGFuaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmNicnQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5jbHozMicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmNvc2gnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5leHBtMScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmZyb3VuZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmh5cG90Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguaW11bCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmxvZzEwJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGgubG9nMXAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5sb2cyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguc2lnbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLnNpbmgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC50YW5oJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGgudHJ1bmMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLmZyb20tY29kZS1wb2ludCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcucmF3Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy50cmltJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuY29kZS1wb2ludC1hdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuZW5kcy13aXRoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5pbmNsdWRlcycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcucmVwZWF0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5zdGFydHMtd2l0aCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuYW5jaG9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5iaWcnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLmJsaW5rJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5ib2xkJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5maXhlZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuZm9udGNvbG9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5mb250c2l6ZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuaXRhbGljcycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcubGluaycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuc21hbGwnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLnN0cmlrZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuc3ViJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5zdXAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuZGF0ZS5ub3cnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuZGF0ZS50by1qc29uJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmRhdGUudG8taXNvLXN0cmluZycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5kYXRlLnRvLXN0cmluZycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5kYXRlLnRvLXByaW1pdGl2ZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5pcy1hcnJheScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5mcm9tJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5Lm9mJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmpvaW4nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuc2xpY2UnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuc29ydCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5mb3ItZWFjaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5tYXAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuZmlsdGVyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LnNvbWUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuZXZlcnknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkucmVkdWNlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LnJlZHVjZS1yaWdodCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5pbmRleC1vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5sYXN0LWluZGV4LW9mJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmNvcHktd2l0aGluJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmZpbGwnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuZmluZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5maW5kLWluZGV4Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LnNwZWNpZXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVnZXhwLmNvbnN0cnVjdG9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZ2V4cC5leGVjJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZ2V4cC50by1zdHJpbmcnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVnZXhwLmZsYWdzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZ2V4cC5tYXRjaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWdleHAucmVwbGFjZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWdleHAuc2VhcmNoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZ2V4cC5zcGxpdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5wcm9taXNlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hcCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zZXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYud2Vhay1tYXAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYud2Vhay1zZXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQuYXJyYXktYnVmZmVyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLmRhdGEtdmlldycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi50eXBlZC5pbnQ4LWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLnVpbnQ4LWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLnVpbnQ4LWNsYW1wZWQtYXJyYXknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQuaW50MTYtYXJyYXknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQudWludDE2LWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLmludDMyLWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLnVpbnQzMi1hcnJheScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi50eXBlZC5mbG9hdDMyLWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLmZsb2F0NjQtYXJyYXknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5hcHBseScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmNvbnN0cnVjdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmRlZmluZS1wcm9wZXJ0eScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmRlbGV0ZS1wcm9wZXJ0eScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmVudW1lcmF0ZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmdldCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmdldC1wcm90b3R5cGUtb2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5oYXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5pcy1leHRlbnNpYmxlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZmxlY3Qub3duLWtleXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5wcmV2ZW50LWV4dGVuc2lvbnMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5zZXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5zZXQtcHJvdG90eXBlLW9mJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LmFycmF5LmluY2x1ZGVzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LmFycmF5LmZsYXQtbWFwJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LmFycmF5LmZsYXR0ZW4nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc3RyaW5nLmF0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnN0cmluZy5wYWQtc3RhcnQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc3RyaW5nLnBhZC1lbmQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc3RyaW5nLnRyaW0tbGVmdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zdHJpbmcudHJpbS1yaWdodCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zdHJpbmcubWF0Y2gtYWxsJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnN5bWJvbC5hc3luYy1pdGVyYXRvcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zeW1ib2wub2JzZXJ2YWJsZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9ycycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5vYmplY3QudmFsdWVzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9iamVjdC5lbnRyaWVzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9iamVjdC5kZWZpbmUtZ2V0dGVyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9iamVjdC5kZWZpbmUtc2V0dGVyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9iamVjdC5sb29rdXAtZ2V0dGVyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9iamVjdC5sb29rdXAtc2V0dGVyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hcC50by1qc29uJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnNldC50by1qc29uJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hcC5vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zZXQub2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcud2Vhay1tYXAub2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcud2Vhay1zZXQub2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWFwLmZyb20nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc2V0LmZyb20nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcud2Vhay1tYXAuZnJvbScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy53ZWFrLXNldC5mcm9tJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lmdsb2JhbCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zeXN0ZW0uZ2xvYmFsJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LmVycm9yLmlzLWVycm9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGguY2xhbXAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5kZWctcGVyLXJhZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLmRlZ3JlZXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5mc2NhbGUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5pYWRkaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLmlzdWJoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGguaW11bGgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5yYWQtcGVyLWRlZycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLnJhZGlhbnMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5zY2FsZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLnVtdWxoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGguc2lnbmJpdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5wcm9taXNlLmZpbmFsbHknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucHJvbWlzZS50cnknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5kZWZpbmUtbWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5kZWxldGUtbWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtbWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtbWV0YWRhdGEta2V5cycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5yZWZsZWN0LmdldC1vd24tbWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtb3duLW1ldGFkYXRhLWtleXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5oYXMtbWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5oYXMtb3duLW1ldGFkYXRhJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnJlZmxlY3QubWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuYXNhcCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5vYnNlcnZhYmxlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvd2ViLnRpbWVycycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL3dlYi5pbW1lZGlhdGUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy93ZWIuZG9tLml0ZXJhYmxlJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vbW9kdWxlcy9fY29yZScpO1xuIiwiZXhwb3J0cy5yZWFkID0gZnVuY3Rpb24gKGJ1ZmZlciwgb2Zmc2V0LCBpc0xFLCBtTGVuLCBuQnl0ZXMpIHtcbiAgdmFyIGUsIG1cbiAgdmFyIGVMZW4gPSAobkJ5dGVzICogOCkgLSBtTGVuIC0gMVxuICB2YXIgZU1heCA9ICgxIDw8IGVMZW4pIC0gMVxuICB2YXIgZUJpYXMgPSBlTWF4ID4+IDFcbiAgdmFyIG5CaXRzID0gLTdcbiAgdmFyIGkgPSBpc0xFID8gKG5CeXRlcyAtIDEpIDogMFxuICB2YXIgZCA9IGlzTEUgPyAtMSA6IDFcbiAgdmFyIHMgPSBidWZmZXJbb2Zmc2V0ICsgaV1cblxuICBpICs9IGRcblxuICBlID0gcyAmICgoMSA8PCAoLW5CaXRzKSkgLSAxKVxuICBzID4+PSAoLW5CaXRzKVxuICBuQml0cyArPSBlTGVuXG4gIGZvciAoOyBuQml0cyA+IDA7IGUgPSAoZSAqIDI1NikgKyBidWZmZXJbb2Zmc2V0ICsgaV0sIGkgKz0gZCwgbkJpdHMgLT0gOCkge31cblxuICBtID0gZSAmICgoMSA8PCAoLW5CaXRzKSkgLSAxKVxuICBlID4+PSAoLW5CaXRzKVxuICBuQml0cyArPSBtTGVuXG4gIGZvciAoOyBuQml0cyA+IDA7IG0gPSAobSAqIDI1NikgKyBidWZmZXJbb2Zmc2V0ICsgaV0sIGkgKz0gZCwgbkJpdHMgLT0gOCkge31cblxuICBpZiAoZSA9PT0gMCkge1xuICAgIGUgPSAxIC0gZUJpYXNcbiAgfSBlbHNlIGlmIChlID09PSBlTWF4KSB7XG4gICAgcmV0dXJuIG0gPyBOYU4gOiAoKHMgPyAtMSA6IDEpICogSW5maW5pdHkpXG4gIH0gZWxzZSB7XG4gICAgbSA9IG0gKyBNYXRoLnBvdygyLCBtTGVuKVxuICAgIGUgPSBlIC0gZUJpYXNcbiAgfVxuICByZXR1cm4gKHMgPyAtMSA6IDEpICogbSAqIE1hdGgucG93KDIsIGUgLSBtTGVuKVxufVxuXG5leHBvcnRzLndyaXRlID0gZnVuY3Rpb24gKGJ1ZmZlciwgdmFsdWUsIG9mZnNldCwgaXNMRSwgbUxlbiwgbkJ5dGVzKSB7XG4gIHZhciBlLCBtLCBjXG4gIHZhciBlTGVuID0gKG5CeXRlcyAqIDgpIC0gbUxlbiAtIDFcbiAgdmFyIGVNYXggPSAoMSA8PCBlTGVuKSAtIDFcbiAgdmFyIGVCaWFzID0gZU1heCA+PiAxXG4gIHZhciBydCA9IChtTGVuID09PSAyMyA/IE1hdGgucG93KDIsIC0yNCkgLSBNYXRoLnBvdygyLCAtNzcpIDogMClcbiAgdmFyIGkgPSBpc0xFID8gMCA6IChuQnl0ZXMgLSAxKVxuICB2YXIgZCA9IGlzTEUgPyAxIDogLTFcbiAgdmFyIHMgPSB2YWx1ZSA8IDAgfHwgKHZhbHVlID09PSAwICYmIDEgLyB2YWx1ZSA8IDApID8gMSA6IDBcblxuICB2YWx1ZSA9IE1hdGguYWJzKHZhbHVlKVxuXG4gIGlmIChpc05hTih2YWx1ZSkgfHwgdmFsdWUgPT09IEluZmluaXR5KSB7XG4gICAgbSA9IGlzTmFOKHZhbHVlKSA/IDEgOiAwXG4gICAgZSA9IGVNYXhcbiAgfSBlbHNlIHtcbiAgICBlID0gTWF0aC5mbG9vcihNYXRoLmxvZyh2YWx1ZSkgLyBNYXRoLkxOMilcbiAgICBpZiAodmFsdWUgKiAoYyA9IE1hdGgucG93KDIsIC1lKSkgPCAxKSB7XG4gICAgICBlLS1cbiAgICAgIGMgKj0gMlxuICAgIH1cbiAgICBpZiAoZSArIGVCaWFzID49IDEpIHtcbiAgICAgIHZhbHVlICs9IHJ0IC8gY1xuICAgIH0gZWxzZSB7XG4gICAgICB2YWx1ZSArPSBydCAqIE1hdGgucG93KDIsIDEgLSBlQmlhcylcbiAgICB9XG4gICAgaWYgKHZhbHVlICogYyA+PSAyKSB7XG4gICAgICBlKytcbiAgICAgIGMgLz0gMlxuICAgIH1cblxuICAgIGlmIChlICsgZUJpYXMgPj0gZU1heCkge1xuICAgICAgbSA9IDBcbiAgICAgIGUgPSBlTWF4XG4gICAgfSBlbHNlIGlmIChlICsgZUJpYXMgPj0gMSkge1xuICAgICAgbSA9ICgodmFsdWUgKiBjKSAtIDEpICogTWF0aC5wb3coMiwgbUxlbilcbiAgICAgIGUgPSBlICsgZUJpYXNcbiAgICB9IGVsc2Uge1xuICAgICAgbSA9IHZhbHVlICogTWF0aC5wb3coMiwgZUJpYXMgLSAxKSAqIE1hdGgucG93KDIsIG1MZW4pXG4gICAgICBlID0gMFxuICAgIH1cbiAgfVxuXG4gIGZvciAoOyBtTGVuID49IDg7IGJ1ZmZlcltvZmZzZXQgKyBpXSA9IG0gJiAweGZmLCBpICs9IGQsIG0gLz0gMjU2LCBtTGVuIC09IDgpIHt9XG5cbiAgZSA9IChlIDw8IG1MZW4pIHwgbVxuICBlTGVuICs9IG1MZW5cbiAgZm9yICg7IGVMZW4gPiAwOyBidWZmZXJbb2Zmc2V0ICsgaV0gPSBlICYgMHhmZiwgaSArPSBkLCBlIC89IDI1NiwgZUxlbiAtPSA4KSB7fVxuXG4gIGJ1ZmZlcltvZmZzZXQgKyBpIC0gZF0gfD0gcyAqIDEyOFxufVxuIiwiLyoqXG4gKiBDb252ZXJ0IGFycmF5IG9mIDE2IGJ5dGUgdmFsdWVzIHRvIFVVSUQgc3RyaW5nIGZvcm1hdCBvZiB0aGUgZm9ybTpcbiAqIFhYWFhYWFhYLVhYWFgtWFhYWC1YWFhYLVhYWFhYWFhYWFhYWFxuICovXG52YXIgYnl0ZVRvSGV4ID0gW107XG5mb3IgKHZhciBpID0gMDsgaSA8IDI1NjsgKytpKSB7XG4gIGJ5dGVUb0hleFtpXSA9IChpICsgMHgxMDApLnRvU3RyaW5nKDE2KS5zdWJzdHIoMSk7XG59XG5cbmZ1bmN0aW9uIGJ5dGVzVG9VdWlkKGJ1Ziwgb2Zmc2V0KSB7XG4gIHZhciBpID0gb2Zmc2V0IHx8IDA7XG4gIHZhciBidGggPSBieXRlVG9IZXg7XG4gIC8vIGpvaW4gdXNlZCB0byBmaXggbWVtb3J5IGlzc3VlIGNhdXNlZCBieSBjb25jYXRlbmF0aW9uOiBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zMTc1I2M0XG4gIHJldHVybiAoW2J0aFtidWZbaSsrXV0sIGJ0aFtidWZbaSsrXV0sIFxuXHRidGhbYnVmW2krK11dLCBidGhbYnVmW2krK11dLCAnLScsXG5cdGJ0aFtidWZbaSsrXV0sIGJ0aFtidWZbaSsrXV0sICctJyxcblx0YnRoW2J1ZltpKytdXSwgYnRoW2J1ZltpKytdXSwgJy0nLFxuXHRidGhbYnVmW2krK11dLCBidGhbYnVmW2krK11dLCAnLScsXG5cdGJ0aFtidWZbaSsrXV0sIGJ0aFtidWZbaSsrXV0sXG5cdGJ0aFtidWZbaSsrXV0sIGJ0aFtidWZbaSsrXV0sXG5cdGJ0aFtidWZbaSsrXV0sIGJ0aFtidWZbaSsrXV1dKS5qb2luKCcnKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBieXRlc1RvVXVpZDtcbiIsIi8vIFVuaXF1ZSBJRCBjcmVhdGlvbiByZXF1aXJlcyBhIGhpZ2ggcXVhbGl0eSByYW5kb20gIyBnZW5lcmF0b3IuICBJbiB0aGVcbi8vIGJyb3dzZXIgdGhpcyBpcyBhIGxpdHRsZSBjb21wbGljYXRlZCBkdWUgdG8gdW5rbm93biBxdWFsaXR5IG9mIE1hdGgucmFuZG9tKClcbi8vIGFuZCBpbmNvbnNpc3RlbnQgc3VwcG9ydCBmb3IgdGhlIGBjcnlwdG9gIEFQSS4gIFdlIGRvIHRoZSBiZXN0IHdlIGNhbiB2aWFcbi8vIGZlYXR1cmUtZGV0ZWN0aW9uXG5cbi8vIGdldFJhbmRvbVZhbHVlcyBuZWVkcyB0byBiZSBpbnZva2VkIGluIGEgY29udGV4dCB3aGVyZSBcInRoaXNcIiBpcyBhIENyeXB0b1xuLy8gaW1wbGVtZW50YXRpb24uIEFsc28sIGZpbmQgdGhlIGNvbXBsZXRlIGltcGxlbWVudGF0aW9uIG9mIGNyeXB0byBvbiBJRTExLlxudmFyIGdldFJhbmRvbVZhbHVlcyA9ICh0eXBlb2YoY3J5cHRvKSAhPSAndW5kZWZpbmVkJyAmJiBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzICYmIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMuYmluZChjcnlwdG8pKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICh0eXBlb2YobXNDcnlwdG8pICE9ICd1bmRlZmluZWQnICYmIHR5cGVvZiB3aW5kb3cubXNDcnlwdG8uZ2V0UmFuZG9tVmFsdWVzID09ICdmdW5jdGlvbicgJiYgbXNDcnlwdG8uZ2V0UmFuZG9tVmFsdWVzLmJpbmQobXNDcnlwdG8pKTtcblxuaWYgKGdldFJhbmRvbVZhbHVlcykge1xuICAvLyBXSEFUV0cgY3J5cHRvIFJORyAtIGh0dHA6Ly93aWtpLndoYXR3Zy5vcmcvd2lraS9DcnlwdG9cbiAgdmFyIHJuZHM4ID0gbmV3IFVpbnQ4QXJyYXkoMTYpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmXG5cbiAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiB3aGF0d2dSTkcoKSB7XG4gICAgZ2V0UmFuZG9tVmFsdWVzKHJuZHM4KTtcbiAgICByZXR1cm4gcm5kczg7XG4gIH07XG59IGVsc2Uge1xuICAvLyBNYXRoLnJhbmRvbSgpLWJhc2VkIChSTkcpXG4gIC8vXG4gIC8vIElmIGFsbCBlbHNlIGZhaWxzLCB1c2UgTWF0aC5yYW5kb20oKS4gIEl0J3MgZmFzdCwgYnV0IGlzIG9mIHVuc3BlY2lmaWVkXG4gIC8vIHF1YWxpdHkuXG4gIHZhciBybmRzID0gbmV3IEFycmF5KDE2KTtcblxuICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIG1hdGhSTkcoKSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIHI7IGkgPCAxNjsgaSsrKSB7XG4gICAgICBpZiAoKGkgJiAweDAzKSA9PT0gMCkgciA9IE1hdGgucmFuZG9tKCkgKiAweDEwMDAwMDAwMDtcbiAgICAgIHJuZHNbaV0gPSByID4+PiAoKGkgJiAweDAzKSA8PCAzKSAmIDB4ZmY7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJuZHM7XG4gIH07XG59XG4iLCJ2YXIgcm5nID0gcmVxdWlyZSgnLi9saWIvcm5nJyk7XG52YXIgYnl0ZXNUb1V1aWQgPSByZXF1aXJlKCcuL2xpYi9ieXRlc1RvVXVpZCcpO1xuXG5mdW5jdGlvbiB2NChvcHRpb25zLCBidWYsIG9mZnNldCkge1xuICB2YXIgaSA9IGJ1ZiAmJiBvZmZzZXQgfHwgMDtcblxuICBpZiAodHlwZW9mKG9wdGlvbnMpID09ICdzdHJpbmcnKSB7XG4gICAgYnVmID0gb3B0aW9ucyA9PT0gJ2JpbmFyeScgPyBuZXcgQXJyYXkoMTYpIDogbnVsbDtcbiAgICBvcHRpb25zID0gbnVsbDtcbiAgfVxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICB2YXIgcm5kcyA9IG9wdGlvbnMucmFuZG9tIHx8IChvcHRpb25zLnJuZyB8fCBybmcpKCk7XG5cbiAgLy8gUGVyIDQuNCwgc2V0IGJpdHMgZm9yIHZlcnNpb24gYW5kIGBjbG9ja19zZXFfaGlfYW5kX3Jlc2VydmVkYFxuICBybmRzWzZdID0gKHJuZHNbNl0gJiAweDBmKSB8IDB4NDA7XG4gIHJuZHNbOF0gPSAocm5kc1s4XSAmIDB4M2YpIHwgMHg4MDtcblxuICAvLyBDb3B5IGJ5dGVzIHRvIGJ1ZmZlciwgaWYgcHJvdmlkZWRcbiAgaWYgKGJ1Zikge1xuICAgIGZvciAodmFyIGlpID0gMDsgaWkgPCAxNjsgKytpaSkge1xuICAgICAgYnVmW2kgKyBpaV0gPSBybmRzW2lpXTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gYnVmIHx8IGJ5dGVzVG9VdWlkKHJuZHMpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHY0O1xuIiwidmFyIGc7XG5cbi8vIFRoaXMgd29ya3MgaW4gbm9uLXN0cmljdCBtb2RlXG5nID0gKGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gdGhpcztcbn0pKCk7XG5cbnRyeSB7XG5cdC8vIFRoaXMgd29ya3MgaWYgZXZhbCBpcyBhbGxvd2VkIChzZWUgQ1NQKVxuXHRnID0gZyB8fCBuZXcgRnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpO1xufSBjYXRjaCAoZSkge1xuXHQvLyBUaGlzIHdvcmtzIGlmIHRoZSB3aW5kb3cgcmVmZXJlbmNlIGlzIGF2YWlsYWJsZVxuXHRpZiAodHlwZW9mIHdpbmRvdyA9PT0gXCJvYmplY3RcIikgZyA9IHdpbmRvdztcbn1cblxuLy8gZyBjYW4gc3RpbGwgYmUgdW5kZWZpbmVkLCBidXQgbm90aGluZyB0byBkbyBhYm91dCBpdC4uLlxuLy8gV2UgcmV0dXJuIHVuZGVmaW5lZCwgaW5zdGVhZCBvZiBub3RoaW5nIGhlcmUsIHNvIGl0J3Ncbi8vIGVhc2llciB0byBoYW5kbGUgdGhpcyBjYXNlLiBpZighZ2xvYmFsKSB7IC4uLn1cblxubW9kdWxlLmV4cG9ydHMgPSBnO1xuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG5cclxuaW1wb3J0IHsgTG9nIH0gZnJvbSAnLi9Mb2cuanMnO1xyXG5pbXBvcnQgeyBUaW1lciB9IGZyb20gJy4vVGltZXIuanMnO1xyXG5cclxuY29uc3QgRGVmYXVsdEFjY2Vzc1Rva2VuRXhwaXJpbmdOb3RpZmljYXRpb25UaW1lID0gNjA7IC8vIHNlY29uZHNcclxuXHJcbmV4cG9ydCBjbGFzcyBBY2Nlc3NUb2tlbkV2ZW50cyB7XHJcblxyXG4gICAgY29uc3RydWN0b3Ioe1xyXG4gICAgICAgIGFjY2Vzc1Rva2VuRXhwaXJpbmdOb3RpZmljYXRpb25UaW1lID0gRGVmYXVsdEFjY2Vzc1Rva2VuRXhwaXJpbmdOb3RpZmljYXRpb25UaW1lLFxyXG4gICAgICAgIGFjY2Vzc1Rva2VuRXhwaXJpbmdUaW1lciA9IG5ldyBUaW1lcihcIkFjY2VzcyB0b2tlbiBleHBpcmluZ1wiKSxcclxuICAgICAgICBhY2Nlc3NUb2tlbkV4cGlyZWRUaW1lciA9IG5ldyBUaW1lcihcIkFjY2VzcyB0b2tlbiBleHBpcmVkXCIpXHJcbiAgICB9ID0ge30pIHtcclxuICAgICAgICB0aGlzLl9hY2Nlc3NUb2tlbkV4cGlyaW5nTm90aWZpY2F0aW9uVGltZSA9IGFjY2Vzc1Rva2VuRXhwaXJpbmdOb3RpZmljYXRpb25UaW1lO1xyXG5cclxuICAgICAgICB0aGlzLl9hY2Nlc3NUb2tlbkV4cGlyaW5nID0gYWNjZXNzVG9rZW5FeHBpcmluZ1RpbWVyO1xyXG4gICAgICAgIHRoaXMuX2FjY2Vzc1Rva2VuRXhwaXJlZCA9IGFjY2Vzc1Rva2VuRXhwaXJlZFRpbWVyO1xyXG4gICAgfVxyXG5cclxuICAgIGxvYWQoY29udGFpbmVyKSB7XHJcbiAgICAgICAgLy8gb25seSByZWdpc3RlciBldmVudHMgaWYgdGhlcmUncyBhbiBhY2Nlc3MgdG9rZW4gYW5kIGl0IGhhcyBhbiBleHBpcmF0aW9uXHJcbiAgICAgICAgaWYgKGNvbnRhaW5lci5hY2Nlc3NfdG9rZW4gJiYgY29udGFpbmVyLmV4cGlyZXNfaW4gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBsZXQgZHVyYXRpb24gPSBjb250YWluZXIuZXhwaXJlc19pbjtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiQWNjZXNzVG9rZW5FdmVudHMubG9hZDogYWNjZXNzIHRva2VuIHByZXNlbnQsIHJlbWFpbmluZyBkdXJhdGlvbjpcIiwgZHVyYXRpb24pO1xyXG5cclxuICAgICAgICAgICAgaWYgKGR1cmF0aW9uID4gMCkge1xyXG4gICAgICAgICAgICAgICAgLy8gb25seSByZWdpc3RlciBleHBpcmluZyBpZiB3ZSBzdGlsbCBoYXZlIHRpbWVcclxuICAgICAgICAgICAgICAgIGxldCBleHBpcmluZyA9IGR1cmF0aW9uIC0gdGhpcy5fYWNjZXNzVG9rZW5FeHBpcmluZ05vdGlmaWNhdGlvblRpbWU7XHJcbiAgICAgICAgICAgICAgICBpZiAoZXhwaXJpbmcgPD0gMCl7XHJcbiAgICAgICAgICAgICAgICAgICAgZXhwaXJpbmcgPSAxO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJBY2Nlc3NUb2tlbkV2ZW50cy5sb2FkOiByZWdpc3RlcmluZyBleHBpcmluZyB0aW1lciBpbjpcIiwgZXhwaXJpbmcpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fYWNjZXNzVG9rZW5FeHBpcmluZy5pbml0KGV4cGlyaW5nKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIkFjY2Vzc1Rva2VuRXZlbnRzLmxvYWQ6IGNhbmNlbGluZyBleGlzdGluZyBleHBpcmluZyB0aW1lciBiZWNhc2Ugd2UncmUgcGFzdCBleHBpcmF0aW9uLlwiKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2FjY2Vzc1Rva2VuRXhwaXJpbmcuY2FuY2VsKCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIGlmIGl0J3MgbmVnYXRpdmUsIGl0IHdpbGwgc3RpbGwgZmlyZVxyXG4gICAgICAgICAgICBsZXQgZXhwaXJlZCA9IGR1cmF0aW9uICsgMTtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiQWNjZXNzVG9rZW5FdmVudHMubG9hZDogcmVnaXN0ZXJpbmcgZXhwaXJlZCB0aW1lciBpbjpcIiwgZXhwaXJlZCk7XHJcbiAgICAgICAgICAgIHRoaXMuX2FjY2Vzc1Rva2VuRXhwaXJlZC5pbml0KGV4cGlyZWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5fYWNjZXNzVG9rZW5FeHBpcmluZy5jYW5jZWwoKTtcclxuICAgICAgICAgICAgdGhpcy5fYWNjZXNzVG9rZW5FeHBpcmVkLmNhbmNlbCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB1bmxvYWQoKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiQWNjZXNzVG9rZW5FdmVudHMudW5sb2FkOiBjYW5jZWxpbmcgZXhpc3RpbmcgYWNjZXNzIHRva2VuIHRpbWVyc1wiKTtcclxuICAgICAgICB0aGlzLl9hY2Nlc3NUb2tlbkV4cGlyaW5nLmNhbmNlbCgpO1xyXG4gICAgICAgIHRoaXMuX2FjY2Vzc1Rva2VuRXhwaXJlZC5jYW5jZWwoKTtcclxuICAgIH1cclxuXHJcbiAgICBhZGRBY2Nlc3NUb2tlbkV4cGlyaW5nKGNiKSB7XHJcbiAgICAgICAgdGhpcy5fYWNjZXNzVG9rZW5FeHBpcmluZy5hZGRIYW5kbGVyKGNiKTtcclxuICAgIH1cclxuICAgIHJlbW92ZUFjY2Vzc1Rva2VuRXhwaXJpbmcoY2IpIHtcclxuICAgICAgICB0aGlzLl9hY2Nlc3NUb2tlbkV4cGlyaW5nLnJlbW92ZUhhbmRsZXIoY2IpO1xyXG4gICAgfVxyXG5cclxuICAgIGFkZEFjY2Vzc1Rva2VuRXhwaXJlZChjYikge1xyXG4gICAgICAgIHRoaXMuX2FjY2Vzc1Rva2VuRXhwaXJlZC5hZGRIYW5kbGVyKGNiKTtcclxuICAgIH1cclxuICAgIHJlbW92ZUFjY2Vzc1Rva2VuRXhwaXJlZChjYikge1xyXG4gICAgICAgIHRoaXMuX2FjY2Vzc1Rva2VuRXhwaXJlZC5yZW1vdmVIYW5kbGVyKGNiKTtcclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcblxyXG5jb25zdCBEZWZhdWx0SW50ZXJ2YWwgPSAyMDAwO1xyXG5cclxuZXhwb3J0IGNsYXNzIENoZWNrU2Vzc2lvbklGcmFtZSB7XHJcbiAgICBjb25zdHJ1Y3RvcihjYWxsYmFjaywgY2xpZW50X2lkLCB1cmwsIGludGVydmFsLCBzdG9wT25FcnJvciA9IHRydWUpIHtcclxuICAgICAgICB0aGlzLl9jYWxsYmFjayA9IGNhbGxiYWNrO1xyXG4gICAgICAgIHRoaXMuX2NsaWVudF9pZCA9IGNsaWVudF9pZDtcclxuICAgICAgICB0aGlzLl91cmwgPSB1cmw7XHJcbiAgICAgICAgdGhpcy5faW50ZXJ2YWwgPSBpbnRlcnZhbCB8fCBEZWZhdWx0SW50ZXJ2YWw7XHJcbiAgICAgICAgdGhpcy5fc3RvcE9uRXJyb3IgPSBzdG9wT25FcnJvcjtcclxuXHJcbiAgICAgICAgdmFyIGlkeCA9IHVybC5pbmRleE9mKFwiL1wiLCB1cmwuaW5kZXhPZihcIi8vXCIpICsgMik7XHJcbiAgICAgICAgdGhpcy5fZnJhbWVfb3JpZ2luID0gdXJsLnN1YnN0cigwLCBpZHgpO1xyXG5cclxuICAgICAgICB0aGlzLl9mcmFtZSA9IHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaWZyYW1lXCIpO1xyXG5cclxuICAgICAgICAvLyBzaG90Z3VuIGFwcHJvYWNoXHJcbiAgICAgICAgdGhpcy5fZnJhbWUuc3R5bGUudmlzaWJpbGl0eSA9IFwiaGlkZGVuXCI7XHJcbiAgICAgICAgdGhpcy5fZnJhbWUuc3R5bGUucG9zaXRpb24gPSBcImFic29sdXRlXCI7XHJcbiAgICAgICAgdGhpcy5fZnJhbWUuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xyXG4gICAgICAgIHRoaXMuX2ZyYW1lLnN0eWxlLndpZHRoID0gMDtcclxuICAgICAgICB0aGlzLl9mcmFtZS5zdHlsZS5oZWlnaHQgPSAwO1xyXG5cclxuICAgICAgICB0aGlzLl9mcmFtZS5zcmMgPSB1cmw7XHJcbiAgICB9XHJcbiAgICBsb2FkKCkge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLl9mcmFtZS5vbmxvYWQgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHdpbmRvdy5kb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRoaXMuX2ZyYW1lKTtcclxuICAgICAgICAgICAgdGhpcy5fYm91bmRNZXNzYWdlRXZlbnQgPSB0aGlzLl9tZXNzYWdlLmJpbmQodGhpcyk7XHJcbiAgICAgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCB0aGlzLl9ib3VuZE1lc3NhZ2VFdmVudCwgZmFsc2UpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgX21lc3NhZ2UoZSkge1xyXG4gICAgICAgIGlmIChlLm9yaWdpbiA9PT0gdGhpcy5fZnJhbWVfb3JpZ2luICYmXHJcbiAgICAgICAgICAgIGUuc291cmNlID09PSB0aGlzLl9mcmFtZS5jb250ZW50V2luZG93XHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGlmIChlLmRhdGEgPT09IFwiZXJyb3JcIikge1xyXG4gICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiQ2hlY2tTZXNzaW9uSUZyYW1lOiBlcnJvciBtZXNzYWdlIGZyb20gY2hlY2sgc2Vzc2lvbiBvcCBpZnJhbWVcIik7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fc3RvcE9uRXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0b3AoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChlLmRhdGEgPT09IFwiY2hhbmdlZFwiKSB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJDaGVja1Nlc3Npb25JRnJhbWU6IGNoYW5nZWQgbWVzc2FnZSBmcm9tIGNoZWNrIHNlc3Npb24gb3AgaWZyYW1lXCIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdG9wKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9jYWxsYmFjaygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiQ2hlY2tTZXNzaW9uSUZyYW1lOiBcIiArIGUuZGF0YSArIFwiIG1lc3NhZ2UgZnJvbSBjaGVjayBzZXNzaW9uIG9wIGlmcmFtZVwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHN0YXJ0KHNlc3Npb25fc3RhdGUpIHtcclxuICAgICAgICBpZiAodGhpcy5fc2Vzc2lvbl9zdGF0ZSAhPT0gc2Vzc2lvbl9zdGF0ZSkge1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJDaGVja1Nlc3Npb25JRnJhbWUuc3RhcnRcIik7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0b3AoKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuX3Nlc3Npb25fc3RhdGUgPSBzZXNzaW9uX3N0YXRlO1xyXG5cclxuICAgICAgICAgICAgbGV0IHNlbmQgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9mcmFtZS5jb250ZW50V2luZG93LnBvc3RNZXNzYWdlKHRoaXMuX2NsaWVudF9pZCArIFwiIFwiICsgdGhpcy5fc2Vzc2lvbl9zdGF0ZSwgdGhpcy5fZnJhbWVfb3JpZ2luKTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8vIHRyaWdnZXIgbm93XHJcbiAgICAgICAgICAgIHNlbmQoKTtcclxuXHJcbiAgICAgICAgICAgIC8vIGFuZCBzZXR1cCB0aW1lclxyXG4gICAgICAgICAgICB0aGlzLl90aW1lciA9IHdpbmRvdy5zZXRJbnRlcnZhbChzZW5kLCB0aGlzLl9pbnRlcnZhbCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHN0b3AoKSB7XHJcbiAgICAgICAgdGhpcy5fc2Vzc2lvbl9zdGF0ZSA9IG51bGw7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl90aW1lcikge1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJDaGVja1Nlc3Npb25JRnJhbWUuc3RvcFwiKTtcclxuXHJcbiAgICAgICAgICAgIHdpbmRvdy5jbGVhckludGVydmFsKHRoaXMuX3RpbWVyKTtcclxuICAgICAgICAgICAgdGhpcy5fdGltZXIgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBDb3Jkb3ZhUG9wdXBXaW5kb3cgfSBmcm9tICcuL0NvcmRvdmFQb3B1cFdpbmRvdy5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ29yZG92YUlGcmFtZU5hdmlnYXRvciB7XHJcblxyXG4gICAgcHJlcGFyZShwYXJhbXMpIHtcclxuICAgICAgICBwYXJhbXMucG9wdXBXaW5kb3dGZWF0dXJlcyA9ICdoaWRkZW49eWVzJztcclxuICAgICAgICBsZXQgcG9wdXAgPSBuZXcgQ29yZG92YVBvcHVwV2luZG93KHBhcmFtcyk7XHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShwb3B1cCk7XHJcbiAgICB9XHJcbn1cclxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG5cclxuaW1wb3J0IHsgQ29yZG92YVBvcHVwV2luZG93IH0gZnJvbSAnLi9Db3Jkb3ZhUG9wdXBXaW5kb3cuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvcmRvdmFQb3B1cE5hdmlnYXRvciB7XHJcblxyXG4gICAgcHJlcGFyZShwYXJhbXMpIHtcclxuICAgICAgICBsZXQgcG9wdXAgPSBuZXcgQ29yZG92YVBvcHVwV2luZG93KHBhcmFtcyk7XHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShwb3B1cCk7XHJcbiAgICB9XHJcbn1cclxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG5cclxuaW1wb3J0IHsgTG9nIH0gZnJvbSAnLi9Mb2cuanMnO1xyXG5cclxuY29uc3QgRGVmYXVsdFBvcHVwRmVhdHVyZXMgPSAnbG9jYXRpb249bm8sdG9vbGJhcj1ubyx6b29tPW5vJztcclxuY29uc3QgRGVmYXVsdFBvcHVwVGFyZ2V0ID0gXCJfYmxhbmtcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBDb3Jkb3ZhUG9wdXBXaW5kb3cge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHBhcmFtcykge1xyXG4gICAgICAgIHRoaXMuX3Byb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuX3Jlc29sdmUgPSByZXNvbHZlO1xyXG4gICAgICAgICAgICB0aGlzLl9yZWplY3QgPSByZWplY3Q7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuZmVhdHVyZXMgPSBwYXJhbXMucG9wdXBXaW5kb3dGZWF0dXJlcyB8fCBEZWZhdWx0UG9wdXBGZWF0dXJlcztcclxuICAgICAgICB0aGlzLnRhcmdldCA9IHBhcmFtcy5wb3B1cFdpbmRvd1RhcmdldCB8fCBEZWZhdWx0UG9wdXBUYXJnZXQ7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5yZWRpcmVjdF91cmkgPSBwYXJhbXMuc3RhcnRVcmw7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiQ29yZG92YVBvcHVwV2luZG93LmN0b3I6IHJlZGlyZWN0X3VyaTogXCIgKyB0aGlzLnJlZGlyZWN0X3VyaSk7XHJcbiAgICB9XHJcblxyXG4gICAgX2lzSW5BcHBCcm93c2VySW5zdGFsbGVkKGNvcmRvdmFNZXRhZGF0YSkge1xyXG4gICAgICAgIHJldHVybiBbXCJjb3Jkb3ZhLXBsdWdpbi1pbmFwcGJyb3dzZXJcIiwgXCJjb3Jkb3ZhLXBsdWdpbi1pbmFwcGJyb3dzZXIuaW5hcHBicm93c2VyXCIsIFwib3JnLmFwYWNoZS5jb3Jkb3ZhLmluYXBwYnJvd3NlclwiXS5zb21lKGZ1bmN0aW9uIChuYW1lKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBjb3Jkb3ZhTWV0YWRhdGEuaGFzT3duUHJvcGVydHkobmFtZSlcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG4gICAgXHJcbiAgICBuYXZpZ2F0ZShwYXJhbXMpIHtcclxuICAgICAgICBpZiAoIXBhcmFtcyB8fCAhcGFyYW1zLnVybCkge1xyXG4gICAgICAgICAgICB0aGlzLl9lcnJvcihcIk5vIHVybCBwcm92aWRlZFwiKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoIXdpbmRvdy5jb3Jkb3ZhKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZXJyb3IoXCJjb3Jkb3ZhIGlzIHVuZGVmaW5lZFwiKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB2YXIgY29yZG92YU1ldGFkYXRhID0gd2luZG93LmNvcmRvdmEucmVxdWlyZShcImNvcmRvdmEvcGx1Z2luX2xpc3RcIikubWV0YWRhdGE7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9pc0luQXBwQnJvd3Nlckluc3RhbGxlZChjb3Jkb3ZhTWV0YWRhdGEpID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Vycm9yKFwiSW5BcHBCcm93c2VyIHBsdWdpbiBub3QgZm91bmRcIilcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLl9wb3B1cCA9IGNvcmRvdmEuSW5BcHBCcm93c2VyLm9wZW4ocGFyYW1zLnVybCwgdGhpcy50YXJnZXQsIHRoaXMuZmVhdHVyZXMpO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fcG9wdXApIHtcclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIkNvcmRvdmFQb3B1cFdpbmRvdy5uYXZpZ2F0ZTogcG9wdXAgc3VjY2Vzc2Z1bGx5IGNyZWF0ZWRcIik7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIHRoaXMuX2V4aXRDYWxsYmFja0V2ZW50ID0gdGhpcy5fZXhpdENhbGxiYWNrLmJpbmQodGhpcyk7IFxyXG4gICAgICAgICAgICAgICAgdGhpcy5fbG9hZFN0YXJ0Q2FsbGJhY2tFdmVudCA9IHRoaXMuX2xvYWRTdGFydENhbGxiYWNrLmJpbmQodGhpcyk7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIHRoaXMuX3BvcHVwLmFkZEV2ZW50TGlzdGVuZXIoXCJleGl0XCIsIHRoaXMuX2V4aXRDYWxsYmFja0V2ZW50LCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9wb3B1cC5hZGRFdmVudExpc3RlbmVyKFwibG9hZHN0YXJ0XCIsIHRoaXMuX2xvYWRTdGFydENhbGxiYWNrRXZlbnQsIGZhbHNlKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2Vycm9yKFwiRXJyb3Igb3BlbmluZyBwb3B1cCB3aW5kb3dcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvbWlzZTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgcHJvbWlzZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcHJvbWlzZTtcclxuICAgIH1cclxuXHJcbiAgICBfbG9hZFN0YXJ0Q2FsbGJhY2soZXZlbnQpIHtcclxuICAgICAgICBpZiAoZXZlbnQudXJsLmluZGV4T2YodGhpcy5yZWRpcmVjdF91cmkpID09PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3N1Y2Nlc3MoeyB1cmw6IGV2ZW50LnVybCB9KTtcclxuICAgICAgICB9ICAgIFxyXG4gICAgfVxyXG4gICAgX2V4aXRDYWxsYmFjayhtZXNzYWdlKSB7XHJcbiAgICAgICAgdGhpcy5fZXJyb3IobWVzc2FnZSk7ICAgIFxyXG4gICAgfVxyXG4gICAgXHJcbiAgICBfc3VjY2VzcyhkYXRhKSB7XHJcbiAgICAgICAgdGhpcy5fY2xlYW51cCgpO1xyXG5cclxuICAgICAgICBMb2cuZGVidWcoXCJDb3Jkb3ZhUG9wdXBXaW5kb3c6IFN1Y2Nlc3NmdWwgcmVzcG9uc2UgZnJvbSBjb3Jkb3ZhIHBvcHVwIHdpbmRvd1wiKTtcclxuICAgICAgICB0aGlzLl9yZXNvbHZlKGRhdGEpO1xyXG4gICAgfVxyXG4gICAgX2Vycm9yKG1lc3NhZ2UpIHtcclxuICAgICAgICB0aGlzLl9jbGVhbnVwKCk7XHJcblxyXG4gICAgICAgIExvZy5lcnJvcihtZXNzYWdlKTtcclxuICAgICAgICB0aGlzLl9yZWplY3QobmV3IEVycm9yKG1lc3NhZ2UpKTtcclxuICAgIH1cclxuXHJcbiAgICBjbG9zZSgpIHtcclxuICAgICAgICB0aGlzLl9jbGVhbnVwKCk7XHJcbiAgICB9XHJcblxyXG4gICAgX2NsZWFudXAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3BvcHVwKXtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiQ29yZG92YVBvcHVwV2luZG93OiBjbGVhbmluZyB1cCBwb3B1cFwiKTtcclxuICAgICAgICAgICAgdGhpcy5fcG9wdXAucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImV4aXRcIiwgdGhpcy5fZXhpdENhbGxiYWNrRXZlbnQsIGZhbHNlKTtcclxuICAgICAgICAgICAgdGhpcy5fcG9wdXAucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImxvYWRzdGFydFwiLCB0aGlzLl9sb2FkU3RhcnRDYWxsYmFja0V2ZW50LCBmYWxzZSk7XHJcbiAgICAgICAgICAgIHRoaXMuX3BvcHVwLmNsb3NlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX3BvcHVwID0gbnVsbDtcclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgRXJyb3JSZXNwb25zZSBleHRlbmRzIEVycm9yIHtcclxuICAgIGNvbnN0cnVjdG9yKHtlcnJvciwgZXJyb3JfZGVzY3JpcHRpb24sIGVycm9yX3VyaSwgc3RhdGUsIHNlc3Npb25fc3RhdGV9PXt9XHJcbiAgICApIHtcclxuICAgICAgICAgaWYgKCFlcnJvcil7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIk5vIGVycm9yIHBhc3NlZCB0byBFcnJvclJlc3BvbnNlXCIpO1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJlcnJvclwiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHN1cGVyKGVycm9yX2Rlc2NyaXB0aW9uIHx8IGVycm9yKTtcclxuXHJcbiAgICAgICAgdGhpcy5uYW1lID0gXCJFcnJvclJlc3BvbnNlXCI7XHJcblxyXG4gICAgICAgIHRoaXMuZXJyb3IgPSBlcnJvcjtcclxuICAgICAgICB0aGlzLmVycm9yX2Rlc2NyaXB0aW9uID0gZXJyb3JfZGVzY3JpcHRpb247XHJcbiAgICAgICAgdGhpcy5lcnJvcl91cmkgPSBlcnJvcl91cmk7XHJcblxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBzdGF0ZTtcclxuICAgICAgICB0aGlzLnNlc3Npb25fc3RhdGUgPSBzZXNzaW9uX3N0YXRlO1xyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBFdmVudCB7XHJcblxyXG4gICAgY29uc3RydWN0b3IobmFtZSkge1xyXG4gICAgICAgIHRoaXMuX25hbWUgPSBuYW1lO1xyXG4gICAgICAgIHRoaXMuX2NhbGxiYWNrcyA9IFtdO1xyXG4gICAgfVxyXG5cclxuICAgIGFkZEhhbmRsZXIoY2IpIHtcclxuICAgICAgICB0aGlzLl9jYWxsYmFja3MucHVzaChjYik7XHJcbiAgICB9XHJcblxyXG4gICAgcmVtb3ZlSGFuZGxlcihjYikge1xyXG4gICAgICAgIHZhciBpZHggPSB0aGlzLl9jYWxsYmFja3MuZmluZEluZGV4KGl0ZW0gPT4gaXRlbSA9PT0gY2IpO1xyXG4gICAgICAgIGlmIChpZHggPj0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLl9jYWxsYmFja3Muc3BsaWNlKGlkeCwgMSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJhaXNlKC4uLnBhcmFtcykge1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIkV2ZW50OiBSYWlzaW5nIGV2ZW50OiBcIiArIHRoaXMuX25hbWUpO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5fY2FsbGJhY2tzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2NhbGxiYWNrc1tpXSguLi5wYXJhbXMpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5jb25zdCB0aW1lciA9IHtcclxuICAgIHNldEludGVydmFsOiBmdW5jdGlvbiAoY2IsIGR1cmF0aW9uKSB7XHJcbiAgICAgICAgcmV0dXJuIHNldEludGVydmFsKGNiLCBkdXJhdGlvbik7XHJcbiAgICB9LFxyXG4gICAgY2xlYXJJbnRlcnZhbDogZnVuY3Rpb24gKGhhbmRsZSkge1xyXG4gICAgICAgIHJldHVybiBjbGVhckludGVydmFsKGhhbmRsZSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5sZXQgdGVzdGluZyA9IGZhbHNlO1xyXG5sZXQgcmVxdWVzdCA9IG51bGw7XHJcblxyXG5leHBvcnQgY2xhc3MgR2xvYmFsIHtcclxuXHJcbiAgICBzdGF0aWMgX3Rlc3RpbmcoKSB7XHJcbiAgICAgICAgdGVzdGluZyA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGdldCBsb2NhdGlvbigpIHtcclxuICAgICAgICBpZiAoIXRlc3RpbmcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGxvY2F0aW9uO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZ2V0IGxvY2FsU3RvcmFnZSgpIHtcclxuICAgICAgICBpZiAoIXRlc3RpbmcgJiYgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGxvY2FsU3RvcmFnZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGdldCBzZXNzaW9uU3RvcmFnZSgpIHtcclxuICAgICAgICBpZiAoIXRlc3RpbmcgJiYgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHNlc3Npb25TdG9yYWdlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgc2V0WE1MSHR0cFJlcXVlc3QobmV3UmVxdWVzdCkge1xyXG4gICAgICAgIHJlcXVlc3QgPSBuZXdSZXF1ZXN0O1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBnZXQgWE1MSHR0cFJlcXVlc3QoKSB7XHJcbiAgICAgICAgaWYgKCF0ZXN0aW5nICYmIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiByZXF1ZXN0IHx8IFhNTEh0dHBSZXF1ZXN0O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZ2V0IHRpbWVyKCkge1xyXG4gICAgICAgIGlmICghdGVzdGluZykge1xyXG4gICAgICAgICAgICByZXR1cm4gdGltZXI7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuaW1wb3J0IHsgSUZyYW1lV2luZG93IH0gZnJvbSAnLi9JRnJhbWVXaW5kb3cuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIElGcmFtZU5hdmlnYXRvciB7XHJcblxyXG4gICAgcHJlcGFyZShwYXJhbXMpIHtcclxuICAgICAgICBsZXQgZnJhbWUgPSBuZXcgSUZyYW1lV2luZG93KHBhcmFtcyk7XHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmcmFtZSk7XHJcbiAgICB9XHJcblxyXG4gICAgY2FsbGJhY2sodXJsKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiSUZyYW1lTmF2aWdhdG9yLmNhbGxiYWNrXCIpO1xyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBJRnJhbWVXaW5kb3cubm90aWZ5UGFyZW50KHVybCk7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcblxyXG5jb25zdCBEZWZhdWx0VGltZW91dCA9IDEwMDAwO1xyXG5cclxuZXhwb3J0IGNsYXNzIElGcmFtZVdpbmRvdyB7XHJcblxyXG4gICAgY29uc3RydWN0b3IocGFyYW1zKSB7XHJcbiAgICAgICAgdGhpcy5fcHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5fcmVzb2x2ZSA9IHJlc29sdmU7XHJcbiAgICAgICAgICAgIHRoaXMuX3JlamVjdCA9IHJlamVjdDtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5fYm91bmRNZXNzYWdlRXZlbnQgPSB0aGlzLl9tZXNzYWdlLmJpbmQodGhpcyk7XHJcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIHRoaXMuX2JvdW5kTWVzc2FnZUV2ZW50LCBmYWxzZSk7XHJcblxyXG4gICAgICAgIHRoaXMuX2ZyYW1lID0gd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpZnJhbWVcIik7XHJcblxyXG4gICAgICAgIC8vIHNob3RndW4gYXBwcm9hY2hcclxuICAgICAgICB0aGlzLl9mcmFtZS5zdHlsZS52aXNpYmlsaXR5ID0gXCJoaWRkZW5cIjtcclxuICAgICAgICB0aGlzLl9mcmFtZS5zdHlsZS5wb3NpdGlvbiA9IFwiYWJzb2x1dGVcIjtcclxuICAgICAgICB0aGlzLl9mcmFtZS5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XHJcbiAgICAgICAgdGhpcy5fZnJhbWUuc3R5bGUud2lkdGggPSAwO1xyXG4gICAgICAgIHRoaXMuX2ZyYW1lLnN0eWxlLmhlaWdodCA9IDA7XHJcblxyXG4gICAgICAgIHdpbmRvdy5kb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRoaXMuX2ZyYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICBuYXZpZ2F0ZShwYXJhbXMpIHtcclxuICAgICAgICBpZiAoIXBhcmFtcyB8fCAhcGFyYW1zLnVybCkge1xyXG4gICAgICAgICAgICB0aGlzLl9lcnJvcihcIk5vIHVybCBwcm92aWRlZFwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGxldCB0aW1lb3V0ID0gcGFyYW1zLnNpbGVudFJlcXVlc3RUaW1lb3V0IHx8IERlZmF1bHRUaW1lb3V0O1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJJRnJhbWVXaW5kb3cubmF2aWdhdGU6IFVzaW5nIHRpbWVvdXQgb2Y6XCIsIHRpbWVvdXQpO1xyXG4gICAgICAgICAgICB0aGlzLl90aW1lciA9IHdpbmRvdy5zZXRUaW1lb3V0KHRoaXMuX3RpbWVvdXQuYmluZCh0aGlzKSwgdGltZW91dCk7XHJcbiAgICAgICAgICAgIHRoaXMuX2ZyYW1lLnNyYyA9IHBhcmFtcy51cmw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5wcm9taXNlO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBwcm9taXNlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9wcm9taXNlO1xyXG4gICAgfVxyXG5cclxuICAgIF9zdWNjZXNzKGRhdGEpIHtcclxuICAgICAgICB0aGlzLl9jbGVhbnVwKCk7XHJcblxyXG4gICAgICAgIExvZy5kZWJ1ZyhcIklGcmFtZVdpbmRvdzogU3VjY2Vzc2Z1bCByZXNwb25zZSBmcm9tIGZyYW1lIHdpbmRvd1wiKTtcclxuICAgICAgICB0aGlzLl9yZXNvbHZlKGRhdGEpO1xyXG4gICAgfVxyXG4gICAgX2Vycm9yKG1lc3NhZ2UpIHtcclxuICAgICAgICB0aGlzLl9jbGVhbnVwKCk7XHJcblxyXG4gICAgICAgIExvZy5lcnJvcihtZXNzYWdlKTtcclxuICAgICAgICB0aGlzLl9yZWplY3QobmV3IEVycm9yKG1lc3NhZ2UpKTtcclxuICAgIH1cclxuXHJcbiAgICBjbG9zZSgpIHtcclxuICAgICAgICB0aGlzLl9jbGVhbnVwKCk7XHJcbiAgICB9XHJcblxyXG4gICAgX2NsZWFudXAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2ZyYW1lKSB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIklGcmFtZVdpbmRvdzogY2xlYW51cFwiKTtcclxuXHJcbiAgICAgICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCB0aGlzLl9ib3VuZE1lc3NhZ2VFdmVudCwgZmFsc2UpO1xyXG4gICAgICAgICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVyKTtcclxuICAgICAgICAgICAgd2luZG93LmRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodGhpcy5fZnJhbWUpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5fdGltZXIgPSBudWxsO1xyXG4gICAgICAgICAgICB0aGlzLl9mcmFtZSA9IG51bGw7XHJcbiAgICAgICAgICAgIHRoaXMuX2JvdW5kTWVzc2FnZUV2ZW50ID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgX3RpbWVvdXQoKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiSUZyYW1lV2luZG93LnRpbWVvdXRcIik7XHJcbiAgICAgICAgdGhpcy5fZXJyb3IoXCJGcmFtZSB3aW5kb3cgdGltZWQgb3V0XCIpO1xyXG4gICAgfVxyXG5cclxuICAgIF9tZXNzYWdlKGUpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJJRnJhbWVXaW5kb3cubWVzc2FnZVwiKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX3RpbWVyICYmXHJcbiAgICAgICAgICAgIGUub3JpZ2luID09PSB0aGlzLl9vcmlnaW4gJiZcclxuICAgICAgICAgICAgZS5zb3VyY2UgPT09IHRoaXMuX2ZyYW1lLmNvbnRlbnRXaW5kb3dcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgbGV0IHVybCA9IGUuZGF0YTtcclxuICAgICAgICAgICAgaWYgKHVybCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fc3VjY2Vzcyh7IHVybDogdXJsIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fZXJyb3IoXCJJbnZhbGlkIHJlc3BvbnNlIGZyb20gZnJhbWVcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IF9vcmlnaW4oKSB7XHJcbiAgICAgICAgcmV0dXJuIGxvY2F0aW9uLnByb3RvY29sICsgXCIvL1wiICsgbG9jYXRpb24uaG9zdDtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgbm90aWZ5UGFyZW50KHVybCkge1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIklGcmFtZVdpbmRvdy5ub3RpZnlQYXJlbnRcIik7XHJcbiAgICAgICAgaWYgKHdpbmRvdy5mcmFtZUVsZW1lbnQpIHtcclxuICAgICAgICAgICAgdXJsID0gdXJsIHx8IHdpbmRvdy5sb2NhdGlvbi5ocmVmO1xyXG4gICAgICAgICAgICBpZiAodXJsKSB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJJRnJhbWVXaW5kb3cubm90aWZ5UGFyZW50OiBwb3N0aW5nIHVybCBtZXNzYWdlIHRvIHBhcmVudFwiKTtcclxuICAgICAgICAgICAgICAgIHdpbmRvdy5wYXJlbnQucG9zdE1lc3NhZ2UodXJsLCBsb2NhdGlvbi5wcm90b2NvbCArIFwiLy9cIiArIGxvY2F0aW9uLmhvc3QpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBJbk1lbW9yeVdlYlN0b3JhZ2V7XHJcbiAgICBjb25zdHJ1Y3Rvcigpe1xyXG4gICAgICAgIHRoaXMuX2RhdGEgPSB7fTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRJdGVtKGtleSkge1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIkluTWVtb3J5V2ViU3RvcmFnZS5nZXRJdGVtXCIsIGtleSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGFba2V5XTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRJdGVtKGtleSwgdmFsdWUpe1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIkluTWVtb3J5V2ViU3RvcmFnZS5zZXRJdGVtXCIsIGtleSk7XHJcbiAgICAgICAgdGhpcy5fZGF0YVtrZXldID0gdmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmVtb3ZlSXRlbShrZXkpe1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIkluTWVtb3J5V2ViU3RvcmFnZS5yZW1vdmVJdGVtXCIsIGtleSk7XHJcbiAgICAgICAgZGVsZXRlIHRoaXMuX2RhdGFba2V5XTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgbGVuZ3RoKCkge1xyXG4gICAgICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0aGlzLl9kYXRhKS5sZW5ndGg7XHJcbiAgICB9XHJcblxyXG4gICAga2V5KGluZGV4KSB7XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMuX2RhdGEpW2luZGV4XTtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQgeyBqd3MsIEtleVV0aWwsIFg1MDksIGNyeXB0bywgaGV4dG9iNjR1LCBiNjR0b2hleCwgQWxsb3dlZFNpZ25pbmdBbGdzIH0gZnJvbSAnLi9jcnlwdG8vanNyc2FzaWduJztcclxuaW1wb3J0IGdldEpvc2VVdGlsIGZyb20gJy4vSm9zZVV0aWxJbXBsJztcclxuXHJcbmV4cG9ydCBjb25zdCBKb3NlVXRpbCA9IGdldEpvc2VVdGlsKHsgandzLCBLZXlVdGlsLCBYNTA5LCBjcnlwdG8sIGhleHRvYjY0dSwgYjY0dG9oZXgsIEFsbG93ZWRTaWduaW5nQWxncyB9KTtcclxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG5cclxuaW1wb3J0IHsgTG9nIH0gZnJvbSAnLi9Mb2cuanMnO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0Sm9zZVV0aWwoeyBqd3MsIEtleVV0aWwsIFg1MDksIGNyeXB0bywgaGV4dG9iNjR1LCBiNjR0b2hleCwgQWxsb3dlZFNpZ25pbmdBbGdzIH0pIHtcclxuICAgIHJldHVybiBjbGFzcyBKb3NlVXRpbCB7XHJcblxyXG4gICAgICAgIHN0YXRpYyBwYXJzZUp3dChqd3QpIHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiSm9zZVV0aWwucGFyc2VKd3RcIik7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgdG9rZW4gPSBqd3MuSldTLnBhcnNlKGp3dCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcjogdG9rZW4uaGVhZGVyT2JqLFxyXG4gICAgICAgICAgICAgICAgICAgIHBheWxvYWQ6IHRva2VuLnBheWxvYWRPYmpcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgTG9nLmVycm9yKGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzdGF0aWMgdmFsaWRhdGVKd3Qoand0LCBrZXksIGlzc3VlciwgYXVkaWVuY2UsIGNsb2NrU2tldywgbm93LCB0aW1lSW5zZW5zaXRpdmUpIHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiSm9zZVV0aWwudmFsaWRhdGVKd3RcIik7XHJcblxyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGtleS5rdHkgPT09IFwiUlNBXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5LmUgJiYga2V5Lm4pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAga2V5ID0gS2V5VXRpbC5nZXRLZXkoa2V5KTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGtleS54NWMgJiYga2V5Lng1Yy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhleCA9IGI2NHRvaGV4KGtleS54NWNbMF0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBrZXkgPSBYNTA5LmdldFB1YmxpY0tleUZyb21DZXJ0SGV4KGhleCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiSm9zZVV0aWwudmFsaWRhdGVKd3Q6IFJTQSBrZXkgbWlzc2luZyBrZXkgbWF0ZXJpYWxcIiwga2V5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIlJTQSBrZXkgbWlzc2luZyBrZXkgbWF0ZXJpYWxcIikpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoa2V5Lmt0eSA9PT0gXCJFQ1wiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGtleS5jcnYgJiYga2V5LnggJiYga2V5LnkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAga2V5ID0gS2V5VXRpbC5nZXRLZXkoa2V5KTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJKb3NlVXRpbC52YWxpZGF0ZUp3dDogRUMga2V5IG1pc3Npbmcga2V5IG1hdGVyaWFsXCIsIGtleSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJFQyBrZXkgbWlzc2luZyBrZXkgbWF0ZXJpYWxcIikpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiSm9zZVV0aWwudmFsaWRhdGVKd3Q6IFVuc3VwcG9ydGVkIGtleSB0eXBlXCIsIGtleSAmJiBrZXkua3R5KTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiVW5zdXBwb3J0ZWQga2V5IHR5cGU6IFwiICsga2V5ICYmIGtleS5rdHkpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gSm9zZVV0aWwuX3ZhbGlkYXRlSnd0KGp3dCwga2V5LCBpc3N1ZXIsIGF1ZGllbmNlLCBjbG9ja1NrZXcsIG5vdywgdGltZUluc2Vuc2l0aXZlKTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgTG9nLmVycm9yKGUgJiYgZS5tZXNzYWdlIHx8IGUpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KFwiSldUIHZhbGlkYXRpb24gZmFpbGVkXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzdGF0aWMgdmFsaWRhdGVKd3RBdHRyaWJ1dGVzKGp3dCwgaXNzdWVyLCBhdWRpZW5jZSwgY2xvY2tTa2V3LCBub3csIHRpbWVJbnNlbnNpdGl2ZSkge1xyXG4gICAgICAgICAgICBpZiAoIWNsb2NrU2tldykge1xyXG4gICAgICAgICAgICAgICAgY2xvY2tTa2V3ID0gMDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKCFub3cpIHtcclxuICAgICAgICAgICAgICAgIG5vdyA9IHBhcnNlSW50KERhdGUubm93KCkgLyAxMDAwKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmFyIHBheWxvYWQgPSBKb3NlVXRpbC5wYXJzZUp3dChqd3QpLnBheWxvYWQ7XHJcblxyXG4gICAgICAgICAgICBpZiAoIXBheWxvYWQuaXNzKSB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJKb3NlVXRpbC5fdmFsaWRhdGVKd3Q6IGlzc3VlciB3YXMgbm90IHByb3ZpZGVkXCIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcImlzc3VlciB3YXMgbm90IHByb3ZpZGVkXCIpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAocGF5bG9hZC5pc3MgIT09IGlzc3Vlcikge1xyXG4gICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiSm9zZVV0aWwuX3ZhbGlkYXRlSnd0OiBJbnZhbGlkIGlzc3VlciBpbiB0b2tlblwiLCBwYXlsb2FkLmlzcyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiSW52YWxpZCBpc3N1ZXIgaW4gdG9rZW46IFwiICsgcGF5bG9hZC5pc3MpKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKCFwYXlsb2FkLmF1ZCkge1xyXG4gICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiSm9zZVV0aWwuX3ZhbGlkYXRlSnd0OiBhdWQgd2FzIG5vdCBwcm92aWRlZFwiKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJhdWQgd2FzIG5vdCBwcm92aWRlZFwiKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIHZhbGlkQXVkaWVuY2UgPSBwYXlsb2FkLmF1ZCA9PT0gYXVkaWVuY2UgfHwgKEFycmF5LmlzQXJyYXkocGF5bG9hZC5hdWQpICYmIHBheWxvYWQuYXVkLmluZGV4T2YoYXVkaWVuY2UpID49IDApO1xyXG4gICAgICAgICAgICBpZiAoIXZhbGlkQXVkaWVuY2UpIHtcclxuICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIkpvc2VVdGlsLl92YWxpZGF0ZUp3dDogSW52YWxpZCBhdWRpZW5jZSBpbiB0b2tlblwiLCBwYXlsb2FkLmF1ZCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiSW52YWxpZCBhdWRpZW5jZSBpbiB0b2tlbjogXCIgKyBwYXlsb2FkLmF1ZCkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChwYXlsb2FkLmF6cCAmJiBwYXlsb2FkLmF6cCAhPT0gYXVkaWVuY2UpIHtcclxuICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIkpvc2VVdGlsLl92YWxpZGF0ZUp3dDogSW52YWxpZCBhenAgaW4gdG9rZW5cIiwgcGF5bG9hZC5henApO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIkludmFsaWQgYXpwIGluIHRva2VuOiBcIiArIHBheWxvYWQuYXpwKSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICghdGltZUluc2Vuc2l0aXZlKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgbG93ZXJOb3cgPSBub3cgKyBjbG9ja1NrZXc7XHJcbiAgICAgICAgICAgICAgICB2YXIgdXBwZXJOb3cgPSBub3cgLSBjbG9ja1NrZXc7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKCFwYXlsb2FkLmlhdCkge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIkpvc2VVdGlsLl92YWxpZGF0ZUp3dDogaWF0IHdhcyBub3QgcHJvdmlkZWRcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcImlhdCB3YXMgbm90IHByb3ZpZGVkXCIpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChsb3dlck5vdyA8IHBheWxvYWQuaWF0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiSm9zZVV0aWwuX3ZhbGlkYXRlSnd0OiBpYXQgaXMgaW4gdGhlIGZ1dHVyZVwiLCBwYXlsb2FkLmlhdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcImlhdCBpcyBpbiB0aGUgZnV0dXJlOiBcIiArIHBheWxvYWQuaWF0KSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHBheWxvYWQubmJmICYmIGxvd2VyTm93IDwgcGF5bG9hZC5uYmYpIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJKb3NlVXRpbC5fdmFsaWRhdGVKd3Q6IG5iZiBpcyBpbiB0aGUgZnV0dXJlXCIsIHBheWxvYWQubmJmKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwibmJmIGlzIGluIHRoZSBmdXR1cmU6IFwiICsgcGF5bG9hZC5uYmYpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoIXBheWxvYWQuZXhwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiSm9zZVV0aWwuX3ZhbGlkYXRlSnd0OiBleHAgd2FzIG5vdCBwcm92aWRlZFwiKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiZXhwIHdhcyBub3QgcHJvdmlkZWRcIikpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHBheWxvYWQuZXhwIDwgdXBwZXJOb3cpIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJKb3NlVXRpbC5fdmFsaWRhdGVKd3Q6IGV4cCBpcyBpbiB0aGUgcGFzdFwiLCBwYXlsb2FkLmV4cCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcImV4cCBpcyBpbiB0aGUgcGFzdDpcIiArIHBheWxvYWQuZXhwKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocGF5bG9hZCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzdGF0aWMgX3ZhbGlkYXRlSnd0KGp3dCwga2V5LCBpc3N1ZXIsIGF1ZGllbmNlLCBjbG9ja1NrZXcsIG5vdywgdGltZUluc2Vuc2l0aXZlKSB7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gSm9zZVV0aWwudmFsaWRhdGVKd3RBdHRyaWJ1dGVzKGp3dCwgaXNzdWVyLCBhdWRpZW5jZSwgY2xvY2tTa2V3LCBub3csIHRpbWVJbnNlbnNpdGl2ZSkudGhlbihwYXlsb2FkID0+IHtcclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFqd3MuSldTLnZlcmlmeShqd3QsIGtleSwgQWxsb3dlZFNpZ25pbmdBbGdzKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJKb3NlVXRpbC5fdmFsaWRhdGVKd3Q6IHNpZ25hdHVyZSB2YWxpZGF0aW9uIGZhaWxlZFwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcInNpZ25hdHVyZSB2YWxpZGF0aW9uIGZhaWxlZFwiKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGF5bG9hZDtcclxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoZSAmJiBlLm1lc3NhZ2UgfHwgZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcInNpZ25hdHVyZSB2YWxpZGF0aW9uIGZhaWxlZFwiKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc3RhdGljIGhhc2hTdHJpbmcodmFsdWUsIGFsZykge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNyeXB0by5VdGlsLmhhc2hTdHJpbmcodmFsdWUsIGFsZyk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIExvZy5lcnJvcihlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc3RhdGljIGhleFRvQmFzZTY0VXJsKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaGV4dG9iNjR1KHZhbHVlKTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgTG9nLmVycm9yKGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuaW1wb3J0IHsgR2xvYmFsIH0gZnJvbSAnLi9HbG9iYWwuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEpzb25TZXJ2aWNlIHtcclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIGFkZGl0aW9uYWxDb250ZW50VHlwZXMgPSBudWxsLCBcclxuICAgICAgICBYTUxIdHRwUmVxdWVzdEN0b3IgPSBHbG9iYWwuWE1MSHR0cFJlcXVlc3QsIFxyXG4gICAgICAgIGp3dEhhbmRsZXIgPSBudWxsXHJcbiAgICApIHtcclxuICAgICAgICBpZiAoYWRkaXRpb25hbENvbnRlbnRUeXBlcyAmJiBBcnJheS5pc0FycmF5KGFkZGl0aW9uYWxDb250ZW50VHlwZXMpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5fY29udGVudFR5cGVzID0gYWRkaXRpb25hbENvbnRlbnRUeXBlcy5zbGljZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLl9jb250ZW50VHlwZXMgPSBbXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fY29udGVudFR5cGVzLnB1c2goJ2FwcGxpY2F0aW9uL2pzb24nKTtcclxuICAgICAgICBpZiAoand0SGFuZGxlcikge1xyXG4gICAgICAgICAgICB0aGlzLl9jb250ZW50VHlwZXMucHVzaCgnYXBwbGljYXRpb24vand0Jyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9YTUxIdHRwUmVxdWVzdCA9IFhNTEh0dHBSZXF1ZXN0Q3RvcjtcclxuICAgICAgICB0aGlzLl9qd3RIYW5kbGVyID0gand0SGFuZGxlcjtcclxuICAgIH1cclxuXHJcbiAgICBnZXRKc29uKHVybCwgdG9rZW4pIHtcclxuICAgICAgICBpZiAoIXVybCl7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIkpzb25TZXJ2aWNlLmdldEpzb246IE5vIHVybCBwYXNzZWRcIik7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInVybFwiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIExvZy5kZWJ1ZyhcIkpzb25TZXJ2aWNlLmdldEpzb24sIHVybDogXCIsIHVybCk7XHJcblxyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcblxyXG4gICAgICAgICAgICB2YXIgcmVxID0gbmV3IHRoaXMuX1hNTEh0dHBSZXF1ZXN0KCk7XHJcbiAgICAgICAgICAgIHJlcS5vcGVuKCdHRVQnLCB1cmwpO1xyXG5cclxuICAgICAgICAgICAgdmFyIGFsbG93ZWRDb250ZW50VHlwZXMgPSB0aGlzLl9jb250ZW50VHlwZXM7XHJcbiAgICAgICAgICAgIHZhciBqd3RIYW5kbGVyID0gdGhpcy5fand0SGFuZGxlcjtcclxuXHJcbiAgICAgICAgICAgIHJlcS5vbmxvYWQgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIkpzb25TZXJ2aWNlLmdldEpzb246IEhUVFAgcmVzcG9uc2UgcmVjZWl2ZWQsIHN0YXR1c1wiLCByZXEuc3RhdHVzKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAocmVxLnN0YXR1cyA9PT0gMjAwKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHZhciBjb250ZW50VHlwZSA9IHJlcS5nZXRSZXNwb25zZUhlYWRlcihcIkNvbnRlbnQtVHlwZVwiKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY29udGVudFR5cGUpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmb3VuZCA9IGFsbG93ZWRDb250ZW50VHlwZXMuZmluZChpdGVtPT57XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29udGVudFR5cGUuc3RhcnRzV2l0aChpdGVtKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmb3VuZCA9PSBcImFwcGxpY2F0aW9uL2p3dFwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBqd3RIYW5kbGVyKHJlcSkudGhlbihyZXNvbHZlLCByZWplY3QpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm91bmQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShKU09OLnBhcnNlKHJlcS5yZXNwb25zZVRleHQpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIkpzb25TZXJ2aWNlLmdldEpzb246IEVycm9yIHBhcnNpbmcgSlNPTiByZXNwb25zZVwiLCBlLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChFcnJvcihcIkludmFsaWQgcmVzcG9uc2UgQ29udGVudC1UeXBlOiBcIiArIGNvbnRlbnRUeXBlICsgXCIsIGZyb20gVVJMOiBcIiArIHVybCkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KEVycm9yKHJlcS5zdGF0dXNUZXh0ICsgXCIgKFwiICsgcmVxLnN0YXR1cyArIFwiKVwiKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICByZXEub25lcnJvciA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiSnNvblNlcnZpY2UuZ2V0SnNvbjogbmV0d29yayBlcnJvclwiKTtcclxuICAgICAgICAgICAgICAgIHJlamVjdChFcnJvcihcIk5ldHdvcmsgRXJyb3JcIikpO1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgaWYgKHRva2VuKSB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJKc29uU2VydmljZS5nZXRKc29uOiB0b2tlbiBwYXNzZWQsIHNldHRpbmcgQXV0aG9yaXphdGlvbiBoZWFkZXJcIik7XHJcbiAgICAgICAgICAgICAgICByZXEuc2V0UmVxdWVzdEhlYWRlcihcIkF1dGhvcml6YXRpb25cIiwgXCJCZWFyZXIgXCIgKyB0b2tlbik7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJlcS5zZW5kKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcG9zdEZvcm0odXJsLCBwYXlsb2FkKSB7XHJcbiAgICAgICAgaWYgKCF1cmwpe1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJKc29uU2VydmljZS5wb3N0Rm9ybTogTm8gdXJsIHBhc3NlZFwiKTtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidXJsXCIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgTG9nLmRlYnVnKFwiSnNvblNlcnZpY2UucG9zdEZvcm0sIHVybDogXCIsIHVybCk7XHJcblxyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcblxyXG4gICAgICAgICAgICB2YXIgcmVxID0gbmV3IHRoaXMuX1hNTEh0dHBSZXF1ZXN0KCk7XHJcbiAgICAgICAgICAgIHJlcS5vcGVuKCdQT1NUJywgdXJsKTtcclxuXHJcbiAgICAgICAgICAgIHZhciBhbGxvd2VkQ29udGVudFR5cGVzID0gdGhpcy5fY29udGVudFR5cGVzO1xyXG5cclxuICAgICAgICAgICAgcmVxLm9ubG9hZCA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiSnNvblNlcnZpY2UucG9zdEZvcm06IEhUVFAgcmVzcG9uc2UgcmVjZWl2ZWQsIHN0YXR1c1wiLCByZXEuc3RhdHVzKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAocmVxLnN0YXR1cyA9PT0gMjAwKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHZhciBjb250ZW50VHlwZSA9IHJlcS5nZXRSZXNwb25zZUhlYWRlcihcIkNvbnRlbnQtVHlwZVwiKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY29udGVudFR5cGUpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmb3VuZCA9IGFsbG93ZWRDb250ZW50VHlwZXMuZmluZChpdGVtPT57XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29udGVudFR5cGUuc3RhcnRzV2l0aChpdGVtKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmb3VuZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKEpTT04ucGFyc2UocmVxLnJlc3BvbnNlVGV4dCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiSnNvblNlcnZpY2UucG9zdEZvcm06IEVycm9yIHBhcnNpbmcgSlNPTiByZXNwb25zZVwiLCBlLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChFcnJvcihcIkludmFsaWQgcmVzcG9uc2UgQ29udGVudC1UeXBlOiBcIiArIGNvbnRlbnRUeXBlICsgXCIsIGZyb20gVVJMOiBcIiArIHVybCkpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAocmVxLnN0YXR1cyA9PT0gNDAwKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHZhciBjb250ZW50VHlwZSA9IHJlcS5nZXRSZXNwb25zZUhlYWRlcihcIkNvbnRlbnQtVHlwZVwiKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY29udGVudFR5cGUpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmb3VuZCA9IGFsbG93ZWRDb250ZW50VHlwZXMuZmluZChpdGVtPT57XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29udGVudFR5cGUuc3RhcnRzV2l0aChpdGVtKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmb3VuZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGF5bG9hZCA9IEpTT04ucGFyc2UocmVxLnJlc3BvbnNlVGV4dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBheWxvYWQgJiYgcGF5bG9hZC5lcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJKc29uU2VydmljZS5wb3N0Rm9ybTogRXJyb3IgZnJvbSBzZXJ2ZXI6IFwiLCBwYXlsb2FkLmVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihwYXlsb2FkLmVycm9yKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIkpzb25TZXJ2aWNlLnBvc3RGb3JtOiBFcnJvciBwYXJzaW5nIEpTT04gcmVzcG9uc2VcIiwgZS5tZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHJlamVjdChFcnJvcihyZXEuc3RhdHVzVGV4dCArIFwiIChcIiArIHJlcS5zdGF0dXMgKyBcIilcIikpO1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgcmVxLm9uZXJyb3IgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIkpzb25TZXJ2aWNlLnBvc3RGb3JtOiBuZXR3b3JrIGVycm9yXCIpO1xyXG4gICAgICAgICAgICAgICAgcmVqZWN0KEVycm9yKFwiTmV0d29yayBFcnJvclwiKSk7XHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBsZXQgYm9keSA9IFwiXCI7XHJcbiAgICAgICAgICAgIGZvcihsZXQga2V5IGluIHBheWxvYWQpIHtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSBwYXlsb2FkW2tleV07XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChib2R5Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYm9keSArPSBcIiZcIjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGJvZHkgKz0gZW5jb2RlVVJJQ29tcG9uZW50KGtleSk7XHJcbiAgICAgICAgICAgICAgICAgICAgYm9keSArPSBcIj1cIjtcclxuICAgICAgICAgICAgICAgICAgICBib2R5ICs9IGVuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJlcS5zZXRSZXF1ZXN0SGVhZGVyKFwiQ29udGVudC1UeXBlXCIsIFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXCIpO1xyXG4gICAgICAgICAgICByZXEuc2VuZChib2R5KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5sZXQgbm9wTG9nZ2VyID0ge1xyXG4gICAgZGVidWcoKXt9LFxyXG4gICAgaW5mbygpe30sXHJcbiAgICB3YXJuKCl7fSxcclxuICAgIGVycm9yKCl7fVxyXG59O1xyXG5cclxuY29uc3QgTk9ORSA9IDA7XHJcbmNvbnN0IEVSUk9SID0gMTtcclxuY29uc3QgV0FSTiA9IDI7XHJcbmNvbnN0IElORk8gPSAzO1xyXG5jb25zdCBERUJVRyA9IDQ7XHJcblxyXG5sZXQgbG9nZ2VyO1xyXG5sZXQgbGV2ZWw7XHJcblxyXG5leHBvcnQgY2xhc3MgTG9nIHtcclxuICAgIHN0YXRpYyBnZXQgTk9ORSgpIHtyZXR1cm4gTk9ORX07XHJcbiAgICBzdGF0aWMgZ2V0IEVSUk9SKCkge3JldHVybiBFUlJPUn07XHJcbiAgICBzdGF0aWMgZ2V0IFdBUk4oKSB7cmV0dXJuIFdBUk59O1xyXG4gICAgc3RhdGljIGdldCBJTkZPKCkge3JldHVybiBJTkZPfTtcclxuICAgIHN0YXRpYyBnZXQgREVCVUcoKSB7cmV0dXJuIERFQlVHfTtcclxuICAgIFxyXG4gICAgc3RhdGljIHJlc2V0KCl7XHJcbiAgICAgICAgbGV2ZWwgPSBJTkZPO1xyXG4gICAgICAgIGxvZ2dlciA9IG5vcExvZ2dlcjtcclxuICAgIH1cclxuICAgIFxyXG4gICAgc3RhdGljIGdldCBsZXZlbCgpe1xyXG4gICAgICAgIHJldHVybiBsZXZlbDtcclxuICAgIH1cclxuICAgIHN0YXRpYyBzZXQgbGV2ZWwodmFsdWUpe1xyXG4gICAgICAgIGlmIChOT05FIDw9IHZhbHVlICYmIHZhbHVlIDw9IERFQlVHKXtcclxuICAgICAgICAgICAgbGV2ZWwgPSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgbG9nIGxldmVsXCIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIFxyXG4gICAgc3RhdGljIGdldCBsb2dnZXIoKXtcclxuICAgICAgICByZXR1cm4gbG9nZ2VyO1xyXG4gICAgfVxyXG4gICAgc3RhdGljIHNldCBsb2dnZXIodmFsdWUpe1xyXG4gICAgICAgIGlmICghdmFsdWUuZGVidWcgJiYgdmFsdWUuaW5mbykge1xyXG4gICAgICAgICAgICAvLyBqdXN0IHRvIHN0YXkgYmFja3dhcmRzIGNvbXBhdC4gY2FuIHJlbW92ZSBpbiAyLjBcclxuICAgICAgICAgICAgdmFsdWUuZGVidWcgPSB2YWx1ZS5pbmZvO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHZhbHVlLmRlYnVnICYmIHZhbHVlLmluZm8gJiYgdmFsdWUud2FybiAmJiB2YWx1ZS5lcnJvcil7XHJcbiAgICAgICAgICAgIGxvZ2dlciA9IHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBsb2dnZXJcIik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgXHJcbiAgICBzdGF0aWMgZGVidWcoLi4uYXJncyl7XHJcbiAgICAgICAgaWYgKGxldmVsID49IERFQlVHKXtcclxuICAgICAgICAgICAgbG9nZ2VyLmRlYnVnLmFwcGx5KGxvZ2dlciwgQXJyYXkuZnJvbShhcmdzKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgc3RhdGljIGluZm8oLi4uYXJncyl7XHJcbiAgICAgICAgaWYgKGxldmVsID49IElORk8pe1xyXG4gICAgICAgICAgICBsb2dnZXIuaW5mby5hcHBseShsb2dnZXIsIEFycmF5LmZyb20oYXJncykpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHN0YXRpYyB3YXJuKC4uLmFyZ3Mpe1xyXG4gICAgICAgIGlmIChsZXZlbCA+PSBXQVJOKXtcclxuICAgICAgICAgICAgbG9nZ2VyLndhcm4uYXBwbHkobG9nZ2VyLCBBcnJheS5mcm9tKGFyZ3MpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgZXJyb3IoLi4uYXJncyl7XHJcbiAgICAgICAgaWYgKGxldmVsID49IEVSUk9SKXtcclxuICAgICAgICAgICAgbG9nZ2VyLmVycm9yLmFwcGx5KGxvZ2dlciwgQXJyYXkuZnJvbShhcmdzKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG5Mb2cucmVzZXQoKTtcclxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG5cclxuaW1wb3J0IHsgTG9nIH0gZnJvbSAnLi9Mb2cuanMnO1xyXG5pbXBvcnQgeyBKc29uU2VydmljZSB9IGZyb20gJy4vSnNvblNlcnZpY2UuanMnO1xyXG5cclxuY29uc3QgT2lkY01ldGFkYXRhVXJsUGF0aCA9ICcud2VsbC1rbm93bi9vcGVuaWQtY29uZmlndXJhdGlvbic7XHJcblxyXG5leHBvcnQgY2xhc3MgTWV0YWRhdGFTZXJ2aWNlIHtcclxuICAgIGNvbnN0cnVjdG9yKHNldHRpbmdzLCBKc29uU2VydmljZUN0b3IgPSBKc29uU2VydmljZSkge1xyXG4gICAgICAgIGlmICghc2V0dGluZ3MpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiTWV0YWRhdGFTZXJ2aWNlOiBObyBzZXR0aW5ncyBwYXNzZWQgdG8gTWV0YWRhdGFTZXJ2aWNlXCIpO1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJzZXR0aW5nc1wiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3NldHRpbmdzID0gc2V0dGluZ3M7XHJcbiAgICAgICAgdGhpcy5fanNvblNlcnZpY2UgPSBuZXcgSnNvblNlcnZpY2VDdG9yKFsnYXBwbGljYXRpb24vandrLXNldCtqc29uJ10pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBtZXRhZGF0YVVybCgpIHtcclxuICAgICAgICBpZiAoIXRoaXMuX21ldGFkYXRhVXJsKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9zZXR0aW5ncy5tZXRhZGF0YVVybCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fbWV0YWRhdGFVcmwgPSB0aGlzLl9zZXR0aW5ncy5tZXRhZGF0YVVybDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX21ldGFkYXRhVXJsID0gdGhpcy5fc2V0dGluZ3MuYXV0aG9yaXR5O1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9tZXRhZGF0YVVybCAmJiB0aGlzLl9tZXRhZGF0YVVybC5pbmRleE9mKE9pZGNNZXRhZGF0YVVybFBhdGgpIDwgMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9tZXRhZGF0YVVybFt0aGlzLl9tZXRhZGF0YVVybC5sZW5ndGggLSAxXSAhPT0gJy8nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX21ldGFkYXRhVXJsICs9ICcvJztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbWV0YWRhdGFVcmwgKz0gT2lkY01ldGFkYXRhVXJsUGF0aDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX21ldGFkYXRhVXJsO1xyXG4gICAgfVxyXG5cclxuICAgIGdldE1ldGFkYXRhKCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9zZXR0aW5ncy5tZXRhZGF0YSkge1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJNZXRhZGF0YVNlcnZpY2UuZ2V0TWV0YWRhdGE6IFJldHVybmluZyBtZXRhZGF0YSBmcm9tIHNldHRpbmdzXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX3NldHRpbmdzLm1ldGFkYXRhKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5tZXRhZGF0YVVybCkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJNZXRhZGF0YVNlcnZpY2UuZ2V0TWV0YWRhdGE6IE5vIGF1dGhvcml0eSBvciBtZXRhZGF0YVVybCBjb25maWd1cmVkIG9uIHNldHRpbmdzXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiTm8gYXV0aG9yaXR5IG9yIG1ldGFkYXRhVXJsIGNvbmZpZ3VyZWQgb24gc2V0dGluZ3NcIikpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgTG9nLmRlYnVnKFwiTWV0YWRhdGFTZXJ2aWNlLmdldE1ldGFkYXRhOiBnZXR0aW5nIG1ldGFkYXRhIGZyb21cIiwgdGhpcy5tZXRhZGF0YVVybCk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9qc29uU2VydmljZS5nZXRKc29uKHRoaXMubWV0YWRhdGFVcmwpXHJcbiAgICAgICAgICAgIC50aGVuKG1ldGFkYXRhID0+IHtcclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIk1ldGFkYXRhU2VydmljZS5nZXRNZXRhZGF0YToganNvbiByZWNlaXZlZFwiKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3NldHRpbmdzLm1ldGFkYXRhID0gbWV0YWRhdGE7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbWV0YWRhdGE7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldElzc3VlcigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0TWV0YWRhdGFQcm9wZXJ0eShcImlzc3VlclwiKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRBdXRob3JpemF0aW9uRW5kcG9pbnQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldE1ldGFkYXRhUHJvcGVydHkoXCJhdXRob3JpemF0aW9uX2VuZHBvaW50XCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFVzZXJJbmZvRW5kcG9pbnQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldE1ldGFkYXRhUHJvcGVydHkoXCJ1c2VyaW5mb19lbmRwb2ludFwiKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRUb2tlbkVuZHBvaW50KG9wdGlvbmFsPXRydWUpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0TWV0YWRhdGFQcm9wZXJ0eShcInRva2VuX2VuZHBvaW50XCIsIG9wdGlvbmFsKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRDaGVja1Nlc3Npb25JZnJhbWUoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldE1ldGFkYXRhUHJvcGVydHkoXCJjaGVja19zZXNzaW9uX2lmcmFtZVwiLCB0cnVlKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRFbmRTZXNzaW9uRW5kcG9pbnQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldE1ldGFkYXRhUHJvcGVydHkoXCJlbmRfc2Vzc2lvbl9lbmRwb2ludFwiLCB0cnVlKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRSZXZvY2F0aW9uRW5kcG9pbnQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldE1ldGFkYXRhUHJvcGVydHkoXCJyZXZvY2F0aW9uX2VuZHBvaW50XCIsIHRydWUpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEtleXNFbmRwb2ludCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0TWV0YWRhdGFQcm9wZXJ0eShcImp3a3NfdXJpXCIsIHRydWUpO1xyXG4gICAgfVxyXG5cclxuICAgIF9nZXRNZXRhZGF0YVByb3BlcnR5KG5hbWUsIG9wdGlvbmFsPWZhbHNlKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiTWV0YWRhdGFTZXJ2aWNlLmdldE1ldGFkYXRhUHJvcGVydHkgZm9yOiBcIiArIG5hbWUpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRNZXRhZGF0YSgpLnRoZW4obWV0YWRhdGEgPT4ge1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJNZXRhZGF0YVNlcnZpY2UuZ2V0TWV0YWRhdGFQcm9wZXJ0eTogbWV0YWRhdGEgcmVjaWV2ZWRcIik7XHJcblxyXG4gICAgICAgICAgICBpZiAobWV0YWRhdGFbbmFtZV0gPT09IHVuZGVmaW5lZCkge1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChvcHRpb25hbCA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy53YXJuKFwiTWV0YWRhdGFTZXJ2aWNlLmdldE1ldGFkYXRhUHJvcGVydHk6IE1ldGFkYXRhIGRvZXMgbm90IGNvbnRhaW4gb3B0aW9uYWwgcHJvcGVydHkgXCIgKyBuYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiTWV0YWRhdGFTZXJ2aWNlLmdldE1ldGFkYXRhUHJvcGVydHk6IE1ldGFkYXRhIGRvZXMgbm90IGNvbnRhaW4gcHJvcGVydHkgXCIgKyBuYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXRhZGF0YSBkb2VzIG5vdCBjb250YWluIHByb3BlcnR5IFwiICsgbmFtZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiBtZXRhZGF0YVtuYW1lXTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRTaWduaW5nS2V5cygpIHtcclxuICAgICAgICBpZiAodGhpcy5fc2V0dGluZ3Muc2lnbmluZ0tleXMpIHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiTWV0YWRhdGFTZXJ2aWNlLmdldFNpZ25pbmdLZXlzOiBSZXR1cm5pbmcgc2lnbmluZ0tleXMgZnJvbSBzZXR0aW5nc1wiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9zZXR0aW5ncy5zaWduaW5nS2V5cyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0TWV0YWRhdGFQcm9wZXJ0eShcImp3a3NfdXJpXCIpLnRoZW4oandrc191cmkgPT4ge1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJNZXRhZGF0YVNlcnZpY2UuZ2V0U2lnbmluZ0tleXM6IGp3a3NfdXJpIHJlY2VpdmVkXCIsIGp3a3NfdXJpKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9qc29uU2VydmljZS5nZXRKc29uKGp3a3NfdXJpKS50aGVuKGtleVNldCA9PiB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJNZXRhZGF0YVNlcnZpY2UuZ2V0U2lnbmluZ0tleXM6IGtleSBzZXQgcmVjZWl2ZWRcIiwga2V5U2V0KTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoIWtleVNldC5rZXlzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiTWV0YWRhdGFTZXJ2aWNlLmdldFNpZ25pbmdLZXlzOiBNaXNzaW5nIGtleXMgb24ga2V5c2V0XCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1pc3Npbmcga2V5cyBvbiBrZXlzZXRcIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5fc2V0dGluZ3Muc2lnbmluZ0tleXMgPSBrZXlTZXQua2V5cztcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9zZXR0aW5ncy5zaWduaW5nS2V5cztcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG5cclxuaW1wb3J0IHsgTG9nIH0gZnJvbSAnLi9Mb2cuanMnO1xyXG5pbXBvcnQgeyBPaWRjQ2xpZW50U2V0dGluZ3MgfSBmcm9tICcuL09pZGNDbGllbnRTZXR0aW5ncy5qcyc7XHJcbmltcG9ydCB7IEVycm9yUmVzcG9uc2UgfSBmcm9tICcuL0Vycm9yUmVzcG9uc2UuanMnO1xyXG5pbXBvcnQgeyBTaWduaW5SZXF1ZXN0IH0gZnJvbSAnLi9TaWduaW5SZXF1ZXN0LmpzJztcclxuaW1wb3J0IHsgU2lnbmluUmVzcG9uc2UgfSBmcm9tICcuL1NpZ25pblJlc3BvbnNlLmpzJztcclxuaW1wb3J0IHsgU2lnbm91dFJlcXVlc3QgfSBmcm9tICcuL1NpZ25vdXRSZXF1ZXN0LmpzJztcclxuaW1wb3J0IHsgU2lnbm91dFJlc3BvbnNlIH0gZnJvbSAnLi9TaWdub3V0UmVzcG9uc2UuanMnO1xyXG5pbXBvcnQgeyBTaWduaW5TdGF0ZSB9IGZyb20gJy4vU2lnbmluU3RhdGUuanMnO1xyXG5pbXBvcnQgeyBTdGF0ZSB9IGZyb20gJy4vU3RhdGUuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIE9pZGNDbGllbnQge1xyXG4gICAgY29uc3RydWN0b3Ioc2V0dGluZ3MgPSB7fSkge1xyXG4gICAgICAgIGlmIChzZXR0aW5ncyBpbnN0YW5jZW9mIE9pZGNDbGllbnRTZXR0aW5ncykge1xyXG4gICAgICAgICAgICB0aGlzLl9zZXR0aW5ncyA9IHNldHRpbmdzO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5fc2V0dGluZ3MgPSBuZXcgT2lkY0NsaWVudFNldHRpbmdzKHNldHRpbmdzKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IF9zdGF0ZVN0b3JlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNldHRpbmdzLnN0YXRlU3RvcmU7XHJcbiAgICB9XHJcbiAgICBnZXQgX3ZhbGlkYXRvcigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXR0aW5ncy52YWxpZGF0b3I7XHJcbiAgICB9XHJcbiAgICBnZXQgX21ldGFkYXRhU2VydmljZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXR0aW5ncy5tZXRhZGF0YVNlcnZpY2U7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHNldHRpbmdzKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zZXR0aW5ncztcclxuICAgIH1cclxuICAgIGdldCBtZXRhZGF0YVNlcnZpY2UoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX21ldGFkYXRhU2VydmljZTtcclxuICAgIH1cclxuXHJcbiAgICBjcmVhdGVTaWduaW5SZXF1ZXN0KHtcclxuICAgICAgICByZXNwb25zZV90eXBlLCBzY29wZSwgcmVkaXJlY3RfdXJpLFxyXG4gICAgICAgIC8vIGRhdGEgd2FzIG1lYW50IHRvIGJlIHRoZSBwbGFjZSBhIGNhbGxlciBjb3VsZCBpbmRpY2F0ZSB0aGUgZGF0YSB0b1xyXG4gICAgICAgIC8vIGhhdmUgcm91bmQgdHJpcHBlZCwgYnV0IHBlb3BsZSB3ZXJlIGdldHRpbmcgY29uZnVzZWQsIHNvIGkgYWRkZWQgc3RhdGUgKHNpbmNlIHRoYXQgbWF0Y2hlcyB0aGUgc3BlYylcclxuICAgICAgICAvLyBhbmQgc28gbm93IGlmIGRhdGEgaXMgbm90IHBhc3NlZCwgYnV0IHN0YXRlIGlzIHRoZW4gc3RhdGUgd2lsbCBiZSB1c2VkXHJcbiAgICAgICAgZGF0YSwgc3RhdGUsIHByb21wdCwgZGlzcGxheSwgbWF4X2FnZSwgdWlfbG9jYWxlcywgaWRfdG9rZW5faGludCwgbG9naW5faGludCwgYWNyX3ZhbHVlcyxcclxuICAgICAgICByZXNvdXJjZSwgcmVxdWVzdCwgcmVxdWVzdF91cmksIHJlc3BvbnNlX21vZGUsIGV4dHJhUXVlcnlQYXJhbXMsIGV4dHJhVG9rZW5QYXJhbXMsIHJlcXVlc3RfdHlwZSwgc2tpcFVzZXJJbmZvIH0gPSB7fSxcclxuICAgICAgICBzdGF0ZVN0b3JlXHJcbiAgICApIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJPaWRjQ2xpZW50LmNyZWF0ZVNpZ25pblJlcXVlc3RcIik7XHJcblxyXG4gICAgICAgIGxldCBjbGllbnRfaWQgPSB0aGlzLl9zZXR0aW5ncy5jbGllbnRfaWQ7XHJcbiAgICAgICAgcmVzcG9uc2VfdHlwZSA9IHJlc3BvbnNlX3R5cGUgfHwgdGhpcy5fc2V0dGluZ3MucmVzcG9uc2VfdHlwZTtcclxuICAgICAgICBzY29wZSA9IHNjb3BlIHx8IHRoaXMuX3NldHRpbmdzLnNjb3BlO1xyXG4gICAgICAgIHJlZGlyZWN0X3VyaSA9IHJlZGlyZWN0X3VyaSB8fCB0aGlzLl9zZXR0aW5ncy5yZWRpcmVjdF91cmk7XHJcblxyXG4gICAgICAgIC8vIGlkX3Rva2VuX2hpbnQsIGxvZ2luX2hpbnQgYXJlbid0IGFsbG93ZWQgb24gX3NldHRpbmdzXHJcbiAgICAgICAgcHJvbXB0ID0gcHJvbXB0IHx8IHRoaXMuX3NldHRpbmdzLnByb21wdDtcclxuICAgICAgICBkaXNwbGF5ID0gZGlzcGxheSB8fCB0aGlzLl9zZXR0aW5ncy5kaXNwbGF5O1xyXG4gICAgICAgIG1heF9hZ2UgPSBtYXhfYWdlIHx8IHRoaXMuX3NldHRpbmdzLm1heF9hZ2U7XHJcbiAgICAgICAgdWlfbG9jYWxlcyA9IHVpX2xvY2FsZXMgfHwgdGhpcy5fc2V0dGluZ3MudWlfbG9jYWxlcztcclxuICAgICAgICBhY3JfdmFsdWVzID0gYWNyX3ZhbHVlcyB8fCB0aGlzLl9zZXR0aW5ncy5hY3JfdmFsdWVzO1xyXG4gICAgICAgIHJlc291cmNlID0gcmVzb3VyY2UgfHwgdGhpcy5fc2V0dGluZ3MucmVzb3VyY2U7XHJcbiAgICAgICAgcmVzcG9uc2VfbW9kZSA9IHJlc3BvbnNlX21vZGUgfHwgdGhpcy5fc2V0dGluZ3MucmVzcG9uc2VfbW9kZTtcclxuICAgICAgICBleHRyYVF1ZXJ5UGFyYW1zID0gZXh0cmFRdWVyeVBhcmFtcyB8fCB0aGlzLl9zZXR0aW5ncy5leHRyYVF1ZXJ5UGFyYW1zO1xyXG5cclxuICAgICAgICBsZXQgYXV0aG9yaXR5ID0gdGhpcy5fc2V0dGluZ3MuYXV0aG9yaXR5O1xyXG5cclxuICAgICAgICBpZiAoU2lnbmluUmVxdWVzdC5pc0NvZGUocmVzcG9uc2VfdHlwZSkgJiYgcmVzcG9uc2VfdHlwZSAhPT0gXCJjb2RlXCIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIk9wZW5JRCBDb25uZWN0IGh5YnJpZCBmbG93IGlzIG5vdCBzdXBwb3J0ZWRcIikpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX21ldGFkYXRhU2VydmljZS5nZXRBdXRob3JpemF0aW9uRW5kcG9pbnQoKS50aGVuKHVybCA9PiB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIk9pZGNDbGllbnQuY3JlYXRlU2lnbmluUmVxdWVzdDogUmVjZWl2ZWQgYXV0aG9yaXphdGlvbiBlbmRwb2ludFwiLCB1cmwpO1xyXG5cclxuICAgICAgICAgICAgbGV0IHNpZ25pblJlcXVlc3QgPSBuZXcgU2lnbmluUmVxdWVzdCh7XHJcbiAgICAgICAgICAgICAgICB1cmwsXHJcbiAgICAgICAgICAgICAgICBjbGllbnRfaWQsXHJcbiAgICAgICAgICAgICAgICByZWRpcmVjdF91cmksXHJcbiAgICAgICAgICAgICAgICByZXNwb25zZV90eXBlLFxyXG4gICAgICAgICAgICAgICAgc2NvcGUsXHJcbiAgICAgICAgICAgICAgICBkYXRhOiBkYXRhIHx8IHN0YXRlLFxyXG4gICAgICAgICAgICAgICAgYXV0aG9yaXR5LFxyXG4gICAgICAgICAgICAgICAgcHJvbXB0LCBkaXNwbGF5LCBtYXhfYWdlLCB1aV9sb2NhbGVzLCBpZF90b2tlbl9oaW50LCBsb2dpbl9oaW50LCBhY3JfdmFsdWVzLFxyXG4gICAgICAgICAgICAgICAgcmVzb3VyY2UsIHJlcXVlc3QsIHJlcXVlc3RfdXJpLCBleHRyYVF1ZXJ5UGFyYW1zLCBleHRyYVRva2VuUGFyYW1zLCByZXF1ZXN0X3R5cGUsIHJlc3BvbnNlX21vZGUsXHJcbiAgICAgICAgICAgICAgICBjbGllbnRfc2VjcmV0OiB0aGlzLl9zZXR0aW5ncy5jbGllbnRfc2VjcmV0LFxyXG4gICAgICAgICAgICAgICAgc2tpcFVzZXJJbmZvXHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgdmFyIHNpZ25pblN0YXRlID0gc2lnbmluUmVxdWVzdC5zdGF0ZTtcclxuICAgICAgICAgICAgc3RhdGVTdG9yZSA9IHN0YXRlU3RvcmUgfHwgdGhpcy5fc3RhdGVTdG9yZTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiBzdGF0ZVN0b3JlLnNldChzaWduaW5TdGF0ZS5pZCwgc2lnbmluU3RhdGUudG9TdG9yYWdlU3RyaW5nKCkpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHNpZ25pblJlcXVlc3Q7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJlYWRTaWduaW5SZXNwb25zZVN0YXRlKHVybCwgc3RhdGVTdG9yZSwgcmVtb3ZlU3RhdGUgPSBmYWxzZSkge1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIk9pZGNDbGllbnQucmVhZFNpZ25pblJlc3BvbnNlU3RhdGVcIik7XHJcblxyXG4gICAgICAgIGxldCB1c2VRdWVyeSA9IHRoaXMuX3NldHRpbmdzLnJlc3BvbnNlX21vZGUgPT09IFwicXVlcnlcIiB8fCBcclxuICAgICAgICAgICAgKCF0aGlzLl9zZXR0aW5ncy5yZXNwb25zZV9tb2RlICYmIFNpZ25pblJlcXVlc3QuaXNDb2RlKHRoaXMuX3NldHRpbmdzLnJlc3BvbnNlX3R5cGUpKTtcclxuICAgICAgICBsZXQgZGVsaW1pdGVyID0gdXNlUXVlcnkgPyBcIj9cIiA6IFwiI1wiO1xyXG5cclxuICAgICAgICB2YXIgcmVzcG9uc2UgPSBuZXcgU2lnbmluUmVzcG9uc2UodXJsLCBkZWxpbWl0ZXIpO1xyXG5cclxuICAgICAgICBpZiAoIXJlc3BvbnNlLnN0YXRlKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIk9pZGNDbGllbnQucmVhZFNpZ25pblJlc3BvbnNlU3RhdGU6IE5vIHN0YXRlIGluIHJlc3BvbnNlXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiTm8gc3RhdGUgaW4gcmVzcG9uc2VcIikpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc3RhdGVTdG9yZSA9IHN0YXRlU3RvcmUgfHwgdGhpcy5fc3RhdGVTdG9yZTtcclxuXHJcbiAgICAgICAgdmFyIHN0YXRlQXBpID0gcmVtb3ZlU3RhdGUgPyBzdGF0ZVN0b3JlLnJlbW92ZS5iaW5kKHN0YXRlU3RvcmUpIDogc3RhdGVTdG9yZS5nZXQuYmluZChzdGF0ZVN0b3JlKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHN0YXRlQXBpKHJlc3BvbnNlLnN0YXRlKS50aGVuKHN0b3JlZFN0YXRlU3RyaW5nID0+IHtcclxuICAgICAgICAgICAgaWYgKCFzdG9yZWRTdGF0ZVN0cmluZykge1xyXG4gICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiT2lkY0NsaWVudC5yZWFkU2lnbmluUmVzcG9uc2VTdGF0ZTogTm8gbWF0Y2hpbmcgc3RhdGUgZm91bmQgaW4gc3RvcmFnZVwiKTtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIG1hdGNoaW5nIHN0YXRlIGZvdW5kIGluIHN0b3JhZ2VcIik7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxldCBzdGF0ZSA9IFNpZ25pblN0YXRlLmZyb21TdG9yYWdlU3RyaW5nKHN0b3JlZFN0YXRlU3RyaW5nKTtcclxuICAgICAgICAgICAgcmV0dXJuIHtzdGF0ZSwgcmVzcG9uc2V9O1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByb2Nlc3NTaWduaW5SZXNwb25zZSh1cmwsIHN0YXRlU3RvcmUpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJPaWRjQ2xpZW50LnByb2Nlc3NTaWduaW5SZXNwb25zZVwiKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMucmVhZFNpZ25pblJlc3BvbnNlU3RhdGUodXJsLCBzdGF0ZVN0b3JlLCB0cnVlKS50aGVuKCh7c3RhdGUsIHJlc3BvbnNlfSkgPT4ge1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJPaWRjQ2xpZW50LnByb2Nlc3NTaWduaW5SZXNwb25zZTogUmVjZWl2ZWQgc3RhdGUgZnJvbSBzdG9yYWdlOyB2YWxpZGF0aW5nIHJlc3BvbnNlXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdmFsaWRhdG9yLnZhbGlkYXRlU2lnbmluUmVzcG9uc2Uoc3RhdGUsIHJlc3BvbnNlKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBjcmVhdGVTaWdub3V0UmVxdWVzdCh7aWRfdG9rZW5faGludCwgZGF0YSwgc3RhdGUsIHBvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaSwgZXh0cmFRdWVyeVBhcmFtcywgcmVxdWVzdF90eXBlIH0gPSB7fSxcclxuICAgICAgICBzdGF0ZVN0b3JlXHJcbiAgICApIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJPaWRjQ2xpZW50LmNyZWF0ZVNpZ25vdXRSZXF1ZXN0XCIpO1xyXG5cclxuICAgICAgICBwb3N0X2xvZ291dF9yZWRpcmVjdF91cmkgPSBwb3N0X2xvZ291dF9yZWRpcmVjdF91cmkgfHwgdGhpcy5fc2V0dGluZ3MucG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpO1xyXG4gICAgICAgIGV4dHJhUXVlcnlQYXJhbXMgPSBleHRyYVF1ZXJ5UGFyYW1zIHx8IHRoaXMuX3NldHRpbmdzLmV4dHJhUXVlcnlQYXJhbXM7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9tZXRhZGF0YVNlcnZpY2UuZ2V0RW5kU2Vzc2lvbkVuZHBvaW50KCkudGhlbih1cmwgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIXVybCkge1xyXG4gICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiT2lkY0NsaWVudC5jcmVhdGVTaWdub3V0UmVxdWVzdDogTm8gZW5kIHNlc3Npb24gZW5kcG9pbnQgdXJsIHJldHVybmVkXCIpO1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwibm8gZW5kIHNlc3Npb24gZW5kcG9pbnRcIik7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIk9pZGNDbGllbnQuY3JlYXRlU2lnbm91dFJlcXVlc3Q6IFJlY2VpdmVkIGVuZCBzZXNzaW9uIGVuZHBvaW50XCIsIHVybCk7XHJcblxyXG4gICAgICAgICAgICBsZXQgcmVxdWVzdCA9IG5ldyBTaWdub3V0UmVxdWVzdCh7XHJcbiAgICAgICAgICAgICAgICB1cmwsXHJcbiAgICAgICAgICAgICAgICBpZF90b2tlbl9oaW50LFxyXG4gICAgICAgICAgICAgICAgcG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpLFxyXG4gICAgICAgICAgICAgICAgZGF0YTogZGF0YSB8fCBzdGF0ZSxcclxuICAgICAgICAgICAgICAgIGV4dHJhUXVlcnlQYXJhbXMsXHJcbiAgICAgICAgICAgICAgICByZXF1ZXN0X3R5cGVcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICB2YXIgc2lnbm91dFN0YXRlID0gcmVxdWVzdC5zdGF0ZTtcclxuICAgICAgICAgICAgaWYgKHNpZ25vdXRTdGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiT2lkY0NsaWVudC5jcmVhdGVTaWdub3V0UmVxdWVzdDogU2lnbm91dCByZXF1ZXN0IGhhcyBzdGF0ZSB0byBwZXJzaXN0XCIpO1xyXG5cclxuICAgICAgICAgICAgICAgIHN0YXRlU3RvcmUgPSBzdGF0ZVN0b3JlIHx8IHRoaXMuX3N0YXRlU3RvcmU7XHJcbiAgICAgICAgICAgICAgICBzdGF0ZVN0b3JlLnNldChzaWdub3V0U3RhdGUuaWQsIHNpZ25vdXRTdGF0ZS50b1N0b3JhZ2VTdHJpbmcoKSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiByZXF1ZXN0O1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJlYWRTaWdub3V0UmVzcG9uc2VTdGF0ZSh1cmwsIHN0YXRlU3RvcmUsIHJlbW92ZVN0YXRlID0gZmFsc2UpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJPaWRjQ2xpZW50LnJlYWRTaWdub3V0UmVzcG9uc2VTdGF0ZVwiKTtcclxuXHJcbiAgICAgICAgdmFyIHJlc3BvbnNlID0gbmV3IFNpZ25vdXRSZXNwb25zZSh1cmwpO1xyXG4gICAgICAgIGlmICghcmVzcG9uc2Uuc3RhdGUpIHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiT2lkY0NsaWVudC5yZWFkU2lnbm91dFJlc3BvbnNlU3RhdGU6IE5vIHN0YXRlIGluIHJlc3BvbnNlXCIpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICBMb2cud2FybihcIk9pZGNDbGllbnQucmVhZFNpZ25vdXRSZXNwb25zZVN0YXRlOiBSZXNwb25zZSB3YXMgZXJyb3I6IFwiLCByZXNwb25zZS5lcnJvcik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yUmVzcG9uc2UocmVzcG9uc2UpKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7dW5kZWZpbmVkLCByZXNwb25zZX0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHN0YXRlS2V5ID0gcmVzcG9uc2Uuc3RhdGU7XHJcblxyXG4gICAgICAgIHN0YXRlU3RvcmUgPSBzdGF0ZVN0b3JlIHx8IHRoaXMuX3N0YXRlU3RvcmU7XHJcblxyXG4gICAgICAgIHZhciBzdGF0ZUFwaSA9IHJlbW92ZVN0YXRlID8gc3RhdGVTdG9yZS5yZW1vdmUuYmluZChzdGF0ZVN0b3JlKSA6IHN0YXRlU3RvcmUuZ2V0LmJpbmQoc3RhdGVTdG9yZSk7XHJcbiAgICAgICAgcmV0dXJuIHN0YXRlQXBpKHN0YXRlS2V5KS50aGVuKHN0b3JlZFN0YXRlU3RyaW5nID0+IHtcclxuICAgICAgICAgICAgaWYgKCFzdG9yZWRTdGF0ZVN0cmluZykge1xyXG4gICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiT2lkY0NsaWVudC5yZWFkU2lnbm91dFJlc3BvbnNlU3RhdGU6IE5vIG1hdGNoaW5nIHN0YXRlIGZvdW5kIGluIHN0b3JhZ2VcIik7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBtYXRjaGluZyBzdGF0ZSBmb3VuZCBpbiBzdG9yYWdlXCIpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBsZXQgc3RhdGUgPSBTdGF0ZS5mcm9tU3RvcmFnZVN0cmluZyhzdG9yZWRTdGF0ZVN0cmluZyk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4ge3N0YXRlLCByZXNwb25zZX07XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvY2Vzc1NpZ25vdXRSZXNwb25zZSh1cmwsIHN0YXRlU3RvcmUpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJPaWRjQ2xpZW50LnByb2Nlc3NTaWdub3V0UmVzcG9uc2VcIik7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnJlYWRTaWdub3V0UmVzcG9uc2VTdGF0ZSh1cmwsIHN0YXRlU3RvcmUsIHRydWUpLnRoZW4oKHtzdGF0ZSwgcmVzcG9uc2V9KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChzdGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiT2lkY0NsaWVudC5wcm9jZXNzU2lnbm91dFJlc3BvbnNlOiBSZWNlaXZlZCBzdGF0ZSBmcm9tIHN0b3JhZ2U7IHZhbGlkYXRpbmcgcmVzcG9uc2VcIik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fdmFsaWRhdG9yLnZhbGlkYXRlU2lnbm91dFJlc3BvbnNlKHN0YXRlLCByZXNwb25zZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJPaWRjQ2xpZW50LnByb2Nlc3NTaWdub3V0UmVzcG9uc2U6IE5vIHN0YXRlIGZyb20gc3RvcmFnZTsgc2tpcHBpbmcgdmFsaWRhdGluZyByZXNwb25zZVwiKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyU3RhbGVTdGF0ZShzdGF0ZVN0b3JlKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiT2lkY0NsaWVudC5jbGVhclN0YWxlU3RhdGVcIik7XHJcblxyXG4gICAgICAgIHN0YXRlU3RvcmUgPSBzdGF0ZVN0b3JlIHx8IHRoaXMuX3N0YXRlU3RvcmU7XHJcblxyXG4gICAgICAgIHJldHVybiBTdGF0ZS5jbGVhclN0YWxlU3RhdGUoc3RhdGVTdG9yZSwgdGhpcy5zZXR0aW5ncy5zdGFsZVN0YXRlQWdlKTtcclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcbmltcG9ydCB7IFdlYlN0b3JhZ2VTdGF0ZVN0b3JlIH0gZnJvbSAnLi9XZWJTdG9yYWdlU3RhdGVTdG9yZS5qcyc7XHJcbmltcG9ydCB7IFJlc3BvbnNlVmFsaWRhdG9yIH0gZnJvbSAnLi9SZXNwb25zZVZhbGlkYXRvci5qcyc7XHJcbmltcG9ydCB7IE1ldGFkYXRhU2VydmljZSB9IGZyb20gJy4vTWV0YWRhdGFTZXJ2aWNlLmpzJztcclxuXHJcbmNvbnN0IE9pZGNNZXRhZGF0YVVybFBhdGggPSAnLndlbGwta25vd24vb3BlbmlkLWNvbmZpZ3VyYXRpb24nO1xyXG5cclxuY29uc3QgRGVmYXVsdFJlc3BvbnNlVHlwZSA9IFwiaWRfdG9rZW5cIjtcclxuY29uc3QgRGVmYXVsdFNjb3BlID0gXCJvcGVuaWRcIjtcclxuY29uc3QgRGVmYXVsdFN0YWxlU3RhdGVBZ2UgPSA2MCAqIDE1OyAvLyBzZWNvbmRzXHJcbmNvbnN0IERlZmF1bHRDbG9ja1NrZXdJblNlY29uZHMgPSA2MCAqIDU7XHJcblxyXG5leHBvcnQgY2xhc3MgT2lkY0NsaWVudFNldHRpbmdzIHtcclxuICAgIGNvbnN0cnVjdG9yKHtcclxuICAgICAgICAvLyBtZXRhZGF0YSByZWxhdGVkXHJcbiAgICAgICAgYXV0aG9yaXR5LCBtZXRhZGF0YVVybCwgbWV0YWRhdGEsIHNpZ25pbmdLZXlzLFxyXG4gICAgICAgIC8vIGNsaWVudCByZWxhdGVkXHJcbiAgICAgICAgY2xpZW50X2lkLCBjbGllbnRfc2VjcmV0LCByZXNwb25zZV90eXBlID0gRGVmYXVsdFJlc3BvbnNlVHlwZSwgc2NvcGUgPSBEZWZhdWx0U2NvcGUsXHJcbiAgICAgICAgcmVkaXJlY3RfdXJpLCBwb3N0X2xvZ291dF9yZWRpcmVjdF91cmksXHJcbiAgICAgICAgLy8gb3B0aW9uYWwgcHJvdG9jb2xcclxuICAgICAgICBwcm9tcHQsIGRpc3BsYXksIG1heF9hZ2UsIHVpX2xvY2FsZXMsIGFjcl92YWx1ZXMsIHJlc291cmNlLCByZXNwb25zZV9tb2RlLFxyXG4gICAgICAgIC8vIGJlaGF2aW9yIGZsYWdzXHJcbiAgICAgICAgZmlsdGVyUHJvdG9jb2xDbGFpbXMgPSB0cnVlLCBsb2FkVXNlckluZm8gPSB0cnVlLFxyXG4gICAgICAgIHN0YWxlU3RhdGVBZ2UgPSBEZWZhdWx0U3RhbGVTdGF0ZUFnZSwgY2xvY2tTa2V3ID0gRGVmYXVsdENsb2NrU2tld0luU2Vjb25kcyxcclxuICAgICAgICB1c2VySW5mb0p3dElzc3VlciA9ICdPUCcsXHJcbiAgICAgICAgLy8gb3RoZXIgYmVoYXZpb3JcclxuICAgICAgICBzdGF0ZVN0b3JlID0gbmV3IFdlYlN0b3JhZ2VTdGF0ZVN0b3JlKCksXHJcbiAgICAgICAgUmVzcG9uc2VWYWxpZGF0b3JDdG9yID0gUmVzcG9uc2VWYWxpZGF0b3IsXHJcbiAgICAgICAgTWV0YWRhdGFTZXJ2aWNlQ3RvciA9IE1ldGFkYXRhU2VydmljZSxcclxuICAgICAgICAvLyBleHRyYSBxdWVyeSBwYXJhbXNcclxuICAgICAgICBleHRyYVF1ZXJ5UGFyYW1zID0ge31cclxuICAgIH0gPSB7fSkge1xyXG5cclxuICAgICAgICB0aGlzLl9hdXRob3JpdHkgPSBhdXRob3JpdHk7XHJcbiAgICAgICAgdGhpcy5fbWV0YWRhdGFVcmwgPSBtZXRhZGF0YVVybDtcclxuICAgICAgICB0aGlzLl9tZXRhZGF0YSA9IG1ldGFkYXRhO1xyXG4gICAgICAgIHRoaXMuX3NpZ25pbmdLZXlzID0gc2lnbmluZ0tleXM7XHJcblxyXG4gICAgICAgIHRoaXMuX2NsaWVudF9pZCA9IGNsaWVudF9pZDtcclxuICAgICAgICB0aGlzLl9jbGllbnRfc2VjcmV0ID0gY2xpZW50X3NlY3JldDtcclxuICAgICAgICB0aGlzLl9yZXNwb25zZV90eXBlID0gcmVzcG9uc2VfdHlwZTtcclxuICAgICAgICB0aGlzLl9zY29wZSA9IHNjb3BlO1xyXG4gICAgICAgIHRoaXMuX3JlZGlyZWN0X3VyaSA9IHJlZGlyZWN0X3VyaTtcclxuICAgICAgICB0aGlzLl9wb3N0X2xvZ291dF9yZWRpcmVjdF91cmkgPSBwb3N0X2xvZ291dF9yZWRpcmVjdF91cmk7XHJcblxyXG4gICAgICAgIHRoaXMuX3Byb21wdCA9IHByb21wdDtcclxuICAgICAgICB0aGlzLl9kaXNwbGF5ID0gZGlzcGxheTtcclxuICAgICAgICB0aGlzLl9tYXhfYWdlID0gbWF4X2FnZTtcclxuICAgICAgICB0aGlzLl91aV9sb2NhbGVzID0gdWlfbG9jYWxlcztcclxuICAgICAgICB0aGlzLl9hY3JfdmFsdWVzID0gYWNyX3ZhbHVlcztcclxuICAgICAgICB0aGlzLl9yZXNvdXJjZSA9IHJlc291cmNlO1xyXG4gICAgICAgIHRoaXMuX3Jlc3BvbnNlX21vZGUgPSByZXNwb25zZV9tb2RlO1xyXG5cclxuICAgICAgICB0aGlzLl9maWx0ZXJQcm90b2NvbENsYWltcyA9ICEhZmlsdGVyUHJvdG9jb2xDbGFpbXM7XHJcbiAgICAgICAgdGhpcy5fbG9hZFVzZXJJbmZvID0gISFsb2FkVXNlckluZm87XHJcbiAgICAgICAgdGhpcy5fc3RhbGVTdGF0ZUFnZSA9IHN0YWxlU3RhdGVBZ2U7XHJcbiAgICAgICAgdGhpcy5fY2xvY2tTa2V3ID0gY2xvY2tTa2V3O1xyXG4gICAgICAgIHRoaXMuX3VzZXJJbmZvSnd0SXNzdWVyID0gdXNlckluZm9Kd3RJc3N1ZXI7XHJcblxyXG4gICAgICAgIHRoaXMuX3N0YXRlU3RvcmUgPSBzdGF0ZVN0b3JlO1xyXG4gICAgICAgIHRoaXMuX3ZhbGlkYXRvciA9IG5ldyBSZXNwb25zZVZhbGlkYXRvckN0b3IodGhpcyk7XHJcbiAgICAgICAgdGhpcy5fbWV0YWRhdGFTZXJ2aWNlID0gbmV3IE1ldGFkYXRhU2VydmljZUN0b3IodGhpcyk7XHJcblxyXG4gICAgICAgIHRoaXMuX2V4dHJhUXVlcnlQYXJhbXMgPSB0eXBlb2YgZXh0cmFRdWVyeVBhcmFtcyA9PT0gJ29iamVjdCcgPyBleHRyYVF1ZXJ5UGFyYW1zIDoge307XHJcbiAgICB9XHJcblxyXG4gICAgLy8gY2xpZW50IGNvbmZpZ1xyXG4gICAgZ2V0IGNsaWVudF9pZCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fY2xpZW50X2lkO1xyXG4gICAgfVxyXG4gICAgc2V0IGNsaWVudF9pZCh2YWx1ZSkge1xyXG4gICAgICAgIGlmICghdGhpcy5fY2xpZW50X2lkKSB7XHJcbiAgICAgICAgICAgIC8vIG9uZS10aW1lIHNldCBvbmx5XHJcbiAgICAgICAgICAgIHRoaXMuX2NsaWVudF9pZCA9IHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiT2lkY0NsaWVudFNldHRpbmdzLnNldF9jbGllbnRfaWQ6IGNsaWVudF9pZCBoYXMgYWxyZWFkeSBiZWVuIGFzc2lnbmVkLlwiKVxyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJjbGllbnRfaWQgaGFzIGFscmVhZHkgYmVlbiBhc3NpZ25lZC5cIilcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBnZXQgY2xpZW50X3NlY3JldCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fY2xpZW50X3NlY3JldDtcclxuICAgIH1cclxuICAgIGdldCByZXNwb25zZV90eXBlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9yZXNwb25zZV90eXBlO1xyXG4gICAgfVxyXG4gICAgZ2V0IHNjb3BlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zY29wZTtcclxuICAgIH1cclxuICAgIGdldCByZWRpcmVjdF91cmkoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlZGlyZWN0X3VyaTtcclxuICAgIH1cclxuICAgIGdldCBwb3N0X2xvZ291dF9yZWRpcmVjdF91cmkoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Bvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8gb3B0aW9uYWwgcHJvdG9jb2wgcGFyYW1zXHJcbiAgICBnZXQgcHJvbXB0KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9wcm9tcHQ7XHJcbiAgICB9XHJcbiAgICBnZXQgZGlzcGxheSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZGlzcGxheTtcclxuICAgIH1cclxuICAgIGdldCBtYXhfYWdlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9tYXhfYWdlO1xyXG4gICAgfVxyXG4gICAgZ2V0IHVpX2xvY2FsZXMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3VpX2xvY2FsZXM7XHJcbiAgICB9XHJcbiAgICBnZXQgYWNyX3ZhbHVlcygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fYWNyX3ZhbHVlcztcclxuICAgIH1cclxuICAgIGdldCByZXNvdXJjZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcmVzb3VyY2U7XHJcbiAgICB9XHJcbiAgICBnZXQgcmVzcG9uc2VfbW9kZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcmVzcG9uc2VfbW9kZTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8gbWV0YWRhdGFcclxuICAgIGdldCBhdXRob3JpdHkoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2F1dGhvcml0eTtcclxuICAgIH1cclxuICAgIHNldCBhdXRob3JpdHkodmFsdWUpIHtcclxuICAgICAgICBpZiAoIXRoaXMuX2F1dGhvcml0eSkge1xyXG4gICAgICAgICAgICAvLyBvbmUtdGltZSBzZXQgb25seVxyXG4gICAgICAgICAgICB0aGlzLl9hdXRob3JpdHkgPSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIk9pZGNDbGllbnRTZXR0aW5ncy5zZXRfYXV0aG9yaXR5OiBhdXRob3JpdHkgaGFzIGFscmVhZHkgYmVlbiBhc3NpZ25lZC5cIilcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYXV0aG9yaXR5IGhhcyBhbHJlYWR5IGJlZW4gYXNzaWduZWQuXCIpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZ2V0IG1ldGFkYXRhVXJsKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5fbWV0YWRhdGFVcmwpIHtcclxuICAgICAgICAgICAgdGhpcy5fbWV0YWRhdGFVcmwgPSB0aGlzLmF1dGhvcml0eTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9tZXRhZGF0YVVybCAmJiB0aGlzLl9tZXRhZGF0YVVybC5pbmRleE9mKE9pZGNNZXRhZGF0YVVybFBhdGgpIDwgMCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX21ldGFkYXRhVXJsW3RoaXMuX21ldGFkYXRhVXJsLmxlbmd0aCAtIDFdICE9PSAnLycpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9tZXRhZGF0YVVybCArPSAnLyc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9tZXRhZGF0YVVybCArPSBPaWRjTWV0YWRhdGFVcmxQYXRoO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5fbWV0YWRhdGFVcmw7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gc2V0dGFibGUvY2FjaGFibGUgbWV0YWRhdGEgdmFsdWVzXHJcbiAgICBnZXQgbWV0YWRhdGEoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX21ldGFkYXRhO1xyXG4gICAgfVxyXG4gICAgc2V0IG1ldGFkYXRhKHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5fbWV0YWRhdGEgPSB2YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgc2lnbmluZ0tleXMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NpZ25pbmdLZXlzO1xyXG4gICAgfVxyXG4gICAgc2V0IHNpZ25pbmdLZXlzKHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5fc2lnbmluZ0tleXMgPSB2YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBiZWhhdmlvciBmbGFnc1xyXG4gICAgZ2V0IGZpbHRlclByb3RvY29sQ2xhaW1zKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9maWx0ZXJQcm90b2NvbENsYWltcztcclxuICAgIH1cclxuICAgIGdldCBsb2FkVXNlckluZm8oKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xvYWRVc2VySW5mbztcclxuICAgIH1cclxuICAgIGdldCBzdGFsZVN0YXRlQWdlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zdGFsZVN0YXRlQWdlO1xyXG4gICAgfVxyXG4gICAgZ2V0IGNsb2NrU2tldygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fY2xvY2tTa2V3O1xyXG4gICAgfVxyXG4gICAgZ2V0IHVzZXJJbmZvSnd0SXNzdWVyKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl91c2VySW5mb0p3dElzc3VlcjtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgc3RhdGVTdG9yZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc3RhdGVTdG9yZTtcclxuICAgIH1cclxuICAgIGdldCB2YWxpZGF0b3IoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbGlkYXRvcjtcclxuICAgIH1cclxuICAgIGdldCBtZXRhZGF0YVNlcnZpY2UoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX21ldGFkYXRhU2VydmljZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBleHRyYSBxdWVyeSBwYXJhbXNcclxuICAgIGdldCBleHRyYVF1ZXJ5UGFyYW1zKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9leHRyYVF1ZXJ5UGFyYW1zO1xyXG4gICAgfVxyXG4gICAgc2V0IGV4dHJhUXVlcnlQYXJhbXModmFsdWUpIHtcclxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jyl7XHJcbiAgICAgICAgICAgIHRoaXMuX2V4dHJhUXVlcnlQYXJhbXMgPSB2YWx1ZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLl9leHRyYVF1ZXJ5UGFyYW1zID0ge307XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuaW1wb3J0IHsgUG9wdXBXaW5kb3cgfSBmcm9tICcuL1BvcHVwV2luZG93LmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBQb3B1cE5hdmlnYXRvciB7XHJcblxyXG4gICAgcHJlcGFyZShwYXJhbXMpIHtcclxuICAgICAgICBsZXQgcG9wdXAgPSBuZXcgUG9wdXBXaW5kb3cocGFyYW1zKTtcclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHBvcHVwKTtcclxuICAgIH1cclxuXHJcbiAgICBjYWxsYmFjayh1cmwsIGtlZXBPcGVuLCBkZWxpbWl0ZXIpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJQb3B1cE5hdmlnYXRvci5jYWxsYmFja1wiKTtcclxuXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgUG9wdXBXaW5kb3cubm90aWZ5T3BlbmVyKHVybCwga2VlcE9wZW4sIGRlbGltaXRlcik7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcbmltcG9ydCB7IFVybFV0aWxpdHkgfSBmcm9tICcuL1VybFV0aWxpdHkuanMnO1xyXG5cclxuY29uc3QgQ2hlY2tGb3JQb3B1cENsb3NlZEludGVydmFsID0gNTAwO1xyXG5jb25zdCBEZWZhdWx0UG9wdXBGZWF0dXJlcyA9ICdsb2NhdGlvbj1ubyx0b29sYmFyPW5vLHdpZHRoPTUwMCxoZWlnaHQ9NTAwLGxlZnQ9MTAwLHRvcD0xMDA7JztcclxuLy9jb25zdCBEZWZhdWx0UG9wdXBGZWF0dXJlcyA9ICdsb2NhdGlvbj1ubyx0b29sYmFyPW5vLHdpZHRoPTUwMCxoZWlnaHQ9NTAwLGxlZnQ9MTAwLHRvcD0xMDA7cmVzaXphYmxlPXllcyc7XHJcblxyXG5jb25zdCBEZWZhdWx0UG9wdXBUYXJnZXQgPSBcIl9ibGFua1wiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFBvcHVwV2luZG93IHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihwYXJhbXMpIHtcclxuICAgICAgICB0aGlzLl9wcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLl9yZXNvbHZlID0gcmVzb2x2ZTtcclxuICAgICAgICAgICAgdGhpcy5fcmVqZWN0ID0gcmVqZWN0O1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBsZXQgdGFyZ2V0ID0gcGFyYW1zLnBvcHVwV2luZG93VGFyZ2V0IHx8IERlZmF1bHRQb3B1cFRhcmdldDtcclxuICAgICAgICBsZXQgZmVhdHVyZXMgPSBwYXJhbXMucG9wdXBXaW5kb3dGZWF0dXJlcyB8fCBEZWZhdWx0UG9wdXBGZWF0dXJlcztcclxuXHJcbiAgICAgICAgdGhpcy5fcG9wdXAgPSB3aW5kb3cub3BlbignJywgdGFyZ2V0LCBmZWF0dXJlcyk7XHJcbiAgICAgICAgaWYgKHRoaXMuX3BvcHVwKSB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlBvcHVwV2luZG93LmN0b3I6IHBvcHVwIHN1Y2Nlc3NmdWxseSBjcmVhdGVkXCIpO1xyXG4gICAgICAgICAgICB0aGlzLl9jaGVja0ZvclBvcHVwQ2xvc2VkVGltZXIgPSB3aW5kb3cuc2V0SW50ZXJ2YWwodGhpcy5fY2hlY2tGb3JQb3B1cENsb3NlZC5iaW5kKHRoaXMpLCBDaGVja0ZvclBvcHVwQ2xvc2VkSW50ZXJ2YWwpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXQgcHJvbWlzZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcHJvbWlzZTtcclxuICAgIH1cclxuXHJcbiAgICBuYXZpZ2F0ZShwYXJhbXMpIHtcclxuICAgICAgICBpZiAoIXRoaXMuX3BvcHVwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2Vycm9yKFwiUG9wdXBXaW5kb3cubmF2aWdhdGU6IEVycm9yIG9wZW5pbmcgcG9wdXAgd2luZG93XCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICghcGFyYW1zIHx8ICFwYXJhbXMudXJsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2Vycm9yKFwiUG9wdXBXaW5kb3cubmF2aWdhdGU6IG5vIHVybCBwcm92aWRlZFwiKTtcclxuICAgICAgICAgICAgdGhpcy5fZXJyb3IoXCJObyB1cmwgcHJvdmlkZWRcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJQb3B1cFdpbmRvdy5uYXZpZ2F0ZTogU2V0dGluZyBVUkwgaW4gcG9wdXBcIik7XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9pZCA9IHBhcmFtcy5pZDtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX2lkKSB7XHJcbiAgICAgICAgICAgICAgICB3aW5kb3dbXCJwb3B1cENhbGxiYWNrX1wiICsgcGFyYW1zLmlkXSA9IHRoaXMuX2NhbGxiYWNrLmJpbmQodGhpcyk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuX3BvcHVwLmZvY3VzKCk7XHJcbiAgICAgICAgICAgIHRoaXMuX3BvcHVwLndpbmRvdy5sb2NhdGlvbiA9IHBhcmFtcy51cmw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5wcm9taXNlO1xyXG4gICAgfVxyXG5cclxuICAgIF9zdWNjZXNzKGRhdGEpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJQb3B1cFdpbmRvdy5jYWxsYmFjazogU3VjY2Vzc2Z1bCByZXNwb25zZSBmcm9tIHBvcHVwIHdpbmRvd1wiKTtcclxuXHJcbiAgICAgICAgdGhpcy5fY2xlYW51cCgpO1xyXG4gICAgICAgIHRoaXMuX3Jlc29sdmUoZGF0YSk7XHJcbiAgICB9XHJcbiAgICBfZXJyb3IobWVzc2FnZSkge1xyXG4gICAgICAgIExvZy5lcnJvcihcIlBvcHVwV2luZG93LmVycm9yOiBcIiwgbWVzc2FnZSk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5fY2xlYW51cCgpO1xyXG4gICAgICAgIHRoaXMuX3JlamVjdChuZXcgRXJyb3IobWVzc2FnZSkpO1xyXG4gICAgfVxyXG5cclxuICAgIGNsb3NlKCkge1xyXG4gICAgICAgIHRoaXMuX2NsZWFudXAoZmFsc2UpO1xyXG4gICAgfVxyXG5cclxuICAgIF9jbGVhbnVwKGtlZXBPcGVuKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiUG9wdXBXaW5kb3cuY2xlYW51cFwiKTtcclxuXHJcbiAgICAgICAgd2luZG93LmNsZWFySW50ZXJ2YWwodGhpcy5fY2hlY2tGb3JQb3B1cENsb3NlZFRpbWVyKTtcclxuICAgICAgICB0aGlzLl9jaGVja0ZvclBvcHVwQ2xvc2VkVGltZXIgPSBudWxsO1xyXG5cclxuICAgICAgICBkZWxldGUgd2luZG93W1wicG9wdXBDYWxsYmFja19cIiArIHRoaXMuX2lkXTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX3BvcHVwICYmICFrZWVwT3Blbikge1xyXG4gICAgICAgICAgICB0aGlzLl9wb3B1cC5jbG9zZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9wb3B1cCA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgX2NoZWNrRm9yUG9wdXBDbG9zZWQoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9wb3B1cCB8fCB0aGlzLl9wb3B1cC5jbG9zZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5fZXJyb3IoXCJQb3B1cCB3aW5kb3cgY2xvc2VkXCIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBfY2FsbGJhY2sodXJsLCBrZWVwT3Blbikge1xyXG4gICAgICAgIHRoaXMuX2NsZWFudXAoa2VlcE9wZW4pO1xyXG5cclxuICAgICAgICBpZiAodXJsKSB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlBvcHVwV2luZG93LmNhbGxiYWNrIHN1Y2Nlc3NcIik7XHJcbiAgICAgICAgICAgIHRoaXMuX3N1Y2Nlc3MoeyB1cmw6IHVybCB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlBvcHVwV2luZG93LmNhbGxiYWNrOiBJbnZhbGlkIHJlc3BvbnNlIGZyb20gcG9wdXBcIik7XHJcbiAgICAgICAgICAgIHRoaXMuX2Vycm9yKFwiSW52YWxpZCByZXNwb25zZSBmcm9tIHBvcHVwXCIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgbm90aWZ5T3BlbmVyKHVybCwga2VlcE9wZW4sIGRlbGltaXRlcikge1xyXG4gICAgICAgIGlmICh3aW5kb3cub3BlbmVyKSB7XHJcbiAgICAgICAgICAgIHVybCA9IHVybCB8fCB3aW5kb3cubG9jYXRpb24uaHJlZjtcclxuICAgICAgICAgICAgaWYgKHVybCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGRhdGEgPSBVcmxVdGlsaXR5LnBhcnNlVXJsRnJhZ21lbnQodXJsLCBkZWxpbWl0ZXIpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChkYXRhLnN0YXRlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5hbWUgPSBcInBvcHVwQ2FsbGJhY2tfXCIgKyBkYXRhLnN0YXRlO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IHdpbmRvdy5vcGVuZXJbbmFtZV07XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlBvcHVwV2luZG93Lm5vdGlmeU9wZW5lcjogcGFzc2luZyB1cmwgbWVzc2FnZSB0byBvcGVuZXJcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKHVybCwga2VlcE9wZW4pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgTG9nLndhcm4oXCJQb3B1cFdpbmRvdy5ub3RpZnlPcGVuZXI6IG5vIG1hdGNoaW5nIGNhbGxiYWNrIGZvdW5kIG9uIG9wZW5lclwiKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cud2FybihcIlBvcHVwV2luZG93Lm5vdGlmeU9wZW5lcjogbm8gc3RhdGUgZm91bmQgaW4gcmVzcG9uc2UgdXJsXCIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBMb2cud2FybihcIlBvcHVwV2luZG93Lm5vdGlmeU9wZW5lcjogbm8gd2luZG93Lm9wZW5lci4gQ2FuJ3QgY29tcGxldGUgbm90aWZpY2F0aW9uLlwiKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG5cclxuaW1wb3J0IHsgTG9nIH0gZnJvbSAnLi9Mb2cuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFJlZGlyZWN0TmF2aWdhdG9yIHtcclxuXHJcbiAgICBwcmVwYXJlKCkge1xyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgbmF2aWdhdGUocGFyYW1zKSB7XHJcbiAgICAgICAgaWYgKCFwYXJhbXMgfHwgIXBhcmFtcy51cmwpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVkaXJlY3ROYXZpZ2F0b3IubmF2aWdhdGU6IE5vIHVybCBwcm92aWRlZFwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIk5vIHVybCBwcm92aWRlZFwiKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAocGFyYW1zLnVzZVJlcGxhY2VUb05hdmlnYXRlKSB7XHJcbiAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZXBsYWNlKHBhcmFtcy51cmwpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uID0gcGFyYW1zLnVybDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgdXJsKCkge1xyXG4gICAgICAgIHJldHVybiB3aW5kb3cubG9jYXRpb24uaHJlZjtcclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcbmltcG9ydCB7IE1ldGFkYXRhU2VydmljZSB9IGZyb20gJy4vTWV0YWRhdGFTZXJ2aWNlLmpzJztcclxuaW1wb3J0IHsgVXNlckluZm9TZXJ2aWNlIH0gZnJvbSAnLi9Vc2VySW5mb1NlcnZpY2UuanMnO1xyXG5pbXBvcnQgeyBUb2tlbkNsaWVudCB9IGZyb20gJy4vVG9rZW5DbGllbnQuanMnO1xyXG5pbXBvcnQgeyBFcnJvclJlc3BvbnNlIH0gZnJvbSAnLi9FcnJvclJlc3BvbnNlLmpzJztcclxuaW1wb3J0IHsgSm9zZVV0aWwgfSBmcm9tICcuL0pvc2VVdGlsLmpzJztcclxuXHJcbmNvbnN0IFByb3RvY29sQ2xhaW1zID0gW1wibm9uY2VcIiwgXCJhdF9oYXNoXCIsIFwiaWF0XCIsIFwibmJmXCIsIFwiZXhwXCIsIFwiYXVkXCIsIFwiaXNzXCIsIFwiY19oYXNoXCJdO1xyXG5cclxuZXhwb3J0IGNsYXNzIFJlc3BvbnNlVmFsaWRhdG9yIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihzZXR0aW5ncywgXHJcbiAgICAgICAgTWV0YWRhdGFTZXJ2aWNlQ3RvciA9IE1ldGFkYXRhU2VydmljZSxcclxuICAgICAgICBVc2VySW5mb1NlcnZpY2VDdG9yID0gVXNlckluZm9TZXJ2aWNlLCBcclxuICAgICAgICBqb3NlVXRpbCA9IEpvc2VVdGlsLFxyXG4gICAgICAgIFRva2VuQ2xpZW50Q3RvciA9IFRva2VuQ2xpZW50KSB7XHJcbiAgICAgICAgaWYgKCFzZXR0aW5ncykge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5jdG9yOiBObyBzZXR0aW5ncyBwYXNzZWQgdG8gUmVzcG9uc2VWYWxpZGF0b3JcIik7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInNldHRpbmdzXCIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fc2V0dGluZ3MgPSBzZXR0aW5ncztcclxuICAgICAgICB0aGlzLl9tZXRhZGF0YVNlcnZpY2UgPSBuZXcgTWV0YWRhdGFTZXJ2aWNlQ3Rvcih0aGlzLl9zZXR0aW5ncyk7XHJcbiAgICAgICAgdGhpcy5fdXNlckluZm9TZXJ2aWNlID0gbmV3IFVzZXJJbmZvU2VydmljZUN0b3IodGhpcy5fc2V0dGluZ3MpO1xyXG4gICAgICAgIHRoaXMuX2pvc2VVdGlsID0gam9zZVV0aWw7XHJcbiAgICAgICAgdGhpcy5fdG9rZW5DbGllbnQgPSBuZXcgVG9rZW5DbGllbnRDdG9yKHRoaXMuX3NldHRpbmdzKTtcclxuICAgIH1cclxuXHJcbiAgICB2YWxpZGF0ZVNpZ25pblJlc3BvbnNlKHN0YXRlLCByZXNwb25zZSkge1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLnZhbGlkYXRlU2lnbmluUmVzcG9uc2VcIik7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9wcm9jZXNzU2lnbmluUGFyYW1zKHN0YXRlLCByZXNwb25zZSkudGhlbihyZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLnZhbGlkYXRlU2lnbmluUmVzcG9uc2U6IHN0YXRlIHByb2Nlc3NlZFwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbGlkYXRlVG9rZW5zKHN0YXRlLCByZXNwb25zZSkudGhlbihyZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJSZXNwb25zZVZhbGlkYXRvci52YWxpZGF0ZVNpZ25pblJlc3BvbnNlOiB0b2tlbnMgdmFsaWRhdGVkXCIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Byb2Nlc3NDbGFpbXMoc3RhdGUsIHJlc3BvbnNlKS50aGVuKHJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJSZXNwb25zZVZhbGlkYXRvci52YWxpZGF0ZVNpZ25pblJlc3BvbnNlOiBjbGFpbXMgcHJvY2Vzc2VkXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICB2YWxpZGF0ZVNpZ25vdXRSZXNwb25zZShzdGF0ZSwgcmVzcG9uc2UpIHtcclxuICAgICAgICBpZiAoc3RhdGUuaWQgIT09IHJlc3BvbnNlLnN0YXRlKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLnZhbGlkYXRlU2lnbm91dFJlc3BvbnNlOiBTdGF0ZSBkb2VzIG5vdCBtYXRjaFwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIlN0YXRlIGRvZXMgbm90IG1hdGNoXCIpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIG5vdyB0aGF0IHdlIGtub3cgdGhlIHN0YXRlIG1hdGNoZXMsIHRha2UgdGhlIHN0b3JlZCBkYXRhXHJcbiAgICAgICAgLy8gYW5kIHNldCBpdCBpbnRvIHRoZSByZXNwb25zZSBzbyBjYWxsZXJzIGNhbiBnZXQgdGhlaXIgc3RhdGVcclxuICAgICAgICAvLyB0aGlzIGlzIGltcG9ydGFudCBmb3IgYm90aCBzdWNjZXNzICYgZXJyb3Igb3V0Y29tZXNcclxuICAgICAgICBMb2cuZGVidWcoXCJSZXNwb25zZVZhbGlkYXRvci52YWxpZGF0ZVNpZ25vdXRSZXNwb25zZTogc3RhdGUgdmFsaWRhdGVkXCIpO1xyXG4gICAgICAgIHJlc3BvbnNlLnN0YXRlID0gc3RhdGUuZGF0YTtcclxuXHJcbiAgICAgICAgaWYgKHJlc3BvbnNlLmVycm9yKSB7XHJcbiAgICAgICAgICAgIExvZy53YXJuKFwiUmVzcG9uc2VWYWxpZGF0b3IudmFsaWRhdGVTaWdub3V0UmVzcG9uc2U6IFJlc3BvbnNlIHdhcyBlcnJvclwiLCByZXNwb25zZS5lcnJvcik7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3JSZXNwb25zZShyZXNwb25zZSkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShyZXNwb25zZSk7XHJcbiAgICB9XHJcblxyXG4gICAgX3Byb2Nlc3NTaWduaW5QYXJhbXMoc3RhdGUsIHJlc3BvbnNlKSB7XHJcbiAgICAgICAgaWYgKHN0YXRlLmlkICE9PSByZXNwb25zZS5zdGF0ZSkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5fcHJvY2Vzc1NpZ25pblBhcmFtczogU3RhdGUgZG9lcyBub3QgbWF0Y2hcIik7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJTdGF0ZSBkb2VzIG5vdCBtYXRjaFwiKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXN0YXRlLmNsaWVudF9pZCkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5fcHJvY2Vzc1NpZ25pblBhcmFtczogTm8gY2xpZW50X2lkIG9uIHN0YXRlXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiTm8gY2xpZW50X2lkIG9uIHN0YXRlXCIpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghc3RhdGUuYXV0aG9yaXR5KSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLl9wcm9jZXNzU2lnbmluUGFyYW1zOiBObyBhdXRob3JpdHkgb24gc3RhdGVcIik7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJObyBhdXRob3JpdHkgb24gc3RhdGVcIikpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gdGhpcyBhbGxvd3MgdGhlIGF1dGhvcml0eSB0byBiZSBsb2FkZWQgZnJvbSB0aGUgc2lnbmluIHN0YXRlXHJcbiAgICAgICAgaWYgKCF0aGlzLl9zZXR0aW5ncy5hdXRob3JpdHkpIHtcclxuICAgICAgICAgICAgdGhpcy5fc2V0dGluZ3MuYXV0aG9yaXR5ID0gc3RhdGUuYXV0aG9yaXR5O1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBlbnN1cmUgd2UncmUgdXNpbmcgdGhlIGNvcnJlY3QgYXV0aG9yaXR5IGlmIHRoZSBhdXRob3JpdHkgaXMgbm90IGxvYWRlZCBmcm9tIHNpZ25pbiBzdGF0ZVxyXG4gICAgICAgIGVsc2UgaWYgKHRoaXMuX3NldHRpbmdzLmF1dGhvcml0eSAmJiB0aGlzLl9zZXR0aW5ncy5hdXRob3JpdHkgIT09IHN0YXRlLmF1dGhvcml0eSkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5fcHJvY2Vzc1NpZ25pblBhcmFtczogYXV0aG9yaXR5IG1pc21hdGNoIG9uIHNldHRpbmdzIHZzLiBzaWduaW4gc3RhdGVcIik7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJhdXRob3JpdHkgbWlzbWF0Y2ggb24gc2V0dGluZ3MgdnMuIHNpZ25pbiBzdGF0ZVwiKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIHRoaXMgYWxsb3dzIHRoZSBjbGllbnRfaWQgdG8gYmUgbG9hZGVkIGZyb20gdGhlIHNpZ25pbiBzdGF0ZVxyXG4gICAgICAgIGlmICghdGhpcy5fc2V0dGluZ3MuY2xpZW50X2lkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3NldHRpbmdzLmNsaWVudF9pZCA9IHN0YXRlLmNsaWVudF9pZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gZW5zdXJlIHdlJ3JlIHVzaW5nIHRoZSBjb3JyZWN0IGNsaWVudF9pZCBpZiB0aGUgY2xpZW50X2lkIGlzIG5vdCBsb2FkZWQgZnJvbSBzaWduaW4gc3RhdGVcclxuICAgICAgICBlbHNlIGlmICh0aGlzLl9zZXR0aW5ncy5jbGllbnRfaWQgJiYgdGhpcy5fc2V0dGluZ3MuY2xpZW50X2lkICE9PSBzdGF0ZS5jbGllbnRfaWQpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3Byb2Nlc3NTaWduaW5QYXJhbXM6IGNsaWVudF9pZCBtaXNtYXRjaCBvbiBzZXR0aW5ncyB2cy4gc2lnbmluIHN0YXRlXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiY2xpZW50X2lkIG1pc21hdGNoIG9uIHNldHRpbmdzIHZzLiBzaWduaW4gc3RhdGVcIikpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gbm93IHRoYXQgd2Uga25vdyB0aGUgc3RhdGUgbWF0Y2hlcywgdGFrZSB0aGUgc3RvcmVkIGRhdGFcclxuICAgICAgICAvLyBhbmQgc2V0IGl0IGludG8gdGhlIHJlc3BvbnNlIHNvIGNhbGxlcnMgY2FuIGdldCB0aGVpciBzdGF0ZVxyXG4gICAgICAgIC8vIHRoaXMgaXMgaW1wb3J0YW50IGZvciBib3RoIHN1Y2Nlc3MgJiBlcnJvciBvdXRjb21lc1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLl9wcm9jZXNzU2lnbmluUGFyYW1zOiBzdGF0ZSB2YWxpZGF0ZWRcIik7XHJcbiAgICAgICAgcmVzcG9uc2Uuc3RhdGUgPSBzdGF0ZS5kYXRhO1xyXG5cclxuICAgICAgICBpZiAocmVzcG9uc2UuZXJyb3IpIHtcclxuICAgICAgICAgICAgTG9nLndhcm4oXCJSZXNwb25zZVZhbGlkYXRvci5fcHJvY2Vzc1NpZ25pblBhcmFtczogUmVzcG9uc2Ugd2FzIGVycm9yXCIsIHJlc3BvbnNlLmVycm9yKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvclJlc3BvbnNlKHJlc3BvbnNlKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoc3RhdGUubm9uY2UgJiYgIXJlc3BvbnNlLmlkX3Rva2VuKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLl9wcm9jZXNzU2lnbmluUGFyYW1zOiBFeHBlY3RpbmcgaWRfdG9rZW4gaW4gcmVzcG9uc2VcIik7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJObyBpZF90b2tlbiBpbiByZXNwb25zZVwiKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXN0YXRlLm5vbmNlICYmIHJlc3BvbnNlLmlkX3Rva2VuKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLl9wcm9jZXNzU2lnbmluUGFyYW1zOiBOb3QgZXhwZWN0aW5nIGlkX3Rva2VuIGluIHJlc3BvbnNlXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiVW5leHBlY3RlZCBpZF90b2tlbiBpbiByZXNwb25zZVwiKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoc3RhdGUuY29kZV92ZXJpZmllciAmJiAhcmVzcG9uc2UuY29kZSkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5fcHJvY2Vzc1NpZ25pblBhcmFtczogRXhwZWN0aW5nIGNvZGUgaW4gcmVzcG9uc2VcIik7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJObyBjb2RlIGluIHJlc3BvbnNlXCIpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghc3RhdGUuY29kZV92ZXJpZmllciAmJiByZXNwb25zZS5jb2RlKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLl9wcm9jZXNzU2lnbmluUGFyYW1zOiBOb3QgZXhwZWN0aW5nIGNvZGUgaW4gcmVzcG9uc2VcIik7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJVbmV4cGVjdGVkIGNvZGUgaW4gcmVzcG9uc2VcIikpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFyZXNwb25zZS5zY29wZSkge1xyXG4gICAgICAgICAgICAvLyBpZiB0aGVyZSdzIG5vIHNjb3BlIG9uIHRoZSByZXNwb25zZSwgdGhlbiBhc3N1bWUgYWxsIHNjb3BlcyBncmFudGVkIChwZXItc3BlYykgYW5kIGNvcHkgb3ZlciBzY29wZXMgZnJvbSBvcmlnaW5hbCByZXF1ZXN0XHJcbiAgICAgICAgICAgIHJlc3BvbnNlLnNjb3BlID0gc3RhdGUuc2NvcGU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlc3BvbnNlKTtcclxuICAgIH1cclxuXHJcbiAgICBfcHJvY2Vzc0NsYWltcyhzdGF0ZSwgcmVzcG9uc2UpIHtcclxuICAgICAgICBpZiAocmVzcG9uc2UuaXNPcGVuSWRDb25uZWN0KSB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLl9wcm9jZXNzQ2xhaW1zOiByZXNwb25zZSBpcyBPSURDLCBwcm9jZXNzaW5nIGNsYWltc1wiKTtcclxuXHJcbiAgICAgICAgICAgIHJlc3BvbnNlLnByb2ZpbGUgPSB0aGlzLl9maWx0ZXJQcm90b2NvbENsYWltcyhyZXNwb25zZS5wcm9maWxlKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChzdGF0ZS5za2lwVXNlckluZm8gIT09IHRydWUgJiYgdGhpcy5fc2V0dGluZ3MubG9hZFVzZXJJbmZvICYmIHJlc3BvbnNlLmFjY2Vzc190b2tlbikge1xyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3Byb2Nlc3NDbGFpbXM6IGxvYWRpbmcgdXNlciBpbmZvXCIpO1xyXG5cclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl91c2VySW5mb1NlcnZpY2UuZ2V0Q2xhaW1zKHJlc3BvbnNlLmFjY2Vzc190b2tlbikudGhlbihjbGFpbXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLl9wcm9jZXNzQ2xhaW1zOiB1c2VyIGluZm8gY2xhaW1zIHJlY2VpdmVkIGZyb20gdXNlciBpbmZvIGVuZHBvaW50XCIpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoY2xhaW1zLnN1YiAhPT0gcmVzcG9uc2UucHJvZmlsZS5zdWIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3Byb2Nlc3NDbGFpbXM6IHN1YiBmcm9tIHVzZXIgaW5mbyBlbmRwb2ludCBkb2VzIG5vdCBtYXRjaCBzdWIgaW4gYWNjZXNzX3Rva2VuXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwic3ViIGZyb20gdXNlciBpbmZvIGVuZHBvaW50IGRvZXMgbm90IG1hdGNoIHN1YiBpbiBhY2Nlc3NfdG9rZW5cIikpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UucHJvZmlsZSA9IHRoaXMuX21lcmdlQ2xhaW1zKHJlc3BvbnNlLnByb2ZpbGUsIGNsYWltcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3Byb2Nlc3NDbGFpbXM6IHVzZXIgaW5mbyBjbGFpbXMgcmVjZWl2ZWQsIHVwZGF0ZWQgcHJvZmlsZTpcIiwgcmVzcG9uc2UucHJvZmlsZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3Byb2Nlc3NDbGFpbXM6IG5vdCBsb2FkaW5nIHVzZXIgaW5mb1wiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3Byb2Nlc3NDbGFpbXM6IHJlc3BvbnNlIGlzIG5vdCBPSURDLCBub3QgcHJvY2Vzc2luZyBjbGFpbXNcIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlc3BvbnNlKTtcclxuICAgIH1cclxuXHJcbiAgICBfbWVyZ2VDbGFpbXMoY2xhaW1zMSwgY2xhaW1zMikge1xyXG4gICAgICAgIHZhciByZXN1bHQgPSBPYmplY3QuYXNzaWduKHt9LCBjbGFpbXMxKTtcclxuXHJcbiAgICAgICAgZm9yIChsZXQgbmFtZSBpbiBjbGFpbXMyKSB7XHJcbiAgICAgICAgICAgIHZhciB2YWx1ZXMgPSBjbGFpbXMyW25hbWVdO1xyXG4gICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWVzKSkge1xyXG4gICAgICAgICAgICAgICAgdmFsdWVzID0gW3ZhbHVlc107XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSB2YWx1ZXNbaV07XHJcbiAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdFtuYW1lXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdFtuYW1lXSA9IHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShyZXN1bHRbbmFtZV0pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdFtuYW1lXS5pbmRleE9mKHZhbHVlKSA8IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0W25hbWVdLnB1c2godmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJlc3VsdFtuYW1lXSAhPT0gdmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRbbmFtZV0gPSB0aGlzLl9tZXJnZUNsYWltcyhyZXN1bHRbbmFtZV0sIHZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICB9IFxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRbbmFtZV0gPSBbcmVzdWx0W25hbWVdLCB2YWx1ZV07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICAgIF9maWx0ZXJQcm90b2NvbENsYWltcyhjbGFpbXMpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJSZXNwb25zZVZhbGlkYXRvci5fZmlsdGVyUHJvdG9jb2xDbGFpbXMsIGluY29taW5nIGNsYWltczpcIiwgY2xhaW1zKTtcclxuXHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IE9iamVjdC5hc3NpZ24oe30sIGNsYWltcyk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl9zZXR0aW5ncy5fZmlsdGVyUHJvdG9jb2xDbGFpbXMpIHtcclxuICAgICAgICAgICAgUHJvdG9jb2xDbGFpbXMuZm9yRWFjaCh0eXBlID0+IHtcclxuICAgICAgICAgICAgICAgIGRlbGV0ZSByZXN1bHRbdHlwZV07XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX2ZpbHRlclByb3RvY29sQ2xhaW1zOiBwcm90b2NvbCBjbGFpbXMgZmlsdGVyZWRcIiwgcmVzdWx0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLl9maWx0ZXJQcm90b2NvbENsYWltczogcHJvdG9jb2wgY2xhaW1zIG5vdCBmaWx0ZXJlZFwiKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICBfdmFsaWRhdGVUb2tlbnMoc3RhdGUsIHJlc3BvbnNlKSB7XHJcbiAgICAgICAgaWYgKHJlc3BvbnNlLmNvZGUpIHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlVG9rZW5zOiBWYWxpZGF0aW5nIGNvZGVcIik7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9wcm9jZXNzQ29kZShzdGF0ZSwgcmVzcG9uc2UpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHJlc3BvbnNlLmlkX3Rva2VuKSB7XHJcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5hY2Nlc3NfdG9rZW4pIHtcclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLl92YWxpZGF0ZVRva2VuczogVmFsaWRhdGluZyBpZF90b2tlbiBhbmQgYWNjZXNzX3Rva2VuXCIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbGlkYXRlSWRUb2tlbkFuZEFjY2Vzc1Rva2VuKHN0YXRlLCByZXNwb25zZSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLl92YWxpZGF0ZVRva2VuczogVmFsaWRhdGluZyBpZF90b2tlblwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbGlkYXRlSWRUb2tlbihzdGF0ZSwgcmVzcG9uc2UpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlVG9rZW5zOiBObyBjb2RlIHRvIHByb2Nlc3Mgb3IgaWRfdG9rZW4gdG8gdmFsaWRhdGVcIik7XHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShyZXNwb25zZSk7XHJcbiAgICB9XHJcblxyXG4gICAgX3Byb2Nlc3NDb2RlKHN0YXRlLCByZXNwb25zZSkge1xyXG4gICAgICAgIHZhciByZXF1ZXN0ID0ge1xyXG4gICAgICAgICAgICBjbGllbnRfaWQ6IHN0YXRlLmNsaWVudF9pZCxcclxuICAgICAgICAgICAgY2xpZW50X3NlY3JldDogc3RhdGUuY2xpZW50X3NlY3JldCxcclxuICAgICAgICAgICAgY29kZSA6IHJlc3BvbnNlLmNvZGUsXHJcbiAgICAgICAgICAgIHJlZGlyZWN0X3VyaTogc3RhdGUucmVkaXJlY3RfdXJpLFxyXG4gICAgICAgICAgICBjb2RlX3ZlcmlmaWVyOiBzdGF0ZS5jb2RlX3ZlcmlmaWVyXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgaWYgKHN0YXRlLmV4dHJhVG9rZW5QYXJhbXMgJiYgdHlwZW9mKHN0YXRlLmV4dHJhVG9rZW5QYXJhbXMpID09PSAnb2JqZWN0Jykge1xyXG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKHJlcXVlc3QsIHN0YXRlLmV4dHJhVG9rZW5QYXJhbXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICByZXR1cm4gdGhpcy5fdG9rZW5DbGllbnQuZXhjaGFuZ2VDb2RlKHJlcXVlc3QpLnRoZW4odG9rZW5SZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBmb3IodmFyIGtleSBpbiB0b2tlblJlc3BvbnNlKSB7XHJcbiAgICAgICAgICAgICAgICByZXNwb25zZVtrZXldID0gdG9rZW5SZXNwb25zZVtrZXldO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAocmVzcG9uc2UuaWRfdG9rZW4pIHtcclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLl9wcm9jZXNzQ29kZTogdG9rZW4gcmVzcG9uc2Ugc3VjY2Vzc2Z1bCwgcHJvY2Vzc2luZyBpZF90b2tlblwiKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl92YWxpZGF0ZUlkVG9rZW5BdHRyaWJ1dGVzKHN0YXRlLCByZXNwb25zZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJSZXNwb25zZVZhbGlkYXRvci5fcHJvY2Vzc0NvZGU6IHRva2VuIHJlc3BvbnNlIHN1Y2Nlc3NmdWwsIHJldHVybmluZyByZXNwb25zZVwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIF92YWxpZGF0ZUlkVG9rZW5BdHRyaWJ1dGVzKHN0YXRlLCByZXNwb25zZSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9tZXRhZGF0YVNlcnZpY2UuZ2V0SXNzdWVyKCkudGhlbihpc3N1ZXIgPT4ge1xyXG5cclxuICAgICAgICAgICAgbGV0IGF1ZGllbmNlID0gc3RhdGUuY2xpZW50X2lkO1xyXG4gICAgICAgICAgICBsZXQgY2xvY2tTa2V3SW5TZWNvbmRzID0gdGhpcy5fc2V0dGluZ3MuY2xvY2tTa2V3O1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJSZXNwb25zZVZhbGlkYXRvci5fdmFsaWRhdGVJZFRva2VuQXR0cmlidXRlczogVmFsaWRhaW5nIEpXVCBhdHRyaWJ1dGVzOyB1c2luZyBjbG9jayBza2V3IChpbiBzZWNvbmRzKSBvZjogXCIsIGNsb2NrU2tld0luU2Vjb25kcyk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fam9zZVV0aWwudmFsaWRhdGVKd3RBdHRyaWJ1dGVzKHJlc3BvbnNlLmlkX3Rva2VuLCBpc3N1ZXIsIGF1ZGllbmNlLCBjbG9ja1NrZXdJblNlY29uZHMpLnRoZW4ocGF5bG9hZCA9PiB7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgaWYgKHN0YXRlLm5vbmNlICYmIHN0YXRlLm5vbmNlICE9PSBwYXlsb2FkLm5vbmNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlSWRUb2tlbkF0dHJpYnV0ZXM6IEludmFsaWQgbm9uY2UgaW4gaWRfdG9rZW5cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIkludmFsaWQgbm9uY2UgaW4gaWRfdG9rZW5cIikpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmICghcGF5bG9hZC5zdWIpIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5fdmFsaWRhdGVJZFRva2VuQXR0cmlidXRlczogTm8gc3ViIHByZXNlbnQgaW4gaWRfdG9rZW5cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIk5vIHN1YiBwcmVzZW50IGluIGlkX3Rva2VuXCIpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICByZXNwb25zZS5wcm9maWxlID0gcGF5bG9hZDtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgX3ZhbGlkYXRlSWRUb2tlbkFuZEFjY2Vzc1Rva2VuKHN0YXRlLCByZXNwb25zZSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl92YWxpZGF0ZUlkVG9rZW4oc3RhdGUsIHJlc3BvbnNlKS50aGVuKHJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbGlkYXRlQWNjZXNzVG9rZW4ocmVzcG9uc2UpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIF92YWxpZGF0ZUlkVG9rZW4oc3RhdGUsIHJlc3BvbnNlKSB7XHJcbiAgICAgICAgaWYgKCFzdGF0ZS5ub25jZSkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5fdmFsaWRhdGVJZFRva2VuOiBObyBub25jZSBvbiBzdGF0ZVwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIk5vIG5vbmNlIG9uIHN0YXRlXCIpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBqd3QgPSB0aGlzLl9qb3NlVXRpbC5wYXJzZUp3dChyZXNwb25zZS5pZF90b2tlbik7XHJcbiAgICAgICAgaWYgKCFqd3QgfHwgIWp3dC5oZWFkZXIgfHwgIWp3dC5wYXlsb2FkKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLl92YWxpZGF0ZUlkVG9rZW46IEZhaWxlZCB0byBwYXJzZSBpZF90b2tlblwiLCBqd3QpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiRmFpbGVkIHRvIHBhcnNlIGlkX3Rva2VuXCIpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChzdGF0ZS5ub25jZSAhPT0gand0LnBheWxvYWQubm9uY2UpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlSWRUb2tlbjogSW52YWxpZCBub25jZSBpbiBpZF90b2tlblwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIkludmFsaWQgbm9uY2UgaW4gaWRfdG9rZW5cIikpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGtpZCA9IGp3dC5oZWFkZXIua2lkO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5fbWV0YWRhdGFTZXJ2aWNlLmdldElzc3VlcigpLnRoZW4oaXNzdWVyID0+IHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlSWRUb2tlbjogUmVjZWl2ZWQgaXNzdWVyXCIpO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21ldGFkYXRhU2VydmljZS5nZXRTaWduaW5nS2V5cygpLnRoZW4oa2V5cyA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWtleXMpIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5fdmFsaWRhdGVJZFRva2VuOiBObyBzaWduaW5nIGtleXMgZnJvbSBtZXRhZGF0YVwiKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiTm8gc2lnbmluZyBrZXlzIGZyb20gbWV0YWRhdGFcIikpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLl92YWxpZGF0ZUlkVG9rZW46IFJlY2VpdmVkIHNpZ25pbmcga2V5c1wiKTtcclxuICAgICAgICAgICAgICAgIGxldCBrZXk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWtpZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGtleXMgPSB0aGlzLl9maWx0ZXJCeUFsZyhrZXlzLCBqd3QuaGVhZGVyLmFsZyk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChrZXlzLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlSWRUb2tlbjogTm8ga2lkIGZvdW5kIGluIGlkX3Rva2VuIGFuZCBtb3JlIHRoYW4gb25lIGtleSBmb3VuZCBpbiBtZXRhZGF0YVwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIk5vIGtpZCBmb3VuZCBpbiBpZF90b2tlbiBhbmQgbW9yZSB0aGFuIG9uZSBrZXkgZm91bmQgaW4gbWV0YWRhdGFcIikpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8ga2lkIGlzIG1hbmRhdG9yeSBvbmx5IHdoZW4gdGhlcmUgYXJlIG11bHRpcGxlIGtleXMgaW4gdGhlIHJlZmVyZW5jZWQgSldLIFNldCBkb2N1bWVudFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBzZWUgaHR0cDovL29wZW5pZC5uZXQvc3BlY3Mvb3BlbmlkLWNvbm5lY3QtY29yZS0xXzAuaHRtbCNTaWduaW5nXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleSA9IGtleXNbMF07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAga2V5ID0ga2V5cy5maWx0ZXIoa2V5ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGtleS5raWQgPT09IGtpZDtcclxuICAgICAgICAgICAgICAgICAgICB9KVswXTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoIWtleSkge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLl92YWxpZGF0ZUlkVG9rZW46IE5vIGtleSBtYXRjaGluZyBraWQgb3IgYWxnIGZvdW5kIGluIHNpZ25pbmcga2V5c1wiKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiTm8ga2V5IG1hdGNoaW5nIGtpZCBvciBhbGcgZm91bmQgaW4gc2lnbmluZyBrZXlzXCIpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgYXVkaWVuY2UgPSBzdGF0ZS5jbGllbnRfaWQ7XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IGNsb2NrU2tld0luU2Vjb25kcyA9IHRoaXMuX3NldHRpbmdzLmNsb2NrU2tldztcclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLl92YWxpZGF0ZUlkVG9rZW46IFZhbGlkYWluZyBKV1Q7IHVzaW5nIGNsb2NrIHNrZXcgKGluIHNlY29uZHMpIG9mOiBcIiwgY2xvY2tTa2V3SW5TZWNvbmRzKTtcclxuXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fam9zZVV0aWwudmFsaWRhdGVKd3QocmVzcG9uc2UuaWRfdG9rZW4sIGtleSwgaXNzdWVyLCBhdWRpZW5jZSwgY2xvY2tTa2V3SW5TZWNvbmRzKS50aGVuKCgpPT57XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlSWRUb2tlbjogSldUIHZhbGlkYXRpb24gc3VjY2Vzc2Z1bFwiKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFqd3QucGF5bG9hZC5zdWIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlSWRUb2tlbjogTm8gc3ViIHByZXNlbnQgaW4gaWRfdG9rZW5cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJObyBzdWIgcHJlc2VudCBpbiBpZF90b2tlblwiKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5wcm9maWxlID0gand0LnBheWxvYWQ7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBfZmlsdGVyQnlBbGcoa2V5cywgYWxnKXtcclxuICAgICAgICB2YXIga3R5ID0gbnVsbDtcclxuICAgICAgICBpZiAoYWxnLnN0YXJ0c1dpdGgoXCJSU1wiKSkge1xyXG4gICAgICAgICAgICBrdHkgPSBcIlJTQVwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChhbGcuc3RhcnRzV2l0aChcIlBTXCIpKSB7XHJcbiAgICAgICAgICAgIGt0eSA9IFwiUFNcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoYWxnLnN0YXJ0c1dpdGgoXCJFU1wiKSkge1xyXG4gICAgICAgICAgICBrdHkgPSBcIkVDXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJSZXNwb25zZVZhbGlkYXRvci5fZmlsdGVyQnlBbGc6IGFsZyBub3Qgc3VwcG9ydGVkOiBcIiwgYWxnKTtcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX2ZpbHRlckJ5QWxnOiBMb29raW5nIGZvciBrZXlzIHRoYXQgbWF0Y2gga3R5OiBcIiwga3R5KTtcclxuXHJcbiAgICAgICAga2V5cyA9IGtleXMuZmlsdGVyKGtleSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBrZXkua3R5ID09PSBrdHk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLl9maWx0ZXJCeUFsZzogTnVtYmVyIG9mIGtleXMgdGhhdCBtYXRjaCBrdHk6IFwiLCBrdHksIGtleXMubGVuZ3RoKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGtleXM7XHJcbiAgICB9XHJcblxyXG4gICAgX3ZhbGlkYXRlQWNjZXNzVG9rZW4ocmVzcG9uc2UpIHtcclxuICAgICAgICBpZiAoIXJlc3BvbnNlLnByb2ZpbGUpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlQWNjZXNzVG9rZW46IE5vIHByb2ZpbGUgbG9hZGVkIGZyb20gaWRfdG9rZW5cIik7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJObyBwcm9maWxlIGxvYWRlZCBmcm9tIGlkX3Rva2VuXCIpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghcmVzcG9uc2UucHJvZmlsZS5hdF9oYXNoKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLl92YWxpZGF0ZUFjY2Vzc1Rva2VuOiBObyBhdF9oYXNoIGluIGlkX3Rva2VuXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiTm8gYXRfaGFzaCBpbiBpZF90b2tlblwiKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXJlc3BvbnNlLmlkX3Rva2VuKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLl92YWxpZGF0ZUFjY2Vzc1Rva2VuOiBObyBpZF90b2tlblwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIk5vIGlkX3Rva2VuXCIpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBqd3QgPSB0aGlzLl9qb3NlVXRpbC5wYXJzZUp3dChyZXNwb25zZS5pZF90b2tlbik7XHJcbiAgICAgICAgaWYgKCFqd3QgfHwgIWp3dC5oZWFkZXIpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlQWNjZXNzVG9rZW46IEZhaWxlZCB0byBwYXJzZSBpZF90b2tlblwiLCBqd3QpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiRmFpbGVkIHRvIHBhcnNlIGlkX3Rva2VuXCIpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBoYXNoQWxnID0gand0LmhlYWRlci5hbGc7XHJcbiAgICAgICAgaWYgKCFoYXNoQWxnIHx8IGhhc2hBbGcubGVuZ3RoICE9PSA1KSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLl92YWxpZGF0ZUFjY2Vzc1Rva2VuOiBVbnN1cHBvcnRlZCBhbGc6XCIsIGhhc2hBbGcpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiVW5zdXBwb3J0ZWQgYWxnOiBcIiArIGhhc2hBbGcpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBoYXNoQml0cyA9IGhhc2hBbGcuc3Vic3RyKDIsIDMpO1xyXG4gICAgICAgIGlmICghaGFzaEJpdHMpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlQWNjZXNzVG9rZW46IFVuc3VwcG9ydGVkIGFsZzpcIiwgaGFzaEFsZywgaGFzaEJpdHMpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiVW5zdXBwb3J0ZWQgYWxnOiBcIiArIGhhc2hBbGcpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGhhc2hCaXRzID0gcGFyc2VJbnQoaGFzaEJpdHMpO1xyXG4gICAgICAgIGlmIChoYXNoQml0cyAhPT0gMjU2ICYmIGhhc2hCaXRzICE9PSAzODQgJiYgaGFzaEJpdHMgIT09IDUxMikge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5fdmFsaWRhdGVBY2Nlc3NUb2tlbjogVW5zdXBwb3J0ZWQgYWxnOlwiLCBoYXNoQWxnLCBoYXNoQml0cyk7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJVbnN1cHBvcnRlZCBhbGc6IFwiICsgaGFzaEFsZykpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHNoYSA9IFwic2hhXCIgKyBoYXNoQml0cztcclxuICAgICAgICB2YXIgaGFzaCA9IHRoaXMuX2pvc2VVdGlsLmhhc2hTdHJpbmcocmVzcG9uc2UuYWNjZXNzX3Rva2VuLCBzaGEpO1xyXG4gICAgICAgIGlmICghaGFzaCkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5fdmFsaWRhdGVBY2Nlc3NUb2tlbjogYWNjZXNzX3Rva2VuIGhhc2ggZmFpbGVkOlwiLCBzaGEpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiRmFpbGVkIHRvIHZhbGlkYXRlIGF0X2hhc2hcIikpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGxlZnQgPSBoYXNoLnN1YnN0cigwLCBoYXNoLmxlbmd0aCAvIDIpO1xyXG4gICAgICAgIHZhciBsZWZ0X2I2NHUgPSB0aGlzLl9qb3NlVXRpbC5oZXhUb0Jhc2U2NFVybChsZWZ0KTtcclxuICAgICAgICBpZiAobGVmdF9iNjR1ICE9PSByZXNwb25zZS5wcm9maWxlLmF0X2hhc2gpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlQWNjZXNzVG9rZW46IEZhaWxlZCB0byB2YWxpZGF0ZSBhdF9oYXNoXCIsIGxlZnRfYjY0dSwgcmVzcG9uc2UucHJvZmlsZS5hdF9oYXNoKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIkZhaWxlZCB0byB2YWxpZGF0ZSBhdF9oYXNoXCIpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLl92YWxpZGF0ZUFjY2Vzc1Rva2VuOiBzdWNjZXNzXCIpO1xyXG5cclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlc3BvbnNlKTtcclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcbmltcG9ydCB7IENoZWNrU2Vzc2lvbklGcmFtZSB9IGZyb20gJy4vQ2hlY2tTZXNzaW9uSUZyYW1lLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBTZXNzaW9uTW9uaXRvciB7XHJcblxyXG4gICAgY29uc3RydWN0b3IodXNlck1hbmFnZXIsIENoZWNrU2Vzc2lvbklGcmFtZUN0b3IgPSBDaGVja1Nlc3Npb25JRnJhbWUpIHtcclxuICAgICAgICBpZiAoIXVzZXJNYW5hZ2VyKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlNlc3Npb25Nb25pdG9yLmN0b3I6IE5vIHVzZXIgbWFuYWdlciBwYXNzZWQgdG8gU2Vzc2lvbk1vbml0b3JcIik7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInVzZXJNYW5hZ2VyXCIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fdXNlck1hbmFnZXIgPSB1c2VyTWFuYWdlcjtcclxuICAgICAgICB0aGlzLl9DaGVja1Nlc3Npb25JRnJhbWVDdG9yID0gQ2hlY2tTZXNzaW9uSUZyYW1lQ3RvcjtcclxuXHJcbiAgICAgICAgdGhpcy5fdXNlck1hbmFnZXIuZXZlbnRzLmFkZFVzZXJMb2FkZWQodGhpcy5fc3RhcnQuYmluZCh0aGlzKSk7XHJcbiAgICAgICAgdGhpcy5fdXNlck1hbmFnZXIuZXZlbnRzLmFkZFVzZXJVbmxvYWRlZCh0aGlzLl9zdG9wLmJpbmQodGhpcykpO1xyXG5cclxuICAgICAgICB0aGlzLl91c2VyTWFuYWdlci5nZXRVc2VyKCkudGhlbih1c2VyID0+IHtcclxuICAgICAgICAgICAgLy8gZG9pbmcgdGhpcyBtYW51YWxseSBoZXJlIHNpbmNlIGNhbGxpbmcgZ2V0VXNlciBcclxuICAgICAgICAgICAgLy8gZG9lc24ndCB0cmlnZ2VyIGxvYWQgZXZlbnQuXHJcbiAgICAgICAgICAgIGlmICh1c2VyKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGFydCh1c2VyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICh0aGlzLl9zZXR0aW5ncy5tb25pdG9yQW5vbnltb3VzU2Vzc2lvbikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fdXNlck1hbmFnZXIucXVlcnlTZXNzaW9uU3RhdHVzKCkudGhlbihzZXNzaW9uID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgdG1wVXNlciA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbl9zdGF0ZSA6IHNlc3Npb24uc2Vzc2lvbl9zdGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlc3Npb24uc3ViICYmIHNlc3Npb24uc2lkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRtcFVzZXIucHJvZmlsZSA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Yjogc2Vzc2lvbi5zdWIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWQ6IHNlc3Npb24uc2lkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3N0YXJ0KHRtcFVzZXIpO1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIC5jYXRjaChlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGNhdGNoIHRvIHN1cHByZXNzIGVycm9ycyBzaW5jZSB3ZSdyZSBpbiBhIGN0b3JcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJTZXNzaW9uTW9uaXRvciBjdG9yOiBlcnJvciBmcm9tIHF1ZXJ5U2Vzc2lvblN0YXR1czpcIiwgZXJyLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KS5jYXRjaChlcnIgPT4ge1xyXG4gICAgICAgICAgICAvLyBjYXRjaCB0byBzdXBwcmVzcyBlcnJvcnMgc2luY2Ugd2UncmUgaW4gYSBjdG9yXHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlNlc3Npb25Nb25pdG9yIGN0b3I6IGVycm9yIGZyb20gZ2V0VXNlcjpcIiwgZXJyLm1lc3NhZ2UpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBfc2V0dGluZ3MoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3VzZXJNYW5hZ2VyLnNldHRpbmdzO1xyXG4gICAgfVxyXG4gICAgZ2V0IF9tZXRhZGF0YVNlcnZpY2UoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3VzZXJNYW5hZ2VyLm1ldGFkYXRhU2VydmljZTtcclxuICAgIH1cclxuICAgIGdldCBfY2xpZW50X2lkKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zZXR0aW5ncy5jbGllbnRfaWQ7XHJcbiAgICB9XHJcbiAgICBnZXQgX2NoZWNrU2Vzc2lvbkludGVydmFsKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zZXR0aW5ncy5jaGVja1Nlc3Npb25JbnRlcnZhbDtcclxuICAgIH1cclxuICAgIGdldCBfc3RvcENoZWNrU2Vzc2lvbk9uRXJyb3IoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NldHRpbmdzLnN0b3BDaGVja1Nlc3Npb25PbkVycm9yO1xyXG4gICAgfVxyXG5cclxuICAgIF9zdGFydCh1c2VyKSB7XHJcbiAgICAgICAgbGV0IHNlc3Npb25fc3RhdGUgPSB1c2VyLnNlc3Npb25fc3RhdGU7XHJcblxyXG4gICAgICAgIGlmIChzZXNzaW9uX3N0YXRlKSB7XHJcbiAgICAgICAgICAgIGlmICh1c2VyLnByb2ZpbGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3N1YiA9IHVzZXIucHJvZmlsZS5zdWI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zaWQgPSB1c2VyLnByb2ZpbGUuc2lkO1xyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiU2Vzc2lvbk1vbml0b3IuX3N0YXJ0OiBzZXNzaW9uX3N0YXRlOlwiLCBzZXNzaW9uX3N0YXRlLCBcIiwgc3ViOlwiLCB0aGlzLl9zdWIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fc3ViID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fc2lkID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiU2Vzc2lvbk1vbml0b3IuX3N0YXJ0OiBzZXNzaW9uX3N0YXRlOlwiLCBzZXNzaW9uX3N0YXRlLCBcIiwgYW5vbnltb3VzIHVzZXJcIik7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICghdGhpcy5fY2hlY2tTZXNzaW9uSUZyYW1lKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9tZXRhZGF0YVNlcnZpY2UuZ2V0Q2hlY2tTZXNzaW9uSWZyYW1lKCkudGhlbih1cmwgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh1cmwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiU2Vzc2lvbk1vbml0b3IuX3N0YXJ0OiBJbml0aWFsaXppbmcgY2hlY2sgc2Vzc2lvbiBpZnJhbWVcIilcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjbGllbnRfaWQgPSB0aGlzLl9jbGllbnRfaWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpbnRlcnZhbCA9IHRoaXMuX2NoZWNrU2Vzc2lvbkludGVydmFsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgc3RvcE9uRXJyb3IgPSB0aGlzLl9zdG9wQ2hlY2tTZXNzaW9uT25FcnJvcjtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoZWNrU2Vzc2lvbklGcmFtZSA9IG5ldyB0aGlzLl9DaGVja1Nlc3Npb25JRnJhbWVDdG9yKHRoaXMuX2NhbGxiYWNrLmJpbmQodGhpcyksIGNsaWVudF9pZCwgdXJsLCBpbnRlcnZhbCwgc3RvcE9uRXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGVja1Nlc3Npb25JRnJhbWUubG9hZCgpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hlY2tTZXNzaW9uSUZyYW1lLnN0YXJ0KHNlc3Npb25fc3RhdGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIExvZy53YXJuKFwiU2Vzc2lvbk1vbml0b3IuX3N0YXJ0OiBObyBjaGVjayBzZXNzaW9uIGlmcmFtZSBmb3VuZCBpbiB0aGUgbWV0YWRhdGFcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goZXJyID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBjYXRjaCB0byBzdXBwcmVzcyBlcnJvcnMgc2luY2Ugd2UncmUgaW4gbm9uLXByb21pc2UgY2FsbGJhY2tcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJTZXNzaW9uTW9uaXRvci5fc3RhcnQ6IEVycm9yIGZyb20gZ2V0Q2hlY2tTZXNzaW9uSWZyYW1lOlwiLCBlcnIubWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2NoZWNrU2Vzc2lvbklGcmFtZS5zdGFydChzZXNzaW9uX3N0YXRlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBfc3RvcCgpIHtcclxuICAgICAgICB0aGlzLl9zdWIgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgdGhpcy5fc2lkID0gdW5kZWZpbmVkO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5fY2hlY2tTZXNzaW9uSUZyYW1lKSB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlNlc3Npb25Nb25pdG9yLl9zdG9wXCIpO1xyXG4gICAgICAgICAgICB0aGlzLl9jaGVja1Nlc3Npb25JRnJhbWUuc3RvcCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX3NldHRpbmdzLm1vbml0b3JBbm9ueW1vdXNTZXNzaW9uKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3VzZXJNYW5hZ2VyLnF1ZXJ5U2Vzc2lvblN0YXR1cygpLnRoZW4oc2Vzc2lvbiA9PiB7XHJcbiAgICAgICAgICAgICAgICBsZXQgdG1wVXNlciA9IHtcclxuICAgICAgICAgICAgICAgICAgICBzZXNzaW9uX3N0YXRlIDogc2Vzc2lvbi5zZXNzaW9uX3N0YXRlXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgaWYgKHNlc3Npb24uc3ViICYmIHNlc3Npb24uc2lkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdG1wVXNlci5wcm9maWxlID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWI6IHNlc3Npb24uc3ViLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzaWQ6IHNlc3Npb24uc2lkXHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXJ0KHRtcFVzZXIpO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuY2F0Y2goZXJyID0+IHtcclxuICAgICAgICAgICAgICAgIC8vIGNhdGNoIHRvIHN1cHByZXNzIGVycm9ycyBzaW5jZSB3ZSdyZSBpbiBhIGNhbGxiYWNrXHJcbiAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJTZXNzaW9uTW9uaXRvcjogZXJyb3IgZnJvbSBxdWVyeVNlc3Npb25TdGF0dXM6XCIsIGVyci5tZXNzYWdlKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIF9jYWxsYmFjaygpIHtcclxuICAgICAgICB0aGlzLl91c2VyTWFuYWdlci5xdWVyeVNlc3Npb25TdGF0dXMoKS50aGVuKHNlc3Npb24gPT4ge1xyXG4gICAgICAgICAgICB2YXIgcmFpc2VFdmVudCA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICBpZiAoc2Vzc2lvbikge1xyXG4gICAgICAgICAgICAgICAgaWYgKHNlc3Npb24uc3ViID09PSB0aGlzLl9zdWIpIHtcclxuICAgICAgICAgICAgICAgICAgICByYWlzZUV2ZW50ID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hlY2tTZXNzaW9uSUZyYW1lLnN0YXJ0KHNlc3Npb24uc2Vzc2lvbl9zdGF0ZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzZXNzaW9uLnNpZCA9PT0gdGhpcy5fc2lkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlNlc3Npb25Nb25pdG9yLl9jYWxsYmFjazogU2FtZSBzdWIgc3RpbGwgbG9nZ2VkIGluIGF0IE9QLCByZXN0YXJ0aW5nIGNoZWNrIHNlc3Npb24gaWZyYW1lOyBzZXNzaW9uX3N0YXRlOlwiLCBzZXNzaW9uLnNlc3Npb25fc3RhdGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiU2Vzc2lvbk1vbml0b3IuX2NhbGxiYWNrOiBTYW1lIHN1YiBzdGlsbCBsb2dnZWQgaW4gYXQgT1AsIHNlc3Npb24gc3RhdGUgaGFzIGNoYW5nZWQsIHJlc3RhcnRpbmcgY2hlY2sgc2Vzc2lvbiBpZnJhbWU7IHNlc3Npb25fc3RhdGU6XCIsIHNlc3Npb24uc2Vzc2lvbl9zdGF0ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3VzZXJNYW5hZ2VyLmV2ZW50cy5fcmFpc2VVc2VyU2Vzc2lvbkNoYW5nZWQoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJTZXNzaW9uTW9uaXRvci5fY2FsbGJhY2s6IERpZmZlcmVudCBzdWJqZWN0IHNpZ25lZCBpbnRvIE9QOlwiLCBzZXNzaW9uLnN1Yik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJTZXNzaW9uTW9uaXRvci5fY2FsbGJhY2s6IFN1YmplY3Qgbm8gbG9uZ2VyIHNpZ25lZCBpbnRvIE9QXCIpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAocmFpc2VFdmVudCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX3N1Yikge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlNlc3Npb25Nb25pdG9yLl9jYWxsYmFjazogU2Vzc2lvbk1vbml0b3IuX2NhbGxiYWNrOyByYWlzaW5nIHNpZ25lZCBvdXQgZXZlbnRcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdXNlck1hbmFnZXIuZXZlbnRzLl9yYWlzZVVzZXJTaWduZWRPdXQoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlNlc3Npb25Nb25pdG9yLl9jYWxsYmFjazogU2Vzc2lvbk1vbml0b3IuX2NhbGxiYWNrOyByYWlzaW5nIHNpZ25lZCBpbiBldmVudFwiKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl91c2VyTWFuYWdlci5ldmVudHMuX3JhaXNlVXNlclNpZ25lZEluKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KS5jYXRjaChlcnIgPT4ge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fc3ViKSB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJTZXNzaW9uTW9uaXRvci5fY2FsbGJhY2s6IEVycm9yIGNhbGxpbmcgcXVlcnlDdXJyZW50U2lnbmluU2Vzc2lvbjsgcmFpc2luZyBzaWduZWQgb3V0IGV2ZW50XCIsIGVyci5tZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3VzZXJNYW5hZ2VyLmV2ZW50cy5fcmFpc2VVc2VyU2lnbmVkT3V0KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcbmltcG9ydCB7IFVybFV0aWxpdHkgfSBmcm9tICcuL1VybFV0aWxpdHkuanMnO1xyXG5pbXBvcnQgeyBTaWduaW5TdGF0ZSB9IGZyb20gJy4vU2lnbmluU3RhdGUuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFNpZ25pblJlcXVlc3Qge1xyXG4gICAgY29uc3RydWN0b3Ioe1xyXG4gICAgICAgIC8vIG1hbmRhdG9yeVxyXG4gICAgICAgIHVybCwgY2xpZW50X2lkLCByZWRpcmVjdF91cmksIHJlc3BvbnNlX3R5cGUsIHNjb3BlLCBhdXRob3JpdHksXHJcbiAgICAgICAgLy8gb3B0aW9uYWxcclxuICAgICAgICBkYXRhLCBwcm9tcHQsIGRpc3BsYXksIG1heF9hZ2UsIHVpX2xvY2FsZXMsIGlkX3Rva2VuX2hpbnQsIGxvZ2luX2hpbnQsIGFjcl92YWx1ZXMsIHJlc291cmNlLCByZXNwb25zZV9tb2RlLFxyXG4gICAgICAgIHJlcXVlc3QsIHJlcXVlc3RfdXJpLCBleHRyYVF1ZXJ5UGFyYW1zLCByZXF1ZXN0X3R5cGUsIGNsaWVudF9zZWNyZXQsIGV4dHJhVG9rZW5QYXJhbXMsIHNraXBVc2VySW5mb1xyXG4gICAgfSkge1xyXG4gICAgICAgIGlmICghdXJsKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlNpZ25pblJlcXVlc3QuY3RvcjogTm8gdXJsIHBhc3NlZFwiKTtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidXJsXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWNsaWVudF9pZCkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJTaWduaW5SZXF1ZXN0LmN0b3I6IE5vIGNsaWVudF9pZCBwYXNzZWRcIik7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImNsaWVudF9pZFwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFyZWRpcmVjdF91cmkpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiU2lnbmluUmVxdWVzdC5jdG9yOiBObyByZWRpcmVjdF91cmkgcGFzc2VkXCIpO1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJyZWRpcmVjdF91cmlcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghcmVzcG9uc2VfdHlwZSkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJTaWduaW5SZXF1ZXN0LmN0b3I6IE5vIHJlc3BvbnNlX3R5cGUgcGFzc2VkXCIpO1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJyZXNwb25zZV90eXBlXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXNjb3BlKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlNpZ25pblJlcXVlc3QuY3RvcjogTm8gc2NvcGUgcGFzc2VkXCIpO1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJzY29wZVwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFhdXRob3JpdHkpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiU2lnbmluUmVxdWVzdC5jdG9yOiBObyBhdXRob3JpdHkgcGFzc2VkXCIpO1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJhdXRob3JpdHlcIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgb2lkYyA9IFNpZ25pblJlcXVlc3QuaXNPaWRjKHJlc3BvbnNlX3R5cGUpO1xyXG4gICAgICAgIGxldCBjb2RlID0gU2lnbmluUmVxdWVzdC5pc0NvZGUocmVzcG9uc2VfdHlwZSk7XHJcblxyXG4gICAgICAgIGlmICghcmVzcG9uc2VfbW9kZSkge1xyXG4gICAgICAgICAgICByZXNwb25zZV9tb2RlID0gU2lnbmluUmVxdWVzdC5pc0NvZGUocmVzcG9uc2VfdHlwZSkgPyBcInF1ZXJ5XCIgOiBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IG5ldyBTaWduaW5TdGF0ZSh7IG5vbmNlOiBvaWRjLCBcclxuICAgICAgICAgICAgZGF0YSwgY2xpZW50X2lkLCBhdXRob3JpdHksIHJlZGlyZWN0X3VyaSwgXHJcbiAgICAgICAgICAgIGNvZGVfdmVyaWZpZXI6IGNvZGUsIFxyXG4gICAgICAgICAgICByZXF1ZXN0X3R5cGUsIHJlc3BvbnNlX21vZGUsXHJcbiAgICAgICAgICAgIGNsaWVudF9zZWNyZXQsIHNjb3BlLCBleHRyYVRva2VuUGFyYW1zLCBza2lwVXNlckluZm8gfSk7XHJcblxyXG4gICAgICAgIHVybCA9IFVybFV0aWxpdHkuYWRkUXVlcnlQYXJhbSh1cmwsIFwiY2xpZW50X2lkXCIsIGNsaWVudF9pZCk7XHJcbiAgICAgICAgdXJsID0gVXJsVXRpbGl0eS5hZGRRdWVyeVBhcmFtKHVybCwgXCJyZWRpcmVjdF91cmlcIiwgcmVkaXJlY3RfdXJpKTtcclxuICAgICAgICB1cmwgPSBVcmxVdGlsaXR5LmFkZFF1ZXJ5UGFyYW0odXJsLCBcInJlc3BvbnNlX3R5cGVcIiwgcmVzcG9uc2VfdHlwZSk7XHJcbiAgICAgICAgdXJsID0gVXJsVXRpbGl0eS5hZGRRdWVyeVBhcmFtKHVybCwgXCJzY29wZVwiLCBzY29wZSk7XHJcblxyXG4gICAgICAgIHVybCA9IFVybFV0aWxpdHkuYWRkUXVlcnlQYXJhbSh1cmwsIFwic3RhdGVcIiwgdGhpcy5zdGF0ZS5pZCk7XHJcbiAgICAgICAgaWYgKG9pZGMpIHtcclxuICAgICAgICAgICAgdXJsID0gVXJsVXRpbGl0eS5hZGRRdWVyeVBhcmFtKHVybCwgXCJub25jZVwiLCB0aGlzLnN0YXRlLm5vbmNlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNvZGUpIHtcclxuICAgICAgICAgICAgdXJsID0gVXJsVXRpbGl0eS5hZGRRdWVyeVBhcmFtKHVybCwgXCJjb2RlX2NoYWxsZW5nZVwiLCB0aGlzLnN0YXRlLmNvZGVfY2hhbGxlbmdlKTtcclxuICAgICAgICAgICAgdXJsID0gVXJsVXRpbGl0eS5hZGRRdWVyeVBhcmFtKHVybCwgXCJjb2RlX2NoYWxsZW5nZV9tZXRob2RcIiwgXCJTMjU2XCIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIG9wdGlvbmFsID0geyBwcm9tcHQsIGRpc3BsYXksIG1heF9hZ2UsIHVpX2xvY2FsZXMsIGlkX3Rva2VuX2hpbnQsIGxvZ2luX2hpbnQsIGFjcl92YWx1ZXMsIHJlc291cmNlLCByZXF1ZXN0LCByZXF1ZXN0X3VyaSwgcmVzcG9uc2VfbW9kZSB9O1xyXG4gICAgICAgIGZvcihsZXQga2V5IGluIG9wdGlvbmFsKXtcclxuICAgICAgICAgICAgaWYgKG9wdGlvbmFsW2tleV0pIHtcclxuICAgICAgICAgICAgICAgIHVybCA9IFVybFV0aWxpdHkuYWRkUXVlcnlQYXJhbSh1cmwsIGtleSwgb3B0aW9uYWxba2V5XSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvcihsZXQga2V5IGluIGV4dHJhUXVlcnlQYXJhbXMpe1xyXG4gICAgICAgICAgICB1cmwgPSBVcmxVdGlsaXR5LmFkZFF1ZXJ5UGFyYW0odXJsLCBrZXksIGV4dHJhUXVlcnlQYXJhbXNba2V5XSlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXJsID0gdXJsO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBpc09pZGMocmVzcG9uc2VfdHlwZSkge1xyXG4gICAgICAgIHZhciByZXN1bHQgPSByZXNwb25zZV90eXBlLnNwbGl0KC9cXHMrL2cpLmZpbHRlcihmdW5jdGlvbihpdGVtKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBpdGVtID09PSBcImlkX3Rva2VuXCI7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuICEhKHJlc3VsdFswXSk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGlzT0F1dGgocmVzcG9uc2VfdHlwZSkge1xyXG4gICAgICAgIHZhciByZXN1bHQgPSByZXNwb25zZV90eXBlLnNwbGl0KC9cXHMrL2cpLmZpbHRlcihmdW5jdGlvbihpdGVtKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBpdGVtID09PSBcInRva2VuXCI7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuICEhKHJlc3VsdFswXSk7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHN0YXRpYyBpc0NvZGUocmVzcG9uc2VfdHlwZSkge1xyXG4gICAgICAgIHZhciByZXN1bHQgPSByZXNwb25zZV90eXBlLnNwbGl0KC9cXHMrL2cpLmZpbHRlcihmdW5jdGlvbihpdGVtKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBpdGVtID09PSBcImNvZGVcIjtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gISEocmVzdWx0WzBdKTtcclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBVcmxVdGlsaXR5IH0gZnJvbSAnLi9VcmxVdGlsaXR5LmpzJztcclxuXHJcbmNvbnN0IE9pZGNTY29wZSA9IFwib3BlbmlkXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgU2lnbmluUmVzcG9uc2Uge1xyXG4gICAgY29uc3RydWN0b3IodXJsLCBkZWxpbWl0ZXIgPSBcIiNcIikge1xyXG5cclxuICAgICAgICB2YXIgdmFsdWVzID0gVXJsVXRpbGl0eS5wYXJzZVVybEZyYWdtZW50KHVybCwgZGVsaW1pdGVyKTtcclxuXHJcbiAgICAgICAgdGhpcy5lcnJvciA9IHZhbHVlcy5lcnJvcjtcclxuICAgICAgICB0aGlzLmVycm9yX2Rlc2NyaXB0aW9uID0gdmFsdWVzLmVycm9yX2Rlc2NyaXB0aW9uO1xyXG4gICAgICAgIHRoaXMuZXJyb3JfdXJpID0gdmFsdWVzLmVycm9yX3VyaTtcclxuXHJcbiAgICAgICAgdGhpcy5jb2RlID0gdmFsdWVzLmNvZGU7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHZhbHVlcy5zdGF0ZTtcclxuICAgICAgICB0aGlzLmlkX3Rva2VuID0gdmFsdWVzLmlkX3Rva2VuO1xyXG4gICAgICAgIHRoaXMuc2Vzc2lvbl9zdGF0ZSA9IHZhbHVlcy5zZXNzaW9uX3N0YXRlO1xyXG4gICAgICAgIHRoaXMuYWNjZXNzX3Rva2VuID0gdmFsdWVzLmFjY2Vzc190b2tlbjtcclxuICAgICAgICB0aGlzLnRva2VuX3R5cGUgPSB2YWx1ZXMudG9rZW5fdHlwZTtcclxuICAgICAgICB0aGlzLnNjb3BlID0gdmFsdWVzLnNjb3BlO1xyXG4gICAgICAgIHRoaXMucHJvZmlsZSA9IHVuZGVmaW5lZDsgLy8gd2lsbCBiZSBzZXQgZnJvbSBSZXNwb25zZVZhbGlkYXRvclxyXG5cclxuICAgICAgICB0aGlzLmV4cGlyZXNfaW4gPSB2YWx1ZXMuZXhwaXJlc19pbjtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgZXhwaXJlc19pbigpIHtcclxuICAgICAgICBpZiAodGhpcy5leHBpcmVzX2F0KSB7XHJcbiAgICAgICAgICAgIGxldCBub3cgPSBwYXJzZUludChEYXRlLm5vdygpIC8gMTAwMCk7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmV4cGlyZXNfYXQgLSBub3c7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICB9XHJcbiAgICBzZXQgZXhwaXJlc19pbih2YWx1ZSl7XHJcbiAgICAgICAgbGV0IGV4cGlyZXNfaW4gPSBwYXJzZUludCh2YWx1ZSk7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBleHBpcmVzX2luID09PSAnbnVtYmVyJyAmJiBleHBpcmVzX2luID4gMCkge1xyXG4gICAgICAgICAgICBsZXQgbm93ID0gcGFyc2VJbnQoRGF0ZS5ub3coKSAvIDEwMDApO1xyXG4gICAgICAgICAgICB0aGlzLmV4cGlyZXNfYXQgPSBub3cgKyBleHBpcmVzX2luO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXQgZXhwaXJlZCgpIHtcclxuICAgICAgICBsZXQgZXhwaXJlc19pbiA9IHRoaXMuZXhwaXJlc19pbjtcclxuICAgICAgICBpZiAoZXhwaXJlc19pbiAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBleHBpcmVzX2luIDw9IDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHNjb3BlcygpIHtcclxuICAgICAgICByZXR1cm4gKHRoaXMuc2NvcGUgfHwgXCJcIikuc3BsaXQoXCIgXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBpc09wZW5JZENvbm5lY3QoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2NvcGVzLmluZGV4T2YoT2lkY1Njb3BlKSA+PSAwIHx8ICEhdGhpcy5pZF90b2tlbjtcclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcbmltcG9ydCB7IFN0YXRlIH0gZnJvbSAnLi9TdGF0ZS5qcyc7XHJcbmltcG9ydCB7IEpvc2VVdGlsIH0gZnJvbSAnLi9Kb3NlVXRpbC5qcyc7XHJcbmltcG9ydCByYW5kb20gZnJvbSAnLi9yYW5kb20uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFNpZ25pblN0YXRlIGV4dGVuZHMgU3RhdGUge1xyXG4gICAgY29uc3RydWN0b3Ioe25vbmNlLCBhdXRob3JpdHksIGNsaWVudF9pZCwgcmVkaXJlY3RfdXJpLCBjb2RlX3ZlcmlmaWVyLCByZXNwb25zZV9tb2RlLCBjbGllbnRfc2VjcmV0LCBzY29wZSwgZXh0cmFUb2tlblBhcmFtcywgc2tpcFVzZXJJbmZvfSA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIoYXJndW1lbnRzWzBdKTtcclxuXHJcbiAgICAgICAgaWYgKG5vbmNlID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX25vbmNlID0gcmFuZG9tKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKG5vbmNlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX25vbmNlID0gbm9uY2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoY29kZV92ZXJpZmllciA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICAvLyByYW5kb20oKSBwcm9kdWNlcyAzMiBsZW5ndGhcclxuICAgICAgICAgICAgdGhpcy5fY29kZV92ZXJpZmllciA9IHJhbmRvbSgpICsgcmFuZG9tKCkgKyByYW5kb20oKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoY29kZV92ZXJpZmllcikge1xyXG4gICAgICAgICAgICB0aGlzLl9jb2RlX3ZlcmlmaWVyID0gY29kZV92ZXJpZmllcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKHRoaXMuY29kZV92ZXJpZmllcikge1xyXG4gICAgICAgICAgICBsZXQgaGFzaCA9IEpvc2VVdGlsLmhhc2hTdHJpbmcodGhpcy5jb2RlX3ZlcmlmaWVyLCBcIlNIQTI1NlwiKTtcclxuICAgICAgICAgICAgdGhpcy5fY29kZV9jaGFsbGVuZ2UgPSBKb3NlVXRpbC5oZXhUb0Jhc2U2NFVybChoYXNoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3JlZGlyZWN0X3VyaSA9IHJlZGlyZWN0X3VyaTtcclxuICAgICAgICB0aGlzLl9hdXRob3JpdHkgPSBhdXRob3JpdHk7XHJcbiAgICAgICAgdGhpcy5fY2xpZW50X2lkID0gY2xpZW50X2lkO1xyXG4gICAgICAgIHRoaXMuX3Jlc3BvbnNlX21vZGUgPSByZXNwb25zZV9tb2RlO1xyXG4gICAgICAgIHRoaXMuX2NsaWVudF9zZWNyZXQgPSBjbGllbnRfc2VjcmV0O1xyXG4gICAgICAgIHRoaXMuX3Njb3BlID0gc2NvcGU7XHJcbiAgICAgICAgdGhpcy5fZXh0cmFUb2tlblBhcmFtcyA9IGV4dHJhVG9rZW5QYXJhbXM7XHJcbiAgICAgICAgdGhpcy5fc2tpcFVzZXJJbmZvID0gc2tpcFVzZXJJbmZvO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBub25jZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fbm9uY2U7XHJcbiAgICB9XHJcbiAgICBnZXQgYXV0aG9yaXR5KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9hdXRob3JpdHk7XHJcbiAgICB9XHJcbiAgICBnZXQgY2xpZW50X2lkKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9jbGllbnRfaWQ7XHJcbiAgICB9XHJcbiAgICBnZXQgcmVkaXJlY3RfdXJpKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9yZWRpcmVjdF91cmk7XHJcbiAgICB9XHJcbiAgICBnZXQgY29kZV92ZXJpZmllcigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fY29kZV92ZXJpZmllcjtcclxuICAgIH1cclxuICAgIGdldCBjb2RlX2NoYWxsZW5nZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fY29kZV9jaGFsbGVuZ2U7XHJcbiAgICB9XHJcbiAgICBnZXQgcmVzcG9uc2VfbW9kZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcmVzcG9uc2VfbW9kZTtcclxuICAgIH1cclxuICAgIGdldCBjbGllbnRfc2VjcmV0KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9jbGllbnRfc2VjcmV0O1xyXG4gICAgfVxyXG4gICAgZ2V0IHNjb3BlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zY29wZTtcclxuICAgIH1cclxuICAgIGdldCBleHRyYVRva2VuUGFyYW1zKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9leHRyYVRva2VuUGFyYW1zO1xyXG4gICAgfVxyXG4gICAgZ2V0IHNraXBVc2VySW5mbygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc2tpcFVzZXJJbmZvO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICB0b1N0b3JhZ2VTdHJpbmcoKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiU2lnbmluU3RhdGUudG9TdG9yYWdlU3RyaW5nXCIpO1xyXG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh7XHJcbiAgICAgICAgICAgIGlkOiB0aGlzLmlkLFxyXG4gICAgICAgICAgICBkYXRhOiB0aGlzLmRhdGEsXHJcbiAgICAgICAgICAgIGNyZWF0ZWQ6IHRoaXMuY3JlYXRlZCxcclxuICAgICAgICAgICAgcmVxdWVzdF90eXBlOiB0aGlzLnJlcXVlc3RfdHlwZSxcclxuICAgICAgICAgICAgbm9uY2U6IHRoaXMubm9uY2UsXHJcbiAgICAgICAgICAgIGNvZGVfdmVyaWZpZXI6IHRoaXMuY29kZV92ZXJpZmllcixcclxuICAgICAgICAgICAgcmVkaXJlY3RfdXJpOiB0aGlzLnJlZGlyZWN0X3VyaSxcclxuICAgICAgICAgICAgYXV0aG9yaXR5OiB0aGlzLmF1dGhvcml0eSxcclxuICAgICAgICAgICAgY2xpZW50X2lkOiB0aGlzLmNsaWVudF9pZCxcclxuICAgICAgICAgICAgcmVzcG9uc2VfbW9kZTogdGhpcy5yZXNwb25zZV9tb2RlLFxyXG4gICAgICAgICAgICBjbGllbnRfc2VjcmV0OiB0aGlzLmNsaWVudF9zZWNyZXQsXHJcbiAgICAgICAgICAgIHNjb3BlOiB0aGlzLnNjb3BlLFxyXG4gICAgICAgICAgICBleHRyYVRva2VuUGFyYW1zIDogdGhpcy5leHRyYVRva2VuUGFyYW1zLFxyXG4gICAgICAgICAgICBza2lwVXNlckluZm86IHRoaXMuc2tpcFVzZXJJbmZvXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGZyb21TdG9yYWdlU3RyaW5nKHN0b3JhZ2VTdHJpbmcpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJTaWduaW5TdGF0ZS5mcm9tU3RvcmFnZVN0cmluZ1wiKTtcclxuICAgICAgICB2YXIgZGF0YSA9IEpTT04ucGFyc2Uoc3RvcmFnZVN0cmluZyk7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBTaWduaW5TdGF0ZShkYXRhKTtcclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcbmltcG9ydCB7IFVybFV0aWxpdHkgfSBmcm9tICcuL1VybFV0aWxpdHkuanMnO1xyXG5pbXBvcnQgeyBTdGF0ZSB9IGZyb20gJy4vU3RhdGUuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFNpZ25vdXRSZXF1ZXN0IHtcclxuICAgIGNvbnN0cnVjdG9yKHt1cmwsIGlkX3Rva2VuX2hpbnQsIHBvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaSwgZGF0YSwgZXh0cmFRdWVyeVBhcmFtcywgcmVxdWVzdF90eXBlfSkge1xyXG4gICAgICAgIGlmICghdXJsKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlNpZ25vdXRSZXF1ZXN0LmN0b3I6IE5vIHVybCBwYXNzZWRcIik7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInVybFwiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChpZF90b2tlbl9oaW50KSB7XHJcbiAgICAgICAgICAgIHVybCA9IFVybFV0aWxpdHkuYWRkUXVlcnlQYXJhbSh1cmwsIFwiaWRfdG9rZW5faGludFwiLCBpZF90b2tlbl9oaW50KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChwb3N0X2xvZ291dF9yZWRpcmVjdF91cmkpIHtcclxuICAgICAgICAgICAgdXJsID0gVXJsVXRpbGl0eS5hZGRRdWVyeVBhcmFtKHVybCwgXCJwb3N0X2xvZ291dF9yZWRpcmVjdF91cmlcIiwgcG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gbmV3IFN0YXRlKHsgZGF0YSwgcmVxdWVzdF90eXBlIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgIHVybCA9IFVybFV0aWxpdHkuYWRkUXVlcnlQYXJhbSh1cmwsIFwic3RhdGVcIiwgdGhpcy5zdGF0ZS5pZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvcihsZXQga2V5IGluIGV4dHJhUXVlcnlQYXJhbXMpe1xyXG4gICAgICAgICAgICB1cmwgPSBVcmxVdGlsaXR5LmFkZFF1ZXJ5UGFyYW0odXJsLCBrZXksIGV4dHJhUXVlcnlQYXJhbXNba2V5XSlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXJsID0gdXJsO1xyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IFVybFV0aWxpdHkgfSBmcm9tICcuL1VybFV0aWxpdHkuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFNpZ25vdXRSZXNwb25zZSB7XHJcbiAgICBjb25zdHJ1Y3Rvcih1cmwpIHtcclxuXHJcbiAgICAgICAgdmFyIHZhbHVlcyA9IFVybFV0aWxpdHkucGFyc2VVcmxGcmFnbWVudCh1cmwsIFwiP1wiKTtcclxuXHJcbiAgICAgICAgdGhpcy5lcnJvciA9IHZhbHVlcy5lcnJvcjtcclxuICAgICAgICB0aGlzLmVycm9yX2Rlc2NyaXB0aW9uID0gdmFsdWVzLmVycm9yX2Rlc2NyaXB0aW9uO1xyXG4gICAgICAgIHRoaXMuZXJyb3JfdXJpID0gdmFsdWVzLmVycm9yX3VyaTtcclxuXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHZhbHVlcy5zdGF0ZTtcclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgU2lsZW50UmVuZXdTZXJ2aWNlIHtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcih1c2VyTWFuYWdlcikge1xyXG4gICAgICAgIHRoaXMuX3VzZXJNYW5hZ2VyID0gdXNlck1hbmFnZXI7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhcnQoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9jYWxsYmFjaykge1xyXG4gICAgICAgICAgICB0aGlzLl9jYWxsYmFjayA9IHRoaXMuX3Rva2VuRXhwaXJpbmcuYmluZCh0aGlzKTtcclxuICAgICAgICAgICAgdGhpcy5fdXNlck1hbmFnZXIuZXZlbnRzLmFkZEFjY2Vzc1Rva2VuRXhwaXJpbmcodGhpcy5fY2FsbGJhY2spO1xyXG5cclxuICAgICAgICAgICAgLy8gdGhpcyB3aWxsIHRyaWdnZXIgbG9hZGluZyBvZiB0aGUgdXNlciBzbyB0aGUgZXhwaXJpbmcgZXZlbnRzIGNhbiBiZSBpbml0aWFsaXplZFxyXG4gICAgICAgICAgICB0aGlzLl91c2VyTWFuYWdlci5nZXRVc2VyKCkudGhlbih1c2VyPT57XHJcbiAgICAgICAgICAgICAgICAvLyBkZWxpYmVyYXRlIG5vcFxyXG4gICAgICAgICAgICB9KS5jYXRjaChlcnI9PntcclxuICAgICAgICAgICAgICAgIC8vIGNhdGNoIHRvIHN1cHByZXNzIGVycm9ycyBzaW5jZSB3ZSdyZSBpbiBhIGN0b3JcclxuICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIlNpbGVudFJlbmV3U2VydmljZS5zdGFydDogRXJyb3IgZnJvbSBnZXRVc2VyOlwiLCBlcnIubWVzc2FnZSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzdG9wKCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9jYWxsYmFjaykge1xyXG4gICAgICAgICAgICB0aGlzLl91c2VyTWFuYWdlci5ldmVudHMucmVtb3ZlQWNjZXNzVG9rZW5FeHBpcmluZyh0aGlzLl9jYWxsYmFjayk7XHJcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9jYWxsYmFjaztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgX3Rva2VuRXhwaXJpbmcoKSB7XHJcbiAgICAgICAgdGhpcy5fdXNlck1hbmFnZXIuc2lnbmluU2lsZW50KCkudGhlbih1c2VyID0+IHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiU2lsZW50UmVuZXdTZXJ2aWNlLl90b2tlbkV4cGlyaW5nOiBTaWxlbnQgdG9rZW4gcmVuZXdhbCBzdWNjZXNzZnVsXCIpO1xyXG4gICAgICAgIH0sIGVyciA9PiB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlNpbGVudFJlbmV3U2VydmljZS5fdG9rZW5FeHBpcmluZzogRXJyb3IgZnJvbSBzaWduaW5TaWxlbnQ6XCIsIGVyci5tZXNzYWdlKTtcclxuICAgICAgICAgICAgdGhpcy5fdXNlck1hbmFnZXIuZXZlbnRzLl9yYWlzZVNpbGVudFJlbmV3RXJyb3IoZXJyKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcbmltcG9ydCByYW5kb20gZnJvbSAnLi9yYW5kb20uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFN0YXRlIHtcclxuICAgIGNvbnN0cnVjdG9yKHtpZCwgZGF0YSwgY3JlYXRlZCwgcmVxdWVzdF90eXBlfSA9IHt9KSB7XHJcbiAgICAgICAgdGhpcy5faWQgPSBpZCB8fCByYW5kb20oKTtcclxuICAgICAgICB0aGlzLl9kYXRhID0gZGF0YTtcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiBjcmVhdGVkID09PSAnbnVtYmVyJyAmJiBjcmVhdGVkID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLl9jcmVhdGVkID0gY3JlYXRlZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2NyZWF0ZWQgPSBwYXJzZUludChEYXRlLm5vdygpIC8gMTAwMCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX3JlcXVlc3RfdHlwZSA9ICByZXF1ZXN0X3R5cGU7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGlkKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9pZDtcclxuICAgIH1cclxuICAgIGdldCBkYXRhKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRhO1xyXG4gICAgfVxyXG4gICAgZ2V0IGNyZWF0ZWQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NyZWF0ZWQ7XHJcbiAgICB9XHJcbiAgICBnZXQgcmVxdWVzdF90eXBlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9yZXF1ZXN0X3R5cGU7XHJcbiAgICB9XHJcblxyXG4gICAgdG9TdG9yYWdlU3RyaW5nKCkge1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIlN0YXRlLnRvU3RvcmFnZVN0cmluZ1wiKTtcclxuICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoe1xyXG4gICAgICAgICAgICBpZDogdGhpcy5pZCxcclxuICAgICAgICAgICAgZGF0YTogdGhpcy5kYXRhLFxyXG4gICAgICAgICAgICBjcmVhdGVkOiB0aGlzLmNyZWF0ZWQsXHJcbiAgICAgICAgICAgIHJlcXVlc3RfdHlwZTogdGhpcy5yZXF1ZXN0X3R5cGVcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZnJvbVN0b3JhZ2VTdHJpbmcoc3RvcmFnZVN0cmluZykge1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIlN0YXRlLmZyb21TdG9yYWdlU3RyaW5nXCIpO1xyXG4gICAgICAgIHJldHVybiBuZXcgU3RhdGUoSlNPTi5wYXJzZShzdG9yYWdlU3RyaW5nKSk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGNsZWFyU3RhbGVTdGF0ZShzdG9yYWdlLCBhZ2UpIHtcclxuXHJcbiAgICAgICAgdmFyIGN1dG9mZiA9IERhdGUubm93KCkgLyAxMDAwIC0gYWdlO1xyXG5cclxuICAgICAgICByZXR1cm4gc3RvcmFnZS5nZXRBbGxLZXlzKCkudGhlbihrZXlzID0+IHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiU3RhdGUuY2xlYXJTdGFsZVN0YXRlOiBnb3Qga2V5c1wiLCBrZXlzKTtcclxuXHJcbiAgICAgICAgICAgIHZhciBwcm9taXNlcyA9IFtdO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGxldCBrZXkgPSBrZXlzW2ldO1xyXG4gICAgICAgICAgICAgICAgdmFyIHAgPSBzdG9yYWdlLmdldChrZXkpLnRoZW4oaXRlbSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJlbW92ZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXRlID0gU3RhdGUuZnJvbVN0b3JhZ2VTdHJpbmcoaXRlbSlcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJTdGF0ZS5jbGVhclN0YWxlU3RhdGU6IGdvdCBpdGVtIGZyb20ga2V5OiBcIiwga2V5LCBzdGF0ZS5jcmVhdGVkKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGUuY3JlYXRlZCA8PSBjdXRvZmYpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJTdGF0ZS5jbGVhclN0YWxlU3RhdGU6IEVycm9yIHBhcnNpbmcgc3RhdGUgZm9yIGtleVwiLCBrZXksIGUubWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJTdGF0ZS5jbGVhclN0YWxlU3RhdGU6IG5vIGl0ZW0gaW4gc3RvcmFnZSBmb3Iga2V5OiBcIiwga2V5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZW1vdmUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiU3RhdGUuY2xlYXJTdGFsZVN0YXRlOiByZW1vdmVkIGl0ZW0gZm9yIGtleTogXCIsIGtleSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdG9yYWdlLnJlbW92ZShrZXkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgIHByb21pc2VzLnB1c2gocCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlN0YXRlLmNsZWFyU3RhbGVTdGF0ZTogd2FpdGluZyBvbiBwcm9taXNlIGNvdW50OlwiLCBwcm9taXNlcy5sZW5ndGgpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuaW1wb3J0IHsgR2xvYmFsIH0gZnJvbSAnLi9HbG9iYWwuanMnO1xyXG5pbXBvcnQgeyBFdmVudCB9IGZyb20gJy4vRXZlbnQuanMnO1xyXG5cclxuY29uc3QgVGltZXJEdXJhdGlvbiA9IDU7IC8vIHNlY29uZHNcclxuXHJcbmV4cG9ydCBjbGFzcyBUaW1lciBleHRlbmRzIEV2ZW50IHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihuYW1lLCB0aW1lciA9IEdsb2JhbC50aW1lciwgbm93RnVuYyA9IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHN1cGVyKG5hbWUpO1xyXG4gICAgICAgIHRoaXMuX3RpbWVyID0gdGltZXI7XHJcblxyXG4gICAgICAgIGlmIChub3dGdW5jKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX25vd0Z1bmMgPSBub3dGdW5jO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5fbm93RnVuYyA9ICgpID0+IERhdGUubm93KCkgLyAxMDAwO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXQgbm93KCkge1xyXG4gICAgICAgIHJldHVybiBwYXJzZUludCh0aGlzLl9ub3dGdW5jKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIGluaXQoZHVyYXRpb24pIHtcclxuICAgICAgICBpZiAoZHVyYXRpb24gPD0gMCkge1xyXG4gICAgICAgICAgICBkdXJhdGlvbiA9IDE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGR1cmF0aW9uID0gcGFyc2VJbnQoZHVyYXRpb24pO1xyXG5cclxuICAgICAgICB2YXIgZXhwaXJhdGlvbiA9IHRoaXMubm93ICsgZHVyYXRpb247XHJcbiAgICAgICAgaWYgKHRoaXMuZXhwaXJhdGlvbiA9PT0gZXhwaXJhdGlvbiAmJiB0aGlzLl90aW1lckhhbmRsZSkge1xyXG4gICAgICAgICAgICAvLyBubyBuZWVkIHRvIHJlaW5pdGlhbGl6ZSB0byBzYW1lIGV4cGlyYXRpb24sIHNvIGJhaWwgb3V0XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlRpbWVyLmluaXQgdGltZXIgXCIgKyB0aGlzLl9uYW1lICsgXCIgc2tpcHBpbmcgaW5pdGlhbGl6YXRpb24gc2luY2UgYWxyZWFkeSBpbml0aWFsaXplZCBmb3IgZXhwaXJhdGlvbjpcIiwgdGhpcy5leHBpcmF0aW9uKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5jYW5jZWwoKTtcclxuXHJcbiAgICAgICAgTG9nLmRlYnVnKFwiVGltZXIuaW5pdCB0aW1lciBcIiArIHRoaXMuX25hbWUgKyBcIiBmb3IgZHVyYXRpb246XCIsIGR1cmF0aW9uKTtcclxuICAgICAgICB0aGlzLl9leHBpcmF0aW9uID0gZXhwaXJhdGlvbjtcclxuXHJcbiAgICAgICAgLy8gd2UncmUgdXNpbmcgYSBmYWlybHkgc2hvcnQgdGltZXIgYW5kIHRoZW4gY2hlY2tpbmcgdGhlIGV4cGlyYXRpb24gaW4gdGhlXHJcbiAgICAgICAgLy8gY2FsbGJhY2sgdG8gaGFuZGxlIHNjZW5hcmlvcyB3aGVyZSB0aGUgYnJvd3NlciBkZXZpY2Ugc2xlZXBzLCBhbmQgdGhlblxyXG4gICAgICAgIC8vIHRoZSB0aW1lcnMgZW5kIHVwIGdldHRpbmcgZGVsYXllZC5cclxuICAgICAgICB2YXIgdGltZXJEdXJhdGlvbiA9IFRpbWVyRHVyYXRpb247XHJcbiAgICAgICAgaWYgKGR1cmF0aW9uIDwgdGltZXJEdXJhdGlvbikge1xyXG4gICAgICAgICAgICB0aW1lckR1cmF0aW9uID0gZHVyYXRpb247XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX3RpbWVySGFuZGxlID0gdGhpcy5fdGltZXIuc2V0SW50ZXJ2YWwodGhpcy5fY2FsbGJhY2suYmluZCh0aGlzKSwgdGltZXJEdXJhdGlvbiAqIDEwMDApO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICBnZXQgZXhwaXJhdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZXhwaXJhdGlvbjtcclxuICAgIH1cclxuXHJcbiAgICBjYW5jZWwoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3RpbWVySGFuZGxlKSB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlRpbWVyLmNhbmNlbDogXCIsIHRoaXMuX25hbWUpO1xyXG4gICAgICAgICAgICB0aGlzLl90aW1lci5jbGVhckludGVydmFsKHRoaXMuX3RpbWVySGFuZGxlKTtcclxuICAgICAgICAgICAgdGhpcy5fdGltZXJIYW5kbGUgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBfY2FsbGJhY2soKSB7XHJcbiAgICAgICAgdmFyIGRpZmYgPSB0aGlzLl9leHBpcmF0aW9uIC0gdGhpcy5ub3c7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiVGltZXIuY2FsbGJhY2s7IFwiICsgdGhpcy5fbmFtZSArIFwiIHRpbWVyIGV4cGlyZXMgaW46XCIsIGRpZmYpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5fZXhwaXJhdGlvbiA8PSB0aGlzLm5vdykge1xyXG4gICAgICAgICAgICB0aGlzLmNhbmNlbCgpO1xyXG4gICAgICAgICAgICBzdXBlci5yYWlzZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBKc29uU2VydmljZSB9IGZyb20gJy4vSnNvblNlcnZpY2UuanMnO1xyXG5pbXBvcnQgeyBNZXRhZGF0YVNlcnZpY2UgfSBmcm9tICcuL01ldGFkYXRhU2VydmljZS5qcyc7XHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBUb2tlbkNsaWVudCB7XHJcbiAgICBjb25zdHJ1Y3RvcihzZXR0aW5ncywgSnNvblNlcnZpY2VDdG9yID0gSnNvblNlcnZpY2UsIE1ldGFkYXRhU2VydmljZUN0b3IgPSBNZXRhZGF0YVNlcnZpY2UpIHtcclxuICAgICAgICBpZiAoIXNldHRpbmdzKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlRva2VuQ2xpZW50LmN0b3I6IE5vIHNldHRpbmdzIHBhc3NlZFwiKTtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwic2V0dGluZ3NcIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9zZXR0aW5ncyA9IHNldHRpbmdzO1xyXG4gICAgICAgIHRoaXMuX2pzb25TZXJ2aWNlID0gbmV3IEpzb25TZXJ2aWNlQ3RvcigpO1xyXG4gICAgICAgIHRoaXMuX21ldGFkYXRhU2VydmljZSA9IG5ldyBNZXRhZGF0YVNlcnZpY2VDdG9yKHRoaXMuX3NldHRpbmdzKTtcclxuICAgIH1cclxuXHJcbiAgICBleGNoYW5nZUNvZGUoYXJncyA9IHt9KSB7XHJcbiAgICAgICAgYXJncyA9IE9iamVjdC5hc3NpZ24oe30sIGFyZ3MpO1xyXG5cclxuICAgICAgICBhcmdzLmdyYW50X3R5cGUgPSBhcmdzLmdyYW50X3R5cGUgfHwgXCJhdXRob3JpemF0aW9uX2NvZGVcIjtcclxuICAgICAgICBhcmdzLmNsaWVudF9pZCA9IGFyZ3MuY2xpZW50X2lkIHx8IHRoaXMuX3NldHRpbmdzLmNsaWVudF9pZDtcclxuICAgICAgICBhcmdzLnJlZGlyZWN0X3VyaSA9IGFyZ3MucmVkaXJlY3RfdXJpIHx8IHRoaXMuX3NldHRpbmdzLnJlZGlyZWN0X3VyaTtcclxuXHJcbiAgICAgICAgaWYgKCFhcmdzLmNvZGUpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiVG9rZW5DbGllbnQuZXhjaGFuZ2VDb2RlOiBObyBjb2RlIHBhc3NlZFwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIkEgY29kZSBpcyByZXF1aXJlZFwiKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghYXJncy5yZWRpcmVjdF91cmkpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiVG9rZW5DbGllbnQuZXhjaGFuZ2VDb2RlOiBObyByZWRpcmVjdF91cmkgcGFzc2VkXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiQSByZWRpcmVjdF91cmkgaXMgcmVxdWlyZWRcIikpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWFyZ3MuY29kZV92ZXJpZmllcikge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJUb2tlbkNsaWVudC5leGNoYW5nZUNvZGU6IE5vIGNvZGVfdmVyaWZpZXIgcGFzc2VkXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiQSBjb2RlX3ZlcmlmaWVyIGlzIHJlcXVpcmVkXCIpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFhcmdzLmNsaWVudF9pZCkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJUb2tlbkNsaWVudC5leGNoYW5nZUNvZGU6IE5vIGNsaWVudF9pZCBwYXNzZWRcIik7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJBIGNsaWVudF9pZCBpcyByZXF1aXJlZFwiKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5fbWV0YWRhdGFTZXJ2aWNlLmdldFRva2VuRW5kcG9pbnQoZmFsc2UpLnRoZW4odXJsID0+IHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiVG9rZW5DbGllbnQuZXhjaGFuZ2VDb2RlOiBSZWNlaXZlZCB0b2tlbiBlbmRwb2ludFwiKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9qc29uU2VydmljZS5wb3N0Rm9ybSh1cmwsIGFyZ3MpLnRoZW4ocmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiVG9rZW5DbGllbnQuZXhjaGFuZ2VDb2RlOiByZXNwb25zZSByZWNlaXZlZFwiKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZXhjaGFuZ2VSZWZyZXNoVG9rZW4oYXJncyA9IHt9KSB7XHJcbiAgICAgICAgYXJncyA9IE9iamVjdC5hc3NpZ24oe30sIGFyZ3MpO1xyXG5cclxuICAgICAgICBhcmdzLmdyYW50X3R5cGUgPSBhcmdzLmdyYW50X3R5cGUgfHwgXCJyZWZyZXNoX3Rva2VuXCI7XHJcbiAgICAgICAgYXJncy5jbGllbnRfaWQgPSBhcmdzLmNsaWVudF9pZCB8fCB0aGlzLl9zZXR0aW5ncy5jbGllbnRfaWQ7XHJcbiAgICAgICAgYXJncy5jbGllbnRfc2VjcmV0ID0gYXJncy5jbGllbnRfc2VjcmV0IHx8IHRoaXMuX3NldHRpbmdzLmNsaWVudF9zZWNyZXQ7XHJcblxyXG4gICAgICAgIGlmICghYXJncy5yZWZyZXNoX3Rva2VuKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlRva2VuQ2xpZW50LmV4Y2hhbmdlUmVmcmVzaFRva2VuOiBObyByZWZyZXNoX3Rva2VuIHBhc3NlZFwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIkEgcmVmcmVzaF90b2tlbiBpcyByZXF1aXJlZFwiKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghYXJncy5jbGllbnRfaWQpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiVG9rZW5DbGllbnQuZXhjaGFuZ2VSZWZyZXNoVG9rZW46IE5vIGNsaWVudF9pZCBwYXNzZWRcIik7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJBIGNsaWVudF9pZCBpcyByZXF1aXJlZFwiKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5fbWV0YWRhdGFTZXJ2aWNlLmdldFRva2VuRW5kcG9pbnQoZmFsc2UpLnRoZW4odXJsID0+IHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiVG9rZW5DbGllbnQuZXhjaGFuZ2VSZWZyZXNoVG9rZW46IFJlY2VpdmVkIHRva2VuIGVuZHBvaW50XCIpO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2pzb25TZXJ2aWNlLnBvc3RGb3JtKHVybCwgYXJncykudGhlbihyZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJUb2tlbkNsaWVudC5leGNoYW5nZVJlZnJlc2hUb2tlbjogcmVzcG9uc2UgcmVjZWl2ZWRcIik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuaW1wb3J0IHsgTWV0YWRhdGFTZXJ2aWNlIH0gZnJvbSAnLi9NZXRhZGF0YVNlcnZpY2UuanMnO1xyXG5pbXBvcnQgeyBHbG9iYWwgfSBmcm9tICcuL0dsb2JhbC5qcyc7XHJcblxyXG5jb25zdCBBY2Nlc3NUb2tlblR5cGVIaW50ID0gXCJhY2Nlc3NfdG9rZW5cIjtcclxuY29uc3QgUmVmcmVzaFRva2VuVHlwZUhpbnQgPSBcInJlZnJlc2hfdG9rZW5cIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBUb2tlblJldm9jYXRpb25DbGllbnQge1xyXG4gICAgY29uc3RydWN0b3Ioc2V0dGluZ3MsIFhNTEh0dHBSZXF1ZXN0Q3RvciA9IEdsb2JhbC5YTUxIdHRwUmVxdWVzdCwgTWV0YWRhdGFTZXJ2aWNlQ3RvciA9IE1ldGFkYXRhU2VydmljZSkge1xyXG4gICAgICAgIGlmICghc2V0dGluZ3MpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiVG9rZW5SZXZvY2F0aW9uQ2xpZW50LmN0b3I6IE5vIHNldHRpbmdzIHByb3ZpZGVkXCIpO1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBzZXR0aW5ncyBwcm92aWRlZC5cIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9zZXR0aW5ncyA9IHNldHRpbmdzO1xyXG4gICAgICAgIHRoaXMuX1hNTEh0dHBSZXF1ZXN0Q3RvciA9IFhNTEh0dHBSZXF1ZXN0Q3RvcjtcclxuICAgICAgICB0aGlzLl9tZXRhZGF0YVNlcnZpY2UgPSBuZXcgTWV0YWRhdGFTZXJ2aWNlQ3Rvcih0aGlzLl9zZXR0aW5ncyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV2b2tlKHRva2VuLCByZXF1aXJlZCwgdHlwZSA9IFwiYWNjZXNzX3Rva2VuXCIpIHtcclxuICAgICAgICBpZiAoIXRva2VuKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlRva2VuUmV2b2NhdGlvbkNsaWVudC5yZXZva2U6IE5vIHRva2VuIHByb3ZpZGVkXCIpO1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyB0b2tlbiBwcm92aWRlZC5cIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodHlwZSAhPT0gQWNjZXNzVG9rZW5UeXBlSGludCAmJiB0eXBlICE9IFJlZnJlc2hUb2tlblR5cGVIaW50KSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlRva2VuUmV2b2NhdGlvbkNsaWVudC5yZXZva2U6IEludmFsaWQgdG9rZW4gdHlwZVwiKTtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCB0b2tlbiB0eXBlLlwiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9tZXRhZGF0YVNlcnZpY2UuZ2V0UmV2b2NhdGlvbkVuZHBvaW50KCkudGhlbih1cmwgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIXVybCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlcXVpcmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiVG9rZW5SZXZvY2F0aW9uQ2xpZW50LnJldm9rZTogUmV2b2NhdGlvbiBub3Qgc3VwcG9ydGVkXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlJldm9jYXRpb24gbm90IHN1cHBvcnRlZFwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAvLyBub3QgcmVxdWlyZWQsIHNvIGRvbid0IGVycm9yIGFuZCBqdXN0IHJldHVyblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJUb2tlblJldm9jYXRpb25DbGllbnQucmV2b2tlOiBSZXZva2luZyBcIiArIHR5cGUpO1xyXG4gICAgICAgICAgICB2YXIgY2xpZW50X2lkID0gdGhpcy5fc2V0dGluZ3MuY2xpZW50X2lkO1xyXG4gICAgICAgICAgICB2YXIgY2xpZW50X3NlY3JldCA9IHRoaXMuX3NldHRpbmdzLmNsaWVudF9zZWNyZXQ7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZXZva2UodXJsLCBjbGllbnRfaWQsIGNsaWVudF9zZWNyZXQsIHRva2VuLCB0eXBlKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBfcmV2b2tlKHVybCwgY2xpZW50X2lkLCBjbGllbnRfc2VjcmV0LCB0b2tlbiwgdHlwZSkge1xyXG5cclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG5cclxuICAgICAgICAgICAgdmFyIHhociA9IG5ldyB0aGlzLl9YTUxIdHRwUmVxdWVzdEN0b3IoKTtcclxuICAgICAgICAgICAgeGhyLm9wZW4oXCJQT1NUXCIsIHVybCk7XHJcblxyXG4gICAgICAgICAgICB4aHIub25sb2FkID0gKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiVG9rZW5SZXZvY2F0aW9uQ2xpZW50LnJldm9rZTogSFRUUCByZXNwb25zZSByZWNlaXZlZCwgc3RhdHVzXCIsIHhoci5zdGF0dXMpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICh4aHIuc3RhdHVzID09PSAyMDApIHtcclxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByZWplY3QoRXJyb3IoeGhyLnN0YXR1c1RleHQgKyBcIiAoXCIgKyB4aHIuc3RhdHVzICsgXCIpXCIpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgeGhyLm9uZXJyb3IgPSAoKSA9PiB7IFxyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiVG9rZW5SZXZvY2F0aW9uQ2xpZW50LnJldm9rZTogTmV0d29yayBFcnJvci5cIilcclxuICAgICAgICAgICAgICAgIHJlamVjdChcIk5ldHdvcmsgRXJyb3JcIik7XHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICB2YXIgYm9keSA9IFwiY2xpZW50X2lkPVwiICsgZW5jb2RlVVJJQ29tcG9uZW50KGNsaWVudF9pZCk7XHJcbiAgICAgICAgICAgIGlmIChjbGllbnRfc2VjcmV0KSB7XHJcbiAgICAgICAgICAgICAgICBib2R5ICs9IFwiJmNsaWVudF9zZWNyZXQ9XCIgKyBlbmNvZGVVUklDb21wb25lbnQoY2xpZW50X3NlY3JldCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYm9keSArPSBcIiZ0b2tlbl90eXBlX2hpbnQ9XCIgKyBlbmNvZGVVUklDb21wb25lbnQodHlwZSk7XHJcbiAgICAgICAgICAgIGJvZHkgKz0gXCImdG9rZW49XCIgKyBlbmNvZGVVUklDb21wb25lbnQodG9rZW4pO1xyXG5cclxuICAgICAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoXCJDb250ZW50LVR5cGVcIiwgXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcIik7XHJcbiAgICAgICAgICAgIHhoci5zZW5kKGJvZHkpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuaW1wb3J0IHsgR2xvYmFsIH0gZnJvbSAnLi9HbG9iYWwuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFVybFV0aWxpdHkge1xyXG4gICAgc3RhdGljIGFkZFF1ZXJ5UGFyYW0odXJsLCBuYW1lLCB2YWx1ZSkge1xyXG4gICAgICAgIGlmICh1cmwuaW5kZXhPZignPycpIDwgMCkge1xyXG4gICAgICAgICAgICB1cmwgKz0gXCI/XCI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodXJsW3VybC5sZW5ndGggLSAxXSAhPT0gXCI/XCIpIHtcclxuICAgICAgICAgICAgdXJsICs9IFwiJlwiO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdXJsICs9IGVuY29kZVVSSUNvbXBvbmVudChuYW1lKTtcclxuICAgICAgICB1cmwgKz0gXCI9XCI7XHJcbiAgICAgICAgdXJsICs9IGVuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSk7XHJcblxyXG4gICAgICAgIHJldHVybiB1cmw7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIHBhcnNlVXJsRnJhZ21lbnQodmFsdWUsIGRlbGltaXRlciA9IFwiI1wiLCBnbG9iYWwgPSBHbG9iYWwpIHtcclxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJyl7XHJcbiAgICAgICAgICAgIHZhbHVlID0gZ2xvYmFsLmxvY2F0aW9uLmhyZWY7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgaWR4ID0gdmFsdWUubGFzdEluZGV4T2YoZGVsaW1pdGVyKTtcclxuICAgICAgICBpZiAoaWR4ID49IDApIHtcclxuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5zdWJzdHIoaWR4ICsgMSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZGVsaW1pdGVyID09PSBcIj9cIikge1xyXG4gICAgICAgICAgICAvLyBpZiB3ZSdyZSBkb2luZyBxdWVyeSwgdGhlbiBzdHJpcCBvZmYgaGFzaCBmcmFnbWVudCBiZWZvcmUgd2UgcGFyc2VcclxuICAgICAgICAgICAgaWR4ID0gdmFsdWUuaW5kZXhPZignIycpO1xyXG4gICAgICAgICAgICBpZiAoaWR4ID49IDApIHtcclxuICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuc3Vic3RyKDAsIGlkeCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBwYXJhbXMgPSB7fSxcclxuICAgICAgICAgICAgcmVnZXggPSAvKFteJj1dKyk9KFteJl0qKS9nLFxyXG4gICAgICAgICAgICBtO1xyXG5cclxuICAgICAgICB2YXIgY291bnRlciA9IDA7XHJcbiAgICAgICAgd2hpbGUgKG0gPSByZWdleC5leGVjKHZhbHVlKSkge1xyXG4gICAgICAgICAgICBwYXJhbXNbZGVjb2RlVVJJQ29tcG9uZW50KG1bMV0pXSA9IGRlY29kZVVSSUNvbXBvbmVudChtWzJdKTtcclxuICAgICAgICAgICAgaWYgKGNvdW50ZXIrKyA+IDUwKSB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJVcmxVdGlsaXR5LnBhcnNlVXJsRnJhZ21lbnQ6IHJlc3BvbnNlIGV4Y2VlZGVkIGV4cGVjdGVkIG51bWJlciBvZiBwYXJhbWV0ZXJzXCIsIHZhbHVlKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6IFwiUmVzcG9uc2UgZXhjZWVkZWQgZXhwZWN0ZWQgbnVtYmVyIG9mIHBhcmFtZXRlcnNcIlxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yICh2YXIgcHJvcCBpbiBwYXJhbXMpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHBhcmFtcztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB7fTtcclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgVXNlciB7XHJcbiAgICBjb25zdHJ1Y3Rvcih7aWRfdG9rZW4sIHNlc3Npb25fc3RhdGUsIGFjY2Vzc190b2tlbiwgcmVmcmVzaF90b2tlbiwgdG9rZW5fdHlwZSwgc2NvcGUsIHByb2ZpbGUsIGV4cGlyZXNfYXQsIHN0YXRlfSkge1xyXG4gICAgICAgIHRoaXMuaWRfdG9rZW4gPSBpZF90b2tlbjtcclxuICAgICAgICB0aGlzLnNlc3Npb25fc3RhdGUgPSBzZXNzaW9uX3N0YXRlO1xyXG4gICAgICAgIHRoaXMuYWNjZXNzX3Rva2VuID0gYWNjZXNzX3Rva2VuO1xyXG4gICAgICAgIHRoaXMucmVmcmVzaF90b2tlbiA9IHJlZnJlc2hfdG9rZW47XHJcbiAgICAgICAgdGhpcy50b2tlbl90eXBlID0gdG9rZW5fdHlwZTtcclxuICAgICAgICB0aGlzLnNjb3BlID0gc2NvcGU7XHJcbiAgICAgICAgdGhpcy5wcm9maWxlID0gcHJvZmlsZTtcclxuICAgICAgICB0aGlzLmV4cGlyZXNfYXQgPSBleHBpcmVzX2F0O1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBzdGF0ZTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgZXhwaXJlc19pbigpIHtcclxuICAgICAgICBpZiAodGhpcy5leHBpcmVzX2F0KSB7XHJcbiAgICAgICAgICAgIGxldCBub3cgPSBwYXJzZUludChEYXRlLm5vdygpIC8gMTAwMCk7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmV4cGlyZXNfYXQgLSBub3c7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICB9XHJcbiAgICBzZXQgZXhwaXJlc19pbih2YWx1ZSkge1xyXG4gICAgICAgIGxldCBleHBpcmVzX2luID0gcGFyc2VJbnQodmFsdWUpO1xyXG4gICAgICAgIGlmICh0eXBlb2YgZXhwaXJlc19pbiA9PT0gJ251bWJlcicgJiYgZXhwaXJlc19pbiA+IDApIHtcclxuICAgICAgICAgICAgbGV0IG5vdyA9IHBhcnNlSW50KERhdGUubm93KCkgLyAxMDAwKTtcclxuICAgICAgICAgICAgdGhpcy5leHBpcmVzX2F0ID0gbm93ICsgZXhwaXJlc19pbjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGV4cGlyZWQoKSB7XHJcbiAgICAgICAgbGV0IGV4cGlyZXNfaW4gPSB0aGlzLmV4cGlyZXNfaW47XHJcbiAgICAgICAgaWYgKGV4cGlyZXNfaW4gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZXhwaXJlc19pbiA8PSAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBzY29wZXMoKSB7XHJcbiAgICAgICAgcmV0dXJuICh0aGlzLnNjb3BlIHx8IFwiXCIpLnNwbGl0KFwiIFwiKTtcclxuICAgIH1cclxuXHJcbiAgICB0b1N0b3JhZ2VTdHJpbmcoKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiVXNlci50b1N0b3JhZ2VTdHJpbmdcIik7XHJcbiAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHtcclxuICAgICAgICAgICAgaWRfdG9rZW46IHRoaXMuaWRfdG9rZW4sXHJcbiAgICAgICAgICAgIHNlc3Npb25fc3RhdGU6IHRoaXMuc2Vzc2lvbl9zdGF0ZSxcclxuICAgICAgICAgICAgYWNjZXNzX3Rva2VuOiB0aGlzLmFjY2Vzc190b2tlbixcclxuICAgICAgICAgICAgcmVmcmVzaF90b2tlbjogdGhpcy5yZWZyZXNoX3Rva2VuLFxyXG4gICAgICAgICAgICB0b2tlbl90eXBlOiB0aGlzLnRva2VuX3R5cGUsXHJcbiAgICAgICAgICAgIHNjb3BlOiB0aGlzLnNjb3BlLFxyXG4gICAgICAgICAgICBwcm9maWxlOiB0aGlzLnByb2ZpbGUsXHJcbiAgICAgICAgICAgIGV4cGlyZXNfYXQ6IHRoaXMuZXhwaXJlc19hdFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBmcm9tU3RvcmFnZVN0cmluZyhzdG9yYWdlU3RyaW5nKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiVXNlci5mcm9tU3RvcmFnZVN0cmluZ1wiKTtcclxuICAgICAgICByZXR1cm4gbmV3IFVzZXIoSlNPTi5wYXJzZShzdG9yYWdlU3RyaW5nKSk7XHJcbiAgICB9XHJcbn1cclxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG5cclxuaW1wb3J0IHsgSnNvblNlcnZpY2UgfSBmcm9tICcuL0pzb25TZXJ2aWNlLmpzJztcclxuaW1wb3J0IHsgTWV0YWRhdGFTZXJ2aWNlIH0gZnJvbSAnLi9NZXRhZGF0YVNlcnZpY2UuanMnO1xyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcbmltcG9ydCB7IEpvc2VVdGlsIH0gZnJvbSAnLi9Kb3NlVXRpbC5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgVXNlckluZm9TZXJ2aWNlIHtcclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHNldHRpbmdzLCBcclxuICAgICAgICBKc29uU2VydmljZUN0b3IgPSBKc29uU2VydmljZSwgXHJcbiAgICAgICAgTWV0YWRhdGFTZXJ2aWNlQ3RvciA9IE1ldGFkYXRhU2VydmljZSwgXHJcbiAgICAgICAgam9zZVV0aWwgPSBKb3NlVXRpbFxyXG4gICAgKSB7XHJcbiAgICAgICAgaWYgKCFzZXR0aW5ncykge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJVc2VySW5mb1NlcnZpY2UuY3RvcjogTm8gc2V0dGluZ3MgcGFzc2VkXCIpO1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJzZXR0aW5nc1wiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3NldHRpbmdzID0gc2V0dGluZ3M7XHJcbiAgICAgICAgdGhpcy5fanNvblNlcnZpY2UgPSBuZXcgSnNvblNlcnZpY2VDdG9yKHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB0aGlzLl9nZXRDbGFpbXNGcm9tSnd0LmJpbmQodGhpcykpO1xyXG4gICAgICAgIHRoaXMuX21ldGFkYXRhU2VydmljZSA9IG5ldyBNZXRhZGF0YVNlcnZpY2VDdG9yKHRoaXMuX3NldHRpbmdzKTtcclxuICAgICAgICB0aGlzLl9qb3NlVXRpbCA9IGpvc2VVdGlsO1xyXG4gICAgfVxyXG5cclxuICAgIGdldENsYWltcyh0b2tlbikge1xyXG4gICAgICAgIGlmICghdG9rZW4pIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiVXNlckluZm9TZXJ2aWNlLmdldENsYWltczogTm8gdG9rZW4gcGFzc2VkXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiQSB0b2tlbiBpcyByZXF1aXJlZFwiKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5fbWV0YWRhdGFTZXJ2aWNlLmdldFVzZXJJbmZvRW5kcG9pbnQoKS50aGVuKHVybCA9PiB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJJbmZvU2VydmljZS5nZXRDbGFpbXM6IHJlY2VpdmVkIHVzZXJpbmZvIHVybFwiLCB1cmwpO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2pzb25TZXJ2aWNlLmdldEpzb24odXJsLCB0b2tlbikudGhlbihjbGFpbXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlckluZm9TZXJ2aWNlLmdldENsYWltczogY2xhaW1zIHJlY2VpdmVkXCIsIGNsYWltcyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1zO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBfZ2V0Q2xhaW1zRnJvbUp3dChyZXEpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBsZXQgand0ID0gdGhpcy5fam9zZVV0aWwucGFyc2VKd3QocmVxLnJlc3BvbnNlVGV4dCk7XHJcbiAgICAgICAgICAgIGlmICghand0IHx8ICFqd3QuaGVhZGVyIHx8ICFqd3QucGF5bG9hZCkge1xyXG4gICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiVXNlckluZm9TZXJ2aWNlLl9nZXRDbGFpbXNGcm9tSnd0OiBGYWlsZWQgdG8gcGFyc2UgSldUXCIsIGp3dCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiRmFpbGVkIHRvIHBhcnNlIGlkX3Rva2VuXCIpKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmFyIGtpZCA9IGp3dC5oZWFkZXIua2lkO1xyXG5cclxuICAgICAgICAgICAgbGV0IGlzc3VlclByb21pc2U7XHJcbiAgICAgICAgICAgIHN3aXRjaCAodGhpcy5fc2V0dGluZ3MudXNlckluZm9Kd3RJc3N1ZXIpIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgJ09QJzpcclxuICAgICAgICAgICAgICAgICAgICBpc3N1ZXJQcm9taXNlID0gdGhpcy5fbWV0YWRhdGFTZXJ2aWNlLmdldElzc3VlcigpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnQU5ZJzpcclxuICAgICAgICAgICAgICAgICAgICBpc3N1ZXJQcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKGp3dC5wYXlsb2FkLmlzcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgIGlzc3VlclByb21pc2UgPSBQcm9taXNlLnJlc29sdmUodGhpcy5fc2V0dGluZ3MudXNlckluZm9Kd3RJc3N1ZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gaXNzdWVyUHJvbWlzZS50aGVuKGlzc3VlciA9PiB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VySW5mb1NlcnZpY2UuX2dldENsYWltc0Zyb21Kd3Q6IFJlY2VpdmVkIGlzc3VlcjpcIiArIGlzc3Vlcik7XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21ldGFkYXRhU2VydmljZS5nZXRTaWduaW5nS2V5cygpLnRoZW4oa2V5cyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFrZXlzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIlVzZXJJbmZvU2VydmljZS5fZ2V0Q2xhaW1zRnJvbUp3dDogTm8gc2lnbmluZyBrZXlzIGZyb20gbWV0YWRhdGFcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJObyBzaWduaW5nIGtleXMgZnJvbSBtZXRhZGF0YVwiKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VySW5mb1NlcnZpY2UuX2dldENsYWltc0Zyb21Kd3Q6IFJlY2VpdmVkIHNpZ25pbmcga2V5c1wiKTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQga2V5O1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICgha2lkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleXMgPSB0aGlzLl9maWx0ZXJCeUFsZyhrZXlzLCBqd3QuaGVhZGVyLmFsZyk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoa2V5cy5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJVc2VySW5mb1NlcnZpY2UuX2dldENsYWltc0Zyb21Kd3Q6IE5vIGtpZCBmb3VuZCBpbiBpZF90b2tlbiBhbmQgbW9yZSB0aGFuIG9uZSBrZXkgZm91bmQgaW4gbWV0YWRhdGFcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiTm8ga2lkIGZvdW5kIGluIGlkX3Rva2VuIGFuZCBtb3JlIHRoYW4gb25lIGtleSBmb3VuZCBpbiBtZXRhZGF0YVwiKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBraWQgaXMgbWFuZGF0b3J5IG9ubHkgd2hlbiB0aGVyZSBhcmUgbXVsdGlwbGUga2V5cyBpbiB0aGUgcmVmZXJlbmNlZCBKV0sgU2V0IGRvY3VtZW50XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzZWUgaHR0cDovL29wZW5pZC5uZXQvc3BlY3Mvb3BlbmlkLWNvbm5lY3QtY29yZS0xXzAuaHRtbCNTaWduaW5nXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXkgPSBrZXlzWzBdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBrZXkgPSBrZXlzLmZpbHRlcihrZXkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGtleS5raWQgPT09IGtpZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSlbMF07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWtleSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJVc2VySW5mb1NlcnZpY2UuX2dldENsYWltc0Zyb21Kd3Q6IE5vIGtleSBtYXRjaGluZyBraWQgb3IgYWxnIGZvdW5kIGluIHNpZ25pbmcga2V5c1wiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIk5vIGtleSBtYXRjaGluZyBraWQgb3IgYWxnIGZvdW5kIGluIHNpZ25pbmcga2V5c1wiKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBsZXQgYXVkaWVuY2UgPSB0aGlzLl9zZXR0aW5ncy5jbGllbnRfaWQ7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGxldCBjbG9ja1NrZXdJblNlY29uZHMgPSB0aGlzLl9zZXR0aW5ncy5jbG9ja1NrZXc7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlckluZm9TZXJ2aWNlLl9nZXRDbGFpbXNGcm9tSnd0OiBWYWxpZGFpbmcgSldUOyB1c2luZyBjbG9jayBza2V3IChpbiBzZWNvbmRzKSBvZjogXCIsIGNsb2NrU2tld0luU2Vjb25kcyk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9qb3NlVXRpbC52YWxpZGF0ZUp3dChyZXEucmVzcG9uc2VUZXh0LCBrZXksIGlzc3VlciwgYXVkaWVuY2UsIGNsb2NrU2tld0luU2Vjb25kcywgdW5kZWZpbmVkLCB0cnVlKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlckluZm9TZXJ2aWNlLl9nZXRDbGFpbXNGcm9tSnd0OiBKV1QgdmFsaWRhdGlvbiBzdWNjZXNzZnVsXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gand0LnBheWxvYWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiVXNlckluZm9TZXJ2aWNlLl9nZXRDbGFpbXNGcm9tSnd0OiBFcnJvciBwYXJzaW5nIEpXVCByZXNwb25zZVwiLCBlLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICByZWplY3QoZSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgX2ZpbHRlckJ5QWxnKGtleXMsIGFsZykge1xyXG4gICAgICAgIHZhciBrdHkgPSBudWxsO1xyXG4gICAgICAgIGlmIChhbGcuc3RhcnRzV2l0aChcIlJTXCIpKSB7XHJcbiAgICAgICAgICAgIGt0eSA9IFwiUlNBXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGFsZy5zdGFydHNXaXRoKFwiUFNcIikpIHtcclxuICAgICAgICAgICAga3R5ID0gXCJQU1wiO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChhbGcuc3RhcnRzV2l0aChcIkVTXCIpKSB7XHJcbiAgICAgICAgICAgIGt0eSA9IFwiRUNcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJJbmZvU2VydmljZS5fZmlsdGVyQnlBbGc6IGFsZyBub3Qgc3VwcG9ydGVkOiBcIiwgYWxnKTtcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgTG9nLmRlYnVnKFwiVXNlckluZm9TZXJ2aWNlLl9maWx0ZXJCeUFsZzogTG9va2luZyBmb3Iga2V5cyB0aGF0IG1hdGNoIGt0eTogXCIsIGt0eSk7XHJcblxyXG4gICAgICAgIGtleXMgPSBrZXlzLmZpbHRlcihrZXkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4ga2V5Lmt0eSA9PT0ga3R5O1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBMb2cuZGVidWcoXCJVc2VySW5mb1NlcnZpY2UuX2ZpbHRlckJ5QWxnOiBOdW1iZXIgb2Yga2V5cyB0aGF0IG1hdGNoIGt0eTogXCIsIGt0eSwga2V5cy5sZW5ndGgpO1xyXG5cclxuICAgICAgICByZXR1cm4ga2V5cztcclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcbmltcG9ydCB7IE9pZGNDbGllbnQgfSBmcm9tICcuL09pZGNDbGllbnQuanMnO1xyXG5pbXBvcnQgeyBVc2VyTWFuYWdlclNldHRpbmdzIH0gZnJvbSAnLi9Vc2VyTWFuYWdlclNldHRpbmdzLmpzJztcclxuaW1wb3J0IHsgVXNlciB9IGZyb20gJy4vVXNlci5qcyc7XHJcbmltcG9ydCB7IFVzZXJNYW5hZ2VyRXZlbnRzIH0gZnJvbSAnLi9Vc2VyTWFuYWdlckV2ZW50cy5qcyc7XHJcbmltcG9ydCB7IFNpbGVudFJlbmV3U2VydmljZSB9IGZyb20gJy4vU2lsZW50UmVuZXdTZXJ2aWNlLmpzJztcclxuaW1wb3J0IHsgU2Vzc2lvbk1vbml0b3IgfSBmcm9tICcuL1Nlc3Npb25Nb25pdG9yLmpzJztcclxuaW1wb3J0IHsgVG9rZW5SZXZvY2F0aW9uQ2xpZW50IH0gZnJvbSAnLi9Ub2tlblJldm9jYXRpb25DbGllbnQuanMnO1xyXG5pbXBvcnQgeyBUb2tlbkNsaWVudCB9IGZyb20gJy4vVG9rZW5DbGllbnQuanMnO1xyXG5pbXBvcnQgeyBKb3NlVXRpbCB9IGZyb20gJy4vSm9zZVV0aWwuanMnO1xyXG5cclxuXHJcbmV4cG9ydCBjbGFzcyBVc2VyTWFuYWdlciBleHRlbmRzIE9pZGNDbGllbnQge1xyXG4gICAgY29uc3RydWN0b3Ioc2V0dGluZ3MgPSB7fSxcclxuICAgICAgICBTaWxlbnRSZW5ld1NlcnZpY2VDdG9yID0gU2lsZW50UmVuZXdTZXJ2aWNlLFxyXG4gICAgICAgIFNlc3Npb25Nb25pdG9yQ3RvciA9IFNlc3Npb25Nb25pdG9yLFxyXG4gICAgICAgIFRva2VuUmV2b2NhdGlvbkNsaWVudEN0b3IgPSBUb2tlblJldm9jYXRpb25DbGllbnQsXHJcbiAgICAgICAgVG9rZW5DbGllbnRDdG9yID0gVG9rZW5DbGllbnQsXHJcbiAgICAgICAgam9zZVV0aWwgPSBKb3NlVXRpbFxyXG4gICAgKSB7XHJcblxyXG4gICAgICAgIGlmICghKHNldHRpbmdzIGluc3RhbmNlb2YgVXNlck1hbmFnZXJTZXR0aW5ncykpIHtcclxuICAgICAgICAgICAgc2V0dGluZ3MgPSBuZXcgVXNlck1hbmFnZXJTZXR0aW5ncyhzZXR0aW5ncyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHN1cGVyKHNldHRpbmdzKTtcclxuXHJcbiAgICAgICAgdGhpcy5fZXZlbnRzID0gbmV3IFVzZXJNYW5hZ2VyRXZlbnRzKHNldHRpbmdzKTtcclxuICAgICAgICB0aGlzLl9zaWxlbnRSZW5ld1NlcnZpY2UgPSBuZXcgU2lsZW50UmVuZXdTZXJ2aWNlQ3Rvcih0aGlzKTtcclxuXHJcbiAgICAgICAgLy8gb3JkZXIgaXMgaW1wb3J0YW50IGZvciB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM7IHRoZXNlIHNlcnZpY2VzIGRlcGVuZCB1cG9uIHRoZSBldmVudHMuXHJcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZ3MuYXV0b21hdGljU2lsZW50UmVuZXcpIHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXIuY3RvcjogYXV0b21hdGljU2lsZW50UmVuZXcgaXMgY29uZmlndXJlZCwgc2V0dGluZyB1cCBzaWxlbnQgcmVuZXdcIik7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhcnRTaWxlbnRSZW5ldygpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZ3MubW9uaXRvclNlc3Npb24pIHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXIuY3RvcjogbW9uaXRvclNlc3Npb24gaXMgY29uZmlndXJlZCwgc2V0dGluZyB1cCBzZXNzaW9uIG1vbml0b3JcIik7XHJcbiAgICAgICAgICAgIHRoaXMuX3Nlc3Npb25Nb25pdG9yID0gbmV3IFNlc3Npb25Nb25pdG9yQ3Rvcih0aGlzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3Rva2VuUmV2b2NhdGlvbkNsaWVudCA9IG5ldyBUb2tlblJldm9jYXRpb25DbGllbnRDdG9yKHRoaXMuX3NldHRpbmdzKTtcclxuICAgICAgICB0aGlzLl90b2tlbkNsaWVudCA9IG5ldyBUb2tlbkNsaWVudEN0b3IodGhpcy5fc2V0dGluZ3MpO1xyXG4gICAgICAgIHRoaXMuX2pvc2VVdGlsID0gam9zZVV0aWw7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IF9yZWRpcmVjdE5hdmlnYXRvcigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXR0aW5ncy5yZWRpcmVjdE5hdmlnYXRvcjtcclxuICAgIH1cclxuICAgIGdldCBfcG9wdXBOYXZpZ2F0b3IoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0dGluZ3MucG9wdXBOYXZpZ2F0b3I7XHJcbiAgICB9XHJcbiAgICBnZXQgX2lmcmFtZU5hdmlnYXRvcigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXR0aW5ncy5pZnJhbWVOYXZpZ2F0b3I7XHJcbiAgICB9XHJcbiAgICBnZXQgX3VzZXJTdG9yZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXR0aW5ncy51c2VyU3RvcmU7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGV2ZW50cygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZXZlbnRzO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFVzZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xvYWRVc2VyKCkudGhlbih1c2VyID0+IHtcclxuICAgICAgICAgICAgaWYgKHVzZXIpIHtcclxuICAgICAgICAgICAgICAgIExvZy5pbmZvKFwiVXNlck1hbmFnZXIuZ2V0VXNlcjogdXNlciBsb2FkZWRcIik7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5fZXZlbnRzLmxvYWQodXNlciwgZmFsc2UpO1xyXG5cclxuICAgICAgICAgICAgICAgIHJldHVybiB1c2VyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgTG9nLmluZm8oXCJVc2VyTWFuYWdlci5nZXRVc2VyOiB1c2VyIG5vdCBmb3VuZCBpbiBzdG9yYWdlXCIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICByZW1vdmVVc2VyKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnN0b3JlVXNlcihudWxsKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgTG9nLmluZm8oXCJVc2VyTWFuYWdlci5yZW1vdmVVc2VyOiB1c2VyIHJlbW92ZWQgZnJvbSBzdG9yYWdlXCIpO1xyXG4gICAgICAgICAgICB0aGlzLl9ldmVudHMudW5sb2FkKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2lnbmluUmVkaXJlY3QoYXJncyA9IHt9KSB7XHJcbiAgICAgICAgYXJncyA9IE9iamVjdC5hc3NpZ24oe30sIGFyZ3MpO1xyXG5cclxuICAgICAgICBhcmdzLnJlcXVlc3RfdHlwZSA9IFwic2k6clwiO1xyXG4gICAgICAgIGxldCBuYXZQYXJhbXMgPSB7XHJcbiAgICAgICAgICAgIHVzZVJlcGxhY2VUb05hdmlnYXRlIDogYXJncy51c2VSZXBsYWNlVG9OYXZpZ2F0ZVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NpZ25pblN0YXJ0KGFyZ3MsIHRoaXMuX3JlZGlyZWN0TmF2aWdhdG9yLCBuYXZQYXJhbXMpLnRoZW4oKCk9PntcclxuICAgICAgICAgICAgTG9nLmluZm8oXCJVc2VyTWFuYWdlci5zaWduaW5SZWRpcmVjdDogc3VjY2Vzc2Z1bFwiKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIHNpZ25pblJlZGlyZWN0Q2FsbGJhY2sodXJsKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NpZ25pbkVuZCh1cmwgfHwgdGhpcy5fcmVkaXJlY3ROYXZpZ2F0b3IudXJsKS50aGVuKHVzZXIgPT4ge1xyXG4gICAgICAgICAgICBpZiAodXNlci5wcm9maWxlICYmIHVzZXIucHJvZmlsZS5zdWIpIHtcclxuICAgICAgICAgICAgICAgIExvZy5pbmZvKFwiVXNlck1hbmFnZXIuc2lnbmluUmVkaXJlY3RDYWxsYmFjazogc3VjY2Vzc2Z1bCwgc2lnbmVkIGluIHN1YjogXCIsIHVzZXIucHJvZmlsZS5zdWIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgTG9nLmluZm8oXCJVc2VyTWFuYWdlci5zaWduaW5SZWRpcmVjdENhbGxiYWNrOiBubyBzdWJcIik7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiB1c2VyO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHNpZ25pblBvcHVwKGFyZ3MgPSB7fSkge1xyXG4gICAgICAgIGFyZ3MgPSBPYmplY3QuYXNzaWduKHt9LCBhcmdzKTtcclxuXHJcbiAgICAgICAgYXJncy5yZXF1ZXN0X3R5cGUgPSBcInNpOnBcIjtcclxuICAgICAgICBsZXQgdXJsID0gYXJncy5yZWRpcmVjdF91cmkgfHwgdGhpcy5zZXR0aW5ncy5wb3B1cF9yZWRpcmVjdF91cmkgfHwgdGhpcy5zZXR0aW5ncy5yZWRpcmVjdF91cmk7XHJcbiAgICAgICAgaWYgKCF1cmwpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiVXNlck1hbmFnZXIuc2lnbmluUG9wdXA6IE5vIHBvcHVwX3JlZGlyZWN0X3VyaSBvciByZWRpcmVjdF91cmkgY29uZmlndXJlZFwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIk5vIHBvcHVwX3JlZGlyZWN0X3VyaSBvciByZWRpcmVjdF91cmkgY29uZmlndXJlZFwiKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBhcmdzLnJlZGlyZWN0X3VyaSA9IHVybDtcclxuICAgICAgICBhcmdzLmRpc3BsYXkgPSBcInBvcHVwXCI7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9zaWduaW4oYXJncywgdGhpcy5fcG9wdXBOYXZpZ2F0b3IsIHtcclxuICAgICAgICAgICAgc3RhcnRVcmw6IHVybCxcclxuICAgICAgICAgICAgcG9wdXBXaW5kb3dGZWF0dXJlczogYXJncy5wb3B1cFdpbmRvd0ZlYXR1cmVzIHx8IHRoaXMuc2V0dGluZ3MucG9wdXBXaW5kb3dGZWF0dXJlcyxcclxuICAgICAgICAgICAgcG9wdXBXaW5kb3dUYXJnZXQ6IGFyZ3MucG9wdXBXaW5kb3dUYXJnZXQgfHwgdGhpcy5zZXR0aW5ncy5wb3B1cFdpbmRvd1RhcmdldFxyXG4gICAgICAgIH0pLnRoZW4odXNlciA9PiB7XHJcbiAgICAgICAgICAgIGlmICh1c2VyKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodXNlci5wcm9maWxlICYmIHVzZXIucHJvZmlsZS5zdWIpIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuaW5mbyhcIlVzZXJNYW5hZ2VyLnNpZ25pblBvcHVwOiBzaWduaW5Qb3B1cCBzdWNjZXNzZnVsLCBzaWduZWQgaW4gc3ViOiBcIiwgdXNlci5wcm9maWxlLnN1Yik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuaW5mbyhcIlVzZXJNYW5hZ2VyLnNpZ25pblBvcHVwOiBubyBzdWJcIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiB1c2VyO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgc2lnbmluUG9wdXBDYWxsYmFjayh1cmwpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc2lnbmluQ2FsbGJhY2sodXJsLCB0aGlzLl9wb3B1cE5hdmlnYXRvcikudGhlbih1c2VyID0+IHtcclxuICAgICAgICAgICAgaWYgKHVzZXIpIHtcclxuICAgICAgICAgICAgICAgIGlmICh1c2VyLnByb2ZpbGUgJiYgdXNlci5wcm9maWxlLnN1Yikge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5pbmZvKFwiVXNlck1hbmFnZXIuc2lnbmluUG9wdXBDYWxsYmFjazogc3VjY2Vzc2Z1bCwgc2lnbmVkIGluIHN1YjogXCIsIHVzZXIucHJvZmlsZS5zdWIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmluZm8oXCJVc2VyTWFuYWdlci5zaWduaW5Qb3B1cENhbGxiYWNrOiBubyBzdWJcIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiB1c2VyO1xyXG4gICAgICAgIH0pLmNhdGNoKGVycj0+e1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJVc2VyTWFuYWdlci5zaWduaW5Qb3B1cENhbGxiYWNrIGVycm9yOiBcIiArIGVyciAmJiBlcnIubWVzc2FnZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2lnbmluU2lsZW50KGFyZ3MgPSB7fSkge1xyXG4gICAgICAgIGFyZ3MgPSBPYmplY3QuYXNzaWduKHt9LCBhcmdzKTtcclxuXHJcbiAgICAgICAgYXJncy5yZXF1ZXN0X3R5cGUgPSBcInNpOnNcIjtcclxuICAgICAgICAvLyBmaXJzdCBkZXRlcm1pbmUgaWYgd2UgaGF2ZSBhIHJlZnJlc2ggdG9rZW4sIG9yIG5lZWQgdG8gdXNlIGlmcmFtZVxyXG4gICAgICAgIHJldHVybiB0aGlzLl9sb2FkVXNlcigpLnRoZW4odXNlciA9PiB7XHJcbiAgICAgICAgICAgIGlmICh1c2VyICYmIHVzZXIucmVmcmVzaF90b2tlbikge1xyXG4gICAgICAgICAgICAgICAgYXJncy5yZWZyZXNoX3Rva2VuID0gdXNlci5yZWZyZXNoX3Rva2VuO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3VzZVJlZnJlc2hUb2tlbihhcmdzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGFyZ3MuaWRfdG9rZW5faGludCA9IGFyZ3MuaWRfdG9rZW5faGludCB8fCAodGhpcy5zZXR0aW5ncy5pbmNsdWRlSWRUb2tlbkluU2lsZW50UmVuZXcgJiYgdXNlciAmJiB1c2VyLmlkX3Rva2VuKTtcclxuICAgICAgICAgICAgICAgIGlmICh1c2VyICYmIHRoaXMuX3NldHRpbmdzLnZhbGlkYXRlU3ViT25TaWxlbnRSZW5ldykge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyLnNpZ25pblNpbGVudCwgc3ViamVjdCBwcmlvciB0byBzaWxlbnQgcmVuZXc6IFwiLCB1c2VyLnByb2ZpbGUuc3ViKTtcclxuICAgICAgICAgICAgICAgICAgICBhcmdzLmN1cnJlbnRfc3ViID0gdXNlci5wcm9maWxlLnN1YjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9zaWduaW5TaWxlbnRJZnJhbWUoYXJncyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBfdXNlUmVmcmVzaFRva2VuKGFyZ3MgPSB7fSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl90b2tlbkNsaWVudC5leGNoYW5nZVJlZnJlc2hUb2tlbihhcmdzKS50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgIGlmICghcmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJVc2VyTWFuYWdlci5fdXNlUmVmcmVzaFRva2VuOiBObyByZXNwb25zZSByZXR1cm5lZCBmcm9tIHRva2VuIGVuZHBvaW50XCIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KFwiTm8gcmVzcG9uc2UgcmV0dXJuZWQgZnJvbSB0b2tlbiBlbmRwb2ludFwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoIXJlc3VsdC5hY2Nlc3NfdG9rZW4pIHtcclxuICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIlVzZXJNYW5hZ2VyLl91c2VSZWZyZXNoVG9rZW46IE5vIGFjY2VzcyB0b2tlbiByZXR1cm5lZCBmcm9tIHRva2VuIGVuZHBvaW50XCIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KFwiTm8gYWNjZXNzIHRva2VuIHJldHVybmVkIGZyb20gdG9rZW4gZW5kcG9pbnRcIik7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9sb2FkVXNlcigpLnRoZW4odXNlciA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodXNlcikge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBpZFRva2VuVmFsaWRhdGlvbiA9IFByb21pc2UucmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuaWRfdG9rZW4pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWRUb2tlblZhbGlkYXRpb24gPSB0aGlzLl92YWxpZGF0ZUlkVG9rZW5Gcm9tVG9rZW5SZWZyZXNoVG9rZW4odXNlci5wcm9maWxlLCByZXN1bHQuaWRfdG9rZW4pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlkVG9rZW5WYWxpZGF0aW9uLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlci5fdXNlUmVmcmVzaFRva2VuOiByZWZyZXNoIHRva2VuIHJlc3BvbnNlIHN1Y2Nlc3NcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIuaWRfdG9rZW4gPSByZXN1bHQuaWRfdG9rZW47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIuYWNjZXNzX3Rva2VuID0gcmVzdWx0LmFjY2Vzc190b2tlbjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlci5yZWZyZXNoX3Rva2VuID0gcmVzdWx0LnJlZnJlc2hfdG9rZW4gfHwgdXNlci5yZWZyZXNoX3Rva2VuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VyLmV4cGlyZXNfaW4gPSByZXN1bHQuZXhwaXJlc19pbjtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnN0b3JlVXNlcih1c2VyKS50aGVuKCgpPT57XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9ldmVudHMubG9hZCh1c2VyKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1c2VyO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBfdmFsaWRhdGVJZFRva2VuRnJvbVRva2VuUmVmcmVzaFRva2VuKHByb2ZpbGUsIGlkX3Rva2VuKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX21ldGFkYXRhU2VydmljZS5nZXRJc3N1ZXIoKS50aGVuKGlzc3VlciA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9qb3NlVXRpbC52YWxpZGF0ZUp3dEF0dHJpYnV0ZXMoaWRfdG9rZW4sIGlzc3VlciwgdGhpcy5fc2V0dGluZ3MuY2xpZW50X2lkLCB0aGlzLl9zZXR0aW5ncy5jbG9ja1NrZXcpLnRoZW4ocGF5bG9hZCA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXBheWxvYWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJVc2VyTWFuYWdlci5fdmFsaWRhdGVJZFRva2VuRnJvbVRva2VuUmVmcmVzaFRva2VuOiBGYWlsZWQgdG8gdmFsaWRhdGUgaWRfdG9rZW5cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIkZhaWxlZCB0byB2YWxpZGF0ZSBpZF90b2tlblwiKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAocGF5bG9hZC5zdWIgIT09IHByb2ZpbGUuc3ViKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiVXNlck1hbmFnZXIuX3ZhbGlkYXRlSWRUb2tlbkZyb21Ub2tlblJlZnJlc2hUb2tlbjogc3ViIGluIGlkX3Rva2VuIGRvZXMgbm90IG1hdGNoIGN1cnJlbnQgc3ViXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJzdWIgaW4gaWRfdG9rZW4gZG9lcyBub3QgbWF0Y2ggY3VycmVudCBzdWJcIikpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHBheWxvYWQuYXV0aF90aW1lICYmIHBheWxvYWQuYXV0aF90aW1lICE9PSBwcm9maWxlLmF1dGhfdGltZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIlVzZXJNYW5hZ2VyLl92YWxpZGF0ZUlkVG9rZW5Gcm9tVG9rZW5SZWZyZXNoVG9rZW46IGF1dGhfdGltZSBpbiBpZF90b2tlbiBkb2VzIG5vdCBtYXRjaCBvcmlnaW5hbCBhdXRoX3RpbWVcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcImF1dGhfdGltZSBpbiBpZF90b2tlbiBkb2VzIG5vdCBtYXRjaCBvcmlnaW5hbCBhdXRoX3RpbWVcIikpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHBheWxvYWQuYXpwICYmIHBheWxvYWQuYXpwICE9PSBwcm9maWxlLmF6cCkge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIlVzZXJNYW5hZ2VyLl92YWxpZGF0ZUlkVG9rZW5Gcm9tVG9rZW5SZWZyZXNoVG9rZW46IGF6cCBpbiBpZF90b2tlbiBkb2VzIG5vdCBtYXRjaCBvcmlnaW5hbCBhenBcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcImF6cCBpbiBpZF90b2tlbiBkb2VzIG5vdCBtYXRjaCBvcmlnaW5hbCBhenBcIikpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKCFwYXlsb2FkLmF6cCAmJiBwcm9maWxlLmF6cCkge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIlVzZXJNYW5hZ2VyLl92YWxpZGF0ZUlkVG9rZW5Gcm9tVG9rZW5SZWZyZXNoVG9rZW46IGF6cCBub3QgaW4gaWRfdG9rZW4sIGJ1dCBwcmVzZW50IGluIG9yaWdpbmFsIGlkX3Rva2VuXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJhenAgbm90IGluIGlkX3Rva2VuLCBidXQgcHJlc2VudCBpbiBvcmlnaW5hbCBpZF90b2tlblwiKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICBfc2lnbmluU2lsZW50SWZyYW1lKGFyZ3MgPSB7fSkge1xyXG4gICAgICAgIGxldCB1cmwgPSBhcmdzLnJlZGlyZWN0X3VyaSB8fCB0aGlzLnNldHRpbmdzLnNpbGVudF9yZWRpcmVjdF91cmkgfHwgdGhpcy5zZXR0aW5ncy5yZWRpcmVjdF91cmk7XHJcbiAgICAgICAgaWYgKCF1cmwpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiVXNlck1hbmFnZXIuc2lnbmluU2lsZW50OiBObyBzaWxlbnRfcmVkaXJlY3RfdXJpIGNvbmZpZ3VyZWRcIik7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJObyBzaWxlbnRfcmVkaXJlY3RfdXJpIGNvbmZpZ3VyZWRcIikpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYXJncy5yZWRpcmVjdF91cmkgPSB1cmw7XHJcbiAgICAgICAgYXJncy5wcm9tcHQgPSBhcmdzLnByb21wdCB8fCBcIm5vbmVcIjtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NpZ25pbihhcmdzLCB0aGlzLl9pZnJhbWVOYXZpZ2F0b3IsIHtcclxuICAgICAgICAgICAgc3RhcnRVcmw6IHVybCxcclxuICAgICAgICAgICAgc2lsZW50UmVxdWVzdFRpbWVvdXQ6IGFyZ3Muc2lsZW50UmVxdWVzdFRpbWVvdXQgfHwgdGhpcy5zZXR0aW5ncy5zaWxlbnRSZXF1ZXN0VGltZW91dFxyXG4gICAgICAgIH0pLnRoZW4odXNlciA9PiB7XHJcbiAgICAgICAgICAgIGlmICh1c2VyKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodXNlci5wcm9maWxlICYmIHVzZXIucHJvZmlsZS5zdWIpIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuaW5mbyhcIlVzZXJNYW5hZ2VyLnNpZ25pblNpbGVudDogc3VjY2Vzc2Z1bCwgc2lnbmVkIGluIHN1YjogXCIsIHVzZXIucHJvZmlsZS5zdWIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmluZm8oXCJVc2VyTWFuYWdlci5zaWduaW5TaWxlbnQ6IG5vIHN1YlwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHVzZXI7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2lnbmluU2lsZW50Q2FsbGJhY2sodXJsKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NpZ25pbkNhbGxiYWNrKHVybCwgdGhpcy5faWZyYW1lTmF2aWdhdG9yKS50aGVuKHVzZXIgPT4ge1xyXG4gICAgICAgICAgICBpZiAodXNlcikge1xyXG4gICAgICAgICAgICAgICAgaWYgKHVzZXIucHJvZmlsZSAmJiB1c2VyLnByb2ZpbGUuc3ViKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmluZm8oXCJVc2VyTWFuYWdlci5zaWduaW5TaWxlbnRDYWxsYmFjazogc3VjY2Vzc2Z1bCwgc2lnbmVkIGluIHN1YjogXCIsIHVzZXIucHJvZmlsZS5zdWIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmluZm8oXCJVc2VyTWFuYWdlci5zaWduaW5TaWxlbnRDYWxsYmFjazogbm8gc3ViXCIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdXNlcjtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBzaWduaW5DYWxsYmFjayh1cmwpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5yZWFkU2lnbmluUmVzcG9uc2VTdGF0ZSh1cmwpLnRoZW4oKHtzdGF0ZSwgcmVzcG9uc2V9KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChzdGF0ZS5yZXF1ZXN0X3R5cGUgPT09IFwic2k6clwiKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zaWduaW5SZWRpcmVjdENhbGxiYWNrKHVybCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHN0YXRlLnJlcXVlc3RfdHlwZSA9PT0gXCJzaTpwXCIpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNpZ25pblBvcHVwQ2FsbGJhY2sodXJsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoc3RhdGUucmVxdWVzdF90eXBlID09PSBcInNpOnNcIikge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2lnbmluU2lsZW50Q2FsbGJhY2sodXJsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiaW52YWxpZCByZXNwb25zZV90eXBlIGluIHN0YXRlXCIpKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBzaWdub3V0Q2FsbGJhY2sodXJsLCBrZWVwT3Blbikge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJlYWRTaWdub3V0UmVzcG9uc2VTdGF0ZSh1cmwpLnRoZW4oKHtzdGF0ZSwgcmVzcG9uc2V9KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChzdGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHN0YXRlLnJlcXVlc3RfdHlwZSA9PT0gXCJzbzpyXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zaWdub3V0UmVkaXJlY3RDYWxsYmFjayh1cmwpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHN0YXRlLnJlcXVlc3RfdHlwZSA9PT0gXCJzbzpwXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zaWdub3V0UG9wdXBDYWxsYmFjayh1cmwsIGtlZXBPcGVuKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJpbnZhbGlkIHJlc3BvbnNlX3R5cGUgaW4gc3RhdGVcIikpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBxdWVyeVNlc3Npb25TdGF0dXMoYXJncyA9IHt9KSB7XHJcbiAgICAgICAgYXJncyA9IE9iamVjdC5hc3NpZ24oe30sIGFyZ3MpO1xyXG5cclxuICAgICAgICBhcmdzLnJlcXVlc3RfdHlwZSA9IFwic2k6c1wiOyAvLyB0aGlzIGFjdHMgbGlrZSBhIHNpZ25pbiBzaWxlbnRcclxuICAgICAgICBsZXQgdXJsID0gYXJncy5yZWRpcmVjdF91cmkgfHwgdGhpcy5zZXR0aW5ncy5zaWxlbnRfcmVkaXJlY3RfdXJpIHx8IHRoaXMuc2V0dGluZ3MucmVkaXJlY3RfdXJpO1xyXG4gICAgICAgIGlmICghdXJsKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlVzZXJNYW5hZ2VyLnF1ZXJ5U2Vzc2lvblN0YXR1czogTm8gc2lsZW50X3JlZGlyZWN0X3VyaSBjb25maWd1cmVkXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiTm8gc2lsZW50X3JlZGlyZWN0X3VyaSBjb25maWd1cmVkXCIpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGFyZ3MucmVkaXJlY3RfdXJpID0gdXJsO1xyXG4gICAgICAgIGFyZ3MucHJvbXB0ID0gXCJub25lXCI7XHJcbiAgICAgICAgYXJncy5yZXNwb25zZV90eXBlID0gYXJncy5yZXNwb25zZV90eXBlIHx8IHRoaXMuc2V0dGluZ3MucXVlcnlfc3RhdHVzX3Jlc3BvbnNlX3R5cGU7XHJcbiAgICAgICAgYXJncy5zY29wZSA9IGFyZ3Muc2NvcGUgfHwgXCJvcGVuaWRcIjtcclxuICAgICAgICBhcmdzLnNraXBVc2VySW5mbyA9IHRydWU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9zaWduaW5TdGFydChhcmdzLCB0aGlzLl9pZnJhbWVOYXZpZ2F0b3IsIHtcclxuICAgICAgICAgICAgc3RhcnRVcmw6IHVybCxcclxuICAgICAgICAgICAgc2lsZW50UmVxdWVzdFRpbWVvdXQ6IGFyZ3Muc2lsZW50UmVxdWVzdFRpbWVvdXQgfHwgdGhpcy5zZXR0aW5ncy5zaWxlbnRSZXF1ZXN0VGltZW91dFxyXG4gICAgICAgIH0pLnRoZW4obmF2UmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzU2lnbmluUmVzcG9uc2UobmF2UmVzcG9uc2UudXJsKS50aGVuKHNpZ25pblJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyLnF1ZXJ5U2Vzc2lvblN0YXR1czogZ290IHNpZ25pbiByZXNwb25zZVwiKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoc2lnbmluUmVzcG9uc2Uuc2Vzc2lvbl9zdGF0ZSAmJiBzaWduaW5SZXNwb25zZS5wcm9maWxlLnN1Yikge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5pbmZvKFwiVXNlck1hbmFnZXIucXVlcnlTZXNzaW9uU3RhdHVzOiBxdWVyeVNlc3Npb25TdGF0dXMgc3VjY2VzcyBmb3Igc3ViOiBcIiwgIHNpZ25pblJlc3BvbnNlLnByb2ZpbGUuc3ViKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uX3N0YXRlOiBzaWduaW5SZXNwb25zZS5zZXNzaW9uX3N0YXRlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWI6IHNpZ25pblJlc3BvbnNlLnByb2ZpbGUuc3ViLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzaWQ6IHNpZ25pblJlc3BvbnNlLnByb2ZpbGUuc2lkXHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5pbmZvKFwicXVlcnlTZXNzaW9uU3RhdHVzIHN1Y2Nlc3NmdWwsIHVzZXIgbm90IGF1dGhlbnRpY2F0ZWRcIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5jYXRjaChlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGVyci5zZXNzaW9uX3N0YXRlICYmIHRoaXMuc2V0dGluZ3MubW9uaXRvckFub255bW91c1Nlc3Npb24pIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyLm1lc3NhZ2UgPT0gXCJsb2dpbl9yZXF1aXJlZFwiIHx8IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlcnIubWVzc2FnZSA9PSBcImNvbnNlbnRfcmVxdWlyZWRcIiB8fCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyLm1lc3NhZ2UgPT0gXCJpbnRlcmFjdGlvbl9yZXF1aXJlZFwiIHx8IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlcnIubWVzc2FnZSA9PSBcImFjY291bnRfc2VsZWN0aW9uX3JlcXVpcmVkXCJcclxuICAgICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmluZm8oXCJVc2VyTWFuYWdlci5xdWVyeVNlc3Npb25TdGF0dXM6IHF1ZXJ5U2Vzc2lvblN0YXR1cyBzdWNjZXNzIGZvciBhbm9ueW1vdXMgdXNlclwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlc3Npb25fc3RhdGU6IGVyci5zZXNzaW9uX3N0YXRlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHRocm93IGVycjtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgX3NpZ25pbihhcmdzLCBuYXZpZ2F0b3IsIG5hdmlnYXRvclBhcmFtcyA9IHt9KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NpZ25pblN0YXJ0KGFyZ3MsIG5hdmlnYXRvciwgbmF2aWdhdG9yUGFyYW1zKS50aGVuKG5hdlJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NpZ25pbkVuZChuYXZSZXNwb25zZS51cmwsIGFyZ3MpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgX3NpZ25pblN0YXJ0KGFyZ3MsIG5hdmlnYXRvciwgbmF2aWdhdG9yUGFyYW1zID0ge30pIHtcclxuXHJcbiAgICAgICAgcmV0dXJuIG5hdmlnYXRvci5wcmVwYXJlKG5hdmlnYXRvclBhcmFtcykudGhlbihoYW5kbGUgPT4ge1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlci5fc2lnbmluU3RhcnQ6IGdvdCBuYXZpZ2F0b3Igd2luZG93IGhhbmRsZVwiKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZVNpZ25pblJlcXVlc3QoYXJncykudGhlbihzaWduaW5SZXF1ZXN0ID0+IHtcclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyLl9zaWduaW5TdGFydDogZ290IHNpZ25pbiByZXF1ZXN0XCIpO1xyXG5cclxuICAgICAgICAgICAgICAgIG5hdmlnYXRvclBhcmFtcy51cmwgPSBzaWduaW5SZXF1ZXN0LnVybDtcclxuICAgICAgICAgICAgICAgIG5hdmlnYXRvclBhcmFtcy5pZCA9IHNpZ25pblJlcXVlc3Quc3RhdGUuaWQ7XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZS5uYXZpZ2F0ZShuYXZpZ2F0b3JQYXJhbXMpO1xyXG4gICAgICAgICAgICB9KS5jYXRjaChlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGhhbmRsZS5jbG9zZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyLl9zaWduaW5TdGFydDogRXJyb3IgYWZ0ZXIgcHJlcGFyaW5nIG5hdmlnYXRvciwgY2xvc2luZyBuYXZpZ2F0b3Igd2luZG93XCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGhhbmRsZS5jbG9zZSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIF9zaWduaW5FbmQodXJsLCBhcmdzID0ge30pIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzU2lnbmluUmVzcG9uc2UodXJsKS50aGVuKHNpZ25pblJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXIuX3NpZ25pbkVuZDogZ290IHNpZ25pbiByZXNwb25zZVwiKTtcclxuXHJcbiAgICAgICAgICAgIGxldCB1c2VyID0gbmV3IFVzZXIoc2lnbmluUmVzcG9uc2UpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGFyZ3MuY3VycmVudF9zdWIpIHtcclxuICAgICAgICAgICAgICAgIGlmIChhcmdzLmN1cnJlbnRfc3ViICE9PSB1c2VyLnByb2ZpbGUuc3ViKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXIuX3NpZ25pbkVuZDogY3VycmVudCB1c2VyIGRvZXMgbm90IG1hdGNoIHVzZXIgcmV0dXJuZWQgZnJvbSBzaWduaW4uIHN1YiBmcm9tIHNpZ25pbjogXCIsIHVzZXIucHJvZmlsZS5zdWIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJsb2dpbl9yZXF1aXJlZFwiKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlci5fc2lnbmluRW5kOiBjdXJyZW50IHVzZXIgbWF0Y2hlcyB1c2VyIHJldHVybmVkIGZyb20gc2lnbmluXCIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zdG9yZVVzZXIodXNlcikudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlci5fc2lnbmluRW5kOiB1c2VyIHN0b3JlZFwiKTtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLl9ldmVudHMubG9hZCh1c2VyKTtcclxuXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdXNlcjtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBfc2lnbmluQ2FsbGJhY2sodXJsLCBuYXZpZ2F0b3IpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlci5fc2lnbmluQ2FsbGJhY2tcIik7XHJcbiAgICAgICAgcmV0dXJuIG5hdmlnYXRvci5jYWxsYmFjayh1cmwpO1xyXG4gICAgfVxyXG5cclxuICAgIHNpZ25vdXRSZWRpcmVjdChhcmdzID0ge30pIHtcclxuICAgICAgICBhcmdzID0gT2JqZWN0LmFzc2lnbih7fSwgYXJncyk7XHJcblxyXG4gICAgICAgIGFyZ3MucmVxdWVzdF90eXBlID0gXCJzbzpyXCI7XHJcbiAgICAgICAgbGV0IHBvc3RMb2dvdXRSZWRpcmVjdFVyaSA9IGFyZ3MucG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpIHx8IHRoaXMuc2V0dGluZ3MucG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpO1xyXG4gICAgICAgIGlmIChwb3N0TG9nb3V0UmVkaXJlY3RVcmkpe1xyXG4gICAgICAgICAgICBhcmdzLnBvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaSA9IHBvc3RMb2dvdXRSZWRpcmVjdFVyaTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IG5hdlBhcmFtcyA9IHtcclxuICAgICAgICAgICAgdXNlUmVwbGFjZVRvTmF2aWdhdGUgOiBhcmdzLnVzZVJlcGxhY2VUb05hdmlnYXRlXHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc2lnbm91dFN0YXJ0KGFyZ3MsIHRoaXMuX3JlZGlyZWN0TmF2aWdhdG9yLCBuYXZQYXJhbXMpLnRoZW4oKCk9PntcclxuICAgICAgICAgICAgTG9nLmluZm8oXCJVc2VyTWFuYWdlci5zaWdub3V0UmVkaXJlY3Q6IHN1Y2Nlc3NmdWxcIik7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBzaWdub3V0UmVkaXJlY3RDYWxsYmFjayh1cmwpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc2lnbm91dEVuZCh1cmwgfHwgdGhpcy5fcmVkaXJlY3ROYXZpZ2F0b3IudXJsKS50aGVuKHJlc3BvbnNlPT57XHJcbiAgICAgICAgICAgIExvZy5pbmZvKFwiVXNlck1hbmFnZXIuc2lnbm91dFJlZGlyZWN0Q2FsbGJhY2s6IHN1Y2Nlc3NmdWxcIik7XHJcbiAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBzaWdub3V0UG9wdXAoYXJncyA9IHt9KSB7XHJcbiAgICAgICAgYXJncyA9IE9iamVjdC5hc3NpZ24oe30sIGFyZ3MpO1xyXG5cclxuICAgICAgICBhcmdzLnJlcXVlc3RfdHlwZSA9IFwic286cFwiO1xyXG4gICAgICAgIGxldCB1cmwgPSBhcmdzLnBvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaSB8fCB0aGlzLnNldHRpbmdzLnBvcHVwX3Bvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaSB8fCB0aGlzLnNldHRpbmdzLnBvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaTtcclxuICAgICAgICBhcmdzLnBvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaSA9IHVybDtcclxuICAgICAgICBhcmdzLmRpc3BsYXkgPSBcInBvcHVwXCI7XHJcbiAgICAgICAgaWYgKGFyZ3MucG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpKXtcclxuICAgICAgICAgICAgLy8gd2UncmUgcHV0dGluZyBhIGR1bW15IGVudHJ5IGluIGhlcmUgYmVjYXVzZSB3ZVxyXG4gICAgICAgICAgICAvLyBuZWVkIGEgdW5pcXVlIGlkIGZyb20gdGhlIHN0YXRlIGZvciBub3RpZmljYXRpb25cclxuICAgICAgICAgICAgLy8gdG8gdGhlIHBhcmVudCB3aW5kb3csIHdoaWNoIGlzIG5lY2Vzc2FyeSBpZiB3ZVxyXG4gICAgICAgICAgICAvLyBwbGFuIHRvIHJldHVybiBiYWNrIHRvIHRoZSBjbGllbnQgYWZ0ZXIgc2lnbm91dFxyXG4gICAgICAgICAgICAvLyBhbmQgc28gd2UgY2FuIGNsb3NlIHRoZSBwb3B1cCBhZnRlciBzaWdub3V0XHJcbiAgICAgICAgICAgIGFyZ3Muc3RhdGUgPSBhcmdzLnN0YXRlIHx8IHt9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NpZ25vdXQoYXJncywgdGhpcy5fcG9wdXBOYXZpZ2F0b3IsIHtcclxuICAgICAgICAgICAgc3RhcnRVcmw6IHVybCxcclxuICAgICAgICAgICAgcG9wdXBXaW5kb3dGZWF0dXJlczogYXJncy5wb3B1cFdpbmRvd0ZlYXR1cmVzIHx8IHRoaXMuc2V0dGluZ3MucG9wdXBXaW5kb3dGZWF0dXJlcyxcclxuICAgICAgICAgICAgcG9wdXBXaW5kb3dUYXJnZXQ6IGFyZ3MucG9wdXBXaW5kb3dUYXJnZXQgfHwgdGhpcy5zZXR0aW5ncy5wb3B1cFdpbmRvd1RhcmdldFxyXG4gICAgICAgIH0pLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICBMb2cuaW5mbyhcIlVzZXJNYW5hZ2VyLnNpZ25vdXRQb3B1cDogc3VjY2Vzc2Z1bFwiKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIHNpZ25vdXRQb3B1cENhbGxiYWNrKHVybCwga2VlcE9wZW4pIHtcclxuICAgICAgICBpZiAodHlwZW9mKGtlZXBPcGVuKSA9PT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mKHVybCkgPT09ICdib29sZWFuJykge1xyXG4gICAgICAgICAgICBrZWVwT3BlbiA9IHVybDtcclxuICAgICAgICAgICAgdXJsID0gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBkZWxpbWl0ZXIgPSAnPyc7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BvcHVwTmF2aWdhdG9yLmNhbGxiYWNrKHVybCwga2VlcE9wZW4sIGRlbGltaXRlcikudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgIExvZy5pbmZvKFwiVXNlck1hbmFnZXIuc2lnbm91dFBvcHVwQ2FsbGJhY2s6IHN1Y2Nlc3NmdWxcIik7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgX3NpZ25vdXQoYXJncywgbmF2aWdhdG9yLCBuYXZpZ2F0b3JQYXJhbXMgPSB7fSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zaWdub3V0U3RhcnQoYXJncywgbmF2aWdhdG9yLCBuYXZpZ2F0b3JQYXJhbXMpLnRoZW4obmF2UmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fc2lnbm91dEVuZChuYXZSZXNwb25zZS51cmwpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgX3NpZ25vdXRTdGFydChhcmdzID0ge30sIG5hdmlnYXRvciwgbmF2aWdhdG9yUGFyYW1zID0ge30pIHtcclxuICAgICAgICByZXR1cm4gbmF2aWdhdG9yLnByZXBhcmUobmF2aWdhdG9yUGFyYW1zKS50aGVuKGhhbmRsZSA9PiB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyLl9zaWdub3V0U3RhcnQ6IGdvdCBuYXZpZ2F0b3Igd2luZG93IGhhbmRsZVwiKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9sb2FkVXNlcigpLnRoZW4odXNlciA9PiB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlci5fc2lnbm91dFN0YXJ0OiBsb2FkZWQgY3VycmVudCB1c2VyIGZyb20gc3RvcmFnZVwiKTtcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgcmV2b2tlUHJvbWlzZSA9IHRoaXMuX3NldHRpbmdzLnJldm9rZUFjY2Vzc1Rva2VuT25TaWdub3V0ID8gdGhpcy5fcmV2b2tlSW50ZXJuYWwodXNlcikgOiBQcm9taXNlLnJlc29sdmUoKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXZva2VQcm9taXNlLnRoZW4oKCkgPT4ge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB2YXIgaWRfdG9rZW4gPSBhcmdzLmlkX3Rva2VuX2hpbnQgfHwgdXNlciAmJiB1c2VyLmlkX3Rva2VuO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpZF90b2tlbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlci5fc2lnbm91dFN0YXJ0OiBTZXR0aW5nIGlkX3Rva2VuIGludG8gc2lnbm91dCByZXF1ZXN0XCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzLmlkX3Rva2VuX2hpbnQgPSBpZF90b2tlbjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnJlbW92ZVVzZXIoKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXIuX3NpZ25vdXRTdGFydDogdXNlciByZW1vdmVkLCBjcmVhdGluZyBzaWdub3V0IHJlcXVlc3RcIik7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVTaWdub3V0UmVxdWVzdChhcmdzKS50aGVuKHNpZ25vdXRSZXF1ZXN0ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyLl9zaWdub3V0U3RhcnQ6IGdvdCBzaWdub3V0IHJlcXVlc3RcIik7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF2aWdhdG9yUGFyYW1zLnVybCA9IHNpZ25vdXRSZXF1ZXN0LnVybDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzaWdub3V0UmVxdWVzdC5zdGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdmlnYXRvclBhcmFtcy5pZCA9IHNpZ25vdXRSZXF1ZXN0LnN0YXRlLmlkO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZS5uYXZpZ2F0ZShuYXZpZ2F0b3JQYXJhbXMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KS5jYXRjaChlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGhhbmRsZS5jbG9zZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyLl9zaWdub3V0U3RhcnQ6IEVycm9yIGFmdGVyIHByZXBhcmluZyBuYXZpZ2F0b3IsIGNsb3NpbmcgbmF2aWdhdG9yIHdpbmRvd1wiKTtcclxuICAgICAgICAgICAgICAgICAgICBoYW5kbGUuY2xvc2UoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRocm93IGVycjtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBfc2lnbm91dEVuZCh1cmwpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzU2lnbm91dFJlc3BvbnNlKHVybCkudGhlbihzaWdub3V0UmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlci5fc2lnbm91dEVuZDogZ290IHNpZ25vdXQgcmVzcG9uc2VcIik7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gc2lnbm91dFJlc3BvbnNlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldm9rZUFjY2Vzc1Rva2VuKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9sb2FkVXNlcigpLnRoZW4odXNlciA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZXZva2VJbnRlcm5hbCh1c2VyLCB0cnVlKS50aGVuKHN1Y2Nlc3MgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlci5yZXZva2VBY2Nlc3NUb2tlbjogcmVtb3ZpbmcgdG9rZW4gcHJvcGVydGllcyBmcm9tIHVzZXIgYW5kIHJlLXN0b3JpbmdcIik7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHVzZXIuYWNjZXNzX3Rva2VuID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICB1c2VyLnJlZnJlc2hfdG9rZW4gPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIHVzZXIuZXhwaXJlc19hdCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgdXNlci50b2tlbl90eXBlID0gbnVsbDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3RvcmVVc2VyKHVzZXIpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlci5yZXZva2VBY2Nlc3NUb2tlbjogdXNlciBzdG9yZWRcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2V2ZW50cy5sb2FkKHVzZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KS50aGVuKCgpPT57XHJcbiAgICAgICAgICAgIExvZy5pbmZvKFwiVXNlck1hbmFnZXIucmV2b2tlQWNjZXNzVG9rZW46IGFjY2VzcyB0b2tlbiByZXZva2VkIHN1Y2Nlc3NmdWxseVwiKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBfcmV2b2tlSW50ZXJuYWwodXNlciwgcmVxdWlyZWQpIHtcclxuICAgICAgICBpZiAodXNlcikge1xyXG4gICAgICAgICAgICB2YXIgYWNjZXNzX3Rva2VuID0gdXNlci5hY2Nlc3NfdG9rZW47XHJcbiAgICAgICAgICAgIHZhciByZWZyZXNoX3Rva2VuID0gdXNlci5yZWZyZXNoX3Rva2VuO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Jldm9rZUFjY2Vzc1Rva2VuSW50ZXJuYWwoYWNjZXNzX3Rva2VuLCByZXF1aXJlZClcclxuICAgICAgICAgICAgICAgIC50aGVuKGF0U3VjY2VzcyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Jldm9rZVJlZnJlc2hUb2tlbkludGVybmFsKHJlZnJlc2hfdG9rZW4sIHJlcXVpcmVkKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAudGhlbihydFN1Y2Nlc3MgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFhdFN1Y2Nlc3MgJiYgIXJ0U3VjY2Vzcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyLnJldm9rZUFjY2Vzc1Rva2VuOiBubyBuZWVkIHRvIHJldm9rZSBkdWUgdG8gbm8gdG9rZW4ocyksIG9yIEpXVCBmb3JtYXRcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhdFN1Y2Nlc3MgfHwgcnRTdWNjZXNzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7XHJcbiAgICB9XHJcblxyXG4gICAgX3Jldm9rZUFjY2Vzc1Rva2VuSW50ZXJuYWwoYWNjZXNzX3Rva2VuLCByZXF1aXJlZCkge1xyXG4gICAgICAgIC8vIGNoZWNrIGZvciBKV1QgdnMuIHJlZmVyZW5jZSB0b2tlblxyXG4gICAgICAgIGlmICghYWNjZXNzX3Rva2VuIHx8IGFjY2Vzc190b2tlbi5pbmRleE9mKCcuJykgPj0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl90b2tlblJldm9jYXRpb25DbGllbnQucmV2b2tlKGFjY2Vzc190b2tlbiwgcmVxdWlyZWQpLnRoZW4oKCkgPT4gdHJ1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgX3Jldm9rZVJlZnJlc2hUb2tlbkludGVybmFsKHJlZnJlc2hfdG9rZW4sIHJlcXVpcmVkKSB7XHJcbiAgICAgICAgaWYgKCFyZWZyZXNoX3Rva2VuKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Rva2VuUmV2b2NhdGlvbkNsaWVudC5yZXZva2UocmVmcmVzaF90b2tlbiwgcmVxdWlyZWQsIFwicmVmcmVzaF90b2tlblwiKS50aGVuKCgpID0+IHRydWUpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXJ0U2lsZW50UmVuZXcoKSB7XHJcbiAgICAgICAgdGhpcy5fc2lsZW50UmVuZXdTZXJ2aWNlLnN0YXJ0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RvcFNpbGVudFJlbmV3KCkge1xyXG4gICAgICAgIHRoaXMuX3NpbGVudFJlbmV3U2VydmljZS5zdG9wKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IF91c2VyU3RvcmVLZXkoKSB7XHJcbiAgICAgICAgcmV0dXJuIGB1c2VyOiR7dGhpcy5zZXR0aW5ncy5hdXRob3JpdHl9OiR7dGhpcy5zZXR0aW5ncy5jbGllbnRfaWR9YDtcclxuICAgIH1cclxuXHJcbiAgICBfbG9hZFVzZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3VzZXJTdG9yZS5nZXQodGhpcy5fdXNlclN0b3JlS2V5KS50aGVuKHN0b3JhZ2VTdHJpbmcgPT4ge1xyXG4gICAgICAgICAgICBpZiAoc3RvcmFnZVN0cmluZykge1xyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXIuX2xvYWRVc2VyOiB1c2VyIHN0b3JhZ2VTdHJpbmcgbG9hZGVkXCIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFVzZXIuZnJvbVN0b3JhZ2VTdHJpbmcoc3RvcmFnZVN0cmluZyk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyLl9sb2FkVXNlcjogbm8gdXNlciBzdG9yYWdlU3RyaW5nXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBzdG9yZVVzZXIodXNlcikge1xyXG4gICAgICAgIGlmICh1c2VyKSB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyLnN0b3JlVXNlcjogc3RvcmluZyB1c2VyXCIpO1xyXG5cclxuICAgICAgICAgICAgdmFyIHN0b3JhZ2VTdHJpbmcgPSB1c2VyLnRvU3RvcmFnZVN0cmluZygpO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdXNlclN0b3JlLnNldCh0aGlzLl91c2VyU3RvcmVLZXksIHN0b3JhZ2VTdHJpbmcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwic3RvcmVVc2VyLnN0b3JlVXNlcjogcmVtb3ZpbmcgdXNlclwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3VzZXJTdG9yZS5yZW1vdmUodGhpcy5fdXNlclN0b3JlS2V5KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG5cclxuaW1wb3J0IHsgTG9nIH0gZnJvbSAnLi9Mb2cuanMnO1xyXG5pbXBvcnQgeyBBY2Nlc3NUb2tlbkV2ZW50cyB9IGZyb20gJy4vQWNjZXNzVG9rZW5FdmVudHMuanMnO1xyXG5pbXBvcnQgeyBFdmVudCB9IGZyb20gJy4vRXZlbnQuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFVzZXJNYW5hZ2VyRXZlbnRzIGV4dGVuZHMgQWNjZXNzVG9rZW5FdmVudHMge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHNldHRpbmdzKSB7XHJcbiAgICAgICAgc3VwZXIoc2V0dGluZ3MpO1xyXG4gICAgICAgIHRoaXMuX3VzZXJMb2FkZWQgPSBuZXcgRXZlbnQoXCJVc2VyIGxvYWRlZFwiKTtcclxuICAgICAgICB0aGlzLl91c2VyVW5sb2FkZWQgPSBuZXcgRXZlbnQoXCJVc2VyIHVubG9hZGVkXCIpO1xyXG4gICAgICAgIHRoaXMuX3NpbGVudFJlbmV3RXJyb3IgPSBuZXcgRXZlbnQoXCJTaWxlbnQgcmVuZXcgZXJyb3JcIik7XHJcbiAgICAgICAgdGhpcy5fdXNlclNpZ25lZEluID0gbmV3IEV2ZW50KFwiVXNlciBzaWduZWQgaW5cIik7XHJcbiAgICAgICAgdGhpcy5fdXNlclNpZ25lZE91dCA9IG5ldyBFdmVudChcIlVzZXIgc2lnbmVkIG91dFwiKTtcclxuICAgICAgICB0aGlzLl91c2VyU2Vzc2lvbkNoYW5nZWQgPSBuZXcgRXZlbnQoXCJVc2VyIHNlc3Npb24gY2hhbmdlZFwiKTtcclxuICAgIH1cclxuXHJcbiAgICBsb2FkKHVzZXIsIHJhaXNlRXZlbnQ9dHJ1ZSkge1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyRXZlbnRzLmxvYWRcIik7XHJcbiAgICAgICAgc3VwZXIubG9hZCh1c2VyKTtcclxuICAgICAgICBpZiAocmFpc2VFdmVudCkge1xyXG4gICAgICAgICAgICB0aGlzLl91c2VyTG9hZGVkLnJhaXNlKHVzZXIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHVubG9hZCgpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlckV2ZW50cy51bmxvYWRcIik7XHJcbiAgICAgICAgc3VwZXIudW5sb2FkKCk7XHJcbiAgICAgICAgdGhpcy5fdXNlclVubG9hZGVkLnJhaXNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkVXNlckxvYWRlZChjYikge1xyXG4gICAgICAgIHRoaXMuX3VzZXJMb2FkZWQuYWRkSGFuZGxlcihjYik7XHJcbiAgICB9XHJcbiAgICByZW1vdmVVc2VyTG9hZGVkKGNiKSB7XHJcbiAgICAgICAgdGhpcy5fdXNlckxvYWRlZC5yZW1vdmVIYW5kbGVyKGNiKTtcclxuICAgIH1cclxuXHJcbiAgICBhZGRVc2VyVW5sb2FkZWQoY2IpIHtcclxuICAgICAgICB0aGlzLl91c2VyVW5sb2FkZWQuYWRkSGFuZGxlcihjYik7XHJcbiAgICB9XHJcbiAgICByZW1vdmVVc2VyVW5sb2FkZWQoY2IpIHtcclxuICAgICAgICB0aGlzLl91c2VyVW5sb2FkZWQucmVtb3ZlSGFuZGxlcihjYik7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkU2lsZW50UmVuZXdFcnJvcihjYikge1xyXG4gICAgICAgIHRoaXMuX3NpbGVudFJlbmV3RXJyb3IuYWRkSGFuZGxlcihjYik7XHJcbiAgICB9XHJcbiAgICByZW1vdmVTaWxlbnRSZW5ld0Vycm9yKGNiKSB7XHJcbiAgICAgICAgdGhpcy5fc2lsZW50UmVuZXdFcnJvci5yZW1vdmVIYW5kbGVyKGNiKTtcclxuICAgIH1cclxuICAgIF9yYWlzZVNpbGVudFJlbmV3RXJyb3IoZSkge1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyRXZlbnRzLl9yYWlzZVNpbGVudFJlbmV3RXJyb3JcIiwgZS5tZXNzYWdlKTtcclxuICAgICAgICB0aGlzLl9zaWxlbnRSZW5ld0Vycm9yLnJhaXNlKGUpO1xyXG4gICAgfVxyXG5cclxuICAgIGFkZFVzZXJTaWduZWRJbihjYikge1xyXG4gICAgICAgIHRoaXMuX3VzZXJTaWduZWRJbi5hZGRIYW5kbGVyKGNiKTtcclxuICAgIH1cclxuICAgIHJlbW92ZVVzZXJTaWduZWRJbihjYikge1xyXG4gICAgICAgIHRoaXMuX3VzZXJTaWduZWRJbi5yZW1vdmVIYW5kbGVyKGNiKTtcclxuICAgIH1cclxuICAgIF9yYWlzZVVzZXJTaWduZWRJbigpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlckV2ZW50cy5fcmFpc2VVc2VyU2lnbmVkSW5cIik7XHJcbiAgICAgICAgdGhpcy5fdXNlclNpZ25lZEluLnJhaXNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkVXNlclNpZ25lZE91dChjYikge1xyXG4gICAgICAgIHRoaXMuX3VzZXJTaWduZWRPdXQuYWRkSGFuZGxlcihjYik7XHJcbiAgICB9XHJcbiAgICByZW1vdmVVc2VyU2lnbmVkT3V0KGNiKSB7XHJcbiAgICAgICAgdGhpcy5fdXNlclNpZ25lZE91dC5yZW1vdmVIYW5kbGVyKGNiKTtcclxuICAgIH1cclxuICAgIF9yYWlzZVVzZXJTaWduZWRPdXQoKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXJFdmVudHMuX3JhaXNlVXNlclNpZ25lZE91dFwiKTtcclxuICAgICAgICB0aGlzLl91c2VyU2lnbmVkT3V0LnJhaXNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkVXNlclNlc3Npb25DaGFuZ2VkKGNiKSB7XHJcbiAgICAgICAgdGhpcy5fdXNlclNlc3Npb25DaGFuZ2VkLmFkZEhhbmRsZXIoY2IpO1xyXG4gICAgfVxyXG4gICAgcmVtb3ZlVXNlclNlc3Npb25DaGFuZ2VkKGNiKSB7XHJcbiAgICAgICAgdGhpcy5fdXNlclNlc3Npb25DaGFuZ2VkLnJlbW92ZUhhbmRsZXIoY2IpO1xyXG4gICAgfVxyXG4gICAgX3JhaXNlVXNlclNlc3Npb25DaGFuZ2VkKCkge1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyRXZlbnRzLl9yYWlzZVVzZXJTZXNzaW9uQ2hhbmdlZFwiKTtcclxuICAgICAgICB0aGlzLl91c2VyU2Vzc2lvbkNoYW5nZWQucmFpc2UoKTtcclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcbmltcG9ydCB7IE9pZGNDbGllbnRTZXR0aW5ncyB9IGZyb20gJy4vT2lkY0NsaWVudFNldHRpbmdzLmpzJztcclxuaW1wb3J0IHsgUmVkaXJlY3ROYXZpZ2F0b3IgfSBmcm9tICcuL1JlZGlyZWN0TmF2aWdhdG9yLmpzJztcclxuaW1wb3J0IHsgUG9wdXBOYXZpZ2F0b3IgfSBmcm9tICcuL1BvcHVwTmF2aWdhdG9yLmpzJztcclxuaW1wb3J0IHsgSUZyYW1lTmF2aWdhdG9yIH0gZnJvbSAnLi9JRnJhbWVOYXZpZ2F0b3IuanMnO1xyXG5pbXBvcnQgeyBXZWJTdG9yYWdlU3RhdGVTdG9yZSB9IGZyb20gJy4vV2ViU3RvcmFnZVN0YXRlU3RvcmUuanMnO1xyXG5pbXBvcnQgeyBHbG9iYWwgfSBmcm9tICcuL0dsb2JhbC5qcyc7XHJcbmltcG9ydCB7IFNpZ25pblJlcXVlc3QgfSBmcm9tICcuL1NpZ25pblJlcXVlc3QuanMnO1xyXG5cclxuY29uc3QgRGVmYXVsdEFjY2Vzc1Rva2VuRXhwaXJpbmdOb3RpZmljYXRpb25UaW1lID0gNjA7XHJcbmNvbnN0IERlZmF1bHRDaGVja1Nlc3Npb25JbnRlcnZhbCA9IDIwMDA7XHJcblxyXG5leHBvcnQgY2xhc3MgVXNlck1hbmFnZXJTZXR0aW5ncyBleHRlbmRzIE9pZGNDbGllbnRTZXR0aW5ncyB7XHJcbiAgICBjb25zdHJ1Y3Rvcih7XHJcbiAgICAgICAgcG9wdXBfcmVkaXJlY3RfdXJpLFxyXG4gICAgICAgIHBvcHVwX3Bvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaSxcclxuICAgICAgICBwb3B1cFdpbmRvd0ZlYXR1cmVzLFxyXG4gICAgICAgIHBvcHVwV2luZG93VGFyZ2V0LFxyXG4gICAgICAgIHNpbGVudF9yZWRpcmVjdF91cmksXHJcbiAgICAgICAgc2lsZW50UmVxdWVzdFRpbWVvdXQsXHJcbiAgICAgICAgYXV0b21hdGljU2lsZW50UmVuZXcgPSBmYWxzZSxcclxuICAgICAgICB2YWxpZGF0ZVN1Yk9uU2lsZW50UmVuZXcgPSBmYWxzZSxcclxuICAgICAgICBpbmNsdWRlSWRUb2tlbkluU2lsZW50UmVuZXcgPSB0cnVlLFxyXG4gICAgICAgIG1vbml0b3JTZXNzaW9uID0gdHJ1ZSxcclxuICAgICAgICBtb25pdG9yQW5vbnltb3VzU2Vzc2lvbiA9IGZhbHNlLFxyXG4gICAgICAgIGNoZWNrU2Vzc2lvbkludGVydmFsID0gRGVmYXVsdENoZWNrU2Vzc2lvbkludGVydmFsLFxyXG4gICAgICAgIHN0b3BDaGVja1Nlc3Npb25PbkVycm9yID0gdHJ1ZSxcclxuICAgICAgICBxdWVyeV9zdGF0dXNfcmVzcG9uc2VfdHlwZSxcclxuICAgICAgICByZXZva2VBY2Nlc3NUb2tlbk9uU2lnbm91dCA9IGZhbHNlLFxyXG4gICAgICAgIGFjY2Vzc1Rva2VuRXhwaXJpbmdOb3RpZmljYXRpb25UaW1lID0gRGVmYXVsdEFjY2Vzc1Rva2VuRXhwaXJpbmdOb3RpZmljYXRpb25UaW1lLFxyXG4gICAgICAgIHJlZGlyZWN0TmF2aWdhdG9yID0gbmV3IFJlZGlyZWN0TmF2aWdhdG9yKCksXHJcbiAgICAgICAgcG9wdXBOYXZpZ2F0b3IgPSBuZXcgUG9wdXBOYXZpZ2F0b3IoKSxcclxuICAgICAgICBpZnJhbWVOYXZpZ2F0b3IgPSBuZXcgSUZyYW1lTmF2aWdhdG9yKCksXHJcbiAgICAgICAgdXNlclN0b3JlID0gbmV3IFdlYlN0b3JhZ2VTdGF0ZVN0b3JlKHsgc3RvcmU6IEdsb2JhbC5zZXNzaW9uU3RvcmFnZSB9KVxyXG4gICAgfSA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIoYXJndW1lbnRzWzBdKTtcclxuXHJcbiAgICAgICAgdGhpcy5fcG9wdXBfcmVkaXJlY3RfdXJpID0gcG9wdXBfcmVkaXJlY3RfdXJpO1xyXG4gICAgICAgIHRoaXMuX3BvcHVwX3Bvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaSA9IHBvcHVwX3Bvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaTtcclxuICAgICAgICB0aGlzLl9wb3B1cFdpbmRvd0ZlYXR1cmVzID0gcG9wdXBXaW5kb3dGZWF0dXJlcztcclxuICAgICAgICB0aGlzLl9wb3B1cFdpbmRvd1RhcmdldCA9IHBvcHVwV2luZG93VGFyZ2V0O1xyXG5cclxuICAgICAgICB0aGlzLl9zaWxlbnRfcmVkaXJlY3RfdXJpID0gc2lsZW50X3JlZGlyZWN0X3VyaTtcclxuICAgICAgICB0aGlzLl9zaWxlbnRSZXF1ZXN0VGltZW91dCA9IHNpbGVudFJlcXVlc3RUaW1lb3V0O1xyXG4gICAgICAgIHRoaXMuX2F1dG9tYXRpY1NpbGVudFJlbmV3ID0gYXV0b21hdGljU2lsZW50UmVuZXc7XHJcbiAgICAgICAgdGhpcy5fdmFsaWRhdGVTdWJPblNpbGVudFJlbmV3ID0gdmFsaWRhdGVTdWJPblNpbGVudFJlbmV3O1xyXG4gICAgICAgIHRoaXMuX2luY2x1ZGVJZFRva2VuSW5TaWxlbnRSZW5ldyA9IGluY2x1ZGVJZFRva2VuSW5TaWxlbnRSZW5ldztcclxuICAgICAgICB0aGlzLl9hY2Nlc3NUb2tlbkV4cGlyaW5nTm90aWZpY2F0aW9uVGltZSA9IGFjY2Vzc1Rva2VuRXhwaXJpbmdOb3RpZmljYXRpb25UaW1lO1xyXG5cclxuICAgICAgICB0aGlzLl9tb25pdG9yU2Vzc2lvbiA9IG1vbml0b3JTZXNzaW9uO1xyXG4gICAgICAgIHRoaXMuX21vbml0b3JBbm9ueW1vdXNTZXNzaW9uID0gbW9uaXRvckFub255bW91c1Nlc3Npb247XHJcbiAgICAgICAgdGhpcy5fY2hlY2tTZXNzaW9uSW50ZXJ2YWwgPSBjaGVja1Nlc3Npb25JbnRlcnZhbDtcclxuICAgICAgICB0aGlzLl9zdG9wQ2hlY2tTZXNzaW9uT25FcnJvciA9IHN0b3BDaGVja1Nlc3Npb25PbkVycm9yO1xyXG4gICAgICAgIGlmIChxdWVyeV9zdGF0dXNfcmVzcG9uc2VfdHlwZSkge1xyXG4gICAgICAgICAgICB0aGlzLl9xdWVyeV9zdGF0dXNfcmVzcG9uc2VfdHlwZSA9IHF1ZXJ5X3N0YXR1c19yZXNwb25zZV90eXBlO1xyXG4gICAgICAgIH0gXHJcbiAgICAgICAgZWxzZSBpZiAoYXJndW1lbnRzWzBdICYmIGFyZ3VtZW50c1swXS5yZXNwb25zZV90eXBlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3F1ZXJ5X3N0YXR1c19yZXNwb25zZV90eXBlID0gU2lnbmluUmVxdWVzdC5pc09pZGMoYXJndW1lbnRzWzBdLnJlc3BvbnNlX3R5cGUpID8gXCJpZF90b2tlblwiIDogXCJjb2RlXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLl9xdWVyeV9zdGF0dXNfcmVzcG9uc2VfdHlwZSA9IFwiaWRfdG9rZW5cIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fcmV2b2tlQWNjZXNzVG9rZW5PblNpZ25vdXQgPSByZXZva2VBY2Nlc3NUb2tlbk9uU2lnbm91dDtcclxuXHJcbiAgICAgICAgdGhpcy5fcmVkaXJlY3ROYXZpZ2F0b3IgPSByZWRpcmVjdE5hdmlnYXRvcjtcclxuICAgICAgICB0aGlzLl9wb3B1cE5hdmlnYXRvciA9IHBvcHVwTmF2aWdhdG9yO1xyXG4gICAgICAgIHRoaXMuX2lmcmFtZU5hdmlnYXRvciA9IGlmcmFtZU5hdmlnYXRvcjtcclxuXHJcbiAgICAgICAgdGhpcy5fdXNlclN0b3JlID0gdXNlclN0b3JlO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBwb3B1cF9yZWRpcmVjdF91cmkoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BvcHVwX3JlZGlyZWN0X3VyaTtcclxuICAgIH1cclxuICAgIGdldCBwb3B1cF9wb3N0X2xvZ291dF9yZWRpcmVjdF91cmkoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BvcHVwX3Bvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaTtcclxuICAgIH1cclxuICAgIGdldCBwb3B1cFdpbmRvd0ZlYXR1cmVzKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9wb3B1cFdpbmRvd0ZlYXR1cmVzO1xyXG4gICAgfVxyXG4gICAgZ2V0IHBvcHVwV2luZG93VGFyZ2V0KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9wb3B1cFdpbmRvd1RhcmdldDtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgc2lsZW50X3JlZGlyZWN0X3VyaSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc2lsZW50X3JlZGlyZWN0X3VyaTtcclxuICAgIH1cclxuICAgICBnZXQgc2lsZW50UmVxdWVzdFRpbWVvdXQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NpbGVudFJlcXVlc3RUaW1lb3V0O1xyXG4gICAgfVxyXG4gICAgZ2V0IGF1dG9tYXRpY1NpbGVudFJlbmV3KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9hdXRvbWF0aWNTaWxlbnRSZW5ldztcclxuICAgIH1cclxuICAgIGdldCB2YWxpZGF0ZVN1Yk9uU2lsZW50UmVuZXcoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbGlkYXRlU3ViT25TaWxlbnRSZW5ldztcclxuICAgIH1cclxuICAgIGdldCBpbmNsdWRlSWRUb2tlbkluU2lsZW50UmVuZXcoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2luY2x1ZGVJZFRva2VuSW5TaWxlbnRSZW5ldztcclxuICAgIH1cclxuICAgIGdldCBhY2Nlc3NUb2tlbkV4cGlyaW5nTm90aWZpY2F0aW9uVGltZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fYWNjZXNzVG9rZW5FeHBpcmluZ05vdGlmaWNhdGlvblRpbWU7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IG1vbml0b3JTZXNzaW9uKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9tb25pdG9yU2Vzc2lvbjtcclxuICAgIH1cclxuICAgIGdldCBtb25pdG9yQW5vbnltb3VzU2Vzc2lvbigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fbW9uaXRvckFub255bW91c1Nlc3Npb247XHJcbiAgICB9XHJcbiAgICBnZXQgY2hlY2tTZXNzaW9uSW50ZXJ2YWwoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NoZWNrU2Vzc2lvbkludGVydmFsO1xyXG4gICAgfVxyXG4gICAgZ2V0IHN0b3BDaGVja1Nlc3Npb25PbkVycm9yKCl7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0b3BDaGVja1Nlc3Npb25PbkVycm9yO1xyXG4gICAgfVxyXG4gICAgZ2V0IHF1ZXJ5X3N0YXR1c19yZXNwb25zZV90eXBlKCl7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3F1ZXJ5X3N0YXR1c19yZXNwb25zZV90eXBlO1xyXG4gICAgfVxyXG4gICAgZ2V0IHJldm9rZUFjY2Vzc1Rva2VuT25TaWdub3V0KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9yZXZva2VBY2Nlc3NUb2tlbk9uU2lnbm91dDtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgcmVkaXJlY3ROYXZpZ2F0b3IoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlZGlyZWN0TmF2aWdhdG9yO1xyXG4gICAgfVxyXG4gICAgZ2V0IHBvcHVwTmF2aWdhdG9yKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9wb3B1cE5hdmlnYXRvcjtcclxuICAgIH1cclxuICAgIGdldCBpZnJhbWVOYXZpZ2F0b3IoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lmcmFtZU5hdmlnYXRvcjtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgdXNlclN0b3JlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl91c2VyU3RvcmU7XHJcbiAgICB9XHJcbn1cclxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG5cclxuaW1wb3J0IHsgTG9nIH0gZnJvbSAnLi9Mb2cuanMnO1xyXG5pbXBvcnQgeyBHbG9iYWwgfSBmcm9tICcuL0dsb2JhbC5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgV2ViU3RvcmFnZVN0YXRlU3RvcmUge1xyXG4gICAgY29uc3RydWN0b3Ioe3ByZWZpeCA9IFwib2lkYy5cIiwgc3RvcmUgPSBHbG9iYWwubG9jYWxTdG9yYWdlfSA9IHt9KSB7XHJcbiAgICAgICAgdGhpcy5fc3RvcmUgPSBzdG9yZTtcclxuICAgICAgICB0aGlzLl9wcmVmaXggPSBwcmVmaXg7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0KGtleSwgdmFsdWUpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJXZWJTdG9yYWdlU3RhdGVTdG9yZS5zZXRcIiwga2V5KTtcclxuXHJcbiAgICAgICAga2V5ID0gdGhpcy5fcHJlZml4ICsga2V5O1xyXG5cclxuICAgICAgICB0aGlzLl9zdG9yZS5zZXRJdGVtKGtleSwgdmFsdWUpO1xyXG5cclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0KGtleSkge1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIldlYlN0b3JhZ2VTdGF0ZVN0b3JlLmdldFwiLCBrZXkpO1xyXG5cclxuICAgICAgICBrZXkgPSB0aGlzLl9wcmVmaXggKyBrZXk7XHJcblxyXG4gICAgICAgIGxldCBpdGVtID0gdGhpcy5fc3RvcmUuZ2V0SXRlbShrZXkpO1xyXG5cclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGl0ZW0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbW92ZShrZXkpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJXZWJTdG9yYWdlU3RhdGVTdG9yZS5yZW1vdmVcIiwga2V5KTtcclxuXHJcbiAgICAgICAga2V5ID0gdGhpcy5fcHJlZml4ICsga2V5O1xyXG5cclxuICAgICAgICBsZXQgaXRlbSA9IHRoaXMuX3N0b3JlLmdldEl0ZW0oa2V5KTtcclxuICAgICAgICB0aGlzLl9zdG9yZS5yZW1vdmVJdGVtKGtleSk7XHJcblxyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoaXRlbSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0QWxsS2V5cygpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJXZWJTdG9yYWdlU3RhdGVTdG9yZS5nZXRBbGxLZXlzXCIpO1xyXG5cclxuICAgICAgICB2YXIga2V5cyA9IFtdO1xyXG5cclxuICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5fc3RvcmUubGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAgICAgICAgIGxldCBrZXkgPSB0aGlzLl9zdG9yZS5rZXkoaW5kZXgpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGtleS5pbmRleE9mKHRoaXMuX3ByZWZpeCkgPT09IDApIHtcclxuICAgICAgICAgICAgICAgIGtleXMucHVzaChrZXkuc3Vic3RyKHRoaXMuX3ByZWZpeC5sZW5ndGgpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShrZXlzKTtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQgeyBqd3MsIEtFWVVUSUwgYXMgS2V5VXRpbCwgWDUwOSwgY3J5cHRvLCBoZXh0b2I2NHUsIGI2NHRvaGV4IH0gZnJvbSAnLi4vLi4vanNyc2FzaWduL2Rpc3QvanNyc2FzaWduLmpzJztcclxuXHJcbmNvbnN0IEFsbG93ZWRTaWduaW5nQWxncyA9IFsnUlMyNTYnLCAnUlMzODQnLCAnUlM1MTInLCAnUFMyNTYnLCAnUFMzODQnLCAnUFM1MTInLCAnRVMyNTYnLCAnRVMzODQnLCAnRVM1MTInXTtcclxuXHJcbmV4cG9ydCB7XHJcbiAgICBqd3MsXHJcbiAgICBLZXlVdGlsLFxyXG4gICAgWDUwOSxcclxuICAgIGNyeXB0byxcclxuICAgIGhleHRvYjY0dSxcclxuICAgIGI2NHRvaGV4LFxyXG4gICAgQWxsb3dlZFNpZ25pbmdBbGdzXHJcbn07XHJcbiIsImltcG9ydCB1dWlkNCBmcm9tICd1dWlkL3Y0JztcclxuXHJcbi8qKlxyXG4gKiBHZW5lcmF0ZXMgUkZDNDEyMiB2ZXJzaW9uIDQgZ3VpZCAoKVxyXG4gKi9cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJhbmRvbSgpIHtcclxuICByZXR1cm4gdXVpZDQoKS5yZXBsYWNlKC8tL2csICcnKTtcclxufVxyXG4iLCJjb25zdCBWZXJzaW9uID0gXCIxLjEwLjAtYmV0YS4xXCI7IGV4cG9ydCB7VmVyc2lvbn07Il0sInNvdXJjZVJvb3QiOiIifQ== \ No newline at end of file diff --git a/dist/oidc-client.min.js b/dist/oidc-client.min.js index 0a3eef9f..95c765be 100644 --- a/dist/oidc-client.min.js +++ b/dist/oidc-client.min.js @@ -1,4 +1,4 @@ -var Oidc=function(t){var e={};function r(n){if(e[n])return e[n].exports;var i=e[n]={i:n,l:!1,exports:{}};return t[n].call(i.exports,i,i.exports,r),i.l=!0,i.exports}return r.m=t,r.c=e,r.d=function(t,e,n){r.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:n})},r.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},r.t=function(t,e){if(1&e&&(t=r(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var i in t)r.d(n,i,function(e){return t[e]}.bind(null,i));return n},r.n=function(t){var e=t&&t.__esModule?function e(){return t.default}:function e(){return t};return r.d(e,"a",e),e},r.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},r.p="",r(r.s=152)}([function(t,e,r){var n=r(2),i=r(19),o=r(12),s=r(13),a=r(20),u=function(t,e,r){var c,f,h,l,p=t&u.F,d=t&u.G,g=t&u.S,v=t&u.P,y=t&u.B,m=d?n:g?n[e]||(n[e]={}):(n[e]||{}).prototype,_=d?i:i[e]||(i[e]={}),S=_.prototype||(_.prototype={});for(c in d&&(r=e),r)h=((f=!p&&m&&void 0!==m[c])?m:r)[c],l=y&&f?a(h,n):v&&"function"==typeof h?a(Function.call,h):h,m&&s(m,c,h,t&u.U),_[c]!=h&&o(_,c,l),v&&S[c]!=h&&(S[c]=h)};n.core=i,u.F=1,u.G=2,u.S=4,u.P=8,u.B=16,u.W=32,u.U=64,u.R=128,t.exports=u},function(t,e,r){var n=r(5);t.exports=function(t){if(!n(t))throw TypeError(t+" is not an object!");return t}},function(t,e){var r=t.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=r)},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=function(){function t(t,e){for(var r=0;r=4){for(var e=arguments.length,r=Array(e),n=0;n=3){for(var e=arguments.length,r=Array(e),n=0;n=2){for(var e=arguments.length,r=Array(e),n=0;n=1){for(var e=arguments.length,r=Array(e),n=0;n0?i(n(t),9007199254740991):0}},function(t,e,r){t.exports=!r(4)(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},function(t,e,r){var n=r(1),i=r(103),o=r(24),s=Object.defineProperty;e.f=r(8)?Object.defineProperty:function t(e,r,a){if(n(e),r=o(r,!0),n(a),i)try{return s(e,r,a)}catch(t){}if("get"in a||"set"in a)throw TypeError("Accessors not supported!");return"value"in a&&(e[r]=a.value),e}},function(t,e,r){var n=r(25);t.exports=function(t){return Object(n(t))}},function(t,e){t.exports=function(t){if("function"!=typeof t)throw TypeError(t+" is not a function!");return t}},function(t,e,r){var n=r(9),i=r(33);t.exports=r(8)?function(t,e,r){return n.f(t,e,i(1,r))}:function(t,e,r){return t[e]=r,t}},function(t,e,r){var n=r(2),i=r(12),o=r(15),s=r(34)("src"),a=r(156),u=(""+a).split("toString");r(19).inspectSource=function(t){return a.call(t)},(t.exports=function(t,e,r,a){var c="function"==typeof r;c&&(o(r,"name")||i(r,"name",e)),t[e]!==r&&(c&&(o(r,s)||i(r,s,t[e]?""+t[e]:u.join(String(e)))),t===n?t[e]=r:a?t[e]?t[e]=r:i(t,e,r):(delete t[e],i(t,e,r)))})(Function.prototype,"toString",function t(){return"function"==typeof this&&this[s]||a.call(this)})},function(t,e,r){var n=r(0),i=r(4),o=r(25),s=/"/g,a=function(t,e,r,n){var i=String(o(t)),a="<"+e;return""!==r&&(a+=" "+r+'="'+String(n).replace(s,""")+'"'),a+">"+i+""};t.exports=function(t,e){var r={};r[t]=e(a),n(n.P+n.F*i(function(){var e=""[t]('"');return e!==e.toLowerCase()||e.split('"').length>3}),"String",r)}},function(t,e){var r={}.hasOwnProperty;t.exports=function(t,e){return r.call(t,e)}},function(t,e,r){var n=r(51),i=r(25);t.exports=function(t){return n(i(t))}},function(t,e,r){var n=r(52),i=r(33),o=r(16),s=r(24),a=r(15),u=r(103),c=Object.getOwnPropertyDescriptor;e.f=r(8)?c:function t(e,r){if(e=o(e),r=s(r,!0),u)try{return c(e,r)}catch(t){}if(a(e,r))return i(!n.f.call(e,r),e[r])}},function(t,e,r){var n=r(15),i=r(10),o=r(74)("IE_PROTO"),s=Object.prototype;t.exports=Object.getPrototypeOf||function(t){return t=i(t),n(t,o)?t[o]:"function"==typeof t.constructor&&t instanceof t.constructor?t.constructor.prototype:t instanceof Object?s:null}},function(t,e){var r=t.exports={version:"2.6.4"};"number"==typeof __e&&(__e=r)},function(t,e,r){var n=r(11);t.exports=function(t,e,r){if(n(t),void 0===e)return t;switch(r){case 1:return function(r){return t.call(e,r)};case 2:return function(r,n){return t.call(e,r,n)};case 3:return function(r,n,i){return t.call(e,r,n,i)}}return function(){return t.apply(e,arguments)}}},function(t,e){var r={}.toString;t.exports=function(t){return r.call(t).slice(8,-1)}},function(t,e){var r=Math.ceil,n=Math.floor;t.exports=function(t){return isNaN(t=+t)?0:(t>0?n:r)(t)}},function(t,e,r){"use strict";var n=r(4);t.exports=function(t,e){return!!t&&n(function(){e?t.call(null,function(){},1):t.call(null)})}},function(t,e,r){var n=r(5);t.exports=function(t,e){if(!n(t))return t;var r,i;if(e&&"function"==typeof(r=t.toString)&&!n(i=r.call(t)))return i;if("function"==typeof(r=t.valueOf)&&!n(i=r.call(t)))return i;if(!e&&"function"==typeof(r=t.toString)&&!n(i=r.call(t)))return i;throw TypeError("Can't convert object to primitive value")}},function(t,e){t.exports=function(t){if(void 0==t)throw TypeError("Can't call method on "+t);return t}},function(t,e,r){var n=r(0),i=r(19),o=r(4);t.exports=function(t,e){var r=(i.Object||{})[t]||Object[t],s={};s[t]=e(r),n(n.S+n.F*o(function(){r(1)}),"Object",s)}},function(t,e,r){var n=r(20),i=r(51),o=r(10),s=r(7),a=r(90);t.exports=function(t,e){var r=1==t,u=2==t,c=3==t,f=4==t,h=6==t,l=5==t||h,p=e||a;return function(e,a,d){for(var g,v,y=o(e),m=i(y),_=n(a,d,3),S=s(m.length),b=0,w=r?p(e,S):u?p(e,0):void 0;S>b;b++)if((l||b in m)&&(v=_(g=m[b],b,y),t))if(r)w[b]=v;else if(v)switch(t){case 3:return!0;case 5:return g;case 6:return b;case 2:w.push(g)}else if(f)return!1;return h?-1:c||f?f:w}}},function(t,e,r){"use strict";if(r(8)){var n=r(30),i=r(2),o=r(4),s=r(0),a=r(66),u=r(98),c=r(20),f=r(40),h=r(33),l=r(12),p=r(42),d=r(22),g=r(7),v=r(131),y=r(36),m=r(24),_=r(15),S=r(46),b=r(5),w=r(10),F=r(87),E=r(37),x=r(18),A=r(38).f,k=r(89),P=r(34),C=r(6),T=r(27),R=r(56),I=r(54),O=r(92),D=r(48),N=r(61),L=r(39),M=r(91),j=r(120),U=r(9),B=r(17),H=U.f,V=B.f,K=i.RangeError,q=i.TypeError,W=i.Uint8Array,J=Array.prototype,z=u.ArrayBuffer,Y=u.DataView,G=T(0),X=T(2),$=T(3),Q=T(4),Z=T(5),tt=T(6),et=R(!0),rt=R(!1),nt=O.values,it=O.keys,ot=O.entries,st=J.lastIndexOf,at=J.reduce,ut=J.reduceRight,ct=J.join,ft=J.sort,ht=J.slice,lt=J.toString,pt=J.toLocaleString,dt=C("iterator"),gt=C("toStringTag"),vt=P("typed_constructor"),yt=P("def_constructor"),mt=a.CONSTR,_t=a.TYPED,St=a.VIEW,bt=T(1,function(t,e){return At(I(t,t[yt]),e)}),wt=o(function(){return 1===new W(new Uint16Array([1]).buffer)[0]}),Ft=!!W&&!!W.prototype.set&&o(function(){new W(1).set({})}),Et=function(t,e){var r=d(t);if(r<0||r%e)throw K("Wrong offset!");return r},xt=function(t){if(b(t)&&_t in t)return t;throw q(t+" is not a typed array!")},At=function(t,e){if(!(b(t)&&vt in t))throw q("It is not a typed array constructor!");return new t(e)},kt=function(t,e){return Pt(I(t,t[yt]),e)},Pt=function(t,e){for(var r=0,n=e.length,i=At(t,n);n>r;)i[r]=e[r++];return i},Ct=function(t,e,r){H(t,e,{get:function(){return this._d[r]}})},Tt=function t(e){var r,n,i,o,s,a,u=w(e),f=arguments.length,h=f>1?arguments[1]:void 0,l=void 0!==h,p=k(u);if(void 0!=p&&!F(p)){for(a=p.call(u),i=[],r=0;!(s=a.next()).done;r++)i.push(s.value);u=i}for(l&&f>2&&(h=c(h,arguments[2],2)),r=0,n=g(u.length),o=At(this,n);n>r;r++)o[r]=l?h(u[r],r):u[r];return o},Rt=function t(){for(var e=0,r=arguments.length,n=At(this,r);r>e;)n[e]=arguments[e++];return n},It=!!W&&o(function(){pt.call(new W(1))}),Ot=function t(){return pt.apply(It?ht.call(xt(this)):xt(this),arguments)},Dt={copyWithin:function t(e,r){return j.call(xt(this),e,r,arguments.length>2?arguments[2]:void 0)},every:function t(e){return Q(xt(this),e,arguments.length>1?arguments[1]:void 0)},fill:function t(e){return M.apply(xt(this),arguments)},filter:function t(e){return kt(this,X(xt(this),e,arguments.length>1?arguments[1]:void 0))},find:function t(e){return Z(xt(this),e,arguments.length>1?arguments[1]:void 0)},findIndex:function t(e){return tt(xt(this),e,arguments.length>1?arguments[1]:void 0)},forEach:function t(e){G(xt(this),e,arguments.length>1?arguments[1]:void 0)},indexOf:function t(e){return rt(xt(this),e,arguments.length>1?arguments[1]:void 0)},includes:function t(e){return et(xt(this),e,arguments.length>1?arguments[1]:void 0)},join:function t(e){return ct.apply(xt(this),arguments)},lastIndexOf:function t(e){return st.apply(xt(this),arguments)},map:function t(e){return bt(xt(this),e,arguments.length>1?arguments[1]:void 0)},reduce:function t(e){return at.apply(xt(this),arguments)},reduceRight:function t(e){return ut.apply(xt(this),arguments)},reverse:function t(){for(var e,r=xt(this).length,n=Math.floor(r/2),i=0;i1?arguments[1]:void 0)},sort:function t(e){return ft.call(xt(this),e)},subarray:function t(e,r){var n=xt(this),i=n.length,o=y(e,i);return new(I(n,n[yt]))(n.buffer,n.byteOffset+o*n.BYTES_PER_ELEMENT,g((void 0===r?i:y(r,i))-o))}},Nt=function t(e,r){return kt(this,ht.call(xt(this),e,r))},Lt=function t(e){xt(this);var r=Et(arguments[1],1),n=this.length,i=w(e),o=g(i.length),s=0;if(o+r>n)throw K("Wrong length!");for(;s255?255:255&n),i.v[p](r*e+i.o,n,wt)}(this,r,t)},enumerable:!0})};_?(d=r(function(t,r,n,i){f(t,d,c,"_d");var o,s,a,u,h=0,p=0;if(b(r)){if(!(r instanceof z||"ArrayBuffer"==(u=S(r))||"SharedArrayBuffer"==u))return _t in r?Pt(d,r):Tt.call(d,r);o=r,p=Et(n,e);var y=r.byteLength;if(void 0===i){if(y%e)throw K("Wrong length!");if((s=y-p)<0)throw K("Wrong length!")}else if((s=g(i)*e)+p>y)throw K("Wrong length!");a=s/e}else a=v(r),o=new z(s=a*e);for(l(t,"_d",{b:o,o:p,l:s,e:a,v:new Y(o)});hdocument.F=Object<\/script>"),t.close(),u=t.F;n--;)delete u.prototype[o[n]];return u()};t.exports=Object.create||function t(e,r){var o;return null!==e?(a.prototype=n(e),o=new a,a.prototype=null,o[s]=e):o=u(),void 0===r?o:i(o,r)}},function(t,e,r){var n=r(105),i=r(75).concat("length","prototype");e.f=Object.getOwnPropertyNames||function t(e){return n(e,i)}},function(t,e,r){"use strict";var n=r(2),i=r(9),o=r(8),s=r(6)("species");t.exports=function(t){var e=n[t];o&&e&&!e[s]&&i.f(e,s,{configurable:!0,get:function(){return this}})}},function(t,e){t.exports=function(t,e,r,n){if(!(t instanceof e)||void 0!==n&&n in t)throw TypeError(r+": incorrect invocation!");return t}},function(t,e,r){var n=r(20),i=r(118),o=r(87),s=r(1),a=r(7),u=r(89),c={},f={};(e=t.exports=function(t,e,r,h,l){var p,d,g,v,y=l?function(){return t}:u(t),m=n(r,h,e?2:1),_=0;if("function"!=typeof y)throw TypeError(t+" is not iterable!");if(o(y)){for(p=a(t.length);p>_;_++)if((v=e?m(s(d=t[_])[0],d[1]):m(t[_]))===c||v===f)return v}else for(g=y.call(t);!(d=g.next()).done;)if((v=i(g,m,d.value,e))===c||v===f)return v}).BREAK=c,e.RETURN=f},function(t,e,r){var n=r(13);t.exports=function(t,e,r){for(var i in e)n(t,i,e[i],r);return t}},function(t,e,r){var n=r(5);t.exports=function(t,e){if(!n(t)||t._t!==e)throw TypeError("Incompatible receiver, "+e+" required!");return t}},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=function(){function t(t,e){for(var r=0;r1&&void 0!==arguments[1]?arguments[1]:o.JsonService;if(function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),!e)throw i.Log.error("MetadataService: No settings passed to MetadataService"),new Error("settings");this._settings=e,this._jsonService=new r(["application/jwk-set+json"])}return t.prototype.getMetadata=function t(){var e=this;return this._settings.metadata?(i.Log.debug("MetadataService.getMetadata: Returning metadata from settings"),Promise.resolve(this._settings.metadata)):this.metadataUrl?(i.Log.debug("MetadataService.getMetadata: getting metadata from",this.metadataUrl),this._jsonService.getJson(this.metadataUrl).then(function(t){return i.Log.debug("MetadataService.getMetadata: json received"),e._settings.metadata=t,t})):(i.Log.error("MetadataService.getMetadata: No authority or metadataUrl configured on settings"),Promise.reject(new Error("No authority or metadataUrl configured on settings")))},t.prototype.getIssuer=function t(){return this._getMetadataProperty("issuer")},t.prototype.getAuthorizationEndpoint=function t(){return this._getMetadataProperty("authorization_endpoint")},t.prototype.getUserInfoEndpoint=function t(){return this._getMetadataProperty("userinfo_endpoint")},t.prototype.getTokenEndpoint=function t(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];return this._getMetadataProperty("token_endpoint",e)},t.prototype.getCheckSessionIframe=function t(){return this._getMetadataProperty("check_session_iframe",!0)},t.prototype.getEndSessionEndpoint=function t(){return this._getMetadataProperty("end_session_endpoint",!0)},t.prototype.getRevocationEndpoint=function t(){return this._getMetadataProperty("revocation_endpoint",!0)},t.prototype.getKeysEndpoint=function t(){return this._getMetadataProperty("jwks_uri",!0)},t.prototype._getMetadataProperty=function t(e){var r=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return i.Log.debug("MetadataService.getMetadataProperty for: "+e),this.getMetadata().then(function(t){if(i.Log.debug("MetadataService.getMetadataProperty: metadata recieved"),void 0===t[e]){if(!0===r)return void i.Log.warn("MetadataService.getMetadataProperty: Metadata does not contain optional property "+e);throw i.Log.error("MetadataService.getMetadataProperty: Metadata does not contain property "+e),new Error("Metadata does not contain property "+e)}return t[e]})},t.prototype.getSigningKeys=function t(){var e=this;return this._settings.signingKeys?(i.Log.debug("MetadataService.getSigningKeys: Returning signingKeys from settings"),Promise.resolve(this._settings.signingKeys)):this._getMetadataProperty("jwks_uri").then(function(t){return i.Log.debug("MetadataService.getSigningKeys: jwks_uri received",t),e._jsonService.getJson(t).then(function(t){if(i.Log.debug("MetadataService.getSigningKeys: key set received",t),!t.keys)throw i.Log.error("MetadataService.getSigningKeys: Missing keys on keyset"),new Error("Missing keys on keyset");return e._settings.signingKeys=t.keys,e._settings.signingKeys})})},n(t,[{key:"metadataUrl",get:function t(){return this._metadataUrl||(this._settings.metadataUrl?this._metadataUrl=this._settings.metadataUrl:(this._metadataUrl=this._settings.authority,this._metadataUrl&&this._metadataUrl.indexOf(".well-known/openid-configuration")<0&&("/"!==this._metadataUrl[this._metadataUrl.length-1]&&(this._metadataUrl+="/"),this._metadataUrl+=".well-known/openid-configuration"))),this._metadataUrl}}]),t}()},function(t,e,r){var n=r(19),i=r(2),o=i["__core-js_shared__"]||(i["__core-js_shared__"]={});(t.exports=function(t,e){return o[t]||(o[t]=void 0!==e?e:{})})("versions",[]).push({version:n.version,mode:r(30)?"pure":"global",copyright:"© 2019 Denis Pushkarev (zloirock.ru)"})},function(t,e,r){var n=r(21);t.exports=Object("z").propertyIsEnumerable(0)?Object:function(t){return"String"==n(t)?t.split(""):Object(t)}},function(t,e){e.f={}.propertyIsEnumerable},function(t,e,r){"use strict";var n=r(1);t.exports=function(){var t=n(this),e="";return t.global&&(e+="g"),t.ignoreCase&&(e+="i"),t.multiline&&(e+="m"),t.unicode&&(e+="u"),t.sticky&&(e+="y"),e}},function(t,e,r){var n=r(1),i=r(11),o=r(6)("species");t.exports=function(t,e){var r,s=n(t).constructor;return void 0===s||void 0==(r=n(s)[o])?e:i(r)}},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.UrlUtility=void 0;var n=r(3),i=r(44);e.UrlUtility=function(){function t(){!function e(t,r){if(!(t instanceof r))throw new TypeError("Cannot call a class as a function")}(this,t)}return t.addQueryParam=function t(e,r,n){return e.indexOf("?")<0&&(e+="?"),"?"!==e[e.length-1]&&(e+="&"),e+=encodeURIComponent(r),e+="=",e+=encodeURIComponent(n)},t.parseUrlFragment=function t(e){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"#",o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:i.Global;"string"!=typeof e&&(e=o.location.href);var s=e.lastIndexOf(r);s>=0&&(e=e.substr(s+1)),"?"===r&&(s=e.indexOf("#"))>=0&&(e=e.substr(0,s));for(var a,u={},c=/([^&=]+)=([^&]*)/g,f=0;a=c.exec(e);)if(u[decodeURIComponent(a[1])]=decodeURIComponent(a[2]),f++>50)return n.Log.error("UrlUtility.parseUrlFragment: response exceeded expected number of parameters",e),{error:"Response exceeded expected number of parameters"};for(var h in u)return u;return{}},t}()},function(t,e,r){var n=r(16),i=r(7),o=r(36);t.exports=function(t){return function(e,r,s){var a,u=n(e),c=i(u.length),f=o(s,c);if(t&&r!=r){for(;c>f;)if((a=u[f++])!=a)return!0}else for(;c>f;f++)if((t||f in u)&&u[f]===r)return t||f||0;return!t&&-1}}},function(t,e){e.f=Object.getOwnPropertySymbols},function(t,e,r){var n=r(21);t.exports=Array.isArray||function t(e){return"Array"==n(e)}},function(t,e,r){var n=r(22),i=r(25);t.exports=function(t){return function(e,r){var o,s,a=String(i(e)),u=n(r),c=a.length;return u<0||u>=c?t?"":void 0:(o=a.charCodeAt(u))<55296||o>56319||u+1===c||(s=a.charCodeAt(u+1))<56320||s>57343?t?a.charAt(u):o:t?a.slice(u,u+2):s-56320+(o-55296<<10)+65536}}},function(t,e,r){var n=r(5),i=r(21),o=r(6)("match");t.exports=function(t){var e;return n(t)&&(void 0!==(e=t[o])?!!e:"RegExp"==i(t))}},function(t,e,r){var n=r(6)("iterator"),i=!1;try{var o=[7][n]();o.return=function(){i=!0},Array.from(o,function(){throw 2})}catch(t){}t.exports=function(t,e){if(!e&&!i)return!1;var r=!1;try{var o=[7],s=o[n]();s.next=function(){return{done:r=!0}},o[n]=function(){return s},t(o)}catch(t){}return r}},function(t,e,r){"use strict";var n=r(46),i=RegExp.prototype.exec;t.exports=function(t,e){var r=t.exec;if("function"==typeof r){var o=r.call(t,e);if("object"!=typeof o)throw new TypeError("RegExp exec method returned something other than an Object or null");return o}if("RegExp"!==n(t))throw new TypeError("RegExp#exec called on incompatible receiver");return i.call(t,e)}},function(t,e,r){"use strict";r(122);var n=r(13),i=r(12),o=r(4),s=r(25),a=r(6),u=r(93),c=a("species"),f=!o(function(){var t=/./;return t.exec=function(){var t=[];return t.groups={a:"7"},t},"7"!=="".replace(t,"$")}),h=function(){var t=/(?:)/,e=t.exec;t.exec=function(){return e.apply(this,arguments)};var r="ab".split(t);return 2===r.length&&"a"===r[0]&&"b"===r[1]}();t.exports=function(t,e,r){var l=a(t),p=!o(function(){var e={};return e[l]=function(){return 7},7!=""[t](e)}),d=p?!o(function(){var e=!1,r=/a/;return r.exec=function(){return e=!0,null},"split"===t&&(r.constructor={},r.constructor[c]=function(){return r}),r[l](""),!e}):void 0;if(!p||!d||"replace"===t&&!f||"split"===t&&!h){var g=/./[l],v=r(s,l,""[t],function t(e,r,n,i,o){return r.exec===u?p&&!o?{done:!0,value:g.call(r,n,i)}:{done:!0,value:e.call(n,r,i)}:{done:!1}}),y=v[0],m=v[1];n(String.prototype,t,y),i(RegExp.prototype,l,2==e?function(t,e){return m.call(t,this,e)}:function(t){return m.call(t,this)})}}},function(t,e,r){var n=r(2).navigator;t.exports=n&&n.userAgent||""},function(t,e,r){"use strict";var n=r(2),i=r(0),o=r(13),s=r(42),a=r(31),u=r(41),c=r(40),f=r(5),h=r(4),l=r(61),p=r(45),d=r(79);t.exports=function(t,e,r,g,v,y){var m=n[t],_=m,S=v?"set":"add",b=_&&_.prototype,w={},F=function(t){var e=b[t];o(b,t,"delete"==t?function(t){return!(y&&!f(t))&&e.call(this,0===t?0:t)}:"has"==t?function t(r){return!(y&&!f(r))&&e.call(this,0===r?0:r)}:"get"==t?function t(r){return y&&!f(r)?void 0:e.call(this,0===r?0:r)}:"add"==t?function t(r){return e.call(this,0===r?0:r),this}:function t(r,n){return e.call(this,0===r?0:r,n),this})};if("function"==typeof _&&(y||b.forEach&&!h(function(){(new _).entries().next()}))){var E=new _,x=E[S](y?{}:-0,1)!=E,A=h(function(){E.has(1)}),k=l(function(t){new _(t)}),P=!y&&h(function(){for(var t=new _,e=5;e--;)t[S](e,e);return!t.has(-0)});k||((_=e(function(e,r){c(e,_,t);var n=d(new m,e,_);return void 0!=r&&u(r,v,n[S],n),n})).prototype=b,b.constructor=_),(A||P)&&(F("delete"),F("has"),v&&F("get")),(P||x)&&F(S),y&&b.clear&&delete b.clear}else _=g.getConstructor(e,t,v,S),s(_.prototype,r),a.NEED=!0;return p(_,t),w[t]=_,i(i.G+i.W+i.F*(_!=m),w),y||g.setStrong(_,t,v),_}},function(t,e,r){for(var n,i=r(2),o=r(12),s=r(34),a=s("typed_array"),u=s("view"),c=!(!i.ArrayBuffer||!i.DataView),f=c,h=0,l="Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array".split(",");h<9;)(n=i[l[h++]])?(o(n.prototype,a,!0),o(n.prototype,u,!0)):f=!1;t.exports={ABV:c,CONSTR:f,TYPED:a,VIEW:u}},function(t,e,r){"use strict";t.exports=r(30)||!r(4)(function(){var t=Math.random();__defineSetter__.call(null,t,function(){}),delete r(2)[t]})},function(t,e,r){"use strict";var n=r(0);t.exports=function(t){n(n.S,t,{of:function t(){for(var e=arguments.length,r=new Array(e);e--;)r[e]=arguments[e];return new this(r)}})}},function(t,e,r){"use strict";var n=r(0),i=r(11),o=r(20),s=r(41);t.exports=function(t){n(n.S,t,{from:function t(e){var r,n,a,u,c=arguments[1];return i(this),(r=void 0!==c)&&i(c),void 0==e?new this:(n=[],r?(a=0,u=o(c,arguments[2],2),s(e,!1,function(t){n.push(u(t,a++))})):s(e,!1,n.push,n),new this(n))}})}},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.JoseUtil=void 0;var n=r(358),i=function o(t){return t&&t.__esModule?t:{default:t}}(r(364));e.JoseUtil=(0,i.default)({jws:n.jws,KeyUtil:n.KeyUtil,X509:n.X509,crypto:n.crypto,hextob64u:n.hextob64u,b64tohex:n.b64tohex,AllowedSigningAlgs:n.AllowedSigningAlgs})},function(t,e){var r;r=function(){return this}();try{r=r||new Function("return this")()}catch(t){"object"==typeof window&&(r=window)}t.exports=r},function(t,e,r){var n=r(5),i=r(2).document,o=n(i)&&n(i.createElement);t.exports=function(t){return o?i.createElement(t):{}}},function(t,e,r){var n=r(2),i=r(19),o=r(30),s=r(104),a=r(9).f;t.exports=function(t){var e=i.Symbol||(i.Symbol=o?{}:n.Symbol||{});"_"==t.charAt(0)||t in e||a(e,t,{value:s.f(t)})}},function(t,e,r){var n=r(50)("keys"),i=r(34);t.exports=function(t){return n[t]||(n[t]=i(t))}},function(t,e){t.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},function(t,e,r){var n=r(2).document;t.exports=n&&n.documentElement},function(t,e,r){var n=r(5),i=r(1),o=function(t,e){if(i(t),!n(e)&&null!==e)throw TypeError(e+": can't set as prototype!")};t.exports={set:Object.setPrototypeOf||("__proto__"in{}?function(t,e,n){try{(n=r(20)(Function.call,r(17).f(Object.prototype,"__proto__").set,2))(t,[]),e=!(t instanceof Array)}catch(t){e=!0}return function t(r,i){return o(r,i),e?r.__proto__=i:n(r,i),r}}({},!1):void 0),check:o}},function(t,e){t.exports="\t\n\v\f\r   ᠎              \u2028\u2029\ufeff"},function(t,e,r){var n=r(5),i=r(77).set;t.exports=function(t,e,r){var o,s=e.constructor;return s!==r&&"function"==typeof s&&(o=s.prototype)!==r.prototype&&n(o)&&i&&i(t,o),t}},function(t,e,r){"use strict";var n=r(22),i=r(25);t.exports=function t(e){var r=String(i(this)),o="",s=n(e);if(s<0||s==1/0)throw RangeError("Count can't be negative");for(;s>0;(s>>>=1)&&(r+=r))1&s&&(o+=r);return o}},function(t,e){t.exports=Math.sign||function t(e){return 0==(e=+e)||e!=e?e:e<0?-1:1}},function(t,e){var r=Math.expm1;t.exports=!r||r(10)>22025.465794806718||r(10)<22025.465794806718||-2e-17!=r(-2e-17)?function t(e){return 0==(e=+e)?e:e>-1e-6&&e<1e-6?e+e*e/2:Math.exp(e)-1}:r},function(t,e,r){"use strict";var n=r(30),i=r(0),o=r(13),s=r(12),a=r(48),u=r(84),c=r(45),f=r(18),h=r(6)("iterator"),l=!([].keys&&"next"in[].keys()),p=function(){return this};t.exports=function(t,e,r,d,g,v,y){u(r,e,d);var m,_,S,b=function(t){if(!l&&t in x)return x[t];switch(t){case"keys":return function e(){return new r(this,t)};case"values":return function e(){return new r(this,t)}}return function e(){return new r(this,t)}},w=e+" Iterator",F="values"==g,E=!1,x=t.prototype,A=x[h]||x["@@iterator"]||g&&x[g],k=A||b(g),P=g?F?b("entries"):k:void 0,C="Array"==e&&x.entries||A;if(C&&(S=f(C.call(new t)))!==Object.prototype&&S.next&&(c(S,w,!0),n||"function"==typeof S[h]||s(S,h,p)),F&&A&&"values"!==A.name&&(E=!0,k=function t(){return A.call(this)}),n&&!y||!l&&!E&&x[h]||s(x,h,k),a[e]=k,a[w]=p,g)if(m={values:F?k:b("values"),keys:v?k:b("keys"),entries:P},y)for(_ in m)_ in x||o(x,_,m[_]);else i(i.P+i.F*(l||E),e,m);return m}},function(t,e,r){"use strict";var n=r(37),i=r(33),o=r(45),s={};r(12)(s,r(6)("iterator"),function(){return this}),t.exports=function(t,e,r){t.prototype=n(s,{next:i(1,r)}),o(t,e+" Iterator")}},function(t,e,r){var n=r(60),i=r(25);t.exports=function(t,e,r){if(n(e))throw TypeError("String#"+r+" doesn't accept regex!");return String(i(t))}},function(t,e,r){var n=r(6)("match");t.exports=function(t){var e=/./;try{"/./"[t](e)}catch(r){try{return e[n]=!1,!"/./"[t](e)}catch(t){}}return!0}},function(t,e,r){var n=r(48),i=r(6)("iterator"),o=Array.prototype;t.exports=function(t){return void 0!==t&&(n.Array===t||o[i]===t)}},function(t,e,r){"use strict";var n=r(9),i=r(33);t.exports=function(t,e,r){e in t?n.f(t,e,i(0,r)):t[e]=r}},function(t,e,r){var n=r(46),i=r(6)("iterator"),o=r(48);t.exports=r(19).getIteratorMethod=function(t){if(void 0!=t)return t[i]||t["@@iterator"]||o[n(t)]}},function(t,e,r){var n=r(245);t.exports=function(t,e){return new(n(t))(e)}},function(t,e,r){"use strict";var n=r(10),i=r(36),o=r(7);t.exports=function t(e){for(var r=n(this),s=o(r.length),a=arguments.length,u=i(a>1?arguments[1]:void 0,s),c=a>2?arguments[2]:void 0,f=void 0===c?s:i(c,s);f>u;)r[u++]=e;return r}},function(t,e,r){"use strict";var n=r(32),i=r(121),o=r(48),s=r(16);t.exports=r(83)(Array,"Array",function(t,e){this._t=s(t),this._i=0,this._k=e},function(){var t=this._t,e=this._k,r=this._i++;return!t||r>=t.length?(this._t=void 0,i(1)):i(0,"keys"==e?r:"values"==e?t[r]:[r,t[r]])},"values"),o.Arguments=o.Array,n("keys"),n("values"),n("entries")},function(t,e,r){"use strict";var n,i,o=r(53),s=RegExp.prototype.exec,a=String.prototype.replace,u=s,c=(n=/a/,i=/b*/g,s.call(n,"a"),s.call(i,"a"),0!==n.lastIndex||0!==i.lastIndex),f=void 0!==/()??/.exec("")[1];(c||f)&&(u=function t(e){var r,n,i,u,h=this;return f&&(n=new RegExp("^"+h.source+"$(?!\\s)",o.call(h))),c&&(r=h.lastIndex),i=s.call(h,e),c&&i&&(h.lastIndex=h.global?i.index+i[0].length:r),f&&i&&i.length>1&&a.call(i[0],n,function(){for(u=1;ui;)r.push(arguments[i++]);return y[++v]=function(){a("function"==typeof e?e:Function(e),r)},n(v),v},p=function t(e){delete y[e]},"process"==r(21)(h)?n=function(t){h.nextTick(s(m,t,1))}:g&&g.now?n=function(t){g.now(s(m,t,1))}:d?(o=(i=new d).port2,i.port1.onmessage=_,n=s(o.postMessage,o,1)):f.addEventListener&&"function"==typeof postMessage&&!f.importScripts?(n=function(t){f.postMessage(t+"","*")},f.addEventListener("message",_,!1)):n="onreadystatechange"in c("script")?function(t){u.appendChild(c("script")).onreadystatechange=function(){u.removeChild(this),m.call(t)}}:function(t){setTimeout(s(m,t,1),0)}),t.exports={set:l,clear:p}},function(t,e,r){var n=r(2),i=r(95).set,o=n.MutationObserver||n.WebKitMutationObserver,s=n.process,a=n.Promise,u="process"==r(21)(s);t.exports=function(){var t,e,r,c=function(){var n,i;for(u&&(n=s.domain)&&n.exit();t;){i=t.fn,t=t.next;try{i()}catch(n){throw t?r():e=void 0,n}}e=void 0,n&&n.enter()};if(u)r=function(){s.nextTick(c)};else if(!o||n.navigator&&n.navigator.standalone)if(a&&a.resolve){var f=a.resolve(void 0);r=function(){f.then(c)}}else r=function(){i.call(n,c)};else{var h=!0,l=document.createTextNode("");new o(c).observe(l,{characterData:!0}),r=function(){l.data=h=!h}}return function(n){var i={fn:n,next:void 0};e&&(e.next=i),t||(t=i,r()),e=i}}},function(t,e,r){"use strict";var n=r(11);t.exports.f=function(t){return new function e(t){var e,r;this.promise=new t(function(t,n){if(void 0!==e||void 0!==r)throw TypeError("Bad Promise constructor");e=t,r=n}),this.resolve=n(e),this.reject=n(r)}(t)}},function(t,e,r){"use strict";var n=r(2),i=r(8),o=r(30),s=r(66),a=r(12),u=r(42),c=r(4),f=r(40),h=r(22),l=r(7),p=r(131),d=r(38).f,g=r(9).f,v=r(91),y=r(45),m="prototype",_="Wrong index!",S=n.ArrayBuffer,b=n.DataView,w=n.Math,F=n.RangeError,E=n.Infinity,x=S,A=w.abs,k=w.pow,P=w.floor,C=w.log,T=w.LN2,R=i?"_b":"buffer",I=i?"_l":"byteLength",O=i?"_o":"byteOffset";function D(t,e,r){var n,i,o,s=new Array(r),a=8*r-e-1,u=(1<>1,f=23===e?k(2,-24)-k(2,-77):0,h=0,l=t<0||0===t&&1/t<0?1:0;for((t=A(t))!=t||t===E?(i=t!=t?1:0,n=u):(n=P(C(t)/T),t*(o=k(2,-n))<1&&(n--,o*=2),(t+=n+c>=1?f/o:f*k(2,1-c))*o>=2&&(n++,o/=2),n+c>=u?(i=0,n=u):n+c>=1?(i=(t*o-1)*k(2,e),n+=c):(i=t*k(2,c-1)*k(2,e),n=0));e>=8;s[h++]=255&i,i/=256,e-=8);for(n=n<0;s[h++]=255&n,n/=256,a-=8);return s[--h]|=128*l,s}function N(t,e,r){var n,i=8*r-e-1,o=(1<>1,a=i-7,u=r-1,c=t[u--],f=127&c;for(c>>=7;a>0;f=256*f+t[u],u--,a-=8);for(n=f&(1<<-a)-1,f>>=-a,a+=e;a>0;n=256*n+t[u],u--,a-=8);if(0===f)f=1-s;else{if(f===o)return n?NaN:c?-E:E;n+=k(2,e),f-=s}return(c?-1:1)*n*k(2,f-e)}function L(t){return t[3]<<24|t[2]<<16|t[1]<<8|t[0]}function M(t){return[255&t]}function j(t){return[255&t,t>>8&255]}function U(t){return[255&t,t>>8&255,t>>16&255,t>>24&255]}function B(t){return D(t,52,8)}function H(t){return D(t,23,4)}function V(t,e,r){g(t[m],e,{get:function(){return this[r]}})}function K(t,e,r,n){var i=p(+r);if(i+e>t[I])throw F(_);var o=t[R]._b,s=i+t[O],a=o.slice(s,s+e);return n?a:a.reverse()}function q(t,e,r,n,i,o){var s=p(+r);if(s+e>t[I])throw F(_);for(var a=t[R]._b,u=s+t[O],c=n(+i),f=0;fY;)(W=z[Y++])in S||a(S,W,x[W]);o||(J.constructor=S)}var G=new b(new S(2)),X=b[m].setInt8;G.setInt8(0,2147483648),G.setInt8(1,2147483649),!G.getInt8(0)&&G.getInt8(1)||u(b[m],{setInt8:function t(e,r){X.call(this,e,r<<24>>24)},setUint8:function t(e,r){X.call(this,e,r<<24>>24)}},!0)}else S=function t(e){f(this,S,"ArrayBuffer");var r=p(e);this._b=v.call(new Array(r),0),this[I]=r},b=function t(e,r,n){f(this,b,"DataView"),f(e,S,"DataView");var i=e[I],o=h(r);if(o<0||o>i)throw F("Wrong offset!");if(o+(n=void 0===n?i-o:l(n))>i)throw F("Wrong length!");this[R]=e,this[O]=o,this[I]=n},i&&(V(S,"byteLength","_l"),V(b,"buffer","_b"),V(b,"byteLength","_l"),V(b,"byteOffset","_o")),u(b[m],{getInt8:function t(e){return K(this,1,e)[0]<<24>>24},getUint8:function t(e){return K(this,1,e)[0]},getInt16:function t(e){var r=K(this,2,e,arguments[1]);return(r[1]<<8|r[0])<<16>>16},getUint16:function t(e){var r=K(this,2,e,arguments[1]);return r[1]<<8|r[0]},getInt32:function t(e){return L(K(this,4,e,arguments[1]))},getUint32:function t(e){return L(K(this,4,e,arguments[1]))>>>0},getFloat32:function t(e){return N(K(this,4,e,arguments[1]),23,4)},getFloat64:function t(e){return N(K(this,8,e,arguments[1]),52,8)},setInt8:function t(e,r){q(this,1,e,M,r)},setUint8:function t(e,r){q(this,1,e,M,r)},setInt16:function t(e,r){q(this,2,e,j,r,arguments[2])},setUint16:function t(e,r){q(this,2,e,j,r,arguments[2])},setInt32:function t(e,r){q(this,4,e,U,r,arguments[2])},setUint32:function t(e,r){q(this,4,e,U,r,arguments[2])},setFloat32:function t(e,r){q(this,4,e,H,r,arguments[2])},setFloat64:function t(e,r){q(this,8,e,B,r,arguments[2])}});y(S,"ArrayBuffer"),y(b,"DataView"),a(b[m],s.VIEW,!0),e.ArrayBuffer=S,e.DataView=b},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.OidcClientSettings=void 0;var n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},i=function(){function t(t,e){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:{},r=e.authority,i=e.metadataUrl,o=e.metadata,p=e.signingKeys,d=e.client_id,g=e.client_secret,v=e.response_type,y=void 0===v?c:v,m=e.scope,_=void 0===m?f:m,S=e.redirect_uri,b=e.post_logout_redirect_uri,w=e.prompt,F=e.display,E=e.max_age,x=e.ui_locales,A=e.acr_values,k=e.resource,P=e.response_mode,C=e.filterProtocolClaims,T=void 0===C||C,R=e.loadUserInfo,I=void 0===R||R,O=e.staleStateAge,D=void 0===O?h:O,N=e.clockSkew,L=void 0===N?l:N,M=e.userInfoJwtIssuer,j=void 0===M?"OP":M,U=e.stateStore,B=void 0===U?new s.WebStorageStateStore:U,H=e.ResponseValidatorCtor,V=void 0===H?a.ResponseValidator:H,K=e.MetadataServiceCtor,q=void 0===K?u.MetadataService:K,W=e.extraQueryParams,J=void 0===W?{}:W,z=e.extraTokenParams,Y=void 0===z?{}:z;!function G(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),this._authority=r,this._metadataUrl=i,this._metadata=o,this._signingKeys=p,this._client_id=d,this._client_secret=g,this._response_type=y,this._scope=_,this._redirect_uri=S,this._post_logout_redirect_uri=b,this._prompt=w,this._display=F,this._max_age=E,this._ui_locales=x,this._acr_values=A,this._resource=k,this._response_mode=P,this._filterProtocolClaims=!!T,this._loadUserInfo=!!I,this._staleStateAge=D,this._clockSkew=L,this._userInfoJwtIssuer=j,this._stateStore=B,this._validator=new V(this),this._metadataService=new q(this),this._extraQueryParams="object"===(void 0===J?"undefined":n(J))?J:{},this._extraTokenParams="object"===(void 0===Y?"undefined":n(Y))?Y:{}}return i(t,[{key:"client_id",get:function t(){return this._client_id},set:function t(e){if(this._client_id)throw o.Log.error("OidcClientSettings.set_client_id: client_id has already been assigned."),new Error("client_id has already been assigned.");this._client_id=e}},{key:"client_secret",get:function t(){return this._client_secret}},{key:"response_type",get:function t(){return this._response_type}},{key:"scope",get:function t(){return this._scope}},{key:"redirect_uri",get:function t(){return this._redirect_uri}},{key:"post_logout_redirect_uri",get:function t(){return this._post_logout_redirect_uri}},{key:"prompt",get:function t(){return this._prompt}},{key:"display",get:function t(){return this._display}},{key:"max_age",get:function t(){return this._max_age}},{key:"ui_locales",get:function t(){return this._ui_locales}},{key:"acr_values",get:function t(){return this._acr_values}},{key:"resource",get:function t(){return this._resource}},{key:"response_mode",get:function t(){return this._response_mode}},{key:"authority",get:function t(){return this._authority},set:function t(e){if(this._authority)throw o.Log.error("OidcClientSettings.set_authority: authority has already been assigned."),new Error("authority has already been assigned.");this._authority=e}},{key:"metadataUrl",get:function t(){return this._metadataUrl||(this._metadataUrl=this.authority,this._metadataUrl&&this._metadataUrl.indexOf(".well-known/openid-configuration")<0&&("/"!==this._metadataUrl[this._metadataUrl.length-1]&&(this._metadataUrl+="/"),this._metadataUrl+=".well-known/openid-configuration")),this._metadataUrl}},{key:"metadata",get:function t(){return this._metadata},set:function t(e){this._metadata=e}},{key:"signingKeys",get:function t(){return this._signingKeys},set:function t(e){this._signingKeys=e}},{key:"filterProtocolClaims",get:function t(){return this._filterProtocolClaims}},{key:"loadUserInfo",get:function t(){return this._loadUserInfo}},{key:"staleStateAge",get:function t(){return this._staleStateAge}},{key:"clockSkew",get:function t(){return this._clockSkew}},{key:"userInfoJwtIssuer",get:function t(){return this._userInfoJwtIssuer}},{key:"stateStore",get:function t(){return this._stateStore}},{key:"validator",get:function t(){return this._validator}},{key:"metadataService",get:function t(){return this._metadataService}},{key:"extraQueryParams",get:function t(){return this._extraQueryParams},set:function t(e){"object"===(void 0===e?"undefined":n(e))?this._extraQueryParams=e:this._extraQueryParams={}}},{key:"extraTokenParams",get:function t(){return this._extraTokenParams},set:function t(e){"object"===(void 0===e?"undefined":n(e))?this._extraTokenParams=e:this._extraTokenParams={}}}]),t}()},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.WebStorageStateStore=void 0;var n=r(3),i=r(44);e.WebStorageStateStore=function(){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=e.prefix,n=void 0===r?"oidc.":r,o=e.store,s=void 0===o?i.Global.localStorage:o;!function a(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),this._store=s,this._prefix=n}return t.prototype.set=function t(e,r){return n.Log.debug("WebStorageStateStore.set",e),e=this._prefix+e,this._store.setItem(e,r),Promise.resolve()},t.prototype.get=function t(e){n.Log.debug("WebStorageStateStore.get",e),e=this._prefix+e;var r=this._store.getItem(e);return Promise.resolve(r)},t.prototype.remove=function t(e){n.Log.debug("WebStorageStateStore.remove",e),e=this._prefix+e;var r=this._store.getItem(e);return this._store.removeItem(e),Promise.resolve(r)},t.prototype.getAllKeys=function t(){n.Log.debug("WebStorageStateStore.getAllKeys");for(var e=[],r=0;r0&&void 0!==arguments[0]?arguments[0]:null,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:i.Global.XMLHttpRequest,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;!function o(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),e&&Array.isArray(e)?this._contentTypes=e.slice():this._contentTypes=[],this._contentTypes.push("application/json"),n&&this._contentTypes.push("application/jwt"),this._XMLHttpRequest=r,this._jwtHandler=n}return t.prototype.getJson=function t(e,r){var i=this;if(!e)throw n.Log.error("JsonService.getJson: No url passed"),new Error("url");return n.Log.debug("JsonService.getJson, url: ",e),new Promise(function(t,o){var s=new i._XMLHttpRequest;s.open("GET",e);var a=i._contentTypes,u=i._jwtHandler;s.onload=function(){if(n.Log.debug("JsonService.getJson: HTTP response received, status",s.status),200===s.status){var r=s.getResponseHeader("Content-Type");if(r){var i=a.find(function(t){if(r.startsWith(t))return!0});if("application/jwt"==i)return void u(s).then(t,o);if(i)try{return void t(JSON.parse(s.responseText))}catch(t){return n.Log.error("JsonService.getJson: Error parsing JSON response",t.message),void o(t)}}o(Error("Invalid response Content-Type: "+r+", from URL: "+e))}else o(Error(s.statusText+" ("+s.status+")"))},s.onerror=function(){n.Log.error("JsonService.getJson: network error"),o(Error("Network Error"))},r&&(n.Log.debug("JsonService.getJson: token passed, setting Authorization header"),s.setRequestHeader("Authorization","Bearer "+r)),s.send()})},t.prototype.postForm=function t(e,r){var i=this;if(!e)throw n.Log.error("JsonService.postForm: No url passed"),new Error("url");return n.Log.debug("JsonService.postForm, url: ",e),new Promise(function(t,o){var s=new i._XMLHttpRequest;s.open("POST",e);var a=i._contentTypes;s.onload=function(){if(n.Log.debug("JsonService.postForm: HTTP response received, status",s.status),200!==s.status){if(400===s.status)if(i=s.getResponseHeader("Content-Type"))if(a.find(function(t){if(i.startsWith(t))return!0}))try{var r=JSON.parse(s.responseText);if(r&&r.error)return n.Log.error("JsonService.postForm: Error from server: ",r.error),void o(new Error(r.error))}catch(t){return n.Log.error("JsonService.postForm: Error parsing JSON response",t.message),void o(t)}o(Error(s.statusText+" ("+s.status+")"))}else{var i;if((i=s.getResponseHeader("Content-Type"))&&a.find(function(t){if(i.startsWith(t))return!0}))try{return void t(JSON.parse(s.responseText))}catch(t){return n.Log.error("JsonService.postForm: Error parsing JSON response",t.message),void o(t)}o(Error("Invalid response Content-Type: "+i+", from URL: "+e))}},s.onerror=function(){n.Log.error("JsonService.postForm: network error"),o(Error("Network Error"))};var u="";for(var c in r){var f=r[c];f&&(u.length>0&&(u+="&"),u+=encodeURIComponent(c),u+="=",u+=encodeURIComponent(f))}s.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),s.send(u)})},t}()},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.State=void 0;var n=function(){function t(t,e){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:{},r=e.id,n=e.data,i=e.created,s=e.request_type;!function a(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),this._id=r||(0,o.default)(),this._data=n,this._created="number"==typeof i&&i>0?i:parseInt(Date.now()/1e3),this._request_type=s}return t.prototype.toStorageString=function t(){return i.Log.debug("State.toStorageString"),JSON.stringify({id:this.id,data:this.data,created:this.created,request_type:this.request_type})},t.fromStorageString=function e(r){return i.Log.debug("State.fromStorageString"),new t(JSON.parse(r))},t.clearStaleState=function e(r,n){var o=Date.now()/1e3-n;return r.getAllKeys().then(function(e){i.Log.debug("State.clearStaleState: got keys",e);for(var n=[],s=function s(a){var c=e[a];u=r.get(c).then(function(e){var n=!1;if(e)try{var s=t.fromStorageString(e);i.Log.debug("State.clearStaleState: got item from key: ",c,s.created),s.created<=o&&(n=!0)}catch(t){i.Log.error("State.clearStaleState: Error parsing state for key",c,t.message),n=!0}else i.Log.debug("State.clearStaleState: no item in storage for key: ",c),n=!0;if(n)return i.Log.debug("State.clearStaleState: removed item for key: ",c),r.remove(c)}),n.push(u)},a=0;au;)n(a,r=e[u++])&&(~o(c,r)||c.push(r));return c}},function(t,e,r){var n=r(9),i=r(1),o=r(35);t.exports=r(8)?Object.defineProperties:function t(e,r){i(e);for(var s,a=o(r),u=a.length,c=0;u>c;)n.f(e,s=a[c++],r[s]);return e}},function(t,e,r){var n=r(16),i=r(38).f,o={}.toString,s="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[];t.exports.f=function t(e){return s&&"[object Window]"==o.call(e)?function(t){try{return i(t)}catch(t){return s.slice()}}(e):i(n(e))}},function(t,e,r){"use strict";var n=r(35),i=r(57),o=r(52),s=r(10),a=r(51),u=Object.assign;t.exports=!u||r(4)(function(){var t={},e={},r=Symbol(),n="abcdefghijklmnopqrst";return t[r]=7,n.split("").forEach(function(t){e[t]=t}),7!=u({},t)[r]||Object.keys(u({},e)).join("")!=n})?function t(e,r){for(var u=s(e),c=arguments.length,f=1,h=i.f,l=o.f;c>f;)for(var p,d=a(arguments[f++]),g=h?n(d).concat(h(d)):n(d),v=g.length,y=0;v>y;)l.call(d,p=g[y++])&&(u[p]=d[p]);return u}:u},function(t,e){t.exports=Object.is||function t(e,r){return e===r?0!==e||1/e==1/r:e!=e&&r!=r}},function(t,e,r){"use strict";var n=r(11),i=r(5),o=r(111),s=[].slice,a={};t.exports=Function.bind||function t(e){var r=n(this),u=s.call(arguments,1),c=function(){var t=u.concat(s.call(arguments));return this instanceof c?function(t,e,r){if(!(e in a)){for(var n=[],i=0;i>>0||(s.test(o)?16:10))}:n},function(t,e,r){var n=r(2).parseFloat,i=r(47).trim;t.exports=1/n(r(78)+"-0")!=-1/0?function t(e){var r=i(String(e),3),o=n(r);return 0===o&&"-"==r.charAt(0)?-0:o}:n},function(t,e,r){var n=r(21);t.exports=function(t,e){if("number"!=typeof t&&"Number"!=n(t))throw TypeError(e);return+t}},function(t,e,r){var n=r(5),i=Math.floor;t.exports=function t(e){return!n(e)&&isFinite(e)&&i(e)===e}},function(t,e){t.exports=Math.log1p||function t(e){return(e=+e)>-1e-8&&e<1e-8?e-e*e/2:Math.log(1+e)}},function(t,e,r){var n=r(81),i=Math.pow,o=i(2,-52),s=i(2,-23),a=i(2,127)*(2-s),u=i(2,-126);t.exports=Math.fround||function t(e){var r,i,c=Math.abs(e),f=n(e);return ca||i!=i?f*(1/0):f*i}},function(t,e,r){var n=r(1);t.exports=function(t,e,r,i){try{return i?e(n(r)[0],r[1]):e(r)}catch(e){var o=t.return;throw void 0!==o&&n(o.call(t)),e}}},function(t,e,r){var n=r(11),i=r(10),o=r(51),s=r(7);t.exports=function(t,e,r,a,u){n(e);var c=i(t),f=o(c),h=s(c.length),l=u?h-1:0,p=u?-1:1;if(r<2)for(;;){if(l in f){a=f[l],l+=p;break}if(l+=p,u?l<0:h<=l)throw TypeError("Reduce of empty array with no initial value")}for(;u?l>=0:h>l;l+=p)l in f&&(a=e(a,f[l],l,c));return a}},function(t,e,r){"use strict";var n=r(10),i=r(36),o=r(7);t.exports=[].copyWithin||function t(e,r){var s=n(this),a=o(s.length),u=i(e,a),c=i(r,a),f=arguments.length>2?arguments[2]:void 0,h=Math.min((void 0===f?a:i(f,a))-c,a-u),l=1;for(c0;)c in s?s[u]=s[c]:delete s[u],u+=l,c+=l;return s}},function(t,e){t.exports=function(t,e){return{value:e,done:!!t}}},function(t,e,r){"use strict";var n=r(93);r(0)({target:"RegExp",proto:!0,forced:n!==/./.exec},{exec:n})},function(t,e,r){r(8)&&"g"!=/./g.flags&&r(9).f(RegExp.prototype,"flags",{configurable:!0,get:r(53)})},function(t,e){t.exports=function(t){try{return{e:!1,v:t()}}catch(t){return{e:!0,v:t}}}},function(t,e,r){var n=r(1),i=r(5),o=r(97);t.exports=function(t,e){if(n(t),i(e)&&e.constructor===t)return e;var r=o.f(t);return(0,r.resolve)(e),r.promise}},function(t,e,r){"use strict";var n=r(127),i=r(43);t.exports=r(65)("Map",function(t){return function e(){return t(this,arguments.length>0?arguments[0]:void 0)}},{get:function t(e){var r=n.getEntry(i(this,"Map"),e);return r&&r.v},set:function t(e,r){return n.def(i(this,"Map"),0===e?0:e,r)}},n,!0)},function(t,e,r){"use strict";var n=r(9).f,i=r(37),o=r(42),s=r(20),a=r(40),u=r(41),c=r(83),f=r(121),h=r(39),l=r(8),p=r(31).fastKey,d=r(43),g=l?"_s":"size",v=function(t,e){var r,n=p(e);if("F"!==n)return t._i[n];for(r=t._f;r;r=r.n)if(r.k==e)return r};t.exports={getConstructor:function(t,e,r,c){var f=t(function(t,n){a(t,f,e,"_i"),t._t=e,t._i=i(null),t._f=void 0,t._l=void 0,t[g]=0,void 0!=n&&u(n,r,t[c],t)});return o(f.prototype,{clear:function t(){for(var r=d(this,e),n=r._i,i=r._f;i;i=i.n)i.r=!0,i.p&&(i.p=i.p.n=void 0),delete n[i.i];r._f=r._l=void 0,r[g]=0},delete:function(t){var r=d(this,e),n=v(r,t);if(n){var i=n.n,o=n.p;delete r._i[n.i],n.r=!0,o&&(o.n=i),i&&(i.p=o),r._f==n&&(r._f=i),r._l==n&&(r._l=o),r[g]--}return!!n},forEach:function t(r){d(this,e);for(var n,i=s(r,arguments.length>1?arguments[1]:void 0,3);n=n?n.n:this._f;)for(i(n.v,n.k,this);n&&n.r;)n=n.p},has:function t(r){return!!v(d(this,e),r)}}),l&&n(f.prototype,"size",{get:function(){return d(this,e)[g]}}),f},def:function(t,e,r){var n,i,o=v(t,e);return o?o.v=r:(t._l=o={i:i=p(e,!0),k:e,v:r,p:n=t._l,n:void 0,r:!1},t._f||(t._f=o),n&&(n.n=o),t[g]++,"F"!==i&&(t._i[i]=o)),t},getEntry:v,setStrong:function(t,e,r){c(t,e,function(t,r){this._t=d(t,e),this._k=r,this._l=void 0},function(){for(var t=this._k,e=this._l;e&&e.r;)e=e.p;return this._t&&(this._l=e=e?e.n:this._t._f)?f(0,"keys"==t?e.k:"values"==t?e.v:[e.k,e.v]):(this._t=void 0,f(1))},r?"entries":"values",!r,!0),h(e)}}},function(t,e,r){"use strict";var n=r(127),i=r(43);t.exports=r(65)("Set",function(t){return function e(){return t(this,arguments.length>0?arguments[0]:void 0)}},{add:function t(e){return n.def(i(this,"Set"),e=0===e?0:e,e)}},n)},function(t,e,r){"use strict";var n,i=r(2),o=r(27)(0),s=r(13),a=r(31),u=r(108),c=r(130),f=r(5),h=r(43),l=r(43),p=!i.ActiveXObject&&"ActiveXObject"in i,d=a.getWeak,g=Object.isExtensible,v=c.ufstore,y=function(t){return function e(){return t(this,arguments.length>0?arguments[0]:void 0)}},m={get:function t(e){if(f(e)){var r=d(e);return!0===r?v(h(this,"WeakMap")).get(e):r?r[this._i]:void 0}},set:function t(e,r){return c.def(h(this,"WeakMap"),e,r)}},_=t.exports=r(65)("WeakMap",y,m,c,!0,!0);l&&p&&(u((n=c.getConstructor(y,"WeakMap")).prototype,m),a.NEED=!0,o(["delete","has","get","set"],function(t){var e=_.prototype,r=e[t];s(e,t,function(e,i){if(f(e)&&!g(e)){this._f||(this._f=new n);var o=this._f[t](e,i);return"set"==t?this:o}return r.call(this,e,i)})}))},function(t,e,r){"use strict";var n=r(42),i=r(31).getWeak,o=r(1),s=r(5),a=r(40),u=r(41),c=r(27),f=r(15),h=r(43),l=c(5),p=c(6),d=0,g=function(t){return t._l||(t._l=new v)},v=function(){this.a=[]},y=function(t,e){return l(t.a,function(t){return t[0]===e})};v.prototype={get:function(t){var e=y(this,t);if(e)return e[1]},has:function(t){return!!y(this,t)},set:function(t,e){var r=y(this,t);r?r[1]=e:this.a.push([t,e])},delete:function(t){var e=p(this.a,function(e){return e[0]===t});return~e&&this.a.splice(e,1),!!~e}},t.exports={getConstructor:function(t,e,r,o){var c=t(function(t,n){a(t,c,e,"_i"),t._t=e,t._i=d++,t._l=void 0,void 0!=n&&u(n,r,t[o],t)});return n(c.prototype,{delete:function(t){if(!s(t))return!1;var r=i(t);return!0===r?g(h(this,e)).delete(t):r&&f(r,this._i)&&delete r[this._i]},has:function t(r){if(!s(r))return!1;var n=i(r);return!0===n?g(h(this,e)).has(r):n&&f(n,this._i)}}),c},def:function(t,e,r){var n=i(o(e),!0);return!0===n?g(t).set(e,r):n[t._i]=r,t},ufstore:g}},function(t,e,r){var n=r(22),i=r(7);t.exports=function(t){if(void 0===t)return 0;var e=n(t),r=i(e);if(e!==r)throw RangeError("Wrong length!");return r}},function(t,e,r){var n=r(38),i=r(57),o=r(1),s=r(2).Reflect;t.exports=s&&s.ownKeys||function t(e){var r=n.f(o(e)),s=i.f;return s?r.concat(s(e)):r}},function(t,e,r){"use strict";var n=r(58),i=r(5),o=r(7),s=r(20),a=r(6)("isConcatSpreadable");t.exports=function t(e,r,u,c,f,h,l,p){for(var d,g,v=f,y=0,m=!!l&&s(l,p,3);y0)v=t(e,r,d,o(d.length),v,h-1)-1;else{if(v>=9007199254740991)throw TypeError();e[v]=d}v++}y++}return v}},function(t,e,r){var n=r(7),i=r(80),o=r(25);t.exports=function(t,e,r,s){var a=String(o(t)),u=a.length,c=void 0===r?" ":String(r),f=n(e);if(f<=u||""==c)return a;var h=f-u,l=i.call(c,Math.ceil(h/c.length));return l.length>h&&(l=l.slice(0,h)),s?l+a:a+l}},function(t,e,r){var n=r(35),i=r(16),o=r(52).f;t.exports=function(t){return function(e){for(var r,s=i(e),a=n(s),u=a.length,c=0,f=[];u>c;)o.call(s,r=a[c++])&&f.push(t?[r,s[r]]:s[r]);return f}}},function(t,e,r){var n=r(46),i=r(137);t.exports=function(t){return function e(){if(n(this)!=t)throw TypeError(t+"#toJSON isn't generic");return i(this)}}},function(t,e,r){var n=r(41);t.exports=function(t,e){var r=[];return n(t,!1,r.push,r,e),r}},function(t,e){t.exports=Math.scale||function t(e,r,n,i,o){return 0===arguments.length||e!=e||r!=r||n!=n||i!=i||o!=o?NaN:e===1/0||e===-1/0?e:(e-r)*(o-i)/(n-r)+i}},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.OidcClient=void 0;var n=function(){function t(t,e){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:{};!function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),e instanceof o.OidcClientSettings?this._settings=e:this._settings=new o.OidcClientSettings(e)}return t.prototype.createSigninRequest=function t(){var e=this,r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=r.response_type,o=r.scope,s=r.redirect_uri,u=r.data,c=r.state,f=r.prompt,h=r.display,l=r.max_age,p=r.ui_locales,d=r.id_token_hint,g=r.login_hint,v=r.acr_values,y=r.resource,m=r.request,_=r.request_uri,S=r.response_mode,b=r.extraQueryParams,w=r.extraTokenParams,F=r.request_type,E=r.skipUserInfo,x=arguments[1];i.Log.debug("OidcClient.createSigninRequest");var A=this._settings.client_id;n=n||this._settings.response_type,o=o||this._settings.scope,s=s||this._settings.redirect_uri,f=f||this._settings.prompt,h=h||this._settings.display,l=l||this._settings.max_age,p=p||this._settings.ui_locales,v=v||this._settings.acr_values,y=y||this._settings.resource,S=S||this._settings.response_mode,b=b||this._settings.extraQueryParams,w=w||this._settings.extraTokenParams;var k=this._settings.authority;return a.SigninRequest.isCode(n)&&"code"!==n?Promise.reject(new Error("OpenID Connect hybrid flow is not supported")):this._metadataService.getAuthorizationEndpoint().then(function(t){i.Log.debug("OidcClient.createSigninRequest: Received authorization endpoint",t);var r=new a.SigninRequest({url:t,client_id:A,redirect_uri:s,response_type:n,scope:o,data:u||c,authority:k,prompt:f,display:h,max_age:l,ui_locales:p,id_token_hint:d,login_hint:g,acr_values:v,resource:y,request:m,request_uri:_,extraQueryParams:b,extraTokenParams:w,request_type:F,response_mode:S,client_secret:e._settings.client_secret,skipUserInfo:E}),P=r.state;return(x=x||e._stateStore).set(P.id,P.toStorageString()).then(function(){return r})})},t.prototype.readSigninResponseState=function t(e,r){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];i.Log.debug("OidcClient.readSigninResponseState");var o="query"===this._settings.response_mode||!this._settings.response_mode&&a.SigninRequest.isCode(this._settings.response_type)?"?":"#",s=new u.SigninResponse(e,o);return s.state?(r=r||this._stateStore,(n?r.remove.bind(r):r.get.bind(r))(s.state).then(function(t){if(!t)throw i.Log.error("OidcClient.readSigninResponseState: No matching state found in storage"),new Error("No matching state found in storage");return{state:h.SigninState.fromStorageString(t),response:s}})):(i.Log.error("OidcClient.readSigninResponseState: No state in response"),Promise.reject(new Error("No state in response")))},t.prototype.processSigninResponse=function t(e,r){var n=this;return i.Log.debug("OidcClient.processSigninResponse"),this.readSigninResponseState(e,r,!0).then(function(t){var e=t.state,r=t.response;return i.Log.debug("OidcClient.processSigninResponse: Received state from storage; validating response"),n._validator.validateSigninResponse(e,r)})},t.prototype.createSignoutRequest=function t(){var e=this,r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=r.id_token_hint,o=r.data,s=r.state,a=r.post_logout_redirect_uri,u=r.extraQueryParams,f=r.request_type,h=arguments[1];return i.Log.debug("OidcClient.createSignoutRequest"),a=a||this._settings.post_logout_redirect_uri,u=u||this._settings.extraQueryParams,this._metadataService.getEndSessionEndpoint().then(function(t){if(!t)throw i.Log.error("OidcClient.createSignoutRequest: No end session endpoint url returned"),new Error("no end session endpoint");i.Log.debug("OidcClient.createSignoutRequest: Received end session endpoint",t);var r=new c.SignoutRequest({url:t,id_token_hint:n,post_logout_redirect_uri:a,data:o||s,extraQueryParams:u,request_type:f}),l=r.state;return l&&(i.Log.debug("OidcClient.createSignoutRequest: Signout request has state to persist"),(h=h||e._stateStore).set(l.id,l.toStorageString())),r})},t.prototype.readSignoutResponseState=function t(e,r){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];i.Log.debug("OidcClient.readSignoutResponseState");var o=new f.SignoutResponse(e);if(!o.state)return i.Log.debug("OidcClient.readSignoutResponseState: No state in response"),o.error?(i.Log.warn("OidcClient.readSignoutResponseState: Response was error: ",o.error),Promise.reject(new s.ErrorResponse(o))):Promise.resolve({undefined:void 0,response:o});var a=o.state;return r=r||this._stateStore,(n?r.remove.bind(r):r.get.bind(r))(a).then(function(t){if(!t)throw i.Log.error("OidcClient.readSignoutResponseState: No matching state found in storage"),new Error("No matching state found in storage");return{state:l.State.fromStorageString(t),response:o}})},t.prototype.processSignoutResponse=function t(e,r){var n=this;return i.Log.debug("OidcClient.processSignoutResponse"),this.readSignoutResponseState(e,r,!0).then(function(t){var e=t.state,r=t.response;return e?(i.Log.debug("OidcClient.processSignoutResponse: Received state from storage; validating response"),n._validator.validateSignoutResponse(e,r)):(i.Log.debug("OidcClient.processSignoutResponse: No state from storage; skipping validating response"),r)})},t.prototype.clearStaleState=function t(e){return i.Log.debug("OidcClient.clearStaleState"),e=e||this._stateStore,l.State.clearStaleState(e,this.settings.staleStateAge)},n(t,[{key:"_stateStore",get:function t(){return this.settings.stateStore}},{key:"_validator",get:function t(){return this.settings.validator}},{key:"_metadataService",get:function t(){return this.settings.metadataService}},{key:"settings",get:function t(){return this._settings}},{key:"metadataService",get:function t(){return this._metadataService}}]),t}()},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.TokenClient=void 0;var n=r(101),i=r(49),o=r(3);e.TokenClient=function(){function t(e){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n.JsonService,s=arguments.length>2&&void 0!==arguments[2]?arguments[2]:i.MetadataService;if(function a(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),!e)throw o.Log.error("TokenClient.ctor: No settings passed"),new Error("settings");this._settings=e,this._jsonService=new r,this._metadataService=new s(this._settings)}return t.prototype.exchangeCode=function t(){var e=this,r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return(r=Object.assign({},r)).grant_type=r.grant_type||"authorization_code",r.client_id=r.client_id||this._settings.client_id,r.redirect_uri=r.redirect_uri||this._settings.redirect_uri,r.code?r.redirect_uri?r.code_verifier?r.client_id?this._metadataService.getTokenEndpoint(!1).then(function(t){return o.Log.debug("TokenClient.exchangeCode: Received token endpoint"),e._jsonService.postForm(t,r).then(function(t){return o.Log.debug("TokenClient.exchangeCode: response received"),t})}):(o.Log.error("TokenClient.exchangeCode: No client_id passed"),Promise.reject(new Error("A client_id is required"))):(o.Log.error("TokenClient.exchangeCode: No code_verifier passed"),Promise.reject(new Error("A code_verifier is required"))):(o.Log.error("TokenClient.exchangeCode: No redirect_uri passed"),Promise.reject(new Error("A redirect_uri is required"))):(o.Log.error("TokenClient.exchangeCode: No code passed"),Promise.reject(new Error("A code is required")))},t.prototype.exchangeRefreshToken=function t(){var e=this,r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return(r=Object.assign({},r)).grant_type=r.grant_type||"refresh_token",r.client_id=r.client_id||this._settings.client_id,r.client_secret=r.client_secret||this._settings.client_secret,r.refresh_token?r.client_id?this._metadataService.getTokenEndpoint(!1).then(function(t){return o.Log.debug("TokenClient.exchangeRefreshToken: Received token endpoint"),e._jsonService.postForm(t,r).then(function(t){return o.Log.debug("TokenClient.exchangeRefreshToken: response received"),t})}):(o.Log.error("TokenClient.exchangeRefreshToken: No client_id passed"),Promise.reject(new Error("A client_id is required"))):(o.Log.error("TokenClient.exchangeRefreshToken: No refresh_token passed"),Promise.reject(new Error("A refresh_token is required")))},t}()},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ErrorResponse=void 0;var n=r(3);e.ErrorResponse=function(t){function e(){var r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},i=r.error,o=r.error_description,s=r.error_uri,a=r.state,u=r.session_state;if(function c(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,e),!i)throw n.Log.error("No error passed to ErrorResponse"),new Error("error");var f=function h(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}(this,t.call(this,o||i));return f.name="ErrorResponse",f.error=i,f.error_description=o,f.error_uri=s,f.state=a,f.session_state=u,f}return function r(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}(e,t),e}(Error)},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.SigninRequest=void 0;var n=r(3),i=r(55),o=r(143);e.SigninRequest=function(){function t(e){var r=e.url,s=e.client_id,a=e.redirect_uri,u=e.response_type,c=e.scope,f=e.authority,h=e.data,l=e.prompt,p=e.display,d=e.max_age,g=e.ui_locales,v=e.id_token_hint,y=e.login_hint,m=e.acr_values,_=e.resource,S=e.response_mode,b=e.request,w=e.request_uri,F=e.extraQueryParams,E=e.request_type,x=e.client_secret,A=e.extraTokenParams,k=e.skipUserInfo;if(function P(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),!r)throw n.Log.error("SigninRequest.ctor: No url passed"),new Error("url");if(!s)throw n.Log.error("SigninRequest.ctor: No client_id passed"),new Error("client_id");if(!a)throw n.Log.error("SigninRequest.ctor: No redirect_uri passed"),new Error("redirect_uri");if(!u)throw n.Log.error("SigninRequest.ctor: No response_type passed"),new Error("response_type");if(!c)throw n.Log.error("SigninRequest.ctor: No scope passed"),new Error("scope");if(!f)throw n.Log.error("SigninRequest.ctor: No authority passed"),new Error("authority");var C=t.isOidc(u),T=t.isCode(u);S||(S=t.isCode(u)?"query":null),this.state=new o.SigninState({nonce:C,data:h,client_id:s,authority:f,redirect_uri:a,code_verifier:T,request_type:E,response_mode:S,client_secret:x,scope:c,extraTokenParams:A,skipUserInfo:k}),r=i.UrlUtility.addQueryParam(r,"client_id",s),r=i.UrlUtility.addQueryParam(r,"redirect_uri",a),r=i.UrlUtility.addQueryParam(r,"response_type",u),r=i.UrlUtility.addQueryParam(r,"scope",c),r=i.UrlUtility.addQueryParam(r,"state",this.state.id),C&&(r=i.UrlUtility.addQueryParam(r,"nonce",this.state.nonce)),T&&(r=i.UrlUtility.addQueryParam(r,"code_challenge",this.state.code_challenge),r=i.UrlUtility.addQueryParam(r,"code_challenge_method","S256"));var R={prompt:l,display:p,max_age:d,ui_locales:g,id_token_hint:v,login_hint:y,acr_values:m,resource:_,request:b,request_uri:w,response_mode:S};for(var I in R)R[I]&&(r=i.UrlUtility.addQueryParam(r,I,R[I]));for(var O in F)r=i.UrlUtility.addQueryParam(r,O,F[O]);this.url=r}return t.isOidc=function t(e){return!!e.split(/\s+/g).filter(function(t){return"id_token"===t})[0]},t.isOAuth=function t(e){return!!e.split(/\s+/g).filter(function(t){return"token"===t})[0]},t.isCode=function t(e){return!!e.split(/\s+/g).filter(function(t){return"code"===t})[0]},t}()},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.SigninState=void 0;var n=function(){function t(t,e){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:{},n=r.nonce,i=r.authority,o=r.client_id,u=r.redirect_uri,c=r.code_verifier,f=r.response_mode,h=r.client_secret,l=r.scope,p=r.extraTokenParams,d=r.skipUserInfo;!function g(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,e);var v=function y(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}(this,t.call(this,arguments[0]));if(!0===n?v._nonce=(0,a.default)():n&&(v._nonce=n),!0===c?v._code_verifier=(0,a.default)()+(0,a.default)()+(0,a.default)():c&&(v._code_verifier=c),v.code_verifier){var m=s.JoseUtil.hashString(v.code_verifier,"SHA256");v._code_challenge=s.JoseUtil.hexToBase64Url(m)}return v._redirect_uri=u,v._authority=i,v._client_id=o,v._response_mode=f,v._client_secret=h,v._scope=l,v._extraTokenParams=p,v._skipUserInfo=d,v}return function r(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}(e,t),e.prototype.toStorageString=function t(){return i.Log.debug("SigninState.toStorageString"),JSON.stringify({id:this.id,data:this.data,created:this.created,request_type:this.request_type,nonce:this.nonce,code_verifier:this.code_verifier,redirect_uri:this.redirect_uri,authority:this.authority,client_id:this.client_id,response_mode:this.response_mode,client_secret:this.client_secret,scope:this.scope,extraTokenParams:this.extraTokenParams,skipUserInfo:this.skipUserInfo})},e.fromStorageString=function t(r){return i.Log.debug("SigninState.fromStorageString"),new e(JSON.parse(r))},n(e,[{key:"nonce",get:function t(){return this._nonce}},{key:"authority",get:function t(){return this._authority}},{key:"client_id",get:function t(){return this._client_id}},{key:"redirect_uri",get:function t(){return this._redirect_uri}},{key:"code_verifier",get:function t(){return this._code_verifier}},{key:"code_challenge",get:function t(){return this._code_challenge}},{key:"response_mode",get:function t(){return this._response_mode}},{key:"client_secret",get:function t(){return this._client_secret}},{key:"scope",get:function t(){return this._scope}},{key:"extraTokenParams",get:function t(){return this._extraTokenParams}},{key:"skipUserInfo",get:function t(){return this._skipUserInfo}}]),e}(o.State)},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function n(){return(0,i.default)().replace(/-/g,"")};var i=function o(t){return t&&t.__esModule?t:{default:t}}(r(365));t.exports=e.default},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.User=void 0;var n=function(){function t(t,e){for(var r=0;r0){var n=parseInt(Date.now()/1e3);this.expires_at=n+r}}},{key:"expired",get:function t(){var e=this.expires_in;if(void 0!==e)return e<=0}},{key:"scopes",get:function t(){return(this.scope||"").split(" ")}}]),t}()},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.AccessTokenEvents=void 0;var n=r(3),i=r(380);var o=60;e.AccessTokenEvents=function(){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=e.accessTokenExpiringNotificationTime,n=void 0===r?o:r,s=e.accessTokenExpiringTimer,a=void 0===s?new i.Timer("Access token expiring"):s,u=e.accessTokenExpiredTimer,c=void 0===u?new i.Timer("Access token expired"):u;!function f(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),this._accessTokenExpiringNotificationTime=n,this._accessTokenExpiring=a,this._accessTokenExpired=c}return t.prototype.load=function t(e){if(e.access_token&&void 0!==e.expires_in){var r=e.expires_in;if(n.Log.debug("AccessTokenEvents.load: access token present, remaining duration:",r),r>0){var i=r-this._accessTokenExpiringNotificationTime;i<=0&&(i=1),n.Log.debug("AccessTokenEvents.load: registering expiring timer in:",i),this._accessTokenExpiring.init(i)}else n.Log.debug("AccessTokenEvents.load: canceling existing expiring timer becase we're past expiration."),this._accessTokenExpiring.cancel();var o=r+1;n.Log.debug("AccessTokenEvents.load: registering expired timer in:",o),this._accessTokenExpired.init(o)}else this._accessTokenExpiring.cancel(),this._accessTokenExpired.cancel()},t.prototype.unload=function t(){n.Log.debug("AccessTokenEvents.unload: canceling existing access token timers"),this._accessTokenExpiring.cancel(),this._accessTokenExpired.cancel()},t.prototype.addAccessTokenExpiring=function t(e){this._accessTokenExpiring.addHandler(e)},t.prototype.removeAccessTokenExpiring=function t(e){this._accessTokenExpiring.removeHandler(e)},t.prototype.addAccessTokenExpired=function t(e){this._accessTokenExpired.addHandler(e)},t.prototype.removeAccessTokenExpired=function t(e){this._accessTokenExpired.removeHandler(e)},t}()},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.Event=void 0;var n=r(3);e.Event=function(){function t(e){!function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),this._name=e,this._callbacks=[]}return t.prototype.addHandler=function t(e){this._callbacks.push(e)},t.prototype.removeHandler=function t(e){var r=this._callbacks.findIndex(function(t){return t===e});r>=0&&this._callbacks.splice(r,1)},t.prototype.raise=function t(){n.Log.debug("Event: Raising event: "+this._name);for(var e=0;e1&&void 0!==arguments[1]?arguments[1]:o.CheckSessionIFrame;if(function s(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),!e)throw i.Log.error("SessionMonitor.ctor: No user manager passed to SessionMonitor"),new Error("userManager");this._userManager=e,this._CheckSessionIFrameCtor=n,this._userManager.events.addUserLoaded(this._start.bind(this)),this._userManager.events.addUserUnloaded(this._stop.bind(this)),this._userManager.getUser().then(function(t){t?r._start(t):r._settings.monitorAnonymousSession&&r._userManager.querySessionStatus().then(function(t){var e={session_state:t.session_state};t.sub&&t.sid&&(e.profile={sub:t.sub,sid:t.sid}),r._start(e)}).catch(function(t){i.Log.error("SessionMonitor ctor: error from querySessionStatus:",t.message)})}).catch(function(t){i.Log.error("SessionMonitor ctor: error from getUser:",t.message)})}return t.prototype._start=function t(e){var r=this,n=e.session_state;n&&(e.profile?(this._sub=e.profile.sub,this._sid=e.profile.sid,i.Log.debug("SessionMonitor._start: session_state:",n,", sub:",this._sub)):(this._sub=void 0,this._sid=void 0,i.Log.debug("SessionMonitor._start: session_state:",n,", anonymous user")),this._checkSessionIFrame?this._checkSessionIFrame.start(n):this._metadataService.getCheckSessionIframe().then(function(t){if(t){i.Log.debug("SessionMonitor._start: Initializing check session iframe");var e=r._client_id,o=r._checkSessionInterval,s=r._stopCheckSessionOnError;r._checkSessionIFrame=new r._CheckSessionIFrameCtor(r._callback.bind(r),e,t,o,s),r._checkSessionIFrame.load().then(function(){r._checkSessionIFrame.start(n)})}else i.Log.warn("SessionMonitor._start: No check session iframe found in the metadata")}).catch(function(t){i.Log.error("SessionMonitor._start: Error from getCheckSessionIframe:",t.message)}))},t.prototype._stop=function t(){var e=this;this._sub=void 0,this._sid=void 0,this._checkSessionIFrame&&(i.Log.debug("SessionMonitor._stop"),this._checkSessionIFrame.stop()),this._settings.monitorAnonymousSession&&this._userManager.querySessionStatus().then(function(t){var r={session_state:t.session_state};t.sub&&t.sid&&(r.profile={sub:t.sub,sid:t.sid}),e._start(r)}).catch(function(t){i.Log.error("SessionMonitor: error from querySessionStatus:",t.message)})},t.prototype._callback=function t(){var e=this;this._userManager.querySessionStatus().then(function(t){var r=!0;t?t.sub===e._sub?(r=!1,e._checkSessionIFrame.start(t.session_state),t.sid===e._sid?i.Log.debug("SessionMonitor._callback: Same sub still logged in at OP, restarting check session iframe; session_state:",t.session_state):(i.Log.debug("SessionMonitor._callback: Same sub still logged in at OP, session state has changed, restarting check session iframe; session_state:",t.session_state),e._userManager.events._raiseUserSessionChanged())):i.Log.debug("SessionMonitor._callback: Different subject signed into OP:",t.sub):i.Log.debug("SessionMonitor._callback: Subject no longer signed into OP"),r&&(e._sub?(i.Log.debug("SessionMonitor._callback: SessionMonitor._callback; raising signed out event"),e._userManager.events._raiseUserSignedOut()):(i.Log.debug("SessionMonitor._callback: SessionMonitor._callback; raising signed in event"),e._userManager.events._raiseUserSignedIn()))}).catch(function(t){e._sub&&(i.Log.debug("SessionMonitor._callback: Error calling queryCurrentSigninSession; raising signed out event",t.message),e._userManager.events._raiseUserSignedOut())})},n(t,[{key:"_settings",get:function t(){return this._userManager.settings}},{key:"_metadataService",get:function t(){return this._userManager.metadataService}},{key:"_client_id",get:function t(){return this._settings.client_id}},{key:"_checkSessionInterval",get:function t(){return this._settings.checkSessionInterval}},{key:"_stopCheckSessionOnError",get:function t(){return this._settings.stopCheckSessionOnError}}]),t}()},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.CheckSessionIFrame=void 0;var n=r(3);var i=2e3;e.CheckSessionIFrame=function(){function t(e,r,n,o){var s=!(arguments.length>4&&void 0!==arguments[4])||arguments[4];!function a(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),this._callback=e,this._client_id=r,this._url=n,this._interval=o||i,this._stopOnError=s;var u=n.indexOf("/",n.indexOf("//")+2);this._frame_origin=n.substr(0,u),this._frame=window.document.createElement("iframe"),this._frame.style.visibility="hidden",this._frame.style.position="absolute",this._frame.style.display="none",this._frame.style.width=0,this._frame.style.height=0,this._frame.src=n}return t.prototype.load=function t(){var e=this;return new Promise(function(t){e._frame.onload=function(){t()},window.document.body.appendChild(e._frame),e._boundMessageEvent=e._message.bind(e),window.addEventListener("message",e._boundMessageEvent,!1)})},t.prototype._message=function t(e){e.origin===this._frame_origin&&e.source===this._frame.contentWindow&&("error"===e.data?(n.Log.error("CheckSessionIFrame: error message from check session op iframe"),this._stopOnError&&this.stop()):"changed"===e.data?(n.Log.debug("CheckSessionIFrame: changed message from check session op iframe"),this.stop(),this._callback()):n.Log.debug("CheckSessionIFrame: "+e.data+" message from check session op iframe"))},t.prototype.start=function t(e){var r=this;if(this._session_state!==e){n.Log.debug("CheckSessionIFrame.start"),this.stop(),this._session_state=e;var i=function t(){r._frame.contentWindow.postMessage(r._client_id+" "+r._session_state,r._frame_origin)};i(),this._timer=window.setInterval(i,this._interval)}},t.prototype.stop=function t(){this._session_state=null,this._timer&&(n.Log.debug("CheckSessionIFrame.stop"),window.clearInterval(this._timer),this._timer=null)},t}()},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.TokenRevocationClient=void 0;var n=r(3),i=r(49),o=r(44);e.TokenRevocationClient=function(){function t(e){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:o.Global.XMLHttpRequest,s=arguments.length>2&&void 0!==arguments[2]?arguments[2]:i.MetadataService;if(function a(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),!e)throw n.Log.error("TokenRevocationClient.ctor: No settings provided"),new Error("No settings provided.");this._settings=e,this._XMLHttpRequestCtor=r,this._metadataService=new s(this._settings)}return t.prototype.revoke=function t(e,r){var i=this,o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"access_token";if(!e)throw n.Log.error("TokenRevocationClient.revoke: No token provided"),new Error("No token provided.");if("access_token"!==o&&"refresh_token"!=o)throw n.Log.error("TokenRevocationClient.revoke: Invalid token type"),new Error("Invalid token type.");return this._metadataService.getRevocationEndpoint().then(function(t){if(t){n.Log.debug("TokenRevocationClient.revoke: Revoking "+o);var s=i._settings.client_id,a=i._settings.client_secret;return i._revoke(t,s,a,e,o)}if(r)throw n.Log.error("TokenRevocationClient.revoke: Revocation not supported"),new Error("Revocation not supported")})},t.prototype._revoke=function t(e,r,i,o,s){var a=this;return new Promise(function(t,u){var c=new a._XMLHttpRequestCtor;c.open("POST",e),c.onload=function(){n.Log.debug("TokenRevocationClient.revoke: HTTP response received, status",c.status),200===c.status?t():u(Error(c.statusText+" ("+c.status+")"))},c.onerror=function(){n.Log.debug("TokenRevocationClient.revoke: Network Error."),u("Network Error")};var f="client_id="+encodeURIComponent(r);i&&(f+="&client_secret="+encodeURIComponent(i)),f+="&token_type_hint="+encodeURIComponent(s),f+="&token="+encodeURIComponent(o),c.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),c.send(f)})},t}()},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.CordovaPopupWindow=void 0;var n=function(){function t(t,e){for(var r=0;ro;)z(e,n=i[o++],r[n]);return e},G=function t(e){var r=L.call(this,e=b(e,!0));return!(this===B&&i(j,e)&&!i(U,e))&&(!(r||!i(this,e)||!i(j,e)||i(this,D)&&this[D][e])||r)},X=function t(e,r){if(e=S(e),r=b(r,!0),e!==B||!i(j,r)||i(U,r)){var n=P(e,r);return!n||!i(j,r)||i(e,D)&&e[D][r]||(n.enumerable=!0),n}},$=function t(e){for(var r,n=T(S(e)),o=[],s=0;n.length>s;)i(j,r=n[s++])||r==D||r==u||o.push(r);return o},Q=function t(e){for(var r,n=e===B,o=T(n?U:S(e)),s=[],a=0;o.length>a;)!i(j,r=o[a++])||n&&!i(B,r)||s.push(j[r]);return s};H||(a((R=function t(){if(this instanceof R)throw TypeError("Symbol is not a constructor!");var e=l(arguments.length>0?arguments[0]:void 0),r=function(t){this===B&&r.call(U,t),i(this,D)&&i(this[D],e)&&(this[D][e]=!1),q(this,e,w(1,t))};return o&&K&&q(B,e,{configurable:!0,set:r}),W(e)}).prototype,"toString",function t(){return this._k}),x.f=X,A.f=z,r(38).f=E.f=$,r(52).f=G,r(57).f=Q,o&&!r(30)&&a(B,"propertyIsEnumerable",G,!0),d.f=function(t){return W(p(t))}),s(s.G+s.W+s.F*!H,{Symbol:R});for(var Z="hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables".split(","),tt=0;Z.length>tt;)p(Z[tt++]);for(var et=k(p.store),rt=0;et.length>rt;)g(et[rt++]);s(s.S+s.F*!H,"Symbol",{for:function(t){return i(M,t+="")?M[t]:M[t]=R(t)},keyFor:function t(e){if(!J(e))throw TypeError(e+" is not a symbol!");for(var r in M)if(M[r]===e)return r},useSetter:function(){K=!0},useSimple:function(){K=!1}}),s(s.S+s.F*!H,"Object",{create:function t(e,r){return void 0===r?F(e):Y(F(e),r)},defineProperty:z,defineProperties:Y,getOwnPropertyDescriptor:X,getOwnPropertyNames:$,getOwnPropertySymbols:Q}),I&&s(s.S+s.F*(!H||c(function(){var t=R();return"[null]"!=O([t])||"{}"!=O({a:t})||"{}"!=O(Object(t))})),"JSON",{stringify:function t(e){for(var r,n,i=[e],o=1;arguments.length>o;)i.push(arguments[o++]);if(n=r=i[1],(_(r)||void 0!==e)&&!J(e))return y(r)||(r=function(t,e){if("function"==typeof n&&(e=n.call(this,t,e)),!J(e))return e}),i[1]=r,O.apply(I,i)}}),R.prototype[N]||r(12)(R.prototype,N,R.prototype.valueOf),h(R,"Symbol"),h(Math,"Math",!0),h(n.JSON,"JSON",!0)},function(t,e,r){t.exports=r(50)("native-function-to-string",Function.toString)},function(t,e,r){var n=r(35),i=r(57),o=r(52);t.exports=function(t){var e=n(t),r=i.f;if(r)for(var s,a=r(t),u=o.f,c=0;a.length>c;)u.call(t,s=a[c++])&&e.push(s);return e}},function(t,e,r){var n=r(0);n(n.S,"Object",{create:r(37)})},function(t,e,r){var n=r(0);n(n.S+n.F*!r(8),"Object",{defineProperty:r(9).f})},function(t,e,r){var n=r(0);n(n.S+n.F*!r(8),"Object",{defineProperties:r(106)})},function(t,e,r){var n=r(16),i=r(17).f;r(26)("getOwnPropertyDescriptor",function(){return function t(e,r){return i(n(e),r)}})},function(t,e,r){var n=r(10),i=r(18);r(26)("getPrototypeOf",function(){return function t(e){return i(n(e))}})},function(t,e,r){var n=r(10),i=r(35);r(26)("keys",function(){return function t(e){return i(n(e))}})},function(t,e,r){r(26)("getOwnPropertyNames",function(){return r(107).f})},function(t,e,r){var n=r(5),i=r(31).onFreeze;r(26)("freeze",function(t){return function e(r){return t&&n(r)?t(i(r)):r}})},function(t,e,r){var n=r(5),i=r(31).onFreeze;r(26)("seal",function(t){return function e(r){return t&&n(r)?t(i(r)):r}})},function(t,e,r){var n=r(5),i=r(31).onFreeze;r(26)("preventExtensions",function(t){return function e(r){return t&&n(r)?t(i(r)):r}})},function(t,e,r){var n=r(5);r(26)("isFrozen",function(t){return function e(r){return!n(r)||!!t&&t(r)}})},function(t,e,r){var n=r(5);r(26)("isSealed",function(t){return function e(r){return!n(r)||!!t&&t(r)}})},function(t,e,r){var n=r(5);r(26)("isExtensible",function(t){return function e(r){return!!n(r)&&(!t||t(r))}})},function(t,e,r){var n=r(0);n(n.S+n.F,"Object",{assign:r(108)})},function(t,e,r){var n=r(0);n(n.S,"Object",{is:r(109)})},function(t,e,r){var n=r(0);n(n.S,"Object",{setPrototypeOf:r(77).set})},function(t,e,r){"use strict";var n=r(46),i={};i[r(6)("toStringTag")]="z",i+""!="[object z]"&&r(13)(Object.prototype,"toString",function t(){return"[object "+n(this)+"]"},!0)},function(t,e,r){var n=r(0);n(n.P,"Function",{bind:r(110)})},function(t,e,r){var n=r(9).f,i=Function.prototype,o=/^\s*function ([^ (]*)/;"name"in i||r(8)&&n(i,"name",{configurable:!0,get:function(){try{return(""+this).match(o)[1]}catch(t){return""}}})},function(t,e,r){"use strict";var n=r(5),i=r(18),o=r(6)("hasInstance"),s=Function.prototype;o in s||r(9).f(s,o,{value:function(t){if("function"!=typeof this||!n(t))return!1;if(!n(this.prototype))return t instanceof this;for(;t=i(t);)if(this.prototype===t)return!0;return!1}})},function(t,e,r){var n=r(0),i=r(112);n(n.G+n.F*(parseInt!=i),{parseInt:i})},function(t,e,r){var n=r(0),i=r(113);n(n.G+n.F*(parseFloat!=i),{parseFloat:i})},function(t,e,r){"use strict";var n=r(2),i=r(15),o=r(21),s=r(79),a=r(24),u=r(4),c=r(38).f,f=r(17).f,h=r(9).f,l=r(47).trim,p=n.Number,d=p,g=p.prototype,v="Number"==o(r(37)(g)),y="trim"in String.prototype,m=function(t){var e=a(t,!1);if("string"==typeof e&&e.length>2){var r,n,i,o=(e=y?e.trim():l(e,3)).charCodeAt(0);if(43===o||45===o){if(88===(r=e.charCodeAt(2))||120===r)return NaN}else if(48===o){switch(e.charCodeAt(1)){case 66:case 98:n=2,i=49;break;case 79:case 111:n=8,i=55;break;default:return+e}for(var s,u=e.slice(2),c=0,f=u.length;ci)return NaN;return parseInt(u,n)}}return+e};if(!p(" 0o1")||!p("0b1")||p("+0x1")){p=function t(e){var r=arguments.length<1?0:e,n=this;return n instanceof p&&(v?u(function(){g.valueOf.call(n)}):"Number"!=o(n))?s(new d(m(r)),n,p):m(r)};for(var _,S=r(8)?c(d):"MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger".split(","),b=0;S.length>b;b++)i(d,_=S[b])&&!i(p,_)&&h(p,_,f(d,_));p.prototype=g,g.constructor=p,r(13)(n,"Number",p)}},function(t,e,r){"use strict";var n=r(0),i=r(22),o=r(114),s=r(80),a=1..toFixed,u=Math.floor,c=[0,0,0,0,0,0],f="Number.toFixed: incorrect invocation!",h=function(t,e){for(var r=-1,n=e;++r<6;)n+=t*c[r],c[r]=n%1e7,n=u(n/1e7)},l=function(t){for(var e=6,r=0;--e>=0;)r+=c[e],c[e]=u(r/t),r=r%t*1e7},p=function(){for(var t=6,e="";--t>=0;)if(""!==e||0===t||0!==c[t]){var r=String(c[t]);e=""===e?r:e+s.call("0",7-r.length)+r}return e},d=function(t,e,r){return 0===e?r:e%2==1?d(t,e-1,r*t):d(t*t,e/2,r)};n(n.P+n.F*(!!a&&("0.000"!==8e-5.toFixed(3)||"1"!==.9.toFixed(0)||"1.25"!==1.255.toFixed(2)||"1000000000000000128"!==(0xde0b6b3a7640080).toFixed(0))||!r(4)(function(){a.call({})})),"Number",{toFixed:function t(e){var r,n,a,u,c=o(this,f),g=i(e),v="",y="0";if(g<0||g>20)throw RangeError(f);if(c!=c)return"NaN";if(c<=-1e21||c>=1e21)return String(c);if(c<0&&(v="-",c=-c),c>1e-21)if(n=(r=function(t){for(var e=0,r=t;r>=4096;)e+=12,r/=4096;for(;r>=2;)e+=1,r/=2;return e}(c*d(2,69,1))-69)<0?c*d(2,-r,1):c/d(2,r,1),n*=4503599627370496,(r=52-r)>0){for(h(0,n),a=g;a>=7;)h(1e7,0),a-=7;for(h(d(10,a,1),0),a=r-1;a>=23;)l(1<<23),a-=23;l(1<0?v+((u=y.length)<=g?"0."+s.call("0",g-u)+y:y.slice(0,u-g)+"."+y.slice(u-g)):v+y}})},function(t,e,r){"use strict";var n=r(0),i=r(4),o=r(114),s=1..toPrecision;n(n.P+n.F*(i(function(){return"1"!==s.call(1,void 0)})||!i(function(){s.call({})})),"Number",{toPrecision:function t(e){var r=o(this,"Number#toPrecision: incorrect invocation!");return void 0===e?s.call(r):s.call(r,e)}})},function(t,e,r){var n=r(0);n(n.S,"Number",{EPSILON:Math.pow(2,-52)})},function(t,e,r){var n=r(0),i=r(2).isFinite;n(n.S,"Number",{isFinite:function t(e){return"number"==typeof e&&i(e)}})},function(t,e,r){var n=r(0);n(n.S,"Number",{isInteger:r(115)})},function(t,e,r){var n=r(0);n(n.S,"Number",{isNaN:function t(e){return e!=e}})},function(t,e,r){var n=r(0),i=r(115),o=Math.abs;n(n.S,"Number",{isSafeInteger:function t(e){return i(e)&&o(e)<=9007199254740991}})},function(t,e,r){var n=r(0);n(n.S,"Number",{MAX_SAFE_INTEGER:9007199254740991})},function(t,e,r){var n=r(0);n(n.S,"Number",{MIN_SAFE_INTEGER:-9007199254740991})},function(t,e,r){var n=r(0),i=r(113);n(n.S+n.F*(Number.parseFloat!=i),"Number",{parseFloat:i})},function(t,e,r){var n=r(0),i=r(112);n(n.S+n.F*(Number.parseInt!=i),"Number",{parseInt:i})},function(t,e,r){var n=r(0),i=r(116),o=Math.sqrt,s=Math.acosh;n(n.S+n.F*!(s&&710==Math.floor(s(Number.MAX_VALUE))&&s(1/0)==1/0),"Math",{acosh:function t(e){return(e=+e)<1?NaN:e>94906265.62425156?Math.log(e)+Math.LN2:i(e-1+o(e-1)*o(e+1))}})},function(t,e,r){var n=r(0),i=Math.asinh;n(n.S+n.F*!(i&&1/i(0)>0),"Math",{asinh:function t(e){return isFinite(e=+e)&&0!=e?e<0?-t(-e):Math.log(e+Math.sqrt(e*e+1)):e}})},function(t,e,r){var n=r(0),i=Math.atanh;n(n.S+n.F*!(i&&1/i(-0)<0),"Math",{atanh:function t(e){return 0==(e=+e)?e:Math.log((1+e)/(1-e))/2}})},function(t,e,r){var n=r(0),i=r(81);n(n.S,"Math",{cbrt:function t(e){return i(e=+e)*Math.pow(Math.abs(e),1/3)}})},function(t,e,r){var n=r(0);n(n.S,"Math",{clz32:function t(e){return(e>>>=0)?31-Math.floor(Math.log(e+.5)*Math.LOG2E):32}})},function(t,e,r){var n=r(0),i=Math.exp;n(n.S,"Math",{cosh:function t(e){return(i(e=+e)+i(-e))/2}})},function(t,e,r){var n=r(0),i=r(82);n(n.S+n.F*(i!=Math.expm1),"Math",{expm1:i})},function(t,e,r){var n=r(0);n(n.S,"Math",{fround:r(117)})},function(t,e,r){var n=r(0),i=Math.abs;n(n.S,"Math",{hypot:function t(e,r){for(var n,o,s=0,a=0,u=arguments.length,c=0;a0?(o=n/c)*o:n;return c===1/0?1/0:c*Math.sqrt(s)}})},function(t,e,r){var n=r(0),i=Math.imul;n(n.S+n.F*r(4)(function(){return-5!=i(4294967295,5)||2!=i.length}),"Math",{imul:function t(e,r){var n=+e,i=+r,o=65535&n,s=65535&i;return 0|o*s+((65535&n>>>16)*s+o*(65535&i>>>16)<<16>>>0)}})},function(t,e,r){var n=r(0);n(n.S,"Math",{log10:function t(e){return Math.log(e)*Math.LOG10E}})},function(t,e,r){var n=r(0);n(n.S,"Math",{log1p:r(116)})},function(t,e,r){var n=r(0);n(n.S,"Math",{log2:function t(e){return Math.log(e)/Math.LN2}})},function(t,e,r){var n=r(0);n(n.S,"Math",{sign:r(81)})},function(t,e,r){var n=r(0),i=r(82),o=Math.exp;n(n.S+n.F*r(4)(function(){return-2e-17!=!Math.sinh(-2e-17)}),"Math",{sinh:function t(e){return Math.abs(e=+e)<1?(i(e)-i(-e))/2:(o(e-1)-o(-e-1))*(Math.E/2)}})},function(t,e,r){var n=r(0),i=r(82),o=Math.exp;n(n.S,"Math",{tanh:function t(e){var r=i(e=+e),n=i(-e);return r==1/0?1:n==1/0?-1:(r-n)/(o(e)+o(-e))}})},function(t,e,r){var n=r(0);n(n.S,"Math",{trunc:function t(e){return(e>0?Math.floor:Math.ceil)(e)}})},function(t,e,r){var n=r(0),i=r(36),o=String.fromCharCode,s=String.fromCodePoint;n(n.S+n.F*(!!s&&1!=s.length),"String",{fromCodePoint:function t(e){for(var r,n=[],s=arguments.length,a=0;s>a;){if(r=+arguments[a++],i(r,1114111)!==r)throw RangeError(r+" is not a valid code point");n.push(r<65536?o(r):o(55296+((r-=65536)>>10),r%1024+56320))}return n.join("")}})},function(t,e,r){var n=r(0),i=r(16),o=r(7);n(n.S,"String",{raw:function t(e){for(var r=i(e.raw),n=o(r.length),s=arguments.length,a=[],u=0;n>u;)a.push(String(r[u++])),u=e.length?{value:void 0,done:!0}:(t=n(e,r),this._i+=t.length,{value:t,done:!1})})},function(t,e,r){"use strict";var n=r(0),i=r(59)(!1);n(n.P,"String",{codePointAt:function t(e){return i(this,e)}})},function(t,e,r){"use strict";var n=r(0),i=r(7),o=r(85),s="".endsWith;n(n.P+n.F*r(86)("endsWith"),"String",{endsWith:function t(e){var r=o(this,e,"endsWith"),n=arguments.length>1?arguments[1]:void 0,a=i(r.length),u=void 0===n?a:Math.min(i(n),a),c=String(e);return s?s.call(r,c,u):r.slice(u-c.length,u)===c}})},function(t,e,r){"use strict";var n=r(0),i=r(85);n(n.P+n.F*r(86)("includes"),"String",{includes:function t(e){return!!~i(this,e,"includes").indexOf(e,arguments.length>1?arguments[1]:void 0)}})},function(t,e,r){var n=r(0);n(n.P,"String",{repeat:r(80)})},function(t,e,r){"use strict";var n=r(0),i=r(7),o=r(85),s="".startsWith;n(n.P+n.F*r(86)("startsWith"),"String",{startsWith:function t(e){var r=o(this,e,"startsWith"),n=i(Math.min(arguments.length>1?arguments[1]:void 0,r.length)),a=String(e);return s?s.call(r,a,n):r.slice(n,n+a.length)===a}})},function(t,e,r){"use strict";r(14)("anchor",function(t){return function e(r){return t(this,"a","name",r)}})},function(t,e,r){"use strict";r(14)("big",function(t){return function e(){return t(this,"big","","")}})},function(t,e,r){"use strict";r(14)("blink",function(t){return function e(){return t(this,"blink","","")}})},function(t,e,r){"use strict";r(14)("bold",function(t){return function e(){return t(this,"b","","")}})},function(t,e,r){"use strict";r(14)("fixed",function(t){return function e(){return t(this,"tt","","")}})},function(t,e,r){"use strict";r(14)("fontcolor",function(t){return function e(r){return t(this,"font","color",r)}})},function(t,e,r){"use strict";r(14)("fontsize",function(t){return function e(r){return t(this,"font","size",r)}})},function(t,e,r){"use strict";r(14)("italics",function(t){return function e(){return t(this,"i","","")}})},function(t,e,r){"use strict";r(14)("link",function(t){return function e(r){return t(this,"a","href",r)}})},function(t,e,r){"use strict";r(14)("small",function(t){return function e(){return t(this,"small","","")}})},function(t,e,r){"use strict";r(14)("strike",function(t){return function e(){return t(this,"strike","","")}})},function(t,e,r){"use strict";r(14)("sub",function(t){return function e(){return t(this,"sub","","")}})},function(t,e,r){"use strict";r(14)("sup",function(t){return function e(){return t(this,"sup","","")}})},function(t,e,r){var n=r(0);n(n.S,"Date",{now:function(){return(new Date).getTime()}})},function(t,e,r){"use strict";var n=r(0),i=r(10),o=r(24);n(n.P+n.F*r(4)(function(){return null!==new Date(NaN).toJSON()||1!==Date.prototype.toJSON.call({toISOString:function(){return 1}})}),"Date",{toJSON:function t(e){var r=i(this),n=o(r);return"number"!=typeof n||isFinite(n)?r.toISOString():null}})},function(t,e,r){var n=r(0),i=r(234);n(n.P+n.F*(Date.prototype.toISOString!==i),"Date",{toISOString:i})},function(t,e,r){"use strict";var n=r(4),i=Date.prototype.getTime,o=Date.prototype.toISOString,s=function(t){return t>9?t:"0"+t};t.exports=n(function(){return"0385-07-25T07:06:39.999Z"!=o.call(new Date(-5e13-1))})||!n(function(){o.call(new Date(NaN))})?function t(){if(!isFinite(i.call(this)))throw RangeError("Invalid time value");var e=this,r=e.getUTCFullYear(),n=e.getUTCMilliseconds(),o=r<0?"-":r>9999?"+":"";return o+("00000"+Math.abs(r)).slice(o?-6:-4)+"-"+s(e.getUTCMonth()+1)+"-"+s(e.getUTCDate())+"T"+s(e.getUTCHours())+":"+s(e.getUTCMinutes())+":"+s(e.getUTCSeconds())+"."+(n>99?n:"0"+s(n))+"Z"}:o},function(t,e,r){var n=Date.prototype,i=n.toString,o=n.getTime;new Date(NaN)+""!="Invalid Date"&&r(13)(n,"toString",function t(){var e=o.call(this);return e==e?i.call(this):"Invalid Date"})},function(t,e,r){var n=r(6)("toPrimitive"),i=Date.prototype;n in i||r(12)(i,n,r(237))},function(t,e,r){"use strict";var n=r(1),i=r(24);t.exports=function(t){if("string"!==t&&"number"!==t&&"default"!==t)throw TypeError("Incorrect hint");return i(n(this),"number"!=t)}},function(t,e,r){var n=r(0);n(n.S,"Array",{isArray:r(58)})},function(t,e,r){"use strict";var n=r(20),i=r(0),o=r(10),s=r(118),a=r(87),u=r(7),c=r(88),f=r(89);i(i.S+i.F*!r(61)(function(t){Array.from(t)}),"Array",{from:function t(e){var r,i,h,l,p=o(e),d="function"==typeof this?this:Array,g=arguments.length,v=g>1?arguments[1]:void 0,y=void 0!==v,m=0,_=f(p);if(y&&(v=n(v,g>2?arguments[2]:void 0,2)),void 0==_||d==Array&&a(_))for(i=new d(r=u(p.length));r>m;m++)c(i,m,y?v(p[m],m):p[m]);else for(l=_.call(p),i=new d;!(h=l.next()).done;m++)c(i,m,y?s(l,v,[h.value,m],!0):h.value);return i.length=m,i}})},function(t,e,r){"use strict";var n=r(0),i=r(88);n(n.S+n.F*r(4)(function(){function t(){}return!(Array.of.call(t)instanceof t)}),"Array",{of:function t(){for(var e=0,r=arguments.length,n=new("function"==typeof this?this:Array)(r);r>e;)i(n,e,arguments[e++]);return n.length=r,n}})},function(t,e,r){"use strict";var n=r(0),i=r(16),o=[].join;n(n.P+n.F*(r(51)!=Object||!r(23)(o)),"Array",{join:function t(e){return o.call(i(this),void 0===e?",":e)}})},function(t,e,r){"use strict";var n=r(0),i=r(76),o=r(21),s=r(36),a=r(7),u=[].slice;n(n.P+n.F*r(4)(function(){i&&u.call(i)}),"Array",{slice:function t(e,r){var n=a(this.length),i=o(this);if(r=void 0===r?n:r,"Array"==i)return u.call(this,e,r);for(var c=s(e,n),f=s(r,n),h=a(f-c),l=new Array(h),p=0;p1&&(c=Math.min(c,o(arguments[1]))),c<0&&(c=n+c);c>=0;c--)if(c in r&&r[c]===e)return c||0;return-1}})},function(t,e,r){var n=r(0);n(n.P,"Array",{copyWithin:r(120)}),r(32)("copyWithin")},function(t,e,r){var n=r(0);n(n.P,"Array",{fill:r(91)}),r(32)("fill")},function(t,e,r){"use strict";var n=r(0),i=r(27)(5),o=!0;"find"in[]&&Array(1).find(function(){o=!1}),n(n.P+n.F*o,"Array",{find:function t(e){return i(this,e,arguments.length>1?arguments[1]:void 0)}}),r(32)("find")},function(t,e,r){"use strict";var n=r(0),i=r(27)(6),o="findIndex",s=!0;o in[]&&Array(1)[o](function(){s=!1}),n(n.P+n.F*s,"Array",{findIndex:function t(e){return i(this,e,arguments.length>1?arguments[1]:void 0)}}),r(32)(o)},function(t,e,r){r(39)("Array")},function(t,e,r){var n=r(2),i=r(79),o=r(9).f,s=r(38).f,a=r(60),u=r(53),c=n.RegExp,f=c,h=c.prototype,l=/a/g,p=/a/g,d=new c(l)!==l;if(r(8)&&(!d||r(4)(function(){return p[r(6)("match")]=!1,c(l)!=l||c(p)==p||"/a/i"!=c(l,"i")}))){c=function t(e,r){var n=this instanceof c,o=a(e),s=void 0===r;return!n&&o&&e.constructor===c&&s?e:i(d?new f(o&&!s?e.source:e,r):f((o=e instanceof c)?e.source:e,o&&s?u.call(e):r),n?this:h,c)};for(var g=function(t){t in c||o(c,t,{configurable:!0,get:function(){return f[t]},set:function(e){f[t]=e}})},v=s(f),y=0;v.length>y;)g(v[y++]);h.constructor=c,c.prototype=h,r(13)(n,"RegExp",c)}r(39)("RegExp")},function(t,e,r){"use strict";r(123);var n=r(1),i=r(53),o=r(8),s=/./.toString,a=function(t){r(13)(RegExp.prototype,"toString",t,!0)};r(4)(function(){return"/a/b"!=s.call({source:"a",flags:"b"})})?a(function t(){var e=n(this);return"/".concat(e.source,"/","flags"in e?e.flags:!o&&e instanceof RegExp?i.call(e):void 0)}):"toString"!=s.name&&a(function t(){return s.call(this)})},function(t,e,r){"use strict";var n=r(1),i=r(7),o=r(94),s=r(62);r(63)("match",1,function(t,e,r,a){return[function r(n){var i=t(this),o=void 0==n?void 0:n[e];return void 0!==o?o.call(n,i):new RegExp(n)[e](String(i))},function(t){var e=a(r,t,this);if(e.done)return e.value;var u=n(t),c=String(this);if(!u.global)return s(u,c);var f=u.unicode;u.lastIndex=0;for(var h,l=[],p=0;null!==(h=s(u,c));){var d=String(h[0]);l[p]=d,""===d&&(u.lastIndex=o(c,i(u.lastIndex),f)),p++}return 0===p?null:l}]})},function(t,e,r){"use strict";var n=r(1),i=r(10),o=r(7),s=r(22),a=r(94),u=r(62),c=Math.max,f=Math.min,h=Math.floor,l=/\$([$&`']|\d\d?|<[^>]*>)/g,p=/\$([$&`']|\d\d?)/g;r(63)("replace",2,function(t,e,r,d){return[function n(i,o){var s=t(this),a=void 0==i?void 0:i[e];return void 0!==a?a.call(i,s,o):r.call(String(s),i,o)},function(t,e){var i=d(r,t,this,e);if(i.done)return i.value;var h=n(t),l=String(this),p="function"==typeof e;p||(e=String(e));var v=h.global;if(v){var y=h.unicode;h.lastIndex=0}for(var m=[];;){var _=u(h,l);if(null===_)break;if(m.push(_),!v)break;""===String(_[0])&&(h.lastIndex=a(l,o(h.lastIndex),y))}for(var S,b="",w=0,F=0;F=w&&(b+=l.slice(w,x)+T,w=x+E.length)}return b+l.slice(w)}];function g(t,e,n,o,s,a){var u=n+t.length,c=o.length,f=p;return void 0!==s&&(s=i(s),f=l),r.call(a,f,function(r,i){var a;switch(i.charAt(0)){case"$":return"$";case"&":return t;case"`":return e.slice(0,n);case"'":return e.slice(u);case"<":a=s[i.slice(1,-1)];break;default:var f=+i;if(0===f)return r;if(f>c){var l=h(f/10);return 0===l?r:l<=c?void 0===o[l-1]?i.charAt(1):o[l-1]+i.charAt(1):r}a=o[f-1]}return void 0===a?"":a})}})},function(t,e,r){"use strict";var n=r(1),i=r(109),o=r(62);r(63)("search",1,function(t,e,r,s){return[function r(n){var i=t(this),o=void 0==n?void 0:n[e];return void 0!==o?o.call(n,i):new RegExp(n)[e](String(i))},function(t){var e=s(r,t,this);if(e.done)return e.value;var a=n(t),u=String(this),c=a.lastIndex;i(c,0)||(a.lastIndex=0);var f=o(a,u);return i(a.lastIndex,c)||(a.lastIndex=c),null===f?-1:f.index}]})},function(t,e,r){"use strict";var n=r(60),i=r(1),o=r(54),s=r(94),a=r(7),u=r(62),c=r(93),f=r(4),h=Math.min,l=[].push,p=!f(function(){RegExp(4294967295,"y")});r(63)("split",2,function(t,e,r,f){var d;return d="c"=="abbc".split(/(b)*/)[1]||4!="test".split(/(?:)/,-1).length||2!="ab".split(/(?:ab)*/).length||4!=".".split(/(.?)(.?)/).length||".".split(/()()/).length>1||"".split(/.?/).length?function(t,e){var i=String(this);if(void 0===t&&0===e)return[];if(!n(t))return r.call(i,t,e);for(var o,s,a,u=[],f=(t.ignoreCase?"i":"")+(t.multiline?"m":"")+(t.unicode?"u":"")+(t.sticky?"y":""),h=0,p=void 0===e?4294967295:e>>>0,d=new RegExp(t.source,f+"g");(o=c.call(d,i))&&!((s=d.lastIndex)>h&&(u.push(i.slice(h,o.index)),o.length>1&&o.index=p));)d.lastIndex===o.index&&d.lastIndex++;return h===i.length?!a&&d.test("")||u.push(""):u.push(i.slice(h)),u.length>p?u.slice(0,p):u}:"0".split(void 0,0).length?function(t,e){return void 0===t&&0===e?[]:r.call(this,t,e)}:r,[function r(n,i){var o=t(this),s=void 0==n?void 0:n[e];return void 0!==s?s.call(n,o,i):d.call(String(o),n,i)},function(t,e){var n=f(d,t,this,e,d!==r);if(n.done)return n.value;var c=i(t),l=String(this),g=o(c,RegExp),v=c.unicode,y=(c.ignoreCase?"i":"")+(c.multiline?"m":"")+(c.unicode?"u":"")+(p?"y":"g"),m=new g(p?c:"^(?:"+c.source+")",y),_=void 0===e?4294967295:e>>>0;if(0===_)return[];if(0===l.length)return null===u(m,l)?[l]:[];for(var S=0,b=0,w=[];bo;)s(r[o++]);t._c=[],t._n=!1,e&&!t._h&&D(t)})}},D=function(t){y.call(u,function(){var e,r,n,i=t._v,o=N(t);if(o&&(e=S(function(){P?E.emit("unhandledRejection",i,t):(r=u.onunhandledrejection)?r({promise:t,reason:i}):(n=u.console)&&n.error&&n.error("Unhandled promise rejection",i)}),t._h=P||N(t)?2:1),t._a=void 0,o&&e.e)throw e.v})},N=function(t){return 1!==t._h&&0===(t._a||t._c).length},L=function(t){y.call(u,function(){var e;P?E.emit("rejectionHandled",t):(e=u.onrejectionhandled)&&e({promise:t,reason:t._v})})},M=function(t){var e=this;e._d||(e._d=!0,(e=e._w||e)._v=t,e._s=2,e._a||(e._a=e._c.slice()),O(e,!0))},j=function(t){var e,r=this;if(!r._d){r._d=!0,r=r._w||r;try{if(r===t)throw F("Promise can't be resolved itself");(e=I(t))?m(function(){var n={_w:r,_d:!1};try{e.call(t,c(j,n,1),c(M,n,1))}catch(t){M.call(n,t)}}):(r._v=t,r._s=1,O(r,!1))}catch(t){M.call({_w:r,_d:!1},t)}}};R||(k=function t(e){d(this,k,"Promise","_h"),p(e),n.call(this);try{e(c(j,this,1),c(M,this,1))}catch(t){M.call(this,t)}},(n=function t(e){this._c=[],this._a=void 0,this._s=0,this._d=!1,this._v=void 0,this._h=0,this._n=!1}).prototype=r(42)(k.prototype,{then:function t(e,r){var n=T(v(this,k));return n.ok="function"!=typeof e||e,n.fail="function"==typeof r&&r,n.domain=P?E.domain:void 0,this._c.push(n),this._a&&this._a.push(n),this._s&&O(this,!1),n.promise},catch:function(t){return this.then(void 0,t)}}),o=function(){var t=new n;this.promise=t,this.resolve=c(j,t,1),this.reject=c(M,t,1)},_.f=T=function(t){return t===k||t===s?new o(t):i(t)}),h(h.G+h.W+h.F*!R,{Promise:k}),r(45)(k,"Promise"),r(39)("Promise"),s=r(19).Promise,h(h.S+h.F*!R,"Promise",{reject:function t(e){var r=T(this);return(0,r.reject)(e),r.promise}}),h(h.S+h.F*(a||!R),"Promise",{resolve:function t(e){return w(a&&this===s?k:this,e)}}),h(h.S+h.F*!(R&&r(61)(function(t){k.all(t).catch(C)})),"Promise",{all:function t(e){var r=this,n=T(r),i=n.resolve,o=n.reject,s=S(function(){var t=[],n=0,s=1;g(e,!1,function(e){var a=n++,u=!1;t.push(void 0),s++,r.resolve(e).then(function(e){u||(u=!0,t[a]=e,--s||i(t))},o)}),--s||i(t)});return s.e&&o(s.v),n.promise},race:function t(e){var r=this,n=T(r),i=n.reject,o=S(function(){g(e,!1,function(t){r.resolve(t).then(n.resolve,i)})});return o.e&&i(o.v),n.promise}})},function(t,e,r){"use strict";var n=r(130),i=r(43);r(65)("WeakSet",function(t){return function e(){return t(this,arguments.length>0?arguments[0]:void 0)}},{add:function t(e){return n.def(i(this,"WeakSet"),e,!0)}},n,!1,!0)},function(t,e,r){"use strict";var n=r(0),i=r(66),o=r(98),s=r(1),a=r(36),u=r(7),c=r(5),f=r(2).ArrayBuffer,h=r(54),l=o.ArrayBuffer,p=o.DataView,d=i.ABV&&f.isView,g=l.prototype.slice,v=i.VIEW;n(n.G+n.W+n.F*(f!==l),{ArrayBuffer:l}),n(n.S+n.F*!i.CONSTR,"ArrayBuffer",{isView:function t(e){return d&&d(e)||c(e)&&v in e}}),n(n.P+n.U+n.F*r(4)(function(){return!new l(2).slice(1,void 0).byteLength}),"ArrayBuffer",{slice:function t(e,r){if(void 0!==g&&void 0===r)return g.call(s(this),e);for(var n=s(this).byteLength,i=a(e,n),o=a(void 0===r?n:r,n),c=new(h(this,l))(u(o-i)),f=new p(this),d=new p(c),v=0;i=e.length)return{value:void 0,done:!0}}while(!((t=e[this._i++])in this._t));return{value:t,done:!1}}),n(n.S,"Reflect",{enumerate:function t(e){return new o(e)}})},function(t,e,r){var n=r(17),i=r(18),o=r(15),s=r(0),a=r(5),u=r(1);s(s.S,"Reflect",{get:function t(e,r){var s,c,f=arguments.length<3?e:arguments[2];return u(e)===f?e[r]:(s=n.f(e,r))?o(s,"value")?s.value:void 0!==s.get?s.get.call(f):void 0:a(c=i(e))?t(c,r,f):void 0}})},function(t,e,r){var n=r(17),i=r(0),o=r(1);i(i.S,"Reflect",{getOwnPropertyDescriptor:function t(e,r){return n.f(o(e),r)}})},function(t,e,r){var n=r(0),i=r(18),o=r(1);n(n.S,"Reflect",{getPrototypeOf:function t(e){return i(o(e))}})},function(t,e,r){var n=r(0);n(n.S,"Reflect",{has:function t(e,r){return r in e}})},function(t,e,r){var n=r(0),i=r(1),o=Object.isExtensible;n(n.S,"Reflect",{isExtensible:function t(e){return i(e),!o||o(e)}})},function(t,e,r){var n=r(0);n(n.S,"Reflect",{ownKeys:r(132)})},function(t,e,r){var n=r(0),i=r(1),o=Object.preventExtensions;n(n.S,"Reflect",{preventExtensions:function t(e){i(e);try{return o&&o(e),!0}catch(t){return!1}}})},function(t,e,r){var n=r(9),i=r(17),o=r(18),s=r(15),a=r(0),u=r(33),c=r(1),f=r(5);a(a.S,"Reflect",{set:function t(e,r,a){var h,l,p=arguments.length<4?e:arguments[3],d=i.f(c(e),r);if(!d){if(f(l=o(e)))return t(l,r,a,p);d=u(0)}if(s(d,"value")){if(!1===d.writable||!f(p))return!1;if(h=i.f(p,r)){if(h.get||h.set||!1===h.writable)return!1;h.value=a,n.f(p,r,h)}else n.f(p,r,u(0,a));return!0}return void 0!==d.set&&(d.set.call(p,a),!0)}})},function(t,e,r){var n=r(0),i=r(77);i&&n(n.S,"Reflect",{setPrototypeOf:function t(e,r){i.check(e,r);try{return i.set(e,r),!0}catch(t){return!1}}})},function(t,e,r){"use strict";var n=r(0),i=r(56)(!0);n(n.P,"Array",{includes:function t(e){return i(this,e,arguments.length>1?arguments[1]:void 0)}}),r(32)("includes")},function(t,e,r){"use strict";var n=r(0),i=r(133),o=r(10),s=r(7),a=r(11),u=r(90);n(n.P,"Array",{flatMap:function t(e){var r,n,c=o(this);return a(e),r=s(c.length),n=u(c,0),i(n,c,c,r,0,1,e,arguments[1]),n}}),r(32)("flatMap")},function(t,e,r){"use strict";var n=r(0),i=r(133),o=r(10),s=r(7),a=r(22),u=r(90);n(n.P,"Array",{flatten:function t(){var e=arguments[0],r=o(this),n=s(r.length),c=u(r,0);return i(c,r,r,n,0,void 0===e?1:a(e)),c}}),r(32)("flatten")},function(t,e,r){"use strict";var n=r(0),i=r(59)(!0);n(n.P,"String",{at:function t(e){return i(this,e)}})},function(t,e,r){"use strict";var n=r(0),i=r(134),o=r(64);n(n.P+n.F*/Version\/10\.\d+(\.\d+)? Safari\//.test(o),"String",{padStart:function t(e){return i(this,e,arguments.length>1?arguments[1]:void 0,!0)}})},function(t,e,r){"use strict";var n=r(0),i=r(134),o=r(64);n(n.P+n.F*/Version\/10\.\d+(\.\d+)? Safari\//.test(o),"String",{padEnd:function t(e){return i(this,e,arguments.length>1?arguments[1]:void 0,!1)}})},function(t,e,r){"use strict";r(47)("trimLeft",function(t){return function e(){return t(this,1)}},"trimStart")},function(t,e,r){"use strict";r(47)("trimRight",function(t){return function e(){return t(this,2)}},"trimEnd")},function(t,e,r){"use strict";var n=r(0),i=r(25),o=r(7),s=r(60),a=r(53),u=RegExp.prototype,c=function(t,e){this._r=t,this._s=e};r(84)(c,"RegExp String",function t(){var e=this._r.exec(this._s);return{value:e,done:null===e}}),n(n.P,"String",{matchAll:function t(e){if(i(this),!s(e))throw TypeError(e+" is not a regexp!");var r=String(this),n="flags"in u?String(e.flags):a.call(e),f=new RegExp(e.source,~n.indexOf("g")?n:"g"+n);return f.lastIndex=o(e.lastIndex),new c(f,r)}})},function(t,e,r){r(73)("asyncIterator")},function(t,e,r){r(73)("observable")},function(t,e,r){var n=r(0),i=r(132),o=r(16),s=r(17),a=r(88);n(n.S,"Object",{getOwnPropertyDescriptors:function t(e){for(var r,n,u=o(e),c=s.f,f=i(u),h={},l=0;f.length>l;)void 0!==(n=c(u,r=f[l++]))&&a(h,r,n);return h}})},function(t,e,r){var n=r(0),i=r(135)(!1);n(n.S,"Object",{values:function t(e){return i(e)}})},function(t,e,r){var n=r(0),i=r(135)(!0);n(n.S,"Object",{entries:function t(e){return i(e)}})},function(t,e,r){"use strict";var n=r(0),i=r(10),o=r(11),s=r(9);r(8)&&n(n.P+r(67),"Object",{__defineGetter__:function t(e,r){s.f(i(this),e,{get:o(r),enumerable:!0,configurable:!0})}})},function(t,e,r){"use strict";var n=r(0),i=r(10),o=r(11),s=r(9);r(8)&&n(n.P+r(67),"Object",{__defineSetter__:function t(e,r){s.f(i(this),e,{set:o(r),enumerable:!0,configurable:!0})}})},function(t,e,r){"use strict";var n=r(0),i=r(10),o=r(24),s=r(18),a=r(17).f;r(8)&&n(n.P+r(67),"Object",{__lookupGetter__:function t(e){var r,n=i(this),u=o(e,!0);do{if(r=a(n,u))return r.get}while(n=s(n))}})},function(t,e,r){"use strict";var n=r(0),i=r(10),o=r(24),s=r(18),a=r(17).f;r(8)&&n(n.P+r(67),"Object",{__lookupSetter__:function t(e){var r,n=i(this),u=o(e,!0);do{if(r=a(n,u))return r.set}while(n=s(n))}})},function(t,e,r){var n=r(0);n(n.P+n.R,"Map",{toJSON:r(136)("Map")})},function(t,e,r){var n=r(0);n(n.P+n.R,"Set",{toJSON:r(136)("Set")})},function(t,e,r){r(68)("Map")},function(t,e,r){r(68)("Set")},function(t,e,r){r(68)("WeakMap")},function(t,e,r){r(68)("WeakSet")},function(t,e,r){r(69)("Map")},function(t,e,r){r(69)("Set")},function(t,e,r){r(69)("WeakMap")},function(t,e,r){r(69)("WeakSet")},function(t,e,r){var n=r(0);n(n.G,{global:r(2)})},function(t,e,r){var n=r(0);n(n.S,"System",{global:r(2)})},function(t,e,r){var n=r(0),i=r(21);n(n.S,"Error",{isError:function t(e){return"Error"===i(e)}})},function(t,e,r){var n=r(0);n(n.S,"Math",{clamp:function t(e,r,n){return Math.min(n,Math.max(r,e))}})},function(t,e,r){var n=r(0);n(n.S,"Math",{DEG_PER_RAD:Math.PI/180})},function(t,e,r){var n=r(0),i=180/Math.PI;n(n.S,"Math",{degrees:function t(e){return e*i}})},function(t,e,r){var n=r(0),i=r(138),o=r(117);n(n.S,"Math",{fscale:function t(e,r,n,s,a){return o(i(e,r,n,s,a))}})},function(t,e,r){var n=r(0);n(n.S,"Math",{iaddh:function t(e,r,n,i){var o=e>>>0,s=n>>>0;return(r>>>0)+(i>>>0)+((o&s|(o|s)&~(o+s>>>0))>>>31)|0}})},function(t,e,r){var n=r(0);n(n.S,"Math",{isubh:function t(e,r,n,i){var o=e>>>0,s=n>>>0;return(r>>>0)-(i>>>0)-((~o&s|~(o^s)&o-s>>>0)>>>31)|0}})},function(t,e,r){var n=r(0);n(n.S,"Math",{imulh:function t(e,r){var n=+e,i=+r,o=65535&n,s=65535&i,a=n>>16,u=i>>16,c=(a*s>>>0)+(o*s>>>16);return a*u+(c>>16)+((o*u>>>0)+(65535&c)>>16)}})},function(t,e,r){var n=r(0);n(n.S,"Math",{RAD_PER_DEG:180/Math.PI})},function(t,e,r){var n=r(0),i=Math.PI/180;n(n.S,"Math",{radians:function t(e){return e*i}})},function(t,e,r){var n=r(0);n(n.S,"Math",{scale:r(138)})},function(t,e,r){var n=r(0);n(n.S,"Math",{umulh:function t(e,r){var n=+e,i=+r,o=65535&n,s=65535&i,a=n>>>16,u=i>>>16,c=(a*s>>>0)+(o*s>>>16);return a*u+(c>>>16)+((o*u>>>0)+(65535&c)>>>16)}})},function(t,e,r){var n=r(0);n(n.S,"Math",{signbit:function t(e){return(e=+e)!=e?e:0==e?1/e==1/0:e>0}})},function(t,e,r){"use strict";var n=r(0),i=r(19),o=r(2),s=r(54),a=r(125);n(n.P+n.R,"Promise",{finally:function(t){var e=s(this,i.Promise||o.Promise),r="function"==typeof t;return this.then(r?function(r){return a(e,t()).then(function(){return r})}:t,r?function(r){return a(e,t()).then(function(){throw r})}:t)}})},function(t,e,r){"use strict";var n=r(0),i=r(97),o=r(124);n(n.S,"Promise",{try:function(t){var e=i.f(this),r=o(t);return(r.e?e.reject:e.resolve)(r.v),e.promise}})},function(t,e,r){var n=r(29),i=r(1),o=n.key,s=n.set;n.exp({defineMetadata:function t(e,r,n,a){s(e,r,i(n),o(a))}})},function(t,e,r){var n=r(29),i=r(1),o=n.key,s=n.map,a=n.store;n.exp({deleteMetadata:function t(e,r){var n=arguments.length<3?void 0:o(arguments[2]),u=s(i(r),n,!1);if(void 0===u||!u.delete(e))return!1;if(u.size)return!0;var c=a.get(r);return c.delete(n),!!c.size||a.delete(r)}})},function(t,e,r){var n=r(29),i=r(1),o=r(18),s=n.has,a=n.get,u=n.key,c=function(t,e,r){if(s(t,e,r))return a(t,e,r);var n=o(e);return null!==n?c(t,n,r):void 0};n.exp({getMetadata:function t(e,r){return c(e,i(r),arguments.length<3?void 0:u(arguments[2]))}})},function(t,e,r){var n=r(128),i=r(137),o=r(29),s=r(1),a=r(18),u=o.keys,c=o.key,f=function(t,e){var r=u(t,e),o=a(t);if(null===o)return r;var s=f(o,e);return s.length?r.length?i(new n(r.concat(s))):s:r};o.exp({getMetadataKeys:function t(e){return f(s(e),arguments.length<2?void 0:c(arguments[1]))}})},function(t,e,r){var n=r(29),i=r(1),o=n.get,s=n.key;n.exp({getOwnMetadata:function t(e,r){return o(e,i(r),arguments.length<3?void 0:s(arguments[2]))}})},function(t,e,r){var n=r(29),i=r(1),o=n.keys,s=n.key;n.exp({getOwnMetadataKeys:function t(e){return o(i(e),arguments.length<2?void 0:s(arguments[1]))}})},function(t,e,r){var n=r(29),i=r(1),o=r(18),s=n.has,a=n.key,u=function(t,e,r){if(s(t,e,r))return!0;var n=o(e);return null!==n&&u(t,n,r)};n.exp({hasMetadata:function t(e,r){return u(e,i(r),arguments.length<3?void 0:a(arguments[2]))}})},function(t,e,r){var n=r(29),i=r(1),o=n.has,s=n.key;n.exp({hasOwnMetadata:function t(e,r){return o(e,i(r),arguments.length<3?void 0:s(arguments[2]))}})},function(t,e,r){var n=r(29),i=r(1),o=r(11),s=n.key,a=n.set;n.exp({metadata:function t(e,r){return function t(n,u){a(e,r,(void 0!==u?i:o)(n),s(u))}}})},function(t,e,r){var n=r(0),i=r(96)(),o=r(2).process,s="process"==r(21)(o);n(n.G,{asap:function t(e){var r=s&&o.domain;i(r?r.bind(e):e)}})},function(t,e,r){"use strict";var n=r(0),i=r(2),o=r(19),s=r(96)(),a=r(6)("observable"),u=r(11),c=r(1),f=r(40),h=r(42),l=r(12),p=r(41),d=p.RETURN,g=function(t){return null==t?void 0:u(t)},v=function(t){var e=t._c;e&&(t._c=void 0,e())},y=function(t){return void 0===t._o},m=function(t){y(t)||(t._o=void 0,v(t))},_=function(t,e){c(t),this._c=void 0,this._o=t,t=new S(this);try{var r=e(t),n=r;null!=r&&("function"==typeof r.unsubscribe?r=function(){n.unsubscribe()}:u(r),this._c=r)}catch(e){return void t.error(e)}y(this)&&v(this)};_.prototype=h({},{unsubscribe:function t(){m(this)}});var S=function(t){this._s=t};S.prototype=h({},{next:function t(e){var r=this._s;if(!y(r)){var n=r._o;try{var i=g(n.next);if(i)return i.call(n,e)}catch(t){try{m(r)}finally{throw t}}}},error:function t(e){var r=this._s;if(y(r))throw e;var n=r._o;r._o=void 0;try{var i=g(n.error);if(!i)throw e;e=i.call(n,e)}catch(t){try{v(r)}finally{throw t}}return v(r),e},complete:function t(e){var r=this._s;if(!y(r)){var n=r._o;r._o=void 0;try{var i=g(n.complete);e=i?i.call(n,e):void 0}catch(t){try{v(r)}finally{throw t}}return v(r),e}}});var b=function t(e){f(this,b,"Observable","_f")._f=u(e)};h(b.prototype,{subscribe:function t(e){return new _(e,this._f)},forEach:function t(e){var r=this;return new(o.Promise||i.Promise)(function(t,n){u(e);var i=r.subscribe({next:function(t){try{return e(t)}catch(t){n(t),i.unsubscribe()}},error:n,complete:t})})}}),h(b,{from:function t(e){var r="function"==typeof this?this:b,n=g(c(e)[a]);if(n){var i=c(n.call(e));return i.constructor===r?i:new r(function(t){return i.subscribe(t)})}return new r(function(t){var r=!1;return s(function(){if(!r){try{if(p(e,!1,function(e){if(t.next(e),r)return d})===d)return}catch(e){if(r)throw e;return void t.error(e)}t.complete()}}),function(){r=!0}})},of:function t(){for(var e=0,r=arguments.length,n=new Array(r);e2,i=!!n&&s.call(arguments,2);return t(n?function(){("function"==typeof e?e:Function(e)).apply(this,i)}:e,r)}};i(i.G+i.B+i.F*a,{setTimeout:u(n.setTimeout),setInterval:u(n.setInterval)})},function(t,e,r){var n=r(0),i=r(95);n(n.G+n.B,{setImmediate:i.set,clearImmediate:i.clear})},function(t,e,r){for(var n=r(92),i=r(35),o=r(13),s=r(2),a=r(12),u=r(48),c=r(6),f=c("iterator"),h=c("toStringTag"),l=u.Array,p={CSSRuleList:!0,CSSStyleDeclaration:!1,CSSValueList:!1,ClientRectList:!1,DOMRectList:!1,DOMStringList:!1,DOMTokenList:!0,DataTransferItemList:!1,FileList:!1,HTMLAllCollection:!1,HTMLCollection:!1,HTMLFormElement:!1,HTMLSelectElement:!1,MediaList:!0,MimeTypeArray:!1,NamedNodeMap:!1,NodeList:!0,PaintRequestList:!1,Plugin:!1,PluginArray:!1,SVGLengthList:!1,SVGNumberList:!1,SVGPathSegList:!1,SVGPointList:!1,SVGStringList:!1,SVGTransformList:!1,SourceBufferList:!1,StyleSheetList:!0,TextTrackCueList:!1,TextTrackList:!1,TouchList:!1},d=i(p),g=0;g=0;--o){var s=this.tryEntries[o],a=s.completion;if("root"===s.tryLoc)return n("end");if(s.tryLoc<=this.prev){var u=i.call(s,"catchLoc"),c=i.call(s,"finallyLoc");if(u&&c){if(this.prev=0;--r){var n=this.tryEntries[r];if(n.tryLoc<=this.prev&&i.call(n,"finallyLoc")&&this.prev=0;--e){var r=this.tryEntries[e];if(r.finallyLoc===t)return this.complete(r.completion,r.afterLoc),C(r),g}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var r=this.tryEntries[e];if(r.tryLoc===t){var n=r.completion;if("throw"===n.type){var i=n.arg;C(r)}return i}}throw new Error("illegal catch attempt")},delegateYield:function(t,e,n){return this.delegate={iterator:R(t),resultName:e,nextLoc:n},"next"===this.method&&(this.arg=r),g}}}function S(t,e,r,n){var i=e&&e.prototype instanceof w?e:w,o=Object.create(i.prototype),s=new T(n||[]);return o._invoke=function a(t,e,r){var n=h;return function i(o,s){if(n===p)throw new Error("Generator is already running");if(n===d){if("throw"===o)throw s;return I()}for(r.method=o,r.arg=s;;){var a=r.delegate;if(a){var u=k(a,r);if(u){if(u===g)continue;return u}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if(n===h)throw n=d,r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);n=p;var c=b(t,e,r);if("normal"===c.type){if(n=r.done?d:l,c.arg===g)continue;return{value:c.arg,done:r.done}}"throw"===c.type&&(n=d,r.method="throw",r.arg=c.arg)}}}(t,r,s),o}function b(t,e,r){try{return{type:"normal",arg:t.call(e,r)}}catch(t){return{type:"throw",arg:t}}}function w(){}function F(){}function E(){}function x(t){["next","throw","return"].forEach(function(e){t[e]=function(t){return this._invoke(e,t)}})}function A(t){function r(e,n,o,s){var a=b(t[e],t,n);if("throw"!==a.type){var u=a.arg,c=u.value;return c&&"object"==typeof c&&i.call(c,"__await")?Promise.resolve(c.__await).then(function(t){r("next",t,o,s)},function(t){r("throw",t,o,s)}):Promise.resolve(c).then(function(t){u.value=t,o(u)},s)}s(a.arg)}var n;"object"==typeof e.process&&e.process.domain&&(r=e.process.domain.bind(r)),this._invoke=function o(t,e){function i(){return new Promise(function(n,i){r(t,e,n,i)})}return n=n?n.then(i,i):i()}}function k(t,e){var n=t.iterator[e.method];if(n===r){if(e.delegate=null,"throw"===e.method){if(t.iterator.return&&(e.method="return",e.arg=r,k(t,e),"throw"===e.method))return g;e.method="throw",e.arg=new TypeError("The iterator does not provide a 'throw' method")}return g}var i=b(n,t.iterator,e.arg);if("throw"===i.type)return e.method="throw",e.arg=i.arg,e.delegate=null,g;var o=i.arg;return o?o.done?(e[t.resultName]=o.value,e.next=t.nextLoc,"return"!==e.method&&(e.method="next",e.arg=r),e.delegate=null,g):o:(e.method="throw",e.arg=new TypeError("iterator result is not an object"),e.delegate=null,g)}function P(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function C(t){var e=t.completion||{};e.type="normal",delete e.arg,t.completion=e}function T(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(P,this),this.reset(!0)}function R(t){if(t){var e=t[s];if(e)return e.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var n=-1,o=function e(){for(;++n1&&void 0!==arguments[1]?arguments[1]:o.MetadataService,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:s.UserInfoService,u=arguments.length>3&&void 0!==arguments[3]?arguments[3]:c.JoseUtil,f=arguments.length>4&&void 0!==arguments[4]?arguments[4]:a.TokenClient;if(function h(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),!e)throw i.Log.error("ResponseValidator.ctor: No settings passed to ResponseValidator"),new Error("settings");this._settings=e,this._metadataService=new r(this._settings),this._userInfoService=new n(this._settings),this._joseUtil=u,this._tokenClient=new f(this._settings)}return t.prototype.validateSigninResponse=function t(e,r){var n=this;return i.Log.debug("ResponseValidator.validateSigninResponse"),this._processSigninParams(e,r).then(function(t){return i.Log.debug("ResponseValidator.validateSigninResponse: state processed"),n._validateTokens(e,t).then(function(t){return i.Log.debug("ResponseValidator.validateSigninResponse: tokens validated"),n._processClaims(e,t).then(function(t){return i.Log.debug("ResponseValidator.validateSigninResponse: claims processed"),t})})})},t.prototype.validateSignoutResponse=function t(e,r){return e.id!==r.state?(i.Log.error("ResponseValidator.validateSignoutResponse: State does not match"),Promise.reject(new Error("State does not match"))):(i.Log.debug("ResponseValidator.validateSignoutResponse: state validated"),r.state=e.data,r.error?(i.Log.warn("ResponseValidator.validateSignoutResponse: Response was error",r.error),Promise.reject(new u.ErrorResponse(r))):Promise.resolve(r))},t.prototype._processSigninParams=function t(e,r){if(e.id!==r.state)return i.Log.error("ResponseValidator._processSigninParams: State does not match"),Promise.reject(new Error("State does not match"));if(!e.client_id)return i.Log.error("ResponseValidator._processSigninParams: No client_id on state"),Promise.reject(new Error("No client_id on state"));if(!e.authority)return i.Log.error("ResponseValidator._processSigninParams: No authority on state"),Promise.reject(new Error("No authority on state"));if(this._settings.authority){if(this._settings.authority&&this._settings.authority!==e.authority)return i.Log.error("ResponseValidator._processSigninParams: authority mismatch on settings vs. signin state"),Promise.reject(new Error("authority mismatch on settings vs. signin state"))}else this._settings.authority=e.authority;if(this._settings.client_id){if(this._settings.client_id&&this._settings.client_id!==e.client_id)return i.Log.error("ResponseValidator._processSigninParams: client_id mismatch on settings vs. signin state"),Promise.reject(new Error("client_id mismatch on settings vs. signin state"))}else this._settings.client_id=e.client_id;return i.Log.debug("ResponseValidator._processSigninParams: state validated"),r.state=e.data,r.error?(i.Log.warn("ResponseValidator._processSigninParams: Response was error",r.error),Promise.reject(new u.ErrorResponse(r))):e.nonce&&!r.id_token?(i.Log.error("ResponseValidator._processSigninParams: Expecting id_token in response"),Promise.reject(new Error("No id_token in response"))):!e.nonce&&r.id_token?(i.Log.error("ResponseValidator._processSigninParams: Not expecting id_token in response"),Promise.reject(new Error("Unexpected id_token in response"))):e.code_verifier&&!r.code?(i.Log.error("ResponseValidator._processSigninParams: Expecting code in response"),Promise.reject(new Error("No code in response"))):!e.code_verifier&&r.code?(i.Log.error("ResponseValidator._processSigninParams: Not expecting code in response"),Promise.reject(new Error("Unexpected code in response"))):(r.scope||(r.scope=e.scope),Promise.resolve(r))},t.prototype._processClaims=function t(e,r){var n=this;if(r.isOpenIdConnect){if(i.Log.debug("ResponseValidator._processClaims: response is OIDC, processing claims"),r.profile=this._filterProtocolClaims(r.profile),!0!==e.skipUserInfo&&this._settings.loadUserInfo&&r.access_token)return i.Log.debug("ResponseValidator._processClaims: loading user info"),this._userInfoService.getClaims(r.access_token).then(function(t){return i.Log.debug("ResponseValidator._processClaims: user info claims received from user info endpoint"),t.sub!==r.profile.sub?(i.Log.error("ResponseValidator._processClaims: sub from user info endpoint does not match sub in access_token"),Promise.reject(new Error("sub from user info endpoint does not match sub in access_token"))):(r.profile=n._mergeClaims(r.profile,t),i.Log.debug("ResponseValidator._processClaims: user info claims received, updated profile:",r.profile),r)});i.Log.debug("ResponseValidator._processClaims: not loading user info")}else i.Log.debug("ResponseValidator._processClaims: response is not OIDC, not processing claims");return Promise.resolve(r)},t.prototype._mergeClaims=function t(e,r){var i=Object.assign({},e);for(var o in r){var s=r[o];Array.isArray(s)||(s=[s]);for(var a=0;a1)return i.Log.error("ResponseValidator._validateIdToken: No kid found in id_token and more than one key found in metadata"),Promise.reject(new Error("No kid found in id_token and more than one key found in metadata"));u=a[0]}if(!u)return i.Log.error("ResponseValidator._validateIdToken: No key matching kid or alg found in signing keys"),Promise.reject(new Error("No key matching kid or alg found in signing keys"));var c=e.client_id,f=n._settings.clockSkew;return i.Log.debug("ResponseValidator._validateIdToken: Validaing JWT; using clock skew (in seconds) of: ",f),n._joseUtil.validateJwt(r.id_token,u,t,c,f).then(function(){return i.Log.debug("ResponseValidator._validateIdToken: JWT validation successful"),o.payload.sub?(r.profile=o.payload,r):(i.Log.error("ResponseValidator._validateIdToken: No sub present in id_token"),Promise.reject(new Error("No sub present in id_token")))})})})},t.prototype._filterByAlg=function t(e,r){var n=null;if(r.startsWith("RS"))n="RSA";else if(r.startsWith("PS"))n="PS";else{if(!r.startsWith("ES"))return i.Log.debug("ResponseValidator._filterByAlg: alg not supported: ",r),[];n="EC"}return i.Log.debug("ResponseValidator._filterByAlg: Looking for keys that match kty: ",n),e=e.filter(function(t){return t.kty===n}),i.Log.debug("ResponseValidator._filterByAlg: Number of keys that match kty: ",n,e.length),e},t.prototype._validateAccessToken=function t(e){if(!e.profile)return i.Log.error("ResponseValidator._validateAccessToken: No profile loaded from id_token"),Promise.reject(new Error("No profile loaded from id_token"));if(!e.profile.at_hash)return i.Log.error("ResponseValidator._validateAccessToken: No at_hash in id_token"),Promise.reject(new Error("No at_hash in id_token"));if(!e.id_token)return i.Log.error("ResponseValidator._validateAccessToken: No id_token"),Promise.reject(new Error("No id_token"));var r=this._joseUtil.parseJwt(e.id_token);if(!r||!r.header)return i.Log.error("ResponseValidator._validateAccessToken: Failed to parse id_token",r),Promise.reject(new Error("Failed to parse id_token"));var n=r.header.alg;if(!n||5!==n.length)return i.Log.error("ResponseValidator._validateAccessToken: Unsupported alg:",n),Promise.reject(new Error("Unsupported alg: "+n));var o=n.substr(2,3);if(!o)return i.Log.error("ResponseValidator._validateAccessToken: Unsupported alg:",n,o),Promise.reject(new Error("Unsupported alg: "+n));if(256!==(o=parseInt(o))&&384!==o&&512!==o)return i.Log.error("ResponseValidator._validateAccessToken: Unsupported alg:",n,o),Promise.reject(new Error("Unsupported alg: "+n));var s="sha"+o,a=this._joseUtil.hashString(e.access_token,s);if(!a)return i.Log.error("ResponseValidator._validateAccessToken: access_token hash failed:",s),Promise.reject(new Error("Failed to validate at_hash"));var u=a.substr(0,a.length/2),c=this._joseUtil.hexToBase64Url(u);return c!==e.profile.at_hash?(i.Log.error("ResponseValidator._validateAccessToken: Failed to validate at_hash",c,e.profile.at_hash),Promise.reject(new Error("Failed to validate at_hash"))):(i.Log.debug("ResponseValidator._validateAccessToken: success"),Promise.resolve(e))},t}()},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.UserInfoService=void 0;var n=r(101),i=r(49),o=r(3),s=r(70);e.UserInfoService=function(){function t(e){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n.JsonService,a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:i.MetadataService,u=arguments.length>3&&void 0!==arguments[3]?arguments[3]:s.JoseUtil;if(function c(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),!e)throw o.Log.error("UserInfoService.ctor: No settings passed"),new Error("settings");this._settings=e,this._jsonService=new r(void 0,void 0,this._getClaimsFromJwt.bind(this)),this._metadataService=new a(this._settings),this._joseUtil=u}return t.prototype.getClaims=function t(e){var r=this;return e?this._metadataService.getUserInfoEndpoint().then(function(t){return o.Log.debug("UserInfoService.getClaims: received userinfo url",t),r._jsonService.getJson(t,e).then(function(t){return o.Log.debug("UserInfoService.getClaims: claims received",t),t})}):(o.Log.error("UserInfoService.getClaims: No token passed"),Promise.reject(new Error("A token is required")))},t.prototype._getClaimsFromJwt=function t(e){var r=this;try{var n=this._joseUtil.parseJwt(e.responseText);if(!n||!n.header||!n.payload)return o.Log.error("UserInfoService._getClaimsFromJwt: Failed to parse JWT",n),Promise.reject(new Error("Failed to parse id_token"));var i=n.header.kid,s=void 0;switch(this._settings.userInfoJwtIssuer){case"OP":s=this._metadataService.getIssuer();break;case"ANY":s=Promise.resolve(n.payload.iss);break;default:s=Promise.resolve(this._settings.userInfoJwtIssuer)}return s.then(function(t){return o.Log.debug("UserInfoService._getClaimsFromJwt: Received issuer:"+t),r._metadataService.getSigningKeys().then(function(s){if(!s)return o.Log.error("UserInfoService._getClaimsFromJwt: No signing keys from metadata"),Promise.reject(new Error("No signing keys from metadata"));o.Log.debug("UserInfoService._getClaimsFromJwt: Received signing keys");var a=void 0;if(i)a=s.filter(function(t){return t.kid===i})[0];else{if((s=r._filterByAlg(s,n.header.alg)).length>1)return o.Log.error("UserInfoService._getClaimsFromJwt: No kid found in id_token and more than one key found in metadata"),Promise.reject(new Error("No kid found in id_token and more than one key found in metadata"));a=s[0]}if(!a)return o.Log.error("UserInfoService._getClaimsFromJwt: No key matching kid or alg found in signing keys"),Promise.reject(new Error("No key matching kid or alg found in signing keys"));var u=r._settings.client_id,c=r._settings.clockSkew;return o.Log.debug("UserInfoService._getClaimsFromJwt: Validaing JWT; using clock skew (in seconds) of: ",c),r._joseUtil.validateJwt(e.responseText,a,t,u,c,void 0,!0).then(function(){return o.Log.debug("UserInfoService._getClaimsFromJwt: JWT validation successful"),n.payload})})})}catch(t){return o.Log.error("UserInfoService._getClaimsFromJwt: Error parsing JWT response",t.message),void reject(t)}},t.prototype._filterByAlg=function t(e,r){var n=null;if(r.startsWith("RS"))n="RSA";else if(r.startsWith("PS"))n="PS";else{if(!r.startsWith("ES"))return o.Log.debug("UserInfoService._filterByAlg: alg not supported: ",r),[];n="EC"}return o.Log.debug("UserInfoService._filterByAlg: Looking for keys that match kty: ",n),e=e.filter(function(t){return t.kty===n}),o.Log.debug("UserInfoService._filterByAlg: Number of keys that match kty: ",n,e.length),e},t}()},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.AllowedSigningAlgs=e.b64tohex=e.hextob64u=e.crypto=e.X509=e.KeyUtil=e.jws=void 0;var n=r(359);e.jws=n.jws,e.KeyUtil=n.KEYUTIL,e.X509=n.X509,e.crypto=n.crypto,e.hextob64u=n.hextob64u,e.b64tohex=n.b64tohex,e.AllowedSigningAlgs=["RS256","RS384","RS512","PS256","PS384","PS512","ES256","ES384","ES512"]},function(t,e,r){"use strict";(function(t){Object.defineProperty(e,"__esModule",{value:!0});var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},n={userAgent:!1},i={}; +var Oidc=function(t){var e={};function r(n){if(e[n])return e[n].exports;var i=e[n]={i:n,l:!1,exports:{}};return t[n].call(i.exports,i,i.exports,r),i.l=!0,i.exports}return r.m=t,r.c=e,r.d=function(t,e,n){r.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:n})},r.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},r.t=function(t,e){if(1&e&&(t=r(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var i in t)r.d(n,i,function(e){return t[e]}.bind(null,i));return n},r.n=function(t){var e=t&&t.__esModule?function e(){return t.default}:function e(){return t};return r.d(e,"a",e),e},r.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},r.p="",r(r.s=152)}([function(t,e,r){var n=r(2),i=r(19),o=r(12),s=r(13),a=r(20),u=function(t,e,r){var c,f,h,l,p=t&u.F,d=t&u.G,g=t&u.S,v=t&u.P,y=t&u.B,m=d?n:g?n[e]||(n[e]={}):(n[e]||{}).prototype,_=d?i:i[e]||(i[e]={}),S=_.prototype||(_.prototype={});for(c in d&&(r=e),r)h=((f=!p&&m&&void 0!==m[c])?m:r)[c],l=y&&f?a(h,n):v&&"function"==typeof h?a(Function.call,h):h,m&&s(m,c,h,t&u.U),_[c]!=h&&o(_,c,l),v&&S[c]!=h&&(S[c]=h)};n.core=i,u.F=1,u.G=2,u.S=4,u.P=8,u.B=16,u.W=32,u.U=64,u.R=128,t.exports=u},function(t,e,r){var n=r(5);t.exports=function(t){if(!n(t))throw TypeError(t+" is not an object!");return t}},function(t,e){var r=t.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=r)},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=function(){function t(t,e){for(var r=0;r=4){for(var e=arguments.length,r=Array(e),n=0;n=3){for(var e=arguments.length,r=Array(e),n=0;n=2){for(var e=arguments.length,r=Array(e),n=0;n=1){for(var e=arguments.length,r=Array(e),n=0;n0?i(n(t),9007199254740991):0}},function(t,e,r){t.exports=!r(4)(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},function(t,e,r){var n=r(1),i=r(103),o=r(24),s=Object.defineProperty;e.f=r(8)?Object.defineProperty:function t(e,r,a){if(n(e),r=o(r,!0),n(a),i)try{return s(e,r,a)}catch(t){}if("get"in a||"set"in a)throw TypeError("Accessors not supported!");return"value"in a&&(e[r]=a.value),e}},function(t,e,r){var n=r(25);t.exports=function(t){return Object(n(t))}},function(t,e){t.exports=function(t){if("function"!=typeof t)throw TypeError(t+" is not a function!");return t}},function(t,e,r){var n=r(9),i=r(33);t.exports=r(8)?function(t,e,r){return n.f(t,e,i(1,r))}:function(t,e,r){return t[e]=r,t}},function(t,e,r){var n=r(2),i=r(12),o=r(15),s=r(34)("src"),a=r(156),u=(""+a).split("toString");r(19).inspectSource=function(t){return a.call(t)},(t.exports=function(t,e,r,a){var c="function"==typeof r;c&&(o(r,"name")||i(r,"name",e)),t[e]!==r&&(c&&(o(r,s)||i(r,s,t[e]?""+t[e]:u.join(String(e)))),t===n?t[e]=r:a?t[e]?t[e]=r:i(t,e,r):(delete t[e],i(t,e,r)))})(Function.prototype,"toString",function t(){return"function"==typeof this&&this[s]||a.call(this)})},function(t,e,r){var n=r(0),i=r(4),o=r(25),s=/"/g,a=function(t,e,r,n){var i=String(o(t)),a="<"+e;return""!==r&&(a+=" "+r+'="'+String(n).replace(s,""")+'"'),a+">"+i+""};t.exports=function(t,e){var r={};r[t]=e(a),n(n.P+n.F*i(function(){var e=""[t]('"');return e!==e.toLowerCase()||e.split('"').length>3}),"String",r)}},function(t,e){var r={}.hasOwnProperty;t.exports=function(t,e){return r.call(t,e)}},function(t,e,r){var n=r(51),i=r(25);t.exports=function(t){return n(i(t))}},function(t,e,r){var n=r(52),i=r(33),o=r(16),s=r(24),a=r(15),u=r(103),c=Object.getOwnPropertyDescriptor;e.f=r(8)?c:function t(e,r){if(e=o(e),r=s(r,!0),u)try{return c(e,r)}catch(t){}if(a(e,r))return i(!n.f.call(e,r),e[r])}},function(t,e,r){var n=r(15),i=r(10),o=r(74)("IE_PROTO"),s=Object.prototype;t.exports=Object.getPrototypeOf||function(t){return t=i(t),n(t,o)?t[o]:"function"==typeof t.constructor&&t instanceof t.constructor?t.constructor.prototype:t instanceof Object?s:null}},function(t,e){var r=t.exports={version:"2.6.4"};"number"==typeof __e&&(__e=r)},function(t,e,r){var n=r(11);t.exports=function(t,e,r){if(n(t),void 0===e)return t;switch(r){case 1:return function(r){return t.call(e,r)};case 2:return function(r,n){return t.call(e,r,n)};case 3:return function(r,n,i){return t.call(e,r,n,i)}}return function(){return t.apply(e,arguments)}}},function(t,e){var r={}.toString;t.exports=function(t){return r.call(t).slice(8,-1)}},function(t,e){var r=Math.ceil,n=Math.floor;t.exports=function(t){return isNaN(t=+t)?0:(t>0?n:r)(t)}},function(t,e,r){"use strict";var n=r(4);t.exports=function(t,e){return!!t&&n(function(){e?t.call(null,function(){},1):t.call(null)})}},function(t,e,r){var n=r(5);t.exports=function(t,e){if(!n(t))return t;var r,i;if(e&&"function"==typeof(r=t.toString)&&!n(i=r.call(t)))return i;if("function"==typeof(r=t.valueOf)&&!n(i=r.call(t)))return i;if(!e&&"function"==typeof(r=t.toString)&&!n(i=r.call(t)))return i;throw TypeError("Can't convert object to primitive value")}},function(t,e){t.exports=function(t){if(void 0==t)throw TypeError("Can't call method on "+t);return t}},function(t,e,r){var n=r(0),i=r(19),o=r(4);t.exports=function(t,e){var r=(i.Object||{})[t]||Object[t],s={};s[t]=e(r),n(n.S+n.F*o(function(){r(1)}),"Object",s)}},function(t,e,r){var n=r(20),i=r(51),o=r(10),s=r(7),a=r(90);t.exports=function(t,e){var r=1==t,u=2==t,c=3==t,f=4==t,h=6==t,l=5==t||h,p=e||a;return function(e,a,d){for(var g,v,y=o(e),m=i(y),_=n(a,d,3),S=s(m.length),b=0,w=r?p(e,S):u?p(e,0):void 0;S>b;b++)if((l||b in m)&&(v=_(g=m[b],b,y),t))if(r)w[b]=v;else if(v)switch(t){case 3:return!0;case 5:return g;case 6:return b;case 2:w.push(g)}else if(f)return!1;return h?-1:c||f?f:w}}},function(t,e,r){"use strict";if(r(8)){var n=r(30),i=r(2),o=r(4),s=r(0),a=r(66),u=r(98),c=r(20),f=r(40),h=r(33),l=r(12),p=r(42),d=r(22),g=r(7),v=r(131),y=r(36),m=r(24),_=r(15),S=r(46),b=r(5),w=r(10),F=r(87),E=r(37),x=r(18),A=r(38).f,k=r(89),P=r(34),C=r(6),T=r(27),R=r(56),I=r(54),O=r(92),D=r(48),N=r(61),L=r(39),M=r(91),j=r(120),U=r(9),B=r(17),H=U.f,V=B.f,K=i.RangeError,q=i.TypeError,W=i.Uint8Array,J=Array.prototype,z=u.ArrayBuffer,Y=u.DataView,G=T(0),X=T(2),$=T(3),Q=T(4),Z=T(5),tt=T(6),et=R(!0),rt=R(!1),nt=O.values,it=O.keys,ot=O.entries,st=J.lastIndexOf,at=J.reduce,ut=J.reduceRight,ct=J.join,ft=J.sort,ht=J.slice,lt=J.toString,pt=J.toLocaleString,dt=C("iterator"),gt=C("toStringTag"),vt=P("typed_constructor"),yt=P("def_constructor"),mt=a.CONSTR,_t=a.TYPED,St=a.VIEW,bt=T(1,function(t,e){return At(I(t,t[yt]),e)}),wt=o(function(){return 1===new W(new Uint16Array([1]).buffer)[0]}),Ft=!!W&&!!W.prototype.set&&o(function(){new W(1).set({})}),Et=function(t,e){var r=d(t);if(r<0||r%e)throw K("Wrong offset!");return r},xt=function(t){if(b(t)&&_t in t)return t;throw q(t+" is not a typed array!")},At=function(t,e){if(!(b(t)&&vt in t))throw q("It is not a typed array constructor!");return new t(e)},kt=function(t,e){return Pt(I(t,t[yt]),e)},Pt=function(t,e){for(var r=0,n=e.length,i=At(t,n);n>r;)i[r]=e[r++];return i},Ct=function(t,e,r){H(t,e,{get:function(){return this._d[r]}})},Tt=function t(e){var r,n,i,o,s,a,u=w(e),f=arguments.length,h=f>1?arguments[1]:void 0,l=void 0!==h,p=k(u);if(void 0!=p&&!F(p)){for(a=p.call(u),i=[],r=0;!(s=a.next()).done;r++)i.push(s.value);u=i}for(l&&f>2&&(h=c(h,arguments[2],2)),r=0,n=g(u.length),o=At(this,n);n>r;r++)o[r]=l?h(u[r],r):u[r];return o},Rt=function t(){for(var e=0,r=arguments.length,n=At(this,r);r>e;)n[e]=arguments[e++];return n},It=!!W&&o(function(){pt.call(new W(1))}),Ot=function t(){return pt.apply(It?ht.call(xt(this)):xt(this),arguments)},Dt={copyWithin:function t(e,r){return j.call(xt(this),e,r,arguments.length>2?arguments[2]:void 0)},every:function t(e){return Q(xt(this),e,arguments.length>1?arguments[1]:void 0)},fill:function t(e){return M.apply(xt(this),arguments)},filter:function t(e){return kt(this,X(xt(this),e,arguments.length>1?arguments[1]:void 0))},find:function t(e){return Z(xt(this),e,arguments.length>1?arguments[1]:void 0)},findIndex:function t(e){return tt(xt(this),e,arguments.length>1?arguments[1]:void 0)},forEach:function t(e){G(xt(this),e,arguments.length>1?arguments[1]:void 0)},indexOf:function t(e){return rt(xt(this),e,arguments.length>1?arguments[1]:void 0)},includes:function t(e){return et(xt(this),e,arguments.length>1?arguments[1]:void 0)},join:function t(e){return ct.apply(xt(this),arguments)},lastIndexOf:function t(e){return st.apply(xt(this),arguments)},map:function t(e){return bt(xt(this),e,arguments.length>1?arguments[1]:void 0)},reduce:function t(e){return at.apply(xt(this),arguments)},reduceRight:function t(e){return ut.apply(xt(this),arguments)},reverse:function t(){for(var e,r=xt(this).length,n=Math.floor(r/2),i=0;i1?arguments[1]:void 0)},sort:function t(e){return ft.call(xt(this),e)},subarray:function t(e,r){var n=xt(this),i=n.length,o=y(e,i);return new(I(n,n[yt]))(n.buffer,n.byteOffset+o*n.BYTES_PER_ELEMENT,g((void 0===r?i:y(r,i))-o))}},Nt=function t(e,r){return kt(this,ht.call(xt(this),e,r))},Lt=function t(e){xt(this);var r=Et(arguments[1],1),n=this.length,i=w(e),o=g(i.length),s=0;if(o+r>n)throw K("Wrong length!");for(;s255?255:255&n),i.v[p](r*e+i.o,n,wt)}(this,r,t)},enumerable:!0})};_?(d=r(function(t,r,n,i){f(t,d,c,"_d");var o,s,a,u,h=0,p=0;if(b(r)){if(!(r instanceof z||"ArrayBuffer"==(u=S(r))||"SharedArrayBuffer"==u))return _t in r?Pt(d,r):Tt.call(d,r);o=r,p=Et(n,e);var y=r.byteLength;if(void 0===i){if(y%e)throw K("Wrong length!");if((s=y-p)<0)throw K("Wrong length!")}else if((s=g(i)*e)+p>y)throw K("Wrong length!");a=s/e}else a=v(r),o=new z(s=a*e);for(l(t,"_d",{b:o,o:p,l:s,e:a,v:new Y(o)});hdocument.F=Object<\/script>"),t.close(),u=t.F;n--;)delete u.prototype[o[n]];return u()};t.exports=Object.create||function t(e,r){var o;return null!==e?(a.prototype=n(e),o=new a,a.prototype=null,o[s]=e):o=u(),void 0===r?o:i(o,r)}},function(t,e,r){var n=r(105),i=r(75).concat("length","prototype");e.f=Object.getOwnPropertyNames||function t(e){return n(e,i)}},function(t,e,r){"use strict";var n=r(2),i=r(9),o=r(8),s=r(6)("species");t.exports=function(t){var e=n[t];o&&e&&!e[s]&&i.f(e,s,{configurable:!0,get:function(){return this}})}},function(t,e){t.exports=function(t,e,r,n){if(!(t instanceof e)||void 0!==n&&n in t)throw TypeError(r+": incorrect invocation!");return t}},function(t,e,r){var n=r(20),i=r(118),o=r(87),s=r(1),a=r(7),u=r(89),c={},f={};(e=t.exports=function(t,e,r,h,l){var p,d,g,v,y=l?function(){return t}:u(t),m=n(r,h,e?2:1),_=0;if("function"!=typeof y)throw TypeError(t+" is not iterable!");if(o(y)){for(p=a(t.length);p>_;_++)if((v=e?m(s(d=t[_])[0],d[1]):m(t[_]))===c||v===f)return v}else for(g=y.call(t);!(d=g.next()).done;)if((v=i(g,m,d.value,e))===c||v===f)return v}).BREAK=c,e.RETURN=f},function(t,e,r){var n=r(13);t.exports=function(t,e,r){for(var i in e)n(t,i,e[i],r);return t}},function(t,e,r){var n=r(5);t.exports=function(t,e){if(!n(t)||t._t!==e)throw TypeError("Incompatible receiver, "+e+" required!");return t}},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=function(){function t(t,e){for(var r=0;r1&&void 0!==arguments[1]?arguments[1]:o.JsonService;if(function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),!e)throw i.Log.error("MetadataService: No settings passed to MetadataService"),new Error("settings");this._settings=e,this._jsonService=new r(["application/jwk-set+json"])}return t.prototype.getMetadata=function t(){var e=this;return this._settings.metadata?(i.Log.debug("MetadataService.getMetadata: Returning metadata from settings"),Promise.resolve(this._settings.metadata)):this.metadataUrl?(i.Log.debug("MetadataService.getMetadata: getting metadata from",this.metadataUrl),this._jsonService.getJson(this.metadataUrl).then(function(t){return i.Log.debug("MetadataService.getMetadata: json received"),e._settings.metadata=t,t})):(i.Log.error("MetadataService.getMetadata: No authority or metadataUrl configured on settings"),Promise.reject(new Error("No authority or metadataUrl configured on settings")))},t.prototype.getIssuer=function t(){return this._getMetadataProperty("issuer")},t.prototype.getAuthorizationEndpoint=function t(){return this._getMetadataProperty("authorization_endpoint")},t.prototype.getUserInfoEndpoint=function t(){return this._getMetadataProperty("userinfo_endpoint")},t.prototype.getTokenEndpoint=function t(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];return this._getMetadataProperty("token_endpoint",e)},t.prototype.getCheckSessionIframe=function t(){return this._getMetadataProperty("check_session_iframe",!0)},t.prototype.getEndSessionEndpoint=function t(){return this._getMetadataProperty("end_session_endpoint",!0)},t.prototype.getRevocationEndpoint=function t(){return this._getMetadataProperty("revocation_endpoint",!0)},t.prototype.getKeysEndpoint=function t(){return this._getMetadataProperty("jwks_uri",!0)},t.prototype._getMetadataProperty=function t(e){var r=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return i.Log.debug("MetadataService.getMetadataProperty for: "+e),this.getMetadata().then(function(t){if(i.Log.debug("MetadataService.getMetadataProperty: metadata recieved"),void 0===t[e]){if(!0===r)return void i.Log.warn("MetadataService.getMetadataProperty: Metadata does not contain optional property "+e);throw i.Log.error("MetadataService.getMetadataProperty: Metadata does not contain property "+e),new Error("Metadata does not contain property "+e)}return t[e]})},t.prototype.getSigningKeys=function t(){var e=this;return this._settings.signingKeys?(i.Log.debug("MetadataService.getSigningKeys: Returning signingKeys from settings"),Promise.resolve(this._settings.signingKeys)):this._getMetadataProperty("jwks_uri").then(function(t){return i.Log.debug("MetadataService.getSigningKeys: jwks_uri received",t),e._jsonService.getJson(t).then(function(t){if(i.Log.debug("MetadataService.getSigningKeys: key set received",t),!t.keys)throw i.Log.error("MetadataService.getSigningKeys: Missing keys on keyset"),new Error("Missing keys on keyset");return e._settings.signingKeys=t.keys,e._settings.signingKeys})})},n(t,[{key:"metadataUrl",get:function t(){return this._metadataUrl||(this._settings.metadataUrl?this._metadataUrl=this._settings.metadataUrl:(this._metadataUrl=this._settings.authority,this._metadataUrl&&this._metadataUrl.indexOf(".well-known/openid-configuration")<0&&("/"!==this._metadataUrl[this._metadataUrl.length-1]&&(this._metadataUrl+="/"),this._metadataUrl+=".well-known/openid-configuration"))),this._metadataUrl}}]),t}()},function(t,e,r){var n=r(19),i=r(2),o=i["__core-js_shared__"]||(i["__core-js_shared__"]={});(t.exports=function(t,e){return o[t]||(o[t]=void 0!==e?e:{})})("versions",[]).push({version:n.version,mode:r(30)?"pure":"global",copyright:"© 2019 Denis Pushkarev (zloirock.ru)"})},function(t,e,r){var n=r(21);t.exports=Object("z").propertyIsEnumerable(0)?Object:function(t){return"String"==n(t)?t.split(""):Object(t)}},function(t,e){e.f={}.propertyIsEnumerable},function(t,e,r){"use strict";var n=r(1);t.exports=function(){var t=n(this),e="";return t.global&&(e+="g"),t.ignoreCase&&(e+="i"),t.multiline&&(e+="m"),t.unicode&&(e+="u"),t.sticky&&(e+="y"),e}},function(t,e,r){var n=r(1),i=r(11),o=r(6)("species");t.exports=function(t,e){var r,s=n(t).constructor;return void 0===s||void 0==(r=n(s)[o])?e:i(r)}},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.UrlUtility=void 0;var n=r(3),i=r(44);e.UrlUtility=function(){function t(){!function e(t,r){if(!(t instanceof r))throw new TypeError("Cannot call a class as a function")}(this,t)}return t.addQueryParam=function t(e,r,n){return e.indexOf("?")<0&&(e+="?"),"?"!==e[e.length-1]&&(e+="&"),e+=encodeURIComponent(r),e+="=",e+=encodeURIComponent(n)},t.parseUrlFragment=function t(e){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"#",o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:i.Global;"string"!=typeof e&&(e=o.location.href);var s=e.lastIndexOf(r);s>=0&&(e=e.substr(s+1)),"?"===r&&(s=e.indexOf("#"))>=0&&(e=e.substr(0,s));for(var a,u={},c=/([^&=]+)=([^&]*)/g,f=0;a=c.exec(e);)if(u[decodeURIComponent(a[1])]=decodeURIComponent(a[2]),f++>50)return n.Log.error("UrlUtility.parseUrlFragment: response exceeded expected number of parameters",e),{error:"Response exceeded expected number of parameters"};for(var h in u)return u;return{}},t}()},function(t,e,r){var n=r(16),i=r(7),o=r(36);t.exports=function(t){return function(e,r,s){var a,u=n(e),c=i(u.length),f=o(s,c);if(t&&r!=r){for(;c>f;)if((a=u[f++])!=a)return!0}else for(;c>f;f++)if((t||f in u)&&u[f]===r)return t||f||0;return!t&&-1}}},function(t,e){e.f=Object.getOwnPropertySymbols},function(t,e,r){var n=r(21);t.exports=Array.isArray||function t(e){return"Array"==n(e)}},function(t,e,r){var n=r(22),i=r(25);t.exports=function(t){return function(e,r){var o,s,a=String(i(e)),u=n(r),c=a.length;return u<0||u>=c?t?"":void 0:(o=a.charCodeAt(u))<55296||o>56319||u+1===c||(s=a.charCodeAt(u+1))<56320||s>57343?t?a.charAt(u):o:t?a.slice(u,u+2):s-56320+(o-55296<<10)+65536}}},function(t,e,r){var n=r(5),i=r(21),o=r(6)("match");t.exports=function(t){var e;return n(t)&&(void 0!==(e=t[o])?!!e:"RegExp"==i(t))}},function(t,e,r){var n=r(6)("iterator"),i=!1;try{var o=[7][n]();o.return=function(){i=!0},Array.from(o,function(){throw 2})}catch(t){}t.exports=function(t,e){if(!e&&!i)return!1;var r=!1;try{var o=[7],s=o[n]();s.next=function(){return{done:r=!0}},o[n]=function(){return s},t(o)}catch(t){}return r}},function(t,e,r){"use strict";var n=r(46),i=RegExp.prototype.exec;t.exports=function(t,e){var r=t.exec;if("function"==typeof r){var o=r.call(t,e);if("object"!=typeof o)throw new TypeError("RegExp exec method returned something other than an Object or null");return o}if("RegExp"!==n(t))throw new TypeError("RegExp#exec called on incompatible receiver");return i.call(t,e)}},function(t,e,r){"use strict";r(122);var n=r(13),i=r(12),o=r(4),s=r(25),a=r(6),u=r(93),c=a("species"),f=!o(function(){var t=/./;return t.exec=function(){var t=[];return t.groups={a:"7"},t},"7"!=="".replace(t,"$")}),h=function(){var t=/(?:)/,e=t.exec;t.exec=function(){return e.apply(this,arguments)};var r="ab".split(t);return 2===r.length&&"a"===r[0]&&"b"===r[1]}();t.exports=function(t,e,r){var l=a(t),p=!o(function(){var e={};return e[l]=function(){return 7},7!=""[t](e)}),d=p?!o(function(){var e=!1,r=/a/;return r.exec=function(){return e=!0,null},"split"===t&&(r.constructor={},r.constructor[c]=function(){return r}),r[l](""),!e}):void 0;if(!p||!d||"replace"===t&&!f||"split"===t&&!h){var g=/./[l],v=r(s,l,""[t],function t(e,r,n,i,o){return r.exec===u?p&&!o?{done:!0,value:g.call(r,n,i)}:{done:!0,value:e.call(n,r,i)}:{done:!1}}),y=v[0],m=v[1];n(String.prototype,t,y),i(RegExp.prototype,l,2==e?function(t,e){return m.call(t,this,e)}:function(t){return m.call(t,this)})}}},function(t,e,r){var n=r(2).navigator;t.exports=n&&n.userAgent||""},function(t,e,r){"use strict";var n=r(2),i=r(0),o=r(13),s=r(42),a=r(31),u=r(41),c=r(40),f=r(5),h=r(4),l=r(61),p=r(45),d=r(79);t.exports=function(t,e,r,g,v,y){var m=n[t],_=m,S=v?"set":"add",b=_&&_.prototype,w={},F=function(t){var e=b[t];o(b,t,"delete"==t?function(t){return!(y&&!f(t))&&e.call(this,0===t?0:t)}:"has"==t?function t(r){return!(y&&!f(r))&&e.call(this,0===r?0:r)}:"get"==t?function t(r){return y&&!f(r)?void 0:e.call(this,0===r?0:r)}:"add"==t?function t(r){return e.call(this,0===r?0:r),this}:function t(r,n){return e.call(this,0===r?0:r,n),this})};if("function"==typeof _&&(y||b.forEach&&!h(function(){(new _).entries().next()}))){var E=new _,x=E[S](y?{}:-0,1)!=E,A=h(function(){E.has(1)}),k=l(function(t){new _(t)}),P=!y&&h(function(){for(var t=new _,e=5;e--;)t[S](e,e);return!t.has(-0)});k||((_=e(function(e,r){c(e,_,t);var n=d(new m,e,_);return void 0!=r&&u(r,v,n[S],n),n})).prototype=b,b.constructor=_),(A||P)&&(F("delete"),F("has"),v&&F("get")),(P||x)&&F(S),y&&b.clear&&delete b.clear}else _=g.getConstructor(e,t,v,S),s(_.prototype,r),a.NEED=!0;return p(_,t),w[t]=_,i(i.G+i.W+i.F*(_!=m),w),y||g.setStrong(_,t,v),_}},function(t,e,r){for(var n,i=r(2),o=r(12),s=r(34),a=s("typed_array"),u=s("view"),c=!(!i.ArrayBuffer||!i.DataView),f=c,h=0,l="Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array".split(",");h<9;)(n=i[l[h++]])?(o(n.prototype,a,!0),o(n.prototype,u,!0)):f=!1;t.exports={ABV:c,CONSTR:f,TYPED:a,VIEW:u}},function(t,e,r){"use strict";t.exports=r(30)||!r(4)(function(){var t=Math.random();__defineSetter__.call(null,t,function(){}),delete r(2)[t]})},function(t,e,r){"use strict";var n=r(0);t.exports=function(t){n(n.S,t,{of:function t(){for(var e=arguments.length,r=new Array(e);e--;)r[e]=arguments[e];return new this(r)}})}},function(t,e,r){"use strict";var n=r(0),i=r(11),o=r(20),s=r(41);t.exports=function(t){n(n.S,t,{from:function t(e){var r,n,a,u,c=arguments[1];return i(this),(r=void 0!==c)&&i(c),void 0==e?new this:(n=[],r?(a=0,u=o(c,arguments[2],2),s(e,!1,function(t){n.push(u(t,a++))})):s(e,!1,n.push,n),new this(n))}})}},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.JoseUtil=void 0;var n=r(358),i=function o(t){return t&&t.__esModule?t:{default:t}}(r(364));e.JoseUtil=(0,i.default)({jws:n.jws,KeyUtil:n.KeyUtil,X509:n.X509,crypto:n.crypto,hextob64u:n.hextob64u,b64tohex:n.b64tohex,AllowedSigningAlgs:n.AllowedSigningAlgs})},function(t,e){var r;r=function(){return this}();try{r=r||new Function("return this")()}catch(t){"object"==typeof window&&(r=window)}t.exports=r},function(t,e,r){var n=r(5),i=r(2).document,o=n(i)&&n(i.createElement);t.exports=function(t){return o?i.createElement(t):{}}},function(t,e,r){var n=r(2),i=r(19),o=r(30),s=r(104),a=r(9).f;t.exports=function(t){var e=i.Symbol||(i.Symbol=o?{}:n.Symbol||{});"_"==t.charAt(0)||t in e||a(e,t,{value:s.f(t)})}},function(t,e,r){var n=r(50)("keys"),i=r(34);t.exports=function(t){return n[t]||(n[t]=i(t))}},function(t,e){t.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},function(t,e,r){var n=r(2).document;t.exports=n&&n.documentElement},function(t,e,r){var n=r(5),i=r(1),o=function(t,e){if(i(t),!n(e)&&null!==e)throw TypeError(e+": can't set as prototype!")};t.exports={set:Object.setPrototypeOf||("__proto__"in{}?function(t,e,n){try{(n=r(20)(Function.call,r(17).f(Object.prototype,"__proto__").set,2))(t,[]),e=!(t instanceof Array)}catch(t){e=!0}return function t(r,i){return o(r,i),e?r.__proto__=i:n(r,i),r}}({},!1):void 0),check:o}},function(t,e){t.exports="\t\n\v\f\r   ᠎              \u2028\u2029\ufeff"},function(t,e,r){var n=r(5),i=r(77).set;t.exports=function(t,e,r){var o,s=e.constructor;return s!==r&&"function"==typeof s&&(o=s.prototype)!==r.prototype&&n(o)&&i&&i(t,o),t}},function(t,e,r){"use strict";var n=r(22),i=r(25);t.exports=function t(e){var r=String(i(this)),o="",s=n(e);if(s<0||s==1/0)throw RangeError("Count can't be negative");for(;s>0;(s>>>=1)&&(r+=r))1&s&&(o+=r);return o}},function(t,e){t.exports=Math.sign||function t(e){return 0==(e=+e)||e!=e?e:e<0?-1:1}},function(t,e){var r=Math.expm1;t.exports=!r||r(10)>22025.465794806718||r(10)<22025.465794806718||-2e-17!=r(-2e-17)?function t(e){return 0==(e=+e)?e:e>-1e-6&&e<1e-6?e+e*e/2:Math.exp(e)-1}:r},function(t,e,r){"use strict";var n=r(30),i=r(0),o=r(13),s=r(12),a=r(48),u=r(84),c=r(45),f=r(18),h=r(6)("iterator"),l=!([].keys&&"next"in[].keys()),p=function(){return this};t.exports=function(t,e,r,d,g,v,y){u(r,e,d);var m,_,S,b=function(t){if(!l&&t in x)return x[t];switch(t){case"keys":return function e(){return new r(this,t)};case"values":return function e(){return new r(this,t)}}return function e(){return new r(this,t)}},w=e+" Iterator",F="values"==g,E=!1,x=t.prototype,A=x[h]||x["@@iterator"]||g&&x[g],k=A||b(g),P=g?F?b("entries"):k:void 0,C="Array"==e&&x.entries||A;if(C&&(S=f(C.call(new t)))!==Object.prototype&&S.next&&(c(S,w,!0),n||"function"==typeof S[h]||s(S,h,p)),F&&A&&"values"!==A.name&&(E=!0,k=function t(){return A.call(this)}),n&&!y||!l&&!E&&x[h]||s(x,h,k),a[e]=k,a[w]=p,g)if(m={values:F?k:b("values"),keys:v?k:b("keys"),entries:P},y)for(_ in m)_ in x||o(x,_,m[_]);else i(i.P+i.F*(l||E),e,m);return m}},function(t,e,r){"use strict";var n=r(37),i=r(33),o=r(45),s={};r(12)(s,r(6)("iterator"),function(){return this}),t.exports=function(t,e,r){t.prototype=n(s,{next:i(1,r)}),o(t,e+" Iterator")}},function(t,e,r){var n=r(60),i=r(25);t.exports=function(t,e,r){if(n(e))throw TypeError("String#"+r+" doesn't accept regex!");return String(i(t))}},function(t,e,r){var n=r(6)("match");t.exports=function(t){var e=/./;try{"/./"[t](e)}catch(r){try{return e[n]=!1,!"/./"[t](e)}catch(t){}}return!0}},function(t,e,r){var n=r(48),i=r(6)("iterator"),o=Array.prototype;t.exports=function(t){return void 0!==t&&(n.Array===t||o[i]===t)}},function(t,e,r){"use strict";var n=r(9),i=r(33);t.exports=function(t,e,r){e in t?n.f(t,e,i(0,r)):t[e]=r}},function(t,e,r){var n=r(46),i=r(6)("iterator"),o=r(48);t.exports=r(19).getIteratorMethod=function(t){if(void 0!=t)return t[i]||t["@@iterator"]||o[n(t)]}},function(t,e,r){var n=r(245);t.exports=function(t,e){return new(n(t))(e)}},function(t,e,r){"use strict";var n=r(10),i=r(36),o=r(7);t.exports=function t(e){for(var r=n(this),s=o(r.length),a=arguments.length,u=i(a>1?arguments[1]:void 0,s),c=a>2?arguments[2]:void 0,f=void 0===c?s:i(c,s);f>u;)r[u++]=e;return r}},function(t,e,r){"use strict";var n=r(32),i=r(121),o=r(48),s=r(16);t.exports=r(83)(Array,"Array",function(t,e){this._t=s(t),this._i=0,this._k=e},function(){var t=this._t,e=this._k,r=this._i++;return!t||r>=t.length?(this._t=void 0,i(1)):i(0,"keys"==e?r:"values"==e?t[r]:[r,t[r]])},"values"),o.Arguments=o.Array,n("keys"),n("values"),n("entries")},function(t,e,r){"use strict";var n,i,o=r(53),s=RegExp.prototype.exec,a=String.prototype.replace,u=s,c=(n=/a/,i=/b*/g,s.call(n,"a"),s.call(i,"a"),0!==n.lastIndex||0!==i.lastIndex),f=void 0!==/()??/.exec("")[1];(c||f)&&(u=function t(e){var r,n,i,u,h=this;return f&&(n=new RegExp("^"+h.source+"$(?!\\s)",o.call(h))),c&&(r=h.lastIndex),i=s.call(h,e),c&&i&&(h.lastIndex=h.global?i.index+i[0].length:r),f&&i&&i.length>1&&a.call(i[0],n,function(){for(u=1;ui;)r.push(arguments[i++]);return y[++v]=function(){a("function"==typeof e?e:Function(e),r)},n(v),v},p=function t(e){delete y[e]},"process"==r(21)(h)?n=function(t){h.nextTick(s(m,t,1))}:g&&g.now?n=function(t){g.now(s(m,t,1))}:d?(o=(i=new d).port2,i.port1.onmessage=_,n=s(o.postMessage,o,1)):f.addEventListener&&"function"==typeof postMessage&&!f.importScripts?(n=function(t){f.postMessage(t+"","*")},f.addEventListener("message",_,!1)):n="onreadystatechange"in c("script")?function(t){u.appendChild(c("script")).onreadystatechange=function(){u.removeChild(this),m.call(t)}}:function(t){setTimeout(s(m,t,1),0)}),t.exports={set:l,clear:p}},function(t,e,r){var n=r(2),i=r(95).set,o=n.MutationObserver||n.WebKitMutationObserver,s=n.process,a=n.Promise,u="process"==r(21)(s);t.exports=function(){var t,e,r,c=function(){var n,i;for(u&&(n=s.domain)&&n.exit();t;){i=t.fn,t=t.next;try{i()}catch(n){throw t?r():e=void 0,n}}e=void 0,n&&n.enter()};if(u)r=function(){s.nextTick(c)};else if(!o||n.navigator&&n.navigator.standalone)if(a&&a.resolve){var f=a.resolve(void 0);r=function(){f.then(c)}}else r=function(){i.call(n,c)};else{var h=!0,l=document.createTextNode("");new o(c).observe(l,{characterData:!0}),r=function(){l.data=h=!h}}return function(n){var i={fn:n,next:void 0};e&&(e.next=i),t||(t=i,r()),e=i}}},function(t,e,r){"use strict";var n=r(11);t.exports.f=function(t){return new function e(t){var e,r;this.promise=new t(function(t,n){if(void 0!==e||void 0!==r)throw TypeError("Bad Promise constructor");e=t,r=n}),this.resolve=n(e),this.reject=n(r)}(t)}},function(t,e,r){"use strict";var n=r(2),i=r(8),o=r(30),s=r(66),a=r(12),u=r(42),c=r(4),f=r(40),h=r(22),l=r(7),p=r(131),d=r(38).f,g=r(9).f,v=r(91),y=r(45),m="prototype",_="Wrong index!",S=n.ArrayBuffer,b=n.DataView,w=n.Math,F=n.RangeError,E=n.Infinity,x=S,A=w.abs,k=w.pow,P=w.floor,C=w.log,T=w.LN2,R=i?"_b":"buffer",I=i?"_l":"byteLength",O=i?"_o":"byteOffset";function D(t,e,r){var n,i,o,s=new Array(r),a=8*r-e-1,u=(1<>1,f=23===e?k(2,-24)-k(2,-77):0,h=0,l=t<0||0===t&&1/t<0?1:0;for((t=A(t))!=t||t===E?(i=t!=t?1:0,n=u):(n=P(C(t)/T),t*(o=k(2,-n))<1&&(n--,o*=2),(t+=n+c>=1?f/o:f*k(2,1-c))*o>=2&&(n++,o/=2),n+c>=u?(i=0,n=u):n+c>=1?(i=(t*o-1)*k(2,e),n+=c):(i=t*k(2,c-1)*k(2,e),n=0));e>=8;s[h++]=255&i,i/=256,e-=8);for(n=n<0;s[h++]=255&n,n/=256,a-=8);return s[--h]|=128*l,s}function N(t,e,r){var n,i=8*r-e-1,o=(1<>1,a=i-7,u=r-1,c=t[u--],f=127&c;for(c>>=7;a>0;f=256*f+t[u],u--,a-=8);for(n=f&(1<<-a)-1,f>>=-a,a+=e;a>0;n=256*n+t[u],u--,a-=8);if(0===f)f=1-s;else{if(f===o)return n?NaN:c?-E:E;n+=k(2,e),f-=s}return(c?-1:1)*n*k(2,f-e)}function L(t){return t[3]<<24|t[2]<<16|t[1]<<8|t[0]}function M(t){return[255&t]}function j(t){return[255&t,t>>8&255]}function U(t){return[255&t,t>>8&255,t>>16&255,t>>24&255]}function B(t){return D(t,52,8)}function H(t){return D(t,23,4)}function V(t,e,r){g(t[m],e,{get:function(){return this[r]}})}function K(t,e,r,n){var i=p(+r);if(i+e>t[I])throw F(_);var o=t[R]._b,s=i+t[O],a=o.slice(s,s+e);return n?a:a.reverse()}function q(t,e,r,n,i,o){var s=p(+r);if(s+e>t[I])throw F(_);for(var a=t[R]._b,u=s+t[O],c=n(+i),f=0;fY;)(W=z[Y++])in S||a(S,W,x[W]);o||(J.constructor=S)}var G=new b(new S(2)),X=b[m].setInt8;G.setInt8(0,2147483648),G.setInt8(1,2147483649),!G.getInt8(0)&&G.getInt8(1)||u(b[m],{setInt8:function t(e,r){X.call(this,e,r<<24>>24)},setUint8:function t(e,r){X.call(this,e,r<<24>>24)}},!0)}else S=function t(e){f(this,S,"ArrayBuffer");var r=p(e);this._b=v.call(new Array(r),0),this[I]=r},b=function t(e,r,n){f(this,b,"DataView"),f(e,S,"DataView");var i=e[I],o=h(r);if(o<0||o>i)throw F("Wrong offset!");if(o+(n=void 0===n?i-o:l(n))>i)throw F("Wrong length!");this[R]=e,this[O]=o,this[I]=n},i&&(V(S,"byteLength","_l"),V(b,"buffer","_b"),V(b,"byteLength","_l"),V(b,"byteOffset","_o")),u(b[m],{getInt8:function t(e){return K(this,1,e)[0]<<24>>24},getUint8:function t(e){return K(this,1,e)[0]},getInt16:function t(e){var r=K(this,2,e,arguments[1]);return(r[1]<<8|r[0])<<16>>16},getUint16:function t(e){var r=K(this,2,e,arguments[1]);return r[1]<<8|r[0]},getInt32:function t(e){return L(K(this,4,e,arguments[1]))},getUint32:function t(e){return L(K(this,4,e,arguments[1]))>>>0},getFloat32:function t(e){return N(K(this,4,e,arguments[1]),23,4)},getFloat64:function t(e){return N(K(this,8,e,arguments[1]),52,8)},setInt8:function t(e,r){q(this,1,e,M,r)},setUint8:function t(e,r){q(this,1,e,M,r)},setInt16:function t(e,r){q(this,2,e,j,r,arguments[2])},setUint16:function t(e,r){q(this,2,e,j,r,arguments[2])},setInt32:function t(e,r){q(this,4,e,U,r,arguments[2])},setUint32:function t(e,r){q(this,4,e,U,r,arguments[2])},setFloat32:function t(e,r){q(this,4,e,H,r,arguments[2])},setFloat64:function t(e,r){q(this,8,e,B,r,arguments[2])}});y(S,"ArrayBuffer"),y(b,"DataView"),a(b[m],s.VIEW,!0),e.ArrayBuffer=S,e.DataView=b},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.OidcClientSettings=void 0;var n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},i=function(){function t(t,e){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:{},r=e.authority,i=e.metadataUrl,o=e.metadata,p=e.signingKeys,d=e.client_id,g=e.client_secret,v=e.response_type,y=void 0===v?c:v,m=e.scope,_=void 0===m?f:m,S=e.redirect_uri,b=e.post_logout_redirect_uri,w=e.prompt,F=e.display,E=e.max_age,x=e.ui_locales,A=e.acr_values,k=e.resource,P=e.response_mode,C=e.filterProtocolClaims,T=void 0===C||C,R=e.loadUserInfo,I=void 0===R||R,O=e.staleStateAge,D=void 0===O?h:O,N=e.clockSkew,L=void 0===N?l:N,M=e.userInfoJwtIssuer,j=void 0===M?"OP":M,U=e.stateStore,B=void 0===U?new s.WebStorageStateStore:U,H=e.ResponseValidatorCtor,V=void 0===H?a.ResponseValidator:H,K=e.MetadataServiceCtor,q=void 0===K?u.MetadataService:K,W=e.extraQueryParams,J=void 0===W?{}:W;!function z(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),this._authority=r,this._metadataUrl=i,this._metadata=o,this._signingKeys=p,this._client_id=d,this._client_secret=g,this._response_type=y,this._scope=_,this._redirect_uri=S,this._post_logout_redirect_uri=b,this._prompt=w,this._display=F,this._max_age=E,this._ui_locales=x,this._acr_values=A,this._resource=k,this._response_mode=P,this._filterProtocolClaims=!!T,this._loadUserInfo=!!I,this._staleStateAge=D,this._clockSkew=L,this._userInfoJwtIssuer=j,this._stateStore=B,this._validator=new V(this),this._metadataService=new q(this),this._extraQueryParams="object"===(void 0===J?"undefined":n(J))?J:{}}return i(t,[{key:"client_id",get:function t(){return this._client_id},set:function t(e){if(this._client_id)throw o.Log.error("OidcClientSettings.set_client_id: client_id has already been assigned."),new Error("client_id has already been assigned.");this._client_id=e}},{key:"client_secret",get:function t(){return this._client_secret}},{key:"response_type",get:function t(){return this._response_type}},{key:"scope",get:function t(){return this._scope}},{key:"redirect_uri",get:function t(){return this._redirect_uri}},{key:"post_logout_redirect_uri",get:function t(){return this._post_logout_redirect_uri}},{key:"prompt",get:function t(){return this._prompt}},{key:"display",get:function t(){return this._display}},{key:"max_age",get:function t(){return this._max_age}},{key:"ui_locales",get:function t(){return this._ui_locales}},{key:"acr_values",get:function t(){return this._acr_values}},{key:"resource",get:function t(){return this._resource}},{key:"response_mode",get:function t(){return this._response_mode}},{key:"authority",get:function t(){return this._authority},set:function t(e){if(this._authority)throw o.Log.error("OidcClientSettings.set_authority: authority has already been assigned."),new Error("authority has already been assigned.");this._authority=e}},{key:"metadataUrl",get:function t(){return this._metadataUrl||(this._metadataUrl=this.authority,this._metadataUrl&&this._metadataUrl.indexOf(".well-known/openid-configuration")<0&&("/"!==this._metadataUrl[this._metadataUrl.length-1]&&(this._metadataUrl+="/"),this._metadataUrl+=".well-known/openid-configuration")),this._metadataUrl}},{key:"metadata",get:function t(){return this._metadata},set:function t(e){this._metadata=e}},{key:"signingKeys",get:function t(){return this._signingKeys},set:function t(e){this._signingKeys=e}},{key:"filterProtocolClaims",get:function t(){return this._filterProtocolClaims}},{key:"loadUserInfo",get:function t(){return this._loadUserInfo}},{key:"staleStateAge",get:function t(){return this._staleStateAge}},{key:"clockSkew",get:function t(){return this._clockSkew}},{key:"userInfoJwtIssuer",get:function t(){return this._userInfoJwtIssuer}},{key:"stateStore",get:function t(){return this._stateStore}},{key:"validator",get:function t(){return this._validator}},{key:"metadataService",get:function t(){return this._metadataService}},{key:"extraQueryParams",get:function t(){return this._extraQueryParams},set:function t(e){"object"===(void 0===e?"undefined":n(e))?this._extraQueryParams=e:this._extraQueryParams={}}}]),t}()},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.WebStorageStateStore=void 0;var n=r(3),i=r(44);e.WebStorageStateStore=function(){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=e.prefix,n=void 0===r?"oidc.":r,o=e.store,s=void 0===o?i.Global.localStorage:o;!function a(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),this._store=s,this._prefix=n}return t.prototype.set=function t(e,r){return n.Log.debug("WebStorageStateStore.set",e),e=this._prefix+e,this._store.setItem(e,r),Promise.resolve()},t.prototype.get=function t(e){n.Log.debug("WebStorageStateStore.get",e),e=this._prefix+e;var r=this._store.getItem(e);return Promise.resolve(r)},t.prototype.remove=function t(e){n.Log.debug("WebStorageStateStore.remove",e),e=this._prefix+e;var r=this._store.getItem(e);return this._store.removeItem(e),Promise.resolve(r)},t.prototype.getAllKeys=function t(){n.Log.debug("WebStorageStateStore.getAllKeys");for(var e=[],r=0;r0&&void 0!==arguments[0]?arguments[0]:null,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:i.Global.XMLHttpRequest,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;!function o(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),e&&Array.isArray(e)?this._contentTypes=e.slice():this._contentTypes=[],this._contentTypes.push("application/json"),n&&this._contentTypes.push("application/jwt"),this._XMLHttpRequest=r,this._jwtHandler=n}return t.prototype.getJson=function t(e,r){var i=this;if(!e)throw n.Log.error("JsonService.getJson: No url passed"),new Error("url");return n.Log.debug("JsonService.getJson, url: ",e),new Promise(function(t,o){var s=new i._XMLHttpRequest;s.open("GET",e);var a=i._contentTypes,u=i._jwtHandler;s.onload=function(){if(n.Log.debug("JsonService.getJson: HTTP response received, status",s.status),200===s.status){var r=s.getResponseHeader("Content-Type");if(r){var i=a.find(function(t){if(r.startsWith(t))return!0});if("application/jwt"==i)return void u(s).then(t,o);if(i)try{return void t(JSON.parse(s.responseText))}catch(t){return n.Log.error("JsonService.getJson: Error parsing JSON response",t.message),void o(t)}}o(Error("Invalid response Content-Type: "+r+", from URL: "+e))}else o(Error(s.statusText+" ("+s.status+")"))},s.onerror=function(){n.Log.error("JsonService.getJson: network error"),o(Error("Network Error"))},r&&(n.Log.debug("JsonService.getJson: token passed, setting Authorization header"),s.setRequestHeader("Authorization","Bearer "+r)),s.send()})},t.prototype.postForm=function t(e,r){var i=this;if(!e)throw n.Log.error("JsonService.postForm: No url passed"),new Error("url");return n.Log.debug("JsonService.postForm, url: ",e),new Promise(function(t,o){var s=new i._XMLHttpRequest;s.open("POST",e);var a=i._contentTypes;s.onload=function(){if(n.Log.debug("JsonService.postForm: HTTP response received, status",s.status),200!==s.status){if(400===s.status)if(i=s.getResponseHeader("Content-Type"))if(a.find(function(t){if(i.startsWith(t))return!0}))try{var r=JSON.parse(s.responseText);if(r&&r.error)return n.Log.error("JsonService.postForm: Error from server: ",r.error),void o(new Error(r.error))}catch(t){return n.Log.error("JsonService.postForm: Error parsing JSON response",t.message),void o(t)}o(Error(s.statusText+" ("+s.status+")"))}else{var i;if((i=s.getResponseHeader("Content-Type"))&&a.find(function(t){if(i.startsWith(t))return!0}))try{return void t(JSON.parse(s.responseText))}catch(t){return n.Log.error("JsonService.postForm: Error parsing JSON response",t.message),void o(t)}o(Error("Invalid response Content-Type: "+i+", from URL: "+e))}},s.onerror=function(){n.Log.error("JsonService.postForm: network error"),o(Error("Network Error"))};var u="";for(var c in r){var f=r[c];f&&(u.length>0&&(u+="&"),u+=encodeURIComponent(c),u+="=",u+=encodeURIComponent(f))}s.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),s.send(u)})},t}()},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.State=void 0;var n=function(){function t(t,e){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:{},r=e.id,n=e.data,i=e.created,s=e.request_type;!function a(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),this._id=r||(0,o.default)(),this._data=n,this._created="number"==typeof i&&i>0?i:parseInt(Date.now()/1e3),this._request_type=s}return t.prototype.toStorageString=function t(){return i.Log.debug("State.toStorageString"),JSON.stringify({id:this.id,data:this.data,created:this.created,request_type:this.request_type})},t.fromStorageString=function e(r){return i.Log.debug("State.fromStorageString"),new t(JSON.parse(r))},t.clearStaleState=function e(r,n){var o=Date.now()/1e3-n;return r.getAllKeys().then(function(e){i.Log.debug("State.clearStaleState: got keys",e);for(var n=[],s=function s(a){var c=e[a];u=r.get(c).then(function(e){var n=!1;if(e)try{var s=t.fromStorageString(e);i.Log.debug("State.clearStaleState: got item from key: ",c,s.created),s.created<=o&&(n=!0)}catch(t){i.Log.error("State.clearStaleState: Error parsing state for key",c,t.message),n=!0}else i.Log.debug("State.clearStaleState: no item in storage for key: ",c),n=!0;if(n)return i.Log.debug("State.clearStaleState: removed item for key: ",c),r.remove(c)}),n.push(u)},a=0;au;)n(a,r=e[u++])&&(~o(c,r)||c.push(r));return c}},function(t,e,r){var n=r(9),i=r(1),o=r(35);t.exports=r(8)?Object.defineProperties:function t(e,r){i(e);for(var s,a=o(r),u=a.length,c=0;u>c;)n.f(e,s=a[c++],r[s]);return e}},function(t,e,r){var n=r(16),i=r(38).f,o={}.toString,s="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[];t.exports.f=function t(e){return s&&"[object Window]"==o.call(e)?function(t){try{return i(t)}catch(t){return s.slice()}}(e):i(n(e))}},function(t,e,r){"use strict";var n=r(35),i=r(57),o=r(52),s=r(10),a=r(51),u=Object.assign;t.exports=!u||r(4)(function(){var t={},e={},r=Symbol(),n="abcdefghijklmnopqrst";return t[r]=7,n.split("").forEach(function(t){e[t]=t}),7!=u({},t)[r]||Object.keys(u({},e)).join("")!=n})?function t(e,r){for(var u=s(e),c=arguments.length,f=1,h=i.f,l=o.f;c>f;)for(var p,d=a(arguments[f++]),g=h?n(d).concat(h(d)):n(d),v=g.length,y=0;v>y;)l.call(d,p=g[y++])&&(u[p]=d[p]);return u}:u},function(t,e){t.exports=Object.is||function t(e,r){return e===r?0!==e||1/e==1/r:e!=e&&r!=r}},function(t,e,r){"use strict";var n=r(11),i=r(5),o=r(111),s=[].slice,a={};t.exports=Function.bind||function t(e){var r=n(this),u=s.call(arguments,1),c=function(){var t=u.concat(s.call(arguments));return this instanceof c?function(t,e,r){if(!(e in a)){for(var n=[],i=0;i>>0||(s.test(o)?16:10))}:n},function(t,e,r){var n=r(2).parseFloat,i=r(47).trim;t.exports=1/n(r(78)+"-0")!=-1/0?function t(e){var r=i(String(e),3),o=n(r);return 0===o&&"-"==r.charAt(0)?-0:o}:n},function(t,e,r){var n=r(21);t.exports=function(t,e){if("number"!=typeof t&&"Number"!=n(t))throw TypeError(e);return+t}},function(t,e,r){var n=r(5),i=Math.floor;t.exports=function t(e){return!n(e)&&isFinite(e)&&i(e)===e}},function(t,e){t.exports=Math.log1p||function t(e){return(e=+e)>-1e-8&&e<1e-8?e-e*e/2:Math.log(1+e)}},function(t,e,r){var n=r(81),i=Math.pow,o=i(2,-52),s=i(2,-23),a=i(2,127)*(2-s),u=i(2,-126);t.exports=Math.fround||function t(e){var r,i,c=Math.abs(e),f=n(e);return ca||i!=i?f*(1/0):f*i}},function(t,e,r){var n=r(1);t.exports=function(t,e,r,i){try{return i?e(n(r)[0],r[1]):e(r)}catch(e){var o=t.return;throw void 0!==o&&n(o.call(t)),e}}},function(t,e,r){var n=r(11),i=r(10),o=r(51),s=r(7);t.exports=function(t,e,r,a,u){n(e);var c=i(t),f=o(c),h=s(c.length),l=u?h-1:0,p=u?-1:1;if(r<2)for(;;){if(l in f){a=f[l],l+=p;break}if(l+=p,u?l<0:h<=l)throw TypeError("Reduce of empty array with no initial value")}for(;u?l>=0:h>l;l+=p)l in f&&(a=e(a,f[l],l,c));return a}},function(t,e,r){"use strict";var n=r(10),i=r(36),o=r(7);t.exports=[].copyWithin||function t(e,r){var s=n(this),a=o(s.length),u=i(e,a),c=i(r,a),f=arguments.length>2?arguments[2]:void 0,h=Math.min((void 0===f?a:i(f,a))-c,a-u),l=1;for(c0;)c in s?s[u]=s[c]:delete s[u],u+=l,c+=l;return s}},function(t,e){t.exports=function(t,e){return{value:e,done:!!t}}},function(t,e,r){"use strict";var n=r(93);r(0)({target:"RegExp",proto:!0,forced:n!==/./.exec},{exec:n})},function(t,e,r){r(8)&&"g"!=/./g.flags&&r(9).f(RegExp.prototype,"flags",{configurable:!0,get:r(53)})},function(t,e){t.exports=function(t){try{return{e:!1,v:t()}}catch(t){return{e:!0,v:t}}}},function(t,e,r){var n=r(1),i=r(5),o=r(97);t.exports=function(t,e){if(n(t),i(e)&&e.constructor===t)return e;var r=o.f(t);return(0,r.resolve)(e),r.promise}},function(t,e,r){"use strict";var n=r(127),i=r(43);t.exports=r(65)("Map",function(t){return function e(){return t(this,arguments.length>0?arguments[0]:void 0)}},{get:function t(e){var r=n.getEntry(i(this,"Map"),e);return r&&r.v},set:function t(e,r){return n.def(i(this,"Map"),0===e?0:e,r)}},n,!0)},function(t,e,r){"use strict";var n=r(9).f,i=r(37),o=r(42),s=r(20),a=r(40),u=r(41),c=r(83),f=r(121),h=r(39),l=r(8),p=r(31).fastKey,d=r(43),g=l?"_s":"size",v=function(t,e){var r,n=p(e);if("F"!==n)return t._i[n];for(r=t._f;r;r=r.n)if(r.k==e)return r};t.exports={getConstructor:function(t,e,r,c){var f=t(function(t,n){a(t,f,e,"_i"),t._t=e,t._i=i(null),t._f=void 0,t._l=void 0,t[g]=0,void 0!=n&&u(n,r,t[c],t)});return o(f.prototype,{clear:function t(){for(var r=d(this,e),n=r._i,i=r._f;i;i=i.n)i.r=!0,i.p&&(i.p=i.p.n=void 0),delete n[i.i];r._f=r._l=void 0,r[g]=0},delete:function(t){var r=d(this,e),n=v(r,t);if(n){var i=n.n,o=n.p;delete r._i[n.i],n.r=!0,o&&(o.n=i),i&&(i.p=o),r._f==n&&(r._f=i),r._l==n&&(r._l=o),r[g]--}return!!n},forEach:function t(r){d(this,e);for(var n,i=s(r,arguments.length>1?arguments[1]:void 0,3);n=n?n.n:this._f;)for(i(n.v,n.k,this);n&&n.r;)n=n.p},has:function t(r){return!!v(d(this,e),r)}}),l&&n(f.prototype,"size",{get:function(){return d(this,e)[g]}}),f},def:function(t,e,r){var n,i,o=v(t,e);return o?o.v=r:(t._l=o={i:i=p(e,!0),k:e,v:r,p:n=t._l,n:void 0,r:!1},t._f||(t._f=o),n&&(n.n=o),t[g]++,"F"!==i&&(t._i[i]=o)),t},getEntry:v,setStrong:function(t,e,r){c(t,e,function(t,r){this._t=d(t,e),this._k=r,this._l=void 0},function(){for(var t=this._k,e=this._l;e&&e.r;)e=e.p;return this._t&&(this._l=e=e?e.n:this._t._f)?f(0,"keys"==t?e.k:"values"==t?e.v:[e.k,e.v]):(this._t=void 0,f(1))},r?"entries":"values",!r,!0),h(e)}}},function(t,e,r){"use strict";var n=r(127),i=r(43);t.exports=r(65)("Set",function(t){return function e(){return t(this,arguments.length>0?arguments[0]:void 0)}},{add:function t(e){return n.def(i(this,"Set"),e=0===e?0:e,e)}},n)},function(t,e,r){"use strict";var n,i=r(2),o=r(27)(0),s=r(13),a=r(31),u=r(108),c=r(130),f=r(5),h=r(43),l=r(43),p=!i.ActiveXObject&&"ActiveXObject"in i,d=a.getWeak,g=Object.isExtensible,v=c.ufstore,y=function(t){return function e(){return t(this,arguments.length>0?arguments[0]:void 0)}},m={get:function t(e){if(f(e)){var r=d(e);return!0===r?v(h(this,"WeakMap")).get(e):r?r[this._i]:void 0}},set:function t(e,r){return c.def(h(this,"WeakMap"),e,r)}},_=t.exports=r(65)("WeakMap",y,m,c,!0,!0);l&&p&&(u((n=c.getConstructor(y,"WeakMap")).prototype,m),a.NEED=!0,o(["delete","has","get","set"],function(t){var e=_.prototype,r=e[t];s(e,t,function(e,i){if(f(e)&&!g(e)){this._f||(this._f=new n);var o=this._f[t](e,i);return"set"==t?this:o}return r.call(this,e,i)})}))},function(t,e,r){"use strict";var n=r(42),i=r(31).getWeak,o=r(1),s=r(5),a=r(40),u=r(41),c=r(27),f=r(15),h=r(43),l=c(5),p=c(6),d=0,g=function(t){return t._l||(t._l=new v)},v=function(){this.a=[]},y=function(t,e){return l(t.a,function(t){return t[0]===e})};v.prototype={get:function(t){var e=y(this,t);if(e)return e[1]},has:function(t){return!!y(this,t)},set:function(t,e){var r=y(this,t);r?r[1]=e:this.a.push([t,e])},delete:function(t){var e=p(this.a,function(e){return e[0]===t});return~e&&this.a.splice(e,1),!!~e}},t.exports={getConstructor:function(t,e,r,o){var c=t(function(t,n){a(t,c,e,"_i"),t._t=e,t._i=d++,t._l=void 0,void 0!=n&&u(n,r,t[o],t)});return n(c.prototype,{delete:function(t){if(!s(t))return!1;var r=i(t);return!0===r?g(h(this,e)).delete(t):r&&f(r,this._i)&&delete r[this._i]},has:function t(r){if(!s(r))return!1;var n=i(r);return!0===n?g(h(this,e)).has(r):n&&f(n,this._i)}}),c},def:function(t,e,r){var n=i(o(e),!0);return!0===n?g(t).set(e,r):n[t._i]=r,t},ufstore:g}},function(t,e,r){var n=r(22),i=r(7);t.exports=function(t){if(void 0===t)return 0;var e=n(t),r=i(e);if(e!==r)throw RangeError("Wrong length!");return r}},function(t,e,r){var n=r(38),i=r(57),o=r(1),s=r(2).Reflect;t.exports=s&&s.ownKeys||function t(e){var r=n.f(o(e)),s=i.f;return s?r.concat(s(e)):r}},function(t,e,r){"use strict";var n=r(58),i=r(5),o=r(7),s=r(20),a=r(6)("isConcatSpreadable");t.exports=function t(e,r,u,c,f,h,l,p){for(var d,g,v=f,y=0,m=!!l&&s(l,p,3);y0)v=t(e,r,d,o(d.length),v,h-1)-1;else{if(v>=9007199254740991)throw TypeError();e[v]=d}v++}y++}return v}},function(t,e,r){var n=r(7),i=r(80),o=r(25);t.exports=function(t,e,r,s){var a=String(o(t)),u=a.length,c=void 0===r?" ":String(r),f=n(e);if(f<=u||""==c)return a;var h=f-u,l=i.call(c,Math.ceil(h/c.length));return l.length>h&&(l=l.slice(0,h)),s?l+a:a+l}},function(t,e,r){var n=r(35),i=r(16),o=r(52).f;t.exports=function(t){return function(e){for(var r,s=i(e),a=n(s),u=a.length,c=0,f=[];u>c;)o.call(s,r=a[c++])&&f.push(t?[r,s[r]]:s[r]);return f}}},function(t,e,r){var n=r(46),i=r(137);t.exports=function(t){return function e(){if(n(this)!=t)throw TypeError(t+"#toJSON isn't generic");return i(this)}}},function(t,e,r){var n=r(41);t.exports=function(t,e){var r=[];return n(t,!1,r.push,r,e),r}},function(t,e){t.exports=Math.scale||function t(e,r,n,i,o){return 0===arguments.length||e!=e||r!=r||n!=n||i!=i||o!=o?NaN:e===1/0||e===-1/0?e:(e-r)*(o-i)/(n-r)+i}},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.OidcClient=void 0;var n=function(){function t(t,e){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:{};!function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),e instanceof o.OidcClientSettings?this._settings=e:this._settings=new o.OidcClientSettings(e)}return t.prototype.createSigninRequest=function t(){var e=this,r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=r.response_type,o=r.scope,s=r.redirect_uri,u=r.data,c=r.state,f=r.prompt,h=r.display,l=r.max_age,p=r.ui_locales,d=r.id_token_hint,g=r.login_hint,v=r.acr_values,y=r.resource,m=r.request,_=r.request_uri,S=r.response_mode,b=r.extraQueryParams,w=r.extraTokenParams,F=r.request_type,E=r.skipUserInfo,x=arguments[1];i.Log.debug("OidcClient.createSigninRequest");var A=this._settings.client_id;n=n||this._settings.response_type,o=o||this._settings.scope,s=s||this._settings.redirect_uri,f=f||this._settings.prompt,h=h||this._settings.display,l=l||this._settings.max_age,p=p||this._settings.ui_locales,v=v||this._settings.acr_values,y=y||this._settings.resource,S=S||this._settings.response_mode,b=b||this._settings.extraQueryParams;var k=this._settings.authority;return a.SigninRequest.isCode(n)&&"code"!==n?Promise.reject(new Error("OpenID Connect hybrid flow is not supported")):this._metadataService.getAuthorizationEndpoint().then(function(t){i.Log.debug("OidcClient.createSigninRequest: Received authorization endpoint",t);var r=new a.SigninRequest({url:t,client_id:A,redirect_uri:s,response_type:n,scope:o,data:u||c,authority:k,prompt:f,display:h,max_age:l,ui_locales:p,id_token_hint:d,login_hint:g,acr_values:v,resource:y,request:m,request_uri:_,extraQueryParams:b,extraTokenParams:w,request_type:F,response_mode:S,client_secret:e._settings.client_secret,skipUserInfo:E}),P=r.state;return(x=x||e._stateStore).set(P.id,P.toStorageString()).then(function(){return r})})},t.prototype.readSigninResponseState=function t(e,r){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];i.Log.debug("OidcClient.readSigninResponseState");var o="query"===this._settings.response_mode||!this._settings.response_mode&&a.SigninRequest.isCode(this._settings.response_type)?"?":"#",s=new u.SigninResponse(e,o);return s.state?(r=r||this._stateStore,(n?r.remove.bind(r):r.get.bind(r))(s.state).then(function(t){if(!t)throw i.Log.error("OidcClient.readSigninResponseState: No matching state found in storage"),new Error("No matching state found in storage");return{state:h.SigninState.fromStorageString(t),response:s}})):(i.Log.error("OidcClient.readSigninResponseState: No state in response"),Promise.reject(new Error("No state in response")))},t.prototype.processSigninResponse=function t(e,r){var n=this;return i.Log.debug("OidcClient.processSigninResponse"),this.readSigninResponseState(e,r,!0).then(function(t){var e=t.state,r=t.response;return i.Log.debug("OidcClient.processSigninResponse: Received state from storage; validating response"),n._validator.validateSigninResponse(e,r)})},t.prototype.createSignoutRequest=function t(){var e=this,r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=r.id_token_hint,o=r.data,s=r.state,a=r.post_logout_redirect_uri,u=r.extraQueryParams,f=r.request_type,h=arguments[1];return i.Log.debug("OidcClient.createSignoutRequest"),a=a||this._settings.post_logout_redirect_uri,u=u||this._settings.extraQueryParams,this._metadataService.getEndSessionEndpoint().then(function(t){if(!t)throw i.Log.error("OidcClient.createSignoutRequest: No end session endpoint url returned"),new Error("no end session endpoint");i.Log.debug("OidcClient.createSignoutRequest: Received end session endpoint",t);var r=new c.SignoutRequest({url:t,id_token_hint:n,post_logout_redirect_uri:a,data:o||s,extraQueryParams:u,request_type:f}),l=r.state;return l&&(i.Log.debug("OidcClient.createSignoutRequest: Signout request has state to persist"),(h=h||e._stateStore).set(l.id,l.toStorageString())),r})},t.prototype.readSignoutResponseState=function t(e,r){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];i.Log.debug("OidcClient.readSignoutResponseState");var o=new f.SignoutResponse(e);if(!o.state)return i.Log.debug("OidcClient.readSignoutResponseState: No state in response"),o.error?(i.Log.warn("OidcClient.readSignoutResponseState: Response was error: ",o.error),Promise.reject(new s.ErrorResponse(o))):Promise.resolve({undefined:void 0,response:o});var a=o.state;return r=r||this._stateStore,(n?r.remove.bind(r):r.get.bind(r))(a).then(function(t){if(!t)throw i.Log.error("OidcClient.readSignoutResponseState: No matching state found in storage"),new Error("No matching state found in storage");return{state:l.State.fromStorageString(t),response:o}})},t.prototype.processSignoutResponse=function t(e,r){var n=this;return i.Log.debug("OidcClient.processSignoutResponse"),this.readSignoutResponseState(e,r,!0).then(function(t){var e=t.state,r=t.response;return e?(i.Log.debug("OidcClient.processSignoutResponse: Received state from storage; validating response"),n._validator.validateSignoutResponse(e,r)):(i.Log.debug("OidcClient.processSignoutResponse: No state from storage; skipping validating response"),r)})},t.prototype.clearStaleState=function t(e){return i.Log.debug("OidcClient.clearStaleState"),e=e||this._stateStore,l.State.clearStaleState(e,this.settings.staleStateAge)},n(t,[{key:"_stateStore",get:function t(){return this.settings.stateStore}},{key:"_validator",get:function t(){return this.settings.validator}},{key:"_metadataService",get:function t(){return this.settings.metadataService}},{key:"settings",get:function t(){return this._settings}},{key:"metadataService",get:function t(){return this._metadataService}}]),t}()},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.TokenClient=void 0;var n=r(101),i=r(49),o=r(3);e.TokenClient=function(){function t(e){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n.JsonService,s=arguments.length>2&&void 0!==arguments[2]?arguments[2]:i.MetadataService;if(function a(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),!e)throw o.Log.error("TokenClient.ctor: No settings passed"),new Error("settings");this._settings=e,this._jsonService=new r,this._metadataService=new s(this._settings)}return t.prototype.exchangeCode=function t(){var e=this,r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return(r=Object.assign({},r)).grant_type=r.grant_type||"authorization_code",r.client_id=r.client_id||this._settings.client_id,r.redirect_uri=r.redirect_uri||this._settings.redirect_uri,r.code?r.redirect_uri?r.code_verifier?r.client_id?this._metadataService.getTokenEndpoint(!1).then(function(t){return o.Log.debug("TokenClient.exchangeCode: Received token endpoint"),e._jsonService.postForm(t,r).then(function(t){return o.Log.debug("TokenClient.exchangeCode: response received"),t})}):(o.Log.error("TokenClient.exchangeCode: No client_id passed"),Promise.reject(new Error("A client_id is required"))):(o.Log.error("TokenClient.exchangeCode: No code_verifier passed"),Promise.reject(new Error("A code_verifier is required"))):(o.Log.error("TokenClient.exchangeCode: No redirect_uri passed"),Promise.reject(new Error("A redirect_uri is required"))):(o.Log.error("TokenClient.exchangeCode: No code passed"),Promise.reject(new Error("A code is required")))},t.prototype.exchangeRefreshToken=function t(){var e=this,r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return(r=Object.assign({},r)).grant_type=r.grant_type||"refresh_token",r.client_id=r.client_id||this._settings.client_id,r.client_secret=r.client_secret||this._settings.client_secret,r.refresh_token?r.client_id?this._metadataService.getTokenEndpoint(!1).then(function(t){return o.Log.debug("TokenClient.exchangeRefreshToken: Received token endpoint"),e._jsonService.postForm(t,r).then(function(t){return o.Log.debug("TokenClient.exchangeRefreshToken: response received"),t})}):(o.Log.error("TokenClient.exchangeRefreshToken: No client_id passed"),Promise.reject(new Error("A client_id is required"))):(o.Log.error("TokenClient.exchangeRefreshToken: No refresh_token passed"),Promise.reject(new Error("A refresh_token is required")))},t}()},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ErrorResponse=void 0;var n=r(3);e.ErrorResponse=function(t){function e(){var r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},i=r.error,o=r.error_description,s=r.error_uri,a=r.state,u=r.session_state;if(function c(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,e),!i)throw n.Log.error("No error passed to ErrorResponse"),new Error("error");var f=function h(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}(this,t.call(this,o||i));return f.name="ErrorResponse",f.error=i,f.error_description=o,f.error_uri=s,f.state=a,f.session_state=u,f}return function r(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}(e,t),e}(Error)},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.SigninRequest=void 0;var n=r(3),i=r(55),o=r(143);e.SigninRequest=function(){function t(e){var r=e.url,s=e.client_id,a=e.redirect_uri,u=e.response_type,c=e.scope,f=e.authority,h=e.data,l=e.prompt,p=e.display,d=e.max_age,g=e.ui_locales,v=e.id_token_hint,y=e.login_hint,m=e.acr_values,_=e.resource,S=e.response_mode,b=e.request,w=e.request_uri,F=e.extraQueryParams,E=e.request_type,x=e.client_secret,A=e.extraTokenParams,k=e.skipUserInfo;if(function P(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),!r)throw n.Log.error("SigninRequest.ctor: No url passed"),new Error("url");if(!s)throw n.Log.error("SigninRequest.ctor: No client_id passed"),new Error("client_id");if(!a)throw n.Log.error("SigninRequest.ctor: No redirect_uri passed"),new Error("redirect_uri");if(!u)throw n.Log.error("SigninRequest.ctor: No response_type passed"),new Error("response_type");if(!c)throw n.Log.error("SigninRequest.ctor: No scope passed"),new Error("scope");if(!f)throw n.Log.error("SigninRequest.ctor: No authority passed"),new Error("authority");var C=t.isOidc(u),T=t.isCode(u);S||(S=t.isCode(u)?"query":null),this.state=new o.SigninState({nonce:C,data:h,client_id:s,authority:f,redirect_uri:a,code_verifier:T,request_type:E,response_mode:S,client_secret:x,scope:c,extraTokenParams:A,skipUserInfo:k}),r=i.UrlUtility.addQueryParam(r,"client_id",s),r=i.UrlUtility.addQueryParam(r,"redirect_uri",a),r=i.UrlUtility.addQueryParam(r,"response_type",u),r=i.UrlUtility.addQueryParam(r,"scope",c),r=i.UrlUtility.addQueryParam(r,"state",this.state.id),C&&(r=i.UrlUtility.addQueryParam(r,"nonce",this.state.nonce)),T&&(r=i.UrlUtility.addQueryParam(r,"code_challenge",this.state.code_challenge),r=i.UrlUtility.addQueryParam(r,"code_challenge_method","S256"));var R={prompt:l,display:p,max_age:d,ui_locales:g,id_token_hint:v,login_hint:y,acr_values:m,resource:_,request:b,request_uri:w,response_mode:S};for(var I in R)R[I]&&(r=i.UrlUtility.addQueryParam(r,I,R[I]));for(var O in F)r=i.UrlUtility.addQueryParam(r,O,F[O]);this.url=r}return t.isOidc=function t(e){return!!e.split(/\s+/g).filter(function(t){return"id_token"===t})[0]},t.isOAuth=function t(e){return!!e.split(/\s+/g).filter(function(t){return"token"===t})[0]},t.isCode=function t(e){return!!e.split(/\s+/g).filter(function(t){return"code"===t})[0]},t}()},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.SigninState=void 0;var n=function(){function t(t,e){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:{},n=r.nonce,i=r.authority,o=r.client_id,u=r.redirect_uri,c=r.code_verifier,f=r.response_mode,h=r.client_secret,l=r.scope,p=r.extraTokenParams,d=r.skipUserInfo;!function g(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,e);var v=function y(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}(this,t.call(this,arguments[0]));if(!0===n?v._nonce=(0,a.default)():n&&(v._nonce=n),!0===c?v._code_verifier=(0,a.default)()+(0,a.default)()+(0,a.default)():c&&(v._code_verifier=c),v.code_verifier){var m=s.JoseUtil.hashString(v.code_verifier,"SHA256");v._code_challenge=s.JoseUtil.hexToBase64Url(m)}return v._redirect_uri=u,v._authority=i,v._client_id=o,v._response_mode=f,v._client_secret=h,v._scope=l,v._extraTokenParams=p,v._skipUserInfo=d,v}return function r(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}(e,t),e.prototype.toStorageString=function t(){return i.Log.debug("SigninState.toStorageString"),JSON.stringify({id:this.id,data:this.data,created:this.created,request_type:this.request_type,nonce:this.nonce,code_verifier:this.code_verifier,redirect_uri:this.redirect_uri,authority:this.authority,client_id:this.client_id,response_mode:this.response_mode,client_secret:this.client_secret,scope:this.scope,extraTokenParams:this.extraTokenParams,skipUserInfo:this.skipUserInfo})},e.fromStorageString=function t(r){return i.Log.debug("SigninState.fromStorageString"),new e(JSON.parse(r))},n(e,[{key:"nonce",get:function t(){return this._nonce}},{key:"authority",get:function t(){return this._authority}},{key:"client_id",get:function t(){return this._client_id}},{key:"redirect_uri",get:function t(){return this._redirect_uri}},{key:"code_verifier",get:function t(){return this._code_verifier}},{key:"code_challenge",get:function t(){return this._code_challenge}},{key:"response_mode",get:function t(){return this._response_mode}},{key:"client_secret",get:function t(){return this._client_secret}},{key:"scope",get:function t(){return this._scope}},{key:"extraTokenParams",get:function t(){return this._extraTokenParams}},{key:"skipUserInfo",get:function t(){return this._skipUserInfo}}]),e}(o.State)},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default=function n(){return(0,i.default)().replace(/-/g,"")};var i=function o(t){return t&&t.__esModule?t:{default:t}}(r(365));t.exports=e.default},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.User=void 0;var n=function(){function t(t,e){for(var r=0;r0){var n=parseInt(Date.now()/1e3);this.expires_at=n+r}}},{key:"expired",get:function t(){var e=this.expires_in;if(void 0!==e)return e<=0}},{key:"scopes",get:function t(){return(this.scope||"").split(" ")}}]),t}()},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.AccessTokenEvents=void 0;var n=r(3),i=r(380);var o=60;e.AccessTokenEvents=function(){function t(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=e.accessTokenExpiringNotificationTime,n=void 0===r?o:r,s=e.accessTokenExpiringTimer,a=void 0===s?new i.Timer("Access token expiring"):s,u=e.accessTokenExpiredTimer,c=void 0===u?new i.Timer("Access token expired"):u;!function f(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),this._accessTokenExpiringNotificationTime=n,this._accessTokenExpiring=a,this._accessTokenExpired=c}return t.prototype.load=function t(e){if(e.access_token&&void 0!==e.expires_in){var r=e.expires_in;if(n.Log.debug("AccessTokenEvents.load: access token present, remaining duration:",r),r>0){var i=r-this._accessTokenExpiringNotificationTime;i<=0&&(i=1),n.Log.debug("AccessTokenEvents.load: registering expiring timer in:",i),this._accessTokenExpiring.init(i)}else n.Log.debug("AccessTokenEvents.load: canceling existing expiring timer becase we're past expiration."),this._accessTokenExpiring.cancel();var o=r+1;n.Log.debug("AccessTokenEvents.load: registering expired timer in:",o),this._accessTokenExpired.init(o)}else this._accessTokenExpiring.cancel(),this._accessTokenExpired.cancel()},t.prototype.unload=function t(){n.Log.debug("AccessTokenEvents.unload: canceling existing access token timers"),this._accessTokenExpiring.cancel(),this._accessTokenExpired.cancel()},t.prototype.addAccessTokenExpiring=function t(e){this._accessTokenExpiring.addHandler(e)},t.prototype.removeAccessTokenExpiring=function t(e){this._accessTokenExpiring.removeHandler(e)},t.prototype.addAccessTokenExpired=function t(e){this._accessTokenExpired.addHandler(e)},t.prototype.removeAccessTokenExpired=function t(e){this._accessTokenExpired.removeHandler(e)},t}()},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.Event=void 0;var n=r(3);e.Event=function(){function t(e){!function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),this._name=e,this._callbacks=[]}return t.prototype.addHandler=function t(e){this._callbacks.push(e)},t.prototype.removeHandler=function t(e){var r=this._callbacks.findIndex(function(t){return t===e});r>=0&&this._callbacks.splice(r,1)},t.prototype.raise=function t(){n.Log.debug("Event: Raising event: "+this._name);for(var e=0;e1&&void 0!==arguments[1]?arguments[1]:o.CheckSessionIFrame;if(function s(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),!e)throw i.Log.error("SessionMonitor.ctor: No user manager passed to SessionMonitor"),new Error("userManager");this._userManager=e,this._CheckSessionIFrameCtor=n,this._userManager.events.addUserLoaded(this._start.bind(this)),this._userManager.events.addUserUnloaded(this._stop.bind(this)),this._userManager.getUser().then(function(t){t?r._start(t):r._settings.monitorAnonymousSession&&r._userManager.querySessionStatus().then(function(t){var e={session_state:t.session_state};t.sub&&t.sid&&(e.profile={sub:t.sub,sid:t.sid}),r._start(e)}).catch(function(t){i.Log.error("SessionMonitor ctor: error from querySessionStatus:",t.message)})}).catch(function(t){i.Log.error("SessionMonitor ctor: error from getUser:",t.message)})}return t.prototype._start=function t(e){var r=this,n=e.session_state;n&&(e.profile?(this._sub=e.profile.sub,this._sid=e.profile.sid,i.Log.debug("SessionMonitor._start: session_state:",n,", sub:",this._sub)):(this._sub=void 0,this._sid=void 0,i.Log.debug("SessionMonitor._start: session_state:",n,", anonymous user")),this._checkSessionIFrame?this._checkSessionIFrame.start(n):this._metadataService.getCheckSessionIframe().then(function(t){if(t){i.Log.debug("SessionMonitor._start: Initializing check session iframe");var e=r._client_id,o=r._checkSessionInterval,s=r._stopCheckSessionOnError;r._checkSessionIFrame=new r._CheckSessionIFrameCtor(r._callback.bind(r),e,t,o,s),r._checkSessionIFrame.load().then(function(){r._checkSessionIFrame.start(n)})}else i.Log.warn("SessionMonitor._start: No check session iframe found in the metadata")}).catch(function(t){i.Log.error("SessionMonitor._start: Error from getCheckSessionIframe:",t.message)}))},t.prototype._stop=function t(){var e=this;this._sub=void 0,this._sid=void 0,this._checkSessionIFrame&&(i.Log.debug("SessionMonitor._stop"),this._checkSessionIFrame.stop()),this._settings.monitorAnonymousSession&&this._userManager.querySessionStatus().then(function(t){var r={session_state:t.session_state};t.sub&&t.sid&&(r.profile={sub:t.sub,sid:t.sid}),e._start(r)}).catch(function(t){i.Log.error("SessionMonitor: error from querySessionStatus:",t.message)})},t.prototype._callback=function t(){var e=this;this._userManager.querySessionStatus().then(function(t){var r=!0;t?t.sub===e._sub?(r=!1,e._checkSessionIFrame.start(t.session_state),t.sid===e._sid?i.Log.debug("SessionMonitor._callback: Same sub still logged in at OP, restarting check session iframe; session_state:",t.session_state):(i.Log.debug("SessionMonitor._callback: Same sub still logged in at OP, session state has changed, restarting check session iframe; session_state:",t.session_state),e._userManager.events._raiseUserSessionChanged())):i.Log.debug("SessionMonitor._callback: Different subject signed into OP:",t.sub):i.Log.debug("SessionMonitor._callback: Subject no longer signed into OP"),r&&(e._sub?(i.Log.debug("SessionMonitor._callback: SessionMonitor._callback; raising signed out event"),e._userManager.events._raiseUserSignedOut()):(i.Log.debug("SessionMonitor._callback: SessionMonitor._callback; raising signed in event"),e._userManager.events._raiseUserSignedIn()))}).catch(function(t){e._sub&&(i.Log.debug("SessionMonitor._callback: Error calling queryCurrentSigninSession; raising signed out event",t.message),e._userManager.events._raiseUserSignedOut())})},n(t,[{key:"_settings",get:function t(){return this._userManager.settings}},{key:"_metadataService",get:function t(){return this._userManager.metadataService}},{key:"_client_id",get:function t(){return this._settings.client_id}},{key:"_checkSessionInterval",get:function t(){return this._settings.checkSessionInterval}},{key:"_stopCheckSessionOnError",get:function t(){return this._settings.stopCheckSessionOnError}}]),t}()},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.CheckSessionIFrame=void 0;var n=r(3);var i=2e3;e.CheckSessionIFrame=function(){function t(e,r,n,o){var s=!(arguments.length>4&&void 0!==arguments[4])||arguments[4];!function a(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),this._callback=e,this._client_id=r,this._url=n,this._interval=o||i,this._stopOnError=s;var u=n.indexOf("/",n.indexOf("//")+2);this._frame_origin=n.substr(0,u),this._frame=window.document.createElement("iframe"),this._frame.style.visibility="hidden",this._frame.style.position="absolute",this._frame.style.display="none",this._frame.style.width=0,this._frame.style.height=0,this._frame.src=n}return t.prototype.load=function t(){var e=this;return new Promise(function(t){e._frame.onload=function(){t()},window.document.body.appendChild(e._frame),e._boundMessageEvent=e._message.bind(e),window.addEventListener("message",e._boundMessageEvent,!1)})},t.prototype._message=function t(e){e.origin===this._frame_origin&&e.source===this._frame.contentWindow&&("error"===e.data?(n.Log.error("CheckSessionIFrame: error message from check session op iframe"),this._stopOnError&&this.stop()):"changed"===e.data?(n.Log.debug("CheckSessionIFrame: changed message from check session op iframe"),this.stop(),this._callback()):n.Log.debug("CheckSessionIFrame: "+e.data+" message from check session op iframe"))},t.prototype.start=function t(e){var r=this;if(this._session_state!==e){n.Log.debug("CheckSessionIFrame.start"),this.stop(),this._session_state=e;var i=function t(){r._frame.contentWindow.postMessage(r._client_id+" "+r._session_state,r._frame_origin)};i(),this._timer=window.setInterval(i,this._interval)}},t.prototype.stop=function t(){this._session_state=null,this._timer&&(n.Log.debug("CheckSessionIFrame.stop"),window.clearInterval(this._timer),this._timer=null)},t}()},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.TokenRevocationClient=void 0;var n=r(3),i=r(49),o=r(44);e.TokenRevocationClient=function(){function t(e){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:o.Global.XMLHttpRequest,s=arguments.length>2&&void 0!==arguments[2]?arguments[2]:i.MetadataService;if(function a(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),!e)throw n.Log.error("TokenRevocationClient.ctor: No settings provided"),new Error("No settings provided.");this._settings=e,this._XMLHttpRequestCtor=r,this._metadataService=new s(this._settings)}return t.prototype.revoke=function t(e,r){var i=this,o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"access_token";if(!e)throw n.Log.error("TokenRevocationClient.revoke: No token provided"),new Error("No token provided.");if("access_token"!==o&&"refresh_token"!=o)throw n.Log.error("TokenRevocationClient.revoke: Invalid token type"),new Error("Invalid token type.");return this._metadataService.getRevocationEndpoint().then(function(t){if(t){n.Log.debug("TokenRevocationClient.revoke: Revoking "+o);var s=i._settings.client_id,a=i._settings.client_secret;return i._revoke(t,s,a,e,o)}if(r)throw n.Log.error("TokenRevocationClient.revoke: Revocation not supported"),new Error("Revocation not supported")})},t.prototype._revoke=function t(e,r,i,o,s){var a=this;return new Promise(function(t,u){var c=new a._XMLHttpRequestCtor;c.open("POST",e),c.onload=function(){n.Log.debug("TokenRevocationClient.revoke: HTTP response received, status",c.status),200===c.status?t():u(Error(c.statusText+" ("+c.status+")"))},c.onerror=function(){n.Log.debug("TokenRevocationClient.revoke: Network Error."),u("Network Error")};var f="client_id="+encodeURIComponent(r);i&&(f+="&client_secret="+encodeURIComponent(i)),f+="&token_type_hint="+encodeURIComponent(s),f+="&token="+encodeURIComponent(o),c.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),c.send(f)})},t}()},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.CordovaPopupWindow=void 0;var n=function(){function t(t,e){for(var r=0;ro;)z(e,n=i[o++],r[n]);return e},G=function t(e){var r=L.call(this,e=b(e,!0));return!(this===B&&i(j,e)&&!i(U,e))&&(!(r||!i(this,e)||!i(j,e)||i(this,D)&&this[D][e])||r)},X=function t(e,r){if(e=S(e),r=b(r,!0),e!==B||!i(j,r)||i(U,r)){var n=P(e,r);return!n||!i(j,r)||i(e,D)&&e[D][r]||(n.enumerable=!0),n}},$=function t(e){for(var r,n=T(S(e)),o=[],s=0;n.length>s;)i(j,r=n[s++])||r==D||r==u||o.push(r);return o},Q=function t(e){for(var r,n=e===B,o=T(n?U:S(e)),s=[],a=0;o.length>a;)!i(j,r=o[a++])||n&&!i(B,r)||s.push(j[r]);return s};H||(a((R=function t(){if(this instanceof R)throw TypeError("Symbol is not a constructor!");var e=l(arguments.length>0?arguments[0]:void 0),r=function(t){this===B&&r.call(U,t),i(this,D)&&i(this[D],e)&&(this[D][e]=!1),q(this,e,w(1,t))};return o&&K&&q(B,e,{configurable:!0,set:r}),W(e)}).prototype,"toString",function t(){return this._k}),x.f=X,A.f=z,r(38).f=E.f=$,r(52).f=G,r(57).f=Q,o&&!r(30)&&a(B,"propertyIsEnumerable",G,!0),d.f=function(t){return W(p(t))}),s(s.G+s.W+s.F*!H,{Symbol:R});for(var Z="hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables".split(","),tt=0;Z.length>tt;)p(Z[tt++]);for(var et=k(p.store),rt=0;et.length>rt;)g(et[rt++]);s(s.S+s.F*!H,"Symbol",{for:function(t){return i(M,t+="")?M[t]:M[t]=R(t)},keyFor:function t(e){if(!J(e))throw TypeError(e+" is not a symbol!");for(var r in M)if(M[r]===e)return r},useSetter:function(){K=!0},useSimple:function(){K=!1}}),s(s.S+s.F*!H,"Object",{create:function t(e,r){return void 0===r?F(e):Y(F(e),r)},defineProperty:z,defineProperties:Y,getOwnPropertyDescriptor:X,getOwnPropertyNames:$,getOwnPropertySymbols:Q}),I&&s(s.S+s.F*(!H||c(function(){var t=R();return"[null]"!=O([t])||"{}"!=O({a:t})||"{}"!=O(Object(t))})),"JSON",{stringify:function t(e){for(var r,n,i=[e],o=1;arguments.length>o;)i.push(arguments[o++]);if(n=r=i[1],(_(r)||void 0!==e)&&!J(e))return y(r)||(r=function(t,e){if("function"==typeof n&&(e=n.call(this,t,e)),!J(e))return e}),i[1]=r,O.apply(I,i)}}),R.prototype[N]||r(12)(R.prototype,N,R.prototype.valueOf),h(R,"Symbol"),h(Math,"Math",!0),h(n.JSON,"JSON",!0)},function(t,e,r){t.exports=r(50)("native-function-to-string",Function.toString)},function(t,e,r){var n=r(35),i=r(57),o=r(52);t.exports=function(t){var e=n(t),r=i.f;if(r)for(var s,a=r(t),u=o.f,c=0;a.length>c;)u.call(t,s=a[c++])&&e.push(s);return e}},function(t,e,r){var n=r(0);n(n.S,"Object",{create:r(37)})},function(t,e,r){var n=r(0);n(n.S+n.F*!r(8),"Object",{defineProperty:r(9).f})},function(t,e,r){var n=r(0);n(n.S+n.F*!r(8),"Object",{defineProperties:r(106)})},function(t,e,r){var n=r(16),i=r(17).f;r(26)("getOwnPropertyDescriptor",function(){return function t(e,r){return i(n(e),r)}})},function(t,e,r){var n=r(10),i=r(18);r(26)("getPrototypeOf",function(){return function t(e){return i(n(e))}})},function(t,e,r){var n=r(10),i=r(35);r(26)("keys",function(){return function t(e){return i(n(e))}})},function(t,e,r){r(26)("getOwnPropertyNames",function(){return r(107).f})},function(t,e,r){var n=r(5),i=r(31).onFreeze;r(26)("freeze",function(t){return function e(r){return t&&n(r)?t(i(r)):r}})},function(t,e,r){var n=r(5),i=r(31).onFreeze;r(26)("seal",function(t){return function e(r){return t&&n(r)?t(i(r)):r}})},function(t,e,r){var n=r(5),i=r(31).onFreeze;r(26)("preventExtensions",function(t){return function e(r){return t&&n(r)?t(i(r)):r}})},function(t,e,r){var n=r(5);r(26)("isFrozen",function(t){return function e(r){return!n(r)||!!t&&t(r)}})},function(t,e,r){var n=r(5);r(26)("isSealed",function(t){return function e(r){return!n(r)||!!t&&t(r)}})},function(t,e,r){var n=r(5);r(26)("isExtensible",function(t){return function e(r){return!!n(r)&&(!t||t(r))}})},function(t,e,r){var n=r(0);n(n.S+n.F,"Object",{assign:r(108)})},function(t,e,r){var n=r(0);n(n.S,"Object",{is:r(109)})},function(t,e,r){var n=r(0);n(n.S,"Object",{setPrototypeOf:r(77).set})},function(t,e,r){"use strict";var n=r(46),i={};i[r(6)("toStringTag")]="z",i+""!="[object z]"&&r(13)(Object.prototype,"toString",function t(){return"[object "+n(this)+"]"},!0)},function(t,e,r){var n=r(0);n(n.P,"Function",{bind:r(110)})},function(t,e,r){var n=r(9).f,i=Function.prototype,o=/^\s*function ([^ (]*)/;"name"in i||r(8)&&n(i,"name",{configurable:!0,get:function(){try{return(""+this).match(o)[1]}catch(t){return""}}})},function(t,e,r){"use strict";var n=r(5),i=r(18),o=r(6)("hasInstance"),s=Function.prototype;o in s||r(9).f(s,o,{value:function(t){if("function"!=typeof this||!n(t))return!1;if(!n(this.prototype))return t instanceof this;for(;t=i(t);)if(this.prototype===t)return!0;return!1}})},function(t,e,r){var n=r(0),i=r(112);n(n.G+n.F*(parseInt!=i),{parseInt:i})},function(t,e,r){var n=r(0),i=r(113);n(n.G+n.F*(parseFloat!=i),{parseFloat:i})},function(t,e,r){"use strict";var n=r(2),i=r(15),o=r(21),s=r(79),a=r(24),u=r(4),c=r(38).f,f=r(17).f,h=r(9).f,l=r(47).trim,p=n.Number,d=p,g=p.prototype,v="Number"==o(r(37)(g)),y="trim"in String.prototype,m=function(t){var e=a(t,!1);if("string"==typeof e&&e.length>2){var r,n,i,o=(e=y?e.trim():l(e,3)).charCodeAt(0);if(43===o||45===o){if(88===(r=e.charCodeAt(2))||120===r)return NaN}else if(48===o){switch(e.charCodeAt(1)){case 66:case 98:n=2,i=49;break;case 79:case 111:n=8,i=55;break;default:return+e}for(var s,u=e.slice(2),c=0,f=u.length;ci)return NaN;return parseInt(u,n)}}return+e};if(!p(" 0o1")||!p("0b1")||p("+0x1")){p=function t(e){var r=arguments.length<1?0:e,n=this;return n instanceof p&&(v?u(function(){g.valueOf.call(n)}):"Number"!=o(n))?s(new d(m(r)),n,p):m(r)};for(var _,S=r(8)?c(d):"MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger".split(","),b=0;S.length>b;b++)i(d,_=S[b])&&!i(p,_)&&h(p,_,f(d,_));p.prototype=g,g.constructor=p,r(13)(n,"Number",p)}},function(t,e,r){"use strict";var n=r(0),i=r(22),o=r(114),s=r(80),a=1..toFixed,u=Math.floor,c=[0,0,0,0,0,0],f="Number.toFixed: incorrect invocation!",h=function(t,e){for(var r=-1,n=e;++r<6;)n+=t*c[r],c[r]=n%1e7,n=u(n/1e7)},l=function(t){for(var e=6,r=0;--e>=0;)r+=c[e],c[e]=u(r/t),r=r%t*1e7},p=function(){for(var t=6,e="";--t>=0;)if(""!==e||0===t||0!==c[t]){var r=String(c[t]);e=""===e?r:e+s.call("0",7-r.length)+r}return e},d=function(t,e,r){return 0===e?r:e%2==1?d(t,e-1,r*t):d(t*t,e/2,r)};n(n.P+n.F*(!!a&&("0.000"!==8e-5.toFixed(3)||"1"!==.9.toFixed(0)||"1.25"!==1.255.toFixed(2)||"1000000000000000128"!==(0xde0b6b3a7640080).toFixed(0))||!r(4)(function(){a.call({})})),"Number",{toFixed:function t(e){var r,n,a,u,c=o(this,f),g=i(e),v="",y="0";if(g<0||g>20)throw RangeError(f);if(c!=c)return"NaN";if(c<=-1e21||c>=1e21)return String(c);if(c<0&&(v="-",c=-c),c>1e-21)if(n=(r=function(t){for(var e=0,r=t;r>=4096;)e+=12,r/=4096;for(;r>=2;)e+=1,r/=2;return e}(c*d(2,69,1))-69)<0?c*d(2,-r,1):c/d(2,r,1),n*=4503599627370496,(r=52-r)>0){for(h(0,n),a=g;a>=7;)h(1e7,0),a-=7;for(h(d(10,a,1),0),a=r-1;a>=23;)l(1<<23),a-=23;l(1<0?v+((u=y.length)<=g?"0."+s.call("0",g-u)+y:y.slice(0,u-g)+"."+y.slice(u-g)):v+y}})},function(t,e,r){"use strict";var n=r(0),i=r(4),o=r(114),s=1..toPrecision;n(n.P+n.F*(i(function(){return"1"!==s.call(1,void 0)})||!i(function(){s.call({})})),"Number",{toPrecision:function t(e){var r=o(this,"Number#toPrecision: incorrect invocation!");return void 0===e?s.call(r):s.call(r,e)}})},function(t,e,r){var n=r(0);n(n.S,"Number",{EPSILON:Math.pow(2,-52)})},function(t,e,r){var n=r(0),i=r(2).isFinite;n(n.S,"Number",{isFinite:function t(e){return"number"==typeof e&&i(e)}})},function(t,e,r){var n=r(0);n(n.S,"Number",{isInteger:r(115)})},function(t,e,r){var n=r(0);n(n.S,"Number",{isNaN:function t(e){return e!=e}})},function(t,e,r){var n=r(0),i=r(115),o=Math.abs;n(n.S,"Number",{isSafeInteger:function t(e){return i(e)&&o(e)<=9007199254740991}})},function(t,e,r){var n=r(0);n(n.S,"Number",{MAX_SAFE_INTEGER:9007199254740991})},function(t,e,r){var n=r(0);n(n.S,"Number",{MIN_SAFE_INTEGER:-9007199254740991})},function(t,e,r){var n=r(0),i=r(113);n(n.S+n.F*(Number.parseFloat!=i),"Number",{parseFloat:i})},function(t,e,r){var n=r(0),i=r(112);n(n.S+n.F*(Number.parseInt!=i),"Number",{parseInt:i})},function(t,e,r){var n=r(0),i=r(116),o=Math.sqrt,s=Math.acosh;n(n.S+n.F*!(s&&710==Math.floor(s(Number.MAX_VALUE))&&s(1/0)==1/0),"Math",{acosh:function t(e){return(e=+e)<1?NaN:e>94906265.62425156?Math.log(e)+Math.LN2:i(e-1+o(e-1)*o(e+1))}})},function(t,e,r){var n=r(0),i=Math.asinh;n(n.S+n.F*!(i&&1/i(0)>0),"Math",{asinh:function t(e){return isFinite(e=+e)&&0!=e?e<0?-t(-e):Math.log(e+Math.sqrt(e*e+1)):e}})},function(t,e,r){var n=r(0),i=Math.atanh;n(n.S+n.F*!(i&&1/i(-0)<0),"Math",{atanh:function t(e){return 0==(e=+e)?e:Math.log((1+e)/(1-e))/2}})},function(t,e,r){var n=r(0),i=r(81);n(n.S,"Math",{cbrt:function t(e){return i(e=+e)*Math.pow(Math.abs(e),1/3)}})},function(t,e,r){var n=r(0);n(n.S,"Math",{clz32:function t(e){return(e>>>=0)?31-Math.floor(Math.log(e+.5)*Math.LOG2E):32}})},function(t,e,r){var n=r(0),i=Math.exp;n(n.S,"Math",{cosh:function t(e){return(i(e=+e)+i(-e))/2}})},function(t,e,r){var n=r(0),i=r(82);n(n.S+n.F*(i!=Math.expm1),"Math",{expm1:i})},function(t,e,r){var n=r(0);n(n.S,"Math",{fround:r(117)})},function(t,e,r){var n=r(0),i=Math.abs;n(n.S,"Math",{hypot:function t(e,r){for(var n,o,s=0,a=0,u=arguments.length,c=0;a0?(o=n/c)*o:n;return c===1/0?1/0:c*Math.sqrt(s)}})},function(t,e,r){var n=r(0),i=Math.imul;n(n.S+n.F*r(4)(function(){return-5!=i(4294967295,5)||2!=i.length}),"Math",{imul:function t(e,r){var n=+e,i=+r,o=65535&n,s=65535&i;return 0|o*s+((65535&n>>>16)*s+o*(65535&i>>>16)<<16>>>0)}})},function(t,e,r){var n=r(0);n(n.S,"Math",{log10:function t(e){return Math.log(e)*Math.LOG10E}})},function(t,e,r){var n=r(0);n(n.S,"Math",{log1p:r(116)})},function(t,e,r){var n=r(0);n(n.S,"Math",{log2:function t(e){return Math.log(e)/Math.LN2}})},function(t,e,r){var n=r(0);n(n.S,"Math",{sign:r(81)})},function(t,e,r){var n=r(0),i=r(82),o=Math.exp;n(n.S+n.F*r(4)(function(){return-2e-17!=!Math.sinh(-2e-17)}),"Math",{sinh:function t(e){return Math.abs(e=+e)<1?(i(e)-i(-e))/2:(o(e-1)-o(-e-1))*(Math.E/2)}})},function(t,e,r){var n=r(0),i=r(82),o=Math.exp;n(n.S,"Math",{tanh:function t(e){var r=i(e=+e),n=i(-e);return r==1/0?1:n==1/0?-1:(r-n)/(o(e)+o(-e))}})},function(t,e,r){var n=r(0);n(n.S,"Math",{trunc:function t(e){return(e>0?Math.floor:Math.ceil)(e)}})},function(t,e,r){var n=r(0),i=r(36),o=String.fromCharCode,s=String.fromCodePoint;n(n.S+n.F*(!!s&&1!=s.length),"String",{fromCodePoint:function t(e){for(var r,n=[],s=arguments.length,a=0;s>a;){if(r=+arguments[a++],i(r,1114111)!==r)throw RangeError(r+" is not a valid code point");n.push(r<65536?o(r):o(55296+((r-=65536)>>10),r%1024+56320))}return n.join("")}})},function(t,e,r){var n=r(0),i=r(16),o=r(7);n(n.S,"String",{raw:function t(e){for(var r=i(e.raw),n=o(r.length),s=arguments.length,a=[],u=0;n>u;)a.push(String(r[u++])),u=e.length?{value:void 0,done:!0}:(t=n(e,r),this._i+=t.length,{value:t,done:!1})})},function(t,e,r){"use strict";var n=r(0),i=r(59)(!1);n(n.P,"String",{codePointAt:function t(e){return i(this,e)}})},function(t,e,r){"use strict";var n=r(0),i=r(7),o=r(85),s="".endsWith;n(n.P+n.F*r(86)("endsWith"),"String",{endsWith:function t(e){var r=o(this,e,"endsWith"),n=arguments.length>1?arguments[1]:void 0,a=i(r.length),u=void 0===n?a:Math.min(i(n),a),c=String(e);return s?s.call(r,c,u):r.slice(u-c.length,u)===c}})},function(t,e,r){"use strict";var n=r(0),i=r(85);n(n.P+n.F*r(86)("includes"),"String",{includes:function t(e){return!!~i(this,e,"includes").indexOf(e,arguments.length>1?arguments[1]:void 0)}})},function(t,e,r){var n=r(0);n(n.P,"String",{repeat:r(80)})},function(t,e,r){"use strict";var n=r(0),i=r(7),o=r(85),s="".startsWith;n(n.P+n.F*r(86)("startsWith"),"String",{startsWith:function t(e){var r=o(this,e,"startsWith"),n=i(Math.min(arguments.length>1?arguments[1]:void 0,r.length)),a=String(e);return s?s.call(r,a,n):r.slice(n,n+a.length)===a}})},function(t,e,r){"use strict";r(14)("anchor",function(t){return function e(r){return t(this,"a","name",r)}})},function(t,e,r){"use strict";r(14)("big",function(t){return function e(){return t(this,"big","","")}})},function(t,e,r){"use strict";r(14)("blink",function(t){return function e(){return t(this,"blink","","")}})},function(t,e,r){"use strict";r(14)("bold",function(t){return function e(){return t(this,"b","","")}})},function(t,e,r){"use strict";r(14)("fixed",function(t){return function e(){return t(this,"tt","","")}})},function(t,e,r){"use strict";r(14)("fontcolor",function(t){return function e(r){return t(this,"font","color",r)}})},function(t,e,r){"use strict";r(14)("fontsize",function(t){return function e(r){return t(this,"font","size",r)}})},function(t,e,r){"use strict";r(14)("italics",function(t){return function e(){return t(this,"i","","")}})},function(t,e,r){"use strict";r(14)("link",function(t){return function e(r){return t(this,"a","href",r)}})},function(t,e,r){"use strict";r(14)("small",function(t){return function e(){return t(this,"small","","")}})},function(t,e,r){"use strict";r(14)("strike",function(t){return function e(){return t(this,"strike","","")}})},function(t,e,r){"use strict";r(14)("sub",function(t){return function e(){return t(this,"sub","","")}})},function(t,e,r){"use strict";r(14)("sup",function(t){return function e(){return t(this,"sup","","")}})},function(t,e,r){var n=r(0);n(n.S,"Date",{now:function(){return(new Date).getTime()}})},function(t,e,r){"use strict";var n=r(0),i=r(10),o=r(24);n(n.P+n.F*r(4)(function(){return null!==new Date(NaN).toJSON()||1!==Date.prototype.toJSON.call({toISOString:function(){return 1}})}),"Date",{toJSON:function t(e){var r=i(this),n=o(r);return"number"!=typeof n||isFinite(n)?r.toISOString():null}})},function(t,e,r){var n=r(0),i=r(234);n(n.P+n.F*(Date.prototype.toISOString!==i),"Date",{toISOString:i})},function(t,e,r){"use strict";var n=r(4),i=Date.prototype.getTime,o=Date.prototype.toISOString,s=function(t){return t>9?t:"0"+t};t.exports=n(function(){return"0385-07-25T07:06:39.999Z"!=o.call(new Date(-5e13-1))})||!n(function(){o.call(new Date(NaN))})?function t(){if(!isFinite(i.call(this)))throw RangeError("Invalid time value");var e=this,r=e.getUTCFullYear(),n=e.getUTCMilliseconds(),o=r<0?"-":r>9999?"+":"";return o+("00000"+Math.abs(r)).slice(o?-6:-4)+"-"+s(e.getUTCMonth()+1)+"-"+s(e.getUTCDate())+"T"+s(e.getUTCHours())+":"+s(e.getUTCMinutes())+":"+s(e.getUTCSeconds())+"."+(n>99?n:"0"+s(n))+"Z"}:o},function(t,e,r){var n=Date.prototype,i=n.toString,o=n.getTime;new Date(NaN)+""!="Invalid Date"&&r(13)(n,"toString",function t(){var e=o.call(this);return e==e?i.call(this):"Invalid Date"})},function(t,e,r){var n=r(6)("toPrimitive"),i=Date.prototype;n in i||r(12)(i,n,r(237))},function(t,e,r){"use strict";var n=r(1),i=r(24);t.exports=function(t){if("string"!==t&&"number"!==t&&"default"!==t)throw TypeError("Incorrect hint");return i(n(this),"number"!=t)}},function(t,e,r){var n=r(0);n(n.S,"Array",{isArray:r(58)})},function(t,e,r){"use strict";var n=r(20),i=r(0),o=r(10),s=r(118),a=r(87),u=r(7),c=r(88),f=r(89);i(i.S+i.F*!r(61)(function(t){Array.from(t)}),"Array",{from:function t(e){var r,i,h,l,p=o(e),d="function"==typeof this?this:Array,g=arguments.length,v=g>1?arguments[1]:void 0,y=void 0!==v,m=0,_=f(p);if(y&&(v=n(v,g>2?arguments[2]:void 0,2)),void 0==_||d==Array&&a(_))for(i=new d(r=u(p.length));r>m;m++)c(i,m,y?v(p[m],m):p[m]);else for(l=_.call(p),i=new d;!(h=l.next()).done;m++)c(i,m,y?s(l,v,[h.value,m],!0):h.value);return i.length=m,i}})},function(t,e,r){"use strict";var n=r(0),i=r(88);n(n.S+n.F*r(4)(function(){function t(){}return!(Array.of.call(t)instanceof t)}),"Array",{of:function t(){for(var e=0,r=arguments.length,n=new("function"==typeof this?this:Array)(r);r>e;)i(n,e,arguments[e++]);return n.length=r,n}})},function(t,e,r){"use strict";var n=r(0),i=r(16),o=[].join;n(n.P+n.F*(r(51)!=Object||!r(23)(o)),"Array",{join:function t(e){return o.call(i(this),void 0===e?",":e)}})},function(t,e,r){"use strict";var n=r(0),i=r(76),o=r(21),s=r(36),a=r(7),u=[].slice;n(n.P+n.F*r(4)(function(){i&&u.call(i)}),"Array",{slice:function t(e,r){var n=a(this.length),i=o(this);if(r=void 0===r?n:r,"Array"==i)return u.call(this,e,r);for(var c=s(e,n),f=s(r,n),h=a(f-c),l=new Array(h),p=0;p1&&(c=Math.min(c,o(arguments[1]))),c<0&&(c=n+c);c>=0;c--)if(c in r&&r[c]===e)return c||0;return-1}})},function(t,e,r){var n=r(0);n(n.P,"Array",{copyWithin:r(120)}),r(32)("copyWithin")},function(t,e,r){var n=r(0);n(n.P,"Array",{fill:r(91)}),r(32)("fill")},function(t,e,r){"use strict";var n=r(0),i=r(27)(5),o=!0;"find"in[]&&Array(1).find(function(){o=!1}),n(n.P+n.F*o,"Array",{find:function t(e){return i(this,e,arguments.length>1?arguments[1]:void 0)}}),r(32)("find")},function(t,e,r){"use strict";var n=r(0),i=r(27)(6),o="findIndex",s=!0;o in[]&&Array(1)[o](function(){s=!1}),n(n.P+n.F*s,"Array",{findIndex:function t(e){return i(this,e,arguments.length>1?arguments[1]:void 0)}}),r(32)(o)},function(t,e,r){r(39)("Array")},function(t,e,r){var n=r(2),i=r(79),o=r(9).f,s=r(38).f,a=r(60),u=r(53),c=n.RegExp,f=c,h=c.prototype,l=/a/g,p=/a/g,d=new c(l)!==l;if(r(8)&&(!d||r(4)(function(){return p[r(6)("match")]=!1,c(l)!=l||c(p)==p||"/a/i"!=c(l,"i")}))){c=function t(e,r){var n=this instanceof c,o=a(e),s=void 0===r;return!n&&o&&e.constructor===c&&s?e:i(d?new f(o&&!s?e.source:e,r):f((o=e instanceof c)?e.source:e,o&&s?u.call(e):r),n?this:h,c)};for(var g=function(t){t in c||o(c,t,{configurable:!0,get:function(){return f[t]},set:function(e){f[t]=e}})},v=s(f),y=0;v.length>y;)g(v[y++]);h.constructor=c,c.prototype=h,r(13)(n,"RegExp",c)}r(39)("RegExp")},function(t,e,r){"use strict";r(123);var n=r(1),i=r(53),o=r(8),s=/./.toString,a=function(t){r(13)(RegExp.prototype,"toString",t,!0)};r(4)(function(){return"/a/b"!=s.call({source:"a",flags:"b"})})?a(function t(){var e=n(this);return"/".concat(e.source,"/","flags"in e?e.flags:!o&&e instanceof RegExp?i.call(e):void 0)}):"toString"!=s.name&&a(function t(){return s.call(this)})},function(t,e,r){"use strict";var n=r(1),i=r(7),o=r(94),s=r(62);r(63)("match",1,function(t,e,r,a){return[function r(n){var i=t(this),o=void 0==n?void 0:n[e];return void 0!==o?o.call(n,i):new RegExp(n)[e](String(i))},function(t){var e=a(r,t,this);if(e.done)return e.value;var u=n(t),c=String(this);if(!u.global)return s(u,c);var f=u.unicode;u.lastIndex=0;for(var h,l=[],p=0;null!==(h=s(u,c));){var d=String(h[0]);l[p]=d,""===d&&(u.lastIndex=o(c,i(u.lastIndex),f)),p++}return 0===p?null:l}]})},function(t,e,r){"use strict";var n=r(1),i=r(10),o=r(7),s=r(22),a=r(94),u=r(62),c=Math.max,f=Math.min,h=Math.floor,l=/\$([$&`']|\d\d?|<[^>]*>)/g,p=/\$([$&`']|\d\d?)/g;r(63)("replace",2,function(t,e,r,d){return[function n(i,o){var s=t(this),a=void 0==i?void 0:i[e];return void 0!==a?a.call(i,s,o):r.call(String(s),i,o)},function(t,e){var i=d(r,t,this,e);if(i.done)return i.value;var h=n(t),l=String(this),p="function"==typeof e;p||(e=String(e));var v=h.global;if(v){var y=h.unicode;h.lastIndex=0}for(var m=[];;){var _=u(h,l);if(null===_)break;if(m.push(_),!v)break;""===String(_[0])&&(h.lastIndex=a(l,o(h.lastIndex),y))}for(var S,b="",w=0,F=0;F=w&&(b+=l.slice(w,x)+T,w=x+E.length)}return b+l.slice(w)}];function g(t,e,n,o,s,a){var u=n+t.length,c=o.length,f=p;return void 0!==s&&(s=i(s),f=l),r.call(a,f,function(r,i){var a;switch(i.charAt(0)){case"$":return"$";case"&":return t;case"`":return e.slice(0,n);case"'":return e.slice(u);case"<":a=s[i.slice(1,-1)];break;default:var f=+i;if(0===f)return r;if(f>c){var l=h(f/10);return 0===l?r:l<=c?void 0===o[l-1]?i.charAt(1):o[l-1]+i.charAt(1):r}a=o[f-1]}return void 0===a?"":a})}})},function(t,e,r){"use strict";var n=r(1),i=r(109),o=r(62);r(63)("search",1,function(t,e,r,s){return[function r(n){var i=t(this),o=void 0==n?void 0:n[e];return void 0!==o?o.call(n,i):new RegExp(n)[e](String(i))},function(t){var e=s(r,t,this);if(e.done)return e.value;var a=n(t),u=String(this),c=a.lastIndex;i(c,0)||(a.lastIndex=0);var f=o(a,u);return i(a.lastIndex,c)||(a.lastIndex=c),null===f?-1:f.index}]})},function(t,e,r){"use strict";var n=r(60),i=r(1),o=r(54),s=r(94),a=r(7),u=r(62),c=r(93),f=r(4),h=Math.min,l=[].push,p=!f(function(){RegExp(4294967295,"y")});r(63)("split",2,function(t,e,r,f){var d;return d="c"=="abbc".split(/(b)*/)[1]||4!="test".split(/(?:)/,-1).length||2!="ab".split(/(?:ab)*/).length||4!=".".split(/(.?)(.?)/).length||".".split(/()()/).length>1||"".split(/.?/).length?function(t,e){var i=String(this);if(void 0===t&&0===e)return[];if(!n(t))return r.call(i,t,e);for(var o,s,a,u=[],f=(t.ignoreCase?"i":"")+(t.multiline?"m":"")+(t.unicode?"u":"")+(t.sticky?"y":""),h=0,p=void 0===e?4294967295:e>>>0,d=new RegExp(t.source,f+"g");(o=c.call(d,i))&&!((s=d.lastIndex)>h&&(u.push(i.slice(h,o.index)),o.length>1&&o.index=p));)d.lastIndex===o.index&&d.lastIndex++;return h===i.length?!a&&d.test("")||u.push(""):u.push(i.slice(h)),u.length>p?u.slice(0,p):u}:"0".split(void 0,0).length?function(t,e){return void 0===t&&0===e?[]:r.call(this,t,e)}:r,[function r(n,i){var o=t(this),s=void 0==n?void 0:n[e];return void 0!==s?s.call(n,o,i):d.call(String(o),n,i)},function(t,e){var n=f(d,t,this,e,d!==r);if(n.done)return n.value;var c=i(t),l=String(this),g=o(c,RegExp),v=c.unicode,y=(c.ignoreCase?"i":"")+(c.multiline?"m":"")+(c.unicode?"u":"")+(p?"y":"g"),m=new g(p?c:"^(?:"+c.source+")",y),_=void 0===e?4294967295:e>>>0;if(0===_)return[];if(0===l.length)return null===u(m,l)?[l]:[];for(var S=0,b=0,w=[];bo;)s(r[o++]);t._c=[],t._n=!1,e&&!t._h&&D(t)})}},D=function(t){y.call(u,function(){var e,r,n,i=t._v,o=N(t);if(o&&(e=S(function(){P?E.emit("unhandledRejection",i,t):(r=u.onunhandledrejection)?r({promise:t,reason:i}):(n=u.console)&&n.error&&n.error("Unhandled promise rejection",i)}),t._h=P||N(t)?2:1),t._a=void 0,o&&e.e)throw e.v})},N=function(t){return 1!==t._h&&0===(t._a||t._c).length},L=function(t){y.call(u,function(){var e;P?E.emit("rejectionHandled",t):(e=u.onrejectionhandled)&&e({promise:t,reason:t._v})})},M=function(t){var e=this;e._d||(e._d=!0,(e=e._w||e)._v=t,e._s=2,e._a||(e._a=e._c.slice()),O(e,!0))},j=function(t){var e,r=this;if(!r._d){r._d=!0,r=r._w||r;try{if(r===t)throw F("Promise can't be resolved itself");(e=I(t))?m(function(){var n={_w:r,_d:!1};try{e.call(t,c(j,n,1),c(M,n,1))}catch(t){M.call(n,t)}}):(r._v=t,r._s=1,O(r,!1))}catch(t){M.call({_w:r,_d:!1},t)}}};R||(k=function t(e){d(this,k,"Promise","_h"),p(e),n.call(this);try{e(c(j,this,1),c(M,this,1))}catch(t){M.call(this,t)}},(n=function t(e){this._c=[],this._a=void 0,this._s=0,this._d=!1,this._v=void 0,this._h=0,this._n=!1}).prototype=r(42)(k.prototype,{then:function t(e,r){var n=T(v(this,k));return n.ok="function"!=typeof e||e,n.fail="function"==typeof r&&r,n.domain=P?E.domain:void 0,this._c.push(n),this._a&&this._a.push(n),this._s&&O(this,!1),n.promise},catch:function(t){return this.then(void 0,t)}}),o=function(){var t=new n;this.promise=t,this.resolve=c(j,t,1),this.reject=c(M,t,1)},_.f=T=function(t){return t===k||t===s?new o(t):i(t)}),h(h.G+h.W+h.F*!R,{Promise:k}),r(45)(k,"Promise"),r(39)("Promise"),s=r(19).Promise,h(h.S+h.F*!R,"Promise",{reject:function t(e){var r=T(this);return(0,r.reject)(e),r.promise}}),h(h.S+h.F*(a||!R),"Promise",{resolve:function t(e){return w(a&&this===s?k:this,e)}}),h(h.S+h.F*!(R&&r(61)(function(t){k.all(t).catch(C)})),"Promise",{all:function t(e){var r=this,n=T(r),i=n.resolve,o=n.reject,s=S(function(){var t=[],n=0,s=1;g(e,!1,function(e){var a=n++,u=!1;t.push(void 0),s++,r.resolve(e).then(function(e){u||(u=!0,t[a]=e,--s||i(t))},o)}),--s||i(t)});return s.e&&o(s.v),n.promise},race:function t(e){var r=this,n=T(r),i=n.reject,o=S(function(){g(e,!1,function(t){r.resolve(t).then(n.resolve,i)})});return o.e&&i(o.v),n.promise}})},function(t,e,r){"use strict";var n=r(130),i=r(43);r(65)("WeakSet",function(t){return function e(){return t(this,arguments.length>0?arguments[0]:void 0)}},{add:function t(e){return n.def(i(this,"WeakSet"),e,!0)}},n,!1,!0)},function(t,e,r){"use strict";var n=r(0),i=r(66),o=r(98),s=r(1),a=r(36),u=r(7),c=r(5),f=r(2).ArrayBuffer,h=r(54),l=o.ArrayBuffer,p=o.DataView,d=i.ABV&&f.isView,g=l.prototype.slice,v=i.VIEW;n(n.G+n.W+n.F*(f!==l),{ArrayBuffer:l}),n(n.S+n.F*!i.CONSTR,"ArrayBuffer",{isView:function t(e){return d&&d(e)||c(e)&&v in e}}),n(n.P+n.U+n.F*r(4)(function(){return!new l(2).slice(1,void 0).byteLength}),"ArrayBuffer",{slice:function t(e,r){if(void 0!==g&&void 0===r)return g.call(s(this),e);for(var n=s(this).byteLength,i=a(e,n),o=a(void 0===r?n:r,n),c=new(h(this,l))(u(o-i)),f=new p(this),d=new p(c),v=0;i=e.length)return{value:void 0,done:!0}}while(!((t=e[this._i++])in this._t));return{value:t,done:!1}}),n(n.S,"Reflect",{enumerate:function t(e){return new o(e)}})},function(t,e,r){var n=r(17),i=r(18),o=r(15),s=r(0),a=r(5),u=r(1);s(s.S,"Reflect",{get:function t(e,r){var s,c,f=arguments.length<3?e:arguments[2];return u(e)===f?e[r]:(s=n.f(e,r))?o(s,"value")?s.value:void 0!==s.get?s.get.call(f):void 0:a(c=i(e))?t(c,r,f):void 0}})},function(t,e,r){var n=r(17),i=r(0),o=r(1);i(i.S,"Reflect",{getOwnPropertyDescriptor:function t(e,r){return n.f(o(e),r)}})},function(t,e,r){var n=r(0),i=r(18),o=r(1);n(n.S,"Reflect",{getPrototypeOf:function t(e){return i(o(e))}})},function(t,e,r){var n=r(0);n(n.S,"Reflect",{has:function t(e,r){return r in e}})},function(t,e,r){var n=r(0),i=r(1),o=Object.isExtensible;n(n.S,"Reflect",{isExtensible:function t(e){return i(e),!o||o(e)}})},function(t,e,r){var n=r(0);n(n.S,"Reflect",{ownKeys:r(132)})},function(t,e,r){var n=r(0),i=r(1),o=Object.preventExtensions;n(n.S,"Reflect",{preventExtensions:function t(e){i(e);try{return o&&o(e),!0}catch(t){return!1}}})},function(t,e,r){var n=r(9),i=r(17),o=r(18),s=r(15),a=r(0),u=r(33),c=r(1),f=r(5);a(a.S,"Reflect",{set:function t(e,r,a){var h,l,p=arguments.length<4?e:arguments[3],d=i.f(c(e),r);if(!d){if(f(l=o(e)))return t(l,r,a,p);d=u(0)}if(s(d,"value")){if(!1===d.writable||!f(p))return!1;if(h=i.f(p,r)){if(h.get||h.set||!1===h.writable)return!1;h.value=a,n.f(p,r,h)}else n.f(p,r,u(0,a));return!0}return void 0!==d.set&&(d.set.call(p,a),!0)}})},function(t,e,r){var n=r(0),i=r(77);i&&n(n.S,"Reflect",{setPrototypeOf:function t(e,r){i.check(e,r);try{return i.set(e,r),!0}catch(t){return!1}}})},function(t,e,r){"use strict";var n=r(0),i=r(56)(!0);n(n.P,"Array",{includes:function t(e){return i(this,e,arguments.length>1?arguments[1]:void 0)}}),r(32)("includes")},function(t,e,r){"use strict";var n=r(0),i=r(133),o=r(10),s=r(7),a=r(11),u=r(90);n(n.P,"Array",{flatMap:function t(e){var r,n,c=o(this);return a(e),r=s(c.length),n=u(c,0),i(n,c,c,r,0,1,e,arguments[1]),n}}),r(32)("flatMap")},function(t,e,r){"use strict";var n=r(0),i=r(133),o=r(10),s=r(7),a=r(22),u=r(90);n(n.P,"Array",{flatten:function t(){var e=arguments[0],r=o(this),n=s(r.length),c=u(r,0);return i(c,r,r,n,0,void 0===e?1:a(e)),c}}),r(32)("flatten")},function(t,e,r){"use strict";var n=r(0),i=r(59)(!0);n(n.P,"String",{at:function t(e){return i(this,e)}})},function(t,e,r){"use strict";var n=r(0),i=r(134),o=r(64);n(n.P+n.F*/Version\/10\.\d+(\.\d+)? Safari\//.test(o),"String",{padStart:function t(e){return i(this,e,arguments.length>1?arguments[1]:void 0,!0)}})},function(t,e,r){"use strict";var n=r(0),i=r(134),o=r(64);n(n.P+n.F*/Version\/10\.\d+(\.\d+)? Safari\//.test(o),"String",{padEnd:function t(e){return i(this,e,arguments.length>1?arguments[1]:void 0,!1)}})},function(t,e,r){"use strict";r(47)("trimLeft",function(t){return function e(){return t(this,1)}},"trimStart")},function(t,e,r){"use strict";r(47)("trimRight",function(t){return function e(){return t(this,2)}},"trimEnd")},function(t,e,r){"use strict";var n=r(0),i=r(25),o=r(7),s=r(60),a=r(53),u=RegExp.prototype,c=function(t,e){this._r=t,this._s=e};r(84)(c,"RegExp String",function t(){var e=this._r.exec(this._s);return{value:e,done:null===e}}),n(n.P,"String",{matchAll:function t(e){if(i(this),!s(e))throw TypeError(e+" is not a regexp!");var r=String(this),n="flags"in u?String(e.flags):a.call(e),f=new RegExp(e.source,~n.indexOf("g")?n:"g"+n);return f.lastIndex=o(e.lastIndex),new c(f,r)}})},function(t,e,r){r(73)("asyncIterator")},function(t,e,r){r(73)("observable")},function(t,e,r){var n=r(0),i=r(132),o=r(16),s=r(17),a=r(88);n(n.S,"Object",{getOwnPropertyDescriptors:function t(e){for(var r,n,u=o(e),c=s.f,f=i(u),h={},l=0;f.length>l;)void 0!==(n=c(u,r=f[l++]))&&a(h,r,n);return h}})},function(t,e,r){var n=r(0),i=r(135)(!1);n(n.S,"Object",{values:function t(e){return i(e)}})},function(t,e,r){var n=r(0),i=r(135)(!0);n(n.S,"Object",{entries:function t(e){return i(e)}})},function(t,e,r){"use strict";var n=r(0),i=r(10),o=r(11),s=r(9);r(8)&&n(n.P+r(67),"Object",{__defineGetter__:function t(e,r){s.f(i(this),e,{get:o(r),enumerable:!0,configurable:!0})}})},function(t,e,r){"use strict";var n=r(0),i=r(10),o=r(11),s=r(9);r(8)&&n(n.P+r(67),"Object",{__defineSetter__:function t(e,r){s.f(i(this),e,{set:o(r),enumerable:!0,configurable:!0})}})},function(t,e,r){"use strict";var n=r(0),i=r(10),o=r(24),s=r(18),a=r(17).f;r(8)&&n(n.P+r(67),"Object",{__lookupGetter__:function t(e){var r,n=i(this),u=o(e,!0);do{if(r=a(n,u))return r.get}while(n=s(n))}})},function(t,e,r){"use strict";var n=r(0),i=r(10),o=r(24),s=r(18),a=r(17).f;r(8)&&n(n.P+r(67),"Object",{__lookupSetter__:function t(e){var r,n=i(this),u=o(e,!0);do{if(r=a(n,u))return r.set}while(n=s(n))}})},function(t,e,r){var n=r(0);n(n.P+n.R,"Map",{toJSON:r(136)("Map")})},function(t,e,r){var n=r(0);n(n.P+n.R,"Set",{toJSON:r(136)("Set")})},function(t,e,r){r(68)("Map")},function(t,e,r){r(68)("Set")},function(t,e,r){r(68)("WeakMap")},function(t,e,r){r(68)("WeakSet")},function(t,e,r){r(69)("Map")},function(t,e,r){r(69)("Set")},function(t,e,r){r(69)("WeakMap")},function(t,e,r){r(69)("WeakSet")},function(t,e,r){var n=r(0);n(n.G,{global:r(2)})},function(t,e,r){var n=r(0);n(n.S,"System",{global:r(2)})},function(t,e,r){var n=r(0),i=r(21);n(n.S,"Error",{isError:function t(e){return"Error"===i(e)}})},function(t,e,r){var n=r(0);n(n.S,"Math",{clamp:function t(e,r,n){return Math.min(n,Math.max(r,e))}})},function(t,e,r){var n=r(0);n(n.S,"Math",{DEG_PER_RAD:Math.PI/180})},function(t,e,r){var n=r(0),i=180/Math.PI;n(n.S,"Math",{degrees:function t(e){return e*i}})},function(t,e,r){var n=r(0),i=r(138),o=r(117);n(n.S,"Math",{fscale:function t(e,r,n,s,a){return o(i(e,r,n,s,a))}})},function(t,e,r){var n=r(0);n(n.S,"Math",{iaddh:function t(e,r,n,i){var o=e>>>0,s=n>>>0;return(r>>>0)+(i>>>0)+((o&s|(o|s)&~(o+s>>>0))>>>31)|0}})},function(t,e,r){var n=r(0);n(n.S,"Math",{isubh:function t(e,r,n,i){var o=e>>>0,s=n>>>0;return(r>>>0)-(i>>>0)-((~o&s|~(o^s)&o-s>>>0)>>>31)|0}})},function(t,e,r){var n=r(0);n(n.S,"Math",{imulh:function t(e,r){var n=+e,i=+r,o=65535&n,s=65535&i,a=n>>16,u=i>>16,c=(a*s>>>0)+(o*s>>>16);return a*u+(c>>16)+((o*u>>>0)+(65535&c)>>16)}})},function(t,e,r){var n=r(0);n(n.S,"Math",{RAD_PER_DEG:180/Math.PI})},function(t,e,r){var n=r(0),i=Math.PI/180;n(n.S,"Math",{radians:function t(e){return e*i}})},function(t,e,r){var n=r(0);n(n.S,"Math",{scale:r(138)})},function(t,e,r){var n=r(0);n(n.S,"Math",{umulh:function t(e,r){var n=+e,i=+r,o=65535&n,s=65535&i,a=n>>>16,u=i>>>16,c=(a*s>>>0)+(o*s>>>16);return a*u+(c>>>16)+((o*u>>>0)+(65535&c)>>>16)}})},function(t,e,r){var n=r(0);n(n.S,"Math",{signbit:function t(e){return(e=+e)!=e?e:0==e?1/e==1/0:e>0}})},function(t,e,r){"use strict";var n=r(0),i=r(19),o=r(2),s=r(54),a=r(125);n(n.P+n.R,"Promise",{finally:function(t){var e=s(this,i.Promise||o.Promise),r="function"==typeof t;return this.then(r?function(r){return a(e,t()).then(function(){return r})}:t,r?function(r){return a(e,t()).then(function(){throw r})}:t)}})},function(t,e,r){"use strict";var n=r(0),i=r(97),o=r(124);n(n.S,"Promise",{try:function(t){var e=i.f(this),r=o(t);return(r.e?e.reject:e.resolve)(r.v),e.promise}})},function(t,e,r){var n=r(29),i=r(1),o=n.key,s=n.set;n.exp({defineMetadata:function t(e,r,n,a){s(e,r,i(n),o(a))}})},function(t,e,r){var n=r(29),i=r(1),o=n.key,s=n.map,a=n.store;n.exp({deleteMetadata:function t(e,r){var n=arguments.length<3?void 0:o(arguments[2]),u=s(i(r),n,!1);if(void 0===u||!u.delete(e))return!1;if(u.size)return!0;var c=a.get(r);return c.delete(n),!!c.size||a.delete(r)}})},function(t,e,r){var n=r(29),i=r(1),o=r(18),s=n.has,a=n.get,u=n.key,c=function(t,e,r){if(s(t,e,r))return a(t,e,r);var n=o(e);return null!==n?c(t,n,r):void 0};n.exp({getMetadata:function t(e,r){return c(e,i(r),arguments.length<3?void 0:u(arguments[2]))}})},function(t,e,r){var n=r(128),i=r(137),o=r(29),s=r(1),a=r(18),u=o.keys,c=o.key,f=function(t,e){var r=u(t,e),o=a(t);if(null===o)return r;var s=f(o,e);return s.length?r.length?i(new n(r.concat(s))):s:r};o.exp({getMetadataKeys:function t(e){return f(s(e),arguments.length<2?void 0:c(arguments[1]))}})},function(t,e,r){var n=r(29),i=r(1),o=n.get,s=n.key;n.exp({getOwnMetadata:function t(e,r){return o(e,i(r),arguments.length<3?void 0:s(arguments[2]))}})},function(t,e,r){var n=r(29),i=r(1),o=n.keys,s=n.key;n.exp({getOwnMetadataKeys:function t(e){return o(i(e),arguments.length<2?void 0:s(arguments[1]))}})},function(t,e,r){var n=r(29),i=r(1),o=r(18),s=n.has,a=n.key,u=function(t,e,r){if(s(t,e,r))return!0;var n=o(e);return null!==n&&u(t,n,r)};n.exp({hasMetadata:function t(e,r){return u(e,i(r),arguments.length<3?void 0:a(arguments[2]))}})},function(t,e,r){var n=r(29),i=r(1),o=n.has,s=n.key;n.exp({hasOwnMetadata:function t(e,r){return o(e,i(r),arguments.length<3?void 0:s(arguments[2]))}})},function(t,e,r){var n=r(29),i=r(1),o=r(11),s=n.key,a=n.set;n.exp({metadata:function t(e,r){return function t(n,u){a(e,r,(void 0!==u?i:o)(n),s(u))}}})},function(t,e,r){var n=r(0),i=r(96)(),o=r(2).process,s="process"==r(21)(o);n(n.G,{asap:function t(e){var r=s&&o.domain;i(r?r.bind(e):e)}})},function(t,e,r){"use strict";var n=r(0),i=r(2),o=r(19),s=r(96)(),a=r(6)("observable"),u=r(11),c=r(1),f=r(40),h=r(42),l=r(12),p=r(41),d=p.RETURN,g=function(t){return null==t?void 0:u(t)},v=function(t){var e=t._c;e&&(t._c=void 0,e())},y=function(t){return void 0===t._o},m=function(t){y(t)||(t._o=void 0,v(t))},_=function(t,e){c(t),this._c=void 0,this._o=t,t=new S(this);try{var r=e(t),n=r;null!=r&&("function"==typeof r.unsubscribe?r=function(){n.unsubscribe()}:u(r),this._c=r)}catch(e){return void t.error(e)}y(this)&&v(this)};_.prototype=h({},{unsubscribe:function t(){m(this)}});var S=function(t){this._s=t};S.prototype=h({},{next:function t(e){var r=this._s;if(!y(r)){var n=r._o;try{var i=g(n.next);if(i)return i.call(n,e)}catch(t){try{m(r)}finally{throw t}}}},error:function t(e){var r=this._s;if(y(r))throw e;var n=r._o;r._o=void 0;try{var i=g(n.error);if(!i)throw e;e=i.call(n,e)}catch(t){try{v(r)}finally{throw t}}return v(r),e},complete:function t(e){var r=this._s;if(!y(r)){var n=r._o;r._o=void 0;try{var i=g(n.complete);e=i?i.call(n,e):void 0}catch(t){try{v(r)}finally{throw t}}return v(r),e}}});var b=function t(e){f(this,b,"Observable","_f")._f=u(e)};h(b.prototype,{subscribe:function t(e){return new _(e,this._f)},forEach:function t(e){var r=this;return new(o.Promise||i.Promise)(function(t,n){u(e);var i=r.subscribe({next:function(t){try{return e(t)}catch(t){n(t),i.unsubscribe()}},error:n,complete:t})})}}),h(b,{from:function t(e){var r="function"==typeof this?this:b,n=g(c(e)[a]);if(n){var i=c(n.call(e));return i.constructor===r?i:new r(function(t){return i.subscribe(t)})}return new r(function(t){var r=!1;return s(function(){if(!r){try{if(p(e,!1,function(e){if(t.next(e),r)return d})===d)return}catch(e){if(r)throw e;return void t.error(e)}t.complete()}}),function(){r=!0}})},of:function t(){for(var e=0,r=arguments.length,n=new Array(r);e2,i=!!n&&s.call(arguments,2);return t(n?function(){("function"==typeof e?e:Function(e)).apply(this,i)}:e,r)}};i(i.G+i.B+i.F*a,{setTimeout:u(n.setTimeout),setInterval:u(n.setInterval)})},function(t,e,r){var n=r(0),i=r(95);n(n.G+n.B,{setImmediate:i.set,clearImmediate:i.clear})},function(t,e,r){for(var n=r(92),i=r(35),o=r(13),s=r(2),a=r(12),u=r(48),c=r(6),f=c("iterator"),h=c("toStringTag"),l=u.Array,p={CSSRuleList:!0,CSSStyleDeclaration:!1,CSSValueList:!1,ClientRectList:!1,DOMRectList:!1,DOMStringList:!1,DOMTokenList:!0,DataTransferItemList:!1,FileList:!1,HTMLAllCollection:!1,HTMLCollection:!1,HTMLFormElement:!1,HTMLSelectElement:!1,MediaList:!0,MimeTypeArray:!1,NamedNodeMap:!1,NodeList:!0,PaintRequestList:!1,Plugin:!1,PluginArray:!1,SVGLengthList:!1,SVGNumberList:!1,SVGPathSegList:!1,SVGPointList:!1,SVGStringList:!1,SVGTransformList:!1,SourceBufferList:!1,StyleSheetList:!0,TextTrackCueList:!1,TextTrackList:!1,TouchList:!1},d=i(p),g=0;g=0;--o){var s=this.tryEntries[o],a=s.completion;if("root"===s.tryLoc)return n("end");if(s.tryLoc<=this.prev){var u=i.call(s,"catchLoc"),c=i.call(s,"finallyLoc");if(u&&c){if(this.prev=0;--r){var n=this.tryEntries[r];if(n.tryLoc<=this.prev&&i.call(n,"finallyLoc")&&this.prev=0;--e){var r=this.tryEntries[e];if(r.finallyLoc===t)return this.complete(r.completion,r.afterLoc),C(r),g}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var r=this.tryEntries[e];if(r.tryLoc===t){var n=r.completion;if("throw"===n.type){var i=n.arg;C(r)}return i}}throw new Error("illegal catch attempt")},delegateYield:function(t,e,n){return this.delegate={iterator:R(t),resultName:e,nextLoc:n},"next"===this.method&&(this.arg=r),g}}}function S(t,e,r,n){var i=e&&e.prototype instanceof w?e:w,o=Object.create(i.prototype),s=new T(n||[]);return o._invoke=function a(t,e,r){var n=h;return function i(o,s){if(n===p)throw new Error("Generator is already running");if(n===d){if("throw"===o)throw s;return I()}for(r.method=o,r.arg=s;;){var a=r.delegate;if(a){var u=k(a,r);if(u){if(u===g)continue;return u}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if(n===h)throw n=d,r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);n=p;var c=b(t,e,r);if("normal"===c.type){if(n=r.done?d:l,c.arg===g)continue;return{value:c.arg,done:r.done}}"throw"===c.type&&(n=d,r.method="throw",r.arg=c.arg)}}}(t,r,s),o}function b(t,e,r){try{return{type:"normal",arg:t.call(e,r)}}catch(t){return{type:"throw",arg:t}}}function w(){}function F(){}function E(){}function x(t){["next","throw","return"].forEach(function(e){t[e]=function(t){return this._invoke(e,t)}})}function A(t){function r(e,n,o,s){var a=b(t[e],t,n);if("throw"!==a.type){var u=a.arg,c=u.value;return c&&"object"==typeof c&&i.call(c,"__await")?Promise.resolve(c.__await).then(function(t){r("next",t,o,s)},function(t){r("throw",t,o,s)}):Promise.resolve(c).then(function(t){u.value=t,o(u)},s)}s(a.arg)}var n;"object"==typeof e.process&&e.process.domain&&(r=e.process.domain.bind(r)),this._invoke=function o(t,e){function i(){return new Promise(function(n,i){r(t,e,n,i)})}return n=n?n.then(i,i):i()}}function k(t,e){var n=t.iterator[e.method];if(n===r){if(e.delegate=null,"throw"===e.method){if(t.iterator.return&&(e.method="return",e.arg=r,k(t,e),"throw"===e.method))return g;e.method="throw",e.arg=new TypeError("The iterator does not provide a 'throw' method")}return g}var i=b(n,t.iterator,e.arg);if("throw"===i.type)return e.method="throw",e.arg=i.arg,e.delegate=null,g;var o=i.arg;return o?o.done?(e[t.resultName]=o.value,e.next=t.nextLoc,"return"!==e.method&&(e.method="next",e.arg=r),e.delegate=null,g):o:(e.method="throw",e.arg=new TypeError("iterator result is not an object"),e.delegate=null,g)}function P(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function C(t){var e=t.completion||{};e.type="normal",delete e.arg,t.completion=e}function T(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(P,this),this.reset(!0)}function R(t){if(t){var e=t[s];if(e)return e.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var n=-1,o=function e(){for(;++n1&&void 0!==arguments[1]?arguments[1]:o.MetadataService,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:s.UserInfoService,u=arguments.length>3&&void 0!==arguments[3]?arguments[3]:c.JoseUtil,f=arguments.length>4&&void 0!==arguments[4]?arguments[4]:a.TokenClient;if(function h(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),!e)throw i.Log.error("ResponseValidator.ctor: No settings passed to ResponseValidator"),new Error("settings");this._settings=e,this._metadataService=new r(this._settings),this._userInfoService=new n(this._settings),this._joseUtil=u,this._tokenClient=new f(this._settings)}return t.prototype.validateSigninResponse=function t(e,r){var n=this;return i.Log.debug("ResponseValidator.validateSigninResponse"),this._processSigninParams(e,r).then(function(t){return i.Log.debug("ResponseValidator.validateSigninResponse: state processed"),n._validateTokens(e,t).then(function(t){return i.Log.debug("ResponseValidator.validateSigninResponse: tokens validated"),n._processClaims(e,t).then(function(t){return i.Log.debug("ResponseValidator.validateSigninResponse: claims processed"),t})})})},t.prototype.validateSignoutResponse=function t(e,r){return e.id!==r.state?(i.Log.error("ResponseValidator.validateSignoutResponse: State does not match"),Promise.reject(new Error("State does not match"))):(i.Log.debug("ResponseValidator.validateSignoutResponse: state validated"),r.state=e.data,r.error?(i.Log.warn("ResponseValidator.validateSignoutResponse: Response was error",r.error),Promise.reject(new u.ErrorResponse(r))):Promise.resolve(r))},t.prototype._processSigninParams=function t(e,r){if(e.id!==r.state)return i.Log.error("ResponseValidator._processSigninParams: State does not match"),Promise.reject(new Error("State does not match"));if(!e.client_id)return i.Log.error("ResponseValidator._processSigninParams: No client_id on state"),Promise.reject(new Error("No client_id on state"));if(!e.authority)return i.Log.error("ResponseValidator._processSigninParams: No authority on state"),Promise.reject(new Error("No authority on state"));if(this._settings.authority){if(this._settings.authority&&this._settings.authority!==e.authority)return i.Log.error("ResponseValidator._processSigninParams: authority mismatch on settings vs. signin state"),Promise.reject(new Error("authority mismatch on settings vs. signin state"))}else this._settings.authority=e.authority;if(this._settings.client_id){if(this._settings.client_id&&this._settings.client_id!==e.client_id)return i.Log.error("ResponseValidator._processSigninParams: client_id mismatch on settings vs. signin state"),Promise.reject(new Error("client_id mismatch on settings vs. signin state"))}else this._settings.client_id=e.client_id;return i.Log.debug("ResponseValidator._processSigninParams: state validated"),r.state=e.data,r.error?(i.Log.warn("ResponseValidator._processSigninParams: Response was error",r.error),Promise.reject(new u.ErrorResponse(r))):e.nonce&&!r.id_token?(i.Log.error("ResponseValidator._processSigninParams: Expecting id_token in response"),Promise.reject(new Error("No id_token in response"))):!e.nonce&&r.id_token?(i.Log.error("ResponseValidator._processSigninParams: Not expecting id_token in response"),Promise.reject(new Error("Unexpected id_token in response"))):e.code_verifier&&!r.code?(i.Log.error("ResponseValidator._processSigninParams: Expecting code in response"),Promise.reject(new Error("No code in response"))):!e.code_verifier&&r.code?(i.Log.error("ResponseValidator._processSigninParams: Not expecting code in response"),Promise.reject(new Error("Unexpected code in response"))):(r.scope||(r.scope=e.scope),Promise.resolve(r))},t.prototype._processClaims=function t(e,r){var n=this;if(r.isOpenIdConnect){if(i.Log.debug("ResponseValidator._processClaims: response is OIDC, processing claims"),r.profile=this._filterProtocolClaims(r.profile),!0!==e.skipUserInfo&&this._settings.loadUserInfo&&r.access_token)return i.Log.debug("ResponseValidator._processClaims: loading user info"),this._userInfoService.getClaims(r.access_token).then(function(t){return i.Log.debug("ResponseValidator._processClaims: user info claims received from user info endpoint"),t.sub!==r.profile.sub?(i.Log.error("ResponseValidator._processClaims: sub from user info endpoint does not match sub in access_token"),Promise.reject(new Error("sub from user info endpoint does not match sub in access_token"))):(r.profile=n._mergeClaims(r.profile,t),i.Log.debug("ResponseValidator._processClaims: user info claims received, updated profile:",r.profile),r)});i.Log.debug("ResponseValidator._processClaims: not loading user info")}else i.Log.debug("ResponseValidator._processClaims: response is not OIDC, not processing claims");return Promise.resolve(r)},t.prototype._mergeClaims=function t(e,r){var i=Object.assign({},e);for(var o in r){var s=r[o];Array.isArray(s)||(s=[s]);for(var a=0;a1)return i.Log.error("ResponseValidator._validateIdToken: No kid found in id_token and more than one key found in metadata"),Promise.reject(new Error("No kid found in id_token and more than one key found in metadata"));u=a[0]}if(!u)return i.Log.error("ResponseValidator._validateIdToken: No key matching kid or alg found in signing keys"),Promise.reject(new Error("No key matching kid or alg found in signing keys"));var c=e.client_id,f=n._settings.clockSkew;return i.Log.debug("ResponseValidator._validateIdToken: Validaing JWT; using clock skew (in seconds) of: ",f),n._joseUtil.validateJwt(r.id_token,u,t,c,f).then(function(){return i.Log.debug("ResponseValidator._validateIdToken: JWT validation successful"),o.payload.sub?(r.profile=o.payload,r):(i.Log.error("ResponseValidator._validateIdToken: No sub present in id_token"),Promise.reject(new Error("No sub present in id_token")))})})})},t.prototype._filterByAlg=function t(e,r){var n=null;if(r.startsWith("RS"))n="RSA";else if(r.startsWith("PS"))n="PS";else{if(!r.startsWith("ES"))return i.Log.debug("ResponseValidator._filterByAlg: alg not supported: ",r),[];n="EC"}return i.Log.debug("ResponseValidator._filterByAlg: Looking for keys that match kty: ",n),e=e.filter(function(t){return t.kty===n}),i.Log.debug("ResponseValidator._filterByAlg: Number of keys that match kty: ",n,e.length),e},t.prototype._validateAccessToken=function t(e){if(!e.profile)return i.Log.error("ResponseValidator._validateAccessToken: No profile loaded from id_token"),Promise.reject(new Error("No profile loaded from id_token"));if(!e.profile.at_hash)return i.Log.error("ResponseValidator._validateAccessToken: No at_hash in id_token"),Promise.reject(new Error("No at_hash in id_token"));if(!e.id_token)return i.Log.error("ResponseValidator._validateAccessToken: No id_token"),Promise.reject(new Error("No id_token"));var r=this._joseUtil.parseJwt(e.id_token);if(!r||!r.header)return i.Log.error("ResponseValidator._validateAccessToken: Failed to parse id_token",r),Promise.reject(new Error("Failed to parse id_token"));var n=r.header.alg;if(!n||5!==n.length)return i.Log.error("ResponseValidator._validateAccessToken: Unsupported alg:",n),Promise.reject(new Error("Unsupported alg: "+n));var o=n.substr(2,3);if(!o)return i.Log.error("ResponseValidator._validateAccessToken: Unsupported alg:",n,o),Promise.reject(new Error("Unsupported alg: "+n));if(256!==(o=parseInt(o))&&384!==o&&512!==o)return i.Log.error("ResponseValidator._validateAccessToken: Unsupported alg:",n,o),Promise.reject(new Error("Unsupported alg: "+n));var s="sha"+o,a=this._joseUtil.hashString(e.access_token,s);if(!a)return i.Log.error("ResponseValidator._validateAccessToken: access_token hash failed:",s),Promise.reject(new Error("Failed to validate at_hash"));var u=a.substr(0,a.length/2),c=this._joseUtil.hexToBase64Url(u);return c!==e.profile.at_hash?(i.Log.error("ResponseValidator._validateAccessToken: Failed to validate at_hash",c,e.profile.at_hash),Promise.reject(new Error("Failed to validate at_hash"))):(i.Log.debug("ResponseValidator._validateAccessToken: success"),Promise.resolve(e))},t}()},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.UserInfoService=void 0;var n=r(101),i=r(49),o=r(3),s=r(70);e.UserInfoService=function(){function t(e){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n.JsonService,a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:i.MetadataService,u=arguments.length>3&&void 0!==arguments[3]?arguments[3]:s.JoseUtil;if(function c(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t),!e)throw o.Log.error("UserInfoService.ctor: No settings passed"),new Error("settings");this._settings=e,this._jsonService=new r(void 0,void 0,this._getClaimsFromJwt.bind(this)),this._metadataService=new a(this._settings),this._joseUtil=u}return t.prototype.getClaims=function t(e){var r=this;return e?this._metadataService.getUserInfoEndpoint().then(function(t){return o.Log.debug("UserInfoService.getClaims: received userinfo url",t),r._jsonService.getJson(t,e).then(function(t){return o.Log.debug("UserInfoService.getClaims: claims received",t),t})}):(o.Log.error("UserInfoService.getClaims: No token passed"),Promise.reject(new Error("A token is required")))},t.prototype._getClaimsFromJwt=function t(e){var r=this;try{var n=this._joseUtil.parseJwt(e.responseText);if(!n||!n.header||!n.payload)return o.Log.error("UserInfoService._getClaimsFromJwt: Failed to parse JWT",n),Promise.reject(new Error("Failed to parse id_token"));var i=n.header.kid,s=void 0;switch(this._settings.userInfoJwtIssuer){case"OP":s=this._metadataService.getIssuer();break;case"ANY":s=Promise.resolve(n.payload.iss);break;default:s=Promise.resolve(this._settings.userInfoJwtIssuer)}return s.then(function(t){return o.Log.debug("UserInfoService._getClaimsFromJwt: Received issuer:"+t),r._metadataService.getSigningKeys().then(function(s){if(!s)return o.Log.error("UserInfoService._getClaimsFromJwt: No signing keys from metadata"),Promise.reject(new Error("No signing keys from metadata"));o.Log.debug("UserInfoService._getClaimsFromJwt: Received signing keys");var a=void 0;if(i)a=s.filter(function(t){return t.kid===i})[0];else{if((s=r._filterByAlg(s,n.header.alg)).length>1)return o.Log.error("UserInfoService._getClaimsFromJwt: No kid found in id_token and more than one key found in metadata"),Promise.reject(new Error("No kid found in id_token and more than one key found in metadata"));a=s[0]}if(!a)return o.Log.error("UserInfoService._getClaimsFromJwt: No key matching kid or alg found in signing keys"),Promise.reject(new Error("No key matching kid or alg found in signing keys"));var u=r._settings.client_id,c=r._settings.clockSkew;return o.Log.debug("UserInfoService._getClaimsFromJwt: Validaing JWT; using clock skew (in seconds) of: ",c),r._joseUtil.validateJwt(e.responseText,a,t,u,c,void 0,!0).then(function(){return o.Log.debug("UserInfoService._getClaimsFromJwt: JWT validation successful"),n.payload})})})}catch(t){return o.Log.error("UserInfoService._getClaimsFromJwt: Error parsing JWT response",t.message),void reject(t)}},t.prototype._filterByAlg=function t(e,r){var n=null;if(r.startsWith("RS"))n="RSA";else if(r.startsWith("PS"))n="PS";else{if(!r.startsWith("ES"))return o.Log.debug("UserInfoService._filterByAlg: alg not supported: ",r),[];n="EC"}return o.Log.debug("UserInfoService._filterByAlg: Looking for keys that match kty: ",n),e=e.filter(function(t){return t.kty===n}),o.Log.debug("UserInfoService._filterByAlg: Number of keys that match kty: ",n,e.length),e},t}()},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.AllowedSigningAlgs=e.b64tohex=e.hextob64u=e.crypto=e.X509=e.KeyUtil=e.jws=void 0;var n=r(359);e.jws=n.jws,e.KeyUtil=n.KEYUTIL,e.X509=n.X509,e.crypto=n.crypto,e.hextob64u=n.hextob64u,e.b64tohex=n.b64tohex,e.AllowedSigningAlgs=["RS256","RS384","RS512","PS256","PS384","PS512","ES256","ES384","ES512"]},function(t,e,r){"use strict";(function(t){Object.defineProperty(e,"__esModule",{value:!0});var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},n={userAgent:!1},i={}; /*! Copyright (c) 2011, Yahoo! Inc. All rights reserved. Code licensed under the BSD License: diff --git a/dist/oidc-client.rsa256.slim.js b/dist/oidc-client.rsa256.slim.js index b6d8acea..3f2eeded 100644 --- a/dist/oidc-client.rsa256.slim.js +++ b/dist/oidc-client.rsa256.slim.js @@ -5659,7 +5659,7 @@ var CordovaPopupWindow = exports.CordovaPopupWindow = function () { Object.defineProperty(exports, "__esModule", { - value: true + value: true }); exports.ErrorResponse = undefined; @@ -5673,37 +5673,37 @@ function _inherits(subClass, superClass) { if (typeof superClass !== "function" // Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information. var ErrorResponse = exports.ErrorResponse = function (_Error) { - _inherits(ErrorResponse, _Error); + _inherits(ErrorResponse, _Error); - function ErrorResponse() { - var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, - error = _ref.error, - error_description = _ref.error_description, - error_uri = _ref.error_uri, - state = _ref.state, - session_state = _ref.session_state; + function ErrorResponse() { + var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, + error = _ref.error, + error_description = _ref.error_description, + error_uri = _ref.error_uri, + state = _ref.state, + session_state = _ref.session_state; - _classCallCheck(this, ErrorResponse); + _classCallCheck(this, ErrorResponse); - if (!error) { - _Log.Log.error("No error passed to ErrorResponse"); - throw new Error("error"); - } + if (!error) { + _Log.Log.error("No error passed to ErrorResponse"); + throw new Error("error"); + } - var _this = _possibleConstructorReturn(this, _Error.call(this, error_description || error)); + var _this = _possibleConstructorReturn(this, _Error.call(this, error_description || error)); - _this.name = "ErrorResponse"; + _this.name = "ErrorResponse"; - _this.error = error; - _this.error_description = error_description; - _this.error_uri = error_uri; + _this.error = error; + _this.error_description = error_description; + _this.error_uri = error_uri; - _this.state = state; - _this.session_state = session_state; - return _this; - } + _this.state = state; + _this.session_state = session_state; + return _this; + } - return ErrorResponse; + return ErrorResponse; }(Error); /***/ }), @@ -6971,7 +6971,6 @@ var OidcClient = exports.OidcClient = function () { resource = resource || this._settings.resource; response_mode = response_mode || this._settings.response_mode; extraQueryParams = extraQueryParams || this._settings.extraQueryParams; - extraTokenParams = extraTokenParams || this._settings.extraTokenParams; var authority = this._settings.authority; @@ -7265,9 +7264,7 @@ var OidcClientSettings = exports.OidcClientSettings = function () { _ref$MetadataServiceC = _ref.MetadataServiceCtor, MetadataServiceCtor = _ref$MetadataServiceC === undefined ? _MetadataService.MetadataService : _ref$MetadataServiceC, _ref$extraQueryParams = _ref.extraQueryParams, - extraQueryParams = _ref$extraQueryParams === undefined ? {} : _ref$extraQueryParams, - _ref$extraTokenParams = _ref.extraTokenParams, - extraTokenParams = _ref$extraTokenParams === undefined ? {} : _ref$extraTokenParams; + extraQueryParams = _ref$extraQueryParams === undefined ? {} : _ref$extraQueryParams; _classCallCheck(this, OidcClientSettings); @@ -7302,7 +7299,6 @@ var OidcClientSettings = exports.OidcClientSettings = function () { this._metadataService = new MetadataServiceCtor(this); this._extraQueryParams = (typeof extraQueryParams === 'undefined' ? 'undefined' : _typeof(extraQueryParams)) === 'object' ? extraQueryParams : {}; - this._extraTokenParams = (typeof extraTokenParams === 'undefined' ? 'undefined' : _typeof(extraTokenParams)) === 'object' ? extraTokenParams : {}; } // client config @@ -7495,21 +7491,6 @@ var OidcClientSettings = exports.OidcClientSettings = function () { this._extraQueryParams = {}; } } - - // extra token params - - }, { - key: 'extraTokenParams', - get: function get() { - return this._extraTokenParams; - }, - set: function set(value) { - if ((typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object') { - this._extraTokenParams = value; - } else { - this._extraTokenParams = {}; - } - } }]); return OidcClientSettings; @@ -8975,7 +8956,7 @@ var SignoutRequest = exports.SignoutRequest = function SignoutRequest(_ref) { Object.defineProperty(exports, "__esModule", { - value: true + value: true }); exports.SignoutResponse = undefined; @@ -8985,15 +8966,15 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons // Licensed under the Apache License, Version 2.0. See LICENSE in the project root for license information. var SignoutResponse = exports.SignoutResponse = function SignoutResponse(url) { - _classCallCheck(this, SignoutResponse); + _classCallCheck(this, SignoutResponse); - var values = _UrlUtility.UrlUtility.parseUrlFragment(url, "?"); + var values = _UrlUtility.UrlUtility.parseUrlFragment(url, "?"); - this.error = values.error; - this.error_description = values.error_description; - this.error_uri = values.error_uri; + this.error = values.error; + this.error_description = values.error_description; + this.error_uri = values.error_uri; - this.state = values.state; + this.state = values.state; }; /***/ }), @@ -11485,4 +11466,4 @@ module.exports = __webpack_require__(/*! ./index.js */"./index.js"); /***/ }) /******/ }); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9PaWRjL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL09pZGMvLi9pbmRleC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2Jhc2U2NC1qcy9pbmRleC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvZXM2L3Byb21pc2UuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ZuL2FycmF5L2ZpbmQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ZuL2FycmF5L2lzLWFycmF5LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9mbi9hcnJheS9zb21lLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9mbi9hcnJheS9zcGxpY2UuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ZuL2Z1bmN0aW9uL2JpbmQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ZuL29iamVjdC9hc3NpZ24uanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2EtZnVuY3Rpb24uanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FkZC10by11bnNjb3BhYmxlcy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYW4taW5zdGFuY2UuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FuLW9iamVjdC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktaW5jbHVkZXMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FycmF5LW1ldGhvZHMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FycmF5LXNwZWNpZXMtY29uc3RydWN0b3IuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FycmF5LXNwZWNpZXMtY3JlYXRlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19iaW5kLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19jbGFzc29mLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19jb2YuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2NvcmUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2N0eC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZGVmaW5lZC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZGVzY3JpcHRvcnMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2RvbS1jcmVhdGUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2VudW0tYnVnLWtleXMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2V4cG9ydC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZmFpbHMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2Zvci1vZi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZnVuY3Rpb24tdG8tc3RyaW5nLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19nbG9iYWwuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2hhcy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faGlkZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faHRtbC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faWU4LWRvbS1kZWZpbmUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2ludm9rZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faW9iamVjdC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtYXJyYXktaXRlci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2lzLW9iamVjdC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlci1jYWxsLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pdGVyLWNyZWF0ZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlci1kZWZpbmUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2l0ZXItZGV0ZWN0LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pdGVyLXN0ZXAuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2l0ZXJhdG9ycy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbGlicmFyeS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWljcm90YXNrLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19uZXctcHJvbWlzZS1jYXBhYmlsaXR5LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtYXNzaWduLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtY3JlYXRlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZHAuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1kcHMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1nb3BzLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZ3BvLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3Qta2V5cy1pbnRlcm5hbC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWtleXMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1waWUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3BlcmZvcm0uanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3Byb21pc2UtcmVzb2x2ZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcHJvcGVydHktZGVzYy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcmVkZWZpbmUtYWxsLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19yZWRlZmluZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2V0LXNwZWNpZXMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3NldC10by1zdHJpbmctdGFnLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zaGFyZWQta2V5LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zaGFyZWQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3NwZWNpZXMtY29uc3RydWN0b3IuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3N0cmljdC1tZXRob2QuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3N0cmluZy1hdC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdGFzay5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8tYWJzb2x1dGUtaW5kZXguanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3RvLWludGVnZXIuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3RvLWlvYmplY3QuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3RvLWxlbmd0aC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8tb2JqZWN0LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190by1wcmltaXRpdmUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3VpZC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdXNlci1hZ2VudC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fd2tzLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2NvcmUuZ2V0LWl0ZXJhdG9yLW1ldGhvZC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZmluZC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuaXMtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5Lml0ZXJhdG9yLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5zb21lLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5mdW5jdGlvbi5iaW5kLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuYXNzaWduLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QudG8tc3RyaW5nLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5wcm9taXNlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuaXRlcmF0b3IuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvd2ViLmRvbS5pdGVyYWJsZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NyeXB0by1qcy9jb3JlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY3J5cHRvLWpzL3NoYTI1Ni5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2pzYm4vaW5kZXguanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy91dWlkL2xpYi9ieXRlc1RvVXVpZC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL3V1aWQvbGliL3JuZy1icm93c2VyLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvdXVpZC92NC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vcG9seWZpbGxzLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvQWNjZXNzVG9rZW5FdmVudHMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9DaGVja1Nlc3Npb25JRnJhbWUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9Db3Jkb3ZhSUZyYW1lTmF2aWdhdG9yLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvQ29yZG92YVBvcHVwTmF2aWdhdG9yLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvQ29yZG92YVBvcHVwV2luZG93LmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvRXJyb3JSZXNwb25zZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL0V2ZW50LmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvR2xvYmFsLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvSUZyYW1lTmF2aWdhdG9yLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvSUZyYW1lV2luZG93LmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvSW5NZW1vcnlXZWJTdG9yYWdlLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvSm9zZVV0aWxJbXBsLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvSm9zZVV0aWxSc2EuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9Kc29uU2VydmljZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL0xvZy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL01ldGFkYXRhU2VydmljZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL09pZGNDbGllbnQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9PaWRjQ2xpZW50U2V0dGluZ3MuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9Qb3B1cE5hdmlnYXRvci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL1BvcHVwV2luZG93LmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvUmVkaXJlY3ROYXZpZ2F0b3IuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9SZXNwb25zZVZhbGlkYXRvci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL1Nlc3Npb25Nb25pdG9yLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvU2lnbmluUmVxdWVzdC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL1NpZ25pblJlc3BvbnNlLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvU2lnbmluU3RhdGUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9TaWdub3V0UmVxdWVzdC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL1NpZ25vdXRSZXNwb25zZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL1NpbGVudFJlbmV3U2VydmljZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL1N0YXRlLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvVGltZXIuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9Ub2tlbkNsaWVudC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL1Rva2VuUmV2b2NhdGlvbkNsaWVudC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL1VybFV0aWxpdHkuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9Vc2VyLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvVXNlckluZm9TZXJ2aWNlLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvVXNlck1hbmFnZXIuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9Vc2VyTWFuYWdlckV2ZW50cy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL1VzZXJNYW5hZ2VyU2V0dGluZ3MuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9XZWJTdG9yYWdlU3RhdGVTdG9yZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL2NyeXB0by9yc2EuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9yYW5kb20uanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3ZlcnNpb24uanMiXSwibmFtZXMiOlsiVmVyc2lvbiIsIkxvZyIsIk9pZGNDbGllbnQiLCJPaWRjQ2xpZW50U2V0dGluZ3MiLCJXZWJTdG9yYWdlU3RhdGVTdG9yZSIsIkluTWVtb3J5V2ViU3RvcmFnZSIsIlVzZXJNYW5hZ2VyIiwiQWNjZXNzVG9rZW5FdmVudHMiLCJNZXRhZGF0YVNlcnZpY2UiLCJDb3Jkb3ZhUG9wdXBOYXZpZ2F0b3IiLCJDb3Jkb3ZhSUZyYW1lTmF2aWdhdG9yIiwiQ2hlY2tTZXNzaW9uSUZyYW1lIiwiVG9rZW5SZXZvY2F0aW9uQ2xpZW50IiwiU2Vzc2lvbk1vbml0b3IiLCJHbG9iYWwiLCJVc2VyIiwiRGVmYXVsdEFjY2Vzc1Rva2VuRXhwaXJpbmdOb3RpZmljYXRpb25UaW1lIiwiYWNjZXNzVG9rZW5FeHBpcmluZ05vdGlmaWNhdGlvblRpbWUiLCJhY2Nlc3NUb2tlbkV4cGlyaW5nVGltZXIiLCJUaW1lciIsImFjY2Vzc1Rva2VuRXhwaXJlZFRpbWVyIiwiX2FjY2Vzc1Rva2VuRXhwaXJpbmdOb3RpZmljYXRpb25UaW1lIiwiX2FjY2Vzc1Rva2VuRXhwaXJpbmciLCJfYWNjZXNzVG9rZW5FeHBpcmVkIiwibG9hZCIsImNvbnRhaW5lciIsImFjY2Vzc190b2tlbiIsImV4cGlyZXNfaW4iLCJ1bmRlZmluZWQiLCJkdXJhdGlvbiIsImRlYnVnIiwiZXhwaXJpbmciLCJpbml0IiwiY2FuY2VsIiwiZXhwaXJlZCIsInVubG9hZCIsImFkZEFjY2Vzc1Rva2VuRXhwaXJpbmciLCJjYiIsImFkZEhhbmRsZXIiLCJyZW1vdmVBY2Nlc3NUb2tlbkV4cGlyaW5nIiwicmVtb3ZlSGFuZGxlciIsImFkZEFjY2Vzc1Rva2VuRXhwaXJlZCIsInJlbW92ZUFjY2Vzc1Rva2VuRXhwaXJlZCIsIkRlZmF1bHRJbnRlcnZhbCIsImNhbGxiYWNrIiwiY2xpZW50X2lkIiwidXJsIiwiaW50ZXJ2YWwiLCJzdG9wT25FcnJvciIsIl9jYWxsYmFjayIsIl9jbGllbnRfaWQiLCJfdXJsIiwiX2ludGVydmFsIiwiX3N0b3BPbkVycm9yIiwiaWR4IiwiaW5kZXhPZiIsIl9mcmFtZV9vcmlnaW4iLCJzdWJzdHIiLCJfZnJhbWUiLCJ3aW5kb3ciLCJkb2N1bWVudCIsImNyZWF0ZUVsZW1lbnQiLCJzdHlsZSIsInZpc2liaWxpdHkiLCJwb3NpdGlvbiIsImRpc3BsYXkiLCJ3aWR0aCIsImhlaWdodCIsInNyYyIsIlByb21pc2UiLCJyZXNvbHZlIiwib25sb2FkIiwiYm9keSIsImFwcGVuZENoaWxkIiwiX2JvdW5kTWVzc2FnZUV2ZW50IiwiX21lc3NhZ2UiLCJiaW5kIiwiYWRkRXZlbnRMaXN0ZW5lciIsImUiLCJvcmlnaW4iLCJzb3VyY2UiLCJjb250ZW50V2luZG93IiwiZGF0YSIsImVycm9yIiwic3RvcCIsInN0YXJ0Iiwic2Vzc2lvbl9zdGF0ZSIsIl9zZXNzaW9uX3N0YXRlIiwic2VuZCIsInBvc3RNZXNzYWdlIiwiX3RpbWVyIiwic2V0SW50ZXJ2YWwiLCJjbGVhckludGVydmFsIiwicHJlcGFyZSIsInBhcmFtcyIsInBvcHVwV2luZG93RmVhdHVyZXMiLCJwb3B1cCIsIkNvcmRvdmFQb3B1cFdpbmRvdyIsIkRlZmF1bHRQb3B1cEZlYXR1cmVzIiwiRGVmYXVsdFBvcHVwVGFyZ2V0IiwiX3Byb21pc2UiLCJyZWplY3QiLCJfcmVzb2x2ZSIsIl9yZWplY3QiLCJmZWF0dXJlcyIsInRhcmdldCIsInBvcHVwV2luZG93VGFyZ2V0IiwicmVkaXJlY3RfdXJpIiwic3RhcnRVcmwiLCJfaXNJbkFwcEJyb3dzZXJJbnN0YWxsZWQiLCJjb3Jkb3ZhTWV0YWRhdGEiLCJzb21lIiwibmFtZSIsImhhc093blByb3BlcnR5IiwibmF2aWdhdGUiLCJfZXJyb3IiLCJjb3Jkb3ZhIiwicmVxdWlyZSIsIm1ldGFkYXRhIiwiX3BvcHVwIiwiSW5BcHBCcm93c2VyIiwib3BlbiIsIl9leGl0Q2FsbGJhY2tFdmVudCIsIl9leGl0Q2FsbGJhY2siLCJfbG9hZFN0YXJ0Q2FsbGJhY2tFdmVudCIsIl9sb2FkU3RhcnRDYWxsYmFjayIsInByb21pc2UiLCJldmVudCIsIl9zdWNjZXNzIiwibWVzc2FnZSIsIl9jbGVhbnVwIiwiRXJyb3IiLCJjbG9zZSIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJFcnJvclJlc3BvbnNlIiwiZXJyb3JfZGVzY3JpcHRpb24iLCJlcnJvcl91cmkiLCJzdGF0ZSIsIkV2ZW50IiwiX25hbWUiLCJfY2FsbGJhY2tzIiwicHVzaCIsImZpbmRJbmRleCIsIml0ZW0iLCJzcGxpY2UiLCJyYWlzZSIsImkiLCJsZW5ndGgiLCJ0aW1lciIsImhhbmRsZSIsInRlc3RpbmciLCJyZXF1ZXN0IiwiX3Rlc3RpbmciLCJzZXRYTUxIdHRwUmVxdWVzdCIsIm5ld1JlcXVlc3QiLCJsb2NhdGlvbiIsImxvY2FsU3RvcmFnZSIsInNlc3Npb25TdG9yYWdlIiwiWE1MSHR0cFJlcXVlc3QiLCJJRnJhbWVOYXZpZ2F0b3IiLCJmcmFtZSIsIklGcmFtZVdpbmRvdyIsIm5vdGlmeVBhcmVudCIsIkRlZmF1bHRUaW1lb3V0IiwidGltZW91dCIsInNpbGVudFJlcXVlc3RUaW1lb3V0Iiwic2V0VGltZW91dCIsIl90aW1lb3V0IiwiY2xlYXJUaW1lb3V0IiwicmVtb3ZlQ2hpbGQiLCJfb3JpZ2luIiwiZnJhbWVFbGVtZW50IiwiaHJlZiIsInBhcmVudCIsInByb3RvY29sIiwiaG9zdCIsIl9kYXRhIiwiZ2V0SXRlbSIsImtleSIsInNldEl0ZW0iLCJ2YWx1ZSIsInJlbW92ZUl0ZW0iLCJpbmRleCIsIk9iamVjdCIsImdldE93blByb3BlcnR5TmFtZXMiLCJnZXRKb3NlVXRpbCIsImp3cyIsIktleVV0aWwiLCJYNTA5IiwiY3J5cHRvIiwiaGV4dG9iNjR1IiwiYjY0dG9oZXgiLCJBbGxvd2VkU2lnbmluZ0FsZ3MiLCJwYXJzZUp3dCIsImp3dCIsInRva2VuIiwiSldTIiwicGFyc2UiLCJoZWFkZXIiLCJoZWFkZXJPYmoiLCJwYXlsb2FkIiwicGF5bG9hZE9iaiIsInZhbGlkYXRlSnd0IiwiaXNzdWVyIiwiYXVkaWVuY2UiLCJjbG9ja1NrZXciLCJub3ciLCJ0aW1lSW5zZW5zaXRpdmUiLCJrdHkiLCJuIiwiZ2V0S2V5IiwieDVjIiwiaGV4IiwiZ2V0UHVibGljS2V5RnJvbUNlcnRIZXgiLCJjcnYiLCJ4IiwieSIsIkpvc2VVdGlsIiwiX3ZhbGlkYXRlSnd0IiwidmFsaWRhdGVKd3RBdHRyaWJ1dGVzIiwicGFyc2VJbnQiLCJEYXRlIiwiaXNzIiwiYXVkIiwidmFsaWRBdWRpZW5jZSIsIkFycmF5IiwiaXNBcnJheSIsImF6cCIsImxvd2VyTm93IiwidXBwZXJOb3ciLCJpYXQiLCJuYmYiLCJleHAiLCJ0aGVuIiwidmVyaWZ5IiwiaGFzaFN0cmluZyIsImFsZyIsIlV0aWwiLCJoZXhUb0Jhc2U2NFVybCIsIkpzb25TZXJ2aWNlIiwiYWRkaXRpb25hbENvbnRlbnRUeXBlcyIsIlhNTEh0dHBSZXF1ZXN0Q3RvciIsImp3dEhhbmRsZXIiLCJfY29udGVudFR5cGVzIiwic2xpY2UiLCJfWE1MSHR0cFJlcXVlc3QiLCJfand0SGFuZGxlciIsImdldEpzb24iLCJyZXEiLCJhbGxvd2VkQ29udGVudFR5cGVzIiwic3RhdHVzIiwiY29udGVudFR5cGUiLCJnZXRSZXNwb25zZUhlYWRlciIsImZvdW5kIiwiZmluZCIsInN0YXJ0c1dpdGgiLCJKU09OIiwicmVzcG9uc2VUZXh0Iiwic3RhdHVzVGV4dCIsIm9uZXJyb3IiLCJzZXRSZXF1ZXN0SGVhZGVyIiwicG9zdEZvcm0iLCJlbmNvZGVVUklDb21wb25lbnQiLCJub3BMb2dnZXIiLCJpbmZvIiwid2FybiIsIk5PTkUiLCJFUlJPUiIsIldBUk4iLCJJTkZPIiwiREVCVUciLCJsb2dnZXIiLCJsZXZlbCIsInJlc2V0IiwiYXJncyIsImFwcGx5IiwiZnJvbSIsIk9pZGNNZXRhZGF0YVVybFBhdGgiLCJzZXR0aW5ncyIsIkpzb25TZXJ2aWNlQ3RvciIsIl9zZXR0aW5ncyIsIl9qc29uU2VydmljZSIsImdldE1ldGFkYXRhIiwibWV0YWRhdGFVcmwiLCJnZXRJc3N1ZXIiLCJfZ2V0TWV0YWRhdGFQcm9wZXJ0eSIsImdldEF1dGhvcml6YXRpb25FbmRwb2ludCIsImdldFVzZXJJbmZvRW5kcG9pbnQiLCJnZXRUb2tlbkVuZHBvaW50Iiwib3B0aW9uYWwiLCJnZXRDaGVja1Nlc3Npb25JZnJhbWUiLCJnZXRFbmRTZXNzaW9uRW5kcG9pbnQiLCJnZXRSZXZvY2F0aW9uRW5kcG9pbnQiLCJnZXRLZXlzRW5kcG9pbnQiLCJnZXRTaWduaW5nS2V5cyIsInNpZ25pbmdLZXlzIiwiandrc191cmkiLCJrZXlTZXQiLCJrZXlzIiwiX21ldGFkYXRhVXJsIiwiYXV0aG9yaXR5IiwiY3JlYXRlU2lnbmluUmVxdWVzdCIsInJlc3BvbnNlX3R5cGUiLCJzY29wZSIsInByb21wdCIsIm1heF9hZ2UiLCJ1aV9sb2NhbGVzIiwiaWRfdG9rZW5faGludCIsImxvZ2luX2hpbnQiLCJhY3JfdmFsdWVzIiwicmVzb3VyY2UiLCJyZXF1ZXN0X3VyaSIsInJlc3BvbnNlX21vZGUiLCJleHRyYVF1ZXJ5UGFyYW1zIiwiZXh0cmFUb2tlblBhcmFtcyIsInJlcXVlc3RfdHlwZSIsInNraXBVc2VySW5mbyIsInN0YXRlU3RvcmUiLCJTaWduaW5SZXF1ZXN0IiwiaXNDb2RlIiwiX21ldGFkYXRhU2VydmljZSIsInNpZ25pblJlcXVlc3QiLCJjbGllbnRfc2VjcmV0Iiwic2lnbmluU3RhdGUiLCJfc3RhdGVTdG9yZSIsInNldCIsImlkIiwidG9TdG9yYWdlU3RyaW5nIiwicmVhZFNpZ25pblJlc3BvbnNlU3RhdGUiLCJyZW1vdmVTdGF0ZSIsInVzZVF1ZXJ5IiwiZGVsaW1pdGVyIiwicmVzcG9uc2UiLCJTaWduaW5SZXNwb25zZSIsInN0YXRlQXBpIiwicmVtb3ZlIiwiZ2V0Iiwic3RvcmVkU3RhdGVTdHJpbmciLCJTaWduaW5TdGF0ZSIsImZyb21TdG9yYWdlU3RyaW5nIiwicHJvY2Vzc1NpZ25pblJlc3BvbnNlIiwiX3ZhbGlkYXRvciIsInZhbGlkYXRlU2lnbmluUmVzcG9uc2UiLCJjcmVhdGVTaWdub3V0UmVxdWVzdCIsInBvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaSIsIlNpZ25vdXRSZXF1ZXN0Iiwic2lnbm91dFN0YXRlIiwicmVhZFNpZ25vdXRSZXNwb25zZVN0YXRlIiwiU2lnbm91dFJlc3BvbnNlIiwic3RhdGVLZXkiLCJTdGF0ZSIsInByb2Nlc3NTaWdub3V0UmVzcG9uc2UiLCJ2YWxpZGF0ZVNpZ25vdXRSZXNwb25zZSIsImNsZWFyU3RhbGVTdGF0ZSIsInN0YWxlU3RhdGVBZ2UiLCJ2YWxpZGF0b3IiLCJtZXRhZGF0YVNlcnZpY2UiLCJEZWZhdWx0UmVzcG9uc2VUeXBlIiwiRGVmYXVsdFNjb3BlIiwiRGVmYXVsdFN0YWxlU3RhdGVBZ2UiLCJEZWZhdWx0Q2xvY2tTa2V3SW5TZWNvbmRzIiwiZmlsdGVyUHJvdG9jb2xDbGFpbXMiLCJsb2FkVXNlckluZm8iLCJ1c2VySW5mb0p3dElzc3VlciIsIlJlc3BvbnNlVmFsaWRhdG9yQ3RvciIsIlJlc3BvbnNlVmFsaWRhdG9yIiwiTWV0YWRhdGFTZXJ2aWNlQ3RvciIsIl9hdXRob3JpdHkiLCJfbWV0YWRhdGEiLCJfc2lnbmluZ0tleXMiLCJfY2xpZW50X3NlY3JldCIsIl9yZXNwb25zZV90eXBlIiwiX3Njb3BlIiwiX3JlZGlyZWN0X3VyaSIsIl9wb3N0X2xvZ291dF9yZWRpcmVjdF91cmkiLCJfcHJvbXB0IiwiX2Rpc3BsYXkiLCJfbWF4X2FnZSIsIl91aV9sb2NhbGVzIiwiX2Fjcl92YWx1ZXMiLCJfcmVzb3VyY2UiLCJfcmVzcG9uc2VfbW9kZSIsIl9maWx0ZXJQcm90b2NvbENsYWltcyIsIl9sb2FkVXNlckluZm8iLCJfc3RhbGVTdGF0ZUFnZSIsIl9jbG9ja1NrZXciLCJfdXNlckluZm9Kd3RJc3N1ZXIiLCJfZXh0cmFRdWVyeVBhcmFtcyIsIl9leHRyYVRva2VuUGFyYW1zIiwiUG9wdXBOYXZpZ2F0b3IiLCJQb3B1cFdpbmRvdyIsImtlZXBPcGVuIiwibm90aWZ5T3BlbmVyIiwiQ2hlY2tGb3JQb3B1cENsb3NlZEludGVydmFsIiwiX2NoZWNrRm9yUG9wdXBDbG9zZWRUaW1lciIsIl9jaGVja0ZvclBvcHVwQ2xvc2VkIiwiX2lkIiwiZm9jdXMiLCJjbG9zZWQiLCJvcGVuZXIiLCJVcmxVdGlsaXR5IiwicGFyc2VVcmxGcmFnbWVudCIsIlJlZGlyZWN0TmF2aWdhdG9yIiwidXNlUmVwbGFjZVRvTmF2aWdhdGUiLCJyZXBsYWNlIiwiUHJvdG9jb2xDbGFpbXMiLCJVc2VySW5mb1NlcnZpY2VDdG9yIiwiVXNlckluZm9TZXJ2aWNlIiwiam9zZVV0aWwiLCJUb2tlbkNsaWVudEN0b3IiLCJUb2tlbkNsaWVudCIsIl91c2VySW5mb1NlcnZpY2UiLCJfam9zZVV0aWwiLCJfdG9rZW5DbGllbnQiLCJfcHJvY2Vzc1NpZ25pblBhcmFtcyIsIl92YWxpZGF0ZVRva2VucyIsIl9wcm9jZXNzQ2xhaW1zIiwibm9uY2UiLCJpZF90b2tlbiIsImNvZGVfdmVyaWZpZXIiLCJjb2RlIiwiaXNPcGVuSWRDb25uZWN0IiwicHJvZmlsZSIsImdldENsYWltcyIsImNsYWltcyIsInN1YiIsIl9tZXJnZUNsYWltcyIsImNsYWltczEiLCJjbGFpbXMyIiwicmVzdWx0IiwiYXNzaWduIiwidmFsdWVzIiwiZm9yRWFjaCIsInR5cGUiLCJfcHJvY2Vzc0NvZGUiLCJfdmFsaWRhdGVJZFRva2VuQW5kQWNjZXNzVG9rZW4iLCJfdmFsaWRhdGVJZFRva2VuIiwiZXhjaGFuZ2VDb2RlIiwidG9rZW5SZXNwb25zZSIsIl92YWxpZGF0ZUlkVG9rZW5BdHRyaWJ1dGVzIiwiY2xvY2tTa2V3SW5TZWNvbmRzIiwiX3ZhbGlkYXRlQWNjZXNzVG9rZW4iLCJraWQiLCJfZmlsdGVyQnlBbGciLCJmaWx0ZXIiLCJhdF9oYXNoIiwiaGFzaEFsZyIsImhhc2hCaXRzIiwic2hhIiwiaGFzaCIsImxlZnQiLCJsZWZ0X2I2NHUiLCJ1c2VyTWFuYWdlciIsIkNoZWNrU2Vzc2lvbklGcmFtZUN0b3IiLCJfdXNlck1hbmFnZXIiLCJfQ2hlY2tTZXNzaW9uSUZyYW1lQ3RvciIsImV2ZW50cyIsImFkZFVzZXJMb2FkZWQiLCJfc3RhcnQiLCJhZGRVc2VyVW5sb2FkZWQiLCJfc3RvcCIsImdldFVzZXIiLCJ1c2VyIiwibW9uaXRvckFub255bW91c1Nlc3Npb24iLCJxdWVyeVNlc3Npb25TdGF0dXMiLCJ0bXBVc2VyIiwic2Vzc2lvbiIsInNpZCIsImNhdGNoIiwiZXJyIiwiX3N1YiIsIl9zaWQiLCJfY2hlY2tTZXNzaW9uSUZyYW1lIiwiX2NoZWNrU2Vzc2lvbkludGVydmFsIiwiX3N0b3BDaGVja1Nlc3Npb25PbkVycm9yIiwicmFpc2VFdmVudCIsIl9yYWlzZVVzZXJTZXNzaW9uQ2hhbmdlZCIsIl9yYWlzZVVzZXJTaWduZWRPdXQiLCJfcmFpc2VVc2VyU2lnbmVkSW4iLCJjaGVja1Nlc3Npb25JbnRlcnZhbCIsInN0b3BDaGVja1Nlc3Npb25PbkVycm9yIiwib2lkYyIsImlzT2lkYyIsImFkZFF1ZXJ5UGFyYW0iLCJjb2RlX2NoYWxsZW5nZSIsInNwbGl0IiwiaXNPQXV0aCIsIk9pZGNTY29wZSIsInRva2VuX3R5cGUiLCJleHBpcmVzX2F0Iiwic2NvcGVzIiwiYXJndW1lbnRzIiwiX25vbmNlIiwiX2NvZGVfdmVyaWZpZXIiLCJfY29kZV9jaGFsbGVuZ2UiLCJfc2tpcFVzZXJJbmZvIiwic3RyaW5naWZ5IiwiY3JlYXRlZCIsInN0b3JhZ2VTdHJpbmciLCJTaWxlbnRSZW5ld1NlcnZpY2UiLCJfdG9rZW5FeHBpcmluZyIsInNpZ25pblNpbGVudCIsIl9yYWlzZVNpbGVudFJlbmV3RXJyb3IiLCJfY3JlYXRlZCIsIl9yZXF1ZXN0X3R5cGUiLCJzdG9yYWdlIiwiYWdlIiwiY3V0b2ZmIiwiZ2V0QWxsS2V5cyIsInByb21pc2VzIiwicCIsImFsbCIsIlRpbWVyRHVyYXRpb24iLCJub3dGdW5jIiwiX25vd0Z1bmMiLCJleHBpcmF0aW9uIiwiX3RpbWVySGFuZGxlIiwiX2V4cGlyYXRpb24iLCJ0aW1lckR1cmF0aW9uIiwiZGlmZiIsImdyYW50X3R5cGUiLCJleGNoYW5nZVJlZnJlc2hUb2tlbiIsInJlZnJlc2hfdG9rZW4iLCJBY2Nlc3NUb2tlblR5cGVIaW50IiwiUmVmcmVzaFRva2VuVHlwZUhpbnQiLCJfWE1MSHR0cFJlcXVlc3RDdG9yIiwicmV2b2tlIiwicmVxdWlyZWQiLCJfcmV2b2tlIiwieGhyIiwiZ2xvYmFsIiwibGFzdEluZGV4T2YiLCJyZWdleCIsIm0iLCJjb3VudGVyIiwiZXhlYyIsImRlY29kZVVSSUNvbXBvbmVudCIsInByb3AiLCJfZ2V0Q2xhaW1zRnJvbUp3dCIsImlzc3VlclByb21pc2UiLCJTaWxlbnRSZW5ld1NlcnZpY2VDdG9yIiwiU2Vzc2lvbk1vbml0b3JDdG9yIiwiVG9rZW5SZXZvY2F0aW9uQ2xpZW50Q3RvciIsIlVzZXJNYW5hZ2VyU2V0dGluZ3MiLCJfZXZlbnRzIiwiVXNlck1hbmFnZXJFdmVudHMiLCJfc2lsZW50UmVuZXdTZXJ2aWNlIiwiYXV0b21hdGljU2lsZW50UmVuZXciLCJzdGFydFNpbGVudFJlbmV3IiwibW9uaXRvclNlc3Npb24iLCJfc2Vzc2lvbk1vbml0b3IiLCJfdG9rZW5SZXZvY2F0aW9uQ2xpZW50IiwiX2xvYWRVc2VyIiwicmVtb3ZlVXNlciIsInN0b3JlVXNlciIsInNpZ25pblJlZGlyZWN0IiwibmF2UGFyYW1zIiwiX3NpZ25pblN0YXJ0IiwiX3JlZGlyZWN0TmF2aWdhdG9yIiwic2lnbmluUmVkaXJlY3RDYWxsYmFjayIsIl9zaWduaW5FbmQiLCJzaWduaW5Qb3B1cCIsInBvcHVwX3JlZGlyZWN0X3VyaSIsIl9zaWduaW4iLCJfcG9wdXBOYXZpZ2F0b3IiLCJzaWduaW5Qb3B1cENhbGxiYWNrIiwiX3NpZ25pbkNhbGxiYWNrIiwiX3VzZVJlZnJlc2hUb2tlbiIsImluY2x1ZGVJZFRva2VuSW5TaWxlbnRSZW5ldyIsInZhbGlkYXRlU3ViT25TaWxlbnRSZW5ldyIsImN1cnJlbnRfc3ViIiwiX3NpZ25pblNpbGVudElmcmFtZSIsImlkVG9rZW5WYWxpZGF0aW9uIiwiX3ZhbGlkYXRlSWRUb2tlbkZyb21Ub2tlblJlZnJlc2hUb2tlbiIsImF1dGhfdGltZSIsInNpbGVudF9yZWRpcmVjdF91cmkiLCJfaWZyYW1lTmF2aWdhdG9yIiwic2lnbmluU2lsZW50Q2FsbGJhY2siLCJzaWduaW5DYWxsYmFjayIsInNpZ25vdXRDYWxsYmFjayIsInNpZ25vdXRSZWRpcmVjdENhbGxiYWNrIiwic2lnbm91dFBvcHVwQ2FsbGJhY2siLCJxdWVyeV9zdGF0dXNfcmVzcG9uc2VfdHlwZSIsIm5hdlJlc3BvbnNlIiwic2lnbmluUmVzcG9uc2UiLCJuYXZpZ2F0b3IiLCJuYXZpZ2F0b3JQYXJhbXMiLCJzaWdub3V0UmVkaXJlY3QiLCJwb3N0TG9nb3V0UmVkaXJlY3RVcmkiLCJfc2lnbm91dFN0YXJ0IiwiX3NpZ25vdXRFbmQiLCJzaWdub3V0UG9wdXAiLCJwb3B1cF9wb3N0X2xvZ291dF9yZWRpcmVjdF91cmkiLCJfc2lnbm91dCIsInJldm9rZVByb21pc2UiLCJyZXZva2VBY2Nlc3NUb2tlbk9uU2lnbm91dCIsIl9yZXZva2VJbnRlcm5hbCIsInNpZ25vdXRSZXF1ZXN0Iiwic2lnbm91dFJlc3BvbnNlIiwicmV2b2tlQWNjZXNzVG9rZW4iLCJzdWNjZXNzIiwiX3Jldm9rZUFjY2Vzc1Rva2VuSW50ZXJuYWwiLCJfcmV2b2tlUmVmcmVzaFRva2VuSW50ZXJuYWwiLCJhdFN1Y2Nlc3MiLCJydFN1Y2Nlc3MiLCJzdG9wU2lsZW50UmVuZXciLCJfdXNlclN0b3JlIiwiX3VzZXJTdG9yZUtleSIsInJlZGlyZWN0TmF2aWdhdG9yIiwicG9wdXBOYXZpZ2F0b3IiLCJpZnJhbWVOYXZpZ2F0b3IiLCJ1c2VyU3RvcmUiLCJfdXNlckxvYWRlZCIsIl91c2VyVW5sb2FkZWQiLCJfc2lsZW50UmVuZXdFcnJvciIsIl91c2VyU2lnbmVkSW4iLCJfdXNlclNpZ25lZE91dCIsIl91c2VyU2Vzc2lvbkNoYW5nZWQiLCJyZW1vdmVVc2VyTG9hZGVkIiwicmVtb3ZlVXNlclVubG9hZGVkIiwiYWRkU2lsZW50UmVuZXdFcnJvciIsInJlbW92ZVNpbGVudFJlbmV3RXJyb3IiLCJhZGRVc2VyU2lnbmVkSW4iLCJyZW1vdmVVc2VyU2lnbmVkSW4iLCJhZGRVc2VyU2lnbmVkT3V0IiwicmVtb3ZlVXNlclNpZ25lZE91dCIsImFkZFVzZXJTZXNzaW9uQ2hhbmdlZCIsInJlbW92ZVVzZXJTZXNzaW9uQ2hhbmdlZCIsIkRlZmF1bHRDaGVja1Nlc3Npb25JbnRlcnZhbCIsInN0b3JlIiwiX3BvcHVwX3JlZGlyZWN0X3VyaSIsIl9wb3B1cF9wb3N0X2xvZ291dF9yZWRpcmVjdF91cmkiLCJfcG9wdXBXaW5kb3dGZWF0dXJlcyIsIl9wb3B1cFdpbmRvd1RhcmdldCIsIl9zaWxlbnRfcmVkaXJlY3RfdXJpIiwiX3NpbGVudFJlcXVlc3RUaW1lb3V0IiwiX2F1dG9tYXRpY1NpbGVudFJlbmV3IiwiX3ZhbGlkYXRlU3ViT25TaWxlbnRSZW5ldyIsIl9pbmNsdWRlSWRUb2tlbkluU2lsZW50UmVuZXciLCJfbW9uaXRvclNlc3Npb24iLCJfbW9uaXRvckFub255bW91c1Nlc3Npb24iLCJfcXVlcnlfc3RhdHVzX3Jlc3BvbnNlX3R5cGUiLCJfcmV2b2tlQWNjZXNzVG9rZW5PblNpZ25vdXQiLCJwcmVmaXgiLCJfc3RvcmUiLCJfcHJlZml4IiwiQmlnSW50ZWdlciIsIkpTQk4iLCJiNjRtYXAiLCJiNjRwYWQiLCJCYXNlNjQiLCJzIiwicmV0IiwiayIsInNsb3AiLCJjaGFyQXQiLCJ2IiwiU3RyaW5nIiwiZnJvbUNoYXJDb2RlIiwiaGV4VG9CYXNlNjQiLCJoIiwiYyIsInN1YnN0cmluZyIsInBhZGRpbmciLCJzdHIiLCJtb2QiLCJwYWQiLCJqb2luIiwiYnl0ZUFycmF5VG9IZXgiLCJyYXciLCJIRVgiLCJfaGV4IiwidG9TdHJpbmciLCJkZWNvZGVUb0hFWCIsImJhc2U2NEpzIiwidG9CeXRlQXJyYXkiLCJiYXNlNjRUb0Jhc2U2NFVybCIsInVybERlY29kZSIsImF0b2IiLCJEaWdlc3RJbmZvSGVhZCIsInNoYTEiLCJzaGEyMjQiLCJzaGEyNTYiLCJzaGEzODQiLCJzaGE1MTIiLCJtZDIiLCJtZDUiLCJyaXBlbWQxNjAiLCJEaWdlc3RBbGdzIiwiU0hBMjU2IiwiUlNBVmVyaWZpZXIiLCJtb2R1bHVzIiwiZ2V0QWxnb3JpdGhtRnJvbURpZ2VzdCIsImhEaWdlc3RJbmZvIiwiYWxnTmFtZSIsImhlYWQiLCJsZW4iLCJwcm90b3R5cGUiLCJtc2ciLCJlbmNzaWciLCJzaWciLCJiaXRMZW5ndGgiLCJkZWNyeXB0ZWRTaWciLCJtb2RQb3dJbnQiLCJkaWdlc3QiLCJkaWdlc3RJbmZvIiwibXNnSGFzaCIsInBhcnRzIiwiYWxsb3dlZFNpZ25pbmdBbGdzIiwiaGVhZGVyQW5kUGF5bG9hZCIsImdldFB1YmxpY0tleUZyb21DZXJ0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IjpbIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbiBcdFx0fVxuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuIFx0fTtcblxuIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbiBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbiBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbiBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbiBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4gXHRcdHJldHVybiBucztcbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSAwKTtcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXG5cbmltcG9ydCB7IExvZyB9IGZyb20gJy4vc3JjL0xvZy5qcyc7XG5pbXBvcnQgeyBPaWRjQ2xpZW50IH0gZnJvbSAnLi9zcmMvT2lkY0NsaWVudC5qcyc7XG5pbXBvcnQgeyBPaWRjQ2xpZW50U2V0dGluZ3MgfSBmcm9tICcuL3NyYy9PaWRjQ2xpZW50U2V0dGluZ3MuanMnO1xuaW1wb3J0IHsgV2ViU3RvcmFnZVN0YXRlU3RvcmUgfSBmcm9tICcuL3NyYy9XZWJTdG9yYWdlU3RhdGVTdG9yZS5qcyc7XG5pbXBvcnQgeyBJbk1lbW9yeVdlYlN0b3JhZ2UgfSBmcm9tICcuL3NyYy9Jbk1lbW9yeVdlYlN0b3JhZ2UuanMnO1xuaW1wb3J0IHsgVXNlck1hbmFnZXIgfSBmcm9tICcuL3NyYy9Vc2VyTWFuYWdlci5qcyc7XG5pbXBvcnQgeyBBY2Nlc3NUb2tlbkV2ZW50cyB9IGZyb20gJy4vc3JjL0FjY2Vzc1Rva2VuRXZlbnRzLmpzJztcbmltcG9ydCB7IE1ldGFkYXRhU2VydmljZSB9IGZyb20gJy4vc3JjL01ldGFkYXRhU2VydmljZS5qcyc7XG5pbXBvcnQgeyBDb3Jkb3ZhUG9wdXBOYXZpZ2F0b3IgfSBmcm9tICcuL3NyYy9Db3Jkb3ZhUG9wdXBOYXZpZ2F0b3IuanMnO1xuaW1wb3J0IHsgQ29yZG92YUlGcmFtZU5hdmlnYXRvciB9IGZyb20gJy4vc3JjL0NvcmRvdmFJRnJhbWVOYXZpZ2F0b3IuanMnO1xuaW1wb3J0IHsgQ2hlY2tTZXNzaW9uSUZyYW1lIH0gZnJvbSAnLi9zcmMvQ2hlY2tTZXNzaW9uSUZyYW1lLmpzJztcbmltcG9ydCB7IFRva2VuUmV2b2NhdGlvbkNsaWVudCB9IGZyb20gJy4vc3JjL1Rva2VuUmV2b2NhdGlvbkNsaWVudC5qcyc7XG5pbXBvcnQgeyBTZXNzaW9uTW9uaXRvciB9IGZyb20gJy4vc3JjL1Nlc3Npb25Nb25pdG9yLmpzJztcbmltcG9ydCB7IEdsb2JhbCB9IGZyb20gJy4vc3JjL0dsb2JhbC5qcyc7XG5pbXBvcnQgeyBVc2VyIH0gZnJvbSAnLi9zcmMvVXNlci5qcyc7XG5cbmltcG9ydCB7IFZlcnNpb24gfSBmcm9tICcuL3ZlcnNpb24uanMnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gICAgVmVyc2lvbixcbiAgICBMb2csXG4gICAgT2lkY0NsaWVudCxcbiAgICBPaWRjQ2xpZW50U2V0dGluZ3MsXG4gICAgV2ViU3RvcmFnZVN0YXRlU3RvcmUsXG4gICAgSW5NZW1vcnlXZWJTdG9yYWdlLFxuICAgIFVzZXJNYW5hZ2VyLFxuICAgIEFjY2Vzc1Rva2VuRXZlbnRzLFxuICAgIE1ldGFkYXRhU2VydmljZSxcbiAgICBDb3Jkb3ZhUG9wdXBOYXZpZ2F0b3IsXG4gICAgQ29yZG92YUlGcmFtZU5hdmlnYXRvcixcbiAgICBDaGVja1Nlc3Npb25JRnJhbWUsXG4gICAgVG9rZW5SZXZvY2F0aW9uQ2xpZW50LFxuICAgIFNlc3Npb25Nb25pdG9yLFxuICAgIEdsb2JhbCxcbiAgICBVc2VyXG59O1xuIiwiJ3VzZSBzdHJpY3QnXG5cbmV4cG9ydHMuYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGhcbmV4cG9ydHMudG9CeXRlQXJyYXkgPSB0b0J5dGVBcnJheVxuZXhwb3J0cy5mcm9tQnl0ZUFycmF5ID0gZnJvbUJ5dGVBcnJheVxuXG52YXIgbG9va3VwID0gW11cbnZhciByZXZMb29rdXAgPSBbXVxudmFyIEFyciA9IHR5cGVvZiBVaW50OEFycmF5ICE9PSAndW5kZWZpbmVkJyA/IFVpbnQ4QXJyYXkgOiBBcnJheVxuXG52YXIgY29kZSA9ICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvJ1xuZm9yICh2YXIgaSA9IDAsIGxlbiA9IGNvZGUubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHtcbiAgbG9va3VwW2ldID0gY29kZVtpXVxuICByZXZMb29rdXBbY29kZS5jaGFyQ29kZUF0KGkpXSA9IGlcbn1cblxuLy8gU3VwcG9ydCBkZWNvZGluZyBVUkwtc2FmZSBiYXNlNjQgc3RyaW5ncywgYXMgTm9kZS5qcyBkb2VzLlxuLy8gU2VlOiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9CYXNlNjQjVVJMX2FwcGxpY2F0aW9uc1xucmV2TG9va3VwWyctJy5jaGFyQ29kZUF0KDApXSA9IDYyXG5yZXZMb29rdXBbJ18nLmNoYXJDb2RlQXQoMCldID0gNjNcblxuZnVuY3Rpb24gZ2V0TGVucyAoYjY0KSB7XG4gIHZhciBsZW4gPSBiNjQubGVuZ3RoXG5cbiAgaWYgKGxlbiAlIDQgPiAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHN0cmluZy4gTGVuZ3RoIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0JylcbiAgfVxuXG4gIC8vIFRyaW0gb2ZmIGV4dHJhIGJ5dGVzIGFmdGVyIHBsYWNlaG9sZGVyIGJ5dGVzIGFyZSBmb3VuZFxuICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9iZWF0Z2FtbWl0L2Jhc2U2NC1qcy9pc3N1ZXMvNDJcbiAgdmFyIHZhbGlkTGVuID0gYjY0LmluZGV4T2YoJz0nKVxuICBpZiAodmFsaWRMZW4gPT09IC0xKSB2YWxpZExlbiA9IGxlblxuXG4gIHZhciBwbGFjZUhvbGRlcnNMZW4gPSB2YWxpZExlbiA9PT0gbGVuXG4gICAgPyAwXG4gICAgOiA0IC0gKHZhbGlkTGVuICUgNClcblxuICByZXR1cm4gW3ZhbGlkTGVuLCBwbGFjZUhvbGRlcnNMZW5dXG59XG5cbi8vIGJhc2U2NCBpcyA0LzMgKyB1cCB0byB0d28gY2hhcmFjdGVycyBvZiB0aGUgb3JpZ2luYWwgZGF0YVxuZnVuY3Rpb24gYnl0ZUxlbmd0aCAoYjY0KSB7XG4gIHZhciBsZW5zID0gZ2V0TGVucyhiNjQpXG4gIHZhciB2YWxpZExlbiA9IGxlbnNbMF1cbiAgdmFyIHBsYWNlSG9sZGVyc0xlbiA9IGxlbnNbMV1cbiAgcmV0dXJuICgodmFsaWRMZW4gKyBwbGFjZUhvbGRlcnNMZW4pICogMyAvIDQpIC0gcGxhY2VIb2xkZXJzTGVuXG59XG5cbmZ1bmN0aW9uIF9ieXRlTGVuZ3RoIChiNjQsIHZhbGlkTGVuLCBwbGFjZUhvbGRlcnNMZW4pIHtcbiAgcmV0dXJuICgodmFsaWRMZW4gKyBwbGFjZUhvbGRlcnNMZW4pICogMyAvIDQpIC0gcGxhY2VIb2xkZXJzTGVuXG59XG5cbmZ1bmN0aW9uIHRvQnl0ZUFycmF5IChiNjQpIHtcbiAgdmFyIHRtcFxuICB2YXIgbGVucyA9IGdldExlbnMoYjY0KVxuICB2YXIgdmFsaWRMZW4gPSBsZW5zWzBdXG4gIHZhciBwbGFjZUhvbGRlcnNMZW4gPSBsZW5zWzFdXG5cbiAgdmFyIGFyciA9IG5ldyBBcnIoX2J5dGVMZW5ndGgoYjY0LCB2YWxpZExlbiwgcGxhY2VIb2xkZXJzTGVuKSlcblxuICB2YXIgY3VyQnl0ZSA9IDBcblxuICAvLyBpZiB0aGVyZSBhcmUgcGxhY2Vob2xkZXJzLCBvbmx5IGdldCB1cCB0byB0aGUgbGFzdCBjb21wbGV0ZSA0IGNoYXJzXG4gIHZhciBsZW4gPSBwbGFjZUhvbGRlcnNMZW4gPiAwXG4gICAgPyB2YWxpZExlbiAtIDRcbiAgICA6IHZhbGlkTGVuXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkgKz0gNCkge1xuICAgIHRtcCA9XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkpXSA8PCAxOCkgfFxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMSldIDw8IDEyKSB8XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAyKV0gPDwgNikgfFxuICAgICAgcmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAzKV1cbiAgICBhcnJbY3VyQnl0ZSsrXSA9ICh0bXAgPj4gMTYpICYgMHhGRlxuICAgIGFycltjdXJCeXRlKytdID0gKHRtcCA+PiA4KSAmIDB4RkZcbiAgICBhcnJbY3VyQnl0ZSsrXSA9IHRtcCAmIDB4RkZcbiAgfVxuXG4gIGlmIChwbGFjZUhvbGRlcnNMZW4gPT09IDIpIHtcbiAgICB0bXAgPVxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpKV0gPDwgMikgfFxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMSldID4+IDQpXG4gICAgYXJyW2N1ckJ5dGUrK10gPSB0bXAgJiAweEZGXG4gIH1cblxuICBpZiAocGxhY2VIb2xkZXJzTGVuID09PSAxKSB7XG4gICAgdG1wID1cbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSldIDw8IDEwKSB8XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAxKV0gPDwgNCkgfFxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMildID4+IDIpXG4gICAgYXJyW2N1ckJ5dGUrK10gPSAodG1wID4+IDgpICYgMHhGRlxuICAgIGFycltjdXJCeXRlKytdID0gdG1wICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIGFyclxufVxuXG5mdW5jdGlvbiB0cmlwbGV0VG9CYXNlNjQgKG51bSkge1xuICByZXR1cm4gbG9va3VwW251bSA+PiAxOCAmIDB4M0ZdICtcbiAgICBsb29rdXBbbnVtID4+IDEyICYgMHgzRl0gK1xuICAgIGxvb2t1cFtudW0gPj4gNiAmIDB4M0ZdICtcbiAgICBsb29rdXBbbnVtICYgMHgzRl1cbn1cblxuZnVuY3Rpb24gZW5jb2RlQ2h1bmsgKHVpbnQ4LCBzdGFydCwgZW5kKSB7XG4gIHZhciB0bXBcbiAgdmFyIG91dHB1dCA9IFtdXG4gIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgaSArPSAzKSB7XG4gICAgdG1wID1cbiAgICAgICgodWludDhbaV0gPDwgMTYpICYgMHhGRjAwMDApICtcbiAgICAgICgodWludDhbaSArIDFdIDw8IDgpICYgMHhGRjAwKSArXG4gICAgICAodWludDhbaSArIDJdICYgMHhGRilcbiAgICBvdXRwdXQucHVzaCh0cmlwbGV0VG9CYXNlNjQodG1wKSlcbiAgfVxuICByZXR1cm4gb3V0cHV0LmpvaW4oJycpXG59XG5cbmZ1bmN0aW9uIGZyb21CeXRlQXJyYXkgKHVpbnQ4KSB7XG4gIHZhciB0bXBcbiAgdmFyIGxlbiA9IHVpbnQ4Lmxlbmd0aFxuICB2YXIgZXh0cmFCeXRlcyA9IGxlbiAlIDMgLy8gaWYgd2UgaGF2ZSAxIGJ5dGUgbGVmdCwgcGFkIDIgYnl0ZXNcbiAgdmFyIHBhcnRzID0gW11cbiAgdmFyIG1heENodW5rTGVuZ3RoID0gMTYzODMgLy8gbXVzdCBiZSBtdWx0aXBsZSBvZiAzXG5cbiAgLy8gZ28gdGhyb3VnaCB0aGUgYXJyYXkgZXZlcnkgdGhyZWUgYnl0ZXMsIHdlJ2xsIGRlYWwgd2l0aCB0cmFpbGluZyBzdHVmZiBsYXRlclxuICBmb3IgKHZhciBpID0gMCwgbGVuMiA9IGxlbiAtIGV4dHJhQnl0ZXM7IGkgPCBsZW4yOyBpICs9IG1heENodW5rTGVuZ3RoKSB7XG4gICAgcGFydHMucHVzaChlbmNvZGVDaHVuayhcbiAgICAgIHVpbnQ4LCBpLCAoaSArIG1heENodW5rTGVuZ3RoKSA+IGxlbjIgPyBsZW4yIDogKGkgKyBtYXhDaHVua0xlbmd0aClcbiAgICApKVxuICB9XG5cbiAgLy8gcGFkIHRoZSBlbmQgd2l0aCB6ZXJvcywgYnV0IG1ha2Ugc3VyZSB0byBub3QgZm9yZ2V0IHRoZSBleHRyYSBieXRlc1xuICBpZiAoZXh0cmFCeXRlcyA9PT0gMSkge1xuICAgIHRtcCA9IHVpbnQ4W2xlbiAtIDFdXG4gICAgcGFydHMucHVzaChcbiAgICAgIGxvb2t1cFt0bXAgPj4gMl0gK1xuICAgICAgbG9va3VwWyh0bXAgPDwgNCkgJiAweDNGXSArXG4gICAgICAnPT0nXG4gICAgKVxuICB9IGVsc2UgaWYgKGV4dHJhQnl0ZXMgPT09IDIpIHtcbiAgICB0bXAgPSAodWludDhbbGVuIC0gMl0gPDwgOCkgKyB1aW50OFtsZW4gLSAxXVxuICAgIHBhcnRzLnB1c2goXG4gICAgICBsb29rdXBbdG1wID4+IDEwXSArXG4gICAgICBsb29rdXBbKHRtcCA+PiA0KSAmIDB4M0ZdICtcbiAgICAgIGxvb2t1cFsodG1wIDw8IDIpICYgMHgzRl0gK1xuICAgICAgJz0nXG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIHBhcnRzLmpvaW4oJycpXG59XG4iLCJyZXF1aXJlKCcuLi9tb2R1bGVzL2VzNi5vYmplY3QudG8tc3RyaW5nJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzNi5zdHJpbmcuaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvd2ViLmRvbS5pdGVyYWJsZScpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lczYucHJvbWlzZScpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi9tb2R1bGVzL19jb3JlJykuUHJvbWlzZTtcbiIsInJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXM2LmFycmF5LmZpbmQnKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9fY29yZScpLkFycmF5LmZpbmQ7XG4iLCJyZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzNi5hcnJheS5pcy1hcnJheScpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9tb2R1bGVzL19jb3JlJykuQXJyYXkuaXNBcnJheTtcbiIsInJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXM2LmFycmF5LnNvbWUnKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9fY29yZScpLkFycmF5LnNvbWU7XG4iLCIvLyBmb3IgYSBsZWdhY3kgY29kZSBhbmQgZnV0dXJlIGZpeGVzXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIEZ1bmN0aW9uLmNhbGwuYXBwbHkoQXJyYXkucHJvdG90eXBlLnNwbGljZSwgYXJndW1lbnRzKTtcbn07XG4iLCJyZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzNi5mdW5jdGlvbi5iaW5kJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL21vZHVsZXMvX2NvcmUnKS5GdW5jdGlvbi5iaW5kO1xuIiwicmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lczYub2JqZWN0LmFzc2lnbicpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9tb2R1bGVzL19jb3JlJykuT2JqZWN0LmFzc2lnbjtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmICh0eXBlb2YgaXQgIT0gJ2Z1bmN0aW9uJykgdGhyb3cgVHlwZUVycm9yKGl0ICsgJyBpcyBub3QgYSBmdW5jdGlvbiEnKTtcbiAgcmV0dXJuIGl0O1xufTtcbiIsIi8vIDIyLjEuMy4zMSBBcnJheS5wcm90b3R5cGVbQEB1bnNjb3BhYmxlc11cbnZhciBVTlNDT1BBQkxFUyA9IHJlcXVpcmUoJy4vX3drcycpKCd1bnNjb3BhYmxlcycpO1xudmFyIEFycmF5UHJvdG8gPSBBcnJheS5wcm90b3R5cGU7XG5pZiAoQXJyYXlQcm90b1tVTlNDT1BBQkxFU10gPT0gdW5kZWZpbmVkKSByZXF1aXJlKCcuL19oaWRlJykoQXJyYXlQcm90bywgVU5TQ09QQUJMRVMsIHt9KTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICBBcnJheVByb3RvW1VOU0NPUEFCTEVTXVtrZXldID0gdHJ1ZTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgQ29uc3RydWN0b3IsIG5hbWUsIGZvcmJpZGRlbkZpZWxkKSB7XG4gIGlmICghKGl0IGluc3RhbmNlb2YgQ29uc3RydWN0b3IpIHx8IChmb3JiaWRkZW5GaWVsZCAhPT0gdW5kZWZpbmVkICYmIGZvcmJpZGRlbkZpZWxkIGluIGl0KSkge1xuICAgIHRocm93IFR5cGVFcnJvcihuYW1lICsgJzogaW5jb3JyZWN0IGludm9jYXRpb24hJyk7XG4gIH0gcmV0dXJuIGl0O1xufTtcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKCFpc09iamVjdChpdCkpIHRocm93IFR5cGVFcnJvcihpdCArICcgaXMgbm90IGFuIG9iamVjdCEnKTtcbiAgcmV0dXJuIGl0O1xufTtcbiIsIi8vIGZhbHNlIC0+IEFycmF5I2luZGV4T2Zcbi8vIHRydWUgIC0+IEFycmF5I2luY2x1ZGVzXG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi9fdG8tYWJzb2x1dGUtaW5kZXgnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKElTX0lOQ0xVREVTKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIGVsLCBmcm9tSW5kZXgpIHtcbiAgICB2YXIgTyA9IHRvSU9iamVjdCgkdGhpcyk7XG4gICAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgICB2YXIgaW5kZXggPSB0b0Fic29sdXRlSW5kZXgoZnJvbUluZGV4LCBsZW5ndGgpO1xuICAgIHZhciB2YWx1ZTtcbiAgICAvLyBBcnJheSNpbmNsdWRlcyB1c2VzIFNhbWVWYWx1ZVplcm8gZXF1YWxpdHkgYWxnb3JpdGhtXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgIGlmIChJU19JTkNMVURFUyAmJiBlbCAhPSBlbCkgd2hpbGUgKGxlbmd0aCA+IGluZGV4KSB7XG4gICAgICB2YWx1ZSA9IE9baW5kZXgrK107XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICBpZiAodmFsdWUgIT0gdmFsdWUpIHJldHVybiB0cnVlO1xuICAgIC8vIEFycmF5I2luZGV4T2YgaWdub3JlcyBob2xlcywgQXJyYXkjaW5jbHVkZXMgLSBub3RcbiAgICB9IGVsc2UgZm9yICg7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIGlmIChJU19JTkNMVURFUyB8fCBpbmRleCBpbiBPKSB7XG4gICAgICBpZiAoT1tpbmRleF0gPT09IGVsKSByZXR1cm4gSVNfSU5DTFVERVMgfHwgaW5kZXggfHwgMDtcbiAgICB9IHJldHVybiAhSVNfSU5DTFVERVMgJiYgLTE7XG4gIH07XG59O1xuIiwiLy8gMCAtPiBBcnJheSNmb3JFYWNoXG4vLyAxIC0+IEFycmF5I21hcFxuLy8gMiAtPiBBcnJheSNmaWx0ZXJcbi8vIDMgLT4gQXJyYXkjc29tZVxuLy8gNCAtPiBBcnJheSNldmVyeVxuLy8gNSAtPiBBcnJheSNmaW5kXG4vLyA2IC0+IEFycmF5I2ZpbmRJbmRleFxudmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIElPYmplY3QgPSByZXF1aXJlKCcuL19pb2JqZWN0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGFzYyA9IHJlcXVpcmUoJy4vX2FycmF5LXNwZWNpZXMtY3JlYXRlJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChUWVBFLCAkY3JlYXRlKSB7XG4gIHZhciBJU19NQVAgPSBUWVBFID09IDE7XG4gIHZhciBJU19GSUxURVIgPSBUWVBFID09IDI7XG4gIHZhciBJU19TT01FID0gVFlQRSA9PSAzO1xuICB2YXIgSVNfRVZFUlkgPSBUWVBFID09IDQ7XG4gIHZhciBJU19GSU5EX0lOREVYID0gVFlQRSA9PSA2O1xuICB2YXIgTk9fSE9MRVMgPSBUWVBFID09IDUgfHwgSVNfRklORF9JTkRFWDtcbiAgdmFyIGNyZWF0ZSA9ICRjcmVhdGUgfHwgYXNjO1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBjYWxsYmFja2ZuLCB0aGF0KSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCgkdGhpcyk7XG4gICAgdmFyIHNlbGYgPSBJT2JqZWN0KE8pO1xuICAgIHZhciBmID0gY3R4KGNhbGxiYWNrZm4sIHRoYXQsIDMpO1xuICAgIHZhciBsZW5ndGggPSB0b0xlbmd0aChzZWxmLmxlbmd0aCk7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgcmVzdWx0ID0gSVNfTUFQID8gY3JlYXRlKCR0aGlzLCBsZW5ndGgpIDogSVNfRklMVEVSID8gY3JlYXRlKCR0aGlzLCAwKSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgdmFsLCByZXM7XG4gICAgZm9yICg7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIGlmIChOT19IT0xFUyB8fCBpbmRleCBpbiBzZWxmKSB7XG4gICAgICB2YWwgPSBzZWxmW2luZGV4XTtcbiAgICAgIHJlcyA9IGYodmFsLCBpbmRleCwgTyk7XG4gICAgICBpZiAoVFlQRSkge1xuICAgICAgICBpZiAoSVNfTUFQKSByZXN1bHRbaW5kZXhdID0gcmVzOyAgIC8vIG1hcFxuICAgICAgICBlbHNlIGlmIChyZXMpIHN3aXRjaCAoVFlQRSkge1xuICAgICAgICAgIGNhc2UgMzogcmV0dXJuIHRydWU7ICAgICAgICAgICAgIC8vIHNvbWVcbiAgICAgICAgICBjYXNlIDU6IHJldHVybiB2YWw7ICAgICAgICAgICAgICAvLyBmaW5kXG4gICAgICAgICAgY2FzZSA2OiByZXR1cm4gaW5kZXg7ICAgICAgICAgICAgLy8gZmluZEluZGV4XG4gICAgICAgICAgY2FzZSAyOiByZXN1bHQucHVzaCh2YWwpOyAgICAgICAgLy8gZmlsdGVyXG4gICAgICAgIH0gZWxzZSBpZiAoSVNfRVZFUlkpIHJldHVybiBmYWxzZTsgLy8gZXZlcnlcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIElTX0ZJTkRfSU5ERVggPyAtMSA6IElTX1NPTUUgfHwgSVNfRVZFUlkgPyBJU19FVkVSWSA6IHJlc3VsdDtcbiAgfTtcbn07XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi9faXMtYXJyYXknKTtcbnZhciBTUEVDSUVTID0gcmVxdWlyZSgnLi9fd2tzJykoJ3NwZWNpZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob3JpZ2luYWwpIHtcbiAgdmFyIEM7XG4gIGlmIChpc0FycmF5KG9yaWdpbmFsKSkge1xuICAgIEMgPSBvcmlnaW5hbC5jb25zdHJ1Y3RvcjtcbiAgICAvLyBjcm9zcy1yZWFsbSBmYWxsYmFja1xuICAgIGlmICh0eXBlb2YgQyA9PSAnZnVuY3Rpb24nICYmIChDID09PSBBcnJheSB8fCBpc0FycmF5KEMucHJvdG90eXBlKSkpIEMgPSB1bmRlZmluZWQ7XG4gICAgaWYgKGlzT2JqZWN0KEMpKSB7XG4gICAgICBDID0gQ1tTUEVDSUVTXTtcbiAgICAgIGlmIChDID09PSBudWxsKSBDID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfSByZXR1cm4gQyA9PT0gdW5kZWZpbmVkID8gQXJyYXkgOiBDO1xufTtcbiIsIi8vIDkuNC4yLjMgQXJyYXlTcGVjaWVzQ3JlYXRlKG9yaWdpbmFsQXJyYXksIGxlbmd0aClcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuL19hcnJheS1zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9yaWdpbmFsLCBsZW5ndGgpIHtcbiAgcmV0dXJuIG5ldyAoc3BlY2llc0NvbnN0cnVjdG9yKG9yaWdpbmFsKSkobGVuZ3RoKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgaW52b2tlID0gcmVxdWlyZSgnLi9faW52b2tlJyk7XG52YXIgYXJyYXlTbGljZSA9IFtdLnNsaWNlO1xudmFyIGZhY3RvcmllcyA9IHt9O1xuXG52YXIgY29uc3RydWN0ID0gZnVuY3Rpb24gKEYsIGxlbiwgYXJncykge1xuICBpZiAoIShsZW4gaW4gZmFjdG9yaWVzKSkge1xuICAgIGZvciAodmFyIG4gPSBbXSwgaSA9IDA7IGkgPCBsZW47IGkrKykgbltpXSA9ICdhWycgKyBpICsgJ10nO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXctZnVuY1xuICAgIGZhY3Rvcmllc1tsZW5dID0gRnVuY3Rpb24oJ0YsYScsICdyZXR1cm4gbmV3IEYoJyArIG4uam9pbignLCcpICsgJyknKTtcbiAgfSByZXR1cm4gZmFjdG9yaWVzW2xlbl0oRiwgYXJncyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEZ1bmN0aW9uLmJpbmQgfHwgZnVuY3Rpb24gYmluZCh0aGF0IC8qICwgLi4uYXJncyAqLykge1xuICB2YXIgZm4gPSBhRnVuY3Rpb24odGhpcyk7XG4gIHZhciBwYXJ0QXJncyA9IGFycmF5U2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICB2YXIgYm91bmQgPSBmdW5jdGlvbiAoLyogYXJncy4uLiAqLykge1xuICAgIHZhciBhcmdzID0gcGFydEFyZ3MuY29uY2F0KGFycmF5U2xpY2UuY2FsbChhcmd1bWVudHMpKTtcbiAgICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIGJvdW5kID8gY29uc3RydWN0KGZuLCBhcmdzLmxlbmd0aCwgYXJncykgOiBpbnZva2UoZm4sIGFyZ3MsIHRoYXQpO1xuICB9O1xuICBpZiAoaXNPYmplY3QoZm4ucHJvdG90eXBlKSkgYm91bmQucHJvdG90eXBlID0gZm4ucHJvdG90eXBlO1xuICByZXR1cm4gYm91bmQ7XG59O1xuIiwiLy8gZ2V0dGluZyB0YWcgZnJvbSAxOS4xLjMuNiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nKClcbnZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcbnZhciBUQUcgPSByZXF1aXJlKCcuL193a3MnKSgndG9TdHJpbmdUYWcnKTtcbi8vIEVTMyB3cm9uZyBoZXJlXG52YXIgQVJHID0gY29mKGZ1bmN0aW9uICgpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKSA9PSAnQXJndW1lbnRzJztcblxuLy8gZmFsbGJhY2sgZm9yIElFMTEgU2NyaXB0IEFjY2VzcyBEZW5pZWQgZXJyb3JcbnZhciB0cnlHZXQgPSBmdW5jdGlvbiAoaXQsIGtleSkge1xuICB0cnkge1xuICAgIHJldHVybiBpdFtrZXldO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBPLCBULCBCO1xuICByZXR1cm4gaXQgPT09IHVuZGVmaW5lZCA/ICdVbmRlZmluZWQnIDogaXQgPT09IG51bGwgPyAnTnVsbCdcbiAgICAvLyBAQHRvU3RyaW5nVGFnIGNhc2VcbiAgICA6IHR5cGVvZiAoVCA9IHRyeUdldChPID0gT2JqZWN0KGl0KSwgVEFHKSkgPT0gJ3N0cmluZycgPyBUXG4gICAgLy8gYnVpbHRpblRhZyBjYXNlXG4gICAgOiBBUkcgPyBjb2YoTylcbiAgICAvLyBFUzMgYXJndW1lbnRzIGZhbGxiYWNrXG4gICAgOiAoQiA9IGNvZihPKSkgPT0gJ09iamVjdCcgJiYgdHlwZW9mIE8uY2FsbGVlID09ICdmdW5jdGlvbicgPyAnQXJndW1lbnRzJyA6IEI7XG59O1xuIiwidmFyIHRvU3RyaW5nID0ge30udG9TdHJpbmc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKGl0KS5zbGljZSg4LCAtMSk7XG59O1xuIiwidmFyIGNvcmUgPSBtb2R1bGUuZXhwb3J0cyA9IHsgdmVyc2lvbjogJzIuNi40JyB9O1xuaWYgKHR5cGVvZiBfX2UgPT0gJ251bWJlcicpIF9fZSA9IGNvcmU7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcbiIsIi8vIG9wdGlvbmFsIC8gc2ltcGxlIGNvbnRleHQgYmluZGluZ1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGZuLCB0aGF0LCBsZW5ndGgpIHtcbiAgYUZ1bmN0aW9uKGZuKTtcbiAgaWYgKHRoYXQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGZuO1xuICBzd2l0Y2ggKGxlbmd0aCkge1xuICAgIGNhc2UgMTogcmV0dXJuIGZ1bmN0aW9uIChhKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhKTtcbiAgICB9O1xuICAgIGNhc2UgMjogcmV0dXJuIGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhLCBiKTtcbiAgICB9O1xuICAgIGNhc2UgMzogcmV0dXJuIGZ1bmN0aW9uIChhLCBiLCBjKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhLCBiLCBjKTtcbiAgICB9O1xuICB9XG4gIHJldHVybiBmdW5jdGlvbiAoLyogLi4uYXJncyAqLykge1xuICAgIHJldHVybiBmbi5hcHBseSh0aGF0LCBhcmd1bWVudHMpO1xuICB9O1xufTtcbiIsIi8vIDcuMi4xIFJlcXVpcmVPYmplY3RDb2VyY2libGUoYXJndW1lbnQpXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoaXQgPT0gdW5kZWZpbmVkKSB0aHJvdyBUeXBlRXJyb3IoXCJDYW4ndCBjYWxsIG1ldGhvZCBvbiAgXCIgKyBpdCk7XG4gIHJldHVybiBpdDtcbn07XG4iLCIvLyBUaGFuaydzIElFOCBmb3IgaGlzIGZ1bm55IGRlZmluZVByb3BlcnR5XG5tb2R1bGUuZXhwb3J0cyA9ICFyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwgJ2EnLCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfSB9KS5hICE9IDc7XG59KTtcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGRvY3VtZW50ID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykuZG9jdW1lbnQ7XG4vLyB0eXBlb2YgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCBpcyAnb2JqZWN0JyBpbiBvbGQgSUVcbnZhciBpcyA9IGlzT2JqZWN0KGRvY3VtZW50KSAmJiBpc09iamVjdChkb2N1bWVudC5jcmVhdGVFbGVtZW50KTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpcyA/IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoaXQpIDoge307XG59O1xuIiwiLy8gSUUgOC0gZG9uJ3QgZW51bSBidWcga2V5c1xubW9kdWxlLmV4cG9ydHMgPSAoXG4gICdjb25zdHJ1Y3RvcixoYXNPd25Qcm9wZXJ0eSxpc1Byb3RvdHlwZU9mLHByb3BlcnR5SXNFbnVtZXJhYmxlLHRvTG9jYWxlU3RyaW5nLHRvU3RyaW5nLHZhbHVlT2YnXG4pLnNwbGl0KCcsJyk7XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgY29yZSA9IHJlcXVpcmUoJy4vX2NvcmUnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUnKTtcbnZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbnZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcblxudmFyICRleHBvcnQgPSBmdW5jdGlvbiAodHlwZSwgbmFtZSwgc291cmNlKSB7XG4gIHZhciBJU19GT1JDRUQgPSB0eXBlICYgJGV4cG9ydC5GO1xuICB2YXIgSVNfR0xPQkFMID0gdHlwZSAmICRleHBvcnQuRztcbiAgdmFyIElTX1NUQVRJQyA9IHR5cGUgJiAkZXhwb3J0LlM7XG4gIHZhciBJU19QUk9UTyA9IHR5cGUgJiAkZXhwb3J0LlA7XG4gIHZhciBJU19CSU5EID0gdHlwZSAmICRleHBvcnQuQjtcbiAgdmFyIHRhcmdldCA9IElTX0dMT0JBTCA/IGdsb2JhbCA6IElTX1NUQVRJQyA/IGdsb2JhbFtuYW1lXSB8fCAoZ2xvYmFsW25hbWVdID0ge30pIDogKGdsb2JhbFtuYW1lXSB8fCB7fSlbUFJPVE9UWVBFXTtcbiAgdmFyIGV4cG9ydHMgPSBJU19HTE9CQUwgPyBjb3JlIDogY29yZVtuYW1lXSB8fCAoY29yZVtuYW1lXSA9IHt9KTtcbiAgdmFyIGV4cFByb3RvID0gZXhwb3J0c1tQUk9UT1RZUEVdIHx8IChleHBvcnRzW1BST1RPVFlQRV0gPSB7fSk7XG4gIHZhciBrZXksIG93biwgb3V0LCBleHA7XG4gIGlmIChJU19HTE9CQUwpIHNvdXJjZSA9IG5hbWU7XG4gIGZvciAoa2V5IGluIHNvdXJjZSkge1xuICAgIC8vIGNvbnRhaW5zIGluIG5hdGl2ZVxuICAgIG93biA9ICFJU19GT1JDRUQgJiYgdGFyZ2V0ICYmIHRhcmdldFtrZXldICE9PSB1bmRlZmluZWQ7XG4gICAgLy8gZXhwb3J0IG5hdGl2ZSBvciBwYXNzZWRcbiAgICBvdXQgPSAob3duID8gdGFyZ2V0IDogc291cmNlKVtrZXldO1xuICAgIC8vIGJpbmQgdGltZXJzIHRvIGdsb2JhbCBmb3IgY2FsbCBmcm9tIGV4cG9ydCBjb250ZXh0XG4gICAgZXhwID0gSVNfQklORCAmJiBvd24gPyBjdHgob3V0LCBnbG9iYWwpIDogSVNfUFJPVE8gJiYgdHlwZW9mIG91dCA9PSAnZnVuY3Rpb24nID8gY3R4KEZ1bmN0aW9uLmNhbGwsIG91dCkgOiBvdXQ7XG4gICAgLy8gZXh0ZW5kIGdsb2JhbFxuICAgIGlmICh0YXJnZXQpIHJlZGVmaW5lKHRhcmdldCwga2V5LCBvdXQsIHR5cGUgJiAkZXhwb3J0LlUpO1xuICAgIC8vIGV4cG9ydFxuICAgIGlmIChleHBvcnRzW2tleV0gIT0gb3V0KSBoaWRlKGV4cG9ydHMsIGtleSwgZXhwKTtcbiAgICBpZiAoSVNfUFJPVE8gJiYgZXhwUHJvdG9ba2V5XSAhPSBvdXQpIGV4cFByb3RvW2tleV0gPSBvdXQ7XG4gIH1cbn07XG5nbG9iYWwuY29yZSA9IGNvcmU7XG4vLyB0eXBlIGJpdG1hcFxuJGV4cG9ydC5GID0gMTsgICAvLyBmb3JjZWRcbiRleHBvcnQuRyA9IDI7ICAgLy8gZ2xvYmFsXG4kZXhwb3J0LlMgPSA0OyAgIC8vIHN0YXRpY1xuJGV4cG9ydC5QID0gODsgICAvLyBwcm90b1xuJGV4cG9ydC5CID0gMTY7ICAvLyBiaW5kXG4kZXhwb3J0LlcgPSAzMjsgIC8vIHdyYXBcbiRleHBvcnQuVSA9IDY0OyAgLy8gc2FmZVxuJGV4cG9ydC5SID0gMTI4OyAvLyByZWFsIHByb3RvIG1ldGhvZCBmb3IgYGxpYnJhcnlgXG5tb2R1bGUuZXhwb3J0cyA9ICRleHBvcnQ7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICEhZXhlYygpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn07XG4iLCJ2YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4vX2l0ZXItY2FsbCcpO1xudmFyIGlzQXJyYXlJdGVyID0gcmVxdWlyZSgnLi9faXMtYXJyYXktaXRlcicpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBnZXRJdGVyRm4gPSByZXF1aXJlKCcuL2NvcmUuZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xudmFyIEJSRUFLID0ge307XG52YXIgUkVUVVJOID0ge307XG52YXIgZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZXJhYmxlLCBlbnRyaWVzLCBmbiwgdGhhdCwgSVRFUkFUT1IpIHtcbiAgdmFyIGl0ZXJGbiA9IElURVJBVE9SID8gZnVuY3Rpb24gKCkgeyByZXR1cm4gaXRlcmFibGU7IH0gOiBnZXRJdGVyRm4oaXRlcmFibGUpO1xuICB2YXIgZiA9IGN0eChmbiwgdGhhdCwgZW50cmllcyA/IDIgOiAxKTtcbiAgdmFyIGluZGV4ID0gMDtcbiAgdmFyIGxlbmd0aCwgc3RlcCwgaXRlcmF0b3IsIHJlc3VsdDtcbiAgaWYgKHR5cGVvZiBpdGVyRm4gIT0gJ2Z1bmN0aW9uJykgdGhyb3cgVHlwZUVycm9yKGl0ZXJhYmxlICsgJyBpcyBub3QgaXRlcmFibGUhJyk7XG4gIC8vIGZhc3QgY2FzZSBmb3IgYXJyYXlzIHdpdGggZGVmYXVsdCBpdGVyYXRvclxuICBpZiAoaXNBcnJheUl0ZXIoaXRlckZuKSkgZm9yIChsZW5ndGggPSB0b0xlbmd0aChpdGVyYWJsZS5sZW5ndGgpOyBsZW5ndGggPiBpbmRleDsgaW5kZXgrKykge1xuICAgIHJlc3VsdCA9IGVudHJpZXMgPyBmKGFuT2JqZWN0KHN0ZXAgPSBpdGVyYWJsZVtpbmRleF0pWzBdLCBzdGVwWzFdKSA6IGYoaXRlcmFibGVbaW5kZXhdKTtcbiAgICBpZiAocmVzdWx0ID09PSBCUkVBSyB8fCByZXN1bHQgPT09IFJFVFVSTikgcmV0dXJuIHJlc3VsdDtcbiAgfSBlbHNlIGZvciAoaXRlcmF0b3IgPSBpdGVyRm4uY2FsbChpdGVyYWJsZSk7ICEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZTspIHtcbiAgICByZXN1bHQgPSBjYWxsKGl0ZXJhdG9yLCBmLCBzdGVwLnZhbHVlLCBlbnRyaWVzKTtcbiAgICBpZiAocmVzdWx0ID09PSBCUkVBSyB8fCByZXN1bHQgPT09IFJFVFVSTikgcmV0dXJuIHJlc3VsdDtcbiAgfVxufTtcbmV4cG9ydHMuQlJFQUsgPSBCUkVBSztcbmV4cG9ydHMuUkVUVVJOID0gUkVUVVJOO1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19zaGFyZWQnKSgnbmF0aXZlLWZ1bmN0aW9uLXRvLXN0cmluZycsIEZ1bmN0aW9uLnRvU3RyaW5nKTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy84NiNpc3N1ZWNvbW1lbnQtMTE1NzU5MDI4XG52YXIgZ2xvYmFsID0gbW9kdWxlLmV4cG9ydHMgPSB0eXBlb2Ygd2luZG93ICE9ICd1bmRlZmluZWQnICYmIHdpbmRvdy5NYXRoID09IE1hdGhcbiAgPyB3aW5kb3cgOiB0eXBlb2Ygc2VsZiAhPSAndW5kZWZpbmVkJyAmJiBzZWxmLk1hdGggPT0gTWF0aCA/IHNlbGZcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jXG4gIDogRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcbmlmICh0eXBlb2YgX19nID09ICdudW1iZXInKSBfX2cgPSBnbG9iYWw7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcbiIsInZhciBoYXNPd25Qcm9wZXJ0eSA9IHt9Lmhhc093blByb3BlcnR5O1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIGtleSkge1xuICByZXR1cm4gaGFzT3duUHJvcGVydHkuY2FsbChpdCwga2V5KTtcbn07XG4iLCJ2YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciBjcmVhdGVEZXNjID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpID8gZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICByZXR1cm4gZFAuZihvYmplY3QsIGtleSwgY3JlYXRlRGVzYygxLCB2YWx1ZSkpO1xufSA6IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgcmV0dXJuIG9iamVjdDtcbn07XG4iLCJ2YXIgZG9jdW1lbnQgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5kb2N1bWVudDtcbm1vZHVsZS5leHBvcnRzID0gZG9jdW1lbnQgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuIiwibW9kdWxlLmV4cG9ydHMgPSAhcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSAmJiAhcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkocmVxdWlyZSgnLi9fZG9tLWNyZWF0ZScpKCdkaXYnKSwgJ2EnLCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfSB9KS5hICE9IDc7XG59KTtcbiIsIi8vIGZhc3QgYXBwbHksIGh0dHA6Ly9qc3BlcmYubG5raXQuY29tL2Zhc3QtYXBwbHkvNVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZm4sIGFyZ3MsIHRoYXQpIHtcbiAgdmFyIHVuID0gdGhhdCA9PT0gdW5kZWZpbmVkO1xuICBzd2l0Y2ggKGFyZ3MubGVuZ3RoKSB7XG4gICAgY2FzZSAwOiByZXR1cm4gdW4gPyBmbigpXG4gICAgICAgICAgICAgICAgICAgICAgOiBmbi5jYWxsKHRoYXQpO1xuICAgIGNhc2UgMTogcmV0dXJuIHVuID8gZm4oYXJnc1swXSlcbiAgICAgICAgICAgICAgICAgICAgICA6IGZuLmNhbGwodGhhdCwgYXJnc1swXSk7XG4gICAgY2FzZSAyOiByZXR1cm4gdW4gPyBmbihhcmdzWzBdLCBhcmdzWzFdKVxuICAgICAgICAgICAgICAgICAgICAgIDogZm4uY2FsbCh0aGF0LCBhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICBjYXNlIDM6IHJldHVybiB1biA/IGZuKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pXG4gICAgICAgICAgICAgICAgICAgICAgOiBmbi5jYWxsKHRoYXQsIGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pO1xuICAgIGNhc2UgNDogcmV0dXJuIHVuID8gZm4oYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSlcbiAgICAgICAgICAgICAgICAgICAgICA6IGZuLmNhbGwodGhhdCwgYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSk7XG4gIH0gcmV0dXJuIGZuLmFwcGx5KHRoYXQsIGFyZ3MpO1xufTtcbiIsIi8vIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgYW5kIG5vbi1lbnVtZXJhYmxlIG9sZCBWOCBzdHJpbmdzXG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdCgneicpLnByb3BlcnR5SXNFbnVtZXJhYmxlKDApID8gT2JqZWN0IDogZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBjb2YoaXQpID09ICdTdHJpbmcnID8gaXQuc3BsaXQoJycpIDogT2JqZWN0KGl0KTtcbn07XG4iLCIvLyBjaGVjayBvbiBkZWZhdWx0IEFycmF5IGl0ZXJhdG9yXG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJyk7XG52YXIgSVRFUkFUT1IgPSByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKTtcbnZhciBBcnJheVByb3RvID0gQXJyYXkucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgIT09IHVuZGVmaW5lZCAmJiAoSXRlcmF0b3JzLkFycmF5ID09PSBpdCB8fCBBcnJheVByb3RvW0lURVJBVE9SXSA9PT0gaXQpO1xufTtcbiIsIi8vIDcuMi4yIElzQXJyYXkoYXJndW1lbnQpXG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG5tb2R1bGUuZXhwb3J0cyA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gaXNBcnJheShhcmcpIHtcbiAgcmV0dXJuIGNvZihhcmcpID09ICdBcnJheSc7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PT0gJ29iamVjdCcgPyBpdCAhPT0gbnVsbCA6IHR5cGVvZiBpdCA9PT0gJ2Z1bmN0aW9uJztcbn07XG4iLCIvLyBjYWxsIHNvbWV0aGluZyBvbiBpdGVyYXRvciBzdGVwIHdpdGggc2FmZSBjbG9zaW5nIG9uIGVycm9yXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCBmbiwgdmFsdWUsIGVudHJpZXMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gZW50cmllcyA/IGZuKGFuT2JqZWN0KHZhbHVlKVswXSwgdmFsdWVbMV0pIDogZm4odmFsdWUpO1xuICAvLyA3LjQuNiBJdGVyYXRvckNsb3NlKGl0ZXJhdG9yLCBjb21wbGV0aW9uKVxuICB9IGNhdGNoIChlKSB7XG4gICAgdmFyIHJldCA9IGl0ZXJhdG9yWydyZXR1cm4nXTtcbiAgICBpZiAocmV0ICE9PSB1bmRlZmluZWQpIGFuT2JqZWN0KHJldC5jYWxsKGl0ZXJhdG9yKSk7XG4gICAgdGhyb3cgZTtcbiAgfVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuL19vYmplY3QtY3JlYXRlJyk7XG52YXIgZGVzY3JpcHRvciA9IHJlcXVpcmUoJy4vX3Byb3BlcnR5LWRlc2MnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgSXRlcmF0b3JQcm90b3R5cGUgPSB7fTtcblxuLy8gMjUuMS4yLjEuMSAlSXRlcmF0b3JQcm90b3R5cGUlW0BAaXRlcmF0b3JdKClcbnJlcXVpcmUoJy4vX2hpZGUnKShJdGVyYXRvclByb3RvdHlwZSwgcmVxdWlyZSgnLi9fd2tzJykoJ2l0ZXJhdG9yJyksIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgTkFNRSwgbmV4dCkge1xuICBDb25zdHJ1Y3Rvci5wcm90b3R5cGUgPSBjcmVhdGUoSXRlcmF0b3JQcm90b3R5cGUsIHsgbmV4dDogZGVzY3JpcHRvcigxLCBuZXh0KSB9KTtcbiAgc2V0VG9TdHJpbmdUYWcoQ29uc3RydWN0b3IsIE5BTUUgKyAnIEl0ZXJhdG9yJyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIExJQlJBUlkgPSByZXF1aXJlKCcuL19saWJyYXJ5Jyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpO1xudmFyICRpdGVyQ3JlYXRlID0gcmVxdWlyZSgnLi9faXRlci1jcmVhdGUnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgSVRFUkFUT1IgPSByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKTtcbnZhciBCVUdHWSA9ICEoW10ua2V5cyAmJiAnbmV4dCcgaW4gW10ua2V5cygpKTsgLy8gU2FmYXJpIGhhcyBidWdneSBpdGVyYXRvcnMgdy9vIGBuZXh0YFxudmFyIEZGX0lURVJBVE9SID0gJ0BAaXRlcmF0b3InO1xudmFyIEtFWVMgPSAna2V5cyc7XG52YXIgVkFMVUVTID0gJ3ZhbHVlcyc7XG5cbnZhciByZXR1cm5UaGlzID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQmFzZSwgTkFNRSwgQ29uc3RydWN0b3IsIG5leHQsIERFRkFVTFQsIElTX1NFVCwgRk9SQ0VEKSB7XG4gICRpdGVyQ3JlYXRlKENvbnN0cnVjdG9yLCBOQU1FLCBuZXh0KTtcbiAgdmFyIGdldE1ldGhvZCA9IGZ1bmN0aW9uIChraW5kKSB7XG4gICAgaWYgKCFCVUdHWSAmJiBraW5kIGluIHByb3RvKSByZXR1cm4gcHJvdG9ba2luZF07XG4gICAgc3dpdGNoIChraW5kKSB7XG4gICAgICBjYXNlIEtFWVM6IHJldHVybiBmdW5jdGlvbiBrZXlzKCkgeyByZXR1cm4gbmV3IENvbnN0cnVjdG9yKHRoaXMsIGtpbmQpOyB9O1xuICAgICAgY2FzZSBWQUxVRVM6IHJldHVybiBmdW5jdGlvbiB2YWx1ZXMoKSB7IHJldHVybiBuZXcgQ29uc3RydWN0b3IodGhpcywga2luZCk7IH07XG4gICAgfSByZXR1cm4gZnVuY3Rpb24gZW50cmllcygpIHsgcmV0dXJuIG5ldyBDb25zdHJ1Y3Rvcih0aGlzLCBraW5kKTsgfTtcbiAgfTtcbiAgdmFyIFRBRyA9IE5BTUUgKyAnIEl0ZXJhdG9yJztcbiAgdmFyIERFRl9WQUxVRVMgPSBERUZBVUxUID09IFZBTFVFUztcbiAgdmFyIFZBTFVFU19CVUcgPSBmYWxzZTtcbiAgdmFyIHByb3RvID0gQmFzZS5wcm90b3R5cGU7XG4gIHZhciAkbmF0aXZlID0gcHJvdG9bSVRFUkFUT1JdIHx8IHByb3RvW0ZGX0lURVJBVE9SXSB8fCBERUZBVUxUICYmIHByb3RvW0RFRkFVTFRdO1xuICB2YXIgJGRlZmF1bHQgPSAkbmF0aXZlIHx8IGdldE1ldGhvZChERUZBVUxUKTtcbiAgdmFyICRlbnRyaWVzID0gREVGQVVMVCA/ICFERUZfVkFMVUVTID8gJGRlZmF1bHQgOiBnZXRNZXRob2QoJ2VudHJpZXMnKSA6IHVuZGVmaW5lZDtcbiAgdmFyICRhbnlOYXRpdmUgPSBOQU1FID09ICdBcnJheScgPyBwcm90by5lbnRyaWVzIHx8ICRuYXRpdmUgOiAkbmF0aXZlO1xuICB2YXIgbWV0aG9kcywga2V5LCBJdGVyYXRvclByb3RvdHlwZTtcbiAgLy8gRml4IG5hdGl2ZVxuICBpZiAoJGFueU5hdGl2ZSkge1xuICAgIEl0ZXJhdG9yUHJvdG90eXBlID0gZ2V0UHJvdG90eXBlT2YoJGFueU5hdGl2ZS5jYWxsKG5ldyBCYXNlKCkpKTtcbiAgICBpZiAoSXRlcmF0b3JQcm90b3R5cGUgIT09IE9iamVjdC5wcm90b3R5cGUgJiYgSXRlcmF0b3JQcm90b3R5cGUubmV4dCkge1xuICAgICAgLy8gU2V0IEBAdG9TdHJpbmdUYWcgdG8gbmF0aXZlIGl0ZXJhdG9yc1xuICAgICAgc2V0VG9TdHJpbmdUYWcoSXRlcmF0b3JQcm90b3R5cGUsIFRBRywgdHJ1ZSk7XG4gICAgICAvLyBmaXggZm9yIHNvbWUgb2xkIGVuZ2luZXNcbiAgICAgIGlmICghTElCUkFSWSAmJiB0eXBlb2YgSXRlcmF0b3JQcm90b3R5cGVbSVRFUkFUT1JdICE9ICdmdW5jdGlvbicpIGhpZGUoSXRlcmF0b3JQcm90b3R5cGUsIElURVJBVE9SLCByZXR1cm5UaGlzKTtcbiAgICB9XG4gIH1cbiAgLy8gZml4IEFycmF5I3t2YWx1ZXMsIEBAaXRlcmF0b3J9Lm5hbWUgaW4gVjggLyBGRlxuICBpZiAoREVGX1ZBTFVFUyAmJiAkbmF0aXZlICYmICRuYXRpdmUubmFtZSAhPT0gVkFMVUVTKSB7XG4gICAgVkFMVUVTX0JVRyA9IHRydWU7XG4gICAgJGRlZmF1bHQgPSBmdW5jdGlvbiB2YWx1ZXMoKSB7IHJldHVybiAkbmF0aXZlLmNhbGwodGhpcyk7IH07XG4gIH1cbiAgLy8gRGVmaW5lIGl0ZXJhdG9yXG4gIGlmICgoIUxJQlJBUlkgfHwgRk9SQ0VEKSAmJiAoQlVHR1kgfHwgVkFMVUVTX0JVRyB8fCAhcHJvdG9bSVRFUkFUT1JdKSkge1xuICAgIGhpZGUocHJvdG8sIElURVJBVE9SLCAkZGVmYXVsdCk7XG4gIH1cbiAgLy8gUGx1ZyBmb3IgbGlicmFyeVxuICBJdGVyYXRvcnNbTkFNRV0gPSAkZGVmYXVsdDtcbiAgSXRlcmF0b3JzW1RBR10gPSByZXR1cm5UaGlzO1xuICBpZiAoREVGQVVMVCkge1xuICAgIG1ldGhvZHMgPSB7XG4gICAgICB2YWx1ZXM6IERFRl9WQUxVRVMgPyAkZGVmYXVsdCA6IGdldE1ldGhvZChWQUxVRVMpLFxuICAgICAga2V5czogSVNfU0VUID8gJGRlZmF1bHQgOiBnZXRNZXRob2QoS0VZUyksXG4gICAgICBlbnRyaWVzOiAkZW50cmllc1xuICAgIH07XG4gICAgaWYgKEZPUkNFRCkgZm9yIChrZXkgaW4gbWV0aG9kcykge1xuICAgICAgaWYgKCEoa2V5IGluIHByb3RvKSkgcmVkZWZpbmUocHJvdG8sIGtleSwgbWV0aG9kc1trZXldKTtcbiAgICB9IGVsc2UgJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoQlVHR1kgfHwgVkFMVUVTX0JVRyksIE5BTUUsIG1ldGhvZHMpO1xuICB9XG4gIHJldHVybiBtZXRob2RzO1xufTtcbiIsInZhciBJVEVSQVRPUiA9IHJlcXVpcmUoJy4vX3drcycpKCdpdGVyYXRvcicpO1xudmFyIFNBRkVfQ0xPU0lORyA9IGZhbHNlO1xuXG50cnkge1xuICB2YXIgcml0ZXIgPSBbN11bSVRFUkFUT1JdKCk7XG4gIHJpdGVyWydyZXR1cm4nXSA9IGZ1bmN0aW9uICgpIHsgU0FGRV9DTE9TSU5HID0gdHJ1ZTsgfTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXRocm93LWxpdGVyYWxcbiAgQXJyYXkuZnJvbShyaXRlciwgZnVuY3Rpb24gKCkgeyB0aHJvdyAyOyB9KTtcbn0gY2F0Y2ggKGUpIHsgLyogZW1wdHkgKi8gfVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjLCBza2lwQ2xvc2luZykge1xuICBpZiAoIXNraXBDbG9zaW5nICYmICFTQUZFX0NMT1NJTkcpIHJldHVybiBmYWxzZTtcbiAgdmFyIHNhZmUgPSBmYWxzZTtcbiAgdHJ5IHtcbiAgICB2YXIgYXJyID0gWzddO1xuICAgIHZhciBpdGVyID0gYXJyW0lURVJBVE9SXSgpO1xuICAgIGl0ZXIubmV4dCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHsgZG9uZTogc2FmZSA9IHRydWUgfTsgfTtcbiAgICBhcnJbSVRFUkFUT1JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gaXRlcjsgfTtcbiAgICBleGVjKGFycik7XG4gIH0gY2F0Y2ggKGUpIHsgLyogZW1wdHkgKi8gfVxuICByZXR1cm4gc2FmZTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChkb25lLCB2YWx1ZSkge1xuICByZXR1cm4geyB2YWx1ZTogdmFsdWUsIGRvbmU6ICEhZG9uZSB9O1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0ge307XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZhbHNlO1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIG1hY3JvdGFzayA9IHJlcXVpcmUoJy4vX3Rhc2snKS5zZXQ7XG52YXIgT2JzZXJ2ZXIgPSBnbG9iYWwuTXV0YXRpb25PYnNlcnZlciB8fCBnbG9iYWwuV2ViS2l0TXV0YXRpb25PYnNlcnZlcjtcbnZhciBwcm9jZXNzID0gZ2xvYmFsLnByb2Nlc3M7XG52YXIgUHJvbWlzZSA9IGdsb2JhbC5Qcm9taXNlO1xudmFyIGlzTm9kZSA9IHJlcXVpcmUoJy4vX2NvZicpKHByb2Nlc3MpID09ICdwcm9jZXNzJztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBoZWFkLCBsYXN0LCBub3RpZnk7XG5cbiAgdmFyIGZsdXNoID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBwYXJlbnQsIGZuO1xuICAgIGlmIChpc05vZGUgJiYgKHBhcmVudCA9IHByb2Nlc3MuZG9tYWluKSkgcGFyZW50LmV4aXQoKTtcbiAgICB3aGlsZSAoaGVhZCkge1xuICAgICAgZm4gPSBoZWFkLmZuO1xuICAgICAgaGVhZCA9IGhlYWQubmV4dDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGZuKCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlmIChoZWFkKSBub3RpZnkoKTtcbiAgICAgICAgZWxzZSBsYXN0ID0gdW5kZWZpbmVkO1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgIH0gbGFzdCA9IHVuZGVmaW5lZDtcbiAgICBpZiAocGFyZW50KSBwYXJlbnQuZW50ZXIoKTtcbiAgfTtcblxuICAvLyBOb2RlLmpzXG4gIGlmIChpc05vZGUpIHtcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGZsdXNoKTtcbiAgICB9O1xuICAvLyBicm93c2VycyB3aXRoIE11dGF0aW9uT2JzZXJ2ZXIsIGV4Y2VwdCBpT1MgU2FmYXJpIC0gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzMzOVxuICB9IGVsc2UgaWYgKE9ic2VydmVyICYmICEoZ2xvYmFsLm5hdmlnYXRvciAmJiBnbG9iYWwubmF2aWdhdG9yLnN0YW5kYWxvbmUpKSB7XG4gICAgdmFyIHRvZ2dsZSA9IHRydWU7XG4gICAgdmFyIG5vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnJyk7XG4gICAgbmV3IE9ic2VydmVyKGZsdXNoKS5vYnNlcnZlKG5vZGUsIHsgY2hhcmFjdGVyRGF0YTogdHJ1ZSB9KTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBub2RlLmRhdGEgPSB0b2dnbGUgPSAhdG9nZ2xlO1xuICAgIH07XG4gIC8vIGVudmlyb25tZW50cyB3aXRoIG1heWJlIG5vbi1jb21wbGV0ZWx5IGNvcnJlY3QsIGJ1dCBleGlzdGVudCBQcm9taXNlXG4gIH0gZWxzZSBpZiAoUHJvbWlzZSAmJiBQcm9taXNlLnJlc29sdmUpIHtcbiAgICAvLyBQcm9taXNlLnJlc29sdmUgd2l0aG91dCBhbiBhcmd1bWVudCB0aHJvd3MgYW4gZXJyb3IgaW4gTEcgV2ViT1MgMlxuICAgIHZhciBwcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgcHJvbWlzZS50aGVuKGZsdXNoKTtcbiAgICB9O1xuICAvLyBmb3Igb3RoZXIgZW52aXJvbm1lbnRzIC0gbWFjcm90YXNrIGJhc2VkIG9uOlxuICAvLyAtIHNldEltbWVkaWF0ZVxuICAvLyAtIE1lc3NhZ2VDaGFubmVsXG4gIC8vIC0gd2luZG93LnBvc3RNZXNzYWdcbiAgLy8gLSBvbnJlYWR5c3RhdGVjaGFuZ2VcbiAgLy8gLSBzZXRUaW1lb3V0XG4gIH0gZWxzZSB7XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgLy8gc3RyYW5nZSBJRSArIHdlYnBhY2sgZGV2IHNlcnZlciBidWcgLSB1c2UgLmNhbGwoZ2xvYmFsKVxuICAgICAgbWFjcm90YXNrLmNhbGwoZ2xvYmFsLCBmbHVzaCk7XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAoZm4pIHtcbiAgICB2YXIgdGFzayA9IHsgZm46IGZuLCBuZXh0OiB1bmRlZmluZWQgfTtcbiAgICBpZiAobGFzdCkgbGFzdC5uZXh0ID0gdGFzaztcbiAgICBpZiAoIWhlYWQpIHtcbiAgICAgIGhlYWQgPSB0YXNrO1xuICAgICAgbm90aWZ5KCk7XG4gICAgfSBsYXN0ID0gdGFzaztcbiAgfTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vLyAyNS40LjEuNSBOZXdQcm9taXNlQ2FwYWJpbGl0eShDKVxudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcblxuZnVuY3Rpb24gUHJvbWlzZUNhcGFiaWxpdHkoQykge1xuICB2YXIgcmVzb2x2ZSwgcmVqZWN0O1xuICB0aGlzLnByb21pc2UgPSBuZXcgQyhmdW5jdGlvbiAoJCRyZXNvbHZlLCAkJHJlamVjdCkge1xuICAgIGlmIChyZXNvbHZlICE9PSB1bmRlZmluZWQgfHwgcmVqZWN0ICE9PSB1bmRlZmluZWQpIHRocm93IFR5cGVFcnJvcignQmFkIFByb21pc2UgY29uc3RydWN0b3InKTtcbiAgICByZXNvbHZlID0gJCRyZXNvbHZlO1xuICAgIHJlamVjdCA9ICQkcmVqZWN0O1xuICB9KTtcbiAgdGhpcy5yZXNvbHZlID0gYUZ1bmN0aW9uKHJlc29sdmUpO1xuICB0aGlzLnJlamVjdCA9IGFGdW5jdGlvbihyZWplY3QpO1xufVxuXG5tb2R1bGUuZXhwb3J0cy5mID0gZnVuY3Rpb24gKEMpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlQ2FwYWJpbGl0eShDKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vLyAxOS4xLjIuMSBPYmplY3QuYXNzaWduKHRhcmdldCwgc291cmNlLCAuLi4pXG52YXIgZ2V0S2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG52YXIgZ09QUyA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BzJyk7XG52YXIgcElFID0gcmVxdWlyZSgnLi9fb2JqZWN0LXBpZScpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgSU9iamVjdCA9IHJlcXVpcmUoJy4vX2lvYmplY3QnKTtcbnZhciAkYXNzaWduID0gT2JqZWN0LmFzc2lnbjtcblxuLy8gc2hvdWxkIHdvcmsgd2l0aCBzeW1ib2xzIGFuZCBzaG91bGQgaGF2ZSBkZXRlcm1pbmlzdGljIHByb3BlcnR5IG9yZGVyIChWOCBidWcpXG5tb2R1bGUuZXhwb3J0cyA9ICEkYXNzaWduIHx8IHJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICB2YXIgQSA9IHt9O1xuICB2YXIgQiA9IHt9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgdmFyIFMgPSBTeW1ib2woKTtcbiAgdmFyIEsgPSAnYWJjZGVmZ2hpamtsbW5vcHFyc3QnO1xuICBBW1NdID0gNztcbiAgSy5zcGxpdCgnJykuZm9yRWFjaChmdW5jdGlvbiAoaykgeyBCW2tdID0gazsgfSk7XG4gIHJldHVybiAkYXNzaWduKHt9LCBBKVtTXSAhPSA3IHx8IE9iamVjdC5rZXlzKCRhc3NpZ24oe30sIEIpKS5qb2luKCcnKSAhPSBLO1xufSkgPyBmdW5jdGlvbiBhc3NpZ24odGFyZ2V0LCBzb3VyY2UpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICB2YXIgVCA9IHRvT2JqZWN0KHRhcmdldCk7XG4gIHZhciBhTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgdmFyIGluZGV4ID0gMTtcbiAgdmFyIGdldFN5bWJvbHMgPSBnT1BTLmY7XG4gIHZhciBpc0VudW0gPSBwSUUuZjtcbiAgd2hpbGUgKGFMZW4gPiBpbmRleCkge1xuICAgIHZhciBTID0gSU9iamVjdChhcmd1bWVudHNbaW5kZXgrK10pO1xuICAgIHZhciBrZXlzID0gZ2V0U3ltYm9scyA/IGdldEtleXMoUykuY29uY2F0KGdldFN5bWJvbHMoUykpIDogZ2V0S2V5cyhTKTtcbiAgICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gICAgdmFyIGogPSAwO1xuICAgIHZhciBrZXk7XG4gICAgd2hpbGUgKGxlbmd0aCA+IGopIGlmIChpc0VudW0uY2FsbChTLCBrZXkgPSBrZXlzW2orK10pKSBUW2tleV0gPSBTW2tleV07XG4gIH0gcmV0dXJuIFQ7XG59IDogJGFzc2lnbjtcbiIsIi8vIDE5LjEuMi4yIC8gMTUuMi4zLjUgT2JqZWN0LmNyZWF0ZShPIFssIFByb3BlcnRpZXNdKVxudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgZFBzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwcycpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi9fZW51bS1idWcta2V5cycpO1xudmFyIElFX1BST1RPID0gcmVxdWlyZSgnLi9fc2hhcmVkLWtleScpKCdJRV9QUk9UTycpO1xudmFyIEVtcHR5ID0gZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9O1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xuXG4vLyBDcmVhdGUgb2JqZWN0IHdpdGggZmFrZSBgbnVsbGAgcHJvdG90eXBlOiB1c2UgaWZyYW1lIE9iamVjdCB3aXRoIGNsZWFyZWQgcHJvdG90eXBlXG52YXIgY3JlYXRlRGljdCA9IGZ1bmN0aW9uICgpIHtcbiAgLy8gVGhyYXNoLCB3YXN0ZSBhbmQgc29kb215OiBJRSBHQyBidWdcbiAgdmFyIGlmcmFtZSA9IHJlcXVpcmUoJy4vX2RvbS1jcmVhdGUnKSgnaWZyYW1lJyk7XG4gIHZhciBpID0gZW51bUJ1Z0tleXMubGVuZ3RoO1xuICB2YXIgbHQgPSAnPCc7XG4gIHZhciBndCA9ICc+JztcbiAgdmFyIGlmcmFtZURvY3VtZW50O1xuICBpZnJhbWUuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgcmVxdWlyZSgnLi9faHRtbCcpLmFwcGVuZENoaWxkKGlmcmFtZSk7XG4gIGlmcmFtZS5zcmMgPSAnamF2YXNjcmlwdDonOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXNjcmlwdC11cmxcbiAgLy8gY3JlYXRlRGljdCA9IGlmcmFtZS5jb250ZW50V2luZG93Lk9iamVjdDtcbiAgLy8gaHRtbC5yZW1vdmVDaGlsZChpZnJhbWUpO1xuICBpZnJhbWVEb2N1bWVudCA9IGlmcmFtZS5jb250ZW50V2luZG93LmRvY3VtZW50O1xuICBpZnJhbWVEb2N1bWVudC5vcGVuKCk7XG4gIGlmcmFtZURvY3VtZW50LndyaXRlKGx0ICsgJ3NjcmlwdCcgKyBndCArICdkb2N1bWVudC5GPU9iamVjdCcgKyBsdCArICcvc2NyaXB0JyArIGd0KTtcbiAgaWZyYW1lRG9jdW1lbnQuY2xvc2UoKTtcbiAgY3JlYXRlRGljdCA9IGlmcmFtZURvY3VtZW50LkY7XG4gIHdoaWxlIChpLS0pIGRlbGV0ZSBjcmVhdGVEaWN0W1BST1RPVFlQRV1bZW51bUJ1Z0tleXNbaV1dO1xuICByZXR1cm4gY3JlYXRlRGljdCgpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuY3JlYXRlIHx8IGZ1bmN0aW9uIGNyZWF0ZShPLCBQcm9wZXJ0aWVzKSB7XG4gIHZhciByZXN1bHQ7XG4gIGlmIChPICE9PSBudWxsKSB7XG4gICAgRW1wdHlbUFJPVE9UWVBFXSA9IGFuT2JqZWN0KE8pO1xuICAgIHJlc3VsdCA9IG5ldyBFbXB0eSgpO1xuICAgIEVtcHR5W1BST1RPVFlQRV0gPSBudWxsO1xuICAgIC8vIGFkZCBcIl9fcHJvdG9fX1wiIGZvciBPYmplY3QuZ2V0UHJvdG90eXBlT2YgcG9seWZpbGxcbiAgICByZXN1bHRbSUVfUFJPVE9dID0gTztcbiAgfSBlbHNlIHJlc3VsdCA9IGNyZWF0ZURpY3QoKTtcbiAgcmV0dXJuIFByb3BlcnRpZXMgPT09IHVuZGVmaW5lZCA/IHJlc3VsdCA6IGRQcyhyZXN1bHQsIFByb3BlcnRpZXMpO1xufTtcbiIsInZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi9faWU4LWRvbS1kZWZpbmUnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xudmFyIGRQID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xuXG5leHBvcnRzLmYgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpID8gT2JqZWN0LmRlZmluZVByb3BlcnR5IDogZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcykge1xuICBhbk9iamVjdChPKTtcbiAgUCA9IHRvUHJpbWl0aXZlKFAsIHRydWUpO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiBkUChPLCBQLCBBdHRyaWJ1dGVzKTtcbiAgfSBjYXRjaCAoZSkgeyAvKiBlbXB0eSAqLyB9XG4gIGlmICgnZ2V0JyBpbiBBdHRyaWJ1dGVzIHx8ICdzZXQnIGluIEF0dHJpYnV0ZXMpIHRocm93IFR5cGVFcnJvcignQWNjZXNzb3JzIG5vdCBzdXBwb3J0ZWQhJyk7XG4gIGlmICgndmFsdWUnIGluIEF0dHJpYnV0ZXMpIE9bUF0gPSBBdHRyaWJ1dGVzLnZhbHVlO1xuICByZXR1cm4gTztcbn07XG4iLCJ2YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGdldEtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXMoTywgUHJvcGVydGllcykge1xuICBhbk9iamVjdChPKTtcbiAgdmFyIGtleXMgPSBnZXRLZXlzKFByb3BlcnRpZXMpO1xuICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gIHZhciBpID0gMDtcbiAgdmFyIFA7XG4gIHdoaWxlIChsZW5ndGggPiBpKSBkUC5mKE8sIFAgPSBrZXlzW2krK10sIFByb3BlcnRpZXNbUF0pO1xuICByZXR1cm4gTztcbn07XG4iLCJleHBvcnRzLmYgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xuIiwiLy8gMTkuMS4yLjkgLyAxNS4yLjMuMiBPYmplY3QuZ2V0UHJvdG90eXBlT2YoTylcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIElFX1BST1RPID0gcmVxdWlyZSgnLi9fc2hhcmVkLWtleScpKCdJRV9QUk9UTycpO1xudmFyIE9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gKE8pIHtcbiAgTyA9IHRvT2JqZWN0KE8pO1xuICBpZiAoaGFzKE8sIElFX1BST1RPKSkgcmV0dXJuIE9bSUVfUFJPVE9dO1xuICBpZiAodHlwZW9mIE8uY29uc3RydWN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBPIGluc3RhbmNlb2YgTy5jb25zdHJ1Y3Rvcikge1xuICAgIHJldHVybiBPLmNvbnN0cnVjdG9yLnByb3RvdHlwZTtcbiAgfSByZXR1cm4gTyBpbnN0YW5jZW9mIE9iamVjdCA/IE9iamVjdFByb3RvIDogbnVsbDtcbn07XG4iLCJ2YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIGFycmF5SW5kZXhPZiA9IHJlcXVpcmUoJy4vX2FycmF5LWluY2x1ZGVzJykoZmFsc2UpO1xudmFyIElFX1BST1RPID0gcmVxdWlyZSgnLi9fc2hhcmVkLWtleScpKCdJRV9QUk9UTycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIG5hbWVzKSB7XG4gIHZhciBPID0gdG9JT2JqZWN0KG9iamVjdCk7XG4gIHZhciBpID0gMDtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIga2V5O1xuICBmb3IgKGtleSBpbiBPKSBpZiAoa2V5ICE9IElFX1BST1RPKSBoYXMoTywga2V5KSAmJiByZXN1bHQucHVzaChrZXkpO1xuICAvLyBEb24ndCBlbnVtIGJ1ZyAmIGhpZGRlbiBrZXlzXG4gIHdoaWxlIChuYW1lcy5sZW5ndGggPiBpKSBpZiAoaGFzKE8sIGtleSA9IG5hbWVzW2krK10pKSB7XG4gICAgfmFycmF5SW5kZXhPZihyZXN1bHQsIGtleSkgfHwgcmVzdWx0LnB1c2goa2V5KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsIi8vIDE5LjEuMi4xNCAvIDE1LjIuMy4xNCBPYmplY3Qua2V5cyhPKVxudmFyICRrZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMtaW50ZXJuYWwnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4vX2VudW0tYnVnLWtleXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbiBrZXlzKE8pIHtcbiAgcmV0dXJuICRrZXlzKE8sIGVudW1CdWdLZXlzKTtcbn07XG4iLCJleHBvcnRzLmYgPSB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4geyBlOiBmYWxzZSwgdjogZXhlYygpIH07XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4geyBlOiB0cnVlLCB2OiBlIH07XG4gIH1cbn07XG4iLCJ2YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5ID0gcmVxdWlyZSgnLi9fbmV3LXByb21pc2UtY2FwYWJpbGl0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChDLCB4KSB7XG4gIGFuT2JqZWN0KEMpO1xuICBpZiAoaXNPYmplY3QoeCkgJiYgeC5jb25zdHJ1Y3RvciA9PT0gQykgcmV0dXJuIHg7XG4gIHZhciBwcm9taXNlQ2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5LmYoQyk7XG4gIHZhciByZXNvbHZlID0gcHJvbWlzZUNhcGFiaWxpdHkucmVzb2x2ZTtcbiAgcmVzb2x2ZSh4KTtcbiAgcmV0dXJuIHByb21pc2VDYXBhYmlsaXR5LnByb21pc2U7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYml0bWFwLCB2YWx1ZSkge1xuICByZXR1cm4ge1xuICAgIGVudW1lcmFibGU6ICEoYml0bWFwICYgMSksXG4gICAgY29uZmlndXJhYmxlOiAhKGJpdG1hcCAmIDIpLFxuICAgIHdyaXRhYmxlOiAhKGJpdG1hcCAmIDQpLFxuICAgIHZhbHVlOiB2YWx1ZVxuICB9O1xufTtcbiIsInZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0YXJnZXQsIHNyYywgc2FmZSkge1xuICBmb3IgKHZhciBrZXkgaW4gc3JjKSByZWRlZmluZSh0YXJnZXQsIGtleSwgc3JjW2tleV0sIHNhZmUpO1xuICByZXR1cm4gdGFyZ2V0O1xufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIFNSQyA9IHJlcXVpcmUoJy4vX3VpZCcpKCdzcmMnKTtcbnZhciAkdG9TdHJpbmcgPSByZXF1aXJlKCcuL19mdW5jdGlvbi10by1zdHJpbmcnKTtcbnZhciBUT19TVFJJTkcgPSAndG9TdHJpbmcnO1xudmFyIFRQTCA9ICgnJyArICR0b1N0cmluZykuc3BsaXQoVE9fU1RSSU5HKTtcblxucmVxdWlyZSgnLi9fY29yZScpLmluc3BlY3RTb3VyY2UgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuICR0b1N0cmluZy5jYWxsKGl0KTtcbn07XG5cbihtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBrZXksIHZhbCwgc2FmZSkge1xuICB2YXIgaXNGdW5jdGlvbiA9IHR5cGVvZiB2YWwgPT0gJ2Z1bmN0aW9uJztcbiAgaWYgKGlzRnVuY3Rpb24pIGhhcyh2YWwsICduYW1lJykgfHwgaGlkZSh2YWwsICduYW1lJywga2V5KTtcbiAgaWYgKE9ba2V5XSA9PT0gdmFsKSByZXR1cm47XG4gIGlmIChpc0Z1bmN0aW9uKSBoYXModmFsLCBTUkMpIHx8IGhpZGUodmFsLCBTUkMsIE9ba2V5XSA/ICcnICsgT1trZXldIDogVFBMLmpvaW4oU3RyaW5nKGtleSkpKTtcbiAgaWYgKE8gPT09IGdsb2JhbCkge1xuICAgIE9ba2V5XSA9IHZhbDtcbiAgfSBlbHNlIGlmICghc2FmZSkge1xuICAgIGRlbGV0ZSBPW2tleV07XG4gICAgaGlkZShPLCBrZXksIHZhbCk7XG4gIH0gZWxzZSBpZiAoT1trZXldKSB7XG4gICAgT1trZXldID0gdmFsO1xuICB9IGVsc2Uge1xuICAgIGhpZGUoTywga2V5LCB2YWwpO1xuICB9XG4vLyBhZGQgZmFrZSBGdW5jdGlvbiN0b1N0cmluZyBmb3IgY29ycmVjdCB3b3JrIHdyYXBwZWQgbWV0aG9kcyAvIGNvbnN0cnVjdG9ycyB3aXRoIG1ldGhvZHMgbGlrZSBMb0Rhc2ggaXNOYXRpdmVcbn0pKEZ1bmN0aW9uLnByb3RvdHlwZSwgVE9fU1RSSU5HLCBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgcmV0dXJuIHR5cGVvZiB0aGlzID09ICdmdW5jdGlvbicgJiYgdGhpc1tTUkNdIHx8ICR0b1N0cmluZy5jYWxsKHRoaXMpO1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyk7XG52YXIgU1BFQ0lFUyA9IHJlcXVpcmUoJy4vX3drcycpKCdzcGVjaWVzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEtFWSkge1xuICB2YXIgQyA9IGdsb2JhbFtLRVldO1xuICBpZiAoREVTQ1JJUFRPUlMgJiYgQyAmJiAhQ1tTUEVDSUVTXSkgZFAuZihDLCBTUEVDSUVTLCB7XG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfVxuICB9KTtcbn07XG4iLCJ2YXIgZGVmID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciBUQUcgPSByZXF1aXJlKCcuL193a3MnKSgndG9TdHJpbmdUYWcnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIHRhZywgc3RhdCkge1xuICBpZiAoaXQgJiYgIWhhcyhpdCA9IHN0YXQgPyBpdCA6IGl0LnByb3RvdHlwZSwgVEFHKSkgZGVmKGl0LCBUQUcsIHsgY29uZmlndXJhYmxlOiB0cnVlLCB2YWx1ZTogdGFnIH0pO1xufTtcbiIsInZhciBzaGFyZWQgPSByZXF1aXJlKCcuL19zaGFyZWQnKSgna2V5cycpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4vX3VpZCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiBzaGFyZWRba2V5XSB8fCAoc2hhcmVkW2tleV0gPSB1aWQoa2V5KSk7XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuL19jb3JlJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgU0hBUkVEID0gJ19fY29yZS1qc19zaGFyZWRfXyc7XG52YXIgc3RvcmUgPSBnbG9iYWxbU0hBUkVEXSB8fCAoZ2xvYmFsW1NIQVJFRF0gPSB7fSk7XG5cbihtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gIHJldHVybiBzdG9yZVtrZXldIHx8IChzdG9yZVtrZXldID0gdmFsdWUgIT09IHVuZGVmaW5lZCA/IHZhbHVlIDoge30pO1xufSkoJ3ZlcnNpb25zJywgW10pLnB1c2goe1xuICB2ZXJzaW9uOiBjb3JlLnZlcnNpb24sXG4gIG1vZGU6IHJlcXVpcmUoJy4vX2xpYnJhcnknKSA/ICdwdXJlJyA6ICdnbG9iYWwnLFxuICBjb3B5cmlnaHQ6ICfCqSAyMDE5IERlbmlzIFB1c2hrYXJldiAoemxvaXJvY2sucnUpJ1xufSk7XG4iLCIvLyA3LjMuMjAgU3BlY2llc0NvbnN0cnVjdG9yKE8sIGRlZmF1bHRDb25zdHJ1Y3RvcilcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciBTUEVDSUVTID0gcmVxdWlyZSgnLi9fd2tzJykoJ3NwZWNpZXMnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE8sIEQpIHtcbiAgdmFyIEMgPSBhbk9iamVjdChPKS5jb25zdHJ1Y3RvcjtcbiAgdmFyIFM7XG4gIHJldHVybiBDID09PSB1bmRlZmluZWQgfHwgKFMgPSBhbk9iamVjdChDKVtTUEVDSUVTXSkgPT0gdW5kZWZpbmVkID8gRCA6IGFGdW5jdGlvbihTKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChtZXRob2QsIGFyZykge1xuICByZXR1cm4gISFtZXRob2QgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2VsZXNzLWNhbGxcbiAgICBhcmcgPyBtZXRob2QuY2FsbChudWxsLCBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0sIDEpIDogbWV0aG9kLmNhbGwobnVsbCk7XG4gIH0pO1xufTtcbiIsInZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbi8vIHRydWUgIC0+IFN0cmluZyNhdFxuLy8gZmFsc2UgLT4gU3RyaW5nI2NvZGVQb2ludEF0XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChUT19TVFJJTkcpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh0aGF0LCBwb3MpIHtcbiAgICB2YXIgcyA9IFN0cmluZyhkZWZpbmVkKHRoYXQpKTtcbiAgICB2YXIgaSA9IHRvSW50ZWdlcihwb3MpO1xuICAgIHZhciBsID0gcy5sZW5ndGg7XG4gICAgdmFyIGEsIGI7XG4gICAgaWYgKGkgPCAwIHx8IGkgPj0gbCkgcmV0dXJuIFRPX1NUUklORyA/ICcnIDogdW5kZWZpbmVkO1xuICAgIGEgPSBzLmNoYXJDb2RlQXQoaSk7XG4gICAgcmV0dXJuIGEgPCAweGQ4MDAgfHwgYSA+IDB4ZGJmZiB8fCBpICsgMSA9PT0gbCB8fCAoYiA9IHMuY2hhckNvZGVBdChpICsgMSkpIDwgMHhkYzAwIHx8IGIgPiAweGRmZmZcbiAgICAgID8gVE9fU1RSSU5HID8gcy5jaGFyQXQoaSkgOiBhXG4gICAgICA6IFRPX1NUUklORyA/IHMuc2xpY2UoaSwgaSArIDIpIDogKGEgLSAweGQ4MDAgPDwgMTApICsgKGIgLSAweGRjMDApICsgMHgxMDAwMDtcbiAgfTtcbn07XG4iLCJ2YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgaW52b2tlID0gcmVxdWlyZSgnLi9faW52b2tlJyk7XG52YXIgaHRtbCA9IHJlcXVpcmUoJy4vX2h0bWwnKTtcbnZhciBjZWwgPSByZXF1aXJlKCcuL19kb20tY3JlYXRlJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgcHJvY2VzcyA9IGdsb2JhbC5wcm9jZXNzO1xudmFyIHNldFRhc2sgPSBnbG9iYWwuc2V0SW1tZWRpYXRlO1xudmFyIGNsZWFyVGFzayA9IGdsb2JhbC5jbGVhckltbWVkaWF0ZTtcbnZhciBNZXNzYWdlQ2hhbm5lbCA9IGdsb2JhbC5NZXNzYWdlQ2hhbm5lbDtcbnZhciBEaXNwYXRjaCA9IGdsb2JhbC5EaXNwYXRjaDtcbnZhciBjb3VudGVyID0gMDtcbnZhciBxdWV1ZSA9IHt9O1xudmFyIE9OUkVBRFlTVEFURUNIQU5HRSA9ICdvbnJlYWR5c3RhdGVjaGFuZ2UnO1xudmFyIGRlZmVyLCBjaGFubmVsLCBwb3J0O1xudmFyIHJ1biA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGlkID0gK3RoaXM7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgaWYgKHF1ZXVlLmhhc093blByb3BlcnR5KGlkKSkge1xuICAgIHZhciBmbiA9IHF1ZXVlW2lkXTtcbiAgICBkZWxldGUgcXVldWVbaWRdO1xuICAgIGZuKCk7XG4gIH1cbn07XG52YXIgbGlzdGVuZXIgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgcnVuLmNhbGwoZXZlbnQuZGF0YSk7XG59O1xuLy8gTm9kZS5qcyAwLjkrICYgSUUxMCsgaGFzIHNldEltbWVkaWF0ZSwgb3RoZXJ3aXNlOlxuaWYgKCFzZXRUYXNrIHx8ICFjbGVhclRhc2spIHtcbiAgc2V0VGFzayA9IGZ1bmN0aW9uIHNldEltbWVkaWF0ZShmbikge1xuICAgIHZhciBhcmdzID0gW107XG4gICAgdmFyIGkgPSAxO1xuICAgIHdoaWxlIChhcmd1bWVudHMubGVuZ3RoID4gaSkgYXJncy5wdXNoKGFyZ3VtZW50c1tpKytdKTtcbiAgICBxdWV1ZVsrK2NvdW50ZXJdID0gZnVuY3Rpb24gKCkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jXG4gICAgICBpbnZva2UodHlwZW9mIGZuID09ICdmdW5jdGlvbicgPyBmbiA6IEZ1bmN0aW9uKGZuKSwgYXJncyk7XG4gICAgfTtcbiAgICBkZWZlcihjb3VudGVyKTtcbiAgICByZXR1cm4gY291bnRlcjtcbiAgfTtcbiAgY2xlYXJUYXNrID0gZnVuY3Rpb24gY2xlYXJJbW1lZGlhdGUoaWQpIHtcbiAgICBkZWxldGUgcXVldWVbaWRdO1xuICB9O1xuICAvLyBOb2RlLmpzIDAuOC1cbiAgaWYgKHJlcXVpcmUoJy4vX2NvZicpKHByb2Nlc3MpID09ICdwcm9jZXNzJykge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGN0eChydW4sIGlkLCAxKSk7XG4gICAgfTtcbiAgLy8gU3BoZXJlIChKUyBnYW1lIGVuZ2luZSkgRGlzcGF0Y2ggQVBJXG4gIH0gZWxzZSBpZiAoRGlzcGF0Y2ggJiYgRGlzcGF0Y2gubm93KSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIERpc3BhdGNoLm5vdyhjdHgocnVuLCBpZCwgMSkpO1xuICAgIH07XG4gIC8vIEJyb3dzZXJzIHdpdGggTWVzc2FnZUNoYW5uZWwsIGluY2x1ZGVzIFdlYldvcmtlcnNcbiAgfSBlbHNlIGlmIChNZXNzYWdlQ2hhbm5lbCkge1xuICAgIGNoYW5uZWwgPSBuZXcgTWVzc2FnZUNoYW5uZWwoKTtcbiAgICBwb3J0ID0gY2hhbm5lbC5wb3J0MjtcbiAgICBjaGFubmVsLnBvcnQxLm9ubWVzc2FnZSA9IGxpc3RlbmVyO1xuICAgIGRlZmVyID0gY3R4KHBvcnQucG9zdE1lc3NhZ2UsIHBvcnQsIDEpO1xuICAvLyBCcm93c2VycyB3aXRoIHBvc3RNZXNzYWdlLCBza2lwIFdlYldvcmtlcnNcbiAgLy8gSUU4IGhhcyBwb3N0TWVzc2FnZSwgYnV0IGl0J3Mgc3luYyAmIHR5cGVvZiBpdHMgcG9zdE1lc3NhZ2UgaXMgJ29iamVjdCdcbiAgfSBlbHNlIGlmIChnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lciAmJiB0eXBlb2YgcG9zdE1lc3NhZ2UgPT0gJ2Z1bmN0aW9uJyAmJiAhZ2xvYmFsLmltcG9ydFNjcmlwdHMpIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgZ2xvYmFsLnBvc3RNZXNzYWdlKGlkICsgJycsICcqJyk7XG4gICAgfTtcbiAgICBnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGxpc3RlbmVyLCBmYWxzZSk7XG4gIC8vIElFOC1cbiAgfSBlbHNlIGlmIChPTlJFQURZU1RBVEVDSEFOR0UgaW4gY2VsKCdzY3JpcHQnKSkge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBodG1sLmFwcGVuZENoaWxkKGNlbCgnc2NyaXB0JykpW09OUkVBRFlTVEFURUNIQU5HRV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGh0bWwucmVtb3ZlQ2hpbGQodGhpcyk7XG4gICAgICAgIHJ1bi5jYWxsKGlkKTtcbiAgICAgIH07XG4gICAgfTtcbiAgLy8gUmVzdCBvbGQgYnJvd3NlcnNcbiAgfSBlbHNlIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgc2V0VGltZW91dChjdHgocnVuLCBpZCwgMSksIDApO1xuICAgIH07XG4gIH1cbn1cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzZXQ6IHNldFRhc2ssXG4gIGNsZWFyOiBjbGVhclRhc2tcbn07XG4iLCJ2YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIG1heCA9IE1hdGgubWF4O1xudmFyIG1pbiA9IE1hdGgubWluO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5kZXgsIGxlbmd0aCkge1xuICBpbmRleCA9IHRvSW50ZWdlcihpbmRleCk7XG4gIHJldHVybiBpbmRleCA8IDAgPyBtYXgoaW5kZXggKyBsZW5ndGgsIDApIDogbWluKGluZGV4LCBsZW5ndGgpO1xufTtcbiIsIi8vIDcuMS40IFRvSW50ZWdlclxudmFyIGNlaWwgPSBNYXRoLmNlaWw7XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGlzTmFOKGl0ID0gK2l0KSA/IDAgOiAoaXQgPiAwID8gZmxvb3IgOiBjZWlsKShpdCk7XG59O1xuIiwiLy8gdG8gaW5kZXhlZCBvYmplY3QsIHRvT2JqZWN0IHdpdGggZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBzdHJpbmdzXG52YXIgSU9iamVjdCA9IHJlcXVpcmUoJy4vX2lvYmplY3QnKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIElPYmplY3QoZGVmaW5lZChpdCkpO1xufTtcbiIsIi8vIDcuMS4xNSBUb0xlbmd0aFxudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciBtaW4gPSBNYXRoLm1pbjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCA+IDAgPyBtaW4odG9JbnRlZ2VyKGl0KSwgMHgxZmZmZmZmZmZmZmZmZikgOiAwOyAvLyBwb3coMiwgNTMpIC0gMSA9PSA5MDA3MTk5MjU0NzQwOTkxXG59O1xuIiwiLy8gNy4xLjEzIFRvT2JqZWN0KGFyZ3VtZW50KVxudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gT2JqZWN0KGRlZmluZWQoaXQpKTtcbn07XG4iLCIvLyA3LjEuMSBUb1ByaW1pdGl2ZShpbnB1dCBbLCBQcmVmZXJyZWRUeXBlXSlcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xuLy8gaW5zdGVhZCBvZiB0aGUgRVM2IHNwZWMgdmVyc2lvbiwgd2UgZGlkbid0IGltcGxlbWVudCBAQHRvUHJpbWl0aXZlIGNhc2Vcbi8vIGFuZCB0aGUgc2Vjb25kIGFyZ3VtZW50IC0gZmxhZyAtIHByZWZlcnJlZCB0eXBlIGlzIGEgc3RyaW5nXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgUykge1xuICBpZiAoIWlzT2JqZWN0KGl0KSkgcmV0dXJuIGl0O1xuICB2YXIgZm4sIHZhbDtcbiAgaWYgKFMgJiYgdHlwZW9mIChmbiA9IGl0LnRvU3RyaW5nKSA9PSAnZnVuY3Rpb24nICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGl0KSkpIHJldHVybiB2YWw7XG4gIGlmICh0eXBlb2YgKGZuID0gaXQudmFsdWVPZikgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNPYmplY3QodmFsID0gZm4uY2FsbChpdCkpKSByZXR1cm4gdmFsO1xuICBpZiAoIVMgJiYgdHlwZW9mIChmbiA9IGl0LnRvU3RyaW5nKSA9PSAnZnVuY3Rpb24nICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGl0KSkpIHJldHVybiB2YWw7XG4gIHRocm93IFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKTtcbn07XG4iLCJ2YXIgaWQgPSAwO1xudmFyIHB4ID0gTWF0aC5yYW5kb20oKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4gJ1N5bWJvbCgnLmNvbmNhdChrZXkgPT09IHVuZGVmaW5lZCA/ICcnIDoga2V5LCAnKV8nLCAoKytpZCArIHB4KS50b1N0cmluZygzNikpO1xufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBuYXZpZ2F0b3IgPSBnbG9iYWwubmF2aWdhdG9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG5hdmlnYXRvciAmJiBuYXZpZ2F0b3IudXNlckFnZW50IHx8ICcnO1xuIiwidmFyIHN0b3JlID0gcmVxdWlyZSgnLi9fc2hhcmVkJykoJ3drcycpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4vX3VpZCcpO1xudmFyIFN5bWJvbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLlN5bWJvbDtcbnZhciBVU0VfU1lNQk9MID0gdHlwZW9mIFN5bWJvbCA9PSAnZnVuY3Rpb24nO1xuXG52YXIgJGV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIHJldHVybiBzdG9yZVtuYW1lXSB8fCAoc3RvcmVbbmFtZV0gPVxuICAgIFVTRV9TWU1CT0wgJiYgU3ltYm9sW25hbWVdIHx8IChVU0VfU1lNQk9MID8gU3ltYm9sIDogdWlkKSgnU3ltYm9sLicgKyBuYW1lKSk7XG59O1xuXG4kZXhwb3J0cy5zdG9yZSA9IHN0b3JlO1xuIiwidmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuL19jbGFzc29mJyk7XG52YXIgSVRFUkFUT1IgPSByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuL19pdGVyYXRvcnMnKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fY29yZScpLmdldEl0ZXJhdG9yTWV0aG9kID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpdCAhPSB1bmRlZmluZWQpIHJldHVybiBpdFtJVEVSQVRPUl1cbiAgICB8fCBpdFsnQEBpdGVyYXRvciddXG4gICAgfHwgSXRlcmF0b3JzW2NsYXNzb2YoaXQpXTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vLyAyMi4xLjMuOCBBcnJheS5wcm90b3R5cGUuZmluZChwcmVkaWNhdGUsIHRoaXNBcmcgPSB1bmRlZmluZWQpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRmaW5kID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpKDUpO1xudmFyIEtFWSA9ICdmaW5kJztcbnZhciBmb3JjZWQgPSB0cnVlO1xuLy8gU2hvdWxkbid0IHNraXAgaG9sZXNcbmlmIChLRVkgaW4gW10pIEFycmF5KDEpW0tFWV0oZnVuY3Rpb24gKCkgeyBmb3JjZWQgPSBmYWxzZTsgfSk7XG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIGZvcmNlZCwgJ0FycmF5Jywge1xuICBmaW5kOiBmdW5jdGlvbiBmaW5kKGNhbGxiYWNrZm4gLyogLCB0aGF0ID0gdW5kZWZpbmVkICovKSB7XG4gICAgcmV0dXJuICRmaW5kKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG5yZXF1aXJlKCcuL19hZGQtdG8tdW5zY29wYWJsZXMnKShLRVkpO1xuIiwiLy8gMjIuMS4yLjIgLyAxNS40LjMuMiBBcnJheS5pc0FycmF5KGFyZylcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnQXJyYXknLCB7IGlzQXJyYXk6IHJlcXVpcmUoJy4vX2lzLWFycmF5JykgfSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgYWRkVG9VbnNjb3BhYmxlcyA9IHJlcXVpcmUoJy4vX2FkZC10by11bnNjb3BhYmxlcycpO1xudmFyIHN0ZXAgPSByZXF1aXJlKCcuL19pdGVyLXN0ZXAnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuL19pdGVyYXRvcnMnKTtcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG5cbi8vIDIyLjEuMy40IEFycmF5LnByb3RvdHlwZS5lbnRyaWVzKClcbi8vIDIyLjEuMy4xMyBBcnJheS5wcm90b3R5cGUua2V5cygpXG4vLyAyMi4xLjMuMjkgQXJyYXkucHJvdG90eXBlLnZhbHVlcygpXG4vLyAyMi4xLjMuMzAgQXJyYXkucHJvdG90eXBlW0BAaXRlcmF0b3JdKClcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9faXRlci1kZWZpbmUnKShBcnJheSwgJ0FycmF5JywgZnVuY3Rpb24gKGl0ZXJhdGVkLCBraW5kKSB7XG4gIHRoaXMuX3QgPSB0b0lPYmplY3QoaXRlcmF0ZWQpOyAvLyB0YXJnZXRcbiAgdGhpcy5faSA9IDA7ICAgICAgICAgICAgICAgICAgIC8vIG5leHQgaW5kZXhcbiAgdGhpcy5fayA9IGtpbmQ7ICAgICAgICAgICAgICAgIC8vIGtpbmRcbi8vIDIyLjEuNS4yLjEgJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlLm5leHQoKVxufSwgZnVuY3Rpb24gKCkge1xuICB2YXIgTyA9IHRoaXMuX3Q7XG4gIHZhciBraW5kID0gdGhpcy5faztcbiAgdmFyIGluZGV4ID0gdGhpcy5faSsrO1xuICBpZiAoIU8gfHwgaW5kZXggPj0gTy5sZW5ndGgpIHtcbiAgICB0aGlzLl90ID0gdW5kZWZpbmVkO1xuICAgIHJldHVybiBzdGVwKDEpO1xuICB9XG4gIGlmIChraW5kID09ICdrZXlzJykgcmV0dXJuIHN0ZXAoMCwgaW5kZXgpO1xuICBpZiAoa2luZCA9PSAndmFsdWVzJykgcmV0dXJuIHN0ZXAoMCwgT1tpbmRleF0pO1xuICByZXR1cm4gc3RlcCgwLCBbaW5kZXgsIE9baW5kZXhdXSk7XG59LCAndmFsdWVzJyk7XG5cbi8vIGFyZ3VtZW50c0xpc3RbQEBpdGVyYXRvcl0gaXMgJUFycmF5UHJvdG9fdmFsdWVzJSAoOS40LjQuNiwgOS40LjQuNylcbkl0ZXJhdG9ycy5Bcmd1bWVudHMgPSBJdGVyYXRvcnMuQXJyYXk7XG5cbmFkZFRvVW5zY29wYWJsZXMoJ2tleXMnKTtcbmFkZFRvVW5zY29wYWJsZXMoJ3ZhbHVlcycpO1xuYWRkVG9VbnNjb3BhYmxlcygnZW50cmllcycpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkc29tZSA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKSgzKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKFtdLnNvbWUsIHRydWUpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy4yMyAvIDE1LjQuNC4xNyBBcnJheS5wcm90b3R5cGUuc29tZShjYWxsYmFja2ZuIFssIHRoaXNBcmddKVxuICBzb21lOiBmdW5jdGlvbiBzb21lKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgcmV0dXJuICRzb21lKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50c1sxXSk7XG4gIH1cbn0pO1xuIiwiLy8gMTkuMi4zLjIgLyAxNS4zLjQuNSBGdW5jdGlvbi5wcm90b3R5cGUuYmluZCh0aGlzQXJnLCBhcmdzLi4uKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdGdW5jdGlvbicsIHsgYmluZDogcmVxdWlyZSgnLi9fYmluZCcpIH0pO1xuIiwiLy8gMTkuMS4zLjEgT2JqZWN0LmFzc2lnbih0YXJnZXQsIHNvdXJjZSlcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GLCAnT2JqZWN0JywgeyBhc3NpZ246IHJlcXVpcmUoJy4vX29iamVjdC1hc3NpZ24nKSB9KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIDE5LjEuMy42IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcoKVxudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuL19jbGFzc29mJyk7XG52YXIgdGVzdCA9IHt9O1xudGVzdFtyZXF1aXJlKCcuL193a3MnKSgndG9TdHJpbmdUYWcnKV0gPSAneic7XG5pZiAodGVzdCArICcnICE9ICdbb2JqZWN0IHpdJykge1xuICByZXF1aXJlKCcuL19yZWRlZmluZScpKE9iamVjdC5wcm90b3R5cGUsICd0b1N0cmluZycsIGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiAnW29iamVjdCAnICsgY2xhc3NvZih0aGlzKSArICddJztcbiAgfSwgdHJ1ZSk7XG59XG4iLCIndXNlIHN0cmljdCc7XG52YXIgTElCUkFSWSA9IHJlcXVpcmUoJy4vX2xpYnJhcnknKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi9fY2xhc3NvZicpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciBhbkluc3RhbmNlID0gcmVxdWlyZSgnLi9fYW4taW5zdGFuY2UnKTtcbnZhciBmb3JPZiA9IHJlcXVpcmUoJy4vX2Zvci1vZicpO1xudmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4vX3NwZWNpZXMtY29uc3RydWN0b3InKTtcbnZhciB0YXNrID0gcmVxdWlyZSgnLi9fdGFzaycpLnNldDtcbnZhciBtaWNyb3Rhc2sgPSByZXF1aXJlKCcuL19taWNyb3Rhc2snKSgpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlID0gcmVxdWlyZSgnLi9fbmV3LXByb21pc2UtY2FwYWJpbGl0eScpO1xudmFyIHBlcmZvcm0gPSByZXF1aXJlKCcuL19wZXJmb3JtJyk7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi9fdXNlci1hZ2VudCcpO1xudmFyIHByb21pc2VSZXNvbHZlID0gcmVxdWlyZSgnLi9fcHJvbWlzZS1yZXNvbHZlJyk7XG52YXIgUFJPTUlTRSA9ICdQcm9taXNlJztcbnZhciBUeXBlRXJyb3IgPSBnbG9iYWwuVHlwZUVycm9yO1xudmFyIHByb2Nlc3MgPSBnbG9iYWwucHJvY2VzcztcbnZhciB2ZXJzaW9ucyA9IHByb2Nlc3MgJiYgcHJvY2Vzcy52ZXJzaW9ucztcbnZhciB2OCA9IHZlcnNpb25zICYmIHZlcnNpb25zLnY4IHx8ICcnO1xudmFyICRQcm9taXNlID0gZ2xvYmFsW1BST01JU0VdO1xudmFyIGlzTm9kZSA9IGNsYXNzb2YocHJvY2VzcykgPT0gJ3Byb2Nlc3MnO1xudmFyIGVtcHR5ID0gZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9O1xudmFyIEludGVybmFsLCBuZXdHZW5lcmljUHJvbWlzZUNhcGFiaWxpdHksIE93blByb21pc2VDYXBhYmlsaXR5LCBXcmFwcGVyO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5ID0gbmV3R2VuZXJpY1Byb21pc2VDYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUuZjtcblxudmFyIFVTRV9OQVRJVkUgPSAhIWZ1bmN0aW9uICgpIHtcbiAgdHJ5IHtcbiAgICAvLyBjb3JyZWN0IHN1YmNsYXNzaW5nIHdpdGggQEBzcGVjaWVzIHN1cHBvcnRcbiAgICB2YXIgcHJvbWlzZSA9ICRQcm9taXNlLnJlc29sdmUoMSk7XG4gICAgdmFyIEZha2VQcm9taXNlID0gKHByb21pc2UuY29uc3RydWN0b3IgPSB7fSlbcmVxdWlyZSgnLi9fd2tzJykoJ3NwZWNpZXMnKV0gPSBmdW5jdGlvbiAoZXhlYykge1xuICAgICAgZXhlYyhlbXB0eSwgZW1wdHkpO1xuICAgIH07XG4gICAgLy8gdW5oYW5kbGVkIHJlamVjdGlvbnMgdHJhY2tpbmcgc3VwcG9ydCwgTm9kZUpTIFByb21pc2Ugd2l0aG91dCBpdCBmYWlscyBAQHNwZWNpZXMgdGVzdFxuICAgIHJldHVybiAoaXNOb2RlIHx8IHR5cGVvZiBQcm9taXNlUmVqZWN0aW9uRXZlbnQgPT0gJ2Z1bmN0aW9uJylcbiAgICAgICYmIHByb21pc2UudGhlbihlbXB0eSkgaW5zdGFuY2VvZiBGYWtlUHJvbWlzZVxuICAgICAgLy8gdjggNi42IChOb2RlIDEwIGFuZCBDaHJvbWUgNjYpIGhhdmUgYSBidWcgd2l0aCByZXNvbHZpbmcgY3VzdG9tIHRoZW5hYmxlc1xuICAgICAgLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9ODMwNTY1XG4gICAgICAvLyB3ZSBjYW4ndCBkZXRlY3QgaXQgc3luY2hyb25vdXNseSwgc28ganVzdCBjaGVjayB2ZXJzaW9uc1xuICAgICAgJiYgdjguaW5kZXhPZignNi42JykgIT09IDBcbiAgICAgICYmIHVzZXJBZ2VudC5pbmRleE9mKCdDaHJvbWUvNjYnKSA9PT0gLTE7XG4gIH0gY2F0Y2ggKGUpIHsgLyogZW1wdHkgKi8gfVxufSgpO1xuXG4vLyBoZWxwZXJzXG52YXIgaXNUaGVuYWJsZSA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgdGhlbjtcbiAgcmV0dXJuIGlzT2JqZWN0KGl0KSAmJiB0eXBlb2YgKHRoZW4gPSBpdC50aGVuKSA9PSAnZnVuY3Rpb24nID8gdGhlbiA6IGZhbHNlO1xufTtcbnZhciBub3RpZnkgPSBmdW5jdGlvbiAocHJvbWlzZSwgaXNSZWplY3QpIHtcbiAgaWYgKHByb21pc2UuX24pIHJldHVybjtcbiAgcHJvbWlzZS5fbiA9IHRydWU7XG4gIHZhciBjaGFpbiA9IHByb21pc2UuX2M7XG4gIG1pY3JvdGFzayhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHZhbHVlID0gcHJvbWlzZS5fdjtcbiAgICB2YXIgb2sgPSBwcm9taXNlLl9zID09IDE7XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBydW4gPSBmdW5jdGlvbiAocmVhY3Rpb24pIHtcbiAgICAgIHZhciBoYW5kbGVyID0gb2sgPyByZWFjdGlvbi5vayA6IHJlYWN0aW9uLmZhaWw7XG4gICAgICB2YXIgcmVzb2x2ZSA9IHJlYWN0aW9uLnJlc29sdmU7XG4gICAgICB2YXIgcmVqZWN0ID0gcmVhY3Rpb24ucmVqZWN0O1xuICAgICAgdmFyIGRvbWFpbiA9IHJlYWN0aW9uLmRvbWFpbjtcbiAgICAgIHZhciByZXN1bHQsIHRoZW4sIGV4aXRlZDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmIChoYW5kbGVyKSB7XG4gICAgICAgICAgaWYgKCFvaykge1xuICAgICAgICAgICAgaWYgKHByb21pc2UuX2ggPT0gMikgb25IYW5kbGVVbmhhbmRsZWQocHJvbWlzZSk7XG4gICAgICAgICAgICBwcm9taXNlLl9oID0gMTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGhhbmRsZXIgPT09IHRydWUpIHJlc3VsdCA9IHZhbHVlO1xuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKGRvbWFpbikgZG9tYWluLmVudGVyKCk7XG4gICAgICAgICAgICByZXN1bHQgPSBoYW5kbGVyKHZhbHVlKTsgLy8gbWF5IHRocm93XG4gICAgICAgICAgICBpZiAoZG9tYWluKSB7XG4gICAgICAgICAgICAgIGRvbWFpbi5leGl0KCk7XG4gICAgICAgICAgICAgIGV4aXRlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChyZXN1bHQgPT09IHJlYWN0aW9uLnByb21pc2UpIHtcbiAgICAgICAgICAgIHJlamVjdChUeXBlRXJyb3IoJ1Byb21pc2UtY2hhaW4gY3ljbGUnKSk7XG4gICAgICAgICAgfSBlbHNlIGlmICh0aGVuID0gaXNUaGVuYWJsZShyZXN1bHQpKSB7XG4gICAgICAgICAgICB0aGVuLmNhbGwocmVzdWx0LCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICAgIH0gZWxzZSByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgIH0gZWxzZSByZWplY3QodmFsdWUpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBpZiAoZG9tYWluICYmICFleGl0ZWQpIGRvbWFpbi5leGl0KCk7XG4gICAgICAgIHJlamVjdChlKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHdoaWxlIChjaGFpbi5sZW5ndGggPiBpKSBydW4oY2hhaW5baSsrXSk7IC8vIHZhcmlhYmxlIGxlbmd0aCAtIGNhbid0IHVzZSBmb3JFYWNoXG4gICAgcHJvbWlzZS5fYyA9IFtdO1xuICAgIHByb21pc2UuX24gPSBmYWxzZTtcbiAgICBpZiAoaXNSZWplY3QgJiYgIXByb21pc2UuX2gpIG9uVW5oYW5kbGVkKHByb21pc2UpO1xuICB9KTtcbn07XG52YXIgb25VbmhhbmRsZWQgPSBmdW5jdGlvbiAocHJvbWlzZSkge1xuICB0YXNrLmNhbGwoZ2xvYmFsLCBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHZhbHVlID0gcHJvbWlzZS5fdjtcbiAgICB2YXIgdW5oYW5kbGVkID0gaXNVbmhhbmRsZWQocHJvbWlzZSk7XG4gICAgdmFyIHJlc3VsdCwgaGFuZGxlciwgY29uc29sZTtcbiAgICBpZiAodW5oYW5kbGVkKSB7XG4gICAgICByZXN1bHQgPSBwZXJmb3JtKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKGlzTm9kZSkge1xuICAgICAgICAgIHByb2Nlc3MuZW1pdCgndW5oYW5kbGVkUmVqZWN0aW9uJywgdmFsdWUsIHByb21pc2UpO1xuICAgICAgICB9IGVsc2UgaWYgKGhhbmRsZXIgPSBnbG9iYWwub251bmhhbmRsZWRyZWplY3Rpb24pIHtcbiAgICAgICAgICBoYW5kbGVyKHsgcHJvbWlzZTogcHJvbWlzZSwgcmVhc29uOiB2YWx1ZSB9KTtcbiAgICAgICAgfSBlbHNlIGlmICgoY29uc29sZSA9IGdsb2JhbC5jb25zb2xlKSAmJiBjb25zb2xlLmVycm9yKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignVW5oYW5kbGVkIHByb21pc2UgcmVqZWN0aW9uJywgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIC8vIEJyb3dzZXJzIHNob3VsZCBub3QgdHJpZ2dlciBgcmVqZWN0aW9uSGFuZGxlZGAgZXZlbnQgaWYgaXQgd2FzIGhhbmRsZWQgaGVyZSwgTm9kZUpTIC0gc2hvdWxkXG4gICAgICBwcm9taXNlLl9oID0gaXNOb2RlIHx8IGlzVW5oYW5kbGVkKHByb21pc2UpID8gMiA6IDE7XG4gICAgfSBwcm9taXNlLl9hID0gdW5kZWZpbmVkO1xuICAgIGlmICh1bmhhbmRsZWQgJiYgcmVzdWx0LmUpIHRocm93IHJlc3VsdC52O1xuICB9KTtcbn07XG52YXIgaXNVbmhhbmRsZWQgPSBmdW5jdGlvbiAocHJvbWlzZSkge1xuICByZXR1cm4gcHJvbWlzZS5faCAhPT0gMSAmJiAocHJvbWlzZS5fYSB8fCBwcm9taXNlLl9jKS5sZW5ndGggPT09IDA7XG59O1xudmFyIG9uSGFuZGxlVW5oYW5kbGVkID0gZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgdGFzay5jYWxsKGdsb2JhbCwgZnVuY3Rpb24gKCkge1xuICAgIHZhciBoYW5kbGVyO1xuICAgIGlmIChpc05vZGUpIHtcbiAgICAgIHByb2Nlc3MuZW1pdCgncmVqZWN0aW9uSGFuZGxlZCcsIHByb21pc2UpO1xuICAgIH0gZWxzZSBpZiAoaGFuZGxlciA9IGdsb2JhbC5vbnJlamVjdGlvbmhhbmRsZWQpIHtcbiAgICAgIGhhbmRsZXIoeyBwcm9taXNlOiBwcm9taXNlLCByZWFzb246IHByb21pc2UuX3YgfSk7XG4gICAgfVxuICB9KTtcbn07XG52YXIgJHJlamVjdCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICB2YXIgcHJvbWlzZSA9IHRoaXM7XG4gIGlmIChwcm9taXNlLl9kKSByZXR1cm47XG4gIHByb21pc2UuX2QgPSB0cnVlO1xuICBwcm9taXNlID0gcHJvbWlzZS5fdyB8fCBwcm9taXNlOyAvLyB1bndyYXBcbiAgcHJvbWlzZS5fdiA9IHZhbHVlO1xuICBwcm9taXNlLl9zID0gMjtcbiAgaWYgKCFwcm9taXNlLl9hKSBwcm9taXNlLl9hID0gcHJvbWlzZS5fYy5zbGljZSgpO1xuICBub3RpZnkocHJvbWlzZSwgdHJ1ZSk7XG59O1xudmFyICRyZXNvbHZlID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gIHZhciBwcm9taXNlID0gdGhpcztcbiAgdmFyIHRoZW47XG4gIGlmIChwcm9taXNlLl9kKSByZXR1cm47XG4gIHByb21pc2UuX2QgPSB0cnVlO1xuICBwcm9taXNlID0gcHJvbWlzZS5fdyB8fCBwcm9taXNlOyAvLyB1bndyYXBcbiAgdHJ5IHtcbiAgICBpZiAocHJvbWlzZSA9PT0gdmFsdWUpIHRocm93IFR5cGVFcnJvcihcIlByb21pc2UgY2FuJ3QgYmUgcmVzb2x2ZWQgaXRzZWxmXCIpO1xuICAgIGlmICh0aGVuID0gaXNUaGVuYWJsZSh2YWx1ZSkpIHtcbiAgICAgIG1pY3JvdGFzayhmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciB3cmFwcGVyID0geyBfdzogcHJvbWlzZSwgX2Q6IGZhbHNlIH07IC8vIHdyYXBcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB0aGVuLmNhbGwodmFsdWUsIGN0eCgkcmVzb2x2ZSwgd3JhcHBlciwgMSksIGN0eCgkcmVqZWN0LCB3cmFwcGVyLCAxKSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAkcmVqZWN0LmNhbGwod3JhcHBlciwgZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBwcm9taXNlLl92ID0gdmFsdWU7XG4gICAgICBwcm9taXNlLl9zID0gMTtcbiAgICAgIG5vdGlmeShwcm9taXNlLCBmYWxzZSk7XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgJHJlamVjdC5jYWxsKHsgX3c6IHByb21pc2UsIF9kOiBmYWxzZSB9LCBlKTsgLy8gd3JhcFxuICB9XG59O1xuXG4vLyBjb25zdHJ1Y3RvciBwb2x5ZmlsbFxuaWYgKCFVU0VfTkFUSVZFKSB7XG4gIC8vIDI1LjQuMy4xIFByb21pc2UoZXhlY3V0b3IpXG4gICRQcm9taXNlID0gZnVuY3Rpb24gUHJvbWlzZShleGVjdXRvcikge1xuICAgIGFuSW5zdGFuY2UodGhpcywgJFByb21pc2UsIFBST01JU0UsICdfaCcpO1xuICAgIGFGdW5jdGlvbihleGVjdXRvcik7XG4gICAgSW50ZXJuYWwuY2FsbCh0aGlzKTtcbiAgICB0cnkge1xuICAgICAgZXhlY3V0b3IoY3R4KCRyZXNvbHZlLCB0aGlzLCAxKSwgY3R4KCRyZWplY3QsIHRoaXMsIDEpKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICRyZWplY3QuY2FsbCh0aGlzLCBlcnIpO1xuICAgIH1cbiAgfTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gIEludGVybmFsID0gZnVuY3Rpb24gUHJvbWlzZShleGVjdXRvcikge1xuICAgIHRoaXMuX2MgPSBbXTsgICAgICAgICAgICAgLy8gPC0gYXdhaXRpbmcgcmVhY3Rpb25zXG4gICAgdGhpcy5fYSA9IHVuZGVmaW5lZDsgICAgICAvLyA8LSBjaGVja2VkIGluIGlzVW5oYW5kbGVkIHJlYWN0aW9uc1xuICAgIHRoaXMuX3MgPSAwOyAgICAgICAgICAgICAgLy8gPC0gc3RhdGVcbiAgICB0aGlzLl9kID0gZmFsc2U7ICAgICAgICAgIC8vIDwtIGRvbmVcbiAgICB0aGlzLl92ID0gdW5kZWZpbmVkOyAgICAgIC8vIDwtIHZhbHVlXG4gICAgdGhpcy5faCA9IDA7ICAgICAgICAgICAgICAvLyA8LSByZWplY3Rpb24gc3RhdGUsIDAgLSBkZWZhdWx0LCAxIC0gaGFuZGxlZCwgMiAtIHVuaGFuZGxlZFxuICAgIHRoaXMuX24gPSBmYWxzZTsgICAgICAgICAgLy8gPC0gbm90aWZ5XG4gIH07XG4gIEludGVybmFsLnByb3RvdHlwZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lLWFsbCcpKCRQcm9taXNlLnByb3RvdHlwZSwge1xuICAgIC8vIDI1LjQuNS4zIFByb21pc2UucHJvdG90eXBlLnRoZW4ob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpXG4gICAgdGhlbjogZnVuY3Rpb24gdGhlbihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCkge1xuICAgICAgdmFyIHJlYWN0aW9uID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkoc3BlY2llc0NvbnN0cnVjdG9yKHRoaXMsICRQcm9taXNlKSk7XG4gICAgICByZWFjdGlvbi5vayA9IHR5cGVvZiBvbkZ1bGZpbGxlZCA9PSAnZnVuY3Rpb24nID8gb25GdWxmaWxsZWQgOiB0cnVlO1xuICAgICAgcmVhY3Rpb24uZmFpbCA9IHR5cGVvZiBvblJlamVjdGVkID09ICdmdW5jdGlvbicgJiYgb25SZWplY3RlZDtcbiAgICAgIHJlYWN0aW9uLmRvbWFpbiA9IGlzTm9kZSA/IHByb2Nlc3MuZG9tYWluIDogdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fYy5wdXNoKHJlYWN0aW9uKTtcbiAgICAgIGlmICh0aGlzLl9hKSB0aGlzLl9hLnB1c2gocmVhY3Rpb24pO1xuICAgICAgaWYgKHRoaXMuX3MpIG5vdGlmeSh0aGlzLCBmYWxzZSk7XG4gICAgICByZXR1cm4gcmVhY3Rpb24ucHJvbWlzZTtcbiAgICB9LFxuICAgIC8vIDI1LjQuNS4xIFByb21pc2UucHJvdG90eXBlLmNhdGNoKG9uUmVqZWN0ZWQpXG4gICAgJ2NhdGNoJzogZnVuY3Rpb24gKG9uUmVqZWN0ZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLnRoZW4odW5kZWZpbmVkLCBvblJlamVjdGVkKTtcbiAgICB9XG4gIH0pO1xuICBPd25Qcm9taXNlQ2FwYWJpbGl0eSA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcHJvbWlzZSA9IG5ldyBJbnRlcm5hbCgpO1xuICAgIHRoaXMucHJvbWlzZSA9IHByb21pc2U7XG4gICAgdGhpcy5yZXNvbHZlID0gY3R4KCRyZXNvbHZlLCBwcm9taXNlLCAxKTtcbiAgICB0aGlzLnJlamVjdCA9IGN0eCgkcmVqZWN0LCBwcm9taXNlLCAxKTtcbiAgfTtcbiAgbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUuZiA9IG5ld1Byb21pc2VDYXBhYmlsaXR5ID0gZnVuY3Rpb24gKEMpIHtcbiAgICByZXR1cm4gQyA9PT0gJFByb21pc2UgfHwgQyA9PT0gV3JhcHBlclxuICAgICAgPyBuZXcgT3duUHJvbWlzZUNhcGFiaWxpdHkoQylcbiAgICAgIDogbmV3R2VuZXJpY1Byb21pc2VDYXBhYmlsaXR5KEMpO1xuICB9O1xufVxuXG4kZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuVyArICRleHBvcnQuRiAqICFVU0VfTkFUSVZFLCB7IFByb21pc2U6ICRQcm9taXNlIH0pO1xucmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKSgkUHJvbWlzZSwgUFJPTUlTRSk7XG5yZXF1aXJlKCcuL19zZXQtc3BlY2llcycpKFBST01JU0UpO1xuV3JhcHBlciA9IHJlcXVpcmUoJy4vX2NvcmUnKVtQUk9NSVNFXTtcblxuLy8gc3RhdGljc1xuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhVVNFX05BVElWRSwgUFJPTUlTRSwge1xuICAvLyAyNS40LjQuNSBQcm9taXNlLnJlamVjdChyKVxuICByZWplY3Q6IGZ1bmN0aW9uIHJlamVjdChyKSB7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eSh0aGlzKTtcbiAgICB2YXIgJCRyZWplY3QgPSBjYXBhYmlsaXR5LnJlamVjdDtcbiAgICAkJHJlamVjdChyKTtcbiAgICByZXR1cm4gY2FwYWJpbGl0eS5wcm9taXNlO1xuICB9XG59KTtcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogKExJQlJBUlkgfHwgIVVTRV9OQVRJVkUpLCBQUk9NSVNFLCB7XG4gIC8vIDI1LjQuNC42IFByb21pc2UucmVzb2x2ZSh4KVxuICByZXNvbHZlOiBmdW5jdGlvbiByZXNvbHZlKHgpIHtcbiAgICByZXR1cm4gcHJvbWlzZVJlc29sdmUoTElCUkFSWSAmJiB0aGlzID09PSBXcmFwcGVyID8gJFByb21pc2UgOiB0aGlzLCB4KTtcbiAgfVxufSk7XG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICEoVVNFX05BVElWRSAmJiByZXF1aXJlKCcuL19pdGVyLWRldGVjdCcpKGZ1bmN0aW9uIChpdGVyKSB7XG4gICRQcm9taXNlLmFsbChpdGVyKVsnY2F0Y2gnXShlbXB0eSk7XG59KSksIFBST01JU0UsIHtcbiAgLy8gMjUuNC40LjEgUHJvbWlzZS5hbGwoaXRlcmFibGUpXG4gIGFsbDogZnVuY3Rpb24gYWxsKGl0ZXJhYmxlKSB7XG4gICAgdmFyIEMgPSB0aGlzO1xuICAgIHZhciBjYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkoQyk7XG4gICAgdmFyIHJlc29sdmUgPSBjYXBhYmlsaXR5LnJlc29sdmU7XG4gICAgdmFyIHJlamVjdCA9IGNhcGFiaWxpdHkucmVqZWN0O1xuICAgIHZhciByZXN1bHQgPSBwZXJmb3JtKGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciB2YWx1ZXMgPSBbXTtcbiAgICAgIHZhciBpbmRleCA9IDA7XG4gICAgICB2YXIgcmVtYWluaW5nID0gMTtcbiAgICAgIGZvck9mKGl0ZXJhYmxlLCBmYWxzZSwgZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgICAgICAgdmFyICRpbmRleCA9IGluZGV4Kys7XG4gICAgICAgIHZhciBhbHJlYWR5Q2FsbGVkID0gZmFsc2U7XG4gICAgICAgIHZhbHVlcy5wdXNoKHVuZGVmaW5lZCk7XG4gICAgICAgIHJlbWFpbmluZysrO1xuICAgICAgICBDLnJlc29sdmUocHJvbWlzZSkudGhlbihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICBpZiAoYWxyZWFkeUNhbGxlZCkgcmV0dXJuO1xuICAgICAgICAgIGFscmVhZHlDYWxsZWQgPSB0cnVlO1xuICAgICAgICAgIHZhbHVlc1skaW5kZXhdID0gdmFsdWU7XG4gICAgICAgICAgLS1yZW1haW5pbmcgfHwgcmVzb2x2ZSh2YWx1ZXMpO1xuICAgICAgICB9LCByZWplY3QpO1xuICAgICAgfSk7XG4gICAgICAtLXJlbWFpbmluZyB8fCByZXNvbHZlKHZhbHVlcyk7XG4gICAgfSk7XG4gICAgaWYgKHJlc3VsdC5lKSByZWplY3QocmVzdWx0LnYpO1xuICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gIH0sXG4gIC8vIDI1LjQuNC40IFByb21pc2UucmFjZShpdGVyYWJsZSlcbiAgcmFjZTogZnVuY3Rpb24gcmFjZShpdGVyYWJsZSkge1xuICAgIHZhciBDID0gdGhpcztcbiAgICB2YXIgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5KEMpO1xuICAgIHZhciByZWplY3QgPSBjYXBhYmlsaXR5LnJlamVjdDtcbiAgICB2YXIgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICBmb3JPZihpdGVyYWJsZSwgZmFsc2UsIGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gICAgICAgIEMucmVzb2x2ZShwcm9taXNlKS50aGVuKGNhcGFiaWxpdHkucmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIGlmIChyZXN1bHQuZSkgcmVqZWN0KHJlc3VsdC52KTtcbiAgICByZXR1cm4gY2FwYWJpbGl0eS5wcm9taXNlO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkYXQgPSByZXF1aXJlKCcuL19zdHJpbmctYXQnKSh0cnVlKTtcblxuLy8gMjEuMS4zLjI3IFN0cmluZy5wcm90b3R5cGVbQEBpdGVyYXRvcl0oKVxucmVxdWlyZSgnLi9faXRlci1kZWZpbmUnKShTdHJpbmcsICdTdHJpbmcnLCBmdW5jdGlvbiAoaXRlcmF0ZWQpIHtcbiAgdGhpcy5fdCA9IFN0cmluZyhpdGVyYXRlZCk7IC8vIHRhcmdldFxuICB0aGlzLl9pID0gMDsgICAgICAgICAgICAgICAgLy8gbmV4dCBpbmRleFxuLy8gMjEuMS41LjIuMSAlU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUlLm5leHQoKVxufSwgZnVuY3Rpb24gKCkge1xuICB2YXIgTyA9IHRoaXMuX3Q7XG4gIHZhciBpbmRleCA9IHRoaXMuX2k7XG4gIHZhciBwb2ludDtcbiAgaWYgKGluZGV4ID49IE8ubGVuZ3RoKSByZXR1cm4geyB2YWx1ZTogdW5kZWZpbmVkLCBkb25lOiB0cnVlIH07XG4gIHBvaW50ID0gJGF0KE8sIGluZGV4KTtcbiAgdGhpcy5faSArPSBwb2ludC5sZW5ndGg7XG4gIHJldHVybiB7IHZhbHVlOiBwb2ludCwgZG9uZTogZmFsc2UgfTtcbn0pO1xuIiwidmFyICRpdGVyYXRvcnMgPSByZXF1aXJlKCcuL2VzNi5hcnJheS5pdGVyYXRvcicpO1xudmFyIGdldEtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpO1xudmFyIHdrcyA9IHJlcXVpcmUoJy4vX3drcycpO1xudmFyIElURVJBVE9SID0gd2tzKCdpdGVyYXRvcicpO1xudmFyIFRPX1NUUklOR19UQUcgPSB3a3MoJ3RvU3RyaW5nVGFnJyk7XG52YXIgQXJyYXlWYWx1ZXMgPSBJdGVyYXRvcnMuQXJyYXk7XG5cbnZhciBET01JdGVyYWJsZXMgPSB7XG4gIENTU1J1bGVMaXN0OiB0cnVlLCAvLyBUT0RPOiBOb3Qgc3BlYyBjb21wbGlhbnQsIHNob3VsZCBiZSBmYWxzZS5cbiAgQ1NTU3R5bGVEZWNsYXJhdGlvbjogZmFsc2UsXG4gIENTU1ZhbHVlTGlzdDogZmFsc2UsXG4gIENsaWVudFJlY3RMaXN0OiBmYWxzZSxcbiAgRE9NUmVjdExpc3Q6IGZhbHNlLFxuICBET01TdHJpbmdMaXN0OiBmYWxzZSxcbiAgRE9NVG9rZW5MaXN0OiB0cnVlLFxuICBEYXRhVHJhbnNmZXJJdGVtTGlzdDogZmFsc2UsXG4gIEZpbGVMaXN0OiBmYWxzZSxcbiAgSFRNTEFsbENvbGxlY3Rpb246IGZhbHNlLFxuICBIVE1MQ29sbGVjdGlvbjogZmFsc2UsXG4gIEhUTUxGb3JtRWxlbWVudDogZmFsc2UsXG4gIEhUTUxTZWxlY3RFbGVtZW50OiBmYWxzZSxcbiAgTWVkaWFMaXN0OiB0cnVlLCAvLyBUT0RPOiBOb3Qgc3BlYyBjb21wbGlhbnQsIHNob3VsZCBiZSBmYWxzZS5cbiAgTWltZVR5cGVBcnJheTogZmFsc2UsXG4gIE5hbWVkTm9kZU1hcDogZmFsc2UsXG4gIE5vZGVMaXN0OiB0cnVlLFxuICBQYWludFJlcXVlc3RMaXN0OiBmYWxzZSxcbiAgUGx1Z2luOiBmYWxzZSxcbiAgUGx1Z2luQXJyYXk6IGZhbHNlLFxuICBTVkdMZW5ndGhMaXN0OiBmYWxzZSxcbiAgU1ZHTnVtYmVyTGlzdDogZmFsc2UsXG4gIFNWR1BhdGhTZWdMaXN0OiBmYWxzZSxcbiAgU1ZHUG9pbnRMaXN0OiBmYWxzZSxcbiAgU1ZHU3RyaW5nTGlzdDogZmFsc2UsXG4gIFNWR1RyYW5zZm9ybUxpc3Q6IGZhbHNlLFxuICBTb3VyY2VCdWZmZXJMaXN0OiBmYWxzZSxcbiAgU3R5bGVTaGVldExpc3Q6IHRydWUsIC8vIFRPRE86IE5vdCBzcGVjIGNvbXBsaWFudCwgc2hvdWxkIGJlIGZhbHNlLlxuICBUZXh0VHJhY2tDdWVMaXN0OiBmYWxzZSxcbiAgVGV4dFRyYWNrTGlzdDogZmFsc2UsXG4gIFRvdWNoTGlzdDogZmFsc2Vcbn07XG5cbmZvciAodmFyIGNvbGxlY3Rpb25zID0gZ2V0S2V5cyhET01JdGVyYWJsZXMpLCBpID0gMDsgaSA8IGNvbGxlY3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gIHZhciBOQU1FID0gY29sbGVjdGlvbnNbaV07XG4gIHZhciBleHBsaWNpdCA9IERPTUl0ZXJhYmxlc1tOQU1FXTtcbiAgdmFyIENvbGxlY3Rpb24gPSBnbG9iYWxbTkFNRV07XG4gIHZhciBwcm90byA9IENvbGxlY3Rpb24gJiYgQ29sbGVjdGlvbi5wcm90b3R5cGU7XG4gIHZhciBrZXk7XG4gIGlmIChwcm90bykge1xuICAgIGlmICghcHJvdG9bSVRFUkFUT1JdKSBoaWRlKHByb3RvLCBJVEVSQVRPUiwgQXJyYXlWYWx1ZXMpO1xuICAgIGlmICghcHJvdG9bVE9fU1RSSU5HX1RBR10pIGhpZGUocHJvdG8sIFRPX1NUUklOR19UQUcsIE5BTUUpO1xuICAgIEl0ZXJhdG9yc1tOQU1FXSA9IEFycmF5VmFsdWVzO1xuICAgIGlmIChleHBsaWNpdCkgZm9yIChrZXkgaW4gJGl0ZXJhdG9ycykgaWYgKCFwcm90b1trZXldKSByZWRlZmluZShwcm90bywga2V5LCAkaXRlcmF0b3JzW2tleV0sIHRydWUpO1xuICB9XG59XG4iLCI7KGZ1bmN0aW9uIChyb290LCBmYWN0b3J5KSB7XG5cdGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gXCJvYmplY3RcIikge1xuXHRcdC8vIENvbW1vbkpTXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzID0gZmFjdG9yeSgpO1xuXHR9XG5cdGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSB7XG5cdFx0Ly8gQU1EXG5cdFx0ZGVmaW5lKFtdLCBmYWN0b3J5KTtcblx0fVxuXHRlbHNlIHtcblx0XHQvLyBHbG9iYWwgKGJyb3dzZXIpXG5cdFx0cm9vdC5DcnlwdG9KUyA9IGZhY3RvcnkoKTtcblx0fVxufSh0aGlzLCBmdW5jdGlvbiAoKSB7XG5cblx0LyoqXG5cdCAqIENyeXB0b0pTIGNvcmUgY29tcG9uZW50cy5cblx0ICovXG5cdHZhciBDcnlwdG9KUyA9IENyeXB0b0pTIHx8IChmdW5jdGlvbiAoTWF0aCwgdW5kZWZpbmVkKSB7XG5cdCAgICAvKlxuXHQgICAgICogTG9jYWwgcG9seWZpbCBvZiBPYmplY3QuY3JlYXRlXG5cdCAgICAgKi9cblx0ICAgIHZhciBjcmVhdGUgPSBPYmplY3QuY3JlYXRlIHx8IChmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgZnVuY3Rpb24gRigpIHt9O1xuXG5cdCAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChvYmopIHtcblx0ICAgICAgICAgICAgdmFyIHN1YnR5cGU7XG5cblx0ICAgICAgICAgICAgRi5wcm90b3R5cGUgPSBvYmo7XG5cblx0ICAgICAgICAgICAgc3VidHlwZSA9IG5ldyBGKCk7XG5cblx0ICAgICAgICAgICAgRi5wcm90b3R5cGUgPSBudWxsO1xuXG5cdCAgICAgICAgICAgIHJldHVybiBzdWJ0eXBlO1xuXHQgICAgICAgIH07XG5cdCAgICB9KCkpXG5cblx0ICAgIC8qKlxuXHQgICAgICogQ3J5cHRvSlMgbmFtZXNwYWNlLlxuXHQgICAgICovXG5cdCAgICB2YXIgQyA9IHt9O1xuXG5cdCAgICAvKipcblx0ICAgICAqIExpYnJhcnkgbmFtZXNwYWNlLlxuXHQgICAgICovXG5cdCAgICB2YXIgQ19saWIgPSBDLmxpYiA9IHt9O1xuXG5cdCAgICAvKipcblx0ICAgICAqIEJhc2Ugb2JqZWN0IGZvciBwcm90b3R5cGFsIGluaGVyaXRhbmNlLlxuXHQgICAgICovXG5cdCAgICB2YXIgQmFzZSA9IENfbGliLkJhc2UgPSAoZnVuY3Rpb24gKCkge1xuXG5cblx0ICAgICAgICByZXR1cm4ge1xuXHQgICAgICAgICAgICAvKipcblx0ICAgICAgICAgICAgICogQ3JlYXRlcyBhIG5ldyBvYmplY3QgdGhhdCBpbmhlcml0cyBmcm9tIHRoaXMgb2JqZWN0LlxuXHQgICAgICAgICAgICAgKlxuXHQgICAgICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gb3ZlcnJpZGVzIFByb3BlcnRpZXMgdG8gY29weSBpbnRvIHRoZSBuZXcgb2JqZWN0LlxuXHQgICAgICAgICAgICAgKlxuXHQgICAgICAgICAgICAgKiBAcmV0dXJuIHtPYmplY3R9IFRoZSBuZXcgb2JqZWN0LlxuXHQgICAgICAgICAgICAgKlxuXHQgICAgICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICAgICAqXG5cdCAgICAgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICAgICAqXG5cdCAgICAgICAgICAgICAqICAgICB2YXIgTXlUeXBlID0gQ3J5cHRvSlMubGliLkJhc2UuZXh0ZW5kKHtcblx0ICAgICAgICAgICAgICogICAgICAgICBmaWVsZDogJ3ZhbHVlJyxcblx0ICAgICAgICAgICAgICpcblx0ICAgICAgICAgICAgICogICAgICAgICBtZXRob2Q6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgICogICAgICAgICB9XG5cdCAgICAgICAgICAgICAqICAgICB9KTtcblx0ICAgICAgICAgICAgICovXG5cdCAgICAgICAgICAgIGV4dGVuZDogZnVuY3Rpb24gKG92ZXJyaWRlcykge1xuXHQgICAgICAgICAgICAgICAgLy8gU3Bhd25cblx0ICAgICAgICAgICAgICAgIHZhciBzdWJ0eXBlID0gY3JlYXRlKHRoaXMpO1xuXG5cdCAgICAgICAgICAgICAgICAvLyBBdWdtZW50XG5cdCAgICAgICAgICAgICAgICBpZiAob3ZlcnJpZGVzKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgc3VidHlwZS5taXhJbihvdmVycmlkZXMpO1xuXHQgICAgICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgICAgICAvLyBDcmVhdGUgZGVmYXVsdCBpbml0aWFsaXplclxuXHQgICAgICAgICAgICAgICAgaWYgKCFzdWJ0eXBlLmhhc093blByb3BlcnR5KCdpbml0JykgfHwgdGhpcy5pbml0ID09PSBzdWJ0eXBlLmluaXQpIHtcblx0ICAgICAgICAgICAgICAgICAgICBzdWJ0eXBlLmluaXQgPSBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgICAgIHN1YnR5cGUuJHN1cGVyLmluaXQuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblx0ICAgICAgICAgICAgICAgICAgICB9O1xuXHQgICAgICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgICAgICAvLyBJbml0aWFsaXplcidzIHByb3RvdHlwZSBpcyB0aGUgc3VidHlwZSBvYmplY3Rcblx0ICAgICAgICAgICAgICAgIHN1YnR5cGUuaW5pdC5wcm90b3R5cGUgPSBzdWJ0eXBlO1xuXG5cdCAgICAgICAgICAgICAgICAvLyBSZWZlcmVuY2Ugc3VwZXJ0eXBlXG5cdCAgICAgICAgICAgICAgICBzdWJ0eXBlLiRzdXBlciA9IHRoaXM7XG5cblx0ICAgICAgICAgICAgICAgIHJldHVybiBzdWJ0eXBlO1xuXHQgICAgICAgICAgICB9LFxuXG5cdCAgICAgICAgICAgIC8qKlxuXHQgICAgICAgICAgICAgKiBFeHRlbmRzIHRoaXMgb2JqZWN0IGFuZCBydW5zIHRoZSBpbml0IG1ldGhvZC5cblx0ICAgICAgICAgICAgICogQXJndW1lbnRzIHRvIGNyZWF0ZSgpIHdpbGwgYmUgcGFzc2VkIHRvIGluaXQoKS5cblx0ICAgICAgICAgICAgICpcblx0ICAgICAgICAgICAgICogQHJldHVybiB7T2JqZWN0fSBUaGUgbmV3IG9iamVjdC5cblx0ICAgICAgICAgICAgICpcblx0ICAgICAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAgICAgKlxuXHQgICAgICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAgICAgKlxuXHQgICAgICAgICAgICAgKiAgICAgdmFyIGluc3RhbmNlID0gTXlUeXBlLmNyZWF0ZSgpO1xuXHQgICAgICAgICAgICAgKi9cblx0ICAgICAgICAgICAgY3JlYXRlOiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgaW5zdGFuY2UgPSB0aGlzLmV4dGVuZCgpO1xuXHQgICAgICAgICAgICAgICAgaW5zdGFuY2UuaW5pdC5hcHBseShpbnN0YW5jZSwgYXJndW1lbnRzKTtcblxuXHQgICAgICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlO1xuXHQgICAgICAgICAgICB9LFxuXG5cdCAgICAgICAgICAgIC8qKlxuXHQgICAgICAgICAgICAgKiBJbml0aWFsaXplcyBhIG5ld2x5IGNyZWF0ZWQgb2JqZWN0LlxuXHQgICAgICAgICAgICAgKiBPdmVycmlkZSB0aGlzIG1ldGhvZCB0byBhZGQgc29tZSBsb2dpYyB3aGVuIHlvdXIgb2JqZWN0cyBhcmUgY3JlYXRlZC5cblx0ICAgICAgICAgICAgICpcblx0ICAgICAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgICAgICpcblx0ICAgICAgICAgICAgICogICAgIHZhciBNeVR5cGUgPSBDcnlwdG9KUy5saWIuQmFzZS5leHRlbmQoe1xuXHQgICAgICAgICAgICAgKiAgICAgICAgIGluaXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgICogICAgICAgICAgICAgLy8gLi4uXG5cdCAgICAgICAgICAgICAqICAgICAgICAgfVxuXHQgICAgICAgICAgICAgKiAgICAgfSk7XG5cdCAgICAgICAgICAgICAqL1xuXHQgICAgICAgICAgICBpbml0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIH0sXG5cblx0ICAgICAgICAgICAgLyoqXG5cdCAgICAgICAgICAgICAqIENvcGllcyBwcm9wZXJ0aWVzIGludG8gdGhpcyBvYmplY3QuXG5cdCAgICAgICAgICAgICAqXG5cdCAgICAgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wZXJ0aWVzIFRoZSBwcm9wZXJ0aWVzIHRvIG1peCBpbi5cblx0ICAgICAgICAgICAgICpcblx0ICAgICAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgICAgICpcblx0ICAgICAgICAgICAgICogICAgIE15VHlwZS5taXhJbih7XG5cdCAgICAgICAgICAgICAqICAgICAgICAgZmllbGQ6ICd2YWx1ZSdcblx0ICAgICAgICAgICAgICogICAgIH0pO1xuXHQgICAgICAgICAgICAgKi9cblx0ICAgICAgICAgICAgbWl4SW46IGZ1bmN0aW9uIChwcm9wZXJ0aWVzKSB7XG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eU5hbWUgaW4gcHJvcGVydGllcykge1xuXHQgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzLmhhc093blByb3BlcnR5KHByb3BlcnR5TmFtZSkpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgdGhpc1twcm9wZXJ0eU5hbWVdID0gcHJvcGVydGllc1twcm9wZXJ0eU5hbWVdO1xuXHQgICAgICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAgICAgLy8gSUUgd29uJ3QgY29weSB0b1N0cmluZyB1c2luZyB0aGUgbG9vcCBhYm92ZVxuXHQgICAgICAgICAgICAgICAgaWYgKHByb3BlcnRpZXMuaGFzT3duUHJvcGVydHkoJ3RvU3RyaW5nJykpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLnRvU3RyaW5nID0gcHJvcGVydGllcy50b1N0cmluZztcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfSxcblxuXHQgICAgICAgICAgICAvKipcblx0ICAgICAgICAgICAgICogQ3JlYXRlcyBhIGNvcHkgb2YgdGhpcyBvYmplY3QuXG5cdCAgICAgICAgICAgICAqXG5cdCAgICAgICAgICAgICAqIEByZXR1cm4ge09iamVjdH0gVGhlIGNsb25lLlxuXHQgICAgICAgICAgICAgKlxuXHQgICAgICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAgICAgKlxuXHQgICAgICAgICAgICAgKiAgICAgdmFyIGNsb25lID0gaW5zdGFuY2UuY2xvbmUoKTtcblx0ICAgICAgICAgICAgICovXG5cdCAgICAgICAgICAgIGNsb25lOiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pbml0LnByb3RvdHlwZS5leHRlbmQodGhpcyk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9O1xuXHQgICAgfSgpKTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBBbiBhcnJheSBvZiAzMi1iaXQgd29yZHMuXG5cdCAgICAgKlxuXHQgICAgICogQHByb3BlcnR5IHtBcnJheX0gd29yZHMgVGhlIGFycmF5IG9mIDMyLWJpdCB3b3Jkcy5cblx0ICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBzaWdCeXRlcyBUaGUgbnVtYmVyIG9mIHNpZ25pZmljYW50IGJ5dGVzIGluIHRoaXMgd29yZCBhcnJheS5cblx0ICAgICAqL1xuXHQgICAgdmFyIFdvcmRBcnJheSA9IENfbGliLldvcmRBcnJheSA9IEJhc2UuZXh0ZW5kKHtcblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBJbml0aWFsaXplcyBhIG5ld2x5IGNyZWF0ZWQgd29yZCBhcnJheS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7QXJyYXl9IHdvcmRzIChPcHRpb25hbCkgQW4gYXJyYXkgb2YgMzItYml0IHdvcmRzLlxuXHQgICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzaWdCeXRlcyAoT3B0aW9uYWwpIFRoZSBudW1iZXIgb2Ygc2lnbmlmaWNhbnQgYnl0ZXMgaW4gdGhlIHdvcmRzLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgd29yZEFycmF5ID0gQ3J5cHRvSlMubGliLldvcmRBcnJheS5jcmVhdGUoKTtcblx0ICAgICAgICAgKiAgICAgdmFyIHdvcmRBcnJheSA9IENyeXB0b0pTLmxpYi5Xb3JkQXJyYXkuY3JlYXRlKFsweDAwMDEwMjAzLCAweDA0MDUwNjA3XSk7XG5cdCAgICAgICAgICogICAgIHZhciB3b3JkQXJyYXkgPSBDcnlwdG9KUy5saWIuV29yZEFycmF5LmNyZWF0ZShbMHgwMDAxMDIwMywgMHgwNDA1MDYwN10sIDYpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIGluaXQ6IGZ1bmN0aW9uICh3b3Jkcywgc2lnQnl0ZXMpIHtcblx0ICAgICAgICAgICAgd29yZHMgPSB0aGlzLndvcmRzID0gd29yZHMgfHwgW107XG5cblx0ICAgICAgICAgICAgaWYgKHNpZ0J5dGVzICE9IHVuZGVmaW5lZCkge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5zaWdCeXRlcyA9IHNpZ0J5dGVzO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgdGhpcy5zaWdCeXRlcyA9IHdvcmRzLmxlbmd0aCAqIDQ7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29udmVydHMgdGhpcyB3b3JkIGFycmF5IHRvIGEgc3RyaW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtFbmNvZGVyfSBlbmNvZGVyIChPcHRpb25hbCkgVGhlIGVuY29kaW5nIHN0cmF0ZWd5IHRvIHVzZS4gRGVmYXVsdDogQ3J5cHRvSlMuZW5jLkhleFxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7c3RyaW5nfSBUaGUgc3RyaW5naWZpZWQgd29yZCBhcnJheS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIHN0cmluZyA9IHdvcmRBcnJheSArICcnO1xuXHQgICAgICAgICAqICAgICB2YXIgc3RyaW5nID0gd29yZEFycmF5LnRvU3RyaW5nKCk7XG5cdCAgICAgICAgICogICAgIHZhciBzdHJpbmcgPSB3b3JkQXJyYXkudG9TdHJpbmcoQ3J5cHRvSlMuZW5jLlV0ZjgpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIHRvU3RyaW5nOiBmdW5jdGlvbiAoZW5jb2Rlcikge1xuXHQgICAgICAgICAgICByZXR1cm4gKGVuY29kZXIgfHwgSGV4KS5zdHJpbmdpZnkodGhpcyk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENvbmNhdGVuYXRlcyBhIHdvcmQgYXJyYXkgdG8gdGhpcyB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl9IHdvcmRBcnJheSBUaGUgd29yZCBhcnJheSB0byBhcHBlbmQuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoaXMgd29yZCBhcnJheS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgd29yZEFycmF5MS5jb25jYXQod29yZEFycmF5Mik7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgY29uY2F0OiBmdW5jdGlvbiAod29yZEFycmF5KSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICB2YXIgdGhpc1dvcmRzID0gdGhpcy53b3Jkcztcblx0ICAgICAgICAgICAgdmFyIHRoYXRXb3JkcyA9IHdvcmRBcnJheS53b3Jkcztcblx0ICAgICAgICAgICAgdmFyIHRoaXNTaWdCeXRlcyA9IHRoaXMuc2lnQnl0ZXM7XG5cdCAgICAgICAgICAgIHZhciB0aGF0U2lnQnl0ZXMgPSB3b3JkQXJyYXkuc2lnQnl0ZXM7XG5cblx0ICAgICAgICAgICAgLy8gQ2xhbXAgZXhjZXNzIGJpdHNcblx0ICAgICAgICAgICAgdGhpcy5jbGFtcCgpO1xuXG5cdCAgICAgICAgICAgIC8vIENvbmNhdFxuXHQgICAgICAgICAgICBpZiAodGhpc1NpZ0J5dGVzICUgNCkge1xuXHQgICAgICAgICAgICAgICAgLy8gQ29weSBvbmUgYnl0ZSBhdCBhIHRpbWVcblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhhdFNpZ0J5dGVzOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgdGhhdEJ5dGUgPSAodGhhdFdvcmRzW2kgPj4+IDJdID4+PiAoMjQgLSAoaSAlIDQpICogOCkpICYgMHhmZjtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzV29yZHNbKHRoaXNTaWdCeXRlcyArIGkpID4+PiAyXSB8PSB0aGF0Qnl0ZSA8PCAoMjQgLSAoKHRoaXNTaWdCeXRlcyArIGkpICUgNCkgKiA4KTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIC8vIENvcHkgb25lIHdvcmQgYXQgYSB0aW1lXG5cdCAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoYXRTaWdCeXRlczsgaSArPSA0KSB7XG5cdCAgICAgICAgICAgICAgICAgICAgdGhpc1dvcmRzWyh0aGlzU2lnQnl0ZXMgKyBpKSA+Pj4gMl0gPSB0aGF0V29yZHNbaSA+Pj4gMl07XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgdGhpcy5zaWdCeXRlcyArPSB0aGF0U2lnQnl0ZXM7XG5cblx0ICAgICAgICAgICAgLy8gQ2hhaW5hYmxlXG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBSZW1vdmVzIGluc2lnbmlmaWNhbnQgYml0cy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgd29yZEFycmF5LmNsYW1wKCk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgY2xhbXA6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciB3b3JkcyA9IHRoaXMud29yZHM7XG5cdCAgICAgICAgICAgIHZhciBzaWdCeXRlcyA9IHRoaXMuc2lnQnl0ZXM7XG5cblx0ICAgICAgICAgICAgLy8gQ2xhbXBcblx0ICAgICAgICAgICAgd29yZHNbc2lnQnl0ZXMgPj4+IDJdICY9IDB4ZmZmZmZmZmYgPDwgKDMyIC0gKHNpZ0J5dGVzICUgNCkgKiA4KTtcblx0ICAgICAgICAgICAgd29yZHMubGVuZ3RoID0gTWF0aC5jZWlsKHNpZ0J5dGVzIC8gNCk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENyZWF0ZXMgYSBjb3B5IG9mIHRoaXMgd29yZCBhcnJheS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIGNsb25lLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgY2xvbmUgPSB3b3JkQXJyYXkuY2xvbmUoKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBjbG9uZTogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgY2xvbmUgPSBCYXNlLmNsb25lLmNhbGwodGhpcyk7XG5cdCAgICAgICAgICAgIGNsb25lLndvcmRzID0gdGhpcy53b3Jkcy5zbGljZSgwKTtcblxuXHQgICAgICAgICAgICByZXR1cm4gY2xvbmU7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENyZWF0ZXMgYSB3b3JkIGFycmF5IGZpbGxlZCB3aXRoIHJhbmRvbSBieXRlcy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBuQnl0ZXMgVGhlIG51bWJlciBvZiByYW5kb20gYnl0ZXMgdG8gZ2VuZXJhdGUuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSByYW5kb20gd29yZCBhcnJheS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBzdGF0aWNcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIHdvcmRBcnJheSA9IENyeXB0b0pTLmxpYi5Xb3JkQXJyYXkucmFuZG9tKDE2KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICByYW5kb206IGZ1bmN0aW9uIChuQnl0ZXMpIHtcblx0ICAgICAgICAgICAgdmFyIHdvcmRzID0gW107XG5cblx0ICAgICAgICAgICAgdmFyIHIgPSAoZnVuY3Rpb24gKG1fdykge1xuXHQgICAgICAgICAgICAgICAgdmFyIG1fdyA9IG1fdztcblx0ICAgICAgICAgICAgICAgIHZhciBtX3ogPSAweDNhZGU2OGIxO1xuXHQgICAgICAgICAgICAgICAgdmFyIG1hc2sgPSAweGZmZmZmZmZmO1xuXG5cdCAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAgICAgICAgIG1feiA9ICgweDkwNjkgKiAobV96ICYgMHhGRkZGKSArIChtX3ogPj4gMHgxMCkpICYgbWFzaztcblx0ICAgICAgICAgICAgICAgICAgICBtX3cgPSAoMHg0NjUwICogKG1fdyAmIDB4RkZGRikgKyAobV93ID4+IDB4MTApKSAmIG1hc2s7XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9ICgobV96IDw8IDB4MTApICsgbV93KSAmIG1hc2s7XG5cdCAgICAgICAgICAgICAgICAgICAgcmVzdWx0IC89IDB4MTAwMDAwMDAwO1xuXHQgICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAwLjU7XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCAqIChNYXRoLnJhbmRvbSgpID4gLjUgPyAxIDogLTEpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9KTtcblxuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgcmNhY2hlOyBpIDwgbkJ5dGVzOyBpICs9IDQpIHtcblx0ICAgICAgICAgICAgICAgIHZhciBfciA9IHIoKHJjYWNoZSB8fCBNYXRoLnJhbmRvbSgpKSAqIDB4MTAwMDAwMDAwKTtcblxuXHQgICAgICAgICAgICAgICAgcmNhY2hlID0gX3IoKSAqIDB4M2FkZTY3Yjc7XG5cdCAgICAgICAgICAgICAgICB3b3Jkcy5wdXNoKChfcigpICogMHgxMDAwMDAwMDApIHwgMCk7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICByZXR1cm4gbmV3IFdvcmRBcnJheS5pbml0KHdvcmRzLCBuQnl0ZXMpO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXG5cdCAgICAvKipcblx0ICAgICAqIEVuY29kZXIgbmFtZXNwYWNlLlxuXHQgICAgICovXG5cdCAgICB2YXIgQ19lbmMgPSBDLmVuYyA9IHt9O1xuXG5cdCAgICAvKipcblx0ICAgICAqIEhleCBlbmNvZGluZyBzdHJhdGVneS5cblx0ICAgICAqL1xuXHQgICAgdmFyIEhleCA9IENfZW5jLkhleCA9IHtcblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDb252ZXJ0cyBhIHdvcmQgYXJyYXkgdG8gYSBoZXggc3RyaW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl9IHdvcmRBcnJheSBUaGUgd29yZCBhcnJheS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGhleCBzdHJpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBoZXhTdHJpbmcgPSBDcnlwdG9KUy5lbmMuSGV4LnN0cmluZ2lmeSh3b3JkQXJyYXkpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIHN0cmluZ2lmeTogZnVuY3Rpb24gKHdvcmRBcnJheSkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgdmFyIHdvcmRzID0gd29yZEFycmF5LndvcmRzO1xuXHQgICAgICAgICAgICB2YXIgc2lnQnl0ZXMgPSB3b3JkQXJyYXkuc2lnQnl0ZXM7XG5cblx0ICAgICAgICAgICAgLy8gQ29udmVydFxuXHQgICAgICAgICAgICB2YXIgaGV4Q2hhcnMgPSBbXTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaWdCeXRlczsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgYml0ZSA9ICh3b3Jkc1tpID4+PiAyXSA+Pj4gKDI0IC0gKGkgJSA0KSAqIDgpKSAmIDB4ZmY7XG5cdCAgICAgICAgICAgICAgICBoZXhDaGFycy5wdXNoKChiaXRlID4+PiA0KS50b1N0cmluZygxNikpO1xuXHQgICAgICAgICAgICAgICAgaGV4Q2hhcnMucHVzaCgoYml0ZSAmIDB4MGYpLnRvU3RyaW5nKDE2KSk7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICByZXR1cm4gaGV4Q2hhcnMuam9pbignJyk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENvbnZlcnRzIGEgaGV4IHN0cmluZyB0byBhIHdvcmQgYXJyYXkuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gaGV4U3RyIFRoZSBoZXggc3RyaW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7V29yZEFycmF5fSBUaGUgd29yZCBhcnJheS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBzdGF0aWNcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIHdvcmRBcnJheSA9IENyeXB0b0pTLmVuYy5IZXgucGFyc2UoaGV4U3RyaW5nKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBwYXJzZTogZnVuY3Rpb24gKGhleFN0cikge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dFxuXHQgICAgICAgICAgICB2YXIgaGV4U3RyTGVuZ3RoID0gaGV4U3RyLmxlbmd0aDtcblxuXHQgICAgICAgICAgICAvLyBDb252ZXJ0XG5cdCAgICAgICAgICAgIHZhciB3b3JkcyA9IFtdO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGhleFN0ckxlbmd0aDsgaSArPSAyKSB7XG5cdCAgICAgICAgICAgICAgICB3b3Jkc1tpID4+PiAzXSB8PSBwYXJzZUludChoZXhTdHIuc3Vic3RyKGksIDIpLCAxNikgPDwgKDI0IC0gKGkgJSA4KSAqIDQpO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgcmV0dXJuIG5ldyBXb3JkQXJyYXkuaW5pdCh3b3JkcywgaGV4U3RyTGVuZ3RoIC8gMik7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBMYXRpbjEgZW5jb2Rpbmcgc3RyYXRlZ3kuXG5cdCAgICAgKi9cblx0ICAgIHZhciBMYXRpbjEgPSBDX2VuYy5MYXRpbjEgPSB7XG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29udmVydHMgYSB3b3JkIGFycmF5IHRvIGEgTGF0aW4xIHN0cmluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7V29yZEFycmF5fSB3b3JkQXJyYXkgVGhlIHdvcmQgYXJyYXkuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBMYXRpbjEgc3RyaW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgbGF0aW4xU3RyaW5nID0gQ3J5cHRvSlMuZW5jLkxhdGluMS5zdHJpbmdpZnkod29yZEFycmF5KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBzdHJpbmdpZnk6IGZ1bmN0aW9uICh3b3JkQXJyYXkpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciB3b3JkcyA9IHdvcmRBcnJheS53b3Jkcztcblx0ICAgICAgICAgICAgdmFyIHNpZ0J5dGVzID0gd29yZEFycmF5LnNpZ0J5dGVzO1xuXG5cdCAgICAgICAgICAgIC8vIENvbnZlcnRcblx0ICAgICAgICAgICAgdmFyIGxhdGluMUNoYXJzID0gW107XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2lnQnl0ZXM7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgdmFyIGJpdGUgPSAod29yZHNbaSA+Pj4gMl0gPj4+ICgyNCAtIChpICUgNCkgKiA4KSkgJiAweGZmO1xuXHQgICAgICAgICAgICAgICAgbGF0aW4xQ2hhcnMucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKGJpdGUpKTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIHJldHVybiBsYXRpbjFDaGFycy5qb2luKCcnKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29udmVydHMgYSBMYXRpbjEgc3RyaW5nIHRvIGEgd29yZCBhcnJheS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBsYXRpbjFTdHIgVGhlIExhdGluMSBzdHJpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgd29yZEFycmF5ID0gQ3J5cHRvSlMuZW5jLkxhdGluMS5wYXJzZShsYXRpbjFTdHJpbmcpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIHBhcnNlOiBmdW5jdGlvbiAobGF0aW4xU3RyKSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0XG5cdCAgICAgICAgICAgIHZhciBsYXRpbjFTdHJMZW5ndGggPSBsYXRpbjFTdHIubGVuZ3RoO1xuXG5cdCAgICAgICAgICAgIC8vIENvbnZlcnRcblx0ICAgICAgICAgICAgdmFyIHdvcmRzID0gW107XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGF0aW4xU3RyTGVuZ3RoOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIHdvcmRzW2kgPj4+IDJdIHw9IChsYXRpbjFTdHIuY2hhckNvZGVBdChpKSAmIDB4ZmYpIDw8ICgyNCAtIChpICUgNCkgKiA4KTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIHJldHVybiBuZXcgV29yZEFycmF5LmluaXQod29yZHMsIGxhdGluMVN0ckxlbmd0aCk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBVVEYtOCBlbmNvZGluZyBzdHJhdGVneS5cblx0ICAgICAqL1xuXHQgICAgdmFyIFV0ZjggPSBDX2VuYy5VdGY4ID0ge1xuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENvbnZlcnRzIGEgd29yZCBhcnJheSB0byBhIFVURi04IHN0cmluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7V29yZEFycmF5fSB3b3JkQXJyYXkgVGhlIHdvcmQgYXJyYXkuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBVVEYtOCBzdHJpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciB1dGY4U3RyaW5nID0gQ3J5cHRvSlMuZW5jLlV0Zjguc3RyaW5naWZ5KHdvcmRBcnJheSk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgc3RyaW5naWZ5OiBmdW5jdGlvbiAod29yZEFycmF5KSB7XG5cdCAgICAgICAgICAgIHRyeSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGVzY2FwZShMYXRpbjEuc3RyaW5naWZ5KHdvcmRBcnJheSkpKTtcblx0ICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuXHQgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdNYWxmb3JtZWQgVVRGLTggZGF0YScpO1xuXHQgICAgICAgICAgICB9XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENvbnZlcnRzIGEgVVRGLTggc3RyaW5nIHRvIGEgd29yZCBhcnJheS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1dGY4U3RyIFRoZSBVVEYtOCBzdHJpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgd29yZEFycmF5ID0gQ3J5cHRvSlMuZW5jLlV0ZjgucGFyc2UodXRmOFN0cmluZyk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgcGFyc2U6IGZ1bmN0aW9uICh1dGY4U3RyKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBMYXRpbjEucGFyc2UodW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KHV0ZjhTdHIpKSk7XG5cdCAgICAgICAgfVxuXHQgICAgfTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBBYnN0cmFjdCBidWZmZXJlZCBibG9jayBhbGdvcml0aG0gdGVtcGxhdGUuXG5cdCAgICAgKlxuXHQgICAgICogVGhlIHByb3BlcnR5IGJsb2NrU2l6ZSBtdXN0IGJlIGltcGxlbWVudGVkIGluIGEgY29uY3JldGUgc3VidHlwZS5cblx0ICAgICAqXG5cdCAgICAgKiBAcHJvcGVydHkge251bWJlcn0gX21pbkJ1ZmZlclNpemUgVGhlIG51bWJlciBvZiBibG9ja3MgdGhhdCBzaG91bGQgYmUga2VwdCB1bnByb2Nlc3NlZCBpbiB0aGUgYnVmZmVyLiBEZWZhdWx0OiAwXG5cdCAgICAgKi9cblx0ICAgIHZhciBCdWZmZXJlZEJsb2NrQWxnb3JpdGhtID0gQ19saWIuQnVmZmVyZWRCbG9ja0FsZ29yaXRobSA9IEJhc2UuZXh0ZW5kKHtcblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBSZXNldHMgdGhpcyBibG9jayBhbGdvcml0aG0ncyBkYXRhIGJ1ZmZlciB0byBpdHMgaW5pdGlhbCBzdGF0ZS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgYnVmZmVyZWRCbG9ja0FsZ29yaXRobS5yZXNldCgpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIHJlc2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIC8vIEluaXRpYWwgdmFsdWVzXG5cdCAgICAgICAgICAgIHRoaXMuX2RhdGEgPSBuZXcgV29yZEFycmF5LmluaXQoKTtcblx0ICAgICAgICAgICAgdGhpcy5fbkRhdGFCeXRlcyA9IDA7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIEFkZHMgbmV3IGRhdGEgdG8gdGhpcyBibG9jayBhbGdvcml0aG0ncyBidWZmZXIuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IGRhdGEgVGhlIGRhdGEgdG8gYXBwZW5kLiBTdHJpbmdzIGFyZSBjb252ZXJ0ZWQgdG8gYSBXb3JkQXJyYXkgdXNpbmcgVVRGLTguXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIGJ1ZmZlcmVkQmxvY2tBbGdvcml0aG0uX2FwcGVuZCgnZGF0YScpO1xuXHQgICAgICAgICAqICAgICBidWZmZXJlZEJsb2NrQWxnb3JpdGhtLl9hcHBlbmQod29yZEFycmF5KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBfYXBwZW5kOiBmdW5jdGlvbiAoZGF0YSkge1xuXHQgICAgICAgICAgICAvLyBDb252ZXJ0IHN0cmluZyB0byBXb3JkQXJyYXksIGVsc2UgYXNzdW1lIFdvcmRBcnJheSBhbHJlYWR5XG5cdCAgICAgICAgICAgIGlmICh0eXBlb2YgZGF0YSA9PSAnc3RyaW5nJykge1xuXHQgICAgICAgICAgICAgICAgZGF0YSA9IFV0ZjgucGFyc2UoZGF0YSk7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAvLyBBcHBlbmRcblx0ICAgICAgICAgICAgdGhpcy5fZGF0YS5jb25jYXQoZGF0YSk7XG5cdCAgICAgICAgICAgIHRoaXMuX25EYXRhQnl0ZXMgKz0gZGF0YS5zaWdCeXRlcztcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogUHJvY2Vzc2VzIGF2YWlsYWJsZSBkYXRhIGJsb2Nrcy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIFRoaXMgbWV0aG9kIGludm9rZXMgX2RvUHJvY2Vzc0Jsb2NrKG9mZnNldCksIHdoaWNoIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgYSBjb25jcmV0ZSBzdWJ0eXBlLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtib29sZWFufSBkb0ZsdXNoIFdoZXRoZXIgYWxsIGJsb2NrcyBhbmQgcGFydGlhbCBibG9ja3Mgc2hvdWxkIGJlIHByb2Nlc3NlZC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIHByb2Nlc3NlZCBkYXRhLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgcHJvY2Vzc2VkRGF0YSA9IGJ1ZmZlcmVkQmxvY2tBbGdvcml0aG0uX3Byb2Nlc3MoKTtcblx0ICAgICAgICAgKiAgICAgdmFyIHByb2Nlc3NlZERhdGEgPSBidWZmZXJlZEJsb2NrQWxnb3JpdGhtLl9wcm9jZXNzKCEhJ2ZsdXNoJyk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgX3Byb2Nlc3M6IGZ1bmN0aW9uIChkb0ZsdXNoKSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICB2YXIgZGF0YSA9IHRoaXMuX2RhdGE7XG5cdCAgICAgICAgICAgIHZhciBkYXRhV29yZHMgPSBkYXRhLndvcmRzO1xuXHQgICAgICAgICAgICB2YXIgZGF0YVNpZ0J5dGVzID0gZGF0YS5zaWdCeXRlcztcblx0ICAgICAgICAgICAgdmFyIGJsb2NrU2l6ZSA9IHRoaXMuYmxvY2tTaXplO1xuXHQgICAgICAgICAgICB2YXIgYmxvY2tTaXplQnl0ZXMgPSBibG9ja1NpemUgKiA0O1xuXG5cdCAgICAgICAgICAgIC8vIENvdW50IGJsb2NrcyByZWFkeVxuXHQgICAgICAgICAgICB2YXIgbkJsb2Nrc1JlYWR5ID0gZGF0YVNpZ0J5dGVzIC8gYmxvY2tTaXplQnl0ZXM7XG5cdCAgICAgICAgICAgIGlmIChkb0ZsdXNoKSB7XG5cdCAgICAgICAgICAgICAgICAvLyBSb3VuZCB1cCB0byBpbmNsdWRlIHBhcnRpYWwgYmxvY2tzXG5cdCAgICAgICAgICAgICAgICBuQmxvY2tzUmVhZHkgPSBNYXRoLmNlaWwobkJsb2Nrc1JlYWR5KTtcblx0ICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgIC8vIFJvdW5kIGRvd24gdG8gaW5jbHVkZSBvbmx5IGZ1bGwgYmxvY2tzLFxuXHQgICAgICAgICAgICAgICAgLy8gbGVzcyB0aGUgbnVtYmVyIG9mIGJsb2NrcyB0aGF0IG11c3QgcmVtYWluIGluIHRoZSBidWZmZXJcblx0ICAgICAgICAgICAgICAgIG5CbG9ja3NSZWFkeSA9IE1hdGgubWF4KChuQmxvY2tzUmVhZHkgfCAwKSAtIHRoaXMuX21pbkJ1ZmZlclNpemUsIDApO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgLy8gQ291bnQgd29yZHMgcmVhZHlcblx0ICAgICAgICAgICAgdmFyIG5Xb3Jkc1JlYWR5ID0gbkJsb2Nrc1JlYWR5ICogYmxvY2tTaXplO1xuXG5cdCAgICAgICAgICAgIC8vIENvdW50IGJ5dGVzIHJlYWR5XG5cdCAgICAgICAgICAgIHZhciBuQnl0ZXNSZWFkeSA9IE1hdGgubWluKG5Xb3Jkc1JlYWR5ICogNCwgZGF0YVNpZ0J5dGVzKTtcblxuXHQgICAgICAgICAgICAvLyBQcm9jZXNzIGJsb2Nrc1xuXHQgICAgICAgICAgICBpZiAobldvcmRzUmVhZHkpIHtcblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIG9mZnNldCA9IDA7IG9mZnNldCA8IG5Xb3Jkc1JlYWR5OyBvZmZzZXQgKz0gYmxvY2tTaXplKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgLy8gUGVyZm9ybSBjb25jcmV0ZS1hbGdvcml0aG0gbG9naWNcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzLl9kb1Byb2Nlc3NCbG9jayhkYXRhV29yZHMsIG9mZnNldCk7XG5cdCAgICAgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgICAgIC8vIFJlbW92ZSBwcm9jZXNzZWQgd29yZHNcblx0ICAgICAgICAgICAgICAgIHZhciBwcm9jZXNzZWRXb3JkcyA9IGRhdGFXb3Jkcy5zcGxpY2UoMCwgbldvcmRzUmVhZHkpO1xuXHQgICAgICAgICAgICAgICAgZGF0YS5zaWdCeXRlcyAtPSBuQnl0ZXNSZWFkeTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIFJldHVybiBwcm9jZXNzZWQgd29yZHNcblx0ICAgICAgICAgICAgcmV0dXJuIG5ldyBXb3JkQXJyYXkuaW5pdChwcm9jZXNzZWRXb3JkcywgbkJ5dGVzUmVhZHkpO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDcmVhdGVzIGEgY29weSBvZiB0aGlzIG9iamVjdC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge09iamVjdH0gVGhlIGNsb25lLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgY2xvbmUgPSBidWZmZXJlZEJsb2NrQWxnb3JpdGhtLmNsb25lKCk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgY2xvbmU6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdmFyIGNsb25lID0gQmFzZS5jbG9uZS5jYWxsKHRoaXMpO1xuXHQgICAgICAgICAgICBjbG9uZS5fZGF0YSA9IHRoaXMuX2RhdGEuY2xvbmUoKTtcblxuXHQgICAgICAgICAgICByZXR1cm4gY2xvbmU7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIF9taW5CdWZmZXJTaXplOiAwXG5cdCAgICB9KTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBBYnN0cmFjdCBoYXNoZXIgdGVtcGxhdGUuXG5cdCAgICAgKlxuXHQgICAgICogQHByb3BlcnR5IHtudW1iZXJ9IGJsb2NrU2l6ZSBUaGUgbnVtYmVyIG9mIDMyLWJpdCB3b3JkcyB0aGlzIGhhc2hlciBvcGVyYXRlcyBvbi4gRGVmYXVsdDogMTYgKDUxMiBiaXRzKVxuXHQgICAgICovXG5cdCAgICB2YXIgSGFzaGVyID0gQ19saWIuSGFzaGVyID0gQnVmZmVyZWRCbG9ja0FsZ29yaXRobS5leHRlbmQoe1xuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENvbmZpZ3VyYXRpb24gb3B0aW9ucy5cblx0ICAgICAgICAgKi9cblx0ICAgICAgICBjZmc6IEJhc2UuZXh0ZW5kKCksXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBJbml0aWFsaXplcyBhIG5ld2x5IGNyZWF0ZWQgaGFzaGVyLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IGNmZyAoT3B0aW9uYWwpIFRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gdXNlIGZvciB0aGlzIGhhc2ggY29tcHV0YXRpb24uXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBoYXNoZXIgPSBDcnlwdG9KUy5hbGdvLlNIQTI1Ni5jcmVhdGUoKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBpbml0OiBmdW5jdGlvbiAoY2ZnKSB7XG5cdCAgICAgICAgICAgIC8vIEFwcGx5IGNvbmZpZyBkZWZhdWx0c1xuXHQgICAgICAgICAgICB0aGlzLmNmZyA9IHRoaXMuY2ZnLmV4dGVuZChjZmcpO1xuXG5cdCAgICAgICAgICAgIC8vIFNldCBpbml0aWFsIHZhbHVlc1xuXHQgICAgICAgICAgICB0aGlzLnJlc2V0KCk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIFJlc2V0cyB0aGlzIGhhc2hlciB0byBpdHMgaW5pdGlhbCBzdGF0ZS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgaGFzaGVyLnJlc2V0KCk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgcmVzZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgLy8gUmVzZXQgZGF0YSBidWZmZXJcblx0ICAgICAgICAgICAgQnVmZmVyZWRCbG9ja0FsZ29yaXRobS5yZXNldC5jYWxsKHRoaXMpO1xuXG5cdCAgICAgICAgICAgIC8vIFBlcmZvcm0gY29uY3JldGUtaGFzaGVyIGxvZ2ljXG5cdCAgICAgICAgICAgIHRoaXMuX2RvUmVzZXQoKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogVXBkYXRlcyB0aGlzIGhhc2hlciB3aXRoIGEgbWVzc2FnZS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30gbWVzc2FnZVVwZGF0ZSBUaGUgbWVzc2FnZSB0byBhcHBlbmQuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtIYXNoZXJ9IFRoaXMgaGFzaGVyLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICBoYXNoZXIudXBkYXRlKCdtZXNzYWdlJyk7XG5cdCAgICAgICAgICogICAgIGhhc2hlci51cGRhdGUod29yZEFycmF5KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICB1cGRhdGU6IGZ1bmN0aW9uIChtZXNzYWdlVXBkYXRlKSB7XG5cdCAgICAgICAgICAgIC8vIEFwcGVuZFxuXHQgICAgICAgICAgICB0aGlzLl9hcHBlbmQobWVzc2FnZVVwZGF0ZSk7XG5cblx0ICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSBoYXNoXG5cdCAgICAgICAgICAgIHRoaXMuX3Byb2Nlc3MoKTtcblxuXHQgICAgICAgICAgICAvLyBDaGFpbmFibGVcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIEZpbmFsaXplcyB0aGUgaGFzaCBjb21wdXRhdGlvbi5cblx0ICAgICAgICAgKiBOb3RlIHRoYXQgdGhlIGZpbmFsaXplIG9wZXJhdGlvbiBpcyBlZmZlY3RpdmVseSBhIGRlc3RydWN0aXZlLCByZWFkLW9uY2Ugb3BlcmF0aW9uLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBtZXNzYWdlVXBkYXRlIChPcHRpb25hbCkgQSBmaW5hbCBtZXNzYWdlIHVwZGF0ZS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIGhhc2guXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBoYXNoID0gaGFzaGVyLmZpbmFsaXplKCk7XG5cdCAgICAgICAgICogICAgIHZhciBoYXNoID0gaGFzaGVyLmZpbmFsaXplKCdtZXNzYWdlJyk7XG5cdCAgICAgICAgICogICAgIHZhciBoYXNoID0gaGFzaGVyLmZpbmFsaXplKHdvcmRBcnJheSk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgZmluYWxpemU6IGZ1bmN0aW9uIChtZXNzYWdlVXBkYXRlKSB7XG5cdCAgICAgICAgICAgIC8vIEZpbmFsIG1lc3NhZ2UgdXBkYXRlXG5cdCAgICAgICAgICAgIGlmIChtZXNzYWdlVXBkYXRlKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLl9hcHBlbmQobWVzc2FnZVVwZGF0ZSk7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAvLyBQZXJmb3JtIGNvbmNyZXRlLWhhc2hlciBsb2dpY1xuXHQgICAgICAgICAgICB2YXIgaGFzaCA9IHRoaXMuX2RvRmluYWxpemUoKTtcblxuXHQgICAgICAgICAgICByZXR1cm4gaGFzaDtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgYmxvY2tTaXplOiA1MTIvMzIsXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDcmVhdGVzIGEgc2hvcnRjdXQgZnVuY3Rpb24gdG8gYSBoYXNoZXIncyBvYmplY3QgaW50ZXJmYWNlLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtIYXNoZXJ9IGhhc2hlciBUaGUgaGFzaGVyIHRvIGNyZWF0ZSBhIGhlbHBlciBmb3IuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtGdW5jdGlvbn0gVGhlIHNob3J0Y3V0IGZ1bmN0aW9uLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgU0hBMjU2ID0gQ3J5cHRvSlMubGliLkhhc2hlci5fY3JlYXRlSGVscGVyKENyeXB0b0pTLmFsZ28uU0hBMjU2KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBfY3JlYXRlSGVscGVyOiBmdW5jdGlvbiAoaGFzaGVyKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAobWVzc2FnZSwgY2ZnKSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gbmV3IGhhc2hlci5pbml0KGNmZykuZmluYWxpemUobWVzc2FnZSk7XG5cdCAgICAgICAgICAgIH07XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENyZWF0ZXMgYSBzaG9ydGN1dCBmdW5jdGlvbiB0byB0aGUgSE1BQydzIG9iamVjdCBpbnRlcmZhY2UuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge0hhc2hlcn0gaGFzaGVyIFRoZSBoYXNoZXIgdG8gdXNlIGluIHRoaXMgSE1BQyBoZWxwZXIuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtGdW5jdGlvbn0gVGhlIHNob3J0Y3V0IGZ1bmN0aW9uLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgSG1hY1NIQTI1NiA9IENyeXB0b0pTLmxpYi5IYXNoZXIuX2NyZWF0ZUhtYWNIZWxwZXIoQ3J5cHRvSlMuYWxnby5TSEEyNTYpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIF9jcmVhdGVIbWFjSGVscGVyOiBmdW5jdGlvbiAoaGFzaGVyKSB7XG5cdCAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAobWVzc2FnZSwga2V5KSB7XG5cdCAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENfYWxnby5ITUFDLmluaXQoaGFzaGVyLCBrZXkpLmZpbmFsaXplKG1lc3NhZ2UpO1xuXHQgICAgICAgICAgICB9O1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXG5cdCAgICAvKipcblx0ICAgICAqIEFsZ29yaXRobSBuYW1lc3BhY2UuXG5cdCAgICAgKi9cblx0ICAgIHZhciBDX2FsZ28gPSBDLmFsZ28gPSB7fTtcblxuXHQgICAgcmV0dXJuIEM7XG5cdH0oTWF0aCkpO1xuXG5cblx0cmV0dXJuIENyeXB0b0pTO1xuXG59KSk7IiwiOyhmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSkge1xuXHRpZiAodHlwZW9mIGV4cG9ydHMgPT09IFwib2JqZWN0XCIpIHtcblx0XHQvLyBDb21tb25KU1xuXHRcdG1vZHVsZS5leHBvcnRzID0gZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcIi4vY29yZVwiKSk7XG5cdH1cblx0ZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyBBTURcblx0XHRkZWZpbmUoW1wiLi9jb3JlXCJdLCBmYWN0b3J5KTtcblx0fVxuXHRlbHNlIHtcblx0XHQvLyBHbG9iYWwgKGJyb3dzZXIpXG5cdFx0ZmFjdG9yeShyb290LkNyeXB0b0pTKTtcblx0fVxufSh0aGlzLCBmdW5jdGlvbiAoQ3J5cHRvSlMpIHtcblxuXHQoZnVuY3Rpb24gKE1hdGgpIHtcblx0ICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgdmFyIEMgPSBDcnlwdG9KUztcblx0ICAgIHZhciBDX2xpYiA9IEMubGliO1xuXHQgICAgdmFyIFdvcmRBcnJheSA9IENfbGliLldvcmRBcnJheTtcblx0ICAgIHZhciBIYXNoZXIgPSBDX2xpYi5IYXNoZXI7XG5cdCAgICB2YXIgQ19hbGdvID0gQy5hbGdvO1xuXG5cdCAgICAvLyBJbml0aWFsaXphdGlvbiBhbmQgcm91bmQgY29uc3RhbnRzIHRhYmxlc1xuXHQgICAgdmFyIEggPSBbXTtcblx0ICAgIHZhciBLID0gW107XG5cblx0ICAgIC8vIENvbXB1dGUgY29uc3RhbnRzXG5cdCAgICAoZnVuY3Rpb24gKCkge1xuXHQgICAgICAgIGZ1bmN0aW9uIGlzUHJpbWUobikge1xuXHQgICAgICAgICAgICB2YXIgc3FydE4gPSBNYXRoLnNxcnQobik7XG5cdCAgICAgICAgICAgIGZvciAodmFyIGZhY3RvciA9IDI7IGZhY3RvciA8PSBzcXJ0TjsgZmFjdG9yKyspIHtcblx0ICAgICAgICAgICAgICAgIGlmICghKG4gJSBmYWN0b3IpKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgcmV0dXJuIHRydWU7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgZnVuY3Rpb24gZ2V0RnJhY3Rpb25hbEJpdHMobikge1xuXHQgICAgICAgICAgICByZXR1cm4gKChuIC0gKG4gfCAwKSkgKiAweDEwMDAwMDAwMCkgfCAwO1xuXHQgICAgICAgIH1cblxuXHQgICAgICAgIHZhciBuID0gMjtcblx0ICAgICAgICB2YXIgblByaW1lID0gMDtcblx0ICAgICAgICB3aGlsZSAoblByaW1lIDwgNjQpIHtcblx0ICAgICAgICAgICAgaWYgKGlzUHJpbWUobikpIHtcblx0ICAgICAgICAgICAgICAgIGlmIChuUHJpbWUgPCA4KSB7XG5cdCAgICAgICAgICAgICAgICAgICAgSFtuUHJpbWVdID0gZ2V0RnJhY3Rpb25hbEJpdHMoTWF0aC5wb3cobiwgMSAvIDIpKTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgICAgIEtbblByaW1lXSA9IGdldEZyYWN0aW9uYWxCaXRzKE1hdGgucG93KG4sIDEgLyAzKSk7XG5cblx0ICAgICAgICAgICAgICAgIG5QcmltZSsrO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgbisrO1xuXHQgICAgICAgIH1cblx0ICAgIH0oKSk7XG5cblx0ICAgIC8vIFJldXNhYmxlIG9iamVjdFxuXHQgICAgdmFyIFcgPSBbXTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBTSEEtMjU2IGhhc2ggYWxnb3JpdGhtLlxuXHQgICAgICovXG5cdCAgICB2YXIgU0hBMjU2ID0gQ19hbGdvLlNIQTI1NiA9IEhhc2hlci5leHRlbmQoe1xuXHQgICAgICAgIF9kb1Jlc2V0OiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHRoaXMuX2hhc2ggPSBuZXcgV29yZEFycmF5LmluaXQoSC5zbGljZSgwKSk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIF9kb1Byb2Nlc3NCbG9jazogZnVuY3Rpb24gKE0sIG9mZnNldCkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dFxuXHQgICAgICAgICAgICB2YXIgSCA9IHRoaXMuX2hhc2gud29yZHM7XG5cblx0ICAgICAgICAgICAgLy8gV29ya2luZyB2YXJpYWJsZXNcblx0ICAgICAgICAgICAgdmFyIGEgPSBIWzBdO1xuXHQgICAgICAgICAgICB2YXIgYiA9IEhbMV07XG5cdCAgICAgICAgICAgIHZhciBjID0gSFsyXTtcblx0ICAgICAgICAgICAgdmFyIGQgPSBIWzNdO1xuXHQgICAgICAgICAgICB2YXIgZSA9IEhbNF07XG5cdCAgICAgICAgICAgIHZhciBmID0gSFs1XTtcblx0ICAgICAgICAgICAgdmFyIGcgPSBIWzZdO1xuXHQgICAgICAgICAgICB2YXIgaCA9IEhbN107XG5cblx0ICAgICAgICAgICAgLy8gQ29tcHV0YXRpb25cblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA2NDsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICBpZiAoaSA8IDE2KSB7XG5cdCAgICAgICAgICAgICAgICAgICAgV1tpXSA9IE1bb2Zmc2V0ICsgaV0gfCAwO1xuXHQgICAgICAgICAgICAgICAgfSBlbHNlIHtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgZ2FtbWEweCA9IFdbaSAtIDE1XTtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgZ2FtbWEwICA9ICgoZ2FtbWEweCA8PCAyNSkgfCAoZ2FtbWEweCA+Pj4gNykpICBeXG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGdhbW1hMHggPDwgMTQpIHwgKGdhbW1hMHggPj4+IDE4KSkgXlxuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChnYW1tYTB4ID4+PiAzKTtcblxuXHQgICAgICAgICAgICAgICAgICAgIHZhciBnYW1tYTF4ID0gV1tpIC0gMl07XG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIGdhbW1hMSAgPSAoKGdhbW1hMXggPDwgMTUpIHwgKGdhbW1hMXggPj4+IDE3KSkgXlxuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChnYW1tYTF4IDw8IDEzKSB8IChnYW1tYTF4ID4+PiAxOSkpIF5cblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ2FtbWExeCA+Pj4gMTApO1xuXG5cdCAgICAgICAgICAgICAgICAgICAgV1tpXSA9IGdhbW1hMCArIFdbaSAtIDddICsgZ2FtbWExICsgV1tpIC0gMTZdO1xuXHQgICAgICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgICAgICB2YXIgY2ggID0gKGUgJiBmKSBeICh+ZSAmIGcpO1xuXHQgICAgICAgICAgICAgICAgdmFyIG1haiA9IChhICYgYikgXiAoYSAmIGMpIF4gKGIgJiBjKTtcblxuXHQgICAgICAgICAgICAgICAgdmFyIHNpZ21hMCA9ICgoYSA8PCAzMCkgfCAoYSA+Pj4gMikpIF4gKChhIDw8IDE5KSB8IChhID4+PiAxMykpIF4gKChhIDw8IDEwKSB8IChhID4+PiAyMikpO1xuXHQgICAgICAgICAgICAgICAgdmFyIHNpZ21hMSA9ICgoZSA8PCAyNikgfCAoZSA+Pj4gNikpIF4gKChlIDw8IDIxKSB8IChlID4+PiAxMSkpIF4gKChlIDw8IDcpICB8IChlID4+PiAyNSkpO1xuXG5cdCAgICAgICAgICAgICAgICB2YXIgdDEgPSBoICsgc2lnbWExICsgY2ggKyBLW2ldICsgV1tpXTtcblx0ICAgICAgICAgICAgICAgIHZhciB0MiA9IHNpZ21hMCArIG1hajtcblxuXHQgICAgICAgICAgICAgICAgaCA9IGc7XG5cdCAgICAgICAgICAgICAgICBnID0gZjtcblx0ICAgICAgICAgICAgICAgIGYgPSBlO1xuXHQgICAgICAgICAgICAgICAgZSA9IChkICsgdDEpIHwgMDtcblx0ICAgICAgICAgICAgICAgIGQgPSBjO1xuXHQgICAgICAgICAgICAgICAgYyA9IGI7XG5cdCAgICAgICAgICAgICAgICBiID0gYTtcblx0ICAgICAgICAgICAgICAgIGEgPSAodDEgKyB0MikgfCAwO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgLy8gSW50ZXJtZWRpYXRlIGhhc2ggdmFsdWVcblx0ICAgICAgICAgICAgSFswXSA9IChIWzBdICsgYSkgfCAwO1xuXHQgICAgICAgICAgICBIWzFdID0gKEhbMV0gKyBiKSB8IDA7XG5cdCAgICAgICAgICAgIEhbMl0gPSAoSFsyXSArIGMpIHwgMDtcblx0ICAgICAgICAgICAgSFszXSA9IChIWzNdICsgZCkgfCAwO1xuXHQgICAgICAgICAgICBIWzRdID0gKEhbNF0gKyBlKSB8IDA7XG5cdCAgICAgICAgICAgIEhbNV0gPSAoSFs1XSArIGYpIHwgMDtcblx0ICAgICAgICAgICAgSFs2XSA9IChIWzZdICsgZykgfCAwO1xuXHQgICAgICAgICAgICBIWzddID0gKEhbN10gKyBoKSB8IDA7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIF9kb0ZpbmFsaXplOiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICB2YXIgZGF0YSA9IHRoaXMuX2RhdGE7XG5cdCAgICAgICAgICAgIHZhciBkYXRhV29yZHMgPSBkYXRhLndvcmRzO1xuXG5cdCAgICAgICAgICAgIHZhciBuQml0c1RvdGFsID0gdGhpcy5fbkRhdGFCeXRlcyAqIDg7XG5cdCAgICAgICAgICAgIHZhciBuQml0c0xlZnQgPSBkYXRhLnNpZ0J5dGVzICogODtcblxuXHQgICAgICAgICAgICAvLyBBZGQgcGFkZGluZ1xuXHQgICAgICAgICAgICBkYXRhV29yZHNbbkJpdHNMZWZ0ID4+PiA1XSB8PSAweDgwIDw8ICgyNCAtIG5CaXRzTGVmdCAlIDMyKTtcblx0ICAgICAgICAgICAgZGF0YVdvcmRzWygoKG5CaXRzTGVmdCArIDY0KSA+Pj4gOSkgPDwgNCkgKyAxNF0gPSBNYXRoLmZsb29yKG5CaXRzVG90YWwgLyAweDEwMDAwMDAwMCk7XG5cdCAgICAgICAgICAgIGRhdGFXb3Jkc1soKChuQml0c0xlZnQgKyA2NCkgPj4+IDkpIDw8IDQpICsgMTVdID0gbkJpdHNUb3RhbDtcblx0ICAgICAgICAgICAgZGF0YS5zaWdCeXRlcyA9IGRhdGFXb3Jkcy5sZW5ndGggKiA0O1xuXG5cdCAgICAgICAgICAgIC8vIEhhc2ggZmluYWwgYmxvY2tzXG5cdCAgICAgICAgICAgIHRoaXMuX3Byb2Nlc3MoKTtcblxuXHQgICAgICAgICAgICAvLyBSZXR1cm4gZmluYWwgY29tcHV0ZWQgaGFzaFxuXHQgICAgICAgICAgICByZXR1cm4gdGhpcy5faGFzaDtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgY2xvbmU6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdmFyIGNsb25lID0gSGFzaGVyLmNsb25lLmNhbGwodGhpcyk7XG5cdCAgICAgICAgICAgIGNsb25lLl9oYXNoID0gdGhpcy5faGFzaC5jbG9uZSgpO1xuXG5cdCAgICAgICAgICAgIHJldHVybiBjbG9uZTtcblx0ICAgICAgICB9XG5cdCAgICB9KTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBTaG9ydGN1dCBmdW5jdGlvbiB0byB0aGUgaGFzaGVyJ3Mgb2JqZWN0IGludGVyZmFjZS5cblx0ICAgICAqXG5cdCAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IG1lc3NhZ2UgVGhlIG1lc3NhZ2UgdG8gaGFzaC5cblx0ICAgICAqXG5cdCAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSBoYXNoLlxuXHQgICAgICpcblx0ICAgICAqIEBzdGF0aWNcblx0ICAgICAqXG5cdCAgICAgKiBAZXhhbXBsZVxuXHQgICAgICpcblx0ICAgICAqICAgICB2YXIgaGFzaCA9IENyeXB0b0pTLlNIQTI1NignbWVzc2FnZScpO1xuXHQgICAgICogICAgIHZhciBoYXNoID0gQ3J5cHRvSlMuU0hBMjU2KHdvcmRBcnJheSk7XG5cdCAgICAgKi9cblx0ICAgIEMuU0hBMjU2ID0gSGFzaGVyLl9jcmVhdGVIZWxwZXIoU0hBMjU2KTtcblxuXHQgICAgLyoqXG5cdCAgICAgKiBTaG9ydGN1dCBmdW5jdGlvbiB0byB0aGUgSE1BQydzIG9iamVjdCBpbnRlcmZhY2UuXG5cdCAgICAgKlxuXHQgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBtZXNzYWdlIFRoZSBtZXNzYWdlIHRvIGhhc2guXG5cdCAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IGtleSBUaGUgc2VjcmV0IGtleS5cblx0ICAgICAqXG5cdCAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSBITUFDLlxuXHQgICAgICpcblx0ICAgICAqIEBzdGF0aWNcblx0ICAgICAqXG5cdCAgICAgKiBAZXhhbXBsZVxuXHQgICAgICpcblx0ICAgICAqICAgICB2YXIgaG1hYyA9IENyeXB0b0pTLkhtYWNTSEEyNTYobWVzc2FnZSwga2V5KTtcblx0ICAgICAqL1xuXHQgICAgQy5IbWFjU0hBMjU2ID0gSGFzaGVyLl9jcmVhdGVIbWFjSGVscGVyKFNIQTI1Nik7XG5cdH0oTWF0aCkpO1xuXG5cblx0cmV0dXJuIENyeXB0b0pTLlNIQTI1NjtcblxufSkpOyIsIihmdW5jdGlvbigpe1xuXG4gICAgLy8gQ29weXJpZ2h0IChjKSAyMDA1ICBUb20gV3VcbiAgICAvLyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICAgIC8vIFNlZSBcIkxJQ0VOU0VcIiBmb3IgZGV0YWlscy5cblxuICAgIC8vIEJhc2ljIEphdmFTY3JpcHQgQk4gbGlicmFyeSAtIHN1YnNldCB1c2VmdWwgZm9yIFJTQSBlbmNyeXB0aW9uLlxuXG4gICAgLy8gQml0cyBwZXIgZGlnaXRcbiAgICB2YXIgZGJpdHM7XG5cbiAgICAvLyBKYXZhU2NyaXB0IGVuZ2luZSBhbmFseXNpc1xuICAgIHZhciBjYW5hcnkgPSAweGRlYWRiZWVmY2FmZTtcbiAgICB2YXIgal9sbSA9ICgoY2FuYXJ5JjB4ZmZmZmZmKT09MHhlZmNhZmUpO1xuXG4gICAgLy8gKHB1YmxpYykgQ29uc3RydWN0b3JcbiAgICBmdW5jdGlvbiBCaWdJbnRlZ2VyKGEsYixjKSB7XG4gICAgICBpZihhICE9IG51bGwpXG4gICAgICAgIGlmKFwibnVtYmVyXCIgPT0gdHlwZW9mIGEpIHRoaXMuZnJvbU51bWJlcihhLGIsYyk7XG4gICAgICAgIGVsc2UgaWYoYiA9PSBudWxsICYmIFwic3RyaW5nXCIgIT0gdHlwZW9mIGEpIHRoaXMuZnJvbVN0cmluZyhhLDI1Nik7XG4gICAgICAgIGVsc2UgdGhpcy5mcm9tU3RyaW5nKGEsYik7XG4gICAgfVxuXG4gICAgLy8gcmV0dXJuIG5ldywgdW5zZXQgQmlnSW50ZWdlclxuICAgIGZ1bmN0aW9uIG5iaSgpIHsgcmV0dXJuIG5ldyBCaWdJbnRlZ2VyKG51bGwpOyB9XG5cbiAgICAvLyBhbTogQ29tcHV0ZSB3X2ogKz0gKHgqdGhpc19pKSwgcHJvcGFnYXRlIGNhcnJpZXMsXG4gICAgLy8gYyBpcyBpbml0aWFsIGNhcnJ5LCByZXR1cm5zIGZpbmFsIGNhcnJ5LlxuICAgIC8vIGMgPCAzKmR2YWx1ZSwgeCA8IDIqZHZhbHVlLCB0aGlzX2kgPCBkdmFsdWVcbiAgICAvLyBXZSBuZWVkIHRvIHNlbGVjdCB0aGUgZmFzdGVzdCBvbmUgdGhhdCB3b3JrcyBpbiB0aGlzIGVudmlyb25tZW50LlxuXG4gICAgLy8gYW0xOiB1c2UgYSBzaW5nbGUgbXVsdCBhbmQgZGl2aWRlIHRvIGdldCB0aGUgaGlnaCBiaXRzLFxuICAgIC8vIG1heCBkaWdpdCBiaXRzIHNob3VsZCBiZSAyNiBiZWNhdXNlXG4gICAgLy8gbWF4IGludGVybmFsIHZhbHVlID0gMipkdmFsdWVeMi0yKmR2YWx1ZSAoPCAyXjUzKVxuICAgIGZ1bmN0aW9uIGFtMShpLHgsdyxqLGMsbikge1xuICAgICAgd2hpbGUoLS1uID49IDApIHtcbiAgICAgICAgdmFyIHYgPSB4KnRoaXNbaSsrXSt3W2pdK2M7XG4gICAgICAgIGMgPSBNYXRoLmZsb29yKHYvMHg0MDAwMDAwKTtcbiAgICAgICAgd1tqKytdID0gdiYweDNmZmZmZmY7XG4gICAgICB9XG4gICAgICByZXR1cm4gYztcbiAgICB9XG4gICAgLy8gYW0yIGF2b2lkcyBhIGJpZyBtdWx0LWFuZC1leHRyYWN0IGNvbXBsZXRlbHkuXG4gICAgLy8gTWF4IGRpZ2l0IGJpdHMgc2hvdWxkIGJlIDw9IDMwIGJlY2F1c2Ugd2UgZG8gYml0d2lzZSBvcHNcbiAgICAvLyBvbiB2YWx1ZXMgdXAgdG8gMipoZHZhbHVlXjItaGR2YWx1ZS0xICg8IDJeMzEpXG4gICAgZnVuY3Rpb24gYW0yKGkseCx3LGosYyxuKSB7XG4gICAgICB2YXIgeGwgPSB4JjB4N2ZmZiwgeGggPSB4Pj4xNTtcbiAgICAgIHdoaWxlKC0tbiA+PSAwKSB7XG4gICAgICAgIHZhciBsID0gdGhpc1tpXSYweDdmZmY7XG4gICAgICAgIHZhciBoID0gdGhpc1tpKytdPj4xNTtcbiAgICAgICAgdmFyIG0gPSB4aCpsK2gqeGw7XG4gICAgICAgIGwgPSB4bCpsKygobSYweDdmZmYpPDwxNSkrd1tqXSsoYyYweDNmZmZmZmZmKTtcbiAgICAgICAgYyA9IChsPj4+MzApKyhtPj4+MTUpK3hoKmgrKGM+Pj4zMCk7XG4gICAgICAgIHdbaisrXSA9IGwmMHgzZmZmZmZmZjtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjO1xuICAgIH1cbiAgICAvLyBBbHRlcm5hdGVseSwgc2V0IG1heCBkaWdpdCBiaXRzIHRvIDI4IHNpbmNlIHNvbWVcbiAgICAvLyBicm93c2VycyBzbG93IGRvd24gd2hlbiBkZWFsaW5nIHdpdGggMzItYml0IG51bWJlcnMuXG4gICAgZnVuY3Rpb24gYW0zKGkseCx3LGosYyxuKSB7XG4gICAgICB2YXIgeGwgPSB4JjB4M2ZmZiwgeGggPSB4Pj4xNDtcbiAgICAgIHdoaWxlKC0tbiA+PSAwKSB7XG4gICAgICAgIHZhciBsID0gdGhpc1tpXSYweDNmZmY7XG4gICAgICAgIHZhciBoID0gdGhpc1tpKytdPj4xNDtcbiAgICAgICAgdmFyIG0gPSB4aCpsK2gqeGw7XG4gICAgICAgIGwgPSB4bCpsKygobSYweDNmZmYpPDwxNCkrd1tqXStjO1xuICAgICAgICBjID0gKGw+PjI4KSsobT4+MTQpK3hoKmg7XG4gICAgICAgIHdbaisrXSA9IGwmMHhmZmZmZmZmO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGM7XG4gICAgfVxuICAgIHZhciBpbkJyb3dzZXIgPSB0eXBlb2YgbmF2aWdhdG9yICE9PSBcInVuZGVmaW5lZFwiO1xuICAgIGlmKGluQnJvd3NlciAmJiBqX2xtICYmIChuYXZpZ2F0b3IuYXBwTmFtZSA9PSBcIk1pY3Jvc29mdCBJbnRlcm5ldCBFeHBsb3JlclwiKSkge1xuICAgICAgQmlnSW50ZWdlci5wcm90b3R5cGUuYW0gPSBhbTI7XG4gICAgICBkYml0cyA9IDMwO1xuICAgIH1cbiAgICBlbHNlIGlmKGluQnJvd3NlciAmJiBqX2xtICYmIChuYXZpZ2F0b3IuYXBwTmFtZSAhPSBcIk5ldHNjYXBlXCIpKSB7XG4gICAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5hbSA9IGFtMTtcbiAgICAgIGRiaXRzID0gMjY7XG4gICAgfVxuICAgIGVsc2UgeyAvLyBNb3ppbGxhL05ldHNjYXBlIHNlZW1zIHRvIHByZWZlciBhbTNcbiAgICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLmFtID0gYW0zO1xuICAgICAgZGJpdHMgPSAyODtcbiAgICB9XG5cbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5EQiA9IGRiaXRzO1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLkRNID0gKCgxPDxkYml0cyktMSk7XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUuRFYgPSAoMTw8ZGJpdHMpO1xuXG4gICAgdmFyIEJJX0ZQID0gNTI7XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUuRlYgPSBNYXRoLnBvdygyLEJJX0ZQKTtcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5GMSA9IEJJX0ZQLWRiaXRzO1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLkYyID0gMipkYml0cy1CSV9GUDtcblxuICAgIC8vIERpZ2l0IGNvbnZlcnNpb25zXG4gICAgdmFyIEJJX1JNID0gXCIwMTIzNDU2Nzg5YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpcIjtcbiAgICB2YXIgQklfUkMgPSBuZXcgQXJyYXkoKTtcbiAgICB2YXIgcnIsdnY7XG4gICAgcnIgPSBcIjBcIi5jaGFyQ29kZUF0KDApO1xuICAgIGZvcih2diA9IDA7IHZ2IDw9IDk7ICsrdnYpIEJJX1JDW3JyKytdID0gdnY7XG4gICAgcnIgPSBcImFcIi5jaGFyQ29kZUF0KDApO1xuICAgIGZvcih2diA9IDEwOyB2diA8IDM2OyArK3Z2KSBCSV9SQ1tycisrXSA9IHZ2O1xuICAgIHJyID0gXCJBXCIuY2hhckNvZGVBdCgwKTtcbiAgICBmb3IodnYgPSAxMDsgdnYgPCAzNjsgKyt2dikgQklfUkNbcnIrK10gPSB2djtcblxuICAgIGZ1bmN0aW9uIGludDJjaGFyKG4pIHsgcmV0dXJuIEJJX1JNLmNoYXJBdChuKTsgfVxuICAgIGZ1bmN0aW9uIGludEF0KHMsaSkge1xuICAgICAgdmFyIGMgPSBCSV9SQ1tzLmNoYXJDb2RlQXQoaSldO1xuICAgICAgcmV0dXJuIChjPT1udWxsKT8tMTpjO1xuICAgIH1cblxuICAgIC8vIChwcm90ZWN0ZWQpIGNvcHkgdGhpcyB0byByXG4gICAgZnVuY3Rpb24gYm5wQ29weVRvKHIpIHtcbiAgICAgIGZvcih2YXIgaSA9IHRoaXMudC0xOyBpID49IDA7IC0taSkgcltpXSA9IHRoaXNbaV07XG4gICAgICByLnQgPSB0aGlzLnQ7XG4gICAgICByLnMgPSB0aGlzLnM7XG4gICAgfVxuXG4gICAgLy8gKHByb3RlY3RlZCkgc2V0IGZyb20gaW50ZWdlciB2YWx1ZSB4LCAtRFYgPD0geCA8IERWXG4gICAgZnVuY3Rpb24gYm5wRnJvbUludCh4KSB7XG4gICAgICB0aGlzLnQgPSAxO1xuICAgICAgdGhpcy5zID0gKHg8MCk/LTE6MDtcbiAgICAgIGlmKHggPiAwKSB0aGlzWzBdID0geDtcbiAgICAgIGVsc2UgaWYoeCA8IC0xKSB0aGlzWzBdID0geCt0aGlzLkRWO1xuICAgICAgZWxzZSB0aGlzLnQgPSAwO1xuICAgIH1cblxuICAgIC8vIHJldHVybiBiaWdpbnQgaW5pdGlhbGl6ZWQgdG8gdmFsdWVcbiAgICBmdW5jdGlvbiBuYnYoaSkgeyB2YXIgciA9IG5iaSgpOyByLmZyb21JbnQoaSk7IHJldHVybiByOyB9XG5cbiAgICAvLyAocHJvdGVjdGVkKSBzZXQgZnJvbSBzdHJpbmcgYW5kIHJhZGl4XG4gICAgZnVuY3Rpb24gYm5wRnJvbVN0cmluZyhzLGIpIHtcbiAgICAgIHZhciBrO1xuICAgICAgaWYoYiA9PSAxNikgayA9IDQ7XG4gICAgICBlbHNlIGlmKGIgPT0gOCkgayA9IDM7XG4gICAgICBlbHNlIGlmKGIgPT0gMjU2KSBrID0gODsgLy8gYnl0ZSBhcnJheVxuICAgICAgZWxzZSBpZihiID09IDIpIGsgPSAxO1xuICAgICAgZWxzZSBpZihiID09IDMyKSBrID0gNTtcbiAgICAgIGVsc2UgaWYoYiA9PSA0KSBrID0gMjtcbiAgICAgIGVsc2UgeyB0aGlzLmZyb21SYWRpeChzLGIpOyByZXR1cm47IH1cbiAgICAgIHRoaXMudCA9IDA7XG4gICAgICB0aGlzLnMgPSAwO1xuICAgICAgdmFyIGkgPSBzLmxlbmd0aCwgbWkgPSBmYWxzZSwgc2ggPSAwO1xuICAgICAgd2hpbGUoLS1pID49IDApIHtcbiAgICAgICAgdmFyIHggPSAoaz09OCk/c1tpXSYweGZmOmludEF0KHMsaSk7XG4gICAgICAgIGlmKHggPCAwKSB7XG4gICAgICAgICAgaWYocy5jaGFyQXQoaSkgPT0gXCItXCIpIG1pID0gdHJ1ZTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBtaSA9IGZhbHNlO1xuICAgICAgICBpZihzaCA9PSAwKVxuICAgICAgICAgIHRoaXNbdGhpcy50KytdID0geDtcbiAgICAgICAgZWxzZSBpZihzaCtrID4gdGhpcy5EQikge1xuICAgICAgICAgIHRoaXNbdGhpcy50LTFdIHw9ICh4JigoMTw8KHRoaXMuREItc2gpKS0xKSk8PHNoO1xuICAgICAgICAgIHRoaXNbdGhpcy50KytdID0gKHg+Pih0aGlzLkRCLXNoKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICAgIHRoaXNbdGhpcy50LTFdIHw9IHg8PHNoO1xuICAgICAgICBzaCArPSBrO1xuICAgICAgICBpZihzaCA+PSB0aGlzLkRCKSBzaCAtPSB0aGlzLkRCO1xuICAgICAgfVxuICAgICAgaWYoayA9PSA4ICYmIChzWzBdJjB4ODApICE9IDApIHtcbiAgICAgICAgdGhpcy5zID0gLTE7XG4gICAgICAgIGlmKHNoID4gMCkgdGhpc1t0aGlzLnQtMV0gfD0gKCgxPDwodGhpcy5EQi1zaCkpLTEpPDxzaDtcbiAgICAgIH1cbiAgICAgIHRoaXMuY2xhbXAoKTtcbiAgICAgIGlmKG1pKSBCaWdJbnRlZ2VyLlpFUk8uc3ViVG8odGhpcyx0aGlzKTtcbiAgICB9XG5cbiAgICAvLyAocHJvdGVjdGVkKSBjbGFtcCBvZmYgZXhjZXNzIGhpZ2ggd29yZHNcbiAgICBmdW5jdGlvbiBibnBDbGFtcCgpIHtcbiAgICAgIHZhciBjID0gdGhpcy5zJnRoaXMuRE07XG4gICAgICB3aGlsZSh0aGlzLnQgPiAwICYmIHRoaXNbdGhpcy50LTFdID09IGMpIC0tdGhpcy50O1xuICAgIH1cblxuICAgIC8vIChwdWJsaWMpIHJldHVybiBzdHJpbmcgcmVwcmVzZW50YXRpb24gaW4gZ2l2ZW4gcmFkaXhcbiAgICBmdW5jdGlvbiBiblRvU3RyaW5nKGIpIHtcbiAgICAgIGlmKHRoaXMucyA8IDApIHJldHVybiBcIi1cIit0aGlzLm5lZ2F0ZSgpLnRvU3RyaW5nKGIpO1xuICAgICAgdmFyIGs7XG4gICAgICBpZihiID09IDE2KSBrID0gNDtcbiAgICAgIGVsc2UgaWYoYiA9PSA4KSBrID0gMztcbiAgICAgIGVsc2UgaWYoYiA9PSAyKSBrID0gMTtcbiAgICAgIGVsc2UgaWYoYiA9PSAzMikgayA9IDU7XG4gICAgICBlbHNlIGlmKGIgPT0gNCkgayA9IDI7XG4gICAgICBlbHNlIHJldHVybiB0aGlzLnRvUmFkaXgoYik7XG4gICAgICB2YXIga20gPSAoMTw8ayktMSwgZCwgbSA9IGZhbHNlLCByID0gXCJcIiwgaSA9IHRoaXMudDtcbiAgICAgIHZhciBwID0gdGhpcy5EQi0oaSp0aGlzLkRCKSVrO1xuICAgICAgaWYoaS0tID4gMCkge1xuICAgICAgICBpZihwIDwgdGhpcy5EQiAmJiAoZCA9IHRoaXNbaV0+PnApID4gMCkgeyBtID0gdHJ1ZTsgciA9IGludDJjaGFyKGQpOyB9XG4gICAgICAgIHdoaWxlKGkgPj0gMCkge1xuICAgICAgICAgIGlmKHAgPCBrKSB7XG4gICAgICAgICAgICBkID0gKHRoaXNbaV0mKCgxPDxwKS0xKSk8PChrLXApO1xuICAgICAgICAgICAgZCB8PSB0aGlzWy0taV0+PihwKz10aGlzLkRCLWspO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGQgPSAodGhpc1tpXT4+KHAtPWspKSZrbTtcbiAgICAgICAgICAgIGlmKHAgPD0gMCkgeyBwICs9IHRoaXMuREI7IC0taTsgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZihkID4gMCkgbSA9IHRydWU7XG4gICAgICAgICAgaWYobSkgciArPSBpbnQyY2hhcihkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG0/cjpcIjBcIjtcbiAgICB9XG5cbiAgICAvLyAocHVibGljKSAtdGhpc1xuICAgIGZ1bmN0aW9uIGJuTmVnYXRlKCkgeyB2YXIgciA9IG5iaSgpOyBCaWdJbnRlZ2VyLlpFUk8uc3ViVG8odGhpcyxyKTsgcmV0dXJuIHI7IH1cblxuICAgIC8vIChwdWJsaWMpIHx0aGlzfFxuICAgIGZ1bmN0aW9uIGJuQWJzKCkgeyByZXR1cm4gKHRoaXMuczwwKT90aGlzLm5lZ2F0ZSgpOnRoaXM7IH1cblxuICAgIC8vIChwdWJsaWMpIHJldHVybiArIGlmIHRoaXMgPiBhLCAtIGlmIHRoaXMgPCBhLCAwIGlmIGVxdWFsXG4gICAgZnVuY3Rpb24gYm5Db21wYXJlVG8oYSkge1xuICAgICAgdmFyIHIgPSB0aGlzLnMtYS5zO1xuICAgICAgaWYociAhPSAwKSByZXR1cm4gcjtcbiAgICAgIHZhciBpID0gdGhpcy50O1xuICAgICAgciA9IGktYS50O1xuICAgICAgaWYociAhPSAwKSByZXR1cm4gKHRoaXMuczwwKT8tcjpyO1xuICAgICAgd2hpbGUoLS1pID49IDApIGlmKChyPXRoaXNbaV0tYVtpXSkgIT0gMCkgcmV0dXJuIHI7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICAvLyByZXR1cm5zIGJpdCBsZW5ndGggb2YgdGhlIGludGVnZXIgeFxuICAgIGZ1bmN0aW9uIG5iaXRzKHgpIHtcbiAgICAgIHZhciByID0gMSwgdDtcbiAgICAgIGlmKCh0PXg+Pj4xNikgIT0gMCkgeyB4ID0gdDsgciArPSAxNjsgfVxuICAgICAgaWYoKHQ9eD4+OCkgIT0gMCkgeyB4ID0gdDsgciArPSA4OyB9XG4gICAgICBpZigodD14Pj40KSAhPSAwKSB7IHggPSB0OyByICs9IDQ7IH1cbiAgICAgIGlmKCh0PXg+PjIpICE9IDApIHsgeCA9IHQ7IHIgKz0gMjsgfVxuICAgICAgaWYoKHQ9eD4+MSkgIT0gMCkgeyB4ID0gdDsgciArPSAxOyB9XG4gICAgICByZXR1cm4gcjtcbiAgICB9XG5cbiAgICAvLyAocHVibGljKSByZXR1cm4gdGhlIG51bWJlciBvZiBiaXRzIGluIFwidGhpc1wiXG4gICAgZnVuY3Rpb24gYm5CaXRMZW5ndGgoKSB7XG4gICAgICBpZih0aGlzLnQgPD0gMCkgcmV0dXJuIDA7XG4gICAgICByZXR1cm4gdGhpcy5EQioodGhpcy50LTEpK25iaXRzKHRoaXNbdGhpcy50LTFdXih0aGlzLnMmdGhpcy5ETSkpO1xuICAgIH1cblxuICAgIC8vIChwcm90ZWN0ZWQpIHIgPSB0aGlzIDw8IG4qREJcbiAgICBmdW5jdGlvbiBibnBETFNoaWZ0VG8obixyKSB7XG4gICAgICB2YXIgaTtcbiAgICAgIGZvcihpID0gdGhpcy50LTE7IGkgPj0gMDsgLS1pKSByW2krbl0gPSB0aGlzW2ldO1xuICAgICAgZm9yKGkgPSBuLTE7IGkgPj0gMDsgLS1pKSByW2ldID0gMDtcbiAgICAgIHIudCA9IHRoaXMudCtuO1xuICAgICAgci5zID0gdGhpcy5zO1xuICAgIH1cblxuICAgIC8vIChwcm90ZWN0ZWQpIHIgPSB0aGlzID4+IG4qREJcbiAgICBmdW5jdGlvbiBibnBEUlNoaWZ0VG8obixyKSB7XG4gICAgICBmb3IodmFyIGkgPSBuOyBpIDwgdGhpcy50OyArK2kpIHJbaS1uXSA9IHRoaXNbaV07XG4gICAgICByLnQgPSBNYXRoLm1heCh0aGlzLnQtbiwwKTtcbiAgICAgIHIucyA9IHRoaXMucztcbiAgICB9XG5cbiAgICAvLyAocHJvdGVjdGVkKSByID0gdGhpcyA8PCBuXG4gICAgZnVuY3Rpb24gYm5wTFNoaWZ0VG8obixyKSB7XG4gICAgICB2YXIgYnMgPSBuJXRoaXMuREI7XG4gICAgICB2YXIgY2JzID0gdGhpcy5EQi1icztcbiAgICAgIHZhciBibSA9ICgxPDxjYnMpLTE7XG4gICAgICB2YXIgZHMgPSBNYXRoLmZsb29yKG4vdGhpcy5EQiksIGMgPSAodGhpcy5zPDxicykmdGhpcy5ETSwgaTtcbiAgICAgIGZvcihpID0gdGhpcy50LTE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHJbaStkcysxXSA9ICh0aGlzW2ldPj5jYnMpfGM7XG4gICAgICAgIGMgPSAodGhpc1tpXSZibSk8PGJzO1xuICAgICAgfVxuICAgICAgZm9yKGkgPSBkcy0xOyBpID49IDA7IC0taSkgcltpXSA9IDA7XG4gICAgICByW2RzXSA9IGM7XG4gICAgICByLnQgPSB0aGlzLnQrZHMrMTtcbiAgICAgIHIucyA9IHRoaXMucztcbiAgICAgIHIuY2xhbXAoKTtcbiAgICB9XG5cbiAgICAvLyAocHJvdGVjdGVkKSByID0gdGhpcyA+PiBuXG4gICAgZnVuY3Rpb24gYm5wUlNoaWZ0VG8obixyKSB7XG4gICAgICByLnMgPSB0aGlzLnM7XG4gICAgICB2YXIgZHMgPSBNYXRoLmZsb29yKG4vdGhpcy5EQik7XG4gICAgICBpZihkcyA+PSB0aGlzLnQpIHsgci50ID0gMDsgcmV0dXJuOyB9XG4gICAgICB2YXIgYnMgPSBuJXRoaXMuREI7XG4gICAgICB2YXIgY2JzID0gdGhpcy5EQi1icztcbiAgICAgIHZhciBibSA9ICgxPDxicyktMTtcbiAgICAgIHJbMF0gPSB0aGlzW2RzXT4+YnM7XG4gICAgICBmb3IodmFyIGkgPSBkcysxOyBpIDwgdGhpcy50OyArK2kpIHtcbiAgICAgICAgcltpLWRzLTFdIHw9ICh0aGlzW2ldJmJtKTw8Y2JzO1xuICAgICAgICByW2ktZHNdID0gdGhpc1tpXT4+YnM7XG4gICAgICB9XG4gICAgICBpZihicyA+IDApIHJbdGhpcy50LWRzLTFdIHw9ICh0aGlzLnMmYm0pPDxjYnM7XG4gICAgICByLnQgPSB0aGlzLnQtZHM7XG4gICAgICByLmNsYW1wKCk7XG4gICAgfVxuXG4gICAgLy8gKHByb3RlY3RlZCkgciA9IHRoaXMgLSBhXG4gICAgZnVuY3Rpb24gYm5wU3ViVG8oYSxyKSB7XG4gICAgICB2YXIgaSA9IDAsIGMgPSAwLCBtID0gTWF0aC5taW4oYS50LHRoaXMudCk7XG4gICAgICB3aGlsZShpIDwgbSkge1xuICAgICAgICBjICs9IHRoaXNbaV0tYVtpXTtcbiAgICAgICAgcltpKytdID0gYyZ0aGlzLkRNO1xuICAgICAgICBjID4+PSB0aGlzLkRCO1xuICAgICAgfVxuICAgICAgaWYoYS50IDwgdGhpcy50KSB7XG4gICAgICAgIGMgLT0gYS5zO1xuICAgICAgICB3aGlsZShpIDwgdGhpcy50KSB7XG4gICAgICAgICAgYyArPSB0aGlzW2ldO1xuICAgICAgICAgIHJbaSsrXSA9IGMmdGhpcy5ETTtcbiAgICAgICAgICBjID4+PSB0aGlzLkRCO1xuICAgICAgICB9XG4gICAgICAgIGMgKz0gdGhpcy5zO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIGMgKz0gdGhpcy5zO1xuICAgICAgICB3aGlsZShpIDwgYS50KSB7XG4gICAgICAgICAgYyAtPSBhW2ldO1xuICAgICAgICAgIHJbaSsrXSA9IGMmdGhpcy5ETTtcbiAgICAgICAgICBjID4+PSB0aGlzLkRCO1xuICAgICAgICB9XG4gICAgICAgIGMgLT0gYS5zO1xuICAgICAgfVxuICAgICAgci5zID0gKGM8MCk/LTE6MDtcbiAgICAgIGlmKGMgPCAtMSkgcltpKytdID0gdGhpcy5EVitjO1xuICAgICAgZWxzZSBpZihjID4gMCkgcltpKytdID0gYztcbiAgICAgIHIudCA9IGk7XG4gICAgICByLmNsYW1wKCk7XG4gICAgfVxuXG4gICAgLy8gKHByb3RlY3RlZCkgciA9IHRoaXMgKiBhLCByICE9IHRoaXMsYSAoSEFDIDE0LjEyKVxuICAgIC8vIFwidGhpc1wiIHNob3VsZCBiZSB0aGUgbGFyZ2VyIG9uZSBpZiBhcHByb3ByaWF0ZS5cbiAgICBmdW5jdGlvbiBibnBNdWx0aXBseVRvKGEscikge1xuICAgICAgdmFyIHggPSB0aGlzLmFicygpLCB5ID0gYS5hYnMoKTtcbiAgICAgIHZhciBpID0geC50O1xuICAgICAgci50ID0gaSt5LnQ7XG4gICAgICB3aGlsZSgtLWkgPj0gMCkgcltpXSA9IDA7XG4gICAgICBmb3IoaSA9IDA7IGkgPCB5LnQ7ICsraSkgcltpK3gudF0gPSB4LmFtKDAseVtpXSxyLGksMCx4LnQpO1xuICAgICAgci5zID0gMDtcbiAgICAgIHIuY2xhbXAoKTtcbiAgICAgIGlmKHRoaXMucyAhPSBhLnMpIEJpZ0ludGVnZXIuWkVSTy5zdWJUbyhyLHIpO1xuICAgIH1cblxuICAgIC8vIChwcm90ZWN0ZWQpIHIgPSB0aGlzXjIsIHIgIT0gdGhpcyAoSEFDIDE0LjE2KVxuICAgIGZ1bmN0aW9uIGJucFNxdWFyZVRvKHIpIHtcbiAgICAgIHZhciB4ID0gdGhpcy5hYnMoKTtcbiAgICAgIHZhciBpID0gci50ID0gMip4LnQ7XG4gICAgICB3aGlsZSgtLWkgPj0gMCkgcltpXSA9IDA7XG4gICAgICBmb3IoaSA9IDA7IGkgPCB4LnQtMTsgKytpKSB7XG4gICAgICAgIHZhciBjID0geC5hbShpLHhbaV0sciwyKmksMCwxKTtcbiAgICAgICAgaWYoKHJbaSt4LnRdKz14LmFtKGkrMSwyKnhbaV0sciwyKmkrMSxjLHgudC1pLTEpKSA+PSB4LkRWKSB7XG4gICAgICAgICAgcltpK3gudF0gLT0geC5EVjtcbiAgICAgICAgICByW2kreC50KzFdID0gMTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYoci50ID4gMCkgcltyLnQtMV0gKz0geC5hbShpLHhbaV0sciwyKmksMCwxKTtcbiAgICAgIHIucyA9IDA7XG4gICAgICByLmNsYW1wKCk7XG4gICAgfVxuXG4gICAgLy8gKHByb3RlY3RlZCkgZGl2aWRlIHRoaXMgYnkgbSwgcXVvdGllbnQgYW5kIHJlbWFpbmRlciB0byBxLCByIChIQUMgMTQuMjApXG4gICAgLy8gciAhPSBxLCB0aGlzICE9IG0uICBxIG9yIHIgbWF5IGJlIG51bGwuXG4gICAgZnVuY3Rpb24gYm5wRGl2UmVtVG8obSxxLHIpIHtcbiAgICAgIHZhciBwbSA9IG0uYWJzKCk7XG4gICAgICBpZihwbS50IDw9IDApIHJldHVybjtcbiAgICAgIHZhciBwdCA9IHRoaXMuYWJzKCk7XG4gICAgICBpZihwdC50IDwgcG0udCkge1xuICAgICAgICBpZihxICE9IG51bGwpIHEuZnJvbUludCgwKTtcbiAgICAgICAgaWYociAhPSBudWxsKSB0aGlzLmNvcHlUbyhyKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYociA9PSBudWxsKSByID0gbmJpKCk7XG4gICAgICB2YXIgeSA9IG5iaSgpLCB0cyA9IHRoaXMucywgbXMgPSBtLnM7XG4gICAgICB2YXIgbnNoID0gdGhpcy5EQi1uYml0cyhwbVtwbS50LTFdKTsgICAvLyBub3JtYWxpemUgbW9kdWx1c1xuICAgICAgaWYobnNoID4gMCkgeyBwbS5sU2hpZnRUbyhuc2gseSk7IHB0LmxTaGlmdFRvKG5zaCxyKTsgfVxuICAgICAgZWxzZSB7IHBtLmNvcHlUbyh5KTsgcHQuY29weVRvKHIpOyB9XG4gICAgICB2YXIgeXMgPSB5LnQ7XG4gICAgICB2YXIgeTAgPSB5W3lzLTFdO1xuICAgICAgaWYoeTAgPT0gMCkgcmV0dXJuO1xuICAgICAgdmFyIHl0ID0geTAqKDE8PHRoaXMuRjEpKygoeXM+MSk/eVt5cy0yXT4+dGhpcy5GMjowKTtcbiAgICAgIHZhciBkMSA9IHRoaXMuRlYveXQsIGQyID0gKDE8PHRoaXMuRjEpL3l0LCBlID0gMTw8dGhpcy5GMjtcbiAgICAgIHZhciBpID0gci50LCBqID0gaS15cywgdCA9IChxPT1udWxsKT9uYmkoKTpxO1xuICAgICAgeS5kbFNoaWZ0VG8oaix0KTtcbiAgICAgIGlmKHIuY29tcGFyZVRvKHQpID49IDApIHtcbiAgICAgICAgcltyLnQrK10gPSAxO1xuICAgICAgICByLnN1YlRvKHQscik7XG4gICAgICB9XG4gICAgICBCaWdJbnRlZ2VyLk9ORS5kbFNoaWZ0VG8oeXMsdCk7XG4gICAgICB0LnN1YlRvKHkseSk7ICAvLyBcIm5lZ2F0aXZlXCIgeSBzbyB3ZSBjYW4gcmVwbGFjZSBzdWIgd2l0aCBhbSBsYXRlclxuICAgICAgd2hpbGUoeS50IDwgeXMpIHlbeS50KytdID0gMDtcbiAgICAgIHdoaWxlKC0taiA+PSAwKSB7XG4gICAgICAgIC8vIEVzdGltYXRlIHF1b3RpZW50IGRpZ2l0XG4gICAgICAgIHZhciBxZCA9IChyWy0taV09PXkwKT90aGlzLkRNOk1hdGguZmxvb3IocltpXSpkMSsocltpLTFdK2UpKmQyKTtcbiAgICAgICAgaWYoKHJbaV0rPXkuYW0oMCxxZCxyLGosMCx5cykpIDwgcWQpIHsgICAvLyBUcnkgaXQgb3V0XG4gICAgICAgICAgeS5kbFNoaWZ0VG8oaix0KTtcbiAgICAgICAgICByLnN1YlRvKHQscik7XG4gICAgICAgICAgd2hpbGUocltpXSA8IC0tcWQpIHIuc3ViVG8odCxyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYocSAhPSBudWxsKSB7XG4gICAgICAgIHIuZHJTaGlmdFRvKHlzLHEpO1xuICAgICAgICBpZih0cyAhPSBtcykgQmlnSW50ZWdlci5aRVJPLnN1YlRvKHEscSk7XG4gICAgICB9XG4gICAgICByLnQgPSB5cztcbiAgICAgIHIuY2xhbXAoKTtcbiAgICAgIGlmKG5zaCA+IDApIHIuclNoaWZ0VG8obnNoLHIpOyAvLyBEZW5vcm1hbGl6ZSByZW1haW5kZXJcbiAgICAgIGlmKHRzIDwgMCkgQmlnSW50ZWdlci5aRVJPLnN1YlRvKHIscik7XG4gICAgfVxuXG4gICAgLy8gKHB1YmxpYykgdGhpcyBtb2QgYVxuICAgIGZ1bmN0aW9uIGJuTW9kKGEpIHtcbiAgICAgIHZhciByID0gbmJpKCk7XG4gICAgICB0aGlzLmFicygpLmRpdlJlbVRvKGEsbnVsbCxyKTtcbiAgICAgIGlmKHRoaXMucyA8IDAgJiYgci5jb21wYXJlVG8oQmlnSW50ZWdlci5aRVJPKSA+IDApIGEuc3ViVG8ocixyKTtcbiAgICAgIHJldHVybiByO1xuICAgIH1cblxuICAgIC8vIE1vZHVsYXIgcmVkdWN0aW9uIHVzaW5nIFwiY2xhc3NpY1wiIGFsZ29yaXRobVxuICAgIGZ1bmN0aW9uIENsYXNzaWMobSkgeyB0aGlzLm0gPSBtOyB9XG4gICAgZnVuY3Rpb24gY0NvbnZlcnQoeCkge1xuICAgICAgaWYoeC5zIDwgMCB8fCB4LmNvbXBhcmVUbyh0aGlzLm0pID49IDApIHJldHVybiB4Lm1vZCh0aGlzLm0pO1xuICAgICAgZWxzZSByZXR1cm4geDtcbiAgICB9XG4gICAgZnVuY3Rpb24gY1JldmVydCh4KSB7IHJldHVybiB4OyB9XG4gICAgZnVuY3Rpb24gY1JlZHVjZSh4KSB7IHguZGl2UmVtVG8odGhpcy5tLG51bGwseCk7IH1cbiAgICBmdW5jdGlvbiBjTXVsVG8oeCx5LHIpIHsgeC5tdWx0aXBseVRvKHkscik7IHRoaXMucmVkdWNlKHIpOyB9XG4gICAgZnVuY3Rpb24gY1NxclRvKHgscikgeyB4LnNxdWFyZVRvKHIpOyB0aGlzLnJlZHVjZShyKTsgfVxuXG4gICAgQ2xhc3NpYy5wcm90b3R5cGUuY29udmVydCA9IGNDb252ZXJ0O1xuICAgIENsYXNzaWMucHJvdG90eXBlLnJldmVydCA9IGNSZXZlcnQ7XG4gICAgQ2xhc3NpYy5wcm90b3R5cGUucmVkdWNlID0gY1JlZHVjZTtcbiAgICBDbGFzc2ljLnByb3RvdHlwZS5tdWxUbyA9IGNNdWxUbztcbiAgICBDbGFzc2ljLnByb3RvdHlwZS5zcXJUbyA9IGNTcXJUbztcblxuICAgIC8vIChwcm90ZWN0ZWQpIHJldHVybiBcIi0xL3RoaXMgJSAyXkRCXCI7IHVzZWZ1bCBmb3IgTW9udC4gcmVkdWN0aW9uXG4gICAgLy8ganVzdGlmaWNhdGlvbjpcbiAgICAvLyAgICAgICAgIHh5ID09IDEgKG1vZCBtKVxuICAgIC8vICAgICAgICAgeHkgPSAgMStrbVxuICAgIC8vICAgeHkoMi14eSkgPSAoMStrbSkoMS1rbSlcbiAgICAvLyB4W3koMi14eSldID0gMS1rXjJtXjJcbiAgICAvLyB4W3koMi14eSldID09IDEgKG1vZCBtXjIpXG4gICAgLy8gaWYgeSBpcyAxL3ggbW9kIG0sIHRoZW4geSgyLXh5KSBpcyAxL3ggbW9kIG1eMlxuICAgIC8vIHNob3VsZCByZWR1Y2UgeCBhbmQgeSgyLXh5KSBieSBtXjIgYXQgZWFjaCBzdGVwIHRvIGtlZXAgc2l6ZSBib3VuZGVkLlxuICAgIC8vIEpTIG11bHRpcGx5IFwib3ZlcmZsb3dzXCIgZGlmZmVyZW50bHkgZnJvbSBDL0MrKywgc28gY2FyZSBpcyBuZWVkZWQgaGVyZS5cbiAgICBmdW5jdGlvbiBibnBJbnZEaWdpdCgpIHtcbiAgICAgIGlmKHRoaXMudCA8IDEpIHJldHVybiAwO1xuICAgICAgdmFyIHggPSB0aGlzWzBdO1xuICAgICAgaWYoKHgmMSkgPT0gMCkgcmV0dXJuIDA7XG4gICAgICB2YXIgeSA9IHgmMzsgICAgICAgLy8geSA9PSAxL3ggbW9kIDJeMlxuICAgICAgeSA9ICh5KigyLSh4JjB4ZikqeSkpJjB4ZjsgLy8geSA9PSAxL3ggbW9kIDJeNFxuICAgICAgeSA9ICh5KigyLSh4JjB4ZmYpKnkpKSYweGZmOyAgIC8vIHkgPT0gMS94IG1vZCAyXjhcbiAgICAgIHkgPSAoeSooMi0oKCh4JjB4ZmZmZikqeSkmMHhmZmZmKSkpJjB4ZmZmZjsgICAgLy8geSA9PSAxL3ggbW9kIDJeMTZcbiAgICAgIC8vIGxhc3Qgc3RlcCAtIGNhbGN1bGF0ZSBpbnZlcnNlIG1vZCBEViBkaXJlY3RseTtcbiAgICAgIC8vIGFzc3VtZXMgMTYgPCBEQiA8PSAzMiBhbmQgYXNzdW1lcyBhYmlsaXR5IHRvIGhhbmRsZSA0OC1iaXQgaW50c1xuICAgICAgeSA9ICh5KigyLXgqeSV0aGlzLkRWKSkldGhpcy5EVjsgICAgICAgLy8geSA9PSAxL3ggbW9kIDJeZGJpdHNcbiAgICAgIC8vIHdlIHJlYWxseSB3YW50IHRoZSBuZWdhdGl2ZSBpbnZlcnNlLCBhbmQgLURWIDwgeSA8IERWXG4gICAgICByZXR1cm4gKHk+MCk/dGhpcy5EVi15Oi15O1xuICAgIH1cblxuICAgIC8vIE1vbnRnb21lcnkgcmVkdWN0aW9uXG4gICAgZnVuY3Rpb24gTW9udGdvbWVyeShtKSB7XG4gICAgICB0aGlzLm0gPSBtO1xuICAgICAgdGhpcy5tcCA9IG0uaW52RGlnaXQoKTtcbiAgICAgIHRoaXMubXBsID0gdGhpcy5tcCYweDdmZmY7XG4gICAgICB0aGlzLm1waCA9IHRoaXMubXA+PjE1O1xuICAgICAgdGhpcy51bSA9ICgxPDwobS5EQi0xNSkpLTE7XG4gICAgICB0aGlzLm10MiA9IDIqbS50O1xuICAgIH1cblxuICAgIC8vIHhSIG1vZCBtXG4gICAgZnVuY3Rpb24gbW9udENvbnZlcnQoeCkge1xuICAgICAgdmFyIHIgPSBuYmkoKTtcbiAgICAgIHguYWJzKCkuZGxTaGlmdFRvKHRoaXMubS50LHIpO1xuICAgICAgci5kaXZSZW1Ubyh0aGlzLm0sbnVsbCxyKTtcbiAgICAgIGlmKHgucyA8IDAgJiYgci5jb21wYXJlVG8oQmlnSW50ZWdlci5aRVJPKSA+IDApIHRoaXMubS5zdWJUbyhyLHIpO1xuICAgICAgcmV0dXJuIHI7XG4gICAgfVxuXG4gICAgLy8geC9SIG1vZCBtXG4gICAgZnVuY3Rpb24gbW9udFJldmVydCh4KSB7XG4gICAgICB2YXIgciA9IG5iaSgpO1xuICAgICAgeC5jb3B5VG8ocik7XG4gICAgICB0aGlzLnJlZHVjZShyKTtcbiAgICAgIHJldHVybiByO1xuICAgIH1cblxuICAgIC8vIHggPSB4L1IgbW9kIG0gKEhBQyAxNC4zMilcbiAgICBmdW5jdGlvbiBtb250UmVkdWNlKHgpIHtcbiAgICAgIHdoaWxlKHgudCA8PSB0aGlzLm10MikgLy8gcGFkIHggc28gYW0gaGFzIGVub3VnaCByb29tIGxhdGVyXG4gICAgICAgIHhbeC50KytdID0gMDtcbiAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLm0udDsgKytpKSB7XG4gICAgICAgIC8vIGZhc3RlciB3YXkgb2YgY2FsY3VsYXRpbmcgdTAgPSB4W2ldKm1wIG1vZCBEVlxuICAgICAgICB2YXIgaiA9IHhbaV0mMHg3ZmZmO1xuICAgICAgICB2YXIgdTAgPSAoaip0aGlzLm1wbCsoKChqKnRoaXMubXBoKyh4W2ldPj4xNSkqdGhpcy5tcGwpJnRoaXMudW0pPDwxNSkpJnguRE07XG4gICAgICAgIC8vIHVzZSBhbSB0byBjb21iaW5lIHRoZSBtdWx0aXBseS1zaGlmdC1hZGQgaW50byBvbmUgY2FsbFxuICAgICAgICBqID0gaSt0aGlzLm0udDtcbiAgICAgICAgeFtqXSArPSB0aGlzLm0uYW0oMCx1MCx4LGksMCx0aGlzLm0udCk7XG4gICAgICAgIC8vIHByb3BhZ2F0ZSBjYXJyeVxuICAgICAgICB3aGlsZSh4W2pdID49IHguRFYpIHsgeFtqXSAtPSB4LkRWOyB4Wysral0rKzsgfVxuICAgICAgfVxuICAgICAgeC5jbGFtcCgpO1xuICAgICAgeC5kclNoaWZ0VG8odGhpcy5tLnQseCk7XG4gICAgICBpZih4LmNvbXBhcmVUbyh0aGlzLm0pID49IDApIHguc3ViVG8odGhpcy5tLHgpO1xuICAgIH1cblxuICAgIC8vIHIgPSBcInheMi9SIG1vZCBtXCI7IHggIT0gclxuICAgIGZ1bmN0aW9uIG1vbnRTcXJUbyh4LHIpIHsgeC5zcXVhcmVUbyhyKTsgdGhpcy5yZWR1Y2Uocik7IH1cblxuICAgIC8vIHIgPSBcInh5L1IgbW9kIG1cIjsgeCx5ICE9IHJcbiAgICBmdW5jdGlvbiBtb250TXVsVG8oeCx5LHIpIHsgeC5tdWx0aXBseVRvKHkscik7IHRoaXMucmVkdWNlKHIpOyB9XG5cbiAgICBNb250Z29tZXJ5LnByb3RvdHlwZS5jb252ZXJ0ID0gbW9udENvbnZlcnQ7XG4gICAgTW9udGdvbWVyeS5wcm90b3R5cGUucmV2ZXJ0ID0gbW9udFJldmVydDtcbiAgICBNb250Z29tZXJ5LnByb3RvdHlwZS5yZWR1Y2UgPSBtb250UmVkdWNlO1xuICAgIE1vbnRnb21lcnkucHJvdG90eXBlLm11bFRvID0gbW9udE11bFRvO1xuICAgIE1vbnRnb21lcnkucHJvdG90eXBlLnNxclRvID0gbW9udFNxclRvO1xuXG4gICAgLy8gKHByb3RlY3RlZCkgdHJ1ZSBpZmYgdGhpcyBpcyBldmVuXG4gICAgZnVuY3Rpb24gYm5wSXNFdmVuKCkgeyByZXR1cm4gKCh0aGlzLnQ+MCk/KHRoaXNbMF0mMSk6dGhpcy5zKSA9PSAwOyB9XG5cbiAgICAvLyAocHJvdGVjdGVkKSB0aGlzXmUsIGUgPCAyXjMyLCBkb2luZyBzcXIgYW5kIG11bCB3aXRoIFwiclwiIChIQUMgMTQuNzkpXG4gICAgZnVuY3Rpb24gYm5wRXhwKGUseikge1xuICAgICAgaWYoZSA+IDB4ZmZmZmZmZmYgfHwgZSA8IDEpIHJldHVybiBCaWdJbnRlZ2VyLk9ORTtcbiAgICAgIHZhciByID0gbmJpKCksIHIyID0gbmJpKCksIGcgPSB6LmNvbnZlcnQodGhpcyksIGkgPSBuYml0cyhlKS0xO1xuICAgICAgZy5jb3B5VG8ocik7XG4gICAgICB3aGlsZSgtLWkgPj0gMCkge1xuICAgICAgICB6LnNxclRvKHIscjIpO1xuICAgICAgICBpZigoZSYoMTw8aSkpID4gMCkgei5tdWxUbyhyMixnLHIpO1xuICAgICAgICBlbHNlIHsgdmFyIHQgPSByOyByID0gcjI7IHIyID0gdDsgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHoucmV2ZXJ0KHIpO1xuICAgIH1cblxuICAgIC8vIChwdWJsaWMpIHRoaXNeZSAlIG0sIDAgPD0gZSA8IDJeMzJcbiAgICBmdW5jdGlvbiBibk1vZFBvd0ludChlLG0pIHtcbiAgICAgIHZhciB6O1xuICAgICAgaWYoZSA8IDI1NiB8fCBtLmlzRXZlbigpKSB6ID0gbmV3IENsYXNzaWMobSk7IGVsc2UgeiA9IG5ldyBNb250Z29tZXJ5KG0pO1xuICAgICAgcmV0dXJuIHRoaXMuZXhwKGUseik7XG4gICAgfVxuXG4gICAgLy8gcHJvdGVjdGVkXG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUuY29weVRvID0gYm5wQ29weVRvO1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLmZyb21JbnQgPSBibnBGcm9tSW50O1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLmZyb21TdHJpbmcgPSBibnBGcm9tU3RyaW5nO1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLmNsYW1wID0gYm5wQ2xhbXA7XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUuZGxTaGlmdFRvID0gYm5wRExTaGlmdFRvO1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLmRyU2hpZnRUbyA9IGJucERSU2hpZnRUbztcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5sU2hpZnRUbyA9IGJucExTaGlmdFRvO1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLnJTaGlmdFRvID0gYm5wUlNoaWZ0VG87XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUuc3ViVG8gPSBibnBTdWJUbztcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5tdWx0aXBseVRvID0gYm5wTXVsdGlwbHlUbztcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5zcXVhcmVUbyA9IGJucFNxdWFyZVRvO1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLmRpdlJlbVRvID0gYm5wRGl2UmVtVG87XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUuaW52RGlnaXQgPSBibnBJbnZEaWdpdDtcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5pc0V2ZW4gPSBibnBJc0V2ZW47XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUuZXhwID0gYm5wRXhwO1xuXG4gICAgLy8gcHVibGljXG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUudG9TdHJpbmcgPSBiblRvU3RyaW5nO1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLm5lZ2F0ZSA9IGJuTmVnYXRlO1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLmFicyA9IGJuQWJzO1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLmNvbXBhcmVUbyA9IGJuQ29tcGFyZVRvO1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLmJpdExlbmd0aCA9IGJuQml0TGVuZ3RoO1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLm1vZCA9IGJuTW9kO1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLm1vZFBvd0ludCA9IGJuTW9kUG93SW50O1xuXG4gICAgLy8gXCJjb25zdGFudHNcIlxuICAgIEJpZ0ludGVnZXIuWkVSTyA9IG5idigwKTtcbiAgICBCaWdJbnRlZ2VyLk9ORSA9IG5idigxKTtcblxuICAgIC8vIENvcHlyaWdodCAoYykgMjAwNS0yMDA5ICBUb20gV3VcbiAgICAvLyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICAgIC8vIFNlZSBcIkxJQ0VOU0VcIiBmb3IgZGV0YWlscy5cblxuICAgIC8vIEV4dGVuZGVkIEphdmFTY3JpcHQgQk4gZnVuY3Rpb25zLCByZXF1aXJlZCBmb3IgUlNBIHByaXZhdGUgb3BzLlxuXG4gICAgLy8gVmVyc2lvbiAxLjE6IG5ldyBCaWdJbnRlZ2VyKFwiMFwiLCAxMCkgcmV0dXJucyBcInByb3BlclwiIHplcm9cbiAgICAvLyBWZXJzaW9uIDEuMjogc3F1YXJlKCkgQVBJLCBpc1Byb2JhYmxlUHJpbWUgZml4XG5cbiAgICAvLyAocHVibGljKVxuICAgIGZ1bmN0aW9uIGJuQ2xvbmUoKSB7IHZhciByID0gbmJpKCk7IHRoaXMuY29weVRvKHIpOyByZXR1cm4gcjsgfVxuXG4gICAgLy8gKHB1YmxpYykgcmV0dXJuIHZhbHVlIGFzIGludGVnZXJcbiAgICBmdW5jdGlvbiBibkludFZhbHVlKCkge1xuICAgICAgaWYodGhpcy5zIDwgMCkge1xuICAgICAgICBpZih0aGlzLnQgPT0gMSkgcmV0dXJuIHRoaXNbMF0tdGhpcy5EVjtcbiAgICAgICAgZWxzZSBpZih0aGlzLnQgPT0gMCkgcmV0dXJuIC0xO1xuICAgICAgfVxuICAgICAgZWxzZSBpZih0aGlzLnQgPT0gMSkgcmV0dXJuIHRoaXNbMF07XG4gICAgICBlbHNlIGlmKHRoaXMudCA9PSAwKSByZXR1cm4gMDtcbiAgICAgIC8vIGFzc3VtZXMgMTYgPCBEQiA8IDMyXG4gICAgICByZXR1cm4gKCh0aGlzWzFdJigoMTw8KDMyLXRoaXMuREIpKS0xKSk8PHRoaXMuREIpfHRoaXNbMF07XG4gICAgfVxuXG4gICAgLy8gKHB1YmxpYykgcmV0dXJuIHZhbHVlIGFzIGJ5dGVcbiAgICBmdW5jdGlvbiBibkJ5dGVWYWx1ZSgpIHsgcmV0dXJuICh0aGlzLnQ9PTApP3RoaXMuczoodGhpc1swXTw8MjQpPj4yNDsgfVxuXG4gICAgLy8gKHB1YmxpYykgcmV0dXJuIHZhbHVlIGFzIHNob3J0IChhc3N1bWVzIERCPj0xNilcbiAgICBmdW5jdGlvbiBiblNob3J0VmFsdWUoKSB7IHJldHVybiAodGhpcy50PT0wKT90aGlzLnM6KHRoaXNbMF08PDE2KT4+MTY7IH1cblxuICAgIC8vIChwcm90ZWN0ZWQpIHJldHVybiB4IHMudC4gcl54IDwgRFZcbiAgICBmdW5jdGlvbiBibnBDaHVua1NpemUocikgeyByZXR1cm4gTWF0aC5mbG9vcihNYXRoLkxOMip0aGlzLkRCL01hdGgubG9nKHIpKTsgfVxuXG4gICAgLy8gKHB1YmxpYykgMCBpZiB0aGlzID09IDAsIDEgaWYgdGhpcyA+IDBcbiAgICBmdW5jdGlvbiBiblNpZ051bSgpIHtcbiAgICAgIGlmKHRoaXMucyA8IDApIHJldHVybiAtMTtcbiAgICAgIGVsc2UgaWYodGhpcy50IDw9IDAgfHwgKHRoaXMudCA9PSAxICYmIHRoaXNbMF0gPD0gMCkpIHJldHVybiAwO1xuICAgICAgZWxzZSByZXR1cm4gMTtcbiAgICB9XG5cbiAgICAvLyAocHJvdGVjdGVkKSBjb252ZXJ0IHRvIHJhZGl4IHN0cmluZ1xuICAgIGZ1bmN0aW9uIGJucFRvUmFkaXgoYikge1xuICAgICAgaWYoYiA9PSBudWxsKSBiID0gMTA7XG4gICAgICBpZih0aGlzLnNpZ251bSgpID09IDAgfHwgYiA8IDIgfHwgYiA+IDM2KSByZXR1cm4gXCIwXCI7XG4gICAgICB2YXIgY3MgPSB0aGlzLmNodW5rU2l6ZShiKTtcbiAgICAgIHZhciBhID0gTWF0aC5wb3coYixjcyk7XG4gICAgICB2YXIgZCA9IG5idihhKSwgeSA9IG5iaSgpLCB6ID0gbmJpKCksIHIgPSBcIlwiO1xuICAgICAgdGhpcy5kaXZSZW1UbyhkLHkseik7XG4gICAgICB3aGlsZSh5LnNpZ251bSgpID4gMCkge1xuICAgICAgICByID0gKGErei5pbnRWYWx1ZSgpKS50b1N0cmluZyhiKS5zdWJzdHIoMSkgKyByO1xuICAgICAgICB5LmRpdlJlbVRvKGQseSx6KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB6LmludFZhbHVlKCkudG9TdHJpbmcoYikgKyByO1xuICAgIH1cblxuICAgIC8vIChwcm90ZWN0ZWQpIGNvbnZlcnQgZnJvbSByYWRpeCBzdHJpbmdcbiAgICBmdW5jdGlvbiBibnBGcm9tUmFkaXgocyxiKSB7XG4gICAgICB0aGlzLmZyb21JbnQoMCk7XG4gICAgICBpZihiID09IG51bGwpIGIgPSAxMDtcbiAgICAgIHZhciBjcyA9IHRoaXMuY2h1bmtTaXplKGIpO1xuICAgICAgdmFyIGQgPSBNYXRoLnBvdyhiLGNzKSwgbWkgPSBmYWxzZSwgaiA9IDAsIHcgPSAwO1xuICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdmFyIHggPSBpbnRBdChzLGkpO1xuICAgICAgICBpZih4IDwgMCkge1xuICAgICAgICAgIGlmKHMuY2hhckF0KGkpID09IFwiLVwiICYmIHRoaXMuc2lnbnVtKCkgPT0gMCkgbWkgPSB0cnVlO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHcgPSBiKncreDtcbiAgICAgICAgaWYoKytqID49IGNzKSB7XG4gICAgICAgICAgdGhpcy5kTXVsdGlwbHkoZCk7XG4gICAgICAgICAgdGhpcy5kQWRkT2Zmc2V0KHcsMCk7XG4gICAgICAgICAgaiA9IDA7XG4gICAgICAgICAgdyA9IDA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmKGogPiAwKSB7XG4gICAgICAgIHRoaXMuZE11bHRpcGx5KE1hdGgucG93KGIsaikpO1xuICAgICAgICB0aGlzLmRBZGRPZmZzZXQodywwKTtcbiAgICAgIH1cbiAgICAgIGlmKG1pKSBCaWdJbnRlZ2VyLlpFUk8uc3ViVG8odGhpcyx0aGlzKTtcbiAgICB9XG5cbiAgICAvLyAocHJvdGVjdGVkKSBhbHRlcm5hdGUgY29uc3RydWN0b3JcbiAgICBmdW5jdGlvbiBibnBGcm9tTnVtYmVyKGEsYixjKSB7XG4gICAgICBpZihcIm51bWJlclwiID09IHR5cGVvZiBiKSB7XG4gICAgICAgIC8vIG5ldyBCaWdJbnRlZ2VyKGludCxpbnQsUk5HKVxuICAgICAgICBpZihhIDwgMikgdGhpcy5mcm9tSW50KDEpO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICB0aGlzLmZyb21OdW1iZXIoYSxjKTtcbiAgICAgICAgICBpZighdGhpcy50ZXN0Qml0KGEtMSkpICAgIC8vIGZvcmNlIE1TQiBzZXRcbiAgICAgICAgICAgIHRoaXMuYml0d2lzZVRvKEJpZ0ludGVnZXIuT05FLnNoaWZ0TGVmdChhLTEpLG9wX29yLHRoaXMpO1xuICAgICAgICAgIGlmKHRoaXMuaXNFdmVuKCkpIHRoaXMuZEFkZE9mZnNldCgxLDApOyAvLyBmb3JjZSBvZGRcbiAgICAgICAgICB3aGlsZSghdGhpcy5pc1Byb2JhYmxlUHJpbWUoYikpIHtcbiAgICAgICAgICAgIHRoaXMuZEFkZE9mZnNldCgyLDApO1xuICAgICAgICAgICAgaWYodGhpcy5iaXRMZW5ndGgoKSA+IGEpIHRoaXMuc3ViVG8oQmlnSW50ZWdlci5PTkUuc2hpZnRMZWZ0KGEtMSksdGhpcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgLy8gbmV3IEJpZ0ludGVnZXIoaW50LFJORylcbiAgICAgICAgdmFyIHggPSBuZXcgQXJyYXkoKSwgdCA9IGEmNztcbiAgICAgICAgeC5sZW5ndGggPSAoYT4+MykrMTtcbiAgICAgICAgYi5uZXh0Qnl0ZXMoeCk7XG4gICAgICAgIGlmKHQgPiAwKSB4WzBdICY9ICgoMTw8dCktMSk7IGVsc2UgeFswXSA9IDA7XG4gICAgICAgIHRoaXMuZnJvbVN0cmluZyh4LDI1Nik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gKHB1YmxpYykgY29udmVydCB0byBiaWdlbmRpYW4gYnl0ZSBhcnJheVxuICAgIGZ1bmN0aW9uIGJuVG9CeXRlQXJyYXkoKSB7XG4gICAgICB2YXIgaSA9IHRoaXMudCwgciA9IG5ldyBBcnJheSgpO1xuICAgICAgclswXSA9IHRoaXMucztcbiAgICAgIHZhciBwID0gdGhpcy5EQi0oaSp0aGlzLkRCKSU4LCBkLCBrID0gMDtcbiAgICAgIGlmKGktLSA+IDApIHtcbiAgICAgICAgaWYocCA8IHRoaXMuREIgJiYgKGQgPSB0aGlzW2ldPj5wKSAhPSAodGhpcy5zJnRoaXMuRE0pPj5wKVxuICAgICAgICAgIHJbaysrXSA9IGR8KHRoaXMuczw8KHRoaXMuREItcCkpO1xuICAgICAgICB3aGlsZShpID49IDApIHtcbiAgICAgICAgICBpZihwIDwgOCkge1xuICAgICAgICAgICAgZCA9ICh0aGlzW2ldJigoMTw8cCktMSkpPDwoOC1wKTtcbiAgICAgICAgICAgIGQgfD0gdGhpc1stLWldPj4ocCs9dGhpcy5EQi04KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBkID0gKHRoaXNbaV0+PihwLT04KSkmMHhmZjtcbiAgICAgICAgICAgIGlmKHAgPD0gMCkgeyBwICs9IHRoaXMuREI7IC0taTsgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZigoZCYweDgwKSAhPSAwKSBkIHw9IC0yNTY7XG4gICAgICAgICAgaWYoayA9PSAwICYmICh0aGlzLnMmMHg4MCkgIT0gKGQmMHg4MCkpICsraztcbiAgICAgICAgICBpZihrID4gMCB8fCBkICE9IHRoaXMucykgcltrKytdID0gZDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHI7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYm5FcXVhbHMoYSkgeyByZXR1cm4odGhpcy5jb21wYXJlVG8oYSk9PTApOyB9XG4gICAgZnVuY3Rpb24gYm5NaW4oYSkgeyByZXR1cm4odGhpcy5jb21wYXJlVG8oYSk8MCk/dGhpczphOyB9XG4gICAgZnVuY3Rpb24gYm5NYXgoYSkgeyByZXR1cm4odGhpcy5jb21wYXJlVG8oYSk+MCk/dGhpczphOyB9XG5cbiAgICAvLyAocHJvdGVjdGVkKSByID0gdGhpcyBvcCBhIChiaXR3aXNlKVxuICAgIGZ1bmN0aW9uIGJucEJpdHdpc2VUbyhhLG9wLHIpIHtcbiAgICAgIHZhciBpLCBmLCBtID0gTWF0aC5taW4oYS50LHRoaXMudCk7XG4gICAgICBmb3IoaSA9IDA7IGkgPCBtOyArK2kpIHJbaV0gPSBvcCh0aGlzW2ldLGFbaV0pO1xuICAgICAgaWYoYS50IDwgdGhpcy50KSB7XG4gICAgICAgIGYgPSBhLnMmdGhpcy5ETTtcbiAgICAgICAgZm9yKGkgPSBtOyBpIDwgdGhpcy50OyArK2kpIHJbaV0gPSBvcCh0aGlzW2ldLGYpO1xuICAgICAgICByLnQgPSB0aGlzLnQ7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgZiA9IHRoaXMucyZ0aGlzLkRNO1xuICAgICAgICBmb3IoaSA9IG07IGkgPCBhLnQ7ICsraSkgcltpXSA9IG9wKGYsYVtpXSk7XG4gICAgICAgIHIudCA9IGEudDtcbiAgICAgIH1cbiAgICAgIHIucyA9IG9wKHRoaXMucyxhLnMpO1xuICAgICAgci5jbGFtcCgpO1xuICAgIH1cblxuICAgIC8vIChwdWJsaWMpIHRoaXMgJiBhXG4gICAgZnVuY3Rpb24gb3BfYW5kKHgseSkgeyByZXR1cm4geCZ5OyB9XG4gICAgZnVuY3Rpb24gYm5BbmQoYSkgeyB2YXIgciA9IG5iaSgpOyB0aGlzLmJpdHdpc2VUbyhhLG9wX2FuZCxyKTsgcmV0dXJuIHI7IH1cblxuICAgIC8vIChwdWJsaWMpIHRoaXMgfCBhXG4gICAgZnVuY3Rpb24gb3Bfb3IoeCx5KSB7IHJldHVybiB4fHk7IH1cbiAgICBmdW5jdGlvbiBibk9yKGEpIHsgdmFyIHIgPSBuYmkoKTsgdGhpcy5iaXR3aXNlVG8oYSxvcF9vcixyKTsgcmV0dXJuIHI7IH1cblxuICAgIC8vIChwdWJsaWMpIHRoaXMgXiBhXG4gICAgZnVuY3Rpb24gb3BfeG9yKHgseSkgeyByZXR1cm4geF55OyB9XG4gICAgZnVuY3Rpb24gYm5Yb3IoYSkgeyB2YXIgciA9IG5iaSgpOyB0aGlzLmJpdHdpc2VUbyhhLG9wX3hvcixyKTsgcmV0dXJuIHI7IH1cblxuICAgIC8vIChwdWJsaWMpIHRoaXMgJiB+YVxuICAgIGZ1bmN0aW9uIG9wX2FuZG5vdCh4LHkpIHsgcmV0dXJuIHgmfnk7IH1cbiAgICBmdW5jdGlvbiBibkFuZE5vdChhKSB7IHZhciByID0gbmJpKCk7IHRoaXMuYml0d2lzZVRvKGEsb3BfYW5kbm90LHIpOyByZXR1cm4gcjsgfVxuXG4gICAgLy8gKHB1YmxpYykgfnRoaXNcbiAgICBmdW5jdGlvbiBibk5vdCgpIHtcbiAgICAgIHZhciByID0gbmJpKCk7XG4gICAgICBmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy50OyArK2kpIHJbaV0gPSB0aGlzLkRNJn50aGlzW2ldO1xuICAgICAgci50ID0gdGhpcy50O1xuICAgICAgci5zID0gfnRoaXMucztcbiAgICAgIHJldHVybiByO1xuICAgIH1cblxuICAgIC8vIChwdWJsaWMpIHRoaXMgPDwgblxuICAgIGZ1bmN0aW9uIGJuU2hpZnRMZWZ0KG4pIHtcbiAgICAgIHZhciByID0gbmJpKCk7XG4gICAgICBpZihuIDwgMCkgdGhpcy5yU2hpZnRUbygtbixyKTsgZWxzZSB0aGlzLmxTaGlmdFRvKG4scik7XG4gICAgICByZXR1cm4gcjtcbiAgICB9XG5cbiAgICAvLyAocHVibGljKSB0aGlzID4+IG5cbiAgICBmdW5jdGlvbiBiblNoaWZ0UmlnaHQobikge1xuICAgICAgdmFyIHIgPSBuYmkoKTtcbiAgICAgIGlmKG4gPCAwKSB0aGlzLmxTaGlmdFRvKC1uLHIpOyBlbHNlIHRoaXMuclNoaWZ0VG8obixyKTtcbiAgICAgIHJldHVybiByO1xuICAgIH1cblxuICAgIC8vIHJldHVybiBpbmRleCBvZiBsb3dlc3QgMS1iaXQgaW4geCwgeCA8IDJeMzFcbiAgICBmdW5jdGlvbiBsYml0KHgpIHtcbiAgICAgIGlmKHggPT0gMCkgcmV0dXJuIC0xO1xuICAgICAgdmFyIHIgPSAwO1xuICAgICAgaWYoKHgmMHhmZmZmKSA9PSAwKSB7IHggPj49IDE2OyByICs9IDE2OyB9XG4gICAgICBpZigoeCYweGZmKSA9PSAwKSB7IHggPj49IDg7IHIgKz0gODsgfVxuICAgICAgaWYoKHgmMHhmKSA9PSAwKSB7IHggPj49IDQ7IHIgKz0gNDsgfVxuICAgICAgaWYoKHgmMykgPT0gMCkgeyB4ID4+PSAyOyByICs9IDI7IH1cbiAgICAgIGlmKCh4JjEpID09IDApICsrcjtcbiAgICAgIHJldHVybiByO1xuICAgIH1cblxuICAgIC8vIChwdWJsaWMpIHJldHVybnMgaW5kZXggb2YgbG93ZXN0IDEtYml0IChvciAtMSBpZiBub25lKVxuICAgIGZ1bmN0aW9uIGJuR2V0TG93ZXN0U2V0Qml0KCkge1xuICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHRoaXMudDsgKytpKVxuICAgICAgICBpZih0aGlzW2ldICE9IDApIHJldHVybiBpKnRoaXMuREIrbGJpdCh0aGlzW2ldKTtcbiAgICAgIGlmKHRoaXMucyA8IDApIHJldHVybiB0aGlzLnQqdGhpcy5EQjtcbiAgICAgIHJldHVybiAtMTtcbiAgICB9XG5cbiAgICAvLyByZXR1cm4gbnVtYmVyIG9mIDEgYml0cyBpbiB4XG4gICAgZnVuY3Rpb24gY2JpdCh4KSB7XG4gICAgICB2YXIgciA9IDA7XG4gICAgICB3aGlsZSh4ICE9IDApIHsgeCAmPSB4LTE7ICsrcjsgfVxuICAgICAgcmV0dXJuIHI7XG4gICAgfVxuXG4gICAgLy8gKHB1YmxpYykgcmV0dXJuIG51bWJlciBvZiBzZXQgYml0c1xuICAgIGZ1bmN0aW9uIGJuQml0Q291bnQoKSB7XG4gICAgICB2YXIgciA9IDAsIHggPSB0aGlzLnMmdGhpcy5ETTtcbiAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLnQ7ICsraSkgciArPSBjYml0KHRoaXNbaV1eeCk7XG4gICAgICByZXR1cm4gcjtcbiAgICB9XG5cbiAgICAvLyAocHVibGljKSB0cnVlIGlmZiBudGggYml0IGlzIHNldFxuICAgIGZ1bmN0aW9uIGJuVGVzdEJpdChuKSB7XG4gICAgICB2YXIgaiA9IE1hdGguZmxvb3Iobi90aGlzLkRCKTtcbiAgICAgIGlmKGogPj0gdGhpcy50KSByZXR1cm4odGhpcy5zIT0wKTtcbiAgICAgIHJldHVybigodGhpc1tqXSYoMTw8KG4ldGhpcy5EQikpKSE9MCk7XG4gICAgfVxuXG4gICAgLy8gKHByb3RlY3RlZCkgdGhpcyBvcCAoMTw8bilcbiAgICBmdW5jdGlvbiBibnBDaGFuZ2VCaXQobixvcCkge1xuICAgICAgdmFyIHIgPSBCaWdJbnRlZ2VyLk9ORS5zaGlmdExlZnQobik7XG4gICAgICB0aGlzLmJpdHdpc2VUbyhyLG9wLHIpO1xuICAgICAgcmV0dXJuIHI7XG4gICAgfVxuXG4gICAgLy8gKHB1YmxpYykgdGhpcyB8ICgxPDxuKVxuICAgIGZ1bmN0aW9uIGJuU2V0Qml0KG4pIHsgcmV0dXJuIHRoaXMuY2hhbmdlQml0KG4sb3Bfb3IpOyB9XG5cbiAgICAvLyAocHVibGljKSB0aGlzICYgfigxPDxuKVxuICAgIGZ1bmN0aW9uIGJuQ2xlYXJCaXQobikgeyByZXR1cm4gdGhpcy5jaGFuZ2VCaXQobixvcF9hbmRub3QpOyB9XG5cbiAgICAvLyAocHVibGljKSB0aGlzIF4gKDE8PG4pXG4gICAgZnVuY3Rpb24gYm5GbGlwQml0KG4pIHsgcmV0dXJuIHRoaXMuY2hhbmdlQml0KG4sb3BfeG9yKTsgfVxuXG4gICAgLy8gKHByb3RlY3RlZCkgciA9IHRoaXMgKyBhXG4gICAgZnVuY3Rpb24gYm5wQWRkVG8oYSxyKSB7XG4gICAgICB2YXIgaSA9IDAsIGMgPSAwLCBtID0gTWF0aC5taW4oYS50LHRoaXMudCk7XG4gICAgICB3aGlsZShpIDwgbSkge1xuICAgICAgICBjICs9IHRoaXNbaV0rYVtpXTtcbiAgICAgICAgcltpKytdID0gYyZ0aGlzLkRNO1xuICAgICAgICBjID4+PSB0aGlzLkRCO1xuICAgICAgfVxuICAgICAgaWYoYS50IDwgdGhpcy50KSB7XG4gICAgICAgIGMgKz0gYS5zO1xuICAgICAgICB3aGlsZShpIDwgdGhpcy50KSB7XG4gICAgICAgICAgYyArPSB0aGlzW2ldO1xuICAgICAgICAgIHJbaSsrXSA9IGMmdGhpcy5ETTtcbiAgICAgICAgICBjID4+PSB0aGlzLkRCO1xuICAgICAgICB9XG4gICAgICAgIGMgKz0gdGhpcy5zO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIGMgKz0gdGhpcy5zO1xuICAgICAgICB3aGlsZShpIDwgYS50KSB7XG4gICAgICAgICAgYyArPSBhW2ldO1xuICAgICAgICAgIHJbaSsrXSA9IGMmdGhpcy5ETTtcbiAgICAgICAgICBjID4+PSB0aGlzLkRCO1xuICAgICAgICB9XG4gICAgICAgIGMgKz0gYS5zO1xuICAgICAgfVxuICAgICAgci5zID0gKGM8MCk/LTE6MDtcbiAgICAgIGlmKGMgPiAwKSByW2krK10gPSBjO1xuICAgICAgZWxzZSBpZihjIDwgLTEpIHJbaSsrXSA9IHRoaXMuRFYrYztcbiAgICAgIHIudCA9IGk7XG4gICAgICByLmNsYW1wKCk7XG4gICAgfVxuXG4gICAgLy8gKHB1YmxpYykgdGhpcyArIGFcbiAgICBmdW5jdGlvbiBibkFkZChhKSB7IHZhciByID0gbmJpKCk7IHRoaXMuYWRkVG8oYSxyKTsgcmV0dXJuIHI7IH1cblxuICAgIC8vIChwdWJsaWMpIHRoaXMgLSBhXG4gICAgZnVuY3Rpb24gYm5TdWJ0cmFjdChhKSB7IHZhciByID0gbmJpKCk7IHRoaXMuc3ViVG8oYSxyKTsgcmV0dXJuIHI7IH1cblxuICAgIC8vIChwdWJsaWMpIHRoaXMgKiBhXG4gICAgZnVuY3Rpb24gYm5NdWx0aXBseShhKSB7IHZhciByID0gbmJpKCk7IHRoaXMubXVsdGlwbHlUbyhhLHIpOyByZXR1cm4gcjsgfVxuXG4gICAgLy8gKHB1YmxpYykgdGhpc14yXG4gICAgZnVuY3Rpb24gYm5TcXVhcmUoKSB7IHZhciByID0gbmJpKCk7IHRoaXMuc3F1YXJlVG8ocik7IHJldHVybiByOyB9XG5cbiAgICAvLyAocHVibGljKSB0aGlzIC8gYVxuICAgIGZ1bmN0aW9uIGJuRGl2aWRlKGEpIHsgdmFyIHIgPSBuYmkoKTsgdGhpcy5kaXZSZW1UbyhhLHIsbnVsbCk7IHJldHVybiByOyB9XG5cbiAgICAvLyAocHVibGljKSB0aGlzICUgYVxuICAgIGZ1bmN0aW9uIGJuUmVtYWluZGVyKGEpIHsgdmFyIHIgPSBuYmkoKTsgdGhpcy5kaXZSZW1UbyhhLG51bGwscik7IHJldHVybiByOyB9XG5cbiAgICAvLyAocHVibGljKSBbdGhpcy9hLHRoaXMlYV1cbiAgICBmdW5jdGlvbiBibkRpdmlkZUFuZFJlbWFpbmRlcihhKSB7XG4gICAgICB2YXIgcSA9IG5iaSgpLCByID0gbmJpKCk7XG4gICAgICB0aGlzLmRpdlJlbVRvKGEscSxyKTtcbiAgICAgIHJldHVybiBuZXcgQXJyYXkocSxyKTtcbiAgICB9XG5cbiAgICAvLyAocHJvdGVjdGVkKSB0aGlzICo9IG4sIHRoaXMgPj0gMCwgMSA8IG4gPCBEVlxuICAgIGZ1bmN0aW9uIGJucERNdWx0aXBseShuKSB7XG4gICAgICB0aGlzW3RoaXMudF0gPSB0aGlzLmFtKDAsbi0xLHRoaXMsMCwwLHRoaXMudCk7XG4gICAgICArK3RoaXMudDtcbiAgICAgIHRoaXMuY2xhbXAoKTtcbiAgICB9XG5cbiAgICAvLyAocHJvdGVjdGVkKSB0aGlzICs9IG4gPDwgdyB3b3JkcywgdGhpcyA+PSAwXG4gICAgZnVuY3Rpb24gYm5wREFkZE9mZnNldChuLHcpIHtcbiAgICAgIGlmKG4gPT0gMCkgcmV0dXJuO1xuICAgICAgd2hpbGUodGhpcy50IDw9IHcpIHRoaXNbdGhpcy50KytdID0gMDtcbiAgICAgIHRoaXNbd10gKz0gbjtcbiAgICAgIHdoaWxlKHRoaXNbd10gPj0gdGhpcy5EVikge1xuICAgICAgICB0aGlzW3ddIC09IHRoaXMuRFY7XG4gICAgICAgIGlmKCsrdyA+PSB0aGlzLnQpIHRoaXNbdGhpcy50KytdID0gMDtcbiAgICAgICAgKyt0aGlzW3ddO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEEgXCJudWxsXCIgcmVkdWNlclxuICAgIGZ1bmN0aW9uIE51bGxFeHAoKSB7fVxuICAgIGZ1bmN0aW9uIG5Ob3AoeCkgeyByZXR1cm4geDsgfVxuICAgIGZ1bmN0aW9uIG5NdWxUbyh4LHkscikgeyB4Lm11bHRpcGx5VG8oeSxyKTsgfVxuICAgIGZ1bmN0aW9uIG5TcXJUbyh4LHIpIHsgeC5zcXVhcmVUbyhyKTsgfVxuXG4gICAgTnVsbEV4cC5wcm90b3R5cGUuY29udmVydCA9IG5Ob3A7XG4gICAgTnVsbEV4cC5wcm90b3R5cGUucmV2ZXJ0ID0gbk5vcDtcbiAgICBOdWxsRXhwLnByb3RvdHlwZS5tdWxUbyA9IG5NdWxUbztcbiAgICBOdWxsRXhwLnByb3RvdHlwZS5zcXJUbyA9IG5TcXJUbztcblxuICAgIC8vIChwdWJsaWMpIHRoaXNeZVxuICAgIGZ1bmN0aW9uIGJuUG93KGUpIHsgcmV0dXJuIHRoaXMuZXhwKGUsbmV3IE51bGxFeHAoKSk7IH1cblxuICAgIC8vIChwcm90ZWN0ZWQpIHIgPSBsb3dlciBuIHdvcmRzIG9mIFwidGhpcyAqIGFcIiwgYS50IDw9IG5cbiAgICAvLyBcInRoaXNcIiBzaG91bGQgYmUgdGhlIGxhcmdlciBvbmUgaWYgYXBwcm9wcmlhdGUuXG4gICAgZnVuY3Rpb24gYm5wTXVsdGlwbHlMb3dlclRvKGEsbixyKSB7XG4gICAgICB2YXIgaSA9IE1hdGgubWluKHRoaXMudCthLnQsbik7XG4gICAgICByLnMgPSAwOyAvLyBhc3N1bWVzIGEsdGhpcyA+PSAwXG4gICAgICByLnQgPSBpO1xuICAgICAgd2hpbGUoaSA+IDApIHJbLS1pXSA9IDA7XG4gICAgICB2YXIgajtcbiAgICAgIGZvcihqID0gci50LXRoaXMudDsgaSA8IGo7ICsraSkgcltpK3RoaXMudF0gPSB0aGlzLmFtKDAsYVtpXSxyLGksMCx0aGlzLnQpO1xuICAgICAgZm9yKGogPSBNYXRoLm1pbihhLnQsbik7IGkgPCBqOyArK2kpIHRoaXMuYW0oMCxhW2ldLHIsaSwwLG4taSk7XG4gICAgICByLmNsYW1wKCk7XG4gICAgfVxuXG4gICAgLy8gKHByb3RlY3RlZCkgciA9IFwidGhpcyAqIGFcIiB3aXRob3V0IGxvd2VyIG4gd29yZHMsIG4gPiAwXG4gICAgLy8gXCJ0aGlzXCIgc2hvdWxkIGJlIHRoZSBsYXJnZXIgb25lIGlmIGFwcHJvcHJpYXRlLlxuICAgIGZ1bmN0aW9uIGJucE11bHRpcGx5VXBwZXJUbyhhLG4scikge1xuICAgICAgLS1uO1xuICAgICAgdmFyIGkgPSByLnQgPSB0aGlzLnQrYS50LW47XG4gICAgICByLnMgPSAwOyAvLyBhc3N1bWVzIGEsdGhpcyA+PSAwXG4gICAgICB3aGlsZSgtLWkgPj0gMCkgcltpXSA9IDA7XG4gICAgICBmb3IoaSA9IE1hdGgubWF4KG4tdGhpcy50LDApOyBpIDwgYS50OyArK2kpXG4gICAgICAgIHJbdGhpcy50K2ktbl0gPSB0aGlzLmFtKG4taSxhW2ldLHIsMCwwLHRoaXMudCtpLW4pO1xuICAgICAgci5jbGFtcCgpO1xuICAgICAgci5kclNoaWZ0VG8oMSxyKTtcbiAgICB9XG5cbiAgICAvLyBCYXJyZXR0IG1vZHVsYXIgcmVkdWN0aW9uXG4gICAgZnVuY3Rpb24gQmFycmV0dChtKSB7XG4gICAgICAvLyBzZXR1cCBCYXJyZXR0XG4gICAgICB0aGlzLnIyID0gbmJpKCk7XG4gICAgICB0aGlzLnEzID0gbmJpKCk7XG4gICAgICBCaWdJbnRlZ2VyLk9ORS5kbFNoaWZ0VG8oMiptLnQsdGhpcy5yMik7XG4gICAgICB0aGlzLm11ID0gdGhpcy5yMi5kaXZpZGUobSk7XG4gICAgICB0aGlzLm0gPSBtO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJhcnJldHRDb252ZXJ0KHgpIHtcbiAgICAgIGlmKHgucyA8IDAgfHwgeC50ID4gMip0aGlzLm0udCkgcmV0dXJuIHgubW9kKHRoaXMubSk7XG4gICAgICBlbHNlIGlmKHguY29tcGFyZVRvKHRoaXMubSkgPCAwKSByZXR1cm4geDtcbiAgICAgIGVsc2UgeyB2YXIgciA9IG5iaSgpOyB4LmNvcHlUbyhyKTsgdGhpcy5yZWR1Y2Uocik7IHJldHVybiByOyB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYmFycmV0dFJldmVydCh4KSB7IHJldHVybiB4OyB9XG5cbiAgICAvLyB4ID0geCBtb2QgbSAoSEFDIDE0LjQyKVxuICAgIGZ1bmN0aW9uIGJhcnJldHRSZWR1Y2UoeCkge1xuICAgICAgeC5kclNoaWZ0VG8odGhpcy5tLnQtMSx0aGlzLnIyKTtcbiAgICAgIGlmKHgudCA+IHRoaXMubS50KzEpIHsgeC50ID0gdGhpcy5tLnQrMTsgeC5jbGFtcCgpOyB9XG4gICAgICB0aGlzLm11Lm11bHRpcGx5VXBwZXJUbyh0aGlzLnIyLHRoaXMubS50KzEsdGhpcy5xMyk7XG4gICAgICB0aGlzLm0ubXVsdGlwbHlMb3dlclRvKHRoaXMucTMsdGhpcy5tLnQrMSx0aGlzLnIyKTtcbiAgICAgIHdoaWxlKHguY29tcGFyZVRvKHRoaXMucjIpIDwgMCkgeC5kQWRkT2Zmc2V0KDEsdGhpcy5tLnQrMSk7XG4gICAgICB4LnN1YlRvKHRoaXMucjIseCk7XG4gICAgICB3aGlsZSh4LmNvbXBhcmVUbyh0aGlzLm0pID49IDApIHguc3ViVG8odGhpcy5tLHgpO1xuICAgIH1cblxuICAgIC8vIHIgPSB4XjIgbW9kIG07IHggIT0gclxuICAgIGZ1bmN0aW9uIGJhcnJldHRTcXJUbyh4LHIpIHsgeC5zcXVhcmVUbyhyKTsgdGhpcy5yZWR1Y2Uocik7IH1cblxuICAgIC8vIHIgPSB4KnkgbW9kIG07IHgseSAhPSByXG4gICAgZnVuY3Rpb24gYmFycmV0dE11bFRvKHgseSxyKSB7IHgubXVsdGlwbHlUbyh5LHIpOyB0aGlzLnJlZHVjZShyKTsgfVxuXG4gICAgQmFycmV0dC5wcm90b3R5cGUuY29udmVydCA9IGJhcnJldHRDb252ZXJ0O1xuICAgIEJhcnJldHQucHJvdG90eXBlLnJldmVydCA9IGJhcnJldHRSZXZlcnQ7XG4gICAgQmFycmV0dC5wcm90b3R5cGUucmVkdWNlID0gYmFycmV0dFJlZHVjZTtcbiAgICBCYXJyZXR0LnByb3RvdHlwZS5tdWxUbyA9IGJhcnJldHRNdWxUbztcbiAgICBCYXJyZXR0LnByb3RvdHlwZS5zcXJUbyA9IGJhcnJldHRTcXJUbztcblxuICAgIC8vIChwdWJsaWMpIHRoaXNeZSAlIG0gKEhBQyAxNC44NSlcbiAgICBmdW5jdGlvbiBibk1vZFBvdyhlLG0pIHtcbiAgICAgIHZhciBpID0gZS5iaXRMZW5ndGgoKSwgaywgciA9IG5idigxKSwgejtcbiAgICAgIGlmKGkgPD0gMCkgcmV0dXJuIHI7XG4gICAgICBlbHNlIGlmKGkgPCAxOCkgayA9IDE7XG4gICAgICBlbHNlIGlmKGkgPCA0OCkgayA9IDM7XG4gICAgICBlbHNlIGlmKGkgPCAxNDQpIGsgPSA0O1xuICAgICAgZWxzZSBpZihpIDwgNzY4KSBrID0gNTtcbiAgICAgIGVsc2UgayA9IDY7XG4gICAgICBpZihpIDwgOClcbiAgICAgICAgeiA9IG5ldyBDbGFzc2ljKG0pO1xuICAgICAgZWxzZSBpZihtLmlzRXZlbigpKVxuICAgICAgICB6ID0gbmV3IEJhcnJldHQobSk7XG4gICAgICBlbHNlXG4gICAgICAgIHogPSBuZXcgTW9udGdvbWVyeShtKTtcblxuICAgICAgLy8gcHJlY29tcHV0YXRpb25cbiAgICAgIHZhciBnID0gbmV3IEFycmF5KCksIG4gPSAzLCBrMSA9IGstMSwga20gPSAoMTw8ayktMTtcbiAgICAgIGdbMV0gPSB6LmNvbnZlcnQodGhpcyk7XG4gICAgICBpZihrID4gMSkge1xuICAgICAgICB2YXIgZzIgPSBuYmkoKTtcbiAgICAgICAgei5zcXJUbyhnWzFdLGcyKTtcbiAgICAgICAgd2hpbGUobiA8PSBrbSkge1xuICAgICAgICAgIGdbbl0gPSBuYmkoKTtcbiAgICAgICAgICB6Lm11bFRvKGcyLGdbbi0yXSxnW25dKTtcbiAgICAgICAgICBuICs9IDI7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIGogPSBlLnQtMSwgdywgaXMxID0gdHJ1ZSwgcjIgPSBuYmkoKSwgdDtcbiAgICAgIGkgPSBuYml0cyhlW2pdKS0xO1xuICAgICAgd2hpbGUoaiA+PSAwKSB7XG4gICAgICAgIGlmKGkgPj0gazEpIHcgPSAoZVtqXT4+KGktazEpKSZrbTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgdyA9IChlW2pdJigoMTw8KGkrMSkpLTEpKTw8KGsxLWkpO1xuICAgICAgICAgIGlmKGogPiAwKSB3IHw9IGVbai0xXT4+KHRoaXMuREIraS1rMSk7XG4gICAgICAgIH1cblxuICAgICAgICBuID0gaztcbiAgICAgICAgd2hpbGUoKHcmMSkgPT0gMCkgeyB3ID4+PSAxOyAtLW47IH1cbiAgICAgICAgaWYoKGkgLT0gbikgPCAwKSB7IGkgKz0gdGhpcy5EQjsgLS1qOyB9XG4gICAgICAgIGlmKGlzMSkgeyAgICAvLyByZXQgPT0gMSwgZG9uJ3QgYm90aGVyIHNxdWFyaW5nIG9yIG11bHRpcGx5aW5nIGl0XG4gICAgICAgICAgZ1t3XS5jb3B5VG8ocik7XG4gICAgICAgICAgaXMxID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgd2hpbGUobiA+IDEpIHsgei5zcXJUbyhyLHIyKTsgei5zcXJUbyhyMixyKTsgbiAtPSAyOyB9XG4gICAgICAgICAgaWYobiA+IDApIHouc3FyVG8ocixyMik7IGVsc2UgeyB0ID0gcjsgciA9IHIyOyByMiA9IHQ7IH1cbiAgICAgICAgICB6Lm11bFRvKHIyLGdbd10scik7XG4gICAgICAgIH1cblxuICAgICAgICB3aGlsZShqID49IDAgJiYgKGVbal0mKDE8PGkpKSA9PSAwKSB7XG4gICAgICAgICAgei5zcXJUbyhyLHIyKTsgdCA9IHI7IHIgPSByMjsgcjIgPSB0O1xuICAgICAgICAgIGlmKC0taSA8IDApIHsgaSA9IHRoaXMuREItMTsgLS1qOyB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB6LnJldmVydChyKTtcbiAgICB9XG5cbiAgICAvLyAocHVibGljKSBnY2QodGhpcyxhKSAoSEFDIDE0LjU0KVxuICAgIGZ1bmN0aW9uIGJuR0NEKGEpIHtcbiAgICAgIHZhciB4ID0gKHRoaXMuczwwKT90aGlzLm5lZ2F0ZSgpOnRoaXMuY2xvbmUoKTtcbiAgICAgIHZhciB5ID0gKGEuczwwKT9hLm5lZ2F0ZSgpOmEuY2xvbmUoKTtcbiAgICAgIGlmKHguY29tcGFyZVRvKHkpIDwgMCkgeyB2YXIgdCA9IHg7IHggPSB5OyB5ID0gdDsgfVxuICAgICAgdmFyIGkgPSB4LmdldExvd2VzdFNldEJpdCgpLCBnID0geS5nZXRMb3dlc3RTZXRCaXQoKTtcbiAgICAgIGlmKGcgPCAwKSByZXR1cm4geDtcbiAgICAgIGlmKGkgPCBnKSBnID0gaTtcbiAgICAgIGlmKGcgPiAwKSB7XG4gICAgICAgIHguclNoaWZ0VG8oZyx4KTtcbiAgICAgICAgeS5yU2hpZnRUbyhnLHkpO1xuICAgICAgfVxuICAgICAgd2hpbGUoeC5zaWdudW0oKSA+IDApIHtcbiAgICAgICAgaWYoKGkgPSB4LmdldExvd2VzdFNldEJpdCgpKSA+IDApIHguclNoaWZ0VG8oaSx4KTtcbiAgICAgICAgaWYoKGkgPSB5LmdldExvd2VzdFNldEJpdCgpKSA+IDApIHkuclNoaWZ0VG8oaSx5KTtcbiAgICAgICAgaWYoeC5jb21wYXJlVG8oeSkgPj0gMCkge1xuICAgICAgICAgIHguc3ViVG8oeSx4KTtcbiAgICAgICAgICB4LnJTaGlmdFRvKDEseCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgeS5zdWJUbyh4LHkpO1xuICAgICAgICAgIHkuclNoaWZ0VG8oMSx5KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYoZyA+IDApIHkubFNoaWZ0VG8oZyx5KTtcbiAgICAgIHJldHVybiB5O1xuICAgIH1cblxuICAgIC8vIChwcm90ZWN0ZWQpIHRoaXMgJSBuLCBuIDwgMl4yNlxuICAgIGZ1bmN0aW9uIGJucE1vZEludChuKSB7XG4gICAgICBpZihuIDw9IDApIHJldHVybiAwO1xuICAgICAgdmFyIGQgPSB0aGlzLkRWJW4sIHIgPSAodGhpcy5zPDApP24tMTowO1xuICAgICAgaWYodGhpcy50ID4gMClcbiAgICAgICAgaWYoZCA9PSAwKSByID0gdGhpc1swXSVuO1xuICAgICAgICBlbHNlIGZvcih2YXIgaSA9IHRoaXMudC0xOyBpID49IDA7IC0taSkgciA9IChkKnIrdGhpc1tpXSklbjtcbiAgICAgIHJldHVybiByO1xuICAgIH1cblxuICAgIC8vIChwdWJsaWMpIDEvdGhpcyAlIG0gKEhBQyAxNC42MSlcbiAgICBmdW5jdGlvbiBibk1vZEludmVyc2UobSkge1xuICAgICAgdmFyIGFjID0gbS5pc0V2ZW4oKTtcbiAgICAgIGlmKCh0aGlzLmlzRXZlbigpICYmIGFjKSB8fCBtLnNpZ251bSgpID09IDApIHJldHVybiBCaWdJbnRlZ2VyLlpFUk87XG4gICAgICB2YXIgdSA9IG0uY2xvbmUoKSwgdiA9IHRoaXMuY2xvbmUoKTtcbiAgICAgIHZhciBhID0gbmJ2KDEpLCBiID0gbmJ2KDApLCBjID0gbmJ2KDApLCBkID0gbmJ2KDEpO1xuICAgICAgd2hpbGUodS5zaWdudW0oKSAhPSAwKSB7XG4gICAgICAgIHdoaWxlKHUuaXNFdmVuKCkpIHtcbiAgICAgICAgICB1LnJTaGlmdFRvKDEsdSk7XG4gICAgICAgICAgaWYoYWMpIHtcbiAgICAgICAgICAgIGlmKCFhLmlzRXZlbigpIHx8ICFiLmlzRXZlbigpKSB7IGEuYWRkVG8odGhpcyxhKTsgYi5zdWJUbyhtLGIpOyB9XG4gICAgICAgICAgICBhLnJTaGlmdFRvKDEsYSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2UgaWYoIWIuaXNFdmVuKCkpIGIuc3ViVG8obSxiKTtcbiAgICAgICAgICBiLnJTaGlmdFRvKDEsYik7XG4gICAgICAgIH1cbiAgICAgICAgd2hpbGUodi5pc0V2ZW4oKSkge1xuICAgICAgICAgIHYuclNoaWZ0VG8oMSx2KTtcbiAgICAgICAgICBpZihhYykge1xuICAgICAgICAgICAgaWYoIWMuaXNFdmVuKCkgfHwgIWQuaXNFdmVuKCkpIHsgYy5hZGRUbyh0aGlzLGMpOyBkLnN1YlRvKG0sZCk7IH1cbiAgICAgICAgICAgIGMuclNoaWZ0VG8oMSxjKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSBpZighZC5pc0V2ZW4oKSkgZC5zdWJUbyhtLGQpO1xuICAgICAgICAgIGQuclNoaWZ0VG8oMSxkKTtcbiAgICAgICAgfVxuICAgICAgICBpZih1LmNvbXBhcmVUbyh2KSA+PSAwKSB7XG4gICAgICAgICAgdS5zdWJUbyh2LHUpO1xuICAgICAgICAgIGlmKGFjKSBhLnN1YlRvKGMsYSk7XG4gICAgICAgICAgYi5zdWJUbyhkLGIpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIHYuc3ViVG8odSx2KTtcbiAgICAgICAgICBpZihhYykgYy5zdWJUbyhhLGMpO1xuICAgICAgICAgIGQuc3ViVG8oYixkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYodi5jb21wYXJlVG8oQmlnSW50ZWdlci5PTkUpICE9IDApIHJldHVybiBCaWdJbnRlZ2VyLlpFUk87XG4gICAgICBpZihkLmNvbXBhcmVUbyhtKSA+PSAwKSByZXR1cm4gZC5zdWJ0cmFjdChtKTtcbiAgICAgIGlmKGQuc2lnbnVtKCkgPCAwKSBkLmFkZFRvKG0sZCk7IGVsc2UgcmV0dXJuIGQ7XG4gICAgICBpZihkLnNpZ251bSgpIDwgMCkgcmV0dXJuIGQuYWRkKG0pOyBlbHNlIHJldHVybiBkO1xuICAgIH1cblxuICAgIHZhciBsb3dwcmltZXMgPSBbMiwzLDUsNywxMSwxMywxNywxOSwyMywyOSwzMSwzNyw0MSw0Myw0Nyw1Myw1OSw2MSw2Nyw3MSw3Myw3OSw4Myw4OSw5NywxMDEsMTAzLDEwNywxMDksMTEzLDEyNywxMzEsMTM3LDEzOSwxNDksMTUxLDE1NywxNjMsMTY3LDE3MywxNzksMTgxLDE5MSwxOTMsMTk3LDE5OSwyMTEsMjIzLDIyNywyMjksMjMzLDIzOSwyNDEsMjUxLDI1NywyNjMsMjY5LDI3MSwyNzcsMjgxLDI4MywyOTMsMzA3LDMxMSwzMTMsMzE3LDMzMSwzMzcsMzQ3LDM0OSwzNTMsMzU5LDM2NywzNzMsMzc5LDM4MywzODksMzk3LDQwMSw0MDksNDE5LDQyMSw0MzEsNDMzLDQzOSw0NDMsNDQ5LDQ1Nyw0NjEsNDYzLDQ2Nyw0NzksNDg3LDQ5MSw0OTksNTAzLDUwOSw1MjEsNTIzLDU0MSw1NDcsNTU3LDU2Myw1NjksNTcxLDU3Nyw1ODcsNTkzLDU5OSw2MDEsNjA3LDYxMyw2MTcsNjE5LDYzMSw2NDEsNjQzLDY0Nyw2NTMsNjU5LDY2MSw2NzMsNjc3LDY4Myw2OTEsNzAxLDcwOSw3MTksNzI3LDczMyw3MzksNzQzLDc1MSw3NTcsNzYxLDc2OSw3NzMsNzg3LDc5Nyw4MDksODExLDgyMSw4MjMsODI3LDgyOSw4MzksODUzLDg1Nyw4NTksODYzLDg3Nyw4ODEsODgzLDg4Nyw5MDcsOTExLDkxOSw5MjksOTM3LDk0MSw5NDcsOTUzLDk2Nyw5NzEsOTc3LDk4Myw5OTEsOTk3XTtcbiAgICB2YXIgbHBsaW0gPSAoMTw8MjYpL2xvd3ByaW1lc1tsb3dwcmltZXMubGVuZ3RoLTFdO1xuXG4gICAgLy8gKHB1YmxpYykgdGVzdCBwcmltYWxpdHkgd2l0aCBjZXJ0YWludHkgPj0gMS0uNV50XG4gICAgZnVuY3Rpb24gYm5Jc1Byb2JhYmxlUHJpbWUodCkge1xuICAgICAgdmFyIGksIHggPSB0aGlzLmFicygpO1xuICAgICAgaWYoeC50ID09IDEgJiYgeFswXSA8PSBsb3dwcmltZXNbbG93cHJpbWVzLmxlbmd0aC0xXSkge1xuICAgICAgICBmb3IoaSA9IDA7IGkgPCBsb3dwcmltZXMubGVuZ3RoOyArK2kpXG4gICAgICAgICAgaWYoeFswXSA9PSBsb3dwcmltZXNbaV0pIHJldHVybiB0cnVlO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZih4LmlzRXZlbigpKSByZXR1cm4gZmFsc2U7XG4gICAgICBpID0gMTtcbiAgICAgIHdoaWxlKGkgPCBsb3dwcmltZXMubGVuZ3RoKSB7XG4gICAgICAgIHZhciBtID0gbG93cHJpbWVzW2ldLCBqID0gaSsxO1xuICAgICAgICB3aGlsZShqIDwgbG93cHJpbWVzLmxlbmd0aCAmJiBtIDwgbHBsaW0pIG0gKj0gbG93cHJpbWVzW2orK107XG4gICAgICAgIG0gPSB4Lm1vZEludChtKTtcbiAgICAgICAgd2hpbGUoaSA8IGopIGlmKG0lbG93cHJpbWVzW2krK10gPT0gMCkgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHgubWlsbGVyUmFiaW4odCk7XG4gICAgfVxuXG4gICAgLy8gKHByb3RlY3RlZCkgdHJ1ZSBpZiBwcm9iYWJseSBwcmltZSAoSEFDIDQuMjQsIE1pbGxlci1SYWJpbilcbiAgICBmdW5jdGlvbiBibnBNaWxsZXJSYWJpbih0KSB7XG4gICAgICB2YXIgbjEgPSB0aGlzLnN1YnRyYWN0KEJpZ0ludGVnZXIuT05FKTtcbiAgICAgIHZhciBrID0gbjEuZ2V0TG93ZXN0U2V0Qml0KCk7XG4gICAgICBpZihrIDw9IDApIHJldHVybiBmYWxzZTtcbiAgICAgIHZhciByID0gbjEuc2hpZnRSaWdodChrKTtcbiAgICAgIHQgPSAodCsxKT4+MTtcbiAgICAgIGlmKHQgPiBsb3dwcmltZXMubGVuZ3RoKSB0ID0gbG93cHJpbWVzLmxlbmd0aDtcbiAgICAgIHZhciBhID0gbmJpKCk7XG4gICAgICBmb3IodmFyIGkgPSAwOyBpIDwgdDsgKytpKSB7XG4gICAgICAgIC8vUGljayBiYXNlcyBhdCByYW5kb20sIGluc3RlYWQgb2Ygc3RhcnRpbmcgYXQgMlxuICAgICAgICBhLmZyb21JbnQobG93cHJpbWVzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpsb3dwcmltZXMubGVuZ3RoKV0pO1xuICAgICAgICB2YXIgeSA9IGEubW9kUG93KHIsdGhpcyk7XG4gICAgICAgIGlmKHkuY29tcGFyZVRvKEJpZ0ludGVnZXIuT05FKSAhPSAwICYmIHkuY29tcGFyZVRvKG4xKSAhPSAwKSB7XG4gICAgICAgICAgdmFyIGogPSAxO1xuICAgICAgICAgIHdoaWxlKGorKyA8IGsgJiYgeS5jb21wYXJlVG8objEpICE9IDApIHtcbiAgICAgICAgICAgIHkgPSB5Lm1vZFBvd0ludCgyLHRoaXMpO1xuICAgICAgICAgICAgaWYoeS5jb21wYXJlVG8oQmlnSW50ZWdlci5PTkUpID09IDApIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYoeS5jb21wYXJlVG8objEpICE9IDApIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gcHJvdGVjdGVkXG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUuY2h1bmtTaXplID0gYm5wQ2h1bmtTaXplO1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLnRvUmFkaXggPSBibnBUb1JhZGl4O1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLmZyb21SYWRpeCA9IGJucEZyb21SYWRpeDtcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5mcm9tTnVtYmVyID0gYm5wRnJvbU51bWJlcjtcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5iaXR3aXNlVG8gPSBibnBCaXR3aXNlVG87XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUuY2hhbmdlQml0ID0gYm5wQ2hhbmdlQml0O1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLmFkZFRvID0gYm5wQWRkVG87XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUuZE11bHRpcGx5ID0gYm5wRE11bHRpcGx5O1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLmRBZGRPZmZzZXQgPSBibnBEQWRkT2Zmc2V0O1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLm11bHRpcGx5TG93ZXJUbyA9IGJucE11bHRpcGx5TG93ZXJUbztcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5tdWx0aXBseVVwcGVyVG8gPSBibnBNdWx0aXBseVVwcGVyVG87XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUubW9kSW50ID0gYm5wTW9kSW50O1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLm1pbGxlclJhYmluID0gYm5wTWlsbGVyUmFiaW47XG5cbiAgICAvLyBwdWJsaWNcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5jbG9uZSA9IGJuQ2xvbmU7XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUuaW50VmFsdWUgPSBibkludFZhbHVlO1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLmJ5dGVWYWx1ZSA9IGJuQnl0ZVZhbHVlO1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLnNob3J0VmFsdWUgPSBiblNob3J0VmFsdWU7XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUuc2lnbnVtID0gYm5TaWdOdW07XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUudG9CeXRlQXJyYXkgPSBiblRvQnl0ZUFycmF5O1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLmVxdWFscyA9IGJuRXF1YWxzO1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLm1pbiA9IGJuTWluO1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLm1heCA9IGJuTWF4O1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLmFuZCA9IGJuQW5kO1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLm9yID0gYm5PcjtcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS54b3IgPSBiblhvcjtcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5hbmROb3QgPSBibkFuZE5vdDtcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5ub3QgPSBibk5vdDtcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5zaGlmdExlZnQgPSBiblNoaWZ0TGVmdDtcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5zaGlmdFJpZ2h0ID0gYm5TaGlmdFJpZ2h0O1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLmdldExvd2VzdFNldEJpdCA9IGJuR2V0TG93ZXN0U2V0Qml0O1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLmJpdENvdW50ID0gYm5CaXRDb3VudDtcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS50ZXN0Qml0ID0gYm5UZXN0Qml0O1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLnNldEJpdCA9IGJuU2V0Qml0O1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLmNsZWFyQml0ID0gYm5DbGVhckJpdDtcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5mbGlwQml0ID0gYm5GbGlwQml0O1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLmFkZCA9IGJuQWRkO1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLnN1YnRyYWN0ID0gYm5TdWJ0cmFjdDtcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5tdWx0aXBseSA9IGJuTXVsdGlwbHk7XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUuZGl2aWRlID0gYm5EaXZpZGU7XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUucmVtYWluZGVyID0gYm5SZW1haW5kZXI7XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUuZGl2aWRlQW5kUmVtYWluZGVyID0gYm5EaXZpZGVBbmRSZW1haW5kZXI7XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUubW9kUG93ID0gYm5Nb2RQb3c7XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUubW9kSW52ZXJzZSA9IGJuTW9kSW52ZXJzZTtcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5wb3cgPSBiblBvdztcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5nY2QgPSBibkdDRDtcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5pc1Byb2JhYmxlUHJpbWUgPSBibklzUHJvYmFibGVQcmltZTtcblxuICAgIC8vIEpTQk4tc3BlY2lmaWMgZXh0ZW5zaW9uXG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUuc3F1YXJlID0gYm5TcXVhcmU7XG5cbiAgICAvLyBFeHBvc2UgdGhlIEJhcnJldHQgZnVuY3Rpb25cbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5CYXJyZXR0ID0gQmFycmV0dFxuXG4gICAgLy8gQmlnSW50ZWdlciBpbnRlcmZhY2VzIG5vdCBpbXBsZW1lbnRlZCBpbiBqc2JuOlxuXG4gICAgLy8gQmlnSW50ZWdlcihpbnQgc2lnbnVtLCBieXRlW10gbWFnbml0dWRlKVxuICAgIC8vIGRvdWJsZSBkb3VibGVWYWx1ZSgpXG4gICAgLy8gZmxvYXQgZmxvYXRWYWx1ZSgpXG4gICAgLy8gaW50IGhhc2hDb2RlKClcbiAgICAvLyBsb25nIGxvbmdWYWx1ZSgpXG4gICAgLy8gc3RhdGljIEJpZ0ludGVnZXIgdmFsdWVPZihsb25nIHZhbClcblxuICAgIC8vIFJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIC0gcmVxdWlyZXMgYSBQUk5HIGJhY2tlbmQsIGUuZy4gcHJuZzQuanNcblxuICAgIC8vIEZvciBiZXN0IHJlc3VsdHMsIHB1dCBjb2RlIGxpa2VcbiAgICAvLyA8Ym9keSBvbkNsaWNrPSdybmdfc2VlZF90aW1lKCk7JyBvbktleVByZXNzPSdybmdfc2VlZF90aW1lKCk7Jz5cbiAgICAvLyBpbiB5b3VyIG1haW4gSFRNTCBkb2N1bWVudC5cblxuICAgIHZhciBybmdfc3RhdGU7XG4gICAgdmFyIHJuZ19wb29sO1xuICAgIHZhciBybmdfcHB0cjtcblxuICAgIC8vIE1peCBpbiBhIDMyLWJpdCBpbnRlZ2VyIGludG8gdGhlIHBvb2xcbiAgICBmdW5jdGlvbiBybmdfc2VlZF9pbnQoeCkge1xuICAgICAgcm5nX3Bvb2xbcm5nX3BwdHIrK10gXj0geCAmIDI1NTtcbiAgICAgIHJuZ19wb29sW3JuZ19wcHRyKytdIF49ICh4ID4+IDgpICYgMjU1O1xuICAgICAgcm5nX3Bvb2xbcm5nX3BwdHIrK10gXj0gKHggPj4gMTYpICYgMjU1O1xuICAgICAgcm5nX3Bvb2xbcm5nX3BwdHIrK10gXj0gKHggPj4gMjQpICYgMjU1O1xuICAgICAgaWYocm5nX3BwdHIgPj0gcm5nX3BzaXplKSBybmdfcHB0ciAtPSBybmdfcHNpemU7XG4gICAgfVxuXG4gICAgLy8gTWl4IGluIHRoZSBjdXJyZW50IHRpbWUgKHcvbWlsbGlzZWNvbmRzKSBpbnRvIHRoZSBwb29sXG4gICAgZnVuY3Rpb24gcm5nX3NlZWRfdGltZSgpIHtcbiAgICAgIHJuZ19zZWVkX2ludChuZXcgRGF0ZSgpLmdldFRpbWUoKSk7XG4gICAgfVxuXG4gICAgLy8gSW5pdGlhbGl6ZSB0aGUgcG9vbCB3aXRoIGp1bmsgaWYgbmVlZGVkLlxuICAgIGlmKHJuZ19wb29sID09IG51bGwpIHtcbiAgICAgIHJuZ19wb29sID0gbmV3IEFycmF5KCk7XG4gICAgICBybmdfcHB0ciA9IDA7XG4gICAgICB2YXIgdDtcbiAgICAgIGlmKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgd2luZG93LmNyeXB0bykge1xuICAgICAgICBpZiAod2luZG93LmNyeXB0by5nZXRSYW5kb21WYWx1ZXMpIHtcbiAgICAgICAgICAvLyBVc2Ugd2ViY3J5cHRvIGlmIGF2YWlsYWJsZVxuICAgICAgICAgIHZhciB1YSA9IG5ldyBVaW50OEFycmF5KDMyKTtcbiAgICAgICAgICB3aW5kb3cuY3J5cHRvLmdldFJhbmRvbVZhbHVlcyh1YSk7XG4gICAgICAgICAgZm9yKHQgPSAwOyB0IDwgMzI7ICsrdClcbiAgICAgICAgICAgIHJuZ19wb29sW3JuZ19wcHRyKytdID0gdWFbdF07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZihuYXZpZ2F0b3IuYXBwTmFtZSA9PSBcIk5ldHNjYXBlXCIgJiYgbmF2aWdhdG9yLmFwcFZlcnNpb24gPCBcIjVcIikge1xuICAgICAgICAgIC8vIEV4dHJhY3QgZW50cm9weSAoMjU2IGJpdHMpIGZyb20gTlM0IFJORyBpZiBhdmFpbGFibGVcbiAgICAgICAgICB2YXIgeiA9IHdpbmRvdy5jcnlwdG8ucmFuZG9tKDMyKTtcbiAgICAgICAgICBmb3IodCA9IDA7IHQgPCB6Lmxlbmd0aDsgKyt0KVxuICAgICAgICAgICAgcm5nX3Bvb2xbcm5nX3BwdHIrK10gPSB6LmNoYXJDb2RlQXQodCkgJiAyNTU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHdoaWxlKHJuZ19wcHRyIDwgcm5nX3BzaXplKSB7ICAvLyBleHRyYWN0IHNvbWUgcmFuZG9tbmVzcyBmcm9tIE1hdGgucmFuZG9tKClcbiAgICAgICAgdCA9IE1hdGguZmxvb3IoNjU1MzYgKiBNYXRoLnJhbmRvbSgpKTtcbiAgICAgICAgcm5nX3Bvb2xbcm5nX3BwdHIrK10gPSB0ID4+PiA4O1xuICAgICAgICBybmdfcG9vbFtybmdfcHB0cisrXSA9IHQgJiAyNTU7XG4gICAgICB9XG4gICAgICBybmdfcHB0ciA9IDA7XG4gICAgICBybmdfc2VlZF90aW1lKCk7XG4gICAgICAvL3JuZ19zZWVkX2ludCh3aW5kb3cuc2NyZWVuWCk7XG4gICAgICAvL3JuZ19zZWVkX2ludCh3aW5kb3cuc2NyZWVuWSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcm5nX2dldF9ieXRlKCkge1xuICAgICAgaWYocm5nX3N0YXRlID09IG51bGwpIHtcbiAgICAgICAgcm5nX3NlZWRfdGltZSgpO1xuICAgICAgICBybmdfc3RhdGUgPSBwcm5nX25ld3N0YXRlKCk7XG4gICAgICAgIHJuZ19zdGF0ZS5pbml0KHJuZ19wb29sKTtcbiAgICAgICAgZm9yKHJuZ19wcHRyID0gMDsgcm5nX3BwdHIgPCBybmdfcG9vbC5sZW5ndGg7ICsrcm5nX3BwdHIpXG4gICAgICAgICAgcm5nX3Bvb2xbcm5nX3BwdHJdID0gMDtcbiAgICAgICAgcm5nX3BwdHIgPSAwO1xuICAgICAgICAvL3JuZ19wb29sID0gbnVsbDtcbiAgICAgIH1cbiAgICAgIC8vIFRPRE86IGFsbG93IHJlc2VlZGluZyBhZnRlciBmaXJzdCByZXF1ZXN0XG4gICAgICByZXR1cm4gcm5nX3N0YXRlLm5leHQoKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBybmdfZ2V0X2J5dGVzKGJhKSB7XG4gICAgICB2YXIgaTtcbiAgICAgIGZvcihpID0gMDsgaSA8IGJhLmxlbmd0aDsgKytpKSBiYVtpXSA9IHJuZ19nZXRfYnl0ZSgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIFNlY3VyZVJhbmRvbSgpIHt9XG5cbiAgICBTZWN1cmVSYW5kb20ucHJvdG90eXBlLm5leHRCeXRlcyA9IHJuZ19nZXRfYnl0ZXM7XG5cbiAgICAvLyBwcm5nNC5qcyAtIHVzZXMgQXJjZm91ciBhcyBhIFBSTkdcblxuICAgIGZ1bmN0aW9uIEFyY2ZvdXIoKSB7XG4gICAgICB0aGlzLmkgPSAwO1xuICAgICAgdGhpcy5qID0gMDtcbiAgICAgIHRoaXMuUyA9IG5ldyBBcnJheSgpO1xuICAgIH1cblxuICAgIC8vIEluaXRpYWxpemUgYXJjZm91ciBjb250ZXh0IGZyb20ga2V5LCBhbiBhcnJheSBvZiBpbnRzLCBlYWNoIGZyb20gWzAuLjI1NV1cbiAgICBmdW5jdGlvbiBBUkM0aW5pdChrZXkpIHtcbiAgICAgIHZhciBpLCBqLCB0O1xuICAgICAgZm9yKGkgPSAwOyBpIDwgMjU2OyArK2kpXG4gICAgICAgIHRoaXMuU1tpXSA9IGk7XG4gICAgICBqID0gMDtcbiAgICAgIGZvcihpID0gMDsgaSA8IDI1NjsgKytpKSB7XG4gICAgICAgIGogPSAoaiArIHRoaXMuU1tpXSArIGtleVtpICUga2V5Lmxlbmd0aF0pICYgMjU1O1xuICAgICAgICB0ID0gdGhpcy5TW2ldO1xuICAgICAgICB0aGlzLlNbaV0gPSB0aGlzLlNbal07XG4gICAgICAgIHRoaXMuU1tqXSA9IHQ7XG4gICAgICB9XG4gICAgICB0aGlzLmkgPSAwO1xuICAgICAgdGhpcy5qID0gMDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBBUkM0bmV4dCgpIHtcbiAgICAgIHZhciB0O1xuICAgICAgdGhpcy5pID0gKHRoaXMuaSArIDEpICYgMjU1O1xuICAgICAgdGhpcy5qID0gKHRoaXMuaiArIHRoaXMuU1t0aGlzLmldKSAmIDI1NTtcbiAgICAgIHQgPSB0aGlzLlNbdGhpcy5pXTtcbiAgICAgIHRoaXMuU1t0aGlzLmldID0gdGhpcy5TW3RoaXMual07XG4gICAgICB0aGlzLlNbdGhpcy5qXSA9IHQ7XG4gICAgICByZXR1cm4gdGhpcy5TWyh0ICsgdGhpcy5TW3RoaXMuaV0pICYgMjU1XTtcbiAgICB9XG5cbiAgICBBcmNmb3VyLnByb3RvdHlwZS5pbml0ID0gQVJDNGluaXQ7XG4gICAgQXJjZm91ci5wcm90b3R5cGUubmV4dCA9IEFSQzRuZXh0O1xuXG4gICAgLy8gUGx1ZyBpbiB5b3VyIFJORyBjb25zdHJ1Y3RvciBoZXJlXG4gICAgZnVuY3Rpb24gcHJuZ19uZXdzdGF0ZSgpIHtcbiAgICAgIHJldHVybiBuZXcgQXJjZm91cigpO1xuICAgIH1cblxuICAgIC8vIFBvb2wgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNCBhbmQgZ3JlYXRlciB0aGFuIDMyLlxuICAgIC8vIEFuIGFycmF5IG9mIGJ5dGVzIHRoZSBzaXplIG9mIHRoZSBwb29sIHdpbGwgYmUgcGFzc2VkIHRvIGluaXQoKVxuICAgIHZhciBybmdfcHNpemUgPSAyNTY7XG5cbiAgICBpZiAodHlwZW9mIGV4cG9ydHMgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IHtcbiAgICAgICAgICAgIGRlZmF1bHQ6IEJpZ0ludGVnZXIsXG4gICAgICAgICAgICBCaWdJbnRlZ2VyOiBCaWdJbnRlZ2VyLFxuICAgICAgICAgICAgU2VjdXJlUmFuZG9tOiBTZWN1cmVSYW5kb20sXG4gICAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5qc2JuID0ge1xuICAgICAgICAgIEJpZ0ludGVnZXI6IEJpZ0ludGVnZXIsXG4gICAgICAgICAgU2VjdXJlUmFuZG9tOiBTZWN1cmVSYW5kb21cbiAgICAgICAgfTtcbiAgICB9XG5cbn0pLmNhbGwodGhpcyk7XG4iLCIvKipcbiAqIENvbnZlcnQgYXJyYXkgb2YgMTYgYnl0ZSB2YWx1ZXMgdG8gVVVJRCBzdHJpbmcgZm9ybWF0IG9mIHRoZSBmb3JtOlxuICogWFhYWFhYWFgtWFhYWC1YWFhYLVhYWFgtWFhYWFhYWFhYWFhYXG4gKi9cbnZhciBieXRlVG9IZXggPSBbXTtcbmZvciAodmFyIGkgPSAwOyBpIDwgMjU2OyArK2kpIHtcbiAgYnl0ZVRvSGV4W2ldID0gKGkgKyAweDEwMCkudG9TdHJpbmcoMTYpLnN1YnN0cigxKTtcbn1cblxuZnVuY3Rpb24gYnl0ZXNUb1V1aWQoYnVmLCBvZmZzZXQpIHtcbiAgdmFyIGkgPSBvZmZzZXQgfHwgMDtcbiAgdmFyIGJ0aCA9IGJ5dGVUb0hleDtcbiAgLy8gam9pbiB1c2VkIHRvIGZpeCBtZW1vcnkgaXNzdWUgY2F1c2VkIGJ5IGNvbmNhdGVuYXRpb246IGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTMxNzUjYzRcbiAgcmV0dXJuIChbYnRoW2J1ZltpKytdXSwgYnRoW2J1ZltpKytdXSwgXG5cdGJ0aFtidWZbaSsrXV0sIGJ0aFtidWZbaSsrXV0sICctJyxcblx0YnRoW2J1ZltpKytdXSwgYnRoW2J1ZltpKytdXSwgJy0nLFxuXHRidGhbYnVmW2krK11dLCBidGhbYnVmW2krK11dLCAnLScsXG5cdGJ0aFtidWZbaSsrXV0sIGJ0aFtidWZbaSsrXV0sICctJyxcblx0YnRoW2J1ZltpKytdXSwgYnRoW2J1ZltpKytdXSxcblx0YnRoW2J1ZltpKytdXSwgYnRoW2J1ZltpKytdXSxcblx0YnRoW2J1ZltpKytdXSwgYnRoW2J1ZltpKytdXV0pLmpvaW4oJycpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJ5dGVzVG9VdWlkO1xuIiwiLy8gVW5pcXVlIElEIGNyZWF0aW9uIHJlcXVpcmVzIGEgaGlnaCBxdWFsaXR5IHJhbmRvbSAjIGdlbmVyYXRvci4gIEluIHRoZVxuLy8gYnJvd3NlciB0aGlzIGlzIGEgbGl0dGxlIGNvbXBsaWNhdGVkIGR1ZSB0byB1bmtub3duIHF1YWxpdHkgb2YgTWF0aC5yYW5kb20oKVxuLy8gYW5kIGluY29uc2lzdGVudCBzdXBwb3J0IGZvciB0aGUgYGNyeXB0b2AgQVBJLiAgV2UgZG8gdGhlIGJlc3Qgd2UgY2FuIHZpYVxuLy8gZmVhdHVyZS1kZXRlY3Rpb25cblxuLy8gZ2V0UmFuZG9tVmFsdWVzIG5lZWRzIHRvIGJlIGludm9rZWQgaW4gYSBjb250ZXh0IHdoZXJlIFwidGhpc1wiIGlzIGEgQ3J5cHRvXG4vLyBpbXBsZW1lbnRhdGlvbi4gQWxzbywgZmluZCB0aGUgY29tcGxldGUgaW1wbGVtZW50YXRpb24gb2YgY3J5cHRvIG9uIElFMTEuXG52YXIgZ2V0UmFuZG9tVmFsdWVzID0gKHR5cGVvZihjcnlwdG8pICE9ICd1bmRlZmluZWQnICYmIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMgJiYgY3J5cHRvLmdldFJhbmRvbVZhbHVlcy5iaW5kKGNyeXB0bykpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgKHR5cGVvZihtc0NyeXB0bykgIT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHdpbmRvdy5tc0NyeXB0by5nZXRSYW5kb21WYWx1ZXMgPT0gJ2Z1bmN0aW9uJyAmJiBtc0NyeXB0by5nZXRSYW5kb21WYWx1ZXMuYmluZChtc0NyeXB0bykpO1xuXG5pZiAoZ2V0UmFuZG9tVmFsdWVzKSB7XG4gIC8vIFdIQVRXRyBjcnlwdG8gUk5HIC0gaHR0cDovL3dpa2kud2hhdHdnLm9yZy93aWtpL0NyeXB0b1xuICB2YXIgcm5kczggPSBuZXcgVWludDhBcnJheSgxNik7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcblxuICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHdoYXR3Z1JORygpIHtcbiAgICBnZXRSYW5kb21WYWx1ZXMocm5kczgpO1xuICAgIHJldHVybiBybmRzODtcbiAgfTtcbn0gZWxzZSB7XG4gIC8vIE1hdGgucmFuZG9tKCktYmFzZWQgKFJORylcbiAgLy9cbiAgLy8gSWYgYWxsIGVsc2UgZmFpbHMsIHVzZSBNYXRoLnJhbmRvbSgpLiAgSXQncyBmYXN0LCBidXQgaXMgb2YgdW5zcGVjaWZpZWRcbiAgLy8gcXVhbGl0eS5cbiAgdmFyIHJuZHMgPSBuZXcgQXJyYXkoMTYpO1xuXG4gIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gbWF0aFJORygpIHtcbiAgICBmb3IgKHZhciBpID0gMCwgcjsgaSA8IDE2OyBpKyspIHtcbiAgICAgIGlmICgoaSAmIDB4MDMpID09PSAwKSByID0gTWF0aC5yYW5kb20oKSAqIDB4MTAwMDAwMDAwO1xuICAgICAgcm5kc1tpXSA9IHIgPj4+ICgoaSAmIDB4MDMpIDw8IDMpICYgMHhmZjtcbiAgICB9XG5cbiAgICByZXR1cm4gcm5kcztcbiAgfTtcbn1cbiIsInZhciBybmcgPSByZXF1aXJlKCcuL2xpYi9ybmcnKTtcbnZhciBieXRlc1RvVXVpZCA9IHJlcXVpcmUoJy4vbGliL2J5dGVzVG9VdWlkJyk7XG5cbmZ1bmN0aW9uIHY0KG9wdGlvbnMsIGJ1Ziwgb2Zmc2V0KSB7XG4gIHZhciBpID0gYnVmICYmIG9mZnNldCB8fCAwO1xuXG4gIGlmICh0eXBlb2Yob3B0aW9ucykgPT0gJ3N0cmluZycpIHtcbiAgICBidWYgPSBvcHRpb25zID09PSAnYmluYXJ5JyA/IG5ldyBBcnJheSgxNikgOiBudWxsO1xuICAgIG9wdGlvbnMgPSBudWxsO1xuICB9XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gIHZhciBybmRzID0gb3B0aW9ucy5yYW5kb20gfHwgKG9wdGlvbnMucm5nIHx8IHJuZykoKTtcblxuICAvLyBQZXIgNC40LCBzZXQgYml0cyBmb3IgdmVyc2lvbiBhbmQgYGNsb2NrX3NlcV9oaV9hbmRfcmVzZXJ2ZWRgXG4gIHJuZHNbNl0gPSAocm5kc1s2XSAmIDB4MGYpIHwgMHg0MDtcbiAgcm5kc1s4XSA9IChybmRzWzhdICYgMHgzZikgfCAweDgwO1xuXG4gIC8vIENvcHkgYnl0ZXMgdG8gYnVmZmVyLCBpZiBwcm92aWRlZFxuICBpZiAoYnVmKSB7XG4gICAgZm9yICh2YXIgaWkgPSAwOyBpaSA8IDE2OyArK2lpKSB7XG4gICAgICBidWZbaSArIGlpXSA9IHJuZHNbaWldO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBidWYgfHwgYnl0ZXNUb1V1aWQocm5kcyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdjQ7XG4iLCIvLyBEZWNsYXJlIHRoZSBFUzYgZmVhdHVyZXMgd2UncmUgdXNpbmdcblxuLy8gVE9ETzogQ29uc2lkZXIgdXNpbmcgdGhlIGxvY2FsIGZ1bmN0aW9uIHZlcnNpb25zIG9mIHRoZXNlLCBzbyB0aGF0IHdlXG4vLyBhdm9pZCBtb2RpZnlpbmcgYnJvd3NlciBnbG9iYWxzIChwb3RlbnRpYWwgZm9yIGludGVyb3AgYnVncyB3aXRoIG90aGVyIGxpYnJhcmllc1xuLy8gb24gdGhlIHBhZ2UgdGhhdCBtaWdodCBiZSBwb2x5ZmlsbGluZyBFUzYgZmVhdHVyZXMpXG5cbmltcG9ydCAnY29yZS1qcy9lczYvcHJvbWlzZSc7XG5pbXBvcnQgJ2NvcmUtanMvZm4vZnVuY3Rpb24vYmluZCc7XG5pbXBvcnQgJ2NvcmUtanMvZm4vb2JqZWN0L2Fzc2lnbic7XG5pbXBvcnQgJ2NvcmUtanMvZm4vYXJyYXkvZmluZCc7XG5pbXBvcnQgJ2NvcmUtanMvZm4vYXJyYXkvc29tZSc7XG5pbXBvcnQgJ2NvcmUtanMvZm4vYXJyYXkvaXMtYXJyYXknO1xuaW1wb3J0ICdjb3JlLWpzL2ZuL2FycmF5L3NwbGljZSc7XG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxuXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XG5pbXBvcnQgeyBUaW1lciB9IGZyb20gJy4vVGltZXIuanMnO1xuXG5jb25zdCBEZWZhdWx0QWNjZXNzVG9rZW5FeHBpcmluZ05vdGlmaWNhdGlvblRpbWUgPSA2MDsgLy8gc2Vjb25kc1xuXG5leHBvcnQgY2xhc3MgQWNjZXNzVG9rZW5FdmVudHMge1xuXG4gICAgY29uc3RydWN0b3Ioe1xuICAgICAgICBhY2Nlc3NUb2tlbkV4cGlyaW5nTm90aWZpY2F0aW9uVGltZSA9IERlZmF1bHRBY2Nlc3NUb2tlbkV4cGlyaW5nTm90aWZpY2F0aW9uVGltZSxcbiAgICAgICAgYWNjZXNzVG9rZW5FeHBpcmluZ1RpbWVyID0gbmV3IFRpbWVyKFwiQWNjZXNzIHRva2VuIGV4cGlyaW5nXCIpLFxuICAgICAgICBhY2Nlc3NUb2tlbkV4cGlyZWRUaW1lciA9IG5ldyBUaW1lcihcIkFjY2VzcyB0b2tlbiBleHBpcmVkXCIpXG4gICAgfSA9IHt9KSB7XG4gICAgICAgIHRoaXMuX2FjY2Vzc1Rva2VuRXhwaXJpbmdOb3RpZmljYXRpb25UaW1lID0gYWNjZXNzVG9rZW5FeHBpcmluZ05vdGlmaWNhdGlvblRpbWU7XG5cbiAgICAgICAgdGhpcy5fYWNjZXNzVG9rZW5FeHBpcmluZyA9IGFjY2Vzc1Rva2VuRXhwaXJpbmdUaW1lcjtcbiAgICAgICAgdGhpcy5fYWNjZXNzVG9rZW5FeHBpcmVkID0gYWNjZXNzVG9rZW5FeHBpcmVkVGltZXI7XG4gICAgfVxuXG4gICAgbG9hZChjb250YWluZXIpIHtcbiAgICAgICAgLy8gb25seSByZWdpc3RlciBldmVudHMgaWYgdGhlcmUncyBhbiBhY2Nlc3MgdG9rZW4gYW5kIGl0IGhhcyBhbiBleHBpcmF0aW9uXG4gICAgICAgIGlmIChjb250YWluZXIuYWNjZXNzX3Rva2VuICYmIGNvbnRhaW5lci5leHBpcmVzX2luICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGxldCBkdXJhdGlvbiA9IGNvbnRhaW5lci5leHBpcmVzX2luO1xuICAgICAgICAgICAgTG9nLmRlYnVnKFwiQWNjZXNzVG9rZW5FdmVudHMubG9hZDogYWNjZXNzIHRva2VuIHByZXNlbnQsIHJlbWFpbmluZyBkdXJhdGlvbjpcIiwgZHVyYXRpb24pO1xuXG4gICAgICAgICAgICBpZiAoZHVyYXRpb24gPiAwKSB7XG4gICAgICAgICAgICAgICAgLy8gb25seSByZWdpc3RlciBleHBpcmluZyBpZiB3ZSBzdGlsbCBoYXZlIHRpbWVcbiAgICAgICAgICAgICAgICBsZXQgZXhwaXJpbmcgPSBkdXJhdGlvbiAtIHRoaXMuX2FjY2Vzc1Rva2VuRXhwaXJpbmdOb3RpZmljYXRpb25UaW1lO1xuICAgICAgICAgICAgICAgIGlmIChleHBpcmluZyA8PSAwKXtcbiAgICAgICAgICAgICAgICAgICAgZXhwaXJpbmcgPSAxO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJBY2Nlc3NUb2tlbkV2ZW50cy5sb2FkOiByZWdpc3RlcmluZyBleHBpcmluZyB0aW1lciBpbjpcIiwgZXhwaXJpbmcpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2FjY2Vzc1Rva2VuRXhwaXJpbmcuaW5pdChleHBpcmluZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJBY2Nlc3NUb2tlbkV2ZW50cy5sb2FkOiBjYW5jZWxpbmcgZXhpc3RpbmcgZXhwaXJpbmcgdGltZXIgYmVjYXNlIHdlJ3JlIHBhc3QgZXhwaXJhdGlvbi5cIik7XG4gICAgICAgICAgICAgICAgdGhpcy5fYWNjZXNzVG9rZW5FeHBpcmluZy5jYW5jZWwoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gaWYgaXQncyBuZWdhdGl2ZSwgaXQgd2lsbCBzdGlsbCBmaXJlXG4gICAgICAgICAgICBsZXQgZXhwaXJlZCA9IGR1cmF0aW9uICsgMTtcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIkFjY2Vzc1Rva2VuRXZlbnRzLmxvYWQ6IHJlZ2lzdGVyaW5nIGV4cGlyZWQgdGltZXIgaW46XCIsIGV4cGlyZWQpO1xuICAgICAgICAgICAgdGhpcy5fYWNjZXNzVG9rZW5FeHBpcmVkLmluaXQoZXhwaXJlZCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9hY2Nlc3NUb2tlbkV4cGlyaW5nLmNhbmNlbCgpO1xuICAgICAgICAgICAgdGhpcy5fYWNjZXNzVG9rZW5FeHBpcmVkLmNhbmNlbCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdW5sb2FkKCkge1xuICAgICAgICBMb2cuZGVidWcoXCJBY2Nlc3NUb2tlbkV2ZW50cy51bmxvYWQ6IGNhbmNlbGluZyBleGlzdGluZyBhY2Nlc3MgdG9rZW4gdGltZXJzXCIpO1xuICAgICAgICB0aGlzLl9hY2Nlc3NUb2tlbkV4cGlyaW5nLmNhbmNlbCgpO1xuICAgICAgICB0aGlzLl9hY2Nlc3NUb2tlbkV4cGlyZWQuY2FuY2VsKCk7XG4gICAgfVxuXG4gICAgYWRkQWNjZXNzVG9rZW5FeHBpcmluZyhjYikge1xuICAgICAgICB0aGlzLl9hY2Nlc3NUb2tlbkV4cGlyaW5nLmFkZEhhbmRsZXIoY2IpO1xuICAgIH1cbiAgICByZW1vdmVBY2Nlc3NUb2tlbkV4cGlyaW5nKGNiKSB7XG4gICAgICAgIHRoaXMuX2FjY2Vzc1Rva2VuRXhwaXJpbmcucmVtb3ZlSGFuZGxlcihjYik7XG4gICAgfVxuXG4gICAgYWRkQWNjZXNzVG9rZW5FeHBpcmVkKGNiKSB7XG4gICAgICAgIHRoaXMuX2FjY2Vzc1Rva2VuRXhwaXJlZC5hZGRIYW5kbGVyKGNiKTtcbiAgICB9XG4gICAgcmVtb3ZlQWNjZXNzVG9rZW5FeHBpcmVkKGNiKSB7XG4gICAgICAgIHRoaXMuX2FjY2Vzc1Rva2VuRXhwaXJlZC5yZW1vdmVIYW5kbGVyKGNiKTtcbiAgICB9XG59XG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxuXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XG5cbmNvbnN0IERlZmF1bHRJbnRlcnZhbCA9IDIwMDA7XG5cbmV4cG9ydCBjbGFzcyBDaGVja1Nlc3Npb25JRnJhbWUge1xuICAgIGNvbnN0cnVjdG9yKGNhbGxiYWNrLCBjbGllbnRfaWQsIHVybCwgaW50ZXJ2YWwsIHN0b3BPbkVycm9yID0gdHJ1ZSkge1xuICAgICAgICB0aGlzLl9jYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgICAgICB0aGlzLl9jbGllbnRfaWQgPSBjbGllbnRfaWQ7XG4gICAgICAgIHRoaXMuX3VybCA9IHVybDtcbiAgICAgICAgdGhpcy5faW50ZXJ2YWwgPSBpbnRlcnZhbCB8fCBEZWZhdWx0SW50ZXJ2YWw7XG4gICAgICAgIHRoaXMuX3N0b3BPbkVycm9yID0gc3RvcE9uRXJyb3I7XG5cbiAgICAgICAgdmFyIGlkeCA9IHVybC5pbmRleE9mKFwiL1wiLCB1cmwuaW5kZXhPZihcIi8vXCIpICsgMik7XG4gICAgICAgIHRoaXMuX2ZyYW1lX29yaWdpbiA9IHVybC5zdWJzdHIoMCwgaWR4KTtcblxuICAgICAgICB0aGlzLl9mcmFtZSA9IHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaWZyYW1lXCIpO1xuXG4gICAgICAgIC8vIHNob3RndW4gYXBwcm9hY2hcbiAgICAgICAgdGhpcy5fZnJhbWUuc3R5bGUudmlzaWJpbGl0eSA9IFwiaGlkZGVuXCI7XG4gICAgICAgIHRoaXMuX2ZyYW1lLnN0eWxlLnBvc2l0aW9uID0gXCJhYnNvbHV0ZVwiO1xuICAgICAgICB0aGlzLl9mcmFtZS5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XG4gICAgICAgIHRoaXMuX2ZyYW1lLnN0eWxlLndpZHRoID0gMDtcbiAgICAgICAgdGhpcy5fZnJhbWUuc3R5bGUuaGVpZ2h0ID0gMDtcblxuICAgICAgICB0aGlzLl9mcmFtZS5zcmMgPSB1cmw7XG4gICAgfVxuICAgIGxvYWQoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fZnJhbWUub25sb2FkID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgd2luZG93LmRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhpcy5fZnJhbWUpO1xuICAgICAgICAgICAgdGhpcy5fYm91bmRNZXNzYWdlRXZlbnQgPSB0aGlzLl9tZXNzYWdlLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgdGhpcy5fYm91bmRNZXNzYWdlRXZlbnQsIGZhbHNlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIF9tZXNzYWdlKGUpIHtcbiAgICAgICAgaWYgKGUub3JpZ2luID09PSB0aGlzLl9mcmFtZV9vcmlnaW4gJiZcbiAgICAgICAgICAgIGUuc291cmNlID09PSB0aGlzLl9mcmFtZS5jb250ZW50V2luZG93XG4gICAgICAgICkge1xuICAgICAgICAgICAgaWYgKGUuZGF0YSA9PT0gXCJlcnJvclwiKSB7XG4gICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiQ2hlY2tTZXNzaW9uSUZyYW1lOiBlcnJvciBtZXNzYWdlIGZyb20gY2hlY2sgc2Vzc2lvbiBvcCBpZnJhbWVcIik7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX3N0b3BPbkVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RvcCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGUuZGF0YSA9PT0gXCJjaGFuZ2VkXCIpIHtcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJDaGVja1Nlc3Npb25JRnJhbWU6IGNoYW5nZWQgbWVzc2FnZSBmcm9tIGNoZWNrIHNlc3Npb24gb3AgaWZyYW1lXCIpO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RvcCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NhbGxiYWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJDaGVja1Nlc3Npb25JRnJhbWU6IFwiICsgZS5kYXRhICsgXCIgbWVzc2FnZSBmcm9tIGNoZWNrIHNlc3Npb24gb3AgaWZyYW1lXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXJ0KHNlc3Npb25fc3RhdGUpIHtcbiAgICAgICAgaWYgKHRoaXMuX3Nlc3Npb25fc3RhdGUgIT09IHNlc3Npb25fc3RhdGUpIHtcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIkNoZWNrU2Vzc2lvbklGcmFtZS5zdGFydFwiKTtcblxuICAgICAgICAgICAgdGhpcy5zdG9wKCk7XG5cbiAgICAgICAgICAgIHRoaXMuX3Nlc3Npb25fc3RhdGUgPSBzZXNzaW9uX3N0YXRlO1xuXG4gICAgICAgICAgICBsZXQgc2VuZCA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9mcmFtZS5jb250ZW50V2luZG93LnBvc3RNZXNzYWdlKHRoaXMuX2NsaWVudF9pZCArIFwiIFwiICsgdGhpcy5fc2Vzc2lvbl9zdGF0ZSwgdGhpcy5fZnJhbWVfb3JpZ2luKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIHRyaWdnZXIgbm93XG4gICAgICAgICAgICBzZW5kKCk7XG5cbiAgICAgICAgICAgIC8vIGFuZCBzZXR1cCB0aW1lclxuICAgICAgICAgICAgdGhpcy5fdGltZXIgPSB3aW5kb3cuc2V0SW50ZXJ2YWwoc2VuZCwgdGhpcy5faW50ZXJ2YWwpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RvcCgpIHtcbiAgICAgICAgdGhpcy5fc2Vzc2lvbl9zdGF0ZSA9IG51bGw7XG5cbiAgICAgICAgaWYgKHRoaXMuX3RpbWVyKSB7XG4gICAgICAgICAgICBMb2cuZGVidWcoXCJDaGVja1Nlc3Npb25JRnJhbWUuc3RvcFwiKTtcblxuICAgICAgICAgICAgd2luZG93LmNsZWFySW50ZXJ2YWwodGhpcy5fdGltZXIpO1xuICAgICAgICAgICAgdGhpcy5fdGltZXIgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cblxuaW1wb3J0IHsgQ29yZG92YVBvcHVwV2luZG93IH0gZnJvbSAnLi9Db3Jkb3ZhUG9wdXBXaW5kb3cuanMnO1xuXG5leHBvcnQgY2xhc3MgQ29yZG92YUlGcmFtZU5hdmlnYXRvciB7XG5cbiAgICBwcmVwYXJlKHBhcmFtcykge1xuICAgICAgICBwYXJhbXMucG9wdXBXaW5kb3dGZWF0dXJlcyA9ICdoaWRkZW49eWVzJztcbiAgICAgICAgbGV0IHBvcHVwID0gbmV3IENvcmRvdmFQb3B1cFdpbmRvdyhwYXJhbXMpO1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHBvcHVwKTtcbiAgICB9XG59XG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxuXG5pbXBvcnQgeyBDb3Jkb3ZhUG9wdXBXaW5kb3cgfSBmcm9tICcuL0NvcmRvdmFQb3B1cFdpbmRvdy5qcyc7XG5cbmV4cG9ydCBjbGFzcyBDb3Jkb3ZhUG9wdXBOYXZpZ2F0b3Ige1xuXG4gICAgcHJlcGFyZShwYXJhbXMpIHtcbiAgICAgICAgbGV0IHBvcHVwID0gbmV3IENvcmRvdmFQb3B1cFdpbmRvdyhwYXJhbXMpO1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHBvcHVwKTtcbiAgICB9XG59XG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxuXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XG5cbmNvbnN0IERlZmF1bHRQb3B1cEZlYXR1cmVzID0gJ2xvY2F0aW9uPW5vLHRvb2xiYXI9bm8sem9vbT1ubyc7XG5jb25zdCBEZWZhdWx0UG9wdXBUYXJnZXQgPSBcIl9ibGFua1wiO1xuXG5leHBvcnQgY2xhc3MgQ29yZG92YVBvcHVwV2luZG93IHtcblxuICAgIGNvbnN0cnVjdG9yKHBhcmFtcykge1xuICAgICAgICB0aGlzLl9wcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fcmVzb2x2ZSA9IHJlc29sdmU7XG4gICAgICAgICAgICB0aGlzLl9yZWplY3QgPSByZWplY3Q7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuZmVhdHVyZXMgPSBwYXJhbXMucG9wdXBXaW5kb3dGZWF0dXJlcyB8fCBEZWZhdWx0UG9wdXBGZWF0dXJlcztcbiAgICAgICAgdGhpcy50YXJnZXQgPSBwYXJhbXMucG9wdXBXaW5kb3dUYXJnZXQgfHwgRGVmYXVsdFBvcHVwVGFyZ2V0O1xuICAgICAgICBcbiAgICAgICAgdGhpcy5yZWRpcmVjdF91cmkgPSBwYXJhbXMuc3RhcnRVcmw7XG4gICAgICAgIExvZy5kZWJ1ZyhcIkNvcmRvdmFQb3B1cFdpbmRvdy5jdG9yOiByZWRpcmVjdF91cmk6IFwiICsgdGhpcy5yZWRpcmVjdF91cmkpO1xuICAgIH1cblxuICAgIF9pc0luQXBwQnJvd3Nlckluc3RhbGxlZChjb3Jkb3ZhTWV0YWRhdGEpIHtcbiAgICAgICAgcmV0dXJuIFtcImNvcmRvdmEtcGx1Z2luLWluYXBwYnJvd3NlclwiLCBcImNvcmRvdmEtcGx1Z2luLWluYXBwYnJvd3Nlci5pbmFwcGJyb3dzZXJcIiwgXCJvcmcuYXBhY2hlLmNvcmRvdmEuaW5hcHBicm93c2VyXCJdLnNvbWUoZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgICAgIHJldHVybiBjb3Jkb3ZhTWV0YWRhdGEuaGFzT3duUHJvcGVydHkobmFtZSlcbiAgICAgICAgfSlcbiAgICB9XG4gICAgXG4gICAgbmF2aWdhdGUocGFyYW1zKSB7XG4gICAgICAgIGlmICghcGFyYW1zIHx8ICFwYXJhbXMudXJsKSB7XG4gICAgICAgICAgICB0aGlzLl9lcnJvcihcIk5vIHVybCBwcm92aWRlZFwiKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghd2luZG93LmNvcmRvdmEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZXJyb3IoXCJjb3Jkb3ZhIGlzIHVuZGVmaW5lZFwiKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICB2YXIgY29yZG92YU1ldGFkYXRhID0gd2luZG93LmNvcmRvdmEucmVxdWlyZShcImNvcmRvdmEvcGx1Z2luX2xpc3RcIikubWV0YWRhdGE7XG4gICAgICAgICAgICBpZiAodGhpcy5faXNJbkFwcEJyb3dzZXJJbnN0YWxsZWQoY29yZG92YU1ldGFkYXRhKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZXJyb3IoXCJJbkFwcEJyb3dzZXIgcGx1Z2luIG5vdCBmb3VuZFwiKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fcG9wdXAgPSBjb3Jkb3ZhLkluQXBwQnJvd3Nlci5vcGVuKHBhcmFtcy51cmwsIHRoaXMudGFyZ2V0LCB0aGlzLmZlYXR1cmVzKTtcbiAgICAgICAgICAgIGlmICh0aGlzLl9wb3B1cCkge1xuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIkNvcmRvdmFQb3B1cFdpbmRvdy5uYXZpZ2F0ZTogcG9wdXAgc3VjY2Vzc2Z1bGx5IGNyZWF0ZWRcIik7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgdGhpcy5fZXhpdENhbGxiYWNrRXZlbnQgPSB0aGlzLl9leGl0Q2FsbGJhY2suYmluZCh0aGlzKTsgXG4gICAgICAgICAgICAgICAgdGhpcy5fbG9hZFN0YXJ0Q2FsbGJhY2tFdmVudCA9IHRoaXMuX2xvYWRTdGFydENhbGxiYWNrLmJpbmQodGhpcyk7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgdGhpcy5fcG9wdXAuYWRkRXZlbnRMaXN0ZW5lcihcImV4aXRcIiwgdGhpcy5fZXhpdENhbGxiYWNrRXZlbnQsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9wb3B1cC5hZGRFdmVudExpc3RlbmVyKFwibG9hZHN0YXJ0XCIsIHRoaXMuX2xvYWRTdGFydENhbGxiYWNrRXZlbnQsIGZhbHNlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZXJyb3IoXCJFcnJvciBvcGVuaW5nIHBvcHVwIHdpbmRvd1wiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5wcm9taXNlO1xuICAgIH1cblxuICAgIGdldCBwcm9taXNlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHJvbWlzZTtcbiAgICB9XG5cbiAgICBfbG9hZFN0YXJ0Q2FsbGJhY2soZXZlbnQpIHtcbiAgICAgICAgaWYgKGV2ZW50LnVybC5pbmRleE9mKHRoaXMucmVkaXJlY3RfdXJpKSA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5fc3VjY2Vzcyh7IHVybDogZXZlbnQudXJsIH0pO1xuICAgICAgICB9ICAgIFxuICAgIH1cbiAgICBfZXhpdENhbGxiYWNrKG1lc3NhZ2UpIHtcbiAgICAgICAgdGhpcy5fZXJyb3IobWVzc2FnZSk7ICAgIFxuICAgIH1cbiAgICBcbiAgICBfc3VjY2VzcyhkYXRhKSB7XG4gICAgICAgIHRoaXMuX2NsZWFudXAoKTtcblxuICAgICAgICBMb2cuZGVidWcoXCJDb3Jkb3ZhUG9wdXBXaW5kb3c6IFN1Y2Nlc3NmdWwgcmVzcG9uc2UgZnJvbSBjb3Jkb3ZhIHBvcHVwIHdpbmRvd1wiKTtcbiAgICAgICAgdGhpcy5fcmVzb2x2ZShkYXRhKTtcbiAgICB9XG4gICAgX2Vycm9yKG1lc3NhZ2UpIHtcbiAgICAgICAgdGhpcy5fY2xlYW51cCgpO1xuXG4gICAgICAgIExvZy5lcnJvcihtZXNzYWdlKTtcbiAgICAgICAgdGhpcy5fcmVqZWN0KG5ldyBFcnJvcihtZXNzYWdlKSk7XG4gICAgfVxuXG4gICAgY2xvc2UoKSB7XG4gICAgICAgIHRoaXMuX2NsZWFudXAoKTtcbiAgICB9XG5cbiAgICBfY2xlYW51cCgpIHtcbiAgICAgICAgaWYgKHRoaXMuX3BvcHVwKXtcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIkNvcmRvdmFQb3B1cFdpbmRvdzogY2xlYW5pbmcgdXAgcG9wdXBcIik7XG4gICAgICAgICAgICB0aGlzLl9wb3B1cC5yZW1vdmVFdmVudExpc3RlbmVyKFwiZXhpdFwiLCB0aGlzLl9leGl0Q2FsbGJhY2tFdmVudCwgZmFsc2UpO1xuICAgICAgICAgICAgdGhpcy5fcG9wdXAucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImxvYWRzdGFydFwiLCB0aGlzLl9sb2FkU3RhcnRDYWxsYmFja0V2ZW50LCBmYWxzZSk7XG4gICAgICAgICAgICB0aGlzLl9wb3B1cC5jbG9zZSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3BvcHVwID0gbnVsbDtcbiAgICB9XG59XG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxuXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XG5cbmV4cG9ydCBjbGFzcyBFcnJvclJlc3BvbnNlIGV4dGVuZHMgRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKHtlcnJvciwgZXJyb3JfZGVzY3JpcHRpb24sIGVycm9yX3VyaSwgc3RhdGUsIHNlc3Npb25fc3RhdGV9PXt9XG4gICAgKSB7XG4gICAgICAgICBpZiAoIWVycm9yKXtcbiAgICAgICAgICAgIExvZy5lcnJvcihcIk5vIGVycm9yIHBhc3NlZCB0byBFcnJvclJlc3BvbnNlXCIpO1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZXJyb3JcIik7XG4gICAgICAgIH1cblxuICAgICAgICBzdXBlcihlcnJvcl9kZXNjcmlwdGlvbiB8fCBlcnJvcik7XG5cbiAgICAgICAgdGhpcy5uYW1lID0gXCJFcnJvclJlc3BvbnNlXCI7XG5cbiAgICAgICAgdGhpcy5lcnJvciA9IGVycm9yO1xuICAgICAgICB0aGlzLmVycm9yX2Rlc2NyaXB0aW9uID0gZXJyb3JfZGVzY3JpcHRpb247XG4gICAgICAgIHRoaXMuZXJyb3JfdXJpID0gZXJyb3JfdXJpO1xuXG4gICAgICAgIHRoaXMuc3RhdGUgPSBzdGF0ZTtcbiAgICAgICAgdGhpcy5zZXNzaW9uX3N0YXRlID0gc2Vzc2lvbl9zdGF0ZTtcbiAgICB9XG59XG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxuXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XG5cbmV4cG9ydCBjbGFzcyBFdmVudCB7XG5cbiAgICBjb25zdHJ1Y3RvcihuYW1lKSB7XG4gICAgICAgIHRoaXMuX25hbWUgPSBuYW1lO1xuICAgICAgICB0aGlzLl9jYWxsYmFja3MgPSBbXTtcbiAgICB9XG5cbiAgICBhZGRIYW5kbGVyKGNiKSB7XG4gICAgICAgIHRoaXMuX2NhbGxiYWNrcy5wdXNoKGNiKTtcbiAgICB9XG5cbiAgICByZW1vdmVIYW5kbGVyKGNiKSB7XG4gICAgICAgIHZhciBpZHggPSB0aGlzLl9jYWxsYmFja3MuZmluZEluZGV4KGl0ZW0gPT4gaXRlbSA9PT0gY2IpO1xuICAgICAgICBpZiAoaWR4ID49IDApIHtcbiAgICAgICAgICAgIHRoaXMuX2NhbGxiYWNrcy5zcGxpY2UoaWR4LCAxKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJhaXNlKC4uLnBhcmFtcykge1xuICAgICAgICBMb2cuZGVidWcoXCJFdmVudDogUmFpc2luZyBldmVudDogXCIgKyB0aGlzLl9uYW1lKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLl9jYWxsYmFja3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHRoaXMuX2NhbGxiYWNrc1tpXSguLi5wYXJhbXMpO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cblxuY29uc3QgdGltZXIgPSB7XG4gICAgc2V0SW50ZXJ2YWw6IGZ1bmN0aW9uIChjYiwgZHVyYXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHNldEludGVydmFsKGNiLCBkdXJhdGlvbik7XG4gICAgfSxcbiAgICBjbGVhckludGVydmFsOiBmdW5jdGlvbiAoaGFuZGxlKSB7XG4gICAgICAgIHJldHVybiBjbGVhckludGVydmFsKGhhbmRsZSk7XG4gICAgfVxufTtcblxubGV0IHRlc3RpbmcgPSBmYWxzZTtcbmxldCByZXF1ZXN0ID0gbnVsbDtcblxuZXhwb3J0IGNsYXNzIEdsb2JhbCB7XG5cbiAgICBzdGF0aWMgX3Rlc3RpbmcoKSB7XG4gICAgICAgIHRlc3RpbmcgPSB0cnVlO1xuICAgIH1cblxuICAgIHN0YXRpYyBnZXQgbG9jYXRpb24oKSB7XG4gICAgICAgIGlmICghdGVzdGluZykge1xuICAgICAgICAgICAgcmV0dXJuIGxvY2F0aW9uO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGdldCBsb2NhbFN0b3JhZ2UoKSB7XG4gICAgICAgIGlmICghdGVzdGluZyAmJiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgcmV0dXJuIGxvY2FsU3RvcmFnZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBnZXQgc2Vzc2lvblN0b3JhZ2UoKSB7XG4gICAgICAgIGlmICghdGVzdGluZyAmJiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgcmV0dXJuIHNlc3Npb25TdG9yYWdlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIHNldFhNTEh0dHBSZXF1ZXN0KG5ld1JlcXVlc3QpIHtcbiAgICAgICAgcmVxdWVzdCA9IG5ld1JlcXVlc3Q7XG4gICAgfVxuXG4gICAgc3RhdGljIGdldCBYTUxIdHRwUmVxdWVzdCgpIHtcbiAgICAgICAgaWYgKCF0ZXN0aW5nICYmIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVxdWVzdCB8fCBYTUxIdHRwUmVxdWVzdDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBnZXQgdGltZXIoKSB7XG4gICAgICAgIGlmICghdGVzdGluZykge1xuICAgICAgICAgICAgcmV0dXJuIHRpbWVyO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cblxuaW1wb3J0IHsgTG9nIH0gZnJvbSAnLi9Mb2cuanMnO1xuaW1wb3J0IHsgSUZyYW1lV2luZG93IH0gZnJvbSAnLi9JRnJhbWVXaW5kb3cuanMnO1xuXG5leHBvcnQgY2xhc3MgSUZyYW1lTmF2aWdhdG9yIHtcblxuICAgIHByZXBhcmUocGFyYW1zKSB7XG4gICAgICAgIGxldCBmcmFtZSA9IG5ldyBJRnJhbWVXaW5kb3cocGFyYW1zKTtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmcmFtZSk7XG4gICAgfVxuXG4gICAgY2FsbGJhY2sodXJsKSB7XG4gICAgICAgIExvZy5kZWJ1ZyhcIklGcmFtZU5hdmlnYXRvci5jYWxsYmFja1wiKTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgSUZyYW1lV2luZG93Lm5vdGlmeVBhcmVudCh1cmwpO1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZSk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxuXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XG5cbmNvbnN0IERlZmF1bHRUaW1lb3V0ID0gMTAwMDA7XG5cbmV4cG9ydCBjbGFzcyBJRnJhbWVXaW5kb3cge1xuXG4gICAgY29uc3RydWN0b3IocGFyYW1zKSB7XG4gICAgICAgIHRoaXMuX3Byb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9yZXNvbHZlID0gcmVzb2x2ZTtcbiAgICAgICAgICAgIHRoaXMuX3JlamVjdCA9IHJlamVjdDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5fYm91bmRNZXNzYWdlRXZlbnQgPSB0aGlzLl9tZXNzYWdlLmJpbmQodGhpcyk7XG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCB0aGlzLl9ib3VuZE1lc3NhZ2VFdmVudCwgZmFsc2UpO1xuXG4gICAgICAgIHRoaXMuX2ZyYW1lID0gd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpZnJhbWVcIik7XG5cbiAgICAgICAgLy8gc2hvdGd1biBhcHByb2FjaFxuICAgICAgICB0aGlzLl9mcmFtZS5zdHlsZS52aXNpYmlsaXR5ID0gXCJoaWRkZW5cIjtcbiAgICAgICAgdGhpcy5fZnJhbWUuc3R5bGUucG9zaXRpb24gPSBcImFic29sdXRlXCI7XG4gICAgICAgIHRoaXMuX2ZyYW1lLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcbiAgICAgICAgdGhpcy5fZnJhbWUuc3R5bGUud2lkdGggPSAwO1xuICAgICAgICB0aGlzLl9mcmFtZS5zdHlsZS5oZWlnaHQgPSAwO1xuXG4gICAgICAgIHdpbmRvdy5kb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRoaXMuX2ZyYW1lKTtcbiAgICB9XG5cbiAgICBuYXZpZ2F0ZShwYXJhbXMpIHtcbiAgICAgICAgaWYgKCFwYXJhbXMgfHwgIXBhcmFtcy51cmwpIHtcbiAgICAgICAgICAgIHRoaXMuX2Vycm9yKFwiTm8gdXJsIHByb3ZpZGVkXCIpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgbGV0IHRpbWVvdXQgPSBwYXJhbXMuc2lsZW50UmVxdWVzdFRpbWVvdXQgfHwgRGVmYXVsdFRpbWVvdXQ7XG4gICAgICAgICAgICBMb2cuZGVidWcoXCJJRnJhbWVXaW5kb3cubmF2aWdhdGU6IFVzaW5nIHRpbWVvdXQgb2Y6XCIsIHRpbWVvdXQpO1xuICAgICAgICAgICAgdGhpcy5fdGltZXIgPSB3aW5kb3cuc2V0VGltZW91dCh0aGlzLl90aW1lb3V0LmJpbmQodGhpcyksIHRpbWVvdXQpO1xuICAgICAgICAgICAgdGhpcy5fZnJhbWUuc3JjID0gcGFyYW1zLnVybDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLnByb21pc2U7XG4gICAgfVxuXG4gICAgZ2V0IHByb21pc2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wcm9taXNlO1xuICAgIH1cblxuICAgIF9zdWNjZXNzKGRhdGEpIHtcbiAgICAgICAgdGhpcy5fY2xlYW51cCgpO1xuXG4gICAgICAgIExvZy5kZWJ1ZyhcIklGcmFtZVdpbmRvdzogU3VjY2Vzc2Z1bCByZXNwb25zZSBmcm9tIGZyYW1lIHdpbmRvd1wiKTtcbiAgICAgICAgdGhpcy5fcmVzb2x2ZShkYXRhKTtcbiAgICB9XG4gICAgX2Vycm9yKG1lc3NhZ2UpIHtcbiAgICAgICAgdGhpcy5fY2xlYW51cCgpO1xuXG4gICAgICAgIExvZy5lcnJvcihtZXNzYWdlKTtcbiAgICAgICAgdGhpcy5fcmVqZWN0KG5ldyBFcnJvcihtZXNzYWdlKSk7XG4gICAgfVxuXG4gICAgY2xvc2UoKSB7XG4gICAgICAgIHRoaXMuX2NsZWFudXAoKTtcbiAgICB9XG5cbiAgICBfY2xlYW51cCgpIHtcbiAgICAgICAgaWYgKHRoaXMuX2ZyYW1lKSB7XG4gICAgICAgICAgICBMb2cuZGVidWcoXCJJRnJhbWVXaW5kb3c6IGNsZWFudXBcIik7XG5cbiAgICAgICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCB0aGlzLl9ib3VuZE1lc3NhZ2VFdmVudCwgZmFsc2UpO1xuICAgICAgICAgICAgd2luZG93LmNsZWFyVGltZW91dCh0aGlzLl90aW1lcik7XG4gICAgICAgICAgICB3aW5kb3cuZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh0aGlzLl9mcmFtZSk7XG5cbiAgICAgICAgICAgIHRoaXMuX3RpbWVyID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuX2ZyYW1lID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuX2JvdW5kTWVzc2FnZUV2ZW50ID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIF90aW1lb3V0KCkge1xuICAgICAgICBMb2cuZGVidWcoXCJJRnJhbWVXaW5kb3cudGltZW91dFwiKTtcbiAgICAgICAgdGhpcy5fZXJyb3IoXCJGcmFtZSB3aW5kb3cgdGltZWQgb3V0XCIpO1xuICAgIH1cblxuICAgIF9tZXNzYWdlKGUpIHtcbiAgICAgICAgTG9nLmRlYnVnKFwiSUZyYW1lV2luZG93Lm1lc3NhZ2VcIik7XG5cbiAgICAgICAgaWYgKHRoaXMuX3RpbWVyICYmXG4gICAgICAgICAgICBlLm9yaWdpbiA9PT0gdGhpcy5fb3JpZ2luICYmXG4gICAgICAgICAgICBlLnNvdXJjZSA9PT0gdGhpcy5fZnJhbWUuY29udGVudFdpbmRvd1xuICAgICAgICApIHtcbiAgICAgICAgICAgIGxldCB1cmwgPSBlLmRhdGE7XG4gICAgICAgICAgICBpZiAodXJsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3VjY2Vzcyh7IHVybDogdXJsIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZXJyb3IoXCJJbnZhbGlkIHJlc3BvbnNlIGZyb20gZnJhbWVcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXQgX29yaWdpbigpIHtcbiAgICAgICAgcmV0dXJuIGxvY2F0aW9uLnByb3RvY29sICsgXCIvL1wiICsgbG9jYXRpb24uaG9zdDtcbiAgICB9XG5cbiAgICBzdGF0aWMgbm90aWZ5UGFyZW50KHVybCkge1xuICAgICAgICBMb2cuZGVidWcoXCJJRnJhbWVXaW5kb3cubm90aWZ5UGFyZW50XCIpO1xuICAgICAgICBpZiAod2luZG93LmZyYW1lRWxlbWVudCkge1xuICAgICAgICAgICAgdXJsID0gdXJsIHx8IHdpbmRvdy5sb2NhdGlvbi5ocmVmO1xuICAgICAgICAgICAgaWYgKHVybCkge1xuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIklGcmFtZVdpbmRvdy5ub3RpZnlQYXJlbnQ6IHBvc3RpbmcgdXJsIG1lc3NhZ2UgdG8gcGFyZW50XCIpO1xuICAgICAgICAgICAgICAgIHdpbmRvdy5wYXJlbnQucG9zdE1lc3NhZ2UodXJsLCBsb2NhdGlvbi5wcm90b2NvbCArIFwiLy9cIiArIGxvY2F0aW9uLmhvc3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cblxuaW1wb3J0IHsgTG9nIH0gZnJvbSAnLi9Mb2cuanMnO1xuXG5leHBvcnQgY2xhc3MgSW5NZW1vcnlXZWJTdG9yYWdle1xuICAgIGNvbnN0cnVjdG9yKCl7XG4gICAgICAgIHRoaXMuX2RhdGEgPSB7fTtcbiAgICB9XG5cbiAgICBnZXRJdGVtKGtleSkge1xuICAgICAgICBMb2cuZGVidWcoXCJJbk1lbW9yeVdlYlN0b3JhZ2UuZ2V0SXRlbVwiLCBrZXkpO1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0YVtrZXldO1xuICAgIH1cblxuICAgIHNldEl0ZW0oa2V5LCB2YWx1ZSl7XG4gICAgICAgIExvZy5kZWJ1ZyhcIkluTWVtb3J5V2ViU3RvcmFnZS5zZXRJdGVtXCIsIGtleSk7XG4gICAgICAgIHRoaXMuX2RhdGFba2V5XSA9IHZhbHVlO1xuICAgIH1cblxuICAgIHJlbW92ZUl0ZW0oa2V5KXtcbiAgICAgICAgTG9nLmRlYnVnKFwiSW5NZW1vcnlXZWJTdG9yYWdlLnJlbW92ZUl0ZW1cIiwga2V5KTtcbiAgICAgICAgZGVsZXRlIHRoaXMuX2RhdGFba2V5XTtcbiAgICB9XG5cbiAgICBnZXQgbGVuZ3RoKCkge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcy5fZGF0YSkubGVuZ3RoO1xuICAgIH1cblxuICAgIGtleShpbmRleCkge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcy5fZGF0YSlbaW5kZXhdO1xuICAgIH1cbn1cbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXG5cbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0Sm9zZVV0aWwoeyBqd3MsIEtleVV0aWwsIFg1MDksIGNyeXB0bywgaGV4dG9iNjR1LCBiNjR0b2hleCwgQWxsb3dlZFNpZ25pbmdBbGdzIH0pIHtcbiAgICByZXR1cm4gY2xhc3MgSm9zZVV0aWwge1xuXG4gICAgICAgIHN0YXRpYyBwYXJzZUp3dChqd3QpIHtcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIkpvc2VVdGlsLnBhcnNlSnd0XCIpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICB2YXIgdG9rZW4gPSBqd3MuSldTLnBhcnNlKGp3dCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyOiB0b2tlbi5oZWFkZXJPYmosXG4gICAgICAgICAgICAgICAgICAgIHBheWxvYWQ6IHRva2VuLnBheWxvYWRPYmpcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgTG9nLmVycm9yKGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgc3RhdGljIHZhbGlkYXRlSnd0KGp3dCwga2V5LCBpc3N1ZXIsIGF1ZGllbmNlLCBjbG9ja1NrZXcsIG5vdywgdGltZUluc2Vuc2l0aXZlKSB7XG4gICAgICAgICAgICBMb2cuZGVidWcoXCJKb3NlVXRpbC52YWxpZGF0ZUp3dFwiKTtcblxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBpZiAoa2V5Lmt0eSA9PT0gXCJSU0FcIikge1xuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5LmUgJiYga2V5Lm4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleSA9IEtleVV0aWwuZ2V0S2V5KGtleSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoa2V5Lng1YyAmJiBrZXkueDVjLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhleCA9IGI2NHRvaGV4KGtleS54NWNbMF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAga2V5ID0gWDUwOS5nZXRQdWJsaWNLZXlGcm9tQ2VydEhleChoZXgpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiSm9zZVV0aWwudmFsaWRhdGVKd3Q6IFJTQSBrZXkgbWlzc2luZyBrZXkgbWF0ZXJpYWxcIiwga2V5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJSU0Ega2V5IG1pc3Npbmcga2V5IG1hdGVyaWFsXCIpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoa2V5Lmt0eSA9PT0gXCJFQ1wiKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChrZXkuY3J2ICYmIGtleS54ICYmIGtleS55KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBrZXkgPSBLZXlVdGlsLmdldEtleShrZXkpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiSm9zZVV0aWwudmFsaWRhdGVKd3Q6IEVDIGtleSBtaXNzaW5nIGtleSBtYXRlcmlhbFwiLCBrZXkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIkVDIGtleSBtaXNzaW5nIGtleSBtYXRlcmlhbFwiKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJKb3NlVXRpbC52YWxpZGF0ZUp3dDogVW5zdXBwb3J0ZWQga2V5IHR5cGVcIiwga2V5ICYmIGtleS5rdHkpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiVW5zdXBwb3J0ZWQga2V5IHR5cGU6IFwiICsga2V5ICYmIGtleS5rdHkpKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gSm9zZVV0aWwuX3ZhbGlkYXRlSnd0KGp3dCwga2V5LCBpc3N1ZXIsIGF1ZGllbmNlLCBjbG9ja1NrZXcsIG5vdywgdGltZUluc2Vuc2l0aXZlKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBMb2cuZXJyb3IoZSAmJiBlLm1lc3NhZ2UgfHwgZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KFwiSldUIHZhbGlkYXRpb24gZmFpbGVkXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgc3RhdGljIHZhbGlkYXRlSnd0QXR0cmlidXRlcyhqd3QsIGlzc3VlciwgYXVkaWVuY2UsIGNsb2NrU2tldywgbm93LCB0aW1lSW5zZW5zaXRpdmUpIHtcbiAgICAgICAgICAgIGlmICghY2xvY2tTa2V3KSB7XG4gICAgICAgICAgICAgICAgY2xvY2tTa2V3ID0gMDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFub3cpIHtcbiAgICAgICAgICAgICAgICBub3cgPSBwYXJzZUludChEYXRlLm5vdygpIC8gMTAwMCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBwYXlsb2FkID0gSm9zZVV0aWwucGFyc2VKd3Qoand0KS5wYXlsb2FkO1xuXG4gICAgICAgICAgICBpZiAoIXBheWxvYWQuaXNzKSB7XG4gICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiSm9zZVV0aWwuX3ZhbGlkYXRlSnd0OiBpc3N1ZXIgd2FzIG5vdCBwcm92aWRlZFwiKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiaXNzdWVyIHdhcyBub3QgcHJvdmlkZWRcIikpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHBheWxvYWQuaXNzICE9PSBpc3N1ZXIpIHtcbiAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJKb3NlVXRpbC5fdmFsaWRhdGVKd3Q6IEludmFsaWQgaXNzdWVyIGluIHRva2VuXCIsIHBheWxvYWQuaXNzKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiSW52YWxpZCBpc3N1ZXIgaW4gdG9rZW46IFwiICsgcGF5bG9hZC5pc3MpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFwYXlsb2FkLmF1ZCkge1xuICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIkpvc2VVdGlsLl92YWxpZGF0ZUp3dDogYXVkIHdhcyBub3QgcHJvdmlkZWRcIik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcImF1ZCB3YXMgbm90IHByb3ZpZGVkXCIpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciB2YWxpZEF1ZGllbmNlID0gcGF5bG9hZC5hdWQgPT09IGF1ZGllbmNlIHx8IChBcnJheS5pc0FycmF5KHBheWxvYWQuYXVkKSAmJiBwYXlsb2FkLmF1ZC5pbmRleE9mKGF1ZGllbmNlKSA+PSAwKTtcbiAgICAgICAgICAgIGlmICghdmFsaWRBdWRpZW5jZSkge1xuICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIkpvc2VVdGlsLl92YWxpZGF0ZUp3dDogSW52YWxpZCBhdWRpZW5jZSBpbiB0b2tlblwiLCBwYXlsb2FkLmF1ZCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIkludmFsaWQgYXVkaWVuY2UgaW4gdG9rZW46IFwiICsgcGF5bG9hZC5hdWQpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwYXlsb2FkLmF6cCAmJiBwYXlsb2FkLmF6cCAhPT0gYXVkaWVuY2UpIHtcbiAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJKb3NlVXRpbC5fdmFsaWRhdGVKd3Q6IEludmFsaWQgYXpwIGluIHRva2VuXCIsIHBheWxvYWQuYXpwKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiSW52YWxpZCBhenAgaW4gdG9rZW46IFwiICsgcGF5bG9hZC5henApKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCF0aW1lSW5zZW5zaXRpdmUpIHtcbiAgICAgICAgICAgICAgICB2YXIgbG93ZXJOb3cgPSBub3cgKyBjbG9ja1NrZXc7XG4gICAgICAgICAgICAgICAgdmFyIHVwcGVyTm93ID0gbm93IC0gY2xvY2tTa2V3O1xuXG4gICAgICAgICAgICAgICAgaWYgKCFwYXlsb2FkLmlhdCkge1xuICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJKb3NlVXRpbC5fdmFsaWRhdGVKd3Q6IGlhdCB3YXMgbm90IHByb3ZpZGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiaWF0IHdhcyBub3QgcHJvdmlkZWRcIikpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAobG93ZXJOb3cgPCBwYXlsb2FkLmlhdCkge1xuICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJKb3NlVXRpbC5fdmFsaWRhdGVKd3Q6IGlhdCBpcyBpbiB0aGUgZnV0dXJlXCIsIHBheWxvYWQuaWF0KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcImlhdCBpcyBpbiB0aGUgZnV0dXJlOiBcIiArIHBheWxvYWQuaWF0KSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHBheWxvYWQubmJmICYmIGxvd2VyTm93IDwgcGF5bG9hZC5uYmYpIHtcbiAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiSm9zZVV0aWwuX3ZhbGlkYXRlSnd0OiBuYmYgaXMgaW4gdGhlIGZ1dHVyZVwiLCBwYXlsb2FkLm5iZik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJuYmYgaXMgaW4gdGhlIGZ1dHVyZTogXCIgKyBwYXlsb2FkLm5iZikpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICghcGF5bG9hZC5leHApIHtcbiAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiSm9zZVV0aWwuX3ZhbGlkYXRlSnd0OiBleHAgd2FzIG5vdCBwcm92aWRlZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcImV4cCB3YXMgbm90IHByb3ZpZGVkXCIpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHBheWxvYWQuZXhwIDwgdXBwZXJOb3cpIHtcbiAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiSm9zZVV0aWwuX3ZhbGlkYXRlSnd0OiBleHAgaXMgaW4gdGhlIHBhc3RcIiwgcGF5bG9hZC5leHApO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiZXhwIGlzIGluIHRoZSBwYXN0OlwiICsgcGF5bG9hZC5leHApKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocGF5bG9hZCk7XG4gICAgICAgIH1cblxuICAgICAgICBzdGF0aWMgX3ZhbGlkYXRlSnd0KGp3dCwga2V5LCBpc3N1ZXIsIGF1ZGllbmNlLCBjbG9ja1NrZXcsIG5vdywgdGltZUluc2Vuc2l0aXZlKSB7XG5cbiAgICAgICAgICAgIHJldHVybiBKb3NlVXRpbC52YWxpZGF0ZUp3dEF0dHJpYnV0ZXMoand0LCBpc3N1ZXIsIGF1ZGllbmNlLCBjbG9ja1NrZXcsIG5vdywgdGltZUluc2Vuc2l0aXZlKS50aGVuKHBheWxvYWQgPT4ge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghandzLkpXUy52ZXJpZnkoand0LCBrZXksIEFsbG93ZWRTaWduaW5nQWxncykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIkpvc2VVdGlsLl92YWxpZGF0ZUp3dDogc2lnbmF0dXJlIHZhbGlkYXRpb24gZmFpbGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcInNpZ25hdHVyZSB2YWxpZGF0aW9uIGZhaWxlZFwiKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihlICYmIGUubWVzc2FnZSB8fCBlKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcInNpZ25hdHVyZSB2YWxpZGF0aW9uIGZhaWxlZFwiKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBzdGF0aWMgaGFzaFN0cmluZyh2YWx1ZSwgYWxnKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjcnlwdG8uVXRpbC5oYXNoU3RyaW5nKHZhbHVlLCBhbGcpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIExvZy5lcnJvcihlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHN0YXRpYyBoZXhUb0Jhc2U2NFVybCh2YWx1ZSkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaGV4dG9iNjR1KHZhbHVlKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBMb2cuZXJyb3IoZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCJpbXBvcnQgeyBqd3MsIEtleVV0aWwsIFg1MDksIGNyeXB0bywgaGV4dG9iNjR1LCBiNjR0b2hleCwgQWxsb3dlZFNpZ25pbmdBbGdzIH0gZnJvbSAnLi9jcnlwdG8vcnNhJztcbmltcG9ydCBnZXRKb3NlVXRpbCBmcm9tICcuL0pvc2VVdGlsSW1wbCc7XG5cbmV4cG9ydCBjb25zdCBKb3NlVXRpbCA9IGdldEpvc2VVdGlsKHsgandzLCBLZXlVdGlsLCBYNTA5LCBjcnlwdG8sIGhleHRvYjY0dSwgYjY0dG9oZXgsIEFsbG93ZWRTaWduaW5nQWxncyB9KTtcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXG5cbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcbmltcG9ydCB7IEdsb2JhbCB9IGZyb20gJy4vR2xvYmFsLmpzJztcblxuZXhwb3J0IGNsYXNzIEpzb25TZXJ2aWNlIHtcbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgYWRkaXRpb25hbENvbnRlbnRUeXBlcyA9IG51bGwsIFxuICAgICAgICBYTUxIdHRwUmVxdWVzdEN0b3IgPSBHbG9iYWwuWE1MSHR0cFJlcXVlc3QsIFxuICAgICAgICBqd3RIYW5kbGVyID0gbnVsbFxuICAgICkge1xuICAgICAgICBpZiAoYWRkaXRpb25hbENvbnRlbnRUeXBlcyAmJiBBcnJheS5pc0FycmF5KGFkZGl0aW9uYWxDb250ZW50VHlwZXMpKVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9jb250ZW50VHlwZXMgPSBhZGRpdGlvbmFsQ29udGVudFR5cGVzLnNsaWNlKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICB0aGlzLl9jb250ZW50VHlwZXMgPSBbXTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jb250ZW50VHlwZXMucHVzaCgnYXBwbGljYXRpb24vanNvbicpO1xuICAgICAgICBpZiAoand0SGFuZGxlcikge1xuICAgICAgICAgICAgdGhpcy5fY29udGVudFR5cGVzLnB1c2goJ2FwcGxpY2F0aW9uL2p3dCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fWE1MSHR0cFJlcXVlc3QgPSBYTUxIdHRwUmVxdWVzdEN0b3I7XG4gICAgICAgIHRoaXMuX2p3dEhhbmRsZXIgPSBqd3RIYW5kbGVyO1xuICAgIH1cblxuICAgIGdldEpzb24odXJsLCB0b2tlbikge1xuICAgICAgICBpZiAoIXVybCl7XG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJKc29uU2VydmljZS5nZXRKc29uOiBObyB1cmwgcGFzc2VkXCIpO1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidXJsXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgTG9nLmRlYnVnKFwiSnNvblNlcnZpY2UuZ2V0SnNvbiwgdXJsOiBcIiwgdXJsKTtcblxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXG4gICAgICAgICAgICB2YXIgcmVxID0gbmV3IHRoaXMuX1hNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgICAgICByZXEub3BlbignR0VUJywgdXJsKTtcblxuICAgICAgICAgICAgdmFyIGFsbG93ZWRDb250ZW50VHlwZXMgPSB0aGlzLl9jb250ZW50VHlwZXM7XG4gICAgICAgICAgICB2YXIgand0SGFuZGxlciA9IHRoaXMuX2p3dEhhbmRsZXI7XG5cbiAgICAgICAgICAgIHJlcS5vbmxvYWQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJKc29uU2VydmljZS5nZXRKc29uOiBIVFRQIHJlc3BvbnNlIHJlY2VpdmVkLCBzdGF0dXNcIiwgcmVxLnN0YXR1cyk7XG5cbiAgICAgICAgICAgICAgICBpZiAocmVxLnN0YXR1cyA9PT0gMjAwKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIGNvbnRlbnRUeXBlID0gcmVxLmdldFJlc3BvbnNlSGVhZGVyKFwiQ29udGVudC1UeXBlXCIpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY29udGVudFR5cGUpIHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZvdW5kID0gYWxsb3dlZENvbnRlbnRUeXBlcy5maW5kKGl0ZW09PntcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29udGVudFR5cGUuc3RhcnRzV2l0aChpdGVtKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvdW5kID09IFwiYXBwbGljYXRpb24vand0XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBqd3RIYW5kbGVyKHJlcSkudGhlbihyZXNvbHZlLCByZWplY3QpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShKU09OLnBhcnNlKHJlcS5yZXNwb25zZVRleHQpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJKc29uU2VydmljZS5nZXRKc29uOiBFcnJvciBwYXJzaW5nIEpTT04gcmVzcG9uc2VcIiwgZS5tZXNzYWdlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KEVycm9yKFwiSW52YWxpZCByZXNwb25zZSBDb250ZW50LVR5cGU6IFwiICsgY29udGVudFR5cGUgKyBcIiwgZnJvbSBVUkw6IFwiICsgdXJsKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoRXJyb3IocmVxLnN0YXR1c1RleHQgKyBcIiAoXCIgKyByZXEuc3RhdHVzICsgXCIpXCIpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICByZXEub25lcnJvciA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIkpzb25TZXJ2aWNlLmdldEpzb246IG5ldHdvcmsgZXJyb3JcIik7XG4gICAgICAgICAgICAgICAgcmVqZWN0KEVycm9yKFwiTmV0d29yayBFcnJvclwiKSk7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBpZiAodG9rZW4pIHtcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJKc29uU2VydmljZS5nZXRKc29uOiB0b2tlbiBwYXNzZWQsIHNldHRpbmcgQXV0aG9yaXphdGlvbiBoZWFkZXJcIik7XG4gICAgICAgICAgICAgICAgcmVxLnNldFJlcXVlc3RIZWFkZXIoXCJBdXRob3JpemF0aW9uXCIsIFwiQmVhcmVyIFwiICsgdG9rZW4pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXEuc2VuZCgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwb3N0Rm9ybSh1cmwsIHBheWxvYWQpIHtcbiAgICAgICAgaWYgKCF1cmwpe1xuICAgICAgICAgICAgTG9nLmVycm9yKFwiSnNvblNlcnZpY2UucG9zdEZvcm06IE5vIHVybCBwYXNzZWRcIik7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ1cmxcIik7XG4gICAgICAgIH1cblxuICAgICAgICBMb2cuZGVidWcoXCJKc29uU2VydmljZS5wb3N0Rm9ybSwgdXJsOiBcIiwgdXJsKTtcblxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXG4gICAgICAgICAgICB2YXIgcmVxID0gbmV3IHRoaXMuX1hNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgICAgICByZXEub3BlbignUE9TVCcsIHVybCk7XG5cbiAgICAgICAgICAgIHZhciBhbGxvd2VkQ29udGVudFR5cGVzID0gdGhpcy5fY29udGVudFR5cGVzO1xuXG4gICAgICAgICAgICByZXEub25sb2FkID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiSnNvblNlcnZpY2UucG9zdEZvcm06IEhUVFAgcmVzcG9uc2UgcmVjZWl2ZWQsIHN0YXR1c1wiLCByZXEuc3RhdHVzKTtcblxuICAgICAgICAgICAgICAgIGlmIChyZXEuc3RhdHVzID09PSAyMDApIHtcblxuICAgICAgICAgICAgICAgICAgICB2YXIgY29udGVudFR5cGUgPSByZXEuZ2V0UmVzcG9uc2VIZWFkZXIoXCJDb250ZW50LVR5cGVcIik7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb250ZW50VHlwZSkge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm91bmQgPSBhbGxvd2VkQ29udGVudFR5cGVzLmZpbmQoaXRlbT0+e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb250ZW50VHlwZS5zdGFydHNXaXRoKGl0ZW0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm91bmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKEpTT04ucGFyc2UocmVxLnJlc3BvbnNlVGV4dCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIkpzb25TZXJ2aWNlLnBvc3RGb3JtOiBFcnJvciBwYXJzaW5nIEpTT04gcmVzcG9uc2VcIiwgZS5tZXNzYWdlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KEVycm9yKFwiSW52YWxpZCByZXNwb25zZSBDb250ZW50LVR5cGU6IFwiICsgY29udGVudFR5cGUgKyBcIiwgZnJvbSBVUkw6IFwiICsgdXJsKSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAocmVxLnN0YXR1cyA9PT0gNDAwKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIGNvbnRlbnRUeXBlID0gcmVxLmdldFJlc3BvbnNlSGVhZGVyKFwiQ29udGVudC1UeXBlXCIpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY29udGVudFR5cGUpIHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZvdW5kID0gYWxsb3dlZENvbnRlbnRUeXBlcy5maW5kKGl0ZW09PntcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29udGVudFR5cGUuc3RhcnRzV2l0aChpdGVtKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBheWxvYWQgPSBKU09OLnBhcnNlKHJlcS5yZXNwb25zZVRleHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGF5bG9hZCAmJiBwYXlsb2FkLmVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJKc29uU2VydmljZS5wb3N0Rm9ybTogRXJyb3IgZnJvbSBzZXJ2ZXI6IFwiLCBwYXlsb2FkLmVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IocGF5bG9hZC5lcnJvcikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIkpzb25TZXJ2aWNlLnBvc3RGb3JtOiBFcnJvciBwYXJzaW5nIEpTT04gcmVzcG9uc2VcIiwgZS5tZXNzYWdlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmVqZWN0KEVycm9yKHJlcS5zdGF0dXNUZXh0ICsgXCIgKFwiICsgcmVxLnN0YXR1cyArIFwiKVwiKSk7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICByZXEub25lcnJvciA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIkpzb25TZXJ2aWNlLnBvc3RGb3JtOiBuZXR3b3JrIGVycm9yXCIpO1xuICAgICAgICAgICAgICAgIHJlamVjdChFcnJvcihcIk5ldHdvcmsgRXJyb3JcIikpO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgbGV0IGJvZHkgPSBcIlwiO1xuICAgICAgICAgICAgZm9yKGxldCBrZXkgaW4gcGF5bG9hZCkge1xuXG4gICAgICAgICAgICAgICAgbGV0IHZhbHVlID0gcGF5bG9hZFtrZXldO1xuXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlKSB7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGJvZHkubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYm9keSArPSBcIiZcIjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGJvZHkgKz0gZW5jb2RlVVJJQ29tcG9uZW50KGtleSk7XG4gICAgICAgICAgICAgICAgICAgIGJvZHkgKz0gXCI9XCI7XG4gICAgICAgICAgICAgICAgICAgIGJvZHkgKz0gZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJlcS5zZXRSZXF1ZXN0SGVhZGVyKFwiQ29udGVudC1UeXBlXCIsIFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXCIpO1xuICAgICAgICAgICAgcmVxLnNlbmQoYm9keSk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXG5cbmxldCBub3BMb2dnZXIgPSB7XG4gICAgZGVidWcoKXt9LFxuICAgIGluZm8oKXt9LFxuICAgIHdhcm4oKXt9LFxuICAgIGVycm9yKCl7fVxufTtcblxuY29uc3QgTk9ORSA9IDA7XG5jb25zdCBFUlJPUiA9IDE7XG5jb25zdCBXQVJOID0gMjtcbmNvbnN0IElORk8gPSAzO1xuY29uc3QgREVCVUcgPSA0O1xuXG5sZXQgbG9nZ2VyO1xubGV0IGxldmVsO1xuXG5leHBvcnQgY2xhc3MgTG9nIHtcbiAgICBzdGF0aWMgZ2V0IE5PTkUoKSB7cmV0dXJuIE5PTkV9O1xuICAgIHN0YXRpYyBnZXQgRVJST1IoKSB7cmV0dXJuIEVSUk9SfTtcbiAgICBzdGF0aWMgZ2V0IFdBUk4oKSB7cmV0dXJuIFdBUk59O1xuICAgIHN0YXRpYyBnZXQgSU5GTygpIHtyZXR1cm4gSU5GT307XG4gICAgc3RhdGljIGdldCBERUJVRygpIHtyZXR1cm4gREVCVUd9O1xuICAgIFxuICAgIHN0YXRpYyByZXNldCgpe1xuICAgICAgICBsZXZlbCA9IElORk87XG4gICAgICAgIGxvZ2dlciA9IG5vcExvZ2dlcjtcbiAgICB9XG4gICAgXG4gICAgc3RhdGljIGdldCBsZXZlbCgpe1xuICAgICAgICByZXR1cm4gbGV2ZWw7XG4gICAgfVxuICAgIHN0YXRpYyBzZXQgbGV2ZWwodmFsdWUpe1xuICAgICAgICBpZiAoTk9ORSA8PSB2YWx1ZSAmJiB2YWx1ZSA8PSBERUJVRyl7XG4gICAgICAgICAgICBsZXZlbCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBsb2cgbGV2ZWxcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgc3RhdGljIGdldCBsb2dnZXIoKXtcbiAgICAgICAgcmV0dXJuIGxvZ2dlcjtcbiAgICB9XG4gICAgc3RhdGljIHNldCBsb2dnZXIodmFsdWUpe1xuICAgICAgICBpZiAoIXZhbHVlLmRlYnVnICYmIHZhbHVlLmluZm8pIHtcbiAgICAgICAgICAgIC8vIGp1c3QgdG8gc3RheSBiYWNrd2FyZHMgY29tcGF0LiBjYW4gcmVtb3ZlIGluIDIuMFxuICAgICAgICAgICAgdmFsdWUuZGVidWcgPSB2YWx1ZS5pbmZvO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbHVlLmRlYnVnICYmIHZhbHVlLmluZm8gJiYgdmFsdWUud2FybiAmJiB2YWx1ZS5lcnJvcil7XG4gICAgICAgICAgICBsb2dnZXIgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgbG9nZ2VyXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIFxuICAgIHN0YXRpYyBkZWJ1ZyguLi5hcmdzKXtcbiAgICAgICAgaWYgKGxldmVsID49IERFQlVHKXtcbiAgICAgICAgICAgIGxvZ2dlci5kZWJ1Zy5hcHBseShsb2dnZXIsIEFycmF5LmZyb20oYXJncykpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyBpbmZvKC4uLmFyZ3Mpe1xuICAgICAgICBpZiAobGV2ZWwgPj0gSU5GTyl7XG4gICAgICAgICAgICBsb2dnZXIuaW5mby5hcHBseShsb2dnZXIsIEFycmF5LmZyb20oYXJncykpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyB3YXJuKC4uLmFyZ3Mpe1xuICAgICAgICBpZiAobGV2ZWwgPj0gV0FSTil7XG4gICAgICAgICAgICBsb2dnZXIud2Fybi5hcHBseShsb2dnZXIsIEFycmF5LmZyb20oYXJncykpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyBlcnJvciguLi5hcmdzKXtcbiAgICAgICAgaWYgKGxldmVsID49IEVSUk9SKXtcbiAgICAgICAgICAgIGxvZ2dlci5lcnJvci5hcHBseShsb2dnZXIsIEFycmF5LmZyb20oYXJncykpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5Mb2cucmVzZXQoKTtcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXG5cbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcbmltcG9ydCB7IEpzb25TZXJ2aWNlIH0gZnJvbSAnLi9Kc29uU2VydmljZS5qcyc7XG5cbmNvbnN0IE9pZGNNZXRhZGF0YVVybFBhdGggPSAnLndlbGwta25vd24vb3BlbmlkLWNvbmZpZ3VyYXRpb24nO1xuXG5leHBvcnQgY2xhc3MgTWV0YWRhdGFTZXJ2aWNlIHtcbiAgICBjb25zdHJ1Y3RvcihzZXR0aW5ncywgSnNvblNlcnZpY2VDdG9yID0gSnNvblNlcnZpY2UpIHtcbiAgICAgICAgaWYgKCFzZXR0aW5ncykge1xuICAgICAgICAgICAgTG9nLmVycm9yKFwiTWV0YWRhdGFTZXJ2aWNlOiBObyBzZXR0aW5ncyBwYXNzZWQgdG8gTWV0YWRhdGFTZXJ2aWNlXCIpO1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwic2V0dGluZ3NcIik7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9zZXR0aW5ncyA9IHNldHRpbmdzO1xuICAgICAgICB0aGlzLl9qc29uU2VydmljZSA9IG5ldyBKc29uU2VydmljZUN0b3IoWydhcHBsaWNhdGlvbi9qd2stc2V0K2pzb24nXSk7XG4gICAgfVxuXG4gICAgZ2V0IG1ldGFkYXRhVXJsKCkge1xuICAgICAgICBpZiAoIXRoaXMuX21ldGFkYXRhVXJsKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fc2V0dGluZ3MubWV0YWRhdGFVcmwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9tZXRhZGF0YVVybCA9IHRoaXMuX3NldHRpbmdzLm1ldGFkYXRhVXJsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWV0YWRhdGFVcmwgPSB0aGlzLl9zZXR0aW5ncy5hdXRob3JpdHk7XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fbWV0YWRhdGFVcmwgJiYgdGhpcy5fbWV0YWRhdGFVcmwuaW5kZXhPZihPaWRjTWV0YWRhdGFVcmxQYXRoKSA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX21ldGFkYXRhVXJsW3RoaXMuX21ldGFkYXRhVXJsLmxlbmd0aCAtIDFdICE9PSAnLycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX21ldGFkYXRhVXJsICs9ICcvJztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9tZXRhZGF0YVVybCArPSBPaWRjTWV0YWRhdGFVcmxQYXRoO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLl9tZXRhZGF0YVVybDtcbiAgICB9XG5cbiAgICBnZXRNZXRhZGF0YSgpIHtcbiAgICAgICAgaWYgKHRoaXMuX3NldHRpbmdzLm1ldGFkYXRhKSB7XG4gICAgICAgICAgICBMb2cuZGVidWcoXCJNZXRhZGF0YVNlcnZpY2UuZ2V0TWV0YWRhdGE6IFJldHVybmluZyBtZXRhZGF0YSBmcm9tIHNldHRpbmdzXCIpO1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9zZXR0aW5ncy5tZXRhZGF0YSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMubWV0YWRhdGFVcmwpIHtcbiAgICAgICAgICAgIExvZy5lcnJvcihcIk1ldGFkYXRhU2VydmljZS5nZXRNZXRhZGF0YTogTm8gYXV0aG9yaXR5IG9yIG1ldGFkYXRhVXJsIGNvbmZpZ3VyZWQgb24gc2V0dGluZ3NcIik7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiTm8gYXV0aG9yaXR5IG9yIG1ldGFkYXRhVXJsIGNvbmZpZ3VyZWQgb24gc2V0dGluZ3NcIikpO1xuICAgICAgICB9XG5cbiAgICAgICAgTG9nLmRlYnVnKFwiTWV0YWRhdGFTZXJ2aWNlLmdldE1ldGFkYXRhOiBnZXR0aW5nIG1ldGFkYXRhIGZyb21cIiwgdGhpcy5tZXRhZGF0YVVybCk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2pzb25TZXJ2aWNlLmdldEpzb24odGhpcy5tZXRhZGF0YVVybClcbiAgICAgICAgICAgIC50aGVuKG1ldGFkYXRhID0+IHtcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJNZXRhZGF0YVNlcnZpY2UuZ2V0TWV0YWRhdGE6IGpzb24gcmVjZWl2ZWRcIik7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2V0dGluZ3MubWV0YWRhdGEgPSBtZXRhZGF0YTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbWV0YWRhdGE7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBnZXRJc3N1ZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRNZXRhZGF0YVByb3BlcnR5KFwiaXNzdWVyXCIpO1xuICAgIH1cblxuICAgIGdldEF1dGhvcml6YXRpb25FbmRwb2ludCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldE1ldGFkYXRhUHJvcGVydHkoXCJhdXRob3JpemF0aW9uX2VuZHBvaW50XCIpO1xuICAgIH1cblxuICAgIGdldFVzZXJJbmZvRW5kcG9pbnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRNZXRhZGF0YVByb3BlcnR5KFwidXNlcmluZm9fZW5kcG9pbnRcIik7XG4gICAgfVxuXG4gICAgZ2V0VG9rZW5FbmRwb2ludChvcHRpb25hbD10cnVlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRNZXRhZGF0YVByb3BlcnR5KFwidG9rZW5fZW5kcG9pbnRcIiwgb3B0aW9uYWwpO1xuICAgIH1cblxuICAgIGdldENoZWNrU2Vzc2lvbklmcmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldE1ldGFkYXRhUHJvcGVydHkoXCJjaGVja19zZXNzaW9uX2lmcmFtZVwiLCB0cnVlKTtcbiAgICB9XG5cbiAgICBnZXRFbmRTZXNzaW9uRW5kcG9pbnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRNZXRhZGF0YVByb3BlcnR5KFwiZW5kX3Nlc3Npb25fZW5kcG9pbnRcIiwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgZ2V0UmV2b2NhdGlvbkVuZHBvaW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0TWV0YWRhdGFQcm9wZXJ0eShcInJldm9jYXRpb25fZW5kcG9pbnRcIiwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgZ2V0S2V5c0VuZHBvaW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0TWV0YWRhdGFQcm9wZXJ0eShcImp3a3NfdXJpXCIsIHRydWUpO1xuICAgIH1cblxuICAgIF9nZXRNZXRhZGF0YVByb3BlcnR5KG5hbWUsIG9wdGlvbmFsPWZhbHNlKSB7XG4gICAgICAgIExvZy5kZWJ1ZyhcIk1ldGFkYXRhU2VydmljZS5nZXRNZXRhZGF0YVByb3BlcnR5IGZvcjogXCIgKyBuYW1lKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5nZXRNZXRhZGF0YSgpLnRoZW4obWV0YWRhdGEgPT4ge1xuICAgICAgICAgICAgTG9nLmRlYnVnKFwiTWV0YWRhdGFTZXJ2aWNlLmdldE1ldGFkYXRhUHJvcGVydHk6IG1ldGFkYXRhIHJlY2lldmVkXCIpO1xuXG4gICAgICAgICAgICBpZiAobWV0YWRhdGFbbmFtZV0gPT09IHVuZGVmaW5lZCkge1xuXG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbmFsID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgIExvZy53YXJuKFwiTWV0YWRhdGFTZXJ2aWNlLmdldE1ldGFkYXRhUHJvcGVydHk6IE1ldGFkYXRhIGRvZXMgbm90IGNvbnRhaW4gb3B0aW9uYWwgcHJvcGVydHkgXCIgKyBuYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIk1ldGFkYXRhU2VydmljZS5nZXRNZXRhZGF0YVByb3BlcnR5OiBNZXRhZGF0YSBkb2VzIG5vdCBjb250YWluIHByb3BlcnR5IFwiICsgbmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGFkYXRhIGRvZXMgbm90IGNvbnRhaW4gcHJvcGVydHkgXCIgKyBuYW1lKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBtZXRhZGF0YVtuYW1lXTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZ2V0U2lnbmluZ0tleXMoKSB7XG4gICAgICAgIGlmICh0aGlzLl9zZXR0aW5ncy5zaWduaW5nS2V5cykge1xuICAgICAgICAgICAgTG9nLmRlYnVnKFwiTWV0YWRhdGFTZXJ2aWNlLmdldFNpZ25pbmdLZXlzOiBSZXR1cm5pbmcgc2lnbmluZ0tleXMgZnJvbSBzZXR0aW5nc1wiKTtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fc2V0dGluZ3Muc2lnbmluZ0tleXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldE1ldGFkYXRhUHJvcGVydHkoXCJqd2tzX3VyaVwiKS50aGVuKGp3a3NfdXJpID0+IHtcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIk1ldGFkYXRhU2VydmljZS5nZXRTaWduaW5nS2V5czogandrc191cmkgcmVjZWl2ZWRcIiwgandrc191cmkpO1xuXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fanNvblNlcnZpY2UuZ2V0SnNvbihqd2tzX3VyaSkudGhlbihrZXlTZXQgPT4ge1xuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIk1ldGFkYXRhU2VydmljZS5nZXRTaWduaW5nS2V5czoga2V5IHNldCByZWNlaXZlZFwiLCBrZXlTZXQpO1xuXG4gICAgICAgICAgICAgICAgaWYgKCFrZXlTZXQua2V5cykge1xuICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJNZXRhZGF0YVNlcnZpY2UuZ2V0U2lnbmluZ0tleXM6IE1pc3Npbmcga2V5cyBvbiBrZXlzZXRcIik7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1pc3Npbmcga2V5cyBvbiBrZXlzZXRcIik7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5fc2V0dGluZ3Muc2lnbmluZ0tleXMgPSBrZXlTZXQua2V5cztcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fc2V0dGluZ3Muc2lnbmluZ0tleXM7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cblxuaW1wb3J0IHsgTG9nIH0gZnJvbSAnLi9Mb2cuanMnO1xuaW1wb3J0IHsgT2lkY0NsaWVudFNldHRpbmdzIH0gZnJvbSAnLi9PaWRjQ2xpZW50U2V0dGluZ3MuanMnO1xuaW1wb3J0IHsgRXJyb3JSZXNwb25zZSB9IGZyb20gJy4vRXJyb3JSZXNwb25zZS5qcyc7XG5pbXBvcnQgeyBTaWduaW5SZXF1ZXN0IH0gZnJvbSAnLi9TaWduaW5SZXF1ZXN0LmpzJztcbmltcG9ydCB7IFNpZ25pblJlc3BvbnNlIH0gZnJvbSAnLi9TaWduaW5SZXNwb25zZS5qcyc7XG5pbXBvcnQgeyBTaWdub3V0UmVxdWVzdCB9IGZyb20gJy4vU2lnbm91dFJlcXVlc3QuanMnO1xuaW1wb3J0IHsgU2lnbm91dFJlc3BvbnNlIH0gZnJvbSAnLi9TaWdub3V0UmVzcG9uc2UuanMnO1xuaW1wb3J0IHsgU2lnbmluU3RhdGUgfSBmcm9tICcuL1NpZ25pblN0YXRlLmpzJztcbmltcG9ydCB7IFN0YXRlIH0gZnJvbSAnLi9TdGF0ZS5qcyc7XG5cbmV4cG9ydCBjbGFzcyBPaWRjQ2xpZW50IHtcbiAgICBjb25zdHJ1Y3RvcihzZXR0aW5ncyA9IHt9KSB7XG4gICAgICAgIGlmIChzZXR0aW5ncyBpbnN0YW5jZW9mIE9pZGNDbGllbnRTZXR0aW5ncykge1xuICAgICAgICAgICAgdGhpcy5fc2V0dGluZ3MgPSBzZXR0aW5ncztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX3NldHRpbmdzID0gbmV3IE9pZGNDbGllbnRTZXR0aW5ncyhzZXR0aW5ncyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXQgX3N0YXRlU3RvcmUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNldHRpbmdzLnN0YXRlU3RvcmU7XG4gICAgfVxuICAgIGdldCBfdmFsaWRhdG9yKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zZXR0aW5ncy52YWxpZGF0b3I7XG4gICAgfVxuICAgIGdldCBfbWV0YWRhdGFTZXJ2aWNlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zZXR0aW5ncy5tZXRhZGF0YVNlcnZpY2U7XG4gICAgfVxuXG4gICAgZ2V0IHNldHRpbmdzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2V0dGluZ3M7XG4gICAgfVxuICAgIGdldCBtZXRhZGF0YVNlcnZpY2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tZXRhZGF0YVNlcnZpY2U7XG4gICAgfVxuXG4gICAgY3JlYXRlU2lnbmluUmVxdWVzdCh7XG4gICAgICAgIHJlc3BvbnNlX3R5cGUsIHNjb3BlLCByZWRpcmVjdF91cmksXG4gICAgICAgIC8vIGRhdGEgd2FzIG1lYW50IHRvIGJlIHRoZSBwbGFjZSBhIGNhbGxlciBjb3VsZCBpbmRpY2F0ZSB0aGUgZGF0YSB0b1xuICAgICAgICAvLyBoYXZlIHJvdW5kIHRyaXBwZWQsIGJ1dCBwZW9wbGUgd2VyZSBnZXR0aW5nIGNvbmZ1c2VkLCBzbyBpIGFkZGVkIHN0YXRlIChzaW5jZSB0aGF0IG1hdGNoZXMgdGhlIHNwZWMpXG4gICAgICAgIC8vIGFuZCBzbyBub3cgaWYgZGF0YSBpcyBub3QgcGFzc2VkLCBidXQgc3RhdGUgaXMgdGhlbiBzdGF0ZSB3aWxsIGJlIHVzZWRcbiAgICAgICAgZGF0YSwgc3RhdGUsIHByb21wdCwgZGlzcGxheSwgbWF4X2FnZSwgdWlfbG9jYWxlcywgaWRfdG9rZW5faGludCwgbG9naW5faGludCwgYWNyX3ZhbHVlcyxcbiAgICAgICAgcmVzb3VyY2UsIHJlcXVlc3QsIHJlcXVlc3RfdXJpLCByZXNwb25zZV9tb2RlLCBleHRyYVF1ZXJ5UGFyYW1zLCBleHRyYVRva2VuUGFyYW1zLCByZXF1ZXN0X3R5cGUsIHNraXBVc2VySW5mbyB9ID0ge30sXG4gICAgICAgIHN0YXRlU3RvcmVcbiAgICApIHtcbiAgICAgICAgTG9nLmRlYnVnKFwiT2lkY0NsaWVudC5jcmVhdGVTaWduaW5SZXF1ZXN0XCIpO1xuXG4gICAgICAgIGxldCBjbGllbnRfaWQgPSB0aGlzLl9zZXR0aW5ncy5jbGllbnRfaWQ7XG4gICAgICAgIHJlc3BvbnNlX3R5cGUgPSByZXNwb25zZV90eXBlIHx8IHRoaXMuX3NldHRpbmdzLnJlc3BvbnNlX3R5cGU7XG4gICAgICAgIHNjb3BlID0gc2NvcGUgfHwgdGhpcy5fc2V0dGluZ3Muc2NvcGU7XG4gICAgICAgIHJlZGlyZWN0X3VyaSA9IHJlZGlyZWN0X3VyaSB8fCB0aGlzLl9zZXR0aW5ncy5yZWRpcmVjdF91cmk7XG5cbiAgICAgICAgLy8gaWRfdG9rZW5faGludCwgbG9naW5faGludCBhcmVuJ3QgYWxsb3dlZCBvbiBfc2V0dGluZ3NcbiAgICAgICAgcHJvbXB0ID0gcHJvbXB0IHx8IHRoaXMuX3NldHRpbmdzLnByb21wdDtcbiAgICAgICAgZGlzcGxheSA9IGRpc3BsYXkgfHwgdGhpcy5fc2V0dGluZ3MuZGlzcGxheTtcbiAgICAgICAgbWF4X2FnZSA9IG1heF9hZ2UgfHwgdGhpcy5fc2V0dGluZ3MubWF4X2FnZTtcbiAgICAgICAgdWlfbG9jYWxlcyA9IHVpX2xvY2FsZXMgfHwgdGhpcy5fc2V0dGluZ3MudWlfbG9jYWxlcztcbiAgICAgICAgYWNyX3ZhbHVlcyA9IGFjcl92YWx1ZXMgfHwgdGhpcy5fc2V0dGluZ3MuYWNyX3ZhbHVlcztcbiAgICAgICAgcmVzb3VyY2UgPSByZXNvdXJjZSB8fCB0aGlzLl9zZXR0aW5ncy5yZXNvdXJjZTtcbiAgICAgICAgcmVzcG9uc2VfbW9kZSA9IHJlc3BvbnNlX21vZGUgfHwgdGhpcy5fc2V0dGluZ3MucmVzcG9uc2VfbW9kZTtcbiAgICAgICAgZXh0cmFRdWVyeVBhcmFtcyA9IGV4dHJhUXVlcnlQYXJhbXMgfHwgdGhpcy5fc2V0dGluZ3MuZXh0cmFRdWVyeVBhcmFtcztcbiAgICAgICAgZXh0cmFUb2tlblBhcmFtcyA9IGV4dHJhVG9rZW5QYXJhbXMgfHwgdGhpcy5fc2V0dGluZ3MuZXh0cmFUb2tlblBhcmFtcztcblxuICAgICAgICBsZXQgYXV0aG9yaXR5ID0gdGhpcy5fc2V0dGluZ3MuYXV0aG9yaXR5O1xuXG4gICAgICAgIGlmIChTaWduaW5SZXF1ZXN0LmlzQ29kZShyZXNwb25zZV90eXBlKSAmJiByZXNwb25zZV90eXBlICE9PSBcImNvZGVcIikge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIk9wZW5JRCBDb25uZWN0IGh5YnJpZCBmbG93IGlzIG5vdCBzdXBwb3J0ZWRcIikpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX21ldGFkYXRhU2VydmljZS5nZXRBdXRob3JpemF0aW9uRW5kcG9pbnQoKS50aGVuKHVybCA9PiB7XG4gICAgICAgICAgICBMb2cuZGVidWcoXCJPaWRjQ2xpZW50LmNyZWF0ZVNpZ25pblJlcXVlc3Q6IFJlY2VpdmVkIGF1dGhvcml6YXRpb24gZW5kcG9pbnRcIiwgdXJsKTtcblxuICAgICAgICAgICAgbGV0IHNpZ25pblJlcXVlc3QgPSBuZXcgU2lnbmluUmVxdWVzdCh7XG4gICAgICAgICAgICAgICAgdXJsLFxuICAgICAgICAgICAgICAgIGNsaWVudF9pZCxcbiAgICAgICAgICAgICAgICByZWRpcmVjdF91cmksXG4gICAgICAgICAgICAgICAgcmVzcG9uc2VfdHlwZSxcbiAgICAgICAgICAgICAgICBzY29wZSxcbiAgICAgICAgICAgICAgICBkYXRhOiBkYXRhIHx8IHN0YXRlLFxuICAgICAgICAgICAgICAgIGF1dGhvcml0eSxcbiAgICAgICAgICAgICAgICBwcm9tcHQsIGRpc3BsYXksIG1heF9hZ2UsIHVpX2xvY2FsZXMsIGlkX3Rva2VuX2hpbnQsIGxvZ2luX2hpbnQsIGFjcl92YWx1ZXMsXG4gICAgICAgICAgICAgICAgcmVzb3VyY2UsIHJlcXVlc3QsIHJlcXVlc3RfdXJpLCBleHRyYVF1ZXJ5UGFyYW1zLCBleHRyYVRva2VuUGFyYW1zLCByZXF1ZXN0X3R5cGUsIHJlc3BvbnNlX21vZGUsXG4gICAgICAgICAgICAgICAgY2xpZW50X3NlY3JldDogdGhpcy5fc2V0dGluZ3MuY2xpZW50X3NlY3JldCxcbiAgICAgICAgICAgICAgICBza2lwVXNlckluZm9cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB2YXIgc2lnbmluU3RhdGUgPSBzaWduaW5SZXF1ZXN0LnN0YXRlO1xuICAgICAgICAgICAgc3RhdGVTdG9yZSA9IHN0YXRlU3RvcmUgfHwgdGhpcy5fc3RhdGVTdG9yZTtcblxuICAgICAgICAgICAgcmV0dXJuIHN0YXRlU3RvcmUuc2V0KHNpZ25pblN0YXRlLmlkLCBzaWduaW5TdGF0ZS50b1N0b3JhZ2VTdHJpbmcoKSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNpZ25pblJlcXVlc3Q7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmVhZFNpZ25pblJlc3BvbnNlU3RhdGUodXJsLCBzdGF0ZVN0b3JlLCByZW1vdmVTdGF0ZSA9IGZhbHNlKSB7XG4gICAgICAgIExvZy5kZWJ1ZyhcIk9pZGNDbGllbnQucmVhZFNpZ25pblJlc3BvbnNlU3RhdGVcIik7XG5cbiAgICAgICAgbGV0IHVzZVF1ZXJ5ID0gdGhpcy5fc2V0dGluZ3MucmVzcG9uc2VfbW9kZSA9PT0gXCJxdWVyeVwiIHx8IFxuICAgICAgICAgICAgKCF0aGlzLl9zZXR0aW5ncy5yZXNwb25zZV9tb2RlICYmIFNpZ25pblJlcXVlc3QuaXNDb2RlKHRoaXMuX3NldHRpbmdzLnJlc3BvbnNlX3R5cGUpKTtcbiAgICAgICAgbGV0IGRlbGltaXRlciA9IHVzZVF1ZXJ5ID8gXCI/XCIgOiBcIiNcIjtcblxuICAgICAgICB2YXIgcmVzcG9uc2UgPSBuZXcgU2lnbmluUmVzcG9uc2UodXJsLCBkZWxpbWl0ZXIpO1xuXG4gICAgICAgIGlmICghcmVzcG9uc2Uuc3RhdGUpIHtcbiAgICAgICAgICAgIExvZy5lcnJvcihcIk9pZGNDbGllbnQucmVhZFNpZ25pblJlc3BvbnNlU3RhdGU6IE5vIHN0YXRlIGluIHJlc3BvbnNlXCIpO1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIk5vIHN0YXRlIGluIHJlc3BvbnNlXCIpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN0YXRlU3RvcmUgPSBzdGF0ZVN0b3JlIHx8IHRoaXMuX3N0YXRlU3RvcmU7XG5cbiAgICAgICAgdmFyIHN0YXRlQXBpID0gcmVtb3ZlU3RhdGUgPyBzdGF0ZVN0b3JlLnJlbW92ZS5iaW5kKHN0YXRlU3RvcmUpIDogc3RhdGVTdG9yZS5nZXQuYmluZChzdGF0ZVN0b3JlKTtcblxuICAgICAgICByZXR1cm4gc3RhdGVBcGkocmVzcG9uc2Uuc3RhdGUpLnRoZW4oc3RvcmVkU3RhdGVTdHJpbmcgPT4ge1xuICAgICAgICAgICAgaWYgKCFzdG9yZWRTdGF0ZVN0cmluZykge1xuICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIk9pZGNDbGllbnQucmVhZFNpZ25pblJlc3BvbnNlU3RhdGU6IE5vIG1hdGNoaW5nIHN0YXRlIGZvdW5kIGluIHN0b3JhZ2VcIik7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gbWF0Y2hpbmcgc3RhdGUgZm91bmQgaW4gc3RvcmFnZVwiKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IHN0YXRlID0gU2lnbmluU3RhdGUuZnJvbVN0b3JhZ2VTdHJpbmcoc3RvcmVkU3RhdGVTdHJpbmcpO1xuICAgICAgICAgICAgcmV0dXJuIHtzdGF0ZSwgcmVzcG9uc2V9O1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcm9jZXNzU2lnbmluUmVzcG9uc2UodXJsLCBzdGF0ZVN0b3JlKSB7XG4gICAgICAgIExvZy5kZWJ1ZyhcIk9pZGNDbGllbnQucHJvY2Vzc1NpZ25pblJlc3BvbnNlXCIpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLnJlYWRTaWduaW5SZXNwb25zZVN0YXRlKHVybCwgc3RhdGVTdG9yZSwgdHJ1ZSkudGhlbigoe3N0YXRlLCByZXNwb25zZX0pID0+IHtcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIk9pZGNDbGllbnQucHJvY2Vzc1NpZ25pblJlc3BvbnNlOiBSZWNlaXZlZCBzdGF0ZSBmcm9tIHN0b3JhZ2U7IHZhbGlkYXRpbmcgcmVzcG9uc2VcIik7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdmFsaWRhdG9yLnZhbGlkYXRlU2lnbmluUmVzcG9uc2Uoc3RhdGUsIHJlc3BvbnNlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgY3JlYXRlU2lnbm91dFJlcXVlc3Qoe2lkX3Rva2VuX2hpbnQsIGRhdGEsIHN0YXRlLCBwb3N0X2xvZ291dF9yZWRpcmVjdF91cmksIGV4dHJhUXVlcnlQYXJhbXMsIHJlcXVlc3RfdHlwZSB9ID0ge30sXG4gICAgICAgIHN0YXRlU3RvcmVcbiAgICApIHtcbiAgICAgICAgTG9nLmRlYnVnKFwiT2lkY0NsaWVudC5jcmVhdGVTaWdub3V0UmVxdWVzdFwiKTtcblxuICAgICAgICBwb3N0X2xvZ291dF9yZWRpcmVjdF91cmkgPSBwb3N0X2xvZ291dF9yZWRpcmVjdF91cmkgfHwgdGhpcy5fc2V0dGluZ3MucG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpO1xuICAgICAgICBleHRyYVF1ZXJ5UGFyYW1zID0gZXh0cmFRdWVyeVBhcmFtcyB8fCB0aGlzLl9zZXR0aW5ncy5leHRyYVF1ZXJ5UGFyYW1zO1xuXG4gICAgICAgIHJldHVybiB0aGlzLl9tZXRhZGF0YVNlcnZpY2UuZ2V0RW5kU2Vzc2lvbkVuZHBvaW50KCkudGhlbih1cmwgPT4ge1xuICAgICAgICAgICAgaWYgKCF1cmwpIHtcbiAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJPaWRjQ2xpZW50LmNyZWF0ZVNpZ25vdXRSZXF1ZXN0OiBObyBlbmQgc2Vzc2lvbiBlbmRwb2ludCB1cmwgcmV0dXJuZWRcIik7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwibm8gZW5kIHNlc3Npb24gZW5kcG9pbnRcIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIk9pZGNDbGllbnQuY3JlYXRlU2lnbm91dFJlcXVlc3Q6IFJlY2VpdmVkIGVuZCBzZXNzaW9uIGVuZHBvaW50XCIsIHVybCk7XG5cbiAgICAgICAgICAgIGxldCByZXF1ZXN0ID0gbmV3IFNpZ25vdXRSZXF1ZXN0KHtcbiAgICAgICAgICAgICAgICB1cmwsXG4gICAgICAgICAgICAgICAgaWRfdG9rZW5faGludCxcbiAgICAgICAgICAgICAgICBwb3N0X2xvZ291dF9yZWRpcmVjdF91cmksXG4gICAgICAgICAgICAgICAgZGF0YTogZGF0YSB8fCBzdGF0ZSxcbiAgICAgICAgICAgICAgICBleHRyYVF1ZXJ5UGFyYW1zLFxuICAgICAgICAgICAgICAgIHJlcXVlc3RfdHlwZVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHZhciBzaWdub3V0U3RhdGUgPSByZXF1ZXN0LnN0YXRlO1xuICAgICAgICAgICAgaWYgKHNpZ25vdXRTdGF0ZSkge1xuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIk9pZGNDbGllbnQuY3JlYXRlU2lnbm91dFJlcXVlc3Q6IFNpZ25vdXQgcmVxdWVzdCBoYXMgc3RhdGUgdG8gcGVyc2lzdFwiKTtcblxuICAgICAgICAgICAgICAgIHN0YXRlU3RvcmUgPSBzdGF0ZVN0b3JlIHx8IHRoaXMuX3N0YXRlU3RvcmU7XG4gICAgICAgICAgICAgICAgc3RhdGVTdG9yZS5zZXQoc2lnbm91dFN0YXRlLmlkLCBzaWdub3V0U3RhdGUudG9TdG9yYWdlU3RyaW5nKCkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gcmVxdWVzdDtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmVhZFNpZ25vdXRSZXNwb25zZVN0YXRlKHVybCwgc3RhdGVTdG9yZSwgcmVtb3ZlU3RhdGUgPSBmYWxzZSkge1xuICAgICAgICBMb2cuZGVidWcoXCJPaWRjQ2xpZW50LnJlYWRTaWdub3V0UmVzcG9uc2VTdGF0ZVwiKTtcblxuICAgICAgICB2YXIgcmVzcG9uc2UgPSBuZXcgU2lnbm91dFJlc3BvbnNlKHVybCk7XG4gICAgICAgIGlmICghcmVzcG9uc2Uuc3RhdGUpIHtcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIk9pZGNDbGllbnQucmVhZFNpZ25vdXRSZXNwb25zZVN0YXRlOiBObyBzdGF0ZSBpbiByZXNwb25zZVwiKTtcblxuICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmVycm9yKSB7XG4gICAgICAgICAgICAgICAgTG9nLndhcm4oXCJPaWRjQ2xpZW50LnJlYWRTaWdub3V0UmVzcG9uc2VTdGF0ZTogUmVzcG9uc2Ugd2FzIGVycm9yOiBcIiwgcmVzcG9uc2UuZXJyb3IpO1xuICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3JSZXNwb25zZShyZXNwb25zZSkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHt1bmRlZmluZWQsIHJlc3BvbnNlfSk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgc3RhdGVLZXkgPSByZXNwb25zZS5zdGF0ZTtcblxuICAgICAgICBzdGF0ZVN0b3JlID0gc3RhdGVTdG9yZSB8fCB0aGlzLl9zdGF0ZVN0b3JlO1xuXG4gICAgICAgIHZhciBzdGF0ZUFwaSA9IHJlbW92ZVN0YXRlID8gc3RhdGVTdG9yZS5yZW1vdmUuYmluZChzdGF0ZVN0b3JlKSA6IHN0YXRlU3RvcmUuZ2V0LmJpbmQoc3RhdGVTdG9yZSk7XG4gICAgICAgIHJldHVybiBzdGF0ZUFwaShzdGF0ZUtleSkudGhlbihzdG9yZWRTdGF0ZVN0cmluZyA9PiB7XG4gICAgICAgICAgICBpZiAoIXN0b3JlZFN0YXRlU3RyaW5nKSB7XG4gICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiT2lkY0NsaWVudC5yZWFkU2lnbm91dFJlc3BvbnNlU3RhdGU6IE5vIG1hdGNoaW5nIHN0YXRlIGZvdW5kIGluIHN0b3JhZ2VcIik7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gbWF0Y2hpbmcgc3RhdGUgZm91bmQgaW4gc3RvcmFnZVwiKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IHN0YXRlID0gU3RhdGUuZnJvbVN0b3JhZ2VTdHJpbmcoc3RvcmVkU3RhdGVTdHJpbmcpO1xuXG4gICAgICAgICAgICByZXR1cm4ge3N0YXRlLCByZXNwb25zZX07XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByb2Nlc3NTaWdub3V0UmVzcG9uc2UodXJsLCBzdGF0ZVN0b3JlKSB7XG4gICAgICAgIExvZy5kZWJ1ZyhcIk9pZGNDbGllbnQucHJvY2Vzc1NpZ25vdXRSZXNwb25zZVwiKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5yZWFkU2lnbm91dFJlc3BvbnNlU3RhdGUodXJsLCBzdGF0ZVN0b3JlLCB0cnVlKS50aGVuKCh7c3RhdGUsIHJlc3BvbnNlfSkgPT4ge1xuICAgICAgICAgICAgaWYgKHN0YXRlKSB7XG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiT2lkY0NsaWVudC5wcm9jZXNzU2lnbm91dFJlc3BvbnNlOiBSZWNlaXZlZCBzdGF0ZSBmcm9tIHN0b3JhZ2U7IHZhbGlkYXRpbmcgcmVzcG9uc2VcIik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbGlkYXRvci52YWxpZGF0ZVNpZ25vdXRSZXNwb25zZShzdGF0ZSwgcmVzcG9uc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiT2lkY0NsaWVudC5wcm9jZXNzU2lnbm91dFJlc3BvbnNlOiBObyBzdGF0ZSBmcm9tIHN0b3JhZ2U7IHNraXBwaW5nIHZhbGlkYXRpbmcgcmVzcG9uc2VcIik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBjbGVhclN0YWxlU3RhdGUoc3RhdGVTdG9yZSkge1xuICAgICAgICBMb2cuZGVidWcoXCJPaWRjQ2xpZW50LmNsZWFyU3RhbGVTdGF0ZVwiKTtcblxuICAgICAgICBzdGF0ZVN0b3JlID0gc3RhdGVTdG9yZSB8fCB0aGlzLl9zdGF0ZVN0b3JlO1xuXG4gICAgICAgIHJldHVybiBTdGF0ZS5jbGVhclN0YWxlU3RhdGUoc3RhdGVTdG9yZSwgdGhpcy5zZXR0aW5ncy5zdGFsZVN0YXRlQWdlKTtcbiAgICB9XG59XG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxuXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XG5pbXBvcnQgeyBXZWJTdG9yYWdlU3RhdGVTdG9yZSB9IGZyb20gJy4vV2ViU3RvcmFnZVN0YXRlU3RvcmUuanMnO1xuaW1wb3J0IHsgUmVzcG9uc2VWYWxpZGF0b3IgfSBmcm9tICcuL1Jlc3BvbnNlVmFsaWRhdG9yLmpzJztcbmltcG9ydCB7IE1ldGFkYXRhU2VydmljZSB9IGZyb20gJy4vTWV0YWRhdGFTZXJ2aWNlLmpzJztcblxuY29uc3QgT2lkY01ldGFkYXRhVXJsUGF0aCA9ICcud2VsbC1rbm93bi9vcGVuaWQtY29uZmlndXJhdGlvbic7XG5cbmNvbnN0IERlZmF1bHRSZXNwb25zZVR5cGUgPSBcImlkX3Rva2VuXCI7XG5jb25zdCBEZWZhdWx0U2NvcGUgPSBcIm9wZW5pZFwiO1xuY29uc3QgRGVmYXVsdFN0YWxlU3RhdGVBZ2UgPSA2MCAqIDE1OyAvLyBzZWNvbmRzXG5jb25zdCBEZWZhdWx0Q2xvY2tTa2V3SW5TZWNvbmRzID0gNjAgKiA1O1xuXG5leHBvcnQgY2xhc3MgT2lkY0NsaWVudFNldHRpbmdzIHtcbiAgICBjb25zdHJ1Y3Rvcih7XG4gICAgICAgIC8vIG1ldGFkYXRhIHJlbGF0ZWRcbiAgICAgICAgYXV0aG9yaXR5LCBtZXRhZGF0YVVybCwgbWV0YWRhdGEsIHNpZ25pbmdLZXlzLFxuICAgICAgICAvLyBjbGllbnQgcmVsYXRlZFxuICAgICAgICBjbGllbnRfaWQsIGNsaWVudF9zZWNyZXQsIHJlc3BvbnNlX3R5cGUgPSBEZWZhdWx0UmVzcG9uc2VUeXBlLCBzY29wZSA9IERlZmF1bHRTY29wZSxcbiAgICAgICAgcmVkaXJlY3RfdXJpLCBwb3N0X2xvZ291dF9yZWRpcmVjdF91cmksXG4gICAgICAgIC8vIG9wdGlvbmFsIHByb3RvY29sXG4gICAgICAgIHByb21wdCwgZGlzcGxheSwgbWF4X2FnZSwgdWlfbG9jYWxlcywgYWNyX3ZhbHVlcywgcmVzb3VyY2UsIHJlc3BvbnNlX21vZGUsXG4gICAgICAgIC8vIGJlaGF2aW9yIGZsYWdzXG4gICAgICAgIGZpbHRlclByb3RvY29sQ2xhaW1zID0gdHJ1ZSwgbG9hZFVzZXJJbmZvID0gdHJ1ZSxcbiAgICAgICAgc3RhbGVTdGF0ZUFnZSA9IERlZmF1bHRTdGFsZVN0YXRlQWdlLCBjbG9ja1NrZXcgPSBEZWZhdWx0Q2xvY2tTa2V3SW5TZWNvbmRzLFxuICAgICAgICB1c2VySW5mb0p3dElzc3VlciA9ICdPUCcsXG4gICAgICAgIC8vIG90aGVyIGJlaGF2aW9yXG4gICAgICAgIHN0YXRlU3RvcmUgPSBuZXcgV2ViU3RvcmFnZVN0YXRlU3RvcmUoKSxcbiAgICAgICAgUmVzcG9uc2VWYWxpZGF0b3JDdG9yID0gUmVzcG9uc2VWYWxpZGF0b3IsXG4gICAgICAgIE1ldGFkYXRhU2VydmljZUN0b3IgPSBNZXRhZGF0YVNlcnZpY2UsXG4gICAgICAgIC8vIGV4dHJhIHF1ZXJ5IHBhcmFtc1xuICAgICAgICBleHRyYVF1ZXJ5UGFyYW1zID0ge30sXG4gICAgICAgIGV4dHJhVG9rZW5QYXJhbXMgPSB7fVxuICAgIH0gPSB7fSkge1xuXG4gICAgICAgIHRoaXMuX2F1dGhvcml0eSA9IGF1dGhvcml0eTtcbiAgICAgICAgdGhpcy5fbWV0YWRhdGFVcmwgPSBtZXRhZGF0YVVybDtcbiAgICAgICAgdGhpcy5fbWV0YWRhdGEgPSBtZXRhZGF0YTtcbiAgICAgICAgdGhpcy5fc2lnbmluZ0tleXMgPSBzaWduaW5nS2V5cztcblxuICAgICAgICB0aGlzLl9jbGllbnRfaWQgPSBjbGllbnRfaWQ7XG4gICAgICAgIHRoaXMuX2NsaWVudF9zZWNyZXQgPSBjbGllbnRfc2VjcmV0O1xuICAgICAgICB0aGlzLl9yZXNwb25zZV90eXBlID0gcmVzcG9uc2VfdHlwZTtcbiAgICAgICAgdGhpcy5fc2NvcGUgPSBzY29wZTtcbiAgICAgICAgdGhpcy5fcmVkaXJlY3RfdXJpID0gcmVkaXJlY3RfdXJpO1xuICAgICAgICB0aGlzLl9wb3N0X2xvZ291dF9yZWRpcmVjdF91cmkgPSBwb3N0X2xvZ291dF9yZWRpcmVjdF91cmk7XG5cbiAgICAgICAgdGhpcy5fcHJvbXB0ID0gcHJvbXB0O1xuICAgICAgICB0aGlzLl9kaXNwbGF5ID0gZGlzcGxheTtcbiAgICAgICAgdGhpcy5fbWF4X2FnZSA9IG1heF9hZ2U7XG4gICAgICAgIHRoaXMuX3VpX2xvY2FsZXMgPSB1aV9sb2NhbGVzO1xuICAgICAgICB0aGlzLl9hY3JfdmFsdWVzID0gYWNyX3ZhbHVlcztcbiAgICAgICAgdGhpcy5fcmVzb3VyY2UgPSByZXNvdXJjZTtcbiAgICAgICAgdGhpcy5fcmVzcG9uc2VfbW9kZSA9IHJlc3BvbnNlX21vZGU7XG5cbiAgICAgICAgdGhpcy5fZmlsdGVyUHJvdG9jb2xDbGFpbXMgPSAhIWZpbHRlclByb3RvY29sQ2xhaW1zO1xuICAgICAgICB0aGlzLl9sb2FkVXNlckluZm8gPSAhIWxvYWRVc2VySW5mbztcbiAgICAgICAgdGhpcy5fc3RhbGVTdGF0ZUFnZSA9IHN0YWxlU3RhdGVBZ2U7XG4gICAgICAgIHRoaXMuX2Nsb2NrU2tldyA9IGNsb2NrU2tldztcbiAgICAgICAgdGhpcy5fdXNlckluZm9Kd3RJc3N1ZXIgPSB1c2VySW5mb0p3dElzc3VlcjtcblxuICAgICAgICB0aGlzLl9zdGF0ZVN0b3JlID0gc3RhdGVTdG9yZTtcbiAgICAgICAgdGhpcy5fdmFsaWRhdG9yID0gbmV3IFJlc3BvbnNlVmFsaWRhdG9yQ3Rvcih0aGlzKTtcbiAgICAgICAgdGhpcy5fbWV0YWRhdGFTZXJ2aWNlID0gbmV3IE1ldGFkYXRhU2VydmljZUN0b3IodGhpcyk7XG5cbiAgICAgICAgdGhpcy5fZXh0cmFRdWVyeVBhcmFtcyA9IHR5cGVvZiBleHRyYVF1ZXJ5UGFyYW1zID09PSAnb2JqZWN0JyA/IGV4dHJhUXVlcnlQYXJhbXMgOiB7fTtcbiAgICAgICAgdGhpcy5fZXh0cmFUb2tlblBhcmFtcyA9IHR5cGVvZiBleHRyYVRva2VuUGFyYW1zID09PSAnb2JqZWN0JyA/IGV4dHJhVG9rZW5QYXJhbXMgOiB7fTtcbiAgICB9XG5cbiAgICAvLyBjbGllbnQgY29uZmlnXG4gICAgZ2V0IGNsaWVudF9pZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NsaWVudF9pZDtcbiAgICB9XG4gICAgc2V0IGNsaWVudF9pZCh2YWx1ZSkge1xuICAgICAgICBpZiAoIXRoaXMuX2NsaWVudF9pZCkge1xuICAgICAgICAgICAgLy8gb25lLXRpbWUgc2V0IG9ubHlcbiAgICAgICAgICAgIHRoaXMuX2NsaWVudF9pZCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgTG9nLmVycm9yKFwiT2lkY0NsaWVudFNldHRpbmdzLnNldF9jbGllbnRfaWQ6IGNsaWVudF9pZCBoYXMgYWxyZWFkeSBiZWVuIGFzc2lnbmVkLlwiKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiY2xpZW50X2lkIGhhcyBhbHJlYWR5IGJlZW4gYXNzaWduZWQuXCIpXG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0IGNsaWVudF9zZWNyZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jbGllbnRfc2VjcmV0O1xuICAgIH1cbiAgICBnZXQgcmVzcG9uc2VfdHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc3BvbnNlX3R5cGU7XG4gICAgfVxuICAgIGdldCBzY29wZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Njb3BlO1xuICAgIH1cbiAgICBnZXQgcmVkaXJlY3RfdXJpKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVkaXJlY3RfdXJpO1xuICAgIH1cbiAgICBnZXQgcG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpO1xuICAgIH1cblxuXG4gICAgLy8gb3B0aW9uYWwgcHJvdG9jb2wgcGFyYW1zXG4gICAgZ2V0IHByb21wdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Byb21wdDtcbiAgICB9XG4gICAgZ2V0IGRpc3BsYXkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kaXNwbGF5O1xuICAgIH1cbiAgICBnZXQgbWF4X2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21heF9hZ2U7XG4gICAgfVxuICAgIGdldCB1aV9sb2NhbGVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdWlfbG9jYWxlcztcbiAgICB9XG4gICAgZ2V0IGFjcl92YWx1ZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hY3JfdmFsdWVzO1xuICAgIH1cbiAgICBnZXQgcmVzb3VyY2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZXNvdXJjZTtcbiAgICB9XG4gICAgZ2V0IHJlc3BvbnNlX21vZGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZXNwb25zZV9tb2RlO1xuICAgIH1cblxuXG4gICAgLy8gbWV0YWRhdGFcbiAgICBnZXQgYXV0aG9yaXR5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYXV0aG9yaXR5O1xuICAgIH1cbiAgICBzZXQgYXV0aG9yaXR5KHZhbHVlKSB7XG4gICAgICAgIGlmICghdGhpcy5fYXV0aG9yaXR5KSB7XG4gICAgICAgICAgICAvLyBvbmUtdGltZSBzZXQgb25seVxuICAgICAgICAgICAgdGhpcy5fYXV0aG9yaXR5ID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJPaWRjQ2xpZW50U2V0dGluZ3Muc2V0X2F1dGhvcml0eTogYXV0aG9yaXR5IGhhcyBhbHJlYWR5IGJlZW4gYXNzaWduZWQuXCIpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJhdXRob3JpdHkgaGFzIGFscmVhZHkgYmVlbiBhc3NpZ25lZC5cIilcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXQgbWV0YWRhdGFVcmwoKSB7XG4gICAgICAgIGlmICghdGhpcy5fbWV0YWRhdGFVcmwpIHtcbiAgICAgICAgICAgIHRoaXMuX21ldGFkYXRhVXJsID0gdGhpcy5hdXRob3JpdHk7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLl9tZXRhZGF0YVVybCAmJiB0aGlzLl9tZXRhZGF0YVVybC5pbmRleE9mKE9pZGNNZXRhZGF0YVVybFBhdGgpIDwgMCkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9tZXRhZGF0YVVybFt0aGlzLl9tZXRhZGF0YVVybC5sZW5ndGggLSAxXSAhPT0gJy8nKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX21ldGFkYXRhVXJsICs9ICcvJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5fbWV0YWRhdGFVcmwgKz0gT2lkY01ldGFkYXRhVXJsUGF0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLl9tZXRhZGF0YVVybDtcbiAgICB9XG5cbiAgICAvLyBzZXR0YWJsZS9jYWNoYWJsZSBtZXRhZGF0YSB2YWx1ZXNcbiAgICBnZXQgbWV0YWRhdGEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tZXRhZGF0YTtcbiAgICB9XG4gICAgc2V0IG1ldGFkYXRhKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuX21ldGFkYXRhID0gdmFsdWU7XG4gICAgfVxuXG4gICAgZ2V0IHNpZ25pbmdLZXlzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2lnbmluZ0tleXM7XG4gICAgfVxuICAgIHNldCBzaWduaW5nS2V5cyh2YWx1ZSkge1xuICAgICAgICB0aGlzLl9zaWduaW5nS2V5cyA9IHZhbHVlO1xuICAgIH1cblxuICAgIC8vIGJlaGF2aW9yIGZsYWdzXG4gICAgZ2V0IGZpbHRlclByb3RvY29sQ2xhaW1zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZmlsdGVyUHJvdG9jb2xDbGFpbXM7XG4gICAgfVxuICAgIGdldCBsb2FkVXNlckluZm8oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sb2FkVXNlckluZm87XG4gICAgfVxuICAgIGdldCBzdGFsZVN0YXRlQWdlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc3RhbGVTdGF0ZUFnZTtcbiAgICB9XG4gICAgZ2V0IGNsb2NrU2tldygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Nsb2NrU2tldztcbiAgICB9XG4gICAgZ2V0IHVzZXJJbmZvSnd0SXNzdWVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdXNlckluZm9Kd3RJc3N1ZXI7XG4gICAgfVxuXG4gICAgZ2V0IHN0YXRlU3RvcmUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zdGF0ZVN0b3JlO1xuICAgIH1cbiAgICBnZXQgdmFsaWRhdG9yKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdmFsaWRhdG9yO1xuICAgIH1cbiAgICBnZXQgbWV0YWRhdGFTZXJ2aWNlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWV0YWRhdGFTZXJ2aWNlO1xuICAgIH1cblxuICAgIC8vIGV4dHJhIHF1ZXJ5IHBhcmFtc1xuICAgIGdldCBleHRyYVF1ZXJ5UGFyYW1zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZXh0cmFRdWVyeVBhcmFtcztcbiAgICB9XG4gICAgc2V0IGV4dHJhUXVlcnlQYXJhbXModmFsdWUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpe1xuICAgICAgICAgICAgdGhpcy5fZXh0cmFRdWVyeVBhcmFtcyA9IHZhbHVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fZXh0cmFRdWVyeVBhcmFtcyA9IHt9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gZXh0cmEgdG9rZW4gcGFyYW1zXG4gICAgZ2V0IGV4dHJhVG9rZW5QYXJhbXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9leHRyYVRva2VuUGFyYW1zO1xuICAgIH1cbiAgICBzZXQgZXh0cmFUb2tlblBhcmFtcyh2YWx1ZSkge1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jyl7XG4gICAgICAgICAgICB0aGlzLl9leHRyYVRva2VuUGFyYW1zID0gdmFsdWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9leHRyYVRva2VuUGFyYW1zID0ge307XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxuXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XG5pbXBvcnQgeyBQb3B1cFdpbmRvdyB9IGZyb20gJy4vUG9wdXBXaW5kb3cuanMnO1xuXG5leHBvcnQgY2xhc3MgUG9wdXBOYXZpZ2F0b3Ige1xuXG4gICAgcHJlcGFyZShwYXJhbXMpIHtcbiAgICAgICAgbGV0IHBvcHVwID0gbmV3IFBvcHVwV2luZG93KHBhcmFtcyk7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocG9wdXApO1xuICAgIH1cblxuICAgIGNhbGxiYWNrKHVybCwga2VlcE9wZW4sIGRlbGltaXRlcikge1xuICAgICAgICBMb2cuZGVidWcoXCJQb3B1cE5hdmlnYXRvci5jYWxsYmFja1wiKTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgUG9wdXBXaW5kb3cubm90aWZ5T3BlbmVyKHVybCwga2VlcE9wZW4sIGRlbGltaXRlcik7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXG5cbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcbmltcG9ydCB7IFVybFV0aWxpdHkgfSBmcm9tICcuL1VybFV0aWxpdHkuanMnO1xuXG5jb25zdCBDaGVja0ZvclBvcHVwQ2xvc2VkSW50ZXJ2YWwgPSA1MDA7XG5jb25zdCBEZWZhdWx0UG9wdXBGZWF0dXJlcyA9ICdsb2NhdGlvbj1ubyx0b29sYmFyPW5vLHdpZHRoPTUwMCxoZWlnaHQ9NTAwLGxlZnQ9MTAwLHRvcD0xMDA7Jztcbi8vY29uc3QgRGVmYXVsdFBvcHVwRmVhdHVyZXMgPSAnbG9jYXRpb249bm8sdG9vbGJhcj1ubyx3aWR0aD01MDAsaGVpZ2h0PTUwMCxsZWZ0PTEwMCx0b3A9MTAwO3Jlc2l6YWJsZT15ZXMnO1xuXG5jb25zdCBEZWZhdWx0UG9wdXBUYXJnZXQgPSBcIl9ibGFua1wiO1xuXG5leHBvcnQgY2xhc3MgUG9wdXBXaW5kb3cge1xuXG4gICAgY29uc3RydWN0b3IocGFyYW1zKSB7XG4gICAgICAgIHRoaXMuX3Byb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9yZXNvbHZlID0gcmVzb2x2ZTtcbiAgICAgICAgICAgIHRoaXMuX3JlamVjdCA9IHJlamVjdDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgbGV0IHRhcmdldCA9IHBhcmFtcy5wb3B1cFdpbmRvd1RhcmdldCB8fCBEZWZhdWx0UG9wdXBUYXJnZXQ7XG4gICAgICAgIGxldCBmZWF0dXJlcyA9IHBhcmFtcy5wb3B1cFdpbmRvd0ZlYXR1cmVzIHx8IERlZmF1bHRQb3B1cEZlYXR1cmVzO1xuXG4gICAgICAgIHRoaXMuX3BvcHVwID0gd2luZG93Lm9wZW4oJycsIHRhcmdldCwgZmVhdHVyZXMpO1xuICAgICAgICBpZiAodGhpcy5fcG9wdXApIHtcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlBvcHVwV2luZG93LmN0b3I6IHBvcHVwIHN1Y2Nlc3NmdWxseSBjcmVhdGVkXCIpO1xuICAgICAgICAgICAgdGhpcy5fY2hlY2tGb3JQb3B1cENsb3NlZFRpbWVyID0gd2luZG93LnNldEludGVydmFsKHRoaXMuX2NoZWNrRm9yUG9wdXBDbG9zZWQuYmluZCh0aGlzKSwgQ2hlY2tGb3JQb3B1cENsb3NlZEludGVydmFsKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldCBwcm9taXNlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHJvbWlzZTtcbiAgICB9XG5cbiAgICBuYXZpZ2F0ZShwYXJhbXMpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9wb3B1cCkge1xuICAgICAgICAgICAgdGhpcy5fZXJyb3IoXCJQb3B1cFdpbmRvdy5uYXZpZ2F0ZTogRXJyb3Igb3BlbmluZyBwb3B1cCB3aW5kb3dcIik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoIXBhcmFtcyB8fCAhcGFyYW1zLnVybCkge1xuICAgICAgICAgICAgdGhpcy5fZXJyb3IoXCJQb3B1cFdpbmRvdy5uYXZpZ2F0ZTogbm8gdXJsIHByb3ZpZGVkXCIpO1xuICAgICAgICAgICAgdGhpcy5fZXJyb3IoXCJObyB1cmwgcHJvdmlkZWRcIik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBMb2cuZGVidWcoXCJQb3B1cFdpbmRvdy5uYXZpZ2F0ZTogU2V0dGluZyBVUkwgaW4gcG9wdXBcIik7XG5cbiAgICAgICAgICAgIHRoaXMuX2lkID0gcGFyYW1zLmlkO1xuICAgICAgICAgICAgaWYgKHRoaXMuX2lkKSB7XG4gICAgICAgICAgICAgICAgd2luZG93W1wicG9wdXBDYWxsYmFja19cIiArIHBhcmFtcy5pZF0gPSB0aGlzLl9jYWxsYmFjay5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl9wb3B1cC5mb2N1cygpO1xuICAgICAgICAgICAgdGhpcy5fcG9wdXAud2luZG93LmxvY2F0aW9uID0gcGFyYW1zLnVybDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLnByb21pc2U7XG4gICAgfVxuXG4gICAgX3N1Y2Nlc3MoZGF0YSkge1xuICAgICAgICBMb2cuZGVidWcoXCJQb3B1cFdpbmRvdy5jYWxsYmFjazogU3VjY2Vzc2Z1bCByZXNwb25zZSBmcm9tIHBvcHVwIHdpbmRvd1wiKTtcblxuICAgICAgICB0aGlzLl9jbGVhbnVwKCk7XG4gICAgICAgIHRoaXMuX3Jlc29sdmUoZGF0YSk7XG4gICAgfVxuICAgIF9lcnJvcihtZXNzYWdlKSB7XG4gICAgICAgIExvZy5lcnJvcihcIlBvcHVwV2luZG93LmVycm9yOiBcIiwgbWVzc2FnZSk7XG4gICAgICAgIFxuICAgICAgICB0aGlzLl9jbGVhbnVwKCk7XG4gICAgICAgIHRoaXMuX3JlamVjdChuZXcgRXJyb3IobWVzc2FnZSkpO1xuICAgIH1cblxuICAgIGNsb3NlKCkge1xuICAgICAgICB0aGlzLl9jbGVhbnVwKGZhbHNlKTtcbiAgICB9XG5cbiAgICBfY2xlYW51cChrZWVwT3Blbikge1xuICAgICAgICBMb2cuZGVidWcoXCJQb3B1cFdpbmRvdy5jbGVhbnVwXCIpO1xuXG4gICAgICAgIHdpbmRvdy5jbGVhckludGVydmFsKHRoaXMuX2NoZWNrRm9yUG9wdXBDbG9zZWRUaW1lcik7XG4gICAgICAgIHRoaXMuX2NoZWNrRm9yUG9wdXBDbG9zZWRUaW1lciA9IG51bGw7XG5cbiAgICAgICAgZGVsZXRlIHdpbmRvd1tcInBvcHVwQ2FsbGJhY2tfXCIgKyB0aGlzLl9pZF07XG5cbiAgICAgICAgaWYgKHRoaXMuX3BvcHVwICYmICFrZWVwT3Blbikge1xuICAgICAgICAgICAgdGhpcy5fcG9wdXAuY2xvc2UoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9wb3B1cCA9IG51bGw7XG4gICAgfVxuXG4gICAgX2NoZWNrRm9yUG9wdXBDbG9zZWQoKSB7XG4gICAgICAgIGlmICghdGhpcy5fcG9wdXAgfHwgdGhpcy5fcG9wdXAuY2xvc2VkKSB7XG4gICAgICAgICAgICB0aGlzLl9lcnJvcihcIlBvcHVwIHdpbmRvdyBjbG9zZWRcIik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfY2FsbGJhY2sodXJsLCBrZWVwT3Blbikge1xuICAgICAgICB0aGlzLl9jbGVhbnVwKGtlZXBPcGVuKTtcblxuICAgICAgICBpZiAodXJsKSB7XG4gICAgICAgICAgICBMb2cuZGVidWcoXCJQb3B1cFdpbmRvdy5jYWxsYmFjayBzdWNjZXNzXCIpO1xuICAgICAgICAgICAgdGhpcy5fc3VjY2Vzcyh7IHVybDogdXJsIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgTG9nLmRlYnVnKFwiUG9wdXBXaW5kb3cuY2FsbGJhY2s6IEludmFsaWQgcmVzcG9uc2UgZnJvbSBwb3B1cFwiKTtcbiAgICAgICAgICAgIHRoaXMuX2Vycm9yKFwiSW52YWxpZCByZXNwb25zZSBmcm9tIHBvcHVwXCIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIG5vdGlmeU9wZW5lcih1cmwsIGtlZXBPcGVuLCBkZWxpbWl0ZXIpIHtcbiAgICAgICAgaWYgKHdpbmRvdy5vcGVuZXIpIHtcbiAgICAgICAgICAgIHVybCA9IHVybCB8fCB3aW5kb3cubG9jYXRpb24uaHJlZjtcbiAgICAgICAgICAgIGlmICh1cmwpIHtcbiAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IFVybFV0aWxpdHkucGFyc2VVcmxGcmFnbWVudCh1cmwsIGRlbGltaXRlcik7XG5cbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5zdGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbmFtZSA9IFwicG9wdXBDYWxsYmFja19cIiArIGRhdGEuc3RhdGU7XG4gICAgICAgICAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IHdpbmRvdy5vcGVuZXJbbmFtZV07XG4gICAgICAgICAgICAgICAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiUG9wdXBXaW5kb3cubm90aWZ5T3BlbmVyOiBwYXNzaW5nIHVybCBtZXNzYWdlIHRvIG9wZW5lclwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKHVybCwga2VlcE9wZW4pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgTG9nLndhcm4oXCJQb3B1cFdpbmRvdy5ub3RpZnlPcGVuZXI6IG5vIG1hdGNoaW5nIGNhbGxiYWNrIGZvdW5kIG9uIG9wZW5lclwiKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgTG9nLndhcm4oXCJQb3B1cFdpbmRvdy5ub3RpZnlPcGVuZXI6IG5vIHN0YXRlIGZvdW5kIGluIHJlc3BvbnNlIHVybFwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBMb2cud2FybihcIlBvcHVwV2luZG93Lm5vdGlmeU9wZW5lcjogbm8gd2luZG93Lm9wZW5lci4gQ2FuJ3QgY29tcGxldGUgbm90aWZpY2F0aW9uLlwiKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXG5cbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcblxuZXhwb3J0IGNsYXNzIFJlZGlyZWN0TmF2aWdhdG9yIHtcblxuICAgIHByZXBhcmUoKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcyk7XG4gICAgfVxuXG4gICAgbmF2aWdhdGUocGFyYW1zKSB7XG4gICAgICAgIGlmICghcGFyYW1zIHx8ICFwYXJhbXMudXJsKSB7XG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJSZWRpcmVjdE5hdmlnYXRvci5uYXZpZ2F0ZTogTm8gdXJsIHByb3ZpZGVkXCIpO1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIk5vIHVybCBwcm92aWRlZFwiKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGFyYW1zLnVzZVJlcGxhY2VUb05hdmlnYXRlKSB7XG4gICAgICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVwbGFjZShwYXJhbXMudXJsKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbiA9IHBhcmFtcy51cmw7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgfVxuXG4gICAgZ2V0IHVybCgpIHtcbiAgICAgICAgcmV0dXJuIHdpbmRvdy5sb2NhdGlvbi5ocmVmO1xuICAgIH1cbn1cbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXG5cbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcbmltcG9ydCB7IE1ldGFkYXRhU2VydmljZSB9IGZyb20gJy4vTWV0YWRhdGFTZXJ2aWNlLmpzJztcbmltcG9ydCB7IFVzZXJJbmZvU2VydmljZSB9IGZyb20gJy4vVXNlckluZm9TZXJ2aWNlLmpzJztcbmltcG9ydCB7IFRva2VuQ2xpZW50IH0gZnJvbSAnLi9Ub2tlbkNsaWVudC5qcyc7XG5pbXBvcnQgeyBFcnJvclJlc3BvbnNlIH0gZnJvbSAnLi9FcnJvclJlc3BvbnNlLmpzJztcbmltcG9ydCB7IEpvc2VVdGlsIH0gZnJvbSAnLi9Kb3NlVXRpbC5qcyc7XG5cbmNvbnN0IFByb3RvY29sQ2xhaW1zID0gW1wibm9uY2VcIiwgXCJhdF9oYXNoXCIsIFwiaWF0XCIsIFwibmJmXCIsIFwiZXhwXCIsIFwiYXVkXCIsIFwiaXNzXCIsIFwiY19oYXNoXCJdO1xuXG5leHBvcnQgY2xhc3MgUmVzcG9uc2VWYWxpZGF0b3Ige1xuXG4gICAgY29uc3RydWN0b3Ioc2V0dGluZ3MsIFxuICAgICAgICBNZXRhZGF0YVNlcnZpY2VDdG9yID0gTWV0YWRhdGFTZXJ2aWNlLFxuICAgICAgICBVc2VySW5mb1NlcnZpY2VDdG9yID0gVXNlckluZm9TZXJ2aWNlLCBcbiAgICAgICAgam9zZVV0aWwgPSBKb3NlVXRpbCxcbiAgICAgICAgVG9rZW5DbGllbnRDdG9yID0gVG9rZW5DbGllbnQpIHtcbiAgICAgICAgaWYgKCFzZXR0aW5ncykge1xuICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuY3RvcjogTm8gc2V0dGluZ3MgcGFzc2VkIHRvIFJlc3BvbnNlVmFsaWRhdG9yXCIpO1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwic2V0dGluZ3NcIik7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9zZXR0aW5ncyA9IHNldHRpbmdzO1xuICAgICAgICB0aGlzLl9tZXRhZGF0YVNlcnZpY2UgPSBuZXcgTWV0YWRhdGFTZXJ2aWNlQ3Rvcih0aGlzLl9zZXR0aW5ncyk7XG4gICAgICAgIHRoaXMuX3VzZXJJbmZvU2VydmljZSA9IG5ldyBVc2VySW5mb1NlcnZpY2VDdG9yKHRoaXMuX3NldHRpbmdzKTtcbiAgICAgICAgdGhpcy5fam9zZVV0aWwgPSBqb3NlVXRpbDtcbiAgICAgICAgdGhpcy5fdG9rZW5DbGllbnQgPSBuZXcgVG9rZW5DbGllbnRDdG9yKHRoaXMuX3NldHRpbmdzKTtcbiAgICB9XG5cbiAgICB2YWxpZGF0ZVNpZ25pblJlc3BvbnNlKHN0YXRlLCByZXNwb25zZSkge1xuICAgICAgICBMb2cuZGVidWcoXCJSZXNwb25zZVZhbGlkYXRvci52YWxpZGF0ZVNpZ25pblJlc3BvbnNlXCIpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLl9wcm9jZXNzU2lnbmluUGFyYW1zKHN0YXRlLCByZXNwb25zZSkudGhlbihyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICBMb2cuZGVidWcoXCJSZXNwb25zZVZhbGlkYXRvci52YWxpZGF0ZVNpZ25pblJlc3BvbnNlOiBzdGF0ZSBwcm9jZXNzZWRcIik7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdmFsaWRhdGVUb2tlbnMoc3RhdGUsIHJlc3BvbnNlKS50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJSZXNwb25zZVZhbGlkYXRvci52YWxpZGF0ZVNpZ25pblJlc3BvbnNlOiB0b2tlbnMgdmFsaWRhdGVkXCIpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9wcm9jZXNzQ2xhaW1zKHN0YXRlLCByZXNwb25zZSkudGhlbihyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLnZhbGlkYXRlU2lnbmluUmVzcG9uc2U6IGNsYWltcyBwcm9jZXNzZWRcIik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICB2YWxpZGF0ZVNpZ25vdXRSZXNwb25zZShzdGF0ZSwgcmVzcG9uc2UpIHtcbiAgICAgICAgaWYgKHN0YXRlLmlkICE9PSByZXNwb25zZS5zdGF0ZSkge1xuICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IudmFsaWRhdGVTaWdub3V0UmVzcG9uc2U6IFN0YXRlIGRvZXMgbm90IG1hdGNoXCIpO1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIlN0YXRlIGRvZXMgbm90IG1hdGNoXCIpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIG5vdyB0aGF0IHdlIGtub3cgdGhlIHN0YXRlIG1hdGNoZXMsIHRha2UgdGhlIHN0b3JlZCBkYXRhXG4gICAgICAgIC8vIGFuZCBzZXQgaXQgaW50byB0aGUgcmVzcG9uc2Ugc28gY2FsbGVycyBjYW4gZ2V0IHRoZWlyIHN0YXRlXG4gICAgICAgIC8vIHRoaXMgaXMgaW1wb3J0YW50IGZvciBib3RoIHN1Y2Nlc3MgJiBlcnJvciBvdXRjb21lc1xuICAgICAgICBMb2cuZGVidWcoXCJSZXNwb25zZVZhbGlkYXRvci52YWxpZGF0ZVNpZ25vdXRSZXNwb25zZTogc3RhdGUgdmFsaWRhdGVkXCIpO1xuICAgICAgICByZXNwb25zZS5zdGF0ZSA9IHN0YXRlLmRhdGE7XG5cbiAgICAgICAgaWYgKHJlc3BvbnNlLmVycm9yKSB7XG4gICAgICAgICAgICBMb2cud2FybihcIlJlc3BvbnNlVmFsaWRhdG9yLnZhbGlkYXRlU2lnbm91dFJlc3BvbnNlOiBSZXNwb25zZSB3YXMgZXJyb3JcIiwgcmVzcG9uc2UuZXJyb3IpO1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvclJlc3BvbnNlKHJlc3BvbnNlKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlc3BvbnNlKTtcbiAgICB9XG5cbiAgICBfcHJvY2Vzc1NpZ25pblBhcmFtcyhzdGF0ZSwgcmVzcG9uc2UpIHtcbiAgICAgICAgaWYgKHN0YXRlLmlkICE9PSByZXNwb25zZS5zdGF0ZSkge1xuICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3Byb2Nlc3NTaWduaW5QYXJhbXM6IFN0YXRlIGRvZXMgbm90IG1hdGNoXCIpO1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIlN0YXRlIGRvZXMgbm90IG1hdGNoXCIpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghc3RhdGUuY2xpZW50X2lkKSB7XG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5fcHJvY2Vzc1NpZ25pblBhcmFtczogTm8gY2xpZW50X2lkIG9uIHN0YXRlXCIpO1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIk5vIGNsaWVudF9pZCBvbiBzdGF0ZVwiKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXN0YXRlLmF1dGhvcml0eSkge1xuICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3Byb2Nlc3NTaWduaW5QYXJhbXM6IE5vIGF1dGhvcml0eSBvbiBzdGF0ZVwiKTtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJObyBhdXRob3JpdHkgb24gc3RhdGVcIikpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gdGhpcyBhbGxvd3MgdGhlIGF1dGhvcml0eSB0byBiZSBsb2FkZWQgZnJvbSB0aGUgc2lnbmluIHN0YXRlXG4gICAgICAgIGlmICghdGhpcy5fc2V0dGluZ3MuYXV0aG9yaXR5KSB7XG4gICAgICAgICAgICB0aGlzLl9zZXR0aW5ncy5hdXRob3JpdHkgPSBzdGF0ZS5hdXRob3JpdHk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZW5zdXJlIHdlJ3JlIHVzaW5nIHRoZSBjb3JyZWN0IGF1dGhvcml0eSBpZiB0aGUgYXV0aG9yaXR5IGlzIG5vdCBsb2FkZWQgZnJvbSBzaWduaW4gc3RhdGVcbiAgICAgICAgZWxzZSBpZiAodGhpcy5fc2V0dGluZ3MuYXV0aG9yaXR5ICYmIHRoaXMuX3NldHRpbmdzLmF1dGhvcml0eSAhPT0gc3RhdGUuYXV0aG9yaXR5KSB7XG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5fcHJvY2Vzc1NpZ25pblBhcmFtczogYXV0aG9yaXR5IG1pc21hdGNoIG9uIHNldHRpbmdzIHZzLiBzaWduaW4gc3RhdGVcIik7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiYXV0aG9yaXR5IG1pc21hdGNoIG9uIHNldHRpbmdzIHZzLiBzaWduaW4gc3RhdGVcIikpO1xuICAgICAgICB9XG4gICAgICAgIC8vIHRoaXMgYWxsb3dzIHRoZSBjbGllbnRfaWQgdG8gYmUgbG9hZGVkIGZyb20gdGhlIHNpZ25pbiBzdGF0ZVxuICAgICAgICBpZiAoIXRoaXMuX3NldHRpbmdzLmNsaWVudF9pZCkge1xuICAgICAgICAgICAgdGhpcy5fc2V0dGluZ3MuY2xpZW50X2lkID0gc3RhdGUuY2xpZW50X2lkO1xuICAgICAgICB9XG4gICAgICAgIC8vIGVuc3VyZSB3ZSdyZSB1c2luZyB0aGUgY29ycmVjdCBjbGllbnRfaWQgaWYgdGhlIGNsaWVudF9pZCBpcyBub3QgbG9hZGVkIGZyb20gc2lnbmluIHN0YXRlXG4gICAgICAgIGVsc2UgaWYgKHRoaXMuX3NldHRpbmdzLmNsaWVudF9pZCAmJiB0aGlzLl9zZXR0aW5ncy5jbGllbnRfaWQgIT09IHN0YXRlLmNsaWVudF9pZCkge1xuICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3Byb2Nlc3NTaWduaW5QYXJhbXM6IGNsaWVudF9pZCBtaXNtYXRjaCBvbiBzZXR0aW5ncyB2cy4gc2lnbmluIHN0YXRlXCIpO1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcImNsaWVudF9pZCBtaXNtYXRjaCBvbiBzZXR0aW5ncyB2cy4gc2lnbmluIHN0YXRlXCIpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIG5vdyB0aGF0IHdlIGtub3cgdGhlIHN0YXRlIG1hdGNoZXMsIHRha2UgdGhlIHN0b3JlZCBkYXRhXG4gICAgICAgIC8vIGFuZCBzZXQgaXQgaW50byB0aGUgcmVzcG9uc2Ugc28gY2FsbGVycyBjYW4gZ2V0IHRoZWlyIHN0YXRlXG4gICAgICAgIC8vIHRoaXMgaXMgaW1wb3J0YW50IGZvciBib3RoIHN1Y2Nlc3MgJiBlcnJvciBvdXRjb21lc1xuICAgICAgICBMb2cuZGVidWcoXCJSZXNwb25zZVZhbGlkYXRvci5fcHJvY2Vzc1NpZ25pblBhcmFtczogc3RhdGUgdmFsaWRhdGVkXCIpO1xuICAgICAgICByZXNwb25zZS5zdGF0ZSA9IHN0YXRlLmRhdGE7XG5cbiAgICAgICAgaWYgKHJlc3BvbnNlLmVycm9yKSB7XG4gICAgICAgICAgICBMb2cud2FybihcIlJlc3BvbnNlVmFsaWRhdG9yLl9wcm9jZXNzU2lnbmluUGFyYW1zOiBSZXNwb25zZSB3YXMgZXJyb3JcIiwgcmVzcG9uc2UuZXJyb3IpO1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvclJlc3BvbnNlKHJlc3BvbnNlKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3RhdGUubm9uY2UgJiYgIXJlc3BvbnNlLmlkX3Rva2VuKSB7XG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5fcHJvY2Vzc1NpZ25pblBhcmFtczogRXhwZWN0aW5nIGlkX3Rva2VuIGluIHJlc3BvbnNlXCIpO1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIk5vIGlkX3Rva2VuIGluIHJlc3BvbnNlXCIpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghc3RhdGUubm9uY2UgJiYgcmVzcG9uc2UuaWRfdG9rZW4pIHtcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLl9wcm9jZXNzU2lnbmluUGFyYW1zOiBOb3QgZXhwZWN0aW5nIGlkX3Rva2VuIGluIHJlc3BvbnNlXCIpO1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIlVuZXhwZWN0ZWQgaWRfdG9rZW4gaW4gcmVzcG9uc2VcIikpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0YXRlLmNvZGVfdmVyaWZpZXIgJiYgIXJlc3BvbnNlLmNvZGUpIHtcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLl9wcm9jZXNzU2lnbmluUGFyYW1zOiBFeHBlY3RpbmcgY29kZSBpbiByZXNwb25zZVwiKTtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJObyBjb2RlIGluIHJlc3BvbnNlXCIpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghc3RhdGUuY29kZV92ZXJpZmllciAmJiByZXNwb25zZS5jb2RlKSB7XG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5fcHJvY2Vzc1NpZ25pblBhcmFtczogTm90IGV4cGVjdGluZyBjb2RlIGluIHJlc3BvbnNlXCIpO1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIlVuZXhwZWN0ZWQgY29kZSBpbiByZXNwb25zZVwiKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXJlc3BvbnNlLnNjb3BlKSB7XG4gICAgICAgICAgICAvLyBpZiB0aGVyZSdzIG5vIHNjb3BlIG9uIHRoZSByZXNwb25zZSwgdGhlbiBhc3N1bWUgYWxsIHNjb3BlcyBncmFudGVkIChwZXItc3BlYykgYW5kIGNvcHkgb3ZlciBzY29wZXMgZnJvbSBvcmlnaW5hbCByZXF1ZXN0XG4gICAgICAgICAgICByZXNwb25zZS5zY29wZSA9IHN0YXRlLnNjb3BlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShyZXNwb25zZSk7XG4gICAgfVxuXG4gICAgX3Byb2Nlc3NDbGFpbXMoc3RhdGUsIHJlc3BvbnNlKSB7XG4gICAgICAgIGlmIChyZXNwb25zZS5pc09wZW5JZENvbm5lY3QpIHtcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLl9wcm9jZXNzQ2xhaW1zOiByZXNwb25zZSBpcyBPSURDLCBwcm9jZXNzaW5nIGNsYWltc1wiKTtcblxuICAgICAgICAgICAgcmVzcG9uc2UucHJvZmlsZSA9IHRoaXMuX2ZpbHRlclByb3RvY29sQ2xhaW1zKHJlc3BvbnNlLnByb2ZpbGUpO1xuXG4gICAgICAgICAgICBpZiAoc3RhdGUuc2tpcFVzZXJJbmZvICE9PSB0cnVlICYmIHRoaXMuX3NldHRpbmdzLmxvYWRVc2VySW5mbyAmJiByZXNwb25zZS5hY2Nlc3NfdG9rZW4pIHtcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJSZXNwb25zZVZhbGlkYXRvci5fcHJvY2Vzc0NsYWltczogbG9hZGluZyB1c2VyIGluZm9cIik7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fdXNlckluZm9TZXJ2aWNlLmdldENsYWltcyhyZXNwb25zZS5hY2Nlc3NfdG9rZW4pLnRoZW4oY2xhaW1zID0+IHtcbiAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3Byb2Nlc3NDbGFpbXM6IHVzZXIgaW5mbyBjbGFpbXMgcmVjZWl2ZWQgZnJvbSB1c2VyIGluZm8gZW5kcG9pbnRcIik7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGNsYWltcy5zdWIgIT09IHJlc3BvbnNlLnByb2ZpbGUuc3ViKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5fcHJvY2Vzc0NsYWltczogc3ViIGZyb20gdXNlciBpbmZvIGVuZHBvaW50IGRvZXMgbm90IG1hdGNoIHN1YiBpbiBhY2Nlc3NfdG9rZW5cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwic3ViIGZyb20gdXNlciBpbmZvIGVuZHBvaW50IGRvZXMgbm90IG1hdGNoIHN1YiBpbiBhY2Nlc3NfdG9rZW5cIikpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UucHJvZmlsZSA9IHRoaXMuX21lcmdlQ2xhaW1zKHJlc3BvbnNlLnByb2ZpbGUsIGNsYWltcyk7XG4gICAgICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLl9wcm9jZXNzQ2xhaW1zOiB1c2VyIGluZm8gY2xhaW1zIHJlY2VpdmVkLCB1cGRhdGVkIHByb2ZpbGU6XCIsIHJlc3BvbnNlLnByb2ZpbGUpO1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLl9wcm9jZXNzQ2xhaW1zOiBub3QgbG9hZGluZyB1c2VyIGluZm9cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBMb2cuZGVidWcoXCJSZXNwb25zZVZhbGlkYXRvci5fcHJvY2Vzc0NsYWltczogcmVzcG9uc2UgaXMgbm90IE9JREMsIG5vdCBwcm9jZXNzaW5nIGNsYWltc1wiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocmVzcG9uc2UpO1xuICAgIH1cblxuICAgIF9tZXJnZUNsYWltcyhjbGFpbXMxLCBjbGFpbXMyKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBPYmplY3QuYXNzaWduKHt9LCBjbGFpbXMxKTtcblxuICAgICAgICBmb3IgKGxldCBuYW1lIGluIGNsYWltczIpIHtcbiAgICAgICAgICAgIHZhciB2YWx1ZXMgPSBjbGFpbXMyW25hbWVdO1xuICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbHVlcykpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZXMgPSBbdmFsdWVzXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSB2YWx1ZXNbaV07XG4gICAgICAgICAgICAgICAgaWYgKCFyZXN1bHRbbmFtZV0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0W25hbWVdID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkocmVzdWx0W25hbWVdKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0W25hbWVdLmluZGV4T2YodmFsdWUpIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0W25hbWVdLnB1c2godmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJlc3VsdFtuYW1lXSAhPT0gdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFtuYW1lXSA9IHRoaXMuX21lcmdlQ2xhaW1zKHJlc3VsdFtuYW1lXSwgdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9IFxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFtuYW1lXSA9IFtyZXN1bHRbbmFtZV0sIHZhbHVlXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgX2ZpbHRlclByb3RvY29sQ2xhaW1zKGNsYWltcykge1xuICAgICAgICBMb2cuZGVidWcoXCJSZXNwb25zZVZhbGlkYXRvci5fZmlsdGVyUHJvdG9jb2xDbGFpbXMsIGluY29taW5nIGNsYWltczpcIiwgY2xhaW1zKTtcblxuICAgICAgICB2YXIgcmVzdWx0ID0gT2JqZWN0LmFzc2lnbih7fSwgY2xhaW1zKTtcblxuICAgICAgICBpZiAodGhpcy5fc2V0dGluZ3MuX2ZpbHRlclByb3RvY29sQ2xhaW1zKSB7XG4gICAgICAgICAgICBQcm90b2NvbENsYWltcy5mb3JFYWNoKHR5cGUgPT4ge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSByZXN1bHRbdHlwZV07XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX2ZpbHRlclByb3RvY29sQ2xhaW1zOiBwcm90b2NvbCBjbGFpbXMgZmlsdGVyZWRcIiwgcmVzdWx0KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLl9maWx0ZXJQcm90b2NvbENsYWltczogcHJvdG9jb2wgY2xhaW1zIG5vdCBmaWx0ZXJlZFwiKVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBfdmFsaWRhdGVUb2tlbnMoc3RhdGUsIHJlc3BvbnNlKSB7XG4gICAgICAgIGlmIChyZXNwb25zZS5jb2RlKSB7XG4gICAgICAgICAgICBMb2cuZGVidWcoXCJSZXNwb25zZVZhbGlkYXRvci5fdmFsaWRhdGVUb2tlbnM6IFZhbGlkYXRpbmcgY29kZVwiKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9wcm9jZXNzQ29kZShzdGF0ZSwgcmVzcG9uc2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJlc3BvbnNlLmlkX3Rva2VuKSB7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2UuYWNjZXNzX3Rva2VuKSB7XG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlVG9rZW5zOiBWYWxpZGF0aW5nIGlkX3Rva2VuIGFuZCBhY2Nlc3NfdG9rZW5cIik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbGlkYXRlSWRUb2tlbkFuZEFjY2Vzc1Rva2VuKHN0YXRlLCByZXNwb25zZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLl92YWxpZGF0ZVRva2VuczogVmFsaWRhdGluZyBpZF90b2tlblwiKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl92YWxpZGF0ZUlkVG9rZW4oc3RhdGUsIHJlc3BvbnNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLl92YWxpZGF0ZVRva2VuczogTm8gY29kZSB0byBwcm9jZXNzIG9yIGlkX3Rva2VuIHRvIHZhbGlkYXRlXCIpO1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlc3BvbnNlKTtcbiAgICB9XG5cbiAgICBfcHJvY2Vzc0NvZGUoc3RhdGUsIHJlc3BvbnNlKSB7XG4gICAgICAgIHZhciByZXF1ZXN0ID0ge1xuICAgICAgICAgICAgY2xpZW50X2lkOiBzdGF0ZS5jbGllbnRfaWQsXG4gICAgICAgICAgICBjbGllbnRfc2VjcmV0OiBzdGF0ZS5jbGllbnRfc2VjcmV0LFxuICAgICAgICAgICAgY29kZSA6IHJlc3BvbnNlLmNvZGUsXG4gICAgICAgICAgICByZWRpcmVjdF91cmk6IHN0YXRlLnJlZGlyZWN0X3VyaSxcbiAgICAgICAgICAgIGNvZGVfdmVyaWZpZXI6IHN0YXRlLmNvZGVfdmVyaWZpZXJcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoc3RhdGUuZXh0cmFUb2tlblBhcmFtcyAmJiB0eXBlb2Yoc3RhdGUuZXh0cmFUb2tlblBhcmFtcykgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKHJlcXVlc3QsIHN0YXRlLmV4dHJhVG9rZW5QYXJhbXMpO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICByZXR1cm4gdGhpcy5fdG9rZW5DbGllbnQuZXhjaGFuZ2VDb2RlKHJlcXVlc3QpLnRoZW4odG9rZW5SZXNwb25zZSA9PiB7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGZvcih2YXIga2V5IGluIHRva2VuUmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVtrZXldID0gdG9rZW5SZXNwb25zZVtrZXldO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocmVzcG9uc2UuaWRfdG9rZW4pIHtcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJSZXNwb25zZVZhbGlkYXRvci5fcHJvY2Vzc0NvZGU6IHRva2VuIHJlc3BvbnNlIHN1Y2Nlc3NmdWwsIHByb2Nlc3NpbmcgaWRfdG9rZW5cIik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbGlkYXRlSWRUb2tlbkF0dHJpYnV0ZXMoc3RhdGUsIHJlc3BvbnNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLl9wcm9jZXNzQ29kZTogdG9rZW4gcmVzcG9uc2Ugc3VjY2Vzc2Z1bCwgcmV0dXJuaW5nIHJlc3BvbnNlXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIF92YWxpZGF0ZUlkVG9rZW5BdHRyaWJ1dGVzKHN0YXRlLCByZXNwb25zZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWV0YWRhdGFTZXJ2aWNlLmdldElzc3VlcigpLnRoZW4oaXNzdWVyID0+IHtcblxuICAgICAgICAgICAgbGV0IGF1ZGllbmNlID0gc3RhdGUuY2xpZW50X2lkO1xuICAgICAgICAgICAgbGV0IGNsb2NrU2tld0luU2Vjb25kcyA9IHRoaXMuX3NldHRpbmdzLmNsb2NrU2tldztcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLl92YWxpZGF0ZUlkVG9rZW5BdHRyaWJ1dGVzOiBWYWxpZGFpbmcgSldUIGF0dHJpYnV0ZXM7IHVzaW5nIGNsb2NrIHNrZXcgKGluIHNlY29uZHMpIG9mOiBcIiwgY2xvY2tTa2V3SW5TZWNvbmRzKTtcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2pvc2VVdGlsLnZhbGlkYXRlSnd0QXR0cmlidXRlcyhyZXNwb25zZS5pZF90b2tlbiwgaXNzdWVyLCBhdWRpZW5jZSwgY2xvY2tTa2V3SW5TZWNvbmRzKS50aGVuKHBheWxvYWQgPT4ge1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgaWYgKHN0YXRlLm5vbmNlICYmIHN0YXRlLm5vbmNlICE9PSBwYXlsb2FkLm5vbmNlKSB7XG4gICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLl92YWxpZGF0ZUlkVG9rZW5BdHRyaWJ1dGVzOiBJbnZhbGlkIG5vbmNlIGluIGlkX3Rva2VuXCIpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiSW52YWxpZCBub25jZSBpbiBpZF90b2tlblwiKSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKCFwYXlsb2FkLnN1Yikge1xuICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5fdmFsaWRhdGVJZFRva2VuQXR0cmlidXRlczogTm8gc3ViIHByZXNlbnQgaW4gaWRfdG9rZW5cIik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJObyBzdWIgcHJlc2VudCBpbiBpZF90b2tlblwiKSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmVzcG9uc2UucHJvZmlsZSA9IHBheWxvYWQ7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIF92YWxpZGF0ZUlkVG9rZW5BbmRBY2Nlc3NUb2tlbihzdGF0ZSwgcmVzcG9uc2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbGlkYXRlSWRUb2tlbihzdGF0ZSwgcmVzcG9uc2UpLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbGlkYXRlQWNjZXNzVG9rZW4ocmVzcG9uc2UpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBfdmFsaWRhdGVJZFRva2VuKHN0YXRlLCByZXNwb25zZSkge1xuICAgICAgICBpZiAoIXN0YXRlLm5vbmNlKSB7XG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5fdmFsaWRhdGVJZFRva2VuOiBObyBub25jZSBvbiBzdGF0ZVwiKTtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJObyBub25jZSBvbiBzdGF0ZVwiKSk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgand0ID0gdGhpcy5fam9zZVV0aWwucGFyc2VKd3QocmVzcG9uc2UuaWRfdG9rZW4pO1xuICAgICAgICBpZiAoIWp3dCB8fCAhand0LmhlYWRlciB8fCAhand0LnBheWxvYWQpIHtcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLl92YWxpZGF0ZUlkVG9rZW46IEZhaWxlZCB0byBwYXJzZSBpZF90b2tlblwiLCBqd3QpO1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIkZhaWxlZCB0byBwYXJzZSBpZF90b2tlblwiKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3RhdGUubm9uY2UgIT09IGp3dC5wYXlsb2FkLm5vbmNlKSB7XG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5fdmFsaWRhdGVJZFRva2VuOiBJbnZhbGlkIG5vbmNlIGluIGlkX3Rva2VuXCIpO1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIkludmFsaWQgbm9uY2UgaW4gaWRfdG9rZW5cIikpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGtpZCA9IGp3dC5oZWFkZXIua2lkO1xuXG4gICAgICAgIHJldHVybiB0aGlzLl9tZXRhZGF0YVNlcnZpY2UuZ2V0SXNzdWVyKCkudGhlbihpc3N1ZXIgPT4ge1xuICAgICAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlSWRUb2tlbjogUmVjZWl2ZWQgaXNzdWVyXCIpO1xuXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbWV0YWRhdGFTZXJ2aWNlLmdldFNpZ25pbmdLZXlzKCkudGhlbihrZXlzID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIWtleXMpIHtcbiAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlSWRUb2tlbjogTm8gc2lnbmluZyBrZXlzIGZyb20gbWV0YWRhdGFcIik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJObyBzaWduaW5nIGtleXMgZnJvbSBtZXRhZGF0YVwiKSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlSWRUb2tlbjogUmVjZWl2ZWQgc2lnbmluZyBrZXlzXCIpO1xuICAgICAgICAgICAgICAgIGxldCBrZXk7XG4gICAgICAgICAgICAgICAgaWYgKCFraWQpIHtcbiAgICAgICAgICAgICAgICAgICAga2V5cyA9IHRoaXMuX2ZpbHRlckJ5QWxnKGtleXMsIGp3dC5oZWFkZXIuYWxnKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5cy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5fdmFsaWRhdGVJZFRva2VuOiBObyBraWQgZm91bmQgaW4gaWRfdG9rZW4gYW5kIG1vcmUgdGhhbiBvbmUga2V5IGZvdW5kIGluIG1ldGFkYXRhXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIk5vIGtpZCBmb3VuZCBpbiBpZF90b2tlbiBhbmQgbW9yZSB0aGFuIG9uZSBrZXkgZm91bmQgaW4gbWV0YWRhdGFcIikpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8ga2lkIGlzIG1hbmRhdG9yeSBvbmx5IHdoZW4gdGhlcmUgYXJlIG11bHRpcGxlIGtleXMgaW4gdGhlIHJlZmVyZW5jZWQgSldLIFNldCBkb2N1bWVudFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2VlIGh0dHA6Ly9vcGVuaWQubmV0L3NwZWNzL29wZW5pZC1jb25uZWN0LWNvcmUtMV8wLmh0bWwjU2lnbmluZ1xuICAgICAgICAgICAgICAgICAgICAgICAga2V5ID0ga2V5c1swXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAga2V5ID0ga2V5cy5maWx0ZXIoa2V5ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBrZXkua2lkID09PSBraWQ7XG4gICAgICAgICAgICAgICAgICAgIH0pWzBdO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICgha2V5KSB7XG4gICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLl92YWxpZGF0ZUlkVG9rZW46IE5vIGtleSBtYXRjaGluZyBraWQgb3IgYWxnIGZvdW5kIGluIHNpZ25pbmcga2V5c1wiKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIk5vIGtleSBtYXRjaGluZyBraWQgb3IgYWxnIGZvdW5kIGluIHNpZ25pbmcga2V5c1wiKSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgbGV0IGF1ZGllbmNlID0gc3RhdGUuY2xpZW50X2lkO1xuXG4gICAgICAgICAgICAgICAgbGV0IGNsb2NrU2tld0luU2Vjb25kcyA9IHRoaXMuX3NldHRpbmdzLmNsb2NrU2tldztcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJSZXNwb25zZVZhbGlkYXRvci5fdmFsaWRhdGVJZFRva2VuOiBWYWxpZGFpbmcgSldUOyB1c2luZyBjbG9jayBza2V3IChpbiBzZWNvbmRzKSBvZjogXCIsIGNsb2NrU2tld0luU2Vjb25kcyk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fam9zZVV0aWwudmFsaWRhdGVKd3QocmVzcG9uc2UuaWRfdG9rZW4sIGtleSwgaXNzdWVyLCBhdWRpZW5jZSwgY2xvY2tTa2V3SW5TZWNvbmRzKS50aGVuKCgpPT57XG4gICAgICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLl92YWxpZGF0ZUlkVG9rZW46IEpXVCB2YWxpZGF0aW9uIHN1Y2Nlc3NmdWxcIik7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKCFqd3QucGF5bG9hZC5zdWIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLl92YWxpZGF0ZUlkVG9rZW46IE5vIHN1YiBwcmVzZW50IGluIGlkX3Rva2VuXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIk5vIHN1YiBwcmVzZW50IGluIGlkX3Rva2VuXCIpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLnByb2ZpbGUgPSBqd3QucGF5bG9hZDtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgX2ZpbHRlckJ5QWxnKGtleXMsIGFsZyl7XG4gICAgICAgIHZhciBrdHkgPSBudWxsO1xuICAgICAgICBpZiAoYWxnLnN0YXJ0c1dpdGgoXCJSU1wiKSkge1xuICAgICAgICAgICAga3R5ID0gXCJSU0FcIjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChhbGcuc3RhcnRzV2l0aChcIlBTXCIpKSB7XG4gICAgICAgICAgICBrdHkgPSBcIlBTXCI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoYWxnLnN0YXJ0c1dpdGgoXCJFU1wiKSkge1xuICAgICAgICAgICAga3R5ID0gXCJFQ1wiO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX2ZpbHRlckJ5QWxnOiBhbGcgbm90IHN1cHBvcnRlZDogXCIsIGFsZyk7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cblxuICAgICAgICBMb2cuZGVidWcoXCJSZXNwb25zZVZhbGlkYXRvci5fZmlsdGVyQnlBbGc6IExvb2tpbmcgZm9yIGtleXMgdGhhdCBtYXRjaCBrdHk6IFwiLCBrdHkpO1xuXG4gICAgICAgIGtleXMgPSBrZXlzLmZpbHRlcihrZXkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGtleS5rdHkgPT09IGt0eTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX2ZpbHRlckJ5QWxnOiBOdW1iZXIgb2Yga2V5cyB0aGF0IG1hdGNoIGt0eTogXCIsIGt0eSwga2V5cy5sZW5ndGgpO1xuXG4gICAgICAgIHJldHVybiBrZXlzO1xuICAgIH1cblxuICAgIF92YWxpZGF0ZUFjY2Vzc1Rva2VuKHJlc3BvbnNlKSB7XG4gICAgICAgIGlmICghcmVzcG9uc2UucHJvZmlsZSkge1xuICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlQWNjZXNzVG9rZW46IE5vIHByb2ZpbGUgbG9hZGVkIGZyb20gaWRfdG9rZW5cIik7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiTm8gcHJvZmlsZSBsb2FkZWQgZnJvbSBpZF90b2tlblwiKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXJlc3BvbnNlLnByb2ZpbGUuYXRfaGFzaCkge1xuICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlQWNjZXNzVG9rZW46IE5vIGF0X2hhc2ggaW4gaWRfdG9rZW5cIik7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiTm8gYXRfaGFzaCBpbiBpZF90b2tlblwiKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXJlc3BvbnNlLmlkX3Rva2VuKSB7XG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5fdmFsaWRhdGVBY2Nlc3NUb2tlbjogTm8gaWRfdG9rZW5cIik7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiTm8gaWRfdG9rZW5cIikpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGp3dCA9IHRoaXMuX2pvc2VVdGlsLnBhcnNlSnd0KHJlc3BvbnNlLmlkX3Rva2VuKTtcbiAgICAgICAgaWYgKCFqd3QgfHwgIWp3dC5oZWFkZXIpIHtcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLl92YWxpZGF0ZUFjY2Vzc1Rva2VuOiBGYWlsZWQgdG8gcGFyc2UgaWRfdG9rZW5cIiwgand0KTtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJGYWlsZWQgdG8gcGFyc2UgaWRfdG9rZW5cIikpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGhhc2hBbGcgPSBqd3QuaGVhZGVyLmFsZztcbiAgICAgICAgaWYgKCFoYXNoQWxnIHx8IGhhc2hBbGcubGVuZ3RoICE9PSA1KSB7XG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5fdmFsaWRhdGVBY2Nlc3NUb2tlbjogVW5zdXBwb3J0ZWQgYWxnOlwiLCBoYXNoQWxnKTtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJVbnN1cHBvcnRlZCBhbGc6IFwiICsgaGFzaEFsZykpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGhhc2hCaXRzID0gaGFzaEFsZy5zdWJzdHIoMiwgMyk7XG4gICAgICAgIGlmICghaGFzaEJpdHMpIHtcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLl92YWxpZGF0ZUFjY2Vzc1Rva2VuOiBVbnN1cHBvcnRlZCBhbGc6XCIsIGhhc2hBbGcsIGhhc2hCaXRzKTtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJVbnN1cHBvcnRlZCBhbGc6IFwiICsgaGFzaEFsZykpO1xuICAgICAgICB9XG5cbiAgICAgICAgaGFzaEJpdHMgPSBwYXJzZUludChoYXNoQml0cyk7XG4gICAgICAgIGlmIChoYXNoQml0cyAhPT0gMjU2ICYmIGhhc2hCaXRzICE9PSAzODQgJiYgaGFzaEJpdHMgIT09IDUxMikge1xuICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlQWNjZXNzVG9rZW46IFVuc3VwcG9ydGVkIGFsZzpcIiwgaGFzaEFsZywgaGFzaEJpdHMpO1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIlVuc3VwcG9ydGVkIGFsZzogXCIgKyBoYXNoQWxnKSk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgc2hhID0gXCJzaGFcIiArIGhhc2hCaXRzO1xuICAgICAgICB2YXIgaGFzaCA9IHRoaXMuX2pvc2VVdGlsLmhhc2hTdHJpbmcocmVzcG9uc2UuYWNjZXNzX3Rva2VuLCBzaGEpO1xuICAgICAgICBpZiAoIWhhc2gpIHtcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLl92YWxpZGF0ZUFjY2Vzc1Rva2VuOiBhY2Nlc3NfdG9rZW4gaGFzaCBmYWlsZWQ6XCIsIHNoYSk7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiRmFpbGVkIHRvIHZhbGlkYXRlIGF0X2hhc2hcIikpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGxlZnQgPSBoYXNoLnN1YnN0cigwLCBoYXNoLmxlbmd0aCAvIDIpO1xuICAgICAgICB2YXIgbGVmdF9iNjR1ID0gdGhpcy5fam9zZVV0aWwuaGV4VG9CYXNlNjRVcmwobGVmdCk7XG4gICAgICAgIGlmIChsZWZ0X2I2NHUgIT09IHJlc3BvbnNlLnByb2ZpbGUuYXRfaGFzaCkge1xuICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlQWNjZXNzVG9rZW46IEZhaWxlZCB0byB2YWxpZGF0ZSBhdF9oYXNoXCIsIGxlZnRfYjY0dSwgcmVzcG9uc2UucHJvZmlsZS5hdF9oYXNoKTtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJGYWlsZWQgdG8gdmFsaWRhdGUgYXRfaGFzaFwiKSk7XG4gICAgICAgIH1cblxuICAgICAgICBMb2cuZGVidWcoXCJSZXNwb25zZVZhbGlkYXRvci5fdmFsaWRhdGVBY2Nlc3NUb2tlbjogc3VjY2Vzc1wiKTtcblxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlc3BvbnNlKTtcbiAgICB9XG59XG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxuXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XG5pbXBvcnQgeyBDaGVja1Nlc3Npb25JRnJhbWUgfSBmcm9tICcuL0NoZWNrU2Vzc2lvbklGcmFtZS5qcyc7XG5cbmV4cG9ydCBjbGFzcyBTZXNzaW9uTW9uaXRvciB7XG5cbiAgICBjb25zdHJ1Y3Rvcih1c2VyTWFuYWdlciwgQ2hlY2tTZXNzaW9uSUZyYW1lQ3RvciA9IENoZWNrU2Vzc2lvbklGcmFtZSkge1xuICAgICAgICBpZiAoIXVzZXJNYW5hZ2VyKSB7XG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJTZXNzaW9uTW9uaXRvci5jdG9yOiBObyB1c2VyIG1hbmFnZXIgcGFzc2VkIHRvIFNlc3Npb25Nb25pdG9yXCIpO1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidXNlck1hbmFnZXJcIik7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl91c2VyTWFuYWdlciA9IHVzZXJNYW5hZ2VyO1xuICAgICAgICB0aGlzLl9DaGVja1Nlc3Npb25JRnJhbWVDdG9yID0gQ2hlY2tTZXNzaW9uSUZyYW1lQ3RvcjtcblxuICAgICAgICB0aGlzLl91c2VyTWFuYWdlci5ldmVudHMuYWRkVXNlckxvYWRlZCh0aGlzLl9zdGFydC5iaW5kKHRoaXMpKTtcbiAgICAgICAgdGhpcy5fdXNlck1hbmFnZXIuZXZlbnRzLmFkZFVzZXJVbmxvYWRlZCh0aGlzLl9zdG9wLmJpbmQodGhpcykpO1xuXG4gICAgICAgIHRoaXMuX3VzZXJNYW5hZ2VyLmdldFVzZXIoKS50aGVuKHVzZXIgPT4ge1xuICAgICAgICAgICAgLy8gZG9pbmcgdGhpcyBtYW51YWxseSBoZXJlIHNpbmNlIGNhbGxpbmcgZ2V0VXNlciBcbiAgICAgICAgICAgIC8vIGRvZXNuJ3QgdHJpZ2dlciBsb2FkIGV2ZW50LlxuICAgICAgICAgICAgaWYgKHVzZXIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGFydCh1c2VyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuX3NldHRpbmdzLm1vbml0b3JBbm9ueW1vdXNTZXNzaW9uKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdXNlck1hbmFnZXIucXVlcnlTZXNzaW9uU3RhdHVzKCkudGhlbihzZXNzaW9uID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHRtcFVzZXIgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uX3N0YXRlIDogc2Vzc2lvbi5zZXNzaW9uX3N0YXRlXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIGlmIChzZXNzaW9uLnN1YiAmJiBzZXNzaW9uLnNpZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdG1wVXNlci5wcm9maWxlID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Yjogc2Vzc2lvbi5zdWIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lkOiBzZXNzaW9uLnNpZFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9zdGFydCh0bXBVc2VyKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5jYXRjaChlcnIgPT4ge1xuICAgICAgICAgICAgICAgICAgICAvLyBjYXRjaCB0byBzdXBwcmVzcyBlcnJvcnMgc2luY2Ugd2UncmUgaW4gYSBjdG9yXG4gICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIlNlc3Npb25Nb25pdG9yIGN0b3I6IGVycm9yIGZyb20gcXVlcnlTZXNzaW9uU3RhdHVzOlwiLCBlcnIubWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pLmNhdGNoKGVyciA9PiB7XG4gICAgICAgICAgICAvLyBjYXRjaCB0byBzdXBwcmVzcyBlcnJvcnMgc2luY2Ugd2UncmUgaW4gYSBjdG9yXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJTZXNzaW9uTW9uaXRvciBjdG9yOiBlcnJvciBmcm9tIGdldFVzZXI6XCIsIGVyci5tZXNzYWdlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZ2V0IF9zZXR0aW5ncygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3VzZXJNYW5hZ2VyLnNldHRpbmdzO1xuICAgIH1cbiAgICBnZXQgX21ldGFkYXRhU2VydmljZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3VzZXJNYW5hZ2VyLm1ldGFkYXRhU2VydmljZTtcbiAgICB9XG4gICAgZ2V0IF9jbGllbnRfaWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zZXR0aW5ncy5jbGllbnRfaWQ7XG4gICAgfVxuICAgIGdldCBfY2hlY2tTZXNzaW9uSW50ZXJ2YWwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zZXR0aW5ncy5jaGVja1Nlc3Npb25JbnRlcnZhbDtcbiAgICB9XG4gICAgZ2V0IF9zdG9wQ2hlY2tTZXNzaW9uT25FcnJvcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NldHRpbmdzLnN0b3BDaGVja1Nlc3Npb25PbkVycm9yO1xuICAgIH1cblxuICAgIF9zdGFydCh1c2VyKSB7XG4gICAgICAgIGxldCBzZXNzaW9uX3N0YXRlID0gdXNlci5zZXNzaW9uX3N0YXRlO1xuXG4gICAgICAgIGlmIChzZXNzaW9uX3N0YXRlKSB7XG4gICAgICAgICAgICBpZiAodXNlci5wcm9maWxlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3ViID0gdXNlci5wcm9maWxlLnN1YjtcbiAgICAgICAgICAgICAgICB0aGlzLl9zaWQgPSB1c2VyLnByb2ZpbGUuc2lkO1xuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlNlc3Npb25Nb25pdG9yLl9zdGFydDogc2Vzc2lvbl9zdGF0ZTpcIiwgc2Vzc2lvbl9zdGF0ZSwgXCIsIHN1YjpcIiwgdGhpcy5fc3ViKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX3N1YiA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB0aGlzLl9zaWQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiU2Vzc2lvbk1vbml0b3IuX3N0YXJ0OiBzZXNzaW9uX3N0YXRlOlwiLCBzZXNzaW9uX3N0YXRlLCBcIiwgYW5vbnltb3VzIHVzZXJcIik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5fY2hlY2tTZXNzaW9uSUZyYW1lKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWV0YWRhdGFTZXJ2aWNlLmdldENoZWNrU2Vzc2lvbklmcmFtZSgpLnRoZW4odXJsID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHVybCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiU2Vzc2lvbk1vbml0b3IuX3N0YXJ0OiBJbml0aWFsaXppbmcgY2hlY2sgc2Vzc2lvbiBpZnJhbWVcIilcblxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNsaWVudF9pZCA9IHRoaXMuX2NsaWVudF9pZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpbnRlcnZhbCA9IHRoaXMuX2NoZWNrU2Vzc2lvbkludGVydmFsO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHN0b3BPbkVycm9yID0gdGhpcy5fc3RvcENoZWNrU2Vzc2lvbk9uRXJyb3I7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoZWNrU2Vzc2lvbklGcmFtZSA9IG5ldyB0aGlzLl9DaGVja1Nlc3Npb25JRnJhbWVDdG9yKHRoaXMuX2NhbGxiYWNrLmJpbmQodGhpcyksIGNsaWVudF9pZCwgdXJsLCBpbnRlcnZhbCwgc3RvcE9uRXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hlY2tTZXNzaW9uSUZyYW1lLmxvYWQoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGVja1Nlc3Npb25JRnJhbWUuc3RhcnQoc2Vzc2lvbl9zdGF0ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIExvZy53YXJuKFwiU2Vzc2lvbk1vbml0b3IuX3N0YXJ0OiBObyBjaGVjayBzZXNzaW9uIGlmcmFtZSBmb3VuZCBpbiB0aGUgbWV0YWRhdGFcIik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KS5jYXRjaChlcnIgPT4ge1xuICAgICAgICAgICAgICAgICAgICAvLyBjYXRjaCB0byBzdXBwcmVzcyBlcnJvcnMgc2luY2Ugd2UncmUgaW4gbm9uLXByb21pc2UgY2FsbGJhY2tcbiAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiU2Vzc2lvbk1vbml0b3IuX3N0YXJ0OiBFcnJvciBmcm9tIGdldENoZWNrU2Vzc2lvbklmcmFtZTpcIiwgZXJyLm1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2hlY2tTZXNzaW9uSUZyYW1lLnN0YXJ0KHNlc3Npb25fc3RhdGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgX3N0b3AoKSB7XG4gICAgICAgIHRoaXMuX3N1YiA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5fc2lkID0gdW5kZWZpbmVkO1xuXG4gICAgICAgIGlmICh0aGlzLl9jaGVja1Nlc3Npb25JRnJhbWUpIHtcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlNlc3Npb25Nb25pdG9yLl9zdG9wXCIpO1xuICAgICAgICAgICAgdGhpcy5fY2hlY2tTZXNzaW9uSUZyYW1lLnN0b3AoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9zZXR0aW5ncy5tb25pdG9yQW5vbnltb3VzU2Vzc2lvbikge1xuICAgICAgICAgICAgdGhpcy5fdXNlck1hbmFnZXIucXVlcnlTZXNzaW9uU3RhdHVzKCkudGhlbihzZXNzaW9uID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgdG1wVXNlciA9IHtcbiAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbl9zdGF0ZSA6IHNlc3Npb24uc2Vzc2lvbl9zdGF0ZVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgaWYgKHNlc3Npb24uc3ViICYmIHNlc3Npb24uc2lkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRtcFVzZXIucHJvZmlsZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1Yjogc2Vzc2lvbi5zdWIsXG4gICAgICAgICAgICAgICAgICAgICAgICBzaWQ6IHNlc3Npb24uc2lkXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXJ0KHRtcFVzZXIpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5jYXRjaChlcnIgPT4ge1xuICAgICAgICAgICAgICAgIC8vIGNhdGNoIHRvIHN1cHByZXNzIGVycm9ycyBzaW5jZSB3ZSdyZSBpbiBhIGNhbGxiYWNrXG4gICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiU2Vzc2lvbk1vbml0b3I6IGVycm9yIGZyb20gcXVlcnlTZXNzaW9uU3RhdHVzOlwiLCBlcnIubWVzc2FnZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIF9jYWxsYmFjaygpIHtcbiAgICAgICAgdGhpcy5fdXNlck1hbmFnZXIucXVlcnlTZXNzaW9uU3RhdHVzKCkudGhlbihzZXNzaW9uID0+IHtcbiAgICAgICAgICAgIHZhciByYWlzZUV2ZW50ID0gdHJ1ZTtcblxuICAgICAgICAgICAgaWYgKHNlc3Npb24pIHtcbiAgICAgICAgICAgICAgICBpZiAoc2Vzc2lvbi5zdWIgPT09IHRoaXMuX3N1Yikge1xuICAgICAgICAgICAgICAgICAgICByYWlzZUV2ZW50ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoZWNrU2Vzc2lvbklGcmFtZS5zdGFydChzZXNzaW9uLnNlc3Npb25fc3RhdGUpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChzZXNzaW9uLnNpZCA9PT0gdGhpcy5fc2lkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJTZXNzaW9uTW9uaXRvci5fY2FsbGJhY2s6IFNhbWUgc3ViIHN0aWxsIGxvZ2dlZCBpbiBhdCBPUCwgcmVzdGFydGluZyBjaGVjayBzZXNzaW9uIGlmcmFtZTsgc2Vzc2lvbl9zdGF0ZTpcIiwgc2Vzc2lvbi5zZXNzaW9uX3N0YXRlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlNlc3Npb25Nb25pdG9yLl9jYWxsYmFjazogU2FtZSBzdWIgc3RpbGwgbG9nZ2VkIGluIGF0IE9QLCBzZXNzaW9uIHN0YXRlIGhhcyBjaGFuZ2VkLCByZXN0YXJ0aW5nIGNoZWNrIHNlc3Npb24gaWZyYW1lOyBzZXNzaW9uX3N0YXRlOlwiLCBzZXNzaW9uLnNlc3Npb25fc3RhdGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdXNlck1hbmFnZXIuZXZlbnRzLl9yYWlzZVVzZXJTZXNzaW9uQ2hhbmdlZCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJTZXNzaW9uTW9uaXRvci5fY2FsbGJhY2s6IERpZmZlcmVudCBzdWJqZWN0IHNpZ25lZCBpbnRvIE9QOlwiLCBzZXNzaW9uLnN1Yik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiU2Vzc2lvbk1vbml0b3IuX2NhbGxiYWNrOiBTdWJqZWN0IG5vIGxvbmdlciBzaWduZWQgaW50byBPUFwiKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHJhaXNlRXZlbnQpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fc3ViKSB7XG4gICAgICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlNlc3Npb25Nb25pdG9yLl9jYWxsYmFjazogU2Vzc2lvbk1vbml0b3IuX2NhbGxiYWNrOyByYWlzaW5nIHNpZ25lZCBvdXQgZXZlbnRcIik7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3VzZXJNYW5hZ2VyLmV2ZW50cy5fcmFpc2VVc2VyU2lnbmVkT3V0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJTZXNzaW9uTW9uaXRvci5fY2FsbGJhY2s6IFNlc3Npb25Nb25pdG9yLl9jYWxsYmFjazsgcmFpc2luZyBzaWduZWQgaW4gZXZlbnRcIik7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3VzZXJNYW5hZ2VyLmV2ZW50cy5fcmFpc2VVc2VyU2lnbmVkSW4oKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pLmNhdGNoKGVyciA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5fc3ViKSB7XG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiU2Vzc2lvbk1vbml0b3IuX2NhbGxiYWNrOiBFcnJvciBjYWxsaW5nIHF1ZXJ5Q3VycmVudFNpZ25pblNlc3Npb247IHJhaXNpbmcgc2lnbmVkIG91dCBldmVudFwiLCBlcnIubWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fdXNlck1hbmFnZXIuZXZlbnRzLl9yYWlzZVVzZXJTaWduZWRPdXQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxufVxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cblxuaW1wb3J0IHsgTG9nIH0gZnJvbSAnLi9Mb2cuanMnO1xuaW1wb3J0IHsgVXJsVXRpbGl0eSB9IGZyb20gJy4vVXJsVXRpbGl0eS5qcyc7XG5pbXBvcnQgeyBTaWduaW5TdGF0ZSB9IGZyb20gJy4vU2lnbmluU3RhdGUuanMnO1xuXG5leHBvcnQgY2xhc3MgU2lnbmluUmVxdWVzdCB7XG4gICAgY29uc3RydWN0b3Ioe1xuICAgICAgICAvLyBtYW5kYXRvcnlcbiAgICAgICAgdXJsLCBjbGllbnRfaWQsIHJlZGlyZWN0X3VyaSwgcmVzcG9uc2VfdHlwZSwgc2NvcGUsIGF1dGhvcml0eSxcbiAgICAgICAgLy8gb3B0aW9uYWxcbiAgICAgICAgZGF0YSwgcHJvbXB0LCBkaXNwbGF5LCBtYXhfYWdlLCB1aV9sb2NhbGVzLCBpZF90b2tlbl9oaW50LCBsb2dpbl9oaW50LCBhY3JfdmFsdWVzLCByZXNvdXJjZSwgcmVzcG9uc2VfbW9kZSxcbiAgICAgICAgcmVxdWVzdCwgcmVxdWVzdF91cmksIGV4dHJhUXVlcnlQYXJhbXMsIHJlcXVlc3RfdHlwZSwgY2xpZW50X3NlY3JldCwgZXh0cmFUb2tlblBhcmFtcywgc2tpcFVzZXJJbmZvXG4gICAgfSkge1xuICAgICAgICBpZiAoIXVybCkge1xuICAgICAgICAgICAgTG9nLmVycm9yKFwiU2lnbmluUmVxdWVzdC5jdG9yOiBObyB1cmwgcGFzc2VkXCIpO1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidXJsXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghY2xpZW50X2lkKSB7XG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJTaWduaW5SZXF1ZXN0LmN0b3I6IE5vIGNsaWVudF9pZCBwYXNzZWRcIik7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJjbGllbnRfaWRcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFyZWRpcmVjdF91cmkpIHtcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlNpZ25pblJlcXVlc3QuY3RvcjogTm8gcmVkaXJlY3RfdXJpIHBhc3NlZFwiKTtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInJlZGlyZWN0X3VyaVwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXJlc3BvbnNlX3R5cGUpIHtcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlNpZ25pblJlcXVlc3QuY3RvcjogTm8gcmVzcG9uc2VfdHlwZSBwYXNzZWRcIik7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJyZXNwb25zZV90eXBlXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghc2NvcGUpIHtcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlNpZ25pblJlcXVlc3QuY3RvcjogTm8gc2NvcGUgcGFzc2VkXCIpO1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwic2NvcGVcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFhdXRob3JpdHkpIHtcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlNpZ25pblJlcXVlc3QuY3RvcjogTm8gYXV0aG9yaXR5IHBhc3NlZFwiKTtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImF1dGhvcml0eVwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBvaWRjID0gU2lnbmluUmVxdWVzdC5pc09pZGMocmVzcG9uc2VfdHlwZSk7XG4gICAgICAgIGxldCBjb2RlID0gU2lnbmluUmVxdWVzdC5pc0NvZGUocmVzcG9uc2VfdHlwZSk7XG5cbiAgICAgICAgaWYgKCFyZXNwb25zZV9tb2RlKSB7XG4gICAgICAgICAgICByZXNwb25zZV9tb2RlID0gU2lnbmluUmVxdWVzdC5pc0NvZGUocmVzcG9uc2VfdHlwZSkgPyBcInF1ZXJ5XCIgOiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zdGF0ZSA9IG5ldyBTaWduaW5TdGF0ZSh7IG5vbmNlOiBvaWRjLCBcbiAgICAgICAgICAgIGRhdGEsIGNsaWVudF9pZCwgYXV0aG9yaXR5LCByZWRpcmVjdF91cmksIFxuICAgICAgICAgICAgY29kZV92ZXJpZmllcjogY29kZSwgXG4gICAgICAgICAgICByZXF1ZXN0X3R5cGUsIHJlc3BvbnNlX21vZGUsXG4gICAgICAgICAgICBjbGllbnRfc2VjcmV0LCBzY29wZSwgZXh0cmFUb2tlblBhcmFtcywgc2tpcFVzZXJJbmZvIH0pO1xuXG4gICAgICAgIHVybCA9IFVybFV0aWxpdHkuYWRkUXVlcnlQYXJhbSh1cmwsIFwiY2xpZW50X2lkXCIsIGNsaWVudF9pZCk7XG4gICAgICAgIHVybCA9IFVybFV0aWxpdHkuYWRkUXVlcnlQYXJhbSh1cmwsIFwicmVkaXJlY3RfdXJpXCIsIHJlZGlyZWN0X3VyaSk7XG4gICAgICAgIHVybCA9IFVybFV0aWxpdHkuYWRkUXVlcnlQYXJhbSh1cmwsIFwicmVzcG9uc2VfdHlwZVwiLCByZXNwb25zZV90eXBlKTtcbiAgICAgICAgdXJsID0gVXJsVXRpbGl0eS5hZGRRdWVyeVBhcmFtKHVybCwgXCJzY29wZVwiLCBzY29wZSk7XG5cbiAgICAgICAgdXJsID0gVXJsVXRpbGl0eS5hZGRRdWVyeVBhcmFtKHVybCwgXCJzdGF0ZVwiLCB0aGlzLnN0YXRlLmlkKTtcbiAgICAgICAgaWYgKG9pZGMpIHtcbiAgICAgICAgICAgIHVybCA9IFVybFV0aWxpdHkuYWRkUXVlcnlQYXJhbSh1cmwsIFwibm9uY2VcIiwgdGhpcy5zdGF0ZS5ub25jZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvZGUpIHtcbiAgICAgICAgICAgIHVybCA9IFVybFV0aWxpdHkuYWRkUXVlcnlQYXJhbSh1cmwsIFwiY29kZV9jaGFsbGVuZ2VcIiwgdGhpcy5zdGF0ZS5jb2RlX2NoYWxsZW5nZSk7XG4gICAgICAgICAgICB1cmwgPSBVcmxVdGlsaXR5LmFkZFF1ZXJ5UGFyYW0odXJsLCBcImNvZGVfY2hhbGxlbmdlX21ldGhvZFwiLCBcIlMyNTZcIik7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgb3B0aW9uYWwgPSB7IHByb21wdCwgZGlzcGxheSwgbWF4X2FnZSwgdWlfbG9jYWxlcywgaWRfdG9rZW5faGludCwgbG9naW5faGludCwgYWNyX3ZhbHVlcywgcmVzb3VyY2UsIHJlcXVlc3QsIHJlcXVlc3RfdXJpLCByZXNwb25zZV9tb2RlIH07XG4gICAgICAgIGZvcihsZXQga2V5IGluIG9wdGlvbmFsKXtcbiAgICAgICAgICAgIGlmIChvcHRpb25hbFtrZXldKSB7XG4gICAgICAgICAgICAgICAgdXJsID0gVXJsVXRpbGl0eS5hZGRRdWVyeVBhcmFtKHVybCwga2V5LCBvcHRpb25hbFtrZXldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZvcihsZXQga2V5IGluIGV4dHJhUXVlcnlQYXJhbXMpe1xuICAgICAgICAgICAgdXJsID0gVXJsVXRpbGl0eS5hZGRRdWVyeVBhcmFtKHVybCwga2V5LCBleHRyYVF1ZXJ5UGFyYW1zW2tleV0pXG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnVybCA9IHVybDtcbiAgICB9XG5cbiAgICBzdGF0aWMgaXNPaWRjKHJlc3BvbnNlX3R5cGUpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHJlc3BvbnNlX3R5cGUuc3BsaXQoL1xccysvZykuZmlsdGVyKGZ1bmN0aW9uKGl0ZW0pIHtcbiAgICAgICAgICAgIHJldHVybiBpdGVtID09PSBcImlkX3Rva2VuXCI7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gISEocmVzdWx0WzBdKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgaXNPQXV0aChyZXNwb25zZV90eXBlKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSByZXNwb25zZV90eXBlLnNwbGl0KC9cXHMrL2cpLmZpbHRlcihmdW5jdGlvbihpdGVtKSB7XG4gICAgICAgICAgICByZXR1cm4gaXRlbSA9PT0gXCJ0b2tlblwiO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuICEhKHJlc3VsdFswXSk7XG4gICAgfVxuICAgIFxuICAgIHN0YXRpYyBpc0NvZGUocmVzcG9uc2VfdHlwZSkge1xuICAgICAgICB2YXIgcmVzdWx0ID0gcmVzcG9uc2VfdHlwZS5zcGxpdCgvXFxzKy9nKS5maWx0ZXIoZnVuY3Rpb24oaXRlbSkge1xuICAgICAgICAgICAgcmV0dXJuIGl0ZW0gPT09IFwiY29kZVwiO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuICEhKHJlc3VsdFswXSk7XG4gICAgfVxufVxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cblxuaW1wb3J0IHsgVXJsVXRpbGl0eSB9IGZyb20gJy4vVXJsVXRpbGl0eS5qcyc7XG5cbmNvbnN0IE9pZGNTY29wZSA9IFwib3BlbmlkXCI7XG5cbmV4cG9ydCBjbGFzcyBTaWduaW5SZXNwb25zZSB7XG4gICAgY29uc3RydWN0b3IodXJsLCBkZWxpbWl0ZXIgPSBcIiNcIikge1xuXG4gICAgICAgIHZhciB2YWx1ZXMgPSBVcmxVdGlsaXR5LnBhcnNlVXJsRnJhZ21lbnQodXJsLCBkZWxpbWl0ZXIpO1xuXG4gICAgICAgIHRoaXMuZXJyb3IgPSB2YWx1ZXMuZXJyb3I7XG4gICAgICAgIHRoaXMuZXJyb3JfZGVzY3JpcHRpb24gPSB2YWx1ZXMuZXJyb3JfZGVzY3JpcHRpb247XG4gICAgICAgIHRoaXMuZXJyb3JfdXJpID0gdmFsdWVzLmVycm9yX3VyaTtcblxuICAgICAgICB0aGlzLmNvZGUgPSB2YWx1ZXMuY29kZTtcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHZhbHVlcy5zdGF0ZTtcbiAgICAgICAgdGhpcy5pZF90b2tlbiA9IHZhbHVlcy5pZF90b2tlbjtcbiAgICAgICAgdGhpcy5zZXNzaW9uX3N0YXRlID0gdmFsdWVzLnNlc3Npb25fc3RhdGU7XG4gICAgICAgIHRoaXMuYWNjZXNzX3Rva2VuID0gdmFsdWVzLmFjY2Vzc190b2tlbjtcbiAgICAgICAgdGhpcy50b2tlbl90eXBlID0gdmFsdWVzLnRva2VuX3R5cGU7XG4gICAgICAgIHRoaXMuc2NvcGUgPSB2YWx1ZXMuc2NvcGU7XG4gICAgICAgIHRoaXMucHJvZmlsZSA9IHVuZGVmaW5lZDsgLy8gd2lsbCBiZSBzZXQgZnJvbSBSZXNwb25zZVZhbGlkYXRvclxuXG4gICAgICAgIHRoaXMuZXhwaXJlc19pbiA9IHZhbHVlcy5leHBpcmVzX2luO1xuICAgIH1cblxuICAgIGdldCBleHBpcmVzX2luKCkge1xuICAgICAgICBpZiAodGhpcy5leHBpcmVzX2F0KSB7XG4gICAgICAgICAgICBsZXQgbm93ID0gcGFyc2VJbnQoRGF0ZS5ub3coKSAvIDEwMDApO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXhwaXJlc19hdCAtIG5vdztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBzZXQgZXhwaXJlc19pbih2YWx1ZSl7XG4gICAgICAgIGxldCBleHBpcmVzX2luID0gcGFyc2VJbnQodmFsdWUpO1xuICAgICAgICBpZiAodHlwZW9mIGV4cGlyZXNfaW4gPT09ICdudW1iZXInICYmIGV4cGlyZXNfaW4gPiAwKSB7XG4gICAgICAgICAgICBsZXQgbm93ID0gcGFyc2VJbnQoRGF0ZS5ub3coKSAvIDEwMDApO1xuICAgICAgICAgICAgdGhpcy5leHBpcmVzX2F0ID0gbm93ICsgZXhwaXJlc19pbjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldCBleHBpcmVkKCkge1xuICAgICAgICBsZXQgZXhwaXJlc19pbiA9IHRoaXMuZXhwaXJlc19pbjtcbiAgICAgICAgaWYgKGV4cGlyZXNfaW4gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIGV4cGlyZXNfaW4gPD0gMDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGdldCBzY29wZXMoKSB7XG4gICAgICAgIHJldHVybiAodGhpcy5zY29wZSB8fCBcIlwiKS5zcGxpdChcIiBcIik7XG4gICAgfVxuXG4gICAgZ2V0IGlzT3BlbklkQ29ubmVjdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2NvcGVzLmluZGV4T2YoT2lkY1Njb3BlKSA+PSAwIHx8ICEhdGhpcy5pZF90b2tlbjtcbiAgICB9XG59XG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxuXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XG5pbXBvcnQgeyBTdGF0ZSB9IGZyb20gJy4vU3RhdGUuanMnO1xuaW1wb3J0IHsgSm9zZVV0aWwgfSBmcm9tICcuL0pvc2VVdGlsLmpzJztcbmltcG9ydCByYW5kb20gZnJvbSAnLi9yYW5kb20uanMnO1xuXG5leHBvcnQgY2xhc3MgU2lnbmluU3RhdGUgZXh0ZW5kcyBTdGF0ZSB7XG4gICAgY29uc3RydWN0b3Ioe25vbmNlLCBhdXRob3JpdHksIGNsaWVudF9pZCwgcmVkaXJlY3RfdXJpLCBjb2RlX3ZlcmlmaWVyLCByZXNwb25zZV9tb2RlLCBjbGllbnRfc2VjcmV0LCBzY29wZSwgZXh0cmFUb2tlblBhcmFtcywgc2tpcFVzZXJJbmZvfSA9IHt9KSB7XG4gICAgICAgIHN1cGVyKGFyZ3VtZW50c1swXSk7XG5cbiAgICAgICAgaWYgKG5vbmNlID09PSB0cnVlKSB7XG4gICAgICAgICAgICB0aGlzLl9ub25jZSA9IHJhbmRvbSgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG5vbmNlKSB7XG4gICAgICAgICAgICB0aGlzLl9ub25jZSA9IG5vbmNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvZGVfdmVyaWZpZXIgPT09IHRydWUpIHtcbiAgICAgICAgICAgIC8vIHJhbmRvbSgpIHByb2R1Y2VzIDMyIGxlbmd0aFxuICAgICAgICAgICAgdGhpcy5fY29kZV92ZXJpZmllciA9IHJhbmRvbSgpICsgcmFuZG9tKCkgKyByYW5kb20oKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjb2RlX3ZlcmlmaWVyKSB7XG4gICAgICAgICAgICB0aGlzLl9jb2RlX3ZlcmlmaWVyID0gY29kZV92ZXJpZmllcjtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgaWYgKHRoaXMuY29kZV92ZXJpZmllcikge1xuICAgICAgICAgICAgbGV0IGhhc2ggPSBKb3NlVXRpbC5oYXNoU3RyaW5nKHRoaXMuY29kZV92ZXJpZmllciwgXCJTSEEyNTZcIik7XG4gICAgICAgICAgICB0aGlzLl9jb2RlX2NoYWxsZW5nZSA9IEpvc2VVdGlsLmhleFRvQmFzZTY0VXJsKGhhc2gpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fcmVkaXJlY3RfdXJpID0gcmVkaXJlY3RfdXJpO1xuICAgICAgICB0aGlzLl9hdXRob3JpdHkgPSBhdXRob3JpdHk7XG4gICAgICAgIHRoaXMuX2NsaWVudF9pZCA9IGNsaWVudF9pZDtcbiAgICAgICAgdGhpcy5fcmVzcG9uc2VfbW9kZSA9IHJlc3BvbnNlX21vZGU7XG4gICAgICAgIHRoaXMuX2NsaWVudF9zZWNyZXQgPSBjbGllbnRfc2VjcmV0O1xuICAgICAgICB0aGlzLl9zY29wZSA9IHNjb3BlO1xuICAgICAgICB0aGlzLl9leHRyYVRva2VuUGFyYW1zID0gZXh0cmFUb2tlblBhcmFtcztcbiAgICAgICAgdGhpcy5fc2tpcFVzZXJJbmZvID0gc2tpcFVzZXJJbmZvO1xuICAgIH1cblxuICAgIGdldCBub25jZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX25vbmNlO1xuICAgIH1cbiAgICBnZXQgYXV0aG9yaXR5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYXV0aG9yaXR5O1xuICAgIH1cbiAgICBnZXQgY2xpZW50X2lkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY2xpZW50X2lkO1xuICAgIH1cbiAgICBnZXQgcmVkaXJlY3RfdXJpKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVkaXJlY3RfdXJpO1xuICAgIH1cbiAgICBnZXQgY29kZV92ZXJpZmllcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvZGVfdmVyaWZpZXI7XG4gICAgfVxuICAgIGdldCBjb2RlX2NoYWxsZW5nZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvZGVfY2hhbGxlbmdlO1xuICAgIH1cbiAgICBnZXQgcmVzcG9uc2VfbW9kZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc3BvbnNlX21vZGU7XG4gICAgfVxuICAgIGdldCBjbGllbnRfc2VjcmV0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY2xpZW50X3NlY3JldDtcbiAgICB9XG4gICAgZ2V0IHNjb3BlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2NvcGU7XG4gICAgfVxuICAgIGdldCBleHRyYVRva2VuUGFyYW1zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZXh0cmFUb2tlblBhcmFtcztcbiAgICB9XG4gICAgZ2V0IHNraXBVc2VySW5mbygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NraXBVc2VySW5mbztcbiAgICB9XG4gICAgXG4gICAgdG9TdG9yYWdlU3RyaW5nKCkge1xuICAgICAgICBMb2cuZGVidWcoXCJTaWduaW5TdGF0ZS50b1N0b3JhZ2VTdHJpbmdcIik7XG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICBpZDogdGhpcy5pZCxcbiAgICAgICAgICAgIGRhdGE6IHRoaXMuZGF0YSxcbiAgICAgICAgICAgIGNyZWF0ZWQ6IHRoaXMuY3JlYXRlZCxcbiAgICAgICAgICAgIHJlcXVlc3RfdHlwZTogdGhpcy5yZXF1ZXN0X3R5cGUsXG4gICAgICAgICAgICBub25jZTogdGhpcy5ub25jZSxcbiAgICAgICAgICAgIGNvZGVfdmVyaWZpZXI6IHRoaXMuY29kZV92ZXJpZmllcixcbiAgICAgICAgICAgIHJlZGlyZWN0X3VyaTogdGhpcy5yZWRpcmVjdF91cmksXG4gICAgICAgICAgICBhdXRob3JpdHk6IHRoaXMuYXV0aG9yaXR5LFxuICAgICAgICAgICAgY2xpZW50X2lkOiB0aGlzLmNsaWVudF9pZCxcbiAgICAgICAgICAgIHJlc3BvbnNlX21vZGU6IHRoaXMucmVzcG9uc2VfbW9kZSxcbiAgICAgICAgICAgIGNsaWVudF9zZWNyZXQ6IHRoaXMuY2xpZW50X3NlY3JldCxcbiAgICAgICAgICAgIHNjb3BlOiB0aGlzLnNjb3BlLFxuICAgICAgICAgICAgZXh0cmFUb2tlblBhcmFtcyA6IHRoaXMuZXh0cmFUb2tlblBhcmFtcyxcbiAgICAgICAgICAgIHNraXBVc2VySW5mbzogdGhpcy5za2lwVXNlckluZm9cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgc3RhdGljIGZyb21TdG9yYWdlU3RyaW5nKHN0b3JhZ2VTdHJpbmcpIHtcbiAgICAgICAgTG9nLmRlYnVnKFwiU2lnbmluU3RhdGUuZnJvbVN0b3JhZ2VTdHJpbmdcIik7XG4gICAgICAgIHZhciBkYXRhID0gSlNPTi5wYXJzZShzdG9yYWdlU3RyaW5nKTtcbiAgICAgICAgcmV0dXJuIG5ldyBTaWduaW5TdGF0ZShkYXRhKTtcbiAgICB9XG59XG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxuXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XG5pbXBvcnQgeyBVcmxVdGlsaXR5IH0gZnJvbSAnLi9VcmxVdGlsaXR5LmpzJztcbmltcG9ydCB7IFN0YXRlIH0gZnJvbSAnLi9TdGF0ZS5qcyc7XG5cbmV4cG9ydCBjbGFzcyBTaWdub3V0UmVxdWVzdCB7XG4gICAgY29uc3RydWN0b3Ioe3VybCwgaWRfdG9rZW5faGludCwgcG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpLCBkYXRhLCBleHRyYVF1ZXJ5UGFyYW1zLCByZXF1ZXN0X3R5cGV9KSB7XG4gICAgICAgIGlmICghdXJsKSB7XG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJTaWdub3V0UmVxdWVzdC5jdG9yOiBObyB1cmwgcGFzc2VkXCIpO1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidXJsXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlkX3Rva2VuX2hpbnQpIHtcbiAgICAgICAgICAgIHVybCA9IFVybFV0aWxpdHkuYWRkUXVlcnlQYXJhbSh1cmwsIFwiaWRfdG9rZW5faGludFwiLCBpZF90b2tlbl9oaW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwb3N0X2xvZ291dF9yZWRpcmVjdF91cmkpIHtcbiAgICAgICAgICAgIHVybCA9IFVybFV0aWxpdHkuYWRkUXVlcnlQYXJhbSh1cmwsIFwicG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpXCIsIHBvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaSk7XG5cbiAgICAgICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IG5ldyBTdGF0ZSh7IGRhdGEsIHJlcXVlc3RfdHlwZSB9KTtcblxuICAgICAgICAgICAgICAgIHVybCA9IFVybFV0aWxpdHkuYWRkUXVlcnlQYXJhbSh1cmwsIFwic3RhdGVcIiwgdGhpcy5zdGF0ZS5pZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmb3IobGV0IGtleSBpbiBleHRyYVF1ZXJ5UGFyYW1zKXtcbiAgICAgICAgICAgIHVybCA9IFVybFV0aWxpdHkuYWRkUXVlcnlQYXJhbSh1cmwsIGtleSwgZXh0cmFRdWVyeVBhcmFtc1trZXldKVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy51cmwgPSB1cmw7XG4gICAgfVxufVxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cblxuaW1wb3J0IHsgVXJsVXRpbGl0eSB9IGZyb20gJy4vVXJsVXRpbGl0eS5qcyc7XG5cbmV4cG9ydCBjbGFzcyBTaWdub3V0UmVzcG9uc2Uge1xuICAgIGNvbnN0cnVjdG9yKHVybCkge1xuXG4gICAgICAgIHZhciB2YWx1ZXMgPSBVcmxVdGlsaXR5LnBhcnNlVXJsRnJhZ21lbnQodXJsLCBcIj9cIik7XG5cbiAgICAgICAgdGhpcy5lcnJvciA9IHZhbHVlcy5lcnJvcjtcbiAgICAgICAgdGhpcy5lcnJvcl9kZXNjcmlwdGlvbiA9IHZhbHVlcy5lcnJvcl9kZXNjcmlwdGlvbjtcbiAgICAgICAgdGhpcy5lcnJvcl91cmkgPSB2YWx1ZXMuZXJyb3JfdXJpO1xuXG4gICAgICAgIHRoaXMuc3RhdGUgPSB2YWx1ZXMuc3RhdGU7XG4gICAgfVxufVxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cblxuaW1wb3J0IHsgTG9nIH0gZnJvbSAnLi9Mb2cuanMnO1xuXG5leHBvcnQgY2xhc3MgU2lsZW50UmVuZXdTZXJ2aWNlIHtcblxuICAgIGNvbnN0cnVjdG9yKHVzZXJNYW5hZ2VyKSB7XG4gICAgICAgIHRoaXMuX3VzZXJNYW5hZ2VyID0gdXNlck1hbmFnZXI7XG4gICAgfVxuXG4gICAgc3RhcnQoKSB7XG4gICAgICAgIGlmICghdGhpcy5fY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHRoaXMuX2NhbGxiYWNrID0gdGhpcy5fdG9rZW5FeHBpcmluZy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5fdXNlck1hbmFnZXIuZXZlbnRzLmFkZEFjY2Vzc1Rva2VuRXhwaXJpbmcodGhpcy5fY2FsbGJhY2spO1xuXG4gICAgICAgICAgICAvLyB0aGlzIHdpbGwgdHJpZ2dlciBsb2FkaW5nIG9mIHRoZSB1c2VyIHNvIHRoZSBleHBpcmluZyBldmVudHMgY2FuIGJlIGluaXRpYWxpemVkXG4gICAgICAgICAgICB0aGlzLl91c2VyTWFuYWdlci5nZXRVc2VyKCkudGhlbih1c2VyPT57XG4gICAgICAgICAgICAgICAgLy8gZGVsaWJlcmF0ZSBub3BcbiAgICAgICAgICAgIH0pLmNhdGNoKGVycj0+e1xuICAgICAgICAgICAgICAgIC8vIGNhdGNoIHRvIHN1cHByZXNzIGVycm9ycyBzaW5jZSB3ZSdyZSBpbiBhIGN0b3JcbiAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJTaWxlbnRSZW5ld1NlcnZpY2Uuc3RhcnQ6IEVycm9yIGZyb20gZ2V0VXNlcjpcIiwgZXJyLm1lc3NhZ2UpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdG9wKCkge1xuICAgICAgICBpZiAodGhpcy5fY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHRoaXMuX3VzZXJNYW5hZ2VyLmV2ZW50cy5yZW1vdmVBY2Nlc3NUb2tlbkV4cGlyaW5nKHRoaXMuX2NhbGxiYWNrKTtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9jYWxsYmFjaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIF90b2tlbkV4cGlyaW5nKCkge1xuICAgICAgICB0aGlzLl91c2VyTWFuYWdlci5zaWduaW5TaWxlbnQoKS50aGVuKHVzZXIgPT4ge1xuICAgICAgICAgICAgTG9nLmRlYnVnKFwiU2lsZW50UmVuZXdTZXJ2aWNlLl90b2tlbkV4cGlyaW5nOiBTaWxlbnQgdG9rZW4gcmVuZXdhbCBzdWNjZXNzZnVsXCIpO1xuICAgICAgICB9LCBlcnIgPT4ge1xuICAgICAgICAgICAgTG9nLmVycm9yKFwiU2lsZW50UmVuZXdTZXJ2aWNlLl90b2tlbkV4cGlyaW5nOiBFcnJvciBmcm9tIHNpZ25pblNpbGVudDpcIiwgZXJyLm1lc3NhZ2UpO1xuICAgICAgICAgICAgdGhpcy5fdXNlck1hbmFnZXIuZXZlbnRzLl9yYWlzZVNpbGVudFJlbmV3RXJyb3IoZXJyKTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cblxuaW1wb3J0IHsgTG9nIH0gZnJvbSAnLi9Mb2cuanMnO1xuaW1wb3J0IHJhbmRvbSBmcm9tICcuL3JhbmRvbS5qcyc7XG5cbmV4cG9ydCBjbGFzcyBTdGF0ZSB7XG4gICAgY29uc3RydWN0b3Ioe2lkLCBkYXRhLCBjcmVhdGVkLCByZXF1ZXN0X3R5cGV9ID0ge30pIHtcbiAgICAgICAgdGhpcy5faWQgPSBpZCB8fCByYW5kb20oKTtcbiAgICAgICAgdGhpcy5fZGF0YSA9IGRhdGE7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBjcmVhdGVkID09PSAnbnVtYmVyJyAmJiBjcmVhdGVkID4gMCkge1xuICAgICAgICAgICAgdGhpcy5fY3JlYXRlZCA9IGNyZWF0ZWQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9jcmVhdGVkID0gcGFyc2VJbnQoRGF0ZS5ub3coKSAvIDEwMDApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3JlcXVlc3RfdHlwZSA9ICByZXF1ZXN0X3R5cGU7XG4gICAgfVxuXG4gICAgZ2V0IGlkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faWQ7XG4gICAgfVxuICAgIGdldCBkYXRhKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0YTtcbiAgICB9XG4gICAgZ2V0IGNyZWF0ZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jcmVhdGVkO1xuICAgIH1cbiAgICBnZXQgcmVxdWVzdF90eXBlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVxdWVzdF90eXBlO1xuICAgIH1cblxuICAgIHRvU3RvcmFnZVN0cmluZygpIHtcbiAgICAgICAgTG9nLmRlYnVnKFwiU3RhdGUudG9TdG9yYWdlU3RyaW5nXCIpO1xuICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgaWQ6IHRoaXMuaWQsXG4gICAgICAgICAgICBkYXRhOiB0aGlzLmRhdGEsXG4gICAgICAgICAgICBjcmVhdGVkOiB0aGlzLmNyZWF0ZWQsXG4gICAgICAgICAgICByZXF1ZXN0X3R5cGU6IHRoaXMucmVxdWVzdF90eXBlXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tU3RvcmFnZVN0cmluZyhzdG9yYWdlU3RyaW5nKSB7XG4gICAgICAgIExvZy5kZWJ1ZyhcIlN0YXRlLmZyb21TdG9yYWdlU3RyaW5nXCIpO1xuICAgICAgICByZXR1cm4gbmV3IFN0YXRlKEpTT04ucGFyc2Uoc3RvcmFnZVN0cmluZykpO1xuICAgIH1cblxuICAgIHN0YXRpYyBjbGVhclN0YWxlU3RhdGUoc3RvcmFnZSwgYWdlKSB7XG5cbiAgICAgICAgdmFyIGN1dG9mZiA9IERhdGUubm93KCkgLyAxMDAwIC0gYWdlO1xuXG4gICAgICAgIHJldHVybiBzdG9yYWdlLmdldEFsbEtleXMoKS50aGVuKGtleXMgPT4ge1xuICAgICAgICAgICAgTG9nLmRlYnVnKFwiU3RhdGUuY2xlYXJTdGFsZVN0YXRlOiBnb3Qga2V5c1wiLCBrZXlzKTtcblxuICAgICAgICAgICAgdmFyIHByb21pc2VzID0gW107XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQga2V5ID0ga2V5c1tpXTtcbiAgICAgICAgICAgICAgICB2YXIgcCA9IHN0b3JhZ2UuZ2V0KGtleSkudGhlbihpdGVtID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJlbW92ZSA9IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChpdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdGF0ZSA9IFN0YXRlLmZyb21TdG9yYWdlU3RyaW5nKGl0ZW0pXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJTdGF0ZS5jbGVhclN0YWxlU3RhdGU6IGdvdCBpdGVtIGZyb20ga2V5OiBcIiwga2V5LCBzdGF0ZS5jcmVhdGVkKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5jcmVhdGVkIDw9IGN1dG9mZikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiU3RhdGUuY2xlYXJTdGFsZVN0YXRlOiBFcnJvciBwYXJzaW5nIHN0YXRlIGZvciBrZXlcIiwga2V5LCBlLm1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJTdGF0ZS5jbGVhclN0YWxlU3RhdGU6IG5vIGl0ZW0gaW4gc3RvcmFnZSBmb3Iga2V5OiBcIiwga2V5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAocmVtb3ZlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJTdGF0ZS5jbGVhclN0YWxlU3RhdGU6IHJlbW92ZWQgaXRlbSBmb3Iga2V5OiBcIiwga2V5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdG9yYWdlLnJlbW92ZShrZXkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBwcm9taXNlcy5wdXNoKHApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJTdGF0ZS5jbGVhclN0YWxlU3RhdGU6IHdhaXRpbmcgb24gcHJvbWlzZSBjb3VudDpcIiwgcHJvbWlzZXMubGVuZ3RoKTtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcyk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXG5cbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcbmltcG9ydCB7IEdsb2JhbCB9IGZyb20gJy4vR2xvYmFsLmpzJztcbmltcG9ydCB7IEV2ZW50IH0gZnJvbSAnLi9FdmVudC5qcyc7XG5cbmNvbnN0IFRpbWVyRHVyYXRpb24gPSA1OyAvLyBzZWNvbmRzXG5cbmV4cG9ydCBjbGFzcyBUaW1lciBleHRlbmRzIEV2ZW50IHtcblxuICAgIGNvbnN0cnVjdG9yKG5hbWUsIHRpbWVyID0gR2xvYmFsLnRpbWVyLCBub3dGdW5jID0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHN1cGVyKG5hbWUpO1xuICAgICAgICB0aGlzLl90aW1lciA9IHRpbWVyO1xuXG4gICAgICAgIGlmIChub3dGdW5jKSB7XG4gICAgICAgICAgICB0aGlzLl9ub3dGdW5jID0gbm93RnVuYztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX25vd0Z1bmMgPSAoKSA9PiBEYXRlLm5vdygpIC8gMTAwMDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldCBub3coKSB7XG4gICAgICAgIHJldHVybiBwYXJzZUludCh0aGlzLl9ub3dGdW5jKCkpO1xuICAgIH1cblxuICAgIGluaXQoZHVyYXRpb24pIHtcbiAgICAgICAgaWYgKGR1cmF0aW9uIDw9IDApIHtcbiAgICAgICAgICAgIGR1cmF0aW9uID0gMTtcbiAgICAgICAgfVxuICAgICAgICBkdXJhdGlvbiA9IHBhcnNlSW50KGR1cmF0aW9uKTtcblxuICAgICAgICB2YXIgZXhwaXJhdGlvbiA9IHRoaXMubm93ICsgZHVyYXRpb247XG4gICAgICAgIGlmICh0aGlzLmV4cGlyYXRpb24gPT09IGV4cGlyYXRpb24gJiYgdGhpcy5fdGltZXJIYW5kbGUpIHtcbiAgICAgICAgICAgIC8vIG5vIG5lZWQgdG8gcmVpbml0aWFsaXplIHRvIHNhbWUgZXhwaXJhdGlvbiwgc28gYmFpbCBvdXRcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlRpbWVyLmluaXQgdGltZXIgXCIgKyB0aGlzLl9uYW1lICsgXCIgc2tpcHBpbmcgaW5pdGlhbGl6YXRpb24gc2luY2UgYWxyZWFkeSBpbml0aWFsaXplZCBmb3IgZXhwaXJhdGlvbjpcIiwgdGhpcy5leHBpcmF0aW9uKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2FuY2VsKCk7XG5cbiAgICAgICAgTG9nLmRlYnVnKFwiVGltZXIuaW5pdCB0aW1lciBcIiArIHRoaXMuX25hbWUgKyBcIiBmb3IgZHVyYXRpb246XCIsIGR1cmF0aW9uKTtcbiAgICAgICAgdGhpcy5fZXhwaXJhdGlvbiA9IGV4cGlyYXRpb247XG5cbiAgICAgICAgLy8gd2UncmUgdXNpbmcgYSBmYWlybHkgc2hvcnQgdGltZXIgYW5kIHRoZW4gY2hlY2tpbmcgdGhlIGV4cGlyYXRpb24gaW4gdGhlXG4gICAgICAgIC8vIGNhbGxiYWNrIHRvIGhhbmRsZSBzY2VuYXJpb3Mgd2hlcmUgdGhlIGJyb3dzZXIgZGV2aWNlIHNsZWVwcywgYW5kIHRoZW5cbiAgICAgICAgLy8gdGhlIHRpbWVycyBlbmQgdXAgZ2V0dGluZyBkZWxheWVkLlxuICAgICAgICB2YXIgdGltZXJEdXJhdGlvbiA9IFRpbWVyRHVyYXRpb247XG4gICAgICAgIGlmIChkdXJhdGlvbiA8IHRpbWVyRHVyYXRpb24pIHtcbiAgICAgICAgICAgIHRpbWVyRHVyYXRpb24gPSBkdXJhdGlvbjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl90aW1lckhhbmRsZSA9IHRoaXMuX3RpbWVyLnNldEludGVydmFsKHRoaXMuX2NhbGxiYWNrLmJpbmQodGhpcyksIHRpbWVyRHVyYXRpb24gKiAxMDAwKTtcbiAgICB9XG4gICAgXG4gICAgZ2V0IGV4cGlyYXRpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9leHBpcmF0aW9uO1xuICAgIH1cblxuICAgIGNhbmNlbCgpIHtcbiAgICAgICAgaWYgKHRoaXMuX3RpbWVySGFuZGxlKSB7XG4gICAgICAgICAgICBMb2cuZGVidWcoXCJUaW1lci5jYW5jZWw6IFwiLCB0aGlzLl9uYW1lKTtcbiAgICAgICAgICAgIHRoaXMuX3RpbWVyLmNsZWFySW50ZXJ2YWwodGhpcy5fdGltZXJIYW5kbGUpO1xuICAgICAgICAgICAgdGhpcy5fdGltZXJIYW5kbGUgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgX2NhbGxiYWNrKCkge1xuICAgICAgICB2YXIgZGlmZiA9IHRoaXMuX2V4cGlyYXRpb24gLSB0aGlzLm5vdztcbiAgICAgICAgTG9nLmRlYnVnKFwiVGltZXIuY2FsbGJhY2s7IFwiICsgdGhpcy5fbmFtZSArIFwiIHRpbWVyIGV4cGlyZXMgaW46XCIsIGRpZmYpO1xuXG4gICAgICAgIGlmICh0aGlzLl9leHBpcmF0aW9uIDw9IHRoaXMubm93KSB7XG4gICAgICAgICAgICB0aGlzLmNhbmNlbCgpO1xuICAgICAgICAgICAgc3VwZXIucmFpc2UoKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXG5cbmltcG9ydCB7IEpzb25TZXJ2aWNlIH0gZnJvbSAnLi9Kc29uU2VydmljZS5qcyc7XG5pbXBvcnQgeyBNZXRhZGF0YVNlcnZpY2UgfSBmcm9tICcuL01ldGFkYXRhU2VydmljZS5qcyc7XG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XG5cbmV4cG9ydCBjbGFzcyBUb2tlbkNsaWVudCB7XG4gICAgY29uc3RydWN0b3Ioc2V0dGluZ3MsIEpzb25TZXJ2aWNlQ3RvciA9IEpzb25TZXJ2aWNlLCBNZXRhZGF0YVNlcnZpY2VDdG9yID0gTWV0YWRhdGFTZXJ2aWNlKSB7XG4gICAgICAgIGlmICghc2V0dGluZ3MpIHtcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlRva2VuQ2xpZW50LmN0b3I6IE5vIHNldHRpbmdzIHBhc3NlZFwiKTtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInNldHRpbmdzXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fc2V0dGluZ3MgPSBzZXR0aW5ncztcbiAgICAgICAgdGhpcy5fanNvblNlcnZpY2UgPSBuZXcgSnNvblNlcnZpY2VDdG9yKCk7XG4gICAgICAgIHRoaXMuX21ldGFkYXRhU2VydmljZSA9IG5ldyBNZXRhZGF0YVNlcnZpY2VDdG9yKHRoaXMuX3NldHRpbmdzKTtcbiAgICB9XG5cbiAgICBleGNoYW5nZUNvZGUoYXJncyA9IHt9KSB7XG4gICAgICAgIGFyZ3MgPSBPYmplY3QuYXNzaWduKHt9LCBhcmdzKTtcblxuICAgICAgICBhcmdzLmdyYW50X3R5cGUgPSBhcmdzLmdyYW50X3R5cGUgfHwgXCJhdXRob3JpemF0aW9uX2NvZGVcIjtcbiAgICAgICAgYXJncy5jbGllbnRfaWQgPSBhcmdzLmNsaWVudF9pZCB8fCB0aGlzLl9zZXR0aW5ncy5jbGllbnRfaWQ7XG4gICAgICAgIGFyZ3MucmVkaXJlY3RfdXJpID0gYXJncy5yZWRpcmVjdF91cmkgfHwgdGhpcy5fc2V0dGluZ3MucmVkaXJlY3RfdXJpO1xuXG4gICAgICAgIGlmICghYXJncy5jb2RlKSB7XG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJUb2tlbkNsaWVudC5leGNoYW5nZUNvZGU6IE5vIGNvZGUgcGFzc2VkXCIpO1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIkEgY29kZSBpcyByZXF1aXJlZFwiKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFhcmdzLnJlZGlyZWN0X3VyaSkge1xuICAgICAgICAgICAgTG9nLmVycm9yKFwiVG9rZW5DbGllbnQuZXhjaGFuZ2VDb2RlOiBObyByZWRpcmVjdF91cmkgcGFzc2VkXCIpO1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIkEgcmVkaXJlY3RfdXJpIGlzIHJlcXVpcmVkXCIpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWFyZ3MuY29kZV92ZXJpZmllcikge1xuICAgICAgICAgICAgTG9nLmVycm9yKFwiVG9rZW5DbGllbnQuZXhjaGFuZ2VDb2RlOiBObyBjb2RlX3ZlcmlmaWVyIHBhc3NlZFwiKTtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJBIGNvZGVfdmVyaWZpZXIgaXMgcmVxdWlyZWRcIikpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghYXJncy5jbGllbnRfaWQpIHtcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlRva2VuQ2xpZW50LmV4Y2hhbmdlQ29kZTogTm8gY2xpZW50X2lkIHBhc3NlZFwiKTtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJBIGNsaWVudF9pZCBpcyByZXF1aXJlZFwiKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5fbWV0YWRhdGFTZXJ2aWNlLmdldFRva2VuRW5kcG9pbnQoZmFsc2UpLnRoZW4odXJsID0+IHtcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlRva2VuQ2xpZW50LmV4Y2hhbmdlQ29kZTogUmVjZWl2ZWQgdG9rZW4gZW5kcG9pbnRcIik7XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9qc29uU2VydmljZS5wb3N0Rm9ybSh1cmwsIGFyZ3MpLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlRva2VuQ2xpZW50LmV4Y2hhbmdlQ29kZTogcmVzcG9uc2UgcmVjZWl2ZWRcIik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGV4Y2hhbmdlUmVmcmVzaFRva2VuKGFyZ3MgPSB7fSkge1xuICAgICAgICBhcmdzID0gT2JqZWN0LmFzc2lnbih7fSwgYXJncyk7XG5cbiAgICAgICAgYXJncy5ncmFudF90eXBlID0gYXJncy5ncmFudF90eXBlIHx8IFwicmVmcmVzaF90b2tlblwiO1xuICAgICAgICBhcmdzLmNsaWVudF9pZCA9IGFyZ3MuY2xpZW50X2lkIHx8IHRoaXMuX3NldHRpbmdzLmNsaWVudF9pZDtcbiAgICAgICAgYXJncy5jbGllbnRfc2VjcmV0ID0gYXJncy5jbGllbnRfc2VjcmV0IHx8IHRoaXMuX3NldHRpbmdzLmNsaWVudF9zZWNyZXQ7XG5cbiAgICAgICAgaWYgKCFhcmdzLnJlZnJlc2hfdG9rZW4pIHtcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlRva2VuQ2xpZW50LmV4Y2hhbmdlUmVmcmVzaFRva2VuOiBObyByZWZyZXNoX3Rva2VuIHBhc3NlZFwiKTtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJBIHJlZnJlc2hfdG9rZW4gaXMgcmVxdWlyZWRcIikpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghYXJncy5jbGllbnRfaWQpIHtcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlRva2VuQ2xpZW50LmV4Y2hhbmdlUmVmcmVzaFRva2VuOiBObyBjbGllbnRfaWQgcGFzc2VkXCIpO1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIkEgY2xpZW50X2lkIGlzIHJlcXVpcmVkXCIpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLl9tZXRhZGF0YVNlcnZpY2UuZ2V0VG9rZW5FbmRwb2ludChmYWxzZSkudGhlbih1cmwgPT4ge1xuICAgICAgICAgICAgTG9nLmRlYnVnKFwiVG9rZW5DbGllbnQuZXhjaGFuZ2VSZWZyZXNoVG9rZW46IFJlY2VpdmVkIHRva2VuIGVuZHBvaW50XCIpO1xuXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fanNvblNlcnZpY2UucG9zdEZvcm0odXJsLCBhcmdzKS50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJUb2tlbkNsaWVudC5leGNoYW5nZVJlZnJlc2hUb2tlbjogcmVzcG9uc2UgcmVjZWl2ZWRcIik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXG5cbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcbmltcG9ydCB7IE1ldGFkYXRhU2VydmljZSB9IGZyb20gJy4vTWV0YWRhdGFTZXJ2aWNlLmpzJztcbmltcG9ydCB7IEdsb2JhbCB9IGZyb20gJy4vR2xvYmFsLmpzJztcblxuY29uc3QgQWNjZXNzVG9rZW5UeXBlSGludCA9IFwiYWNjZXNzX3Rva2VuXCI7XG5jb25zdCBSZWZyZXNoVG9rZW5UeXBlSGludCA9IFwicmVmcmVzaF90b2tlblwiO1xuXG5leHBvcnQgY2xhc3MgVG9rZW5SZXZvY2F0aW9uQ2xpZW50IHtcbiAgICBjb25zdHJ1Y3RvcihzZXR0aW5ncywgWE1MSHR0cFJlcXVlc3RDdG9yID0gR2xvYmFsLlhNTEh0dHBSZXF1ZXN0LCBNZXRhZGF0YVNlcnZpY2VDdG9yID0gTWV0YWRhdGFTZXJ2aWNlKSB7XG4gICAgICAgIGlmICghc2V0dGluZ3MpIHtcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlRva2VuUmV2b2NhdGlvbkNsaWVudC5jdG9yOiBObyBzZXR0aW5ncyBwcm92aWRlZFwiKTtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHNldHRpbmdzIHByb3ZpZGVkLlwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3NldHRpbmdzID0gc2V0dGluZ3M7XG4gICAgICAgIHRoaXMuX1hNTEh0dHBSZXF1ZXN0Q3RvciA9IFhNTEh0dHBSZXF1ZXN0Q3RvcjtcbiAgICAgICAgdGhpcy5fbWV0YWRhdGFTZXJ2aWNlID0gbmV3IE1ldGFkYXRhU2VydmljZUN0b3IodGhpcy5fc2V0dGluZ3MpO1xuICAgIH1cblxuICAgIHJldm9rZSh0b2tlbiwgcmVxdWlyZWQsIHR5cGUgPSBcImFjY2Vzc190b2tlblwiKSB7XG4gICAgICAgIGlmICghdG9rZW4pIHtcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlRva2VuUmV2b2NhdGlvbkNsaWVudC5yZXZva2U6IE5vIHRva2VuIHByb3ZpZGVkXCIpO1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gdG9rZW4gcHJvdmlkZWQuXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGUgIT09IEFjY2Vzc1Rva2VuVHlwZUhpbnQgJiYgdHlwZSAhPSBSZWZyZXNoVG9rZW5UeXBlSGludCkge1xuICAgICAgICAgICAgTG9nLmVycm9yKFwiVG9rZW5SZXZvY2F0aW9uQ2xpZW50LnJldm9rZTogSW52YWxpZCB0b2tlbiB0eXBlXCIpO1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCB0b2tlbiB0eXBlLlwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLl9tZXRhZGF0YVNlcnZpY2UuZ2V0UmV2b2NhdGlvbkVuZHBvaW50KCkudGhlbih1cmwgPT4ge1xuICAgICAgICAgICAgaWYgKCF1cmwpIHtcbiAgICAgICAgICAgICAgICBpZiAocmVxdWlyZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiVG9rZW5SZXZvY2F0aW9uQ2xpZW50LnJldm9rZTogUmV2b2NhdGlvbiBub3Qgc3VwcG9ydGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJSZXZvY2F0aW9uIG5vdCBzdXBwb3J0ZWRcIik7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gbm90IHJlcXVpcmVkLCBzbyBkb24ndCBlcnJvciBhbmQganVzdCByZXR1cm5cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlRva2VuUmV2b2NhdGlvbkNsaWVudC5yZXZva2U6IFJldm9raW5nIFwiICsgdHlwZSk7XG4gICAgICAgICAgICB2YXIgY2xpZW50X2lkID0gdGhpcy5fc2V0dGluZ3MuY2xpZW50X2lkO1xuICAgICAgICAgICAgdmFyIGNsaWVudF9zZWNyZXQgPSB0aGlzLl9zZXR0aW5ncy5jbGllbnRfc2VjcmV0O1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Jldm9rZSh1cmwsIGNsaWVudF9pZCwgY2xpZW50X3NlY3JldCwgdG9rZW4sIHR5cGUpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBfcmV2b2tlKHVybCwgY2xpZW50X2lkLCBjbGllbnRfc2VjcmV0LCB0b2tlbiwgdHlwZSkge1xuXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cbiAgICAgICAgICAgIHZhciB4aHIgPSBuZXcgdGhpcy5fWE1MSHR0cFJlcXVlc3RDdG9yKCk7XG4gICAgICAgICAgICB4aHIub3BlbihcIlBPU1RcIiwgdXJsKTtcblxuICAgICAgICAgICAgeGhyLm9ubG9hZCA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJUb2tlblJldm9jYXRpb25DbGllbnQucmV2b2tlOiBIVFRQIHJlc3BvbnNlIHJlY2VpdmVkLCBzdGF0dXNcIiwgeGhyLnN0YXR1cyk7XG5cbiAgICAgICAgICAgICAgICBpZiAoeGhyLnN0YXR1cyA9PT0gMjAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChFcnJvcih4aHIuc3RhdHVzVGV4dCArIFwiIChcIiArIHhoci5zdGF0dXMgKyBcIilcIikpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB4aHIub25lcnJvciA9ICgpID0+IHsgXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiVG9rZW5SZXZvY2F0aW9uQ2xpZW50LnJldm9rZTogTmV0d29yayBFcnJvci5cIilcbiAgICAgICAgICAgICAgICByZWplY3QoXCJOZXR3b3JrIEVycm9yXCIpO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgdmFyIGJvZHkgPSBcImNsaWVudF9pZD1cIiArIGVuY29kZVVSSUNvbXBvbmVudChjbGllbnRfaWQpO1xuICAgICAgICAgICAgaWYgKGNsaWVudF9zZWNyZXQpIHtcbiAgICAgICAgICAgICAgICBib2R5ICs9IFwiJmNsaWVudF9zZWNyZXQ9XCIgKyBlbmNvZGVVUklDb21wb25lbnQoY2xpZW50X3NlY3JldCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBib2R5ICs9IFwiJnRva2VuX3R5cGVfaGludD1cIiArIGVuY29kZVVSSUNvbXBvbmVudCh0eXBlKTtcbiAgICAgICAgICAgIGJvZHkgKz0gXCImdG9rZW49XCIgKyBlbmNvZGVVUklDb21wb25lbnQodG9rZW4pO1xuXG4gICAgICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcihcIkNvbnRlbnQtVHlwZVwiLCBcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiKTtcbiAgICAgICAgICAgIHhoci5zZW5kKGJvZHkpO1xuICAgICAgICB9KTtcbiAgICB9XG59XG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxuXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XG5pbXBvcnQgeyBHbG9iYWwgfSBmcm9tICcuL0dsb2JhbC5qcyc7XG5cbmV4cG9ydCBjbGFzcyBVcmxVdGlsaXR5IHtcbiAgICBzdGF0aWMgYWRkUXVlcnlQYXJhbSh1cmwsIG5hbWUsIHZhbHVlKSB7XG4gICAgICAgIGlmICh1cmwuaW5kZXhPZignPycpIDwgMCkge1xuICAgICAgICAgICAgdXJsICs9IFwiP1wiO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHVybFt1cmwubGVuZ3RoIC0gMV0gIT09IFwiP1wiKSB7XG4gICAgICAgICAgICB1cmwgKz0gXCImXCI7XG4gICAgICAgIH1cblxuICAgICAgICB1cmwgKz0gZW5jb2RlVVJJQ29tcG9uZW50KG5hbWUpO1xuICAgICAgICB1cmwgKz0gXCI9XCI7XG4gICAgICAgIHVybCArPSBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpO1xuXG4gICAgICAgIHJldHVybiB1cmw7XG4gICAgfVxuXG4gICAgc3RhdGljIHBhcnNlVXJsRnJhZ21lbnQodmFsdWUsIGRlbGltaXRlciA9IFwiI1wiLCBnbG9iYWwgPSBHbG9iYWwpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpe1xuICAgICAgICAgICAgdmFsdWUgPSBnbG9iYWwubG9jYXRpb24uaHJlZjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBpZHggPSB2YWx1ZS5sYXN0SW5kZXhPZihkZWxpbWl0ZXIpO1xuICAgICAgICBpZiAoaWR4ID49IDApIHtcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuc3Vic3RyKGlkeCArIDEpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRlbGltaXRlciA9PT0gXCI/XCIpIHtcbiAgICAgICAgICAgIC8vIGlmIHdlJ3JlIGRvaW5nIHF1ZXJ5LCB0aGVuIHN0cmlwIG9mZiBoYXNoIGZyYWdtZW50IGJlZm9yZSB3ZSBwYXJzZVxuICAgICAgICAgICAgaWR4ID0gdmFsdWUuaW5kZXhPZignIycpO1xuICAgICAgICAgICAgaWYgKGlkeCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5zdWJzdHIoMCwgaWR4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBwYXJhbXMgPSB7fSxcbiAgICAgICAgICAgIHJlZ2V4ID0gLyhbXiY9XSspPShbXiZdKikvZyxcbiAgICAgICAgICAgIG07XG5cbiAgICAgICAgdmFyIGNvdW50ZXIgPSAwO1xuICAgICAgICB3aGlsZSAobSA9IHJlZ2V4LmV4ZWModmFsdWUpKSB7XG4gICAgICAgICAgICBwYXJhbXNbZGVjb2RlVVJJQ29tcG9uZW50KG1bMV0pXSA9IGRlY29kZVVSSUNvbXBvbmVudChtWzJdKTtcbiAgICAgICAgICAgIGlmIChjb3VudGVyKysgPiA1MCkge1xuICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIlVybFV0aWxpdHkucGFyc2VVcmxGcmFnbWVudDogcmVzcG9uc2UgZXhjZWVkZWQgZXhwZWN0ZWQgbnVtYmVyIG9mIHBhcmFtZXRlcnNcIiwgdmFsdWUpO1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiBcIlJlc3BvbnNlIGV4Y2VlZGVkIGV4cGVjdGVkIG51bWJlciBvZiBwYXJhbWV0ZXJzXCJcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZm9yICh2YXIgcHJvcCBpbiBwYXJhbXMpIHtcbiAgICAgICAgICAgIHJldHVybiBwYXJhbXM7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge307XG4gICAgfVxufVxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cblxuaW1wb3J0IHsgTG9nIH0gZnJvbSAnLi9Mb2cuanMnO1xuXG5leHBvcnQgY2xhc3MgVXNlciB7XG4gICAgY29uc3RydWN0b3Ioe2lkX3Rva2VuLCBzZXNzaW9uX3N0YXRlLCBhY2Nlc3NfdG9rZW4sIHJlZnJlc2hfdG9rZW4sIHRva2VuX3R5cGUsIHNjb3BlLCBwcm9maWxlLCBleHBpcmVzX2F0LCBzdGF0ZX0pIHtcbiAgICAgICAgdGhpcy5pZF90b2tlbiA9IGlkX3Rva2VuO1xuICAgICAgICB0aGlzLnNlc3Npb25fc3RhdGUgPSBzZXNzaW9uX3N0YXRlO1xuICAgICAgICB0aGlzLmFjY2Vzc190b2tlbiA9IGFjY2Vzc190b2tlbjtcbiAgICAgICAgdGhpcy5yZWZyZXNoX3Rva2VuID0gcmVmcmVzaF90b2tlbjtcbiAgICAgICAgdGhpcy50b2tlbl90eXBlID0gdG9rZW5fdHlwZTtcbiAgICAgICAgdGhpcy5zY29wZSA9IHNjb3BlO1xuICAgICAgICB0aGlzLnByb2ZpbGUgPSBwcm9maWxlO1xuICAgICAgICB0aGlzLmV4cGlyZXNfYXQgPSBleHBpcmVzX2F0O1xuICAgICAgICB0aGlzLnN0YXRlID0gc3RhdGU7XG4gICAgfVxuXG4gICAgZ2V0IGV4cGlyZXNfaW4oKSB7XG4gICAgICAgIGlmICh0aGlzLmV4cGlyZXNfYXQpIHtcbiAgICAgICAgICAgIGxldCBub3cgPSBwYXJzZUludChEYXRlLm5vdygpIC8gMTAwMCk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5leHBpcmVzX2F0IC0gbm93O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHNldCBleHBpcmVzX2luKHZhbHVlKSB7XG4gICAgICAgIGxldCBleHBpcmVzX2luID0gcGFyc2VJbnQodmFsdWUpO1xuICAgICAgICBpZiAodHlwZW9mIGV4cGlyZXNfaW4gPT09ICdudW1iZXInICYmIGV4cGlyZXNfaW4gPiAwKSB7XG4gICAgICAgICAgICBsZXQgbm93ID0gcGFyc2VJbnQoRGF0ZS5ub3coKSAvIDEwMDApO1xuICAgICAgICAgICAgdGhpcy5leHBpcmVzX2F0ID0gbm93ICsgZXhwaXJlc19pbjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldCBleHBpcmVkKCkge1xuICAgICAgICBsZXQgZXhwaXJlc19pbiA9IHRoaXMuZXhwaXJlc19pbjtcbiAgICAgICAgaWYgKGV4cGlyZXNfaW4gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIGV4cGlyZXNfaW4gPD0gMDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGdldCBzY29wZXMoKSB7XG4gICAgICAgIHJldHVybiAodGhpcy5zY29wZSB8fCBcIlwiKS5zcGxpdChcIiBcIik7XG4gICAgfVxuXG4gICAgdG9TdG9yYWdlU3RyaW5nKCkge1xuICAgICAgICBMb2cuZGVidWcoXCJVc2VyLnRvU3RvcmFnZVN0cmluZ1wiKTtcbiAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgIGlkX3Rva2VuOiB0aGlzLmlkX3Rva2VuLFxuICAgICAgICAgICAgc2Vzc2lvbl9zdGF0ZTogdGhpcy5zZXNzaW9uX3N0YXRlLFxuICAgICAgICAgICAgYWNjZXNzX3Rva2VuOiB0aGlzLmFjY2Vzc190b2tlbixcbiAgICAgICAgICAgIHJlZnJlc2hfdG9rZW46IHRoaXMucmVmcmVzaF90b2tlbixcbiAgICAgICAgICAgIHRva2VuX3R5cGU6IHRoaXMudG9rZW5fdHlwZSxcbiAgICAgICAgICAgIHNjb3BlOiB0aGlzLnNjb3BlLFxuICAgICAgICAgICAgcHJvZmlsZTogdGhpcy5wcm9maWxlLFxuICAgICAgICAgICAgZXhwaXJlc19hdDogdGhpcy5leHBpcmVzX2F0XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHN0YXRpYyBmcm9tU3RvcmFnZVN0cmluZyhzdG9yYWdlU3RyaW5nKSB7XG4gICAgICAgIExvZy5kZWJ1ZyhcIlVzZXIuZnJvbVN0b3JhZ2VTdHJpbmdcIik7XG4gICAgICAgIHJldHVybiBuZXcgVXNlcihKU09OLnBhcnNlKHN0b3JhZ2VTdHJpbmcpKTtcbiAgICB9XG59XG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxuXG5pbXBvcnQgeyBKc29uU2VydmljZSB9IGZyb20gJy4vSnNvblNlcnZpY2UuanMnO1xuaW1wb3J0IHsgTWV0YWRhdGFTZXJ2aWNlIH0gZnJvbSAnLi9NZXRhZGF0YVNlcnZpY2UuanMnO1xuaW1wb3J0IHsgTG9nIH0gZnJvbSAnLi9Mb2cuanMnO1xuaW1wb3J0IHsgSm9zZVV0aWwgfSBmcm9tICcuL0pvc2VVdGlsLmpzJztcblxuZXhwb3J0IGNsYXNzIFVzZXJJbmZvU2VydmljZSB7XG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHNldHRpbmdzLCBcbiAgICAgICAgSnNvblNlcnZpY2VDdG9yID0gSnNvblNlcnZpY2UsIFxuICAgICAgICBNZXRhZGF0YVNlcnZpY2VDdG9yID0gTWV0YWRhdGFTZXJ2aWNlLCBcbiAgICAgICAgam9zZVV0aWwgPSBKb3NlVXRpbFxuICAgICkge1xuICAgICAgICBpZiAoIXNldHRpbmdzKSB7XG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJVc2VySW5mb1NlcnZpY2UuY3RvcjogTm8gc2V0dGluZ3MgcGFzc2VkXCIpO1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwic2V0dGluZ3NcIik7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9zZXR0aW5ncyA9IHNldHRpbmdzO1xuICAgICAgICB0aGlzLl9qc29uU2VydmljZSA9IG5ldyBKc29uU2VydmljZUN0b3IodW5kZWZpbmVkLCB1bmRlZmluZWQsIHRoaXMuX2dldENsYWltc0Zyb21Kd3QuYmluZCh0aGlzKSk7XG4gICAgICAgIHRoaXMuX21ldGFkYXRhU2VydmljZSA9IG5ldyBNZXRhZGF0YVNlcnZpY2VDdG9yKHRoaXMuX3NldHRpbmdzKTtcbiAgICAgICAgdGhpcy5fam9zZVV0aWwgPSBqb3NlVXRpbDtcbiAgICB9XG5cbiAgICBnZXRDbGFpbXModG9rZW4pIHtcbiAgICAgICAgaWYgKCF0b2tlbikge1xuICAgICAgICAgICAgTG9nLmVycm9yKFwiVXNlckluZm9TZXJ2aWNlLmdldENsYWltczogTm8gdG9rZW4gcGFzc2VkXCIpO1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIkEgdG9rZW4gaXMgcmVxdWlyZWRcIikpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX21ldGFkYXRhU2VydmljZS5nZXRVc2VySW5mb0VuZHBvaW50KCkudGhlbih1cmwgPT4ge1xuICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlckluZm9TZXJ2aWNlLmdldENsYWltczogcmVjZWl2ZWQgdXNlcmluZm8gdXJsXCIsIHVybCk7XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9qc29uU2VydmljZS5nZXRKc29uKHVybCwgdG9rZW4pLnRoZW4oY2xhaW1zID0+IHtcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VySW5mb1NlcnZpY2UuZ2V0Q2xhaW1zOiBjbGFpbXMgcmVjZWl2ZWRcIiwgY2xhaW1zKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1zO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIF9nZXRDbGFpbXNGcm9tSnd0KHJlcSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbGV0IGp3dCA9IHRoaXMuX2pvc2VVdGlsLnBhcnNlSnd0KHJlcS5yZXNwb25zZVRleHQpO1xuICAgICAgICAgICAgaWYgKCFqd3QgfHwgIWp3dC5oZWFkZXIgfHwgIWp3dC5wYXlsb2FkKSB7XG4gICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiVXNlckluZm9TZXJ2aWNlLl9nZXRDbGFpbXNGcm9tSnd0OiBGYWlsZWQgdG8gcGFyc2UgSldUXCIsIGp3dCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIkZhaWxlZCB0byBwYXJzZSBpZF90b2tlblwiKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBraWQgPSBqd3QuaGVhZGVyLmtpZDtcblxuICAgICAgICAgICAgbGV0IGlzc3VlclByb21pc2U7XG4gICAgICAgICAgICBzd2l0Y2ggKHRoaXMuX3NldHRpbmdzLnVzZXJJbmZvSnd0SXNzdWVyKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnT1AnOlxuICAgICAgICAgICAgICAgICAgICBpc3N1ZXJQcm9taXNlID0gdGhpcy5fbWV0YWRhdGFTZXJ2aWNlLmdldElzc3VlcigpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdBTlknOlxuICAgICAgICAgICAgICAgICAgICBpc3N1ZXJQcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKGp3dC5wYXlsb2FkLmlzcyk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGlzc3VlclByb21pc2UgPSBQcm9taXNlLnJlc29sdmUodGhpcy5fc2V0dGluZ3MudXNlckluZm9Kd3RJc3N1ZXIpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGlzc3VlclByb21pc2UudGhlbihpc3N1ZXIgPT4ge1xuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJJbmZvU2VydmljZS5fZ2V0Q2xhaW1zRnJvbUp3dDogUmVjZWl2ZWQgaXNzdWVyOlwiICsgaXNzdWVyKTtcblxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9tZXRhZGF0YVNlcnZpY2UuZ2V0U2lnbmluZ0tleXMoKS50aGVuKGtleXMgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWtleXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIlVzZXJJbmZvU2VydmljZS5fZ2V0Q2xhaW1zRnJvbUp3dDogTm8gc2lnbmluZyBrZXlzIGZyb20gbWV0YWRhdGFcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiTm8gc2lnbmluZyBrZXlzIGZyb20gbWV0YWRhdGFcIikpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlckluZm9TZXJ2aWNlLl9nZXRDbGFpbXNGcm9tSnd0OiBSZWNlaXZlZCBzaWduaW5nIGtleXNcIik7XG4gICAgICAgICAgICAgICAgICAgIGxldCBrZXk7XG4gICAgICAgICAgICAgICAgICAgIGlmICgha2lkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBrZXlzID0gdGhpcy5fZmlsdGVyQnlBbGcoa2V5cywgand0LmhlYWRlci5hbGcpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoa2V5cy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiVXNlckluZm9TZXJ2aWNlLl9nZXRDbGFpbXNGcm9tSnd0OiBObyBraWQgZm91bmQgaW4gaWRfdG9rZW4gYW5kIG1vcmUgdGhhbiBvbmUga2V5IGZvdW5kIGluIG1ldGFkYXRhXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJObyBraWQgZm91bmQgaW4gaWRfdG9rZW4gYW5kIG1vcmUgdGhhbiBvbmUga2V5IGZvdW5kIGluIG1ldGFkYXRhXCIpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGtpZCBpcyBtYW5kYXRvcnkgb25seSB3aGVuIHRoZXJlIGFyZSBtdWx0aXBsZSBrZXlzIGluIHRoZSByZWZlcmVuY2VkIEpXSyBTZXQgZG9jdW1lbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzZWUgaHR0cDovL29wZW5pZC5uZXQvc3BlY3Mvb3BlbmlkLWNvbm5lY3QtY29yZS0xXzAuaHRtbCNTaWduaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5ID0ga2V5c1swXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleSA9IGtleXMuZmlsdGVyKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGtleS5raWQgPT09IGtpZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pWzBdO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKCFrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIlVzZXJJbmZvU2VydmljZS5fZ2V0Q2xhaW1zRnJvbUp3dDogTm8ga2V5IG1hdGNoaW5nIGtpZCBvciBhbGcgZm91bmQgaW4gc2lnbmluZyBrZXlzXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIk5vIGtleSBtYXRjaGluZyBraWQgb3IgYWxnIGZvdW5kIGluIHNpZ25pbmcga2V5c1wiKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBsZXQgYXVkaWVuY2UgPSB0aGlzLl9zZXR0aW5ncy5jbGllbnRfaWQ7XG5cbiAgICAgICAgICAgICAgICAgICAgbGV0IGNsb2NrU2tld0luU2Vjb25kcyA9IHRoaXMuX3NldHRpbmdzLmNsb2NrU2tldztcbiAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlckluZm9TZXJ2aWNlLl9nZXRDbGFpbXNGcm9tSnd0OiBWYWxpZGFpbmcgSldUOyB1c2luZyBjbG9jayBza2V3IChpbiBzZWNvbmRzKSBvZjogXCIsIGNsb2NrU2tld0luU2Vjb25kcyk7XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2pvc2VVdGlsLnZhbGlkYXRlSnd0KHJlcS5yZXNwb25zZVRleHQsIGtleSwgaXNzdWVyLCBhdWRpZW5jZSwgY2xvY2tTa2V3SW5TZWNvbmRzLCB1bmRlZmluZWQsIHRydWUpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlckluZm9TZXJ2aWNlLl9nZXRDbGFpbXNGcm9tSnd0OiBKV1QgdmFsaWRhdGlvbiBzdWNjZXNzZnVsXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGp3dC5wYXlsb2FkO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJVc2VySW5mb1NlcnZpY2UuX2dldENsYWltc0Zyb21Kd3Q6IEVycm9yIHBhcnNpbmcgSldUIHJlc3BvbnNlXCIsIGUubWVzc2FnZSk7XG4gICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfZmlsdGVyQnlBbGcoa2V5cywgYWxnKSB7XG4gICAgICAgIHZhciBrdHkgPSBudWxsO1xuICAgICAgICBpZiAoYWxnLnN0YXJ0c1dpdGgoXCJSU1wiKSkge1xuICAgICAgICAgICAga3R5ID0gXCJSU0FcIjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChhbGcuc3RhcnRzV2l0aChcIlBTXCIpKSB7XG4gICAgICAgICAgICBrdHkgPSBcIlBTXCI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoYWxnLnN0YXJ0c1dpdGgoXCJFU1wiKSkge1xuICAgICAgICAgICAga3R5ID0gXCJFQ1wiO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlckluZm9TZXJ2aWNlLl9maWx0ZXJCeUFsZzogYWxnIG5vdCBzdXBwb3J0ZWQ6IFwiLCBhbGcpO1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgTG9nLmRlYnVnKFwiVXNlckluZm9TZXJ2aWNlLl9maWx0ZXJCeUFsZzogTG9va2luZyBmb3Iga2V5cyB0aGF0IG1hdGNoIGt0eTogXCIsIGt0eSk7XG5cbiAgICAgICAga2V5cyA9IGtleXMuZmlsdGVyKGtleSA9PiB7XG4gICAgICAgICAgICByZXR1cm4ga2V5Lmt0eSA9PT0ga3R5O1xuICAgICAgICB9KTtcblxuICAgICAgICBMb2cuZGVidWcoXCJVc2VySW5mb1NlcnZpY2UuX2ZpbHRlckJ5QWxnOiBOdW1iZXIgb2Yga2V5cyB0aGF0IG1hdGNoIGt0eTogXCIsIGt0eSwga2V5cy5sZW5ndGgpO1xuXG4gICAgICAgIHJldHVybiBrZXlzO1xuICAgIH1cbn1cbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXG5cbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcbmltcG9ydCB7IE9pZGNDbGllbnQgfSBmcm9tICcuL09pZGNDbGllbnQuanMnO1xuaW1wb3J0IHsgVXNlck1hbmFnZXJTZXR0aW5ncyB9IGZyb20gJy4vVXNlck1hbmFnZXJTZXR0aW5ncy5qcyc7XG5pbXBvcnQgeyBVc2VyIH0gZnJvbSAnLi9Vc2VyLmpzJztcbmltcG9ydCB7IFVzZXJNYW5hZ2VyRXZlbnRzIH0gZnJvbSAnLi9Vc2VyTWFuYWdlckV2ZW50cy5qcyc7XG5pbXBvcnQgeyBTaWxlbnRSZW5ld1NlcnZpY2UgfSBmcm9tICcuL1NpbGVudFJlbmV3U2VydmljZS5qcyc7XG5pbXBvcnQgeyBTZXNzaW9uTW9uaXRvciB9IGZyb20gJy4vU2Vzc2lvbk1vbml0b3IuanMnO1xuaW1wb3J0IHsgVG9rZW5SZXZvY2F0aW9uQ2xpZW50IH0gZnJvbSAnLi9Ub2tlblJldm9jYXRpb25DbGllbnQuanMnO1xuaW1wb3J0IHsgVG9rZW5DbGllbnQgfSBmcm9tICcuL1Rva2VuQ2xpZW50LmpzJztcbmltcG9ydCB7IEpvc2VVdGlsIH0gZnJvbSAnLi9Kb3NlVXRpbC5qcyc7XG5cblxuZXhwb3J0IGNsYXNzIFVzZXJNYW5hZ2VyIGV4dGVuZHMgT2lkY0NsaWVudCB7XG4gICAgY29uc3RydWN0b3Ioc2V0dGluZ3MgPSB7fSxcbiAgICAgICAgU2lsZW50UmVuZXdTZXJ2aWNlQ3RvciA9IFNpbGVudFJlbmV3U2VydmljZSxcbiAgICAgICAgU2Vzc2lvbk1vbml0b3JDdG9yID0gU2Vzc2lvbk1vbml0b3IsXG4gICAgICAgIFRva2VuUmV2b2NhdGlvbkNsaWVudEN0b3IgPSBUb2tlblJldm9jYXRpb25DbGllbnQsXG4gICAgICAgIFRva2VuQ2xpZW50Q3RvciA9IFRva2VuQ2xpZW50LFxuICAgICAgICBqb3NlVXRpbCA9IEpvc2VVdGlsXG4gICAgKSB7XG5cbiAgICAgICAgaWYgKCEoc2V0dGluZ3MgaW5zdGFuY2VvZiBVc2VyTWFuYWdlclNldHRpbmdzKSkge1xuICAgICAgICAgICAgc2V0dGluZ3MgPSBuZXcgVXNlck1hbmFnZXJTZXR0aW5ncyhzZXR0aW5ncyk7XG4gICAgICAgIH1cbiAgICAgICAgc3VwZXIoc2V0dGluZ3MpO1xuXG4gICAgICAgIHRoaXMuX2V2ZW50cyA9IG5ldyBVc2VyTWFuYWdlckV2ZW50cyhzZXR0aW5ncyk7XG4gICAgICAgIHRoaXMuX3NpbGVudFJlbmV3U2VydmljZSA9IG5ldyBTaWxlbnRSZW5ld1NlcnZpY2VDdG9yKHRoaXMpO1xuXG4gICAgICAgIC8vIG9yZGVyIGlzIGltcG9ydGFudCBmb3IgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOyB0aGVzZSBzZXJ2aWNlcyBkZXBlbmQgdXBvbiB0aGUgZXZlbnRzLlxuICAgICAgICBpZiAodGhpcy5zZXR0aW5ncy5hdXRvbWF0aWNTaWxlbnRSZW5ldykge1xuICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXIuY3RvcjogYXV0b21hdGljU2lsZW50UmVuZXcgaXMgY29uZmlndXJlZCwgc2V0dGluZyB1cCBzaWxlbnQgcmVuZXdcIik7XG4gICAgICAgICAgICB0aGlzLnN0YXJ0U2lsZW50UmVuZXcoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnNldHRpbmdzLm1vbml0b3JTZXNzaW9uKSB7XG4gICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlci5jdG9yOiBtb25pdG9yU2Vzc2lvbiBpcyBjb25maWd1cmVkLCBzZXR0aW5nIHVwIHNlc3Npb24gbW9uaXRvclwiKTtcbiAgICAgICAgICAgIHRoaXMuX3Nlc3Npb25Nb25pdG9yID0gbmV3IFNlc3Npb25Nb25pdG9yQ3Rvcih0aGlzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3Rva2VuUmV2b2NhdGlvbkNsaWVudCA9IG5ldyBUb2tlblJldm9jYXRpb25DbGllbnRDdG9yKHRoaXMuX3NldHRpbmdzKTtcbiAgICAgICAgdGhpcy5fdG9rZW5DbGllbnQgPSBuZXcgVG9rZW5DbGllbnRDdG9yKHRoaXMuX3NldHRpbmdzKTtcbiAgICAgICAgdGhpcy5fam9zZVV0aWwgPSBqb3NlVXRpbDtcbiAgICB9XG5cbiAgICBnZXQgX3JlZGlyZWN0TmF2aWdhdG9yKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zZXR0aW5ncy5yZWRpcmVjdE5hdmlnYXRvcjtcbiAgICB9XG4gICAgZ2V0IF9wb3B1cE5hdmlnYXRvcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0dGluZ3MucG9wdXBOYXZpZ2F0b3I7XG4gICAgfVxuICAgIGdldCBfaWZyYW1lTmF2aWdhdG9yKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zZXR0aW5ncy5pZnJhbWVOYXZpZ2F0b3I7XG4gICAgfVxuICAgIGdldCBfdXNlclN0b3JlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zZXR0aW5ncy51c2VyU3RvcmU7XG4gICAgfVxuXG4gICAgZ2V0IGV2ZW50cygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2V2ZW50cztcbiAgICB9XG5cbiAgICBnZXRVc2VyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbG9hZFVzZXIoKS50aGVuKHVzZXIgPT4ge1xuICAgICAgICAgICAgaWYgKHVzZXIpIHtcbiAgICAgICAgICAgICAgICBMb2cuaW5mbyhcIlVzZXJNYW5hZ2VyLmdldFVzZXI6IHVzZXIgbG9hZGVkXCIpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5fZXZlbnRzLmxvYWQodXNlciwgZmFsc2UpO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHVzZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBMb2cuaW5mbyhcIlVzZXJNYW5hZ2VyLmdldFVzZXI6IHVzZXIgbm90IGZvdW5kIGluIHN0b3JhZ2VcIik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHJlbW92ZVVzZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0b3JlVXNlcihudWxsKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIExvZy5pbmZvKFwiVXNlck1hbmFnZXIucmVtb3ZlVXNlcjogdXNlciByZW1vdmVkIGZyb20gc3RvcmFnZVwiKTtcbiAgICAgICAgICAgIHRoaXMuX2V2ZW50cy51bmxvYWQoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgc2lnbmluUmVkaXJlY3QoYXJncyA9IHt9KSB7XG4gICAgICAgIGFyZ3MgPSBPYmplY3QuYXNzaWduKHt9LCBhcmdzKTtcblxuICAgICAgICBhcmdzLnJlcXVlc3RfdHlwZSA9IFwic2k6clwiO1xuICAgICAgICBsZXQgbmF2UGFyYW1zID0ge1xuICAgICAgICAgICAgdXNlUmVwbGFjZVRvTmF2aWdhdGUgOiBhcmdzLnVzZVJlcGxhY2VUb05hdmlnYXRlXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiB0aGlzLl9zaWduaW5TdGFydChhcmdzLCB0aGlzLl9yZWRpcmVjdE5hdmlnYXRvciwgbmF2UGFyYW1zKS50aGVuKCgpPT57XG4gICAgICAgICAgICBMb2cuaW5mbyhcIlVzZXJNYW5hZ2VyLnNpZ25pblJlZGlyZWN0OiBzdWNjZXNzZnVsXCIpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgc2lnbmluUmVkaXJlY3RDYWxsYmFjayh1cmwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NpZ25pbkVuZCh1cmwgfHwgdGhpcy5fcmVkaXJlY3ROYXZpZ2F0b3IudXJsKS50aGVuKHVzZXIgPT4ge1xuICAgICAgICAgICAgaWYgKHVzZXIucHJvZmlsZSAmJiB1c2VyLnByb2ZpbGUuc3ViKSB7XG4gICAgICAgICAgICAgICAgTG9nLmluZm8oXCJVc2VyTWFuYWdlci5zaWduaW5SZWRpcmVjdENhbGxiYWNrOiBzdWNjZXNzZnVsLCBzaWduZWQgaW4gc3ViOiBcIiwgdXNlci5wcm9maWxlLnN1Yik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBMb2cuaW5mbyhcIlVzZXJNYW5hZ2VyLnNpZ25pblJlZGlyZWN0Q2FsbGJhY2s6IG5vIHN1YlwiKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHVzZXI7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHNpZ25pblBvcHVwKGFyZ3MgPSB7fSkge1xuICAgICAgICBhcmdzID0gT2JqZWN0LmFzc2lnbih7fSwgYXJncyk7XG5cbiAgICAgICAgYXJncy5yZXF1ZXN0X3R5cGUgPSBcInNpOnBcIjtcbiAgICAgICAgbGV0IHVybCA9IGFyZ3MucmVkaXJlY3RfdXJpIHx8IHRoaXMuc2V0dGluZ3MucG9wdXBfcmVkaXJlY3RfdXJpIHx8IHRoaXMuc2V0dGluZ3MucmVkaXJlY3RfdXJpO1xuICAgICAgICBpZiAoIXVybCkge1xuICAgICAgICAgICAgTG9nLmVycm9yKFwiVXNlck1hbmFnZXIuc2lnbmluUG9wdXA6IE5vIHBvcHVwX3JlZGlyZWN0X3VyaSBvciByZWRpcmVjdF91cmkgY29uZmlndXJlZFwiKTtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJObyBwb3B1cF9yZWRpcmVjdF91cmkgb3IgcmVkaXJlY3RfdXJpIGNvbmZpZ3VyZWRcIikpO1xuICAgICAgICB9XG5cbiAgICAgICAgYXJncy5yZWRpcmVjdF91cmkgPSB1cmw7XG4gICAgICAgIGFyZ3MuZGlzcGxheSA9IFwicG9wdXBcIjtcblxuICAgICAgICByZXR1cm4gdGhpcy5fc2lnbmluKGFyZ3MsIHRoaXMuX3BvcHVwTmF2aWdhdG9yLCB7XG4gICAgICAgICAgICBzdGFydFVybDogdXJsLFxuICAgICAgICAgICAgcG9wdXBXaW5kb3dGZWF0dXJlczogYXJncy5wb3B1cFdpbmRvd0ZlYXR1cmVzIHx8IHRoaXMuc2V0dGluZ3MucG9wdXBXaW5kb3dGZWF0dXJlcyxcbiAgICAgICAgICAgIHBvcHVwV2luZG93VGFyZ2V0OiBhcmdzLnBvcHVwV2luZG93VGFyZ2V0IHx8IHRoaXMuc2V0dGluZ3MucG9wdXBXaW5kb3dUYXJnZXRcbiAgICAgICAgfSkudGhlbih1c2VyID0+IHtcbiAgICAgICAgICAgIGlmICh1c2VyKSB7XG4gICAgICAgICAgICAgICAgaWYgKHVzZXIucHJvZmlsZSAmJiB1c2VyLnByb2ZpbGUuc3ViKSB7XG4gICAgICAgICAgICAgICAgICAgIExvZy5pbmZvKFwiVXNlck1hbmFnZXIuc2lnbmluUG9wdXA6IHNpZ25pblBvcHVwIHN1Y2Nlc3NmdWwsIHNpZ25lZCBpbiBzdWI6IFwiLCB1c2VyLnByb2ZpbGUuc3ViKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIExvZy5pbmZvKFwiVXNlck1hbmFnZXIuc2lnbmluUG9wdXA6IG5vIHN1YlwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB1c2VyO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgc2lnbmluUG9wdXBDYWxsYmFjayh1cmwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NpZ25pbkNhbGxiYWNrKHVybCwgdGhpcy5fcG9wdXBOYXZpZ2F0b3IpLnRoZW4odXNlciA9PiB7XG4gICAgICAgICAgICBpZiAodXNlcikge1xuICAgICAgICAgICAgICAgIGlmICh1c2VyLnByb2ZpbGUgJiYgdXNlci5wcm9maWxlLnN1Yikge1xuICAgICAgICAgICAgICAgICAgICBMb2cuaW5mbyhcIlVzZXJNYW5hZ2VyLnNpZ25pblBvcHVwQ2FsbGJhY2s6IHN1Y2Nlc3NmdWwsIHNpZ25lZCBpbiBzdWI6IFwiLCB1c2VyLnByb2ZpbGUuc3ViKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIExvZy5pbmZvKFwiVXNlck1hbmFnZXIuc2lnbmluUG9wdXBDYWxsYmFjazogbm8gc3ViXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHVzZXI7XG4gICAgICAgIH0pLmNhdGNoKGVycj0+e1xuICAgICAgICAgICAgTG9nLmVycm9yKFwiVXNlck1hbmFnZXIuc2lnbmluUG9wdXBDYWxsYmFjayBlcnJvcjogXCIgKyBlcnIgJiYgZXJyLm1lc3NhZ2UpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBzaWduaW5TaWxlbnQoYXJncyA9IHt9KSB7XG4gICAgICAgIGFyZ3MgPSBPYmplY3QuYXNzaWduKHt9LCBhcmdzKTtcblxuICAgICAgICBhcmdzLnJlcXVlc3RfdHlwZSA9IFwic2k6c1wiO1xuICAgICAgICAvLyBmaXJzdCBkZXRlcm1pbmUgaWYgd2UgaGF2ZSBhIHJlZnJlc2ggdG9rZW4sIG9yIG5lZWQgdG8gdXNlIGlmcmFtZVxuICAgICAgICByZXR1cm4gdGhpcy5fbG9hZFVzZXIoKS50aGVuKHVzZXIgPT4ge1xuICAgICAgICAgICAgaWYgKHVzZXIgJiYgdXNlci5yZWZyZXNoX3Rva2VuKSB7XG4gICAgICAgICAgICAgICAgYXJncy5yZWZyZXNoX3Rva2VuID0gdXNlci5yZWZyZXNoX3Rva2VuO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl91c2VSZWZyZXNoVG9rZW4oYXJncyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBhcmdzLmlkX3Rva2VuX2hpbnQgPSBhcmdzLmlkX3Rva2VuX2hpbnQgfHwgKHRoaXMuc2V0dGluZ3MuaW5jbHVkZUlkVG9rZW5JblNpbGVudFJlbmV3ICYmIHVzZXIgJiYgdXNlci5pZF90b2tlbik7XG4gICAgICAgICAgICAgICAgaWYgKHVzZXIgJiYgdGhpcy5fc2V0dGluZ3MudmFsaWRhdGVTdWJPblNpbGVudFJlbmV3KSB7XG4gICAgICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyLnNpZ25pblNpbGVudCwgc3ViamVjdCBwcmlvciB0byBzaWxlbnQgcmVuZXc6IFwiLCB1c2VyLnByb2ZpbGUuc3ViKTtcbiAgICAgICAgICAgICAgICAgICAgYXJncy5jdXJyZW50X3N1YiA9IHVzZXIucHJvZmlsZS5zdWI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9zaWduaW5TaWxlbnRJZnJhbWUoYXJncyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIF91c2VSZWZyZXNoVG9rZW4oYXJncyA9IHt9KSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90b2tlbkNsaWVudC5leGNoYW5nZVJlZnJlc2hUb2tlbihhcmdzKS50aGVuKHJlc3VsdCA9PiB7XG4gICAgICAgICAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIlVzZXJNYW5hZ2VyLl91c2VSZWZyZXNoVG9rZW46IE5vIHJlc3BvbnNlIHJldHVybmVkIGZyb20gdG9rZW4gZW5kcG9pbnRcIik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KFwiTm8gcmVzcG9uc2UgcmV0dXJuZWQgZnJvbSB0b2tlbiBlbmRwb2ludFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghcmVzdWx0LmFjY2Vzc190b2tlbikge1xuICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIlVzZXJNYW5hZ2VyLl91c2VSZWZyZXNoVG9rZW46IE5vIGFjY2VzcyB0b2tlbiByZXR1cm5lZCBmcm9tIHRva2VuIGVuZHBvaW50XCIpO1xuICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChcIk5vIGFjY2VzcyB0b2tlbiByZXR1cm5lZCBmcm9tIHRva2VuIGVuZHBvaW50XCIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbG9hZFVzZXIoKS50aGVuKHVzZXIgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh1c2VyKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBpZFRva2VuVmFsaWRhdGlvbiA9IFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LmlkX3Rva2VuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZFRva2VuVmFsaWRhdGlvbiA9IHRoaXMuX3ZhbGlkYXRlSWRUb2tlbkZyb21Ub2tlblJlZnJlc2hUb2tlbih1c2VyLnByb2ZpbGUsIHJlc3VsdC5pZF90b2tlbik7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWRUb2tlblZhbGlkYXRpb24udGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlci5fdXNlUmVmcmVzaFRva2VuOiByZWZyZXNoIHRva2VuIHJlc3BvbnNlIHN1Y2Nlc3NcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VyLmlkX3Rva2VuID0gcmVzdWx0LmlkX3Rva2VuO1xuICAgICAgICAgICAgICAgICAgICAgICAgdXNlci5hY2Nlc3NfdG9rZW4gPSByZXN1bHQuYWNjZXNzX3Rva2VuO1xuICAgICAgICAgICAgICAgICAgICAgICAgdXNlci5yZWZyZXNoX3Rva2VuID0gcmVzdWx0LnJlZnJlc2hfdG9rZW4gfHwgdXNlci5yZWZyZXNoX3Rva2VuO1xuICAgICAgICAgICAgICAgICAgICAgICAgdXNlci5leHBpcmVzX2luID0gcmVzdWx0LmV4cGlyZXNfaW47XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnN0b3JlVXNlcih1c2VyKS50aGVuKCgpPT57XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZXZlbnRzLmxvYWQodXNlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVzZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgX3ZhbGlkYXRlSWRUb2tlbkZyb21Ub2tlblJlZnJlc2hUb2tlbihwcm9maWxlLCBpZF90b2tlbikge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWV0YWRhdGFTZXJ2aWNlLmdldElzc3VlcigpLnRoZW4oaXNzdWVyID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9qb3NlVXRpbC52YWxpZGF0ZUp3dEF0dHJpYnV0ZXMoaWRfdG9rZW4sIGlzc3VlciwgdGhpcy5fc2V0dGluZ3MuY2xpZW50X2lkLCB0aGlzLl9zZXR0aW5ncy5jbG9ja1NrZXcpLnRoZW4ocGF5bG9hZCA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFwYXlsb2FkKSB7XG4gICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIlVzZXJNYW5hZ2VyLl92YWxpZGF0ZUlkVG9rZW5Gcm9tVG9rZW5SZWZyZXNoVG9rZW46IEZhaWxlZCB0byB2YWxpZGF0ZSBpZF90b2tlblwiKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIkZhaWxlZCB0byB2YWxpZGF0ZSBpZF90b2tlblwiKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChwYXlsb2FkLnN1YiAhPT0gcHJvZmlsZS5zdWIpIHtcbiAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiVXNlck1hbmFnZXIuX3ZhbGlkYXRlSWRUb2tlbkZyb21Ub2tlblJlZnJlc2hUb2tlbjogc3ViIGluIGlkX3Rva2VuIGRvZXMgbm90IG1hdGNoIGN1cnJlbnQgc3ViXCIpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwic3ViIGluIGlkX3Rva2VuIGRvZXMgbm90IG1hdGNoIGN1cnJlbnQgc3ViXCIpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHBheWxvYWQuYXV0aF90aW1lICYmIHBheWxvYWQuYXV0aF90aW1lICE9PSBwcm9maWxlLmF1dGhfdGltZSkge1xuICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJVc2VyTWFuYWdlci5fdmFsaWRhdGVJZFRva2VuRnJvbVRva2VuUmVmcmVzaFRva2VuOiBhdXRoX3RpbWUgaW4gaWRfdG9rZW4gZG9lcyBub3QgbWF0Y2ggb3JpZ2luYWwgYXV0aF90aW1lXCIpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiYXV0aF90aW1lIGluIGlkX3Rva2VuIGRvZXMgbm90IG1hdGNoIG9yaWdpbmFsIGF1dGhfdGltZVwiKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChwYXlsb2FkLmF6cCAmJiBwYXlsb2FkLmF6cCAhPT0gcHJvZmlsZS5henApIHtcbiAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiVXNlck1hbmFnZXIuX3ZhbGlkYXRlSWRUb2tlbkZyb21Ub2tlblJlZnJlc2hUb2tlbjogYXpwIGluIGlkX3Rva2VuIGRvZXMgbm90IG1hdGNoIG9yaWdpbmFsIGF6cFwiKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcImF6cCBpbiBpZF90b2tlbiBkb2VzIG5vdCBtYXRjaCBvcmlnaW5hbCBhenBcIikpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIXBheWxvYWQuYXpwICYmIHByb2ZpbGUuYXpwKSB7XG4gICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIlVzZXJNYW5hZ2VyLl92YWxpZGF0ZUlkVG9rZW5Gcm9tVG9rZW5SZWZyZXNoVG9rZW46IGF6cCBub3QgaW4gaWRfdG9rZW4sIGJ1dCBwcmVzZW50IGluIG9yaWdpbmFsIGlkX3Rva2VuXCIpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiYXpwIG5vdCBpbiBpZF90b2tlbiwgYnV0IHByZXNlbnQgaW4gb3JpZ2luYWwgaWRfdG9rZW5cIikpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgXG4gICAgX3NpZ25pblNpbGVudElmcmFtZShhcmdzID0ge30pIHtcbiAgICAgICAgbGV0IHVybCA9IGFyZ3MucmVkaXJlY3RfdXJpIHx8IHRoaXMuc2V0dGluZ3Muc2lsZW50X3JlZGlyZWN0X3VyaSB8fCB0aGlzLnNldHRpbmdzLnJlZGlyZWN0X3VyaTtcbiAgICAgICAgaWYgKCF1cmwpIHtcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlVzZXJNYW5hZ2VyLnNpZ25pblNpbGVudDogTm8gc2lsZW50X3JlZGlyZWN0X3VyaSBjb25maWd1cmVkXCIpO1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIk5vIHNpbGVudF9yZWRpcmVjdF91cmkgY29uZmlndXJlZFwiKSk7XG4gICAgICAgIH1cblxuICAgICAgICBhcmdzLnJlZGlyZWN0X3VyaSA9IHVybDtcbiAgICAgICAgYXJncy5wcm9tcHQgPSBhcmdzLnByb21wdCB8fCBcIm5vbmVcIjtcblxuICAgICAgICByZXR1cm4gdGhpcy5fc2lnbmluKGFyZ3MsIHRoaXMuX2lmcmFtZU5hdmlnYXRvciwge1xuICAgICAgICAgICAgc3RhcnRVcmw6IHVybCxcbiAgICAgICAgICAgIHNpbGVudFJlcXVlc3RUaW1lb3V0OiBhcmdzLnNpbGVudFJlcXVlc3RUaW1lb3V0IHx8IHRoaXMuc2V0dGluZ3Muc2lsZW50UmVxdWVzdFRpbWVvdXRcbiAgICAgICAgfSkudGhlbih1c2VyID0+IHtcbiAgICAgICAgICAgIGlmICh1c2VyKSB7XG4gICAgICAgICAgICAgICAgaWYgKHVzZXIucHJvZmlsZSAmJiB1c2VyLnByb2ZpbGUuc3ViKSB7XG4gICAgICAgICAgICAgICAgICAgIExvZy5pbmZvKFwiVXNlck1hbmFnZXIuc2lnbmluU2lsZW50OiBzdWNjZXNzZnVsLCBzaWduZWQgaW4gc3ViOiBcIiwgdXNlci5wcm9maWxlLnN1Yik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBMb2cuaW5mbyhcIlVzZXJNYW5hZ2VyLnNpZ25pblNpbGVudDogbm8gc3ViXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHVzZXI7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHNpZ25pblNpbGVudENhbGxiYWNrKHVybCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2lnbmluQ2FsbGJhY2sodXJsLCB0aGlzLl9pZnJhbWVOYXZpZ2F0b3IpLnRoZW4odXNlciA9PiB7XG4gICAgICAgICAgICBpZiAodXNlcikge1xuICAgICAgICAgICAgICAgIGlmICh1c2VyLnByb2ZpbGUgJiYgdXNlci5wcm9maWxlLnN1Yikge1xuICAgICAgICAgICAgICAgICAgICBMb2cuaW5mbyhcIlVzZXJNYW5hZ2VyLnNpZ25pblNpbGVudENhbGxiYWNrOiBzdWNjZXNzZnVsLCBzaWduZWQgaW4gc3ViOiBcIiwgdXNlci5wcm9maWxlLnN1Yik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBMb2cuaW5mbyhcIlVzZXJNYW5hZ2VyLnNpZ25pblNpbGVudENhbGxiYWNrOiBubyBzdWJcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdXNlcjtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgc2lnbmluQ2FsbGJhY2sodXJsKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlYWRTaWduaW5SZXNwb25zZVN0YXRlKHVybCkudGhlbigoe3N0YXRlLCByZXNwb25zZX0pID0+IHtcbiAgICAgICAgICAgIGlmIChzdGF0ZS5yZXF1ZXN0X3R5cGUgPT09IFwic2k6clwiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2lnbmluUmVkaXJlY3RDYWxsYmFjayh1cmwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHN0YXRlLnJlcXVlc3RfdHlwZSA9PT0gXCJzaTpwXCIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zaWduaW5Qb3B1cENhbGxiYWNrKHVybCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc3RhdGUucmVxdWVzdF90eXBlID09PSBcInNpOnNcIikge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNpZ25pblNpbGVudENhbGxiYWNrKHVybCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiaW52YWxpZCByZXNwb25zZV90eXBlIGluIHN0YXRlXCIpKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgc2lnbm91dENhbGxiYWNrKHVybCwga2VlcE9wZW4pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVhZFNpZ25vdXRSZXNwb25zZVN0YXRlKHVybCkudGhlbigoe3N0YXRlLCByZXNwb25zZX0pID0+IHtcbiAgICAgICAgICAgIGlmIChzdGF0ZSkge1xuICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5yZXF1ZXN0X3R5cGUgPT09IFwic286clwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNpZ25vdXRSZWRpcmVjdENhbGxiYWNrKHVybCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5yZXF1ZXN0X3R5cGUgPT09IFwic286cFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNpZ25vdXRQb3B1cENhbGxiYWNrKHVybCwga2VlcE9wZW4pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiaW52YWxpZCByZXNwb25zZV90eXBlIGluIHN0YXRlXCIpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcXVlcnlTZXNzaW9uU3RhdHVzKGFyZ3MgPSB7fSkge1xuICAgICAgICBhcmdzID0gT2JqZWN0LmFzc2lnbih7fSwgYXJncyk7XG5cbiAgICAgICAgYXJncy5yZXF1ZXN0X3R5cGUgPSBcInNpOnNcIjsgLy8gdGhpcyBhY3RzIGxpa2UgYSBzaWduaW4gc2lsZW50XG4gICAgICAgIGxldCB1cmwgPSBhcmdzLnJlZGlyZWN0X3VyaSB8fCB0aGlzLnNldHRpbmdzLnNpbGVudF9yZWRpcmVjdF91cmkgfHwgdGhpcy5zZXR0aW5ncy5yZWRpcmVjdF91cmk7XG4gICAgICAgIGlmICghdXJsKSB7XG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJVc2VyTWFuYWdlci5xdWVyeVNlc3Npb25TdGF0dXM6IE5vIHNpbGVudF9yZWRpcmVjdF91cmkgY29uZmlndXJlZFwiKTtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJObyBzaWxlbnRfcmVkaXJlY3RfdXJpIGNvbmZpZ3VyZWRcIikpO1xuICAgICAgICB9XG5cbiAgICAgICAgYXJncy5yZWRpcmVjdF91cmkgPSB1cmw7XG4gICAgICAgIGFyZ3MucHJvbXB0ID0gXCJub25lXCI7XG4gICAgICAgIGFyZ3MucmVzcG9uc2VfdHlwZSA9IGFyZ3MucmVzcG9uc2VfdHlwZSB8fCB0aGlzLnNldHRpbmdzLnF1ZXJ5X3N0YXR1c19yZXNwb25zZV90eXBlO1xuICAgICAgICBhcmdzLnNjb3BlID0gYXJncy5zY29wZSB8fCBcIm9wZW5pZFwiO1xuICAgICAgICBhcmdzLnNraXBVc2VySW5mbyA9IHRydWU7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX3NpZ25pblN0YXJ0KGFyZ3MsIHRoaXMuX2lmcmFtZU5hdmlnYXRvciwge1xuICAgICAgICAgICAgc3RhcnRVcmw6IHVybCxcbiAgICAgICAgICAgIHNpbGVudFJlcXVlc3RUaW1lb3V0OiBhcmdzLnNpbGVudFJlcXVlc3RUaW1lb3V0IHx8IHRoaXMuc2V0dGluZ3Muc2lsZW50UmVxdWVzdFRpbWVvdXRcbiAgICAgICAgfSkudGhlbihuYXZSZXNwb25zZSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzU2lnbmluUmVzcG9uc2UobmF2UmVzcG9uc2UudXJsKS50aGVuKHNpZ25pblJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlci5xdWVyeVNlc3Npb25TdGF0dXM6IGdvdCBzaWduaW4gcmVzcG9uc2VcIik7XG5cbiAgICAgICAgICAgICAgICBpZiAoc2lnbmluUmVzcG9uc2Uuc2Vzc2lvbl9zdGF0ZSAmJiBzaWduaW5SZXNwb25zZS5wcm9maWxlLnN1Yikge1xuICAgICAgICAgICAgICAgICAgICBMb2cuaW5mbyhcIlVzZXJNYW5hZ2VyLnF1ZXJ5U2Vzc2lvblN0YXR1czogcXVlcnlTZXNzaW9uU3RhdHVzIHN1Y2Nlc3MgZm9yIHN1YjogXCIsICBzaWduaW5SZXNwb25zZS5wcm9maWxlLnN1Yik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uX3N0YXRlOiBzaWduaW5SZXNwb25zZS5zZXNzaW9uX3N0YXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3ViOiBzaWduaW5SZXNwb25zZS5wcm9maWxlLnN1YixcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpZDogc2lnbmluUmVzcG9uc2UucHJvZmlsZS5zaWRcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIExvZy5pbmZvKFwicXVlcnlTZXNzaW9uU3RhdHVzIHN1Y2Nlc3NmdWwsIHVzZXIgbm90IGF1dGhlbnRpY2F0ZWRcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5jYXRjaChlcnIgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChlcnIuc2Vzc2lvbl9zdGF0ZSAmJiB0aGlzLnNldHRpbmdzLm1vbml0b3JBbm9ueW1vdXNTZXNzaW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnIubWVzc2FnZSA9PSBcImxvZ2luX3JlcXVpcmVkXCIgfHwgXG4gICAgICAgICAgICAgICAgICAgICAgICBlcnIubWVzc2FnZSA9PSBcImNvbnNlbnRfcmVxdWlyZWRcIiB8fCBcbiAgICAgICAgICAgICAgICAgICAgICAgIGVyci5tZXNzYWdlID09IFwiaW50ZXJhY3Rpb25fcmVxdWlyZWRcIiB8fCBcbiAgICAgICAgICAgICAgICAgICAgICAgIGVyci5tZXNzYWdlID09IFwiYWNjb3VudF9zZWxlY3Rpb25fcmVxdWlyZWRcIlxuICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIExvZy5pbmZvKFwiVXNlck1hbmFnZXIucXVlcnlTZXNzaW9uU3RhdHVzOiBxdWVyeVNlc3Npb25TdGF0dXMgc3VjY2VzcyBmb3IgYW5vbnltb3VzIHVzZXJcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlc3Npb25fc3RhdGU6IGVyci5zZXNzaW9uX3N0YXRlXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIF9zaWduaW4oYXJncywgbmF2aWdhdG9yLCBuYXZpZ2F0b3JQYXJhbXMgPSB7fSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2lnbmluU3RhcnQoYXJncywgbmF2aWdhdG9yLCBuYXZpZ2F0b3JQYXJhbXMpLnRoZW4obmF2UmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NpZ25pbkVuZChuYXZSZXNwb25zZS51cmwsIGFyZ3MpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgX3NpZ25pblN0YXJ0KGFyZ3MsIG5hdmlnYXRvciwgbmF2aWdhdG9yUGFyYW1zID0ge30pIHtcblxuICAgICAgICByZXR1cm4gbmF2aWdhdG9yLnByZXBhcmUobmF2aWdhdG9yUGFyYW1zKS50aGVuKGhhbmRsZSA9PiB7XG4gICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlci5fc2lnbmluU3RhcnQ6IGdvdCBuYXZpZ2F0b3Igd2luZG93IGhhbmRsZVwiKTtcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlU2lnbmluUmVxdWVzdChhcmdzKS50aGVuKHNpZ25pblJlcXVlc3QgPT4ge1xuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyLl9zaWduaW5TdGFydDogZ290IHNpZ25pbiByZXF1ZXN0XCIpO1xuXG4gICAgICAgICAgICAgICAgbmF2aWdhdG9yUGFyYW1zLnVybCA9IHNpZ25pblJlcXVlc3QudXJsO1xuICAgICAgICAgICAgICAgIG5hdmlnYXRvclBhcmFtcy5pZCA9IHNpZ25pblJlcXVlc3Quc3RhdGUuaWQ7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlLm5hdmlnYXRlKG5hdmlnYXRvclBhcmFtcyk7XG4gICAgICAgICAgICB9KS5jYXRjaChlcnIgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChoYW5kbGUuY2xvc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXIuX3NpZ25pblN0YXJ0OiBFcnJvciBhZnRlciBwcmVwYXJpbmcgbmF2aWdhdG9yLCBjbG9zaW5nIG5hdmlnYXRvciB3aW5kb3dcIik7XG4gICAgICAgICAgICAgICAgICAgIGhhbmRsZS5jbG9zZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIF9zaWduaW5FbmQodXJsLCBhcmdzID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc1NpZ25pblJlc3BvbnNlKHVybCkudGhlbihzaWduaW5SZXNwb25zZSA9PiB7XG4gICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlci5fc2lnbmluRW5kOiBnb3Qgc2lnbmluIHJlc3BvbnNlXCIpO1xuXG4gICAgICAgICAgICBsZXQgdXNlciA9IG5ldyBVc2VyKHNpZ25pblJlc3BvbnNlKTtcblxuICAgICAgICAgICAgaWYgKGFyZ3MuY3VycmVudF9zdWIpIHtcbiAgICAgICAgICAgICAgICBpZiAoYXJncy5jdXJyZW50X3N1YiAhPT0gdXNlci5wcm9maWxlLnN1Yikge1xuICAgICAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlci5fc2lnbmluRW5kOiBjdXJyZW50IHVzZXIgZG9lcyBub3QgbWF0Y2ggdXNlciByZXR1cm5lZCBmcm9tIHNpZ25pbi4gc3ViIGZyb20gc2lnbmluOiBcIiwgdXNlci5wcm9maWxlLnN1Yik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJsb2dpbl9yZXF1aXJlZFwiKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlci5fc2lnbmluRW5kOiBjdXJyZW50IHVzZXIgbWF0Y2hlcyB1c2VyIHJldHVybmVkIGZyb20gc2lnbmluXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3RvcmVVc2VyKHVzZXIpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyLl9zaWduaW5FbmQ6IHVzZXIgc3RvcmVkXCIpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5fZXZlbnRzLmxvYWQodXNlcik7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gdXNlcjtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgX3NpZ25pbkNhbGxiYWNrKHVybCwgbmF2aWdhdG9yKSB7XG4gICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyLl9zaWduaW5DYWxsYmFja1wiKTtcbiAgICAgICAgcmV0dXJuIG5hdmlnYXRvci5jYWxsYmFjayh1cmwpO1xuICAgIH1cblxuICAgIHNpZ25vdXRSZWRpcmVjdChhcmdzID0ge30pIHtcbiAgICAgICAgYXJncyA9IE9iamVjdC5hc3NpZ24oe30sIGFyZ3MpO1xuXG4gICAgICAgIGFyZ3MucmVxdWVzdF90eXBlID0gXCJzbzpyXCI7XG4gICAgICAgIGxldCBwb3N0TG9nb3V0UmVkaXJlY3RVcmkgPSBhcmdzLnBvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaSB8fCB0aGlzLnNldHRpbmdzLnBvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaTtcbiAgICAgICAgaWYgKHBvc3RMb2dvdXRSZWRpcmVjdFVyaSl7XG4gICAgICAgICAgICBhcmdzLnBvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaSA9IHBvc3RMb2dvdXRSZWRpcmVjdFVyaTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgbmF2UGFyYW1zID0ge1xuICAgICAgICAgICAgdXNlUmVwbGFjZVRvTmF2aWdhdGUgOiBhcmdzLnVzZVJlcGxhY2VUb05hdmlnYXRlXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiB0aGlzLl9zaWdub3V0U3RhcnQoYXJncywgdGhpcy5fcmVkaXJlY3ROYXZpZ2F0b3IsIG5hdlBhcmFtcykudGhlbigoKT0+e1xuICAgICAgICAgICAgTG9nLmluZm8oXCJVc2VyTWFuYWdlci5zaWdub3V0UmVkaXJlY3Q6IHN1Y2Nlc3NmdWxcIik7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBzaWdub3V0UmVkaXJlY3RDYWxsYmFjayh1cmwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NpZ25vdXRFbmQodXJsIHx8IHRoaXMuX3JlZGlyZWN0TmF2aWdhdG9yLnVybCkudGhlbihyZXNwb25zZT0+e1xuICAgICAgICAgICAgTG9nLmluZm8oXCJVc2VyTWFuYWdlci5zaWdub3V0UmVkaXJlY3RDYWxsYmFjazogc3VjY2Vzc2Z1bFwiKTtcbiAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgc2lnbm91dFBvcHVwKGFyZ3MgPSB7fSkge1xuICAgICAgICBhcmdzID0gT2JqZWN0LmFzc2lnbih7fSwgYXJncyk7XG5cbiAgICAgICAgYXJncy5yZXF1ZXN0X3R5cGUgPSBcInNvOnBcIjtcbiAgICAgICAgbGV0IHVybCA9IGFyZ3MucG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpIHx8IHRoaXMuc2V0dGluZ3MucG9wdXBfcG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpIHx8IHRoaXMuc2V0dGluZ3MucG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpO1xuICAgICAgICBhcmdzLnBvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaSA9IHVybDtcbiAgICAgICAgYXJncy5kaXNwbGF5ID0gXCJwb3B1cFwiO1xuICAgICAgICBpZiAoYXJncy5wb3N0X2xvZ291dF9yZWRpcmVjdF91cmkpe1xuICAgICAgICAgICAgLy8gd2UncmUgcHV0dGluZyBhIGR1bW15IGVudHJ5IGluIGhlcmUgYmVjYXVzZSB3ZVxuICAgICAgICAgICAgLy8gbmVlZCBhIHVuaXF1ZSBpZCBmcm9tIHRoZSBzdGF0ZSBmb3Igbm90aWZpY2F0aW9uXG4gICAgICAgICAgICAvLyB0byB0aGUgcGFyZW50IHdpbmRvdywgd2hpY2ggaXMgbmVjZXNzYXJ5IGlmIHdlXG4gICAgICAgICAgICAvLyBwbGFuIHRvIHJldHVybiBiYWNrIHRvIHRoZSBjbGllbnQgYWZ0ZXIgc2lnbm91dFxuICAgICAgICAgICAgLy8gYW5kIHNvIHdlIGNhbiBjbG9zZSB0aGUgcG9wdXAgYWZ0ZXIgc2lnbm91dFxuICAgICAgICAgICAgYXJncy5zdGF0ZSA9IGFyZ3Muc3RhdGUgfHwge307XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5fc2lnbm91dChhcmdzLCB0aGlzLl9wb3B1cE5hdmlnYXRvciwge1xuICAgICAgICAgICAgc3RhcnRVcmw6IHVybCxcbiAgICAgICAgICAgIHBvcHVwV2luZG93RmVhdHVyZXM6IGFyZ3MucG9wdXBXaW5kb3dGZWF0dXJlcyB8fCB0aGlzLnNldHRpbmdzLnBvcHVwV2luZG93RmVhdHVyZXMsXG4gICAgICAgICAgICBwb3B1cFdpbmRvd1RhcmdldDogYXJncy5wb3B1cFdpbmRvd1RhcmdldCB8fCB0aGlzLnNldHRpbmdzLnBvcHVwV2luZG93VGFyZ2V0XG4gICAgICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgTG9nLmluZm8oXCJVc2VyTWFuYWdlci5zaWdub3V0UG9wdXA6IHN1Y2Nlc3NmdWxcIik7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBzaWdub3V0UG9wdXBDYWxsYmFjayh1cmwsIGtlZXBPcGVuKSB7XG4gICAgICAgIGlmICh0eXBlb2Yoa2VlcE9wZW4pID09PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YodXJsKSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICBrZWVwT3BlbiA9IHVybDtcbiAgICAgICAgICAgIHVybCA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgZGVsaW1pdGVyID0gJz8nO1xuICAgICAgICByZXR1cm4gdGhpcy5fcG9wdXBOYXZpZ2F0b3IuY2FsbGJhY2sodXJsLCBrZWVwT3BlbiwgZGVsaW1pdGVyKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIExvZy5pbmZvKFwiVXNlck1hbmFnZXIuc2lnbm91dFBvcHVwQ2FsbGJhY2s6IHN1Y2Nlc3NmdWxcIik7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIF9zaWdub3V0KGFyZ3MsIG5hdmlnYXRvciwgbmF2aWdhdG9yUGFyYW1zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NpZ25vdXRTdGFydChhcmdzLCBuYXZpZ2F0b3IsIG5hdmlnYXRvclBhcmFtcykudGhlbihuYXZSZXNwb25zZSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fc2lnbm91dEVuZChuYXZSZXNwb25zZS51cmwpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgX3NpZ25vdXRTdGFydChhcmdzID0ge30sIG5hdmlnYXRvciwgbmF2aWdhdG9yUGFyYW1zID0ge30pIHtcbiAgICAgICAgcmV0dXJuIG5hdmlnYXRvci5wcmVwYXJlKG5hdmlnYXRvclBhcmFtcykudGhlbihoYW5kbGUgPT4ge1xuICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXIuX3NpZ25vdXRTdGFydDogZ290IG5hdmlnYXRvciB3aW5kb3cgaGFuZGxlXCIpO1xuXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbG9hZFVzZXIoKS50aGVuKHVzZXIgPT4ge1xuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyLl9zaWdub3V0U3RhcnQ6IGxvYWRlZCBjdXJyZW50IHVzZXIgZnJvbSBzdG9yYWdlXCIpO1xuXG4gICAgICAgICAgICAgICAgdmFyIHJldm9rZVByb21pc2UgPSB0aGlzLl9zZXR0aW5ncy5yZXZva2VBY2Nlc3NUb2tlbk9uU2lnbm91dCA/IHRoaXMuX3Jldm9rZUludGVybmFsKHVzZXIpIDogUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJldm9rZVByb21pc2UudGhlbigoKSA9PiB7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIGlkX3Rva2VuID0gYXJncy5pZF90b2tlbl9oaW50IHx8IHVzZXIgJiYgdXNlci5pZF90b2tlbjtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlkX3Rva2VuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlci5fc2lnbm91dFN0YXJ0OiBTZXR0aW5nIGlkX3Rva2VuIGludG8gc2lnbm91dCByZXF1ZXN0XCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5pZF90b2tlbl9oaW50ID0gaWRfdG9rZW47XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5yZW1vdmVVc2VyKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlci5fc2lnbm91dFN0YXJ0OiB1c2VyIHJlbW92ZWQsIGNyZWF0aW5nIHNpZ25vdXQgcmVxdWVzdFwiKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlU2lnbm91dFJlcXVlc3QoYXJncykudGhlbihzaWdub3V0UmVxdWVzdCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXIuX3NpZ25vdXRTdGFydDogZ290IHNpZ25vdXQgcmVxdWVzdFwiKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdmlnYXRvclBhcmFtcy51cmwgPSBzaWdub3V0UmVxdWVzdC51cmw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNpZ25vdXRSZXF1ZXN0LnN0YXRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdmlnYXRvclBhcmFtcy5pZCA9IHNpZ25vdXRSZXF1ZXN0LnN0YXRlLmlkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlLm5hdmlnYXRlKG5hdmlnYXRvclBhcmFtcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KS5jYXRjaChlcnIgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChoYW5kbGUuY2xvc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXIuX3NpZ25vdXRTdGFydDogRXJyb3IgYWZ0ZXIgcHJlcGFyaW5nIG5hdmlnYXRvciwgY2xvc2luZyBuYXZpZ2F0b3Igd2luZG93XCIpO1xuICAgICAgICAgICAgICAgICAgICBoYW5kbGUuY2xvc2UoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBfc2lnbm91dEVuZCh1cmwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc1NpZ25vdXRSZXNwb25zZSh1cmwpLnRoZW4oc2lnbm91dFJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyLl9zaWdub3V0RW5kOiBnb3Qgc2lnbm91dCByZXNwb25zZVwiKTtcblxuICAgICAgICAgICAgcmV0dXJuIHNpZ25vdXRSZXNwb25zZTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV2b2tlQWNjZXNzVG9rZW4oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sb2FkVXNlcigpLnRoZW4odXNlciA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcmV2b2tlSW50ZXJuYWwodXNlciwgdHJ1ZSkudGhlbihzdWNjZXNzID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlci5yZXZva2VBY2Nlc3NUb2tlbjogcmVtb3ZpbmcgdG9rZW4gcHJvcGVydGllcyBmcm9tIHVzZXIgYW5kIHJlLXN0b3JpbmdcIik7XG5cbiAgICAgICAgICAgICAgICAgICAgdXNlci5hY2Nlc3NfdG9rZW4gPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICB1c2VyLnJlZnJlc2hfdG9rZW4gPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICB1c2VyLmV4cGlyZXNfYXQgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICB1c2VyLnRva2VuX3R5cGUgPSBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnN0b3JlVXNlcih1c2VyKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyLnJldm9rZUFjY2Vzc1Rva2VuOiB1c2VyIHN0b3JlZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2V2ZW50cy5sb2FkKHVzZXIpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSkudGhlbigoKT0+e1xuICAgICAgICAgICAgTG9nLmluZm8oXCJVc2VyTWFuYWdlci5yZXZva2VBY2Nlc3NUb2tlbjogYWNjZXNzIHRva2VuIHJldm9rZWQgc3VjY2Vzc2Z1bGx5XCIpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBfcmV2b2tlSW50ZXJuYWwodXNlciwgcmVxdWlyZWQpIHtcbiAgICAgICAgaWYgKHVzZXIpIHtcbiAgICAgICAgICAgIHZhciBhY2Nlc3NfdG9rZW4gPSB1c2VyLmFjY2Vzc190b2tlbjtcbiAgICAgICAgICAgIHZhciByZWZyZXNoX3Rva2VuID0gdXNlci5yZWZyZXNoX3Rva2VuO1xuXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcmV2b2tlQWNjZXNzVG9rZW5JbnRlcm5hbChhY2Nlc3NfdG9rZW4sIHJlcXVpcmVkKVxuICAgICAgICAgICAgICAgIC50aGVuKGF0U3VjY2VzcyA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZXZva2VSZWZyZXNoVG9rZW5JbnRlcm5hbChyZWZyZXNoX3Rva2VuLCByZXF1aXJlZClcbiAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKHJ0U3VjY2VzcyA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFhdFN1Y2Nlc3MgJiYgIXJ0U3VjY2Vzcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlci5yZXZva2VBY2Nlc3NUb2tlbjogbm8gbmVlZCB0byByZXZva2UgZHVlIHRvIG5vIHRva2VuKHMpLCBvciBKV1QgZm9ybWF0XCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXRTdWNjZXNzIHx8IHJ0U3VjY2VzcztcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7XG4gICAgfVxuXG4gICAgX3Jldm9rZUFjY2Vzc1Rva2VuSW50ZXJuYWwoYWNjZXNzX3Rva2VuLCByZXF1aXJlZCkge1xuICAgICAgICAvLyBjaGVjayBmb3IgSldUIHZzLiByZWZlcmVuY2UgdG9rZW5cbiAgICAgICAgaWYgKCFhY2Nlc3NfdG9rZW4gfHwgYWNjZXNzX3Rva2VuLmluZGV4T2YoJy4nKSA+PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLl90b2tlblJldm9jYXRpb25DbGllbnQucmV2b2tlKGFjY2Vzc190b2tlbiwgcmVxdWlyZWQpLnRoZW4oKCkgPT4gdHJ1ZSk7XG4gICAgfVxuXG4gICAgX3Jldm9rZVJlZnJlc2hUb2tlbkludGVybmFsKHJlZnJlc2hfdG9rZW4sIHJlcXVpcmVkKSB7XG4gICAgICAgIGlmICghcmVmcmVzaF90b2tlbikge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5fdG9rZW5SZXZvY2F0aW9uQ2xpZW50LnJldm9rZShyZWZyZXNoX3Rva2VuLCByZXF1aXJlZCwgXCJyZWZyZXNoX3Rva2VuXCIpLnRoZW4oKCkgPT4gdHJ1ZSk7XG4gICAgfVxuXG4gICAgc3RhcnRTaWxlbnRSZW5ldygpIHtcbiAgICAgICAgdGhpcy5fc2lsZW50UmVuZXdTZXJ2aWNlLnN0YXJ0KCk7XG4gICAgfVxuXG4gICAgc3RvcFNpbGVudFJlbmV3KCkge1xuICAgICAgICB0aGlzLl9zaWxlbnRSZW5ld1NlcnZpY2Uuc3RvcCgpO1xuICAgIH1cblxuICAgIGdldCBfdXNlclN0b3JlS2V5KCkge1xuICAgICAgICByZXR1cm4gYHVzZXI6JHt0aGlzLnNldHRpbmdzLmF1dGhvcml0eX06JHt0aGlzLnNldHRpbmdzLmNsaWVudF9pZH1gO1xuICAgIH1cblxuICAgIF9sb2FkVXNlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3VzZXJTdG9yZS5nZXQodGhpcy5fdXNlclN0b3JlS2V5KS50aGVuKHN0b3JhZ2VTdHJpbmcgPT4ge1xuICAgICAgICAgICAgaWYgKHN0b3JhZ2VTdHJpbmcpIHtcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlci5fbG9hZFVzZXI6IHVzZXIgc3RvcmFnZVN0cmluZyBsb2FkZWRcIik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFVzZXIuZnJvbVN0b3JhZ2VTdHJpbmcoc3RvcmFnZVN0cmluZyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyLl9sb2FkVXNlcjogbm8gdXNlciBzdG9yYWdlU3RyaW5nXCIpO1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHN0b3JlVXNlcih1c2VyKSB7XG4gICAgICAgIGlmICh1c2VyKSB7XG4gICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlci5zdG9yZVVzZXI6IHN0b3JpbmcgdXNlclwiKTtcblxuICAgICAgICAgICAgdmFyIHN0b3JhZ2VTdHJpbmcgPSB1c2VyLnRvU3RvcmFnZVN0cmluZygpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3VzZXJTdG9yZS5zZXQodGhpcy5fdXNlclN0b3JlS2V5LCBzdG9yYWdlU3RyaW5nKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcInN0b3JlVXNlci5zdG9yZVVzZXI6IHJlbW92aW5nIHVzZXJcIik7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdXNlclN0b3JlLnJlbW92ZSh0aGlzLl91c2VyU3RvcmVLZXkpO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cblxuaW1wb3J0IHsgTG9nIH0gZnJvbSAnLi9Mb2cuanMnO1xuaW1wb3J0IHsgQWNjZXNzVG9rZW5FdmVudHMgfSBmcm9tICcuL0FjY2Vzc1Rva2VuRXZlbnRzLmpzJztcbmltcG9ydCB7IEV2ZW50IH0gZnJvbSAnLi9FdmVudC5qcyc7XG5cbmV4cG9ydCBjbGFzcyBVc2VyTWFuYWdlckV2ZW50cyBleHRlbmRzIEFjY2Vzc1Rva2VuRXZlbnRzIHtcblxuICAgIGNvbnN0cnVjdG9yKHNldHRpbmdzKSB7XG4gICAgICAgIHN1cGVyKHNldHRpbmdzKTtcbiAgICAgICAgdGhpcy5fdXNlckxvYWRlZCA9IG5ldyBFdmVudChcIlVzZXIgbG9hZGVkXCIpO1xuICAgICAgICB0aGlzLl91c2VyVW5sb2FkZWQgPSBuZXcgRXZlbnQoXCJVc2VyIHVubG9hZGVkXCIpO1xuICAgICAgICB0aGlzLl9zaWxlbnRSZW5ld0Vycm9yID0gbmV3IEV2ZW50KFwiU2lsZW50IHJlbmV3IGVycm9yXCIpO1xuICAgICAgICB0aGlzLl91c2VyU2lnbmVkSW4gPSBuZXcgRXZlbnQoXCJVc2VyIHNpZ25lZCBpblwiKTtcbiAgICAgICAgdGhpcy5fdXNlclNpZ25lZE91dCA9IG5ldyBFdmVudChcIlVzZXIgc2lnbmVkIG91dFwiKTtcbiAgICAgICAgdGhpcy5fdXNlclNlc3Npb25DaGFuZ2VkID0gbmV3IEV2ZW50KFwiVXNlciBzZXNzaW9uIGNoYW5nZWRcIik7XG4gICAgfVxuXG4gICAgbG9hZCh1c2VyLCByYWlzZUV2ZW50PXRydWUpIHtcbiAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXJFdmVudHMubG9hZFwiKTtcbiAgICAgICAgc3VwZXIubG9hZCh1c2VyKTtcbiAgICAgICAgaWYgKHJhaXNlRXZlbnQpIHtcbiAgICAgICAgICAgIHRoaXMuX3VzZXJMb2FkZWQucmFpc2UodXNlcik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdW5sb2FkKCkge1xuICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlckV2ZW50cy51bmxvYWRcIik7XG4gICAgICAgIHN1cGVyLnVubG9hZCgpO1xuICAgICAgICB0aGlzLl91c2VyVW5sb2FkZWQucmFpc2UoKTtcbiAgICB9XG5cbiAgICBhZGRVc2VyTG9hZGVkKGNiKSB7XG4gICAgICAgIHRoaXMuX3VzZXJMb2FkZWQuYWRkSGFuZGxlcihjYik7XG4gICAgfVxuICAgIHJlbW92ZVVzZXJMb2FkZWQoY2IpIHtcbiAgICAgICAgdGhpcy5fdXNlckxvYWRlZC5yZW1vdmVIYW5kbGVyKGNiKTtcbiAgICB9XG5cbiAgICBhZGRVc2VyVW5sb2FkZWQoY2IpIHtcbiAgICAgICAgdGhpcy5fdXNlclVubG9hZGVkLmFkZEhhbmRsZXIoY2IpO1xuICAgIH1cbiAgICByZW1vdmVVc2VyVW5sb2FkZWQoY2IpIHtcbiAgICAgICAgdGhpcy5fdXNlclVubG9hZGVkLnJlbW92ZUhhbmRsZXIoY2IpO1xuICAgIH1cblxuICAgIGFkZFNpbGVudFJlbmV3RXJyb3IoY2IpIHtcbiAgICAgICAgdGhpcy5fc2lsZW50UmVuZXdFcnJvci5hZGRIYW5kbGVyKGNiKTtcbiAgICB9XG4gICAgcmVtb3ZlU2lsZW50UmVuZXdFcnJvcihjYikge1xuICAgICAgICB0aGlzLl9zaWxlbnRSZW5ld0Vycm9yLnJlbW92ZUhhbmRsZXIoY2IpO1xuICAgIH1cbiAgICBfcmFpc2VTaWxlbnRSZW5ld0Vycm9yKGUpIHtcbiAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXJFdmVudHMuX3JhaXNlU2lsZW50UmVuZXdFcnJvclwiLCBlLm1lc3NhZ2UpO1xuICAgICAgICB0aGlzLl9zaWxlbnRSZW5ld0Vycm9yLnJhaXNlKGUpO1xuICAgIH1cblxuICAgIGFkZFVzZXJTaWduZWRJbihjYikge1xuICAgICAgICB0aGlzLl91c2VyU2lnbmVkSW4uYWRkSGFuZGxlcihjYik7XG4gICAgfVxuICAgIHJlbW92ZVVzZXJTaWduZWRJbihjYikge1xuICAgICAgICB0aGlzLl91c2VyU2lnbmVkSW4ucmVtb3ZlSGFuZGxlcihjYik7XG4gICAgfVxuICAgIF9yYWlzZVVzZXJTaWduZWRJbigpIHtcbiAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXJFdmVudHMuX3JhaXNlVXNlclNpZ25lZEluXCIpO1xuICAgICAgICB0aGlzLl91c2VyU2lnbmVkSW4ucmFpc2UoKTtcbiAgICB9XG5cbiAgICBhZGRVc2VyU2lnbmVkT3V0KGNiKSB7XG4gICAgICAgIHRoaXMuX3VzZXJTaWduZWRPdXQuYWRkSGFuZGxlcihjYik7XG4gICAgfVxuICAgIHJlbW92ZVVzZXJTaWduZWRPdXQoY2IpIHtcbiAgICAgICAgdGhpcy5fdXNlclNpZ25lZE91dC5yZW1vdmVIYW5kbGVyKGNiKTtcbiAgICB9XG4gICAgX3JhaXNlVXNlclNpZ25lZE91dCgpIHtcbiAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXJFdmVudHMuX3JhaXNlVXNlclNpZ25lZE91dFwiKTtcbiAgICAgICAgdGhpcy5fdXNlclNpZ25lZE91dC5yYWlzZSgpO1xuICAgIH1cblxuICAgIGFkZFVzZXJTZXNzaW9uQ2hhbmdlZChjYikge1xuICAgICAgICB0aGlzLl91c2VyU2Vzc2lvbkNoYW5nZWQuYWRkSGFuZGxlcihjYik7XG4gICAgfVxuICAgIHJlbW92ZVVzZXJTZXNzaW9uQ2hhbmdlZChjYikge1xuICAgICAgICB0aGlzLl91c2VyU2Vzc2lvbkNoYW5nZWQucmVtb3ZlSGFuZGxlcihjYik7XG4gICAgfVxuICAgIF9yYWlzZVVzZXJTZXNzaW9uQ2hhbmdlZCgpIHtcbiAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXJFdmVudHMuX3JhaXNlVXNlclNlc3Npb25DaGFuZ2VkXCIpO1xuICAgICAgICB0aGlzLl91c2VyU2Vzc2lvbkNoYW5nZWQucmFpc2UoKTtcbiAgICB9XG59XG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxuXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XG5pbXBvcnQgeyBPaWRjQ2xpZW50U2V0dGluZ3MgfSBmcm9tICcuL09pZGNDbGllbnRTZXR0aW5ncy5qcyc7XG5pbXBvcnQgeyBSZWRpcmVjdE5hdmlnYXRvciB9IGZyb20gJy4vUmVkaXJlY3ROYXZpZ2F0b3IuanMnO1xuaW1wb3J0IHsgUG9wdXBOYXZpZ2F0b3IgfSBmcm9tICcuL1BvcHVwTmF2aWdhdG9yLmpzJztcbmltcG9ydCB7IElGcmFtZU5hdmlnYXRvciB9IGZyb20gJy4vSUZyYW1lTmF2aWdhdG9yLmpzJztcbmltcG9ydCB7IFdlYlN0b3JhZ2VTdGF0ZVN0b3JlIH0gZnJvbSAnLi9XZWJTdG9yYWdlU3RhdGVTdG9yZS5qcyc7XG5pbXBvcnQgeyBHbG9iYWwgfSBmcm9tICcuL0dsb2JhbC5qcyc7XG5pbXBvcnQgeyBTaWduaW5SZXF1ZXN0IH0gZnJvbSAnLi9TaWduaW5SZXF1ZXN0LmpzJztcblxuY29uc3QgRGVmYXVsdEFjY2Vzc1Rva2VuRXhwaXJpbmdOb3RpZmljYXRpb25UaW1lID0gNjA7XG5jb25zdCBEZWZhdWx0Q2hlY2tTZXNzaW9uSW50ZXJ2YWwgPSAyMDAwO1xuXG5leHBvcnQgY2xhc3MgVXNlck1hbmFnZXJTZXR0aW5ncyBleHRlbmRzIE9pZGNDbGllbnRTZXR0aW5ncyB7XG4gICAgY29uc3RydWN0b3Ioe1xuICAgICAgICBwb3B1cF9yZWRpcmVjdF91cmksXG4gICAgICAgIHBvcHVwX3Bvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaSxcbiAgICAgICAgcG9wdXBXaW5kb3dGZWF0dXJlcyxcbiAgICAgICAgcG9wdXBXaW5kb3dUYXJnZXQsXG4gICAgICAgIHNpbGVudF9yZWRpcmVjdF91cmksXG4gICAgICAgIHNpbGVudFJlcXVlc3RUaW1lb3V0LFxuICAgICAgICBhdXRvbWF0aWNTaWxlbnRSZW5ldyA9IGZhbHNlLFxuICAgICAgICB2YWxpZGF0ZVN1Yk9uU2lsZW50UmVuZXcgPSBmYWxzZSxcbiAgICAgICAgaW5jbHVkZUlkVG9rZW5JblNpbGVudFJlbmV3ID0gdHJ1ZSxcbiAgICAgICAgbW9uaXRvclNlc3Npb24gPSB0cnVlLFxuICAgICAgICBtb25pdG9yQW5vbnltb3VzU2Vzc2lvbiA9IGZhbHNlLFxuICAgICAgICBjaGVja1Nlc3Npb25JbnRlcnZhbCA9IERlZmF1bHRDaGVja1Nlc3Npb25JbnRlcnZhbCxcbiAgICAgICAgc3RvcENoZWNrU2Vzc2lvbk9uRXJyb3IgPSB0cnVlLFxuICAgICAgICBxdWVyeV9zdGF0dXNfcmVzcG9uc2VfdHlwZSxcbiAgICAgICAgcmV2b2tlQWNjZXNzVG9rZW5PblNpZ25vdXQgPSBmYWxzZSxcbiAgICAgICAgYWNjZXNzVG9rZW5FeHBpcmluZ05vdGlmaWNhdGlvblRpbWUgPSBEZWZhdWx0QWNjZXNzVG9rZW5FeHBpcmluZ05vdGlmaWNhdGlvblRpbWUsXG4gICAgICAgIHJlZGlyZWN0TmF2aWdhdG9yID0gbmV3IFJlZGlyZWN0TmF2aWdhdG9yKCksXG4gICAgICAgIHBvcHVwTmF2aWdhdG9yID0gbmV3IFBvcHVwTmF2aWdhdG9yKCksXG4gICAgICAgIGlmcmFtZU5hdmlnYXRvciA9IG5ldyBJRnJhbWVOYXZpZ2F0b3IoKSxcbiAgICAgICAgdXNlclN0b3JlID0gbmV3IFdlYlN0b3JhZ2VTdGF0ZVN0b3JlKHsgc3RvcmU6IEdsb2JhbC5zZXNzaW9uU3RvcmFnZSB9KVxuICAgIH0gPSB7fSkge1xuICAgICAgICBzdXBlcihhcmd1bWVudHNbMF0pO1xuXG4gICAgICAgIHRoaXMuX3BvcHVwX3JlZGlyZWN0X3VyaSA9IHBvcHVwX3JlZGlyZWN0X3VyaTtcbiAgICAgICAgdGhpcy5fcG9wdXBfcG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpID0gcG9wdXBfcG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpO1xuICAgICAgICB0aGlzLl9wb3B1cFdpbmRvd0ZlYXR1cmVzID0gcG9wdXBXaW5kb3dGZWF0dXJlcztcbiAgICAgICAgdGhpcy5fcG9wdXBXaW5kb3dUYXJnZXQgPSBwb3B1cFdpbmRvd1RhcmdldDtcblxuICAgICAgICB0aGlzLl9zaWxlbnRfcmVkaXJlY3RfdXJpID0gc2lsZW50X3JlZGlyZWN0X3VyaTtcbiAgICAgICAgdGhpcy5fc2lsZW50UmVxdWVzdFRpbWVvdXQgPSBzaWxlbnRSZXF1ZXN0VGltZW91dDtcbiAgICAgICAgdGhpcy5fYXV0b21hdGljU2lsZW50UmVuZXcgPSBhdXRvbWF0aWNTaWxlbnRSZW5ldztcbiAgICAgICAgdGhpcy5fdmFsaWRhdGVTdWJPblNpbGVudFJlbmV3ID0gdmFsaWRhdGVTdWJPblNpbGVudFJlbmV3O1xuICAgICAgICB0aGlzLl9pbmNsdWRlSWRUb2tlbkluU2lsZW50UmVuZXcgPSBpbmNsdWRlSWRUb2tlbkluU2lsZW50UmVuZXc7XG4gICAgICAgIHRoaXMuX2FjY2Vzc1Rva2VuRXhwaXJpbmdOb3RpZmljYXRpb25UaW1lID0gYWNjZXNzVG9rZW5FeHBpcmluZ05vdGlmaWNhdGlvblRpbWU7XG5cbiAgICAgICAgdGhpcy5fbW9uaXRvclNlc3Npb24gPSBtb25pdG9yU2Vzc2lvbjtcbiAgICAgICAgdGhpcy5fbW9uaXRvckFub255bW91c1Nlc3Npb24gPSBtb25pdG9yQW5vbnltb3VzU2Vzc2lvbjtcbiAgICAgICAgdGhpcy5fY2hlY2tTZXNzaW9uSW50ZXJ2YWwgPSBjaGVja1Nlc3Npb25JbnRlcnZhbDtcbiAgICAgICAgdGhpcy5fc3RvcENoZWNrU2Vzc2lvbk9uRXJyb3IgPSBzdG9wQ2hlY2tTZXNzaW9uT25FcnJvcjtcbiAgICAgICAgaWYgKHF1ZXJ5X3N0YXR1c19yZXNwb25zZV90eXBlKSB7XG4gICAgICAgICAgICB0aGlzLl9xdWVyeV9zdGF0dXNfcmVzcG9uc2VfdHlwZSA9IHF1ZXJ5X3N0YXR1c19yZXNwb25zZV90eXBlO1xuICAgICAgICB9IFxuICAgICAgICBlbHNlIGlmIChhcmd1bWVudHNbMF0gJiYgYXJndW1lbnRzWzBdLnJlc3BvbnNlX3R5cGUpIHtcbiAgICAgICAgICAgIHRoaXMuX3F1ZXJ5X3N0YXR1c19yZXNwb25zZV90eXBlID0gU2lnbmluUmVxdWVzdC5pc09pZGMoYXJndW1lbnRzWzBdLnJlc3BvbnNlX3R5cGUpID8gXCJpZF90b2tlblwiIDogXCJjb2RlXCI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9xdWVyeV9zdGF0dXNfcmVzcG9uc2VfdHlwZSA9IFwiaWRfdG9rZW5cIjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9yZXZva2VBY2Nlc3NUb2tlbk9uU2lnbm91dCA9IHJldm9rZUFjY2Vzc1Rva2VuT25TaWdub3V0O1xuXG4gICAgICAgIHRoaXMuX3JlZGlyZWN0TmF2aWdhdG9yID0gcmVkaXJlY3ROYXZpZ2F0b3I7XG4gICAgICAgIHRoaXMuX3BvcHVwTmF2aWdhdG9yID0gcG9wdXBOYXZpZ2F0b3I7XG4gICAgICAgIHRoaXMuX2lmcmFtZU5hdmlnYXRvciA9IGlmcmFtZU5hdmlnYXRvcjtcblxuICAgICAgICB0aGlzLl91c2VyU3RvcmUgPSB1c2VyU3RvcmU7XG4gICAgfVxuXG4gICAgZ2V0IHBvcHVwX3JlZGlyZWN0X3VyaSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BvcHVwX3JlZGlyZWN0X3VyaTtcbiAgICB9XG4gICAgZ2V0IHBvcHVwX3Bvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BvcHVwX3Bvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaTtcbiAgICB9XG4gICAgZ2V0IHBvcHVwV2luZG93RmVhdHVyZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wb3B1cFdpbmRvd0ZlYXR1cmVzO1xuICAgIH1cbiAgICBnZXQgcG9wdXBXaW5kb3dUYXJnZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wb3B1cFdpbmRvd1RhcmdldDtcbiAgICB9XG5cbiAgICBnZXQgc2lsZW50X3JlZGlyZWN0X3VyaSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NpbGVudF9yZWRpcmVjdF91cmk7XG4gICAgfVxuICAgICBnZXQgc2lsZW50UmVxdWVzdFRpbWVvdXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zaWxlbnRSZXF1ZXN0VGltZW91dDtcbiAgICB9XG4gICAgZ2V0IGF1dG9tYXRpY1NpbGVudFJlbmV3KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYXV0b21hdGljU2lsZW50UmVuZXc7XG4gICAgfVxuICAgIGdldCB2YWxpZGF0ZVN1Yk9uU2lsZW50UmVuZXcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl92YWxpZGF0ZVN1Yk9uU2lsZW50UmVuZXc7XG4gICAgfVxuICAgIGdldCBpbmNsdWRlSWRUb2tlbkluU2lsZW50UmVuZXcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbmNsdWRlSWRUb2tlbkluU2lsZW50UmVuZXc7XG4gICAgfVxuICAgIGdldCBhY2Nlc3NUb2tlbkV4cGlyaW5nTm90aWZpY2F0aW9uVGltZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FjY2Vzc1Rva2VuRXhwaXJpbmdOb3RpZmljYXRpb25UaW1lO1xuICAgIH1cblxuICAgIGdldCBtb25pdG9yU2Vzc2lvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21vbml0b3JTZXNzaW9uO1xuICAgIH1cbiAgICBnZXQgbW9uaXRvckFub255bW91c1Nlc3Npb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tb25pdG9yQW5vbnltb3VzU2Vzc2lvbjtcbiAgICB9XG4gICAgZ2V0IGNoZWNrU2Vzc2lvbkludGVydmFsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY2hlY2tTZXNzaW9uSW50ZXJ2YWw7XG4gICAgfVxuICAgIGdldCBzdG9wQ2hlY2tTZXNzaW9uT25FcnJvcigpe1xuICAgICAgICByZXR1cm4gdGhpcy5fc3RvcENoZWNrU2Vzc2lvbk9uRXJyb3I7XG4gICAgfVxuICAgIGdldCBxdWVyeV9zdGF0dXNfcmVzcG9uc2VfdHlwZSgpe1xuICAgICAgICByZXR1cm4gdGhpcy5fcXVlcnlfc3RhdHVzX3Jlc3BvbnNlX3R5cGU7XG4gICAgfVxuICAgIGdldCByZXZva2VBY2Nlc3NUb2tlbk9uU2lnbm91dCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jldm9rZUFjY2Vzc1Rva2VuT25TaWdub3V0O1xuICAgIH1cblxuICAgIGdldCByZWRpcmVjdE5hdmlnYXRvcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlZGlyZWN0TmF2aWdhdG9yO1xuICAgIH1cbiAgICBnZXQgcG9wdXBOYXZpZ2F0b3IoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wb3B1cE5hdmlnYXRvcjtcbiAgICB9XG4gICAgZ2V0IGlmcmFtZU5hdmlnYXRvcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lmcmFtZU5hdmlnYXRvcjtcbiAgICB9XG5cbiAgICBnZXQgdXNlclN0b3JlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdXNlclN0b3JlO1xuICAgIH1cbn1cbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXG5cbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcbmltcG9ydCB7IEdsb2JhbCB9IGZyb20gJy4vR2xvYmFsLmpzJztcblxuZXhwb3J0IGNsYXNzIFdlYlN0b3JhZ2VTdGF0ZVN0b3JlIHtcbiAgICBjb25zdHJ1Y3Rvcih7cHJlZml4ID0gXCJvaWRjLlwiLCBzdG9yZSA9IEdsb2JhbC5sb2NhbFN0b3JhZ2V9ID0ge30pIHtcbiAgICAgICAgdGhpcy5fc3RvcmUgPSBzdG9yZTtcbiAgICAgICAgdGhpcy5fcHJlZml4ID0gcHJlZml4O1xuICAgIH1cblxuICAgIHNldChrZXksIHZhbHVlKSB7XG4gICAgICAgIExvZy5kZWJ1ZyhcIldlYlN0b3JhZ2VTdGF0ZVN0b3JlLnNldFwiLCBrZXkpO1xuXG4gICAgICAgIGtleSA9IHRoaXMuX3ByZWZpeCArIGtleTtcblxuICAgICAgICB0aGlzLl9zdG9yZS5zZXRJdGVtKGtleSwgdmFsdWUpO1xuXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICB9XG5cbiAgICBnZXQoa2V5KSB7XG4gICAgICAgIExvZy5kZWJ1ZyhcIldlYlN0b3JhZ2VTdGF0ZVN0b3JlLmdldFwiLCBrZXkpO1xuXG4gICAgICAgIGtleSA9IHRoaXMuX3ByZWZpeCArIGtleTtcblxuICAgICAgICBsZXQgaXRlbSA9IHRoaXMuX3N0b3JlLmdldEl0ZW0oa2V5KTtcblxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGl0ZW0pO1xuICAgIH1cblxuICAgIHJlbW92ZShrZXkpIHtcbiAgICAgICAgTG9nLmRlYnVnKFwiV2ViU3RvcmFnZVN0YXRlU3RvcmUucmVtb3ZlXCIsIGtleSk7XG5cbiAgICAgICAga2V5ID0gdGhpcy5fcHJlZml4ICsga2V5O1xuXG4gICAgICAgIGxldCBpdGVtID0gdGhpcy5fc3RvcmUuZ2V0SXRlbShrZXkpO1xuICAgICAgICB0aGlzLl9zdG9yZS5yZW1vdmVJdGVtKGtleSk7XG5cbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShpdGVtKTtcbiAgICB9XG5cbiAgICBnZXRBbGxLZXlzKCkge1xuICAgICAgICBMb2cuZGVidWcoXCJXZWJTdG9yYWdlU3RhdGVTdG9yZS5nZXRBbGxLZXlzXCIpO1xuXG4gICAgICAgIHZhciBrZXlzID0gW107XG5cbiAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMuX3N0b3JlLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICAgICAgbGV0IGtleSA9IHRoaXMuX3N0b3JlLmtleShpbmRleCk7XG5cbiAgICAgICAgICAgIGlmIChrZXkuaW5kZXhPZih0aGlzLl9wcmVmaXgpID09PSAwKSB7XG4gICAgICAgICAgICAgICAga2V5cy5wdXNoKGtleS5zdWJzdHIodGhpcy5fcHJlZml4Lmxlbmd0aCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShrZXlzKTtcbiAgICB9XG59XG4iLCIvKlxuQmFzZWQgb24gdGhlIHdvcmsgb2YgQXV0aDBcbmh0dHBzOi8vZ2l0aHViLmNvbS9hdXRoMC9pZHRva2VuLXZlcmlmaWVyXG5odHRwczovL2dpdGh1Yi5jb20vYXV0aDAvaWR0b2tlbi12ZXJpZmllci9ibG9iL21hc3Rlci9MSUNFTlNFXG5XaGljaCBpcyBiYXNlZCBvbiB0aGUgd29yayBvZiBUb20gV3Vcbmh0dHA6Ly93d3ctY3Mtc3R1ZGVudHMuc3RhbmZvcmQuZWR1L350ancvanNibi9cbmh0dHA6Ly93d3ctY3Mtc3R1ZGVudHMuc3RhbmZvcmQuZWR1L350ancvanNibi9MSUNFTlNFXG4qL1xuXG4vKlxuICogVG8gc3VwcG9ydCBtb3N0IGJhc2ljIE9wZW5JZCB1c2UgY2FzZXMgKHVzaW5nIFJTQTI1NiksIHdlIGNhbiBnZXQgYXdheSB3aXRob3V0XG4gKiByZXF1aXJpbmcgdGhlIGZ1bGwganJzYXNpZ24gZmVhdHVyZSBzZXQgKGFuZCByZXN1bHRpbmcgbWFzc2l2ZSBidW5kbGUpLlxuICpcbiAqIC0gU3VwcG9ydCBSU0EgMjU2IGFsZ29yaXRobSAob3B0aW9uYWxseSBjb3VsZCBzdXBwb3J0IFJTQSogZmFtaWx5KVxuICogLSBQYXJzZSBKV1QgdG9rZW5zIHVzaW5nIHRoZSAobikgcGFyYW1ldGVyLlxuICogLSBWZXJpZnkgc2lnbmF0dXJlIG9mIGlkX3Rva2Vuc1xuICogLSBWZXJpZnkgYXRfaGFzaCBvZiBhY2Nlc3NfdG9rZW5zXG4gKiAtIFBlcmZvcm0gY29tbW9uIGJhc2U2NCBlbmNvZGluZy9kZWNvZGluZyB0YXNrcy5cbiAqL1xuXG5pbXBvcnQgSlNCTiBmcm9tICdqc2JuJztcbmltcG9ydCBTSEEyNTYgZnJvbSAnY3J5cHRvLWpzL3NoYTI1Nic7XG5pbXBvcnQgYmFzZTY0SnMgZnJvbSAnYmFzZTY0LWpzJztcblxudmFyIEJpZ0ludGVnZXIgPSBKU0JOLkJpZ0ludGVnZXI7XG5cbi8qISAoYykgVG9tIFd1IHwgaHR0cDovL3d3dy1jcy1zdHVkZW50cy5zdGFuZm9yZC5lZHUvfnRqdy9qc2JuL1xuICovXG52YXIgYjY0bWFwID0gXCJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvXCI7XG52YXIgYjY0cGFkID0gXCI9XCI7XG5cbmNvbnN0IEJhc2U2NCA9IHtcbiAgICBiNjR0b2hleChzKSB7XG4gICAgICAgIHZhciByZXQgPSBcIlwiO1xuICAgICAgICB2YXIgaTtcbiAgICAgICAgdmFyIGsgPSAwOyAvLyBiNjQgc3RhdGUsIDAtM1xuICAgICAgICB2YXIgc2xvcDtcbiAgICAgICAgZm9yKGkgPSAwOyBpIDwgcy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgaWYocy5jaGFyQXQoaSkgPT09IGI2NHBhZCkgYnJlYWs7XG4gICAgICAgICAgICB2YXIgdiA9IGI2NG1hcC5pbmRleE9mKHMuY2hhckF0KGkpKTtcbiAgICAgICAgICAgIGlmKHYgPCAwKSBjb250aW51ZTtcbiAgICAgICAgICAgIGlmKGsgPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSh2ID4+IDIpO1xuICAgICAgICAgICAgICAgIHNsb3AgPSB2ICYgMztcbiAgICAgICAgICAgICAgICBrID0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYoayA9PT0gMSkge1xuICAgICAgICAgICAgICAgIHJldCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKChzbG9wIDw8IDIpIHwgKHYgPj4gNCkpO1xuICAgICAgICAgICAgICAgIHNsb3AgPSB2ICYgMHhmO1xuICAgICAgICAgICAgICAgIGsgPSAyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZihrID09PSAyKSB7XG4gICAgICAgICAgICAgICAgcmV0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoc2xvcCk7XG4gICAgICAgICAgICAgICAgcmV0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUodiA+PiAyKTtcbiAgICAgICAgICAgICAgICBzbG9wID0gdiAmIDM7XG4gICAgICAgICAgICAgICAgayA9IDM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSgoc2xvcCA8PCAyKSB8ICh2ID4+IDQpKTtcbiAgICAgICAgICAgICAgICByZXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSh2ICYgMHhmKTtcbiAgICAgICAgICAgICAgICBrID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZihrID09PSAxKVxuICAgICAgICAgICAgcmV0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoc2xvcCA8PCAyKTtcbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICB9LFxuICAgIGhleFRvQmFzZTY0KGgpIHtcbiAgICAgICAgdmFyIGk7XG4gICAgICAgIHZhciBjO1xuICAgICAgICB2YXIgcmV0ID0gXCJcIjtcbiAgICAgICAgZm9yKGkgPSAwOyBpKzMgPD0gaC5sZW5ndGg7IGkrPTMpIHtcbiAgICAgICAgICAgIGMgPSBwYXJzZUludChoLnN1YnN0cmluZyhpLGkrMyksMTYpO1xuICAgICAgICAgICAgcmV0ICs9IGI2NG1hcC5jaGFyQXQoYyA+PiA2KSArIGI2NG1hcC5jaGFyQXQoYyAmIDYzKTtcbiAgICAgICAgfVxuICAgICAgICBpZihpKzEgPT09IGgubGVuZ3RoKSB7XG4gICAgICAgICAgICBjID0gcGFyc2VJbnQoaC5zdWJzdHJpbmcoaSxpKzEpLDE2KTtcbiAgICAgICAgICAgIHJldCArPSBiNjRtYXAuY2hhckF0KGMgPDwgMik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZihpKzIgPT09IGgubGVuZ3RoKSB7XG4gICAgICAgICAgICBjID0gcGFyc2VJbnQoaC5zdWJzdHJpbmcoaSxpKzIpLDE2KTtcbiAgICAgICAgICAgIHJldCArPSBiNjRtYXAuY2hhckF0KGMgPj4gMikgKyBiNjRtYXAuY2hhckF0KChjICYgMykgPDwgNCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGI2NHBhZCkgd2hpbGUoKHJldC5sZW5ndGggJiAzKSA+IDApIHJldCArPSBiNjRwYWQ7XG4gICAgICAgIHJldHVybiByZXQ7XG4gICAgfSxcblxuICAgIHBhZGRpbmcoc3RyKSB7XG4gICAgICAgIHZhciBtb2QgPSAoc3RyLmxlbmd0aCAlIDQpO1xuICAgICAgICB2YXIgcGFkID0gNCAtIG1vZDtcblxuICAgICAgICBpZiAobW9kID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHN0ciArIChuZXcgQXJyYXkoMSArIHBhZCkpLmpvaW4oJz0nKTtcbiAgICB9LFxuXG4gICAgYnl0ZUFycmF5VG9IZXgocmF3KSB7XG4gICAgICAgIHZhciBIRVggPSAnJztcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJhdy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIF9oZXggPSByYXdbaV0udG9TdHJpbmcoMTYpO1xuICAgICAgICAgICAgSEVYICs9IChfaGV4Lmxlbmd0aCA9PT0gMiA/IF9oZXggOiAnMCcgKyBfaGV4KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBIRVg7XG4gICAgfSxcblxuICAgIGRlY29kZVRvSEVYKHN0cikge1xuICAgICAgICByZXR1cm4gQmFzZTY0LmJ5dGVBcnJheVRvSGV4KGJhc2U2NEpzLnRvQnl0ZUFycmF5KEJhc2U2NC5wYWRkaW5nKHN0cikpKTtcbiAgICB9LFxuXG4gICAgYmFzZTY0VG9CYXNlNjRVcmwocykge1xuICAgICAgICBzID0gcy5yZXBsYWNlKC89L2csIFwiXCIpO1xuICAgICAgICBzID0gcy5yZXBsYWNlKC9cXCsvZywgXCItXCIpO1xuICAgICAgICBzID0gcy5yZXBsYWNlKC9cXC8vZywgXCJfXCIpO1xuICAgICAgICByZXR1cm4gcztcbiAgICB9LFxuXG4gICAgdXJsRGVjb2RlKHN0cikge1xuICAgICAgICBzdHIgPSBzdHIucmVwbGFjZSgvLS9nLCAnKycpIC8vIENvbnZlcnQgJy0nIHRvICcrJ1xuICAgICAgICAgICAgLnJlcGxhY2UoL18vZywgJy8nKSAvLyBDb252ZXJ0ICdfJyB0byAnLydcbiAgICAgICAgICAgIC5yZXBsYWNlKC9cXHMvZywgJyAnKTsgLy8gQ29udmVydCAnXFxzJyB0byAnICdcblxuICAgICAgICByZXR1cm4gYXRvYihzdHIpO1xuICAgIH1cbn07XG5cblxudmFyIERpZ2VzdEluZm9IZWFkID0ge1xuICAgIHNoYTE6ICczMDIxMzAwOTA2MDUyYjBlMDMwMjFhMDUwMDA0MTQnLFxuICAgIHNoYTIyNDogJzMwMmQzMDBkMDYwOTYwODY0ODAxNjUwMzA0MDIwNDA1MDAwNDFjJyxcbiAgICBzaGEyNTY6ICczMDMxMzAwZDA2MDk2MDg2NDgwMTY1MDMwNDAyMDEwNTAwMDQyMCcsXG4gICAgc2hhMzg0OiAnMzA0MTMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjAyMDUwMDA0MzAnLFxuICAgIHNoYTUxMjogJzMwNTEzMDBkMDYwOTYwODY0ODAxNjUwMzA0MDIwMzA1MDAwNDQwJyxcbiAgICBtZDI6ICczMDIwMzAwYzA2MDgyYTg2NDg4NmY3MGQwMjAyMDUwMDA0MTAnLFxuICAgIG1kNTogJzMwMjAzMDBjMDYwODJhODY0ODg2ZjcwZDAyMDUwNTAwMDQxMCcsXG4gICAgcmlwZW1kMTYwOiAnMzAyMTMwMDkwNjA1MmIyNDAzMDIwMTA1MDAwNDE0J1xufTtcblxudmFyIERpZ2VzdEFsZ3MgPSB7XG4gICAgc2hhMjU2OiBTSEEyNTYsXG4gICAgU0hBMjU2OlNIQTI1NlxufTtcblxuZnVuY3Rpb24gUlNBVmVyaWZpZXIobW9kdWx1cywgZXhwKSB7XG4gICAgdGhpcy5uID0gbnVsbDtcbiAgICB0aGlzLmUgPSAwO1xuXG4gICAgaWYgKG1vZHVsdXMgIT0gbnVsbCAmJiBleHAgIT0gbnVsbCAmJiBtb2R1bHVzLmxlbmd0aCA+IDAgJiYgZXhwLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy5uID0gbmV3IEJpZ0ludGVnZXIobW9kdWx1cywgMTYpO1xuICAgICAgICB0aGlzLmUgPSBwYXJzZUludChleHAsIDE2KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQga2V5IGRhdGEnKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGdldEFsZ29yaXRobUZyb21EaWdlc3QoaERpZ2VzdEluZm8pIHtcbiAgICBmb3IgKHZhciBhbGdOYW1lIGluIERpZ2VzdEluZm9IZWFkKSB7XG4gICAgICAgIHZhciBoZWFkID0gRGlnZXN0SW5mb0hlYWRbYWxnTmFtZV07XG4gICAgICAgIHZhciBsZW4gPSBoZWFkLmxlbmd0aDtcblxuICAgICAgICBpZiAoaERpZ2VzdEluZm8uc3Vic3RyaW5nKDAsIGxlbikgPT09IGhlYWQpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgYWxnOiBhbGdOYW1lLFxuICAgICAgICAgICAgICAgIGhhc2g6IGhEaWdlc3RJbmZvLnN1YnN0cmluZyhsZW4pXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBbXTtcbn1cblxuXG5SU0FWZXJpZmllci5wcm90b3R5cGUudmVyaWZ5ID0gZnVuY3Rpb24gKG1zZywgZW5jc2lnKSB7XG4gICAgZW5jc2lnID0gQmFzZTY0LmRlY29kZVRvSEVYKGVuY3NpZyk7XG4gICAgZW5jc2lnID0gZW5jc2lnLnJlcGxhY2UoL1teMC05YS1mXXxbXFxzXFxuXV0vaWcsICcnKTtcblxuICAgIHZhciBzaWcgPSBuZXcgQmlnSW50ZWdlcihlbmNzaWcsIDE2KTtcblxuICAgIGlmIChzaWcuYml0TGVuZ3RoKCkgPiB0aGlzLm4uYml0TGVuZ3RoKCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTaWduYXR1cmUgZG9lcyBub3QgbWF0Y2ggd2l0aCB0aGUga2V5IG1vZHVsdXMuJyk7XG4gICAgfVxuXG4gICAgdmFyIGRlY3J5cHRlZFNpZyA9IHNpZy5tb2RQb3dJbnQodGhpcy5lLCB0aGlzLm4pO1xuICAgIHZhciBkaWdlc3QgPSBkZWNyeXB0ZWRTaWcudG9TdHJpbmcoMTYpLnJlcGxhY2UoL14xZiswMC8sICcnKTtcbiAgICB2YXIgZGlnZXN0SW5mbyA9IGdldEFsZ29yaXRobUZyb21EaWdlc3QoZGlnZXN0KTtcblxuICAgIGlmIChkaWdlc3RJbmZvLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKCFEaWdlc3RBbGdzLmhhc093blByb3BlcnR5KGRpZ2VzdEluZm8uYWxnKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0hhc2hpbmcgYWxnb3JpdGhtIGlzIG5vdCBzdXBwb3J0ZWQuJyk7XG4gICAgfVxuXG4gICAgdmFyIG1zZ0hhc2ggPSBEaWdlc3RBbGdzW2RpZ2VzdEluZm8uYWxnXShtc2cpLnRvU3RyaW5nKCk7XG4gICAgcmV0dXJuIChkaWdlc3RJbmZvLmhhc2ggPT09IG1zZ0hhc2gpO1xufTtcblxuY29uc3QgQWxsb3dlZFNpZ25pbmdBbGdzID0gWydSUzI1NiddO1xuXG5jb25zdCBqd3MgPSB7XG4gICAgSldTOiB7XG4gICAgICAgIHBhcnNlOiBmdW5jdGlvbih0b2tlbikge1xuICAgICAgICAgICAgdmFyIHBhcnRzID0gdG9rZW4uc3BsaXQoJy4nKTtcbiAgICAgICAgICAgIHZhciBoZWFkZXI7XG4gICAgICAgICAgICB2YXIgcGF5bG9hZDtcblxuICAgICAgICAgICAgLy8gVGhpcyBkaXZlcmdlcyBmcm9tIEF1dGgwJ3MgaW1wbGVtZW50YXRpb24sIHdoaWNoIHRocm93cyByYXRoZXIgdGhhblxuICAgICAgICAgICAgLy8gcmV0dXJuaW5nIHVuZGVmaW5lZFxuICAgICAgICAgICAgaWYgKHBhcnRzLmxlbmd0aCAhPT0gMykge1xuICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgaGVhZGVyID0gSlNPTi5wYXJzZShCYXNlNjQudXJsRGVjb2RlKHBhcnRzWzBdKSk7XG4gICAgICAgICAgICAgICAgcGF5bG9hZCA9IEpTT04ucGFyc2UoQmFzZTY0LnVybERlY29kZShwYXJ0c1sxXSkpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRXJyb3IoJ1Rva2VuIGhlYWRlciBvciBwYXlsb2FkIGlzIG5vdCB2YWxpZCBKU09OJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgaGVhZGVyT2JqOiBoZWFkZXIsXG4gICAgICAgICAgICAgICAgcGF5bG9hZE9iajogcGF5bG9hZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sXG4gICAgICAgIHZlcmlmeTogZnVuY3Rpb24oand0LCBrZXksIGFsbG93ZWRTaWduaW5nQWxncyA9IFtdKSB7XG4gICAgICAgICAgICBhbGxvd2VkU2lnbmluZ0FsZ3MuZm9yRWFjaCgoYWxnKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKEFsbG93ZWRTaWduaW5nQWxncy5pbmRleE9mKGFsZykgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBzaWduaW5nIGFsZ29yaXRobTogJyArIGFsZyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB2YXIgdmVyaWZ5ID0gbmV3IFJTQVZlcmlmaWVyKGtleS5uLCBrZXkuZSk7XG4gICAgICAgICAgICB2YXIgcGFydHMgPSBqd3Quc3BsaXQoJy4nKTtcblxuICAgICAgICAgICAgdmFyIGhlYWRlckFuZFBheWxvYWQgPSBbcGFydHNbMF0sIHBhcnRzWzFdXS5qb2luKCcuJyk7XG4gICAgICAgICAgICByZXR1cm4gdmVyaWZ5LnZlcmlmeShoZWFkZXJBbmRQYXlsb2FkLCBwYXJ0c1syXSk7XG4gICAgICAgIH0sXG4gICAgfSxcbn07XG5cbmNvbnN0IEtleVV0aWwgPSB7XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBkZWNvZGVkIGtleXMgaW4gSGV4IGZvcm1hdCBmb3IgdXNlIGluIGNyeXB0byBmdW5jdGlvbnMuXG4gICAgICogU3VwcG9ydHMgbW9kdWx1cy9leHBvbmVudC1zdHlsZSBrZXlzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtvYmplY3R9IGtleSB0aGUgc2VjdXJpdHkga2V5XG4gICAgICogQHJldHVybnNcbiAgICAgKi9cbiAgICBnZXRLZXkoa2V5KSB7XG4gICAgICAgIGlmIChrZXkua3R5ID09PSAnUlNBJykge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBlOiBCYXNlNjQuZGVjb2RlVG9IRVgoa2V5LmUpLFxuICAgICAgICAgICAgICAgIG46IEJhc2U2NC5kZWNvZGVUb0hFWChrZXkubiksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSxcbn07XG5cbmNvbnN0IFg1MDkgPSB7XG4gICAgZ2V0UHVibGljS2V5RnJvbUNlcnRQRU06IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vdCBpbXBsZW1lbnRlZC4gVXNlIHRoZSBmdWxsIG9pZGMtY2xpZW50IGxpYnJhcnkgaWYgeW91IG5lZWQgc3VwcG9ydCBmb3IgWDUwOS4nKTtcbiAgICB9LFxufTtcblxuY29uc3QgY3J5cHRvID0ge1xuICAgIFV0aWw6IHtcbiAgICAgICAgaGFzaFN0cmluZzogZnVuY3Rpb24odmFsdWUsIGFsZykge1xuICAgICAgICAgICAgdmFyIGhhc2hGdW5jID0gRGlnZXN0QWxnc1thbGddO1xuICAgICAgICAgICAgcmV0dXJuIGhhc2hGdW5jKHZhbHVlKS50b1N0cmluZygpO1xuICAgICAgICB9LFxuICAgIH1cbn07XG5cbmZ1bmN0aW9uIGhleHRvYjY0dShzKSB7XG4gICAgaWYgKHMubGVuZ3RoICUgMiA9PT0gMSkge1xuICAgICAgICBzID0gJzAnICsgcztcbiAgICB9XG4gICAgcmV0dXJuIEJhc2U2NC5iYXNlNjRUb0Jhc2U2NFVybChCYXNlNjQuaGV4VG9CYXNlNjQocykpO1xufVxuXG5jb25zdCB7YjY0dG9oZXh9ID0gQmFzZTY0O1xuXG5leHBvcnQge1xuICAgIGp3cyxcbiAgICBLZXlVdGlsLFxuICAgIFg1MDksXG4gICAgY3J5cHRvLFxuICAgIGhleHRvYjY0dSxcbiAgICBiNjR0b2hleCxcbiAgICBBbGxvd2VkU2lnbmluZ0FsZ3Ncbn07XG4iLCJpbXBvcnQgdXVpZDQgZnJvbSAndXVpZC92NCc7XG5cbi8qKlxuICogR2VuZXJhdGVzIFJGQzQxMjIgdmVyc2lvbiA0IGd1aWQgKClcbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByYW5kb20oKSB7XG4gIHJldHVybiB1dWlkNCgpLnJlcGxhY2UoLy0vZywgJycpO1xufVxuIiwiY29uc3QgVmVyc2lvbiA9IFwiMS4xMC4wLWJldGEuMVwiOyBleHBvcnQge1ZlcnNpb259OyJdLCJzb3VyY2VSb290IjoiIn0= \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9PaWRjL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL09pZGMvLi9pbmRleC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2Jhc2U2NC1qcy9pbmRleC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvZXM2L3Byb21pc2UuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ZuL2FycmF5L2ZpbmQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ZuL2FycmF5L2lzLWFycmF5LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9mbi9hcnJheS9zb21lLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9mbi9hcnJheS9zcGxpY2UuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ZuL2Z1bmN0aW9uL2JpbmQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ZuL29iamVjdC9hc3NpZ24uanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2EtZnVuY3Rpb24uanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FkZC10by11bnNjb3BhYmxlcy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYW4taW5zdGFuY2UuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FuLW9iamVjdC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktaW5jbHVkZXMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FycmF5LW1ldGhvZHMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FycmF5LXNwZWNpZXMtY29uc3RydWN0b3IuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FycmF5LXNwZWNpZXMtY3JlYXRlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19iaW5kLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19jbGFzc29mLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19jb2YuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2NvcmUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2N0eC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZGVmaW5lZC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZGVzY3JpcHRvcnMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2RvbS1jcmVhdGUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2VudW0tYnVnLWtleXMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2V4cG9ydC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZmFpbHMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2Zvci1vZi5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZnVuY3Rpb24tdG8tc3RyaW5nLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19nbG9iYWwuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2hhcy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faGlkZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faHRtbC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faWU4LWRvbS1kZWZpbmUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2ludm9rZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faW9iamVjdC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtYXJyYXktaXRlci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2lzLW9iamVjdC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlci1jYWxsLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pdGVyLWNyZWF0ZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlci1kZWZpbmUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2l0ZXItZGV0ZWN0LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pdGVyLXN0ZXAuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2l0ZXJhdG9ycy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbGlicmFyeS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWljcm90YXNrLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19uZXctcHJvbWlzZS1jYXBhYmlsaXR5LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtYXNzaWduLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtY3JlYXRlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZHAuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1kcHMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1nb3BzLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZ3BvLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3Qta2V5cy1pbnRlcm5hbC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWtleXMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1waWUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3BlcmZvcm0uanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3Byb21pc2UtcmVzb2x2ZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcHJvcGVydHktZGVzYy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcmVkZWZpbmUtYWxsLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19yZWRlZmluZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2V0LXNwZWNpZXMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3NldC10by1zdHJpbmctdGFnLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zaGFyZWQta2V5LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zaGFyZWQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3NwZWNpZXMtY29uc3RydWN0b3IuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3N0cmljdC1tZXRob2QuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3N0cmluZy1hdC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdGFzay5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8tYWJzb2x1dGUtaW5kZXguanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3RvLWludGVnZXIuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3RvLWlvYmplY3QuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3RvLWxlbmd0aC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8tb2JqZWN0LmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190by1wcmltaXRpdmUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3VpZC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdXNlci1hZ2VudC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fd2tzLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2NvcmUuZ2V0LWl0ZXJhdG9yLW1ldGhvZC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZmluZC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuaXMtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5Lml0ZXJhdG9yLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5zb21lLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5mdW5jdGlvbi5iaW5kLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuYXNzaWduLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QudG8tc3RyaW5nLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5wcm9taXNlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuaXRlcmF0b3IuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvd2ViLmRvbS5pdGVyYWJsZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2NyeXB0by1qcy9jb3JlLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvY3J5cHRvLWpzL3NoYTI1Ni5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL2pzYm4vaW5kZXguanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL25vZGVfbW9kdWxlcy91dWlkL2xpYi9ieXRlc1RvVXVpZC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vbm9kZV9tb2R1bGVzL3V1aWQvbGliL3JuZy1icm93c2VyLmpzIiwid2VicGFjazovL09pZGMvLi9ub2RlX21vZHVsZXMvdXVpZC92NC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vcG9seWZpbGxzLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvQWNjZXNzVG9rZW5FdmVudHMuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9DaGVja1Nlc3Npb25JRnJhbWUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9Db3Jkb3ZhSUZyYW1lTmF2aWdhdG9yLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvQ29yZG92YVBvcHVwTmF2aWdhdG9yLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvQ29yZG92YVBvcHVwV2luZG93LmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvRXJyb3JSZXNwb25zZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL0V2ZW50LmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvR2xvYmFsLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvSUZyYW1lTmF2aWdhdG9yLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvSUZyYW1lV2luZG93LmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvSW5NZW1vcnlXZWJTdG9yYWdlLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvSm9zZVV0aWxJbXBsLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvSm9zZVV0aWxSc2EuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9Kc29uU2VydmljZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL0xvZy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL01ldGFkYXRhU2VydmljZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL09pZGNDbGllbnQuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9PaWRjQ2xpZW50U2V0dGluZ3MuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9Qb3B1cE5hdmlnYXRvci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL1BvcHVwV2luZG93LmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvUmVkaXJlY3ROYXZpZ2F0b3IuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9SZXNwb25zZVZhbGlkYXRvci5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL1Nlc3Npb25Nb25pdG9yLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvU2lnbmluUmVxdWVzdC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL1NpZ25pblJlc3BvbnNlLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvU2lnbmluU3RhdGUuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9TaWdub3V0UmVxdWVzdC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL1NpZ25vdXRSZXNwb25zZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL1NpbGVudFJlbmV3U2VydmljZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL1N0YXRlLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvVGltZXIuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9Ub2tlbkNsaWVudC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL1Rva2VuUmV2b2NhdGlvbkNsaWVudC5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL1VybFV0aWxpdHkuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9Vc2VyLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvVXNlckluZm9TZXJ2aWNlLmpzIiwid2VicGFjazovL09pZGMvLi9zcmMvVXNlck1hbmFnZXIuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9Vc2VyTWFuYWdlckV2ZW50cy5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL1VzZXJNYW5hZ2VyU2V0dGluZ3MuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9XZWJTdG9yYWdlU3RhdGVTdG9yZS5qcyIsIndlYnBhY2s6Ly9PaWRjLy4vc3JjL2NyeXB0by9yc2EuanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3NyYy9yYW5kb20uanMiLCJ3ZWJwYWNrOi8vT2lkYy8uL3ZlcnNpb24uanMiXSwibmFtZXMiOlsiVmVyc2lvbiIsIkxvZyIsIk9pZGNDbGllbnQiLCJPaWRjQ2xpZW50U2V0dGluZ3MiLCJXZWJTdG9yYWdlU3RhdGVTdG9yZSIsIkluTWVtb3J5V2ViU3RvcmFnZSIsIlVzZXJNYW5hZ2VyIiwiQWNjZXNzVG9rZW5FdmVudHMiLCJNZXRhZGF0YVNlcnZpY2UiLCJDb3Jkb3ZhUG9wdXBOYXZpZ2F0b3IiLCJDb3Jkb3ZhSUZyYW1lTmF2aWdhdG9yIiwiQ2hlY2tTZXNzaW9uSUZyYW1lIiwiVG9rZW5SZXZvY2F0aW9uQ2xpZW50IiwiU2Vzc2lvbk1vbml0b3IiLCJHbG9iYWwiLCJVc2VyIiwiRGVmYXVsdEFjY2Vzc1Rva2VuRXhwaXJpbmdOb3RpZmljYXRpb25UaW1lIiwiYWNjZXNzVG9rZW5FeHBpcmluZ05vdGlmaWNhdGlvblRpbWUiLCJhY2Nlc3NUb2tlbkV4cGlyaW5nVGltZXIiLCJUaW1lciIsImFjY2Vzc1Rva2VuRXhwaXJlZFRpbWVyIiwiX2FjY2Vzc1Rva2VuRXhwaXJpbmdOb3RpZmljYXRpb25UaW1lIiwiX2FjY2Vzc1Rva2VuRXhwaXJpbmciLCJfYWNjZXNzVG9rZW5FeHBpcmVkIiwibG9hZCIsImNvbnRhaW5lciIsImFjY2Vzc190b2tlbiIsImV4cGlyZXNfaW4iLCJ1bmRlZmluZWQiLCJkdXJhdGlvbiIsImRlYnVnIiwiZXhwaXJpbmciLCJpbml0IiwiY2FuY2VsIiwiZXhwaXJlZCIsInVubG9hZCIsImFkZEFjY2Vzc1Rva2VuRXhwaXJpbmciLCJjYiIsImFkZEhhbmRsZXIiLCJyZW1vdmVBY2Nlc3NUb2tlbkV4cGlyaW5nIiwicmVtb3ZlSGFuZGxlciIsImFkZEFjY2Vzc1Rva2VuRXhwaXJlZCIsInJlbW92ZUFjY2Vzc1Rva2VuRXhwaXJlZCIsIkRlZmF1bHRJbnRlcnZhbCIsImNhbGxiYWNrIiwiY2xpZW50X2lkIiwidXJsIiwiaW50ZXJ2YWwiLCJzdG9wT25FcnJvciIsIl9jYWxsYmFjayIsIl9jbGllbnRfaWQiLCJfdXJsIiwiX2ludGVydmFsIiwiX3N0b3BPbkVycm9yIiwiaWR4IiwiaW5kZXhPZiIsIl9mcmFtZV9vcmlnaW4iLCJzdWJzdHIiLCJfZnJhbWUiLCJ3aW5kb3ciLCJkb2N1bWVudCIsImNyZWF0ZUVsZW1lbnQiLCJzdHlsZSIsInZpc2liaWxpdHkiLCJwb3NpdGlvbiIsImRpc3BsYXkiLCJ3aWR0aCIsImhlaWdodCIsInNyYyIsIlByb21pc2UiLCJyZXNvbHZlIiwib25sb2FkIiwiYm9keSIsImFwcGVuZENoaWxkIiwiX2JvdW5kTWVzc2FnZUV2ZW50IiwiX21lc3NhZ2UiLCJiaW5kIiwiYWRkRXZlbnRMaXN0ZW5lciIsImUiLCJvcmlnaW4iLCJzb3VyY2UiLCJjb250ZW50V2luZG93IiwiZGF0YSIsImVycm9yIiwic3RvcCIsInN0YXJ0Iiwic2Vzc2lvbl9zdGF0ZSIsIl9zZXNzaW9uX3N0YXRlIiwic2VuZCIsInBvc3RNZXNzYWdlIiwiX3RpbWVyIiwic2V0SW50ZXJ2YWwiLCJjbGVhckludGVydmFsIiwicHJlcGFyZSIsInBhcmFtcyIsInBvcHVwV2luZG93RmVhdHVyZXMiLCJwb3B1cCIsIkNvcmRvdmFQb3B1cFdpbmRvdyIsIkRlZmF1bHRQb3B1cEZlYXR1cmVzIiwiRGVmYXVsdFBvcHVwVGFyZ2V0IiwiX3Byb21pc2UiLCJyZWplY3QiLCJfcmVzb2x2ZSIsIl9yZWplY3QiLCJmZWF0dXJlcyIsInRhcmdldCIsInBvcHVwV2luZG93VGFyZ2V0IiwicmVkaXJlY3RfdXJpIiwic3RhcnRVcmwiLCJfaXNJbkFwcEJyb3dzZXJJbnN0YWxsZWQiLCJjb3Jkb3ZhTWV0YWRhdGEiLCJzb21lIiwibmFtZSIsImhhc093blByb3BlcnR5IiwibmF2aWdhdGUiLCJfZXJyb3IiLCJjb3Jkb3ZhIiwicmVxdWlyZSIsIm1ldGFkYXRhIiwiX3BvcHVwIiwiSW5BcHBCcm93c2VyIiwib3BlbiIsIl9leGl0Q2FsbGJhY2tFdmVudCIsIl9leGl0Q2FsbGJhY2siLCJfbG9hZFN0YXJ0Q2FsbGJhY2tFdmVudCIsIl9sb2FkU3RhcnRDYWxsYmFjayIsInByb21pc2UiLCJldmVudCIsIl9zdWNjZXNzIiwibWVzc2FnZSIsIl9jbGVhbnVwIiwiRXJyb3IiLCJjbG9zZSIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJFcnJvclJlc3BvbnNlIiwiZXJyb3JfZGVzY3JpcHRpb24iLCJlcnJvcl91cmkiLCJzdGF0ZSIsIkV2ZW50IiwiX25hbWUiLCJfY2FsbGJhY2tzIiwicHVzaCIsImZpbmRJbmRleCIsIml0ZW0iLCJzcGxpY2UiLCJyYWlzZSIsImkiLCJsZW5ndGgiLCJ0aW1lciIsImhhbmRsZSIsInRlc3RpbmciLCJyZXF1ZXN0IiwiX3Rlc3RpbmciLCJzZXRYTUxIdHRwUmVxdWVzdCIsIm5ld1JlcXVlc3QiLCJsb2NhdGlvbiIsImxvY2FsU3RvcmFnZSIsInNlc3Npb25TdG9yYWdlIiwiWE1MSHR0cFJlcXVlc3QiLCJJRnJhbWVOYXZpZ2F0b3IiLCJmcmFtZSIsIklGcmFtZVdpbmRvdyIsIm5vdGlmeVBhcmVudCIsIkRlZmF1bHRUaW1lb3V0IiwidGltZW91dCIsInNpbGVudFJlcXVlc3RUaW1lb3V0Iiwic2V0VGltZW91dCIsIl90aW1lb3V0IiwiY2xlYXJUaW1lb3V0IiwicmVtb3ZlQ2hpbGQiLCJfb3JpZ2luIiwiZnJhbWVFbGVtZW50IiwiaHJlZiIsInBhcmVudCIsInByb3RvY29sIiwiaG9zdCIsIl9kYXRhIiwiZ2V0SXRlbSIsImtleSIsInNldEl0ZW0iLCJ2YWx1ZSIsInJlbW92ZUl0ZW0iLCJpbmRleCIsIk9iamVjdCIsImdldE93blByb3BlcnR5TmFtZXMiLCJnZXRKb3NlVXRpbCIsImp3cyIsIktleVV0aWwiLCJYNTA5IiwiY3J5cHRvIiwiaGV4dG9iNjR1IiwiYjY0dG9oZXgiLCJBbGxvd2VkU2lnbmluZ0FsZ3MiLCJwYXJzZUp3dCIsImp3dCIsInRva2VuIiwiSldTIiwicGFyc2UiLCJoZWFkZXIiLCJoZWFkZXJPYmoiLCJwYXlsb2FkIiwicGF5bG9hZE9iaiIsInZhbGlkYXRlSnd0IiwiaXNzdWVyIiwiYXVkaWVuY2UiLCJjbG9ja1NrZXciLCJub3ciLCJ0aW1lSW5zZW5zaXRpdmUiLCJrdHkiLCJuIiwiZ2V0S2V5IiwieDVjIiwiaGV4IiwiZ2V0UHVibGljS2V5RnJvbUNlcnRIZXgiLCJjcnYiLCJ4IiwieSIsIkpvc2VVdGlsIiwiX3ZhbGlkYXRlSnd0IiwidmFsaWRhdGVKd3RBdHRyaWJ1dGVzIiwicGFyc2VJbnQiLCJEYXRlIiwiaXNzIiwiYXVkIiwidmFsaWRBdWRpZW5jZSIsIkFycmF5IiwiaXNBcnJheSIsImF6cCIsImxvd2VyTm93IiwidXBwZXJOb3ciLCJpYXQiLCJuYmYiLCJleHAiLCJ0aGVuIiwidmVyaWZ5IiwiaGFzaFN0cmluZyIsImFsZyIsIlV0aWwiLCJoZXhUb0Jhc2U2NFVybCIsIkpzb25TZXJ2aWNlIiwiYWRkaXRpb25hbENvbnRlbnRUeXBlcyIsIlhNTEh0dHBSZXF1ZXN0Q3RvciIsImp3dEhhbmRsZXIiLCJfY29udGVudFR5cGVzIiwic2xpY2UiLCJfWE1MSHR0cFJlcXVlc3QiLCJfand0SGFuZGxlciIsImdldEpzb24iLCJyZXEiLCJhbGxvd2VkQ29udGVudFR5cGVzIiwic3RhdHVzIiwiY29udGVudFR5cGUiLCJnZXRSZXNwb25zZUhlYWRlciIsImZvdW5kIiwiZmluZCIsInN0YXJ0c1dpdGgiLCJKU09OIiwicmVzcG9uc2VUZXh0Iiwic3RhdHVzVGV4dCIsIm9uZXJyb3IiLCJzZXRSZXF1ZXN0SGVhZGVyIiwicG9zdEZvcm0iLCJlbmNvZGVVUklDb21wb25lbnQiLCJub3BMb2dnZXIiLCJpbmZvIiwid2FybiIsIk5PTkUiLCJFUlJPUiIsIldBUk4iLCJJTkZPIiwiREVCVUciLCJsb2dnZXIiLCJsZXZlbCIsInJlc2V0IiwiYXJncyIsImFwcGx5IiwiZnJvbSIsIk9pZGNNZXRhZGF0YVVybFBhdGgiLCJzZXR0aW5ncyIsIkpzb25TZXJ2aWNlQ3RvciIsIl9zZXR0aW5ncyIsIl9qc29uU2VydmljZSIsImdldE1ldGFkYXRhIiwibWV0YWRhdGFVcmwiLCJnZXRJc3N1ZXIiLCJfZ2V0TWV0YWRhdGFQcm9wZXJ0eSIsImdldEF1dGhvcml6YXRpb25FbmRwb2ludCIsImdldFVzZXJJbmZvRW5kcG9pbnQiLCJnZXRUb2tlbkVuZHBvaW50Iiwib3B0aW9uYWwiLCJnZXRDaGVja1Nlc3Npb25JZnJhbWUiLCJnZXRFbmRTZXNzaW9uRW5kcG9pbnQiLCJnZXRSZXZvY2F0aW9uRW5kcG9pbnQiLCJnZXRLZXlzRW5kcG9pbnQiLCJnZXRTaWduaW5nS2V5cyIsInNpZ25pbmdLZXlzIiwiandrc191cmkiLCJrZXlTZXQiLCJrZXlzIiwiX21ldGFkYXRhVXJsIiwiYXV0aG9yaXR5IiwiY3JlYXRlU2lnbmluUmVxdWVzdCIsInJlc3BvbnNlX3R5cGUiLCJzY29wZSIsInByb21wdCIsIm1heF9hZ2UiLCJ1aV9sb2NhbGVzIiwiaWRfdG9rZW5faGludCIsImxvZ2luX2hpbnQiLCJhY3JfdmFsdWVzIiwicmVzb3VyY2UiLCJyZXF1ZXN0X3VyaSIsInJlc3BvbnNlX21vZGUiLCJleHRyYVF1ZXJ5UGFyYW1zIiwiZXh0cmFUb2tlblBhcmFtcyIsInJlcXVlc3RfdHlwZSIsInNraXBVc2VySW5mbyIsInN0YXRlU3RvcmUiLCJTaWduaW5SZXF1ZXN0IiwiaXNDb2RlIiwiX21ldGFkYXRhU2VydmljZSIsInNpZ25pblJlcXVlc3QiLCJjbGllbnRfc2VjcmV0Iiwic2lnbmluU3RhdGUiLCJfc3RhdGVTdG9yZSIsInNldCIsImlkIiwidG9TdG9yYWdlU3RyaW5nIiwicmVhZFNpZ25pblJlc3BvbnNlU3RhdGUiLCJyZW1vdmVTdGF0ZSIsInVzZVF1ZXJ5IiwiZGVsaW1pdGVyIiwicmVzcG9uc2UiLCJTaWduaW5SZXNwb25zZSIsInN0YXRlQXBpIiwicmVtb3ZlIiwiZ2V0Iiwic3RvcmVkU3RhdGVTdHJpbmciLCJTaWduaW5TdGF0ZSIsImZyb21TdG9yYWdlU3RyaW5nIiwicHJvY2Vzc1NpZ25pblJlc3BvbnNlIiwiX3ZhbGlkYXRvciIsInZhbGlkYXRlU2lnbmluUmVzcG9uc2UiLCJjcmVhdGVTaWdub3V0UmVxdWVzdCIsInBvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaSIsIlNpZ25vdXRSZXF1ZXN0Iiwic2lnbm91dFN0YXRlIiwicmVhZFNpZ25vdXRSZXNwb25zZVN0YXRlIiwiU2lnbm91dFJlc3BvbnNlIiwic3RhdGVLZXkiLCJTdGF0ZSIsInByb2Nlc3NTaWdub3V0UmVzcG9uc2UiLCJ2YWxpZGF0ZVNpZ25vdXRSZXNwb25zZSIsImNsZWFyU3RhbGVTdGF0ZSIsInN0YWxlU3RhdGVBZ2UiLCJ2YWxpZGF0b3IiLCJtZXRhZGF0YVNlcnZpY2UiLCJEZWZhdWx0UmVzcG9uc2VUeXBlIiwiRGVmYXVsdFNjb3BlIiwiRGVmYXVsdFN0YWxlU3RhdGVBZ2UiLCJEZWZhdWx0Q2xvY2tTa2V3SW5TZWNvbmRzIiwiZmlsdGVyUHJvdG9jb2xDbGFpbXMiLCJsb2FkVXNlckluZm8iLCJ1c2VySW5mb0p3dElzc3VlciIsIlJlc3BvbnNlVmFsaWRhdG9yQ3RvciIsIlJlc3BvbnNlVmFsaWRhdG9yIiwiTWV0YWRhdGFTZXJ2aWNlQ3RvciIsIl9hdXRob3JpdHkiLCJfbWV0YWRhdGEiLCJfc2lnbmluZ0tleXMiLCJfY2xpZW50X3NlY3JldCIsIl9yZXNwb25zZV90eXBlIiwiX3Njb3BlIiwiX3JlZGlyZWN0X3VyaSIsIl9wb3N0X2xvZ291dF9yZWRpcmVjdF91cmkiLCJfcHJvbXB0IiwiX2Rpc3BsYXkiLCJfbWF4X2FnZSIsIl91aV9sb2NhbGVzIiwiX2Fjcl92YWx1ZXMiLCJfcmVzb3VyY2UiLCJfcmVzcG9uc2VfbW9kZSIsIl9maWx0ZXJQcm90b2NvbENsYWltcyIsIl9sb2FkVXNlckluZm8iLCJfc3RhbGVTdGF0ZUFnZSIsIl9jbG9ja1NrZXciLCJfdXNlckluZm9Kd3RJc3N1ZXIiLCJfZXh0cmFRdWVyeVBhcmFtcyIsIlBvcHVwTmF2aWdhdG9yIiwiUG9wdXBXaW5kb3ciLCJrZWVwT3BlbiIsIm5vdGlmeU9wZW5lciIsIkNoZWNrRm9yUG9wdXBDbG9zZWRJbnRlcnZhbCIsIl9jaGVja0ZvclBvcHVwQ2xvc2VkVGltZXIiLCJfY2hlY2tGb3JQb3B1cENsb3NlZCIsIl9pZCIsImZvY3VzIiwiY2xvc2VkIiwib3BlbmVyIiwiVXJsVXRpbGl0eSIsInBhcnNlVXJsRnJhZ21lbnQiLCJSZWRpcmVjdE5hdmlnYXRvciIsInVzZVJlcGxhY2VUb05hdmlnYXRlIiwicmVwbGFjZSIsIlByb3RvY29sQ2xhaW1zIiwiVXNlckluZm9TZXJ2aWNlQ3RvciIsIlVzZXJJbmZvU2VydmljZSIsImpvc2VVdGlsIiwiVG9rZW5DbGllbnRDdG9yIiwiVG9rZW5DbGllbnQiLCJfdXNlckluZm9TZXJ2aWNlIiwiX2pvc2VVdGlsIiwiX3Rva2VuQ2xpZW50IiwiX3Byb2Nlc3NTaWduaW5QYXJhbXMiLCJfdmFsaWRhdGVUb2tlbnMiLCJfcHJvY2Vzc0NsYWltcyIsIm5vbmNlIiwiaWRfdG9rZW4iLCJjb2RlX3ZlcmlmaWVyIiwiY29kZSIsImlzT3BlbklkQ29ubmVjdCIsInByb2ZpbGUiLCJnZXRDbGFpbXMiLCJjbGFpbXMiLCJzdWIiLCJfbWVyZ2VDbGFpbXMiLCJjbGFpbXMxIiwiY2xhaW1zMiIsInJlc3VsdCIsImFzc2lnbiIsInZhbHVlcyIsImZvckVhY2giLCJ0eXBlIiwiX3Byb2Nlc3NDb2RlIiwiX3ZhbGlkYXRlSWRUb2tlbkFuZEFjY2Vzc1Rva2VuIiwiX3ZhbGlkYXRlSWRUb2tlbiIsImV4Y2hhbmdlQ29kZSIsInRva2VuUmVzcG9uc2UiLCJfdmFsaWRhdGVJZFRva2VuQXR0cmlidXRlcyIsImNsb2NrU2tld0luU2Vjb25kcyIsIl92YWxpZGF0ZUFjY2Vzc1Rva2VuIiwia2lkIiwiX2ZpbHRlckJ5QWxnIiwiZmlsdGVyIiwiYXRfaGFzaCIsImhhc2hBbGciLCJoYXNoQml0cyIsInNoYSIsImhhc2giLCJsZWZ0IiwibGVmdF9iNjR1IiwidXNlck1hbmFnZXIiLCJDaGVja1Nlc3Npb25JRnJhbWVDdG9yIiwiX3VzZXJNYW5hZ2VyIiwiX0NoZWNrU2Vzc2lvbklGcmFtZUN0b3IiLCJldmVudHMiLCJhZGRVc2VyTG9hZGVkIiwiX3N0YXJ0IiwiYWRkVXNlclVubG9hZGVkIiwiX3N0b3AiLCJnZXRVc2VyIiwidXNlciIsIm1vbml0b3JBbm9ueW1vdXNTZXNzaW9uIiwicXVlcnlTZXNzaW9uU3RhdHVzIiwidG1wVXNlciIsInNlc3Npb24iLCJzaWQiLCJjYXRjaCIsImVyciIsIl9zdWIiLCJfc2lkIiwiX2NoZWNrU2Vzc2lvbklGcmFtZSIsIl9jaGVja1Nlc3Npb25JbnRlcnZhbCIsIl9zdG9wQ2hlY2tTZXNzaW9uT25FcnJvciIsInJhaXNlRXZlbnQiLCJfcmFpc2VVc2VyU2Vzc2lvbkNoYW5nZWQiLCJfcmFpc2VVc2VyU2lnbmVkT3V0IiwiX3JhaXNlVXNlclNpZ25lZEluIiwiY2hlY2tTZXNzaW9uSW50ZXJ2YWwiLCJzdG9wQ2hlY2tTZXNzaW9uT25FcnJvciIsIm9pZGMiLCJpc09pZGMiLCJhZGRRdWVyeVBhcmFtIiwiY29kZV9jaGFsbGVuZ2UiLCJzcGxpdCIsImlzT0F1dGgiLCJPaWRjU2NvcGUiLCJ0b2tlbl90eXBlIiwiZXhwaXJlc19hdCIsInNjb3BlcyIsImFyZ3VtZW50cyIsIl9ub25jZSIsIl9jb2RlX3ZlcmlmaWVyIiwiX2NvZGVfY2hhbGxlbmdlIiwiX2V4dHJhVG9rZW5QYXJhbXMiLCJfc2tpcFVzZXJJbmZvIiwic3RyaW5naWZ5IiwiY3JlYXRlZCIsInN0b3JhZ2VTdHJpbmciLCJTaWxlbnRSZW5ld1NlcnZpY2UiLCJfdG9rZW5FeHBpcmluZyIsInNpZ25pblNpbGVudCIsIl9yYWlzZVNpbGVudFJlbmV3RXJyb3IiLCJfY3JlYXRlZCIsIl9yZXF1ZXN0X3R5cGUiLCJzdG9yYWdlIiwiYWdlIiwiY3V0b2ZmIiwiZ2V0QWxsS2V5cyIsInByb21pc2VzIiwicCIsImFsbCIsIlRpbWVyRHVyYXRpb24iLCJub3dGdW5jIiwiX25vd0Z1bmMiLCJleHBpcmF0aW9uIiwiX3RpbWVySGFuZGxlIiwiX2V4cGlyYXRpb24iLCJ0aW1lckR1cmF0aW9uIiwiZGlmZiIsImdyYW50X3R5cGUiLCJleGNoYW5nZVJlZnJlc2hUb2tlbiIsInJlZnJlc2hfdG9rZW4iLCJBY2Nlc3NUb2tlblR5cGVIaW50IiwiUmVmcmVzaFRva2VuVHlwZUhpbnQiLCJfWE1MSHR0cFJlcXVlc3RDdG9yIiwicmV2b2tlIiwicmVxdWlyZWQiLCJfcmV2b2tlIiwieGhyIiwiZ2xvYmFsIiwibGFzdEluZGV4T2YiLCJyZWdleCIsIm0iLCJjb3VudGVyIiwiZXhlYyIsImRlY29kZVVSSUNvbXBvbmVudCIsInByb3AiLCJfZ2V0Q2xhaW1zRnJvbUp3dCIsImlzc3VlclByb21pc2UiLCJTaWxlbnRSZW5ld1NlcnZpY2VDdG9yIiwiU2Vzc2lvbk1vbml0b3JDdG9yIiwiVG9rZW5SZXZvY2F0aW9uQ2xpZW50Q3RvciIsIlVzZXJNYW5hZ2VyU2V0dGluZ3MiLCJfZXZlbnRzIiwiVXNlck1hbmFnZXJFdmVudHMiLCJfc2lsZW50UmVuZXdTZXJ2aWNlIiwiYXV0b21hdGljU2lsZW50UmVuZXciLCJzdGFydFNpbGVudFJlbmV3IiwibW9uaXRvclNlc3Npb24iLCJfc2Vzc2lvbk1vbml0b3IiLCJfdG9rZW5SZXZvY2F0aW9uQ2xpZW50IiwiX2xvYWRVc2VyIiwicmVtb3ZlVXNlciIsInN0b3JlVXNlciIsInNpZ25pblJlZGlyZWN0IiwibmF2UGFyYW1zIiwiX3NpZ25pblN0YXJ0IiwiX3JlZGlyZWN0TmF2aWdhdG9yIiwic2lnbmluUmVkaXJlY3RDYWxsYmFjayIsIl9zaWduaW5FbmQiLCJzaWduaW5Qb3B1cCIsInBvcHVwX3JlZGlyZWN0X3VyaSIsIl9zaWduaW4iLCJfcG9wdXBOYXZpZ2F0b3IiLCJzaWduaW5Qb3B1cENhbGxiYWNrIiwiX3NpZ25pbkNhbGxiYWNrIiwiX3VzZVJlZnJlc2hUb2tlbiIsImluY2x1ZGVJZFRva2VuSW5TaWxlbnRSZW5ldyIsInZhbGlkYXRlU3ViT25TaWxlbnRSZW5ldyIsImN1cnJlbnRfc3ViIiwiX3NpZ25pblNpbGVudElmcmFtZSIsImlkVG9rZW5WYWxpZGF0aW9uIiwiX3ZhbGlkYXRlSWRUb2tlbkZyb21Ub2tlblJlZnJlc2hUb2tlbiIsImF1dGhfdGltZSIsInNpbGVudF9yZWRpcmVjdF91cmkiLCJfaWZyYW1lTmF2aWdhdG9yIiwic2lnbmluU2lsZW50Q2FsbGJhY2siLCJzaWduaW5DYWxsYmFjayIsInNpZ25vdXRDYWxsYmFjayIsInNpZ25vdXRSZWRpcmVjdENhbGxiYWNrIiwic2lnbm91dFBvcHVwQ2FsbGJhY2siLCJxdWVyeV9zdGF0dXNfcmVzcG9uc2VfdHlwZSIsIm5hdlJlc3BvbnNlIiwic2lnbmluUmVzcG9uc2UiLCJuYXZpZ2F0b3IiLCJuYXZpZ2F0b3JQYXJhbXMiLCJzaWdub3V0UmVkaXJlY3QiLCJwb3N0TG9nb3V0UmVkaXJlY3RVcmkiLCJfc2lnbm91dFN0YXJ0IiwiX3NpZ25vdXRFbmQiLCJzaWdub3V0UG9wdXAiLCJwb3B1cF9wb3N0X2xvZ291dF9yZWRpcmVjdF91cmkiLCJfc2lnbm91dCIsInJldm9rZVByb21pc2UiLCJyZXZva2VBY2Nlc3NUb2tlbk9uU2lnbm91dCIsIl9yZXZva2VJbnRlcm5hbCIsInNpZ25vdXRSZXF1ZXN0Iiwic2lnbm91dFJlc3BvbnNlIiwicmV2b2tlQWNjZXNzVG9rZW4iLCJzdWNjZXNzIiwiX3Jldm9rZUFjY2Vzc1Rva2VuSW50ZXJuYWwiLCJfcmV2b2tlUmVmcmVzaFRva2VuSW50ZXJuYWwiLCJhdFN1Y2Nlc3MiLCJydFN1Y2Nlc3MiLCJzdG9wU2lsZW50UmVuZXciLCJfdXNlclN0b3JlIiwiX3VzZXJTdG9yZUtleSIsInJlZGlyZWN0TmF2aWdhdG9yIiwicG9wdXBOYXZpZ2F0b3IiLCJpZnJhbWVOYXZpZ2F0b3IiLCJ1c2VyU3RvcmUiLCJfdXNlckxvYWRlZCIsIl91c2VyVW5sb2FkZWQiLCJfc2lsZW50UmVuZXdFcnJvciIsIl91c2VyU2lnbmVkSW4iLCJfdXNlclNpZ25lZE91dCIsIl91c2VyU2Vzc2lvbkNoYW5nZWQiLCJyZW1vdmVVc2VyTG9hZGVkIiwicmVtb3ZlVXNlclVubG9hZGVkIiwiYWRkU2lsZW50UmVuZXdFcnJvciIsInJlbW92ZVNpbGVudFJlbmV3RXJyb3IiLCJhZGRVc2VyU2lnbmVkSW4iLCJyZW1vdmVVc2VyU2lnbmVkSW4iLCJhZGRVc2VyU2lnbmVkT3V0IiwicmVtb3ZlVXNlclNpZ25lZE91dCIsImFkZFVzZXJTZXNzaW9uQ2hhbmdlZCIsInJlbW92ZVVzZXJTZXNzaW9uQ2hhbmdlZCIsIkRlZmF1bHRDaGVja1Nlc3Npb25JbnRlcnZhbCIsInN0b3JlIiwiX3BvcHVwX3JlZGlyZWN0X3VyaSIsIl9wb3B1cF9wb3N0X2xvZ291dF9yZWRpcmVjdF91cmkiLCJfcG9wdXBXaW5kb3dGZWF0dXJlcyIsIl9wb3B1cFdpbmRvd1RhcmdldCIsIl9zaWxlbnRfcmVkaXJlY3RfdXJpIiwiX3NpbGVudFJlcXVlc3RUaW1lb3V0IiwiX2F1dG9tYXRpY1NpbGVudFJlbmV3IiwiX3ZhbGlkYXRlU3ViT25TaWxlbnRSZW5ldyIsIl9pbmNsdWRlSWRUb2tlbkluU2lsZW50UmVuZXciLCJfbW9uaXRvclNlc3Npb24iLCJfbW9uaXRvckFub255bW91c1Nlc3Npb24iLCJfcXVlcnlfc3RhdHVzX3Jlc3BvbnNlX3R5cGUiLCJfcmV2b2tlQWNjZXNzVG9rZW5PblNpZ25vdXQiLCJwcmVmaXgiLCJfc3RvcmUiLCJfcHJlZml4IiwiQmlnSW50ZWdlciIsIkpTQk4iLCJiNjRtYXAiLCJiNjRwYWQiLCJCYXNlNjQiLCJzIiwicmV0IiwiayIsInNsb3AiLCJjaGFyQXQiLCJ2IiwiU3RyaW5nIiwiZnJvbUNoYXJDb2RlIiwiaGV4VG9CYXNlNjQiLCJoIiwiYyIsInN1YnN0cmluZyIsInBhZGRpbmciLCJzdHIiLCJtb2QiLCJwYWQiLCJqb2luIiwiYnl0ZUFycmF5VG9IZXgiLCJyYXciLCJIRVgiLCJfaGV4IiwidG9TdHJpbmciLCJkZWNvZGVUb0hFWCIsImJhc2U2NEpzIiwidG9CeXRlQXJyYXkiLCJiYXNlNjRUb0Jhc2U2NFVybCIsInVybERlY29kZSIsImF0b2IiLCJEaWdlc3RJbmZvSGVhZCIsInNoYTEiLCJzaGEyMjQiLCJzaGEyNTYiLCJzaGEzODQiLCJzaGE1MTIiLCJtZDIiLCJtZDUiLCJyaXBlbWQxNjAiLCJEaWdlc3RBbGdzIiwiU0hBMjU2IiwiUlNBVmVyaWZpZXIiLCJtb2R1bHVzIiwiZ2V0QWxnb3JpdGhtRnJvbURpZ2VzdCIsImhEaWdlc3RJbmZvIiwiYWxnTmFtZSIsImhlYWQiLCJsZW4iLCJwcm90b3R5cGUiLCJtc2ciLCJlbmNzaWciLCJzaWciLCJiaXRMZW5ndGgiLCJkZWNyeXB0ZWRTaWciLCJtb2RQb3dJbnQiLCJkaWdlc3QiLCJkaWdlc3RJbmZvIiwibXNnSGFzaCIsInBhcnRzIiwiYWxsb3dlZFNpZ25pbmdBbGdzIiwiaGVhZGVyQW5kUGF5bG9hZCIsImdldFB1YmxpY0tleUZyb21DZXJ0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LEVBQUV4ZixNQUFGLEdBQVcsQ0FBWCxLQUFpQixDQUFyQixFQUF3QjtBQUNwQndmLFlBQUksTUFBTUEsQ0FBVjtBQUNIO0FBQ0QsV0FBT0QsT0FBTzBCLGlCQUFQLENBQXlCMUIsT0FBT1MsV0FBUCxDQUFtQlIsQ0FBbkIsQ0FBekIsQ0FBUDtBQUNIOztJQUVNNWMsUSxHQUFZMmMsTSxDQUFaM2MsUTtRQUdITCxHLEdBQUFBLEc7UUFDQUMsTyxHQUFBQSxPO1FBQ0FDLEksR0FBQUEsSTtRQUNBQyxNLEdBQUFBLE07UUFDQUMsUyxHQUFBQSxTO1FBQ0FDLFEsR0FBQUEsUTtRQUNBQyxrQixHQUFBQSxrQjs7Ozs7Ozs7Ozs7Ozs7Ozs7a0JDL1JvQndnQixNOztBQU54Qjs7Ozs7O0FBRUE7Ozs7QUFJZSxTQUFTQSxNQUFULEdBQWtCO0FBQy9CLFNBQU8sbUJBQVFyVCxPQUFSLENBQWdCLElBQWhCLEVBQXNCLEVBQXRCLENBQVA7QUFDRDs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDUkQsSUFBTW5aLFVBQVUsZUFBaEIsQyxRQUF5Q0EsTyxHQUFBQSxPIiwiZmlsZSI6Im9pZGMtY2xpZW50LnJzYTI1Ni5zbGltLmpzIiwic291cmNlc0NvbnRlbnQiOlsiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuIFx0XHR9XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gXHR9O1xuXG4gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3RcbiBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3RcbiBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbiBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbiBcdFx0cmV0dXJuIG5zO1xuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IDApO1xuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG5cclxuaW1wb3J0IHsgTG9nIH0gZnJvbSAnLi9zcmMvTG9nLmpzJztcclxuaW1wb3J0IHsgT2lkY0NsaWVudCB9IGZyb20gJy4vc3JjL09pZGNDbGllbnQuanMnO1xyXG5pbXBvcnQgeyBPaWRjQ2xpZW50U2V0dGluZ3MgfSBmcm9tICcuL3NyYy9PaWRjQ2xpZW50U2V0dGluZ3MuanMnO1xyXG5pbXBvcnQgeyBXZWJTdG9yYWdlU3RhdGVTdG9yZSB9IGZyb20gJy4vc3JjL1dlYlN0b3JhZ2VTdGF0ZVN0b3JlLmpzJztcclxuaW1wb3J0IHsgSW5NZW1vcnlXZWJTdG9yYWdlIH0gZnJvbSAnLi9zcmMvSW5NZW1vcnlXZWJTdG9yYWdlLmpzJztcclxuaW1wb3J0IHsgVXNlck1hbmFnZXIgfSBmcm9tICcuL3NyYy9Vc2VyTWFuYWdlci5qcyc7XHJcbmltcG9ydCB7IEFjY2Vzc1Rva2VuRXZlbnRzIH0gZnJvbSAnLi9zcmMvQWNjZXNzVG9rZW5FdmVudHMuanMnO1xyXG5pbXBvcnQgeyBNZXRhZGF0YVNlcnZpY2UgfSBmcm9tICcuL3NyYy9NZXRhZGF0YVNlcnZpY2UuanMnO1xyXG5pbXBvcnQgeyBDb3Jkb3ZhUG9wdXBOYXZpZ2F0b3IgfSBmcm9tICcuL3NyYy9Db3Jkb3ZhUG9wdXBOYXZpZ2F0b3IuanMnO1xyXG5pbXBvcnQgeyBDb3Jkb3ZhSUZyYW1lTmF2aWdhdG9yIH0gZnJvbSAnLi9zcmMvQ29yZG92YUlGcmFtZU5hdmlnYXRvci5qcyc7XHJcbmltcG9ydCB7IENoZWNrU2Vzc2lvbklGcmFtZSB9IGZyb20gJy4vc3JjL0NoZWNrU2Vzc2lvbklGcmFtZS5qcyc7XHJcbmltcG9ydCB7IFRva2VuUmV2b2NhdGlvbkNsaWVudCB9IGZyb20gJy4vc3JjL1Rva2VuUmV2b2NhdGlvbkNsaWVudC5qcyc7XHJcbmltcG9ydCB7IFNlc3Npb25Nb25pdG9yIH0gZnJvbSAnLi9zcmMvU2Vzc2lvbk1vbml0b3IuanMnO1xyXG5pbXBvcnQgeyBHbG9iYWwgfSBmcm9tICcuL3NyYy9HbG9iYWwuanMnO1xyXG5pbXBvcnQgeyBVc2VyIH0gZnJvbSAnLi9zcmMvVXNlci5qcyc7XHJcblxyXG5pbXBvcnQgeyBWZXJzaW9uIH0gZnJvbSAnLi92ZXJzaW9uLmpzJztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuICAgIFZlcnNpb24sXHJcbiAgICBMb2csXHJcbiAgICBPaWRjQ2xpZW50LFxyXG4gICAgT2lkY0NsaWVudFNldHRpbmdzLFxyXG4gICAgV2ViU3RvcmFnZVN0YXRlU3RvcmUsXHJcbiAgICBJbk1lbW9yeVdlYlN0b3JhZ2UsXHJcbiAgICBVc2VyTWFuYWdlcixcclxuICAgIEFjY2Vzc1Rva2VuRXZlbnRzLFxyXG4gICAgTWV0YWRhdGFTZXJ2aWNlLFxyXG4gICAgQ29yZG92YVBvcHVwTmF2aWdhdG9yLFxyXG4gICAgQ29yZG92YUlGcmFtZU5hdmlnYXRvcixcclxuICAgIENoZWNrU2Vzc2lvbklGcmFtZSxcclxuICAgIFRva2VuUmV2b2NhdGlvbkNsaWVudCxcclxuICAgIFNlc3Npb25Nb25pdG9yLFxyXG4gICAgR2xvYmFsLFxyXG4gICAgVXNlclxyXG59O1xyXG4iLCIndXNlIHN0cmljdCdcblxuZXhwb3J0cy5ieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aFxuZXhwb3J0cy50b0J5dGVBcnJheSA9IHRvQnl0ZUFycmF5XG5leHBvcnRzLmZyb21CeXRlQXJyYXkgPSBmcm9tQnl0ZUFycmF5XG5cbnZhciBsb29rdXAgPSBbXVxudmFyIHJldkxvb2t1cCA9IFtdXG52YXIgQXJyID0gdHlwZW9mIFVpbnQ4QXJyYXkgIT09ICd1bmRlZmluZWQnID8gVWludDhBcnJheSA6IEFycmF5XG5cbnZhciBjb2RlID0gJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8nXG5mb3IgKHZhciBpID0gMCwgbGVuID0gY29kZS5sZW5ndGg7IGkgPCBsZW47ICsraSkge1xuICBsb29rdXBbaV0gPSBjb2RlW2ldXG4gIHJldkxvb2t1cFtjb2RlLmNoYXJDb2RlQXQoaSldID0gaVxufVxuXG4vLyBTdXBwb3J0IGRlY29kaW5nIFVSTC1zYWZlIGJhc2U2NCBzdHJpbmdzLCBhcyBOb2RlLmpzIGRvZXMuXG4vLyBTZWU6IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0Jhc2U2NCNVUkxfYXBwbGljYXRpb25zXG5yZXZMb29rdXBbJy0nLmNoYXJDb2RlQXQoMCldID0gNjJcbnJldkxvb2t1cFsnXycuY2hhckNvZGVBdCgwKV0gPSA2M1xuXG5mdW5jdGlvbiBnZXRMZW5zIChiNjQpIHtcbiAgdmFyIGxlbiA9IGI2NC5sZW5ndGhcblxuICBpZiAobGVuICUgNCA+IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgc3RyaW5nLiBMZW5ndGggbXVzdCBiZSBhIG11bHRpcGxlIG9mIDQnKVxuICB9XG5cbiAgLy8gVHJpbSBvZmYgZXh0cmEgYnl0ZXMgYWZ0ZXIgcGxhY2Vob2xkZXIgYnl0ZXMgYXJlIGZvdW5kXG4gIC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2JlYXRnYW1taXQvYmFzZTY0LWpzL2lzc3Vlcy80MlxuICB2YXIgdmFsaWRMZW4gPSBiNjQuaW5kZXhPZignPScpXG4gIGlmICh2YWxpZExlbiA9PT0gLTEpIHZhbGlkTGVuID0gbGVuXG5cbiAgdmFyIHBsYWNlSG9sZGVyc0xlbiA9IHZhbGlkTGVuID09PSBsZW5cbiAgICA/IDBcbiAgICA6IDQgLSAodmFsaWRMZW4gJSA0KVxuXG4gIHJldHVybiBbdmFsaWRMZW4sIHBsYWNlSG9sZGVyc0xlbl1cbn1cblxuLy8gYmFzZTY0IGlzIDQvMyArIHVwIHRvIHR3byBjaGFyYWN0ZXJzIG9mIHRoZSBvcmlnaW5hbCBkYXRhXG5mdW5jdGlvbiBieXRlTGVuZ3RoIChiNjQpIHtcbiAgdmFyIGxlbnMgPSBnZXRMZW5zKGI2NClcbiAgdmFyIHZhbGlkTGVuID0gbGVuc1swXVxuICB2YXIgcGxhY2VIb2xkZXJzTGVuID0gbGVuc1sxXVxuICByZXR1cm4gKCh2YWxpZExlbiArIHBsYWNlSG9sZGVyc0xlbikgKiAzIC8gNCkgLSBwbGFjZUhvbGRlcnNMZW5cbn1cblxuZnVuY3Rpb24gX2J5dGVMZW5ndGggKGI2NCwgdmFsaWRMZW4sIHBsYWNlSG9sZGVyc0xlbikge1xuICByZXR1cm4gKCh2YWxpZExlbiArIHBsYWNlSG9sZGVyc0xlbikgKiAzIC8gNCkgLSBwbGFjZUhvbGRlcnNMZW5cbn1cblxuZnVuY3Rpb24gdG9CeXRlQXJyYXkgKGI2NCkge1xuICB2YXIgdG1wXG4gIHZhciBsZW5zID0gZ2V0TGVucyhiNjQpXG4gIHZhciB2YWxpZExlbiA9IGxlbnNbMF1cbiAgdmFyIHBsYWNlSG9sZGVyc0xlbiA9IGxlbnNbMV1cblxuICB2YXIgYXJyID0gbmV3IEFycihfYnl0ZUxlbmd0aChiNjQsIHZhbGlkTGVuLCBwbGFjZUhvbGRlcnNMZW4pKVxuXG4gIHZhciBjdXJCeXRlID0gMFxuXG4gIC8vIGlmIHRoZXJlIGFyZSBwbGFjZWhvbGRlcnMsIG9ubHkgZ2V0IHVwIHRvIHRoZSBsYXN0IGNvbXBsZXRlIDQgY2hhcnNcbiAgdmFyIGxlbiA9IHBsYWNlSG9sZGVyc0xlbiA+IDBcbiAgICA/IHZhbGlkTGVuIC0gNFxuICAgIDogdmFsaWRMZW5cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSArPSA0KSB7XG4gICAgdG1wID1cbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSldIDw8IDE4KSB8XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAxKV0gPDwgMTIpIHxcbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDIpXSA8PCA2KSB8XG4gICAgICByZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDMpXVxuICAgIGFycltjdXJCeXRlKytdID0gKHRtcCA+PiAxNikgJiAweEZGXG4gICAgYXJyW2N1ckJ5dGUrK10gPSAodG1wID4+IDgpICYgMHhGRlxuICAgIGFycltjdXJCeXRlKytdID0gdG1wICYgMHhGRlxuICB9XG5cbiAgaWYgKHBsYWNlSG9sZGVyc0xlbiA9PT0gMikge1xuICAgIHRtcCA9XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkpXSA8PCAyKSB8XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAxKV0gPj4gNClcbiAgICBhcnJbY3VyQnl0ZSsrXSA9IHRtcCAmIDB4RkZcbiAgfVxuXG4gIGlmIChwbGFjZUhvbGRlcnNMZW4gPT09IDEpIHtcbiAgICB0bXAgPVxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpKV0gPDwgMTApIHxcbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDEpXSA8PCA0KSB8XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAyKV0gPj4gMilcbiAgICBhcnJbY3VyQnl0ZSsrXSA9ICh0bXAgPj4gOCkgJiAweEZGXG4gICAgYXJyW2N1ckJ5dGUrK10gPSB0bXAgJiAweEZGXG4gIH1cblxuICByZXR1cm4gYXJyXG59XG5cbmZ1bmN0aW9uIHRyaXBsZXRUb0Jhc2U2NCAobnVtKSB7XG4gIHJldHVybiBsb29rdXBbbnVtID4+IDE4ICYgMHgzRl0gK1xuICAgIGxvb2t1cFtudW0gPj4gMTIgJiAweDNGXSArXG4gICAgbG9va3VwW251bSA+PiA2ICYgMHgzRl0gK1xuICAgIGxvb2t1cFtudW0gJiAweDNGXVxufVxuXG5mdW5jdGlvbiBlbmNvZGVDaHVuayAodWludDgsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIHRtcFxuICB2YXIgb3V0cHV0ID0gW11cbiAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpICs9IDMpIHtcbiAgICB0bXAgPVxuICAgICAgKCh1aW50OFtpXSA8PCAxNikgJiAweEZGMDAwMCkgK1xuICAgICAgKCh1aW50OFtpICsgMV0gPDwgOCkgJiAweEZGMDApICtcbiAgICAgICh1aW50OFtpICsgMl0gJiAweEZGKVxuICAgIG91dHB1dC5wdXNoKHRyaXBsZXRUb0Jhc2U2NCh0bXApKVxuICB9XG4gIHJldHVybiBvdXRwdXQuam9pbignJylcbn1cblxuZnVuY3Rpb24gZnJvbUJ5dGVBcnJheSAodWludDgpIHtcbiAgdmFyIHRtcFxuICB2YXIgbGVuID0gdWludDgubGVuZ3RoXG4gIHZhciBleHRyYUJ5dGVzID0gbGVuICUgMyAvLyBpZiB3ZSBoYXZlIDEgYnl0ZSBsZWZ0LCBwYWQgMiBieXRlc1xuICB2YXIgcGFydHMgPSBbXVxuICB2YXIgbWF4Q2h1bmtMZW5ndGggPSAxNjM4MyAvLyBtdXN0IGJlIG11bHRpcGxlIG9mIDNcblxuICAvLyBnbyB0aHJvdWdoIHRoZSBhcnJheSBldmVyeSB0aHJlZSBieXRlcywgd2UnbGwgZGVhbCB3aXRoIHRyYWlsaW5nIHN0dWZmIGxhdGVyXG4gIGZvciAodmFyIGkgPSAwLCBsZW4yID0gbGVuIC0gZXh0cmFCeXRlczsgaSA8IGxlbjI7IGkgKz0gbWF4Q2h1bmtMZW5ndGgpIHtcbiAgICBwYXJ0cy5wdXNoKGVuY29kZUNodW5rKFxuICAgICAgdWludDgsIGksIChpICsgbWF4Q2h1bmtMZW5ndGgpID4gbGVuMiA/IGxlbjIgOiAoaSArIG1heENodW5rTGVuZ3RoKVxuICAgICkpXG4gIH1cblxuICAvLyBwYWQgdGhlIGVuZCB3aXRoIHplcm9zLCBidXQgbWFrZSBzdXJlIHRvIG5vdCBmb3JnZXQgdGhlIGV4dHJhIGJ5dGVzXG4gIGlmIChleHRyYUJ5dGVzID09PSAxKSB7XG4gICAgdG1wID0gdWludDhbbGVuIC0gMV1cbiAgICBwYXJ0cy5wdXNoKFxuICAgICAgbG9va3VwW3RtcCA+PiAyXSArXG4gICAgICBsb29rdXBbKHRtcCA8PCA0KSAmIDB4M0ZdICtcbiAgICAgICc9PSdcbiAgICApXG4gIH0gZWxzZSBpZiAoZXh0cmFCeXRlcyA9PT0gMikge1xuICAgIHRtcCA9ICh1aW50OFtsZW4gLSAyXSA8PCA4KSArIHVpbnQ4W2xlbiAtIDFdXG4gICAgcGFydHMucHVzaChcbiAgICAgIGxvb2t1cFt0bXAgPj4gMTBdICtcbiAgICAgIGxvb2t1cFsodG1wID4+IDQpICYgMHgzRl0gK1xuICAgICAgbG9va3VwWyh0bXAgPDwgMikgJiAweDNGXSArXG4gICAgICAnPSdcbiAgICApXG4gIH1cblxuICByZXR1cm4gcGFydHMuam9pbignJylcbn1cbiIsInJlcXVpcmUoJy4uL21vZHVsZXMvZXM2Lm9iamVjdC50by1zdHJpbmcnKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXM2LnN0cmluZy5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy93ZWIuZG9tLml0ZXJhYmxlJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzNi5wcm9taXNlJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uL21vZHVsZXMvX2NvcmUnKS5Qcm9taXNlO1xuIiwicmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lczYuYXJyYXkuZmluZCcpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9tb2R1bGVzL19jb3JlJykuQXJyYXkuZmluZDtcbiIsInJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXM2LmFycmF5LmlzLWFycmF5Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL21vZHVsZXMvX2NvcmUnKS5BcnJheS5pc0FycmF5O1xuIiwicmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lczYuYXJyYXkuc29tZScpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9tb2R1bGVzL19jb3JlJykuQXJyYXkuc29tZTtcbiIsIi8vIGZvciBhIGxlZ2FjeSBjb2RlIGFuZCBmdXR1cmUgZml4ZXNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gRnVuY3Rpb24uY2FsbC5hcHBseShBcnJheS5wcm90b3R5cGUuc3BsaWNlLCBhcmd1bWVudHMpO1xufTtcbiIsInJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXM2LmZ1bmN0aW9uLmJpbmQnKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9fY29yZScpLkZ1bmN0aW9uLmJpbmQ7XG4iLCJyZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2VzNi5vYmplY3QuYXNzaWduJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL21vZHVsZXMvX2NvcmUnKS5PYmplY3QuYXNzaWduO1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKHR5cGVvZiBpdCAhPSAnZnVuY3Rpb24nKSB0aHJvdyBUeXBlRXJyb3IoaXQgKyAnIGlzIG5vdCBhIGZ1bmN0aW9uIScpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwiLy8gMjIuMS4zLjMxIEFycmF5LnByb3RvdHlwZVtAQHVuc2NvcGFibGVzXVxudmFyIFVOU0NPUEFCTEVTID0gcmVxdWlyZSgnLi9fd2tzJykoJ3Vuc2NvcGFibGVzJyk7XG52YXIgQXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZTtcbmlmIChBcnJheVByb3RvW1VOU0NPUEFCTEVTXSA9PSB1bmRlZmluZWQpIHJlcXVpcmUoJy4vX2hpZGUnKShBcnJheVByb3RvLCBVTlNDT1BBQkxFUywge30pO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIEFycmF5UHJvdG9bVU5TQ09QQUJMRVNdW2tleV0gPSB0cnVlO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBDb25zdHJ1Y3RvciwgbmFtZSwgZm9yYmlkZGVuRmllbGQpIHtcbiAgaWYgKCEoaXQgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikgfHwgKGZvcmJpZGRlbkZpZWxkICE9PSB1bmRlZmluZWQgJiYgZm9yYmlkZGVuRmllbGQgaW4gaXQpKSB7XG4gICAgdGhyb3cgVHlwZUVycm9yKG5hbWUgKyAnOiBpbmNvcnJlY3QgaW52b2NhdGlvbiEnKTtcbiAgfSByZXR1cm4gaXQ7XG59O1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoIWlzT2JqZWN0KGl0KSkgdGhyb3cgVHlwZUVycm9yKGl0ICsgJyBpcyBub3QgYW4gb2JqZWN0IScpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwiLy8gZmFsc2UgLT4gQXJyYXkjaW5kZXhPZlxuLy8gdHJ1ZSAgLT4gQXJyYXkjaW5jbHVkZXNcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuL190by1hYnNvbHV0ZS1pbmRleCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoSVNfSU5DTFVERVMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgZWwsIGZyb21JbmRleCkge1xuICAgIHZhciBPID0gdG9JT2JqZWN0KCR0aGlzKTtcbiAgICB2YXIgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICAgIHZhciBpbmRleCA9IHRvQWJzb2x1dGVJbmRleChmcm9tSW5kZXgsIGxlbmd0aCk7XG4gICAgdmFyIHZhbHVlO1xuICAgIC8vIEFycmF5I2luY2x1ZGVzIHVzZXMgU2FtZVZhbHVlWmVybyBlcXVhbGl0eSBhbGdvcml0aG1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgaWYgKElTX0lOQ0xVREVTICYmIGVsICE9IGVsKSB3aGlsZSAobGVuZ3RoID4gaW5kZXgpIHtcbiAgICAgIHZhbHVlID0gT1tpbmRleCsrXTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICAgIGlmICh2YWx1ZSAhPSB2YWx1ZSkgcmV0dXJuIHRydWU7XG4gICAgLy8gQXJyYXkjaW5kZXhPZiBpZ25vcmVzIGhvbGVzLCBBcnJheSNpbmNsdWRlcyAtIG5vdFxuICAgIH0gZWxzZSBmb3IgKDtsZW5ndGggPiBpbmRleDsgaW5kZXgrKykgaWYgKElTX0lOQ0xVREVTIHx8IGluZGV4IGluIE8pIHtcbiAgICAgIGlmIChPW2luZGV4XSA9PT0gZWwpIHJldHVybiBJU19JTkNMVURFUyB8fCBpbmRleCB8fCAwO1xuICAgIH0gcmV0dXJuICFJU19JTkNMVURFUyAmJiAtMTtcbiAgfTtcbn07XG4iLCIvLyAwIC0+IEFycmF5I2ZvckVhY2hcbi8vIDEgLT4gQXJyYXkjbWFwXG4vLyAyIC0+IEFycmF5I2ZpbHRlclxuLy8gMyAtPiBBcnJheSNzb21lXG4vLyA0IC0+IEFycmF5I2V2ZXJ5XG4vLyA1IC0+IEFycmF5I2ZpbmRcbi8vIDYgLT4gQXJyYXkjZmluZEluZGV4XG52YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgSU9iamVjdCA9IHJlcXVpcmUoJy4vX2lvYmplY3QnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgYXNjID0gcmVxdWlyZSgnLi9fYXJyYXktc3BlY2llcy1jcmVhdGUnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFRZUEUsICRjcmVhdGUpIHtcbiAgdmFyIElTX01BUCA9IFRZUEUgPT0gMTtcbiAgdmFyIElTX0ZJTFRFUiA9IFRZUEUgPT0gMjtcbiAgdmFyIElTX1NPTUUgPSBUWVBFID09IDM7XG4gIHZhciBJU19FVkVSWSA9IFRZUEUgPT0gNDtcbiAgdmFyIElTX0ZJTkRfSU5ERVggPSBUWVBFID09IDY7XG4gIHZhciBOT19IT0xFUyA9IFRZUEUgPT0gNSB8fCBJU19GSU5EX0lOREVYO1xuICB2YXIgY3JlYXRlID0gJGNyZWF0ZSB8fCBhc2M7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIGNhbGxiYWNrZm4sIHRoYXQpIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KCR0aGlzKTtcbiAgICB2YXIgc2VsZiA9IElPYmplY3QoTyk7XG4gICAgdmFyIGYgPSBjdHgoY2FsbGJhY2tmbiwgdGhhdCwgMyk7XG4gICAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoKHNlbGYubGVuZ3RoKTtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHZhciByZXN1bHQgPSBJU19NQVAgPyBjcmVhdGUoJHRoaXMsIGxlbmd0aCkgOiBJU19GSUxURVIgPyBjcmVhdGUoJHRoaXMsIDApIDogdW5kZWZpbmVkO1xuICAgIHZhciB2YWwsIHJlcztcbiAgICBmb3IgKDtsZW5ndGggPiBpbmRleDsgaW5kZXgrKykgaWYgKE5PX0hPTEVTIHx8IGluZGV4IGluIHNlbGYpIHtcbiAgICAgIHZhbCA9IHNlbGZbaW5kZXhdO1xuICAgICAgcmVzID0gZih2YWwsIGluZGV4LCBPKTtcbiAgICAgIGlmIChUWVBFKSB7XG4gICAgICAgIGlmIChJU19NQVApIHJlc3VsdFtpbmRleF0gPSByZXM7ICAgLy8gbWFwXG4gICAgICAgIGVsc2UgaWYgKHJlcykgc3dpdGNoIChUWVBFKSB7XG4gICAgICAgICAgY2FzZSAzOiByZXR1cm4gdHJ1ZTsgICAgICAgICAgICAgLy8gc29tZVxuICAgICAgICAgIGNhc2UgNTogcmV0dXJuIHZhbDsgICAgICAgICAgICAgIC8vIGZpbmRcbiAgICAgICAgICBjYXNlIDY6IHJldHVybiBpbmRleDsgICAgICAgICAgICAvLyBmaW5kSW5kZXhcbiAgICAgICAgICBjYXNlIDI6IHJlc3VsdC5wdXNoKHZhbCk7ICAgICAgICAvLyBmaWx0ZXJcbiAgICAgICAgfSBlbHNlIGlmIChJU19FVkVSWSkgcmV0dXJuIGZhbHNlOyAvLyBldmVyeVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gSVNfRklORF9JTkRFWCA/IC0xIDogSVNfU09NRSB8fCBJU19FVkVSWSA/IElTX0VWRVJZIDogcmVzdWx0O1xuICB9O1xufTtcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuL19pcy1hcnJheScpO1xudmFyIFNQRUNJRVMgPSByZXF1aXJlKCcuL193a3MnKSgnc3BlY2llcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvcmlnaW5hbCkge1xuICB2YXIgQztcbiAgaWYgKGlzQXJyYXkob3JpZ2luYWwpKSB7XG4gICAgQyA9IG9yaWdpbmFsLmNvbnN0cnVjdG9yO1xuICAgIC8vIGNyb3NzLXJlYWxtIGZhbGxiYWNrXG4gICAgaWYgKHR5cGVvZiBDID09ICdmdW5jdGlvbicgJiYgKEMgPT09IEFycmF5IHx8IGlzQXJyYXkoQy5wcm90b3R5cGUpKSkgQyA9IHVuZGVmaW5lZDtcbiAgICBpZiAoaXNPYmplY3QoQykpIHtcbiAgICAgIEMgPSBDW1NQRUNJRVNdO1xuICAgICAgaWYgKEMgPT09IG51bGwpIEMgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9IHJldHVybiBDID09PSB1bmRlZmluZWQgPyBBcnJheSA6IEM7XG59O1xuIiwiLy8gOS40LjIuMyBBcnJheVNwZWNpZXNDcmVhdGUob3JpZ2luYWxBcnJheSwgbGVuZ3RoKVxudmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4vX2FycmF5LXNwZWNpZXMtY29uc3RydWN0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob3JpZ2luYWwsIGxlbmd0aCkge1xuICByZXR1cm4gbmV3IChzcGVjaWVzQ29uc3RydWN0b3Iob3JpZ2luYWwpKShsZW5ndGgpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBpbnZva2UgPSByZXF1aXJlKCcuL19pbnZva2UnKTtcbnZhciBhcnJheVNsaWNlID0gW10uc2xpY2U7XG52YXIgZmFjdG9yaWVzID0ge307XG5cbnZhciBjb25zdHJ1Y3QgPSBmdW5jdGlvbiAoRiwgbGVuLCBhcmdzKSB7XG4gIGlmICghKGxlbiBpbiBmYWN0b3JpZXMpKSB7XG4gICAgZm9yICh2YXIgbiA9IFtdLCBpID0gMDsgaSA8IGxlbjsgaSsrKSBuW2ldID0gJ2FbJyArIGkgKyAnXSc7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jXG4gICAgZmFjdG9yaWVzW2xlbl0gPSBGdW5jdGlvbignRixhJywgJ3JldHVybiBuZXcgRignICsgbi5qb2luKCcsJykgKyAnKScpO1xuICB9IHJldHVybiBmYWN0b3JpZXNbbGVuXShGLCBhcmdzKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gRnVuY3Rpb24uYmluZCB8fCBmdW5jdGlvbiBiaW5kKHRoYXQgLyogLCAuLi5hcmdzICovKSB7XG4gIHZhciBmbiA9IGFGdW5jdGlvbih0aGlzKTtcbiAgdmFyIHBhcnRBcmdzID0gYXJyYXlTbGljZS5jYWxsKGFyZ3VtZW50cywgMSk7XG4gIHZhciBib3VuZCA9IGZ1bmN0aW9uICgvKiBhcmdzLi4uICovKSB7XG4gICAgdmFyIGFyZ3MgPSBwYXJ0QXJncy5jb25jYXQoYXJyYXlTbGljZS5jYWxsKGFyZ3VtZW50cykpO1xuICAgIHJldHVybiB0aGlzIGluc3RhbmNlb2YgYm91bmQgPyBjb25zdHJ1Y3QoZm4sIGFyZ3MubGVuZ3RoLCBhcmdzKSA6IGludm9rZShmbiwgYXJncywgdGhhdCk7XG4gIH07XG4gIGlmIChpc09iamVjdChmbi5wcm90b3R5cGUpKSBib3VuZC5wcm90b3R5cGUgPSBmbi5wcm90b3R5cGU7XG4gIHJldHVybiBib3VuZDtcbn07XG4iLCIvLyBnZXR0aW5nIHRhZyBmcm9tIDE5LjEuMy42IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcoKVxudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xudmFyIFRBRyA9IHJlcXVpcmUoJy4vX3drcycpKCd0b1N0cmluZ1RhZycpO1xuLy8gRVMzIHdyb25nIGhlcmVcbnZhciBBUkcgPSBjb2YoZnVuY3Rpb24gKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpID09ICdBcmd1bWVudHMnO1xuXG4vLyBmYWxsYmFjayBmb3IgSUUxMSBTY3JpcHQgQWNjZXNzIERlbmllZCBlcnJvclxudmFyIHRyeUdldCA9IGZ1bmN0aW9uIChpdCwga2V5KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGl0W2tleV07XG4gIH0gY2F0Y2ggKGUpIHsgLyogZW1wdHkgKi8gfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIE8sIFQsIEI7XG4gIHJldHVybiBpdCA9PT0gdW5kZWZpbmVkID8gJ1VuZGVmaW5lZCcgOiBpdCA9PT0gbnVsbCA/ICdOdWxsJ1xuICAgIC8vIEBAdG9TdHJpbmdUYWcgY2FzZVxuICAgIDogdHlwZW9mIChUID0gdHJ5R2V0KE8gPSBPYmplY3QoaXQpLCBUQUcpKSA9PSAnc3RyaW5nJyA/IFRcbiAgICAvLyBidWlsdGluVGFnIGNhc2VcbiAgICA6IEFSRyA/IGNvZihPKVxuICAgIC8vIEVTMyBhcmd1bWVudHMgZmFsbGJhY2tcbiAgICA6IChCID0gY29mKE8pKSA9PSAnT2JqZWN0JyAmJiB0eXBlb2YgTy5jYWxsZWUgPT0gJ2Z1bmN0aW9uJyA/ICdBcmd1bWVudHMnIDogQjtcbn07XG4iLCJ2YXIgdG9TdHJpbmcgPSB7fS50b1N0cmluZztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwoaXQpLnNsaWNlKDgsIC0xKTtcbn07XG4iLCJ2YXIgY29yZSA9IG1vZHVsZS5leHBvcnRzID0geyB2ZXJzaW9uOiAnMi42LjQnIH07XG5pZiAodHlwZW9mIF9fZSA9PSAnbnVtYmVyJykgX19lID0gY29yZTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bmRlZlxuIiwiLy8gb3B0aW9uYWwgLyBzaW1wbGUgY29udGV4dCBiaW5kaW5nXG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZm4sIHRoYXQsIGxlbmd0aCkge1xuICBhRnVuY3Rpb24oZm4pO1xuICBpZiAodGhhdCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZm47XG4gIHN3aXRjaCAobGVuZ3RoKSB7XG4gICAgY2FzZSAxOiByZXR1cm4gZnVuY3Rpb24gKGEpIHtcbiAgICAgIHJldHVybiBmbi5jYWxsKHRoYXQsIGEpO1xuICAgIH07XG4gICAgY2FzZSAyOiByZXR1cm4gZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgIHJldHVybiBmbi5jYWxsKHRoYXQsIGEsIGIpO1xuICAgIH07XG4gICAgY2FzZSAzOiByZXR1cm4gZnVuY3Rpb24gKGEsIGIsIGMpIHtcbiAgICAgIHJldHVybiBmbi5jYWxsKHRoYXQsIGEsIGIsIGMpO1xuICAgIH07XG4gIH1cbiAgcmV0dXJuIGZ1bmN0aW9uICgvKiAuLi5hcmdzICovKSB7XG4gICAgcmV0dXJuIGZuLmFwcGx5KHRoYXQsIGFyZ3VtZW50cyk7XG4gIH07XG59O1xuIiwiLy8gNy4yLjEgUmVxdWlyZU9iamVjdENvZXJjaWJsZShhcmd1bWVudClcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpdCA9PSB1bmRlZmluZWQpIHRocm93IFR5cGVFcnJvcihcIkNhbid0IGNhbGwgbWV0aG9kIG9uICBcIiArIGl0KTtcbiAgcmV0dXJuIGl0O1xufTtcbiIsIi8vIFRoYW5rJ3MgSUU4IGZvciBoaXMgZnVubnkgZGVmaW5lUHJvcGVydHlcbm1vZHVsZS5leHBvcnRzID0gIXJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCAnYScsIHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9IH0pLmEgIT0gNztcbn0pO1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgZG9jdW1lbnQgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5kb2N1bWVudDtcbi8vIHR5cGVvZiBkb2N1bWVudC5jcmVhdGVFbGVtZW50IGlzICdvYmplY3QnIGluIG9sZCBJRVxudmFyIGlzID0gaXNPYmplY3QoZG9jdW1lbnQpICYmIGlzT2JqZWN0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGlzID8gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChpdCkgOiB7fTtcbn07XG4iLCIvLyBJRSA4LSBkb24ndCBlbnVtIGJ1ZyBrZXlzXG5tb2R1bGUuZXhwb3J0cyA9IChcbiAgJ2NvbnN0cnVjdG9yLGhhc093blByb3BlcnR5LGlzUHJvdG90eXBlT2YscHJvcGVydHlJc0VudW1lcmFibGUsdG9Mb2NhbGVTdHJpbmcsdG9TdHJpbmcsdmFsdWVPZidcbikuc3BsaXQoJywnKTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xuXG52YXIgJGV4cG9ydCA9IGZ1bmN0aW9uICh0eXBlLCBuYW1lLCBzb3VyY2UpIHtcbiAgdmFyIElTX0ZPUkNFRCA9IHR5cGUgJiAkZXhwb3J0LkY7XG4gIHZhciBJU19HTE9CQUwgPSB0eXBlICYgJGV4cG9ydC5HO1xuICB2YXIgSVNfU1RBVElDID0gdHlwZSAmICRleHBvcnQuUztcbiAgdmFyIElTX1BST1RPID0gdHlwZSAmICRleHBvcnQuUDtcbiAgdmFyIElTX0JJTkQgPSB0eXBlICYgJGV4cG9ydC5CO1xuICB2YXIgdGFyZ2V0ID0gSVNfR0xPQkFMID8gZ2xvYmFsIDogSVNfU1RBVElDID8gZ2xvYmFsW25hbWVdIHx8IChnbG9iYWxbbmFtZV0gPSB7fSkgOiAoZ2xvYmFsW25hbWVdIHx8IHt9KVtQUk9UT1RZUEVdO1xuICB2YXIgZXhwb3J0cyA9IElTX0dMT0JBTCA/IGNvcmUgOiBjb3JlW25hbWVdIHx8IChjb3JlW25hbWVdID0ge30pO1xuICB2YXIgZXhwUHJvdG8gPSBleHBvcnRzW1BST1RPVFlQRV0gfHwgKGV4cG9ydHNbUFJPVE9UWVBFXSA9IHt9KTtcbiAgdmFyIGtleSwgb3duLCBvdXQsIGV4cDtcbiAgaWYgKElTX0dMT0JBTCkgc291cmNlID0gbmFtZTtcbiAgZm9yIChrZXkgaW4gc291cmNlKSB7XG4gICAgLy8gY29udGFpbnMgaW4gbmF0aXZlXG4gICAgb3duID0gIUlTX0ZPUkNFRCAmJiB0YXJnZXQgJiYgdGFyZ2V0W2tleV0gIT09IHVuZGVmaW5lZDtcbiAgICAvLyBleHBvcnQgbmF0aXZlIG9yIHBhc3NlZFxuICAgIG91dCA9IChvd24gPyB0YXJnZXQgOiBzb3VyY2UpW2tleV07XG4gICAgLy8gYmluZCB0aW1lcnMgdG8gZ2xvYmFsIGZvciBjYWxsIGZyb20gZXhwb3J0IGNvbnRleHRcbiAgICBleHAgPSBJU19CSU5EICYmIG93biA/IGN0eChvdXQsIGdsb2JhbCkgOiBJU19QUk9UTyAmJiB0eXBlb2Ygb3V0ID09ICdmdW5jdGlvbicgPyBjdHgoRnVuY3Rpb24uY2FsbCwgb3V0KSA6IG91dDtcbiAgICAvLyBleHRlbmQgZ2xvYmFsXG4gICAgaWYgKHRhcmdldCkgcmVkZWZpbmUodGFyZ2V0LCBrZXksIG91dCwgdHlwZSAmICRleHBvcnQuVSk7XG4gICAgLy8gZXhwb3J0XG4gICAgaWYgKGV4cG9ydHNba2V5XSAhPSBvdXQpIGhpZGUoZXhwb3J0cywga2V5LCBleHApO1xuICAgIGlmIChJU19QUk9UTyAmJiBleHBQcm90b1trZXldICE9IG91dCkgZXhwUHJvdG9ba2V5XSA9IG91dDtcbiAgfVxufTtcbmdsb2JhbC5jb3JlID0gY29yZTtcbi8vIHR5cGUgYml0bWFwXG4kZXhwb3J0LkYgPSAxOyAgIC8vIGZvcmNlZFxuJGV4cG9ydC5HID0gMjsgICAvLyBnbG9iYWxcbiRleHBvcnQuUyA9IDQ7ICAgLy8gc3RhdGljXG4kZXhwb3J0LlAgPSA4OyAgIC8vIHByb3RvXG4kZXhwb3J0LkIgPSAxNjsgIC8vIGJpbmRcbiRleHBvcnQuVyA9IDMyOyAgLy8gd3JhcFxuJGV4cG9ydC5VID0gNjQ7ICAvLyBzYWZlXG4kZXhwb3J0LlIgPSAxMjg7IC8vIHJlYWwgcHJvdG8gbWV0aG9kIGZvciBgbGlicmFyeWBcbm1vZHVsZS5leHBvcnRzID0gJGV4cG9ydDtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gISFleGVjKCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufTtcbiIsInZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi9faXRlci1jYWxsJyk7XG52YXIgaXNBcnJheUl0ZXIgPSByZXF1aXJlKCcuL19pcy1hcnJheS1pdGVyJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGdldEl0ZXJGbiA9IHJlcXVpcmUoJy4vY29yZS5nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG52YXIgQlJFQUsgPSB7fTtcbnZhciBSRVRVUk4gPSB7fTtcbnZhciBleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXRlcmFibGUsIGVudHJpZXMsIGZuLCB0aGF0LCBJVEVSQVRPUikge1xuICB2YXIgaXRlckZuID0gSVRFUkFUT1IgPyBmdW5jdGlvbiAoKSB7IHJldHVybiBpdGVyYWJsZTsgfSA6IGdldEl0ZXJGbihpdGVyYWJsZSk7XG4gIHZhciBmID0gY3R4KGZuLCB0aGF0LCBlbnRyaWVzID8gMiA6IDEpO1xuICB2YXIgaW5kZXggPSAwO1xuICB2YXIgbGVuZ3RoLCBzdGVwLCBpdGVyYXRvciwgcmVzdWx0O1xuICBpZiAodHlwZW9mIGl0ZXJGbiAhPSAnZnVuY3Rpb24nKSB0aHJvdyBUeXBlRXJyb3IoaXRlcmFibGUgKyAnIGlzIG5vdCBpdGVyYWJsZSEnKTtcbiAgLy8gZmFzdCBjYXNlIGZvciBhcnJheXMgd2l0aCBkZWZhdWx0IGl0ZXJhdG9yXG4gIGlmIChpc0FycmF5SXRlcihpdGVyRm4pKSBmb3IgKGxlbmd0aCA9IHRvTGVuZ3RoKGl0ZXJhYmxlLmxlbmd0aCk7IGxlbmd0aCA+IGluZGV4OyBpbmRleCsrKSB7XG4gICAgcmVzdWx0ID0gZW50cmllcyA/IGYoYW5PYmplY3Qoc3RlcCA9IGl0ZXJhYmxlW2luZGV4XSlbMF0sIHN0ZXBbMV0pIDogZihpdGVyYWJsZVtpbmRleF0pO1xuICAgIGlmIChyZXN1bHQgPT09IEJSRUFLIHx8IHJlc3VsdCA9PT0gUkVUVVJOKSByZXR1cm4gcmVzdWx0O1xuICB9IGVsc2UgZm9yIChpdGVyYXRvciA9IGl0ZXJGbi5jYWxsKGl0ZXJhYmxlKTsgIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lOykge1xuICAgIHJlc3VsdCA9IGNhbGwoaXRlcmF0b3IsIGYsIHN0ZXAudmFsdWUsIGVudHJpZXMpO1xuICAgIGlmIChyZXN1bHQgPT09IEJSRUFLIHx8IHJlc3VsdCA9PT0gUkVUVVJOKSByZXR1cm4gcmVzdWx0O1xuICB9XG59O1xuZXhwb3J0cy5CUkVBSyA9IEJSRUFLO1xuZXhwb3J0cy5SRVRVUk4gPSBSRVRVUk47XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX3NoYXJlZCcpKCduYXRpdmUtZnVuY3Rpb24tdG8tc3RyaW5nJywgRnVuY3Rpb24udG9TdHJpbmcpO1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzg2I2lzc3VlY29tbWVudC0xMTU3NTkwMjhcbnZhciBnbG9iYWwgPSBtb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiB3aW5kb3cgIT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93Lk1hdGggPT0gTWF0aFxuICA/IHdpbmRvdyA6IHR5cGVvZiBzZWxmICE9ICd1bmRlZmluZWQnICYmIHNlbGYuTWF0aCA9PSBNYXRoID8gc2VsZlxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmNcbiAgOiBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuaWYgKHR5cGVvZiBfX2cgPT0gJ251bWJlcicpIF9fZyA9IGdsb2JhbDsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bmRlZlxuIiwidmFyIGhhc093blByb3BlcnR5ID0ge30uaGFzT3duUHJvcGVydHk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwga2V5KSB7XG4gIHJldHVybiBoYXNPd25Qcm9wZXJ0eS5jYWxsKGl0LCBrZXkpO1xufTtcbiIsInZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xudmFyIGNyZWF0ZURlc2MgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgPyBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIHJldHVybiBkUC5mKG9iamVjdCwga2V5LCBjcmVhdGVEZXNjKDEsIHZhbHVlKSk7XG59IDogZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICBvYmplY3Rba2V5XSA9IHZhbHVlO1xuICByZXR1cm4gb2JqZWN0O1xufTtcbiIsInZhciBkb2N1bWVudCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLmRvY3VtZW50O1xubW9kdWxlLmV4cG9ydHMgPSBkb2N1bWVudCAmJiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4iLCJtb2R1bGUuZXhwb3J0cyA9ICFyZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpICYmICFyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyZXF1aXJlKCcuL19kb20tY3JlYXRlJykoJ2RpdicpLCAnYScsIHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9IH0pLmEgIT0gNztcbn0pO1xuIiwiLy8gZmFzdCBhcHBseSwgaHR0cDovL2pzcGVyZi5sbmtpdC5jb20vZmFzdC1hcHBseS81XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChmbiwgYXJncywgdGhhdCkge1xuICB2YXIgdW4gPSB0aGF0ID09PSB1bmRlZmluZWQ7XG4gIHN3aXRjaCAoYXJncy5sZW5ndGgpIHtcbiAgICBjYXNlIDA6IHJldHVybiB1biA/IGZuKClcbiAgICAgICAgICAgICAgICAgICAgICA6IGZuLmNhbGwodGhhdCk7XG4gICAgY2FzZSAxOiByZXR1cm4gdW4gPyBmbihhcmdzWzBdKVxuICAgICAgICAgICAgICAgICAgICAgIDogZm4uY2FsbCh0aGF0LCBhcmdzWzBdKTtcbiAgICBjYXNlIDI6IHJldHVybiB1biA/IGZuKGFyZ3NbMF0sIGFyZ3NbMV0pXG4gICAgICAgICAgICAgICAgICAgICAgOiBmbi5jYWxsKHRoYXQsIGFyZ3NbMF0sIGFyZ3NbMV0pO1xuICAgIGNhc2UgMzogcmV0dXJuIHVuID8gZm4oYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSlcbiAgICAgICAgICAgICAgICAgICAgICA6IGZuLmNhbGwodGhhdCwgYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSk7XG4gICAgY2FzZSA0OiByZXR1cm4gdW4gPyBmbihhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdKVxuICAgICAgICAgICAgICAgICAgICAgIDogZm4uY2FsbCh0aGF0LCBhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdKTtcbiAgfSByZXR1cm4gZm4uYXBwbHkodGhhdCwgYXJncyk7XG59O1xuIiwiLy8gZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBhbmQgbm9uLWVudW1lcmFibGUgb2xkIFY4IHN0cmluZ3NcbnZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0KCd6JykucHJvcGVydHlJc0VudW1lcmFibGUoMCkgPyBPYmplY3QgOiBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGNvZihpdCkgPT0gJ1N0cmluZycgPyBpdC5zcGxpdCgnJykgOiBPYmplY3QoaXQpO1xufTtcbiIsIi8vIGNoZWNrIG9uIGRlZmF1bHQgQXJyYXkgaXRlcmF0b3JcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuL19pdGVyYXRvcnMnKTtcbnZhciBJVEVSQVRPUiA9IHJlcXVpcmUoJy4vX3drcycpKCdpdGVyYXRvcicpO1xudmFyIEFycmF5UHJvdG8gPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCAhPT0gdW5kZWZpbmVkICYmIChJdGVyYXRvcnMuQXJyYXkgPT09IGl0IHx8IEFycmF5UHJvdG9bSVRFUkFUT1JdID09PSBpdCk7XG59O1xuIiwiLy8gNy4yLjIgSXNBcnJheShhcmd1bWVudClcbnZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcbm1vZHVsZS5leHBvcnRzID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiBpc0FycmF5KGFyZykge1xuICByZXR1cm4gY29mKGFyZykgPT0gJ0FycmF5Jztcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdHlwZW9mIGl0ID09PSAnb2JqZWN0JyA/IGl0ICE9PSBudWxsIDogdHlwZW9mIGl0ID09PSAnZnVuY3Rpb24nO1xufTtcbiIsIi8vIGNhbGwgc29tZXRoaW5nIG9uIGl0ZXJhdG9yIHN0ZXAgd2l0aCBzYWZlIGNsb3Npbmcgb24gZXJyb3JcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIGZuLCB2YWx1ZSwgZW50cmllcykge1xuICB0cnkge1xuICAgIHJldHVybiBlbnRyaWVzID8gZm4oYW5PYmplY3QodmFsdWUpWzBdLCB2YWx1ZVsxXSkgOiBmbih2YWx1ZSk7XG4gIC8vIDcuNC42IEl0ZXJhdG9yQ2xvc2UoaXRlcmF0b3IsIGNvbXBsZXRpb24pXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB2YXIgcmV0ID0gaXRlcmF0b3JbJ3JldHVybiddO1xuICAgIGlmIChyZXQgIT09IHVuZGVmaW5lZCkgYW5PYmplY3QocmV0LmNhbGwoaXRlcmF0b3IpKTtcbiAgICB0aHJvdyBlO1xuICB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKTtcbnZhciBkZXNjcmlwdG9yID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBJdGVyYXRvclByb3RvdHlwZSA9IHt9O1xuXG4vLyAyNS4xLjIuMS4xICVJdGVyYXRvclByb3RvdHlwZSVbQEBpdGVyYXRvcl0oKVxucmVxdWlyZSgnLi9faGlkZScpKEl0ZXJhdG9yUHJvdG90eXBlLCByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBOQU1FLCBuZXh0KSB7XG4gIENvbnN0cnVjdG9yLnByb3RvdHlwZSA9IGNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSwgeyBuZXh0OiBkZXNjcmlwdG9yKDEsIG5leHQpIH0pO1xuICBzZXRUb1N0cmluZ1RhZyhDb25zdHJ1Y3RvciwgTkFNRSArICcgSXRlcmF0b3InKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgTElCUkFSWSA9IHJlcXVpcmUoJy4vX2xpYnJhcnknKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJyk7XG52YXIgJGl0ZXJDcmVhdGUgPSByZXF1aXJlKCcuL19pdGVyLWNyZWF0ZScpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbnZhciBJVEVSQVRPUiA9IHJlcXVpcmUoJy4vX3drcycpKCdpdGVyYXRvcicpO1xudmFyIEJVR0dZID0gIShbXS5rZXlzICYmICduZXh0JyBpbiBbXS5rZXlzKCkpOyAvLyBTYWZhcmkgaGFzIGJ1Z2d5IGl0ZXJhdG9ycyB3L28gYG5leHRgXG52YXIgRkZfSVRFUkFUT1IgPSAnQEBpdGVyYXRvcic7XG52YXIgS0VZUyA9ICdrZXlzJztcbnZhciBWQUxVRVMgPSAndmFsdWVzJztcblxudmFyIHJldHVyblRoaXMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChCYXNlLCBOQU1FLCBDb25zdHJ1Y3RvciwgbmV4dCwgREVGQVVMVCwgSVNfU0VULCBGT1JDRUQpIHtcbiAgJGl0ZXJDcmVhdGUoQ29uc3RydWN0b3IsIE5BTUUsIG5leHQpO1xuICB2YXIgZ2V0TWV0aG9kID0gZnVuY3Rpb24gKGtpbmQpIHtcbiAgICBpZiAoIUJVR0dZICYmIGtpbmQgaW4gcHJvdG8pIHJldHVybiBwcm90b1traW5kXTtcbiAgICBzd2l0Y2ggKGtpbmQpIHtcbiAgICAgIGNhc2UgS0VZUzogcmV0dXJuIGZ1bmN0aW9uIGtleXMoKSB7IHJldHVybiBuZXcgQ29uc3RydWN0b3IodGhpcywga2luZCk7IH07XG4gICAgICBjYXNlIFZBTFVFUzogcmV0dXJuIGZ1bmN0aW9uIHZhbHVlcygpIHsgcmV0dXJuIG5ldyBDb25zdHJ1Y3Rvcih0aGlzLCBraW5kKTsgfTtcbiAgICB9IHJldHVybiBmdW5jdGlvbiBlbnRyaWVzKCkgeyByZXR1cm4gbmV3IENvbnN0cnVjdG9yKHRoaXMsIGtpbmQpOyB9O1xuICB9O1xuICB2YXIgVEFHID0gTkFNRSArICcgSXRlcmF0b3InO1xuICB2YXIgREVGX1ZBTFVFUyA9IERFRkFVTFQgPT0gVkFMVUVTO1xuICB2YXIgVkFMVUVTX0JVRyA9IGZhbHNlO1xuICB2YXIgcHJvdG8gPSBCYXNlLnByb3RvdHlwZTtcbiAgdmFyICRuYXRpdmUgPSBwcm90b1tJVEVSQVRPUl0gfHwgcHJvdG9bRkZfSVRFUkFUT1JdIHx8IERFRkFVTFQgJiYgcHJvdG9bREVGQVVMVF07XG4gIHZhciAkZGVmYXVsdCA9ICRuYXRpdmUgfHwgZ2V0TWV0aG9kKERFRkFVTFQpO1xuICB2YXIgJGVudHJpZXMgPSBERUZBVUxUID8gIURFRl9WQUxVRVMgPyAkZGVmYXVsdCA6IGdldE1ldGhvZCgnZW50cmllcycpIDogdW5kZWZpbmVkO1xuICB2YXIgJGFueU5hdGl2ZSA9IE5BTUUgPT0gJ0FycmF5JyA/IHByb3RvLmVudHJpZXMgfHwgJG5hdGl2ZSA6ICRuYXRpdmU7XG4gIHZhciBtZXRob2RzLCBrZXksIEl0ZXJhdG9yUHJvdG90eXBlO1xuICAvLyBGaXggbmF0aXZlXG4gIGlmICgkYW55TmF0aXZlKSB7XG4gICAgSXRlcmF0b3JQcm90b3R5cGUgPSBnZXRQcm90b3R5cGVPZigkYW55TmF0aXZlLmNhbGwobmV3IEJhc2UoKSkpO1xuICAgIGlmIChJdGVyYXRvclByb3RvdHlwZSAhPT0gT2JqZWN0LnByb3RvdHlwZSAmJiBJdGVyYXRvclByb3RvdHlwZS5uZXh0KSB7XG4gICAgICAvLyBTZXQgQEB0b1N0cmluZ1RhZyB0byBuYXRpdmUgaXRlcmF0b3JzXG4gICAgICBzZXRUb1N0cmluZ1RhZyhJdGVyYXRvclByb3RvdHlwZSwgVEFHLCB0cnVlKTtcbiAgICAgIC8vIGZpeCBmb3Igc29tZSBvbGQgZW5naW5lc1xuICAgICAgaWYgKCFMSUJSQVJZICYmIHR5cGVvZiBJdGVyYXRvclByb3RvdHlwZVtJVEVSQVRPUl0gIT0gJ2Z1bmN0aW9uJykgaGlkZShJdGVyYXRvclByb3RvdHlwZSwgSVRFUkFUT1IsIHJldHVyblRoaXMpO1xuICAgIH1cbiAgfVxuICAvLyBmaXggQXJyYXkje3ZhbHVlcywgQEBpdGVyYXRvcn0ubmFtZSBpbiBWOCAvIEZGXG4gIGlmIChERUZfVkFMVUVTICYmICRuYXRpdmUgJiYgJG5hdGl2ZS5uYW1lICE9PSBWQUxVRVMpIHtcbiAgICBWQUxVRVNfQlVHID0gdHJ1ZTtcbiAgICAkZGVmYXVsdCA9IGZ1bmN0aW9uIHZhbHVlcygpIHsgcmV0dXJuICRuYXRpdmUuY2FsbCh0aGlzKTsgfTtcbiAgfVxuICAvLyBEZWZpbmUgaXRlcmF0b3JcbiAgaWYgKCghTElCUkFSWSB8fCBGT1JDRUQpICYmIChCVUdHWSB8fCBWQUxVRVNfQlVHIHx8ICFwcm90b1tJVEVSQVRPUl0pKSB7XG4gICAgaGlkZShwcm90bywgSVRFUkFUT1IsICRkZWZhdWx0KTtcbiAgfVxuICAvLyBQbHVnIGZvciBsaWJyYXJ5XG4gIEl0ZXJhdG9yc1tOQU1FXSA9ICRkZWZhdWx0O1xuICBJdGVyYXRvcnNbVEFHXSA9IHJldHVyblRoaXM7XG4gIGlmIChERUZBVUxUKSB7XG4gICAgbWV0aG9kcyA9IHtcbiAgICAgIHZhbHVlczogREVGX1ZBTFVFUyA/ICRkZWZhdWx0IDogZ2V0TWV0aG9kKFZBTFVFUyksXG4gICAgICBrZXlzOiBJU19TRVQgPyAkZGVmYXVsdCA6IGdldE1ldGhvZChLRVlTKSxcbiAgICAgIGVudHJpZXM6ICRlbnRyaWVzXG4gICAgfTtcbiAgICBpZiAoRk9SQ0VEKSBmb3IgKGtleSBpbiBtZXRob2RzKSB7XG4gICAgICBpZiAoIShrZXkgaW4gcHJvdG8pKSByZWRlZmluZShwcm90bywga2V5LCBtZXRob2RzW2tleV0pO1xuICAgIH0gZWxzZSAkZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIChCVUdHWSB8fCBWQUxVRVNfQlVHKSwgTkFNRSwgbWV0aG9kcyk7XG4gIH1cbiAgcmV0dXJuIG1ldGhvZHM7XG59O1xuIiwidmFyIElURVJBVE9SID0gcmVxdWlyZSgnLi9fd2tzJykoJ2l0ZXJhdG9yJyk7XG52YXIgU0FGRV9DTE9TSU5HID0gZmFsc2U7XG5cbnRyeSB7XG4gIHZhciByaXRlciA9IFs3XVtJVEVSQVRPUl0oKTtcbiAgcml0ZXJbJ3JldHVybiddID0gZnVuY3Rpb24gKCkgeyBTQUZFX0NMT1NJTkcgPSB0cnVlOyB9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdGhyb3ctbGl0ZXJhbFxuICBBcnJheS5mcm9tKHJpdGVyLCBmdW5jdGlvbiAoKSB7IHRocm93IDI7IH0pO1xufSBjYXRjaCAoZSkgeyAvKiBlbXB0eSAqLyB9XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMsIHNraXBDbG9zaW5nKSB7XG4gIGlmICghc2tpcENsb3NpbmcgJiYgIVNBRkVfQ0xPU0lORykgcmV0dXJuIGZhbHNlO1xuICB2YXIgc2FmZSA9IGZhbHNlO1xuICB0cnkge1xuICAgIHZhciBhcnIgPSBbN107XG4gICAgdmFyIGl0ZXIgPSBhcnJbSVRFUkFUT1JdKCk7XG4gICAgaXRlci5uZXh0ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4geyBkb25lOiBzYWZlID0gdHJ1ZSB9OyB9O1xuICAgIGFycltJVEVSQVRPUl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiBpdGVyOyB9O1xuICAgIGV4ZWMoYXJyKTtcbiAgfSBjYXRjaCAoZSkgeyAvKiBlbXB0eSAqLyB9XG4gIHJldHVybiBzYWZlO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGRvbmUsIHZhbHVlKSB7XG4gIHJldHVybiB7IHZhbHVlOiB2YWx1ZSwgZG9uZTogISFkb25lIH07XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSB7fTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZmFsc2U7XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgbWFjcm90YXNrID0gcmVxdWlyZSgnLi9fdGFzaycpLnNldDtcbnZhciBPYnNlcnZlciA9IGdsb2JhbC5NdXRhdGlvbk9ic2VydmVyIHx8IGdsb2JhbC5XZWJLaXRNdXRhdGlvbk9ic2VydmVyO1xudmFyIHByb2Nlc3MgPSBnbG9iYWwucHJvY2VzcztcbnZhciBQcm9taXNlID0gZ2xvYmFsLlByb21pc2U7XG52YXIgaXNOb2RlID0gcmVxdWlyZSgnLi9fY29mJykocHJvY2VzcykgPT0gJ3Byb2Nlc3MnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGhlYWQsIGxhc3QsIG5vdGlmeTtcblxuICB2YXIgZmx1c2ggPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHBhcmVudCwgZm47XG4gICAgaWYgKGlzTm9kZSAmJiAocGFyZW50ID0gcHJvY2Vzcy5kb21haW4pKSBwYXJlbnQuZXhpdCgpO1xuICAgIHdoaWxlIChoZWFkKSB7XG4gICAgICBmbiA9IGhlYWQuZm47XG4gICAgICBoZWFkID0gaGVhZC5uZXh0O1xuICAgICAgdHJ5IHtcbiAgICAgICAgZm4oKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKGhlYWQpIG5vdGlmeSgpO1xuICAgICAgICBlbHNlIGxhc3QgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgfSBsYXN0ID0gdW5kZWZpbmVkO1xuICAgIGlmIChwYXJlbnQpIHBhcmVudC5lbnRlcigpO1xuICB9O1xuXG4gIC8vIE5vZGUuanNcbiAgaWYgKGlzTm9kZSkge1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHByb2Nlc3MubmV4dFRpY2soZmx1c2gpO1xuICAgIH07XG4gIC8vIGJyb3dzZXJzIHdpdGggTXV0YXRpb25PYnNlcnZlciwgZXhjZXB0IGlPUyBTYWZhcmkgLSBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvMzM5XG4gIH0gZWxzZSBpZiAoT2JzZXJ2ZXIgJiYgIShnbG9iYWwubmF2aWdhdG9yICYmIGdsb2JhbC5uYXZpZ2F0b3Iuc3RhbmRhbG9uZSkpIHtcbiAgICB2YXIgdG9nZ2xlID0gdHJ1ZTtcbiAgICB2YXIgbm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcnKTtcbiAgICBuZXcgT2JzZXJ2ZXIoZmx1c2gpLm9ic2VydmUobm9kZSwgeyBjaGFyYWN0ZXJEYXRhOiB0cnVlIH0pOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIG5vZGUuZGF0YSA9IHRvZ2dsZSA9ICF0b2dnbGU7XG4gICAgfTtcbiAgLy8gZW52aXJvbm1lbnRzIHdpdGggbWF5YmUgbm9uLWNvbXBsZXRlbHkgY29ycmVjdCwgYnV0IGV4aXN0ZW50IFByb21pc2VcbiAgfSBlbHNlIGlmIChQcm9taXNlICYmIFByb21pc2UucmVzb2x2ZSkge1xuICAgIC8vIFByb21pc2UucmVzb2x2ZSB3aXRob3V0IGFuIGFyZ3VtZW50IHRocm93cyBhbiBlcnJvciBpbiBMRyBXZWJPUyAyXG4gICAgdmFyIHByb21pc2UgPSBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBwcm9taXNlLnRoZW4oZmx1c2gpO1xuICAgIH07XG4gIC8vIGZvciBvdGhlciBlbnZpcm9ubWVudHMgLSBtYWNyb3Rhc2sgYmFzZWQgb246XG4gIC8vIC0gc2V0SW1tZWRpYXRlXG4gIC8vIC0gTWVzc2FnZUNoYW5uZWxcbiAgLy8gLSB3aW5kb3cucG9zdE1lc3NhZ1xuICAvLyAtIG9ucmVhZHlzdGF0ZWNoYW5nZVxuICAvLyAtIHNldFRpbWVvdXRcbiAgfSBlbHNlIHtcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBzdHJhbmdlIElFICsgd2VicGFjayBkZXYgc2VydmVyIGJ1ZyAtIHVzZSAuY2FsbChnbG9iYWwpXG4gICAgICBtYWNyb3Rhc2suY2FsbChnbG9iYWwsIGZsdXNoKTtcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChmbikge1xuICAgIHZhciB0YXNrID0geyBmbjogZm4sIG5leHQ6IHVuZGVmaW5lZCB9O1xuICAgIGlmIChsYXN0KSBsYXN0Lm5leHQgPSB0YXNrO1xuICAgIGlmICghaGVhZCkge1xuICAgICAgaGVhZCA9IHRhc2s7XG4gICAgICBub3RpZnkoKTtcbiAgICB9IGxhc3QgPSB0YXNrO1xuICB9O1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIDI1LjQuMS41IE5ld1Byb21pc2VDYXBhYmlsaXR5KEMpXG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xuXG5mdW5jdGlvbiBQcm9taXNlQ2FwYWJpbGl0eShDKSB7XG4gIHZhciByZXNvbHZlLCByZWplY3Q7XG4gIHRoaXMucHJvbWlzZSA9IG5ldyBDKGZ1bmN0aW9uICgkJHJlc29sdmUsICQkcmVqZWN0KSB7XG4gICAgaWYgKHJlc29sdmUgIT09IHVuZGVmaW5lZCB8fCByZWplY3QgIT09IHVuZGVmaW5lZCkgdGhyb3cgVHlwZUVycm9yKCdCYWQgUHJvbWlzZSBjb25zdHJ1Y3RvcicpO1xuICAgIHJlc29sdmUgPSAkJHJlc29sdmU7XG4gICAgcmVqZWN0ID0gJCRyZWplY3Q7XG4gIH0pO1xuICB0aGlzLnJlc29sdmUgPSBhRnVuY3Rpb24ocmVzb2x2ZSk7XG4gIHRoaXMucmVqZWN0ID0gYUZ1bmN0aW9uKHJlamVjdCk7XG59XG5cbm1vZHVsZS5leHBvcnRzLmYgPSBmdW5jdGlvbiAoQykge1xuICByZXR1cm4gbmV3IFByb21pc2VDYXBhYmlsaXR5KEMpO1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIDE5LjEuMi4xIE9iamVjdC5hc3NpZ24odGFyZ2V0LCBzb3VyY2UsIC4uLilcbnZhciBnZXRLZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcbnZhciBnT1BTID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcHMnKTtcbnZhciBwSUUgPSByZXF1aXJlKCcuL19vYmplY3QtcGllJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciBJT2JqZWN0ID0gcmVxdWlyZSgnLi9faW9iamVjdCcpO1xudmFyICRhc3NpZ24gPSBPYmplY3QuYXNzaWduO1xuXG4vLyBzaG91bGQgd29yayB3aXRoIHN5bWJvbHMgYW5kIHNob3VsZCBoYXZlIGRldGVybWluaXN0aWMgcHJvcGVydHkgb3JkZXIgKFY4IGJ1Zylcbm1vZHVsZS5leHBvcnRzID0gISRhc3NpZ24gfHwgcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHZhciBBID0ge307XG4gIHZhciBCID0ge307XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICB2YXIgUyA9IFN5bWJvbCgpO1xuICB2YXIgSyA9ICdhYmNkZWZnaGlqa2xtbm9wcXJzdCc7XG4gIEFbU10gPSA3O1xuICBLLnNwbGl0KCcnKS5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7IEJba10gPSBrOyB9KTtcbiAgcmV0dXJuICRhc3NpZ24oe30sIEEpW1NdICE9IDcgfHwgT2JqZWN0LmtleXMoJGFzc2lnbih7fSwgQikpLmpvaW4oJycpICE9IEs7XG59KSA/IGZ1bmN0aW9uIGFzc2lnbih0YXJnZXQsIHNvdXJjZSkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gIHZhciBUID0gdG9PYmplY3QodGFyZ2V0KTtcbiAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICB2YXIgaW5kZXggPSAxO1xuICB2YXIgZ2V0U3ltYm9scyA9IGdPUFMuZjtcbiAgdmFyIGlzRW51bSA9IHBJRS5mO1xuICB3aGlsZSAoYUxlbiA+IGluZGV4KSB7XG4gICAgdmFyIFMgPSBJT2JqZWN0KGFyZ3VtZW50c1tpbmRleCsrXSk7XG4gICAgdmFyIGtleXMgPSBnZXRTeW1ib2xzID8gZ2V0S2V5cyhTKS5jb25jYXQoZ2V0U3ltYm9scyhTKSkgOiBnZXRLZXlzKFMpO1xuICAgIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgICB2YXIgaiA9IDA7XG4gICAgdmFyIGtleTtcbiAgICB3aGlsZSAobGVuZ3RoID4gaikgaWYgKGlzRW51bS5jYWxsKFMsIGtleSA9IGtleXNbaisrXSkpIFRba2V5XSA9IFNba2V5XTtcbiAgfSByZXR1cm4gVDtcbn0gOiAkYXNzaWduO1xuIiwiLy8gMTkuMS4yLjIgLyAxNS4yLjMuNSBPYmplY3QuY3JlYXRlKE8gWywgUHJvcGVydGllc10pXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBkUHMgPSByZXF1aXJlKCcuL19vYmplY3QtZHBzJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuL19lbnVtLWJ1Zy1rZXlzJyk7XG52YXIgSUVfUFJPVE8gPSByZXF1aXJlKCcuL19zaGFyZWQta2V5JykoJ0lFX1BST1RPJyk7XG52YXIgRW1wdHkgPSBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH07XG52YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG5cbi8vIENyZWF0ZSBvYmplY3Qgd2l0aCBmYWtlIGBudWxsYCBwcm90b3R5cGU6IHVzZSBpZnJhbWUgT2JqZWN0IHdpdGggY2xlYXJlZCBwcm90b3R5cGVcbnZhciBjcmVhdGVEaWN0ID0gZnVuY3Rpb24gKCkge1xuICAvLyBUaHJhc2gsIHdhc3RlIGFuZCBzb2RvbXk6IElFIEdDIGJ1Z1xuICB2YXIgaWZyYW1lID0gcmVxdWlyZSgnLi9fZG9tLWNyZWF0ZScpKCdpZnJhbWUnKTtcbiAgdmFyIGkgPSBlbnVtQnVnS2V5cy5sZW5ndGg7XG4gIHZhciBsdCA9ICc8JztcbiAgdmFyIGd0ID0gJz4nO1xuICB2YXIgaWZyYW1lRG9jdW1lbnQ7XG4gIGlmcmFtZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICByZXF1aXJlKCcuL19odG1sJykuYXBwZW5kQ2hpbGQoaWZyYW1lKTtcbiAgaWZyYW1lLnNyYyA9ICdqYXZhc2NyaXB0Oic7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tc2NyaXB0LXVybFxuICAvLyBjcmVhdGVEaWN0ID0gaWZyYW1lLmNvbnRlbnRXaW5kb3cuT2JqZWN0O1xuICAvLyBodG1sLnJlbW92ZUNoaWxkKGlmcmFtZSk7XG4gIGlmcmFtZURvY3VtZW50ID0gaWZyYW1lLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQ7XG4gIGlmcmFtZURvY3VtZW50Lm9wZW4oKTtcbiAgaWZyYW1lRG9jdW1lbnQud3JpdGUobHQgKyAnc2NyaXB0JyArIGd0ICsgJ2RvY3VtZW50LkY9T2JqZWN0JyArIGx0ICsgJy9zY3JpcHQnICsgZ3QpO1xuICBpZnJhbWVEb2N1bWVudC5jbG9zZSgpO1xuICBjcmVhdGVEaWN0ID0gaWZyYW1lRG9jdW1lbnQuRjtcbiAgd2hpbGUgKGktLSkgZGVsZXRlIGNyZWF0ZURpY3RbUFJPVE9UWVBFXVtlbnVtQnVnS2V5c1tpXV07XG4gIHJldHVybiBjcmVhdGVEaWN0KCk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5jcmVhdGUgfHwgZnVuY3Rpb24gY3JlYXRlKE8sIFByb3BlcnRpZXMpIHtcbiAgdmFyIHJlc3VsdDtcbiAgaWYgKE8gIT09IG51bGwpIHtcbiAgICBFbXB0eVtQUk9UT1RZUEVdID0gYW5PYmplY3QoTyk7XG4gICAgcmVzdWx0ID0gbmV3IEVtcHR5KCk7XG4gICAgRW1wdHlbUFJPVE9UWVBFXSA9IG51bGw7XG4gICAgLy8gYWRkIFwiX19wcm90b19fXCIgZm9yIE9iamVjdC5nZXRQcm90b3R5cGVPZiBwb2x5ZmlsbFxuICAgIHJlc3VsdFtJRV9QUk9UT10gPSBPO1xuICB9IGVsc2UgcmVzdWx0ID0gY3JlYXRlRGljdCgpO1xuICByZXR1cm4gUHJvcGVydGllcyA9PT0gdW5kZWZpbmVkID8gcmVzdWx0IDogZFBzKHJlc3VsdCwgUHJvcGVydGllcyk7XG59O1xuIiwidmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuL19pZTgtZG9tLWRlZmluZScpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG52YXIgZFAgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG5cbmV4cG9ydHMuZiA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkgOiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICBQID0gdG9QcmltaXRpdmUoUCwgdHJ1ZSk7XG4gIGFuT2JqZWN0KEF0dHJpYnV0ZXMpO1xuICBpZiAoSUU4X0RPTV9ERUZJTkUpIHRyeSB7XG4gICAgcmV0dXJuIGRQKE8sIFAsIEF0dHJpYnV0ZXMpO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbiAgaWYgKCdnZXQnIGluIEF0dHJpYnV0ZXMgfHwgJ3NldCcgaW4gQXR0cmlidXRlcykgdGhyb3cgVHlwZUVycm9yKCdBY2Nlc3NvcnMgbm90IHN1cHBvcnRlZCEnKTtcbiAgaWYgKCd2YWx1ZScgaW4gQXR0cmlidXRlcykgT1tQXSA9IEF0dHJpYnV0ZXMudmFsdWU7XG4gIHJldHVybiBPO1xufTtcbiIsInZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgZ2V0S2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzIDogZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhPLCBQcm9wZXJ0aWVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICB2YXIga2V5cyA9IGdldEtleXMoUHJvcGVydGllcyk7XG4gIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgdmFyIGkgPSAwO1xuICB2YXIgUDtcbiAgd2hpbGUgKGxlbmd0aCA+IGkpIGRQLmYoTywgUCA9IGtleXNbaSsrXSwgUHJvcGVydGllc1tQXSk7XG4gIHJldHVybiBPO1xufTtcbiIsImV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG4iLCIvLyAxOS4xLjIuOSAvIDE1LjIuMy4yIE9iamVjdC5nZXRQcm90b3R5cGVPZihPKVxudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgSUVfUFJPVE8gPSByZXF1aXJlKCcuL19zaGFyZWQta2V5JykoJ0lFX1BST1RPJyk7XG52YXIgT2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5nZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiAoTykge1xuICBPID0gdG9PYmplY3QoTyk7XG4gIGlmIChoYXMoTywgSUVfUFJPVE8pKSByZXR1cm4gT1tJRV9QUk9UT107XG4gIGlmICh0eXBlb2YgTy5jb25zdHJ1Y3RvciA9PSAnZnVuY3Rpb24nICYmIE8gaW5zdGFuY2VvZiBPLmNvbnN0cnVjdG9yKSB7XG4gICAgcmV0dXJuIE8uY29uc3RydWN0b3IucHJvdG90eXBlO1xuICB9IHJldHVybiBPIGluc3RhbmNlb2YgT2JqZWN0ID8gT2JqZWN0UHJvdG8gOiBudWxsO1xufTtcbiIsInZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgYXJyYXlJbmRleE9mID0gcmVxdWlyZSgnLi9fYXJyYXktaW5jbHVkZXMnKShmYWxzZSk7XG52YXIgSUVfUFJPVE8gPSByZXF1aXJlKCcuL19zaGFyZWQta2V5JykoJ0lFX1BST1RPJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iamVjdCwgbmFtZXMpIHtcbiAgdmFyIE8gPSB0b0lPYmplY3Qob2JqZWN0KTtcbiAgdmFyIGkgPSAwO1xuICB2YXIgcmVzdWx0ID0gW107XG4gIHZhciBrZXk7XG4gIGZvciAoa2V5IGluIE8pIGlmIChrZXkgIT0gSUVfUFJPVE8pIGhhcyhPLCBrZXkpICYmIHJlc3VsdC5wdXNoKGtleSk7XG4gIC8vIERvbid0IGVudW0gYnVnICYgaGlkZGVuIGtleXNcbiAgd2hpbGUgKG5hbWVzLmxlbmd0aCA+IGkpIGlmIChoYXMoTywga2V5ID0gbmFtZXNbaSsrXSkpIHtcbiAgICB+YXJyYXlJbmRleE9mKHJlc3VsdCwga2V5KSB8fCByZXN1bHQucHVzaChrZXkpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwiLy8gMTkuMS4yLjE0IC8gMTUuMi4zLjE0IE9iamVjdC5rZXlzKE8pXG52YXIgJGtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cy1pbnRlcm5hbCcpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi9fZW51bS1idWcta2V5cycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIGtleXMoTykge1xuICByZXR1cm4gJGtleXMoTywgZW51bUJ1Z0tleXMpO1xufTtcbiIsImV4cG9ydHMuZiA9IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYykge1xuICB0cnkge1xuICAgIHJldHVybiB7IGU6IGZhbHNlLCB2OiBleGVjKCkgfTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiB7IGU6IHRydWUsIHY6IGUgfTtcbiAgfVxufTtcbiIsInZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHkgPSByZXF1aXJlKCcuL19uZXctcHJvbWlzZS1jYXBhYmlsaXR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEMsIHgpIHtcbiAgYW5PYmplY3QoQyk7XG4gIGlmIChpc09iamVjdCh4KSAmJiB4LmNvbnN0cnVjdG9yID09PSBDKSByZXR1cm4geDtcbiAgdmFyIHByb21pc2VDYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkuZihDKTtcbiAgdmFyIHJlc29sdmUgPSBwcm9taXNlQ2FwYWJpbGl0eS5yZXNvbHZlO1xuICByZXNvbHZlKHgpO1xuICByZXR1cm4gcHJvbWlzZUNhcGFiaWxpdHkucHJvbWlzZTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChiaXRtYXAsIHZhbHVlKSB7XG4gIHJldHVybiB7XG4gICAgZW51bWVyYWJsZTogIShiaXRtYXAgJiAxKSxcbiAgICBjb25maWd1cmFibGU6ICEoYml0bWFwICYgMiksXG4gICAgd3JpdGFibGU6ICEoYml0bWFwICYgNCksXG4gICAgdmFsdWU6IHZhbHVlXG4gIH07XG59O1xuIiwidmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRhcmdldCwgc3JjLCBzYWZlKSB7XG4gIGZvciAodmFyIGtleSBpbiBzcmMpIHJlZGVmaW5lKHRhcmdldCwga2V5LCBzcmNba2V5XSwgc2FmZSk7XG4gIHJldHVybiB0YXJnZXQ7XG59O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgU1JDID0gcmVxdWlyZSgnLi9fdWlkJykoJ3NyYycpO1xudmFyICR0b1N0cmluZyA9IHJlcXVpcmUoJy4vX2Z1bmN0aW9uLXRvLXN0cmluZycpO1xudmFyIFRPX1NUUklORyA9ICd0b1N0cmluZyc7XG52YXIgVFBMID0gKCcnICsgJHRvU3RyaW5nKS5zcGxpdChUT19TVFJJTkcpO1xuXG5yZXF1aXJlKCcuL19jb3JlJykuaW5zcGVjdFNvdXJjZSA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gJHRvU3RyaW5nLmNhbGwoaXQpO1xufTtcblxuKG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE8sIGtleSwgdmFsLCBzYWZlKSB7XG4gIHZhciBpc0Z1bmN0aW9uID0gdHlwZW9mIHZhbCA9PSAnZnVuY3Rpb24nO1xuICBpZiAoaXNGdW5jdGlvbikgaGFzKHZhbCwgJ25hbWUnKSB8fCBoaWRlKHZhbCwgJ25hbWUnLCBrZXkpO1xuICBpZiAoT1trZXldID09PSB2YWwpIHJldHVybjtcbiAgaWYgKGlzRnVuY3Rpb24pIGhhcyh2YWwsIFNSQykgfHwgaGlkZSh2YWwsIFNSQywgT1trZXldID8gJycgKyBPW2tleV0gOiBUUEwuam9pbihTdHJpbmcoa2V5KSkpO1xuICBpZiAoTyA9PT0gZ2xvYmFsKSB7XG4gICAgT1trZXldID0gdmFsO1xuICB9IGVsc2UgaWYgKCFzYWZlKSB7XG4gICAgZGVsZXRlIE9ba2V5XTtcbiAgICBoaWRlKE8sIGtleSwgdmFsKTtcbiAgfSBlbHNlIGlmIChPW2tleV0pIHtcbiAgICBPW2tleV0gPSB2YWw7XG4gIH0gZWxzZSB7XG4gICAgaGlkZShPLCBrZXksIHZhbCk7XG4gIH1cbi8vIGFkZCBmYWtlIEZ1bmN0aW9uI3RvU3RyaW5nIGZvciBjb3JyZWN0IHdvcmsgd3JhcHBlZCBtZXRob2RzIC8gY29uc3RydWN0b3JzIHdpdGggbWV0aG9kcyBsaWtlIExvRGFzaCBpc05hdGl2ZVxufSkoRnVuY3Rpb24ucHJvdG90eXBlLCBUT19TVFJJTkcsIGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICByZXR1cm4gdHlwZW9mIHRoaXMgPT0gJ2Z1bmN0aW9uJyAmJiB0aGlzW1NSQ10gfHwgJHRvU3RyaW5nLmNhbGwodGhpcyk7XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKTtcbnZhciBTUEVDSUVTID0gcmVxdWlyZSgnLi9fd2tzJykoJ3NwZWNpZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoS0VZKSB7XG4gIHZhciBDID0gZ2xvYmFsW0tFWV07XG4gIGlmIChERVNDUklQVE9SUyAmJiBDICYmICFDW1NQRUNJRVNdKSBkUC5mKEMsIFNQRUNJRVMsIHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9XG4gIH0pO1xufTtcbiIsInZhciBkZWYgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIFRBRyA9IHJlcXVpcmUoJy4vX3drcycpKCd0b1N0cmluZ1RhZycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgdGFnLCBzdGF0KSB7XG4gIGlmIChpdCAmJiAhaGFzKGl0ID0gc3RhdCA/IGl0IDogaXQucHJvdG90eXBlLCBUQUcpKSBkZWYoaXQsIFRBRywgeyBjb25maWd1cmFibGU6IHRydWUsIHZhbHVlOiB0YWcgfSk7XG59O1xuIiwidmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4vX3NoYXJlZCcpKCdrZXlzJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi9fdWlkJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgcmV0dXJuIHNoYXJlZFtrZXldIHx8IChzaGFyZWRba2V5XSA9IHVpZChrZXkpKTtcbn07XG4iLCJ2YXIgY29yZSA9IHJlcXVpcmUoJy4vX2NvcmUnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBTSEFSRUQgPSAnX19jb3JlLWpzX3NoYXJlZF9fJztcbnZhciBzdG9yZSA9IGdsb2JhbFtTSEFSRURdIHx8IChnbG9iYWxbU0hBUkVEXSA9IHt9KTtcblxuKG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIHN0b3JlW2tleV0gfHwgKHN0b3JlW2tleV0gPSB2YWx1ZSAhPT0gdW5kZWZpbmVkID8gdmFsdWUgOiB7fSk7XG59KSgndmVyc2lvbnMnLCBbXSkucHVzaCh7XG4gIHZlcnNpb246IGNvcmUudmVyc2lvbixcbiAgbW9kZTogcmVxdWlyZSgnLi9fbGlicmFyeScpID8gJ3B1cmUnIDogJ2dsb2JhbCcsXG4gIGNvcHlyaWdodDogJ8KpIDIwMTkgRGVuaXMgUHVzaGthcmV2ICh6bG9pcm9jay5ydSknXG59KTtcbiIsIi8vIDcuMy4yMCBTcGVjaWVzQ29uc3RydWN0b3IoTywgZGVmYXVsdENvbnN0cnVjdG9yKVxudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIFNQRUNJRVMgPSByZXF1aXJlKCcuL193a3MnKSgnc3BlY2llcycpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTywgRCkge1xuICB2YXIgQyA9IGFuT2JqZWN0KE8pLmNvbnN0cnVjdG9yO1xuICB2YXIgUztcbiAgcmV0dXJuIEMgPT09IHVuZGVmaW5lZCB8fCAoUyA9IGFuT2JqZWN0KEMpW1NQRUNJRVNdKSA9PSB1bmRlZmluZWQgPyBEIDogYUZ1bmN0aW9uKFMpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG1ldGhvZCwgYXJnKSB7XG4gIHJldHVybiAhIW1ldGhvZCAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZWxlc3MtY2FsbFxuICAgIGFyZyA/IG1ldGhvZC5jYWxsKG51bGwsIGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSwgMSkgOiBtZXRob2QuY2FsbChudWxsKTtcbiAgfSk7XG59O1xuIiwidmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xuLy8gdHJ1ZSAgLT4gU3RyaW5nI2F0XG4vLyBmYWxzZSAtPiBTdHJpbmcjY29kZVBvaW50QXRcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFRPX1NUUklORykge1xuICByZXR1cm4gZnVuY3Rpb24gKHRoYXQsIHBvcykge1xuICAgIHZhciBzID0gU3RyaW5nKGRlZmluZWQodGhhdCkpO1xuICAgIHZhciBpID0gdG9JbnRlZ2VyKHBvcyk7XG4gICAgdmFyIGwgPSBzLmxlbmd0aDtcbiAgICB2YXIgYSwgYjtcbiAgICBpZiAoaSA8IDAgfHwgaSA+PSBsKSByZXR1cm4gVE9fU1RSSU5HID8gJycgOiB1bmRlZmluZWQ7XG4gICAgYSA9IHMuY2hhckNvZGVBdChpKTtcbiAgICByZXR1cm4gYSA8IDB4ZDgwMCB8fCBhID4gMHhkYmZmIHx8IGkgKyAxID09PSBsIHx8IChiID0gcy5jaGFyQ29kZUF0KGkgKyAxKSkgPCAweGRjMDAgfHwgYiA+IDB4ZGZmZlxuICAgICAgPyBUT19TVFJJTkcgPyBzLmNoYXJBdChpKSA6IGFcbiAgICAgIDogVE9fU1RSSU5HID8gcy5zbGljZShpLCBpICsgMikgOiAoYSAtIDB4ZDgwMCA8PCAxMCkgKyAoYiAtIDB4ZGMwMCkgKyAweDEwMDAwO1xuICB9O1xufTtcbiIsInZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbnZhciBpbnZva2UgPSByZXF1aXJlKCcuL19pbnZva2UnKTtcbnZhciBodG1sID0gcmVxdWlyZSgnLi9faHRtbCcpO1xudmFyIGNlbCA9IHJlcXVpcmUoJy4vX2RvbS1jcmVhdGUnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBwcm9jZXNzID0gZ2xvYmFsLnByb2Nlc3M7XG52YXIgc2V0VGFzayA9IGdsb2JhbC5zZXRJbW1lZGlhdGU7XG52YXIgY2xlYXJUYXNrID0gZ2xvYmFsLmNsZWFySW1tZWRpYXRlO1xudmFyIE1lc3NhZ2VDaGFubmVsID0gZ2xvYmFsLk1lc3NhZ2VDaGFubmVsO1xudmFyIERpc3BhdGNoID0gZ2xvYmFsLkRpc3BhdGNoO1xudmFyIGNvdW50ZXIgPSAwO1xudmFyIHF1ZXVlID0ge307XG52YXIgT05SRUFEWVNUQVRFQ0hBTkdFID0gJ29ucmVhZHlzdGF0ZWNoYW5nZSc7XG52YXIgZGVmZXIsIGNoYW5uZWwsIHBvcnQ7XG52YXIgcnVuID0gZnVuY3Rpb24gKCkge1xuICB2YXIgaWQgPSArdGhpcztcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xuICBpZiAocXVldWUuaGFzT3duUHJvcGVydHkoaWQpKSB7XG4gICAgdmFyIGZuID0gcXVldWVbaWRdO1xuICAgIGRlbGV0ZSBxdWV1ZVtpZF07XG4gICAgZm4oKTtcbiAgfVxufTtcbnZhciBsaXN0ZW5lciA9IGZ1bmN0aW9uIChldmVudCkge1xuICBydW4uY2FsbChldmVudC5kYXRhKTtcbn07XG4vLyBOb2RlLmpzIDAuOSsgJiBJRTEwKyBoYXMgc2V0SW1tZWRpYXRlLCBvdGhlcndpc2U6XG5pZiAoIXNldFRhc2sgfHwgIWNsZWFyVGFzaykge1xuICBzZXRUYXNrID0gZnVuY3Rpb24gc2V0SW1tZWRpYXRlKGZuKSB7XG4gICAgdmFyIGFyZ3MgPSBbXTtcbiAgICB2YXIgaSA9IDE7XG4gICAgd2hpbGUgKGFyZ3VtZW50cy5sZW5ndGggPiBpKSBhcmdzLnB1c2goYXJndW1lbnRzW2krK10pO1xuICAgIHF1ZXVlWysrY291bnRlcl0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmNcbiAgICAgIGludm9rZSh0eXBlb2YgZm4gPT0gJ2Z1bmN0aW9uJyA/IGZuIDogRnVuY3Rpb24oZm4pLCBhcmdzKTtcbiAgICB9O1xuICAgIGRlZmVyKGNvdW50ZXIpO1xuICAgIHJldHVybiBjb3VudGVyO1xuICB9O1xuICBjbGVhclRhc2sgPSBmdW5jdGlvbiBjbGVhckltbWVkaWF0ZShpZCkge1xuICAgIGRlbGV0ZSBxdWV1ZVtpZF07XG4gIH07XG4gIC8vIE5vZGUuanMgMC44LVxuICBpZiAocmVxdWlyZSgnLi9fY29mJykocHJvY2VzcykgPT0gJ3Byb2Nlc3MnKSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIHByb2Nlc3MubmV4dFRpY2soY3R4KHJ1biwgaWQsIDEpKTtcbiAgICB9O1xuICAvLyBTcGhlcmUgKEpTIGdhbWUgZW5naW5lKSBEaXNwYXRjaCBBUElcbiAgfSBlbHNlIGlmIChEaXNwYXRjaCAmJiBEaXNwYXRjaC5ub3cpIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgRGlzcGF0Y2gubm93KGN0eChydW4sIGlkLCAxKSk7XG4gICAgfTtcbiAgLy8gQnJvd3NlcnMgd2l0aCBNZXNzYWdlQ2hhbm5lbCwgaW5jbHVkZXMgV2ViV29ya2Vyc1xuICB9IGVsc2UgaWYgKE1lc3NhZ2VDaGFubmVsKSB7XG4gICAgY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpO1xuICAgIHBvcnQgPSBjaGFubmVsLnBvcnQyO1xuICAgIGNoYW5uZWwucG9ydDEub25tZXNzYWdlID0gbGlzdGVuZXI7XG4gICAgZGVmZXIgPSBjdHgocG9ydC5wb3N0TWVzc2FnZSwgcG9ydCwgMSk7XG4gIC8vIEJyb3dzZXJzIHdpdGggcG9zdE1lc3NhZ2UsIHNraXAgV2ViV29ya2Vyc1xuICAvLyBJRTggaGFzIHBvc3RNZXNzYWdlLCBidXQgaXQncyBzeW5jICYgdHlwZW9mIGl0cyBwb3N0TWVzc2FnZSBpcyAnb2JqZWN0J1xuICB9IGVsc2UgaWYgKGdsb2JhbC5hZGRFdmVudExpc3RlbmVyICYmIHR5cGVvZiBwb3N0TWVzc2FnZSA9PSAnZnVuY3Rpb24nICYmICFnbG9iYWwuaW1wb3J0U2NyaXB0cykge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBnbG9iYWwucG9zdE1lc3NhZ2UoaWQgKyAnJywgJyonKTtcbiAgICB9O1xuICAgIGdsb2JhbC5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgbGlzdGVuZXIsIGZhbHNlKTtcbiAgLy8gSUU4LVxuICB9IGVsc2UgaWYgKE9OUkVBRFlTVEFURUNIQU5HRSBpbiBjZWwoJ3NjcmlwdCcpKSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIGh0bWwuYXBwZW5kQ2hpbGQoY2VsKCdzY3JpcHQnKSlbT05SRUFEWVNUQVRFQ0hBTkdFXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaHRtbC5yZW1vdmVDaGlsZCh0aGlzKTtcbiAgICAgICAgcnVuLmNhbGwoaWQpO1xuICAgICAgfTtcbiAgICB9O1xuICAvLyBSZXN0IG9sZCBicm93c2Vyc1xuICB9IGVsc2Uge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBzZXRUaW1lb3V0KGN0eChydW4sIGlkLCAxKSwgMCk7XG4gICAgfTtcbiAgfVxufVxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHNldDogc2V0VGFzayxcbiAgY2xlYXI6IGNsZWFyVGFza1xufTtcbiIsInZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgbWF4ID0gTWF0aC5tYXg7XG52YXIgbWluID0gTWF0aC5taW47XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbmRleCwgbGVuZ3RoKSB7XG4gIGluZGV4ID0gdG9JbnRlZ2VyKGluZGV4KTtcbiAgcmV0dXJuIGluZGV4IDwgMCA/IG1heChpbmRleCArIGxlbmd0aCwgMCkgOiBtaW4oaW5kZXgsIGxlbmd0aCk7XG59O1xuIiwiLy8gNy4xLjQgVG9JbnRlZ2VyXG52YXIgY2VpbCA9IE1hdGguY2VpbDtcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXNOYU4oaXQgPSAraXQpID8gMCA6IChpdCA+IDAgPyBmbG9vciA6IGNlaWwpKGl0KTtcbn07XG4iLCIvLyB0byBpbmRleGVkIG9iamVjdCwgdG9PYmplY3Qgd2l0aCBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIHN0cmluZ3NcbnZhciBJT2JqZWN0ID0gcmVxdWlyZSgnLi9faW9iamVjdCcpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gSU9iamVjdChkZWZpbmVkKGl0KSk7XG59O1xuIiwiLy8gNy4xLjE1IFRvTGVuZ3RoXG52YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIG1pbiA9IE1hdGgubWluO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ID4gMCA/IG1pbih0b0ludGVnZXIoaXQpLCAweDFmZmZmZmZmZmZmZmZmKSA6IDA7IC8vIHBvdygyLCA1MykgLSAxID09IDkwMDcxOTkyNTQ3NDA5OTFcbn07XG4iLCIvLyA3LjEuMTMgVG9PYmplY3QoYXJndW1lbnQpXG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBPYmplY3QoZGVmaW5lZChpdCkpO1xufTtcbiIsIi8vIDcuMS4xIFRvUHJpbWl0aXZlKGlucHV0IFssIFByZWZlcnJlZFR5cGVdKVxudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG4vLyBpbnN0ZWFkIG9mIHRoZSBFUzYgc3BlYyB2ZXJzaW9uLCB3ZSBkaWRuJ3QgaW1wbGVtZW50IEBAdG9QcmltaXRpdmUgY2FzZVxuLy8gYW5kIHRoZSBzZWNvbmQgYXJndW1lbnQgLSBmbGFnIC0gcHJlZmVycmVkIHR5cGUgaXMgYSBzdHJpbmdcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBTKSB7XG4gIGlmICghaXNPYmplY3QoaXQpKSByZXR1cm4gaXQ7XG4gIHZhciBmbiwgdmFsO1xuICBpZiAoUyAmJiB0eXBlb2YgKGZuID0gaXQudG9TdHJpbmcpID09ICdmdW5jdGlvbicgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaXQpKSkgcmV0dXJuIHZhbDtcbiAgaWYgKHR5cGVvZiAoZm4gPSBpdC52YWx1ZU9mKSA9PSAnZnVuY3Rpb24nICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGl0KSkpIHJldHVybiB2YWw7XG4gIGlmICghUyAmJiB0eXBlb2YgKGZuID0gaXQudG9TdHJpbmcpID09ICdmdW5jdGlvbicgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaXQpKSkgcmV0dXJuIHZhbDtcbiAgdGhyb3cgVHlwZUVycm9yKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpO1xufTtcbiIsInZhciBpZCA9IDA7XG52YXIgcHggPSBNYXRoLnJhbmRvbSgpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiAnU3ltYm9sKCcuY29uY2F0KGtleSA9PT0gdW5kZWZpbmVkID8gJycgOiBrZXksICcpXycsICgrK2lkICsgcHgpLnRvU3RyaW5nKDM2KSk7XG59O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIG5hdmlnYXRvciA9IGdsb2JhbC5uYXZpZ2F0b3I7XG5cbm1vZHVsZS5leHBvcnRzID0gbmF2aWdhdG9yICYmIG5hdmlnYXRvci51c2VyQWdlbnQgfHwgJyc7XG4iLCJ2YXIgc3RvcmUgPSByZXF1aXJlKCcuL19zaGFyZWQnKSgnd2tzJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi9fdWlkJyk7XG52YXIgU3ltYm9sID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykuU3ltYm9sO1xudmFyIFVTRV9TWU1CT0wgPSB0eXBlb2YgU3ltYm9sID09ICdmdW5jdGlvbic7XG5cbnZhciAkZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgcmV0dXJuIHN0b3JlW25hbWVdIHx8IChzdG9yZVtuYW1lXSA9XG4gICAgVVNFX1NZTUJPTCAmJiBTeW1ib2xbbmFtZV0gfHwgKFVTRV9TWU1CT0wgPyBTeW1ib2wgOiB1aWQpKCdTeW1ib2wuJyArIG5hbWUpKTtcbn07XG5cbiRleHBvcnRzLnN0b3JlID0gc3RvcmU7XG4iLCJ2YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4vX2NsYXNzb2YnKTtcbnZhciBJVEVSQVRPUiA9IHJlcXVpcmUoJy4vX3drcycpKCdpdGVyYXRvcicpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19jb3JlJykuZ2V0SXRlcmF0b3JNZXRob2QgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGl0ICE9IHVuZGVmaW5lZCkgcmV0dXJuIGl0W0lURVJBVE9SXVxuICAgIHx8IGl0WydAQGl0ZXJhdG9yJ11cbiAgICB8fCBJdGVyYXRvcnNbY2xhc3NvZihpdCldO1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIDIyLjEuMy44IEFycmF5LnByb3RvdHlwZS5maW5kKHByZWRpY2F0ZSwgdGhpc0FyZyA9IHVuZGVmaW5lZClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGZpbmQgPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJykoNSk7XG52YXIgS0VZID0gJ2ZpbmQnO1xudmFyIGZvcmNlZCA9IHRydWU7XG4vLyBTaG91bGRuJ3Qgc2tpcCBob2xlc1xuaWYgKEtFWSBpbiBbXSkgQXJyYXkoMSlbS0VZXShmdW5jdGlvbiAoKSB7IGZvcmNlZCA9IGZhbHNlOyB9KTtcbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogZm9yY2VkLCAnQXJyYXknLCB7XG4gIGZpbmQ6IGZ1bmN0aW9uIGZpbmQoY2FsbGJhY2tmbiAvKiAsIHRoYXQgPSB1bmRlZmluZWQgKi8pIHtcbiAgICByZXR1cm4gJGZpbmQodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcbnJlcXVpcmUoJy4vX2FkZC10by11bnNjb3BhYmxlcycpKEtFWSk7XG4iLCIvLyAyMi4xLjIuMiAvIDE1LjQuMy4yIEFycmF5LmlzQXJyYXkoYXJnKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdBcnJheScsIHsgaXNBcnJheTogcmVxdWlyZSgnLi9faXMtYXJyYXknKSB9KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBhZGRUb1Vuc2NvcGFibGVzID0gcmVxdWlyZSgnLi9fYWRkLXRvLXVuc2NvcGFibGVzJyk7XG52YXIgc3RlcCA9IHJlcXVpcmUoJy4vX2l0ZXItc3RlcCcpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcblxuLy8gMjIuMS4zLjQgQXJyYXkucHJvdG90eXBlLmVudHJpZXMoKVxuLy8gMjIuMS4zLjEzIEFycmF5LnByb3RvdHlwZS5rZXlzKClcbi8vIDIyLjEuMy4yOSBBcnJheS5wcm90b3R5cGUudmFsdWVzKClcbi8vIDIyLjEuMy4zMCBBcnJheS5wcm90b3R5cGVbQEBpdGVyYXRvcl0oKVxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19pdGVyLWRlZmluZScpKEFycmF5LCAnQXJyYXknLCBmdW5jdGlvbiAoaXRlcmF0ZWQsIGtpbmQpIHtcbiAgdGhpcy5fdCA9IHRvSU9iamVjdChpdGVyYXRlZCk7IC8vIHRhcmdldFxuICB0aGlzLl9pID0gMDsgICAgICAgICAgICAgICAgICAgLy8gbmV4dCBpbmRleFxuICB0aGlzLl9rID0ga2luZDsgICAgICAgICAgICAgICAgLy8ga2luZFxuLy8gMjIuMS41LjIuMSAlQXJyYXlJdGVyYXRvclByb3RvdHlwZSUubmV4dCgpXG59LCBmdW5jdGlvbiAoKSB7XG4gIHZhciBPID0gdGhpcy5fdDtcbiAgdmFyIGtpbmQgPSB0aGlzLl9rO1xuICB2YXIgaW5kZXggPSB0aGlzLl9pKys7XG4gIGlmICghTyB8fCBpbmRleCA+PSBPLmxlbmd0aCkge1xuICAgIHRoaXMuX3QgPSB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHN0ZXAoMSk7XG4gIH1cbiAgaWYgKGtpbmQgPT0gJ2tleXMnKSByZXR1cm4gc3RlcCgwLCBpbmRleCk7XG4gIGlmIChraW5kID09ICd2YWx1ZXMnKSByZXR1cm4gc3RlcCgwLCBPW2luZGV4XSk7XG4gIHJldHVybiBzdGVwKDAsIFtpbmRleCwgT1tpbmRleF1dKTtcbn0sICd2YWx1ZXMnKTtcblxuLy8gYXJndW1lbnRzTGlzdFtAQGl0ZXJhdG9yXSBpcyAlQXJyYXlQcm90b192YWx1ZXMlICg5LjQuNC42LCA5LjQuNC43KVxuSXRlcmF0b3JzLkFyZ3VtZW50cyA9IEl0ZXJhdG9ycy5BcnJheTtcblxuYWRkVG9VbnNjb3BhYmxlcygna2V5cycpO1xuYWRkVG9VbnNjb3BhYmxlcygndmFsdWVzJyk7XG5hZGRUb1Vuc2NvcGFibGVzKCdlbnRyaWVzJyk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRzb21lID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpKDMpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoW10uc29tZSwgdHJ1ZSksICdBcnJheScsIHtcbiAgLy8gMjIuMS4zLjIzIC8gMTUuNC40LjE3IEFycmF5LnByb3RvdHlwZS5zb21lKGNhbGxiYWNrZm4gWywgdGhpc0FyZ10pXG4gIHNvbWU6IGZ1bmN0aW9uIHNvbWUoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJHNvbWUodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzWzFdKTtcbiAgfVxufSk7XG4iLCIvLyAxOS4yLjMuMiAvIDE1LjMuNC41IEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kKHRoaXNBcmcsIGFyZ3MuLi4pXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCwgJ0Z1bmN0aW9uJywgeyBiaW5kOiByZXF1aXJlKCcuL19iaW5kJykgfSk7XG4iLCIvLyAxOS4xLjMuMSBPYmplY3QuYXNzaWduKHRhcmdldCwgc291cmNlKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYsICdPYmplY3QnLCB7IGFzc2lnbjogcmVxdWlyZSgnLi9fb2JqZWN0LWFzc2lnbicpIH0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gMTkuMS4zLjYgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZygpXG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4vX2NsYXNzb2YnKTtcbnZhciB0ZXN0ID0ge307XG50ZXN0W3JlcXVpcmUoJy4vX3drcycpKCd0b1N0cmluZ1RhZycpXSA9ICd6JztcbmlmICh0ZXN0ICsgJycgIT0gJ1tvYmplY3Qgel0nKSB7XG4gIHJlcXVpcmUoJy4vX3JlZGVmaW5lJykoT2JqZWN0LnByb3RvdHlwZSwgJ3RvU3RyaW5nJywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuICdbb2JqZWN0ICcgKyBjbGFzc29mKHRoaXMpICsgJ10nO1xuICB9LCB0cnVlKTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcbnZhciBMSUJSQVJZID0gcmVxdWlyZSgnLi9fbGlicmFyeScpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuL19jbGFzc29mJyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuL19hbi1pbnN0YW5jZScpO1xudmFyIGZvck9mID0gcmVxdWlyZSgnLi9fZm9yLW9mJyk7XG52YXIgc3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi9fc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xudmFyIHRhc2sgPSByZXF1aXJlKCcuL190YXNrJykuc2V0O1xudmFyIG1pY3JvdGFzayA9IHJlcXVpcmUoJy4vX21pY3JvdGFzaycpKCk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUgPSByZXF1aXJlKCcuL19uZXctcHJvbWlzZS1jYXBhYmlsaXR5Jyk7XG52YXIgcGVyZm9ybSA9IHJlcXVpcmUoJy4vX3BlcmZvcm0nKTtcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuL191c2VyLWFnZW50Jyk7XG52YXIgcHJvbWlzZVJlc29sdmUgPSByZXF1aXJlKCcuL19wcm9taXNlLXJlc29sdmUnKTtcbnZhciBQUk9NSVNFID0gJ1Byb21pc2UnO1xudmFyIFR5cGVFcnJvciA9IGdsb2JhbC5UeXBlRXJyb3I7XG52YXIgcHJvY2VzcyA9IGdsb2JhbC5wcm9jZXNzO1xudmFyIHZlcnNpb25zID0gcHJvY2VzcyAmJiBwcm9jZXNzLnZlcnNpb25zO1xudmFyIHY4ID0gdmVyc2lvbnMgJiYgdmVyc2lvbnMudjggfHwgJyc7XG52YXIgJFByb21pc2UgPSBnbG9iYWxbUFJPTUlTRV07XG52YXIgaXNOb2RlID0gY2xhc3NvZihwcm9jZXNzKSA9PSAncHJvY2Vzcyc7XG52YXIgZW1wdHkgPSBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH07XG52YXIgSW50ZXJuYWwsIG5ld0dlbmVyaWNQcm9taXNlQ2FwYWJpbGl0eSwgT3duUHJvbWlzZUNhcGFiaWxpdHksIFdyYXBwZXI7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdHZW5lcmljUHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZS5mO1xuXG52YXIgVVNFX05BVElWRSA9ICEhZnVuY3Rpb24gKCkge1xuICB0cnkge1xuICAgIC8vIGNvcnJlY3Qgc3ViY2xhc3Npbmcgd2l0aCBAQHNwZWNpZXMgc3VwcG9ydFxuICAgIHZhciBwcm9taXNlID0gJFByb21pc2UucmVzb2x2ZSgxKTtcbiAgICB2YXIgRmFrZVByb21pc2UgPSAocHJvbWlzZS5jb25zdHJ1Y3RvciA9IHt9KVtyZXF1aXJlKCcuL193a3MnKSgnc3BlY2llcycpXSA9IGZ1bmN0aW9uIChleGVjKSB7XG4gICAgICBleGVjKGVtcHR5LCBlbXB0eSk7XG4gICAgfTtcbiAgICAvLyB1bmhhbmRsZWQgcmVqZWN0aW9ucyB0cmFja2luZyBzdXBwb3J0LCBOb2RlSlMgUHJvbWlzZSB3aXRob3V0IGl0IGZhaWxzIEBAc3BlY2llcyB0ZXN0XG4gICAgcmV0dXJuIChpc05vZGUgfHwgdHlwZW9mIFByb21pc2VSZWplY3Rpb25FdmVudCA9PSAnZnVuY3Rpb24nKVxuICAgICAgJiYgcHJvbWlzZS50aGVuKGVtcHR5KSBpbnN0YW5jZW9mIEZha2VQcm9taXNlXG4gICAgICAvLyB2OCA2LjYgKE5vZGUgMTAgYW5kIENocm9tZSA2NikgaGF2ZSBhIGJ1ZyB3aXRoIHJlc29sdmluZyBjdXN0b20gdGhlbmFibGVzXG4gICAgICAvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD04MzA1NjVcbiAgICAgIC8vIHdlIGNhbid0IGRldGVjdCBpdCBzeW5jaHJvbm91c2x5LCBzbyBqdXN0IGNoZWNrIHZlcnNpb25zXG4gICAgICAmJiB2OC5pbmRleE9mKCc2LjYnKSAhPT0gMFxuICAgICAgJiYgdXNlckFnZW50LmluZGV4T2YoJ0Nocm9tZS82NicpID09PSAtMTtcbiAgfSBjYXRjaCAoZSkgeyAvKiBlbXB0eSAqLyB9XG59KCk7XG5cbi8vIGhlbHBlcnNcbnZhciBpc1RoZW5hYmxlID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciB0aGVuO1xuICByZXR1cm4gaXNPYmplY3QoaXQpICYmIHR5cGVvZiAodGhlbiA9IGl0LnRoZW4pID09ICdmdW5jdGlvbicgPyB0aGVuIDogZmFsc2U7XG59O1xudmFyIG5vdGlmeSA9IGZ1bmN0aW9uIChwcm9taXNlLCBpc1JlamVjdCkge1xuICBpZiAocHJvbWlzZS5fbikgcmV0dXJuO1xuICBwcm9taXNlLl9uID0gdHJ1ZTtcbiAgdmFyIGNoYWluID0gcHJvbWlzZS5fYztcbiAgbWljcm90YXNrKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdmFsdWUgPSBwcm9taXNlLl92O1xuICAgIHZhciBvayA9IHByb21pc2UuX3MgPT0gMTtcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIHJ1biA9IGZ1bmN0aW9uIChyZWFjdGlvbikge1xuICAgICAgdmFyIGhhbmRsZXIgPSBvayA/IHJlYWN0aW9uLm9rIDogcmVhY3Rpb24uZmFpbDtcbiAgICAgIHZhciByZXNvbHZlID0gcmVhY3Rpb24ucmVzb2x2ZTtcbiAgICAgIHZhciByZWplY3QgPSByZWFjdGlvbi5yZWplY3Q7XG4gICAgICB2YXIgZG9tYWluID0gcmVhY3Rpb24uZG9tYWluO1xuICAgICAgdmFyIHJlc3VsdCwgdGhlbiwgZXhpdGVkO1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKGhhbmRsZXIpIHtcbiAgICAgICAgICBpZiAoIW9rKSB7XG4gICAgICAgICAgICBpZiAocHJvbWlzZS5faCA9PSAyKSBvbkhhbmRsZVVuaGFuZGxlZChwcm9taXNlKTtcbiAgICAgICAgICAgIHByb21pc2UuX2ggPSAxO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaGFuZGxlciA9PT0gdHJ1ZSkgcmVzdWx0ID0gdmFsdWU7XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoZG9tYWluKSBkb21haW4uZW50ZXIoKTtcbiAgICAgICAgICAgIHJlc3VsdCA9IGhhbmRsZXIodmFsdWUpOyAvLyBtYXkgdGhyb3dcbiAgICAgICAgICAgIGlmIChkb21haW4pIHtcbiAgICAgICAgICAgICAgZG9tYWluLmV4aXQoKTtcbiAgICAgICAgICAgICAgZXhpdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHJlc3VsdCA9PT0gcmVhY3Rpb24ucHJvbWlzZSkge1xuICAgICAgICAgICAgcmVqZWN0KFR5cGVFcnJvcignUHJvbWlzZS1jaGFpbiBjeWNsZScpKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoZW4gPSBpc1RoZW5hYmxlKHJlc3VsdCkpIHtcbiAgICAgICAgICAgIHRoZW4uY2FsbChyZXN1bHQsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgfSBlbHNlIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgfSBlbHNlIHJlamVjdCh2YWx1ZSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlmIChkb21haW4gJiYgIWV4aXRlZCkgZG9tYWluLmV4aXQoKTtcbiAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgfVxuICAgIH07XG4gICAgd2hpbGUgKGNoYWluLmxlbmd0aCA+IGkpIHJ1bihjaGFpbltpKytdKTsgLy8gdmFyaWFibGUgbGVuZ3RoIC0gY2FuJ3QgdXNlIGZvckVhY2hcbiAgICBwcm9taXNlLl9jID0gW107XG4gICAgcHJvbWlzZS5fbiA9IGZhbHNlO1xuICAgIGlmIChpc1JlamVjdCAmJiAhcHJvbWlzZS5faCkgb25VbmhhbmRsZWQocHJvbWlzZSk7XG4gIH0pO1xufTtcbnZhciBvblVuaGFuZGxlZCA9IGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gIHRhc2suY2FsbChnbG9iYWwsIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdmFsdWUgPSBwcm9taXNlLl92O1xuICAgIHZhciB1bmhhbmRsZWQgPSBpc1VuaGFuZGxlZChwcm9taXNlKTtcbiAgICB2YXIgcmVzdWx0LCBoYW5kbGVyLCBjb25zb2xlO1xuICAgIGlmICh1bmhhbmRsZWQpIHtcbiAgICAgIHJlc3VsdCA9IHBlcmZvcm0oZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoaXNOb2RlKSB7XG4gICAgICAgICAgcHJvY2Vzcy5lbWl0KCd1bmhhbmRsZWRSZWplY3Rpb24nLCB2YWx1ZSwgcHJvbWlzZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaGFuZGxlciA9IGdsb2JhbC5vbnVuaGFuZGxlZHJlamVjdGlvbikge1xuICAgICAgICAgIGhhbmRsZXIoeyBwcm9taXNlOiBwcm9taXNlLCByZWFzb246IHZhbHVlIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKChjb25zb2xlID0gZ2xvYmFsLmNvbnNvbGUpICYmIGNvbnNvbGUuZXJyb3IpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdVbmhhbmRsZWQgcHJvbWlzZSByZWplY3Rpb24nLCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgLy8gQnJvd3NlcnMgc2hvdWxkIG5vdCB0cmlnZ2VyIGByZWplY3Rpb25IYW5kbGVkYCBldmVudCBpZiBpdCB3YXMgaGFuZGxlZCBoZXJlLCBOb2RlSlMgLSBzaG91bGRcbiAgICAgIHByb21pc2UuX2ggPSBpc05vZGUgfHwgaXNVbmhhbmRsZWQocHJvbWlzZSkgPyAyIDogMTtcbiAgICB9IHByb21pc2UuX2EgPSB1bmRlZmluZWQ7XG4gICAgaWYgKHVuaGFuZGxlZCAmJiByZXN1bHQuZSkgdGhyb3cgcmVzdWx0LnY7XG4gIH0pO1xufTtcbnZhciBpc1VuaGFuZGxlZCA9IGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gIHJldHVybiBwcm9taXNlLl9oICE9PSAxICYmIChwcm9taXNlLl9hIHx8IHByb21pc2UuX2MpLmxlbmd0aCA9PT0gMDtcbn07XG52YXIgb25IYW5kbGVVbmhhbmRsZWQgPSBmdW5jdGlvbiAocHJvbWlzZSkge1xuICB0YXNrLmNhbGwoZ2xvYmFsLCBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGhhbmRsZXI7XG4gICAgaWYgKGlzTm9kZSkge1xuICAgICAgcHJvY2Vzcy5lbWl0KCdyZWplY3Rpb25IYW5kbGVkJywgcHJvbWlzZSk7XG4gICAgfSBlbHNlIGlmIChoYW5kbGVyID0gZ2xvYmFsLm9ucmVqZWN0aW9uaGFuZGxlZCkge1xuICAgICAgaGFuZGxlcih7IHByb21pc2U6IHByb21pc2UsIHJlYXNvbjogcHJvbWlzZS5fdiB9KTtcbiAgICB9XG4gIH0pO1xufTtcbnZhciAkcmVqZWN0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gIHZhciBwcm9taXNlID0gdGhpcztcbiAgaWYgKHByb21pc2UuX2QpIHJldHVybjtcbiAgcHJvbWlzZS5fZCA9IHRydWU7XG4gIHByb21pc2UgPSBwcm9taXNlLl93IHx8IHByb21pc2U7IC8vIHVud3JhcFxuICBwcm9taXNlLl92ID0gdmFsdWU7XG4gIHByb21pc2UuX3MgPSAyO1xuICBpZiAoIXByb21pc2UuX2EpIHByb21pc2UuX2EgPSBwcm9taXNlLl9jLnNsaWNlKCk7XG4gIG5vdGlmeShwcm9taXNlLCB0cnVlKTtcbn07XG52YXIgJHJlc29sdmUgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgdmFyIHByb21pc2UgPSB0aGlzO1xuICB2YXIgdGhlbjtcbiAgaWYgKHByb21pc2UuX2QpIHJldHVybjtcbiAgcHJvbWlzZS5fZCA9IHRydWU7XG4gIHByb21pc2UgPSBwcm9taXNlLl93IHx8IHByb21pc2U7IC8vIHVud3JhcFxuICB0cnkge1xuICAgIGlmIChwcm9taXNlID09PSB2YWx1ZSkgdGhyb3cgVHlwZUVycm9yKFwiUHJvbWlzZSBjYW4ndCBiZSByZXNvbHZlZCBpdHNlbGZcIik7XG4gICAgaWYgKHRoZW4gPSBpc1RoZW5hYmxlKHZhbHVlKSkge1xuICAgICAgbWljcm90YXNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHdyYXBwZXIgPSB7IF93OiBwcm9taXNlLCBfZDogZmFsc2UgfTsgLy8gd3JhcFxuICAgICAgICB0cnkge1xuICAgICAgICAgIHRoZW4uY2FsbCh2YWx1ZSwgY3R4KCRyZXNvbHZlLCB3cmFwcGVyLCAxKSwgY3R4KCRyZWplY3QsIHdyYXBwZXIsIDEpKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICRyZWplY3QuY2FsbCh3cmFwcGVyLCBlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHByb21pc2UuX3YgPSB2YWx1ZTtcbiAgICAgIHByb21pc2UuX3MgPSAxO1xuICAgICAgbm90aWZ5KHByb21pc2UsIGZhbHNlKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAkcmVqZWN0LmNhbGwoeyBfdzogcHJvbWlzZSwgX2Q6IGZhbHNlIH0sIGUpOyAvLyB3cmFwXG4gIH1cbn07XG5cbi8vIGNvbnN0cnVjdG9yIHBvbHlmaWxsXG5pZiAoIVVTRV9OQVRJVkUpIHtcbiAgLy8gMjUuNC4zLjEgUHJvbWlzZShleGVjdXRvcilcbiAgJFByb21pc2UgPSBmdW5jdGlvbiBQcm9taXNlKGV4ZWN1dG9yKSB7XG4gICAgYW5JbnN0YW5jZSh0aGlzLCAkUHJvbWlzZSwgUFJPTUlTRSwgJ19oJyk7XG4gICAgYUZ1bmN0aW9uKGV4ZWN1dG9yKTtcbiAgICBJbnRlcm5hbC5jYWxsKHRoaXMpO1xuICAgIHRyeSB7XG4gICAgICBleGVjdXRvcihjdHgoJHJlc29sdmUsIHRoaXMsIDEpLCBjdHgoJHJlamVjdCwgdGhpcywgMSkpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgJHJlamVjdC5jYWxsKHRoaXMsIGVycik7XG4gICAgfVxuICB9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgSW50ZXJuYWwgPSBmdW5jdGlvbiBQcm9taXNlKGV4ZWN1dG9yKSB7XG4gICAgdGhpcy5fYyA9IFtdOyAgICAgICAgICAgICAvLyA8LSBhd2FpdGluZyByZWFjdGlvbnNcbiAgICB0aGlzLl9hID0gdW5kZWZpbmVkOyAgICAgIC8vIDwtIGNoZWNrZWQgaW4gaXNVbmhhbmRsZWQgcmVhY3Rpb25zXG4gICAgdGhpcy5fcyA9IDA7ICAgICAgICAgICAgICAvLyA8LSBzdGF0ZVxuICAgIHRoaXMuX2QgPSBmYWxzZTsgICAgICAgICAgLy8gPC0gZG9uZVxuICAgIHRoaXMuX3YgPSB1bmRlZmluZWQ7ICAgICAgLy8gPC0gdmFsdWVcbiAgICB0aGlzLl9oID0gMDsgICAgICAgICAgICAgIC8vIDwtIHJlamVjdGlvbiBzdGF0ZSwgMCAtIGRlZmF1bHQsIDEgLSBoYW5kbGVkLCAyIC0gdW5oYW5kbGVkXG4gICAgdGhpcy5fbiA9IGZhbHNlOyAgICAgICAgICAvLyA8LSBub3RpZnlcbiAgfTtcbiAgSW50ZXJuYWwucHJvdG90eXBlID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUtYWxsJykoJFByb21pc2UucHJvdG90eXBlLCB7XG4gICAgLy8gMjUuNC41LjMgUHJvbWlzZS5wcm90b3R5cGUudGhlbihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZClcbiAgICB0aGVuOiBmdW5jdGlvbiB0aGVuKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKSB7XG4gICAgICB2YXIgcmVhY3Rpb24gPSBuZXdQcm9taXNlQ2FwYWJpbGl0eShzcGVjaWVzQ29uc3RydWN0b3IodGhpcywgJFByb21pc2UpKTtcbiAgICAgIHJlYWN0aW9uLm9rID0gdHlwZW9mIG9uRnVsZmlsbGVkID09ICdmdW5jdGlvbicgPyBvbkZ1bGZpbGxlZCA6IHRydWU7XG4gICAgICByZWFjdGlvbi5mYWlsID0gdHlwZW9mIG9uUmVqZWN0ZWQgPT0gJ2Z1bmN0aW9uJyAmJiBvblJlamVjdGVkO1xuICAgICAgcmVhY3Rpb24uZG9tYWluID0gaXNOb2RlID8gcHJvY2Vzcy5kb21haW4gOiB1bmRlZmluZWQ7XG4gICAgICB0aGlzLl9jLnB1c2gocmVhY3Rpb24pO1xuICAgICAgaWYgKHRoaXMuX2EpIHRoaXMuX2EucHVzaChyZWFjdGlvbik7XG4gICAgICBpZiAodGhpcy5fcykgbm90aWZ5KHRoaXMsIGZhbHNlKTtcbiAgICAgIHJldHVybiByZWFjdGlvbi5wcm9taXNlO1xuICAgIH0sXG4gICAgLy8gMjUuNC41LjEgUHJvbWlzZS5wcm90b3R5cGUuY2F0Y2gob25SZWplY3RlZClcbiAgICAnY2F0Y2gnOiBmdW5jdGlvbiAob25SZWplY3RlZCkge1xuICAgICAgcmV0dXJuIHRoaXMudGhlbih1bmRlZmluZWQsIG9uUmVqZWN0ZWQpO1xuICAgIH1cbiAgfSk7XG4gIE93blByb21pc2VDYXBhYmlsaXR5ID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBwcm9taXNlID0gbmV3IEludGVybmFsKCk7XG4gICAgdGhpcy5wcm9taXNlID0gcHJvbWlzZTtcbiAgICB0aGlzLnJlc29sdmUgPSBjdHgoJHJlc29sdmUsIHByb21pc2UsIDEpO1xuICAgIHRoaXMucmVqZWN0ID0gY3R4KCRyZWplY3QsIHByb21pc2UsIDEpO1xuICB9O1xuICBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZS5mID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkgPSBmdW5jdGlvbiAoQykge1xuICAgIHJldHVybiBDID09PSAkUHJvbWlzZSB8fCBDID09PSBXcmFwcGVyXG4gICAgICA/IG5ldyBPd25Qcm9taXNlQ2FwYWJpbGl0eShDKVxuICAgICAgOiBuZXdHZW5lcmljUHJvbWlzZUNhcGFiaWxpdHkoQyk7XG4gIH07XG59XG5cbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5XICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsIHsgUHJvbWlzZTogJFByb21pc2UgfSk7XG5yZXF1aXJlKCcuL19zZXQtdG8tc3RyaW5nLXRhZycpKCRQcm9taXNlLCBQUk9NSVNFKTtcbnJlcXVpcmUoJy4vX3NldC1zcGVjaWVzJykoUFJPTUlTRSk7XG5XcmFwcGVyID0gcmVxdWlyZSgnLi9fY29yZScpW1BST01JU0VdO1xuXG4vLyBzdGF0aWNzXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFVU0VfTkFUSVZFLCBQUk9NSVNFLCB7XG4gIC8vIDI1LjQuNC41IFByb21pc2UucmVqZWN0KHIpXG4gIHJlamVjdDogZnVuY3Rpb24gcmVqZWN0KHIpIHtcbiAgICB2YXIgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5KHRoaXMpO1xuICAgIHZhciAkJHJlamVjdCA9IGNhcGFiaWxpdHkucmVqZWN0O1xuICAgICQkcmVqZWN0KHIpO1xuICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cbn0pO1xuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAoTElCUkFSWSB8fCAhVVNFX05BVElWRSksIFBST01JU0UsIHtcbiAgLy8gMjUuNC40LjYgUHJvbWlzZS5yZXNvbHZlKHgpXG4gIHJlc29sdmU6IGZ1bmN0aW9uIHJlc29sdmUoeCkge1xuICAgIHJldHVybiBwcm9taXNlUmVzb2x2ZShMSUJSQVJZICYmIHRoaXMgPT09IFdyYXBwZXIgPyAkUHJvbWlzZSA6IHRoaXMsIHgpO1xuICB9XG59KTtcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIShVU0VfTkFUSVZFICYmIHJlcXVpcmUoJy4vX2l0ZXItZGV0ZWN0JykoZnVuY3Rpb24gKGl0ZXIpIHtcbiAgJFByb21pc2UuYWxsKGl0ZXIpWydjYXRjaCddKGVtcHR5KTtcbn0pKSwgUFJPTUlTRSwge1xuICAvLyAyNS40LjQuMSBQcm9taXNlLmFsbChpdGVyYWJsZSlcbiAgYWxsOiBmdW5jdGlvbiBhbGwoaXRlcmFibGUpIHtcbiAgICB2YXIgQyA9IHRoaXM7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eShDKTtcbiAgICB2YXIgcmVzb2x2ZSA9IGNhcGFiaWxpdHkucmVzb2x2ZTtcbiAgICB2YXIgcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgdmFyIHJlc3VsdCA9IHBlcmZvcm0oZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHZhbHVlcyA9IFtdO1xuICAgICAgdmFyIGluZGV4ID0gMDtcbiAgICAgIHZhciByZW1haW5pbmcgPSAxO1xuICAgICAgZm9yT2YoaXRlcmFibGUsIGZhbHNlLCBmdW5jdGlvbiAocHJvbWlzZSkge1xuICAgICAgICB2YXIgJGluZGV4ID0gaW5kZXgrKztcbiAgICAgICAgdmFyIGFscmVhZHlDYWxsZWQgPSBmYWxzZTtcbiAgICAgICAgdmFsdWVzLnB1c2godW5kZWZpbmVkKTtcbiAgICAgICAgcmVtYWluaW5nKys7XG4gICAgICAgIEMucmVzb2x2ZShwcm9taXNlKS50aGVuKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgIGlmIChhbHJlYWR5Q2FsbGVkKSByZXR1cm47XG4gICAgICAgICAgYWxyZWFkeUNhbGxlZCA9IHRydWU7XG4gICAgICAgICAgdmFsdWVzWyRpbmRleF0gPSB2YWx1ZTtcbiAgICAgICAgICAtLXJlbWFpbmluZyB8fCByZXNvbHZlKHZhbHVlcyk7XG4gICAgICAgIH0sIHJlamVjdCk7XG4gICAgICB9KTtcbiAgICAgIC0tcmVtYWluaW5nIHx8IHJlc29sdmUodmFsdWVzKTtcbiAgICB9KTtcbiAgICBpZiAocmVzdWx0LmUpIHJlamVjdChyZXN1bHQudik7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfSxcbiAgLy8gMjUuNC40LjQgUHJvbWlzZS5yYWNlKGl0ZXJhYmxlKVxuICByYWNlOiBmdW5jdGlvbiByYWNlKGl0ZXJhYmxlKSB7XG4gICAgdmFyIEMgPSB0aGlzO1xuICAgIHZhciBjYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkoQyk7XG4gICAgdmFyIHJlamVjdCA9IGNhcGFiaWxpdHkucmVqZWN0O1xuICAgIHZhciByZXN1bHQgPSBwZXJmb3JtKGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvck9mKGl0ZXJhYmxlLCBmYWxzZSwgZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgICAgICAgQy5yZXNvbHZlKHByb21pc2UpLnRoZW4oY2FwYWJpbGl0eS5yZXNvbHZlLCByZWplY3QpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgaWYgKHJlc3VsdC5lKSByZWplY3QocmVzdWx0LnYpO1xuICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRhdCA9IHJlcXVpcmUoJy4vX3N0cmluZy1hdCcpKHRydWUpO1xuXG4vLyAyMS4xLjMuMjcgU3RyaW5nLnByb3RvdHlwZVtAQGl0ZXJhdG9yXSgpXG5yZXF1aXJlKCcuL19pdGVyLWRlZmluZScpKFN0cmluZywgJ1N0cmluZycsIGZ1bmN0aW9uIChpdGVyYXRlZCkge1xuICB0aGlzLl90ID0gU3RyaW5nKGl0ZXJhdGVkKTsgLy8gdGFyZ2V0XG4gIHRoaXMuX2kgPSAwOyAgICAgICAgICAgICAgICAvLyBuZXh0IGluZGV4XG4vLyAyMS4xLjUuMi4xICVTdHJpbmdJdGVyYXRvclByb3RvdHlwZSUubmV4dCgpXG59LCBmdW5jdGlvbiAoKSB7XG4gIHZhciBPID0gdGhpcy5fdDtcbiAgdmFyIGluZGV4ID0gdGhpcy5faTtcbiAgdmFyIHBvaW50O1xuICBpZiAoaW5kZXggPj0gTy5sZW5ndGgpIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfTtcbiAgcG9pbnQgPSAkYXQoTywgaW5kZXgpO1xuICB0aGlzLl9pICs9IHBvaW50Lmxlbmd0aDtcbiAgcmV0dXJuIHsgdmFsdWU6IHBvaW50LCBkb25lOiBmYWxzZSB9O1xufSk7XG4iLCJ2YXIgJGl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vZXM2LmFycmF5Lml0ZXJhdG9yJyk7XG52YXIgZ2V0S2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJyk7XG52YXIgd2tzID0gcmVxdWlyZSgnLi9fd2tzJyk7XG52YXIgSVRFUkFUT1IgPSB3a3MoJ2l0ZXJhdG9yJyk7XG52YXIgVE9fU1RSSU5HX1RBRyA9IHdrcygndG9TdHJpbmdUYWcnKTtcbnZhciBBcnJheVZhbHVlcyA9IEl0ZXJhdG9ycy5BcnJheTtcblxudmFyIERPTUl0ZXJhYmxlcyA9IHtcbiAgQ1NTUnVsZUxpc3Q6IHRydWUsIC8vIFRPRE86IE5vdCBzcGVjIGNvbXBsaWFudCwgc2hvdWxkIGJlIGZhbHNlLlxuICBDU1NTdHlsZURlY2xhcmF0aW9uOiBmYWxzZSxcbiAgQ1NTVmFsdWVMaXN0OiBmYWxzZSxcbiAgQ2xpZW50UmVjdExpc3Q6IGZhbHNlLFxuICBET01SZWN0TGlzdDogZmFsc2UsXG4gIERPTVN0cmluZ0xpc3Q6IGZhbHNlLFxuICBET01Ub2tlbkxpc3Q6IHRydWUsXG4gIERhdGFUcmFuc2Zlckl0ZW1MaXN0OiBmYWxzZSxcbiAgRmlsZUxpc3Q6IGZhbHNlLFxuICBIVE1MQWxsQ29sbGVjdGlvbjogZmFsc2UsXG4gIEhUTUxDb2xsZWN0aW9uOiBmYWxzZSxcbiAgSFRNTEZvcm1FbGVtZW50OiBmYWxzZSxcbiAgSFRNTFNlbGVjdEVsZW1lbnQ6IGZhbHNlLFxuICBNZWRpYUxpc3Q6IHRydWUsIC8vIFRPRE86IE5vdCBzcGVjIGNvbXBsaWFudCwgc2hvdWxkIGJlIGZhbHNlLlxuICBNaW1lVHlwZUFycmF5OiBmYWxzZSxcbiAgTmFtZWROb2RlTWFwOiBmYWxzZSxcbiAgTm9kZUxpc3Q6IHRydWUsXG4gIFBhaW50UmVxdWVzdExpc3Q6IGZhbHNlLFxuICBQbHVnaW46IGZhbHNlLFxuICBQbHVnaW5BcnJheTogZmFsc2UsXG4gIFNWR0xlbmd0aExpc3Q6IGZhbHNlLFxuICBTVkdOdW1iZXJMaXN0OiBmYWxzZSxcbiAgU1ZHUGF0aFNlZ0xpc3Q6IGZhbHNlLFxuICBTVkdQb2ludExpc3Q6IGZhbHNlLFxuICBTVkdTdHJpbmdMaXN0OiBmYWxzZSxcbiAgU1ZHVHJhbnNmb3JtTGlzdDogZmFsc2UsXG4gIFNvdXJjZUJ1ZmZlckxpc3Q6IGZhbHNlLFxuICBTdHlsZVNoZWV0TGlzdDogdHJ1ZSwgLy8gVE9ETzogTm90IHNwZWMgY29tcGxpYW50LCBzaG91bGQgYmUgZmFsc2UuXG4gIFRleHRUcmFja0N1ZUxpc3Q6IGZhbHNlLFxuICBUZXh0VHJhY2tMaXN0OiBmYWxzZSxcbiAgVG91Y2hMaXN0OiBmYWxzZVxufTtcblxuZm9yICh2YXIgY29sbGVjdGlvbnMgPSBnZXRLZXlzKERPTUl0ZXJhYmxlcyksIGkgPSAwOyBpIDwgY29sbGVjdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgdmFyIE5BTUUgPSBjb2xsZWN0aW9uc1tpXTtcbiAgdmFyIGV4cGxpY2l0ID0gRE9NSXRlcmFibGVzW05BTUVdO1xuICB2YXIgQ29sbGVjdGlvbiA9IGdsb2JhbFtOQU1FXTtcbiAgdmFyIHByb3RvID0gQ29sbGVjdGlvbiAmJiBDb2xsZWN0aW9uLnByb3RvdHlwZTtcbiAgdmFyIGtleTtcbiAgaWYgKHByb3RvKSB7XG4gICAgaWYgKCFwcm90b1tJVEVSQVRPUl0pIGhpZGUocHJvdG8sIElURVJBVE9SLCBBcnJheVZhbHVlcyk7XG4gICAgaWYgKCFwcm90b1tUT19TVFJJTkdfVEFHXSkgaGlkZShwcm90bywgVE9fU1RSSU5HX1RBRywgTkFNRSk7XG4gICAgSXRlcmF0b3JzW05BTUVdID0gQXJyYXlWYWx1ZXM7XG4gICAgaWYgKGV4cGxpY2l0KSBmb3IgKGtleSBpbiAkaXRlcmF0b3JzKSBpZiAoIXByb3RvW2tleV0pIHJlZGVmaW5lKHByb3RvLCBrZXksICRpdGVyYXRvcnNba2V5XSwgdHJ1ZSk7XG4gIH1cbn1cbiIsIjsoZnVuY3Rpb24gKHJvb3QsIGZhY3RvcnkpIHtcblx0aWYgKHR5cGVvZiBleHBvcnRzID09PSBcIm9iamVjdFwiKSB7XG5cdFx0Ly8gQ29tbW9uSlNcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMgPSBmYWN0b3J5KCk7XG5cdH1cblx0ZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcblx0XHQvLyBBTURcblx0XHRkZWZpbmUoW10sIGZhY3RvcnkpO1xuXHR9XG5cdGVsc2Uge1xuXHRcdC8vIEdsb2JhbCAoYnJvd3Nlcilcblx0XHRyb290LkNyeXB0b0pTID0gZmFjdG9yeSgpO1xuXHR9XG59KHRoaXMsIGZ1bmN0aW9uICgpIHtcblxuXHQvKipcblx0ICogQ3J5cHRvSlMgY29yZSBjb21wb25lbnRzLlxuXHQgKi9cblx0dmFyIENyeXB0b0pTID0gQ3J5cHRvSlMgfHwgKGZ1bmN0aW9uIChNYXRoLCB1bmRlZmluZWQpIHtcblx0ICAgIC8qXG5cdCAgICAgKiBMb2NhbCBwb2x5ZmlsIG9mIE9iamVjdC5jcmVhdGVcblx0ICAgICAqL1xuXHQgICAgdmFyIGNyZWF0ZSA9IE9iamVjdC5jcmVhdGUgfHwgKGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICBmdW5jdGlvbiBGKCkge307XG5cblx0ICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG9iaikge1xuXHQgICAgICAgICAgICB2YXIgc3VidHlwZTtcblxuXHQgICAgICAgICAgICBGLnByb3RvdHlwZSA9IG9iajtcblxuXHQgICAgICAgICAgICBzdWJ0eXBlID0gbmV3IEYoKTtcblxuXHQgICAgICAgICAgICBGLnByb3RvdHlwZSA9IG51bGw7XG5cblx0ICAgICAgICAgICAgcmV0dXJuIHN1YnR5cGU7XG5cdCAgICAgICAgfTtcblx0ICAgIH0oKSlcblxuXHQgICAgLyoqXG5cdCAgICAgKiBDcnlwdG9KUyBuYW1lc3BhY2UuXG5cdCAgICAgKi9cblx0ICAgIHZhciBDID0ge307XG5cblx0ICAgIC8qKlxuXHQgICAgICogTGlicmFyeSBuYW1lc3BhY2UuXG5cdCAgICAgKi9cblx0ICAgIHZhciBDX2xpYiA9IEMubGliID0ge307XG5cblx0ICAgIC8qKlxuXHQgICAgICogQmFzZSBvYmplY3QgZm9yIHByb3RvdHlwYWwgaW5oZXJpdGFuY2UuXG5cdCAgICAgKi9cblx0ICAgIHZhciBCYXNlID0gQ19saWIuQmFzZSA9IChmdW5jdGlvbiAoKSB7XG5cblxuXHQgICAgICAgIHJldHVybiB7XG5cdCAgICAgICAgICAgIC8qKlxuXHQgICAgICAgICAgICAgKiBDcmVhdGVzIGEgbmV3IG9iamVjdCB0aGF0IGluaGVyaXRzIGZyb20gdGhpcyBvYmplY3QuXG5cdCAgICAgICAgICAgICAqXG5cdCAgICAgICAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvdmVycmlkZXMgUHJvcGVydGllcyB0byBjb3B5IGludG8gdGhlIG5ldyBvYmplY3QuXG5cdCAgICAgICAgICAgICAqXG5cdCAgICAgICAgICAgICAqIEByZXR1cm4ge09iamVjdH0gVGhlIG5ldyBvYmplY3QuXG5cdCAgICAgICAgICAgICAqXG5cdCAgICAgICAgICAgICAqIEBzdGF0aWNcblx0ICAgICAgICAgICAgICpcblx0ICAgICAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgICAgICpcblx0ICAgICAgICAgICAgICogICAgIHZhciBNeVR5cGUgPSBDcnlwdG9KUy5saWIuQmFzZS5leHRlbmQoe1xuXHQgICAgICAgICAgICAgKiAgICAgICAgIGZpZWxkOiAndmFsdWUnLFxuXHQgICAgICAgICAgICAgKlxuXHQgICAgICAgICAgICAgKiAgICAgICAgIG1ldGhvZDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAgKiAgICAgICAgIH1cblx0ICAgICAgICAgICAgICogICAgIH0pO1xuXHQgICAgICAgICAgICAgKi9cblx0ICAgICAgICAgICAgZXh0ZW5kOiBmdW5jdGlvbiAob3ZlcnJpZGVzKSB7XG5cdCAgICAgICAgICAgICAgICAvLyBTcGF3blxuXHQgICAgICAgICAgICAgICAgdmFyIHN1YnR5cGUgPSBjcmVhdGUodGhpcyk7XG5cblx0ICAgICAgICAgICAgICAgIC8vIEF1Z21lbnRcblx0ICAgICAgICAgICAgICAgIGlmIChvdmVycmlkZXMpIHtcblx0ICAgICAgICAgICAgICAgICAgICBzdWJ0eXBlLm1peEluKG92ZXJyaWRlcyk7XG5cdCAgICAgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgICAgIC8vIENyZWF0ZSBkZWZhdWx0IGluaXRpYWxpemVyXG5cdCAgICAgICAgICAgICAgICBpZiAoIXN1YnR5cGUuaGFzT3duUHJvcGVydHkoJ2luaXQnKSB8fCB0aGlzLmluaXQgPT09IHN1YnR5cGUuaW5pdCkge1xuXHQgICAgICAgICAgICAgICAgICAgIHN1YnR5cGUuaW5pdCA9IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgICAgICAgICAgICAgc3VidHlwZS4kc3VwZXIuaW5pdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXHQgICAgICAgICAgICAgICAgICAgIH07XG5cdCAgICAgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgICAgIC8vIEluaXRpYWxpemVyJ3MgcHJvdG90eXBlIGlzIHRoZSBzdWJ0eXBlIG9iamVjdFxuXHQgICAgICAgICAgICAgICAgc3VidHlwZS5pbml0LnByb3RvdHlwZSA9IHN1YnR5cGU7XG5cblx0ICAgICAgICAgICAgICAgIC8vIFJlZmVyZW5jZSBzdXBlcnR5cGVcblx0ICAgICAgICAgICAgICAgIHN1YnR5cGUuJHN1cGVyID0gdGhpcztcblxuXHQgICAgICAgICAgICAgICAgcmV0dXJuIHN1YnR5cGU7XG5cdCAgICAgICAgICAgIH0sXG5cblx0ICAgICAgICAgICAgLyoqXG5cdCAgICAgICAgICAgICAqIEV4dGVuZHMgdGhpcyBvYmplY3QgYW5kIHJ1bnMgdGhlIGluaXQgbWV0aG9kLlxuXHQgICAgICAgICAgICAgKiBBcmd1bWVudHMgdG8gY3JlYXRlKCkgd2lsbCBiZSBwYXNzZWQgdG8gaW5pdCgpLlxuXHQgICAgICAgICAgICAgKlxuXHQgICAgICAgICAgICAgKiBAcmV0dXJuIHtPYmplY3R9IFRoZSBuZXcgb2JqZWN0LlxuXHQgICAgICAgICAgICAgKlxuXHQgICAgICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICAgICAqXG5cdCAgICAgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICAgICAqXG5cdCAgICAgICAgICAgICAqICAgICB2YXIgaW5zdGFuY2UgPSBNeVR5cGUuY3JlYXRlKCk7XG5cdCAgICAgICAgICAgICAqL1xuXHQgICAgICAgICAgICBjcmVhdGU6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgICAgIHZhciBpbnN0YW5jZSA9IHRoaXMuZXh0ZW5kKCk7XG5cdCAgICAgICAgICAgICAgICBpbnN0YW5jZS5pbml0LmFwcGx5KGluc3RhbmNlLCBhcmd1bWVudHMpO1xuXG5cdCAgICAgICAgICAgICAgICByZXR1cm4gaW5zdGFuY2U7XG5cdCAgICAgICAgICAgIH0sXG5cblx0ICAgICAgICAgICAgLyoqXG5cdCAgICAgICAgICAgICAqIEluaXRpYWxpemVzIGEgbmV3bHkgY3JlYXRlZCBvYmplY3QuXG5cdCAgICAgICAgICAgICAqIE92ZXJyaWRlIHRoaXMgbWV0aG9kIHRvIGFkZCBzb21lIGxvZ2ljIHdoZW4geW91ciBvYmplY3RzIGFyZSBjcmVhdGVkLlxuXHQgICAgICAgICAgICAgKlxuXHQgICAgICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAgICAgKlxuXHQgICAgICAgICAgICAgKiAgICAgdmFyIE15VHlwZSA9IENyeXB0b0pTLmxpYi5CYXNlLmV4dGVuZCh7XG5cdCAgICAgICAgICAgICAqICAgICAgICAgaW5pdDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAgKiAgICAgICAgICAgICAvLyAuLi5cblx0ICAgICAgICAgICAgICogICAgICAgICB9XG5cdCAgICAgICAgICAgICAqICAgICB9KTtcblx0ICAgICAgICAgICAgICovXG5cdCAgICAgICAgICAgIGluaXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgfSxcblxuXHQgICAgICAgICAgICAvKipcblx0ICAgICAgICAgICAgICogQ29waWVzIHByb3BlcnRpZXMgaW50byB0aGlzIG9iamVjdC5cblx0ICAgICAgICAgICAgICpcblx0ICAgICAgICAgICAgICogQHBhcmFtIHtPYmplY3R9IHByb3BlcnRpZXMgVGhlIHByb3BlcnRpZXMgdG8gbWl4IGluLlxuXHQgICAgICAgICAgICAgKlxuXHQgICAgICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAgICAgKlxuXHQgICAgICAgICAgICAgKiAgICAgTXlUeXBlLm1peEluKHtcblx0ICAgICAgICAgICAgICogICAgICAgICBmaWVsZDogJ3ZhbHVlJ1xuXHQgICAgICAgICAgICAgKiAgICAgfSk7XG5cdCAgICAgICAgICAgICAqL1xuXHQgICAgICAgICAgICBtaXhJbjogZnVuY3Rpb24gKHByb3BlcnRpZXMpIHtcblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIHByb3BlcnR5TmFtZSBpbiBwcm9wZXJ0aWVzKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnRpZXMuaGFzT3duUHJvcGVydHkocHJvcGVydHlOYW1lKSkge1xuXHQgICAgICAgICAgICAgICAgICAgICAgICB0aGlzW3Byb3BlcnR5TmFtZV0gPSBwcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV07XG5cdCAgICAgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgICAgICAvLyBJRSB3b24ndCBjb3B5IHRvU3RyaW5nIHVzaW5nIHRoZSBsb29wIGFib3ZlXG5cdCAgICAgICAgICAgICAgICBpZiAocHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eSgndG9TdHJpbmcnKSkge1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMudG9TdHJpbmcgPSBwcm9wZXJ0aWVzLnRvU3RyaW5nO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9LFxuXG5cdCAgICAgICAgICAgIC8qKlxuXHQgICAgICAgICAgICAgKiBDcmVhdGVzIGEgY29weSBvZiB0aGlzIG9iamVjdC5cblx0ICAgICAgICAgICAgICpcblx0ICAgICAgICAgICAgICogQHJldHVybiB7T2JqZWN0fSBUaGUgY2xvbmUuXG5cdCAgICAgICAgICAgICAqXG5cdCAgICAgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICAgICAqXG5cdCAgICAgICAgICAgICAqICAgICB2YXIgY2xvbmUgPSBpbnN0YW5jZS5jbG9uZSgpO1xuXHQgICAgICAgICAgICAgKi9cblx0ICAgICAgICAgICAgY2xvbmU6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmluaXQucHJvdG90eXBlLmV4dGVuZCh0aGlzKTtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH07XG5cdCAgICB9KCkpO1xuXG5cdCAgICAvKipcblx0ICAgICAqIEFuIGFycmF5IG9mIDMyLWJpdCB3b3Jkcy5cblx0ICAgICAqXG5cdCAgICAgKiBAcHJvcGVydHkge0FycmF5fSB3b3JkcyBUaGUgYXJyYXkgb2YgMzItYml0IHdvcmRzLlxuXHQgICAgICogQHByb3BlcnR5IHtudW1iZXJ9IHNpZ0J5dGVzIFRoZSBudW1iZXIgb2Ygc2lnbmlmaWNhbnQgYnl0ZXMgaW4gdGhpcyB3b3JkIGFycmF5LlxuXHQgICAgICovXG5cdCAgICB2YXIgV29yZEFycmF5ID0gQ19saWIuV29yZEFycmF5ID0gQmFzZS5leHRlbmQoe1xuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIEluaXRpYWxpemVzIGEgbmV3bHkgY3JlYXRlZCB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtBcnJheX0gd29yZHMgKE9wdGlvbmFsKSBBbiBhcnJheSBvZiAzMi1iaXQgd29yZHMuXG5cdCAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IHNpZ0J5dGVzIChPcHRpb25hbCkgVGhlIG51bWJlciBvZiBzaWduaWZpY2FudCBieXRlcyBpbiB0aGUgd29yZHMuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciB3b3JkQXJyYXkgPSBDcnlwdG9KUy5saWIuV29yZEFycmF5LmNyZWF0ZSgpO1xuXHQgICAgICAgICAqICAgICB2YXIgd29yZEFycmF5ID0gQ3J5cHRvSlMubGliLldvcmRBcnJheS5jcmVhdGUoWzB4MDAwMTAyMDMsIDB4MDQwNTA2MDddKTtcblx0ICAgICAgICAgKiAgICAgdmFyIHdvcmRBcnJheSA9IENyeXB0b0pTLmxpYi5Xb3JkQXJyYXkuY3JlYXRlKFsweDAwMDEwMjAzLCAweDA0MDUwNjA3XSwgNik7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgaW5pdDogZnVuY3Rpb24gKHdvcmRzLCBzaWdCeXRlcykge1xuXHQgICAgICAgICAgICB3b3JkcyA9IHRoaXMud29yZHMgPSB3b3JkcyB8fCBbXTtcblxuXHQgICAgICAgICAgICBpZiAoc2lnQnl0ZXMgIT0gdW5kZWZpbmVkKSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLnNpZ0J5dGVzID0gc2lnQnl0ZXM7XG5cdCAgICAgICAgICAgIH0gZWxzZSB7XG5cdCAgICAgICAgICAgICAgICB0aGlzLnNpZ0J5dGVzID0gd29yZHMubGVuZ3RoICogNDtcblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDb252ZXJ0cyB0aGlzIHdvcmQgYXJyYXkgdG8gYSBzdHJpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge0VuY29kZXJ9IGVuY29kZXIgKE9wdGlvbmFsKSBUaGUgZW5jb2Rpbmcgc3RyYXRlZ3kgdG8gdXNlLiBEZWZhdWx0OiBDcnlwdG9KUy5lbmMuSGV4XG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBzdHJpbmdpZmllZCB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgc3RyaW5nID0gd29yZEFycmF5ICsgJyc7XG5cdCAgICAgICAgICogICAgIHZhciBzdHJpbmcgPSB3b3JkQXJyYXkudG9TdHJpbmcoKTtcblx0ICAgICAgICAgKiAgICAgdmFyIHN0cmluZyA9IHdvcmRBcnJheS50b1N0cmluZyhDcnlwdG9KUy5lbmMuVXRmOCk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgdG9TdHJpbmc6IGZ1bmN0aW9uIChlbmNvZGVyKSB7XG5cdCAgICAgICAgICAgIHJldHVybiAoZW5jb2RlciB8fCBIZXgpLnN0cmluZ2lmeSh0aGlzKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29uY2F0ZW5hdGVzIGEgd29yZCBhcnJheSB0byB0aGlzIHdvcmQgYXJyYXkuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge1dvcmRBcnJheX0gd29yZEFycmF5IFRoZSB3b3JkIGFycmF5IHRvIGFwcGVuZC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhpcyB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB3b3JkQXJyYXkxLmNvbmNhdCh3b3JkQXJyYXkyKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBjb25jYXQ6IGZ1bmN0aW9uICh3b3JkQXJyYXkpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciB0aGlzV29yZHMgPSB0aGlzLndvcmRzO1xuXHQgICAgICAgICAgICB2YXIgdGhhdFdvcmRzID0gd29yZEFycmF5LndvcmRzO1xuXHQgICAgICAgICAgICB2YXIgdGhpc1NpZ0J5dGVzID0gdGhpcy5zaWdCeXRlcztcblx0ICAgICAgICAgICAgdmFyIHRoYXRTaWdCeXRlcyA9IHdvcmRBcnJheS5zaWdCeXRlcztcblxuXHQgICAgICAgICAgICAvLyBDbGFtcCBleGNlc3MgYml0c1xuXHQgICAgICAgICAgICB0aGlzLmNsYW1wKCk7XG5cblx0ICAgICAgICAgICAgLy8gQ29uY2F0XG5cdCAgICAgICAgICAgIGlmICh0aGlzU2lnQnl0ZXMgJSA0KSB7XG5cdCAgICAgICAgICAgICAgICAvLyBDb3B5IG9uZSBieXRlIGF0IGEgdGltZVxuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGF0U2lnQnl0ZXM7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciB0aGF0Qnl0ZSA9ICh0aGF0V29yZHNbaSA+Pj4gMl0gPj4+ICgyNCAtIChpICUgNCkgKiA4KSkgJiAweGZmO1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXNXb3Jkc1sodGhpc1NpZ0J5dGVzICsgaSkgPj4+IDJdIHw9IHRoYXRCeXRlIDw8ICgyNCAtICgodGhpc1NpZ0J5dGVzICsgaSkgJSA0KSAqIDgpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgLy8gQ29weSBvbmUgd29yZCBhdCBhIHRpbWVcblx0ICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhhdFNpZ0J5dGVzOyBpICs9IDQpIHtcblx0ICAgICAgICAgICAgICAgICAgICB0aGlzV29yZHNbKHRoaXNTaWdCeXRlcyArIGkpID4+PiAyXSA9IHRoYXRXb3Jkc1tpID4+PiAyXTtcblx0ICAgICAgICAgICAgICAgIH1cblx0ICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICB0aGlzLnNpZ0J5dGVzICs9IHRoYXRTaWdCeXRlcztcblxuXHQgICAgICAgICAgICAvLyBDaGFpbmFibGVcblx0ICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIFJlbW92ZXMgaW5zaWduaWZpY2FudCBiaXRzLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB3b3JkQXJyYXkuY2xhbXAoKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBjbGFtcDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgdmFyIHdvcmRzID0gdGhpcy53b3Jkcztcblx0ICAgICAgICAgICAgdmFyIHNpZ0J5dGVzID0gdGhpcy5zaWdCeXRlcztcblxuXHQgICAgICAgICAgICAvLyBDbGFtcFxuXHQgICAgICAgICAgICB3b3Jkc1tzaWdCeXRlcyA+Pj4gMl0gJj0gMHhmZmZmZmZmZiA8PCAoMzIgLSAoc2lnQnl0ZXMgJSA0KSAqIDgpO1xuXHQgICAgICAgICAgICB3b3Jkcy5sZW5ndGggPSBNYXRoLmNlaWwoc2lnQnl0ZXMgLyA0KTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ3JlYXRlcyBhIGNvcHkgb2YgdGhpcyB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7V29yZEFycmF5fSBUaGUgY2xvbmUuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBjbG9uZSA9IHdvcmRBcnJheS5jbG9uZSgpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIGNsb25lOiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgIHZhciBjbG9uZSA9IEJhc2UuY2xvbmUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAgICAgY2xvbmUud29yZHMgPSB0aGlzLndvcmRzLnNsaWNlKDApO1xuXG5cdCAgICAgICAgICAgIHJldHVybiBjbG9uZTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ3JlYXRlcyBhIHdvcmQgYXJyYXkgZmlsbGVkIHdpdGggcmFuZG9tIGJ5dGVzLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtudW1iZXJ9IG5CeXRlcyBUaGUgbnVtYmVyIG9mIHJhbmRvbSBieXRlcyB0byBnZW5lcmF0ZS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIHJhbmRvbSB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgd29yZEFycmF5ID0gQ3J5cHRvSlMubGliLldvcmRBcnJheS5yYW5kb20oMTYpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIHJhbmRvbTogZnVuY3Rpb24gKG5CeXRlcykge1xuXHQgICAgICAgICAgICB2YXIgd29yZHMgPSBbXTtcblxuXHQgICAgICAgICAgICB2YXIgciA9IChmdW5jdGlvbiAobV93KSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgbV93ID0gbV93O1xuXHQgICAgICAgICAgICAgICAgdmFyIG1feiA9IDB4M2FkZTY4YjE7XG5cdCAgICAgICAgICAgICAgICB2YXIgbWFzayA9IDB4ZmZmZmZmZmY7XG5cblx0ICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgICAgICAgICAgICAgbV96ID0gKDB4OTA2OSAqIChtX3ogJiAweEZGRkYpICsgKG1feiA+PiAweDEwKSkgJiBtYXNrO1xuXHQgICAgICAgICAgICAgICAgICAgIG1fdyA9ICgweDQ2NTAgKiAobV93ICYgMHhGRkZGKSArIChtX3cgPj4gMHgxMCkpICYgbWFzaztcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gKChtX3ogPDwgMHgxMCkgKyBtX3cpICYgbWFzaztcblx0ICAgICAgICAgICAgICAgICAgICByZXN1bHQgLz0gMHgxMDAwMDAwMDA7XG5cdCAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IDAuNTtcblx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0ICogKE1hdGgucmFuZG9tKCkgPiAuNSA/IDEgOiAtMSk7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH0pO1xuXG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCByY2FjaGU7IGkgPCBuQnl0ZXM7IGkgKz0gNCkge1xuXHQgICAgICAgICAgICAgICAgdmFyIF9yID0gcigocmNhY2hlIHx8IE1hdGgucmFuZG9tKCkpICogMHgxMDAwMDAwMDApO1xuXG5cdCAgICAgICAgICAgICAgICByY2FjaGUgPSBfcigpICogMHgzYWRlNjdiNztcblx0ICAgICAgICAgICAgICAgIHdvcmRzLnB1c2goKF9yKCkgKiAweDEwMDAwMDAwMCkgfCAwKTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIHJldHVybiBuZXcgV29yZEFycmF5LmluaXQod29yZHMsIG5CeXRlcyk7XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cblx0ICAgIC8qKlxuXHQgICAgICogRW5jb2RlciBuYW1lc3BhY2UuXG5cdCAgICAgKi9cblx0ICAgIHZhciBDX2VuYyA9IEMuZW5jID0ge307XG5cblx0ICAgIC8qKlxuXHQgICAgICogSGV4IGVuY29kaW5nIHN0cmF0ZWd5LlxuXHQgICAgICovXG5cdCAgICB2YXIgSGV4ID0gQ19lbmMuSGV4ID0ge1xuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENvbnZlcnRzIGEgd29yZCBhcnJheSB0byBhIGhleCBzdHJpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge1dvcmRBcnJheX0gd29yZEFycmF5IFRoZSB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7c3RyaW5nfSBUaGUgaGV4IHN0cmluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBzdGF0aWNcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIGhleFN0cmluZyA9IENyeXB0b0pTLmVuYy5IZXguc3RyaW5naWZ5KHdvcmRBcnJheSk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgc3RyaW5naWZ5OiBmdW5jdGlvbiAod29yZEFycmF5KSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0c1xuXHQgICAgICAgICAgICB2YXIgd29yZHMgPSB3b3JkQXJyYXkud29yZHM7XG5cdCAgICAgICAgICAgIHZhciBzaWdCeXRlcyA9IHdvcmRBcnJheS5zaWdCeXRlcztcblxuXHQgICAgICAgICAgICAvLyBDb252ZXJ0XG5cdCAgICAgICAgICAgIHZhciBoZXhDaGFycyA9IFtdO1xuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNpZ0J5dGVzOyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIHZhciBiaXRlID0gKHdvcmRzW2kgPj4+IDJdID4+PiAoMjQgLSAoaSAlIDQpICogOCkpICYgMHhmZjtcblx0ICAgICAgICAgICAgICAgIGhleENoYXJzLnB1c2goKGJpdGUgPj4+IDQpLnRvU3RyaW5nKDE2KSk7XG5cdCAgICAgICAgICAgICAgICBoZXhDaGFycy5wdXNoKChiaXRlICYgMHgwZikudG9TdHJpbmcoMTYpKTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIHJldHVybiBoZXhDaGFycy5qb2luKCcnKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29udmVydHMgYSBoZXggc3RyaW5nIHRvIGEgd29yZCBhcnJheS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBoZXhTdHIgVGhlIGhleCBzdHJpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcmV0dXJuIHtXb3JkQXJyYXl9IFRoZSB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHN0YXRpY1xuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICB2YXIgd29yZEFycmF5ID0gQ3J5cHRvSlMuZW5jLkhleC5wYXJzZShoZXhTdHJpbmcpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIHBhcnNlOiBmdW5jdGlvbiAoaGV4U3RyKSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0XG5cdCAgICAgICAgICAgIHZhciBoZXhTdHJMZW5ndGggPSBoZXhTdHIubGVuZ3RoO1xuXG5cdCAgICAgICAgICAgIC8vIENvbnZlcnRcblx0ICAgICAgICAgICAgdmFyIHdvcmRzID0gW107XG5cdCAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaGV4U3RyTGVuZ3RoOyBpICs9IDIpIHtcblx0ICAgICAgICAgICAgICAgIHdvcmRzW2kgPj4+IDNdIHw9IHBhcnNlSW50KGhleFN0ci5zdWJzdHIoaSwgMiksIDE2KSA8PCAoMjQgLSAoaSAlIDgpICogNCk7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICByZXR1cm4gbmV3IFdvcmRBcnJheS5pbml0KHdvcmRzLCBoZXhTdHJMZW5ndGggLyAyKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXG5cdCAgICAvKipcblx0ICAgICAqIExhdGluMSBlbmNvZGluZyBzdHJhdGVneS5cblx0ICAgICAqL1xuXHQgICAgdmFyIExhdGluMSA9IENfZW5jLkxhdGluMSA9IHtcblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDb252ZXJ0cyBhIHdvcmQgYXJyYXkgdG8gYSBMYXRpbjEgc3RyaW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl9IHdvcmRBcnJheSBUaGUgd29yZCBhcnJheS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge3N0cmluZ30gVGhlIExhdGluMSBzdHJpbmcuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBsYXRpbjFTdHJpbmcgPSBDcnlwdG9KUy5lbmMuTGF0aW4xLnN0cmluZ2lmeSh3b3JkQXJyYXkpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIHN0cmluZ2lmeTogZnVuY3Rpb24gKHdvcmRBcnJheSkge1xuXHQgICAgICAgICAgICAvLyBTaG9ydGN1dHNcblx0ICAgICAgICAgICAgdmFyIHdvcmRzID0gd29yZEFycmF5LndvcmRzO1xuXHQgICAgICAgICAgICB2YXIgc2lnQnl0ZXMgPSB3b3JkQXJyYXkuc2lnQnl0ZXM7XG5cblx0ICAgICAgICAgICAgLy8gQ29udmVydFxuXHQgICAgICAgICAgICB2YXIgbGF0aW4xQ2hhcnMgPSBbXTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaWdCeXRlczsgaSsrKSB7XG5cdCAgICAgICAgICAgICAgICB2YXIgYml0ZSA9ICh3b3Jkc1tpID4+PiAyXSA+Pj4gKDI0IC0gKGkgJSA0KSAqIDgpKSAmIDB4ZmY7XG5cdCAgICAgICAgICAgICAgICBsYXRpbjFDaGFycy5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoYml0ZSkpO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgcmV0dXJuIGxhdGluMUNoYXJzLmpvaW4oJycpO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBDb252ZXJ0cyBhIExhdGluMSBzdHJpbmcgdG8gYSB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IGxhdGluMVN0ciBUaGUgTGF0aW4xIHN0cmluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIHdvcmQgYXJyYXkuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciB3b3JkQXJyYXkgPSBDcnlwdG9KUy5lbmMuTGF0aW4xLnBhcnNlKGxhdGluMVN0cmluZyk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgcGFyc2U6IGZ1bmN0aW9uIChsYXRpbjFTdHIpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRcblx0ICAgICAgICAgICAgdmFyIGxhdGluMVN0ckxlbmd0aCA9IGxhdGluMVN0ci5sZW5ndGg7XG5cblx0ICAgICAgICAgICAgLy8gQ29udmVydFxuXHQgICAgICAgICAgICB2YXIgd29yZHMgPSBbXTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsYXRpbjFTdHJMZW5ndGg7IGkrKykge1xuXHQgICAgICAgICAgICAgICAgd29yZHNbaSA+Pj4gMl0gfD0gKGxhdGluMVN0ci5jaGFyQ29kZUF0KGkpICYgMHhmZikgPDwgKDI0IC0gKGkgJSA0KSAqIDgpO1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgcmV0dXJuIG5ldyBXb3JkQXJyYXkuaW5pdCh3b3JkcywgbGF0aW4xU3RyTGVuZ3RoKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXG5cdCAgICAvKipcblx0ICAgICAqIFVURi04IGVuY29kaW5nIHN0cmF0ZWd5LlxuXHQgICAgICovXG5cdCAgICB2YXIgVXRmOCA9IENfZW5jLlV0ZjggPSB7XG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29udmVydHMgYSB3b3JkIGFycmF5IHRvIGEgVVRGLTggc3RyaW5nLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl9IHdvcmRBcnJheSBUaGUgd29yZCBhcnJheS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge3N0cmluZ30gVGhlIFVURi04IHN0cmluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBzdGF0aWNcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIHV0ZjhTdHJpbmcgPSBDcnlwdG9KUy5lbmMuVXRmOC5zdHJpbmdpZnkod29yZEFycmF5KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBzdHJpbmdpZnk6IGZ1bmN0aW9uICh3b3JkQXJyYXkpIHtcblx0ICAgICAgICAgICAgdHJ5IHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBkZWNvZGVVUklDb21wb25lbnQoZXNjYXBlKExhdGluMS5zdHJpbmdpZnkod29yZEFycmF5KSkpO1xuXHQgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG5cdCAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ01hbGZvcm1lZCBVVEYtOCBkYXRhJyk7XG5cdCAgICAgICAgICAgIH1cblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29udmVydHMgYSBVVEYtOCBzdHJpbmcgdG8gYSB3b3JkIGFycmF5LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHV0ZjhTdHIgVGhlIFVURi04IHN0cmluZy5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIHdvcmQgYXJyYXkuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciB3b3JkQXJyYXkgPSBDcnlwdG9KUy5lbmMuVXRmOC5wYXJzZSh1dGY4U3RyaW5nKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBwYXJzZTogZnVuY3Rpb24gKHV0ZjhTdHIpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIExhdGluMS5wYXJzZSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQodXRmOFN0cikpKTtcblx0ICAgICAgICB9XG5cdCAgICB9O1xuXG5cdCAgICAvKipcblx0ICAgICAqIEFic3RyYWN0IGJ1ZmZlcmVkIGJsb2NrIGFsZ29yaXRobSB0ZW1wbGF0ZS5cblx0ICAgICAqXG5cdCAgICAgKiBUaGUgcHJvcGVydHkgYmxvY2tTaXplIG11c3QgYmUgaW1wbGVtZW50ZWQgaW4gYSBjb25jcmV0ZSBzdWJ0eXBlLlxuXHQgICAgICpcblx0ICAgICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBfbWluQnVmZmVyU2l6ZSBUaGUgbnVtYmVyIG9mIGJsb2NrcyB0aGF0IHNob3VsZCBiZSBrZXB0IHVucHJvY2Vzc2VkIGluIHRoZSBidWZmZXIuIERlZmF1bHQ6IDBcblx0ICAgICAqL1xuXHQgICAgdmFyIEJ1ZmZlcmVkQmxvY2tBbGdvcml0aG0gPSBDX2xpYi5CdWZmZXJlZEJsb2NrQWxnb3JpdGhtID0gQmFzZS5leHRlbmQoe1xuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIFJlc2V0cyB0aGlzIGJsb2NrIGFsZ29yaXRobSdzIGRhdGEgYnVmZmVyIHRvIGl0cyBpbml0aWFsIHN0YXRlLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICBidWZmZXJlZEJsb2NrQWxnb3JpdGhtLnJlc2V0KCk7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgcmVzZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgLy8gSW5pdGlhbCB2YWx1ZXNcblx0ICAgICAgICAgICAgdGhpcy5fZGF0YSA9IG5ldyBXb3JkQXJyYXkuaW5pdCgpO1xuXHQgICAgICAgICAgICB0aGlzLl9uRGF0YUJ5dGVzID0gMDtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQWRkcyBuZXcgZGF0YSB0byB0aGlzIGJsb2NrIGFsZ29yaXRobSdzIGJ1ZmZlci5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30gZGF0YSBUaGUgZGF0YSB0byBhcHBlbmQuIFN0cmluZ3MgYXJlIGNvbnZlcnRlZCB0byBhIFdvcmRBcnJheSB1c2luZyBVVEYtOC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgYnVmZmVyZWRCbG9ja0FsZ29yaXRobS5fYXBwZW5kKCdkYXRhJyk7XG5cdCAgICAgICAgICogICAgIGJ1ZmZlcmVkQmxvY2tBbGdvcml0aG0uX2FwcGVuZCh3b3JkQXJyYXkpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIF9hcHBlbmQ6IGZ1bmN0aW9uIChkYXRhKSB7XG5cdCAgICAgICAgICAgIC8vIENvbnZlcnQgc3RyaW5nIHRvIFdvcmRBcnJheSwgZWxzZSBhc3N1bWUgV29yZEFycmF5IGFscmVhZHlcblx0ICAgICAgICAgICAgaWYgKHR5cGVvZiBkYXRhID09ICdzdHJpbmcnKSB7XG5cdCAgICAgICAgICAgICAgICBkYXRhID0gVXRmOC5wYXJzZShkYXRhKTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIEFwcGVuZFxuXHQgICAgICAgICAgICB0aGlzLl9kYXRhLmNvbmNhdChkYXRhKTtcblx0ICAgICAgICAgICAgdGhpcy5fbkRhdGFCeXRlcyArPSBkYXRhLnNpZ0J5dGVzO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBQcm9jZXNzZXMgYXZhaWxhYmxlIGRhdGEgYmxvY2tzLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogVGhpcyBtZXRob2QgaW52b2tlcyBfZG9Qcm9jZXNzQmxvY2sob2Zmc2V0KSwgd2hpY2ggbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBhIGNvbmNyZXRlIHN1YnR5cGUuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGRvRmx1c2ggV2hldGhlciBhbGwgYmxvY2tzIGFuZCBwYXJ0aWFsIGJsb2NrcyBzaG91bGQgYmUgcHJvY2Vzc2VkLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7V29yZEFycmF5fSBUaGUgcHJvY2Vzc2VkIGRhdGEuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBwcm9jZXNzZWREYXRhID0gYnVmZmVyZWRCbG9ja0FsZ29yaXRobS5fcHJvY2VzcygpO1xuXHQgICAgICAgICAqICAgICB2YXIgcHJvY2Vzc2VkRGF0YSA9IGJ1ZmZlcmVkQmxvY2tBbGdvcml0aG0uX3Byb2Nlc3MoISEnZmx1c2gnKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBfcHJvY2VzczogZnVuY3Rpb24gKGRvRmx1c2gpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciBkYXRhID0gdGhpcy5fZGF0YTtcblx0ICAgICAgICAgICAgdmFyIGRhdGFXb3JkcyA9IGRhdGEud29yZHM7XG5cdCAgICAgICAgICAgIHZhciBkYXRhU2lnQnl0ZXMgPSBkYXRhLnNpZ0J5dGVzO1xuXHQgICAgICAgICAgICB2YXIgYmxvY2tTaXplID0gdGhpcy5ibG9ja1NpemU7XG5cdCAgICAgICAgICAgIHZhciBibG9ja1NpemVCeXRlcyA9IGJsb2NrU2l6ZSAqIDQ7XG5cblx0ICAgICAgICAgICAgLy8gQ291bnQgYmxvY2tzIHJlYWR5XG5cdCAgICAgICAgICAgIHZhciBuQmxvY2tzUmVhZHkgPSBkYXRhU2lnQnl0ZXMgLyBibG9ja1NpemVCeXRlcztcblx0ICAgICAgICAgICAgaWYgKGRvRmx1c2gpIHtcblx0ICAgICAgICAgICAgICAgIC8vIFJvdW5kIHVwIHRvIGluY2x1ZGUgcGFydGlhbCBibG9ja3Ncblx0ICAgICAgICAgICAgICAgIG5CbG9ja3NSZWFkeSA9IE1hdGguY2VpbChuQmxvY2tzUmVhZHkpO1xuXHQgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgLy8gUm91bmQgZG93biB0byBpbmNsdWRlIG9ubHkgZnVsbCBibG9ja3MsXG5cdCAgICAgICAgICAgICAgICAvLyBsZXNzIHRoZSBudW1iZXIgb2YgYmxvY2tzIHRoYXQgbXVzdCByZW1haW4gaW4gdGhlIGJ1ZmZlclxuXHQgICAgICAgICAgICAgICAgbkJsb2Nrc1JlYWR5ID0gTWF0aC5tYXgoKG5CbG9ja3NSZWFkeSB8IDApIC0gdGhpcy5fbWluQnVmZmVyU2l6ZSwgMCk7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAvLyBDb3VudCB3b3JkcyByZWFkeVxuXHQgICAgICAgICAgICB2YXIgbldvcmRzUmVhZHkgPSBuQmxvY2tzUmVhZHkgKiBibG9ja1NpemU7XG5cblx0ICAgICAgICAgICAgLy8gQ291bnQgYnl0ZXMgcmVhZHlcblx0ICAgICAgICAgICAgdmFyIG5CeXRlc1JlYWR5ID0gTWF0aC5taW4obldvcmRzUmVhZHkgKiA0LCBkYXRhU2lnQnl0ZXMpO1xuXG5cdCAgICAgICAgICAgIC8vIFByb2Nlc3MgYmxvY2tzXG5cdCAgICAgICAgICAgIGlmIChuV29yZHNSZWFkeSkge1xuXHQgICAgICAgICAgICAgICAgZm9yICh2YXIgb2Zmc2V0ID0gMDsgb2Zmc2V0IDwgbldvcmRzUmVhZHk7IG9mZnNldCArPSBibG9ja1NpemUpIHtcblx0ICAgICAgICAgICAgICAgICAgICAvLyBQZXJmb3JtIGNvbmNyZXRlLWFsZ29yaXRobSBsb2dpY1xuXHQgICAgICAgICAgICAgICAgICAgIHRoaXMuX2RvUHJvY2Vzc0Jsb2NrKGRhdGFXb3Jkcywgb2Zmc2V0KTtcblx0ICAgICAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAgICAgLy8gUmVtb3ZlIHByb2Nlc3NlZCB3b3Jkc1xuXHQgICAgICAgICAgICAgICAgdmFyIHByb2Nlc3NlZFdvcmRzID0gZGF0YVdvcmRzLnNwbGljZSgwLCBuV29yZHNSZWFkeSk7XG5cdCAgICAgICAgICAgICAgICBkYXRhLnNpZ0J5dGVzIC09IG5CeXRlc1JlYWR5O1xuXHQgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgLy8gUmV0dXJuIHByb2Nlc3NlZCB3b3Jkc1xuXHQgICAgICAgICAgICByZXR1cm4gbmV3IFdvcmRBcnJheS5pbml0KHByb2Nlc3NlZFdvcmRzLCBuQnl0ZXNSZWFkeSk7XG5cdCAgICAgICAgfSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENyZWF0ZXMgYSBjb3B5IG9mIHRoaXMgb2JqZWN0LlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7T2JqZWN0fSBUaGUgY2xvbmUuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBjbG9uZSA9IGJ1ZmZlcmVkQmxvY2tBbGdvcml0aG0uY2xvbmUoKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBjbG9uZTogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgY2xvbmUgPSBCYXNlLmNsb25lLmNhbGwodGhpcyk7XG5cdCAgICAgICAgICAgIGNsb25lLl9kYXRhID0gdGhpcy5fZGF0YS5jbG9uZSgpO1xuXG5cdCAgICAgICAgICAgIHJldHVybiBjbG9uZTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgX21pbkJ1ZmZlclNpemU6IDBcblx0ICAgIH0pO1xuXG5cdCAgICAvKipcblx0ICAgICAqIEFic3RyYWN0IGhhc2hlciB0ZW1wbGF0ZS5cblx0ICAgICAqXG5cdCAgICAgKiBAcHJvcGVydHkge251bWJlcn0gYmxvY2tTaXplIFRoZSBudW1iZXIgb2YgMzItYml0IHdvcmRzIHRoaXMgaGFzaGVyIG9wZXJhdGVzIG9uLiBEZWZhdWx0OiAxNiAoNTEyIGJpdHMpXG5cdCAgICAgKi9cblx0ICAgIHZhciBIYXNoZXIgPSBDX2xpYi5IYXNoZXIgPSBCdWZmZXJlZEJsb2NrQWxnb3JpdGhtLmV4dGVuZCh7XG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ29uZmlndXJhdGlvbiBvcHRpb25zLlxuXHQgICAgICAgICAqL1xuXHQgICAgICAgIGNmZzogQmFzZS5leHRlbmQoKSxcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIEluaXRpYWxpemVzIGEgbmV3bHkgY3JlYXRlZCBoYXNoZXIuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gY2ZnIChPcHRpb25hbCkgVGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byB1c2UgZm9yIHRoaXMgaGFzaCBjb21wdXRhdGlvbi5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIGhhc2hlciA9IENyeXB0b0pTLmFsZ28uU0hBMjU2LmNyZWF0ZSgpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIGluaXQ6IGZ1bmN0aW9uIChjZmcpIHtcblx0ICAgICAgICAgICAgLy8gQXBwbHkgY29uZmlnIGRlZmF1bHRzXG5cdCAgICAgICAgICAgIHRoaXMuY2ZnID0gdGhpcy5jZmcuZXh0ZW5kKGNmZyk7XG5cblx0ICAgICAgICAgICAgLy8gU2V0IGluaXRpYWwgdmFsdWVzXG5cdCAgICAgICAgICAgIHRoaXMucmVzZXQoKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogUmVzZXRzIHRoaXMgaGFzaGVyIHRvIGl0cyBpbml0aWFsIHN0YXRlLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQGV4YW1wbGVcblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqICAgICBoYXNoZXIucmVzZXQoKTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICByZXNldDogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICAvLyBSZXNldCBkYXRhIGJ1ZmZlclxuXHQgICAgICAgICAgICBCdWZmZXJlZEJsb2NrQWxnb3JpdGhtLnJlc2V0LmNhbGwodGhpcyk7XG5cblx0ICAgICAgICAgICAgLy8gUGVyZm9ybSBjb25jcmV0ZS1oYXNoZXIgbG9naWNcblx0ICAgICAgICAgICAgdGhpcy5fZG9SZXNldCgpO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICAvKipcblx0ICAgICAgICAgKiBVcGRhdGVzIHRoaXMgaGFzaGVyIHdpdGggYSBtZXNzYWdlLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHBhcmFtIHtXb3JkQXJyYXl8c3RyaW5nfSBtZXNzYWdlVXBkYXRlIFRoZSBtZXNzYWdlIHRvIGFwcGVuZC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge0hhc2hlcn0gVGhpcyBoYXNoZXIuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIGhhc2hlci51cGRhdGUoJ21lc3NhZ2UnKTtcblx0ICAgICAgICAgKiAgICAgaGFzaGVyLnVwZGF0ZSh3b3JkQXJyYXkpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIHVwZGF0ZTogZnVuY3Rpb24gKG1lc3NhZ2VVcGRhdGUpIHtcblx0ICAgICAgICAgICAgLy8gQXBwZW5kXG5cdCAgICAgICAgICAgIHRoaXMuX2FwcGVuZChtZXNzYWdlVXBkYXRlKTtcblxuXHQgICAgICAgICAgICAvLyBVcGRhdGUgdGhlIGhhc2hcblx0ICAgICAgICAgICAgdGhpcy5fcHJvY2VzcygpO1xuXG5cdCAgICAgICAgICAgIC8vIENoYWluYWJsZVxuXHQgICAgICAgICAgICByZXR1cm4gdGhpcztcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogRmluYWxpemVzIHRoZSBoYXNoIGNvbXB1dGF0aW9uLlxuXHQgICAgICAgICAqIE5vdGUgdGhhdCB0aGUgZmluYWxpemUgb3BlcmF0aW9uIGlzIGVmZmVjdGl2ZWx5IGEgZGVzdHJ1Y3RpdmUsIHJlYWQtb25jZSBvcGVyYXRpb24uXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IG1lc3NhZ2VVcGRhdGUgKE9wdGlvbmFsKSBBIGZpbmFsIG1lc3NhZ2UgdXBkYXRlLlxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogQHJldHVybiB7V29yZEFycmF5fSBUaGUgaGFzaC5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBleGFtcGxlXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiAgICAgdmFyIGhhc2ggPSBoYXNoZXIuZmluYWxpemUoKTtcblx0ICAgICAgICAgKiAgICAgdmFyIGhhc2ggPSBoYXNoZXIuZmluYWxpemUoJ21lc3NhZ2UnKTtcblx0ICAgICAgICAgKiAgICAgdmFyIGhhc2ggPSBoYXNoZXIuZmluYWxpemUod29yZEFycmF5KTtcblx0ICAgICAgICAgKi9cblx0ICAgICAgICBmaW5hbGl6ZTogZnVuY3Rpb24gKG1lc3NhZ2VVcGRhdGUpIHtcblx0ICAgICAgICAgICAgLy8gRmluYWwgbWVzc2FnZSB1cGRhdGVcblx0ICAgICAgICAgICAgaWYgKG1lc3NhZ2VVcGRhdGUpIHtcblx0ICAgICAgICAgICAgICAgIHRoaXMuX2FwcGVuZChtZXNzYWdlVXBkYXRlKTtcblx0ICAgICAgICAgICAgfVxuXG5cdCAgICAgICAgICAgIC8vIFBlcmZvcm0gY29uY3JldGUtaGFzaGVyIGxvZ2ljXG5cdCAgICAgICAgICAgIHZhciBoYXNoID0gdGhpcy5fZG9GaW5hbGl6ZSgpO1xuXG5cdCAgICAgICAgICAgIHJldHVybiBoYXNoO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBibG9ja1NpemU6IDUxMi8zMixcblxuXHQgICAgICAgIC8qKlxuXHQgICAgICAgICAqIENyZWF0ZXMgYSBzaG9ydGN1dCBmdW5jdGlvbiB0byBhIGhhc2hlcidzIG9iamVjdCBpbnRlcmZhY2UuXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAcGFyYW0ge0hhc2hlcn0gaGFzaGVyIFRoZSBoYXNoZXIgdG8gY3JlYXRlIGEgaGVscGVyIGZvci5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge0Z1bmN0aW9ufSBUaGUgc2hvcnRjdXQgZnVuY3Rpb24uXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBTSEEyNTYgPSBDcnlwdG9KUy5saWIuSGFzaGVyLl9jcmVhdGVIZWxwZXIoQ3J5cHRvSlMuYWxnby5TSEEyNTYpO1xuXHQgICAgICAgICAqL1xuXHQgICAgICAgIF9jcmVhdGVIZWxwZXI6IGZ1bmN0aW9uIChoYXNoZXIpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChtZXNzYWdlLCBjZmcpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBuZXcgaGFzaGVyLmluaXQoY2ZnKS5maW5hbGl6ZShtZXNzYWdlKTtcblx0ICAgICAgICAgICAgfTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgLyoqXG5cdCAgICAgICAgICogQ3JlYXRlcyBhIHNob3J0Y3V0IGZ1bmN0aW9uIHRvIHRoZSBITUFDJ3Mgb2JqZWN0IGludGVyZmFjZS5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEBwYXJhbSB7SGFzaGVyfSBoYXNoZXIgVGhlIGhhc2hlciB0byB1c2UgaW4gdGhpcyBITUFDIGhlbHBlci5cblx0ICAgICAgICAgKlxuXHQgICAgICAgICAqIEByZXR1cm4ge0Z1bmN0aW9ufSBUaGUgc2hvcnRjdXQgZnVuY3Rpb24uXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAc3RhdGljXG5cdCAgICAgICAgICpcblx0ICAgICAgICAgKiBAZXhhbXBsZVxuXHQgICAgICAgICAqXG5cdCAgICAgICAgICogICAgIHZhciBIbWFjU0hBMjU2ID0gQ3J5cHRvSlMubGliLkhhc2hlci5fY3JlYXRlSG1hY0hlbHBlcihDcnlwdG9KUy5hbGdvLlNIQTI1Nik7XG5cdCAgICAgICAgICovXG5cdCAgICAgICAgX2NyZWF0ZUhtYWNIZWxwZXI6IGZ1bmN0aW9uIChoYXNoZXIpIHtcblx0ICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChtZXNzYWdlLCBrZXkpIHtcblx0ICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQ19hbGdvLkhNQUMuaW5pdChoYXNoZXIsIGtleSkuZmluYWxpemUobWVzc2FnZSk7XG5cdCAgICAgICAgICAgIH07XG5cdCAgICAgICAgfVxuXHQgICAgfSk7XG5cblx0ICAgIC8qKlxuXHQgICAgICogQWxnb3JpdGhtIG5hbWVzcGFjZS5cblx0ICAgICAqL1xuXHQgICAgdmFyIENfYWxnbyA9IEMuYWxnbyA9IHt9O1xuXG5cdCAgICByZXR1cm4gQztcblx0fShNYXRoKSk7XG5cblxuXHRyZXR1cm4gQ3J5cHRvSlM7XG5cbn0pKTsiLCI7KGZ1bmN0aW9uIChyb290LCBmYWN0b3J5KSB7XG5cdGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gXCJvYmplY3RcIikge1xuXHRcdC8vIENvbW1vbkpTXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKFwiLi9jb3JlXCIpKTtcblx0fVxuXHRlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkge1xuXHRcdC8vIEFNRFxuXHRcdGRlZmluZShbXCIuL2NvcmVcIl0sIGZhY3RvcnkpO1xuXHR9XG5cdGVsc2Uge1xuXHRcdC8vIEdsb2JhbCAoYnJvd3Nlcilcblx0XHRmYWN0b3J5KHJvb3QuQ3J5cHRvSlMpO1xuXHR9XG59KHRoaXMsIGZ1bmN0aW9uIChDcnlwdG9KUykge1xuXG5cdChmdW5jdGlvbiAoTWF0aCkge1xuXHQgICAgLy8gU2hvcnRjdXRzXG5cdCAgICB2YXIgQyA9IENyeXB0b0pTO1xuXHQgICAgdmFyIENfbGliID0gQy5saWI7XG5cdCAgICB2YXIgV29yZEFycmF5ID0gQ19saWIuV29yZEFycmF5O1xuXHQgICAgdmFyIEhhc2hlciA9IENfbGliLkhhc2hlcjtcblx0ICAgIHZhciBDX2FsZ28gPSBDLmFsZ287XG5cblx0ICAgIC8vIEluaXRpYWxpemF0aW9uIGFuZCByb3VuZCBjb25zdGFudHMgdGFibGVzXG5cdCAgICB2YXIgSCA9IFtdO1xuXHQgICAgdmFyIEsgPSBbXTtcblxuXHQgICAgLy8gQ29tcHV0ZSBjb25zdGFudHNcblx0ICAgIChmdW5jdGlvbiAoKSB7XG5cdCAgICAgICAgZnVuY3Rpb24gaXNQcmltZShuKSB7XG5cdCAgICAgICAgICAgIHZhciBzcXJ0TiA9IE1hdGguc3FydChuKTtcblx0ICAgICAgICAgICAgZm9yICh2YXIgZmFjdG9yID0gMjsgZmFjdG9yIDw9IHNxcnROOyBmYWN0b3IrKykge1xuXHQgICAgICAgICAgICAgICAgaWYgKCEobiAlIGZhY3RvcikpIHtcblx0ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG5cdCAgICAgICAgICAgICAgICB9XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcblx0ICAgICAgICB9XG5cblx0ICAgICAgICBmdW5jdGlvbiBnZXRGcmFjdGlvbmFsQml0cyhuKSB7XG5cdCAgICAgICAgICAgIHJldHVybiAoKG4gLSAobiB8IDApKSAqIDB4MTAwMDAwMDAwKSB8IDA7XG5cdCAgICAgICAgfVxuXG5cdCAgICAgICAgdmFyIG4gPSAyO1xuXHQgICAgICAgIHZhciBuUHJpbWUgPSAwO1xuXHQgICAgICAgIHdoaWxlIChuUHJpbWUgPCA2NCkge1xuXHQgICAgICAgICAgICBpZiAoaXNQcmltZShuKSkge1xuXHQgICAgICAgICAgICAgICAgaWYgKG5QcmltZSA8IDgpIHtcblx0ICAgICAgICAgICAgICAgICAgICBIW25QcmltZV0gPSBnZXRGcmFjdGlvbmFsQml0cyhNYXRoLnBvdyhuLCAxIC8gMikpO1xuXHQgICAgICAgICAgICAgICAgfVxuXHQgICAgICAgICAgICAgICAgS1tuUHJpbWVdID0gZ2V0RnJhY3Rpb25hbEJpdHMoTWF0aC5wb3cobiwgMSAvIDMpKTtcblxuXHQgICAgICAgICAgICAgICAgblByaW1lKys7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICBuKys7XG5cdCAgICAgICAgfVxuXHQgICAgfSgpKTtcblxuXHQgICAgLy8gUmV1c2FibGUgb2JqZWN0XG5cdCAgICB2YXIgVyA9IFtdO1xuXG5cdCAgICAvKipcblx0ICAgICAqIFNIQS0yNTYgaGFzaCBhbGdvcml0aG0uXG5cdCAgICAgKi9cblx0ICAgIHZhciBTSEEyNTYgPSBDX2FsZ28uU0hBMjU2ID0gSGFzaGVyLmV4dGVuZCh7XG5cdCAgICAgICAgX2RvUmVzZXQ6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgdGhpcy5faGFzaCA9IG5ldyBXb3JkQXJyYXkuaW5pdChILnNsaWNlKDApKTtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgX2RvUHJvY2Vzc0Jsb2NrOiBmdW5jdGlvbiAoTSwgb2Zmc2V0KSB7XG5cdCAgICAgICAgICAgIC8vIFNob3J0Y3V0XG5cdCAgICAgICAgICAgIHZhciBIID0gdGhpcy5faGFzaC53b3JkcztcblxuXHQgICAgICAgICAgICAvLyBXb3JraW5nIHZhcmlhYmxlc1xuXHQgICAgICAgICAgICB2YXIgYSA9IEhbMF07XG5cdCAgICAgICAgICAgIHZhciBiID0gSFsxXTtcblx0ICAgICAgICAgICAgdmFyIGMgPSBIWzJdO1xuXHQgICAgICAgICAgICB2YXIgZCA9IEhbM107XG5cdCAgICAgICAgICAgIHZhciBlID0gSFs0XTtcblx0ICAgICAgICAgICAgdmFyIGYgPSBIWzVdO1xuXHQgICAgICAgICAgICB2YXIgZyA9IEhbNl07XG5cdCAgICAgICAgICAgIHZhciBoID0gSFs3XTtcblxuXHQgICAgICAgICAgICAvLyBDb21wdXRhdGlvblxuXHQgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDY0OyBpKyspIHtcblx0ICAgICAgICAgICAgICAgIGlmIChpIDwgMTYpIHtcblx0ICAgICAgICAgICAgICAgICAgICBXW2ldID0gTVtvZmZzZXQgKyBpXSB8IDA7XG5cdCAgICAgICAgICAgICAgICB9IGVsc2Uge1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBnYW1tYTB4ID0gV1tpIC0gMTVdO1xuXHQgICAgICAgICAgICAgICAgICAgIHZhciBnYW1tYTAgID0gKChnYW1tYTB4IDw8IDI1KSB8IChnYW1tYTB4ID4+PiA3KSkgIF5cblx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoZ2FtbWEweCA8PCAxNCkgfCAoZ2FtbWEweCA+Pj4gMTgpKSBeXG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGdhbW1hMHggPj4+IDMpO1xuXG5cdCAgICAgICAgICAgICAgICAgICAgdmFyIGdhbW1hMXggPSBXW2kgLSAyXTtcblx0ICAgICAgICAgICAgICAgICAgICB2YXIgZ2FtbWExICA9ICgoZ2FtbWExeCA8PCAxNSkgfCAoZ2FtbWExeCA+Pj4gMTcpKSBeXG5cdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGdhbW1hMXggPDwgMTMpIHwgKGdhbW1hMXggPj4+IDE5KSkgXlxuXHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChnYW1tYTF4ID4+PiAxMCk7XG5cblx0ICAgICAgICAgICAgICAgICAgICBXW2ldID0gZ2FtbWEwICsgV1tpIC0gN10gKyBnYW1tYTEgKyBXW2kgLSAxNl07XG5cdCAgICAgICAgICAgICAgICB9XG5cblx0ICAgICAgICAgICAgICAgIHZhciBjaCAgPSAoZSAmIGYpIF4gKH5lICYgZyk7XG5cdCAgICAgICAgICAgICAgICB2YXIgbWFqID0gKGEgJiBiKSBeIChhICYgYykgXiAoYiAmIGMpO1xuXG5cdCAgICAgICAgICAgICAgICB2YXIgc2lnbWEwID0gKChhIDw8IDMwKSB8IChhID4+PiAyKSkgXiAoKGEgPDwgMTkpIHwgKGEgPj4+IDEzKSkgXiAoKGEgPDwgMTApIHwgKGEgPj4+IDIyKSk7XG5cdCAgICAgICAgICAgICAgICB2YXIgc2lnbWExID0gKChlIDw8IDI2KSB8IChlID4+PiA2KSkgXiAoKGUgPDwgMjEpIHwgKGUgPj4+IDExKSkgXiAoKGUgPDwgNykgIHwgKGUgPj4+IDI1KSk7XG5cblx0ICAgICAgICAgICAgICAgIHZhciB0MSA9IGggKyBzaWdtYTEgKyBjaCArIEtbaV0gKyBXW2ldO1xuXHQgICAgICAgICAgICAgICAgdmFyIHQyID0gc2lnbWEwICsgbWFqO1xuXG5cdCAgICAgICAgICAgICAgICBoID0gZztcblx0ICAgICAgICAgICAgICAgIGcgPSBmO1xuXHQgICAgICAgICAgICAgICAgZiA9IGU7XG5cdCAgICAgICAgICAgICAgICBlID0gKGQgKyB0MSkgfCAwO1xuXHQgICAgICAgICAgICAgICAgZCA9IGM7XG5cdCAgICAgICAgICAgICAgICBjID0gYjtcblx0ICAgICAgICAgICAgICAgIGIgPSBhO1xuXHQgICAgICAgICAgICAgICAgYSA9ICh0MSArIHQyKSB8IDA7XG5cdCAgICAgICAgICAgIH1cblxuXHQgICAgICAgICAgICAvLyBJbnRlcm1lZGlhdGUgaGFzaCB2YWx1ZVxuXHQgICAgICAgICAgICBIWzBdID0gKEhbMF0gKyBhKSB8IDA7XG5cdCAgICAgICAgICAgIEhbMV0gPSAoSFsxXSArIGIpIHwgMDtcblx0ICAgICAgICAgICAgSFsyXSA9IChIWzJdICsgYykgfCAwO1xuXHQgICAgICAgICAgICBIWzNdID0gKEhbM10gKyBkKSB8IDA7XG5cdCAgICAgICAgICAgIEhbNF0gPSAoSFs0XSArIGUpIHwgMDtcblx0ICAgICAgICAgICAgSFs1XSA9IChIWzVdICsgZikgfCAwO1xuXHQgICAgICAgICAgICBIWzZdID0gKEhbNl0gKyBnKSB8IDA7XG5cdCAgICAgICAgICAgIEhbN10gPSAoSFs3XSArIGgpIHwgMDtcblx0ICAgICAgICB9LFxuXG5cdCAgICAgICAgX2RvRmluYWxpemU6IGZ1bmN0aW9uICgpIHtcblx0ICAgICAgICAgICAgLy8gU2hvcnRjdXRzXG5cdCAgICAgICAgICAgIHZhciBkYXRhID0gdGhpcy5fZGF0YTtcblx0ICAgICAgICAgICAgdmFyIGRhdGFXb3JkcyA9IGRhdGEud29yZHM7XG5cblx0ICAgICAgICAgICAgdmFyIG5CaXRzVG90YWwgPSB0aGlzLl9uRGF0YUJ5dGVzICogODtcblx0ICAgICAgICAgICAgdmFyIG5CaXRzTGVmdCA9IGRhdGEuc2lnQnl0ZXMgKiA4O1xuXG5cdCAgICAgICAgICAgIC8vIEFkZCBwYWRkaW5nXG5cdCAgICAgICAgICAgIGRhdGFXb3Jkc1tuQml0c0xlZnQgPj4+IDVdIHw9IDB4ODAgPDwgKDI0IC0gbkJpdHNMZWZ0ICUgMzIpO1xuXHQgICAgICAgICAgICBkYXRhV29yZHNbKCgobkJpdHNMZWZ0ICsgNjQpID4+PiA5KSA8PCA0KSArIDE0XSA9IE1hdGguZmxvb3IobkJpdHNUb3RhbCAvIDB4MTAwMDAwMDAwKTtcblx0ICAgICAgICAgICAgZGF0YVdvcmRzWygoKG5CaXRzTGVmdCArIDY0KSA+Pj4gOSkgPDwgNCkgKyAxNV0gPSBuQml0c1RvdGFsO1xuXHQgICAgICAgICAgICBkYXRhLnNpZ0J5dGVzID0gZGF0YVdvcmRzLmxlbmd0aCAqIDQ7XG5cblx0ICAgICAgICAgICAgLy8gSGFzaCBmaW5hbCBibG9ja3Ncblx0ICAgICAgICAgICAgdGhpcy5fcHJvY2VzcygpO1xuXG5cdCAgICAgICAgICAgIC8vIFJldHVybiBmaW5hbCBjb21wdXRlZCBoYXNoXG5cdCAgICAgICAgICAgIHJldHVybiB0aGlzLl9oYXNoO1xuXHQgICAgICAgIH0sXG5cblx0ICAgICAgICBjbG9uZTogZnVuY3Rpb24gKCkge1xuXHQgICAgICAgICAgICB2YXIgY2xvbmUgPSBIYXNoZXIuY2xvbmUuY2FsbCh0aGlzKTtcblx0ICAgICAgICAgICAgY2xvbmUuX2hhc2ggPSB0aGlzLl9oYXNoLmNsb25lKCk7XG5cblx0ICAgICAgICAgICAgcmV0dXJuIGNsb25lO1xuXHQgICAgICAgIH1cblx0ICAgIH0pO1xuXG5cdCAgICAvKipcblx0ICAgICAqIFNob3J0Y3V0IGZ1bmN0aW9uIHRvIHRoZSBoYXNoZXIncyBvYmplY3QgaW50ZXJmYWNlLlxuXHQgICAgICpcblx0ICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30gbWVzc2FnZSBUaGUgbWVzc2FnZSB0byBoYXNoLlxuXHQgICAgICpcblx0ICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIGhhc2guXG5cdCAgICAgKlxuXHQgICAgICogQHN0YXRpY1xuXHQgICAgICpcblx0ICAgICAqIEBleGFtcGxlXG5cdCAgICAgKlxuXHQgICAgICogICAgIHZhciBoYXNoID0gQ3J5cHRvSlMuU0hBMjU2KCdtZXNzYWdlJyk7XG5cdCAgICAgKiAgICAgdmFyIGhhc2ggPSBDcnlwdG9KUy5TSEEyNTYod29yZEFycmF5KTtcblx0ICAgICAqL1xuXHQgICAgQy5TSEEyNTYgPSBIYXNoZXIuX2NyZWF0ZUhlbHBlcihTSEEyNTYpO1xuXG5cdCAgICAvKipcblx0ICAgICAqIFNob3J0Y3V0IGZ1bmN0aW9uIHRvIHRoZSBITUFDJ3Mgb2JqZWN0IGludGVyZmFjZS5cblx0ICAgICAqXG5cdCAgICAgKiBAcGFyYW0ge1dvcmRBcnJheXxzdHJpbmd9IG1lc3NhZ2UgVGhlIG1lc3NhZ2UgdG8gaGFzaC5cblx0ICAgICAqIEBwYXJhbSB7V29yZEFycmF5fHN0cmluZ30ga2V5IFRoZSBzZWNyZXQga2V5LlxuXHQgICAgICpcblx0ICAgICAqIEByZXR1cm4ge1dvcmRBcnJheX0gVGhlIEhNQUMuXG5cdCAgICAgKlxuXHQgICAgICogQHN0YXRpY1xuXHQgICAgICpcblx0ICAgICAqIEBleGFtcGxlXG5cdCAgICAgKlxuXHQgICAgICogICAgIHZhciBobWFjID0gQ3J5cHRvSlMuSG1hY1NIQTI1NihtZXNzYWdlLCBrZXkpO1xuXHQgICAgICovXG5cdCAgICBDLkhtYWNTSEEyNTYgPSBIYXNoZXIuX2NyZWF0ZUhtYWNIZWxwZXIoU0hBMjU2KTtcblx0fShNYXRoKSk7XG5cblxuXHRyZXR1cm4gQ3J5cHRvSlMuU0hBMjU2O1xuXG59KSk7IiwiKGZ1bmN0aW9uKCl7XG5cbiAgICAvLyBDb3B5cmlnaHQgKGMpIDIwMDUgIFRvbSBXdVxuICAgIC8vIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gICAgLy8gU2VlIFwiTElDRU5TRVwiIGZvciBkZXRhaWxzLlxuXG4gICAgLy8gQmFzaWMgSmF2YVNjcmlwdCBCTiBsaWJyYXJ5IC0gc3Vic2V0IHVzZWZ1bCBmb3IgUlNBIGVuY3J5cHRpb24uXG5cbiAgICAvLyBCaXRzIHBlciBkaWdpdFxuICAgIHZhciBkYml0cztcblxuICAgIC8vIEphdmFTY3JpcHQgZW5naW5lIGFuYWx5c2lzXG4gICAgdmFyIGNhbmFyeSA9IDB4ZGVhZGJlZWZjYWZlO1xuICAgIHZhciBqX2xtID0gKChjYW5hcnkmMHhmZmZmZmYpPT0weGVmY2FmZSk7XG5cbiAgICAvLyAocHVibGljKSBDb25zdHJ1Y3RvclxuICAgIGZ1bmN0aW9uIEJpZ0ludGVnZXIoYSxiLGMpIHtcbiAgICAgIGlmKGEgIT0gbnVsbClcbiAgICAgICAgaWYoXCJudW1iZXJcIiA9PSB0eXBlb2YgYSkgdGhpcy5mcm9tTnVtYmVyKGEsYixjKTtcbiAgICAgICAgZWxzZSBpZihiID09IG51bGwgJiYgXCJzdHJpbmdcIiAhPSB0eXBlb2YgYSkgdGhpcy5mcm9tU3RyaW5nKGEsMjU2KTtcbiAgICAgICAgZWxzZSB0aGlzLmZyb21TdHJpbmcoYSxiKTtcbiAgICB9XG5cbiAgICAvLyByZXR1cm4gbmV3LCB1bnNldCBCaWdJbnRlZ2VyXG4gICAgZnVuY3Rpb24gbmJpKCkgeyByZXR1cm4gbmV3IEJpZ0ludGVnZXIobnVsbCk7IH1cblxuICAgIC8vIGFtOiBDb21wdXRlIHdfaiArPSAoeCp0aGlzX2kpLCBwcm9wYWdhdGUgY2FycmllcyxcbiAgICAvLyBjIGlzIGluaXRpYWwgY2FycnksIHJldHVybnMgZmluYWwgY2FycnkuXG4gICAgLy8gYyA8IDMqZHZhbHVlLCB4IDwgMipkdmFsdWUsIHRoaXNfaSA8IGR2YWx1ZVxuICAgIC8vIFdlIG5lZWQgdG8gc2VsZWN0IHRoZSBmYXN0ZXN0IG9uZSB0aGF0IHdvcmtzIGluIHRoaXMgZW52aXJvbm1lbnQuXG5cbiAgICAvLyBhbTE6IHVzZSBhIHNpbmdsZSBtdWx0IGFuZCBkaXZpZGUgdG8gZ2V0IHRoZSBoaWdoIGJpdHMsXG4gICAgLy8gbWF4IGRpZ2l0IGJpdHMgc2hvdWxkIGJlIDI2IGJlY2F1c2VcbiAgICAvLyBtYXggaW50ZXJuYWwgdmFsdWUgPSAyKmR2YWx1ZV4yLTIqZHZhbHVlICg8IDJeNTMpXG4gICAgZnVuY3Rpb24gYW0xKGkseCx3LGosYyxuKSB7XG4gICAgICB3aGlsZSgtLW4gPj0gMCkge1xuICAgICAgICB2YXIgdiA9IHgqdGhpc1tpKytdK3dbal0rYztcbiAgICAgICAgYyA9IE1hdGguZmxvb3Iodi8weDQwMDAwMDApO1xuICAgICAgICB3W2orK10gPSB2JjB4M2ZmZmZmZjtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjO1xuICAgIH1cbiAgICAvLyBhbTIgYXZvaWRzIGEgYmlnIG11bHQtYW5kLWV4dHJhY3QgY29tcGxldGVseS5cbiAgICAvLyBNYXggZGlnaXQgYml0cyBzaG91bGQgYmUgPD0gMzAgYmVjYXVzZSB3ZSBkbyBiaXR3aXNlIG9wc1xuICAgIC8vIG9uIHZhbHVlcyB1cCB0byAyKmhkdmFsdWVeMi1oZHZhbHVlLTEgKDwgMl4zMSlcbiAgICBmdW5jdGlvbiBhbTIoaSx4LHcsaixjLG4pIHtcbiAgICAgIHZhciB4bCA9IHgmMHg3ZmZmLCB4aCA9IHg+PjE1O1xuICAgICAgd2hpbGUoLS1uID49IDApIHtcbiAgICAgICAgdmFyIGwgPSB0aGlzW2ldJjB4N2ZmZjtcbiAgICAgICAgdmFyIGggPSB0aGlzW2krK10+PjE1O1xuICAgICAgICB2YXIgbSA9IHhoKmwraCp4bDtcbiAgICAgICAgbCA9IHhsKmwrKChtJjB4N2ZmZik8PDE1KSt3W2pdKyhjJjB4M2ZmZmZmZmYpO1xuICAgICAgICBjID0gKGw+Pj4zMCkrKG0+Pj4xNSkreGgqaCsoYz4+PjMwKTtcbiAgICAgICAgd1tqKytdID0gbCYweDNmZmZmZmZmO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGM7XG4gICAgfVxuICAgIC8vIEFsdGVybmF0ZWx5LCBzZXQgbWF4IGRpZ2l0IGJpdHMgdG8gMjggc2luY2Ugc29tZVxuICAgIC8vIGJyb3dzZXJzIHNsb3cgZG93biB3aGVuIGRlYWxpbmcgd2l0aCAzMi1iaXQgbnVtYmVycy5cbiAgICBmdW5jdGlvbiBhbTMoaSx4LHcsaixjLG4pIHtcbiAgICAgIHZhciB4bCA9IHgmMHgzZmZmLCB4aCA9IHg+PjE0O1xuICAgICAgd2hpbGUoLS1uID49IDApIHtcbiAgICAgICAgdmFyIGwgPSB0aGlzW2ldJjB4M2ZmZjtcbiAgICAgICAgdmFyIGggPSB0aGlzW2krK10+PjE0O1xuICAgICAgICB2YXIgbSA9IHhoKmwraCp4bDtcbiAgICAgICAgbCA9IHhsKmwrKChtJjB4M2ZmZik8PDE0KSt3W2pdK2M7XG4gICAgICAgIGMgPSAobD4+MjgpKyhtPj4xNCkreGgqaDtcbiAgICAgICAgd1tqKytdID0gbCYweGZmZmZmZmY7XG4gICAgICB9XG4gICAgICByZXR1cm4gYztcbiAgICB9XG4gICAgdmFyIGluQnJvd3NlciA9IHR5cGVvZiBuYXZpZ2F0b3IgIT09IFwidW5kZWZpbmVkXCI7XG4gICAgaWYoaW5Ccm93c2VyICYmIGpfbG0gJiYgKG5hdmlnYXRvci5hcHBOYW1lID09IFwiTWljcm9zb2Z0IEludGVybmV0IEV4cGxvcmVyXCIpKSB7XG4gICAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5hbSA9IGFtMjtcbiAgICAgIGRiaXRzID0gMzA7XG4gICAgfVxuICAgIGVsc2UgaWYoaW5Ccm93c2VyICYmIGpfbG0gJiYgKG5hdmlnYXRvci5hcHBOYW1lICE9IFwiTmV0c2NhcGVcIikpIHtcbiAgICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLmFtID0gYW0xO1xuICAgICAgZGJpdHMgPSAyNjtcbiAgICB9XG4gICAgZWxzZSB7IC8vIE1vemlsbGEvTmV0c2NhcGUgc2VlbXMgdG8gcHJlZmVyIGFtM1xuICAgICAgQmlnSW50ZWdlci5wcm90b3R5cGUuYW0gPSBhbTM7XG4gICAgICBkYml0cyA9IDI4O1xuICAgIH1cblxuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLkRCID0gZGJpdHM7XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUuRE0gPSAoKDE8PGRiaXRzKS0xKTtcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5EViA9ICgxPDxkYml0cyk7XG5cbiAgICB2YXIgQklfRlAgPSA1MjtcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5GViA9IE1hdGgucG93KDIsQklfRlApO1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLkYxID0gQklfRlAtZGJpdHM7XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUuRjIgPSAyKmRiaXRzLUJJX0ZQO1xuXG4gICAgLy8gRGlnaXQgY29udmVyc2lvbnNcbiAgICB2YXIgQklfUk0gPSBcIjAxMjM0NTY3ODlhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5elwiO1xuICAgIHZhciBCSV9SQyA9IG5ldyBBcnJheSgpO1xuICAgIHZhciBycix2djtcbiAgICByciA9IFwiMFwiLmNoYXJDb2RlQXQoMCk7XG4gICAgZm9yKHZ2ID0gMDsgdnYgPD0gOTsgKyt2dikgQklfUkNbcnIrK10gPSB2djtcbiAgICByciA9IFwiYVwiLmNoYXJDb2RlQXQoMCk7XG4gICAgZm9yKHZ2ID0gMTA7IHZ2IDwgMzY7ICsrdnYpIEJJX1JDW3JyKytdID0gdnY7XG4gICAgcnIgPSBcIkFcIi5jaGFyQ29kZUF0KDApO1xuICAgIGZvcih2diA9IDEwOyB2diA8IDM2OyArK3Z2KSBCSV9SQ1tycisrXSA9IHZ2O1xuXG4gICAgZnVuY3Rpb24gaW50MmNoYXIobikgeyByZXR1cm4gQklfUk0uY2hhckF0KG4pOyB9XG4gICAgZnVuY3Rpb24gaW50QXQocyxpKSB7XG4gICAgICB2YXIgYyA9IEJJX1JDW3MuY2hhckNvZGVBdChpKV07XG4gICAgICByZXR1cm4gKGM9PW51bGwpPy0xOmM7XG4gICAgfVxuXG4gICAgLy8gKHByb3RlY3RlZCkgY29weSB0aGlzIHRvIHJcbiAgICBmdW5jdGlvbiBibnBDb3B5VG8ocikge1xuICAgICAgZm9yKHZhciBpID0gdGhpcy50LTE7IGkgPj0gMDsgLS1pKSByW2ldID0gdGhpc1tpXTtcbiAgICAgIHIudCA9IHRoaXMudDtcbiAgICAgIHIucyA9IHRoaXMucztcbiAgICB9XG5cbiAgICAvLyAocHJvdGVjdGVkKSBzZXQgZnJvbSBpbnRlZ2VyIHZhbHVlIHgsIC1EViA8PSB4IDwgRFZcbiAgICBmdW5jdGlvbiBibnBGcm9tSW50KHgpIHtcbiAgICAgIHRoaXMudCA9IDE7XG4gICAgICB0aGlzLnMgPSAoeDwwKT8tMTowO1xuICAgICAgaWYoeCA+IDApIHRoaXNbMF0gPSB4O1xuICAgICAgZWxzZSBpZih4IDwgLTEpIHRoaXNbMF0gPSB4K3RoaXMuRFY7XG4gICAgICBlbHNlIHRoaXMudCA9IDA7XG4gICAgfVxuXG4gICAgLy8gcmV0dXJuIGJpZ2ludCBpbml0aWFsaXplZCB0byB2YWx1ZVxuICAgIGZ1bmN0aW9uIG5idihpKSB7IHZhciByID0gbmJpKCk7IHIuZnJvbUludChpKTsgcmV0dXJuIHI7IH1cblxuICAgIC8vIChwcm90ZWN0ZWQpIHNldCBmcm9tIHN0cmluZyBhbmQgcmFkaXhcbiAgICBmdW5jdGlvbiBibnBGcm9tU3RyaW5nKHMsYikge1xuICAgICAgdmFyIGs7XG4gICAgICBpZihiID09IDE2KSBrID0gNDtcbiAgICAgIGVsc2UgaWYoYiA9PSA4KSBrID0gMztcbiAgICAgIGVsc2UgaWYoYiA9PSAyNTYpIGsgPSA4OyAvLyBieXRlIGFycmF5XG4gICAgICBlbHNlIGlmKGIgPT0gMikgayA9IDE7XG4gICAgICBlbHNlIGlmKGIgPT0gMzIpIGsgPSA1O1xuICAgICAgZWxzZSBpZihiID09IDQpIGsgPSAyO1xuICAgICAgZWxzZSB7IHRoaXMuZnJvbVJhZGl4KHMsYik7IHJldHVybjsgfVxuICAgICAgdGhpcy50ID0gMDtcbiAgICAgIHRoaXMucyA9IDA7XG4gICAgICB2YXIgaSA9IHMubGVuZ3RoLCBtaSA9IGZhbHNlLCBzaCA9IDA7XG4gICAgICB3aGlsZSgtLWkgPj0gMCkge1xuICAgICAgICB2YXIgeCA9IChrPT04KT9zW2ldJjB4ZmY6aW50QXQocyxpKTtcbiAgICAgICAgaWYoeCA8IDApIHtcbiAgICAgICAgICBpZihzLmNoYXJBdChpKSA9PSBcIi1cIikgbWkgPSB0cnVlO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIG1pID0gZmFsc2U7XG4gICAgICAgIGlmKHNoID09IDApXG4gICAgICAgICAgdGhpc1t0aGlzLnQrK10gPSB4O1xuICAgICAgICBlbHNlIGlmKHNoK2sgPiB0aGlzLkRCKSB7XG4gICAgICAgICAgdGhpc1t0aGlzLnQtMV0gfD0gKHgmKCgxPDwodGhpcy5EQi1zaCkpLTEpKTw8c2g7XG4gICAgICAgICAgdGhpc1t0aGlzLnQrK10gPSAoeD4+KHRoaXMuREItc2gpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgICAgdGhpc1t0aGlzLnQtMV0gfD0geDw8c2g7XG4gICAgICAgIHNoICs9IGs7XG4gICAgICAgIGlmKHNoID49IHRoaXMuREIpIHNoIC09IHRoaXMuREI7XG4gICAgICB9XG4gICAgICBpZihrID09IDggJiYgKHNbMF0mMHg4MCkgIT0gMCkge1xuICAgICAgICB0aGlzLnMgPSAtMTtcbiAgICAgICAgaWYoc2ggPiAwKSB0aGlzW3RoaXMudC0xXSB8PSAoKDE8PCh0aGlzLkRCLXNoKSktMSk8PHNoO1xuICAgICAgfVxuICAgICAgdGhpcy5jbGFtcCgpO1xuICAgICAgaWYobWkpIEJpZ0ludGVnZXIuWkVSTy5zdWJUbyh0aGlzLHRoaXMpO1xuICAgIH1cblxuICAgIC8vIChwcm90ZWN0ZWQpIGNsYW1wIG9mZiBleGNlc3MgaGlnaCB3b3Jkc1xuICAgIGZ1bmN0aW9uIGJucENsYW1wKCkge1xuICAgICAgdmFyIGMgPSB0aGlzLnMmdGhpcy5ETTtcbiAgICAgIHdoaWxlKHRoaXMudCA+IDAgJiYgdGhpc1t0aGlzLnQtMV0gPT0gYykgLS10aGlzLnQ7XG4gICAgfVxuXG4gICAgLy8gKHB1YmxpYykgcmV0dXJuIHN0cmluZyByZXByZXNlbnRhdGlvbiBpbiBnaXZlbiByYWRpeFxuICAgIGZ1bmN0aW9uIGJuVG9TdHJpbmcoYikge1xuICAgICAgaWYodGhpcy5zIDwgMCkgcmV0dXJuIFwiLVwiK3RoaXMubmVnYXRlKCkudG9TdHJpbmcoYik7XG4gICAgICB2YXIgaztcbiAgICAgIGlmKGIgPT0gMTYpIGsgPSA0O1xuICAgICAgZWxzZSBpZihiID09IDgpIGsgPSAzO1xuICAgICAgZWxzZSBpZihiID09IDIpIGsgPSAxO1xuICAgICAgZWxzZSBpZihiID09IDMyKSBrID0gNTtcbiAgICAgIGVsc2UgaWYoYiA9PSA0KSBrID0gMjtcbiAgICAgIGVsc2UgcmV0dXJuIHRoaXMudG9SYWRpeChiKTtcbiAgICAgIHZhciBrbSA9ICgxPDxrKS0xLCBkLCBtID0gZmFsc2UsIHIgPSBcIlwiLCBpID0gdGhpcy50O1xuICAgICAgdmFyIHAgPSB0aGlzLkRCLShpKnRoaXMuREIpJWs7XG4gICAgICBpZihpLS0gPiAwKSB7XG4gICAgICAgIGlmKHAgPCB0aGlzLkRCICYmIChkID0gdGhpc1tpXT4+cCkgPiAwKSB7IG0gPSB0cnVlOyByID0gaW50MmNoYXIoZCk7IH1cbiAgICAgICAgd2hpbGUoaSA+PSAwKSB7XG4gICAgICAgICAgaWYocCA8IGspIHtcbiAgICAgICAgICAgIGQgPSAodGhpc1tpXSYoKDE8PHApLTEpKTw8KGstcCk7XG4gICAgICAgICAgICBkIHw9IHRoaXNbLS1pXT4+KHArPXRoaXMuREItayk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZCA9ICh0aGlzW2ldPj4ocC09aykpJmttO1xuICAgICAgICAgICAgaWYocCA8PSAwKSB7IHAgKz0gdGhpcy5EQjsgLS1pOyB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmKGQgPiAwKSBtID0gdHJ1ZTtcbiAgICAgICAgICBpZihtKSByICs9IGludDJjaGFyKGQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbT9yOlwiMFwiO1xuICAgIH1cblxuICAgIC8vIChwdWJsaWMpIC10aGlzXG4gICAgZnVuY3Rpb24gYm5OZWdhdGUoKSB7IHZhciByID0gbmJpKCk7IEJpZ0ludGVnZXIuWkVSTy5zdWJUbyh0aGlzLHIpOyByZXR1cm4gcjsgfVxuXG4gICAgLy8gKHB1YmxpYykgfHRoaXN8XG4gICAgZnVuY3Rpb24gYm5BYnMoKSB7IHJldHVybiAodGhpcy5zPDApP3RoaXMubmVnYXRlKCk6dGhpczsgfVxuXG4gICAgLy8gKHB1YmxpYykgcmV0dXJuICsgaWYgdGhpcyA+IGEsIC0gaWYgdGhpcyA8IGEsIDAgaWYgZXF1YWxcbiAgICBmdW5jdGlvbiBibkNvbXBhcmVUbyhhKSB7XG4gICAgICB2YXIgciA9IHRoaXMucy1hLnM7XG4gICAgICBpZihyICE9IDApIHJldHVybiByO1xuICAgICAgdmFyIGkgPSB0aGlzLnQ7XG4gICAgICByID0gaS1hLnQ7XG4gICAgICBpZihyICE9IDApIHJldHVybiAodGhpcy5zPDApPy1yOnI7XG4gICAgICB3aGlsZSgtLWkgPj0gMCkgaWYoKHI9dGhpc1tpXS1hW2ldKSAhPSAwKSByZXR1cm4gcjtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIC8vIHJldHVybnMgYml0IGxlbmd0aCBvZiB0aGUgaW50ZWdlciB4XG4gICAgZnVuY3Rpb24gbmJpdHMoeCkge1xuICAgICAgdmFyIHIgPSAxLCB0O1xuICAgICAgaWYoKHQ9eD4+PjE2KSAhPSAwKSB7IHggPSB0OyByICs9IDE2OyB9XG4gICAgICBpZigodD14Pj44KSAhPSAwKSB7IHggPSB0OyByICs9IDg7IH1cbiAgICAgIGlmKCh0PXg+PjQpICE9IDApIHsgeCA9IHQ7IHIgKz0gNDsgfVxuICAgICAgaWYoKHQ9eD4+MikgIT0gMCkgeyB4ID0gdDsgciArPSAyOyB9XG4gICAgICBpZigodD14Pj4xKSAhPSAwKSB7IHggPSB0OyByICs9IDE7IH1cbiAgICAgIHJldHVybiByO1xuICAgIH1cblxuICAgIC8vIChwdWJsaWMpIHJldHVybiB0aGUgbnVtYmVyIG9mIGJpdHMgaW4gXCJ0aGlzXCJcbiAgICBmdW5jdGlvbiBibkJpdExlbmd0aCgpIHtcbiAgICAgIGlmKHRoaXMudCA8PSAwKSByZXR1cm4gMDtcbiAgICAgIHJldHVybiB0aGlzLkRCKih0aGlzLnQtMSkrbmJpdHModGhpc1t0aGlzLnQtMV1eKHRoaXMucyZ0aGlzLkRNKSk7XG4gICAgfVxuXG4gICAgLy8gKHByb3RlY3RlZCkgciA9IHRoaXMgPDwgbipEQlxuICAgIGZ1bmN0aW9uIGJucERMU2hpZnRUbyhuLHIpIHtcbiAgICAgIHZhciBpO1xuICAgICAgZm9yKGkgPSB0aGlzLnQtMTsgaSA+PSAwOyAtLWkpIHJbaStuXSA9IHRoaXNbaV07XG4gICAgICBmb3IoaSA9IG4tMTsgaSA+PSAwOyAtLWkpIHJbaV0gPSAwO1xuICAgICAgci50ID0gdGhpcy50K247XG4gICAgICByLnMgPSB0aGlzLnM7XG4gICAgfVxuXG4gICAgLy8gKHByb3RlY3RlZCkgciA9IHRoaXMgPj4gbipEQlxuICAgIGZ1bmN0aW9uIGJucERSU2hpZnRUbyhuLHIpIHtcbiAgICAgIGZvcih2YXIgaSA9IG47IGkgPCB0aGlzLnQ7ICsraSkgcltpLW5dID0gdGhpc1tpXTtcbiAgICAgIHIudCA9IE1hdGgubWF4KHRoaXMudC1uLDApO1xuICAgICAgci5zID0gdGhpcy5zO1xuICAgIH1cblxuICAgIC8vIChwcm90ZWN0ZWQpIHIgPSB0aGlzIDw8IG5cbiAgICBmdW5jdGlvbiBibnBMU2hpZnRUbyhuLHIpIHtcbiAgICAgIHZhciBicyA9IG4ldGhpcy5EQjtcbiAgICAgIHZhciBjYnMgPSB0aGlzLkRCLWJzO1xuICAgICAgdmFyIGJtID0gKDE8PGNicyktMTtcbiAgICAgIHZhciBkcyA9IE1hdGguZmxvb3Iobi90aGlzLkRCKSwgYyA9ICh0aGlzLnM8PGJzKSZ0aGlzLkRNLCBpO1xuICAgICAgZm9yKGkgPSB0aGlzLnQtMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgcltpK2RzKzFdID0gKHRoaXNbaV0+PmNicyl8YztcbiAgICAgICAgYyA9ICh0aGlzW2ldJmJtKTw8YnM7XG4gICAgICB9XG4gICAgICBmb3IoaSA9IGRzLTE7IGkgPj0gMDsgLS1pKSByW2ldID0gMDtcbiAgICAgIHJbZHNdID0gYztcbiAgICAgIHIudCA9IHRoaXMudCtkcysxO1xuICAgICAgci5zID0gdGhpcy5zO1xuICAgICAgci5jbGFtcCgpO1xuICAgIH1cblxuICAgIC8vIChwcm90ZWN0ZWQpIHIgPSB0aGlzID4+IG5cbiAgICBmdW5jdGlvbiBibnBSU2hpZnRUbyhuLHIpIHtcbiAgICAgIHIucyA9IHRoaXMucztcbiAgICAgIHZhciBkcyA9IE1hdGguZmxvb3Iobi90aGlzLkRCKTtcbiAgICAgIGlmKGRzID49IHRoaXMudCkgeyByLnQgPSAwOyByZXR1cm47IH1cbiAgICAgIHZhciBicyA9IG4ldGhpcy5EQjtcbiAgICAgIHZhciBjYnMgPSB0aGlzLkRCLWJzO1xuICAgICAgdmFyIGJtID0gKDE8PGJzKS0xO1xuICAgICAgclswXSA9IHRoaXNbZHNdPj5icztcbiAgICAgIGZvcih2YXIgaSA9IGRzKzE7IGkgPCB0aGlzLnQ7ICsraSkge1xuICAgICAgICByW2ktZHMtMV0gfD0gKHRoaXNbaV0mYm0pPDxjYnM7XG4gICAgICAgIHJbaS1kc10gPSB0aGlzW2ldPj5icztcbiAgICAgIH1cbiAgICAgIGlmKGJzID4gMCkgclt0aGlzLnQtZHMtMV0gfD0gKHRoaXMucyZibSk8PGNicztcbiAgICAgIHIudCA9IHRoaXMudC1kcztcbiAgICAgIHIuY2xhbXAoKTtcbiAgICB9XG5cbiAgICAvLyAocHJvdGVjdGVkKSByID0gdGhpcyAtIGFcbiAgICBmdW5jdGlvbiBibnBTdWJUbyhhLHIpIHtcbiAgICAgIHZhciBpID0gMCwgYyA9IDAsIG0gPSBNYXRoLm1pbihhLnQsdGhpcy50KTtcbiAgICAgIHdoaWxlKGkgPCBtKSB7XG4gICAgICAgIGMgKz0gdGhpc1tpXS1hW2ldO1xuICAgICAgICByW2krK10gPSBjJnRoaXMuRE07XG4gICAgICAgIGMgPj49IHRoaXMuREI7XG4gICAgICB9XG4gICAgICBpZihhLnQgPCB0aGlzLnQpIHtcbiAgICAgICAgYyAtPSBhLnM7XG4gICAgICAgIHdoaWxlKGkgPCB0aGlzLnQpIHtcbiAgICAgICAgICBjICs9IHRoaXNbaV07XG4gICAgICAgICAgcltpKytdID0gYyZ0aGlzLkRNO1xuICAgICAgICAgIGMgPj49IHRoaXMuREI7XG4gICAgICAgIH1cbiAgICAgICAgYyArPSB0aGlzLnM7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgYyArPSB0aGlzLnM7XG4gICAgICAgIHdoaWxlKGkgPCBhLnQpIHtcbiAgICAgICAgICBjIC09IGFbaV07XG4gICAgICAgICAgcltpKytdID0gYyZ0aGlzLkRNO1xuICAgICAgICAgIGMgPj49IHRoaXMuREI7XG4gICAgICAgIH1cbiAgICAgICAgYyAtPSBhLnM7XG4gICAgICB9XG4gICAgICByLnMgPSAoYzwwKT8tMTowO1xuICAgICAgaWYoYyA8IC0xKSByW2krK10gPSB0aGlzLkRWK2M7XG4gICAgICBlbHNlIGlmKGMgPiAwKSByW2krK10gPSBjO1xuICAgICAgci50ID0gaTtcbiAgICAgIHIuY2xhbXAoKTtcbiAgICB9XG5cbiAgICAvLyAocHJvdGVjdGVkKSByID0gdGhpcyAqIGEsIHIgIT0gdGhpcyxhIChIQUMgMTQuMTIpXG4gICAgLy8gXCJ0aGlzXCIgc2hvdWxkIGJlIHRoZSBsYXJnZXIgb25lIGlmIGFwcHJvcHJpYXRlLlxuICAgIGZ1bmN0aW9uIGJucE11bHRpcGx5VG8oYSxyKSB7XG4gICAgICB2YXIgeCA9IHRoaXMuYWJzKCksIHkgPSBhLmFicygpO1xuICAgICAgdmFyIGkgPSB4LnQ7XG4gICAgICByLnQgPSBpK3kudDtcbiAgICAgIHdoaWxlKC0taSA+PSAwKSByW2ldID0gMDtcbiAgICAgIGZvcihpID0gMDsgaSA8IHkudDsgKytpKSByW2kreC50XSA9IHguYW0oMCx5W2ldLHIsaSwwLHgudCk7XG4gICAgICByLnMgPSAwO1xuICAgICAgci5jbGFtcCgpO1xuICAgICAgaWYodGhpcy5zICE9IGEucykgQmlnSW50ZWdlci5aRVJPLnN1YlRvKHIscik7XG4gICAgfVxuXG4gICAgLy8gKHByb3RlY3RlZCkgciA9IHRoaXNeMiwgciAhPSB0aGlzIChIQUMgMTQuMTYpXG4gICAgZnVuY3Rpb24gYm5wU3F1YXJlVG8ocikge1xuICAgICAgdmFyIHggPSB0aGlzLmFicygpO1xuICAgICAgdmFyIGkgPSByLnQgPSAyKngudDtcbiAgICAgIHdoaWxlKC0taSA+PSAwKSByW2ldID0gMDtcbiAgICAgIGZvcihpID0gMDsgaSA8IHgudC0xOyArK2kpIHtcbiAgICAgICAgdmFyIGMgPSB4LmFtKGkseFtpXSxyLDIqaSwwLDEpO1xuICAgICAgICBpZigocltpK3gudF0rPXguYW0oaSsxLDIqeFtpXSxyLDIqaSsxLGMseC50LWktMSkpID49IHguRFYpIHtcbiAgICAgICAgICByW2kreC50XSAtPSB4LkRWO1xuICAgICAgICAgIHJbaSt4LnQrMV0gPSAxO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZihyLnQgPiAwKSByW3IudC0xXSArPSB4LmFtKGkseFtpXSxyLDIqaSwwLDEpO1xuICAgICAgci5zID0gMDtcbiAgICAgIHIuY2xhbXAoKTtcbiAgICB9XG5cbiAgICAvLyAocHJvdGVjdGVkKSBkaXZpZGUgdGhpcyBieSBtLCBxdW90aWVudCBhbmQgcmVtYWluZGVyIHRvIHEsIHIgKEhBQyAxNC4yMClcbiAgICAvLyByICE9IHEsIHRoaXMgIT0gbS4gIHEgb3IgciBtYXkgYmUgbnVsbC5cbiAgICBmdW5jdGlvbiBibnBEaXZSZW1UbyhtLHEscikge1xuICAgICAgdmFyIHBtID0gbS5hYnMoKTtcbiAgICAgIGlmKHBtLnQgPD0gMCkgcmV0dXJuO1xuICAgICAgdmFyIHB0ID0gdGhpcy5hYnMoKTtcbiAgICAgIGlmKHB0LnQgPCBwbS50KSB7XG4gICAgICAgIGlmKHEgIT0gbnVsbCkgcS5mcm9tSW50KDApO1xuICAgICAgICBpZihyICE9IG51bGwpIHRoaXMuY29weVRvKHIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZihyID09IG51bGwpIHIgPSBuYmkoKTtcbiAgICAgIHZhciB5ID0gbmJpKCksIHRzID0gdGhpcy5zLCBtcyA9IG0ucztcbiAgICAgIHZhciBuc2ggPSB0aGlzLkRCLW5iaXRzKHBtW3BtLnQtMV0pOyAgIC8vIG5vcm1hbGl6ZSBtb2R1bHVzXG4gICAgICBpZihuc2ggPiAwKSB7IHBtLmxTaGlmdFRvKG5zaCx5KTsgcHQubFNoaWZ0VG8obnNoLHIpOyB9XG4gICAgICBlbHNlIHsgcG0uY29weVRvKHkpOyBwdC5jb3B5VG8ocik7IH1cbiAgICAgIHZhciB5cyA9IHkudDtcbiAgICAgIHZhciB5MCA9IHlbeXMtMV07XG4gICAgICBpZih5MCA9PSAwKSByZXR1cm47XG4gICAgICB2YXIgeXQgPSB5MCooMTw8dGhpcy5GMSkrKCh5cz4xKT95W3lzLTJdPj50aGlzLkYyOjApO1xuICAgICAgdmFyIGQxID0gdGhpcy5GVi95dCwgZDIgPSAoMTw8dGhpcy5GMSkveXQsIGUgPSAxPDx0aGlzLkYyO1xuICAgICAgdmFyIGkgPSByLnQsIGogPSBpLXlzLCB0ID0gKHE9PW51bGwpP25iaSgpOnE7XG4gICAgICB5LmRsU2hpZnRUbyhqLHQpO1xuICAgICAgaWYoci5jb21wYXJlVG8odCkgPj0gMCkge1xuICAgICAgICByW3IudCsrXSA9IDE7XG4gICAgICAgIHIuc3ViVG8odCxyKTtcbiAgICAgIH1cbiAgICAgIEJpZ0ludGVnZXIuT05FLmRsU2hpZnRUbyh5cyx0KTtcbiAgICAgIHQuc3ViVG8oeSx5KTsgIC8vIFwibmVnYXRpdmVcIiB5IHNvIHdlIGNhbiByZXBsYWNlIHN1YiB3aXRoIGFtIGxhdGVyXG4gICAgICB3aGlsZSh5LnQgPCB5cykgeVt5LnQrK10gPSAwO1xuICAgICAgd2hpbGUoLS1qID49IDApIHtcbiAgICAgICAgLy8gRXN0aW1hdGUgcXVvdGllbnQgZGlnaXRcbiAgICAgICAgdmFyIHFkID0gKHJbLS1pXT09eTApP3RoaXMuRE06TWF0aC5mbG9vcihyW2ldKmQxKyhyW2ktMV0rZSkqZDIpO1xuICAgICAgICBpZigocltpXSs9eS5hbSgwLHFkLHIsaiwwLHlzKSkgPCBxZCkgeyAgIC8vIFRyeSBpdCBvdXRcbiAgICAgICAgICB5LmRsU2hpZnRUbyhqLHQpO1xuICAgICAgICAgIHIuc3ViVG8odCxyKTtcbiAgICAgICAgICB3aGlsZShyW2ldIDwgLS1xZCkgci5zdWJUbyh0LHIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZihxICE9IG51bGwpIHtcbiAgICAgICAgci5kclNoaWZ0VG8oeXMscSk7XG4gICAgICAgIGlmKHRzICE9IG1zKSBCaWdJbnRlZ2VyLlpFUk8uc3ViVG8ocSxxKTtcbiAgICAgIH1cbiAgICAgIHIudCA9IHlzO1xuICAgICAgci5jbGFtcCgpO1xuICAgICAgaWYobnNoID4gMCkgci5yU2hpZnRUbyhuc2gscik7IC8vIERlbm9ybWFsaXplIHJlbWFpbmRlclxuICAgICAgaWYodHMgPCAwKSBCaWdJbnRlZ2VyLlpFUk8uc3ViVG8ocixyKTtcbiAgICB9XG5cbiAgICAvLyAocHVibGljKSB0aGlzIG1vZCBhXG4gICAgZnVuY3Rpb24gYm5Nb2QoYSkge1xuICAgICAgdmFyIHIgPSBuYmkoKTtcbiAgICAgIHRoaXMuYWJzKCkuZGl2UmVtVG8oYSxudWxsLHIpO1xuICAgICAgaWYodGhpcy5zIDwgMCAmJiByLmNvbXBhcmVUbyhCaWdJbnRlZ2VyLlpFUk8pID4gMCkgYS5zdWJUbyhyLHIpO1xuICAgICAgcmV0dXJuIHI7XG4gICAgfVxuXG4gICAgLy8gTW9kdWxhciByZWR1Y3Rpb24gdXNpbmcgXCJjbGFzc2ljXCIgYWxnb3JpdGhtXG4gICAgZnVuY3Rpb24gQ2xhc3NpYyhtKSB7IHRoaXMubSA9IG07IH1cbiAgICBmdW5jdGlvbiBjQ29udmVydCh4KSB7XG4gICAgICBpZih4LnMgPCAwIHx8IHguY29tcGFyZVRvKHRoaXMubSkgPj0gMCkgcmV0dXJuIHgubW9kKHRoaXMubSk7XG4gICAgICBlbHNlIHJldHVybiB4O1xuICAgIH1cbiAgICBmdW5jdGlvbiBjUmV2ZXJ0KHgpIHsgcmV0dXJuIHg7IH1cbiAgICBmdW5jdGlvbiBjUmVkdWNlKHgpIHsgeC5kaXZSZW1Ubyh0aGlzLm0sbnVsbCx4KTsgfVxuICAgIGZ1bmN0aW9uIGNNdWxUbyh4LHkscikgeyB4Lm11bHRpcGx5VG8oeSxyKTsgdGhpcy5yZWR1Y2Uocik7IH1cbiAgICBmdW5jdGlvbiBjU3FyVG8oeCxyKSB7IHguc3F1YXJlVG8ocik7IHRoaXMucmVkdWNlKHIpOyB9XG5cbiAgICBDbGFzc2ljLnByb3RvdHlwZS5jb252ZXJ0ID0gY0NvbnZlcnQ7XG4gICAgQ2xhc3NpYy5wcm90b3R5cGUucmV2ZXJ0ID0gY1JldmVydDtcbiAgICBDbGFzc2ljLnByb3RvdHlwZS5yZWR1Y2UgPSBjUmVkdWNlO1xuICAgIENsYXNzaWMucHJvdG90eXBlLm11bFRvID0gY011bFRvO1xuICAgIENsYXNzaWMucHJvdG90eXBlLnNxclRvID0gY1NxclRvO1xuXG4gICAgLy8gKHByb3RlY3RlZCkgcmV0dXJuIFwiLTEvdGhpcyAlIDJeREJcIjsgdXNlZnVsIGZvciBNb250LiByZWR1Y3Rpb25cbiAgICAvLyBqdXN0aWZpY2F0aW9uOlxuICAgIC8vICAgICAgICAgeHkgPT0gMSAobW9kIG0pXG4gICAgLy8gICAgICAgICB4eSA9ICAxK2ttXG4gICAgLy8gICB4eSgyLXh5KSA9ICgxK2ttKSgxLWttKVxuICAgIC8vIHhbeSgyLXh5KV0gPSAxLWteMm1eMlxuICAgIC8vIHhbeSgyLXh5KV0gPT0gMSAobW9kIG1eMilcbiAgICAvLyBpZiB5IGlzIDEveCBtb2QgbSwgdGhlbiB5KDIteHkpIGlzIDEveCBtb2QgbV4yXG4gICAgLy8gc2hvdWxkIHJlZHVjZSB4IGFuZCB5KDIteHkpIGJ5IG1eMiBhdCBlYWNoIHN0ZXAgdG8ga2VlcCBzaXplIGJvdW5kZWQuXG4gICAgLy8gSlMgbXVsdGlwbHkgXCJvdmVyZmxvd3NcIiBkaWZmZXJlbnRseSBmcm9tIEMvQysrLCBzbyBjYXJlIGlzIG5lZWRlZCBoZXJlLlxuICAgIGZ1bmN0aW9uIGJucEludkRpZ2l0KCkge1xuICAgICAgaWYodGhpcy50IDwgMSkgcmV0dXJuIDA7XG4gICAgICB2YXIgeCA9IHRoaXNbMF07XG4gICAgICBpZigoeCYxKSA9PSAwKSByZXR1cm4gMDtcbiAgICAgIHZhciB5ID0geCYzOyAgICAgICAvLyB5ID09IDEveCBtb2QgMl4yXG4gICAgICB5ID0gKHkqKDItKHgmMHhmKSp5KSkmMHhmOyAvLyB5ID09IDEveCBtb2QgMl40XG4gICAgICB5ID0gKHkqKDItKHgmMHhmZikqeSkpJjB4ZmY7ICAgLy8geSA9PSAxL3ggbW9kIDJeOFxuICAgICAgeSA9ICh5KigyLSgoKHgmMHhmZmZmKSp5KSYweGZmZmYpKSkmMHhmZmZmOyAgICAvLyB5ID09IDEveCBtb2QgMl4xNlxuICAgICAgLy8gbGFzdCBzdGVwIC0gY2FsY3VsYXRlIGludmVyc2UgbW9kIERWIGRpcmVjdGx5O1xuICAgICAgLy8gYXNzdW1lcyAxNiA8IERCIDw9IDMyIGFuZCBhc3N1bWVzIGFiaWxpdHkgdG8gaGFuZGxlIDQ4LWJpdCBpbnRzXG4gICAgICB5ID0gKHkqKDIteCp5JXRoaXMuRFYpKSV0aGlzLkRWOyAgICAgICAvLyB5ID09IDEveCBtb2QgMl5kYml0c1xuICAgICAgLy8gd2UgcmVhbGx5IHdhbnQgdGhlIG5lZ2F0aXZlIGludmVyc2UsIGFuZCAtRFYgPCB5IDwgRFZcbiAgICAgIHJldHVybiAoeT4wKT90aGlzLkRWLXk6LXk7XG4gICAgfVxuXG4gICAgLy8gTW9udGdvbWVyeSByZWR1Y3Rpb25cbiAgICBmdW5jdGlvbiBNb250Z29tZXJ5KG0pIHtcbiAgICAgIHRoaXMubSA9IG07XG4gICAgICB0aGlzLm1wID0gbS5pbnZEaWdpdCgpO1xuICAgICAgdGhpcy5tcGwgPSB0aGlzLm1wJjB4N2ZmZjtcbiAgICAgIHRoaXMubXBoID0gdGhpcy5tcD4+MTU7XG4gICAgICB0aGlzLnVtID0gKDE8PChtLkRCLTE1KSktMTtcbiAgICAgIHRoaXMubXQyID0gMiptLnQ7XG4gICAgfVxuXG4gICAgLy8geFIgbW9kIG1cbiAgICBmdW5jdGlvbiBtb250Q29udmVydCh4KSB7XG4gICAgICB2YXIgciA9IG5iaSgpO1xuICAgICAgeC5hYnMoKS5kbFNoaWZ0VG8odGhpcy5tLnQscik7XG4gICAgICByLmRpdlJlbVRvKHRoaXMubSxudWxsLHIpO1xuICAgICAgaWYoeC5zIDwgMCAmJiByLmNvbXBhcmVUbyhCaWdJbnRlZ2VyLlpFUk8pID4gMCkgdGhpcy5tLnN1YlRvKHIscik7XG4gICAgICByZXR1cm4gcjtcbiAgICB9XG5cbiAgICAvLyB4L1IgbW9kIG1cbiAgICBmdW5jdGlvbiBtb250UmV2ZXJ0KHgpIHtcbiAgICAgIHZhciByID0gbmJpKCk7XG4gICAgICB4LmNvcHlUbyhyKTtcbiAgICAgIHRoaXMucmVkdWNlKHIpO1xuICAgICAgcmV0dXJuIHI7XG4gICAgfVxuXG4gICAgLy8geCA9IHgvUiBtb2QgbSAoSEFDIDE0LjMyKVxuICAgIGZ1bmN0aW9uIG1vbnRSZWR1Y2UoeCkge1xuICAgICAgd2hpbGUoeC50IDw9IHRoaXMubXQyKSAvLyBwYWQgeCBzbyBhbSBoYXMgZW5vdWdoIHJvb20gbGF0ZXJcbiAgICAgICAgeFt4LnQrK10gPSAwO1xuICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHRoaXMubS50OyArK2kpIHtcbiAgICAgICAgLy8gZmFzdGVyIHdheSBvZiBjYWxjdWxhdGluZyB1MCA9IHhbaV0qbXAgbW9kIERWXG4gICAgICAgIHZhciBqID0geFtpXSYweDdmZmY7XG4gICAgICAgIHZhciB1MCA9IChqKnRoaXMubXBsKygoKGoqdGhpcy5tcGgrKHhbaV0+PjE1KSp0aGlzLm1wbCkmdGhpcy51bSk8PDE1KSkmeC5ETTtcbiAgICAgICAgLy8gdXNlIGFtIHRvIGNvbWJpbmUgdGhlIG11bHRpcGx5LXNoaWZ0LWFkZCBpbnRvIG9uZSBjYWxsXG4gICAgICAgIGogPSBpK3RoaXMubS50O1xuICAgICAgICB4W2pdICs9IHRoaXMubS5hbSgwLHUwLHgsaSwwLHRoaXMubS50KTtcbiAgICAgICAgLy8gcHJvcGFnYXRlIGNhcnJ5XG4gICAgICAgIHdoaWxlKHhbal0gPj0geC5EVikgeyB4W2pdIC09IHguRFY7IHhbKytqXSsrOyB9XG4gICAgICB9XG4gICAgICB4LmNsYW1wKCk7XG4gICAgICB4LmRyU2hpZnRUbyh0aGlzLm0udCx4KTtcbiAgICAgIGlmKHguY29tcGFyZVRvKHRoaXMubSkgPj0gMCkgeC5zdWJUbyh0aGlzLm0seCk7XG4gICAgfVxuXG4gICAgLy8gciA9IFwieF4yL1IgbW9kIG1cIjsgeCAhPSByXG4gICAgZnVuY3Rpb24gbW9udFNxclRvKHgscikgeyB4LnNxdWFyZVRvKHIpOyB0aGlzLnJlZHVjZShyKTsgfVxuXG4gICAgLy8gciA9IFwieHkvUiBtb2QgbVwiOyB4LHkgIT0gclxuICAgIGZ1bmN0aW9uIG1vbnRNdWxUbyh4LHkscikgeyB4Lm11bHRpcGx5VG8oeSxyKTsgdGhpcy5yZWR1Y2Uocik7IH1cblxuICAgIE1vbnRnb21lcnkucHJvdG90eXBlLmNvbnZlcnQgPSBtb250Q29udmVydDtcbiAgICBNb250Z29tZXJ5LnByb3RvdHlwZS5yZXZlcnQgPSBtb250UmV2ZXJ0O1xuICAgIE1vbnRnb21lcnkucHJvdG90eXBlLnJlZHVjZSA9IG1vbnRSZWR1Y2U7XG4gICAgTW9udGdvbWVyeS5wcm90b3R5cGUubXVsVG8gPSBtb250TXVsVG87XG4gICAgTW9udGdvbWVyeS5wcm90b3R5cGUuc3FyVG8gPSBtb250U3FyVG87XG5cbiAgICAvLyAocHJvdGVjdGVkKSB0cnVlIGlmZiB0aGlzIGlzIGV2ZW5cbiAgICBmdW5jdGlvbiBibnBJc0V2ZW4oKSB7IHJldHVybiAoKHRoaXMudD4wKT8odGhpc1swXSYxKTp0aGlzLnMpID09IDA7IH1cblxuICAgIC8vIChwcm90ZWN0ZWQpIHRoaXNeZSwgZSA8IDJeMzIsIGRvaW5nIHNxciBhbmQgbXVsIHdpdGggXCJyXCIgKEhBQyAxNC43OSlcbiAgICBmdW5jdGlvbiBibnBFeHAoZSx6KSB7XG4gICAgICBpZihlID4gMHhmZmZmZmZmZiB8fCBlIDwgMSkgcmV0dXJuIEJpZ0ludGVnZXIuT05FO1xuICAgICAgdmFyIHIgPSBuYmkoKSwgcjIgPSBuYmkoKSwgZyA9IHouY29udmVydCh0aGlzKSwgaSA9IG5iaXRzKGUpLTE7XG4gICAgICBnLmNvcHlUbyhyKTtcbiAgICAgIHdoaWxlKC0taSA+PSAwKSB7XG4gICAgICAgIHouc3FyVG8ocixyMik7XG4gICAgICAgIGlmKChlJigxPDxpKSkgPiAwKSB6Lm11bFRvKHIyLGcscik7XG4gICAgICAgIGVsc2UgeyB2YXIgdCA9IHI7IHIgPSByMjsgcjIgPSB0OyB9XG4gICAgICB9XG4gICAgICByZXR1cm4gei5yZXZlcnQocik7XG4gICAgfVxuXG4gICAgLy8gKHB1YmxpYykgdGhpc15lICUgbSwgMCA8PSBlIDwgMl4zMlxuICAgIGZ1bmN0aW9uIGJuTW9kUG93SW50KGUsbSkge1xuICAgICAgdmFyIHo7XG4gICAgICBpZihlIDwgMjU2IHx8IG0uaXNFdmVuKCkpIHogPSBuZXcgQ2xhc3NpYyhtKTsgZWxzZSB6ID0gbmV3IE1vbnRnb21lcnkobSk7XG4gICAgICByZXR1cm4gdGhpcy5leHAoZSx6KTtcbiAgICB9XG5cbiAgICAvLyBwcm90ZWN0ZWRcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5jb3B5VG8gPSBibnBDb3B5VG87XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUuZnJvbUludCA9IGJucEZyb21JbnQ7XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUuZnJvbVN0cmluZyA9IGJucEZyb21TdHJpbmc7XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUuY2xhbXAgPSBibnBDbGFtcDtcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5kbFNoaWZ0VG8gPSBibnBETFNoaWZ0VG87XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUuZHJTaGlmdFRvID0gYm5wRFJTaGlmdFRvO1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLmxTaGlmdFRvID0gYm5wTFNoaWZ0VG87XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUuclNoaWZ0VG8gPSBibnBSU2hpZnRUbztcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5zdWJUbyA9IGJucFN1YlRvO1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLm11bHRpcGx5VG8gPSBibnBNdWx0aXBseVRvO1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLnNxdWFyZVRvID0gYm5wU3F1YXJlVG87XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUuZGl2UmVtVG8gPSBibnBEaXZSZW1UbztcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5pbnZEaWdpdCA9IGJucEludkRpZ2l0O1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLmlzRXZlbiA9IGJucElzRXZlbjtcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5leHAgPSBibnBFeHA7XG5cbiAgICAvLyBwdWJsaWNcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS50b1N0cmluZyA9IGJuVG9TdHJpbmc7XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUubmVnYXRlID0gYm5OZWdhdGU7XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUuYWJzID0gYm5BYnM7XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUuY29tcGFyZVRvID0gYm5Db21wYXJlVG87XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUuYml0TGVuZ3RoID0gYm5CaXRMZW5ndGg7XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUubW9kID0gYm5Nb2Q7XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUubW9kUG93SW50ID0gYm5Nb2RQb3dJbnQ7XG5cbiAgICAvLyBcImNvbnN0YW50c1wiXG4gICAgQmlnSW50ZWdlci5aRVJPID0gbmJ2KDApO1xuICAgIEJpZ0ludGVnZXIuT05FID0gbmJ2KDEpO1xuXG4gICAgLy8gQ29weXJpZ2h0IChjKSAyMDA1LTIwMDkgIFRvbSBXdVxuICAgIC8vIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gICAgLy8gU2VlIFwiTElDRU5TRVwiIGZvciBkZXRhaWxzLlxuXG4gICAgLy8gRXh0ZW5kZWQgSmF2YVNjcmlwdCBCTiBmdW5jdGlvbnMsIHJlcXVpcmVkIGZvciBSU0EgcHJpdmF0ZSBvcHMuXG5cbiAgICAvLyBWZXJzaW9uIDEuMTogbmV3IEJpZ0ludGVnZXIoXCIwXCIsIDEwKSByZXR1cm5zIFwicHJvcGVyXCIgemVyb1xuICAgIC8vIFZlcnNpb24gMS4yOiBzcXVhcmUoKSBBUEksIGlzUHJvYmFibGVQcmltZSBmaXhcblxuICAgIC8vIChwdWJsaWMpXG4gICAgZnVuY3Rpb24gYm5DbG9uZSgpIHsgdmFyIHIgPSBuYmkoKTsgdGhpcy5jb3B5VG8ocik7IHJldHVybiByOyB9XG5cbiAgICAvLyAocHVibGljKSByZXR1cm4gdmFsdWUgYXMgaW50ZWdlclxuICAgIGZ1bmN0aW9uIGJuSW50VmFsdWUoKSB7XG4gICAgICBpZih0aGlzLnMgPCAwKSB7XG4gICAgICAgIGlmKHRoaXMudCA9PSAxKSByZXR1cm4gdGhpc1swXS10aGlzLkRWO1xuICAgICAgICBlbHNlIGlmKHRoaXMudCA9PSAwKSByZXR1cm4gLTE7XG4gICAgICB9XG4gICAgICBlbHNlIGlmKHRoaXMudCA9PSAxKSByZXR1cm4gdGhpc1swXTtcbiAgICAgIGVsc2UgaWYodGhpcy50ID09IDApIHJldHVybiAwO1xuICAgICAgLy8gYXNzdW1lcyAxNiA8IERCIDwgMzJcbiAgICAgIHJldHVybiAoKHRoaXNbMV0mKCgxPDwoMzItdGhpcy5EQikpLTEpKTw8dGhpcy5EQil8dGhpc1swXTtcbiAgICB9XG5cbiAgICAvLyAocHVibGljKSByZXR1cm4gdmFsdWUgYXMgYnl0ZVxuICAgIGZ1bmN0aW9uIGJuQnl0ZVZhbHVlKCkgeyByZXR1cm4gKHRoaXMudD09MCk/dGhpcy5zOih0aGlzWzBdPDwyNCk+PjI0OyB9XG5cbiAgICAvLyAocHVibGljKSByZXR1cm4gdmFsdWUgYXMgc2hvcnQgKGFzc3VtZXMgREI+PTE2KVxuICAgIGZ1bmN0aW9uIGJuU2hvcnRWYWx1ZSgpIHsgcmV0dXJuICh0aGlzLnQ9PTApP3RoaXMuczoodGhpc1swXTw8MTYpPj4xNjsgfVxuXG4gICAgLy8gKHByb3RlY3RlZCkgcmV0dXJuIHggcy50LiByXnggPCBEVlxuICAgIGZ1bmN0aW9uIGJucENodW5rU2l6ZShyKSB7IHJldHVybiBNYXRoLmZsb29yKE1hdGguTE4yKnRoaXMuREIvTWF0aC5sb2cocikpOyB9XG5cbiAgICAvLyAocHVibGljKSAwIGlmIHRoaXMgPT0gMCwgMSBpZiB0aGlzID4gMFxuICAgIGZ1bmN0aW9uIGJuU2lnTnVtKCkge1xuICAgICAgaWYodGhpcy5zIDwgMCkgcmV0dXJuIC0xO1xuICAgICAgZWxzZSBpZih0aGlzLnQgPD0gMCB8fCAodGhpcy50ID09IDEgJiYgdGhpc1swXSA8PSAwKSkgcmV0dXJuIDA7XG4gICAgICBlbHNlIHJldHVybiAxO1xuICAgIH1cblxuICAgIC8vIChwcm90ZWN0ZWQpIGNvbnZlcnQgdG8gcmFkaXggc3RyaW5nXG4gICAgZnVuY3Rpb24gYm5wVG9SYWRpeChiKSB7XG4gICAgICBpZihiID09IG51bGwpIGIgPSAxMDtcbiAgICAgIGlmKHRoaXMuc2lnbnVtKCkgPT0gMCB8fCBiIDwgMiB8fCBiID4gMzYpIHJldHVybiBcIjBcIjtcbiAgICAgIHZhciBjcyA9IHRoaXMuY2h1bmtTaXplKGIpO1xuICAgICAgdmFyIGEgPSBNYXRoLnBvdyhiLGNzKTtcbiAgICAgIHZhciBkID0gbmJ2KGEpLCB5ID0gbmJpKCksIHogPSBuYmkoKSwgciA9IFwiXCI7XG4gICAgICB0aGlzLmRpdlJlbVRvKGQseSx6KTtcbiAgICAgIHdoaWxlKHkuc2lnbnVtKCkgPiAwKSB7XG4gICAgICAgIHIgPSAoYSt6LmludFZhbHVlKCkpLnRvU3RyaW5nKGIpLnN1YnN0cigxKSArIHI7XG4gICAgICAgIHkuZGl2UmVtVG8oZCx5LHopO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHouaW50VmFsdWUoKS50b1N0cmluZyhiKSArIHI7XG4gICAgfVxuXG4gICAgLy8gKHByb3RlY3RlZCkgY29udmVydCBmcm9tIHJhZGl4IHN0cmluZ1xuICAgIGZ1bmN0aW9uIGJucEZyb21SYWRpeChzLGIpIHtcbiAgICAgIHRoaXMuZnJvbUludCgwKTtcbiAgICAgIGlmKGIgPT0gbnVsbCkgYiA9IDEwO1xuICAgICAgdmFyIGNzID0gdGhpcy5jaHVua1NpemUoYik7XG4gICAgICB2YXIgZCA9IE1hdGgucG93KGIsY3MpLCBtaSA9IGZhbHNlLCBqID0gMCwgdyA9IDA7XG4gICAgICBmb3IodmFyIGkgPSAwOyBpIDwgcy5sZW5ndGg7ICsraSkge1xuICAgICAgICB2YXIgeCA9IGludEF0KHMsaSk7XG4gICAgICAgIGlmKHggPCAwKSB7XG4gICAgICAgICAgaWYocy5jaGFyQXQoaSkgPT0gXCItXCIgJiYgdGhpcy5zaWdudW0oKSA9PSAwKSBtaSA9IHRydWU7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgdyA9IGIqdyt4O1xuICAgICAgICBpZigrK2ogPj0gY3MpIHtcbiAgICAgICAgICB0aGlzLmRNdWx0aXBseShkKTtcbiAgICAgICAgICB0aGlzLmRBZGRPZmZzZXQodywwKTtcbiAgICAgICAgICBqID0gMDtcbiAgICAgICAgICB3ID0gMDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYoaiA+IDApIHtcbiAgICAgICAgdGhpcy5kTXVsdGlwbHkoTWF0aC5wb3coYixqKSk7XG4gICAgICAgIHRoaXMuZEFkZE9mZnNldCh3LDApO1xuICAgICAgfVxuICAgICAgaWYobWkpIEJpZ0ludGVnZXIuWkVSTy5zdWJUbyh0aGlzLHRoaXMpO1xuICAgIH1cblxuICAgIC8vIChwcm90ZWN0ZWQpIGFsdGVybmF0ZSBjb25zdHJ1Y3RvclxuICAgIGZ1bmN0aW9uIGJucEZyb21OdW1iZXIoYSxiLGMpIHtcbiAgICAgIGlmKFwibnVtYmVyXCIgPT0gdHlwZW9mIGIpIHtcbiAgICAgICAgLy8gbmV3IEJpZ0ludGVnZXIoaW50LGludCxSTkcpXG4gICAgICAgIGlmKGEgPCAyKSB0aGlzLmZyb21JbnQoMSk7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIHRoaXMuZnJvbU51bWJlcihhLGMpO1xuICAgICAgICAgIGlmKCF0aGlzLnRlc3RCaXQoYS0xKSkgICAgLy8gZm9yY2UgTVNCIHNldFxuICAgICAgICAgICAgdGhpcy5iaXR3aXNlVG8oQmlnSW50ZWdlci5PTkUuc2hpZnRMZWZ0KGEtMSksb3Bfb3IsdGhpcyk7XG4gICAgICAgICAgaWYodGhpcy5pc0V2ZW4oKSkgdGhpcy5kQWRkT2Zmc2V0KDEsMCk7IC8vIGZvcmNlIG9kZFxuICAgICAgICAgIHdoaWxlKCF0aGlzLmlzUHJvYmFibGVQcmltZShiKSkge1xuICAgICAgICAgICAgdGhpcy5kQWRkT2Zmc2V0KDIsMCk7XG4gICAgICAgICAgICBpZih0aGlzLmJpdExlbmd0aCgpID4gYSkgdGhpcy5zdWJUbyhCaWdJbnRlZ2VyLk9ORS5zaGlmdExlZnQoYS0xKSx0aGlzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICAvLyBuZXcgQmlnSW50ZWdlcihpbnQsUk5HKVxuICAgICAgICB2YXIgeCA9IG5ldyBBcnJheSgpLCB0ID0gYSY3O1xuICAgICAgICB4Lmxlbmd0aCA9IChhPj4zKSsxO1xuICAgICAgICBiLm5leHRCeXRlcyh4KTtcbiAgICAgICAgaWYodCA+IDApIHhbMF0gJj0gKCgxPDx0KS0xKTsgZWxzZSB4WzBdID0gMDtcbiAgICAgICAgdGhpcy5mcm9tU3RyaW5nKHgsMjU2KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAocHVibGljKSBjb252ZXJ0IHRvIGJpZ2VuZGlhbiBieXRlIGFycmF5XG4gICAgZnVuY3Rpb24gYm5Ub0J5dGVBcnJheSgpIHtcbiAgICAgIHZhciBpID0gdGhpcy50LCByID0gbmV3IEFycmF5KCk7XG4gICAgICByWzBdID0gdGhpcy5zO1xuICAgICAgdmFyIHAgPSB0aGlzLkRCLShpKnRoaXMuREIpJTgsIGQsIGsgPSAwO1xuICAgICAgaWYoaS0tID4gMCkge1xuICAgICAgICBpZihwIDwgdGhpcy5EQiAmJiAoZCA9IHRoaXNbaV0+PnApICE9ICh0aGlzLnMmdGhpcy5ETSk+PnApXG4gICAgICAgICAgcltrKytdID0gZHwodGhpcy5zPDwodGhpcy5EQi1wKSk7XG4gICAgICAgIHdoaWxlKGkgPj0gMCkge1xuICAgICAgICAgIGlmKHAgPCA4KSB7XG4gICAgICAgICAgICBkID0gKHRoaXNbaV0mKCgxPDxwKS0xKSk8PCg4LXApO1xuICAgICAgICAgICAgZCB8PSB0aGlzWy0taV0+PihwKz10aGlzLkRCLTgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGQgPSAodGhpc1tpXT4+KHAtPTgpKSYweGZmO1xuICAgICAgICAgICAgaWYocCA8PSAwKSB7IHAgKz0gdGhpcy5EQjsgLS1pOyB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmKChkJjB4ODApICE9IDApIGQgfD0gLTI1NjtcbiAgICAgICAgICBpZihrID09IDAgJiYgKHRoaXMucyYweDgwKSAhPSAoZCYweDgwKSkgKytrO1xuICAgICAgICAgIGlmKGsgPiAwIHx8IGQgIT0gdGhpcy5zKSByW2srK10gPSBkO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBibkVxdWFscyhhKSB7IHJldHVybih0aGlzLmNvbXBhcmVUbyhhKT09MCk7IH1cbiAgICBmdW5jdGlvbiBibk1pbihhKSB7IHJldHVybih0aGlzLmNvbXBhcmVUbyhhKTwwKT90aGlzOmE7IH1cbiAgICBmdW5jdGlvbiBibk1heChhKSB7IHJldHVybih0aGlzLmNvbXBhcmVUbyhhKT4wKT90aGlzOmE7IH1cblxuICAgIC8vIChwcm90ZWN0ZWQpIHIgPSB0aGlzIG9wIGEgKGJpdHdpc2UpXG4gICAgZnVuY3Rpb24gYm5wQml0d2lzZVRvKGEsb3Ascikge1xuICAgICAgdmFyIGksIGYsIG0gPSBNYXRoLm1pbihhLnQsdGhpcy50KTtcbiAgICAgIGZvcihpID0gMDsgaSA8IG07ICsraSkgcltpXSA9IG9wKHRoaXNbaV0sYVtpXSk7XG4gICAgICBpZihhLnQgPCB0aGlzLnQpIHtcbiAgICAgICAgZiA9IGEucyZ0aGlzLkRNO1xuICAgICAgICBmb3IoaSA9IG07IGkgPCB0aGlzLnQ7ICsraSkgcltpXSA9IG9wKHRoaXNbaV0sZik7XG4gICAgICAgIHIudCA9IHRoaXMudDtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBmID0gdGhpcy5zJnRoaXMuRE07XG4gICAgICAgIGZvcihpID0gbTsgaSA8IGEudDsgKytpKSByW2ldID0gb3AoZixhW2ldKTtcbiAgICAgICAgci50ID0gYS50O1xuICAgICAgfVxuICAgICAgci5zID0gb3AodGhpcy5zLGEucyk7XG4gICAgICByLmNsYW1wKCk7XG4gICAgfVxuXG4gICAgLy8gKHB1YmxpYykgdGhpcyAmIGFcbiAgICBmdW5jdGlvbiBvcF9hbmQoeCx5KSB7IHJldHVybiB4Jnk7IH1cbiAgICBmdW5jdGlvbiBibkFuZChhKSB7IHZhciByID0gbmJpKCk7IHRoaXMuYml0d2lzZVRvKGEsb3BfYW5kLHIpOyByZXR1cm4gcjsgfVxuXG4gICAgLy8gKHB1YmxpYykgdGhpcyB8IGFcbiAgICBmdW5jdGlvbiBvcF9vcih4LHkpIHsgcmV0dXJuIHh8eTsgfVxuICAgIGZ1bmN0aW9uIGJuT3IoYSkgeyB2YXIgciA9IG5iaSgpOyB0aGlzLmJpdHdpc2VUbyhhLG9wX29yLHIpOyByZXR1cm4gcjsgfVxuXG4gICAgLy8gKHB1YmxpYykgdGhpcyBeIGFcbiAgICBmdW5jdGlvbiBvcF94b3IoeCx5KSB7IHJldHVybiB4Xnk7IH1cbiAgICBmdW5jdGlvbiBiblhvcihhKSB7IHZhciByID0gbmJpKCk7IHRoaXMuYml0d2lzZVRvKGEsb3BfeG9yLHIpOyByZXR1cm4gcjsgfVxuXG4gICAgLy8gKHB1YmxpYykgdGhpcyAmIH5hXG4gICAgZnVuY3Rpb24gb3BfYW5kbm90KHgseSkgeyByZXR1cm4geCZ+eTsgfVxuICAgIGZ1bmN0aW9uIGJuQW5kTm90KGEpIHsgdmFyIHIgPSBuYmkoKTsgdGhpcy5iaXR3aXNlVG8oYSxvcF9hbmRub3Qscik7IHJldHVybiByOyB9XG5cbiAgICAvLyAocHVibGljKSB+dGhpc1xuICAgIGZ1bmN0aW9uIGJuTm90KCkge1xuICAgICAgdmFyIHIgPSBuYmkoKTtcbiAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLnQ7ICsraSkgcltpXSA9IHRoaXMuRE0mfnRoaXNbaV07XG4gICAgICByLnQgPSB0aGlzLnQ7XG4gICAgICByLnMgPSB+dGhpcy5zO1xuICAgICAgcmV0dXJuIHI7XG4gICAgfVxuXG4gICAgLy8gKHB1YmxpYykgdGhpcyA8PCBuXG4gICAgZnVuY3Rpb24gYm5TaGlmdExlZnQobikge1xuICAgICAgdmFyIHIgPSBuYmkoKTtcbiAgICAgIGlmKG4gPCAwKSB0aGlzLnJTaGlmdFRvKC1uLHIpOyBlbHNlIHRoaXMubFNoaWZ0VG8obixyKTtcbiAgICAgIHJldHVybiByO1xuICAgIH1cblxuICAgIC8vIChwdWJsaWMpIHRoaXMgPj4gblxuICAgIGZ1bmN0aW9uIGJuU2hpZnRSaWdodChuKSB7XG4gICAgICB2YXIgciA9IG5iaSgpO1xuICAgICAgaWYobiA8IDApIHRoaXMubFNoaWZ0VG8oLW4scik7IGVsc2UgdGhpcy5yU2hpZnRUbyhuLHIpO1xuICAgICAgcmV0dXJuIHI7XG4gICAgfVxuXG4gICAgLy8gcmV0dXJuIGluZGV4IG9mIGxvd2VzdCAxLWJpdCBpbiB4LCB4IDwgMl4zMVxuICAgIGZ1bmN0aW9uIGxiaXQoeCkge1xuICAgICAgaWYoeCA9PSAwKSByZXR1cm4gLTE7XG4gICAgICB2YXIgciA9IDA7XG4gICAgICBpZigoeCYweGZmZmYpID09IDApIHsgeCA+Pj0gMTY7IHIgKz0gMTY7IH1cbiAgICAgIGlmKCh4JjB4ZmYpID09IDApIHsgeCA+Pj0gODsgciArPSA4OyB9XG4gICAgICBpZigoeCYweGYpID09IDApIHsgeCA+Pj0gNDsgciArPSA0OyB9XG4gICAgICBpZigoeCYzKSA9PSAwKSB7IHggPj49IDI7IHIgKz0gMjsgfVxuICAgICAgaWYoKHgmMSkgPT0gMCkgKytyO1xuICAgICAgcmV0dXJuIHI7XG4gICAgfVxuXG4gICAgLy8gKHB1YmxpYykgcmV0dXJucyBpbmRleCBvZiBsb3dlc3QgMS1iaXQgKG9yIC0xIGlmIG5vbmUpXG4gICAgZnVuY3Rpb24gYm5HZXRMb3dlc3RTZXRCaXQoKSB7XG4gICAgICBmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy50OyArK2kpXG4gICAgICAgIGlmKHRoaXNbaV0gIT0gMCkgcmV0dXJuIGkqdGhpcy5EQitsYml0KHRoaXNbaV0pO1xuICAgICAgaWYodGhpcy5zIDwgMCkgcmV0dXJuIHRoaXMudCp0aGlzLkRCO1xuICAgICAgcmV0dXJuIC0xO1xuICAgIH1cblxuICAgIC8vIHJldHVybiBudW1iZXIgb2YgMSBiaXRzIGluIHhcbiAgICBmdW5jdGlvbiBjYml0KHgpIHtcbiAgICAgIHZhciByID0gMDtcbiAgICAgIHdoaWxlKHggIT0gMCkgeyB4ICY9IHgtMTsgKytyOyB9XG4gICAgICByZXR1cm4gcjtcbiAgICB9XG5cbiAgICAvLyAocHVibGljKSByZXR1cm4gbnVtYmVyIG9mIHNldCBiaXRzXG4gICAgZnVuY3Rpb24gYm5CaXRDb3VudCgpIHtcbiAgICAgIHZhciByID0gMCwgeCA9IHRoaXMucyZ0aGlzLkRNO1xuICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHRoaXMudDsgKytpKSByICs9IGNiaXQodGhpc1tpXV54KTtcbiAgICAgIHJldHVybiByO1xuICAgIH1cblxuICAgIC8vIChwdWJsaWMpIHRydWUgaWZmIG50aCBiaXQgaXMgc2V0XG4gICAgZnVuY3Rpb24gYm5UZXN0Qml0KG4pIHtcbiAgICAgIHZhciBqID0gTWF0aC5mbG9vcihuL3RoaXMuREIpO1xuICAgICAgaWYoaiA+PSB0aGlzLnQpIHJldHVybih0aGlzLnMhPTApO1xuICAgICAgcmV0dXJuKCh0aGlzW2pdJigxPDwobiV0aGlzLkRCKSkpIT0wKTtcbiAgICB9XG5cbiAgICAvLyAocHJvdGVjdGVkKSB0aGlzIG9wICgxPDxuKVxuICAgIGZ1bmN0aW9uIGJucENoYW5nZUJpdChuLG9wKSB7XG4gICAgICB2YXIgciA9IEJpZ0ludGVnZXIuT05FLnNoaWZ0TGVmdChuKTtcbiAgICAgIHRoaXMuYml0d2lzZVRvKHIsb3Ascik7XG4gICAgICByZXR1cm4gcjtcbiAgICB9XG5cbiAgICAvLyAocHVibGljKSB0aGlzIHwgKDE8PG4pXG4gICAgZnVuY3Rpb24gYm5TZXRCaXQobikgeyByZXR1cm4gdGhpcy5jaGFuZ2VCaXQobixvcF9vcik7IH1cblxuICAgIC8vIChwdWJsaWMpIHRoaXMgJiB+KDE8PG4pXG4gICAgZnVuY3Rpb24gYm5DbGVhckJpdChuKSB7IHJldHVybiB0aGlzLmNoYW5nZUJpdChuLG9wX2FuZG5vdCk7IH1cblxuICAgIC8vIChwdWJsaWMpIHRoaXMgXiAoMTw8bilcbiAgICBmdW5jdGlvbiBibkZsaXBCaXQobikgeyByZXR1cm4gdGhpcy5jaGFuZ2VCaXQobixvcF94b3IpOyB9XG5cbiAgICAvLyAocHJvdGVjdGVkKSByID0gdGhpcyArIGFcbiAgICBmdW5jdGlvbiBibnBBZGRUbyhhLHIpIHtcbiAgICAgIHZhciBpID0gMCwgYyA9IDAsIG0gPSBNYXRoLm1pbihhLnQsdGhpcy50KTtcbiAgICAgIHdoaWxlKGkgPCBtKSB7XG4gICAgICAgIGMgKz0gdGhpc1tpXSthW2ldO1xuICAgICAgICByW2krK10gPSBjJnRoaXMuRE07XG4gICAgICAgIGMgPj49IHRoaXMuREI7XG4gICAgICB9XG4gICAgICBpZihhLnQgPCB0aGlzLnQpIHtcbiAgICAgICAgYyArPSBhLnM7XG4gICAgICAgIHdoaWxlKGkgPCB0aGlzLnQpIHtcbiAgICAgICAgICBjICs9IHRoaXNbaV07XG4gICAgICAgICAgcltpKytdID0gYyZ0aGlzLkRNO1xuICAgICAgICAgIGMgPj49IHRoaXMuREI7XG4gICAgICAgIH1cbiAgICAgICAgYyArPSB0aGlzLnM7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgYyArPSB0aGlzLnM7XG4gICAgICAgIHdoaWxlKGkgPCBhLnQpIHtcbiAgICAgICAgICBjICs9IGFbaV07XG4gICAgICAgICAgcltpKytdID0gYyZ0aGlzLkRNO1xuICAgICAgICAgIGMgPj49IHRoaXMuREI7XG4gICAgICAgIH1cbiAgICAgICAgYyArPSBhLnM7XG4gICAgICB9XG4gICAgICByLnMgPSAoYzwwKT8tMTowO1xuICAgICAgaWYoYyA+IDApIHJbaSsrXSA9IGM7XG4gICAgICBlbHNlIGlmKGMgPCAtMSkgcltpKytdID0gdGhpcy5EVitjO1xuICAgICAgci50ID0gaTtcbiAgICAgIHIuY2xhbXAoKTtcbiAgICB9XG5cbiAgICAvLyAocHVibGljKSB0aGlzICsgYVxuICAgIGZ1bmN0aW9uIGJuQWRkKGEpIHsgdmFyIHIgPSBuYmkoKTsgdGhpcy5hZGRUbyhhLHIpOyByZXR1cm4gcjsgfVxuXG4gICAgLy8gKHB1YmxpYykgdGhpcyAtIGFcbiAgICBmdW5jdGlvbiBiblN1YnRyYWN0KGEpIHsgdmFyIHIgPSBuYmkoKTsgdGhpcy5zdWJUbyhhLHIpOyByZXR1cm4gcjsgfVxuXG4gICAgLy8gKHB1YmxpYykgdGhpcyAqIGFcbiAgICBmdW5jdGlvbiBibk11bHRpcGx5KGEpIHsgdmFyIHIgPSBuYmkoKTsgdGhpcy5tdWx0aXBseVRvKGEscik7IHJldHVybiByOyB9XG5cbiAgICAvLyAocHVibGljKSB0aGlzXjJcbiAgICBmdW5jdGlvbiBiblNxdWFyZSgpIHsgdmFyIHIgPSBuYmkoKTsgdGhpcy5zcXVhcmVUbyhyKTsgcmV0dXJuIHI7IH1cblxuICAgIC8vIChwdWJsaWMpIHRoaXMgLyBhXG4gICAgZnVuY3Rpb24gYm5EaXZpZGUoYSkgeyB2YXIgciA9IG5iaSgpOyB0aGlzLmRpdlJlbVRvKGEscixudWxsKTsgcmV0dXJuIHI7IH1cblxuICAgIC8vIChwdWJsaWMpIHRoaXMgJSBhXG4gICAgZnVuY3Rpb24gYm5SZW1haW5kZXIoYSkgeyB2YXIgciA9IG5iaSgpOyB0aGlzLmRpdlJlbVRvKGEsbnVsbCxyKTsgcmV0dXJuIHI7IH1cblxuICAgIC8vIChwdWJsaWMpIFt0aGlzL2EsdGhpcyVhXVxuICAgIGZ1bmN0aW9uIGJuRGl2aWRlQW5kUmVtYWluZGVyKGEpIHtcbiAgICAgIHZhciBxID0gbmJpKCksIHIgPSBuYmkoKTtcbiAgICAgIHRoaXMuZGl2UmVtVG8oYSxxLHIpO1xuICAgICAgcmV0dXJuIG5ldyBBcnJheShxLHIpO1xuICAgIH1cblxuICAgIC8vIChwcm90ZWN0ZWQpIHRoaXMgKj0gbiwgdGhpcyA+PSAwLCAxIDwgbiA8IERWXG4gICAgZnVuY3Rpb24gYm5wRE11bHRpcGx5KG4pIHtcbiAgICAgIHRoaXNbdGhpcy50XSA9IHRoaXMuYW0oMCxuLTEsdGhpcywwLDAsdGhpcy50KTtcbiAgICAgICsrdGhpcy50O1xuICAgICAgdGhpcy5jbGFtcCgpO1xuICAgIH1cblxuICAgIC8vIChwcm90ZWN0ZWQpIHRoaXMgKz0gbiA8PCB3IHdvcmRzLCB0aGlzID49IDBcbiAgICBmdW5jdGlvbiBibnBEQWRkT2Zmc2V0KG4sdykge1xuICAgICAgaWYobiA9PSAwKSByZXR1cm47XG4gICAgICB3aGlsZSh0aGlzLnQgPD0gdykgdGhpc1t0aGlzLnQrK10gPSAwO1xuICAgICAgdGhpc1t3XSArPSBuO1xuICAgICAgd2hpbGUodGhpc1t3XSA+PSB0aGlzLkRWKSB7XG4gICAgICAgIHRoaXNbd10gLT0gdGhpcy5EVjtcbiAgICAgICAgaWYoKyt3ID49IHRoaXMudCkgdGhpc1t0aGlzLnQrK10gPSAwO1xuICAgICAgICArK3RoaXNbd107XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQSBcIm51bGxcIiByZWR1Y2VyXG4gICAgZnVuY3Rpb24gTnVsbEV4cCgpIHt9XG4gICAgZnVuY3Rpb24gbk5vcCh4KSB7IHJldHVybiB4OyB9XG4gICAgZnVuY3Rpb24gbk11bFRvKHgseSxyKSB7IHgubXVsdGlwbHlUbyh5LHIpOyB9XG4gICAgZnVuY3Rpb24gblNxclRvKHgscikgeyB4LnNxdWFyZVRvKHIpOyB9XG5cbiAgICBOdWxsRXhwLnByb3RvdHlwZS5jb252ZXJ0ID0gbk5vcDtcbiAgICBOdWxsRXhwLnByb3RvdHlwZS5yZXZlcnQgPSBuTm9wO1xuICAgIE51bGxFeHAucHJvdG90eXBlLm11bFRvID0gbk11bFRvO1xuICAgIE51bGxFeHAucHJvdG90eXBlLnNxclRvID0gblNxclRvO1xuXG4gICAgLy8gKHB1YmxpYykgdGhpc15lXG4gICAgZnVuY3Rpb24gYm5Qb3coZSkgeyByZXR1cm4gdGhpcy5leHAoZSxuZXcgTnVsbEV4cCgpKTsgfVxuXG4gICAgLy8gKHByb3RlY3RlZCkgciA9IGxvd2VyIG4gd29yZHMgb2YgXCJ0aGlzICogYVwiLCBhLnQgPD0gblxuICAgIC8vIFwidGhpc1wiIHNob3VsZCBiZSB0aGUgbGFyZ2VyIG9uZSBpZiBhcHByb3ByaWF0ZS5cbiAgICBmdW5jdGlvbiBibnBNdWx0aXBseUxvd2VyVG8oYSxuLHIpIHtcbiAgICAgIHZhciBpID0gTWF0aC5taW4odGhpcy50K2EudCxuKTtcbiAgICAgIHIucyA9IDA7IC8vIGFzc3VtZXMgYSx0aGlzID49IDBcbiAgICAgIHIudCA9IGk7XG4gICAgICB3aGlsZShpID4gMCkgclstLWldID0gMDtcbiAgICAgIHZhciBqO1xuICAgICAgZm9yKGogPSByLnQtdGhpcy50OyBpIDwgajsgKytpKSByW2krdGhpcy50XSA9IHRoaXMuYW0oMCxhW2ldLHIsaSwwLHRoaXMudCk7XG4gICAgICBmb3IoaiA9IE1hdGgubWluKGEudCxuKTsgaSA8IGo7ICsraSkgdGhpcy5hbSgwLGFbaV0scixpLDAsbi1pKTtcbiAgICAgIHIuY2xhbXAoKTtcbiAgICB9XG5cbiAgICAvLyAocHJvdGVjdGVkKSByID0gXCJ0aGlzICogYVwiIHdpdGhvdXQgbG93ZXIgbiB3b3JkcywgbiA+IDBcbiAgICAvLyBcInRoaXNcIiBzaG91bGQgYmUgdGhlIGxhcmdlciBvbmUgaWYgYXBwcm9wcmlhdGUuXG4gICAgZnVuY3Rpb24gYm5wTXVsdGlwbHlVcHBlclRvKGEsbixyKSB7XG4gICAgICAtLW47XG4gICAgICB2YXIgaSA9IHIudCA9IHRoaXMudCthLnQtbjtcbiAgICAgIHIucyA9IDA7IC8vIGFzc3VtZXMgYSx0aGlzID49IDBcbiAgICAgIHdoaWxlKC0taSA+PSAwKSByW2ldID0gMDtcbiAgICAgIGZvcihpID0gTWF0aC5tYXgobi10aGlzLnQsMCk7IGkgPCBhLnQ7ICsraSlcbiAgICAgICAgclt0aGlzLnQraS1uXSA9IHRoaXMuYW0obi1pLGFbaV0sciwwLDAsdGhpcy50K2ktbik7XG4gICAgICByLmNsYW1wKCk7XG4gICAgICByLmRyU2hpZnRUbygxLHIpO1xuICAgIH1cblxuICAgIC8vIEJhcnJldHQgbW9kdWxhciByZWR1Y3Rpb25cbiAgICBmdW5jdGlvbiBCYXJyZXR0KG0pIHtcbiAgICAgIC8vIHNldHVwIEJhcnJldHRcbiAgICAgIHRoaXMucjIgPSBuYmkoKTtcbiAgICAgIHRoaXMucTMgPSBuYmkoKTtcbiAgICAgIEJpZ0ludGVnZXIuT05FLmRsU2hpZnRUbygyKm0udCx0aGlzLnIyKTtcbiAgICAgIHRoaXMubXUgPSB0aGlzLnIyLmRpdmlkZShtKTtcbiAgICAgIHRoaXMubSA9IG07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYmFycmV0dENvbnZlcnQoeCkge1xuICAgICAgaWYoeC5zIDwgMCB8fCB4LnQgPiAyKnRoaXMubS50KSByZXR1cm4geC5tb2QodGhpcy5tKTtcbiAgICAgIGVsc2UgaWYoeC5jb21wYXJlVG8odGhpcy5tKSA8IDApIHJldHVybiB4O1xuICAgICAgZWxzZSB7IHZhciByID0gbmJpKCk7IHguY29weVRvKHIpOyB0aGlzLnJlZHVjZShyKTsgcmV0dXJuIHI7IH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBiYXJyZXR0UmV2ZXJ0KHgpIHsgcmV0dXJuIHg7IH1cblxuICAgIC8vIHggPSB4IG1vZCBtIChIQUMgMTQuNDIpXG4gICAgZnVuY3Rpb24gYmFycmV0dFJlZHVjZSh4KSB7XG4gICAgICB4LmRyU2hpZnRUbyh0aGlzLm0udC0xLHRoaXMucjIpO1xuICAgICAgaWYoeC50ID4gdGhpcy5tLnQrMSkgeyB4LnQgPSB0aGlzLm0udCsxOyB4LmNsYW1wKCk7IH1cbiAgICAgIHRoaXMubXUubXVsdGlwbHlVcHBlclRvKHRoaXMucjIsdGhpcy5tLnQrMSx0aGlzLnEzKTtcbiAgICAgIHRoaXMubS5tdWx0aXBseUxvd2VyVG8odGhpcy5xMyx0aGlzLm0udCsxLHRoaXMucjIpO1xuICAgICAgd2hpbGUoeC5jb21wYXJlVG8odGhpcy5yMikgPCAwKSB4LmRBZGRPZmZzZXQoMSx0aGlzLm0udCsxKTtcbiAgICAgIHguc3ViVG8odGhpcy5yMix4KTtcbiAgICAgIHdoaWxlKHguY29tcGFyZVRvKHRoaXMubSkgPj0gMCkgeC5zdWJUbyh0aGlzLm0seCk7XG4gICAgfVxuXG4gICAgLy8gciA9IHheMiBtb2QgbTsgeCAhPSByXG4gICAgZnVuY3Rpb24gYmFycmV0dFNxclRvKHgscikgeyB4LnNxdWFyZVRvKHIpOyB0aGlzLnJlZHVjZShyKTsgfVxuXG4gICAgLy8gciA9IHgqeSBtb2QgbTsgeCx5ICE9IHJcbiAgICBmdW5jdGlvbiBiYXJyZXR0TXVsVG8oeCx5LHIpIHsgeC5tdWx0aXBseVRvKHkscik7IHRoaXMucmVkdWNlKHIpOyB9XG5cbiAgICBCYXJyZXR0LnByb3RvdHlwZS5jb252ZXJ0ID0gYmFycmV0dENvbnZlcnQ7XG4gICAgQmFycmV0dC5wcm90b3R5cGUucmV2ZXJ0ID0gYmFycmV0dFJldmVydDtcbiAgICBCYXJyZXR0LnByb3RvdHlwZS5yZWR1Y2UgPSBiYXJyZXR0UmVkdWNlO1xuICAgIEJhcnJldHQucHJvdG90eXBlLm11bFRvID0gYmFycmV0dE11bFRvO1xuICAgIEJhcnJldHQucHJvdG90eXBlLnNxclRvID0gYmFycmV0dFNxclRvO1xuXG4gICAgLy8gKHB1YmxpYykgdGhpc15lICUgbSAoSEFDIDE0Ljg1KVxuICAgIGZ1bmN0aW9uIGJuTW9kUG93KGUsbSkge1xuICAgICAgdmFyIGkgPSBlLmJpdExlbmd0aCgpLCBrLCByID0gbmJ2KDEpLCB6O1xuICAgICAgaWYoaSA8PSAwKSByZXR1cm4gcjtcbiAgICAgIGVsc2UgaWYoaSA8IDE4KSBrID0gMTtcbiAgICAgIGVsc2UgaWYoaSA8IDQ4KSBrID0gMztcbiAgICAgIGVsc2UgaWYoaSA8IDE0NCkgayA9IDQ7XG4gICAgICBlbHNlIGlmKGkgPCA3NjgpIGsgPSA1O1xuICAgICAgZWxzZSBrID0gNjtcbiAgICAgIGlmKGkgPCA4KVxuICAgICAgICB6ID0gbmV3IENsYXNzaWMobSk7XG4gICAgICBlbHNlIGlmKG0uaXNFdmVuKCkpXG4gICAgICAgIHogPSBuZXcgQmFycmV0dChtKTtcbiAgICAgIGVsc2VcbiAgICAgICAgeiA9IG5ldyBNb250Z29tZXJ5KG0pO1xuXG4gICAgICAvLyBwcmVjb21wdXRhdGlvblxuICAgICAgdmFyIGcgPSBuZXcgQXJyYXkoKSwgbiA9IDMsIGsxID0gay0xLCBrbSA9ICgxPDxrKS0xO1xuICAgICAgZ1sxXSA9IHouY29udmVydCh0aGlzKTtcbiAgICAgIGlmKGsgPiAxKSB7XG4gICAgICAgIHZhciBnMiA9IG5iaSgpO1xuICAgICAgICB6LnNxclRvKGdbMV0sZzIpO1xuICAgICAgICB3aGlsZShuIDw9IGttKSB7XG4gICAgICAgICAgZ1tuXSA9IG5iaSgpO1xuICAgICAgICAgIHoubXVsVG8oZzIsZ1tuLTJdLGdbbl0pO1xuICAgICAgICAgIG4gKz0gMjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgaiA9IGUudC0xLCB3LCBpczEgPSB0cnVlLCByMiA9IG5iaSgpLCB0O1xuICAgICAgaSA9IG5iaXRzKGVbal0pLTE7XG4gICAgICB3aGlsZShqID49IDApIHtcbiAgICAgICAgaWYoaSA+PSBrMSkgdyA9IChlW2pdPj4oaS1rMSkpJmttO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICB3ID0gKGVbal0mKCgxPDwoaSsxKSktMSkpPDwoazEtaSk7XG4gICAgICAgICAgaWYoaiA+IDApIHcgfD0gZVtqLTFdPj4odGhpcy5EQitpLWsxKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG4gPSBrO1xuICAgICAgICB3aGlsZSgodyYxKSA9PSAwKSB7IHcgPj49IDE7IC0tbjsgfVxuICAgICAgICBpZigoaSAtPSBuKSA8IDApIHsgaSArPSB0aGlzLkRCOyAtLWo7IH1cbiAgICAgICAgaWYoaXMxKSB7ICAgIC8vIHJldCA9PSAxLCBkb24ndCBib3RoZXIgc3F1YXJpbmcgb3IgbXVsdGlwbHlpbmcgaXRcbiAgICAgICAgICBnW3ddLmNvcHlUbyhyKTtcbiAgICAgICAgICBpczEgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICB3aGlsZShuID4gMSkgeyB6LnNxclRvKHIscjIpOyB6LnNxclRvKHIyLHIpOyBuIC09IDI7IH1cbiAgICAgICAgICBpZihuID4gMCkgei5zcXJUbyhyLHIyKTsgZWxzZSB7IHQgPSByOyByID0gcjI7IHIyID0gdDsgfVxuICAgICAgICAgIHoubXVsVG8ocjIsZ1t3XSxyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHdoaWxlKGogPj0gMCAmJiAoZVtqXSYoMTw8aSkpID09IDApIHtcbiAgICAgICAgICB6LnNxclRvKHIscjIpOyB0ID0gcjsgciA9IHIyOyByMiA9IHQ7XG4gICAgICAgICAgaWYoLS1pIDwgMCkgeyBpID0gdGhpcy5EQi0xOyAtLWo7IH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHoucmV2ZXJ0KHIpO1xuICAgIH1cblxuICAgIC8vIChwdWJsaWMpIGdjZCh0aGlzLGEpIChIQUMgMTQuNTQpXG4gICAgZnVuY3Rpb24gYm5HQ0QoYSkge1xuICAgICAgdmFyIHggPSAodGhpcy5zPDApP3RoaXMubmVnYXRlKCk6dGhpcy5jbG9uZSgpO1xuICAgICAgdmFyIHkgPSAoYS5zPDApP2EubmVnYXRlKCk6YS5jbG9uZSgpO1xuICAgICAgaWYoeC5jb21wYXJlVG8oeSkgPCAwKSB7IHZhciB0ID0geDsgeCA9IHk7IHkgPSB0OyB9XG4gICAgICB2YXIgaSA9IHguZ2V0TG93ZXN0U2V0Qml0KCksIGcgPSB5LmdldExvd2VzdFNldEJpdCgpO1xuICAgICAgaWYoZyA8IDApIHJldHVybiB4O1xuICAgICAgaWYoaSA8IGcpIGcgPSBpO1xuICAgICAgaWYoZyA+IDApIHtcbiAgICAgICAgeC5yU2hpZnRUbyhnLHgpO1xuICAgICAgICB5LnJTaGlmdFRvKGcseSk7XG4gICAgICB9XG4gICAgICB3aGlsZSh4LnNpZ251bSgpID4gMCkge1xuICAgICAgICBpZigoaSA9IHguZ2V0TG93ZXN0U2V0Qml0KCkpID4gMCkgeC5yU2hpZnRUbyhpLHgpO1xuICAgICAgICBpZigoaSA9IHkuZ2V0TG93ZXN0U2V0Qml0KCkpID4gMCkgeS5yU2hpZnRUbyhpLHkpO1xuICAgICAgICBpZih4LmNvbXBhcmVUbyh5KSA+PSAwKSB7XG4gICAgICAgICAgeC5zdWJUbyh5LHgpO1xuICAgICAgICAgIHguclNoaWZ0VG8oMSx4KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICB5LnN1YlRvKHgseSk7XG4gICAgICAgICAgeS5yU2hpZnRUbygxLHkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZihnID4gMCkgeS5sU2hpZnRUbyhnLHkpO1xuICAgICAgcmV0dXJuIHk7XG4gICAgfVxuXG4gICAgLy8gKHByb3RlY3RlZCkgdGhpcyAlIG4sIG4gPCAyXjI2XG4gICAgZnVuY3Rpb24gYm5wTW9kSW50KG4pIHtcbiAgICAgIGlmKG4gPD0gMCkgcmV0dXJuIDA7XG4gICAgICB2YXIgZCA9IHRoaXMuRFYlbiwgciA9ICh0aGlzLnM8MCk/bi0xOjA7XG4gICAgICBpZih0aGlzLnQgPiAwKVxuICAgICAgICBpZihkID09IDApIHIgPSB0aGlzWzBdJW47XG4gICAgICAgIGVsc2UgZm9yKHZhciBpID0gdGhpcy50LTE7IGkgPj0gMDsgLS1pKSByID0gKGQqcit0aGlzW2ldKSVuO1xuICAgICAgcmV0dXJuIHI7XG4gICAgfVxuXG4gICAgLy8gKHB1YmxpYykgMS90aGlzICUgbSAoSEFDIDE0LjYxKVxuICAgIGZ1bmN0aW9uIGJuTW9kSW52ZXJzZShtKSB7XG4gICAgICB2YXIgYWMgPSBtLmlzRXZlbigpO1xuICAgICAgaWYoKHRoaXMuaXNFdmVuKCkgJiYgYWMpIHx8IG0uc2lnbnVtKCkgPT0gMCkgcmV0dXJuIEJpZ0ludGVnZXIuWkVSTztcbiAgICAgIHZhciB1ID0gbS5jbG9uZSgpLCB2ID0gdGhpcy5jbG9uZSgpO1xuICAgICAgdmFyIGEgPSBuYnYoMSksIGIgPSBuYnYoMCksIGMgPSBuYnYoMCksIGQgPSBuYnYoMSk7XG4gICAgICB3aGlsZSh1LnNpZ251bSgpICE9IDApIHtcbiAgICAgICAgd2hpbGUodS5pc0V2ZW4oKSkge1xuICAgICAgICAgIHUuclNoaWZ0VG8oMSx1KTtcbiAgICAgICAgICBpZihhYykge1xuICAgICAgICAgICAgaWYoIWEuaXNFdmVuKCkgfHwgIWIuaXNFdmVuKCkpIHsgYS5hZGRUbyh0aGlzLGEpOyBiLnN1YlRvKG0sYik7IH1cbiAgICAgICAgICAgIGEuclNoaWZ0VG8oMSxhKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSBpZighYi5pc0V2ZW4oKSkgYi5zdWJUbyhtLGIpO1xuICAgICAgICAgIGIuclNoaWZ0VG8oMSxiKTtcbiAgICAgICAgfVxuICAgICAgICB3aGlsZSh2LmlzRXZlbigpKSB7XG4gICAgICAgICAgdi5yU2hpZnRUbygxLHYpO1xuICAgICAgICAgIGlmKGFjKSB7XG4gICAgICAgICAgICBpZighYy5pc0V2ZW4oKSB8fCAhZC5pc0V2ZW4oKSkgeyBjLmFkZFRvKHRoaXMsYyk7IGQuc3ViVG8obSxkKTsgfVxuICAgICAgICAgICAgYy5yU2hpZnRUbygxLGMpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIGlmKCFkLmlzRXZlbigpKSBkLnN1YlRvKG0sZCk7XG4gICAgICAgICAgZC5yU2hpZnRUbygxLGQpO1xuICAgICAgICB9XG4gICAgICAgIGlmKHUuY29tcGFyZVRvKHYpID49IDApIHtcbiAgICAgICAgICB1LnN1YlRvKHYsdSk7XG4gICAgICAgICAgaWYoYWMpIGEuc3ViVG8oYyxhKTtcbiAgICAgICAgICBiLnN1YlRvKGQsYik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgdi5zdWJUbyh1LHYpO1xuICAgICAgICAgIGlmKGFjKSBjLnN1YlRvKGEsYyk7XG4gICAgICAgICAgZC5zdWJUbyhiLGQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZih2LmNvbXBhcmVUbyhCaWdJbnRlZ2VyLk9ORSkgIT0gMCkgcmV0dXJuIEJpZ0ludGVnZXIuWkVSTztcbiAgICAgIGlmKGQuY29tcGFyZVRvKG0pID49IDApIHJldHVybiBkLnN1YnRyYWN0KG0pO1xuICAgICAgaWYoZC5zaWdudW0oKSA8IDApIGQuYWRkVG8obSxkKTsgZWxzZSByZXR1cm4gZDtcbiAgICAgIGlmKGQuc2lnbnVtKCkgPCAwKSByZXR1cm4gZC5hZGQobSk7IGVsc2UgcmV0dXJuIGQ7XG4gICAgfVxuXG4gICAgdmFyIGxvd3ByaW1lcyA9IFsyLDMsNSw3LDExLDEzLDE3LDE5LDIzLDI5LDMxLDM3LDQxLDQzLDQ3LDUzLDU5LDYxLDY3LDcxLDczLDc5LDgzLDg5LDk3LDEwMSwxMDMsMTA3LDEwOSwxMTMsMTI3LDEzMSwxMzcsMTM5LDE0OSwxNTEsMTU3LDE2MywxNjcsMTczLDE3OSwxODEsMTkxLDE5MywxOTcsMTk5LDIxMSwyMjMsMjI3LDIyOSwyMzMsMjM5LDI0MSwyNTEsMjU3LDI2MywyNjksMjcxLDI3NywyODEsMjgzLDI5MywzMDcsMzExLDMxMywzMTcsMzMxLDMzNywzNDcsMzQ5LDM1MywzNTksMzY3LDM3MywzNzksMzgzLDM4OSwzOTcsNDAxLDQwOSw0MTksNDIxLDQzMSw0MzMsNDM5LDQ0Myw0NDksNDU3LDQ2MSw0NjMsNDY3LDQ3OSw0ODcsNDkxLDQ5OSw1MDMsNTA5LDUyMSw1MjMsNTQxLDU0Nyw1NTcsNTYzLDU2OSw1NzEsNTc3LDU4Nyw1OTMsNTk5LDYwMSw2MDcsNjEzLDYxNyw2MTksNjMxLDY0MSw2NDMsNjQ3LDY1Myw2NTksNjYxLDY3Myw2NzcsNjgzLDY5MSw3MDEsNzA5LDcxOSw3MjcsNzMzLDczOSw3NDMsNzUxLDc1Nyw3NjEsNzY5LDc3Myw3ODcsNzk3LDgwOSw4MTEsODIxLDgyMyw4MjcsODI5LDgzOSw4NTMsODU3LDg1OSw4NjMsODc3LDg4MSw4ODMsODg3LDkwNyw5MTEsOTE5LDkyOSw5MzcsOTQxLDk0Nyw5NTMsOTY3LDk3MSw5NzcsOTgzLDk5MSw5OTddO1xuICAgIHZhciBscGxpbSA9ICgxPDwyNikvbG93cHJpbWVzW2xvd3ByaW1lcy5sZW5ndGgtMV07XG5cbiAgICAvLyAocHVibGljKSB0ZXN0IHByaW1hbGl0eSB3aXRoIGNlcnRhaW50eSA+PSAxLS41XnRcbiAgICBmdW5jdGlvbiBibklzUHJvYmFibGVQcmltZSh0KSB7XG4gICAgICB2YXIgaSwgeCA9IHRoaXMuYWJzKCk7XG4gICAgICBpZih4LnQgPT0gMSAmJiB4WzBdIDw9IGxvd3ByaW1lc1tsb3dwcmltZXMubGVuZ3RoLTFdKSB7XG4gICAgICAgIGZvcihpID0gMDsgaSA8IGxvd3ByaW1lcy5sZW5ndGg7ICsraSlcbiAgICAgICAgICBpZih4WzBdID09IGxvd3ByaW1lc1tpXSkgcmV0dXJuIHRydWU7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmKHguaXNFdmVuKCkpIHJldHVybiBmYWxzZTtcbiAgICAgIGkgPSAxO1xuICAgICAgd2hpbGUoaSA8IGxvd3ByaW1lcy5sZW5ndGgpIHtcbiAgICAgICAgdmFyIG0gPSBsb3dwcmltZXNbaV0sIGogPSBpKzE7XG4gICAgICAgIHdoaWxlKGogPCBsb3dwcmltZXMubGVuZ3RoICYmIG0gPCBscGxpbSkgbSAqPSBsb3dwcmltZXNbaisrXTtcbiAgICAgICAgbSA9IHgubW9kSW50KG0pO1xuICAgICAgICB3aGlsZShpIDwgaikgaWYobSVsb3dwcmltZXNbaSsrXSA9PSAwKSByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICByZXR1cm4geC5taWxsZXJSYWJpbih0KTtcbiAgICB9XG5cbiAgICAvLyAocHJvdGVjdGVkKSB0cnVlIGlmIHByb2JhYmx5IHByaW1lIChIQUMgNC4yNCwgTWlsbGVyLVJhYmluKVxuICAgIGZ1bmN0aW9uIGJucE1pbGxlclJhYmluKHQpIHtcbiAgICAgIHZhciBuMSA9IHRoaXMuc3VidHJhY3QoQmlnSW50ZWdlci5PTkUpO1xuICAgICAgdmFyIGsgPSBuMS5nZXRMb3dlc3RTZXRCaXQoKTtcbiAgICAgIGlmKGsgPD0gMCkgcmV0dXJuIGZhbHNlO1xuICAgICAgdmFyIHIgPSBuMS5zaGlmdFJpZ2h0KGspO1xuICAgICAgdCA9ICh0KzEpPj4xO1xuICAgICAgaWYodCA+IGxvd3ByaW1lcy5sZW5ndGgpIHQgPSBsb3dwcmltZXMubGVuZ3RoO1xuICAgICAgdmFyIGEgPSBuYmkoKTtcbiAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0OyArK2kpIHtcbiAgICAgICAgLy9QaWNrIGJhc2VzIGF0IHJhbmRvbSwgaW5zdGVhZCBvZiBzdGFydGluZyBhdCAyXG4gICAgICAgIGEuZnJvbUludChsb3dwcmltZXNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKmxvd3ByaW1lcy5sZW5ndGgpXSk7XG4gICAgICAgIHZhciB5ID0gYS5tb2RQb3cocix0aGlzKTtcbiAgICAgICAgaWYoeS5jb21wYXJlVG8oQmlnSW50ZWdlci5PTkUpICE9IDAgJiYgeS5jb21wYXJlVG8objEpICE9IDApIHtcbiAgICAgICAgICB2YXIgaiA9IDE7XG4gICAgICAgICAgd2hpbGUoaisrIDwgayAmJiB5LmNvbXBhcmVUbyhuMSkgIT0gMCkge1xuICAgICAgICAgICAgeSA9IHkubW9kUG93SW50KDIsdGhpcyk7XG4gICAgICAgICAgICBpZih5LmNvbXBhcmVUbyhCaWdJbnRlZ2VyLk9ORSkgPT0gMCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZih5LmNvbXBhcmVUbyhuMSkgIT0gMCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBwcm90ZWN0ZWRcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5jaHVua1NpemUgPSBibnBDaHVua1NpemU7XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUudG9SYWRpeCA9IGJucFRvUmFkaXg7XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUuZnJvbVJhZGl4ID0gYm5wRnJvbVJhZGl4O1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLmZyb21OdW1iZXIgPSBibnBGcm9tTnVtYmVyO1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLmJpdHdpc2VUbyA9IGJucEJpdHdpc2VUbztcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5jaGFuZ2VCaXQgPSBibnBDaGFuZ2VCaXQ7XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUuYWRkVG8gPSBibnBBZGRUbztcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5kTXVsdGlwbHkgPSBibnBETXVsdGlwbHk7XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUuZEFkZE9mZnNldCA9IGJucERBZGRPZmZzZXQ7XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUubXVsdGlwbHlMb3dlclRvID0gYm5wTXVsdGlwbHlMb3dlclRvO1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLm11bHRpcGx5VXBwZXJUbyA9IGJucE11bHRpcGx5VXBwZXJUbztcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5tb2RJbnQgPSBibnBNb2RJbnQ7XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUubWlsbGVyUmFiaW4gPSBibnBNaWxsZXJSYWJpbjtcblxuICAgIC8vIHB1YmxpY1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLmNsb25lID0gYm5DbG9uZTtcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5pbnRWYWx1ZSA9IGJuSW50VmFsdWU7XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUuYnl0ZVZhbHVlID0gYm5CeXRlVmFsdWU7XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUuc2hvcnRWYWx1ZSA9IGJuU2hvcnRWYWx1ZTtcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5zaWdudW0gPSBiblNpZ051bTtcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS50b0J5dGVBcnJheSA9IGJuVG9CeXRlQXJyYXk7XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUuZXF1YWxzID0gYm5FcXVhbHM7XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUubWluID0gYm5NaW47XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUubWF4ID0gYm5NYXg7XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUuYW5kID0gYm5BbmQ7XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUub3IgPSBibk9yO1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLnhvciA9IGJuWG9yO1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLmFuZE5vdCA9IGJuQW5kTm90O1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLm5vdCA9IGJuTm90O1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLnNoaWZ0TGVmdCA9IGJuU2hpZnRMZWZ0O1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLnNoaWZ0UmlnaHQgPSBiblNoaWZ0UmlnaHQ7XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUuZ2V0TG93ZXN0U2V0Qml0ID0gYm5HZXRMb3dlc3RTZXRCaXQ7XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUuYml0Q291bnQgPSBibkJpdENvdW50O1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLnRlc3RCaXQgPSBiblRlc3RCaXQ7XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUuc2V0Qml0ID0gYm5TZXRCaXQ7XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUuY2xlYXJCaXQgPSBibkNsZWFyQml0O1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLmZsaXBCaXQgPSBibkZsaXBCaXQ7XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUuYWRkID0gYm5BZGQ7XG4gICAgQmlnSW50ZWdlci5wcm90b3R5cGUuc3VidHJhY3QgPSBiblN1YnRyYWN0O1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLm11bHRpcGx5ID0gYm5NdWx0aXBseTtcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5kaXZpZGUgPSBibkRpdmlkZTtcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5yZW1haW5kZXIgPSBiblJlbWFpbmRlcjtcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5kaXZpZGVBbmRSZW1haW5kZXIgPSBibkRpdmlkZUFuZFJlbWFpbmRlcjtcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5tb2RQb3cgPSBibk1vZFBvdztcbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5tb2RJbnZlcnNlID0gYm5Nb2RJbnZlcnNlO1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLnBvdyA9IGJuUG93O1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLmdjZCA9IGJuR0NEO1xuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLmlzUHJvYmFibGVQcmltZSA9IGJuSXNQcm9iYWJsZVByaW1lO1xuXG4gICAgLy8gSlNCTi1zcGVjaWZpYyBleHRlbnNpb25cbiAgICBCaWdJbnRlZ2VyLnByb3RvdHlwZS5zcXVhcmUgPSBiblNxdWFyZTtcblxuICAgIC8vIEV4cG9zZSB0aGUgQmFycmV0dCBmdW5jdGlvblxuICAgIEJpZ0ludGVnZXIucHJvdG90eXBlLkJhcnJldHQgPSBCYXJyZXR0XG5cbiAgICAvLyBCaWdJbnRlZ2VyIGludGVyZmFjZXMgbm90IGltcGxlbWVudGVkIGluIGpzYm46XG5cbiAgICAvLyBCaWdJbnRlZ2VyKGludCBzaWdudW0sIGJ5dGVbXSBtYWduaXR1ZGUpXG4gICAgLy8gZG91YmxlIGRvdWJsZVZhbHVlKClcbiAgICAvLyBmbG9hdCBmbG9hdFZhbHVlKClcbiAgICAvLyBpbnQgaGFzaENvZGUoKVxuICAgIC8vIGxvbmcgbG9uZ1ZhbHVlKClcbiAgICAvLyBzdGF0aWMgQmlnSW50ZWdlciB2YWx1ZU9mKGxvbmcgdmFsKVxuXG4gICAgLy8gUmFuZG9tIG51bWJlciBnZW5lcmF0b3IgLSByZXF1aXJlcyBhIFBSTkcgYmFja2VuZCwgZS5nLiBwcm5nNC5qc1xuXG4gICAgLy8gRm9yIGJlc3QgcmVzdWx0cywgcHV0IGNvZGUgbGlrZVxuICAgIC8vIDxib2R5IG9uQ2xpY2s9J3JuZ19zZWVkX3RpbWUoKTsnIG9uS2V5UHJlc3M9J3JuZ19zZWVkX3RpbWUoKTsnPlxuICAgIC8vIGluIHlvdXIgbWFpbiBIVE1MIGRvY3VtZW50LlxuXG4gICAgdmFyIHJuZ19zdGF0ZTtcbiAgICB2YXIgcm5nX3Bvb2w7XG4gICAgdmFyIHJuZ19wcHRyO1xuXG4gICAgLy8gTWl4IGluIGEgMzItYml0IGludGVnZXIgaW50byB0aGUgcG9vbFxuICAgIGZ1bmN0aW9uIHJuZ19zZWVkX2ludCh4KSB7XG4gICAgICBybmdfcG9vbFtybmdfcHB0cisrXSBePSB4ICYgMjU1O1xuICAgICAgcm5nX3Bvb2xbcm5nX3BwdHIrK10gXj0gKHggPj4gOCkgJiAyNTU7XG4gICAgICBybmdfcG9vbFtybmdfcHB0cisrXSBePSAoeCA+PiAxNikgJiAyNTU7XG4gICAgICBybmdfcG9vbFtybmdfcHB0cisrXSBePSAoeCA+PiAyNCkgJiAyNTU7XG4gICAgICBpZihybmdfcHB0ciA+PSBybmdfcHNpemUpIHJuZ19wcHRyIC09IHJuZ19wc2l6ZTtcbiAgICB9XG5cbiAgICAvLyBNaXggaW4gdGhlIGN1cnJlbnQgdGltZSAody9taWxsaXNlY29uZHMpIGludG8gdGhlIHBvb2xcbiAgICBmdW5jdGlvbiBybmdfc2VlZF90aW1lKCkge1xuICAgICAgcm5nX3NlZWRfaW50KG5ldyBEYXRlKCkuZ2V0VGltZSgpKTtcbiAgICB9XG5cbiAgICAvLyBJbml0aWFsaXplIHRoZSBwb29sIHdpdGgganVuayBpZiBuZWVkZWQuXG4gICAgaWYocm5nX3Bvb2wgPT0gbnVsbCkge1xuICAgICAgcm5nX3Bvb2wgPSBuZXcgQXJyYXkoKTtcbiAgICAgIHJuZ19wcHRyID0gMDtcbiAgICAgIHZhciB0O1xuICAgICAgaWYodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJiB3aW5kb3cuY3J5cHRvKSB7XG4gICAgICAgIGlmICh3aW5kb3cuY3J5cHRvLmdldFJhbmRvbVZhbHVlcykge1xuICAgICAgICAgIC8vIFVzZSB3ZWJjcnlwdG8gaWYgYXZhaWxhYmxlXG4gICAgICAgICAgdmFyIHVhID0gbmV3IFVpbnQ4QXJyYXkoMzIpO1xuICAgICAgICAgIHdpbmRvdy5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKHVhKTtcbiAgICAgICAgICBmb3IodCA9IDA7IHQgPCAzMjsgKyt0KVxuICAgICAgICAgICAgcm5nX3Bvb2xbcm5nX3BwdHIrK10gPSB1YVt0XTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmKG5hdmlnYXRvci5hcHBOYW1lID09IFwiTmV0c2NhcGVcIiAmJiBuYXZpZ2F0b3IuYXBwVmVyc2lvbiA8IFwiNVwiKSB7XG4gICAgICAgICAgLy8gRXh0cmFjdCBlbnRyb3B5ICgyNTYgYml0cykgZnJvbSBOUzQgUk5HIGlmIGF2YWlsYWJsZVxuICAgICAgICAgIHZhciB6ID0gd2luZG93LmNyeXB0by5yYW5kb20oMzIpO1xuICAgICAgICAgIGZvcih0ID0gMDsgdCA8IHoubGVuZ3RoOyArK3QpXG4gICAgICAgICAgICBybmdfcG9vbFtybmdfcHB0cisrXSA9IHouY2hhckNvZGVBdCh0KSAmIDI1NTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgd2hpbGUocm5nX3BwdHIgPCBybmdfcHNpemUpIHsgIC8vIGV4dHJhY3Qgc29tZSByYW5kb21uZXNzIGZyb20gTWF0aC5yYW5kb20oKVxuICAgICAgICB0ID0gTWF0aC5mbG9vcig2NTUzNiAqIE1hdGgucmFuZG9tKCkpO1xuICAgICAgICBybmdfcG9vbFtybmdfcHB0cisrXSA9IHQgPj4+IDg7XG4gICAgICAgIHJuZ19wb29sW3JuZ19wcHRyKytdID0gdCAmIDI1NTtcbiAgICAgIH1cbiAgICAgIHJuZ19wcHRyID0gMDtcbiAgICAgIHJuZ19zZWVkX3RpbWUoKTtcbiAgICAgIC8vcm5nX3NlZWRfaW50KHdpbmRvdy5zY3JlZW5YKTtcbiAgICAgIC8vcm5nX3NlZWRfaW50KHdpbmRvdy5zY3JlZW5ZKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBybmdfZ2V0X2J5dGUoKSB7XG4gICAgICBpZihybmdfc3RhdGUgPT0gbnVsbCkge1xuICAgICAgICBybmdfc2VlZF90aW1lKCk7XG4gICAgICAgIHJuZ19zdGF0ZSA9IHBybmdfbmV3c3RhdGUoKTtcbiAgICAgICAgcm5nX3N0YXRlLmluaXQocm5nX3Bvb2wpO1xuICAgICAgICBmb3Iocm5nX3BwdHIgPSAwOyBybmdfcHB0ciA8IHJuZ19wb29sLmxlbmd0aDsgKytybmdfcHB0cilcbiAgICAgICAgICBybmdfcG9vbFtybmdfcHB0cl0gPSAwO1xuICAgICAgICBybmdfcHB0ciA9IDA7XG4gICAgICAgIC8vcm5nX3Bvb2wgPSBudWxsO1xuICAgICAgfVxuICAgICAgLy8gVE9ETzogYWxsb3cgcmVzZWVkaW5nIGFmdGVyIGZpcnN0IHJlcXVlc3RcbiAgICAgIHJldHVybiBybmdfc3RhdGUubmV4dCgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJuZ19nZXRfYnl0ZXMoYmEpIHtcbiAgICAgIHZhciBpO1xuICAgICAgZm9yKGkgPSAwOyBpIDwgYmEubGVuZ3RoOyArK2kpIGJhW2ldID0gcm5nX2dldF9ieXRlKCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gU2VjdXJlUmFuZG9tKCkge31cblxuICAgIFNlY3VyZVJhbmRvbS5wcm90b3R5cGUubmV4dEJ5dGVzID0gcm5nX2dldF9ieXRlcztcblxuICAgIC8vIHBybmc0LmpzIC0gdXNlcyBBcmNmb3VyIGFzIGEgUFJOR1xuXG4gICAgZnVuY3Rpb24gQXJjZm91cigpIHtcbiAgICAgIHRoaXMuaSA9IDA7XG4gICAgICB0aGlzLmogPSAwO1xuICAgICAgdGhpcy5TID0gbmV3IEFycmF5KCk7XG4gICAgfVxuXG4gICAgLy8gSW5pdGlhbGl6ZSBhcmNmb3VyIGNvbnRleHQgZnJvbSBrZXksIGFuIGFycmF5IG9mIGludHMsIGVhY2ggZnJvbSBbMC4uMjU1XVxuICAgIGZ1bmN0aW9uIEFSQzRpbml0KGtleSkge1xuICAgICAgdmFyIGksIGosIHQ7XG4gICAgICBmb3IoaSA9IDA7IGkgPCAyNTY7ICsraSlcbiAgICAgICAgdGhpcy5TW2ldID0gaTtcbiAgICAgIGogPSAwO1xuICAgICAgZm9yKGkgPSAwOyBpIDwgMjU2OyArK2kpIHtcbiAgICAgICAgaiA9IChqICsgdGhpcy5TW2ldICsga2V5W2kgJSBrZXkubGVuZ3RoXSkgJiAyNTU7XG4gICAgICAgIHQgPSB0aGlzLlNbaV07XG4gICAgICAgIHRoaXMuU1tpXSA9IHRoaXMuU1tqXTtcbiAgICAgICAgdGhpcy5TW2pdID0gdDtcbiAgICAgIH1cbiAgICAgIHRoaXMuaSA9IDA7XG4gICAgICB0aGlzLmogPSAwO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIEFSQzRuZXh0KCkge1xuICAgICAgdmFyIHQ7XG4gICAgICB0aGlzLmkgPSAodGhpcy5pICsgMSkgJiAyNTU7XG4gICAgICB0aGlzLmogPSAodGhpcy5qICsgdGhpcy5TW3RoaXMuaV0pICYgMjU1O1xuICAgICAgdCA9IHRoaXMuU1t0aGlzLmldO1xuICAgICAgdGhpcy5TW3RoaXMuaV0gPSB0aGlzLlNbdGhpcy5qXTtcbiAgICAgIHRoaXMuU1t0aGlzLmpdID0gdDtcbiAgICAgIHJldHVybiB0aGlzLlNbKHQgKyB0aGlzLlNbdGhpcy5pXSkgJiAyNTVdO1xuICAgIH1cblxuICAgIEFyY2ZvdXIucHJvdG90eXBlLmluaXQgPSBBUkM0aW5pdDtcbiAgICBBcmNmb3VyLnByb3RvdHlwZS5uZXh0ID0gQVJDNG5leHQ7XG5cbiAgICAvLyBQbHVnIGluIHlvdXIgUk5HIGNvbnN0cnVjdG9yIGhlcmVcbiAgICBmdW5jdGlvbiBwcm5nX25ld3N0YXRlKCkge1xuICAgICAgcmV0dXJuIG5ldyBBcmNmb3VyKCk7XG4gICAgfVxuXG4gICAgLy8gUG9vbCBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0IGFuZCBncmVhdGVyIHRoYW4gMzIuXG4gICAgLy8gQW4gYXJyYXkgb2YgYnl0ZXMgdGhlIHNpemUgb2YgdGhlIHBvb2wgd2lsbCBiZSBwYXNzZWQgdG8gaW5pdCgpXG4gICAgdmFyIHJuZ19wc2l6ZSA9IDI1NjtcblxuICAgIGlmICh0eXBlb2YgZXhwb3J0cyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0ge1xuICAgICAgICAgICAgZGVmYXVsdDogQmlnSW50ZWdlcixcbiAgICAgICAgICAgIEJpZ0ludGVnZXI6IEJpZ0ludGVnZXIsXG4gICAgICAgICAgICBTZWN1cmVSYW5kb206IFNlY3VyZVJhbmRvbSxcbiAgICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmpzYm4gPSB7XG4gICAgICAgICAgQmlnSW50ZWdlcjogQmlnSW50ZWdlcixcbiAgICAgICAgICBTZWN1cmVSYW5kb206IFNlY3VyZVJhbmRvbVxuICAgICAgICB9O1xuICAgIH1cblxufSkuY2FsbCh0aGlzKTtcbiIsIi8qKlxuICogQ29udmVydCBhcnJheSBvZiAxNiBieXRlIHZhbHVlcyB0byBVVUlEIHN0cmluZyBmb3JtYXQgb2YgdGhlIGZvcm06XG4gKiBYWFhYWFhYWC1YWFhYLVhYWFgtWFhYWC1YWFhYWFhYWFhYWFhcbiAqL1xudmFyIGJ5dGVUb0hleCA9IFtdO1xuZm9yICh2YXIgaSA9IDA7IGkgPCAyNTY7ICsraSkge1xuICBieXRlVG9IZXhbaV0gPSAoaSArIDB4MTAwKS50b1N0cmluZygxNikuc3Vic3RyKDEpO1xufVxuXG5mdW5jdGlvbiBieXRlc1RvVXVpZChidWYsIG9mZnNldCkge1xuICB2YXIgaSA9IG9mZnNldCB8fCAwO1xuICB2YXIgYnRoID0gYnl0ZVRvSGV4O1xuICAvLyBqb2luIHVzZWQgdG8gZml4IG1lbW9yeSBpc3N1ZSBjYXVzZWQgYnkgY29uY2F0ZW5hdGlvbjogaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzE3NSNjNFxuICByZXR1cm4gKFtidGhbYnVmW2krK11dLCBidGhbYnVmW2krK11dLCBcblx0YnRoW2J1ZltpKytdXSwgYnRoW2J1ZltpKytdXSwgJy0nLFxuXHRidGhbYnVmW2krK11dLCBidGhbYnVmW2krK11dLCAnLScsXG5cdGJ0aFtidWZbaSsrXV0sIGJ0aFtidWZbaSsrXV0sICctJyxcblx0YnRoW2J1ZltpKytdXSwgYnRoW2J1ZltpKytdXSwgJy0nLFxuXHRidGhbYnVmW2krK11dLCBidGhbYnVmW2krK11dLFxuXHRidGhbYnVmW2krK11dLCBidGhbYnVmW2krK11dLFxuXHRidGhbYnVmW2krK11dLCBidGhbYnVmW2krK11dXSkuam9pbignJyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYnl0ZXNUb1V1aWQ7XG4iLCIvLyBVbmlxdWUgSUQgY3JlYXRpb24gcmVxdWlyZXMgYSBoaWdoIHF1YWxpdHkgcmFuZG9tICMgZ2VuZXJhdG9yLiAgSW4gdGhlXG4vLyBicm93c2VyIHRoaXMgaXMgYSBsaXR0bGUgY29tcGxpY2F0ZWQgZHVlIHRvIHVua25vd24gcXVhbGl0eSBvZiBNYXRoLnJhbmRvbSgpXG4vLyBhbmQgaW5jb25zaXN0ZW50IHN1cHBvcnQgZm9yIHRoZSBgY3J5cHRvYCBBUEkuICBXZSBkbyB0aGUgYmVzdCB3ZSBjYW4gdmlhXG4vLyBmZWF0dXJlLWRldGVjdGlvblxuXG4vLyBnZXRSYW5kb21WYWx1ZXMgbmVlZHMgdG8gYmUgaW52b2tlZCBpbiBhIGNvbnRleHQgd2hlcmUgXCJ0aGlzXCIgaXMgYSBDcnlwdG9cbi8vIGltcGxlbWVudGF0aW9uLiBBbHNvLCBmaW5kIHRoZSBjb21wbGV0ZSBpbXBsZW1lbnRhdGlvbiBvZiBjcnlwdG8gb24gSUUxMS5cbnZhciBnZXRSYW5kb21WYWx1ZXMgPSAodHlwZW9mKGNyeXB0bykgIT0gJ3VuZGVmaW5lZCcgJiYgY3J5cHRvLmdldFJhbmRvbVZhbHVlcyAmJiBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzLmJpbmQoY3J5cHRvKSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAodHlwZW9mKG1zQ3J5cHRvKSAhPSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygd2luZG93Lm1zQ3J5cHRvLmdldFJhbmRvbVZhbHVlcyA9PSAnZnVuY3Rpb24nICYmIG1zQ3J5cHRvLmdldFJhbmRvbVZhbHVlcy5iaW5kKG1zQ3J5cHRvKSk7XG5cbmlmIChnZXRSYW5kb21WYWx1ZXMpIHtcbiAgLy8gV0hBVFdHIGNyeXB0byBSTkcgLSBodHRwOi8vd2lraS53aGF0d2cub3JnL3dpa2kvQ3J5cHRvXG4gIHZhciBybmRzOCA9IG5ldyBVaW50OEFycmF5KDE2KTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bmRlZlxuXG4gIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gd2hhdHdnUk5HKCkge1xuICAgIGdldFJhbmRvbVZhbHVlcyhybmRzOCk7XG4gICAgcmV0dXJuIHJuZHM4O1xuICB9O1xufSBlbHNlIHtcbiAgLy8gTWF0aC5yYW5kb20oKS1iYXNlZCAoUk5HKVxuICAvL1xuICAvLyBJZiBhbGwgZWxzZSBmYWlscywgdXNlIE1hdGgucmFuZG9tKCkuICBJdCdzIGZhc3QsIGJ1dCBpcyBvZiB1bnNwZWNpZmllZFxuICAvLyBxdWFsaXR5LlxuICB2YXIgcm5kcyA9IG5ldyBBcnJheSgxNik7XG5cbiAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBtYXRoUk5HKCkge1xuICAgIGZvciAodmFyIGkgPSAwLCByOyBpIDwgMTY7IGkrKykge1xuICAgICAgaWYgKChpICYgMHgwMykgPT09IDApIHIgPSBNYXRoLnJhbmRvbSgpICogMHgxMDAwMDAwMDA7XG4gICAgICBybmRzW2ldID0gciA+Pj4gKChpICYgMHgwMykgPDwgMykgJiAweGZmO1xuICAgIH1cblxuICAgIHJldHVybiBybmRzO1xuICB9O1xufVxuIiwidmFyIHJuZyA9IHJlcXVpcmUoJy4vbGliL3JuZycpO1xudmFyIGJ5dGVzVG9VdWlkID0gcmVxdWlyZSgnLi9saWIvYnl0ZXNUb1V1aWQnKTtcblxuZnVuY3Rpb24gdjQob3B0aW9ucywgYnVmLCBvZmZzZXQpIHtcbiAgdmFyIGkgPSBidWYgJiYgb2Zmc2V0IHx8IDA7XG5cbiAgaWYgKHR5cGVvZihvcHRpb25zKSA9PSAnc3RyaW5nJykge1xuICAgIGJ1ZiA9IG9wdGlvbnMgPT09ICdiaW5hcnknID8gbmV3IEFycmF5KDE2KSA6IG51bGw7XG4gICAgb3B0aW9ucyA9IG51bGw7XG4gIH1cbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgdmFyIHJuZHMgPSBvcHRpb25zLnJhbmRvbSB8fCAob3B0aW9ucy5ybmcgfHwgcm5nKSgpO1xuXG4gIC8vIFBlciA0LjQsIHNldCBiaXRzIGZvciB2ZXJzaW9uIGFuZCBgY2xvY2tfc2VxX2hpX2FuZF9yZXNlcnZlZGBcbiAgcm5kc1s2XSA9IChybmRzWzZdICYgMHgwZikgfCAweDQwO1xuICBybmRzWzhdID0gKHJuZHNbOF0gJiAweDNmKSB8IDB4ODA7XG5cbiAgLy8gQ29weSBieXRlcyB0byBidWZmZXIsIGlmIHByb3ZpZGVkXG4gIGlmIChidWYpIHtcbiAgICBmb3IgKHZhciBpaSA9IDA7IGlpIDwgMTY7ICsraWkpIHtcbiAgICAgIGJ1ZltpICsgaWldID0gcm5kc1tpaV07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGJ1ZiB8fCBieXRlc1RvVXVpZChybmRzKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB2NDtcbiIsIi8vIERlY2xhcmUgdGhlIEVTNiBmZWF0dXJlcyB3ZSdyZSB1c2luZ1xyXG5cclxuLy8gVE9ETzogQ29uc2lkZXIgdXNpbmcgdGhlIGxvY2FsIGZ1bmN0aW9uIHZlcnNpb25zIG9mIHRoZXNlLCBzbyB0aGF0IHdlXHJcbi8vIGF2b2lkIG1vZGlmeWluZyBicm93c2VyIGdsb2JhbHMgKHBvdGVudGlhbCBmb3IgaW50ZXJvcCBidWdzIHdpdGggb3RoZXIgbGlicmFyaWVzXHJcbi8vIG9uIHRoZSBwYWdlIHRoYXQgbWlnaHQgYmUgcG9seWZpbGxpbmcgRVM2IGZlYXR1cmVzKVxyXG5cclxuaW1wb3J0ICdjb3JlLWpzL2VzNi9wcm9taXNlJztcclxuaW1wb3J0ICdjb3JlLWpzL2ZuL2Z1bmN0aW9uL2JpbmQnO1xyXG5pbXBvcnQgJ2NvcmUtanMvZm4vb2JqZWN0L2Fzc2lnbic7XHJcbmltcG9ydCAnY29yZS1qcy9mbi9hcnJheS9maW5kJztcclxuaW1wb3J0ICdjb3JlLWpzL2ZuL2FycmF5L3NvbWUnO1xyXG5pbXBvcnQgJ2NvcmUtanMvZm4vYXJyYXkvaXMtYXJyYXknO1xyXG5pbXBvcnQgJ2NvcmUtanMvZm4vYXJyYXkvc3BsaWNlJztcclxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG5cclxuaW1wb3J0IHsgTG9nIH0gZnJvbSAnLi9Mb2cuanMnO1xyXG5pbXBvcnQgeyBUaW1lciB9IGZyb20gJy4vVGltZXIuanMnO1xyXG5cclxuY29uc3QgRGVmYXVsdEFjY2Vzc1Rva2VuRXhwaXJpbmdOb3RpZmljYXRpb25UaW1lID0gNjA7IC8vIHNlY29uZHNcclxuXHJcbmV4cG9ydCBjbGFzcyBBY2Nlc3NUb2tlbkV2ZW50cyB7XHJcblxyXG4gICAgY29uc3RydWN0b3Ioe1xyXG4gICAgICAgIGFjY2Vzc1Rva2VuRXhwaXJpbmdOb3RpZmljYXRpb25UaW1lID0gRGVmYXVsdEFjY2Vzc1Rva2VuRXhwaXJpbmdOb3RpZmljYXRpb25UaW1lLFxyXG4gICAgICAgIGFjY2Vzc1Rva2VuRXhwaXJpbmdUaW1lciA9IG5ldyBUaW1lcihcIkFjY2VzcyB0b2tlbiBleHBpcmluZ1wiKSxcclxuICAgICAgICBhY2Nlc3NUb2tlbkV4cGlyZWRUaW1lciA9IG5ldyBUaW1lcihcIkFjY2VzcyB0b2tlbiBleHBpcmVkXCIpXHJcbiAgICB9ID0ge30pIHtcclxuICAgICAgICB0aGlzLl9hY2Nlc3NUb2tlbkV4cGlyaW5nTm90aWZpY2F0aW9uVGltZSA9IGFjY2Vzc1Rva2VuRXhwaXJpbmdOb3RpZmljYXRpb25UaW1lO1xyXG5cclxuICAgICAgICB0aGlzLl9hY2Nlc3NUb2tlbkV4cGlyaW5nID0gYWNjZXNzVG9rZW5FeHBpcmluZ1RpbWVyO1xyXG4gICAgICAgIHRoaXMuX2FjY2Vzc1Rva2VuRXhwaXJlZCA9IGFjY2Vzc1Rva2VuRXhwaXJlZFRpbWVyO1xyXG4gICAgfVxyXG5cclxuICAgIGxvYWQoY29udGFpbmVyKSB7XHJcbiAgICAgICAgLy8gb25seSByZWdpc3RlciBldmVudHMgaWYgdGhlcmUncyBhbiBhY2Nlc3MgdG9rZW4gYW5kIGl0IGhhcyBhbiBleHBpcmF0aW9uXHJcbiAgICAgICAgaWYgKGNvbnRhaW5lci5hY2Nlc3NfdG9rZW4gJiYgY29udGFpbmVyLmV4cGlyZXNfaW4gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBsZXQgZHVyYXRpb24gPSBjb250YWluZXIuZXhwaXJlc19pbjtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiQWNjZXNzVG9rZW5FdmVudHMubG9hZDogYWNjZXNzIHRva2VuIHByZXNlbnQsIHJlbWFpbmluZyBkdXJhdGlvbjpcIiwgZHVyYXRpb24pO1xyXG5cclxuICAgICAgICAgICAgaWYgKGR1cmF0aW9uID4gMCkge1xyXG4gICAgICAgICAgICAgICAgLy8gb25seSByZWdpc3RlciBleHBpcmluZyBpZiB3ZSBzdGlsbCBoYXZlIHRpbWVcclxuICAgICAgICAgICAgICAgIGxldCBleHBpcmluZyA9IGR1cmF0aW9uIC0gdGhpcy5fYWNjZXNzVG9rZW5FeHBpcmluZ05vdGlmaWNhdGlvblRpbWU7XHJcbiAgICAgICAgICAgICAgICBpZiAoZXhwaXJpbmcgPD0gMCl7XHJcbiAgICAgICAgICAgICAgICAgICAgZXhwaXJpbmcgPSAxO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJBY2Nlc3NUb2tlbkV2ZW50cy5sb2FkOiByZWdpc3RlcmluZyBleHBpcmluZyB0aW1lciBpbjpcIiwgZXhwaXJpbmcpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fYWNjZXNzVG9rZW5FeHBpcmluZy5pbml0KGV4cGlyaW5nKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIkFjY2Vzc1Rva2VuRXZlbnRzLmxvYWQ6IGNhbmNlbGluZyBleGlzdGluZyBleHBpcmluZyB0aW1lciBiZWNhc2Ugd2UncmUgcGFzdCBleHBpcmF0aW9uLlwiKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2FjY2Vzc1Rva2VuRXhwaXJpbmcuY2FuY2VsKCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIGlmIGl0J3MgbmVnYXRpdmUsIGl0IHdpbGwgc3RpbGwgZmlyZVxyXG4gICAgICAgICAgICBsZXQgZXhwaXJlZCA9IGR1cmF0aW9uICsgMTtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiQWNjZXNzVG9rZW5FdmVudHMubG9hZDogcmVnaXN0ZXJpbmcgZXhwaXJlZCB0aW1lciBpbjpcIiwgZXhwaXJlZCk7XHJcbiAgICAgICAgICAgIHRoaXMuX2FjY2Vzc1Rva2VuRXhwaXJlZC5pbml0KGV4cGlyZWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5fYWNjZXNzVG9rZW5FeHBpcmluZy5jYW5jZWwoKTtcclxuICAgICAgICAgICAgdGhpcy5fYWNjZXNzVG9rZW5FeHBpcmVkLmNhbmNlbCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB1bmxvYWQoKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiQWNjZXNzVG9rZW5FdmVudHMudW5sb2FkOiBjYW5jZWxpbmcgZXhpc3RpbmcgYWNjZXNzIHRva2VuIHRpbWVyc1wiKTtcclxuICAgICAgICB0aGlzLl9hY2Nlc3NUb2tlbkV4cGlyaW5nLmNhbmNlbCgpO1xyXG4gICAgICAgIHRoaXMuX2FjY2Vzc1Rva2VuRXhwaXJlZC5jYW5jZWwoKTtcclxuICAgIH1cclxuXHJcbiAgICBhZGRBY2Nlc3NUb2tlbkV4cGlyaW5nKGNiKSB7XHJcbiAgICAgICAgdGhpcy5fYWNjZXNzVG9rZW5FeHBpcmluZy5hZGRIYW5kbGVyKGNiKTtcclxuICAgIH1cclxuICAgIHJlbW92ZUFjY2Vzc1Rva2VuRXhwaXJpbmcoY2IpIHtcclxuICAgICAgICB0aGlzLl9hY2Nlc3NUb2tlbkV4cGlyaW5nLnJlbW92ZUhhbmRsZXIoY2IpO1xyXG4gICAgfVxyXG5cclxuICAgIGFkZEFjY2Vzc1Rva2VuRXhwaXJlZChjYikge1xyXG4gICAgICAgIHRoaXMuX2FjY2Vzc1Rva2VuRXhwaXJlZC5hZGRIYW5kbGVyKGNiKTtcclxuICAgIH1cclxuICAgIHJlbW92ZUFjY2Vzc1Rva2VuRXhwaXJlZChjYikge1xyXG4gICAgICAgIHRoaXMuX2FjY2Vzc1Rva2VuRXhwaXJlZC5yZW1vdmVIYW5kbGVyKGNiKTtcclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcblxyXG5jb25zdCBEZWZhdWx0SW50ZXJ2YWwgPSAyMDAwO1xyXG5cclxuZXhwb3J0IGNsYXNzIENoZWNrU2Vzc2lvbklGcmFtZSB7XHJcbiAgICBjb25zdHJ1Y3RvcihjYWxsYmFjaywgY2xpZW50X2lkLCB1cmwsIGludGVydmFsLCBzdG9wT25FcnJvciA9IHRydWUpIHtcclxuICAgICAgICB0aGlzLl9jYWxsYmFjayA9IGNhbGxiYWNrO1xyXG4gICAgICAgIHRoaXMuX2NsaWVudF9pZCA9IGNsaWVudF9pZDtcclxuICAgICAgICB0aGlzLl91cmwgPSB1cmw7XHJcbiAgICAgICAgdGhpcy5faW50ZXJ2YWwgPSBpbnRlcnZhbCB8fCBEZWZhdWx0SW50ZXJ2YWw7XHJcbiAgICAgICAgdGhpcy5fc3RvcE9uRXJyb3IgPSBzdG9wT25FcnJvcjtcclxuXHJcbiAgICAgICAgdmFyIGlkeCA9IHVybC5pbmRleE9mKFwiL1wiLCB1cmwuaW5kZXhPZihcIi8vXCIpICsgMik7XHJcbiAgICAgICAgdGhpcy5fZnJhbWVfb3JpZ2luID0gdXJsLnN1YnN0cigwLCBpZHgpO1xyXG5cclxuICAgICAgICB0aGlzLl9mcmFtZSA9IHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaWZyYW1lXCIpO1xyXG5cclxuICAgICAgICAvLyBzaG90Z3VuIGFwcHJvYWNoXHJcbiAgICAgICAgdGhpcy5fZnJhbWUuc3R5bGUudmlzaWJpbGl0eSA9IFwiaGlkZGVuXCI7XHJcbiAgICAgICAgdGhpcy5fZnJhbWUuc3R5bGUucG9zaXRpb24gPSBcImFic29sdXRlXCI7XHJcbiAgICAgICAgdGhpcy5fZnJhbWUuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xyXG4gICAgICAgIHRoaXMuX2ZyYW1lLnN0eWxlLndpZHRoID0gMDtcclxuICAgICAgICB0aGlzLl9mcmFtZS5zdHlsZS5oZWlnaHQgPSAwO1xyXG5cclxuICAgICAgICB0aGlzLl9mcmFtZS5zcmMgPSB1cmw7XHJcbiAgICB9XHJcbiAgICBsb2FkKCkge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLl9mcmFtZS5vbmxvYWQgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHdpbmRvdy5kb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRoaXMuX2ZyYW1lKTtcclxuICAgICAgICAgICAgdGhpcy5fYm91bmRNZXNzYWdlRXZlbnQgPSB0aGlzLl9tZXNzYWdlLmJpbmQodGhpcyk7XHJcbiAgICAgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCB0aGlzLl9ib3VuZE1lc3NhZ2VFdmVudCwgZmFsc2UpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgX21lc3NhZ2UoZSkge1xyXG4gICAgICAgIGlmIChlLm9yaWdpbiA9PT0gdGhpcy5fZnJhbWVfb3JpZ2luICYmXHJcbiAgICAgICAgICAgIGUuc291cmNlID09PSB0aGlzLl9mcmFtZS5jb250ZW50V2luZG93XHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGlmIChlLmRhdGEgPT09IFwiZXJyb3JcIikge1xyXG4gICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiQ2hlY2tTZXNzaW9uSUZyYW1lOiBlcnJvciBtZXNzYWdlIGZyb20gY2hlY2sgc2Vzc2lvbiBvcCBpZnJhbWVcIik7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fc3RvcE9uRXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0b3AoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChlLmRhdGEgPT09IFwiY2hhbmdlZFwiKSB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJDaGVja1Nlc3Npb25JRnJhbWU6IGNoYW5nZWQgbWVzc2FnZSBmcm9tIGNoZWNrIHNlc3Npb24gb3AgaWZyYW1lXCIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdG9wKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9jYWxsYmFjaygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiQ2hlY2tTZXNzaW9uSUZyYW1lOiBcIiArIGUuZGF0YSArIFwiIG1lc3NhZ2UgZnJvbSBjaGVjayBzZXNzaW9uIG9wIGlmcmFtZVwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHN0YXJ0KHNlc3Npb25fc3RhdGUpIHtcclxuICAgICAgICBpZiAodGhpcy5fc2Vzc2lvbl9zdGF0ZSAhPT0gc2Vzc2lvbl9zdGF0ZSkge1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJDaGVja1Nlc3Npb25JRnJhbWUuc3RhcnRcIik7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0b3AoKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuX3Nlc3Npb25fc3RhdGUgPSBzZXNzaW9uX3N0YXRlO1xyXG5cclxuICAgICAgICAgICAgbGV0IHNlbmQgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9mcmFtZS5jb250ZW50V2luZG93LnBvc3RNZXNzYWdlKHRoaXMuX2NsaWVudF9pZCArIFwiIFwiICsgdGhpcy5fc2Vzc2lvbl9zdGF0ZSwgdGhpcy5fZnJhbWVfb3JpZ2luKTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8vIHRyaWdnZXIgbm93XHJcbiAgICAgICAgICAgIHNlbmQoKTtcclxuXHJcbiAgICAgICAgICAgIC8vIGFuZCBzZXR1cCB0aW1lclxyXG4gICAgICAgICAgICB0aGlzLl90aW1lciA9IHdpbmRvdy5zZXRJbnRlcnZhbChzZW5kLCB0aGlzLl9pbnRlcnZhbCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHN0b3AoKSB7XHJcbiAgICAgICAgdGhpcy5fc2Vzc2lvbl9zdGF0ZSA9IG51bGw7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl90aW1lcikge1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJDaGVja1Nlc3Npb25JRnJhbWUuc3RvcFwiKTtcclxuXHJcbiAgICAgICAgICAgIHdpbmRvdy5jbGVhckludGVydmFsKHRoaXMuX3RpbWVyKTtcclxuICAgICAgICAgICAgdGhpcy5fdGltZXIgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBDb3Jkb3ZhUG9wdXBXaW5kb3cgfSBmcm9tICcuL0NvcmRvdmFQb3B1cFdpbmRvdy5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ29yZG92YUlGcmFtZU5hdmlnYXRvciB7XHJcblxyXG4gICAgcHJlcGFyZShwYXJhbXMpIHtcclxuICAgICAgICBwYXJhbXMucG9wdXBXaW5kb3dGZWF0dXJlcyA9ICdoaWRkZW49eWVzJztcclxuICAgICAgICBsZXQgcG9wdXAgPSBuZXcgQ29yZG92YVBvcHVwV2luZG93KHBhcmFtcyk7XHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShwb3B1cCk7XHJcbiAgICB9XHJcbn1cclxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG5cclxuaW1wb3J0IHsgQ29yZG92YVBvcHVwV2luZG93IH0gZnJvbSAnLi9Db3Jkb3ZhUG9wdXBXaW5kb3cuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvcmRvdmFQb3B1cE5hdmlnYXRvciB7XHJcblxyXG4gICAgcHJlcGFyZShwYXJhbXMpIHtcclxuICAgICAgICBsZXQgcG9wdXAgPSBuZXcgQ29yZG92YVBvcHVwV2luZG93KHBhcmFtcyk7XHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShwb3B1cCk7XHJcbiAgICB9XHJcbn1cclxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG5cclxuaW1wb3J0IHsgTG9nIH0gZnJvbSAnLi9Mb2cuanMnO1xyXG5cclxuY29uc3QgRGVmYXVsdFBvcHVwRmVhdHVyZXMgPSAnbG9jYXRpb249bm8sdG9vbGJhcj1ubyx6b29tPW5vJztcclxuY29uc3QgRGVmYXVsdFBvcHVwVGFyZ2V0ID0gXCJfYmxhbmtcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBDb3Jkb3ZhUG9wdXBXaW5kb3cge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHBhcmFtcykge1xyXG4gICAgICAgIHRoaXMuX3Byb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuX3Jlc29sdmUgPSByZXNvbHZlO1xyXG4gICAgICAgICAgICB0aGlzLl9yZWplY3QgPSByZWplY3Q7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuZmVhdHVyZXMgPSBwYXJhbXMucG9wdXBXaW5kb3dGZWF0dXJlcyB8fCBEZWZhdWx0UG9wdXBGZWF0dXJlcztcclxuICAgICAgICB0aGlzLnRhcmdldCA9IHBhcmFtcy5wb3B1cFdpbmRvd1RhcmdldCB8fCBEZWZhdWx0UG9wdXBUYXJnZXQ7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5yZWRpcmVjdF91cmkgPSBwYXJhbXMuc3RhcnRVcmw7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiQ29yZG92YVBvcHVwV2luZG93LmN0b3I6IHJlZGlyZWN0X3VyaTogXCIgKyB0aGlzLnJlZGlyZWN0X3VyaSk7XHJcbiAgICB9XHJcblxyXG4gICAgX2lzSW5BcHBCcm93c2VySW5zdGFsbGVkKGNvcmRvdmFNZXRhZGF0YSkge1xyXG4gICAgICAgIHJldHVybiBbXCJjb3Jkb3ZhLXBsdWdpbi1pbmFwcGJyb3dzZXJcIiwgXCJjb3Jkb3ZhLXBsdWdpbi1pbmFwcGJyb3dzZXIuaW5hcHBicm93c2VyXCIsIFwib3JnLmFwYWNoZS5jb3Jkb3ZhLmluYXBwYnJvd3NlclwiXS5zb21lKGZ1bmN0aW9uIChuYW1lKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBjb3Jkb3ZhTWV0YWRhdGEuaGFzT3duUHJvcGVydHkobmFtZSlcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG4gICAgXHJcbiAgICBuYXZpZ2F0ZShwYXJhbXMpIHtcclxuICAgICAgICBpZiAoIXBhcmFtcyB8fCAhcGFyYW1zLnVybCkge1xyXG4gICAgICAgICAgICB0aGlzLl9lcnJvcihcIk5vIHVybCBwcm92aWRlZFwiKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoIXdpbmRvdy5jb3Jkb3ZhKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZXJyb3IoXCJjb3Jkb3ZhIGlzIHVuZGVmaW5lZFwiKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB2YXIgY29yZG92YU1ldGFkYXRhID0gd2luZG93LmNvcmRvdmEucmVxdWlyZShcImNvcmRvdmEvcGx1Z2luX2xpc3RcIikubWV0YWRhdGE7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9pc0luQXBwQnJvd3Nlckluc3RhbGxlZChjb3Jkb3ZhTWV0YWRhdGEpID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Vycm9yKFwiSW5BcHBCcm93c2VyIHBsdWdpbiBub3QgZm91bmRcIilcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLl9wb3B1cCA9IGNvcmRvdmEuSW5BcHBCcm93c2VyLm9wZW4ocGFyYW1zLnVybCwgdGhpcy50YXJnZXQsIHRoaXMuZmVhdHVyZXMpO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fcG9wdXApIHtcclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIkNvcmRvdmFQb3B1cFdpbmRvdy5uYXZpZ2F0ZTogcG9wdXAgc3VjY2Vzc2Z1bGx5IGNyZWF0ZWRcIik7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIHRoaXMuX2V4aXRDYWxsYmFja0V2ZW50ID0gdGhpcy5fZXhpdENhbGxiYWNrLmJpbmQodGhpcyk7IFxyXG4gICAgICAgICAgICAgICAgdGhpcy5fbG9hZFN0YXJ0Q2FsbGJhY2tFdmVudCA9IHRoaXMuX2xvYWRTdGFydENhbGxiYWNrLmJpbmQodGhpcyk7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIHRoaXMuX3BvcHVwLmFkZEV2ZW50TGlzdGVuZXIoXCJleGl0XCIsIHRoaXMuX2V4aXRDYWxsYmFja0V2ZW50LCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9wb3B1cC5hZGRFdmVudExpc3RlbmVyKFwibG9hZHN0YXJ0XCIsIHRoaXMuX2xvYWRTdGFydENhbGxiYWNrRXZlbnQsIGZhbHNlKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2Vycm9yKFwiRXJyb3Igb3BlbmluZyBwb3B1cCB3aW5kb3dcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvbWlzZTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgcHJvbWlzZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcHJvbWlzZTtcclxuICAgIH1cclxuXHJcbiAgICBfbG9hZFN0YXJ0Q2FsbGJhY2soZXZlbnQpIHtcclxuICAgICAgICBpZiAoZXZlbnQudXJsLmluZGV4T2YodGhpcy5yZWRpcmVjdF91cmkpID09PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3N1Y2Nlc3MoeyB1cmw6IGV2ZW50LnVybCB9KTtcclxuICAgICAgICB9ICAgIFxyXG4gICAgfVxyXG4gICAgX2V4aXRDYWxsYmFjayhtZXNzYWdlKSB7XHJcbiAgICAgICAgdGhpcy5fZXJyb3IobWVzc2FnZSk7ICAgIFxyXG4gICAgfVxyXG4gICAgXHJcbiAgICBfc3VjY2VzcyhkYXRhKSB7XHJcbiAgICAgICAgdGhpcy5fY2xlYW51cCgpO1xyXG5cclxuICAgICAgICBMb2cuZGVidWcoXCJDb3Jkb3ZhUG9wdXBXaW5kb3c6IFN1Y2Nlc3NmdWwgcmVzcG9uc2UgZnJvbSBjb3Jkb3ZhIHBvcHVwIHdpbmRvd1wiKTtcclxuICAgICAgICB0aGlzLl9yZXNvbHZlKGRhdGEpO1xyXG4gICAgfVxyXG4gICAgX2Vycm9yKG1lc3NhZ2UpIHtcclxuICAgICAgICB0aGlzLl9jbGVhbnVwKCk7XHJcblxyXG4gICAgICAgIExvZy5lcnJvcihtZXNzYWdlKTtcclxuICAgICAgICB0aGlzLl9yZWplY3QobmV3IEVycm9yKG1lc3NhZ2UpKTtcclxuICAgIH1cclxuXHJcbiAgICBjbG9zZSgpIHtcclxuICAgICAgICB0aGlzLl9jbGVhbnVwKCk7XHJcbiAgICB9XHJcblxyXG4gICAgX2NsZWFudXAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3BvcHVwKXtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiQ29yZG92YVBvcHVwV2luZG93OiBjbGVhbmluZyB1cCBwb3B1cFwiKTtcclxuICAgICAgICAgICAgdGhpcy5fcG9wdXAucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImV4aXRcIiwgdGhpcy5fZXhpdENhbGxiYWNrRXZlbnQsIGZhbHNlKTtcclxuICAgICAgICAgICAgdGhpcy5fcG9wdXAucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImxvYWRzdGFydFwiLCB0aGlzLl9sb2FkU3RhcnRDYWxsYmFja0V2ZW50LCBmYWxzZSk7XHJcbiAgICAgICAgICAgIHRoaXMuX3BvcHVwLmNsb3NlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX3BvcHVwID0gbnVsbDtcclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgRXJyb3JSZXNwb25zZSBleHRlbmRzIEVycm9yIHtcclxuICAgIGNvbnN0cnVjdG9yKHtlcnJvciwgZXJyb3JfZGVzY3JpcHRpb24sIGVycm9yX3VyaSwgc3RhdGUsIHNlc3Npb25fc3RhdGV9PXt9XHJcbiAgICApIHtcclxuICAgICAgICAgaWYgKCFlcnJvcil7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIk5vIGVycm9yIHBhc3NlZCB0byBFcnJvclJlc3BvbnNlXCIpO1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJlcnJvclwiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHN1cGVyKGVycm9yX2Rlc2NyaXB0aW9uIHx8IGVycm9yKTtcclxuXHJcbiAgICAgICAgdGhpcy5uYW1lID0gXCJFcnJvclJlc3BvbnNlXCI7XHJcblxyXG4gICAgICAgIHRoaXMuZXJyb3IgPSBlcnJvcjtcclxuICAgICAgICB0aGlzLmVycm9yX2Rlc2NyaXB0aW9uID0gZXJyb3JfZGVzY3JpcHRpb247XHJcbiAgICAgICAgdGhpcy5lcnJvcl91cmkgPSBlcnJvcl91cmk7XHJcblxyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBzdGF0ZTtcclxuICAgICAgICB0aGlzLnNlc3Npb25fc3RhdGUgPSBzZXNzaW9uX3N0YXRlO1xyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBFdmVudCB7XHJcblxyXG4gICAgY29uc3RydWN0b3IobmFtZSkge1xyXG4gICAgICAgIHRoaXMuX25hbWUgPSBuYW1lO1xyXG4gICAgICAgIHRoaXMuX2NhbGxiYWNrcyA9IFtdO1xyXG4gICAgfVxyXG5cclxuICAgIGFkZEhhbmRsZXIoY2IpIHtcclxuICAgICAgICB0aGlzLl9jYWxsYmFja3MucHVzaChjYik7XHJcbiAgICB9XHJcblxyXG4gICAgcmVtb3ZlSGFuZGxlcihjYikge1xyXG4gICAgICAgIHZhciBpZHggPSB0aGlzLl9jYWxsYmFja3MuZmluZEluZGV4KGl0ZW0gPT4gaXRlbSA9PT0gY2IpO1xyXG4gICAgICAgIGlmIChpZHggPj0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLl9jYWxsYmFja3Muc3BsaWNlKGlkeCwgMSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJhaXNlKC4uLnBhcmFtcykge1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIkV2ZW50OiBSYWlzaW5nIGV2ZW50OiBcIiArIHRoaXMuX25hbWUpO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5fY2FsbGJhY2tzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2NhbGxiYWNrc1tpXSguLi5wYXJhbXMpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5jb25zdCB0aW1lciA9IHtcclxuICAgIHNldEludGVydmFsOiBmdW5jdGlvbiAoY2IsIGR1cmF0aW9uKSB7XHJcbiAgICAgICAgcmV0dXJuIHNldEludGVydmFsKGNiLCBkdXJhdGlvbik7XHJcbiAgICB9LFxyXG4gICAgY2xlYXJJbnRlcnZhbDogZnVuY3Rpb24gKGhhbmRsZSkge1xyXG4gICAgICAgIHJldHVybiBjbGVhckludGVydmFsKGhhbmRsZSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG5sZXQgdGVzdGluZyA9IGZhbHNlO1xyXG5sZXQgcmVxdWVzdCA9IG51bGw7XHJcblxyXG5leHBvcnQgY2xhc3MgR2xvYmFsIHtcclxuXHJcbiAgICBzdGF0aWMgX3Rlc3RpbmcoKSB7XHJcbiAgICAgICAgdGVzdGluZyA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGdldCBsb2NhdGlvbigpIHtcclxuICAgICAgICBpZiAoIXRlc3RpbmcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGxvY2F0aW9uO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZ2V0IGxvY2FsU3RvcmFnZSgpIHtcclxuICAgICAgICBpZiAoIXRlc3RpbmcgJiYgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGxvY2FsU3RvcmFnZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGdldCBzZXNzaW9uU3RvcmFnZSgpIHtcclxuICAgICAgICBpZiAoIXRlc3RpbmcgJiYgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHNlc3Npb25TdG9yYWdlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgc2V0WE1MSHR0cFJlcXVlc3QobmV3UmVxdWVzdCkge1xyXG4gICAgICAgIHJlcXVlc3QgPSBuZXdSZXF1ZXN0O1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBnZXQgWE1MSHR0cFJlcXVlc3QoKSB7XHJcbiAgICAgICAgaWYgKCF0ZXN0aW5nICYmIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiByZXF1ZXN0IHx8IFhNTEh0dHBSZXF1ZXN0O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZ2V0IHRpbWVyKCkge1xyXG4gICAgICAgIGlmICghdGVzdGluZykge1xyXG4gICAgICAgICAgICByZXR1cm4gdGltZXI7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuaW1wb3J0IHsgSUZyYW1lV2luZG93IH0gZnJvbSAnLi9JRnJhbWVXaW5kb3cuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIElGcmFtZU5hdmlnYXRvciB7XHJcblxyXG4gICAgcHJlcGFyZShwYXJhbXMpIHtcclxuICAgICAgICBsZXQgZnJhbWUgPSBuZXcgSUZyYW1lV2luZG93KHBhcmFtcyk7XHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmcmFtZSk7XHJcbiAgICB9XHJcblxyXG4gICAgY2FsbGJhY2sodXJsKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiSUZyYW1lTmF2aWdhdG9yLmNhbGxiYWNrXCIpO1xyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBJRnJhbWVXaW5kb3cubm90aWZ5UGFyZW50KHVybCk7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcblxyXG5jb25zdCBEZWZhdWx0VGltZW91dCA9IDEwMDAwO1xyXG5cclxuZXhwb3J0IGNsYXNzIElGcmFtZVdpbmRvdyB7XHJcblxyXG4gICAgY29uc3RydWN0b3IocGFyYW1zKSB7XHJcbiAgICAgICAgdGhpcy5fcHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5fcmVzb2x2ZSA9IHJlc29sdmU7XHJcbiAgICAgICAgICAgIHRoaXMuX3JlamVjdCA9IHJlamVjdDtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5fYm91bmRNZXNzYWdlRXZlbnQgPSB0aGlzLl9tZXNzYWdlLmJpbmQodGhpcyk7XHJcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIHRoaXMuX2JvdW5kTWVzc2FnZUV2ZW50LCBmYWxzZSk7XHJcblxyXG4gICAgICAgIHRoaXMuX2ZyYW1lID0gd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpZnJhbWVcIik7XHJcblxyXG4gICAgICAgIC8vIHNob3RndW4gYXBwcm9hY2hcclxuICAgICAgICB0aGlzLl9mcmFtZS5zdHlsZS52aXNpYmlsaXR5ID0gXCJoaWRkZW5cIjtcclxuICAgICAgICB0aGlzLl9mcmFtZS5zdHlsZS5wb3NpdGlvbiA9IFwiYWJzb2x1dGVcIjtcclxuICAgICAgICB0aGlzLl9mcmFtZS5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XHJcbiAgICAgICAgdGhpcy5fZnJhbWUuc3R5bGUud2lkdGggPSAwO1xyXG4gICAgICAgIHRoaXMuX2ZyYW1lLnN0eWxlLmhlaWdodCA9IDA7XHJcblxyXG4gICAgICAgIHdpbmRvdy5kb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRoaXMuX2ZyYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICBuYXZpZ2F0ZShwYXJhbXMpIHtcclxuICAgICAgICBpZiAoIXBhcmFtcyB8fCAhcGFyYW1zLnVybCkge1xyXG4gICAgICAgICAgICB0aGlzLl9lcnJvcihcIk5vIHVybCBwcm92aWRlZFwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGxldCB0aW1lb3V0ID0gcGFyYW1zLnNpbGVudFJlcXVlc3RUaW1lb3V0IHx8IERlZmF1bHRUaW1lb3V0O1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJJRnJhbWVXaW5kb3cubmF2aWdhdGU6IFVzaW5nIHRpbWVvdXQgb2Y6XCIsIHRpbWVvdXQpO1xyXG4gICAgICAgICAgICB0aGlzLl90aW1lciA9IHdpbmRvdy5zZXRUaW1lb3V0KHRoaXMuX3RpbWVvdXQuYmluZCh0aGlzKSwgdGltZW91dCk7XHJcbiAgICAgICAgICAgIHRoaXMuX2ZyYW1lLnNyYyA9IHBhcmFtcy51cmw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5wcm9taXNlO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBwcm9taXNlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9wcm9taXNlO1xyXG4gICAgfVxyXG5cclxuICAgIF9zdWNjZXNzKGRhdGEpIHtcclxuICAgICAgICB0aGlzLl9jbGVhbnVwKCk7XHJcblxyXG4gICAgICAgIExvZy5kZWJ1ZyhcIklGcmFtZVdpbmRvdzogU3VjY2Vzc2Z1bCByZXNwb25zZSBmcm9tIGZyYW1lIHdpbmRvd1wiKTtcclxuICAgICAgICB0aGlzLl9yZXNvbHZlKGRhdGEpO1xyXG4gICAgfVxyXG4gICAgX2Vycm9yKG1lc3NhZ2UpIHtcclxuICAgICAgICB0aGlzLl9jbGVhbnVwKCk7XHJcblxyXG4gICAgICAgIExvZy5lcnJvcihtZXNzYWdlKTtcclxuICAgICAgICB0aGlzLl9yZWplY3QobmV3IEVycm9yKG1lc3NhZ2UpKTtcclxuICAgIH1cclxuXHJcbiAgICBjbG9zZSgpIHtcclxuICAgICAgICB0aGlzLl9jbGVhbnVwKCk7XHJcbiAgICB9XHJcblxyXG4gICAgX2NsZWFudXAoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2ZyYW1lKSB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIklGcmFtZVdpbmRvdzogY2xlYW51cFwiKTtcclxuXHJcbiAgICAgICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCB0aGlzLl9ib3VuZE1lc3NhZ2VFdmVudCwgZmFsc2UpO1xyXG4gICAgICAgICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVyKTtcclxuICAgICAgICAgICAgd2luZG93LmRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodGhpcy5fZnJhbWUpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5fdGltZXIgPSBudWxsO1xyXG4gICAgICAgICAgICB0aGlzLl9mcmFtZSA9IG51bGw7XHJcbiAgICAgICAgICAgIHRoaXMuX2JvdW5kTWVzc2FnZUV2ZW50ID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgX3RpbWVvdXQoKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiSUZyYW1lV2luZG93LnRpbWVvdXRcIik7XHJcbiAgICAgICAgdGhpcy5fZXJyb3IoXCJGcmFtZSB3aW5kb3cgdGltZWQgb3V0XCIpO1xyXG4gICAgfVxyXG5cclxuICAgIF9tZXNzYWdlKGUpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJJRnJhbWVXaW5kb3cubWVzc2FnZVwiKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX3RpbWVyICYmXHJcbiAgICAgICAgICAgIGUub3JpZ2luID09PSB0aGlzLl9vcmlnaW4gJiZcclxuICAgICAgICAgICAgZS5zb3VyY2UgPT09IHRoaXMuX2ZyYW1lLmNvbnRlbnRXaW5kb3dcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgbGV0IHVybCA9IGUuZGF0YTtcclxuICAgICAgICAgICAgaWYgKHVybCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fc3VjY2Vzcyh7IHVybDogdXJsIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fZXJyb3IoXCJJbnZhbGlkIHJlc3BvbnNlIGZyb20gZnJhbWVcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IF9vcmlnaW4oKSB7XHJcbiAgICAgICAgcmV0dXJuIGxvY2F0aW9uLnByb3RvY29sICsgXCIvL1wiICsgbG9jYXRpb24uaG9zdDtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgbm90aWZ5UGFyZW50KHVybCkge1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIklGcmFtZVdpbmRvdy5ub3RpZnlQYXJlbnRcIik7XHJcbiAgICAgICAgaWYgKHdpbmRvdy5mcmFtZUVsZW1lbnQpIHtcclxuICAgICAgICAgICAgdXJsID0gdXJsIHx8IHdpbmRvdy5sb2NhdGlvbi5ocmVmO1xyXG4gICAgICAgICAgICBpZiAodXJsKSB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJJRnJhbWVXaW5kb3cubm90aWZ5UGFyZW50OiBwb3N0aW5nIHVybCBtZXNzYWdlIHRvIHBhcmVudFwiKTtcclxuICAgICAgICAgICAgICAgIHdpbmRvdy5wYXJlbnQucG9zdE1lc3NhZ2UodXJsLCBsb2NhdGlvbi5wcm90b2NvbCArIFwiLy9cIiArIGxvY2F0aW9uLmhvc3QpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBJbk1lbW9yeVdlYlN0b3JhZ2V7XHJcbiAgICBjb25zdHJ1Y3Rvcigpe1xyXG4gICAgICAgIHRoaXMuX2RhdGEgPSB7fTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRJdGVtKGtleSkge1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIkluTWVtb3J5V2ViU3RvcmFnZS5nZXRJdGVtXCIsIGtleSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGFba2V5XTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRJdGVtKGtleSwgdmFsdWUpe1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIkluTWVtb3J5V2ViU3RvcmFnZS5zZXRJdGVtXCIsIGtleSk7XHJcbiAgICAgICAgdGhpcy5fZGF0YVtrZXldID0gdmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmVtb3ZlSXRlbShrZXkpe1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIkluTWVtb3J5V2ViU3RvcmFnZS5yZW1vdmVJdGVtXCIsIGtleSk7XHJcbiAgICAgICAgZGVsZXRlIHRoaXMuX2RhdGFba2V5XTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgbGVuZ3RoKCkge1xyXG4gICAgICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0aGlzLl9kYXRhKS5sZW5ndGg7XHJcbiAgICB9XHJcblxyXG4gICAga2V5KGluZGV4KSB7XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMuX2RhdGEpW2luZGV4XTtcclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRKb3NlVXRpbCh7IGp3cywgS2V5VXRpbCwgWDUwOSwgY3J5cHRvLCBoZXh0b2I2NHUsIGI2NHRvaGV4LCBBbGxvd2VkU2lnbmluZ0FsZ3MgfSkge1xyXG4gICAgcmV0dXJuIGNsYXNzIEpvc2VVdGlsIHtcclxuXHJcbiAgICAgICAgc3RhdGljIHBhcnNlSnd0KGp3dCkge1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJKb3NlVXRpbC5wYXJzZUp3dFwiKTtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHZhciB0b2tlbiA9IGp3cy5KV1MucGFyc2Uoand0KTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyOiB0b2tlbi5oZWFkZXJPYmosXHJcbiAgICAgICAgICAgICAgICAgICAgcGF5bG9hZDogdG9rZW4ucGF5bG9hZE9ialxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZXJyb3IoZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHN0YXRpYyB2YWxpZGF0ZUp3dChqd3QsIGtleSwgaXNzdWVyLCBhdWRpZW5jZSwgY2xvY2tTa2V3LCBub3csIHRpbWVJbnNlbnNpdGl2ZSkge1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJKb3NlVXRpbC52YWxpZGF0ZUp3dFwiKTtcclxuXHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoa2V5Lmt0eSA9PT0gXCJSU0FcIikge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChrZXkuZSAmJiBrZXkubikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBrZXkgPSBLZXlVdGlsLmdldEtleShrZXkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoa2V5Lng1YyAmJiBrZXkueDVjLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaGV4ID0gYjY0dG9oZXgoa2V5Lng1Y1swXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleSA9IFg1MDkuZ2V0UHVibGljS2V5RnJvbUNlcnRIZXgoaGV4KTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJKb3NlVXRpbC52YWxpZGF0ZUp3dDogUlNBIGtleSBtaXNzaW5nIGtleSBtYXRlcmlhbFwiLCBrZXkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiUlNBIGtleSBtaXNzaW5nIGtleSBtYXRlcmlhbFwiKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChrZXkua3R5ID09PSBcIkVDXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5LmNydiAmJiBrZXkueCAmJiBrZXkueSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBrZXkgPSBLZXlVdGlsLmdldEtleShrZXkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIkpvc2VVdGlsLnZhbGlkYXRlSnd0OiBFQyBrZXkgbWlzc2luZyBrZXkgbWF0ZXJpYWxcIiwga2V5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIkVDIGtleSBtaXNzaW5nIGtleSBtYXRlcmlhbFwiKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJKb3NlVXRpbC52YWxpZGF0ZUp3dDogVW5zdXBwb3J0ZWQga2V5IHR5cGVcIiwga2V5ICYmIGtleS5rdHkpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJVbnN1cHBvcnRlZCBrZXkgdHlwZTogXCIgKyBrZXkgJiYga2V5Lmt0eSkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHJldHVybiBKb3NlVXRpbC5fdmFsaWRhdGVKd3Qoand0LCBrZXksIGlzc3VlciwgYXVkaWVuY2UsIGNsb2NrU2tldywgbm93LCB0aW1lSW5zZW5zaXRpdmUpO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZXJyb3IoZSAmJiBlLm1lc3NhZ2UgfHwgZSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoXCJKV1QgdmFsaWRhdGlvbiBmYWlsZWRcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHN0YXRpYyB2YWxpZGF0ZUp3dEF0dHJpYnV0ZXMoand0LCBpc3N1ZXIsIGF1ZGllbmNlLCBjbG9ja1NrZXcsIG5vdywgdGltZUluc2Vuc2l0aXZlKSB7XHJcbiAgICAgICAgICAgIGlmICghY2xvY2tTa2V3KSB7XHJcbiAgICAgICAgICAgICAgICBjbG9ja1NrZXcgPSAwO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoIW5vdykge1xyXG4gICAgICAgICAgICAgICAgbm93ID0gcGFyc2VJbnQoRGF0ZS5ub3coKSAvIDEwMDApO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB2YXIgcGF5bG9hZCA9IEpvc2VVdGlsLnBhcnNlSnd0KGp3dCkucGF5bG9hZDtcclxuXHJcbiAgICAgICAgICAgIGlmICghcGF5bG9hZC5pc3MpIHtcclxuICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIkpvc2VVdGlsLl92YWxpZGF0ZUp3dDogaXNzdWVyIHdhcyBub3QgcHJvdmlkZWRcIik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiaXNzdWVyIHdhcyBub3QgcHJvdmlkZWRcIikpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChwYXlsb2FkLmlzcyAhPT0gaXNzdWVyKSB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJKb3NlVXRpbC5fdmFsaWRhdGVKd3Q6IEludmFsaWQgaXNzdWVyIGluIHRva2VuXCIsIHBheWxvYWQuaXNzKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJJbnZhbGlkIGlzc3VlciBpbiB0b2tlbjogXCIgKyBwYXlsb2FkLmlzcykpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoIXBheWxvYWQuYXVkKSB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJKb3NlVXRpbC5fdmFsaWRhdGVKd3Q6IGF1ZCB3YXMgbm90IHByb3ZpZGVkXCIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcImF1ZCB3YXMgbm90IHByb3ZpZGVkXCIpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgdmFsaWRBdWRpZW5jZSA9IHBheWxvYWQuYXVkID09PSBhdWRpZW5jZSB8fCAoQXJyYXkuaXNBcnJheShwYXlsb2FkLmF1ZCkgJiYgcGF5bG9hZC5hdWQuaW5kZXhPZihhdWRpZW5jZSkgPj0gMCk7XHJcbiAgICAgICAgICAgIGlmICghdmFsaWRBdWRpZW5jZSkge1xyXG4gICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiSm9zZVV0aWwuX3ZhbGlkYXRlSnd0OiBJbnZhbGlkIGF1ZGllbmNlIGluIHRva2VuXCIsIHBheWxvYWQuYXVkKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJJbnZhbGlkIGF1ZGllbmNlIGluIHRva2VuOiBcIiArIHBheWxvYWQuYXVkKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHBheWxvYWQuYXpwICYmIHBheWxvYWQuYXpwICE9PSBhdWRpZW5jZSkge1xyXG4gICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiSm9zZVV0aWwuX3ZhbGlkYXRlSnd0OiBJbnZhbGlkIGF6cCBpbiB0b2tlblwiLCBwYXlsb2FkLmF6cCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiSW52YWxpZCBhenAgaW4gdG9rZW46IFwiICsgcGF5bG9hZC5henApKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKCF0aW1lSW5zZW5zaXRpdmUpIHtcclxuICAgICAgICAgICAgICAgIHZhciBsb3dlck5vdyA9IG5vdyArIGNsb2NrU2tldztcclxuICAgICAgICAgICAgICAgIHZhciB1cHBlck5vdyA9IG5vdyAtIGNsb2NrU2tldztcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoIXBheWxvYWQuaWF0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiSm9zZVV0aWwuX3ZhbGlkYXRlSnd0OiBpYXQgd2FzIG5vdCBwcm92aWRlZFwiKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiaWF0IHdhcyBub3QgcHJvdmlkZWRcIikpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGxvd2VyTm93IDwgcGF5bG9hZC5pYXQpIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJKb3NlVXRpbC5fdmFsaWRhdGVKd3Q6IGlhdCBpcyBpbiB0aGUgZnV0dXJlXCIsIHBheWxvYWQuaWF0KTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiaWF0IGlzIGluIHRoZSBmdXR1cmU6IFwiICsgcGF5bG9hZC5pYXQpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAocGF5bG9hZC5uYmYgJiYgbG93ZXJOb3cgPCBwYXlsb2FkLm5iZikge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIkpvc2VVdGlsLl92YWxpZGF0ZUp3dDogbmJmIGlzIGluIHRoZSBmdXR1cmVcIiwgcGF5bG9hZC5uYmYpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJuYmYgaXMgaW4gdGhlIGZ1dHVyZTogXCIgKyBwYXlsb2FkLm5iZikpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmICghcGF5bG9hZC5leHApIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJKb3NlVXRpbC5fdmFsaWRhdGVKd3Q6IGV4cCB3YXMgbm90IHByb3ZpZGVkXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJleHAgd2FzIG5vdCBwcm92aWRlZFwiKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAocGF5bG9hZC5leHAgPCB1cHBlck5vdykge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIkpvc2VVdGlsLl92YWxpZGF0ZUp3dDogZXhwIGlzIGluIHRoZSBwYXN0XCIsIHBheWxvYWQuZXhwKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiZXhwIGlzIGluIHRoZSBwYXN0OlwiICsgcGF5bG9hZC5leHApKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShwYXlsb2FkKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHN0YXRpYyBfdmFsaWRhdGVKd3Qoand0LCBrZXksIGlzc3VlciwgYXVkaWVuY2UsIGNsb2NrU2tldywgbm93LCB0aW1lSW5zZW5zaXRpdmUpIHtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiBKb3NlVXRpbC52YWxpZGF0ZUp3dEF0dHJpYnV0ZXMoand0LCBpc3N1ZXIsIGF1ZGllbmNlLCBjbG9ja1NrZXcsIG5vdywgdGltZUluc2Vuc2l0aXZlKS50aGVuKHBheWxvYWQgPT4ge1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWp3cy5KV1MudmVyaWZ5KGp3dCwga2V5LCBBbGxvd2VkU2lnbmluZ0FsZ3MpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIkpvc2VVdGlsLl92YWxpZGF0ZUp3dDogc2lnbmF0dXJlIHZhbGlkYXRpb24gZmFpbGVkXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwic2lnbmF0dXJlIHZhbGlkYXRpb24gZmFpbGVkXCIpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwYXlsb2FkO1xyXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihlICYmIGUubWVzc2FnZSB8fCBlKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwic2lnbmF0dXJlIHZhbGlkYXRpb24gZmFpbGVkXCIpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzdGF0aWMgaGFzaFN0cmluZyh2YWx1ZSwgYWxnKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY3J5cHRvLlV0aWwuaGFzaFN0cmluZyh2YWx1ZSwgYWxnKTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgTG9nLmVycm9yKGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzdGF0aWMgaGV4VG9CYXNlNjRVcmwodmFsdWUpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBoZXh0b2I2NHUodmFsdWUpO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZXJyb3IoZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgandzLCBLZXlVdGlsLCBYNTA5LCBjcnlwdG8sIGhleHRvYjY0dSwgYjY0dG9oZXgsIEFsbG93ZWRTaWduaW5nQWxncyB9IGZyb20gJy4vY3J5cHRvL3JzYSc7XHJcbmltcG9ydCBnZXRKb3NlVXRpbCBmcm9tICcuL0pvc2VVdGlsSW1wbCc7XHJcblxyXG5leHBvcnQgY29uc3QgSm9zZVV0aWwgPSBnZXRKb3NlVXRpbCh7IGp3cywgS2V5VXRpbCwgWDUwOSwgY3J5cHRvLCBoZXh0b2I2NHUsIGI2NHRvaGV4LCBBbGxvd2VkU2lnbmluZ0FsZ3MgfSk7XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuaW1wb3J0IHsgR2xvYmFsIH0gZnJvbSAnLi9HbG9iYWwuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEpzb25TZXJ2aWNlIHtcclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIGFkZGl0aW9uYWxDb250ZW50VHlwZXMgPSBudWxsLCBcclxuICAgICAgICBYTUxIdHRwUmVxdWVzdEN0b3IgPSBHbG9iYWwuWE1MSHR0cFJlcXVlc3QsIFxyXG4gICAgICAgIGp3dEhhbmRsZXIgPSBudWxsXHJcbiAgICApIHtcclxuICAgICAgICBpZiAoYWRkaXRpb25hbENvbnRlbnRUeXBlcyAmJiBBcnJheS5pc0FycmF5KGFkZGl0aW9uYWxDb250ZW50VHlwZXMpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdGhpcy5fY29udGVudFR5cGVzID0gYWRkaXRpb25hbENvbnRlbnRUeXBlcy5zbGljZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICB0aGlzLl9jb250ZW50VHlwZXMgPSBbXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fY29udGVudFR5cGVzLnB1c2goJ2FwcGxpY2F0aW9uL2pzb24nKTtcclxuICAgICAgICBpZiAoand0SGFuZGxlcikge1xyXG4gICAgICAgICAgICB0aGlzLl9jb250ZW50VHlwZXMucHVzaCgnYXBwbGljYXRpb24vand0Jyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9YTUxIdHRwUmVxdWVzdCA9IFhNTEh0dHBSZXF1ZXN0Q3RvcjtcclxuICAgICAgICB0aGlzLl9qd3RIYW5kbGVyID0gand0SGFuZGxlcjtcclxuICAgIH1cclxuXHJcbiAgICBnZXRKc29uKHVybCwgdG9rZW4pIHtcclxuICAgICAgICBpZiAoIXVybCl7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIkpzb25TZXJ2aWNlLmdldEpzb246IE5vIHVybCBwYXNzZWRcIik7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInVybFwiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIExvZy5kZWJ1ZyhcIkpzb25TZXJ2aWNlLmdldEpzb24sIHVybDogXCIsIHVybCk7XHJcblxyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcblxyXG4gICAgICAgICAgICB2YXIgcmVxID0gbmV3IHRoaXMuX1hNTEh0dHBSZXF1ZXN0KCk7XHJcbiAgICAgICAgICAgIHJlcS5vcGVuKCdHRVQnLCB1cmwpO1xyXG5cclxuICAgICAgICAgICAgdmFyIGFsbG93ZWRDb250ZW50VHlwZXMgPSB0aGlzLl9jb250ZW50VHlwZXM7XHJcbiAgICAgICAgICAgIHZhciBqd3RIYW5kbGVyID0gdGhpcy5fand0SGFuZGxlcjtcclxuXHJcbiAgICAgICAgICAgIHJlcS5vbmxvYWQgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIkpzb25TZXJ2aWNlLmdldEpzb246IEhUVFAgcmVzcG9uc2UgcmVjZWl2ZWQsIHN0YXR1c1wiLCByZXEuc3RhdHVzKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAocmVxLnN0YXR1cyA9PT0gMjAwKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHZhciBjb250ZW50VHlwZSA9IHJlcS5nZXRSZXNwb25zZUhlYWRlcihcIkNvbnRlbnQtVHlwZVwiKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY29udGVudFR5cGUpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmb3VuZCA9IGFsbG93ZWRDb250ZW50VHlwZXMuZmluZChpdGVtPT57XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29udGVudFR5cGUuc3RhcnRzV2l0aChpdGVtKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmb3VuZCA9PSBcImFwcGxpY2F0aW9uL2p3dFwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBqd3RIYW5kbGVyKHJlcSkudGhlbihyZXNvbHZlLCByZWplY3QpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm91bmQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShKU09OLnBhcnNlKHJlcS5yZXNwb25zZVRleHQpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIkpzb25TZXJ2aWNlLmdldEpzb246IEVycm9yIHBhcnNpbmcgSlNPTiByZXNwb25zZVwiLCBlLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChFcnJvcihcIkludmFsaWQgcmVzcG9uc2UgQ29udGVudC1UeXBlOiBcIiArIGNvbnRlbnRUeXBlICsgXCIsIGZyb20gVVJMOiBcIiArIHVybCkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KEVycm9yKHJlcS5zdGF0dXNUZXh0ICsgXCIgKFwiICsgcmVxLnN0YXR1cyArIFwiKVwiKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICByZXEub25lcnJvciA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiSnNvblNlcnZpY2UuZ2V0SnNvbjogbmV0d29yayBlcnJvclwiKTtcclxuICAgICAgICAgICAgICAgIHJlamVjdChFcnJvcihcIk5ldHdvcmsgRXJyb3JcIikpO1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgaWYgKHRva2VuKSB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJKc29uU2VydmljZS5nZXRKc29uOiB0b2tlbiBwYXNzZWQsIHNldHRpbmcgQXV0aG9yaXphdGlvbiBoZWFkZXJcIik7XHJcbiAgICAgICAgICAgICAgICByZXEuc2V0UmVxdWVzdEhlYWRlcihcIkF1dGhvcml6YXRpb25cIiwgXCJCZWFyZXIgXCIgKyB0b2tlbik7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJlcS5zZW5kKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcG9zdEZvcm0odXJsLCBwYXlsb2FkKSB7XHJcbiAgICAgICAgaWYgKCF1cmwpe1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJKc29uU2VydmljZS5wb3N0Rm9ybTogTm8gdXJsIHBhc3NlZFwiKTtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidXJsXCIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgTG9nLmRlYnVnKFwiSnNvblNlcnZpY2UucG9zdEZvcm0sIHVybDogXCIsIHVybCk7XHJcblxyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcblxyXG4gICAgICAgICAgICB2YXIgcmVxID0gbmV3IHRoaXMuX1hNTEh0dHBSZXF1ZXN0KCk7XHJcbiAgICAgICAgICAgIHJlcS5vcGVuKCdQT1NUJywgdXJsKTtcclxuXHJcbiAgICAgICAgICAgIHZhciBhbGxvd2VkQ29udGVudFR5cGVzID0gdGhpcy5fY29udGVudFR5cGVzO1xyXG5cclxuICAgICAgICAgICAgcmVxLm9ubG9hZCA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiSnNvblNlcnZpY2UucG9zdEZvcm06IEhUVFAgcmVzcG9uc2UgcmVjZWl2ZWQsIHN0YXR1c1wiLCByZXEuc3RhdHVzKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAocmVxLnN0YXR1cyA9PT0gMjAwKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHZhciBjb250ZW50VHlwZSA9IHJlcS5nZXRSZXNwb25zZUhlYWRlcihcIkNvbnRlbnQtVHlwZVwiKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY29udGVudFR5cGUpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmb3VuZCA9IGFsbG93ZWRDb250ZW50VHlwZXMuZmluZChpdGVtPT57XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29udGVudFR5cGUuc3RhcnRzV2l0aChpdGVtKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmb3VuZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKEpTT04ucGFyc2UocmVxLnJlc3BvbnNlVGV4dCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiSnNvblNlcnZpY2UucG9zdEZvcm06IEVycm9yIHBhcnNpbmcgSlNPTiByZXNwb25zZVwiLCBlLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChFcnJvcihcIkludmFsaWQgcmVzcG9uc2UgQ29udGVudC1UeXBlOiBcIiArIGNvbnRlbnRUeXBlICsgXCIsIGZyb20gVVJMOiBcIiArIHVybCkpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAocmVxLnN0YXR1cyA9PT0gNDAwKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHZhciBjb250ZW50VHlwZSA9IHJlcS5nZXRSZXNwb25zZUhlYWRlcihcIkNvbnRlbnQtVHlwZVwiKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY29udGVudFR5cGUpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmb3VuZCA9IGFsbG93ZWRDb250ZW50VHlwZXMuZmluZChpdGVtPT57XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29udGVudFR5cGUuc3RhcnRzV2l0aChpdGVtKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmb3VuZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGF5bG9hZCA9IEpTT04ucGFyc2UocmVxLnJlc3BvbnNlVGV4dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBheWxvYWQgJiYgcGF5bG9hZC5lcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJKc29uU2VydmljZS5wb3N0Rm9ybTogRXJyb3IgZnJvbSBzZXJ2ZXI6IFwiLCBwYXlsb2FkLmVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihwYXlsb2FkLmVycm9yKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIkpzb25TZXJ2aWNlLnBvc3RGb3JtOiBFcnJvciBwYXJzaW5nIEpTT04gcmVzcG9uc2VcIiwgZS5tZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHJlamVjdChFcnJvcihyZXEuc3RhdHVzVGV4dCArIFwiIChcIiArIHJlcS5zdGF0dXMgKyBcIilcIikpO1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgcmVxLm9uZXJyb3IgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIkpzb25TZXJ2aWNlLnBvc3RGb3JtOiBuZXR3b3JrIGVycm9yXCIpO1xyXG4gICAgICAgICAgICAgICAgcmVqZWN0KEVycm9yKFwiTmV0d29yayBFcnJvclwiKSk7XHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBsZXQgYm9keSA9IFwiXCI7XHJcbiAgICAgICAgICAgIGZvcihsZXQga2V5IGluIHBheWxvYWQpIHtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSBwYXlsb2FkW2tleV07XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChib2R5Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYm9keSArPSBcIiZcIjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGJvZHkgKz0gZW5jb2RlVVJJQ29tcG9uZW50KGtleSk7XHJcbiAgICAgICAgICAgICAgICAgICAgYm9keSArPSBcIj1cIjtcclxuICAgICAgICAgICAgICAgICAgICBib2R5ICs9IGVuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJlcS5zZXRSZXF1ZXN0SGVhZGVyKFwiQ29udGVudC1UeXBlXCIsIFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXCIpO1xyXG4gICAgICAgICAgICByZXEuc2VuZChib2R5KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5sZXQgbm9wTG9nZ2VyID0ge1xyXG4gICAgZGVidWcoKXt9LFxyXG4gICAgaW5mbygpe30sXHJcbiAgICB3YXJuKCl7fSxcclxuICAgIGVycm9yKCl7fVxyXG59O1xyXG5cclxuY29uc3QgTk9ORSA9IDA7XHJcbmNvbnN0IEVSUk9SID0gMTtcclxuY29uc3QgV0FSTiA9IDI7XHJcbmNvbnN0IElORk8gPSAzO1xyXG5jb25zdCBERUJVRyA9IDQ7XHJcblxyXG5sZXQgbG9nZ2VyO1xyXG5sZXQgbGV2ZWw7XHJcblxyXG5leHBvcnQgY2xhc3MgTG9nIHtcclxuICAgIHN0YXRpYyBnZXQgTk9ORSgpIHtyZXR1cm4gTk9ORX07XHJcbiAgICBzdGF0aWMgZ2V0IEVSUk9SKCkge3JldHVybiBFUlJPUn07XHJcbiAgICBzdGF0aWMgZ2V0IFdBUk4oKSB7cmV0dXJuIFdBUk59O1xyXG4gICAgc3RhdGljIGdldCBJTkZPKCkge3JldHVybiBJTkZPfTtcclxuICAgIHN0YXRpYyBnZXQgREVCVUcoKSB7cmV0dXJuIERFQlVHfTtcclxuICAgIFxyXG4gICAgc3RhdGljIHJlc2V0KCl7XHJcbiAgICAgICAgbGV2ZWwgPSBJTkZPO1xyXG4gICAgICAgIGxvZ2dlciA9IG5vcExvZ2dlcjtcclxuICAgIH1cclxuICAgIFxyXG4gICAgc3RhdGljIGdldCBsZXZlbCgpe1xyXG4gICAgICAgIHJldHVybiBsZXZlbDtcclxuICAgIH1cclxuICAgIHN0YXRpYyBzZXQgbGV2ZWwodmFsdWUpe1xyXG4gICAgICAgIGlmIChOT05FIDw9IHZhbHVlICYmIHZhbHVlIDw9IERFQlVHKXtcclxuICAgICAgICAgICAgbGV2ZWwgPSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgbG9nIGxldmVsXCIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIFxyXG4gICAgc3RhdGljIGdldCBsb2dnZXIoKXtcclxuICAgICAgICByZXR1cm4gbG9nZ2VyO1xyXG4gICAgfVxyXG4gICAgc3RhdGljIHNldCBsb2dnZXIodmFsdWUpe1xyXG4gICAgICAgIGlmICghdmFsdWUuZGVidWcgJiYgdmFsdWUuaW5mbykge1xyXG4gICAgICAgICAgICAvLyBqdXN0IHRvIHN0YXkgYmFja3dhcmRzIGNvbXBhdC4gY2FuIHJlbW92ZSBpbiAyLjBcclxuICAgICAgICAgICAgdmFsdWUuZGVidWcgPSB2YWx1ZS5pbmZvO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHZhbHVlLmRlYnVnICYmIHZhbHVlLmluZm8gJiYgdmFsdWUud2FybiAmJiB2YWx1ZS5lcnJvcil7XHJcbiAgICAgICAgICAgIGxvZ2dlciA9IHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBsb2dnZXJcIik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgXHJcbiAgICBzdGF0aWMgZGVidWcoLi4uYXJncyl7XHJcbiAgICAgICAgaWYgKGxldmVsID49IERFQlVHKXtcclxuICAgICAgICAgICAgbG9nZ2VyLmRlYnVnLmFwcGx5KGxvZ2dlciwgQXJyYXkuZnJvbShhcmdzKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgc3RhdGljIGluZm8oLi4uYXJncyl7XHJcbiAgICAgICAgaWYgKGxldmVsID49IElORk8pe1xyXG4gICAgICAgICAgICBsb2dnZXIuaW5mby5hcHBseShsb2dnZXIsIEFycmF5LmZyb20oYXJncykpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHN0YXRpYyB3YXJuKC4uLmFyZ3Mpe1xyXG4gICAgICAgIGlmIChsZXZlbCA+PSBXQVJOKXtcclxuICAgICAgICAgICAgbG9nZ2VyLndhcm4uYXBwbHkobG9nZ2VyLCBBcnJheS5mcm9tKGFyZ3MpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBzdGF0aWMgZXJyb3IoLi4uYXJncyl7XHJcbiAgICAgICAgaWYgKGxldmVsID49IEVSUk9SKXtcclxuICAgICAgICAgICAgbG9nZ2VyLmVycm9yLmFwcGx5KGxvZ2dlciwgQXJyYXkuZnJvbShhcmdzKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG5Mb2cucmVzZXQoKTtcclxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG5cclxuaW1wb3J0IHsgTG9nIH0gZnJvbSAnLi9Mb2cuanMnO1xyXG5pbXBvcnQgeyBKc29uU2VydmljZSB9IGZyb20gJy4vSnNvblNlcnZpY2UuanMnO1xyXG5cclxuY29uc3QgT2lkY01ldGFkYXRhVXJsUGF0aCA9ICcud2VsbC1rbm93bi9vcGVuaWQtY29uZmlndXJhdGlvbic7XHJcblxyXG5leHBvcnQgY2xhc3MgTWV0YWRhdGFTZXJ2aWNlIHtcclxuICAgIGNvbnN0cnVjdG9yKHNldHRpbmdzLCBKc29uU2VydmljZUN0b3IgPSBKc29uU2VydmljZSkge1xyXG4gICAgICAgIGlmICghc2V0dGluZ3MpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiTWV0YWRhdGFTZXJ2aWNlOiBObyBzZXR0aW5ncyBwYXNzZWQgdG8gTWV0YWRhdGFTZXJ2aWNlXCIpO1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJzZXR0aW5nc1wiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3NldHRpbmdzID0gc2V0dGluZ3M7XHJcbiAgICAgICAgdGhpcy5fanNvblNlcnZpY2UgPSBuZXcgSnNvblNlcnZpY2VDdG9yKFsnYXBwbGljYXRpb24vandrLXNldCtqc29uJ10pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBtZXRhZGF0YVVybCgpIHtcclxuICAgICAgICBpZiAoIXRoaXMuX21ldGFkYXRhVXJsKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9zZXR0aW5ncy5tZXRhZGF0YVVybCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fbWV0YWRhdGFVcmwgPSB0aGlzLl9zZXR0aW5ncy5tZXRhZGF0YVVybDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX21ldGFkYXRhVXJsID0gdGhpcy5fc2V0dGluZ3MuYXV0aG9yaXR5O1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9tZXRhZGF0YVVybCAmJiB0aGlzLl9tZXRhZGF0YVVybC5pbmRleE9mKE9pZGNNZXRhZGF0YVVybFBhdGgpIDwgMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9tZXRhZGF0YVVybFt0aGlzLl9tZXRhZGF0YVVybC5sZW5ndGggLSAxXSAhPT0gJy8nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX21ldGFkYXRhVXJsICs9ICcvJztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbWV0YWRhdGFVcmwgKz0gT2lkY01ldGFkYXRhVXJsUGF0aDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX21ldGFkYXRhVXJsO1xyXG4gICAgfVxyXG5cclxuICAgIGdldE1ldGFkYXRhKCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9zZXR0aW5ncy5tZXRhZGF0YSkge1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJNZXRhZGF0YVNlcnZpY2UuZ2V0TWV0YWRhdGE6IFJldHVybmluZyBtZXRhZGF0YSBmcm9tIHNldHRpbmdzXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX3NldHRpbmdzLm1ldGFkYXRhKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5tZXRhZGF0YVVybCkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJNZXRhZGF0YVNlcnZpY2UuZ2V0TWV0YWRhdGE6IE5vIGF1dGhvcml0eSBvciBtZXRhZGF0YVVybCBjb25maWd1cmVkIG9uIHNldHRpbmdzXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiTm8gYXV0aG9yaXR5IG9yIG1ldGFkYXRhVXJsIGNvbmZpZ3VyZWQgb24gc2V0dGluZ3NcIikpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgTG9nLmRlYnVnKFwiTWV0YWRhdGFTZXJ2aWNlLmdldE1ldGFkYXRhOiBnZXR0aW5nIG1ldGFkYXRhIGZyb21cIiwgdGhpcy5tZXRhZGF0YVVybCk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9qc29uU2VydmljZS5nZXRKc29uKHRoaXMubWV0YWRhdGFVcmwpXHJcbiAgICAgICAgICAgIC50aGVuKG1ldGFkYXRhID0+IHtcclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIk1ldGFkYXRhU2VydmljZS5nZXRNZXRhZGF0YToganNvbiByZWNlaXZlZFwiKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3NldHRpbmdzLm1ldGFkYXRhID0gbWV0YWRhdGE7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbWV0YWRhdGE7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldElzc3VlcigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0TWV0YWRhdGFQcm9wZXJ0eShcImlzc3VlclwiKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRBdXRob3JpemF0aW9uRW5kcG9pbnQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldE1ldGFkYXRhUHJvcGVydHkoXCJhdXRob3JpemF0aW9uX2VuZHBvaW50XCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFVzZXJJbmZvRW5kcG9pbnQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldE1ldGFkYXRhUHJvcGVydHkoXCJ1c2VyaW5mb19lbmRwb2ludFwiKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRUb2tlbkVuZHBvaW50KG9wdGlvbmFsPXRydWUpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0TWV0YWRhdGFQcm9wZXJ0eShcInRva2VuX2VuZHBvaW50XCIsIG9wdGlvbmFsKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRDaGVja1Nlc3Npb25JZnJhbWUoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldE1ldGFkYXRhUHJvcGVydHkoXCJjaGVja19zZXNzaW9uX2lmcmFtZVwiLCB0cnVlKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRFbmRTZXNzaW9uRW5kcG9pbnQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldE1ldGFkYXRhUHJvcGVydHkoXCJlbmRfc2Vzc2lvbl9lbmRwb2ludFwiLCB0cnVlKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRSZXZvY2F0aW9uRW5kcG9pbnQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldE1ldGFkYXRhUHJvcGVydHkoXCJyZXZvY2F0aW9uX2VuZHBvaW50XCIsIHRydWUpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEtleXNFbmRwb2ludCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0TWV0YWRhdGFQcm9wZXJ0eShcImp3a3NfdXJpXCIsIHRydWUpO1xyXG4gICAgfVxyXG5cclxuICAgIF9nZXRNZXRhZGF0YVByb3BlcnR5KG5hbWUsIG9wdGlvbmFsPWZhbHNlKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiTWV0YWRhdGFTZXJ2aWNlLmdldE1ldGFkYXRhUHJvcGVydHkgZm9yOiBcIiArIG5hbWUpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRNZXRhZGF0YSgpLnRoZW4obWV0YWRhdGEgPT4ge1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJNZXRhZGF0YVNlcnZpY2UuZ2V0TWV0YWRhdGFQcm9wZXJ0eTogbWV0YWRhdGEgcmVjaWV2ZWRcIik7XHJcblxyXG4gICAgICAgICAgICBpZiAobWV0YWRhdGFbbmFtZV0gPT09IHVuZGVmaW5lZCkge1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChvcHRpb25hbCA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy53YXJuKFwiTWV0YWRhdGFTZXJ2aWNlLmdldE1ldGFkYXRhUHJvcGVydHk6IE1ldGFkYXRhIGRvZXMgbm90IGNvbnRhaW4gb3B0aW9uYWwgcHJvcGVydHkgXCIgKyBuYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiTWV0YWRhdGFTZXJ2aWNlLmdldE1ldGFkYXRhUHJvcGVydHk6IE1ldGFkYXRhIGRvZXMgbm90IGNvbnRhaW4gcHJvcGVydHkgXCIgKyBuYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXRhZGF0YSBkb2VzIG5vdCBjb250YWluIHByb3BlcnR5IFwiICsgbmFtZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiBtZXRhZGF0YVtuYW1lXTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRTaWduaW5nS2V5cygpIHtcclxuICAgICAgICBpZiAodGhpcy5fc2V0dGluZ3Muc2lnbmluZ0tleXMpIHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiTWV0YWRhdGFTZXJ2aWNlLmdldFNpZ25pbmdLZXlzOiBSZXR1cm5pbmcgc2lnbmluZ0tleXMgZnJvbSBzZXR0aW5nc1wiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9zZXR0aW5ncy5zaWduaW5nS2V5cyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0TWV0YWRhdGFQcm9wZXJ0eShcImp3a3NfdXJpXCIpLnRoZW4oandrc191cmkgPT4ge1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJNZXRhZGF0YVNlcnZpY2UuZ2V0U2lnbmluZ0tleXM6IGp3a3NfdXJpIHJlY2VpdmVkXCIsIGp3a3NfdXJpKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9qc29uU2VydmljZS5nZXRKc29uKGp3a3NfdXJpKS50aGVuKGtleVNldCA9PiB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJNZXRhZGF0YVNlcnZpY2UuZ2V0U2lnbmluZ0tleXM6IGtleSBzZXQgcmVjZWl2ZWRcIiwga2V5U2V0KTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoIWtleVNldC5rZXlzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiTWV0YWRhdGFTZXJ2aWNlLmdldFNpZ25pbmdLZXlzOiBNaXNzaW5nIGtleXMgb24ga2V5c2V0XCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1pc3Npbmcga2V5cyBvbiBrZXlzZXRcIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5fc2V0dGluZ3Muc2lnbmluZ0tleXMgPSBrZXlTZXQua2V5cztcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9zZXR0aW5ncy5zaWduaW5nS2V5cztcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG5cclxuaW1wb3J0IHsgTG9nIH0gZnJvbSAnLi9Mb2cuanMnO1xyXG5pbXBvcnQgeyBPaWRjQ2xpZW50U2V0dGluZ3MgfSBmcm9tICcuL09pZGNDbGllbnRTZXR0aW5ncy5qcyc7XHJcbmltcG9ydCB7IEVycm9yUmVzcG9uc2UgfSBmcm9tICcuL0Vycm9yUmVzcG9uc2UuanMnO1xyXG5pbXBvcnQgeyBTaWduaW5SZXF1ZXN0IH0gZnJvbSAnLi9TaWduaW5SZXF1ZXN0LmpzJztcclxuaW1wb3J0IHsgU2lnbmluUmVzcG9uc2UgfSBmcm9tICcuL1NpZ25pblJlc3BvbnNlLmpzJztcclxuaW1wb3J0IHsgU2lnbm91dFJlcXVlc3QgfSBmcm9tICcuL1NpZ25vdXRSZXF1ZXN0LmpzJztcclxuaW1wb3J0IHsgU2lnbm91dFJlc3BvbnNlIH0gZnJvbSAnLi9TaWdub3V0UmVzcG9uc2UuanMnO1xyXG5pbXBvcnQgeyBTaWduaW5TdGF0ZSB9IGZyb20gJy4vU2lnbmluU3RhdGUuanMnO1xyXG5pbXBvcnQgeyBTdGF0ZSB9IGZyb20gJy4vU3RhdGUuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIE9pZGNDbGllbnQge1xyXG4gICAgY29uc3RydWN0b3Ioc2V0dGluZ3MgPSB7fSkge1xyXG4gICAgICAgIGlmIChzZXR0aW5ncyBpbnN0YW5jZW9mIE9pZGNDbGllbnRTZXR0aW5ncykge1xyXG4gICAgICAgICAgICB0aGlzLl9zZXR0aW5ncyA9IHNldHRpbmdzO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5fc2V0dGluZ3MgPSBuZXcgT2lkY0NsaWVudFNldHRpbmdzKHNldHRpbmdzKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IF9zdGF0ZVN0b3JlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNldHRpbmdzLnN0YXRlU3RvcmU7XHJcbiAgICB9XHJcbiAgICBnZXQgX3ZhbGlkYXRvcigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXR0aW5ncy52YWxpZGF0b3I7XHJcbiAgICB9XHJcbiAgICBnZXQgX21ldGFkYXRhU2VydmljZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXR0aW5ncy5tZXRhZGF0YVNlcnZpY2U7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHNldHRpbmdzKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zZXR0aW5ncztcclxuICAgIH1cclxuICAgIGdldCBtZXRhZGF0YVNlcnZpY2UoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX21ldGFkYXRhU2VydmljZTtcclxuICAgIH1cclxuXHJcbiAgICBjcmVhdGVTaWduaW5SZXF1ZXN0KHtcclxuICAgICAgICByZXNwb25zZV90eXBlLCBzY29wZSwgcmVkaXJlY3RfdXJpLFxyXG4gICAgICAgIC8vIGRhdGEgd2FzIG1lYW50IHRvIGJlIHRoZSBwbGFjZSBhIGNhbGxlciBjb3VsZCBpbmRpY2F0ZSB0aGUgZGF0YSB0b1xyXG4gICAgICAgIC8vIGhhdmUgcm91bmQgdHJpcHBlZCwgYnV0IHBlb3BsZSB3ZXJlIGdldHRpbmcgY29uZnVzZWQsIHNvIGkgYWRkZWQgc3RhdGUgKHNpbmNlIHRoYXQgbWF0Y2hlcyB0aGUgc3BlYylcclxuICAgICAgICAvLyBhbmQgc28gbm93IGlmIGRhdGEgaXMgbm90IHBhc3NlZCwgYnV0IHN0YXRlIGlzIHRoZW4gc3RhdGUgd2lsbCBiZSB1c2VkXHJcbiAgICAgICAgZGF0YSwgc3RhdGUsIHByb21wdCwgZGlzcGxheSwgbWF4X2FnZSwgdWlfbG9jYWxlcywgaWRfdG9rZW5faGludCwgbG9naW5faGludCwgYWNyX3ZhbHVlcyxcclxuICAgICAgICByZXNvdXJjZSwgcmVxdWVzdCwgcmVxdWVzdF91cmksIHJlc3BvbnNlX21vZGUsIGV4dHJhUXVlcnlQYXJhbXMsIGV4dHJhVG9rZW5QYXJhbXMsIHJlcXVlc3RfdHlwZSwgc2tpcFVzZXJJbmZvIH0gPSB7fSxcclxuICAgICAgICBzdGF0ZVN0b3JlXHJcbiAgICApIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJPaWRjQ2xpZW50LmNyZWF0ZVNpZ25pblJlcXVlc3RcIik7XHJcblxyXG4gICAgICAgIGxldCBjbGllbnRfaWQgPSB0aGlzLl9zZXR0aW5ncy5jbGllbnRfaWQ7XHJcbiAgICAgICAgcmVzcG9uc2VfdHlwZSA9IHJlc3BvbnNlX3R5cGUgfHwgdGhpcy5fc2V0dGluZ3MucmVzcG9uc2VfdHlwZTtcclxuICAgICAgICBzY29wZSA9IHNjb3BlIHx8IHRoaXMuX3NldHRpbmdzLnNjb3BlO1xyXG4gICAgICAgIHJlZGlyZWN0X3VyaSA9IHJlZGlyZWN0X3VyaSB8fCB0aGlzLl9zZXR0aW5ncy5yZWRpcmVjdF91cmk7XHJcblxyXG4gICAgICAgIC8vIGlkX3Rva2VuX2hpbnQsIGxvZ2luX2hpbnQgYXJlbid0IGFsbG93ZWQgb24gX3NldHRpbmdzXHJcbiAgICAgICAgcHJvbXB0ID0gcHJvbXB0IHx8IHRoaXMuX3NldHRpbmdzLnByb21wdDtcclxuICAgICAgICBkaXNwbGF5ID0gZGlzcGxheSB8fCB0aGlzLl9zZXR0aW5ncy5kaXNwbGF5O1xyXG4gICAgICAgIG1heF9hZ2UgPSBtYXhfYWdlIHx8IHRoaXMuX3NldHRpbmdzLm1heF9hZ2U7XHJcbiAgICAgICAgdWlfbG9jYWxlcyA9IHVpX2xvY2FsZXMgfHwgdGhpcy5fc2V0dGluZ3MudWlfbG9jYWxlcztcclxuICAgICAgICBhY3JfdmFsdWVzID0gYWNyX3ZhbHVlcyB8fCB0aGlzLl9zZXR0aW5ncy5hY3JfdmFsdWVzO1xyXG4gICAgICAgIHJlc291cmNlID0gcmVzb3VyY2UgfHwgdGhpcy5fc2V0dGluZ3MucmVzb3VyY2U7XHJcbiAgICAgICAgcmVzcG9uc2VfbW9kZSA9IHJlc3BvbnNlX21vZGUgfHwgdGhpcy5fc2V0dGluZ3MucmVzcG9uc2VfbW9kZTtcclxuICAgICAgICBleHRyYVF1ZXJ5UGFyYW1zID0gZXh0cmFRdWVyeVBhcmFtcyB8fCB0aGlzLl9zZXR0aW5ncy5leHRyYVF1ZXJ5UGFyYW1zO1xyXG5cclxuICAgICAgICBsZXQgYXV0aG9yaXR5ID0gdGhpcy5fc2V0dGluZ3MuYXV0aG9yaXR5O1xyXG5cclxuICAgICAgICBpZiAoU2lnbmluUmVxdWVzdC5pc0NvZGUocmVzcG9uc2VfdHlwZSkgJiYgcmVzcG9uc2VfdHlwZSAhPT0gXCJjb2RlXCIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIk9wZW5JRCBDb25uZWN0IGh5YnJpZCBmbG93IGlzIG5vdCBzdXBwb3J0ZWRcIikpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX21ldGFkYXRhU2VydmljZS5nZXRBdXRob3JpemF0aW9uRW5kcG9pbnQoKS50aGVuKHVybCA9PiB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIk9pZGNDbGllbnQuY3JlYXRlU2lnbmluUmVxdWVzdDogUmVjZWl2ZWQgYXV0aG9yaXphdGlvbiBlbmRwb2ludFwiLCB1cmwpO1xyXG5cclxuICAgICAgICAgICAgbGV0IHNpZ25pblJlcXVlc3QgPSBuZXcgU2lnbmluUmVxdWVzdCh7XHJcbiAgICAgICAgICAgICAgICB1cmwsXHJcbiAgICAgICAgICAgICAgICBjbGllbnRfaWQsXHJcbiAgICAgICAgICAgICAgICByZWRpcmVjdF91cmksXHJcbiAgICAgICAgICAgICAgICByZXNwb25zZV90eXBlLFxyXG4gICAgICAgICAgICAgICAgc2NvcGUsXHJcbiAgICAgICAgICAgICAgICBkYXRhOiBkYXRhIHx8IHN0YXRlLFxyXG4gICAgICAgICAgICAgICAgYXV0aG9yaXR5LFxyXG4gICAgICAgICAgICAgICAgcHJvbXB0LCBkaXNwbGF5LCBtYXhfYWdlLCB1aV9sb2NhbGVzLCBpZF90b2tlbl9oaW50LCBsb2dpbl9oaW50LCBhY3JfdmFsdWVzLFxyXG4gICAgICAgICAgICAgICAgcmVzb3VyY2UsIHJlcXVlc3QsIHJlcXVlc3RfdXJpLCBleHRyYVF1ZXJ5UGFyYW1zLCBleHRyYVRva2VuUGFyYW1zLCByZXF1ZXN0X3R5cGUsIHJlc3BvbnNlX21vZGUsXHJcbiAgICAgICAgICAgICAgICBjbGllbnRfc2VjcmV0OiB0aGlzLl9zZXR0aW5ncy5jbGllbnRfc2VjcmV0LFxyXG4gICAgICAgICAgICAgICAgc2tpcFVzZXJJbmZvXHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgdmFyIHNpZ25pblN0YXRlID0gc2lnbmluUmVxdWVzdC5zdGF0ZTtcclxuICAgICAgICAgICAgc3RhdGVTdG9yZSA9IHN0YXRlU3RvcmUgfHwgdGhpcy5fc3RhdGVTdG9yZTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiBzdGF0ZVN0b3JlLnNldChzaWduaW5TdGF0ZS5pZCwgc2lnbmluU3RhdGUudG9TdG9yYWdlU3RyaW5nKCkpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHNpZ25pblJlcXVlc3Q7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJlYWRTaWduaW5SZXNwb25zZVN0YXRlKHVybCwgc3RhdGVTdG9yZSwgcmVtb3ZlU3RhdGUgPSBmYWxzZSkge1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIk9pZGNDbGllbnQucmVhZFNpZ25pblJlc3BvbnNlU3RhdGVcIik7XHJcblxyXG4gICAgICAgIGxldCB1c2VRdWVyeSA9IHRoaXMuX3NldHRpbmdzLnJlc3BvbnNlX21vZGUgPT09IFwicXVlcnlcIiB8fCBcclxuICAgICAgICAgICAgKCF0aGlzLl9zZXR0aW5ncy5yZXNwb25zZV9tb2RlICYmIFNpZ25pblJlcXVlc3QuaXNDb2RlKHRoaXMuX3NldHRpbmdzLnJlc3BvbnNlX3R5cGUpKTtcclxuICAgICAgICBsZXQgZGVsaW1pdGVyID0gdXNlUXVlcnkgPyBcIj9cIiA6IFwiI1wiO1xyXG5cclxuICAgICAgICB2YXIgcmVzcG9uc2UgPSBuZXcgU2lnbmluUmVzcG9uc2UodXJsLCBkZWxpbWl0ZXIpO1xyXG5cclxuICAgICAgICBpZiAoIXJlc3BvbnNlLnN0YXRlKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIk9pZGNDbGllbnQucmVhZFNpZ25pblJlc3BvbnNlU3RhdGU6IE5vIHN0YXRlIGluIHJlc3BvbnNlXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiTm8gc3RhdGUgaW4gcmVzcG9uc2VcIikpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc3RhdGVTdG9yZSA9IHN0YXRlU3RvcmUgfHwgdGhpcy5fc3RhdGVTdG9yZTtcclxuXHJcbiAgICAgICAgdmFyIHN0YXRlQXBpID0gcmVtb3ZlU3RhdGUgPyBzdGF0ZVN0b3JlLnJlbW92ZS5iaW5kKHN0YXRlU3RvcmUpIDogc3RhdGVTdG9yZS5nZXQuYmluZChzdGF0ZVN0b3JlKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHN0YXRlQXBpKHJlc3BvbnNlLnN0YXRlKS50aGVuKHN0b3JlZFN0YXRlU3RyaW5nID0+IHtcclxuICAgICAgICAgICAgaWYgKCFzdG9yZWRTdGF0ZVN0cmluZykge1xyXG4gICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiT2lkY0NsaWVudC5yZWFkU2lnbmluUmVzcG9uc2VTdGF0ZTogTm8gbWF0Y2hpbmcgc3RhdGUgZm91bmQgaW4gc3RvcmFnZVwiKTtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIG1hdGNoaW5nIHN0YXRlIGZvdW5kIGluIHN0b3JhZ2VcIik7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxldCBzdGF0ZSA9IFNpZ25pblN0YXRlLmZyb21TdG9yYWdlU3RyaW5nKHN0b3JlZFN0YXRlU3RyaW5nKTtcclxuICAgICAgICAgICAgcmV0dXJuIHtzdGF0ZSwgcmVzcG9uc2V9O1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByb2Nlc3NTaWduaW5SZXNwb25zZSh1cmwsIHN0YXRlU3RvcmUpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJPaWRjQ2xpZW50LnByb2Nlc3NTaWduaW5SZXNwb25zZVwiKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMucmVhZFNpZ25pblJlc3BvbnNlU3RhdGUodXJsLCBzdGF0ZVN0b3JlLCB0cnVlKS50aGVuKCh7c3RhdGUsIHJlc3BvbnNlfSkgPT4ge1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJPaWRjQ2xpZW50LnByb2Nlc3NTaWduaW5SZXNwb25zZTogUmVjZWl2ZWQgc3RhdGUgZnJvbSBzdG9yYWdlOyB2YWxpZGF0aW5nIHJlc3BvbnNlXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdmFsaWRhdG9yLnZhbGlkYXRlU2lnbmluUmVzcG9uc2Uoc3RhdGUsIHJlc3BvbnNlKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBjcmVhdGVTaWdub3V0UmVxdWVzdCh7aWRfdG9rZW5faGludCwgZGF0YSwgc3RhdGUsIHBvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaSwgZXh0cmFRdWVyeVBhcmFtcywgcmVxdWVzdF90eXBlIH0gPSB7fSxcclxuICAgICAgICBzdGF0ZVN0b3JlXHJcbiAgICApIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJPaWRjQ2xpZW50LmNyZWF0ZVNpZ25vdXRSZXF1ZXN0XCIpO1xyXG5cclxuICAgICAgICBwb3N0X2xvZ291dF9yZWRpcmVjdF91cmkgPSBwb3N0X2xvZ291dF9yZWRpcmVjdF91cmkgfHwgdGhpcy5fc2V0dGluZ3MucG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpO1xyXG4gICAgICAgIGV4dHJhUXVlcnlQYXJhbXMgPSBleHRyYVF1ZXJ5UGFyYW1zIHx8IHRoaXMuX3NldHRpbmdzLmV4dHJhUXVlcnlQYXJhbXM7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9tZXRhZGF0YVNlcnZpY2UuZ2V0RW5kU2Vzc2lvbkVuZHBvaW50KCkudGhlbih1cmwgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIXVybCkge1xyXG4gICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiT2lkY0NsaWVudC5jcmVhdGVTaWdub3V0UmVxdWVzdDogTm8gZW5kIHNlc3Npb24gZW5kcG9pbnQgdXJsIHJldHVybmVkXCIpO1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwibm8gZW5kIHNlc3Npb24gZW5kcG9pbnRcIik7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIk9pZGNDbGllbnQuY3JlYXRlU2lnbm91dFJlcXVlc3Q6IFJlY2VpdmVkIGVuZCBzZXNzaW9uIGVuZHBvaW50XCIsIHVybCk7XHJcblxyXG4gICAgICAgICAgICBsZXQgcmVxdWVzdCA9IG5ldyBTaWdub3V0UmVxdWVzdCh7XHJcbiAgICAgICAgICAgICAgICB1cmwsXHJcbiAgICAgICAgICAgICAgICBpZF90b2tlbl9oaW50LFxyXG4gICAgICAgICAgICAgICAgcG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpLFxyXG4gICAgICAgICAgICAgICAgZGF0YTogZGF0YSB8fCBzdGF0ZSxcclxuICAgICAgICAgICAgICAgIGV4dHJhUXVlcnlQYXJhbXMsXHJcbiAgICAgICAgICAgICAgICByZXF1ZXN0X3R5cGVcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICB2YXIgc2lnbm91dFN0YXRlID0gcmVxdWVzdC5zdGF0ZTtcclxuICAgICAgICAgICAgaWYgKHNpZ25vdXRTdGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiT2lkY0NsaWVudC5jcmVhdGVTaWdub3V0UmVxdWVzdDogU2lnbm91dCByZXF1ZXN0IGhhcyBzdGF0ZSB0byBwZXJzaXN0XCIpO1xyXG5cclxuICAgICAgICAgICAgICAgIHN0YXRlU3RvcmUgPSBzdGF0ZVN0b3JlIHx8IHRoaXMuX3N0YXRlU3RvcmU7XHJcbiAgICAgICAgICAgICAgICBzdGF0ZVN0b3JlLnNldChzaWdub3V0U3RhdGUuaWQsIHNpZ25vdXRTdGF0ZS50b1N0b3JhZ2VTdHJpbmcoKSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiByZXF1ZXN0O1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJlYWRTaWdub3V0UmVzcG9uc2VTdGF0ZSh1cmwsIHN0YXRlU3RvcmUsIHJlbW92ZVN0YXRlID0gZmFsc2UpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJPaWRjQ2xpZW50LnJlYWRTaWdub3V0UmVzcG9uc2VTdGF0ZVwiKTtcclxuXHJcbiAgICAgICAgdmFyIHJlc3BvbnNlID0gbmV3IFNpZ25vdXRSZXNwb25zZSh1cmwpO1xyXG4gICAgICAgIGlmICghcmVzcG9uc2Uuc3RhdGUpIHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiT2lkY0NsaWVudC5yZWFkU2lnbm91dFJlc3BvbnNlU3RhdGU6IE5vIHN0YXRlIGluIHJlc3BvbnNlXCIpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICBMb2cud2FybihcIk9pZGNDbGllbnQucmVhZFNpZ25vdXRSZXNwb25zZVN0YXRlOiBSZXNwb25zZSB3YXMgZXJyb3I6IFwiLCByZXNwb25zZS5lcnJvcik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yUmVzcG9uc2UocmVzcG9uc2UpKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7dW5kZWZpbmVkLCByZXNwb25zZX0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIHN0YXRlS2V5ID0gcmVzcG9uc2Uuc3RhdGU7XHJcblxyXG4gICAgICAgIHN0YXRlU3RvcmUgPSBzdGF0ZVN0b3JlIHx8IHRoaXMuX3N0YXRlU3RvcmU7XHJcblxyXG4gICAgICAgIHZhciBzdGF0ZUFwaSA9IHJlbW92ZVN0YXRlID8gc3RhdGVTdG9yZS5yZW1vdmUuYmluZChzdGF0ZVN0b3JlKSA6IHN0YXRlU3RvcmUuZ2V0LmJpbmQoc3RhdGVTdG9yZSk7XHJcbiAgICAgICAgcmV0dXJuIHN0YXRlQXBpKHN0YXRlS2V5KS50aGVuKHN0b3JlZFN0YXRlU3RyaW5nID0+IHtcclxuICAgICAgICAgICAgaWYgKCFzdG9yZWRTdGF0ZVN0cmluZykge1xyXG4gICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiT2lkY0NsaWVudC5yZWFkU2lnbm91dFJlc3BvbnNlU3RhdGU6IE5vIG1hdGNoaW5nIHN0YXRlIGZvdW5kIGluIHN0b3JhZ2VcIik7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBtYXRjaGluZyBzdGF0ZSBmb3VuZCBpbiBzdG9yYWdlXCIpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBsZXQgc3RhdGUgPSBTdGF0ZS5mcm9tU3RvcmFnZVN0cmluZyhzdG9yZWRTdGF0ZVN0cmluZyk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4ge3N0YXRlLCByZXNwb25zZX07XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvY2Vzc1NpZ25vdXRSZXNwb25zZSh1cmwsIHN0YXRlU3RvcmUpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJPaWRjQ2xpZW50LnByb2Nlc3NTaWdub3V0UmVzcG9uc2VcIik7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLnJlYWRTaWdub3V0UmVzcG9uc2VTdGF0ZSh1cmwsIHN0YXRlU3RvcmUsIHRydWUpLnRoZW4oKHtzdGF0ZSwgcmVzcG9uc2V9KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChzdGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiT2lkY0NsaWVudC5wcm9jZXNzU2lnbm91dFJlc3BvbnNlOiBSZWNlaXZlZCBzdGF0ZSBmcm9tIHN0b3JhZ2U7IHZhbGlkYXRpbmcgcmVzcG9uc2VcIik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fdmFsaWRhdG9yLnZhbGlkYXRlU2lnbm91dFJlc3BvbnNlKHN0YXRlLCByZXNwb25zZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJPaWRjQ2xpZW50LnByb2Nlc3NTaWdub3V0UmVzcG9uc2U6IE5vIHN0YXRlIGZyb20gc3RvcmFnZTsgc2tpcHBpbmcgdmFsaWRhdGluZyByZXNwb25zZVwiKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyU3RhbGVTdGF0ZShzdGF0ZVN0b3JlKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiT2lkY0NsaWVudC5jbGVhclN0YWxlU3RhdGVcIik7XHJcblxyXG4gICAgICAgIHN0YXRlU3RvcmUgPSBzdGF0ZVN0b3JlIHx8IHRoaXMuX3N0YXRlU3RvcmU7XHJcblxyXG4gICAgICAgIHJldHVybiBTdGF0ZS5jbGVhclN0YWxlU3RhdGUoc3RhdGVTdG9yZSwgdGhpcy5zZXR0aW5ncy5zdGFsZVN0YXRlQWdlKTtcclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcbmltcG9ydCB7IFdlYlN0b3JhZ2VTdGF0ZVN0b3JlIH0gZnJvbSAnLi9XZWJTdG9yYWdlU3RhdGVTdG9yZS5qcyc7XHJcbmltcG9ydCB7IFJlc3BvbnNlVmFsaWRhdG9yIH0gZnJvbSAnLi9SZXNwb25zZVZhbGlkYXRvci5qcyc7XHJcbmltcG9ydCB7IE1ldGFkYXRhU2VydmljZSB9IGZyb20gJy4vTWV0YWRhdGFTZXJ2aWNlLmpzJztcclxuXHJcbmNvbnN0IE9pZGNNZXRhZGF0YVVybFBhdGggPSAnLndlbGwta25vd24vb3BlbmlkLWNvbmZpZ3VyYXRpb24nO1xyXG5cclxuY29uc3QgRGVmYXVsdFJlc3BvbnNlVHlwZSA9IFwiaWRfdG9rZW5cIjtcclxuY29uc3QgRGVmYXVsdFNjb3BlID0gXCJvcGVuaWRcIjtcclxuY29uc3QgRGVmYXVsdFN0YWxlU3RhdGVBZ2UgPSA2MCAqIDE1OyAvLyBzZWNvbmRzXHJcbmNvbnN0IERlZmF1bHRDbG9ja1NrZXdJblNlY29uZHMgPSA2MCAqIDU7XHJcblxyXG5leHBvcnQgY2xhc3MgT2lkY0NsaWVudFNldHRpbmdzIHtcclxuICAgIGNvbnN0cnVjdG9yKHtcclxuICAgICAgICAvLyBtZXRhZGF0YSByZWxhdGVkXHJcbiAgICAgICAgYXV0aG9yaXR5LCBtZXRhZGF0YVVybCwgbWV0YWRhdGEsIHNpZ25pbmdLZXlzLFxyXG4gICAgICAgIC8vIGNsaWVudCByZWxhdGVkXHJcbiAgICAgICAgY2xpZW50X2lkLCBjbGllbnRfc2VjcmV0LCByZXNwb25zZV90eXBlID0gRGVmYXVsdFJlc3BvbnNlVHlwZSwgc2NvcGUgPSBEZWZhdWx0U2NvcGUsXHJcbiAgICAgICAgcmVkaXJlY3RfdXJpLCBwb3N0X2xvZ291dF9yZWRpcmVjdF91cmksXHJcbiAgICAgICAgLy8gb3B0aW9uYWwgcHJvdG9jb2xcclxuICAgICAgICBwcm9tcHQsIGRpc3BsYXksIG1heF9hZ2UsIHVpX2xvY2FsZXMsIGFjcl92YWx1ZXMsIHJlc291cmNlLCByZXNwb25zZV9tb2RlLFxyXG4gICAgICAgIC8vIGJlaGF2aW9yIGZsYWdzXHJcbiAgICAgICAgZmlsdGVyUHJvdG9jb2xDbGFpbXMgPSB0cnVlLCBsb2FkVXNlckluZm8gPSB0cnVlLFxyXG4gICAgICAgIHN0YWxlU3RhdGVBZ2UgPSBEZWZhdWx0U3RhbGVTdGF0ZUFnZSwgY2xvY2tTa2V3ID0gRGVmYXVsdENsb2NrU2tld0luU2Vjb25kcyxcclxuICAgICAgICB1c2VySW5mb0p3dElzc3VlciA9ICdPUCcsXHJcbiAgICAgICAgLy8gb3RoZXIgYmVoYXZpb3JcclxuICAgICAgICBzdGF0ZVN0b3JlID0gbmV3IFdlYlN0b3JhZ2VTdGF0ZVN0b3JlKCksXHJcbiAgICAgICAgUmVzcG9uc2VWYWxpZGF0b3JDdG9yID0gUmVzcG9uc2VWYWxpZGF0b3IsXHJcbiAgICAgICAgTWV0YWRhdGFTZXJ2aWNlQ3RvciA9IE1ldGFkYXRhU2VydmljZSxcclxuICAgICAgICAvLyBleHRyYSBxdWVyeSBwYXJhbXNcclxuICAgICAgICBleHRyYVF1ZXJ5UGFyYW1zID0ge31cclxuICAgIH0gPSB7fSkge1xyXG5cclxuICAgICAgICB0aGlzLl9hdXRob3JpdHkgPSBhdXRob3JpdHk7XHJcbiAgICAgICAgdGhpcy5fbWV0YWRhdGFVcmwgPSBtZXRhZGF0YVVybDtcclxuICAgICAgICB0aGlzLl9tZXRhZGF0YSA9IG1ldGFkYXRhO1xyXG4gICAgICAgIHRoaXMuX3NpZ25pbmdLZXlzID0gc2lnbmluZ0tleXM7XHJcblxyXG4gICAgICAgIHRoaXMuX2NsaWVudF9pZCA9IGNsaWVudF9pZDtcclxuICAgICAgICB0aGlzLl9jbGllbnRfc2VjcmV0ID0gY2xpZW50X3NlY3JldDtcclxuICAgICAgICB0aGlzLl9yZXNwb25zZV90eXBlID0gcmVzcG9uc2VfdHlwZTtcclxuICAgICAgICB0aGlzLl9zY29wZSA9IHNjb3BlO1xyXG4gICAgICAgIHRoaXMuX3JlZGlyZWN0X3VyaSA9IHJlZGlyZWN0X3VyaTtcclxuICAgICAgICB0aGlzLl9wb3N0X2xvZ291dF9yZWRpcmVjdF91cmkgPSBwb3N0X2xvZ291dF9yZWRpcmVjdF91cmk7XHJcblxyXG4gICAgICAgIHRoaXMuX3Byb21wdCA9IHByb21wdDtcclxuICAgICAgICB0aGlzLl9kaXNwbGF5ID0gZGlzcGxheTtcclxuICAgICAgICB0aGlzLl9tYXhfYWdlID0gbWF4X2FnZTtcclxuICAgICAgICB0aGlzLl91aV9sb2NhbGVzID0gdWlfbG9jYWxlcztcclxuICAgICAgICB0aGlzLl9hY3JfdmFsdWVzID0gYWNyX3ZhbHVlcztcclxuICAgICAgICB0aGlzLl9yZXNvdXJjZSA9IHJlc291cmNlO1xyXG4gICAgICAgIHRoaXMuX3Jlc3BvbnNlX21vZGUgPSByZXNwb25zZV9tb2RlO1xyXG5cclxuICAgICAgICB0aGlzLl9maWx0ZXJQcm90b2NvbENsYWltcyA9ICEhZmlsdGVyUHJvdG9jb2xDbGFpbXM7XHJcbiAgICAgICAgdGhpcy5fbG9hZFVzZXJJbmZvID0gISFsb2FkVXNlckluZm87XHJcbiAgICAgICAgdGhpcy5fc3RhbGVTdGF0ZUFnZSA9IHN0YWxlU3RhdGVBZ2U7XHJcbiAgICAgICAgdGhpcy5fY2xvY2tTa2V3ID0gY2xvY2tTa2V3O1xyXG4gICAgICAgIHRoaXMuX3VzZXJJbmZvSnd0SXNzdWVyID0gdXNlckluZm9Kd3RJc3N1ZXI7XHJcblxyXG4gICAgICAgIHRoaXMuX3N0YXRlU3RvcmUgPSBzdGF0ZVN0b3JlO1xyXG4gICAgICAgIHRoaXMuX3ZhbGlkYXRvciA9IG5ldyBSZXNwb25zZVZhbGlkYXRvckN0b3IodGhpcyk7XHJcbiAgICAgICAgdGhpcy5fbWV0YWRhdGFTZXJ2aWNlID0gbmV3IE1ldGFkYXRhU2VydmljZUN0b3IodGhpcyk7XHJcblxyXG4gICAgICAgIHRoaXMuX2V4dHJhUXVlcnlQYXJhbXMgPSB0eXBlb2YgZXh0cmFRdWVyeVBhcmFtcyA9PT0gJ29iamVjdCcgPyBleHRyYVF1ZXJ5UGFyYW1zIDoge307XHJcbiAgICB9XHJcblxyXG4gICAgLy8gY2xpZW50IGNvbmZpZ1xyXG4gICAgZ2V0IGNsaWVudF9pZCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fY2xpZW50X2lkO1xyXG4gICAgfVxyXG4gICAgc2V0IGNsaWVudF9pZCh2YWx1ZSkge1xyXG4gICAgICAgIGlmICghdGhpcy5fY2xpZW50X2lkKSB7XHJcbiAgICAgICAgICAgIC8vIG9uZS10aW1lIHNldCBvbmx5XHJcbiAgICAgICAgICAgIHRoaXMuX2NsaWVudF9pZCA9IHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiT2lkY0NsaWVudFNldHRpbmdzLnNldF9jbGllbnRfaWQ6IGNsaWVudF9pZCBoYXMgYWxyZWFkeSBiZWVuIGFzc2lnbmVkLlwiKVxyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJjbGllbnRfaWQgaGFzIGFscmVhZHkgYmVlbiBhc3NpZ25lZC5cIilcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBnZXQgY2xpZW50X3NlY3JldCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fY2xpZW50X3NlY3JldDtcclxuICAgIH1cclxuICAgIGdldCByZXNwb25zZV90eXBlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9yZXNwb25zZV90eXBlO1xyXG4gICAgfVxyXG4gICAgZ2V0IHNjb3BlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zY29wZTtcclxuICAgIH1cclxuICAgIGdldCByZWRpcmVjdF91cmkoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlZGlyZWN0X3VyaTtcclxuICAgIH1cclxuICAgIGdldCBwb3N0X2xvZ291dF9yZWRpcmVjdF91cmkoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Bvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8gb3B0aW9uYWwgcHJvdG9jb2wgcGFyYW1zXHJcbiAgICBnZXQgcHJvbXB0KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9wcm9tcHQ7XHJcbiAgICB9XHJcbiAgICBnZXQgZGlzcGxheSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZGlzcGxheTtcclxuICAgIH1cclxuICAgIGdldCBtYXhfYWdlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9tYXhfYWdlO1xyXG4gICAgfVxyXG4gICAgZ2V0IHVpX2xvY2FsZXMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3VpX2xvY2FsZXM7XHJcbiAgICB9XHJcbiAgICBnZXQgYWNyX3ZhbHVlcygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fYWNyX3ZhbHVlcztcclxuICAgIH1cclxuICAgIGdldCByZXNvdXJjZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcmVzb3VyY2U7XHJcbiAgICB9XHJcbiAgICBnZXQgcmVzcG9uc2VfbW9kZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcmVzcG9uc2VfbW9kZTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8gbWV0YWRhdGFcclxuICAgIGdldCBhdXRob3JpdHkoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2F1dGhvcml0eTtcclxuICAgIH1cclxuICAgIHNldCBhdXRob3JpdHkodmFsdWUpIHtcclxuICAgICAgICBpZiAoIXRoaXMuX2F1dGhvcml0eSkge1xyXG4gICAgICAgICAgICAvLyBvbmUtdGltZSBzZXQgb25seVxyXG4gICAgICAgICAgICB0aGlzLl9hdXRob3JpdHkgPSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIk9pZGNDbGllbnRTZXR0aW5ncy5zZXRfYXV0aG9yaXR5OiBhdXRob3JpdHkgaGFzIGFscmVhZHkgYmVlbiBhc3NpZ25lZC5cIilcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiYXV0aG9yaXR5IGhhcyBhbHJlYWR5IGJlZW4gYXNzaWduZWQuXCIpXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZ2V0IG1ldGFkYXRhVXJsKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5fbWV0YWRhdGFVcmwpIHtcclxuICAgICAgICAgICAgdGhpcy5fbWV0YWRhdGFVcmwgPSB0aGlzLmF1dGhvcml0eTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9tZXRhZGF0YVVybCAmJiB0aGlzLl9tZXRhZGF0YVVybC5pbmRleE9mKE9pZGNNZXRhZGF0YVVybFBhdGgpIDwgMCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX21ldGFkYXRhVXJsW3RoaXMuX21ldGFkYXRhVXJsLmxlbmd0aCAtIDFdICE9PSAnLycpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9tZXRhZGF0YVVybCArPSAnLyc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9tZXRhZGF0YVVybCArPSBPaWRjTWV0YWRhdGFVcmxQYXRoO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5fbWV0YWRhdGFVcmw7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gc2V0dGFibGUvY2FjaGFibGUgbWV0YWRhdGEgdmFsdWVzXHJcbiAgICBnZXQgbWV0YWRhdGEoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX21ldGFkYXRhO1xyXG4gICAgfVxyXG4gICAgc2V0IG1ldGFkYXRhKHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5fbWV0YWRhdGEgPSB2YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgc2lnbmluZ0tleXMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NpZ25pbmdLZXlzO1xyXG4gICAgfVxyXG4gICAgc2V0IHNpZ25pbmdLZXlzKHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5fc2lnbmluZ0tleXMgPSB2YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBiZWhhdmlvciBmbGFnc1xyXG4gICAgZ2V0IGZpbHRlclByb3RvY29sQ2xhaW1zKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9maWx0ZXJQcm90b2NvbENsYWltcztcclxuICAgIH1cclxuICAgIGdldCBsb2FkVXNlckluZm8oKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xvYWRVc2VySW5mbztcclxuICAgIH1cclxuICAgIGdldCBzdGFsZVN0YXRlQWdlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zdGFsZVN0YXRlQWdlO1xyXG4gICAgfVxyXG4gICAgZ2V0IGNsb2NrU2tldygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fY2xvY2tTa2V3O1xyXG4gICAgfVxyXG4gICAgZ2V0IHVzZXJJbmZvSnd0SXNzdWVyKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl91c2VySW5mb0p3dElzc3VlcjtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgc3RhdGVTdG9yZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc3RhdGVTdG9yZTtcclxuICAgIH1cclxuICAgIGdldCB2YWxpZGF0b3IoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbGlkYXRvcjtcclxuICAgIH1cclxuICAgIGdldCBtZXRhZGF0YVNlcnZpY2UoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX21ldGFkYXRhU2VydmljZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBleHRyYSBxdWVyeSBwYXJhbXNcclxuICAgIGdldCBleHRyYVF1ZXJ5UGFyYW1zKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9leHRyYVF1ZXJ5UGFyYW1zO1xyXG4gICAgfVxyXG4gICAgc2V0IGV4dHJhUXVlcnlQYXJhbXModmFsdWUpIHtcclxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jyl7XHJcbiAgICAgICAgICAgIHRoaXMuX2V4dHJhUXVlcnlQYXJhbXMgPSB2YWx1ZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLl9leHRyYVF1ZXJ5UGFyYW1zID0ge307XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuaW1wb3J0IHsgUG9wdXBXaW5kb3cgfSBmcm9tICcuL1BvcHVwV2luZG93LmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBQb3B1cE5hdmlnYXRvciB7XHJcblxyXG4gICAgcHJlcGFyZShwYXJhbXMpIHtcclxuICAgICAgICBsZXQgcG9wdXAgPSBuZXcgUG9wdXBXaW5kb3cocGFyYW1zKTtcclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHBvcHVwKTtcclxuICAgIH1cclxuXHJcbiAgICBjYWxsYmFjayh1cmwsIGtlZXBPcGVuLCBkZWxpbWl0ZXIpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJQb3B1cE5hdmlnYXRvci5jYWxsYmFja1wiKTtcclxuXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgUG9wdXBXaW5kb3cubm90aWZ5T3BlbmVyKHVybCwga2VlcE9wZW4sIGRlbGltaXRlcik7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcbmltcG9ydCB7IFVybFV0aWxpdHkgfSBmcm9tICcuL1VybFV0aWxpdHkuanMnO1xyXG5cclxuY29uc3QgQ2hlY2tGb3JQb3B1cENsb3NlZEludGVydmFsID0gNTAwO1xyXG5jb25zdCBEZWZhdWx0UG9wdXBGZWF0dXJlcyA9ICdsb2NhdGlvbj1ubyx0b29sYmFyPW5vLHdpZHRoPTUwMCxoZWlnaHQ9NTAwLGxlZnQ9MTAwLHRvcD0xMDA7JztcclxuLy9jb25zdCBEZWZhdWx0UG9wdXBGZWF0dXJlcyA9ICdsb2NhdGlvbj1ubyx0b29sYmFyPW5vLHdpZHRoPTUwMCxoZWlnaHQ9NTAwLGxlZnQ9MTAwLHRvcD0xMDA7cmVzaXphYmxlPXllcyc7XHJcblxyXG5jb25zdCBEZWZhdWx0UG9wdXBUYXJnZXQgPSBcIl9ibGFua1wiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFBvcHVwV2luZG93IHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihwYXJhbXMpIHtcclxuICAgICAgICB0aGlzLl9wcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLl9yZXNvbHZlID0gcmVzb2x2ZTtcclxuICAgICAgICAgICAgdGhpcy5fcmVqZWN0ID0gcmVqZWN0O1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBsZXQgdGFyZ2V0ID0gcGFyYW1zLnBvcHVwV2luZG93VGFyZ2V0IHx8IERlZmF1bHRQb3B1cFRhcmdldDtcclxuICAgICAgICBsZXQgZmVhdHVyZXMgPSBwYXJhbXMucG9wdXBXaW5kb3dGZWF0dXJlcyB8fCBEZWZhdWx0UG9wdXBGZWF0dXJlcztcclxuXHJcbiAgICAgICAgdGhpcy5fcG9wdXAgPSB3aW5kb3cub3BlbignJywgdGFyZ2V0LCBmZWF0dXJlcyk7XHJcbiAgICAgICAgaWYgKHRoaXMuX3BvcHVwKSB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlBvcHVwV2luZG93LmN0b3I6IHBvcHVwIHN1Y2Nlc3NmdWxseSBjcmVhdGVkXCIpO1xyXG4gICAgICAgICAgICB0aGlzLl9jaGVja0ZvclBvcHVwQ2xvc2VkVGltZXIgPSB3aW5kb3cuc2V0SW50ZXJ2YWwodGhpcy5fY2hlY2tGb3JQb3B1cENsb3NlZC5iaW5kKHRoaXMpLCBDaGVja0ZvclBvcHVwQ2xvc2VkSW50ZXJ2YWwpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXQgcHJvbWlzZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcHJvbWlzZTtcclxuICAgIH1cclxuXHJcbiAgICBuYXZpZ2F0ZShwYXJhbXMpIHtcclxuICAgICAgICBpZiAoIXRoaXMuX3BvcHVwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2Vycm9yKFwiUG9wdXBXaW5kb3cubmF2aWdhdGU6IEVycm9yIG9wZW5pbmcgcG9wdXAgd2luZG93XCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICghcGFyYW1zIHx8ICFwYXJhbXMudXJsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2Vycm9yKFwiUG9wdXBXaW5kb3cubmF2aWdhdGU6IG5vIHVybCBwcm92aWRlZFwiKTtcclxuICAgICAgICAgICAgdGhpcy5fZXJyb3IoXCJObyB1cmwgcHJvdmlkZWRcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJQb3B1cFdpbmRvdy5uYXZpZ2F0ZTogU2V0dGluZyBVUkwgaW4gcG9wdXBcIik7XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9pZCA9IHBhcmFtcy5pZDtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX2lkKSB7XHJcbiAgICAgICAgICAgICAgICB3aW5kb3dbXCJwb3B1cENhbGxiYWNrX1wiICsgcGFyYW1zLmlkXSA9IHRoaXMuX2NhbGxiYWNrLmJpbmQodGhpcyk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuX3BvcHVwLmZvY3VzKCk7XHJcbiAgICAgICAgICAgIHRoaXMuX3BvcHVwLndpbmRvdy5sb2NhdGlvbiA9IHBhcmFtcy51cmw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5wcm9taXNlO1xyXG4gICAgfVxyXG5cclxuICAgIF9zdWNjZXNzKGRhdGEpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJQb3B1cFdpbmRvdy5jYWxsYmFjazogU3VjY2Vzc2Z1bCByZXNwb25zZSBmcm9tIHBvcHVwIHdpbmRvd1wiKTtcclxuXHJcbiAgICAgICAgdGhpcy5fY2xlYW51cCgpO1xyXG4gICAgICAgIHRoaXMuX3Jlc29sdmUoZGF0YSk7XHJcbiAgICB9XHJcbiAgICBfZXJyb3IobWVzc2FnZSkge1xyXG4gICAgICAgIExvZy5lcnJvcihcIlBvcHVwV2luZG93LmVycm9yOiBcIiwgbWVzc2FnZSk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5fY2xlYW51cCgpO1xyXG4gICAgICAgIHRoaXMuX3JlamVjdChuZXcgRXJyb3IobWVzc2FnZSkpO1xyXG4gICAgfVxyXG5cclxuICAgIGNsb3NlKCkge1xyXG4gICAgICAgIHRoaXMuX2NsZWFudXAoZmFsc2UpO1xyXG4gICAgfVxyXG5cclxuICAgIF9jbGVhbnVwKGtlZXBPcGVuKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiUG9wdXBXaW5kb3cuY2xlYW51cFwiKTtcclxuXHJcbiAgICAgICAgd2luZG93LmNsZWFySW50ZXJ2YWwodGhpcy5fY2hlY2tGb3JQb3B1cENsb3NlZFRpbWVyKTtcclxuICAgICAgICB0aGlzLl9jaGVja0ZvclBvcHVwQ2xvc2VkVGltZXIgPSBudWxsO1xyXG5cclxuICAgICAgICBkZWxldGUgd2luZG93W1wicG9wdXBDYWxsYmFja19cIiArIHRoaXMuX2lkXTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX3BvcHVwICYmICFrZWVwT3Blbikge1xyXG4gICAgICAgICAgICB0aGlzLl9wb3B1cC5jbG9zZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9wb3B1cCA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgX2NoZWNrRm9yUG9wdXBDbG9zZWQoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9wb3B1cCB8fCB0aGlzLl9wb3B1cC5jbG9zZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5fZXJyb3IoXCJQb3B1cCB3aW5kb3cgY2xvc2VkXCIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBfY2FsbGJhY2sodXJsLCBrZWVwT3Blbikge1xyXG4gICAgICAgIHRoaXMuX2NsZWFudXAoa2VlcE9wZW4pO1xyXG5cclxuICAgICAgICBpZiAodXJsKSB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlBvcHVwV2luZG93LmNhbGxiYWNrIHN1Y2Nlc3NcIik7XHJcbiAgICAgICAgICAgIHRoaXMuX3N1Y2Nlc3MoeyB1cmw6IHVybCB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlBvcHVwV2luZG93LmNhbGxiYWNrOiBJbnZhbGlkIHJlc3BvbnNlIGZyb20gcG9wdXBcIik7XHJcbiAgICAgICAgICAgIHRoaXMuX2Vycm9yKFwiSW52YWxpZCByZXNwb25zZSBmcm9tIHBvcHVwXCIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgbm90aWZ5T3BlbmVyKHVybCwga2VlcE9wZW4sIGRlbGltaXRlcikge1xyXG4gICAgICAgIGlmICh3aW5kb3cub3BlbmVyKSB7XHJcbiAgICAgICAgICAgIHVybCA9IHVybCB8fCB3aW5kb3cubG9jYXRpb24uaHJlZjtcclxuICAgICAgICAgICAgaWYgKHVybCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGRhdGEgPSBVcmxVdGlsaXR5LnBhcnNlVXJsRnJhZ21lbnQodXJsLCBkZWxpbWl0ZXIpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChkYXRhLnN0YXRlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5hbWUgPSBcInBvcHVwQ2FsbGJhY2tfXCIgKyBkYXRhLnN0YXRlO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IHdpbmRvdy5vcGVuZXJbbmFtZV07XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlBvcHVwV2luZG93Lm5vdGlmeU9wZW5lcjogcGFzc2luZyB1cmwgbWVzc2FnZSB0byBvcGVuZXJcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKHVybCwga2VlcE9wZW4pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgTG9nLndhcm4oXCJQb3B1cFdpbmRvdy5ub3RpZnlPcGVuZXI6IG5vIG1hdGNoaW5nIGNhbGxiYWNrIGZvdW5kIG9uIG9wZW5lclwiKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cud2FybihcIlBvcHVwV2luZG93Lm5vdGlmeU9wZW5lcjogbm8gc3RhdGUgZm91bmQgaW4gcmVzcG9uc2UgdXJsXCIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBMb2cud2FybihcIlBvcHVwV2luZG93Lm5vdGlmeU9wZW5lcjogbm8gd2luZG93Lm9wZW5lci4gQ2FuJ3QgY29tcGxldGUgbm90aWZpY2F0aW9uLlwiKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG5cclxuaW1wb3J0IHsgTG9nIH0gZnJvbSAnLi9Mb2cuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFJlZGlyZWN0TmF2aWdhdG9yIHtcclxuXHJcbiAgICBwcmVwYXJlKCkge1xyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgbmF2aWdhdGUocGFyYW1zKSB7XHJcbiAgICAgICAgaWYgKCFwYXJhbXMgfHwgIXBhcmFtcy51cmwpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVkaXJlY3ROYXZpZ2F0b3IubmF2aWdhdGU6IE5vIHVybCBwcm92aWRlZFwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIk5vIHVybCBwcm92aWRlZFwiKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAocGFyYW1zLnVzZVJlcGxhY2VUb05hdmlnYXRlKSB7XHJcbiAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZXBsYWNlKHBhcmFtcy51cmwpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uID0gcGFyYW1zLnVybDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgdXJsKCkge1xyXG4gICAgICAgIHJldHVybiB3aW5kb3cubG9jYXRpb24uaHJlZjtcclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcbmltcG9ydCB7IE1ldGFkYXRhU2VydmljZSB9IGZyb20gJy4vTWV0YWRhdGFTZXJ2aWNlLmpzJztcclxuaW1wb3J0IHsgVXNlckluZm9TZXJ2aWNlIH0gZnJvbSAnLi9Vc2VySW5mb1NlcnZpY2UuanMnO1xyXG5pbXBvcnQgeyBUb2tlbkNsaWVudCB9IGZyb20gJy4vVG9rZW5DbGllbnQuanMnO1xyXG5pbXBvcnQgeyBFcnJvclJlc3BvbnNlIH0gZnJvbSAnLi9FcnJvclJlc3BvbnNlLmpzJztcclxuaW1wb3J0IHsgSm9zZVV0aWwgfSBmcm9tICcuL0pvc2VVdGlsLmpzJztcclxuXHJcbmNvbnN0IFByb3RvY29sQ2xhaW1zID0gW1wibm9uY2VcIiwgXCJhdF9oYXNoXCIsIFwiaWF0XCIsIFwibmJmXCIsIFwiZXhwXCIsIFwiYXVkXCIsIFwiaXNzXCIsIFwiY19oYXNoXCJdO1xyXG5cclxuZXhwb3J0IGNsYXNzIFJlc3BvbnNlVmFsaWRhdG9yIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihzZXR0aW5ncywgXHJcbiAgICAgICAgTWV0YWRhdGFTZXJ2aWNlQ3RvciA9IE1ldGFkYXRhU2VydmljZSxcclxuICAgICAgICBVc2VySW5mb1NlcnZpY2VDdG9yID0gVXNlckluZm9TZXJ2aWNlLCBcclxuICAgICAgICBqb3NlVXRpbCA9IEpvc2VVdGlsLFxyXG4gICAgICAgIFRva2VuQ2xpZW50Q3RvciA9IFRva2VuQ2xpZW50KSB7XHJcbiAgICAgICAgaWYgKCFzZXR0aW5ncykge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5jdG9yOiBObyBzZXR0aW5ncyBwYXNzZWQgdG8gUmVzcG9uc2VWYWxpZGF0b3JcIik7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInNldHRpbmdzXCIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fc2V0dGluZ3MgPSBzZXR0aW5ncztcclxuICAgICAgICB0aGlzLl9tZXRhZGF0YVNlcnZpY2UgPSBuZXcgTWV0YWRhdGFTZXJ2aWNlQ3Rvcih0aGlzLl9zZXR0aW5ncyk7XHJcbiAgICAgICAgdGhpcy5fdXNlckluZm9TZXJ2aWNlID0gbmV3IFVzZXJJbmZvU2VydmljZUN0b3IodGhpcy5fc2V0dGluZ3MpO1xyXG4gICAgICAgIHRoaXMuX2pvc2VVdGlsID0gam9zZVV0aWw7XHJcbiAgICAgICAgdGhpcy5fdG9rZW5DbGllbnQgPSBuZXcgVG9rZW5DbGllbnRDdG9yKHRoaXMuX3NldHRpbmdzKTtcclxuICAgIH1cclxuXHJcbiAgICB2YWxpZGF0ZVNpZ25pblJlc3BvbnNlKHN0YXRlLCByZXNwb25zZSkge1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLnZhbGlkYXRlU2lnbmluUmVzcG9uc2VcIik7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9wcm9jZXNzU2lnbmluUGFyYW1zKHN0YXRlLCByZXNwb25zZSkudGhlbihyZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLnZhbGlkYXRlU2lnbmluUmVzcG9uc2U6IHN0YXRlIHByb2Nlc3NlZFwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbGlkYXRlVG9rZW5zKHN0YXRlLCByZXNwb25zZSkudGhlbihyZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJSZXNwb25zZVZhbGlkYXRvci52YWxpZGF0ZVNpZ25pblJlc3BvbnNlOiB0b2tlbnMgdmFsaWRhdGVkXCIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Byb2Nlc3NDbGFpbXMoc3RhdGUsIHJlc3BvbnNlKS50aGVuKHJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJSZXNwb25zZVZhbGlkYXRvci52YWxpZGF0ZVNpZ25pblJlc3BvbnNlOiBjbGFpbXMgcHJvY2Vzc2VkXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICB2YWxpZGF0ZVNpZ25vdXRSZXNwb25zZShzdGF0ZSwgcmVzcG9uc2UpIHtcclxuICAgICAgICBpZiAoc3RhdGUuaWQgIT09IHJlc3BvbnNlLnN0YXRlKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLnZhbGlkYXRlU2lnbm91dFJlc3BvbnNlOiBTdGF0ZSBkb2VzIG5vdCBtYXRjaFwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIlN0YXRlIGRvZXMgbm90IG1hdGNoXCIpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIG5vdyB0aGF0IHdlIGtub3cgdGhlIHN0YXRlIG1hdGNoZXMsIHRha2UgdGhlIHN0b3JlZCBkYXRhXHJcbiAgICAgICAgLy8gYW5kIHNldCBpdCBpbnRvIHRoZSByZXNwb25zZSBzbyBjYWxsZXJzIGNhbiBnZXQgdGhlaXIgc3RhdGVcclxuICAgICAgICAvLyB0aGlzIGlzIGltcG9ydGFudCBmb3IgYm90aCBzdWNjZXNzICYgZXJyb3Igb3V0Y29tZXNcclxuICAgICAgICBMb2cuZGVidWcoXCJSZXNwb25zZVZhbGlkYXRvci52YWxpZGF0ZVNpZ25vdXRSZXNwb25zZTogc3RhdGUgdmFsaWRhdGVkXCIpO1xyXG4gICAgICAgIHJlc3BvbnNlLnN0YXRlID0gc3RhdGUuZGF0YTtcclxuXHJcbiAgICAgICAgaWYgKHJlc3BvbnNlLmVycm9yKSB7XHJcbiAgICAgICAgICAgIExvZy53YXJuKFwiUmVzcG9uc2VWYWxpZGF0b3IudmFsaWRhdGVTaWdub3V0UmVzcG9uc2U6IFJlc3BvbnNlIHdhcyBlcnJvclwiLCByZXNwb25zZS5lcnJvcik7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3JSZXNwb25zZShyZXNwb25zZSkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShyZXNwb25zZSk7XHJcbiAgICB9XHJcblxyXG4gICAgX3Byb2Nlc3NTaWduaW5QYXJhbXMoc3RhdGUsIHJlc3BvbnNlKSB7XHJcbiAgICAgICAgaWYgKHN0YXRlLmlkICE9PSByZXNwb25zZS5zdGF0ZSkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5fcHJvY2Vzc1NpZ25pblBhcmFtczogU3RhdGUgZG9lcyBub3QgbWF0Y2hcIik7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJTdGF0ZSBkb2VzIG5vdCBtYXRjaFwiKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXN0YXRlLmNsaWVudF9pZCkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5fcHJvY2Vzc1NpZ25pblBhcmFtczogTm8gY2xpZW50X2lkIG9uIHN0YXRlXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiTm8gY2xpZW50X2lkIG9uIHN0YXRlXCIpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghc3RhdGUuYXV0aG9yaXR5KSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLl9wcm9jZXNzU2lnbmluUGFyYW1zOiBObyBhdXRob3JpdHkgb24gc3RhdGVcIik7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJObyBhdXRob3JpdHkgb24gc3RhdGVcIikpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gdGhpcyBhbGxvd3MgdGhlIGF1dGhvcml0eSB0byBiZSBsb2FkZWQgZnJvbSB0aGUgc2lnbmluIHN0YXRlXHJcbiAgICAgICAgaWYgKCF0aGlzLl9zZXR0aW5ncy5hdXRob3JpdHkpIHtcclxuICAgICAgICAgICAgdGhpcy5fc2V0dGluZ3MuYXV0aG9yaXR5ID0gc3RhdGUuYXV0aG9yaXR5O1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBlbnN1cmUgd2UncmUgdXNpbmcgdGhlIGNvcnJlY3QgYXV0aG9yaXR5IGlmIHRoZSBhdXRob3JpdHkgaXMgbm90IGxvYWRlZCBmcm9tIHNpZ25pbiBzdGF0ZVxyXG4gICAgICAgIGVsc2UgaWYgKHRoaXMuX3NldHRpbmdzLmF1dGhvcml0eSAmJiB0aGlzLl9zZXR0aW5ncy5hdXRob3JpdHkgIT09IHN0YXRlLmF1dGhvcml0eSkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5fcHJvY2Vzc1NpZ25pblBhcmFtczogYXV0aG9yaXR5IG1pc21hdGNoIG9uIHNldHRpbmdzIHZzLiBzaWduaW4gc3RhdGVcIik7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJhdXRob3JpdHkgbWlzbWF0Y2ggb24gc2V0dGluZ3MgdnMuIHNpZ25pbiBzdGF0ZVwiKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIHRoaXMgYWxsb3dzIHRoZSBjbGllbnRfaWQgdG8gYmUgbG9hZGVkIGZyb20gdGhlIHNpZ25pbiBzdGF0ZVxyXG4gICAgICAgIGlmICghdGhpcy5fc2V0dGluZ3MuY2xpZW50X2lkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3NldHRpbmdzLmNsaWVudF9pZCA9IHN0YXRlLmNsaWVudF9pZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gZW5zdXJlIHdlJ3JlIHVzaW5nIHRoZSBjb3JyZWN0IGNsaWVudF9pZCBpZiB0aGUgY2xpZW50X2lkIGlzIG5vdCBsb2FkZWQgZnJvbSBzaWduaW4gc3RhdGVcclxuICAgICAgICBlbHNlIGlmICh0aGlzLl9zZXR0aW5ncy5jbGllbnRfaWQgJiYgdGhpcy5fc2V0dGluZ3MuY2xpZW50X2lkICE9PSBzdGF0ZS5jbGllbnRfaWQpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3Byb2Nlc3NTaWduaW5QYXJhbXM6IGNsaWVudF9pZCBtaXNtYXRjaCBvbiBzZXR0aW5ncyB2cy4gc2lnbmluIHN0YXRlXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiY2xpZW50X2lkIG1pc21hdGNoIG9uIHNldHRpbmdzIHZzLiBzaWduaW4gc3RhdGVcIikpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gbm93IHRoYXQgd2Uga25vdyB0aGUgc3RhdGUgbWF0Y2hlcywgdGFrZSB0aGUgc3RvcmVkIGRhdGFcclxuICAgICAgICAvLyBhbmQgc2V0IGl0IGludG8gdGhlIHJlc3BvbnNlIHNvIGNhbGxlcnMgY2FuIGdldCB0aGVpciBzdGF0ZVxyXG4gICAgICAgIC8vIHRoaXMgaXMgaW1wb3J0YW50IGZvciBib3RoIHN1Y2Nlc3MgJiBlcnJvciBvdXRjb21lc1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLl9wcm9jZXNzU2lnbmluUGFyYW1zOiBzdGF0ZSB2YWxpZGF0ZWRcIik7XHJcbiAgICAgICAgcmVzcG9uc2Uuc3RhdGUgPSBzdGF0ZS5kYXRhO1xyXG5cclxuICAgICAgICBpZiAocmVzcG9uc2UuZXJyb3IpIHtcclxuICAgICAgICAgICAgTG9nLndhcm4oXCJSZXNwb25zZVZhbGlkYXRvci5fcHJvY2Vzc1NpZ25pblBhcmFtczogUmVzcG9uc2Ugd2FzIGVycm9yXCIsIHJlc3BvbnNlLmVycm9yKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvclJlc3BvbnNlKHJlc3BvbnNlKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoc3RhdGUubm9uY2UgJiYgIXJlc3BvbnNlLmlkX3Rva2VuKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLl9wcm9jZXNzU2lnbmluUGFyYW1zOiBFeHBlY3RpbmcgaWRfdG9rZW4gaW4gcmVzcG9uc2VcIik7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJObyBpZF90b2tlbiBpbiByZXNwb25zZVwiKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXN0YXRlLm5vbmNlICYmIHJlc3BvbnNlLmlkX3Rva2VuKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLl9wcm9jZXNzU2lnbmluUGFyYW1zOiBOb3QgZXhwZWN0aW5nIGlkX3Rva2VuIGluIHJlc3BvbnNlXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiVW5leHBlY3RlZCBpZF90b2tlbiBpbiByZXNwb25zZVwiKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoc3RhdGUuY29kZV92ZXJpZmllciAmJiAhcmVzcG9uc2UuY29kZSkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5fcHJvY2Vzc1NpZ25pblBhcmFtczogRXhwZWN0aW5nIGNvZGUgaW4gcmVzcG9uc2VcIik7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJObyBjb2RlIGluIHJlc3BvbnNlXCIpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghc3RhdGUuY29kZV92ZXJpZmllciAmJiByZXNwb25zZS5jb2RlKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLl9wcm9jZXNzU2lnbmluUGFyYW1zOiBOb3QgZXhwZWN0aW5nIGNvZGUgaW4gcmVzcG9uc2VcIik7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJVbmV4cGVjdGVkIGNvZGUgaW4gcmVzcG9uc2VcIikpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFyZXNwb25zZS5zY29wZSkge1xyXG4gICAgICAgICAgICAvLyBpZiB0aGVyZSdzIG5vIHNjb3BlIG9uIHRoZSByZXNwb25zZSwgdGhlbiBhc3N1bWUgYWxsIHNjb3BlcyBncmFudGVkIChwZXItc3BlYykgYW5kIGNvcHkgb3ZlciBzY29wZXMgZnJvbSBvcmlnaW5hbCByZXF1ZXN0XHJcbiAgICAgICAgICAgIHJlc3BvbnNlLnNjb3BlID0gc3RhdGUuc2NvcGU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlc3BvbnNlKTtcclxuICAgIH1cclxuXHJcbiAgICBfcHJvY2Vzc0NsYWltcyhzdGF0ZSwgcmVzcG9uc2UpIHtcclxuICAgICAgICBpZiAocmVzcG9uc2UuaXNPcGVuSWRDb25uZWN0KSB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLl9wcm9jZXNzQ2xhaW1zOiByZXNwb25zZSBpcyBPSURDLCBwcm9jZXNzaW5nIGNsYWltc1wiKTtcclxuXHJcbiAgICAgICAgICAgIHJlc3BvbnNlLnByb2ZpbGUgPSB0aGlzLl9maWx0ZXJQcm90b2NvbENsYWltcyhyZXNwb25zZS5wcm9maWxlKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChzdGF0ZS5za2lwVXNlckluZm8gIT09IHRydWUgJiYgdGhpcy5fc2V0dGluZ3MubG9hZFVzZXJJbmZvICYmIHJlc3BvbnNlLmFjY2Vzc190b2tlbikge1xyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3Byb2Nlc3NDbGFpbXM6IGxvYWRpbmcgdXNlciBpbmZvXCIpO1xyXG5cclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl91c2VySW5mb1NlcnZpY2UuZ2V0Q2xhaW1zKHJlc3BvbnNlLmFjY2Vzc190b2tlbikudGhlbihjbGFpbXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLl9wcm9jZXNzQ2xhaW1zOiB1c2VyIGluZm8gY2xhaW1zIHJlY2VpdmVkIGZyb20gdXNlciBpbmZvIGVuZHBvaW50XCIpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoY2xhaW1zLnN1YiAhPT0gcmVzcG9uc2UucHJvZmlsZS5zdWIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3Byb2Nlc3NDbGFpbXM6IHN1YiBmcm9tIHVzZXIgaW5mbyBlbmRwb2ludCBkb2VzIG5vdCBtYXRjaCBzdWIgaW4gYWNjZXNzX3Rva2VuXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwic3ViIGZyb20gdXNlciBpbmZvIGVuZHBvaW50IGRvZXMgbm90IG1hdGNoIHN1YiBpbiBhY2Nlc3NfdG9rZW5cIikpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UucHJvZmlsZSA9IHRoaXMuX21lcmdlQ2xhaW1zKHJlc3BvbnNlLnByb2ZpbGUsIGNsYWltcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3Byb2Nlc3NDbGFpbXM6IHVzZXIgaW5mbyBjbGFpbXMgcmVjZWl2ZWQsIHVwZGF0ZWQgcHJvZmlsZTpcIiwgcmVzcG9uc2UucHJvZmlsZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3Byb2Nlc3NDbGFpbXM6IG5vdCBsb2FkaW5nIHVzZXIgaW5mb1wiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3Byb2Nlc3NDbGFpbXM6IHJlc3BvbnNlIGlzIG5vdCBPSURDLCBub3QgcHJvY2Vzc2luZyBjbGFpbXNcIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlc3BvbnNlKTtcclxuICAgIH1cclxuXHJcbiAgICBfbWVyZ2VDbGFpbXMoY2xhaW1zMSwgY2xhaW1zMikge1xyXG4gICAgICAgIHZhciByZXN1bHQgPSBPYmplY3QuYXNzaWduKHt9LCBjbGFpbXMxKTtcclxuXHJcbiAgICAgICAgZm9yIChsZXQgbmFtZSBpbiBjbGFpbXMyKSB7XHJcbiAgICAgICAgICAgIHZhciB2YWx1ZXMgPSBjbGFpbXMyW25hbWVdO1xyXG4gICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWVzKSkge1xyXG4gICAgICAgICAgICAgICAgdmFsdWVzID0gW3ZhbHVlc107XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSB2YWx1ZXNbaV07XHJcbiAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdFtuYW1lXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdFtuYW1lXSA9IHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShyZXN1bHRbbmFtZV0pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdFtuYW1lXS5pbmRleE9mKHZhbHVlKSA8IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0W25hbWVdLnB1c2godmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJlc3VsdFtuYW1lXSAhPT0gdmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRbbmFtZV0gPSB0aGlzLl9tZXJnZUNsYWltcyhyZXN1bHRbbmFtZV0sIHZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICB9IFxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRbbmFtZV0gPSBbcmVzdWx0W25hbWVdLCB2YWx1ZV07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICAgIF9maWx0ZXJQcm90b2NvbENsYWltcyhjbGFpbXMpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJSZXNwb25zZVZhbGlkYXRvci5fZmlsdGVyUHJvdG9jb2xDbGFpbXMsIGluY29taW5nIGNsYWltczpcIiwgY2xhaW1zKTtcclxuXHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IE9iamVjdC5hc3NpZ24oe30sIGNsYWltcyk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl9zZXR0aW5ncy5fZmlsdGVyUHJvdG9jb2xDbGFpbXMpIHtcclxuICAgICAgICAgICAgUHJvdG9jb2xDbGFpbXMuZm9yRWFjaCh0eXBlID0+IHtcclxuICAgICAgICAgICAgICAgIGRlbGV0ZSByZXN1bHRbdHlwZV07XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX2ZpbHRlclByb3RvY29sQ2xhaW1zOiBwcm90b2NvbCBjbGFpbXMgZmlsdGVyZWRcIiwgcmVzdWx0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLl9maWx0ZXJQcm90b2NvbENsYWltczogcHJvdG9jb2wgY2xhaW1zIG5vdCBmaWx0ZXJlZFwiKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICBfdmFsaWRhdGVUb2tlbnMoc3RhdGUsIHJlc3BvbnNlKSB7XHJcbiAgICAgICAgaWYgKHJlc3BvbnNlLmNvZGUpIHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlVG9rZW5zOiBWYWxpZGF0aW5nIGNvZGVcIik7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9wcm9jZXNzQ29kZShzdGF0ZSwgcmVzcG9uc2UpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHJlc3BvbnNlLmlkX3Rva2VuKSB7XHJcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5hY2Nlc3NfdG9rZW4pIHtcclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLl92YWxpZGF0ZVRva2VuczogVmFsaWRhdGluZyBpZF90b2tlbiBhbmQgYWNjZXNzX3Rva2VuXCIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbGlkYXRlSWRUb2tlbkFuZEFjY2Vzc1Rva2VuKHN0YXRlLCByZXNwb25zZSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLl92YWxpZGF0ZVRva2VuczogVmFsaWRhdGluZyBpZF90b2tlblwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbGlkYXRlSWRUb2tlbihzdGF0ZSwgcmVzcG9uc2UpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlVG9rZW5zOiBObyBjb2RlIHRvIHByb2Nlc3Mgb3IgaWRfdG9rZW4gdG8gdmFsaWRhdGVcIik7XHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShyZXNwb25zZSk7XHJcbiAgICB9XHJcblxyXG4gICAgX3Byb2Nlc3NDb2RlKHN0YXRlLCByZXNwb25zZSkge1xyXG4gICAgICAgIHZhciByZXF1ZXN0ID0ge1xyXG4gICAgICAgICAgICBjbGllbnRfaWQ6IHN0YXRlLmNsaWVudF9pZCxcclxuICAgICAgICAgICAgY2xpZW50X3NlY3JldDogc3RhdGUuY2xpZW50X3NlY3JldCxcclxuICAgICAgICAgICAgY29kZSA6IHJlc3BvbnNlLmNvZGUsXHJcbiAgICAgICAgICAgIHJlZGlyZWN0X3VyaTogc3RhdGUucmVkaXJlY3RfdXJpLFxyXG4gICAgICAgICAgICBjb2RlX3ZlcmlmaWVyOiBzdGF0ZS5jb2RlX3ZlcmlmaWVyXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgaWYgKHN0YXRlLmV4dHJhVG9rZW5QYXJhbXMgJiYgdHlwZW9mKHN0YXRlLmV4dHJhVG9rZW5QYXJhbXMpID09PSAnb2JqZWN0Jykge1xyXG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKHJlcXVlc3QsIHN0YXRlLmV4dHJhVG9rZW5QYXJhbXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICByZXR1cm4gdGhpcy5fdG9rZW5DbGllbnQuZXhjaGFuZ2VDb2RlKHJlcXVlc3QpLnRoZW4odG9rZW5SZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBmb3IodmFyIGtleSBpbiB0b2tlblJlc3BvbnNlKSB7XHJcbiAgICAgICAgICAgICAgICByZXNwb25zZVtrZXldID0gdG9rZW5SZXNwb25zZVtrZXldO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAocmVzcG9uc2UuaWRfdG9rZW4pIHtcclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLl9wcm9jZXNzQ29kZTogdG9rZW4gcmVzcG9uc2Ugc3VjY2Vzc2Z1bCwgcHJvY2Vzc2luZyBpZF90b2tlblwiKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl92YWxpZGF0ZUlkVG9rZW5BdHRyaWJ1dGVzKHN0YXRlLCByZXNwb25zZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJSZXNwb25zZVZhbGlkYXRvci5fcHJvY2Vzc0NvZGU6IHRva2VuIHJlc3BvbnNlIHN1Y2Nlc3NmdWwsIHJldHVybmluZyByZXNwb25zZVwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIF92YWxpZGF0ZUlkVG9rZW5BdHRyaWJ1dGVzKHN0YXRlLCByZXNwb25zZSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9tZXRhZGF0YVNlcnZpY2UuZ2V0SXNzdWVyKCkudGhlbihpc3N1ZXIgPT4ge1xyXG5cclxuICAgICAgICAgICAgbGV0IGF1ZGllbmNlID0gc3RhdGUuY2xpZW50X2lkO1xyXG4gICAgICAgICAgICBsZXQgY2xvY2tTa2V3SW5TZWNvbmRzID0gdGhpcy5fc2V0dGluZ3MuY2xvY2tTa2V3O1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJSZXNwb25zZVZhbGlkYXRvci5fdmFsaWRhdGVJZFRva2VuQXR0cmlidXRlczogVmFsaWRhaW5nIEpXVCBhdHRyaWJ1dGVzOyB1c2luZyBjbG9jayBza2V3IChpbiBzZWNvbmRzKSBvZjogXCIsIGNsb2NrU2tld0luU2Vjb25kcyk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fam9zZVV0aWwudmFsaWRhdGVKd3RBdHRyaWJ1dGVzKHJlc3BvbnNlLmlkX3Rva2VuLCBpc3N1ZXIsIGF1ZGllbmNlLCBjbG9ja1NrZXdJblNlY29uZHMpLnRoZW4ocGF5bG9hZCA9PiB7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgaWYgKHN0YXRlLm5vbmNlICYmIHN0YXRlLm5vbmNlICE9PSBwYXlsb2FkLm5vbmNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlSWRUb2tlbkF0dHJpYnV0ZXM6IEludmFsaWQgbm9uY2UgaW4gaWRfdG9rZW5cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIkludmFsaWQgbm9uY2UgaW4gaWRfdG9rZW5cIikpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmICghcGF5bG9hZC5zdWIpIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5fdmFsaWRhdGVJZFRva2VuQXR0cmlidXRlczogTm8gc3ViIHByZXNlbnQgaW4gaWRfdG9rZW5cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIk5vIHN1YiBwcmVzZW50IGluIGlkX3Rva2VuXCIpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICByZXNwb25zZS5wcm9maWxlID0gcGF5bG9hZDtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgX3ZhbGlkYXRlSWRUb2tlbkFuZEFjY2Vzc1Rva2VuKHN0YXRlLCByZXNwb25zZSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl92YWxpZGF0ZUlkVG9rZW4oc3RhdGUsIHJlc3BvbnNlKS50aGVuKHJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbGlkYXRlQWNjZXNzVG9rZW4ocmVzcG9uc2UpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIF92YWxpZGF0ZUlkVG9rZW4oc3RhdGUsIHJlc3BvbnNlKSB7XHJcbiAgICAgICAgaWYgKCFzdGF0ZS5ub25jZSkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5fdmFsaWRhdGVJZFRva2VuOiBObyBub25jZSBvbiBzdGF0ZVwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIk5vIG5vbmNlIG9uIHN0YXRlXCIpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBqd3QgPSB0aGlzLl9qb3NlVXRpbC5wYXJzZUp3dChyZXNwb25zZS5pZF90b2tlbik7XHJcbiAgICAgICAgaWYgKCFqd3QgfHwgIWp3dC5oZWFkZXIgfHwgIWp3dC5wYXlsb2FkKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLl92YWxpZGF0ZUlkVG9rZW46IEZhaWxlZCB0byBwYXJzZSBpZF90b2tlblwiLCBqd3QpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiRmFpbGVkIHRvIHBhcnNlIGlkX3Rva2VuXCIpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChzdGF0ZS5ub25jZSAhPT0gand0LnBheWxvYWQubm9uY2UpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlSWRUb2tlbjogSW52YWxpZCBub25jZSBpbiBpZF90b2tlblwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIkludmFsaWQgbm9uY2UgaW4gaWRfdG9rZW5cIikpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGtpZCA9IGp3dC5oZWFkZXIua2lkO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5fbWV0YWRhdGFTZXJ2aWNlLmdldElzc3VlcigpLnRoZW4oaXNzdWVyID0+IHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlSWRUb2tlbjogUmVjZWl2ZWQgaXNzdWVyXCIpO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21ldGFkYXRhU2VydmljZS5nZXRTaWduaW5nS2V5cygpLnRoZW4oa2V5cyA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWtleXMpIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5fdmFsaWRhdGVJZFRva2VuOiBObyBzaWduaW5nIGtleXMgZnJvbSBtZXRhZGF0YVwiKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiTm8gc2lnbmluZyBrZXlzIGZyb20gbWV0YWRhdGFcIikpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLl92YWxpZGF0ZUlkVG9rZW46IFJlY2VpdmVkIHNpZ25pbmcga2V5c1wiKTtcclxuICAgICAgICAgICAgICAgIGxldCBrZXk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWtpZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGtleXMgPSB0aGlzLl9maWx0ZXJCeUFsZyhrZXlzLCBqd3QuaGVhZGVyLmFsZyk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChrZXlzLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlSWRUb2tlbjogTm8ga2lkIGZvdW5kIGluIGlkX3Rva2VuIGFuZCBtb3JlIHRoYW4gb25lIGtleSBmb3VuZCBpbiBtZXRhZGF0YVwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIk5vIGtpZCBmb3VuZCBpbiBpZF90b2tlbiBhbmQgbW9yZSB0aGFuIG9uZSBrZXkgZm91bmQgaW4gbWV0YWRhdGFcIikpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8ga2lkIGlzIG1hbmRhdG9yeSBvbmx5IHdoZW4gdGhlcmUgYXJlIG11bHRpcGxlIGtleXMgaW4gdGhlIHJlZmVyZW5jZWQgSldLIFNldCBkb2N1bWVudFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBzZWUgaHR0cDovL29wZW5pZC5uZXQvc3BlY3Mvb3BlbmlkLWNvbm5lY3QtY29yZS0xXzAuaHRtbCNTaWduaW5nXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleSA9IGtleXNbMF07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAga2V5ID0ga2V5cy5maWx0ZXIoa2V5ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGtleS5raWQgPT09IGtpZDtcclxuICAgICAgICAgICAgICAgICAgICB9KVswXTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoIWtleSkge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLl92YWxpZGF0ZUlkVG9rZW46IE5vIGtleSBtYXRjaGluZyBraWQgb3IgYWxnIGZvdW5kIGluIHNpZ25pbmcga2V5c1wiKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiTm8ga2V5IG1hdGNoaW5nIGtpZCBvciBhbGcgZm91bmQgaW4gc2lnbmluZyBrZXlzXCIpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgYXVkaWVuY2UgPSBzdGF0ZS5jbGllbnRfaWQ7XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IGNsb2NrU2tld0luU2Vjb25kcyA9IHRoaXMuX3NldHRpbmdzLmNsb2NrU2tldztcclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLl92YWxpZGF0ZUlkVG9rZW46IFZhbGlkYWluZyBKV1Q7IHVzaW5nIGNsb2NrIHNrZXcgKGluIHNlY29uZHMpIG9mOiBcIiwgY2xvY2tTa2V3SW5TZWNvbmRzKTtcclxuXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fam9zZVV0aWwudmFsaWRhdGVKd3QocmVzcG9uc2UuaWRfdG9rZW4sIGtleSwgaXNzdWVyLCBhdWRpZW5jZSwgY2xvY2tTa2V3SW5TZWNvbmRzKS50aGVuKCgpPT57XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlSWRUb2tlbjogSldUIHZhbGlkYXRpb24gc3VjY2Vzc2Z1bFwiKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFqd3QucGF5bG9hZC5zdWIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlSWRUb2tlbjogTm8gc3ViIHByZXNlbnQgaW4gaWRfdG9rZW5cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJObyBzdWIgcHJlc2VudCBpbiBpZF90b2tlblwiKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5wcm9maWxlID0gand0LnBheWxvYWQ7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBfZmlsdGVyQnlBbGcoa2V5cywgYWxnKXtcclxuICAgICAgICB2YXIga3R5ID0gbnVsbDtcclxuICAgICAgICBpZiAoYWxnLnN0YXJ0c1dpdGgoXCJSU1wiKSkge1xyXG4gICAgICAgICAgICBrdHkgPSBcIlJTQVwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChhbGcuc3RhcnRzV2l0aChcIlBTXCIpKSB7XHJcbiAgICAgICAgICAgIGt0eSA9IFwiUFNcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoYWxnLnN0YXJ0c1dpdGgoXCJFU1wiKSkge1xyXG4gICAgICAgICAgICBrdHkgPSBcIkVDXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJSZXNwb25zZVZhbGlkYXRvci5fZmlsdGVyQnlBbGc6IGFsZyBub3Qgc3VwcG9ydGVkOiBcIiwgYWxnKTtcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgTG9nLmRlYnVnKFwiUmVzcG9uc2VWYWxpZGF0b3IuX2ZpbHRlckJ5QWxnOiBMb29raW5nIGZvciBrZXlzIHRoYXQgbWF0Y2gga3R5OiBcIiwga3R5KTtcclxuXHJcbiAgICAgICAga2V5cyA9IGtleXMuZmlsdGVyKGtleSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBrZXkua3R5ID09PSBrdHk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLl9maWx0ZXJCeUFsZzogTnVtYmVyIG9mIGtleXMgdGhhdCBtYXRjaCBrdHk6IFwiLCBrdHksIGtleXMubGVuZ3RoKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGtleXM7XHJcbiAgICB9XHJcblxyXG4gICAgX3ZhbGlkYXRlQWNjZXNzVG9rZW4ocmVzcG9uc2UpIHtcclxuICAgICAgICBpZiAoIXJlc3BvbnNlLnByb2ZpbGUpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlQWNjZXNzVG9rZW46IE5vIHByb2ZpbGUgbG9hZGVkIGZyb20gaWRfdG9rZW5cIik7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJObyBwcm9maWxlIGxvYWRlZCBmcm9tIGlkX3Rva2VuXCIpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghcmVzcG9uc2UucHJvZmlsZS5hdF9oYXNoKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLl92YWxpZGF0ZUFjY2Vzc1Rva2VuOiBObyBhdF9oYXNoIGluIGlkX3Rva2VuXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiTm8gYXRfaGFzaCBpbiBpZF90b2tlblwiKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXJlc3BvbnNlLmlkX3Rva2VuKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLl92YWxpZGF0ZUFjY2Vzc1Rva2VuOiBObyBpZF90b2tlblwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIk5vIGlkX3Rva2VuXCIpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBqd3QgPSB0aGlzLl9qb3NlVXRpbC5wYXJzZUp3dChyZXNwb25zZS5pZF90b2tlbik7XHJcbiAgICAgICAgaWYgKCFqd3QgfHwgIWp3dC5oZWFkZXIpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlQWNjZXNzVG9rZW46IEZhaWxlZCB0byBwYXJzZSBpZF90b2tlblwiLCBqd3QpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiRmFpbGVkIHRvIHBhcnNlIGlkX3Rva2VuXCIpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBoYXNoQWxnID0gand0LmhlYWRlci5hbGc7XHJcbiAgICAgICAgaWYgKCFoYXNoQWxnIHx8IGhhc2hBbGcubGVuZ3RoICE9PSA1KSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlJlc3BvbnNlVmFsaWRhdG9yLl92YWxpZGF0ZUFjY2Vzc1Rva2VuOiBVbnN1cHBvcnRlZCBhbGc6XCIsIGhhc2hBbGcpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiVW5zdXBwb3J0ZWQgYWxnOiBcIiArIGhhc2hBbGcpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBoYXNoQml0cyA9IGhhc2hBbGcuc3Vic3RyKDIsIDMpO1xyXG4gICAgICAgIGlmICghaGFzaEJpdHMpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlQWNjZXNzVG9rZW46IFVuc3VwcG9ydGVkIGFsZzpcIiwgaGFzaEFsZywgaGFzaEJpdHMpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiVW5zdXBwb3J0ZWQgYWxnOiBcIiArIGhhc2hBbGcpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGhhc2hCaXRzID0gcGFyc2VJbnQoaGFzaEJpdHMpO1xyXG4gICAgICAgIGlmIChoYXNoQml0cyAhPT0gMjU2ICYmIGhhc2hCaXRzICE9PSAzODQgJiYgaGFzaEJpdHMgIT09IDUxMikge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5fdmFsaWRhdGVBY2Nlc3NUb2tlbjogVW5zdXBwb3J0ZWQgYWxnOlwiLCBoYXNoQWxnLCBoYXNoQml0cyk7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJVbnN1cHBvcnRlZCBhbGc6IFwiICsgaGFzaEFsZykpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHNoYSA9IFwic2hhXCIgKyBoYXNoQml0cztcclxuICAgICAgICB2YXIgaGFzaCA9IHRoaXMuX2pvc2VVdGlsLmhhc2hTdHJpbmcocmVzcG9uc2UuYWNjZXNzX3Rva2VuLCBzaGEpO1xyXG4gICAgICAgIGlmICghaGFzaCkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJSZXNwb25zZVZhbGlkYXRvci5fdmFsaWRhdGVBY2Nlc3NUb2tlbjogYWNjZXNzX3Rva2VuIGhhc2ggZmFpbGVkOlwiLCBzaGEpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiRmFpbGVkIHRvIHZhbGlkYXRlIGF0X2hhc2hcIikpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGxlZnQgPSBoYXNoLnN1YnN0cigwLCBoYXNoLmxlbmd0aCAvIDIpO1xyXG4gICAgICAgIHZhciBsZWZ0X2I2NHUgPSB0aGlzLl9qb3NlVXRpbC5oZXhUb0Jhc2U2NFVybChsZWZ0KTtcclxuICAgICAgICBpZiAobGVmdF9iNjR1ICE9PSByZXNwb25zZS5wcm9maWxlLmF0X2hhc2gpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiUmVzcG9uc2VWYWxpZGF0b3IuX3ZhbGlkYXRlQWNjZXNzVG9rZW46IEZhaWxlZCB0byB2YWxpZGF0ZSBhdF9oYXNoXCIsIGxlZnRfYjY0dSwgcmVzcG9uc2UucHJvZmlsZS5hdF9oYXNoKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIkZhaWxlZCB0byB2YWxpZGF0ZSBhdF9oYXNoXCIpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIExvZy5kZWJ1ZyhcIlJlc3BvbnNlVmFsaWRhdG9yLl92YWxpZGF0ZUFjY2Vzc1Rva2VuOiBzdWNjZXNzXCIpO1xyXG5cclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHJlc3BvbnNlKTtcclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcbmltcG9ydCB7IENoZWNrU2Vzc2lvbklGcmFtZSB9IGZyb20gJy4vQ2hlY2tTZXNzaW9uSUZyYW1lLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBTZXNzaW9uTW9uaXRvciB7XHJcblxyXG4gICAgY29uc3RydWN0b3IodXNlck1hbmFnZXIsIENoZWNrU2Vzc2lvbklGcmFtZUN0b3IgPSBDaGVja1Nlc3Npb25JRnJhbWUpIHtcclxuICAgICAgICBpZiAoIXVzZXJNYW5hZ2VyKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlNlc3Npb25Nb25pdG9yLmN0b3I6IE5vIHVzZXIgbWFuYWdlciBwYXNzZWQgdG8gU2Vzc2lvbk1vbml0b3JcIik7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInVzZXJNYW5hZ2VyXCIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fdXNlck1hbmFnZXIgPSB1c2VyTWFuYWdlcjtcclxuICAgICAgICB0aGlzLl9DaGVja1Nlc3Npb25JRnJhbWVDdG9yID0gQ2hlY2tTZXNzaW9uSUZyYW1lQ3RvcjtcclxuXHJcbiAgICAgICAgdGhpcy5fdXNlck1hbmFnZXIuZXZlbnRzLmFkZFVzZXJMb2FkZWQodGhpcy5fc3RhcnQuYmluZCh0aGlzKSk7XHJcbiAgICAgICAgdGhpcy5fdXNlck1hbmFnZXIuZXZlbnRzLmFkZFVzZXJVbmxvYWRlZCh0aGlzLl9zdG9wLmJpbmQodGhpcykpO1xyXG5cclxuICAgICAgICB0aGlzLl91c2VyTWFuYWdlci5nZXRVc2VyKCkudGhlbih1c2VyID0+IHtcclxuICAgICAgICAgICAgLy8gZG9pbmcgdGhpcyBtYW51YWxseSBoZXJlIHNpbmNlIGNhbGxpbmcgZ2V0VXNlciBcclxuICAgICAgICAgICAgLy8gZG9lc24ndCB0cmlnZ2VyIGxvYWQgZXZlbnQuXHJcbiAgICAgICAgICAgIGlmICh1c2VyKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGFydCh1c2VyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICh0aGlzLl9zZXR0aW5ncy5tb25pdG9yQW5vbnltb3VzU2Vzc2lvbikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fdXNlck1hbmFnZXIucXVlcnlTZXNzaW9uU3RhdHVzKCkudGhlbihzZXNzaW9uID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgdG1wVXNlciA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbl9zdGF0ZSA6IHNlc3Npb24uc2Vzc2lvbl9zdGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlc3Npb24uc3ViICYmIHNlc3Npb24uc2lkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRtcFVzZXIucHJvZmlsZSA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Yjogc2Vzc2lvbi5zdWIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWQ6IHNlc3Npb24uc2lkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3N0YXJ0KHRtcFVzZXIpO1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIC5jYXRjaChlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGNhdGNoIHRvIHN1cHByZXNzIGVycm9ycyBzaW5jZSB3ZSdyZSBpbiBhIGN0b3JcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJTZXNzaW9uTW9uaXRvciBjdG9yOiBlcnJvciBmcm9tIHF1ZXJ5U2Vzc2lvblN0YXR1czpcIiwgZXJyLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KS5jYXRjaChlcnIgPT4ge1xyXG4gICAgICAgICAgICAvLyBjYXRjaCB0byBzdXBwcmVzcyBlcnJvcnMgc2luY2Ugd2UncmUgaW4gYSBjdG9yXHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlNlc3Npb25Nb25pdG9yIGN0b3I6IGVycm9yIGZyb20gZ2V0VXNlcjpcIiwgZXJyLm1lc3NhZ2UpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBfc2V0dGluZ3MoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3VzZXJNYW5hZ2VyLnNldHRpbmdzO1xyXG4gICAgfVxyXG4gICAgZ2V0IF9tZXRhZGF0YVNlcnZpY2UoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3VzZXJNYW5hZ2VyLm1ldGFkYXRhU2VydmljZTtcclxuICAgIH1cclxuICAgIGdldCBfY2xpZW50X2lkKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zZXR0aW5ncy5jbGllbnRfaWQ7XHJcbiAgICB9XHJcbiAgICBnZXQgX2NoZWNrU2Vzc2lvbkludGVydmFsKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zZXR0aW5ncy5jaGVja1Nlc3Npb25JbnRlcnZhbDtcclxuICAgIH1cclxuICAgIGdldCBfc3RvcENoZWNrU2Vzc2lvbk9uRXJyb3IoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NldHRpbmdzLnN0b3BDaGVja1Nlc3Npb25PbkVycm9yO1xyXG4gICAgfVxyXG5cclxuICAgIF9zdGFydCh1c2VyKSB7XHJcbiAgICAgICAgbGV0IHNlc3Npb25fc3RhdGUgPSB1c2VyLnNlc3Npb25fc3RhdGU7XHJcblxyXG4gICAgICAgIGlmIChzZXNzaW9uX3N0YXRlKSB7XHJcbiAgICAgICAgICAgIGlmICh1c2VyLnByb2ZpbGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3N1YiA9IHVzZXIucHJvZmlsZS5zdWI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zaWQgPSB1c2VyLnByb2ZpbGUuc2lkO1xyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiU2Vzc2lvbk1vbml0b3IuX3N0YXJ0OiBzZXNzaW9uX3N0YXRlOlwiLCBzZXNzaW9uX3N0YXRlLCBcIiwgc3ViOlwiLCB0aGlzLl9zdWIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fc3ViID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fc2lkID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiU2Vzc2lvbk1vbml0b3IuX3N0YXJ0OiBzZXNzaW9uX3N0YXRlOlwiLCBzZXNzaW9uX3N0YXRlLCBcIiwgYW5vbnltb3VzIHVzZXJcIik7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICghdGhpcy5fY2hlY2tTZXNzaW9uSUZyYW1lKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9tZXRhZGF0YVNlcnZpY2UuZ2V0Q2hlY2tTZXNzaW9uSWZyYW1lKCkudGhlbih1cmwgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh1cmwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiU2Vzc2lvbk1vbml0b3IuX3N0YXJ0OiBJbml0aWFsaXppbmcgY2hlY2sgc2Vzc2lvbiBpZnJhbWVcIilcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjbGllbnRfaWQgPSB0aGlzLl9jbGllbnRfaWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpbnRlcnZhbCA9IHRoaXMuX2NoZWNrU2Vzc2lvbkludGVydmFsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgc3RvcE9uRXJyb3IgPSB0aGlzLl9zdG9wQ2hlY2tTZXNzaW9uT25FcnJvcjtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoZWNrU2Vzc2lvbklGcmFtZSA9IG5ldyB0aGlzLl9DaGVja1Nlc3Npb25JRnJhbWVDdG9yKHRoaXMuX2NhbGxiYWNrLmJpbmQodGhpcyksIGNsaWVudF9pZCwgdXJsLCBpbnRlcnZhbCwgc3RvcE9uRXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGVja1Nlc3Npb25JRnJhbWUubG9hZCgpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hlY2tTZXNzaW9uSUZyYW1lLnN0YXJ0KHNlc3Npb25fc3RhdGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIExvZy53YXJuKFwiU2Vzc2lvbk1vbml0b3IuX3N0YXJ0OiBObyBjaGVjayBzZXNzaW9uIGlmcmFtZSBmb3VuZCBpbiB0aGUgbWV0YWRhdGFcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goZXJyID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBjYXRjaCB0byBzdXBwcmVzcyBlcnJvcnMgc2luY2Ugd2UncmUgaW4gbm9uLXByb21pc2UgY2FsbGJhY2tcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJTZXNzaW9uTW9uaXRvci5fc3RhcnQ6IEVycm9yIGZyb20gZ2V0Q2hlY2tTZXNzaW9uSWZyYW1lOlwiLCBlcnIubWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2NoZWNrU2Vzc2lvbklGcmFtZS5zdGFydChzZXNzaW9uX3N0YXRlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBfc3RvcCgpIHtcclxuICAgICAgICB0aGlzLl9zdWIgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgdGhpcy5fc2lkID0gdW5kZWZpbmVkO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5fY2hlY2tTZXNzaW9uSUZyYW1lKSB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlNlc3Npb25Nb25pdG9yLl9zdG9wXCIpO1xyXG4gICAgICAgICAgICB0aGlzLl9jaGVja1Nlc3Npb25JRnJhbWUuc3RvcCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX3NldHRpbmdzLm1vbml0b3JBbm9ueW1vdXNTZXNzaW9uKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3VzZXJNYW5hZ2VyLnF1ZXJ5U2Vzc2lvblN0YXR1cygpLnRoZW4oc2Vzc2lvbiA9PiB7XHJcbiAgICAgICAgICAgICAgICBsZXQgdG1wVXNlciA9IHtcclxuICAgICAgICAgICAgICAgICAgICBzZXNzaW9uX3N0YXRlIDogc2Vzc2lvbi5zZXNzaW9uX3N0YXRlXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgaWYgKHNlc3Npb24uc3ViICYmIHNlc3Npb24uc2lkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdG1wVXNlci5wcm9maWxlID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWI6IHNlc3Npb24uc3ViLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzaWQ6IHNlc3Npb24uc2lkXHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXJ0KHRtcFVzZXIpO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuY2F0Y2goZXJyID0+IHtcclxuICAgICAgICAgICAgICAgIC8vIGNhdGNoIHRvIHN1cHByZXNzIGVycm9ycyBzaW5jZSB3ZSdyZSBpbiBhIGNhbGxiYWNrXHJcbiAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJTZXNzaW9uTW9uaXRvcjogZXJyb3IgZnJvbSBxdWVyeVNlc3Npb25TdGF0dXM6XCIsIGVyci5tZXNzYWdlKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIF9jYWxsYmFjaygpIHtcclxuICAgICAgICB0aGlzLl91c2VyTWFuYWdlci5xdWVyeVNlc3Npb25TdGF0dXMoKS50aGVuKHNlc3Npb24gPT4ge1xyXG4gICAgICAgICAgICB2YXIgcmFpc2VFdmVudCA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICBpZiAoc2Vzc2lvbikge1xyXG4gICAgICAgICAgICAgICAgaWYgKHNlc3Npb24uc3ViID09PSB0aGlzLl9zdWIpIHtcclxuICAgICAgICAgICAgICAgICAgICByYWlzZUV2ZW50ID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hlY2tTZXNzaW9uSUZyYW1lLnN0YXJ0KHNlc3Npb24uc2Vzc2lvbl9zdGF0ZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzZXNzaW9uLnNpZCA9PT0gdGhpcy5fc2lkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlNlc3Npb25Nb25pdG9yLl9jYWxsYmFjazogU2FtZSBzdWIgc3RpbGwgbG9nZ2VkIGluIGF0IE9QLCByZXN0YXJ0aW5nIGNoZWNrIHNlc3Npb24gaWZyYW1lOyBzZXNzaW9uX3N0YXRlOlwiLCBzZXNzaW9uLnNlc3Npb25fc3RhdGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiU2Vzc2lvbk1vbml0b3IuX2NhbGxiYWNrOiBTYW1lIHN1YiBzdGlsbCBsb2dnZWQgaW4gYXQgT1AsIHNlc3Npb24gc3RhdGUgaGFzIGNoYW5nZWQsIHJlc3RhcnRpbmcgY2hlY2sgc2Vzc2lvbiBpZnJhbWU7IHNlc3Npb25fc3RhdGU6XCIsIHNlc3Npb24uc2Vzc2lvbl9zdGF0ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3VzZXJNYW5hZ2VyLmV2ZW50cy5fcmFpc2VVc2VyU2Vzc2lvbkNoYW5nZWQoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJTZXNzaW9uTW9uaXRvci5fY2FsbGJhY2s6IERpZmZlcmVudCBzdWJqZWN0IHNpZ25lZCBpbnRvIE9QOlwiLCBzZXNzaW9uLnN1Yik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJTZXNzaW9uTW9uaXRvci5fY2FsbGJhY2s6IFN1YmplY3Qgbm8gbG9uZ2VyIHNpZ25lZCBpbnRvIE9QXCIpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAocmFpc2VFdmVudCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX3N1Yikge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlNlc3Npb25Nb25pdG9yLl9jYWxsYmFjazogU2Vzc2lvbk1vbml0b3IuX2NhbGxiYWNrOyByYWlzaW5nIHNpZ25lZCBvdXQgZXZlbnRcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdXNlck1hbmFnZXIuZXZlbnRzLl9yYWlzZVVzZXJTaWduZWRPdXQoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlNlc3Npb25Nb25pdG9yLl9jYWxsYmFjazogU2Vzc2lvbk1vbml0b3IuX2NhbGxiYWNrOyByYWlzaW5nIHNpZ25lZCBpbiBldmVudFwiKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl91c2VyTWFuYWdlci5ldmVudHMuX3JhaXNlVXNlclNpZ25lZEluKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KS5jYXRjaChlcnIgPT4ge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fc3ViKSB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJTZXNzaW9uTW9uaXRvci5fY2FsbGJhY2s6IEVycm9yIGNhbGxpbmcgcXVlcnlDdXJyZW50U2lnbmluU2Vzc2lvbjsgcmFpc2luZyBzaWduZWQgb3V0IGV2ZW50XCIsIGVyci5tZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3VzZXJNYW5hZ2VyLmV2ZW50cy5fcmFpc2VVc2VyU2lnbmVkT3V0KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcbmltcG9ydCB7IFVybFV0aWxpdHkgfSBmcm9tICcuL1VybFV0aWxpdHkuanMnO1xyXG5pbXBvcnQgeyBTaWduaW5TdGF0ZSB9IGZyb20gJy4vU2lnbmluU3RhdGUuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFNpZ25pblJlcXVlc3Qge1xyXG4gICAgY29uc3RydWN0b3Ioe1xyXG4gICAgICAgIC8vIG1hbmRhdG9yeVxyXG4gICAgICAgIHVybCwgY2xpZW50X2lkLCByZWRpcmVjdF91cmksIHJlc3BvbnNlX3R5cGUsIHNjb3BlLCBhdXRob3JpdHksXHJcbiAgICAgICAgLy8gb3B0aW9uYWxcclxuICAgICAgICBkYXRhLCBwcm9tcHQsIGRpc3BsYXksIG1heF9hZ2UsIHVpX2xvY2FsZXMsIGlkX3Rva2VuX2hpbnQsIGxvZ2luX2hpbnQsIGFjcl92YWx1ZXMsIHJlc291cmNlLCByZXNwb25zZV9tb2RlLFxyXG4gICAgICAgIHJlcXVlc3QsIHJlcXVlc3RfdXJpLCBleHRyYVF1ZXJ5UGFyYW1zLCByZXF1ZXN0X3R5cGUsIGNsaWVudF9zZWNyZXQsIGV4dHJhVG9rZW5QYXJhbXMsIHNraXBVc2VySW5mb1xyXG4gICAgfSkge1xyXG4gICAgICAgIGlmICghdXJsKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlNpZ25pblJlcXVlc3QuY3RvcjogTm8gdXJsIHBhc3NlZFwiKTtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidXJsXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWNsaWVudF9pZCkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJTaWduaW5SZXF1ZXN0LmN0b3I6IE5vIGNsaWVudF9pZCBwYXNzZWRcIik7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImNsaWVudF9pZFwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFyZWRpcmVjdF91cmkpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiU2lnbmluUmVxdWVzdC5jdG9yOiBObyByZWRpcmVjdF91cmkgcGFzc2VkXCIpO1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJyZWRpcmVjdF91cmlcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghcmVzcG9uc2VfdHlwZSkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJTaWduaW5SZXF1ZXN0LmN0b3I6IE5vIHJlc3BvbnNlX3R5cGUgcGFzc2VkXCIpO1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJyZXNwb25zZV90eXBlXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXNjb3BlKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlNpZ25pblJlcXVlc3QuY3RvcjogTm8gc2NvcGUgcGFzc2VkXCIpO1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJzY29wZVwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFhdXRob3JpdHkpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiU2lnbmluUmVxdWVzdC5jdG9yOiBObyBhdXRob3JpdHkgcGFzc2VkXCIpO1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJhdXRob3JpdHlcIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgb2lkYyA9IFNpZ25pblJlcXVlc3QuaXNPaWRjKHJlc3BvbnNlX3R5cGUpO1xyXG4gICAgICAgIGxldCBjb2RlID0gU2lnbmluUmVxdWVzdC5pc0NvZGUocmVzcG9uc2VfdHlwZSk7XHJcblxyXG4gICAgICAgIGlmICghcmVzcG9uc2VfbW9kZSkge1xyXG4gICAgICAgICAgICByZXNwb25zZV9tb2RlID0gU2lnbmluUmVxdWVzdC5pc0NvZGUocmVzcG9uc2VfdHlwZSkgPyBcInF1ZXJ5XCIgOiBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IG5ldyBTaWduaW5TdGF0ZSh7IG5vbmNlOiBvaWRjLCBcclxuICAgICAgICAgICAgZGF0YSwgY2xpZW50X2lkLCBhdXRob3JpdHksIHJlZGlyZWN0X3VyaSwgXHJcbiAgICAgICAgICAgIGNvZGVfdmVyaWZpZXI6IGNvZGUsIFxyXG4gICAgICAgICAgICByZXF1ZXN0X3R5cGUsIHJlc3BvbnNlX21vZGUsXHJcbiAgICAgICAgICAgIGNsaWVudF9zZWNyZXQsIHNjb3BlLCBleHRyYVRva2VuUGFyYW1zLCBza2lwVXNlckluZm8gfSk7XHJcblxyXG4gICAgICAgIHVybCA9IFVybFV0aWxpdHkuYWRkUXVlcnlQYXJhbSh1cmwsIFwiY2xpZW50X2lkXCIsIGNsaWVudF9pZCk7XHJcbiAgICAgICAgdXJsID0gVXJsVXRpbGl0eS5hZGRRdWVyeVBhcmFtKHVybCwgXCJyZWRpcmVjdF91cmlcIiwgcmVkaXJlY3RfdXJpKTtcclxuICAgICAgICB1cmwgPSBVcmxVdGlsaXR5LmFkZFF1ZXJ5UGFyYW0odXJsLCBcInJlc3BvbnNlX3R5cGVcIiwgcmVzcG9uc2VfdHlwZSk7XHJcbiAgICAgICAgdXJsID0gVXJsVXRpbGl0eS5hZGRRdWVyeVBhcmFtKHVybCwgXCJzY29wZVwiLCBzY29wZSk7XHJcblxyXG4gICAgICAgIHVybCA9IFVybFV0aWxpdHkuYWRkUXVlcnlQYXJhbSh1cmwsIFwic3RhdGVcIiwgdGhpcy5zdGF0ZS5pZCk7XHJcbiAgICAgICAgaWYgKG9pZGMpIHtcclxuICAgICAgICAgICAgdXJsID0gVXJsVXRpbGl0eS5hZGRRdWVyeVBhcmFtKHVybCwgXCJub25jZVwiLCB0aGlzLnN0YXRlLm5vbmNlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNvZGUpIHtcclxuICAgICAgICAgICAgdXJsID0gVXJsVXRpbGl0eS5hZGRRdWVyeVBhcmFtKHVybCwgXCJjb2RlX2NoYWxsZW5nZVwiLCB0aGlzLnN0YXRlLmNvZGVfY2hhbGxlbmdlKTtcclxuICAgICAgICAgICAgdXJsID0gVXJsVXRpbGl0eS5hZGRRdWVyeVBhcmFtKHVybCwgXCJjb2RlX2NoYWxsZW5nZV9tZXRob2RcIiwgXCJTMjU2XCIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIG9wdGlvbmFsID0geyBwcm9tcHQsIGRpc3BsYXksIG1heF9hZ2UsIHVpX2xvY2FsZXMsIGlkX3Rva2VuX2hpbnQsIGxvZ2luX2hpbnQsIGFjcl92YWx1ZXMsIHJlc291cmNlLCByZXF1ZXN0LCByZXF1ZXN0X3VyaSwgcmVzcG9uc2VfbW9kZSB9O1xyXG4gICAgICAgIGZvcihsZXQga2V5IGluIG9wdGlvbmFsKXtcclxuICAgICAgICAgICAgaWYgKG9wdGlvbmFsW2tleV0pIHtcclxuICAgICAgICAgICAgICAgIHVybCA9IFVybFV0aWxpdHkuYWRkUXVlcnlQYXJhbSh1cmwsIGtleSwgb3B0aW9uYWxba2V5XSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvcihsZXQga2V5IGluIGV4dHJhUXVlcnlQYXJhbXMpe1xyXG4gICAgICAgICAgICB1cmwgPSBVcmxVdGlsaXR5LmFkZFF1ZXJ5UGFyYW0odXJsLCBrZXksIGV4dHJhUXVlcnlQYXJhbXNba2V5XSlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXJsID0gdXJsO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBpc09pZGMocmVzcG9uc2VfdHlwZSkge1xyXG4gICAgICAgIHZhciByZXN1bHQgPSByZXNwb25zZV90eXBlLnNwbGl0KC9cXHMrL2cpLmZpbHRlcihmdW5jdGlvbihpdGVtKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBpdGVtID09PSBcImlkX3Rva2VuXCI7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuICEhKHJlc3VsdFswXSk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGlzT0F1dGgocmVzcG9uc2VfdHlwZSkge1xyXG4gICAgICAgIHZhciByZXN1bHQgPSByZXNwb25zZV90eXBlLnNwbGl0KC9cXHMrL2cpLmZpbHRlcihmdW5jdGlvbihpdGVtKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBpdGVtID09PSBcInRva2VuXCI7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuICEhKHJlc3VsdFswXSk7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHN0YXRpYyBpc0NvZGUocmVzcG9uc2VfdHlwZSkge1xyXG4gICAgICAgIHZhciByZXN1bHQgPSByZXNwb25zZV90eXBlLnNwbGl0KC9cXHMrL2cpLmZpbHRlcihmdW5jdGlvbihpdGVtKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBpdGVtID09PSBcImNvZGVcIjtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gISEocmVzdWx0WzBdKTtcclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBVcmxVdGlsaXR5IH0gZnJvbSAnLi9VcmxVdGlsaXR5LmpzJztcclxuXHJcbmNvbnN0IE9pZGNTY29wZSA9IFwib3BlbmlkXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgU2lnbmluUmVzcG9uc2Uge1xyXG4gICAgY29uc3RydWN0b3IodXJsLCBkZWxpbWl0ZXIgPSBcIiNcIikge1xyXG5cclxuICAgICAgICB2YXIgdmFsdWVzID0gVXJsVXRpbGl0eS5wYXJzZVVybEZyYWdtZW50KHVybCwgZGVsaW1pdGVyKTtcclxuXHJcbiAgICAgICAgdGhpcy5lcnJvciA9IHZhbHVlcy5lcnJvcjtcclxuICAgICAgICB0aGlzLmVycm9yX2Rlc2NyaXB0aW9uID0gdmFsdWVzLmVycm9yX2Rlc2NyaXB0aW9uO1xyXG4gICAgICAgIHRoaXMuZXJyb3JfdXJpID0gdmFsdWVzLmVycm9yX3VyaTtcclxuXHJcbiAgICAgICAgdGhpcy5jb2RlID0gdmFsdWVzLmNvZGU7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHZhbHVlcy5zdGF0ZTtcclxuICAgICAgICB0aGlzLmlkX3Rva2VuID0gdmFsdWVzLmlkX3Rva2VuO1xyXG4gICAgICAgIHRoaXMuc2Vzc2lvbl9zdGF0ZSA9IHZhbHVlcy5zZXNzaW9uX3N0YXRlO1xyXG4gICAgICAgIHRoaXMuYWNjZXNzX3Rva2VuID0gdmFsdWVzLmFjY2Vzc190b2tlbjtcclxuICAgICAgICB0aGlzLnRva2VuX3R5cGUgPSB2YWx1ZXMudG9rZW5fdHlwZTtcclxuICAgICAgICB0aGlzLnNjb3BlID0gdmFsdWVzLnNjb3BlO1xyXG4gICAgICAgIHRoaXMucHJvZmlsZSA9IHVuZGVmaW5lZDsgLy8gd2lsbCBiZSBzZXQgZnJvbSBSZXNwb25zZVZhbGlkYXRvclxyXG5cclxuICAgICAgICB0aGlzLmV4cGlyZXNfaW4gPSB2YWx1ZXMuZXhwaXJlc19pbjtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgZXhwaXJlc19pbigpIHtcclxuICAgICAgICBpZiAodGhpcy5leHBpcmVzX2F0KSB7XHJcbiAgICAgICAgICAgIGxldCBub3cgPSBwYXJzZUludChEYXRlLm5vdygpIC8gMTAwMCk7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmV4cGlyZXNfYXQgLSBub3c7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICB9XHJcbiAgICBzZXQgZXhwaXJlc19pbih2YWx1ZSl7XHJcbiAgICAgICAgbGV0IGV4cGlyZXNfaW4gPSBwYXJzZUludCh2YWx1ZSk7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBleHBpcmVzX2luID09PSAnbnVtYmVyJyAmJiBleHBpcmVzX2luID4gMCkge1xyXG4gICAgICAgICAgICBsZXQgbm93ID0gcGFyc2VJbnQoRGF0ZS5ub3coKSAvIDEwMDApO1xyXG4gICAgICAgICAgICB0aGlzLmV4cGlyZXNfYXQgPSBub3cgKyBleHBpcmVzX2luO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXQgZXhwaXJlZCgpIHtcclxuICAgICAgICBsZXQgZXhwaXJlc19pbiA9IHRoaXMuZXhwaXJlc19pbjtcclxuICAgICAgICBpZiAoZXhwaXJlc19pbiAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBleHBpcmVzX2luIDw9IDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHNjb3BlcygpIHtcclxuICAgICAgICByZXR1cm4gKHRoaXMuc2NvcGUgfHwgXCJcIikuc3BsaXQoXCIgXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBpc09wZW5JZENvbm5lY3QoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2NvcGVzLmluZGV4T2YoT2lkY1Njb3BlKSA+PSAwIHx8ICEhdGhpcy5pZF90b2tlbjtcclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcbmltcG9ydCB7IFN0YXRlIH0gZnJvbSAnLi9TdGF0ZS5qcyc7XHJcbmltcG9ydCB7IEpvc2VVdGlsIH0gZnJvbSAnLi9Kb3NlVXRpbC5qcyc7XHJcbmltcG9ydCByYW5kb20gZnJvbSAnLi9yYW5kb20uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFNpZ25pblN0YXRlIGV4dGVuZHMgU3RhdGUge1xyXG4gICAgY29uc3RydWN0b3Ioe25vbmNlLCBhdXRob3JpdHksIGNsaWVudF9pZCwgcmVkaXJlY3RfdXJpLCBjb2RlX3ZlcmlmaWVyLCByZXNwb25zZV9tb2RlLCBjbGllbnRfc2VjcmV0LCBzY29wZSwgZXh0cmFUb2tlblBhcmFtcywgc2tpcFVzZXJJbmZvfSA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIoYXJndW1lbnRzWzBdKTtcclxuXHJcbiAgICAgICAgaWYgKG5vbmNlID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX25vbmNlID0gcmFuZG9tKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKG5vbmNlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX25vbmNlID0gbm9uY2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoY29kZV92ZXJpZmllciA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICAvLyByYW5kb20oKSBwcm9kdWNlcyAzMiBsZW5ndGhcclxuICAgICAgICAgICAgdGhpcy5fY29kZV92ZXJpZmllciA9IHJhbmRvbSgpICsgcmFuZG9tKCkgKyByYW5kb20oKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoY29kZV92ZXJpZmllcikge1xyXG4gICAgICAgICAgICB0aGlzLl9jb2RlX3ZlcmlmaWVyID0gY29kZV92ZXJpZmllcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKHRoaXMuY29kZV92ZXJpZmllcikge1xyXG4gICAgICAgICAgICBsZXQgaGFzaCA9IEpvc2VVdGlsLmhhc2hTdHJpbmcodGhpcy5jb2RlX3ZlcmlmaWVyLCBcIlNIQTI1NlwiKTtcclxuICAgICAgICAgICAgdGhpcy5fY29kZV9jaGFsbGVuZ2UgPSBKb3NlVXRpbC5oZXhUb0Jhc2U2NFVybChoYXNoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3JlZGlyZWN0X3VyaSA9IHJlZGlyZWN0X3VyaTtcclxuICAgICAgICB0aGlzLl9hdXRob3JpdHkgPSBhdXRob3JpdHk7XHJcbiAgICAgICAgdGhpcy5fY2xpZW50X2lkID0gY2xpZW50X2lkO1xyXG4gICAgICAgIHRoaXMuX3Jlc3BvbnNlX21vZGUgPSByZXNwb25zZV9tb2RlO1xyXG4gICAgICAgIHRoaXMuX2NsaWVudF9zZWNyZXQgPSBjbGllbnRfc2VjcmV0O1xyXG4gICAgICAgIHRoaXMuX3Njb3BlID0gc2NvcGU7XHJcbiAgICAgICAgdGhpcy5fZXh0cmFUb2tlblBhcmFtcyA9IGV4dHJhVG9rZW5QYXJhbXM7XHJcbiAgICAgICAgdGhpcy5fc2tpcFVzZXJJbmZvID0gc2tpcFVzZXJJbmZvO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBub25jZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fbm9uY2U7XHJcbiAgICB9XHJcbiAgICBnZXQgYXV0aG9yaXR5KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9hdXRob3JpdHk7XHJcbiAgICB9XHJcbiAgICBnZXQgY2xpZW50X2lkKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9jbGllbnRfaWQ7XHJcbiAgICB9XHJcbiAgICBnZXQgcmVkaXJlY3RfdXJpKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9yZWRpcmVjdF91cmk7XHJcbiAgICB9XHJcbiAgICBnZXQgY29kZV92ZXJpZmllcigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fY29kZV92ZXJpZmllcjtcclxuICAgIH1cclxuICAgIGdldCBjb2RlX2NoYWxsZW5nZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fY29kZV9jaGFsbGVuZ2U7XHJcbiAgICB9XHJcbiAgICBnZXQgcmVzcG9uc2VfbW9kZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcmVzcG9uc2VfbW9kZTtcclxuICAgIH1cclxuICAgIGdldCBjbGllbnRfc2VjcmV0KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9jbGllbnRfc2VjcmV0O1xyXG4gICAgfVxyXG4gICAgZ2V0IHNjb3BlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zY29wZTtcclxuICAgIH1cclxuICAgIGdldCBleHRyYVRva2VuUGFyYW1zKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9leHRyYVRva2VuUGFyYW1zO1xyXG4gICAgfVxyXG4gICAgZ2V0IHNraXBVc2VySW5mbygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc2tpcFVzZXJJbmZvO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICB0b1N0b3JhZ2VTdHJpbmcoKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiU2lnbmluU3RhdGUudG9TdG9yYWdlU3RyaW5nXCIpO1xyXG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh7XHJcbiAgICAgICAgICAgIGlkOiB0aGlzLmlkLFxyXG4gICAgICAgICAgICBkYXRhOiB0aGlzLmRhdGEsXHJcbiAgICAgICAgICAgIGNyZWF0ZWQ6IHRoaXMuY3JlYXRlZCxcclxuICAgICAgICAgICAgcmVxdWVzdF90eXBlOiB0aGlzLnJlcXVlc3RfdHlwZSxcclxuICAgICAgICAgICAgbm9uY2U6IHRoaXMubm9uY2UsXHJcbiAgICAgICAgICAgIGNvZGVfdmVyaWZpZXI6IHRoaXMuY29kZV92ZXJpZmllcixcclxuICAgICAgICAgICAgcmVkaXJlY3RfdXJpOiB0aGlzLnJlZGlyZWN0X3VyaSxcclxuICAgICAgICAgICAgYXV0aG9yaXR5OiB0aGlzLmF1dGhvcml0eSxcclxuICAgICAgICAgICAgY2xpZW50X2lkOiB0aGlzLmNsaWVudF9pZCxcclxuICAgICAgICAgICAgcmVzcG9uc2VfbW9kZTogdGhpcy5yZXNwb25zZV9tb2RlLFxyXG4gICAgICAgICAgICBjbGllbnRfc2VjcmV0OiB0aGlzLmNsaWVudF9zZWNyZXQsXHJcbiAgICAgICAgICAgIHNjb3BlOiB0aGlzLnNjb3BlLFxyXG4gICAgICAgICAgICBleHRyYVRva2VuUGFyYW1zIDogdGhpcy5leHRyYVRva2VuUGFyYW1zLFxyXG4gICAgICAgICAgICBza2lwVXNlckluZm86IHRoaXMuc2tpcFVzZXJJbmZvXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGZyb21TdG9yYWdlU3RyaW5nKHN0b3JhZ2VTdHJpbmcpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJTaWduaW5TdGF0ZS5mcm9tU3RvcmFnZVN0cmluZ1wiKTtcclxuICAgICAgICB2YXIgZGF0YSA9IEpTT04ucGFyc2Uoc3RvcmFnZVN0cmluZyk7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBTaWduaW5TdGF0ZShkYXRhKTtcclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcbmltcG9ydCB7IFVybFV0aWxpdHkgfSBmcm9tICcuL1VybFV0aWxpdHkuanMnO1xyXG5pbXBvcnQgeyBTdGF0ZSB9IGZyb20gJy4vU3RhdGUuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFNpZ25vdXRSZXF1ZXN0IHtcclxuICAgIGNvbnN0cnVjdG9yKHt1cmwsIGlkX3Rva2VuX2hpbnQsIHBvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaSwgZGF0YSwgZXh0cmFRdWVyeVBhcmFtcywgcmVxdWVzdF90eXBlfSkge1xyXG4gICAgICAgIGlmICghdXJsKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlNpZ25vdXRSZXF1ZXN0LmN0b3I6IE5vIHVybCBwYXNzZWRcIik7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInVybFwiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChpZF90b2tlbl9oaW50KSB7XHJcbiAgICAgICAgICAgIHVybCA9IFVybFV0aWxpdHkuYWRkUXVlcnlQYXJhbSh1cmwsIFwiaWRfdG9rZW5faGludFwiLCBpZF90b2tlbl9oaW50KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChwb3N0X2xvZ291dF9yZWRpcmVjdF91cmkpIHtcclxuICAgICAgICAgICAgdXJsID0gVXJsVXRpbGl0eS5hZGRRdWVyeVBhcmFtKHVybCwgXCJwb3N0X2xvZ291dF9yZWRpcmVjdF91cmlcIiwgcG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gbmV3IFN0YXRlKHsgZGF0YSwgcmVxdWVzdF90eXBlIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgIHVybCA9IFVybFV0aWxpdHkuYWRkUXVlcnlQYXJhbSh1cmwsIFwic3RhdGVcIiwgdGhpcy5zdGF0ZS5pZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvcihsZXQga2V5IGluIGV4dHJhUXVlcnlQYXJhbXMpe1xyXG4gICAgICAgICAgICB1cmwgPSBVcmxVdGlsaXR5LmFkZFF1ZXJ5UGFyYW0odXJsLCBrZXksIGV4dHJhUXVlcnlQYXJhbXNba2V5XSlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXJsID0gdXJsO1xyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IFVybFV0aWxpdHkgfSBmcm9tICcuL1VybFV0aWxpdHkuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFNpZ25vdXRSZXNwb25zZSB7XHJcbiAgICBjb25zdHJ1Y3Rvcih1cmwpIHtcclxuXHJcbiAgICAgICAgdmFyIHZhbHVlcyA9IFVybFV0aWxpdHkucGFyc2VVcmxGcmFnbWVudCh1cmwsIFwiP1wiKTtcclxuXHJcbiAgICAgICAgdGhpcy5lcnJvciA9IHZhbHVlcy5lcnJvcjtcclxuICAgICAgICB0aGlzLmVycm9yX2Rlc2NyaXB0aW9uID0gdmFsdWVzLmVycm9yX2Rlc2NyaXB0aW9uO1xyXG4gICAgICAgIHRoaXMuZXJyb3JfdXJpID0gdmFsdWVzLmVycm9yX3VyaTtcclxuXHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHZhbHVlcy5zdGF0ZTtcclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgU2lsZW50UmVuZXdTZXJ2aWNlIHtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcih1c2VyTWFuYWdlcikge1xyXG4gICAgICAgIHRoaXMuX3VzZXJNYW5hZ2VyID0gdXNlck1hbmFnZXI7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhcnQoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9jYWxsYmFjaykge1xyXG4gICAgICAgICAgICB0aGlzLl9jYWxsYmFjayA9IHRoaXMuX3Rva2VuRXhwaXJpbmcuYmluZCh0aGlzKTtcclxuICAgICAgICAgICAgdGhpcy5fdXNlck1hbmFnZXIuZXZlbnRzLmFkZEFjY2Vzc1Rva2VuRXhwaXJpbmcodGhpcy5fY2FsbGJhY2spO1xyXG5cclxuICAgICAgICAgICAgLy8gdGhpcyB3aWxsIHRyaWdnZXIgbG9hZGluZyBvZiB0aGUgdXNlciBzbyB0aGUgZXhwaXJpbmcgZXZlbnRzIGNhbiBiZSBpbml0aWFsaXplZFxyXG4gICAgICAgICAgICB0aGlzLl91c2VyTWFuYWdlci5nZXRVc2VyKCkudGhlbih1c2VyPT57XHJcbiAgICAgICAgICAgICAgICAvLyBkZWxpYmVyYXRlIG5vcFxyXG4gICAgICAgICAgICB9KS5jYXRjaChlcnI9PntcclxuICAgICAgICAgICAgICAgIC8vIGNhdGNoIHRvIHN1cHByZXNzIGVycm9ycyBzaW5jZSB3ZSdyZSBpbiBhIGN0b3JcclxuICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIlNpbGVudFJlbmV3U2VydmljZS5zdGFydDogRXJyb3IgZnJvbSBnZXRVc2VyOlwiLCBlcnIubWVzc2FnZSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzdG9wKCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9jYWxsYmFjaykge1xyXG4gICAgICAgICAgICB0aGlzLl91c2VyTWFuYWdlci5ldmVudHMucmVtb3ZlQWNjZXNzVG9rZW5FeHBpcmluZyh0aGlzLl9jYWxsYmFjayk7XHJcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9jYWxsYmFjaztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgX3Rva2VuRXhwaXJpbmcoKSB7XHJcbiAgICAgICAgdGhpcy5fdXNlck1hbmFnZXIuc2lnbmluU2lsZW50KCkudGhlbih1c2VyID0+IHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiU2lsZW50UmVuZXdTZXJ2aWNlLl90b2tlbkV4cGlyaW5nOiBTaWxlbnQgdG9rZW4gcmVuZXdhbCBzdWNjZXNzZnVsXCIpO1xyXG4gICAgICAgIH0sIGVyciA9PiB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlNpbGVudFJlbmV3U2VydmljZS5fdG9rZW5FeHBpcmluZzogRXJyb3IgZnJvbSBzaWduaW5TaWxlbnQ6XCIsIGVyci5tZXNzYWdlKTtcclxuICAgICAgICAgICAgdGhpcy5fdXNlck1hbmFnZXIuZXZlbnRzLl9yYWlzZVNpbGVudFJlbmV3RXJyb3IoZXJyKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcbmltcG9ydCByYW5kb20gZnJvbSAnLi9yYW5kb20uanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFN0YXRlIHtcclxuICAgIGNvbnN0cnVjdG9yKHtpZCwgZGF0YSwgY3JlYXRlZCwgcmVxdWVzdF90eXBlfSA9IHt9KSB7XHJcbiAgICAgICAgdGhpcy5faWQgPSBpZCB8fCByYW5kb20oKTtcclxuICAgICAgICB0aGlzLl9kYXRhID0gZGF0YTtcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiBjcmVhdGVkID09PSAnbnVtYmVyJyAmJiBjcmVhdGVkID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLl9jcmVhdGVkID0gY3JlYXRlZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2NyZWF0ZWQgPSBwYXJzZUludChEYXRlLm5vdygpIC8gMTAwMCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX3JlcXVlc3RfdHlwZSA9ICByZXF1ZXN0X3R5cGU7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGlkKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9pZDtcclxuICAgIH1cclxuICAgIGdldCBkYXRhKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRhO1xyXG4gICAgfVxyXG4gICAgZ2V0IGNyZWF0ZWQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NyZWF0ZWQ7XHJcbiAgICB9XHJcbiAgICBnZXQgcmVxdWVzdF90eXBlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9yZXF1ZXN0X3R5cGU7XHJcbiAgICB9XHJcblxyXG4gICAgdG9TdG9yYWdlU3RyaW5nKCkge1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIlN0YXRlLnRvU3RvcmFnZVN0cmluZ1wiKTtcclxuICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoe1xyXG4gICAgICAgICAgICBpZDogdGhpcy5pZCxcclxuICAgICAgICAgICAgZGF0YTogdGhpcy5kYXRhLFxyXG4gICAgICAgICAgICBjcmVhdGVkOiB0aGlzLmNyZWF0ZWQsXHJcbiAgICAgICAgICAgIHJlcXVlc3RfdHlwZTogdGhpcy5yZXF1ZXN0X3R5cGVcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZnJvbVN0b3JhZ2VTdHJpbmcoc3RvcmFnZVN0cmluZykge1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIlN0YXRlLmZyb21TdG9yYWdlU3RyaW5nXCIpO1xyXG4gICAgICAgIHJldHVybiBuZXcgU3RhdGUoSlNPTi5wYXJzZShzdG9yYWdlU3RyaW5nKSk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGNsZWFyU3RhbGVTdGF0ZShzdG9yYWdlLCBhZ2UpIHtcclxuXHJcbiAgICAgICAgdmFyIGN1dG9mZiA9IERhdGUubm93KCkgLyAxMDAwIC0gYWdlO1xyXG5cclxuICAgICAgICByZXR1cm4gc3RvcmFnZS5nZXRBbGxLZXlzKCkudGhlbihrZXlzID0+IHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiU3RhdGUuY2xlYXJTdGFsZVN0YXRlOiBnb3Qga2V5c1wiLCBrZXlzKTtcclxuXHJcbiAgICAgICAgICAgIHZhciBwcm9taXNlcyA9IFtdO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGxldCBrZXkgPSBrZXlzW2ldO1xyXG4gICAgICAgICAgICAgICAgdmFyIHAgPSBzdG9yYWdlLmdldChrZXkpLnRoZW4oaXRlbSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJlbW92ZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXRlID0gU3RhdGUuZnJvbVN0b3JhZ2VTdHJpbmcoaXRlbSlcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJTdGF0ZS5jbGVhclN0YWxlU3RhdGU6IGdvdCBpdGVtIGZyb20ga2V5OiBcIiwga2V5LCBzdGF0ZS5jcmVhdGVkKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGUuY3JlYXRlZCA8PSBjdXRvZmYpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJTdGF0ZS5jbGVhclN0YWxlU3RhdGU6IEVycm9yIHBhcnNpbmcgc3RhdGUgZm9yIGtleVwiLCBrZXksIGUubWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJTdGF0ZS5jbGVhclN0YWxlU3RhdGU6IG5vIGl0ZW0gaW4gc3RvcmFnZSBmb3Iga2V5OiBcIiwga2V5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZW1vdmUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiU3RhdGUuY2xlYXJTdGFsZVN0YXRlOiByZW1vdmVkIGl0ZW0gZm9yIGtleTogXCIsIGtleSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdG9yYWdlLnJlbW92ZShrZXkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgIHByb21pc2VzLnB1c2gocCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlN0YXRlLmNsZWFyU3RhbGVTdGF0ZTogd2FpdGluZyBvbiBwcm9taXNlIGNvdW50OlwiLCBwcm9taXNlcy5sZW5ndGgpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuaW1wb3J0IHsgR2xvYmFsIH0gZnJvbSAnLi9HbG9iYWwuanMnO1xyXG5pbXBvcnQgeyBFdmVudCB9IGZyb20gJy4vRXZlbnQuanMnO1xyXG5cclxuY29uc3QgVGltZXJEdXJhdGlvbiA9IDU7IC8vIHNlY29uZHNcclxuXHJcbmV4cG9ydCBjbGFzcyBUaW1lciBleHRlbmRzIEV2ZW50IHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihuYW1lLCB0aW1lciA9IEdsb2JhbC50aW1lciwgbm93RnVuYyA9IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHN1cGVyKG5hbWUpO1xyXG4gICAgICAgIHRoaXMuX3RpbWVyID0gdGltZXI7XHJcblxyXG4gICAgICAgIGlmIChub3dGdW5jKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX25vd0Z1bmMgPSBub3dGdW5jO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5fbm93RnVuYyA9ICgpID0+IERhdGUubm93KCkgLyAxMDAwO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXQgbm93KCkge1xyXG4gICAgICAgIHJldHVybiBwYXJzZUludCh0aGlzLl9ub3dGdW5jKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIGluaXQoZHVyYXRpb24pIHtcclxuICAgICAgICBpZiAoZHVyYXRpb24gPD0gMCkge1xyXG4gICAgICAgICAgICBkdXJhdGlvbiA9IDE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGR1cmF0aW9uID0gcGFyc2VJbnQoZHVyYXRpb24pO1xyXG5cclxuICAgICAgICB2YXIgZXhwaXJhdGlvbiA9IHRoaXMubm93ICsgZHVyYXRpb247XHJcbiAgICAgICAgaWYgKHRoaXMuZXhwaXJhdGlvbiA9PT0gZXhwaXJhdGlvbiAmJiB0aGlzLl90aW1lckhhbmRsZSkge1xyXG4gICAgICAgICAgICAvLyBubyBuZWVkIHRvIHJlaW5pdGlhbGl6ZSB0byBzYW1lIGV4cGlyYXRpb24sIHNvIGJhaWwgb3V0XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlRpbWVyLmluaXQgdGltZXIgXCIgKyB0aGlzLl9uYW1lICsgXCIgc2tpcHBpbmcgaW5pdGlhbGl6YXRpb24gc2luY2UgYWxyZWFkeSBpbml0aWFsaXplZCBmb3IgZXhwaXJhdGlvbjpcIiwgdGhpcy5leHBpcmF0aW9uKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5jYW5jZWwoKTtcclxuXHJcbiAgICAgICAgTG9nLmRlYnVnKFwiVGltZXIuaW5pdCB0aW1lciBcIiArIHRoaXMuX25hbWUgKyBcIiBmb3IgZHVyYXRpb246XCIsIGR1cmF0aW9uKTtcclxuICAgICAgICB0aGlzLl9leHBpcmF0aW9uID0gZXhwaXJhdGlvbjtcclxuXHJcbiAgICAgICAgLy8gd2UncmUgdXNpbmcgYSBmYWlybHkgc2hvcnQgdGltZXIgYW5kIHRoZW4gY2hlY2tpbmcgdGhlIGV4cGlyYXRpb24gaW4gdGhlXHJcbiAgICAgICAgLy8gY2FsbGJhY2sgdG8gaGFuZGxlIHNjZW5hcmlvcyB3aGVyZSB0aGUgYnJvd3NlciBkZXZpY2Ugc2xlZXBzLCBhbmQgdGhlblxyXG4gICAgICAgIC8vIHRoZSB0aW1lcnMgZW5kIHVwIGdldHRpbmcgZGVsYXllZC5cclxuICAgICAgICB2YXIgdGltZXJEdXJhdGlvbiA9IFRpbWVyRHVyYXRpb247XHJcbiAgICAgICAgaWYgKGR1cmF0aW9uIDwgdGltZXJEdXJhdGlvbikge1xyXG4gICAgICAgICAgICB0aW1lckR1cmF0aW9uID0gZHVyYXRpb247XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX3RpbWVySGFuZGxlID0gdGhpcy5fdGltZXIuc2V0SW50ZXJ2YWwodGhpcy5fY2FsbGJhY2suYmluZCh0aGlzKSwgdGltZXJEdXJhdGlvbiAqIDEwMDApO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICBnZXQgZXhwaXJhdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZXhwaXJhdGlvbjtcclxuICAgIH1cclxuXHJcbiAgICBjYW5jZWwoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3RpbWVySGFuZGxlKSB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlRpbWVyLmNhbmNlbDogXCIsIHRoaXMuX25hbWUpO1xyXG4gICAgICAgICAgICB0aGlzLl90aW1lci5jbGVhckludGVydmFsKHRoaXMuX3RpbWVySGFuZGxlKTtcclxuICAgICAgICAgICAgdGhpcy5fdGltZXJIYW5kbGUgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBfY2FsbGJhY2soKSB7XHJcbiAgICAgICAgdmFyIGRpZmYgPSB0aGlzLl9leHBpcmF0aW9uIC0gdGhpcy5ub3c7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiVGltZXIuY2FsbGJhY2s7IFwiICsgdGhpcy5fbmFtZSArIFwiIHRpbWVyIGV4cGlyZXMgaW46XCIsIGRpZmYpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5fZXhwaXJhdGlvbiA8PSB0aGlzLm5vdykge1xyXG4gICAgICAgICAgICB0aGlzLmNhbmNlbCgpO1xyXG4gICAgICAgICAgICBzdXBlci5yYWlzZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBKc29uU2VydmljZSB9IGZyb20gJy4vSnNvblNlcnZpY2UuanMnO1xyXG5pbXBvcnQgeyBNZXRhZGF0YVNlcnZpY2UgfSBmcm9tICcuL01ldGFkYXRhU2VydmljZS5qcyc7XHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBUb2tlbkNsaWVudCB7XHJcbiAgICBjb25zdHJ1Y3RvcihzZXR0aW5ncywgSnNvblNlcnZpY2VDdG9yID0gSnNvblNlcnZpY2UsIE1ldGFkYXRhU2VydmljZUN0b3IgPSBNZXRhZGF0YVNlcnZpY2UpIHtcclxuICAgICAgICBpZiAoIXNldHRpbmdzKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlRva2VuQ2xpZW50LmN0b3I6IE5vIHNldHRpbmdzIHBhc3NlZFwiKTtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwic2V0dGluZ3NcIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9zZXR0aW5ncyA9IHNldHRpbmdzO1xyXG4gICAgICAgIHRoaXMuX2pzb25TZXJ2aWNlID0gbmV3IEpzb25TZXJ2aWNlQ3RvcigpO1xyXG4gICAgICAgIHRoaXMuX21ldGFkYXRhU2VydmljZSA9IG5ldyBNZXRhZGF0YVNlcnZpY2VDdG9yKHRoaXMuX3NldHRpbmdzKTtcclxuICAgIH1cclxuXHJcbiAgICBleGNoYW5nZUNvZGUoYXJncyA9IHt9KSB7XHJcbiAgICAgICAgYXJncyA9IE9iamVjdC5hc3NpZ24oe30sIGFyZ3MpO1xyXG5cclxuICAgICAgICBhcmdzLmdyYW50X3R5cGUgPSBhcmdzLmdyYW50X3R5cGUgfHwgXCJhdXRob3JpemF0aW9uX2NvZGVcIjtcclxuICAgICAgICBhcmdzLmNsaWVudF9pZCA9IGFyZ3MuY2xpZW50X2lkIHx8IHRoaXMuX3NldHRpbmdzLmNsaWVudF9pZDtcclxuICAgICAgICBhcmdzLnJlZGlyZWN0X3VyaSA9IGFyZ3MucmVkaXJlY3RfdXJpIHx8IHRoaXMuX3NldHRpbmdzLnJlZGlyZWN0X3VyaTtcclxuXHJcbiAgICAgICAgaWYgKCFhcmdzLmNvZGUpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiVG9rZW5DbGllbnQuZXhjaGFuZ2VDb2RlOiBObyBjb2RlIHBhc3NlZFwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIkEgY29kZSBpcyByZXF1aXJlZFwiKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghYXJncy5yZWRpcmVjdF91cmkpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiVG9rZW5DbGllbnQuZXhjaGFuZ2VDb2RlOiBObyByZWRpcmVjdF91cmkgcGFzc2VkXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiQSByZWRpcmVjdF91cmkgaXMgcmVxdWlyZWRcIikpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWFyZ3MuY29kZV92ZXJpZmllcikge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJUb2tlbkNsaWVudC5leGNoYW5nZUNvZGU6IE5vIGNvZGVfdmVyaWZpZXIgcGFzc2VkXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiQSBjb2RlX3ZlcmlmaWVyIGlzIHJlcXVpcmVkXCIpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFhcmdzLmNsaWVudF9pZCkge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJUb2tlbkNsaWVudC5leGNoYW5nZUNvZGU6IE5vIGNsaWVudF9pZCBwYXNzZWRcIik7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJBIGNsaWVudF9pZCBpcyByZXF1aXJlZFwiKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5fbWV0YWRhdGFTZXJ2aWNlLmdldFRva2VuRW5kcG9pbnQoZmFsc2UpLnRoZW4odXJsID0+IHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiVG9rZW5DbGllbnQuZXhjaGFuZ2VDb2RlOiBSZWNlaXZlZCB0b2tlbiBlbmRwb2ludFwiKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9qc29uU2VydmljZS5wb3N0Rm9ybSh1cmwsIGFyZ3MpLnRoZW4ocmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiVG9rZW5DbGllbnQuZXhjaGFuZ2VDb2RlOiByZXNwb25zZSByZWNlaXZlZFwiKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZXhjaGFuZ2VSZWZyZXNoVG9rZW4oYXJncyA9IHt9KSB7XHJcbiAgICAgICAgYXJncyA9IE9iamVjdC5hc3NpZ24oe30sIGFyZ3MpO1xyXG5cclxuICAgICAgICBhcmdzLmdyYW50X3R5cGUgPSBhcmdzLmdyYW50X3R5cGUgfHwgXCJyZWZyZXNoX3Rva2VuXCI7XHJcbiAgICAgICAgYXJncy5jbGllbnRfaWQgPSBhcmdzLmNsaWVudF9pZCB8fCB0aGlzLl9zZXR0aW5ncy5jbGllbnRfaWQ7XHJcbiAgICAgICAgYXJncy5jbGllbnRfc2VjcmV0ID0gYXJncy5jbGllbnRfc2VjcmV0IHx8IHRoaXMuX3NldHRpbmdzLmNsaWVudF9zZWNyZXQ7XHJcblxyXG4gICAgICAgIGlmICghYXJncy5yZWZyZXNoX3Rva2VuKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlRva2VuQ2xpZW50LmV4Y2hhbmdlUmVmcmVzaFRva2VuOiBObyByZWZyZXNoX3Rva2VuIHBhc3NlZFwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIkEgcmVmcmVzaF90b2tlbiBpcyByZXF1aXJlZFwiKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghYXJncy5jbGllbnRfaWQpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiVG9rZW5DbGllbnQuZXhjaGFuZ2VSZWZyZXNoVG9rZW46IE5vIGNsaWVudF9pZCBwYXNzZWRcIik7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJBIGNsaWVudF9pZCBpcyByZXF1aXJlZFwiKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5fbWV0YWRhdGFTZXJ2aWNlLmdldFRva2VuRW5kcG9pbnQoZmFsc2UpLnRoZW4odXJsID0+IHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiVG9rZW5DbGllbnQuZXhjaGFuZ2VSZWZyZXNoVG9rZW46IFJlY2VpdmVkIHRva2VuIGVuZHBvaW50XCIpO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2pzb25TZXJ2aWNlLnBvc3RGb3JtKHVybCwgYXJncykudGhlbihyZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJUb2tlbkNsaWVudC5leGNoYW5nZVJlZnJlc2hUb2tlbjogcmVzcG9uc2UgcmVjZWl2ZWRcIik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuaW1wb3J0IHsgTWV0YWRhdGFTZXJ2aWNlIH0gZnJvbSAnLi9NZXRhZGF0YVNlcnZpY2UuanMnO1xyXG5pbXBvcnQgeyBHbG9iYWwgfSBmcm9tICcuL0dsb2JhbC5qcyc7XHJcblxyXG5jb25zdCBBY2Nlc3NUb2tlblR5cGVIaW50ID0gXCJhY2Nlc3NfdG9rZW5cIjtcclxuY29uc3QgUmVmcmVzaFRva2VuVHlwZUhpbnQgPSBcInJlZnJlc2hfdG9rZW5cIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBUb2tlblJldm9jYXRpb25DbGllbnQge1xyXG4gICAgY29uc3RydWN0b3Ioc2V0dGluZ3MsIFhNTEh0dHBSZXF1ZXN0Q3RvciA9IEdsb2JhbC5YTUxIdHRwUmVxdWVzdCwgTWV0YWRhdGFTZXJ2aWNlQ3RvciA9IE1ldGFkYXRhU2VydmljZSkge1xyXG4gICAgICAgIGlmICghc2V0dGluZ3MpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiVG9rZW5SZXZvY2F0aW9uQ2xpZW50LmN0b3I6IE5vIHNldHRpbmdzIHByb3ZpZGVkXCIpO1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBzZXR0aW5ncyBwcm92aWRlZC5cIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9zZXR0aW5ncyA9IHNldHRpbmdzO1xyXG4gICAgICAgIHRoaXMuX1hNTEh0dHBSZXF1ZXN0Q3RvciA9IFhNTEh0dHBSZXF1ZXN0Q3RvcjtcclxuICAgICAgICB0aGlzLl9tZXRhZGF0YVNlcnZpY2UgPSBuZXcgTWV0YWRhdGFTZXJ2aWNlQ3Rvcih0aGlzLl9zZXR0aW5ncyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV2b2tlKHRva2VuLCByZXF1aXJlZCwgdHlwZSA9IFwiYWNjZXNzX3Rva2VuXCIpIHtcclxuICAgICAgICBpZiAoIXRva2VuKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlRva2VuUmV2b2NhdGlvbkNsaWVudC5yZXZva2U6IE5vIHRva2VuIHByb3ZpZGVkXCIpO1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyB0b2tlbiBwcm92aWRlZC5cIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodHlwZSAhPT0gQWNjZXNzVG9rZW5UeXBlSGludCAmJiB0eXBlICE9IFJlZnJlc2hUb2tlblR5cGVIaW50KSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlRva2VuUmV2b2NhdGlvbkNsaWVudC5yZXZva2U6IEludmFsaWQgdG9rZW4gdHlwZVwiKTtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCB0b2tlbiB0eXBlLlwiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9tZXRhZGF0YVNlcnZpY2UuZ2V0UmV2b2NhdGlvbkVuZHBvaW50KCkudGhlbih1cmwgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIXVybCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlcXVpcmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiVG9rZW5SZXZvY2F0aW9uQ2xpZW50LnJldm9rZTogUmV2b2NhdGlvbiBub3Qgc3VwcG9ydGVkXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlJldm9jYXRpb24gbm90IHN1cHBvcnRlZFwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAvLyBub3QgcmVxdWlyZWQsIHNvIGRvbid0IGVycm9yIGFuZCBqdXN0IHJldHVyblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJUb2tlblJldm9jYXRpb25DbGllbnQucmV2b2tlOiBSZXZva2luZyBcIiArIHR5cGUpO1xyXG4gICAgICAgICAgICB2YXIgY2xpZW50X2lkID0gdGhpcy5fc2V0dGluZ3MuY2xpZW50X2lkO1xyXG4gICAgICAgICAgICB2YXIgY2xpZW50X3NlY3JldCA9IHRoaXMuX3NldHRpbmdzLmNsaWVudF9zZWNyZXQ7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZXZva2UodXJsLCBjbGllbnRfaWQsIGNsaWVudF9zZWNyZXQsIHRva2VuLCB0eXBlKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBfcmV2b2tlKHVybCwgY2xpZW50X2lkLCBjbGllbnRfc2VjcmV0LCB0b2tlbiwgdHlwZSkge1xyXG5cclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG5cclxuICAgICAgICAgICAgdmFyIHhociA9IG5ldyB0aGlzLl9YTUxIdHRwUmVxdWVzdEN0b3IoKTtcclxuICAgICAgICAgICAgeGhyLm9wZW4oXCJQT1NUXCIsIHVybCk7XHJcblxyXG4gICAgICAgICAgICB4aHIub25sb2FkID0gKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiVG9rZW5SZXZvY2F0aW9uQ2xpZW50LnJldm9rZTogSFRUUCByZXNwb25zZSByZWNlaXZlZCwgc3RhdHVzXCIsIHhoci5zdGF0dXMpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICh4aHIuc3RhdHVzID09PSAyMDApIHtcclxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByZWplY3QoRXJyb3IoeGhyLnN0YXR1c1RleHQgKyBcIiAoXCIgKyB4aHIuc3RhdHVzICsgXCIpXCIpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgeGhyLm9uZXJyb3IgPSAoKSA9PiB7IFxyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiVG9rZW5SZXZvY2F0aW9uQ2xpZW50LnJldm9rZTogTmV0d29yayBFcnJvci5cIilcclxuICAgICAgICAgICAgICAgIHJlamVjdChcIk5ldHdvcmsgRXJyb3JcIik7XHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICB2YXIgYm9keSA9IFwiY2xpZW50X2lkPVwiICsgZW5jb2RlVVJJQ29tcG9uZW50KGNsaWVudF9pZCk7XHJcbiAgICAgICAgICAgIGlmIChjbGllbnRfc2VjcmV0KSB7XHJcbiAgICAgICAgICAgICAgICBib2R5ICs9IFwiJmNsaWVudF9zZWNyZXQ9XCIgKyBlbmNvZGVVUklDb21wb25lbnQoY2xpZW50X3NlY3JldCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYm9keSArPSBcIiZ0b2tlbl90eXBlX2hpbnQ9XCIgKyBlbmNvZGVVUklDb21wb25lbnQodHlwZSk7XHJcbiAgICAgICAgICAgIGJvZHkgKz0gXCImdG9rZW49XCIgKyBlbmNvZGVVUklDb21wb25lbnQodG9rZW4pO1xyXG5cclxuICAgICAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoXCJDb250ZW50LVR5cGVcIiwgXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcIik7XHJcbiAgICAgICAgICAgIHhoci5zZW5kKGJvZHkpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcbiIsIi8vIENvcHlyaWdodCAoYykgQnJvY2sgQWxsZW4gJiBEb21pbmljayBCYWllci4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cclxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gU2VlIExJQ0VOU0UgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi5cclxuXHJcbmltcG9ydCB7IExvZyB9IGZyb20gJy4vTG9nLmpzJztcclxuaW1wb3J0IHsgR2xvYmFsIH0gZnJvbSAnLi9HbG9iYWwuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFVybFV0aWxpdHkge1xyXG4gICAgc3RhdGljIGFkZFF1ZXJ5UGFyYW0odXJsLCBuYW1lLCB2YWx1ZSkge1xyXG4gICAgICAgIGlmICh1cmwuaW5kZXhPZignPycpIDwgMCkge1xyXG4gICAgICAgICAgICB1cmwgKz0gXCI/XCI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodXJsW3VybC5sZW5ndGggLSAxXSAhPT0gXCI/XCIpIHtcclxuICAgICAgICAgICAgdXJsICs9IFwiJlwiO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdXJsICs9IGVuY29kZVVSSUNvbXBvbmVudChuYW1lKTtcclxuICAgICAgICB1cmwgKz0gXCI9XCI7XHJcbiAgICAgICAgdXJsICs9IGVuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSk7XHJcblxyXG4gICAgICAgIHJldHVybiB1cmw7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIHBhcnNlVXJsRnJhZ21lbnQodmFsdWUsIGRlbGltaXRlciA9IFwiI1wiLCBnbG9iYWwgPSBHbG9iYWwpIHtcclxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJyl7XHJcbiAgICAgICAgICAgIHZhbHVlID0gZ2xvYmFsLmxvY2F0aW9uLmhyZWY7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgaWR4ID0gdmFsdWUubGFzdEluZGV4T2YoZGVsaW1pdGVyKTtcclxuICAgICAgICBpZiAoaWR4ID49IDApIHtcclxuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5zdWJzdHIoaWR4ICsgMSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZGVsaW1pdGVyID09PSBcIj9cIikge1xyXG4gICAgICAgICAgICAvLyBpZiB3ZSdyZSBkb2luZyBxdWVyeSwgdGhlbiBzdHJpcCBvZmYgaGFzaCBmcmFnbWVudCBiZWZvcmUgd2UgcGFyc2VcclxuICAgICAgICAgICAgaWR4ID0gdmFsdWUuaW5kZXhPZignIycpO1xyXG4gICAgICAgICAgICBpZiAoaWR4ID49IDApIHtcclxuICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuc3Vic3RyKDAsIGlkeCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBwYXJhbXMgPSB7fSxcclxuICAgICAgICAgICAgcmVnZXggPSAvKFteJj1dKyk9KFteJl0qKS9nLFxyXG4gICAgICAgICAgICBtO1xyXG5cclxuICAgICAgICB2YXIgY291bnRlciA9IDA7XHJcbiAgICAgICAgd2hpbGUgKG0gPSByZWdleC5leGVjKHZhbHVlKSkge1xyXG4gICAgICAgICAgICBwYXJhbXNbZGVjb2RlVVJJQ29tcG9uZW50KG1bMV0pXSA9IGRlY29kZVVSSUNvbXBvbmVudChtWzJdKTtcclxuICAgICAgICAgICAgaWYgKGNvdW50ZXIrKyA+IDUwKSB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJVcmxVdGlsaXR5LnBhcnNlVXJsRnJhZ21lbnQ6IHJlc3BvbnNlIGV4Y2VlZGVkIGV4cGVjdGVkIG51bWJlciBvZiBwYXJhbWV0ZXJzXCIsIHZhbHVlKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6IFwiUmVzcG9uc2UgZXhjZWVkZWQgZXhwZWN0ZWQgbnVtYmVyIG9mIHBhcmFtZXRlcnNcIlxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yICh2YXIgcHJvcCBpbiBwYXJhbXMpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHBhcmFtcztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB7fTtcclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgVXNlciB7XHJcbiAgICBjb25zdHJ1Y3Rvcih7aWRfdG9rZW4sIHNlc3Npb25fc3RhdGUsIGFjY2Vzc190b2tlbiwgcmVmcmVzaF90b2tlbiwgdG9rZW5fdHlwZSwgc2NvcGUsIHByb2ZpbGUsIGV4cGlyZXNfYXQsIHN0YXRlfSkge1xyXG4gICAgICAgIHRoaXMuaWRfdG9rZW4gPSBpZF90b2tlbjtcclxuICAgICAgICB0aGlzLnNlc3Npb25fc3RhdGUgPSBzZXNzaW9uX3N0YXRlO1xyXG4gICAgICAgIHRoaXMuYWNjZXNzX3Rva2VuID0gYWNjZXNzX3Rva2VuO1xyXG4gICAgICAgIHRoaXMucmVmcmVzaF90b2tlbiA9IHJlZnJlc2hfdG9rZW47XHJcbiAgICAgICAgdGhpcy50b2tlbl90eXBlID0gdG9rZW5fdHlwZTtcclxuICAgICAgICB0aGlzLnNjb3BlID0gc2NvcGU7XHJcbiAgICAgICAgdGhpcy5wcm9maWxlID0gcHJvZmlsZTtcclxuICAgICAgICB0aGlzLmV4cGlyZXNfYXQgPSBleHBpcmVzX2F0O1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBzdGF0ZTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgZXhwaXJlc19pbigpIHtcclxuICAgICAgICBpZiAodGhpcy5leHBpcmVzX2F0KSB7XHJcbiAgICAgICAgICAgIGxldCBub3cgPSBwYXJzZUludChEYXRlLm5vdygpIC8gMTAwMCk7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmV4cGlyZXNfYXQgLSBub3c7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICB9XHJcbiAgICBzZXQgZXhwaXJlc19pbih2YWx1ZSkge1xyXG4gICAgICAgIGxldCBleHBpcmVzX2luID0gcGFyc2VJbnQodmFsdWUpO1xyXG4gICAgICAgIGlmICh0eXBlb2YgZXhwaXJlc19pbiA9PT0gJ251bWJlcicgJiYgZXhwaXJlc19pbiA+IDApIHtcclxuICAgICAgICAgICAgbGV0IG5vdyA9IHBhcnNlSW50KERhdGUubm93KCkgLyAxMDAwKTtcclxuICAgICAgICAgICAgdGhpcy5leHBpcmVzX2F0ID0gbm93ICsgZXhwaXJlc19pbjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGV4cGlyZWQoKSB7XHJcbiAgICAgICAgbGV0IGV4cGlyZXNfaW4gPSB0aGlzLmV4cGlyZXNfaW47XHJcbiAgICAgICAgaWYgKGV4cGlyZXNfaW4gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZXhwaXJlc19pbiA8PSAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBzY29wZXMoKSB7XHJcbiAgICAgICAgcmV0dXJuICh0aGlzLnNjb3BlIHx8IFwiXCIpLnNwbGl0KFwiIFwiKTtcclxuICAgIH1cclxuXHJcbiAgICB0b1N0b3JhZ2VTdHJpbmcoKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiVXNlci50b1N0b3JhZ2VTdHJpbmdcIik7XHJcbiAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHtcclxuICAgICAgICAgICAgaWRfdG9rZW46IHRoaXMuaWRfdG9rZW4sXHJcbiAgICAgICAgICAgIHNlc3Npb25fc3RhdGU6IHRoaXMuc2Vzc2lvbl9zdGF0ZSxcclxuICAgICAgICAgICAgYWNjZXNzX3Rva2VuOiB0aGlzLmFjY2Vzc190b2tlbixcclxuICAgICAgICAgICAgcmVmcmVzaF90b2tlbjogdGhpcy5yZWZyZXNoX3Rva2VuLFxyXG4gICAgICAgICAgICB0b2tlbl90eXBlOiB0aGlzLnRva2VuX3R5cGUsXHJcbiAgICAgICAgICAgIHNjb3BlOiB0aGlzLnNjb3BlLFxyXG4gICAgICAgICAgICBwcm9maWxlOiB0aGlzLnByb2ZpbGUsXHJcbiAgICAgICAgICAgIGV4cGlyZXNfYXQ6IHRoaXMuZXhwaXJlc19hdFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBmcm9tU3RvcmFnZVN0cmluZyhzdG9yYWdlU3RyaW5nKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiVXNlci5mcm9tU3RvcmFnZVN0cmluZ1wiKTtcclxuICAgICAgICByZXR1cm4gbmV3IFVzZXIoSlNPTi5wYXJzZShzdG9yYWdlU3RyaW5nKSk7XHJcbiAgICB9XHJcbn1cclxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG5cclxuaW1wb3J0IHsgSnNvblNlcnZpY2UgfSBmcm9tICcuL0pzb25TZXJ2aWNlLmpzJztcclxuaW1wb3J0IHsgTWV0YWRhdGFTZXJ2aWNlIH0gZnJvbSAnLi9NZXRhZGF0YVNlcnZpY2UuanMnO1xyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcbmltcG9ydCB7IEpvc2VVdGlsIH0gZnJvbSAnLi9Kb3NlVXRpbC5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgVXNlckluZm9TZXJ2aWNlIHtcclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHNldHRpbmdzLCBcclxuICAgICAgICBKc29uU2VydmljZUN0b3IgPSBKc29uU2VydmljZSwgXHJcbiAgICAgICAgTWV0YWRhdGFTZXJ2aWNlQ3RvciA9IE1ldGFkYXRhU2VydmljZSwgXHJcbiAgICAgICAgam9zZVV0aWwgPSBKb3NlVXRpbFxyXG4gICAgKSB7XHJcbiAgICAgICAgaWYgKCFzZXR0aW5ncykge1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJVc2VySW5mb1NlcnZpY2UuY3RvcjogTm8gc2V0dGluZ3MgcGFzc2VkXCIpO1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJzZXR0aW5nc1wiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3NldHRpbmdzID0gc2V0dGluZ3M7XHJcbiAgICAgICAgdGhpcy5fanNvblNlcnZpY2UgPSBuZXcgSnNvblNlcnZpY2VDdG9yKHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB0aGlzLl9nZXRDbGFpbXNGcm9tSnd0LmJpbmQodGhpcykpO1xyXG4gICAgICAgIHRoaXMuX21ldGFkYXRhU2VydmljZSA9IG5ldyBNZXRhZGF0YVNlcnZpY2VDdG9yKHRoaXMuX3NldHRpbmdzKTtcclxuICAgICAgICB0aGlzLl9qb3NlVXRpbCA9IGpvc2VVdGlsO1xyXG4gICAgfVxyXG5cclxuICAgIGdldENsYWltcyh0b2tlbikge1xyXG4gICAgICAgIGlmICghdG9rZW4pIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiVXNlckluZm9TZXJ2aWNlLmdldENsYWltczogTm8gdG9rZW4gcGFzc2VkXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiQSB0b2tlbiBpcyByZXF1aXJlZFwiKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5fbWV0YWRhdGFTZXJ2aWNlLmdldFVzZXJJbmZvRW5kcG9pbnQoKS50aGVuKHVybCA9PiB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJJbmZvU2VydmljZS5nZXRDbGFpbXM6IHJlY2VpdmVkIHVzZXJpbmZvIHVybFwiLCB1cmwpO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2pzb25TZXJ2aWNlLmdldEpzb24odXJsLCB0b2tlbikudGhlbihjbGFpbXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlckluZm9TZXJ2aWNlLmdldENsYWltczogY2xhaW1zIHJlY2VpdmVkXCIsIGNsYWltcyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY2xhaW1zO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBfZ2V0Q2xhaW1zRnJvbUp3dChyZXEpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBsZXQgand0ID0gdGhpcy5fam9zZVV0aWwucGFyc2VKd3QocmVxLnJlc3BvbnNlVGV4dCk7XHJcbiAgICAgICAgICAgIGlmICghand0IHx8ICFqd3QuaGVhZGVyIHx8ICFqd3QucGF5bG9hZCkge1xyXG4gICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiVXNlckluZm9TZXJ2aWNlLl9nZXRDbGFpbXNGcm9tSnd0OiBGYWlsZWQgdG8gcGFyc2UgSldUXCIsIGp3dCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiRmFpbGVkIHRvIHBhcnNlIGlkX3Rva2VuXCIpKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmFyIGtpZCA9IGp3dC5oZWFkZXIua2lkO1xyXG5cclxuICAgICAgICAgICAgbGV0IGlzc3VlclByb21pc2U7XHJcbiAgICAgICAgICAgIHN3aXRjaCAodGhpcy5fc2V0dGluZ3MudXNlckluZm9Kd3RJc3N1ZXIpIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgJ09QJzpcclxuICAgICAgICAgICAgICAgICAgICBpc3N1ZXJQcm9taXNlID0gdGhpcy5fbWV0YWRhdGFTZXJ2aWNlLmdldElzc3VlcigpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSAnQU5ZJzpcclxuICAgICAgICAgICAgICAgICAgICBpc3N1ZXJQcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKGp3dC5wYXlsb2FkLmlzcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgIGlzc3VlclByb21pc2UgPSBQcm9taXNlLnJlc29sdmUodGhpcy5fc2V0dGluZ3MudXNlckluZm9Kd3RJc3N1ZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gaXNzdWVyUHJvbWlzZS50aGVuKGlzc3VlciA9PiB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VySW5mb1NlcnZpY2UuX2dldENsYWltc0Zyb21Kd3Q6IFJlY2VpdmVkIGlzc3VlcjpcIiArIGlzc3Vlcik7XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21ldGFkYXRhU2VydmljZS5nZXRTaWduaW5nS2V5cygpLnRoZW4oa2V5cyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFrZXlzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIlVzZXJJbmZvU2VydmljZS5fZ2V0Q2xhaW1zRnJvbUp3dDogTm8gc2lnbmluZyBrZXlzIGZyb20gbWV0YWRhdGFcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJObyBzaWduaW5nIGtleXMgZnJvbSBtZXRhZGF0YVwiKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VySW5mb1NlcnZpY2UuX2dldENsYWltc0Zyb21Kd3Q6IFJlY2VpdmVkIHNpZ25pbmcga2V5c1wiKTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQga2V5O1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICgha2lkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleXMgPSB0aGlzLl9maWx0ZXJCeUFsZyhrZXlzLCBqd3QuaGVhZGVyLmFsZyk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoa2V5cy5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJVc2VySW5mb1NlcnZpY2UuX2dldENsYWltc0Zyb21Kd3Q6IE5vIGtpZCBmb3VuZCBpbiBpZF90b2tlbiBhbmQgbW9yZSB0aGFuIG9uZSBrZXkgZm91bmQgaW4gbWV0YWRhdGFcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiTm8ga2lkIGZvdW5kIGluIGlkX3Rva2VuIGFuZCBtb3JlIHRoYW4gb25lIGtleSBmb3VuZCBpbiBtZXRhZGF0YVwiKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBraWQgaXMgbWFuZGF0b3J5IG9ubHkgd2hlbiB0aGVyZSBhcmUgbXVsdGlwbGUga2V5cyBpbiB0aGUgcmVmZXJlbmNlZCBKV0sgU2V0IGRvY3VtZW50XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzZWUgaHR0cDovL29wZW5pZC5uZXQvc3BlY3Mvb3BlbmlkLWNvbm5lY3QtY29yZS0xXzAuaHRtbCNTaWduaW5nXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXkgPSBrZXlzWzBdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBrZXkgPSBrZXlzLmZpbHRlcihrZXkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGtleS5raWQgPT09IGtpZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSlbMF07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWtleSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJVc2VySW5mb1NlcnZpY2UuX2dldENsYWltc0Zyb21Kd3Q6IE5vIGtleSBtYXRjaGluZyBraWQgb3IgYWxnIGZvdW5kIGluIHNpZ25pbmcga2V5c1wiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIk5vIGtleSBtYXRjaGluZyBraWQgb3IgYWxnIGZvdW5kIGluIHNpZ25pbmcga2V5c1wiKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBsZXQgYXVkaWVuY2UgPSB0aGlzLl9zZXR0aW5ncy5jbGllbnRfaWQ7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGxldCBjbG9ja1NrZXdJblNlY29uZHMgPSB0aGlzLl9zZXR0aW5ncy5jbG9ja1NrZXc7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlckluZm9TZXJ2aWNlLl9nZXRDbGFpbXNGcm9tSnd0OiBWYWxpZGFpbmcgSldUOyB1c2luZyBjbG9jayBza2V3IChpbiBzZWNvbmRzKSBvZjogXCIsIGNsb2NrU2tld0luU2Vjb25kcyk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9qb3NlVXRpbC52YWxpZGF0ZUp3dChyZXEucmVzcG9uc2VUZXh0LCBrZXksIGlzc3VlciwgYXVkaWVuY2UsIGNsb2NrU2tld0luU2Vjb25kcywgdW5kZWZpbmVkLCB0cnVlKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlckluZm9TZXJ2aWNlLl9nZXRDbGFpbXNGcm9tSnd0OiBKV1QgdmFsaWRhdGlvbiBzdWNjZXNzZnVsXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gand0LnBheWxvYWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiVXNlckluZm9TZXJ2aWNlLl9nZXRDbGFpbXNGcm9tSnd0OiBFcnJvciBwYXJzaW5nIEpXVCByZXNwb25zZVwiLCBlLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICByZWplY3QoZSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgX2ZpbHRlckJ5QWxnKGtleXMsIGFsZykge1xyXG4gICAgICAgIHZhciBrdHkgPSBudWxsO1xyXG4gICAgICAgIGlmIChhbGcuc3RhcnRzV2l0aChcIlJTXCIpKSB7XHJcbiAgICAgICAgICAgIGt0eSA9IFwiUlNBXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGFsZy5zdGFydHNXaXRoKFwiUFNcIikpIHtcclxuICAgICAgICAgICAga3R5ID0gXCJQU1wiO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChhbGcuc3RhcnRzV2l0aChcIkVTXCIpKSB7XHJcbiAgICAgICAgICAgIGt0eSA9IFwiRUNcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJJbmZvU2VydmljZS5fZmlsdGVyQnlBbGc6IGFsZyBub3Qgc3VwcG9ydGVkOiBcIiwgYWxnKTtcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgTG9nLmRlYnVnKFwiVXNlckluZm9TZXJ2aWNlLl9maWx0ZXJCeUFsZzogTG9va2luZyBmb3Iga2V5cyB0aGF0IG1hdGNoIGt0eTogXCIsIGt0eSk7XHJcblxyXG4gICAgICAgIGtleXMgPSBrZXlzLmZpbHRlcihrZXkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4ga2V5Lmt0eSA9PT0ga3R5O1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBMb2cuZGVidWcoXCJVc2VySW5mb1NlcnZpY2UuX2ZpbHRlckJ5QWxnOiBOdW1iZXIgb2Yga2V5cyB0aGF0IG1hdGNoIGt0eTogXCIsIGt0eSwga2V5cy5sZW5ndGgpO1xyXG5cclxuICAgICAgICByZXR1cm4ga2V5cztcclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcbmltcG9ydCB7IE9pZGNDbGllbnQgfSBmcm9tICcuL09pZGNDbGllbnQuanMnO1xyXG5pbXBvcnQgeyBVc2VyTWFuYWdlclNldHRpbmdzIH0gZnJvbSAnLi9Vc2VyTWFuYWdlclNldHRpbmdzLmpzJztcclxuaW1wb3J0IHsgVXNlciB9IGZyb20gJy4vVXNlci5qcyc7XHJcbmltcG9ydCB7IFVzZXJNYW5hZ2VyRXZlbnRzIH0gZnJvbSAnLi9Vc2VyTWFuYWdlckV2ZW50cy5qcyc7XHJcbmltcG9ydCB7IFNpbGVudFJlbmV3U2VydmljZSB9IGZyb20gJy4vU2lsZW50UmVuZXdTZXJ2aWNlLmpzJztcclxuaW1wb3J0IHsgU2Vzc2lvbk1vbml0b3IgfSBmcm9tICcuL1Nlc3Npb25Nb25pdG9yLmpzJztcclxuaW1wb3J0IHsgVG9rZW5SZXZvY2F0aW9uQ2xpZW50IH0gZnJvbSAnLi9Ub2tlblJldm9jYXRpb25DbGllbnQuanMnO1xyXG5pbXBvcnQgeyBUb2tlbkNsaWVudCB9IGZyb20gJy4vVG9rZW5DbGllbnQuanMnO1xyXG5pbXBvcnQgeyBKb3NlVXRpbCB9IGZyb20gJy4vSm9zZVV0aWwuanMnO1xyXG5cclxuXHJcbmV4cG9ydCBjbGFzcyBVc2VyTWFuYWdlciBleHRlbmRzIE9pZGNDbGllbnQge1xyXG4gICAgY29uc3RydWN0b3Ioc2V0dGluZ3MgPSB7fSxcclxuICAgICAgICBTaWxlbnRSZW5ld1NlcnZpY2VDdG9yID0gU2lsZW50UmVuZXdTZXJ2aWNlLFxyXG4gICAgICAgIFNlc3Npb25Nb25pdG9yQ3RvciA9IFNlc3Npb25Nb25pdG9yLFxyXG4gICAgICAgIFRva2VuUmV2b2NhdGlvbkNsaWVudEN0b3IgPSBUb2tlblJldm9jYXRpb25DbGllbnQsXHJcbiAgICAgICAgVG9rZW5DbGllbnRDdG9yID0gVG9rZW5DbGllbnQsXHJcbiAgICAgICAgam9zZVV0aWwgPSBKb3NlVXRpbFxyXG4gICAgKSB7XHJcblxyXG4gICAgICAgIGlmICghKHNldHRpbmdzIGluc3RhbmNlb2YgVXNlck1hbmFnZXJTZXR0aW5ncykpIHtcclxuICAgICAgICAgICAgc2V0dGluZ3MgPSBuZXcgVXNlck1hbmFnZXJTZXR0aW5ncyhzZXR0aW5ncyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHN1cGVyKHNldHRpbmdzKTtcclxuXHJcbiAgICAgICAgdGhpcy5fZXZlbnRzID0gbmV3IFVzZXJNYW5hZ2VyRXZlbnRzKHNldHRpbmdzKTtcclxuICAgICAgICB0aGlzLl9zaWxlbnRSZW5ld1NlcnZpY2UgPSBuZXcgU2lsZW50UmVuZXdTZXJ2aWNlQ3Rvcih0aGlzKTtcclxuXHJcbiAgICAgICAgLy8gb3JkZXIgaXMgaW1wb3J0YW50IGZvciB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM7IHRoZXNlIHNlcnZpY2VzIGRlcGVuZCB1cG9uIHRoZSBldmVudHMuXHJcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZ3MuYXV0b21hdGljU2lsZW50UmVuZXcpIHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXIuY3RvcjogYXV0b21hdGljU2lsZW50UmVuZXcgaXMgY29uZmlndXJlZCwgc2V0dGluZyB1cCBzaWxlbnQgcmVuZXdcIik7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhcnRTaWxlbnRSZW5ldygpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZ3MubW9uaXRvclNlc3Npb24pIHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXIuY3RvcjogbW9uaXRvclNlc3Npb24gaXMgY29uZmlndXJlZCwgc2V0dGluZyB1cCBzZXNzaW9uIG1vbml0b3JcIik7XHJcbiAgICAgICAgICAgIHRoaXMuX3Nlc3Npb25Nb25pdG9yID0gbmV3IFNlc3Npb25Nb25pdG9yQ3Rvcih0aGlzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3Rva2VuUmV2b2NhdGlvbkNsaWVudCA9IG5ldyBUb2tlblJldm9jYXRpb25DbGllbnRDdG9yKHRoaXMuX3NldHRpbmdzKTtcclxuICAgICAgICB0aGlzLl90b2tlbkNsaWVudCA9IG5ldyBUb2tlbkNsaWVudEN0b3IodGhpcy5fc2V0dGluZ3MpO1xyXG4gICAgICAgIHRoaXMuX2pvc2VVdGlsID0gam9zZVV0aWw7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IF9yZWRpcmVjdE5hdmlnYXRvcigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXR0aW5ncy5yZWRpcmVjdE5hdmlnYXRvcjtcclxuICAgIH1cclxuICAgIGdldCBfcG9wdXBOYXZpZ2F0b3IoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0dGluZ3MucG9wdXBOYXZpZ2F0b3I7XHJcbiAgICB9XHJcbiAgICBnZXQgX2lmcmFtZU5hdmlnYXRvcigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXR0aW5ncy5pZnJhbWVOYXZpZ2F0b3I7XHJcbiAgICB9XHJcbiAgICBnZXQgX3VzZXJTdG9yZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXR0aW5ncy51c2VyU3RvcmU7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGV2ZW50cygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZXZlbnRzO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFVzZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xvYWRVc2VyKCkudGhlbih1c2VyID0+IHtcclxuICAgICAgICAgICAgaWYgKHVzZXIpIHtcclxuICAgICAgICAgICAgICAgIExvZy5pbmZvKFwiVXNlck1hbmFnZXIuZ2V0VXNlcjogdXNlciBsb2FkZWRcIik7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5fZXZlbnRzLmxvYWQodXNlciwgZmFsc2UpO1xyXG5cclxuICAgICAgICAgICAgICAgIHJldHVybiB1c2VyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgTG9nLmluZm8oXCJVc2VyTWFuYWdlci5nZXRVc2VyOiB1c2VyIG5vdCBmb3VuZCBpbiBzdG9yYWdlXCIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICByZW1vdmVVc2VyKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnN0b3JlVXNlcihudWxsKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgTG9nLmluZm8oXCJVc2VyTWFuYWdlci5yZW1vdmVVc2VyOiB1c2VyIHJlbW92ZWQgZnJvbSBzdG9yYWdlXCIpO1xyXG4gICAgICAgICAgICB0aGlzLl9ldmVudHMudW5sb2FkKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2lnbmluUmVkaXJlY3QoYXJncyA9IHt9KSB7XHJcbiAgICAgICAgYXJncyA9IE9iamVjdC5hc3NpZ24oe30sIGFyZ3MpO1xyXG5cclxuICAgICAgICBhcmdzLnJlcXVlc3RfdHlwZSA9IFwic2k6clwiO1xyXG4gICAgICAgIGxldCBuYXZQYXJhbXMgPSB7XHJcbiAgICAgICAgICAgIHVzZVJlcGxhY2VUb05hdmlnYXRlIDogYXJncy51c2VSZXBsYWNlVG9OYXZpZ2F0ZVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NpZ25pblN0YXJ0KGFyZ3MsIHRoaXMuX3JlZGlyZWN0TmF2aWdhdG9yLCBuYXZQYXJhbXMpLnRoZW4oKCk9PntcclxuICAgICAgICAgICAgTG9nLmluZm8oXCJVc2VyTWFuYWdlci5zaWduaW5SZWRpcmVjdDogc3VjY2Vzc2Z1bFwiKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIHNpZ25pblJlZGlyZWN0Q2FsbGJhY2sodXJsKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NpZ25pbkVuZCh1cmwgfHwgdGhpcy5fcmVkaXJlY3ROYXZpZ2F0b3IudXJsKS50aGVuKHVzZXIgPT4ge1xyXG4gICAgICAgICAgICBpZiAodXNlci5wcm9maWxlICYmIHVzZXIucHJvZmlsZS5zdWIpIHtcclxuICAgICAgICAgICAgICAgIExvZy5pbmZvKFwiVXNlck1hbmFnZXIuc2lnbmluUmVkaXJlY3RDYWxsYmFjazogc3VjY2Vzc2Z1bCwgc2lnbmVkIGluIHN1YjogXCIsIHVzZXIucHJvZmlsZS5zdWIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgTG9nLmluZm8oXCJVc2VyTWFuYWdlci5zaWduaW5SZWRpcmVjdENhbGxiYWNrOiBubyBzdWJcIik7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiB1c2VyO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHNpZ25pblBvcHVwKGFyZ3MgPSB7fSkge1xyXG4gICAgICAgIGFyZ3MgPSBPYmplY3QuYXNzaWduKHt9LCBhcmdzKTtcclxuXHJcbiAgICAgICAgYXJncy5yZXF1ZXN0X3R5cGUgPSBcInNpOnBcIjtcclxuICAgICAgICBsZXQgdXJsID0gYXJncy5yZWRpcmVjdF91cmkgfHwgdGhpcy5zZXR0aW5ncy5wb3B1cF9yZWRpcmVjdF91cmkgfHwgdGhpcy5zZXR0aW5ncy5yZWRpcmVjdF91cmk7XHJcbiAgICAgICAgaWYgKCF1cmwpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiVXNlck1hbmFnZXIuc2lnbmluUG9wdXA6IE5vIHBvcHVwX3JlZGlyZWN0X3VyaSBvciByZWRpcmVjdF91cmkgY29uZmlndXJlZFwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIk5vIHBvcHVwX3JlZGlyZWN0X3VyaSBvciByZWRpcmVjdF91cmkgY29uZmlndXJlZFwiKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBhcmdzLnJlZGlyZWN0X3VyaSA9IHVybDtcclxuICAgICAgICBhcmdzLmRpc3BsYXkgPSBcInBvcHVwXCI7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9zaWduaW4oYXJncywgdGhpcy5fcG9wdXBOYXZpZ2F0b3IsIHtcclxuICAgICAgICAgICAgc3RhcnRVcmw6IHVybCxcclxuICAgICAgICAgICAgcG9wdXBXaW5kb3dGZWF0dXJlczogYXJncy5wb3B1cFdpbmRvd0ZlYXR1cmVzIHx8IHRoaXMuc2V0dGluZ3MucG9wdXBXaW5kb3dGZWF0dXJlcyxcclxuICAgICAgICAgICAgcG9wdXBXaW5kb3dUYXJnZXQ6IGFyZ3MucG9wdXBXaW5kb3dUYXJnZXQgfHwgdGhpcy5zZXR0aW5ncy5wb3B1cFdpbmRvd1RhcmdldFxyXG4gICAgICAgIH0pLnRoZW4odXNlciA9PiB7XHJcbiAgICAgICAgICAgIGlmICh1c2VyKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodXNlci5wcm9maWxlICYmIHVzZXIucHJvZmlsZS5zdWIpIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuaW5mbyhcIlVzZXJNYW5hZ2VyLnNpZ25pblBvcHVwOiBzaWduaW5Qb3B1cCBzdWNjZXNzZnVsLCBzaWduZWQgaW4gc3ViOiBcIiwgdXNlci5wcm9maWxlLnN1Yik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuaW5mbyhcIlVzZXJNYW5hZ2VyLnNpZ25pblBvcHVwOiBubyBzdWJcIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiB1c2VyO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgc2lnbmluUG9wdXBDYWxsYmFjayh1cmwpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc2lnbmluQ2FsbGJhY2sodXJsLCB0aGlzLl9wb3B1cE5hdmlnYXRvcikudGhlbih1c2VyID0+IHtcclxuICAgICAgICAgICAgaWYgKHVzZXIpIHtcclxuICAgICAgICAgICAgICAgIGlmICh1c2VyLnByb2ZpbGUgJiYgdXNlci5wcm9maWxlLnN1Yikge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5pbmZvKFwiVXNlck1hbmFnZXIuc2lnbmluUG9wdXBDYWxsYmFjazogc3VjY2Vzc2Z1bCwgc2lnbmVkIGluIHN1YjogXCIsIHVzZXIucHJvZmlsZS5zdWIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmluZm8oXCJVc2VyTWFuYWdlci5zaWduaW5Qb3B1cENhbGxiYWNrOiBubyBzdWJcIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiB1c2VyO1xyXG4gICAgICAgIH0pLmNhdGNoKGVycj0+e1xyXG4gICAgICAgICAgICBMb2cuZXJyb3IoXCJVc2VyTWFuYWdlci5zaWduaW5Qb3B1cENhbGxiYWNrIGVycm9yOiBcIiArIGVyciAmJiBlcnIubWVzc2FnZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2lnbmluU2lsZW50KGFyZ3MgPSB7fSkge1xyXG4gICAgICAgIGFyZ3MgPSBPYmplY3QuYXNzaWduKHt9LCBhcmdzKTtcclxuXHJcbiAgICAgICAgYXJncy5yZXF1ZXN0X3R5cGUgPSBcInNpOnNcIjtcclxuICAgICAgICAvLyBmaXJzdCBkZXRlcm1pbmUgaWYgd2UgaGF2ZSBhIHJlZnJlc2ggdG9rZW4sIG9yIG5lZWQgdG8gdXNlIGlmcmFtZVxyXG4gICAgICAgIHJldHVybiB0aGlzLl9sb2FkVXNlcigpLnRoZW4odXNlciA9PiB7XHJcbiAgICAgICAgICAgIGlmICh1c2VyICYmIHVzZXIucmVmcmVzaF90b2tlbikge1xyXG4gICAgICAgICAgICAgICAgYXJncy5yZWZyZXNoX3Rva2VuID0gdXNlci5yZWZyZXNoX3Rva2VuO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3VzZVJlZnJlc2hUb2tlbihhcmdzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGFyZ3MuaWRfdG9rZW5faGludCA9IGFyZ3MuaWRfdG9rZW5faGludCB8fCAodGhpcy5zZXR0aW5ncy5pbmNsdWRlSWRUb2tlbkluU2lsZW50UmVuZXcgJiYgdXNlciAmJiB1c2VyLmlkX3Rva2VuKTtcclxuICAgICAgICAgICAgICAgIGlmICh1c2VyICYmIHRoaXMuX3NldHRpbmdzLnZhbGlkYXRlU3ViT25TaWxlbnRSZW5ldykge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyLnNpZ25pblNpbGVudCwgc3ViamVjdCBwcmlvciB0byBzaWxlbnQgcmVuZXc6IFwiLCB1c2VyLnByb2ZpbGUuc3ViKTtcclxuICAgICAgICAgICAgICAgICAgICBhcmdzLmN1cnJlbnRfc3ViID0gdXNlci5wcm9maWxlLnN1YjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9zaWduaW5TaWxlbnRJZnJhbWUoYXJncyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBfdXNlUmVmcmVzaFRva2VuKGFyZ3MgPSB7fSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl90b2tlbkNsaWVudC5leGNoYW5nZVJlZnJlc2hUb2tlbihhcmdzKS50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgIGlmICghcmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJVc2VyTWFuYWdlci5fdXNlUmVmcmVzaFRva2VuOiBObyByZXNwb25zZSByZXR1cm5lZCBmcm9tIHRva2VuIGVuZHBvaW50XCIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KFwiTm8gcmVzcG9uc2UgcmV0dXJuZWQgZnJvbSB0b2tlbiBlbmRwb2ludFwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoIXJlc3VsdC5hY2Nlc3NfdG9rZW4pIHtcclxuICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIlVzZXJNYW5hZ2VyLl91c2VSZWZyZXNoVG9rZW46IE5vIGFjY2VzcyB0b2tlbiByZXR1cm5lZCBmcm9tIHRva2VuIGVuZHBvaW50XCIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KFwiTm8gYWNjZXNzIHRva2VuIHJldHVybmVkIGZyb20gdG9rZW4gZW5kcG9pbnRcIik7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9sb2FkVXNlcigpLnRoZW4odXNlciA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodXNlcikge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBpZFRva2VuVmFsaWRhdGlvbiA9IFByb21pc2UucmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuaWRfdG9rZW4pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWRUb2tlblZhbGlkYXRpb24gPSB0aGlzLl92YWxpZGF0ZUlkVG9rZW5Gcm9tVG9rZW5SZWZyZXNoVG9rZW4odXNlci5wcm9maWxlLCByZXN1bHQuaWRfdG9rZW4pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlkVG9rZW5WYWxpZGF0aW9uLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlci5fdXNlUmVmcmVzaFRva2VuOiByZWZyZXNoIHRva2VuIHJlc3BvbnNlIHN1Y2Nlc3NcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIuaWRfdG9rZW4gPSByZXN1bHQuaWRfdG9rZW47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIuYWNjZXNzX3Rva2VuID0gcmVzdWx0LmFjY2Vzc190b2tlbjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlci5yZWZyZXNoX3Rva2VuID0gcmVzdWx0LnJlZnJlc2hfdG9rZW4gfHwgdXNlci5yZWZyZXNoX3Rva2VuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VyLmV4cGlyZXNfaW4gPSByZXN1bHQuZXhwaXJlc19pbjtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnN0b3JlVXNlcih1c2VyKS50aGVuKCgpPT57XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9ldmVudHMubG9hZCh1c2VyKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1c2VyO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBfdmFsaWRhdGVJZFRva2VuRnJvbVRva2VuUmVmcmVzaFRva2VuKHByb2ZpbGUsIGlkX3Rva2VuKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX21ldGFkYXRhU2VydmljZS5nZXRJc3N1ZXIoKS50aGVuKGlzc3VlciA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9qb3NlVXRpbC52YWxpZGF0ZUp3dEF0dHJpYnV0ZXMoaWRfdG9rZW4sIGlzc3VlciwgdGhpcy5fc2V0dGluZ3MuY2xpZW50X2lkLCB0aGlzLl9zZXR0aW5ncy5jbG9ja1NrZXcpLnRoZW4ocGF5bG9hZCA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXBheWxvYWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZXJyb3IoXCJVc2VyTWFuYWdlci5fdmFsaWRhdGVJZFRva2VuRnJvbVRva2VuUmVmcmVzaFRva2VuOiBGYWlsZWQgdG8gdmFsaWRhdGUgaWRfdG9rZW5cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIkZhaWxlZCB0byB2YWxpZGF0ZSBpZF90b2tlblwiKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAocGF5bG9hZC5zdWIgIT09IHByb2ZpbGUuc3ViKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmVycm9yKFwiVXNlck1hbmFnZXIuX3ZhbGlkYXRlSWRUb2tlbkZyb21Ub2tlblJlZnJlc2hUb2tlbjogc3ViIGluIGlkX3Rva2VuIGRvZXMgbm90IG1hdGNoIGN1cnJlbnQgc3ViXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJzdWIgaW4gaWRfdG9rZW4gZG9lcyBub3QgbWF0Y2ggY3VycmVudCBzdWJcIikpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHBheWxvYWQuYXV0aF90aW1lICYmIHBheWxvYWQuYXV0aF90aW1lICE9PSBwcm9maWxlLmF1dGhfdGltZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIlVzZXJNYW5hZ2VyLl92YWxpZGF0ZUlkVG9rZW5Gcm9tVG9rZW5SZWZyZXNoVG9rZW46IGF1dGhfdGltZSBpbiBpZF90b2tlbiBkb2VzIG5vdCBtYXRjaCBvcmlnaW5hbCBhdXRoX3RpbWVcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcImF1dGhfdGltZSBpbiBpZF90b2tlbiBkb2VzIG5vdCBtYXRjaCBvcmlnaW5hbCBhdXRoX3RpbWVcIikpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHBheWxvYWQuYXpwICYmIHBheWxvYWQuYXpwICE9PSBwcm9maWxlLmF6cCkge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIlVzZXJNYW5hZ2VyLl92YWxpZGF0ZUlkVG9rZW5Gcm9tVG9rZW5SZWZyZXNoVG9rZW46IGF6cCBpbiBpZF90b2tlbiBkb2VzIG5vdCBtYXRjaCBvcmlnaW5hbCBhenBcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcImF6cCBpbiBpZF90b2tlbiBkb2VzIG5vdCBtYXRjaCBvcmlnaW5hbCBhenBcIikpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKCFwYXlsb2FkLmF6cCAmJiBwcm9maWxlLmF6cCkge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5lcnJvcihcIlVzZXJNYW5hZ2VyLl92YWxpZGF0ZUlkVG9rZW5Gcm9tVG9rZW5SZWZyZXNoVG9rZW46IGF6cCBub3QgaW4gaWRfdG9rZW4sIGJ1dCBwcmVzZW50IGluIG9yaWdpbmFsIGlkX3Rva2VuXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJhenAgbm90IGluIGlkX3Rva2VuLCBidXQgcHJlc2VudCBpbiBvcmlnaW5hbCBpZF90b2tlblwiKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICBfc2lnbmluU2lsZW50SWZyYW1lKGFyZ3MgPSB7fSkge1xyXG4gICAgICAgIGxldCB1cmwgPSBhcmdzLnJlZGlyZWN0X3VyaSB8fCB0aGlzLnNldHRpbmdzLnNpbGVudF9yZWRpcmVjdF91cmkgfHwgdGhpcy5zZXR0aW5ncy5yZWRpcmVjdF91cmk7XHJcbiAgICAgICAgaWYgKCF1cmwpIHtcclxuICAgICAgICAgICAgTG9nLmVycm9yKFwiVXNlck1hbmFnZXIuc2lnbmluU2lsZW50OiBObyBzaWxlbnRfcmVkaXJlY3RfdXJpIGNvbmZpZ3VyZWRcIik7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJObyBzaWxlbnRfcmVkaXJlY3RfdXJpIGNvbmZpZ3VyZWRcIikpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYXJncy5yZWRpcmVjdF91cmkgPSB1cmw7XHJcbiAgICAgICAgYXJncy5wcm9tcHQgPSBhcmdzLnByb21wdCB8fCBcIm5vbmVcIjtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NpZ25pbihhcmdzLCB0aGlzLl9pZnJhbWVOYXZpZ2F0b3IsIHtcclxuICAgICAgICAgICAgc3RhcnRVcmw6IHVybCxcclxuICAgICAgICAgICAgc2lsZW50UmVxdWVzdFRpbWVvdXQ6IGFyZ3Muc2lsZW50UmVxdWVzdFRpbWVvdXQgfHwgdGhpcy5zZXR0aW5ncy5zaWxlbnRSZXF1ZXN0VGltZW91dFxyXG4gICAgICAgIH0pLnRoZW4odXNlciA9PiB7XHJcbiAgICAgICAgICAgIGlmICh1c2VyKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodXNlci5wcm9maWxlICYmIHVzZXIucHJvZmlsZS5zdWIpIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuaW5mbyhcIlVzZXJNYW5hZ2VyLnNpZ25pblNpbGVudDogc3VjY2Vzc2Z1bCwgc2lnbmVkIGluIHN1YjogXCIsIHVzZXIucHJvZmlsZS5zdWIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmluZm8oXCJVc2VyTWFuYWdlci5zaWduaW5TaWxlbnQ6IG5vIHN1YlwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHVzZXI7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2lnbmluU2lsZW50Q2FsbGJhY2sodXJsKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NpZ25pbkNhbGxiYWNrKHVybCwgdGhpcy5faWZyYW1lTmF2aWdhdG9yKS50aGVuKHVzZXIgPT4ge1xyXG4gICAgICAgICAgICBpZiAodXNlcikge1xyXG4gICAgICAgICAgICAgICAgaWYgKHVzZXIucHJvZmlsZSAmJiB1c2VyLnByb2ZpbGUuc3ViKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmluZm8oXCJVc2VyTWFuYWdlci5zaWduaW5TaWxlbnRDYWxsYmFjazogc3VjY2Vzc2Z1bCwgc2lnbmVkIGluIHN1YjogXCIsIHVzZXIucHJvZmlsZS5zdWIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmluZm8oXCJVc2VyTWFuYWdlci5zaWduaW5TaWxlbnRDYWxsYmFjazogbm8gc3ViXCIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdXNlcjtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBzaWduaW5DYWxsYmFjayh1cmwpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5yZWFkU2lnbmluUmVzcG9uc2VTdGF0ZSh1cmwpLnRoZW4oKHtzdGF0ZSwgcmVzcG9uc2V9KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChzdGF0ZS5yZXF1ZXN0X3R5cGUgPT09IFwic2k6clwiKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zaWduaW5SZWRpcmVjdENhbGxiYWNrKHVybCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHN0YXRlLnJlcXVlc3RfdHlwZSA9PT0gXCJzaTpwXCIpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNpZ25pblBvcHVwQ2FsbGJhY2sodXJsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoc3RhdGUucmVxdWVzdF90eXBlID09PSBcInNpOnNcIikge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2lnbmluU2lsZW50Q2FsbGJhY2sodXJsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiaW52YWxpZCByZXNwb25zZV90eXBlIGluIHN0YXRlXCIpKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBzaWdub3V0Q2FsbGJhY2sodXJsLCBrZWVwT3Blbikge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJlYWRTaWdub3V0UmVzcG9uc2VTdGF0ZSh1cmwpLnRoZW4oKHtzdGF0ZSwgcmVzcG9uc2V9KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChzdGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHN0YXRlLnJlcXVlc3RfdHlwZSA9PT0gXCJzbzpyXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zaWdub3V0UmVkaXJlY3RDYWxsYmFjayh1cmwpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHN0YXRlLnJlcXVlc3RfdHlwZSA9PT0gXCJzbzpwXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zaWdub3V0UG9wdXBDYWxsYmFjayh1cmwsIGtlZXBPcGVuKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJpbnZhbGlkIHJlc3BvbnNlX3R5cGUgaW4gc3RhdGVcIikpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBxdWVyeVNlc3Npb25TdGF0dXMoYXJncyA9IHt9KSB7XHJcbiAgICAgICAgYXJncyA9IE9iamVjdC5hc3NpZ24oe30sIGFyZ3MpO1xyXG5cclxuICAgICAgICBhcmdzLnJlcXVlc3RfdHlwZSA9IFwic2k6c1wiOyAvLyB0aGlzIGFjdHMgbGlrZSBhIHNpZ25pbiBzaWxlbnRcclxuICAgICAgICBsZXQgdXJsID0gYXJncy5yZWRpcmVjdF91cmkgfHwgdGhpcy5zZXR0aW5ncy5zaWxlbnRfcmVkaXJlY3RfdXJpIHx8IHRoaXMuc2V0dGluZ3MucmVkaXJlY3RfdXJpO1xyXG4gICAgICAgIGlmICghdXJsKSB7XHJcbiAgICAgICAgICAgIExvZy5lcnJvcihcIlVzZXJNYW5hZ2VyLnF1ZXJ5U2Vzc2lvblN0YXR1czogTm8gc2lsZW50X3JlZGlyZWN0X3VyaSBjb25maWd1cmVkXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiTm8gc2lsZW50X3JlZGlyZWN0X3VyaSBjb25maWd1cmVkXCIpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGFyZ3MucmVkaXJlY3RfdXJpID0gdXJsO1xyXG4gICAgICAgIGFyZ3MucHJvbXB0ID0gXCJub25lXCI7XHJcbiAgICAgICAgYXJncy5yZXNwb25zZV90eXBlID0gYXJncy5yZXNwb25zZV90eXBlIHx8IHRoaXMuc2V0dGluZ3MucXVlcnlfc3RhdHVzX3Jlc3BvbnNlX3R5cGU7XHJcbiAgICAgICAgYXJncy5zY29wZSA9IGFyZ3Muc2NvcGUgfHwgXCJvcGVuaWRcIjtcclxuICAgICAgICBhcmdzLnNraXBVc2VySW5mbyA9IHRydWU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9zaWduaW5TdGFydChhcmdzLCB0aGlzLl9pZnJhbWVOYXZpZ2F0b3IsIHtcclxuICAgICAgICAgICAgc3RhcnRVcmw6IHVybCxcclxuICAgICAgICAgICAgc2lsZW50UmVxdWVzdFRpbWVvdXQ6IGFyZ3Muc2lsZW50UmVxdWVzdFRpbWVvdXQgfHwgdGhpcy5zZXR0aW5ncy5zaWxlbnRSZXF1ZXN0VGltZW91dFxyXG4gICAgICAgIH0pLnRoZW4obmF2UmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzU2lnbmluUmVzcG9uc2UobmF2UmVzcG9uc2UudXJsKS50aGVuKHNpZ25pblJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyLnF1ZXJ5U2Vzc2lvblN0YXR1czogZ290IHNpZ25pbiByZXNwb25zZVwiKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoc2lnbmluUmVzcG9uc2Uuc2Vzc2lvbl9zdGF0ZSAmJiBzaWduaW5SZXNwb25zZS5wcm9maWxlLnN1Yikge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5pbmZvKFwiVXNlck1hbmFnZXIucXVlcnlTZXNzaW9uU3RhdHVzOiBxdWVyeVNlc3Npb25TdGF0dXMgc3VjY2VzcyBmb3Igc3ViOiBcIiwgIHNpZ25pblJlc3BvbnNlLnByb2ZpbGUuc3ViKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uX3N0YXRlOiBzaWduaW5SZXNwb25zZS5zZXNzaW9uX3N0YXRlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWI6IHNpZ25pblJlc3BvbnNlLnByb2ZpbGUuc3ViLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzaWQ6IHNpZ25pblJlc3BvbnNlLnByb2ZpbGUuc2lkXHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5pbmZvKFwicXVlcnlTZXNzaW9uU3RhdHVzIHN1Y2Nlc3NmdWwsIHVzZXIgbm90IGF1dGhlbnRpY2F0ZWRcIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5jYXRjaChlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGVyci5zZXNzaW9uX3N0YXRlICYmIHRoaXMuc2V0dGluZ3MubW9uaXRvckFub255bW91c1Nlc3Npb24pIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyLm1lc3NhZ2UgPT0gXCJsb2dpbl9yZXF1aXJlZFwiIHx8IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlcnIubWVzc2FnZSA9PSBcImNvbnNlbnRfcmVxdWlyZWRcIiB8fCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyLm1lc3NhZ2UgPT0gXCJpbnRlcmFjdGlvbl9yZXF1aXJlZFwiIHx8IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlcnIubWVzc2FnZSA9PSBcImFjY291bnRfc2VsZWN0aW9uX3JlcXVpcmVkXCJcclxuICAgICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmluZm8oXCJVc2VyTWFuYWdlci5xdWVyeVNlc3Npb25TdGF0dXM6IHF1ZXJ5U2Vzc2lvblN0YXR1cyBzdWNjZXNzIGZvciBhbm9ueW1vdXMgdXNlclwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlc3Npb25fc3RhdGU6IGVyci5zZXNzaW9uX3N0YXRlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHRocm93IGVycjtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgX3NpZ25pbihhcmdzLCBuYXZpZ2F0b3IsIG5hdmlnYXRvclBhcmFtcyA9IHt9KSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NpZ25pblN0YXJ0KGFyZ3MsIG5hdmlnYXRvciwgbmF2aWdhdG9yUGFyYW1zKS50aGVuKG5hdlJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NpZ25pbkVuZChuYXZSZXNwb25zZS51cmwsIGFyZ3MpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgX3NpZ25pblN0YXJ0KGFyZ3MsIG5hdmlnYXRvciwgbmF2aWdhdG9yUGFyYW1zID0ge30pIHtcclxuXHJcbiAgICAgICAgcmV0dXJuIG5hdmlnYXRvci5wcmVwYXJlKG5hdmlnYXRvclBhcmFtcykudGhlbihoYW5kbGUgPT4ge1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlci5fc2lnbmluU3RhcnQ6IGdvdCBuYXZpZ2F0b3Igd2luZG93IGhhbmRsZVwiKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZVNpZ25pblJlcXVlc3QoYXJncykudGhlbihzaWduaW5SZXF1ZXN0ID0+IHtcclxuICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyLl9zaWduaW5TdGFydDogZ290IHNpZ25pbiByZXF1ZXN0XCIpO1xyXG5cclxuICAgICAgICAgICAgICAgIG5hdmlnYXRvclBhcmFtcy51cmwgPSBzaWduaW5SZXF1ZXN0LnVybDtcclxuICAgICAgICAgICAgICAgIG5hdmlnYXRvclBhcmFtcy5pZCA9IHNpZ25pblJlcXVlc3Quc3RhdGUuaWQ7XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZS5uYXZpZ2F0ZShuYXZpZ2F0b3JQYXJhbXMpO1xyXG4gICAgICAgICAgICB9KS5jYXRjaChlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGhhbmRsZS5jbG9zZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyLl9zaWduaW5TdGFydDogRXJyb3IgYWZ0ZXIgcHJlcGFyaW5nIG5hdmlnYXRvciwgY2xvc2luZyBuYXZpZ2F0b3Igd2luZG93XCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGhhbmRsZS5jbG9zZSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIF9zaWduaW5FbmQodXJsLCBhcmdzID0ge30pIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzU2lnbmluUmVzcG9uc2UodXJsKS50aGVuKHNpZ25pblJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXIuX3NpZ25pbkVuZDogZ290IHNpZ25pbiByZXNwb25zZVwiKTtcclxuXHJcbiAgICAgICAgICAgIGxldCB1c2VyID0gbmV3IFVzZXIoc2lnbmluUmVzcG9uc2UpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGFyZ3MuY3VycmVudF9zdWIpIHtcclxuICAgICAgICAgICAgICAgIGlmIChhcmdzLmN1cnJlbnRfc3ViICE9PSB1c2VyLnByb2ZpbGUuc3ViKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXIuX3NpZ25pbkVuZDogY3VycmVudCB1c2VyIGRvZXMgbm90IG1hdGNoIHVzZXIgcmV0dXJuZWQgZnJvbSBzaWduaW4uIHN1YiBmcm9tIHNpZ25pbjogXCIsIHVzZXIucHJvZmlsZS5zdWIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJsb2dpbl9yZXF1aXJlZFwiKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlci5fc2lnbmluRW5kOiBjdXJyZW50IHVzZXIgbWF0Y2hlcyB1c2VyIHJldHVybmVkIGZyb20gc2lnbmluXCIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zdG9yZVVzZXIodXNlcikudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlci5fc2lnbmluRW5kOiB1c2VyIHN0b3JlZFwiKTtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLl9ldmVudHMubG9hZCh1c2VyKTtcclxuXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdXNlcjtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBfc2lnbmluQ2FsbGJhY2sodXJsLCBuYXZpZ2F0b3IpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlci5fc2lnbmluQ2FsbGJhY2tcIik7XHJcbiAgICAgICAgcmV0dXJuIG5hdmlnYXRvci5jYWxsYmFjayh1cmwpO1xyXG4gICAgfVxyXG5cclxuICAgIHNpZ25vdXRSZWRpcmVjdChhcmdzID0ge30pIHtcclxuICAgICAgICBhcmdzID0gT2JqZWN0LmFzc2lnbih7fSwgYXJncyk7XHJcblxyXG4gICAgICAgIGFyZ3MucmVxdWVzdF90eXBlID0gXCJzbzpyXCI7XHJcbiAgICAgICAgbGV0IHBvc3RMb2dvdXRSZWRpcmVjdFVyaSA9IGFyZ3MucG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpIHx8IHRoaXMuc2V0dGluZ3MucG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpO1xyXG4gICAgICAgIGlmIChwb3N0TG9nb3V0UmVkaXJlY3RVcmkpe1xyXG4gICAgICAgICAgICBhcmdzLnBvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaSA9IHBvc3RMb2dvdXRSZWRpcmVjdFVyaTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IG5hdlBhcmFtcyA9IHtcclxuICAgICAgICAgICAgdXNlUmVwbGFjZVRvTmF2aWdhdGUgOiBhcmdzLnVzZVJlcGxhY2VUb05hdmlnYXRlXHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc2lnbm91dFN0YXJ0KGFyZ3MsIHRoaXMuX3JlZGlyZWN0TmF2aWdhdG9yLCBuYXZQYXJhbXMpLnRoZW4oKCk9PntcclxuICAgICAgICAgICAgTG9nLmluZm8oXCJVc2VyTWFuYWdlci5zaWdub3V0UmVkaXJlY3Q6IHN1Y2Nlc3NmdWxcIik7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBzaWdub3V0UmVkaXJlY3RDYWxsYmFjayh1cmwpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc2lnbm91dEVuZCh1cmwgfHwgdGhpcy5fcmVkaXJlY3ROYXZpZ2F0b3IudXJsKS50aGVuKHJlc3BvbnNlPT57XHJcbiAgICAgICAgICAgIExvZy5pbmZvKFwiVXNlck1hbmFnZXIuc2lnbm91dFJlZGlyZWN0Q2FsbGJhY2s6IHN1Y2Nlc3NmdWxcIik7XHJcbiAgICAgICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBzaWdub3V0UG9wdXAoYXJncyA9IHt9KSB7XHJcbiAgICAgICAgYXJncyA9IE9iamVjdC5hc3NpZ24oe30sIGFyZ3MpO1xyXG5cclxuICAgICAgICBhcmdzLnJlcXVlc3RfdHlwZSA9IFwic286cFwiO1xyXG4gICAgICAgIGxldCB1cmwgPSBhcmdzLnBvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaSB8fCB0aGlzLnNldHRpbmdzLnBvcHVwX3Bvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaSB8fCB0aGlzLnNldHRpbmdzLnBvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaTtcclxuICAgICAgICBhcmdzLnBvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaSA9IHVybDtcclxuICAgICAgICBhcmdzLmRpc3BsYXkgPSBcInBvcHVwXCI7XHJcbiAgICAgICAgaWYgKGFyZ3MucG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpKXtcclxuICAgICAgICAgICAgLy8gd2UncmUgcHV0dGluZyBhIGR1bW15IGVudHJ5IGluIGhlcmUgYmVjYXVzZSB3ZVxyXG4gICAgICAgICAgICAvLyBuZWVkIGEgdW5pcXVlIGlkIGZyb20gdGhlIHN0YXRlIGZvciBub3RpZmljYXRpb25cclxuICAgICAgICAgICAgLy8gdG8gdGhlIHBhcmVudCB3aW5kb3csIHdoaWNoIGlzIG5lY2Vzc2FyeSBpZiB3ZVxyXG4gICAgICAgICAgICAvLyBwbGFuIHRvIHJldHVybiBiYWNrIHRvIHRoZSBjbGllbnQgYWZ0ZXIgc2lnbm91dFxyXG4gICAgICAgICAgICAvLyBhbmQgc28gd2UgY2FuIGNsb3NlIHRoZSBwb3B1cCBhZnRlciBzaWdub3V0XHJcbiAgICAgICAgICAgIGFyZ3Muc3RhdGUgPSBhcmdzLnN0YXRlIHx8IHt9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NpZ25vdXQoYXJncywgdGhpcy5fcG9wdXBOYXZpZ2F0b3IsIHtcclxuICAgICAgICAgICAgc3RhcnRVcmw6IHVybCxcclxuICAgICAgICAgICAgcG9wdXBXaW5kb3dGZWF0dXJlczogYXJncy5wb3B1cFdpbmRvd0ZlYXR1cmVzIHx8IHRoaXMuc2V0dGluZ3MucG9wdXBXaW5kb3dGZWF0dXJlcyxcclxuICAgICAgICAgICAgcG9wdXBXaW5kb3dUYXJnZXQ6IGFyZ3MucG9wdXBXaW5kb3dUYXJnZXQgfHwgdGhpcy5zZXR0aW5ncy5wb3B1cFdpbmRvd1RhcmdldFxyXG4gICAgICAgIH0pLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICBMb2cuaW5mbyhcIlVzZXJNYW5hZ2VyLnNpZ25vdXRQb3B1cDogc3VjY2Vzc2Z1bFwiKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIHNpZ25vdXRQb3B1cENhbGxiYWNrKHVybCwga2VlcE9wZW4pIHtcclxuICAgICAgICBpZiAodHlwZW9mKGtlZXBPcGVuKSA9PT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mKHVybCkgPT09ICdib29sZWFuJykge1xyXG4gICAgICAgICAgICBrZWVwT3BlbiA9IHVybDtcclxuICAgICAgICAgICAgdXJsID0gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBkZWxpbWl0ZXIgPSAnPyc7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BvcHVwTmF2aWdhdG9yLmNhbGxiYWNrKHVybCwga2VlcE9wZW4sIGRlbGltaXRlcikudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgIExvZy5pbmZvKFwiVXNlck1hbmFnZXIuc2lnbm91dFBvcHVwQ2FsbGJhY2s6IHN1Y2Nlc3NmdWxcIik7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgX3NpZ25vdXQoYXJncywgbmF2aWdhdG9yLCBuYXZpZ2F0b3JQYXJhbXMgPSB7fSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zaWdub3V0U3RhcnQoYXJncywgbmF2aWdhdG9yLCBuYXZpZ2F0b3JQYXJhbXMpLnRoZW4obmF2UmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fc2lnbm91dEVuZChuYXZSZXNwb25zZS51cmwpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgX3NpZ25vdXRTdGFydChhcmdzID0ge30sIG5hdmlnYXRvciwgbmF2aWdhdG9yUGFyYW1zID0ge30pIHtcclxuICAgICAgICByZXR1cm4gbmF2aWdhdG9yLnByZXBhcmUobmF2aWdhdG9yUGFyYW1zKS50aGVuKGhhbmRsZSA9PiB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyLl9zaWdub3V0U3RhcnQ6IGdvdCBuYXZpZ2F0b3Igd2luZG93IGhhbmRsZVwiKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9sb2FkVXNlcigpLnRoZW4odXNlciA9PiB7XHJcbiAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlci5fc2lnbm91dFN0YXJ0OiBsb2FkZWQgY3VycmVudCB1c2VyIGZyb20gc3RvcmFnZVwiKTtcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgcmV2b2tlUHJvbWlzZSA9IHRoaXMuX3NldHRpbmdzLnJldm9rZUFjY2Vzc1Rva2VuT25TaWdub3V0ID8gdGhpcy5fcmV2b2tlSW50ZXJuYWwodXNlcikgOiBQcm9taXNlLnJlc29sdmUoKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXZva2VQcm9taXNlLnRoZW4oKCkgPT4ge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB2YXIgaWRfdG9rZW4gPSBhcmdzLmlkX3Rva2VuX2hpbnQgfHwgdXNlciAmJiB1c2VyLmlkX3Rva2VuO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpZF90b2tlbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlci5fc2lnbm91dFN0YXJ0OiBTZXR0aW5nIGlkX3Rva2VuIGludG8gc2lnbm91dCByZXF1ZXN0XCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzLmlkX3Rva2VuX2hpbnQgPSBpZF90b2tlbjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnJlbW92ZVVzZXIoKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXIuX3NpZ25vdXRTdGFydDogdXNlciByZW1vdmVkLCBjcmVhdGluZyBzaWdub3V0IHJlcXVlc3RcIik7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVTaWdub3V0UmVxdWVzdChhcmdzKS50aGVuKHNpZ25vdXRSZXF1ZXN0ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyLl9zaWdub3V0U3RhcnQ6IGdvdCBzaWdub3V0IHJlcXVlc3RcIik7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF2aWdhdG9yUGFyYW1zLnVybCA9IHNpZ25vdXRSZXF1ZXN0LnVybDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzaWdub3V0UmVxdWVzdC5zdGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdmlnYXRvclBhcmFtcy5pZCA9IHNpZ25vdXRSZXF1ZXN0LnN0YXRlLmlkO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZS5uYXZpZ2F0ZShuYXZpZ2F0b3JQYXJhbXMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KS5jYXRjaChlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGhhbmRsZS5jbG9zZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyLl9zaWdub3V0U3RhcnQ6IEVycm9yIGFmdGVyIHByZXBhcmluZyBuYXZpZ2F0b3IsIGNsb3NpbmcgbmF2aWdhdG9yIHdpbmRvd1wiKTtcclxuICAgICAgICAgICAgICAgICAgICBoYW5kbGUuY2xvc2UoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRocm93IGVycjtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBfc2lnbm91dEVuZCh1cmwpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzU2lnbm91dFJlc3BvbnNlKHVybCkudGhlbihzaWdub3V0UmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlci5fc2lnbm91dEVuZDogZ290IHNpZ25vdXQgcmVzcG9uc2VcIik7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gc2lnbm91dFJlc3BvbnNlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldm9rZUFjY2Vzc1Rva2VuKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9sb2FkVXNlcigpLnRoZW4odXNlciA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZXZva2VJbnRlcm5hbCh1c2VyLCB0cnVlKS50aGVuKHN1Y2Nlc3MgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlci5yZXZva2VBY2Nlc3NUb2tlbjogcmVtb3ZpbmcgdG9rZW4gcHJvcGVydGllcyBmcm9tIHVzZXIgYW5kIHJlLXN0b3JpbmdcIik7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHVzZXIuYWNjZXNzX3Rva2VuID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICB1c2VyLnJlZnJlc2hfdG9rZW4gPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIHVzZXIuZXhwaXJlc19hdCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgdXNlci50b2tlbl90eXBlID0gbnVsbDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3RvcmVVc2VyKHVzZXIpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlci5yZXZva2VBY2Nlc3NUb2tlbjogdXNlciBzdG9yZWRcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2V2ZW50cy5sb2FkKHVzZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KS50aGVuKCgpPT57XHJcbiAgICAgICAgICAgIExvZy5pbmZvKFwiVXNlck1hbmFnZXIucmV2b2tlQWNjZXNzVG9rZW46IGFjY2VzcyB0b2tlbiByZXZva2VkIHN1Y2Nlc3NmdWxseVwiKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBfcmV2b2tlSW50ZXJuYWwodXNlciwgcmVxdWlyZWQpIHtcclxuICAgICAgICBpZiAodXNlcikge1xyXG4gICAgICAgICAgICB2YXIgYWNjZXNzX3Rva2VuID0gdXNlci5hY2Nlc3NfdG9rZW47XHJcbiAgICAgICAgICAgIHZhciByZWZyZXNoX3Rva2VuID0gdXNlci5yZWZyZXNoX3Rva2VuO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Jldm9rZUFjY2Vzc1Rva2VuSW50ZXJuYWwoYWNjZXNzX3Rva2VuLCByZXF1aXJlZClcclxuICAgICAgICAgICAgICAgIC50aGVuKGF0U3VjY2VzcyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Jldm9rZVJlZnJlc2hUb2tlbkludGVybmFsKHJlZnJlc2hfdG9rZW4sIHJlcXVpcmVkKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAudGhlbihydFN1Y2Nlc3MgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFhdFN1Y2Nlc3MgJiYgIXJ0U3VjY2Vzcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyLnJldm9rZUFjY2Vzc1Rva2VuOiBubyBuZWVkIHRvIHJldm9rZSBkdWUgdG8gbm8gdG9rZW4ocyksIG9yIEpXVCBmb3JtYXRcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhdFN1Y2Nlc3MgfHwgcnRTdWNjZXNzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7XHJcbiAgICB9XHJcblxyXG4gICAgX3Jldm9rZUFjY2Vzc1Rva2VuSW50ZXJuYWwoYWNjZXNzX3Rva2VuLCByZXF1aXJlZCkge1xyXG4gICAgICAgIC8vIGNoZWNrIGZvciBKV1QgdnMuIHJlZmVyZW5jZSB0b2tlblxyXG4gICAgICAgIGlmICghYWNjZXNzX3Rva2VuIHx8IGFjY2Vzc190b2tlbi5pbmRleE9mKCcuJykgPj0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl90b2tlblJldm9jYXRpb25DbGllbnQucmV2b2tlKGFjY2Vzc190b2tlbiwgcmVxdWlyZWQpLnRoZW4oKCkgPT4gdHJ1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgX3Jldm9rZVJlZnJlc2hUb2tlbkludGVybmFsKHJlZnJlc2hfdG9rZW4sIHJlcXVpcmVkKSB7XHJcbiAgICAgICAgaWYgKCFyZWZyZXNoX3Rva2VuKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Rva2VuUmV2b2NhdGlvbkNsaWVudC5yZXZva2UocmVmcmVzaF90b2tlbiwgcmVxdWlyZWQsIFwicmVmcmVzaF90b2tlblwiKS50aGVuKCgpID0+IHRydWUpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXJ0U2lsZW50UmVuZXcoKSB7XHJcbiAgICAgICAgdGhpcy5fc2lsZW50UmVuZXdTZXJ2aWNlLnN0YXJ0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RvcFNpbGVudFJlbmV3KCkge1xyXG4gICAgICAgIHRoaXMuX3NpbGVudFJlbmV3U2VydmljZS5zdG9wKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IF91c2VyU3RvcmVLZXkoKSB7XHJcbiAgICAgICAgcmV0dXJuIGB1c2VyOiR7dGhpcy5zZXR0aW5ncy5hdXRob3JpdHl9OiR7dGhpcy5zZXR0aW5ncy5jbGllbnRfaWR9YDtcclxuICAgIH1cclxuXHJcbiAgICBfbG9hZFVzZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3VzZXJTdG9yZS5nZXQodGhpcy5fdXNlclN0b3JlS2V5KS50aGVuKHN0b3JhZ2VTdHJpbmcgPT4ge1xyXG4gICAgICAgICAgICBpZiAoc3RvcmFnZVN0cmluZykge1xyXG4gICAgICAgICAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXIuX2xvYWRVc2VyOiB1c2VyIHN0b3JhZ2VTdHJpbmcgbG9hZGVkXCIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFVzZXIuZnJvbVN0b3JhZ2VTdHJpbmcoc3RvcmFnZVN0cmluZyk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyLl9sb2FkVXNlcjogbm8gdXNlciBzdG9yYWdlU3RyaW5nXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBzdG9yZVVzZXIodXNlcikge1xyXG4gICAgICAgIGlmICh1c2VyKSB7XHJcbiAgICAgICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyLnN0b3JlVXNlcjogc3RvcmluZyB1c2VyXCIpO1xyXG5cclxuICAgICAgICAgICAgdmFyIHN0b3JhZ2VTdHJpbmcgPSB1c2VyLnRvU3RvcmFnZVN0cmluZygpO1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdXNlclN0b3JlLnNldCh0aGlzLl91c2VyU3RvcmVLZXksIHN0b3JhZ2VTdHJpbmcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgTG9nLmRlYnVnKFwic3RvcmVVc2VyLnN0b3JlVXNlcjogcmVtb3ZpbmcgdXNlclwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3VzZXJTdG9yZS5yZW1vdmUodGhpcy5fdXNlclN0b3JlS2V5KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG5cclxuaW1wb3J0IHsgTG9nIH0gZnJvbSAnLi9Mb2cuanMnO1xyXG5pbXBvcnQgeyBBY2Nlc3NUb2tlbkV2ZW50cyB9IGZyb20gJy4vQWNjZXNzVG9rZW5FdmVudHMuanMnO1xyXG5pbXBvcnQgeyBFdmVudCB9IGZyb20gJy4vRXZlbnQuanMnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFVzZXJNYW5hZ2VyRXZlbnRzIGV4dGVuZHMgQWNjZXNzVG9rZW5FdmVudHMge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHNldHRpbmdzKSB7XHJcbiAgICAgICAgc3VwZXIoc2V0dGluZ3MpO1xyXG4gICAgICAgIHRoaXMuX3VzZXJMb2FkZWQgPSBuZXcgRXZlbnQoXCJVc2VyIGxvYWRlZFwiKTtcclxuICAgICAgICB0aGlzLl91c2VyVW5sb2FkZWQgPSBuZXcgRXZlbnQoXCJVc2VyIHVubG9hZGVkXCIpO1xyXG4gICAgICAgIHRoaXMuX3NpbGVudFJlbmV3RXJyb3IgPSBuZXcgRXZlbnQoXCJTaWxlbnQgcmVuZXcgZXJyb3JcIik7XHJcbiAgICAgICAgdGhpcy5fdXNlclNpZ25lZEluID0gbmV3IEV2ZW50KFwiVXNlciBzaWduZWQgaW5cIik7XHJcbiAgICAgICAgdGhpcy5fdXNlclNpZ25lZE91dCA9IG5ldyBFdmVudChcIlVzZXIgc2lnbmVkIG91dFwiKTtcclxuICAgICAgICB0aGlzLl91c2VyU2Vzc2lvbkNoYW5nZWQgPSBuZXcgRXZlbnQoXCJVc2VyIHNlc3Npb24gY2hhbmdlZFwiKTtcclxuICAgIH1cclxuXHJcbiAgICBsb2FkKHVzZXIsIHJhaXNlRXZlbnQ9dHJ1ZSkge1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyRXZlbnRzLmxvYWRcIik7XHJcbiAgICAgICAgc3VwZXIubG9hZCh1c2VyKTtcclxuICAgICAgICBpZiAocmFpc2VFdmVudCkge1xyXG4gICAgICAgICAgICB0aGlzLl91c2VyTG9hZGVkLnJhaXNlKHVzZXIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHVubG9hZCgpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlckV2ZW50cy51bmxvYWRcIik7XHJcbiAgICAgICAgc3VwZXIudW5sb2FkKCk7XHJcbiAgICAgICAgdGhpcy5fdXNlclVubG9hZGVkLnJhaXNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkVXNlckxvYWRlZChjYikge1xyXG4gICAgICAgIHRoaXMuX3VzZXJMb2FkZWQuYWRkSGFuZGxlcihjYik7XHJcbiAgICB9XHJcbiAgICByZW1vdmVVc2VyTG9hZGVkKGNiKSB7XHJcbiAgICAgICAgdGhpcy5fdXNlckxvYWRlZC5yZW1vdmVIYW5kbGVyKGNiKTtcclxuICAgIH1cclxuXHJcbiAgICBhZGRVc2VyVW5sb2FkZWQoY2IpIHtcclxuICAgICAgICB0aGlzLl91c2VyVW5sb2FkZWQuYWRkSGFuZGxlcihjYik7XHJcbiAgICB9XHJcbiAgICByZW1vdmVVc2VyVW5sb2FkZWQoY2IpIHtcclxuICAgICAgICB0aGlzLl91c2VyVW5sb2FkZWQucmVtb3ZlSGFuZGxlcihjYik7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkU2lsZW50UmVuZXdFcnJvcihjYikge1xyXG4gICAgICAgIHRoaXMuX3NpbGVudFJlbmV3RXJyb3IuYWRkSGFuZGxlcihjYik7XHJcbiAgICB9XHJcbiAgICByZW1vdmVTaWxlbnRSZW5ld0Vycm9yKGNiKSB7XHJcbiAgICAgICAgdGhpcy5fc2lsZW50UmVuZXdFcnJvci5yZW1vdmVIYW5kbGVyKGNiKTtcclxuICAgIH1cclxuICAgIF9yYWlzZVNpbGVudFJlbmV3RXJyb3IoZSkge1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyRXZlbnRzLl9yYWlzZVNpbGVudFJlbmV3RXJyb3JcIiwgZS5tZXNzYWdlKTtcclxuICAgICAgICB0aGlzLl9zaWxlbnRSZW5ld0Vycm9yLnJhaXNlKGUpO1xyXG4gICAgfVxyXG5cclxuICAgIGFkZFVzZXJTaWduZWRJbihjYikge1xyXG4gICAgICAgIHRoaXMuX3VzZXJTaWduZWRJbi5hZGRIYW5kbGVyKGNiKTtcclxuICAgIH1cclxuICAgIHJlbW92ZVVzZXJTaWduZWRJbihjYikge1xyXG4gICAgICAgIHRoaXMuX3VzZXJTaWduZWRJbi5yZW1vdmVIYW5kbGVyKGNiKTtcclxuICAgIH1cclxuICAgIF9yYWlzZVVzZXJTaWduZWRJbigpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJVc2VyTWFuYWdlckV2ZW50cy5fcmFpc2VVc2VyU2lnbmVkSW5cIik7XHJcbiAgICAgICAgdGhpcy5fdXNlclNpZ25lZEluLnJhaXNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkVXNlclNpZ25lZE91dChjYikge1xyXG4gICAgICAgIHRoaXMuX3VzZXJTaWduZWRPdXQuYWRkSGFuZGxlcihjYik7XHJcbiAgICB9XHJcbiAgICByZW1vdmVVc2VyU2lnbmVkT3V0KGNiKSB7XHJcbiAgICAgICAgdGhpcy5fdXNlclNpZ25lZE91dC5yZW1vdmVIYW5kbGVyKGNiKTtcclxuICAgIH1cclxuICAgIF9yYWlzZVVzZXJTaWduZWRPdXQoKSB7XHJcbiAgICAgICAgTG9nLmRlYnVnKFwiVXNlck1hbmFnZXJFdmVudHMuX3JhaXNlVXNlclNpZ25lZE91dFwiKTtcclxuICAgICAgICB0aGlzLl91c2VyU2lnbmVkT3V0LnJhaXNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkVXNlclNlc3Npb25DaGFuZ2VkKGNiKSB7XHJcbiAgICAgICAgdGhpcy5fdXNlclNlc3Npb25DaGFuZ2VkLmFkZEhhbmRsZXIoY2IpO1xyXG4gICAgfVxyXG4gICAgcmVtb3ZlVXNlclNlc3Npb25DaGFuZ2VkKGNiKSB7XHJcbiAgICAgICAgdGhpcy5fdXNlclNlc3Npb25DaGFuZ2VkLnJlbW92ZUhhbmRsZXIoY2IpO1xyXG4gICAgfVxyXG4gICAgX3JhaXNlVXNlclNlc3Npb25DaGFuZ2VkKCkge1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIlVzZXJNYW5hZ2VyRXZlbnRzLl9yYWlzZVVzZXJTZXNzaW9uQ2hhbmdlZFwiKTtcclxuICAgICAgICB0aGlzLl91c2VyU2Vzc2lvbkNoYW5nZWQucmFpc2UoKTtcclxuICAgIH1cclxufVxyXG4iLCIvLyBDb3B5cmlnaHQgKGMpIEJyb2NrIEFsbGVuICYgRG9taW5pY2sgQmFpZXIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuIFNlZSBMSUNFTlNFIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24uXHJcblxyXG5pbXBvcnQgeyBMb2cgfSBmcm9tICcuL0xvZy5qcyc7XHJcbmltcG9ydCB7IE9pZGNDbGllbnRTZXR0aW5ncyB9IGZyb20gJy4vT2lkY0NsaWVudFNldHRpbmdzLmpzJztcclxuaW1wb3J0IHsgUmVkaXJlY3ROYXZpZ2F0b3IgfSBmcm9tICcuL1JlZGlyZWN0TmF2aWdhdG9yLmpzJztcclxuaW1wb3J0IHsgUG9wdXBOYXZpZ2F0b3IgfSBmcm9tICcuL1BvcHVwTmF2aWdhdG9yLmpzJztcclxuaW1wb3J0IHsgSUZyYW1lTmF2aWdhdG9yIH0gZnJvbSAnLi9JRnJhbWVOYXZpZ2F0b3IuanMnO1xyXG5pbXBvcnQgeyBXZWJTdG9yYWdlU3RhdGVTdG9yZSB9IGZyb20gJy4vV2ViU3RvcmFnZVN0YXRlU3RvcmUuanMnO1xyXG5pbXBvcnQgeyBHbG9iYWwgfSBmcm9tICcuL0dsb2JhbC5qcyc7XHJcbmltcG9ydCB7IFNpZ25pblJlcXVlc3QgfSBmcm9tICcuL1NpZ25pblJlcXVlc3QuanMnO1xyXG5cclxuY29uc3QgRGVmYXVsdEFjY2Vzc1Rva2VuRXhwaXJpbmdOb3RpZmljYXRpb25UaW1lID0gNjA7XHJcbmNvbnN0IERlZmF1bHRDaGVja1Nlc3Npb25JbnRlcnZhbCA9IDIwMDA7XHJcblxyXG5leHBvcnQgY2xhc3MgVXNlck1hbmFnZXJTZXR0aW5ncyBleHRlbmRzIE9pZGNDbGllbnRTZXR0aW5ncyB7XHJcbiAgICBjb25zdHJ1Y3Rvcih7XHJcbiAgICAgICAgcG9wdXBfcmVkaXJlY3RfdXJpLFxyXG4gICAgICAgIHBvcHVwX3Bvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaSxcclxuICAgICAgICBwb3B1cFdpbmRvd0ZlYXR1cmVzLFxyXG4gICAgICAgIHBvcHVwV2luZG93VGFyZ2V0LFxyXG4gICAgICAgIHNpbGVudF9yZWRpcmVjdF91cmksXHJcbiAgICAgICAgc2lsZW50UmVxdWVzdFRpbWVvdXQsXHJcbiAgICAgICAgYXV0b21hdGljU2lsZW50UmVuZXcgPSBmYWxzZSxcclxuICAgICAgICB2YWxpZGF0ZVN1Yk9uU2lsZW50UmVuZXcgPSBmYWxzZSxcclxuICAgICAgICBpbmNsdWRlSWRUb2tlbkluU2lsZW50UmVuZXcgPSB0cnVlLFxyXG4gICAgICAgIG1vbml0b3JTZXNzaW9uID0gdHJ1ZSxcclxuICAgICAgICBtb25pdG9yQW5vbnltb3VzU2Vzc2lvbiA9IGZhbHNlLFxyXG4gICAgICAgIGNoZWNrU2Vzc2lvbkludGVydmFsID0gRGVmYXVsdENoZWNrU2Vzc2lvbkludGVydmFsLFxyXG4gICAgICAgIHN0b3BDaGVja1Nlc3Npb25PbkVycm9yID0gdHJ1ZSxcclxuICAgICAgICBxdWVyeV9zdGF0dXNfcmVzcG9uc2VfdHlwZSxcclxuICAgICAgICByZXZva2VBY2Nlc3NUb2tlbk9uU2lnbm91dCA9IGZhbHNlLFxyXG4gICAgICAgIGFjY2Vzc1Rva2VuRXhwaXJpbmdOb3RpZmljYXRpb25UaW1lID0gRGVmYXVsdEFjY2Vzc1Rva2VuRXhwaXJpbmdOb3RpZmljYXRpb25UaW1lLFxyXG4gICAgICAgIHJlZGlyZWN0TmF2aWdhdG9yID0gbmV3IFJlZGlyZWN0TmF2aWdhdG9yKCksXHJcbiAgICAgICAgcG9wdXBOYXZpZ2F0b3IgPSBuZXcgUG9wdXBOYXZpZ2F0b3IoKSxcclxuICAgICAgICBpZnJhbWVOYXZpZ2F0b3IgPSBuZXcgSUZyYW1lTmF2aWdhdG9yKCksXHJcbiAgICAgICAgdXNlclN0b3JlID0gbmV3IFdlYlN0b3JhZ2VTdGF0ZVN0b3JlKHsgc3RvcmU6IEdsb2JhbC5zZXNzaW9uU3RvcmFnZSB9KVxyXG4gICAgfSA9IHt9KSB7XHJcbiAgICAgICAgc3VwZXIoYXJndW1lbnRzWzBdKTtcclxuXHJcbiAgICAgICAgdGhpcy5fcG9wdXBfcmVkaXJlY3RfdXJpID0gcG9wdXBfcmVkaXJlY3RfdXJpO1xyXG4gICAgICAgIHRoaXMuX3BvcHVwX3Bvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaSA9IHBvcHVwX3Bvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaTtcclxuICAgICAgICB0aGlzLl9wb3B1cFdpbmRvd0ZlYXR1cmVzID0gcG9wdXBXaW5kb3dGZWF0dXJlcztcclxuICAgICAgICB0aGlzLl9wb3B1cFdpbmRvd1RhcmdldCA9IHBvcHVwV2luZG93VGFyZ2V0O1xyXG5cclxuICAgICAgICB0aGlzLl9zaWxlbnRfcmVkaXJlY3RfdXJpID0gc2lsZW50X3JlZGlyZWN0X3VyaTtcclxuICAgICAgICB0aGlzLl9zaWxlbnRSZXF1ZXN0VGltZW91dCA9IHNpbGVudFJlcXVlc3RUaW1lb3V0O1xyXG4gICAgICAgIHRoaXMuX2F1dG9tYXRpY1NpbGVudFJlbmV3ID0gYXV0b21hdGljU2lsZW50UmVuZXc7XHJcbiAgICAgICAgdGhpcy5fdmFsaWRhdGVTdWJPblNpbGVudFJlbmV3ID0gdmFsaWRhdGVTdWJPblNpbGVudFJlbmV3O1xyXG4gICAgICAgIHRoaXMuX2luY2x1ZGVJZFRva2VuSW5TaWxlbnRSZW5ldyA9IGluY2x1ZGVJZFRva2VuSW5TaWxlbnRSZW5ldztcclxuICAgICAgICB0aGlzLl9hY2Nlc3NUb2tlbkV4cGlyaW5nTm90aWZpY2F0aW9uVGltZSA9IGFjY2Vzc1Rva2VuRXhwaXJpbmdOb3RpZmljYXRpb25UaW1lO1xyXG5cclxuICAgICAgICB0aGlzLl9tb25pdG9yU2Vzc2lvbiA9IG1vbml0b3JTZXNzaW9uO1xyXG4gICAgICAgIHRoaXMuX21vbml0b3JBbm9ueW1vdXNTZXNzaW9uID0gbW9uaXRvckFub255bW91c1Nlc3Npb247XHJcbiAgICAgICAgdGhpcy5fY2hlY2tTZXNzaW9uSW50ZXJ2YWwgPSBjaGVja1Nlc3Npb25JbnRlcnZhbDtcclxuICAgICAgICB0aGlzLl9zdG9wQ2hlY2tTZXNzaW9uT25FcnJvciA9IHN0b3BDaGVja1Nlc3Npb25PbkVycm9yO1xyXG4gICAgICAgIGlmIChxdWVyeV9zdGF0dXNfcmVzcG9uc2VfdHlwZSkge1xyXG4gICAgICAgICAgICB0aGlzLl9xdWVyeV9zdGF0dXNfcmVzcG9uc2VfdHlwZSA9IHF1ZXJ5X3N0YXR1c19yZXNwb25zZV90eXBlO1xyXG4gICAgICAgIH0gXHJcbiAgICAgICAgZWxzZSBpZiAoYXJndW1lbnRzWzBdICYmIGFyZ3VtZW50c1swXS5yZXNwb25zZV90eXBlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3F1ZXJ5X3N0YXR1c19yZXNwb25zZV90eXBlID0gU2lnbmluUmVxdWVzdC5pc09pZGMoYXJndW1lbnRzWzBdLnJlc3BvbnNlX3R5cGUpID8gXCJpZF90b2tlblwiIDogXCJjb2RlXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLl9xdWVyeV9zdGF0dXNfcmVzcG9uc2VfdHlwZSA9IFwiaWRfdG9rZW5cIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fcmV2b2tlQWNjZXNzVG9rZW5PblNpZ25vdXQgPSByZXZva2VBY2Nlc3NUb2tlbk9uU2lnbm91dDtcclxuXHJcbiAgICAgICAgdGhpcy5fcmVkaXJlY3ROYXZpZ2F0b3IgPSByZWRpcmVjdE5hdmlnYXRvcjtcclxuICAgICAgICB0aGlzLl9wb3B1cE5hdmlnYXRvciA9IHBvcHVwTmF2aWdhdG9yO1xyXG4gICAgICAgIHRoaXMuX2lmcmFtZU5hdmlnYXRvciA9IGlmcmFtZU5hdmlnYXRvcjtcclxuXHJcbiAgICAgICAgdGhpcy5fdXNlclN0b3JlID0gdXNlclN0b3JlO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBwb3B1cF9yZWRpcmVjdF91cmkoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BvcHVwX3JlZGlyZWN0X3VyaTtcclxuICAgIH1cclxuICAgIGdldCBwb3B1cF9wb3N0X2xvZ291dF9yZWRpcmVjdF91cmkoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BvcHVwX3Bvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaTtcclxuICAgIH1cclxuICAgIGdldCBwb3B1cFdpbmRvd0ZlYXR1cmVzKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9wb3B1cFdpbmRvd0ZlYXR1cmVzO1xyXG4gICAgfVxyXG4gICAgZ2V0IHBvcHVwV2luZG93VGFyZ2V0KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9wb3B1cFdpbmRvd1RhcmdldDtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgc2lsZW50X3JlZGlyZWN0X3VyaSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc2lsZW50X3JlZGlyZWN0X3VyaTtcclxuICAgIH1cclxuICAgICBnZXQgc2lsZW50UmVxdWVzdFRpbWVvdXQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NpbGVudFJlcXVlc3RUaW1lb3V0O1xyXG4gICAgfVxyXG4gICAgZ2V0IGF1dG9tYXRpY1NpbGVudFJlbmV3KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9hdXRvbWF0aWNTaWxlbnRSZW5ldztcclxuICAgIH1cclxuICAgIGdldCB2YWxpZGF0ZVN1Yk9uU2lsZW50UmVuZXcoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbGlkYXRlU3ViT25TaWxlbnRSZW5ldztcclxuICAgIH1cclxuICAgIGdldCBpbmNsdWRlSWRUb2tlbkluU2lsZW50UmVuZXcoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2luY2x1ZGVJZFRva2VuSW5TaWxlbnRSZW5ldztcclxuICAgIH1cclxuICAgIGdldCBhY2Nlc3NUb2tlbkV4cGlyaW5nTm90aWZpY2F0aW9uVGltZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fYWNjZXNzVG9rZW5FeHBpcmluZ05vdGlmaWNhdGlvblRpbWU7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IG1vbml0b3JTZXNzaW9uKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9tb25pdG9yU2Vzc2lvbjtcclxuICAgIH1cclxuICAgIGdldCBtb25pdG9yQW5vbnltb3VzU2Vzc2lvbigpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fbW9uaXRvckFub255bW91c1Nlc3Npb247XHJcbiAgICB9XHJcbiAgICBnZXQgY2hlY2tTZXNzaW9uSW50ZXJ2YWwoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NoZWNrU2Vzc2lvbkludGVydmFsO1xyXG4gICAgfVxyXG4gICAgZ2V0IHN0b3BDaGVja1Nlc3Npb25PbkVycm9yKCl7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0b3BDaGVja1Nlc3Npb25PbkVycm9yO1xyXG4gICAgfVxyXG4gICAgZ2V0IHF1ZXJ5X3N0YXR1c19yZXNwb25zZV90eXBlKCl7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3F1ZXJ5X3N0YXR1c19yZXNwb25zZV90eXBlO1xyXG4gICAgfVxyXG4gICAgZ2V0IHJldm9rZUFjY2Vzc1Rva2VuT25TaWdub3V0KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9yZXZva2VBY2Nlc3NUb2tlbk9uU2lnbm91dDtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgcmVkaXJlY3ROYXZpZ2F0b3IoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlZGlyZWN0TmF2aWdhdG9yO1xyXG4gICAgfVxyXG4gICAgZ2V0IHBvcHVwTmF2aWdhdG9yKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9wb3B1cE5hdmlnYXRvcjtcclxuICAgIH1cclxuICAgIGdldCBpZnJhbWVOYXZpZ2F0b3IoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lmcmFtZU5hdmlnYXRvcjtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgdXNlclN0b3JlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl91c2VyU3RvcmU7XHJcbiAgICB9XHJcbn1cclxuIiwiLy8gQ29weXJpZ2h0IChjKSBCcm9jayBBbGxlbiAmIERvbWluaWNrIEJhaWVyLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBTZWUgTElDRU5TRSBpbiB0aGUgcHJvamVjdCByb290IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLlxyXG5cclxuaW1wb3J0IHsgTG9nIH0gZnJvbSAnLi9Mb2cuanMnO1xyXG5pbXBvcnQgeyBHbG9iYWwgfSBmcm9tICcuL0dsb2JhbC5qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgV2ViU3RvcmFnZVN0YXRlU3RvcmUge1xyXG4gICAgY29uc3RydWN0b3Ioe3ByZWZpeCA9IFwib2lkYy5cIiwgc3RvcmUgPSBHbG9iYWwubG9jYWxTdG9yYWdlfSA9IHt9KSB7XHJcbiAgICAgICAgdGhpcy5fc3RvcmUgPSBzdG9yZTtcclxuICAgICAgICB0aGlzLl9wcmVmaXggPSBwcmVmaXg7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0KGtleSwgdmFsdWUpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJXZWJTdG9yYWdlU3RhdGVTdG9yZS5zZXRcIiwga2V5KTtcclxuXHJcbiAgICAgICAga2V5ID0gdGhpcy5fcHJlZml4ICsga2V5O1xyXG5cclxuICAgICAgICB0aGlzLl9zdG9yZS5zZXRJdGVtKGtleSwgdmFsdWUpO1xyXG5cclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0KGtleSkge1xyXG4gICAgICAgIExvZy5kZWJ1ZyhcIldlYlN0b3JhZ2VTdGF0ZVN0b3JlLmdldFwiLCBrZXkpO1xyXG5cclxuICAgICAgICBrZXkgPSB0aGlzLl9wcmVmaXggKyBrZXk7XHJcblxyXG4gICAgICAgIGxldCBpdGVtID0gdGhpcy5fc3RvcmUuZ2V0SXRlbShrZXkpO1xyXG5cclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGl0ZW0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbW92ZShrZXkpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJXZWJTdG9yYWdlU3RhdGVTdG9yZS5yZW1vdmVcIiwga2V5KTtcclxuXHJcbiAgICAgICAga2V5ID0gdGhpcy5fcHJlZml4ICsga2V5O1xyXG5cclxuICAgICAgICBsZXQgaXRlbSA9IHRoaXMuX3N0b3JlLmdldEl0ZW0oa2V5KTtcclxuICAgICAgICB0aGlzLl9zdG9yZS5yZW1vdmVJdGVtKGtleSk7XHJcblxyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoaXRlbSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0QWxsS2V5cygpIHtcclxuICAgICAgICBMb2cuZGVidWcoXCJXZWJTdG9yYWdlU3RhdGVTdG9yZS5nZXRBbGxLZXlzXCIpO1xyXG5cclxuICAgICAgICB2YXIga2V5cyA9IFtdO1xyXG5cclxuICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5fc3RvcmUubGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAgICAgICAgIGxldCBrZXkgPSB0aGlzLl9zdG9yZS5rZXkoaW5kZXgpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGtleS5pbmRleE9mKHRoaXMuX3ByZWZpeCkgPT09IDApIHtcclxuICAgICAgICAgICAgICAgIGtleXMucHVzaChrZXkuc3Vic3RyKHRoaXMuX3ByZWZpeC5sZW5ndGgpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShrZXlzKTtcclxuICAgIH1cclxufVxyXG4iLCIvKlxyXG5CYXNlZCBvbiB0aGUgd29yayBvZiBBdXRoMFxyXG5odHRwczovL2dpdGh1Yi5jb20vYXV0aDAvaWR0b2tlbi12ZXJpZmllclxyXG5odHRwczovL2dpdGh1Yi5jb20vYXV0aDAvaWR0b2tlbi12ZXJpZmllci9ibG9iL21hc3Rlci9MSUNFTlNFXHJcbldoaWNoIGlzIGJhc2VkIG9uIHRoZSB3b3JrIG9mIFRvbSBXdVxyXG5odHRwOi8vd3d3LWNzLXN0dWRlbnRzLnN0YW5mb3JkLmVkdS9+dGp3L2pzYm4vXHJcbmh0dHA6Ly93d3ctY3Mtc3R1ZGVudHMuc3RhbmZvcmQuZWR1L350ancvanNibi9MSUNFTlNFXHJcbiovXHJcblxyXG4vKlxyXG4gKiBUbyBzdXBwb3J0IG1vc3QgYmFzaWMgT3BlbklkIHVzZSBjYXNlcyAodXNpbmcgUlNBMjU2KSwgd2UgY2FuIGdldCBhd2F5IHdpdGhvdXRcclxuICogcmVxdWlyaW5nIHRoZSBmdWxsIGpyc2FzaWduIGZlYXR1cmUgc2V0IChhbmQgcmVzdWx0aW5nIG1hc3NpdmUgYnVuZGxlKS5cclxuICpcclxuICogLSBTdXBwb3J0IFJTQSAyNTYgYWxnb3JpdGhtIChvcHRpb25hbGx5IGNvdWxkIHN1cHBvcnQgUlNBKiBmYW1pbHkpXHJcbiAqIC0gUGFyc2UgSldUIHRva2VucyB1c2luZyB0aGUgKG4pIHBhcmFtZXRlci5cclxuICogLSBWZXJpZnkgc2lnbmF0dXJlIG9mIGlkX3Rva2Vuc1xyXG4gKiAtIFZlcmlmeSBhdF9oYXNoIG9mIGFjY2Vzc190b2tlbnNcclxuICogLSBQZXJmb3JtIGNvbW1vbiBiYXNlNjQgZW5jb2RpbmcvZGVjb2RpbmcgdGFza3MuXHJcbiAqL1xyXG5cclxuaW1wb3J0IEpTQk4gZnJvbSAnanNibic7XHJcbmltcG9ydCBTSEEyNTYgZnJvbSAnY3J5cHRvLWpzL3NoYTI1Nic7XHJcbmltcG9ydCBiYXNlNjRKcyBmcm9tICdiYXNlNjQtanMnO1xyXG5cclxudmFyIEJpZ0ludGVnZXIgPSBKU0JOLkJpZ0ludGVnZXI7XHJcblxyXG4vKiEgKGMpIFRvbSBXdSB8IGh0dHA6Ly93d3ctY3Mtc3R1ZGVudHMuc3RhbmZvcmQuZWR1L350ancvanNibi9cclxuICovXHJcbnZhciBiNjRtYXAgPSBcIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky9cIjtcclxudmFyIGI2NHBhZCA9IFwiPVwiO1xyXG5cclxuY29uc3QgQmFzZTY0ID0ge1xyXG4gICAgYjY0dG9oZXgocykge1xyXG4gICAgICAgIHZhciByZXQgPSBcIlwiO1xyXG4gICAgICAgIHZhciBpO1xyXG4gICAgICAgIHZhciBrID0gMDsgLy8gYjY0IHN0YXRlLCAwLTNcclxuICAgICAgICB2YXIgc2xvcDtcclxuICAgICAgICBmb3IoaSA9IDA7IGkgPCBzLmxlbmd0aDsgKytpKSB7XHJcbiAgICAgICAgICAgIGlmKHMuY2hhckF0KGkpID09PSBiNjRwYWQpIGJyZWFrO1xyXG4gICAgICAgICAgICB2YXIgdiA9IGI2NG1hcC5pbmRleE9mKHMuY2hhckF0KGkpKTtcclxuICAgICAgICAgICAgaWYodiA8IDApIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICBpZihrID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICByZXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSh2ID4+IDIpO1xyXG4gICAgICAgICAgICAgICAgc2xvcCA9IHYgJiAzO1xyXG4gICAgICAgICAgICAgICAgayA9IDE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZihrID09PSAxKSB7XHJcbiAgICAgICAgICAgICAgICByZXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSgoc2xvcCA8PCAyKSB8ICh2ID4+IDQpKTtcclxuICAgICAgICAgICAgICAgIHNsb3AgPSB2ICYgMHhmO1xyXG4gICAgICAgICAgICAgICAgayA9IDI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZihrID09PSAyKSB7XHJcbiAgICAgICAgICAgICAgICByZXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShzbG9wKTtcclxuICAgICAgICAgICAgICAgIHJldCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHYgPj4gMik7XHJcbiAgICAgICAgICAgICAgICBzbG9wID0gdiAmIDM7XHJcbiAgICAgICAgICAgICAgICBrID0gMztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJldCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKChzbG9wIDw8IDIpIHwgKHYgPj4gNCkpO1xyXG4gICAgICAgICAgICAgICAgcmV0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUodiAmIDB4Zik7XHJcbiAgICAgICAgICAgICAgICBrID0gMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZihrID09PSAxKVxyXG4gICAgICAgICAgICByZXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShzbG9wIDw8IDIpO1xyXG4gICAgICAgIHJldHVybiByZXQ7XHJcbiAgICB9LFxyXG4gICAgaGV4VG9CYXNlNjQoaCkge1xyXG4gICAgICAgIHZhciBpO1xyXG4gICAgICAgIHZhciBjO1xyXG4gICAgICAgIHZhciByZXQgPSBcIlwiO1xyXG4gICAgICAgIGZvcihpID0gMDsgaSszIDw9IGgubGVuZ3RoOyBpKz0zKSB7XHJcbiAgICAgICAgICAgIGMgPSBwYXJzZUludChoLnN1YnN0cmluZyhpLGkrMyksMTYpO1xyXG4gICAgICAgICAgICByZXQgKz0gYjY0bWFwLmNoYXJBdChjID4+IDYpICsgYjY0bWFwLmNoYXJBdChjICYgNjMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZihpKzEgPT09IGgubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGMgPSBwYXJzZUludChoLnN1YnN0cmluZyhpLGkrMSksMTYpO1xyXG4gICAgICAgICAgICByZXQgKz0gYjY0bWFwLmNoYXJBdChjIDw8IDIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmKGkrMiA9PT0gaC5sZW5ndGgpIHtcclxuICAgICAgICAgICAgYyA9IHBhcnNlSW50KGguc3Vic3RyaW5nKGksaSsyKSwxNik7XHJcbiAgICAgICAgICAgIHJldCArPSBiNjRtYXAuY2hhckF0KGMgPj4gMikgKyBiNjRtYXAuY2hhckF0KChjICYgMykgPDwgNCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChiNjRwYWQpIHdoaWxlKChyZXQubGVuZ3RoICYgMykgPiAwKSByZXQgKz0gYjY0cGFkO1xyXG4gICAgICAgIHJldHVybiByZXQ7XHJcbiAgICB9LFxyXG5cclxuICAgIHBhZGRpbmcoc3RyKSB7XHJcbiAgICAgICAgdmFyIG1vZCA9IChzdHIubGVuZ3RoICUgNCk7XHJcbiAgICAgICAgdmFyIHBhZCA9IDQgLSBtb2Q7XHJcblxyXG4gICAgICAgIGlmIChtb2QgPT09IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIHN0cjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBzdHIgKyAobmV3IEFycmF5KDEgKyBwYWQpKS5qb2luKCc9Jyk7XHJcbiAgICB9LFxyXG5cclxuICAgIGJ5dGVBcnJheVRvSGV4KHJhdykge1xyXG4gICAgICAgIHZhciBIRVggPSAnJztcclxuXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByYXcubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIF9oZXggPSByYXdbaV0udG9TdHJpbmcoMTYpO1xyXG4gICAgICAgICAgICBIRVggKz0gKF9oZXgubGVuZ3RoID09PSAyID8gX2hleCA6ICcwJyArIF9oZXgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIEhFWDtcclxuICAgIH0sXHJcblxyXG4gICAgZGVjb2RlVG9IRVgoc3RyKSB7XHJcbiAgICAgICAgcmV0dXJuIEJhc2U2NC5ieXRlQXJyYXlUb0hleChiYXNlNjRKcy50b0J5dGVBcnJheShCYXNlNjQucGFkZGluZyhzdHIpKSk7XHJcbiAgICB9LFxyXG5cclxuICAgIGJhc2U2NFRvQmFzZTY0VXJsKHMpIHtcclxuICAgICAgICBzID0gcy5yZXBsYWNlKC89L2csIFwiXCIpO1xyXG4gICAgICAgIHMgPSBzLnJlcGxhY2UoL1xcKy9nLCBcIi1cIik7XHJcbiAgICAgICAgcyA9IHMucmVwbGFjZSgvXFwvL2csIFwiX1wiKTtcclxuICAgICAgICByZXR1cm4gcztcclxuICAgIH0sXHJcblxyXG4gICAgdXJsRGVjb2RlKHN0cikge1xyXG4gICAgICAgIHN0ciA9IHN0ci5yZXBsYWNlKC8tL2csICcrJykgLy8gQ29udmVydCAnLScgdG8gJysnXHJcbiAgICAgICAgICAgIC5yZXBsYWNlKC9fL2csICcvJykgLy8gQ29udmVydCAnXycgdG8gJy8nXHJcbiAgICAgICAgICAgIC5yZXBsYWNlKC9cXHMvZywgJyAnKTsgLy8gQ29udmVydCAnXFxzJyB0byAnICdcclxuXHJcbiAgICAgICAgcmV0dXJuIGF0b2Ioc3RyKTtcclxuICAgIH1cclxufTtcclxuXHJcblxyXG52YXIgRGlnZXN0SW5mb0hlYWQgPSB7XHJcbiAgICBzaGExOiAnMzAyMTMwMDkwNjA1MmIwZTAzMDIxYTA1MDAwNDE0JyxcclxuICAgIHNoYTIyNDogJzMwMmQzMDBkMDYwOTYwODY0ODAxNjUwMzA0MDIwNDA1MDAwNDFjJyxcclxuICAgIHNoYTI1NjogJzMwMzEzMDBkMDYwOTYwODY0ODAxNjUwMzA0MDIwMTA1MDAwNDIwJyxcclxuICAgIHNoYTM4NDogJzMwNDEzMDBkMDYwOTYwODY0ODAxNjUwMzA0MDIwMjA1MDAwNDMwJyxcclxuICAgIHNoYTUxMjogJzMwNTEzMDBkMDYwOTYwODY0ODAxNjUwMzA0MDIwMzA1MDAwNDQwJyxcclxuICAgIG1kMjogJzMwMjAzMDBjMDYwODJhODY0ODg2ZjcwZDAyMDIwNTAwMDQxMCcsXHJcbiAgICBtZDU6ICczMDIwMzAwYzA2MDgyYTg2NDg4NmY3MGQwMjA1MDUwMDA0MTAnLFxyXG4gICAgcmlwZW1kMTYwOiAnMzAyMTMwMDkwNjA1MmIyNDAzMDIwMTA1MDAwNDE0J1xyXG59O1xyXG5cclxudmFyIERpZ2VzdEFsZ3MgPSB7XHJcbiAgICBzaGEyNTY6IFNIQTI1NixcclxuICAgIFNIQTI1NjpTSEEyNTZcclxufTtcclxuXHJcbmZ1bmN0aW9uIFJTQVZlcmlmaWVyKG1vZHVsdXMsIGV4cCkge1xyXG4gICAgdGhpcy5uID0gbnVsbDtcclxuICAgIHRoaXMuZSA9IDA7XHJcblxyXG4gICAgaWYgKG1vZHVsdXMgIT0gbnVsbCAmJiBleHAgIT0gbnVsbCAmJiBtb2R1bHVzLmxlbmd0aCA+IDAgJiYgZXhwLmxlbmd0aCA+IDApIHtcclxuICAgICAgICB0aGlzLm4gPSBuZXcgQmlnSW50ZWdlcihtb2R1bHVzLCAxNik7XHJcbiAgICAgICAgdGhpcy5lID0gcGFyc2VJbnQoZXhwLCAxNik7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBrZXkgZGF0YScpO1xyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRBbGdvcml0aG1Gcm9tRGlnZXN0KGhEaWdlc3RJbmZvKSB7XHJcbiAgICBmb3IgKHZhciBhbGdOYW1lIGluIERpZ2VzdEluZm9IZWFkKSB7XHJcbiAgICAgICAgdmFyIGhlYWQgPSBEaWdlc3RJbmZvSGVhZFthbGdOYW1lXTtcclxuICAgICAgICB2YXIgbGVuID0gaGVhZC5sZW5ndGg7XHJcblxyXG4gICAgICAgIGlmIChoRGlnZXN0SW5mby5zdWJzdHJpbmcoMCwgbGVuKSA9PT0gaGVhZCkge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgYWxnOiBhbGdOYW1lLFxyXG4gICAgICAgICAgICAgICAgaGFzaDogaERpZ2VzdEluZm8uc3Vic3RyaW5nKGxlbilcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gW107XHJcbn1cclxuXHJcblxyXG5SU0FWZXJpZmllci5wcm90b3R5cGUudmVyaWZ5ID0gZnVuY3Rpb24gKG1zZywgZW5jc2lnKSB7XHJcbiAgICBlbmNzaWcgPSBCYXNlNjQuZGVjb2RlVG9IRVgoZW5jc2lnKTtcclxuICAgIGVuY3NpZyA9IGVuY3NpZy5yZXBsYWNlKC9bXjAtOWEtZl18W1xcc1xcbl1dL2lnLCAnJyk7XHJcblxyXG4gICAgdmFyIHNpZyA9IG5ldyBCaWdJbnRlZ2VyKGVuY3NpZywgMTYpO1xyXG5cclxuICAgIGlmIChzaWcuYml0TGVuZ3RoKCkgPiB0aGlzLm4uYml0TGVuZ3RoKCkpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NpZ25hdHVyZSBkb2VzIG5vdCBtYXRjaCB3aXRoIHRoZSBrZXkgbW9kdWx1cy4nKTtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgZGVjcnlwdGVkU2lnID0gc2lnLm1vZFBvd0ludCh0aGlzLmUsIHRoaXMubik7XHJcbiAgICB2YXIgZGlnZXN0ID0gZGVjcnlwdGVkU2lnLnRvU3RyaW5nKDE2KS5yZXBsYWNlKC9eMWYrMDAvLCAnJyk7XHJcbiAgICB2YXIgZGlnZXN0SW5mbyA9IGdldEFsZ29yaXRobUZyb21EaWdlc3QoZGlnZXN0KTtcclxuXHJcbiAgICBpZiAoZGlnZXN0SW5mby5sZW5ndGggPT09IDApIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFEaWdlc3RBbGdzLmhhc093blByb3BlcnR5KGRpZ2VzdEluZm8uYWxnKSkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSGFzaGluZyBhbGdvcml0aG0gaXMgbm90IHN1cHBvcnRlZC4nKTtcclxuICAgIH1cclxuXHJcbiAgICB2YXIgbXNnSGFzaCA9IERpZ2VzdEFsZ3NbZGlnZXN0SW5mby5hbGddKG1zZykudG9TdHJpbmcoKTtcclxuICAgIHJldHVybiAoZGlnZXN0SW5mby5oYXNoID09PSBtc2dIYXNoKTtcclxufTtcclxuXHJcbmNvbnN0IEFsbG93ZWRTaWduaW5nQWxncyA9IFsnUlMyNTYnXTtcclxuXHJcbmNvbnN0IGp3cyA9IHtcclxuICAgIEpXUzoge1xyXG4gICAgICAgIHBhcnNlOiBmdW5jdGlvbih0b2tlbikge1xyXG4gICAgICAgICAgICB2YXIgcGFydHMgPSB0b2tlbi5zcGxpdCgnLicpO1xyXG4gICAgICAgICAgICB2YXIgaGVhZGVyO1xyXG4gICAgICAgICAgICB2YXIgcGF5bG9hZDtcclxuXHJcbiAgICAgICAgICAgIC8vIFRoaXMgZGl2ZXJnZXMgZnJvbSBBdXRoMCdzIGltcGxlbWVudGF0aW9uLCB3aGljaCB0aHJvd3MgcmF0aGVyIHRoYW5cclxuICAgICAgICAgICAgLy8gcmV0dXJuaW5nIHVuZGVmaW5lZFxyXG4gICAgICAgICAgICBpZiAocGFydHMubGVuZ3RoICE9PSAzKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgaGVhZGVyID0gSlNPTi5wYXJzZShCYXNlNjQudXJsRGVjb2RlKHBhcnRzWzBdKSk7XHJcbiAgICAgICAgICAgICAgICBwYXlsb2FkID0gSlNPTi5wYXJzZShCYXNlNjQudXJsRGVjb2RlKHBhcnRzWzFdKSk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRXJyb3IoJ1Rva2VuIGhlYWRlciBvciBwYXlsb2FkIGlzIG5vdCB2YWxpZCBKU09OJyk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICBoZWFkZXJPYmo6IGhlYWRlcixcclxuICAgICAgICAgICAgICAgIHBheWxvYWRPYmo6IHBheWxvYWQsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfSxcclxuICAgICAgICB2ZXJpZnk6IGZ1bmN0aW9uKGp3dCwga2V5LCBhbGxvd2VkU2lnbmluZ0FsZ3MgPSBbXSkge1xyXG4gICAgICAgICAgICBhbGxvd2VkU2lnbmluZ0FsZ3MuZm9yRWFjaCgoYWxnKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoQWxsb3dlZFNpZ25pbmdBbGdzLmluZGV4T2YoYWxnKSA9PT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgc2lnbmluZyBhbGdvcml0aG06ICcgKyBhbGcpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdmFyIHZlcmlmeSA9IG5ldyBSU0FWZXJpZmllcihrZXkubiwga2V5LmUpO1xyXG4gICAgICAgICAgICB2YXIgcGFydHMgPSBqd3Quc3BsaXQoJy4nKTtcclxuXHJcbiAgICAgICAgICAgIHZhciBoZWFkZXJBbmRQYXlsb2FkID0gW3BhcnRzWzBdLCBwYXJ0c1sxXV0uam9pbignLicpO1xyXG4gICAgICAgICAgICByZXR1cm4gdmVyaWZ5LnZlcmlmeShoZWFkZXJBbmRQYXlsb2FkLCBwYXJ0c1syXSk7XHJcbiAgICAgICAgfSxcclxuICAgIH0sXHJcbn07XHJcblxyXG5jb25zdCBLZXlVdGlsID0ge1xyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIGRlY29kZWQga2V5cyBpbiBIZXggZm9ybWF0IGZvciB1c2UgaW4gY3J5cHRvIGZ1bmN0aW9ucy5cclxuICAgICAqIFN1cHBvcnRzIG1vZHVsdXMvZXhwb25lbnQtc3R5bGUga2V5cy5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge29iamVjdH0ga2V5IHRoZSBzZWN1cml0eSBrZXlcclxuICAgICAqIEByZXR1cm5zXHJcbiAgICAgKi9cclxuICAgIGdldEtleShrZXkpIHtcclxuICAgICAgICBpZiAoa2V5Lmt0eSA9PT0gJ1JTQScpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIGU6IEJhc2U2NC5kZWNvZGVUb0hFWChrZXkuZSksXHJcbiAgICAgICAgICAgICAgICBuOiBCYXNlNjQuZGVjb2RlVG9IRVgoa2V5Lm4pLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9LFxyXG59O1xyXG5cclxuY29uc3QgWDUwOSA9IHtcclxuICAgIGdldFB1YmxpY0tleUZyb21DZXJ0UEVNOiBmdW5jdGlvbigpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vdCBpbXBsZW1lbnRlZC4gVXNlIHRoZSBmdWxsIG9pZGMtY2xpZW50IGxpYnJhcnkgaWYgeW91IG5lZWQgc3VwcG9ydCBmb3IgWDUwOS4nKTtcclxuICAgIH0sXHJcbn07XHJcblxyXG5jb25zdCBjcnlwdG8gPSB7XHJcbiAgICBVdGlsOiB7XHJcbiAgICAgICAgaGFzaFN0cmluZzogZnVuY3Rpb24odmFsdWUsIGFsZykge1xyXG4gICAgICAgICAgICB2YXIgaGFzaEZ1bmMgPSBEaWdlc3RBbGdzW2FsZ107XHJcbiAgICAgICAgICAgIHJldHVybiBoYXNoRnVuYyh2YWx1ZSkudG9TdHJpbmcoKTtcclxuICAgICAgICB9LFxyXG4gICAgfVxyXG59O1xyXG5cclxuZnVuY3Rpb24gaGV4dG9iNjR1KHMpIHtcclxuICAgIGlmIChzLmxlbmd0aCAlIDIgPT09IDEpIHtcclxuICAgICAgICBzID0gJzAnICsgcztcclxuICAgIH1cclxuICAgIHJldHVybiBCYXNlNjQuYmFzZTY0VG9CYXNlNjRVcmwoQmFzZTY0LmhleFRvQmFzZTY0KHMpKTtcclxufVxyXG5cclxuY29uc3Qge2I2NHRvaGV4fSA9IEJhc2U2NDtcclxuXHJcbmV4cG9ydCB7XHJcbiAgICBqd3MsXHJcbiAgICBLZXlVdGlsLFxyXG4gICAgWDUwOSxcclxuICAgIGNyeXB0byxcclxuICAgIGhleHRvYjY0dSxcclxuICAgIGI2NHRvaGV4LFxyXG4gICAgQWxsb3dlZFNpZ25pbmdBbGdzXHJcbn07XHJcbiIsImltcG9ydCB1dWlkNCBmcm9tICd1dWlkL3Y0JztcclxuXHJcbi8qKlxyXG4gKiBHZW5lcmF0ZXMgUkZDNDEyMiB2ZXJzaW9uIDQgZ3VpZCAoKVxyXG4gKi9cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJhbmRvbSgpIHtcclxuICByZXR1cm4gdXVpZDQoKS5yZXBsYWNlKC8tL2csICcnKTtcclxufVxyXG4iLCJjb25zdCBWZXJzaW9uID0gXCIxLjEwLjAtYmV0YS4xXCI7IGV4cG9ydCB7VmVyc2lvbn07Il0sInNvdXJjZVJvb3QiOiIifQ== \ No newline at end of file diff --git a/dist/oidc-client.rsa256.slim.min.js b/dist/oidc-client.rsa256.slim.min.js index 89eff9a9..7e19d804 100644 --- a/dist/oidc-client.rsa256.slim.min.js +++ b/dist/oidc-client.rsa256.slim.min.js @@ -1,3 +1,3 @@ -var Oidc=function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function t(){return e.default}:function t(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=62)}([function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=function(){function e(e,t){for(var r=0;r=4){for(var t=arguments.length,r=Array(t),n=0;n=3){for(var t=arguments.length,r=Array(t),n=0;n=2){for(var t=arguments.length,r=Array(t),n=0;n=1){for(var t=arguments.length,r=Array(t),n=0;n1&&void 0!==arguments[1]?arguments[1]:i.JsonService;if(function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),!t)throw o.Log.error("MetadataService: No settings passed to MetadataService"),new Error("settings");this._settings=t,this._jsonService=new r(["application/jwk-set+json"])}return e.prototype.getMetadata=function e(){var t=this;return this._settings.metadata?(o.Log.debug("MetadataService.getMetadata: Returning metadata from settings"),Promise.resolve(this._settings.metadata)):this.metadataUrl?(o.Log.debug("MetadataService.getMetadata: getting metadata from",this.metadataUrl),this._jsonService.getJson(this.metadataUrl).then(function(e){return o.Log.debug("MetadataService.getMetadata: json received"),t._settings.metadata=e,e})):(o.Log.error("MetadataService.getMetadata: No authority or metadataUrl configured on settings"),Promise.reject(new Error("No authority or metadataUrl configured on settings")))},e.prototype.getIssuer=function e(){return this._getMetadataProperty("issuer")},e.prototype.getAuthorizationEndpoint=function e(){return this._getMetadataProperty("authorization_endpoint")},e.prototype.getUserInfoEndpoint=function e(){return this._getMetadataProperty("userinfo_endpoint")},e.prototype.getTokenEndpoint=function e(){var t=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];return this._getMetadataProperty("token_endpoint",t)},e.prototype.getCheckSessionIframe=function e(){return this._getMetadataProperty("check_session_iframe",!0)},e.prototype.getEndSessionEndpoint=function e(){return this._getMetadataProperty("end_session_endpoint",!0)},e.prototype.getRevocationEndpoint=function e(){return this._getMetadataProperty("revocation_endpoint",!0)},e.prototype.getKeysEndpoint=function e(){return this._getMetadataProperty("jwks_uri",!0)},e.prototype._getMetadataProperty=function e(t){var r=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return o.Log.debug("MetadataService.getMetadataProperty for: "+t),this.getMetadata().then(function(e){if(o.Log.debug("MetadataService.getMetadataProperty: metadata recieved"),void 0===e[t]){if(!0===r)return void o.Log.warn("MetadataService.getMetadataProperty: Metadata does not contain optional property "+t);throw o.Log.error("MetadataService.getMetadataProperty: Metadata does not contain property "+t),new Error("Metadata does not contain property "+t)}return e[t]})},e.prototype.getSigningKeys=function e(){var t=this;return this._settings.signingKeys?(o.Log.debug("MetadataService.getSigningKeys: Returning signingKeys from settings"),Promise.resolve(this._settings.signingKeys)):this._getMetadataProperty("jwks_uri").then(function(e){return o.Log.debug("MetadataService.getSigningKeys: jwks_uri received",e),t._jsonService.getJson(e).then(function(e){if(o.Log.debug("MetadataService.getSigningKeys: key set received",e),!e.keys)throw o.Log.error("MetadataService.getSigningKeys: Missing keys on keyset"),new Error("Missing keys on keyset");return t._settings.signingKeys=e.keys,t._settings.signingKeys})})},n(e,[{key:"metadataUrl",get:function e(){return this._metadataUrl||(this._settings.metadataUrl?this._metadataUrl=this._settings.metadataUrl:(this._metadataUrl=this._settings.authority,this._metadataUrl&&this._metadataUrl.indexOf(".well-known/openid-configuration")<0&&("/"!==this._metadataUrl[this._metadataUrl.length-1]&&(this._metadataUrl+="/"),this._metadataUrl+=".well-known/openid-configuration"))),this._metadataUrl}}]),e}()},function(e,t){var r={}.toString;e.exports=function(e){return r.call(e).slice(8,-1)}},function(e,t,r){var n=r(2),o=r(8),i=r(19),s=r(24)("src"),a=r(68),u=(""+a).split("toString");r(3).inspectSource=function(e){return a.call(e)},(e.exports=function(e,t,r,a){var c="function"==typeof r;c&&(i(r,"name")||o(r,"name",t)),e[t]!==r&&(c&&(i(r,s)||o(r,s,e[t]?""+e[t]:u.join(String(t)))),e===n?e[t]=r:a?e[t]?e[t]=r:o(e,t,r):(delete e[t],o(e,t,r)))})(Function.prototype,"toString",function e(){return"function"==typeof this&&this[s]||a.call(this)})},function(e,t,r){e.exports=!r(18)(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},function(e,t,r){var n=r(14);e.exports=function(e,t,r){if(n(e),void 0===t)return e;switch(r){case 1:return function(r){return e.call(t,r)};case 2:return function(r,n){return e.call(t,r,n)};case 3:return function(r,n,o){return e.call(t,r,n,o)}}return function(){return e.apply(t,arguments)}}},function(e,t){e.exports=function(e){if("function"!=typeof e)throw TypeError(e+" is not a function!");return e}},function(e,t){e.exports={}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.UrlUtility=void 0;var n=r(0),o=r(7);t.UrlUtility=function(){function e(){!function t(e,r){if(!(e instanceof r))throw new TypeError("Cannot call a class as a function")}(this,e)}return e.addQueryParam=function e(t,r,n){return t.indexOf("?")<0&&(t+="?"),"?"!==t[t.length-1]&&(t+="&"),t+=encodeURIComponent(r),t+="=",t+=encodeURIComponent(n)},e.parseUrlFragment=function e(t){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"#",i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:o.Global;"string"!=typeof t&&(t=i.location.href);var s=t.lastIndexOf(r);s>=0&&(t=t.substr(s+1)),"?"===r&&(s=t.indexOf("#"))>=0&&(t=t.substr(0,s));for(var a,u={},c=/([^&=]+)=([^&]*)/g,l=0;a=c.exec(t);)if(u[decodeURIComponent(a[1])]=decodeURIComponent(a[2]),l++>50)return n.Log.error("UrlUtility.parseUrlFragment: response exceeded expected number of parameters",t),{error:"Response exceeded expected number of parameters"};for(var p in u)return u;return{}},e}()},function(e,t,r){var n=r(4),o=r(66),i=r(67),s=Object.defineProperty;t.f=r(12)?Object.defineProperty:function e(t,r,a){if(n(t),r=i(r,!0),n(a),o)try{return s(t,r,a)}catch(e){}if("get"in a||"set"in a)throw TypeError("Accessors not supported!");return"value"in a&&(t[r]=a.value),t}},function(e,t){e.exports=function(e){try{return!!e()}catch(e){return!0}}},function(e,t){var r={}.hasOwnProperty;e.exports=function(e,t){return r.call(e,t)}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.JoseUtil=void 0;var n=r(116),o=function i(e){return e&&e.__esModule?e:{default:e}}(r(121));t.JoseUtil=(0,o.default)({jws:n.jws,KeyUtil:n.KeyUtil,X509:n.X509,crypto:n.crypto,hextob64u:n.hextob64u,b64tohex:n.b64tohex,AllowedSigningAlgs:n.AllowedSigningAlgs})},function(e,t,r){var n=r(10),o=r(1)("toStringTag"),i="Arguments"==n(function(){return arguments}());e.exports=function(e){var t,r,s;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(r=function(e,t){try{return e[t]}catch(e){}}(t=Object(e),o))?r:i?n(t):"Object"==(s=n(t))&&"function"==typeof t.callee?"Arguments":s}},function(e,t,r){var n=r(3),o=r(2),i=o["__core-js_shared__"]||(o["__core-js_shared__"]={});(e.exports=function(e,t){return i[e]||(i[e]=void 0!==t?t:{})})("versions",[]).push({version:n.version,mode:r(23)?"pure":"global",copyright:"© 2019 Denis Pushkarev (zloirock.ru)"})},function(e,t){e.exports=!1},function(e,t){var r=0,n=Math.random();e.exports=function(e){return"Symbol(".concat(void 0===e?"":e,")_",(++r+n).toString(36))}},function(e,t,r){var n=r(5),o=r(2).document,i=n(o)&&n(o.createElement);e.exports=function(e){return i?o.createElement(e):{}}},function(e,t){var r=Math.ceil,n=Math.floor;e.exports=function(e){return isNaN(e=+e)?0:(e>0?n:r)(e)}},function(e,t){e.exports=function(e){if(void 0==e)throw TypeError("Can't call method on "+e);return e}},function(e,t,r){var n=r(74),o=r(41);e.exports=Object.keys||function e(t){return n(t,o)}},function(e,t,r){var n=r(30),o=r(27);e.exports=function(e){return n(o(e))}},function(e,t,r){var n=r(10);e.exports=Object("z").propertyIsEnumerable(0)?Object:function(e){return"String"==n(e)?e.split(""):Object(e)}},function(e,t,r){var n=r(26),o=Math.min;e.exports=function(e){return e>0?o(n(e),9007199254740991):0}},function(e,t,r){var n=r(22)("keys"),o=r(24);e.exports=function(e){return n[e]||(n[e]=o(e))}},function(e,t,r){var n=r(17).f,o=r(19),i=r(1)("toStringTag");e.exports=function(e,t,r){e&&!o(e=r?e:e.prototype,i)&&n(e,i,{configurable:!0,value:t})}},function(e,t,r){var n=r(27);e.exports=function(e){return Object(n(e))}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.OidcClientSettings=void 0;var n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},o=function(){function e(e,t){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:{},r=t.authority,o=t.metadataUrl,i=t.metadata,d=t.signingKeys,h=t.client_id,g=t.client_secret,_=t.response_type,v=void 0===_?c:_,y=t.scope,m=void 0===y?l:y,b=t.redirect_uri,S=t.post_logout_redirect_uri,w=t.prompt,k=t.display,T=t.max_age,P=t.ui_locales,E=t.acr_values,L=t.resource,R=t.response_mode,x=t.filterProtocolClaims,C=void 0===x||x,U=t.loadUserInfo,M=void 0===U||U,O=t.staleStateAge,j=void 0===O?p:O,I=t.clockSkew,A=void 0===I?f:I,N=t.userInfoJwtIssuer,q=void 0===N?"OP":N,F=t.stateStore,J=void 0===F?new s.WebStorageStateStore:F,B=t.ResponseValidatorCtor,V=void 0===B?a.ResponseValidator:B,W=t.MetadataServiceCtor,D=void 0===W?u.MetadataService:W,H=t.extraQueryParams,z=void 0===H?{}:H,K=t.extraTokenParams,Q=void 0===K?{}:K;!function G(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this._authority=r,this._metadataUrl=o,this._metadata=i,this._signingKeys=d,this._client_id=h,this._client_secret=g,this._response_type=v,this._scope=m,this._redirect_uri=b,this._post_logout_redirect_uri=S,this._prompt=w,this._display=k,this._max_age=T,this._ui_locales=P,this._acr_values=E,this._resource=L,this._response_mode=R,this._filterProtocolClaims=!!C,this._loadUserInfo=!!M,this._staleStateAge=j,this._clockSkew=A,this._userInfoJwtIssuer=q,this._stateStore=J,this._validator=new V(this),this._metadataService=new D(this),this._extraQueryParams="object"===(void 0===z?"undefined":n(z))?z:{},this._extraTokenParams="object"===(void 0===Q?"undefined":n(Q))?Q:{}}return o(e,[{key:"client_id",get:function e(){return this._client_id},set:function e(t){if(this._client_id)throw i.Log.error("OidcClientSettings.set_client_id: client_id has already been assigned."),new Error("client_id has already been assigned.");this._client_id=t}},{key:"client_secret",get:function e(){return this._client_secret}},{key:"response_type",get:function e(){return this._response_type}},{key:"scope",get:function e(){return this._scope}},{key:"redirect_uri",get:function e(){return this._redirect_uri}},{key:"post_logout_redirect_uri",get:function e(){return this._post_logout_redirect_uri}},{key:"prompt",get:function e(){return this._prompt}},{key:"display",get:function e(){return this._display}},{key:"max_age",get:function e(){return this._max_age}},{key:"ui_locales",get:function e(){return this._ui_locales}},{key:"acr_values",get:function e(){return this._acr_values}},{key:"resource",get:function e(){return this._resource}},{key:"response_mode",get:function e(){return this._response_mode}},{key:"authority",get:function e(){return this._authority},set:function e(t){if(this._authority)throw i.Log.error("OidcClientSettings.set_authority: authority has already been assigned."),new Error("authority has already been assigned.");this._authority=t}},{key:"metadataUrl",get:function e(){return this._metadataUrl||(this._metadataUrl=this.authority,this._metadataUrl&&this._metadataUrl.indexOf(".well-known/openid-configuration")<0&&("/"!==this._metadataUrl[this._metadataUrl.length-1]&&(this._metadataUrl+="/"),this._metadataUrl+=".well-known/openid-configuration")),this._metadataUrl}},{key:"metadata",get:function e(){return this._metadata},set:function e(t){this._metadata=t}},{key:"signingKeys",get:function e(){return this._signingKeys},set:function e(t){this._signingKeys=t}},{key:"filterProtocolClaims",get:function e(){return this._filterProtocolClaims}},{key:"loadUserInfo",get:function e(){return this._loadUserInfo}},{key:"staleStateAge",get:function e(){return this._staleStateAge}},{key:"clockSkew",get:function e(){return this._clockSkew}},{key:"userInfoJwtIssuer",get:function e(){return this._userInfoJwtIssuer}},{key:"stateStore",get:function e(){return this._stateStore}},{key:"validator",get:function e(){return this._validator}},{key:"metadataService",get:function e(){return this._metadataService}},{key:"extraQueryParams",get:function e(){return this._extraQueryParams},set:function e(t){"object"===(void 0===t?"undefined":n(t))?this._extraQueryParams=t:this._extraQueryParams={}}},{key:"extraTokenParams",get:function e(){return this._extraTokenParams},set:function e(t){"object"===(void 0===t?"undefined":n(t))?this._extraTokenParams=t:this._extraTokenParams={}}}]),e}()},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.WebStorageStateStore=void 0;var n=r(0),o=r(7);t.WebStorageStateStore=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=t.prefix,n=void 0===r?"oidc.":r,i=t.store,s=void 0===i?o.Global.localStorage:i;!function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this._store=s,this._prefix=n}return e.prototype.set=function e(t,r){return n.Log.debug("WebStorageStateStore.set",t),t=this._prefix+t,this._store.setItem(t,r),Promise.resolve()},e.prototype.get=function e(t){n.Log.debug("WebStorageStateStore.get",t),t=this._prefix+t;var r=this._store.getItem(t);return Promise.resolve(r)},e.prototype.remove=function e(t){n.Log.debug("WebStorageStateStore.remove",t),t=this._prefix+t;var r=this._store.getItem(t);return this._store.removeItem(t),Promise.resolve(r)},e.prototype.getAllKeys=function e(){n.Log.debug("WebStorageStateStore.getAllKeys");for(var t=[],r=0;r0&&void 0!==arguments[0]?arguments[0]:null,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:o.Global.XMLHttpRequest,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;!function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),t&&Array.isArray(t)?this._contentTypes=t.slice():this._contentTypes=[],this._contentTypes.push("application/json"),n&&this._contentTypes.push("application/jwt"),this._XMLHttpRequest=r,this._jwtHandler=n}return e.prototype.getJson=function e(t,r){var o=this;if(!t)throw n.Log.error("JsonService.getJson: No url passed"),new Error("url");return n.Log.debug("JsonService.getJson, url: ",t),new Promise(function(e,i){var s=new o._XMLHttpRequest;s.open("GET",t);var a=o._contentTypes,u=o._jwtHandler;s.onload=function(){if(n.Log.debug("JsonService.getJson: HTTP response received, status",s.status),200===s.status){var r=s.getResponseHeader("Content-Type");if(r){var o=a.find(function(e){if(r.startsWith(e))return!0});if("application/jwt"==o)return void u(s).then(e,i);if(o)try{return void e(JSON.parse(s.responseText))}catch(e){return n.Log.error("JsonService.getJson: Error parsing JSON response",e.message),void i(e)}}i(Error("Invalid response Content-Type: "+r+", from URL: "+t))}else i(Error(s.statusText+" ("+s.status+")"))},s.onerror=function(){n.Log.error("JsonService.getJson: network error"),i(Error("Network Error"))},r&&(n.Log.debug("JsonService.getJson: token passed, setting Authorization header"),s.setRequestHeader("Authorization","Bearer "+r)),s.send()})},e.prototype.postForm=function e(t,r){var o=this;if(!t)throw n.Log.error("JsonService.postForm: No url passed"),new Error("url");return n.Log.debug("JsonService.postForm, url: ",t),new Promise(function(e,i){var s=new o._XMLHttpRequest;s.open("POST",t);var a=o._contentTypes;s.onload=function(){if(n.Log.debug("JsonService.postForm: HTTP response received, status",s.status),200!==s.status){if(400===s.status)if(o=s.getResponseHeader("Content-Type"))if(a.find(function(e){if(o.startsWith(e))return!0}))try{var r=JSON.parse(s.responseText);if(r&&r.error)return n.Log.error("JsonService.postForm: Error from server: ",r.error),void i(new Error(r.error))}catch(e){return n.Log.error("JsonService.postForm: Error parsing JSON response",e.message),void i(e)}i(Error(s.statusText+" ("+s.status+")"))}else{var o;if((o=s.getResponseHeader("Content-Type"))&&a.find(function(e){if(o.startsWith(e))return!0}))try{return void e(JSON.parse(s.responseText))}catch(e){return n.Log.error("JsonService.postForm: Error parsing JSON response",e.message),void i(e)}i(Error("Invalid response Content-Type: "+o+", from URL: "+t))}},s.onerror=function(){n.Log.error("JsonService.postForm: network error"),i(Error("Network Error"))};var u="";for(var c in r){var l=r[c];l&&(u.length>0&&(u+="&"),u+=encodeURIComponent(c),u+="=",u+=encodeURIComponent(l))}s.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),s.send(u)})},e}()},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.State=void 0;var n=function(){function e(e,t){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:{},r=t.id,n=t.data,o=t.created,s=t.request_type;!function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this._id=r||(0,i.default)(),this._data=n,this._created="number"==typeof o&&o>0?o:parseInt(Date.now()/1e3),this._request_type=s}return e.prototype.toStorageString=function e(){return o.Log.debug("State.toStorageString"),JSON.stringify({id:this.id,data:this.data,created:this.created,request_type:this.request_type})},e.fromStorageString=function t(r){return o.Log.debug("State.fromStorageString"),new e(JSON.parse(r))},e.clearStaleState=function t(r,n){var i=Date.now()/1e3-n;return r.getAllKeys().then(function(t){o.Log.debug("State.clearStaleState: got keys",t);for(var n=[],s=function s(a){var c=t[a];u=r.get(c).then(function(t){var n=!1;if(t)try{var s=e.fromStorageString(t);o.Log.debug("State.clearStaleState: got item from key: ",c,s.created),s.created<=i&&(n=!0)}catch(e){o.Log.error("State.clearStaleState: Error parsing state for key",c,e.message),n=!0}else o.Log.debug("State.clearStaleState: no item in storage for key: ",c),n=!0;if(n)return o.Log.debug("State.clearStaleState: removed item for key: ",c),r.remove(c)}),n.push(u)},a=0;ao;)r.push(arguments[o++]);return v[++_]=function(){a("function"==typeof t?t:Function(t),r)},n(_),_},d=function e(t){delete v[t]},"process"==r(10)(p)?n=function(e){p.nextTick(s(y,e,1))}:g&&g.now?n=function(e){g.now(s(y,e,1))}:h?(i=(o=new h).port2,o.port1.onmessage=m,n=s(i.postMessage,i,1)):l.addEventListener&&"function"==typeof postMessage&&!l.importScripts?(n=function(e){l.postMessage(e+"","*")},l.addEventListener("message",m,!1)):n="onreadystatechange"in c("script")?function(e){u.appendChild(c("script")).onreadystatechange=function(){u.removeChild(this),y.call(e)}}:function(e){setTimeout(s(y,e,1),0)}),e.exports={set:f,clear:d}},function(e,t){e.exports=function(e,t,r){var n=void 0===r;switch(t.length){case 0:return n?e():e.call(r);case 1:return n?e(t[0]):e.call(r,t[0]);case 2:return n?e(t[0],t[1]):e.call(r,t[0],t[1]);case 3:return n?e(t[0],t[1],t[2]):e.call(r,t[0],t[1],t[2]);case 4:return n?e(t[0],t[1],t[2],t[3]):e.call(r,t[0],t[1],t[2],t[3])}return e.apply(r,t)}},function(e,t,r){"use strict";var n=r(14);e.exports.f=function(e){return new function t(e){var t,r;this.promise=new e(function(e,n){if(void 0!==t||void 0!==r)throw TypeError("Bad Promise constructor");t=e,r=n}),this.resolve=n(t),this.reject=n(r)}(e)}},function(e,t,r){var n=r(13),o=r(30),i=r(34),s=r(31),a=r(105);e.exports=function(e,t){var r=1==e,u=2==e,c=3==e,l=4==e,p=6==e,f=5==e||p,d=t||a;return function(t,a,h){for(var g,_,v=i(t),y=o(v),m=n(a,h,3),b=s(y.length),S=0,w=r?d(t,b):u?d(t,0):void 0;b>S;S++)if((f||S in y)&&(_=m(g=y[S],S,v),e))if(r)w[S]=_;else if(_)switch(e){case 3:return!0;case 5:return g;case 6:return S;case 2:w.push(g)}else if(l)return!1;return p?-1:c||l?l:w}}},function(e,t,r){var n=r(10);e.exports=Array.isArray||function e(t){return"Array"==n(t)}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.OidcClient=void 0;var n=function(){function e(e,t){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:{};!function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),t instanceof i.OidcClientSettings?this._settings=t:this._settings=new i.OidcClientSettings(t)}return e.prototype.createSigninRequest=function e(){var t=this,r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=r.response_type,i=r.scope,s=r.redirect_uri,u=r.data,c=r.state,l=r.prompt,p=r.display,f=r.max_age,d=r.ui_locales,h=r.id_token_hint,g=r.login_hint,_=r.acr_values,v=r.resource,y=r.request,m=r.request_uri,b=r.response_mode,S=r.extraQueryParams,w=r.extraTokenParams,k=r.request_type,T=r.skipUserInfo,P=arguments[1];o.Log.debug("OidcClient.createSigninRequest");var E=this._settings.client_id;n=n||this._settings.response_type,i=i||this._settings.scope,s=s||this._settings.redirect_uri,l=l||this._settings.prompt,p=p||this._settings.display,f=f||this._settings.max_age,d=d||this._settings.ui_locales,_=_||this._settings.acr_values,v=v||this._settings.resource,b=b||this._settings.response_mode,S=S||this._settings.extraQueryParams,w=w||this._settings.extraTokenParams;var L=this._settings.authority;return a.SigninRequest.isCode(n)&&"code"!==n?Promise.reject(new Error("OpenID Connect hybrid flow is not supported")):this._metadataService.getAuthorizationEndpoint().then(function(e){o.Log.debug("OidcClient.createSigninRequest: Received authorization endpoint",e);var r=new a.SigninRequest({url:e,client_id:E,redirect_uri:s,response_type:n,scope:i,data:u||c,authority:L,prompt:l,display:p,max_age:f,ui_locales:d,id_token_hint:h,login_hint:g,acr_values:_,resource:v,request:y,request_uri:m,extraQueryParams:S,extraTokenParams:w,request_type:k,response_mode:b,client_secret:t._settings.client_secret,skipUserInfo:T}),R=r.state;return(P=P||t._stateStore).set(R.id,R.toStorageString()).then(function(){return r})})},e.prototype.readSigninResponseState=function e(t,r){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];o.Log.debug("OidcClient.readSigninResponseState");var i="query"===this._settings.response_mode||!this._settings.response_mode&&a.SigninRequest.isCode(this._settings.response_type)?"?":"#",s=new u.SigninResponse(t,i);return s.state?(r=r||this._stateStore,(n?r.remove.bind(r):r.get.bind(r))(s.state).then(function(e){if(!e)throw o.Log.error("OidcClient.readSigninResponseState: No matching state found in storage"),new Error("No matching state found in storage");return{state:p.SigninState.fromStorageString(e),response:s}})):(o.Log.error("OidcClient.readSigninResponseState: No state in response"),Promise.reject(new Error("No state in response")))},e.prototype.processSigninResponse=function e(t,r){var n=this;return o.Log.debug("OidcClient.processSigninResponse"),this.readSigninResponseState(t,r,!0).then(function(e){var t=e.state,r=e.response;return o.Log.debug("OidcClient.processSigninResponse: Received state from storage; validating response"),n._validator.validateSigninResponse(t,r)})},e.prototype.createSignoutRequest=function e(){var t=this,r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=r.id_token_hint,i=r.data,s=r.state,a=r.post_logout_redirect_uri,u=r.extraQueryParams,l=r.request_type,p=arguments[1];return o.Log.debug("OidcClient.createSignoutRequest"),a=a||this._settings.post_logout_redirect_uri,u=u||this._settings.extraQueryParams,this._metadataService.getEndSessionEndpoint().then(function(e){if(!e)throw o.Log.error("OidcClient.createSignoutRequest: No end session endpoint url returned"),new Error("no end session endpoint");o.Log.debug("OidcClient.createSignoutRequest: Received end session endpoint",e);var r=new c.SignoutRequest({url:e,id_token_hint:n,post_logout_redirect_uri:a,data:i||s,extraQueryParams:u,request_type:l}),f=r.state;return f&&(o.Log.debug("OidcClient.createSignoutRequest: Signout request has state to persist"),(p=p||t._stateStore).set(f.id,f.toStorageString())),r})},e.prototype.readSignoutResponseState=function e(t,r){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];o.Log.debug("OidcClient.readSignoutResponseState");var i=new l.SignoutResponse(t);if(!i.state)return o.Log.debug("OidcClient.readSignoutResponseState: No state in response"),i.error?(o.Log.warn("OidcClient.readSignoutResponseState: Response was error: ",i.error),Promise.reject(new s.ErrorResponse(i))):Promise.resolve({undefined:void 0,response:i});var a=i.state;return r=r||this._stateStore,(n?r.remove.bind(r):r.get.bind(r))(a).then(function(e){if(!e)throw o.Log.error("OidcClient.readSignoutResponseState: No matching state found in storage"),new Error("No matching state found in storage");return{state:f.State.fromStorageString(e),response:i}})},e.prototype.processSignoutResponse=function e(t,r){var n=this;return o.Log.debug("OidcClient.processSignoutResponse"),this.readSignoutResponseState(t,r,!0).then(function(e){var t=e.state,r=e.response;return t?(o.Log.debug("OidcClient.processSignoutResponse: Received state from storage; validating response"),n._validator.validateSignoutResponse(t,r)):(o.Log.debug("OidcClient.processSignoutResponse: No state from storage; skipping validating response"),r)})},e.prototype.clearStaleState=function e(t){return o.Log.debug("OidcClient.clearStaleState"),t=t||this._stateStore,f.State.clearStaleState(t,this.settings.staleStateAge)},n(e,[{key:"_stateStore",get:function e(){return this.settings.stateStore}},{key:"_validator",get:function e(){return this.settings.validator}},{key:"_metadataService",get:function e(){return this.settings.metadataService}},{key:"settings",get:function e(){return this._settings}},{key:"metadataService",get:function e(){return this._metadataService}}]),e}()},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.TokenClient=void 0;var n=r(37),o=r(9),i=r(0);t.TokenClient=function(){function e(t){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n.JsonService,s=arguments.length>2&&void 0!==arguments[2]?arguments[2]:o.MetadataService;if(function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),!t)throw i.Log.error("TokenClient.ctor: No settings passed"),new Error("settings");this._settings=t,this._jsonService=new r,this._metadataService=new s(this._settings)}return e.prototype.exchangeCode=function e(){var t=this,r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return(r=Object.assign({},r)).grant_type=r.grant_type||"authorization_code",r.client_id=r.client_id||this._settings.client_id,r.redirect_uri=r.redirect_uri||this._settings.redirect_uri,r.code?r.redirect_uri?r.code_verifier?r.client_id?this._metadataService.getTokenEndpoint(!1).then(function(e){return i.Log.debug("TokenClient.exchangeCode: Received token endpoint"),t._jsonService.postForm(e,r).then(function(e){return i.Log.debug("TokenClient.exchangeCode: response received"),e})}):(i.Log.error("TokenClient.exchangeCode: No client_id passed"),Promise.reject(new Error("A client_id is required"))):(i.Log.error("TokenClient.exchangeCode: No code_verifier passed"),Promise.reject(new Error("A code_verifier is required"))):(i.Log.error("TokenClient.exchangeCode: No redirect_uri passed"),Promise.reject(new Error("A redirect_uri is required"))):(i.Log.error("TokenClient.exchangeCode: No code passed"),Promise.reject(new Error("A code is required")))},e.prototype.exchangeRefreshToken=function e(){var t=this,r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return(r=Object.assign({},r)).grant_type=r.grant_type||"refresh_token",r.client_id=r.client_id||this._settings.client_id,r.client_secret=r.client_secret||this._settings.client_secret,r.refresh_token?r.client_id?this._metadataService.getTokenEndpoint(!1).then(function(e){return i.Log.debug("TokenClient.exchangeRefreshToken: Received token endpoint"),t._jsonService.postForm(e,r).then(function(e){return i.Log.debug("TokenClient.exchangeRefreshToken: response received"),e})}):(i.Log.error("TokenClient.exchangeRefreshToken: No client_id passed"),Promise.reject(new Error("A client_id is required"))):(i.Log.error("TokenClient.exchangeRefreshToken: No refresh_token passed"),Promise.reject(new Error("A refresh_token is required")))},e}()},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.ErrorResponse=void 0;var n=r(0);t.ErrorResponse=function(e){function t(){var r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},o=r.error,i=r.error_description,s=r.error_uri,a=r.state,u=r.session_state;if(function c(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),!o)throw n.Log.error("No error passed to ErrorResponse"),new Error("error");var l=function p(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,e.call(this,i||o));return l.name="ErrorResponse",l.error=o,l.error_description=i,l.error_uri=s,l.state=a,l.session_state=u,l}return function r(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),t}(Error)},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.SigninRequest=void 0;var n=r(0),o=r(16),i=r(53);t.SigninRequest=function(){function e(t){var r=t.url,s=t.client_id,a=t.redirect_uri,u=t.response_type,c=t.scope,l=t.authority,p=t.data,f=t.prompt,d=t.display,h=t.max_age,g=t.ui_locales,_=t.id_token_hint,v=t.login_hint,y=t.acr_values,m=t.resource,b=t.response_mode,S=t.request,w=t.request_uri,k=t.extraQueryParams,T=t.request_type,P=t.client_secret,E=t.extraTokenParams,L=t.skipUserInfo;if(function R(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),!r)throw n.Log.error("SigninRequest.ctor: No url passed"),new Error("url");if(!s)throw n.Log.error("SigninRequest.ctor: No client_id passed"),new Error("client_id");if(!a)throw n.Log.error("SigninRequest.ctor: No redirect_uri passed"),new Error("redirect_uri");if(!u)throw n.Log.error("SigninRequest.ctor: No response_type passed"),new Error("response_type");if(!c)throw n.Log.error("SigninRequest.ctor: No scope passed"),new Error("scope");if(!l)throw n.Log.error("SigninRequest.ctor: No authority passed"),new Error("authority");var x=e.isOidc(u),C=e.isCode(u);b||(b=e.isCode(u)?"query":null),this.state=new i.SigninState({nonce:x,data:p,client_id:s,authority:l,redirect_uri:a,code_verifier:C,request_type:T,response_mode:b,client_secret:P,scope:c,extraTokenParams:E,skipUserInfo:L}),r=o.UrlUtility.addQueryParam(r,"client_id",s),r=o.UrlUtility.addQueryParam(r,"redirect_uri",a),r=o.UrlUtility.addQueryParam(r,"response_type",u),r=o.UrlUtility.addQueryParam(r,"scope",c),r=o.UrlUtility.addQueryParam(r,"state",this.state.id),x&&(r=o.UrlUtility.addQueryParam(r,"nonce",this.state.nonce)),C&&(r=o.UrlUtility.addQueryParam(r,"code_challenge",this.state.code_challenge),r=o.UrlUtility.addQueryParam(r,"code_challenge_method","S256"));var U={prompt:f,display:d,max_age:h,ui_locales:g,id_token_hint:_,login_hint:v,acr_values:y,resource:m,request:S,request_uri:w,response_mode:b};for(var M in U)U[M]&&(r=o.UrlUtility.addQueryParam(r,M,U[M]));for(var O in k)r=o.UrlUtility.addQueryParam(r,O,k[O]);this.url=r}return e.isOidc=function e(t){return!!t.split(/\s+/g).filter(function(e){return"id_token"===e})[0]},e.isOAuth=function e(t){return!!t.split(/\s+/g).filter(function(e){return"token"===e})[0]},e.isCode=function e(t){return!!t.split(/\s+/g).filter(function(e){return"code"===e})[0]},e}()},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.SigninState=void 0;var n=function(){function e(e,t){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:{},n=r.nonce,o=r.authority,i=r.client_id,u=r.redirect_uri,c=r.code_verifier,l=r.response_mode,p=r.client_secret,f=r.scope,d=r.extraTokenParams,h=r.skipUserInfo;!function g(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t);var _=function v(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}(this,e.call(this,arguments[0]));if(!0===n?_._nonce=(0,a.default)():n&&(_._nonce=n),!0===c?_._code_verifier=(0,a.default)()+(0,a.default)()+(0,a.default)():c&&(_._code_verifier=c),_.code_verifier){var y=s.JoseUtil.hashString(_.code_verifier,"SHA256");_._code_challenge=s.JoseUtil.hexToBase64Url(y)}return _._redirect_uri=u,_._authority=o,_._client_id=i,_._response_mode=l,_._client_secret=p,_._scope=f,_._extraTokenParams=d,_._skipUserInfo=h,_}return function r(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),t.prototype.toStorageString=function e(){return o.Log.debug("SigninState.toStorageString"),JSON.stringify({id:this.id,data:this.data,created:this.created,request_type:this.request_type,nonce:this.nonce,code_verifier:this.code_verifier,redirect_uri:this.redirect_uri,authority:this.authority,client_id:this.client_id,response_mode:this.response_mode,client_secret:this.client_secret,scope:this.scope,extraTokenParams:this.extraTokenParams,skipUserInfo:this.skipUserInfo})},t.fromStorageString=function e(r){return o.Log.debug("SigninState.fromStorageString"),new t(JSON.parse(r))},n(t,[{key:"nonce",get:function e(){return this._nonce}},{key:"authority",get:function e(){return this._authority}},{key:"client_id",get:function e(){return this._client_id}},{key:"redirect_uri",get:function e(){return this._redirect_uri}},{key:"code_verifier",get:function e(){return this._code_verifier}},{key:"code_challenge",get:function e(){return this._code_challenge}},{key:"response_mode",get:function e(){return this._response_mode}},{key:"client_secret",get:function e(){return this._client_secret}},{key:"scope",get:function e(){return this._scope}},{key:"extraTokenParams",get:function e(){return this._extraTokenParams}},{key:"skipUserInfo",get:function e(){return this._skipUserInfo}}]),t}(i.State)},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function n(){return(0,o.default)().replace(/-/g,"")};var o=function i(e){return e&&e.__esModule?e:{default:e}}(r(122));e.exports=t.default},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.User=void 0;var n=function(){function e(e,t){for(var r=0;r0){var n=parseInt(Date.now()/1e3);this.expires_at=n+r}}},{key:"expired",get:function e(){var t=this.expires_in;if(void 0!==t)return t<=0}},{key:"scopes",get:function e(){return(this.scope||"").split(" ")}}]),e}()},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.AccessTokenEvents=void 0;var n=r(0),o=r(137);var i=60;t.AccessTokenEvents=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=t.accessTokenExpiringNotificationTime,n=void 0===r?i:r,s=t.accessTokenExpiringTimer,a=void 0===s?new o.Timer("Access token expiring"):s,u=t.accessTokenExpiredTimer,c=void 0===u?new o.Timer("Access token expired"):u;!function l(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this._accessTokenExpiringNotificationTime=n,this._accessTokenExpiring=a,this._accessTokenExpired=c}return e.prototype.load=function e(t){if(t.access_token&&void 0!==t.expires_in){var r=t.expires_in;if(n.Log.debug("AccessTokenEvents.load: access token present, remaining duration:",r),r>0){var o=r-this._accessTokenExpiringNotificationTime;o<=0&&(o=1),n.Log.debug("AccessTokenEvents.load: registering expiring timer in:",o),this._accessTokenExpiring.init(o)}else n.Log.debug("AccessTokenEvents.load: canceling existing expiring timer becase we're past expiration."),this._accessTokenExpiring.cancel();var i=r+1;n.Log.debug("AccessTokenEvents.load: registering expired timer in:",i),this._accessTokenExpired.init(i)}else this._accessTokenExpiring.cancel(),this._accessTokenExpired.cancel()},e.prototype.unload=function e(){n.Log.debug("AccessTokenEvents.unload: canceling existing access token timers"),this._accessTokenExpiring.cancel(),this._accessTokenExpired.cancel()},e.prototype.addAccessTokenExpiring=function e(t){this._accessTokenExpiring.addHandler(t)},e.prototype.removeAccessTokenExpiring=function e(t){this._accessTokenExpiring.removeHandler(t)},e.prototype.addAccessTokenExpired=function e(t){this._accessTokenExpired.addHandler(t)},e.prototype.removeAccessTokenExpired=function e(t){this._accessTokenExpired.removeHandler(t)},e}()},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Event=void 0;var n=r(0);t.Event=function(){function e(t){!function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this._name=t,this._callbacks=[]}return e.prototype.addHandler=function e(t){this._callbacks.push(t)},e.prototype.removeHandler=function e(t){var r=this._callbacks.findIndex(function(e){return e===t});r>=0&&this._callbacks.splice(r,1)},e.prototype.raise=function e(){n.Log.debug("Event: Raising event: "+this._name);for(var t=0;t1&&void 0!==arguments[1]?arguments[1]:i.CheckSessionIFrame;if(function s(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),!t)throw o.Log.error("SessionMonitor.ctor: No user manager passed to SessionMonitor"),new Error("userManager");this._userManager=t,this._CheckSessionIFrameCtor=n,this._userManager.events.addUserLoaded(this._start.bind(this)),this._userManager.events.addUserUnloaded(this._stop.bind(this)),this._userManager.getUser().then(function(e){e?r._start(e):r._settings.monitorAnonymousSession&&r._userManager.querySessionStatus().then(function(e){var t={session_state:e.session_state};e.sub&&e.sid&&(t.profile={sub:e.sub,sid:e.sid}),r._start(t)}).catch(function(e){o.Log.error("SessionMonitor ctor: error from querySessionStatus:",e.message)})}).catch(function(e){o.Log.error("SessionMonitor ctor: error from getUser:",e.message)})}return e.prototype._start=function e(t){var r=this,n=t.session_state;n&&(t.profile?(this._sub=t.profile.sub,this._sid=t.profile.sid,o.Log.debug("SessionMonitor._start: session_state:",n,", sub:",this._sub)):(this._sub=void 0,this._sid=void 0,o.Log.debug("SessionMonitor._start: session_state:",n,", anonymous user")),this._checkSessionIFrame?this._checkSessionIFrame.start(n):this._metadataService.getCheckSessionIframe().then(function(e){if(e){o.Log.debug("SessionMonitor._start: Initializing check session iframe");var t=r._client_id,i=r._checkSessionInterval,s=r._stopCheckSessionOnError;r._checkSessionIFrame=new r._CheckSessionIFrameCtor(r._callback.bind(r),t,e,i,s),r._checkSessionIFrame.load().then(function(){r._checkSessionIFrame.start(n)})}else o.Log.warn("SessionMonitor._start: No check session iframe found in the metadata")}).catch(function(e){o.Log.error("SessionMonitor._start: Error from getCheckSessionIframe:",e.message)}))},e.prototype._stop=function e(){var t=this;this._sub=void 0,this._sid=void 0,this._checkSessionIFrame&&(o.Log.debug("SessionMonitor._stop"),this._checkSessionIFrame.stop()),this._settings.monitorAnonymousSession&&this._userManager.querySessionStatus().then(function(e){var r={session_state:e.session_state};e.sub&&e.sid&&(r.profile={sub:e.sub,sid:e.sid}),t._start(r)}).catch(function(e){o.Log.error("SessionMonitor: error from querySessionStatus:",e.message)})},e.prototype._callback=function e(){var t=this;this._userManager.querySessionStatus().then(function(e){var r=!0;e?e.sub===t._sub?(r=!1,t._checkSessionIFrame.start(e.session_state),e.sid===t._sid?o.Log.debug("SessionMonitor._callback: Same sub still logged in at OP, restarting check session iframe; session_state:",e.session_state):(o.Log.debug("SessionMonitor._callback: Same sub still logged in at OP, session state has changed, restarting check session iframe; session_state:",e.session_state),t._userManager.events._raiseUserSessionChanged())):o.Log.debug("SessionMonitor._callback: Different subject signed into OP:",e.sub):o.Log.debug("SessionMonitor._callback: Subject no longer signed into OP"),r&&(t._sub?(o.Log.debug("SessionMonitor._callback: SessionMonitor._callback; raising signed out event"),t._userManager.events._raiseUserSignedOut()):(o.Log.debug("SessionMonitor._callback: SessionMonitor._callback; raising signed in event"),t._userManager.events._raiseUserSignedIn()))}).catch(function(e){t._sub&&(o.Log.debug("SessionMonitor._callback: Error calling queryCurrentSigninSession; raising signed out event",e.message),t._userManager.events._raiseUserSignedOut())})},n(e,[{key:"_settings",get:function e(){return this._userManager.settings}},{key:"_metadataService",get:function e(){return this._userManager.metadataService}},{key:"_client_id",get:function e(){return this._settings.client_id}},{key:"_checkSessionInterval",get:function e(){return this._settings.checkSessionInterval}},{key:"_stopCheckSessionOnError",get:function e(){return this._settings.stopCheckSessionOnError}}]),e}()},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.CheckSessionIFrame=void 0;var n=r(0);var o=2e3;t.CheckSessionIFrame=function(){function e(t,r,n,i){var s=!(arguments.length>4&&void 0!==arguments[4])||arguments[4];!function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this._callback=t,this._client_id=r,this._url=n,this._interval=i||o,this._stopOnError=s;var u=n.indexOf("/",n.indexOf("//")+2);this._frame_origin=n.substr(0,u),this._frame=window.document.createElement("iframe"),this._frame.style.visibility="hidden",this._frame.style.position="absolute",this._frame.style.display="none",this._frame.style.width=0,this._frame.style.height=0,this._frame.src=n}return e.prototype.load=function e(){var t=this;return new Promise(function(e){t._frame.onload=function(){e()},window.document.body.appendChild(t._frame),t._boundMessageEvent=t._message.bind(t),window.addEventListener("message",t._boundMessageEvent,!1)})},e.prototype._message=function e(t){t.origin===this._frame_origin&&t.source===this._frame.contentWindow&&("error"===t.data?(n.Log.error("CheckSessionIFrame: error message from check session op iframe"),this._stopOnError&&this.stop()):"changed"===t.data?(n.Log.debug("CheckSessionIFrame: changed message from check session op iframe"),this.stop(),this._callback()):n.Log.debug("CheckSessionIFrame: "+t.data+" message from check session op iframe"))},e.prototype.start=function e(t){var r=this;if(this._session_state!==t){n.Log.debug("CheckSessionIFrame.start"),this.stop(),this._session_state=t;var o=function e(){r._frame.contentWindow.postMessage(r._client_id+" "+r._session_state,r._frame_origin)};o(),this._timer=window.setInterval(o,this._interval)}},e.prototype.stop=function e(){this._session_state=null,this._timer&&(n.Log.debug("CheckSessionIFrame.stop"),window.clearInterval(this._timer),this._timer=null)},e}()},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.TokenRevocationClient=void 0;var n=r(0),o=r(9),i=r(7);t.TokenRevocationClient=function(){function e(t){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:i.Global.XMLHttpRequest,s=arguments.length>2&&void 0!==arguments[2]?arguments[2]:o.MetadataService;if(function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),!t)throw n.Log.error("TokenRevocationClient.ctor: No settings provided"),new Error("No settings provided.");this._settings=t,this._XMLHttpRequestCtor=r,this._metadataService=new s(this._settings)}return e.prototype.revoke=function e(t,r){var o=this,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"access_token";if(!t)throw n.Log.error("TokenRevocationClient.revoke: No token provided"),new Error("No token provided.");if("access_token"!==i&&"refresh_token"!=i)throw n.Log.error("TokenRevocationClient.revoke: Invalid token type"),new Error("Invalid token type.");return this._metadataService.getRevocationEndpoint().then(function(e){if(e){n.Log.debug("TokenRevocationClient.revoke: Revoking "+i);var s=o._settings.client_id,a=o._settings.client_secret;return o._revoke(e,s,a,t,i)}if(r)throw n.Log.error("TokenRevocationClient.revoke: Revocation not supported"),new Error("Revocation not supported")})},e.prototype._revoke=function e(t,r,o,i,s){var a=this;return new Promise(function(e,u){var c=new a._XMLHttpRequestCtor;c.open("POST",t),c.onload=function(){n.Log.debug("TokenRevocationClient.revoke: HTTP response received, status",c.status),200===c.status?e():u(Error(c.statusText+" ("+c.status+")"))},c.onerror=function(){n.Log.debug("TokenRevocationClient.revoke: Network Error."),u("Network Error")};var l="client_id="+encodeURIComponent(r);o&&(l+="&client_secret="+encodeURIComponent(o)),l+="&token_type_hint="+encodeURIComponent(s),l+="&token="+encodeURIComponent(i),c.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),c.send(l)})},e}()},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.CordovaPopupWindow=void 0;var n=function(){function e(e,t){for(var r=0;r=t.length?{value:void 0,done:!0}:(e=n(t,r),this._i+=e.length,{value:e,done:!1})})},function(e,t,r){var n=r(26),o=r(27);e.exports=function(e){return function(t,r){var i,s,a=String(o(t)),u=n(r),c=a.length;return u<0||u>=c?e?"":void 0:(i=a.charCodeAt(u))<55296||i>56319||u+1===c||(s=a.charCodeAt(u+1))<56320||s>57343?e?a.charAt(u):i:e?a.slice(u,u+2):s-56320+(i-55296<<10)+65536}}},function(e,t,r){"use strict";var n=r(72),o=r(39),i=r(33),s={};r(8)(s,r(1)("iterator"),function(){return this}),e.exports=function(e,t,r){e.prototype=n(s,{next:o(1,r)}),i(e,t+" Iterator")}},function(e,t,r){var n=r(4),o=r(73),i=r(41),s=r(32)("IE_PROTO"),a=function(){},u=function(){var e,t=r(25)("iframe"),n=i.length;for(t.style.display="none",r(42).appendChild(t),t.src="javascript:",(e=t.contentWindow.document).open(),e.write("