verdaccio 5.2.3 → 5.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +41 -2
- package/README.md +6 -5
- package/build/api/endpoint/api/publish.js +3 -3
- package/build/api/endpoint/api/user.js +15 -5
- package/build/api/endpoint/api/v1/index.js +26 -0
- package/build/api/endpoint/api/v1/profile.js +12 -4
- package/build/api/endpoint/api/v1/token.js +14 -5
- package/build/api/endpoint/index.js +4 -7
- package/build/api/index.js +11 -5
- package/build/api/rate-limiter.js +24 -0
- package/build/api/web/api.js +4 -16
- package/build/api/web/endpoint/index.js +45 -0
- package/build/api/web/endpoint/package.js +15 -6
- package/build/api/web/endpoint/search.js +8 -2
- package/build/api/web/endpoint/user.js +9 -3
- package/build/api/web/index.js +5 -2
- package/build/lib/auth-utils.js +11 -4
- package/build/lib/config.js +15 -6
- package/build/lib/constants.js +5 -4
- package/build/lib/up-storage.js +6 -3
- package/build/lib/utils.js +14 -4
- package/conf/default.yaml +3 -1
- package/conf/docker.yaml +3 -1
- package/package.json +23 -17
package/build/lib/up-storage.js
CHANGED
|
@@ -98,7 +98,8 @@ class ProxyStorage {
|
|
|
98
98
|
_defineProperty(this, "strict_ssl", void 0);
|
|
99
99
|
|
|
100
100
|
this.config = config;
|
|
101
|
-
this.failed_requests = 0;
|
|
101
|
+
this.failed_requests = 0; // @ts-ignore
|
|
102
|
+
|
|
102
103
|
this.userAgent = mainConfig.user_agent;
|
|
103
104
|
this.ca = config.ca;
|
|
104
105
|
this.logger = _logger.logger;
|
|
@@ -297,6 +298,8 @@ class ProxyStorage {
|
|
|
297
298
|
|
|
298
299
|
|
|
299
300
|
_setHeaders(options) {
|
|
301
|
+
var _options$req;
|
|
302
|
+
|
|
300
303
|
const headers = options.headers || {};
|
|
301
304
|
const accept = _constants.HEADERS.ACCEPT;
|
|
302
305
|
const acceptEncoding = _constants.HEADERS.ACCEPT_ENCODING;
|
|
@@ -304,7 +307,7 @@ class ProxyStorage {
|
|
|
304
307
|
headers[accept] = headers[accept] || contentTypeAccept;
|
|
305
308
|
headers[acceptEncoding] = headers[acceptEncoding] || 'gzip'; // registry.npmjs.org will only return search result if user-agent include string 'npm'
|
|
306
309
|
|
|
307
|
-
headers[userAgent] =
|
|
310
|
+
headers[userAgent] = this.userAgent ? `npm (${this.userAgent})` : (_options$req = options.req) === null || _options$req === void 0 ? void 0 : _options$req.get('user-agent');
|
|
308
311
|
return this._setAuth(headers);
|
|
309
312
|
}
|
|
310
313
|
/**
|
|
@@ -737,4 +740,4 @@ class ProxyStorage {
|
|
|
737
740
|
|
|
738
741
|
var _default = ProxyStorage;
|
|
739
742
|
exports.default = _default;
|
|
740
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvdXAtc3RvcmFnZS50cyJdLCJuYW1lcyI6WyJkZWJ1ZyIsImVuY29kZSIsInRoaW5nIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwicmVwbGFjZSIsImpzb25Db250ZW50VHlwZSIsIkhFQURFUlMiLCJKU09OIiwiY29udGVudFR5cGVBY2NlcHQiLCJzZXRDb25maWciLCJjb25maWciLCJrZXkiLCJkZWYiLCJfIiwiaXNOaWwiLCJQcm94eVN0b3JhZ2UiLCJjb25zdHJ1Y3RvciIsIm1haW5Db25maWciLCJmYWlsZWRfcmVxdWVzdHMiLCJ1c2VyQWdlbnQiLCJ1c2VyX2FnZW50IiwiY2EiLCJsb2dnZXIiLCJzZXJ2ZXJfaWQiLCJ1cmwiLCJVUkwiLCJwYXJzZSIsIl9zZXR1cFByb3h5IiwiaG9zdG5hbWUiLCJwcm90b2NvbCIsInRpbWVvdXQiLCJOdW1iZXIiLCJ3YXJuIiwiam9pbiIsIm1heGFnZSIsIm1heF9mYWlscyIsImZhaWxfdGltZW91dCIsInN0cmljdF9zc2wiLCJCb29sZWFuIiwiYWdlbnRfb3B0aW9ucyIsImtlZXBBbGl2ZSIsIm1heFNvY2tldHMiLCJtYXhGcmVlU29ja2V0cyIsInJlcXVlc3QiLCJvcHRpb25zIiwiY2IiLCJqc29uIiwiX3N0YXR1c0NoZWNrIiwic3RyZWFtUmVhZCIsIlN0cmVhbSIsIlJlYWRhYmxlIiwicHJvY2VzcyIsIm5leHRUaWNrIiwiRXJyb3JDb2RlIiwiZ2V0SW50ZXJuYWxFcnJvciIsIkFQSV9FUlJPUiIsIlVQTElOS19PRkZMSU5FIiwiZW1pdCIsIl9yZWFkIiwib24iLCJzZWxmIiwiaGVhZGVycyIsIl9zZXRIZWFkZXJzIiwiX2FkZFByb3h5SGVhZGVycyIsInJlcSIsIl9vdmVycmlkZVdpdGhVcExpbmtDb25mTG9jYWxpZ0hlYWRlcnMiLCJtZXRob2QiLCJ1cmkiLCJ1cmlfZnVsbCIsImluZm8iLCJzdHJpbmdpZnkiLCJyZXF1ZXN0Q2FsbGJhY2siLCJlcnIiLCJyZXMiLCJib2R5IiwiZXJyb3IiLCJyZXNwb25zZUxlbmd0aCIsImxlbmd0aCIsInByb2Nlc3NCb2R5IiwibG9nQWN0aXZpdHkiLCJtZXNzYWdlIiwic3RhdHVzQ29kZSIsInRvU3RyaW5nIiwiQ0hBUkFDVEVSX0VOQ09ESU5HIiwiVVRGOCIsIl9lcnIiLCJpc1N0cmluZyIsImh0dHAiLCJ1bmRlZmluZWQiLCJzdGF0dXMiLCJieXRlcyIsImluIiwib3V0IiwicmVxdWVzdE9wdGlvbnMiLCJwcm94eSIsImVuY29kaW5nIiwiZ3ppcCIsInN0cmljdFNTTCIsImFnZW50T3B0aW9ucyIsIk9iamVjdCIsImFzc2lnbiIsInN0YXR1c0NhbGxlZCIsIl92ZXJkYWNjaW9fYWJvcnRlZCIsImRvX2xvZyIsImlzTnVsbCIsImFjY2VwdCIsIkFDQ0VQVCIsImFjY2VwdEVuY29kaW5nIiwiQUNDRVBUX0VOQ09ESU5HIiwiVVNFUl9BR0VOVCIsIl9zZXRBdXRoIiwiYXV0aCIsIkFVVEhPUklaQVRJT04iLCJpc09iamVjdCIsInRva2VuIiwiX3Rocm93RXJyb3JBdXRoIiwidG9rZW5Db25mIiwidG9rZW5fZW52IiwiZW52IiwiaXNCb29sZWFuIiwiTlBNX1RPS0VOIiwiRVJST1JfQ09ERSIsInRva2VuX3JlcXVpcmVkIiwidHlwZSIsIlRPS0VOX0JBU0lDIiwiX3NldEhlYWRlckF1dGhvcml6YXRpb24iLCJFcnJvciIsIl90eXBlIiwidG9Mb3dlckNhc2UiLCJUT0tFTl9CRUFSRVIiLCJ1cHBlckZpcnN0IiwiaXNVcGxpbmtWYWxpZCIsInVybFBhcnNlZCIsImlzSFRUUFMiLCJ1cmxEb21haW5QYXJzZWQiLCJwb3J0IiwiZ2V0SG9zdCIsImhvc3QiLCJpc01hdGNoUHJvdG9jb2wiLCJpc01hdGNoSG9zdCIsImlzTWF0Y2hQYXRoIiwicGF0aCIsImluZGV4T2YiLCJnZXRSZW1vdGVNZXRhZGF0YSIsIm5hbWUiLCJjYWxsYmFjayIsImV0YWciLCJIVFRQX1NUQVRVUyIsIk5PVF9GT1VORCIsImdldE5vdEZvdW5kIiwiTk9UX1BBQ0tBR0VfVVBMSU5LIiwiT0siLCJNVUxUSVBMRV9DSE9JQ0VTIiwiQkFEX1NUQVRVU19DT0RFIiwicmVtb3RlU3RhdHVzIiwiZmV0Y2hUYXJiYWxsIiwic3RyZWFtIiwiUmVhZFRhcmJhbGwiLCJjdXJyZW50X2xlbmd0aCIsImV4cGVjdGVkX2xlbmd0aCIsImFib3J0IiwicmVhZFN0cmVhbSIsIkFjY2VwdCIsIk5PVF9GSUxFX1VQTElOSyIsIkhFQURFUl9UWVBFIiwiQ09OVEVOVF9MRU5HVEgiLCJwaXBlIiwiZGF0YSIsIkNPTlRFTlRfTUlTTUFUQ0giLCJzZWFyY2giLCJ0cmFuc2Zvcm1TdHJlYW0iLCJQYXNzVGhyb3VnaCIsIm9iamVjdE1vZGUiLCJyZXF1ZXN0U3RyZWFtIiwicmVmZXJlciIsImdldCIsInBhcnNlUGFja2FnZSIsInBrZyIsIlN0cmluZyIsIm1hdGNoIiwianNvblN0cmVhbSIsIkNPTlRFTlRfRU5DT0RJTkciLCJHWklQIiwiemxpYiIsImNyZWF0ZVVuemlwIiwiSlNPTlN0cmVhbSIsImNvbm5lY3Rpb24iLCJyZW1vdGVBZGRyZXNzIiwiYWxpdmUiLCJhcmd1bWVudHMiLCJfaWZSZXF1ZXN0RmFpbHVyZSIsImxhc3RfcmVxdWVzdF90aW1lIiwiRGF0ZSIsIm5vdyIsIk1hdGgiLCJhYnMiLCJtYWluY29uZmlnIiwibm9Qcm94eUxpc3QiLCJwcm94eV9rZXkiLCJub19wcm94eSIsInNwbGl0IiwiaXNBcnJheSIsImkiLCJub1Byb3h5SXRlbSIsImxhc3RJbmRleE9mIiwiaHJlZiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUdBOztBQUNBOztBQUNBOzs7Ozs7QUFFQSxNQUFNQSxLQUFLLEdBQUcsb0JBQVcsc0JBQVgsQ0FBZDs7QUFFQSxNQUFNQyxNQUFNLEdBQUcsVUFBVUMsS0FBVixFQUF5QjtBQUN0QyxTQUFPQyxrQkFBa0IsQ0FBQ0QsS0FBRCxDQUFsQixDQUEwQkUsT0FBMUIsQ0FBa0MsTUFBbEMsRUFBMEMsR0FB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QUMxQkEsVUFBQUEsV0FBVyxHQUFHLE1BQU1BLFdBQXBCO0FBQ0Q7O0FBQ0QsWUFBSS9LLFFBQVEsQ0FBQ2dMLFdBQVQsQ0FBcUJELFdBQXJCLE1BQXNDL0ssUUFBUSxDQUFDaUQsTUFBVCxHQUFrQjhILFdBQVcsQ0FBQzlILE1BQXhFLEVBQWdGO0FBQzlFLGNBQUksS0FBS2lCLEtBQVQsRUFBZ0I7QUFDZDlGLFlBQUFBLEtBQUssQ0FBQyw2Q0FBRCxFQUFnRCxLQUFLd0IsR0FBTCxDQUFTcUwsSUFBekQsRUFBK0RGLFdBQS9ELENBQUwsQ0FEYyxDQUVkOztBQUNBLGlCQUFLN0csS0FBTCxHQUFhLEtBQWI7QUFDRDs7QUFDRDtBQUNEO0FBQ0Y7QUFDRixLQTFDd0csQ0E0Q3pHOzs7QUFDQSxRQUFJakYsZ0JBQUV5RSxRQUFGLENBQVcsS0FBS1EsS0FBaEIsTUFBMkIsS0FBL0IsRUFBc0M7QUFDcEM7QUFDQSxhQUFPLEtBQUtBLEtBQVo7QUFDRCxLQUhELE1BR087QUFDTDlGLE1BQUFBLEtBQUssQ0FBQyx1QkFBRCxFQUEwQixLQUFLd0IsR0FBTCxDQUFTcUwsSUFBbkMsRUFBeUMsS0FBSy9HLEtBQTlDLENBQUw7QUFDRDtBQUNGOztBQTFvQmtDOztlQTZvQnRCL0UsWSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB6bGliIGZyb20gJ3psaWInO1xuaW1wb3J0IFN0cmVhbSBmcm9tICdzdHJlYW0nO1xuaW1wb3J0IFVSTCwgeyBVcmxXaXRoU3RyaW5nUXVlcnkgfSBmcm9tICd1cmwnO1xuaW1wb3J0IEpTT05TdHJlYW0gZnJvbSAnSlNPTlN0cmVhbSc7XG5pbXBvcnQgYnVpbGREZWJ1ZyBmcm9tICdkZWJ1Zyc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHJlcXVlc3QgZnJvbSAncmVxdWVzdCc7XG5pbXBvcnQgeyBSZWFkVGFyYmFsbCB9IGZyb20gJ0B2ZXJkYWNjaW8vc3RyZWFtcyc7XG5pbXBvcnQgeyBDb25maWcsIENhbGxiYWNrLCBIZWFkZXJzLCBMb2dnZXIsIFBhY2thZ2UgfSBmcm9tICdAdmVyZGFjY2lvL3R5cGVzJztcbmltcG9ydCB7IElQcm94eSwgVXBMaW5rQ29uZkxvY2FsIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgcGFyc2VJbnRlcnZhbCwgaXNPYmplY3QsIEVycm9yQ29kZSwgYnVpbGRUb2tlbiwgaXNPYmplY3RPckFycmF5IH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgeyBFUlJPUl9DT0RFLCBUT0tFTl9CQVNJQywgVE9LRU5fQkVBUkVSLCBIRUFERVJTLCBIVFRQX1NUQVRVUywgQVBJX0VSUk9SLCBIRUFERVJfVFlQRSwgQ0hBUkFDVEVSX0VOQ09ESU5HIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuXG5jb25zdCBkZWJ1ZyA9IGJ1aWxkRGVidWcoJ3ZlcmRhY2Npbzp1cC1zdG9yYWdlJyk7XG5cbmNvbnN0IGVuY29kZSA9IGZ1bmN0aW9uICh0aGluZyk6IHN0cmluZyB7XG4gIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQodGhpbmcpLnJlcGxhY2UoL14lNDAvLCAnQCcpO1xufTtcblxuY29uc3QganNvbkNvbnRlbnRUeXBlID0gSEVBREVSUy5KU09OO1xuY29uc3QgY29udGVudFR5cGVBY2NlcHQgPSBgJHtqc29uQ29udGVudFR5cGV9O2A7XG5cbi8qKlxuICogSnVzdCBhIGhlbHBlciAoYGNvbmZpZ1trZXldIHx8IGRlZmF1bHRgIGRvZXNuJ3Qgd29yayBiZWNhdXNlIG9mIHplcm9lcylcbiAqL1xuY29uc3Qgc2V0Q29uZmlnID0gKGNvbmZpZywga2V5LCBkZWYpOiBzdHJpbmcgPT4ge1xuICByZXR1cm4gXy5pc05pbChjb25maWdba2V5XSkgPT09IGZhbHNlID8gY29uZmlnW2tleV0gOiBkZWY7XG59O1xuXG4vKipcbiAqIEltcGxlbWVudHMgU3RvcmFnZSBpbnRlcmZhY2VcbiAqIChzYW1lIGZvciBzdG9yYWdlLmpzLCBsb2NhbC1zdG9yYWdlLmpzLCB1cC1zdG9yYWdlLmpzKVxuICovXG5jbGFzcyBQcm94eVN0b3JhZ2UgaW1wbGVtZW50cyBJUHJveHkge1xuICBwdWJsaWMgY29uZmlnOiBVcExpbmtDb25mTG9jYWw7XG4gIHB1YmxpYyBmYWlsZWRfcmVxdWVzdHM6IG51bWJlcjtcbiAgcHVibGljIHVzZXJBZ2VudDogc3RyaW5nO1xuICBwdWJsaWMgY2E6IHN0cmluZyB8IHZvaWQ7XG4gIHB1YmxpYyBsb2dnZXI6IExvZ2dlcjtcbiAgcHVibGljIHNlcnZlcl9pZDogc3RyaW5nO1xuICBwdWJsaWMgdXJsOiBhbnk7XG4gIHB1YmxpYyBtYXhhZ2U6IG51bWJlcjtcbiAgcHVibGljIHRpbWVvdXQ6IG51bWJlcjtcbiAgcHVibGljIG1heF9mYWlsczogbnVtYmVyO1xuICBwdWJsaWMgZmFpbF90aW1lb3V0OiBudW1iZXI7XG4gIHB1YmxpYyBhZ2VudF9vcHRpb25zOiBhbnk7XG4gIC8vIEZJWE1FOiB1cG5hbWUgaXMgYXNzaWduZWQgdG8gZWFjaCBpbnN0YW5jZVxuICAvLyBAdHMtaWdub3JlXG4gIHB1YmxpYyB1cG5hbWU6IHN0cmluZztcbiAgLy8gRklYTUU6IHByb3h5IGNhbiBiZSBib29sZWFuIG9yIG9iamVjdCwgc29tZXRoaW5nIHNtZWxscyBoZXJlXG4gIC8vIEB0cy1pZ25vcmVcbiAgcHVibGljIHByb3h5OiBzdHJpbmcgfCB2b2lkO1xuICAvLyBAdHMtaWdub3JlXG4gIHB1YmxpYyBsYXN0X3JlcXVlc3RfdGltZTogbnVtYmVyIHwgbnVsbDtcbiAgcHVibGljIHN0cmljdF9zc2w6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdG9yXG4gICAqIEBwYXJhbSB7Kn0gY29uZmlnXG4gICAqIEBwYXJhbSB7Kn0gbWFpbkNvbmZpZ1xuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKGNvbmZpZzogVXBMaW5rQ29uZkxvY2FsLCBtYWluQ29uZmlnOiBDb25maWcpIHtcbiAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcbiAgICB0aGlzLmZhaWxlZF9yZXF1ZXN0cyA9IDA7XG4gICAgdGhpcy51c2VyQWdlbnQgPSBtYWluQ29uZmlnLnVzZXJfYWdlbnQ7XG4gICAgdGhpcy5jYSA9IGNvbmZpZy5jYTtcbiAgICB0aGlzLmxvZ2dlciA9IGxvZ2dlcjtcbiAgICB0aGlzLnNlcnZlcl9pZCA9IG1haW5Db25maWcuc2VydmVyX2lkO1xuXG4gICAgdGhpcy51cmwgPSBVUkwucGFyc2UodGhpcy5jb25maWcudXJsKTtcbiAgICAvLyAkRmxvd0ZpeE1lXG4gICAgdGhpcy5fc2V0dXBQcm94eSh0aGlzLnVybC5ob3N0bmFtZSwgY29uZmlnLCBtYWluQ29uZmlnLCB0aGlzLnVybC5wcm90b2NvbCA9PT0gJ2h0dHBzOicpO1xuXG4gICAgdGhpcy5jb25maWcudXJsID0gdGhpcy5jb25maWcudXJsLnJlcGxhY2UoL1xcLyQvLCAnJyk7XG5cbiAgICBpZiAodGhpcy5jb25maWcudGltZW91dCAmJiBOdW1iZXIodGhpcy5jb25maWcudGltZW91dCkgPj0gMTAwMCkge1xuICAgICAgdGhpcy5sb2dnZXIud2FybihcbiAgICAgICAgW1xuICAgICAgICAgICdUb28gYmlnIHRpbWVvdXQgdmFsdWU6ICcgKyB0aGlzLmNvbmZpZy50aW1lb3V0LFxuICAgICAgICAgICdXZSBjaGFuZ2VkIHRpbWUgZm9ybWF0IHRvIG5naW54LWxpa2Ugb25lJyxcbiAgICAgICAgICAnKHNlZSBodHRwOi8vbmdpbngub3JnL2VuL2RvY3Mvc3ludGF4Lmh0bWwpJyxcbiAgICAgICAgICAnc28gcGxlYXNlIHVwZGF0ZSB5b3VyIGNvbmZpZyBhY2NvcmRpbmdseScsXG4gICAgICAgIF0uam9pbignXFxuJylcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gYSBidW5jaCBvZiBkaWZmZXJlbnQgY29uZmlndXJhYmxlIHRpbWVyc1xuICAgIHRoaXMubWF4YWdlID0gcGFyc2VJbnRlcnZhbChzZXRDb25maWcodGhpcy5jb25maWcsICdtYXhhZ2UnLCAnMm0nKSk7XG4gICAgdGhpcy50aW1lb3V0ID0gcGFyc2VJbnRlcnZhbChzZXRDb25maWcodGhpcy5jb25maWcsICd0aW1lb3V0JywgJzMwcycpKTtcbiAgICB0aGlzLm1heF9mYWlscyA9IE51bWJlcihzZXRDb25maWcodGhpcy5jb25maWcsICdtYXhfZmFpbHMnLCAyKSk7XG4gICAgdGhpcy5mYWlsX3RpbWVvdXQgPSBwYXJzZUludGVydmFsKHNldENvbmZpZyh0aGlzLmNvbmZpZywgJ2ZhaWxfdGltZW91dCcsICc1bScpKTtcbiAgICB0aGlzLnN0cmljdF9zc2wgPSBCb29sZWFuKHNldENvbmZpZyh0aGlzLmNvbmZpZywgJ3N0cmljdF9zc2wnLCB0cnVlKSk7XG4gICAgdGhpcy5hZ2VudF9vcHRpb25zID0gc2V0Q29uZmlnKHRoaXMuY29uZmlnLCAnYWdlbnRfb3B0aW9ucycsIHtcbiAgICAgIGtlZXBBbGl2ZTogdHJ1ZSxcbiAgICAgIG1heFNvY2tldHM6IDQwLFxuICAgICAgbWF4RnJlZVNvY2tldHM6IDEwLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoIGFuIGFzc2V0LlxuICAgKiBAcGFyYW0geyp9IG9wdGlvbnNcbiAgICogQHBhcmFtIHsqfSBjYlxuICAgKiBAcmV0dXJuIHtSZXF1ZXN0fVxuICAgKi9cbiAgcHJpdmF0ZSByZXF1ZXN0KG9wdGlvbnM6IGFueSwgY2I/OiBDYWxsYmFjayk6IFN0cmVhbS5SZWFkYWJsZSB7XG4gICAgbGV0IGpzb247XG5cbiAgICBpZiAodGhpcy5fc3RhdHVzQ2hlY2soKSA9PT0gZmFsc2UpIHtcbiAgICAgIGNvbnN0IHN0cmVhbVJlYWQgPSBuZXcgU3RyZWFtLlJlYWRhYmxlKCk7XG5cbiAgICAgIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24gKCk6IHZvaWQge1xuICAgICAgICBpZiAoY2IpIHtcbiAgICAgICAgICBjYihFcnJvckNvZGUuZ2V0SW50ZXJuYWxFcnJvcihBUElfRVJST1IuVVBMSU5LX09GRkxJTkUpKTtcbiAgICAgICAgfVxuICAgICAgICBzdHJlYW1SZWFkLmVtaXQoJ2Vycm9yJywgRXJyb3JDb2RlLmdldEludGVybmFsRXJyb3IoQVBJX0VSUk9SLlVQTElOS19PRkZMSU5FKSk7XG4gICAgICB9KTtcbiAgICAgIC8vICRGbG93Rml4TWVcbiAgICAgIHN0cmVhbVJlYWQuX3JlYWQgPSBmdW5jdGlvbiAoKTogdm9pZCB7fTtcbiAgICAgIC8vIHByZXZlbnRpbmcgJ1VuY2F1Z2h0LCB1bnNwZWNpZmllZCBcImVycm9yXCIgZXZlbnQnXG4gICAgICBzdHJlYW1SZWFkLm9uKCdlcnJvcicsIGZ1bmN0aW9uICgpOiB2b2lkIHt9KTtcbiAgICAgIHJldHVybiBzdHJlYW1SZWFkO1xuICAgIH1cblxuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIGNvbnN0IGhlYWRlcnM6IEhlYWRlcnMgPSB0aGlzLl9zZXRIZWFkZXJzKG9wdGlvbnMpO1xuXG4gICAgdGhpcy5fYWRkUHJveHlIZWFkZXJzKG9wdGlvbnMucmVxLCBoZWFkZXJzKTtcbiAgICB0aGlzLl9vdmVycmlkZVdpdGhVcExpbmtDb25mTG9jYWxpZ0hlYWRlcnMoaGVhZGVycyk7XG5cbiAgICBjb25zdCBtZXRob2QgPSBvcHRpb25zLm1ldGhvZCB8fCAnR0VUJztcbiAgICBjb25zdCB1cmkgPSBvcHRpb25zLnVyaV9mdWxsIHx8IHRoaXMuY29uZmlnLnVybCArIG9wdGlvbnMudXJpO1xuXG4gICAgc2VsZi5sb2dnZXIuaW5mbyhcbiAgICAgIHtcbiAgICAgICAgbWV0aG9kOiBtZXRob2QsXG4gICAgICAgIGhlYWRlcnM6IGhlYWRlcnMsXG4gICAgICAgIHVyaTogdXJpLFxuICAgICAgfSxcbiAgICAgIFwibWFraW5nIHJlcXVlc3Q6ICdAe21ldGhvZH0gQHt1cml9J1wiXG4gICAgKTtcblxuICAgIGlmIChpc09iamVjdChvcHRpb25zLmpzb24pKSB7XG4gICAgICBqc29uID0gSlNPTi5zdHJpbmdpZnkob3B0aW9ucy5qc29uKTtcbiAgICAgIGhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID0gaGVhZGVyc1snQ29udGVudC1UeXBlJ10gfHwgSEVBREVSUy5KU09OO1xuICAgIH1cblxuICAgIGNvbnN0IHJlcXVlc3RDYWxsYmFjayA9IGNiXG4gICAgICA/IGZ1bmN0aW9uIChlcnIsIHJlcywgYm9keSk6IHZvaWQge1xuICAgICAgICAgIGxldCBlcnJvcjtcbiAgICAgICAgICBjb25zdCByZXNwb25zZUxlbmd0aCA9IGVyciA/IDAgOiBib2R5Lmxlbmd0aDtcbiAgICAgICAgICAvLyAkRmxvd0ZpeE1lXG4gICAgICAgICAgcHJvY2Vzc0JvZHkoKTtcbiAgICAgICAgICBsb2dBY3Rpdml0eSgpO1xuICAgICAgICAgIC8vICRGbG93Rml4TWVcbiAgICAgICAgICBjYihlcnIsIHJlcywgYm9keSk7XG5cbiAgICAgICAgICAvKipcbiAgICAgICAgICAgKiBQZXJmb3JtIGEgZGVjb2RlLlxuICAgICAgICAgICAqL1xuICAgICAgICAgIGZ1bmN0aW9uIHByb2Nlc3NCb2R5KCk6IHZvaWQge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICBlcnJvciA9IGVyci5tZXNzYWdlO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChvcHRpb25zLmpzb24gJiYgcmVzLnN0YXR1c0NvZGUgPCAzMDApIHtcbiAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAvLyAkRmxvd0ZpeE1lXG4gICAgICAgICAgICAgICAgYm9keSA9IEpTT04ucGFyc2UoYm9keS50b1N0cmluZyhDSEFSQUNURVJfRU5DT0RJTkcuVVRGOCkpO1xuICAgICAgICAgICAgICB9IGNhdGNoIChfZXJyKSB7XG4gICAgICAgICAgICAgICAgYm9keSA9IHt9O1xuICAgICAgICAgICAgICAgIGVyciA9IF9lcnI7XG4gICAgICAgICAgICAgICAgZXJyb3IgPSBlcnIubWVzc2FnZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIWVyciAmJiBpc09iamVjdChib2R5KSkge1xuICAgICAgICAgICAgICBpZiAoXy5pc1N0cmluZyhib2R5LmVycm9yKSkge1xuICAgICAgICAgICAgICAgIGVycm9yID0gYm9keS5lcnJvcjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICAvKipcbiAgICAgICAgICAgKiBQZXJmb3JtIGEgbG9nLlxuICAgICAgICAgICAqL1xuICAgICAgICAgIGZ1bmN0aW9uIGxvZ0FjdGl2aXR5KCk6IHZvaWQge1xuICAgICAgICAgICAgbGV0IG1lc3NhZ2UgPSBcIkB7IXN0YXR1c30sIHJlcTogJ0B7cmVxdWVzdC5tZXRob2R9IEB7cmVxdWVzdC51cmx9J1wiO1xuICAgICAgICAgICAgbWVzc2FnZSArPSBlcnJvciA/ICcsIGVycm9yOiBAeyFlcnJvcn0nIDogJywgYnl0ZXM6IEB7Ynl0ZXMuaW59L0B7Ynl0ZXMub3V0fSc7XG4gICAgICAgICAgICBzZWxmLmxvZ2dlci5odHRwKFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZXJyOiBlcnIgfHwgdW5kZWZpbmVkLCAvLyBpZiBlcnJvciBpcyBudWxsL2ZhbHNlIGNoYW5nZSB0aGlzIHRvIHVuZGVmaW5lZCBzbyBpdCB3b250IGxvZ1xuICAgICAgICAgICAgICAgIHJlcXVlc3Q6IHsgbWV0aG9kOiBtZXRob2QsIHVybDogdXJpIH0sXG4gICAgICAgICAgICAgICAgc3RhdHVzOiByZXMgIT0gbnVsbCA/IHJlcy5zdGF0dXNDb2RlIDogJ0VSUicsXG4gICAgICAgICAgICAgICAgZXJyb3I6IGVycm9yLFxuICAgICAgICAgICAgICAgIGJ5dGVzOiB7XG4gICAgICAgICAgICAgICAgICBpbjoganNvbiA/IGpzb24ubGVuZ3RoIDogMCxcbiAgICAgICAgICAgICAgICAgIG91dDogcmVzcG9uc2VMZW5ndGggfHwgMCxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBtZXNzYWdlXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICBsZXQgcmVxdWVzdE9wdGlvbnMgPSB7XG4gICAgICB1cmw6IHVyaSxcbiAgICAgIG1ldGhvZDogbWV0aG9kLFxuICAgICAgaGVhZGVyczogaGVhZGVycyxcbiAgICAgIGJvZHk6IGpzb24sXG4gICAgICBwcm94eTogdGhpcy5wcm94eSxcbiAgICAgIGVuY29kaW5nOiBudWxsLFxuICAgICAgZ3ppcDogdHJ1ZSxcbiAgICAgIHRpbWVvdXQ6IHRoaXMudGltZW91dCxcbiAgICAgIHN0cmljdFNTTDogdGhpcy5zdHJpY3Rfc3NsLFxuICAgICAgYWdlbnRPcHRpb25zOiB0aGlzLmFnZW50X29wdGlvbnMsXG4gICAgfTtcblxuICAgIGlmICh0aGlzLmNhKSB7XG4gICAgICByZXF1ZXN0T3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIHJlcXVlc3RPcHRpb25zLCB7XG4gICAgICAgIGNhOiB0aGlzLmNhLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVxID0gcmVxdWVzdChyZXF1ZXN0T3B0aW9ucywgcmVxdWVzdENhbGxiYWNrKTtcblxuICAgIGxldCBzdGF0dXNDYWxsZWQgPSBmYWxzZTtcbiAgICByZXEub24oJ3Jlc3BvbnNlJywgZnVuY3Rpb24gKHJlcyk6IHZvaWQge1xuICAgICAgLy8gRklYTUU6IF92ZXJkYWNjaW9fYWJvcnRlZCBzZWVtcyBub3QgdXNlZFxuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgaWYgKCFyZXEuX3ZlcmRhY2Npb19hYm9ydGVkICYmICFzdGF0dXNDYWxsZWQpIHtcbiAgICAgICAgc3RhdHVzQ2FsbGVkID0gdHJ1ZTtcbiAgICAgICAgc2VsZi5fc3RhdHVzQ2hlY2sodHJ1ZSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChfLmlzTmlsKHJlcXVlc3RDYWxsYmFjaykgPT09IGZhbHNlKSB7XG4gICAgICAgIChmdW5jdGlvbiBkb19sb2coKTogdm9pZCB7XG4gICAgICAgICAgY29uc3QgbWVzc2FnZSA9IFwiQHshc3RhdHVzfSwgcmVxOiAnQHtyZXF1ZXN0Lm1ldGhvZH0gQHtyZXF1ZXN0LnVybH0nIChzdHJlYW1pbmcpXCI7XG4gICAgICAgICAgc2VsZi5sb2dnZXIuaHR0cChcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgcmVxdWVzdDoge1xuICAgICAgICAgICAgICAgIG1ldGhvZDogbWV0aG9kLFxuICAgICAgICAgICAgICAgIHVybDogdXJpLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBzdGF0dXM6IF8uaXNOdWxsKHJlcykgPT09IGZhbHNlID8gcmVzLnN0YXR1c0NvZGUgOiAnRVJSJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBtZXNzYWdlXG4gICAgICAgICAgKTtcbiAgICAgICAgfSkoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXEub24oJ2Vycm9yJywgZnVuY3Rpb24gKF9lcnIpOiB2b2lkIHtcbiAgICAgIC8vIEZJWE1FOiBfdmVyZGFjY2lvX2Fib3J0ZWQgc2VlbXMgbm90IHVzZWRcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIGlmICghcmVxLl92ZXJkYWNjaW9fYWJvcnRlZCAmJiAhc3RhdHVzQ2FsbGVkKSB7XG4gICAgICAgIHN0YXR1c0NhbGxlZCA9IHRydWU7XG4gICAgICAgIHNlbGYuX3N0YXR1c0NoZWNrKGZhbHNlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgcmV0dXJuIHJlcTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgZGVmYXVsdCBoZWFkZXJzLlxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgKiBAcmV0dXJuIHtPYmplY3R9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIF9zZXRIZWFkZXJzKG9wdGlvbnM6IGFueSk6IEhlYWRlcnMge1xuICAgIGNvbnN0IGhlYWRlcnMgPSBvcHRpb25zLmhlYWRlcnMgfHwge307XG4gICAgY29uc3QgYWNjZXB0ID0gSEVBREVSUy5BQ0NFUFQ7XG4gICAgY29uc3QgYWNjZXB0RW5jb2RpbmcgPSBIRUFERVJTLkFDQ0VQVF9FTkNPRElORztcbiAgICBjb25zdCB1c2VyQWdlbnQgPSBIRUFERVJTLlVTRVJfQUdFTlQ7XG5cbiAgICBoZWFkZXJzW2FjY2VwdF0gPSBoZWFkZXJzW2FjY2VwdF0gfHwgY29udGVudFR5cGVBY2NlcHQ7XG4gICAgaGVhZGVyc1thY2NlcHRFbmNvZGluZ10gPSBoZWFkZXJzW2FjY2VwdEVuY29kaW5nXSB8fCAnZ3ppcCc7XG4gICAgLy8gcmVnaXN0cnkubnBtanMub3JnIHdpbGwgb25seSByZXR1cm4gc2VhcmNoIHJlc3VsdCBpZiB1c2VyLWFnZW50IGluY2x1ZGUgc3RyaW5nICducG0nXG4gICAgaGVhZGVyc1t1c2VyQWdlbnRdID0gaGVhZGVyc1t1c2VyQWdlbnRdIHx8IGBucG0gKCR7dGhpcy51c2VyQWdlbnR9KWA7XG5cbiAgICByZXR1cm4gdGhpcy5fc2V0QXV0aChoZWFkZXJzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSBjb25maWd1cmF0aW9uIGF1dGggYW5kIGFzc2lnbiBIZWFkZXIgYXV0aG9yaXphdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0gaGVhZGVyc1xuICAgKiBAcmV0dXJuIHtPYmplY3R9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIF9zZXRBdXRoKGhlYWRlcnM6IGFueSk6IEhlYWRlcnMge1xuICAgIGNvbnN0IHsgYXV0aCB9ID0gdGhpcy5jb25maWc7XG5cbiAgICBpZiAoXy5pc05pbChhdXRoKSB8fCBoZWFkZXJzW0hFQURFUlMuQVVUSE9SSVpBVElPTl0pIHtcbiAgICAgIHJldHVybiBoZWFkZXJzO1xuICAgIH1cblxuICAgIGlmIChfLmlzT2JqZWN0KGF1dGgpID09PSBmYWxzZSAmJiBfLmlzT2JqZWN0KGF1dGgudG9rZW4pID09PSBmYWxzZSkge1xuICAgICAgdGhpcy5fdGhyb3dFcnJvckF1dGgoJ0F1dGggaW52YWxpZCcpO1xuICAgIH1cblxuICAgIC8vIGdldCBOUE1fVE9LRU4gaHR0cDovL2Jsb2cubnBtanMub3JnL3Bvc3QvMTE4MzkzMzY4NTU1L2RlcGxveWluZy13aXRoLW5wbS1wcml2YXRlLW1vZHVsZXNcbiAgICAvLyBvciBnZXQgb3RoZXIgdmFyaWFibGUgZXhwb3J0IGluIGVudlxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS92ZXJkYWNjaW8vdmVyZGFjY2lvL3JlbGVhc2VzL3RhZy92Mi41LjBcbiAgICBsZXQgdG9rZW46IGFueTtcbiAgICBjb25zdCB0b2tlbkNvbmY6IGFueSA9IGF1dGg7XG5cbiAgICBpZiAoXy5pc05pbCh0b2tlbkNvbmYudG9rZW4pID09PSBmYWxzZSAmJiBfLmlzU3RyaW5nKHRva2VuQ29uZi50b2tlbikpIHtcbiAgICAgIHRva2VuID0gdG9rZW5Db25mLnRva2VuO1xuICAgIH0gZWxzZSBpZiAoXy5pc05pbCh0b2tlbkNvbmYudG9rZW5fZW52KSA9PT0gZmFsc2UpIHtcbiAgICAgIGlmIChfLmlzU3RyaW5nKHRva2VuQ29uZi50b2tlbl9lbnYpKSB7XG4gICAgICAgIHRva2VuID0gcHJvY2Vzcy5lbnZbdG9rZW5Db25mLnRva2VuX2Vudl07XG4gICAgICB9IGVsc2UgaWYgKF8uaXNCb29sZWFuKHRva2VuQ29uZi50b2tlbl9lbnYpICYmIHRva2VuQ29uZi50b2tlbl9lbnYpIHtcbiAgICAgICAgdG9rZW4gPSBwcm9jZXNzLmVudi5OUE1fVE9LRU47XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcihFUlJPUl9DT0RFLnRva2VuX3JlcXVpcmVkKTtcbiAgICAgICAgdGhpcy5fdGhyb3dFcnJvckF1dGgoRVJST1JfQ09ERS50b2tlbl9yZXF1aXJlZCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRva2VuID0gcHJvY2Vzcy5lbnYuTlBNX1RPS0VOO1xuICAgIH1cblxuICAgIGlmIChfLmlzTmlsKHRva2VuKSkge1xuICAgICAgdGhpcy5fdGhyb3dFcnJvckF1dGgoRVJST1JfQ09ERS50b2tlbl9yZXF1aXJlZCk7XG4gICAgfVxuXG4gICAgLy8gZGVmaW5lIHR5cGUgQXV0aCBhbGxvdyBiYXNpYyBhbmQgYmVhcmVyXG4gICAgY29uc3QgdHlwZSA9IHRva2VuQ29uZi50eXBlIHx8IFRPS0VOX0JBU0lDO1xuICAgIHRoaXMuX3NldEhlYWRlckF1dGhvcml6YXRpb24oaGVhZGVycywgdHlwZSwgdG9rZW4pO1xuXG4gICAgcmV0dXJuIGhlYWRlcnM7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2VcbiAgICogQHRocm93cyB7RXJyb3J9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIF90aHJvd0Vycm9yQXV0aChtZXNzYWdlOiBzdHJpbmcpOiBFcnJvciB7XG4gICAgdGhpcy5sb2dnZXIuZXJyb3IobWVzc2FnZSk7XG4gICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFzc2lnbiBIZWFkZXIgYXV0aG9yaXphdGlvbiB3aXRoIHR5cGUgYXV0aGVudGljYXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IGhlYWRlcnNcbiAgICogQHBhcmFtIHtzdHJpbmd9IHR5cGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRva2VuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIF9zZXRIZWFkZXJBdXRob3JpemF0aW9uKGhlYWRlcnM6IGFueSwgdHlwZTogc3RyaW5nLCB0b2tlbjogYW55KTogdm9pZCB7XG4gICAgY29uc3QgX3R5cGU6IHN0cmluZyA9IHR5cGUudG9Mb3dlckNhc2UoKTtcblxuICAgIGlmIChfdHlwZSAhPT0gVE9LRU5fQkVBUkVSLnRvTG93ZXJDYXNlKCkgJiYgX3R5cGUgIT09IFRPS0VOX0JBU0lDLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgIHRoaXMuX3Rocm93RXJyb3JBdXRoKGBBdXRoIHR5cGUgJyR7X3R5cGV9JyBub3QgYWxsb3dlZGApO1xuICAgIH1cblxuICAgIHR5cGUgPSBfLnVwcGVyRmlyc3QodHlwZSk7XG4gICAgaGVhZGVyc1tIRUFERVJTLkFVVEhPUklaQVRJT05dID0gYnVpbGRUb2tlbih0eXBlLCB0b2tlbik7XG4gIH1cblxuICAvKipcbiAgICogSXQgd2lsbCBhZGQgb3Igb3ZlcnJpZGUgc3BlY2lmaWVkIGhlYWRlcnMgZnJvbSBjb25maWcgZmlsZS5cbiAgICpcbiAgICogRWc6XG4gICAqXG4gICAqIHVwbGlua3M6XG4gICBucG1qczpcbiAgIHVybDogaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvXG4gICBoZWFkZXJzOlxuICAgQWNjZXB0OiBcImFwcGxpY2F0aW9uL3ZuZC5ucG0uaW5zdGFsbC12Mitqc29uOyBxPTEuMFwiXG4gICB2ZXJkYWNjaW8tc3RhZ2luZzpcbiAgIHVybDogaHR0cHM6Ly9teWNvbXBhbnkuY29tL25wbVxuICAgaGVhZGVyczpcbiAgIEFjY2VwdDogXCJhcHBsaWNhdGlvbi9qc29uXCJcbiAgIGF1dGhvcml6YXRpb246IFwiQmFzaWMgWW91ckJhc2U2NEVuY29kZWRDcmVkZW50aWFscz09XCJcblxuICAgKiBAcGFyYW0ge09iamVjdH0gaGVhZGVyc1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBfb3ZlcnJpZGVXaXRoVXBMaW5rQ29uZkxvY2FsaWdIZWFkZXJzKGhlYWRlcnM6IEhlYWRlcnMpOiBhbnkge1xuICAgIGlmICghdGhpcy5jb25maWcuaGVhZGVycykge1xuICAgICAgcmV0dXJuIGhlYWRlcnM7XG4gICAgfVxuXG4gICAgLy8gYWRkL292ZXJyaWRlIGhlYWRlcnMgc3BlY2lmaWVkIGluIHRoZSBjb25maWdcbiAgICAvKiBlc2xpbnQgZ3VhcmQtZm9yLWluOiAwICovXG4gICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5jb25maWcuaGVhZGVycykge1xuICAgICAgaGVhZGVyc1trZXldID0gdGhpcy5jb25maWcuaGVhZGVyc1trZXldO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmUgd2hldGhlciBjYW4gZmV0Y2ggZnJvbSB0aGUgcHJvdmlkZWQgVVJMXG4gICAqIEBwYXJhbSB7Kn0gdXJsXG4gICAqIEByZXR1cm4ge0Jvb2xlYW59XG4gICAqL1xuICBwdWJsaWMgaXNVcGxpbmtWYWxpZCh1cmw6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIC8vICRGbG93Rml4TWVcbiAgICBjb25zdCB1cmxQYXJzZWQ6IFVybFdpdGhTdHJpbmdRdWVyeSA9IFVSTC5wYXJzZSh1cmwpO1xuICAgIGNvbnN0IGlzSFRUUFMgPSAodXJsRG9tYWluUGFyc2VkOiBVUkwpOiBib29sZWFuID0+IHVybERvbWFpblBhcnNlZC5wcm90b2NvbCA9PT0gJ2h0dHBzOicgJiYgKHVybFBhcnNlZC5wb3J0ID09PSBudWxsIHx8IHVybFBhcnNlZC5wb3J0ID09PSAnNDQzJyk7XG4gICAgY29uc3QgZ2V0SG9zdCA9ICh1cmxEb21haW5QYXJzZWQpOiBib29sZWFuID0+IChpc0hUVFBTKHVybERvbWFpblBhcnNlZCkgPyB1cmxEb21haW5QYXJzZWQuaG9zdG5hbWUgOiB1cmxEb21haW5QYXJzZWQuaG9zdCk7XG4gICAgY29uc3QgaXNNYXRjaFByb3RvY29sOiBib29sZWFuID0gdXJsUGFyc2VkLnByb3RvY29sID09PSB0aGlzLnVybC5wcm90b2NvbDtcbiAgICBjb25zdCBpc01hdGNoSG9zdDogYm9vbGVhbiA9IGdldEhvc3QodXJsUGFyc2VkKSA9PT0gZ2V0SG9zdCh0aGlzLnVybCk7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGNvbnN0IGlzTWF0Y2hQYXRoOiBib29sZWFuID0gdXJsUGFyc2VkLnBhdGguaW5kZXhPZih0aGlzLnVybC5wYXRoKSA9PT0gMDtcblxuICAgIHJldHVybiBpc01hdGNoUHJvdG9jb2wgJiYgaXNNYXRjaEhvc3QgJiYgaXNNYXRjaFBhdGg7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGEgcmVtb3RlIHBhY2thZ2UgbWV0YWRhdGFcbiAgICogQHBhcmFtIHsqfSBuYW1lIHBhY2thZ2UgbmFtZVxuICAgKiBAcGFyYW0geyp9IG9wdGlvbnMgcmVxdWVzdCBvcHRpb25zLCBlZzogZVRhZy5cbiAgICogQHBhcmFtIHsqfSBjYWxsYmFja1xuICAgKi9cbiAgcHVibGljIGdldFJlbW90ZU1ldGFkYXRhKG5hbWU6IHN0cmluZywgb3B0aW9uczogYW55LCBjYWxsYmFjazogQ2FsbGJhY2spOiB2b2lkIHtcbiAgICBjb25zdCBoZWFkZXJzID0ge307XG4gICAgaWYgKF8uaXNOaWwob3B0aW9ucy5ldGFnKSA9PT0gZmFsc2UpIHtcbiAgICAgIGhlYWRlcnNbJ0lmLU5vbmUtTWF0Y2gnXSA9IG9wdGlvbnMuZXRhZztcbiAgICAgIGhlYWRlcnNbSEVBREVSUy5BQ0NFUFRdID0gY29udGVudFR5cGVBY2NlcHQ7XG4gICAgfVxuXG4gICAgdGhpcy5yZXF1ZXN0KFxuICAgICAge1xuICAgICAgICB1cmk6IGAvJHtlbmNvZGUobmFtZSl9YCxcbiAgICAgICAganNvbjogdHJ1ZSxcbiAgICAgICAgaGVhZGVyczogaGVhZGVycyxcbiAgICAgICAgcmVxOiBvcHRpb25zLnJlcSxcbiAgICAgIH0sXG4gICAgICAoZXJyLCByZXMsIGJvZHkpOiB2b2lkID0+IHtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZXMuc3RhdHVzQ29kZSA9PT0gSFRUUF9TVEFUVVMuTk9UX0ZPVU5EKSB7XG4gICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKEVycm9yQ29kZS5nZXROb3RGb3VuZChBUElfRVJST1IuTk9UX1BBQ0tBR0VfVVBMSU5LKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCEocmVzLnN0YXR1c0NvZGUgPj0gSFRUUF9TVEFUVVMuT0sgJiYgcmVzLnN0YXR1c0NvZGUgPCBIVFRQX1NUQVRVUy5NVUxUSVBMRV9DSE9JQ0VTKSkge1xuICAgICAgICAgIGNvbnN0IGVycm9yID0gRXJyb3JDb2RlLmdldEludGVybmFsRXJyb3IoYCR7QVBJX0VSUk9SLkJBRF9TVEFUVVNfQ09ERX06ICR7cmVzLnN0YXR1c0NvZGV9YCk7XG4gICAgICAgICAgLy8gJEZsb3dGaXhNZVxuICAgICAgICAgIGVycm9yLnJlbW90ZVN0YXR1cyA9IHJlcy5zdGF0dXNDb2RlO1xuICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgY2FsbGJhY2sobnVsbCwgYm9keSwgcmVzLmhlYWRlcnMuZXRhZyk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaCBhIHRhcmJhbGwgZnJvbSB0aGUgdXBsaW5rLlxuICAgKiBAcGFyYW0ge1N0cmluZ30gdXJsXG4gICAqIEByZXR1cm4ge1N0cmVhbX1cbiAgICovXG4gIGZldGNoVGFyYmFsbCh1cmw6IHN0cmluZykge1xuICAgIGNvbnN0IHN0cmVhbSA9IG5ldyBSZWFkVGFyYmFsbCh7fSk7XG4gICAgbGV0IGN1cnJlbnRfbGVuZ3RoID0gMDtcbiAgICBsZXQgZXhwZWN0ZWRfbGVuZ3RoO1xuXG4gICAgc3RyZWFtLmFib3J0ID0gKCkgPT4ge307XG4gICAgY29uc3QgcmVhZFN0cmVhbSA9IHRoaXMucmVxdWVzdCh7XG4gICAgICB1cmlfZnVsbDogdXJsLFxuICAgICAgZW5jb2Rpbmc6IG51bGwsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgIEFjY2VwdDogY29udGVudFR5cGVBY2NlcHQsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmVhZFN0cmVhbS5vbigncmVzcG9uc2UnLCBmdW5jdGlvbiAocmVzOiBhbnkpIHtcbiAgICAgIGlmIChyZXMuc3RhdHVzQ29kZSA9PT0gSFRUUF9TVEFUVVMuTk9UX0ZPVU5EKSB7XG4gICAgICAgIHJldHVybiBzdHJlYW0uZW1pdCgnZXJyb3InLCBFcnJvckNvZGUuZ2V0Tm90Rm91bmQoQVBJX0VSUk9SLk5PVF9GSUxFX1VQTElOSykpO1xuICAgICAgfVxuICAgICAgaWYgKCEocmVzLnN0YXR1c0NvZGUgPj0gSFRUUF9TVEFUVVMuT0sgJiYgcmVzLnN0YXR1c0NvZGUgPCBIVFRQX1NUQVRVUy5NVUxUSVBMRV9DSE9JQ0VTKSkge1xuICAgICAgICByZXR1cm4gc3RyZWFtLmVtaXQoJ2Vycm9yJywgRXJyb3JDb2RlLmdldEludGVybmFsRXJyb3IoYGJhZCB1cGxpbmsgc3RhdHVzIGNvZGU6ICR7cmVzLnN0YXR1c0NvZGV9YCkpO1xuICAgICAgfVxuICAgICAgaWYgKHJlcy5oZWFkZXJzW0hFQURFUl9UWVBFLkNPTlRFTlRfTEVOR1RIXSkge1xuICAgICAgICBleHBlY3RlZF9sZW5ndGggPSByZXMuaGVhZGVyc1tIRUFERVJfVFlQRS5DT05URU5UX0xFTkdUSF07XG4gICAgICAgIHN0cmVhbS5lbWl0KEhFQURFUl9UWVBFLkNPTlRFTlRfTEVOR1RILCByZXMuaGVhZGVyc1tIRUFERVJfVFlQRS5DT05URU5UX0xFTkdUSF0pO1xuICAgICAgfVxuXG4gICAgICByZWFkU3RyZWFtLnBpcGUoc3RyZWFtKTtcbiAgICB9KTtcblxuICAgIHJlYWRTdHJlYW0ub24oJ2Vycm9yJywgZnVuY3Rpb24gKGVycikge1xuICAgICAgc3RyZWFtLmVtaXQoJ2Vycm9yJywgZXJyKTtcbiAgICB9KTtcbiAgICByZWFkU3RyZWFtLm9uKCdkYXRhJywgZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgIGN1cnJlbnRfbGVuZ3RoICs9IGRhdGEubGVuZ3RoO1xuICAgIH0pO1xuICAgIHJlYWRTdHJlYW0ub24oJ2VuZCcsIGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICBpZiAoZGF0YSkge1xuICAgICAgICBjdXJyZW50X2xlbmd0aCArPSBkYXRhLmxlbmd0aDtcbiAgICAgIH1cbiAgICAgIGlmIChleHBlY3RlZF9sZW5ndGggJiYgY3VycmVudF9sZW5ndGggIT0gZXhwZWN0ZWRfbGVuZ3RoKSB7XG4gICAgICAgIHN0cmVhbS5lbWl0KCdlcnJvcicsIEVycm9yQ29kZS5nZXRJbnRlcm5hbEVycm9yKEFQSV9FUlJPUi5DT05URU5UX01JU01BVENIKSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHN0cmVhbTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQZXJmb3JtIGEgc3RyZWFtIHNlYXJjaC5cbiAgICogQHBhcmFtIHsqfSBvcHRpb25zIHJlcXVlc3Qgb3B0aW9uc1xuICAgKiBAcmV0dXJuIHtTdHJlYW19XG4gICAqL1xuICBwdWJsaWMgc2VhcmNoKG9wdGlvbnM6IGFueSk6IFN0cmVhbS5SZWFkYWJsZSB7XG4gICAgY29uc3QgdHJhbnNmb3JtU3RyZWFtOiBhbnkgPSBuZXcgU3RyZWFtLlBhc3NUaHJvdWdoKHsgb2JqZWN0TW9kZTogdHJ1ZSB9KTtcbiAgICBjb25zdCByZXF1ZXN0U3RyZWFtOiBTdHJlYW0uUmVhZGFibGUgPSB0aGlzLnJlcXVlc3Qoe1xuICAgICAgdXJpOiBvcHRpb25zLnJlcS51cmwsXG4gICAgICByZXE6IG9wdGlvbnMucmVxLFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICAvLyBxdWVyeSBmb3Igc2VhcmNoXG4gICAgICAgIHJlZmVyZXI6IG9wdGlvbnMucmVxLmdldCgncmVmZXJlcicpLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHBhcnNlUGFja2FnZSA9IChwa2c6IFBhY2thZ2UpOiB2b2lkID0+IHtcbiAgICAgIGlmIChpc09iamVjdE9yQXJyYXkocGtnKSkge1xuICAgICAgICB0cmFuc2Zvcm1TdHJlYW0uZW1pdCgnZGF0YScsIHBrZyk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHJlcXVlc3RTdHJlYW0ub24oJ3Jlc3BvbnNlJywgKHJlcyk6IHZvaWQgPT4ge1xuICAgICAgaWYgKCFTdHJpbmcocmVzLnN0YXR1c0NvZGUpLm1hdGNoKC9eMlxcZFxcZCQvKSkge1xuICAgICAgICByZXR1cm4gdHJhbnNmb3JtU3RyZWFtLmVtaXQoJ2Vycm9yJywgRXJyb3JDb2RlLmdldEludGVybmFsRXJyb3IoYGJhZCBzdGF0dXMgY29kZSAke3Jlcy5zdGF0dXNDb2RlfSBmcm9tIHVwbGlua2ApKTtcbiAgICAgIH1cblxuICAgICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9yZXF1ZXN0L3JlcXVlc3QjcmVxdWVzdG9wdGlvbnMtY2FsbGJhY2tcbiAgICAgIC8vIFJlcXVlc3QgbGlicmFyeSB3aWxsIG5vdCBkZWNvZGUgZ3ppcCBzdHJlYW0uXG4gICAgICBsZXQganNvblN0cmVhbTtcbiAgICAgIGlmIChyZXMuaGVhZGVyc1tIRUFERVJfVFlQRS5DT05URU5UX0VOQ09ESU5HXSA9PT0gSEVBREVSUy5HWklQKSB7XG4gICAgICAgIGpzb25TdHJlYW0gPSByZXMucGlwZSh6bGliLmNyZWF0ZVVuemlwKCkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAganNvblN0cmVhbSA9IHJlcztcbiAgICAgIH1cbiAgICAgIGpzb25TdHJlYW0ucGlwZShKU09OU3RyZWFtLnBhcnNlKCcqJykpLm9uKCdkYXRhJywgcGFyc2VQYWNrYWdlKTtcbiAgICAgIGpzb25TdHJlYW0ub24oJ2VuZCcsICgpOiB2b2lkID0+IHtcbiAgICAgICAgdHJhbnNmb3JtU3RyZWFtLmVtaXQoJ2VuZCcpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICByZXF1ZXN0U3RyZWFtLm9uKCdlcnJvcicsIChlcnI6IEVycm9yKTogdm9pZCA9PiB7XG4gICAgICB0cmFuc2Zvcm1TdHJlYW0uZW1pdCgnZXJyb3InLCBlcnIpO1xuICAgIH0pO1xuXG4gICAgdHJhbnNmb3JtU3RyZWFtLmFib3J0ID0gKCk6IHZvaWQgPT4ge1xuICAgICAgLy8gRklYTUU6IHRoaXMgaXMgY2xlYXJseSBhIHBvdGVudGlhbCBpc3N1ZVxuICAgICAgLy8gdGhlcmUgaXMgbm8gYWJvcnQgbWV0aG9kIG9uIFN0cmVhbS5SZWFkYWJsZVxuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgcmVxdWVzdFN0cmVhbS5hYm9ydCgpO1xuICAgICAgdHJhbnNmb3JtU3RyZWFtLmVtaXQoJ2VuZCcpO1xuICAgIH07XG5cbiAgICByZXR1cm4gdHJhbnNmb3JtU3RyZWFtO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBwcm94eSBoZWFkZXJzLlxuICAgKiBGSVhNRTogb2JqZWN0IG11dGF0aW9ucywgaXQgc2hvdWxkIHJldHVybiBhbiBuZXcgb2JqZWN0XG4gICAqIEBwYXJhbSB7Kn0gcmVxIHRoZSBodHRwIHJlcXVlc3RcbiAgICogQHBhcmFtIHsqfSBoZWFkZXJzIHRoZSByZXF1ZXN0IGhlYWRlcnNcbiAgICovXG4gIHByaXZhdGUgX2FkZFByb3h5SGVhZGVycyhyZXE6IGFueSwgaGVhZGVyczogYW55KTogdm9pZCB7XG4gICAgaWYgKHJlcSkge1xuICAgICAgLy8gT25seSBzdWJtaXQgWC1Gb3J3YXJkZWQtRm9yIGZpZWxkIGlmIHdlIGRvbid0IGhhdmUgYSBwcm94eSBzZWxlY3RlZFxuICAgICAgLy8gaW4gdGhlIGNvbmZpZyBmaWxlLlxuICAgICAgLy9cbiAgICAgIC8vIE90aGVyd2lzZSBtaXNjb25maWd1cmVkIHByb3h5IGNvdWxkIHJldHVybiA0MDc6XG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vcmxpZHdrYS9zaW5vcGlhL2lzc3Vlcy8yNTRcbiAgICAgIC8vXG4gICAgICAvLyBGSVhNRTogcHJveHkgbG9naWMgaXMgb2RkLCBzb21ldGhpbmcgaXMgd3JvbmcgaGVyZS5cbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIGlmICghdGhpcy5wcm94eSkge1xuICAgICAgICBoZWFkZXJzWyd4LWZvcndhcmRlZC1mb3InXSA9IChyZXEuZ2V0KCd4LWZvcndhcmRlZC1mb3InKSA/IHJlcS5nZXQoJ3gtZm9yd2FyZGVkLWZvcicpICsgJywgJyA6ICcnKSArIHJlcS5jb25uZWN0aW9uLnJlbW90ZUFkZHJlc3M7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gYWx3YXlzIGF0dGFjaCBWaWEgaGVhZGVyIHRvIGF2b2lkIGxvb3BzLCBldmVuIGlmIHdlJ3JlIG5vdCBwcm94eWluZ1xuICAgIGhlYWRlcnNbJ3ZpYSddID0gcmVxICYmIHJlcS5nZXQoJ3ZpYScpID8gcmVxLmdldCgndmlhJykgKyAnLCAnIDogJyc7XG5cbiAgICBoZWFkZXJzWyd2aWEnXSArPSAnMS4xICcgKyB0aGlzLnNlcnZlcl9pZCArICcgKFZlcmRhY2NpbyknO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIHdoZXRoZXIgdGhlIHJlbW90ZSBob3N0IGlzIGF2YWlsYWJsZS5cbiAgICogQHBhcmFtIHsqfSBhbGl2ZVxuICAgKiBAcmV0dXJuIHtCb29sZWFufVxuICAgKi9cbiAgcHJpdmF0ZSBfc3RhdHVzQ2hlY2soYWxpdmU/OiBib29sZWFuKTogYm9vbGVhbiB8IHZvaWQge1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gdGhpcy5faWZSZXF1ZXN0RmFpbHVyZSgpID09PSBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGFsaXZlKSB7XG4gICAgICBpZiAodGhpcy5mYWlsZWRfcmVxdWVzdHMgPj0gdGhpcy5tYXhfZmFpbHMpIHtcbiAgICAgICAgdGhpcy5sb2dnZXIud2FybihcbiAgICAgICAgICB7XG4gICAgICAgICAgICBob3N0OiB0aGlzLnVybC5ob3N0LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgJ2hvc3QgQHtob3N0fSBpcyBiYWNrIG9ubGluZSdcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZmFpbGVkX3JlcXVlc3RzID0gMDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5mYWlsZWRfcmVxdWVzdHMrKztcbiAgICAgIGlmICh0aGlzLmZhaWxlZF9yZXF1ZXN0cyA9PT0gdGhpcy5tYXhfZmFpbHMpIHtcbiAgICAgICAgdGhpcy5sb2dnZXIud2FybihcbiAgICAgICAgICB7XG4gICAgICAgICAgICBob3N0OiB0aGlzLnVybC5ob3N0LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgJ2hvc3QgQHtob3N0fSBpcyBub3cgb2ZmbGluZSdcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmxhc3RfcmVxdWVzdF90aW1lID0gRGF0ZS5ub3coKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJZiB0aGUgcmVxdWVzdCBmYWlsdXJlLlxuICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBfaWZSZXF1ZXN0RmFpbHVyZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5mYWlsZWRfcmVxdWVzdHMgPj0gdGhpcy5tYXhfZmFpbHMgJiYgTWF0aC5hYnMoRGF0ZS5ub3coKSAtICh0aGlzLmxhc3RfcmVxdWVzdF90aW1lIGFzIG51bWJlcikpIDwgdGhpcy5mYWlsX3RpbWVvdXQ7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHVwIGEgcHJveHkuXG4gICAqIEBwYXJhbSB7Kn0gaG9zdG5hbWVcbiAgICogQHBhcmFtIHsqfSBjb25maWdcbiAgICogQHBhcmFtIHsqfSBtYWluY29uZmlnXG4gICAqIEBwYXJhbSB7Kn0gaXNIVFRQU1xuICAgKi9cbiAgcHJpdmF0ZSBfc2V0dXBQcm94eShob3N0bmFtZTogc3RyaW5nLCBjb25maWc6IFVwTGlua0NvbmZMb2NhbCwgbWFpbmNvbmZpZzogQ29uZmlnLCBpc0hUVFBTOiBib29sZWFuKTogdm9pZCB7XG4gICAgbGV0IG5vUHJveHlMaXN0O1xuICAgIGNvbnN0IHByb3h5X2tleTogc3RyaW5nID0gaXNIVFRQUyA/ICdodHRwc19wcm94eScgOiAnaHR0cF9wcm94eSc7XG5cbiAgICAvLyBnZXQgaHR0cF9wcm94eSBhbmQgbm9fcHJveHkgY29uZmlnc1xuICAgIGlmIChwcm94eV9rZXkgaW4gY29uZmlnKSB7XG4gICAgICB0aGlzLnByb3h5ID0gY29uZmlnW3Byb3h5X2tleV07XG4gICAgfSBlbHNlIGlmIChwcm94eV9rZXkgaW4gbWFpbmNvbmZpZykge1xuICAgICAgdGhpcy5wcm94eSA9IG1haW5jb25maWdbcHJveHlfa2V5XTtcbiAgICB9XG4gICAgaWYgKCdub19wcm94eScgaW4gY29uZmlnKSB7XG4gICAgICAvLyAkRmxvd0ZpeE1lXG4gICAgICBub1Byb3h5TGlzdCA9IGNvbmZpZy5ub19wcm94eTtcbiAgICB9IGVsc2UgaWYgKCdub19wcm94eScgaW4gbWFpbmNvbmZpZykge1xuICAgICAgbm9Qcm94eUxpc3QgPSBtYWluY29uZmlnLm5vX3Byb3h5O1xuICAgIH1cblxuICAgIC8vIHVzZSB3Z2V0LWxpa2UgYWxnb3JpdGhtIHRvIGRldGVybWluZSBpZiBwcm94eSBzaG91bGRuJ3QgYmUgdXNlZFxuICAgIGlmIChob3N0bmFtZVswXSAhPT0gJy4nKSB7XG4gICAgICBob3N0bmFtZSA9ICcuJyArIGhvc3RuYW1lO1xuICAgIH1cblxuICAgIGlmIChfLmlzU3RyaW5nKG5vUHJveHlMaXN0KSAmJiBub1Byb3h5TGlzdC5sZW5ndGgpIHtcbiAgICAgIC8vICRGbG93Rml4TWVcbiAgICAgIG5vUHJveHlMaXN0ID0gbm9Qcm94eUxpc3Quc3BsaXQoJywnKTtcbiAgICB9XG5cbiAgICBpZiAoXy5pc0FycmF5KG5vUHJveHlMaXN0KSkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBub1Byb3h5TGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgICBsZXQgbm9Qcm94eUl0ZW0gPSBub1Byb3h5TGlzdFtpXTtcbiAgICAgICAgaWYgKG5vUHJveHlJdGVtWzBdICE9PSAnLicpIHtcbiAgICAgICAgICBub1Byb3h5SXRlbSA9ICcuJyArIG5vUHJveHlJdGVtO1xuICAgICAgICB9XG4gICAgICAgIGlmIChob3N0bmFtZS5sYXN0SW5kZXhPZihub1Byb3h5SXRlbSkgPT09IGhvc3RuYW1lLmxlbmd0aCAtIG5vUHJveHlJdGVtLmxlbmd0aCkge1xuICAgICAgICAgIGlmICh0aGlzLnByb3h5KSB7XG4gICAgICAgICAgICBkZWJ1Zygnbm90IHVzaW5nIHByb3h5IGZvciAlbywgZXhjbHVkZWQgYnkgJW8gcnVsZScsIHRoaXMudXJsLmhyZWYsIG5vUHJveHlJdGVtKTtcbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgIHRoaXMucHJveHkgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBpZiBpdCdzIG5vbi1zdHJpbmcgKGkuZS4gXCJmYWxzZVwiKSwgZG9uJ3QgdXNlIGl0XG4gICAgaWYgKF8uaXNTdHJpbmcodGhpcy5wcm94eSkgPT09IGZhbHNlKSB7XG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICBkZWxldGUgdGhpcy5wcm94eTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGVidWcoJ3VzaW5nIHByb3h5ICVvIGZvciAlbycsIHRoaXMudXJsLmhyZWYsIHRoaXMucHJveHkpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBQcm94eVN0b3JhZ2U7XG4iXX0=
|
|
743
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvdXAtc3RvcmFnZS50cyJdLCJuYW1lcyI6WyJkZWJ1ZyIsImVuY29kZSIsInRoaW5nIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwicmVwbGFjZSIsImpzb25Db250ZW50VHlwZSIsIkhFQURFUlMiLCJKU09OIiwiY29udGVudFR5cGVBY2NlcHQiLCJzZXRDb25maWciLCJjb25maWciLCJrZXkiLCJkZWYiLCJfIiwiaXNOaWwiLCJQcm94eVN0b3JhZ2UiLCJjb25zdHJ1Y3RvciIsIm1haW5Db25maWciLCJmYWlsZWRfcmVxdWVzdHMiLCJ1c2VyQWdlbnQiLCJ1c2VyX2FnZW50IiwiY2EiLCJsb2dnZXIiLCJzZXJ2ZXJfaWQiLCJ1cmwiLCJVUkwiLCJwYXJzZSIsIl9zZXR1cFByb3h5IiwiaG9zdG5hbWUiLCJwcm90b2NvbCIsInRpbWVvdXQiLCJOdW1iZXIiLCJ3YXJuIiwiam9pbiIsIm1heGFnZSIsIm1heF9mYWlscyIsImZhaWxfdGltZW91dCIsInN0cmljdF9zc2wiLCJCb29sZWFuIiwiYWdlbnRfb3B0aW9ucyIsImtlZXBBbGl2ZSIsIm1heFNvY2tldHMiLCJtYXhGcmVlU29ja2V0cyIsInJlcXVlc3QiLCJvcHRpb25zIiwiY2IiLCJqc29uIiwiX3N0YXR1c0NoZWNrIiwic3RyZWFtUmVhZCIsIlN0cmVhbSIsIlJlYWRhYmxlIiwicHJvY2VzcyIsIm5leHRUaWNrIiwiRXJyb3JDb2RlIiwiZ2V0SW50ZXJuYWxFcnJvciIsIkFQSV9FUlJPUiIsIlVQTElOS19PRkZMSU5FIiwiZW1pdCIsIl9yZWFkIiwib24iLCJzZWxmIiwiaGVhZGVycyIsIl9zZXRIZWFkZXJzIiwiX2FkZFByb3h5SGVhZGVycyIsInJlcSIsIl9vdmVycmlkZVdpdGhVcExpbmtDb25mTG9jYWxpZ0hlYWRlcnMiLCJtZXRob2QiLCJ1cmkiLCJ1cmlfZnVsbCIsImluZm8iLCJzdHJpbmdpZnkiLCJyZXF1ZXN0Q2FsbGJhY2siLCJlcnIiLCJyZXMiLCJib2R5IiwiZXJyb3IiLCJyZXNwb25zZUxlbmd0aCIsImxlbmd0aCIsInByb2Nlc3NCb2R5IiwibG9nQWN0aXZpdHkiLCJtZXNzYWdlIiwic3RhdHVzQ29kZSIsInRvU3RyaW5nIiwiQ0hBUkFDVEVSX0VOQ09ESU5HIiwiVVRGOCIsIl9lcnIiLCJpc1N0cmluZyIsImh0dHAiLCJ1bmRlZmluZWQiLCJzdGF0dXMiLCJieXRlcyIsImluIiwib3V0IiwicmVxdWVzdE9wdGlvbnMiLCJwcm94eSIsImVuY29kaW5nIiwiZ3ppcCIsInN0cmljdFNTTCIsImFnZW50T3B0aW9ucyIsIk9iamVjdCIsImFzc2lnbiIsInN0YXR1c0NhbGxlZCIsIl92ZXJkYWNjaW9fYWJvcnRlZCIsImRvX2xvZyIsImlzTnVsbCIsImFjY2VwdCIsIkFDQ0VQVCIsImFjY2VwdEVuY29kaW5nIiwiQUNDRVBUX0VOQ09ESU5HIiwiVVNFUl9BR0VOVCIsImdldCIsIl9zZXRBdXRoIiwiYXV0aCIsIkFVVEhPUklaQVRJT04iLCJpc09iamVjdCIsInRva2VuIiwiX3Rocm93RXJyb3JBdXRoIiwidG9rZW5Db25mIiwidG9rZW5fZW52IiwiZW52IiwiaXNCb29sZWFuIiwiTlBNX1RPS0VOIiwiRVJST1JfQ09ERSIsInRva2VuX3JlcXVpcmVkIiwidHlwZSIsIlRPS0VOX0JBU0lDIiwiX3NldEhlYWRlckF1dGhvcml6YXRpb24iLCJFcnJvciIsIl90eXBlIiwidG9Mb3dlckNhc2UiLCJUT0tFTl9CRUFSRVIiLCJ1cHBlckZpcnN0IiwiaXNVcGxpbmtWYWxpZCIsInVybFBhcnNlZCIsImlzSFRUUFMiLCJ1cmxEb21haW5QYXJzZWQiLCJwb3J0IiwiZ2V0SG9zdCIsImhvc3QiLCJpc01hdGNoUHJvdG9jb2wiLCJpc01hdGNoSG9zdCIsImlzTWF0Y2hQYXRoIiwicGF0aCIsImluZGV4T2YiLCJnZXRSZW1vdGVNZXRhZGF0YSIsIm5hbWUiLCJjYWxsYmFjayIsImV0YWciLCJIVFRQX1NUQVRVUyIsIk5PVF9GT1VORCIsImdldE5vdEZvdW5kIiwiTk9UX1BBQ0tBR0VfVVBMSU5LIiwiT0siLCJNVUxUSVBMRV9DSE9JQ0VTIiwiQkFEX1NUQVRVU19DT0RFIiwicmVtb3RlU3RhdHVzIiwiZmV0Y2hUYXJiYWxsIiwic3RyZWFtIiwiUmVhZFRhcmJhbGwiLCJjdXJyZW50X2xlbmd0aCIsImV4cGVjdGVkX2xlbmd0aCIsImFib3J0IiwicmVhZFN0cmVhbSIsIkFjY2VwdCIsIk5PVF9GSUxFX1VQTElOSyIsIkhFQURFUl9UWVBFIiwiQ09OVEVOVF9MRU5HVEgiLCJwaXBlIiwiZGF0YSIsIkNPTlRFTlRfTUlTTUFUQ0giLCJzZWFyY2giLCJ0cmFuc2Zvcm1TdHJlYW0iLCJQYXNzVGhyb3VnaCIsIm9iamVjdE1vZGUiLCJyZXF1ZXN0U3RyZWFtIiwicmVmZXJlciIsInBhcnNlUGFja2FnZSIsInBrZyIsIlN0cmluZyIsIm1hdGNoIiwianNvblN0cmVhbSIsIkNPTlRFTlRfRU5DT0RJTkciLCJHWklQIiwiemxpYiIsImNyZWF0ZVVuemlwIiwiSlNPTlN0cmVhbSIsImNvbm5lY3Rpb24iLCJyZW1vdGVBZGRyZXNzIiwiYWxpdmUiLCJhcmd1bWVudHMiLCJfaWZSZXF1ZXN0RmFpbHVyZSIsImxhc3RfcmVxdWVzdF90aW1lIiwiRGF0ZSIsIm5vdyIsIk1hdGgiLCJhYnMiLCJtYWluY29uZmlnIiwibm9Qcm94eUxpc3QiLCJwcm94eV9rZXkiLCJub19wcm94eSIsInNwbGl0IiwiaXNBcnJheSIsImkiLCJub1Byb3h5SXRlbSIsImxhc3RJbmRleE9mIiwiaHJlZiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUdBOztBQUNBOztBQUNBOzs7Ozs7QUFFQSxNQUFNQSxLQUFLLEdBQUcsb0JBQVcsc0JBQVgsQ0FBZDs7QUFFQSxNQUFNQyxNQUFNLEdBQUcsVUFBVUMsS0FBVixFQUF5QjtBQUN0QyxTQUFPQyxrQkFBa0IsQ0FBQ0QsS0FBRCxDQUFsQixDQUEwQkUsT0FBMUIsQ0FBa0MsTUFBbEMsRUFBMEMsR0FB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VyxDQUFDSyxDQUFELENBQTdCOztBQUNBLFlBQUlDLFdBQVcsQ0FBQyxDQUFELENBQVgsS0FBbUIsR0FBdkIsRUFBNEI7QUFDMUJBLFVBQUFBLFdBQVcsR0FBRyxNQUFNQSxXQUFwQjtBQUNEOztBQUNELFlBQUkvSyxRQUFRLENBQUNnTCxXQUFULENBQXFCRCxXQUFyQixNQUFzQy9LLFFBQVEsQ0FBQ2lELE1BQVQsR0FBa0I4SCxXQUFXLENBQUM5SCxNQUF4RSxFQUFnRjtBQUM5RSxjQUFJLEtBQUtpQixLQUFULEVBQWdCO0FBQ2Q5RixZQUFBQSxLQUFLLENBQUMsNkNBQUQsRUFBZ0QsS0FBS3dCLEdBQUwsQ0FBU3FMLElBQXpELEVBQStERixXQUEvRCxDQUFMLENBRGMsQ0FFZDs7QUFDQSxpQkFBSzdHLEtBQUwsR0FBYSxLQUFiO0FBQ0Q7O0FBQ0Q7QUFDRDtBQUNGO0FBQ0YsS0ExQ3dHLENBNEN6Rzs7O0FBQ0EsUUFBSWpGLGdCQUFFeUUsUUFBRixDQUFXLEtBQUtRLEtBQWhCLE1BQTJCLEtBQS9CLEVBQXNDO0FBQ3BDO0FBQ0EsYUFBTyxLQUFLQSxLQUFaO0FBQ0QsS0FIRCxNQUdPO0FBQ0w5RixNQUFBQSxLQUFLLENBQUMsdUJBQUQsRUFBMEIsS0FBS3dCLEdBQUwsQ0FBU3FMLElBQW5DLEVBQXlDLEtBQUsvRyxLQUE5QyxDQUFMO0FBQ0Q7QUFDRjs7QUEzb0JrQzs7ZUE4b0J0Qi9FLFkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgemxpYiBmcm9tICd6bGliJztcbmltcG9ydCBTdHJlYW0gZnJvbSAnc3RyZWFtJztcbmltcG9ydCBVUkwsIHsgVXJsV2l0aFN0cmluZ1F1ZXJ5IH0gZnJvbSAndXJsJztcbmltcG9ydCBKU09OU3RyZWFtIGZyb20gJ0pTT05TdHJlYW0nO1xuaW1wb3J0IGJ1aWxkRGVidWcgZnJvbSAnZGVidWcnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCByZXF1ZXN0IGZyb20gJ3JlcXVlc3QnO1xuaW1wb3J0IHsgUmVhZFRhcmJhbGwgfSBmcm9tICdAdmVyZGFjY2lvL3N0cmVhbXMnO1xuaW1wb3J0IHsgQ29uZmlnLCBDYWxsYmFjaywgSGVhZGVycywgTG9nZ2VyLCBQYWNrYWdlIH0gZnJvbSAnQHZlcmRhY2Npby90eXBlcyc7XG5pbXBvcnQgeyBJUHJveHksIFVwTGlua0NvbmZMb2NhbCB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IHBhcnNlSW50ZXJ2YWwsIGlzT2JqZWN0LCBFcnJvckNvZGUsIGJ1aWxkVG9rZW4sIGlzT2JqZWN0T3JBcnJheSB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi9sb2dnZXInO1xuaW1wb3J0IHsgRVJST1JfQ09ERSwgVE9LRU5fQkFTSUMsIFRPS0VOX0JFQVJFUiwgSEVBREVSUywgSFRUUF9TVEFUVVMsIEFQSV9FUlJPUiwgSEVBREVSX1RZUEUsIENIQVJBQ1RFUl9FTkNPRElORyB9IGZyb20gJy4vY29uc3RhbnRzJztcblxuY29uc3QgZGVidWcgPSBidWlsZERlYnVnKCd2ZXJkYWNjaW86dXAtc3RvcmFnZScpO1xuXG5jb25zdCBlbmNvZGUgPSBmdW5jdGlvbiAodGhpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHRoaW5nKS5yZXBsYWNlKC9eJTQwLywgJ0AnKTtcbn07XG5cbmNvbnN0IGpzb25Db250ZW50VHlwZSA9IEhFQURFUlMuSlNPTjtcbmNvbnN0IGNvbnRlbnRUeXBlQWNjZXB0ID0gYCR7anNvbkNvbnRlbnRUeXBlfTtgO1xuXG4vKipcbiAqIEp1c3QgYSBoZWxwZXIgKGBjb25maWdba2V5XSB8fCBkZWZhdWx0YCBkb2Vzbid0IHdvcmsgYmVjYXVzZSBvZiB6ZXJvZXMpXG4gKi9cbmNvbnN0IHNldENvbmZpZyA9IChjb25maWcsIGtleSwgZGVmKTogc3RyaW5nID0+IHtcbiAgcmV0dXJuIF8uaXNOaWwoY29uZmlnW2tleV0pID09PSBmYWxzZSA/IGNvbmZpZ1trZXldIDogZGVmO1xufTtcblxuLyoqXG4gKiBJbXBsZW1lbnRzIFN0b3JhZ2UgaW50ZXJmYWNlXG4gKiAoc2FtZSBmb3Igc3RvcmFnZS5qcywgbG9jYWwtc3RvcmFnZS5qcywgdXAtc3RvcmFnZS5qcylcbiAqL1xuY2xhc3MgUHJveHlTdG9yYWdlIGltcGxlbWVudHMgSVByb3h5IHtcbiAgcHVibGljIGNvbmZpZzogVXBMaW5rQ29uZkxvY2FsO1xuICBwdWJsaWMgZmFpbGVkX3JlcXVlc3RzOiBudW1iZXI7XG4gIHB1YmxpYyB1c2VyQWdlbnQ6IHN0cmluZztcbiAgcHVibGljIGNhOiBzdHJpbmcgfCB2b2lkO1xuICBwdWJsaWMgbG9nZ2VyOiBMb2dnZXI7XG4gIHB1YmxpYyBzZXJ2ZXJfaWQ6IHN0cmluZztcbiAgcHVibGljIHVybDogYW55O1xuICBwdWJsaWMgbWF4YWdlOiBudW1iZXI7XG4gIHB1YmxpYyB0aW1lb3V0OiBudW1iZXI7XG4gIHB1YmxpYyBtYXhfZmFpbHM6IG51bWJlcjtcbiAgcHVibGljIGZhaWxfdGltZW91dDogbnVtYmVyO1xuICBwdWJsaWMgYWdlbnRfb3B0aW9uczogYW55O1xuICAvLyBGSVhNRTogdXBuYW1lIGlzIGFzc2lnbmVkIHRvIGVhY2ggaW5zdGFuY2VcbiAgLy8gQHRzLWlnbm9yZVxuICBwdWJsaWMgdXBuYW1lOiBzdHJpbmc7XG4gIC8vIEZJWE1FOiBwcm94eSBjYW4gYmUgYm9vbGVhbiBvciBvYmplY3QsIHNvbWV0aGluZyBzbWVsbHMgaGVyZVxuICAvLyBAdHMtaWdub3JlXG4gIHB1YmxpYyBwcm94eTogc3RyaW5nIHwgdm9pZDtcbiAgLy8gQHRzLWlnbm9yZVxuICBwdWJsaWMgbGFzdF9yZXF1ZXN0X3RpbWU6IG51bWJlciB8IG51bGw7XG4gIHB1YmxpYyBzdHJpY3Rfc3NsOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3RvclxuICAgKiBAcGFyYW0geyp9IGNvbmZpZ1xuICAgKiBAcGFyYW0geyp9IG1haW5Db25maWdcbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihjb25maWc6IFVwTGlua0NvbmZMb2NhbCwgbWFpbkNvbmZpZzogQ29uZmlnKSB7XG4gICAgdGhpcy5jb25maWcgPSBjb25maWc7XG4gICAgdGhpcy5mYWlsZWRfcmVxdWVzdHMgPSAwO1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICB0aGlzLnVzZXJBZ2VudCA9IG1haW5Db25maWcudXNlcl9hZ2VudDtcbiAgICB0aGlzLmNhID0gY29uZmlnLmNhO1xuICAgIHRoaXMubG9nZ2VyID0gbG9nZ2VyO1xuICAgIHRoaXMuc2VydmVyX2lkID0gbWFpbkNvbmZpZy5zZXJ2ZXJfaWQ7XG5cbiAgICB0aGlzLnVybCA9IFVSTC5wYXJzZSh0aGlzLmNvbmZpZy51cmwpO1xuICAgIC8vICRGbG93Rml4TWVcbiAgICB0aGlzLl9zZXR1cFByb3h5KHRoaXMudXJsLmhvc3RuYW1lLCBjb25maWcsIG1haW5Db25maWcsIHRoaXMudXJsLnByb3RvY29sID09PSAnaHR0cHM6Jyk7XG5cbiAgICB0aGlzLmNvbmZpZy51cmwgPSB0aGlzLmNvbmZpZy51cmwucmVwbGFjZSgvXFwvJC8sICcnKTtcblxuICAgIGlmICh0aGlzLmNvbmZpZy50aW1lb3V0ICYmIE51bWJlcih0aGlzLmNvbmZpZy50aW1lb3V0KSA+PSAxMDAwKSB7XG4gICAgICB0aGlzLmxvZ2dlci53YXJuKFxuICAgICAgICBbXG4gICAgICAgICAgJ1RvbyBiaWcgdGltZW91dCB2YWx1ZTogJyArIHRoaXMuY29uZmlnLnRpbWVvdXQsXG4gICAgICAgICAgJ1dlIGNoYW5nZWQgdGltZSBmb3JtYXQgdG8gbmdpbngtbGlrZSBvbmUnLFxuICAgICAgICAgICcoc2VlIGh0dHA6Ly9uZ2lueC5vcmcvZW4vZG9jcy9zeW50YXguaHRtbCknLFxuICAgICAgICAgICdzbyBwbGVhc2UgdXBkYXRlIHlvdXIgY29uZmlnIGFjY29yZGluZ2x5JyxcbiAgICAgICAgXS5qb2luKCdcXG4nKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBhIGJ1bmNoIG9mIGRpZmZlcmVudCBjb25maWd1cmFibGUgdGltZXJzXG4gICAgdGhpcy5tYXhhZ2UgPSBwYXJzZUludGVydmFsKHNldENvbmZpZyh0aGlzLmNvbmZpZywgJ21heGFnZScsICcybScpKTtcbiAgICB0aGlzLnRpbWVvdXQgPSBwYXJzZUludGVydmFsKHNldENvbmZpZyh0aGlzLmNvbmZpZywgJ3RpbWVvdXQnLCAnMzBzJykpO1xuICAgIHRoaXMubWF4X2ZhaWxzID0gTnVtYmVyKHNldENvbmZpZyh0aGlzLmNvbmZpZywgJ21heF9mYWlscycsIDIpKTtcbiAgICB0aGlzLmZhaWxfdGltZW91dCA9IHBhcnNlSW50ZXJ2YWwoc2V0Q29uZmlnKHRoaXMuY29uZmlnLCAnZmFpbF90aW1lb3V0JywgJzVtJykpO1xuICAgIHRoaXMuc3RyaWN0X3NzbCA9IEJvb2xlYW4oc2V0Q29uZmlnKHRoaXMuY29uZmlnLCAnc3RyaWN0X3NzbCcsIHRydWUpKTtcbiAgICB0aGlzLmFnZW50X29wdGlvbnMgPSBzZXRDb25maWcodGhpcy5jb25maWcsICdhZ2VudF9vcHRpb25zJywge1xuICAgICAga2VlcEFsaXZlOiB0cnVlLFxuICAgICAgbWF4U29ja2V0czogNDAsXG4gICAgICBtYXhGcmVlU29ja2V0czogMTAsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2ggYW4gYXNzZXQuXG4gICAqIEBwYXJhbSB7Kn0gb3B0aW9uc1xuICAgKiBAcGFyYW0geyp9IGNiXG4gICAqIEByZXR1cm4ge1JlcXVlc3R9XG4gICAqL1xuICBwcml2YXRlIHJlcXVlc3Qob3B0aW9uczogYW55LCBjYj86IENhbGxiYWNrKTogU3RyZWFtLlJlYWRhYmxlIHtcbiAgICBsZXQganNvbjtcblxuICAgIGlmICh0aGlzLl9zdGF0dXNDaGVjaygpID09PSBmYWxzZSkge1xuICAgICAgY29uc3Qgc3RyZWFtUmVhZCA9IG5ldyBTdHJlYW0uUmVhZGFibGUoKTtcblxuICAgICAgcHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbiAoKTogdm9pZCB7XG4gICAgICAgIGlmIChjYikge1xuICAgICAgICAgIGNiKEVycm9yQ29kZS5nZXRJbnRlcm5hbEVycm9yKEFQSV9FUlJPUi5VUExJTktfT0ZGTElORSkpO1xuICAgICAgICB9XG4gICAgICAgIHN0cmVhbVJlYWQuZW1pdCgnZXJyb3InLCBFcnJvckNvZGUuZ2V0SW50ZXJuYWxFcnJvcihBUElfRVJST1IuVVBMSU5LX09GRkxJTkUpKTtcbiAgICAgIH0pO1xuICAgICAgLy8gJEZsb3dGaXhNZVxuICAgICAgc3RyZWFtUmVhZC5fcmVhZCA9IGZ1bmN0aW9uICgpOiB2b2lkIHt9O1xuICAgICAgLy8gcHJldmVudGluZyAnVW5jYXVnaHQsIHVuc3BlY2lmaWVkIFwiZXJyb3JcIiBldmVudCdcbiAgICAgIHN0cmVhbVJlYWQub24oJ2Vycm9yJywgZnVuY3Rpb24gKCk6IHZvaWQge30pO1xuICAgICAgcmV0dXJuIHN0cmVhbVJlYWQ7XG4gICAgfVxuXG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgY29uc3QgaGVhZGVyczogSGVhZGVycyA9IHRoaXMuX3NldEhlYWRlcnMob3B0aW9ucyk7XG5cbiAgICB0aGlzLl9hZGRQcm94eUhlYWRlcnMob3B0aW9ucy5yZXEsIGhlYWRlcnMpO1xuICAgIHRoaXMuX292ZXJyaWRlV2l0aFVwTGlua0NvbmZMb2NhbGlnSGVhZGVycyhoZWFkZXJzKTtcblxuICAgIGNvbnN0IG1ldGhvZCA9IG9wdGlvbnMubWV0aG9kIHx8ICdHRVQnO1xuICAgIGNvbnN0IHVyaSA9IG9wdGlvbnMudXJpX2Z1bGwgfHwgdGhpcy5jb25maWcudXJsICsgb3B0aW9ucy51cmk7XG5cbiAgICBzZWxmLmxvZ2dlci5pbmZvKFxuICAgICAge1xuICAgICAgICBtZXRob2Q6IG1ldGhvZCxcbiAgICAgICAgaGVhZGVyczogaGVhZGVycyxcbiAgICAgICAgdXJpOiB1cmksXG4gICAgICB9LFxuICAgICAgXCJtYWtpbmcgcmVxdWVzdDogJ0B7bWV0aG9kfSBAe3VyaX0nXCJcbiAgICApO1xuXG4gICAgaWYgKGlzT2JqZWN0KG9wdGlvbnMuanNvbikpIHtcbiAgICAgIGpzb24gPSBKU09OLnN0cmluZ2lmeShvcHRpb25zLmpzb24pO1xuICAgICAgaGVhZGVyc1snQ29udGVudC1UeXBlJ10gPSBoZWFkZXJzWydDb250ZW50LVR5cGUnXSB8fCBIRUFERVJTLkpTT047XG4gICAgfVxuXG4gICAgY29uc3QgcmVxdWVzdENhbGxiYWNrID0gY2JcbiAgICAgID8gZnVuY3Rpb24gKGVyciwgcmVzLCBib2R5KTogdm9pZCB7XG4gICAgICAgICAgbGV0IGVycm9yO1xuICAgICAgICAgIGNvbnN0IHJlc3BvbnNlTGVuZ3RoID0gZXJyID8gMCA6IGJvZHkubGVuZ3RoO1xuICAgICAgICAgIC8vICRGbG93Rml4TWVcbiAgICAgICAgICBwcm9jZXNzQm9keSgpO1xuICAgICAgICAgIGxvZ0FjdGl2aXR5KCk7XG4gICAgICAgICAgLy8gJEZsb3dGaXhNZVxuICAgICAgICAgIGNiKGVyciwgcmVzLCBib2R5KTtcblxuICAgICAgICAgIC8qKlxuICAgICAgICAgICAqIFBlcmZvcm0gYSBkZWNvZGUuXG4gICAgICAgICAgICovXG4gICAgICAgICAgZnVuY3Rpb24gcHJvY2Vzc0JvZHkoKTogdm9pZCB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgIGVycm9yID0gZXJyLm1lc3NhZ2U7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKG9wdGlvbnMuanNvbiAmJiByZXMuc3RhdHVzQ29kZSA8IDMwMCkge1xuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIC8vICRGbG93Rml4TWVcbiAgICAgICAgICAgICAgICBib2R5ID0gSlNPTi5wYXJzZShib2R5LnRvU3RyaW5nKENIQVJBQ1RFUl9FTkNPRElORy5VVEY4KSk7XG4gICAgICAgICAgICAgIH0gY2F0Y2ggKF9lcnIpIHtcbiAgICAgICAgICAgICAgICBib2R5ID0ge307XG4gICAgICAgICAgICAgICAgZXJyID0gX2VycjtcbiAgICAgICAgICAgICAgICBlcnJvciA9IGVyci5tZXNzYWdlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghZXJyICYmIGlzT2JqZWN0KGJvZHkpKSB7XG4gICAgICAgICAgICAgIGlmIChfLmlzU3RyaW5nKGJvZHkuZXJyb3IpKSB7XG4gICAgICAgICAgICAgICAgZXJyb3IgPSBib2R5LmVycm9yO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIC8qKlxuICAgICAgICAgICAqIFBlcmZvcm0gYSBsb2cuXG4gICAgICAgICAgICovXG4gICAgICAgICAgZnVuY3Rpb24gbG9nQWN0aXZpdHkoKTogdm9pZCB7XG4gICAgICAgICAgICBsZXQgbWVzc2FnZSA9IFwiQHshc3RhdHVzfSwgcmVxOiAnQHtyZXF1ZXN0Lm1ldGhvZH0gQHtyZXF1ZXN0LnVybH0nXCI7XG4gICAgICAgICAgICBtZXNzYWdlICs9IGVycm9yID8gJywgZXJyb3I6IEB7IWVycm9yfScgOiAnLCBieXRlczogQHtieXRlcy5pbn0vQHtieXRlcy5vdXR9JztcbiAgICAgICAgICAgIHNlbGYubG9nZ2VyLmh0dHAoXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBlcnI6IGVyciB8fCB1bmRlZmluZWQsIC8vIGlmIGVycm9yIGlzIG51bGwvZmFsc2UgY2hhbmdlIHRoaXMgdG8gdW5kZWZpbmVkIHNvIGl0IHdvbnQgbG9nXG4gICAgICAgICAgICAgICAgcmVxdWVzdDogeyBtZXRob2Q6IG1ldGhvZCwgdXJsOiB1cmkgfSxcbiAgICAgICAgICAgICAgICBzdGF0dXM6IHJlcyAhPSBudWxsID8gcmVzLnN0YXR1c0NvZGUgOiAnRVJSJyxcbiAgICAgICAgICAgICAgICBlcnJvcjogZXJyb3IsXG4gICAgICAgICAgICAgICAgYnl0ZXM6IHtcbiAgICAgICAgICAgICAgICAgIGluOiBqc29uID8ganNvbi5sZW5ndGggOiAwLFxuICAgICAgICAgICAgICAgICAgb3V0OiByZXNwb25zZUxlbmd0aCB8fCAwLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIG1lc3NhZ2VcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIGxldCByZXF1ZXN0T3B0aW9ucyA9IHtcbiAgICAgIHVybDogdXJpLFxuICAgICAgbWV0aG9kOiBtZXRob2QsXG4gICAgICBoZWFkZXJzOiBoZWFkZXJzLFxuICAgICAgYm9keToganNvbixcbiAgICAgIHByb3h5OiB0aGlzLnByb3h5LFxuICAgICAgZW5jb2Rpbmc6IG51bGwsXG4gICAgICBnemlwOiB0cnVlLFxuICAgICAgdGltZW91dDogdGhpcy50aW1lb3V0LFxuICAgICAgc3RyaWN0U1NMOiB0aGlzLnN0cmljdF9zc2wsXG4gICAgICBhZ2VudE9wdGlvbnM6IHRoaXMuYWdlbnRfb3B0aW9ucyxcbiAgICB9O1xuXG4gICAgaWYgKHRoaXMuY2EpIHtcbiAgICAgIHJlcXVlc3RPcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgcmVxdWVzdE9wdGlvbnMsIHtcbiAgICAgICAgY2E6IHRoaXMuY2EsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCByZXEgPSByZXF1ZXN0KHJlcXVlc3RPcHRpb25zLCByZXF1ZXN0Q2FsbGJhY2spO1xuXG4gICAgbGV0IHN0YXR1c0NhbGxlZCA9IGZhbHNlO1xuICAgIHJlcS5vbigncmVzcG9uc2UnLCBmdW5jdGlvbiAocmVzKTogdm9pZCB7XG4gICAgICAvLyBGSVhNRTogX3ZlcmRhY2Npb19hYm9ydGVkIHNlZW1zIG5vdCB1c2VkXG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICBpZiAoIXJlcS5fdmVyZGFjY2lvX2Fib3J0ZWQgJiYgIXN0YXR1c0NhbGxlZCkge1xuICAgICAgICBzdGF0dXNDYWxsZWQgPSB0cnVlO1xuICAgICAgICBzZWxmLl9zdGF0dXNDaGVjayh0cnVlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKF8uaXNOaWwocmVxdWVzdENhbGxiYWNrKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgKGZ1bmN0aW9uIGRvX2xvZygpOiB2b2lkIHtcbiAgICAgICAgICBjb25zdCBtZXNzYWdlID0gXCJAeyFzdGF0dXN9LCByZXE6ICdAe3JlcXVlc3QubWV0aG9kfSBAe3JlcXVlc3QudXJsfScgKHN0cmVhbWluZylcIjtcbiAgICAgICAgICBzZWxmLmxvZ2dlci5odHRwKFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICByZXF1ZXN0OiB7XG4gICAgICAgICAgICAgICAgbWV0aG9kOiBtZXRob2QsXG4gICAgICAgICAgICAgICAgdXJsOiB1cmksXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHN0YXR1czogXy5pc051bGwocmVzKSA9PT0gZmFsc2UgPyByZXMuc3RhdHVzQ29kZSA6ICdFUlInLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG1lc3NhZ2VcbiAgICAgICAgICApO1xuICAgICAgICB9KSgpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJlcS5vbignZXJyb3InLCBmdW5jdGlvbiAoX2Vycik6IHZvaWQge1xuICAgICAgLy8gRklYTUU6IF92ZXJkYWNjaW9fYWJvcnRlZCBzZWVtcyBub3QgdXNlZFxuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgaWYgKCFyZXEuX3ZlcmRhY2Npb19hYm9ydGVkICYmICFzdGF0dXNDYWxsZWQpIHtcbiAgICAgICAgc3RhdHVzQ2FsbGVkID0gdHJ1ZTtcbiAgICAgICAgc2VsZi5fc3RhdHVzQ2hlY2soZmFsc2UpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICByZXR1cm4gcmVxO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCBkZWZhdWx0IGhlYWRlcnMuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm4ge09iamVjdH1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgX3NldEhlYWRlcnMob3B0aW9uczogYW55KTogSGVhZGVycyB7XG4gICAgY29uc3QgaGVhZGVycyA9IG9wdGlvbnMuaGVhZGVycyB8fCB7fTtcbiAgICBjb25zdCBhY2NlcHQgPSBIRUFERVJTLkFDQ0VQVDtcbiAgICBjb25zdCBhY2NlcHRFbmNvZGluZyA9IEhFQURFUlMuQUNDRVBUX0VOQ09ESU5HO1xuICAgIGNvbnN0IHVzZXJBZ2VudCA9IEhFQURFUlMuVVNFUl9BR0VOVDtcblxuICAgIGhlYWRlcnNbYWNjZXB0XSA9IGhlYWRlcnNbYWNjZXB0XSB8fCBjb250ZW50VHlwZUFjY2VwdDtcbiAgICBoZWFkZXJzW2FjY2VwdEVuY29kaW5nXSA9IGhlYWRlcnNbYWNjZXB0RW5jb2RpbmddIHx8ICdnemlwJztcbiAgICAvLyByZWdpc3RyeS5ucG1qcy5vcmcgd2lsbCBvbmx5IHJldHVybiBzZWFyY2ggcmVzdWx0IGlmIHVzZXItYWdlbnQgaW5jbHVkZSBzdHJpbmcgJ25wbSdcbiAgICBoZWFkZXJzW3VzZXJBZ2VudF0gPSB0aGlzLnVzZXJBZ2VudCA/IGBucG0gKCR7dGhpcy51c2VyQWdlbnR9KWAgOiBvcHRpb25zLnJlcT8uZ2V0KCd1c2VyLWFnZW50Jyk7XG5cbiAgICByZXR1cm4gdGhpcy5fc2V0QXV0aChoZWFkZXJzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSBjb25maWd1cmF0aW9uIGF1dGggYW5kIGFzc2lnbiBIZWFkZXIgYXV0aG9yaXphdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0gaGVhZGVyc1xuICAgKiBAcmV0dXJuIHtPYmplY3R9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIF9zZXRBdXRoKGhlYWRlcnM6IGFueSk6IEhlYWRlcnMge1xuICAgIGNvbnN0IHsgYXV0aCB9ID0gdGhpcy5jb25maWc7XG5cbiAgICBpZiAoXy5pc05pbChhdXRoKSB8fCBoZWFkZXJzW0hFQURFUlMuQVVUSE9SSVpBVElPTl0pIHtcbiAgICAgIHJldHVybiBoZWFkZXJzO1xuICAgIH1cblxuICAgIGlmIChfLmlzT2JqZWN0KGF1dGgpID09PSBmYWxzZSAmJiBfLmlzT2JqZWN0KGF1dGgudG9rZW4pID09PSBmYWxzZSkge1xuICAgICAgdGhpcy5fdGhyb3dFcnJvckF1dGgoJ0F1dGggaW52YWxpZCcpO1xuICAgIH1cblxuICAgIC8vIGdldCBOUE1fVE9LRU4gaHR0cDovL2Jsb2cubnBtanMub3JnL3Bvc3QvMTE4MzkzMzY4NTU1L2RlcGxveWluZy13aXRoLW5wbS1wcml2YXRlLW1vZHVsZXNcbiAgICAvLyBvciBnZXQgb3RoZXIgdmFyaWFibGUgZXhwb3J0IGluIGVudlxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS92ZXJkYWNjaW8vdmVyZGFjY2lvL3JlbGVhc2VzL3RhZy92Mi41LjBcbiAgICBsZXQgdG9rZW46IGFueTtcbiAgICBjb25zdCB0b2tlbkNvbmY6IGFueSA9IGF1dGg7XG5cbiAgICBpZiAoXy5pc05pbCh0b2tlbkNvbmYudG9rZW4pID09PSBmYWxzZSAmJiBfLmlzU3RyaW5nKHRva2VuQ29uZi50b2tlbikpIHtcbiAgICAgIHRva2VuID0gdG9rZW5Db25mLnRva2VuO1xuICAgIH0gZWxzZSBpZiAoXy5pc05pbCh0b2tlbkNvbmYudG9rZW5fZW52KSA9PT0gZmFsc2UpIHtcbiAgICAgIGlmIChfLmlzU3RyaW5nKHRva2VuQ29uZi50b2tlbl9lbnYpKSB7XG4gICAgICAgIHRva2VuID0gcHJvY2Vzcy5lbnZbdG9rZW5Db25mLnRva2VuX2Vudl07XG4gICAgICB9IGVsc2UgaWYgKF8uaXNCb29sZWFuKHRva2VuQ29uZi50b2tlbl9lbnYpICYmIHRva2VuQ29uZi50b2tlbl9lbnYpIHtcbiAgICAgICAgdG9rZW4gPSBwcm9jZXNzLmVudi5OUE1fVE9LRU47XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcihFUlJPUl9DT0RFLnRva2VuX3JlcXVpcmVkKTtcbiAgICAgICAgdGhpcy5fdGhyb3dFcnJvckF1dGgoRVJST1JfQ09ERS50b2tlbl9yZXF1aXJlZCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRva2VuID0gcHJvY2Vzcy5lbnYuTlBNX1RPS0VOO1xuICAgIH1cblxuICAgIGlmIChfLmlzTmlsKHRva2VuKSkge1xuICAgICAgdGhpcy5fdGhyb3dFcnJvckF1dGgoRVJST1JfQ09ERS50b2tlbl9yZXF1aXJlZCk7XG4gICAgfVxuXG4gICAgLy8gZGVmaW5lIHR5cGUgQXV0aCBhbGxvdyBiYXNpYyBhbmQgYmVhcmVyXG4gICAgY29uc3QgdHlwZSA9IHRva2VuQ29uZi50eXBlIHx8IFRPS0VOX0JBU0lDO1xuICAgIHRoaXMuX3NldEhlYWRlckF1dGhvcml6YXRpb24oaGVhZGVycywgdHlwZSwgdG9rZW4pO1xuXG4gICAgcmV0dXJuIGhlYWRlcnM7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2VcbiAgICogQHRocm93cyB7RXJyb3J9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIF90aHJvd0Vycm9yQXV0aChtZXNzYWdlOiBzdHJpbmcpOiBFcnJvciB7XG4gICAgdGhpcy5sb2dnZXIuZXJyb3IobWVzc2FnZSk7XG4gICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFzc2lnbiBIZWFkZXIgYXV0aG9yaXphdGlvbiB3aXRoIHR5cGUgYXV0aGVudGljYXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IGhlYWRlcnNcbiAgICogQHBhcmFtIHtzdHJpbmd9IHR5cGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRva2VuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIF9zZXRIZWFkZXJBdXRob3JpemF0aW9uKGhlYWRlcnM6IGFueSwgdHlwZTogc3RyaW5nLCB0b2tlbjogYW55KTogdm9pZCB7XG4gICAgY29uc3QgX3R5cGU6IHN0cmluZyA9IHR5cGUudG9Mb3dlckNhc2UoKTtcblxuICAgIGlmIChfdHlwZSAhPT0gVE9LRU5fQkVBUkVSLnRvTG93ZXJDYXNlKCkgJiYgX3R5cGUgIT09IFRPS0VOX0JBU0lDLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgIHRoaXMuX3Rocm93RXJyb3JBdXRoKGBBdXRoIHR5cGUgJyR7X3R5cGV9JyBub3QgYWxsb3dlZGApO1xuICAgIH1cblxuICAgIHR5cGUgPSBfLnVwcGVyRmlyc3QodHlwZSk7XG4gICAgaGVhZGVyc1tIRUFERVJTLkFVVEhPUklaQVRJT05dID0gYnVpbGRUb2tlbih0eXBlLCB0b2tlbik7XG4gIH1cblxuICAvKipcbiAgICogSXQgd2lsbCBhZGQgb3Igb3ZlcnJpZGUgc3BlY2lmaWVkIGhlYWRlcnMgZnJvbSBjb25maWcgZmlsZS5cbiAgICpcbiAgICogRWc6XG4gICAqXG4gICAqIHVwbGlua3M6XG4gICBucG1qczpcbiAgIHVybDogaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvXG4gICBoZWFkZXJzOlxuICAgQWNjZXB0OiBcImFwcGxpY2F0aW9uL3ZuZC5ucG0uaW5zdGFsbC12Mitqc29uOyBxPTEuMFwiXG4gICB2ZXJkYWNjaW8tc3RhZ2luZzpcbiAgIHVybDogaHR0cHM6Ly9teWNvbXBhbnkuY29tL25wbVxuICAgaGVhZGVyczpcbiAgIEFjY2VwdDogXCJhcHBsaWNhdGlvbi9qc29uXCJcbiAgIGF1dGhvcml6YXRpb246IFwiQmFzaWMgWW91ckJhc2U2NEVuY29kZWRDcmVkZW50aWFscz09XCJcblxuICAgKiBAcGFyYW0ge09iamVjdH0gaGVhZGVyc1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBfb3ZlcnJpZGVXaXRoVXBMaW5rQ29uZkxvY2FsaWdIZWFkZXJzKGhlYWRlcnM6IEhlYWRlcnMpOiBhbnkge1xuICAgIGlmICghdGhpcy5jb25maWcuaGVhZGVycykge1xuICAgICAgcmV0dXJuIGhlYWRlcnM7XG4gICAgfVxuXG4gICAgLy8gYWRkL292ZXJyaWRlIGhlYWRlcnMgc3BlY2lmaWVkIGluIHRoZSBjb25maWdcbiAgICAvKiBlc2xpbnQgZ3VhcmQtZm9yLWluOiAwICovXG4gICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5jb25maWcuaGVhZGVycykge1xuICAgICAgaGVhZGVyc1trZXldID0gdGhpcy5jb25maWcuaGVhZGVyc1trZXldO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmUgd2hldGhlciBjYW4gZmV0Y2ggZnJvbSB0aGUgcHJvdmlkZWQgVVJMXG4gICAqIEBwYXJhbSB7Kn0gdXJsXG4gICAqIEByZXR1cm4ge0Jvb2xlYW59XG4gICAqL1xuICBwdWJsaWMgaXNVcGxpbmtWYWxpZCh1cmw6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIC8vICRGbG93Rml4TWVcbiAgICBjb25zdCB1cmxQYXJzZWQ6IFVybFdpdGhTdHJpbmdRdWVyeSA9IFVSTC5wYXJzZSh1cmwpO1xuICAgIGNvbnN0IGlzSFRUUFMgPSAodXJsRG9tYWluUGFyc2VkOiBVUkwpOiBib29sZWFuID0+IHVybERvbWFpblBhcnNlZC5wcm90b2NvbCA9PT0gJ2h0dHBzOicgJiYgKHVybFBhcnNlZC5wb3J0ID09PSBudWxsIHx8IHVybFBhcnNlZC5wb3J0ID09PSAnNDQzJyk7XG4gICAgY29uc3QgZ2V0SG9zdCA9ICh1cmxEb21haW5QYXJzZWQpOiBib29sZWFuID0+IChpc0hUVFBTKHVybERvbWFpblBhcnNlZCkgPyB1cmxEb21haW5QYXJzZWQuaG9zdG5hbWUgOiB1cmxEb21haW5QYXJzZWQuaG9zdCk7XG4gICAgY29uc3QgaXNNYXRjaFByb3RvY29sOiBib29sZWFuID0gdXJsUGFyc2VkLnByb3RvY29sID09PSB0aGlzLnVybC5wcm90b2NvbDtcbiAgICBjb25zdCBpc01hdGNoSG9zdDogYm9vbGVhbiA9IGdldEhvc3QodXJsUGFyc2VkKSA9PT0gZ2V0SG9zdCh0aGlzLnVybCk7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGNvbnN0IGlzTWF0Y2hQYXRoOiBib29sZWFuID0gdXJsUGFyc2VkLnBhdGguaW5kZXhPZih0aGlzLnVybC5wYXRoKSA9PT0gMDtcblxuICAgIHJldHVybiBpc01hdGNoUHJvdG9jb2wgJiYgaXNNYXRjaEhvc3QgJiYgaXNNYXRjaFBhdGg7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGEgcmVtb3RlIHBhY2thZ2UgbWV0YWRhdGFcbiAgICogQHBhcmFtIHsqfSBuYW1lIHBhY2thZ2UgbmFtZVxuICAgKiBAcGFyYW0geyp9IG9wdGlvbnMgcmVxdWVzdCBvcHRpb25zLCBlZzogZVRhZy5cbiAgICogQHBhcmFtIHsqfSBjYWxsYmFja1xuICAgKi9cbiAgcHVibGljIGdldFJlbW90ZU1ldGFkYXRhKG5hbWU6IHN0cmluZywgb3B0aW9uczogYW55LCBjYWxsYmFjazogQ2FsbGJhY2spOiB2b2lkIHtcbiAgICBjb25zdCBoZWFkZXJzID0ge307XG4gICAgaWYgKF8uaXNOaWwob3B0aW9ucy5ldGFnKSA9PT0gZmFsc2UpIHtcbiAgICAgIGhlYWRlcnNbJ0lmLU5vbmUtTWF0Y2gnXSA9IG9wdGlvbnMuZXRhZztcbiAgICAgIGhlYWRlcnNbSEVBREVSUy5BQ0NFUFRdID0gY29udGVudFR5cGVBY2NlcHQ7XG4gICAgfVxuXG4gICAgdGhpcy5yZXF1ZXN0KFxuICAgICAge1xuICAgICAgICB1cmk6IGAvJHtlbmNvZGUobmFtZSl9YCxcbiAgICAgICAganNvbjogdHJ1ZSxcbiAgICAgICAgaGVhZGVyczogaGVhZGVycyxcbiAgICAgICAgcmVxOiBvcHRpb25zLnJlcSxcbiAgICAgIH0sXG4gICAgICAoZXJyLCByZXMsIGJvZHkpOiB2b2lkID0+IHtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZXMuc3RhdHVzQ29kZSA9PT0gSFRUUF9TVEFUVVMuTk9UX0ZPVU5EKSB7XG4gICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKEVycm9yQ29kZS5nZXROb3RGb3VuZChBUElfRVJST1IuTk9UX1BBQ0tBR0VfVVBMSU5LKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCEocmVzLnN0YXR1c0NvZGUgPj0gSFRUUF9TVEFUVVMuT0sgJiYgcmVzLnN0YXR1c0NvZGUgPCBIVFRQX1NUQVRVUy5NVUxUSVBMRV9DSE9JQ0VTKSkge1xuICAgICAgICAgIGNvbnN0IGVycm9yID0gRXJyb3JDb2RlLmdldEludGVybmFsRXJyb3IoYCR7QVBJX0VSUk9SLkJBRF9TVEFUVVNfQ09ERX06ICR7cmVzLnN0YXR1c0NvZGV9YCk7XG4gICAgICAgICAgLy8gJEZsb3dGaXhNZVxuICAgICAgICAgIGVycm9yLnJlbW90ZVN0YXR1cyA9IHJlcy5zdGF0dXNDb2RlO1xuICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgY2FsbGJhY2sobnVsbCwgYm9keSwgcmVzLmhlYWRlcnMuZXRhZyk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaCBhIHRhcmJhbGwgZnJvbSB0aGUgdXBsaW5rLlxuICAgKiBAcGFyYW0ge1N0cmluZ30gdXJsXG4gICAqIEByZXR1cm4ge1N0cmVhbX1cbiAgICovXG4gIGZldGNoVGFyYmFsbCh1cmw6IHN0cmluZykge1xuICAgIGNvbnN0IHN0cmVhbSA9IG5ldyBSZWFkVGFyYmFsbCh7fSk7XG4gICAgbGV0IGN1cnJlbnRfbGVuZ3RoID0gMDtcbiAgICBsZXQgZXhwZWN0ZWRfbGVuZ3RoO1xuXG4gICAgc3RyZWFtLmFib3J0ID0gKCkgPT4ge307XG4gICAgY29uc3QgcmVhZFN0cmVhbSA9IHRoaXMucmVxdWVzdCh7XG4gICAgICB1cmlfZnVsbDogdXJsLFxuICAgICAgZW5jb2Rpbmc6IG51bGwsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgIEFjY2VwdDogY29udGVudFR5cGVBY2NlcHQsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmVhZFN0cmVhbS5vbigncmVzcG9uc2UnLCBmdW5jdGlvbiAocmVzOiBhbnkpIHtcbiAgICAgIGlmIChyZXMuc3RhdHVzQ29kZSA9PT0gSFRUUF9TVEFUVVMuTk9UX0ZPVU5EKSB7XG4gICAgICAgIHJldHVybiBzdHJlYW0uZW1pdCgnZXJyb3InLCBFcnJvckNvZGUuZ2V0Tm90Rm91bmQoQVBJX0VSUk9SLk5PVF9GSUxFX1VQTElOSykpO1xuICAgICAgfVxuICAgICAgaWYgKCEocmVzLnN0YXR1c0NvZGUgPj0gSFRUUF9TVEFUVVMuT0sgJiYgcmVzLnN0YXR1c0NvZGUgPCBIVFRQX1NUQVRVUy5NVUxUSVBMRV9DSE9JQ0VTKSkge1xuICAgICAgICByZXR1cm4gc3RyZWFtLmVtaXQoJ2Vycm9yJywgRXJyb3JDb2RlLmdldEludGVybmFsRXJyb3IoYGJhZCB1cGxpbmsgc3RhdHVzIGNvZGU6ICR7cmVzLnN0YXR1c0NvZGV9YCkpO1xuICAgICAgfVxuICAgICAgaWYgKHJlcy5oZWFkZXJzW0hFQURFUl9UWVBFLkNPTlRFTlRfTEVOR1RIXSkge1xuICAgICAgICBleHBlY3RlZF9sZW5ndGggPSByZXMuaGVhZGVyc1tIRUFERVJfVFlQRS5DT05URU5UX0xFTkdUSF07XG4gICAgICAgIHN0cmVhbS5lbWl0KEhFQURFUl9UWVBFLkNPTlRFTlRfTEVOR1RILCByZXMuaGVhZGVyc1tIRUFERVJfVFlQRS5DT05URU5UX0xFTkdUSF0pO1xuICAgICAgfVxuXG4gICAgICByZWFkU3RyZWFtLnBpcGUoc3RyZWFtKTtcbiAgICB9KTtcblxuICAgIHJlYWRTdHJlYW0ub24oJ2Vycm9yJywgZnVuY3Rpb24gKGVycikge1xuICAgICAgc3RyZWFtLmVtaXQoJ2Vycm9yJywgZXJyKTtcbiAgICB9KTtcbiAgICByZWFkU3RyZWFtLm9uKCdkYXRhJywgZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgIGN1cnJlbnRfbGVuZ3RoICs9IGRhdGEubGVuZ3RoO1xuICAgIH0pO1xuICAgIHJlYWRTdHJlYW0ub24oJ2VuZCcsIGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICBpZiAoZGF0YSkge1xuICAgICAgICBjdXJyZW50X2xlbmd0aCArPSBkYXRhLmxlbmd0aDtcbiAgICAgIH1cbiAgICAgIGlmIChleHBlY3RlZF9sZW5ndGggJiYgY3VycmVudF9sZW5ndGggIT0gZXhwZWN0ZWRfbGVuZ3RoKSB7XG4gICAgICAgIHN0cmVhbS5lbWl0KCdlcnJvcicsIEVycm9yQ29kZS5nZXRJbnRlcm5hbEVycm9yKEFQSV9FUlJPUi5DT05URU5UX01JU01BVENIKSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHN0cmVhbTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQZXJmb3JtIGEgc3RyZWFtIHNlYXJjaC5cbiAgICogQHBhcmFtIHsqfSBvcHRpb25zIHJlcXVlc3Qgb3B0aW9uc1xuICAgKiBAcmV0dXJuIHtTdHJlYW19XG4gICAqL1xuICBwdWJsaWMgc2VhcmNoKG9wdGlvbnM6IGFueSk6IFN0cmVhbS5SZWFkYWJsZSB7XG4gICAgY29uc3QgdHJhbnNmb3JtU3RyZWFtOiBhbnkgPSBuZXcgU3RyZWFtLlBhc3NUaHJvdWdoKHsgb2JqZWN0TW9kZTogdHJ1ZSB9KTtcbiAgICBjb25zdCByZXF1ZXN0U3RyZWFtOiBTdHJlYW0uUmVhZGFibGUgPSB0aGlzLnJlcXVlc3Qoe1xuICAgICAgdXJpOiBvcHRpb25zLnJlcS51cmwsXG4gICAgICByZXE6IG9wdGlvbnMucmVxLFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICAvLyBxdWVyeSBmb3Igc2VhcmNoXG4gICAgICAgIHJlZmVyZXI6IG9wdGlvbnMucmVxLmdldCgncmVmZXJlcicpLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHBhcnNlUGFja2FnZSA9IChwa2c6IFBhY2thZ2UpOiB2b2lkID0+IHtcbiAgICAgIGlmIChpc09iamVjdE9yQXJyYXkocGtnKSkge1xuICAgICAgICB0cmFuc2Zvcm1TdHJlYW0uZW1pdCgnZGF0YScsIHBrZyk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHJlcXVlc3RTdHJlYW0ub24oJ3Jlc3BvbnNlJywgKHJlcyk6IHZvaWQgPT4ge1xuICAgICAgaWYgKCFTdHJpbmcocmVzLnN0YXR1c0NvZGUpLm1hdGNoKC9eMlxcZFxcZCQvKSkge1xuICAgICAgICByZXR1cm4gdHJhbnNmb3JtU3RyZWFtLmVtaXQoJ2Vycm9yJywgRXJyb3JDb2RlLmdldEludGVybmFsRXJyb3IoYGJhZCBzdGF0dXMgY29kZSAke3Jlcy5zdGF0dXNDb2RlfSBmcm9tIHVwbGlua2ApKTtcbiAgICAgIH1cblxuICAgICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9yZXF1ZXN0L3JlcXVlc3QjcmVxdWVzdG9wdGlvbnMtY2FsbGJhY2tcbiAgICAgIC8vIFJlcXVlc3QgbGlicmFyeSB3aWxsIG5vdCBkZWNvZGUgZ3ppcCBzdHJlYW0uXG4gICAgICBsZXQganNvblN0cmVhbTtcbiAgICAgIGlmIChyZXMuaGVhZGVyc1tIRUFERVJfVFlQRS5DT05URU5UX0VOQ09ESU5HXSA9PT0gSEVBREVSUy5HWklQKSB7XG4gICAgICAgIGpzb25TdHJlYW0gPSByZXMucGlwZSh6bGliLmNyZWF0ZVVuemlwKCkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAganNvblN0cmVhbSA9IHJlcztcbiAgICAgIH1cbiAgICAgIGpzb25TdHJlYW0ucGlwZShKU09OU3RyZWFtLnBhcnNlKCcqJykpLm9uKCdkYXRhJywgcGFyc2VQYWNrYWdlKTtcbiAgICAgIGpzb25TdHJlYW0ub24oJ2VuZCcsICgpOiB2b2lkID0+IHtcbiAgICAgICAgdHJhbnNmb3JtU3RyZWFtLmVtaXQoJ2VuZCcpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICByZXF1ZXN0U3RyZWFtLm9uKCdlcnJvcicsIChlcnI6IEVycm9yKTogdm9pZCA9PiB7XG4gICAgICB0cmFuc2Zvcm1TdHJlYW0uZW1pdCgnZXJyb3InLCBlcnIpO1xuICAgIH0pO1xuXG4gICAgdHJhbnNmb3JtU3RyZWFtLmFib3J0ID0gKCk6IHZvaWQgPT4ge1xuICAgICAgLy8gRklYTUU6IHRoaXMgaXMgY2xlYXJseSBhIHBvdGVudGlhbCBpc3N1ZVxuICAgICAgLy8gdGhlcmUgaXMgbm8gYWJvcnQgbWV0aG9kIG9uIFN0cmVhbS5SZWFkYWJsZVxuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgcmVxdWVzdFN0cmVhbS5hYm9ydCgpO1xuICAgICAgdHJhbnNmb3JtU3RyZWFtLmVtaXQoJ2VuZCcpO1xuICAgIH07XG5cbiAgICByZXR1cm4gdHJhbnNmb3JtU3RyZWFtO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBwcm94eSBoZWFkZXJzLlxuICAgKiBGSVhNRTogb2JqZWN0IG11dGF0aW9ucywgaXQgc2hvdWxkIHJldHVybiBhbiBuZXcgb2JqZWN0XG4gICAqIEBwYXJhbSB7Kn0gcmVxIHRoZSBodHRwIHJlcXVlc3RcbiAgICogQHBhcmFtIHsqfSBoZWFkZXJzIHRoZSByZXF1ZXN0IGhlYWRlcnNcbiAgICovXG4gIHByaXZhdGUgX2FkZFByb3h5SGVhZGVycyhyZXE6IGFueSwgaGVhZGVyczogYW55KTogdm9pZCB7XG4gICAgaWYgKHJlcSkge1xuICAgICAgLy8gT25seSBzdWJtaXQgWC1Gb3J3YXJkZWQtRm9yIGZpZWxkIGlmIHdlIGRvbid0IGhhdmUgYSBwcm94eSBzZWxlY3RlZFxuICAgICAgLy8gaW4gdGhlIGNvbmZpZyBmaWxlLlxuICAgICAgLy9cbiAgICAgIC8vIE90aGVyd2lzZSBtaXNjb25maWd1cmVkIHByb3h5IGNvdWxkIHJldHVybiA0MDc6XG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vcmxpZHdrYS9zaW5vcGlhL2lzc3Vlcy8yNTRcbiAgICAgIC8vXG4gICAgICAvLyBGSVhNRTogcHJveHkgbG9naWMgaXMgb2RkLCBzb21ldGhpbmcgaXMgd3JvbmcgaGVyZS5cbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIGlmICghdGhpcy5wcm94eSkge1xuICAgICAgICBoZWFkZXJzWyd4LWZvcndhcmRlZC1mb3InXSA9IChyZXEuZ2V0KCd4LWZvcndhcmRlZC1mb3InKSA/IHJlcS5nZXQoJ3gtZm9yd2FyZGVkLWZvcicpICsgJywgJyA6ICcnKSArIHJlcS5jb25uZWN0aW9uLnJlbW90ZUFkZHJlc3M7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gYWx3YXlzIGF0dGFjaCBWaWEgaGVhZGVyIHRvIGF2b2lkIGxvb3BzLCBldmVuIGlmIHdlJ3JlIG5vdCBwcm94eWluZ1xuICAgIGhlYWRlcnNbJ3ZpYSddID0gcmVxICYmIHJlcS5nZXQoJ3ZpYScpID8gcmVxLmdldCgndmlhJykgKyAnLCAnIDogJyc7XG5cbiAgICBoZWFkZXJzWyd2aWEnXSArPSAnMS4xICcgKyB0aGlzLnNlcnZlcl9pZCArICcgKFZlcmRhY2NpbyknO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIHdoZXRoZXIgdGhlIHJlbW90ZSBob3N0IGlzIGF2YWlsYWJsZS5cbiAgICogQHBhcmFtIHsqfSBhbGl2ZVxuICAgKiBAcmV0dXJuIHtCb29sZWFufVxuICAgKi9cbiAgcHJpdmF0ZSBfc3RhdHVzQ2hlY2soYWxpdmU/OiBib29sZWFuKTogYm9vbGVhbiB8IHZvaWQge1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gdGhpcy5faWZSZXF1ZXN0RmFpbHVyZSgpID09PSBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGFsaXZlKSB7XG4gICAgICBpZiAodGhpcy5mYWlsZWRfcmVxdWVzdHMgPj0gdGhpcy5tYXhfZmFpbHMpIHtcbiAgICAgICAgdGhpcy5sb2dnZXIud2FybihcbiAgICAgICAgICB7XG4gICAgICAgICAgICBob3N0OiB0aGlzLnVybC5ob3N0LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgJ2hvc3QgQHtob3N0fSBpcyBiYWNrIG9ubGluZSdcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZmFpbGVkX3JlcXVlc3RzID0gMDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5mYWlsZWRfcmVxdWVzdHMrKztcbiAgICAgIGlmICh0aGlzLmZhaWxlZF9yZXF1ZXN0cyA9PT0gdGhpcy5tYXhfZmFpbHMpIHtcbiAgICAgICAgdGhpcy5sb2dnZXIud2FybihcbiAgICAgICAgICB7XG4gICAgICAgICAgICBob3N0OiB0aGlzLnVybC5ob3N0LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgJ2hvc3QgQHtob3N0fSBpcyBub3cgb2ZmbGluZSdcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmxhc3RfcmVxdWVzdF90aW1lID0gRGF0ZS5ub3coKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJZiB0aGUgcmVxdWVzdCBmYWlsdXJlLlxuICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBfaWZSZXF1ZXN0RmFpbHVyZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5mYWlsZWRfcmVxdWVzdHMgPj0gdGhpcy5tYXhfZmFpbHMgJiYgTWF0aC5hYnMoRGF0ZS5ub3coKSAtICh0aGlzLmxhc3RfcmVxdWVzdF90aW1lIGFzIG51bWJlcikpIDwgdGhpcy5mYWlsX3RpbWVvdXQ7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHVwIGEgcHJveHkuXG4gICAqIEBwYXJhbSB7Kn0gaG9zdG5hbWVcbiAgICogQHBhcmFtIHsqfSBjb25maWdcbiAgICogQHBhcmFtIHsqfSBtYWluY29uZmlnXG4gICAqIEBwYXJhbSB7Kn0gaXNIVFRQU1xuICAgKi9cbiAgcHJpdmF0ZSBfc2V0dXBQcm94eShob3N0bmFtZTogc3RyaW5nLCBjb25maWc6IFVwTGlua0NvbmZMb2NhbCwgbWFpbmNvbmZpZzogQ29uZmlnLCBpc0hUVFBTOiBib29sZWFuKTogdm9pZCB7XG4gICAgbGV0IG5vUHJveHlMaXN0O1xuICAgIGNvbnN0IHByb3h5X2tleTogc3RyaW5nID0gaXNIVFRQUyA/ICdodHRwc19wcm94eScgOiAnaHR0cF9wcm94eSc7XG5cbiAgICAvLyBnZXQgaHR0cF9wcm94eSBhbmQgbm9fcHJveHkgY29uZmlnc1xuICAgIGlmIChwcm94eV9rZXkgaW4gY29uZmlnKSB7XG4gICAgICB0aGlzLnByb3h5ID0gY29uZmlnW3Byb3h5X2tleV07XG4gICAgfSBlbHNlIGlmIChwcm94eV9rZXkgaW4gbWFpbmNvbmZpZykge1xuICAgICAgdGhpcy5wcm94eSA9IG1haW5jb25maWdbcHJveHlfa2V5XTtcbiAgICB9XG4gICAgaWYgKCdub19wcm94eScgaW4gY29uZmlnKSB7XG4gICAgICAvLyAkRmxvd0ZpeE1lXG4gICAgICBub1Byb3h5TGlzdCA9IGNvbmZpZy5ub19wcm94eTtcbiAgICB9IGVsc2UgaWYgKCdub19wcm94eScgaW4gbWFpbmNvbmZpZykge1xuICAgICAgbm9Qcm94eUxpc3QgPSBtYWluY29uZmlnLm5vX3Byb3h5O1xuICAgIH1cblxuICAgIC8vIHVzZSB3Z2V0LWxpa2UgYWxnb3JpdGhtIHRvIGRldGVybWluZSBpZiBwcm94eSBzaG91bGRuJ3QgYmUgdXNlZFxuICAgIGlmIChob3N0bmFtZVswXSAhPT0gJy4nKSB7XG4gICAgICBob3N0bmFtZSA9ICcuJyArIGhvc3RuYW1lO1xuICAgIH1cblxuICAgIGlmIChfLmlzU3RyaW5nKG5vUHJveHlMaXN0KSAmJiBub1Byb3h5TGlzdC5sZW5ndGgpIHtcbiAgICAgIC8vICRGbG93Rml4TWVcbiAgICAgIG5vUHJveHlMaXN0ID0gbm9Qcm94eUxpc3Quc3BsaXQoJywnKTtcbiAgICB9XG5cbiAgICBpZiAoXy5pc0FycmF5KG5vUHJveHlMaXN0KSkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBub1Byb3h5TGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgICBsZXQgbm9Qcm94eUl0ZW0gPSBub1Byb3h5TGlzdFtpXTtcbiAgICAgICAgaWYgKG5vUHJveHlJdGVtWzBdICE9PSAnLicpIHtcbiAgICAgICAgICBub1Byb3h5SXRlbSA9ICcuJyArIG5vUHJveHlJdGVtO1xuICAgICAgICB9XG4gICAgICAgIGlmIChob3N0bmFtZS5sYXN0SW5kZXhPZihub1Byb3h5SXRlbSkgPT09IGhvc3RuYW1lLmxlbmd0aCAtIG5vUHJveHlJdGVtLmxlbmd0aCkge1xuICAgICAgICAgIGlmICh0aGlzLnByb3h5KSB7XG4gICAgICAgICAgICBkZWJ1Zygnbm90IHVzaW5nIHByb3h5IGZvciAlbywgZXhjbHVkZWQgYnkgJW8gcnVsZScsIHRoaXMudXJsLmhyZWYsIG5vUHJveHlJdGVtKTtcbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgIHRoaXMucHJveHkgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBpZiBpdCdzIG5vbi1zdHJpbmcgKGkuZS4gXCJmYWxzZVwiKSwgZG9uJ3QgdXNlIGl0XG4gICAgaWYgKF8uaXNTdHJpbmcodGhpcy5wcm94eSkgPT09IGZhbHNlKSB7XG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICBkZWxldGUgdGhpcy5wcm94eTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGVidWcoJ3VzaW5nIHByb3h5ICVvIGZvciAlbycsIHRoaXMudXJsLmhyZWYsIHRoaXMucHJveHkpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBQcm94eVN0b3JhZ2U7XG4iXX0=
|
package/build/lib/utils.js
CHANGED
|
@@ -97,9 +97,18 @@ const pkgVersion = module.exports.version;
|
|
|
97
97
|
const pkgName = module.exports.name;
|
|
98
98
|
const validProtocols = ['https', 'http'];
|
|
99
99
|
|
|
100
|
-
function getUserAgent() {
|
|
100
|
+
function getUserAgent(customUserAgent) {
|
|
101
101
|
(0, _assert.default)(_lodash.default.isString(pkgName));
|
|
102
102
|
(0, _assert.default)(_lodash.default.isString(pkgVersion));
|
|
103
|
+
|
|
104
|
+
if (customUserAgent === true) {
|
|
105
|
+
return `${pkgName}/${pkgVersion}`;
|
|
106
|
+
} else if (_lodash.default.isString(customUserAgent) && _lodash.default.isEmpty(customUserAgent) === false) {
|
|
107
|
+
return customUserAgent;
|
|
108
|
+
} else if (customUserAgent === false) {
|
|
109
|
+
return '';
|
|
110
|
+
}
|
|
111
|
+
|
|
103
112
|
return `${pkgName}/${pkgVersion}`;
|
|
104
113
|
}
|
|
105
114
|
|
|
@@ -583,13 +592,14 @@ function addGravatarSupport(pkgInfo, online = true) {
|
|
|
583
592
|
* parse package readme - markdown/ascii
|
|
584
593
|
* @param {String} packageName name of package
|
|
585
594
|
* @param {String} readme package readme
|
|
595
|
+
* @param {Object} options sanitizyReadme options
|
|
586
596
|
* @return {String} converted html template
|
|
587
597
|
*/
|
|
588
598
|
|
|
589
599
|
|
|
590
|
-
function parseReadme(packageName, readme) {
|
|
600
|
+
function parseReadme(packageName, readme, options = {}) {
|
|
591
601
|
if (_lodash.default.isEmpty(readme) === false) {
|
|
592
|
-
return (0, _readme.default)(readme);
|
|
602
|
+
return (0, _readme.default)(readme, options);
|
|
593
603
|
} // logs readme not found error
|
|
594
604
|
|
|
595
605
|
|
|
@@ -791,4 +801,4 @@ function wrapPrefix(prefix) {
|
|
|
791
801
|
return prefix;
|
|
792
802
|
}
|
|
793
803
|
}
|
|
794
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvdXRpbHMudHMiXSwibmFtZXMiOlsiZGVidWciLCJyZXF1aXJlIiwibW9kdWxlIiwicGtnVmVyc2lvbiIsImV4cG9ydHMiLCJ2ZXJzaW9uIiwicGtnTmFtZSIsIm5hbWUiLCJ2YWxpZFByb3RvY29scyIsImdldFVzZXJBZ2VudCIsIl8iLCJpc1N0cmluZyIsImNvbnZlcnRQYXlsb2FkVG9CYXNlNjQiLCJwYXlsb2FkIiwiQnVmZmVyIiwiZnJvbSIsInZhbGlkYXRlTmFtZSIsIm5vcm1hbGl6ZWROYW1lIiwidG9Mb3dlckNhc2UiLCJtYXRjaCIsInN0YXJ0c1dpdGgiLCJpbmNsdWRlcyIsInZhbGlkYXRlUGFja2FnZSIsIm5hbWVMaXN0Iiwic3BsaXQiLCJsZW5ndGgiLCJzbGljZSIsImlzT2JqZWN0Iiwib2JqIiwiaXNOdWxsIiwiaXNBcnJheSIsImlzT2JqZWN0T3JBcnJheSIsInZhbGlkYXRlTWV0YWRhdGEiLCJvYmplY3QiLCJhc3NlcnQiLCJzdHJpY3RFcXVhbCIsIkRJU1RfVEFHUyIsImV4dHJhY3RUYXJiYWxsRnJvbVVybCIsInVybCIsIkRlZmF1bHRVUkwiLCJwYXJzZSIsInBhdGhuYW1lIiwicmVwbGFjZSIsImNvbnZlcnREaXN0UmVtb3RlVG9Mb2NhbFRhcmJhbGxVcmxzIiwicGtnIiwicmVxIiwidXJsUHJlZml4IiwidmVyIiwidmVyc2lvbnMiLCJPYmplY3QiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJkaXN0TmFtZSIsImRpc3QiLCJ0YXJiYWxsIiwiZ2V0TG9jYWxSZWdpc3RyeVRhcmJhbGxVcmkiLCJtZW1vaXplZGdldFB1YmxpY1VybCIsImdldFB1YmxpY1VybCIsInVyaSIsImN1cnJlbnRIb3N0IiwiZ2V0IiwidGFyYmFsbE5hbWUiLCJkb21haW5SZWdpc3RyeSIsImVuY29kZVNjb3BlZFVyaSIsInRhZ1ZlcnNpb24iLCJkYXRhIiwidGFnIiwic2VtdmVyIiwiZ2V0VmVyc2lvbiIsImlzTmlsIiwidmVyc2lvbkl0ZW0iLCJjb21wYXJlIiwiZXJyIiwidW5kZWZpbmVkIiwicGFyc2VBZGRyZXNzIiwidXJsQWRkcmVzcyIsInVybFBhdHRlcm4iLCJleGVjIiwicHJvdG8iLCJERUZBVUxUX1BST1RPQ09MIiwiaG9zdCIsIkRFRkFVTFRfRE9NQUlOIiwicG9ydCIsIkRFRkFVTFRfUE9SVCIsInBhdGgiLCJzZW12ZXJTb3J0IiwibGlzdFZlcnNpb25zIiwiZmlsdGVyIiwieCIsImxvZ2dlciIsIndhcm4iLCJzb3J0IiwiY29tcGFyZUxvb3NlIiwibWFwIiwiU3RyaW5nIiwibm9ybWFsaXplRGlzdFRhZ3MiLCJzb3J0ZWQiLCJsYXRlc3QiLCJrZXlzIiwicG9wIiwicGFyc2VJbnRlcnZhbFRhYmxlIiwibXMiLCJzIiwibSIsImgiLCJkIiwidyIsIk0iLCJ5IiwicGFyc2VJbnRlcnZhbCIsImludGVydmFsIiwicmVzdWx0IiwibGFzdF9zdWZmaXgiLCJJbmZpbml0eSIsImZvckVhY2giLCJFcnJvciIsIk51bWJlciIsImdldFdlYlByb3RvY29sIiwiaGVhZGVyUHJvdG9jb2wiLCJwcm90b2NvbCIsInJldHVyblByb3RvY29sIiwiZGVmYXVsdFByb3RvY29sIiwiY29tbWFJbmRleCIsImluZGV4T2YiLCJzdWJzdHIiLCJnZXRMYXRlc3RWZXJzaW9uIiwicGtnSW5mbyIsIkVycm9yQ29kZSIsImdldENvbmZsaWN0IiwiZ2V0QmFkRGF0YSIsImdldEJhZFJlcXVlc3QiLCJnZXRJbnRlcm5hbEVycm9yIiwiZ2V0VW5hdXRob3JpemVkIiwiZ2V0Rm9yYmlkZGVuIiwiZ2V0U2VydmljZVVuYXZhaWxhYmxlIiwiZ2V0Tm90Rm91bmQiLCJnZXRDb2RlIiwicGFyc2VDb25maWdGaWxlIiwiY29uZmlnUGF0aCIsInRlc3QiLCJZQU1MIiwibG9hZCIsImZzIiwicmVhZEZpbGVTeW5jIiwiZSIsImNvZGUiLCJtZXNzYWdlIiwiQVBQX0VSUk9SIiwiQ09ORklHX05PVF9WQUxJRCIsImZvbGRlckV4aXN0cyIsInN0YXQiLCJzdGF0U3luYyIsImlzRGlyZWN0b3J5IiwiZmlsZUV4aXN0cyIsImlzRmlsZSIsInNvcnRCeU5hbWUiLCJwYWNrYWdlcyIsIm9yZGVyQXNjZW5kaW5nIiwiYSIsImIiLCJjb21wYXJhdG9yTmFtZXMiLCJhZGRTY29wZSIsInNjb3BlIiwicGFja2FnZU5hbWUiLCJkZWxldGVQcm9wZXJ0aWVzIiwicHJvcGVydGllc1RvRGVsZXRlIiwib2JqZWN0SXRlbSIsInByb3BlcnR5IiwiYWRkR3JhdmF0YXJTdXBwb3J0Iiwib25saW5lIiwicGtnSW5mb0NvcHkiLCJhdXRob3IiLCJjb250cmlidXRvcnMiLCJtYWludGFpbmVycyIsImVtYWlsIiwiYXZhdGFyIiwiR0VORVJJQ19BVkFUQVIiLCJpc0VtcHR5IiwiY29udHJpYnV0b3IiLCJtYWludGFpbmVyIiwicGFyc2VSZWFkbWUiLCJyZWFkbWUiLCJlcnJvciIsImJ1aWxkVG9rZW4iLCJ0eXBlIiwidG9rZW4iLCJjYXBpdGFsaXplIiwiZ2V0VmVyc2lvbkZyb21UYXJiYWxsIiwiZm9ybWF0QXV0aG9yIiwiYXV0aG9yRGV0YWlscyIsIkRFRkFVTFRfVVNFUiIsImlzSFRUUFByb3RvY29sIiwicGFkIiwic3RyIiwibWF4IiwicmVwZWF0IiwibWFzayIsImNoYXJOdW0iLCJoYXNEaWZmT25lS2V5IiwiaXNWZXJzaW9uVmFsaWQiLCJwYWNrYWdlTWV0YSIsInBhY2thZ2VWZXJzaW9uIiwiaGFzVmVyc2lvbiIsImhhc01hdGNoVmVyc2lvbiIsImlzUmVsYXRlZFRvRGVwcmVjYXRpb24iLCJ2YWxpZGF0ZVVSTCIsInB1YmxpY1VybCIsInBhcnNlZCIsIlVSTCIsImlzSG9zdCIsIm9wdGlvbnMiLCJ2YWxpZGF0b3IiLCJpc1VSTCIsInJlcXVpcmVfaG9zdCIsImFsbG93X3RyYWlsaW5nX2RvdCIsInJlcXVpcmVfdmFsaWRfcHJvdG9jb2wiLCJyZXF1aXJlX3BvcnQiLCJyZXF1aXJlX3RsZCIsInVybF9wcmVmaXgiLCJwcm9jZXNzIiwiZW52IiwiVkVSREFDQ0lPX1BVQkxJQ19VUkwiLCJlbnZVUkwiLCJ3cmFwUHJlZml4IiwiaHJlZiIsInByb3RvSGVhZGVyIiwiVkVSREFDQ0lPX0ZPUldBUkRFRF9QUk9UTyIsIkhFQURFUlMiLCJGT1JXQVJERURfUFJPVE8iLCJjb21iaW5lZFVybCIsImNvbWJpbmVCYXNlVXJsIiwicHJlZml4IiwibmV3UHJlZml4IiwiZ3JvdXBlZFVSSSIsImVuZHNXaXRoIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFLQTs7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7Ozs7Ozs7Ozs7Ozs7QUFFQSxNQUFNQSxLQUFLLEdBQUcsb0JBQVcsV0FBWCxDQUFkLEMsQ0FFQTtBQUNBOztBQUNBQyxPQUFPLENBQUMsU0FBRCxDQUFQLENBQW1CQyxNQUFuQjs7QUFDQSxNQUFNQyxVQUFVLEdBQUdELE1BQU0sQ0FBQ0UsT0FBUCxDQUFlQyxPQUFsQztBQUNBLE1BQU1DLE9BQU8sR0FBR0osTUFBTSxDQUFDRSxPQUFQLENBQWVHLElBQS9CO0FBQ0EsTUFBTUMsY0FBYyxHQUFHLENBQUMsT0FBRCxFQUFVLE1BQVYsQ0FBdkI7O0FBRU8sU0FBU0MsWUFBVCxHQUFnQztBQUNyQyx1QkFBT0MsZ0JBQUVDLFFBQUYsQ0FBV0wsT0FBWCxDQUFQO0FBQ0EsdUJBQU9JLGdCQUFFQyxRQUFGLENBQVdSLFVBQVgsQ0FBUDtBQUNBLFNBQVEsR0FBRUcsT0FBUSxJQUFHSCxVQUFXLEVBQWhDO0FBQ0Q7O0FBRU0sU0FBU1Msc0JBQVQsQ0FBZ0NDLE9BQWhDLEVBQXlEO0FBQzlELFNBQU9DLE1BQU0sQ0FBQ0MsSUFBUCxDQUFZRixPQUFaLEVBQXFCLFFBQXJCLENBQVA7QUFDRDtBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNPLFNBQVNHLFlBQVQsQ0FBc0JULElBQXRCLEVBQTZDO0FBQ2xELE1BQUlHLGdCQUFFQyxRQUFGLENBQVdKLElBQVgsTUFBcUIsS0FBekIsRUFBZ0M7QUFDOUIsV0FBTyxLQUFQO0FBQ0Q7O0FBRUQsUUFBTVUsY0FBc0IsR0FBR1YsSUFBSSxDQUFDVyxXQUFMLEVBQS9CO0FBRUE7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFDRSxTQUFPLEVBQ0wsQ0FBQ0QsY0FBYyxDQUFDRSxLQUFmLENBQXFCLDBCQUFyQixDQUFELElBQ0FGLGNBQWMsQ0FBQ0csVUFBZixDQUEwQixHQUExQixDQURBLElBQ2tDO0FBQ2xDLEdBQUMsY0FBRCxFQUFpQixXQUFqQixFQUE4QixhQUE5QixFQUE2Q0MsUUFBN0MsQ0FBc0RKLGNBQXRELENBSEssQ0FBUDtBQUtEO0FBRUQ7QUFDQTtBQUNBO0FBQ0E7OztBQUNPLFNBQVNLLGVBQVQsQ0FBeUJmLElBQXpCLEVBQWdEO0FBQ3JELFFBQU1nQixRQUFRLEdBQUdoQixJQUFJLENBQUNpQixLQUFMLENBQVcsR0FBWCxFQUFnQixDQUFoQixDQUFqQjs7QUFDQSxNQUFJRCxRQUFRLENBQUNFLE1BQVQsS0FBb0IsQ0FBeEIsRUFBMkI7QUFDekI7QUFDQSxXQUFPVCxZQUFZLENBQUNPLFFBQVEsQ0FBQyxDQUFELENBQVQsQ0FBbkI7QUFDRCxHQUxvRCxDQU1yRDs7O0FBQ0EsU0FBT0EsUUFBUSxDQUFDLENBQUQsQ0FBUixDQUFZLENBQVosTUFBbUIsR0FBbkIsSUFBMEJQLFlBQVksQ0FBQ08sUUFBUSxDQUFDLENBQUQsQ0FBUixDQUFZRyxLQUFaLENBQWtCLENBQWxCLENBQUQsQ0FBdEMsSUFBZ0VWLFlBQVksQ0FBQ08sUUFBUSxDQUFDLENBQUQsQ0FBVCxDQUFuRjtBQUNEO0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ08sU0FBU0ksUUFBVCxDQUFrQkMsR0FBbEIsRUFBcUM7QUFDMUMsU0FBT2xCLGdCQUFFaUIsUUFBRixDQUFXQyxHQUFYLEtBQW1CbEIsZ0JBQUVtQixNQUFGLENBQVNELEdBQVQsTUFBa0IsS0FBckMsSUFBOENsQixnQkFBRW9CLE9BQUYsQ0FBVUYsR0FBVixNQUFtQixLQUF4RTtBQUNEOztBQUVNLFNBQVNHLGVBQVQsQ0FBeUJILEdBQXpCLEVBQTRDO0FBQ2pELFNBQU9sQixnQkFBRWlCLFFBQUYsQ0FBV0MsR0FBWCxLQUFtQmxCLGdCQUFFbUIsTUFBRixDQUFTRCxHQUFULE1BQWtCLEtBQTVDO0FBQ0Q7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ08sU0FBU0ksZ0JBQVQsQ0FBMEJDLE1BQTFCLEVBQTJDMUIsSUFBM0MsRUFBa0U7QUFDdkUsdUJBQU9vQixRQUFRLENBQUNNLE1BQUQsQ0FBZixFQUF5QixtQkFBekI7O0FBQ0FDLGtCQUFPQyxXQUFQLENBQW1CRixNQUFNLENBQUMxQixJQUExQixFQUFnQ0EsSUFBaEM7O0FBRUEsTUFBSSxDQUFDb0IsUUFBUSxDQUFDTSxNQUFNLENBQUNHLG9CQUFELENBQVAsQ0FBYixFQUFrQztBQUNoQ0gsSUFBQUEsTUFBTSxDQUFDRyxvQkFBRCxDQUFOLEdBQW9CLEVBQXBCO0FBQ0Q7O0FBRUQsTUFBSSxDQUFDVCxRQUFRLENBQUNNLE1BQU0sQ0FBQyxVQUFELENBQVAsQ0FBYixFQUFtQztBQUNqQ0EsSUFBQUEsTUFBTSxDQUFDLFVBQUQsQ0FBTixHQUFxQixFQUFyQjtBQUNEOztBQUVELE1BQUksQ0FBQ04sUUFBUSxDQUFDTSxNQUFNLENBQUMsTUFBRCxDQUFQLENBQWIsRUFBK0I7QUFDN0JBLElBQUFBLE1BQU0sQ0FBQyxNQUFELENBQU4sR0FBaUIsRUFBakI7QUFDRDs7QUFFRCxTQUFPQSxNQUFQO0FBQ0Q7O0FBRU0sU0FBU0kscUJBQVQsQ0FBK0JDLEdBQS9CLEVBQW9EO0FBQ3pEO0FBQ0EsU0FBT0MsYUFBV0MsS0FBWCxDQUFpQkYsR0FBakIsRUFBc0JHLFFBQXRCLENBQStCQyxPQUEvQixDQUF1QyxPQUF2QyxFQUFnRCxFQUFoRCxDQUFQO0FBQ0Q7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ08sU0FBU0MsbUNBQVQsQ0FBNkNDLEdBQTdDLEVBQTJEQyxHQUEzRCxFQUF5RUMsU0FBekUsRUFBNEc7QUFDakgsT0FBSyxNQUFNQyxHQUFYLElBQWtCSCxHQUFHLENBQUNJLFFBQXRCLEVBQWdDO0FBQzlCLFFBQUlDLE1BQU0sQ0FBQ0MsU0FBUCxDQUFpQkMsY0FBakIsQ0FBZ0NDLElBQWhDLENBQXFDUixHQUFHLENBQUNJLFFBQXpDLEVBQW1ERCxHQUFuRCxDQUFKLEVBQTZEO0FBQzNELFlBQU1NLFFBQVEsR0FBR1QsR0FBRyxDQUFDSSxRQUFKLENBQWFELEdBQWIsRUFBa0JPLElBQW5DOztBQUVBLFVBQUk1QyxnQkFBRW1CLE1BQUYsQ0FBU3dCLFFBQVQsTUFBdUIsS0FBdkIsSUFBZ0MzQyxnQkFBRW1CLE1BQUYsQ0FBU3dCLFFBQVEsQ0FBQ0UsT0FBbEIsTUFBK0IsS0FBbkUsRUFBMEU7QUFDeEVGLFFBQUFBLFFBQVEsQ0FBQ0UsT0FBVCxHQUFtQkMsMEJBQTBCLENBQUNILFFBQVEsQ0FBQ0UsT0FBVixFQUFtQlgsR0FBRyxDQUFDckMsSUFBdkIsRUFBNkJzQyxHQUE3QixFQUFrQ0MsU0FBbEMsQ0FBN0M7QUFDRDtBQUNGO0FBQ0Y7O0FBQ0QsU0FBT0YsR0FBUDtBQUNEOztBQUVELE1BQU1hLG9CQUFvQixHQUFHLHVCQUFTQyxZQUFULENBQTdCO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFDTyxTQUFTRiwwQkFBVCxDQUFvQ0csR0FBcEMsRUFBaURyRCxPQUFqRCxFQUFrRXVDLEdBQWxFLEVBQWdGQyxTQUFoRixFQUFrSDtBQUN2SCxRQUFNYyxXQUFXLEdBQUdmLEdBQUcsQ0FBQ2dCLEdBQUosQ0FBUSxNQUFSLENBQXBCOztBQUVBLE1BQUksQ0FBQ0QsV0FBTCxFQUFrQjtBQUNoQixXQUFPRCxHQUFQO0FBQ0Q7O0FBQ0QsUUFBTUcsV0FBVyxHQUFHekIscUJBQXFCLENBQUNzQixHQUFELENBQXpDO0FBQ0EsUUFBTUksY0FBYyxHQUFHTixvQkFBb0IsQ0FBQ1gsU0FBUyxJQUFJLEVBQWQsRUFBa0JELEdBQWxCLENBQTNDO0FBRUEsU0FBUSxHQUFFa0IsY0FBZSxHQUFFQyxlQUFlLENBQUMxRCxPQUFELENBQVUsTUFBS3dELFdBQVksRUFBckU7QUFDRDs7QUFFTSxTQUFTRyxVQUFULENBQW9CQyxJQUFwQixFQUFtQzdELE9BQW5DLEVBQW9EOEQsR0FBcEQsRUFBK0U7QUFDcEYsTUFBSUEsR0FBRyxJQUFJRCxJQUFJLENBQUM5QixvQkFBRCxDQUFKLENBQWdCK0IsR0FBaEIsTUFBeUI5RCxPQUFoQyxJQUEyQytELGdCQUFPNUIsS0FBUCxDQUFhbkMsT0FBYixFQUFzQixJQUF0QixDQUEvQyxFQUE0RTtBQUMxRTtBQUNBNkQsSUFBQUEsSUFBSSxDQUFDOUIsb0JBQUQsQ0FBSixDQUFnQitCLEdBQWhCLElBQXVCOUQsT0FBdkI7QUFDQSxXQUFPLElBQVA7QUFDRDs7QUFDRCxTQUFPLEtBQVA7QUFDRDtBQUVEO0FBQ0E7QUFDQTtBQUNBOzs7QUFDTyxTQUFTZ0UsVUFBVCxDQUFvQnpCLEdBQXBCLEVBQWtDdkMsT0FBbEMsRUFBZ0U7QUFDckU7QUFDQSxNQUFJSyxnQkFBRTRELEtBQUYsQ0FBUTFCLEdBQUcsQ0FBQ0ksUUFBSixDQUFhM0MsT0FBYixDQUFSLE1BQW1DLEtBQXZDLEVBQThDO0FBQzVDLFdBQU91QyxHQUFHLENBQUNJLFFBQUosQ0FBYTNDLE9BQWIsQ0FBUDtBQUNEOztBQUVELE1BQUk7QUFDRkEsSUFBQUEsT0FBTyxHQUFHK0QsZ0JBQU81QixLQUFQLENBQWFuQyxPQUFiLEVBQXNCLElBQXRCLENBQVY7O0FBQ0EsU0FBSyxNQUFNa0UsV0FBWCxJQUEwQjNCLEdBQUcsQ0FBQ0ksUUFBOUIsRUFBd0M7QUFDdEM7QUFDQSxVQUFJM0MsT0FBTyxDQUFDbUUsT0FBUixDQUFnQkosZ0JBQU81QixLQUFQLENBQWErQixXQUFiLEVBQTBCLElBQTFCLENBQWhCLE1BQXFELENBQXpELEVBQTREO0FBQzFELGVBQU8zQixHQUFHLENBQUNJLFFBQUosQ0FBYXVCLFdBQWIsQ0FBUDtBQUNEO0FBQ0Y7QUFDRixHQVJELENBUUUsT0FBT0UsR0FBUCxFQUFZO0FBQ1osV0FBT0MsU0FBUDtBQUNEO0FBQ0Y7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDTyxTQUFTQyxZQUFULENBQXNCQyxVQUF0QixFQUE0QztBQUNqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQUlDLFVBQVUsR0FBRyw4REFBOERDLElBQTlELENBQW1FRixVQUFuRSxDQUFqQjs7QUFFQSxNQUFJQyxVQUFKLEVBQWdCO0FBQ2QsV0FBTztBQUNMRSxNQUFBQSxLQUFLLEVBQUVGLFVBQVUsQ0FBQyxDQUFELENBQVYsSUFBaUJHLDJCQURuQjtBQUVMQyxNQUFBQSxJQUFJLEVBQUVKLFVBQVUsQ0FBQyxDQUFELENBQVYsSUFBaUJBLFVBQVUsQ0FBQyxDQUFELENBQTNCLElBQWtDSyx5QkFGbkM7QUFHTEMsTUFBQUEsSUFBSSxFQUFFTixVQUFVLENBQUMsQ0FBRCxDQUFWLElBQWlCTztBQUhsQixLQUFQO0FBS0Q7O0FBRURQLEVBQUFBLFVBQVUsR0FBRyxpQ0FBaUNDLElBQWpDLENBQXNDRixVQUF0QyxDQUFiOztBQUVBLE1BQUlDLFVBQUosRUFBZ0I7QUFDZCxXQUFPO0FBQ0xFLE1BQUFBLEtBQUssRUFBRUYsVUFBVSxDQUFDLENBQUQsQ0FBVixJQUFpQkcsMkJBRG5CO0FBRUxLLE1BQUFBLElBQUksRUFBRVIsVUFBVSxDQUFDLENBQUQ7QUFGWCxLQUFQO0FBSUQ7O0FBRUQsU0FBTyxJQUFQO0FBQ0Q7QUFFRDtBQUNBO0FBQ0E7QUFDQTs7O0FBQ08sU0FBU1MsVUFBVCxDQUFvQkMsWUFBcEIsRUFBc0Q7QUFDM0QsU0FDRUEsWUFBWSxDQUNUQyxNQURILENBQ1UsVUFBVUMsQ0FBVixFQUFzQjtBQUM1QixRQUFJLENBQUNyQixnQkFBTzVCLEtBQVAsQ0FBYWlELENBQWIsRUFBZ0IsSUFBaEIsQ0FBTCxFQUE0QjtBQUMxQkMscUJBQU9DLElBQVAsQ0FBWTtBQUFFNUMsUUFBQUEsR0FBRyxFQUFFMEM7QUFBUCxPQUFaLEVBQXdCLDZCQUF4Qjs7QUFDQSxhQUFPLEtBQVA7QUFDRDs7QUFDRCxXQUFPLElBQVA7QUFDRCxHQVBILEVBUUU7QUFDQTtBQVRGLEdBVUdHLElBVkgsQ0FVUXhCLGdCQUFPeUIsWUFWZixFQVdHQyxHQVhILENBV09DLE1BWFAsQ0FERjtBQWNEO0FBRUQ7QUFDQTtBQUNBO0FBQ0E7OztBQUNPLFNBQVNDLGlCQUFULENBQTJCcEQsR0FBM0IsRUFBK0M7QUFDcEQsTUFBSXFELE1BQUo7O0FBQ0EsTUFBSSxDQUFDckQsR0FBRyxDQUFDUixvQkFBRCxDQUFILENBQWU4RCxNQUFwQixFQUE0QjtBQUMxQjtBQUNBRCxJQUFBQSxNQUFNLEdBQUdYLFVBQVUsQ0FBQ3JDLE1BQU0sQ0FBQ2tELElBQVAsQ0FBWXZELEdBQUcsQ0FBQ0ksUUFBaEIsQ0FBRCxDQUFuQjs7QUFDQSxRQUFJaUQsTUFBTSxJQUFJQSxNQUFNLENBQUN4RSxNQUFyQixFQUE2QjtBQUMzQm1CLE1BQUFBLEdBQUcsQ0FBQ1Isb0JBQUQsQ0FBSCxDQUFlOEQsTUFBZixHQUF3QkQsTUFBTSxDQUFDRyxHQUFQLEVBQXhCO0FBQ0Q7QUFDRjs7QUFFRCxPQUFLLE1BQU1qQyxHQUFYLElBQWtCdkIsR0FBRyxDQUFDUixvQkFBRCxDQUFyQixFQUFrQztBQUNoQyxRQUFJMUIsZ0JBQUVvQixPQUFGLENBQVVjLEdBQUcsQ0FBQ1Isb0JBQUQsQ0FBSCxDQUFlK0IsR0FBZixDQUFWLENBQUosRUFBb0M7QUFDbEMsVUFBSXZCLEdBQUcsQ0FBQ1Isb0JBQUQsQ0FBSCxDQUFlK0IsR0FBZixFQUFvQjFDLE1BQXhCLEVBQWdDO0FBQzlCO0FBQ0E7QUFDQTtBQUNBd0UsUUFBQUEsTUFBTSxHQUFHWCxVQUFVLENBQUMxQyxHQUFHLENBQUNSLG9CQUFELENBQUgsQ0FBZStCLEdBQWYsQ0FBRCxDQUFuQjs7QUFDQSxZQUFJOEIsTUFBTSxDQUFDeEUsTUFBWCxFQUFtQjtBQUNqQjtBQUNBbUIsVUFBQUEsR0FBRyxDQUFDUixvQkFBRCxDQUFILENBQWUrQixHQUFmLElBQXNCOEIsTUFBTSxDQUFDRyxHQUFQLEVBQXRCO0FBQ0Q7QUFDRixPQVRELE1BU087QUFDTCxlQUFPeEQsR0FBRyxDQUFDUixvQkFBRCxDQUFILENBQWUrQixHQUFmLENBQVA7QUFDRDtBQUNGLEtBYkQsTUFhTyxJQUFJekQsZ0JBQUVDLFFBQUYsQ0FBV2lDLEdBQUcsQ0FBQ1Isb0JBQUQsQ0FBSCxDQUFlK0IsR0FBZixDQUFYLENBQUosRUFBcUM7QUFDMUMsVUFBSSxDQUFDQyxnQkFBTzVCLEtBQVAsQ0FBYUksR0FBRyxDQUFDUixvQkFBRCxDQUFILENBQWUrQixHQUFmLENBQWIsRUFBa0MsSUFBbEMsQ0FBTCxFQUE4QztBQUM1QztBQUNBLGVBQU92QixHQUFHLENBQUNSLG9CQUFELENBQUgsQ0FBZStCLEdBQWYsQ0FBUDtBQUNEO0FBQ0Y7QUFDRjtBQUNGOztBQUVELE1BQU1rQyxrQkFBa0IsR0FBRztBQUN6QixNQUFJLElBRHFCO0FBRXpCQyxFQUFBQSxFQUFFLEVBQUUsQ0FGcUI7QUFHekJDLEVBQUFBLENBQUMsRUFBRSxJQUhzQjtBQUl6QkMsRUFBQUEsQ0FBQyxFQUFFLEtBQUssSUFKaUI7QUFLekJDLEVBQUFBLENBQUMsRUFBRSxLQUFLLEVBQUwsR0FBVSxJQUxZO0FBTXpCQyxFQUFBQSxDQUFDLEVBQUUsUUFOc0I7QUFPekJDLEVBQUFBLENBQUMsRUFBRSxJQUFJLFFBUGtCO0FBUXpCQyxFQUFBQSxDQUFDLEVBQUUsS0FBSyxRQVJpQjtBQVN6QkMsRUFBQUEsQ0FBQyxFQUFFLE1BQU07QUFUZ0IsQ0FBM0I7QUFZQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUNPLFNBQVNDLGFBQVQsQ0FBdUJDLFFBQXZCLEVBQThDO0FBQ25ELE1BQUksT0FBT0EsUUFBUCxLQUFvQixRQUF4QixFQUFrQztBQUNoQyxXQUFPQSxRQUFRLEdBQUcsSUFBbEI7QUFDRDs7QUFDRCxNQUFJQyxNQUFNLEdBQUcsQ0FBYjtBQUNBLE1BQUlDLFdBQVcsR0FBR0MsUUFBbEI7QUFDQUgsRUFBQUEsUUFBUSxDQUFDdkYsS0FBVCxDQUFlLEtBQWYsRUFBc0IyRixPQUF0QixDQUE4QixVQUFVMUIsQ0FBVixFQUFtQjtBQUMvQyxRQUFJLENBQUNBLENBQUwsRUFBUTtBQUNOO0FBQ0Q7O0FBQ0QsVUFBTWUsQ0FBQyxHQUFHZixDQUFDLENBQUN0RSxLQUFGLENBQVEsbURBQVIsQ0FBVjs7QUFDQSxRQUFJLENBQUNxRixDQUFELElBQU1ILGtCQUFrQixDQUFDRyxDQUFDLENBQUMsQ0FBRCxDQUFGLENBQWxCLElBQTRCUyxXQUFsQyxJQUFrRFQsQ0FBQyxDQUFDLENBQUQsQ0FBRCxLQUFTLEVBQVQsSUFBZVMsV0FBVyxLQUFLQyxRQUFyRixFQUFnRztBQUM5RixZQUFNRSxLQUFLLENBQUMsdUJBQXVCTCxRQUF4QixDQUFYO0FBQ0Q7O0FBQ0RFLElBQUFBLFdBQVcsR0FBR1osa0JBQWtCLENBQUNHLENBQUMsQ0FBQyxDQUFELENBQUYsQ0FBaEM7QUFDQVEsSUFBQUEsTUFBTSxJQUFJSyxNQUFNLENBQUNiLENBQUMsQ0FBQyxDQUFELENBQUYsQ0FBTixHQUFlSCxrQkFBa0IsQ0FBQ0csQ0FBQyxDQUFDLENBQUQsQ0FBRixDQUEzQztBQUNELEdBVkQ7QUFXQSxTQUFPUSxNQUFQO0FBQ0Q7QUFFRDtBQUNBO0FBQ0E7OztBQUNPLFNBQVNNLGNBQVQsQ0FBd0JDLGNBQXhCLEVBQXVEQyxRQUF2RCxFQUFpRjtBQUN0RixNQUFJQyxjQUFKO0FBQ0EsUUFBTSxHQUFHQyxlQUFILElBQXNCbEgsY0FBNUIsQ0FGc0YsQ0FHdEY7O0FBQ0EsTUFBSSxPQUFPK0csY0FBUCxLQUEwQixRQUExQixJQUFzQ0EsY0FBYyxLQUFLLEVBQTdELEVBQWlFO0FBQy9EdkgsSUFBQUEsS0FBSyxDQUFDLHFCQUFELEVBQXdCd0gsUUFBeEIsQ0FBTDtBQUNBLFVBQU1HLFVBQVUsR0FBR0osY0FBYyxDQUFDSyxPQUFmLENBQXVCLEdBQXZCLENBQW5CO0FBQ0FILElBQUFBLGNBQWMsR0FBR0UsVUFBVSxHQUFHLENBQWIsR0FBaUJKLGNBQWMsQ0FBQ00sTUFBZixDQUFzQixDQUF0QixFQUF5QkYsVUFBekIsQ0FBakIsR0FBd0RKLGNBQXpFO0FBQ0QsR0FKRCxNQUlPO0FBQ0x2SCxJQUFBQSxLQUFLLENBQUMsa0JBQUQsRUFBcUJ1SCxjQUFyQixDQUFMO0FBQ0FFLElBQUFBLGNBQWMsR0FBR0QsUUFBakI7QUFDRDs7QUFFRCxTQUFPaEgsY0FBYyxDQUFDYSxRQUFmLENBQXdCb0csY0FBeEIsSUFBMENBLGNBQTFDLEdBQTJEQyxlQUFsRTtBQUNEOztBQUVNLFNBQVNJLGdCQUFULENBQTBCQyxPQUExQixFQUFvRDtBQUN6RCxTQUFPQSxPQUFPLENBQUMzRixvQkFBRCxDQUFQLENBQW1COEQsTUFBMUI7QUFDRDs7QUFFTSxNQUFNOEIsU0FBUyxHQUFHO0FBQ3ZCQyxFQUFBQSxXQUFXLEVBQVhBLHVCQUR1QjtBQUV2QkMsRUFBQUEsVUFBVSxFQUFWQSxzQkFGdUI7QUFHdkJDLEVBQUFBLGFBQWEsRUFBYkEseUJBSHVCO0FBSXZCQyxFQUFBQSxnQkFBZ0IsRUFBaEJBLDRCQUp1QjtBQUt2QkMsRUFBQUEsZUFBZSxFQUFmQSwyQkFMdUI7QUFNdkJDLEVBQUFBLFlBQVksRUFBWkEsd0JBTnVCO0FBT3ZCQyxFQUFBQSxxQkFBcUIsRUFBckJBLGlDQVB1QjtBQVF2QkMsRUFBQUEsV0FBVyxFQUFYQSx1QkFSdUI7QUFTdkJDLEVBQUFBLE9BQU8sRUFBUEE7QUFUdUIsQ0FBbEI7OztBQVlBLFNBQVNDLGVBQVQsQ0FBeUJDLFVBQXpCLEVBQWtEO0FBQ3ZELE1BQUk7QUFDRixRQUFJLFlBQVlDLElBQVosQ0FBaUJELFVBQWpCLENBQUosRUFBa0M7QUFDaEMsYUFBT0UsZ0JBQUtDLElBQUwsQ0FBVUMsWUFBR0MsWUFBSCxDQUFnQkwsVUFBaEIsRUFBNEIsT0FBNUIsQ0FBVixDQUFQO0FBQ0Q7O0FBQ0QzSSxJQUFBQSxLQUFLLENBQUMsYUFBRCxDQUFMO0FBQ0EsV0FBT0MsT0FBTyxDQUFDMEksVUFBRCxDQUFkO0FBQ0QsR0FORCxDQU1FLE9BQU9NLENBQVAsRUFBVTtBQUNWakosSUFBQUEsS0FBSyxDQUFDLG1CQUFELENBQUw7O0FBQ0EsUUFBSWlKLENBQUMsQ0FBQ0MsSUFBRixLQUFXLGtCQUFmLEVBQW1DO0FBQ2pDRCxNQUFBQSxDQUFDLENBQUNFLE9BQUYsR0FBWUMscUJBQVVDLGdCQUF0QjtBQUNEOztBQUVELFVBQU0sSUFBSWpDLEtBQUosQ0FBVTZCLENBQVYsQ0FBTjtBQUNEO0FBQ0Y7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDTyxTQUFTSyxZQUFULENBQXNCakUsSUFBdEIsRUFBNkM7QUFDbEQsTUFBSTtBQUNGLFVBQU1rRSxJQUFJLEdBQUdSLFlBQUdTLFFBQUgsQ0FBWW5FLElBQVosQ0FBYjs7QUFDQSxXQUFPa0UsSUFBSSxDQUFDRSxXQUFMLEVBQVA7QUFDRCxHQUhELENBR0UsT0FBTy9JLENBQVAsRUFBVTtBQUNWLFdBQU8sS0FBUDtBQUNEO0FBQ0Y7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDTyxTQUFTZ0osVUFBVCxDQUFvQnJFLElBQXBCLEVBQTJDO0FBQ2hELE1BQUk7QUFDRixVQUFNa0UsSUFBSSxHQUFHUixZQUFHUyxRQUFILENBQVluRSxJQUFaLENBQWI7O0FBQ0EsV0FBT2tFLElBQUksQ0FBQ0ksTUFBTCxFQUFQO0FBQ0QsR0FIRCxDQUdFLE9BQU9qSixDQUFQLEVBQVU7QUFDVixXQUFPLEtBQVA7QUFDRDtBQUNGOztBQUVNLFNBQVNrSixVQUFULENBQW9CQyxRQUFwQixFQUFxQ0MsY0FBOEIsR0FBRyxJQUF0RSxFQUFzRjtBQUMzRixTQUFPRCxRQUFRLENBQUNuSSxLQUFULEdBQWlCa0UsSUFBakIsQ0FBc0IsVUFBVW1FLENBQVYsRUFBYUMsQ0FBYixFQUF3QjtBQUNuRCxVQUFNQyxlQUFlLEdBQUdGLENBQUMsQ0FBQ3hKLElBQUYsQ0FBT1csV0FBUCxLQUF1QjhJLENBQUMsQ0FBQ3pKLElBQUYsQ0FBT1csV0FBUCxFQUEvQztBQUVBLFdBQU80SSxjQUFjLEdBQUlHLGVBQWUsR0FBRyxDQUFDLENBQUosR0FBUSxDQUEzQixHQUFnQ0EsZUFBZSxHQUFHLENBQUgsR0FBTyxDQUFDLENBQTVFO0FBQ0QsR0FKTSxDQUFQO0FBS0Q7O0FBRU0sU0FBU0MsUUFBVCxDQUFrQkMsS0FBbEIsRUFBaUNDLFdBQWpDLEVBQThEO0FBQ25FLFNBQVEsSUFBR0QsS0FBTSxJQUFHQyxXQUFZLEVBQWhDO0FBQ0Q7O0FBRU0sU0FBU0MsZ0JBQVQsQ0FBMEJDLGtCQUExQixFQUF3REMsVUFBeEQsRUFBOEU7QUFDbkY3SixrQkFBRXlHLE9BQUYsQ0FBVW1ELGtCQUFWLEVBQStCRSxRQUFELElBQW1CO0FBQy9DLFdBQU9ELFVBQVUsQ0FBQ0MsUUFBRCxDQUFqQjtBQUNELEdBRkQ7O0FBSUEsU0FBT0QsVUFBUDtBQUNEOztBQUVNLFNBQVNFLGtCQUFULENBQTRCMUMsT0FBNUIsRUFBOEMyQyxNQUFNLEdBQUcsSUFBdkQsRUFBMkU7QUFDaEYsUUFBTUMsV0FBVyxxQkFBUTVDLE9BQVIsQ0FBakI7O0FBQ0EsUUFBTTZDLE1BQVcsR0FBR2xLLGdCQUFFbUQsR0FBRixDQUFNa0UsT0FBTixFQUFlLGVBQWYsRUFBZ0MsSUFBaEMsQ0FBcEI7O0FBQ0EsUUFBTThDLFlBQTRCLEdBQUcseUNBQXNCbkssZ0JBQUVtRCxHQUFGLENBQU1rRSxPQUFOLEVBQWUscUJBQWYsRUFBc0MsRUFBdEMsQ0FBdEIsQ0FBckM7O0FBQ0EsUUFBTStDLFdBQVcsR0FBR3BLLGdCQUFFbUQsR0FBRixDQUFNa0UsT0FBTixFQUFlLG9CQUFmLEVBQXFDLEVBQXJDLENBQXBCLENBSmdGLENBTWhGOzs7QUFDQSxNQUFJNkMsTUFBTSxJQUFJbEssZ0JBQUVpQixRQUFGLENBQVdpSixNQUFYLENBQWQsRUFBa0M7QUFDaEMsVUFBTTtBQUFFRyxNQUFBQTtBQUFGLFFBQVlILE1BQWxCO0FBQ0FELElBQUFBLFdBQVcsQ0FBQ3pFLE1BQVosQ0FBbUIwRSxNQUFuQixDQUEwQkksTUFBMUIsR0FBbUMsK0JBQW9CRCxLQUFwQixFQUEyQkwsTUFBM0IsQ0FBbkM7QUFDRDs7QUFFRCxNQUFJRSxNQUFNLElBQUlsSyxnQkFBRUMsUUFBRixDQUFXaUssTUFBWCxDQUFkLEVBQWtDO0FBQ2hDRCxJQUFBQSxXQUFXLENBQUN6RSxNQUFaLENBQW1CMEUsTUFBbkIsR0FBNEI7QUFDMUJJLE1BQUFBLE1BQU0sRUFBRUMsb0JBRGtCO0FBRTFCRixNQUFBQSxLQUFLLEVBQUUsRUFGbUI7QUFHMUJILE1BQUFBO0FBSDBCLEtBQTVCO0FBS0QsR0FsQitFLENBb0JoRjs7O0FBQ0EsTUFBSWxLLGdCQUFFd0ssT0FBRixDQUFVTCxZQUFWLE1BQTRCLEtBQWhDLEVBQXVDO0FBQ3JDRixJQUFBQSxXQUFXLENBQUN6RSxNQUFaLENBQW1CMkUsWUFBbkIsR0FBa0NBLFlBQVksQ0FBQy9FLEdBQWIsQ0FDL0JxRixXQUFELElBQStCO0FBQzdCLFVBQUl4SixRQUFRLENBQUN3SixXQUFELENBQVosRUFBMkI7QUFDekJBLFFBQUFBLFdBQVcsQ0FBQ0gsTUFBWixHQUFxQiwrQkFBb0JHLFdBQVcsQ0FBQ0osS0FBaEMsRUFBdUNMLE1BQXZDLENBQXJCO0FBQ0QsT0FGRCxNQUVPLElBQUloSyxnQkFBRUMsUUFBRixDQUFXd0ssV0FBWCxDQUFKLEVBQTZCO0FBQ2xDQSxRQUFBQSxXQUFXLEdBQUc7QUFDWkgsVUFBQUEsTUFBTSxFQUFFQyxvQkFESTtBQUVaRixVQUFBQSxLQUFLLEVBQUVJLFdBRks7QUFHWjVLLFVBQUFBLElBQUksRUFBRTRLO0FBSE0sU0FBZDtBQUtEOztBQUVELGFBQU9BLFdBQVA7QUFDRCxLQWIrQixDQUFsQztBQWVELEdBckMrRSxDQXVDaEY7OztBQUNBLE1BQUl6SyxnQkFBRXdLLE9BQUYsQ0FBVUosV0FBVixNQUEyQixLQUEvQixFQUFzQztBQUNwQ0gsSUFBQUEsV0FBVyxDQUFDekUsTUFBWixDQUFtQjRFLFdBQW5CLEdBQWlDQSxXQUFXLENBQUNoRixHQUFaLENBQWlCc0YsVUFBRCxJQUFzQjtBQUNyRUEsTUFBQUEsVUFBVSxDQUFDSixNQUFYLEdBQW9CLCtCQUFvQkksVUFBVSxDQUFDTCxLQUEvQixFQUFzQ0wsTUFBdEMsQ0FBcEI7QUFDQSxhQUFPVSxVQUFQO0FBQ0QsS0FIZ0MsQ0FBakM7QUFJRDs7QUFFRCxTQUFPVCxXQUFQO0FBQ0Q7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNPLFNBQVNVLFdBQVQsQ0FBcUJqQixXQUFyQixFQUEwQ2tCLE1BQTFDLEVBQXlFO0FBQzlFLE1BQUk1SyxnQkFBRXdLLE9BQUYsQ0FBVUksTUFBVixNQUFzQixLQUExQixFQUFpQztBQUMvQixXQUFPLHFCQUFlQSxNQUFmLENBQVA7QUFDRCxHQUg2RSxDQUs5RTs7O0FBQ0E1RixpQkFBTzZGLEtBQVAsQ0FBYTtBQUFFbkIsSUFBQUE7QUFBRixHQUFiLEVBQThCLGlDQUE5Qjs7QUFFQSxTQUFPLHFCQUFlLDhCQUFmLENBQVA7QUFDRDs7QUFFTSxTQUFTb0IsVUFBVCxDQUFvQkMsSUFBcEIsRUFBa0NDLEtBQWxDLEVBQXlEO0FBQzlELFNBQVEsR0FBRWhMLGdCQUFFaUwsVUFBRixDQUFhRixJQUFiLENBQW1CLElBQUdDLEtBQU0sRUFBdEM7QUFDRDtBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNPLFNBQVNFLHFCQUFULENBQStCckwsSUFBL0IsRUFBNEQ7QUFDakU7QUFDQTtBQUNBLFNBQU8saUJBQWlCcUksSUFBakIsQ0FBc0JySSxJQUF0QixJQUE4QkEsSUFBSSxDQUFDWSxLQUFMLENBQVcsZ0JBQVgsRUFBNkIsQ0FBN0IsQ0FBOUIsR0FBZ0V1RCxTQUF2RTtBQUNEOztBQUlEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTbUgsWUFBVCxDQUFzQmpCLE1BQXRCLEVBQWlEO0FBQ3RELE1BQUlrQixhQUFhLEdBQUc7QUFDbEJ2TCxJQUFBQSxJQUFJLEVBQUV3TCx1QkFEWTtBQUVsQmhCLElBQUFBLEtBQUssRUFBRSxFQUZXO0FBR2xCekksSUFBQUEsR0FBRyxFQUFFO0FBSGEsR0FBcEI7O0FBTUEsTUFBSTVCLGdCQUFFNEQsS0FBRixDQUFRc0csTUFBUixDQUFKLEVBQXFCO0FBQ25CLFdBQU9rQixhQUFQO0FBQ0Q7O0FBRUQsTUFBSXBMLGdCQUFFQyxRQUFGLENBQVdpSyxNQUFYLENBQUosRUFBd0I7QUFDdEJrQixJQUFBQSxhQUFhLG1DQUNSQSxhQURRO0FBRVh2TCxNQUFBQSxJQUFJLEVBQUVxSztBQUZLLE1BQWI7QUFJRDs7QUFFRCxNQUFJbEssZ0JBQUVpQixRQUFGLENBQVdpSixNQUFYLENBQUosRUFBd0I7QUFDdEJrQixJQUFBQSxhQUFhLG1DQUNSQSxhQURRLEdBRVBsQixNQUZPLENBQWI7QUFJRDs7QUFFRCxTQUFPa0IsYUFBUDtBQUNEO0FBRUQ7QUFDQTtBQUNBO0FBQ0E7OztBQUNPLFNBQVNFLGNBQVQsQ0FBd0JySSxHQUF4QixFQUE4QztBQUNuRCxTQUFPLGtCQUFrQmlGLElBQWxCLENBQXVCakYsR0FBdkIsQ0FBUDtBQUNEO0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ08sU0FBU3NJLEdBQVQsQ0FBYUMsR0FBYixFQUFrQkMsR0FBbEIsRUFBK0I7QUFDcEMsTUFBSUQsR0FBRyxDQUFDekssTUFBSixHQUFhMEssR0FBakIsRUFBc0I7QUFDcEIsV0FBT0QsR0FBRyxHQUFHLElBQUlFLE1BQUosQ0FBV0QsR0FBRyxHQUFHRCxHQUFHLENBQUN6SyxNQUFyQixDQUFiO0FBQ0Q7O0FBQ0QsU0FBT3lLLEdBQVA7QUFDRDtBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ08sU0FBU0csSUFBVCxDQUFjSCxHQUFkLEVBQTJCSSxPQUFPLEdBQUcsQ0FBckMsRUFBZ0Q7QUFDckQsU0FBUSxHQUFFSixHQUFHLENBQUNyRSxNQUFKLENBQVcsQ0FBWCxFQUFjeUUsT0FBZCxDQUF1QixNQUFLSixHQUFHLENBQUNyRSxNQUFKLENBQVcsQ0FBQ3lFLE9BQVosQ0FBcUIsRUFBM0Q7QUFDRDs7QUFFTSxTQUFTdEksZUFBVCxDQUF5Qm9HLFdBQXpCLEVBQThDO0FBQ25ELFNBQU9BLFdBQVcsQ0FBQzFILE9BQVosQ0FBb0IsS0FBcEIsRUFBMkIsS0FBM0IsQ0FBUDtBQUNEOztBQUVNLFNBQVM2SixhQUFULENBQXVCdkosUUFBdkIsRUFBMEM7QUFDL0MsU0FBT0MsTUFBTSxDQUFDa0QsSUFBUCxDQUFZbkQsUUFBWixFQUFzQnZCLE1BQXRCLEtBQWlDLENBQXhDO0FBQ0Q7O0FBRU0sU0FBUytLLGNBQVQsQ0FBd0JDLFdBQXhCLEVBQXFDQyxjQUFyQyxFQUE4RDtBQUNuRSxRQUFNQyxVQUFVLEdBQUcsT0FBT0QsY0FBUCxLQUEwQixXQUE3Qzs7QUFDQSxNQUFJLENBQUNDLFVBQUwsRUFBaUI7QUFDZixXQUFPLEtBQVA7QUFDRDs7QUFFRCxRQUFNQyxlQUFlLEdBQUczSixNQUFNLENBQUNrRCxJQUFQLENBQVlzRyxXQUFXLENBQUN6SixRQUF4QixFQUFrQzNCLFFBQWxDLENBQTJDcUwsY0FBM0MsQ0FBeEI7QUFDQSxTQUFPRSxlQUFQO0FBQ0Q7O0FBRU0sU0FBU0Msc0JBQVQsQ0FBZ0M5RSxPQUFoQyxFQUEyRDtBQUNoRSxRQUFNO0FBQUUvRSxJQUFBQTtBQUFGLE1BQWUrRSxPQUFyQjs7QUFDQSxPQUFLLE1BQU0xSCxPQUFYLElBQXNCMkMsUUFBdEIsRUFBZ0M7QUFDOUIsUUFBSUMsTUFBTSxDQUFDQyxTQUFQLENBQWlCQyxjQUFqQixDQUFnQ0MsSUFBaEMsQ0FBcUNKLFFBQVEsQ0FBQzNDLE9BQUQsQ0FBN0MsRUFBd0QsWUFBeEQsQ0FBSixFQUEyRTtBQUN6RSxhQUFPLElBQVA7QUFDRDtBQUNGOztBQUNELFNBQU8sS0FBUDtBQUNEOztBQUVNLFNBQVN5TSxXQUFULENBQXFCQyxTQUFyQixFQUErQztBQUNwRCxNQUFJO0FBQ0YsVUFBTUMsTUFBTSxHQUFHLElBQUlDLFFBQUosQ0FBUUYsU0FBUixDQUFmOztBQUNBLFFBQUksQ0FBQ3ZNLGNBQWMsQ0FBQ2EsUUFBZixDQUF3QjJMLE1BQU0sQ0FBQ3hGLFFBQVAsQ0FBZ0I5RSxPQUFoQixDQUF3QixHQUF4QixFQUE2QixFQUE3QixDQUF4QixDQUFMLEVBQWdFO0FBQzlELFlBQU0wRSxLQUFLLENBQUMsa0JBQUQsQ0FBWDtBQUNEOztBQUNELFdBQU8sSUFBUDtBQUNELEdBTkQsQ0FNRSxPQUFPM0MsR0FBUCxFQUFZO0FBQ1o7QUFDQSxXQUFPLEtBQVA7QUFDRDtBQUNGOztBQUVNLFNBQVN5SSxNQUFULENBQWdCNUssR0FBVyxHQUFHLEVBQTlCLEVBQWtDNkssT0FBTyxHQUFHLEVBQTVDLEVBQXlEO0FBQzlELFNBQU9DLG1CQUFVQyxLQUFWLENBQWdCL0ssR0FBaEI7QUFDTGdMLElBQUFBLFlBQVksRUFBRSxJQURUO0FBRUxDLElBQUFBLGtCQUFrQixFQUFFLEtBRmY7QUFHTEMsSUFBQUEsc0JBQXNCLEVBQUUsS0FIbkI7QUFJTDtBQUNBQyxJQUFBQSxZQUFZLEVBQUUsS0FMVDtBQU1MQyxJQUFBQSxXQUFXLEVBQUU7QUFOUixLQU9GUCxPQVBFLEVBQVA7QUFTRDs7QUFFTSxTQUFTekosWUFBVCxDQUFzQmlLLFVBQWtCLEdBQUcsRUFBM0MsRUFBK0M5SyxHQUEvQyxFQUE0RDtBQUNqRSxNQUFJaUssV0FBVyxDQUFDYyxPQUFPLENBQUNDLEdBQVIsQ0FBWUMsb0JBQWIsQ0FBZixFQUE2RDtBQUMzRCxVQUFNQyxNQUFNLEdBQUcsSUFBSWQsUUFBSixDQUFRZSxVQUFVLENBQUNMLFVBQUQsQ0FBbEIsRUFBZ0NDLE9BQU8sQ0FBQ0MsR0FBUixDQUFZQyxvQkFBNUMsRUFBNEVHLElBQTNGO0FBQ0FqTyxJQUFBQSxLQUFLLENBQUMsc0JBQUQsRUFBeUIrTixNQUF6QixDQUFMO0FBQ0EsV0FBT0EsTUFBUDtBQUNELEdBSkQsTUFJTyxJQUFJbEwsR0FBRyxDQUFDZ0IsR0FBSixDQUFRLE1BQVIsQ0FBSixFQUFxQjtBQUFBOztBQUMxQixVQUFNb0IsSUFBSSxHQUFHcEMsR0FBRyxDQUFDZ0IsR0FBSixDQUFRLE1BQVIsQ0FBYjs7QUFDQSxRQUFJLENBQUNxSixNQUFNLENBQUNqSSxJQUFELENBQVgsRUFBbUI7QUFDakIsWUFBTSxJQUFJbUMsS0FBSixDQUFVLGNBQVYsQ0FBTjtBQUNEOztBQUNELFVBQU04RyxXQUFXLDRCQUFHTixPQUFPLENBQUNDLEdBQVIsQ0FBWU0seUJBQWYseUVBQTRDQyxtQkFBUUMsZUFBckU7QUFDQSxVQUFNN0csUUFBUSxHQUFHRixjQUFjLENBQUN6RSxHQUFHLENBQUNnQixHQUFKLENBQVFxSyxXQUFXLENBQUNoTixXQUFaLEVBQVIsQ0FBRCxFQUFxQzJCLEdBQUcsQ0FBQzJFLFFBQXpDLENBQS9CO0FBQ0EsVUFBTThHLFdBQVcsR0FBR0MsY0FBYyxDQUFDL0csUUFBRCxFQUFXdkMsSUFBWCxFQUFpQjBJLFVBQWpCLENBQWxDO0FBQ0EzTixJQUFBQSxLQUFLLENBQUMsMEJBQUQsRUFBNkJzTyxXQUE3QixDQUFMO0FBQ0EsV0FBT0EsV0FBUDtBQUNELEdBVk0sTUFVQTtBQUNMLFdBQU8sR0FBUDtBQUNEO0FBQ0Y7QUFFRDtBQUNBO0FBQ0E7QUFDQTs7O0FBQ08sU0FBU0MsY0FBVCxDQUF3Qi9HLFFBQXhCLEVBQTBDdkMsSUFBMUMsRUFBd0R1SixNQUFjLEdBQUcsRUFBekUsRUFBcUY7QUFDMUZ4TyxFQUFBQSxLQUFLLENBQUMsc0JBQUQsRUFBeUJ3SCxRQUF6QixDQUFMO0FBQ0F4SCxFQUFBQSxLQUFLLENBQUMsa0JBQUQsRUFBcUJpRixJQUFyQixDQUFMO0FBQ0EsUUFBTXdKLFNBQVMsR0FBR1QsVUFBVSxDQUFDUSxNQUFELENBQTVCO0FBQ0F4TyxFQUFBQSxLQUFLLENBQUMsb0JBQUQsRUFBdUJ5TyxTQUF2QixDQUFMO0FBQ0EsUUFBTUMsVUFBVSxHQUFHLElBQUl6QixRQUFKLENBQVFlLFVBQVUsQ0FBQ1EsTUFBRCxDQUFsQixFQUE2QixHQUFFaEgsUUFBUyxNQUFLdkMsSUFBSyxFQUFsRCxDQUFuQjtBQUNBLFFBQU0rQixNQUFNLEdBQUcwSCxVQUFVLENBQUNULElBQTFCO0FBQ0FqTyxFQUFBQSxLQUFLLENBQUMsaUJBQUQsRUFBb0JnSCxNQUFwQixDQUFMO0FBQ0EsU0FBT0EsTUFBUDtBQUNEOztBQUVNLFNBQVNnSCxVQUFULENBQW9CUSxNQUFwQixFQUFtRDtBQUN4RCxNQUFJQSxNQUFNLEtBQUssRUFBWCxJQUFpQixPQUFPQSxNQUFQLEtBQWtCLFdBQW5DLElBQWtEQSxNQUFNLEtBQUssSUFBakUsRUFBdUU7QUFDckUsV0FBTyxFQUFQO0FBQ0QsR0FGRCxNQUVPLElBQUksQ0FBQ0EsTUFBTSxDQUFDcE4sVUFBUCxDQUFrQixHQUFsQixDQUFELElBQTJCb04sTUFBTSxDQUFDRyxRQUFQLENBQWdCLEdBQWhCLENBQS9CLEVBQXFEO0FBQzFELFdBQVEsSUFBR0gsTUFBTyxFQUFsQjtBQUNELEdBRk0sTUFFQSxJQUFJLENBQUNBLE1BQU0sQ0FBQ3BOLFVBQVAsQ0FBa0IsR0FBbEIsQ0FBRCxJQUEyQixDQUFDb04sTUFBTSxDQUFDRyxRQUFQLENBQWdCLEdBQWhCLENBQWhDLEVBQXNEO0FBQzNELFdBQVEsSUFBR0gsTUFBTyxHQUFsQjtBQUNELEdBRk0sTUFFQSxJQUFJQSxNQUFNLENBQUNwTixVQUFQLENBQWtCLEdBQWxCLEtBQTBCLENBQUNvTixNQUFNLENBQUNHLFFBQVAsQ0FBZ0IsR0FBaEIsQ0FBL0IsRUFBcUQ7QUFDMUQsV0FBUSxHQUFFSCxNQUFPLEdBQWpCO0FBQ0QsR0FGTSxNQUVBO0FBQ0wsV0FBT0EsTUFBUDtBQUNEO0FBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZnMgZnJvbSAnZnMnO1xuaW1wb3J0IGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IERlZmF1bHRVUkwsIHsgVVJMIH0gZnJvbSAndXJsJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgYnVpbGREZWJ1ZyBmcm9tICdkZWJ1Zyc7XG5pbXBvcnQgc2VtdmVyIGZyb20gJ3NlbXZlcic7XG5pbXBvcnQgWUFNTCBmcm9tICdqcy15YW1sJztcbmltcG9ydCB2YWxpZGF0b3IgZnJvbSAndmFsaWRhdG9yJztcbmltcG9ydCBtZW1vaXplZSBmcm9tICdtZW1vaXplZSc7XG5pbXBvcnQgc2FuaXRpenlSZWFkbWUgZnJvbSAnQHZlcmRhY2Npby9yZWFkbWUnO1xuXG5pbXBvcnQgeyBQYWNrYWdlLCBWZXJzaW9uLCBBdXRob3IgfSBmcm9tICdAdmVyZGFjY2lvL3R5cGVzJztcbmltcG9ydCB7IFJlcXVlc3QgfSBmcm9tICdleHByZXNzJztcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtbGVuXG5pbXBvcnQgeyBnZXRDb25mbGljdCwgZ2V0QmFkRGF0YSwgZ2V0QmFkUmVxdWVzdCwgZ2V0SW50ZXJuYWxFcnJvciwgZ2V0VW5hdXRob3JpemVkLCBnZXRGb3JiaWRkZW4sIGdldFNlcnZpY2VVbmF2YWlsYWJsZSwgZ2V0Tm90Rm91bmQsIGdldENvZGUgfSBmcm9tICdAdmVyZGFjY2lvL2NvbW1vbnMtYXBpJztcbmltcG9ydCB7IGdlbmVyYXRlR3JhdmF0YXJVcmwsIEdFTkVSSUNfQVZBVEFSIH0gZnJvbSAnLi4vdXRpbHMvdXNlcic7XG5pbXBvcnQgeyBTdHJpbmdWYWx1ZSwgQXV0aG9yQXZhdGFyIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgQVBQX0VSUk9SLCBERUZBVUxUX1BPUlQsIERFRkFVTFRfRE9NQUlOLCBERUZBVUxUX1BST1RPQ09MLCBIRUFERVJTLCBESVNUX1RBR1MsIERFRkFVTFRfVVNFUiB9IGZyb20gJy4vY29uc3RhbnRzJztcblxuaW1wb3J0IHsgbm9ybWFsaXplQ29udHJpYnV0b3JzIH0gZnJvbSAnLi9zdG9yYWdlLXV0aWxzJztcblxuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi9sb2dnZXInO1xuXG5jb25zdCBkZWJ1ZyA9IGJ1aWxkRGVidWcoJ3ZlcmRhY2NpbycpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXZhci1yZXF1aXJlc1xucmVxdWlyZSgncGtnaW5mbycpKG1vZHVsZSk7XG5jb25zdCBwa2dWZXJzaW9uID0gbW9kdWxlLmV4cG9ydHMudmVyc2lvbjtcbmNvbnN0IHBrZ05hbWUgPSBtb2R1bGUuZXhwb3J0cy5uYW1lO1xuY29uc3QgdmFsaWRQcm90b2NvbHMgPSBbJ2h0dHBzJywgJ2h0dHAnXTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFVzZXJBZ2VudCgpOiBzdHJpbmcge1xuICBhc3NlcnQoXy5pc1N0cmluZyhwa2dOYW1lKSk7XG4gIGFzc2VydChfLmlzU3RyaW5nKHBrZ1ZlcnNpb24pKTtcbiAgcmV0dXJuIGAke3BrZ05hbWV9LyR7cGtnVmVyc2lvbn1gO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udmVydFBheWxvYWRUb0Jhc2U2NChwYXlsb2FkOiBzdHJpbmcpOiBCdWZmZXIge1xuICByZXR1cm4gQnVmZmVyLmZyb20ocGF5bG9hZCwgJ2Jhc2U2NCcpO1xufVxuXG4vKipcbiAqIEZyb20gbm9ybWFsaXplLXBhY2thZ2UtZGF0YS9saWIvZml4ZXIuanNcbiAqIEBwYXJhbSB7Kn0gbmFtZSAgdGhlIHBhY2thZ2UgbmFtZVxuICogQHJldHVybiB7Qm9vbGVhbn0gd2hldGhlciBpcyB2YWxpZCBvciBub3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlTmFtZShuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgaWYgKF8uaXNTdHJpbmcobmFtZSkgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3Qgbm9ybWFsaXplZE5hbWU6IHN0cmluZyA9IG5hbWUudG9Mb3dlckNhc2UoKTtcblxuICAvKipcbiAgICogU29tZSBjb250ZXh0IGFib3V0IHRoZSBmaXJzdCByZWdleFxuICAgKiAtIG5wbSB1c2VkIHRvIGhhdmUgYSBkaWZmZXJlbnQgdGFyYmFsbCBuYW1pbmcgc3lzdGVtLlxuICAgKiBlZzogaHR0cDovL3JlZ2lzdHJ5Lm5wbWpzLmNvbS90aGlydHktdHdvXG4gICAqIGh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3RoaXJ0eS10d28vLS90aGlydHktdHdvQDAuMC4xLnRnelxuICAgKiBUaGUgZmlsZSBuYW1lIHRoaXJ0eS10d29AMC4wLjEudGd6LCB0aGUgdmVyc2lvbiBhbmQgdGhlIHBrZyBuYW1lIHdhcyBzZXBhcmF0ZWQgYnkgYW4gYXQgKEApXG4gICAqIHdoaWxlIG5vd2FkYXlzIHRoZSBuYW1pbmcgc3lzdGVtIGlzIGJhc2VkIGluIGRhc2hlc1xuICAgKiBodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy92ZXJkYWNjaW8vLS92ZXJkYWNjaW8tMS40LjAudGd6XG4gICAqXG4gICAqIG1vcmUgaW5mbyBoZXJlOiBodHRwczovL2dpdGh1Yi5jb20vcmxpZHdrYS9zaW5vcGlhL2lzc3Vlcy83NVxuICAgKi9cbiAgcmV0dXJuICEoXG4gICAgIW5vcm1hbGl6ZWROYW1lLm1hdGNoKC9eWy1hLXpBLVowLTlfLiF+KicoKUBdKyQvKSB8fFxuICAgIG5vcm1hbGl6ZWROYW1lLnN0YXJ0c1dpdGgoJy4nKSB8fCAvLyBcIi5iaW5cIiwgZXRjLlxuICAgIFsnbm9kZV9tb2R1bGVzJywgJ19fcHJvdG9fXycsICdmYXZpY29uLmljbyddLmluY2x1ZGVzKG5vcm1hbGl6ZWROYW1lKVxuICApO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlIGEgcGFja2FnZS5cbiAqIEByZXR1cm4ge0Jvb2xlYW59IHdoZXRoZXIgdGhlIHBhY2thZ2UgaXMgdmFsaWQgb3Igbm90XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVBhY2thZ2UobmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGNvbnN0IG5hbWVMaXN0ID0gbmFtZS5zcGxpdCgnLycsIDIpO1xuICBpZiAobmFtZUxpc3QubGVuZ3RoID09PSAxKSB7XG4gICAgLy8gbm9ybWFsIHBhY2thZ2VcbiAgICByZXR1cm4gdmFsaWRhdGVOYW1lKG5hbWVMaXN0WzBdKTtcbiAgfVxuICAvLyBzY29wZWQgcGFja2FnZVxuICByZXR1cm4gbmFtZUxpc3RbMF1bMF0gPT09ICdAJyAmJiB2YWxpZGF0ZU5hbWUobmFtZUxpc3RbMF0uc2xpY2UoMSkpICYmIHZhbGlkYXRlTmFtZShuYW1lTGlzdFsxXSk7XG59XG5cbi8qKlxuICogQ2hlY2sgd2hldGhlciBhbiBlbGVtZW50IGlzIGFuIE9iamVjdFxuICogQHBhcmFtIHsqfSBvYmogdGhlIGVsZW1lbnRcbiAqIEByZXR1cm4ge0Jvb2xlYW59XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc09iamVjdChvYmo6IGFueSk6IGJvb2xlYW4ge1xuICByZXR1cm4gXy5pc09iamVjdChvYmopICYmIF8uaXNOdWxsKG9iaikgPT09IGZhbHNlICYmIF8uaXNBcnJheShvYmopID09PSBmYWxzZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzT2JqZWN0T3JBcnJheShvYmo6IGFueSk6IGJvb2xlYW4ge1xuICByZXR1cm4gXy5pc09iamVjdChvYmopICYmIF8uaXNOdWxsKG9iaikgPT09IGZhbHNlO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlIHRoZSBwYWNrYWdlIG1ldGFkYXRhLCBhZGQgYWRkaXRpb25hbCBwcm9wZXJ0aWVzIHdoZXRoZXIgYXJlIG1pc3Npbmcgd2l0aGluXG4gKiB0aGUgbWV0YWRhdGEgcHJvcGVydGllcy5cbiAqIEBwYXJhbSB7Kn0gb2JqZWN0XG4gKiBAcGFyYW0geyp9IG5hbWVcbiAqIEByZXR1cm4ge09iamVjdH0gdGhlIG9iamVjdCB3aXRoIGFkZGl0aW9uYWwgcHJvcGVydGllcyBhcyBkaXN0LXRhZ3MgYWQgdmVyc2lvbnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlTWV0YWRhdGEob2JqZWN0OiBQYWNrYWdlLCBuYW1lOiBzdHJpbmcpOiBQYWNrYWdlIHtcbiAgYXNzZXJ0KGlzT2JqZWN0KG9iamVjdCksICdub3QgYSBqc29uIG9iamVjdCcpO1xuICBhc3NlcnQuc3RyaWN0RXF1YWwob2JqZWN0Lm5hbWUsIG5hbWUpO1xuXG4gIGlmICghaXNPYmplY3Qob2JqZWN0W0RJU1RfVEFHU10pKSB7XG4gICAgb2JqZWN0W0RJU1RfVEFHU10gPSB7fTtcbiAgfVxuXG4gIGlmICghaXNPYmplY3Qob2JqZWN0Wyd2ZXJzaW9ucyddKSkge1xuICAgIG9iamVjdFsndmVyc2lvbnMnXSA9IHt9O1xuICB9XG5cbiAgaWYgKCFpc09iamVjdChvYmplY3RbJ3RpbWUnXSkpIHtcbiAgICBvYmplY3RbJ3RpbWUnXSA9IHt9O1xuICB9XG5cbiAgcmV0dXJuIG9iamVjdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RUYXJiYWxsRnJvbVVybCh1cmw6IHN0cmluZyk6IHN0cmluZyB7XG4gIC8vIEB0cy1pZ25vcmVcbiAgcmV0dXJuIERlZmF1bHRVUkwucGFyc2UodXJsKS5wYXRobmFtZS5yZXBsYWNlKC9eLipcXC8vLCAnJyk7XG59XG5cbi8qKlxuICogSXRlcmF0ZSBhIHBhY2thZ2VzJ3MgdmVyc2lvbnMgYW5kIGZpbHRlciBlYWNoIG9yaWdpbmFsIHRhcmJhbGwgdXJsLlxuICogQHBhcmFtIHsqfSBwa2dcbiAqIEBwYXJhbSB7Kn0gcmVxXG4gKiBAcGFyYW0geyp9IGNvbmZpZ1xuICogQHJldHVybiB7U3RyaW5nfSBhIGZpbHRlcmVkIHBhY2thZ2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnREaXN0UmVtb3RlVG9Mb2NhbFRhcmJhbGxVcmxzKHBrZzogUGFja2FnZSwgcmVxOiBSZXF1ZXN0LCB1cmxQcmVmaXg6IHN0cmluZyB8IHZvaWQpOiBQYWNrYWdlIHtcbiAgZm9yIChjb25zdCB2ZXIgaW4gcGtnLnZlcnNpb25zKSB7XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwa2cudmVyc2lvbnMsIHZlcikpIHtcbiAgICAgIGNvbnN0IGRpc3ROYW1lID0gcGtnLnZlcnNpb25zW3Zlcl0uZGlzdDtcblxuICAgICAgaWYgKF8uaXNOdWxsKGRpc3ROYW1lKSA9PT0gZmFsc2UgJiYgXy5pc051bGwoZGlzdE5hbWUudGFyYmFsbCkgPT09IGZhbHNlKSB7XG4gICAgICAgIGRpc3ROYW1lLnRhcmJhbGwgPSBnZXRMb2NhbFJlZ2lzdHJ5VGFyYmFsbFVyaShkaXN0TmFtZS50YXJiYWxsLCBwa2cubmFtZSwgcmVxLCB1cmxQcmVmaXgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gcGtnO1xufVxuXG5jb25zdCBtZW1vaXplZGdldFB1YmxpY1VybCA9IG1lbW9pemVlKGdldFB1YmxpY1VybCk7XG5cbi8qKlxuICogRmlsdGVyIGEgdGFyYmFsbCB1cmwuXG4gKiBAcGFyYW0geyp9IHVyaVxuICogQHJldHVybiB7U3RyaW5nfSBhIHBhcnNlZCB1cmxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldExvY2FsUmVnaXN0cnlUYXJiYWxsVXJpKHVyaTogc3RyaW5nLCBwa2dOYW1lOiBzdHJpbmcsIHJlcTogUmVxdWVzdCwgdXJsUHJlZml4OiBzdHJpbmcgfCB2b2lkKTogc3RyaW5nIHtcbiAgY29uc3QgY3VycmVudEhvc3QgPSByZXEuZ2V0KCdob3N0Jyk7XG5cbiAgaWYgKCFjdXJyZW50SG9zdCkge1xuICAgIHJldHVybiB1cmk7XG4gIH1cbiAgY29uc3QgdGFyYmFsbE5hbWUgPSBleHRyYWN0VGFyYmFsbEZyb21VcmwodXJpKTtcbiAgY29uc3QgZG9tYWluUmVnaXN0cnkgPSBtZW1vaXplZGdldFB1YmxpY1VybCh1cmxQcmVmaXggfHwgJycsIHJlcSk7XG5cbiAgcmV0dXJuIGAke2RvbWFpblJlZ2lzdHJ5fSR7ZW5jb2RlU2NvcGVkVXJpKHBrZ05hbWUpfS8tLyR7dGFyYmFsbE5hbWV9YDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRhZ1ZlcnNpb24oZGF0YTogUGFja2FnZSwgdmVyc2lvbjogc3RyaW5nLCB0YWc6IFN0cmluZ1ZhbHVlKTogYm9vbGVhbiB7XG4gIGlmICh0YWcgJiYgZGF0YVtESVNUX1RBR1NdW3RhZ10gIT09IHZlcnNpb24gJiYgc2VtdmVyLnBhcnNlKHZlcnNpb24sIHRydWUpKSB7XG4gICAgLy8gdmFsaWQgdmVyc2lvbiAtIHN0b3JlXG4gICAgZGF0YVtESVNUX1RBR1NdW3RhZ10gPSB2ZXJzaW9uO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBHZXRzIHZlcnNpb24gZnJvbSBhIHBhY2thZ2Ugb2JqZWN0IHRha2luZyBpbnRvIGFjY291bnQgc2VtdmVyIHdlaXJkbmVzcy5cbiAqIEByZXR1cm4ge1N0cmluZ30gcmV0dXJuIHRoZSBzZW1hbnRpYyB2ZXJzaW9uIG9mIGEgcGFja2FnZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VmVyc2lvbihwa2c6IFBhY2thZ2UsIHZlcnNpb246IGFueSk6IFZlcnNpb24gfCB2b2lkIHtcbiAgLy8gdGhpcyBjb25kaXRpb24gbXVzdCBhbGxvdyBjYXN0XG4gIGlmIChfLmlzTmlsKHBrZy52ZXJzaW9uc1t2ZXJzaW9uXSkgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuIHBrZy52ZXJzaW9uc1t2ZXJzaW9uXTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgdmVyc2lvbiA9IHNlbXZlci5wYXJzZSh2ZXJzaW9uLCB0cnVlKTtcbiAgICBmb3IgKGNvbnN0IHZlcnNpb25JdGVtIGluIHBrZy52ZXJzaW9ucykge1xuICAgICAgLy8gJEZsb3dGaXhNZVxuICAgICAgaWYgKHZlcnNpb24uY29tcGFyZShzZW12ZXIucGFyc2UodmVyc2lvbkl0ZW0sIHRydWUpKSA9PT0gMCkge1xuICAgICAgICByZXR1cm4gcGtnLnZlcnNpb25zW3ZlcnNpb25JdGVtXTtcbiAgICAgIH1cbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuLyoqXG4gKiBQYXJzZSBhbiBpbnRlcm5ldCBhZGRyZXNzXG4gKiBBbGxvdzpcbiAtIGh0dHBzOmxvY2FsaG9zdDoxMjM0ICAgICAgICAtIHByb3RvY29sICsgaG9zdCArIHBvcnRcbiAtIGxvY2FsaG9zdDoxMjM0ICAgICAgICAgICAgICAtIGhvc3QgKyBwb3J0XG4gLSAxMjM0ICAgICAgICAgICAgICAgICAgICAgICAgLSBwb3J0XG4gLSBodHRwOjoxMjM0ICAgICAgICAgICAgICAgICAgLSBwcm90b2NvbCArIHBvcnRcbiAtIGh0dHBzOi8vbG9jYWxob3N0OjQ0My8gICAgICAtIGZ1bGwgdXJsICsgaHR0cHNcbiAtIGh0dHA6Ly9bOjoxXTo0NDMvICAgICAgICAgICAtIGlwdjZcbiAtIHVuaXg6L3RtcC9odHRwLnNvY2sgICAgICAgICAtIHVuaXggc29ja2V0c1xuIC0gaHR0cHM6Ly91bml4Oi90bXAvaHR0cC5zb2NrIC0gdW5peCBzb2NrZXRzIChodHRwcylcbiAqIEBwYXJhbSB7Kn0gdXJsQWRkcmVzcyB0aGUgaW50ZXJuZXQgYWRkcmVzcyBkZWZpbml0aW9uXG4gKiBAcmV0dXJuIHtPYmplY3R8TnVsbH0gbGl0ZXJhbCBvYmplY3QgdGhhdCByZXByZXNlbnQgdGhlIGFkZHJlc3MgcGFyc2VkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUFkZHJlc3ModXJsQWRkcmVzczogYW55KTogYW55IHtcbiAgLy9cbiAgLy8gVE9ETzogcmVmYWN0b3IgaXQgdG8gc29tZXRoaW5nIG1vcmUgcmVhc29uYWJsZT9cbiAgLy9cbiAgLy8gICAgICAgIHByb3RvY29sIDogIC8vICAgICAgKCAgaG9zdCAgKXwoICAgIGlwdjYgICAgICk6ICBwb3J0ICAvXG4gIGxldCB1cmxQYXR0ZXJuID0gL14oKGh0dHBzPyk6KFxcL1xcLyk/KT8oKChbXlxcLzpdKil8XFxbKFteXFxbXFxdXSspXFxdKTopPyhcXGQrKVxcLz8kLy5leGVjKHVybEFkZHJlc3MpO1xuXG4gIGlmICh1cmxQYXR0ZXJuKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHByb3RvOiB1cmxQYXR0ZXJuWzJdIHx8IERFRkFVTFRfUFJPVE9DT0wsXG4gICAgICBob3N0OiB1cmxQYXR0ZXJuWzZdIHx8IHVybFBhdHRlcm5bN10gfHwgREVGQVVMVF9ET01BSU4sXG4gICAgICBwb3J0OiB1cmxQYXR0ZXJuWzhdIHx8IERFRkFVTFRfUE9SVCxcbiAgICB9O1xuICB9XG5cbiAgdXJsUGF0dGVybiA9IC9eKChodHRwcz8pOihcXC9cXC8pPyk/dW5peDooLiopJC8uZXhlYyh1cmxBZGRyZXNzKTtcblxuICBpZiAodXJsUGF0dGVybikge1xuICAgIHJldHVybiB7XG4gICAgICBwcm90bzogdXJsUGF0dGVyblsyXSB8fCBERUZBVUxUX1BST1RPQ09MLFxuICAgICAgcGF0aDogdXJsUGF0dGVybls0XSxcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogRnVuY3Rpb24gZmlsdGVycyBvdXQgYmFkIHNlbXZlciB2ZXJzaW9ucyBhbmQgc29ydHMgdGhlIGFycmF5LlxuICogQHJldHVybiB7QXJyYXl9IHNvcnRlZCBBcnJheVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VtdmVyU29ydChsaXN0VmVyc2lvbnM6IHN0cmluZ1tdKTogc3RyaW5nW10ge1xuICByZXR1cm4gKFxuICAgIGxpc3RWZXJzaW9uc1xuICAgICAgLmZpbHRlcihmdW5jdGlvbiAoeCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoIXNlbXZlci5wYXJzZSh4LCB0cnVlKSkge1xuICAgICAgICAgIGxvZ2dlci53YXJuKHsgdmVyOiB4IH0sICdpZ25vcmluZyBiYWQgdmVyc2lvbiBAe3Zlcn0nKTtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9KVxuICAgICAgLy8gRklYTUU6IGl0IHNlZW1zIHRoZSBAdHlwZXMvc2VtdmVyIGRvIG5vdCBoYW5kbGUgYSBsZWdpdGltYXRlIG1ldGhvZCBuYW1lZCAnY29tcGFyZUxvb3NlJ1xuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgLnNvcnQoc2VtdmVyLmNvbXBhcmVMb29zZSlcbiAgICAgIC5tYXAoU3RyaW5nKVxuICApO1xufVxuXG4vKipcbiAqIEZsYXR0ZW4gYXJyYXlzIG9mIHRhZ3MuXG4gKiBAcGFyYW0geyp9IGRhdGFcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZURpc3RUYWdzKHBrZzogUGFja2FnZSk6IHZvaWQge1xuICBsZXQgc29ydGVkO1xuICBpZiAoIXBrZ1tESVNUX1RBR1NdLmxhdGVzdCkge1xuICAgIC8vIG92ZXJ3cml0ZSBsYXRlc3Qgd2l0aCBoaWdoZXN0IGtub3duIHZlcnNpb24gYmFzZWQgb24gc2VtdmVyIHNvcnRcbiAgICBzb3J0ZWQgPSBzZW12ZXJTb3J0KE9iamVjdC5rZXlzKHBrZy52ZXJzaW9ucykpO1xuICAgIGlmIChzb3J0ZWQgJiYgc29ydGVkLmxlbmd0aCkge1xuICAgICAgcGtnW0RJU1RfVEFHU10ubGF0ZXN0ID0gc29ydGVkLnBvcCgpO1xuICAgIH1cbiAgfVxuXG4gIGZvciAoY29uc3QgdGFnIGluIHBrZ1tESVNUX1RBR1NdKSB7XG4gICAgaWYgKF8uaXNBcnJheShwa2dbRElTVF9UQUdTXVt0YWddKSkge1xuICAgICAgaWYgKHBrZ1tESVNUX1RBR1NdW3RhZ10ubGVuZ3RoKSB7XG4gICAgICAgIC8vIHNvcnQgYXJyYXlcbiAgICAgICAgLy8gRklYTUU6IHRoaXMgaXMgY2xlYXJseSB3cm9uZywgd2UgbmVlZCB0byByZXNlYXJjaCB3aHkgdGhpcyBpcyBsaWtlIHRoaXMuXG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgc29ydGVkID0gc2VtdmVyU29ydChwa2dbRElTVF9UQUdTXVt0YWddKTtcbiAgICAgICAgaWYgKHNvcnRlZC5sZW5ndGgpIHtcbiAgICAgICAgICAvLyB1c2UgaGlnaGVzdCB2ZXJzaW9uIGJhc2VkIG9uIHNlbXZlciBzb3J0XG4gICAgICAgICAgcGtnW0RJU1RfVEFHU11bdGFnXSA9IHNvcnRlZC5wb3AoKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVsZXRlIHBrZ1tESVNUX1RBR1NdW3RhZ107XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChfLmlzU3RyaW5nKHBrZ1tESVNUX1RBR1NdW3RhZ10pKSB7XG4gICAgICBpZiAoIXNlbXZlci5wYXJzZShwa2dbRElTVF9UQUdTXVt0YWddLCB0cnVlKSkge1xuICAgICAgICAvLyBpZiB0aGUgdmVyc2lvbiBpcyBpbnZhbGlkLCBkZWxldGUgdGhlIGRpc3QtdGFnIGVudHJ5XG4gICAgICAgIGRlbGV0ZSBwa2dbRElTVF9UQUdTXVt0YWddO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5jb25zdCBwYXJzZUludGVydmFsVGFibGUgPSB7XG4gICcnOiAxMDAwLFxuICBtczogMSxcbiAgczogMTAwMCxcbiAgbTogNjAgKiAxMDAwLFxuICBoOiA2MCAqIDYwICogMTAwMCxcbiAgZDogODY0MDAwMDAsXG4gIHc6IDcgKiA4NjQwMDAwMCxcbiAgTTogMzAgKiA4NjQwMDAwMCxcbiAgeTogMzY1ICogODY0MDAwMDAsXG59O1xuXG4vKipcbiAqIFBhcnNlIGFuIGludGVybmFsIHN0cmluZyB0byBudW1iZXJcbiAqIEBwYXJhbSB7Kn0gaW50ZXJ2YWxcbiAqIEByZXR1cm4ge051bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlSW50ZXJ2YWwoaW50ZXJ2YWw6IGFueSk6IG51bWJlciB7XG4gIGlmICh0eXBlb2YgaW50ZXJ2YWwgPT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIGludGVydmFsICogMTAwMDtcbiAgfVxuICBsZXQgcmVzdWx0ID0gMDtcbiAgbGV0IGxhc3Rfc3VmZml4ID0gSW5maW5pdHk7XG4gIGludGVydmFsLnNwbGl0KC9cXHMrLykuZm9yRWFjaChmdW5jdGlvbiAoeCk6IHZvaWQge1xuICAgIGlmICgheCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBtID0geC5tYXRjaCgvXigoMHxbMS05XVswLTldKikoXFwuWzAtOV0rKT8pKG1zfHN8bXxofGR8d3xNfHl8KSQvKTtcbiAgICBpZiAoIW0gfHwgcGFyc2VJbnRlcnZhbFRhYmxlW21bNF1dID49IGxhc3Rfc3VmZml4IHx8IChtWzRdID09PSAnJyAmJiBsYXN0X3N1ZmZpeCAhPT0gSW5maW5pdHkpKSB7XG4gICAgICB0aHJvdyBFcnJvcignaW52YWxpZCBpbnRlcnZhbDogJyArIGludGVydmFsKTtcbiAgICB9XG4gICAgbGFzdF9zdWZmaXggPSBwYXJzZUludGVydmFsVGFibGVbbVs0XV07XG4gICAgcmVzdWx0ICs9IE51bWJlcihtWzFdKSAqIHBhcnNlSW50ZXJ2YWxUYWJsZVttWzRdXTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogRGV0ZWN0IHJ1bm5pbmcgcHJvdG9jb2wgKGh0dHAgb3IgaHR0cHMpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRXZWJQcm90b2NvbChoZWFkZXJQcm90b2NvbDogc3RyaW5nIHwgdm9pZCwgcHJvdG9jb2w6IHN0cmluZyk6IHN0cmluZyB7XG4gIGxldCByZXR1cm5Qcm90b2NvbDtcbiAgY29uc3QgWywgZGVmYXVsdFByb3RvY29sXSA9IHZhbGlkUHJvdG9jb2xzO1xuICAvLyBIQVByb3h5IHZhcmlhbnQgbWlnaHQgcmV0dXJuIGh0dHAsaHR0cCB3aXRoIFgtRm9yd2FyZGVkLVByb3RvXG4gIGlmICh0eXBlb2YgaGVhZGVyUHJvdG9jb2wgPT09ICdzdHJpbmcnICYmIGhlYWRlclByb3RvY29sICE9PSAnJykge1xuICAgIGRlYnVnKCdoZWFkZXIgcHJvdG9jb2w6ICVvJywgcHJvdG9jb2wpO1xuICAgIGNvbnN0IGNvbW1hSW5kZXggPSBoZWFkZXJQcm90b2NvbC5pbmRleE9mKCcsJyk7XG4gICAgcmV0dXJuUHJvdG9jb2wgPSBjb21tYUluZGV4ID4gMCA/IGhlYWRlclByb3RvY29sLnN1YnN0cigwLCBjb21tYUluZGV4KSA6IGhlYWRlclByb3RvY29sO1xuICB9IGVsc2Uge1xuICAgIGRlYnVnKCdyZXEgcHJvdG9jb2w6ICVvJywgaGVhZGVyUHJvdG9jb2wpO1xuICAgIHJldHVyblByb3RvY29sID0gcHJvdG9jb2w7XG4gIH1cblxuICByZXR1cm4gdmFsaWRQcm90b2NvbHMuaW5jbHVkZXMocmV0dXJuUHJvdG9jb2wpID8gcmV0dXJuUHJvdG9jb2wgOiBkZWZhdWx0UHJvdG9jb2w7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRMYXRlc3RWZXJzaW9uKHBrZ0luZm86IFBhY2thZ2UpOiBzdHJpbmcge1xuICByZXR1cm4gcGtnSW5mb1tESVNUX1RBR1NdLmxhdGVzdDtcbn1cblxuZXhwb3J0IGNvbnN0IEVycm9yQ29kZSA9IHtcbiAgZ2V0Q29uZmxpY3QsXG4gIGdldEJhZERhdGEsXG4gIGdldEJhZFJlcXVlc3QsXG4gIGdldEludGVybmFsRXJyb3IsXG4gIGdldFVuYXV0aG9yaXplZCxcbiAgZ2V0Rm9yYmlkZGVuLFxuICBnZXRTZXJ2aWNlVW5hdmFpbGFibGUsXG4gIGdldE5vdEZvdW5kLFxuICBnZXRDb2RlLFxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlQ29uZmlnRmlsZShjb25maWdQYXRoOiBzdHJpbmcpOiBhbnkge1xuICB0cnkge1xuICAgIGlmICgvXFwueWE/bWwkL2kudGVzdChjb25maWdQYXRoKSkge1xuICAgICAgcmV0dXJuIFlBTUwubG9hZChmcy5yZWFkRmlsZVN5bmMoY29uZmlnUGF0aCwgJ3V0Zi04JykpO1xuICAgIH1cbiAgICBkZWJ1ZygneWFtbCBwYXJzZWQnKTtcbiAgICByZXR1cm4gcmVxdWlyZShjb25maWdQYXRoKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGRlYnVnKCd5YW1sIHBhcnNlIGZhaWxlZCcpO1xuICAgIGlmIChlLmNvZGUgIT09ICdNT0RVTEVfTk9UX0ZPVU5EJykge1xuICAgICAgZS5tZXNzYWdlID0gQVBQX0VSUk9SLkNPTkZJR19OT1RfVkFMSUQ7XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKGUpO1xuICB9XG59XG5cbi8qKlxuICogQ2hlY2sgd2hldGhlciB0aGUgcGF0aCBhbHJlYWR5IGV4aXN0LlxuICogQHBhcmFtIHtTdHJpbmd9IHBhdGhcbiAqIEByZXR1cm4ge0Jvb2xlYW59XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb2xkZXJFeGlzdHMocGF0aDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHRyeSB7XG4gICAgY29uc3Qgc3RhdCA9IGZzLnN0YXRTeW5jKHBhdGgpO1xuICAgIHJldHVybiBzdGF0LmlzRGlyZWN0b3J5KCk7XG4gIH0gY2F0Y2ggKF8pIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuLyoqXG4gKiBDaGVjayB3aGV0aGVyIHRoZSBmaWxlIGFscmVhZHkgZXhpc3QuXG4gKiBAcGFyYW0ge1N0cmluZ30gcGF0aFxuICogQHJldHVybiB7Qm9vbGVhbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbGVFeGlzdHMocGF0aDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHRyeSB7XG4gICAgY29uc3Qgc3RhdCA9IGZzLnN0YXRTeW5jKHBhdGgpO1xuICAgIHJldHVybiBzdGF0LmlzRmlsZSgpO1xuICB9IGNhdGNoIChfKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzb3J0QnlOYW1lKHBhY2thZ2VzOiBhbnlbXSwgb3JkZXJBc2NlbmRpbmc6IGJvb2xlYW4gfCB2b2lkID0gdHJ1ZSk6IHN0cmluZ1tdIHtcbiAgcmV0dXJuIHBhY2thZ2VzLnNsaWNlKCkuc29ydChmdW5jdGlvbiAoYSwgYik6IG51bWJlciB7XG4gICAgY29uc3QgY29tcGFyYXRvck5hbWVzID0gYS5uYW1lLnRvTG93ZXJDYXNlKCkgPCBiLm5hbWUudG9Mb3dlckNhc2UoKTtcblxuICAgIHJldHVybiBvcmRlckFzY2VuZGluZyA/IChjb21wYXJhdG9yTmFtZXMgPyAtMSA6IDEpIDogY29tcGFyYXRvck5hbWVzID8gMSA6IC0xO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFkZFNjb3BlKHNjb3BlOiBzdHJpbmcsIHBhY2thZ2VOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gYEAke3Njb3BlfS8ke3BhY2thZ2VOYW1lfWA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWxldGVQcm9wZXJ0aWVzKHByb3BlcnRpZXNUb0RlbGV0ZTogc3RyaW5nW10sIG9iamVjdEl0ZW06IGFueSk6IGFueSB7XG4gIF8uZm9yRWFjaChwcm9wZXJ0aWVzVG9EZWxldGUsIChwcm9wZXJ0eSk6IGFueSA9PiB7XG4gICAgZGVsZXRlIG9iamVjdEl0ZW1bcHJvcGVydHldO1xuICB9KTtcblxuICByZXR1cm4gb2JqZWN0SXRlbTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFkZEdyYXZhdGFyU3VwcG9ydChwa2dJbmZvOiBQYWNrYWdlLCBvbmxpbmUgPSB0cnVlKTogQXV0aG9yQXZhdGFyIHtcbiAgY29uc3QgcGtnSW5mb0NvcHkgPSB7IC4uLnBrZ0luZm8gfSBhcyBhbnk7XG4gIGNvbnN0IGF1dGhvcjogYW55ID0gXy5nZXQocGtnSW5mbywgJ2xhdGVzdC5hdXRob3InLCBudWxsKSBhcyBhbnk7XG4gIGNvbnN0IGNvbnRyaWJ1dG9yczogQXV0aG9yQXZhdGFyW10gPSBub3JtYWxpemVDb250cmlidXRvcnMoXy5nZXQocGtnSW5mbywgJ2xhdGVzdC5jb250cmlidXRvcnMnLCBbXSkpO1xuICBjb25zdCBtYWludGFpbmVycyA9IF8uZ2V0KHBrZ0luZm8sICdsYXRlc3QubWFpbnRhaW5lcnMnLCBbXSk7XG5cbiAgLy8gZm9yIGF1dGhvci5cbiAgaWYgKGF1dGhvciAmJiBfLmlzT2JqZWN0KGF1dGhvcikpIHtcbiAgICBjb25zdCB7IGVtYWlsIH0gPSBhdXRob3IgYXMgQXV0aG9yO1xuICAgIHBrZ0luZm9Db3B5LmxhdGVzdC5hdXRob3IuYXZhdGFyID0gZ2VuZXJhdGVHcmF2YXRhclVybChlbWFpbCwgb25saW5lKTtcbiAgfVxuXG4gIGlmIChhdXRob3IgJiYgXy5pc1N0cmluZyhhdXRob3IpKSB7XG4gICAgcGtnSW5mb0NvcHkubGF0ZXN0LmF1dGhvciA9IHtcbiAgICAgIGF2YXRhcjogR0VORVJJQ19BVkFUQVIsXG4gICAgICBlbWFpbDogJycsXG4gICAgICBhdXRob3IsXG4gICAgfTtcbiAgfVxuXG4gIC8vIGZvciBjb250cmlidXRvcnNcbiAgaWYgKF8uaXNFbXB0eShjb250cmlidXRvcnMpID09PSBmYWxzZSkge1xuICAgIHBrZ0luZm9Db3B5LmxhdGVzdC5jb250cmlidXRvcnMgPSBjb250cmlidXRvcnMubWFwKFxuICAgICAgKGNvbnRyaWJ1dG9yKTogQXV0aG9yQXZhdGFyID0+IHtcbiAgICAgICAgaWYgKGlzT2JqZWN0KGNvbnRyaWJ1dG9yKSkge1xuICAgICAgICAgIGNvbnRyaWJ1dG9yLmF2YXRhciA9IGdlbmVyYXRlR3JhdmF0YXJVcmwoY29udHJpYnV0b3IuZW1haWwsIG9ubGluZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoXy5pc1N0cmluZyhjb250cmlidXRvcikpIHtcbiAgICAgICAgICBjb250cmlidXRvciA9IHtcbiAgICAgICAgICAgIGF2YXRhcjogR0VORVJJQ19BVkFUQVIsXG4gICAgICAgICAgICBlbWFpbDogY29udHJpYnV0b3IsXG4gICAgICAgICAgICBuYW1lOiBjb250cmlidXRvcixcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvbnRyaWJ1dG9yO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICAvLyBmb3IgbWFpbnRhaW5lcnNcbiAgaWYgKF8uaXNFbXB0eShtYWludGFpbmVycykgPT09IGZhbHNlKSB7XG4gICAgcGtnSW5mb0NvcHkubGF0ZXN0Lm1haW50YWluZXJzID0gbWFpbnRhaW5lcnMubWFwKChtYWludGFpbmVyKTogdm9pZCA9PiB7XG4gICAgICBtYWludGFpbmVyLmF2YXRhciA9IGdlbmVyYXRlR3JhdmF0YXJVcmwobWFpbnRhaW5lci5lbWFpbCwgb25saW5lKTtcbiAgICAgIHJldHVybiBtYWludGFpbmVyO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHBrZ0luZm9Db3B5O1xufVxuXG4vKipcbiAqIHBhcnNlIHBhY2thZ2UgcmVhZG1lIC0gbWFya2Rvd24vYXNjaWlcbiAqIEBwYXJhbSB7U3RyaW5nfSBwYWNrYWdlTmFtZSBuYW1lIG9mIHBhY2thZ2VcbiAqIEBwYXJhbSB7U3RyaW5nfSByZWFkbWUgcGFja2FnZSByZWFkbWVcbiAqIEByZXR1cm4ge1N0cmluZ30gY29udmVydGVkIGh0bWwgdGVtcGxhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUmVhZG1lKHBhY2thZ2VOYW1lOiBzdHJpbmcsIHJlYWRtZTogc3RyaW5nKTogc3RyaW5nIHwgdm9pZCB7XG4gIGlmIChfLmlzRW1wdHkocmVhZG1lKSA9PT0gZmFsc2UpIHtcbiAgICByZXR1cm4gc2FuaXRpenlSZWFkbWUocmVhZG1lKTtcbiAgfVxuXG4gIC8vIGxvZ3MgcmVhZG1lIG5vdCBmb3VuZCBlcnJvclxuICBsb2dnZXIuZXJyb3IoeyBwYWNrYWdlTmFtZSB9LCAnQHtwYWNrYWdlTmFtZX06IE5vIHJlYWRtZSBmb3VuZCcpO1xuXG4gIHJldHVybiBzYW5pdGl6eVJlYWRtZSgnRVJST1I6IE5vIFJFQURNRSBkYXRhIGZvdW5kIScpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRUb2tlbih0eXBlOiBzdHJpbmcsIHRva2VuOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gYCR7Xy5jYXBpdGFsaXplKHR5cGUpfSAke3Rva2VufWA7XG59XG5cbi8qKlxuICogcmV0dXJuIHBhY2thZ2UgdmVyc2lvbiBmcm9tIHRhcmJhbGwgbmFtZVxuICogQHBhcmFtIHtTdHJpbmd9IG5hbWVcbiAqIEByZXR1cm5zIHtTdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRWZXJzaW9uRnJvbVRhcmJhbGwobmFtZTogc3RyaW5nKTogc3RyaW5nIHwgdm9pZCB7XG4gIC8vIEZJWE1FOiB3ZSBrbm93IHRoZSByZWdleCBpcyB2YWxpZCwgYnV0IHdlIHNob3VsZCBpbXByb3ZlIHRoaXMgcGFydCBhcyB0cyBzdWdnZXN0XG4gIC8vIEB0cy1pZ25vcmVcbiAgcmV0dXJuIC8uKy0oXFxkLispXFwudGd6Ly50ZXN0KG5hbWUpID8gbmFtZS5tYXRjaCgvListKFxcZC4rKVxcLnRnei8pWzFdIDogdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgdHlwZSBBdXRob3JGb3JtYXQgPSBBdXRob3IgfCBzdHJpbmcgfCBudWxsIHwgb2JqZWN0IHwgdm9pZDtcblxuLyoqXG4gKiBGb3JtYXRzIGF1dGhvciBmaWVsZCBmb3Igd2VidWkuXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5ucG1qcy5jb20vZmlsZXMvcGFja2FnZS5qc29uI2F1dGhvclxuICogQHBhcmFtIHtzdHJpbmd8b2JqZWN0fHVuZGVmaW5lZH0gYXV0aG9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRBdXRob3IoYXV0aG9yOiBBdXRob3JGb3JtYXQpOiBhbnkge1xuICBsZXQgYXV0aG9yRGV0YWlscyA9IHtcbiAgICBuYW1lOiBERUZBVUxUX1VTRVIsXG4gICAgZW1haWw6ICcnLFxuICAgIHVybDogJycsXG4gIH07XG5cbiAgaWYgKF8uaXNOaWwoYXV0aG9yKSkge1xuICAgIHJldHVybiBhdXRob3JEZXRhaWxzO1xuICB9XG5cbiAgaWYgKF8uaXNTdHJpbmcoYXV0aG9yKSkge1xuICAgIGF1dGhvckRldGFpbHMgPSB7XG4gICAgICAuLi5hdXRob3JEZXRhaWxzLFxuICAgICAgbmFtZTogYXV0aG9yIGFzIHN0cmluZyxcbiAgICB9O1xuICB9XG5cbiAgaWYgKF8uaXNPYmplY3QoYXV0aG9yKSkge1xuICAgIGF1dGhvckRldGFpbHMgPSB7XG4gICAgICAuLi5hdXRob3JEZXRhaWxzLFxuICAgICAgLi4uKGF1dGhvciBhcyBBdXRob3IpLFxuICAgIH07XG4gIH1cblxuICByZXR1cm4gYXV0aG9yRGV0YWlscztcbn1cblxuLyoqXG4gKiBDaGVjayBpZiBVUkkgaXMgc3RhcnRpbmcgd2l0aCBcImh0dHA6Ly9cIiwgXCJodHRwczovL1wiIG9yIFwiLy9cIlxuICogQHBhcmFtIHtzdHJpbmd9IHVyaVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNIVFRQUHJvdG9jb2wodXJpOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIC9eKGh0dHBzPzopP1xcL1xcLy8udGVzdCh1cmkpO1xufVxuXG4vKipcbiAqIEFwcGx5IHdoaXRlc3BhY2VzIGJhc2VkIG9uIHRoZSBsZW5ndGhcbiAqIEBwYXJhbSB7Kn0gc3RyIHRoZSBsb2cgbWVzc2FnZVxuICogQHJldHVybiB7U3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFkKHN0ciwgbWF4KTogc3RyaW5nIHtcbiAgaWYgKHN0ci5sZW5ndGggPCBtYXgpIHtcbiAgICByZXR1cm4gc3RyICsgJyAnLnJlcGVhdChtYXggLSBzdHIubGVuZ3RoKTtcbiAgfVxuICByZXR1cm4gc3RyO1xufVxuXG4vKipcbiAqIHJldHVybiBhIG1hc3F1ZXJhZGUgc3RyaW5nIHdpdGggaXRzIGZpcnN0IGFuZCBsYXN0IHtjaGFyTnVtfSBhbmQgdGhyZWUgZG90cyBpbiBiZXR3ZWVuLlxuICogQHBhcmFtIHtTdHJpbmd9IHN0clxuICogQHBhcmFtIHtOdW1iZXJ9IGNoYXJOdW1cbiAqIEByZXR1cm5zIHtTdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYXNrKHN0cjogc3RyaW5nLCBjaGFyTnVtID0gMyk6IHN0cmluZyB7XG4gIHJldHVybiBgJHtzdHIuc3Vic3RyKDAsIGNoYXJOdW0pfS4uLiR7c3RyLnN1YnN0cigtY2hhck51bSl9YDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuY29kZVNjb3BlZFVyaShwYWNrYWdlTmFtZSk6IHN0cmluZyB7XG4gIHJldHVybiBwYWNrYWdlTmFtZS5yZXBsYWNlKC9cXC8vZywgJyUyZicpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzRGlmZk9uZUtleSh2ZXJzaW9ucyk6IGJvb2xlYW4ge1xuICByZXR1cm4gT2JqZWN0LmtleXModmVyc2lvbnMpLmxlbmd0aCAhPT0gMTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzVmVyc2lvblZhbGlkKHBhY2thZ2VNZXRhLCBwYWNrYWdlVmVyc2lvbik6IGJvb2xlYW4ge1xuICBjb25zdCBoYXNWZXJzaW9uID0gdHlwZW9mIHBhY2thZ2VWZXJzaW9uICE9PSAndW5kZWZpbmVkJztcbiAgaWYgKCFoYXNWZXJzaW9uKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgaGFzTWF0Y2hWZXJzaW9uID0gT2JqZWN0LmtleXMocGFja2FnZU1ldGEudmVyc2lvbnMpLmluY2x1ZGVzKHBhY2thZ2VWZXJzaW9uKTtcbiAgcmV0dXJuIGhhc01hdGNoVmVyc2lvbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUmVsYXRlZFRvRGVwcmVjYXRpb24ocGtnSW5mbzogUGFja2FnZSk6IGJvb2xlYW4ge1xuICBjb25zdCB7IHZlcnNpb25zIH0gPSBwa2dJbmZvO1xuICBmb3IgKGNvbnN0IHZlcnNpb24gaW4gdmVyc2lvbnMpIHtcbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHZlcnNpb25zW3ZlcnNpb25dLCAnZGVwcmVjYXRlZCcpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVVUkwocHVibGljVXJsOiBzdHJpbmcgfCB2b2lkKSB7XG4gIHRyeSB7XG4gICAgY29uc3QgcGFyc2VkID0gbmV3IFVSTChwdWJsaWNVcmwgYXMgc3RyaW5nKTtcbiAgICBpZiAoIXZhbGlkUHJvdG9jb2xzLmluY2x1ZGVzKHBhcnNlZC5wcm90b2NvbC5yZXBsYWNlKCc6JywgJycpKSkge1xuICAgICAgdGhyb3cgRXJyb3IoJ2ludmFsaWQgcHJvdG9jb2wnKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIC8vIFRPRE86IGFkZCBlcnJvciBsb2dnZXIgaGVyZVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNIb3N0KHVybDogc3RyaW5nID0gJycsIG9wdGlvbnMgPSB7fSk6IGJvb2xlYW4ge1xuICByZXR1cm4gdmFsaWRhdG9yLmlzVVJMKHVybCwge1xuICAgIHJlcXVpcmVfaG9zdDogdHJ1ZSxcbiAgICBhbGxvd190cmFpbGluZ19kb3Q6IGZhbHNlLFxuICAgIHJlcXVpcmVfdmFsaWRfcHJvdG9jb2w6IGZhbHNlLFxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICByZXF1aXJlX3BvcnQ6IGZhbHNlLFxuICAgIHJlcXVpcmVfdGxkOiBmYWxzZSxcbiAgICAuLi5vcHRpb25zLFxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFB1YmxpY1VybCh1cmxfcHJlZml4OiBzdHJpbmcgPSAnJywgcmVxKTogc3RyaW5nIHtcbiAgaWYgKHZhbGlkYXRlVVJMKHByb2Nlc3MuZW52LlZFUkRBQ0NJT19QVUJMSUNfVVJMIGFzIHN0cmluZykpIHtcbiAgICBjb25zdCBlbnZVUkwgPSBuZXcgVVJMKHdyYXBQcmVmaXgodXJsX3ByZWZpeCksIHByb2Nlc3MuZW52LlZFUkRBQ0NJT19QVUJMSUNfVVJMIGFzIHN0cmluZykuaHJlZjtcbiAgICBkZWJ1ZygncHVibGljIHVybCBieSBlbnYgJW8nLCBlbnZVUkwpO1xuICAgIHJldHVybiBlbnZVUkw7XG4gIH0gZWxzZSBpZiAocmVxLmdldCgnaG9zdCcpKSB7XG4gICAgY29uc3QgaG9zdCA9IHJlcS5nZXQoJ2hvc3QnKTtcbiAgICBpZiAoIWlzSG9zdChob3N0KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIGhvc3QnKTtcbiAgICB9XG4gICAgY29uc3QgcHJvdG9IZWFkZXIgPSBwcm9jZXNzLmVudi5WRVJEQUNDSU9fRk9SV0FSREVEX1BST1RPID8/IEhFQURFUlMuRk9SV0FSREVEX1BST1RPO1xuICAgIGNvbnN0IHByb3RvY29sID0gZ2V0V2ViUHJvdG9jb2wocmVxLmdldChwcm90b0hlYWRlci50b0xvd2VyQ2FzZSgpKSwgcmVxLnByb3RvY29sKTtcbiAgICBjb25zdCBjb21iaW5lZFVybCA9IGNvbWJpbmVCYXNlVXJsKHByb3RvY29sLCBob3N0LCB1cmxfcHJlZml4KTtcbiAgICBkZWJ1ZygncHVibGljIHVybCBieSByZXF1ZXN0ICVvJywgY29tYmluZWRVcmwpO1xuICAgIHJldHVybiBjb21iaW5lZFVybDtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gJy8nO1xuICB9XG59XG5cbi8qKlxuICogQ3JlYXRlIGJhc2UgdXJsIGZvciByZWdpc3RyeS5cbiAqIEByZXR1cm4ge1N0cmluZ30gYmFzZSByZWdpc3RyeSB1cmxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbWJpbmVCYXNlVXJsKHByb3RvY29sOiBzdHJpbmcsIGhvc3Q6IHN0cmluZywgcHJlZml4OiBzdHJpbmcgPSAnJyk6IHN0cmluZyB7XG4gIGRlYnVnKCdjb21iaW5lZCBwcm90b2NvbCAlbycsIHByb3RvY29sKTtcbiAgZGVidWcoJ2NvbWJpbmVkIGhvc3QgJW8nLCBob3N0KTtcbiAgY29uc3QgbmV3UHJlZml4ID0gd3JhcFByZWZpeChwcmVmaXgpO1xuICBkZWJ1ZygnY29tYmluZWQgcHJlZml4ICVvJywgbmV3UHJlZml4KTtcbiAgY29uc3QgZ3JvdXBlZFVSSSA9IG5ldyBVUkwod3JhcFByZWZpeChwcmVmaXgpLCBgJHtwcm90b2NvbH06Ly8ke2hvc3R9YCk7XG4gIGNvbnN0IHJlc3VsdCA9IGdyb3VwZWRVUkkuaHJlZjtcbiAgZGVidWcoJ2NvbWJpbmVkIHVybCAlbycsIHJlc3VsdCk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cmFwUHJlZml4KHByZWZpeDogc3RyaW5nIHwgdm9pZCk6IHN0cmluZyB7XG4gIGlmIChwcmVmaXggPT09ICcnIHx8IHR5cGVvZiBwcmVmaXggPT09ICd1bmRlZmluZWQnIHx8IHByZWZpeCA9PT0gbnVsbCkge1xuICAgIHJldHVybiAnJztcbiAgfSBlbHNlIGlmICghcHJlZml4LnN0YXJ0c1dpdGgoJy8nKSAmJiBwcmVmaXguZW5kc1dpdGgoJy8nKSkge1xuICAgIHJldHVybiBgLyR7cHJlZml4fWA7XG4gIH0gZWxzZSBpZiAoIXByZWZpeC5zdGFydHNXaXRoKCcvJykgJiYgIXByZWZpeC5lbmRzV2l0aCgnLycpKSB7XG4gICAgcmV0dXJuIGAvJHtwcmVmaXh9L2A7XG4gIH0gZWxzZSBpZiAocHJlZml4LnN0YXJ0c1dpdGgoJy8nKSAmJiAhcHJlZml4LmVuZHNXaXRoKCcvJykpIHtcbiAgICByZXR1cm4gYCR7cHJlZml4fS9gO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBwcmVmaXg7XG4gIH1cbn1cbiJdfQ==
|
|
804
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvdXRpbHMudHMiXSwibmFtZXMiOlsiZGVidWciLCJyZXF1aXJlIiwibW9kdWxlIiwicGtnVmVyc2lvbiIsImV4cG9ydHMiLCJ2ZXJzaW9uIiwicGtnTmFtZSIsIm5hbWUiLCJ2YWxpZFByb3RvY29scyIsImdldFVzZXJBZ2VudCIsImN1c3RvbVVzZXJBZ2VudCIsIl8iLCJpc1N0cmluZyIsImlzRW1wdHkiLCJjb252ZXJ0UGF5bG9hZFRvQmFzZTY0IiwicGF5bG9hZCIsIkJ1ZmZlciIsImZyb20iLCJ2YWxpZGF0ZU5hbWUiLCJub3JtYWxpemVkTmFtZSIsInRvTG93ZXJDYXNlIiwibWF0Y2giLCJzdGFydHNXaXRoIiwiaW5jbHVkZXMiLCJ2YWxpZGF0ZVBhY2thZ2UiLCJuYW1lTGlzdCIsInNwbGl0IiwibGVuZ3RoIiwic2xpY2UiLCJpc09iamVjdCIsIm9iaiIsImlzTnVsbCIsImlzQXJyYXkiLCJpc09iamVjdE9yQXJyYXkiLCJ2YWxpZGF0ZU1ldGFkYXRhIiwib2JqZWN0IiwiYXNzZXJ0Iiwic3RyaWN0RXF1YWwiLCJESVNUX1RBR1MiLCJleHRyYWN0VGFyYmFsbEZyb21VcmwiLCJ1cmwiLCJEZWZhdWx0VVJMIiwicGFyc2UiLCJwYXRobmFtZSIsInJlcGxhY2UiLCJjb252ZXJ0RGlzdFJlbW90ZVRvTG9jYWxUYXJiYWxsVXJscyIsInBrZyIsInJlcSIsInVybFByZWZpeCIsInZlciIsInZlcnNpb25zIiwiT2JqZWN0IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiZGlzdE5hbWUiLCJkaXN0IiwidGFyYmFsbCIsImdldExvY2FsUmVnaXN0cnlUYXJiYWxsVXJpIiwibWVtb2l6ZWRnZXRQdWJsaWNVcmwiLCJnZXRQdWJsaWNVcmwiLCJ1cmkiLCJjdXJyZW50SG9zdCIsImdldCIsInRhcmJhbGxOYW1lIiwiZG9tYWluUmVnaXN0cnkiLCJlbmNvZGVTY29wZWRVcmkiLCJ0YWdWZXJzaW9uIiwiZGF0YSIsInRhZyIsInNlbXZlciIsImdldFZlcnNpb24iLCJpc05pbCIsInZlcnNpb25JdGVtIiwiY29tcGFyZSIsImVyciIsInVuZGVmaW5lZCIsInBhcnNlQWRkcmVzcyIsInVybEFkZHJlc3MiLCJ1cmxQYXR0ZXJuIiwiZXhlYyIsInByb3RvIiwiREVGQVVMVF9QUk9UT0NPTCIsImhvc3QiLCJERUZBVUxUX0RPTUFJTiIsInBvcnQiLCJERUZBVUxUX1BPUlQiLCJwYXRoIiwic2VtdmVyU29ydCIsImxpc3RWZXJzaW9ucyIsImZpbHRlciIsIngiLCJsb2dnZXIiLCJ3YXJuIiwic29ydCIsImNvbXBhcmVMb29zZSIsIm1hcCIsIlN0cmluZyIsIm5vcm1hbGl6ZURpc3RUYWdzIiwic29ydGVkIiwibGF0ZXN0Iiwia2V5cyIsInBvcCIsInBhcnNlSW50ZXJ2YWxUYWJsZSIsIm1zIiwicyIsIm0iLCJoIiwiZCIsInciLCJNIiwieSIsInBhcnNlSW50ZXJ2YWwiLCJpbnRlcnZhbCIsInJlc3VsdCIsImxhc3Rfc3VmZml4IiwiSW5maW5pdHkiLCJmb3JFYWNoIiwiRXJyb3IiLCJOdW1iZXIiLCJnZXRXZWJQcm90b2NvbCIsImhlYWRlclByb3RvY29sIiwicHJvdG9jb2wiLCJyZXR1cm5Qcm90b2NvbCIsImRlZmF1bHRQcm90b2NvbCIsImNvbW1hSW5kZXgiLCJpbmRleE9mIiwic3Vic3RyIiwiZ2V0TGF0ZXN0VmVyc2lvbiIsInBrZ0luZm8iLCJFcnJvckNvZGUiLCJnZXRDb25mbGljdCIsImdldEJhZERhdGEiLCJnZXRCYWRSZXF1ZXN0IiwiZ2V0SW50ZXJuYWxFcnJvciIsImdldFVuYXV0aG9yaXplZCIsImdldEZvcmJpZGRlbiIsImdldFNlcnZpY2VVbmF2YWlsYWJsZSIsImdldE5vdEZvdW5kIiwiZ2V0Q29kZSIsInBhcnNlQ29uZmlnRmlsZSIsImNvbmZpZ1BhdGgiLCJ0ZXN0IiwiWUFNTCIsImxvYWQiLCJmcyIsInJlYWRGaWxlU3luYyIsImUiLCJjb2RlIiwibWVzc2FnZSIsIkFQUF9FUlJPUiIsIkNPTkZJR19OT1RfVkFMSUQiLCJmb2xkZXJFeGlzdHMiLCJzdGF0Iiwic3RhdFN5bmMiLCJpc0RpcmVjdG9yeSIsImZpbGVFeGlzdHMiLCJpc0ZpbGUiLCJzb3J0QnlOYW1lIiwicGFja2FnZXMiLCJvcmRlckFzY2VuZGluZyIsImEiLCJiIiwiY29tcGFyYXRvck5hbWVzIiwiYWRkU2NvcGUiLCJzY29wZSIsInBhY2thZ2VOYW1lIiwiZGVsZXRlUHJvcGVydGllcyIsInByb3BlcnRpZXNUb0RlbGV0ZSIsIm9iamVjdEl0ZW0iLCJwcm9wZXJ0eSIsImFkZEdyYXZhdGFyU3VwcG9ydCIsIm9ubGluZSIsInBrZ0luZm9Db3B5IiwiYXV0aG9yIiwiY29udHJpYnV0b3JzIiwibWFpbnRhaW5lcnMiLCJlbWFpbCIsImF2YXRhciIsIkdFTkVSSUNfQVZBVEFSIiwiY29udHJpYnV0b3IiLCJtYWludGFpbmVyIiwicGFyc2VSZWFkbWUiLCJyZWFkbWUiLCJvcHRpb25zIiwiZXJyb3IiLCJidWlsZFRva2VuIiwidHlwZSIsInRva2VuIiwiY2FwaXRhbGl6ZSIsImdldFZlcnNpb25Gcm9tVGFyYmFsbCIsImZvcm1hdEF1dGhvciIsImF1dGhvckRldGFpbHMiLCJERUZBVUxUX1VTRVIiLCJpc0hUVFBQcm90b2NvbCIsInBhZCIsInN0ciIsIm1heCIsInJlcGVhdCIsIm1hc2siLCJjaGFyTnVtIiwiaGFzRGlmZk9uZUtleSIsImlzVmVyc2lvblZhbGlkIiwicGFja2FnZU1ldGEiLCJwYWNrYWdlVmVyc2lvbiIsImhhc1ZlcnNpb24iLCJoYXNNYXRjaFZlcnNpb24iLCJpc1JlbGF0ZWRUb0RlcHJlY2F0aW9uIiwidmFsaWRhdGVVUkwiLCJwdWJsaWNVcmwiLCJwYXJzZWQiLCJVUkwiLCJpc0hvc3QiLCJ2YWxpZGF0b3IiLCJpc1VSTCIsInJlcXVpcmVfaG9zdCIsImFsbG93X3RyYWlsaW5nX2RvdCIsInJlcXVpcmVfdmFsaWRfcHJvdG9jb2wiLCJyZXF1aXJlX3BvcnQiLCJyZXF1aXJlX3RsZCIsInVybF9wcmVmaXgiLCJwcm9jZXNzIiwiZW52IiwiVkVSREFDQ0lPX1BVQkxJQ19VUkwiLCJlbnZVUkwiLCJ3cmFwUHJlZml4IiwiaHJlZiIsInByb3RvSGVhZGVyIiwiVkVSREFDQ0lPX0ZPUldBUkRFRF9QUk9UTyIsIkhFQURFUlMiLCJGT1JXQVJERURfUFJPVE8iLCJjb21iaW5lZFVybCIsImNvbWJpbmVCYXNlVXJsIiwicHJlZml4IiwibmV3UHJlZml4IiwiZ3JvdXBlZFVSSSIsImVuZHNXaXRoIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFLQTs7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7Ozs7Ozs7Ozs7Ozs7QUFFQSxNQUFNQSxLQUFLLEdBQUcsb0JBQVcsV0FBWCxDQUFkLEMsQ0FFQTtBQUNBOztBQUNBQyxPQUFPLENBQUMsU0FBRCxDQUFQLENBQW1CQyxNQUFuQjs7QUFDQSxNQUFNQyxVQUFVLEdBQUdELE1BQU0sQ0FBQ0UsT0FBUCxDQUFlQyxPQUFsQztBQUNBLE1BQU1DLE9BQU8sR0FBR0osTUFBTSxDQUFDRSxPQUFQLENBQWVHLElBQS9CO0FBQ0EsTUFBTUMsY0FBYyxHQUFHLENBQUMsT0FBRCxFQUFVLE1BQVYsQ0FBdkI7O0FBRU8sU0FBU0MsWUFBVCxDQUFzQkMsZUFBdEIsRUFBa0U7QUFDdkUsdUJBQU9DLGdCQUFFQyxRQUFGLENBQVdOLE9BQVgsQ0FBUDtBQUNBLHVCQUFPSyxnQkFBRUMsUUFBRixDQUFXVCxVQUFYLENBQVA7O0FBQ0EsTUFBSU8sZUFBZSxLQUFLLElBQXhCLEVBQThCO0FBQzVCLFdBQVEsR0FBRUosT0FBUSxJQUFHSCxVQUFXLEVBQWhDO0FBQ0QsR0FGRCxNQUVPLElBQUlRLGdCQUFFQyxRQUFGLENBQVdGLGVBQVgsS0FBK0JDLGdCQUFFRSxPQUFGLENBQVVILGVBQVYsTUFBK0IsS0FBbEUsRUFBeUU7QUFDOUUsV0FBT0Es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XG5pbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgRGVmYXVsdFVSTCwgeyBVUkwgfSBmcm9tICd1cmwnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBidWlsZERlYnVnIGZyb20gJ2RlYnVnJztcbmltcG9ydCBzZW12ZXIgZnJvbSAnc2VtdmVyJztcbmltcG9ydCBZQU1MIGZyb20gJ2pzLXlhbWwnO1xuaW1wb3J0IHZhbGlkYXRvciBmcm9tICd2YWxpZGF0b3InO1xuaW1wb3J0IG1lbW9pemVlIGZyb20gJ21lbW9pemVlJztcbmltcG9ydCBzYW5pdGl6eVJlYWRtZSBmcm9tICdAdmVyZGFjY2lvL3JlYWRtZSc7XG5cbmltcG9ydCB7IFBhY2thZ2UsIFZlcnNpb24sIEF1dGhvciB9IGZyb20gJ0B2ZXJkYWNjaW8vdHlwZXMnO1xuaW1wb3J0IHsgUmVxdWVzdCB9IGZyb20gJ2V4cHJlc3MnO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1sZW5cbmltcG9ydCB7IGdldENvbmZsaWN0LCBnZXRCYWREYXRhLCBnZXRCYWRSZXF1ZXN0LCBnZXRJbnRlcm5hbEVycm9yLCBnZXRVbmF1dGhvcml6ZWQsIGdldEZvcmJpZGRlbiwgZ2V0U2VydmljZVVuYXZhaWxhYmxlLCBnZXROb3RGb3VuZCwgZ2V0Q29kZSB9IGZyb20gJ0B2ZXJkYWNjaW8vY29tbW9ucy1hcGknO1xuaW1wb3J0IHsgZ2VuZXJhdGVHcmF2YXRhclVybCwgR0VORVJJQ19BVkFUQVIgfSBmcm9tICcuLi91dGlscy91c2VyJztcbmltcG9ydCB7IFN0cmluZ1ZhbHVlLCBBdXRob3JBdmF0YXIgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBBUFBfRVJST1IsIERFRkFVTFRfUE9SVCwgREVGQVVMVF9ET01BSU4sIERFRkFVTFRfUFJPVE9DT0wsIEhFQURFUlMsIERJU1RfVEFHUywgREVGQVVMVF9VU0VSIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuXG5pbXBvcnQgeyBub3JtYWxpemVDb250cmlidXRvcnMgfSBmcm9tICcuL3N0b3JhZ2UtdXRpbHMnO1xuXG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuL2xvZ2dlcic7XG5cbmNvbnN0IGRlYnVnID0gYnVpbGREZWJ1ZygndmVyZGFjY2lvJyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdmFyLXJlcXVpcmVzXG5yZXF1aXJlKCdwa2dpbmZvJykobW9kdWxlKTtcbmNvbnN0IHBrZ1ZlcnNpb24gPSBtb2R1bGUuZXhwb3J0cy52ZXJzaW9uO1xuY29uc3QgcGtnTmFtZSA9IG1vZHVsZS5leHBvcnRzLm5hbWU7XG5jb25zdCB2YWxpZFByb3RvY29scyA9IFsnaHR0cHMnLCAnaHR0cCddO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VXNlckFnZW50KGN1c3RvbVVzZXJBZ2VudD86IGJvb2xlYW4gfCBzdHJpbmcpOiBzdHJpbmcge1xuICBhc3NlcnQoXy5pc1N0cmluZyhwa2dOYW1lKSk7XG4gIGFzc2VydChfLmlzU3RyaW5nKHBrZ1ZlcnNpb24pKTtcbiAgaWYgKGN1c3RvbVVzZXJBZ2VudCA9PT0gdHJ1ZSkge1xuICAgIHJldHVybiBgJHtwa2dOYW1lfS8ke3BrZ1ZlcnNpb259YDtcbiAgfSBlbHNlIGlmIChfLmlzU3RyaW5nKGN1c3RvbVVzZXJBZ2VudCkgJiYgXy5pc0VtcHR5KGN1c3RvbVVzZXJBZ2VudCkgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuIGN1c3RvbVVzZXJBZ2VudDtcbiAgfSBlbHNlIGlmIChjdXN0b21Vc2VyQWdlbnQgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgcmV0dXJuIGAke3BrZ05hbWV9LyR7cGtnVmVyc2lvbn1gO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udmVydFBheWxvYWRUb0Jhc2U2NChwYXlsb2FkOiBzdHJpbmcpOiBCdWZmZXIge1xuICByZXR1cm4gQnVmZmVyLmZyb20ocGF5bG9hZCwgJ2Jhc2U2NCcpO1xufVxuXG4vKipcbiAqIEZyb20gbm9ybWFsaXplLXBhY2thZ2UtZGF0YS9saWIvZml4ZXIuanNcbiAqIEBwYXJhbSB7Kn0gbmFtZSAgdGhlIHBhY2thZ2UgbmFtZVxuICogQHJldHVybiB7Qm9vbGVhbn0gd2hldGhlciBpcyB2YWxpZCBvciBub3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlTmFtZShuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgaWYgKF8uaXNTdHJpbmcobmFtZSkgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3Qgbm9ybWFsaXplZE5hbWU6IHN0cmluZyA9IG5hbWUudG9Mb3dlckNhc2UoKTtcblxuICAvKipcbiAgICogU29tZSBjb250ZXh0IGFib3V0IHRoZSBmaXJzdCByZWdleFxuICAgKiAtIG5wbSB1c2VkIHRvIGhhdmUgYSBkaWZmZXJlbnQgdGFyYmFsbCBuYW1pbmcgc3lzdGVtLlxuICAgKiBlZzogaHR0cDovL3JlZ2lzdHJ5Lm5wbWpzLmNvbS90aGlydHktdHdvXG4gICAqIGh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3RoaXJ0eS10d28vLS90aGlydHktdHdvQDAuMC4xLnRnelxuICAgKiBUaGUgZmlsZSBuYW1lIHRoaXJ0eS10d29AMC4wLjEudGd6LCB0aGUgdmVyc2lvbiBhbmQgdGhlIHBrZyBuYW1lIHdhcyBzZXBhcmF0ZWQgYnkgYW4gYXQgKEApXG4gICAqIHdoaWxlIG5vd2FkYXlzIHRoZSBuYW1pbmcgc3lzdGVtIGlzIGJhc2VkIGluIGRhc2hlc1xuICAgKiBodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy92ZXJkYWNjaW8vLS92ZXJkYWNjaW8tMS40LjAudGd6XG4gICAqXG4gICAqIG1vcmUgaW5mbyBoZXJlOiBodHRwczovL2dpdGh1Yi5jb20vcmxpZHdrYS9zaW5vcGlhL2lzc3Vlcy83NVxuICAgKi9cbiAgcmV0dXJuICEoXG4gICAgIW5vcm1hbGl6ZWROYW1lLm1hdGNoKC9eWy1hLXpBLVowLTlfLiF+KicoKUBdKyQvKSB8fFxuICAgIG5vcm1hbGl6ZWROYW1lLnN0YXJ0c1dpdGgoJy4nKSB8fCAvLyBcIi5iaW5cIiwgZXRjLlxuICAgIFsnbm9kZV9tb2R1bGVzJywgJ19fcHJvdG9fXycsICdmYXZpY29uLmljbyddLmluY2x1ZGVzKG5vcm1hbGl6ZWROYW1lKVxuICApO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlIGEgcGFja2FnZS5cbiAqIEByZXR1cm4ge0Jvb2xlYW59IHdoZXRoZXIgdGhlIHBhY2thZ2UgaXMgdmFsaWQgb3Igbm90XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVBhY2thZ2UobmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGNvbnN0IG5hbWVMaXN0ID0gbmFtZS5zcGxpdCgnLycsIDIpO1xuICBpZiAobmFtZUxpc3QubGVuZ3RoID09PSAxKSB7XG4gICAgLy8gbm9ybWFsIHBhY2thZ2VcbiAgICByZXR1cm4gdmFsaWRhdGVOYW1lKG5hbWVMaXN0WzBdKTtcbiAgfVxuICAvLyBzY29wZWQgcGFja2FnZVxuICByZXR1cm4gbmFtZUxpc3RbMF1bMF0gPT09ICdAJyAmJiB2YWxpZGF0ZU5hbWUobmFtZUxpc3RbMF0uc2xpY2UoMSkpICYmIHZhbGlkYXRlTmFtZShuYW1lTGlzdFsxXSk7XG59XG5cbi8qKlxuICogQ2hlY2sgd2hldGhlciBhbiBlbGVtZW50IGlzIGFuIE9iamVjdFxuICogQHBhcmFtIHsqfSBvYmogdGhlIGVsZW1lbnRcbiAqIEByZXR1cm4ge0Jvb2xlYW59XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc09iamVjdChvYmo6IGFueSk6IGJvb2xlYW4ge1xuICByZXR1cm4gXy5pc09iamVjdChvYmopICYmIF8uaXNOdWxsKG9iaikgPT09IGZhbHNlICYmIF8uaXNBcnJheShvYmopID09PSBmYWxzZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzT2JqZWN0T3JBcnJheShvYmo6IGFueSk6IGJvb2xlYW4ge1xuICByZXR1cm4gXy5pc09iamVjdChvYmopICYmIF8uaXNOdWxsKG9iaikgPT09IGZhbHNlO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlIHRoZSBwYWNrYWdlIG1ldGFkYXRhLCBhZGQgYWRkaXRpb25hbCBwcm9wZXJ0aWVzIHdoZXRoZXIgYXJlIG1pc3Npbmcgd2l0aGluXG4gKiB0aGUgbWV0YWRhdGEgcHJvcGVydGllcy5cbiAqIEBwYXJhbSB7Kn0gb2JqZWN0XG4gKiBAcGFyYW0geyp9IG5hbWVcbiAqIEByZXR1cm4ge09iamVjdH0gdGhlIG9iamVjdCB3aXRoIGFkZGl0aW9uYWwgcHJvcGVydGllcyBhcyBkaXN0LXRhZ3MgYWQgdmVyc2lvbnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlTWV0YWRhdGEob2JqZWN0OiBQYWNrYWdlLCBuYW1lOiBzdHJpbmcpOiBQYWNrYWdlIHtcbiAgYXNzZXJ0KGlzT2JqZWN0KG9iamVjdCksICdub3QgYSBqc29uIG9iamVjdCcpO1xuICBhc3NlcnQuc3RyaWN0RXF1YWwob2JqZWN0Lm5hbWUsIG5hbWUpO1xuXG4gIGlmICghaXNPYmplY3Qob2JqZWN0W0RJU1RfVEFHU10pKSB7XG4gICAgb2JqZWN0W0RJU1RfVEFHU10gPSB7fTtcbiAgfVxuXG4gIGlmICghaXNPYmplY3Qob2JqZWN0Wyd2ZXJzaW9ucyddKSkge1xuICAgIG9iamVjdFsndmVyc2lvbnMnXSA9IHt9O1xuICB9XG5cbiAgaWYgKCFpc09iamVjdChvYmplY3RbJ3RpbWUnXSkpIHtcbiAgICBvYmplY3RbJ3RpbWUnXSA9IHt9O1xuICB9XG5cbiAgcmV0dXJuIG9iamVjdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RUYXJiYWxsRnJvbVVybCh1cmw6IHN0cmluZyk6IHN0cmluZyB7XG4gIC8vIEB0cy1pZ25vcmVcbiAgcmV0dXJuIERlZmF1bHRVUkwucGFyc2UodXJsKS5wYXRobmFtZS5yZXBsYWNlKC9eLipcXC8vLCAnJyk7XG59XG5cbi8qKlxuICogSXRlcmF0ZSBhIHBhY2thZ2VzJ3MgdmVyc2lvbnMgYW5kIGZpbHRlciBlYWNoIG9yaWdpbmFsIHRhcmJhbGwgdXJsLlxuICogQHBhcmFtIHsqfSBwa2dcbiAqIEBwYXJhbSB7Kn0gcmVxXG4gKiBAcGFyYW0geyp9IGNvbmZpZ1xuICogQHJldHVybiB7U3RyaW5nfSBhIGZpbHRlcmVkIHBhY2thZ2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnREaXN0UmVtb3RlVG9Mb2NhbFRhcmJhbGxVcmxzKHBrZzogUGFja2FnZSwgcmVxOiBSZXF1ZXN0LCB1cmxQcmVmaXg6IHN0cmluZyB8IHZvaWQpOiBQYWNrYWdlIHtcbiAgZm9yIChjb25zdCB2ZXIgaW4gcGtnLnZlcnNpb25zKSB7XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwa2cudmVyc2lvbnMsIHZlcikpIHtcbiAgICAgIGNvbnN0IGRpc3ROYW1lID0gcGtnLnZlcnNpb25zW3Zlcl0uZGlzdDtcblxuICAgICAgaWYgKF8uaXNOdWxsKGRpc3ROYW1lKSA9PT0gZmFsc2UgJiYgXy5pc051bGwoZGlzdE5hbWUudGFyYmFsbCkgPT09IGZhbHNlKSB7XG4gICAgICAgIGRpc3ROYW1lLnRhcmJhbGwgPSBnZXRMb2NhbFJlZ2lzdHJ5VGFyYmFsbFVyaShkaXN0TmFtZS50YXJiYWxsLCBwa2cubmFtZSwgcmVxLCB1cmxQcmVmaXgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gcGtnO1xufVxuXG5jb25zdCBtZW1vaXplZGdldFB1YmxpY1VybCA9IG1lbW9pemVlKGdldFB1YmxpY1VybCk7XG5cbi8qKlxuICogRmlsdGVyIGEgdGFyYmFsbCB1cmwuXG4gKiBAcGFyYW0geyp9IHVyaVxuICogQHJldHVybiB7U3RyaW5nfSBhIHBhcnNlZCB1cmxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldExvY2FsUmVnaXN0cnlUYXJiYWxsVXJpKHVyaTogc3RyaW5nLCBwa2dOYW1lOiBzdHJpbmcsIHJlcTogUmVxdWVzdCwgdXJsUHJlZml4OiBzdHJpbmcgfCB2b2lkKTogc3RyaW5nIHtcbiAgY29uc3QgY3VycmVudEhvc3QgPSByZXEuZ2V0KCdob3N0Jyk7XG5cbiAgaWYgKCFjdXJyZW50SG9zdCkge1xuICAgIHJldHVybiB1cmk7XG4gIH1cbiAgY29uc3QgdGFyYmFsbE5hbWUgPSBleHRyYWN0VGFyYmFsbEZyb21VcmwodXJpKTtcbiAgY29uc3QgZG9tYWluUmVnaXN0cnkgPSBtZW1vaXplZGdldFB1YmxpY1VybCh1cmxQcmVmaXggfHwgJycsIHJlcSk7XG5cbiAgcmV0dXJuIGAke2RvbWFpblJlZ2lzdHJ5fSR7ZW5jb2RlU2NvcGVkVXJpKHBrZ05hbWUpfS8tLyR7dGFyYmFsbE5hbWV9YDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRhZ1ZlcnNpb24oZGF0YTogUGFja2FnZSwgdmVyc2lvbjogc3RyaW5nLCB0YWc6IFN0cmluZ1ZhbHVlKTogYm9vbGVhbiB7XG4gIGlmICh0YWcgJiYgZGF0YVtESVNUX1RBR1NdW3RhZ10gIT09IHZlcnNpb24gJiYgc2VtdmVyLnBhcnNlKHZlcnNpb24sIHRydWUpKSB7XG4gICAgLy8gdmFsaWQgdmVyc2lvbiAtIHN0b3JlXG4gICAgZGF0YVtESVNUX1RBR1NdW3RhZ10gPSB2ZXJzaW9uO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBHZXRzIHZlcnNpb24gZnJvbSBhIHBhY2thZ2Ugb2JqZWN0IHRha2luZyBpbnRvIGFjY291bnQgc2VtdmVyIHdlaXJkbmVzcy5cbiAqIEByZXR1cm4ge1N0cmluZ30gcmV0dXJuIHRoZSBzZW1hbnRpYyB2ZXJzaW9uIG9mIGEgcGFja2FnZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VmVyc2lvbihwa2c6IFBhY2thZ2UsIHZlcnNpb246IGFueSk6IFZlcnNpb24gfCB2b2lkIHtcbiAgLy8gdGhpcyBjb25kaXRpb24gbXVzdCBhbGxvdyBjYXN0XG4gIGlmIChfLmlzTmlsKHBrZy52ZXJzaW9uc1t2ZXJzaW9uXSkgPT09IGZhbHNlKSB7XG4gICAgcmV0dXJuIHBrZy52ZXJzaW9uc1t2ZXJzaW9uXTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgdmVyc2lvbiA9IHNlbXZlci5wYXJzZSh2ZXJzaW9uLCB0cnVlKTtcbiAgICBmb3IgKGNvbnN0IHZlcnNpb25JdGVtIGluIHBrZy52ZXJzaW9ucykge1xuICAgICAgLy8gJEZsb3dGaXhNZVxuICAgICAgaWYgKHZlcnNpb24uY29tcGFyZShzZW12ZXIucGFyc2UodmVyc2lvbkl0ZW0sIHRydWUpKSA9PT0gMCkge1xuICAgICAgICByZXR1cm4gcGtnLnZlcnNpb25zW3ZlcnNpb25JdGVtXTtcbiAgICAgIH1cbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuLyoqXG4gKiBQYXJzZSBhbiBpbnRlcm5ldCBhZGRyZXNzXG4gKiBBbGxvdzpcbiAtIGh0dHBzOmxvY2FsaG9zdDoxMjM0ICAgICAgICAtIHByb3RvY29sICsgaG9zdCArIHBvcnRcbiAtIGxvY2FsaG9zdDoxMjM0ICAgICAgICAgICAgICAtIGhvc3QgKyBwb3J0XG4gLSAxMjM0ICAgICAgICAgICAgICAgICAgICAgICAgLSBwb3J0XG4gLSBodHRwOjoxMjM0ICAgICAgICAgICAgICAgICAgLSBwcm90b2NvbCArIHBvcnRcbiAtIGh0dHBzOi8vbG9jYWxob3N0OjQ0My8gICAgICAtIGZ1bGwgdXJsICsgaHR0cHNcbiAtIGh0dHA6Ly9bOjoxXTo0NDMvICAgICAgICAgICAtIGlwdjZcbiAtIHVuaXg6L3RtcC9odHRwLnNvY2sgICAgICAgICAtIHVuaXggc29ja2V0c1xuIC0gaHR0cHM6Ly91bml4Oi90bXAvaHR0cC5zb2NrIC0gdW5peCBzb2NrZXRzIChodHRwcylcbiAqIEBwYXJhbSB7Kn0gdXJsQWRkcmVzcyB0aGUgaW50ZXJuZXQgYWRkcmVzcyBkZWZpbml0aW9uXG4gKiBAcmV0dXJuIHtPYmplY3R8TnVsbH0gbGl0ZXJhbCBvYmplY3QgdGhhdCByZXByZXNlbnQgdGhlIGFkZHJlc3MgcGFyc2VkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUFkZHJlc3ModXJsQWRkcmVzczogYW55KTogYW55IHtcbiAgLy9cbiAgLy8gVE9ETzogcmVmYWN0b3IgaXQgdG8gc29tZXRoaW5nIG1vcmUgcmVhc29uYWJsZT9cbiAgLy9cbiAgLy8gICAgICAgIHByb3RvY29sIDogIC8vICAgICAgKCAgaG9zdCAgKXwoICAgIGlwdjYgICAgICk6ICBwb3J0ICAvXG4gIGxldCB1cmxQYXR0ZXJuID0gL14oKGh0dHBzPyk6KFxcL1xcLyk/KT8oKChbXlxcLzpdKil8XFxbKFteXFxbXFxdXSspXFxdKTopPyhcXGQrKVxcLz8kLy5leGVjKHVybEFkZHJlc3MpO1xuXG4gIGlmICh1cmxQYXR0ZXJuKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHByb3RvOiB1cmxQYXR0ZXJuWzJdIHx8IERFRkFVTFRfUFJPVE9DT0wsXG4gICAgICBob3N0OiB1cmxQYXR0ZXJuWzZdIHx8IHVybFBhdHRlcm5bN10gfHwgREVGQVVMVF9ET01BSU4sXG4gICAgICBwb3J0OiB1cmxQYXR0ZXJuWzhdIHx8IERFRkFVTFRfUE9SVCxcbiAgICB9O1xuICB9XG5cbiAgdXJsUGF0dGVybiA9IC9eKChodHRwcz8pOihcXC9cXC8pPyk/dW5peDooLiopJC8uZXhlYyh1cmxBZGRyZXNzKTtcblxuICBpZiAodXJsUGF0dGVybikge1xuICAgIHJldHVybiB7XG4gICAgICBwcm90bzogdXJsUGF0dGVyblsyXSB8fCBERUZBVUxUX1BST1RPQ09MLFxuICAgICAgcGF0aDogdXJsUGF0dGVybls0XSxcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogRnVuY3Rpb24gZmlsdGVycyBvdXQgYmFkIHNlbXZlciB2ZXJzaW9ucyBhbmQgc29ydHMgdGhlIGFycmF5LlxuICogQHJldHVybiB7QXJyYXl9IHNvcnRlZCBBcnJheVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VtdmVyU29ydChsaXN0VmVyc2lvbnM6IHN0cmluZ1tdKTogc3RyaW5nW10ge1xuICByZXR1cm4gKFxuICAgIGxpc3RWZXJzaW9uc1xuICAgICAgLmZpbHRlcihmdW5jdGlvbiAoeCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoIXNlbXZlci5wYXJzZSh4LCB0cnVlKSkge1xuICAgICAgICAgIGxvZ2dlci53YXJuKHsgdmVyOiB4IH0sICdpZ25vcmluZyBiYWQgdmVyc2lvbiBAe3Zlcn0nKTtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9KVxuICAgICAgLy8gRklYTUU6IGl0IHNlZW1zIHRoZSBAdHlwZXMvc2VtdmVyIGRvIG5vdCBoYW5kbGUgYSBsZWdpdGltYXRlIG1ldGhvZCBuYW1lZCAnY29tcGFyZUxvb3NlJ1xuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgLnNvcnQoc2VtdmVyLmNvbXBhcmVMb29zZSlcbiAgICAgIC5tYXAoU3RyaW5nKVxuICApO1xufVxuXG4vKipcbiAqIEZsYXR0ZW4gYXJyYXlzIG9mIHRhZ3MuXG4gKiBAcGFyYW0geyp9IGRhdGFcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZURpc3RUYWdzKHBrZzogUGFja2FnZSk6IHZvaWQge1xuICBsZXQgc29ydGVkO1xuICBpZiAoIXBrZ1tESVNUX1RBR1NdLmxhdGVzdCkge1xuICAgIC8vIG92ZXJ3cml0ZSBsYXRlc3Qgd2l0aCBoaWdoZXN0IGtub3duIHZlcnNpb24gYmFzZWQgb24gc2VtdmVyIHNvcnRcbiAgICBzb3J0ZWQgPSBzZW12ZXJTb3J0KE9iamVjdC5rZXlzKHBrZy52ZXJzaW9ucykpO1xuICAgIGlmIChzb3J0ZWQgJiYgc29ydGVkLmxlbmd0aCkge1xuICAgICAgcGtnW0RJU1RfVEFHU10ubGF0ZXN0ID0gc29ydGVkLnBvcCgpO1xuICAgIH1cbiAgfVxuXG4gIGZvciAoY29uc3QgdGFnIGluIHBrZ1tESVNUX1RBR1NdKSB7XG4gICAgaWYgKF8uaXNBcnJheShwa2dbRElTVF9UQUdTXVt0YWddKSkge1xuICAgICAgaWYgKHBrZ1tESVNUX1RBR1NdW3RhZ10ubGVuZ3RoKSB7XG4gICAgICAgIC8vIHNvcnQgYXJyYXlcbiAgICAgICAgLy8gRklYTUU6IHRoaXMgaXMgY2xlYXJseSB3cm9uZywgd2UgbmVlZCB0byByZXNlYXJjaCB3aHkgdGhpcyBpcyBsaWtlIHRoaXMuXG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgc29ydGVkID0gc2VtdmVyU29ydChwa2dbRElTVF9UQUdTXVt0YWddKTtcbiAgICAgICAgaWYgKHNvcnRlZC5sZW5ndGgpIHtcbiAgICAgICAgICAvLyB1c2UgaGlnaGVzdCB2ZXJzaW9uIGJhc2VkIG9uIHNlbXZlciBzb3J0XG4gICAgICAgICAgcGtnW0RJU1RfVEFHU11bdGFnXSA9IHNvcnRlZC5wb3AoKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVsZXRlIHBrZ1tESVNUX1RBR1NdW3RhZ107XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChfLmlzU3RyaW5nKHBrZ1tESVNUX1RBR1NdW3RhZ10pKSB7XG4gICAgICBpZiAoIXNlbXZlci5wYXJzZShwa2dbRElTVF9UQUdTXVt0YWddLCB0cnVlKSkge1xuICAgICAgICAvLyBpZiB0aGUgdmVyc2lvbiBpcyBpbnZhbGlkLCBkZWxldGUgdGhlIGRpc3QtdGFnIGVudHJ5XG4gICAgICAgIGRlbGV0ZSBwa2dbRElTVF9UQUdTXVt0YWddO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5jb25zdCBwYXJzZUludGVydmFsVGFibGUgPSB7XG4gICcnOiAxMDAwLFxuICBtczogMSxcbiAgczogMTAwMCxcbiAgbTogNjAgKiAxMDAwLFxuICBoOiA2MCAqIDYwICogMTAwMCxcbiAgZDogODY0MDAwMDAsXG4gIHc6IDcgKiA4NjQwMDAwMCxcbiAgTTogMzAgKiA4NjQwMDAwMCxcbiAgeTogMzY1ICogODY0MDAwMDAsXG59O1xuXG4vKipcbiAqIFBhcnNlIGFuIGludGVybmFsIHN0cmluZyB0byBudW1iZXJcbiAqIEBwYXJhbSB7Kn0gaW50ZXJ2YWxcbiAqIEByZXR1cm4ge051bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlSW50ZXJ2YWwoaW50ZXJ2YWw6IGFueSk6IG51bWJlciB7XG4gIGlmICh0eXBlb2YgaW50ZXJ2YWwgPT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIGludGVydmFsICogMTAwMDtcbiAgfVxuICBsZXQgcmVzdWx0ID0gMDtcbiAgbGV0IGxhc3Rfc3VmZml4ID0gSW5maW5pdHk7XG4gIGludGVydmFsLnNwbGl0KC9cXHMrLykuZm9yRWFjaChmdW5jdGlvbiAoeCk6IHZvaWQge1xuICAgIGlmICgheCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBtID0geC5tYXRjaCgvXigoMHxbMS05XVswLTldKikoXFwuWzAtOV0rKT8pKG1zfHN8bXxofGR8d3xNfHl8KSQvKTtcbiAgICBpZiAoIW0gfHwgcGFyc2VJbnRlcnZhbFRhYmxlW21bNF1dID49IGxhc3Rfc3VmZml4IHx8IChtWzRdID09PSAnJyAmJiBsYXN0X3N1ZmZpeCAhPT0gSW5maW5pdHkpKSB7XG4gICAgICB0aHJvdyBFcnJvcignaW52YWxpZCBpbnRlcnZhbDogJyArIGludGVydmFsKTtcbiAgICB9XG4gICAgbGFzdF9zdWZmaXggPSBwYXJzZUludGVydmFsVGFibGVbbVs0XV07XG4gICAgcmVzdWx0ICs9IE51bWJlcihtWzFdKSAqIHBhcnNlSW50ZXJ2YWxUYWJsZVttWzRdXTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogRGV0ZWN0IHJ1bm5pbmcgcHJvdG9jb2wgKGh0dHAgb3IgaHR0cHMpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRXZWJQcm90b2NvbChoZWFkZXJQcm90b2NvbDogc3RyaW5nIHwgdm9pZCwgcHJvdG9jb2w6IHN0cmluZyk6IHN0cmluZyB7XG4gIGxldCByZXR1cm5Qcm90b2NvbDtcbiAgY29uc3QgWywgZGVmYXVsdFByb3RvY29sXSA9IHZhbGlkUHJvdG9jb2xzO1xuICAvLyBIQVByb3h5IHZhcmlhbnQgbWlnaHQgcmV0dXJuIGh0dHAsaHR0cCB3aXRoIFgtRm9yd2FyZGVkLVByb3RvXG4gIGlmICh0eXBlb2YgaGVhZGVyUHJvdG9jb2wgPT09ICdzdHJpbmcnICYmIGhlYWRlclByb3RvY29sICE9PSAnJykge1xuICAgIGRlYnVnKCdoZWFkZXIgcHJvdG9jb2w6ICVvJywgcHJvdG9jb2wpO1xuICAgIGNvbnN0IGNvbW1hSW5kZXggPSBoZWFkZXJQcm90b2NvbC5pbmRleE9mKCcsJyk7XG4gICAgcmV0dXJuUHJvdG9jb2wgPSBjb21tYUluZGV4ID4gMCA/IGhlYWRlclByb3RvY29sLnN1YnN0cigwLCBjb21tYUluZGV4KSA6IGhlYWRlclByb3RvY29sO1xuICB9IGVsc2Uge1xuICAgIGRlYnVnKCdyZXEgcHJvdG9jb2w6ICVvJywgaGVhZGVyUHJvdG9jb2wpO1xuICAgIHJldHVyblByb3RvY29sID0gcHJvdG9jb2w7XG4gIH1cblxuICByZXR1cm4gdmFsaWRQcm90b2NvbHMuaW5jbHVkZXMocmV0dXJuUHJvdG9jb2wpID8gcmV0dXJuUHJvdG9jb2wgOiBkZWZhdWx0UHJvdG9jb2w7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRMYXRlc3RWZXJzaW9uKHBrZ0luZm86IFBhY2thZ2UpOiBzdHJpbmcge1xuICByZXR1cm4gcGtnSW5mb1tESVNUX1RBR1NdLmxhdGVzdDtcbn1cblxuZXhwb3J0IGNvbnN0IEVycm9yQ29kZSA9IHtcbiAgZ2V0Q29uZmxpY3QsXG4gIGdldEJhZERhdGEsXG4gIGdldEJhZFJlcXVlc3QsXG4gIGdldEludGVybmFsRXJyb3IsXG4gIGdldFVuYXV0aG9yaXplZCxcbiAgZ2V0Rm9yYmlkZGVuLFxuICBnZXRTZXJ2aWNlVW5hdmFpbGFibGUsXG4gIGdldE5vdEZvdW5kLFxuICBnZXRDb2RlLFxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlQ29uZmlnRmlsZShjb25maWdQYXRoOiBzdHJpbmcpOiBhbnkge1xuICB0cnkge1xuICAgIGlmICgvXFwueWE/bWwkL2kudGVzdChjb25maWdQYXRoKSkge1xuICAgICAgcmV0dXJuIFlBTUwubG9hZChmcy5yZWFkRmlsZVN5bmMoY29uZmlnUGF0aCwgJ3V0Zi04JykpO1xuICAgIH1cbiAgICBkZWJ1ZygneWFtbCBwYXJzZWQnKTtcbiAgICByZXR1cm4gcmVxdWlyZShjb25maWdQYXRoKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGRlYnVnKCd5YW1sIHBhcnNlIGZhaWxlZCcpO1xuICAgIGlmIChlLmNvZGUgIT09ICdNT0RVTEVfTk9UX0ZPVU5EJykge1xuICAgICAgZS5tZXNzYWdlID0gQVBQX0VSUk9SLkNPTkZJR19OT1RfVkFMSUQ7XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKGUpO1xuICB9XG59XG5cbi8qKlxuICogQ2hlY2sgd2hldGhlciB0aGUgcGF0aCBhbHJlYWR5IGV4aXN0LlxuICogQHBhcmFtIHtTdHJpbmd9IHBhdGhcbiAqIEByZXR1cm4ge0Jvb2xlYW59XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb2xkZXJFeGlzdHMocGF0aDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHRyeSB7XG4gICAgY29uc3Qgc3RhdCA9IGZzLnN0YXRTeW5jKHBhdGgpO1xuICAgIHJldHVybiBzdGF0LmlzRGlyZWN0b3J5KCk7XG4gIH0gY2F0Y2ggKF8pIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuLyoqXG4gKiBDaGVjayB3aGV0aGVyIHRoZSBmaWxlIGFscmVhZHkgZXhpc3QuXG4gKiBAcGFyYW0ge1N0cmluZ30gcGF0aFxuICogQHJldHVybiB7Qm9vbGVhbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbGVFeGlzdHMocGF0aDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHRyeSB7XG4gICAgY29uc3Qgc3RhdCA9IGZzLnN0YXRTeW5jKHBhdGgpO1xuICAgIHJldHVybiBzdGF0LmlzRmlsZSgpO1xuICB9IGNhdGNoIChfKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzb3J0QnlOYW1lKHBhY2thZ2VzOiBhbnlbXSwgb3JkZXJBc2NlbmRpbmc6IGJvb2xlYW4gfCB2b2lkID0gdHJ1ZSk6IHN0cmluZ1tdIHtcbiAgcmV0dXJuIHBhY2thZ2VzLnNsaWNlKCkuc29ydChmdW5jdGlvbiAoYSwgYik6IG51bWJlciB7XG4gICAgY29uc3QgY29tcGFyYXRvck5hbWVzID0gYS5uYW1lLnRvTG93ZXJDYXNlKCkgPCBiLm5hbWUudG9Mb3dlckNhc2UoKTtcblxuICAgIHJldHVybiBvcmRlckFzY2VuZGluZyA/IChjb21wYXJhdG9yTmFtZXMgPyAtMSA6IDEpIDogY29tcGFyYXRvck5hbWVzID8gMSA6IC0xO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFkZFNjb3BlKHNjb3BlOiBzdHJpbmcsIHBhY2thZ2VOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gYEAke3Njb3BlfS8ke3BhY2thZ2VOYW1lfWA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWxldGVQcm9wZXJ0aWVzKHByb3BlcnRpZXNUb0RlbGV0ZTogc3RyaW5nW10sIG9iamVjdEl0ZW06IGFueSk6IGFueSB7XG4gIF8uZm9yRWFjaChwcm9wZXJ0aWVzVG9EZWxldGUsIChwcm9wZXJ0eSk6IGFueSA9PiB7XG4gICAgZGVsZXRlIG9iamVjdEl0ZW1bcHJvcGVydHldO1xuICB9KTtcblxuICByZXR1cm4gb2JqZWN0SXRlbTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFkZEdyYXZhdGFyU3VwcG9ydChwa2dJbmZvOiBQYWNrYWdlLCBvbmxpbmUgPSB0cnVlKTogQXV0aG9yQXZhdGFyIHtcbiAgY29uc3QgcGtnSW5mb0NvcHkgPSB7IC4uLnBrZ0luZm8gfSBhcyBhbnk7XG4gIGNvbnN0IGF1dGhvcjogYW55ID0gXy5nZXQocGtnSW5mbywgJ2xhdGVzdC5hdXRob3InLCBudWxsKSBhcyBhbnk7XG4gIGNvbnN0IGNvbnRyaWJ1dG9yczogQXV0aG9yQXZhdGFyW10gPSBub3JtYWxpemVDb250cmlidXRvcnMoXy5nZXQocGtnSW5mbywgJ2xhdGVzdC5jb250cmlidXRvcnMnLCBbXSkpO1xuICBjb25zdCBtYWludGFpbmVycyA9IF8uZ2V0KHBrZ0luZm8sICdsYXRlc3QubWFpbnRhaW5lcnMnLCBbXSk7XG5cbiAgLy8gZm9yIGF1dGhvci5cbiAgaWYgKGF1dGhvciAmJiBfLmlzT2JqZWN0KGF1dGhvcikpIHtcbiAgICBjb25zdCB7IGVtYWlsIH0gPSBhdXRob3IgYXMgQXV0aG9yO1xuICAgIHBrZ0luZm9Db3B5LmxhdGVzdC5hdXRob3IuYXZhdGFyID0gZ2VuZXJhdGVHcmF2YXRhclVybChlbWFpbCwgb25saW5lKTtcbiAgfVxuXG4gIGlmIChhdXRob3IgJiYgXy5pc1N0cmluZyhhdXRob3IpKSB7XG4gICAgcGtnSW5mb0NvcHkubGF0ZXN0LmF1dGhvciA9IHtcbiAgICAgIGF2YXRhcjogR0VORVJJQ19BVkFUQVIsXG4gICAgICBlbWFpbDogJycsXG4gICAgICBhdXRob3IsXG4gICAgfTtcbiAgfVxuXG4gIC8vIGZvciBjb250cmlidXRvcnNcbiAgaWYgKF8uaXNFbXB0eShjb250cmlidXRvcnMpID09PSBmYWxzZSkge1xuICAgIHBrZ0luZm9Db3B5LmxhdGVzdC5jb250cmlidXRvcnMgPSBjb250cmlidXRvcnMubWFwKChjb250cmlidXRvcik6IEF1dGhvckF2YXRhciA9PiB7XG4gICAgICBpZiAoaXNPYmplY3QoY29udHJpYnV0b3IpKSB7XG4gICAgICAgIGNvbnRyaWJ1dG9yLmF2YXRhciA9IGdlbmVyYXRlR3JhdmF0YXJVcmwoY29udHJpYnV0b3IuZW1haWwsIG9ubGluZSk7XG4gICAgICB9IGVsc2UgaWYgKF8uaXNTdHJpbmcoY29udHJpYnV0b3IpKSB7XG4gICAgICAgIGNvbnRyaWJ1dG9yID0ge1xuICAgICAgICAgIGF2YXRhcjogR0VORVJJQ19BVkFUQVIsXG4gICAgICAgICAgZW1haWw6IGNvbnRyaWJ1dG9yLFxuICAgICAgICAgIG5hbWU6IGNvbnRyaWJ1dG9yLFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udHJpYnV0b3I7XG4gICAgfSk7XG4gIH1cblxuICAvLyBmb3IgbWFpbnRhaW5lcnNcbiAgaWYgKF8uaXNFbXB0eShtYWludGFpbmVycykgPT09IGZhbHNlKSB7XG4gICAgcGtnSW5mb0NvcHkubGF0ZXN0Lm1haW50YWluZXJzID0gbWFpbnRhaW5lcnMubWFwKChtYWludGFpbmVyKTogdm9pZCA9PiB7XG4gICAgICBtYWludGFpbmVyLmF2YXRhciA9IGdlbmVyYXRlR3JhdmF0YXJVcmwobWFpbnRhaW5lci5lbWFpbCwgb25saW5lKTtcbiAgICAgIHJldHVybiBtYWludGFpbmVyO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHBrZ0luZm9Db3B5O1xufVxuXG4vKipcbiAqIHBhcnNlIHBhY2thZ2UgcmVhZG1lIC0gbWFya2Rvd24vYXNjaWlcbiAqIEBwYXJhbSB7U3RyaW5nfSBwYWNrYWdlTmFtZSBuYW1lIG9mIHBhY2thZ2VcbiAqIEBwYXJhbSB7U3RyaW5nfSByZWFkbWUgcGFja2FnZSByZWFkbWVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIHNhbml0aXp5UmVhZG1lIG9wdGlvbnNcbiAqIEByZXR1cm4ge1N0cmluZ30gY29udmVydGVkIGh0bWwgdGVtcGxhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUmVhZG1lKHBhY2thZ2VOYW1lOiBzdHJpbmcsIHJlYWRtZTogc3RyaW5nLCBvcHRpb25zOiB7IHBhdGhuYW1lPzogc3RyaW5nIHwgdm9pZCB9ID0ge30pOiBzdHJpbmcgfCB2b2lkIHtcbiAgaWYgKF8uaXNFbXB0eShyZWFkbWUpID09PSBmYWxzZSkge1xuICAgIHJldHVybiBzYW5pdGl6eVJlYWRtZShyZWFkbWUsIG9wdGlvbnMpO1xuICB9XG5cbiAgLy8gbG9ncyByZWFkbWUgbm90IGZvdW5kIGVycm9yXG4gIGxvZ2dlci5lcnJvcih7IHBhY2thZ2VOYW1lIH0sICdAe3BhY2thZ2VOYW1lfTogTm8gcmVhZG1lIGZvdW5kJyk7XG5cbiAgcmV0dXJuIHNhbml0aXp5UmVhZG1lKCdFUlJPUjogTm8gUkVBRE1FIGRhdGEgZm91bmQhJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFRva2VuKHR5cGU6IHN0cmluZywgdG9rZW46IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBgJHtfLmNhcGl0YWxpemUodHlwZSl9ICR7dG9rZW59YDtcbn1cblxuLyoqXG4gKiByZXR1cm4gcGFja2FnZSB2ZXJzaW9uIGZyb20gdGFyYmFsbCBuYW1lXG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZVxuICogQHJldHVybnMge1N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFZlcnNpb25Gcm9tVGFyYmFsbChuYW1lOiBzdHJpbmcpOiBzdHJpbmcgfCB2b2lkIHtcbiAgLy8gRklYTUU6IHdlIGtub3cgdGhlIHJlZ2V4IGlzIHZhbGlkLCBidXQgd2Ugc2hvdWxkIGltcHJvdmUgdGhpcyBwYXJ0IGFzIHRzIHN1Z2dlc3RcbiAgLy8gQHRzLWlnbm9yZVxuICByZXR1cm4gLy4rLShcXGQuKylcXC50Z3ovLnRlc3QobmFtZSkgPyBuYW1lLm1hdGNoKC8uKy0oXFxkLispXFwudGd6LylbMV0gOiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCB0eXBlIEF1dGhvckZvcm1hdCA9IEF1dGhvciB8IHN0cmluZyB8IG51bGwgfCBvYmplY3QgfCB2b2lkO1xuXG4vKipcbiAqIEZvcm1hdHMgYXV0aG9yIGZpZWxkIGZvciB3ZWJ1aS5cbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLm5wbWpzLmNvbS9maWxlcy9wYWNrYWdlLmpzb24jYXV0aG9yXG4gKiBAcGFyYW0ge3N0cmluZ3xvYmplY3R8dW5kZWZpbmVkfSBhdXRob3JcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdEF1dGhvcihhdXRob3I6IEF1dGhvckZvcm1hdCk6IGFueSB7XG4gIGxldCBhdXRob3JEZXRhaWxzID0ge1xuICAgIG5hbWU6IERFRkFVTFRfVVNFUixcbiAgICBlbWFpbDogJycsXG4gICAgdXJsOiAnJyxcbiAgfTtcblxuICBpZiAoXy5pc05pbChhdXRob3IpKSB7XG4gICAgcmV0dXJuIGF1dGhvckRldGFpbHM7XG4gIH1cblxuICBpZiAoXy5pc1N0cmluZyhhdXRob3IpKSB7XG4gICAgYXV0aG9yRGV0YWlscyA9IHtcbiAgICAgIC4uLmF1dGhvckRldGFpbHMsXG4gICAgICBuYW1lOiBhdXRob3IgYXMgc3RyaW5nLFxuICAgIH07XG4gIH1cblxuICBpZiAoXy5pc09iamVjdChhdXRob3IpKSB7XG4gICAgYXV0aG9yRGV0YWlscyA9IHtcbiAgICAgIC4uLmF1dGhvckRldGFpbHMsXG4gICAgICAuLi4oYXV0aG9yIGFzIEF1dGhvciksXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBhdXRob3JEZXRhaWxzO1xufVxuXG4vKipcbiAqIENoZWNrIGlmIFVSSSBpcyBzdGFydGluZyB3aXRoIFwiaHR0cDovL1wiLCBcImh0dHBzOi8vXCIgb3IgXCIvL1wiXG4gKiBAcGFyYW0ge3N0cmluZ30gdXJpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0hUVFBQcm90b2NvbCh1cmk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gL14oaHR0cHM/Oik/XFwvXFwvLy50ZXN0KHVyaSk7XG59XG5cbi8qKlxuICogQXBwbHkgd2hpdGVzcGFjZXMgYmFzZWQgb24gdGhlIGxlbmd0aFxuICogQHBhcmFtIHsqfSBzdHIgdGhlIGxvZyBtZXNzYWdlXG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYWQoc3RyLCBtYXgpOiBzdHJpbmcge1xuICBpZiAoc3RyLmxlbmd0aCA8IG1heCkge1xuICAgIHJldHVybiBzdHIgKyAnICcucmVwZWF0KG1heCAtIHN0ci5sZW5ndGgpO1xuICB9XG4gIHJldHVybiBzdHI7XG59XG5cbi8qKlxuICogcmV0dXJuIGEgbWFzcXVlcmFkZSBzdHJpbmcgd2l0aCBpdHMgZmlyc3QgYW5kIGxhc3Qge2NoYXJOdW19IGFuZCB0aHJlZSBkb3RzIGluIGJldHdlZW4uXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyXG4gKiBAcGFyYW0ge051bWJlcn0gY2hhck51bVxuICogQHJldHVybnMge1N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1hc2soc3RyOiBzdHJpbmcsIGNoYXJOdW0gPSAzKTogc3RyaW5nIHtcbiAgcmV0dXJuIGAke3N0ci5zdWJzdHIoMCwgY2hhck51bSl9Li4uJHtzdHIuc3Vic3RyKC1jaGFyTnVtKX1gO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5jb2RlU2NvcGVkVXJpKHBhY2thZ2VOYW1lKTogc3RyaW5nIHtcbiAgcmV0dXJuIHBhY2thZ2VOYW1lLnJlcGxhY2UoL1xcLy9nLCAnJTJmJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNEaWZmT25lS2V5KHZlcnNpb25zKTogYm9vbGVhbiB7XG4gIHJldHVybiBPYmplY3Qua2V5cyh2ZXJzaW9ucykubGVuZ3RoICE9PSAxO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNWZXJzaW9uVmFsaWQocGFja2FnZU1ldGEsIHBhY2thZ2VWZXJzaW9uKTogYm9vbGVhbiB7XG4gIGNvbnN0IGhhc1ZlcnNpb24gPSB0eXBlb2YgcGFja2FnZVZlcnNpb24gIT09ICd1bmRlZmluZWQnO1xuICBpZiAoIWhhc1ZlcnNpb24pIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBoYXNNYXRjaFZlcnNpb24gPSBPYmplY3Qua2V5cyhwYWNrYWdlTWV0YS52ZXJzaW9ucykuaW5jbHVkZXMocGFja2FnZVZlcnNpb24pO1xuICByZXR1cm4gaGFzTWF0Y2hWZXJzaW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNSZWxhdGVkVG9EZXByZWNhdGlvbihwa2dJbmZvOiBQYWNrYWdlKTogYm9vbGVhbiB7XG4gIGNvbnN0IHsgdmVyc2lvbnMgfSA9IHBrZ0luZm87XG4gIGZvciAoY29uc3QgdmVyc2lvbiBpbiB2ZXJzaW9ucykge1xuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodmVyc2lvbnNbdmVyc2lvbl0sICdkZXByZWNhdGVkJykpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVVSTChwdWJsaWNVcmw6IHN0cmluZyB8IHZvaWQpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBwYXJzZWQgPSBuZXcgVVJMKHB1YmxpY1VybCBhcyBzdHJpbmcpO1xuICAgIGlmICghdmFsaWRQcm90b2NvbHMuaW5jbHVkZXMocGFyc2VkLnByb3RvY29sLnJlcGxhY2UoJzonLCAnJykpKSB7XG4gICAgICB0aHJvdyBFcnJvcignaW52YWxpZCBwcm90b2NvbCcpO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgLy8gVE9ETzogYWRkIGVycm9yIGxvZ2dlciBoZXJlXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0hvc3QodXJsOiBzdHJpbmcgPSAnJywgb3B0aW9ucyA9IHt9KTogYm9vbGVhbiB7XG4gIHJldHVybiB2YWxpZGF0b3IuaXNVUkwodXJsLCB7XG4gICAgcmVxdWlyZV9ob3N0OiB0cnVlLFxuICAgIGFsbG93X3RyYWlsaW5nX2RvdDogZmFsc2UsXG4gICAgcmVxdWlyZV92YWxpZF9wcm90b2NvbDogZmFsc2UsXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHJlcXVpcmVfcG9ydDogZmFsc2UsXG4gICAgcmVxdWlyZV90bGQ6IGZhbHNlLFxuICAgIC4uLm9wdGlvbnMsXG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UHVibGljVXJsKHVybF9wcmVmaXg6IHN0cmluZyA9ICcnLCByZXEpOiBzdHJpbmcge1xuICBpZiAodmFsaWRhdGVVUkwocHJvY2Vzcy5lbnYuVkVSREFDQ0lPX1BVQkxJQ19VUkwgYXMgc3RyaW5nKSkge1xuICAgIGNvbnN0IGVudlVSTCA9IG5ldyBVUkwod3JhcFByZWZpeCh1cmxfcHJlZml4KSwgcHJvY2Vzcy5lbnYuVkVSREFDQ0lPX1BVQkxJQ19VUkwgYXMgc3RyaW5nKS5ocmVmO1xuICAgIGRlYnVnKCdwdWJsaWMgdXJsIGJ5IGVudiAlbycsIGVudlVSTCk7XG4gICAgcmV0dXJuIGVudlVSTDtcbiAgfSBlbHNlIGlmIChyZXEuZ2V0KCdob3N0JykpIHtcbiAgICBjb25zdCBob3N0ID0gcmVxLmdldCgnaG9zdCcpO1xuICAgIGlmICghaXNIb3N0KGhvc3QpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgaG9zdCcpO1xuICAgIH1cbiAgICBjb25zdCBwcm90b0hlYWRlciA9IHByb2Nlc3MuZW52LlZFUkRBQ0NJT19GT1JXQVJERURfUFJPVE8gPz8gSEVBREVSUy5GT1JXQVJERURfUFJPVE87XG4gICAgY29uc3QgcHJvdG9jb2wgPSBnZXRXZWJQcm90b2NvbChyZXEuZ2V0KHByb3RvSGVhZGVyLnRvTG93ZXJDYXNlKCkpLCByZXEucHJvdG9jb2wpO1xuICAgIGNvbnN0IGNvbWJpbmVkVXJsID0gY29tYmluZUJhc2VVcmwocHJvdG9jb2wsIGhvc3QsIHVybF9wcmVmaXgpO1xuICAgIGRlYnVnKCdwdWJsaWMgdXJsIGJ5IHJlcXVlc3QgJW8nLCBjb21iaW5lZFVybCk7XG4gICAgcmV0dXJuIGNvbWJpbmVkVXJsO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiAnLyc7XG4gIH1cbn1cblxuLyoqXG4gKiBDcmVhdGUgYmFzZSB1cmwgZm9yIHJlZ2lzdHJ5LlxuICogQHJldHVybiB7U3RyaW5nfSBiYXNlIHJlZ2lzdHJ5IHVybFxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tYmluZUJhc2VVcmwocHJvdG9jb2w6IHN0cmluZywgaG9zdDogc3RyaW5nLCBwcmVmaXg6IHN0cmluZyA9ICcnKTogc3RyaW5nIHtcbiAgZGVidWcoJ2NvbWJpbmVkIHByb3RvY29sICVvJywgcHJvdG9jb2wpO1xuICBkZWJ1ZygnY29tYmluZWQgaG9zdCAlbycsIGhvc3QpO1xuICBjb25zdCBuZXdQcmVmaXggPSB3cmFwUHJlZml4KHByZWZpeCk7XG4gIGRlYnVnKCdjb21iaW5lZCBwcmVmaXggJW8nLCBuZXdQcmVmaXgpO1xuICBjb25zdCBncm91cGVkVVJJID0gbmV3IFVSTCh3cmFwUHJlZml4KHByZWZpeCksIGAke3Byb3RvY29sfTovLyR7aG9zdH1gKTtcbiAgY29uc3QgcmVzdWx0ID0gZ3JvdXBlZFVSSS5ocmVmO1xuICBkZWJ1ZygnY29tYmluZWQgdXJsICVvJywgcmVzdWx0KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyYXBQcmVmaXgocHJlZml4OiBzdHJpbmcgfCB2b2lkKTogc3RyaW5nIHtcbiAgaWYgKHByZWZpeCA9PT0gJycgfHwgdHlwZW9mIHByZWZpeCA9PT0gJ3VuZGVmaW5lZCcgfHwgcHJlZml4ID09PSBudWxsKSB7XG4gICAgcmV0dXJuICcnO1xuICB9IGVsc2UgaWYgKCFwcmVmaXguc3RhcnRzV2l0aCgnLycpICYmIHByZWZpeC5lbmRzV2l0aCgnLycpKSB7XG4gICAgcmV0dXJuIGAvJHtwcmVmaXh9YDtcbiAgfSBlbHNlIGlmICghcHJlZml4LnN0YXJ0c1dpdGgoJy8nKSAmJiAhcHJlZml4LmVuZHNXaXRoKCcvJykpIHtcbiAgICByZXR1cm4gYC8ke3ByZWZpeH0vYDtcbiAgfSBlbHNlIGlmIChwcmVmaXguc3RhcnRzV2l0aCgnLycpICYmICFwcmVmaXguZW5kc1dpdGgoJy8nKSkge1xuICAgIHJldHVybiBgJHtwcmVmaXh9L2A7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHByZWZpeDtcbiAgfVxufVxuIl19
|
package/conf/default.yaml
CHANGED
|
@@ -21,6 +21,9 @@ web:
|
|
|
21
21
|
# darkMode: true
|
|
22
22
|
# logo: http://somedomain/somelogo.png
|
|
23
23
|
# favicon: http://somedomain/favicon.ico | /path/favicon.ico
|
|
24
|
+
# rateLimit:
|
|
25
|
+
# windowMs: 1000
|
|
26
|
+
# max: 10000
|
|
24
27
|
|
|
25
28
|
# translate your registry, api i18n not available yet
|
|
26
29
|
# i18n:
|
|
@@ -75,7 +78,6 @@ middlewares:
|
|
|
75
78
|
|
|
76
79
|
# log settings
|
|
77
80
|
logs: { type: stdout, format: pretty, level: http }
|
|
78
|
-
|
|
79
81
|
#experiments:
|
|
80
82
|
# # support for npm token command
|
|
81
83
|
# token: false
|
package/conf/docker.yaml
CHANGED
|
@@ -26,6 +26,9 @@ web:
|
|
|
26
26
|
# darkMode: true
|
|
27
27
|
# logo: http://somedomain/somelogo.png
|
|
28
28
|
# favicon: http://somedomain/favicon.ico | /path/favicon.ico
|
|
29
|
+
# rateLimit:
|
|
30
|
+
# windowMs: 1000
|
|
31
|
+
# max: 10000
|
|
29
32
|
|
|
30
33
|
# translate your registry, api i18n not available yet
|
|
31
34
|
# i18n:
|
|
@@ -80,7 +83,6 @@ middlewares:
|
|
|
80
83
|
|
|
81
84
|
# log settings
|
|
82
85
|
logs: { type: stdout, format: pretty, level: http }
|
|
83
|
-
|
|
84
86
|
#experiments:
|
|
85
87
|
# # support for npm token command
|
|
86
88
|
# token: false
|