@ditojs/server 0.271.0 → 0.274.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.
Files changed (86) hide show
  1. package/lib/app/Application.js +68 -25
  2. package/lib/app/SessionStore.js +3 -1
  3. package/lib/app/Validator.js +16 -2
  4. package/lib/app/index.js +7 -1
  5. package/lib/cli/console.js +14 -4
  6. package/lib/cli/db/createMigration.js +16 -4
  7. package/lib/cli/db/index.js +7 -1
  8. package/lib/cli/db/listAssetConfig.js +4 -2
  9. package/lib/cli/db/migrate.js +3 -3
  10. package/lib/cli/db/reset.js +3 -3
  11. package/lib/cli/db/rollback.js +3 -3
  12. package/lib/cli/db/seed.js +14 -6
  13. package/lib/cli/db/unlock.js +3 -3
  14. package/lib/cli/index.js +9 -5
  15. package/lib/controllers/AdminController.js +18 -6
  16. package/lib/controllers/CollectionController.js +15 -1
  17. package/lib/controllers/Controller.js +28 -4
  18. package/lib/controllers/ControllerAction.js +18 -6
  19. package/lib/controllers/RelationController.js +9 -3
  20. package/lib/controllers/UserController.js +15 -1
  21. package/lib/controllers/index.js +7 -1
  22. package/lib/decorators/index.js +7 -1
  23. package/lib/decorators/parameters.js +4 -2
  24. package/lib/decorators/returns.js +4 -2
  25. package/lib/errors/DatabaseError.js +5 -19
  26. package/lib/errors/ResponseError.js +4 -14
  27. package/lib/errors/index.js +7 -1
  28. package/lib/graph/DitoGraphProcessor.js +5 -1
  29. package/lib/graph/expression.js +5 -1
  30. package/lib/graph/graph.js +18 -2
  31. package/lib/graph/index.js +7 -1
  32. package/lib/index.js +7 -1
  33. package/lib/lib/index.js +7 -1
  34. package/lib/middleware/findRoute.js +7 -1
  35. package/lib/middleware/index.js +7 -1
  36. package/lib/middleware/logRequests.js +4 -4
  37. package/lib/mixins/AssetMixin.js +4 -4
  38. package/lib/mixins/SessionMixin.js +4 -4
  39. package/lib/mixins/TimeStampedMixin.js +4 -4
  40. package/lib/mixins/UserMixin.js +10 -4
  41. package/lib/mixins/index.js +7 -1
  42. package/lib/models/Model.js +41 -22
  43. package/lib/models/definitions/filters.js +9 -1
  44. package/lib/models/definitions/properties.js +7 -1
  45. package/lib/models/definitions/scopes.js +9 -1
  46. package/lib/models/index.js +7 -1
  47. package/lib/query/QueryBuilder.js +11 -1
  48. package/lib/query/QueryFilters.js +11 -1
  49. package/lib/query/index.js +7 -1
  50. package/lib/schema/formats/index.js +7 -1
  51. package/lib/schema/index.js +10 -2
  52. package/lib/schema/keywords/index.js +7 -1
  53. package/lib/schema/properties.js +11 -1
  54. package/lib/schema/relations.js +18 -4
  55. package/lib/services/index.js +7 -1
  56. package/lib/storage/DiskStorage.js +7 -1
  57. package/lib/storage/Storage.js +5 -1
  58. package/lib/storage/index.js +7 -1
  59. package/lib/utils/emitter.js +5 -1
  60. package/lib/utils/index.js +15 -1
  61. package/lib/utils/json.js +9 -0
  62. package/lib/utils/object.js +9 -3
  63. package/package.json +31 -31
  64. package/src/app/Application.js +40 -11
  65. package/src/app/Validator.js +2 -1
  66. package/src/cli/console.js +3 -3
  67. package/src/cli/db/createMigration.js +3 -3
  68. package/src/cli/db/listAssetConfig.js +3 -1
  69. package/src/cli/db/migrate.js +4 -4
  70. package/src/cli/db/reset.js +4 -4
  71. package/src/cli/db/rollback.js +4 -4
  72. package/src/cli/db/seed.js +6 -6
  73. package/src/cli/db/unlock.js +2 -2
  74. package/src/cli/index.js +3 -3
  75. package/src/controllers/AdminController.js +3 -2
  76. package/src/controllers/Controller.js +8 -8
  77. package/src/controllers/ControllerAction.js +7 -5
  78. package/src/controllers/RelationController.js +2 -2
  79. package/src/decorators/parameters.js +2 -2
  80. package/src/decorators/returns.js +2 -2
  81. package/src/errors/DatabaseError.js +2 -23
  82. package/src/errors/ResponseError.js +1 -8
  83. package/src/middleware/logRequests.js +9 -9
  84. package/src/models/Model.js +13 -8
  85. package/src/utils/index.js +1 -0
  86. package/src/utils/json.js +3 -0
@@ -3,9 +3,33 @@
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
 
8
- var _chalk = _interopRequireDefault(require("chalk"));
30
+ require("core-js/modules/esnext.weak-map.emplace.js");
31
+
32
+ var _picocolors = _interopRequireDefault(require("picocolors"));
9
33
 
10
34
  var _utils = require("../utils");
11
35
 
@@ -51,7 +75,7 @@ class Controller {
51
75
  } = this;
52
76
  const url = path ? `/${path}` : '';
53
77
  this.url = namespace ? `/${namespace}${url}` : url;
54
- this.log(`${namespace ? _chalk.default.green(`/${namespace}/`) : ''}${_chalk.default.cyan(path)}${_chalk.default.white(':')}`, this.level);
78
+ this.log(`${namespace ? _picocolors.default.green(`/${namespace}/`) : ''}${_picocolors.default.cyan(path)}${_picocolors.default.white(':')}`, this.level);
55
79
 
