@ditojs/server 0.270.0 → 0.273.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/lib/app/Application.js +59 -22
- package/lib/app/SessionStore.js +3 -1
- package/lib/app/Validator.js +16 -2
- package/lib/app/index.js +7 -1
- package/lib/cli/console.js +11 -1
- package/lib/cli/db/createMigration.js +13 -1
- package/lib/cli/db/index.js +7 -1
- package/lib/cli/db/listAssetConfig.js +4 -2
- package/lib/cli/db/seed.js +10 -2
- package/lib/cli/index.js +6 -2
- package/lib/controllers/AdminController.js +18 -6
- package/lib/controllers/CollectionController.js +15 -1
- package/lib/controllers/Controller.js +25 -1
- package/lib/controllers/ControllerAction.js +18 -6
- package/lib/controllers/RelationController.js +7 -1
- package/lib/controllers/UserController.js +15 -1
- package/lib/controllers/index.js +7 -1
- package/lib/decorators/index.js +7 -1
- package/lib/decorators/parameters.js +4 -2
- package/lib/decorators/returns.js +4 -2
- package/lib/errors/DatabaseError.js +5 -19
- package/lib/errors/ResponseError.js +4 -14
- package/lib/errors/index.js +7 -1
- package/lib/graph/DitoGraphProcessor.js +5 -1
- package/lib/graph/expression.js +5 -1
- package/lib/graph/graph.js +18 -2
- package/lib/graph/index.js +7 -1
- package/lib/index.js +7 -1
- package/lib/lib/index.js +7 -1
- package/lib/middleware/findRoute.js +7 -1
- package/lib/middleware/index.js +7 -1
- package/lib/mixins/AssetMixin.js +4 -4
- package/lib/mixins/SessionMixin.js +4 -4
- package/lib/mixins/TimeStampedMixin.js +4 -4
- package/lib/mixins/UserMixin.js +10 -4
- package/lib/mixins/index.js +7 -1
- package/lib/models/Model.js +41 -22
- package/lib/models/definitions/filters.js +9 -1
- package/lib/models/definitions/properties.js +7 -1
- package/lib/models/definitions/scopes.js +9 -1
- package/lib/models/index.js +7 -1
- package/lib/query/QueryBuilder.js +11 -1
- package/lib/query/QueryFilters.js +11 -1
- package/lib/query/index.js +7 -1
- package/lib/schema/formats/index.js +7 -1
- package/lib/schema/index.js +10 -2
- package/lib/schema/keywords/index.js +7 -1
- package/lib/schema/properties.js +11 -1
- package/lib/schema/relations.js +18 -4
- package/lib/services/index.js +7 -1
- package/lib/storage/DiskStorage.js +7 -1
- package/lib/storage/Storage.js +5 -1
- package/lib/storage/index.js +7 -1
- package/lib/utils/emitter.js +5 -1
- package/lib/utils/index.js +15 -1
- package/lib/utils/json.js +9 -0
- package/lib/utils/object.js +9 -3
- package/package.json +29 -29
- package/src/app/Application.js +28 -5
- package/src/app/Validator.js +2 -1
- package/src/cli/db/listAssetConfig.js +3 -1
- package/src/controllers/AdminController.js +3 -2
- package/src/controllers/ControllerAction.js +7 -5
- package/src/decorators/parameters.js +2 -2
- package/src/decorators/returns.js +2 -2
- package/src/errors/DatabaseError.js +2 -23
- package/src/errors/ResponseError.js +1 -8
- package/src/models/Model.js +13 -8
- package/src/utils/index.js +1 -0
- package/src/utils/json.js +3 -0
|
@@ -3,6 +3,16 @@
|
|
|
3
3
|
exports.__esModule = true;
|
|
4
4
|
exports.AdminController = void 0;
|
|
5
5
|
|
|
6
|
+
require("core-js/modules/esnext.async-iterator.some.js");
|
|
7
|
+
|
|
8
|
+
require("core-js/modules/esnext.iterator.constructor.js");
|
|
9
|
+
|
|
10
|
+
require("core-js/modules/esnext.iterator.some.js");
|
|
11
|
+
|
|
12
|
+
require("core-js/modules/esnext.async-iterator.map.js");
|
|
13
|
+
|
|
14
|
+
require("core-js/modules/esnext.iterator.map.js");
|
|
15
|
+
|
|
6
16
|
var _path = _interopRequireDefault(require("path"));
|
|
7
17
|
|
|
8
18
|
var _koa = _interopRequireDefault(require("koa"));
|
|
@@ -19,11 +29,13 @@ var _cliService = _interopRequireDefault(require("@vue/cli-service"));
|
|
|
19
29
|
|
|
20
30
|
var _htmlWebpackTagsPlugin = _interopRequireDefault(require("html-webpack-tags-plugin"));
|
|
21
31
|
|
|
32
|
+
var _Controller = require("./Controller");
|
|
33
|
+
|
|
22
34
|
var _errors = require("../errors");
|
|
23
35
|
|
|
24
|
-
var
|
|
36
|
+
var _utils = require("../utils");
|
|
25
37
|
|
|
26
|
-
var
|
|
38
|
+
var _utils2 = require("@ditojs/utils");
|
|
27
39
|
|
|
28
40
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
29
41
|
|
|
@@ -67,7 +79,7 @@ class AdminController extends _Controller.Controller {
|
|
|
67
79
|
|
|
68
80
|
sendDitoObject(ctx) {
|
|
69
81
|
ctx.type = 'text/javascript';
|
|
70
|
-
ctx.body = `window.dito = ${
|
|
82
|
+
ctx.body = `window.dito = ${(0, _utils.formatJson)(this.getDitoObject())}`;
|
|
71
83
|
}
|
|
72
84
|
|
|
73
85
|
middleware() {
|
|
@@ -212,9 +224,9 @@ class AdminController extends _Controller.Controller {
|
|
|
212
224
|
var _this$config$plugins;
|
|
213
225
|
|
|
214
226
|
return (_this$config$plugins = this.config.plugins) == null ? void 0 : _this$config$plugins.map(definition => {
|
|
215
|
-
const plugin = (0,
|
|
227
|
+
const plugin = (0, _utils2.isString)(definition) ? {
|
|
216
228
|
id: definition
|
|
217
|
-
} : (0,
|
|
229
|
+
} : (0, _utils2.isObject)(definition) ? definition : {};
|
|
218
230
|
const {
|
|
219
231
|
id,
|
|
220
232
|
apply = require(id)
|
|
@@ -243,4 +255,4 @@ class AdminController extends _Controller.Controller {
|
|
|
243
255
|
}
|
|
244
256
|
|
|
245
257
|
exports.AdminController = AdminController;
|
|
246
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250cm9sbGVycy9BZG1pbkNvbnRyb2xsZXIuanMiXSwibmFtZXMiOlsiQWRtaW5Db250cm9sbGVyIiwiQ29udHJvbGxlciIsImNvbnN0cnVjdG9yIiwiYXBwIiwibmFtZXNwYWNlIiwiY29uZmlnIiwiYWRtaW4iLCJtb2RlIiwiZW52IiwiZ2V0UGF0aCIsIm5hbWUiLCJzdHIiLCJwYXRoIiwiQ29udHJvbGxlckVycm9yIiwicmVzb2x2ZSIsImdldERpdG9PYmplY3QiLCJhcGkiLCJzZXR0aW5ncyIsIm5vcm1hbGl6ZVBhdGhzIiwiYmFzZSIsInVybCIsInNlbmREaXRvT2JqZWN0IiwiY3R4IiwidHlwZSIsImJvZHkiLCJKU09OIiwic3RyaW5naWZ5IiwibWlkZGxld2FyZSIsImF1dGhvcml6YXRpb24iLCJwcm9jZXNzQXV0aG9yaXplIiwiYXV0aG9yaXplIiwibmV4dCIsInRlc3QiLCJoYW5kbGVBdXRob3JpemF0aW9uIiwiY29tcG9zZSIsImtvYSIsIktvYSIsInVzZSIsIm9uY2UiLCJzZXR1cEtvYVdlYnBhY2siLCJtYXRjaCIsInN0YXRzIiwiYWxsIiwiZXJyb3JzIiwiZXJyb3JEZXRhaWxzIiwiZ2V0V2VicGFja0NvbmZpZyIsImRldk1pZGRsZXdhcmUiLCJwdWJsaWNQYXRoIiwiaG90Q2xpZW50IiwiaG90UmVsb2FkIiwibG9nTGV2ZWwiLCJnZXRWdWVDb25maWciLCJkZXZlbG9wbWVudCIsImJ1aWxkIiwiZGV2dG9vbCIsInJ1bnRpbWVDb21waWxlciIsImNvbmZpZ3VyZVdlYnBhY2siLCJlbnRyeSIsImFsaWFzIiwicmVxdWlyZSIsIm91dHB1dCIsImZpbGVuYW1lIiwib3B0aW1pemF0aW9uIiwic3BsaXRDaHVua3MiLCJjYWNoZUdyb3VwcyIsImNvbW1vbiIsImNodW5rcyIsInZpZXdzIiwibW9kdWxlIiwicnVsZXMiLCJlbmZvcmNlIiwicGx1Z2lucyIsIkh0bWxXZWJwYWNrVGFnc1BsdWdpbiIsInNjcmlwdHMiLCJ1c2VIYXNoIiwiYWRkSGFzaCIsImhhc2giLCJyZXBsYWNlIiwiYXBwZW5kIiwid2FybmluZ3NGaWx0ZXIiLCJjaGFpbldlYnBhY2siLCJjb25mIiwidGVtcGxhdGUiLCJwbHVnaW4iLCJ0YXAiLCJhcmdzIiwiam9pbiIsImpzUnVsZSIsInJ1bGUiLCJoYXNCYWJlbCIsInRvQ29uZmlnIiwic29tZSIsImxvYWRlciIsIm9wdGlvbnMiLCJjb21wYWN0IiwiZGVsZXRlIiwiZ2V0VnVlUGx1Z2lucyIsIm1hcCIsImRlZmluaXRpb24iLCJpZCIsImFwcGx5Iiwic2VydmljZSIsIlZ1ZVNlcnZpY2UiLCJpbmxpbmVPcHRpb25zIiwiaW5pdCIsInJlc29sdmVXZWJwYWNrQ29uZmlnIl0sIm1hcHBpbmdzIjoiOzs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOzs7O0FBRU8sTUFBTUEsZUFBTixTQUE4QkMsc0JBQTlCLENBQXlDO0FBRTlDQyxFQUFBQSxXQUFXLENBQUNDLEdBQUQsRUFBTUMsU0FBTixFQUFpQjtBQUMxQixVQUFNRCxHQUFOLEVBQVdDLFNBQVg7QUFHQSxTQUFLQyxNQUFMLEdBQWMsRUFDWixHQUFHLEtBQUtGLEdBQUwsQ0FBU0UsTUFBVCxDQUFnQkMsS0FEUDtBQUVaLFNBQUcsS0FBS0Q7QUFGSSxLQUFkO0FBT0EsU0FBS0UsSUFBTCxHQUFZLEtBQUtGLE1BQUwsQ0FBWUUsSUFBWixLQUNWLEtBQUtKLEdBQUwsQ0FBU0UsTUFBVCxDQUFnQkcsR0FBaEIsS0FBd0IsYUFBeEIsR0FBd0MsYUFBeEMsR0FBd0QsWUFEOUMsQ0FBWjtBQUdEOztBQUVEQyxFQUFBQSxPQUFPLENBQUNDLElBQUQsRUFBTztBQUFBOztBQUNaLFVBQU1DLEdBQUcsd0JBQUcsS0FBS04sTUFBTCxDQUFZSyxJQUFaLENBQUgscUJBQUcsa0JBQW1CRSxJQUEvQjs7QUFDQSxRQUFJLENBQUNELEdBQUwsRUFBVTtBQUNSLFlBQU0sSUFBSUUsdUJBQUosQ0FDSixJ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QSxLQUFLLEdBQUd6QyxPQUFPLENBQUN3QyxFQUFEO0FBRlgsVUFHRmhCLE1BSEo7O0FBSUEsVUFBSSxDQUFDZ0IsRUFBTCxFQUFTO0FBQ1AsY0FBTSxJQUFJdEYsdUJBQUosQ0FDSixJQURJLEVBRUgsOEJBQTZCcUYsVUFBVyxFQUZyQyxDQUFOO0FBSUQ7O0FBQ0QsYUFBTztBQUFFQyxRQUFBQSxFQUFGO0FBQU1DLFFBQUFBO0FBQU4sT0FBUDtBQUNELEtBakJNLENBQVA7QUFrQkQ7O0FBRUR2RCxFQUFBQSxnQkFBZ0IsR0FBRztBQUNqQixVQUFNd0QsT0FBTyxHQUFHLElBQUlDLG1CQUFKLENBQWUsS0FBSzdGLE9BQUwsQ0FBYSxPQUFiLENBQWYsRUFBc0M7QUFDcEQ4RixNQUFBQSxhQUFhLEVBQUUsS0FBS3BELFlBQUwsRUFEcUM7QUFFcERvQixNQUFBQSxPQUFPLEVBQUUsS0FBS3lCLGFBQUw7QUFGMkMsS0FBdEMsQ0FBaEI7QUFJQUssSUFBQUEsT0FBTyxDQUFDRyxJQUFSLENBQWEsS0FBS2pHLElBQWxCO0FBQ0EsV0FBTzhGLE9BQU8sQ0FBQ0ksb0JBQVIsRUFBUDtBQUNEOztBQXJQNkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xuaW1wb3J0IEtvYSBmcm9tICdrb2EnXG5pbXBvcnQgbW91bnQgZnJvbSAna29hLW1vdW50J1xuaW1wb3J0IHNlcnZlIGZyb20gJ2tvYS1zdGF0aWMnXG5pbXBvcnQga29hV2VicGFjayBmcm9tICdrb2Etd2VicGFjaydcbmltcG9ydCBoaXN0b3J5QXBpRmFsbGJhY2sgZnJvbSAna29hLWNvbm5lY3QtaGlzdG9yeS1hcGktZmFsbGJhY2snXG5pbXBvcnQgVnVlU2VydmljZSBmcm9tICdAdnVlL2NsaS1zZXJ2aWNlJ1xuaW1wb3J0IEh0bWxXZWJwYWNrVGFnc1BsdWdpbiBmcm9tICdodG1sLXdlYnBhY2stdGFncy1wbHVnaW4nXG5pbXBvcnQgeyBDb250cm9sbGVyRXJyb3IgfSBmcm9tICdAL2Vycm9ycydcbmltcG9ydCB7IENvbnRyb2xsZXIgfSBmcm9tICcuL0NvbnRyb2xsZXInXG5pbXBvcnQgeyBpc1N0cmluZywgaXNPYmplY3QgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgY2xhc3MgQWRtaW5Db250cm9sbGVyIGV4dGVuZHMgQ29udHJvbGxlciB7XG4gIC8vIEBvdmVycmlkZVxuICBjb25zdHJ1Y3RvcihhcHAsIG5hbWVzcGFjZSkge1xuICAgIHN1cGVyKGFwcCwgbmFtZXNwYWNlKVxuICAgIC8vIE1lcmdlIGB0aGlzLmFwcC5jb25maWcuYWRtaW5gIGludG8gY29uZmlnIGFzIGRlZmF1bHQsIGJ1dCBhbGxvdyBvdmVycmlkZXNcbiAgICAvLyBvbiB0aGUgY29udHJvbGxlciBpdHNlbGY6XG4gICAgdGhpcy5jb25maWcgPSB7XG4gICAgICAuLi50aGlzLmFwcC5jb25maWcuYWRtaW4sXG4gICAgICAuLi50aGlzLmNvbmZpZ1xuICAgIH1cbiAgICAvLyBJZiBubyBtb2RlIGlzIHNwZWNpZmllZCwgdXNlIGBwcm9kdWN0aW9uYCBzaW5jZSB0aGF0J3MganVzdCB0aGUgaG9zdGluZ1xuICAgIC8vIG9mIHRoZSBwcmUtYnVpbHQgYWRtaW4gZmlsZXMuIGBkZXZlbG9wbWVudGAgc2VydmVzIHRoZSBhZG1pbiBkaXJlY3RseVxuICAgIC8vIHNvdXJjZXMgd2l0aCBIUk0sIGFuZCB0aHVzIHNob3VsZCBiZSBleHBsaWNpdGVseSBhY3RpdmF0ZWQuXG4gICAgdGhpcy5tb2RlID0gdGhpcy5jb25maWcubW9kZSB8fCAoXG4gICAgICB0aGlzLmFwcC5jb25maWcuZW52ID09PSAnZGV2ZWxvcG1lbnQnID8gJ2RldmVsb3BtZW50JyA6ICdwcm9kdWN0aW9uJ1xuICAgIClcbiAgfVxuXG4gIGdldFBhdGgobmFtZSkge1xuICAgIGNvbnN0IHN0ciA9IHRoaXMuY29uZmlnW25hbWVdPy5wYXRoXG4gICAgaWYgKCFzdHIpIHtcbiAgICAgIHRocm93IG5ldyBDb250cm9sbGVyRXJyb3IoXG4gICAgICAgIHRoaXMsXG4gICAgICAgIGBNaXNzaW5nIGFkbWluLiR7bmFtZX0ucGF0aCBjb25maWd1cmF0aW9uLmBcbiAgICAgIClcbiAgICB9XG4gICAgcmV0dXJuIHBhdGgucmVzb2x2ZShzdHIpXG4gIH1cblxuICBnZXREaXRvT2JqZWN0KCkge1xuICAgIC8vIEV4cG9zZSBhcGkgY29uZmlnIGFuZCBkZWZpbml0aW9ucyB0byBicm93c2VyIHNpZGU6XG4gICAgLy8gUGFzcyBvbiB0aGUgYGNvbmZpZy5hcHAubm9ybWFsaXplUGF0aHNgIHNldHRpbmcgdG8gRGl0by5qcyBBZG1pbjpcbiAgICBjb25zdCB7XG4gICAgICBhcGkgPSB7fSxcbiAgICAgIHNldHRpbmdzID0ge31cbiAgICB9ID0gdGhpcy5jb25maWdcbiAgICBpZiAoYXBpLm5vcm1hbGl6ZVBhdGhzID09IG51bGwpIHtcbiAgICAgIGFwaS5ub3JtYWxpemVQYXRocyA9IHRoaXMuYXBwLmNvbmZpZy5hcHAubm9ybWFsaXplUGF0aHNcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIGJhc2U6IHRoaXMudXJsLFxuICAgICAgYXBpLFxuICAgICAgc2V0dGluZ3NcbiAgICB9XG4gIH1cblxuICBzZW5kRGl0b09iamVjdChjdHgpIHtcbiAgICAvLyBTZW5kIGJhY2sgdGhlIGdsb2JhbCBkaXRvIG9iamVjdCBhcyBKYXZhU2NyaXB0IGNvZGUuXG4gICAgY3R4LnR5cGUgPSAndGV4dC9qYXZhc2NyaXB0J1xuICAgIGN0eC5ib2R5ID0gYHdpbmRvdy5kaXRvID0gJHtKU09OLnN0cmluZ2lmeSh0aGlzLmdldERpdG9PYmplY3QoKSl9YFxuICB9XG5cbiAgbWlkZGxld2FyZSgpIHtcbiAgICAvLyBTaGllbGQgYWRtaW4gdmlld3MgYWdhaW5zdCB1bmF1dGhvcml6ZWQgYWNjZXNzLlxuICAgIGNvbnN0IGF1dGhvcml6YXRpb24gPSB0aGlzLnByb2Nlc3NBdXRob3JpemUodGhpcy5hdXRob3JpemUpXG4gICAgcmV0dXJuIGFzeW5jIChjdHgsIG5leHQpID0+IHtcbiAgICAgIGlmICgvXlxcL2RpdG9cXGIvLnRlc3QoY3R4LnVybCkpIHtcbiAgICAgICAgLy8gUmV0dXJuIHdpdGhvdXQgY2FsbGluZyBgbmV4dCgpYFxuICAgICAgICByZXR1cm4gdGhpcy5zZW5kRGl0b09iamVjdChjdHgpXG4gICAgICB9IGVsc2UgaWYgKC9cXC92aWV3c1xcYi8udGVzdChjdHgudXJsKSkge1xuICAgICAgICBhd2FpdCB0aGlzLmhhbmRsZUF1dGhvcml6YXRpb24oYXV0aG9yaXphdGlvbiwgY3R4KVxuICAgICAgfVxuICAgICAgYXdhaXQgbmV4dCgpXG4gICAgfVxuICB9XG5cbiAgY29tcG9zZSgpIHtcbiAgICB0aGlzLmtvYSA9IG5ldyBLb2EoKVxuICAgIHRoaXMua29hLnVzZSh0aGlzLm1pZGRsZXdhcmUoKSlcbiAgICBpZiAodGhpcy5tb2RlID09PSAnZGV2ZWxvcG1lbnQnKSB7XG4gICAgICAvLyBDYWxsaW5nIGdldFBhdGgoKSB0aHJvd3MgZXhjZXB0aW9uIGlmIGFkbWluLmJ1aWxkLnBhdGggaXMgbm90IGRlZmluZWQ6XG4gICAgICBpZiAodGhpcy5nZXRQYXRoKCdidWlsZCcpKSB7XG4gICAgICAgIHRoaXMuYXBwLm9uY2UoJ2FmdGVyOnN0YXJ0JywgKCkgPT4gdGhpcy5zZXR1cEtvYVdlYnBhY2soKSlcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gU3RhdGljYWxseSBzZXJ2ZSB0aGUgcHJlLWJ1aWx0IGFkbWluIFNQQS4gQnV0IGluIG9yZGVyIGZvciB2dWUtcm91dGVyXG4gICAgICAvLyByb3V0ZXMgaW5zaWRlIHRoZSBTUEEgdG8gd29yaywgdXNlIGEgdGlueSByZXdyaXRpbmcgbWlkZGxld2FyZTpcbiAgICAgIHRoaXMua29hLnVzZShhc3luYyAoY3R4LCBuZXh0KSA9PiB7XG4gICAgICAgIC8vIC8vIEV4Y2x1ZGUgYXNzZXQgcmVxdWVzdHMgKGNzcywganMsIGFwcClcbiAgICAgICAgaWYgKCFjdHgudXJsLm1hdGNoKC9eXFwvKGFwcFxcLnxjc3NcXC98anNcXC8pLykpIHtcbiAgICAgICAgICBjdHgudXJsID0gJy8nXG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgbmV4dCgpXG4gICAgICB9KVxuICAgICAgdGhpcy5rb2EudXNlKHNlcnZlKHRoaXMuZ2V0UGF0aCgnZGlzdCcpKSlcbiAgICB9XG4gICAgcmV0dXJuIG1vdW50KHRoaXMudXJsLCB0aGlzLmtvYSlcbiAgfVxuXG4gIGFzeW5jIHNldHVwS29hV2VicGFjaygpIHtcbiAgICAvLyBodHRwczovL3dlYnBhY2suanMub3JnL2NvbmZpZ3VyYXRpb24vc3RhdHMvI3N0YXRzXG4gICAgY29uc3Qgc3RhdHMgPSB7XG4gICAgICBhbGw6IGZhbHNlLFxuICAgICAgZXJyb3JzOiB0cnVlLFxuICAgICAgZXJyb3JEZXRhaWxzOiB0cnVlXG4gICAgfVxuXG4gICAgY29uc3QgbWlkZGxld2FyZSA9IGF3YWl0IGtvYVdlYnBhY2soe1xuICAgICAgY29uZmlnOiB0aGlzLmdldFdlYnBhY2tDb25maWcoKSxcbiAgICAgIGRldk1pZGRsZXdhcmU6IHtcbiAgICAgICAgcHVibGljUGF0aDogJy8nLFxuICAgICAgICBzdGF0c1xuICAgICAgfSxcbiAgICAgIGhvdENsaWVudDogdGhpcy5jb25maWcuaG90UmVsb2FkICE9PSBmYWxzZSAmJiB7XG4gICAgICAgIC8vIFRoZSBvbmx5IHdheSB0byBub3QgbG9nIGBGYWlsZWQgdG8gcGFyc2Ugc291cmNlIG1hcGAgd2FybmluZ3MgaXNcbiAgICAgICAgLy8gc2FkbHkgdG8gaWdub3JlIGFsbCB3YXJuaW5nczpcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3dlYnBhY2stY29udHJpYi93ZWJwYWNrLWhvdC1jbGllbnQvaXNzdWVzLzk0XG4gICAgICAgIGxvZ0xldmVsOiAnZXJyb3InLFxuICAgICAgICBzdGF0c1xuICAgICAgfVxuICAgIH0pXG4gICAgdGhpcy5rb2EudXNlKGhpc3RvcnlBcGlGYWxsYmFjaygpKVxuICAgIHRoaXMua29hLnVzZShtaWRkbGV3YXJlKVxuICB9XG5cbiAgZ2V0VnVlQ29uZmlnKCkge1xuICAgIGNvbnN0IGRldmVsb3BtZW50ID0gdGhpcy5tb2RlID09PSAnZGV2ZWxvcG1lbnQnXG4gICAgY29uc3Qge1xuICAgICAgYnVpbGQgPSB7fSxcbiAgICAgIGRldnRvb2wgPSBkZXZlbG9wbWVudCA/ICdzb3VyY2UtbWFwJyA6IGZhbHNlXG4gICAgfSA9IHRoaXMuY29uZmlnXG4gICAgcmV0dXJuIHtcbiAgICAgIHJ1bnRpbWVDb21waWxlcjogdHJ1ZSxcbiAgICAgIHB1YmxpY1BhdGg6IGAke3RoaXMudXJsfS9gLFxuICAgICAgY29uZmlndXJlV2VicGFjazoge1xuICAgICAgICBkZXZ0b29sLFxuICAgICAgICAvLyBXZSBhbHdheXMgbmVlZCB0aGUgc291cmNlIGJ1aWxkIHBhdGggYXMgZW50cnksIGV2ZW4gZm9yIHByb2R1Y3Rpb24sXG4gICAgICAgIC8vIGZvciB0aGluZ3MgbGlrZSAuYmFiZWxyYyB0byB3b3JrIHdoZW4gYnVpbGRpbmcgZm9yIGRpc3Q6XG4gICAgICAgIGVudHJ5OiBbdGhpcy5nZXRQYXRoKCdidWlsZCcpXSxcbiAgICAgICAgcmVzb2x2ZToge1xuICAgICAgICAgIGFsaWFzOiB7XG4gICAgICAgICAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3dlYnBhY2stY29udHJpYi93ZWJwYWNrLWhvdC1jbGllbnQvcHVsbC82MlxuICAgICAgICAgICAgJ3dlYnBhY2staG90LWNsaWVudC9jbGllbnQnOlxuICAgICAgICAgICAgICByZXF1aXJlLnJlc29sdmUoJ3dlYnBhY2staG90LWNsaWVudC9jbGllbnQnKVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgb3V0cHV0OiB7XG4gICAgICAgICAgZmlsZW5hbWU6ICdbbmFtZV0uW2hhc2hdLmpzJ1xuICAgICAgICB9LFxuICAgICAgICBvcHRpbWl6YXRpb246IHtcbiAgICAgICAgICBzcGxpdENodW5rczoge1xuICAgICAgICAgICAgLy8gU3BsaXQgZGVwZW5kZW5jaWVzIGludG8gdHdvIGNodW5rcywgb25lIGZvciBhbGwgY29tbW9uIGxpYnJhcmllcyxcbiAgICAgICAgICAgIC8vIGFuZCBvbmUgZm9yIGFsbCB2aWV3cywgc28gdGhleSBjYW4gYmUgbG9hZGVkIHNlcGFyYXRlbHksIGFuZCBvbmx5XG4gICAgICAgICAgICAvLyBvbmNlIGF1dGhlbnRpY2F0aW9uIHdhcyBzdWNjZXNzZnVsLlxuICAgICAgICAgICAgY2FjaGVHcm91cHM6IHtcbiAgICAgICAgICAgICAgY29tbW9uOiB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2NvbW1vbicsXG4gICAgICAgICAgICAgICAgdGVzdDogL1xcL25vZGVfbW9kdWxlc1xcLy8sXG4gICAgICAgICAgICAgICAgY2h1bmtzOiAnYWxsJ1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB2aWV3czoge1xuICAgICAgICAgICAgICAgIG5hbWU6ICd2aWV3cycsXG4gICAgICAgICAgICAgICAgdGVzdDogL1xcL3ZpZXdzXFwvLyxcbiAgICAgICAgICAgICAgICBjaHVua3M6ICdhbGwnXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG1vZHVsZTogZGV2ZWxvcG1lbnRcbiAgICAgICAgICAvLyBQcmVzZXJ2ZSBzb3VyY2UtbWFwcyBpbiB0aGlyZCBwYXJ0eSBkZXBlbmRlbmNpZXMsIGJ1dCBkbyBub3QgbG9nXG4gICAgICAgICAgLy8gd2FybmluZ3MgYWJvdXQgZGVwZW5kZW5jaWVzIHRoYXQgZG9uJ3QgY29tZSB3aXRoIHNvdXJjZS1tYXBzLlxuICAgICAgICAgIC8vIGh0dHBzOi8vd2VicGFjay5qcy5vcmcvbG9hZGVycy9zb3VyY2UtbWFwLWxvYWRlci8jaWdub3Jpbmctd2FybmluZ3NcbiAgICAgICAgICA/IHtcbiAgICAgICAgICAgIHJ1bGVzOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0ZXN0OiAvXFwuKGpzfGNzcykkLyxcbiAgICAgICAgICAgICAgICBlbmZvcmNlOiAncHJlJyxcbiAgICAgICAgICAgICAgICAvLyBVc2UgYHJlcXVpcmUucmVzb2x2ZSgpYCBoZXJlIHRvbywgdG8gYXZvaWQgaXNzdWVzIHNpbWlsYXIgdG9cbiAgICAgICAgICAgICAgICAvLyAnd2VicGFjay1ob3QtY2xpZW50L2NsaWVudCcgYWJvdmUuXG4gICAgICAgICAgICAgICAgdXNlOiBbcmVxdWlyZS5yZXNvbHZlKCdzb3VyY2UtbWFwLWxvYWRlcicpXVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICAgIDoge30sXG4gICAgICAgIHBsdWdpbnM6IFtcbiAgICAgICAgICAvLyBVc2UgYEh0bWxXZWJwYWNrVGFnc1BsdWdpbmAgcGx1Z2luIHRvIGluamVjdCBhIHNjcmlwdCB0YWcgdGhhdFxuICAgICAgICAgIC8vIGxvYWQgdGhlIGRpdG8gb2JqZWN0IGZyb20gdGhlIGNvbnRyb2xsZXIsIGluY2x1ZGluZyBgZGl0by5zZXR0aW5nc2BcbiAgICAgICAgICBuZXcgSHRtbFdlYnBhY2tUYWdzUGx1Z2luKHtcbiAgICAgICAgICAgIHNjcmlwdHM6IFsnZGl0by5qcyddLFxuICAgICAgICAgICAgdXNlSGFzaDogdHJ1ZSxcbiAgICAgICAgICAgIGFkZEhhc2g6IChwYXRoLCBoYXNoKSA9PiBwYXRoLnJlcGxhY2UoL1xcLmpzJC8sIGAuJHtoYXNofS5qc2ApLFxuICAgICAgICAgICAgYXBwZW5kOiBmYWxzZVxuICAgICAgICAgIH0pXG4gICAgICAgIF0sXG4gICAgICAgIHN0YXRzOiB7XG4gICAgICAgICAgd2FybmluZ3NGaWx0ZXI6IC9GYWlsZWQgdG8gcGFyc2Ugc291cmNlIG1hcC9cbiAgICAgICAgfVxuICAgICAgfSxcblxuICAgICAgY2hhaW5XZWJwYWNrOiBjb25mID0+IHtcbiAgICAgICAgLy8gQ2hhbmdlIHRoZSBsb2NhdGlvbiBvZiB0aGUgSFRNTCB0ZW1wbGF0ZTpcbiAgICAgICAgY29uc3QgeyB0ZW1wbGF0ZSA9ICdpbmRleC5odG1sJyB9ID0gYnVpbGRcbiAgICAgICAgY29uZi5wbHVnaW4oJ2h0bWwnKS50YXAoYXJncyA9PiB7XG4gICAgICAgICAgYXJnc1swXS50ZW1wbGF0ZSA9IC9eWy4vXS8udGVzdCh0ZW1wbGF0ZSlcbiAgICAgICAgICAgID8gcGF0aC5yZXNvbHZlKHRlbXBsYXRlKVxuICAgICAgICAgICAgOiBwYXRoLmpvaW4odGhpcy5nZXRQYXRoKCdidWlsZCcpLCB0ZW1wbGF0ZSlcbiAgICAgICAgICByZXR1cm4gYXJnc1xuICAgICAgICB9KVxuICAgICAgICBpZiAoZGV2ZWxvcG1lbnQpIHtcbiAgICAgICAgICAvLyBEaXNhYmxlIHRoZSAnY29tcGFjdCcgb3B0aW9uIGluIGJhYmVsLWxvYWRlciBkdXJpbmcgZGV2ZWxvcG1lbnQgdG9cbiAgICAgICAgICAvLyBwcmV2ZW50IGNvbXBsYWludHMgd2hlbiB3b3JraW5nIHdpdGggdGhlIGB5YXJuIHdhdGNoYCB2ZXJzaW9ucyBvZlxuICAgICAgICAgIC8vIGRpdG8tYWRtaW4udW1kLm1pbi5qcyBhbmQgZGl0by11aS51bWQubWluLmpzXG4gICAgICAgICAgY29uc3QganNSdWxlID0gY29uZi5tb2R1bGUucnVsZSgnanMnKVxuICAgICAgICAgIGNvbnN0IGhhc0JhYmVsID0ganNSdWxlLnRvQ29uZmlnKCkudXNlPy5zb21lKFxuICAgICAgICAgICAgKHsgbG9hZGVyIH0pID0+IC9cXGJiYWJlbC1sb2FkZXJcXGIvLnRlc3QobG9hZGVyKVxuICAgICAgICAgIClcbiAgICAgICAgICBpZiAoaGFzQmFiZWwpIHtcbiAgICAgICAgICAgIGpzUnVsZS51c2UoJ2JhYmVsLWxvYWRlcicpLm9wdGlvbnMoeyBjb21wYWN0OiBmYWxzZSB9KVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBNYWtlIGBzdGF0cy53YXJuaW5nc0ZpbHRlcmAgd29yaywgc2VlOlxuICAgICAgICAgIC8vIGh0dHBzOi8vZm9ydW0udnVlanMub3JnL3Qvc3BwcmVzcy13YXJuaW5ncy1pbi12dWUtY2xpLTMvNDU5MDUvNFxuICAgICAgICAgIGNvbmYucGx1Z2lucy5kZWxldGUoJ2ZyaWVuZGx5LWVycm9ycycpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXRWdWVQbHVnaW5zKCkge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5wbHVnaW5zPy5tYXAoZGVmaW5pdGlvbiA9PiB7XG4gICAgICBjb25zdCBwbHVnaW4gPSBpc1N0cmluZyhkZWZpbml0aW9uKVxuICAgICAgICA/IHsgaWQ6IGRlZmluaXRpb24gfVxuICAgICAgICA6IGlzT2JqZWN0KGRlZmluaXRpb24pXG4gICAgICAgICAgPyBkZWZpbml0aW9uXG4gICAgICAgICAgOiB7fVxuICAgICAgY29uc3Qge1xuICAgICAgICBpZCxcbiAgICAgICAgYXBwbHkgPSByZXF1aXJlKGlkKVxuICAgICAgfSA9IHBsdWdpblxuICAgICAgaWYgKCFpZCkge1xuICAgICAgICB0aHJvdyBuZXcgQ29udHJvbGxlckVycm9yKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgYEludmFsaWQgcGx1Z2luIGRlZmluaXRpb246ICR7ZGVmaW5pdGlvbn1gXG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIHJldHVybiB7IGlkLCBhcHBseSB9XG4gICAgfSlcbiAgfVxuXG4gIGdldFdlYnBhY2tDb25maWcoKSB7XG4gICAgY29uc3Qgc2VydmljZSA9IG5ldyBWdWVTZXJ2aWNlKHRoaXMuZ2V0UGF0aCgnYnVpbGQnKSwge1xuICAgICAgaW5saW5lT3B0aW9uczogdGhpcy5nZXRWdWVDb25maWcoKSxcbiAgICAgIHBsdWdpbnM6IHRoaXMuZ2V0VnVlUGx1Z2lucygpXG4gICAgfSlcbiAgICBzZXJ2aWNlLmluaXQodGhpcy5tb2RlKVxuICAgIHJldHVybiBzZXJ2aWNlLnJlc29sdmVXZWJwYWNrQ29uZmlnKClcbiAgfVxufVxuIl19
|
|
258
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250cm9sbGVycy9BZG1pbkNvbnRyb2xsZXIuanMiXSwibmFtZXMiOlsiQWRtaW5Db250cm9sbGVyIiwiQ29udHJvbGxlciIsImNvbnN0cnVjdG9yIiwiYXBwIiwibmFtZXNwYWNlIiwiY29uZmlnIiwiYWRtaW4iLCJtb2RlIiwiZW52IiwiZ2V0UGF0aCIsIm5hbWUiLCJzdHIiLCJwYXRoIiwiQ29udHJvbGxlckVycm9yIiwicmVzb2x2ZSIsImdldERpdG9PYmplY3QiLCJhcGkiLCJzZXR0aW5ncyIsIm5vcm1hbGl6ZVBhdGhzIiwiYmFzZSIsInVybCIsInNlbmREaXRvT2JqZWN0IiwiY3R4IiwidHlwZSIsImJvZHkiLCJtaWRkbGV3YXJlIiwiYXV0aG9yaXphdGlvbiIsInByb2Nlc3NBdXRob3JpemUiLCJhdXRob3JpemUiLCJuZXh0IiwidGVzdCIsImhhbmRsZUF1dGhvcml6YXRpb24iLCJjb21wb3NlIiwia29hIiwiS29hIiwidXNlIiwib25jZSIsInNldHVwS29hV2VicGFjayIsIm1hdGNoIiwic3RhdHMiLCJhbGwiLCJlcnJvcnMiLCJlcnJvckRldGFpbHMiLCJnZXRXZWJwYWNrQ29uZmlnIiwiZGV2TWlkZGxld2FyZSIsInB1YmxpY1BhdGgiLCJob3RDbGllbnQiLCJob3RSZWxvYWQiLCJsb2dMZXZlbCIsImdldFZ1ZUNvbmZpZyIsImRldmVsb3BtZW50IiwiYnVpbGQiLCJkZXZ0b29sIiwicnVudGltZUNvbXBpbGVyIiwiY29uZmlndXJlV2VicGFjayIsImVudHJ5IiwiYWxpYXMiLCJyZXF1aXJlIiwib3V0cHV0IiwiZmlsZW5hbWUiLCJvcHRpbWl6YXRpb24iLCJzcGxpdENodW5rcyIsImNhY2hlR3JvdXBzIiwiY29tbW9uIiwiY2h1bmtzIiwidmlld3MiLCJtb2R1bGUiLCJydWxlcyIsImVuZm9yY2UiLCJwbHVnaW5zIiwiSHRtbFdlYnBhY2tUYWdzUGx1Z2luIiwic2NyaXB0cyIsInVzZUhhc2giLCJhZGRIYXNoIiwiaGFzaCIsInJlcGxhY2UiLCJhcHBlbmQiLCJ3YXJuaW5nc0ZpbHRlciIsImNoYWluV2VicGFjayIsImNvbmYiLCJ0ZW1wbGF0ZSIsInBsdWdpbiIsInRhcCIsImFyZ3MiLCJqb2luIiwianNSdWxlIiwicnVsZSIsImhhc0JhYmVsIiwidG9Db25maWciLCJzb21lIiwibG9hZGVyIiwib3B0aW9ucyIsImNvbXBhY3QiLCJkZWxldGUiLCJnZXRWdWVQbHVnaW5zIiwibWFwIiwiZGVmaW5pdGlvbiIsImlkIiwiYXBwbHkiLCJzZXJ2aWNlIiwiVnVlU2VydmljZSIsImlubGluZU9wdGlvbnMiLCJpbml0IiwicmVzb2x2ZVdlYnBhY2tDb25maWciXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOzs7O0FBRU8sTUFBTUEsZUFBTixTQUE4QkMsc0JBQTlCLENBQXlDO0FBRTlDQyxFQUFBQSxXQUFXLENBQUNDLEdBQUQsRUFBTUMsU0FBTixFQUFpQjtBQUMxQixVQUFNRCxHQUFOLEVBQVdDLFNBQVg7QUFHQSxTQUFLQyxNQUFMLEdBQWMsRUFDWixHQUFHLEtBQUtGLEdBQUwsQ0FBU0UsTUFBVCxDQUFnQkMsS0FEUDtBQUVaLFNBQUcsS0FBS0Q7QUFGSSxLQUFkO0FBT0EsU0FBS0UsSUFBTCxHQUFZLEtBQUtGLE1BQUwsQ0FBWUUsSUFBWixLQUNWLEtBQUtKLEdBQUwsQ0FBU0UsTUFBVCxDQUFnQkcsR0FBaEIsS0FBd0IsYUFBeEIsR0FBd0MsYUFBeEMsR0FBd0QsWUFEOUMsQ0FBWjtBQUdEOztBQUVEQyxFQUFBQSxPQUFPLENBQUNDLElBQUQsRUFBTztBQUFBOztBQUNaLFVBQU1DLEdBQUcsd0JBQUcsS0FBS04sTUFBTCxDQUFZSyxJQUFaLENBQUgscUJBQUcsa0JBQW1CRSxJQUEvQjs7QUFDQSxRQUFJLENBQUNELEdBQUwsRUFBVTtBQUNSLFlBQU0sSUFBSUUsdUJBQUosQ0FDSixJQURJLEVBRUgsaUJBQWdCSCxJQUFLLHNCQUZsQixDQUFOO0FBSUQ7O0FBQ0QsV0FBT0UsY0FBS0UsT0FBTCxDQUFhSCxHQUFiLENBQVA7QUFDRDs7QUFFREksRUFBQUEsYUFBYSxHQUFHO0FBR2QsVUFBTTtBQUNKQyxNQUFBQSxHQUFHLEdBQUcsRUFERjtBQUVKQyxNQUFBQSxRQUFRLEdBQUc7QUFGUCxRQUdGLEtBQUtaLE1BSFQ7O0FBSUEsUUFBSVcsR0FBRyxDQUFDRSxjQUFKLElBQXNCLElBQTFCLEVBQWdDO0FBQzlCRixNQUFBQSxHQUFHLENBQUNFLGNBQUosR0FBcUIsS0FBS2YsR0FBTCxDQUFTRSxNQUFULENBQWdCRixHQUFoQixDQUFvQmUsY0FBekM7QUFDRDs7QUFDRCxXQUFPO0FBQ0xDLE1BQUFBLElBQUksRUFBRSxLQUFLQyxHQUROO0FBRUxKLE1BQUFBLEdBRks7QUFHTEMsTUFBQUE7QUFISyxLQUFQO0FBS0Q7O0FBRURJLEVBQUFBLGNBQWMsQ0FBQ0MsR0FBRCxFQUFNO0FBRWxCQSxJQUFBQSxHQUFHLENBQUNDLElBQUosR0FBVyxpQkFBWDtBQUNBRCxJQUFBQSxHQUFHLENBQUNFLElBQUosR0FBWSxpQkFBZ0IsdUJBQVcsS0FBS1QsYUFBTCxFQUFYLENBQWlDLEVBQTdEO0FBQ0Q7O0FBRURVLEVBQUFBLFVBQVUsR0FBRztBQUVYLFVBQU1DLGFBQWEsR0FBRyxLQUFLQyxnQkFBTCxDQUFzQixLQUFLQyxTQUEzQixDQUF0QjtBQUNBLFdBQU8sT0FBT04sR0FBUCxFQUFZTyxJQUFaLEtBQXFCO0FBQzFCLFVBQUksWUFBWUMsSUFBWixDQUFpQlIsR0FBRyxDQUFDRixHQUFyQixDQUFKLEVBQStCO0FBRTdCLGVBQU8sS0FBS0MsY0FBTCxDQUFvQkMsR0FBcEIsQ0FBUDtBQUNELE9BSEQsTUFHTyxJQUFJLFlBQVlRLElBQVosQ0FBaUJSLEdBQUcsQ0FBQ0YsR0FBckIsQ0FBSixFQUErQjtBQUNwQyxjQUFNLEtBQUtXLG1CQUFMLENBQXlCTCxhQUF6QixFQUF3Q0osR0FBeEMsQ0FBTjtBQUNEOztBQUNELFlBQU1PLElBQUksRUFBVjtBQUNELEtBUkQ7QUFTRDs7QUFFREcsRUFBQUEsT0FBTyxHQUFHO0FBQ1IsU0FBS0MsR0FBTCxHQUFXLElBQUlDLFlBQUosRUFBWDtBQUNBLFNBQUtELEdBQUwsQ0FBU0UsR0FBVCxDQUFhLEtBQUtWLFVBQUwsRUFBYjs7QUFDQSxRQUFJLEtBQUtsQixJQUFMLEtBQWMsYUFBbEIsRUFBaUM7QUFFL0IsVUFBSSxLQUFLRSxPQUFMLENBQWEsT0FBYixDQUFKLEVBQTJCO0FBQ3pCLGFBQUtOLEdBQUwsQ0FBU2lDLElBQVQsQ0FBYyxhQUFkLEVBQTZCLE1BQU0sS0FBS0MsZUFBTCxFQUFuQztBQUNEO0FBQ0YsS0FMRCxNQUtPO0FBR0wsV0FBS0osR0FBTCxDQUFTRSxHQUFULENBQWEsT0FBT2IsR0FBUCxFQUFZTyxJQUFaLEtBQXFCO0FBRWhDLFlBQUksQ0FBQ1AsR0FBRyxDQUFDRixHQUFKLENBQVFrQixLQUFSLENBQWMsdUJBQWQsQ0FBTCxFQUE2QztBQUMzQ2hCLFVBQUFBLEdBQUcsQ0FBQ0YsR0FBSixHQUFVLEdBQVY7QUFDRDs7QUFDRCxjQUFNUyxJQUFJLEVBQVY7QUFDRCxPQU5EO0FBT0EsV0FBS0ksR0FBTCxDQUFTRSxHQUFULENBQWEsd0JBQU0sS0FBSzFCLE9BQUwsQ0FBYSxNQUFiLENBQU4sQ0FBYjtBQUNEOztBQUNELFdBQU8sdUJBQU0sS0FBS1csR0FBWCxFQUFnQixLQUFLYSxHQUFyQixDQUFQO0FBQ0Q7O0FBRW9CLFFBQWZJLGVBQWUsR0FBRztBQUV0QixVQUFNRSxLQUFLLEdBQUc7QUFDWkMsTUFBQUEsR0FBRyxFQUFFLEtBRE87QUFFWkMsTUFBQUEsTUFBTSxFQUFFLElBRkk7QUFHWkMsTUFBQUEsWUFBWSxFQUFFO0FBSEYsS0FBZDtBQU1BLFVBQU1qQixVQUFVLEdBQUcsTUFBTSx5QkFBVztBQUNsQ3BCLE1BQUFBLE1BQU0sRUFBRSxLQUFLc0MsZ0JBQUwsRUFEMEI7QUFFbENDLE1BQUFBLGFBQWEsRUFBRTtBQUNiQyxRQUFBQSxVQUFVLEVBQUUsR0FEQztBQUViTixRQUFBQTtBQUZhLE9BRm1CO0FBTWxDTyxNQUFBQSxTQUFTLEVBQUUsS0FBS3pDLE1BQUwsQ0FBWTBDLFNBQVosS0FBMEIsS0FBMUIsSUFBbUM7QUFJNUNDLFFBQUFBLFFBQVEsRUFBRSxPQUprQztBQUs1Q1QsUUFBQUE7QUFMNEM7QUFOWixLQUFYLENBQXpCO0FBY0EsU0FBS04sR0FBTCxDQUFTRSxHQUFULENBQWEsNENBQWI7QUFDQSxTQUFLRixHQUFMLENBQVNFLEdBQVQsQ0FBYVYsVUFBYjtBQUNEOztBQUVEd0IsRUFBQUEsWUFBWSxHQUFHO0FBQ2IsVUFBTUMsV0FBVyxHQUFHLEtBQUszQyxJQUFMLEtBQWMsYUFBbEM7QUFDQSxVQUFNO0FBQ0o0QyxNQUFBQSxLQUFLLEdBQUcsRUFESjtBQUVKQyxNQUFBQSxPQUFPLEdBQUdGLFdBQVcsR0FBRyxZQUFILEdBQWtCO0FBRm5DLFFBR0YsS0FBSzdDLE1BSFQ7QUFJQSxXQUFPO0FBQ0xnRCxNQUFBQSxlQUFlLEVBQUUsSUFEWjtBQUVMUixNQUFBQSxVQUFVLEVBQUcsR0FBRSxLQUFLekIsR0FBSSxHQUZuQjtBQUdMa0MsTUFBQUEsZ0JBQWdCLEVBQUU7QUFDaEJGLFFBQUFBLE9BRGdCO0FBSWhCRyxRQUFBQSxLQUFLLEVBQUUsQ0FBQyxLQUFLOUMsT0FBTCxDQUFhLE9BQWIsQ0FBRCxDQUpTO0FBS2hCSyxRQUFBQSxPQUFPLEVBQUU7QUFDUDBDLFVBQUFBLEtBQUssRUFBRTtBQUVMLHlDQUNFQyxPQUFPLENBQUMzQyxPQUFSLENBQWdCLDJCQUFoQjtBQUhHO0FBREEsU0FMTztBQVloQjRDLFFBQUFBLE1BQU0sRUFBRTtBQUNOQyxVQUFBQSxRQUFRLEVBQUU7QUFESixTQVpRO0FBZWhCQyxRQUFBQSxZQUFZLEVBQUU7QUFDWkMsVUFBQUEsV0FBVyxFQUFFO0FBSVhDLFlBQUFBLFdBQVcsRUFBRTtBQUNYQyxjQUFBQSxNQUFNLEVBQUU7QUFDTnJELGdCQUFBQSxJQUFJLEVBQUUsUUFEQTtBQUVOb0IsZ0JBQUFBLElBQUksRUFBRSxrQkFGQTtBQUdOa0MsZ0JBQUFBLE1BQU0sRUFBRTtBQUhGLGVBREc7QUFNWEMsY0FBQUEsS0FBSyxFQUFFO0FBQ0x2RCxnQkFBQUEsSUFBSSxFQUFFLE9BREQ7QUFFTG9CLGdCQUFBQSxJQUFJLEVBQUUsV0FGRDtBQUdMa0MsZ0JBQUFBLE1BQU0sRUFBRTtBQUhIO0FBTkk7QUFKRjtBQURELFNBZkU7QUFrQ2hCRSxRQUFBQSxNQUFNLEVBQUVoQixXQUFXLEdBSWY7QUFDQWlCLFVBQUFBLEtBQUssRUFBRSxDQUNMO0FBQ0VyQyxZQUFBQSxJQUFJLEVBQUUsYUFEUjtBQUVFc0MsWUFBQUEsT0FBTyxFQUFFLEtBRlg7QUFLRWpDLFlBQUFBLEdBQUcsRUFBRSxDQUFDc0IsT0FBTyxDQUFDM0MsT0FBUixDQUFnQixtQkFBaEIsQ0FBRDtBQUxQLFdBREs7QUFEUCxTQUplLEdBZWYsRUFqRFk7QUFrRGhCdUQsUUFBQUEsT0FBTyxFQUFFLENBR1AsSUFBSUMsOEJBQUosQ0FBMEI7QUFDeEJDLFVBQUFBLE9BQU8sRUFBRSxDQUFDLFNBQUQsQ0FEZTtBQUV4QkMsVUFBQUEsT0FBTyxFQUFFLElBRmU7QUFHeEJDLFVBQUFBLE9BQU8sRUFBRSxDQUFDN0QsSUFBRCxFQUFPOEQsSUFBUCxLQUFnQjlELElBQUksQ0FBQytELE9BQUwsQ0FBYSxPQUFiLEVBQXVCLElBQUdELElBQUssS0FBL0IsQ0FIRDtBQUl4QkUsVUFBQUEsTUFBTSxFQUFFO0FBSmdCLFNBQTFCLENBSE8sQ0FsRE87QUE0RGhCckMsUUFBQUEsS0FBSyxFQUFFO0FBQ0xzQyxVQUFBQSxjQUFjLEVBQUU7QUFEWDtBQTVEUyxPQUhiO0FBb0VMQyxNQUFBQSxZQUFZLEVBQUVDLElBQUksSUFBSTtBQUVwQixjQUFNO0FBQUVDLFVBQUFBLFFBQVEsR0FBRztBQUFiLFlBQThCN0IsS0FBcEM7QUFDQTRCLFFBQUFBLElBQUksQ0FBQ0UsTUFBTCxDQUFZLE1BQVosRUFBb0JDLEdBQXBCLENBQXdCQyxJQUFJLElBQUk7QUFDOUJBLFVBQUFBLElBQUksQ0FBQyxDQUFELENBQUosQ0FBUUgsUUFBUixHQUFtQixRQUFRbEQsSUFBUixDQUFha0QsUUFBYixJQUNmcEUsY0FBS0UsT0FBTCxDQUFha0UsUUFBYixDQURlLEdBRWZwRSxjQUFLd0UsSUFBTCxDQUFVLEtBQUszRSxPQUFMLENBQWEsT0FBYixDQUFWLEVBQWlDdUUsUUFBakMsQ0FGSjtBQUdBLGlCQUFPRyxJQUFQO0FBQ0QsU0FMRDs7QUFNQSxZQUFJakMsV0FBSixFQUFpQjtBQUFBOztBQUlmLGdCQUFNbUMsTUFBTSxHQUFHTixJQUFJLENBQUNiLE1BQUwsQ0FBWW9CLElBQVosQ0FBaUIsSUFBakIsQ0FBZjtBQUNBLGdCQUFNQyxRQUFRLDJCQUFHRixNQUFNLENBQUNHLFFBQVAsR0FBa0JyRCxHQUFyQixxQkFBRyxxQkFBdUJzRCxJQUF2QixDQUNmLENBQUM7QUFBRUMsWUFBQUE7QUFBRixXQUFELEtBQWdCLG1CQUFtQjVELElBQW5CLENBQXdCNEQsTUFBeEIsQ0FERCxDQUFqQjs7QUFHQSxjQUFJSCxRQUFKLEVBQWM7QUFDWkYsWUFBQUEsTUFBTSxDQUFDbEQsR0FBUCxDQUFXLGNBQVgsRUFBMkJ3RCxPQUEzQixDQUFtQztBQUFFQyxjQUFBQSxPQUFPLEVBQUU7QUFBWCxhQUFuQztBQUNEOztBQUdEYixVQUFBQSxJQUFJLENBQUNWLE9BQUwsQ0FBYXdCLE1BQWIsQ0FBb0IsaUJBQXBCO0FBQ0Q7QUFDRjtBQTVGSSxLQUFQO0FBOEZEOztBQUVEQyxFQUFBQSxhQUFhLEdBQUc7QUFBQTs7QUFDZCxtQ0FBTyxLQUFLekYsTUFBTCxDQUFZZ0UsT0FBbkIscUJBQU8scUJBQXFCMEIsR0FBckIsQ0FBeUJDLFVBQVUsSUFBSTtBQUM1QyxZQUFNZixNQUFNLEdBQUcsc0JBQVNlLFVBQVQsSUFDWDtBQUFFQyxRQUFBQSxFQUFFLEVBQUVEO0FBQU4sT0FEVyxHQUVYLHNCQUFTQSxVQUFULElBQ0VBLFVBREYsR0FFRSxFQUpOO0FBS0EsWUFBTTtBQUNKQyxRQUFBQSxFQURJO0FBRUpDLFFBQUFBLEtBQUssR0FBR3pDLE9BQU8sQ0FBQ3dDLEVBQUQ7QUFGWCxVQUdGaEIsTUFISjs7QUFJQSxVQUFJLENBQUNnQixFQUFMLEVBQVM7QUFDUCxjQUFNLElBQUlwRix1QkFBSixDQUNKLElBREksRUFFSCw4QkFBNkJtRixVQUFXLEVBRnJDLENBQU47QUFJRDs7QUFDRCxhQUFPO0FBQUVDLFFBQUFBLEVBQUY7QUFBTUMsUUFBQUE7QUFBTixPQUFQO0FBQ0QsS0FqQk0sQ0FBUDtBQWtCRDs7QUFFRHZELEVBQUFBLGdCQUFnQixHQUFHO0FBQ2pCLFVBQU13RCxPQUFPLEdBQUcsSUFBSUMsbUJBQUosQ0FBZSxLQUFLM0YsT0FBTCxDQUFhLE9BQWIsQ0FBZixFQUFzQztBQUNwRDRGLE1BQUFBLGFBQWEsRUFBRSxLQUFLcEQsWUFBTCxFQURxQztBQUVwRG9CLE1BQUFBLE9BQU8sRUFBRSxLQUFLeUIsYUFBTDtBQUYyQyxLQUF0QyxDQUFoQjtBQUlBSyxJQUFBQSxPQUFPLENBQUNHLElBQVIsQ0FBYSxLQUFLL0YsSUFBbEI7QUFDQSxXQUFPNEYsT0FBTyxDQUFDSSxvQkFBUixFQUFQO0FBQ0Q7O0FBclA2QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBwYXRoIGZyb20gJ3BhdGgnXG5pbXBvcnQgS29hIGZyb20gJ2tvYSdcbmltcG9ydCBtb3VudCBmcm9tICdrb2EtbW91bnQnXG5pbXBvcnQgc2VydmUgZnJvbSAna29hLXN0YXRpYydcbmltcG9ydCBrb2FXZWJwYWNrIGZyb20gJ2tvYS13ZWJwYWNrJ1xuaW1wb3J0IGhpc3RvcnlBcGlGYWxsYmFjayBmcm9tICdrb2EtY29ubmVjdC1oaXN0b3J5LWFwaS1mYWxsYmFjaydcbmltcG9ydCBWdWVTZXJ2aWNlIGZyb20gJ0B2dWUvY2xpLXNlcnZpY2UnXG5pbXBvcnQgSHRtbFdlYnBhY2tUYWdzUGx1Z2luIGZyb20gJ2h0bWwtd2VicGFjay10YWdzLXBsdWdpbidcbmltcG9ydCB7IENvbnRyb2xsZXIgfSBmcm9tICcuL0NvbnRyb2xsZXInXG5pbXBvcnQgeyBDb250cm9sbGVyRXJyb3IgfSBmcm9tICdAL2Vycm9ycydcbmltcG9ydCB7IGZvcm1hdEpzb24gfSBmcm9tICdAL3V0aWxzJ1xuaW1wb3J0IHsgaXNTdHJpbmcsIGlzT2JqZWN0IH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGNsYXNzIEFkbWluQ29udHJvbGxlciBleHRlbmRzIENvbnRyb2xsZXIge1xuICAvLyBAb3ZlcnJpZGVcbiAgY29uc3RydWN0b3IoYXBwLCBuYW1lc3BhY2UpIHtcbiAgICBzdXBlcihhcHAsIG5hbWVzcGFjZSlcbiAgICAvLyBNZXJnZSBgdGhpcy5hcHAuY29uZmlnLmFkbWluYCBpbnRvIGNvbmZpZyBhcyBkZWZhdWx0LCBidXQgYWxsb3cgb3ZlcnJpZGVzXG4gICAgLy8gb24gdGhlIGNvbnRyb2xsZXIgaXRzZWxmOlxuICAgIHRoaXMuY29uZmlnID0ge1xuICAgICAgLi4udGhpcy5hcHAuY29uZmlnLmFkbWluLFxuICAgICAgLi4udGhpcy5jb25maWdcbiAgICB9XG4gICAgLy8gSWYgbm8gbW9kZSBpcyBzcGVjaWZpZWQsIHVzZSBgcHJvZHVjdGlvbmAgc2luY2UgdGhhdCdzIGp1c3QgdGhlIGhvc3RpbmdcbiAgICAvLyBvZiB0aGUgcHJlLWJ1aWx0IGFkbWluIGZpbGVzLiBgZGV2ZWxvcG1lbnRgIHNlcnZlcyB0aGUgYWRtaW4gZGlyZWN0bHlcbiAgICAvLyBzb3VyY2VzIHdpdGggSFJNLCBhbmQgdGh1cyBzaG91bGQgYmUgZXhwbGljaXRlbHkgYWN0aXZhdGVkLlxuICAgIHRoaXMubW9kZSA9IHRoaXMuY29uZmlnLm1vZGUgfHwgKFxuICAgICAgdGhpcy5hcHAuY29uZmlnLmVudiA9PT0gJ2RldmVsb3BtZW50JyA/ICdkZXZlbG9wbWVudCcgOiAncHJvZHVjdGlvbidcbiAgICApXG4gIH1cblxuICBnZXRQYXRoKG5hbWUpIHtcbiAgICBjb25zdCBzdHIgPSB0aGlzLmNvbmZpZ1tuYW1lXT8ucGF0aFxuICAgIGlmICghc3RyKSB7XG4gICAgICB0aHJvdyBuZXcgQ29udHJvbGxlckVycm9yKFxuICAgICAgICB0aGlzLFxuICAgICAgICBgTWlzc2luZyBhZG1pbi4ke25hbWV9LnBhdGggY29uZmlndXJhdGlvbi5gXG4gICAgICApXG4gICAgfVxuICAgIHJldHVybiBwYXRoLnJlc29sdmUoc3RyKVxuICB9XG5cbiAgZ2V0RGl0b09iamVjdCgpIHtcbiAgICAvLyBFeHBvc2UgYXBpIGNvbmZpZyBhbmQgZGVmaW5pdGlvbnMgdG8gYnJvd3NlciBzaWRlOlxuICAgIC8vIFBhc3Mgb24gdGhlIGBjb25maWcuYXBwLm5vcm1hbGl6ZVBhdGhzYCBzZXR0aW5nIHRvIERpdG8uanMgQWRtaW46XG4gICAgY29uc3Qge1xuICAgICAgYXBpID0ge30sXG4gICAgICBzZXR0aW5ncyA9IHt9XG4gICAgfSA9IHRoaXMuY29uZmlnXG4gICAgaWYgKGFwaS5ub3JtYWxpemVQYXRocyA9PSBudWxsKSB7XG4gICAgICBhcGkubm9ybWFsaXplUGF0aHMgPSB0aGlzLmFwcC5jb25maWcuYXBwLm5vcm1hbGl6ZVBhdGhzXG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBiYXNlOiB0aGlzLnVybCxcbiAgICAgIGFwaSxcbiAgICAgIHNldHRpbmdzXG4gICAgfVxuICB9XG5cbiAgc2VuZERpdG9PYmplY3QoY3R4KSB7XG4gICAgLy8gU2VuZCBiYWNrIHRoZSBnbG9iYWwgZGl0byBvYmplY3QgYXMgSmF2YVNjcmlwdCBjb2RlLlxuICAgIGN0eC50eXBlID0gJ3RleHQvamF2YXNjcmlwdCdcbiAgICBjdHguYm9keSA9IGB3aW5kb3cuZGl0byA9ICR7Zm9ybWF0SnNvbih0aGlzLmdldERpdG9PYmplY3QoKSl9YFxuICB9XG5cbiAgbWlkZGxld2FyZSgpIHtcbiAgICAvLyBTaGllbGQgYWRtaW4gdmlld3MgYWdhaW5zdCB1bmF1dGhvcml6ZWQgYWNjZXNzLlxuICAgIGNvbnN0IGF1dGhvcml6YXRpb24gPSB0aGlzLnByb2Nlc3NBdXRob3JpemUodGhpcy5hdXRob3JpemUpXG4gICAgcmV0dXJuIGFzeW5jIChjdHgsIG5leHQpID0+IHtcbiAgICAgIGlmICgvXlxcL2RpdG9cXGIvLnRlc3QoY3R4LnVybCkpIHtcbiAgICAgICAgLy8gUmV0dXJuIHdpdGhvdXQgY2FsbGluZyBgbmV4dCgpYFxuICAgICAgICByZXR1cm4gdGhpcy5zZW5kRGl0b09iamVjdChjdHgpXG4gICAgICB9IGVsc2UgaWYgKC9cXC92aWV3c1xcYi8udGVzdChjdHgudXJsKSkge1xuICAgICAgICBhd2FpdCB0aGlzLmhhbmRsZUF1dGhvcml6YXRpb24oYXV0aG9yaXphdGlvbiwgY3R4KVxuICAgICAgfVxuICAgICAgYXdhaXQgbmV4dCgpXG4gICAgfVxuICB9XG5cbiAgY29tcG9zZSgpIHtcbiAgICB0aGlzLmtvYSA9IG5ldyBLb2EoKVxuICAgIHRoaXMua29hLnVzZSh0aGlzLm1pZGRsZXdhcmUoKSlcbiAgICBpZiAodGhpcy5tb2RlID09PSAnZGV2ZWxvcG1lbnQnKSB7XG4gICAgICAvLyBDYWxsaW5nIGdldFBhdGgoKSB0aHJvd3MgZXhjZXB0aW9uIGlmIGFkbWluLmJ1aWxkLnBhdGggaXMgbm90IGRlZmluZWQ6XG4gICAgICBpZiAodGhpcy5nZXRQYXRoKCdidWlsZCcpKSB7XG4gICAgICAgIHRoaXMuYXBwLm9uY2UoJ2FmdGVyOnN0YXJ0JywgKCkgPT4gdGhpcy5zZXR1cEtvYVdlYnBhY2soKSlcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gU3RhdGljYWxseSBzZXJ2ZSB0aGUgcHJlLWJ1aWx0IGFkbWluIFNQQS4gQnV0IGluIG9yZGVyIGZvciB2dWUtcm91dGVyXG4gICAgICAvLyByb3V0ZXMgaW5zaWRlIHRoZSBTUEEgdG8gd29yaywgdXNlIGEgdGlueSByZXdyaXRpbmcgbWlkZGxld2FyZTpcbiAgICAgIHRoaXMua29hLnVzZShhc3luYyAoY3R4LCBuZXh0KSA9PiB7XG4gICAgICAgIC8vIC8vIEV4Y2x1ZGUgYXNzZXQgcmVxdWVzdHMgKGNzcywganMsIGFwcClcbiAgICAgICAgaWYgKCFjdHgudXJsLm1hdGNoKC9eXFwvKGFwcFxcLnxjc3NcXC98anNcXC8pLykpIHtcbiAgICAgICAgICBjdHgudXJsID0gJy8nXG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgbmV4dCgpXG4gICAgICB9KVxuICAgICAgdGhpcy5rb2EudXNlKHNlcnZlKHRoaXMuZ2V0UGF0aCgnZGlzdCcpKSlcbiAgICB9XG4gICAgcmV0dXJuIG1vdW50KHRoaXMudXJsLCB0aGlzLmtvYSlcbiAgfVxuXG4gIGFzeW5jIHNldHVwS29hV2VicGFjaygpIHtcbiAgICAvLyBodHRwczovL3dlYnBhY2suanMub3JnL2NvbmZpZ3VyYXRpb24vc3RhdHMvI3N0YXRzXG4gICAgY29uc3Qgc3RhdHMgPSB7XG4gICAgICBhbGw6IGZhbHNlLFxuICAgICAgZXJyb3JzOiB0cnVlLFxuICAgICAgZXJyb3JEZXRhaWxzOiB0cnVlXG4gICAgfVxuXG4gICAgY29uc3QgbWlkZGxld2FyZSA9IGF3YWl0IGtvYVdlYnBhY2soe1xuICAgICAgY29uZmlnOiB0aGlzLmdldFdlYnBhY2tDb25maWcoKSxcbiAgICAgIGRldk1pZGRsZXdhcmU6IHtcbiAgICAgICAgcHVibGljUGF0aDogJy8nLFxuICAgICAgICBzdGF0c1xuICAgICAgfSxcbiAgICAgIGhvdENsaWVudDogdGhpcy5jb25maWcuaG90UmVsb2FkICE9PSBmYWxzZSAmJiB7XG4gICAgICAgIC8vIFRoZSBvbmx5IHdheSB0byBub3QgbG9nIGBGYWlsZWQgdG8gcGFyc2Ugc291cmNlIG1hcGAgd2FybmluZ3MgaXNcbiAgICAgICAgLy8gc2FkbHkgdG8gaWdub3JlIGFsbCB3YXJuaW5nczpcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3dlYnBhY2stY29udHJpYi93ZWJwYWNrLWhvdC1jbGllbnQvaXNzdWVzLzk0XG4gICAgICAgIGxvZ0xldmVsOiAnZXJyb3InLFxuICAgICAgICBzdGF0c1xuICAgICAgfVxuICAgIH0pXG4gICAgdGhpcy5rb2EudXNlKGhpc3RvcnlBcGlGYWxsYmFjaygpKVxuICAgIHRoaXMua29hLnVzZShtaWRkbGV3YXJlKVxuICB9XG5cbiAgZ2V0VnVlQ29uZmlnKCkge1xuICAgIGNvbnN0IGRldmVsb3BtZW50ID0gdGhpcy5tb2RlID09PSAnZGV2ZWxvcG1lbnQnXG4gICAgY29uc3Qge1xuICAgICAgYnVpbGQgPSB7fSxcbiAgICAgIGRldnRvb2wgPSBkZXZlbG9wbWVudCA/ICdzb3VyY2UtbWFwJyA6IGZhbHNlXG4gICAgfSA9IHRoaXMuY29uZmlnXG4gICAgcmV0dXJuIHtcbiAgICAgIHJ1bnRpbWVDb21waWxlcjogdHJ1ZSxcbiAgICAgIHB1YmxpY1BhdGg6IGAke3RoaXMudXJsfS9gLFxuICAgICAgY29uZmlndXJlV2VicGFjazoge1xuICAgICAgICBkZXZ0b29sLFxuICAgICAgICAvLyBXZSBhbHdheXMgbmVlZCB0aGUgc291cmNlIGJ1aWxkIHBhdGggYXMgZW50cnksIGV2ZW4gZm9yIHByb2R1Y3Rpb24sXG4gICAgICAgIC8vIGZvciB0aGluZ3MgbGlrZSAuYmFiZWxyYyB0byB3b3JrIHdoZW4gYnVpbGRpbmcgZm9yIGRpc3Q6XG4gICAgICAgIGVudHJ5OiBbdGhpcy5nZXRQYXRoKCdidWlsZCcpXSxcbiAgICAgICAgcmVzb2x2ZToge1xuICAgICAgICAgIGFsaWFzOiB7XG4gICAgICAgICAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3dlYnBhY2stY29udHJpYi93ZWJwYWNrLWhvdC1jbGllbnQvcHVsbC82MlxuICAgICAgICAgICAgJ3dlYnBhY2staG90LWNsaWVudC9jbGllbnQnOlxuICAgICAgICAgICAgICByZXF1aXJlLnJlc29sdmUoJ3dlYnBhY2staG90LWNsaWVudC9jbGllbnQnKVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgb3V0cHV0OiB7XG4gICAgICAgICAgZmlsZW5hbWU6ICdbbmFtZV0uW2hhc2hdLmpzJ1xuICAgICAgICB9LFxuICAgICAgICBvcHRpbWl6YXRpb246IHtcbiAgICAgICAgICBzcGxpdENodW5rczoge1xuICAgICAgICAgICAgLy8gU3BsaXQgZGVwZW5kZW5jaWVzIGludG8gdHdvIGNodW5rcywgb25lIGZvciBhbGwgY29tbW9uIGxpYnJhcmllcyxcbiAgICAgICAgICAgIC8vIGFuZCBvbmUgZm9yIGFsbCB2aWV3cywgc28gdGhleSBjYW4gYmUgbG9hZGVkIHNlcGFyYXRlbHksIGFuZCBvbmx5XG4gICAgICAgICAgICAvLyBvbmNlIGF1dGhlbnRpY2F0aW9uIHdhcyBzdWNjZXNzZnVsLlxuICAgICAgICAgICAgY2FjaGVHcm91cHM6IHtcbiAgICAgICAgICAgICAgY29tbW9uOiB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ2NvbW1vbicsXG4gICAgICAgICAgICAgICAgdGVzdDogL1xcL25vZGVfbW9kdWxlc1xcLy8sXG4gICAgICAgICAgICAgICAgY2h1bmtzOiAnYWxsJ1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB2aWV3czoge1xuICAgICAgICAgICAgICAgIG5hbWU6ICd2aWV3cycsXG4gICAgICAgICAgICAgICAgdGVzdDogL1xcL3ZpZXdzXFwvLyxcbiAgICAgICAgICAgICAgICBjaHVua3M6ICdhbGwnXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG1vZHVsZTogZGV2ZWxvcG1lbnRcbiAgICAgICAgICAvLyBQcmVzZXJ2ZSBzb3VyY2UtbWFwcyBpbiB0aGlyZCBwYXJ0eSBkZXBlbmRlbmNpZXMsIGJ1dCBkbyBub3QgbG9nXG4gICAgICAgICAgLy8gd2FybmluZ3MgYWJvdXQgZGVwZW5kZW5jaWVzIHRoYXQgZG9uJ3QgY29tZSB3aXRoIHNvdXJjZS1tYXBzLlxuICAgICAgICAgIC8vIGh0dHBzOi8vd2VicGFjay5qcy5vcmcvbG9hZGVycy9zb3VyY2UtbWFwLWxvYWRlci8jaWdub3Jpbmctd2FybmluZ3NcbiAgICAgICAgICA/IHtcbiAgICAgICAgICAgIHJ1bGVzOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0ZXN0OiAvXFwuKGpzfGNzcykkLyxcbiAgICAgICAgICAgICAgICBlbmZvcmNlOiAncHJlJyxcbiAgICAgICAgICAgICAgICAvLyBVc2UgYHJlcXVpcmUucmVzb2x2ZSgpYCBoZXJlIHRvbywgdG8gYXZvaWQgaXNzdWVzIHNpbWlsYXIgdG9cbiAgICAgICAgICAgICAgICAvLyAnd2VicGFjay1ob3QtY2xpZW50L2NsaWVudCcgYWJvdmUuXG4gICAgICAgICAgICAgICAgdXNlOiBbcmVxdWlyZS5yZXNvbHZlKCdzb3VyY2UtbWFwLWxvYWRlcicpXVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICAgIDoge30sXG4gICAgICAgIHBsdWdpbnM6IFtcbiAgICAgICAgICAvLyBVc2UgYEh0bWxXZWJwYWNrVGFnc1BsdWdpbmAgcGx1Z2luIHRvIGluamVjdCBhIHNjcmlwdCB0YWcgdGhhdFxuICAgICAgICAgIC8vIGxvYWQgdGhlIGRpdG8gb2JqZWN0IGZyb20gdGhlIGNvbnRyb2xsZXIsIGluY2x1ZGluZyBgZGl0by5zZXR0aW5nc2BcbiAgICAgICAgICBuZXcgSHRtbFdlYnBhY2tUYWdzUGx1Z2luKHtcbiAgICAgICAgICAgIHNjcmlwdHM6IFsnZGl0by5qcyddLFxuICAgICAgICAgICAgdXNlSGFzaDogdHJ1ZSxcbiAgICAgICAgICAgIGFkZEhhc2g6IChwYXRoLCBoYXNoKSA9PiBwYXRoLnJlcGxhY2UoL1xcLmpzJC8sIGAuJHtoYXNofS5qc2ApLFxuICAgICAgICAgICAgYXBwZW5kOiBmYWxzZVxuICAgICAgICAgIH0pXG4gICAgICAgIF0sXG4gICAgICAgIHN0YXRzOiB7XG4gICAgICAgICAgd2FybmluZ3NGaWx0ZXI6IC9GYWlsZWQgdG8gcGFyc2Ugc291cmNlIG1hcC9cbiAgICAgICAgfVxuICAgICAgfSxcblxuICAgICAgY2hhaW5XZWJwYWNrOiBjb25mID0+IHtcbiAgICAgICAgLy8gQ2hhbmdlIHRoZSBsb2NhdGlvbiBvZiB0aGUgSFRNTCB0ZW1wbGF0ZTpcbiAgICAgICAgY29uc3QgeyB0ZW1wbGF0ZSA9ICdpbmRleC5odG1sJyB9ID0gYnVpbGRcbiAgICAgICAgY29uZi5wbHVnaW4oJ2h0bWwnKS50YXAoYXJncyA9PiB7XG4gICAgICAgICAgYXJnc1swXS50ZW1wbGF0ZSA9IC9eWy4vXS8udGVzdCh0ZW1wbGF0ZSlcbiAgICAgICAgICAgID8gcGF0aC5yZXNvbHZlKHRlbXBsYXRlKVxuICAgICAgICAgICAgOiBwYXRoLmpvaW4odGhpcy5nZXRQYXRoKCdidWlsZCcpLCB0ZW1wbGF0ZSlcbiAgICAgICAgICByZXR1cm4gYXJnc1xuICAgICAgICB9KVxuICAgICAgICBpZiAoZGV2ZWxvcG1lbnQpIHtcbiAgICAgICAgICAvLyBEaXNhYmxlIHRoZSAnY29tcGFjdCcgb3B0aW9uIGluIGJhYmVsLWxvYWRlciBkdXJpbmcgZGV2ZWxvcG1lbnQgdG9cbiAgICAgICAgICAvLyBwcmV2ZW50IGNvbXBsYWludHMgd2hlbiB3b3JraW5nIHdpdGggdGhlIGB5YXJuIHdhdGNoYCB2ZXJzaW9ucyBvZlxuICAgICAgICAgIC8vIGRpdG8tYWRtaW4udW1kLm1pbi5qcyBhbmQgZGl0by11aS51bWQubWluLmpzXG4gICAgICAgICAgY29uc3QganNSdWxlID0gY29uZi5tb2R1bGUucnVsZSgnanMnKVxuICAgICAgICAgIGNvbnN0IGhhc0JhYmVsID0ganNSdWxlLnRvQ29uZmlnKCkudXNlPy5zb21lKFxuICAgICAgICAgICAgKHsgbG9hZGVyIH0pID0+IC9cXGJiYWJlbC1sb2FkZXJcXGIvLnRlc3QobG9hZGVyKVxuICAgICAgICAgIClcbiAgICAgICAgICBpZiAoaGFzQmFiZWwpIHtcbiAgICAgICAgICAgIGpzUnVsZS51c2UoJ2JhYmVsLWxvYWRlcicpLm9wdGlvbnMoeyBjb21wYWN0OiBmYWxzZSB9KVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBNYWtlIGBzdGF0cy53YXJuaW5nc0ZpbHRlcmAgd29yaywgc2VlOlxuICAgICAgICAgIC8vIGh0dHBzOi8vZm9ydW0udnVlanMub3JnL3Qvc3BwcmVzcy13YXJuaW5ncy1pbi12dWUtY2xpLTMvNDU5MDUvNFxuICAgICAgICAgIGNvbmYucGx1Z2lucy5kZWxldGUoJ2ZyaWVuZGx5LWVycm9ycycpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXRWdWVQbHVnaW5zKCkge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5wbHVnaW5zPy5tYXAoZGVmaW5pdGlvbiA9PiB7XG4gICAgICBjb25zdCBwbHVnaW4gPSBpc1N0cmluZyhkZWZpbml0aW9uKVxuICAgICAgICA/IHsgaWQ6IGRlZmluaXRpb24gfVxuICAgICAgICA6IGlzT2JqZWN0KGRlZmluaXRpb24pXG4gICAgICAgICAgPyBkZWZpbml0aW9uXG4gICAgICAgICAgOiB7fVxuICAgICAgY29uc3Qge1xuICAgICAgICBpZCxcbiAgICAgICAgYXBwbHkgPSByZXF1aXJlKGlkKVxuICAgICAgfSA9IHBsdWdpblxuICAgICAgaWYgKCFpZCkge1xuICAgICAgICB0aHJvdyBuZXcgQ29udHJvbGxlckVycm9yKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgYEludmFsaWQgcGx1Z2luIGRlZmluaXRpb246ICR7ZGVmaW5pdGlvbn1gXG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIHJldHVybiB7IGlkLCBhcHBseSB9XG4gICAgfSlcbiAgfVxuXG4gIGdldFdlYnBhY2tDb25maWcoKSB7XG4gICAgY29uc3Qgc2VydmljZSA9IG5ldyBWdWVTZXJ2aWNlKHRoaXMuZ2V0UGF0aCgnYnVpbGQnKSwge1xuICAgICAgaW5saW5lT3B0aW9uczogdGhpcy5nZXRWdWVDb25maWcoKSxcbiAgICAgIHBsdWdpbnM6IHRoaXMuZ2V0VnVlUGx1Z2lucygpXG4gICAgfSlcbiAgICBzZXJ2aWNlLmluaXQodGhpcy5tb2RlKVxuICAgIHJldHVybiBzZXJ2aWNlLnJlc29sdmVXZWJwYWNrQ29uZmlnKClcbiAgfVxufVxuIl19
|
|
@@ -3,6 +3,20 @@
|
|
|
3
3
|
exports.__esModule = true;
|
|
4
4
|
exports.CollectionController = void 0;
|
|
5
5
|
|
|
6
|
+
require("core-js/modules/esnext.async-iterator.find.js");
|
|
7
|
+
|
|
8
|
+
require("core-js/modules/esnext.iterator.constructor.js");
|
|
9
|
+
|
|
10
|
+
require("core-js/modules/esnext.iterator.find.js");
|
|
11
|
+
|
|
12
|
+
require("core-js/modules/esnext.async-iterator.reduce.js");
|
|
13
|
+
|
|
14
|
+
require("core-js/modules/esnext.iterator.reduce.js");
|
|
15
|
+
|
|
16
|
+
require("core-js/modules/esnext.async-iterator.map.js");
|
|
17
|
+
|
|
18
|
+
require("core-js/modules/esnext.iterator.map.js");
|
|
19
|
+
|
|
6
20
|
var _Controller = require("./Controller");
|
|
7
21
|
|
|
8
22
|
var _errors = require("../errors");
|
|
@@ -246,4 +260,4 @@ const actionToVerb = {
|
|
|
246
260
|
update: 'put',
|
|
247
261
|
patch: 'patch'
|
|
248
262
|
};
|
|
249
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250cm9sbGVycy9Db2xsZWN0aW9uQ29udHJvbGxlci5qcyJdLCJuYW1lcyI6WyJDb2xsZWN0aW9uQ29udHJvbGxlciIsIkNvbnRyb2xsZXIiLCJjb25zdHJ1Y3RvciIsImFwcCIsIm5hbWVzcGFjZSIsImNvbGxlY3Rpb24iLCJ0b0NvcmVBY3Rpb25zIiwiZmluZCIsImN0eCIsIm1vZGlmeSIsInJlc3VsdCIsImV4ZWN1dGUiLCJxdWVyeSIsInRyeCIsImFsbG93UGFyYW0iLCJnZXRNb2RpZnkiLCJpc09uZVRvT25lIiwiZmlyc3QiLCJkZWxldGUiLCJjb3VudCIsImlnbm9yZVNjb3BlIiwidGhyb3dJZk5vdEZvdW5kIiwidW5yZWxhdGUiLCJpbnNlcnQiLCJyZWxhdGUiLCJwYXRjaERpdG9HcmFwaEFuZEZldGNoIiwicmVxdWVzdCIsImJvZHkiLCJleGVjdXRlQW5kRmV0Y2giLCJzdGF0dXMiLCJzZXQiLCJnZXRVcmwiLCJpZCIsInVwZGF0ZSIsInBhdGNoIiwibWVtYmVyIiwiZmluZEJ5SWQiLCJtZW1iZXJJZCIsImV4ZWN1dGVBbmRGZXRjaEJ5SWQiLCJtb2RlbENsYXNzIiwic2V0dXAiLCJpc1Jvb3QiLCJpZFBhcmFtIiwibGV2ZWwiLCJncmFwaCIsInRyYW5zYWN0ZWQiLCJzY29wZSIsInNldHVwQWN0aW9ucyIsImlkVmFsaWRhdG9yIiwic2V0dXBBY3Rpb24iLCJ0eXBlIiwiYWN0aW9ucyIsIm5hbWUiLCJoYW5kbGVyIiwiYXV0aG9yaXplIiwidmVyYiIsInBhdGgiLCJhY3Rpb25Ub1ZlcmIiLCJzZXR1cEFzc2V0cyIsImFzc2V0cyIsImRlZmluaXRpb24iLCJnZXRQYXRoIiwiZXh0ZW5kQ29udGV4dCIsIm9iamVjdCIsIk9iamVjdCIsInNldFByb3RvdHlwZU9mIiwiZ2V0TWVtYmVySWQiLCJ2YWxpZGF0ZUlkIiwicGFyYW1zIiwiZ2V0Q29udGV4dFdpdGhNZW1iZXJJZCIsImdldENvbGxlY3Rpb25JZHMiLCJpZFByb3BlcnR5IiwiZ2V0SWRQcm9wZXJ0eSIsImdldElkIiwibW9kZWwiLCJyZWR1Y2UiLCJrZXkiLCJwdXNoIiwibWFwIiwiZ2V0SWRzIiwiYWN0aW9uIiwicmVmZXJlbmNlIiwiZ2V0UmVmZXJlbmNlIiwiJHZhbGlkYXRlIiwiY29lcmNlVHlwZXMiLCJ2YWx1ZXMiLCJsZW5ndGgiLCJnZXRNZW1iZXIiLCJiYXNlIiwiZm9yVXBkYXRlIiwiY2FsbCIsInNldHVwUXVlcnkiLCJDb250cm9sbGVyRXJyb3IiLCJhbGxvd1Njb3BlIiwiYWxsb3dGaWx0ZXIiLCJhc0FsbG93QXJyYXkiLCJ2YWx1ZSIsInVuZGVmaW5lZCIsIndpdGhTY29wZSIsImNvcmUiLCIkY29yZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFHTyxNQUFNQSxvQkFBTixTQUFtQ0Msc0JBQW5DLENBQThDO0FBQ25EQyxFQUFBQSxXQUFXLENBQUNDLEdBQUQsRUFBTUMsU0FBTixFQUFpQjtBQUMxQixVQUFNRCxHQUFOLEVBQVdDLFNBQVg7QUFEMEIsU0FxTTVCQyxVQXJNNEIsR0FxTWYsS0FBS0MsYUFBTCxDQUFtQjtBQUM5QixZQUFNQyxJQUFOLENBQVdDLEdBQVgsRUFBZ0JDLE1BQWhCLEVBQXdCO0FBQ3RCLGNBQU1DLE1BQU0sR0FBRyxNQUFNLEtBQUtDLE9BQUwsQ0FBYUgsR0FBYixFQUFrQixDQUFDSSxLQUFELEVBQVFDLEdBQVIsS0FBZ0I7QUFDckRELFVBQUFBLEtBQUssQ0FBQ0wsSUFBTixDQUFXQyxHQUFHLENBQUNJLEtBQWYsRUFBc0IsS0FBS0UsVUFBM0IsRUFBdUNMLE1BQXZDLENBQThDTSxTQUFTLENBQUNOLE1BQUQsRUFBU0ksR0FBVCxDQUF2RDtBQUNBLGlCQUFPLEtBQUtHLFVBQUwsR0FBa0JKLEtBQUssQ0FBQ0ssS0FBTixFQUFsQixHQUFrQ0wsS0FBekM7QUFDRCxTQUhvQixDQUFyQjtBQU9BLGVBQU9GLE1BQU0sSUFBSSxJQUFqQjtBQUNELE9BVjZCOztBQVk5QixZQUFNUSxNQUFOLENBQWFWLEdBQWIs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MkIsRUFBRyxjQUF2RDtBQUNBLFdBQU8sS0FBS2pDLE9BQUwsQ0FBYUgsR0FBYixFQUFrQixDQUFDSSxLQUFELEVBQVFDLEdBQVIsS0FDdkJELEtBQUssQ0FBQ3dDLElBQUQsQ0FBTCxDQUFZNUMsR0FBRyxDQUFDNkIsUUFBaEIsRUFBMEJWLElBQTFCLEVBQ0dOLGVBREgsR0FFR1osTUFGSCxDQUVVTSxTQUFTLENBQUNOLE1BQUQsRUFBU0ksR0FBVCxDQUZuQixDQURLLENBQVA7QUFLRDs7QUFFRFAsRUFBQUEsYUFBYSxDQUFDNkMsT0FBRCxFQUFVO0FBR3JCLFNBQUssTUFBTTZCLE1BQVgsSUFBcUJoQixNQUFNLENBQUNxQixNQUFQLENBQWNsQyxPQUFkLENBQXJCLEVBQTZDO0FBRzNDNkIsTUFBQUEsTUFBTSxDQUFDbUIsSUFBUCxHQUFjLElBQWQ7QUFDRDs7QUFDRGhELElBQUFBLE9BQU8sQ0FBQ2lELEtBQVIsR0FBZ0IsSUFBaEI7QUFDQSxXQUFPakQsT0FBUDtBQUNEOztBQXBNa0Q7Ozs7QUFxUnJELFNBQVNwQyxTQUFULENBQW1CTixNQUFuQixFQUEyQkksR0FBM0IsRUFBZ0M7QUFDOUIsU0FBT0osTUFBTSxHQUNURyxLQUFLLElBQUlILE1BQU0sQ0FBQ0csS0FBRCxFQUFRQyxHQUFSLENBRE4sR0FFVCxJQUZKO0FBR0Q7O0FBRUQsTUFBTTRDLFlBQVksR0FBRztBQUNuQmxELEVBQUFBLElBQUksRUFBRSxLQURhO0FBRW5CVyxFQUFBQSxNQUFNLEVBQUUsUUFGVztBQUduQkssRUFBQUEsTUFBTSxFQUFFLE1BSFc7QUFJbkJVLEVBQUFBLE1BQU0sRUFBRSxLQUpXO0FBS25CQyxFQUFBQSxLQUFLLEVBQUU7QUFMWSxDQUFyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbnRyb2xsZXIgfSBmcm9tICcuL0NvbnRyb2xsZXInXG5pbXBvcnQgeyBDb250cm9sbGVyRXJyb3IgfSBmcm9tICdAL2Vycm9ycydcbmltcG9ydCB7IGlzT2JqZWN0LCBpc0FycmF5LCBhc0FycmF5IH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQWJzdHJhY3QgYmFzZSBjbGFzcyBmb3IgTW9kZWxDb250cm9sbGVyIGFuZCBSZWxhdGlvbkNvbnRyb2xsZXJcbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW9uQ29udHJvbGxlciBleHRlbmRzIENvbnRyb2xsZXIge1xuICBjb25zdHJ1Y3RvcihhcHAsIG5hbWVzcGFjZSkge1xuICAgIHN1cGVyKGFwcCwgbmFtZXNwYWNlKVxuICAgIHRoaXMubW9kZWxDbGFzcyA9IG51bGwgLy8gVG8gYmUgZGVmaW5lZCBieSBzdWItY2xhc3Nlc1xuICAgIHRoaXMuaXNPbmVUb09uZSA9IGZhbHNlXG4gICAgdGhpcy5yZWxhdGUgPSBmYWxzZVxuICAgIHRoaXMudW5yZWxhdGUgPSBmYWxzZVxuICB9XG5cbiAgc2V0dXAoaXNSb290KSB7XG4gICAgc3VwZXIuc2V0dXAoaXNSb290LCBmYWxzZSlcbiAgICB0aGlzLmlkUGFyYW0gPSB0aGlzLmxldmVsID8gYGlkJHt0aGlzLmxldmVsfWAgOiAnaWQnXG4gICAgdGhpcy5ncmFwaCA9ICEhdGhpcy5ncmFwaFxuICAgIHRoaXMudHJhbnNhY3RlZCA9ICEhdGhpcy50cmFuc2FjdGVkXG4gICAgdGhpcy5zY29wZSA9IHRoaXMuc2NvcGUgfHwgbnVsbFxuICAgIHRoaXMuY29sbGVjdGlvbiA9IHRoaXMuc2V0dXBBY3Rpb25zKCdjb2xsZWN0aW9uJylcbiAgICB0aGlzLm1lbWJlciA9IHRoaXMuaXNPbmVUb09uZSA/IHt9IDogdGhpcy5zZXR1cEFjdGlvbnMoJ21lbWJlcicpXG4gICAgLy8gQ3JlYXRlIGEgZHVtbXkgbW9kZWwgaW5zdGFuY2UgdG8gdmFsaWRhdGUgdGhlIHJlcXVlc3RlZCBpZCBhZ2FpbnN0LlxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuZXctY2FwXG4gICAgdGhpcy5pZFZhbGlkYXRvciA9IG5ldyB0aGlzLm1vZGVsQ2xhc3MoKVxuICB9XG5cbiAgLy8gQG92ZXJyaWRlXG4gIHNldHVwQWN0aW9uKHR5cGUsIGFjdGlvbnMsIG5hbWUsIGhhbmRsZXIsIGF1dGhvcml6ZSwgdmVyYiwgcGF0aCkge1xuICAgIC8vIFRoZXNlIGRlZmF1bHQgYWN0aW9ucyBoYXBwZW4gZGlyZWN0bHkgb24gdGhlIGNvbGxlY3Rpb24gLyBtZW1iZXIgcm91dGVcbiAgICAvLyBhbmQgYXJlIGRpc3Rpbmd1aXNoZWQgYnkgdGhlaXIgdmVyYnMsIG5vdCBieSBuZXN0ZWQgcGF0aHMuXG4gICAgaWYgKG5hbWUgaW4gYWN0aW9uVG9WZXJiKSB7XG4gICAgICB2ZXJiID0gYWN0aW9uVG9WZXJiW25hbWVdXG4gICAgICBwYXRoID0gJydcbiAgICB9XG4gICAgcmV0dXJuIHN1cGVyLnNldHVwQWN0aW9uKFxuICAgICAgdHlwZSwgYWN0aW9ucywgbmFtZSwgaGFuZGxlciwgYXV0aG9yaXplLCB2ZXJiLCBwYXRoXG4gICAgKVxuICB9XG5cbiAgLy8gQG92ZXJyaWRlXG4gIHNldHVwQXNzZXRzKCkge1xuICAgIGNvbnN0IHsgbW9kZWxDbGFzcyB9ID0gdGhpc1xuICAgIGlmICh0aGlzLmFzc2V0cyA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5hc3NldHMgPSBtb2RlbENsYXNzLmRlZmluaXRpb24uYXNzZXRzIHx8IG51bGxcbiAgICB9IGVsc2UgaWYgKGlzT2JqZWN0KHRoaXMuYXNzZXRzKSkge1xuICAgICAgLy8gTWVyZ2UgaW4gdGhlIGFzc2V0cyBkZWZpbml0aW9uIGZyb20gdGhlIG1vZGVsIGludG8gdGhlIGFzc2V0cyBjb25maWcuXG4gICAgICAvLyBUaGF0IHdheSwgd2UgY2FuIHN0aWxsIHVzZSBgYWxsb3dgIGFuZCBgYXV0aG9yaXplYCB0byBjb250cm9sbCB0aGVcbiAgICAgIC8vIHVwbG9hZCBhY2Nlc3MsIHdoaWxlIGtlZXBpbmcgdGhlIGFzc2V0cyBkZWZpbml0aW9ucyBpbiBvbmUgY2VudHJhbFxuICAgICAgLy8gbG9jYXRpb24gb24gdGhlIG1vZGVsLlxuICAgICAgdGhpcy5hc3NldHMgPSB7XG4gICAgICAgIC4uLm1vZGVsQ2xhc3MuZGVmaW5pdGlvbi5hc3NldHMsXG4gICAgICAgIC4uLnRoaXMuYXNzZXRzXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYXNzZXRzID0gbnVsbFxuICAgIH1cbiAgICAvLyBOb3cgY2FsbCBgc3VwZXIuc2V0dXBBc3NldHMoKWAgd2hpY2ggcGVyZm9ybXMgdGhlIHVzdWFsIGluaGVyaXRhbmNlIC9cbiAgICAvLyBhbGxvdyAvIGF1dGhvcml6ZSB0cmlja3M6XG4gICAgcmV0dXJuIHN1cGVyLnNldHVwQXNzZXRzKClcbiAgfVxuXG4gIC8vIEBvdmVycmlkZVxuICBnZXRQYXRoKHR5cGUsIHBhdGgpIHtcbiAgICByZXR1cm4gdHlwZSA9PT0gJ21lbWJlcidcbiAgICAgID8gcGF0aCA/IGA6JHt0aGlzLmlkUGFyYW19LyR7cGF0aH1gIDogYDoke3RoaXMuaWRQYXJhbX1gXG4gICAgICA6IHBhdGhcbiAgfVxuXG4gIGV4dGVuZENvbnRleHQoY3R4LCBvYmplY3QpIHtcbiAgICAvLyBDcmVhdGUgYSBjb3B5IG9mIGBjdHhgIHRoYXQgaW5oZXJpdHMgZnJvbSB0aGUgcmVhbCBvbmUsIGJ1dCBvdmVycmlkZXNcbiAgICAvLyBzb21lIHByb3BlcnRpZXMgd2l0aCB0aGUgb25lcyBmcm9tIHRoZSBwYXNzZWQgYG9iamVjdGAuXG4gICAgcmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZihvYmplY3QsIGN0eClcbiAgfVxuXG4gIGdldE1lbWJlcklkKGN0eCkge1xuICAgIHJldHVybiB0aGlzLnZhbGlkYXRlSWQoY3R4LnBhcmFtc1t0aGlzLmlkUGFyYW1dKVxuICB9XG5cbiAgZ2V0Q29udGV4dFdpdGhNZW1iZXJJZChjdHgsIG1lbWJlcklkID0gdGhpcy5nZXRNZW1iZXJJZChjdHgpKSB7XG4gICAgcmV0dXJuIHRoaXMuZXh0ZW5kQ29udGV4dChjdHgsIHsgbWVtYmVySWQgfSlcbiAgfVxuXG4gIGdldENvbGxlY3Rpb25JZHMoY3R4KSB7XG4gICAgY29uc3QgaWRQcm9wZXJ0eSA9IHRoaXMubW9kZWxDbGFzcy5nZXRJZFByb3BlcnR5KClcbiAgICAvLyBIYW5kbGUgYm90aCBjb21wb3NpdGUga2V5cyBhbmQgbm9ybWFsIG9uZXMuXG4gICAgY29uc3QgZ2V0SWQgPSBpc0FycmF5KGlkUHJvcGVydHkpXG4gICAgICA/IG1vZGVsID0+IGlkUHJvcGVydHkucmVkdWNlKFxuICAgICAgICAoaWQsIGtleSkgPT4ge1xuICAgICAgICAgIGlkLnB1c2gobW9kZWxba2V5XSlcbiAgICAgICAgICByZXR1cm4gaWRcbiAgICAgICAgfSwgW10pXG4gICAgICA6IG1vZGVsID0+IG1vZGVsW2lkUHJvcGVydHldXG4gICAgcmV0dXJuIGFzQXJyYXkoY3R4LnJlcXVlc3QuYm9keSkubWFwKG1vZGVsID0+IHRoaXMudmFsaWRhdGVJZChnZXRJZChtb2RlbCkpKVxuICB9XG5cbiAgZ2V0SWRzKGN0eCkge1xuICAgIC8vIFJldHVybnMgdGhlIG1vZGVsIGlkcyB0aGF0IHRoaXMgcmVxdWVzdCBjb25jZXJucywgcmVhZCBmcm9tIHRoZSBwYXJhbVxuICAgIC8vIGZvciBtZW1iZXIgaWRzLCBhbmQgZnJvbSB0aGUgcGF5bG9hZCBmb3IgY29sbGVjdGlvbiBpZHM6XG4gICAgY29uc3QgeyB0eXBlIH0gPSBjdHguYWN0aW9uXG4gICAgcmV0dXJuIHR5cGUgPT09ICdtZW1iZXInID8gW3RoaXMuZ2V0TWVtYmVySWQoY3R4KV1cbiAgICAgIDogdHlwZSA9PT0gJ2NvbGxlY3Rpb24nID8gdGhpcy5nZXRDb2xsZWN0aW9uSWRzKGN0eClcbiAgICAgIDogW11cbiAgfVxuXG4gIHZhbGlkYXRlSWQoaWQpIHtcbiAgICBjb25zdCByZWZlcmVuY2UgPSB0aGlzLm1vZGVsQ2xhc3MuZ2V0UmVmZXJlbmNlKGlkKVxuICAgIC8vIFRoaXMgdmFsaWRhdGVzIGFuZCBjb2VyY2VzIGF0IHRoZSBzYW1lIHRpbWUsIHNvIGV4dHJhY3QgdGhlIGNvZXJjZWQgaWRcbiAgICAvLyBmcm9tIGByZWZlcmVuY2VgIGFnYWluIGFmdGVyd2FyZHMuXG4gICAgdGhpcy5pZFZhbGlkYXRvci4kdmFsaWRhdGUocmVmZXJlbmNlLCB7XG4gICAgICBjb2VyY2VUeXBlczogdHJ1ZSxcbiAgICAgIHBhdGNoOiB0cnVlXG4gICAgfSlcbiAgICBjb25zdCB2YWx1ZXMgPSBPYmplY3QudmFsdWVzKHJlZmVyZW5jZSlcbiAgICByZXR1cm4gdmFsdWVzLmxlbmd0aCA+IDEgPyB2YWx1ZXMgOiB2YWx1ZXNbMF1cbiAgfVxuXG4gIGFzeW5jIGdldE1lbWJlcihcbiAgICBjdHgsXG4gICAgYmFzZSA9IHRoaXMsXG4gICAgeyBxdWVyeSA9IHt9LCBtb2RpZnkgPSBudWxsLCBmb3JVcGRhdGUgPSBmYWxzZSB9ID0ge31cbiAgKSB7XG4gICAgcmV0dXJuIHRoaXMubWVtYmVyLmZpbmQuY2FsbChcbiAgICAgIHRoaXMsXG4gICAgICAvLyBFeHRlbmQgYGN0eGAgd2l0aCBhIG5ldyBgcXVlcnlgIG9iamVjdCwgd2hpbGUgaW5oZXJpdGluZyB0aGUgcm91dGVcbiAgICAgIC8vIHBhcmFtcyBpbiBgY3R4LnBhcmFtc2AsIHNvIGZpbmluZyB0aGUgbWVtYmVyIGJ5IGlkIHN0aWxsIHdvcmtzLlxuICAgICAgdGhpcy5leHRlbmRDb250ZXh0KGN0eCwgeyBxdWVyeSB9KSxcbiAgICAgIChxdWVyeSwgdHJ4KSA9PiB7XG4gICAgICAgIHRoaXMuc2V0dXBRdWVyeShxdWVyeSwgYmFzZSlcbiAgICAgICAgcXVlcnkubW9kaWZ5KG1vZGlmeSlcbiAgICAgICAgaWYgKGZvclVwZGF0ZSkge1xuICAgICAgICAgIGlmICghdHJ4KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgQ29udHJvbGxlckVycm9yKFxuICAgICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgICAnVXNpbmcgYGZvclVwZGF0ZSgpYCB3aXRob3V0IGEgdHJhbnNhY3Rpb24gaXMgaW52YWxpZCdcbiAgICAgICAgICAgIClcbiAgICAgICAgICB9XG4gICAgICAgICAgcXVlcnkuZm9yVXBkYXRlKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIClcbiAgfVxuXG4gIHF1ZXJ5KHRyeCkge1xuICAgIHJldHVybiB0aGlzLnNldHVwUXVlcnkodGhpcy5tb2RlbENsYXNzLnF1ZXJ5KHRyeCkpXG4gIH1cblxuICBzZXR1cFF1ZXJ5KHF1ZXJ5LCBiYXNlID0gdGhpcykge1xuICAgIGNvbnN0IHsgc2NvcGUgfSA9IGJhc2VcbiAgICBjb25zdCB7IGFsbG93U2NvcGUsIGFsbG93RmlsdGVyIH0gPSB0aGlzXG5cbiAgICBjb25zdCBhc0FsbG93QXJyYXkgPSB2YWx1ZSA9PiB2YWx1ZSA9PT0gZmFsc2UgPyBbXSA6IGFzQXJyYXkodmFsdWUpXG5cbiAgICBpZiAoYWxsb3dTY29wZSAhPT0gdW5kZWZpbmVkICYmIGFsbG93U2NvcGUgIT09IHRydWUpIHtcbiAgICAgIHF1ZXJ5LmFsbG93U2NvcGUoXG4gICAgICAgIC4uLmFzQWxsb3dBcnJheShhbGxvd1Njb3BlKSxcbiAgICAgICAgLy8gQWxzbyBpbmNsdWRlIHRoZSBzY29wZXMgZGVmaW5lZCBieSBzY29wZSBzbyB0aGVzZSBjYW4gcGFzcyB0aHJvdWdoLlxuICAgICAgICAuLi5hc0FycmF5KHNjb3BlKVxuICAgICAgKVxuICAgIH1cbiAgICBpZiAoYWxsb3dGaWx0ZXIgIT09IHVuZGVmaW5lZCAmJiBhbGxvd0ZpbHRlciAhPT0gdHJ1ZSkge1xuICAgICAgcXVlcnkuYWxsb3dGaWx0ZXIoLi4uYXNBbGxvd0FycmF5KGFsbG93RmlsdGVyKSlcbiAgICB9XG4gICAgaWYgKHNjb3BlKSB7XG4gICAgICBxdWVyeS53aXRoU2NvcGUoLi4uYXNBcnJheShzY29wZSkpXG4gICAgfVxuICAgIHJldHVybiBxdWVyeVxuICB9XG5cbiAgYXN5bmMgZXhlY3V0ZSgvKiBjdHgsIGV4ZWN1dGUocXVlcnksIHRyeCkge30gKi8pIHtcbiAgICAvLyBEb2VzIG5vdGhpbmcgaW4gYmFzZSBjbGFzcy5cbiAgICAvLyBPdmVycmlkZXMgYXJlIGluIE1vZGVsQ29udHJvbGxlciBhbmQgUmVsYXRpb25Db250cm9sbGVyLlxuICB9XG5cbiAgYXN5bmMgZXhlY3V0ZUFuZEZldGNoKGFjdGlvbiwgY3R4LCBtb2RpZnksIGJvZHkgPSBjdHgucmVxdWVzdC5ib2R5KSB7XG4gICAgY29uc3QgbmFtZSA9IGAke2FjdGlvbn0ke3RoaXMuZ3JhcGggPyAnRGl0b0dyYXBoJyA6ICcnfUFuZEZldGNoYFxuICAgIHJldHVybiB0aGlzLmV4ZWN1dGUoY3R4LCAocXVlcnksIHRyeCkgPT5cbiAgICAgIHF1ZXJ5W25hbWVdKGJvZHkpXG4gICAgICAgIC5tb2RpZnkoZ2V0TW9kaWZ5KG1vZGlmeSwgdHJ4KSlcbiAgICApXG4gIH1cblxuICBhc3luYyBleGVjdXRlQW5kRmV0Y2hCeUlkKGFjdGlvbiwgY3R4LCBtb2RpZnksIGJvZHkgPSBjdHgucmVxdWVzdC5ib2R5KSB7XG4gICAgY29uc3QgbmFtZSA9IGAke2FjdGlvbn0ke3RoaXMuZ3JhcGggPyAnRGl0b0dyYXBoJyA6ICcnfUFuZEZldGNoQnlJZGBcbiAgICByZXR1cm4gdGhpcy5leGVjdXRlKGN0eCwgKHF1ZXJ5LCB0cngpID0+XG4gICAgICBxdWVyeVtuYW1lXShjdHgubWVtYmVySWQsIGJvZHkpXG4gICAgICAgIC50aHJvd0lmTm90Rm91bmQoKVxuICAgICAgICAubW9kaWZ5KGdldE1vZGlmeShtb2RpZnksIHRyeCkpXG4gICAgKVxuICB9XG5cbiAgdG9Db3JlQWN0aW9ucyhhY3Rpb25zKSB7XG4gICAgLy8gTWFyayBhY3Rpb24gb2JqZWN0IGFuZCBtZXRob2RzIGFzIGNvcmUsIHNvIGBDb250cm9sbGVyLnByb2Nlc3NWYWx1ZXMoKWBcbiAgICAvLyBjYW4gZmlsdGVyIGNvcnJlY3RseS5cbiAgICBmb3IgKGNvbnN0IGFjdGlvbiBvZiBPYmplY3QudmFsdWVzKGFjdGlvbnMpKSB7XG4gICAgICAvLyBNYXJrIGFjdGlvbiBmdW5jdGlvbnMgYWxzbywgc28gQ29udHJvbGxlckFjdGlvbiBjYW4gdXNlIGl0IHRvIGRldGVybWluZVxuICAgICAgLy8gdmFsdWUgZm9yIGB0cmFuc2FjdGVkYC5cbiAgICAgIGFjdGlvbi5jb3JlID0gdHJ1ZVxuICAgIH1cbiAgICBhY3Rpb25zLiRjb3JlID0gdHJ1ZVxuICAgIHJldHVybiBhY3Rpb25zXG4gIH1cblxuICBjb2xsZWN0aW9uID0gdGhpcy50b0NvcmVBY3Rpb25zKHtcbiAgICBhc3luYyBmaW5kKGN0eCwgbW9kaWZ5KSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmV4ZWN1dGUoY3R4LCAocXVlcnksIHRyeCkgPT4ge1xuICAgICAgICBxdWVyeS5maW5kKGN0eC5xdWVyeSwgdGhpcy5hbGxvd1BhcmFtKS5tb2RpZnkoZ2V0TW9kaWZ5KG1vZGlmeSwgdHJ4KSlcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNPbmVUb09uZSA/IHF1ZXJ5LmZpcnN0KCkgOiBxdWVyeVxuICAgICAgfSlcbiAgICAgIC8vIFRoaXMgbWV0aG9kIGRvZXNuJ3QgYWx3YXlzIHJldHVybiBhbiBhcnJheTpcbiAgICAgIC8vIEZvciBSZWxhdGlvbkNvbnRyb2xsZXJzIHdoZXJlIGBpc09uZVRvT25lYCBpcyB0cnVlLCBpdCBjYW4gcmV0dXJuXG4gICAgICAvLyBgdW5kZWZpbmVkYC4gQ2FzdCB0byBgbnVsbGAgZm9yIHN1Y2ggY2FzZXM6XG4gICAgICByZXR1cm4gcmVzdWx0IHx8IG51bGxcbiAgICB9LFxuXG4gICAgYXN5bmMgZGVsZXRlKGN0eCwgbW9kaWZ5KSB7XG4gICAgICBjb25zdCBjb3VudCA9IGF3YWl0IHRoaXMuZXhlY3V0ZShjdHgsIChxdWVyeSwgdHJ4KSA9PiBxdWVyeVxuICAgICAgICAuaWdub3JlU2NvcGUoKVxuICAgICAgICAuZmluZChjdHgucXVlcnksIHRoaXMuYWxsb3dQYXJhbSlcbiAgICAgICAgLm1vZGlmeShxdWVyeSA9PiB0aGlzLmlzT25lVG9PbmUgJiYgcXVlcnkudGhyb3dJZk5vdEZvdW5kKCkpXG4gICAgICAgIC5tb2RpZnkoZ2V0TW9kaWZ5KG1vZGlmeSwgdHJ4KSlcbiAgICAgICAgLm1vZGlmeShxdWVyeSA9PiB0aGlzLnVucmVsYXRlID8gcXVlcnkudW5yZWxhdGUoKSA6IHF1ZXJ5LmRlbGV0ZSgpKVxuICAgICAgKVxuICAgICAgcmV0dXJuIHsgY291bnQgfVxuICAgIH0sXG5cbiAgICBhc3luYyBpbnNlcnQoY3R4LCBtb2RpZnkpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMucmVsYXRlXG4gICAgICAgIC8vIFVzZSBwYXRjaERpdG9HcmFwaEFuZEZldGNoKCkgdG8gaGFuZGxlIHJlbGF0ZXMgZm9yIHVzLlxuICAgICAgICA/IGF3YWl0IHRoaXMuZXhlY3V0ZShjdHgsIChxdWVyeSwgdHJ4KSA9PiBxdWVyeVxuICAgICAgICAgIC5wYXRjaERpdG9HcmFwaEFuZEZldGNoKGN0eC5yZXF1ZXN0LmJvZHksIHsgcmVsYXRlOiB0cnVlIH0pXG4gICAgICAgICAgLm1vZGlmeShnZXRNb2RpZnkobW9kaWZ5LCB0cngpKVxuICAgICAgICApXG4gICAgICAgIDogYXdhaXQgdGhpcy5leGVjdXRlQW5kRmV0Y2goJ2luc2VydCcsIGN0eCwgbW9kaWZ5KVxuICAgICAgY3R4LnN0YXR1cyA9IDIwMVxuICAgICAgaWYgKGlzT2JqZWN0KHJlc3VsdCkpIHtcbiAgICAgICAgY3R4LnNldCgnTG9jYXRpb24nLCB0aGlzLmdldFVybCgnY29sbGVjdGlvbicsIHJlc3VsdC5pZCkpXG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0XG4gICAgfSxcblxuICAgIGFzeW5jIHVwZGF0ZShjdHgsIG1vZGlmeSkge1xuICAgICAgcmV0dXJuIHRoaXMuZXhlY3V0ZUFuZEZldGNoKCd1cGRhdGUnLCBjdHgsIG1vZGlmeSlcbiAgICB9LFxuXG4gICAgYXN5bmMgcGF0Y2goY3R4LCBtb2RpZnkpIHtcbiAgICAgIHJldHVybiB0aGlzLmV4ZWN1dGVBbmRGZXRjaCgncGF0Y2gnLCBjdHgsIG1vZGlmeSlcbiAgICB9XG4gIH0pXG5cbiAgbWVtYmVyID0gdGhpcy50b0NvcmVBY3Rpb25zKHtcbiAgICBhc3luYyBmaW5kKGN0eCwgbW9kaWZ5KSB7XG4gICAgICByZXR1cm4gdGhpcy5leGVjdXRlKGN0eCwgKHF1ZXJ5LCB0cngpID0+IHF1ZXJ5XG4gICAgICAgIC5maW5kQnlJZChjdHgubWVtYmVySWQpXG4gICAgICAgIC5maW5kKGN0eC5xdWVyeSwgdGhpcy5hbGxvd1BhcmFtKVxuICAgICAgICAudGhyb3dJZk5vdEZvdW5kKClcbiAgICAgICAgLm1vZGlmeShnZXRNb2RpZnkobW9kaWZ5LCB0cngpKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGUoY3R4LCBtb2RpZnkpIHtcbiAgICAgIGNvbnN0IGNvdW50ID0gYXdhaXQgdGhpcy5leGVjdXRlKGN0eCwgKHF1ZXJ5LCB0cngpID0+IHF1ZXJ5XG4gICAgICAgIC5pZ25vcmVTY29wZSgpXG4gICAgICAgIC5maW5kQnlJZChjdHgubWVtYmVySWQpXG4gICAgICAgIC5maW5kKGN0eC5xdWVyeSwgdGhpcy5hbGxvd1BhcmFtKVxuICAgICAgICAudGhyb3dJZk5vdEZvdW5kKClcbiAgICAgICAgLm1vZGlmeShnZXRNb2RpZnkobW9kaWZ5LCB0cngpKVxuICAgICAgICAubW9kaWZ5KHF1ZXJ5ID0+IHRoaXMudW5yZWxhdGUgPyBxdWVyeS51bnJlbGF0ZSgpIDogcXVlcnkuZGVsZXRlKCkpXG4gICAgICApXG4gICAgICByZXR1cm4geyBjb3VudCB9XG4gICAgfSxcblxuICAgIGFzeW5jIHVwZGF0ZShjdHgsIG1vZGlmeSkge1xuICAgICAgcmV0dXJuIHRoaXMuZXhlY3V0ZUFuZEZldGNoQnlJZCgndXBkYXRlJywgY3R4LCBtb2RpZnkpXG4gICAgfSxcblxuICAgIGFzeW5jIHBhdGNoKGN0eCwgbW9kaWZ5KSB7XG4gICAgICByZXR1cm4gdGhpcy5leGVjdXRlQW5kRmV0Y2hCeUlkKCdwYXRjaCcsIGN0eCwgbW9kaWZ5KVxuICAgIH1cbiAgfSlcbn1cblxuZnVuY3Rpb24gZ2V0TW9kaWZ5KG1vZGlmeSwgdHJ4KSB7XG4gIHJldHVybiBtb2RpZnlcbiAgICA/IHF1ZXJ5ID0+IG1vZGlmeShxdWVyeSwgdHJ4KVxuICAgIDogbnVsbFxufVxuXG5jb25zdCBhY3Rpb25Ub1ZlcmIgPSB7XG4gIGZpbmQ6ICdnZXQnLFxuICBkZWxldGU6ICdkZWxldGUnLFxuICBpbnNlcnQ6ICdwb3N0JyxcbiAgdXBkYXRlOiAncHV0JyxcbiAgcGF0Y2g6ICdwYXRjaCdcbn1cbiJdfQ==
|
|
263
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250cm9sbGVycy9Db2xsZWN0aW9uQ29udHJvbGxlci5qcyJdLCJuYW1lcyI6WyJDb2xsZWN0aW9uQ29udHJvbGxlciIsIkNvbnRyb2xsZXIiLCJjb25zdHJ1Y3RvciIsImFwcCIsIm5hbWVzcGFjZSIsImNvbGxlY3Rpb24iLCJ0b0NvcmVBY3Rpb25zIiwiZmluZCIsImN0eCIsIm1vZGlmeSIsInJlc3VsdCIsImV4ZWN1dGUiLCJxdWVyeSIsInRyeCIsImFsbG93UGFyYW0iLCJnZXRNb2RpZnkiLCJpc09uZVRvT25lIiwiZmlyc3QiLCJkZWxldGUiLCJjb3VudCIsImlnbm9yZVNjb3BlIiwidGhyb3dJZk5vdEZvdW5kIiwidW5yZWxhdGUiLCJpbnNlcnQiLCJyZWxhdGUiLCJwYXRjaERpdG9HcmFwaEFuZEZldGNoIiwicmVxdWVzdCIsImJvZHkiLCJleGVjdXRlQW5kRmV0Y2giLCJzdGF0dXMiLCJzZXQiLCJnZXRVcmwiLCJpZCIsInVwZGF0ZSIsInBhdGNoIiwibWVtYmVyIiwiZmluZEJ5SWQiLCJtZW1iZXJJZCIsImV4ZWN1dGVBbmRGZXRjaEJ5SWQiLCJtb2RlbENsYXNzIiwic2V0dXAiLCJpc1Jvb3QiLCJpZFBhcmFtIiwibGV2ZWwiLCJncmFwaCIsInRyYW5zYWN0ZWQiLCJzY29wZSIsInNldHVwQWN0aW9ucyIsImlkVmFsaWRhdG9yIiwic2V0dXBBY3Rpb24iLCJ0eXBlIiwiYWN0aW9ucyIsIm5hbWUiLCJoYW5kbGVyIiwiYXV0aG9yaXplIiwidmVyYiIsInBhdGgiLCJhY3Rpb25Ub1ZlcmIiLCJzZXR1cEFzc2V0cyIsImFzc2V0cyIsImRlZmluaXRpb24iLCJnZXRQYXRoIiwiZXh0ZW5kQ29udGV4dCIsIm9iamVjdCIsIk9iamVjdCIsInNldFByb3RvdHlwZU9mIiwiZ2V0TWVtYmVySWQiLCJ2YWxpZGF0ZUlkIiwicGFyYW1zIiwiZ2V0Q29udGV4dFdpdGhNZW1iZXJJZCIsImdldENvbGxlY3Rpb25JZHMiLCJpZFByb3BlcnR5IiwiZ2V0SWRQcm9wZXJ0eSIsImdldElkIiwibW9kZWwiLCJyZWR1Y2UiLCJrZXkiLCJwdXNoIiwibWFwIiwiZ2V0SWRzIiwiYWN0aW9uIiwicmVmZXJlbmNlIiwiZ2V0UmVmZXJlbmNlIiwiJHZhbGlkYXRlIiwiY29lcmNlVHlwZXMiLCJ2YWx1ZXMiLCJsZW5ndGgiLCJnZXRNZW1iZXIiLCJiYXNlIiwiZm9yVXBkYXRlIiwiY2FsbCIsInNldHVwUXVlcnkiLCJDb250cm9sbGVyRXJyb3IiLCJhbGxvd1Njb3BlIiwiYWxsb3dGaWx0ZXIiLCJhc0FsbG93QXJyYXkiLCJ2YWx1ZSIsInVuZGVmaW5lZCIsIndpdGhTY29wZSIsImNvcmUiLCIkY29yZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUdPLE1BQU1BLG9CQUFOLFNBQW1DQyxzQkFBbkMsQ0FBOEM7QUFDbkRDLEVBQUFBLFdBQVcsQ0FBQ0MsR0FBRCxFQUFNQyxTQUFOLEVBQWlCO0FBQzFCLFVBQU1ELEdBQU4sRUFBV0MsU0FBWDtBQUQwQixTQXFNNUJDLFVBck00QixHQXFNZixLQUFLQyxhQUFMLENBQW1CO0FBQzlCLFlBQU1DLElBQU4sQ0FBV0MsR0FBWCxFQUFnQkMsTUFBaEIsRUFBd0I7QUFDdEIsY0FBTUMsTUFBTSxHQUFHLE1BQU0sS0FBS0MsT0FBTCxDQUFhSCxHQUFiLEVBQWtCLENBQUNJLEtBQUQsRUFBUUMsR0FBUixLQUFnQjtBQUNyREQsVUFBQUEsS0FBSyxDQUFDTCxJQUFOLENBQVdDLEdBQUcsQ0FBQ0ksS0FBZixFQUFzQixLQUFLRSxVQUEzQixFQUF1Q0wsTUFBdkMsQ0FBOENNLFNBQVMsQ0FBQ04sTUFBRCxFQUFTSSxHQUFULENBQXZEO0FBQ0EsaUJBQU8sS0FBS0csVUFBTCxHQUFrQkosS0FBSyxDQUFDSyxLQUFOLEVBQWxCLEdBQWtDTCxLQUF6QztBQUNELFNBSG9CLENBQXJCO0FBT0EsZUFBT0YsTUFBTSxJQUFJLElBQWpCO0FBQ0QsT0FWNkI7O0FBWTlCLFlBQU1RLE1B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LEdBQWEsV0FBYixHQUEyQixFQUFHLGNBQXZEO0FBQ0EsV0FBTyxLQUFLakMsT0FBTCxDQUFhSCxHQUFiLEVBQWtCLENBQUNJLEtBQUQsRUFBUUMsR0FBUixLQUN2QkQsS0FBSyxDQUFDd0MsSUFBRCxDQUFMLENBQVk1QyxHQUFHLENBQUM2QixRQUFoQixFQUEwQlYsSUFBMUIsRUFDR04sZUFESCxHQUVHWixNQUZILENBRVVNLFNBQVMsQ0FBQ04sTUFBRCxFQUFTSSxHQUFULENBRm5CLENBREssQ0FBUDtBQUtEOztBQUVEUCxFQUFBQSxhQUFhLENBQUM2QyxPQUFELEVBQVU7QUFHckIsU0FBSyxNQUFNNkIsTUFBWCxJQUFxQmhCLE1BQU0sQ0FBQ3FCLE1BQVAsQ0FBY2xDLE9BQWQsQ0FBckIsRUFBNkM7QUFHM0M2QixNQUFBQSxNQUFNLENBQUNtQixJQUFQLEdBQWMsSUFBZDtBQUNEOztBQUNEaEQsSUFBQUEsT0FBTyxDQUFDaUQsS0FBUixHQUFnQixJQUFoQjtBQUNBLFdBQU9qRCxPQUFQO0FBQ0Q7O0FBcE1rRDs7OztBQXFSckQsU0FBU3BDLFNBQVQsQ0FBbUJOLE1BQW5CLEVBQTJCSSxHQUEzQixFQUFnQztBQUM5QixTQUFPSixNQUFNLEdBQ1RHLEtBQUssSUFBSUgsTUFBTSxDQUFDRyxLQUFELEVBQVFDLEdBQVIsQ0FETixHQUVULElBRko7QUFHRDs7QUFFRCxNQUFNNEMsWUFBWSxHQUFHO0FBQ25CbEQsRUFBQUEsSUFBSSxFQUFFLEtBRGE7QUFFbkJXLEVBQUFBLE1BQU0sRUFBRSxRQUZXO0FBR25CSyxFQUFBQSxNQUFNLEVBQUUsTUFIVztBQUluQlUsRUFBQUEsTUFBTSxFQUFFLEtBSlc7QUFLbkJDLEVBQUFBLEtBQUssRUFBRTtBQUxZLENBQXJCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29udHJvbGxlciB9IGZyb20gJy4vQ29udHJvbGxlcidcbmltcG9ydCB7IENvbnRyb2xsZXJFcnJvciB9IGZyb20gJ0AvZXJyb3JzJ1xuaW1wb3J0IHsgaXNPYmplY3QsIGlzQXJyYXksIGFzQXJyYXkgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBBYnN0cmFjdCBiYXNlIGNsYXNzIGZvciBNb2RlbENvbnRyb2xsZXIgYW5kIFJlbGF0aW9uQ29udHJvbGxlclxuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25Db250cm9sbGVyIGV4dGVuZHMgQ29udHJvbGxlciB7XG4gIGNvbnN0cnVjdG9yKGFwcCwgbmFtZXNwYWNlKSB7XG4gICAgc3VwZXIoYXBwLCBuYW1lc3BhY2UpXG4gICAgdGhpcy5tb2RlbENsYXNzID0gbnVsbCAvLyBUbyBiZSBkZWZpbmVkIGJ5IHN1Yi1jbGFzc2VzXG4gICAgdGhpcy5pc09uZVRvT25lID0gZmFsc2VcbiAgICB0aGlzLnJlbGF0ZSA9IGZhbHNlXG4gICAgdGhpcy51bnJlbGF0ZSA9IGZhbHNlXG4gIH1cblxuICBzZXR1cChpc1Jvb3QpIHtcbiAgICBzdXBlci5zZXR1cChpc1Jvb3QsIGZhbHNlKVxuICAgIHRoaXMuaWRQYXJhbSA9IHRoaXMubGV2ZWwgPyBgaWQke3RoaXMubGV2ZWx9YCA6ICdpZCdcbiAgICB0aGlzLmdyYXBoID0gISF0aGlzLmdyYXBoXG4gICAgdGhpcy50cmFuc2FjdGVkID0gISF0aGlzLnRyYW5zYWN0ZWRcbiAgICB0aGlzLnNjb3BlID0gdGhpcy5zY29wZSB8fCBudWxsXG4gICAgdGhpcy5jb2xsZWN0aW9uID0gdGhpcy5zZXR1cEFjdGlvbnMoJ2NvbGxlY3Rpb24nKVxuICAgIHRoaXMubWVtYmVyID0gdGhpcy5pc09uZVRvT25lID8ge30gOiB0aGlzLnNldHVwQWN0aW9ucygnbWVtYmVyJylcbiAgICAvLyBDcmVhdGUgYSBkdW1teSBtb2RlbCBpbnN0YW5jZSB0byB2YWxpZGF0ZSB0aGUgcmVxdWVzdGVkIGlkIGFnYWluc3QuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5ldy1jYXBcbiAgICB0aGlzLmlkVmFsaWRhdG9yID0gbmV3IHRoaXMubW9kZWxDbGFzcygpXG4gIH1cblxuICAvLyBAb3ZlcnJpZGVcbiAgc2V0dXBBY3Rpb24odHlwZSwgYWN0aW9ucywgbmFtZSwgaGFuZGxlciwgYXV0aG9yaXplLCB2ZXJiLCBwYXRoKSB7XG4gICAgLy8gVGhlc2UgZGVmYXVsdCBhY3Rpb25zIGhhcHBlbiBkaXJlY3RseSBvbiB0aGUgY29sbGVjdGlvbiAvIG1lbWJlciByb3V0ZVxuICAgIC8vIGFuZCBhcmUgZGlzdGluZ3Vpc2hlZCBieSB0aGVpciB2ZXJicywgbm90IGJ5IG5lc3RlZCBwYXRocy5cbiAgICBpZiAobmFtZSBpbiBhY3Rpb25Ub1ZlcmIpIHtcbiAgICAgIHZlcmIgPSBhY3Rpb25Ub1ZlcmJbbmFtZV1cbiAgICAgIHBhdGggPSAnJ1xuICAgIH1cbiAgICByZXR1cm4gc3VwZXIuc2V0dXBBY3Rpb24oXG4gICAgICB0eXBlLCBhY3Rpb25zLCBuYW1lLCBoYW5kbGVyLCBhdXRob3JpemUsIHZlcmIsIHBhdGhcbiAgICApXG4gIH1cblxuICAvLyBAb3ZlcnJpZGVcbiAgc2V0dXBBc3NldHMoKSB7XG4gICAgY29uc3QgeyBtb2RlbENsYXNzIH0gPSB0aGlzXG4gICAgaWYgKHRoaXMuYXNzZXRzID09PSB0cnVlKSB7XG4gICAgICB0aGlzLmFzc2V0cyA9IG1vZGVsQ2xhc3MuZGVmaW5pdGlvbi5hc3NldHMgfHwgbnVsbFxuICAgIH0gZWxzZSBpZiAoaXNPYmplY3QodGhpcy5hc3NldHMpKSB7XG4gICAgICAvLyBNZXJnZSBpbiB0aGUgYXNzZXRzIGRlZmluaXRpb24gZnJvbSB0aGUgbW9kZWwgaW50byB0aGUgYXNzZXRzIGNvbmZpZy5cbiAgICAgIC8vIFRoYXQgd2F5LCB3ZSBjYW4gc3RpbGwgdXNlIGBhbGxvd2AgYW5kIGBhdXRob3JpemVgIHRvIGNvbnRyb2xsIHRoZVxuICAgICAgLy8gdXBsb2FkIGFjY2Vzcywgd2hpbGUga2VlcGluZyB0aGUgYXNzZXRzIGRlZmluaXRpb25zIGluIG9uZSBjZW50cmFsXG4gICAgICAvLyBsb2NhdGlvbiBvbiB0aGUgbW9kZWwuXG4gICAgICB0aGlzLmFzc2V0cyA9IHtcbiAgICAgICAgLi4ubW9kZWxDbGFzcy5kZWZpbml0aW9uLmFzc2V0cyxcbiAgICAgICAgLi4udGhpcy5hc3NldHNcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hc3NldHMgPSBudWxsXG4gICAgfVxuICAgIC8vIE5vdyBjYWxsIGBzdXBlci5zZXR1cEFzc2V0cygpYCB3aGljaCBwZXJmb3JtcyB0aGUgdXN1YWwgaW5oZXJpdGFuY2UgL1xuICAgIC8vIGFsbG93IC8gYXV0aG9yaXplIHRyaWNrczpcbiAgICByZXR1cm4gc3VwZXIuc2V0dXBBc3NldHMoKVxuICB9XG5cbiAgLy8gQG92ZXJyaWRlXG4gIGdldFBhdGgodHlwZSwgcGF0aCkge1xuICAgIHJldHVybiB0eXBlID09PSAnbWVtYmVyJ1xuICAgICAgPyBwYXRoID8gYDoke3RoaXMuaWRQYXJhbX0vJHtwYXRofWAgOiBgOiR7dGhpcy5pZFBhcmFtfWBcbiAgICAgIDogcGF0aFxuICB9XG5cbiAgZXh0ZW5kQ29udGV4dChjdHgsIG9iamVjdCkge1xuICAgIC8vIENyZWF0ZSBhIGNvcHkgb2YgYGN0eGAgdGhhdCBpbmhlcml0cyBmcm9tIHRoZSByZWFsIG9uZSwgYnV0IG92ZXJyaWRlc1xuICAgIC8vIHNvbWUgcHJvcGVydGllcyB3aXRoIHRoZSBvbmVzIGZyb20gdGhlIHBhc3NlZCBgb2JqZWN0YC5cbiAgICByZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mKG9iamVjdCwgY3R4KVxuICB9XG5cbiAgZ2V0TWVtYmVySWQoY3R4KSB7XG4gICAgcmV0dXJuIHRoaXMudmFsaWRhdGVJZChjdHgucGFyYW1zW3RoaXMuaWRQYXJhbV0pXG4gIH1cblxuICBnZXRDb250ZXh0V2l0aE1lbWJlcklkKGN0eCwgbWVtYmVySWQgPSB0aGlzLmdldE1lbWJlcklkKGN0eCkpIHtcbiAgICByZXR1cm4gdGhpcy5leHRlbmRDb250ZXh0KGN0eCwgeyBtZW1iZXJJZCB9KVxuICB9XG5cbiAgZ2V0Q29sbGVjdGlvbklkcyhjdHgpIHtcbiAgICBjb25zdCBpZFByb3BlcnR5ID0gdGhpcy5tb2RlbENsYXNzLmdldElkUHJvcGVydHkoKVxuICAgIC8vIEhhbmRsZSBib3RoIGNvbXBvc2l0ZSBrZXlzIGFuZCBub3JtYWwgb25lcy5cbiAgICBjb25zdCBnZXRJZCA9IGlzQXJyYXkoaWRQcm9wZXJ0eSlcbiAgICAgID8gbW9kZWwgPT4gaWRQcm9wZXJ0eS5yZWR1Y2UoXG4gICAgICAgIChpZCwga2V5KSA9PiB7XG4gICAgICAgICAgaWQucHVzaChtb2RlbFtrZXldKVxuICAgICAgICAgIHJldHVybiBpZFxuICAgICAgICB9LCBbXSlcbiAgICAgIDogbW9kZWwgPT4gbW9kZWxbaWRQcm9wZXJ0eV1cbiAgICByZXR1cm4gYXNBcnJheShjdHgucmVxdWVzdC5ib2R5KS5tYXAobW9kZWwgPT4gdGhpcy52YWxpZGF0ZUlkKGdldElkKG1vZGVsKSkpXG4gIH1cblxuICBnZXRJZHMoY3R4KSB7XG4gICAgLy8gUmV0dXJucyB0aGUgbW9kZWwgaWRzIHRoYXQgdGhpcyByZXF1ZXN0IGNvbmNlcm5zLCByZWFkIGZyb20gdGhlIHBhcmFtXG4gICAgLy8gZm9yIG1lbWJlciBpZHMsIGFuZCBmcm9tIHRoZSBwYXlsb2FkIGZvciBjb2xsZWN0aW9uIGlkczpcbiAgICBjb25zdCB7IHR5cGUgfSA9IGN0eC5hY3Rpb25cbiAgICByZXR1cm4gdHlwZSA9PT0gJ21lbWJlcicgPyBbdGhpcy5nZXRNZW1iZXJJZChjdHgpXVxuICAgICAgOiB0eXBlID09PSAnY29sbGVjdGlvbicgPyB0aGlzLmdldENvbGxlY3Rpb25JZHMoY3R4KVxuICAgICAgOiBbXVxuICB9XG5cbiAgdmFsaWRhdGVJZChpZCkge1xuICAgIGNvbnN0IHJlZmVyZW5jZSA9IHRoaXMubW9kZWxDbGFzcy5nZXRSZWZlcmVuY2UoaWQpXG4gICAgLy8gVGhpcyB2YWxpZGF0ZXMgYW5kIGNvZXJjZXMgYXQgdGhlIHNhbWUgdGltZSwgc28gZXh0cmFjdCB0aGUgY29lcmNlZCBpZFxuICAgIC8vIGZyb20gYHJlZmVyZW5jZWAgYWdhaW4gYWZ0ZXJ3YXJkcy5cbiAgICB0aGlzLmlkVmFsaWRhdG9yLiR2YWxpZGF0ZShyZWZlcmVuY2UsIHtcbiAgICAgIGNvZXJjZVR5cGVzOiB0cnVlLFxuICAgICAgcGF0Y2g6IHRydWVcbiAgICB9KVxuICAgIGNvbnN0IHZhbHVlcyA9IE9iamVjdC52YWx1ZXMocmVmZXJlbmNlKVxuICAgIHJldHVybiB2YWx1ZXMubGVuZ3RoID4gMSA/IHZhbHVlcyA6IHZhbHVlc1swXVxuICB9XG5cbiAgYXN5bmMgZ2V0TWVtYmVyKFxuICAgIGN0eCxcbiAgICBiYXNlID0gdGhpcyxcbiAgICB7IHF1ZXJ5ID0ge30sIG1vZGlmeSA9IG51bGwsIGZvclVwZGF0ZSA9IGZhbHNlIH0gPSB7fVxuICApIHtcbiAgICByZXR1cm4gdGhpcy5tZW1iZXIuZmluZC5jYWxsKFxuICAgICAgdGhpcyxcbiAgICAgIC8vIEV4dGVuZCBgY3R4YCB3aXRoIGEgbmV3IGBxdWVyeWAgb2JqZWN0LCB3aGlsZSBpbmhlcml0aW5nIHRoZSByb3V0ZVxuICAgICAgLy8gcGFyYW1zIGluIGBjdHgucGFyYW1zYCwgc28gZmluaW5nIHRoZSBtZW1iZXIgYnkgaWQgc3RpbGwgd29ya3MuXG4gICAgICB0aGlzLmV4dGVuZENvbnRleHQoY3R4LCB7IHF1ZXJ5IH0pLFxuICAgICAgKHF1ZXJ5LCB0cngpID0+IHtcbiAgICAgICAgdGhpcy5zZXR1cFF1ZXJ5KHF1ZXJ5LCBiYXNlKVxuICAgICAgICBxdWVyeS5tb2RpZnkobW9kaWZ5KVxuICAgICAgICBpZiAoZm9yVXBkYXRlKSB7XG4gICAgICAgICAgaWYgKCF0cngpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBDb250cm9sbGVyRXJyb3IoXG4gICAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICAgICdVc2luZyBgZm9yVXBkYXRlKClgIHdpdGhvdXQgYSB0cmFuc2FjdGlvbiBpcyBpbnZhbGlkJ1xuICAgICAgICAgICAgKVxuICAgICAgICAgIH1cbiAgICAgICAgICBxdWVyeS5mb3JVcGRhdGUoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgKVxuICB9XG5cbiAgcXVlcnkodHJ4KSB7XG4gICAgcmV0dXJuIHRoaXMuc2V0dXBRdWVyeSh0aGlzLm1vZGVsQ2xhc3MucXVlcnkodHJ4KSlcbiAgfVxuXG4gIHNldHVwUXVlcnkocXVlcnksIGJhc2UgPSB0aGlzKSB7XG4gICAgY29uc3QgeyBzY29wZSB9ID0gYmFzZVxuICAgIGNvbnN0IHsgYWxsb3dTY29wZSwgYWxsb3dGaWx0ZXIgfSA9IHRoaXNcblxuICAgIGNvbnN0IGFzQWxsb3dBcnJheSA9IHZhbHVlID0+IHZhbHVlID09PSBmYWxzZSA/IFtdIDogYXNBcnJheSh2YWx1ZSlcblxuICAgIGlmIChhbGxvd1Njb3BlICE9PSB1bmRlZmluZWQgJiYgYWxsb3dTY29wZSAhPT0gdHJ1ZSkge1xuICAgICAgcXVlcnkuYWxsb3dTY29wZShcbiAgICAgICAgLi4uYXNBbGxvd0FycmF5KGFsbG93U2NvcGUpLFxuICAgICAgICAvLyBBbHNvIGluY2x1ZGUgdGhlIHNjb3BlcyBkZWZpbmVkIGJ5IHNjb3BlIHNvIHRoZXNlIGNhbiBwYXNzIHRocm91Z2guXG4gICAgICAgIC4uLmFzQXJyYXkoc2NvcGUpXG4gICAgICApXG4gICAgfVxuICAgIGlmIChhbGxvd0ZpbHRlciAhPT0gdW5kZWZpbmVkICYmIGFsbG93RmlsdGVyICE9PSB0cnVlKSB7XG4gICAgICBxdWVyeS5hbGxvd0ZpbHRlciguLi5hc0FsbG93QXJyYXkoYWxsb3dGaWx0ZXIpKVxuICAgIH1cbiAgICBpZiAoc2NvcGUpIHtcbiAgICAgIHF1ZXJ5LndpdGhTY29wZSguLi5hc0FycmF5KHNjb3BlKSlcbiAgICB9XG4gICAgcmV0dXJuIHF1ZXJ5XG4gIH1cblxuICBhc3luYyBleGVjdXRlKC8qIGN0eCwgZXhlY3V0ZShxdWVyeSwgdHJ4KSB7fSAqLykge1xuICAgIC8vIERvZXMgbm90aGluZyBpbiBiYXNlIGNsYXNzLlxuICAgIC8vIE92ZXJyaWRlcyBhcmUgaW4gTW9kZWxDb250cm9sbGVyIGFuZCBSZWxhdGlvbkNvbnRyb2xsZXIuXG4gIH1cblxuICBhc3luYyBleGVjdXRlQW5kRmV0Y2goYWN0aW9uLCBjdHgsIG1vZGlmeSwgYm9keSA9IGN0eC5yZXF1ZXN0LmJvZHkpIHtcbiAgICBjb25zdCBuYW1lID0gYCR7YWN0aW9ufSR7dGhpcy5ncmFwaCA/ICdEaXRvR3JhcGgnIDogJyd9QW5kRmV0Y2hgXG4gICAgcmV0dXJuIHRoaXMuZXhlY3V0ZShjdHgsIChxdWVyeSwgdHJ4KSA9PlxuICAgICAgcXVlcnlbbmFtZV0oYm9keSlcbiAgICAgICAgLm1vZGlmeShnZXRNb2RpZnkobW9kaWZ5LCB0cngpKVxuICAgIClcbiAgfVxuXG4gIGFzeW5jIGV4ZWN1dGVBbmRGZXRjaEJ5SWQoYWN0aW9uLCBjdHgsIG1vZGlmeSwgYm9keSA9IGN0eC5yZXF1ZXN0LmJvZHkpIHtcbiAgICBjb25zdCBuYW1lID0gYCR7YWN0aW9ufSR7dGhpcy5ncmFwaCA/ICdEaXRvR3JhcGgnIDogJyd9QW5kRmV0Y2hCeUlkYFxuICAgIHJldHVybiB0aGlzLmV4ZWN1dGUoY3R4LCAocXVlcnksIHRyeCkgPT5cbiAgICAgIHF1ZXJ5W25hbWVdKGN0eC5tZW1iZXJJZCwgYm9keSlcbiAgICAgICAgLnRocm93SWZOb3RGb3VuZCgpXG4gICAgICAgIC5tb2RpZnkoZ2V0TW9kaWZ5KG1vZGlmeSwgdHJ4KSlcbiAgICApXG4gIH1cblxuICB0b0NvcmVBY3Rpb25zKGFjdGlvbnMpIHtcbiAgICAvLyBNYXJrIGFjdGlvbiBvYmplY3QgYW5kIG1ldGhvZHMgYXMgY29yZSwgc28gYENvbnRyb2xsZXIucHJvY2Vzc1ZhbHVlcygpYFxuICAgIC8vIGNhbiBmaWx0ZXIgY29ycmVjdGx5LlxuICAgIGZvciAoY29uc3QgYWN0aW9uIG9mIE9iamVjdC52YWx1ZXMoYWN0aW9ucykpIHtcbiAgICAgIC8vIE1hcmsgYWN0aW9uIGZ1bmN0aW9ucyBhbHNvLCBzbyBDb250cm9sbGVyQWN0aW9uIGNhbiB1c2UgaXQgdG8gZGV0ZXJtaW5lXG4gICAgICAvLyB2YWx1ZSBmb3IgYHRyYW5zYWN0ZWRgLlxuICAgICAgYWN0aW9uLmNvcmUgPSB0cnVlXG4gICAgfVxuICAgIGFjdGlvbnMuJGNvcmUgPSB0cnVlXG4gICAgcmV0dXJuIGFjdGlvbnNcbiAgfVxuXG4gIGNvbGxlY3Rpb24gPSB0aGlzLnRvQ29yZUFjdGlvbnMoe1xuICAgIGFzeW5jIGZpbmQoY3R4LCBtb2RpZnkpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuZXhlY3V0ZShjdHgsIChxdWVyeSwgdHJ4KSA9PiB7XG4gICAgICAgIHF1ZXJ5LmZpbmQoY3R4LnF1ZXJ5LCB0aGlzLmFsbG93UGFyYW0pLm1vZGlmeShnZXRNb2RpZnkobW9kaWZ5LCB0cngpKVxuICAgICAgICByZXR1cm4gdGhpcy5pc09uZVRvT25lID8gcXVlcnkuZmlyc3QoKSA6IHF1ZXJ5XG4gICAgICB9KVxuICAgICAgLy8gVGhpcyBtZXRob2QgZG9lc24ndCBhbHdheXMgcmV0dXJuIGFuIGFycmF5OlxuICAgICAgLy8gRm9yIFJlbGF0aW9uQ29udHJvbGxlcnMgd2hlcmUgYGlzT25lVG9PbmVgIGlzIHRydWUsIGl0IGNhbiByZXR1cm5cbiAgICAgIC8vIGB1bmRlZmluZWRgLiBDYXN0IHRvIGBudWxsYCBmb3Igc3VjaCBjYXNlczpcbiAgICAgIHJldHVybiByZXN1bHQgfHwgbnVsbFxuICAgIH0sXG5cbiAgICBhc3luYyBkZWxldGUoY3R4LCBtb2RpZnkpIHtcbiAgICAgIGNvbnN0IGNvdW50ID0gYXdhaXQgdGhpcy5leGVjdXRlKGN0eCwgKHF1ZXJ5LCB0cngpID0+IHF1ZXJ5XG4gICAgICAgIC5pZ25vcmVTY29wZSgpXG4gICAgICAgIC5maW5kKGN0eC5xdWVyeSwgdGhpcy5hbGxvd1BhcmFtKVxuICAgICAgICAubW9kaWZ5KHF1ZXJ5ID0+IHRoaXMuaXNPbmVUb09uZSAmJiBxdWVyeS50aHJvd0lmTm90Rm91bmQoKSlcbiAgICAgICAgLm1vZGlmeShnZXRNb2RpZnkobW9kaWZ5LCB0cngpKVxuICAgICAgICAubW9kaWZ5KHF1ZXJ5ID0+IHRoaXMudW5yZWxhdGUgPyBxdWVyeS51bnJlbGF0ZSgpIDogcXVlcnkuZGVsZXRlKCkpXG4gICAgICApXG4gICAgICByZXR1cm4geyBjb3VudCB9XG4gICAgfSxcblxuICAgIGFzeW5jIGluc2VydChjdHgsIG1vZGlmeSkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5yZWxhdGVcbiAgICAgICAgLy8gVXNlIHBhdGNoRGl0b0dyYXBoQW5kRmV0Y2goKSB0byBoYW5kbGUgcmVsYXRlcyBmb3IgdXMuXG4gICAgICAgID8gYXdhaXQgdGhpcy5leGVjdXRlKGN0eCwgKHF1ZXJ5LCB0cngpID0+IHF1ZXJ5XG4gICAgICAgICAgLnBhdGNoRGl0b0dyYXBoQW5kRmV0Y2goY3R4LnJlcXVlc3QuYm9keSwgeyByZWxhdGU6IHRydWUgfSlcbiAgICAgICAgICAubW9kaWZ5KGdldE1vZGlmeShtb2RpZnksIHRyeCkpXG4gICAgICAgIClcbiAgICAgICAgOiBhd2FpdCB0aGlzLmV4ZWN1dGVBbmRGZXRjaCgnaW5zZXJ0JywgY3R4LCBtb2RpZnkpXG4gICAgICBjdHguc3RhdHVzID0gMjAxXG4gICAgICBpZiAoaXNPYmplY3QocmVzdWx0KSkge1xuICAgICAgICBjdHguc2V0KCdMb2NhdGlvbicsIHRoaXMuZ2V0VXJsKCdjb2xsZWN0aW9uJywgcmVzdWx0LmlkKSlcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHRcbiAgICB9LFxuXG4gICAgYXN5bmMgdXBkYXRlKGN0eCwgbW9kaWZ5KSB7XG4gICAgICByZXR1cm4gdGhpcy5leGVjdXRlQW5kRmV0Y2goJ3VwZGF0ZScsIGN0eCwgbW9kaWZ5KVxuICAgIH0sXG5cbiAgICBhc3luYyBwYXRjaChjdHgsIG1vZGlmeSkge1xuICAgICAgcmV0dXJuIHRoaXMuZXhlY3V0ZUFuZEZldGNoKCdwYXRjaCcsIGN0eCwgbW9kaWZ5KVxuICAgIH1cbiAgfSlcblxuICBtZW1iZXIgPSB0aGlzLnRvQ29yZUFjdGlvbnMoe1xuICAgIGFzeW5jIGZpbmQoY3R4LCBtb2RpZnkpIHtcbiAgICAgIHJldHVybiB0aGlzLmV4ZWN1dGUoY3R4LCAocXVlcnksIHRyeCkgPT4gcXVlcnlcbiAgICAgICAgLmZpbmRCeUlkKGN0eC5tZW1iZXJJZClcbiAgICAgICAgLmZpbmQoY3R4LnF1ZXJ5LCB0aGlzLmFsbG93UGFyYW0pXG4gICAgICAgIC50aHJvd0lmTm90Rm91bmQoKVxuICAgICAgICAubW9kaWZ5KGdldE1vZGlmeShtb2RpZnksIHRyeCkpXG4gICAgICApXG4gICAgfSxcblxuICAgIGFzeW5jIGRlbGV0ZShjdHgsIG1vZGlmeSkge1xuICAgICAgY29uc3QgY291bnQgPSBhd2FpdCB0aGlzLmV4ZWN1dGUoY3R4LCAocXVlcnksIHRyeCkgPT4gcXVlcnlcbiAgICAgICAgLmlnbm9yZVNjb3BlKClcbiAgICAgICAgLmZpbmRCeUlkKGN0eC5tZW1iZXJJZClcbiAgICAgICAgLmZpbmQoY3R4LnF1ZXJ5LCB0aGlzLmFsbG93UGFyYW0pXG4gICAgICAgIC50aHJvd0lmTm90Rm91bmQoKVxuICAgICAgICAubW9kaWZ5KGdldE1vZGlmeShtb2RpZnksIHRyeCkpXG4gICAgICAgIC5tb2RpZnkocXVlcnkgPT4gdGhpcy51bnJlbGF0ZSA/IHF1ZXJ5LnVucmVsYXRlKCkgOiBxdWVyeS5kZWxldGUoKSlcbiAgICAgIClcbiAgICAgIHJldHVybiB7IGNvdW50IH1cbiAgICB9LFxuXG4gICAgYXN5bmMgdXBkYXRlKGN0eCwgbW9kaWZ5KSB7XG4gICAgICByZXR1cm4gdGhpcy5leGVjdXRlQW5kRmV0Y2hCeUlkKCd1cGRhdGUnLCBjdHgsIG1vZGlmeSlcbiAgICB9LFxuXG4gICAgYXN5bmMgcGF0Y2goY3R4LCBtb2RpZnkpIHtcbiAgICAgIHJldHVybiB0aGlzLmV4ZWN1dGVBbmRGZXRjaEJ5SWQoJ3BhdGNoJywgY3R4LCBtb2RpZnkpXG4gICAgfVxuICB9KVxufVxuXG5mdW5jdGlvbiBnZXRNb2RpZnkobW9kaWZ5LCB0cngpIHtcbiAgcmV0dXJuIG1vZGlmeVxuICAgID8gcXVlcnkgPT4gbW9kaWZ5KHF1ZXJ5LCB0cngpXG4gICAgOiBudWxsXG59XG5cbmNvbnN0IGFjdGlvblRvVmVyYiA9IHtcbiAgZmluZDogJ2dldCcsXG4gIGRlbGV0ZTogJ2RlbGV0ZScsXG4gIGluc2VydDogJ3Bvc3QnLFxuICB1cGRhdGU6ICdwdXQnLFxuICBwYXRjaDogJ3BhdGNoJ1xufVxuIl19
|
|
@@ -3,8 +3,32 @@
|
|
|
3
3
|
exports.__esModule = true;
|
|
4
4
|
exports.Controller = void 0;
|
|
5
5
|
|
|
6
|
+
require("core-js/modules/esnext.async-iterator.for-each.js");
|
|
7
|
+
|
|
8
|
+
require("core-js/modules/esnext.iterator.constructor.js");
|
|
9
|
+
|
|
10
|
+
require("core-js/modules/esnext.iterator.for-each.js");
|
|
11
|
+
|
|
12
|
+
require("core-js/modules/esnext.async-iterator.map.js");
|
|
13
|
+
|
|
14
|
+
require("core-js/modules/esnext.iterator.map.js");
|
|
15
|
+
|
|
16
|
+
require("core-js/modules/esnext.async-iterator.filter.js");
|
|
17
|
+
|
|
18
|
+
require("core-js/modules/esnext.iterator.filter.js");
|
|
19
|
+
|
|
20
|
+
require("core-js/modules/esnext.async-iterator.reduce.js");
|
|
21
|
+
|
|
22
|
+
require("core-js/modules/esnext.iterator.reduce.js");
|
|
23
|
+
|
|
24
|
+
require("core-js/modules/esnext.async-iterator.find.js");
|
|
25
|
+
|
|
26
|
+
require("core-js/modules/esnext.iterator.find.js");
|
|
27
|
+
|
|
6
28
|
require("core-js/modules/esnext.weak-map.delete-all.js");
|
|
7
29
|
|
|
30
|
+
require("core-js/modules/esnext.weak-map.emplace.js");
|
|
31
|
+
|
|
8
32
|
var _chalk = _interopRequireDefault(require("chalk"));
|
|
9
33
|
|
|
10
34
|
var _utils = require("../utils");
|
|
@@ -435,4 +459,4 @@ function setupHandlerFromObject(object, actions) {
|
|
|
435
459
|
|
|
436
460
|
return handler;
|
|
437
461
|
}
|
|
438
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250cm9sbGVycy9Db250cm9sbGVyLmpzIl0sIm5hbWVzIjpbIkNvbnRyb2xsZXIiLCJjb25zdHJ1Y3RvciIsImFwcCIsIm5hbWVzcGFjZSIsImxvZ2dpbmciLCJjb25maWciLCJsb2ciLCJyb3V0ZXMiLCJsZXZlbCIsImluaXRpYWxpemUiLCJzZXR1cCIsImlzUm9vdCIsInNldHVwQWN0aW9uc09iamVjdCIsIl9zZXR1cEVtaXR0ZXIiLCJob29rcyIsIndpbGRjYXJkIiwibmFtZSIsIm1hdGNoIiwicGF0aCIsInVuZGVmaW5lZCIsIm5vcm1hbGl6ZVBhdGgiLCJ0cmFuc2FjdGVkIiwidXJsIiwiY2hhbGsiLCJncmVlbiIsImN5YW4iLCJ3aGl0ZSIsImFjdGlvbnMiLCJyZWZsZWN0QWN0aW9uc09iamVjdCIsInNldHVwQWN0aW9ucyIsImFzc2V0cyIsInNldHVwQXNzZXRzIiwiYWxsb3ciLCJjb250cm9sbGVyIiwiYWRkQWN0aW9uIiwia2V5IiwidmFsdWUiLCJ2ZXJiIiwicHJvdG8iLCJPYmplY3QiLCJnZXRQcm90b3R5cGVPZiIsImdldE93blByb3BlcnR5TmFtZXMiLCJmb3JFYWNoIiwic2V0dXBSb3V0ZSIsImF1dGhvcml6ZSIsImFjdGlvbiIsImhhbmRsZXJzIiwibWFnZW50YSIsInRvVXBwZXJDYXNlIiwic2xpY2UiLCJsZW5ndGgiLCJkZXNjcmliZUF1dGhvcml6ZSIsImFkZFJvdXRlIiwidHlwZSIsInZhbHVlcyIsInByb2Nlc3NWYWx1ZXMiLCJpbmhlcml0VmFsdWVzIiwiaGFuZGxlciIsImVudHJpZXMiLCJzZXR1cEFjdGlvbiIsInNldHVwSGFuZGxlckZyb21PYmplY3QiLCJhY3Rpb25DbGFzcyIsIk1lbWJlckFjdGlvbiIsIkNvbnRyb2xsZXJBY3Rpb24iLCJzZXR1cEFjdGlvblJvdXRlIiwiZ2V0VXJsIiwiY3R4IiwicmVzIiwiY2FsbEFjdGlvbiIsImJvZHkiLCJlcnIiLCJSZXNwb25zZUVycm9yIiwiV3JhcHBlZEVycm9yIiwiZGF0YVBhdGgiLCJzZXR1cEFzc2V0Um91dGUiLCJzdG9yYWdlIiwic3RvcmFnZU5hbWUiLCJzZXR0aW5ncyIsImdldFN0b3JhZ2UiLCJDb250cm9sbGVyRXJyb3IiLCJ0b2tlbnMiLCJnZXREYXRhUGF0aCIsImNhbGxiYWNrIiwibWFwIiwiaW5kZXgiLCJtdWx0aXBsZVdpbGRjYXJkcyIsImZpbHRlciIsInRva2VuIiwibm9ybWFsaXplZFBhdGgiLCJtYXRjaERhdGFQYXRoIiwiUmVnRXhwIiwidXBsb2FkIiwiZ2V0VXBsb2FkSGFuZGxlciIsImZpbGVGaWx0ZXIiLCJyZXEiLCJmaWxlIiwiY2IiLCJ0ZXN0IiwiZmllbGRuYW1lIiwiYXV0aG9yaXphdGlvbiIsInByb2Nlc3NBdXRob3JpemUiLCJuZXh0IiwiaGFuZGxlQXV0aG9yaXphdGlvbiIsImZpbGVzIiwiY29udmVydFN0b3JhZ2VGaWxlcyIsInJlcXVlc3QiLCJjcmVhdGVBc3NldHMiLCJ0cmFuc2FjdGlvbiIsImNvbXBvc2UiLCJnZXRQYXRoIiwicGFyZW50Q2xhc3MiLCJpbmhlcml0YW5jZU1hcCIsImhhcyIsInNldCIsImluc3RhbmNlIiwiZW50cnkiLCJnZXQiLCJwYXJlbnQiLCJwYXJlbnRWYWx1ZXMiLCJjdXJyZW50VmFsdWVzIiwic2V0UHJvdG90eXBlT2YiLCJtZXJnZWRBbGxvdyIsIm1lcmdlZEF1dGhvcml6ZSIsImhhc093bkFsbG93IiwiZXhjbHVkZUtleSIsImluY2x1ZGVzIiwiaGFuZGxlQWxsb3ciLCJjdXJyZW50Iiwia2V5cyIsImhhbmRsZUF1dGhvcml6ZSIsImFkZCIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwicmVkdWNlIiwicmVzdWx0IiwiY3JlYXRlIiwiZW1pdEhvb2siLCJoYW5kbGVSZXN1bHQiLCJhcmdzIiwic2hpZnQiLCJsaXN0ZW5lcnMiLCJjYWxsIiwiZ2V0TWVtYmVyIiwibWVtYmVyIiwidXNlciIsInN0YXRlIiwiZmluZCIsIm1vZGVsQ2xhc3MiLCIkaWQiLCJtZW1iZXJJZCIsIiRoYXNPd25lciIsIiRoYXNSb2xlIiwiam9pbiIsIm9rIiwiQXV0aG9yaXphdGlvbkVycm9yIiwic3RyIiwiaW5kZW50IiwiY29uc29sZSIsImluZm8iLCJyZXBlYXQiLCJFdmVudEVtaXR0ZXIiLCJtaXhpbiIsIldlYWtNYXAiLCJvYmplY3QiLCJwYXJhbWV0ZXJzIiwicmV0dXJucyIsInNjb3BlIiwiX3BhcmFtZXRlcnMiLCJvcHRpb25zIiwiaGFzT3B0aW9ucyIsIl9yZXR1cm5zIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBR0E7Ozs7QUFLTyxNQUFNQSxVQUFOLENBQWlCO0FBQ3RCQyxFQUFBQSxXQUFXLENBQUNDLEdBQUQsRUFBTUMsU0FBTixFQUFpQjtBQUMxQixTQUFLRCxHQUFMLEdBQVdBLEdBQVg7QUFDQSxTQUFLQyxTQUFMLEdBQWlCLEtBQUtBLFNBQUwsSUFBa0JBLFNBQW5DO0FBQ0EsU0FBS0MsT0FBTCxHQUFlLEtBQUtGLEdBQUwsQ0FBU0csTUFBVCxDQUFnQkMsR0FBaEIsQ0FBb0JDLE1BQW5DO0FBQ0EsU0FBS0MsS0FBTCxHQUFhLENBQWI7QUFDRDs7QUFHREMsRUFBQUEsVUFBVSxHQUFHLENBQ1o7O0FBRURDLEVBQUFBLEtBQUssQ0FBQ0MsTUFBTSxHQUFHLElBQVYsRUFBZ0JDLGtCQUFrQixHQUFHLElBQXJDLEVBQTJDO0FBQzlDLFNBQUtDLGFBQUwsQ0FBbUIsS0FBS0MsS0FBeEIsRUFBK0I7QUFFN0JDLE1BQUFBLFFBQVEsRUFBRTtBQUZtQixLQUEvQjs7QUFLQSxTQUFLQyxJQUFMLEdBQVksS0FBS0EsSUFBTCxJQUNWLEtBQUtmLFdBQUwsQ0FBaUJlLElBQWpCLENBQXNCQyxLQUF0QixDQUE0Qix3QkFBNUIsRUFBc0QsQ0FBdEQsQ0FERjs7QUFFQSxRQUFJLEtBQUtDLElBQUwsS0FBY0MsU0FBbEIsRUFBNkI7QUFDM0IsV0FBS0QsSUFBTCxHQUFZLEtBQUtoQixHQUFMLENBQVNrQixhQUFULENBQXVCLEtBQUtKLElB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QUVELE1BQUlrSixVQUFKLEVBQWdCO0FBQ2QsVUFBTSxDQUFDRyxXQUFELEVBQWNDLE9BQWQsSUFBeUJKLFVBQS9CO0FBQ0EsVUFBTUssVUFBVSxHQUFHLHFCQUFRRixXQUFSLENBQW5CO0FBQ0E5RyxJQUFBQSxPQUFPLENBQUMyRyxVQUFSLEdBQXFCSyxVQUFVLEdBQUdGLFdBQUgsR0FBaUJILFVBQWhEOztBQUlBLFFBQUlLLFVBQUosRUFBZ0I7QUFDZGhILE1BQUFBLE9BQU8sQ0FBQytHLE9BQVIsR0FBa0IsRUFDaEIsR0FBRy9HLE9BQU8sQ0FBQytHLE9BREs7QUFFaEJKLFFBQUFBLFVBQVUsRUFBRUk7QUFGSSxPQUFsQjtBQUlEO0FBQ0Y7O0FBRUQsTUFBSUgsT0FBSixFQUFhO0FBQ1gsVUFBTSxDQUFDSyxRQUFELEVBQVdGLE9BQVgsSUFBc0IscUJBQVFILE9BQVIsQ0FBNUI7QUFDQTVHLElBQUFBLE9BQU8sQ0FBQzRHLE9BQVIsR0FBa0JLLFFBQWxCOztBQUlBLFFBQUlGLE9BQUosRUFBYTtBQUNYL0csTUFBQUEsT0FBTyxDQUFDK0csT0FBUixHQUFrQixFQUNoQixHQUFHL0csT0FBTyxDQUFDK0csT0FESztBQUVoQkosUUFBQUEsVUFBVSxFQUFFSTtBQUZJLE9BQWxCO0FBSUQ7QUFDRjs7QUFFRCxNQUFJRixLQUFKLEVBQVc7QUFDVDdHLElBQUFBLE9BQU8sQ0FBQzZHLEtBQVIsR0FBZ0IscUJBQVFBLEtBQVIsQ0FBaEI7QUFDRDs7QUFFRCxTQUFPN0csT0FBUDtBQUNEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNoYWxrIGZyb20gJ2NoYWxrJ1xuaW1wb3J0IHsgZ2V0T3duUHJvcGVydHksIGdldEFsbEtleXMsIGRlc2NyaWJlRnVuY3Rpb24gfSBmcm9tICdAL3V0aWxzJ1xuaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQC9saWInXG5pbXBvcnQgQ29udHJvbGxlckFjdGlvbiBmcm9tICcuL0NvbnRyb2xsZXJBY3Rpb24nXG5pbXBvcnQgTWVtYmVyQWN0aW9uIGZyb20gJy4vTWVtYmVyQWN0aW9uJ1xuaW1wb3J0IHtcbiAgUmVzcG9uc2VFcnJvciwgV3JhcHBlZEVycm9yLCBDb250cm9sbGVyRXJyb3IsIEF1dGhvcml6YXRpb25FcnJvclxufSBmcm9tICdAL2Vycm9ycydcbmltcG9ydCB7XG4gIGlzT2JqZWN0LCBpc1N0cmluZywgaXNBcnJheSwgaXNCb29sZWFuLCBpc0Z1bmN0aW9uLCBhc0FycmF5LCBlcXVhbHMsXG4gIHBhcnNlRGF0YVBhdGgsIG5vcm1hbGl6ZURhdGFQYXRoXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBjbGFzcyBDb250cm9sbGVyIHtcbiAgY29uc3RydWN0b3IoYXBwLCBuYW1lc3BhY2UpIHtcbiAgICB0aGlzLmFwcCA9IGFwcFxuICAgIHRoaXMubmFtZXNwYWNlID0gdGhpcy5uYW1lc3BhY2UgfHwgbmFtZXNwYWNlXG4gICAgdGhpcy5sb2dnaW5nID0gdGhpcy5hcHAuY29uZmlnLmxvZy5yb3V0ZXNcbiAgICB0aGlzLmxldmVsID0gMFxuICB9XG5cbiAgLy8gQG92ZXJyaWRhYmxlXG4gIGluaXRpYWxpemUoKSB7XG4gIH1cblxuICBzZXR1cChpc1Jvb3QgPSB0cnVlLCBzZXR1cEFjdGlvbnNPYmplY3QgPSB0cnVlKSB7XG4gICAgdGhpcy5fc2V0dXBFbWl0dGVyKHRoaXMuaG9va3MsIHtcbiAgICAgIC8vIFN1cHBvcnQgd2lsZGNhcmQgaG9va3Mgb25seSBvbiBjb250cm9sbGVyczpcbiAgICAgIHdpbGRjYXJkOiB0cnVlXG4gICAgfSlcbiAgICAvLyBJZiB0aGUgY2xhc3MgbmFtZSBlbmRzIGluICdDb250cm9sbGVyJywgcmVtb3ZlIGl0IGZyb20gY29udHJvbGxlciBuYW1lLlxuICAgIHRoaXMubmFtZSA9IHRoaXMubmFtZSB8fFxuICAgICAgdGhpcy5jb25zdHJ1Y3Rvci5uYW1lLm1hdGNoKC9eKC4qPykoPzpDb250cm9sbGVyfCkkLylbMV1cbiAgICBpZiAodGhpcy5wYXRoID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMucGF0aCA9IHRoaXMuYXBwLm5vcm1hbGl6ZVBhdGgodGhpcy5uYW1lKVxuICAgIH1cbiAgICB0aGlzLnRyYW5zYWN0ZWQgPSAhIXRoaXMudHJhbnNhY3RlZFxuICAgIGlmIChpc1Jvb3QpIHtcbiAgICAgIGNvbnN0IHsgcGF0aCwgbmFtZXNwYWNlIH0gPSB0aGlzXG4gICAgICAvLyBUT0RPOiBUaGUgZGlzdGluY3Rpb24gYmV0d2VlbiAgYHVybGAgYW5kIGBwYXRoYCBpcyBhIGJpdCB0cmlja3ksIHNpbmNlXG4gICAgICAvLyB3aGF0IHdlIGNhbGwgYHVybGAgaGVyZSBpcyBjYWxsZWQgYHBhdGhgIGluIFJvdXRlciwgYW5kIG1heSBjb250YWluXG4gICAgICAvLyBtYXBwZWQgcGFyYW1ldGVycyBvciB3aWxkY2FyZHMuIENvbnNpZGVyIGBwYXRoYCAvIGByb3V0ZWAgaW5zdGVhZD9cbiAgICAgIGNvbnN0IHVybCA9IHBhdGggPyBgLyR7cGF0aH1gIDogJydcbiAgICAgIHRoaXMudXJsID0gbmFtZXNwYWNlID8gYC8ke25hbWVzcGFjZX0ke3VybH1gIDogdXJsXG4gICAgICB0aGlzLmxvZyhcbiAgICAgICAgYCR7XG4gICAgICAgICAgbmFtZXNwYWNlID8gY2hhbGsuZ3JlZW4oYC8ke25hbWVzcGFjZX0vYCkgOiAnJ1xuICAgICAgICB9JHtcbiAgICAgICAgICBjaGFsay5jeWFuKHBhdGgpXG4gICAgICAgIH0ke1xuICAgICAgICAgIGNoYWxrLndoaXRlKCc6JylcbiAgICAgICAgfWAsXG4gICAgICAgIHRoaXMubGV2ZWxcbiAgICAgIClcbiAgICAgIGlmIChzZXR1cEFjdGlvbnNPYmplY3QpIHtcbiAgICAgICAgdGhpcy5hY3Rpb25zID0gdGhpcy5hY3Rpb25zIHx8IHRoaXMucmVmbGVjdEFjdGlvbnNPYmplY3QoKVxuICAgICAgICAvLyBOb3cgdGhhdCB0aGUgaW5zdGFuY2UgZmllbGRzIGFyZSByZWZsZWN0ZWQgaW4gdGhlIGBjb250cm9sbGVyYCBvYmplY3RcbiAgICAgICAgLy8gd2UgY2FuIHVzZSB0aGUgbm9ybWFsIGluaGVyaXRhbmNlIG1lY2hhbmlzbSB0aHJvdWdoIGBzZXR1cEFjdGlvbnMoKWA6XG4gICAgICAgIHRoaXMuYWN0aW9ucyA9IHRoaXMuc2V0dXBBY3Rpb25zKCdhY3Rpb25zJylcbiAgICAgIH1cbiAgICAgIHRoaXMuYXNzZXRzID0gdGhpcy5zZXR1cEFzc2V0cygpXG4gICAgfVxuICB9XG5cbiAgcmVmbGVjdEFjdGlvbnNPYmplY3QoKSB7XG4gICAgLy8gT24gYmFzZSBjb250cm9sbGVycywgdGhlIGFjdGlvbnMgY2FuIGJlIGRlZmluZWQgZGlyZWN0bHkgaW4gdGhlIGNsYXNzXG4gICAgLy8gaW5zdGVhZCBvZiBpbnNpZGUgYW4gYWN0aW9ucyBvYmplY3QsIGFzIGlzIGRvbmUgd2l0aCBtb2RlbCBhbmQgcmVsYXRpb25cbiAgICAvLyBjb250cm9sbGVycy4gQnV0IGluIG9yZGVyIHRvIHVzZSB0aGUgc2FtZSBzdHJ1Y3R1cmUgZm9yIGluaGVyaXRhbmNlIGFzXG4gICAgLy8gdGhlc2Ugb3RoZXIgY29udHJvbGxlcnMsIHdlIHJlZmxlY3QgdGhlc2UgaW5zdGFuY2UgZmllbGRzIGluIGEgc2VwYXJhdGVcbiAgICAvLyBgYWN0aW9uc2Agb2JqZWN0LlxuICAgIGNvbnN0IHsgYWxsb3cgfSA9IHRoaXNcbiAgICBjb25zdCBjb250cm9sbGVyID0gYWxsb3cgPyB7IGFsbG93IH0gOiB7fVxuXG4gICAgY29uc3QgYWRkQWN0aW9uID0ga2V5ID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gdGhpc1trZXldXG4gICAgICAvLyBOT1RFOiBPbmx5IGFkZCBpbnN0YW5jZSBtZXRob2RzIHRoYXQgaGF2ZSBhIEBhY3Rpb24oKSBkZWNvcmF0b3IsXG4gICAgICAvLyB3aGljaCBpbiB0dXJuIHNldHMgdGhlIGB2ZXJiYCBwcm9wZXJ0eSBvbiB0aGUgbWV0aG9kLCBvciBhY3Rpb24gb2JqZWN0c1xuICAgICAgLy8gd2hpY2ggaGF2ZSB0aGUgYHZlcmJgIHByb3BlcnR5OlxuICAgICAgaWYgKHZhbHVlPy52ZXJiKSB7XG4gICAgICAgIGNvbnRyb2xsZXJba2V5XSA9IHZhbHVlXG4gICAgICB9XG4gICAgfVxuICAgIC8vIFVzZSBgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoKWAgdG8gZ2V0IHRoZSBmaWVsZHMsIGluIG9yZGVyIHRvXG4gICAgLy8gbm90IGFsc28gcmVjZWl2ZSB2YWx1ZXMgZnJvbSBwYXJlbnRzICh0aG9zZSBhcmUgZmV0Y2hlZCBsYXRlciBpblxuICAgIC8vIGBpbmhlcml0VmFsdWVzKClgLCBzZWUgYGdldFBhcmVudFZhbHVlcygpYCkuXG4gICAgY29uc3QgcHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcylcbiAgICBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhwcm90bykuZm9yRWFjaChhZGRBY3Rpb24pXG4gICAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcykuZm9yRWFjaChhZGRBY3Rpb24pXG4gICAgcmV0dXJuIGNvbnRyb2xsZXJcbiAgfVxuXG4gIHNldHVwUm91dGUodmVyYiwgdXJsLCB0cmFuc2FjdGVkLCBhdXRob3JpemUsIGFjdGlvbiwgaGFuZGxlcnMpIHtcbiAgICB0aGlzLmxvZyhcbiAgICAgIGAke1xuICAgICAgICBjaGFsay5tYWdlbnRhKHZlcmIudG9VcHBlckNhc2UoKSlcbiAgICAgIH0gJHtcbiAgICAgICAgY2hhbGsuZ3JlZW4odGhpcy51cmwpXG4gICAgICB9JHtcbiAgICAgICAgY2hhbGsuY3lhbih1cmwuc2xpY2UodGhpcy51cmwubGVuZ3RoKSlcbiAgICAgIH0gJHtcbiAgICAgICAgY2hhbGsud2hpdGUodGhpcy5kZXNjcmliZUF1dGhvcml6ZShhdXRob3JpemUpKVxuICAgICAgfWAsXG4gICAgICB0aGlzLmxldmVsICsgMVxuICAgIClcbiAgICB0aGlzLmFwcC5hZGRSb3V0ZSh2ZXJiLCB1cmwsIHRyYW5zYWN0ZWQsIGhhbmRsZXJzLCB0aGlzLCBhY3Rpb24pXG4gIH1cblxuICBzZXR1cEFjdGlvbnModHlwZSkge1xuICAgIGNvbnN0IHtcbiAgICAgIHZhbHVlczogYWN0aW9ucyxcbiAgICAgIGF1dGhvcml6ZVxuICAgIH0gPSB0aGlzLnByb2Nlc3NWYWx1ZXModGhpcy5pbmhlcml0VmFsdWVzKHR5cGUpKVxuICAgIGZvciAoY29uc3QgW25hbWUsIGhhbmRsZXJdIG9mIE9iamVjdC5lbnRyaWVzKGFjdGlvbnMpKSB7XG4gICAgICB0aGlzLnNldHVwQWN0aW9uKHR5cGUsIGFjdGlvbnMsIG5hbWUsIGhhbmRsZXIsIGF1dGhvcml6ZVtuYW1lXSlcbiAgICB9XG4gICAgcmV0dXJuIGFjdGlvbnNcbiAgfVxuXG4gIHNldHVwQWN0aW9uKFxuICAgIHR5cGUsXG4gICAgYWN0aW9ucyxcbiAgICBuYW1lLFxuICAgIGhhbmRsZXIsXG4gICAgYXV0aG9yaXplLFxuICAgIC8vIFRoZXNlIHZhbHVlcyBhcmUgb25seSBjaGFuZ2VkIHdoZW4gY2FsbGVkIGZyb21cbiAgICAvLyBgQ29sbGVjdGlvbkNvbnRyb2xsZXIuc2V0dXBBY3Rpb24oKWA6XG4gICAgdmVyYiA9ICdnZXQnLFxuICAgIC8vIFRoZSBkZWZhdWx0IHBhdGggZm9yIGFjdGlvbnMgaXMgdGhlIG5vcm1hbGl6ZWQgbmFtZS5cbiAgICBwYXRoID0gdGhpcy5hcHAubm9ybWFsaXplUGF0aChuYW1lKVxuICApIHtcbiAgICBpZiAoIWlzRnVuY3Rpb24oaGFuZGxlcikpIHtcbiAgICAgIGhhbmRsZXIgPSBzZXR1cEhhbmRsZXJGcm9tT2JqZWN0KGhhbmRsZXIsIGFjdGlvbnMpXG4gICAgfVxuICAgIC8vIEN1c3RvbSBtZW1iZXIgYWN0aW9ucyBoYXZlIHRoZWlyIG93biBjbGFzcyBzbyB0aGV5IGNhbiBmZXRjaCB0aGUgbWVtYmVyc1xuICAgIC8vIGFoZWFkIG9mIHRoZWlyIGNhbGwuXG4gICAgY29uc3QgYWN0aW9uQ2xhc3MgPSB0eXBlID09PSAnbWVtYmVyJyA/IE1lbWJlckFjdGlvbiA6IENvbnRyb2xsZXJBY3Rpb25cbiAgICB0aGlzLnNldHVwQWN0aW9uUm91dGUoXG4gICAgICB0eXBlLFxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5ldy1jYXBcbiAgICAgIG5ldyBhY3Rpb25DbGFzcyh0aGlzLCBoYW5kbGVyLCB0eXBlLCBuYW1lLCB2ZXJiLCBwYXRoLCBhdXRob3JpemUpXG4gICAgKVxuICB9XG5cbiAgc2V0dXBBY3Rpb25Sb3V0ZSh0eXBlLCBhY3Rpb24pIHtcbiAgICBjb25zdCB1cmwgPSB0aGlzLmdldFVybCh0eXBlLCBhY3Rpb24ucGF0aClcbiAgICBjb25zdCB7IHZlcmIsIHRyYW5zYWN0ZWQsIGF1dGhvcml6ZSB9ID0gYWN0aW9uXG4gICAgdGhpcy5zZXR1cFJvdXRlKHZlcmIsIHVybCwgdHJhbnNhY3RlZCwgYXV0aG9yaXplLCBhY3Rpb24sIFtcbiAgICAgIGFzeW5jIGN0eCA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgYWN0aW9uLmNhbGxBY3Rpb24oY3R4KVxuICAgICAgICAgIGlmIChyZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY3R4LmJvZHkgPSByZXNcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIHRocm93IGVyciBpbnN0YW5jZW9mIFJlc3BvbnNlRXJyb3IgPyBlcnIgOiBuZXcgV3JhcHBlZEVycm9yKGVycilcbiAgICAgICAgfVxuICAgICAgfVxuICAgIF0pXG4gIH1cblxuICBzZXR1cEFzc2V0cygpIHtcbiAgICBjb25zdCB7XG4gICAgICB2YWx1ZXM6IGFzc2V0cyxcbiAgICAgIGF1dGhvcml6ZVxuICAgIH0gPSB0aGlzLnByb2Nlc3NWYWx1ZXModGhpcy5pbmhlcml0VmFsdWVzKCdhc3NldHMnKSlcbiAgICBmb3IgKGNvbnN0IFtkYXRhUGF0aCwgY29uZmlnXSBvZiBPYmplY3QuZW50cmllcyhhc3NldHMgfHwge30pKSB7XG4gICAgICB0aGlzLnNldHVwQXNzZXRSb3V0ZShkYXRhUGF0aCwgY29uZmlnLCBhdXRob3JpemVbZGF0YVBhdGhdKVxuICAgIH1cbiAgICByZXR1cm4gYXNzZXRzXG4gIH1cblxuICBzZXR1cEFzc2V0Um91dGUoZGF0YVBhdGgsIGNvbmZpZywgYXV0aG9yaXplKSB7XG4gICAgY29uc3Qge1xuICAgICAgc3RvcmFnZTogc3RvcmFnZU5hbWUsXG4gICAgICAvLyBUT0RPOiBXaGF0IGV4YWN0bHkgc2hvdWxkIGNvbnRyb2wgdGhlIHVzZSBvZiBgdHJhbnNhY3RlZGA/XG4gICAgICB0cmFuc2FjdGVkLFxuICAgICAgLi4uc2V0dGluZ3NcbiAgICB9ID0gY29uZmlnXG4gICAgY29uc3Qgc3RvcmFnZSA9IHRoaXMuYXBwLmdldFN0b3JhZ2Uoc3RvcmFnZU5hbWUpXG4gICAgaWYgKCFzdG9yYWdlKSB7XG4gICAgICB0aHJvdyBuZXcgQ29udHJvbGxlckVycm9yKHRoaXMsXG4gICAgICAgIGBVbmtub3duIHN0b3JhZ2UgY29uZmlndXJhdGlvbjogJyR7c3RvcmFnZU5hbWV9J2BcbiAgICAgIClcbiAgICB9XG4gICAgY29uc3QgdG9rZW5zID0gcGFyc2VEYXRhUGF0aChkYXRhUGF0aClcbiAgICBjb25zdCBnZXREYXRhUGF0aCA9IGNhbGxiYWNrID0+IG5vcm1hbGl6ZURhdGFQYXRoKHRva2Vucy5tYXAoY2FsbGJhY2spKVxuXG4gICAgLy8gUmVwbGFjZSB3aWxkY2FyZHMgd2l0aCBudW1iZXJlZCBpbmRpY2VzIGFuZCBjb252ZXJ0IHRvICcvJy1ub3RhdGlvbjpcbiAgICBsZXQgaW5kZXggPSAwXG4gICAgY29uc3QgbXVsdGlwbGVXaWxkY2FyZHMgPSB0b2tlbnMuZmlsdGVyKHRva2VuID0+IHRva2VuID09PSAnKicpLmxlbmd0aCA+IDFcbiAgICBjb25zdCBub3JtYWxpemVkUGF0aCA9IGdldERhdGFQYXRoKFxuICAgICAgdG9rZW4gPT4gdG9rZW4gPT09ICcqJ1xuICAgICAgICA/IG11bHRpcGxlV2lsZGNhcmRzXG4gICAgICAgICAgPyBgOmluZGV4JHsrK2luZGV4fWBcbiAgICAgICAgICA6ICc6aW5kZXgnXG4gICAgICAgIDogdGhpcy5hcHAubm9ybWFsaXplUGF0aCh0b2tlbilcbiAgICApXG5cbiAgICAvLyBDb252ZXJ0IGBkYXRhUGF0aGAgdG8gYSByZWd1bGFyIGV4cHJlc3Npb24gdG8gbWF0Y2ggZmllbGQgbmFtZXNcbiAgICAvLyBhZ2FpbnN0LCBidXQgY29udmVydCB3aWxkY2FyZHMgKCopIHRvIG1hdGNoIGJvdGggbnVtZXJpYyBpZHMgYW5kIHdvcmRzLFxuICAgIC8vIGUuZy4gJ2NyZWF0ZSc6XG4gICAgY29uc3QgbWF0Y2hEYXRhUGF0aCA9IG5ldyBSZWdFeHAoXG4gICAgICBgXiR7Z2V0RGF0YVBhdGgodG9rZW4gPT4gdG9rZW4gPT09ICcqJyA/ICdcXFxcdysnIDogdG9rZW4pfSRgXG4gICAgKVxuXG4gICAgY29uc3QgdXJsID0gdGhpcy5nZXRVcmwoJ2NvbnRyb2xsZXInLCBgdXBsb2FkLyR7bm9ybWFsaXplZFBhdGh9YClcbiAgICBjb25zdCB1cGxvYWQgPSBzdG9yYWdlLmdldFVwbG9hZEhhbmRsZXIoe1xuICAgICAgLi4uc2V0dGluZ3MsXG4gICAgICAvLyBPbmx5IGxldCB1cGxvYWRzIHBhc3MgdGhhdCBtYXRjaCB0aGUgbm9ybWFsaXplUGF0aCArIHdpbGRjYXJkczpcbiAgICAgIGZpbGVGaWx0ZXI6IChyZXEsIGZpbGUsIGNiKSA9PiB7XG4gICAgICAgIGNiKG51bGwsIG1hdGNoRGF0YVBhdGgudGVzdChmaWxlLmZpZWxkbmFtZSkpXG4gICAgICB9XG4gICAgfSlcblxuICAgIGNvbnN0IGF1dGhvcml6YXRpb24gPSB0aGlzLnByb2Nlc3NBdXRob3JpemUoYXV0aG9yaXplKVxuICAgIHRoaXMuc2V0dXBSb3V0ZSgncG9zdCcsIHVybCwgdHJhbnNhY3RlZCwgYXV0aG9yaXplLCBudWxsLCBbXG4gICAgICBhc3luYyAoY3R4LCBuZXh0KSA9PiB7XG4gICAgICAgIGF3YWl0IHRoaXMuaGFuZGxlQXV0aG9yaXphdGlvbihhdXRob3JpemF0aW9uLCBjdHgpXG4gICAgICAgIHJldHVybiBuZXh0KClcbiAgICAgIH0sXG5cbiAgICAgIHVwbG9hZCxcblxuICAgICAgYXN5bmMgKGN0eCwgbmV4dCkgPT4ge1xuICAgICAgICBjb25zdCBmaWxlcyA9IHN0b3JhZ2UuY29udmVydFN0b3JhZ2VGaWxlcyhjdHgucmVxdWVzdC5maWxlcylcbiAgICAgICAgYXdhaXQgdGhpcy5hcHAuY3JlYXRlQXNzZXRzKHN0b3JhZ2UsIGZpbGVzLCAwLCBjdHgudHJhbnNhY3Rpb24pXG4gICAgICAgIC8vIFNlbmQgdGhlIGZpbGUgb2JqZWN0cyBiYWNrIGZvciB0aGUgdXBsb2FkIGNvbXBvbmVudCB0byBzdG9yZSBpbiB0aGVcbiAgICAgICAgLy8gZGF0YS5cbiAgICAgICAgY3R4LmJvZHkgPSBmaWxlc1xuICAgICAgICByZXR1cm4gbmV4dCgpXG4gICAgICB9XG4gICAgXSlcbiAgfVxuXG4gIGNvbXBvc2UoKSB7XG4gICAgLy8gVG8gYmUgb3ZlcnJpZGRlbiBpbiBzdWItY2xhc3NlcywgaWYgdGhlIGNvbnRyb2xsZXIgbmVlZHMgdG8gaW5zdGFsbFxuICAgIC8vIG1pZGRsZXdhcmUuIEZvciBub3JtYWwgcm91dGVzLCB1c2UgYHRoaXMuYXBwLmFkZFJvdXRlKClgIGluc3RlYWQuXG4gIH1cblxuICBnZXRQYXRoKHR5cGUsIHBhdGgpIHtcbiAgICAvLyBUbyBiZSBvdmVycmlkZGVuIGJ5IHN1Yi1jbGFzc2VzLlxuICAgIHJldHVybiBwYXRoXG4gIH1cblxuICBnZXRVcmwodHlwZSwgcGF0aCkge1xuICAgIHBhdGggPSB0aGlzLmdldFBhdGgodHlwZSwgcGF0aClcbiAgICAvLyBVc2UgJy4nIGFzIHRoZSBwYXRoIGZvciB0aGUgY29udHJvbGxlcidzIFwiaW5kZXhcIiBhY3Rpb24uXG4gICAgcmV0dXJuIHBhdGggJiYgcGF0aCAhPT0gJy4nID8gYCR7dGhpcy51cmx9LyR7cGF0aH1gIDogdGhpcy51cmxcbiAgfVxuXG4gIGluaGVyaXRWYWx1ZXModHlwZSkge1xuICAgIC8vIEdldHMgdGhlIGNvbnRyb2xsZXIgY2xhc3MncyBpbnN0YW5jZSBmaWVsZCBmb3IgYSBnaXZlbiBhY3Rpb24gdHlwZSwgZS5nLlxuICAgIC8vIGBjb250cm9sbGVyYCAoQ29udHJvbGxlciksIGBjb2xsZWN0aW9uYCwgYG1lbWJlcmAgKE1vZGVsQ29udHJvbGxlcixcbiAgICAvLyBSZWxhdGlvbkNvbnRyb2xsZXIpLCBgcmVsYXRpb25gIChSZWxhdGlvbkNvbnRyb2xsZXIpLCBhbmQgc2V0cyB1cCBhblxuICAgIC8vIGluaGVyaXRhbmNlIGNoYWluIGZvciBpdCB0aGF0IGdvZXMgYWxsIHRoZSB3YXkgdXAgdG8gaXQgYmFzZSBjbGFzcyAoZS5nLlxuICAgIC8vIENvbGxlY3Rpb25Db250cm9sbGVyKSwgc28gdGhhdCB0aGUgZGVmYXVsdCBkZWZpbml0aW9ucyBmb3IgYWxsIGh0dHAgdmVyYnNcbiAgICAvLyBjYW4gYmUgY29ycmVjdGx5IGluaGVyaXRlZCBhbmQgb3ZlcnJpZGRlbiB3aGlsZSB1c2luZyBgc3VwZXIuPGFjdGlvbj4oKWAuXG4gICAgY29uc3QgcGFyZW50Q2xhc3MgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcy5jb25zdHJ1Y3RvcilcbiAgICAvLyBDcmVhdGUgb25lIGluc3RhbmNlIG9mIGVhY2ggY29udHJvbGxlciBjbGFzcyB1cCB0aGUgY2hhaW4gaW4gb3JkZXIgdG9cbiAgICAvLyBnZXQgdG8gdGhlaXIgZGVmaW5pdGlvbnMgb2YgdGhlIGluaGVyaXRhYmxlIHZhbHVlcy4gQ2FjaGUgYm90aCBpbnN0YW5jZVxuICAgIC8vIGFuZCByZXNvbHZlZCB2YWx1ZXMgcGVyIHBhcmVudENsYXNzIGluIGFuIGluaGVyaXRhbmNlTWFwLlxuICAgIGlmICghaW5oZXJpdGFuY2VNYXAuaGFzKHBhcmVudENsYXNzKSkge1xuICAgICAgaW5oZXJpdGFuY2VNYXAuc2V0KHBhcmVudENsYXNzLCB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuZXctY2FwXG4gICAgICAgIGluc3RhbmNlOiBuZXcgcGFyZW50Q2xhc3ModGhpcy5hcHAsIHRoaXMubmFtZXNwYWNlKVxuICAgICAgfSlcbiAgICB9XG4gICAgY29uc3QgZW50cnkgPSBpbmhlcml0YW5jZU1hcC5nZXQocGFyZW50Q2xhc3MpXG4gICAgaWYgKCFlbnRyeVt0eXBlXSkge1xuICAgICAgY29uc3QgcGFyZW50ID0gZW50cnkuaW5zdGFuY2VcbiAgICAgIGxldCB2YWx1ZXMgPSBwYXJlbnRbdHlwZV1cbiAgICAgIGlmIChwYXJlbnRDbGFzcyAhPT0gQ29udHJvbGxlcikge1xuICAgICAgICAvLyBSZWN1cnNpdmVseSBzZXQgdXAgaW5oZXJpdGFuY2UgY2hhaW5zLlxuICAgICAgICB2YWx1ZXMgPSBwYXJlbnQuaW5oZXJpdFZhbHVlcyh0eXBlKVxuICAgICAgfVxuICAgICAgZW50cnlbdHlwZV0gPSB2YWx1ZXNcbiAgICB9XG4gICAgLy8gSWYgdGhlcmUgYXJlIG5vIHZhbHVlcyBkZWZpbmVkIG9uIGB0aGlzYCB0aGF0IGRpZmZlciBmcm9tIHRoZSBwYXJlbnQsXG4gICAgLy8gc2V0IHRvIGFuIGVtcHR5IG9iamVjdCBzbyBpbmhlcml0YW5jZSBjYW4gYmUgc2V0IHVwIGFuZCBgcHJvY2Vzc1ZhbHVlcygpYFxuICAgIC8vIGNhbiBzdGlsbCBiZSBjYWxsZWQuXG4gICAgLy8gTk9URTogV2UgY2FuJ3QgY2hlY2sgd2l0aCBgdGhpcy5oYXNPd25Qcm9wZXJ0eSh0eXBlKWAgYmVjYXVzZSB0aGVcbiAgICAvLyBmaWVsZCBjYW4gYmUgb24gdGhlIGNsYXNzIHByb3RvdHlwZSBhcyB3ZWxsLCBpbiBjYXNlIG9mIGFjY2Vzc29ycy5cbiAgICBjb25zdCBwYXJlbnRWYWx1ZXMgPSBlbnRyeVt0eXBlXVxuICAgIGxldCBjdXJyZW50VmFsdWVzID0gdGhpc1t0eXBlXVxuICAgIGlmIChjdXJyZW50VmFsdWVzICYmIGN1cnJlbnRWYWx1ZXMgPT09IHBhcmVudFZhbHVlcykge1xuICAgICAgY3VycmVudFZhbHVlcyA9IHRoaXNbdHlwZV0gPSB7fVxuICAgIH1cbiAgICAvLyBDb21iaW5lIHBhcmVudFZhbHVlcyBhbmQgY3VycmVudFZhbHVlcyB3aXRoIGNvcnJlY3QgaW5oZXJpdGFuY2UuXG4gICAgcmV0dXJuIGlzT2JqZWN0KHBhcmVudFZhbHVlcykgJiYgaXNPYmplY3QoY3VycmVudFZhbHVlcylcbiAgICAgID8gT2JqZWN0LnNldFByb3RvdHlwZU9mKGN1cnJlbnRWYWx1ZXMsIHBhcmVudFZhbHVlcylcbiAgICAgIDogY3VycmVudFZhbHVlc1xuICB9XG5cbiAgcHJvY2Vzc1ZhbHVlcyh2YWx1ZXMpIHtcbiAgICBpZiAoIXZhbHVlcykgcmV0dXJuIHt9XG4gICAgLy8gUmVzcGVjdCBgYWxsb3dgIHNldHRpbmdzIGFuZCBjbGVhciBlbnRyaWVzIHRoYXQgYXJlbid0IGFsbG93ZWQuXG4gICAgLy8gQWxzbyBjb2xsZWN0IGFuZCBleHBhbmQgYGF1dGhvcml6ZWAgc2V0dGluZ3Mgc28gdGhhdCBpbiB0aGUgZW5kLCBhblxuICAgIC8vIGBhdXRob3JpemVgIG9iamVjdCBjYW4gYmUgcmV0dXJuZWQgd2l0aCB2YWxpZCBzZXR0aW5ncyBmb3IgYWxsIHZhbHVlcy5cbiAgICAvL1xuICAgIC8vIFJ1bGVzOlxuICAgIC8vIC0gT3duIHZhbHVlcyBvbiBvYmplY3RzIHRoYXQgZG9uJ3QgZGVmaW5lIGFuIGBhbGxvd2AgYXJyYXkgYXJlXG4gICAgLy8gICBhdXRvbWF0aWNhbGx5IGFsbG93ZWQuIElmIGFuIGBhbGxvd2AgYXJyYXkgaXMgZGVmaW5lZCBhcyB3ZWxsLCB0aGVuXG4gICAgLy8gICB0aGVzZSBvd24gdmFsdWVzIG5lZWQgdG8gYmUgZXhwbGljaXRseSBsaXN0ZWQuXG4gICAgLy8gLSBJZiBubyBgYWxsb3dgIGFycmF5cyBhcmUgZGVmaW5lZCBpbiB0aGUgcHJvdG90eXBhbCBoaWVyYXJjaHksIGVhY2hcbiAgICAvLyAgIGxldmVsIGFsbG93cyBpdHMgb3duIHZhbHVlcywgYW5kIHRoZXNlIGFyZSBtZXJnZWQsIGV4Y2VwdCBmb3IgdGhvc2VcbiAgICAvLyAgIG1hcmtlZCBhcyBgJGNvcmVgLCB3aGljaCBuZWVkIHRvIGJlIGV4cGxpY2l0bHkgbGlzdGVkIGluIGBhbGxvd2AuXG5cbiAgICAvLyBOT1RFOiBgaGFuZGxlQWxsb3coKWAgYW5kIGBoYW5kbGVBdXRob3JpemUoKWAgYXJlIGFwcGxpZWQgaW4gc2VxdWVuY2Ugb2ZcbiAgICAvLyB0aGUgYHZhbHVlc2AgaW5oZXJpdGFuY2UsIGZyb20gc3ViLWNsYXNzIHRvIGJhc2UtY2xhc3MuXG5cbiAgICBjb25zdCBtZXJnZWRBbGxvdyA9IHt9XG4gICAgY29uc3QgbWVyZ2VkQXV0aG9yaXplID0ge31cbiAgICBsZXQgaGFzT3duQWxsb3cgPSBmYWxzZVxuXG4gICAgY29uc3QgZXhjbHVkZUtleSA9IGtleSA9PiBbJ2FsbG93JywgJ2F1dGhvcml6ZSddLmluY2x1ZGVzKGtleSlcblxuICAgIGNvbnN0IGhhbmRsZUFsbG93ID0gKGFsbG93LCBjdXJyZW50KSA9PiB7XG4gICAgICBpZiAoYWxsb3cpIHtcbiAgICAgICAgYWxsb3cgPSBhc0FycmF5KGFsbG93KVxuICAgICAgICBoYXNPd25BbGxvdyA9IHRydWVcbiAgICAgIH0gZWxzZSBpZiAoIWhhc093bkFsbG93KSB7XG4gICAgICAgIC8vIE9ubHkga2VlcCBhZGRpbmcgdG8gdGhlIG1lcmdlZCBgYWxsb3dgIGlmIHdlIGRpZG4ndCBhbHJlYWR5IGVuY291bnRlclxuICAgICAgICAvLyBhbiBvd24gYGFsbG93YCBvYmplY3QgZnVydGhlciB1cCB0aGUgY2hhaW4uXG4gICAgICAgIGFsbG93ID0gT2JqZWN0LmtleXMoY3VycmVudClcbiAgICAgIH1cbiAgICAgIGlmIChhbGxvdykge1xuICAgICAgICBpZiAoYWxsb3cuaW5jbHVkZXMoJyonKSkge1xuICAgICAgICAgIGFsbG93ID0gZ2V0QWxsS2V5cyhjdXJyZW50KVxuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIGFsbG93KSB7XG4gICAgICAgICAgaWYgKCFleGNsdWRlS2V5KGtleSkpIHtcbiAgICAgICAgICAgIG1lcmdlZEFsbG93W2tleV0gPSB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgaGFuZGxlQXV0aG9yaXplID0gYXV0aG9yaXplID0+IHtcbiAgICAgIGNvbnN0IGFkZCA9IChrZXksIHZhbHVlKSA9PiB7XG4gICAgICAgIC8vIFNpbmNlIHdlJ3JlIHdhbGtpbmcgdXAgaW4gdGhlIGluaGVyaXRhbmNlIGNoYWluLCBvbmx5IHRha2Ugb24gYW5cbiAgICAgICAgLy8gYXV0aG9yaXplIHNldHRpbmcgZm9yIGEgZ2l2ZW4ga2V5IGlmIGl0IHdhc24ndCBhbHJlYWR5IGRlZmluZWQgYmVmb3JlXG4gICAgICAgIGlmIChcbiAgICAgICAgICBrZXkgaW4gdmFsdWVzICYmXG4gICAgICAgICAgIShrZXkgaW4gbWVyZ2VkQXV0aG9yaXplKSAmJlxuICAgICAgICAgICFleGNsdWRlS2V5KGtleSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgbWVyZ2VkQXV0aG9yaXplW2tleV0gPSB2YWx1ZVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChpc09iamVjdChhdXRob3JpemUpKSB7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIGF1dGhvcml6ZSkge1xuICAgICAgICAgIGFkZChrZXksIGF1dGhvcml6ZVtrZXldKVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGF1dGhvcml6ZSAhPSBudWxsKSB7XG4gICAgICAgIC8vIFRoaXMgaXMgYSB2YWx1ZXMtd2lkZSBzZXR0aW5nLiBMb29wIHRocm91Z2ggYWxsIHZhbHVlcywgbm90IGp1c3RcbiAgICAgICAgLy8gY3VycmVudCBvbmVzLCBhbmQgYXBwbHkgdG8gYW55IGFjdGlvbiB0aGF0IGRvZXNuJ3QgYWxyZWFkeSBoYXZlIG9uZTpcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gdmFsdWVzKSB7XG4gICAgICAgICAgYWRkKGtleSwgYXV0aG9yaXplKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUHJvY2VzcyB0aGUgYGFsbG93YCBhbmQgYGF1dGhvcml6ZWAgc2V0dGluZ3MgaW4gc2VxdWVuY2Ugb2YgdGhlIGB2YWx1ZXNgXG4gICAgLy8gaW5oZXJpdGFuY2UsIGZyb20gc3ViLWNsYXNzIHRvIGJhc2UtY2xhc3MuXG4gICAgbGV0IGN1cnJlbnQgPSB2YWx1ZXNcbiAgICB3aGlsZSAoY3VycmVudCAhPT0gT2JqZWN0LnByb3RvdHlwZSAmJiAhY3VycmVudC5oYXNPd25Qcm9wZXJ0eSgnJGNvcmUnKSkge1xuICAgICAgaGFuZGxlQWxsb3coZ2V0T3duUHJvcGVydHkoY3VycmVudCwgJ2FsbG93JyksIGN1cnJlbnQpXG4gICAgICBoYW5kbGVBdXRob3JpemUoZ2V0T3duUHJvcGVydHkoY3VycmVudCwgJ2F1dGhvcml6ZScpKVxuICAgICAgY3VycmVudCA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihjdXJyZW50KVxuICAgIH1cblxuICAgIC8vIEF0IHRoZSBlbmQgb2YgdGhlIGNoYWluLCBhbHNvIHN1cHBvcnQgYm90aCBzZXR0aW5ncyBvbiB0aGUgY29udHJvbGxlci1cbiAgICAvLyBsZXZlbCwgYW5kIHRodXMgYXBwbGllZCB0byBhbGwgYWN0aW9uIG9iamVjdHMgaW4gdGhlIGNvbnRyb2xsZXIuXG4gICAgaWYgKHRoaXMuYWxsb3cpIHtcbiAgICAgIGhhbmRsZUFsbG93KHRoaXMuYWxsb3csIHZhbHVlcylcbiAgICB9XG4gICAgaWYgKHRoaXMuYXV0aG9yaXplKSB7XG4gICAgICBoYW5kbGVBdXRob3JpemUodGhpcy5hdXRob3JpemUpXG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIC8vIENyZWF0ZSBhIGZpbHRlcmVkIGB2YWx1ZXNgIG9iamVjdCB0aGF0IG9ubHkgY29udGFpbnMgdGhlIGFsbG93ZWQgZmllbGRzXG4gICAgICB2YWx1ZXM6IGdldEFsbEtleXModmFsdWVzKS5yZWR1Y2UoXG4gICAgICAgIChyZXN1bHQsIGtleSkgPT4ge1xuICAgICAgICAgIGlmIChtZXJnZWRBbGxvd1trZXldKSB7XG4gICAgICAgICAgICByZXN1bHRba2V5XSA9IHZhbHVlc1trZXldXG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiByZXN1bHRcbiAgICAgICAgfSxcbiAgICAgICAgLy8gQ3JlYXRlIGEgbmV3IG9iamVjdCBmb3IgdGhlIGZpbHRlcmVkIGB2YWx1ZXNgIHRoYXQga2VlcHMgaW5oZXJpdGFuY2VcbiAgICAgICAgLy8gaW50YWN0LiBUaGlzIGlzIHJlcXVpcmVkIGJ5IGBzZXR1cEhhbmRsZXJGcm9tT2JqZWN0KClgLCB0byBzdXBwb3J0XG4gICAgICAgIC8vIGBzdXBlcmAgaW4gaGFuZGxlciBmdW5jdGlvbnMuXG4gICAgICAgIE9iamVjdC5jcmVhdGUoT2JqZWN0LmdldFByb3RvdHlwZU9mKHZhbHVlcykpXG4gICAgICApLFxuICAgICAgYWxsb3c6IE9iamVjdC5rZXlzKG1lcmdlZEFsbG93KSxcbiAgICAgIGF1dGhvcml6ZTogbWVyZ2VkQXV0aG9yaXplXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZW1pdEhvb2sodHlwZSwgaGFuZGxlUmVzdWx0LCBjdHgsIC4uLmFyZ3MpIHtcbiAgICBsZXQgcmVzdWx0ID0gaGFuZGxlUmVzdWx0ID8gYXJncy5zaGlmdCgpIDogdW5kZWZpbmVkXG4gICAgZm9yIChjb25zdCBoYW5kbGVyIG9mIHRoaXMubGlzdGVuZXJzKHR5cGUpKSB7XG4gICAgICBpZiAoaGFuZGxlUmVzdWx0KSB7XG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGhhbmRsZXIuY2FsbCh0aGlzLCBjdHgsIHJlc3VsdCwgLi4uYXJncylcbiAgICAgICAgaWYgKHJlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmVzdWx0ID0gcmVzXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGF3YWl0IGhhbmRsZXIuY2FsbCh0aGlzLCBjdHgsIC4uLmFyZ3MpXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHRcbiAgfVxuXG4gIGFzeW5jIGdldE1lbWJlcigvKiBjdHgsIGJhc2UgPSB0aGlzLCBwYXJhbSA9IHsgLi4uIH0gKi8pIHtcbiAgICAvLyBUaGlzIGlzIG9ubHkgZGVmaW5lZCBpbiBgQ29sbGVjdGlvbkNvbnRyb2xsZXJgLCB3aGVyZSBpdCByZXNvbHZlcyB0byB0aGVcbiAgICAvLyBtZW1iZXIgcmVwcmVzZW50ZWQgYnkgdGhlIGdpdmVuIHJvdXRlLlxuICAgIHJldHVybiBudWxsXG4gIH1cblxuICAvKipcbiAgICogQ29udmVydHMgdGhlIGF1dGhvcml6ZSBjb25maWcgc2V0dGluZ3MgaW50byBhbiBhdXRob3JpemF0aW9uIGZ1bmN0aW9uIHRoYXRcbiAgICogY2FuIGJlIHBhc3NlZCB0byBgaGFuZGxlQXV0aG9yaXphdGlvbigpYC5cbiAgICpcbiAgICogQHBhcmFtIHtib29sZWFufGZ1bmN0aW9ufHN0cmluZ3xzdHJpbmdbXX0gYXV0aG9yaXplIHRoZSBhdXRob3JpemUgY29uZmlnXG4gICAqIHNldHRpbmdzXG4gICAqIEByZXR1cm4ge2Z1bmN0aW9ufSB0aGUgYXV0aG9yaXphdGlvbiBmdW5jdGlvblxuICAgKi9cbiAgcHJvY2Vzc0F1dGhvcml6ZShhdXRob3JpemUpIHtcbiAgICBpZiAoYXV0aG9yaXplID09IG51bGwpIHtcbiAgICAgIHJldHVybiAoKSA9PiB0cnVlXG4gICAgfSBlbHNlIGlmIChpc0Jvb2xlYW4oYXV0aG9yaXplKSkge1xuICAgICAgcmV0dXJuICgpID0+IGF1dGhvcml6ZVxuICAgIH0gZWxzZSBpZiAoaXNGdW5jdGlvbihhdXRob3JpemUpKSB7XG4gICAgICByZXR1cm4gYXN5bmMgKGN0eCwgbWVtYmVyKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGF1dGhvcml6ZShjdHgsIG1lbWJlcilcbiAgICAgICAgLy8gUGFzcyByZXMgdGhyb3VnaCBgcHJvY2Vzc0F1dGhvcml6ZSgpYCB0byBzdXBwb3J0IHN0cmluZ3MgJiBhcnJheXMuXG4gICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NBdXRob3JpemUocmVzKShjdHgsIG1lbWJlcilcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGlzU3RyaW5nKGF1dGhvcml6ZSkgfHwgaXNBcnJheShhdXRob3JpemUpKSB7XG4gICAgICByZXR1cm4gYXN5bmMgKGN0eCwgbWVtYmVyKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgdXNlciB9ID0gY3R4LnN0YXRlXG4gICAgICAgIGlmICghdXNlcikge1xuICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHZhbHVlcyA9IGFzQXJyYXkoYXV0aG9yaXplKVxuICAgICAgICAvLyBGb3IgJyRvd25lcicsIGZldGNoIGBtZW1iZXJgIG5vdyBpbiBjYXNlIHRoZSBhY3Rpb24gcGFyYW1ldGVyc1xuICAgICAgICAvLyBkaWRuJ3QgYWxyZWFkeSByZXF1ZXN0IGl0OlxuICAgICAgICBpZiAoIW1lbWJlciAmJiB2YWx1ZXMuaW5jbHVkZXMoJyRvd25lcicpKSB7XG4gICAgICAgICAgbWVtYmVyID0gYXdhaXQgdGhpcy5nZXRNZW1iZXIoY3R4KVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiAhIXZhbHVlcy5maW5kKFxuICAgICAgICAvLyBTdXBwb3J0IDMgc2NlbmFyaW9zOlxuICAgICAgICAvLyAtICckc2VsZic6IFRoZSByZXF1ZXN0ZWQgbWVtYmVyIGlzIGNoZWNrZWQgYWdhaW5zdCBgY3R4LnN0YXRlLnVzZXJgXG4gICAgICAgIC8vICAgYW5kIHRoZSBhY3Rpb24gaXMgb25seSBhdXRob3JpemVkIGlmIGl0IG1hdGNoZXMgdGhlIG1lbWJlci5cbiAgICAgICAgLy8gLSAnJG93bmVyJzogVGhlIG1lbWJlciBpcyBhc2tlZCBpZiBpdCBpcyBvd25lZCBieSBgY3R4LnN0YXRlLnVzZXJgXG4gICAgICAgIC8vICAgdGhyb3VnaCB0aGUgb3B0aW9uYWwgYE1vZGVsLiRoYXNPd25lcigpYCBtZXRob2QuXG4gICAgICAgIC8vIC0gYW55IHN0cmluZzogIGBjdHguc3RhdGUudXNlcmAgaXMgY2hlY2tlZCBmb3IgdGhpcyByb2xlIHRocm91Z2hcbiAgICAgICAgLy8gICB0aGUgb3ZlcnJpZGFibGUgYFVzZXJNb2RlbC5oYXNSb2xlKClgIG1ldGhvZC5cbiAgICAgICAgICB2YWx1ZSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUgPT09ICckc2VsZidcbiAgICAgICAgICAgICAgPyB1c2VyLmNvbnN0cnVjdG9yID09PSB0aGlzLm1vZGVsQ2xhc3MgJiZcbiAgICAgICAgICAgICAgZXF1YWxzKHVzZXIuJGlkKCksIGN0eC5tZW1iZXJJZClcbiAgICAgICAgICAgICAgOiB2YWx1ZSA9PT0gJyRvd25lcidcbiAgICAgICAgICAgICAgICA/IG1lbWJlcj8uJGhhc093bmVyPy4odXNlcilcbiAgICAgICAgICAgICAgICA6IHVzZXIuJGhhc1JvbGUodmFsdWUpXG4gICAgICAgICAgfVxuICAgICAgICApXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBDb250cm9sbGVyRXJyb3IodGhpcyxcbiAgICAgICAgYFVuc3VwcG9ydGVkIGF1dGhvcml6ZSBzZXR0aW5nOiAnJHthdXRob3JpemV9J2BcbiAgICAgIClcbiAgICB9XG4gIH1cblxuICBkZXNjcmliZUF1dGhvcml6ZShhdXRob3JpemUpIHtcbiAgICByZXR1cm4gaXNGdW5jdGlvbihhdXRob3JpemUpXG4gICAgICA/IGRlc2NyaWJlRnVuY3Rpb24oYXV0aG9yaXplKVxuICAgICAgOiBpc1N0cmluZyhhdXRob3JpemUpXG4gICAgICAgID8gYCcke2F1dGhvcml6ZX0nYFxuICAgICAgICA6IGlzQXJyYXkoYXV0aG9yaXplKVxuICAgICAgICAgID8gYFske2F1dGhvcml6ZS5tYXAodmFsdWUgPT4gYCcke3ZhbHVlfSdgKS5qb2luKCcsICcpfV1gXG4gICAgICAgICAgOiAnJ1xuICB9XG5cbiAgYXN5bmMgaGFuZGxlQXV0aG9yaXphdGlvbihhdXRob3JpemF0aW9uLCBjdHgsIG1lbWJlcikge1xuICAgIGNvbnN0IG9rID0gYXdhaXQgYXV0aG9yaXphdGlvbihjdHgsIG1lbWJlcilcbiAgICBpZiAob2sgIT09IHRydWUpIHtcbiAgICAgIHRocm93IG5ldyBBdXRob3JpemF0aW9uRXJyb3IoKVxuICAgIH1cbiAgfVxuXG4gIGxvZyhzdHIsIGluZGVudCA9IDApIHtcbiAgICBpZiAodGhpcy5sb2dnaW5nKSB7XG4gICAgICBjb25zb2xlLmluZm8oYCR7JyAgJy5yZXBlYXQoaW5kZW50KX0ke3N0cn1gKVxuICAgIH1cbiAgfVxufVxuXG5FdmVudEVtaXR0ZXIubWl4aW4oQ29udHJvbGxlci5wcm90b3R5cGUpXG5cbmNvbnN0IGluaGVyaXRhbmNlTWFwID0gbmV3IFdlYWtNYXAoKVxuXG5mdW5jdGlvbiBzZXR1cEhhbmRsZXJGcm9tT2JqZWN0KG9iamVjdCwgYWN0aW9ucykge1xuICBjb25zdCB7XG4gICAgaGFuZGxlcixcbiAgICBhY3Rpb24sXG4gICAgYXV0aG9yaXplLFxuICAgIHBhcmFtZXRlcnMsXG4gICAgcmV0dXJucyxcbiAgICBzY29wZSxcbiAgICB0cmFuc2FjdGVkXG4gIH0gPSBvYmplY3RcblxuICAvLyBJbiBvcmRlciB0byBzdXBvcnQgYHN1cGVyYCBjYWxscyBpbiB0aGUgYGhhbmRsZXJgIGZ1bmN0aW9uIGluIG9iamVjdFxuICAvLyBub3RhdGlvbiwgZGVwbG95IHRoaXMgY3JhenkgSlMgc29yY2VyeTpcbiAgT2JqZWN0LnNldFByb3RvdHlwZU9mKG9iamVjdCwgT2JqZWN0LmdldFByb3RvdHlwZU9mKGFjdGlvbnMpKVxuXG4gIGhhbmRsZXIuYXV0aG9yaXplID0gYXV0aG9yaXplXG4gIGhhbmRsZXIudHJhbnNhY3RlZCA9IHRyYW5zYWN0ZWRcblxuICBpZiAoYWN0aW9uKSB7XG4gICAgY29uc3QgW3ZlcmIsIHBhdGhdID0gYXNBcnJheShhY3Rpb24pXG4gICAgaGFuZGxlci52ZXJiID0gdmVyYlxuICAgIGhhbmRsZXIucGF0aCA9IHBhdGhcbiAgfVxuXG4gIGlmIChwYXJhbWV0ZXJzKSB7XG4gICAgY29uc3QgW19wYXJhbWV0ZXJzLCBvcHRpb25zXSA9IHBhcmFtZXRlcnNcbiAgICBjb25zdCBoYXNPcHRpb25zID0gaXNBcnJheShfcGFyYW1ldGVycylcbiAgICBoYW5kbGVyLnBhcmFtZXRlcnMgPSBoYXNPcHRpb25zID8gX3BhcmFtZXRlcnMgOiBwYXJhbWV0ZXJzXG5cbiAgICAvLyBJZiB2YWxpZGF0aW9uIG9wdGlvbnMgYXJlIHByb3ZpZGVkLCBleHBvc2UgdGhlbSB0aHJvdWdoXG4gICAgLy8gYGhhbmRsZXIub3B0aW9ucy5wYXJhbWV0ZXJzYCwgc2VlIENvbnRyb2xsZXJBY3Rpb25cbiAgICBpZiAoaGFzT3B0aW9ucykge1xuICAgICAgaGFuZGxlci5vcHRpb25zID0ge1xuICAgICAgICAuLi5oYW5kbGVyLm9wdGlvbnMsXG4gICAgICAgIHBhcmFtZXRlcnM6IG9wdGlvbnNcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAocmV0dXJucykge1xuICAgIGNvbnN0IFtfcmV0dXJucywgb3B0aW9uc10gPSBhc0FycmF5KHJldHVybnMpXG4gICAgaGFuZGxlci5yZXR1cm5zID0gX3JldHVybnNcblxuICAgIC8vIElmIHZhbGlkYXRpb24gb3B0aW9ucyBhcmUgcHJvdmlkZWQsIGV4cG9zZSB0aGVtIHRocm91Z2hcbiAgICAvLyBgaGFuZGxlci5vcHRpb25zLnJldHVybnNgLCBzZWUgQ29udHJvbGxlckFjdGlvblxuICAgIGlmIChvcHRpb25zKSB7XG4gICAgICBoYW5kbGVyLm9wdGlvbnMgPSB7XG4gICAgICAgIC4uLmhhbmRsZXIub3B0aW9ucyxcbiAgICAgICAgcGFyYW1ldGVyczogb3B0aW9uc1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChzY29wZSkge1xuICAgIGhhbmRsZXIuc2NvcGUgPSBhc0FycmF5KHNjb3BlKVxuICB9XG5cbiAgcmV0dXJuIGhhbmRsZXJcbn1cbiJdfQ==
|
|
462
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250cm9sbGVycy9Db250cm9sbGVyLmpzIl0sIm5hbWVzIjpbIkNvbnRyb2xsZXIiLCJjb25zdHJ1Y3RvciIsImFwcCIsIm5hbWVzcGFjZSIsImxvZ2dpbmciLCJjb25maWciLCJsb2ciLCJyb3V0ZXMiLCJsZXZlbCIsImluaXRpYWxpemUiLCJzZXR1cCIsImlzUm9vdCIsInNldHVwQWN0aW9uc09iamVjdCIsIl9zZXR1cEVtaXR0ZXIiLCJob29rcyIsIndpbGRjYXJkIiwibmFtZSIsIm1hdGNoIiwicGF0aCIsInVuZGVmaW5lZCIsIm5vcm1hbGl6ZVBhdGgiLCJ0cmFuc2FjdGVkIiwidXJsIiwiY2hhbGsiLCJncmVlbiIsImN5YW4iLCJ3aGl0ZSIsImFjdGlvbnMiLCJyZWZsZWN0QWN0aW9uc09iamVjdCIsInNldHVwQWN0aW9ucyIsImFzc2V0cyIsInNldHVwQXNzZXRzIiwiYWxsb3ciLCJjb250cm9sbGVyIiwiYWRkQWN0aW9uIiwia2V5IiwidmFsdWUiLCJ2ZXJiIiwicHJvdG8iLCJPYmplY3QiLCJnZXRQcm90b3R5cGVPZiIsImdldE93blByb3BlcnR5TmFtZXMiLCJmb3JFYWNoIiwic2V0dXBSb3V0ZSIsImF1dGhvcml6ZSIsImFjdGlvbiIsImhhbmRsZXJzIiwibWFnZW50YSIsInRvVXBwZXJDYXNlIiwic2xpY2UiLCJsZW5ndGgiLCJkZXNjcmliZUF1dGhvcml6ZSIsImFkZFJvdXRlIiwidHlwZSIsInZhbHVlcyIsInByb2Nlc3NWYWx1ZXMiLCJpbmhlcml0VmFsdWVzIiwiaGFuZGxlciIsImVudHJpZXMiLCJzZXR1cEFjdGlvbiIsInNldHVwSGFuZGxlckZyb21PYmplY3QiLCJhY3Rpb25DbGFzcyIsIk1lbWJlckFjdGlvbiIsIkNvbnRyb2xsZXJBY3Rpb24iLCJzZXR1cEFjdGlvblJvdXRlIiwiZ2V0VXJsIiwiY3R4IiwicmVzIiwiY2FsbEFjdGlvbiIsImJvZHkiLCJlcnIiLCJSZXNwb25zZUVycm9yIiwiV3JhcHBlZEVycm9yIiwiZGF0YVBhdGgiLCJzZXR1cEFzc2V0Um91dGUiLCJzdG9yYWdlIiwic3RvcmFnZU5hbWUiLCJzZXR0aW5ncyIsImdldFN0b3JhZ2UiLCJDb250cm9sbGVyRXJyb3IiLCJ0b2tlbnMiLCJnZXREYXRhUGF0aCIsImNhbGxiYWNrIiwibWFwIiwiaW5kZXgiLCJtdWx0aXBsZVdpbGRjYXJkcyIsImZpbHRlciIsInRva2VuIiwibm9ybWFsaXplZFBhdGgiLCJtYXRjaERhdGFQYXRoIiwiUmVnRXhwIiwidXBsb2FkIiwiZ2V0VXBsb2FkSGFuZGxlciIsImZpbGVGaWx0ZXIiLCJyZXEiLCJmaWxlIiwiY2IiLCJ0ZXN0IiwiZmllbGRuYW1lIiwiYXV0aG9yaXphdGlvbiIsInByb2Nlc3NBdXRob3JpemUiLCJuZXh0IiwiaGFuZGxlQXV0aG9yaXphdGlvbiIsImZpbGVzIiwiY29udmVydFN0b3JhZ2VGaWxlcyIsInJlcXVlc3QiLCJjcmVhdGVBc3NldHMiLCJ0cmFuc2FjdGlvbiIsImNvbXBvc2UiLCJnZXRQYXRoIiwicGFyZW50Q2xhc3MiLCJpbmhlcml0YW5jZU1hcCIsImhhcyIsInNldCIsImluc3RhbmNlIiwiZW50cnkiLCJnZXQiLCJwYXJlbnQiLCJwYXJlbnRWYWx1ZXMiLCJjdXJyZW50VmFsdWVzIiwic2V0UHJvdG90eXBlT2YiLCJtZXJnZWRBbGxvdyIsIm1lcmdlZEF1dGhvcml6ZSIsImhhc093bkFsbG93IiwiZXhjbHVkZUtleSIsImluY2x1ZGVzIiwiaGFuZGxlQWxsb3ciLCJjdXJyZW50Iiwia2V5cyIsImhhbmRsZUF1dGhvcml6ZSIsImFkZCIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwicmVkdWNlIiwicmVzdWx0IiwiY3JlYXRlIiwiZW1pdEhvb2siLCJoYW5kbGVSZXN1bHQiLCJhcmdzIiwic2hpZnQiLCJsaXN0ZW5lcnMiLCJjYWxsIiwiZ2V0TWVtYmVyIiwibWVtYmVyIiwidXNlciIsInN0YXRlIiwiZmluZCIsIm1vZGVsQ2xhc3MiLCIkaWQiLCJtZW1iZXJJZCIsIiRoYXNPd25lciIsIiRoYXNSb2xlIiwiam9pbiIsIm9rIiwiQXV0aG9yaXphdGlvbkVycm9yIiwic3RyIiwiaW5kZW50IiwiY29uc29sZSIsImluZm8iLCJyZXBlYXQiLCJFdmVudEVtaXR0ZXIiLCJtaXhpbiIsIldlYWtNYXAiLCJvYmplY3QiLCJwYXJhbWV0ZXJzIiwicmV0dXJucyIsInNjb3BlIiwiX3BhcmFtZXRlcnMiLCJvcHRpb25zIiwiaGFzT3B0aW9ucyIsIl9yZXR1cm5zIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBR0E7Ozs7QUFLTyxNQUFNQSxVQUFOLENBQWlCO0FBQ3RCQyxFQUFBQSxXQUFXLENBQUNDLEdBQUQsRUFBTUMsU0FBTixFQUFpQjtBQUMxQixTQUFLRCxHQUFMLEdBQVdBLEdBQVg7QUFDQSxTQUFLQyxTQUFMLEdBQWlCLEtBQUtBLFNBQUwsSUFBa0JBLFNBQW5DO0FBQ0EsU0FBS0MsT0FBTCxHQUFlLEtBQUtGLEdBQUwsQ0FBU0csTUFBVCxDQUFnQkMsR0FBaEIsQ0FBb0JDLE1BQW5DO0FBQ0EsU0FBS0MsS0FBTCxHQUFhLENBQWI7QUFDRDs7QUFHREMsRUFBQUEsVUFBVSxHQUFHLENBQ1o7O0FBRURDLEVBQUFBLEtBQUssQ0FBQ0MsTUFBTSxHQUFHLElBQVYsRUFBZ0JDLGtCQUFrQixHQUFHLElBQXJDLEVBQTJDO0FBQzlDLFNBQUtDLGFBQUwsQ0FBbUIsS0FBS0MsS0FBeEIsRUFBK0I7QUFFN0JDLE1BQUFBLFFBQVEsRUFBRTtBQUZtQixLQUEvQjs7QUFLQSxTQUFLQyxJQUFMLEdBQVksS0FBS0EsSUFBTCxJQUNWLEtBQUtmLFdBQUwsQ0FBaUJlLElBQWpCLENBQXNCQyxLQUF0QixDQUE0Qix3QkFBNUIsRUFBc0QsQ0FBdEQsQ0FERjs7QUFFQSxRQUFJLEtBQUtDLElBQUwsS0FBY0MsU0FBbEIsRUFBNkI7QUFDM0IsV0FBS0QsSUFBTCxHQUFZLEtBQUtoQixHQUFMLENB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LElBQVIsR0FBZUEsSUFBZjtBQUNEOztBQUVELE1BQUlrSixVQUFKLEVBQWdCO0FBQ2QsVUFBTSxDQUFDRyxXQUFELEVBQWNDLE9BQWQsSUFBeUJKLFVBQS9CO0FBQ0EsVUFBTUssVUFBVSxHQUFHLHFCQUFRRixXQUFSLENBQW5CO0FBQ0E5RyxJQUFBQSxPQUFPLENBQUMyRyxVQUFSLEdBQXFCSyxVQUFVLEdBQUdGLFdBQUgsR0FBaUJILFVBQWhEOztBQUlBLFFBQUlLLFVBQUosRUFBZ0I7QUFDZGhILE1BQUFBLE9BQU8sQ0FBQytHLE9BQVIsR0FBa0IsRUFDaEIsR0FBRy9HLE9BQU8sQ0FBQytHLE9BREs7QUFFaEJKLFFBQUFBLFVBQVUsRUFBRUk7QUFGSSxPQUFsQjtBQUlEO0FBQ0Y7O0FBRUQsTUFBSUgsT0FBSixFQUFhO0FBQ1gsVUFBTSxDQUFDSyxRQUFELEVBQVdGLE9BQVgsSUFBc0IscUJBQVFILE9BQVIsQ0FBNUI7QUFDQTVHLElBQUFBLE9BQU8sQ0FBQzRHLE9BQVIsR0FBa0JLLFFBQWxCOztBQUlBLFFBQUlGLE9BQUosRUFBYTtBQUNYL0csTUFBQUEsT0FBTyxDQUFDK0csT0FBUixHQUFrQixFQUNoQixHQUFHL0csT0FBTyxDQUFDK0csT0FESztBQUVoQkosUUFBQUEsVUFBVSxFQUFFSTtBQUZJLE9BQWxCO0FBSUQ7QUFDRjs7QUFFRCxNQUFJRixLQUFKLEVBQVc7QUFDVDdHLElBQUFBLE9BQU8sQ0FBQzZHLEtBQVIsR0FBZ0IscUJBQVFBLEtBQVIsQ0FBaEI7QUFDRDs7QUFFRCxTQUFPN0csT0FBUDtBQUNEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNoYWxrIGZyb20gJ2NoYWxrJ1xuaW1wb3J0IHsgZ2V0T3duUHJvcGVydHksIGdldEFsbEtleXMsIGRlc2NyaWJlRnVuY3Rpb24gfSBmcm9tICdAL3V0aWxzJ1xuaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQC9saWInXG5pbXBvcnQgQ29udHJvbGxlckFjdGlvbiBmcm9tICcuL0NvbnRyb2xsZXJBY3Rpb24nXG5pbXBvcnQgTWVtYmVyQWN0aW9uIGZyb20gJy4vTWVtYmVyQWN0aW9uJ1xuaW1wb3J0IHtcbiAgUmVzcG9uc2VFcnJvciwgV3JhcHBlZEVycm9yLCBDb250cm9sbGVyRXJyb3IsIEF1dGhvcml6YXRpb25FcnJvclxufSBmcm9tICdAL2Vycm9ycydcbmltcG9ydCB7XG4gIGlzT2JqZWN0LCBpc1N0cmluZywgaXNBcnJheSwgaXNCb29sZWFuLCBpc0Z1bmN0aW9uLCBhc0FycmF5LCBlcXVhbHMsXG4gIHBhcnNlRGF0YVBhdGgsIG5vcm1hbGl6ZURhdGFQYXRoXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBjbGFzcyBDb250cm9sbGVyIHtcbiAgY29uc3RydWN0b3IoYXBwLCBuYW1lc3BhY2UpIHtcbiAgICB0aGlzLmFwcCA9IGFwcFxuICAgIHRoaXMubmFtZXNwYWNlID0gdGhpcy5uYW1lc3BhY2UgfHwgbmFtZXNwYWNlXG4gICAgdGhpcy5sb2dnaW5nID0gdGhpcy5hcHAuY29uZmlnLmxvZy5yb3V0ZXNcbiAgICB0aGlzLmxldmVsID0gMFxuICB9XG5cbiAgLy8gQG92ZXJyaWRhYmxlXG4gIGluaXRpYWxpemUoKSB7XG4gIH1cblxuICBzZXR1cChpc1Jvb3QgPSB0cnVlLCBzZXR1cEFjdGlvbnNPYmplY3QgPSB0cnVlKSB7XG4gICAgdGhpcy5fc2V0dXBFbWl0dGVyKHRoaXMuaG9va3MsIHtcbiAgICAgIC8vIFN1cHBvcnQgd2lsZGNhcmQgaG9va3Mgb25seSBvbiBjb250cm9sbGVyczpcbiAgICAgIHdpbGRjYXJkOiB0cnVlXG4gICAgfSlcbiAgICAvLyBJZiB0aGUgY2xhc3MgbmFtZSBlbmRzIGluICdDb250cm9sbGVyJywgcmVtb3ZlIGl0IGZyb20gY29udHJvbGxlciBuYW1lLlxuICAgIHRoaXMubmFtZSA9IHRoaXMubmFtZSB8fFxuICAgICAgdGhpcy5jb25zdHJ1Y3Rvci5uYW1lLm1hdGNoKC9eKC4qPykoPzpDb250cm9sbGVyfCkkLylbMV1cbiAgICBpZiAodGhpcy5wYXRoID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMucGF0aCA9IHRoaXMuYXBwLm5vcm1hbGl6ZVBhdGgodGhpcy5uYW1lKVxuICAgIH1cbiAgICB0aGlzLnRyYW5zYWN0ZWQgPSAhIXRoaXMudHJhbnNhY3RlZFxuICAgIGlmIChpc1Jvb3QpIHtcbiAgICAgIGNvbnN0IHsgcGF0aCwgbmFtZXNwYWNlIH0gPSB0aGlzXG4gICAgICAvLyBUT0RPOiBUaGUgZGlzdGluY3Rpb24gYmV0d2VlbiAgYHVybGAgYW5kIGBwYXRoYCBpcyBhIGJpdCB0cmlja3ksIHNpbmNlXG4gICAgICAvLyB3aGF0IHdlIGNhbGwgYHVybGAgaGVyZSBpcyBjYWxsZWQgYHBhdGhgIGluIFJvdXRlciwgYW5kIG1heSBjb250YWluXG4gICAgICAvLyBtYXBwZWQgcGFyYW1ldGVycyBvciB3aWxkY2FyZHMuIENvbnNpZGVyIGBwYXRoYCAvIGByb3V0ZWAgaW5zdGVhZD9cbiAgICAgIGNvbnN0IHVybCA9IHBhdGggPyBgLyR7cGF0aH1gIDogJydcbiAgICAgIHRoaXMudXJsID0gbmFtZXNwYWNlID8gYC8ke25hbWVzcGFjZX0ke3VybH1gIDogdXJsXG4gICAgICB0aGlzLmxvZyhcbiAgICAgICAgYCR7XG4gICAgICAgICAgbmFtZXNwYWNlID8gY2hhbGsuZ3JlZW4oYC8ke25hbWVzcGFjZX0vYCkgOiAnJ1xuICAgICAgICB9JHtcbiAgICAgICAgICBjaGFsay5jeWFuKHBhdGgpXG4gICAgICAgIH0ke1xuICAgICAgICAgIGNoYWxrLndoaXRlKCc6JylcbiAgICAgICAgfWAsXG4gICAgICAgIHRoaXMubGV2ZWxcbiAgICAgIClcbiAgICAgIGlmIChzZXR1cEFjdGlvbnNPYmplY3QpIHtcbiAgICAgICAgdGhpcy5hY3Rpb25zID0gdGhpcy5hY3Rpb25zIHx8IHRoaXMucmVmbGVjdEFjdGlvbnNPYmplY3QoKVxuICAgICAgICAvLyBOb3cgdGhhdCB0aGUgaW5zdGFuY2UgZmllbGRzIGFyZSByZWZsZWN0ZWQgaW4gdGhlIGBjb250cm9sbGVyYCBvYmplY3RcbiAgICAgICAgLy8gd2UgY2FuIHVzZSB0aGUgbm9ybWFsIGluaGVyaXRhbmNlIG1lY2hhbmlzbSB0aHJvdWdoIGBzZXR1cEFjdGlvbnMoKWA6XG4gICAgICAgIHRoaXMuYWN0aW9ucyA9IHRoaXMuc2V0dXBBY3Rpb25zKCdhY3Rpb25zJylcbiAgICAgIH1cbiAgICAgIHRoaXMuYXNzZXRzID0gdGhpcy5zZXR1cEFzc2V0cygpXG4gICAgfVxuICB9XG5cbiAgcmVmbGVjdEFjdGlvbnNPYmplY3QoKSB7XG4gICAgLy8gT24gYmFzZSBjb250cm9sbGVycywgdGhlIGFjdGlvbnMgY2FuIGJlIGRlZmluZWQgZGlyZWN0bHkgaW4gdGhlIGNsYXNzXG4gICAgLy8gaW5zdGVhZCBvZiBpbnNpZGUgYW4gYWN0aW9ucyBvYmplY3QsIGFzIGlzIGRvbmUgd2l0aCBtb2RlbCBhbmQgcmVsYXRpb25cbiAgICAvLyBjb250cm9sbGVycy4gQnV0IGluIG9yZGVyIHRvIHVzZSB0aGUgc2FtZSBzdHJ1Y3R1cmUgZm9yIGluaGVyaXRhbmNlIGFzXG4gICAgLy8gdGhlc2Ugb3RoZXIgY29udHJvbGxlcnMsIHdlIHJlZmxlY3QgdGhlc2UgaW5zdGFuY2UgZmllbGRzIGluIGEgc2VwYXJhdGVcbiAgICAvLyBgYWN0aW9uc2Agb2JqZWN0LlxuICAgIGNvbnN0IHsgYWxsb3cgfSA9IHRoaXNcbiAgICBjb25zdCBjb250cm9sbGVyID0gYWxsb3cgPyB7IGFsbG93IH0gOiB7fVxuXG4gICAgY29uc3QgYWRkQWN0aW9uID0ga2V5ID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gdGhpc1trZXldXG4gICAgICAvLyBOT1RFOiBPbmx5IGFkZCBpbnN0YW5jZSBtZXRob2RzIHRoYXQgaGF2ZSBhIEBhY3Rpb24oKSBkZWNvcmF0b3IsXG4gICAgICAvLyB3aGljaCBpbiB0dXJuIHNldHMgdGhlIGB2ZXJiYCBwcm9wZXJ0eSBvbiB0aGUgbWV0aG9kLCBvciBhY3Rpb24gb2JqZWN0c1xuICAgICAgLy8gd2hpY2ggaGF2ZSB0aGUgYHZlcmJgIHByb3BlcnR5OlxuICAgICAgaWYgKHZhbHVlPy52ZXJiKSB7XG4gICAgICAgIGNvbnRyb2xsZXJba2V5XSA9IHZhbHVlXG4gICAgICB9XG4gICAgfVxuICAgIC8vIFVzZSBgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoKWAgdG8gZ2V0IHRoZSBmaWVsZHMsIGluIG9yZGVyIHRvXG4gICAgLy8gbm90IGFsc28gcmVjZWl2ZSB2YWx1ZXMgZnJvbSBwYXJlbnRzICh0aG9zZSBhcmUgZmV0Y2hlZCBsYXRlciBpblxuICAgIC8vIGBpbmhlcml0VmFsdWVzKClgLCBzZWUgYGdldFBhcmVudFZhbHVlcygpYCkuXG4gICAgY29uc3QgcHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcylcbiAgICBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhwcm90bykuZm9yRWFjaChhZGRBY3Rpb24pXG4gICAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcykuZm9yRWFjaChhZGRBY3Rpb24pXG4gICAgcmV0dXJuIGNvbnRyb2xsZXJcbiAgfVxuXG4gIHNldHVwUm91dGUodmVyYiwgdXJsLCB0cmFuc2FjdGVkLCBhdXRob3JpemUsIGFjdGlvbiwgaGFuZGxlcnMpIHtcbiAgICB0aGlzLmxvZyhcbiAgICAgIGAke1xuICAgICAgICBjaGFsay5tYWdlbnRhKHZlcmIudG9VcHBlckNhc2UoKSlcbiAgICAgIH0gJHtcbiAgICAgICAgY2hhbGsuZ3JlZW4odGhpcy51cmwpXG4gICAgICB9JHtcbiAgICAgICAgY2hhbGsuY3lhbih1cmwuc2xpY2UodGhpcy51cmwubGVuZ3RoKSlcbiAgICAgIH0gJHtcbiAgICAgICAgY2hhbGsud2hpdGUodGhpcy5kZXNjcmliZUF1dGhvcml6ZShhdXRob3JpemUpKVxuICAgICAgfWAsXG4gICAgICB0aGlzLmxldmVsICsgMVxuICAgIClcbiAgICB0aGlzLmFwcC5hZGRSb3V0ZSh2ZXJiLCB1cmwsIHRyYW5zYWN0ZWQsIGhhbmRsZXJzLCB0aGlzLCBhY3Rpb24pXG4gIH1cblxuICBzZXR1cEFjdGlvbnModHlwZSkge1xuICAgIGNvbnN0IHtcbiAgICAgIHZhbHVlczogYWN0aW9ucyxcbiAgICAgIGF1dGhvcml6ZVxuICAgIH0gPSB0aGlzLnByb2Nlc3NWYWx1ZXModGhpcy5pbmhlcml0VmFsdWVzKHR5cGUpKVxuICAgIGZvciAoY29uc3QgW25hbWUsIGhhbmRsZXJdIG9mIE9iamVjdC5lbnRyaWVzKGFjdGlvbnMpKSB7XG4gICAgICB0aGlzLnNldHVwQWN0aW9uKHR5cGUsIGFjdGlvbnMsIG5hbWUsIGhhbmRsZXIsIGF1dGhvcml6ZVtuYW1lXSlcbiAgICB9XG4gICAgcmV0dXJuIGFjdGlvbnNcbiAgfVxuXG4gIHNldHVwQWN0aW9uKFxuICAgIHR5cGUsXG4gICAgYWN0aW9ucyxcbiAgICBuYW1lLFxuICAgIGhhbmRsZXIsXG4gICAgYXV0aG9yaXplLFxuICAgIC8vIFRoZXNlIHZhbHVlcyBhcmUgb25seSBjaGFuZ2VkIHdoZW4gY2FsbGVkIGZyb21cbiAgICAvLyBgQ29sbGVjdGlvbkNvbnRyb2xsZXIuc2V0dXBBY3Rpb24oKWA6XG4gICAgdmVyYiA9ICdnZXQnLFxuICAgIC8vIFRoZSBkZWZhdWx0IHBhdGggZm9yIGFjdGlvbnMgaXMgdGhlIG5vcm1hbGl6ZWQgbmFtZS5cbiAgICBwYXRoID0gdGhpcy5hcHAubm9ybWFsaXplUGF0aChuYW1lKVxuICApIHtcbiAgICBpZiAoIWlzRnVuY3Rpb24oaGFuZGxlcikpIHtcbiAgICAgIGhhbmRsZXIgPSBzZXR1cEhhbmRsZXJGcm9tT2JqZWN0KGhhbmRsZXIsIGFjdGlvbnMpXG4gICAgfVxuICAgIC8vIEN1c3RvbSBtZW1iZXIgYWN0aW9ucyBoYXZlIHRoZWlyIG93biBjbGFzcyBzbyB0aGV5IGNhbiBmZXRjaCB0aGUgbWVtYmVyc1xuICAgIC8vIGFoZWFkIG9mIHRoZWlyIGNhbGwuXG4gICAgY29uc3QgYWN0aW9uQ2xhc3MgPSB0eXBlID09PSAnbWVtYmVyJyA/IE1lbWJlckFjdGlvbiA6IENvbnRyb2xsZXJBY3Rpb25cbiAgICB0aGlzLnNldHVwQWN0aW9uUm91dGUoXG4gICAgICB0eXBlLFxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5ldy1jYXBcbiAgICAgIG5ldyBhY3Rpb25DbGFzcyh0aGlzLCBoYW5kbGVyLCB0eXBlLCBuYW1lLCB2ZXJiLCBwYXRoLCBhdXRob3JpemUpXG4gICAgKVxuICB9XG5cbiAgc2V0dXBBY3Rpb25Sb3V0ZSh0eXBlLCBhY3Rpb24pIHtcbiAgICBjb25zdCB1cmwgPSB0aGlzLmdldFVybCh0eXBlLCBhY3Rpb24ucGF0aClcbiAgICBjb25zdCB7IHZlcmIsIHRyYW5zYWN0ZWQsIGF1dGhvcml6ZSB9ID0gYWN0aW9uXG4gICAgdGhpcy5zZXR1cFJvdXRlKHZlcmIsIHVybCwgdHJhbnNhY3RlZCwgYXV0aG9yaXplLCBhY3Rpb24sIFtcbiAgICAgIGFzeW5jIGN0eCA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgYWN0aW9uLmNhbGxBY3Rpb24oY3R4KVxuICAgICAgICAgIGlmIChyZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY3R4LmJvZHkgPSByZXNcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIHRocm93IGVyciBpbnN0YW5jZW9mIFJlc3BvbnNlRXJyb3IgPyBlcnIgOiBuZXcgV3JhcHBlZEVycm9yKGVycilcbiAgICAgICAgfVxuICAgICAgfVxuICAgIF0pXG4gIH1cblxuICBzZXR1cEFzc2V0cygpIHtcbiAgICBjb25zdCB7XG4gICAgICB2YWx1ZXM6IGFzc2V0cyxcbiAgICAgIGF1dGhvcml6ZVxuICAgIH0gPSB0aGlzLnByb2Nlc3NWYWx1ZXModGhpcy5pbmhlcml0VmFsdWVzKCdhc3NldHMnKSlcbiAgICBmb3IgKGNvbnN0IFtkYXRhUGF0aCwgY29uZmlnXSBvZiBPYmplY3QuZW50cmllcyhhc3NldHMgfHwge30pKSB7XG4gICAgICB0aGlzLnNldHVwQXNzZXRSb3V0ZShkYXRhUGF0aCwgY29uZmlnLCBhdXRob3JpemVbZGF0YVBhdGhdKVxuICAgIH1cbiAgICByZXR1cm4gYXNzZXRzXG4gIH1cblxuICBzZXR1cEFzc2V0Um91dGUoZGF0YVBhdGgsIGNvbmZpZywgYXV0aG9yaXplKSB7XG4gICAgY29uc3Qge1xuICAgICAgc3RvcmFnZTogc3RvcmFnZU5hbWUsXG4gICAgICAvLyBUT0RPOiBXaGF0IGV4YWN0bHkgc2hvdWxkIGNvbnRyb2wgdGhlIHVzZSBvZiBgdHJhbnNhY3RlZGA/XG4gICAgICB0cmFuc2FjdGVkLFxuICAgICAgLi4uc2V0dGluZ3NcbiAgICB9ID0gY29uZmlnXG4gICAgY29uc3Qgc3RvcmFnZSA9IHRoaXMuYXBwLmdldFN0b3JhZ2Uoc3RvcmFnZU5hbWUpXG4gICAgaWYgKCFzdG9yYWdlKSB7XG4gICAgICB0aHJvdyBuZXcgQ29udHJvbGxlckVycm9yKHRoaXMsXG4gICAgICAgIGBVbmtub3duIHN0b3JhZ2UgY29uZmlndXJhdGlvbjogJyR7c3RvcmFnZU5hbWV9J2BcbiAgICAgIClcbiAgICB9XG4gICAgY29uc3QgdG9rZW5zID0gcGFyc2VEYXRhUGF0aChkYXRhUGF0aClcbiAgICBjb25zdCBnZXREYXRhUGF0aCA9IGNhbGxiYWNrID0+IG5vcm1hbGl6ZURhdGFQYXRoKHRva2Vucy5tYXAoY2FsbGJhY2spKVxuXG4gICAgLy8gUmVwbGFjZSB3aWxkY2FyZHMgd2l0aCBudW1iZXJlZCBpbmRpY2VzIGFuZCBjb252ZXJ0IHRvICcvJy1ub3RhdGlvbjpcbiAgICBsZXQgaW5kZXggPSAwXG4gICAgY29uc3QgbXVsdGlwbGVXaWxkY2FyZHMgPSB0b2tlbnMuZmlsdGVyKHRva2VuID0+IHRva2VuID09PSAnKicpLmxlbmd0aCA+IDFcbiAgICBjb25zdCBub3JtYWxpemVkUGF0aCA9IGdldERhdGFQYXRoKFxuICAgICAgdG9rZW4gPT4gdG9rZW4gPT09ICcqJ1xuICAgICAgICA/IG11bHRpcGxlV2lsZGNhcmRzXG4gICAgICAgICAgPyBgOmluZGV4JHsrK2luZGV4fWBcbiAgICAgICAgICA6ICc6aW5kZXgnXG4gICAgICAgIDogdGhpcy5hcHAubm9ybWFsaXplUGF0aCh0b2tlbilcbiAgICApXG5cbiAgICAvLyBDb252ZXJ0IGBkYXRhUGF0aGAgdG8gYSByZWd1bGFyIGV4cHJlc3Npb24gdG8gbWF0Y2ggZmllbGQgbmFtZXNcbiAgICAvLyBhZ2FpbnN0LCBidXQgY29udmVydCB3aWxkY2FyZHMgKCopIHRvIG1hdGNoIGJvdGggbnVtZXJpYyBpZHMgYW5kIHdvcmRzLFxuICAgIC8vIGUuZy4gJ2NyZWF0ZSc6XG4gICAgY29uc3QgbWF0Y2hEYXRhUGF0aCA9IG5ldyBSZWdFeHAoXG4gICAgICBgXiR7Z2V0RGF0YVBhdGgodG9rZW4gPT4gdG9rZW4gPT09ICcqJyA/ICdcXFxcdysnIDogdG9rZW4pfSRgXG4gICAgKVxuXG4gICAgY29uc3QgdXJsID0gdGhpcy5nZXRVcmwoJ2NvbnRyb2xsZXInLCBgdXBsb2FkLyR7bm9ybWFsaXplZFBhdGh9YClcbiAgICBjb25zdCB1cGxvYWQgPSBzdG9yYWdlLmdldFVwbG9hZEhhbmRsZXIoe1xuICAgICAgLi4uc2V0dGluZ3MsXG4gICAgICAvLyBPbmx5IGxldCB1cGxvYWRzIHBhc3MgdGhhdCBtYXRjaCB0aGUgbm9ybWFsaXplUGF0aCArIHdpbGRjYXJkczpcbiAgICAgIGZpbGVGaWx0ZXI6IChyZXEsIGZpbGUsIGNiKSA9PiB7XG4gICAgICAgIGNiKG51bGwsIG1hdGNoRGF0YVBhdGgudGVzdChmaWxlLmZpZWxkbmFtZSkpXG4gICAgICB9XG4gICAgfSlcblxuICAgIGNvbnN0IGF1dGhvcml6YXRpb24gPSB0aGlzLnByb2Nlc3NBdXRob3JpemUoYXV0aG9yaXplKVxuICAgIHRoaXMuc2V0dXBSb3V0ZSgncG9zdCcsIHVybCwgdHJhbnNhY3RlZCwgYXV0aG9yaXplLCBudWxsLCBbXG4gICAgICBhc3luYyAoY3R4LCBuZXh0KSA9PiB7XG4gICAgICAgIGF3YWl0IHRoaXMuaGFuZGxlQXV0aG9yaXphdGlvbihhdXRob3JpemF0aW9uLCBjdHgpXG4gICAgICAgIHJldHVybiBuZXh0KClcbiAgICAgIH0sXG5cbiAgICAgIHVwbG9hZCxcblxuICAgICAgYXN5bmMgKGN0eCwgbmV4dCkgPT4ge1xuICAgICAgICBjb25zdCBmaWxlcyA9IHN0b3JhZ2UuY29udmVydFN0b3JhZ2VGaWxlcyhjdHgucmVxdWVzdC5maWxlcylcbiAgICAgICAgYXdhaXQgdGhpcy5hcHAuY3JlYXRlQXNzZXRzKHN0b3JhZ2UsIGZpbGVzLCAwLCBjdHgudHJhbnNhY3Rpb24pXG4gICAgICAgIC8vIFNlbmQgdGhlIGZpbGUgb2JqZWN0cyBiYWNrIGZvciB0aGUgdXBsb2FkIGNvbXBvbmVudCB0byBzdG9yZSBpbiB0aGVcbiAgICAgICAgLy8gZGF0YS5cbiAgICAgICAgY3R4LmJvZHkgPSBmaWxlc1xuICAgICAgICByZXR1cm4gbmV4dCgpXG4gICAgICB9XG4gICAgXSlcbiAgfVxuXG4gIGNvbXBvc2UoKSB7XG4gICAgLy8gVG8gYmUgb3ZlcnJpZGRlbiBpbiBzdWItY2xhc3NlcywgaWYgdGhlIGNvbnRyb2xsZXIgbmVlZHMgdG8gaW5zdGFsbFxuICAgIC8vIG1pZGRsZXdhcmUuIEZvciBub3JtYWwgcm91dGVzLCB1c2UgYHRoaXMuYXBwLmFkZFJvdXRlKClgIGluc3RlYWQuXG4gIH1cblxuICBnZXRQYXRoKHR5cGUsIHBhdGgpIHtcbiAgICAvLyBUbyBiZSBvdmVycmlkZGVuIGJ5IHN1Yi1jbGFzc2VzLlxuICAgIHJldHVybiBwYXRoXG4gIH1cblxuICBnZXRVcmwodHlwZSwgcGF0aCkge1xuICAgIHBhdGggPSB0aGlzLmdldFBhdGgodHlwZSwgcGF0aClcbiAgICAvLyBVc2UgJy4nIGFzIHRoZSBwYXRoIGZvciB0aGUgY29udHJvbGxlcidzIFwiaW5kZXhcIiBhY3Rpb24uXG4gICAgcmV0dXJuIHBhdGggJiYgcGF0aCAhPT0gJy4nID8gYCR7dGhpcy51cmx9LyR7cGF0aH1gIDogdGhpcy51cmxcbiAgfVxuXG4gIGluaGVyaXRWYWx1ZXModHlwZSkge1xuICAgIC8vIEdldHMgdGhlIGNvbnRyb2xsZXIgY2xhc3MncyBpbnN0YW5jZSBmaWVsZCBmb3IgYSBnaXZlbiBhY3Rpb24gdHlwZSwgZS5nLlxuICAgIC8vIGBjb250cm9sbGVyYCAoQ29udHJvbGxlciksIGBjb2xsZWN0aW9uYCwgYG1lbWJlcmAgKE1vZGVsQ29udHJvbGxlcixcbiAgICAvLyBSZWxhdGlvbkNvbnRyb2xsZXIpLCBgcmVsYXRpb25gIChSZWxhdGlvbkNvbnRyb2xsZXIpLCBhbmQgc2V0cyB1cCBhblxuICAgIC8vIGluaGVyaXRhbmNlIGNoYWluIGZvciBpdCB0aGF0IGdvZXMgYWxsIHRoZSB3YXkgdXAgdG8gaXQgYmFzZSBjbGFzcyAoZS5nLlxuICAgIC8vIENvbGxlY3Rpb25Db250cm9sbGVyKSwgc28gdGhhdCB0aGUgZGVmYXVsdCBkZWZpbml0aW9ucyBmb3IgYWxsIGh0dHAgdmVyYnNcbiAgICAvLyBjYW4gYmUgY29ycmVjdGx5IGluaGVyaXRlZCBhbmQgb3ZlcnJpZGRlbiB3aGlsZSB1c2luZyBgc3VwZXIuPGFjdGlvbj4oKWAuXG4gICAgY29uc3QgcGFyZW50Q2xhc3MgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcy5jb25zdHJ1Y3RvcilcbiAgICAvLyBDcmVhdGUgb25lIGluc3RhbmNlIG9mIGVhY2ggY29udHJvbGxlciBjbGFzcyB1cCB0aGUgY2hhaW4gaW4gb3JkZXIgdG9cbiAgICAvLyBnZXQgdG8gdGhlaXIgZGVmaW5pdGlvbnMgb2YgdGhlIGluaGVyaXRhYmxlIHZhbHVlcy4gQ2FjaGUgYm90aCBpbnN0YW5jZVxuICAgIC8vIGFuZCByZXNvbHZlZCB2YWx1ZXMgcGVyIHBhcmVudENsYXNzIGluIGFuIGluaGVyaXRhbmNlTWFwLlxuICAgIGlmICghaW5oZXJpdGFuY2VNYXAuaGFzKHBhcmVudENsYXNzKSkge1xuICAgICAgaW5oZXJpdGFuY2VNYXAuc2V0KHBhcmVudENsYXNzLCB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuZXctY2FwXG4gICAgICAgIGluc3RhbmNlOiBuZXcgcGFyZW50Q2xhc3ModGhpcy5hcHAsIHRoaXMubmFtZXNwYWNlKVxuICAgICAgfSlcbiAgICB9XG4gICAgY29uc3QgZW50cnkgPSBpbmhlcml0YW5jZU1hcC5nZXQocGFyZW50Q2xhc3MpXG4gICAgaWYgKCFlbnRyeVt0eXBlXSkge1xuICAgICAgY29uc3QgcGFyZW50ID0gZW50cnkuaW5zdGFuY2VcbiAgICAgIGxldCB2YWx1ZXMgPSBwYXJlbnRbdHlwZV1cbiAgICAgIGlmIChwYXJlbnRDbGFzcyAhPT0gQ29udHJvbGxlcikge1xuICAgICAgICAvLyBSZWN1cnNpdmVseSBzZXQgdXAgaW5oZXJpdGFuY2UgY2hhaW5zLlxuICAgICAgICB2YWx1ZXMgPSBwYXJlbnQuaW5oZXJpdFZhbHVlcyh0eXBlKVxuICAgICAgfVxuICAgICAgZW50cnlbdHlwZV0gPSB2YWx1ZXNcbiAgICB9XG4gICAgLy8gSWYgdGhlcmUgYXJlIG5vIHZhbHVlcyBkZWZpbmVkIG9uIGB0aGlzYCB0aGF0IGRpZmZlciBmcm9tIHRoZSBwYXJlbnQsXG4gICAgLy8gc2V0IHRvIGFuIGVtcHR5IG9iamVjdCBzbyBpbmhlcml0YW5jZSBjYW4gYmUgc2V0IHVwIGFuZCBgcHJvY2Vzc1ZhbHVlcygpYFxuICAgIC8vIGNhbiBzdGlsbCBiZSBjYWxsZWQuXG4gICAgLy8gTk9URTogV2UgY2FuJ3QgY2hlY2sgd2l0aCBgdGhpcy5oYXNPd25Qcm9wZXJ0eSh0eXBlKWAgYmVjYXVzZSB0aGVcbiAgICAvLyBmaWVsZCBjYW4gYmUgb24gdGhlIGNsYXNzIHByb3RvdHlwZSBhcyB3ZWxsLCBpbiBjYXNlIG9mIGFjY2Vzc29ycy5cbiAgICBjb25zdCBwYXJlbnRWYWx1ZXMgPSBlbnRyeVt0eXBlXVxuICAgIGxldCBjdXJyZW50VmFsdWVzID0gdGhpc1t0eXBlXVxuICAgIGlmIChjdXJyZW50VmFsdWVzICYmIGN1cnJlbnRWYWx1ZXMgPT09IHBhcmVudFZhbHVlcykge1xuICAgICAgY3VycmVudFZhbHVlcyA9IHRoaXNbdHlwZV0gPSB7fVxuICAgIH1cbiAgICAvLyBDb21iaW5lIHBhcmVudFZhbHVlcyBhbmQgY3VycmVudFZhbHVlcyB3aXRoIGNvcnJlY3QgaW5oZXJpdGFuY2UuXG4gICAgcmV0dXJuIGlzT2JqZWN0KHBhcmVudFZhbHVlcykgJiYgaXNPYmplY3QoY3VycmVudFZhbHVlcylcbiAgICAgID8gT2JqZWN0LnNldFByb3RvdHlwZU9mKGN1cnJlbnRWYWx1ZXMsIHBhcmVudFZhbHVlcylcbiAgICAgIDogY3VycmVudFZhbHVlc1xuICB9XG5cbiAgcHJvY2Vzc1ZhbHVlcyh2YWx1ZXMpIHtcbiAgICBpZiAoIXZhbHVlcykgcmV0dXJuIHt9XG4gICAgLy8gUmVzcGVjdCBgYWxsb3dgIHNldHRpbmdzIGFuZCBjbGVhciBlbnRyaWVzIHRoYXQgYXJlbid0IGFsbG93ZWQuXG4gICAgLy8gQWxzbyBjb2xsZWN0IGFuZCBleHBhbmQgYGF1dGhvcml6ZWAgc2V0dGluZ3Mgc28gdGhhdCBpbiB0aGUgZW5kLCBhblxuICAgIC8vIGBhdXRob3JpemVgIG9iamVjdCBjYW4gYmUgcmV0dXJuZWQgd2l0aCB2YWxpZCBzZXR0aW5ncyBmb3IgYWxsIHZhbHVlcy5cbiAgICAvL1xuICAgIC8vIFJ1bGVzOlxuICAgIC8vIC0gT3duIHZhbHVlcyBvbiBvYmplY3RzIHRoYXQgZG9uJ3QgZGVmaW5lIGFuIGBhbGxvd2AgYXJyYXkgYXJlXG4gICAgLy8gICBhdXRvbWF0aWNhbGx5IGFsbG93ZWQuIElmIGFuIGBhbGxvd2AgYXJyYXkgaXMgZGVmaW5lZCBhcyB3ZWxsLCB0aGVuXG4gICAgLy8gICB0aGVzZSBvd24gdmFsdWVzIG5lZWQgdG8gYmUgZXhwbGljaXRseSBsaXN0ZWQuXG4gICAgLy8gLSBJZiBubyBgYWxsb3dgIGFycmF5cyBhcmUgZGVmaW5lZCBpbiB0aGUgcHJvdG90eXBhbCBoaWVyYXJjaHksIGVhY2hcbiAgICAvLyAgIGxldmVsIGFsbG93cyBpdHMgb3duIHZhbHVlcywgYW5kIHRoZXNlIGFyZSBtZXJnZWQsIGV4Y2VwdCBmb3IgdGhvc2VcbiAgICAvLyAgIG1hcmtlZCBhcyBgJGNvcmVgLCB3aGljaCBuZWVkIHRvIGJlIGV4cGxpY2l0bHkgbGlzdGVkIGluIGBhbGxvd2AuXG5cbiAgICAvLyBOT1RFOiBgaGFuZGxlQWxsb3coKWAgYW5kIGBoYW5kbGVBdXRob3JpemUoKWAgYXJlIGFwcGxpZWQgaW4gc2VxdWVuY2Ugb2ZcbiAgICAvLyB0aGUgYHZhbHVlc2AgaW5oZXJpdGFuY2UsIGZyb20gc3ViLWNsYXNzIHRvIGJhc2UtY2xhc3MuXG5cbiAgICBjb25zdCBtZXJnZWRBbGxvdyA9IHt9XG4gICAgY29uc3QgbWVyZ2VkQXV0aG9yaXplID0ge31cbiAgICBsZXQgaGFzT3duQWxsb3cgPSBmYWxzZVxuXG4gICAgY29uc3QgZXhjbHVkZUtleSA9IGtleSA9PiBbJ2FsbG93JywgJ2F1dGhvcml6ZSddLmluY2x1ZGVzKGtleSlcblxuICAgIGNvbnN0IGhhbmRsZUFsbG93ID0gKGFsbG93LCBjdXJyZW50KSA9PiB7XG4gICAgICBpZiAoYWxsb3cpIHtcbiAgICAgICAgYWxsb3cgPSBhc0FycmF5KGFsbG93KVxuICAgICAgICBoYXNPd25BbGxvdyA9IHRydWVcbiAgICAgIH0gZWxzZSBpZiAoIWhhc093bkFsbG93KSB7XG4gICAgICAgIC8vIE9ubHkga2VlcCBhZGRpbmcgdG8gdGhlIG1lcmdlZCBgYWxsb3dgIGlmIHdlIGRpZG4ndCBhbHJlYWR5IGVuY291bnRlclxuICAgICAgICAvLyBhbiBvd24gYGFsbG93YCBvYmplY3QgZnVydGhlciB1cCB0aGUgY2hhaW4uXG4gICAgICAgIGFsbG93ID0gT2JqZWN0LmtleXMoY3VycmVudClcbiAgICAgIH1cbiAgICAgIGlmIChhbGxvdykge1xuICAgICAgICBpZiAoYWxsb3cuaW5jbHVkZXMoJyonKSkge1xuICAgICAgICAgIGFsbG93ID0gZ2V0QWxsS2V5cyhjdXJyZW50KVxuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIGFsbG93KSB7XG4gICAgICAgICAgaWYgKCFleGNsdWRlS2V5KGtleSkpIHtcbiAgICAgICAgICAgIG1lcmdlZEFsbG93W2tleV0gPSB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgaGFuZGxlQXV0aG9yaXplID0gYXV0aG9yaXplID0+IHtcbiAgICAgIGNvbnN0IGFkZCA9IChrZXksIHZhbHVlKSA9PiB7XG4gICAgICAgIC8vIFNpbmNlIHdlJ3JlIHdhbGtpbmcgdXAgaW4gdGhlIGluaGVyaXRhbmNlIGNoYWluLCBvbmx5IHRha2Ugb24gYW5cbiAgICAgICAgLy8gYXV0aG9yaXplIHNldHRpbmcgZm9yIGEgZ2l2ZW4ga2V5IGlmIGl0IHdhc24ndCBhbHJlYWR5IGRlZmluZWQgYmVmb3JlXG4gICAgICAgIGlmIChcbiAgICAgICAgICBrZXkgaW4gdmFsdWVzICYmXG4gICAgICAgICAgIShrZXkgaW4gbWVyZ2VkQXV0aG9yaXplKSAmJlxuICAgICAgICAgICFleGNsdWRlS2V5KGtleSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgbWVyZ2VkQXV0aG9yaXplW2tleV0gPSB2YWx1ZVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChpc09iamVjdChhdXRob3JpemUpKSB7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIGF1dGhvcml6ZSkge1xuICAgICAgICAgIGFkZChrZXksIGF1dGhvcml6ZVtrZXldKVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGF1dGhvcml6ZSAhPSBudWxsKSB7XG4gICAgICAgIC8vIFRoaXMgaXMgYSB2YWx1ZXMtd2lkZSBzZXR0aW5nLiBMb29wIHRocm91Z2ggYWxsIHZhbHVlcywgbm90IGp1c3RcbiAgICAgICAgLy8gY3VycmVudCBvbmVzLCBhbmQgYXBwbHkgdG8gYW55IGFjdGlvbiB0aGF0IGRvZXNuJ3QgYWxyZWFkeSBoYXZlIG9uZTpcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gdmFsdWVzKSB7XG4gICAgICAgICAgYWRkKGtleSwgYXV0aG9yaXplKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUHJvY2VzcyB0aGUgYGFsbG93YCBhbmQgYGF1dGhvcml6ZWAgc2V0dGluZ3MgaW4gc2VxdWVuY2Ugb2YgdGhlIGB2YWx1ZXNgXG4gICAgLy8gaW5oZXJpdGFuY2UsIGZyb20gc3ViLWNsYXNzIHRvIGJhc2UtY2xhc3MuXG4gICAgbGV0IGN1cnJlbnQgPSB2YWx1ZXNcbiAgICB3aGlsZSAoY3VycmVudCAhPT0gT2JqZWN0LnByb3RvdHlwZSAmJiAhY3VycmVudC5oYXNPd25Qcm9wZXJ0eSgnJGNvcmUnKSkge1xuICAgICAgaGFuZGxlQWxsb3coZ2V0T3duUHJvcGVydHkoY3VycmVudCwgJ2FsbG93JyksIGN1cnJlbnQpXG4gICAgICBoYW5kbGVBdXRob3JpemUoZ2V0T3duUHJvcGVydHkoY3VycmVudCwgJ2F1dGhvcml6ZScpKVxuICAgICAgY3VycmVudCA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihjdXJyZW50KVxuICAgIH1cblxuICAgIC8vIEF0IHRoZSBlbmQgb2YgdGhlIGNoYWluLCBhbHNvIHN1cHBvcnQgYm90aCBzZXR0aW5ncyBvbiB0aGUgY29udHJvbGxlci1cbiAgICAvLyBsZXZlbCwgYW5kIHRodXMgYXBwbGllZCB0byBhbGwgYWN0aW9uIG9iamVjdHMgaW4gdGhlIGNvbnRyb2xsZXIuXG4gICAgaWYgKHRoaXMuYWxsb3cpIHtcbiAgICAgIGhhbmRsZUFsbG93KHRoaXMuYWxsb3csIHZhbHVlcylcbiAgICB9XG4gICAgaWYgKHRoaXMuYXV0aG9yaXplKSB7XG4gICAgICBoYW5kbGVBdXRob3JpemUodGhpcy5hdXRob3JpemUpXG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIC8vIENyZWF0ZSBhIGZpbHRlcmVkIGB2YWx1ZXNgIG9iamVjdCB0aGF0IG9ubHkgY29udGFpbnMgdGhlIGFsbG93ZWQgZmllbGRzXG4gICAgICB2YWx1ZXM6IGdldEFsbEtleXModmFsdWVzKS5yZWR1Y2UoXG4gICAgICAgIChyZXN1bHQsIGtleSkgPT4ge1xuICAgICAgICAgIGlmIChtZXJnZWRBbGxvd1trZXldKSB7XG4gICAgICAgICAgICByZXN1bHRba2V5XSA9IHZhbHVlc1trZXldXG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiByZXN1bHRcbiAgICAgICAgfSxcbiAgICAgICAgLy8gQ3JlYXRlIGEgbmV3IG9iamVjdCBmb3IgdGhlIGZpbHRlcmVkIGB2YWx1ZXNgIHRoYXQga2VlcHMgaW5oZXJpdGFuY2VcbiAgICAgICAgLy8gaW50YWN0LiBUaGlzIGlzIHJlcXVpcmVkIGJ5IGBzZXR1cEhhbmRsZXJGcm9tT2JqZWN0KClgLCB0byBzdXBwb3J0XG4gICAgICAgIC8vIGBzdXBlcmAgaW4gaGFuZGxlciBmdW5jdGlvbnMuXG4gICAgICAgIE9iamVjdC5jcmVhdGUoT2JqZWN0LmdldFByb3RvdHlwZU9mKHZhbHVlcykpXG4gICAgICApLFxuICAgICAgYWxsb3c6IE9iamVjdC5rZXlzKG1lcmdlZEFsbG93KSxcbiAgICAgIGF1dGhvcml6ZTogbWVyZ2VkQXV0aG9yaXplXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZW1pdEhvb2sodHlwZSwgaGFuZGxlUmVzdWx0LCBjdHgsIC4uLmFyZ3MpIHtcbiAgICBsZXQgcmVzdWx0ID0gaGFuZGxlUmVzdWx0ID8gYXJncy5zaGlmdCgpIDogdW5kZWZpbmVkXG4gICAgZm9yIChjb25zdCBoYW5kbGVyIG9mIHRoaXMubGlzdGVuZXJzKHR5cGUpKSB7XG4gICAgICBpZiAoaGFuZGxlUmVzdWx0KSB7XG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGhhbmRsZXIuY2FsbCh0aGlzLCBjdHgsIHJlc3VsdCwgLi4uYXJncylcbiAgICAgICAgaWYgKHJlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmVzdWx0ID0gcmVzXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGF3YWl0IGhhbmRsZXIuY2FsbCh0aGlzLCBjdHgsIC4uLmFyZ3MpXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHRcbiAgfVxuXG4gIGFzeW5jIGdldE1lbWJlcigvKiBjdHgsIGJhc2UgPSB0aGlzLCBwYXJhbSA9IHsgLi4uIH0gKi8pIHtcbiAgICAvLyBUaGlzIGlzIG9ubHkgZGVmaW5lZCBpbiBgQ29sbGVjdGlvbkNvbnRyb2xsZXJgLCB3aGVyZSBpdCByZXNvbHZlcyB0byB0aGVcbiAgICAvLyBtZW1iZXIgcmVwcmVzZW50ZWQgYnkgdGhlIGdpdmVuIHJvdXRlLlxuICAgIHJldHVybiBudWxsXG4gIH1cblxuICAvKipcbiAgICogQ29udmVydHMgdGhlIGF1dGhvcml6ZSBjb25maWcgc2V0dGluZ3MgaW50byBhbiBhdXRob3JpemF0aW9uIGZ1bmN0aW9uIHRoYXRcbiAgICogY2FuIGJlIHBhc3NlZCB0byBgaGFuZGxlQXV0aG9yaXphdGlvbigpYC5cbiAgICpcbiAgICogQHBhcmFtIHtib29sZWFufGZ1bmN0aW9ufHN0cmluZ3xzdHJpbmdbXX0gYXV0aG9yaXplIHRoZSBhdXRob3JpemUgY29uZmlnXG4gICAqIHNldHRpbmdzXG4gICAqIEByZXR1cm4ge2Z1bmN0aW9ufSB0aGUgYXV0aG9yaXphdGlvbiBmdW5jdGlvblxuICAgKi9cbiAgcHJvY2Vzc0F1dGhvcml6ZShhdXRob3JpemUpIHtcbiAgICBpZiAoYXV0aG9yaXplID09IG51bGwpIHtcbiAgICAgIHJldHVybiAoKSA9PiB0cnVlXG4gICAgfSBlbHNlIGlmIChpc0Jvb2xlYW4oYXV0aG9yaXplKSkge1xuICAgICAgcmV0dXJuICgpID0+IGF1dGhvcml6ZVxuICAgIH0gZWxzZSBpZiAoaXNGdW5jdGlvbihhdXRob3JpemUpKSB7XG4gICAgICByZXR1cm4gYXN5bmMgKGN0eCwgbWVtYmVyKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGF1dGhvcml6ZShjdHgsIG1lbWJlcilcbiAgICAgICAgLy8gUGFzcyByZXMgdGhyb3VnaCBgcHJvY2Vzc0F1dGhvcml6ZSgpYCB0byBzdXBwb3J0IHN0cmluZ3MgJiBhcnJheXMuXG4gICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NBdXRob3JpemUocmVzKShjdHgsIG1lbWJlcilcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGlzU3RyaW5nKGF1dGhvcml6ZSkgfHwgaXNBcnJheShhdXRob3JpemUpKSB7XG4gICAgICByZXR1cm4gYXN5bmMgKGN0eCwgbWVtYmVyKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgdXNlciB9ID0gY3R4LnN0YXRlXG4gICAgICAgIGlmICghdXNlcikge1xuICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHZhbHVlcyA9IGFzQXJyYXkoYXV0aG9yaXplKVxuICAgICAgICAvLyBGb3IgJyRvd25lcicsIGZldGNoIGBtZW1iZXJgIG5vdyBpbiBjYXNlIHRoZSBhY3Rpb24gcGFyYW1ldGVyc1xuICAgICAgICAvLyBkaWRuJ3QgYWxyZWFkeSByZXF1ZXN0IGl0OlxuICAgICAgICBpZiAoIW1lbWJlciAmJiB2YWx1ZXMuaW5jbHVkZXMoJyRvd25lcicpKSB7XG4gICAgICAgICAgbWVtYmVyID0gYXdhaXQgdGhpcy5nZXRNZW1iZXIoY3R4KVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiAhIXZhbHVlcy5maW5kKFxuICAgICAgICAvLyBTdXBwb3J0IDMgc2NlbmFyaW9zOlxuICAgICAgICAvLyAtICckc2VsZic6IFRoZSByZXF1ZXN0ZWQgbWVtYmVyIGlzIGNoZWNrZWQgYWdhaW5zdCBgY3R4LnN0YXRlLnVzZXJgXG4gICAgICAgIC8vICAgYW5kIHRoZSBhY3Rpb24gaXMgb25seSBhdXRob3JpemVkIGlmIGl0IG1hdGNoZXMgdGhlIG1lbWJlci5cbiAgICAgICAgLy8gLSAnJG93bmVyJzogVGhlIG1lbWJlciBpcyBhc2tlZCBpZiBpdCBpcyBvd25lZCBieSBgY3R4LnN0YXRlLnVzZXJgXG4gICAgICAgIC8vICAgdGhyb3VnaCB0aGUgb3B0aW9uYWwgYE1vZGVsLiRoYXNPd25lcigpYCBtZXRob2QuXG4gICAgICAgIC8vIC0gYW55IHN0cmluZzogIGBjdHguc3RhdGUudXNlcmAgaXMgY2hlY2tlZCBmb3IgdGhpcyByb2xlIHRocm91Z2hcbiAgICAgICAgLy8gICB0aGUgb3ZlcnJpZGFibGUgYFVzZXJNb2RlbC5oYXNSb2xlKClgIG1ldGhvZC5cbiAgICAgICAgICB2YWx1ZSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUgPT09ICckc2VsZidcbiAgICAgICAgICAgICAgPyB1c2VyLmNvbnN0cnVjdG9yID09PSB0aGlzLm1vZGVsQ2xhc3MgJiZcbiAgICAgICAgICAgICAgZXF1YWxzKHVzZXIuJGlkKCksIGN0eC5tZW1iZXJJZClcbiAgICAgICAgICAgICAgOiB2YWx1ZSA9PT0gJyRvd25lcidcbiAgICAgICAgICAgICAgICA/IG1lbWJlcj8uJGhhc093bmVyPy4odXNlcilcbiAgICAgICAgICAgICAgICA6IHVzZXIuJGhhc1JvbGUodmFsdWUpXG4gICAgICAgICAgfVxuICAgICAgICApXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBDb250cm9sbGVyRXJyb3IodGhpcyxcbiAgICAgICAgYFVuc3VwcG9ydGVkIGF1dGhvcml6ZSBzZXR0aW5nOiAnJHthdXRob3JpemV9J2BcbiAgICAgIClcbiAgICB9XG4gIH1cblxuICBkZXNjcmliZUF1dGhvcml6ZShhdXRob3JpemUpIHtcbiAgICByZXR1cm4gaXNGdW5jdGlvbihhdXRob3JpemUpXG4gICAgICA/IGRlc2NyaWJlRnVuY3Rpb24oYXV0aG9yaXplKVxuICAgICAgOiBpc1N0cmluZyhhdXRob3JpemUpXG4gICAgICAgID8gYCcke2F1dGhvcml6ZX0nYFxuICAgICAgICA6IGlzQXJyYXkoYXV0aG9yaXplKVxuICAgICAgICAgID8gYFske2F1dGhvcml6ZS5tYXAodmFsdWUgPT4gYCcke3ZhbHVlfSdgKS5qb2luKCcsICcpfV1gXG4gICAgICAgICAgOiAnJ1xuICB9XG5cbiAgYXN5bmMgaGFuZGxlQXV0aG9yaXphdGlvbihhdXRob3JpemF0aW9uLCBjdHgsIG1lbWJlcikge1xuICAgIGNvbnN0IG9rID0gYXdhaXQgYXV0aG9yaXphdGlvbihjdHgsIG1lbWJlcilcbiAgICBpZiAob2sgIT09IHRydWUpIHtcbiAgICAgIHRocm93IG5ldyBBdXRob3JpemF0aW9uRXJyb3IoKVxuICAgIH1cbiAgfVxuXG4gIGxvZyhzdHIsIGluZGVudCA9IDApIHtcbiAgICBpZiAodGhpcy5sb2dnaW5nKSB7XG4gICAgICBjb25zb2xlLmluZm8oYCR7JyAgJy5yZXBlYXQoaW5kZW50KX0ke3N0cn1gKVxuICAgIH1cbiAgfVxufVxuXG5FdmVudEVtaXR0ZXIubWl4aW4oQ29udHJvbGxlci5wcm90b3R5cGUpXG5cbmNvbnN0IGluaGVyaXRhbmNlTWFwID0gbmV3IFdlYWtNYXAoKVxuXG5mdW5jdGlvbiBzZXR1cEhhbmRsZXJGcm9tT2JqZWN0KG9iamVjdCwgYWN0aW9ucykge1xuICBjb25zdCB7XG4gICAgaGFuZGxlcixcbiAgICBhY3Rpb24sXG4gICAgYXV0aG9yaXplLFxuICAgIHBhcmFtZXRlcnMsXG4gICAgcmV0dXJucyxcbiAgICBzY29wZSxcbiAgICB0cmFuc2FjdGVkXG4gIH0gPSBvYmplY3RcblxuICAvLyBJbiBvcmRlciB0byBzdXBvcnQgYHN1cGVyYCBjYWxscyBpbiB0aGUgYGhhbmRsZXJgIGZ1bmN0aW9uIGluIG9iamVjdFxuICAvLyBub3RhdGlvbiwgZGVwbG95IHRoaXMgY3JhenkgSlMgc29yY2VyeTpcbiAgT2JqZWN0LnNldFByb3RvdHlwZU9mKG9iamVjdCwgT2JqZWN0LmdldFByb3RvdHlwZU9mKGFjdGlvbnMpKVxuXG4gIGhhbmRsZXIuYXV0aG9yaXplID0gYXV0aG9yaXplXG4gIGhhbmRsZXIudHJhbnNhY3RlZCA9IHRyYW5zYWN0ZWRcblxuICBpZiAoYWN0aW9uKSB7XG4gICAgY29uc3QgW3ZlcmIsIHBhdGhdID0gYXNBcnJheShhY3Rpb24pXG4gICAgaGFuZGxlci52ZXJiID0gdmVyYlxuICAgIGhhbmRsZXIucGF0aCA9IHBhdGhcbiAgfVxuXG4gIGlmIChwYXJhbWV0ZXJzKSB7XG4gICAgY29uc3QgW19wYXJhbWV0ZXJzLCBvcHRpb25zXSA9IHBhcmFtZXRlcnNcbiAgICBjb25zdCBoYXNPcHRpb25zID0gaXNBcnJheShfcGFyYW1ldGVycylcbiAgICBoYW5kbGVyLnBhcmFtZXRlcnMgPSBoYXNPcHRpb25zID8gX3BhcmFtZXRlcnMgOiBwYXJhbWV0ZXJzXG5cbiAgICAvLyBJZiB2YWxpZGF0aW9uIG9wdGlvbnMgYXJlIHByb3ZpZGVkLCBleHBvc2UgdGhlbSB0aHJvdWdoXG4gICAgLy8gYGhhbmRsZXIub3B0aW9ucy5wYXJhbWV0ZXJzYCwgc2VlIENvbnRyb2xsZXJBY3Rpb25cbiAgICBpZiAoaGFzT3B0aW9ucykge1xuICAgICAgaGFuZGxlci5vcHRpb25zID0ge1xuICAgICAgICAuLi5oYW5kbGVyLm9wdGlvbnMsXG4gICAgICAgIHBhcmFtZXRlcnM6IG9wdGlvbnNcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAocmV0dXJucykge1xuICAgIGNvbnN0IFtfcmV0dXJucywgb3B0aW9uc10gPSBhc0FycmF5KHJldHVybnMpXG4gICAgaGFuZGxlci5yZXR1cm5zID0gX3JldHVybnNcblxuICAgIC8vIElmIHZhbGlkYXRpb24gb3B0aW9ucyBhcmUgcHJvdmlkZWQsIGV4cG9zZSB0aGVtIHRocm91Z2hcbiAgICAvLyBgaGFuZGxlci5vcHRpb25zLnJldHVybnNgLCBzZWUgQ29udHJvbGxlckFjdGlvblxuICAgIGlmIChvcHRpb25zKSB7XG4gICAgICBoYW5kbGVyLm9wdGlvbnMgPSB7XG4gICAgICAgIC4uLmhhbmRsZXIub3B0aW9ucyxcbiAgICAgICAgcGFyYW1ldGVyczogb3B0aW9uc1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChzY29wZSkge1xuICAgIGhhbmRsZXIuc2NvcGUgPSBhc0FycmF5KHNjb3BlKVxuICB9XG5cbiAgcmV0dXJuIGhhbmRsZXJcbn1cbiJdfQ==
|