verdaccio 5.23.2 → 5.24.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/build/lib/auth.js +16 -2
- package/build/lib/up-storage.js +2 -2
- package/package.json +15 -15
package/build/lib/auth.js
CHANGED
|
@@ -15,6 +15,8 @@ var _constants = require("./constants");
|
|
|
15
15
|
var _logger = require("./logger");
|
|
16
16
|
var _utils2 = require("./utils");
|
|
17
17
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
18
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
19
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
18
20
|
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
19
21
|
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
|
|
20
22
|
function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
|
@@ -36,7 +38,19 @@ class Auth {
|
|
|
36
38
|
config,
|
|
37
39
|
logger: this.logger
|
|
38
40
|
};
|
|
39
|
-
|
|
41
|
+
let authConf = _objectSpread({}, config.auth);
|
|
42
|
+
if (authConf !== null && authConf !== void 0 && authConf.htpasswd) {
|
|
43
|
+
// special case for htpasswd plugin, the v6 version uses bcrypt by default
|
|
44
|
+
// 5.x enforces crypt to avoid breaking changes, but is highly recommended using
|
|
45
|
+
// bcrypt instead.
|
|
46
|
+
if (!authConf.htpasswd.algorithm) {
|
|
47
|
+
authConf.htpasswd.algorithm = 'crypt';
|
|
48
|
+
this.logger.info(
|
|
49
|
+
// eslint-disable-next-line max-len
|
|
50
|
+
'the "crypt" algorithm is deprecated consider switch to "bcrypt" in the configuration file. Read the documentation for additional details');
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
return (0, _pluginLoader.default)(config, authConf, pluginOptions, plugin => {
|
|
40
54
|
const {
|
|
41
55
|
authenticate,
|
|
42
56
|
allow_access,
|
|
@@ -471,4 +485,4 @@ class Auth {
|
|
|
471
485
|
}
|
|
472
486
|
var _default = Auth;
|
|
473
487
|
exports.default = _default;
|
|
474
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZGVidWciLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9sb2Rhc2giLCJfY29uZmlnIiwiX3NpZ25hdHVyZSIsIl91dGlscyIsIl9wbHVnaW5Mb2FkZXIiLCJfYXV0aFV0aWxzIiwiX2NvbnN0YW50cyIsIl9sb2dnZXIiLCJfdXRpbHMyIiwib2JqIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJfZGVmaW5lUHJvcGVydHkiLCJrZXkiLCJ2YWx1ZSIsIl90b1Byb3BlcnR5S2V5IiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJlbnVtZXJhYmxlIiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCJhcmciLCJfdG9QcmltaXRpdmUiLCJTdHJpbmciLCJpbnB1dCIsImhpbnQiLCJwcmltIiwiU3ltYm9sIiwidG9QcmltaXRpdmUiLCJ1bmRlZmluZWQiLCJyZXMiLCJjYWxsIiwiVHlwZUVycm9yIiwiTnVtYmVyIiwiZGVidWciLCJidWlsZERlYnVnIiwiQXV0aCIsImNvbnN0cnVjdG9yIiwiY29uZmlnIiwibG9nZ2VyIiwic2VjcmV0IiwicGx1Z2lucyIsIl9sb2FkUGx1Z2luIiwiX2FwcGx5RGVmYXVsdFBsdWdpbnMiLCJwbHVnaW5PcHRpb25zIiwibG9hZFBsdWdpbiIsImF1dGgiLCJwbHVnaW4iLCJhdXRoZW50aWNhdGUiLCJhbGxvd19hY2Nlc3MiLCJhbGxvd19wdWJsaXNoIiwicHVzaCIsImdldERlZmF1bHRQbHVnaW5zIiwiY2hhbmdlUGFzc3dvcmQiLCJ1c2VybmFtZSIsInBhc3N3b3JkIiwibmV3UGFzc3dvcmQiLCJjYiIsInZhbGlkUGx1Z2lucyIsIl8iLCJmaWx0ZXIiLCJpc0Z1bmN0aW9uIiwiaXNFbXB0eSIsIkVycm9yQ29kZSIsImdldEludGVybmFsRXJyb3IiLCJTVVBQT1JUX0VSUk9SUyIsIlBMVUdJTl9NSVNTSU5HX0lOVEVSRkFDRSIsImlzTmlsIiwiZXJyIiwicHJvZmlsZSIsImVycm9yIiwiaW5mbyIsInNsaWNlIiwic2VsZiIsIm5leHQiLCJzaGlmdCIsImdyb3VwcyIsImxlbmd0aCIsImlzU3RyaW5nIiwiaXNHcm91cFZhbGlkIiwiaXNBcnJheSIsIkFQSV9FUlJPUiIsIkJBRF9GT1JNQVRfVVNFUl9HUk9VUCIsImNyZWF0ZVJlbW90ZVVzZXIiLCJhZGRfdXNlciIsInVzZXIiLCJtZXRob2QiLCJ3YXJuIiwib2siLCJtZXNzYWdlIiwicGFja2FnZU5hbWUiLCJwYWNrYWdlVmVyc2lvbiIsImNhbGxiYWNrIiwicGtnQWxsb3dBY2NlcyIsIm5hbWUiLCJ2ZXJzaW9uIiwicGtnIiwiYXNzaWduIiwiZ2V0TWF0Y2hlZFBhY2thZ2VzU3BlYyIsInBhY2thZ2VzIiwiYWxsb3dfdW5wdWJsaXNoIiwiYXJndW1lbnRzIiwiaXNFcnJvciIsImFwaUpXVG1pZGRsZXdhcmUiLCJoZWxwZXJzIiwiY3JlYXRlQW5vbnltb3VzUmVtb3RlVXNlciIsInJlcSIsIl9uZXh0IiwicGF1c2UiLCJyZXN1bWUiLCJyZW1vdGVfdXNlciIsIl9pc1JlbW90ZVVzZXJWYWxpZCIsImF1dGhvcml6YXRpb24iLCJoZWFkZXJzIiwiaXNBdXRoSGVhZGVyVmFsaWQiLCJnZXRCYWRSZXF1ZXN0IiwiQkFEX0FVVEhfSEVBREVSIiwic2VjdXJpdHkiLCJnZXRTZWN1cml0eSIsImlzQUVTTGVnYWN5IiwiX2hhbmRsZUFFU01pZGRsZXdhcmUiLCJfaGFuZGxlSldUQVBJTWlkZGxld2FyZSIsInNjaGVtZSIsInRva2VuIiwicGFyc2VBdXRoVG9rZW5IZWFkZXIiLCJ0b1VwcGVyQ2FzZSIsIlRPS0VOX0JBU0lDIiwiY3JlZGVudGlhbHMiLCJjb252ZXJ0UGF5bG9hZFRvQmFzZTY0IiwidG9TdHJpbmciLCJwYXJzZUJhc2ljUGF5bG9hZCIsImdldE1pZGRsZXdhcmVDcmVkZW50aWFscyIsImdldEZvcmJpZGRlbiIsIkJBRF9VU0VSTkFNRV9QQVNTV09SRCIsImlzVW5kZWZpbmVkIiwid2ViVUlKV1RtaWRkbGV3YXJlIiwic3RhdHVzIiwic3RhdHVzQ29kZSIsInNlbmQiLCJyZXBsYWNlIiwiVE9LRU5fQkVBUkVSIiwidmVyaWZ5SldUUGF5bG9hZCIsImp3dEVuY3J5cHQiLCJzaWduT3B0aW9ucyIsInJlYWxfZ3JvdXBzIiwicmVhbEdyb3Vwc1ZhbGlkYXRlZCIsImdyb3VwZWRHcm91cHMiLCJBcnJheSIsImZyb20iLCJTZXQiLCJjb25jYXQiLCJwYXlsb2FkIiwic2lnblBheWxvYWQiLCJhZXNFbmNyeXB0IiwiYnVmIiwiX2RlZmF1bHQiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpYi9hdXRoLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBidWlsZERlYnVnIGZyb20gJ2RlYnVnJztcbmltcG9ydCB7IE5leHRGdW5jdGlvbiB9IGZyb20gJ2V4cHJlc3MnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcblxuaW1wb3J0IHsgY3JlYXRlQW5vbnltb3VzUmVtb3RlVXNlciwgY3JlYXRlUmVtb3RlVXNlciB9IGZyb20gJ0B2ZXJkYWNjaW8vY29uZmlnJztcbmltcG9ydCB7IFZlcmRhY2Npb0Vycm9yLCBwbHVnaW5VdGlscyB9IGZyb20gJ0B2ZXJkYWNjaW8vY29yZSc7XG5pbXBvcnQgeyBhZXNFbmNyeXB0RGVwcmVjYXRlZCBhcyBhZXNFbmNyeXB0LCBzaWduUGF5bG9hZCB9IGZyb20gJ0B2ZXJkYWNjaW8vc2lnbmF0dXJlJztcbmltcG9ydCB7XG4gIEFsbG93QWNjZXNzLFxuICBDYWxsYmFjayxcbiAgQ29uZmlnLFxuICBKV1RTaWduT3B0aW9ucyxcbiAgTG9nZ2VyLFxuICBQYWNrYWdlQWNjZXNzLFxuICBSZW1vdGVVc2VyLFxuICBTZWN1cml0eSxcbn0gZnJvbSAnQHZlcmRhY2Npby90eXBlcyc7XG5pbXBvcnQgeyBnZXRNYXRjaGVkUGFja2FnZXNTcGVjIH0gZnJvbSAnQHZlcmRhY2Npby91dGlscyc7XG5cbmltcG9ydCBsb2FkUGx1Z2luIGZyb20gJy4uL2xpYi9wbHVnaW4tbG9hZGVyJztcbmltcG9ydCB7ICRSZXF1ZXN0RXh0ZW5kLCAkUmVzcG9uc2VFeHRlbmQsIEFFU1BheWxvYWQgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQge1xuICBnZXREZWZhdWx0UGx1Z2lucyxcbiAgZ2V0TWlkZGxld2FyZUNyZWRlbnRpYWxzLFxuICBnZXRTZWN1cml0eSxcbiAgaXNBRVNMZWdhY3ksXG4gIGlzQXV0aEhlYWRlclZhbGlkLFxuICBwYXJzZUF1dGhUb2tlbkhlYWRlcixcbiAgcGFyc2VCYXNpY1BheWxvYWQsXG4gIHZlcmlmeUpXVFBheWxvYWQsXG59IGZyb20gJy4vYXV0aC11dGlscyc7XG5pbXBvcnQgeyBBUElfRVJST1IsIFNVUFBPUlRfRVJST1JTLCBUT0tFTl9CQVNJQywgVE9LRU5fQkVBUkVSIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi9sb2dnZXInO1xuaW1wb3J0IHsgRXJyb3JDb2RlLCBjb252ZXJ0UGF5bG9hZFRvQmFzZTY0IH0gZnJvbSAnLi91dGlscyc7XG5cbmNvbnN0IGRlYnVnID0gYnVpbGREZWJ1ZygndmVyZGFjY2lvOmF1dGgnKTtcblxuY2xhc3MgQXV0aCB7XG4gIHB1YmxpYyBjb25maWc6IENvbmZpZztcbiAgcHVibGljIGxvZ2dlcjogTG9nZ2VyO1xuICBwdWJsaWMgc2VjcmV0OiBzdHJpbmc7XG4gIHB1YmxpYyBwbHVnaW5zOiBwbHVnaW5VdGlscy5BdXRoPENvbmZpZz5bXTtcblxuICBwdWJsaWMgY29uc3RydWN0b3IoY29uZmlnOiBDb25maWcpIHtcbiAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcbiAgICB0aGlzLmxvZ2dlciA9IGxvZ2dlcjtcbiAgICB0aGlzLnNlY3JldCA9IGNvbmZpZy5zZWNyZXQ7XG4gICAgdGhpcy5wbHVnaW5zID0gdGhpcy5fbG9hZFBsdWdpbihjb25maWcpO1xuICAgIHRoaXMuX2FwcGx5RGVmYXVsdFBsdWdpbnMoKTtcbiAgfVxuXG4gIHByaXZhdGUgX2xvYWRQbHVnaW4oY29uZmlnOiBDb25maWcpOiBwbHVnaW5VdGlscy5BdXRoPENvbmZpZz5bXSB7XG4gICAgY29uc3QgcGx1Z2luT3B0aW9ucyA9IHtcbiAgICAgIGNvbmZpZyxcbiAgICAgIGxvZ2dlcjogdGhpcy5sb2dnZXIsXG4gICAgfTtcblxuICAgIHJldHVybiBsb2FkUGx1Z2luPHBsdWdpblV0aWxzLkF1dGg8Q29uZmlnPj4oXG4gICAgICBjb25maWcsXG4gICAgICBjb25maWcuYXV0aCxcbiAgICAgIHBsdWdpbk9wdGlvbnMsXG4gICAgICAocGx1Z2luOiBwbHVnaW5VdGlscy5BdXRoPENvbmZpZz4pOiBib29sZWFuID0+IHtcbiAgICAgICAgY29uc3QgeyBhdXRoZW50aWNhdGUsIGFsbG93X2FjY2VzcywgYWxsb3dfcHVibGlzaCB9ID0gcGx1Z2luO1xuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIHJldHVybiBhdXRoZW50aWNhdGUgfHwgYWxsb3dfYWNjZXNzIHx8IGFsbG93X3B1Ymxpc2g7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgX2FwcGx5RGVmYXVsdFBsdWdpbnMoKTogdm9pZCB7XG4gICAgdGhpcy5wbHVnaW5zLnB1c2goZ2V0RGVmYXVsdFBsdWdpbnModGhpcy5sb2dnZXIpKTtcbiAgfVxuXG4gIHB1YmxpYyBjaGFuZ2VQYXNzd29yZChcbiAgICB1c2VybmFtZTogc3RyaW5nLFxuICAgIHBhc3N3b3JkOiBzdHJpbmcsIC8vIHByYWdtYTogYWxsb3dsaXN0IHNlY3JldFxuICAgIG5ld1Bhc3N3b3JkOiBzdHJpbmcsIC8vIHByYWdtYTogYWxsb3dsaXN0IHNlY3JldFxuICAgIGNiOiBDYWxsYmFja1xuICApOiB2b2lkIHtcbiAgICBjb25zdCB2YWxpZFBsdWdpbnMgPSBfLmZpbHRlcih0aGlzLnBsdWdpbnMsIChwbHVnaW4pID0+IF8uaXNGdW5jdGlvbihwbHVnaW4uY2hhbmdlUGFzc3dvcmQpKTtcblxuICAgIGlmIChfLmlzRW1wdHkodmFsaWRQbHVnaW5zKSkge1xuICAgICAgcmV0dXJuIGNiKEVycm9yQ29kZS5nZXRJbnRlcm5hbEVycm9yKFNVUFBPUlRfRVJST1JTLlBMVUdJTl9NSVNTSU5HX0lOVEVSRkFDRSkpO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgcGx1Z2luIG9mIHZhbGlkUGx1Z2lucykge1xuICAgICAgaWYgKF8uaXNOaWwocGx1Z2luKSB8fCBfLmlzRnVuY3Rpb24ocGx1Z2luLmNoYW5nZVBhc3N3b3JkKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgZGVidWcoJ2F1dGggcGx1Z2luIGRvZXMgbm90IGltcGxlbWVudCBjaGFuZ2VQYXNzd29yZCwgdHJ5aW5nIG5leHQgb25lJyk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVidWcoJ3VwZGF0aW5nIHBhc3N3b3JkIGZvciAlbycsIHVzZXJuYW1lKTtcbiAgICAgICAgcGx1Z2luLmNoYW5nZVBhc3N3b3JkISh1c2VybmFtZSwgcGFzc3dvcmQsIG5ld1Bhc3N3b3JkLCAoZXJyLCBwcm9maWxlKTogdm9pZCA9PiB7XG4gICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoXG4gICAgICAgICAgICAgIHsgdXNlcm5hbWUsIGVyciB9LFxuICAgICAgICAgICAgICBgQW4gZXJyb3IgaGFzIGJlZW4gcHJvZHVjZWRcbiAgICAgICAgICAgIHVwZGF0aW5nIHRoZSBwYXNzd29yZCBmb3IgQHt1c2VybmFtZX0uIEVycm9yOiBAe2Vyci5tZXNzYWdlfWBcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm4gY2IoZXJyKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5sb2dnZXIuaW5mbyh7IHVzZXJuYW1lIH0sICd1cGRhdGVkIHBhc3N3b3JkIGZvciBAe3VzZXJuYW1lfSB3YXMgc3VjY2Vzc2Z1bCcpO1xuICAgICAgICAgIHJldHVybiBjYihudWxsLCBwcm9maWxlKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGF1dGhlbnRpY2F0ZSh1c2VybmFtZTogc3RyaW5nLCBwYXNzd29yZDogc3RyaW5nLCBjYjogQ2FsbGJhY2spOiB2b2lkIHtcbiAgICBjb25zdCBwbHVnaW5zID0gdGhpcy5wbHVnaW5zLnNsaWNlKDApO1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIChmdW5jdGlvbiBuZXh0KCk6IHZvaWQge1xuICAgICAgY29uc3QgcGx1Z2luID0gcGx1Z2lucy5zaGlmdCgpIGFzIHBsdWdpblV0aWxzLkF1dGg8Q29uZmlnPjtcbiAgICAgIGlmIChfLmlzRnVuY3Rpb24ocGx1Z2luLmF1dGhlbnRpY2F0ZSkgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiBuZXh0KCk7XG4gICAgICB9XG4gICAgICBkZWJ1ZygnYXV0aGVudGljYXRpbmcgJW8nLCB1c2VybmFtZSk7XG4gICAgICBwbHVnaW4uYXV0aGVudGljYXRlKHVzZXJuYW1lLCBwYXNzd29yZCwgZnVuY3Rpb24gKGVyciwgZ3JvdXBzKTogdm9pZCB7XG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICBzZWxmLmxvZ2dlci5lcnJvcihcbiAgICAgICAgICAgIHsgdXNlcm5hbWUsIGVyciB9LFxuICAgICAgICAgICAgJ2F1dGhlbnRpY2F0aW5nIGZvciB1c2VyIEB7dXNlcm5hbWV9IGZhaWxlZC4gRXJyb3I6IEB7ZXJyLm1lc3NhZ2V9J1xuICAgICAgICAgICk7XG4gICAgICAgICAgcmV0dXJuIGNiKGVycik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBFeHBlY3Q6IFNLSVAgaWYgZ3JvdXBzIGlzIGZhbHNleSBhbmQgbm90IGFuIGFycmF5XG4gICAgICAgIC8vICAgICAgICAgd2l0aCBhdCBsZWFzdCBvbmUgaXRlbSAodHJ1dGh5IGxlbmd0aClcbiAgICAgICAgLy8gRXhwZWN0OiBDT05USU5VRSBvdGhlcndpc2UgKHdpbGwgZXJyb3IgaWYgZ3JvdXBzIGlzIG5vdFxuICAgICAgICAvLyAgICAgICAgIGFuIGFycmF5LCBidXQgdGhpcyBpcyBjdXJyZW50IGJlaGF2aW9yKVxuICAgICAgICAvLyBDYXZlYXQ6IFNUUklORyAoaWYgdmFsaWQpIHdpbGwgcGFzcyBzdWNjZXNzZnVsbHlcbiAgICAgICAgLy8gICAgICAgICBidWcgZ2l2ZSB1bmV4cGVjdGVkIHJlc3VsdHNcbiAgICAgICAgLy8gSW5mbzogQ2Fubm90IHVzZSBgPT0gZmFsc2UgdG8gY2hlY2sgZmFsc2V5IHZhbHVlc2BcbiAgICAgICAgaWYgKCEhZ3JvdXBzICYmIGdyb3Vwcy5sZW5ndGggIT09IDApIHtcbiAgICAgICAgICAvLyBUT0RPOiBjcmVhdGUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBleHBlY3RhdGlvbnNcbiAgICAgICAgICBpZiAoXy5pc1N0cmluZyhncm91cHMpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdwbHVnaW4gZ3JvdXAgZXJyb3I6IGludmFsaWQgdHlwZSBmb3IgZnVuY3Rpb24nKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgaXNHcm91cFZhbGlkOiBib29sZWFuID0gXy5pc0FycmF5KGdyb3Vwcyk7XG4gICAgICAgICAgaWYgKCFpc0dyb3VwVmFsaWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoQVBJX0VSUk9SLkJBRF9GT1JNQVRfVVNFUl9HUk9VUCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGRlYnVnKCdhdXRoZW50aWNhdGlvbiBmb3IgdXNlciAlbyB3YXMgc3VjY2Vzc2Z1bGx5LiBHcm91cHM6ICVvJywgdXNlcm5hbWUsIGdyb3Vwcyk7XG4gICAgICAgICAgcmV0dXJuIGNiKGVyciwgY3JlYXRlUmVtb3RlVXNlcih1c2VybmFtZSwgZ3JvdXBzKSk7XG4gICAgICAgIH1cbiAgICAgICAgbmV4dCgpO1xuICAgICAgfSk7XG4gICAgfSkoKTtcbiAgfVxuXG4gIHB1YmxpYyBhZGRfdXNlcih1c2VyOiBzdHJpbmcsIHBhc3N3b3JkOiBzdHJpbmcsIGNiOiBDYWxsYmFjayk6IHZvaWQge1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIGNvbnN0IHBsdWdpbnMgPSB0aGlzLnBsdWdpbnMuc2xpY2UoMCk7XG4gICAgZGVidWcoJ2FkZCB1c2VyICVvJywgdXNlcik7XG4gICAgKGZ1bmN0aW9uIG5leHQoKTogdm9pZCB7XG4gICAgICBjb25zdCBwbHVnaW4gPSBwbHVnaW5zLnNoaWZ0KCkgYXMgcGx1Z2luVXRpbHMuQXV0aDxDb25maWc+O1xuICAgICAgbGV0IG1ldGhvZCA9ICdhZGR1c2VyJztcbiAgICAgIGlmIChfLmlzRnVuY3Rpb24ocGx1Z2luW21ldGhvZF0pID09PSBmYWxzZSkge1xuICAgICAgICBtZXRob2QgPSAnYWRkX3VzZXInO1xuICAgICAgICBzZWxmLmxvZ2dlci53YXJuKFxuICAgICAgICAgICd0aGUgcGx1Z2luIG1ldGhvZCBhZGRfdXNlciBpbiB0aGUgYXV0aCBwbHVnaW4gaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIG5leHQgbWFqb3IgcmVsZWFzZSwgbm90aWZ5IHRvIHRoZSBwbHVnaW4gYXV0aG9yJ1xuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBpZiAoXy5pc0Z1bmN0aW9uKHBsdWdpblttZXRob2RdKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgbmV4dCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gcC5hZGRfdXNlcigpIGV4ZWN1dGlvblxuICAgICAgICBwbHVnaW5bbWV0aG9kXSh1c2VyLCBwYXNzd29yZCwgZnVuY3Rpb24gKGVyciwgb2spOiB2b2lkIHtcbiAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICBzZWxmLmxvZ2dlci5lcnJvcihcbiAgICAgICAgICAgICAgeyB1c2VyLCBlcnI6IGVyci5tZXNzYWdlIH0sXG4gICAgICAgICAgICAgICd0aGUgdXNlciBAe3VzZXJ9IGNvdWxkIG5vdCBiZWluZyBhZGRlZC4gRXJyb3I6IEB7ZXJyfSdcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm4gY2IoZXJyKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKG9rKSB7XG4gICAgICAgICAgICBzZWxmLmxvZ2dlci5pbmZvKHsgdXNlciB9LCAndGhlIHVzZXIgQHt1c2VyfSBoYXMgYmVlbiBhZGRlZCcpO1xuICAgICAgICAgICAgcmV0dXJuIHNlbGYuYXV0aGVudGljYXRlKHVzZXIsIHBhc3N3b3JkLCBjYik7XG4gICAgICAgICAgfVxuICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSkoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbGxvdyB1c2VyIHRvIGFjY2VzcyBhIHBhY2thZ2UuXG4gICAqL1xuICBwdWJsaWMgYWxsb3dfYWNjZXNzKFxuICAgIHsgcGFja2FnZU5hbWUsIHBhY2thZ2VWZXJzaW9uIH06IHBsdWdpblV0aWxzLkF1dGhQbHVnaW5QYWNrYWdlLFxuICAgIHVzZXI6IFJlbW90ZVVzZXIsXG4gICAgY2FsbGJhY2s6IENhbGxiYWNrXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IHBsdWdpbnMgPSB0aGlzLnBsdWdpbnMuc2xpY2UoMCk7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgY29uc3QgcGtnQWxsb3dBY2NlczogQWxsb3dBY2Nlc3MgPSB7IG5hbWU6IHBhY2thZ2VOYW1lLCB2ZXJzaW9uOiBwYWNrYWdlVmVyc2lvbiB9O1xuICAgIGNvbnN0IHBrZyA9IE9iamVjdC5hc3NpZ24oXG4gICAgICB7fSxcbiAgICAgIHBrZ0FsbG93QWNjZXMsXG4gICAgICBnZXRNYXRjaGVkUGFja2FnZXNTcGVjKHBhY2thZ2VOYW1lLCB0aGlzLmNvbmZpZy5wYWNrYWdlcylcbiAgICApIGFzIEFsbG93QWNjZXNzICYgUGFja2FnZUFjY2VzcztcbiAgICBkZWJ1ZygnYWxsb3cgYWNjZXNzIGZvciAlbycsIHBhY2thZ2VOYW1lKTtcblxuICAgIChmdW5jdGlvbiBuZXh0KCk6IHZvaWQge1xuICAgICAgY29uc3QgcGx1Z2luOiBwbHVnaW5VdGlscy5BdXRoPHVua25vd24+ID0gcGx1Z2lucy5zaGlmdCgpIGFzIHBsdWdpblV0aWxzLkF1dGg8Q29uZmlnPjtcblxuICAgICAgaWYgKF8uaXNOaWwocGx1Z2luKSB8fCBfLmlzRnVuY3Rpb24ocGx1Z2luLmFsbG93X2FjY2VzcykgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiBuZXh0KCk7XG4gICAgICB9XG5cbiAgICAgIHBsdWdpbi5hbGxvd19hY2Nlc3MhKHVzZXIsIHBrZywgZnVuY3Rpb24gKGVycjogVmVyZGFjY2lvRXJyb3IgfCBudWxsLCBvaz86IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIHNlbGYubG9nZ2VyLmVycm9yKFxuICAgICAgICAgICAgeyBwYWNrYWdlTmFtZSwgZXJyIH0sXG4gICAgICAgICAgICAnZm9yYmlkZGVuIGFjY2VzcyBmb3IgQHtwYWNrYWdlTmFtZX0uIEVycm9yOiBAe2Vyci5tZXNzYWdlfSdcbiAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9rKSB7XG4gICAgICAgICAgc2VsZi5sb2dnZXIuaW5mbyh7IHBhY2thZ2VOYW1lIH0sICdhbGxvd2VkIGFjY2VzcyBmb3IgQHtwYWNrYWdlTmFtZX0nKTtcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCwgb2spO1xuICAgICAgICB9XG5cbiAgICAgICAgbmV4dCgpOyAvLyBjYihudWxsLCBmYWxzZSkgY2F1c2VzIG5leHQgcGx1Z2luIHRvIHJvbGxcbiAgICAgIH0pO1xuICAgIH0pKCk7XG4gIH1cblxuICBwdWJsaWMgYWxsb3dfdW5wdWJsaXNoKFxuICAgIHsgcGFja2FnZU5hbWUsIHBhY2thZ2VWZXJzaW9uIH06IHBsdWdpblV0aWxzLkF1dGhQbHVnaW5QYWNrYWdlLFxuICAgIHVzZXI6IFJlbW90ZVVzZXIsXG4gICAgY2FsbGJhY2s6IENhbGxiYWNrXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IHBrZyA9IE9iamVjdC5hc3NpZ24oXG4gICAgICB7IG5hbWU6IHBhY2thZ2VOYW1lLCB2ZXJzaW9uOiBwYWNrYWdlVmVyc2lvbiB9LFxuICAgICAgZ2V0TWF0Y2hlZFBhY2thZ2VzU3BlYyhwYWNrYWdlTmFtZSwgdGhpcy5jb25maWcucGFja2FnZXMpXG4gICAgKTtcbiAgICBkZWJ1ZygnYWxsb3cgdW5wdWJsaXNoIGZvciAlbycsIHBhY2thZ2VOYW1lKTtcbiAgICBmb3IgKGNvbnN0IHBsdWdpbiBvZiB0aGlzLnBsdWdpbnMpIHtcbiAgICAgIGlmIChfLmlzTmlsKHBsdWdpbikgfHwgXy5pc0Z1bmN0aW9uKHBsdWdpbi5hbGxvd191bnB1Ymxpc2gpID09PSBmYWxzZSkge1xuICAgICAgICBkZWJ1ZygnYWxsb3cgdW5wdWJsaXNoIGZvciAlbyBwbHVnaW4gZG9lcyBub3QgaW1wbGVtZW50IGFsbG93X3VucHVibGlzaCcsIHBhY2thZ2VOYW1lKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIHBsdWdpbi5hbGxvd191bnB1Ymxpc2ghKHVzZXIsIHBrZywgKGVyciwgb2s6IGJvb2xlYW4pOiB2b2lkID0+IHtcbiAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcihcbiAgICAgICAgICAgICAgeyBwYWNrYWdlTmFtZSwgdXNlcjogdXNlcj8ubmFtZSB9LFxuICAgICAgICAgICAgICAnQHt1c2VyfSBmb3JiaWRkZW4gcHVibGlzaCBmb3IgQHtwYWNrYWdlTmFtZX0sIGl0IHdpbGwgZmFsbGJhY2sgb24gdW5wdWJsaXNoIHBlcm1pc3Npb25zJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChfLmlzTmlsKG9rKSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgZGVidWcoJ3dlIGJ5cGFzcyB1bnB1Ymxpc2ggZm9yICVvLCBwdWJsaXNoIHdpbGwgaGFuZGxlIHRoZSBhY2Nlc3MnLCBwYWNrYWdlTmFtZSk7XG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFsbG93X3B1Ymxpc2goLi4uYXJndW1lbnRzKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAob2spIHtcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLmluZm8oXG4gICAgICAgICAgICAgIHsgcGFja2FnZU5hbWUsIHVzZXI6IHVzZXI/Lm5hbWUgfSxcbiAgICAgICAgICAgICAgJ0B7dXNlcn0gYWxsb3dlZCB1bnB1Ymxpc2ggZm9yIEB7cGFja2FnZU5hbWV9J1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsLCBvayk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQWxsb3cgdXNlciB0byBwdWJsaXNoIGEgcGFja2FnZS5cbiAgICovXG4gIHB1YmxpYyBhbGxvd19wdWJsaXNoKFxuICAgIHsgcGFja2FnZU5hbWUsIHBhY2thZ2VWZXJzaW9uIH06IHBsdWdpblV0aWxzLkF1dGhQbHVnaW5QYWNrYWdlLFxuICAgIHVzZXI6IFJlbW90ZVVzZXIsXG4gICAgY2FsbGJhY2s6IENhbGxiYWNrXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IHBsdWdpbnMgPSB0aGlzLnBsdWdpbnMuc2xpY2UoMCk7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgY29uc3QgcGtnID0gT2JqZWN0LmFzc2lnbihcbiAgICAgIHsgbmFtZTogcGFja2FnZU5hbWUsIHZlcnNpb246IHBhY2thZ2VWZXJzaW9uIH0sXG4gICAgICBnZXRNYXRjaGVkUGFja2FnZXNTcGVjKHBhY2thZ2VOYW1lLCB0aGlzLmNvbmZpZy5wYWNrYWdlcylcbiAgICApO1xuICAgIGRlYnVnKCdhbGxvdyBwdWJsaXNoIGZvciAlbyBpbml0IHwgcGx1Z2luczogJW8nLCBwYWNrYWdlTmFtZSwgcGx1Z2lucyk7XG4gICAgKGZ1bmN0aW9uIG5leHQoKTogdm9pZCB7XG4gICAgICBjb25zdCBwbHVnaW4gPSBwbHVnaW5zLnNoaWZ0KCk7XG5cbiAgICAgIGlmIChfLmlzTmlsKHBsdWdpbikgfHwgXy5pc0Z1bmN0aW9uKHBsdWdpbi5hbGxvd19wdWJsaXNoKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgZGVidWcoJ2FsbG93IHB1Ymxpc2ggZm9yICVvIHBsdWdpbiBkb2VzIG5vdCBpbXBsZW1lbnQgYWxsb3dfcHVibGlzaCcsIHBhY2thZ2VOYW1lKTtcbiAgICAgICAgcmV0dXJuIG5leHQoKTtcbiAgICAgIH1cblxuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgcGx1Z2luLmFsbG93X3B1Ymxpc2godXNlciwgcGtnLCAoZXJyOiBhbnksIG9rOiBib29sZWFuKTogdm9pZCA9PiB7XG4gICAgICAgIGlmIChfLmlzTmlsKGVycikgPT09IGZhbHNlICYmIF8uaXNFcnJvcihlcnIpKSB7XG4gICAgICAgICAgc2VsZi5sb2dnZXIuZXJyb3IoXG4gICAgICAgICAgICB7IHBhY2thZ2VOYW1lLCB1c2VyOiB1c2VyPy5uYW1lIH0sXG4gICAgICAgICAgICAnQHt1c2VyfSBpcyBmb3JiaWRkZW4gcHVibGlzaCBmb3IgQHtwYWNrYWdlTmFtZX0nXG4gICAgICAgICAgKTtcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvaykge1xuICAgICAgICAgIHNlbGYubG9nZ2VyLmluZm8oXG4gICAgICAgICAgICB7IHBhY2thZ2VOYW1lLCB1c2VyOiB1c2VyPy5uYW1lIH0sXG4gICAgICAgICAgICAnQHt1c2VyfSBpcyBhbGxvd2VkIHB1Ymxpc2ggZm9yIEB7cGFja2FnZU5hbWV9J1xuICAgICAgICAgICk7XG4gICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwsIG9rKTtcbiAgICAgICAgfVxuICAgICAgICBkZWJ1ZygnYWxsb3cgcHVibGlzaCBza2lwIHZhbGlkYXRpb24gZm9yICVvJywgcGFja2FnZU5hbWUpO1xuICAgICAgICBuZXh0KCk7IC8vIGNiKG51bGwsIGZhbHNlKSBjYXVzZXMgbmV4dCBwbHVnaW4gdG8gcm9sbFxuICAgICAgfSk7XG4gICAgfSkoKTtcbiAgfVxuXG4gIHB1YmxpYyBhcGlKV1RtaWRkbGV3YXJlKCkge1xuICAgIGNvbnN0IHBsdWdpbnMgPSB0aGlzLnBsdWdpbnMuc2xpY2UoMCk7XG4gICAgY29uc3QgaGVscGVycyA9IHsgY3JlYXRlQW5vbnltb3VzUmVtb3RlVXNlciwgY3JlYXRlUmVtb3RlVXNlciB9O1xuICAgIGZvciAoY29uc3QgcGx1Z2luIG9mIHBsdWdpbnMpIHtcbiAgICAgIGlmIChwbHVnaW4uYXBpSldUbWlkZGxld2FyZSkge1xuICAgICAgICByZXR1cm4gcGx1Z2luLmFwaUpXVG1pZGRsZXdhcmUoaGVscGVycyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIChyZXE6ICRSZXF1ZXN0RXh0ZW5kLCByZXM6ICRSZXNwb25zZUV4dGVuZCwgX25leHQ6IE5leHRGdW5jdGlvbik6IHZvaWQgPT4ge1xuICAgICAgcmVxLnBhdXNlKCk7XG5cbiAgICAgIGNvbnN0IG5leHQgPSBmdW5jdGlvbiAoZXJyOiBhbnkgfCB2b2lkKTogdm9pZCB7XG4gICAgICAgIHJlcS5yZXN1bWUoKTtcbiAgICAgICAgLy8gdW5jb21tZW50IHRoaXMgdG8gcmVqZWN0IHVzZXJzIHdpdGggYmFkIGF1dGggaGVhZGVyc1xuICAgICAgICAvLyByZXR1cm4gX25leHQuYXBwbHkobnVsbCwgYXJndW1lbnRzKVxuICAgICAgICAvLyBzd2FsbG93IGVycm9yLCB1c2VyIHJlbWFpbnMgdW5hdXRob3JpemVkXG4gICAgICAgIC8vIHNldCByZW1vdGVVc2VyRXJyb3IgdG8gaW5kaWNhdGUgdGhhdCB1c2VyIHdhcyBhdHRlbXB0aW5nIGF1dGhlbnRpY2F0aW9uXG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICByZXEucmVtb3RlX3VzZXIuZXJyb3IgPSBlcnIubWVzc2FnZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX25leHQoKTtcbiAgICAgIH07XG5cbiAgICAgIGlmICh0aGlzLl9pc1JlbW90ZVVzZXJWYWxpZChyZXEucmVtb3RlX3VzZXIpKSB7XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgcmV0dXJuIG5leHQoKTtcbiAgICAgIH1cblxuICAgICAgLy8gaW4gY2FzZSBhdXRoIGhlYWRlciBkb2VzIG5vdCBleGlzdCB3ZSByZXR1cm4gYW5vbnltb3VzIGZ1bmN0aW9uXG4gICAgICByZXEucmVtb3RlX3VzZXIgPSBjcmVhdGVBbm9ueW1vdXNSZW1vdGVVc2VyKCk7XG5cbiAgICAgIGNvbnN0IHsgYXV0aG9yaXphdGlvbiB9ID0gcmVxLmhlYWRlcnM7XG4gICAgICBpZiAoXy5pc05pbChhdXRob3JpemF0aW9uKSkge1xuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIHJldHVybiBuZXh0KCk7XG4gICAgICB9XG5cbiAgICAgIGlmICghaXNBdXRoSGVhZGVyVmFsaWQoYXV0aG9yaXphdGlvbikpIHtcbiAgICAgICAgZGVidWcoJ2FwaSBtaWRkbGV3YXJlIGF1dGggaGVhdGhlciBpcyBub3QgdmFsaWQnKTtcbiAgICAgICAgcmV0dXJuIG5leHQoRXJyb3JDb2RlLmdldEJhZFJlcXVlc3QoQVBJX0VSUk9SLkJBRF9BVVRIX0hFQURFUikpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzZWN1cml0eTogU2VjdXJpdHkgPSBnZXRTZWN1cml0eSh0aGlzLmNvbmZpZyk7XG4gICAgICBjb25zdCB7IHNlY3JldCB9ID0gdGhpcy5jb25maWc7XG5cbiAgICAgIGlmIChpc0FFU0xlZ2FjeShzZWN1cml0eSkpIHtcbiAgICAgICAgZGVidWcoJ2FwaSBtaWRkbGV3YXJlIHVzaW5nIGxlZ2FjeSBhdXRoIHRva2VuJyk7XG4gICAgICAgIHRoaXMuX2hhbmRsZUFFU01pZGRsZXdhcmUocmVxLCBzZWN1cml0eSwgc2VjcmV0LCBhdXRob3JpemF0aW9uLCBuZXh0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlYnVnKCdhcGkgbWlkZGxld2FyZSB1c2luZyBKV1QgYXV0aCB0b2tlbicpO1xuICAgICAgICB0aGlzLl9oYW5kbGVKV1RBUElNaWRkbGV3YXJlKHJlcSwgc2VjdXJpdHksIHNlY3JldCwgYXV0aG9yaXphdGlvbiwgbmV4dCk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgX2hhbmRsZUpXVEFQSU1pZGRsZXdhcmUoXG4gICAgcmVxOiAkUmVxdWVzdEV4dGVuZCxcbiAgICBzZWN1cml0eTogU2VjdXJpdHksXG4gICAgc2VjcmV0OiBzdHJpbmcsXG4gICAgYXV0aG9yaXphdGlvbjogc3RyaW5nLFxuICAgIG5leHQ6IEZ1bmN0aW9uXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IHsgc2NoZW1lLCB0b2tlbiB9ID0gcGFyc2VBdXRoVG9rZW5IZWFkZXIoYXV0aG9yaXphdGlvbik7XG4gICAgaWYgKHNjaGVtZS50b1VwcGVyQ2FzZSgpID09PSBUT0tFTl9CQVNJQy50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICAvLyB0aGlzIHNob3VsZCBoYXBwZW4gd2hlbiBjbGllbnQgdHJpZXMgdG8gbG9naW4gd2l0aCBhbiBleGlzdGluZyB1c2VyXG4gICAgICBjb25zdCBjcmVkZW50aWFscyA9IGNvbnZlcnRQYXlsb2FkVG9CYXNlNjQodG9rZW4pLnRvU3RyaW5nKCk7XG4gICAgICBjb25zdCB7IHVzZXIsIHBhc3N3b3JkIH0gPSBwYXJzZUJhc2ljUGF5bG9hZChjcmVkZW50aWFscykgYXMgQUVTUGF5bG9hZDtcbiAgICAgIHRoaXMuYXV0aGVudGljYXRlKHVzZXIsIHBhc3N3b3JkLCAoZXJyLCB1c2VyKTogdm9pZCA9PiB7XG4gICAgICAgIGlmICghZXJyKSB7XG4gICAgICAgICAgcmVxLnJlbW90ZV91c2VyID0gdXNlcjtcbiAgICAgICAgICBuZXh0KCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVxLnJlbW90ZV91c2VyID0gY3JlYXRlQW5vbnltb3VzUmVtb3RlVXNlcigpO1xuICAgICAgICAgIG5leHQoZXJyKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGp3dCBoYW5kbGVyXG4gICAgICBjb25zdCBjcmVkZW50aWFsczogYW55ID0gZ2V0TWlkZGxld2FyZUNyZWRlbnRpYWxzKHNlY3VyaXR5LCBzZWNyZXQsIGF1dGhvcml6YXRpb24pO1xuICAgICAgaWYgKGNyZWRlbnRpYWxzKSB7XG4gICAgICAgIC8vIGlmIHRoZSBzaWduYXR1cmUgaXMgdmFsaWQgd2UgcmVseSBvbiBpdFxuICAgICAgICByZXEucmVtb3RlX3VzZXIgPSBjcmVkZW50aWFscztcbiAgICAgICAgbmV4dCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gd2l0aCBKV1QgdGhyb3cgNDAxXG4gICAgICAgIG5leHQoRXJyb3JDb2RlLmdldEZvcmJpZGRlbihBUElfRVJST1IuQkFEX1VTRVJOQU1FX1BBU1NXT1JEKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfaGFuZGxlQUVTTWlkZGxld2FyZShcbiAgICByZXE6ICRSZXF1ZXN0RXh0ZW5kLFxuICAgIHNlY3VyaXR5OiBTZWN1cml0eSxcbiAgICBzZWNyZXQ6IHN0cmluZyxcbiAgICBhdXRob3JpemF0aW9uOiBzdHJpbmcsXG4gICAgbmV4dDogRnVuY3Rpb25cbiAgKTogdm9pZCB7XG4gICAgY29uc3QgY3JlZGVudGlhbHM6IGFueSA9IGdldE1pZGRsZXdhcmVDcmVkZW50aWFscyhzZWN1cml0eSwgc2VjcmV0LCBhdXRob3JpemF0aW9uKTtcbiAgICBpZiAoY3JlZGVudGlhbHMpIHtcbiAgICAgIGNvbnN0IHsgdXNlciwgcGFzc3dvcmQgfSA9IGNyZWRlbnRpYWxzO1xuICAgICAgdGhpcy5hdXRoZW50aWNhdGUodXNlciwgcGFzc3dvcmQsIChlcnIsIHVzZXIpOiB2b2lkID0+IHtcbiAgICAgICAgaWYgKCFlcnIpIHtcbiAgICAgICAgICByZXEucmVtb3RlX3VzZXIgPSB1c2VyO1xuICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXEucmVtb3RlX3VzZXIgPSBjcmVhdGVBbm9ueW1vdXNSZW1vdGVVc2VyKCk7XG4gICAgICAgICAgbmV4dChlcnIpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gd2UgZm9yY2UgbnBtIGNsaWVudCB0byBhc2sgYWdhaW4gd2l0aCBiYXNpYyBhdXRoZW50aWNhdGlvblxuICAgICAgcmV0dXJuIG5leHQoRXJyb3JDb2RlLmdldEJhZFJlcXVlc3QoQVBJX0VSUk9SLkJBRF9BVVRIX0hFQURFUikpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2lzUmVtb3RlVXNlclZhbGlkKHJlbW90ZV91c2VyOiBSZW1vdGVVc2VyKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIF8uaXNVbmRlZmluZWQocmVtb3RlX3VzZXIpID09PSBmYWxzZSAmJiBfLmlzVW5kZWZpbmVkKHJlbW90ZV91c2VyLm5hbWUpID09PSBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBKV1QgbWlkZGxld2FyZSBmb3IgV2ViVUlcbiAgICovXG4gIHB1YmxpYyB3ZWJVSUpXVG1pZGRsZXdhcmUoKTogRnVuY3Rpb24ge1xuICAgIHJldHVybiAocmVxOiAkUmVxdWVzdEV4dGVuZCwgcmVzOiAkUmVzcG9uc2VFeHRlbmQsIF9uZXh0OiBOZXh0RnVuY3Rpb24pOiB2b2lkID0+IHtcbiAgICAgIGlmICh0aGlzLl9pc1JlbW90ZVVzZXJWYWxpZChyZXEucmVtb3RlX3VzZXIpKSB7XG4gICAgICAgIHJldHVybiBfbmV4dCgpO1xuICAgICAgfVxuXG4gICAgICByZXEucGF1c2UoKTtcbiAgICAgIGNvbnN0IG5leHQgPSAoZXJyOiBhbnkgfCB2b2lkKTogdm9pZCA9PiB7XG4gICAgICAgIHJlcS5yZXN1bWUoKTtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIC8vIHJlcS5yZW1vdGVfdXNlci5lcnJvciA9IGVyci5tZXNzYWdlO1xuICAgICAgICAgIHJlcy5zdGF0dXMoZXJyLnN0YXR1c0NvZGUpLnNlbmQoZXJyLm1lc3NhZ2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIF9uZXh0KCk7XG4gICAgICB9O1xuXG4gICAgICBjb25zdCB7IGF1dGhvcml6YXRpb24gfSA9IHJlcS5oZWFkZXJzO1xuICAgICAgaWYgKF8uaXNOaWwoYXV0aG9yaXphdGlvbikpIHtcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICByZXR1cm4gbmV4dCgpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWlzQXV0aEhlYWRlclZhbGlkKGF1dGhvcml6YXRpb24pKSB7XG4gICAgICAgIHJldHVybiBuZXh0KEVycm9yQ29kZS5nZXRCYWRSZXF1ZXN0KEFQSV9FUlJPUi5CQURfQVVUSF9IRUFERVIpKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdG9rZW4gPSAoYXV0aG9yaXphdGlvbiB8fCAnJykucmVwbGFjZShgJHtUT0tFTl9CRUFSRVJ9IGAsICcnKTtcbiAgICAgIGlmICghdG9rZW4pIHtcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICByZXR1cm4gbmV4dCgpO1xuICAgICAgfVxuXG4gICAgICBsZXQgY3JlZGVudGlhbHM7XG4gICAgICB0cnkge1xuICAgICAgICBjcmVkZW50aWFscyA9IHZlcmlmeUpXVFBheWxvYWQodG9rZW4sIHRoaXMuY29uZmlnLnNlY3JldCk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgLy8gRklYTUU6IGludGVuZGVkIGJlaGF2aW91ciwgZG8gd2Ugd2FudCBpdD9cbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuX2lzUmVtb3RlVXNlclZhbGlkKGNyZWRlbnRpYWxzKSkge1xuICAgICAgICBjb25zdCB7IG5hbWUsIGdyb3VwcyB9ID0gY3JlZGVudGlhbHM7XG4gICAgICAgIHJlcS5yZW1vdGVfdXNlciA9IGNyZWF0ZVJlbW90ZVVzZXIobmFtZSwgZ3JvdXBzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlcS5yZW1vdGVfdXNlciA9IGNyZWF0ZUFub255bW91c1JlbW90ZVVzZXIoKTtcbiAgICAgIH1cbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIG5leHQoKTtcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGp3dEVuY3J5cHQodXNlcjogUmVtb3RlVXNlciwgc2lnbk9wdGlvbnM6IEpXVFNpZ25PcHRpb25zKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCB7IHJlYWxfZ3JvdXBzLCBuYW1lLCBncm91cHMgfSA9IHVzZXI7XG4gICAgY29uc3QgcmVhbEdyb3Vwc1ZhbGlkYXRlZCA9IF8uaXNOaWwocmVhbF9ncm91cHMpID8gW10gOiByZWFsX2dyb3VwcztcbiAgICBjb25zdCBncm91cGVkR3JvdXBzID0gXy5pc05pbChncm91cHMpXG4gICAgICA/IHJlYWxfZ3JvdXBzXG4gICAgICA6IEFycmF5LmZyb20obmV3IFNldChbLi4uZ3JvdXBzLmNvbmNhdChyZWFsR3JvdXBzVmFsaWRhdGVkKV0pKTtcbiAgICBjb25zdCBwYXlsb2FkOiBSZW1vdGVVc2VyID0ge1xuICAgICAgcmVhbF9ncm91cHM6IHJlYWxHcm91cHNWYWxpZGF0ZWQsXG4gICAgICBuYW1lLFxuICAgICAgZ3JvdXBzOiBncm91cGVkR3JvdXBzLFxuICAgIH07XG5cbiAgICBjb25zdCB0b2tlbjogc3RyaW5nID0gYXdhaXQgc2lnblBheWxvYWQocGF5bG9hZCwgdGhpcy5zZWNyZXQsIHNpZ25PcHRpb25zKTtcblxuICAgIHJldHVybiB0b2tlbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbmNyeXB0IGEgc3RyaW5nLlxuICAgKi9cbiAgcHVibGljIGFlc0VuY3J5cHQoYnVmOiBCdWZmZXIpOiBCdWZmZXIge1xuICAgIHJldHVybiBhZXNFbmNyeXB0KGJ1ZiwgdGhp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
|
|
488
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZGVidWciLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9sb2Rhc2giLCJfY29uZmlnIiwiX3NpZ25hdHVyZSIsIl91dGlscyIsIl9wbHVnaW5Mb2FkZXIiLCJfYXV0aFV0aWxzIiwiX2NvbnN0YW50cyIsIl9sb2dnZXIiLCJfdXRpbHMyIiwib2JqIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJvd25LZXlzIiwib2JqZWN0IiwiZW51bWVyYWJsZU9ubHkiLCJrZXlzIiwiT2JqZWN0IiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwic3ltYm9scyIsImZpbHRlciIsInN5bSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwidGFyZ2V0IiwiaSIsImFyZ3VtZW50cyIsImxlbmd0aCIsInNvdXJjZSIsImZvckVhY2giLCJrZXkiLCJfZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImRlZmluZVByb3BlcnR5IiwidmFsdWUiLCJfdG9Qcm9wZXJ0eUtleSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwiYXJnIiwiX3RvUHJpbWl0aXZlIiwiU3RyaW5nIiwiaW5wdXQiLCJoaW50IiwicHJpbSIsIlN5bWJvbCIsInRvUHJpbWl0aXZlIiwidW5kZWZpbmVkIiwicmVzIiwiY2FsbCIsIlR5cGVFcnJvciIsIk51bWJlciIsImRlYnVnIiwiYnVpbGREZWJ1ZyIsIkF1dGgiLCJjb25zdHJ1Y3RvciIsImNvbmZpZyIsImxvZ2dlciIsInNlY3JldCIsInBsdWdpbnMiLCJfbG9hZFBsdWdpbiIsIl9hcHBseURlZmF1bHRQbHVnaW5zIiwicGx1Z2luT3B0aW9ucyIsImF1dGhDb25mIiwiYXV0aCIsImh0cGFzc3dkIiwiYWxnb3JpdGhtIiwiaW5mbyIsImxvYWRQbHVnaW4iLCJwbHVnaW4iLCJhdXRoZW50aWNhdGUiLCJhbGxvd19hY2Nlc3MiLCJhbGxvd19wdWJsaXNoIiwiZ2V0RGVmYXVsdFBsdWdpbnMiLCJjaGFuZ2VQYXNzd29yZCIsInVzZXJuYW1lIiwicGFzc3dvcmQiLCJuZXdQYXNzd29yZCIsImNiIiwidmFsaWRQbHVnaW5zIiwiXyIsImlzRnVuY3Rpb24iLCJpc0VtcHR5IiwiRXJyb3JDb2RlIiwiZ2V0SW50ZXJuYWxFcnJvciIsIlNVUFBPUlRfRVJST1JTIiwiUExVR0lOX01JU1NJTkdfSU5URVJGQUNFIiwiaXNOaWwiLCJlcnIiLCJwcm9maWxlIiwiZXJyb3IiLCJzbGljZSIsInNlbGYiLCJuZXh0Iiwic2hpZnQiLCJncm91cHMiLCJpc1N0cmluZyIsImlzR3JvdXBWYWxpZCIsImlzQXJyYXkiLCJBUElfRVJST1IiLCJCQURfRk9STUFUX1VTRVJfR1JPVVAiLCJjcmVhdGVSZW1vdGVVc2VyIiwiYWRkX3VzZXIiLCJ1c2VyIiwibWV0aG9kIiwid2FybiIsIm9rIiwibWVzc2FnZSIsInBhY2thZ2VOYW1lIiwicGFja2FnZVZlcnNpb24iLCJjYWxsYmFjayIsInBrZ0FsbG93QWNjZXMiLCJuYW1lIiwidmVyc2lvbiIsInBrZyIsImFzc2lnbiIsImdldE1hdGNoZWRQYWNrYWdlc1NwZWMiLCJwYWNrYWdlcyIsImFsbG93X3VucHVibGlzaCIsImlzRXJyb3IiLCJhcGlKV1RtaWRkbGV3YXJlIiwiaGVscGVycyIsImNyZWF0ZUFub255bW91c1JlbW90ZVVzZXIiLCJyZXEiLCJfbmV4dCIsInBhdXNlIiwicmVzdW1lIiwicmVtb3RlX3VzZXIiLCJfaXNSZW1vdGVVc2VyVmFsaWQiLCJhdXRob3JpemF0aW9uIiwiaGVhZGVycyIsImlzQXV0aEhlYWRlclZhbGlkIiwiZ2V0QmFkUmVxdWVzdCIsIkJBRF9BVVRIX0hFQURFUiIsInNlY3VyaXR5IiwiZ2V0U2VjdXJpdHkiLCJpc0FFU0xlZ2FjeSIsIl9oYW5kbGVBRVNNaWRkbGV3YXJlIiwiX2hhbmRsZUpXVEFQSU1pZGRsZXdhcmUiLCJzY2hlbWUiLCJ0b2tlbiIsInBhcnNlQXV0aFRva2VuSGVhZGVyIiwidG9VcHBlckNhc2UiLCJUT0tFTl9CQVNJQyIsImNyZWRlbnRpYWxzIiwiY29udmVydFBheWxvYWRUb0Jhc2U2NCIsInRvU3RyaW5nIiwicGFyc2VCYXNpY1BheWxvYWQiLCJnZXRNaWRkbGV3YXJlQ3JlZGVudGlhbHMiLCJnZXRGb3JiaWRkZW4iLCJCQURfVVNFUk5BTUVfUEFTU1dPUkQiLCJpc1VuZGVmaW5lZCIsIndlYlVJSldUbWlkZGxld2FyZSIsInN0YXR1cyIsInN0YXR1c0NvZGUiLCJzZW5kIiwicmVwbGFjZSIsIlRPS0VOX0JFQVJFUiIsInZlcmlmeUpXVFBheWxvYWQiLCJqd3RFbmNyeXB0Iiwic2lnbk9wdGlvbnMiLCJyZWFsX2dyb3VwcyIsInJlYWxHcm91cHNWYWxpZGF0ZWQiLCJncm91cGVkR3JvdXBzIiwiQXJyYXkiLCJmcm9tIiwiU2V0IiwiY29uY2F0IiwicGF5bG9hZCIsInNpZ25QYXlsb2FkIiwiYWVzRW5jcnlwdCIsImJ1ZiIsIl9kZWZhdWx0IiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvYXV0aC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYnVpbGREZWJ1ZyBmcm9tICdkZWJ1Zyc7XG5pbXBvcnQgeyBOZXh0RnVuY3Rpb24gfSBmcm9tICdleHByZXNzJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5cbmltcG9ydCB7IGNyZWF0ZUFub255bW91c1JlbW90ZVVzZXIsIGNyZWF0ZVJlbW90ZVVzZXIgfSBmcm9tICdAdmVyZGFjY2lvL2NvbmZpZyc7XG5pbXBvcnQgeyBWZXJkYWNjaW9FcnJvciwgcGx1Z2luVXRpbHMgfSBmcm9tICdAdmVyZGFjY2lvL2NvcmUnO1xuaW1wb3J0IHsgYWVzRW5jcnlwdERlcHJlY2F0ZWQgYXMgYWVzRW5jcnlwdCwgc2lnblBheWxvYWQgfSBmcm9tICdAdmVyZGFjY2lvL3NpZ25hdHVyZSc7XG5pbXBvcnQge1xuICBBbGxvd0FjY2VzcyxcbiAgQ2FsbGJhY2ssXG4gIENvbmZpZyxcbiAgSldUU2lnbk9wdGlvbnMsXG4gIExvZ2dlcixcbiAgUGFja2FnZUFjY2VzcyxcbiAgUmVtb3RlVXNlcixcbiAgU2VjdXJpdHksXG59IGZyb20gJ0B2ZXJkYWNjaW8vdHlwZXMnO1xuaW1wb3J0IHsgZ2V0TWF0Y2hlZFBhY2thZ2VzU3BlYyB9IGZyb20gJ0B2ZXJkYWNjaW8vdXRpbHMnO1xuXG5pbXBvcnQgbG9hZFBsdWdpbiBmcm9tICcuLi9saWIvcGx1Z2luLWxvYWRlcic7XG5pbXBvcnQgeyAkUmVxdWVzdEV4dGVuZCwgJFJlc3BvbnNlRXh0ZW5kLCBBRVNQYXlsb2FkIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHtcbiAgZ2V0RGVmYXVsdFBsdWdpbnMsXG4gIGdldE1pZGRsZXdhcmVDcmVkZW50aWFscyxcbiAgZ2V0U2VjdXJpdHksXG4gIGlzQUVTTGVnYWN5LFxuICBpc0F1dGhIZWFkZXJWYWxpZCxcbiAgcGFyc2VBdXRoVG9rZW5IZWFkZXIsXG4gIHBhcnNlQmFzaWNQYXlsb2FkLFxuICB2ZXJpZnlKV1RQYXlsb2FkLFxufSBmcm9tICcuL2F1dGgtdXRpbHMnO1xuaW1wb3J0IHsgQVBJX0VSUk9SLCBTVVBQT1JUX0VSUk9SUywgVE9LRU5fQkFTSUMsIFRPS0VOX0JFQVJFUiB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCB7IEVycm9yQ29kZSwgY29udmVydFBheWxvYWRUb0Jhc2U2NCB9IGZyb20gJy4vdXRpbHMnO1xuXG5jb25zdCBkZWJ1ZyA9IGJ1aWxkRGVidWcoJ3ZlcmRhY2NpbzphdXRoJyk7XG5cbmNsYXNzIEF1dGgge1xuICBwdWJsaWMgY29uZmlnOiBDb25maWc7XG4gIHB1YmxpYyBsb2dnZXI6IExvZ2dlcjtcbiAgcHVibGljIHNlY3JldDogc3RyaW5nO1xuICBwdWJsaWMgcGx1Z2luczogcGx1Z2luVXRpbHMuQXV0aDxDb25maWc+W107XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKGNvbmZpZzogQ29uZmlnKSB7XG4gICAgdGhpcy5jb25maWcgPSBjb25maWc7XG4gICAgdGhpcy5sb2dnZXIgPSBsb2dnZXI7XG4gICAgdGhpcy5zZWNyZXQgPSBjb25maWcuc2VjcmV0O1xuICAgIHRoaXMucGx1Z2lucyA9IHRoaXMuX2xvYWRQbHVnaW4oY29uZmlnKTtcbiAgICB0aGlzLl9hcHBseURlZmF1bHRQbHVnaW5zKCk7XG4gIH1cblxuICBwcml2YXRlIF9sb2FkUGx1Z2luKGNvbmZpZzogQ29uZmlnKTogcGx1Z2luVXRpbHMuQXV0aDxDb25maWc+W10ge1xuICAgIGNvbnN0IHBsdWdpbk9wdGlvbnMgPSB7XG4gICAgICBjb25maWcsXG4gICAgICBsb2dnZXI6IHRoaXMubG9nZ2VyLFxuICAgIH07XG5cbiAgICBsZXQgYXV0aENvbmYgPSB7IC4uLmNvbmZpZy5hdXRoIH07XG4gICAgaWYgKGF1dGhDb25mPy5odHBhc3N3ZCkge1xuICAgICAgLy8gc3BlY2lhbCBjYXNlIGZvciBodHBhc3N3ZCBwbHVnaW4sIHRoZSB2NiB2ZXJzaW9uIHVzZXMgYmNyeXB0IGJ5IGRlZmF1bHRcbiAgICAgIC8vIDUueCBlbmZvcmNlcyBjcnlwdCB0byBhdm9pZCBicmVha2luZyBjaGFuZ2VzLCBidXQgaXMgaGlnaGx5IHJlY29tbWVuZGVkIHVzaW5nXG4gICAgICAvLyBiY3J5cHQgaW5zdGVhZC5cbiAgICAgIGlmICghYXV0aENvbmYuaHRwYXNzd2QuYWxnb3JpdGhtKSB7XG4gICAgICAgIGF1dGhDb25mLmh0cGFzc3dkLmFsZ29yaXRobSA9ICdjcnlwdCc7XG4gICAgICAgIHRoaXMubG9nZ2VyLmluZm8oXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1sZW5cbiAgICAgICAgICAndGhlIFwiY3J5cHRcIiBhbGdvcml0aG0gaXMgZGVwcmVjYXRlZCBjb25zaWRlciBzd2l0Y2ggdG8gXCJiY3J5cHRcIiBpbiB0aGUgY29uZmlndXJhdGlvbiBmaWxlLiBSZWFkIHRoZSBkb2N1bWVudGF0aW9uIGZvciBhZGRpdGlvbmFsIGRldGFpbHMnXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGxvYWRQbHVnaW48cGx1Z2luVXRpbHMuQXV0aDxDb25maWc+PihcbiAgICAgIGNvbmZpZyxcbiAgICAgIGF1dGhDb25mLFxuICAgICAgcGx1Z2luT3B0aW9ucyxcbiAgICAgIChwbHVnaW46IHBsdWdpblV0aWxzLkF1dGg8Q29uZmlnPik6IGJvb2xlYW4gPT4ge1xuICAgICAgICBjb25zdCB7IGF1dGhlbnRpY2F0ZSwgYWxsb3dfYWNjZXNzLCBhbGxvd19wdWJsaXNoIH0gPSBwbHVnaW47XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgcmV0dXJuIGF1dGhlbnRpY2F0ZSB8fCBhbGxvd19hY2Nlc3MgfHwgYWxsb3dfcHVibGlzaDtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBfYXBwbHlEZWZhdWx0UGx1Z2lucygpOiB2b2lkIHtcbiAgICB0aGlzLnBsdWdpbnMucHVzaChnZXREZWZhdWx0UGx1Z2lucyh0aGlzLmxvZ2dlcikpO1xuICB9XG5cbiAgcHVibGljIGNoYW5nZVBhc3N3b3JkKFxuICAgIHVzZXJuYW1lOiBzdHJpbmcsXG4gICAgcGFzc3dvcmQ6IHN0cmluZywgLy8gcHJhZ21hOiBhbGxvd2xpc3Qgc2VjcmV0XG4gICAgbmV3UGFzc3dvcmQ6IHN0cmluZywgLy8gcHJhZ21hOiBhbGxvd2xpc3Qgc2VjcmV0XG4gICAgY2I6IENhbGxiYWNrXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IHZhbGlkUGx1Z2lucyA9IF8uZmlsdGVyKHRoaXMucGx1Z2lucywgKHBsdWdpbikgPT4gXy5pc0Z1bmN0aW9uKHBsdWdpbi5jaGFuZ2VQYXNzd29yZCkpO1xuXG4gICAgaWYgKF8uaXNFbXB0eSh2YWxpZFBsdWdpbnMpKSB7XG4gICAgICByZXR1cm4gY2IoRXJyb3JDb2RlLmdldEludGVybmFsRXJyb3IoU1VQUE9SVF9FUlJPUlMuUExVR0lOX01JU1NJTkdfSU5URVJGQUNFKSk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBwbHVnaW4gb2YgdmFsaWRQbHVnaW5zKSB7XG4gICAgICBpZiAoXy5pc05pbChwbHVnaW4pIHx8IF8uaXNGdW5jdGlvbihwbHVnaW4uY2hhbmdlUGFzc3dvcmQpID09PSBmYWxzZSkge1xuICAgICAgICBkZWJ1ZygnYXV0aCBwbHVnaW4gZG9lcyBub3QgaW1wbGVtZW50IGNoYW5nZVBhc3N3b3JkLCB0cnlpbmcgbmV4dCBvbmUnKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWJ1ZygndXBkYXRpbmcgcGFzc3dvcmQgZm9yICVvJywgdXNlcm5hbWUpO1xuICAgICAgICBwbHVnaW4uY2hhbmdlUGFzc3dvcmQhKHVzZXJuYW1lLCBwYXNzd29yZCwgbmV3UGFzc3dvcmQsIChlcnIsIHByb2ZpbGUpOiB2b2lkID0+IHtcbiAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcihcbiAgICAgICAgICAgICAgeyB1c2VybmFtZSwgZXJyIH0sXG4gICAgICAgICAgICAgIGBBbiBlcnJvciBoYXMgYmVlbiBwcm9kdWNlZFxuICAgICAgICAgICAgdXBkYXRpbmcgdGhlIHBhc3N3b3JkIGZvciBAe3VzZXJuYW1lfS4gRXJyb3I6IEB7ZXJyLm1lc3NhZ2V9YFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybiBjYihlcnIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmxvZ2dlci5pbmZvKHsgdXNlcm5hbWUgfSwgJ3VwZGF0ZWQgcGFzc3dvcmQgZm9yIEB7dXNlcm5hbWV9IHdhcyBzdWNjZXNzZnVsJyk7XG4gICAgICAgICAgcmV0dXJuIGNiKG51bGwsIHByb2ZpbGUpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXV0aGVudGljYXRlKHVzZXJuYW1lOiBzdHJpbmcsIHBhc3N3b3JkOiBzdHJpbmcsIGNiOiBDYWxsYmFjayk6IHZvaWQge1xuICAgIGNvbnN0IHBsdWdpbnMgPSB0aGlzLnBsdWdpbnMuc2xpY2UoMCk7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgKGZ1bmN0aW9uIG5leHQoKTogdm9pZCB7XG4gICAgICBjb25zdCBwbHVnaW4gPSBwbHVnaW5zLnNoaWZ0KCkgYXMgcGx1Z2luVXRpbHMuQXV0aDxDb25maWc+O1xuICAgICAgaWYgKF8uaXNGdW5jdGlvbihwbHVnaW4uYXV0aGVudGljYXRlKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuIG5leHQoKTtcbiAgICAgIH1cbiAgICAgIGRlYnVnKCdhdXRoZW50aWNhdGluZyAlbycsIHVzZXJuYW1lKTtcbiAgICAgIHBsdWdpbi5hdXRoZW50aWNhdGUodXNlcm5hbWUsIHBhc3N3b3JkLCBmdW5jdGlvbiAoZXJyLCBncm91cHMpOiB2b2lkIHtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIHNlbGYubG9nZ2VyLmVycm9yKFxuICAgICAgICAgICAgeyB1c2VybmFtZSwgZXJyIH0sXG4gICAgICAgICAgICAnYXV0aGVudGljYXRpbmcgZm9yIHVzZXIgQHt1c2VybmFtZX0gZmFpbGVkLiBFcnJvcjogQHtlcnIubWVzc2FnZX0nXG4gICAgICAgICAgKTtcbiAgICAgICAgICByZXR1cm4gY2IoZXJyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEV4cGVjdDogU0tJUCBpZiBncm91cHMgaXMgZmFsc2V5IGFuZCBub3QgYW4gYXJyYXlcbiAgICAgICAgLy8gICAgICAgICB3aXRoIGF0IGxlYXN0IG9uZSBpdGVtICh0cnV0aHkgbGVuZ3RoKVxuICAgICAgICAvLyBFeHBlY3Q6IENPTlRJTlVFIG90aGVyd2lzZSAod2lsbCBlcnJvciBpZiBncm91cHMgaXMgbm90XG4gICAgICAgIC8vICAgICAgICAgYW4gYXJyYXksIGJ1dCB0aGlzIGlzIGN1cnJlbnQgYmVoYXZpb3IpXG4gICAgICAgIC8vIENhdmVhdDogU1RSSU5HIChpZiB2YWxpZCkgd2lsbCBwYXNzIHN1Y2Nlc3NmdWxseVxuICAgICAgICAvLyAgICAgICAgIGJ1ZyBnaXZlIHVuZXhwZWN0ZWQgcmVzdWx0c1xuICAgICAgICAvLyBJbmZvOiBDYW5ub3QgdXNlIGA9PSBmYWxzZSB0byBjaGVjayBmYWxzZXkgdmFsdWVzYFxuICAgICAgICBpZiAoISFncm91cHMgJiYgZ3JvdXBzLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICAgIC8vIFRPRE86IGNyZWF0ZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGV4cGVjdGF0aW9uc1xuICAgICAgICAgIGlmIChfLmlzU3RyaW5nKGdyb3VwcykpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3BsdWdpbiBncm91cCBlcnJvcjogaW52YWxpZCB0eXBlIGZvciBmdW5jdGlvbicpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBpc0dyb3VwVmFsaWQ6IGJvb2xlYW4gPSBfLmlzQXJyYXkoZ3JvdXBzKTtcbiAgICAgICAgICBpZiAoIWlzR3JvdXBWYWxpZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihBUElfRVJST1IuQkFEX0ZPUk1BVF9VU0VSX0dST1VQKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZGVidWcoJ2F1dGhlbnRpY2F0aW9uIGZvciB1c2VyICVvIHdhcyBzdWNjZXNzZnVsbHkuIEdyb3VwczogJW8nLCB1c2VybmFtZSwgZ3JvdXBzKTtcbiAgICAgICAgICByZXR1cm4gY2IoZXJyLCBjcmVhdGVSZW1vdGVVc2VyKHVzZXJuYW1lLCBncm91cHMpKTtcbiAgICAgICAgfVxuICAgICAgICBuZXh0KCk7XG4gICAgICB9KTtcbiAgICB9KSgpO1xuICB9XG5cbiAgcHVibGljIGFkZF91c2VyKHVzZXI6IHN0cmluZywgcGFzc3dvcmQ6IHN0cmluZywgY2I6IENhbGxiYWNrKTogdm9pZCB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgY29uc3QgcGx1Z2lucyA9IHRoaXMucGx1Z2lucy5zbGljZSgwKTtcbiAgICBkZWJ1ZygnYWRkIHVzZXIgJW8nLCB1c2VyKTtcbiAgICAoZnVuY3Rpb24gbmV4dCgpOiB2b2lkIHtcbiAgICAgIGNvbnN0IHBsdWdpbiA9IHBsdWdpbnMuc2hpZnQoKSBhcyBwbHVnaW5VdGlscy5BdXRoPENvbmZpZz47XG4gICAgICBsZXQgbWV0aG9kID0gJ2FkZHVzZXInO1xuICAgICAgaWYgKF8uaXNGdW5jdGlvbihwbHVnaW5bbWV0aG9kXSkgPT09IGZhbHNlKSB7XG4gICAgICAgIG1ldGhvZCA9ICdhZGRfdXNlcic7XG4gICAgICAgIHNlbGYubG9nZ2VyLndhcm4oXG4gICAgICAgICAgJ3RoZSBwbHVnaW4gbWV0aG9kIGFkZF91c2VyIGluIHRoZSBhdXRoIHBsdWdpbiBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gbmV4dCBtYWpvciByZWxlYXNlLCBub3RpZnkgdG8gdGhlIHBsdWdpbiBhdXRob3InXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGlmIChfLmlzRnVuY3Rpb24ocGx1Z2luW21ldGhvZF0pID09PSBmYWxzZSkge1xuICAgICAgICBuZXh0KCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBwLmFkZF91c2VyKCkgZXhlY3V0aW9uXG4gICAgICAgIHBsdWdpblttZXRob2RdKHVzZXIsIHBhc3N3b3JkLCBmdW5jdGlvbiAoZXJyLCBvayk6IHZvaWQge1xuICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgIHNlbGYubG9nZ2VyLmVycm9yKFxuICAgICAgICAgICAgICB7IHVzZXIsIGVycjogZXJyLm1lc3NhZ2UgfSxcbiAgICAgICAgICAgICAgJ3RoZSB1c2VyIEB7dXNlcn0gY291bGQgbm90IGJlaW5nIGFkZGVkLiBFcnJvcjogQHtlcnJ9J1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybiBjYihlcnIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAob2spIHtcbiAgICAgICAgICAgIHNlbGYubG9nZ2VyLmluZm8oeyB1c2VyIH0sICd0aGUgdXNlciBAe3VzZXJ9IGhhcyBiZWVuIGFkZGVkJyk7XG4gICAgICAgICAgICByZXR1cm4gc2VsZi5hdXRoZW50aWNhdGUodXNlciwgcGFzc3dvcmQsIGNiKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbmV4dCgpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFsbG93IHVzZXIgdG8gYWNjZXNzIGEgcGFja2FnZS5cbiAgICovXG4gIHB1YmxpYyBhbGxvd19hY2Nlc3MoXG4gICAgeyBwYWNrYWdlTmFtZSwgcGFja2FnZVZlcnNpb24gfTogcGx1Z2luVXRpbHMuQXV0aFBsdWdpblBhY2thZ2UsXG4gICAgdXNlcjogUmVtb3RlVXNlcixcbiAgICBjYWxsYmFjazogQ2FsbGJhY2tcbiAgKTogdm9pZCB7XG4gICAgY29uc3QgcGx1Z2lucyA9IHRoaXMucGx1Z2lucy5zbGljZSgwKTtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICBjb25zdCBwa2dBbGxvd0FjY2VzOiBBbGxvd0FjY2VzcyA9IHsgbmFtZTogcGFja2FnZU5hbWUsIHZlcnNpb246IHBhY2thZ2VWZXJzaW9uIH07XG4gICAgY29uc3QgcGtnID0gT2JqZWN0LmFzc2lnbihcbiAgICAgIHt9LFxuICAgICAgcGtnQWxsb3dBY2NlcyxcbiAgICAgIGdldE1hdGNoZWRQYWNrYWdlc1NwZWMocGFja2FnZU5hbWUsIHRoaXMuY29uZmlnLnBhY2thZ2VzKVxuICAgICkgYXMgQWxsb3dBY2Nlc3MgJiBQYWNrYWdlQWNjZXNzO1xuICAgIGRlYnVnKCdhbGxvdyBhY2Nlc3MgZm9yICVvJywgcGFja2FnZU5hbWUpO1xuXG4gICAgKGZ1bmN0aW9uIG5leHQoKTogdm9pZCB7XG4gICAgICBjb25zdCBwbHVnaW46IHBsdWdpblV0aWxzLkF1dGg8dW5rbm93bj4gPSBwbHVnaW5zLnNoaWZ0KCkgYXMgcGx1Z2luVXRpbHMuQXV0aDxDb25maWc+O1xuXG4gICAgICBpZiAoXy5pc05pbChwbHVnaW4pIHx8IF8uaXNGdW5jdGlvbihwbHVnaW4uYWxsb3dfYWNjZXNzKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuIG5leHQoKTtcbiAgICAgIH1cblxuICAgICAgcGx1Z2luLmFsbG93X2FjY2VzcyEodXNlciwgcGtnLCBmdW5jdGlvbiAoZXJyOiBWZXJkYWNjaW9FcnJvciB8IG51bGwsIG9rPzogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgc2VsZi5sb2dnZXIuZXJyb3IoXG4gICAgICAgICAgICB7IHBhY2thZ2VOYW1lLCBlcnIgfSxcbiAgICAgICAgICAgICdmb3JiaWRkZW4gYWNjZXNzIGZvciBAe3BhY2thZ2VOYW1lfS4gRXJyb3I6IEB7ZXJyLm1lc3NhZ2V9J1xuICAgICAgICAgICk7XG4gICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob2spIHtcbiAgICAgICAgICBzZWxmLmxvZ2dlci5pbmZvKHsgcGFja2FnZU5hbWUgfSwgJ2FsbG93ZWQgYWNjZXNzIGZvciBAe3BhY2thZ2VOYW1lfScpO1xuICAgICAgICAgIHJldHVybiBjYWxsYmFjayhudWxsLCBvayk7XG4gICAgICAgIH1cblxuICAgICAgICBuZXh0KCk7IC8vIGNiKG51bGwsIGZhbHNlKSBjYXVzZXMgbmV4dCBwbHVnaW4gdG8gcm9sbFxuICAgICAgfSk7XG4gICAgfSkoKTtcbiAgfVxuXG4gIHB1YmxpYyBhbGxvd191bnB1Ymxpc2goXG4gICAgeyBwYWNrYWdlTmFtZSwgcGFja2FnZVZlcnNpb24gfTogcGx1Z2luVXRpbHMuQXV0aFBsdWdpblBhY2thZ2UsXG4gICAgdXNlcjogUmVtb3RlVXNlcixcbiAgICBjYWxsYmFjazogQ2FsbGJhY2tcbiAgKTogdm9pZCB7XG4gICAgY29uc3QgcGtnID0gT2JqZWN0LmFzc2lnbihcbiAgICAgIHsgbmFtZTogcGFja2FnZU5hbWUsIHZlcnNpb246IHBhY2thZ2VWZXJzaW9uIH0sXG4gICAgICBnZXRNYXRjaGVkUGFja2FnZXNTcGVjKHBhY2thZ2VOYW1lLCB0aGlzLmNvbmZpZy5wYWNrYWdlcylcbiAgICApO1xuICAgIGRlYnVnKCdhbGxvdyB1bnB1Ymxpc2ggZm9yICVvJywgcGFja2FnZU5hbWUpO1xuICAgIGZvciAoY29uc3QgcGx1Z2luIG9mIHRoaXMucGx1Z2lucykge1xuICAgICAgaWYgKF8uaXNOaWwocGx1Z2luKSB8fCBfLmlzRnVuY3Rpb24ocGx1Z2luLmFsbG93X3VucHVibGlzaCkgPT09IGZhbHNlKSB7XG4gICAgICAgIGRlYnVnKCdhbGxvdyB1bnB1Ymxpc2ggZm9yICVvIHBsdWdpbiBkb2VzIG5vdCBpbXBsZW1lbnQgYWxsb3dfdW5wdWJsaXNoJywgcGFja2FnZU5hbWUpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgcGx1Z2luLmFsbG93X3VucHVibGlzaCEodXNlciwgcGtnLCAoZXJyLCBvazogYm9vbGVhbik6IHZvaWQgPT4ge1xuICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKFxuICAgICAgICAgICAgICB7IHBhY2thZ2VOYW1lLCB1c2VyOiB1c2VyPy5uYW1lIH0sXG4gICAgICAgICAgICAgICdAe3VzZXJ9IGZvcmJpZGRlbiBwdWJsaXNoIGZvciBAe3BhY2thZ2VOYW1lfSwgaXQgd2lsbCBmYWxsYmFjayBvbiB1bnB1Ymxpc2ggcGVybWlzc2lvbnMnXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKF8uaXNOaWwob2spID09PSB0cnVlKSB7XG4gICAgICAgICAgICBkZWJ1Zygnd2UgYnlwYXNzIHVucHVibGlzaCBmb3IgJW8sIHB1Ymxpc2ggd2lsbCBoYW5kbGUgdGhlIGFjY2VzcycsIHBhY2thZ2VOYW1lKTtcbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWxsb3dfcHVibGlzaCguLi5hcmd1bWVudHMpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChvaykge1xuICAgICAgICAgICAgdGhpcy5sb2dnZXIuaW5mbyhcbiAgICAgICAgICAgICAgeyBwYWNrYWdlTmFtZSwgdXNlcjogdXNlcj8ubmFtZSB9LFxuICAgICAgICAgICAgICAnQHt1c2VyfSBhbGxvd2VkIHVucHVibGlzaCBmb3IgQHtwYWNrYWdlTmFtZX0nXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwsIG9rKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBbGxvdyB1c2VyIHRvIHB1Ymxpc2ggYSBwYWNrYWdlLlxuICAgKi9cbiAgcHVibGljIGFsbG93X3B1Ymxpc2goXG4gICAgeyBwYWNrYWdlTmFtZSwgcGFja2FnZVZlcnNpb24gfTogcGx1Z2luVXRpbHMuQXV0aFBsdWdpblBhY2thZ2UsXG4gICAgdXNlcjogUmVtb3RlVXNlcixcbiAgICBjYWxsYmFjazogQ2FsbGJhY2tcbiAgKTogdm9pZCB7XG4gICAgY29uc3QgcGx1Z2lucyA9IHRoaXMucGx1Z2lucy5zbGljZSgwKTtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICBjb25zdCBwa2cgPSBPYmplY3QuYXNzaWduKFxuICAgICAgeyBuYW1lOiBwYWNrYWdlTmFtZSwgdmVyc2lvbjogcGFja2FnZVZlcnNpb24gfSxcbiAgICAgIGdldE1hdGNoZWRQYWNrYWdlc1NwZWMocGFja2FnZU5hbWUsIHRoaXMuY29uZmlnLnBhY2thZ2VzKVxuICAgICk7XG4gICAgZGVidWcoJ2FsbG93IHB1Ymxpc2ggZm9yICVvIGluaXQgfCBwbHVnaW5zOiAlbycsIHBhY2thZ2VOYW1lLCBwbHVnaW5zKTtcbiAgICAoZnVuY3Rpb24gbmV4dCgpOiB2b2lkIHtcbiAgICAgIGNvbnN0IHBsdWdpbiA9IHBsdWdpbnMuc2hpZnQoKTtcblxuICAgICAgaWYgKF8uaXNOaWwocGx1Z2luKSB8fCBfLmlzRnVuY3Rpb24ocGx1Z2luLmFsbG93X3B1Ymxpc2gpID09PSBmYWxzZSkge1xuICAgICAgICBkZWJ1ZygnYWxsb3cgcHVibGlzaCBmb3IgJW8gcGx1Z2luIGRvZXMgbm90IGltcGxlbWVudCBhbGxvd19wdWJsaXNoJywgcGFja2FnZU5hbWUpO1xuICAgICAgICByZXR1cm4gbmV4dCgpO1xuICAgICAgfVxuXG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICBwbHVnaW4uYWxsb3dfcHVibGlzaCh1c2VyLCBwa2csIChlcnI6IGFueSwgb2s6IGJvb2xlYW4pOiB2b2lkID0+IHtcbiAgICAgICAgaWYgKF8uaXNOaWwoZXJyKSA9PT0gZmFsc2UgJiYgXy5pc0Vycm9yKGVycikpIHtcbiAgICAgICAgICBzZWxmLmxvZ2dlci5lcnJvcihcbiAgICAgICAgICAgIHsgcGFja2FnZU5hbWUsIHVzZXI6IHVzZXI/Lm5hbWUgfSxcbiAgICAgICAgICAgICdAe3VzZXJ9IGlzIGZvcmJpZGRlbiBwdWJsaXNoIGZvciBAe3BhY2thZ2VOYW1lfSdcbiAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9rKSB7XG4gICAgICAgICAgc2VsZi5sb2dnZXIuaW5mbyhcbiAgICAgICAgICAgIHsgcGFja2FnZU5hbWUsIHVzZXI6IHVzZXI/Lm5hbWUgfSxcbiAgICAgICAgICAgICdAe3VzZXJ9IGlzIGFsbG93ZWQgcHVibGlzaCBmb3IgQHtwYWNrYWdlTmFtZX0nXG4gICAgICAgICAgKTtcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCwgb2spO1xuICAgICAgICB9XG4gICAgICAgIGRlYnVnKCdhbGxvdyBwdWJsaXNoIHNraXAgdmFsaWRhdGlvbiBmb3IgJW8nLCBwYWNrYWdlTmFtZSk7XG4gICAgICAgIG5leHQoKTsgLy8gY2IobnVsbCwgZmFsc2UpIGNhdXNlcyBuZXh0IHBsdWdpbiB0byByb2xsXG4gICAgICB9KTtcbiAgICB9KSgpO1xuICB9XG5cbiAgcHVibGljIGFwaUpXVG1pZGRsZXdhcmUoKSB7XG4gICAgY29uc3QgcGx1Z2lucyA9IHRoaXMucGx1Z2lucy5zbGljZSgwKTtcbiAgICBjb25zdCBoZWxwZXJzID0geyBjcmVhdGVBbm9ueW1vdXNSZW1vdGVVc2VyLCBjcmVhdGVSZW1vdGVVc2VyIH07XG4gICAgZm9yIChjb25zdCBwbHVnaW4gb2YgcGx1Z2lucykge1xuICAgICAgaWYgKHBsdWdpbi5hcGlKV1RtaWRkbGV3YXJlKSB7XG4gICAgICAgIHJldHVybiBwbHVnaW4uYXBpSldUbWlkZGxld2FyZShoZWxwZXJzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gKHJlcTogJFJlcXVlc3RFeHRlbmQsIHJlczogJFJlc3BvbnNlRXh0ZW5kLCBfbmV4dDogTmV4dEZ1bmN0aW9uKTogdm9pZCA9PiB7XG4gICAgICByZXEucGF1c2UoKTtcblxuICAgICAgY29uc3QgbmV4dCA9IGZ1bmN0aW9uIChlcnI6IGFueSB8IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgcmVxLnJlc3VtZSgpO1xuICAgICAgICAvLyB1bmNvbW1lbnQgdGhpcyB0byByZWplY3QgdXNlcnMgd2l0aCBiYWQgYXV0aCBoZWFkZXJzXG4gICAgICAgIC8vIHJldHVybiBfbmV4dC5hcHBseShudWxsLCBhcmd1bWVudHMpXG4gICAgICAgIC8vIHN3YWxsb3cgZXJyb3IsIHVzZXIgcmVtYWlucyB1bmF1dGhvcml6ZWRcbiAgICAgICAgLy8gc2V0IHJlbW90ZVVzZXJFcnJvciB0byBpbmRpY2F0ZSB0aGF0IHVzZXIgd2FzIGF0dGVtcHRpbmcgYXV0aGVudGljYXRpb25cbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIHJlcS5yZW1vdGVfdXNlci5lcnJvciA9IGVyci5tZXNzYWdlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfbmV4dCgpO1xuICAgICAgfTtcblxuICAgICAgaWYgKHRoaXMuX2lzUmVtb3RlVXNlclZhbGlkKHJlcS5yZW1vdGVfdXNlcikpIHtcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICByZXR1cm4gbmV4dCgpO1xuICAgICAgfVxuXG4gICAgICAvLyBpbiBjYXNlIGF1dGggaGVhZGVyIGRvZXMgbm90IGV4aXN0IHdlIHJldHVybiBhbm9ueW1vdXMgZnVuY3Rpb25cbiAgICAgIHJlcS5yZW1vdGVfdXNlciA9IGNyZWF0ZUFub255bW91c1JlbW90ZVVzZXIoKTtcblxuICAgICAgY29uc3QgeyBhdXRob3JpemF0aW9uIH0gPSByZXEuaGVhZGVycztcbiAgICAgIGlmIChfLmlzTmlsKGF1dGhvcml6YXRpb24pKSB7XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgcmV0dXJuIG5leHQoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFpc0F1dGhIZWFkZXJWYWxpZChhdXRob3JpemF0aW9uKSkge1xuICAgICAgICBkZWJ1ZygnYXBpIG1pZGRsZXdhcmUgYXV0aCBoZWF0aGVyIGlzIG5vdCB2YWxpZCcpO1xuICAgICAgICByZXR1cm4gbmV4dChFcnJvckNvZGUuZ2V0QmFkUmVxdWVzdChBUElfRVJST1IuQkFEX0FVVEhfSEVBREVSKSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHNlY3VyaXR5OiBTZWN1cml0eSA9IGdldFNlY3VyaXR5KHRoaXMuY29uZmlnKTtcbiAgICAgIGNvbnN0IHsgc2VjcmV0IH0gPSB0aGlzLmNvbmZpZztcblxuICAgICAgaWYgKGlzQUVTTGVnYWN5KHNlY3VyaXR5KSkge1xuICAgICAgICBkZWJ1ZygnYXBpIG1pZGRsZXdhcmUgdXNpbmcgbGVnYWN5IGF1dGggdG9rZW4nKTtcbiAgICAgICAgdGhpcy5faGFuZGxlQUVTTWlkZGxld2FyZShyZXEsIHNlY3VyaXR5LCBzZWNyZXQsIGF1dGhvcml6YXRpb24sIG5leHQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVidWcoJ2FwaSBtaWRkbGV3YXJlIHVzaW5nIEpXVCBhdXRoIHRva2VuJyk7XG4gICAgICAgIHRoaXMuX2hhbmRsZUpXVEFQSU1pZGRsZXdhcmUocmVxLCBzZWN1cml0eSwgc2VjcmV0LCBhdXRob3JpemF0aW9uLCBuZXh0KTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBfaGFuZGxlSldUQVBJTWlkZGxld2FyZShcbiAgICByZXE6ICRSZXF1ZXN0RXh0ZW5kLFxuICAgIHNlY3VyaXR5OiBTZWN1cml0eSxcbiAgICBzZWNyZXQ6IHN0cmluZyxcbiAgICBhdXRob3JpemF0aW9uOiBzdHJpbmcsXG4gICAgbmV4dDogRnVuY3Rpb25cbiAgKTogdm9pZCB7XG4gICAgY29uc3QgeyBzY2hlbWUsIHRva2VuIH0gPSBwYXJzZUF1dGhUb2tlbkhlYWRlcihhdXRob3JpemF0aW9uKTtcbiAgICBpZiAoc2NoZW1lLnRvVXBwZXJDYXNlKCkgPT09IFRPS0VOX0JBU0lDLnRvVXBwZXJDYXNlKCkpIHtcbiAgICAgIC8vIHRoaXMgc2hvdWxkIGhhcHBlbiB3aGVuIGNsaWVudCB0cmllcyB0byBsb2dpbiB3aXRoIGFuIGV4aXN0aW5nIHVzZXJcbiAgICAgIGNvbnN0IGNyZWRlbnRpYWxzID0gY29udmVydFBheWxvYWRUb0Jhc2U2NCh0b2tlbikudG9TdHJpbmcoKTtcbiAgICAgIGNvbnN0IHsgdXNlciwgcGFzc3dvcmQgfSA9IHBhcnNlQmFzaWNQYXlsb2FkKGNyZWRlbnRpYWxzKSBhcyBBRVNQYXlsb2FkO1xuICAgICAgdGhpcy5hdXRoZW50aWNhdGUodXNlciwgcGFzc3dvcmQsIChlcnIsIHVzZXIpOiB2b2lkID0+IHtcbiAgICAgICAgaWYgKCFlcnIpIHtcbiAgICAgICAgICByZXEucmVtb3RlX3VzZXIgPSB1c2VyO1xuICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXEucmVtb3RlX3VzZXIgPSBjcmVhdGVBbm9ueW1vdXNSZW1vdGVVc2VyKCk7XG4gICAgICAgICAgbmV4dChlcnIpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gand0IGhhbmRsZXJcbiAgICAgIGNvbnN0IGNyZWRlbnRpYWxzOiBhbnkgPSBnZXRNaWRkbGV3YXJlQ3JlZGVudGlhbHMoc2VjdXJpdHksIHNlY3JldCwgYXV0aG9yaXphdGlvbik7XG4gICAgICBpZiAoY3JlZGVudGlhbHMpIHtcbiAgICAgICAgLy8gaWYgdGhlIHNpZ25hdHVyZSBpcyB2YWxpZCB3ZSByZWx5IG9uIGl0XG4gICAgICAgIHJlcS5yZW1vdGVfdXNlciA9IGNyZWRlbnRpYWxzO1xuICAgICAgICBuZXh0KCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyB3aXRoIEpXVCB0aHJvdyA0MDFcbiAgICAgICAgbmV4dChFcnJvckNvZGUuZ2V0Rm9yYmlkZGVuKEFQSV9FUlJPUi5CQURfVVNFUk5BTUVfUEFTU1dPUkQpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9oYW5kbGVBRVNNaWRkbGV3YXJlKFxuICAgIHJlcTogJFJlcXVlc3RFeHRlbmQsXG4gICAgc2VjdXJpdHk6IFNlY3VyaXR5LFxuICAgIHNlY3JldDogc3RyaW5nLFxuICAgIGF1dGhvcml6YXRpb246IHN0cmluZyxcbiAgICBuZXh0OiBGdW5jdGlvblxuICApOiB2b2lkIHtcbiAgICBjb25zdCBjcmVkZW50aWFsczogYW55ID0gZ2V0TWlkZGxld2FyZUNyZWRlbnRpYWxzKHNlY3VyaXR5LCBzZWNyZXQsIGF1dGhvcml6YXRpb24pO1xuICAgIGlmIChjcmVkZW50aWFscykge1xuICAgICAgY29uc3QgeyB1c2VyLCBwYXNzd29yZCB9ID0gY3JlZGVudGlhbHM7XG4gICAgICB0aGlzLmF1dGhlbnRpY2F0ZSh1c2VyLCBwYXNzd29yZCwgKGVyciwgdXNlcik6IHZvaWQgPT4ge1xuICAgICAgICBpZiAoIWVycikge1xuICAgICAgICAgIHJlcS5yZW1vdGVfdXNlciA9IHVzZXI7XG4gICAgICAgICAgbmV4dCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlcS5yZW1vdGVfdXNlciA9IGNyZWF0ZUFub255bW91c1JlbW90ZVVzZXIoKTtcbiAgICAgICAgICBuZXh0KGVycik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyB3ZSBmb3JjZSBucG0gY2xpZW50IHRvIGFzayBhZ2FpbiB3aXRoIGJhc2ljIGF1dGhlbnRpY2F0aW9uXG4gICAgICByZXR1cm4gbmV4dChFcnJvckNvZGUuZ2V0QmFkUmVxdWVzdChBUElfRVJST1IuQkFEX0FVVEhfSEVBREVSKSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfaXNSZW1vdGVVc2VyVmFsaWQocmVtb3RlX3VzZXI6IFJlbW90ZVVzZXIpOiBib29sZWFuIHtcbiAgICByZXR1cm4gXy5pc1VuZGVmaW5lZChyZW1vdGVfdXNlcikgPT09IGZhbHNlICYmIF8uaXNVbmRlZmluZWQocmVtb3RlX3VzZXIubmFtZSkgPT09IGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEpXVCBtaWRkbGV3YXJlIGZvciBXZWJVSVxuICAgKi9cbiAgcHVibGljIHdlYlVJSldUbWlkZGxld2FyZSgpOiBGdW5jdGlvbiB7XG4gICAgcmV0dXJuIChyZXE6ICRSZXF1ZXN0RXh0ZW5kLCByZXM6ICRSZXNwb25zZUV4dGVuZCwgX25leHQ6IE5leHRGdW5jdGlvbik6IHZvaWQgPT4ge1xuICAgICAgaWYgKHRoaXMuX2lzUmVtb3RlVXNlclZhbGlkKHJlcS5yZW1vdGVfdXNlcikpIHtcbiAgICAgICAgcmV0dXJuIF9uZXh0KCk7XG4gICAgICB9XG5cbiAgICAgIHJlcS5wYXVzZSgpO1xuICAgICAgY29uc3QgbmV4dCA9IChlcnI6IGFueSB8IHZvaWQpOiB2b2lkID0+IHtcbiAgICAgICAgcmVxLnJlc3VtZSgpO1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgLy8gcmVxLnJlbW90ZV91c2VyLmVycm9yID0gZXJyLm1lc3NhZ2U7XG4gICAgICAgICAgcmVzLnN0YXR1cyhlcnIuc3RhdHVzQ29kZSkuc2VuZChlcnIubWVzc2FnZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gX25leHQoKTtcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHsgYXV0aG9yaXphdGlvbiB9ID0gcmVxLmhlYWRlcnM7XG4gICAgICBpZiAoXy5pc05pbChhdXRob3JpemF0aW9uKSkge1xuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIHJldHVybiBuZXh0KCk7XG4gICAgICB9XG5cbiAgICAgIGlmICghaXNBdXRoSGVhZGVyVmFsaWQoYXV0aG9yaXphdGlvbikpIHtcbiAgICAgICAgcmV0dXJuIG5leHQoRXJyb3JDb2RlLmdldEJhZFJlcXVlc3QoQVBJX0VSUk9SLkJBRF9BVVRIX0hFQURFUikpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB0b2tlbiA9IChhdXRob3JpemF0aW9uIHx8ICcnKS5yZXBsYWNlKGAke1RPS0VOX0JFQVJFUn0gYCwgJycpO1xuICAgICAgaWYgKCF0b2tlbikge1xuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIHJldHVybiBuZXh0KCk7XG4gICAgICB9XG5cbiAgICAgIGxldCBjcmVkZW50aWFscztcbiAgICAgIHRyeSB7XG4gICAgICAgIGNyZWRlbnRpYWxzID0gdmVyaWZ5SldUUGF5bG9hZCh0b2tlbiwgdGhpcy5jb25maWcuc2VjcmV0KTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAvLyBGSVhNRTogaW50ZW5kZWQgYmVoYXZpb3VyLCBkbyB3ZSB3YW50IGl0P1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5faXNSZW1vdGVVc2VyVmFsaWQoY3JlZGVudGlhbHMpKSB7XG4gICAgICAgIGNvbnN0IHsgbmFtZSwgZ3JvdXBzIH0gPSBjcmVkZW50aWFscztcbiAgICAgICAgcmVxLnJlbW90ZV91c2VyID0gY3JlYXRlUmVtb3RlVXNlcihuYW1lLCBncm91cHMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVxLnJlbW90ZV91c2VyID0gY3JlYXRlQW5vbnltb3VzUmVtb3RlVXNlcigpO1xuICAgICAgfVxuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgbmV4dCgpO1xuICAgIH07XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgand0RW5jcnlwdCh1c2VyOiBSZW1vdGVVc2VyLCBzaWduT3B0aW9uczogSldUU2lnbk9wdGlvbnMpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IHsgcmVhbF9ncm91cHMsIG5hbWUsIGdyb3VwcyB9ID0gdXNlcjtcbiAgICBjb25zdCByZWFsR3JvdXBzVmFsaWRhdGVkID0gXy5pc05pbChyZWFsX2dyb3VwcykgPyBbXSA6IHJlYWxfZ3JvdXBzO1xuICAgIGNvbnN0IGdyb3VwZWRHcm91cHMgPSBfLmlzTmlsKGdyb3VwcylcbiAgICAgID8gcmVhbF9ncm91cHNcbiAgICAgIDogQXJyYXkuZnJvbShuZXcgU2V0KFsuLi5ncm91cHMuY29uY2F0KHJlYWxHcm91cHNWYWxpZGF0ZWQpXSkpO1xuICAgIGNvbnN0IHBheWxvYWQ6IFJlbW90ZVVzZXIgPSB7XG4gICAgICByZWFsX2dyb3VwczogcmVhbEdyb3Vwc1ZhbGlkYXRlZCxcbiAgICAgIG5hbWUsXG4gICAgICBncm91cHM6IGdyb3VwZWRHcm91cHMsXG4gICAgfTtcblxuICAgIGNvbnN0IHRva2VuOiBzdHJpbmcgPSBhd2FpdCBzaWduUGF5bG9hZChwYXlsb2FkLCB0aGlzLnNlY3JldCwgc2lnbk9wdGlvbnMpO1xuXG4gICAgcmV0dXJuIHRva2VuO1xuICB9XG5cbiAgLyoqXG4gICAqIEVuY3J5cHQgYSBzdHJpbmcuXG4gICAqL1xuICBwdWJsaWMgYWVzRW5jcnlwdChidWY6IEJ1ZmZlcik6IEJ1ZmZlciB7XG4gICAgcmV0dXJuIGFlc0VuY3J5cHQoYnVmLCB0aGlzLnNlY3JldCk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQXV0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
|
package/build/lib/up-storage.js
CHANGED
|
@@ -316,7 +316,7 @@ class ProxyStorage {
|
|
|
316
316
|
*/
|
|
317
317
|
_setHeaderAuthorization(headers, type, token) {
|
|
318
318
|
const _type = type.toLowerCase();
|
|
319
|
-
if (
|
|
319
|
+
if ([_constants.TOKEN_BEARER.toLowerCase(), _constants.TOKEN_BASIC.toLowerCase()].includes(_type) === false) {
|
|
320
320
|
this._throwErrorAuth(`Auth type '${_type}' not allowed`);
|
|
321
321
|
}
|
|
322
322
|
type = _lodash.default.upperFirst(type);
|
|
@@ -622,4 +622,4 @@ class ProxyStorage {
|
|
|
622
622
|
}
|
|
623
623
|
var _default = ProxyStorage;
|
|
624
624
|
exports.default = _default;
|
|
625
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfSlNPTlN0cmVhbSIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX2RlYnVnIiwiX2xvZGFzaCIsIl9yZXF1ZXN0IiwiX3N0cmVhbSIsIl91cmwiLCJfemxpYiIsIl9zdHJlYW1zIiwiX3V0aWxzIiwiX2NvbnN0YW50cyIsIl9sb2dnZXIiLCJfdXRpbHMyIiwib2JqIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJfZGVmaW5lUHJvcGVydHkiLCJrZXkiLCJ2YWx1ZSIsIl90b1Byb3BlcnR5S2V5IiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJlbnVtZXJhYmxlIiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCJhcmciLCJfdG9QcmltaXRpdmUiLCJTdHJpbmciLCJpbnB1dCIsImhpbnQiLCJwcmltIiwiU3ltYm9sIiwidG9QcmltaXRpdmUiLCJ1bmRlZmluZWQiLCJyZXMiLCJjYWxsIiwiVHlwZUVycm9yIiwiTnVtYmVyIiwiZGVidWciLCJidWlsZERlYnVnIiwiZW5jb2RlIiwidGhpbmciLCJlbmNvZGVVUklDb21wb25lbnQiLCJyZXBsYWNlIiwianNvbkNvbnRlbnRUeXBlIiwiSEVBREVSUyIsIkpTT04iLCJjb250ZW50VHlwZUFjY2VwdCIsInNldENvbmZpZyIsImNvbmZpZyIsImRlZiIsIl8iLCJpc05pbCIsIlByb3h5U3RvcmFnZSIsImNvbnN0cnVjdG9yIiwibWFpbkNvbmZpZyIsIl9tYWluQ29uZmlnJHVzZXJfYWdlbiIsImZhaWxlZF9yZXF1ZXN0cyIsInVzZXJBZ2VudCIsInVzZXJfYWdlbnQiLCJjYSIsImxvZ2dlciIsInNlcnZlcl9pZCIsInVybCIsIlVSTCIsInBhcnNlIiwiX3NldHVwUHJveHkiLCJob3N0bmFtZSIsInByb3RvY29sIiwidGltZW91dCIsIndhcm4iLCJqb2luIiwibWF4YWdlIiwicGFyc2VJbnRlcnZhbCIsIm1heF9mYWlscyIsImZhaWxfdGltZW91dCIsInN0cmljdF9zc2wiLCJCb29sZWFuIiwiYWdlbnRfb3B0aW9ucyIsImtlZXBBbGl2ZSIsIm1heFNvY2tldHMiLCJtYXhGcmVlU29ja2V0cyIsInJlcXVlc3QiLCJvcHRpb25zIiwiY2IiLCJqc29uIiwiX3N0YXR1c0NoZWNrIiwic3RyZWFtUmVhZCIsIlN0cmVhbSIsIlJlYWRhYmxlIiwicHJvY2VzcyIsIm5leHRUaWNrIiwiRXJyb3JDb2RlIiwiZ2V0SW50ZXJuYWxFcnJvciIsIkFQSV9FUlJPUiIsIlVQTElOS19PRkZMSU5FIiwiZW1pdCIsIl9yZWFkIiwib24iLCJzZWxmIiwiaGVhZGVycyIsIl9zZXRIZWFkZXJzIiwiX2FkZFByb3h5SGVhZGVycyIsInJlcSIsIl9vdmVycmlkZVdpdGhVcExpbmtDb25maWdIZWFkZXJzIiwibWV0aG9kIiwidXJpIiwidXJpX2Z1bGwiLCJpbmZvIiwiaXNPYmplY3QiLCJzdHJpbmdpZnkiLCJyZXF1ZXN0Q2FsbGJhY2siLCJlcnIiLCJib2R5IiwiZXJyb3IiLCJyZXNwb25zZUxlbmd0aCIsImxlbmd0aCIsInByb2Nlc3NCb2R5IiwibG9nQWN0aXZpdHkiLCJtZXNzYWdlIiwic3RhdHVzQ29kZSIsInRvU3RyaW5nIiwiQ0hBUkFDVEVSX0VOQ09ESU5HIiwiVVRGOCIsIl9lcnIiLCJpc1N0cmluZyIsImh0dHAiLCJzdGF0dXMiLCJieXRlcyIsImluIiwib3V0IiwicmVxdWVzdE9wdGlvbnMiLCJwcm94eSIsImVuY29kaW5nIiwiZ3ppcCIsInN0cmljdFNTTCIsImFnZW50T3B0aW9ucyIsImFzc2lnbiIsInN0YXR1c0NhbGxlZCIsIl92ZXJkYWNjaW9fYWJvcnRlZCIsImRvX2xvZyIsImlzTnVsbCIsIl9vcHRpb25zJHJlcSIsImFjY2VwdCIsIkFDQ0VQVCIsImFjY2VwdEVuY29kaW5nIiwiQUNDRVBUX0VOQ09ESU5HIiwiVVNFUl9BR0VOVCIsImdldCIsIl9zZXRBdXRoIiwiYXV0aCIsIkFVVEhPUklaQVRJT04iLCJ0b2tlbiIsIl90aHJvd0Vycm9yQXV0aCIsInRva2VuQ29uZiIsInRva2VuX2VudiIsImVudiIsImlzQm9vbGVhbiIsIk5QTV9UT0tFTiIsIkVSUk9SX0NPREUiLCJ0b2tlbl9yZXF1aXJlZCIsInR5cGUiLCJUT0tFTl9CQVNJQyIsIl9zZXRIZWFkZXJBdXRob3JpemF0aW9uIiwiRXJyb3IiLCJfdHlwZSIsInRvTG93ZXJDYXNlIiwiVE9LRU5fQkVBUkVSIiwidXBwZXJGaXJzdCIsImJ1aWxkVG9rZW4iLCJpc1VwbGlua1ZhbGlkIiwidXJsUGFyc2VkIiwiaXNIVFRQUyIsInVybERvbWFpblBhcnNlZCIsInBvcnQiLCJnZXRIb3N0IiwiaG9zdCIsImlzTWF0Y2hQcm90b2NvbCIsImlzTWF0Y2hIb3N0IiwiaXNNYXRjaFBhdGgiLCJwYXRoIiwiaW5kZXhPZiIsImdldFJlbW90ZU1ldGFkYXRhIiwibmFtZSIsImNhbGxiYWNrIiwiZXRhZyIsIkhUVFBfU1RBVFVTIiwiTk9UX0ZPVU5EIiwiZ2V0Tm90Rm91bmQiLCJOT1RfUEFDS0FHRV9VUExJTksiLCJPSyIsIk1VTFRJUExFX0NIT0lDRVMiLCJCQURfU1RBVFVTX0NPREUiLCJyZW1vdGVTdGF0dXMiLCJmZXRjaFRhcmJhbGwiLCJzdHJlYW0iLCJSZWFkVGFyYmFsbCIsImN1cnJlbnRfbGVuZ3RoIiwiZXhwZWN0ZWRfbGVuZ3RoIiwiYWJvcnQiLCJyZWFkU3RyZWFtIiwiQWNjZXB0IiwiTk9UX0ZJTEVfVVBMSU5LIiwiSEVBREVSX1RZUEUiLCJDT05URU5UX0xFTkdUSCIsInBpcGUiLCJkYXRhIiwiQ09OVEVOVF9NSVNNQVRDSCIsInNlYXJjaCIsInRyYW5zZm9ybVN0cmVhbSIsIlBhc3NUaHJvdWdoIiwib2JqZWN0TW9kZSIsInJlcXVlc3RTdHJlYW0iLCJyZWZlcmVyIiwicGFyc2VQYWNrYWdlIiwicGtnIiwiaXNPYmplY3RPckFycmF5IiwibWF0Y2giLCJqc29uU3RyZWFtIiwiQ09OVEVOVF9FTkNPRElORyIsIkdaSVAiLCJ6bGliIiwiY3JlYXRlVW56aXAiLCJKU09OU3RyZWFtIiwiY29ubmVjdGlvbiIsInJlbW90ZUFkZHJlc3MiLCJhbGl2ZSIsImFyZ3VtZW50cyIsIl9pZlJlcXVlc3RGYWlsdXJlIiwibGFzdF9yZXF1ZXN0X3RpbWUiLCJEYXRlIiwibm93IiwiTWF0aCIsImFicyIsIm1haW5jb25maWciLCJub1Byb3h5TGlzdCIsInByb3h5X2tleSIsIm5vX3Byb3h5Iiwic3BsaXQiLCJpc0FycmF5IiwiaSIsIm5vUHJveHlJdGVtIiwibGFzdEluZGV4T2YiLCJocmVmIiwiX2RlZmF1bHQiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpYi91cC1zdG9yYWdlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBKU09OU3RyZWFtIGZyb20gJ0pTT05TdHJlYW0nO1xuaW1wb3J0IGJ1aWxkRGVidWcgZnJvbSAnZGVidWcnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCByZXF1ZXN0IGZyb20gJ3JlcXVlc3QnO1xuaW1wb3J0IFN0cmVhbSBmcm9tICdzdHJlYW0nO1xuaW1wb3J0IFVSTCwgeyBVcmxXaXRoU3RyaW5nUXVlcnkgfSBmcm9tICd1cmwnO1xuaW1wb3J0IHpsaWIgZnJvbSAnemxpYic7XG5cbmltcG9ydCB7IFJlYWRUYXJiYWxsIH0gZnJvbSAnQHZlcmRhY2Npby9zdHJlYW1zJztcbmltcG9ydCB7IENhbGxiYWNrLCBDb25maWcsIEhlYWRlcnMsIExvZ2dlciwgUGFja2FnZSwgVXBMaW5rQ29uZiB9IGZyb20gJ0B2ZXJkYWNjaW8vdHlwZXMnO1xuaW1wb3J0IHsgYnVpbGRUb2tlbiB9IGZyb20gJ0B2ZXJkYWNjaW8vdXRpbHMnO1xuXG5pbXBvcnQge1xuICBBUElfRVJST1IsXG4gIENIQVJBQ1RFUl9FTkNPRElORyxcbiAgRVJST1JfQ09ERSxcbiAgSEVBREVSUyxcbiAgSEVBREVSX1RZUEUsXG4gIEhUVFBfU1RBVFVTLFxuICBUT0tFTl9CQVNJQyxcbiAgVE9LRU5fQkVBUkVSLFxufSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgeyBFcnJvckNvZGUsIGlzT2JqZWN0LCBpc09iamVjdE9yQXJyYXksIHBhcnNlSW50ZXJ2YWwgfSBmcm9tICcuL3V0aWxzJztcblxuY29uc3QgZGVidWcgPSBidWlsZERlYnVnKCd2ZXJkYWNjaW86cHJveHknKTtcblxuY29uc3QgZW5jb2RlID0gZnVuY3Rpb24gKHRoaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudCh0aGluZykucmVwbGFjZSgvXiU0MC8sICdAJyk7XG59O1xuXG5jb25zdCBqc29uQ29udGVudFR5cGUgPSBIRUFERVJTLkpTT047XG5jb25zdCBjb250ZW50VHlwZUFjY2VwdCA9IGAke2pzb25Db250ZW50VHlwZX07YDtcblxuLyoqXG4gKiBKdXN0IGEgaGVscGVyIChgY29uZmlnW2tleV0gfHwgZGVmYXVsdGAgZG9lc24ndCB3b3JrIGJlY2F1c2Ugb2YgemVyb2VzKVxuICovXG5jb25zdCBzZXRDb25maWcgPSAoY29uZmlnLCBrZXksIGRlZik6IHN0cmluZyA9PiB7XG4gIHJldHVybiBfLmlzTmlsKGNvbmZpZ1trZXldKSA9PT0gZmFsc2UgPyBjb25maWdba2V5XSA6IGRlZjtcbn07XG5cbi8qKlxuICogSW1wbGVtZW50cyBTdG9yYWdlIGludGVyZmFjZVxuICogKHNhbWUgZm9yIHN0b3JhZ2UuanMsIGxvY2FsLXN0b3JhZ2UuanMsIHVwLXN0b3JhZ2UuanMpXG4gKi9cbmNsYXNzIFByb3h5U3RvcmFnZSB7XG4gIHB1YmxpYyBjb25maWc6IFVwTGlua0NvbmY7XG4gIHB1YmxpYyBmYWlsZWRfcmVxdWVzdHM6IG51bWJlcjtcbiAgcHVibGljIHVzZXJBZ2VudDogc3RyaW5nO1xuICBwdWJsaWMgY2E6IHN0cmluZyB8IHZvaWQ7XG4gIHB1YmxpYyBsb2dnZXI6IExvZ2dlcjtcbiAgcHVibGljIHNlcnZlcl9pZDogc3RyaW5nO1xuICBwdWJsaWMgdXJsOiBhbnk7XG4gIHB1YmxpYyBtYXhhZ2U6IG51bWJlcjtcbiAgcHVibGljIHRpbWVvdXQ6IG51bWJlcjtcbiAgcHVibGljIG1heF9mYWlsczogbnVtYmVyO1xuICBwdWJsaWMgZmFpbF90aW1lb3V0OiBudW1iZXI7XG4gIHB1YmxpYyBhZ2VudF9vcHRpb25zOiBhbnk7XG4gIC8vIEZJWE1FOiB1cG5hbWUgaXMgYXNzaWduZWQgdG8gZWFjaCBpbnN0YW5jZVxuICAvLyBAdHMtaWdub3JlXG4gIHB1YmxpYyB1cG5hbWU6IHN0cmluZztcbiAgLy8gRklYTUU6IHByb3h5IGNhbiBiZSBib29sZWFuIG9yIG9iamVjdCwgc29tZXRoaW5nIHNtZWxscyBoZXJlXG4gIC8vIEB0cy1pZ25vcmVcbiAgcHVibGljIHByb3h5OiBzdHJpbmcgfCB2b2lkO1xuICAvLyBAdHMtaWdub3JlXG4gIHB1YmxpYyBsYXN0X3JlcXVlc3RfdGltZTogbnVtYmVyIHwgbnVsbDtcbiAgcHVibGljIHN0cmljdF9zc2w6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdG9yXG4gICAqIEBwYXJhbSB7Kn0gY29uZmlnXG4gICAqIEBwYXJhbSB7Kn0gbWFpbkNvbmZpZ1xuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKGNvbmZpZzogVXBMaW5rQ29uZiwgbWFpbkNvbmZpZzogQ29uZmlnKSB7XG4gICAgdGhpcy5jb25maWcgPSBjb25maWc7XG4gICAgdGhpcy5mYWlsZWRfcmVxdWVzdHMgPSAwO1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICB0aGlzLnVzZXJBZ2VudCA9IG1haW5Db25maWcudXNlcl9hZ2VudCA/PyAnaGlkZGVuJztcbiAgICB0aGlzLmNhID0gY29uZmlnLmNhO1xuICAgIHRoaXMubG9nZ2VyID0gbG9nZ2VyO1xuICAgIHRoaXMuc2VydmVyX2lkID0gbWFpbkNvbmZpZy5zZXJ2ZXJfaWQ7XG5cbiAgICB0aGlzLnVybCA9IFVSTC5wYXJzZSh0aGlzLmNvbmZpZy51cmwpO1xuXG4gICAgdGhpcy5fc2V0dXBQcm94eSh0aGlzLnVybC5ob3N0bmFtZSwgY29uZmlnLCBtYWluQ29uZmlnLCB0aGlzLnVybC5wcm90b2NvbCA9PT0gJ2h0dHBzOicpO1xuXG4gICAgdGhpcy5jb25maWcudXJsID0gdGhpcy5jb25maWcudXJsLnJlcGxhY2UoL1xcLyQvLCAnJyk7XG5cbiAgICBpZiAodGhpcy5jb25maWcudGltZW91dCAmJiBOdW1iZXIodGhpcy5jb25maWcudGltZW91dCkgPj0gMTAwMCkge1xuICAgICAgdGhpcy5sb2dnZXIud2FybihcbiAgICAgICAgW1xuICAgICAgICAgICdUb28gYmlnIHRpbWVvdXQgdmFsdWU6ICcgKyB0aGlzLmNvbmZpZy50aW1lb3V0LFxuICAgICAgICAgICdXZSBjaGFuZ2VkIHRpbWUgZm9ybWF0IHRvIG5naW54LWxpa2Ugb25lJyxcbiAgICAgICAgICAnKHNlZSBodHRwOi8vbmdpbngub3JnL2VuL2RvY3Mvc3ludGF4Lmh0bWwpJyxcbiAgICAgICAgICAnc28gcGxlYXNlIHVwZGF0ZSB5b3VyIGNvbmZpZyBhY2NvcmRpbmdseScsXG4gICAgICAgIF0uam9pbignXFxuJylcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gYSBidW5jaCBvZiBkaWZmZXJlbnQgY29uZmlndXJhYmxlIHRpbWVyc1xuICAgIHRoaXMubWF4YWdlID0gcGFyc2VJbnRlcnZhbChzZXRDb25maWcodGhpcy5jb25maWcsICdtYXhhZ2UnLCAnMm0nKSk7XG4gICAgdGhpcy50aW1lb3V0ID0gcGFyc2VJbnRlcnZhbChzZXRDb25maWcodGhpcy5jb25maWcsICd0aW1lb3V0JywgJzMwcycpKTtcbiAgICB0aGlzLm1heF9mYWlscyA9IE51bWJlcihzZXRDb25maWcodGhpcy5jb25maWcsICdtYXhfZmFpbHMnLCAyKSk7XG4gICAgdGhpcy5mYWlsX3RpbWVvdXQgPSBwYXJzZUludGVydmFsKHNldENvbmZpZyh0aGlzLmNvbmZpZywgJ2ZhaWxfdGltZW91dCcsICc1bScpKTtcbiAgICB0aGlzLnN0cmljdF9zc2wgPSBCb29sZWFuKHNldENvbmZpZyh0aGlzLmNvbmZpZywgJ3N0cmljdF9zc2wnLCB0cnVlKSk7XG4gICAgdGhpcy5hZ2VudF9vcHRpb25zID0gc2V0Q29uZmlnKHRoaXMuY29uZmlnLCAnYWdlbnRfb3B0aW9ucycsIHtcbiAgICAgIGtlZXBBbGl2ZTogdHJ1ZSxcbiAgICAgIG1heFNvY2tldHM6IDQwLFxuICAgICAgbWF4RnJlZVNvY2tldHM6IDEwLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoIGFuIGFzc2V0LlxuICAgKiBAcGFyYW0geyp9IG9wdGlvbnNcbiAgICogQHBhcmFtIHsqfSBjYlxuICAgKiBAcmV0dXJuIHtSZXF1ZXN0fVxuICAgKi9cbiAgcHJpdmF0ZSByZXF1ZXN0KG9wdGlvbnM6IGFueSwgY2I/OiBDYWxsYmFjayk6IFN0cmVhbS5SZWFkYWJsZSB7XG4gICAgbGV0IGpzb247XG5cbiAgICBpZiAodGhpcy5fc3RhdHVzQ2hlY2soKSA9PT0gZmFsc2UpIHtcbiAgICAgIGNvbnN0IHN0cmVhbVJlYWQgPSBuZXcgU3RyZWFtLlJlYWRhYmxlKCk7XG5cbiAgICAgIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24gKCk6IHZvaWQge1xuICAgICAgICBpZiAoY2IpIHtcbiAgICAgICAgICBjYihFcnJvckNvZGUuZ2V0SW50ZXJuYWxFcnJvcihBUElfRVJST1IuVVBMSU5LX09GRkxJTkUpKTtcbiAgICAgICAgfVxuICAgICAgICBzdHJlYW1SZWFkLmVtaXQoJ2Vycm9yJywgRXJyb3JDb2RlLmdldEludGVybmFsRXJyb3IoQVBJX0VSUk9SLlVQTElOS19PRkZMSU5FKSk7XG4gICAgICB9KTtcblxuICAgICAgc3RyZWFtUmVhZC5fcmVhZCA9IGZ1bmN0aW9uICgpOiB2b2lkIHt9O1xuICAgICAgLy8gcHJldmVudGluZyAnVW5jYXVnaHQsIHVuc3BlY2lmaWVkIFwiZXJyb3JcIiBldmVudCdcbiAgICAgIHN0cmVhbVJlYWQub24oJ2Vycm9yJywgZnVuY3Rpb24gKCk6IHZvaWQge30pO1xuICAgICAgcmV0dXJuIHN0cmVhbVJlYWQ7XG4gICAgfVxuXG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgY29uc3QgaGVhZGVyczogSGVhZGVycyA9IHRoaXMuX3NldEhlYWRlcnMob3B0aW9ucyk7XG5cbiAgICB0aGlzLl9hZGRQcm94eUhlYWRlcnMob3B0aW9ucy5yZXEsIGhlYWRlcnMpO1xuICAgIHRoaXMuX292ZXJyaWRlV2l0aFVwTGlua0NvbmZpZ0hlYWRlcnMoaGVhZGVycyk7XG5cbiAgICBjb25zdCBtZXRob2QgPSBvcHRpb25zLm1ldGhvZCB8fCAnR0VUJztcbiAgICBjb25zdCB1cmkgPSBvcHRpb25zLnVyaV9mdWxsIHx8IHRoaXMuY29uZmlnLnVybCArIG9wdGlvbnMudXJpO1xuXG4gICAgc2VsZi5sb2dnZXIuaW5mbyhcbiAgICAgIHtcbiAgICAgICAgbWV0aG9kOiBtZXRob2QsXG4gICAgICAgIHVyaTogdXJpLFxuICAgICAgfSxcbiAgICAgIFwibWFraW5nIHJlcXVlc3Q6ICdAe21ldGhvZH0gQHt1cml9J1wiXG4gICAgKTtcblxuICAgIGlmIChpc09iamVjdChvcHRpb25zLmpzb24pKSB7XG4gICAgICBqc29uID0gSlNPTi5zdHJpbmdpZnkob3B0aW9ucy5qc29uKTtcbiAgICAgIGhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID0gaGVhZGVyc1snQ29udGVudC1UeXBlJ10gfHwgSEVBREVSUy5KU09OO1xuICAgIH1cblxuICAgIGNvbnN0IHJlcXVlc3RDYWxsYmFjayA9IGNiXG4gICAgICA/IGZ1bmN0aW9uIChlcnIsIHJlcywgYm9keSk6IHZvaWQge1xuICAgICAgICAgIGxldCBlcnJvcjtcbiAgICAgICAgICBjb25zdCByZXNwb25zZUxlbmd0aCA9IGVyciA/IDAgOiBib2R5Lmxlbmd0aDtcblxuICAgICAgICAgIHByb2Nlc3NCb2R5KCk7XG4gICAgICAgICAgbG9nQWN0aXZpdHkoKTtcblxuICAgICAgICAgIGNiKGVyciwgcmVzLCBib2R5KTtcblxuICAgICAgICAgIC8qKlxuICAgICAgICAgICAqIFBlcmZvcm0gYSBkZWNvZGUuXG4gICAgICAgICAgICovXG4gICAgICAgICAgZnVuY3Rpb24gcHJvY2Vzc0JvZHkoKTogdm9pZCB7XG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgIGVycm9yID0gZXJyLm1lc3NhZ2U7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKG9wdGlvbnMuanNvbiAmJiByZXMuc3RhdHVzQ29kZSA8IDMwMCkge1xuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGJvZHkgPSBKU09OLnBhcnNlKGJvZHkudG9TdHJpbmcoQ0hBUkFDVEVSX0VOQ09ESU5HLlVURjgpKTtcbiAgICAgICAgICAgICAgfSBjYXRjaCAoX2Vycikge1xuICAgICAgICAgICAgICAgIGJvZHkgPSB7fTtcbiAgICAgICAgICAgICAgICBlcnIgPSBfZXJyO1xuICAgICAgICAgICAgICAgIGVycm9yID0gZXJyLm1lc3NhZ2U7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFlcnIgJiYgaXNPYmplY3QoYm9keSkpIHtcbiAgICAgICAgICAgICAgaWYgKF8uaXNTdHJpbmcoYm9keS5lcnJvcikpIHtcbiAgICAgICAgICAgICAgICBlcnJvciA9IGJvZHkuZXJyb3I7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgLyoqXG4gICAgICAgICAgICogUGVyZm9ybSBhIGxvZy5cbiAgICAgICAgICAgKi9cbiAgICAgICAgICBmdW5jdGlvbiBsb2dBY3Rpdml0eSgpOiB2b2lkIHtcbiAgICAgICAgICAgIGxldCBtZXNzYWdlID0gXCJAeyFzdGF0dXN9LCByZXE6ICdAe3JlcXVlc3QubWV0aG9kfSBAe3JlcXVlc3QudXJsfSdcIjtcbiAgICAgICAgICAgIG1lc3NhZ2UgKz0gZXJyb3IgPyAnLCBlcnJvcjogQHshZXJyb3J9JyA6ICcsIGJ5dGVzOiBAe2J5dGVzLmlufS9Ae2J5dGVzLm91dH0nO1xuICAgICAgICAgICAgc2VsZi5sb2dnZXIuaHR0cChcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGVycjogZXJyIHx8IHVuZGVmaW5lZCwgLy8gaWYgZXJyb3IgaXMgbnVsbC9mYWxzZSBjaGFuZ2UgdGhpcyB0byB1bmRlZmluZWQgc28gaXQgd29udCBsb2dcbiAgICAgICAgICAgICAgICByZXF1ZXN0OiB7IG1ldGhvZDogbWV0aG9kLCB1cmw6IHVyaSB9LFxuICAgICAgICAgICAgICAgIHN0YXR1czogcmVzICE9IG51bGwgPyByZXMuc3RhdHVzQ29kZSA6ICdFUlInLFxuICAgICAgICAgICAgICAgIGVycm9yOiBlcnJvcixcbiAgICAgICAgICAgICAgICBieXRlczoge1xuICAgICAgICAgICAgICAgICAgaW46IGpzb24gPyBqc29uLmxlbmd0aCA6IDAsXG4gICAgICAgICAgICAgICAgICBvdXQ6IHJlc3BvbnNlTGVuZ3RoIHx8IDAsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgbWVzc2FnZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIDogdW5kZWZpbmVkO1xuICAgIGxldCByZXF1ZXN0T3B0aW9uczogcmVxdWVzdC5PcHRpb25zV2l0aFVybCA9IHtcbiAgICAgIHVybDogdXJpLFxuICAgICAgbWV0aG9kOiBtZXRob2QsXG4gICAgICBoZWFkZXJzOiBoZWFkZXJzLFxuICAgICAgYm9keToganNvbixcbiAgICAgIHByb3h5OiB0aGlzLnByb3h5LFxuICAgICAgZW5jb2Rpbmc6IG51bGwsXG4gICAgICBnemlwOiB0cnVlLFxuICAgICAgdGltZW91dDogdGhpcy50aW1lb3V0LFxuICAgICAgc3RyaWN0U1NMOiB0aGlzLnN0cmljdF9zc2wsXG4gICAgICBhZ2VudE9wdGlvbnM6IHRoaXMuYWdlbnRfb3B0aW9ucyxcbiAgICB9O1xuXG4gICAgaWYgKHRoaXMuY2EpIHtcbiAgICAgIHJlcXVlc3RPcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgcmVxdWVzdE9wdGlvbnMsIHtcbiAgICAgICAgY2E6IHRoaXMuY2EsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCByZXEgPSByZXF1ZXN0KHJlcXVlc3RPcHRpb25zLCByZXF1ZXN0Q2FsbGJhY2spO1xuXG4gICAgbGV0IHN0YXR1c0NhbGxlZCA9IGZhbHNlO1xuICAgIHJlcS5vbigncmVzcG9uc2UnLCBmdW5jdGlvbiAocmVzKTogdm9pZCB7XG4gICAgICAvLyBGSVhNRTogX3ZlcmRhY2Npb19hYm9ydGVkIHNlZW1zIG5vdCB1c2VkXG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICBpZiAoIXJlcS5fdmVyZGFjY2lvX2Fib3J0ZWQgJiYgIXN0YXR1c0NhbGxlZCkge1xuICAgICAgICBzdGF0dXNDYWxsZWQgPSB0cnVlO1xuICAgICAgICBzZWxmLl9zdGF0dXNDaGVjayh0cnVlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKF8uaXNOaWwocmVxdWVzdENhbGxiYWNrKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgKGZ1bmN0aW9uIGRvX2xvZygpOiB2b2lkIHtcbiAgICAgICAgICBjb25zdCBtZXNzYWdlID0gXCJAeyFzdGF0dXN9LCByZXE6ICdAe3JlcXVlc3QubWV0aG9kfSBAe3JlcXVlc3QudXJsfScgKHN0cmVhbWluZylcIjtcbiAgICAgICAgICBzZWxmLmxvZ2dlci5odHRwKFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICByZXF1ZXN0OiB7XG4gICAgICAgICAgICAgICAgbWV0aG9kOiBtZXRob2QsXG4gICAgICAgICAgICAgICAgdXJsOiB1cmksXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHN0YXR1czogXy5pc051bGwocmVzKSA9PT0gZmFsc2UgPyByZXMuc3RhdHVzQ29kZSA6ICdFUlInLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG1lc3NhZ2VcbiAgICAgICAgICApO1xuICAgICAgICB9KSgpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJlcS5vbignZXJyb3InLCBmdW5jdGlvbiAoX2Vycik6IHZvaWQge1xuICAgICAgLy8gRklYTUU6IF92ZXJkYWNjaW9fYWJvcnRlZCBzZWVtcyBub3QgdXNlZFxuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgaWYgKCFyZXEuX3ZlcmRhY2Npb19hYm9ydGVkICYmICFzdGF0dXNDYWxsZWQpIHtcbiAgICAgICAgc3RhdHVzQ2FsbGVkID0gdHJ1ZTtcbiAgICAgICAgc2VsZi5fc3RhdHVzQ2hlY2soZmFsc2UpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICByZXR1cm4gcmVxO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCBkZWZhdWx0IGhlYWRlcnMuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm4ge09iamVjdH1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgX3NldEhlYWRlcnMob3B0aW9uczogYW55KTogSGVhZGVycyB7XG4gICAgY29uc3QgaGVhZGVycyA9IG9wdGlvbnMuaGVhZGVycyB8fCB7fTtcbiAgICBjb25zdCBhY2NlcHQgPSBIRUFERVJTLkFDQ0VQVDtcbiAgICBjb25zdCBhY2NlcHRFbmNvZGluZyA9IEhFQURFUlMuQUNDRVBUX0VOQ09ESU5HO1xuICAgIGNvbnN0IHVzZXJBZ2VudCA9IEhFQURFUlMuVVNFUl9BR0VOVDtcblxuICAgIGhlYWRlcnNbYWNjZXB0XSA9IGhlYWRlcnNbYWNjZXB0XSB8fCBjb250ZW50VHlwZUFjY2VwdDtcbiAgICBoZWFkZXJzW2FjY2VwdEVuY29kaW5nXSA9IGhlYWRlcnNbYWNjZXB0RW5jb2RpbmddIHx8ICdnemlwJztcbiAgICAvLyByZWdpc3RyeS5ucG1qcy5vcmcgd2lsbCBvbmx5IHJldHVybiBzZWFyY2ggcmVzdWx0IGlmIHVzZXItYWdlbnQgaW5jbHVkZSBzdHJpbmcgJ25wbSdcbiAgICBoZWFkZXJzW3VzZXJBZ2VudF0gPSB0aGlzLnVzZXJBZ2VudFxuICAgICAgPyBgbnBtICgke3RoaXMudXNlckFnZW50fSlgXG4gICAgICA6IG9wdGlvbnMucmVxPy5nZXQoJ3VzZXItYWdlbnQnKTtcblxuICAgIHJldHVybiB0aGlzLl9zZXRBdXRoKGhlYWRlcnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIGNvbmZpZ3VyYXRpb24gYXV0aCBhbmQgYXNzaWduIEhlYWRlciBhdXRob3JpemF0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBoZWFkZXJzXG4gICAqIEByZXR1cm4ge09iamVjdH1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgX3NldEF1dGgoaGVhZGVyczogYW55KTogSGVhZGVycyB7XG4gICAgY29uc3QgeyBhdXRoIH0gPSB0aGlzLmNvbmZpZztcblxuICAgIGlmIChfLmlzTmlsKGF1dGgpIHx8IGhlYWRlcnNbSEVBREVSUy5BVVRIT1JJWkFUSU9OXSkge1xuICAgICAgcmV0dXJuIGhlYWRlcnM7XG4gICAgfVxuXG4gICAgaWYgKF8uaXNPYmplY3QoYXV0aCkgPT09IGZhbHNlICYmIF8uaXNPYmplY3QoYXV0aC50b2tlbikgPT09IGZhbHNlKSB7XG4gICAgICB0aGlzLl90aHJvd0Vycm9yQXV0aCgnQXV0aCBpbnZhbGlkJyk7XG4gICAgfVxuXG4gICAgLy8gZ2V0IE5QTV9UT0tFTiBodHRwOi8vYmxvZy5ucG1qcy5vcmcvcG9zdC8xMTgzOTMzNjg1NTUvZGVwbG95aW5nLXdpdGgtbnBtLXByaXZhdGUtbW9kdWxlc1xuICAgIC8vIG9yIGdldCBvdGhlciB2YXJpYWJsZSBleHBvcnQgaW4gZW52XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3ZlcmRhY2Npby92ZXJkYWNjaW8vcmVsZWFzZXMvdGFnL3YyLjUuMFxuICAgIGxldCB0b2tlbjogYW55O1xuICAgIGNvbnN0IHRva2VuQ29uZjogYW55ID0gYXV0aDtcblxuICAgIGlmIChfLmlzTmlsKHRva2VuQ29uZi50b2tlbikgPT09IGZhbHNlICYmIF8uaXNTdHJpbmcodG9rZW5Db25mLnRva2VuKSkge1xuICAgICAgdG9rZW4gPSB0b2tlbkNvbmYudG9rZW47XG4gICAgfSBlbHNlIGlmIChfLmlzTmlsKHRva2VuQ29uZi50b2tlbl9lbnYpID09PSBmYWxzZSkge1xuICAgICAgaWYgKF8uaXNTdHJpbmcodG9rZW5Db25mLnRva2VuX2VudikpIHtcbiAgICAgICAgdG9rZW4gPSBwcm9jZXNzLmVudlt0b2tlbkNvbmYudG9rZW5fZW52XTtcbiAgICAgIH0gZWxzZSBpZiAoXy5pc0Jvb2xlYW4odG9rZW5Db25mLnRva2VuX2VudikgJiYgdG9rZW5Db25mLnRva2VuX2Vudikge1xuICAgICAgICB0b2tlbiA9IHByb2Nlc3MuZW52Lk5QTV9UT0tFTjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKEVSUk9SX0NPREUudG9rZW5fcmVxdWlyZWQpO1xuICAgICAgICB0aGlzLl90aHJvd0Vycm9yQXV0aChFUlJPUl9DT0RFLnRva2VuX3JlcXVpcmVkKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdG9rZW4gPSBwcm9jZXNzLmVudi5OUE1fVE9LRU47XG4gICAgfVxuXG4gICAgaWYgKF8uaXNOaWwodG9rZW4pKSB7XG4gICAgICB0aGlzLl90aHJvd0Vycm9yQXV0aChFUlJPUl9DT0RFLnRva2VuX3JlcXVpcmVkKTtcbiAgICB9XG5cbiAgICAvLyBkZWZpbmUgdHlwZSBBdXRoIGFsbG93IGJhc2ljIGFuZCBiZWFyZXJcbiAgICBjb25zdCB0eXBlID0gdG9rZW5Db25mLnR5cGUgfHwgVE9LRU5fQkFTSUM7XG4gICAgdGhpcy5fc2V0SGVhZGVyQXV0aG9yaXphdGlvbihoZWFkZXJzLCB0eXBlLCB0b2tlbik7XG5cbiAgICByZXR1cm4gaGVhZGVycztcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZVxuICAgKiBAdGhyb3dzIHtFcnJvcn1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgX3Rocm93RXJyb3JBdXRoKG1lc3NhZ2U6IHN0cmluZyk6IEVycm9yIHtcbiAgICB0aGlzLmxvZ2dlci5lcnJvcihtZXNzYWdlKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gIH1cblxuICAvKipcbiAgICogQXNzaWduIEhlYWRlciBhdXRob3JpemF0aW9uIHdpdGggdHlwZSBhdXRoZW50aWNhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0gaGVhZGVyc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gdHlwZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gdG9rZW5cbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgX3NldEhlYWRlckF1dGhvcml6YXRpb24oaGVhZGVyczogYW55LCB0eXBlOiBzdHJpbmcsIHRva2VuOiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCBfdHlwZTogc3RyaW5nID0gdHlwZS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgaWYgKF90eXBlICE9PSBUT0tFTl9CRUFSRVIudG9Mb3dlckNhc2UoKSAmJiBfdHlwZSAhPT0gVE9LRU5fQkFTSUMudG9Mb3dlckNhc2UoKSkge1xuICAgICAgdGhpcy5fdGhyb3dFcnJvckF1dGgoYEF1dGggdHlwZSAnJHtfdHlwZX0nIG5vdCBhbGxvd2VkYCk7XG4gICAgfVxuXG4gICAgdHlwZSA9IF8udXBwZXJGaXJzdCh0eXBlKTtcbiAgICBoZWFkZXJzW0hFQURFUlMuQVVUSE9SSVpBVElPTl0gPSBidWlsZFRva2VuKHR5cGUsIHRva2VuKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJdCB3aWxsIGFkZCBvciBvdmVycmlkZSBzcGVjaWZpZWQgaGVhZGVycyBmcm9tIGNvbmZpZyBmaWxlLlxuICAgKlxuICAgKiBFZzpcbiAgICpcbiAgICogdXBsaW5rczpcbiAgIG5wbWpzOlxuICAgdXJsOiBodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9cbiAgIGhlYWRlcnM6XG4gICBBY2NlcHQ6IFwiYXBwbGljYXRpb24vdm5kLm5wbS5pbnN0YWxsLXYyK2pzb247IHE9MS4wXCJcbiAgIHZlcmRhY2Npby1zdGFnaW5nOlxuICAgdXJsOiBodHRwczovL215Y29tcGFueS5jb20vbnBtXG4gICBoZWFkZXJzOlxuICAgQWNjZXB0OiBcImFwcGxpY2F0aW9uL2pzb25cIlxuICAgYXV0aG9yaXphdGlvbjogXCJCYXNpYyBZb3VyQmFzZTY0RW5jb2RlZENyZWRlbnRpYWxzPT1cIlxuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBoZWFkZXJzXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIF9vdmVycmlkZVdpdGhVcExpbmtDb25maWdIZWFkZXJzKGhlYWRlcnM6IEhlYWRlcnMpOiBhbnkge1xuICAgIGlmICghdGhpcy5jb25maWcuaGVhZGVycykge1xuICAgICAgcmV0dXJuIGhlYWRlcnM7XG4gICAgfVxuXG4gICAgLy8gYWRkL292ZXJyaWRlIGhlYWRlcnMgc3BlY2lmaWVkIGluIHRoZSBjb25maWdcbiAgICAvKiBlc2xpbnQgZ3VhcmQtZm9yLWluOiAwICovXG4gICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5jb25maWcuaGVhZGVycykge1xuICAgICAgaGVhZGVyc1trZXldID0gdGhpcy5jb25maWcuaGVhZGVyc1trZXldO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmUgd2hldGhlciBjYW4gZmV0Y2ggZnJvbSB0aGUgcHJvdmlkZWQgVVJMXG4gICAqIEBwYXJhbSB7Kn0gdXJsXG4gICAqIEByZXR1cm4ge0Jvb2xlYW59XG4gICAqL1xuICBwdWJsaWMgaXNVcGxpbmtWYWxpZCh1cmw6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHVybFBhcnNlZDogVXJsV2l0aFN0cmluZ1F1ZXJ5ID0gVVJMLnBhcnNlKHVybCk7XG4gICAgY29uc3QgaXNIVFRQUyA9ICh1cmxEb21haW5QYXJzZWQ6IFVSTCk6IGJvb2xlYW4gPT5cbiAgICAgIHVybERvbWFpblBhcnNlZC5wcm90b2NvbCA9PT0gJ2h0dHBzOicgJiZcbiAgICAgICh1cmxQYXJzZWQucG9ydCA9PT0gbnVsbCB8fCB1cmxQYXJzZWQucG9ydCA9PT0gJzQ0MycpO1xuICAgIGNvbnN0IGdldEhvc3QgPSAodXJsRG9tYWluUGFyc2VkKTogYm9vbGVhbiA9PlxuICAgICAgaXNIVFRQUyh1cmxEb21haW5QYXJzZWQpID8gdXJsRG9tYWluUGFyc2VkLmhvc3RuYW1lIDogdXJsRG9tYWluUGFyc2VkLmhvc3Q7XG4gICAgY29uc3QgaXNNYXRjaFByb3RvY29sOiBib29sZWFuID0gdXJsUGFyc2VkLnByb3RvY29sID09PSB0aGlzLnVybC5wcm90b2NvbDtcbiAgICBjb25zdCBpc01hdGNoSG9zdDogYm9vbGVhbiA9IGdldEhvc3QodXJsUGFyc2VkKSA9PT0gZ2V0SG9zdCh0aGlzLnVybCk7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGNvbnN0IGlzTWF0Y2hQYXRoOiBib29sZWFuID0gdXJsUGFyc2VkLnBhdGguaW5kZXhPZih0aGlzLnVybC5wYXRoKSA9PT0gMDtcblxuICAgIHJldHVybiBpc01hdGNoUHJvdG9jb2wgJiYgaXNNYXRjaEhvc3QgJiYgaXNNYXRjaFBhdGg7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGEgcmVtb3RlIHBhY2thZ2UgbWV0YWRhdGFcbiAgICogQHBhcmFtIHsqfSBuYW1lIHBhY2thZ2UgbmFtZVxuICAgKiBAcGFyYW0geyp9IG9wdGlvbnMgcmVxdWVzdCBvcHRpb25zLCBlZzogZVRhZy5cbiAgICogQHBhcmFtIHsqfSBjYWxsYmFja1xuICAgKi9cbiAgcHVibGljIGdldFJlbW90ZU1ldGFkYXRhKG5hbWU6IHN0cmluZywgb3B0aW9uczogYW55LCBjYWxsYmFjazogQ2FsbGJhY2spOiB2b2lkIHtcbiAgICBjb25zdCBoZWFkZXJzID0ge307XG4gICAgaWYgKF8uaXNOaWwob3B0aW9ucy5ldGFnKSA9PT0gZmFsc2UpIHtcbiAgICAgIGhlYWRlcnNbJ0lmLU5vbmUtTWF0Y2gnXSA9IG9wdGlvbnMuZXRhZztcbiAgICAgIGhlYWRlcnNbSEVBREVSUy5BQ0NFUFRdID0gY29udGVudFR5cGVBY2NlcHQ7XG4gICAgfVxuXG4gICAgdGhpcy5yZXF1ZXN0KFxuICAgICAge1xuICAgICAgICB1cmk6IGAvJHtlbmNvZGUobmFtZSl9YCxcbiAgICAgICAganNvbjogdHJ1ZSxcbiAgICAgICAgaGVhZGVyczogaGVhZGVycyxcbiAgICAgICAgcmVxOiBvcHRpb25zLnJlcSxcbiAgICAgIH0sXG4gICAgICAoZXJyLCByZXMsIGJvZHkpOiB2b2lkID0+IHtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZXMuc3RhdHVzQ29kZSA9PT0gSFRUUF9TVEFUVVMuTk9UX0ZPVU5EKSB7XG4gICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKEVycm9yQ29kZS5nZXROb3RGb3VuZChBUElfRVJST1IuTk9UX1BBQ0tBR0VfVVBMSU5LKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCEocmVzLnN0YXR1c0NvZGUgPj0gSFRUUF9TVEFUVVMuT0sgJiYgcmVzLnN0YXR1c0NvZGUgPCBIVFRQX1NUQVRVUy5NVUxUSVBMRV9DSE9JQ0VTKSkge1xuICAgICAgICAgIGNvbnN0IGVycm9yID0gRXJyb3JDb2RlLmdldEludGVybmFsRXJyb3IoXG4gICAgICAgICAgICBgJHtBUElfRVJST1IuQkFEX1NUQVRVU19DT0RFfTogJHtyZXMuc3RhdHVzQ29kZX1gXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGVycm9yLnJlbW90ZVN0YXR1cyA9IHJlcy5zdGF0dXNDb2RlO1xuICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgY2FsbGJhY2sobnVsbCwgYm9keSwgcmVzLmhlYWRlcnMuZXRhZyk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaCBhIHRhcmJhbGwgZnJvbSB0aGUgdXBsaW5rLlxuICAgKiBAcGFyYW0ge1N0cmluZ30gdXJsXG4gICAqIEByZXR1cm4ge1N0cmVhbX1cbiAgICovXG4gIHB1YmxpYyBmZXRjaFRhcmJhbGwodXJsOiBzdHJpbmcpIHtcbiAgICBjb25zdCBzdHJlYW0gPSBuZXcgUmVhZFRhcmJhbGwoe30pO1xuICAgIGxldCBjdXJyZW50X2xlbmd0aCA9IDA7XG4gICAgbGV0IGV4cGVjdGVkX2xlbmd0aDtcblxuICAgIHN0cmVhbS5hYm9ydCA9ICgpID0+IHt9O1xuICAgIGNvbnN0IHJlYWRTdHJlYW0gPSB0aGlzLnJlcXVlc3Qoe1xuICAgICAgdXJpX2Z1bGw6IHVybCxcbiAgICAgIGVuY29kaW5nOiBudWxsLFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICBBY2NlcHQ6IGNvbnRlbnRUeXBlQWNjZXB0LFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJlYWRTdHJlYW0ub24oJ3Jlc3BvbnNlJywgZnVuY3Rpb24gKHJlczogYW55KSB7XG4gICAgICBpZiAocmVzLnN0YXR1c0NvZGUgPT09IEhUVFBfU1RBVFVTLk5PVF9GT1VORCkge1xuICAgICAgICByZXR1cm4gc3RyZWFtLmVtaXQoJ2Vycm9yJywgRXJyb3JDb2RlLmdldE5vdEZvdW5kKEFQSV9FUlJPUi5OT1RfRklMRV9VUExJTkspKTtcbiAgICAgIH1cbiAgICAgIGlmICghKHJlcy5zdGF0dXNDb2RlID49IEhUVFBfU1RBVFVTLk9LICYmIHJlcy5zdGF0dXNDb2RlIDwgSFRUUF9TVEFUVVMuTVVMVElQTEVfQ0hPSUNFUykpIHtcbiAgICAgICAgcmV0dXJuIHN0cmVhbS5lbWl0KFxuICAgICAgICAgICdlcnJvcicsXG4gICAgICAgICAgRXJyb3JDb2RlLmdldEludGVybmFsRXJyb3IoYGJhZCB1cGxpbmsgc3RhdHVzIGNvZGU6ICR7cmVzLnN0YXR1c0NvZGV9YClcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmIChyZXMuaGVhZGVyc1tIRUFERVJfVFlQRS5DT05URU5UX0xFTkdUSF0pIHtcbiAgICAgICAgZXhwZWN0ZWRfbGVuZ3RoID0gcmVzLmhlYWRlcnNbSEVBREVSX1RZUEUuQ09OVEVOVF9MRU5HVEhdO1xuICAgICAgICBzdHJlYW0uZW1pdChIRUFERVJfVFlQRS5DT05URU5UX0xFTkdUSCwgcmVzLmhlYWRlcnNbSEVBREVSX1RZUEUuQ09OVEVOVF9MRU5HVEhdKTtcbiAgICAgIH1cblxuICAgICAgcmVhZFN0cmVhbS5waXBlKHN0cmVhbSk7XG4gICAgfSk7XG5cbiAgICByZWFkU3RyZWFtLm9uKCdlcnJvcicsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgIHN0cmVhbS5lbWl0KCdlcnJvcicsIGVycik7XG4gICAgfSk7XG4gICAgcmVhZFN0cmVhbS5vbignZGF0YScsIGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICBjdXJyZW50X2xlbmd0aCArPSBkYXRhLmxlbmd0aDtcbiAgICB9KTtcbiAgICByZWFkU3RyZWFtLm9uKCdlbmQnLCBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgY3VycmVudF9sZW5ndGggKz0gZGF0YS5sZW5ndGg7XG4gICAgICB9XG4gICAgICBpZiAoZXhwZWN0ZWRfbGVuZ3RoICYmIGN1cnJlbnRfbGVuZ3RoICE9IGV4cGVjdGVkX2xlbmd0aCkge1xuICAgICAgICBzdHJlYW0uZW1pdCgnZXJyb3InLCBFcnJvckNvZGUuZ2V0SW50ZXJuYWxFcnJvcihBUElfRVJST1IuQ09OVEVOVF9NSVNNQVRDSCkpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBzdHJlYW07XG4gIH1cblxuICAvKipcbiAgICogUGVyZm9ybSBhIHN0cmVhbSBzZWFyY2guXG4gICAqIEBwYXJhbSB7Kn0gb3B0aW9ucyByZXF1ZXN0IG9wdGlvbnNcbiAgICogQHJldHVybiB7U3RyZWFtfVxuICAgKi9cbiAgcHVibGljIHNlYXJjaChvcHRpb25zOiBhbnkpIHtcbiAgICBjb25zdCB0cmFuc2Zvcm1TdHJlYW06IGFueSA9IG5ldyBTdHJlYW0uUGFzc1Rocm91Z2goeyBvYmplY3RNb2RlOiB0cnVlIH0pO1xuICAgIGNvbnN0IHJlcXVlc3RTdHJlYW06IFN0cmVhbS5SZWFkYWJsZSA9IHRoaXMucmVxdWVzdCh7XG4gICAgICB1cmk6IG9wdGlvbnMucmVxLnVybCxcbiAgICAgIHJlcTogb3B0aW9ucy5yZXEsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgIC8vIHF1ZXJ5IGZvciBzZWFyY2hcbiAgICAgICAgcmVmZXJlcjogb3B0aW9ucy5yZXEuZ2V0KCdyZWZlcmVyJyksXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgY29uc3QgcGFyc2VQYWNrYWdlID0gKHBrZzogUGFja2FnZSk6IHZvaWQgPT4ge1xuICAgICAgaWYgKGlzT2JqZWN0T3JBcnJheShwa2cpKSB7XG4gICAgICAgIHRyYW5zZm9ybVN0cmVhbS5lbWl0KCdkYXRhJywgcGtnKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgcmVxdWVzdFN0cmVhbS5vbigncmVzcG9uc2UnLCAocmVzKTogdm9pZCA9PiB7XG4gICAgICBpZiAoIVN0cmluZyhyZXMuc3RhdHVzQ29kZSkubWF0Y2goL14yXFxkXFxkJC8pKSB7XG4gICAgICAgIHJldHVybiB0cmFuc2Zvcm1TdHJlYW0uZW1pdChcbiAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgIEVycm9yQ29kZS5nZXRJbnRlcm5hbEVycm9yKGBiYWQgc3RhdHVzIGNvZGUgJHtyZXMuc3RhdHVzQ29kZX0gZnJvbSB1cGxpbmtgKVxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3JlcXVlc3QvcmVxdWVzdCNyZXF1ZXN0b3B0aW9ucy1jYWxsYmFja1xuICAgICAgLy8gUmVxdWVzdCBsaWJyYXJ5IHdpbGwgbm90IGRlY29kZSBnemlwIHN0cmVhbS5cbiAgICAgIGxldCBqc29uU3RyZWFtO1xuICAgICAgaWYgKHJlcy5oZWFkZXJzW0hFQURFUl9UWVBFLkNPTlRFTlRfRU5DT0RJTkddID09PSBIRUFERVJTLkdaSVApIHtcbiAgICAgICAganNvblN0cmVhbSA9IHJlcy5waXBlKHpsaWIuY3JlYXRlVW56aXAoKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBqc29uU3RyZWFtID0gcmVzO1xuICAgICAgfVxuICAgICAganNvblN0cmVhbS5waXBlKEpTT05TdHJlYW0ucGFyc2UoJyonKSkub24oJ2RhdGEnLCBwYXJzZVBhY2thZ2UpO1xuICAgICAganNvblN0cmVhbS5vbignZW5kJywgKCk6IHZvaWQgPT4ge1xuICAgICAgICB0cmFuc2Zvcm1TdHJlYW0uZW1pdCgnZW5kJyk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHJlcXVlc3RTdHJlYW0ub24oJ2Vycm9yJywgKGVycjogRXJyb3IpOiB2b2lkID0+IHtcbiAgICAgIHRyYW5zZm9ybVN0cmVhbS5lbWl0KCdlcnJvcicsIGVycik7XG4gICAgfSk7XG5cbiAgICB0cmFuc2Zvcm1TdHJlYW0uYWJvcnQgPSAoKTogdm9pZCA9PiB7XG4gICAgICAvLyBGSVhNRTogdGhpcyBpcyBjbGVhcmx5IGEgcG90ZW50aWFsIGlzc3VlXG4gICAgICAvLyB0aGVyZSBpcyBubyBhYm9ydCBtZXRob2Qgb24gU3RyZWFtLlJlYWRhYmxlXG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICByZXF1ZXN0U3RyZWFtLmFib3J0KCk7XG4gICAgICB0cmFuc2Zvcm1TdHJlYW0uZW1pdCgnZW5kJyk7XG4gICAgfTtcblxuICAgIHJldHVybiB0cmFuc2Zvcm1TdHJlYW07XG4gIH1cblxuICAvKipcbiAgICogQWRkIHByb3h5IGhlYWRlcnMuXG4gICAqIEZJWE1FOiBvYmplY3QgbXV0YXRpb25zLCBpdCBzaG91bGQgcmV0dXJuIGFuIG5ldyBvYmplY3RcbiAgICogQHBhcmFtIHsqfSByZXEgdGhlIGh0dHAgcmVxdWVzdFxuICAgKiBAcGFyYW0geyp9IGhlYWRlcnMgdGhlIHJlcXVlc3QgaGVhZGVyc1xuICAgKi9cbiAgcHJpdmF0ZSBfYWRkUHJveHlIZWFkZXJzKHJlcTogYW55LCBoZWFkZXJzOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAocmVxKSB7XG4gICAgICAvLyBPbmx5IHN1Ym1pdCBYLUZvcndhcmRlZC1Gb3IgZmllbGQgaWYgd2UgZG9uJ3QgaGF2ZSBhIHByb3h5IHNlbGVjdGVkXG4gICAgICAvLyBpbiB0aGUgY29uZmlnIGZpbGUuXG4gICAgICAvL1xuICAgICAgLy8gT3RoZXJ3aXNlIG1pc2NvbmZpZ3VyZWQgcHJveHkgY291bGQgcmV0dXJuIDQwNzpcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ybGlkd2thL3Npbm9waWEvaXNzdWVzLzI1NFxuICAgICAgLy9cbiAgICAgIC8vIEZJWE1FOiBwcm94eSBsb2dpYyBpcyBvZGQsIHNvbWV0aGluZyBpcyB3cm9uZyBoZXJlLlxuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgaWYgKCF0aGlzLnByb3h5KSB7XG4gICAgICAgIGhlYWRlcnNbJ3gtZm9yd2FyZGVkLWZvciddID1cbiAgICAgICAgICAocmVxLmdldCgneC1mb3J3YXJkZWQtZm9yJykgPyByZXEuZ2V0KCd4LWZvcndhcmRlZC1mb3InKSArICcsICcgOiAnJykgK1xuICAgICAgICAgIHJlcS5jb25uZWN0aW9uLnJlbW90ZUFkZHJlc3M7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gYWx3YXlzIGF0dGFjaCBWaWEgaGVhZGVyIHRvIGF2b2lkIGxvb3BzLCBldmVuIGlmIHdlJ3JlIG5vdCBwcm94eWluZ1xuICAgIGhlYWRlcnNbJ3ZpYSddID0gcmVxICYmIHJlcS5nZXQoJ3ZpYScpID8gcmVxLmdldCgndmlhJykgKyAnLCAnIDogJyc7XG5cbiAgICBoZWFkZXJzWyd2aWEnXSArPSAnMS4xICcgKyB0aGlzLnNlcnZlcl9pZCArICcgKFZlcmRhY2NpbyknO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIHdoZXRoZXIgdGhlIHJlbW90ZSBob3N0IGlzIGF2YWlsYWJsZS5cbiAgICogQHBhcmFtIHsqfSBhbGl2ZVxuICAgKiBAcmV0dXJuIHtCb29sZWFufVxuICAgKi9cbiAgcHJpdmF0ZSBfc3RhdHVzQ2hlY2soYWxpdmU/OiBib29sZWFuKTogYm9vbGVhbiB8IHZvaWQge1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gdGhpcy5faWZSZXF1ZXN0RmFpbHVyZSgpID09PSBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGFsaXZlKSB7XG4gICAgICBpZiAodGhpcy5mYWlsZWRfcmVxdWVzdHMgPj0gdGhpcy5tYXhfZmFpbHMpIHtcbiAgICAgICAgdGhpcy5sb2dnZXIud2FybihcbiAgICAgICAgICB7XG4gICAgICAgICAgICBob3N0OiB0aGlzLnVybC5ob3N0LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgJ2hvc3QgQHtob3N0fSBpcyBiYWNrIG9ubGluZSdcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZmFpbGVkX3JlcXVlc3RzID0gMDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5mYWlsZWRfcmVxdWVzdHMrKztcbiAgICAgIGlmICh0aGlzLmZhaWxlZF9yZXF1ZXN0cyA9PT0gdGhpcy5tYXhfZmFpbHMpIHtcbiAgICAgICAgdGhpcy5sb2dnZXIud2FybihcbiAgICAgICAgICB7XG4gICAgICAgICAgICBob3N0OiB0aGlzLnVybC5ob3N0LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgJ2hvc3QgQHtob3N0fSBpcyBub3cgb2ZmbGluZSdcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmxhc3RfcmVxdWVzdF90aW1lID0gRGF0ZS5ub3coKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJZiB0aGUgcmVxdWVzdCBmYWlsdXJlLlxuICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBfaWZSZXF1ZXN0RmFpbHVyZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5mYWlsZWRfcmVxdWVzdHMgPj0gdGhpcy5tYXhfZmFpbHMgJiZcbiAgICAgIE1hdGguYWJzKERhdGUubm93KCkgLSAodGhpcy5sYXN0X3JlcXVlc3RfdGltZSBhcyBudW1iZXIpKSA8IHRoaXMuZmFpbF90aW1lb3V0XG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdXAgYSBwcm94eS5cbiAgICogQHBhcmFtIHsqfSBob3N0bmFtZVxuICAgKiBAcGFyYW0geyp9IGNvbmZpZ1xuICAgKiBAcGFyYW0geyp9IG1haW5jb25maWdcbiAgICogQHBhcmFtIHsqfSBpc0hUVFBTXG4gICAqL1xuICBwcml2YXRlIF9zZXR1cFByb3h5KFxuICAgIGhvc3RuYW1lOiBzdHJpbmcsXG4gICAgY29uZmlnOiBVcExpbmtDb25mLFxuICAgIG1haW5jb25maWc6IENvbmZpZyxcbiAgICBpc0hUVFBTOiBib29sZWFuXG4gICk6IHZvaWQge1xuICAgIGxldCBub1Byb3h5TGlzdDtcbiAgICBjb25zdCBwcm94eV9rZXk6IHN0cmluZyA9IGlzSFRUUFMgPyAnaHR0cHNfcHJveHknIDogJ2h0dHBfcHJveHknO1xuXG4gICAgLy8gZ2V0IGh0dHBfcHJveHkgYW5kIG5vX3Byb3h5IGNvbmZpZ3NcbiAgICBpZiAocHJveHlfa2V5IGluIGNvbmZpZykge1xuICAgICAgdGhpcy5wcm94eSA9IGNvbmZpZ1twcm94eV9rZXldO1xuICAgIH0gZWxzZSBpZiAocHJveHlfa2V5IGluIG1haW5jb25maWcpIHtcbiAgICAgIHRoaXMucHJveHkgPSBtYWluY29uZmlnW3Byb3h5X2tleV07XG4gICAgfVxuICAgIGlmICgnbm9fcHJveHknIGluIGNvbmZpZykge1xuICAgICAgbm9Qcm94eUxpc3QgPSBjb25maWcubm9fcHJveHk7XG4gICAgfSBlbHNlIGlmICgnbm9fcHJveHknIGluIG1haW5jb25maWcpIHtcbiAgICAgIG5vUHJveHlMaXN0ID0gbWFpbmNvbmZpZy5ub19wcm94eTtcbiAgICB9XG5cbiAgICAvLyB1c2Ugd2dldC1saWtlIGFsZ29yaXRobSB0byBkZXRlcm1pbmUgaWYgcHJveHkgc2hvdWxkbid0IGJlIHVzZWRcbiAgICBpZiAoaG9zdG5hbWVbMF0gIT09ICcuJykge1xuICAgICAgaG9zdG5hbWUgPSAnLicgKyBob3N0bmFtZTtcbiAgICB9XG5cbiAgICBpZiAoXy5pc1N0cmluZyhub1Byb3h5TGlzdCkgJiYgbm9Qcm94eUxpc3QubGVuZ3RoKSB7XG4gICAgICBub1Byb3h5TGlzdCA9IG5vUHJveHlMaXN0LnNwbGl0KCcsJyk7XG4gICAgfVxuXG4gICAgaWYgKF8uaXNBcnJheShub1Byb3h5TGlzdCkpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9Qcm94eUxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbGV0IG5vUHJveHlJdGVtID0gbm9Qcm94eUxpc3RbaV07XG4gICAgICAgIGlmIChub1Byb3h5SXRlbVswXSAhPT0gJy4nKSB7XG4gICAgICAgICAgbm9Qcm94eUl0ZW0gPSAnLicgKyBub1Byb3h5SXRlbTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaG9zdG5hbWUubGFzdEluZGV4T2Yobm9Qcm94eUl0ZW0pID09PSBob3N0bmFtZS5sZW5ndGggLSBub1Byb3h5SXRlbS5sZW5ndGgpIHtcbiAgICAgICAgICBpZiAodGhpcy5wcm94eSkge1xuICAgICAgICAgICAgZGVidWcoJ25vdCB1c2luZyBwcm94eSBmb3IgJW8sIGV4Y2x1ZGVkIGJ5ICVvIHJ1bGUnLCB0aGlzLnVybC5ocmVmLCBub1Byb3h5SXRlbSk7XG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICB0aGlzLnByb3h5ID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gaWYgaXQncyBub24tc3RyaW5nIChpLmUuIFwiZmFsc2VcIiksIGRvbid0IHVzZSBpdFxuICAgIGlmIChfLmlzU3RyaW5nKHRoaXMucHJveHkpID09PSBmYWxzZSkge1xuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgZGVsZXRlIHRoaXMucHJveHk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlYnVnKCd1c2luZyBwcm94eSAlbyBmb3IgJW8nLCB0aGlzLnVybC5ocmVmLCB0aGlzLnByb3h5KTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgUHJveHlTdG9yYWdlO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxJQUFBQSxXQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxNQUFBLEdBQUFGLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRSxPQUFBLEdBQUFILHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRyxRQUFBLEdBQUFKLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBSSxPQUFBLEdBQUFMLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBSyxJQUFBLEdBQUFOLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBTSxLQUFBLEdBQUFQLHNCQUFBLENBQUFDLE9BQUE7QUFFQSxJQUFBTyxRQUFBLEdBQUFQLE9BQUE7QUFFQSxJQUFBUSxNQUFBLEdBQUFSLE9BQUE7QUFFQSxJQUFBUyxVQUFBLEdBQUFULE9BQUE7QUFVQSxJQUFBVSxPQUFBLEdBQUFWLE9BQUE7QUFDQSxJQUFBVyxPQUFBLEdBQUFYLE9BQUE7QUFBOEUsU0FBQUQsdUJBQUFhLEdBQUEsV0FBQUEsR0FBQSxJQUFBQSxHQUFBLENBQUFDLFVBQUEsR0FBQUQsR0FBQSxLQUFBRSxPQUFBLEVBQUFGLEdBQUE7QUFBQSxTQUFBRyxnQkFBQUgsR0FBQSxFQUFBSSxHQUFBLEVBQUFDLEtBQUEsSUFBQUQsR0FBQSxHQUFBRSxjQUFBLENBQUFGLEdBQUEsT0FBQUEsR0FBQSxJQUFBSixHQUFBLElBQUFPLE1BQUEsQ0FBQUMsY0FBQSxDQUFBUixHQUFBLEVBQUFJLEdBQUEsSUFBQUMsS0FBQSxFQUFBQSxLQUFBLEVBQUFJLFVBQUEsUUFBQUMsWUFBQSxRQUFBQyxRQUFBLG9CQUFBWCxHQUFBLENBQUFJLEdBQUEsSUFBQUMsS0FBQSxXQUFBTCxHQUFBO0FBQUEsU0FBQU0sZUFBQU0sR0FBQSxRQUFBUixHQUFBLEdBQUFTLFlBQUEsQ0FBQUQsR0FBQSwyQkFBQVIsR0FB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
|
|
625
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfSlNPTlN0cmVhbSIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX2RlYnVnIiwiX2xvZGFzaCIsIl9yZXF1ZXN0IiwiX3N0cmVhbSIsIl91cmwiLCJfemxpYiIsIl9zdHJlYW1zIiwiX3V0aWxzIiwiX2NvbnN0YW50cyIsIl9sb2dnZXIiLCJfdXRpbHMyIiwib2JqIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJfZGVmaW5lUHJvcGVydHkiLCJrZXkiLCJ2YWx1ZSIsIl90b1Byb3BlcnR5S2V5IiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJlbnVtZXJhYmxlIiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCJhcmciLCJfdG9QcmltaXRpdmUiLCJTdHJpbmciLCJpbnB1dCIsImhpbnQiLCJwcmltIiwiU3ltYm9sIiwidG9QcmltaXRpdmUiLCJ1bmRlZmluZWQiLCJyZXMiLCJjYWxsIiwiVHlwZUVycm9yIiwiTnVtYmVyIiwiZGVidWciLCJidWlsZERlYnVnIiwiZW5jb2RlIiwidGhpbmciLCJlbmNvZGVVUklDb21wb25lbnQiLCJyZXBsYWNlIiwianNvbkNvbnRlbnRUeXBlIiwiSEVBREVSUyIsIkpTT04iLCJjb250ZW50VHlwZUFjY2VwdCIsInNldENvbmZpZyIsImNvbmZpZyIsImRlZiIsIl8iLCJpc05pbCIsIlByb3h5U3RvcmFnZSIsImNvbnN0cnVjdG9yIiwibWFpbkNvbmZpZyIsIl9tYWluQ29uZmlnJHVzZXJfYWdlbiIsImZhaWxlZF9yZXF1ZXN0cyIsInVzZXJBZ2VudCIsInVzZXJfYWdlbnQiLCJjYSIsImxvZ2dlciIsInNlcnZlcl9pZCIsInVybCIsIlVSTCIsInBhcnNlIiwiX3NldHVwUHJveHkiLCJob3N0bmFtZSIsInByb3RvY29sIiwidGltZW91dCIsIndhcm4iLCJqb2luIiwibWF4YWdlIiwicGFyc2VJbnRlcnZhbCIsIm1heF9mYWlscyIsImZhaWxfdGltZW91dCIsInN0cmljdF9zc2wiLCJCb29sZWFuIiwiYWdlbnRfb3B0aW9ucyIsImtlZXBBbGl2ZSIsIm1heFNvY2tldHMiLCJtYXhGcmVlU29ja2V0cyIsInJlcXVlc3QiLCJvcHRpb25zIiwiY2IiLCJqc29uIiwiX3N0YXR1c0NoZWNrIiwic3RyZWFtUmVhZCIsIlN0cmVhbSIsIlJlYWRhYmxlIiwicHJvY2VzcyIsIm5leHRUaWNrIiwiRXJyb3JDb2RlIiwiZ2V0SW50ZXJuYWxFcnJvciIsIkFQSV9FUlJPUiIsIlVQTElOS19PRkZMSU5FIiwiZW1pdCIsIl9yZWFkIiwib24iLCJzZWxmIiwiaGVhZGVycyIsIl9zZXRIZWFkZXJzIiwiX2FkZFByb3h5SGVhZGVycyIsInJlcSIsIl9vdmVycmlkZVdpdGhVcExpbmtDb25maWdIZWFkZXJzIiwibWV0aG9kIiwidXJpIiwidXJpX2Z1bGwiLCJpbmZvIiwiaXNPYmplY3QiLCJzdHJpbmdpZnkiLCJyZXF1ZXN0Q2FsbGJhY2siLCJlcnIiLCJib2R5IiwiZXJyb3IiLCJyZXNwb25zZUxlbmd0aCIsImxlbmd0aCIsInByb2Nlc3NCb2R5IiwibG9nQWN0aXZpdHkiLCJtZXNzYWdlIiwic3RhdHVzQ29kZSIsInRvU3RyaW5nIiwiQ0hBUkFDVEVSX0VOQ09ESU5HIiwiVVRGOCIsIl9lcnIiLCJpc1N0cmluZyIsImh0dHAiLCJzdGF0dXMiLCJieXRlcyIsImluIiwib3V0IiwicmVxdWVzdE9wdGlvbnMiLCJwcm94eSIsImVuY29kaW5nIiwiZ3ppcCIsInN0cmljdFNTTCIsImFnZW50T3B0aW9ucyIsImFzc2lnbiIsInN0YXR1c0NhbGxlZCIsIl92ZXJkYWNjaW9fYWJvcnRlZCIsImRvX2xvZyIsImlzTnVsbCIsIl9vcHRpb25zJHJlcSIsImFjY2VwdCIsIkFDQ0VQVCIsImFjY2VwdEVuY29kaW5nIiwiQUNDRVBUX0VOQ09ESU5HIiwiVVNFUl9BR0VOVCIsImdldCIsIl9zZXRBdXRoIiwiYXV0aCIsIkFVVEhPUklaQVRJT04iLCJ0b2tlbiIsIl90aHJvd0Vycm9yQXV0aCIsInRva2VuQ29uZiIsInRva2VuX2VudiIsImVudiIsImlzQm9vbGVhbiIsIk5QTV9UT0tFTiIsIkVSUk9SX0NPREUiLCJ0b2tlbl9yZXF1aXJlZCIsInR5cGUiLCJUT0tFTl9CQVNJQyIsIl9zZXRIZWFkZXJBdXRob3JpemF0aW9uIiwiRXJyb3IiLCJfdHlwZSIsInRvTG93ZXJDYXNlIiwiVE9LRU5fQkVBUkVSIiwiaW5jbHVkZXMiLCJ1cHBlckZpcnN0IiwiYnVpbGRUb2tlbiIsImlzVXBsaW5rVmFsaWQiLCJ1cmxQYXJzZWQiLCJpc0hUVFBTIiwidXJsRG9tYWluUGFyc2VkIiwicG9ydCIsImdldEhvc3QiLCJob3N0IiwiaXNNYXRjaFByb3RvY29sIiwiaXNNYXRjaEhvc3QiLCJpc01hdGNoUGF0aCIsInBhdGgiLCJpbmRleE9mIiwiZ2V0UmVtb3RlTWV0YWRhdGEiLCJuYW1lIiwiY2FsbGJhY2siLCJldGFnIiwiSFRUUF9TVEFUVVMiLCJOT1RfRk9VTkQiLCJnZXROb3RGb3VuZCIsIk5PVF9QQUNLQUdFX1VQTElOSyIsIk9LIiwiTVVMVElQTEVfQ0hPSUNFUyIsIkJBRF9TVEFUVVNfQ09ERSIsInJlbW90ZVN0YXR1cyIsImZldGNoVGFyYmFsbCIsInN0cmVhbSIsIlJlYWRUYXJiYWxsIiwiY3VycmVudF9sZW5ndGgiLCJleHBlY3RlZF9sZW5ndGgiLCJhYm9ydCIsInJlYWRTdHJlYW0iLCJBY2NlcHQiLCJOT1RfRklMRV9VUExJTksiLCJIRUFERVJfVFlQRSIsIkNPTlRFTlRfTEVOR1RIIiwicGlwZSIsImRhdGEiLCJDT05URU5UX01JU01BVENIIiwic2VhcmNoIiwidHJhbnNmb3JtU3RyZWFtIiwiUGFzc1Rocm91Z2giLCJvYmplY3RNb2RlIiwicmVxdWVzdFN0cmVhbSIsInJlZmVyZXIiLCJwYXJzZVBhY2thZ2UiLCJwa2ciLCJpc09iamVjdE9yQXJyYXkiLCJtYXRjaCIsImpzb25TdHJlYW0iLCJDT05URU5UX0VOQ09ESU5HIiwiR1pJUCIsInpsaWIiLCJjcmVhdGVVbnppcCIsIkpTT05TdHJlYW0iLCJjb25uZWN0aW9uIiwicmVtb3RlQWRkcmVzcyIsImFsaXZlIiwiYXJndW1lbnRzIiwiX2lmUmVxdWVzdEZhaWx1cmUiLCJsYXN0X3JlcXVlc3RfdGltZSIsIkRhdGUiLCJub3ciLCJNYXRoIiwiYWJzIiwibWFpbmNvbmZpZyIsIm5vUHJveHlMaXN0IiwicHJveHlfa2V5Iiwibm9fcHJveHkiLCJzcGxpdCIsImlzQXJyYXkiLCJpIiwibm9Qcm94eUl0ZW0iLCJsYXN0SW5kZXhPZiIsImhyZWYiLCJfZGVmYXVsdCIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvbGliL3VwLXN0b3JhZ2UudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEpTT05TdHJlYW0gZnJvbSAnSlNPTlN0cmVhbSc7XG5pbXBvcnQgYnVpbGREZWJ1ZyBmcm9tICdkZWJ1Zyc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHJlcXVlc3QgZnJvbSAncmVxdWVzdCc7XG5pbXBvcnQgU3RyZWFtIGZyb20gJ3N0cmVhbSc7XG5pbXBvcnQgVVJMLCB7IFVybFdpdGhTdHJpbmdRdWVyeSB9IGZyb20gJ3VybCc7XG5pbXBvcnQgemxpYiBmcm9tICd6bGliJztcblxuaW1wb3J0IHsgUmVhZFRhcmJhbGwgfSBmcm9tICdAdmVyZGFjY2lvL3N0cmVhbXMnO1xuaW1wb3J0IHsgQ2FsbGJhY2ssIENvbmZpZywgSGVhZGVycywgTG9nZ2VyLCBQYWNrYWdlLCBVcExpbmtDb25mIH0gZnJvbSAnQHZlcmRhY2Npby90eXBlcyc7XG5pbXBvcnQgeyBidWlsZFRva2VuIH0gZnJvbSAnQHZlcmRhY2Npby91dGlscyc7XG5cbmltcG9ydCB7XG4gIEFQSV9FUlJPUixcbiAgQ0hBUkFDVEVSX0VOQ09ESU5HLFxuICBFUlJPUl9DT0RFLFxuICBIRUFERVJTLFxuICBIRUFERVJfVFlQRSxcbiAgSFRUUF9TVEFUVVMsXG4gIFRPS0VOX0JBU0lDLFxuICBUT0tFTl9CRUFSRVIsXG59IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCB7IEVycm9yQ29kZSwgaXNPYmplY3QsIGlzT2JqZWN0T3JBcnJheSwgcGFyc2VJbnRlcnZhbCB9IGZyb20gJy4vdXRpbHMnO1xuXG5jb25zdCBkZWJ1ZyA9IGJ1aWxkRGVidWcoJ3ZlcmRhY2Npbzpwcm94eScpO1xuXG5jb25zdCBlbmNvZGUgPSBmdW5jdGlvbiAodGhpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHRoaW5nKS5yZXBsYWNlKC9eJTQwLywgJ0AnKTtcbn07XG5cbmNvbnN0IGpzb25Db250ZW50VHlwZSA9IEhFQURFUlMuSlNPTjtcbmNvbnN0IGNvbnRlbnRUeXBlQWNjZXB0ID0gYCR7anNvbkNvbnRlbnRUeXBlfTtgO1xuXG4vKipcbiAqIEp1c3QgYSBoZWxwZXIgKGBjb25maWdba2V5XSB8fCBkZWZhdWx0YCBkb2Vzbid0IHdvcmsgYmVjYXVzZSBvZiB6ZXJvZXMpXG4gKi9cbmNvbnN0IHNldENvbmZpZyA9IChjb25maWcsIGtleSwgZGVmKTogc3RyaW5nID0+IHtcbiAgcmV0dXJuIF8uaXNOaWwoY29uZmlnW2tleV0pID09PSBmYWxzZSA/IGNvbmZpZ1trZXldIDogZGVmO1xufTtcblxuLyoqXG4gKiBJbXBsZW1lbnRzIFN0b3JhZ2UgaW50ZXJmYWNlXG4gKiAoc2FtZSBmb3Igc3RvcmFnZS5qcywgbG9jYWwtc3RvcmFnZS5qcywgdXAtc3RvcmFnZS5qcylcbiAqL1xuY2xhc3MgUHJveHlTdG9yYWdlIHtcbiAgcHVibGljIGNvbmZpZzogVXBMaW5rQ29uZjtcbiAgcHVibGljIGZhaWxlZF9yZXF1ZXN0czogbnVtYmVyO1xuICBwdWJsaWMgdXNlckFnZW50OiBzdHJpbmc7XG4gIHB1YmxpYyBjYTogc3RyaW5nIHwgdm9pZDtcbiAgcHVibGljIGxvZ2dlcjogTG9nZ2VyO1xuICBwdWJsaWMgc2VydmVyX2lkOiBzdHJpbmc7XG4gIHB1YmxpYyB1cmw6IGFueTtcbiAgcHVibGljIG1heGFnZTogbnVtYmVyO1xuICBwdWJsaWMgdGltZW91dDogbnVtYmVyO1xuICBwdWJsaWMgbWF4X2ZhaWxzOiBudW1iZXI7XG4gIHB1YmxpYyBmYWlsX3RpbWVvdXQ6IG51bWJlcjtcbiAgcHVibGljIGFnZW50X29wdGlvbnM6IGFueTtcbiAgLy8gRklYTUU6IHVwbmFtZSBpcyBhc3NpZ25lZCB0byBlYWNoIGluc3RhbmNlXG4gIC8vIEB0cy1pZ25vcmVcbiAgcHVibGljIHVwbmFtZTogc3RyaW5nO1xuICAvLyBGSVhNRTogcHJveHkgY2FuIGJlIGJvb2xlYW4gb3Igb2JqZWN0LCBzb21ldGhpbmcgc21lbGxzIGhlcmVcbiAgLy8gQHRzLWlnbm9yZVxuICBwdWJsaWMgcHJveHk6IHN0cmluZyB8IHZvaWQ7XG4gIC8vIEB0cy1pZ25vcmVcbiAgcHVibGljIGxhc3RfcmVxdWVzdF90aW1lOiBudW1iZXIgfCBudWxsO1xuICBwdWJsaWMgc3RyaWN0X3NzbDogYm9vbGVhbjtcblxuICAvKipcbiAgICogQ29uc3RydWN0b3JcbiAgICogQHBhcmFtIHsqfSBjb25maWdcbiAgICogQHBhcmFtIHsqfSBtYWluQ29uZmlnXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IoY29uZmlnOiBVcExpbmtDb25mLCBtYWluQ29uZmlnOiBDb25maWcpIHtcbiAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcbiAgICB0aGlzLmZhaWxlZF9yZXF1ZXN0cyA9IDA7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHRoaXMudXNlckFnZW50ID0gbWFpbkNvbmZpZy51c2VyX2FnZW50ID8/ICdoaWRkZW4nO1xuICAgIHRoaXMuY2EgPSBjb25maWcuY2E7XG4gICAgdGhpcy5sb2dnZXIgPSBsb2dnZXI7XG4gICAgdGhpcy5zZXJ2ZXJfaWQgPSBtYWluQ29uZmlnLnNlcnZlcl9pZDtcblxuICAgIHRoaXMudXJsID0gVVJMLnBhcnNlKHRoaXMuY29uZmlnLnVybCk7XG5cbiAgICB0aGlzLl9zZXR1cFByb3h5KHRoaXMudXJsLmhvc3RuYW1lLCBjb25maWcsIG1haW5Db25maWcsIHRoaXMudXJsLnByb3RvY29sID09PSAnaHR0cHM6Jyk7XG5cbiAgICB0aGlzLmNvbmZpZy51cmwgPSB0aGlzLmNvbmZpZy51cmwucmVwbGFjZSgvXFwvJC8sICcnKTtcblxuICAgIGlmICh0aGlzLmNvbmZpZy50aW1lb3V0ICYmIE51bWJlcih0aGlzLmNvbmZpZy50aW1lb3V0KSA+PSAxMDAwKSB7XG4gICAgICB0aGlzLmxvZ2dlci53YXJuKFxuICAgICAgICBbXG4gICAgICAgICAgJ1RvbyBiaWcgdGltZW91dCB2YWx1ZTogJyArIHRoaXMuY29uZmlnLnRpbWVvdXQsXG4gICAgICAgICAgJ1dlIGNoYW5nZWQgdGltZSBmb3JtYXQgdG8gbmdpbngtbGlrZSBvbmUnLFxuICAgICAgICAgICcoc2VlIGh0dHA6Ly9uZ2lueC5vcmcvZW4vZG9jcy9zeW50YXguaHRtbCknLFxuICAgICAgICAgICdzbyBwbGVhc2UgdXBkYXRlIHlvdXIgY29uZmlnIGFjY29yZGluZ2x5JyxcbiAgICAgICAgXS5qb2luKCdcXG4nKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBhIGJ1bmNoIG9mIGRpZmZlcmVudCBjb25maWd1cmFibGUgdGltZXJzXG4gICAgdGhpcy5tYXhhZ2UgPSBwYXJzZUludGVydmFsKHNldENvbmZpZyh0aGlzLmNvbmZpZywgJ21heGFnZScsICcybScpKTtcbiAgICB0aGlzLnRpbWVvdXQgPSBwYXJzZUludGVydmFsKHNldENvbmZpZyh0aGlzLmNvbmZpZywgJ3RpbWVvdXQnLCAnMzBzJykpO1xuICAgIHRoaXMubWF4X2ZhaWxzID0gTnVtYmVyKHNldENvbmZpZyh0aGlzLmNvbmZpZywgJ21heF9mYWlscycsIDIpKTtcbiAgICB0aGlzLmZhaWxfdGltZW91dCA9IHBhcnNlSW50ZXJ2YWwoc2V0Q29uZmlnKHRoaXMuY29uZmlnLCAnZmFpbF90aW1lb3V0JywgJzVtJykpO1xuICAgIHRoaXMuc3RyaWN0X3NzbCA9IEJvb2xlYW4oc2V0Q29uZmlnKHRoaXMuY29uZmlnLCAnc3RyaWN0X3NzbCcsIHRydWUpKTtcbiAgICB0aGlzLmFnZW50X29wdGlvbnMgPSBzZXRDb25maWcodGhpcy5jb25maWcsICdhZ2VudF9vcHRpb25zJywge1xuICAgICAga2VlcEFsaXZlOiB0cnVlLFxuICAgICAgbWF4U29ja2V0czogNDAsXG4gICAgICBtYXhGcmVlU29ja2V0czogMTAsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2ggYW4gYXNzZXQuXG4gICAqIEBwYXJhbSB7Kn0gb3B0aW9uc1xuICAgKiBAcGFyYW0geyp9IGNiXG4gICAqIEByZXR1cm4ge1JlcXVlc3R9XG4gICAqL1xuICBwcml2YXRlIHJlcXVlc3Qob3B0aW9uczogYW55LCBjYj86IENhbGxiYWNrKTogU3RyZWFtLlJlYWRhYmxlIHtcbiAgICBsZXQganNvbjtcblxuICAgIGlmICh0aGlzLl9zdGF0dXNDaGVjaygpID09PSBmYWxzZSkge1xuICAgICAgY29uc3Qgc3RyZWFtUmVhZCA9IG5ldyBTdHJlYW0uUmVhZGFibGUoKTtcblxuICAgICAgcHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbiAoKTogdm9pZCB7XG4gICAgICAgIGlmIChjYikge1xuICAgICAgICAgIGNiKEVycm9yQ29kZS5nZXRJbnRlcm5hbEVycm9yKEFQSV9FUlJPUi5VUExJTktfT0ZGTElORSkpO1xuICAgICAgICB9XG4gICAgICAgIHN0cmVhbVJlYWQuZW1pdCgnZXJyb3InLCBFcnJvckNvZGUuZ2V0SW50ZXJuYWxFcnJvcihBUElfRVJST1IuVVBMSU5LX09GRkxJTkUpKTtcbiAgICAgIH0pO1xuXG4gICAgICBzdHJlYW1SZWFkLl9yZWFkID0gZnVuY3Rpb24gKCk6IHZvaWQge307XG4gICAgICAvLyBwcmV2ZW50aW5nICdVbmNhdWdodCwgdW5zcGVjaWZpZWQgXCJlcnJvclwiIGV2ZW50J1xuICAgICAgc3RyZWFtUmVhZC5vbignZXJyb3InLCBmdW5jdGlvbiAoKTogdm9pZCB7fSk7XG4gICAgICByZXR1cm4gc3RyZWFtUmVhZDtcbiAgICB9XG5cbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICBjb25zdCBoZWFkZXJzOiBIZWFkZXJzID0gdGhpcy5fc2V0SGVhZGVycyhvcHRpb25zKTtcblxuICAgIHRoaXMuX2FkZFByb3h5SGVhZGVycyhvcHRpb25zLnJlcSwgaGVhZGVycyk7XG4gICAgdGhpcy5fb3ZlcnJpZGVXaXRoVXBMaW5rQ29uZmlnSGVhZGVycyhoZWFkZXJzKTtcblxuICAgIGNvbnN0IG1ldGhvZCA9IG9wdGlvbnMubWV0aG9kIHx8ICdHRVQnO1xuICAgIGNvbnN0IHVyaSA9IG9wdGlvbnMudXJpX2Z1bGwgfHwgdGhpcy5jb25maWcudXJsICsgb3B0aW9ucy51cmk7XG5cbiAgICBzZWxmLmxvZ2dlci5pbmZvKFxuICAgICAge1xuICAgICAgICBtZXRob2Q6IG1ldGhvZCxcbiAgICAgICAgdXJpOiB1cmksXG4gICAgICB9LFxuICAgICAgXCJtYWtpbmcgcmVxdWVzdDogJ0B7bWV0aG9kfSBAe3VyaX0nXCJcbiAgICApO1xuXG4gICAgaWYgKGlzT2JqZWN0KG9wdGlvbnMuanNvbikpIHtcbiAgICAgIGpzb24gPSBKU09OLnN0cmluZ2lmeShvcHRpb25zLmpzb24pO1xuICAgICAgaGVhZGVyc1snQ29udGVudC1UeXBlJ10gPSBoZWFkZXJzWydDb250ZW50LVR5cGUnXSB8fCBIRUFERVJTLkpTT047XG4gICAgfVxuXG4gICAgY29uc3QgcmVxdWVzdENhbGxiYWNrID0gY2JcbiAgICAgID8gZnVuY3Rpb24gKGVyciwgcmVzLCBib2R5KTogdm9pZCB7XG4gICAgICAgICAgbGV0IGVycm9yO1xuICAgICAgICAgIGNvbnN0IHJlc3BvbnNlTGVuZ3RoID0gZXJyID8gMCA6IGJvZHkubGVuZ3RoO1xuXG4gICAgICAgICAgcHJvY2Vzc0JvZHkoKTtcbiAgICAgICAgICBsb2dBY3Rpdml0eSgpO1xuXG4gICAgICAgICAgY2IoZXJyLCByZXMsIGJvZHkpO1xuXG4gICAgICAgICAgLyoqXG4gICAgICAgICAgICogUGVyZm9ybSBhIGRlY29kZS5cbiAgICAgICAgICAgKi9cbiAgICAgICAgICBmdW5jdGlvbiBwcm9jZXNzQm9keSgpOiB2b2lkIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgZXJyb3IgPSBlcnIubWVzc2FnZTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAob3B0aW9ucy5qc29uICYmIHJlcy5zdGF0dXNDb2RlIDwgMzAwKSB7XG4gICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgYm9keSA9IEpTT04ucGFyc2UoYm9keS50b1N0cmluZyhDSEFSQUNURVJfRU5DT0RJTkcuVVRGOCkpO1xuICAgICAgICAgICAgICB9IGNhdGNoIChfZXJyKSB7XG4gICAgICAgICAgICAgICAgYm9keSA9IHt9O1xuICAgICAgICAgICAgICAgIGVyciA9IF9lcnI7XG4gICAgICAgICAgICAgICAgZXJyb3IgPSBlcnIubWVzc2FnZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIWVyciAmJiBpc09iamVjdChib2R5KSkge1xuICAgICAgICAgICAgICBpZiAoXy5pc1N0cmluZyhib2R5LmVycm9yKSkge1xuICAgICAgICAgICAgICAgIGVycm9yID0gYm9keS5lcnJvcjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICAvKipcbiAgICAgICAgICAgKiBQZXJmb3JtIGEgbG9nLlxuICAgICAgICAgICAqL1xuICAgICAgICAgIGZ1bmN0aW9uIGxvZ0FjdGl2aXR5KCk6IHZvaWQge1xuICAgICAgICAgICAgbGV0IG1lc3NhZ2UgPSBcIkB7IXN0YXR1c30sIHJlcTogJ0B7cmVxdWVzdC5tZXRob2R9IEB7cmVxdWVzdC51cmx9J1wiO1xuICAgICAgICAgICAgbWVzc2FnZSArPSBlcnJvciA/ICcsIGVycm9yOiBAeyFlcnJvcn0nIDogJywgYnl0ZXM6IEB7Ynl0ZXMuaW59L0B7Ynl0ZXMub3V0fSc7XG4gICAgICAgICAgICBzZWxmLmxvZ2dlci5odHRwKFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZXJyOiBlcnIgfHwgdW5kZWZpbmVkLCAvLyBpZiBlcnJvciBpcyBudWxsL2ZhbHNlIGNoYW5nZSB0aGlzIHRvIHVuZGVmaW5lZCBzbyBpdCB3b250IGxvZ1xuICAgICAgICAgICAgICAgIHJlcXVlc3Q6IHsgbWV0aG9kOiBtZXRob2QsIHVybDogdXJpIH0sXG4gICAgICAgICAgICAgICAgc3RhdHVzOiByZXMgIT0gbnVsbCA/IHJlcy5zdGF0dXNDb2RlIDogJ0VSUicsXG4gICAgICAgICAgICAgICAgZXJyb3I6IGVycm9yLFxuICAgICAgICAgICAgICAgIGJ5dGVzOiB7XG4gICAgICAgICAgICAgICAgICBpbjoganNvbiA/IGpzb24ubGVuZ3RoIDogMCxcbiAgICAgICAgICAgICAgICAgIG91dDogcmVzcG9uc2VMZW5ndGggfHwgMCxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBtZXNzYWdlXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgOiB1bmRlZmluZWQ7XG4gICAgbGV0IHJlcXVlc3RPcHRpb25zOiByZXF1ZXN0Lk9wdGlvbnNXaXRoVXJsID0ge1xuICAgICAgdXJsOiB1cmksXG4gICAgICBtZXRob2Q6IG1ldGhvZCxcbiAgICAgIGhlYWRlcnM6IGhlYWRlcnMsXG4gICAgICBib2R5OiBqc29uLFxuICAgICAgcHJveHk6IHRoaXMucHJveHksXG4gICAgICBlbmNvZGluZzogbnVsbCxcbiAgICAgIGd6aXA6IHRydWUsXG4gICAgICB0aW1lb3V0OiB0aGlzLnRpbWVvdXQsXG4gICAgICBzdHJpY3RTU0w6IHRoaXMuc3RyaWN0X3NzbCxcbiAgICAgIGFnZW50T3B0aW9uczogdGhpcy5hZ2VudF9vcHRpb25zLFxuICAgIH07XG5cbiAgICBpZiAodGhpcy5jYSkge1xuICAgICAgcmVxdWVzdE9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCByZXF1ZXN0T3B0aW9ucywge1xuICAgICAgICBjYTogdGhpcy5jYSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IHJlcSA9IHJlcXVlc3QocmVxdWVzdE9wdGlvbnMsIHJlcXVlc3RDYWxsYmFjayk7XG5cbiAgICBsZXQgc3RhdHVzQ2FsbGVkID0gZmFsc2U7XG4gICAgcmVxLm9uKCdyZXNwb25zZScsIGZ1bmN0aW9uIChyZXMpOiB2b2lkIHtcbiAgICAgIC8vIEZJWE1FOiBfdmVyZGFjY2lvX2Fib3J0ZWQgc2VlbXMgbm90IHVzZWRcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIGlmICghcmVxLl92ZXJkYWNjaW9fYWJvcnRlZCAmJiAhc3RhdHVzQ2FsbGVkKSB7XG4gICAgICAgIHN0YXR1c0NhbGxlZCA9IHRydWU7XG4gICAgICAgIHNlbGYuX3N0YXR1c0NoZWNrKHRydWUpO1xuICAgICAgfVxuXG4gICAgICBpZiAoXy5pc05pbChyZXF1ZXN0Q2FsbGJhY2spID09PSBmYWxzZSkge1xuICAgICAgICAoZnVuY3Rpb24gZG9fbG9nKCk6IHZvaWQge1xuICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBcIkB7IXN0YXR1c30sIHJlcTogJ0B7cmVxdWVzdC5tZXRob2R9IEB7cmVxdWVzdC51cmx9JyAoc3RyZWFtaW5nKVwiO1xuICAgICAgICAgIHNlbGYubG9nZ2VyLmh0dHAoXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHJlcXVlc3Q6IHtcbiAgICAgICAgICAgICAgICBtZXRob2Q6IG1ldGhvZCxcbiAgICAgICAgICAgICAgICB1cmw6IHVyaSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgc3RhdHVzOiBfLmlzTnVsbChyZXMpID09PSBmYWxzZSA/IHJlcy5zdGF0dXNDb2RlIDogJ0VSUicsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbWVzc2FnZVxuICAgICAgICAgICk7XG4gICAgICAgIH0pKCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmVxLm9uKCdlcnJvcicsIGZ1bmN0aW9uIChfZXJyKTogdm9pZCB7XG4gICAgICAvLyBGSVhNRTogX3ZlcmRhY2Npb19hYm9ydGVkIHNlZW1zIG5vdCB1c2VkXG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICBpZiAoIXJlcS5fdmVyZGFjY2lvX2Fib3J0ZWQgJiYgIXN0YXR1c0NhbGxlZCkge1xuICAgICAgICBzdGF0dXNDYWxsZWQgPSB0cnVlO1xuICAgICAgICBzZWxmLl9zdGF0dXNDaGVjayhmYWxzZSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHJldHVybiByZXE7XG4gIH1cblxuICAvKipcbiAgICogU2V0IGRlZmF1bHQgaGVhZGVycy5cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybiB7T2JqZWN0fVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBfc2V0SGVhZGVycyhvcHRpb25zOiBhbnkpOiBIZWFkZXJzIHtcbiAgICBjb25zdCBoZWFkZXJzID0gb3B0aW9ucy5oZWFkZXJzIHx8IHt9O1xuICAgIGNvbnN0IGFjY2VwdCA9IEhFQURFUlMuQUNDRVBUO1xuICAgIGNvbnN0IGFjY2VwdEVuY29kaW5nID0gSEVBREVSUy5BQ0NFUFRfRU5DT0RJTkc7XG4gICAgY29uc3QgdXNlckFnZW50ID0gSEVBREVSUy5VU0VSX0FHRU5UO1xuXG4gICAgaGVhZGVyc1thY2NlcHRdID0gaGVhZGVyc1thY2NlcHRdIHx8IGNvbnRlbnRUeXBlQWNjZXB0O1xuICAgIGhlYWRlcnNbYWNjZXB0RW5jb2RpbmddID0gaGVhZGVyc1thY2NlcHRFbmNvZGluZ10gfHwgJ2d6aXAnO1xuICAgIC8vIHJlZ2lzdHJ5Lm5wbWpzLm9yZyB3aWxsIG9ubHkgcmV0dXJuIHNlYXJjaCByZXN1bHQgaWYgdXNlci1hZ2VudCBpbmNsdWRlIHN0cmluZyAnbnBtJ1xuICAgIGhlYWRlcnNbdXNlckFnZW50XSA9IHRoaXMudXNlckFnZW50XG4gICAgICA/IGBucG0gKCR7dGhpcy51c2VyQWdlbnR9KWBcbiAgICAgIDogb3B0aW9ucy5yZXE/LmdldCgndXNlci1hZ2VudCcpO1xuXG4gICAgcmV0dXJuIHRoaXMuX3NldEF1dGgoaGVhZGVycyk7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgY29uZmlndXJhdGlvbiBhdXRoIGFuZCBhc3NpZ24gSGVhZGVyIGF1dGhvcml6YXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IGhlYWRlcnNcbiAgICogQHJldHVybiB7T2JqZWN0fVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBfc2V0QXV0aChoZWFkZXJzOiBhbnkpOiBIZWFkZXJzIHtcbiAgICBjb25zdCB7IGF1dGggfSA9IHRoaXMuY29uZmlnO1xuXG4gICAgaWYgKF8uaXNOaWwoYXV0aCkgfHwgaGVhZGVyc1tIRUFERVJTLkFVVEhPUklaQVRJT05dKSB7XG4gICAgICByZXR1cm4gaGVhZGVycztcbiAgICB9XG5cbiAgICBpZiAoXy5pc09iamVjdChhdXRoKSA9PT0gZmFsc2UgJiYgXy5pc09iamVjdChhdXRoLnRva2VuKSA9PT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuX3Rocm93RXJyb3JBdXRoKCdBdXRoIGludmFsaWQnKTtcbiAgICB9XG5cbiAgICAvLyBnZXQgTlBNX1RPS0VOIGh0dHA6Ly9ibG9nLm5wbWpzLm9yZy9wb3N0LzExODM5MzM2ODU1NS9kZXBsb3lpbmctd2l0aC1ucG0tcHJpdmF0ZS1tb2R1bGVzXG4gICAgLy8gb3IgZ2V0IG90aGVyIHZhcmlhYmxlIGV4cG9ydCBpbiBlbnZcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdmVyZGFjY2lvL3ZlcmRhY2Npby9yZWxlYXNlcy90YWcvdjIuNS4wXG4gICAgbGV0IHRva2VuOiBhbnk7XG4gICAgY29uc3QgdG9rZW5Db25mOiBhbnkgPSBhdXRoO1xuXG4gICAgaWYgKF8uaXNOaWwodG9rZW5Db25mLnRva2VuKSA9PT0gZmFsc2UgJiYgXy5pc1N0cmluZyh0b2tlbkNvbmYudG9rZW4pKSB7XG4gICAgICB0b2tlbiA9IHRva2VuQ29uZi50b2tlbjtcbiAgICB9IGVsc2UgaWYgKF8uaXNOaWwodG9rZW5Db25mLnRva2VuX2VudikgPT09IGZhbHNlKSB7XG4gICAgICBpZiAoXy5pc1N0cmluZyh0b2tlbkNvbmYudG9rZW5fZW52KSkge1xuICAgICAgICB0b2tlbiA9IHByb2Nlc3MuZW52W3Rva2VuQ29uZi50b2tlbl9lbnZdO1xuICAgICAgfSBlbHNlIGlmIChfLmlzQm9vbGVhbih0b2tlbkNvbmYudG9rZW5fZW52KSAmJiB0b2tlbkNvbmYudG9rZW5fZW52KSB7XG4gICAgICAgIHRva2VuID0gcHJvY2Vzcy5lbnYuTlBNX1RPS0VOO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoRVJST1JfQ09ERS50b2tlbl9yZXF1aXJlZCk7XG4gICAgICAgIHRoaXMuX3Rocm93RXJyb3JBdXRoKEVSUk9SX0NPREUudG9rZW5fcmVxdWlyZWQpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0b2tlbiA9IHByb2Nlc3MuZW52Lk5QTV9UT0tFTjtcbiAgICB9XG5cbiAgICBpZiAoXy5pc05pbCh0b2tlbikpIHtcbiAgICAgIHRoaXMuX3Rocm93RXJyb3JBdXRoKEVSUk9SX0NPREUudG9rZW5fcmVxdWlyZWQpO1xuICAgIH1cblxuICAgIC8vIGRlZmluZSB0eXBlIEF1dGggYWxsb3cgYmFzaWMgYW5kIGJlYXJlclxuICAgIGNvbnN0IHR5cGUgPSB0b2tlbkNvbmYudHlwZSB8fCBUT0tFTl9CQVNJQztcbiAgICB0aGlzLl9zZXRIZWFkZXJBdXRob3JpemF0aW9uKGhlYWRlcnMsIHR5cGUsIHRva2VuKTtcblxuICAgIHJldHVybiBoZWFkZXJzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlXG4gICAqIEB0aHJvd3Mge0Vycm9yfVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBfdGhyb3dFcnJvckF1dGgobWVzc2FnZTogc3RyaW5nKTogRXJyb3Ige1xuICAgIHRoaXMubG9nZ2VyLmVycm9yKG1lc3NhZ2UpO1xuICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBc3NpZ24gSGVhZGVyIGF1dGhvcml6YXRpb24gd2l0aCB0eXBlIGF1dGhlbnRpY2F0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBoZWFkZXJzXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0b2tlblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBfc2V0SGVhZGVyQXV0aG9yaXphdGlvbihoZWFkZXJzOiBhbnksIHR5cGU6IHN0cmluZywgdG9rZW46IGFueSk6IHZvaWQge1xuICAgIGNvbnN0IF90eXBlOiBzdHJpbmcgPSB0eXBlLnRvTG93ZXJDYXNlKCk7XG5cbiAgICBpZiAoW1RPS0VOX0JFQVJFUi50b0xvd2VyQ2FzZSgpLCBUT0tFTl9CQVNJQy50b0xvd2VyQ2FzZSgpXS5pbmNsdWRlcyhfdHlwZSkgPT09IGZhbHNlKSB7XG4gICAgICB0aGlzLl90aHJvd0Vycm9yQXV0aChgQXV0aCB0eXBlICcke190eXBlfScgbm90IGFsbG93ZWRgKTtcbiAgICB9XG5cbiAgICB0eXBlID0gXy51cHBlckZpcnN0KHR5cGUpO1xuICAgIGhlYWRlcnNbSEVBREVSUy5BVVRIT1JJWkFUSU9OXSA9IGJ1aWxkVG9rZW4odHlwZSwgdG9rZW4pO1xuICB9XG5cbiAgLyoqXG4gICAqIEl0IHdpbGwgYWRkIG9yIG92ZXJyaWRlIHNwZWNpZmllZCBoZWFkZXJzIGZyb20gY29uZmlnIGZpbGUuXG4gICAqXG4gICAqIEVnOlxuICAgKlxuICAgKiB1cGxpbmtzOlxuICAgbnBtanM6XG4gICB1cmw6IGh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL1xuICAgaGVhZGVyczpcbiAgIEFjY2VwdDogXCJhcHBsaWNhdGlvbi92bmQubnBtLmluc3RhbGwtdjIranNvbjsgcT0xLjBcIlxuICAgdmVyZGFjY2lvLXN0YWdpbmc6XG4gICB1cmw6IGh0dHBzOi8vbXljb21wYW55LmNvbS9ucG1cbiAgIGhlYWRlcnM6XG4gICBBY2NlcHQ6IFwiYXBwbGljYXRpb24vanNvblwiXG4gICBhdXRob3JpemF0aW9uOiBcIkJhc2ljIFlvdXJCYXNlNjRFbmNvZGVkQ3JlZGVudGlhbHM9PVwiXG5cbiAgICogQHBhcmFtIHtPYmplY3R9IGhlYWRlcnNcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgX292ZXJyaWRlV2l0aFVwTGlua0NvbmZpZ0hlYWRlcnMoaGVhZGVyczogSGVhZGVycyk6IGFueSB7XG4gICAgaWYgKCF0aGlzLmNvbmZpZy5oZWFkZXJzKSB7XG4gICAgICByZXR1cm4gaGVhZGVycztcbiAgICB9XG5cbiAgICAvLyBhZGQvb3ZlcnJpZGUgaGVhZGVycyBzcGVjaWZpZWQgaW4gdGhlIGNvbmZpZ1xuICAgIC8qIGVzbGludCBndWFyZC1mb3ItaW46IDAgKi9cbiAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLmNvbmZpZy5oZWFkZXJzKSB7XG4gICAgICBoZWFkZXJzW2tleV0gPSB0aGlzLmNvbmZpZy5oZWFkZXJzW2tleV07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZSB3aGV0aGVyIGNhbiBmZXRjaCBmcm9tIHRoZSBwcm92aWRlZCBVUkxcbiAgICogQHBhcmFtIHsqfSB1cmxcbiAgICogQHJldHVybiB7Qm9vbGVhbn1cbiAgICovXG4gIHB1YmxpYyBpc1VwbGlua1ZhbGlkKHVybDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3QgdXJsUGFyc2VkOiBVcmxXaXRoU3RyaW5nUXVlcnkgPSBVUkwucGFyc2UodXJsKTtcbiAgICBjb25zdCBpc0hUVFBTID0gKHVybERvbWFpblBhcnNlZDogVVJMKTogYm9vbGVhbiA9PlxuICAgICAgdXJsRG9tYWluUGFyc2VkLnByb3RvY29sID09PSAnaHR0cHM6JyAmJlxuICAgICAgKHVybFBhcnNlZC5wb3J0ID09PSBudWxsIHx8IHVybFBhcnNlZC5wb3J0ID09PSAnNDQzJyk7XG4gICAgY29uc3QgZ2V0SG9zdCA9ICh1cmxEb21haW5QYXJzZWQpOiBib29sZWFuID0+XG4gICAgICBpc0hUVFBTKHVybERvbWFpblBhcnNlZCkgPyB1cmxEb21haW5QYXJzZWQuaG9zdG5hbWUgOiB1cmxEb21haW5QYXJzZWQuaG9zdDtcbiAgICBjb25zdCBpc01hdGNoUHJvdG9jb2w6IGJvb2xlYW4gPSB1cmxQYXJzZWQucHJvdG9jb2wgPT09IHRoaXMudXJsLnByb3RvY29sO1xuICAgIGNvbnN0IGlzTWF0Y2hIb3N0OiBib29sZWFuID0gZ2V0SG9zdCh1cmxQYXJzZWQpID09PSBnZXRIb3N0KHRoaXMudXJsKTtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgY29uc3QgaXNNYXRjaFBhdGg6IGJvb2xlYW4gPSB1cmxQYXJzZWQucGF0aC5pbmRleE9mKHRoaXMudXJsLnBhdGgpID09PSAwO1xuXG4gICAgcmV0dXJuIGlzTWF0Y2hQcm90b2NvbCAmJiBpc01hdGNoSG9zdCAmJiBpc01hdGNoUGF0aDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYSByZW1vdGUgcGFja2FnZSBtZXRhZGF0YVxuICAgKiBAcGFyYW0geyp9IG5hbWUgcGFja2FnZSBuYW1lXG4gICAqIEBwYXJhbSB7Kn0gb3B0aW9ucyByZXF1ZXN0IG9wdGlvbnMsIGVnOiBlVGFnLlxuICAgKiBAcGFyYW0geyp9IGNhbGxiYWNrXG4gICAqL1xuICBwdWJsaWMgZ2V0UmVtb3RlTWV0YWRhdGEobmFtZTogc3RyaW5nLCBvcHRpb25zOiBhbnksIGNhbGxiYWNrOiBDYWxsYmFjayk6IHZvaWQge1xuICAgIGNvbnN0IGhlYWRlcnMgPSB7fTtcbiAgICBpZiAoXy5pc05pbChvcHRpb25zLmV0YWcpID09PSBmYWxzZSkge1xuICAgICAgaGVhZGVyc1snSWYtTm9uZS1NYXRjaCddID0gb3B0aW9ucy5ldGFnO1xuICAgICAgaGVhZGVyc1tIRUFERVJTLkFDQ0VQVF0gPSBjb250ZW50VHlwZUFjY2VwdDtcbiAgICB9XG5cbiAgICB0aGlzLnJlcXVlc3QoXG4gICAgICB7XG4gICAgICAgIHVyaTogYC8ke2VuY29kZShuYW1lKX1gLFxuICAgICAgICBqc29uOiB0cnVlLFxuICAgICAgICBoZWFkZXJzOiBoZWFkZXJzLFxuICAgICAgICByZXE6IG9wdGlvbnMucmVxLFxuICAgICAgfSxcbiAgICAgIChlcnIsIHJlcywgYm9keSk6IHZvaWQgPT4ge1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlcy5zdGF0dXNDb2RlID09PSBIVFRQX1NUQVRVUy5OT1RfRk9VTkQpIHtcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2soRXJyb3JDb2RlLmdldE5vdEZvdW5kKEFQSV9FUlJPUi5OT1RfUEFDS0FHRV9VUExJTkspKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIShyZXMuc3RhdHVzQ29kZSA+PSBIVFRQX1NUQVRVUy5PSyAmJiByZXMuc3RhdHVzQ29kZSA8IEhUVFBfU1RBVFVTLk1VTFRJUExFX0NIT0lDRVMpKSB7XG4gICAgICAgICAgY29uc3QgZXJyb3IgPSBFcnJvckNvZGUuZ2V0SW50ZXJuYWxFcnJvcihcbiAgICAgICAgICAgIGAke0FQSV9FUlJPUi5CQURfU1RBVFVTX0NPREV9OiAke3Jlcy5zdGF0dXNDb2RlfWBcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgZXJyb3IucmVtb3RlU3RhdHVzID0gcmVzLnN0YXR1c0NvZGU7XG4gICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgICBjYWxsYmFjayhudWxsLCBib2R5LCByZXMuaGVhZGVycy5ldGFnKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoIGEgdGFyYmFsbCBmcm9tIHRoZSB1cGxpbmsuXG4gICAqIEBwYXJhbSB7U3RyaW5nfSB1cmxcbiAgICogQHJldHVybiB7U3RyZWFtfVxuICAgKi9cbiAgcHVibGljIGZldGNoVGFyYmFsbCh1cmw6IHN0cmluZykge1xuICAgIGNvbnN0IHN0cmVhbSA9IG5ldyBSZWFkVGFyYmFsbCh7fSk7XG4gICAgbGV0IGN1cnJlbnRfbGVuZ3RoID0gMDtcbiAgICBsZXQgZXhwZWN0ZWRfbGVuZ3RoO1xuXG4gICAgc3RyZWFtLmFib3J0ID0gKCkgPT4ge307XG4gICAgY29uc3QgcmVhZFN0cmVhbSA9IHRoaXMucmVxdWVzdCh7XG4gICAgICB1cmlfZnVsbDogdXJsLFxuICAgICAgZW5jb2Rpbmc6IG51bGwsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgIEFjY2VwdDogY29udGVudFR5cGVBY2NlcHQsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmVhZFN0cmVhbS5vbigncmVzcG9uc2UnLCBmdW5jdGlvbiAocmVzOiBhbnkpIHtcbiAgICAgIGlmIChyZXMuc3RhdHVzQ29kZSA9PT0gSFRUUF9TVEFUVVMuTk9UX0ZPVU5EKSB7XG4gICAgICAgIHJldHVybiBzdHJlYW0uZW1pdCgnZXJyb3InLCBFcnJvckNvZGUuZ2V0Tm90Rm91bmQoQVBJX0VSUk9SLk5PVF9GSUxFX1VQTElOSykpO1xuICAgICAgfVxuICAgICAgaWYgKCEocmVzLnN0YXR1c0NvZGUgPj0gSFRUUF9TVEFUVVMuT0sgJiYgcmVzLnN0YXR1c0NvZGUgPCBIVFRQX1NUQVRVUy5NVUxUSVBMRV9DSE9JQ0VTKSkge1xuICAgICAgICByZXR1cm4gc3RyZWFtLmVtaXQoXG4gICAgICAgICAgJ2Vycm9yJyxcbiAgICAgICAgICBFcnJvckNvZGUuZ2V0SW50ZXJuYWxFcnJvcihgYmFkIHVwbGluayBzdGF0dXMgY29kZTogJHtyZXMuc3RhdHVzQ29kZX1gKVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKHJlcy5oZWFkZXJzW0hFQURFUl9UWVBFLkNPTlRFTlRfTEVOR1RIXSkge1xuICAgICAgICBleHBlY3RlZF9sZW5ndGggPSByZXMuaGVhZGVyc1tIRUFERVJfVFlQRS5DT05URU5UX0xFTkdUSF07XG4gICAgICAgIHN0cmVhbS5lbWl0KEhFQURFUl9UWVBFLkNPTlRFTlRfTEVOR1RILCByZXMuaGVhZGVyc1tIRUFERVJfVFlQRS5DT05URU5UX0xFTkdUSF0pO1xuICAgICAgfVxuXG4gICAgICByZWFkU3RyZWFtLnBpcGUoc3RyZWFtKTtcbiAgICB9KTtcblxuICAgIHJlYWRTdHJlYW0ub24oJ2Vycm9yJywgZnVuY3Rpb24gKGVycikge1xuICAgICAgc3RyZWFtLmVtaXQoJ2Vycm9yJywgZXJyKTtcbiAgICB9KTtcbiAgICByZWFkU3RyZWFtLm9uKCdkYXRhJywgZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgIGN1cnJlbnRfbGVuZ3RoICs9IGRhdGEubGVuZ3RoO1xuICAgIH0pO1xuICAgIHJlYWRTdHJlYW0ub24oJ2VuZCcsIGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICBpZiAoZGF0YSkge1xuICAgICAgICBjdXJyZW50X2xlbmd0aCArPSBkYXRhLmxlbmd0aDtcbiAgICAgIH1cbiAgICAgIGlmIChleHBlY3RlZF9sZW5ndGggJiYgY3VycmVudF9sZW5ndGggIT0gZXhwZWN0ZWRfbGVuZ3RoKSB7XG4gICAgICAgIHN0cmVhbS5lbWl0KCdlcnJvcicsIEVycm9yQ29kZS5nZXRJbnRlcm5hbEVycm9yKEFQSV9FUlJPUi5DT05URU5UX01JU01BVENIKSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHN0cmVhbTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQZXJmb3JtIGEgc3RyZWFtIHNlYXJjaC5cbiAgICogQHBhcmFtIHsqfSBvcHRpb25zIHJlcXVlc3Qgb3B0aW9uc1xuICAgKiBAcmV0dXJuIHtTdHJlYW19XG4gICAqL1xuICBwdWJsaWMgc2VhcmNoKG9wdGlvbnM6IGFueSkge1xuICAgIGNvbnN0IHRyYW5zZm9ybVN0cmVhbTogYW55ID0gbmV3IFN0cmVhbS5QYXNzVGhyb3VnaCh7IG9iamVjdE1vZGU6IHRydWUgfSk7XG4gICAgY29uc3QgcmVxdWVzdFN0cmVhbTogU3RyZWFtLlJlYWRhYmxlID0gdGhpcy5yZXF1ZXN0KHtcbiAgICAgIHVyaTogb3B0aW9ucy5yZXEudXJsLFxuICAgICAgcmVxOiBvcHRpb25zLnJlcSxcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgLy8gcXVlcnkgZm9yIHNlYXJjaFxuICAgICAgICByZWZlcmVyOiBvcHRpb25zLnJlcS5nZXQoJ3JlZmVyZXInKSxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICBjb25zdCBwYXJzZVBhY2thZ2UgPSAocGtnOiBQYWNrYWdlKTogdm9pZCA9PiB7XG4gICAgICBpZiAoaXNPYmplY3RPckFycmF5KHBrZykpIHtcbiAgICAgICAgdHJhbnNmb3JtU3RyZWFtLmVtaXQoJ2RhdGEnLCBwa2cpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICByZXF1ZXN0U3RyZWFtLm9uKCdyZXNwb25zZScsIChyZXMpOiB2b2lkID0+IHtcbiAgICAgIGlmICghU3RyaW5nKHJlcy5zdGF0dXNDb2RlKS5tYXRjaCgvXjJcXGRcXGQkLykpIHtcbiAgICAgICAgcmV0dXJuIHRyYW5zZm9ybVN0cmVhbS5lbWl0KFxuICAgICAgICAgICdlcnJvcicsXG4gICAgICAgICAgRXJyb3JDb2RlLmdldEludGVybmFsRXJyb3IoYGJhZCBzdGF0dXMgY29kZSAke3Jlcy5zdGF0dXNDb2RlfSBmcm9tIHVwbGlua2ApXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vcmVxdWVzdC9yZXF1ZXN0I3JlcXVlc3RvcHRpb25zLWNhbGxiYWNrXG4gICAgICAvLyBSZXF1ZXN0IGxpYnJhcnkgd2lsbCBub3QgZGVjb2RlIGd6aXAgc3RyZWFtLlxuICAgICAgbGV0IGpzb25TdHJlYW07XG4gICAgICBpZiAocmVzLmhlYWRlcnNbSEVBREVSX1RZUEUuQ09OVEVOVF9FTkNPRElOR10gPT09IEhFQURFUlMuR1pJUCkge1xuICAgICAgICBqc29uU3RyZWFtID0gcmVzLnBpcGUoemxpYi5jcmVhdGVVbnppcCgpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGpzb25TdHJlYW0gPSByZXM7XG4gICAgICB9XG4gICAgICBqc29uU3RyZWFtLnBpcGUoSlNPTlN0cmVhbS5wYXJzZSgnKicpKS5vbignZGF0YScsIHBhcnNlUGFja2FnZSk7XG4gICAgICBqc29uU3RyZWFtLm9uKCdlbmQnLCAoKTogdm9pZCA9PiB7XG4gICAgICAgIHRyYW5zZm9ybVN0cmVhbS5lbWl0KCdlbmQnKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgcmVxdWVzdFN0cmVhbS5vbignZXJyb3InLCAoZXJyOiBFcnJvcik6IHZvaWQgPT4ge1xuICAgICAgdHJhbnNmb3JtU3RyZWFtLmVtaXQoJ2Vycm9yJywgZXJyKTtcbiAgICB9KTtcblxuICAgIHRyYW5zZm9ybVN0cmVhbS5hYm9ydCA9ICgpOiB2b2lkID0+IHtcbiAgICAgIC8vIEZJWE1FOiB0aGlzIGlzIGNsZWFybHkgYSBwb3RlbnRpYWwgaXNzdWVcbiAgICAgIC8vIHRoZXJlIGlzIG5vIGFib3J0IG1ldGhvZCBvbiBTdHJlYW0uUmVhZGFibGVcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIHJlcXVlc3RTdHJlYW0uYWJvcnQoKTtcbiAgICAgIHRyYW5zZm9ybVN0cmVhbS5lbWl0KCdlbmQnKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIHRyYW5zZm9ybVN0cmVhbTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgcHJveHkgaGVhZGVycy5cbiAgICogRklYTUU6IG9iamVjdCBtdXRhdGlvbnMsIGl0IHNob3VsZCByZXR1cm4gYW4gbmV3IG9iamVjdFxuICAgKiBAcGFyYW0geyp9IHJlcSB0aGUgaHR0cCByZXF1ZXN0XG4gICAqIEBwYXJhbSB7Kn0gaGVhZGVycyB0aGUgcmVxdWVzdCBoZWFkZXJzXG4gICAqL1xuICBwcml2YXRlIF9hZGRQcm94eUhlYWRlcnMocmVxOiBhbnksIGhlYWRlcnM6IGFueSk6IHZvaWQge1xuICAgIGlmIChyZXEpIHtcbiAgICAgIC8vIE9ubHkgc3VibWl0IFgtRm9yd2FyZGVkLUZvciBmaWVsZCBpZiB3ZSBkb24ndCBoYXZlIGEgcHJveHkgc2VsZWN0ZWRcbiAgICAgIC8vIGluIHRoZSBjb25maWcgZmlsZS5cbiAgICAgIC8vXG4gICAgICAvLyBPdGhlcndpc2UgbWlzY29uZmlndXJlZCBwcm94eSBjb3VsZCByZXR1cm4gNDA3OlxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3JsaWR3a2Evc2lub3BpYS9pc3N1ZXMvMjU0XG4gICAgICAvL1xuICAgICAgLy8gRklYTUU6IHByb3h5IGxvZ2ljIGlzIG9kZCwgc29tZXRoaW5nIGlzIHdyb25nIGhlcmUuXG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICBpZiAoIXRoaXMucHJveHkpIHtcbiAgICAgICAgaGVhZGVyc1sneC1mb3J3YXJkZWQtZm9yJ10gPVxuICAgICAgICAgIChyZXEuZ2V0KCd4LWZvcndhcmRlZC1mb3InKSA/IHJlcS5nZXQoJ3gtZm9yd2FyZGVkLWZvcicpICsgJywgJyA6ICcnKSArXG4gICAgICAgICAgcmVxLmNvbm5lY3Rpb24ucmVtb3RlQWRkcmVzcztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBhbHdheXMgYXR0YWNoIFZpYSBoZWFkZXIgdG8gYXZvaWQgbG9vcHMsIGV2ZW4gaWYgd2UncmUgbm90IHByb3h5aW5nXG4gICAgaGVhZGVyc1sndmlhJ10gPSByZXEgJiYgcmVxLmdldCgndmlhJykgPyByZXEuZ2V0KCd2aWEnKSArICcsICcgOiAnJztcblxuICAgIGhlYWRlcnNbJ3ZpYSddICs9ICcxLjEgJyArIHRoaXMuc2VydmVyX2lkICsgJyAoVmVyZGFjY2lvKSc7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgd2hldGhlciB0aGUgcmVtb3RlIGhvc3QgaXMgYXZhaWxhYmxlLlxuICAgKiBAcGFyYW0geyp9IGFsaXZlXG4gICAqIEByZXR1cm4ge0Jvb2xlYW59XG4gICAqL1xuICBwcml2YXRlIF9zdGF0dXNDaGVjayhhbGl2ZT86IGJvb2xlYW4pOiBib29sZWFuIHwgdm9pZCB7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB0aGlzLl9pZlJlcXVlc3RGYWlsdXJlKCkgPT09IGZhbHNlO1xuICAgIH1cbiAgICBpZiAoYWxpdmUpIHtcbiAgICAgIGlmICh0aGlzLmZhaWxlZF9yZXF1ZXN0cyA+PSB0aGlzLm1heF9mYWlscykge1xuICAgICAgICB0aGlzLmxvZ2dlci53YXJuKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGhvc3Q6IHRoaXMudXJsLmhvc3QsXG4gICAgICAgICAgfSxcbiAgICAgICAgICAnaG9zdCBAe2hvc3R9IGlzIGJhY2sgb25saW5lJ1xuICAgICAgICApO1xuICAgICAgfVxuICAgICAgdGhpcy5mYWlsZWRfcmVxdWVzdHMgPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZhaWxlZF9yZXF1ZXN0cysrO1xuICAgICAgaWYgKHRoaXMuZmFpbGVkX3JlcXVlc3RzID09PSB0aGlzLm1heF9mYWlscykge1xuICAgICAgICB0aGlzLmxvZ2dlci53YXJuKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGhvc3Q6IHRoaXMudXJsLmhvc3QsXG4gICAgICAgICAgfSxcbiAgICAgICAgICAnaG9zdCBAe2hvc3R9IGlzIG5vdyBvZmZsaW5lJ1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMubGFzdF9yZXF1ZXN0X3RpbWUgPSBEYXRlLm5vdygpO1xuICB9XG5cbiAgLyoqXG4gICAqIElmIHRoZSByZXF1ZXN0IGZhaWx1cmUuXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIF9pZlJlcXVlc3RGYWlsdXJlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmZhaWxlZF9yZXF1ZXN0cyA+PSB0aGlzLm1heF9mYWlscyAmJlxuICAgICAgTWF0aC5hYnMoRGF0ZS5ub3coKSAtICh0aGlzLmxhc3RfcmVxdWVzdF90aW1lIGFzIG51bWJlcikpIDwgdGhpcy5mYWlsX3RpbWVvdXRcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB1cCBhIHByb3h5LlxuICAgKiBAcGFyYW0geyp9IGhvc3RuYW1lXG4gICAqIEBwYXJhbSB7Kn0gY29uZmlnXG4gICAqIEBwYXJhbSB7Kn0gbWFpbmNvbmZpZ1xuICAgKiBAcGFyYW0geyp9IGlzSFRUUFNcbiAgICovXG4gIHByaXZhdGUgX3NldHVwUHJveHkoXG4gICAgaG9zdG5hbWU6IHN0cmluZyxcbiAgICBjb25maWc6IFVwTGlua0NvbmYsXG4gICAgbWFpbmNvbmZpZzogQ29uZmlnLFxuICAgIGlzSFRUUFM6IGJvb2xlYW5cbiAgKTogdm9pZCB7XG4gICAgbGV0IG5vUHJveHlMaXN0O1xuICAgIGNvbnN0IHByb3h5X2tleTogc3RyaW5nID0gaXNIVFRQUyA/ICdodHRwc19wcm94eScgOiAnaHR0cF9wcm94eSc7XG5cbiAgICAvLyBnZXQgaHR0cF9wcm94eSBhbmQgbm9fcHJveHkgY29uZmlnc1xuICAgIGlmIChwcm94eV9rZXkgaW4gY29uZmlnKSB7XG4gICAgICB0aGlzLnByb3h5ID0gY29uZmlnW3Byb3h5X2tleV07XG4gICAgfSBlbHNlIGlmIChwcm94eV9rZXkgaW4gbWFpbmNvbmZpZykge1xuICAgICAgdGhpcy5wcm94eSA9IG1haW5jb25maWdbcHJveHlfa2V5XTtcbiAgICB9XG4gICAgaWYgKCdub19wcm94eScgaW4gY29uZmlnKSB7XG4gICAgICBub1Byb3h5TGlzdCA9IGNvbmZpZy5ub19wcm94eTtcbiAgICB9IGVsc2UgaWYgKCdub19wcm94eScgaW4gbWFpbmNvbmZpZykge1xuICAgICAgbm9Qcm94eUxpc3QgPSBtYWluY29uZmlnLm5vX3Byb3h5O1xuICAgIH1cblxuICAgIC8vIHVzZSB3Z2V0LWxpa2UgYWxnb3JpdGhtIHRvIGRldGVybWluZSBpZiBwcm94eSBzaG91bGRuJ3QgYmUgdXNlZFxuICAgIGlmIChob3N0bmFtZVswXSAhPT0gJy4nKSB7XG4gICAgICBob3N0bmFtZSA9ICcuJyArIGhvc3RuYW1lO1xuICAgIH1cblxuICAgIGlmIChfLmlzU3RyaW5nKG5vUHJveHlMaXN0KSAmJiBub1Byb3h5TGlzdC5sZW5ndGgpIHtcbiAgICAgIG5vUHJveHlMaXN0ID0gbm9Qcm94eUxpc3Quc3BsaXQoJywnKTtcbiAgICB9XG5cbiAgICBpZiAoXy5pc0FycmF5KG5vUHJveHlMaXN0KSkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBub1Byb3h5TGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgICBsZXQgbm9Qcm94eUl0ZW0gPSBub1Byb3h5TGlzdFtpXTtcbiAgICAgICAgaWYgKG5vUHJveHlJdGVtWzBdICE9PSAnLicpIHtcbiAgICAgICAgICBub1Byb3h5SXRlbSA9ICcuJyArIG5vUHJveHlJdGVtO1xuICAgICAgICB9XG4gICAgICAgIGlmIChob3N0bmFtZS5sYXN0SW5kZXhPZihub1Byb3h5SXRlbSkgPT09IGhvc3RuYW1lLmxlbmd0aCAtIG5vUHJveHlJdGVtLmxlbmd0aCkge1xuICAgICAgICAgIGlmICh0aGlzLnByb3h5KSB7XG4gICAgICAgICAgICBkZWJ1Zygnbm90IHVzaW5nIHByb3h5IGZvciAlbywgZXhjbHVkZWQgYnkgJW8gcnVsZScsIHRoaXMudXJsLmhyZWYsIG5vUHJveHlJdGVtKTtcbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgIHRoaXMucHJveHkgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBpZiBpdCdzIG5vbi1zdHJpbmcgKGkuZS4gXCJmYWxzZVwiKSwgZG9uJ3QgdXNlIGl0XG4gICAgaWYgKF8uaXNTdHJpbmcodGhpcy5wcm94eSkgPT09IGZhbHNlKSB7XG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICBkZWxldGUgdGhpcy5wcm94eTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGVidWcoJ3VzaW5nIHByb3h5ICVvIGZvciAlbycsIHRoaXMudXJsLmhyZWYsIHRoaXMucHJveHkpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBQcm94eVN0b3JhZ2U7XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLElBQUFBLFdBQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLE1BQUEsR0FBQUYsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFFLE9BQUEsR0FBQUgsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFHLFFBQUEsR0FBQUosc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFJLE9BQUEsR0FBQUwsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFLLElBQUEsR0FBQU4sc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFNLEtBQUEsR0FBQVAsc0JBQUEsQ0FBQUMsT0FBQTtBQUVBLElBQUFPLFFBQUEsR0FBQVAsT0FBQTtBQUVBLElBQUFRLE1BQUEsR0FBQVIsT0FBQTtBQUVBLElBQUFTLFVBQUEsR0FBQVQsT0FBQTtBQVVBLElBQUFVLE9BQUEsR0FBQVYsT0FBQTtBQUNBLElBQUFXLE9BQUEsR0FBQVgsT0FBQTtBQUE4RSxTQUFBRCx1QkFBQWEsR0FBQSxXQUFBQSxHQUFBLElBQUFBLEdBQUEsQ0FBQUMsVUFBQSxHQUFBRCxHQUFBLEtBQUFFLE9BQUEsRUFBQUYsR0FBQTtBQUFBLFNBQUFHLGdCQUFBSCxHQUFBLEVBQUFJLEdBQUEsRUFBQUMsS0FBQSxJQUFBRCxHQUFBLEdBQUFFLGNBQUEsQ0FBQUYsR0FBQSxPQUFBQSxHQUFBLElBQUFKLEdBQUEsSUFBQU8sTUFBQSxDQUFBQyxjQUFBLENBQUFSLEdBQUEsRUFBQUksR0FBQSxJQUFBQyxLQUFBLEVBQUFBLEtBQUEsRUFBQUksVUFBQSxRQUFBQyxZQUFBLFFBQUFDLFFBQUEsb0JBQUFYLEdBQUEsQ0FBQUksR0FBQSxJQUFBQyxLQUFBLFdBQUFMLEdBQUE7QUFBQSxTQUFBTSxlQUFBTSxHQUFBLFFBQUFSLEdBQUEsR0FBQVMsWUFBQSxDQUFB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
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "verdaccio",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.24.0",
|
|
4
4
|
"description": "A lightweight private npm proxy registry",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Verdaccio Maintainers",
|
|
@@ -19,17 +19,17 @@
|
|
|
19
19
|
"url": "https://opencollective.com/verdaccio"
|
|
20
20
|
},
|
|
21
21
|
"dependencies": {
|
|
22
|
-
"@verdaccio/config": "6.0.0-6-next.
|
|
23
|
-
"@verdaccio/core": "6.0.0-6-next.
|
|
22
|
+
"@verdaccio/config": "6.0.0-6-next.68",
|
|
23
|
+
"@verdaccio/core": "6.0.0-6-next.68",
|
|
24
24
|
"@verdaccio/local-storage": "10.3.3",
|
|
25
|
-
"@verdaccio/logger-7": "6.0.0-6-next.
|
|
26
|
-
"@verdaccio/middleware": "6.0.0-6-next.
|
|
25
|
+
"@verdaccio/logger-7": "6.0.0-6-next.13",
|
|
26
|
+
"@verdaccio/middleware": "6.0.0-6-next.47",
|
|
27
27
|
"@verdaccio/signature": "6.0.0-6-next.2",
|
|
28
28
|
"@verdaccio/streams": "10.2.1",
|
|
29
|
-
"@verdaccio/tarball": "11.0.0-6-next.
|
|
30
|
-
"@verdaccio/ui-theme": "6.0.0-6-next.
|
|
31
|
-
"@verdaccio/url": "11.0.0-6-next.
|
|
32
|
-
"@verdaccio/utils": "6.0.0-6-next.
|
|
29
|
+
"@verdaccio/tarball": "11.0.0-6-next.37",
|
|
30
|
+
"@verdaccio/ui-theme": "6.0.0-6-next.68",
|
|
31
|
+
"@verdaccio/url": "11.0.0-6-next.34",
|
|
32
|
+
"@verdaccio/utils": "6.0.0-6-next.36",
|
|
33
33
|
"JSONStream": "1.3.5",
|
|
34
34
|
"async": "3.2.4",
|
|
35
35
|
"body-parser": "1.20.2",
|
|
@@ -54,10 +54,10 @@
|
|
|
54
54
|
"mv": "2.1.1",
|
|
55
55
|
"pkginfo": "0.4.1",
|
|
56
56
|
"request": "2.88.2",
|
|
57
|
-
"semver": "7.
|
|
57
|
+
"semver": "7.5.0",
|
|
58
58
|
"validator": "13.9.0",
|
|
59
|
-
"verdaccio-audit": "11.0.0-6-next.
|
|
60
|
-
"verdaccio-htpasswd": "
|
|
59
|
+
"verdaccio-audit": "11.0.0-6-next.31",
|
|
60
|
+
"verdaccio-htpasswd": "11.0.0-6-next.38"
|
|
61
61
|
},
|
|
62
62
|
"devDependencies": {
|
|
63
63
|
"@babel/cli": "7.21.0",
|
|
@@ -97,8 +97,8 @@
|
|
|
97
97
|
"@types/pino": "7.0.5",
|
|
98
98
|
"@types/request": "2.48.8",
|
|
99
99
|
"@types/semver": "7.3.13",
|
|
100
|
-
"@typescript-eslint/eslint-plugin": "5.
|
|
101
|
-
"@typescript-eslint/parser": "5.
|
|
100
|
+
"@typescript-eslint/eslint-plugin": "5.59.0",
|
|
101
|
+
"@typescript-eslint/parser": "5.59.0",
|
|
102
102
|
"@verdaccio-scope/verdaccio-auth-foo": "0.0.2",
|
|
103
103
|
"@verdaccio/types": "11.0.0-6-next.25",
|
|
104
104
|
"babel-eslint": "10.1.0",
|
|
@@ -106,7 +106,7 @@
|
|
|
106
106
|
"babel-plugin-dynamic-import-node": "2.3.3",
|
|
107
107
|
"cross-env": "7.0.3",
|
|
108
108
|
"detect-secrets": "1.0.6",
|
|
109
|
-
"eslint": "8.
|
|
109
|
+
"eslint": "8.39.0",
|
|
110
110
|
"eslint-config-google": "0.14.0",
|
|
111
111
|
"eslint-config-prettier": "8.6.0",
|
|
112
112
|
"eslint-plugin-babel": "5.3.1",
|