56
80
  if (setupActionsObject) {
57
81
  this.actions = this.actions || this.reflectActionsObject();
@@ -85,7 +109,7 @@ class Controller {
85
109
  }
86
110
 
87
111
  setupRoute(verb, url, transacted, authorize, action, handlers) {
88
- this.log(`${_chalk.default.magenta(verb.toUpperCase())} ${_chalk.default.green(this.url)}${_chalk.default.cyan(url.slice(this.url.length))} ${_chalk.default.white(this.describeAuthorize(authorize))}`, this.level + 1);
112
+ this.log(`${_picocolors.default.magenta(verb.toUpperCase())} ${_picocolors.default.green(this.url)}${_picocolors.default.cyan(url.slice(this.url.length))} ${_picocolors.default.white(this.describeAuthorize(authorize))}`, this.level + 1);
89
113
  this.app.addRoute(verb, url, transacted, handlers, this, action);
90
114
  }
91
115
 
@@ -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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250cm9sbGVycy9Db250cm9sbGVyLmpzIl0sIm5hbWVzIjpbIkNvbnRyb2xsZXIiLCJjb25zdHJ1Y3RvciIsImFwcCIsIm5hbWVzcGFjZSIsImxvZ2dpbmciLCJjb25maWciLCJsb2ciLCJyb3V0ZXMiLCJsZXZlbCIsImluaXRpYWxpemUiLCJzZXR1cCIsImlzUm9vdCIsInNldHVwQWN0aW9uc09iamVjdCIsIl9zZXR1cEVtaXR0ZXIiLCJob29rcyIsIndpbGRjYXJkIiwibmFtZSIsIm1hdGNoIiwicGF0aCIsInVuZGVmaW5lZCIsIm5vcm1hbGl6ZVBhdGgiLCJ0cmFuc2FjdGVkIiwidXJsIiwicGljbyIsImdyZWVuIiwiY3lhbiIsIndoaXRlIiwiYWN0aW9ucyIsInJlZmxlY3RBY3Rpb25zT2JqZWN0Iiwic2V0dXBBY3Rpb25zIiwiYXNzZXRzIiwic2V0dXBBc3NldHMiLCJhbGxvdyIsImNvbnRyb2xsZXIiLCJhZGRBY3Rpb24iLCJrZXkiLCJ2YWx1ZSIsInZlcmIiLCJwcm90byIsIk9iamVjdCIsImdldFByb3RvdHlwZU9mIiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsImZvckVhY2giLCJzZXR1cFJvdXRlIiwiYXV0aG9yaXplIiwiYWN0aW9uIiwiaGFuZGxlcnMiLCJtYWdlbnRhIiwidG9VcHBlckNhc2UiLCJzbGljZSIsImxlbmd0aCIsImRlc2NyaWJlQXV0aG9yaXplIiwiYWRkUm91dGUiLCJ0eXBlIiwidmFsdWVzIiwicHJvY2Vzc1ZhbHVlcyIsImluaGVyaXRWYWx1ZXMiLCJoYW5kbGVyIiwiZW50cmllcyIsInNldHVwQWN0aW9uIiwic2V0dXBIYW5kbGVyRnJvbU9iamVjdCIsImFjdGlvbkNsYXNzIiwiTWVtYmVyQWN0aW9uIiwiQ29udHJvbGxlckFjdGlvbiIsInNldHVwQWN0aW9uUm91dGUiLCJnZXRVcmwiLCJjdHgiLCJyZXMiLCJjYWxsQWN0aW9uIiwiYm9keSIsImVyciIsIlJlc3BvbnNlRXJyb3IiLCJXcmFwcGVkRXJyb3IiLCJkYXRhUGF0aCIsInNldHVwQXNzZXRSb3V0ZSIsInN0b3JhZ2UiLCJzdG9yYWdlTmFtZSIsInNldHRpbmdzIiwiZ2V0U3RvcmFnZSIsIkNvbnRyb2xsZXJFcnJvciIsInRva2VucyIsImdldERhdGFQYXRoIiwiY2FsbGJhY2siLCJtYXAiLCJpbmRleCIsIm11bHRpcGxlV2lsZGNhcmRzIiwiZmlsdGVyIiwidG9rZW4iLCJub3JtYWxpemVkUGF0aCIsIm1hdGNoRGF0YVBhdGgiLCJSZWdFeHAiLCJ1cGxvYWQiLCJnZXRVcGxvYWRIYW5kbGVyIiwiZmlsZUZpbHRlciIsInJlcSIsImZpbGUiLCJjYiIsInRlc3QiLCJmaWVsZG5hbWUiLCJhdXRob3JpemF0aW9uIiwicHJvY2Vzc0F1dGhvcml6ZSIsIm5leHQiLCJoYW5kbGVBdXRob3JpemF0aW9uIiwiZmlsZXMiLCJjb252ZXJ0U3RvcmFnZUZpbGVzIiwicmVxdWVzdCIsImNyZWF0ZUFzc2V0cyIsInRyYW5zYWN0aW9uIiwiY29tcG9zZSIsImdldFBhdGgiLCJwYXJlbnRDbGFzcyIsImluaGVyaXRhbmNlTWFwIiwiaGFzIiwic2V0IiwiaW5zdGFuY2UiLCJlbnRyeSIsImdldCIsInBhcmVudCIsInBhcmVudFZhbHVlcyIsImN1cnJlbnRWYWx1ZXMiLCJzZXRQcm90b3R5cGVPZiIsIm1lcmdlZEFsbG93IiwibWVyZ2VkQXV0aG9yaXplIiwiaGFzT3duQWxsb3ciLCJleGNsdWRlS2V5IiwiaW5jbHVkZXMiLCJoYW5kbGVBbGxvdyIsImN1cnJlbnQiLCJrZXlzIiwiaGFuZGxlQXV0aG9yaXplIiwiYWRkIiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJyZWR1Y2UiLCJyZXN1bHQiLCJjcmVhdGUiLCJlbWl0SG9vayIsImhhbmRsZVJlc3VsdCIsImFyZ3MiLCJzaGlmdCIsImxpc3RlbmVycyIsImNhbGwiLCJnZXRNZW1iZXIiLCJtZW1iZXIiLCJ1c2VyIiwic3RhdGUiLCJmaW5kIiwibW9kZWxDbGFzcyIsIiRpZCIsIm1lbWJlcklkIiwiJGhhc093bmVyIiwiJGhhc1JvbGUiLCJqb2luIiwib2siLCJBdXRob3JpemF0aW9uRXJyb3IiLCJzdHIiLCJpbmRlbnQiLCJjb25zb2xlIiwiaW5mbyIsInJlcGVhdCIsIkV2ZW50RW1pdHRlciIsIm1peGluIiwiV2Vha01hcCIsIm9iamVjdCIsInBhcmFtZXRlcnMiLCJyZXR1cm5zIiwic2NvcGUiLCJfcGFyYW1ldGVycyIsIm9wdGlvbnMiLCJoYXNPcHRpb25zIiwiX3JldHVybnMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFHQTs7OztBQUtPLE1BQU1BLFVBQU4sQ0FBaUI7QUFDdEJDLEVBQUFBLFdBQVcsQ0FBQ0MsR0FBRCxFQUFNQyxTQUFOLEVBQWlCO0FBQzFCLFNBQUtELEdBQUwsR0FBV0EsR0FBWDtBQUNBLFNBQUtDLFNBQUwsR0FBaUIsS0FBS0EsU0FBTCxJQUFrQkEsU0FBbkM7QUFDQSxTQUFLQyxPQUFMLEdBQWUsS0FBS0YsR0FBTCxDQUFTRyxNQUFULENBQWdCQyxHQUFoQixDQUFvQkMsTUFBbkM7QUFDQSxTQUFLQyxLQUFMLEdBQWEsQ0FBYjtBQUNEOztBQUdEQyxFQUFBQSxVQUFVLEdBQUcsQ0FDWjs7QUFFREMsRUFBQUEsS0FBSyxDQUFDQyxNQUFNLEdBQUcsSUFBVixFQUFnQkMsa0JBQWtCLEdBQUcsSUFBckMsRUFBMkM7QUFDOUMsU0FBS0MsYUFBTCxDQUFtQixLQUFLQyxLQUF4QixFQUErQjtBQUU3QkMsTUFBQUEsUUFBUSxFQUFFO0FBRm1CLEtBQS9COztBQUtBLFNBQUtDLElBQUwsR0FBWSxLQUFLQSxJQUFMLElBQ1YsS0FBS2YsV0FBTCxDQUFpQmUsSUFBakIsQ0FBc0JDLEtBQXRCLENBQTRCLHdCQUE1QixFQUFzRCxDQUF0RCxDQURGOztBQUVBLFFBQUksS0FBS0MsSUFBTCxLQUFjQyxTQUFsQixFQUE2QjtBQUMzQixXQUFLRCxJQUFMLEdBQVksS0FBS2hCLEdBQUwsQ0FB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Q0FBQ3ZDLElBQVIsR0FBZUEsSUFBZjtBQUNEOztBQUVELE1BQUlrSixVQUFKLEVBQWdCO0FBQ2QsVUFBTSxDQUFDRyxXQUFELEVBQWNDLE9BQWQsSUFBeUJKLFVBQS9CO0FBQ0EsVUFBTUssVUFBVSxHQUFHLHFCQUFRRixXQUFSLENBQW5CO0FBQ0E5RyxJQUFBQSxPQUFPLENBQUMyRyxVQUFSLEdBQXFCSyxVQUFVLEdBQUdGLFdBQUgsR0FBaUJILFVBQWhEOztBQUlBLFFBQUlLLFVBQUosRUFBZ0I7QUFDZGhILE1BQUFBLE9BQU8sQ0FBQytHLE9BQVIsR0FBa0IsRUFDaEIsR0FBRy9HLE9BQU8sQ0FBQytHLE9BREs7QUFFaEJKLFFBQUFBLFVBQVUsRUFBRUk7QUFGSSxPQUFsQjtBQUlEO0FBQ0Y7O0FBRUQsTUFBSUgsT0FBSixFQUFhO0FBQ1gsVUFBTSxDQUFDSyxRQUFELEVBQVdGLE9BQVgsSUFBc0IscUJBQVFILE9BQVIsQ0FBNUI7QUFDQTVHLElBQUFBLE9BQU8sQ0FBQzRHLE9BQVIsR0FBa0JLLFFBQWxCOztBQUlBLFFBQUlGLE9BQUosRUFBYTtBQUNYL0csTUFBQUEsT0FBTyxDQUFDK0csT0FBUixHQUFrQixFQUNoQixHQUFHL0csT0FBTyxDQUFDK0csT0FESztBQUVoQkosUUFBQUEsVUFBVSxFQUFFSTtBQUZJLE9BQWxCO0FBSUQ7QUFDRjs7QUFFRCxNQUFJRixLQUFKLEVBQVc7QUFDVDdHLElBQUFBLE9BQU8sQ0FBQzZHLEtBQVIsR0FBZ0IscUJBQVFBLEtBQVIsQ0FBaEI7QUFDRDs7QUFFRCxTQUFPN0csT0FBUDtBQUNEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBpY28gZnJvbSAncGljb2NvbG9ycydcbmltcG9ydCB7IGdldE93blByb3BlcnR5LCBnZXRBbGxLZXlzLCBkZXNjcmliZUZ1bmN0aW9uIH0gZnJvbSAnQC91dGlscydcbmltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gJ0AvbGliJ1xuaW1wb3J0IENvbnRyb2xsZXJBY3Rpb24gZnJvbSAnLi9Db250cm9sbGVyQWN0aW9uJ1xuaW1wb3J0IE1lbWJlckFjdGlvbiBmcm9tICcuL01lbWJlckFjdGlvbidcbmltcG9ydCB7XG4gIFJlc3BvbnNlRXJyb3IsIFdyYXBwZWRFcnJvciwgQ29udHJvbGxlckVycm9yLCBBdXRob3JpemF0aW9uRXJyb3Jcbn0gZnJvbSAnQC9lcnJvcnMnXG5pbXBvcnQge1xuICBpc09iamVjdCwgaXNTdHJpbmcsIGlzQXJyYXksIGlzQm9vbGVhbiwgaXNGdW5jdGlvbiwgYXNBcnJheSwgZXF1YWxzLFxuICBwYXJzZURhdGFQYXRoLCBub3JtYWxpemVEYXRhUGF0aFxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgY2xhc3MgQ29udHJvbGxlciB7XG4gIGNvbnN0cnVjdG9yKGFwcCwgbmFtZXNwYWNlKSB7XG4gICAgdGhpcy5hcHAgPSBhcHBcbiAgICB0aGlzLm5hbWVzcGFjZSA9IHRoaXMubmFtZXNwYWNlIHx8IG5hbWVzcGFjZVxuICAgIHRoaXMubG9nZ2luZyA9IHRoaXMuYXBwLmNvbmZpZy5sb2cucm91dGVzXG4gICAgdGhpcy5sZXZlbCA9IDBcbiAgfVxuXG4gIC8vIEBvdmVycmlkYWJsZVxuICBpbml0aWFsaXplKCkge1xuICB9XG5cbiAgc2V0dXAoaXNSb290ID0gdHJ1ZSwgc2V0dXBBY3Rpb25zT2JqZWN0ID0gdHJ1ZSkge1xuICAgIHRoaXMuX3NldHVwRW1pdHRlcih0aGlzLmhvb2tzLCB7XG4gICAgICAvLyBTdXBwb3J0IHdpbGRjYXJkIGhvb2tzIG9ubHkgb24gY29udHJvbGxlcnM6XG4gICAgICB3aWxkY2FyZDogdHJ1ZVxuICAgIH0pXG4gICAgLy8gSWYgdGhlIGNsYXNzIG5hbWUgZW5kcyBpbiAnQ29udHJvbGxlcicsIHJlbW92ZSBpdCBmcm9tIGNvbnRyb2xsZXIgbmFtZS5cbiAgICB0aGlzLm5hbWUgPSB0aGlzLm5hbWUgfHxcbiAgICAgIHRoaXMuY29uc3RydWN0b3IubmFtZS5tYXRjaCgvXiguKj8pKD86Q29udHJvbGxlcnwpJC8pWzFdXG4gICAgaWYgKHRoaXMucGF0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnBhdGggPSB0aGlzLmFwcC5ub3JtYWxpemVQYXRoKHRoaXMubmFtZSlcbiAgICB9XG4gICAgdGhpcy50cmFuc2FjdGVkID0gISF0aGlzLnRyYW5zYWN0ZWRcbiAgICBpZiAoaXNSb290KSB7XG4gICAgICBjb25zdCB7IHBhdGgsIG5hbWVzcGFjZSB9ID0gdGhpc1xuICAgICAgLy8gVE9ETzogVGhlIGRpc3RpbmN0aW9uIGJldHdlZW4gIGB1cmxgIGFuZCBgcGF0aGAgaXMgYSBiaXQgdHJpY2t5LCBzaW5jZVxuICAgICAgLy8gd2hhdCB3ZSBjYWxsIGB1cmxgIGhlcmUgaXMgY2FsbGVkIGBwYXRoYCBpbiBSb3V0ZXIsIGFuZCBtYXkgY29udGFpblxuICAgICAgLy8gbWFwcGVkIHBhcmFtZXRlcnMgb3Igd2lsZGNhcmRzLiBDb25zaWRlciBgcGF0aGAgLyBgcm91dGVgIGluc3RlYWQ/XG4gICAgICBjb25zdCB1cmwgPSBwYXRoID8gYC8ke3BhdGh9YCA6ICcnXG4gICAgICB0aGlzLnVybCA9IG5hbWVzcGFjZSA/IGAvJHtuYW1lc3BhY2V9JHt1cmx9YCA6IHVybFxuICAgICAgdGhpcy5sb2coXG4gICAgICAgIGAke1xuICAgICAgICAgIG5hbWVzcGFjZSA/IHBpY28uZ3JlZW4oYC8ke25hbWVzcGFjZX0vYCkgOiAnJ1xuICAgICAgICB9JHtcbiAgICAgICAgICBwaWNvLmN5YW4ocGF0aClcbiAgICAgICAgfSR7XG4gICAgICAgICAgcGljby53aGl0ZSgnOicpXG4gICAgICAgIH1gLFxuICAgICAgICB0aGlzLmxldmVsXG4gICAgICApXG4gICAgICBpZiAoc2V0dXBBY3Rpb25zT2JqZWN0KSB7XG4gICAgICAgIHRoaXMuYWN0aW9ucyA9IHRoaXMuYWN0aW9ucyB8fCB0aGlzLnJlZmxlY3RBY3Rpb25zT2JqZWN0KClcbiAgICAgICAgLy8gTm93IHRoYXQgdGhlIGluc3RhbmNlIGZpZWxkcyBhcmUgcmVmbGVjdGVkIGluIHRoZSBgY29udHJvbGxlcmAgb2JqZWN0XG4gICAgICAgIC8vIHdlIGNhbiB1c2UgdGhlIG5vcm1hbCBpbmhlcml0YW5jZSBtZWNoYW5pc20gdGhyb3VnaCBgc2V0dXBBY3Rpb25zKClgOlxuICAgICAgICB0aGlzLmFjdGlvbnMgPSB0aGlzLnNldHVwQWN0aW9ucygnYWN0aW9ucycpXG4gICAgICB9XG4gICAgICB0aGlzLmFzc2V0cyA9IHRoaXMuc2V0dXBBc3NldHMoKVxuICAgIH1cbiAgfVxuXG4gIHJlZmxlY3RBY3Rpb25zT2JqZWN0KCkge1xuICAgIC8vIE9uIGJhc2UgY29udHJvbGxlcnMsIHRoZSBhY3Rpb25zIGNhbiBiZSBkZWZpbmVkIGRpcmVjdGx5IGluIHRoZSBjbGFzc1xuICAgIC8vIGluc3RlYWQgb2YgaW5zaWRlIGFuIGFjdGlvbnMgb2JqZWN0LCBhcyBpcyBkb25lIHdpdGggbW9kZWwgYW5kIHJlbGF0aW9uXG4gICAgLy8gY29udHJvbGxlcnMuIEJ1dCBpbiBvcmRlciB0byB1c2UgdGhlIHNhbWUgc3RydWN0dXJlIGZvciBpbmhlcml0YW5jZSBhc1xuICAgIC8vIHRoZXNlIG90aGVyIGNvbnRyb2xsZXJzLCB3ZSByZWZsZWN0IHRoZXNlIGluc3RhbmNlIGZpZWxkcyBpbiBhIHNlcGFyYXRlXG4gICAgLy8gYGFjdGlvbnNgIG9iamVjdC5cbiAgICBjb25zdCB7IGFsbG93IH0gPSB0aGlzXG4gICAgY29uc3QgY29udHJvbGxlciA9IGFsbG93ID8geyBhbGxvdyB9IDoge31cblxuICAgIGNvbnN0IGFkZEFjdGlvbiA9IGtleSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHRoaXNba2V5XVxuICAgICAgLy8gTk9URTogT25seSBhZGQgaW5zdGFuY2UgbWV0aG9kcyB0aGF0IGhhdmUgYSBAYWN0aW9uKCkgZGVjb3JhdG9yLFxuICAgICAgLy8gd2hpY2ggaW4gdHVybiBzZXRzIHRoZSBgdmVyYmAgcHJvcGVydHkgb24gdGhlIG1ldGhvZCwgb3IgYWN0aW9uIG9iamVjdHNcbiAgICAgIC8vIHdoaWNoIGhhdmUgdGhlIGB2ZXJiYCBwcm9wZXJ0eTpcbiAgICAgIGlmICh2YWx1ZT8udmVyYikge1xuICAgICAgICBjb250cm9sbGVyW2tleV0gPSB2YWx1ZVxuICAgICAgfVxuICAgIH1cbiAgICAvLyBVc2UgYE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKClgIHRvIGdldCB0aGUgZmllbGRzLCBpbiBvcmRlciB0b1xuICAgIC8vIG5vdCBhbHNvIHJlY2VpdmUgdmFsdWVzIGZyb20gcGFyZW50cyAodGhvc2UgYXJlIGZldGNoZWQgbGF0ZXIgaW5cbiAgICAvLyBgaW5oZXJpdFZhbHVlcygpYCwgc2VlIGBnZXRQYXJlbnRWYWx1ZXMoKWApLlxuICAgIGNvbnN0IHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpXG4gICAgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMocHJvdG8pLmZvckVhY2goYWRkQWN0aW9uKVxuICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMpLmZvckVhY2goYWRkQWN0aW9uKVxuICAgIHJldHVybiBjb250cm9sbGVyXG4gIH1cblxuICBzZXR1cFJvdXRlKHZlcmIsIHVybCwgdHJhbnNhY3RlZCwgYXV0aG9yaXplLCBhY3Rpb24sIGhhbmRsZXJzKSB7XG4gICAgdGhpcy5sb2coXG4gICAgICBgJHtcbiAgICAgICAgcGljby5tYWdlbnRhKHZlcmIudG9VcHBlckNhc2UoKSlcbiAgICAgIH0gJHtcbiAgICAgICAgcGljby5ncmVlbih0aGlzLnVybClcbiAgICAgIH0ke1xuICAgICAgICBwaWNvLmN5YW4odXJsLnNsaWNlKHRoaXMudXJsLmxlbmd0aCkpXG4gICAgICB9ICR7XG4gICAgICAgIHBpY28ud2hpdGUodGhpcy5kZXNjcmliZUF1dGhvcml6ZShhdXRob3JpemUpKVxuICAgICAgfWAsXG4gICAgICB0aGlzLmxldmVsICsgMVxuICAgIClcbiAgICB0aGlzLmFwcC5hZGRSb3V0ZSh2ZXJiLCB1cmwsIHRyYW5zYWN0ZWQsIGhhbmRsZXJzLCB0aGlzLCBhY3Rpb24pXG4gIH1cblxuICBzZXR1cEFjdGlvbnModHlwZSkge1xuICAgIGNvbnN0IHtcbiAgICAgIHZhbHVlczogYWN0aW9ucyxcbiAgICAgIGF1dGhvcml6ZVxuICAgIH0gPSB0aGlzLnByb2Nlc3NWYWx1ZXModGhpcy5pbmhlcml0VmFsdWVzKHR5cGUpKVxuICAgIGZvciAoY29uc3QgW25hbWUsIGhhbmRsZXJdIG9mIE9iamVjdC5lbnRyaWVzKGFjdGlvbnMpKSB7XG4gICAgICB0aGlzLnNldHVwQWN0aW9uKHR5cGUsIGFjdGlvbnMsIG5hbWUsIGhhbmRsZXIsIGF1dGhvcml6ZVtuYW1lXSlcbiAgICB9XG4gICAgcmV0dXJuIGFjdGlvbnNcbiAgfVxuXG4gIHNldHVwQWN0aW9uKFxuICAgIHR5cGUsXG4gICAgYWN0aW9ucyxcbiAgICBuYW1lLFxuICAgIGhhbmRsZXIsXG4gICAgYXV0aG9yaXplLFxuICAgIC8vIFRoZXNlIHZhbHVlcyBhcmUgb25seSBjaGFuZ2VkIHdoZW4gY2FsbGVkIGZyb21cbiAgICAvLyBgQ29sbGVjdGlvbkNvbnRyb2xsZXIuc2V0dXBBY3Rpb24oKWA6XG4gICAgdmVyYiA9ICdnZXQnLFxuICAgIC8vIFRoZSBkZWZhdWx0IHBhdGggZm9yIGFjdGlvbnMgaXMgdGhlIG5vcm1hbGl6ZWQgbmFtZS5cbiAgICBwYXRoID0gdGhpcy5hcHAubm9ybWFsaXplUGF0aChuYW1lKVxuICApIHtcbiAgICBpZiAoIWlzRnVuY3Rpb24oaGFuZGxlcikpIHtcbiAgICAgIGhhbmRsZXIgPSBzZXR1cEhhbmRsZXJGcm9tT2JqZWN0KGhhbmRsZXIsIGFjdGlvbnMpXG4gICAgfVxuICAgIC8vIEN1c3RvbSBtZW1iZXIgYWN0aW9ucyBoYXZlIHRoZWlyIG93biBjbGFzcyBzbyB0aGV5IGNhbiBmZXRjaCB0aGUgbWVtYmVyc1xuICAgIC8vIGFoZWFkIG9mIHRoZWlyIGNhbGwuXG4gICAgY29uc3QgYWN0aW9uQ2xhc3MgPSB0eXBlID09PSAnbWVtYmVyJyA/IE1lbWJlckFjdGlvbiA6IENvbnRyb2xsZXJBY3Rpb25cbiAgICB0aGlzLnNldHVwQWN0aW9uUm91dGUoXG4gICAgICB0eXBlLFxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5ldy1jYXBcbiAgICAgIG5ldyBhY3Rpb25DbGFzcyh0aGlzLCBoYW5kbGVyLCB0eXBlLCBuYW1lLCB2ZXJiLCBwYXRoLCBhdXRob3JpemUpXG4gICAgKVxuICB9XG5cbiAgc2V0dXBBY3Rpb25Sb3V0ZSh0eXBlLCBhY3Rpb24pIHtcbiAgICBjb25zdCB1cmwgPSB0aGlzLmdldFVybCh0eXBlLCBhY3Rpb24ucGF0aClcbiAgICBjb25zdCB7IHZlcmIsIHRyYW5zYWN0ZWQsIGF1dGhvcml6ZSB9ID0gYWN0aW9uXG4gICAgdGhpcy5zZXR1cFJvdXRlKHZlcmIsIHVybCwgdHJhbnNhY3RlZCwgYXV0aG9yaXplLCBhY3Rpb24sIFtcbiAgICAgIGFzeW5jIGN0eCA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgYWN0aW9uLmNhbGxBY3Rpb24oY3R4KVxuICAgICAgICAgIGlmIChyZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY3R4LmJvZHkgPSByZXNcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIHRocm93IGVyciBpbnN0YW5jZW9mIFJlc3BvbnNlRXJyb3IgPyBlcnIgOiBuZXcgV3JhcHBlZEVycm9yKGVycilcbiAgICAgICAgfVxuICAgICAgfVxuICAgIF0pXG4gIH1cblxuICBzZXR1cEFzc2V0cygpIHtcbiAgICBjb25zdCB7XG4gICAgICB2YWx1ZXM6IGFzc2V0cyxcbiAgICAgIGF1dGhvcml6ZVxuICAgIH0gPSB0aGlzLnByb2Nlc3NWYWx1ZXModGhpcy5pbmhlcml0VmFsdWVzKCdhc3NldHMnKSlcbiAgICBmb3IgKGNvbnN0IFtkYXRhUGF0aCwgY29uZmlnXSBvZiBPYmplY3QuZW50cmllcyhhc3NldHMgfHwge30pKSB7XG4gICAgICB0aGlzLnNldHVwQXNzZXRSb3V0ZShkYXRhUGF0aCwgY29uZmlnLCBhdXRob3JpemVbZGF0YVBhdGhdKVxuICAgIH1cbiAgICByZXR1cm4gYXNzZXRzXG4gIH1cblxuICBzZXR1cEFzc2V0Um91dGUoZGF0YVBhdGgsIGNvbmZpZywgYXV0aG9yaXplKSB7XG4gICAgY29uc3Qge1xuICAgICAgc3RvcmFnZTogc3RvcmFnZU5hbWUsXG4gICAgICAvLyBUT0RPOiBXaGF0IGV4YWN0bHkgc2hvdWxkIGNvbnRyb2wgdGhlIHVzZSBvZiBgdHJhbnNhY3RlZGA/XG4gICAgICB0cmFuc2FjdGVkLFxuICAgICAgLi4uc2V0dGluZ3NcbiAgICB9ID0gY29uZmlnXG4gICAgY29uc3Qgc3RvcmFnZSA9IHRoaXMuYXBwLmdldFN0b3JhZ2Uoc3RvcmFnZU5hbWUpXG4gICAgaWYgKCFzdG9yYWdlKSB7XG4gICAgICB0aHJvdyBuZXcgQ29udHJvbGxlckVycm9yKHRoaXMsXG4gICAgICAgIGBVbmtub3duIHN0b3JhZ2UgY29uZmlndXJhdGlvbjogJyR7c3RvcmFnZU5hbWV9J2BcbiAgICAgIClcbiAgICB9XG4gICAgY29uc3QgdG9rZW5zID0gcGFyc2VEYXRhUGF0aChkYXRhUGF0aClcbiAgICBjb25zdCBnZXREYXRhUGF0aCA9IGNhbGxiYWNrID0+IG5vcm1hbGl6ZURhdGFQYXRoKHRva2Vucy5tYXAoY2FsbGJhY2spKVxuXG4gICAgLy8gUmVwbGFjZSB3aWxkY2FyZHMgd2l0aCBudW1iZXJlZCBpbmRpY2VzIGFuZCBjb252ZXJ0IHRvICcvJy1ub3RhdGlvbjpcbiAgICBsZXQgaW5kZXggPSAwXG4gICAgY29uc3QgbXVsdGlwbGVXaWxkY2FyZHMgPSB0b2tlbnMuZmlsdGVyKHRva2VuID0+IHRva2VuID09PSAnKicpLmxlbmd0aCA+IDFcbiAgICBjb25zdCBub3JtYWxpemVkUGF0aCA9IGdldERhdGFQYXRoKFxuICAgICAgdG9rZW4gPT4gdG9rZW4gPT09ICcqJ1xuICAgICAgICA/IG11bHRpcGxlV2lsZGNhcmRzXG4gICAgICAgICAgPyBgOmluZGV4JHsrK2luZGV4fWBcbiAgICAgICAgICA6ICc6aW5kZXgnXG4gICAgICAgIDogdGhpcy5hcHAubm9ybWFsaXplUGF0aCh0b2tlbilcbiAgICApXG5cbiAgICAvLyBDb252ZXJ0IGBkYXRhUGF0aGAgdG8gYSByZWd1bGFyIGV4cHJlc3Npb24gdG8gbWF0Y2ggZmllbGQgbmFtZXNcbiAgICAvLyBhZ2FpbnN0LCBidXQgY29udmVydCB3aWxkY2FyZHMgKCopIHRvIG1hdGNoIGJvdGggbnVtZXJpYyBpZHMgYW5kIHdvcmRzLFxuICAgIC8vIGUuZy4gJ2NyZWF0ZSc6XG4gICAgY29uc3QgbWF0Y2hEYXRhUGF0aCA9IG5ldyBSZWdFeHAoXG4gICAgICBgXiR7Z2V0RGF0YVBhdGgodG9rZW4gPT4gdG9rZW4gPT09ICcqJyA/ICdcXFxcdysnIDogdG9rZW4pfSRgXG4gICAgKVxuXG4gICAgY29uc3QgdXJsID0gdGhpcy5nZXRVcmwoJ2NvbnRyb2xsZXInLCBgdXBsb2FkLyR7bm9ybWFsaXplZFBhdGh9YClcbiAgICBjb25zdCB1cGxvYWQgPSBzdG9yYWdlLmdldFVwbG9hZEhhbmRsZXIoe1xuICAgICAgLi4uc2V0dGluZ3MsXG4gICAgICAvLyBPbmx5IGxldCB1cGxvYWRzIHBhc3MgdGhhdCBtYXRjaCB0aGUgbm9ybWFsaXplUGF0aCArIHdpbGRjYXJkczpcbiAgICAgIGZpbGVGaWx0ZXI6IChyZXEsIGZpbGUsIGNiKSA9PiB7XG4gICAgICAgIGNiKG51bGwsIG1hdGNoRGF0YVBhdGgudGVzdChmaWxlLmZpZWxkbmFtZSkpXG4gICAgICB9XG4gICAgfSlcblxuICAgIGNvbnN0IGF1dGhvcml6YXRpb24gPSB0aGlzLnByb2Nlc3NBdXRob3JpemUoYXV0aG9yaXplKVxuICAgIHRoaXMuc2V0dXBSb3V0ZSgncG9zdCcsIHVybCwgdHJhbnNhY3RlZCwgYXV0aG9yaXplLCBudWxsLCBbXG4gICAgICBhc3luYyAoY3R4LCBuZXh0KSA9PiB7XG4gICAgICAgIGF3YWl0IHRoaXMuaGFuZGxlQXV0aG9yaXphdGlvbihhdXRob3JpemF0aW9uLCBjdHgpXG4gICAgICAgIHJldHVybiBuZXh0KClcbiAgICAgIH0sXG5cbiAgICAgIHVwbG9hZCxcblxuICAgICAgYXN5bmMgKGN0eCwgbmV4dCkgPT4ge1xuICAgICAgICBjb25zdCBmaWxlcyA9IHN0b3JhZ2UuY29udmVydFN0b3JhZ2VGaWxlcyhjdHgucmVxdWVzdC5maWxlcylcbiAgICAgICAgYXdhaXQgdGhpcy5hcHAuY3JlYXRlQXNzZXRzKHN0b3JhZ2UsIGZpbGVzLCAwLCBjdHgudHJhbnNhY3Rpb24pXG4gICAgICAgIC8vIFNlbmQgdGhlIGZpbGUgb2JqZWN0cyBiYWNrIGZvciB0aGUgdXBsb2FkIGNvbXBvbmVudCB0byBzdG9yZSBpbiB0aGVcbiAgICAgICAgLy8gZGF0YS5cbiAgICAgICAgY3R4LmJvZHkgPSBmaWxlc1xuICAgICAgICByZXR1cm4gbmV4dCgpXG4gICAgICB9XG4gICAgXSlcbiAgfVxuXG4gIGNvbXBvc2UoKSB7XG4gICAgLy8gVG8gYmUgb3ZlcnJpZGRlbiBpbiBzdWItY2xhc3NlcywgaWYgdGhlIGNvbnRyb2xsZXIgbmVlZHMgdG8gaW5zdGFsbFxuICAgIC8vIG1pZGRsZXdhcmUuIEZvciBub3JtYWwgcm91dGVzLCB1c2UgYHRoaXMuYXBwLmFkZFJvdXRlKClgIGluc3RlYWQuXG4gIH1cblxuICBnZXRQYXRoKHR5cGUsIHBhdGgpIHtcbiAgICAvLyBUbyBiZSBvdmVycmlkZGVuIGJ5IHN1Yi1jbGFzc2VzLlxuICAgIHJldHVybiBwYXRoXG4gIH1cblxuICBnZXRVcmwodHlwZSwgcGF0aCkge1xuICAgIHBhdGggPSB0aGlzLmdldFBhdGgodHlwZSwgcGF0aClcbiAgICAvLyBVc2UgJy4nIGFzIHRoZSBwYXRoIGZvciB0aGUgY29udHJvbGxlcidzIFwiaW5kZXhcIiBhY3Rpb24uXG4gICAgcmV0dXJuIHBhdGggJiYgcGF0aCAhPT0gJy4nID8gYCR7dGhpcy51cmx9LyR7cGF0aH1gIDogdGhpcy51cmxcbiAgfVxuXG4gIGluaGVyaXRWYWx1ZXModHlwZSkge1xuICAgIC8vIEdldHMgdGhlIGNvbnRyb2xsZXIgY2xhc3MncyBpbnN0YW5jZSBmaWVsZCBmb3IgYSBnaXZlbiBhY3Rpb24gdHlwZSwgZS5nLlxuICAgIC8vIGBjb250cm9sbGVyYCAoQ29udHJvbGxlciksIGBjb2xsZWN0aW9uYCwgYG1lbWJlcmAgKE1vZGVsQ29udHJvbGxlcixcbiAgICAvLyBSZWxhdGlvbkNvbnRyb2xsZXIpLCBgcmVsYXRpb25gIChSZWxhdGlvbkNvbnRyb2xsZXIpLCBhbmQgc2V0cyB1cCBhblxuICAgIC8vIGluaGVyaXRhbmNlIGNoYWluIGZvciBpdCB0aGF0IGdvZXMgYWxsIHRoZSB3YXkgdXAgdG8gaXQgYmFzZSBjbGFzcyAoZS5nLlxuICAgIC8vIENvbGxlY3Rpb25Db250cm9sbGVyKSwgc28gdGhhdCB0aGUgZGVmYXVsdCBkZWZpbml0aW9ucyBmb3IgYWxsIGh0dHAgdmVyYnNcbiAgICAvLyBjYW4gYmUgY29ycmVjdGx5IGluaGVyaXRlZCBhbmQgb3ZlcnJpZGRlbiB3aGlsZSB1c2luZyBgc3VwZXIuPGFjdGlvbj4oKWAuXG4gICAgY29uc3QgcGFyZW50Q2xhc3MgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcy5jb25zdHJ1Y3RvcilcbiAgICAvLyBDcmVhdGUgb25lIGluc3RhbmNlIG9mIGVhY2ggY29udHJvbGxlciBjbGFzcyB1cCB0aGUgY2hhaW4gaW4gb3JkZXIgdG9cbiAgICAvLyBnZXQgdG8gdGhlaXIgZGVmaW5pdGlvbnMgb2YgdGhlIGluaGVyaXRhYmxlIHZhbHVlcy4gQ2FjaGUgYm90aCBpbnN0YW5jZVxuICAgIC8vIGFuZCByZXNvbHZlZCB2YWx1ZXMgcGVyIHBhcmVudENsYXNzIGluIGFuIGluaGVyaXRhbmNlTWFwLlxuICAgIGlmICghaW5oZXJpdGFuY2VNYXAuaGFzKHBhcmVudENsYXNzKSkge1xuICAgICAgaW5oZXJpdGFuY2VNYXAuc2V0KHBhcmVudENsYXNzLCB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuZXctY2FwXG4gICAgICAgIGluc3RhbmNlOiBuZXcgcGFyZW50Q2xhc3ModGhpcy5hcHAsIHRoaXMubmFtZXNwYWNlKVxuICAgICAgfSlcbiAgICB9XG4gICAgY29uc3QgZW50cnkgPSBpbmhlcml0YW5jZU1hcC5nZXQocGFyZW50Q2xhc3MpXG4gICAgaWYgKCFlbnRyeVt0eXBlXSkge1xuICAgICAgY29uc3QgcGFyZW50ID0gZW50cnkuaW5zdGFuY2VcbiAgICAgIGxldCB2YWx1ZXMgPSBwYXJlbnRbdHlwZV1cbiAgICAgIGlmIChwYXJlbnRDbGFzcyAhPT0gQ29udHJvbGxlcikge1xuICAgICAgICAvLyBSZWN1cnNpdmVseSBzZXQgdXAgaW5oZXJpdGFuY2UgY2hhaW5zLlxuICAgICAgICB2YWx1ZXMgPSBwYXJlbnQuaW5oZXJpdFZhbHVlcyh0eXBlKVxuICAgICAgfVxuICAgICAgZW50cnlbdHlwZV0gPSB2YWx1ZXNcbiAgICB9XG4gICAgLy8gSWYgdGhlcmUgYXJlIG5vIHZhbHVlcyBkZWZpbmVkIG9uIGB0aGlzYCB0aGF0IGRpZmZlciBmcm9tIHRoZSBwYXJlbnQsXG4gICAgLy8gc2V0IHRvIGFuIGVtcHR5IG9iamVjdCBzbyBpbmhlcml0YW5jZSBjYW4gYmUgc2V0IHVwIGFuZCBgcHJvY2Vzc1ZhbHVlcygpYFxuICAgIC8vIGNhbiBzdGlsbCBiZSBjYWxsZWQuXG4gICAgLy8gTk9URTogV2UgY2FuJ3QgY2hlY2sgd2l0aCBgdGhpcy5oYXNPd25Qcm9wZXJ0eSh0eXBlKWAgYmVjYXVzZSB0aGVcbiAgICAvLyBmaWVsZCBjYW4gYmUgb24gdGhlIGNsYXNzIHByb3RvdHlwZSBhcyB3ZWxsLCBpbiBjYXNlIG9mIGFjY2Vzc29ycy5cbiAgICBjb25zdCBwYXJlbnRWYWx1ZXMgPSBlbnRyeVt0eXBlXVxuICAgIGxldCBjdXJyZW50VmFsdWVzID0gdGhpc1t0eXBlXVxuICAgIGlmIChjdXJyZW50VmFsdWVzICYmIGN1cnJlbnRWYWx1ZXMgPT09IHBhcmVudFZhbHVlcykge1xuICAgICAgY3VycmVudFZhbHVlcyA9IHRoaXNbdHlwZV0gPSB7fVxuICAgIH1cbiAgICAvLyBDb21iaW5lIHBhcmVudFZhbHVlcyBhbmQgY3VycmVudFZhbHVlcyB3aXRoIGNvcnJlY3QgaW5oZXJpdGFuY2UuXG4gICAgcmV0dXJuIGlzT2JqZWN0KHBhcmVudFZhbHVlcykgJiYgaXNPYmplY3QoY3VycmVudFZhbHVlcylcbiAgICAgID8gT2JqZWN0LnNldFByb3RvdHlwZU9mKGN1cnJlbnRWYWx1ZXMsIHBhcmVudFZhbHVlcylcbiAgICAgIDogY3VycmVudFZhbHVlc1xuICB9XG5cbiAgcHJvY2Vzc1ZhbHVlcyh2YWx1ZXMpIHtcbiAgICBpZiAoIXZhbHVlcykgcmV0dXJuIHt9XG4gICAgLy8gUmVzcGVjdCBgYWxsb3dgIHNldHRpbmdzIGFuZCBjbGVhciBlbnRyaWVzIHRoYXQgYXJlbid0IGFsbG93ZWQuXG4gICAgLy8gQWxzbyBjb2xsZWN0IGFuZCBleHBhbmQgYGF1dGhvcml6ZWAgc2V0dGluZ3Mgc28gdGhhdCBpbiB0aGUgZW5kLCBhblxuICAgIC8vIGBhdXRob3JpemVgIG9iamVjdCBjYW4gYmUgcmV0dXJuZWQgd2l0aCB2YWxpZCBzZXR0aW5ncyBmb3IgYWxsIHZhbHVlcy5cbiAgICAvL1xuICAgIC8vIFJ1bGVzOlxuICAgIC8vIC0gT3duIHZhbHVlcyBvbiBvYmplY3RzIHRoYXQgZG9uJ3QgZGVmaW5lIGFuIGBhbGxvd2AgYXJyYXkgYXJlXG4gICAgLy8gICBhdXRvbWF0aWNhbGx5IGFsbG93ZWQuIElmIGFuIGBhbGxvd2AgYXJyYXkgaXMgZGVmaW5lZCBhcyB3ZWxsLCB0aGVuXG4gICAgLy8gICB0aGVzZSBvd24gdmFsdWVzIG5lZWQgdG8gYmUgZXhwbGljaXRseSBsaXN0ZWQuXG4gICAgLy8gLSBJZiBubyBgYWxsb3dgIGFycmF5cyBhcmUgZGVmaW5lZCBpbiB0aGUgcHJvdG90eXBhbCBoaWVyYXJjaHksIGVhY2hcbiAgICAvLyAgIGxldmVsIGFsbG93cyBpdHMgb3duIHZhbHVlcywgYW5kIHRoZXNlIGFyZSBtZXJnZWQsIGV4Y2VwdCBmb3IgdGhvc2VcbiAgICAvLyAgIG1hcmtlZCBhcyBgJGNvcmVgLCB3aGljaCBuZWVkIHRvIGJlIGV4cGxpY2l0bHkgbGlzdGVkIGluIGBhbGxvd2AuXG5cbiAgICAvLyBOT1RFOiBgaGFuZGxlQWxsb3coKWAgYW5kIGBoYW5kbGVBdXRob3JpemUoKWAgYXJlIGFwcGxpZWQgaW4gc2VxdWVuY2Ugb2ZcbiAgICAvLyB0aGUgYHZhbHVlc2AgaW5oZXJpdGFuY2UsIGZyb20gc3ViLWNsYXNzIHRvIGJhc2UtY2xhc3MuXG5cbiAgICBjb25zdCBtZXJnZWRBbGxvdyA9IHt9XG4gICAgY29uc3QgbWVyZ2VkQXV0aG9yaXplID0ge31cbiAgICBsZXQgaGFzT3duQWxsb3cgPSBmYWxzZVxuXG4gICAgY29uc3QgZXhjbHVkZUtleSA9IGtleSA9PiBbJ2FsbG93JywgJ2F1dGhvcml6ZSddLmluY2x1ZGVzKGtleSlcblxuICAgIGNvbnN0IGhhbmRsZUFsbG93ID0gKGFsbG93LCBjdXJyZW50KSA9PiB7XG4gICAgICBpZiAoYWxsb3cpIHtcbiAgICAgICAgYWxsb3cgPSBhc0FycmF5KGFsbG93KVxuICAgICAgICBoYXNPd25BbGxvdyA9IHRydWVcbiAgICAgIH0gZWxzZSBpZiAoIWhhc093bkFsbG93KSB7XG4gICAgICAgIC8vIE9ubHkga2VlcCBhZGRpbmcgdG8gdGhlIG1lcmdlZCBgYWxsb3dgIGlmIHdlIGRpZG4ndCBhbHJlYWR5IGVuY291bnRlclxuICAgICAgICAvLyBhbiBvd24gYGFsbG93YCBvYmplY3QgZnVydGhlciB1cCB0aGUgY2hhaW4uXG4gICAgICAgIGFsbG93ID0gT2JqZWN0LmtleXMoY3VycmVudClcbiAgICAgIH1cbiAgICAgIGlmIChhbGxvdykge1xuICAgICAgICBpZiAoYWxsb3cuaW5jbHVkZXMoJyonKSkge1xuICAgICAgICAgIGFsbG93ID0gZ2V0QWxsS2V5cyhjdXJyZW50KVxuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIGFsbG93KSB7XG4gICAgICAgICAgaWYgKCFleGNsdWRlS2V5KGtleSkpIHtcbiAgICAgICAgICAgIG1lcmdlZEFsbG93W2tleV0gPSB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgaGFuZGxlQXV0aG9yaXplID0gYXV0aG9yaXplID0+IHtcbiAgICAgIGNvbnN0IGFkZCA9IChrZXksIHZhbHVlKSA9PiB7XG4gICAgICAgIC8vIFNpbmNlIHdlJ3JlIHdhbGtpbmcgdXAgaW4gdGhlIGluaGVyaXRhbmNlIGNoYWluLCBvbmx5IHRha2Ugb24gYW5cbiAgICAgICAgLy8gYXV0aG9yaXplIHNldHRpbmcgZm9yIGEgZ2l2ZW4ga2V5IGlmIGl0IHdhc24ndCBhbHJlYWR5IGRlZmluZWQgYmVmb3JlXG4gICAgICAgIGlmIChcbiAgICAgICAgICBrZXkgaW4gdmFsdWVzICYmXG4gICAgICAgICAgIShrZXkgaW4gbWVyZ2VkQXV0aG9yaXplKSAmJlxuICAgICAgICAgICFleGNsdWRlS2V5KGtleSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgbWVyZ2VkQXV0aG9yaXplW2tleV0gPSB2YWx1ZVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChpc09iamVjdChhdXRob3JpemUpKSB7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIGF1dGhvcml6ZSkge1xuICAgICAgICAgIGFkZChrZXksIGF1dGhvcml6ZVtrZXldKVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGF1dGhvcml6ZSAhPSBudWxsKSB7XG4gICAgICAgIC8vIFRoaXMgaXMgYSB2YWx1ZXMtd2lkZSBzZXR0aW5nLiBMb29wIHRocm91Z2ggYWxsIHZhbHVlcywgbm90IGp1c3RcbiAgICAgICAgLy8gY3VycmVudCBvbmVzLCBhbmQgYXBwbHkgdG8gYW55IGFjdGlvbiB0aGF0IGRvZXNuJ3QgYWxyZWFkeSBoYXZlIG9uZTpcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gdmFsdWVzKSB7XG4gICAgICAgICAgYWRkKGtleSwgYXV0aG9yaXplKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUHJvY2VzcyB0aGUgYGFsbG93YCBhbmQgYGF1dGhvcml6ZWAgc2V0dGluZ3MgaW4gc2VxdWVuY2Ugb2YgdGhlIGB2YWx1ZXNgXG4gICAgLy8gaW5oZXJpdGFuY2UsIGZyb20gc3ViLWNsYXNzIHRvIGJhc2UtY2xhc3MuXG4gICAgbGV0IGN1cnJlbnQgPSB2YWx1ZXNcbiAgICB3aGlsZSAoY3VycmVudCAhPT0gT2JqZWN0LnByb3RvdHlwZSAmJiAhY3VycmVudC5oYXNPd25Qcm9wZXJ0eSgnJGNvcmUnKSkge1xuICAgICAgaGFuZGxlQWxsb3coZ2V0T3duUHJvcGVydHkoY3VycmVudCwgJ2FsbG93JyksIGN1cnJlbnQpXG4gICAgICBoYW5kbGVBdXRob3JpemUoZ2V0T3duUHJvcGVydHkoY3VycmVudCwgJ2F1dGhvcml6ZScpKVxuICAgICAgY3VycmVudCA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihjdXJyZW50KVxuICAgIH1cblxuICAgIC8vIEF0IHRoZSBlbmQgb2YgdGhlIGNoYWluLCBhbHNvIHN1cHBvcnQgYm90aCBzZXR0aW5ncyBvbiB0aGUgY29udHJvbGxlci1cbiAgICAvLyBsZXZlbCwgYW5kIHRodXMgYXBwbGllZCB0byBhbGwgYWN0aW9uIG9iamVjdHMgaW4gdGhlIGNvbnRyb2xsZXIuXG4gICAgaWYgKHRoaXMuYWxsb3cpIHtcbiAgICAgIGhhbmRsZUFsbG93KHRoaXMuYWxsb3csIHZhbHVlcylcbiAgICB9XG4gICAgaWYgKHRoaXMuYXV0aG9yaXplKSB7XG4gICAgICBoYW5kbGVBdXRob3JpemUodGhpcy5hdXRob3JpemUpXG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIC8vIENyZWF0ZSBhIGZpbHRlcmVkIGB2YWx1ZXNgIG9iamVjdCB0aGF0IG9ubHkgY29udGFpbnMgdGhlIGFsbG93ZWQgZmllbGRzXG4gICAgICB2YWx1ZXM6IGdldEFsbEtleXModmFsdWVzKS5yZWR1Y2UoXG4gICAgICAgIChyZXN1bHQsIGtleSkgPT4ge1xuICAgICAgICAgIGlmIChtZXJnZWRBbGxvd1trZXldKSB7XG4gICAgICAgICAgICByZXN1bHRba2V5XSA9IHZhbHVlc1trZXldXG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiByZXN1bHRcbiAgICAgICAgfSxcbiAgICAgICAgLy8gQ3JlYXRlIGEgbmV3IG9iamVjdCBmb3IgdGhlIGZpbHRlcmVkIGB2YWx1ZXNgIHRoYXQga2VlcHMgaW5oZXJpdGFuY2VcbiAgICAgICAgLy8gaW50YWN0LiBUaGlzIGlzIHJlcXVpcmVkIGJ5IGBzZXR1cEhhbmRsZXJGcm9tT2JqZWN0KClgLCB0byBzdXBwb3J0XG4gICAgICAgIC8vIGBzdXBlcmAgaW4gaGFuZGxlciBmdW5jdGlvbnMuXG4gICAgICAgIE9iamVjdC5jcmVhdGUoT2JqZWN0LmdldFByb3RvdHlwZU9mKHZhbHVlcykpXG4gICAgICApLFxuICAgICAgYWxsb3c6IE9iamVjdC5rZXlzKG1lcmdlZEFsbG93KSxcbiAgICAgIGF1dGhvcml6ZTogbWVyZ2VkQXV0aG9yaXplXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZW1pdEhvb2sodHlwZSwgaGFuZGxlUmVzdWx0LCBjdHgsIC4uLmFyZ3MpIHtcbiAgICBsZXQgcmVzdWx0ID0gaGFuZGxlUmVzdWx0ID8gYXJncy5zaGlmdCgpIDogdW5kZWZpbmVkXG4gICAgZm9yIChjb25zdCBoYW5kbGVyIG9mIHRoaXMubGlzdGVuZXJzKHR5cGUpKSB7XG4gICAgICBpZiAoaGFuZGxlUmVzdWx0KSB7XG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGhhbmRsZXIuY2FsbCh0aGlzLCBjdHgsIHJlc3VsdCwgLi4uYXJncylcbiAgICAgICAgaWYgKHJlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmVzdWx0ID0gcmVzXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGF3YWl0IGhhbmRsZXIuY2FsbCh0aGlzLCBjdHgsIC4uLmFyZ3MpXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHRcbiAgfVxuXG4gIGFzeW5jIGdldE1lbWJlcigvKiBjdHgsIGJhc2UgPSB0aGlzLCBwYXJhbSA9IHsgLi4uIH0gKi8pIHtcbiAgICAvLyBUaGlzIGlzIG9ubHkgZGVmaW5lZCBpbiBgQ29sbGVjdGlvbkNvbnRyb2xsZXJgLCB3aGVyZSBpdCByZXNvbHZlcyB0byB0aGVcbiAgICAvLyBtZW1iZXIgcmVwcmVzZW50ZWQgYnkgdGhlIGdpdmVuIHJvdXRlLlxuICAgIHJldHVybiBudWxsXG4gIH1cblxuICAvKipcbiAgICogQ29udmVydHMgdGhlIGF1dGhvcml6ZSBjb25maWcgc2V0dGluZ3MgaW50byBhbiBhdXRob3JpemF0aW9uIGZ1bmN0aW9uIHRoYXRcbiAgICogY2FuIGJlIHBhc3NlZCB0byBgaGFuZGxlQXV0aG9yaXphdGlvbigpYC5cbiAgICpcbiAgICogQHBhcmFtIHtib29sZWFufGZ1bmN0aW9ufHN0cmluZ3xzdHJpbmdbXX0gYXV0aG9yaXplIHRoZSBhdXRob3JpemUgY29uZmlnXG4gICAqIHNldHRpbmdzXG4gICAqIEByZXR1cm4ge2Z1bmN0aW9ufSB0aGUgYXV0aG9yaXphdGlvbiBmdW5jdGlvblxuICAgKi9cbiAgcHJvY2Vzc0F1dGhvcml6ZShhdXRob3JpemUpIHtcbiAgICBpZiAoYXV0aG9yaXplID09IG51bGwpIHtcbiAgICAgIHJldHVybiAoKSA9PiB0cnVlXG4gICAgfSBlbHNlIGlmIChpc0Jvb2xlYW4oYXV0aG9yaXplKSkge1xuICAgICAgcmV0dXJuICgpID0+IGF1dGhvcml6ZVxuICAgIH0gZWxzZSBpZiAoaXNGdW5jdGlvbihhdXRob3JpemUpKSB7XG4gICAgICByZXR1cm4gYXN5bmMgKGN0eCwgbWVtYmVyKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGF1dGhvcml6ZShjdHgsIG1lbWJlcilcbiAgICAgICAgLy8gUGFzcyByZXMgdGhyb3VnaCBgcHJvY2Vzc0F1dGhvcml6ZSgpYCB0byBzdXBwb3J0IHN0cmluZ3MgJiBhcnJheXMuXG4gICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NBdXRob3JpemUocmVzKShjdHgsIG1lbWJlcilcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGlzU3RyaW5nKGF1dGhvcml6ZSkgfHwgaXNBcnJheShhdXRob3JpemUpKSB7XG4gICAgICByZXR1cm4gYXN5bmMgKGN0eCwgbWVtYmVyKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgdXNlciB9ID0gY3R4LnN0YXRlXG4gICAgICAgIGlmICghdXNlcikge1xuICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHZhbHVlcyA9IGFzQXJyYXkoYXV0aG9yaXplKVxuICAgICAgICAvLyBGb3IgJyRvd25lcicsIGZldGNoIGBtZW1iZXJgIG5vdyBpbiBjYXNlIHRoZSBhY3Rpb24gcGFyYW1ldGVyc1xuICAgICAgICAvLyBkaWRuJ3QgYWxyZWFkeSByZXF1ZXN0IGl0OlxuICAgICAgICBpZiAoIW1lbWJlciAmJiB2YWx1ZXMuaW5jbHVkZXMoJyRvd25lcicpKSB7XG4gICAgICAgICAgbWVtYmVyID0gYXdhaXQgdGhpcy5nZXRNZW1iZXIoY3R4KVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiAhIXZhbHVlcy5maW5kKFxuICAgICAgICAvLyBTdXBwb3J0IDMgc2NlbmFyaW9zOlxuICAgICAgICAvLyAtICckc2VsZic6IFRoZSByZXF1ZXN0ZWQgbWVtYmVyIGlzIGNoZWNrZWQgYWdhaW5zdCBgY3R4LnN0YXRlLnVzZXJgXG4gICAgICAgIC8vICAgYW5kIHRoZSBhY3Rpb24gaXMgb25seSBhdXRob3JpemVkIGlmIGl0IG1hdGNoZXMgdGhlIG1lbWJlci5cbiAgICAgICAgLy8gLSAnJG93bmVyJzogVGhlIG1lbWJlciBpcyBhc2tlZCBpZiBpdCBpcyBvd25lZCBieSBgY3R4LnN0YXRlLnVzZXJgXG4gICAgICAgIC8vICAgdGhyb3VnaCB0aGUgb3B0aW9uYWwgYE1vZGVsLiRoYXNPd25lcigpYCBtZXRob2QuXG4gICAgICAgIC8vIC0gYW55IHN0cmluZzogIGBjdHguc3RhdGUudXNlcmAgaXMgY2hlY2tlZCBmb3IgdGhpcyByb2xlIHRocm91Z2hcbiAgICAgICAgLy8gICB0aGUgb3ZlcnJpZGFibGUgYFVzZXJNb2RlbC5oYXNSb2xlKClgIG1ldGhvZC5cbiAgICAgICAgICB2YWx1ZSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUgPT09ICckc2VsZidcbiAgICAgICAgICAgICAgPyB1c2VyLmNvbnN0cnVjdG9yID09PSB0aGlzLm1vZGVsQ2xhc3MgJiZcbiAgICAgICAgICAgICAgZXF1YWxzKHVzZXIuJGlkKCksIGN0eC5tZW1iZXJJZClcbiAgICAgICAgICAgICAgOiB2YWx1ZSA9PT0gJyRvd25lcidcbiAgICAgICAgICAgICAgICA/IG1lbWJlcj8uJGhhc093bmVyPy4odXNlcilcbiAgICAgICAgICAgICAgICA6IHVzZXIuJGhhc1JvbGUodmFsdWUpXG4gICAgICAgICAgfVxuICAgICAgICApXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBDb250cm9sbGVyRXJyb3IodGhpcyxcbiAgICAgICAgYFVuc3VwcG9ydGVkIGF1dGhvcml6ZSBzZXR0aW5nOiAnJHthdXRob3JpemV9J2BcbiAgICAgIClcbiAgICB9XG4gIH1cblxuICBkZXNjcmliZUF1dGhvcml6ZShhdXRob3JpemUpIHtcbiAgICByZXR1cm4gaXNGdW5jdGlvbihhdXRob3JpemUpXG4gICAgICA/IGRlc2NyaWJlRnVuY3Rpb24oYXV0aG9yaXplKVxuICAgICAgOiBpc1N0cmluZyhhdXRob3JpemUpXG4gICAgICAgID8gYCcke2F1dGhvcml6ZX0nYFxuICAgICAgICA6IGlzQXJyYXkoYXV0aG9yaXplKVxuICAgICAgICAgID8gYFske2F1dGhvcml6ZS5tYXAodmFsdWUgPT4gYCcke3ZhbHVlfSdgKS5qb2luKCcsICcpfV1gXG4gICAgICAgICAgOiAnJ1xuICB9XG5cbiAgYXN5bmMgaGFuZGxlQXV0aG9yaXphdGlvbihhdXRob3JpemF0aW9uLCBjdHgsIG1lbWJlcikge1xuICAgIGNvbnN0IG9rID0gYXdhaXQgYXV0aG9yaXphdGlvbihjdHgsIG1lbWJlcilcbiAgICBpZiAob2sgIT09IHRydWUpIHtcbiAgICAgIHRocm93IG5ldyBBdXRob3JpemF0aW9uRXJyb3IoKVxuICAgIH1cbiAgfVxuXG4gIGxvZyhzdHIsIGluZGVudCA9IDApIHtcbiAgICBpZiAodGhpcy5sb2dnaW5nKSB7XG4gICAgICBjb25zb2xlLmluZm8oYCR7JyAgJy5yZXBlYXQoaW5kZW50KX0ke3N0cn1gKVxuICAgIH1cbiAgfVxufVxuXG5FdmVudEVtaXR0ZXIubWl4aW4oQ29udHJvbGxlci5wcm90b3R5cGUpXG5cbmNvbnN0IGluaGVyaXRhbmNlTWFwID0gbmV3IFdlYWtNYXAoKVxuXG5mdW5jdGlvbiBzZXR1cEhhbmRsZXJGcm9tT2JqZWN0KG9iamVjdCwgYWN0aW9ucykge1xuICBjb25zdCB7XG4gICAgaGFuZGxlcixcbiAgICBhY3Rpb24sXG4gICAgYXV0aG9yaXplLFxuICAgIHBhcmFtZXRlcnMsXG4gICAgcmV0dXJucyxcbiAgICBzY29wZSxcbiAgICB0cmFuc2FjdGVkXG4gIH0gPSBvYmplY3RcblxuICAvLyBJbiBvcmRlciB0byBzdXBvcnQgYHN1cGVyYCBjYWxscyBpbiB0aGUgYGhhbmRsZXJgIGZ1bmN0aW9uIGluIG9iamVjdFxuICAvLyBub3RhdGlvbiwgZGVwbG95IHRoaXMgY3JhenkgSlMgc29yY2VyeTpcbiAgT2JqZWN0LnNldFByb3RvdHlwZU9mKG9iamVjdCwgT2JqZWN0LmdldFByb3RvdHlwZU9mKGFjdGlvbnMpKVxuXG4gIGhhbmRsZXIuYXV0aG9yaXplID0gYXV0aG9yaXplXG4gIGhhbmRsZXIudHJhbnNhY3RlZCA9IHRyYW5zYWN0ZWRcblxuICBpZiAoYWN0aW9uKSB7XG4gICAgY29uc3QgW3ZlcmIsIHBhdGhdID0gYXNBcnJheShhY3Rpb24pXG4gICAgaGFuZGxlci52ZXJiID0gdmVyYlxuICAgIGhhbmRsZXIucGF0aCA9IHBhdGhcbiAgfVxuXG4gIGlmIChwYXJhbWV0ZXJzKSB7XG4gICAgY29uc3QgW19wYXJhbWV0ZXJzLCBvcHRpb25zXSA9IHBhcmFtZXRlcnNcbiAgICBjb25zdCBoYXNPcHRpb25zID0gaXNBcnJheShfcGFyYW1ldGVycylcbiAgICBoYW5kbGVyLnBhcmFtZXRlcnMgPSBoYXNPcHRpb25zID8gX3BhcmFtZXRlcnMgOiBwYXJhbWV0ZXJzXG5cbiAgICAvLyBJZiB2YWxpZGF0aW9uIG9wdGlvbnMgYXJlIHByb3ZpZGVkLCBleHBvc2UgdGhlbSB0aHJvdWdoXG4gICAgLy8gYGhhbmRsZXIub3B0aW9ucy5wYXJhbWV0ZXJzYCwgc2VlIENvbnRyb2xsZXJBY3Rpb25cbiAgICBpZiAoaGFzT3B0aW9ucykge1xuICAgICAgaGFuZGxlci5vcHRpb25zID0ge1xuICAgICAgICAuLi5oYW5kbGVyLm9wdGlvbnMsXG4gICAgICAgIHBhcmFtZXRlcnM6IG9wdGlvbnNcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAocmV0dXJucykge1xuICAgIGNvbnN0IFtfcmV0dXJucywgb3B0aW9uc10gPSBhc0FycmF5KHJldHVybnMpXG4gICAgaGFuZGxlci5yZXR1cm5zID0gX3JldHVybnNcblxuICAgIC8vIElmIHZhbGlkYXRpb24gb3B0aW9ucyBhcmUgcHJvdmlkZWQsIGV4cG9zZSB0aGVtIHRocm91Z2hcbiAgICAvLyBgaGFuZGxlci5vcHRpb25zLnJldHVybnNgLCBzZWUgQ29udHJvbGxlckFjdGlvblxuICAgIGlmIChvcHRpb25zKSB7XG4gICAgICBoYW5kbGVyLm9wdGlvbnMgPSB7XG4gICAgICAgIC4uLmhhbmRsZXIub3B0aW9ucyxcbiAgICAgICAgcGFyYW1ldGVyczogb3B0aW9uc1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChzY29wZSkge1xuICAgIGhhbmRsZXIuc2NvcGUgPSBhc0FycmF5KHNjb3BlKVxuICB9XG5cbiAgcmV0dXJuIGhhbmRsZXJcbn1cbiJdfQ==
@@ -3,6 +3,16 @@
3
3
  exports.__esModule = true;
4
4
  exports.default = 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.map.js");
13
+
14
+ require("core-js/modules/esnext.iterator.map.js");
15
+
6
16
  var _utils = require("@ditojs/utils");
7
17
 
8
18
  class ControllerAction {
@@ -148,8 +158,9 @@ class ControllerAction {
148
158
  if (errors.length > 0) {
149
159
  throw this.createValidationError({
150
160
  type: 'ParameterValidation',
151
- message: `The provided data is not valid: ${JSON.stringify(getData())}`,
152
- errors
161
+ message: 'The provided action parameters are not valid',
162
+ errors,
163
+ json: getData()
153
164
  });
154
165
  }
155
166
  }
@@ -169,8 +180,9 @@ class ControllerAction {
169
180
  } catch (error) {
170
181
  throw this.createValidationError({
171
182
  type: 'ResultValidation',
172
- message: `Invalid result of action: ${JSON.stringify(getResult())}`,
173
- errors: error.errors
183
+ message: 'The returned action result is not valid',
184
+ errors: error.errors,
185
+ json: getResult()
174
186
  });
175
187
  }
176
188
  }
@@ -215,7 +227,7 @@ class ControllerAction {
215
227
  }
216
228
 
217
229
  coerceValue(type, value, modelOptions) {
218
- if (['date', 'datetime', 'timestamp'].includes(type)) {
230
+ if (value && ['date', 'datetime', 'timestamp'].includes(type)) {
219
231
  value = new Date(value);
220
232
  } else {
221
233
  const objectType = (0, _utils.asArray)(type).find(type => type === 'object' || type in this.app.models);
@@ -261,4 +273,4 @@ class ControllerAction {
261
273
  }
262
274
 
263
275
  exports.default = ControllerAction;
264
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250cm9sbGVycy9Db250cm9sbGVyQWN0aW9uLmpzIl0sIm5hbWVzIjpbIkNvbnRyb2xsZXJBY3Rpb24iLCJjb25zdHJ1Y3RvciIsImNvbnRyb2xsZXIiLCJoYW5kbGVyIiwidHlwZSIsIm5hbWUiLCJ2ZXJiIiwicGF0aCIsImF1dGhvcml6ZSIsImlkZW50aWZpZXIiLCJ0cmFuc2FjdGVkIiwiY29yZSIsImdyYXBoIiwiYXNzZXRzIiwiYXV0aG9yaXphdGlvbiIsInByb2Nlc3NBdXRob3JpemUiLCJhcHAiLCJwYXJhbXNOYW1lIiwiaW5jbHVkZXMiLCJwYXJhbWV0ZXJzIiwicmV0dXJucyIsIm9wdGlvbnMiLCJjb21waWxlUGFyYW1ldGVyc1ZhbGlkYXRvciIsImFzeW5jIiwiZGF0YU5hbWUiLCJ1c2VJbnN0YW5jZU9mIiwiZ2V0UGFyYW1zIiwiY3R4IiwiZnJvbSIsInZhbHVlIiwicGFyYW1zIiwicmVxdWVzdCIsImlzTnVsbCIsImhlYWRlcnMiLCJPYmplY3QiLCJrZXlzIiwibGVuZ3RoIiwiY2FsbEFjdGlvbiIsInZhbGlkYXRlUGFyYW1ldGVycyIsImFyZ3MiLCJtZW1iZXIiLCJjb2xsZWN0QXJndW1lbnRzIiwiaGFuZGxlQXV0aG9yaXphdGlvbiIsImVtaXRIb29rIiwicmVzdWx0IiwiY2FsbEhhbmRsZXIiLCJ2YWxpZGF0ZVJlc3VsdCIsImNhbGwiLCJjcmVhdGVWYWxpZGF0aW9uRXJyb3IiLCJ2YWxpZGF0ZSIsImRhdGEiLCJ1bndyYXBSb290IiwiZXJyb3JzIiwicm9vdCIsImxpc3QiLCJ3cmFwUm9vdCIsInBhcmFtTmFtZSIsImNvZXJjZWQiLCJjb2VyY2VWYWx1ZSIsInNraXBWYWxpZGF0aW9uIiwiZXJyIiwicHVzaCIsImRhdGFQYXRoIiwia2V5d29yZCIsIm1lc3NhZ2UiLCJ0b1N0cmluZyIsImdldERhdGEiLCJlcnJvciIsIkpTT04iLCJzdHJpbmdpZnkiLCJyZXR1cm5zTmFtZSIsImdldFJlc3VsdCIsImFzT2JqZWN0IiwiYWRkQXJndW1lbnQiLCJwYXJhbSIsImdldE1lbWJlciIsIm1vZGVsT3B0aW9ucyIsIkRhdGUiLCJvYmplY3RUeXBlIiwiZmluZCIsIm1vZGVscyIsInRlc3QiLCJwYXJzZSIsImZyb21FbnRyaWVzIiwic3BsaXQiLCJtYXAiLCJlbnRyeSIsImtleSIsInZhbCIsIm1vZGVsQ2xhc3MiLCJmcm9tSnNvbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTs7QUFFZSxNQUFNQSxnQkFBTixDQUF1QjtBQUNwQ0MsRUFBQUEsV0FBVyxDQUFDQyxVQUFELEVBQWFDLE9BQWIsRUFBc0JDLElBQXRCLEVBQTRCQyxJQUE1QixFQUFrQ0MsSUFBbEMsRUFBd0NDLElBQXhDLEVBQThDQyxTQUE5QyxFQUF5RDtBQUFBOztBQUNsRSxTQUFLTixVQUFMLEdBQWtCQSxVQUFsQjtBQUNBLFNBQUtDLE9BQUwsR0FBZUEsT0FBZjtBQUNBLFNBQUtDLElBQUwsR0FBWUEsSUFBWjtBQUNBLFNBQUtDLElBQUwsR0FBWUEsSUFBWjtBQUNBLFNBQUtJLFVBQUwsR0FBbUIsR0FBRUwsSUFBSyxJQUFHQyxJQUFLLEVBQWxDO0FBR0EsU0FBS0MsSUFBTCxHQUFZSCxPQUFPLENBQUNHLElBQVIsSUFBZ0JBLElBQTVCO0FBRUEsU0FBS0MsSUFBTCxvQkFBWUosT0FBTyxDQUFDSSxJQUFwQiw0QkFBNEJBLElBQTVCO0FBQ0EsU0FBS0MsU0FBTCxHQUFpQkwsT0FBTyxDQUFDSyxTQUFSLElBQXFCQSxTQUF0QztBQUNBLFNBQUtFLFVBQUwsR0FBa0IsQ0FBQyxFQUNqQlAsT0FBTyxDQUFDTyxVQUFSLElBQ0FSLFVBQVUsQ0FBQ1EsVUFEWCxJQUlBUCxPQUFPLENBQUNRLElBQVIsSUFBZ0JMLElBQUksS0FBSyxLQUF6QixLQUFtQ0osVUFBVSxDQUFDVSxLQUFYLElBQW9CVixVQUFVLENBQUNXLE1BQWxFLENBTGlCLENBQW5CO0FBT0EsU0FBS0MsYUFBTCxHQUFxQlosVUFBVSxDQUFDYSxnQkFBWCxDQUE0QixLQUFLUCxTQUFqQyxDQUFyQjtBQUNB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SyxHQUFHdUMsSUFBSSxDQUFDYyxLQUFMLENBQVdyRCxLQUFYLENBQVI7QUFDRDtBQUNGOztBQUNELFlBQUlpRCxVQUFVLEtBQUssUUFBZixJQUEyQixxQkFBU2pELEtBQVQsQ0FBL0IsRUFBZ0Q7QUFFOUMsZ0JBQU00RCxVQUFVLEdBQUcsS0FBS3pFLEdBQUwsQ0FBU2dFLE1BQVQsQ0FBZ0JGLFVBQWhCLENBQW5COztBQUNBLGNBQUlXLFVBQVUsSUFBSSxFQUFFNUQsS0FBSyxZQUFZNEQsVUFBbkIsQ0FBbEIsRUFBa0Q7QUFDaEQ1RCxZQUFBQSxLQUFLLEdBQUc0RCxVQUFVLENBQUNDLFFBQVgsQ0FBb0I3RCxLQUFwQixFQUEyQitDLFlBQTNCLENBQVI7QUFDRDtBQUNGO0FBQ0Y7QUFDRjs7QUFDRCxXQUFPL0MsS0FBUDtBQUNEOztBQUVjLFFBQVQ4QyxTQUFTLEdBQW1CO0FBR2hDLFdBQU8sSUFBUDtBQUNEOztBQXpSbUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc1N0cmluZywgaXNPYmplY3QsIGFzQXJyYXksIGNsb25lIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29udHJvbGxlckFjdGlvbiB7XG4gIGNvbnN0cnVjdG9yKGNvbnRyb2xsZXIsIGhhbmRsZXIsIHR5cGUsIG5hbWUsIHZlcmIsIHBhdGgsIGF1dGhvcml6ZSkge1xuICAgIHRoaXMuY29udHJvbGxlciA9IGNvbnRyb2xsZXJcbiAgICB0aGlzLmhhbmRsZXIgPSBoYW5kbGVyXG4gICAgdGhpcy50eXBlID0gdHlwZVxuICAgIHRoaXMubmFtZSA9IG5hbWVcbiAgICB0aGlzLmlkZW50aWZpZXIgPSBgJHt0eXBlfToke25hbWV9YFxuICAgIC8vIEFsbG93IGRlY29yYXRvcnMgb24gYWN0aW9ucyB0byBvdmVycmlkZSB0aGUgcHJlZGV0ZXJtaW5lZCBkZWZhdWx0cyBmb3JcbiAgICAvLyBgdmVyYmAsIGBwYXRoYCBhbmQgYGF1dGhvcml6ZWA6XG4gICAgdGhpcy52ZXJiID0gaGFuZGxlci52ZXJiIHx8IHZlcmJcbiAgICAvLyBVc2UgPz8gaW5zdGVhZCBvZiB8fCB0byBhbGxvdyAnJyB0byBvdmVycmlkZSB0aGUgcGF0aC5cbiAgICB0aGlzLnBhdGggPSBoYW5kbGVyLnBhdGggPz8gcGF0aFxuICAgIHRoaXMuYXV0aG9yaXplID0gaGFuZGxlci5hdXRob3JpemUgfHwgYXV0aG9yaXplXG4gICAgdGhpcy50cmFuc2FjdGVkID0gISEoXG4gICAgICBoYW5kbGVyLnRyYW5zYWN0ZWQgfHxcbiAgICAgIGNvbnRyb2xsZXIudHJhbnNhY3RlZCB8fFxuICAgICAgLy8gQ29yZSBncmFwaCBhbmQgYXNzZXRzIG9wZXJhdGlvbnMgYXJlIGFsd2F5cyB0cmFuc2FjdGVkLCB1bmxlc3MgdGhlIHZlcmJcbiAgICAgIC8vIGlzICdnZXQnOlxuICAgICAgaGFuZGxlci5jb3JlICYmIHZlcmIgIT09ICdnZXQnICYmIChjb250cm9sbGVyLmdyYXBoIHx8IGNvbnRyb2xsZXIuYXNzZXRzKVxuICAgIClcbiAgICB0aGlzLmF1dGhvcml6YXRpb24gPSBjb250cm9sbGVyLnByb2Nlc3NBdXRob3JpemUodGhpcy5hdXRob3JpemUpXG4gICAgdGhpcy5hcHAgPSBjb250cm9sbGVyLmFwcFxuICAgIHRoaXMucGFyYW1zTmFtZSA9IFsncG9zdCcsICdwdXQnLCAncGF0Y2gnXS5pbmNsdWRlcyh0aGlzLnZlcmIpXG4gICAgICA/ICdib2R5J1xuICAgICAgOiAncXVlcnknXG4gICAgY29uc3QgeyBwYXJhbWV0ZXJzLCByZXR1cm5zLCBvcHRpb25zID0ge30gfSA9IHRoaXMuaGFuZGxlclxuICAgIHRoaXMucGFyYW1ldGVycyA9IHRoaXMuYXBwLmNvbXBpbGVQYXJhbWV0ZXJzVmFsaWRhdG9yKHBhcmFtZXRlcnMsIHtcbiAgICAgIGFzeW5jOiB0cnVlLFxuICAgICAgLi4ub3B0aW9ucy5wYXJhbWV0ZXJzLCAvLyBTZWUgQHBhcmFtZXRlcnMoKSBkZWNvcmF0b3JcbiAgICAgIGRhdGFOYW1lOiB0aGlzLnBhcmFtc05hbWVcbiAgICB9KVxuICAgIHRoaXMucmV0dXJucyA9IHRoaXMuYXBwLmNvbXBpbGVQYXJhbWV0ZXJzVmFsaWRhdG9yKFxuICAgICAgcmV0dXJucyA/IFtyZXR1cm5zXSA6IFtdLFxuICAgICAge1xuICAgICAgICBhc3luYzogdHJ1ZSxcbiAgICAgICAgLy8gVXNlIGluc3RhbmNlb2YgY2hlY2tzIGluc3RlYWQgb2YgJHJlZiB0byBjaGVjayByZXR1cm5lZCB2YWx1ZXMuXG4gICAgICAgIC8vIFRPRE86IFRoYXQgZG9lc24ndCBndWFyYW50ZWUgdGhlIHZhbGlkaXR5IHRob3VnaC4uLlxuICAgICAgICAvLyBUaGlzIHNob3VsZCBhbHdheXMgYmUgJHJlZiBjaGVja3MsIEkgdGhpbms/XG4gICAgICAgIHVzZUluc3RhbmNlT2Y6IHRydWUsXG4gICAgICAgIC4uLm9wdGlvbnMucmV0dXJucywgLy8gU2VlIEByZXR1cm5zKCkgZGVjb3JhdG9yXG4gICAgICAgIGRhdGFOYW1lOiAncmV0dXJucydcbiAgICAgIH1cbiAgICApXG4gIH1cblxuICAvLyBQb3NzaWJsZSB2YWx1ZXMgZm9yIGBmcm9tYCBhcmU6XG4gIC8vIC0gJ3BhdGgnOiBVc2UgYGN0eC5wYXJhbXNgIHdoaWNoIGlzIG1hcHBlZCB0byB0aGUgcm91dGUgLyBwYXRoXG4gIC8vIC0gJ3F1ZXJ5JzogVXNlIGBjdHgucmVxdWVzdC5xdWVyeWAsIHJlZ2FyZGxlc3Mgb2YgdGhlIGFjdGlvbidzIHZlcmIuXG4gIC8vIC0gJ2JvZHknOiBVc2UgYGN0eC5yZXF1ZXN0LmJvZHlgLCByZWdhcmRsZXNzIG9mIHRoZSBhY3Rpb24ncyB2ZXJiLlxuICBnZXRQYXJhbXMoY3R4LCBmcm9tID0gdGhpcy5wYXJhbXNOYW1lKSB7XG4gICAgY29uc3QgdmFsdWUgPSBmcm9tID09PSAncGF0aCcgPyBjdHgucGFyYW1zIDogY3R4LnJlcXVlc3RbZnJvbV1cbiAgICAvLyBrb2EtYm9keXBhcnNlciBhbHdheXMgc2V0cyBhbiBvYmplY3QsIGV2ZW4gd2hlbiB0aGVyZSBpcyBubyBib2R5LlxuICAgIC8vIERldGVjdCB0aGlzIGhlcmUgYW5kIHJldHVybiBudWxsIGluc3RlYWQuXG4gICAgY29uc3QgaXNOdWxsID0gKFxuICAgICAgZnJvbSA9PT0gJ2JvZHknICYmXG4gICAgICBjdHgucmVxdWVzdC5oZWFkZXJzWydjb250ZW50LWxlbmd0aCddID09PSAnMCcgJiZcbiAgICAgIE9iamVjdC5rZXlzKHZhbHVlKS5sZW5ndGggPT09IDBcbiAgICApXG4gICAgcmV0dXJuIGlzTnVsbCA/IG51bGwgOiB2YWx1ZVxuICB9XG5cbiAgYXN5bmMgY2FsbEFjdGlvbihjdHgpIHtcbiAgICBjb25zdCBwYXJhbXMgPSBhd2FpdCB0aGlzLnZhbGlkYXRlUGFyYW1ldGVycyhjdHgpXG4gICAgY29uc3QgeyBhcmdzLCBtZW1iZXIgfSA9IGF3YWl0IHRoaXMuY29sbGVjdEFyZ3VtZW50cyhjdHgsIHBhcmFtcylcbiAgICBhd2FpdCB0aGlzLmNvbnRyb2xsZXIuaGFuZGxlQXV0aG9yaXphdGlvbih0aGlzLmF1dGhvcml6YXRpb24sIGN0eCwgbWVtYmVyKVxuICAgIGNvbnN0IHsgaWRlbnRpZmllciB9ID0gdGhpc1xuICAgIGF3YWl0IHRoaXMuY29udHJvbGxlci5lbWl0SG9vayhgYmVmb3JlOiR7aWRlbnRpZmllcn1gLCBmYWxzZSwgY3R4LCAuLi5hcmdzKVxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuY2FsbEhhbmRsZXIoY3R4LCAuLi5hcmdzKVxuICAgIHJldHVybiB0aGlzLnZhbGlkYXRlUmVzdWx0KFxuICAgICAgYXdhaXQgdGhpcy5jb250cm9sbGVyLmVtaXRIb29rKGBhZnRlcjoke2lkZW50aWZpZXJ9YCwgdHJ1ZSwgY3R4LCByZXN1bHQpXG4gICAgKVxuICB9XG5cbiAgYXN5bmMgY2FsbEhhbmRsZXIoY3R4LCAuLi5hcmdzKSB7XG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlci5jYWxsKHRoaXMuY29udHJvbGxlciwgY3R4LCAuLi5hcmdzKVxuICB9XG5cbiAgY3JlYXRlVmFsaWRhdGlvbkVycm9yKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gdGhpcy5hcHAuY3JlYXRlVmFsaWRhdGlvbkVycm9yKG9wdGlvbnMpXG4gIH1cblxuICBhc3luYyB2YWxpZGF0ZVBhcmFtZXRlcnMoY3R4KSB7XG4gICAgaWYgKCF0aGlzLnBhcmFtZXRlcnMudmFsaWRhdGUpIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuICAgIC8vIFNpbmNlIHZhbGlkYXRpb24gYWxzbyBwZXJmb3JtcyBjb2VyY2lvbiwgY3JlYXRlIGEgY2xvbmUgb2YgdGhlIHBhcmFtc1xuICAgIC8vIHNvIHRoYXQgdGhpcyBkb2Vzbid0IG1vZGlmeSB0aGUgZGF0YSBvbiBgY3R4YC5cbiAgICAvLyBOT1RFOiBUaGUgZGF0YSBjYW4gYmUgZWl0aGVyIGFuIG9iamVjdCBvciBhbiBhcnJheS5cbiAgICBjb25zdCBkYXRhID0gY2xvbmUodGhpcy5nZXRQYXJhbXMoY3R4KSlcbiAgICBsZXQgcGFyYW1zID0gZGF0YSB8fCB7fVxuICAgIGNvbnN0IHsgZGF0YU5hbWUgfSA9IHRoaXMucGFyYW1ldGVyc1xuICAgIGxldCB1bndyYXBSb290ID0gZmFsc2VcbiAgICBjb25zdCBlcnJvcnMgPSBbXVxuICAgIGZvciAoY29uc3Qge1xuICAgICAgbmFtZSwgLy8gU3RyaW5nOiBQcm9wZXJ0eSBuYW1lIHRvIGZldGNoIGZyb20gZGF0YS4gT3ZlcnJpZGFibGUgYnkgYHJvb3RgXG4gICAgICB0eXBlLCAvLyBTdHJpbmc6IFdoYXQgdHlwZSBzaG91bGQgdGhpcyB2YWxpZGF0ZWQgYWdhaW5zdCAvIGNvZXJjZWQgdG8uXG4gICAgICBmcm9tLCAvLyBTdHJpbmc6IEFsbG93IHBhcmFtZXRlcnMgdG8gYmUgJ2JvcnJvd2VkJyBmcm9tIG90aGVyIG9iamVjdHMuXG4gICAgICByb290LCAvLyBCb29sZWFuOiBVc2UgZnVsbCByb290IG9iamVjdCwgaW5zdGVhZCBvZiBkYXRhIGF0IGdpdmVuIHByb3BlcnR5LlxuICAgICAgbWVtYmVyIC8vIEJvb2xlYW46IEZldGNoIG1lbWJlciBpbnN0YW5jZSBpbnN0ZWQgb2YgZGF0YSBmcm9tIHJlcXVlc3QuXG4gICAgfSBvZiB0aGlzLnBhcmFtZXRlcnMubGlzdCkge1xuICAgICAgLy8gRG9uJ3QgdmFsaWRhdGUgbWVtYmVyIHBhcmFtZXRlcnMgYXMgdGhleSBnZXQgcmVzb2x2ZWQgc2VwYXJhdGVseSBhZnRlci5cbiAgICAgIGlmIChtZW1iZXIpIGNvbnRpbnVlXG4gICAgICBsZXQgd3JhcFJvb3QgPSByb290XG4gICAgICBsZXQgcGFyYW1OYW1lID0gbmFtZVxuICAgICAgLy8gSWYgbm8gbmFtZSBpcyBwcm92aWRlZCwgd3JhcCB0aGUgZnVsbCByb290IG9iamVjdCBhcyB2YWx1ZSBhbmQgdW53cmFwXG4gICAgICAvLyBhdCB0aGUgZW5kLCBzZWUgYHVud3JhcFJvb3RgLlxuICAgICAgaWYgKCFwYXJhbU5hbWUpIHtcbiAgICAgICAgcGFyYW1OYW1lID0gZGF0YU5hbWVcbiAgICAgICAgd3JhcFJvb3QgPSB0cnVlXG4gICAgICAgIHVud3JhcFJvb3QgPSB0cnVlXG4gICAgICB9XG4gICAgICBpZiAod3JhcFJvb3QpIHtcbiAgICAgICAgLy8gSWYgcm9vdCBpcyB0byBiZSB1c2VkLCByZXBsYWNlIGBwYXJhbXNgIHdpdGggYSBuZXcgb2JqZWN0IG9uIHdoaWNoXG4gICAgICAgIC8vIHRvIHNldCB0aGUgcm9vdCBvYmplY3QgdG8gdmFsaWRhdGUgdW5kZXIgYHBhcmFtZXRlcnMucGFyYW1OYW1lYFxuICAgICAgICBpZiAocGFyYW1zID09PSBkYXRhKSB7XG4gICAgICAgICAgcGFyYW1zID0ge31cbiAgICAgICAgfVxuICAgICAgICBwYXJhbXNbcGFyYW1OYW1lXSA9IGRhdGFcbiAgICAgIH1cbiAgICAgIGlmIChmcm9tKSB7XG4gICAgICAgIC8vIEFsbG93IHBhcmFtZXRlcnMgdG8gYmUgJ2JvcnJvd2VkJyBmcm9tIG90aGVyIG9iamVjdHMuXG4gICAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmdldFBhcmFtcyhjdHgsIGZyb20pXG4gICAgICAgIC8vIFNlZSBhYm92ZSBmb3IgYW4gZXhwbGFuYXRpb24gb2YgYGNsb25lKClgOlxuICAgICAgICBwYXJhbXNbcGFyYW1OYW1lXSA9IGNsb25lKHdyYXBSb290ID8gZGF0YSA6IGRhdGE/LltwYXJhbU5hbWVdKVxuICAgICAgfVxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBwYXJhbXNbcGFyYW1OYW1lXVxuICAgICAgICAvLyBgcGFyYW1ldGVycy52YWxpZGF0ZShwYXJhbXMpYCBjb2VyY2VzIGRhdGEgaW4gdGhlIHF1ZXJ5IHRvIHRoZVxuICAgICAgICAvLyByZXF1aXJlZCBmb3JtYXRzLCBhY2NvcmRpbmcgdG8gdGhlIHJ1bGVzIHNwZWNpZmllZCBoZXJlOlxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZXBvYmVyZXpraW4vYWp2L2Jsb2IvbWFzdGVyL0NPRVJDSU9OLm1kXG4gICAgICAgIC8vIENvZXJjaW9uIGlzbid0IGN1cnJlbnRseSBvZmZlcmVkIGZvciAnb2JqZWN0JyBhbmQgJ2RhdGUnIHR5cGVzLFxuICAgICAgICAvLyBzbyBoYW5kbGUgdGhlc2UgY2FzZXMgcHJpb3IgdG8gdGhlIGNhbGwgb2YgYHBhcmFtZXRlcnMudmFsaWRhdGUoKWA6XG4gICAgICAgIGNvbnN0IGNvZXJjZWQgPSB0aGlzLmNvZXJjZVZhbHVlKHR5cGUsIHZhbHVlLCB7XG4gICAgICAgICAgLy8gVGhlIG1vZGVsIHZhbGlkYXRpb24gaXMgaGFuZGxlZCBzZXBhcmF0ZWx5IHRocm91Z2ggYCRyZWZgLlxuICAgICAgICAgIHNraXBWYWxpZGF0aW9uOiB0cnVlXG4gICAgICAgIH0pXG4gICAgICAgIC8vIElmIGNvZXJjaW9uIGhhcHBlbmVkLCByZXBsYWNlIHZhbHVlIGluIHBhcmFtcyB3aXRoIGNvZXJjZWQgb25lOlxuICAgICAgICBpZiAoY29lcmNlZCAhPT0gdmFsdWUpIHtcbiAgICAgICAgICBwYXJhbXNbcGFyYW1OYW1lXSA9IGNvZXJjZWRcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIC8vIENvbnZlcnQgZXJyb3IgdG8gQWp2IHZhbGlkYXRpb24gZXJyb3IgZm9ybWF0OlxuICAgICAgICBlcnJvcnMucHVzaCh7XG4gICAgICAgICAgZGF0YVBhdGg6IGAuJHtwYXJhbU5hbWV9YCwgLy8gSmF2YVNjcmlwdCBwcm9wZXJ0eSBhY2Nlc3Mgbm90YXRpb25cbiAgICAgICAgICBrZXl3b3JkOiAndHlwZScsXG4gICAgICAgICAgbWVzc2FnZTogZXJyLm1lc3NhZ2UgfHwgZXJyLnRvU3RyaW5nKCksXG4gICAgICAgICAgcGFyYW1zOiB7IHR5cGUgfVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGdldERhdGEgPSAoKSA9PiB1bndyYXBSb290ID8gcGFyYW1zW2RhdGFOYW1lXSA6IHBhcmFtc1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLnBhcmFtZXRlcnMudmFsaWRhdGUocGFyYW1zKVxuICAgICAgcmV0dXJuIGdldERhdGEoKVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoZXJyb3IuZXJyb3JzKSB7XG4gICAgICAgIGVycm9ycy5wdXNoKC4uLmVycm9yLmVycm9ycylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IGVycm9yXG4gICAgICB9XG4gICAgfVxuICAgIGlmIChlcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgdGhyb3cgdGhpcy5jcmVhdGVWYWxpZGF0aW9uRXJyb3Ioe1xuICAgICAgICB0eXBlOiAnUGFyYW1ldGVyVmFsaWRhdGlvbicsXG4gICAgICAgIG1lc3NhZ2U6IGBUaGUgcHJvdmlkZWQgZGF0YSBpcyBub3QgdmFsaWQ6ICR7SlNPTi5zdHJpbmdpZnkoZ2V0RGF0YSgpKX1gLFxuICAgICAgICBlcnJvcnNcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgdmFsaWRhdGVSZXN1bHQocmVzdWx0KSB7XG4gICAgaWYgKHRoaXMucmV0dXJucy52YWxpZGF0ZSkge1xuICAgICAgY29uc3QgcmV0dXJuc05hbWUgPSB0aGlzLmhhbmRsZXIucmV0dXJucy5uYW1lXG4gICAgICAvLyBVc2UgZGF0YU5hbWUgaWYgbm8gbmFtZSBpcyBnaXZlbiwgc2VlOlxuICAgICAgLy8gQXBwbGljYXRpb24uY29tcGlsZVBhcmFtZXRlcnNWYWxpZGF0b3IocmV0dXJucywgeyBkYXRhTmFtZSB9KVxuICAgICAgY29uc3QgZGF0YSA9IHtcbiAgICAgICAgW3JldHVybnNOYW1lIHx8IHRoaXMucmV0dXJucy5kYXRhTmFtZV06IHJlc3VsdFxuICAgICAgfVxuXG4gICAgICAvLyBJZiBhIG5hbWVkIHJlc3VsdCBpcyBkZWZpbmVkLCByZXR1cm4gdGhlIGRhdGEgd3JhcHBlZCxcbiAgICAgIC8vIG90aGVyd2lzZSByZXR1cm4gdGhlIG9yaWdpbmFsIHVud3JhcHBlZCByZXN1bHQgb2JqZWN0LlxuICAgICAgY29uc3QgZ2V0UmVzdWx0ID0gKCkgPT4gcmV0dXJuc05hbWUgPyBkYXRhIDogcmVzdWx0XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0aGlzLnJldHVybnMudmFsaWRhdGUoZGF0YSlcbiAgICAgICAgcmV0dXJuIGdldFJlc3VsdCgpXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICB0aHJvdyB0aGlzLmNyZWF0ZVZhbGlkYXRpb25FcnJvcih7XG4gICAgICAgICAgdHlwZTogJ1Jlc3VsdFZhbGlkYXRpb24nLFxuICAgICAgICAgIG1lc3NhZ2U6IGBJbnZhbGlkIHJlc3VsdCBvZiBhY3Rpb246ICR7SlNPTi5zdHJpbmdpZnkoZ2V0UmVzdWx0KCkpfWAsXG4gICAgICAgICAgZXJyb3JzOiBlcnJvci5lcnJvcnNcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG5cbiAgYXN5bmMgY29sbGVjdEFyZ3VtZW50cyhjdHgsIHBhcmFtcykge1xuICAgIGNvbnN0IHsgbGlzdCwgYXNPYmplY3QgfSA9IHRoaXMucGFyYW1ldGVyc1xuXG4gICAgY29uc3QgYXJncyA9IGFzT2JqZWN0ID8gW3t9XSA6IFtdXG4gICAgY29uc3QgYWRkQXJndW1lbnQgPSAobmFtZSwgdmFsdWUpID0+IHtcbiAgICAgIGlmIChhc09iamVjdCkge1xuICAgICAgICBhcmdzWzBdW25hbWVdID0gdmFsdWVcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFyZ3MucHVzaCh2YWx1ZSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgbWVtYmVyID0gbnVsbFxuICAgIC8vIElmIHdlIGhhdmUgcGFyYW1ldGVycywgYWRkIHRoZW0gdG8gdGhlIGFyZ3VtZW50cyBub3csXG4gICAgLy8gd2hpbGUgYWxzbyBrZWVwaW5nIHRyYWNrIG9mIGNvbnN1bWVkIHBhcmFtZXRlcnM6XG4gICAgZm9yIChjb25zdCBwYXJhbSBvZiBsaXN0KSB7XG4gICAgICBjb25zdCB7IG5hbWUgfSA9IHBhcmFtXG4gICAgICAvLyBIYW5kbGUgYHsgbWVtYmVyOiB0cnVlIH1gIHBhcmFtZXRlcnMgc2VwYXJhdGVseSwgYnkgZGVsZWdhdGluZyB0b1xuICAgICAgLy8gYGdldE1lbWJlcigpYCB0byByZXNvbHZlIHRvIHRoZSBnaXZlbiBtZW1iZXIuXG4gICAgICBpZiAocGFyYW0ubWVtYmVyKSB7XG4gICAgICAgIG1lbWJlciA9IGF3YWl0IHRoaXMuZ2V0TWVtYmVyKGN0eCwgcGFyYW0pXG4gICAgICAgIGFkZEFyZ3VtZW50KG5hbWUsIG1lbWJlcilcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIElmIG5vIG5hbWUgaXMgcHJvdmlkZWQsIHVzZSB0aGUgYm9keSBvYmplY3QgKHBhcmFtcylcbiAgICAgICAgYWRkQXJndW1lbnQobmFtZSwgbmFtZSA/IHBhcmFtc1tuYW1lXSA6IHBhcmFtcylcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHsgYXJncywgbWVtYmVyIH1cbiAgfVxuXG4gIGNvZXJjZVZhbHVlKHR5cGUsIHZhbHVlLCBtb2RlbE9wdGlvbnMpIHtcbiAgICAvLyBTZWUgaWYgcGFyYW0gbmVlZHMgYWRkaXRpb25hbCBjb2VyY2lvbjpcbiAgICBpZiAoWydkYXRlJywgJ2RhdGV0aW1lJywgJ3RpbWVzdGFtcCddLmluY2x1ZGVzKHR5cGUpKSB7XG4gICAgICB2YWx1ZSA9IG5ldyBEYXRlKHZhbHVlKVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTZWUgaWYgdGhlIGRlZmluZWQgdHlwZShzKSByZXF1aXJlIGNvZXJjaW9uIHRvIG9iamVjdHM6XG4gICAgICBjb25zdCBvYmplY3RUeXBlID0gYXNBcnJheSh0eXBlKS5maW5kKFxuICAgICAgICAvLyBDb2VyY2UgdG8gb2JqZWN0IGlmIHR5cGUgaXMgJ29iamVjdCcgb3IgYSBrbm93biBtb2RlbCBuYW1lLlxuICAgICAgICB0eXBlID0+IHR5cGUgPT09ICdvYmplY3QnIHx8IHR5cGUgaW4gdGhpcy5hcHAubW9kZWxzXG4gICAgICApXG4gICAgICBpZiAob2JqZWN0VHlwZSkge1xuICAgICAgICBpZiAodmFsdWUgJiYgaXNTdHJpbmcodmFsdWUpKSB7XG4gICAgICAgICAgaWYgKCEvXlxcey4qXFx9JC8udGVzdCh2YWx1ZSkpIHtcbiAgICAgICAgICAgIC8vIENvbnZlcnQgc2ltcGxpZmllZCBEaXRvIG9iamVjdCBub3RhdGlvbiB0byBKU09OLCBzdXBwb3J0aW5nOlxuICAgICAgICAgICAgLy8gLSBgXCJrZXkxXCI6WCwgXCJrZXkyXCI6WWAgKGN1cmx5IGJyYWNlcyBhcmUgYWRkZWQgYW5kIHBhcnNlZCB0aHJvdWdoXG4gICAgICAgICAgICAvLyAgIGBKU09OLnBhcnNlKClgKVxuICAgICAgICAgICAgLy8gLSBga2V5MTpYLGtleTI6WWAgKGEgc2ltcGxlIHBhcnNlciBpcyBhcHBsaWVkLCBzcGxpdHRpbmcgaW50b1xuICAgICAgICAgICAgLy8gICBlbnRyaWVzIGFuZCBrZXkvdmFsdWUgcGFpcnMsIHZhbHVzZSBhcmUgcGFyc2VkIHdpdGhcbiAgICAgICAgICAgIC8vICAgYEpTT04ucGFyc2UoKWAsIGZhbGxpbmcgYmFjayB0byBzdHJpbmcuXG4gICAgICAgICAgICBpZiAoL1wiLy50ZXN0KHZhbHVlKSkge1xuICAgICAgICAgICAgICAvLyBKdXN0IGFkZCB0aGUgY3VybHkgYnJhY2VzIGFuZCBwYXJzZSBhcyBKU09OXG4gICAgICAgICAgICAgIHZhbHVlID0gSlNPTi5wYXJzZShgeyR7dmFsdWV9fWApXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBBIHNpbXBsZSB2ZXJzaW9uIG9mIG5hbWVkIGtleS92YWx1ZSBwYWlycywgdmFsdWVzIGNhbiBiZVxuICAgICAgICAgICAgICAvLyBzdHJpbmdzIG9yIG51bWJlcnMuXG4gICAgICAgICAgICAgIHZhbHVlID0gT2JqZWN0LmZyb21FbnRyaWVzKHZhbHVlLnNwbGl0KC9cXHMqLFxccyovZykubWFwKGVudHJ5ID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgW2tleSwgdmFsXSA9IGVudHJ5LnNwbGl0KC9cXHMqOlxccyovKVxuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAvLyBUcnkgcGFyc2luZyBiYXNpYyB0eXBlcywgYnV0IGZhbGwgYmFjayB0byB1bnF1b3RlZCBzdHJpbmcuXG4gICAgICAgICAgICAgICAgICB2YWwgPSBKU09OLnBhcnNlKHZhbClcbiAgICAgICAgICAgICAgICB9IGNhdGNoIHt9XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtrZXksIHZhbF1cbiAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhbHVlID0gSlNPTi5wYXJzZSh2YWx1ZSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9iamVjdFR5cGUgIT09ICdvYmplY3QnICYmIGlzT2JqZWN0KHZhbHVlKSkge1xuICAgICAgICAgIC8vIENvbnZlcnQgdGhlIFBvam8gdG8gdGhlIGRlc2lyZWQgRGl0byBtb2RlbDpcbiAgICAgICAgICBjb25zdCBtb2RlbENsYXNzID0gdGhpcy5hcHAubW9kZWxzW29iamVjdFR5cGVdXG4gICAgICAgICAgaWYgKG1vZGVsQ2xhc3MgJiYgISh2YWx1ZSBpbnN0YW5jZW9mIG1vZGVsQ2xhc3MpKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IG1vZGVsQ2xhc3MuZnJvbUpzb24odmFsdWUsIG1vZGVsT3B0aW9ucylcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlXG4gIH1cblxuICBhc3luYyBnZXRNZW1iZXIoLyogY3R4LCBwYXJhbSAqLykge1xuICAgIC8vIFRoaXMgaXMgb25seSBkZWZpbmVkIGluIGBNZW1iZXJBY3Rpb25gLCB3aGVyZSBpdCByZXNvbHZlcyB0byB0aGUgbWVtYmVyXG4gICAgLy8gcmVwcmVzZW50ZWQgYnkgdGhlIGdpdmVuIHJvdXRlLlxuICAgIHJldHVybiBudWxsXG4gIH1cbn1cbiJdfQ==
276
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250cm9sbGVycy9Db250cm9sbGVyQWN0aW9uLmpzIl0sIm5hbWVzIjpbIkNvbnRyb2xsZXJBY3Rpb24iLCJjb25zdHJ1Y3RvciIsImNvbnRyb2xsZXIiLCJoYW5kbGVyIiwidHlwZSIsIm5hbWUiLCJ2ZXJiIiwicGF0aCIsImF1dGhvcml6ZSIsImlkZW50aWZpZXIiLCJ0cmFuc2FjdGVkIiwiY29yZSIsImdyYXBoIiwiYXNzZXRzIiwiYXV0aG9yaXphdGlvbiIsInByb2Nlc3NBdXRob3JpemUiLCJhcHAiLCJwYXJhbXNOYW1lIiwiaW5jbHVkZXMiLCJwYXJhbWV0ZXJzIiwicmV0dXJucyIsIm9wdGlvbnMiLCJjb21waWxlUGFyYW1ldGVyc1ZhbGlkYXRvciIsImFzeW5jIiwiZGF0YU5hbWUiLCJ1c2VJbnN0YW5jZU9mIiwiZ2V0UGFyYW1zIiwiY3R4IiwiZnJvbSIsInZhbHVlIiwicGFyYW1zIiwicmVxdWVzdCIsImlzTnVsbCIsImhlYWRlcnMiLCJPYmplY3QiLCJrZXlzIiwibGVuZ3RoIiwiY2FsbEFjdGlvbiIsInZhbGlkYXRlUGFyYW1ldGVycyIsImFyZ3MiLCJtZW1iZXIiLCJjb2xsZWN0QXJndW1lbnRzIiwiaGFuZGxlQXV0aG9yaXphdGlvbiIsImVtaXRIb29rIiwicmVzdWx0IiwiY2FsbEhhbmRsZXIiLCJ2YWxpZGF0ZVJlc3VsdCIsImNhbGwiLCJjcmVhdGVWYWxpZGF0aW9uRXJyb3IiLCJ2YWxpZGF0ZSIsImRhdGEiLCJ1bndyYXBSb290IiwiZXJyb3JzIiwicm9vdCIsImxpc3QiLCJ3cmFwUm9vdCIsInBhcmFtTmFtZSIsImNvZXJjZWQiLCJjb2VyY2VWYWx1ZSIsInNraXBWYWxpZGF0aW9uIiwiZXJyIiwicHVzaCIsImRhdGFQYXRoIiwia2V5d29yZCIsIm1lc3NhZ2UiLCJ0b1N0cmluZyIsImdldERhdGEiLCJlcnJvciIsImpzb24iLCJyZXR1cm5zTmFtZSIsImdldFJlc3VsdCIsImFzT2JqZWN0IiwiYWRkQXJndW1lbnQiLCJwYXJhbSIsImdldE1lbWJlciIsIm1vZGVsT3B0aW9ucyIsIkRhdGUiLCJvYmplY3RUeXBlIiwiZmluZCIsIm1vZGVscyIsInRlc3QiLCJKU09OIiwicGFyc2UiLCJmcm9tRW50cmllcyIsInNwbGl0IiwibWFwIiwiZW50cnkiLCJrZXkiLCJ2YWwiLCJtb2RlbENsYXNzIiwiZnJvbUpzb24iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztBQUVlLE1BQU1BLGdCQUFOLENBQXVCO0FBQ3BDQyxFQUFBQSxXQUFXLENBQUNDLFVBQUQsRUFBYUMsT0FBYixFQUFzQkMsSUFBdEIsRUFBNEJDLElBQTVCLEVBQWtDQyxJQUFsQyxFQUF3Q0MsSUFBeEMsRUFBOENDLFNBQTlDLEVBQXlEO0FBQUE7O0FBQ2xFLFNBQUtOLFVBQUwsR0FBa0JBLFVBQWxCO0FBQ0EsU0FBS0MsT0FBTCxHQUFlQSxPQUFmO0FBQ0EsU0FBS0MsSUFBTCxHQUFZQSxJQUFaO0FBQ0EsU0FBS0MsSUFBTCxHQUFZQSxJQUFaO0FBQ0EsU0FBS0ksVUFBTCxHQUFtQixHQUFFTCxJQUFLLElBQUdDLElBQUssRUFBbEM7QUFHQSxTQUFLQyxJQUFMLEdBQVlILE9BQU8sQ0FBQ0csSUFBUixJQUFnQkEsSUFBNUI7QUFFQSxTQUFLQyxJQUFMLG9CQUFZSixPQUFPLENBQUNJLElBQXBCLDRCQUE0QkEsSUFBNUI7QUFDQSxTQUFLQyxTQUFMLEdBQWlCTCxPQUFPLENBQUNLLFNBQVIsSUFBcUJBLFNBQXRDO0FBQ0EsU0FBS0UsVUFBTCxHQUFrQixDQUFDLEVBQ2pCUCxPQUFPLENBQUNPLFVBQVIsSUFDQVIsVUFBVSxDQUFDUSxVQURYLElBSUFQLE9BQU8sQ0FBQ1EsSUFBUixJQUFnQkwsSUFBSSxLQUFLLEtBQXpCLEtBQW1DSixVQUFVLENBQUNVLEtBQVgsSUFBb0JWLFVBQVUsQ0FBQ1csTUFBbEUsQ0FMaUIsQ0FBbkI7QUFPQSxTQUFLQyxhQUFMLEdBQXFCWixVQUFVLENBQUNhLGdCQUFYLENBQTRCLEtBQUtQLFNBQWpDLENBQXJC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QUdvRCxJQUFJLENBQUNDLEtBQUwsQ0FBV3JELEtBQVgsQ0FBUjtBQUNEO0FBQ0Y7O0FBQ0QsWUFBSWdELFVBQVUsS0FBSyxRQUFmLElBQTJCLHFCQUFTaEQsS0FBVCxDQUEvQixFQUFnRDtBQUU5QyxnQkFBTTRELFVBQVUsR0FBRyxLQUFLekUsR0FBTCxDQUFTK0QsTUFBVCxDQUFnQkYsVUFBaEIsQ0FBbkI7O0FBQ0EsY0FBSVksVUFBVSxJQUFJLEVBQUU1RCxLQUFLLFlBQVk0RCxVQUFuQixDQUFsQixFQUFrRDtBQUNoRDVELFlBQUFBLEtBQUssR0FBRzRELFVBQVUsQ0FBQ0MsUUFBWCxDQUFvQjdELEtBQXBCLEVBQTJCOEMsWUFBM0IsQ0FBUjtBQUNEO0FBQ0Y7QUFDRjtBQUNGOztBQUNELFdBQU85QyxLQUFQO0FBQ0Q7O0FBRWMsUUFBVDZDLFNBQVMsR0FBbUI7QUFHaEMsV0FBTyxJQUFQO0FBQ0Q7O0FBM1JtQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzU3RyaW5nLCBpc09iamVjdCwgYXNBcnJheSwgY2xvbmUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb250cm9sbGVyQWN0aW9uIHtcbiAgY29uc3RydWN0b3IoY29udHJvbGxlciwgaGFuZGxlciwgdHlwZSwgbmFtZSwgdmVyYiwgcGF0aCwgYXV0aG9yaXplKSB7XG4gICAgdGhpcy5jb250cm9sbGVyID0gY29udHJvbGxlclxuICAgIHRoaXMuaGFuZGxlciA9IGhhbmRsZXJcbiAgICB0aGlzLnR5cGUgPSB0eXBlXG4gICAgdGhpcy5uYW1lID0gbmFtZVxuICAgIHRoaXMuaWRlbnRpZmllciA9IGAke3R5cGV9OiR7bmFtZX1gXG4gICAgLy8gQWxsb3cgZGVjb3JhdG9ycyBvbiBhY3Rpb25zIHRvIG92ZXJyaWRlIHRoZSBwcmVkZXRlcm1pbmVkIGRlZmF1bHRzIGZvclxuICAgIC8vIGB2ZXJiYCwgYHBhdGhgIGFuZCBgYXV0aG9yaXplYDpcbiAgICB0aGlzLnZlcmIgPSBoYW5kbGVyLnZlcmIgfHwgdmVyYlxuICAgIC8vIFVzZSA/PyBpbnN0ZWFkIG9mIHx8IHRvIGFsbG93ICcnIHRvIG92ZXJyaWRlIHRoZSBwYXRoLlxuICAgIHRoaXMucGF0aCA9IGhhbmRsZXIucGF0aCA/PyBwYXRoXG4gICAgdGhpcy5hdXRob3JpemUgPSBoYW5kbGVyLmF1dGhvcml6ZSB8fCBhdXRob3JpemVcbiAgICB0aGlzLnRyYW5zYWN0ZWQgPSAhIShcbiAgICAgIGhhbmRsZXIudHJhbnNhY3RlZCB8fFxuICAgICAgY29udHJvbGxlci50cmFuc2FjdGVkIHx8XG4gICAgICAvLyBDb3JlIGdyYXBoIGFuZCBhc3NldHMgb3BlcmF0aW9ucyBhcmUgYWx3YXlzIHRyYW5zYWN0ZWQsIHVubGVzcyB0aGUgdmVyYlxuICAgICAgLy8gaXMgJ2dldCc6XG4gICAgICBoYW5kbGVyLmNvcmUgJiYgdmVyYiAhPT0gJ2dldCcgJiYgKGNvbnRyb2xsZXIuZ3JhcGggfHwgY29udHJvbGxlci5hc3NldHMpXG4gICAgKVxuICAgIHRoaXMuYXV0aG9yaXphdGlvbiA9IGNvbnRyb2xsZXIucHJvY2Vzc0F1dGhvcml6ZSh0aGlzLmF1dGhvcml6ZSlcbiAgICB0aGlzLmFwcCA9IGNvbnRyb2xsZXIuYXBwXG4gICAgdGhpcy5wYXJhbXNOYW1lID0gWydwb3N0JywgJ3B1dCcsICdwYXRjaCddLmluY2x1ZGVzKHRoaXMudmVyYilcbiAgICAgID8gJ2JvZHknXG4gICAgICA6ICdxdWVyeSdcbiAgICBjb25zdCB7IHBhcmFtZXRlcnMsIHJldHVybnMsIG9wdGlvbnMgPSB7fSB9ID0gdGhpcy5oYW5kbGVyXG4gICAgdGhpcy5wYXJhbWV0ZXJzID0gdGhpcy5hcHAuY29tcGlsZVBhcmFtZXRlcnNWYWxpZGF0b3IocGFyYW1ldGVycywge1xuICAgICAgYXN5bmM6IHRydWUsXG4gICAgICAuLi5vcHRpb25zLnBhcmFtZXRlcnMsIC8vIFNlZSBAcGFyYW1ldGVycygpIGRlY29yYXRvclxuICAgICAgZGF0YU5hbWU6IHRoaXMucGFyYW1zTmFtZVxuICAgIH0pXG4gICAgdGhpcy5yZXR1cm5zID0gdGhpcy5hcHAuY29tcGlsZVBhcmFtZXRlcnNWYWxpZGF0b3IoXG4gICAgICByZXR1cm5zID8gW3JldHVybnNdIDogW10sXG4gICAgICB7XG4gICAgICAgIGFzeW5jOiB0cnVlLFxuICAgICAgICAvLyBVc2UgaW5zdGFuY2VvZiBjaGVja3MgaW5zdGVhZCBvZiAkcmVmIHRvIGNoZWNrIHJldHVybmVkIHZhbHVlcy5cbiAgICAgICAgLy8gVE9ETzogVGhhdCBkb2Vzbid0IGd1YXJhbnRlZSB0aGUgdmFsaWRpdHkgdGhvdWdoLi4uXG4gICAgICAgIC8vIFRoaXMgc2hvdWxkIGFsd2F5cyBiZSAkcmVmIGNoZWNrcywgSSB0aGluaz9cbiAgICAgICAgdXNlSW5zdGFuY2VPZjogdHJ1ZSxcbiAgICAgICAgLi4ub3B0aW9ucy5yZXR1cm5zLCAvLyBTZWUgQHJldHVybnMoKSBkZWNvcmF0b3JcbiAgICAgICAgZGF0YU5hbWU6ICdyZXR1cm5zJ1xuICAgICAgfVxuICAgIClcbiAgfVxuXG4gIC8vIFBvc3NpYmxlIHZhbHVlcyBmb3IgYGZyb21gIGFyZTpcbiAgLy8gLSAncGF0aCc6IFVzZSBgY3R4LnBhcmFtc2Agd2hpY2ggaXMgbWFwcGVkIHRvIHRoZSByb3V0ZSAvIHBhdGhcbiAgLy8gLSAncXVlcnknOiBVc2UgYGN0eC5yZXF1ZXN0LnF1ZXJ5YCwgcmVnYXJkbGVzcyBvZiB0aGUgYWN0aW9uJ3MgdmVyYi5cbiAgLy8gLSAnYm9keSc6IFVzZSBgY3R4LnJlcXVlc3QuYm9keWAsIHJlZ2FyZGxlc3Mgb2YgdGhlIGFjdGlvbidzIHZlcmIuXG4gIGdldFBhcmFtcyhjdHgsIGZyb20gPSB0aGlzLnBhcmFtc05hbWUpIHtcbiAgICBjb25zdCB2YWx1ZSA9IGZyb20gPT09ICdwYXRoJyA/IGN0eC5wYXJhbXMgOiBjdHgucmVxdWVzdFtmcm9tXVxuICAgIC8vIGtvYS1ib2R5cGFyc2VyIGFsd2F5cyBzZXRzIGFuIG9iamVjdCwgZXZlbiB3aGVuIHRoZXJlIGlzIG5vIGJvZHkuXG4gICAgLy8gRGV0ZWN0IHRoaXMgaGVyZSBhbmQgcmV0dXJuIG51bGwgaW5zdGVhZC5cbiAgICBjb25zdCBpc051bGwgPSAoXG4gICAgICBmcm9tID09PSAnYm9keScgJiZcbiAgICAgIGN0eC5yZXF1ZXN0LmhlYWRlcnNbJ2NvbnRlbnQtbGVuZ3RoJ10gPT09ICcwJyAmJlxuICAgICAgT2JqZWN0LmtleXModmFsdWUpLmxlbmd0aCA9PT0gMFxuICAgIClcbiAgICByZXR1cm4gaXNOdWxsID8gbnVsbCA6IHZhbHVlXG4gIH1cblxuICBhc3luYyBjYWxsQWN0aW9uKGN0eCkge1xuICAgIGNvbnN0IHBhcmFtcyA9IGF3YWl0IHRoaXMudmFsaWRhdGVQYXJhbWV0ZXJzKGN0eClcbiAgICBjb25zdCB7IGFyZ3MsIG1lbWJlciB9ID0gYXdhaXQgdGhpcy5jb2xsZWN0QXJndW1lbnRzKGN0eCwgcGFyYW1zKVxuICAgIGF3YWl0IHRoaXMuY29udHJvbGxlci5oYW5kbGVBdXRob3JpemF0aW9uKHRoaXMuYXV0aG9yaXphdGlvbiwgY3R4LCBtZW1iZXIpXG4gICAgY29uc3QgeyBpZGVudGlmaWVyIH0gPSB0aGlzXG4gICAgYXdhaXQgdGhpcy5jb250cm9sbGVyLmVtaXRIb29rKGBiZWZvcmU6JHtpZGVudGlmaWVyfWAsIGZhbHNlLCBjdHgsIC4uLmFyZ3MpXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5jYWxsSGFuZGxlcihjdHgsIC4uLmFyZ3MpXG4gICAgcmV0dXJuIHRoaXMudmFsaWRhdGVSZXN1bHQoXG4gICAgICBhd2FpdCB0aGlzLmNvbnRyb2xsZXIuZW1pdEhvb2soYGFmdGVyOiR7aWRlbnRpZmllcn1gLCB0cnVlLCBjdHgsIHJlc3VsdClcbiAgICApXG4gIH1cblxuICBhc3luYyBjYWxsSGFuZGxlcihjdHgsIC4uLmFyZ3MpIHtcbiAgICByZXR1cm4gdGhpcy5oYW5kbGVyLmNhbGwodGhpcy5jb250cm9sbGVyLCBjdHgsIC4uLmFyZ3MpXG4gIH1cblxuICBjcmVhdGVWYWxpZGF0aW9uRXJyb3Iob3B0aW9ucykge1xuICAgIHJldHVybiB0aGlzLmFwcC5jcmVhdGVWYWxpZGF0aW9uRXJyb3Iob3B0aW9ucylcbiAgfVxuXG4gIGFzeW5jIHZhbGlkYXRlUGFyYW1ldGVycyhjdHgpIHtcbiAgICBpZiAoIXRoaXMucGFyYW1ldGVycy52YWxpZGF0ZSkge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG4gICAgLy8gU2luY2UgdmFsaWRhdGlvbiBhbHNvIHBlcmZvcm1zIGNvZXJjaW9uLCBjcmVhdGUgYSBjbG9uZSBvZiB0aGUgcGFyYW1zXG4gICAgLy8gc28gdGhhdCB0aGlzIGRvZXNuJ3QgbW9kaWZ5IHRoZSBkYXRhIG9uIGBjdHhgLlxuICAgIC8vIE5PVEU6IFRoZSBkYXRhIGNhbiBiZSBlaXRoZXIgYW4gb2JqZWN0IG9yIGFuIGFycmF5LlxuICAgIGNvbnN0IGRhdGEgPSBjbG9uZSh0aGlzLmdldFBhcmFtcyhjdHgpKVxuICAgIGxldCBwYXJhbXMgPSBkYXRhIHx8IHt9XG4gICAgY29uc3QgeyBkYXRhTmFtZSB9ID0gdGhpcy5wYXJhbWV0ZXJzXG4gICAgbGV0IHVud3JhcFJvb3QgPSBmYWxzZVxuICAgIGNvbnN0IGVycm9ycyA9IFtdXG4gICAgZm9yIChjb25zdCB7XG4gICAgICBuYW1lLCAvLyBTdHJpbmc6IFByb3BlcnR5IG5hbWUgdG8gZmV0Y2ggZnJvbSBkYXRhLiBPdmVycmlkYWJsZSBieSBgcm9vdGBcbiAgICAgIHR5cGUsIC8vIFN0cmluZzogV2hhdCB0eXBlIHNob3VsZCB0aGlzIHZhbGlkYXRlZCBhZ2FpbnN0IC8gY29lcmNlZCB0by5cbiAgICAgIGZyb20sIC8vIFN0cmluZzogQWxsb3cgcGFyYW1ldGVycyB0byBiZSAnYm9ycm93ZWQnIGZyb20gb3RoZXIgb2JqZWN0cy5cbiAgICAgIHJvb3QsIC8vIEJvb2xlYW46IFVzZSBmdWxsIHJvb3Qgb2JqZWN0LCBpbnN0ZWFkIG9mIGRhdGEgYXQgZ2l2ZW4gcHJvcGVydHkuXG4gICAgICBtZW1iZXIgLy8gQm9vbGVhbjogRmV0Y2ggbWVtYmVyIGluc3RhbmNlIGluc3RlZCBvZiBkYXRhIGZyb20gcmVxdWVzdC5cbiAgICB9IG9mIHRoaXMucGFyYW1ldGVycy5saXN0KSB7XG4gICAgICAvLyBEb24ndCB2YWxpZGF0ZSBtZW1iZXIgcGFyYW1ldGVycyBhcyB0aGV5IGdldCByZXNvbHZlZCBzZXBhcmF0ZWx5IGFmdGVyLlxuICAgICAgaWYgKG1lbWJlcikgY29udGludWVcbiAgICAgIGxldCB3cmFwUm9vdCA9IHJvb3RcbiAgICAgIGxldCBwYXJhbU5hbWUgPSBuYW1lXG4gICAgICAvLyBJZiBubyBuYW1lIGlzIHByb3ZpZGVkLCB3cmFwIHRoZSBmdWxsIHJvb3Qgb2JqZWN0IGFzIHZhbHVlIGFuZCB1bndyYXBcbiAgICAgIC8vIGF0IHRoZSBlbmQsIHNlZSBgdW53cmFwUm9vdGAuXG4gICAgICBpZiAoIXBhcmFtTmFtZSkge1xuICAgICAgICBwYXJhbU5hbWUgPSBkYXRhTmFtZVxuICAgICAgICB3cmFwUm9vdCA9IHRydWVcbiAgICAgICAgdW53cmFwUm9vdCA9IHRydWVcbiAgICAgIH1cbiAgICAgIGlmICh3cmFwUm9vdCkge1xuICAgICAgICAvLyBJZiByb290IGlzIHRvIGJlIHVzZWQsIHJlcGxhY2UgYHBhcmFtc2Agd2l0aCBhIG5ldyBvYmplY3Qgb24gd2hpY2hcbiAgICAgICAgLy8gdG8gc2V0IHRoZSByb290IG9iamVjdCB0byB2YWxpZGF0ZSB1bmRlciBgcGFyYW1ldGVycy5wYXJhbU5hbWVgXG4gICAgICAgIGlmIChwYXJhbXMgPT09IGRhdGEpIHtcbiAgICAgICAgICBwYXJhbXMgPSB7fVxuICAgICAgICB9XG4gICAgICAgIHBhcmFtc1twYXJhbU5hbWVdID0gZGF0YVxuICAgICAgfVxuICAgICAgaWYgKGZyb20pIHtcbiAgICAgICAgLy8gQWxsb3cgcGFyYW1ldGVycyB0byBiZSAnYm9ycm93ZWQnIGZyb20gb3RoZXIgb2JqZWN0cy5cbiAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMuZ2V0UGFyYW1zKGN0eCwgZnJvbSlcbiAgICAgICAgLy8gU2VlIGFib3ZlIGZvciBhbiBleHBsYW5hdGlvbiBvZiBgY2xvbmUoKWA6XG4gICAgICAgIHBhcmFtc1twYXJhbU5hbWVdID0gY2xvbmUod3JhcFJvb3QgPyBkYXRhIDogZGF0YT8uW3BhcmFtTmFtZV0pXG4gICAgICB9XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHBhcmFtc1twYXJhbU5hbWVdXG4gICAgICAgIC8vIGBwYXJhbWV0ZXJzLnZhbGlkYXRlKHBhcmFtcylgIGNvZXJjZXMgZGF0YSBpbiB0aGUgcXVlcnkgdG8gdGhlXG4gICAgICAgIC8vIHJlcXVpcmVkIGZvcm1hdHMsIGFjY29yZGluZyB0byB0aGUgcnVsZXMgc3BlY2lmaWVkIGhlcmU6XG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9lcG9iZXJlemtpbi9hanYvYmxvYi9tYXN0ZXIvQ09FUkNJT04ubWRcbiAgICAgICAgLy8gQ29lcmNpb24gaXNuJ3QgY3VycmVudGx5IG9mZmVyZWQgZm9yICdvYmplY3QnIGFuZCAnZGF0ZScgdHlwZXMsXG4gICAgICAgIC8vIHNvIGhhbmRsZSB0aGVzZSBjYXNlcyBwcmlvciB0byB0aGUgY2FsbCBvZiBgcGFyYW1ldGVycy52YWxpZGF0ZSgpYDpcbiAgICAgICAgY29uc3QgY29lcmNlZCA9IHRoaXMuY29lcmNlVmFsdWUodHlwZSwgdmFsdWUsIHtcbiAgICAgICAgICAvLyBUaGUgbW9kZWwgdmFsaWRhdGlvbiBpcyBoYW5kbGVkIHNlcGFyYXRlbHkgdGhyb3VnaCBgJHJlZmAuXG4gICAgICAgICAgc2tpcFZhbGlkYXRpb246IHRydWVcbiAgICAgICAgfSlcbiAgICAgICAgLy8gSWYgY29lcmNpb24gaGFwcGVuZWQsIHJlcGxhY2UgdmFsdWUgaW4gcGFyYW1zIHdpdGggY29lcmNlZCBvbmU6XG4gICAgICAgIGlmIChjb2VyY2VkICE9PSB2YWx1ZSkge1xuICAgICAgICAgIHBhcmFtc1twYXJhbU5hbWVdID0gY29lcmNlZFxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgLy8gQ29udmVydCBlcnJvciB0byBBanYgdmFsaWRhdGlvbiBlcnJvciBmb3JtYXQ6XG4gICAgICAgIGVycm9ycy5wdXNoKHtcbiAgICAgICAgICBkYXRhUGF0aDogYC4ke3BhcmFtTmFtZX1gLCAvLyBKYXZhU2NyaXB0IHByb3BlcnR5IGFjY2VzcyBub3RhdGlvblxuICAgICAgICAgIGtleXdvcmQ6ICd0eXBlJyxcbiAgICAgICAgICBtZXNzYWdlOiBlcnIubWVzc2FnZSB8fCBlcnIudG9TdHJpbmcoKSxcbiAgICAgICAgICBwYXJhbXM6IHsgdHlwZSB9XG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgZ2V0RGF0YSA9ICgpID0+IHVud3JhcFJvb3QgPyBwYXJhbXNbZGF0YU5hbWVdIDogcGFyYW1zXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMucGFyYW1ldGVycy52YWxpZGF0ZShwYXJhbXMpXG4gICAgICByZXR1cm4gZ2V0RGF0YSgpXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmIChlcnJvci5lcnJvcnMpIHtcbiAgICAgICAgZXJyb3JzLnB1c2goLi4uZXJyb3IuZXJyb3JzKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgZXJyb3JcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICB0aHJvdyB0aGlzLmNyZWF0ZVZhbGlkYXRpb25FcnJvcih7XG4gICAgICAgIHR5cGU6ICdQYXJhbWV0ZXJWYWxpZGF0aW9uJyxcbiAgICAgICAgbWVzc2FnZTogJ1RoZSBwcm92aWRlZCBhY3Rpb24gcGFyYW1ldGVycyBhcmUgbm90IHZhbGlkJyxcbiAgICAgICAgZXJyb3JzLFxuICAgICAgICBqc29uOiBnZXREYXRhKClcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgdmFsaWRhdGVSZXN1bHQocmVzdWx0KSB7XG4gICAgaWYgKHRoaXMucmV0dXJucy52YWxpZGF0ZSkge1xuICAgICAgY29uc3QgcmV0dXJuc05hbWUgPSB0aGlzLmhhbmRsZXIucmV0dXJucy5uYW1lXG4gICAgICAvLyBVc2UgZGF0YU5hbWUgaWYgbm8gbmFtZSBpcyBnaXZlbiwgc2VlOlxuICAgICAgLy8gQXBwbGljYXRpb24uY29tcGlsZVBhcmFtZXRlcnNWYWxpZGF0b3IocmV0dXJucywgeyBkYXRhTmFtZSB9KVxuICAgICAgY29uc3QgZGF0YSA9IHtcbiAgICAgICAgW3JldHVybnNOYW1lIHx8IHRoaXMucmV0dXJucy5kYXRhTmFtZV06IHJlc3VsdFxuICAgICAgfVxuXG4gICAgICAvLyBJZiBhIG5hbWVkIHJlc3VsdCBpcyBkZWZpbmVkLCByZXR1cm4gdGhlIGRhdGEgd3JhcHBlZCxcbiAgICAgIC8vIG90aGVyd2lzZSByZXR1cm4gdGhlIG9yaWdpbmFsIHVud3JhcHBlZCByZXN1bHQgb2JqZWN0LlxuICAgICAgY29uc3QgZ2V0UmVzdWx0ID0gKCkgPT4gcmV0dXJuc05hbWUgPyBkYXRhIDogcmVzdWx0XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0aGlzLnJldHVybnMudmFsaWRhdGUoZGF0YSlcbiAgICAgICAgcmV0dXJuIGdldFJlc3VsdCgpXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICB0aHJvdyB0aGlzLmNyZWF0ZVZhbGlkYXRpb25FcnJvcih7XG4gICAgICAgICAgdHlwZTogJ1Jlc3VsdFZhbGlkYXRpb24nLFxuICAgICAgICAgIG1lc3NhZ2U6ICdUaGUgcmV0dXJuZWQgYWN0aW9uIHJlc3VsdCBpcyBub3QgdmFsaWQnLFxuICAgICAgICAgIGVycm9yczogZXJyb3IuZXJyb3JzLFxuICAgICAgICAgIGpzb246IGdldFJlc3VsdCgpXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHRcbiAgfVxuXG4gIGFzeW5jIGNvbGxlY3RBcmd1bWVudHMoY3R4LCBwYXJhbXMpIHtcbiAgICBjb25zdCB7IGxpc3QsIGFzT2JqZWN0IH0gPSB0aGlzLnBhcmFtZXRlcnNcblxuICAgIGNvbnN0IGFyZ3MgPSBhc09iamVjdCA/IFt7fV0gOiBbXVxuICAgIGNvbnN0IGFkZEFyZ3VtZW50ID0gKG5hbWUsIHZhbHVlKSA9PiB7XG4gICAgICBpZiAoYXNPYmplY3QpIHtcbiAgICAgICAgYXJnc1swXVtuYW1lXSA9IHZhbHVlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhcmdzLnB1c2godmFsdWUpXG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IG1lbWJlciA9IG51bGxcbiAgICAvLyBJZiB3ZSBoYXZlIHBhcmFtZXRlcnMsIGFkZCB0aGVtIHRvIHRoZSBhcmd1bWVudHMgbm93LFxuICAgIC8vIHdoaWxlIGFsc28ga2VlcGluZyB0cmFjayBvZiBjb25zdW1lZCBwYXJhbWV0ZXJzOlxuICAgIGZvciAoY29uc3QgcGFyYW0gb2YgbGlzdCkge1xuICAgICAgY29uc3QgeyBuYW1lIH0gPSBwYXJhbVxuICAgICAgLy8gSGFuZGxlIGB7IG1lbWJlcjogdHJ1ZSB9YCBwYXJhbWV0ZXJzIHNlcGFyYXRlbHksIGJ5IGRlbGVnYXRpbmcgdG9cbiAgICAgIC8vIGBnZXRNZW1iZXIoKWAgdG8gcmVzb2x2ZSB0byB0aGUgZ2l2ZW4gbWVtYmVyLlxuICAgICAgaWYgKHBhcmFtLm1lbWJlcikge1xuICAgICAgICBtZW1iZXIgPSBhd2FpdCB0aGlzLmdldE1lbWJlcihjdHgsIHBhcmFtKVxuICAgICAgICBhZGRBcmd1bWVudChuYW1lLCBtZW1iZXIpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBJZiBubyBuYW1lIGlzIHByb3ZpZGVkLCB1c2UgdGhlIGJvZHkgb2JqZWN0IChwYXJhbXMpXG4gICAgICAgIGFkZEFyZ3VtZW50KG5hbWUsIG5hbWUgPyBwYXJhbXNbbmFtZV0gOiBwYXJhbXMpXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7IGFyZ3MsIG1lbWJlciB9XG4gIH1cblxuICBjb2VyY2VWYWx1ZSh0eXBlLCB2YWx1ZSwgbW9kZWxPcHRpb25zKSB7XG4gICAgLy8gU2VlIGlmIHBhcmFtIG5lZWRzIGFkZGl0aW9uYWwgY29lcmNpb246XG4gICAgaWYgKHZhbHVlICYmIFsnZGF0ZScsICdkYXRldGltZScsICd0aW1lc3RhbXAnXS5pbmNsdWRlcyh0eXBlKSkge1xuICAgICAgdmFsdWUgPSBuZXcgRGF0ZSh2YWx1ZSlcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gU2VlIGlmIHRoZSBkZWZpbmVkIHR5cGUocykgcmVxdWlyZSBjb2VyY2lvbiB0byBvYmplY3RzOlxuICAgICAgY29uc3Qgb2JqZWN0VHlwZSA9IGFzQXJyYXkodHlwZSkuZmluZChcbiAgICAgICAgLy8gQ29lcmNlIHRvIG9iamVjdCBpZiB0eXBlIGlzICdvYmplY3QnIG9yIGEga25vd24gbW9kZWwgbmFtZS5cbiAgICAgICAgdHlwZSA9PiB0eXBlID09PSAnb2JqZWN0JyB8fCB0eXBlIGluIHRoaXMuYXBwLm1vZGVsc1xuICAgICAgKVxuICAgICAgaWYgKG9iamVjdFR5cGUpIHtcbiAgICAgICAgaWYgKHZhbHVlICYmIGlzU3RyaW5nKHZhbHVlKSkge1xuICAgICAgICAgIGlmICghL15cXHsuKlxcfSQvLnRlc3QodmFsdWUpKSB7XG4gICAgICAgICAgICAvLyBDb252ZXJ0IHNpbXBsaWZpZWQgRGl0byBvYmplY3Qgbm90YXRpb24gdG8gSlNPTiwgc3VwcG9ydGluZzpcbiAgICAgICAgICAgIC8vIC0gYFwia2V5MVwiOlgsIFwia2V5MlwiOllgIChjdXJseSBicmFjZXMgYXJlIGFkZGVkIGFuZCBwYXJzZWQgdGhyb3VnaFxuICAgICAgICAgICAgLy8gICBgSlNPTi5wYXJzZSgpYClcbiAgICAgICAgICAgIC8vIC0gYGtleTE6WCxrZXkyOllgIChhIHNpbXBsZSBwYXJzZXIgaXMgYXBwbGllZCwgc3BsaXR0aW5nIGludG9cbiAgICAgICAgICAgIC8vICAgZW50cmllcyBhbmQga2V5L3ZhbHVlIHBhaXJzLCB2YWx1c2UgYXJlIHBhcnNlZCB3aXRoXG4gICAgICAgICAgICAvLyAgIGBKU09OLnBhcnNlKClgLCBmYWxsaW5nIGJhY2sgdG8gc3RyaW5nLlxuICAgICAgICAgICAgaWYgKC9cIi8udGVzdCh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgLy8gSnVzdCBhZGQgdGhlIGN1cmx5IGJyYWNlcyBhbmQgcGFyc2UgYXMgSlNPTlxuICAgICAgICAgICAgICB2YWx1ZSA9IEpTT04ucGFyc2UoYHske3ZhbHVlfX1gKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gQSBzaW1wbGUgdmVyc2lvbiBvZiBuYW1lZCBrZXkvdmFsdWUgcGFpcnMsIHZhbHVlcyBjYW4gYmVcbiAgICAgICAgICAgICAgLy8gc3RyaW5ncyBvciBudW1iZXJzLlxuICAgICAgICAgICAgICB2YWx1ZSA9IE9iamVjdC5mcm9tRW50cmllcyh2YWx1ZS5zcGxpdCgvXFxzKixcXHMqL2cpLm1hcChlbnRyeSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IFtrZXksIHZhbF0gPSBlbnRyeS5zcGxpdCgvXFxzKjpcXHMqLylcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgLy8gVHJ5IHBhcnNpbmcgYmFzaWMgdHlwZXMsIGJ1dCBmYWxsIGJhY2sgdG8gdW5xdW90ZWQgc3RyaW5nLlxuICAgICAgICAgICAgICAgICAgdmFsID0gSlNPTi5wYXJzZSh2YWwpXG4gICAgICAgICAgICAgICAgfSBjYXRjaCB7fVxuICAgICAgICAgICAgICAgIHJldHVybiBba2V5LCB2YWxdXG4gICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YWx1ZSA9IEpTT04ucGFyc2UodmFsdWUpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChvYmplY3RUeXBlICE9PSAnb2JqZWN0JyAmJiBpc09iamVjdCh2YWx1ZSkpIHtcbiAgICAgICAgICAvLyBDb252ZXJ0IHRoZSBQb2pvIHRvIHRoZSBkZXNpcmVkIERpdG8gbW9kZWw6XG4gICAgICAgICAgY29uc3QgbW9kZWxDbGFzcyA9IHRoaXMuYXBwLm1vZGVsc1tvYmplY3RUeXBlXVxuICAgICAgICAgIGlmIChtb2RlbENsYXNzICYmICEodmFsdWUgaW5zdGFuY2VvZiBtb2RlbENsYXNzKSkge1xuICAgICAgICAgICAgdmFsdWUgPSBtb2RlbENsYXNzLmZyb21Kc29uKHZhbHVlLCBtb2RlbE9wdGlvbnMpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZVxuICB9XG5cbiAgYXN5bmMgZ2V0TWVtYmVyKC8qIGN0eCwgcGFyYW0gKi8pIHtcbiAgICAvLyBUaGlzIGlzIG9ubHkgZGVmaW5lZCBpbiBgTWVtYmVyQWN0aW9uYCwgd2hlcmUgaXQgcmVzb2x2ZXMgdG8gdGhlIG1lbWJlclxuICAgIC8vIHJlcHJlc2VudGVkIGJ5IHRoZSBnaXZlbiByb3V0ZS5cbiAgICByZXR1cm4gbnVsbFxuICB9XG59XG4iXX0=
@@ -3,7 +3,13 @@
3
3
  exports.__esModule = true;
4
4
  exports.RelationController = void 0;
5
5
 
6
- var _chalk = _interopRequireDefault(require("chalk"));
6
+ require("core-js/modules/esnext.async-iterator.filter.js");
7
+
8
+ require("core-js/modules/esnext.iterator.constructor.js");
9
+
10
+ require("core-js/modules/esnext.iterator.filter.js");
11
+
12
+ var _picocolors = _interopRequireDefault(require("picocolors"));
7
13
 
8
14
  var _errors = require("../errors");
9
15
 
@@ -44,7 +50,7 @@ class RelationController extends _CollectionController.CollectionController {
44
50
 
45
51
  this.path = this.app.normalizePath(this.name);
46
52
  this.url = `${this.parent.url}/${this.parent.getPath('member', this.path)}`;
47
- this.log(`${_chalk.default.blue(this.path)}${_chalk.default.white(':')}`, this.level);
53
+ this.log(`${_picocolors.default.blue(this.path)}${_picocolors.default.white(':')}`, this.level);
48
54
 
49
55
  for (const key in this.object) {
50
56
  if (!['relation', 'member', 'allow'].includes(key)) {
@@ -73,4 +79,4 @@ class RelationController extends _CollectionController.CollectionController {
73
79
  }
74
80
 
75
81
  exports.RelationController = RelationController;
76
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250cm9sbGVycy9SZWxhdGlvbkNvbnRyb2xsZXIuanMiXSwibmFtZXMiOlsiUmVsYXRpb25Db250cm9sbGVyIiwiQ29sbGVjdGlvbkNvbnRyb2xsZXIiLCJjb25zdHJ1Y3RvciIsInBhcmVudCIsIm9iamVjdCIsInJlbGF0aW9uSW5zdGFuY2UiLCJyZWxhdGlvbkRlZmluaXRpb24iLCJhcHAiLCJjb2xsZWN0aW9uIiwidG9Db3JlQWN0aW9ucyIsIm1lbWJlciIsIm1vZGVsQ2xhc3MiLCJvd25lck1vZGVsQ2xhc3MiLCJDb250cm9sbGVyRXJyb3IiLCJuYW1lIiwicmVsYXRlZE1vZGVsQ2xhc3MiLCJpc09uZVRvT25lIiwicmVsYXRlIiwib3duZXIiLCJ1bnJlbGF0ZSIsImdyYXBoIiwidHJhbnNhY3RlZCIsImxldmVsIiwic2NvcGUiLCJmaWx0ZXIiLCJwYXRoIiwibm9ybWFsaXplUGF0aCIsInVybCIsImdldFBhdGgiLCJsb2ciLCJjaGFsayIsImJsdWUiLCJ3aGl0ZSIsImtleSIsImluY2x1ZGVzIiwic2V0dXAiLCJpbmhlcml0VmFsdWVzIiwidHlwZSIsInZhbHVlcyIsImV4ZWN1dGUiLCJjdHgiLCJpZCIsImdldE1lbWJlcklkIiwicGFyZW50UXVlcnkiLCJ0cngiLCJtb2RlbCIsImlnbm9yZVNjb3BlIiwiZmluZEJ5SWQiLCJ0aHJvd0lmTm90Rm91bmQiLCJzZWxlY3QiLCJvd25lclByb3AiLCJwcm9wcyIsInF1ZXJ5IiwiJHJlbGF0ZWRRdWVyeSIsInNldHVwUXVlcnkiXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7QUFFTyxNQUFNQSxrQkFBTixTQUFpQ0MsMENBQWpDLENBQXNEO0FBQzNEQyxFQUFBQSxXQUFXLENBQUNDLE1BQUQsRUFBU0MsTUFBVCxFQUFpQkMsZ0JBQWpCLEVBQW1DQyxrQkFBbkMsRUFBdUQ7QUFDaEUsVUFBTUgsTUFBTSxDQUFDSSxHQUFiLEVBQWtCLElBQWxC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LEtBQUssR0FBRyxNQUFNRixXQUFXLENBQzVCRyxXQURpQixHQUVqQkMsUUFGaUIsQ0FFUk4sRUFGUSxFQUdqQk8sZUFIaUIsR0FLakJDLE1BTGlCLENBS1YsR0FBRyxLQUFLNUMsZ0JBQUwsQ0FBc0I2QyxTQUF0QixDQUFnQ0MsS0FMekIsQ0FBcEI7QUFRQSxZQUFNQyxLQUFLLEdBQUdQLEtBQUssQ0FBQ1EsYUFBTixDQUFvQixLQUFLaEQsZ0JBQUwsQ0FBc0JTLElBQTFDLEVBQWdEOEIsR0FBaEQsQ0FBZDtBQUNBLFdBQUtVLFVBQUwsQ0FBZ0JGLEtBQWhCO0FBQ0EsYUFBT2IsT0FBTyxDQUFDYSxLQUFELEVBQVFSLEdBQVIsQ0FBZDtBQUNELEtBYkksQ0FBUDtBQWVEOztBQWxGMEQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY2hhbGsgZnJvbSAnY2hhbGsnXG5pbXBvcnQgeyBDb250cm9sbGVyRXJyb3IgfSBmcm9tICdAL2Vycm9ycydcbmltcG9ydCB7IENvbGxlY3Rpb25Db250cm9sbGVyIH0gZnJvbSAnLi9Db2xsZWN0aW9uQ29udHJvbGxlcidcbmltcG9ydCB7IHNldHVwUHJvcGVydHlJbmhlcml0YW5jZSwgZ2V0U2NvcGUgfSBmcm9tICdAL3V0aWxzJ1xuaW1wb3J0IHsgYXNBcnJheSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBjbGFzcyBSZWxhdGlvbkNvbnRyb2xsZXIgZXh0ZW5kcyBDb2xsZWN0aW9uQ29udHJvbGxlciB7XG4gIGNvbnN0cnVjdG9yKHBhcmVudCwgb2JqZWN0LCByZWxhdGlvbkluc3RhbmNlLCByZWxhdGlvbkRlZmluaXRpb24pIHtcbiAgICBzdXBlcihwYXJlbnQuYXBwLCBudWxsKVxuICAgIGlmIChwYXJlbnQubW9kZWxDbGFzcyAhPT0gcmVsYXRpb25JbnN0YW5jZS5vd25lck1vZGVsQ2xhc3MpIHtcbiAgICAgIHRocm93IG5ldyBDb250cm9sbGVyRXJyb3IocGFyZW50LFxuICAgICAgICBgSW52YWxpZCBwYXJlbnQgY29udHJvbGxlciBmb3IgcmVsYXRpb24gJyR7cmVsYXRpb25JbnN0YW5jZS5uYW1lfScuYClcbiAgICB9XG4gICAgdGhpcy5wYXJlbnQgPSBwYXJlbnRcbiAgICB0aGlzLm9iamVjdCA9IG9iamVjdFxuICAgIHRoaXMucmVsYXRpb25JbnN0YW5jZSA9IHJlbGF0aW9uSW5zdGFuY2VcbiAgICB0aGlzLnJlbGF0aW9uRGVmaW5pdGlvbiA9IHJlbGF0aW9uRGVmaW5pdGlvblxuICAgIHRoaXMubmFtZSA9IHJlbGF0aW9uSW5zdGFuY2UubmFtZVxuICAgIHRoaXMubW9kZWxDbGFzcyA9IHJlbGF0aW9uSW5zdGFuY2UucmVsYXRlZE1vZGVsQ2xhc3NcbiAgICB0aGlzLmlzT25lVG9PbmUgPSByZWxhdGlvbkluc3RhbmNlLmlzT25lVG9PbmUoKVxuICAgIHRoaXMucmVsYXRlID0gIXJlbGF0aW9uRGVmaW5pdGlvbi5vd25lclxuICAgIHRoaXMudW5yZWxhdGUgPSAhcmVsYXRpb25EZWZpbml0aW9uLm93bmVyXG4gICAgLy8gSW5oZXJpdCBwYXJlbnQgdmFsdWVzOlxuICAgIHRoaXMuZ3JhcGggPSBwYXJlbnQuZ3JhcGhcbiAgICB0aGlzLnRyYW5zYWN0ZWQgPSBwYXJlbnQudHJhbnNhY3RlZFxuICAgIHRoaXMubGV2ZWwgPSBwYXJlbnQubGV2ZWwgKyAxXG4gICAgaWYgKHBhcmVudC5zY29wZSkge1xuICAgICAgLy8gSW5oZXJpdCBvbmx5IHRoZSBncmFwaCBzY29wZXMgc2luY2UgaXQncyBpbiBpdHMgbmF0dXJlIHRvIHByb3BhZ2F0ZSB0b1xuICAgICAgLy8gcmVsYXRpb25zOlxuICAgICAgdGhpcy5zY29wZSA9IGFzQXJyYXkocGFyZW50LnNjb3BlKS5maWx0ZXIoc2NvcGUgPT4gZ2V0U2NvcGUoc2NvcGUpLmdyYXBoKVxuICAgIH1cbiAgICAvLyBJbml0aWFsaXplOlxuICAgIHRoaXMucGF0aCA9IHRoaXMuYXBwLm5vcm1hbGl6ZVBhdGgodGhpcy5uYW1lKVxuICAgIHRoaXMudXJsID0gYCR7dGhpcy5wYXJlbnQudXJsfS8ke3RoaXMucGFyZW50LmdldFBhdGgoJ21lbWJlcicsIHRoaXMucGF0aCl9YFxuICAgIHRoaXMubG9nKGAke2NoYWxrLmJsdWUodGhpcy5wYXRoKX0ke2NoYWxrLndoaXRlKCc6Jyl9YCwgdGhpcy5sZXZlbClcbiAgICAvLyBDb3B5IG92ZXIgYWxsIGZpZWxkcyBpbiB0aGUgcmVsYXRpb24gb2JqZWN0IGV4Y2VwdCB0aGUgb25lcyB0aGF0IGFyZVxuICAgIC8vIGdvaW5nIHRvIGJlIGluaGVyaXRlZCBpbiBgc2V0dXAoKWAgKHJlbGF0aW9uLCBtZW1iZXIsIGFsbG93KSwgZm9yXG4gICAgLy8gc2V0dGluZ3MgbGlrZSBzY29wZSwgZXRjLlxuICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMub2JqZWN0KSB7XG4gICAgICBpZiAoIVsncmVsYXRpb24nLCAnbWVtYmVyJywgJ2FsbG93J10uaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICB0aGlzW2tleV0gPSB0aGlzLm9iamVjdFtrZXldXG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuc2V0dXAoZmFsc2UpXG4gIH1cblxuICAvLyBAb3ZlcnJpZGVcbiAgaW5oZXJpdFZhbHVlcyh0eXBlKSB7XG4gICAgLy8gU2luY2UgUmVsYXRpb25Db250cm9sbGVyIGFyZSBtYXBwZWQgdG8gbmVzdGVkIGByZWxhdGlvbnNgIG9iamVjdHMgaW5cbiAgICAvLyBNb2RlbENvbnRyb2xsZXIgcGFyZW50cyBhbmQgYXJlIG5ldmVyIGV4dGVuZGVkIGRpcmVjdGx5IGluIHRoZSB1c2VyIGxhbmRcbiAgICAvLyBjb2RlLCBpbmhlcml0YW5jZSB3b3JrcyBkaWZmZXJlbnRseSBoZXJlIHRoYW4gb24gdGhlIG90aGVyIGNvbnRyb2xsZXJzOlxuICAgIC8vIE1vZGVsQ29udHJvbGxlciBhbHJlYWR5IHNldHMgdXAgaW5oZXJpdGFuY2UgZm9yIGl0cyBgcmVsYXRpb25zYCBvYmplY3RcbiAgICAvLyBhbmQgaXRzIGVudHJpZXMgZm9yIGVhY2ggcmVsYXRpb24gZnJvbSB3aGljaCBgb2JqZWN0YCBpcyByZXRyaWV2ZWQuXG4gICAgLy8gQnV0IHRoZSBhY3Rpb25zIHBlciByZWxhdGlvbiBzdGlsbCBuZWVkIHRvIGhhdmUgaW5oZXJpdGFuY2Ugc2V0IHVwLFxuICAgIC8vIHVzaW5nIHRoZSB2YWx1ZXMgaW4gaXRzIHBhcmVudCBjb250cm9sbGVyIGFuZCBwb3RlbnRpYWwgc3VwZXItY2xhc3NlcyxcbiAgICAvLyBmYWxsaW5nIGJhY2sgb24gdGhlIGRlZmluaXRpb25zIGluIFJlbGF0aW9uQ29udHJvbGxlciBhbmQgaXRzIGluaGVyaXRlZFxuICAgIC8vIHZhbHVlcyBmcm9tIE1vZGVsQ29udHJvbGxlci5cbiAgICBjb25zdCB2YWx1ZXMgPSBzZXR1cFByb3BlcnR5SW5oZXJpdGFuY2UoXG4gICAgICB0aGlzLm9iamVjdCxcbiAgICAgIC8vIE9uIHRoZSByZWxhdGlvbiBvYmplY3RzLCB0aGUgYGNvbGxlY3Rpb25gIGFjdGlvbnMgYXJlIHN0b3JlZCBpbiBhXG4gICAgICAvLyBgcmVsYXRpb25gIG9iamVjdCwgdG8gbWFrZSBzZW5zZSBib3RoIGZvciBvbmUtIGFuZCBtYW55LXJlbGF0aW9uczpcbiAgICAgIHR5cGUgPT09ICdjb2xsZWN0aW9uJyA/ICdyZWxhdGlvbicgOiB0eXBlLFxuICAgICAgLy8gU2V0IHVwIGluaGVyaXRhbmNlIGZvciBSZWxhdGlvbkNvbnRyb2xsZXIncyBvdmVycmlkZSBvZiBgY29sbGVjdGlvbmBcbiAgICAgIC8vIGFuZCBgbWVtYmVyYCBvYmplY3RzLCBhbmQgdXNlIGl0IGFzIHRoZSBiYXNlIGZvciBmdXJ0aGVyIGluaGVyaXRhbmNlLlxuICAgICAgLy8gTk9URTogQ3VycmVudGx5IHRoZXkncmUgZW1wdHksIGJ1dCB0aGV5IGNvdWxkIGFsbG93IGxvY2FsIG92ZXJyaWRlcy5cbiAgICAgIHN1cGVyLmluaGVyaXRWYWx1ZXModHlwZSlcbiAgICApXG4gICAgcmV0dXJuIHZhbHVlc1xuICB9XG5cbiAgLy8gQG92ZXJyaWRlXG4gIGFzeW5jIGV4ZWN1dGUoY3R4LCBleGVjdXRlKSB7XG4gICAgY29uc3QgaWQgPSB0aGlzLnBhcmVudC5nZXRNZW1iZXJJZChjdHgpXG4gICAgcmV0dXJuIHRoaXMucGFyZW50LmV4ZWN1dGUoY3R4LFxuICAgICAgYXN5bmMgKHBhcmVudFF1ZXJ5LCB0cngpID0+IHtcbiAgICAgICAgY29uc3QgbW9kZWwgPSBhd2FpdCBwYXJlbnRRdWVyeVxuICAgICAgICAgIC5pZ25vcmVTY29wZSgpXG4gICAgICAgICAgLmZpbmRCeUlkKGlkKVxuICAgICAgICAgIC50aHJvd0lmTm90Rm91bmQoKVxuICAgICAgICAgIC8vIEV4cGxpY2l0bHkgb25seSBzZWxlY3QgdGhlIGZvcmVpZ24ga2V5IGlkcyBmb3IgbW9yZSBlZmZpY2llbmN5LlxuICAgICAgICAgIC5zZWxlY3QoLi4udGhpcy5yZWxhdGlvbkluc3RhbmNlLm93bmVyUHJvcC5wcm9wcylcbiAgICAgICAgLy8gVGhpcyBpcyB0aGUgc2FtZSBhcyBgTW9kZWxDb250cm9sbGVyLmV4ZWN1dGUoKWAsIGV4Y2VwdCBmb3IgdGhlIHVzZVxuICAgICAgICAvLyBvZiBgbW9kZWwuJHJlbGF0ZWRRdWVyeSgpYCBpbnN0ZWFkIG9mIGBtb2RlbENsYXNzLnF1ZXJ5KClgOlxuICAgICAgICBjb25zdCBxdWVyeSA9IG1vZGVsLiRyZWxhdGVkUXVlcnkodGhpcy5yZWxhdGlvbkluc3RhbmNlLm5hbWUsIHRyeClcbiAgICAgICAgdGhpcy5zZXR1cFF1ZXJ5KHF1ZXJ5KVxuICAgICAgICByZXR1cm4gZXhlY3V0ZShxdWVyeSwgdHJ4KVxuICAgICAgfVxuICAgIClcbiAgfVxuXG4gIGNvbGxlY3Rpb24gPSB0aGlzLnRvQ29yZUFjdGlvbnMoe1xuICB9KVxuXG4gIG1lbWJlciA9IHRoaXMudG9Db3JlQWN0aW9ucyh7XG4gIH0pXG59XG4iXX0=
82
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250cm9sbGVycy9SZWxhdGlvbkNvbnRyb2xsZXIuanMiXSwibmFtZXMiOlsiUmVsYXRpb25Db250cm9sbGVyIiwiQ29sbGVjdGlvbkNvbnRyb2xsZXIiLCJjb25zdHJ1Y3RvciIsInBhcmVudCIsIm9iamVjdCIsInJlbGF0aW9uSW5zdGFuY2UiLCJyZWxhdGlvbkRlZmluaXRpb24iLCJhcHAiLCJjb2xsZWN0aW9uIiwidG9Db3JlQWN0aW9ucyIsIm1lbWJlciIsIm1vZGVsQ2xhc3MiLCJvd25lck1vZGVsQ2xhc3MiLCJDb250cm9sbGVyRXJyb3IiLCJuYW1lIiwicmVsYXRlZE1vZGVsQ2xhc3MiLCJpc09uZVRvT25lIiwicmVsYXRlIiwib3duZXIiLCJ1bnJlbGF0ZSIsImdyYXBoIiwidHJhbnNhY3RlZCIsImxldmVsIiwic2NvcGUiLCJmaWx0ZXIiLCJwYXRoIiwibm9ybWFsaXplUGF0aCIsInVybCIsImdldFBhdGgiLCJsb2ciLCJwaWNvIiwiYmx1ZSIsIndoaXRlIiwia2V5IiwiaW5jbHVkZXMiLCJzZXR1cCIsImluaGVyaXRWYWx1ZXMiLCJ0eXBlIiwidmFsdWVzIiwiZXhlY3V0ZSIsImN0eCIsImlkIiwiZ2V0TWVtYmVySWQiLCJwYXJlbnRRdWVyeSIsInRyeCIsIm1vZGVsIiwiaWdub3JlU2NvcGUiLCJmaW5kQnlJZCIsInRocm93SWZOb3RGb3VuZCIsInNlbGVjdCIsIm93bmVyUHJvcCIsInByb3BzIiwicXVlcnkiLCIkcmVsYXRlZFF1ZXJ5Iiwic2V0dXBRdWVyeSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7OztBQUVPLE1BQU1BLGtCQUFOLFNBQWlDQywwQ0FBakMsQ0FBc0Q7QUFDM0RDLEVBQUFBLFdBQVcsQ0FBQ0MsTUFBRCxFQUFTQyxNQUFULEVBQWlCQyxnQkFBakIsRUFBbUNDLGtCQUFuQyxFQUF1RDtBQUNoRSxVQUFNSCxNQUFNLENBQUNJLEdBQWIsRUFBa0Is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LFlBQU1DLEtBQUssR0FBRyxNQUFNRixXQUFXLENBQzVCRyxXQURpQixHQUVqQkMsUUFGaUIsQ0FFUk4sRUFGUSxFQUdqQk8sZUFIaUIsR0FLakJDLE1BTGlCLENBS1YsR0FBRyxLQUFLNUMsZ0JBQUwsQ0FBc0I2QyxTQUF0QixDQUFnQ0MsS0FMekIsQ0FBcEI7QUFRQSxZQUFNQyxLQUFLLEdBQUdQLEtBQUssQ0FBQ1EsYUFBTixDQUFvQixLQUFLaEQsZ0JBQUwsQ0FBc0JTLElBQTFDLEVBQWdEOEIsR0FBaEQsQ0FBZDtBQUNBLFdBQUtVLFVBQUwsQ0FBZ0JGLEtBQWhCO0FBQ0EsYUFBT2IsT0FBTyxDQUFDYSxLQUFELEVBQVFSLEdBQVIsQ0FBZDtBQUNELEtBYkksQ0FBUDtBQWVEOztBQWxGMEQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcGljbyBmcm9tICdwaWNvY29sb3JzJ1xuaW1wb3J0IHsgQ29udHJvbGxlckVycm9yIH0gZnJvbSAnQC9lcnJvcnMnXG5pbXBvcnQgeyBDb2xsZWN0aW9uQ29udHJvbGxlciB9IGZyb20gJy4vQ29sbGVjdGlvbkNvbnRyb2xsZXInXG5pbXBvcnQgeyBzZXR1cFByb3BlcnR5SW5oZXJpdGFuY2UsIGdldFNjb3BlIH0gZnJvbSAnQC91dGlscydcbmltcG9ydCB7IGFzQXJyYXkgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgY2xhc3MgUmVsYXRpb25Db250cm9sbGVyIGV4dGVuZHMgQ29sbGVjdGlvbkNvbnRyb2xsZXIge1xuICBjb25zdHJ1Y3RvcihwYXJlbnQsIG9iamVjdCwgcmVsYXRpb25JbnN0YW5jZSwgcmVsYXRpb25EZWZpbml0aW9uKSB7XG4gICAgc3VwZXIocGFyZW50LmFwcCwgbnVsbClcbiAgICBpZiAocGFyZW50Lm1vZGVsQ2xhc3MgIT09IHJlbGF0aW9uSW5zdGFuY2Uub3duZXJNb2RlbENsYXNzKSB7XG4gICAgICB0aHJvdyBuZXcgQ29udHJvbGxlckVycm9yKHBhcmVudCxcbiAgICAgICAgYEludmFsaWQgcGFyZW50IGNvbnRyb2xsZXIgZm9yIHJlbGF0aW9uICcke3JlbGF0aW9uSW5zdGFuY2UubmFtZX0nLmApXG4gICAgfVxuICAgIHRoaXMucGFyZW50ID0gcGFyZW50XG4gICAgdGhpcy5vYmplY3QgPSBvYmplY3RcbiAgICB0aGlzLnJlbGF0aW9uSW5zdGFuY2UgPSByZWxhdGlvbkluc3RhbmNlXG4gICAgdGhpcy5yZWxhdGlvbkRlZmluaXRpb24gPSByZWxhdGlvbkRlZmluaXRpb25cbiAgICB0aGlzLm5hbWUgPSByZWxhdGlvbkluc3RhbmNlLm5hbWVcbiAgICB0aGlzLm1vZGVsQ2xhc3MgPSByZWxhdGlvbkluc3RhbmNlLnJlbGF0ZWRNb2RlbENsYXNzXG4gICAgdGhpcy5pc09uZVRvT25lID0gcmVsYXRpb25JbnN0YW5jZS5pc09uZVRvT25lKClcbiAgICB0aGlzLnJlbGF0ZSA9ICFyZWxhdGlvbkRlZmluaXRpb24ub3duZXJcbiAgICB0aGlzLnVucmVsYXRlID0gIXJlbGF0aW9uRGVmaW5pdGlvbi5vd25lclxuICAgIC8vIEluaGVyaXQgcGFyZW50IHZhbHVlczpcbiAgICB0aGlzLmdyYXBoID0gcGFyZW50LmdyYXBoXG4gICAgdGhpcy50cmFuc2FjdGVkID0gcGFyZW50LnRyYW5zYWN0ZWRcbiAgICB0aGlzLmxldmVsID0gcGFyZW50LmxldmVsICsgMVxuICAgIGlmIChwYXJlbnQuc2NvcGUpIHtcbiAgICAgIC8vIEluaGVyaXQgb25seSB0aGUgZ3JhcGggc2NvcGVzIHNpbmNlIGl0J3MgaW4gaXRzIG5hdHVyZSB0byBwcm9wYWdhdGUgdG9cbiAgICAgIC8vIHJlbGF0aW9uczpcbiAgICAgIHRoaXMuc2NvcGUgPSBhc0FycmF5KHBhcmVudC5zY29wZSkuZmlsdGVyKHNjb3BlID0+IGdldFNjb3BlKHNjb3BlKS5ncmFwaClcbiAgICB9XG4gICAgLy8gSW5pdGlhbGl6ZTpcbiAgICB0aGlzLnBhdGggPSB0aGlzLmFwcC5ub3JtYWxpemVQYXRoKHRoaXMubmFtZSlcbiAgICB0aGlzLnVybCA9IGAke3RoaXMucGFyZW50LnVybH0vJHt0aGlzLnBhcmVudC5nZXRQYXRoKCdtZW1iZXInLCB0aGlzLnBhdGgpfWBcbiAgICB0aGlzLmxvZyhgJHtwaWNvLmJsdWUodGhpcy5wYXRoKX0ke3BpY28ud2hpdGUoJzonKX1gLCB0aGlzLmxldmVsKVxuICAgIC8vIENvcHkgb3ZlciBhbGwgZmllbGRzIGluIHRoZSByZWxhdGlvbiBvYmplY3QgZXhjZXB0IHRoZSBvbmVzIHRoYXQgYXJlXG4gICAgLy8gZ29pbmcgdG8gYmUgaW5oZXJpdGVkIGluIGBzZXR1cCgpYCAocmVsYXRpb24sIG1lbWJlciwgYWxsb3cpLCBmb3JcbiAgICAvLyBzZXR0aW5ncyBsaWtlIHNjb3BlLCBldGMuXG4gICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5vYmplY3QpIHtcbiAgICAgIGlmICghWydyZWxhdGlvbicsICdtZW1iZXInLCAnYWxsb3cnXS5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICAgIHRoaXNba2V5XSA9IHRoaXMub2JqZWN0W2tleV1cbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5zZXR1cChmYWxzZSlcbiAgfVxuXG4gIC8vIEBvdmVycmlkZVxuICBpbmhlcml0VmFsdWVzKHR5cGUpIHtcbiAgICAvLyBTaW5jZSBSZWxhdGlvbkNvbnRyb2xsZXIgYXJlIG1hcHBlZCB0byBuZXN0ZWQgYHJlbGF0aW9uc2Agb2JqZWN0cyBpblxuICAgIC8vIE1vZGVsQ29udHJvbGxlciBwYXJlbnRzIGFuZCBhcmUgbmV2ZXIgZXh0ZW5kZWQgZGlyZWN0bHkgaW4gdGhlIHVzZXIgbGFuZFxuICAgIC8vIGNvZGUsIGluaGVyaXRhbmNlIHdvcmtzIGRpZmZlcmVudGx5IGhlcmUgdGhhbiBvbiB0aGUgb3RoZXIgY29udHJvbGxlcnM6XG4gICAgLy8gTW9kZWxDb250cm9sbGVyIGFscmVhZHkgc2V0cyB1cCBpbmhlcml0YW5jZSBmb3IgaXRzIGByZWxhdGlvbnNgIG9iamVjdFxuICAgIC8vIGFuZCBpdHMgZW50cmllcyBmb3IgZWFjaCByZWxhdGlvbiBmcm9tIHdoaWNoIGBvYmplY3RgIGlzIHJldHJpZXZlZC5cbiAgICAvLyBCdXQgdGhlIGFjdGlvbnMgcGVyIHJlbGF0aW9uIHN0aWxsIG5lZWQgdG8gaGF2ZSBpbmhlcml0YW5jZSBzZXQgdXAsXG4gICAgLy8gdXNpbmcgdGhlIHZhbHVlcyBpbiBpdHMgcGFyZW50IGNvbnRyb2xsZXIgYW5kIHBvdGVudGlhbCBzdXBlci1jbGFzc2VzLFxuICAgIC8vIGZhbGxpbmcgYmFjayBvbiB0aGUgZGVmaW5pdGlvbnMgaW4gUmVsYXRpb25Db250cm9sbGVyIGFuZCBpdHMgaW5oZXJpdGVkXG4gICAgLy8gdmFsdWVzIGZyb20gTW9kZWxDb250cm9sbGVyLlxuICAgIGNvbnN0IHZhbHVlcyA9IHNldHVwUHJvcGVydHlJbmhlcml0YW5jZShcbiAgICAgIHRoaXMub2JqZWN0LFxuICAgICAgLy8gT24gdGhlIHJlbGF0aW9uIG9iamVjdHMsIHRoZSBgY29sbGVjdGlvbmAgYWN0aW9ucyBhcmUgc3RvcmVkIGluIGFcbiAgICAgIC8vIGByZWxhdGlvbmAgb2JqZWN0LCB0byBtYWtlIHNlbnNlIGJvdGggZm9yIG9uZS0gYW5kIG1hbnktcmVsYXRpb25zOlxuICAgICAgdHlwZSA9PT0gJ2NvbGxlY3Rpb24nID8gJ3JlbGF0aW9uJyA6IHR5cGUsXG4gICAgICAvLyBTZXQgdXAgaW5oZXJpdGFuY2UgZm9yIFJlbGF0aW9uQ29udHJvbGxlcidzIG92ZXJyaWRlIG9mIGBjb2xsZWN0aW9uYFxuICAgICAgLy8gYW5kIGBtZW1iZXJgIG9iamVjdHMsIGFuZCB1c2UgaXQgYXMgdGhlIGJhc2UgZm9yIGZ1cnRoZXIgaW5oZXJpdGFuY2UuXG4gICAgICAvLyBOT1RFOiBDdXJyZW50bHkgdGhleSdyZSBlbXB0eSwgYnV0IHRoZXkgY291bGQgYWxsb3cgbG9jYWwgb3ZlcnJpZGVzLlxuICAgICAgc3VwZXIuaW5oZXJpdFZhbHVlcyh0eXBlKVxuICAgIClcbiAgICByZXR1cm4gdmFsdWVzXG4gIH1cblxuICAvLyBAb3ZlcnJpZGVcbiAgYXN5bmMgZXhlY3V0ZShjdHgsIGV4ZWN1dGUpIHtcbiAgICBjb25zdCBpZCA9IHRoaXMucGFyZW50LmdldE1lbWJlcklkKGN0eClcbiAgICByZXR1cm4gdGhpcy5wYXJlbnQuZXhlY3V0ZShjdHgsXG4gICAgICBhc3luYyAocGFyZW50UXVlcnksIHRyeCkgPT4ge1xuICAgICAgICBjb25zdCBtb2RlbCA9IGF3YWl0IHBhcmVudFF1ZXJ5XG4gICAgICAgICAgLmlnbm9yZVNjb3BlKClcbiAgICAgICAgICAuZmluZEJ5SWQoaWQpXG4gICAgICAgICAgLnRocm93SWZOb3RGb3VuZCgpXG4gICAgICAgICAgLy8gRXhwbGljaXRseSBvbmx5IHNlbGVjdCB0aGUgZm9yZWlnbiBrZXkgaWRzIGZvciBtb3JlIGVmZmljaWVuY3kuXG4gICAgICAgICAgLnNlbGVjdCguLi50aGlzLnJlbGF0aW9uSW5zdGFuY2Uub3duZXJQcm9wLnByb3BzKVxuICAgICAgICAvLyBUaGlzIGlzIHRoZSBzYW1lIGFzIGBNb2RlbENvbnRyb2xsZXIuZXhlY3V0ZSgpYCwgZXhjZXB0IGZvciB0aGUgdXNlXG4gICAgICAgIC8vIG9mIGBtb2RlbC4kcmVsYXRlZFF1ZXJ5KClgIGluc3RlYWQgb2YgYG1vZGVsQ2xhc3MucXVlcnkoKWA6XG4gICAgICAgIGNvbnN0IHF1ZXJ5ID0gbW9kZWwuJHJlbGF0ZWRRdWVyeSh0aGlzLnJlbGF0aW9uSW5zdGFuY2UubmFtZSwgdHJ4KVxuICAgICAgICB0aGlzLnNldHVwUXVlcnkocXVlcnkpXG4gICAgICAgIHJldHVybiBleGVjdXRlKHF1ZXJ5LCB0cngpXG4gICAgICB9XG4gICAgKVxuICB9XG5cbiAgY29sbGVjdGlvbiA9IHRoaXMudG9Db3JlQWN0aW9ucyh7XG4gIH0pXG5cbiAgbWVtYmVyID0gdGhpcy50b0NvcmVBY3Rpb25zKHtcbiAgfSlcbn1cbiJdfQ==
@@ -3,6 +3,20 @@
3
3
  exports.__esModule = true;
4
4
  exports.UserController = 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.for-each.js");
13
+
14
+ require("core-js/modules/esnext.iterator.for-each.js");
15
+
16
+ require("core-js/modules/esnext.async-iterator.reduce.js");
17
+
18
+ require("core-js/modules/esnext.iterator.reduce.js");
19
+
6
20
  var _decorators = require("../decorators");
7
21
 
8
22
  var _ModelController = require("./ModelController");
@@ -81,4 +95,4 @@ class UserController extends _ModelController.ModelController {
81
95
  }
82
96
 
83
97
  exports.UserController = UserController;
84
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250cm9sbGVycy9Vc2VyQ29udHJvbGxlci5qcyJdLCJuYW1lcyI6WyJVc2VyQ29udHJvbGxlciIsIk1vZGVsQ29udHJvbGxlciIsImNvbGxlY3Rpb24iLCJsb2dpbiIsImN0eCIsInVzZXIiLCJlcnJvciIsIm1vZGVsQ2xhc3MiLCIkcGF0Y2giLCJsYXN0TG9naW4iLCJEYXRlIiwidHJhbnNhY3Rpb24iLCJlcnIiLCJhcHAiLCJlbWl0IiwiZGF0YSIsIm1lc3NhZ2UiLCJzdGF0dXMiLCJzdWNjZXNzIiwiYXV0aGVudGljYXRlZCIsImlzQXV0aGVudGljYXRlZCIsImxvZ291dCIsImlzVW5hdXRoZW50aWNhdGVkIiwic2Vzc2lvbiIsInN0YXRlIiwic2VsZiIsIm1lbWJlciIsImZpbmQiLCJjYWxsIiwiZ2V0Q29udGV4dFdpdGhNZW1iZXJJZCIsIiRpZCIsImF1dGhvcml6ZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTs7QUFDQTs7OztBQUdPLE1BQU1BLGNBQU4sU0FBNkJDLGdDQUE3QixDQUE2QztBQUFBO0FBQUE7O0FBQUE7QUFBQSxTQUNsREMsVUFEa0QsV0FFL0Msd0JBQU8sTUFBUCxDQUYrQyxVQXdCL0Msd0JBQU8sTUFBUCxDQXhCK0MsVUFxQy9DLHdCQUFPLEtBQVAsQ0FyQytDLFVBOEMvQyx3QkFBTyxLQUFQLENBOUMrQyxVQUNyQztBQUVYLFlBQU1DLEtBQU4sQ0FBWUMsR0FBWixFQUFpQjtBQUNmLFlBQUlDLElBQUo7QUFDQSxZQUFJQyxLQUFKOztBQUNBLFlBQUk7QUFDRkQsVUFBQUEsSUFBSSxHQUFHLE1BQU0sS0FBS0UsVUFBTCxDQUFnQkosS0FBaEIsQ0FBc0JDLEdBQXRCLENBQWI7QUFDQSxnQkFBTUMsSUFBSSxDQUFDRyxNQUFMLENBQVk7QUFBRUMsWUFBQUEsU0FBUyxFQUFFLElBQUlDLElBQUo7QUFBYixXQUFaLEVBQXVDTixHQUFHLENBQUNPLFdBQTNDLENBQU47QUFDRCxTQUhELENBR0UsT0FBT0MsR0FBUCxFQUFZO0FBQUE7O0FBQ1osZUFBS0MsR0FBTCxDQUFTQyxJQUFULENBQWMsT0FBZCxFQUF1QkYsR0FBdkIsRUFBNEJSLEdBQTVCO0FBQ0FDLFVBQUFBLElBQUksR0FBRyxJQUFQO0FBQ0FDLFVBQUFBLEtBQUssR0FBRyxjQUFBTSxHQUFHLENBQUNHLElBQUosK0JBQVVDLE9BQVYsS0FBcUJKLEdBQUcsQ0FBQ0ksT0FBakM7QUFDQVosVUFBQUEsR0FBRyxDQUFDYSxNQUFKLEdBQWFMLEdBQUcsQ0FBQ0ssTUFBSixJQUFjLEdBQTNCO0FBQ0Q7O0FBQ0QsY0FBTUMsT0FBTyxHQUFHLENBQUMsQ0FBQ2IsSUFBbEI7QUFDQSxlQUFPO0FBQ0xhLFVBQUFBLE9BREs7QUFFTEMsVUFBQUEsYUFBYSxFQUFFRCxPQUFPLElBQUksS0FBS0UsZUFBTCxDQUFxQmhCLEdBQXJCLENBRnJCO0FBR0xDLFVBQUFBLElBSEs7QUFJTEMsVUFBQUE7QUFKSyxTQUFQO0FBTUQsT0FyQlU7O0FBd0JYLFlBQU1lLE1BQU4sQ0FBYWpCLEdBQWIsRUFBa0I7QUFDaEIsWUFBSWMsT0FBTyxHQUFHLEtBQWQ7O0FBQ0EsWUFBSSxLQUFLRSxlQUFMLENBQXFCaEIsR0FBckIsQ0FBSixFQUErQjtBQUM3QixnQkFBTUEsR0FBRyxDQUFDaUIsTUFBSixFQUFOO0FBQ0FILFVBQUFBLE9BQU8sR0FBR2QsR0FBRyxDQUFDa0IsaUJBQUosRUFBVjtBQUNEOztBQUNELGVBQU87QUFDTEosVUFBQUEsT0FESztBQUVMQyxVQUFBQSxhQUFhLEVBQUUsS0FBS0MsZUFBTCxDQUFxQmhCLEdBQXJCO0FBRlYsU0FBUDtBQUlELE9BbENVOztBQXFDWG1CLE1BQUFBLE9BQU8sQ0FBQ25CLEdBQUQsRUFBTTtBQUNYLGNBQU1lLGFBQWEsR0FBRyxLQUFLQyxlQUFMLENBQXFCaEIsR0FBckIsQ0FBdEI7QUFDQSxlQUFPO0FBQ0xlLFVBQUFBLGFBREs7QUFFTGQsVUFBQUEsSUFBSSxFQUFFYyxhQUFhLEdBQUdmLEdBQUcsQ0FBQ29CLEtBQUosQ0FBVW5CLElBQWIsR0FBb0I7QUFGbEMsU0FBUDtBQUlELE9BM0NVOztBQThDWG9CLE1BQUFBLElBQUksQ0FBQ3JCLEdBQUQsRUFBTTtBQUNSLGVBQU8sS0FBS2dCLGVBQUwsQ0FBcUJoQixHQUFyQixJQUNILEtBQUtzQixNQUFMLENBQVlDLElBQVosQ0FBaUJDLElBQWpCLENBQ0EsSUFEQSxFQUVBLEtBQUtDLHNCQUFMLENBQTRCekIsR0FBNUIsRUFBaUNBLEdBQUcsQ0FBQ29CLEtBQUosQ0FBVW5CLElBQVYsQ0FBZXlCLEdBQWYsRUFBakMsQ0FGQSxDQURHLEdBS0gsSUFMSjtBQU1EOztBQXJEVSxLQURxQztBQUFBLFNBeURsREosTUF6RGtELEdBeUR6QztBQUNQSyxNQUFBQSxTQUFTLEVBQUUsQ0FBQyxPQUFEO0FBREosS0F6RHlDO0FBQUE7O0FBNkRsRFgsRUFBQUEsZUFBZSxDQUFDaEIsR0FBRCxFQUFNO0FBRW5CLFdBQU9BLEdBQUcsQ0FBQ2dCLGVBQUosTUFBeUJoQixHQUFHLENBQUNvQixLQUFKLENBQVVuQixJQUFWLFlBQTBCLEtBQUtFLFVBQS9EO0FBQ0Q7O0FBaEVpRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFjdGlvbiB9IGZyb20gJ0AvZGVjb3JhdG9ycydcbmltcG9ydCB7IE1vZGVsQ29udHJvbGxlciB9IGZyb20gJy4vTW9kZWxDb250cm9sbGVyJ1xuXG4vLyBUT0RPOiBSZW5hbWUgdG8gVXNlcnNDb250cm9sbGVyP1xuZXhwb3J0IGNsYXNzIFVzZXJDb250cm9sbGVyIGV4dGVuZHMgTW9kZWxDb250cm9sbGVyIHtcbiAgY29sbGVjdGlvbiA9IHtcbiAgICBAYWN0aW9uKCdwb3N0JylcbiAgICBhc3luYyBsb2dpbihjdHgpIHtcbiAgICAgIGxldCB1c2VyXG4gICAgICBsZXQgZXJyb3JcbiAgICAgIHRyeSB7XG4gICAgICAgIHVzZXIgPSBhd2FpdCB0aGlzLm1vZGVsQ2xhc3MubG9naW4oY3R4KVxuICAgICAgICBhd2FpdCB1c2VyLiRwYXRjaCh7IGxhc3RMb2dpbjogbmV3IERhdGUoKSB9LCBjdHgudHJhbnNhY3Rpb24pXG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhpcy5hcHAuZW1pdCgnZXJyb3InLCBlcnIsIGN0eClcbiAgICAgICAgdXNlciA9IG51bGxcbiAgICAgICAgZXJyb3IgPSBlcnIuZGF0YT8ubWVzc2FnZSB8fCBlcnIubWVzc2FnZVxuICAgICAgICBjdHguc3RhdHVzID0gZXJyLnN0YXR1cyB8fCA0MDFcbiAgICAgIH1cbiAgICAgIGNvbnN0IHN1Y2Nlc3MgPSAhIXVzZXJcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN1Y2Nlc3MsXG4gICAgICAgIGF1dGhlbnRpY2F0ZWQ6IHN1Y2Nlc3MgJiYgdGhpcy5pc0F1dGhlbnRpY2F0ZWQoY3R4KSxcbiAgICAgICAgdXNlcixcbiAgICAgICAgZXJyb3JcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgQGFjdGlvbigncG9zdCcpXG4gICAgYXN5bmMgbG9nb3V0KGN0eCkge1xuICAgICAgbGV0IHN1Y2Nlc3MgPSBmYWxzZVxuICAgICAgaWYgKHRoaXMuaXNBdXRoZW50aWNhdGVkKGN0eCkpIHtcbiAgICAgICAgYXdhaXQgY3R4LmxvZ291dCgpXG4gICAgICAgIHN1Y2Nlc3MgPSBjdHguaXNVbmF1dGhlbnRpY2F0ZWQoKVxuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3VjY2VzcyxcbiAgICAgICAgYXV0aGVudGljYXRlZDogdGhpcy5pc0F1dGhlbnRpY2F0ZWQoY3R4KVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBAYWN0aW9uKCdnZXQnKVxuICAgIHNlc3Npb24oY3R4KSB7XG4gICAgICBjb25zdCBhdXRoZW50aWNhdGVkID0gdGhpcy5pc0F1dGhlbnRpY2F0ZWQoY3R4KVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYXV0aGVudGljYXRlZCxcbiAgICAgICAgdXNlcjogYXV0aGVudGljYXRlZCA/IGN0eC5zdGF0ZS51c2VyIDogbnVsbFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBAYWN0aW9uKCdnZXQnKVxuICAgIHNlbGYoY3R4KSB7XG4gICAgICByZXR1cm4gdGhpcy5pc0F1dGhlbnRpY2F0ZWQoY3R4KVxuICAgICAgICA/IHRoaXMubWVtYmVyLmZpbmQuY2FsbChcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIHRoaXMuZ2V0Q29udGV4dFdpdGhNZW1iZXJJZChjdHgsIGN0eC5zdGF0ZS51c2VyLiRpZCgpKVxuICAgICAgICApXG4gICAgICAgIDogbnVsbFxuICAgIH1cbiAgfVxuXG4gIG1lbWJlciA9IHtcbiAgICBhdXRob3JpemU6IFsnJHNlbGYnXVxuICB9XG5cbiAgaXNBdXRoZW50aWNhdGVkKGN0eCkge1xuICAgIC8vIE1ha2Ugc3VyZSB0aGUgY3VycmVudGx5IGxvZ2dlZCBpbiB1c2VyIGhhcyB0aGUgY29ycmVjdCBtb2RlbC1jbGFzczpcbiAgICByZXR1cm4gY3R4LmlzQXV0aGVudGljYXRlZCgpICYmIGN0eC5zdGF0ZS51c2VyIGluc3RhbmNlb2YgdGhpcy5tb2RlbENsYXNzXG4gIH1cbn1cbiJdfQ==
98
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250cm9sbGVycy9Vc2VyQ29udHJvbGxlci5qcyJdLCJuYW1lcyI6WyJVc2VyQ29udHJvbGxlciIsIk1vZGVsQ29udHJvbGxlciIsImNvbGxlY3Rpb24iLCJsb2dpbiIsImN0eCIsInVzZXIiLCJlcnJvciIsIm1vZGVsQ2xhc3MiLCIkcGF0Y2giLCJsYXN0TG9naW4iLCJEYXRlIiwidHJhbnNhY3Rpb24iLCJlcnIiLCJhcHAiLCJlbWl0IiwiZGF0YSIsIm1lc3NhZ2UiLCJzdGF0dXMiLCJzdWNjZXNzIiwiYXV0aGVudGljYXRlZCIsImlzQXV0aGVudGljYXRlZCIsImxvZ291dCIsImlzVW5hdXRoZW50aWNhdGVkIiwic2Vzc2lvbiIsInN0YXRlIiwic2VsZiIsIm1lbWJlciIsImZpbmQiLCJjYWxsIiwiZ2V0Q29udGV4dFdpdGhNZW1iZXJJZCIsIiRpZCIsImF1dGhvcml6ZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOzs7O0FBR08sTUFBTUEsY0FBTixTQUE2QkMsZ0NBQTdCLENBQTZDO0FBQUE7QUFBQTs7QUFBQTtBQUFBLFNBQ2xEQyxVQURrRCxXQUUvQyx3QkFBTyxNQUFQLENBRitDLFVBd0IvQyx3QkFBTyxNQUFQLENBeEIrQyxVQXFDL0Msd0JBQU8sS0FBUCxDQXJDK0MsVUE4Qy9DLHdCQUFPLEtBQVAsQ0E5QytDLFVBQ3JDO0FBRVgsWUFBTUMsS0FBTixDQUFZQyxHQUFaLEVBQWlCO0FBQ2YsWUFBSUMsSUFBSjtBQUNBLFlBQUlDLEtBQUo7O0FBQ0EsWUFBSTtBQUNGRCxVQUFBQSxJQUFJLEdBQUcsTUFBTSxLQUFLRSxVQUFMLENBQWdCSixLQUFoQixDQUFzQkMsR0FBdEIsQ0FBYjtBQUNBLGdCQUFNQyxJQUFJLENBQUNHLE1BQUwsQ0FBWTtBQUFFQyxZQUFBQSxTQUFTLEVBQUUsSUFBSUMsSUFBSjtBQUFiLFdBQVosRUFBdUNOLEdBQUcsQ0FBQ08sV0FBM0MsQ0FBTjtBQUNELFNBSEQsQ0FHRSxPQUFPQyxHQUFQLEVBQVk7QUFBQTs7QUFDWixlQUFLQyxHQUFMLENBQVNDLElBQVQsQ0FBYyxPQUFkLEVBQXVCRixHQUF2QixFQUE0QlIsR0FBNUI7QUFDQUMsVUFBQUEsSUFBSSxHQUFHLElBQVA7QUFDQUMsVUFBQUEsS0FBSyxHQUFHLGNBQUFNLEdBQUcsQ0FBQ0csSUFBSiwrQkFBVUMsT0FBVixLQUFxQkosR0FBRyxDQUFDSSxPQUFqQztBQUNBWixVQUFBQSxHQUFHLENBQUNhLE1BQUosR0FBYUwsR0FBRyxDQUFDSyxNQUFKLElBQWMsR0FBM0I7QUFDRDs7QUFDRCxjQUFNQyxPQUFPLEdBQUcsQ0FBQyxDQUFDYixJQUFsQjtBQUNBLGVBQU87QUFDTGEsVUFBQUEsT0FESztBQUVMQyxVQUFBQSxhQUFhLEVBQUVELE9BQU8sSUFBSSxLQUFLRSxlQUFMLENBQXFCaEIsR0FBckIsQ0FGckI7QUFHTEMsVUFBQUEsSUFISztBQUlMQyxVQUFBQTtBQUpLLFNBQVA7QUFNRCxPQXJCVTs7QUF3QlgsWUFBTWUsTUFBTixDQUFhakIsR0FBYixFQUFrQjtBQUNoQixZQUFJYyxPQUFPLEdBQUcsS0FBZDs7QUFDQSxZQUFJLEtBQUtFLGVBQUwsQ0FBcUJoQixHQUFyQixDQUFKLEVBQStCO0FBQzdCLGdCQUFNQSxHQUFHLENBQUNpQixNQUFKLEVBQU47QUFDQUgsVUFBQUEsT0FBTyxHQUFHZCxHQUFHLENBQUNrQixpQkFBSixFQUFWO0FBQ0Q7O0FBQ0QsZUFBTztBQUNMSixVQUFBQSxPQURLO0FBRUxDLFVBQUFBLGFBQWEsRUFBRSxLQUFLQyxlQUFMLENBQXFCaEIsR0FBckI7QUFGVixTQUFQO0FBSUQsT0FsQ1U7O0FBcUNYbUIsTUFBQUEsT0FBTyxDQUFDbkIsR0FBRCxFQUFNO0FBQ1gsY0FBTWUsYUFBYSxHQUFHLEtBQUtDLGVBQUwsQ0FBcUJoQixHQUFyQixDQUF0QjtBQUNBLGVBQU87QUFDTGUsVUFBQUEsYUFESztBQUVMZCxVQUFBQSxJQUFJLEVBQUVjLGFBQWEsR0FBR2YsR0FBRyxDQUFDb0IsS0FBSixDQUFVbkIsSUFBYixHQUFvQjtBQUZsQyxTQUFQO0FBSUQsT0EzQ1U7O0FBOENYb0IsTUFBQUEsSUFBSSxDQUFDckIsR0FBRCxFQUFNO0FBQ1IsZUFBTyxLQUFLZ0IsZUFBTCxDQUFxQmhCLEdBQXJCLElBQ0gsS0FBS3NCLE1BQUwsQ0FBWUMsSUFBWixDQUFpQkMsSUFBakIsQ0FDQSxJQURBLEVBRUEsS0FBS0Msc0JBQUwsQ0FBNEJ6QixHQUE1QixFQUFpQ0EsR0FBRyxDQUFDb0IsS0FBSixDQUFVbkIsSUFBVixDQUFleUIsR0FBZixFQUFqQyxDQUZBLENBREcsR0FLSCxJQUxKO0FBTUQ7O0FBckRVLEtBRHFDO0FBQUEsU0F5RGxESixNQXpEa0QsR0F5RHpDO0FBQ1BLLE1BQUFBLFNBQVMsRUFBRSxDQUFDLE9BQUQ7QUFESixLQXpEeUM7QUFBQTs7QUE2RGxEWCxFQUFBQSxlQUFlLENBQUNoQixHQUFELEVBQU07QUFFbkIsV0FBT0EsR0FBRyxDQUFDZ0IsZUFBSixNQUF5QmhCLEdBQUcsQ0FBQ29CLEtBQUosQ0FBVW5CLElBQVYsWUFBMEIsS0FBS0UsVUFBL0Q7QUFDRDs7QUFoRWlEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYWN0aW9uIH0gZnJvbSAnQC9kZWNvcmF0b3JzJ1xuaW1wb3J0IHsgTW9kZWxDb250cm9sbGVyIH0gZnJvbSAnLi9Nb2RlbENvbnRyb2xsZXInXG5cbi8vIFRPRE86IFJlbmFtZSB0byBVc2Vyc0NvbnRyb2xsZXI/XG5leHBvcnQgY2xhc3MgVXNlckNvbnRyb2xsZXIgZXh0ZW5kcyBNb2RlbENvbnRyb2xsZXIge1xuICBjb2xsZWN0aW9uID0ge1xuICAgIEBhY3Rpb24oJ3Bvc3QnKVxuICAgIGFzeW5jIGxvZ2luKGN0eCkge1xuICAgICAgbGV0IHVzZXJcbiAgICAgIGxldCBlcnJvclxuICAgICAgdHJ5IHtcbiAgICAgICAgdXNlciA9IGF3YWl0IHRoaXMubW9kZWxDbGFzcy5sb2dpbihjdHgpXG4gICAgICAgIGF3YWl0IHVzZXIuJHBhdGNoKHsgbGFzdExvZ2luOiBuZXcgRGF0ZSgpIH0sIGN0eC50cmFuc2FjdGlvbilcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aGlzLmFwcC5lbWl0KCdlcnJvcicsIGVyciwgY3R4KVxuICAgICAgICB1c2VyID0gbnVsbFxuICAgICAgICBlcnJvciA9IGVyci5kYXRhPy5tZXNzYWdlIHx8IGVyci5tZXNzYWdlXG4gICAgICAgIGN0eC5zdGF0dXMgPSBlcnIuc3RhdHVzIHx8IDQwMVxuICAgICAgfVxuICAgICAgY29uc3Qgc3VjY2VzcyA9ICEhdXNlclxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3VjY2VzcyxcbiAgICAgICAgYXV0aGVudGljYXRlZDogc3VjY2VzcyAmJiB0aGlzLmlzQXV0aGVudGljYXRlZChjdHgpLFxuICAgICAgICB1c2VyLFxuICAgICAgICBlcnJvclxuICAgICAgfVxuICAgIH0sXG5cbiAgICBAYWN0aW9uKCdwb3N0JylcbiAgICBhc3luYyBsb2dvdXQoY3R4KSB7XG4gICAgICBsZXQgc3VjY2VzcyA9IGZhbHNlXG4gICAgICBpZiAodGhpcy5pc0F1dGhlbnRpY2F0ZWQoY3R4KSkge1xuICAgICAgICBhd2FpdCBjdHgubG9nb3V0KClcbiAgICAgICAgc3VjY2VzcyA9IGN0eC5pc1VuYXV0aGVudGljYXRlZCgpXG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdWNjZXNzLFxuICAgICAgICBhdXRoZW50aWNhdGVkOiB0aGlzLmlzQXV0aGVudGljYXRlZChjdHgpXG4gICAgICB9XG4gICAgfSxcblxuICAgIEBhY3Rpb24oJ2dldCcpXG4gICAgc2Vzc2lvbihjdHgpIHtcbiAgICAgIGNvbnN0IGF1dGhlbnRpY2F0ZWQgPSB0aGlzLmlzQXV0aGVudGljYXRlZChjdHgpXG4gICAgICByZXR1cm4ge1xuICAgICAgICBhdXRoZW50aWNhdGVkLFxuICAgICAgICB1c2VyOiBhdXRoZW50aWNhdGVkID8gY3R4LnN0YXRlLnVzZXIgOiBudWxsXG4gICAgICB9XG4gICAgfSxcblxuICAgIEBhY3Rpb24oJ2dldCcpXG4gICAgc2VsZihjdHgpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzQXV0aGVudGljYXRlZChjdHgpXG4gICAgICAgID8gdGhpcy5tZW1iZXIuZmluZC5jYWxsKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgdGhpcy5nZXRDb250ZXh0V2l0aE1lbWJlcklkKGN0eCwgY3R4LnN0YXRlLnVzZXIuJGlkKCkpXG4gICAgICAgIClcbiAgICAgICAgOiBudWxsXG4gICAgfVxuICB9XG5cbiAgbWVtYmVyID0ge1xuICAgIGF1dGhvcml6ZTogWyckc2VsZiddXG4gIH1cblxuICBpc0F1dGhlbnRpY2F0ZWQoY3R4KSB7XG4gICAgLy8gTWFrZSBzdXJlIHRoZSBjdXJyZW50bHkgbG9nZ2VkIGluIHVzZXIgaGFzIHRoZSBjb3JyZWN0IG1vZGVsLWNsYXNzOlxuICAgIHJldHVybiBjdHguaXNBdXRoZW50aWNhdGVkKCkgJiYgY3R4LnN0YXRlLnVzZXIgaW5zdGFuY2VvZiB0aGlzLm1vZGVsQ2xhc3NcbiAgfVxufVxuIl19
@@ -1,5 +1,11 @@
1
1
  "use strict";
2
2
 
3
+ require("core-js/modules/esnext.async-iterator.for-each.js");
4
+
5
+ require("core-js/modules/esnext.iterator.constructor.js");
6
+
7
+ require("core-js/modules/esnext.iterator.for-each.js");
8
+
3
9
  exports.__esModule = true;
4
10
 
5
11
  var _Controller = require("./Controller");
@@ -41,4 +47,4 @@ Object.keys(_UserController).forEach(function (key) {
41
47
  if (key in exports && exports[key] === _UserController[key]) return;
42
48
  exports[key] = _UserController[key];
43
49
  });
44
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250cm9sbGVycy9pbmRleC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUE7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFDQTs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUNBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQ0E7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFDQTs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9Db250cm9sbGVyJ1xuZXhwb3J0ICogZnJvbSAnLi9Nb2RlbENvbnRyb2xsZXInXG5leHBvcnQgKiBmcm9tICcuL1JlbGF0aW9uQ29udHJvbGxlcidcbmV4cG9ydCAqIGZyb20gJy4vQWRtaW5Db250cm9sbGVyJ1xuZXhwb3J0ICogZnJvbSAnLi9Vc2VyQ29udHJvbGxlcidcbiJdfQ==
50
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250cm9sbGVycy9pbmRleC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQUE7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFDQTs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUNBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQ0E7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFDQTs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9Db250cm9sbGVyJ1xuZXhwb3J0ICogZnJvbSAnLi9Nb2RlbENvbnRyb2xsZXInXG5leHBvcnQgKiBmcm9tICcuL1JlbGF0aW9uQ29udHJvbGxlcidcbmV4cG9ydCAqIGZyb20gJy4vQWRtaW5Db250cm9sbGVyJ1xuZXhwb3J0ICogZnJvbSAnLi9Vc2VyQ29udHJvbGxlcidcbiJdfQ==
@@ -1,5 +1,11 @@
1
1
  "use strict";
2
2
 
3
+ require("core-js/modules/esnext.async-iterator.for-each.js");
4
+
5
+ require("core-js/modules/esnext.iterator.constructor.js");
6
+
7
+ require("core-js/modules/esnext.iterator.for-each.js");
8
+
3
9
  exports.__esModule = true;
4
10
 
5
11
  var _action = require("./action");
@@ -49,4 +55,4 @@ Object.keys(_transacted).forEach(function (key) {
49
55
  if (key in exports && exports[key] === _transacted[key]) return;
50
56
  exports[key] = _transacted[key];
51
57
  });
52
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kZWNvcmF0b3JzL2luZGV4LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQTs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUNBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQ0E7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFDQTs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUNBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQ0E7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vYWN0aW9uJ1xuZXhwb3J0ICogZnJvbSAnLi9hdXRob3JpemUnXG5leHBvcnQgKiBmcm9tICcuL3BhcmFtZXRlcnMnXG5leHBvcnQgKiBmcm9tICcuL3JldHVybnMnXG5leHBvcnQgKiBmcm9tICcuL3Njb3BlJ1xuZXhwb3J0ICogZnJvbSAnLi90cmFuc2FjdGVkJ1xuIl19
58
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kZWNvcmF0b3JzL2luZGV4LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBQTs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUNBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQ0E7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFDQTs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUNBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQ0E7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vYWN0aW9uJ1xuZXhwb3J0ICogZnJvbSAnLi9hdXRob3JpemUnXG5leHBvcnQgKiBmcm9tICcuL3BhcmFtZXRlcnMnXG5leHBvcnQgKiBmcm9tICcuL3JldHVybnMnXG5leHBvcnQgKiBmcm9tICcuL3Njb3BlJ1xuZXhwb3J0ICogZnJvbSAnLi90cmFuc2FjdGVkJ1xuIl19