@ditojs/server 0.272.0 → 0.273.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/lib/app/Application.js +39 -5
  2. package/lib/app/SessionStore.js +3 -1
  3. package/lib/app/Validator.js +13 -1
  4. package/lib/app/index.js +7 -1
  5. package/lib/cli/console.js +11 -1
  6. package/lib/cli/db/createMigration.js +13 -1
  7. package/lib/cli/db/index.js +7 -1
  8. package/lib/cli/db/seed.js +10 -2
  9. package/lib/cli/index.js +6 -2
  10. package/lib/controllers/AdminController.js +12 -2
  11. package/lib/controllers/CollectionController.js +15 -1
  12. package/lib/controllers/Controller.js +25 -1
  13. package/lib/controllers/ControllerAction.js +23 -14
  14. package/lib/controllers/RelationController.js +7 -1
  15. package/lib/controllers/UserController.js +15 -1
  16. package/lib/controllers/index.js +7 -1
  17. package/lib/decorators/index.js +7 -1
  18. package/lib/decorators/parameters.js +3 -1
  19. package/lib/decorators/returns.js +3 -1
  20. package/lib/errors/DatabaseError.js +5 -19
  21. package/lib/errors/ResponseError.js +4 -16
  22. package/lib/errors/index.js +7 -1
  23. package/lib/graph/DitoGraphProcessor.js +5 -1
  24. package/lib/graph/expression.js +5 -1
  25. package/lib/graph/graph.js +18 -2
  26. package/lib/graph/index.js +7 -1
  27. package/lib/index.js +7 -1
  28. package/lib/lib/index.js +7 -1
  29. package/lib/middleware/findRoute.js +7 -1
  30. package/lib/middleware/index.js +7 -1
  31. package/lib/mixins/AssetMixin.js +4 -4
  32. package/lib/mixins/SessionMixin.js +4 -4
  33. package/lib/mixins/TimeStampedMixin.js +4 -4
  34. package/lib/mixins/UserMixin.js +10 -4
  35. package/lib/mixins/index.js +7 -1
  36. package/lib/models/Model.js +21 -4
  37. package/lib/models/definitions/filters.js +9 -1
  38. package/lib/models/definitions/properties.js +7 -1
  39. package/lib/models/definitions/scopes.js +9 -1
  40. package/lib/models/index.js +7 -1
  41. package/lib/query/QueryBuilder.js +11 -1
  42. package/lib/query/QueryFilters.js +11 -1
  43. package/lib/query/index.js +7 -1
  44. package/lib/schema/formats/index.js +7 -1
  45. package/lib/schema/index.js +10 -2
  46. package/lib/schema/keywords/index.js +7 -1
  47. package/lib/schema/properties.js +11 -1
  48. package/lib/schema/relations.js +18 -4
  49. package/lib/services/index.js +7 -1
  50. package/lib/storage/DiskStorage.js +7 -1
  51. package/lib/storage/Storage.js +5 -1
  52. package/lib/storage/index.js +7 -1
  53. package/lib/utils/emitter.js +5 -1
  54. package/lib/utils/index.js +7 -1
  55. package/lib/utils/object.js +9 -3
  56. package/package.json +29 -29
  57. package/src/app/Application.js +23 -3
  58. package/src/controllers/AdminController.js +1 -1
  59. package/src/controllers/ControllerAction.js +7 -13
  60. package/src/errors/DatabaseError.js +2 -23
  61. package/src/errors/ResponseError.js +1 -9
  62. package/src/models/Model.js +10 -8
@@ -3,6 +3,16 @@
3
3
  exports.__esModule = true;
4
4
  exports.QueryBuilder = void 0;
5
5
 
6
+ require("core-js/modules/esnext.async-iterator.reduce.js");
7
+
8
+ require("core-js/modules/esnext.iterator.constructor.js");
9
+
10
+ require("core-js/modules/esnext.iterator.reduce.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 _objection = _interopRequireDefault(require("objection"));
7
17
 
8
18
  var _lib = require("../lib");
@@ -732,4 +742,4 @@ function addGraphScope(modelClass, expr, scopes, modifiers, isRoot = false) {
732
742
  }
733
743
 
734
744
  const mixinMethods = ['first', 'find', 'findOne', 'findById', 'withGraph', 'withGraphFetched', 'withGraphJoined', 'clearWithGraph', 'withScope', 'applyScope', 'clearWithScope', 'clear', 'pick', 'omit', 'select', 'insert', 'upsert', 'update', 'patch', 'delete', 'updateById', 'patchById', 'deleteById', 'truncate', 'insertAndFetch', 'upsertAndFetch', 'updateAndFetch', 'patchAndFetch', 'updateAndFetchById', 'patchAndFetchById', 'insertGraph', 'upsertGraph', 'insertGraphAndFetch', 'upsertGraphAndFetch', 'insertDitoGraph', 'upsertDitoGraph', 'updateDitoGraph', 'patchDitoGraph', 'insertDitoGraphAndFetch', 'upsertDitoGraphAndFetch', 'updateDitoGraphAndFetch', 'patchDitoGraphAndFetch', 'upsertDitoGraphAndFetchById', 'updateDitoGraphAndFetchById', 'patchDitoGraphAndFetchById', 'where', 'whereNot', 'whereRaw', 'whereWrapped', 'whereExists', 'whereNotExists', 'whereIn', 'whereNotIn', 'whereNull', 'whereNotNull', 'whereBetween', 'whereNotBetween', 'whereColumn', 'whereNotColumn', 'whereComposite', 'whereInComposite', 'whereNotInComposite', 'whereJsonHasAny', 'whereJsonHasAll', 'whereJsonIsArray', 'whereJsonNotArray', 'whereJsonIsObject', 'whereJsonNotObject', 'whereJsonSubsetOf', 'whereJsonNotSubsetOf', 'whereJsonSupersetOf', 'whereJsonNotSupersetOf', 'having', 'havingIn', 'havingNotIn', 'havingNull', 'havingNotNull', 'havingExists', 'havingNotExists', 'havingBetween', 'havingNotBetween', 'havingRaw', 'havingWrapped', 'eager', 'joinEager', 'naiveEager', 'mergeEager', 'mergeJoinEager', 'mergeNaiveEager', 'clearEager', 'scope', 'mergeScope', 'clearScope'];
735
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9xdWVyeS9RdWVyeUJ1aWxkZXIuanMiXSwibmFtZXMiOlsiU1lNQk9MX0FMTCIsIlN5bWJvbCIsIlF1ZXJ5QnVpbGRlciIsIm9iamVjdGlvbiIsImNvbnN0cnVjdG9yIiwibW9kZWxDbGFzcyIsIl9pZ25vcmVHcmFwaCIsIl9ncmFwaEFsZ29yaXRobSIsIl9hbGxvd0ZpbHRlcnMiLCJfYWxsb3dTY29wZXMiLCJfaWdub3JlU2NvcGVzIiwiX2FwcGxpZWRTY29wZXMiLCJfZXhlY3V0ZUZpcnN0IiwiX2NsZWFyU2NvcGVzIiwiY2xvbmUiLCJjb3B5IiwiX2NvcHlTY29wZXMiLCJleGVjdXRlIiwiaXNOb3JtYWxGaW5kIiwiaXNGaW5kIiwiaGFzU3BlY2lhbFNlbGVjdHMiLCJjb2xsZWN0ZWRTY29wZXMiLCJzY29wZXMiLCJPYmplY3QiLCJlbnRyaWVzIiwiX3Njb3BlcyIsImxlbmd0aCIsInNjb3BlIiwiZ3JhcGgiLCJfYXBwbHlTY29wZSIsImhhc05vcm1hbFNlbGVjdHMiLCJoYXMiLCJoYXNTZWxlY3RzIiwiY2hpbGRRdWVyeU9mIiwicXVlcnkiLCJvcHRpb25zIiwiaXNJbnRlcm5hbCIsInRvRmluZFF1ZXJ5IiwiY2xlYXIiLCJ3aXRoU2NvcGUiLCJleHByIiwiUXVlcnlCdWlsZGVyRXJyb3IiLCJjbGVhcldpdGhTY29wZSIsImlnbm9yZVNjb3BlIiwiYXBwbHlTY29wZSIsImFsbG93U2NvcGUiLCJkZWZhdWx0IiwiY2xlYXJBbGxvd1Njb3BlIiwibWVyZ2VTY29wZSIsImNsZWFyU2NvcGUiLCJhZGREZWZhdWx0IiwiaXNDaGlsZFF1ZXJ5IiwiaXNTYW1lTW9kZWxDbGFzcyIsImNvcHlBbGxTY29wZXMiLCJfZmlsdGVyU2NvcGVzIiwiY2FsbGJhY2siLCJyZWR1Y2UiLCJmdW5jIiwiZ2V0U2NvcGUiLCJjYWxsIiwiZ3JhcGhFeHByZXNzaW9uT2JqZWN0IiwibmFtZSIsIm1vZGlmaWVycyIsIndpdGhHcmFwaCIsImFkZEdyYXBoU2NvcGUiLCJhcHBseUZpbHRlciIsImFyZ3MiLCJmaWx0ZXIiLCJkZWZpbml0aW9uIiwiZmlsdGVycyIsImFuZFdoZXJlIiwiYWxsb3dGaWx0ZXIiLCJhbGdvcml0aG0iLCJtZXRob2QiLCJmZXRjaCIsImpvaW4iLCJ3aXRoR3JhcGhGZXRjaGVkIiwid2l0aEdyYXBoSm9pbmVkIiwidG9TUUwiLCJ0b0tuZXhRdWVyeSIsInJhdyIsInRvS25leFJhdyIsInNlbGVjdFJhdyIsInNlbGVjdCIsInBsdWNrIiwia2V5IiwicnVuQWZ0ZXIiLCJyZXN1bHQiLCJtYXAiLCJpdCIsImxvYWREYXRhUGF0aCIsImRhdGFQYXRoIiwicGFyc2VkRGF0YVBhdGgiLCJwcm9wZXJ0eSIsImV4cHJlc3Npb24iLCJuZXN0ZWREYXRhUGF0aCIsImluZGV4IiwiZ2V0UHJvcGVydHlPclJlbGF0aW9uQXREYXRhUGF0aCIsImluY2x1ZGVzIiwidHlwZSIsInRydW5jYXRlIiwicmVzdGFydCIsImNhc2NhZGUiLCJpc1Bvc3RncmVTUUwiLCJ0YWJsZU5hbWUiLCJpbnNlcnQiLCJkYXRhIiwiaW5zZXJ0R3JhcGgiLCJ1cHNlcnQiLCJtYWluUXVlcnkiLCJydW5CZWZvcmUiLCJidWlsZGVyIiwiY29udGV4dCIsImlzTWFpblF1ZXJ5IiwidXBkYXRlIiwiZmlyc3QiLCJmaW5kIiwiYWxsb3dQYXJhbSIsImFsbG93ZWQiLCJRdWVyeVBhcmFtZXRlcnMiLCJ2YWx1ZSIsInBhcmFtIiwiZW5kc1dpdGgiLCJzbGljZSIsInBhcmFtSGFuZGxlciIsImdldCIsImZpbmRCeUlkIiwiaWQiLCJieUlkIiwicGF0Y2hBbmRGZXRjaEJ5SWQiLCJ1cGRhdGVBbmRGZXRjaEJ5SWQiLCJkZWxldGVCeUlkIiwicGF0Y2hCeUlkIiwicGF0Y2giLCJ1cGRhdGVCeUlkIiwicGF0Y2hBbmRGZXRjaCIsIl91cHNlcnRBbmRGZXRjaCIsInVwZGF0ZUFuZEZldGNoIiwidXBzZXJ0QW5kRmV0Y2giLCJpbnNlcnRNaXNzaW5nIiwibm9JbnNlcnQiLCJnZXRSZWxhdGlvbk5hbWVzIiwidXBzZXJ0R3JhcGhBbmRGZXRjaCIsImZldGNoU3RyYXRlZ3kiLCJub0luc2V0Iiwibm9EZWxldGUiLCJub1JlbGF0ZSIsIm5vVW5yZWxhdGUiLCJpbnNlcnREaXRvR3JhcGgiLCJfaGFuZGxlRGl0b0dyYXBoIiwiaW5zZXJ0RGl0b0dyYXBoT3B0aW9ucyIsImluc2VydERpdG9HcmFwaEFuZEZldGNoIiwidXBzZXJ0RGl0b0dyYXBoIiwidXBzZXJ0RGl0b0dyYXBoT3B0aW9ucyIsInVwc2VydERpdG9HcmFwaEFuZEZldGNoIiwicGF0Y2hEaXRvR3JhcGgiLCJwYXRjaERpdG9HcmFwaE9wdGlvbnMiLCJwYXRjaERpdG9HcmFwaEFuZEZldGNoIiwidXBkYXRlRGl0b0dyYXBoIiwidXBkYXRlRGl0b0dyYXBoT3B0aW9ucyIsInVwZGF0ZURpdG9HcmFwaEFuZEZldGNoIiwidXBzZXJ0RGl0b0dyYXBoQW5kRmV0Y2hCeUlkIiwiZ2V0UmVmZXJlbmNlIiwicGF0Y2hEaXRvR3JhcGhBbmRGZXRjaEJ5SWQiLCJ1cGRhdGVEaXRvR3JhcGhBbmRGZXRjaEJ5SWQiLCJkZWZhdWx0T3B0aW9ucyIsImhhbmRsZUdyYXBoIiwiZ3JhcGhQcm9jZXNzb3IiLCJEaXRvR3JhcGhQcm9jZXNzb3IiLCJwcm9jZXNzT3ZlcnJpZGVzIiwicHJvY2Vzc1JlbGF0ZXMiLCJnZXREYXRhIiwiZ2V0T3B0aW9ucyIsImN5Y2xpYyIsInN0YXJ0c1dpdGgiLCJfdXBzZXJ0Q3ljbGljRGl0b0dyYXBoQW5kRmV0Y2giLCJpZGVudGlmaWVycyIsInJlZmVyZW5jZXMiLCJ1aWRQcm9wIiwidWlkUmVmUHJvcCIsInBhdGgiLCJyZWYiLCJjbG9uZWQiLCJrZXlzIiwicGFydHMiLCJwb3AiLCJwYXJlbnQiLCJvcHRzIiwibW9kZWwiLCJsaW5rcyIsImlkZW50aWZpZXIiLCJyZWZlcmVuY2UiLCJsaW5rIiwibWl4aW4iLCJ0YXJnZXQiLCJtaXhpbk1ldGhvZHMiLCJjb25zb2xlIiwid2FybiIsImRlZmluZVByb3BlcnR5IiwiY29uZmlndXJhYmxlIiwiZW51bWVyYWJsZSIsIktuZXhIZWxwZXIiLCJwcm90b3R5cGUiLCJ0ZXN0IiwicHJvcGVydGllcyIsImV4cGFuZElkZW50aWZpZXIiLCJhbGlhcyIsIm1hdGNoIiwidGFibGVSZWZGb3IiLCJjb252ZXJ0QXJndW1lbnQiLCJhcmciLCJpIiwicmVsYXRlIiwiYWxsb3dSZWZzIiwidW5yZWxhdGUiLCJpc1Jvb3QiLCIkbW9kaWZ5IiwiaGFzU2NvcGUiLCJwdXNoIiwicmVsYXRpb25zIiwiZ2V0UmVsYXRpb25zIiwiY2hpbGRFeHByIiwicmVsYXRpb24iLCIkcmVsYXRpb24iLCJSZWxhdGlvbkVycm9yIiwicmVsYXRlZE1vZGVsQ2xhc3MiXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBSUE7Ozs7QUFFQSxNQUFNQSxVQUFVLEdBQUdDLE1BQU0sQ0FBQyxLQUFELENBQXpCOztBQUVPLE1BQU1DLFlBQU4sU0FBMkJDLG1CQUFVRCxZQUFyQyxDQUFrRDtBQUN2REUsRUFBQUEsV0FBVyxDQUFDQyxVQUFELEVBQWE7QUFDdEIsVUFBTUEsVUFBTjtBQUNBLFNBQUtDLFlBQUwsR0FBb0IsS0FBcEI7QUFDQSxTQUFLQyxlQUFMLEdBQXVCLE9BQXZCO0FBQ0EsU0FBS0MsYUFBTCxHQUFxQixJQUFyQjtBQUNBLFNBQUtDLFlBQUwsR0FBb0IsSUFBcEI7QUFDQSxTQUFLQyxhQUFMLEdBQXFCLEVBQXJCO0FBQ0EsU0FBS0MsY0FBTCxHQUFzQixFQUF0QjtBQUNBLFNBQUtDLGFBQUwsR0FBcUIsSUFBckI7O0FBQ0EsU0FBS0MsWUFBTCxDQUFrQixJQUFsQjtBQUNEOztBQUdEQyxFQUFBQSxLQUFLLEdBQUc7QUFDTixVQUFNQyxJQUFJLEdBQUcsTUFBTUQsS0FBTixFQUFiO0FBQ0FDLElBQUFBLElBQUksQ0FBQ1QsWUFBTCxHQUFvQixLQUFLQSxZQUF6QjtBQUNBUyxJQUFBQSxJQUFJLENBQUNSLGVBQUwsR0FBdUIsS0FBS0EsZUFBNUI7QUFDQVEsSUFBQUEsSUFB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eURuQiw0QkF6RG1CLEVBMkRuQixPQTNEbUIsRUE0RG5CLFVBNURtQixFQTZEbkIsVUE3RG1CLEVBOERuQixjQTlEbUIsRUErRG5CLGFBL0RtQixFQWdFbkIsZ0JBaEVtQixFQWlFbkIsU0FqRW1CLEVBa0VuQixZQWxFbUIsRUFtRW5CLFdBbkVtQixFQW9FbkIsY0FwRW1CLEVBcUVuQixjQXJFbUIsRUFzRW5CLGlCQXRFbUIsRUF1RW5CLGFBdkVtQixFQXdFbkIsZ0JBeEVtQixFQXlFbkIsZ0JBekVtQixFQTBFbkIsa0JBMUVtQixFQTJFbkIscUJBM0VtQixFQTRFbkIsaUJBNUVtQixFQTZFbkIsaUJBN0VtQixFQThFbkIsa0JBOUVtQixFQStFbkIsbUJBL0VtQixFQWdGbkIsbUJBaEZtQixFQWlGbkIsb0JBakZtQixFQWtGbkIsbUJBbEZtQixFQW1GbkIsc0JBbkZtQixFQW9GbkIscUJBcEZtQixFQXFGbkIsd0JBckZtQixFQXVGbkIsUUF2Rm1CLEVBd0ZuQixVQXhGbUIsRUF5Rm5CLGFBekZtQixFQTBGbkIsWUExRm1CLEVBMkZuQixlQTNGbUIsRUE0Rm5CLGNBNUZtQixFQTZGbkIsaUJBN0ZtQixFQThGbkIsZUE5Rm1CLEVBK0ZuQixrQkEvRm1CLEVBZ0duQixXQWhHbUIsRUFpR25CLGVBakdtQixFQXFHbkIsT0FyR21CLEVBc0duQixXQXRHbUIsRUF1R25CLFlBdkdtQixFQXdHbkIsWUF4R21CLEVBeUduQixnQkF6R21CLEVBMEduQixpQkExR21CLEVBMkduQixZQTNHbUIsRUE2R25CLE9BN0dtQixFQThHbkIsWUE5R21CLEVBK0duQixZQS9HbUIsQ0FBckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgb2JqZWN0aW9uIGZyb20gJ29iamVjdGlvbidcbmltcG9ydCB7IEtuZXhIZWxwZXIgfSBmcm9tICdAL2xpYidcbmltcG9ydCB7IFF1ZXJ5QnVpbGRlckVycm9yLCBSZWxhdGlvbkVycm9yIH0gZnJvbSAnQC9lcnJvcnMnXG5pbXBvcnQgeyBRdWVyeVBhcmFtZXRlcnMgfSBmcm9tICcuL1F1ZXJ5UGFyYW1ldGVycydcbmltcG9ydCB7IERpdG9HcmFwaFByb2Nlc3Nvciwgd2Fsa0dyYXBoIH0gZnJvbSAnQC9ncmFwaCdcbmltcG9ydCB7XG4gIGlzT2JqZWN0LCBpc1BsYWluT2JqZWN0LCBpc1N0cmluZywgaXNBcnJheSwgY2xvbmUsIG1hcEtleXMsXG4gIGdldFZhbHVlQXREYXRhUGF0aCwgc2V0VmFsdWVBdERhdGFQYXRoLCBwYXJzZURhdGFQYXRoXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgeyBjcmVhdGVMb29rdXAsIGdldFNjb3BlLCBkZXByZWNhdGUgfSBmcm9tICdAL3V0aWxzJ1xuXG5jb25zdCBTWU1CT0xfQUxMID0gU3ltYm9sKCdhbGwnKVxuXG5leHBvcnQgY2xhc3MgUXVlcnlCdWlsZGVyIGV4dGVuZHMgb2JqZWN0aW9uLlF1ZXJ5QnVpbGRlciB7XG4gIGNvbnN0cnVjdG9yKG1vZGVsQ2xhc3MpIHtcbiAgICBzdXBlcihtb2RlbENsYXNzKVxuICAgIHRoaXMuX2lnbm9yZUdyYXBoID0gZmFsc2VcbiAgICB0aGlzLl9ncmFwaEFsZ29yaXRobSA9ICdmZXRjaCdcbiAgICB0aGlzLl9hbGxvd0ZpbHRlcnMgPSBudWxsXG4gICAgdGhpcy5fYWxsb3dTY29wZXMgPSBudWxsXG4gICAgdGhpcy5faWdub3JlU2NvcGVzID0ge31cbiAgICB0aGlzLl9hcHBsaWVkU2NvcGVzID0ge31cbiAgICB0aGlzLl9leGVjdXRlRmlyc3QgPSBudWxsIC8vIFBhcnQgb2YgYSB3b3JrLWFyb3VuZCBmb3IgY3ljbGljIGdyYXBoc1xuICAgIHRoaXMuX2NsZWFyU2NvcGVzKHRydWUpXG4gIH1cblxuICAvLyBAb3ZlcnJpZGVcbiAgY2xvbmUoKSB7XG4gICAgY29uc3QgY29weSA9IHN1cGVyLmNsb25lKClcbiAgICBjb3B5Ll9pZ25vcmVHcmFwaCA9IHRoaXMuX2lnbm9yZUdyYXBoXG4gICAgY29weS5fZ3JhcGhBbGdvcml0aG0gPSB0aGlzLl9ncmFwaEFsZ29yaXRobVxuICAgIGNvcHkuX2FwcGxpZWRTY29wZXMgPSB7IC4uLnRoaXMuX2FwcGxpZWRTY29wZXMgfVxuICAgIGNvcHkuX2FsbG93RmlsdGVycyA9IHRoaXMuX2FsbG93RmlsdGVycyA/IHsgLi4udGhpcy5fYWxsb3dGaWx0ZXJzIH0gOiBudWxsXG4gICAgY29weS5fY29weVNjb3Blcyh0aGlzKVxuICAgIHJldHVybiBjb3B5XG4gIH1cblxuICAvLyBAb3ZlcnJpZGVcbiAgYXN5bmMgZXhlY3V0ZSgpIHtcbiAgICBpZiAoIXRoaXMuX2lnbm9yZVNjb3Blc1tTWU1CT0xfQUxMXSkge1xuICAgICAgLy8gT25seSBhcHBseSBkZWZhdWx0IHNjb3BlcyBpZiB0aGlzIGlzIGEgbm9ybWFsIGZpbmQgcXVlcnksIG1lYW5pbmcgaXRcbiAgICAgIC8vIGRvZXMgbm90IGRlZmluZSBhbnkgd3JpdGUgb3BlcmF0aW9ucyBvciBzcGVjaWFsIHNlbGVjdHMsIGUuZy4gYGNvdW50YDpcbiAgICAgIGNvbnN0IGlzTm9ybWFsRmluZCA9IChcbiAgICAgICAgdGhpcy5pc0ZpbmQoKSAmJlxuICAgICAgICAhdGhpcy5oYXNTcGVjaWFsU2VsZWN0cygpXG4gICAgICApXG4gICAgICAvLyBJZiB0aGlzIGlzbid0IGEgbm9ybWFsIGZpbmQgcXVlcnksIGlnbm9yZSBhbGwgZ3JhcGggb3BlcmF0aW9ucyxcbiAgICAgIC8vIHRvIG5vdCBtZXNzIHdpdGggc3BlY2lhbCBzZWxlY3RzIHN1Y2ggYXMgYGNvdW50YCwgZXRjOlxuICAgICAgdGhpcy5faWdub3JlR3JhcGggPSAhaXNOb3JtYWxGaW5kXG4gICAgICAvLyBBbGwgc2NvcGVzIGluIGBfc2NvcGVzYCB3ZXJlIGFscmVhZHkgY2hlY2tlZCBhZ2FpbnN0IGBfYWxsb3dTY29wZXNgLlxuICAgICAgLy8gVGhleSB0aGVtZXNlbHZlcyBhcmUgYWxsb3dlZCB0byBhcHBseSAvIHJlcXVlc3Qgb3RoZXIgc2NvcGVzIHRoYXRcbiAgICAgIC8vIGFyZW4ndCBsaXN0ZWQsIHNvIGNsZWFyIGBfYXBwbHlTY29wZWAgYW5kIHJlc3RvcmUgYWdhaW4gYWZ0ZXI6XG4gICAgICBjb25zdCB7IF9hbGxvd1Njb3BlcyB9ID0gdGhpc1xuICAgICAgdGhpcy5fYWxsb3dTY29wZXMgPSBudWxsXG4gICAgICBjb25zdCBjb2xsZWN0ZWRTY29wZXMgPSB7fVxuICAgICAgLy8gU2NvcGVzIGNhbiB0aGVtc2VsdmVzIHJlcXVlc3QgbW9yZSBzY29wZXMgYnkgY2FsbGluZyBgd2l0aFNjb3BlKClgXG4gICAgICAvLyBJbiBvcmRlciB0byBwcmV2ZW50IHRoYXQgZnJvbSBjYXVzaW5nIHByb2JsZW1zIHdoaWxlIGxvb3Bpbmcgb3ZlclxuICAgICAgLy8gYF9zY29wZXNgLCBjcmVhdGUgYSBsb2NhbCBjb3B5IG9mIHRoZSBlbnRyaWVzLCBzZXQgYF9zY29wZXNgIHRvIGFuXG4gICAgICAvLyBlbXB0eSBvYmplY3QgZHVyaW5nIGl0ZXJhdGlvbiBhbmQgY2hlY2sgaWYgdGhlcmUgYXJlIG5ldyBlbnRyaWVzIGFmdGVyXG4gICAgICAvLyBvbmUgZnVsbCBsb29wLiBLZWVwIGRvaW5nIHRoaXMgdW50aWwgdGhlcmUncyBub3RoaW5nIGxlZnQsIGJ1dCBrZWVwXG4gICAgICAvLyB0cmFjayBvZiBhbGwgdGhlIGFwcGxpZWQgc2NvcGVzLCBzbyBgX3Njb3Blc2AgY2FuIGJlIHNldCB0byB0aGUgdGhlXG4gICAgICAvLyB0aGF0IGluIHRoZSBlbmQuIFRoaXMgaXMgbmVlZGVkIGZvciBjaGlsZCBxdWVyaWVzLCBzZWUgYGNoaWxkUXVlcnlPZigpYFxuICAgICAgbGV0IHNjb3BlcyA9IE9iamVjdC5lbnRyaWVzKHRoaXMuX3Njb3BlcylcbiAgICAgIHdoaWxlIChzY29wZXMubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLl9zY29wZXMgPSB7fVxuICAgICAgICBmb3IgKGNvbnN0IFtzY29wZSwgZ3JhcGhdIG9mIHNjb3Blcykge1xuICAgICAgICAgIC8vIERvbid0IGFwcGx5IGBkZWZhdWx0YCBzY29wZXMgb24gYW55dGhpbmcgZWxzZSB0aGFuIGEgbm9ybWFsIGZpbmRcbiAgICAgICAgICAvLyBxdWVyeTpcbiAgICAgICAgICBpZiAoc2NvcGUgIT09ICdkZWZhdWx0JyB8fCBpc05vcm1hbEZpbmQpIHtcbiAgICAgICAgICAgIHRoaXMuX2FwcGx5U2NvcGUoc2NvcGUsIGdyYXBoKVxuICAgICAgICAgICAgY29sbGVjdGVkU2NvcGVzW3Njb3BlXSB8fD0gZ3JhcGhcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgc2NvcGVzID0gT2JqZWN0LmVudHJpZXModGhpcy5fc2NvcGVzKVxuICAgICAgfVxuICAgICAgdGhpcy5fc2NvcGVzID0gY29sbGVjdGVkU2NvcGVzXG4gICAgICB0aGlzLl9hbGxvd1Njb3BlcyA9IF9hbGxvd1Njb3Blc1xuICAgICAgdGhpcy5faWdub3JlR3JhcGggPSBmYWxzZVxuICAgIH1cbiAgICAvLyBJbiBjYXNlIG9mIGN5Y2xpYyBncmFwaHMsIHJ1biBgX2V4ZWN1dGVGaXJzdCgpYCBub3c6XG4gICAgYXdhaXQgdGhpcy5fZXhlY3V0ZUZpcnN0Py4oKVxuICAgIHJldHVybiBzdXBlci5leGVjdXRlKClcbiAgfVxuXG4gIGhhc05vcm1hbFNlbGVjdHMoKSB7XG4gICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBxdWVyeSBkZWZpbmVzIG5vcm1hbCBzZWxlY3RzOlxuICAgIC8vICAgc2VsZWN0KCksIGNvbHVtbigpLCBjb2x1bW5zKClcbiAgICByZXR1cm4gdGhpcy5oYXMoL14oc2VsZWN0fGNvbHVtbnM/KSQvKVxuICB9XG5cbiAgaGFzU3BlY2lhbFNlbGVjdHMoKSB7XG4gICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBxdWVyeSBkZWZpbmVzIHNwZWNpYWwgc2VsZWN0czpcbiAgICAvLyAgIGRpc3RpbmN0KCksIGNvdW50KCksIGNvdW50RGlzdGluY3QoKSwgbWluKCksIG1heCgpLFxuICAgIC8vICAgc3VtKCksIHN1bURpc3RpbmN0KCksIGF2ZygpLCBhdmdEaXN0aW5jdCgpXG4gICAgcmV0dXJuIHRoaXMuaGFzU2VsZWN0cygpICYmICF0aGlzLmhhc05vcm1hbFNlbGVjdHMoKVxuICB9XG5cbiAgLy8gQG92ZXJyaWRlXG4gIGNoaWxkUXVlcnlPZihxdWVyeSwgb3B0aW9ucykge1xuICAgIHN1cGVyLmNoaWxkUXVlcnlPZihxdWVyeSwgb3B0aW9ucylcbiAgICBpZiAodGhpcy5pc0ludGVybmFsKCkpIHtcbiAgICAgIC8vIEludGVybmFsIHF1ZXJpZXMgc2hvdWxkbid0IGFwcGx5IG9yIGluaGVyaXQgYW55IHNjb3Blcywgbm90IGV2ZW4gdGhlXG4gICAgICAvLyBkZWZhdWx0IHNjb3BlLlxuICAgICAgdGhpcy5fY2xlYXJTY29wZXMoZmFsc2UpXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEluaGVyaXQgdGhlIGdyYXBoIHNjb3BlcyBmcm9tIHRoZSBwYXJlbnQgcXVlcnkuXG4gICAgICB0aGlzLl9jb3B5U2NvcGVzKHF1ZXJ5LCB0cnVlKVxuICAgIH1cbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgLy8gQG92ZXJyaWRlXG4gIHRvRmluZFF1ZXJ5KCkge1xuICAgIC8vIFRlbXBvcmFyeSB3b3JrYXJvdW5kIHRvIGZpeCB0aGlzIGlzc3VlIHVudGlsIGl0IGlzIHJlc29sdmVkIGluIE9iamVjdGlvbjpcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vVmluY2l0L29iamVjdGlvbi5qcy9pc3N1ZXMvMjA5M1xuICAgIHJldHVybiBzdXBlci50b0ZpbmRRdWVyeSgpLmNsZWFyKCdydW5BZnRlcicpXG4gIH1cblxuICB3aXRoU2NvcGUoLi4uc2NvcGVzKSB7XG4gICAgZm9yIChjb25zdCBleHByIG9mIHNjb3Blcykge1xuICAgICAgaWYgKGV4cHIpIHtcbiAgICAgICAgY29uc3QgeyBzY29wZSwgZ3JhcGggfSA9IGdldFNjb3BlKGV4cHIpXG4gICAgICAgIGlmICh0aGlzLl9hbGxvd1Njb3BlcyAmJiAhdGhpcy5fYWxsb3dTY29wZXNbc2NvcGVdKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFF1ZXJ5QnVpbGRlckVycm9yKFxuICAgICAgICAgICAgYFF1ZXJ5IHNjb3BlICcke3Njb3BlfScgaXMgbm90IGFsbG93ZWQuYFxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9zY29wZXNbc2NvcGVdIHx8PSBncmFwaFxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgLy8gQ2xlYXIgYWxsIHNjb3BlcyBkZWZpbmVkIHdpdGggYHdpdGhTY29wZSgpYCBzdGF0ZW1lbnRzLCBwcmVzZXJ2aW5nIHRoZVxuICAvLyBkZWZhdWx0IHNjb3BlLlxuICBjbGVhcldpdGhTY29wZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fY2xlYXJTY29wZXModHJ1ZSlcbiAgfVxuXG4gIGlnbm9yZVNjb3BlKC4uLnNjb3Blcykge1xuICAgIGlmICghdGhpcy5faWdub3JlU2NvcGVzW1NZTUJPTF9BTExdKSB7XG4gICAgICB0aGlzLl9pZ25vcmVTY29wZXMgPSBzY29wZXMubGVuZ3RoID4gMFxuICAgICAgICA/IHtcbiAgICAgICAgICAuLi50aGlzLl9pZ25vcmVTY29wZXMsXG4gICAgICAgICAgLi4uY3JlYXRlTG9va3VwKHNjb3BlcylcbiAgICAgICAgfVxuICAgICAgICAvLyBFbXB0eSBhcmd1bWVudHMgPSBpZ25vcmUgYWxsIHNjb3Blc1xuICAgICAgICA6IHtcbiAgICAgICAgICBbU1lNQk9MX0FMTF06IHRydWVcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgYXBwbHlTY29wZSguLi5zY29wZXMpIHtcbiAgICAvLyBXaGVuIGRpcmVjdGx5IGFwcGx5aW5nIGEgc2NvcGUsIHN0aWxsIG1lcmdlIGl0IGludG8gYHRoaXMuX3Njb3Blc2AsXG4gICAgLy8gc28gaXQgY2FuIHN0aWxsIGJlIHBhc3NlZCBvbiB0byBmb3JrZWQgY2hpbGQgcXVlcmllcy4gVGhpcyBhbHNvIGhhbmRsZXNcbiAgICAvLyB0aGUgY2hlY2tzIGFnYWluc3QgYF9hbGxvd1Njb3Blc2AuXG4gICAgdGhpcy53aXRoU2NvcGUoLi4uc2NvcGVzKVxuICAgIGZvciAoY29uc3QgZXhwciBvZiBzY29wZXMpIHtcbiAgICAgIGlmIChleHByKSB7XG4gICAgICAgIGNvbnN0IHsgc2NvcGUsIGdyYXBoIH0gPSBnZXRTY29wZShleHByKVxuICAgICAgICB0aGlzLl9hcHBseVNjb3BlKHNjb3BlLCBncmFwaClcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIGFsbG93U2NvcGUoLi4uc2NvcGVzKSB7XG4gICAgdGhpcy5fYWxsb3dTY29wZXMgPSB0aGlzLl9hbGxvd1Njb3BlcyB8fCB7XG4gICAgICBkZWZhdWx0OiB0cnVlIC8vIFRoZSBkZWZhdWx0IHNjb3BlIGlzIGFsd2F5cyBhbGxvd2VkLlxuICAgIH1cbiAgICBmb3IgKGNvbnN0IGV4cHIgb2Ygc2NvcGVzKSB7XG4gICAgICBpZiAoZXhwcikge1xuICAgICAgICBjb25zdCB7IHNjb3BlIH0gPSBnZXRTY29wZShleHByKVxuICAgICAgICB0aGlzLl9hbGxvd1Njb3Blc1tzY29wZV0gPSB0cnVlXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY2xlYXJBbGxvd1Njb3BlKCkge1xuICAgIHRoaXMuX2FsbG93U2NvcGVzID0gbnVsbFxuICB9XG5cbiAgc2NvcGUoLi4uc2NvcGVzKSB7XG4gICAgZGVwcmVjYXRlKGBRdWVyeUJ1aWxkZXIjc2NvcGUoKSBpcyBkZXByZWNhdGVkLiBVc2UgI3dpdGhTY29wZSgpIGluc3RlYWQuYClcblxuICAgIHJldHVybiB0aGlzLmNsZWFyV2l0aFNjb3BlKCkud2l0aFNjb3BlKC4uLnNjb3BlcylcbiAgfVxuXG4gIG1lcmdlU2NvcGUoLi4uc2NvcGVzKSB7XG4gICAgZGVwcmVjYXRlKGBRdWVyeUJ1aWxkZXIjbWVyZ2VTY29wZSgpIGlzIGRlcHJlY2F0ZWQuIFVzZSAjd2l0aFNjb3BlKCkgaW5zdGVhZC5gKVxuXG4gICAgcmV0dXJuIHRoaXMud2l0aFNjb3BlKC4uLnNjb3BlcylcbiAgfVxuXG4gIGNsZWFyU2NvcGUoKSB7XG4gICAgZGVwcmVjYXRlKGBRdWVyeUJ1aWxkZXIjY2xlYXJTY29wZSgpIGlzIGRlcHJlY2F0ZWQuIFVzZSAjY2xlYXJXaXRoU2NvcGUoKSBvciAjaWdub3JlU2NvcGUoKSBpbnN0ZWFkLmApXG5cbiAgICByZXR1cm4gdGhpcy5jbGVhcldpdGhTY29wZSgpXG4gIH1cblxuICBfY2xlYXJTY29wZXMoYWRkRGVmYXVsdCkge1xuICAgIC8vIGBfc2NvcGVzYCBpcyBhbiBvYmplY3Qgd2hlcmUgdGhlIGtleXMgYXJlIHRoZSBzY29wZXMgYW5kIHRoZSB2YWx1ZXNcbiAgICAvLyBpbmRpY2F0ZSBpZiB0aGUgc2NvcGUgc2hvdWxkIGJlIGVhZ2VyLWFwcGxpZWQgb3Igbm90OlxuICAgIHRoaXMuX3Njb3BlcyA9IGFkZERlZmF1bHRcbiAgICAgID8geyBkZWZhdWx0OiB0cnVlIH0gLy8gZWFnZXItYXBwbHkgdGhlIGRlZmF1bHQgc2NvcGVcbiAgICAgIDoge31cbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgX2NvcHlTY29wZXMocXVlcnksIGlzQ2hpbGRRdWVyeSA9IGZhbHNlKSB7XG4gICAgY29uc3QgaXNTYW1lTW9kZWxDbGFzcyA9IHRoaXMubW9kZWxDbGFzcygpID09PSBxdWVyeS5tb2RlbENsYXNzKClcbiAgICAvLyBPbmx5IGNvcHkgYF9hbGxvd1Njb3Blc2AgYW5kIGBfaWdub3JlU2NvcGVzYCBpZiBpdCdzIGZvciB0aGUgc2FtZSBtb2RlbC5cbiAgICBpZiAoaXNTYW1lTW9kZWxDbGFzcykge1xuICAgICAgdGhpcy5fYWxsb3dTY29wZXMgPSBxdWVyeS5fYWxsb3dTY29wZXMgPyB7IC4uLnF1ZXJ5Ll9hbGxvd1Njb3BlcyB9IDogbnVsbFxuICAgICAgdGhpcy5faWdub3JlU2NvcGVzID0geyAuLi5xdWVyeS5faWdub3JlU2NvcGVzIH1cbiAgICB9XG4gICAgLy8gSWYgaGUgdGFyZ2V0IGlzIGEgY2hpbGQgcXVlcnkgb2YgYSBncmFwaCBxdWVyeSwgY29weSBhbGwgc2NvcGVzLCBncmFwaFxuICAgIC8vIGFuZCBub24tZ3JhcGguIElmIGl0IGlzIGEgY2hpbGQgcXVlcnkgb2YgYSByZWxhdGVkIG9yIGVhZ2VyIHF1ZXJ5LFxuICAgIC8vIGNvcHkgb25seSB0aGUgZ3JhcGggc2NvcGVzLlxuICAgIGNvbnN0IGNvcHlBbGxTY29wZXMgPVxuICAgICAgaXNTYW1lTW9kZWxDbGFzcyAmJiBpc0NoaWxkUXVlcnkgJiYgcXVlcnkuaGFzKC9HcmFwaEFuZEZldGNoJC8pXG4gICAgdGhpcy5fc2NvcGVzID0gdGhpcy5fZmlsdGVyU2NvcGVzKHF1ZXJ5Ll9zY29wZXMsIChzY29wZSwgZ3JhcGgpID0+XG4gICAgICBjb3B5QWxsU2NvcGVzIHx8IGdyYXBoKVxuICB9XG5cbiAgX2ZpbHRlclNjb3BlcyhzY29wZXMsIGNhbGxiYWNrKSB7XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHNjb3BlcykucmVkdWNlKFxuICAgICAgKHNjb3BlcywgW3Njb3BlLCBncmFwaF0pID0+IHtcbiAgICAgICAgaWYgKGNhbGxiYWNrKHNjb3BlLCBncmFwaCkpIHtcbiAgICAgICAgICBzY29wZXNbc2NvcGVdID0gZ3JhcGhcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2NvcGVzXG4gICAgICB9LFxuICAgICAge31cbiAgICApXG4gIH1cblxuICBfYXBwbHlTY29wZShzY29wZSwgZ3JhcGgpIHtcbiAgICBpZiAoIXRoaXMuX2lnbm9yZVNjb3Blc1tTWU1CT0xfQUxMXSAmJiAhdGhpcy5faWdub3JlU2NvcGVzW3Njb3BlXSkge1xuICAgICAgLy8gUHJldmVudCBtdWx0aXBsZSBhcHBsaWNhdGlvbiBvZiBzY29wZXMuIFRoaXMgY2FuIGVhc2lseSBvY2N1clxuICAgICAgLy8gd2l0aCB0aGUgbmVzdGluZyBhbmQgZWFnZXItYXBwbGljYXRpb24gb2YgZ3JhcGgtc2NvcGVzLCBzZWUgYmVsb3cuXG4gICAgICBpZiAoIXRoaXMuX2FwcGxpZWRTY29wZXNbc2NvcGVdKSB7XG4gICAgICAgIC8vIE9ubHkgYXBwbHkgZ3JhcGgtc2NvcGVzIHRoYXQgYXJlIGFjdHVhbGx5IGRlZmluZWQgb24gdGhlIG1vZGVsOlxuICAgICAgICBjb25zdCBmdW5jID0gdGhpcy5tb2RlbENsYXNzKCkuZ2V0U2NvcGUoc2NvcGUpXG4gICAgICAgIGlmIChmdW5jKSB7XG4gICAgICAgICAgZnVuYy5jYWxsKHRoaXMsIHRoaXMpXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fYXBwbGllZFNjb3Blc1tzY29wZV0gPSB0cnVlXG4gICAgICB9XG4gICAgICBpZiAoZ3JhcGgpIHtcbiAgICAgICAgLy8gQWxzbyBiYWtlIHRoZSBzY29wZSBpbnRvIGFueSBncmFwaCBleHByZXNzaW9uIHRoYXQgbWF5IGhhdmUgYmVlblxuICAgICAgICAvLyBzZXQgYWxyZWFkeSB1c2luZyBgd2l0aEdyYXBoKClgICYgY28uXG4gICAgICAgIGNvbnN0IGV4cHIgPSB0aGlzLmdyYXBoRXhwcmVzc2lvbk9iamVjdCgpXG4gICAgICAgIGlmIChleHByKSB7XG4gICAgICAgICAgLy8gQWRkIGEgbmV3IG1vZGlmaWVyIHRvIHRoZSBleGlzdGluZyBncmFwaCBleHByZXNzaW9uIHRoYXRcbiAgICAgICAgICAvLyByZWN1cnNpdmVseSBhcHBsaWVzIHRoZSBncmFwaC1zY29wZSB0byB0aGUgcmVzdWx0aW5nIHF1ZXJpZXMuXG4gICAgICAgICAgLy8gVGhpcyBldmVuIHdvcmtzIGlmIG5lc3RlZCBzY29wZXMgZXhwYW5kIHRoZSBncmFwaCBleHByZXNzaW9uLFxuICAgICAgICAgIC8vIGJlY2F1c2UgaXQgcmUtYXBwbGllcyBpdHNlbGYgdG8gdGhlIHJlc3VsdC5cbiAgICAgICAgICBjb25zdCBuYW1lID0gYF4ke3Njb3BlfWBcbiAgICAgICAgICBjb25zdCBtb2RpZmllcnMgPSB7XG4gICAgICAgICAgICBbbmFtZV06IHF1ZXJ5ID0+IHF1ZXJ5Ll9hcHBseVNjb3BlKHNjb3BlLCBncmFwaClcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy53aXRoR3JhcGgoXG4gICAgICAgICAgICBhZGRHcmFwaFNjb3BlKHRoaXMubW9kZWxDbGFzcygpLCBleHByLCBbbmFtZV0sIG1vZGlmaWVycywgdHJ1ZSlcbiAgICAgICAgICApLm1vZGlmaWVycyhtb2RpZmllcnMpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhcHBseUZpbHRlcihuYW1lLCAuLi5hcmdzKSB7XG4gICAgaWYgKHRoaXMuX2FsbG93RmlsdGVycyAmJiAhdGhpcy5fYWxsb3dGaWx0ZXJzW25hbWVdKSB7XG4gICAgICB0aHJvdyBuZXcgUXVlcnlCdWlsZGVyRXJyb3IoYFF1ZXJ5IGZpbHRlciAnJHtuYW1lfScgaXMgbm90IGFsbG93ZWQuYClcbiAgICB9XG4gICAgY29uc3QgZmlsdGVyID0gdGhpcy5tb2RlbENsYXNzKCkuZGVmaW5pdGlvbi5maWx0ZXJzW25hbWVdXG4gICAgaWYgKCFmaWx0ZXIpIHtcbiAgICAgIHRocm93IG5ldyBRdWVyeUJ1aWxkZXJFcnJvcihgUXVlcnkgZmlsdGVyICcke25hbWV9JyBpcyBub3QgZGVmaW5lZC5gKVxuICAgIH1cbiAgICAvLyBOT1RFOiBGaWx0ZXJzIGFyZSBhdXRvbWF0aWNhbGx5IGNvbWJpbmUgd2l0aCBhbmQgb3BlcmF0aW9ucyFcbiAgICByZXR1cm4gdGhpcy5hbmRXaGVyZShxdWVyeSA9PiBmaWx0ZXIocXVlcnksIC4uLmFyZ3MpKVxuICB9XG5cbiAgYWxsb3dGaWx0ZXIoLi4uZmlsdGVycykge1xuICAgIHRoaXMuX2FsbG93RmlsdGVycyA9IHRoaXMuX2FsbG93RmlsdGVycyB8fCB7fVxuICAgIGZvciAoY29uc3QgZmlsdGVyIG9mIGZpbHRlcnMpIHtcbiAgICAgIHRoaXMuX2FsbG93RmlsdGVyc1tmaWx0ZXJdID0gdHJ1ZVxuICAgIH1cbiAgfVxuXG4gIC8vIEEgYWxnb3JpdGhtLWFnbm9zdGljIHZlcnNpb24gb2YgYHdpdGhHcmFwaEZldGNoZWQoKWAgLyBgd2l0aEdyYXBoSm9pbmVkKClgLFxuICAvLyB3aXRoIHRoZSBhbGdvcml0aG0gc3BlY2lmaWFibGUgaW4gdGhlIG9wdGlvbnMuIEFkZGl0aW9uYWxseSwgaXQgaGFuZGxlc1xuICAvLyBgX2lnbm9yZUdyYXBoYCBhbmQgYF9ncmFwaEFsZ29yaXRobWA6XG4gIHdpdGhHcmFwaChleHByLCBvcHRpb25zID0ge30pIHtcbiAgICAvLyBUbyBtYWtlIG1lcmdpbmcgZWFzaWVyLCBrZWVwIHRoZSBjdXJyZW50IGFsZ29yaXRobSBpZiBub25lIGlzIHNwZWNpZmllZDpcbiAgICBjb25zdCB7IGFsZ29yaXRobSA9IHRoaXMuX2dyYXBoQWxnb3JpdGhtIH0gPSBvcHRpb25zXG4gICAgY29uc3QgbWV0aG9kID0ge1xuICAgICAgZmV0Y2g6ICd3aXRoR3JhcGhGZXRjaGVkJyxcbiAgICAgIGpvaW46ICd3aXRoR3JhcGhKb2luZWQnXG4gICAgfVthbGdvcml0aG1dXG4gICAgaWYgKCFtZXRob2QpIHtcbiAgICAgIHRocm93IG5ldyBRdWVyeUJ1aWxkZXJFcnJvcihcbiAgICAgICAgYEdyYXBoIGFsZ29yaXRobSAnJHthbGdvcml0aG19JyBpcyB1bnN1cHBvcnRlZC5gXG4gICAgICApXG4gICAgfVxuICAgIGlmICghdGhpcy5faWdub3JlR3JhcGgpIHtcbiAgICAgIHRoaXMuX2dyYXBoQWxnb3JpdGhtID0gYWxnb3JpdGhtXG4gICAgICBzdXBlclttZXRob2RdKGV4cHIsIG9wdGlvbnMpXG4gICAgfVxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICAvLyBAb3ZlcnJpZGVcbiAgd2l0aEdyYXBoRmV0Y2hlZChleHByLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIHRoaXMud2l0aEdyYXBoKGV4cHIsIHsgLi4ub3B0aW9ucywgYWxnb3JpdGhtOiAnZmV0Y2gnIH0pXG4gIH1cblxuICAvLyBAb3ZlcnJpZGVcbiAgd2l0aEdyYXBoSm9pbmVkKGV4cHIsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gdGhpcy53aXRoR3JhcGgoZXhwciwgeyAuLi5vcHRpb25zLCBhbGdvcml0aG06ICdqb2luJyB9KVxuICB9XG5cbiAgdG9TUUwoKSB7XG4gICAgcmV0dXJuIHRoaXMudG9LbmV4UXVlcnkoKS50b1NRTCgpXG4gIH1cblxuICByYXcoLi4uYXJncykge1xuICAgIC8vIFRPRE86IEZpZ3VyZSBvdXQgYSB3YXkgdG8gc3VwcG9ydCBgb2JqZWN0LnJhdygpYCBzeW50YXggYW5kIHJldHVybiBhIGtuZXhcbiAgICAvLyByYXcgZXhwcmVzc2lvbiB3aXRob3V0IGFjY2Vzc2luZyB0aGUgcHJpdmF0ZSBgUmF3QnVpbGRlci50b0tuZXhSYXcoKWA6XG4gICAgcmV0dXJuIG9iamVjdGlvbi5yYXcoLi4uYXJncykudG9LbmV4UmF3KHRoaXMpXG4gIH1cblxuICBzZWxlY3RSYXcoLi4uYXJncykge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdChvYmplY3Rpb24ucmF3KC4uLmFyZ3MpKVxuICB9XG5cbiAgLy8gTm9uLWRlcHJlY2F0ZWQgdmVyc2lvbiBvZiBPYmplY3Rpb24ncyBgcGx1Y2soKWBcbiAgcGx1Y2soa2V5KSB7XG4gICAgcmV0dXJuIHRoaXMucnVuQWZ0ZXIocmVzdWx0ID0+XG4gICAgICBpc0FycmF5KHJlc3VsdClcbiAgICAgICAgPyByZXN1bHQubWFwKGl0ID0+IGl0Py5ba2V5XSlcbiAgICAgICAgOiBpc09iamVjdChyZXN1bHQpXG4gICAgICAgICAgPyByZXN1bHRba2V5XVxuICAgICAgICAgIDogcmVzdWx0XG4gICAgKVxuICB9XG5cbiAgbG9hZERhdGFQYXRoKGRhdGFQYXRoLCBvcHRpb25zKSB7XG4gICAgY29uc3QgcGFyc2VkRGF0YVBhdGggPSBwYXJzZURhdGFQYXRoKGRhdGFQYXRoKVxuXG4gICAgY29uc3Qge1xuICAgICAgcHJvcGVydHksXG4gICAgICBleHByZXNzaW9uLFxuICAgICAgbmVzdGVkRGF0YVBhdGgsXG4gICAgICBuYW1lLFxuICAgICAgaW5kZXhcbiAgICB9ID0gdGhpcy5tb2RlbENsYXNzKCkuZ2V0UHJvcGVydHlPclJlbGF0aW9uQXREYXRhUGF0aChwYXJzZWREYXRhUGF0aClcblxuICAgIGlmIChuZXN0ZWREYXRhUGF0aCkge1xuICAgICAgLy8gT25jZSBhIEpTT04gZGF0YSB0eXBlIGlzIHJlYWNoZWQsIGV2ZW4gaWYgaXQncyBub3QgYXQgdGhlIGVuZCBvZiB0aGVcbiAgICAgIC8vIHByb3ZpZGVkIHBhdGgsIGxvYWQgaXQgYW5kIGFzc3VtZSB3ZSdyZSBkb25lIHdpdGggdGhlIGxvYWRpbmcgcGFydC5cbiAgICAgIGlmICghKHByb3BlcnR5ICYmIFsnb2JqZWN0JywgJ2FycmF5J10uaW5jbHVkZXMocHJvcGVydHkudHlwZSkpKSB7XG4gICAgICAgIHRocm93IG5ldyBRdWVyeUJ1aWxkZXJFcnJvcihcbiAgICAgICAgICBgVW5hYmxlIHRvIGxvYWQgZnVsbCBkYXRhLXBhdGggJyR7XG4gICAgICAgICAgICBkYXRhUGF0aFxuICAgICAgICAgIH0nIChVbm1hdGNoZWQ6ICcke1xuICAgICAgICAgICAgbmVzdGVkRGF0YVBhdGhcbiAgICAgICAgICB9JykuYFxuICAgICAgICApXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIHRoZSBzcGVjaWFsIGNhc2Ugb2Ygcm9vdC1sZXZlbCBwcm9wZXJ0eSBzZXBhcmF0ZWx5LFxuICAgIC8vIGJlY2F1c2UgYHdpdGhHcmFwaCgnKCNwcm9wZXJ0eU5hbWUpJylgIGlzIG5vdCBzdXBwb3J0ZWQuXG4gICAgaWYgKHByb3BlcnR5ICYmIGluZGV4ID09PSAwKSB7XG4gICAgICB0aGlzLnNlbGVjdChuYW1lKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLndpdGhHcmFwaChleHByZXNzaW9uLCBvcHRpb25zKVxuICAgIH1cbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgLy8gQG92ZXJyaWRlXG4gIHRydW5jYXRlKHsgcmVzdGFydCA9IHRydWUsIGNhc2NhZGUgPSBmYWxzZSB9ID0ge30pIHtcbiAgICBpZiAodGhpcy5pc1Bvc3RncmVTUUwoKSkge1xuICAgICAgLy8gU3VwcG9ydCBgcmVzdGFydGAgYW5kIGBjYXNjYWRlYCBpbiBQb3N0Z3JlU1FMIHRydW5jYXRlIHF1ZXJpZXMuXG4gICAgICByZXR1cm4gdGhpcy5yYXcoXG4gICAgICAgIGB0cnVuY2F0ZSB0YWJsZSA/PyR7XG4gICAgICAgICAgcmVzdGFydCA/ICcgcmVzdGFydCBpZGVudGl0eScgOiAnJ30ke1xuICAgICAgICAgIGNhc2NhZGUgPyAnIGNhc2NhZGUnIDogJydcbiAgICAgICAgfWAsXG4gICAgICAgIHRoaXMubW9kZWxDbGFzcygpLnRhYmxlTmFtZVxuICAgICAgKVxuICAgIH1cbiAgICByZXR1cm4gc3VwZXIudHJ1bmNhdGUoKVxuICB9XG5cbiAgLy8gQG92ZXJyaWRlXG4gIGluc2VydChkYXRhKSB7XG4gICAgLy8gT25seSBQb3N0Z3JlU1FMIGlzIGFibGUgdG8gaW5zZXJ0IG11bHRpcGxlIGVudHJpZXMgYXQgb25jZSBpdCBzZWVtcyxcbiAgICAvLyBhbGwgb3RoZXJzIGhhdmUgdG8gZmFsbCBiYWNrIG9uIGluc2VydEdyYXBoKCkgdG8gZG8gc28gZm9yIG5vdzpcbiAgICByZXR1cm4gIXRoaXMuaXNQb3N0Z3JlU1FMKCkgJiYgaXNBcnJheShkYXRhKSAmJiBkYXRhLmxlbmd0aCA+IDFcbiAgICAgID8gdGhpcy5pbnNlcnRHcmFwaChkYXRhKVxuICAgICAgOiBzdXBlci5pbnNlcnQoZGF0YSlcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9WaW5jaXQvb2JqZWN0aW9uLmpzL2lzc3Vlcy8xMDEjaXNzdWVjb21tZW50LTIwMDM2MzY2N1xuICB1cHNlcnQoZGF0YSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgbGV0IG1haW5RdWVyeVxuICAgIHJldHVybiB0aGlzXG4gICAgICAucnVuQmVmb3JlKChyZXN1bHQsIGJ1aWxkZXIpID0+IHtcbiAgICAgICAgaWYgKCFidWlsZGVyLmNvbnRleHQoKS5pc01haW5RdWVyeSkge1xuICAgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQgdGhlIGJ1aWxkZXIgc2hvdWxkIG9ubHkgY29udGFpbiBhIGJ1bmNoIG9mIGB3aGVyZSpgXG4gICAgICAgICAgLy8gb3BlcmF0aW9ucy4gU3RvcmUgdGhpcyBxdWVyeSBmb3IgbGF0ZXIgdXNlIGluIHJ1bkFmdGVyKCkuIEFsc28gbWFya1xuICAgICAgICAgIC8vIHRoZSBxdWVyeSB3aXRoIGBpc01haW5RdWVyeTogdHJ1ZWAgc28gd2UgY2FuIHNraXAgYWxsIHRoaXMgd2hlblxuICAgICAgICAgIC8vIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZvciB0aGUgYG1haW5RdWVyeWAuXG4gICAgICAgICAgbWFpblF1ZXJ5ID0gYnVpbGRlci5jbG9uZSgpLmNvbnRleHQoeyBpc01haW5RdWVyeTogdHJ1ZSB9KVxuICAgICAgICAgIC8vIENhbGwgdXBkYXRlKCkgb24gdGhlIG9yaWdpbmFsIHF1ZXJ5LCB0dXJuaW5nIGl0IGludG8gYW4gdXBkYXRlLlxuICAgICAgICAgIGJ1aWxkZXJbb3B0aW9ucy51cGRhdGUgPyAndXBkYXRlJyA6ICdwYXRjaCddKGRhdGEpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgICAgfSlcbiAgICAgIC5ydW5BZnRlcigocmVzdWx0LCBidWlsZGVyKSA9PiB7XG4gICAgICAgIGlmICghYnVpbGRlci5jb250ZXh0KCkuaXNNYWluUXVlcnkpIHtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0ID09PSAwXG4gICAgICAgICAgICA/IG1haW5RdWVyeVtvcHRpb25zLmZldGNoID8gJ2luc2VydEFuZEZldGNoJyA6ICdpbnNlcnQnXShkYXRhKVxuICAgICAgICAgICAgLy8gV2UgY2FuIHVzZSB0aGUgYG1haW5RdWVyeWAgd2Ugc2F2ZWQgaW4gcnVuQmVmb3JlKCkgdG8gZmV0Y2ggdGhlXG4gICAgICAgICAgICAvLyBpbnNlcnRlZCByZXN1bHRzLiBJdCBpcyBub3Rld29ydGh5IHRoYXQgdGhpcyBxdWVyeSB3aWxsIHJldHVyblxuICAgICAgICAgICAgLy8gdGhlIHdyb25nIHJlc3VsdHMgaWYgdGhlIHVwZGF0ZSBjaGFuZ2VkIGFueSBvZiB0aGUgY29sdW1ucyB0aGVcbiAgICAgICAgICAgIC8vIHdoZXJlIG9wZXJhdGVzIHdpdGguIFRoaXMgYWxzbyByZXR1cm5zIGFsbCB1cGRhdGVkIG1vZGVscy5cbiAgICAgICAgICAgIDogbWFpblF1ZXJ5LmZpcnN0KClcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgICB9KVxuICB9XG5cbiAgZmluZChxdWVyeSwgYWxsb3dQYXJhbSkge1xuICAgIGlmICghcXVlcnkpIHJldHVybiB0aGlzXG4gICAgY29uc3QgYWxsb3dlZCA9ICFhbGxvd1BhcmFtXG4gICAgICA/IFF1ZXJ5UGFyYW1ldGVycy5hbGxvd2VkKClcbiAgICAgIC8vIElmIGl0J3MgYWxyZWFkeSBhIGxvb2t1cCBvYmplY3QganVzdCB1c2UgaXQsIG90aGVyd2lzZSBjb252ZXJ0IGl0OlxuICAgICAgOiBpc1BsYWluT2JqZWN0KGFsbG93UGFyYW0pID8gYWxsb3dQYXJhbSA6IGNyZWF0ZUxvb2t1cChhbGxvd1BhcmFtKVxuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHF1ZXJ5KSkge1xuICAgICAgLy8gU3VwcG9ydCBhcnJheSBub3RhdGlvbiBmb3IgbXVsdGlwbGUgcGFyYW1ldGVycywgYXMgc2VudCBieSBheGlvczpcbiAgICAgIGNvbnN0IHBhcmFtID0ga2V5LmVuZHNXaXRoKCdbXScpID8ga2V5LnNsaWNlKDAsIC0yKSA6IGtleVxuICAgICAgaWYgKCFhbGxvd2VkW3BhcmFtXSkge1xuICAgICAgICB0aHJvdyBuZXcgUXVlcnlCdWlsZGVyRXJyb3IoYFF1ZXJ5IHBhcmFtZXRlciAnJHtrZXl9JyBpcyBub3QgYWxsb3dlZC5gKVxuICAgICAgfVxuICAgICAgY29uc3QgcGFyYW1IYW5kbGVyID0gUXVlcnlQYXJhbWV0ZXJzLmdldChwYXJhbSlcbiAgICAgIGlmICghcGFyYW1IYW5kbGVyKSB7XG4gICAgICAgIHRocm93IG5ldyBRdWVyeUJ1aWxkZXJFcnJvcihcbiAgICAgICAgICBgSW52YWxpZCBxdWVyeSBwYXJhbWV0ZXIgJyR7cGFyYW19JyBpbiAnJHtrZXl9PSR7dmFsdWV9Jy5gKVxuICAgICAgfVxuICAgICAgcGFyYW1IYW5kbGVyKHRoaXMsIGtleSwgdmFsdWUpXG4gICAgfVxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICAvLyBAb3ZlcnJpZGVcbiAgZmluZEJ5SWQoaWQpIHtcbiAgICAvLyBSZW1lbWJlciBpZCBzbyBNb2RlbC5jcmVhdGVOb3RGb3VuZEVycm9yKCkgY2FuIHJlcG9ydCBpdDpcbiAgICB0aGlzLmNvbnRleHQoeyBieUlkOiBpZCB9KVxuICAgIHJldHVybiBzdXBlci5maW5kQnlJZChpZClcbiAgfVxuXG4gIC8vIEBvdmVycmlkZVxuICBwYXRjaEFuZEZldGNoQnlJZChpZCwgZGF0YSkge1xuICAgIHRoaXMuY29udGV4dCh7IGJ5SWQ6IGlkIH0pXG4gICAgcmV0dXJuIHN1cGVyLnBhdGNoQW5kRmV0Y2hCeUlkKGlkLCBkYXRhKVxuICB9XG5cbiAgLy8gQG92ZXJyaWRlXG4gIHVwZGF0ZUFuZEZldGNoQnlJZChpZCwgZGF0YSkge1xuICAgIHRoaXMuY29udGV4dCh7IGJ5SWQ6IGlkIH0pXG4gICAgcmV0dXJuIHN1cGVyLnVwZGF0ZUFuZEZldGNoQnlJZChpZCwgZGF0YSlcbiAgfVxuXG4gIC8vIEBvdmVycmlkZVxuICBkZWxldGVCeUlkKGlkKSB7XG4gICAgdGhpcy5jb250ZXh0KHsgYnlJZDogaWQgfSlcbiAgICByZXR1cm4gc3VwZXIuZGVsZXRlQnlJZChpZClcbiAgfVxuXG4gIHBhdGNoQnlJZChpZCwgZGF0YSkge1xuICAgIHJldHVybiB0aGlzLmZpbmRCeUlkKGlkKS5wYXRjaChkYXRhKVxuICB9XG5cbiAgdXBkYXRlQnlJZChpZCwgZGF0YSkge1xuICAgIHJldHVybiB0aGlzLmZpbmRCeUlkKGlkKS51cGRhdGUoZGF0YSlcbiAgfVxuXG4gIC8vIEV4dGVuZCBPYmplY3Rpb24ncyBgcGF0Y2hBbmRGZXRjaCgpYCBhbmQgYHVwZGF0ZUFuZEZldGNoKClgIHRvIGFsc28gc3VwcG9ydFxuICAvLyBhcnJheXMgb2YgbW9kZWxzLCBub3Qgb25seSBzaW5nbGUgaW5zdGFuY2VzLlxuICAvLyBTZWU6IGh0dHBzOi8vZ2l0dGVyLmltL1ZpbmNpdC9vYmplY3Rpb24uanM/YXQ9NWY5OTRhNTkwMGEwZjMzNjlkMzY2ZDZmXG5cbiAgcGF0Y2hBbmRGZXRjaChkYXRhKSB7XG4gICAgcmV0dXJuIGlzQXJyYXkoZGF0YSlcbiAgICAgID8gdGhpcy5fdXBzZXJ0QW5kRmV0Y2goZGF0YSlcbiAgICAgIDogc3VwZXIucGF0Y2hBbmRGZXRjaChkYXRhKVxuICB9XG5cbiAgdXBkYXRlQW5kRmV0Y2goZGF0YSkge1xuICAgIHJldHVybiBpc0FycmF5KGRhdGEpXG4gICAgICA/IHRoaXMuX3Vwc2VydEFuZEZldGNoKGRhdGEsIHsgdXBkYXRlOiB0cnVlIH0pXG4gICAgICA6IHN1cGVyLnVwZGF0ZUFuZEZldGNoKGRhdGEpXG4gIH1cblxuICB1cHNlcnRBbmRGZXRjaChkYXRhKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Vwc2VydEFuZEZldGNoKGRhdGEsIHtcbiAgICAgIC8vIEluc2VydCBtaXNzaW5nIG5vZGVzIG9ubHkgYXQgcm9vdCBieSBhbGxvd2luZyBgaW5zZXJ0TWlzc2luZ2AsXG4gICAgICAvLyBidXQgc2V0IGBub0luc2VydGAgZm9yIGFsbCByZWxhdGlvbnM6XG4gICAgICBpbnNlcnRNaXNzaW5nOiB0cnVlLFxuICAgICAgbm9JbnNlcnQ6IHRoaXMubW9kZWxDbGFzcygpLmdldFJlbGF0aW9uTmFtZXMoKVxuICAgIH0pXG4gIH1cblxuICBfdXBzZXJ0QW5kRmV0Y2goZGF0YSwgb3B0aW9ucykge1xuICAgIHJldHVybiB0aGlzLnVwc2VydEdyYXBoQW5kRmV0Y2goZGF0YSwge1xuICAgICAgZmV0Y2hTdHJhdGVneTogJ09ubHlOZWVkZWQnLFxuICAgICAgbm9JbnNldDogdHJ1ZSxcbiAgICAgIG5vRGVsZXRlOiB0cnVlLFxuICAgICAgbm9SZWxhdGU6IHRydWUsXG4gICAgICBub1VucmVsYXRlOiB0cnVlLFxuICAgICAgLi4ub3B0aW9uc1xuICAgIH0pXG4gIH1cblxuICBpbnNlcnREaXRvR3JhcGgoZGF0YSwgb3B0aW9ucykge1xuICAgIHJldHVybiB0aGlzLl9oYW5kbGVEaXRvR3JhcGgoJ2luc2VydEdyYXBoJyxcbiAgICAgIGRhdGEsIG9wdGlvbnMsIGluc2VydERpdG9HcmFwaE9wdGlvbnMpXG4gIH1cblxuICBpbnNlcnREaXRvR3JhcGhBbmRGZXRjaChkYXRhLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIHRoaXMuX2hhbmRsZURpdG9HcmFwaCgnaW5zZXJ0R3JhcGhBbmRGZXRjaCcsXG4gICAgICBkYXRhLCBvcHRpb25zLCBpbnNlcnREaXRvR3JhcGhPcHRpb25zKVxuICB9XG5cbiAgdXBzZXJ0RGl0b0dyYXBoKGRhdGEsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gdGhpcy5faGFuZGxlRGl0b0dyYXBoKCd1cHNlcnRHcmFwaCcsXG4gICAgICBkYXRhLCBvcHRpb25zLCB1cHNlcnREaXRvR3JhcGhPcHRpb25zKVxuICB9XG5cbiAgdXBzZXJ0RGl0b0dyYXBoQW5kRmV0Y2goZGF0YSwgb3B0aW9ucykge1xuICAgIHJldHVybiB0aGlzLl9oYW5kbGVEaXRvR3JhcGgoJ3Vwc2VydEdyYXBoQW5kRmV0Y2gnLFxuICAgICAgZGF0YSwgb3B0aW9ucywgdXBzZXJ0RGl0b0dyYXBoT3B0aW9ucylcbiAgfVxuXG4gIHBhdGNoRGl0b0dyYXBoKGRhdGEsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gdGhpcy5faGFuZGxlRGl0b0dyYXBoKCd1cHNlcnRHcmFwaCcsXG4gICAgICBkYXRhLCBvcHRpb25zLCBwYXRjaERpdG9HcmFwaE9wdGlvbnMpXG4gIH1cblxuICBwYXRjaERpdG9HcmFwaEFuZEZldGNoKGRhdGEsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gdGhpcy5faGFuZGxlRGl0b0dyYXBoKCd1cHNlcnRHcmFwaEFuZEZldGNoJyxcbiAgICAgIGRhdGEsIG9wdGlvbnMsIHBhdGNoRGl0b0dyYXBoT3B0aW9ucylcbiAgfVxuXG4gIHVwZGF0ZURpdG9HcmFwaChkYXRhLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIHRoaXMuX2hhbmRsZURpdG9HcmFwaCgndXBzZXJ0R3JhcGgnLFxuICAgICAgZGF0YSwgb3B0aW9ucywgdXBkYXRlRGl0b0dyYXBoT3B0aW9ucylcbiAgfVxuXG4gIHVwZGF0ZURpdG9HcmFwaEFuZEZldGNoKGRhdGEsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gdGhpcy5faGFuZGxlRGl0b0dyYXBoKCd1cHNlcnRHcmFwaEFuZEZldGNoJyxcbiAgICAgIGRhdGEsIG9wdGlvbnMsIHVwZGF0ZURpdG9HcmFwaE9wdGlvbnMpXG4gIH1cblxuICB1cHNlcnREaXRvR3JhcGhBbmRGZXRjaEJ5SWQoaWQsIGRhdGEsIG9wdGlvbnMpIHtcbiAgICB0aGlzLmNvbnRleHQoeyBieUlkOiBpZCB9KVxuICAgIHJldHVybiB0aGlzLnVwc2VydERpdG9HcmFwaEFuZEZldGNoKHtcbiAgICAgIC4uLmRhdGEsXG4gICAgICAuLi50aGlzLm1vZGVsQ2xhc3MoKS5nZXRSZWZlcmVuY2UoaWQpXG4gICAgfSwgb3B0aW9ucylcbiAgfVxuXG4gIHBhdGNoRGl0b0dyYXBoQW5kRmV0Y2hCeUlkKGlkLCBkYXRhLCBvcHRpb25zKSB7XG4gICAgdGhpcy5jb250ZXh0KHsgYnlJZDogaWQgfSlcbiAgICByZXR1cm4gdGhpcy5wYXRjaERpdG9HcmFwaEFuZEZldGNoKHtcbiAgICAgIC4uLmRhdGEsXG4gICAgICAuLi50aGlzLm1vZGVsQ2xhc3MoKS5nZXRSZWZlcmVuY2UoaWQpXG4gICAgfSwgb3B0aW9ucylcbiAgfVxuXG4gIHVwZGF0ZURpdG9HcmFwaEFuZEZldGNoQnlJZChpZCwgZGF0YSwgb3B0aW9ucykge1xuICAgIHRoaXMuY29udGV4dCh7IGJ5SWQ6IGlkIH0pXG4gICAgcmV0dXJuIHRoaXMudXBkYXRlRGl0b0dyYXBoQW5kRmV0Y2goe1xuICAgICAgLi4uZGF0YSxcbiAgICAgIC4uLnRoaXMubW9kZWxDbGFzcygpLmdldFJlZmVyZW5jZShpZClcbiAgICB9LCBvcHRpb25zKVxuICB9XG5cbiAgX2hhbmRsZURpdG9HcmFwaChtZXRob2QsIGRhdGEsIG9wdGlvbnMsIGRlZmF1bHRPcHRpb25zKSB7XG4gICAgY29uc3QgaGFuZGxlR3JhcGggPSBkYXRhID0+IHtcbiAgICAgIGNvbnN0IGdyYXBoUHJvY2Vzc29yID0gbmV3IERpdG9HcmFwaFByb2Nlc3NvcihcbiAgICAgICAgdGhpcy5tb2RlbENsYXNzKCksXG4gICAgICAgIGRhdGEsXG4gICAgICAgIHtcbiAgICAgICAgICAuLi5kZWZhdWx0T3B0aW9ucyxcbiAgICAgICAgICAuLi5vcHRpb25zXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBwcm9jZXNzT3ZlcnJpZGVzOiB0cnVlLFxuICAgICAgICAgIHByb2Nlc3NSZWxhdGVzOiB0cnVlXG4gICAgICAgIH1cbiAgICAgIClcbiAgICAgIHRoaXNbbWV0aG9kXShncmFwaFByb2Nlc3Nvci5nZXREYXRhKCksIGdyYXBoUHJvY2Vzc29yLmdldE9wdGlvbnMoKSlcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucz8uY3ljbGljICYmIG1ldGhvZC5zdGFydHNXaXRoKCd1cHNlcnQnKSkge1xuICAgICAgLy8gYF91cHNlcnRDeWNsaWNEaXRvR3JhcGhBbmRGZXRjaCgpYCBuZWVkcyB0byBydW4gYXN5bmNocm9ub3VzbHksXG4gICAgICAvLyBidXQgd2UgY2FuJ3QgZG8gc28gaGVyZSBhbmQgYHJ1bkJlZm9yZSgpYCBleGVjdXRlcyB0b28gbGF0ZSxcbiAgICAgIC8vIHNvIHVzZSBgX2V4ZWN1dGVGaXJzdCgpYCB0byB3b3JrIGFyb3VuZCBpdC5cbiAgICAgIHRoaXMuX2V4ZWN1dGVGaXJzdCA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgdGhpcy5fZXhlY3V0ZUZpcnN0ID0gbnVsbFxuICAgICAgICBoYW5kbGVHcmFwaChcbiAgICAgICAgICBhd2FpdCB0aGlzLmNsb25lKCkuX3Vwc2VydEN5Y2xpY0RpdG9HcmFwaEFuZEZldGNoKGRhdGEsIG9wdGlvbnMpXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaGFuZGxlR3JhcGgoZGF0YSlcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgYXN5bmMgX3Vwc2VydEN5Y2xpY0RpdG9HcmFwaEFuZEZldGNoKGRhdGEsIG9wdGlvbnMpIHtcbiAgICAvLyBUT0RPOiBUaGlzIGlzIHBhcnQgb2YgYSB3b3JrYXJvdW5kIGZvciB0aGUgZm9sbG93aW5nIE9iamVjdGlvbi5qcyBpc3N1ZS5cbiAgICAvLyBSZXBsYWNlIHdpdGggYSBub3JtYWwgYHVwc2VydEdyYXBoQW5kRmV0Y2goKWAgb25jZSBpdCBpcyBmaXhlZDpcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vVmluY2l0L29iamVjdGlvbi5qcy9pc3N1ZXMvMTQ4MlxuXG4gICAgLy8gRmlyc3QsIGNvbGxlY3QgYWxsICNpZCBpZGVudGlmaWVycyBhbmQgI3JlZiByZWZlcmVuY2VzIGluIHRoZSBncmFwaCxcbiAgICAvLyBhbG9uZyB3aXRoIHRoZWlyIGRhdGEgcGF0aHMuXG4gICAgY29uc3QgaWRlbnRpZmllcnMgPSB7fVxuICAgIGNvbnN0IHJlZmVyZW5jZXMgPSB7fVxuXG4gICAgY29uc3QgeyB1aWRQcm9wLCB1aWRSZWZQcm9wIH0gPSB0aGlzLm1vZGVsQ2xhc3MoKVxuXG4gICAgd2Fsa0dyYXBoKGRhdGEsICh2YWx1ZSwgcGF0aCkgPT4ge1xuICAgICAgaWYgKGlzT2JqZWN0KHZhbHVlKSkge1xuICAgICAgICBjb25zdCB7IFt1aWRQcm9wXTogaWQsIFt1aWRSZWZQcm9wXTogcmVmIH0gPSB2YWx1ZVxuICAgICAgICBpZiAoaWQpIHtcbiAgICAgICAgICAvLyBUT0RPOiBBbHNvIHN0b3JlIHRoZSBjb3JyZWN0IGBpZENvbHVtbmAgcHJvcGVydHkgZm9yIHRoZSBnaXZlbiBwYXRoXG4gICAgICAgICAgaWRlbnRpZmllcnNbaWRdID0gcGF0aC5qb2luKCcvJylcbiAgICAgICAgfSBlbHNlIGlmIChyZWYpIHtcbiAgICAgICAgICByZWZlcmVuY2VzW3BhdGguam9pbignLycpXSA9IHJlZlxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcblxuICAgIC8vIE5vdyBjbG9uZSB0aGUgZGF0YSBhbmQgZGVsZXRlIGFsbCByZWZlcmVuY2VzIGZyb20gaXQsIGZvciB0aGUgaW5pdGlhbFxuICAgIC8vIHVwc2VydC5cbiAgICBjb25zdCBjbG9uZWQgPSBjbG9uZShkYXRhKVxuICAgIGZvciAoY29uc3QgcGF0aCBvZiBPYmplY3Qua2V5cyhyZWZlcmVuY2VzKSkge1xuICAgICAgY29uc3QgcGFydHMgPSBwYXJzZURhdGFQYXRoKHBhdGgpXG4gICAgICBjb25zdCBrZXkgPSBwYXJ0cy5wb3AoKVxuICAgICAgY29uc3QgcGFyZW50ID0gZ2V0VmFsdWVBdERhdGFQYXRoKGNsb25lZCwgcGFydHMpXG4gICAgICBkZWxldGUgcGFyZW50W2tleV1cbiAgICB9XG5cbiAgICAvLyBUT0RPOiBUaGUgbW9kZWwgaXNuJ3QgbmVjZXNzYXJpbHkgZmV0Y2hlZCB3aXRoIGRhdGEgaW4gdGhlIHNhbWUgb3JkZXIgYXNcbiAgICAvLyBgY2xvbmVkYCBkZWZpbmVzLCBlLmcuIGlmIHRoZXJlIGlzIHNvcnRpbmcgaW4gdGhlIGRhdGFiYXNlLiBBIHNvbGlkXG4gICAgLy8gaW1wbGVtZW50YXRpb24gb2YgdGhpcyB3b3VsZCB0YWtlIGNhcmUgb2YgdGhhdCBhbmQgbWFwIGVudHJpZXMgZnJvbVxuICAgIC8vIGBtb2RlbGAgYmFjayB0byBgY2xvbmVkYCwgc28gdGhhdCB0aGUgYHNldERhdGFQYXRoYCBjYWxscyBiZWxvdyB3b3VsZFxuICAgIC8vIHN0aWxsIHdvcmsgaW4gc3VjaCBjYXNlcy5cbiAgICBjb25zdCB7IGN5Y2xpYywgLi4ub3B0cyB9ID0gb3B0aW9uc1xuICAgIGNvbnN0IG1vZGVsID0gYXdhaXQgdGhpcy51cHNlcnREaXRvR3JhcGhBbmRGZXRjaChjbG9uZWQsIG9wdHMpXG5cbiAgICAvLyBOb3cgZm9yIGVhY2ggaWRlbnRpZmllciwgY3JlYXRlIGFuIG9iamVjdCBjb250YWluaW5nIG9ubHkgdGhlIGZpbmFsIGlkIGluXG4gICAgLy8gdGhlIGZldGNoZWQgbW9kZWwgZGF0YTpcbiAgICBjb25zdCBsaW5rcyA9IHt9XG4gICAgZm9yIChjb25zdCBbaWRlbnRpZmllciwgcGF0aF0gb2YgT2JqZWN0LmVudHJpZXMoaWRlbnRpZmllcnMpKSB7XG4gICAgICAvLyBUT0RPOiBVc2UgdGhlIGNvcnJlY3QgYGlkQ29sdW1uYCBwcm9wZXJ0eSBmb3IgdGhlIGdpdmVuIHBhdGhcbiAgICAgIGNvbnN0IHsgaWQgfSA9IGdldFZhbHVlQXREYXRhUGF0aChtb2RlbCwgcGF0aClcbiAgICAgIGxpbmtzW2lkZW50aWZpZXJdID0geyBpZCB9XG4gICAgfVxuXG4gICAgLy8gQW5kIGZpbmFsbHkgcmVwbGFjZSBhbGwgcmVmZXJlbmNlcyB3aXRoIHRoZSBmaW5hbCBpZHMsIGJlZm9yZSB1cHNlcnRpbmdcbiAgICAvLyBvbmNlIGFnYWluOlxuICAgIGZvciAoY29uc3QgW3BhdGgsIHJlZmVyZW5jZV0gb2YgT2JqZWN0LmVudHJpZXMocmVmZXJlbmNlcykpIHtcbiAgICAgIGNvbnN0IGxpbmsgPSBsaW5rc1tyZWZlcmVuY2VdXG4gICAgICBpZiAobGluaykge1xuICAgICAgICBzZXRWYWx1ZUF0RGF0YVBhdGgobW9kZWwsIHBhdGgsIGxpbmspXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG1vZGVsXG4gIH1cblxuICBzdGF0aWMgbWl4aW4odGFyZ2V0KSB7XG4gICAgLy8gRXhwb3NlIGEgc2VsZWN0aW9uIG9mIFF1ZXJ5QnVpbGRlciBtZXRob2RzIGRpcmVjdGx5IG9uIHRoZSB0YXJnZXQsXG4gICAgLy8gcmVkaXJlY3RpbmcgdGhlIGNhbGxzIHRvIGB0aGlzLnF1ZXJ5KClbbWV0aG9kXSguLi4pYFxuICAgIGZvciAoY29uc3QgbWV0aG9kIG9mIG1peGluTWV0aG9kcykge1xuICAgICAgaWYgKG1ldGhvZCBpbiB0YXJnZXQpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgIGBUaGVyZSBpcyBhbHJlYWR5IGEgcHJvcGVydHkgbmFtZWQgJyR7bWV0aG9kfScgb24gJyR7dGFyZ2V0fSdgKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgbWV0aG9kLCB7XG4gICAgICAgICAgdmFsdWUoLi4uYXJncykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucXVlcnkoKVttZXRob2RdKC4uLmFyZ3MpXG4gICAgICAgICAgfSxcbiAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgZW51bWVyYWJsZTogZmFsc2VcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuS25leEhlbHBlci5taXhpbihRdWVyeUJ1aWxkZXIucHJvdG90eXBlKVxuXG4vLyBPdmVycmlkZSBhbGwgZGVwcmVjYXRlZCBlYWdlciBtZXRob2RzIHRvIHJlc3BlY3QgdGhlIGBfaWdub3JlR3JhcGhgIGZsYWcsXG4vLyBhbmQgYWxzbyBrZWVwIHRyYWNrIG9mIGBfZ3JhcGhBbGdvcml0aG1gLCBhcyByZXF1aXJlZCBieSBgd2l0aEdyYXBoKClgXG4vLyBUT0RPOiBSZW1vdmUgb25jZSB3ZSBtb3ZlIHRvIE9iamVjdGlvbiAzLjBcbmZvciAoY29uc3Qga2V5IG9mIFtcbiAgJ2VhZ2VyJywgJ2pvaW5FYWdlcicsICduYWl2ZUVhZ2VyJyxcbiAgJ21lcmdlRWFnZXInLCAnbWVyZ2VKb2luRWFnZXInLCAnbWVyZ2VOYWl2ZUVhZ2VyJ1xuXSkge1xuICBjb25zdCBtZXRob2QgPSBRdWVyeUJ1aWxkZXIucHJvdG90eXBlW2tleV1cbiAgUXVlcnlCdWlsZGVyLnByb3RvdHlwZVtrZXldID0gZnVuY3Rpb24oLi4uYXJncykge1xuICAgIGlmICghdGhpcy5faWdub3JlR3JhcGgpIHtcbiAgICAgIHRoaXMuX2dyYXBoQWxnb3JpdGhtID0gL2pvaW4vaS50ZXN0KGtleSkgPyAnam9pbicgOiAnZmV0Y2gnXG4gICAgICBtZXRob2QuY2FsbCh0aGlzLCAuLi5hcmdzKVxuICAgIH1cbiAgICByZXR1cm4gdGhpc1xuICB9XG59XG5cbi8vIEFkZCBjb252ZXJzaW9uIG9mIGlkZW50aWZpZXJzIHRvIGFsbCBgd2hlcmVgIHN0YXRlbWVudHMsIGFzIHdlbGwgYXMgdG9cbi8vIGBzZWxlY3RgIGFuZCBgb3JkZXJCeWAsIGJ5IGRldGVjdGluZyB1c2Ugb2YgbW9kZWwgcHJvcGVydGllcyBhbmQgZXhwYW5kaW5nXG4vLyB0aGVtIHRvIGAke3RhYmxlUmVmRm9yKG1vZGVsQ2xhc3N9LiR7cHJvcGVydHlOYW1lfWAsIGZvciB1bmFtYmlndW91c1xuLy8gaWRlbnRpZmljYXRpb24gb2YgdXNlZCBwcm9wZXJ0aWVzIGluIGNvbXBsZXggc3RhdGVtZW50cy5cbmZvciAoY29uc3Qga2V5IG9mIFtcbiAgJ3doZXJlJywgJ2FuZFdoZXJlJywgJ29yV2hlcmUnLFxuICAnd2hlcmVOb3QnLCAnb3JXaGVyZU5vdCcsXG4gICd3aGVyZUluJywgJ29yV2hlcmVJbicsXG4gICd3aGVyZU5vdEluJywgJ29yV2hlcmVOb3RJbicsXG4gICd3aGVyZU51bGwnLCAnb3JXaGVyZU51bGwnLFxuICAnd2hlcmVOb3ROdWxsJywgJ29yV2hlcmVOb3ROdWxsJyxcbiAgJ3doZXJlQmV0d2VlbicsICdhbmRXaGVyZUJldHdlZW4nLCAnb3JXaGVyZUJldHdlZW4nLFxuICAnd2hlcmVOb3RCZXR3ZWVuJywgJ2FuZFdoZXJlTm90QmV0d2VlbicsICdvcldoZXJlTm90QmV0d2VlbicsXG4gICd3aGVyZUNvbHVtbicsICdhbmRXaGVyZUNvbHVtbicsICdvcldoZXJlQ29sdW1uJyxcbiAgJ3doZXJlTm90Q29sdW1uJywgJ2FuZFdoZXJlTm90Q29sdW1uJywgJ29yV2hlcmVOb3RDb2x1bW4nLFxuICAnd2hlcmVDb21wb3NpdGUnLCAnYW5kV2hlcmVDb21wb3NpdGUnLCAnb3JXaGVyZUNvbXBvc2l0ZScsXG4gICd3aGVyZUluQ29tcG9zaXRlJyxcbiAgJ3doZXJlTm90SW5Db21wb3NpdGUnLFxuXG4gICdoYXZpbmcnLCAnb3JIYXZpbmcnLFxuICAnaGF2aW5nSW4nLCAnb3JIYXZpbmdJbicsXG4gICdoYXZpbmdOb3RJbicsICdvckhhdmluZ05vdEluJyxcbiAgJ2hhdmluZ051bGwnLCAnb3JIYXZpbmdOdWxsJyxcbiAgJ2hhdmluZ05vdE51bGwnLCAnb3JIYXZpbmdOb3ROdWxsJyxcbiAgJ2hhdmluZ0JldHdlZW4nLCAnb3JIYXZpbmdCZXR3ZWVuJyxcbiAgJ2hhdmluZ05vdEJldHdlZW4nLCAnb3JIYXZpbmdOb3RCZXR3ZWVuJyxcblxuICAnc2VsZWN0JywgJ2NvbHVtbicsICdjb2x1bW5zJywgJ2ZpcnN0JyxcblxuICAnZ3JvdXBCeScsICdvcmRlckJ5J1xuXSkge1xuICBjb25zdCBtZXRob2QgPSBRdWVyeUJ1aWxkZXIucHJvdG90eXBlW2tleV1cbiAgUXVlcnlCdWlsZGVyLnByb3RvdHlwZVtrZXldID0gZnVuY3Rpb24oLi4uYXJncykge1xuICAgIGNvbnN0IG1vZGVsQ2xhc3MgPSB0aGlzLm1vZGVsQ2xhc3MoKVxuICAgIGNvbnN0IHsgcHJvcGVydGllcyB9ID0gbW9kZWxDbGFzcy5kZWZpbml0aW9uXG5cbiAgICAvLyBFeHBhbmRzIGFsbCBpZGVudGlmaWVycyBrbm93biB0byB0aGUgbW9kZWwgdG8gdGhlaXIgZXh0ZW5kZWQgdmVyc2lvbnMuXG4gICAgY29uc3QgZXhwYW5kSWRlbnRpZmllciA9IGlkZW50aWZpZXIgPT4ge1xuICAgICAgLy8gU3VwcG9ydCBleHBhbnNpb24gb2YgaWRlbnRpZmllcnMgd2l0aCBhbGlhc2VzLCBlLmcuIGBuYW1lIEFTIG5ld05hbWVgXG4gICAgICBjb25zdCBhbGlhcyA9XG4gICAgICAgIGlzU3RyaW5nKGlkZW50aWZpZXIpICYmXG4gICAgICAgIGlkZW50aWZpZXIubWF0Y2goL15cXHMqKFthLXpdW1xcd19dKykoXFxzK0FTXFxzKy4qKSQvaSlcbiAgICAgIHJldHVybiBhbGlhc1xuICAgICAgICA/IGAke2V4cGFuZElkZW50aWZpZXIoYWxpYXNbMV0pfSR7YWxpYXNbMl19YFxuICAgICAgICA6IGlkZW50aWZpZXIgPT09ICcqJyB8fCBpZGVudGlmaWVyIGluIHByb3BlcnRpZXNcbiAgICAgICAgICA/IGAke3RoaXMudGFibGVSZWZGb3IobW9kZWxDbGFzcyl9LiR7aWRlbnRpZmllcn1gXG4gICAgICAgICAgOiBpZGVudGlmaWVyXG4gICAgfVxuXG4gICAgY29uc3QgY29udmVydEFyZ3VtZW50ID0gYXJnID0+IHtcbiAgICAgIGlmIChpc1N0cmluZyhhcmcpKSB7XG4gICAgICAgIGFyZyA9IGV4cGFuZElkZW50aWZpZXIoYXJnKVxuICAgICAgfSBlbHNlIGlmIChpc0FycmF5KGFyZykpIHtcbiAgICAgICAgYXJnID0gYXJnLm1hcChleHBhbmRJZGVudGlmaWVyKVxuICAgICAgfSBlbHNlIGlmIChpc1BsYWluT2JqZWN0KGFyZykpIHtcbiAgICAgICAgYXJnID0gbWFwS2V5cyhhcmcsIGV4cGFuZElkZW50aWZpZXIpXG4gICAgICB9XG4gICAgICByZXR1cm4gYXJnXG4gICAgfVxuXG4gICAgY29uc3QgbGVuZ3RoID0gWydzZWxlY3QnLCAnY29sdW1uJywgJ2NvbHVtbnMnLCAnZmlyc3QnXS5pbmNsdWRlcyhrZXkpXG4gICAgICA/IGFyZ3MubGVuZ3RoXG4gICAgICA6IDFcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBhcmdzW2ldID0gY29udmVydEFyZ3VtZW50KGFyZ3NbaV0pXG4gICAgfVxuICAgIHJldHVybiBtZXRob2QuY2FsbCh0aGlzLCAuLi5hcmdzKVxuICB9XG59XG5cbi8vIFRoZSBkZWZhdWx0IG9wdGlvbnMgZm9yIGluc2VydERpdG9HcmFwaCgpLCB1cHNlcnREaXRvR3JhcGgoKSxcbi8vIHVwZGF0ZURpdG9HcmFwaCgpIGFuZCBwYXRjaERpdG9HcmFwaCgpXG5jb25zdCBpbnNlcnREaXRvR3JhcGhPcHRpb25zID0ge1xuICAvLyBXaGVuIHdvcmtpbmcgd2l0aCBsYXJnZSBncmFwaHMsIHVzaW5nIHRoZSAnT25seU5lZWRlZCcgZmV0Y2gtc3RyYXRlZ3lcbiAgLy8gd2lsbCByZWR1Y2UgdGhlIG51bWJlciBvZiB1cGRhdGUgcXVlcmllcyBmcm9tIGEgbG90IHRvIG9ubHkgdGhvc2VcbiAgLy8gcm93cyB0aGF0IGhhdmUgY2hhbmdlcy5cbiAgZmV0Y2hTdHJhdGVneTogJ09ubHlOZWVkZWQnLFxuICByZWxhdGU6IHRydWUsXG4gIGFsbG93UmVmczogdHJ1ZVxufVxuXG5jb25zdCB1cHNlcnREaXRvR3JhcGhPcHRpb25zID0ge1xuICAuLi5pbnNlcnREaXRvR3JhcGhPcHRpb25zLFxuICBpbnNlcnRNaXNzaW5nOiB0cnVlLFxuICB1bnJlbGF0ZTogdHJ1ZVxufVxuXG5jb25zdCBwYXRjaERpdG9HcmFwaE9wdGlvbnMgPSB7XG4gIC4uLnVwc2VydERpdG9HcmFwaE9wdGlvbnMsXG4gIGluc2VydE1pc3Npbmc6IGZhbHNlXG59XG5cbmNvbnN0IHVwZGF0ZURpdG9HcmFwaE9wdGlvbnMgPSB7XG4gIC4uLnBhdGNoRGl0b0dyYXBoT3B0aW9ucyxcbiAgaW5zZXJ0TWlzc2luZzogZmFsc2UsXG4gIHVwZGF0ZTogdHJ1ZVxufVxuXG5mdW5jdGlvbiBhZGRHcmFwaFNjb3BlKG1vZGVsQ2xhc3MsIGV4cHIsIHNjb3BlcywgbW9kaWZpZXJzLCBpc1Jvb3QgPSBmYWxzZSkge1xuICBpZiAoaXNSb290KSB7XG4gICAgZXhwciA9IGNsb25lKGV4cHIpXG4gIH0gZWxzZSB7XG4gICAgLy8gT25seSBhZGQgdGhlIHNjb3BlIGlmIGl0J3Mgbm90IGFscmVhZHkgZGVmaW5lZCBieSB0aGUgZ3JhcGggZXhwcmVzc2lvblxuICAgIC8vIGFuZCBpZiBpdCdzIGFjdHVhbGx5IGF2YWlsYWJsZSBpbiB0aGUgbW9kZWwncyBsaXN0IG9mIG1vZGlmaWVycy5cbiAgICBmb3IgKGNvbnN0IHNjb3BlIG9mIHNjb3Blcykge1xuICAgICAgaWYgKFxuICAgICAgICAhZXhwci4kbW9kaWZ5Py5pbmNsdWRlcyhzY29wZSkgJiYgKFxuICAgICAgICAgIG1vZGVsQ2xhc3MuaGFzU2NvcGUoc2NvcGUpIHx8XG4gICAgICAgICAgbW9kaWZpZXJzW3Njb3BlXVxuICAgICAgICApXG4gICAgICApIHtcbiAgICAgICAgZXhwci4kbW9kaWZ5LnB1c2goc2NvcGUpXG4gICAgICB9XG4gICAgfVxuICB9XG4gIGNvbnN0IHJlbGF0aW9ucyA9IG1vZGVsQ2xhc3MuZ2V0UmVsYXRpb25zKClcbiAgZm9yIChjb25zdCBrZXkgaW4gZXhwcikge1xuICAgIC8vIEFsbCBlbnVtZXJhYmxlIHByb3BlcnRpZXMgdGhhdCBkb24ndCBzdGFydCB3aXRoICckJyBhcmUgY2hpbGQgbm9kZXMuXG4gICAgaWYgKGtleVswXSAhPT0gJyQnKSB7XG4gICAgICBjb25zdCBjaGlsZEV4cHIgPSBleHByW2tleV1cbiAgICAgIGNvbnN0IHJlbGF0aW9uID0gcmVsYXRpb25zW2NoaWxkRXhwci4kcmVsYXRpb24gfHwga2V5XVxuICAgICAgaWYgKCFyZWxhdGlvbikge1xuICAgICAgICB0aHJvdyBuZXcgUmVsYXRpb25FcnJvcihgSW52YWxpZCBjaGlsZCBleHByZXNzaW9uOiAnJHtrZXl9J2ApXG4gICAgICB9XG4gICAgICBhZGRHcmFwaFNjb3BlKHJlbGF0aW9uLnJlbGF0ZWRNb2RlbENsYXNzLCBjaGlsZEV4cHIsIHNjb3BlcywgbW9kaWZpZXJzKVxuICAgIH1cbiAgfVxuICByZXR1cm4gZXhwclxufVxuXG4vLyBMaXN0IG9mIGFsbCBgUXVlcnlCdWlsZGVyYCBtZXRob2RzIHRvIGJlIG1peGVkIGludG8gYE1vZGVsYCBhcyBhIHNob3J0LWN1dFxuLy8gZm9yIGBtb2RlbC5xdWVyeSgpLk1FVEhPRCgpYFxuLy9cbi8vIFVzZSB0aGlzIGNvZGUgdG8gZmluZCBhbGwgYFF1ZXJ5QnVpbGRlcmAgbWV0aG9kczpcbi8vXG4vLyBmdW5jdGlvbiBnZXRBbGxQcm9wZXJ0eU5hbWVzKG9iaikge1xuLy8gICBjb25zdCBwcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihvYmopXG4vLyAgIGNvbnN0IGluaGVyaXRlZCA9IHByb3RvID8gZ2V0QWxsUHJvcGVydHlOYW1lcyhwcm90bykgOiBbXVxuLy8gICByZXR1cm4gWy4uLm5ldyBTZXQoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMob2JqKS5jb25jYXQoaW5oZXJpdGVkKSldXG4vLyB9XG4vL1xuLy8gY29uc29sZS5kaXIoZ2V0QWxsUHJvcGVydHlOYW1lcyhRdWVyeUJ1aWxkZXIucHJvdG90eXBlKS5zb3J0KCksIHtcbi8vICAgY29sb3JzOiB0cnVlLFxuLy8gICBkZXB0aDogbnVsbCxcbi8vICAgbWF4QXJyYXlMZW5ndGg6IG51bGxcbi8vIH0pXG5cbmNvbnN0IG1peGluTWV0aG9kcyA9IFtcbiAgJ2ZpcnN0JyxcbiAgJ2ZpbmQnLFxuICAnZmluZE9uZScsXG4gICdmaW5kQnlJZCcsXG5cbiAgJ3dpdGhHcmFwaCcsXG4gICd3aXRoR3JhcGhGZXRjaGVkJyxcbiAgJ3dpdGhHcmFwaEpvaW5lZCcsXG4gICdjbGVhcldpdGhHcmFwaCcsXG5cbiAgJ3dpdGhTY29wZScsXG4gICdhcHBseVNjb3BlJyxcbiAgJ2NsZWFyV2l0aFNjb3BlJyxcblxuICAnY2xlYXInLFxuICAncGljaycsXG4gICdvbWl0JyxcbiAgJ3NlbGVjdCcsXG5cbiAgJ2luc2VydCcsXG4gICd1cHNlcnQnLFxuXG4gICd1cGRhdGUnLFxuICAncGF0Y2gnLFxuICAnZGVsZXRlJyxcblxuICAndXBkYXRlQnlJZCcsXG4gICdwYXRjaEJ5SWQnLFxuICAnZGVsZXRlQnlJZCcsXG5cbiAgJ3RydW5jYXRlJyxcblxuICAnaW5zZXJ0QW5kRmV0Y2gnLFxuICAndXBzZXJ0QW5kRmV0Y2gnLFxuICAndXBkYXRlQW5kRmV0Y2gnLFxuICAncGF0Y2hBbmRGZXRjaCcsXG5cbiAgJ3VwZGF0ZUFuZEZldGNoQnlJZCcsXG4gICdwYXRjaEFuZEZldGNoQnlJZCcsXG5cbiAgJ2luc2VydEdyYXBoJyxcbiAgJ3Vwc2VydEdyYXBoJyxcbiAgJ2luc2VydEdyYXBoQW5kRmV0Y2gnLFxuICAndXBzZXJ0R3JhcGhBbmRGZXRjaCcsXG5cbiAgJ2luc2VydERpdG9HcmFwaCcsXG4gICd1cHNlcnREaXRvR3JhcGgnLFxuICAndXBkYXRlRGl0b0dyYXBoJyxcbiAgJ3BhdGNoRGl0b0dyYXBoJyxcbiAgJ2luc2VydERpdG9HcmFwaEFuZEZldGNoJyxcbiAgJ3Vwc2VydERpdG9HcmFwaEFuZEZldGNoJyxcbiAgJ3VwZGF0ZURpdG9HcmFwaEFuZEZldGNoJyxcbiAgJ3BhdGNoRGl0b0dyYXBoQW5kRmV0Y2gnLFxuXG4gICd1cHNlcnREaXRvR3JhcGhBbmRGZXRjaEJ5SWQnLFxuICAndXBkYXRlRGl0b0dyYXBoQW5kRmV0Y2hCeUlkJyxcbiAgJ3BhdGNoRGl0b0dyYXBoQW5kRmV0Y2hCeUlkJyxcblxuICAnd2hlcmUnLFxuICAnd2hlcmVOb3QnLFxuICAnd2hlcmVSYXcnLFxuICAnd2hlcmVXcmFwcGVkJyxcbiAgJ3doZXJlRXhpc3RzJyxcbiAgJ3doZXJlTm90RXhpc3RzJyxcbiAgJ3doZXJlSW4nLFxuICAnd2hlcmVOb3RJbicsXG4gICd3aGVyZU51bGwnLFxuICAnd2hlcmVOb3ROdWxsJyxcbiAgJ3doZXJlQmV0d2VlbicsXG4gICd3aGVyZU5vdEJldHdlZW4nLFxuICAnd2hlcmVDb2x1bW4nLFxuICAnd2hlcmVOb3RDb2x1bW4nLFxuICAnd2hlcmVDb21wb3NpdGUnLFxuICAnd2hlcmVJbkNvbXBvc2l0ZScsXG4gICd3aGVyZU5vdEluQ29tcG9zaXRlJyxcbiAgJ3doZXJlSnNvbkhhc0FueScsXG4gICd3aGVyZUpzb25IYXNBbGwnLFxuICAnd2hlcmVKc29uSXNBcnJheScsXG4gICd3aGVyZUpzb25Ob3RBcnJheScsXG4gICd3aGVyZUpzb25Jc09iamVjdCcsXG4gICd3aGVyZUpzb25Ob3RPYmplY3QnLFxuICAnd2hlcmVKc29uU3Vic2V0T2YnLFxuICAnd2hlcmVKc29uTm90U3Vic2V0T2YnLFxuICAnd2hlcmVKc29uU3VwZXJzZXRPZicsXG4gICd3aGVyZUpzb25Ob3RTdXBlcnNldE9mJyxcblxuICAnaGF2aW5nJyxcbiAgJ2hhdmluZ0luJyxcbiAgJ2hhdmluZ05vdEluJyxcbiAgJ2hhdmluZ051bGwnLFxuICAnaGF2aW5nTm90TnVsbCcsXG4gICdoYXZpbmdFeGlzdHMnLFxuICAnaGF2aW5nTm90RXhpc3RzJyxcbiAgJ2hhdmluZ0JldHdlZW4nLFxuICAnaGF2aW5nTm90QmV0d2VlbicsXG4gICdoYXZpbmdSYXcnLFxuICAnaGF2aW5nV3JhcHBlZCcsXG5cbiAgLy8gZGVwcmVjYXRlZCBtZXRob2RzIHRoYXQgYXJlIHN0aWxsIHN1cHBvcnRlZCBhdCB0aGUgbW9tZW50LlxuICAvLyBUT0RPOiBSZW1vdmUgb25jZSB3ZSBtb3ZlIHRvIE9iamVjdGlvbiAzLjBcbiAgJ2VhZ2VyJyxcbiAgJ2pvaW5FYWdlcicsXG4gICduYWl2ZUVhZ2VyJyxcbiAgJ21lcmdlRWFnZXInLFxuICAnbWVyZ2VKb2luRWFnZXInLFxuICAnbWVyZ2VOYWl2ZUVhZ2VyJyxcbiAgJ2NsZWFyRWFnZXInLFxuXG4gICdzY29wZScsXG4gICdtZXJnZVNjb3BlJyxcbiAgJ2NsZWFyU2NvcGUnXG5dXG4iXX0=
745
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9xdWVyeS9RdWVyeUJ1aWxkZXIuanMiXSwibmFtZXMiOlsiU1lNQk9MX0FMTCIsIlN5bWJvbCIsIlF1ZXJ5QnVpbGRlciIsIm9iamVjdGlvbiIsImNvbnN0cnVjdG9yIiwibW9kZWxDbGFzcyIsIl9pZ25vcmVHcmFwaCIsIl9ncmFwaEFsZ29yaXRobSIsIl9hbGxvd0ZpbHRlcnMiLCJfYWxsb3dTY29wZXMiLCJfaWdub3JlU2NvcGVzIiwiX2FwcGxpZWRTY29wZXMiLCJfZXhlY3V0ZUZpcnN0IiwiX2NsZWFyU2NvcGVzIiwiY2xvbmUiLCJjb3B5IiwiX2NvcHlTY29wZXMiLCJleGVjdXRlIiwiaXNOb3JtYWxGaW5kIiwiaXNGaW5kIiwiaGFzU3BlY2lhbFNlbGVjdHMiLCJjb2xsZWN0ZWRTY29wZXMiLCJzY29wZXMiLCJPYmplY3QiLCJlbnRyaWVzIiwiX3Njb3BlcyIsImxlbmd0aCIsInNjb3BlIiwiZ3JhcGgiLCJfYXBwbHlTY29wZSIsImhhc05vcm1hbFNlbGVjdHMiLCJoYXMiLCJoYXNTZWxlY3RzIiwiY2hpbGRRdWVyeU9mIiwicXVlcnkiLCJvcHRpb25zIiwiaXNJbnRlcm5hbCIsInRvRmluZFF1ZXJ5IiwiY2xlYXIiLCJ3aXRoU2NvcGUiLCJleHByIiwiUXVlcnlCdWlsZGVyRXJyb3IiLCJjbGVhcldpdGhTY29wZSIsImlnbm9yZVNjb3BlIiwiYXBwbHlTY29wZSIsImFsbG93U2NvcGUiLCJkZWZhdWx0IiwiY2xlYXJBbGxvd1Njb3BlIiwibWVyZ2VTY29wZSIsImNsZWFyU2NvcGUiLCJhZGREZWZhdWx0IiwiaXNDaGlsZFF1ZXJ5IiwiaXNTYW1lTW9kZWxDbGFzcyIsImNvcHlBbGxTY29wZXMiLCJfZmlsdGVyU2NvcGVzIiwiY2FsbGJhY2siLCJyZWR1Y2UiLCJmdW5jIiwiZ2V0U2NvcGUiLCJjYWxsIiwiZ3JhcGhFeHByZXNzaW9uT2JqZWN0IiwibmFtZSIsIm1vZGlmaWVycyIsIndpdGhHcmFwaCIsImFkZEdyYXBoU2NvcGUiLCJhcHBseUZpbHRlciIsImFyZ3MiLCJmaWx0ZXIiLCJkZWZpbml0aW9uIiwiZmlsdGVycyIsImFuZFdoZXJlIiwiYWxsb3dGaWx0ZXIiLCJhbGdvcml0aG0iLCJtZXRob2QiLCJmZXRjaCIsImpvaW4iLCJ3aXRoR3JhcGhGZXRjaGVkIiwid2l0aEdyYXBoSm9pbmVkIiwidG9TUUwiLCJ0b0tuZXhRdWVyeSIsInJhdyIsInRvS25leFJhdyIsInNlbGVjdFJhdyIsInNlbGVjdCIsInBsdWNrIiwia2V5IiwicnVuQWZ0ZXIiLCJyZXN1bHQiLCJtYXAiLCJpdCIsImxvYWREYXRhUGF0aCIsImRhdGFQYXRoIiwicGFyc2VkRGF0YVBhdGgiLCJwcm9wZXJ0eSIsImV4cHJlc3Npb24iLCJuZXN0ZWREYXRhUGF0aCIsImluZGV4IiwiZ2V0UHJvcGVydHlPclJlbGF0aW9uQXREYXRhUGF0aCIsImluY2x1ZGVzIiwidHlwZSIsInRydW5jYXRlIiwicmVzdGFydCIsImNhc2NhZGUiLCJpc1Bvc3RncmVTUUwiLCJ0YWJsZU5hbWUiLCJpbnNlcnQiLCJkYXRhIiwiaW5zZXJ0R3JhcGgiLCJ1cHNlcnQiLCJtYWluUXVlcnkiLCJydW5CZWZvcmUiLCJidWlsZGVyIiwiY29udGV4dCIsImlzTWFpblF1ZXJ5IiwidXBkYXRlIiwiZmlyc3QiLCJmaW5kIiwiYWxsb3dQYXJhbSIsImFsbG93ZWQiLCJRdWVyeVBhcmFtZXRlcnMiLCJ2YWx1ZSIsInBhcmFtIiwiZW5kc1dpdGgiLCJzbGljZSIsInBhcmFtSGFuZGxlciIsImdldCIsImZpbmRCeUlkIiwiaWQiLCJieUlkIiwicGF0Y2hBbmRGZXRjaEJ5SWQiLCJ1cGRhdGVBbmRGZXRjaEJ5SWQiLCJkZWxldGVCeUlkIiwicGF0Y2hCeUlkIiwicGF0Y2giLCJ1cGRhdGVCeUlkIiwicGF0Y2hBbmRGZXRjaCIsIl91cHNlcnRBbmRGZXRjaCIsInVwZGF0ZUFuZEZldGNoIiwidXBzZXJ0QW5kRmV0Y2giLCJpbnNlcnRNaXNzaW5nIiwibm9JbnNlcnQiLCJnZXRSZWxhdGlvbk5hbWVzIiwidXBzZXJ0R3JhcGhBbmRGZXRjaCIsImZldGNoU3RyYXRlZ3kiLCJub0luc2V0Iiwibm9EZWxldGUiLCJub1JlbGF0ZSIsIm5vVW5yZWxhdGUiLCJpbnNlcnREaXRvR3JhcGgiLCJfaGFuZGxlRGl0b0dyYXBoIiwiaW5zZXJ0RGl0b0dyYXBoT3B0aW9ucyIsImluc2VydERpdG9HcmFwaEFuZEZldGNoIiwidXBzZXJ0RGl0b0dyYXBoIiwidXBzZXJ0RGl0b0dyYXBoT3B0aW9ucyIsInVwc2VydERpdG9HcmFwaEFuZEZldGNoIiwicGF0Y2hEaXRvR3JhcGgiLCJwYXRjaERpdG9HcmFwaE9wdGlvbnMiLCJwYXRjaERpdG9HcmFwaEFuZEZldGNoIiwidXBkYXRlRGl0b0dyYXBoIiwidXBkYXRlRGl0b0dyYXBoT3B0aW9ucyIsInVwZGF0ZURpdG9HcmFwaEFuZEZldGNoIiwidXBzZXJ0RGl0b0dyYXBoQW5kRmV0Y2hCeUlkIiwiZ2V0UmVmZXJlbmNlIiwicGF0Y2hEaXRvR3JhcGhBbmRGZXRjaEJ5SWQiLCJ1cGRhdGVEaXRvR3JhcGhBbmRGZXRjaEJ5SWQiLCJkZWZhdWx0T3B0aW9ucyIsImhhbmRsZUdyYXBoIiwiZ3JhcGhQcm9jZXNzb3IiLCJEaXRvR3JhcGhQcm9jZXNzb3IiLCJwcm9jZXNzT3ZlcnJpZGVzIiwicHJvY2Vzc1JlbGF0ZXMiLCJnZXREYXRhIiwiZ2V0T3B0aW9ucyIsImN5Y2xpYyIsInN0YXJ0c1dpdGgiLCJfdXBzZXJ0Q3ljbGljRGl0b0dyYXBoQW5kRmV0Y2giLCJpZGVudGlmaWVycyIsInJlZmVyZW5jZXMiLCJ1aWRQcm9wIiwidWlkUmVmUHJvcCIsInBhdGgiLCJyZWYiLCJjbG9uZWQiLCJrZXlzIiwicGFydHMiLCJwb3AiLCJwYXJlbnQiLCJvcHRzIiwibW9kZWwiLCJsaW5rcyIsImlkZW50aWZpZXIiLCJyZWZlcmVuY2UiLCJsaW5rIiwibWl4aW4iLCJ0YXJnZXQiLCJtaXhpbk1ldGhvZHMiLCJjb25zb2xlIiwid2FybiIsImRlZmluZVByb3BlcnR5IiwiY29uZmlndXJhYmxlIiwiZW51bWVyYWJsZSIsIktuZXhIZWxwZXIiLCJwcm90b3R5cGUiLCJ0ZXN0IiwicHJvcGVydGllcyIsImV4cGFuZElkZW50aWZpZXIiLCJhbGlhcyIsIm1hdGNoIiwidGFibGVSZWZGb3IiLCJjb252ZXJ0QXJndW1lbnQiLCJhcmciLCJpIiwicmVsYXRlIiwiYWxsb3dSZWZzIiwidW5yZWxhdGUiLCJpc1Jvb3QiLCIkbW9kaWZ5IiwiaGFzU2NvcGUiLCJwdXNoIiwicmVsYXRpb25zIiwiZ2V0UmVsYXRpb25zIiwiY2hpbGRFeHByIiwicmVsYXRpb24iLCIkcmVsYXRpb24iLCJSZWxhdGlvbkVycm9yIiwicmVsYXRlZE1vZGVsQ2xhc3MiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUlBOzs7O0FBRUEsTUFBTUEsVUFBVSxHQUFHQyxNQUFNLENBQUMsS0FBRCxDQUF6Qjs7QUFFTyxNQUFNQyxZQUFOLFNBQTJCQyxtQkFBVUQsWUFBckMsQ0FBa0Q7QUFDdkRFLEVBQUFBLFdBQVcsQ0FBQ0MsVUFBRCxFQUFhO0FBQ3RCLFVBQU1BLFVBQU47QUFDQSxTQUFLQyxZQUFMLEdBQW9CLEtBQXBCO0FBQ0EsU0FBS0MsZUFBTCxHQUF1QixPQUF2QjtBQUNBLFNBQUtDLGFBQUwsR0FBcUIsSUFBckI7QUFDQSxTQUFLQyxZQUFMLEdBQW9CLElBQXBCO0FBQ0EsU0FBS0MsYUFBTCxHQUFxQixFQUFyQjtBQUNBLFNBQUtDLGNBQUwsR0FBc0IsRUFBdEI7QUFDQSxTQUFLQyxhQUFMLEdBQXFCLElBQXJCOztBQUNBLFNBQUtDLFlBQUwsQ0FBa0IsSUFBbEI7QUFDRDs7QUFHREMsRUFBQUEsS0FBSyxHQUFHO0FBQ04sVUFBTUMsSUFBSSxHQUFHLE1BQU1ELEtBQU4sRUFBYjtBQUNBQyxJQUFBQSxJQUFJLENBQUNULFlBQUwsR0FBb0IsS0FBS0EsWUFBekI7QUFDQVMsSUFBQUEsSUFBSSxDQUFDUixlQUFMLEdBQXVCLEtBQUtBLGVBQTVCO0FBQ0FR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NkJBeERtQixFQXlEbkIsNEJBekRtQixFQTJEbkIsT0EzRG1CLEVBNERuQixVQTVEbUIsRUE2RG5CLFVBN0RtQixFQThEbkIsY0E5RG1CLEVBK0RuQixhQS9EbUIsRUFnRW5CLGdCQWhFbUIsRUFpRW5CLFNBakVtQixFQWtFbkIsWUFsRW1CLEVBbUVuQixXQW5FbUIsRUFvRW5CLGNBcEVtQixFQXFFbkIsY0FyRW1CLEVBc0VuQixpQkF0RW1CLEVBdUVuQixhQXZFbUIsRUF3RW5CLGdCQXhFbUIsRUF5RW5CLGdCQXpFbUIsRUEwRW5CLGtCQTFFbUIsRUEyRW5CLHFCQTNFbUIsRUE0RW5CLGlCQTVFbUIsRUE2RW5CLGlCQTdFbUIsRUE4RW5CLGtCQTlFbUIsRUErRW5CLG1CQS9FbUIsRUFnRm5CLG1CQWhGbUIsRUFpRm5CLG9CQWpGbUIsRUFrRm5CLG1CQWxGbUIsRUFtRm5CLHNCQW5GbUIsRUFvRm5CLHFCQXBGbUIsRUFxRm5CLHdCQXJGbUIsRUF1Rm5CLFFBdkZtQixFQXdGbkIsVUF4Rm1CLEVBeUZuQixhQXpGbUIsRUEwRm5CLFlBMUZtQixFQTJGbkIsZUEzRm1CLEVBNEZuQixjQTVGbUIsRUE2Rm5CLGlCQTdGbUIsRUE4Rm5CLGVBOUZtQixFQStGbkIsa0JBL0ZtQixFQWdHbkIsV0FoR21CLEVBaUduQixlQWpHbUIsRUFxR25CLE9BckdtQixFQXNHbkIsV0F0R21CLEVBdUduQixZQXZHbUIsRUF3R25CLFlBeEdtQixFQXlHbkIsZ0JBekdtQixFQTBHbkIsaUJBMUdtQixFQTJHbkIsWUEzR21CLEVBNkduQixPQTdHbUIsRUE4R25CLFlBOUdtQixFQStHbkIsWUEvR21CLENBQXJCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG9iamVjdGlvbiBmcm9tICdvYmplY3Rpb24nXG5pbXBvcnQgeyBLbmV4SGVscGVyIH0gZnJvbSAnQC9saWInXG5pbXBvcnQgeyBRdWVyeUJ1aWxkZXJFcnJvciwgUmVsYXRpb25FcnJvciB9IGZyb20gJ0AvZXJyb3JzJ1xuaW1wb3J0IHsgUXVlcnlQYXJhbWV0ZXJzIH0gZnJvbSAnLi9RdWVyeVBhcmFtZXRlcnMnXG5pbXBvcnQgeyBEaXRvR3JhcGhQcm9jZXNzb3IsIHdhbGtHcmFwaCB9IGZyb20gJ0AvZ3JhcGgnXG5pbXBvcnQge1xuICBpc09iamVjdCwgaXNQbGFpbk9iamVjdCwgaXNTdHJpbmcsIGlzQXJyYXksIGNsb25lLCBtYXBLZXlzLFxuICBnZXRWYWx1ZUF0RGF0YVBhdGgsIHNldFZhbHVlQXREYXRhUGF0aCwgcGFyc2VEYXRhUGF0aFxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHsgY3JlYXRlTG9va3VwLCBnZXRTY29wZSwgZGVwcmVjYXRlIH0gZnJvbSAnQC91dGlscydcblxuY29uc3QgU1lNQk9MX0FMTCA9IFN5bWJvbCgnYWxsJylcblxuZXhwb3J0IGNsYXNzIFF1ZXJ5QnVpbGRlciBleHRlbmRzIG9iamVjdGlvbi5RdWVyeUJ1aWxkZXIge1xuICBjb25zdHJ1Y3Rvcihtb2RlbENsYXNzKSB7XG4gICAgc3VwZXIobW9kZWxDbGFzcylcbiAgICB0aGlzLl9pZ25vcmVHcmFwaCA9IGZhbHNlXG4gICAgdGhpcy5fZ3JhcGhBbGdvcml0aG0gPSAnZmV0Y2gnXG4gICAgdGhpcy5fYWxsb3dGaWx0ZXJzID0gbnVsbFxuICAgIHRoaXMuX2FsbG93U2NvcGVzID0gbnVsbFxuICAgIHRoaXMuX2lnbm9yZVNjb3BlcyA9IHt9XG4gICAgdGhpcy5fYXBwbGllZFNjb3BlcyA9IHt9XG4gICAgdGhpcy5fZXhlY3V0ZUZpcnN0ID0gbnVsbCAvLyBQYXJ0IG9mIGEgd29yay1hcm91bmQgZm9yIGN5Y2xpYyBncmFwaHNcbiAgICB0aGlzLl9jbGVhclNjb3Blcyh0cnVlKVxuICB9XG5cbiAgLy8gQG92ZXJyaWRlXG4gIGNsb25lKCkge1xuICAgIGNvbnN0IGNvcHkgPSBzdXBlci5jbG9uZSgpXG4gICAgY29weS5faWdub3JlR3JhcGggPSB0aGlzLl9pZ25vcmVHcmFwaFxuICAgIGNvcHkuX2dyYXBoQWxnb3JpdGhtID0gdGhpcy5fZ3JhcGhBbGdvcml0aG1cbiAgICBjb3B5Ll9hcHBsaWVkU2NvcGVzID0geyAuLi50aGlzLl9hcHBsaWVkU2NvcGVzIH1cbiAgICBjb3B5Ll9hbGxvd0ZpbHRlcnMgPSB0aGlzLl9hbGxvd0ZpbHRlcnMgPyB7IC4uLnRoaXMuX2FsbG93RmlsdGVycyB9IDogbnVsbFxuICAgIGNvcHkuX2NvcHlTY29wZXModGhpcylcbiAgICByZXR1cm4gY29weVxuICB9XG5cbiAgLy8gQG92ZXJyaWRlXG4gIGFzeW5jIGV4ZWN1dGUoKSB7XG4gICAgaWYgKCF0aGlzLl9pZ25vcmVTY29wZXNbU1lNQk9MX0FMTF0pIHtcbiAgICAgIC8vIE9ubHkgYXBwbHkgZGVmYXVsdCBzY29wZXMgaWYgdGhpcyBpcyBhIG5vcm1hbCBmaW5kIHF1ZXJ5LCBtZWFuaW5nIGl0XG4gICAgICAvLyBkb2VzIG5vdCBkZWZpbmUgYW55IHdyaXRlIG9wZXJhdGlvbnMgb3Igc3BlY2lhbCBzZWxlY3RzLCBlLmcuIGBjb3VudGA6XG4gICAgICBjb25zdCBpc05vcm1hbEZpbmQgPSAoXG4gICAgICAgIHRoaXMuaXNGaW5kKCkgJiZcbiAgICAgICAgIXRoaXMuaGFzU3BlY2lhbFNlbGVjdHMoKVxuICAgICAgKVxuICAgICAgLy8gSWYgdGhpcyBpc24ndCBhIG5vcm1hbCBmaW5kIHF1ZXJ5LCBpZ25vcmUgYWxsIGdyYXBoIG9wZXJhdGlvbnMsXG4gICAgICAvLyB0byBub3QgbWVzcyB3aXRoIHNwZWNpYWwgc2VsZWN0cyBzdWNoIGFzIGBjb3VudGAsIGV0YzpcbiAgICAgIHRoaXMuX2lnbm9yZUdyYXBoID0gIWlzTm9ybWFsRmluZFxuICAgICAgLy8gQWxsIHNjb3BlcyBpbiBgX3Njb3Blc2Agd2VyZSBhbHJlYWR5IGNoZWNrZWQgYWdhaW5zdCBgX2FsbG93U2NvcGVzYC5cbiAgICAgIC8vIFRoZXkgdGhlbWVzZWx2ZXMgYXJlIGFsbG93ZWQgdG8gYXBwbHkgLyByZXF1ZXN0IG90aGVyIHNjb3BlcyB0aGF0XG4gICAgICAvLyBhcmVuJ3QgbGlzdGVkLCBzbyBjbGVhciBgX2FwcGx5U2NvcGVgIGFuZCByZXN0b3JlIGFnYWluIGFmdGVyOlxuICAgICAgY29uc3QgeyBfYWxsb3dTY29wZXMgfSA9IHRoaXNcbiAgICAgIHRoaXMuX2FsbG93U2NvcGVzID0gbnVsbFxuICAgICAgY29uc3QgY29sbGVjdGVkU2NvcGVzID0ge31cbiAgICAgIC8vIFNjb3BlcyBjYW4gdGhlbXNlbHZlcyByZXF1ZXN0IG1vcmUgc2NvcGVzIGJ5IGNhbGxpbmcgYHdpdGhTY29wZSgpYFxuICAgICAgLy8gSW4gb3JkZXIgdG8gcHJldmVudCB0aGF0IGZyb20gY2F1c2luZyBwcm9ibGVtcyB3aGlsZSBsb29waW5nIG92ZXJcbiAgICAgIC8vIGBfc2NvcGVzYCwgY3JlYXRlIGEgbG9jYWwgY29weSBvZiB0aGUgZW50cmllcywgc2V0IGBfc2NvcGVzYCB0byBhblxuICAgICAgLy8gZW1wdHkgb2JqZWN0IGR1cmluZyBpdGVyYXRpb24gYW5kIGNoZWNrIGlmIHRoZXJlIGFyZSBuZXcgZW50cmllcyBhZnRlclxuICAgICAgLy8gb25lIGZ1bGwgbG9vcC4gS2VlcCBkb2luZyB0aGlzIHVudGlsIHRoZXJlJ3Mgbm90aGluZyBsZWZ0LCBidXQga2VlcFxuICAgICAgLy8gdHJhY2sgb2YgYWxsIHRoZSBhcHBsaWVkIHNjb3Blcywgc28gYF9zY29wZXNgIGNhbiBiZSBzZXQgdG8gdGhlIHRoZVxuICAgICAgLy8gdGhhdCBpbiB0aGUgZW5kLiBUaGlzIGlzIG5lZWRlZCBmb3IgY2hpbGQgcXVlcmllcywgc2VlIGBjaGlsZFF1ZXJ5T2YoKWBcbiAgICAgIGxldCBzY29wZXMgPSBPYmplY3QuZW50cmllcyh0aGlzLl9zY29wZXMpXG4gICAgICB3aGlsZSAoc2NvcGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy5fc2NvcGVzID0ge31cbiAgICAgICAgZm9yIChjb25zdCBbc2NvcGUsIGdyYXBoXSBvZiBzY29wZXMpIHtcbiAgICAgICAgICAvLyBEb24ndCBhcHBseSBgZGVmYXVsdGAgc2NvcGVzIG9uIGFueXRoaW5nIGVsc2UgdGhhbiBhIG5vcm1hbCBmaW5kXG4gICAgICAgICAgLy8gcXVlcnk6XG4gICAgICAgICAgaWYgKHNjb3BlICE9PSAnZGVmYXVsdCcgfHwgaXNOb3JtYWxGaW5kKSB7XG4gICAgICAgICAgICB0aGlzLl9hcHBseVNjb3BlKHNjb3BlLCBncmFwaClcbiAgICAgICAgICAgIGNvbGxlY3RlZFNjb3Blc1tzY29wZV0gfHw9IGdyYXBoXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHNjb3BlcyA9IE9iamVjdC5lbnRyaWVzKHRoaXMuX3Njb3BlcylcbiAgICAgIH1cbiAgICAgIHRoaXMuX3Njb3BlcyA9IGNvbGxlY3RlZFNjb3Blc1xuICAgICAgdGhpcy5fYWxsb3dTY29wZXMgPSBfYWxsb3dTY29wZXNcbiAgICAgIHRoaXMuX2lnbm9yZUdyYXBoID0gZmFsc2VcbiAgICB9XG4gICAgLy8gSW4gY2FzZSBvZiBjeWNsaWMgZ3JhcGhzLCBydW4gYF9leGVjdXRlRmlyc3QoKWAgbm93OlxuICAgIGF3YWl0IHRoaXMuX2V4ZWN1dGVGaXJzdD8uKClcbiAgICByZXR1cm4gc3VwZXIuZXhlY3V0ZSgpXG4gIH1cblxuICBoYXNOb3JtYWxTZWxlY3RzKCkge1xuICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgcXVlcnkgZGVmaW5lcyBub3JtYWwgc2VsZWN0czpcbiAgICAvLyAgIHNlbGVjdCgpLCBjb2x1bW4oKSwgY29sdW1ucygpXG4gICAgcmV0dXJuIHRoaXMuaGFzKC9eKHNlbGVjdHxjb2x1bW5zPykkLylcbiAgfVxuXG4gIGhhc1NwZWNpYWxTZWxlY3RzKCkge1xuICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgcXVlcnkgZGVmaW5lcyBzcGVjaWFsIHNlbGVjdHM6XG4gICAgLy8gICBkaXN0aW5jdCgpLCBjb3VudCgpLCBjb3VudERpc3RpbmN0KCksIG1pbigpLCBtYXgoKSxcbiAgICAvLyAgIHN1bSgpLCBzdW1EaXN0aW5jdCgpLCBhdmcoKSwgYXZnRGlzdGluY3QoKVxuICAgIHJldHVybiB0aGlzLmhhc1NlbGVjdHMoKSAmJiAhdGhpcy5oYXNOb3JtYWxTZWxlY3RzKClcbiAgfVxuXG4gIC8vIEBvdmVycmlkZVxuICBjaGlsZFF1ZXJ5T2YocXVlcnksIG9wdGlvbnMpIHtcbiAgICBzdXBlci5jaGlsZFF1ZXJ5T2YocXVlcnksIG9wdGlvbnMpXG4gICAgaWYgKHRoaXMuaXNJbnRlcm5hbCgpKSB7XG4gICAgICAvLyBJbnRlcm5hbCBxdWVyaWVzIHNob3VsZG4ndCBhcHBseSBvciBpbmhlcml0IGFueSBzY29wZXMsIG5vdCBldmVuIHRoZVxuICAgICAgLy8gZGVmYXVsdCBzY29wZS5cbiAgICAgIHRoaXMuX2NsZWFyU2NvcGVzKGZhbHNlKVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBJbmhlcml0IHRoZSBncmFwaCBzY29wZXMgZnJvbSB0aGUgcGFyZW50IHF1ZXJ5LlxuICAgICAgdGhpcy5fY29weVNjb3BlcyhxdWVyeSwgdHJ1ZSlcbiAgICB9XG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8vIEBvdmVycmlkZVxuICB0b0ZpbmRRdWVyeSgpIHtcbiAgICAvLyBUZW1wb3Jhcnkgd29ya2Fyb3VuZCB0byBmaXggdGhpcyBpc3N1ZSB1bnRpbCBpdCBpcyByZXNvbHZlZCBpbiBPYmplY3Rpb246XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL1ZpbmNpdC9vYmplY3Rpb24uanMvaXNzdWVzLzIwOTNcbiAgICByZXR1cm4gc3VwZXIudG9GaW5kUXVlcnkoKS5jbGVhcigncnVuQWZ0ZXInKVxuICB9XG5cbiAgd2l0aFNjb3BlKC4uLnNjb3Blcykge1xuICAgIGZvciAoY29uc3QgZXhwciBvZiBzY29wZXMpIHtcbiAgICAgIGlmIChleHByKSB7XG4gICAgICAgIGNvbnN0IHsgc2NvcGUsIGdyYXBoIH0gPSBnZXRTY29wZShleHByKVxuICAgICAgICBpZiAodGhpcy5fYWxsb3dTY29wZXMgJiYgIXRoaXMuX2FsbG93U2NvcGVzW3Njb3BlXSkge1xuICAgICAgICAgIHRocm93IG5ldyBRdWVyeUJ1aWxkZXJFcnJvcihcbiAgICAgICAgICAgIGBRdWVyeSBzY29wZSAnJHtzY29wZX0nIGlzIG5vdCBhbGxvd2VkLmBcbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fc2NvcGVzW3Njb3BlXSB8fD0gZ3JhcGhcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8vIENsZWFyIGFsbCBzY29wZXMgZGVmaW5lZCB3aXRoIGB3aXRoU2NvcGUoKWAgc3RhdGVtZW50cywgcHJlc2VydmluZyB0aGVcbiAgLy8gZGVmYXVsdCBzY29wZS5cbiAgY2xlYXJXaXRoU2NvcGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NsZWFyU2NvcGVzKHRydWUpXG4gIH1cblxuICBpZ25vcmVTY29wZSguLi5zY29wZXMpIHtcbiAgICBpZiAoIXRoaXMuX2lnbm9yZVNjb3Blc1tTWU1CT0xfQUxMXSkge1xuICAgICAgdGhpcy5faWdub3JlU2NvcGVzID0gc2NvcGVzLmxlbmd0aCA+IDBcbiAgICAgICAgPyB7XG4gICAgICAgICAgLi4udGhpcy5faWdub3JlU2NvcGVzLFxuICAgICAgICAgIC4uLmNyZWF0ZUxvb2t1cChzY29wZXMpXG4gICAgICAgIH1cbiAgICAgICAgLy8gRW1wdHkgYXJndW1lbnRzID0gaWdub3JlIGFsbCBzY29wZXNcbiAgICAgICAgOiB7XG4gICAgICAgICAgW1NZTUJPTF9BTExdOiB0cnVlXG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIGFwcGx5U2NvcGUoLi4uc2NvcGVzKSB7XG4gICAgLy8gV2hlbiBkaXJlY3RseSBhcHBseWluZyBhIHNjb3BlLCBzdGlsbCBtZXJnZSBpdCBpbnRvIGB0aGlzLl9zY29wZXNgLFxuICAgIC8vIHNvIGl0IGNhbiBzdGlsbCBiZSBwYXNzZWQgb24gdG8gZm9ya2VkIGNoaWxkIHF1ZXJpZXMuIFRoaXMgYWxzbyBoYW5kbGVzXG4gICAgLy8gdGhlIGNoZWNrcyBhZ2FpbnN0IGBfYWxsb3dTY29wZXNgLlxuICAgIHRoaXMud2l0aFNjb3BlKC4uLnNjb3BlcylcbiAgICBmb3IgKGNvbnN0IGV4cHIgb2Ygc2NvcGVzKSB7XG4gICAgICBpZiAoZXhwcikge1xuICAgICAgICBjb25zdCB7IHNjb3BlLCBncmFwaCB9ID0gZ2V0U2NvcGUoZXhwcilcbiAgICAgICAgdGhpcy5fYXBwbHlTY29wZShzY29wZSwgZ3JhcGgpXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICBhbGxvd1Njb3BlKC4uLnNjb3Blcykge1xuICAgIHRoaXMuX2FsbG93U2NvcGVzID0gdGhpcy5fYWxsb3dTY29wZXMgfHwge1xuICAgICAgZGVmYXVsdDogdHJ1ZSAvLyBUaGUgZGVmYXVsdCBzY29wZSBpcyBhbHdheXMgYWxsb3dlZC5cbiAgICB9XG4gICAgZm9yIChjb25zdCBleHByIG9mIHNjb3Blcykge1xuICAgICAgaWYgKGV4cHIpIHtcbiAgICAgICAgY29uc3QgeyBzY29wZSB9ID0gZ2V0U2NvcGUoZXhwcilcbiAgICAgICAgdGhpcy5fYWxsb3dTY29wZXNbc2NvcGVdID0gdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNsZWFyQWxsb3dTY29wZSgpIHtcbiAgICB0aGlzLl9hbGxvd1Njb3BlcyA9IG51bGxcbiAgfVxuXG4gIHNjb3BlKC4uLnNjb3Blcykge1xuICAgIGRlcHJlY2F0ZShgUXVlcnlCdWlsZGVyI3Njb3BlKCkgaXMgZGVwcmVjYXRlZC4gVXNlICN3aXRoU2NvcGUoKSBpbnN0ZWFkLmApXG5cbiAgICByZXR1cm4gdGhpcy5jbGVhcldpdGhTY29wZSgpLndpdGhTY29wZSguLi5zY29wZXMpXG4gIH1cblxuICBtZXJnZVNjb3BlKC4uLnNjb3Blcykge1xuICAgIGRlcHJlY2F0ZShgUXVlcnlCdWlsZGVyI21lcmdlU2NvcGUoKSBpcyBkZXByZWNhdGVkLiBVc2UgI3dpdGhTY29wZSgpIGluc3RlYWQuYClcblxuICAgIHJldHVybiB0aGlzLndpdGhTY29wZSguLi5zY29wZXMpXG4gIH1cblxuICBjbGVhclNjb3BlKCkge1xuICAgIGRlcHJlY2F0ZShgUXVlcnlCdWlsZGVyI2NsZWFyU2NvcGUoKSBpcyBkZXByZWNhdGVkLiBVc2UgI2NsZWFyV2l0aFNjb3BlKCkgb3IgI2lnbm9yZVNjb3BlKCkgaW5zdGVhZC5gKVxuXG4gICAgcmV0dXJuIHRoaXMuY2xlYXJXaXRoU2NvcGUoKVxuICB9XG5cbiAgX2NsZWFyU2NvcGVzKGFkZERlZmF1bHQpIHtcbiAgICAvLyBgX3Njb3Blc2AgaXMgYW4gb2JqZWN0IHdoZXJlIHRoZSBrZXlzIGFyZSB0aGUgc2NvcGVzIGFuZCB0aGUgdmFsdWVzXG4gICAgLy8gaW5kaWNhdGUgaWYgdGhlIHNjb3BlIHNob3VsZCBiZSBlYWdlci1hcHBsaWVkIG9yIG5vdDpcbiAgICB0aGlzLl9zY29wZXMgPSBhZGREZWZhdWx0XG4gICAgICA/IHsgZGVmYXVsdDogdHJ1ZSB9IC8vIGVhZ2VyLWFwcGx5IHRoZSBkZWZhdWx0IHNjb3BlXG4gICAgICA6IHt9XG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIF9jb3B5U2NvcGVzKHF1ZXJ5LCBpc0NoaWxkUXVlcnkgPSBmYWxzZSkge1xuICAgIGNvbnN0IGlzU2FtZU1vZGVsQ2xhc3MgPSB0aGlzLm1vZGVsQ2xhc3MoKSA9PT0gcXVlcnkubW9kZWxDbGFzcygpXG4gICAgLy8gT25seSBjb3B5IGBfYWxsb3dTY29wZXNgIGFuZCBgX2lnbm9yZVNjb3Blc2AgaWYgaXQncyBmb3IgdGhlIHNhbWUgbW9kZWwuXG4gICAgaWYgKGlzU2FtZU1vZGVsQ2xhc3MpIHtcbiAgICAgIHRoaXMuX2FsbG93U2NvcGVzID0gcXVlcnkuX2FsbG93U2NvcGVzID8geyAuLi5xdWVyeS5fYWxsb3dTY29wZXMgfSA6IG51bGxcbiAgICAgIHRoaXMuX2lnbm9yZVNjb3BlcyA9IHsgLi4ucXVlcnkuX2lnbm9yZVNjb3BlcyB9XG4gICAgfVxuICAgIC8vIElmIGhlIHRhcmdldCBpcyBhIGNoaWxkIHF1ZXJ5IG9mIGEgZ3JhcGggcXVlcnksIGNvcHkgYWxsIHNjb3BlcywgZ3JhcGhcbiAgICAvLyBhbmQgbm9uLWdyYXBoLiBJZiBpdCBpcyBhIGNoaWxkIHF1ZXJ5IG9mIGEgcmVsYXRlZCBvciBlYWdlciBxdWVyeSxcbiAgICAvLyBjb3B5IG9ubHkgdGhlIGdyYXBoIHNjb3Blcy5cbiAgICBjb25zdCBjb3B5QWxsU2NvcGVzID1cbiAgICAgIGlzU2FtZU1vZGVsQ2xhc3MgJiYgaXNDaGlsZFF1ZXJ5ICYmIHF1ZXJ5LmhhcygvR3JhcGhBbmRGZXRjaCQvKVxuICAgIHRoaXMuX3Njb3BlcyA9IHRoaXMuX2ZpbHRlclNjb3BlcyhxdWVyeS5fc2NvcGVzLCAoc2NvcGUsIGdyYXBoKSA9PlxuICAgICAgY29weUFsbFNjb3BlcyB8fCBncmFwaClcbiAgfVxuXG4gIF9maWx0ZXJTY29wZXMoc2NvcGVzLCBjYWxsYmFjaykge1xuICAgIHJldHVybiBPYmplY3QuZW50cmllcyhzY29wZXMpLnJlZHVjZShcbiAgICAgIChzY29wZXMsIFtzY29wZSwgZ3JhcGhdKSA9PiB7XG4gICAgICAgIGlmIChjYWxsYmFjayhzY29wZSwgZ3JhcGgpKSB7XG4gICAgICAgICAgc2NvcGVzW3Njb3BlXSA9IGdyYXBoXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNjb3Blc1xuICAgICAgfSxcbiAgICAgIHt9XG4gICAgKVxuICB9XG5cbiAgX2FwcGx5U2NvcGUoc2NvcGUsIGdyYXBoKSB7XG4gICAgaWYgKCF0aGlzLl9pZ25vcmVTY29wZXNbU1lNQk9MX0FMTF0gJiYgIXRoaXMuX2lnbm9yZVNjb3Blc1tzY29wZV0pIHtcbiAgICAgIC8vIFByZXZlbnQgbXVsdGlwbGUgYXBwbGljYXRpb24gb2Ygc2NvcGVzLiBUaGlzIGNhbiBlYXNpbHkgb2NjdXJcbiAgICAgIC8vIHdpdGggdGhlIG5lc3RpbmcgYW5kIGVhZ2VyLWFwcGxpY2F0aW9uIG9mIGdyYXBoLXNjb3Blcywgc2VlIGJlbG93LlxuICAgICAgaWYgKCF0aGlzLl9hcHBsaWVkU2NvcGVzW3Njb3BlXSkge1xuICAgICAgICAvLyBPbmx5IGFwcGx5IGdyYXBoLXNjb3BlcyB0aGF0IGFyZSBhY3R1YWxseSBkZWZpbmVkIG9uIHRoZSBtb2RlbDpcbiAgICAgICAgY29uc3QgZnVuYyA9IHRoaXMubW9kZWxDbGFzcygpLmdldFNjb3BlKHNjb3BlKVxuICAgICAgICBpZiAoZnVuYykge1xuICAgICAgICAgIGZ1bmMuY2FsbCh0aGlzLCB0aGlzKVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2FwcGxpZWRTY29wZXNbc2NvcGVdID0gdHJ1ZVxuICAgICAgfVxuICAgICAgaWYgKGdyYXBoKSB7XG4gICAgICAgIC8vIEFsc28gYmFrZSB0aGUgc2NvcGUgaW50byBhbnkgZ3JhcGggZXhwcmVzc2lvbiB0aGF0IG1heSBoYXZlIGJlZW5cbiAgICAgICAgLy8gc2V0IGFscmVhZHkgdXNpbmcgYHdpdGhHcmFwaCgpYCAmIGNvLlxuICAgICAgICBjb25zdCBleHByID0gdGhpcy5ncmFwaEV4cHJlc3Npb25PYmplY3QoKVxuICAgICAgICBpZiAoZXhwcikge1xuICAgICAgICAgIC8vIEFkZCBhIG5ldyBtb2RpZmllciB0byB0aGUgZXhpc3RpbmcgZ3JhcGggZXhwcmVzc2lvbiB0aGF0XG4gICAgICAgICAgLy8gcmVjdXJzaXZlbHkgYXBwbGllcyB0aGUgZ3JhcGgtc2NvcGUgdG8gdGhlIHJlc3VsdGluZyBxdWVyaWVzLlxuICAgICAgICAgIC8vIFRoaXMgZXZlbiB3b3JrcyBpZiBuZXN0ZWQgc2NvcGVzIGV4cGFuZCB0aGUgZ3JhcGggZXhwcmVzc2lvbixcbiAgICAgICAgICAvLyBiZWNhdXNlIGl0IHJlLWFwcGxpZXMgaXRzZWxmIHRvIHRoZSByZXN1bHQuXG4gICAgICAgICAgY29uc3QgbmFtZSA9IGBeJHtzY29wZX1gXG4gICAgICAgICAgY29uc3QgbW9kaWZpZXJzID0ge1xuICAgICAgICAgICAgW25hbWVdOiBxdWVyeSA9PiBxdWVyeS5fYXBwbHlTY29wZShzY29wZSwgZ3JhcGgpXG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMud2l0aEdyYXBoKFxuICAgICAgICAgICAgYWRkR3JhcGhTY29wZSh0aGlzLm1vZGVsQ2xhc3MoKSwgZXhwciwgW25hbWVdLCBtb2RpZmllcnMsIHRydWUpXG4gICAgICAgICAgKS5tb2RpZmllcnMobW9kaWZpZXJzKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXBwbHlGaWx0ZXIobmFtZSwgLi4uYXJncykge1xuICAgIGlmICh0aGlzLl9hbGxvd0ZpbHRlcnMgJiYgIXRoaXMuX2FsbG93RmlsdGVyc1tuYW1lXSkge1xuICAgICAgdGhyb3cgbmV3IFF1ZXJ5QnVpbGRlckVycm9yKGBRdWVyeSBmaWx0ZXIgJyR7bmFtZX0nIGlzIG5vdCBhbGxvd2VkLmApXG4gICAgfVxuICAgIGNvbnN0IGZpbHRlciA9IHRoaXMubW9kZWxDbGFzcygpLmRlZmluaXRpb24uZmlsdGVyc1tuYW1lXVxuICAgIGlmICghZmlsdGVyKSB7XG4gICAgICB0aHJvdyBuZXcgUXVlcnlCdWlsZGVyRXJyb3IoYFF1ZXJ5IGZpbHRlciAnJHtuYW1lfScgaXMgbm90IGRlZmluZWQuYClcbiAgICB9XG4gICAgLy8gTk9URTogRmlsdGVycyBhcmUgYXV0b21hdGljYWxseSBjb21iaW5lIHdpdGggYW5kIG9wZXJhdGlvbnMhXG4gICAgcmV0dXJuIHRoaXMuYW5kV2hlcmUocXVlcnkgPT4gZmlsdGVyKHF1ZXJ5LCAuLi5hcmdzKSlcbiAgfVxuXG4gIGFsbG93RmlsdGVyKC4uLmZpbHRlcnMpIHtcbiAgICB0aGlzLl9hbGxvd0ZpbHRlcnMgPSB0aGlzLl9hbGxvd0ZpbHRlcnMgfHwge31cbiAgICBmb3IgKGNvbnN0IGZpbHRlciBvZiBmaWx0ZXJzKSB7XG4gICAgICB0aGlzLl9hbGxvd0ZpbHRlcnNbZmlsdGVyXSA9IHRydWVcbiAgICB9XG4gIH1cblxuICAvLyBBIGFsZ29yaXRobS1hZ25vc3RpYyB2ZXJzaW9uIG9mIGB3aXRoR3JhcGhGZXRjaGVkKClgIC8gYHdpdGhHcmFwaEpvaW5lZCgpYCxcbiAgLy8gd2l0aCB0aGUgYWxnb3JpdGhtIHNwZWNpZmlhYmxlIGluIHRoZSBvcHRpb25zLiBBZGRpdGlvbmFsbHksIGl0IGhhbmRsZXNcbiAgLy8gYF9pZ25vcmVHcmFwaGAgYW5kIGBfZ3JhcGhBbGdvcml0aG1gOlxuICB3aXRoR3JhcGgoZXhwciwgb3B0aW9ucyA9IHt9KSB7XG4gICAgLy8gVG8gbWFrZSBtZXJnaW5nIGVhc2llciwga2VlcCB0aGUgY3VycmVudCBhbGdvcml0aG0gaWYgbm9uZSBpcyBzcGVjaWZpZWQ6XG4gICAgY29uc3QgeyBhbGdvcml0aG0gPSB0aGlzLl9ncmFwaEFsZ29yaXRobSB9ID0gb3B0aW9uc1xuICAgIGNvbnN0IG1ldGhvZCA9IHtcbiAgICAgIGZldGNoOiAnd2l0aEdyYXBoRmV0Y2hlZCcsXG4gICAgICBqb2luOiAnd2l0aEdyYXBoSm9pbmVkJ1xuICAgIH1bYWxnb3JpdGhtXVxuICAgIGlmICghbWV0aG9kKSB7XG4gICAgICB0aHJvdyBuZXcgUXVlcnlCdWlsZGVyRXJyb3IoXG4gICAgICAgIGBHcmFwaCBhbGdvcml0aG0gJyR7YWxnb3JpdGhtfScgaXMgdW5zdXBwb3J0ZWQuYFxuICAgICAgKVxuICAgIH1cbiAgICBpZiAoIXRoaXMuX2lnbm9yZUdyYXBoKSB7XG4gICAgICB0aGlzLl9ncmFwaEFsZ29yaXRobSA9IGFsZ29yaXRobVxuICAgICAgc3VwZXJbbWV0aG9kXShleHByLCBvcHRpb25zKVxuICAgIH1cbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgLy8gQG92ZXJyaWRlXG4gIHdpdGhHcmFwaEZldGNoZWQoZXhwciwgb3B0aW9ucykge1xuICAgIHJldHVybiB0aGlzLndpdGhHcmFwaChleHByLCB7IC4uLm9wdGlvbnMsIGFsZ29yaXRobTogJ2ZldGNoJyB9KVxuICB9XG5cbiAgLy8gQG92ZXJyaWRlXG4gIHdpdGhHcmFwaEpvaW5lZChleHByLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIHRoaXMud2l0aEdyYXBoKGV4cHIsIHsgLi4ub3B0aW9ucywgYWxnb3JpdGhtOiAnam9pbicgfSlcbiAgfVxuXG4gIHRvU1FMKCkge1xuICAgIHJldHVybiB0aGlzLnRvS25leFF1ZXJ5KCkudG9TUUwoKVxuICB9XG5cbiAgcmF3KC4uLmFyZ3MpIHtcbiAgICAvLyBUT0RPOiBGaWd1cmUgb3V0IGEgd2F5IHRvIHN1cHBvcnQgYG9iamVjdC5yYXcoKWAgc3ludGF4IGFuZCByZXR1cm4gYSBrbmV4XG4gICAgLy8gcmF3IGV4cHJlc3Npb24gd2l0aG91dCBhY2Nlc3NpbmcgdGhlIHByaXZhdGUgYFJhd0J1aWxkZXIudG9LbmV4UmF3KClgOlxuICAgIHJldHVybiBvYmplY3Rpb24ucmF3KC4uLmFyZ3MpLnRvS25leFJhdyh0aGlzKVxuICB9XG5cbiAgc2VsZWN0UmF3KC4uLmFyZ3MpIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3Qob2JqZWN0aW9uLnJhdyguLi5hcmdzKSlcbiAgfVxuXG4gIC8vIE5vbi1kZXByZWNhdGVkIHZlcnNpb24gb2YgT2JqZWN0aW9uJ3MgYHBsdWNrKClgXG4gIHBsdWNrKGtleSkge1xuICAgIHJldHVybiB0aGlzLnJ1bkFmdGVyKHJlc3VsdCA9PlxuICAgICAgaXNBcnJheShyZXN1bHQpXG4gICAgICAgID8gcmVzdWx0Lm1hcChpdCA9PiBpdD8uW2tleV0pXG4gICAgICAgIDogaXNPYmplY3QocmVzdWx0KVxuICAgICAgICAgID8gcmVzdWx0W2tleV1cbiAgICAgICAgICA6IHJlc3VsdFxuICAgIClcbiAgfVxuXG4gIGxvYWREYXRhUGF0aChkYXRhUGF0aCwgb3B0aW9ucykge1xuICAgIGNvbnN0IHBhcnNlZERhdGFQYXRoID0gcGFyc2VEYXRhUGF0aChkYXRhUGF0aClcblxuICAgIGNvbnN0IHtcbiAgICAgIHByb3BlcnR5LFxuICAgICAgZXhwcmVzc2lvbixcbiAgICAgIG5lc3RlZERhdGFQYXRoLFxuICAgICAgbmFtZSxcbiAgICAgIGluZGV4XG4gICAgfSA9IHRoaXMubW9kZWxDbGFzcygpLmdldFByb3BlcnR5T3JSZWxhdGlvbkF0RGF0YVBhdGgocGFyc2VkRGF0YVBhdGgpXG5cbiAgICBpZiAobmVzdGVkRGF0YVBhdGgpIHtcbiAgICAgIC8vIE9uY2UgYSBKU09OIGRhdGEgdHlwZSBpcyByZWFjaGVkLCBldmVuIGlmIGl0J3Mgbm90IGF0IHRoZSBlbmQgb2YgdGhlXG4gICAgICAvLyBwcm92aWRlZCBwYXRoLCBsb2FkIGl0IGFuZCBhc3N1bWUgd2UncmUgZG9uZSB3aXRoIHRoZSBsb2FkaW5nIHBhcnQuXG4gICAgICBpZiAoIShwcm9wZXJ0eSAmJiBbJ29iamVjdCcsICdhcnJheSddLmluY2x1ZGVzKHByb3BlcnR5LnR5cGUpKSkge1xuICAgICAgICB0aHJvdyBuZXcgUXVlcnlCdWlsZGVyRXJyb3IoXG4gICAgICAgICAgYFVuYWJsZSB0byBsb2FkIGZ1bGwgZGF0YS1wYXRoICcke1xuICAgICAgICAgICAgZGF0YVBhdGhcbiAgICAgICAgICB9JyAoVW5tYXRjaGVkOiAnJHtcbiAgICAgICAgICAgIG5lc3RlZERhdGFQYXRoXG4gICAgICAgICAgfScpLmBcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEhhbmRsZSB0aGUgc3BlY2lhbCBjYXNlIG9mIHJvb3QtbGV2ZWwgcHJvcGVydHkgc2VwYXJhdGVseSxcbiAgICAvLyBiZWNhdXNlIGB3aXRoR3JhcGgoJygjcHJvcGVydHlOYW1lKScpYCBpcyBub3Qgc3VwcG9ydGVkLlxuICAgIGlmIChwcm9wZXJ0eSAmJiBpbmRleCA9PT0gMCkge1xuICAgICAgdGhpcy5zZWxlY3QobmFtZSlcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy53aXRoR3JhcGgoZXhwcmVzc2lvbiwgb3B0aW9ucylcbiAgICB9XG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8vIEBvdmVycmlkZVxuICB0cnVuY2F0ZSh7IHJlc3RhcnQgPSB0cnVlLCBjYXNjYWRlID0gZmFsc2UgfSA9IHt9KSB7XG4gICAgaWYgKHRoaXMuaXNQb3N0Z3JlU1FMKCkpIHtcbiAgICAgIC8vIFN1cHBvcnQgYHJlc3RhcnRgIGFuZCBgY2FzY2FkZWAgaW4gUG9zdGdyZVNRTCB0cnVuY2F0ZSBxdWVyaWVzLlxuICAgICAgcmV0dXJuIHRoaXMucmF3KFxuICAgICAgICBgdHJ1bmNhdGUgdGFibGUgPz8ke1xuICAgICAgICAgIHJlc3RhcnQgPyAnIHJlc3RhcnQgaWRlbnRpdHknIDogJyd9JHtcbiAgICAgICAgICBjYXNjYWRlID8gJyBjYXNjYWRlJyA6ICcnXG4gICAgICAgIH1gLFxuICAgICAgICB0aGlzLm1vZGVsQ2xhc3MoKS50YWJsZU5hbWVcbiAgICAgIClcbiAgICB9XG4gICAgcmV0dXJuIHN1cGVyLnRydW5jYXRlKClcbiAgfVxuXG4gIC8vIEBvdmVycmlkZVxuICBpbnNlcnQoZGF0YSkge1xuICAgIC8vIE9ubHkgUG9zdGdyZVNRTCBpcyBhYmxlIHRvIGluc2VydCBtdWx0aXBsZSBlbnRyaWVzIGF0IG9uY2UgaXQgc2VlbXMsXG4gICAgLy8gYWxsIG90aGVycyBoYXZlIHRvIGZhbGwgYmFjayBvbiBpbnNlcnRHcmFwaCgpIHRvIGRvIHNvIGZvciBub3c6XG4gICAgcmV0dXJuICF0aGlzLmlzUG9zdGdyZVNRTCgpICYmIGlzQXJyYXkoZGF0YSkgJiYgZGF0YS5sZW5ndGggPiAxXG4gICAgICA/IHRoaXMuaW5zZXJ0R3JhcGgoZGF0YSlcbiAgICAgIDogc3VwZXIuaW5zZXJ0KGRhdGEpXG4gIH1cblxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vVmluY2l0L29iamVjdGlvbi5qcy9pc3N1ZXMvMTAxI2lzc3VlY29tbWVudC0yMDAzNjM2NjdcbiAgdXBzZXJ0KGRhdGEsIG9wdGlvbnMgPSB7fSkge1xuICAgIGxldCBtYWluUXVlcnlcbiAgICByZXR1cm4gdGhpc1xuICAgICAgLnJ1bkJlZm9yZSgocmVzdWx0LCBidWlsZGVyKSA9PiB7XG4gICAgICAgIGlmICghYnVpbGRlci5jb250ZXh0KCkuaXNNYWluUXVlcnkpIHtcbiAgICAgICAgICAvLyBBdCB0aGlzIHBvaW50IHRoZSBidWlsZGVyIHNob3VsZCBvbmx5IGNvbnRhaW4gYSBidW5jaCBvZiBgd2hlcmUqYFxuICAgICAgICAgIC8vIG9wZXJhdGlvbnMuIFN0b3JlIHRoaXMgcXVlcnkgZm9yIGxhdGVyIHVzZSBpbiBydW5BZnRlcigpLiBBbHNvIG1hcmtcbiAgICAgICAgICAvLyB0aGUgcXVlcnkgd2l0aCBgaXNNYWluUXVlcnk6IHRydWVgIHNvIHdlIGNhbiBza2lwIGFsbCB0aGlzIHdoZW5cbiAgICAgICAgICAvLyB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmb3IgdGhlIGBtYWluUXVlcnlgLlxuICAgICAgICAgIG1haW5RdWVyeSA9IGJ1aWxkZXIuY2xvbmUoKS5jb250ZXh0KHsgaXNNYWluUXVlcnk6IHRydWUgfSlcbiAgICAgICAgICAvLyBDYWxsIHVwZGF0ZSgpIG9uIHRoZSBvcmlnaW5hbCBxdWVyeSwgdHVybmluZyBpdCBpbnRvIGFuIHVwZGF0ZS5cbiAgICAgICAgICBidWlsZGVyW29wdGlvbnMudXBkYXRlID8gJ3VwZGF0ZScgOiAncGF0Y2gnXShkYXRhKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHRcbiAgICAgIH0pXG4gICAgICAucnVuQWZ0ZXIoKHJlc3VsdCwgYnVpbGRlcikgPT4ge1xuICAgICAgICBpZiAoIWJ1aWxkZXIuY29udGV4dCgpLmlzTWFpblF1ZXJ5KSB7XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdCA9PT0gMFxuICAgICAgICAgICAgPyBtYWluUXVlcnlbb3B0aW9ucy5mZXRjaCA/ICdpbnNlcnRBbmRGZXRjaCcgOiAnaW5zZXJ0J10oZGF0YSlcbiAgICAgICAgICAgIC8vIFdlIGNhbiB1c2UgdGhlIGBtYWluUXVlcnlgIHdlIHNhdmVkIGluIHJ1bkJlZm9yZSgpIHRvIGZldGNoIHRoZVxuICAgICAgICAgICAgLy8gaW5zZXJ0ZWQgcmVzdWx0cy4gSXQgaXMgbm90ZXdvcnRoeSB0aGF0IHRoaXMgcXVlcnkgd2lsbCByZXR1cm5cbiAgICAgICAgICAgIC8vIHRoZSB3cm9uZyByZXN1bHRzIGlmIHRoZSB1cGRhdGUgY2hhbmdlZCBhbnkgb2YgdGhlIGNvbHVtbnMgdGhlXG4gICAgICAgICAgICAvLyB3aGVyZSBvcGVyYXRlcyB3aXRoLiBUaGlzIGFsc28gcmV0dXJucyBhbGwgdXBkYXRlZCBtb2RlbHMuXG4gICAgICAgICAgICA6IG1haW5RdWVyeS5maXJzdCgpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgICAgfSlcbiAgfVxuXG4gIGZpbmQocXVlcnksIGFsbG93UGFyYW0pIHtcbiAgICBpZiAoIXF1ZXJ5KSByZXR1cm4gdGhpc1xuICAgIGNvbnN0IGFsbG93ZWQgPSAhYWxsb3dQYXJhbVxuICAgICAgPyBRdWVyeVBhcmFtZXRlcnMuYWxsb3dlZCgpXG4gICAgICAvLyBJZiBpdCdzIGFscmVhZHkgYSBsb29rdXAgb2JqZWN0IGp1c3QgdXNlIGl0LCBvdGhlcndpc2UgY29udmVydCBpdDpcbiAgICAgIDogaXNQbGFpbk9iamVjdChhbGxvd1BhcmFtKSA/IGFsbG93UGFyYW0gOiBjcmVhdGVMb29rdXAoYWxsb3dQYXJhbSlcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhxdWVyeSkpIHtcbiAgICAgIC8vIFN1cHBvcnQgYXJyYXkgbm90YXRpb24gZm9yIG11bHRpcGxlIHBhcmFtZXRlcnMsIGFzIHNlbnQgYnkgYXhpb3M6XG4gICAgICBjb25zdCBwYXJhbSA9IGtleS5lbmRzV2l0aCgnW10nKSA/IGtleS5zbGljZSgwLCAtMikgOiBrZXlcbiAgICAgIGlmICghYWxsb3dlZFtwYXJhbV0pIHtcbiAgICAgICAgdGhyb3cgbmV3IFF1ZXJ5QnVpbGRlckVycm9yKGBRdWVyeSBwYXJhbWV0ZXIgJyR7a2V5fScgaXMgbm90IGFsbG93ZWQuYClcbiAgICAgIH1cbiAgICAgIGNvbnN0IHBhcmFtSGFuZGxlciA9IFF1ZXJ5UGFyYW1ldGVycy5nZXQocGFyYW0pXG4gICAgICBpZiAoIXBhcmFtSGFuZGxlcikge1xuICAgICAgICB0aHJvdyBuZXcgUXVlcnlCdWlsZGVyRXJyb3IoXG4gICAgICAgICAgYEludmFsaWQgcXVlcnkgcGFyYW1ldGVyICcke3BhcmFtfScgaW4gJyR7a2V5fT0ke3ZhbHVlfScuYClcbiAgICAgIH1cbiAgICAgIHBhcmFtSGFuZGxlcih0aGlzLCBrZXksIHZhbHVlKVxuICAgIH1cbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgLy8gQG92ZXJyaWRlXG4gIGZpbmRCeUlkKGlkKSB7XG4gICAgLy8gUmVtZW1iZXIgaWQgc28gTW9kZWwuY3JlYXRlTm90Rm91bmRFcnJvcigpIGNhbiByZXBvcnQgaXQ6XG4gICAgdGhpcy5jb250ZXh0KHsgYnlJZDogaWQgfSlcbiAgICByZXR1cm4gc3VwZXIuZmluZEJ5SWQoaWQpXG4gIH1cblxuICAvLyBAb3ZlcnJpZGVcbiAgcGF0Y2hBbmRGZXRjaEJ5SWQoaWQsIGRhdGEpIHtcbiAgICB0aGlzLmNvbnRleHQoeyBieUlkOiBpZCB9KVxuICAgIHJldHVybiBzdXBlci5wYXRjaEFuZEZldGNoQnlJZChpZCwgZGF0YSlcbiAgfVxuXG4gIC8vIEBvdmVycmlkZVxuICB1cGRhdGVBbmRGZXRjaEJ5SWQoaWQsIGRhdGEpIHtcbiAgICB0aGlzLmNvbnRleHQoeyBieUlkOiBpZCB9KVxuICAgIHJldHVybiBzdXBlci51cGRhdGVBbmRGZXRjaEJ5SWQoaWQsIGRhdGEpXG4gIH1cblxuICAvLyBAb3ZlcnJpZGVcbiAgZGVsZXRlQnlJZChpZCkge1xuICAgIHRoaXMuY29udGV4dCh7IGJ5SWQ6IGlkIH0pXG4gICAgcmV0dXJuIHN1cGVyLmRlbGV0ZUJ5SWQoaWQpXG4gIH1cblxuICBwYXRjaEJ5SWQoaWQsIGRhdGEpIHtcbiAgICByZXR1cm4gdGhpcy5maW5kQnlJZChpZCkucGF0Y2goZGF0YSlcbiAgfVxuXG4gIHVwZGF0ZUJ5SWQoaWQsIGRhdGEpIHtcbiAgICByZXR1cm4gdGhpcy5maW5kQnlJZChpZCkudXBkYXRlKGRhdGEpXG4gIH1cblxuICAvLyBFeHRlbmQgT2JqZWN0aW9uJ3MgYHBhdGNoQW5kRmV0Y2goKWAgYW5kIGB1cGRhdGVBbmRGZXRjaCgpYCB0byBhbHNvIHN1cHBvcnRcbiAgLy8gYXJyYXlzIG9mIG1vZGVscywgbm90IG9ubHkgc2luZ2xlIGluc3RhbmNlcy5cbiAgLy8gU2VlOiBodHRwczovL2dpdHRlci5pbS9WaW5jaXQvb2JqZWN0aW9uLmpzP2F0PTVmOTk0YTU5MDBhMGYzMzY5ZDM2NmQ2ZlxuXG4gIHBhdGNoQW5kRmV0Y2goZGF0YSkge1xuICAgIHJldHVybiBpc0FycmF5KGRhdGEpXG4gICAgICA/IHRoaXMuX3Vwc2VydEFuZEZldGNoKGRhdGEpXG4gICAgICA6IHN1cGVyLnBhdGNoQW5kRmV0Y2goZGF0YSlcbiAgfVxuXG4gIHVwZGF0ZUFuZEZldGNoKGRhdGEpIHtcbiAgICByZXR1cm4gaXNBcnJheShkYXRhKVxuICAgICAgPyB0aGlzLl91cHNlcnRBbmRGZXRjaChkYXRhLCB7IHVwZGF0ZTogdHJ1ZSB9KVxuICAgICAgOiBzdXBlci51cGRhdGVBbmRGZXRjaChkYXRhKVxuICB9XG5cbiAgdXBzZXJ0QW5kRmV0Y2goZGF0YSkge1xuICAgIHJldHVybiB0aGlzLl91cHNlcnRBbmRGZXRjaChkYXRhLCB7XG4gICAgICAvLyBJbnNlcnQgbWlzc2luZyBub2RlcyBvbmx5IGF0IHJvb3QgYnkgYWxsb3dpbmcgYGluc2VydE1pc3NpbmdgLFxuICAgICAgLy8gYnV0IHNldCBgbm9JbnNlcnRgIGZvciBhbGwgcmVsYXRpb25zOlxuICAgICAgaW5zZXJ0TWlzc2luZzogdHJ1ZSxcbiAgICAgIG5vSW5zZXJ0OiB0aGlzLm1vZGVsQ2xhc3MoKS5nZXRSZWxhdGlvbk5hbWVzKClcbiAgICB9KVxuICB9XG5cbiAgX3Vwc2VydEFuZEZldGNoKGRhdGEsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gdGhpcy51cHNlcnRHcmFwaEFuZEZldGNoKGRhdGEsIHtcbiAgICAgIGZldGNoU3RyYXRlZ3k6ICdPbmx5TmVlZGVkJyxcbiAgICAgIG5vSW5zZXQ6IHRydWUsXG4gICAgICBub0RlbGV0ZTogdHJ1ZSxcbiAgICAgIG5vUmVsYXRlOiB0cnVlLFxuICAgICAgbm9VbnJlbGF0ZTogdHJ1ZSxcbiAgICAgIC4uLm9wdGlvbnNcbiAgICB9KVxuICB9XG5cbiAgaW5zZXJ0RGl0b0dyYXBoKGRhdGEsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gdGhpcy5faGFuZGxlRGl0b0dyYXBoKCdpbnNlcnRHcmFwaCcsXG4gICAgICBkYXRhLCBvcHRpb25zLCBpbnNlcnREaXRvR3JhcGhPcHRpb25zKVxuICB9XG5cbiAgaW5zZXJ0RGl0b0dyYXBoQW5kRmV0Y2goZGF0YSwgb3B0aW9ucykge1xuICAgIHJldHVybiB0aGlzLl9oYW5kbGVEaXRvR3JhcGgoJ2luc2VydEdyYXBoQW5kRmV0Y2gnLFxuICAgICAgZGF0YSwgb3B0aW9ucywgaW5zZXJ0RGl0b0dyYXBoT3B0aW9ucylcbiAgfVxuXG4gIHVwc2VydERpdG9HcmFwaChkYXRhLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIHRoaXMuX2hhbmRsZURpdG9HcmFwaCgndXBzZXJ0R3JhcGgnLFxuICAgICAgZGF0YSwgb3B0aW9ucywgdXBzZXJ0RGl0b0dyYXBoT3B0aW9ucylcbiAgfVxuXG4gIHVwc2VydERpdG9HcmFwaEFuZEZldGNoKGRhdGEsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gdGhpcy5faGFuZGxlRGl0b0dyYXBoKCd1cHNlcnRHcmFwaEFuZEZldGNoJyxcbiAgICAgIGRhdGEsIG9wdGlvbnMsIHVwc2VydERpdG9HcmFwaE9wdGlvbnMpXG4gIH1cblxuICBwYXRjaERpdG9HcmFwaChkYXRhLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIHRoaXMuX2hhbmRsZURpdG9HcmFwaCgndXBzZXJ0R3JhcGgnLFxuICAgICAgZGF0YSwgb3B0aW9ucywgcGF0Y2hEaXRvR3JhcGhPcHRpb25zKVxuICB9XG5cbiAgcGF0Y2hEaXRvR3JhcGhBbmRGZXRjaChkYXRhLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIHRoaXMuX2hhbmRsZURpdG9HcmFwaCgndXBzZXJ0R3JhcGhBbmRGZXRjaCcsXG4gICAgICBkYXRhLCBvcHRpb25zLCBwYXRjaERpdG9HcmFwaE9wdGlvbnMpXG4gIH1cblxuICB1cGRhdGVEaXRvR3JhcGgoZGF0YSwgb3B0aW9ucykge1xuICAgIHJldHVybiB0aGlzLl9oYW5kbGVEaXRvR3JhcGgoJ3Vwc2VydEdyYXBoJyxcbiAgICAgIGRhdGEsIG9wdGlvbnMsIHVwZGF0ZURpdG9HcmFwaE9wdGlvbnMpXG4gIH1cblxuICB1cGRhdGVEaXRvR3JhcGhBbmRGZXRjaChkYXRhLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIHRoaXMuX2hhbmRsZURpdG9HcmFwaCgndXBzZXJ0R3JhcGhBbmRGZXRjaCcsXG4gICAgICBkYXRhLCBvcHRpb25zLCB1cGRhdGVEaXRvR3JhcGhPcHRpb25zKVxuICB9XG5cbiAgdXBzZXJ0RGl0b0dyYXBoQW5kRmV0Y2hCeUlkKGlkLCBkYXRhLCBvcHRpb25zKSB7XG4gICAgdGhpcy5jb250ZXh0KHsgYnlJZDogaWQgfSlcbiAgICByZXR1cm4gdGhpcy51cHNlcnREaXRvR3JhcGhBbmRGZXRjaCh7XG4gICAgICAuLi5kYXRhLFxuICAgICAgLi4udGhpcy5tb2RlbENsYXNzKCkuZ2V0UmVmZXJlbmNlKGlkKVxuICAgIH0sIG9wdGlvbnMpXG4gIH1cblxuICBwYXRjaERpdG9HcmFwaEFuZEZldGNoQnlJZChpZCwgZGF0YSwgb3B0aW9ucykge1xuICAgIHRoaXMuY29udGV4dCh7IGJ5SWQ6IGlkIH0pXG4gICAgcmV0dXJuIHRoaXMucGF0Y2hEaXRvR3JhcGhBbmRGZXRjaCh7XG4gICAgICAuLi5kYXRhLFxuICAgICAgLi4udGhpcy5tb2RlbENsYXNzKCkuZ2V0UmVmZXJlbmNlKGlkKVxuICAgIH0sIG9wdGlvbnMpXG4gIH1cblxuICB1cGRhdGVEaXRvR3JhcGhBbmRGZXRjaEJ5SWQoaWQsIGRhdGEsIG9wdGlvbnMpIHtcbiAgICB0aGlzLmNvbnRleHQoeyBieUlkOiBpZCB9KVxuICAgIHJldHVybiB0aGlzLnVwZGF0ZURpdG9HcmFwaEFuZEZldGNoKHtcbiAgICAgIC4uLmRhdGEsXG4gICAgICAuLi50aGlzLm1vZGVsQ2xhc3MoKS5nZXRSZWZlcmVuY2UoaWQpXG4gICAgfSwgb3B0aW9ucylcbiAgfVxuXG4gIF9oYW5kbGVEaXRvR3JhcGgobWV0aG9kLCBkYXRhLCBvcHRpb25zLCBkZWZhdWx0T3B0aW9ucykge1xuICAgIGNvbnN0IGhhbmRsZUdyYXBoID0gZGF0YSA9PiB7XG4gICAgICBjb25zdCBncmFwaFByb2Nlc3NvciA9IG5ldyBEaXRvR3JhcGhQcm9jZXNzb3IoXG4gICAgICAgIHRoaXMubW9kZWxDbGFzcygpLFxuICAgICAgICBkYXRhLFxuICAgICAgICB7XG4gICAgICAgICAgLi4uZGVmYXVsdE9wdGlvbnMsXG4gICAgICAgICAgLi4ub3B0aW9uc1xuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgcHJvY2Vzc092ZXJyaWRlczogdHJ1ZSxcbiAgICAgICAgICBwcm9jZXNzUmVsYXRlczogdHJ1ZVxuICAgICAgICB9XG4gICAgICApXG4gICAgICB0aGlzW21ldGhvZF0oZ3JhcGhQcm9jZXNzb3IuZ2V0RGF0YSgpLCBncmFwaFByb2Nlc3Nvci5nZXRPcHRpb25zKCkpXG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnM/LmN5Y2xpYyAmJiBtZXRob2Quc3RhcnRzV2l0aCgndXBzZXJ0JykpIHtcbiAgICAgIC8vIGBfdXBzZXJ0Q3ljbGljRGl0b0dyYXBoQW5kRmV0Y2goKWAgbmVlZHMgdG8gcnVuIGFzeW5jaHJvbm91c2x5LFxuICAgICAgLy8gYnV0IHdlIGNhbid0IGRvIHNvIGhlcmUgYW5kIGBydW5CZWZvcmUoKWAgZXhlY3V0ZXMgdG9vIGxhdGUsXG4gICAgICAvLyBzbyB1c2UgYF9leGVjdXRlRmlyc3QoKWAgdG8gd29yayBhcm91bmQgaXQuXG4gICAgICB0aGlzLl9leGVjdXRlRmlyc3QgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgIHRoaXMuX2V4ZWN1dGVGaXJzdCA9IG51bGxcbiAgICAgICAgaGFuZGxlR3JhcGgoXG4gICAgICAgICAgYXdhaXQgdGhpcy5jbG9uZSgpLl91cHNlcnRDeWNsaWNEaXRvR3JhcGhBbmRGZXRjaChkYXRhLCBvcHRpb25zKVxuICAgICAgICApXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGhhbmRsZUdyYXBoKGRhdGEpXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIGFzeW5jIF91cHNlcnRDeWNsaWNEaXRvR3JhcGhBbmRGZXRjaChkYXRhLCBvcHRpb25zKSB7XG4gICAgLy8gVE9ETzogVGhpcyBpcyBwYXJ0IG9mIGEgd29ya2Fyb3VuZCBmb3IgdGhlIGZvbGxvd2luZyBPYmplY3Rpb24uanMgaXNzdWUuXG4gICAgLy8gUmVwbGFjZSB3aXRoIGEgbm9ybWFsIGB1cHNlcnRHcmFwaEFuZEZldGNoKClgIG9uY2UgaXQgaXMgZml4ZWQ6XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL1ZpbmNpdC9vYmplY3Rpb24uanMvaXNzdWVzLzE0ODJcblxuICAgIC8vIEZpcnN0LCBjb2xsZWN0IGFsbCAjaWQgaWRlbnRpZmllcnMgYW5kICNyZWYgcmVmZXJlbmNlcyBpbiB0aGUgZ3JhcGgsXG4gICAgLy8gYWxvbmcgd2l0aCB0aGVpciBkYXRhIHBhdGhzLlxuICAgIGNvbnN0IGlkZW50aWZpZXJzID0ge31cbiAgICBjb25zdCByZWZlcmVuY2VzID0ge31cblxuICAgIGNvbnN0IHsgdWlkUHJvcCwgdWlkUmVmUHJvcCB9ID0gdGhpcy5tb2RlbENsYXNzKClcblxuICAgIHdhbGtHcmFwaChkYXRhLCAodmFsdWUsIHBhdGgpID0+IHtcbiAgICAgIGlmIChpc09iamVjdCh2YWx1ZSkpIHtcbiAgICAgICAgY29uc3QgeyBbdWlkUHJvcF06IGlkLCBbdWlkUmVmUHJvcF06IHJlZiB9ID0gdmFsdWVcbiAgICAgICAgaWYgKGlkKSB7XG4gICAgICAgICAgLy8gVE9ETzogQWxzbyBzdG9yZSB0aGUgY29ycmVjdCBgaWRDb2x1bW5gIHByb3BlcnR5IGZvciB0aGUgZ2l2ZW4gcGF0aFxuICAgICAgICAgIGlkZW50aWZpZXJzW2lkXSA9IHBhdGguam9pbignLycpXG4gICAgICAgIH0gZWxzZSBpZiAocmVmKSB7XG4gICAgICAgICAgcmVmZXJlbmNlc1twYXRoLmpvaW4oJy8nKV0gPSByZWZcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG5cbiAgICAvLyBOb3cgY2xvbmUgdGhlIGRhdGEgYW5kIGRlbGV0ZSBhbGwgcmVmZXJlbmNlcyBmcm9tIGl0LCBmb3IgdGhlIGluaXRpYWxcbiAgICAvLyB1cHNlcnQuXG4gICAgY29uc3QgY2xvbmVkID0gY2xvbmUoZGF0YSlcbiAgICBmb3IgKGNvbnN0IHBhdGggb2YgT2JqZWN0LmtleXMocmVmZXJlbmNlcykpIHtcbiAgICAgIGNvbnN0IHBhcnRzID0gcGFyc2VEYXRhUGF0aChwYXRoKVxuICAgICAgY29uc3Qga2V5ID0gcGFydHMucG9wKClcbiAgICAgIGNvbnN0IHBhcmVudCA9IGdldFZhbHVlQXREYXRhUGF0aChjbG9uZWQsIHBhcnRzKVxuICAgICAgZGVsZXRlIHBhcmVudFtrZXldXG4gICAgfVxuXG4gICAgLy8gVE9ETzogVGhlIG1vZGVsIGlzbid0IG5lY2Vzc2FyaWx5IGZldGNoZWQgd2l0aCBkYXRhIGluIHRoZSBzYW1lIG9yZGVyIGFzXG4gICAgLy8gYGNsb25lZGAgZGVmaW5lcywgZS5nLiBpZiB0aGVyZSBpcyBzb3J0aW5nIGluIHRoZSBkYXRhYmFzZS4gQSBzb2xpZFxuICAgIC8vIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgd291bGQgdGFrZSBjYXJlIG9mIHRoYXQgYW5kIG1hcCBlbnRyaWVzIGZyb21cbiAgICAvLyBgbW9kZWxgIGJhY2sgdG8gYGNsb25lZGAsIHNvIHRoYXQgdGhlIGBzZXREYXRhUGF0aGAgY2FsbHMgYmVsb3cgd291bGRcbiAgICAvLyBzdGlsbCB3b3JrIGluIHN1Y2ggY2FzZXMuXG4gICAgY29uc3QgeyBjeWNsaWMsIC4uLm9wdHMgfSA9IG9wdGlvbnNcbiAgICBjb25zdCBtb2RlbCA9IGF3YWl0IHRoaXMudXBzZXJ0RGl0b0dyYXBoQW5kRmV0Y2goY2xvbmVkLCBvcHRzKVxuXG4gICAgLy8gTm93IGZvciBlYWNoIGlkZW50aWZpZXIsIGNyZWF0ZSBhbiBvYmplY3QgY29udGFpbmluZyBvbmx5IHRoZSBmaW5hbCBpZCBpblxuICAgIC8vIHRoZSBmZXRjaGVkIG1vZGVsIGRhdGE6XG4gICAgY29uc3QgbGlua3MgPSB7fVxuICAgIGZvciAoY29uc3QgW2lkZW50aWZpZXIsIHBhdGhdIG9mIE9iamVjdC5lbnRyaWVzKGlkZW50aWZpZXJzKSkge1xuICAgICAgLy8gVE9ETzogVXNlIHRoZSBjb3JyZWN0IGBpZENvbHVtbmAgcHJvcGVydHkgZm9yIHRoZSBnaXZlbiBwYXRoXG4gICAgICBjb25zdCB7IGlkIH0gPSBnZXRWYWx1ZUF0RGF0YVBhdGgobW9kZWwsIHBhdGgpXG4gICAgICBsaW5rc1tpZGVudGlmaWVyXSA9IHsgaWQgfVxuICAgIH1cblxuICAgIC8vIEFuZCBmaW5hbGx5IHJlcGxhY2UgYWxsIHJlZmVyZW5jZXMgd2l0aCB0aGUgZmluYWwgaWRzLCBiZWZvcmUgdXBzZXJ0aW5nXG4gICAgLy8gb25jZSBhZ2FpbjpcbiAgICBmb3IgKGNvbnN0IFtwYXRoLCByZWZlcmVuY2VdIG9mIE9iamVjdC5lbnRyaWVzKHJlZmVyZW5jZXMpKSB7XG4gICAgICBjb25zdCBsaW5rID0gbGlua3NbcmVmZXJlbmNlXVxuICAgICAgaWYgKGxpbmspIHtcbiAgICAgICAgc2V0VmFsdWVBdERhdGFQYXRoKG1vZGVsLCBwYXRoLCBsaW5rKVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtb2RlbFxuICB9XG5cbiAgc3RhdGljIG1peGluKHRhcmdldCkge1xuICAgIC8vIEV4cG9zZSBhIHNlbGVjdGlvbiBvZiBRdWVyeUJ1aWxkZXIgbWV0aG9kcyBkaXJlY3RseSBvbiB0aGUgdGFyZ2V0LFxuICAgIC8vIHJlZGlyZWN0aW5nIHRoZSBjYWxscyB0byBgdGhpcy5xdWVyeSgpW21ldGhvZF0oLi4uKWBcbiAgICBmb3IgKGNvbnN0IG1ldGhvZCBvZiBtaXhpbk1ldGhvZHMpIHtcbiAgICAgIGlmIChtZXRob2QgaW4gdGFyZ2V0KSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICBgVGhlcmUgaXMgYWxyZWFkeSBhIHByb3BlcnR5IG5hbWVkICcke21ldGhvZH0nIG9uICcke3RhcmdldH0nYClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIG1ldGhvZCwge1xuICAgICAgICAgIHZhbHVlKC4uLmFyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnF1ZXJ5KClbbWV0aG9kXSguLi5hcmdzKVxuICAgICAgICAgIH0sXG4gICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgIGVudW1lcmFibGU6IGZhbHNlXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbktuZXhIZWxwZXIubWl4aW4oUXVlcnlCdWlsZGVyLnByb3RvdHlwZSlcblxuLy8gT3ZlcnJpZGUgYWxsIGRlcHJlY2F0ZWQgZWFnZXIgbWV0aG9kcyB0byByZXNwZWN0IHRoZSBgX2lnbm9yZUdyYXBoYCBmbGFnLFxuLy8gYW5kIGFsc28ga2VlcCB0cmFjayBvZiBgX2dyYXBoQWxnb3JpdGhtYCwgYXMgcmVxdWlyZWQgYnkgYHdpdGhHcmFwaCgpYFxuLy8gVE9ETzogUmVtb3ZlIG9uY2Ugd2UgbW92ZSB0byBPYmplY3Rpb24gMy4wXG5mb3IgKGNvbnN0IGtleSBvZiBbXG4gICdlYWdlcicsICdqb2luRWFnZXInLCAnbmFpdmVFYWdlcicsXG4gICdtZXJnZUVhZ2VyJywgJ21lcmdlSm9pbkVhZ2VyJywgJ21lcmdlTmFpdmVFYWdlcidcbl0pIHtcbiAgY29uc3QgbWV0aG9kID0gUXVlcnlCdWlsZGVyLnByb3RvdHlwZVtrZXldXG4gIFF1ZXJ5QnVpbGRlci5wcm90b3R5cGVba2V5XSA9IGZ1bmN0aW9uKC4uLmFyZ3MpIHtcbiAgICBpZiAoIXRoaXMuX2lnbm9yZUdyYXBoKSB7XG4gICAgICB0aGlzLl9ncmFwaEFsZ29yaXRobSA9IC9qb2luL2kudGVzdChrZXkpID8gJ2pvaW4nIDogJ2ZldGNoJ1xuICAgICAgbWV0aG9kLmNhbGwodGhpcywgLi4uYXJncylcbiAgICB9XG4gICAgcmV0dXJuIHRoaXNcbiAgfVxufVxuXG4vLyBBZGQgY29udmVyc2lvbiBvZiBpZGVudGlmaWVycyB0byBhbGwgYHdoZXJlYCBzdGF0ZW1lbnRzLCBhcyB3ZWxsIGFzIHRvXG4vLyBgc2VsZWN0YCBhbmQgYG9yZGVyQnlgLCBieSBkZXRlY3RpbmcgdXNlIG9mIG1vZGVsIHByb3BlcnRpZXMgYW5kIGV4cGFuZGluZ1xuLy8gdGhlbSB0byBgJHt0YWJsZVJlZkZvcihtb2RlbENsYXNzfS4ke3Byb3BlcnR5TmFtZX1gLCBmb3IgdW5hbWJpZ3VvdXNcbi8vIGlkZW50aWZpY2F0aW9uIG9mIHVzZWQgcHJvcGVydGllcyBpbiBjb21wbGV4IHN0YXRlbWVudHMuXG5mb3IgKGNvbnN0IGtleSBvZiBbXG4gICd3aGVyZScsICdhbmRXaGVyZScsICdvcldoZXJlJyxcbiAgJ3doZXJlTm90JywgJ29yV2hlcmVOb3QnLFxuICAnd2hlcmVJbicsICdvcldoZXJlSW4nLFxuICAnd2hlcmVOb3RJbicsICdvcldoZXJlTm90SW4nLFxuICAnd2hlcmVOdWxsJywgJ29yV2hlcmVOdWxsJyxcbiAgJ3doZXJlTm90TnVsbCcsICdvcldoZXJlTm90TnVsbCcsXG4gICd3aGVyZUJldHdlZW4nLCAnYW5kV2hlcmVCZXR3ZWVuJywgJ29yV2hlcmVCZXR3ZWVuJyxcbiAgJ3doZXJlTm90QmV0d2VlbicsICdhbmRXaGVyZU5vdEJldHdlZW4nLCAnb3JXaGVyZU5vdEJldHdlZW4nLFxuICAnd2hlcmVDb2x1bW4nLCAnYW5kV2hlcmVDb2x1bW4nLCAnb3JXaGVyZUNvbHVtbicsXG4gICd3aGVyZU5vdENvbHVtbicsICdhbmRXaGVyZU5vdENvbHVtbicsICdvcldoZXJlTm90Q29sdW1uJyxcbiAgJ3doZXJlQ29tcG9zaXRlJywgJ2FuZFdoZXJlQ29tcG9zaXRlJywgJ29yV2hlcmVDb21wb3NpdGUnLFxuICAnd2hlcmVJbkNvbXBvc2l0ZScsXG4gICd3aGVyZU5vdEluQ29tcG9zaXRlJyxcblxuICAnaGF2aW5nJywgJ29ySGF2aW5nJyxcbiAgJ2hhdmluZ0luJywgJ29ySGF2aW5nSW4nLFxuICAnaGF2aW5nTm90SW4nLCAnb3JIYXZpbmdOb3RJbicsXG4gICdoYXZpbmdOdWxsJywgJ29ySGF2aW5nTnVsbCcsXG4gICdoYXZpbmdOb3ROdWxsJywgJ29ySGF2aW5nTm90TnVsbCcsXG4gICdoYXZpbmdCZXR3ZWVuJywgJ29ySGF2aW5nQmV0d2VlbicsXG4gICdoYXZpbmdOb3RCZXR3ZWVuJywgJ29ySGF2aW5nTm90QmV0d2VlbicsXG5cbiAgJ3NlbGVjdCcsICdjb2x1bW4nLCAnY29sdW1ucycsICdmaXJzdCcsXG5cbiAgJ2dyb3VwQnknLCAnb3JkZXJCeSdcbl0pIHtcbiAgY29uc3QgbWV0aG9kID0gUXVlcnlCdWlsZGVyLnByb3RvdHlwZVtrZXldXG4gIFF1ZXJ5QnVpbGRlci5wcm90b3R5cGVba2V5XSA9IGZ1bmN0aW9uKC4uLmFyZ3MpIHtcbiAgICBjb25zdCBtb2RlbENsYXNzID0gdGhpcy5tb2RlbENsYXNzKClcbiAgICBjb25zdCB7IHByb3BlcnRpZXMgfSA9IG1vZGVsQ2xhc3MuZGVmaW5pdGlvblxuXG4gICAgLy8gRXhwYW5kcyBhbGwgaWRlbnRpZmllcnMga25vd24gdG8gdGhlIG1vZGVsIHRvIHRoZWlyIGV4dGVuZGVkIHZlcnNpb25zLlxuICAgIGNvbnN0IGV4cGFuZElkZW50aWZpZXIgPSBpZGVudGlmaWVyID0+IHtcbiAgICAgIC8vIFN1cHBvcnQgZXhwYW5zaW9uIG9mIGlkZW50aWZpZXJzIHdpdGggYWxpYXNlcywgZS5nLiBgbmFtZSBBUyBuZXdOYW1lYFxuICAgICAgY29uc3QgYWxpYXMgPVxuICAgICAgICBpc1N0cmluZyhpZGVudGlmaWVyKSAmJlxuICAgICAgICBpZGVudGlmaWVyLm1hdGNoKC9eXFxzKihbYS16XVtcXHdfXSspKFxccytBU1xccysuKikkL2kpXG4gICAgICByZXR1cm4gYWxpYXNcbiAgICAgICAgPyBgJHtleHBhbmRJZGVudGlmaWVyKGFsaWFzWzFdKX0ke2FsaWFzWzJdfWBcbiAgICAgICAgOiBpZGVudGlmaWVyID09PSAnKicgfHwgaWRlbnRpZmllciBpbiBwcm9wZXJ0aWVzXG4gICAgICAgICAgPyBgJHt0aGlzLnRhYmxlUmVmRm9yKG1vZGVsQ2xhc3MpfS4ke2lkZW50aWZpZXJ9YFxuICAgICAgICAgIDogaWRlbnRpZmllclxuICAgIH1cblxuICAgIGNvbnN0IGNvbnZlcnRBcmd1bWVudCA9IGFyZyA9PiB7XG4gICAgICBpZiAoaXNTdHJpbmcoYXJnKSkge1xuICAgICAgICBhcmcgPSBleHBhbmRJZGVudGlmaWVyKGFyZylcbiAgICAgIH0gZWxzZSBpZiAoaXNBcnJheShhcmcpKSB7XG4gICAgICAgIGFyZyA9IGFyZy5tYXAoZXhwYW5kSWRlbnRpZmllcilcbiAgICAgIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdChhcmcpKSB7XG4gICAgICAgIGFyZyA9IG1hcEtleXMoYXJnLCBleHBhbmRJZGVudGlmaWVyKVxuICAgICAgfVxuICAgICAgcmV0dXJuIGFyZ1xuICAgIH1cblxuICAgIGNvbnN0IGxlbmd0aCA9IFsnc2VsZWN0JywgJ2NvbHVtbicsICdjb2x1bW5zJywgJ2ZpcnN0J10uaW5jbHVkZXMoa2V5KVxuICAgICAgPyBhcmdzLmxlbmd0aFxuICAgICAgOiAxXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgYXJnc1tpXSA9IGNvbnZlcnRBcmd1bWVudChhcmdzW2ldKVxuICAgIH1cbiAgICByZXR1cm4gbWV0aG9kLmNhbGwodGhpcywgLi4uYXJncylcbiAgfVxufVxuXG4vLyBUaGUgZGVmYXVsdCBvcHRpb25zIGZvciBpbnNlcnREaXRvR3JhcGgoKSwgdXBzZXJ0RGl0b0dyYXBoKCksXG4vLyB1cGRhdGVEaXRvR3JhcGgoKSBhbmQgcGF0Y2hEaXRvR3JhcGgoKVxuY29uc3QgaW5zZXJ0RGl0b0dyYXBoT3B0aW9ucyA9IHtcbiAgLy8gV2hlbiB3b3JraW5nIHdpdGggbGFyZ2UgZ3JhcGhzLCB1c2luZyB0aGUgJ09ubHlOZWVkZWQnIGZldGNoLXN0cmF0ZWd5XG4gIC8vIHdpbGwgcmVkdWNlIHRoZSBudW1iZXIgb2YgdXBkYXRlIHF1ZXJpZXMgZnJvbSBhIGxvdCB0byBvbmx5IHRob3NlXG4gIC8vIHJvd3MgdGhhdCBoYXZlIGNoYW5nZXMuXG4gIGZldGNoU3RyYXRlZ3k6ICdPbmx5TmVlZGVkJyxcbiAgcmVsYXRlOiB0cnVlLFxuICBhbGxvd1JlZnM6IHRydWVcbn1cblxuY29uc3QgdXBzZXJ0RGl0b0dyYXBoT3B0aW9ucyA9IHtcbiAgLi4uaW5zZXJ0RGl0b0dyYXBoT3B0aW9ucyxcbiAgaW5zZXJ0TWlzc2luZzogdHJ1ZSxcbiAgdW5yZWxhdGU6IHRydWVcbn1cblxuY29uc3QgcGF0Y2hEaXRvR3JhcGhPcHRpb25zID0ge1xuICAuLi51cHNlcnREaXRvR3JhcGhPcHRpb25zLFxuICBpbnNlcnRNaXNzaW5nOiBmYWxzZVxufVxuXG5jb25zdCB1cGRhdGVEaXRvR3JhcGhPcHRpb25zID0ge1xuICAuLi5wYXRjaERpdG9HcmFwaE9wdGlvbnMsXG4gIGluc2VydE1pc3Npbmc6IGZhbHNlLFxuICB1cGRhdGU6IHRydWVcbn1cblxuZnVuY3Rpb24gYWRkR3JhcGhTY29wZShtb2RlbENsYXNzLCBleHByLCBzY29wZXMsIG1vZGlmaWVycywgaXNSb290ID0gZmFsc2UpIHtcbiAgaWYgKGlzUm9vdCkge1xuICAgIGV4cHIgPSBjbG9uZShleHByKVxuICB9IGVsc2Uge1xuICAgIC8vIE9ubHkgYWRkIHRoZSBzY29wZSBpZiBpdCdzIG5vdCBhbHJlYWR5IGRlZmluZWQgYnkgdGhlIGdyYXBoIGV4cHJlc3Npb25cbiAgICAvLyBhbmQgaWYgaXQncyBhY3R1YWxseSBhdmFpbGFibGUgaW4gdGhlIG1vZGVsJ3MgbGlzdCBvZiBtb2RpZmllcnMuXG4gICAgZm9yIChjb25zdCBzY29wZSBvZiBzY29wZXMpIHtcbiAgICAgIGlmIChcbiAgICAgICAgIWV4cHIuJG1vZGlmeT8uaW5jbHVkZXMoc2NvcGUpICYmIChcbiAgICAgICAgICBtb2RlbENsYXNzLmhhc1Njb3BlKHNjb3BlKSB8fFxuICAgICAgICAgIG1vZGlmaWVyc1tzY29wZV1cbiAgICAgICAgKVxuICAgICAgKSB7XG4gICAgICAgIGV4cHIuJG1vZGlmeS5wdXNoKHNjb3BlKVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBjb25zdCByZWxhdGlvbnMgPSBtb2RlbENsYXNzLmdldFJlbGF0aW9ucygpXG4gIGZvciAoY29uc3Qga2V5IGluIGV4cHIpIHtcbiAgICAvLyBBbGwgZW51bWVyYWJsZSBwcm9wZXJ0aWVzIHRoYXQgZG9uJ3Qgc3RhcnQgd2l0aCAnJCcgYXJlIGNoaWxkIG5vZGVzLlxuICAgIGlmIChrZXlbMF0gIT09ICckJykge1xuICAgICAgY29uc3QgY2hpbGRFeHByID0gZXhwcltrZXldXG4gICAgICBjb25zdCByZWxhdGlvbiA9IHJlbGF0aW9uc1tjaGlsZEV4cHIuJHJlbGF0aW9uIHx8IGtleV1cbiAgICAgIGlmICghcmVsYXRpb24pIHtcbiAgICAgICAgdGhyb3cgbmV3IFJlbGF0aW9uRXJyb3IoYEludmFsaWQgY2hpbGQgZXhwcmVzc2lvbjogJyR7a2V5fSdgKVxuICAgICAgfVxuICAgICAgYWRkR3JhcGhTY29wZShyZWxhdGlvbi5yZWxhdGVkTW9kZWxDbGFzcywgY2hpbGRFeHByLCBzY29wZXMsIG1vZGlmaWVycylcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGV4cHJcbn1cblxuLy8gTGlzdCBvZiBhbGwgYFF1ZXJ5QnVpbGRlcmAgbWV0aG9kcyB0byBiZSBtaXhlZCBpbnRvIGBNb2RlbGAgYXMgYSBzaG9ydC1jdXRcbi8vIGZvciBgbW9kZWwucXVlcnkoKS5NRVRIT0QoKWBcbi8vXG4vLyBVc2UgdGhpcyBjb2RlIHRvIGZpbmQgYWxsIGBRdWVyeUJ1aWxkZXJgIG1ldGhvZHM6XG4vL1xuLy8gZnVuY3Rpb24gZ2V0QWxsUHJvcGVydHlOYW1lcyhvYmopIHtcbi8vICAgY29uc3QgcHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqKVxuLy8gICBjb25zdCBpbmhlcml0ZWQgPSBwcm90byA/IGdldEFsbFByb3BlcnR5TmFtZXMocHJvdG8pIDogW11cbi8vICAgcmV0dXJuIFsuLi5uZXcgU2V0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iaikuY29uY2F0KGluaGVyaXRlZCkpXVxuLy8gfVxuLy9cbi8vIGNvbnNvbGUuZGlyKGdldEFsbFByb3BlcnR5TmFtZXMoUXVlcnlCdWlsZGVyLnByb3RvdHlwZSkuc29ydCgpLCB7XG4vLyAgIGNvbG9yczogdHJ1ZSxcbi8vICAgZGVwdGg6IG51bGwsXG4vLyAgIG1heEFycmF5TGVuZ3RoOiBudWxsXG4vLyB9KVxuXG5jb25zdCBtaXhpbk1ldGhvZHMgPSBbXG4gICdmaXJzdCcsXG4gICdmaW5kJyxcbiAgJ2ZpbmRPbmUnLFxuICAnZmluZEJ5SWQnLFxuXG4gICd3aXRoR3JhcGgnLFxuICAnd2l0aEdyYXBoRmV0Y2hlZCcsXG4gICd3aXRoR3JhcGhKb2luZWQnLFxuICAnY2xlYXJXaXRoR3JhcGgnLFxuXG4gICd3aXRoU2NvcGUnLFxuICAnYXBwbHlTY29wZScsXG4gICdjbGVhcldpdGhTY29wZScsXG5cbiAgJ2NsZWFyJyxcbiAgJ3BpY2snLFxuICAnb21pdCcsXG4gICdzZWxlY3QnLFxuXG4gICdpbnNlcnQnLFxuICAndXBzZXJ0JyxcblxuICAndXBkYXRlJyxcbiAgJ3BhdGNoJyxcbiAgJ2RlbGV0ZScsXG5cbiAgJ3VwZGF0ZUJ5SWQnLFxuICAncGF0Y2hCeUlkJyxcbiAgJ2RlbGV0ZUJ5SWQnLFxuXG4gICd0cnVuY2F0ZScsXG5cbiAgJ2luc2VydEFuZEZldGNoJyxcbiAgJ3Vwc2VydEFuZEZldGNoJyxcbiAgJ3VwZGF0ZUFuZEZldGNoJyxcbiAgJ3BhdGNoQW5kRmV0Y2gnLFxuXG4gICd1cGRhdGVBbmRGZXRjaEJ5SWQnLFxuICAncGF0Y2hBbmRGZXRjaEJ5SWQnLFxuXG4gICdpbnNlcnRHcmFwaCcsXG4gICd1cHNlcnRHcmFwaCcsXG4gICdpbnNlcnRHcmFwaEFuZEZldGNoJyxcbiAgJ3Vwc2VydEdyYXBoQW5kRmV0Y2gnLFxuXG4gICdpbnNlcnREaXRvR3JhcGgnLFxuICAndXBzZXJ0RGl0b0dyYXBoJyxcbiAgJ3VwZGF0ZURpdG9HcmFwaCcsXG4gICdwYXRjaERpdG9HcmFwaCcsXG4gICdpbnNlcnREaXRvR3JhcGhBbmRGZXRjaCcsXG4gICd1cHNlcnREaXRvR3JhcGhBbmRGZXRjaCcsXG4gICd1cGRhdGVEaXRvR3JhcGhBbmRGZXRjaCcsXG4gICdwYXRjaERpdG9HcmFwaEFuZEZldGNoJyxcblxuICAndXBzZXJ0RGl0b0dyYXBoQW5kRmV0Y2hCeUlkJyxcbiAgJ3VwZGF0ZURpdG9HcmFwaEFuZEZldGNoQnlJZCcsXG4gICdwYXRjaERpdG9HcmFwaEFuZEZldGNoQnlJZCcsXG5cbiAgJ3doZXJlJyxcbiAgJ3doZXJlTm90JyxcbiAgJ3doZXJlUmF3JyxcbiAgJ3doZXJlV3JhcHBlZCcsXG4gICd3aGVyZUV4aXN0cycsXG4gICd3aGVyZU5vdEV4aXN0cycsXG4gICd3aGVyZUluJyxcbiAgJ3doZXJlTm90SW4nLFxuICAnd2hlcmVOdWxsJyxcbiAgJ3doZXJlTm90TnVsbCcsXG4gICd3aGVyZUJldHdlZW4nLFxuICAnd2hlcmVOb3RCZXR3ZWVuJyxcbiAgJ3doZXJlQ29sdW1uJyxcbiAgJ3doZXJlTm90Q29sdW1uJyxcbiAgJ3doZXJlQ29tcG9zaXRlJyxcbiAgJ3doZXJlSW5Db21wb3NpdGUnLFxuICAnd2hlcmVOb3RJbkNvbXBvc2l0ZScsXG4gICd3aGVyZUpzb25IYXNBbnknLFxuICAnd2hlcmVKc29uSGFzQWxsJyxcbiAgJ3doZXJlSnNvbklzQXJyYXknLFxuICAnd2hlcmVKc29uTm90QXJyYXknLFxuICAnd2hlcmVKc29uSXNPYmplY3QnLFxuICAnd2hlcmVKc29uTm90T2JqZWN0JyxcbiAgJ3doZXJlSnNvblN1YnNldE9mJyxcbiAgJ3doZXJlSnNvbk5vdFN1YnNldE9mJyxcbiAgJ3doZXJlSnNvblN1cGVyc2V0T2YnLFxuICAnd2hlcmVKc29uTm90U3VwZXJzZXRPZicsXG5cbiAgJ2hhdmluZycsXG4gICdoYXZpbmdJbicsXG4gICdoYXZpbmdOb3RJbicsXG4gICdoYXZpbmdOdWxsJyxcbiAgJ2hhdmluZ05vdE51bGwnLFxuICAnaGF2aW5nRXhpc3RzJyxcbiAgJ2hhdmluZ05vdEV4aXN0cycsXG4gICdoYXZpbmdCZXR3ZWVuJyxcbiAgJ2hhdmluZ05vdEJldHdlZW4nLFxuICAnaGF2aW5nUmF3JyxcbiAgJ2hhdmluZ1dyYXBwZWQnLFxuXG4gIC8vIGRlcHJlY2F0ZWQgbWV0aG9kcyB0aGF0IGFyZSBzdGlsbCBzdXBwb3J0ZWQgYXQgdGhlIG1vbWVudC5cbiAgLy8gVE9ETzogUmVtb3ZlIG9uY2Ugd2UgbW92ZSB0byBPYmplY3Rpb24gMy4wXG4gICdlYWdlcicsXG4gICdqb2luRWFnZXInLFxuICAnbmFpdmVFYWdlcicsXG4gICdtZXJnZUVhZ2VyJyxcbiAgJ21lcmdlSm9pbkVhZ2VyJyxcbiAgJ21lcmdlTmFpdmVFYWdlcicsXG4gICdjbGVhckVhZ2VyJyxcblxuICAnc2NvcGUnLFxuICAnbWVyZ2VTY29wZScsXG4gICdjbGVhclNjb3BlJ1xuXVxuIl19
@@ -1,5 +1,15 @@
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
+
9
+ require("core-js/modules/esnext.async-iterator.reduce.js");
10
+
11
+ require("core-js/modules/esnext.iterator.reduce.js");
12
+
3
13
  exports.__esModule = true;
4
14
  exports.QueryFilters = void 0;
5
15
 
@@ -69,4 +79,4 @@ QueryFilters.register((_dec = (0, _decorators.parameters)([{
69
79
  }
70
80
 
71
81
  }, (_applyDecoratedDescriptor(_obj, "text", [_dec], Object.getOwnPropertyDescriptor(_obj, "text"), _obj), _applyDecoratedDescriptor(_obj, 'date-range', [_dec2], Object.getOwnPropertyDescriptor(_obj, 'date-range'), _obj)), _obj)));
72
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9xdWVyeS9RdWVyeUZpbHRlcnMuanMiXSwibmFtZXMiOlsiUXVlcnlGaWx0ZXJzIiwiUmVnaXN0cnkiLCJyZWdpc3RlciIsIm5hbWUiLCJ0eXBlIiwibnVsbGFibGUiLCJ0ZXh0IiwicXVlcnkiLCJwcm9wZXJ0eSIsIm9wZXJhdG9yIiwidW5kZWZpbmVkIiwidGVtcGxhdGVzIiwib3BlcmFuZCIsImlzUG9zdGdyZVNRTCIsIndoZXJlIiwid2hlcmVSYXciLCJ0b0xvd2VyQ2FzZSIsImZyb20iLCJ0byIsIndoZXJlQmV0d2VlbiIsIkRhdGUiXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUE7O0FBQ0E7Ozs7Ozs7O0FBRU8sTUFBTUEsWUFBWSxHQUFHLElBQUlDLGlCQUFKLEVBQXJCOztBQUVQRCxZQUFZLENBQUNFLFFBQWIsU0FDRyw0QkFBVyxDQUNWO0FBQ0VDLEVBQUFBLElBQUksRUFBRSxVQURSO0FBRUVDLEVBQUFBLElBQUksRUFBRTtBQUZSLENBRFUsRUFLVjtBQUNFRCxFQUFBQSxJQUFJLEVBQUUsTUFEUjtBQUVFQyxFQUFBQSxJQUFJLEVBQUU7QUFGUixDQUxVLENBQVgsQ0FESCxVQXFDRyw0QkFBVyxDQUNWO0FBQ0VELEVBQUFBLElBQUksRUFBRSxNQURSO0FBRUVDLEVBQUFBLElBQUksRUFBRSxVQUZSO0FBR0VDLEVBQUFBLFFBQVEsRUFBRTtBQUhaLENBRFUsRUFNVjtBQUNFRixFQUFBQSxJQUFJLEVBQUUsSUFEUjtBQUVFQyxFQUFBQSxJQUFJLEVBQUUsVUFGUjtBQUdFQyxFQUFBQSxRQUFRLEVBQUU7QUFIWixDQU5VLENBQVgsQ0FyQ0gsVUFBc0I7QUFXcEJDLEVBQUFBLElBQUksQ0FBQ0MsS0FBRCxFQUFRQyxRQUFSLEVBQWtCQyxRQUFsQixFQUE0QkgsSUFBNUIsRUFBa0M7QUFDcEMsUUFBSUEsSUFBSSxLQUFLSSxTQUFiLEVBQXdCO0FBQ3RCSixNQUFBQSxJQUFJLEdBQUdHLFFBQVA7QUFDQUEsTUFBQUEsUUFBUSxHQUFHLFVBQVg7QUFDRDs7QUFDRCxVQUFNRSxTQUFTLEdBQUc7QUFDaEIsZ0JBQVVMLElBQUksSUFBSUEsSUFERjtBQUVoQixrQkFBWUEsSUFBSSxJQUFLLElBQUdBLElBQUssR0FGYjtBQUdoQixxQkFBZUEsSUFBSSxJQUFLLEdBQUVBLElBQUssR0FIZjtBQUloQixtQkFBYUEsSUFBSSxJQUFLLElBQUdBLElBQUs7QUFKZCxLQUFsQjs7QUFNQSxRQUFJQSxJQUFKLEVBQVU7QUFBQTs7QUFDUixZQUFNTSxPQUFPLDBCQUFHRCxTQUFTLENBQUNGLFFBQUQsQ0FBWixxQkFBRyx5QkFBQUUsU0FBUyxFQUFhTCxJQUFiLENBQXpCOztBQUNBLFVBQUlNLE9BQUosRUFBYTtBQUNYLFlBQUlMLEtBQUssQ0FBQ00sWUFBTixFQUFKLEVBQTBCO0FBQ3hCTixVQUFBQSxLQUFLLENBQUNPLEtBQU4sQ0FBWU4sUUFBWixFQUFzQixPQUF0QixFQUErQkksT0FBL0I7QUFDRCxTQUZELE1BRU87QUFDTEwsVUFBQUEsS0FBSyxDQUFDUSxRQUFOLENBQ0csa0JBREgsRUFFRSxDQUFDUCxRQUFELEVBQVdJLE9BQU8sQ0FBQ0ksV0FBUixFQUFYLENBRkY7QUFJRDtBQUNGO0FBQ0Y7QUFDRixHQW5DbUI7O0FBaURwQixlQUFhVCxLQUFiLEVBQW9CQyxRQUFwQixFQUE4QlMsSUFBOUIsRUFBb0NDLEVBQXBDLEVBQXdDO0FBQ3RDLFFBQUlELElBQUksSUFBSUMsRUFBWixFQUFnQjtBQUNkWCxNQUFBQSxLQUFLLENBQUNZLFlBQU4sQ0FBbUJYLFFBQW5CLEVBQTZCLENBQUMsSUFBSVksSUFBSixDQUFTSCxJQUFULENBQUQsRUFBaUIsSUFBSUcsSUFBSixDQUFTRixFQUFULENBQWpCLENBQTdCO0FBQ0QsS0FGRCxNQUVPLElBQUlELElBQUosRUFBVTtBQUNmVixNQUFBQSxLQUFLLENBQUNPLEtBQU4sQ0FBWU4sUUFBWixFQUFzQixJQUF0QixFQUE0QixJQUFJWSxJQUFKLENBQVNILElBQVQsQ0FBNUI7QUFDRCxLQUZNLE1BRUEsSUFBSUMsRUFBSixFQUFRO0FBQ2JYLE1BQUFBLEtBQUssQ0FBQ08sS0FBTixDQUFZTixRQUFaLEVBQXNCLElBQXRCLEVBQTRCLElBQUlZLElBQUosQ0FBU0YsRUFBVCxDQUE1QjtBQUNELEtBRk0sTUFFQSxDQUVOO0FBQ0Y7O0FBM0RtQixDQUF0Qix5SUFpREUsWUFqREYsaURBaURFLFlBakRGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlZ2lzdHJ5IGZyb20gJy4vUmVnaXN0cnknXG5pbXBvcnQgeyBwYXJhbWV0ZXJzIH0gZnJvbSAnQC9kZWNvcmF0b3JzJ1xuXG5leHBvcnQgY29uc3QgUXVlcnlGaWx0ZXJzID0gbmV3IFJlZ2lzdHJ5KClcblxuUXVlcnlGaWx0ZXJzLnJlZ2lzdGVyKHtcbiAgQHBhcmFtZXRlcnMoW1xuICAgIHtcbiAgICAgIG5hbWU6ICdvcGVyYXRvcicsXG4gICAgICB0eXBlOiAnc3RyaW5nJ1xuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3RleHQnLFxuICAgICAgdHlwZTogJ3N0cmluZydcbiAgICB9XG4gIF0pXG4gIHRleHQocXVlcnksIHByb3BlcnR5LCBvcGVyYXRvciwgdGV4dCkge1xuICAgIGlmICh0ZXh0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRleHQgPSBvcGVyYXRvclxuICAgICAgb3BlcmF0b3IgPSAnY29udGFpbnMnXG4gICAgfVxuICAgIGNvbnN0IHRlbXBsYXRlcyA9IHtcbiAgICAgICdlcXVhbHMnOiB0ZXh0ID0+IHRleHQsXG4gICAgICAnY29udGFpbnMnOiB0ZXh0ID0+IGAlJHt0ZXh0fSVgLFxuICAgICAgJ3N0YXJ0cy13aXRoJzogdGV4dCA9PiBgJHt0ZXh0fSVgLFxuICAgICAgJ2VuZHMtd2l0aCc6IHRleHQgPT4gYCUke3RleHR9YFxuICAgIH1cbiAgICBpZiAodGV4dCkge1xuICAgICAgY29uc3Qgb3BlcmFuZCA9IHRlbXBsYXRlc1tvcGVyYXRvcl0/Lih0ZXh0KVxuICAgICAgaWYgKG9wZXJhbmQpIHtcbiAgICAgICAgaWYgKHF1ZXJ5LmlzUG9zdGdyZVNRTCgpKSB7XG4gICAgICAgICAgcXVlcnkud2hlcmUocHJvcGVydHksICdJTElLRScsIG9wZXJhbmQpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcXVlcnkud2hlcmVSYXcoXG4gICAgICAgICAgICBgTE9XRVIoPz8pIExJS0UgP2AsXG4gICAgICAgICAgICBbcHJvcGVydHksIG9wZXJhbmQudG9Mb3dlckNhc2UoKV1cbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgQHBhcmFtZXRlcnMoW1xuICAgIHtcbiAgICAgIG5hbWU6ICdmcm9tJyxcbiAgICAgIHR5cGU6ICdkYXRldGltZScsXG4gICAgICBudWxsYWJsZTogdHJ1ZVxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3RvJyxcbiAgICAgIHR5cGU6ICdkYXRldGltZScsXG4gICAgICBudWxsYWJsZTogdHJ1ZVxuICAgIH1cbiAgXSlcbiAgJ2RhdGUtcmFuZ2UnKHF1ZXJ5LCBwcm9wZXJ0eSwgZnJvbSwgdG8pIHtcbiAgICBpZiAoZnJvbSAmJiB0bykge1xuICAgICAgcXVlcnkud2hlcmVCZXR3ZWVuKHByb3BlcnR5LCBbbmV3IERhdGUoZnJvbSksIG5ldyBEYXRlKHRvKV0pXG4gICAgfSBlbHNlIGlmIChmcm9tKSB7XG4gICAgICBxdWVyeS53aGVyZShwcm9wZXJ0eSwgJz49JywgbmV3IERhdGUoZnJvbSkpXG4gICAgfSBlbHNlIGlmICh0bykge1xuICAgICAgcXVlcnkud2hlcmUocHJvcGVydHksICc8PScsIG5ldyBEYXRlKHRvKSlcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVE9ETzogQ2FuIHdlIGdldCB2YWxpZGF0aW9uIHRvIGNhdGNoIHRoZSBjYXNlIHdoZXJlIGJvdGggYXJlIGVtcHR5P1xuICAgIH1cbiAgfVxufSlcbiJdfQ==
82
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9xdWVyeS9RdWVyeUZpbHRlcnMuanMiXSwibmFtZXMiOlsiUXVlcnlGaWx0ZXJzIiwiUmVnaXN0cnkiLCJyZWdpc3RlciIsIm5hbWUiLCJ0eXBlIiwibnVsbGFibGUiLCJ0ZXh0IiwicXVlcnkiLCJwcm9wZXJ0eSIsIm9wZXJhdG9yIiwidW5kZWZpbmVkIiwidGVtcGxhdGVzIiwib3BlcmFuZCIsImlzUG9zdGdyZVNRTCIsIndoZXJlIiwid2hlcmVSYXciLCJ0b0xvd2VyQ2FzZSIsImZyb20iLCJ0byIsIndoZXJlQmV0d2VlbiIsIkRhdGUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOzs7Ozs7OztBQUVPLE1BQU1BLFlBQVksR0FBRyxJQUFJQyxpQkFBSixFQUFyQjs7QUFFUEQsWUFBWSxDQUFDRSxRQUFiLFNBQ0csNEJBQVcsQ0FDVjtBQUNFQyxFQUFBQSxJQUFJLEVBQUUsVUFEUjtBQUVFQyxFQUFBQSxJQUFJLEVBQUU7QUFGUixDQURVLEVBS1Y7QUFDRUQsRUFBQUEsSUFBSSxFQUFFLE1BRFI7QUFFRUMsRUFBQUEsSUFBSSxFQUFFO0FBRlIsQ0FMVSxDQUFYLENBREgsVUFxQ0csNEJBQVcsQ0FDVjtBQUNFRCxFQUFBQSxJQUFJLEVBQUUsTUFEUjtBQUVFQyxFQUFBQSxJQUFJLEVBQUUsVUFGUjtBQUdFQyxFQUFBQSxRQUFRLEVBQUU7QUFIWixDQURVLEVBTVY7QUFDRUYsRUFBQUEsSUFBSSxFQUFFLElBRFI7QUFFRUMsRUFBQUEsSUFBSSxFQUFFLFVBRlI7QUFHRUMsRUFBQUEsUUFBUSxFQUFFO0FBSFosQ0FOVSxDQUFYLENBckNILFVBQXNCO0FBV3BCQyxFQUFBQSxJQUFJLENBQUNDLEtBQUQsRUFBUUMsUUFBUixFQUFrQkMsUUFBbEIsRUFBNEJILElBQTVCLEVBQWtDO0FBQ3BDLFFBQUlBLElBQUksS0FBS0ksU0FBYixFQUF3QjtBQUN0QkosTUFBQUEsSUFBSSxHQUFHRyxRQUFQO0FBQ0FBLE1BQUFBLFFBQVEsR0FBRyxVQUFYO0FBQ0Q7O0FBQ0QsVUFBTUUsU0FBUyxHQUFHO0FBQ2hCLGdCQUFVTCxJQUFJLElBQUlBLElBREY7QUFFaEIsa0JBQVlBLElBQUksSUFBSyxJQUFHQSxJQUFLLEdBRmI7QUFHaEIscUJBQWVBLElBQUksSUFBSyxHQUFFQSxJQUFLLEdBSGY7QUFJaEIsbUJBQWFBLElBQUksSUFBSyxJQUFHQSxJQUFLO0FBSmQsS0FBbEI7O0FBTUEsUUFBSUEsSUFBSixFQUFVO0FBQUE7O0FBQ1IsWUFBTU0sT0FBTywwQkFBR0QsU0FBUyxDQUFDRixRQUFELENBQVoscUJBQUcseUJBQUFFLFNBQVMsRUFBYUwsSUFBYixDQUF6Qjs7QUFDQSxVQUFJTSxPQUFKLEVBQWE7QUFDWCxZQUFJTCxLQUFLLENBQUNNLFlBQU4sRUFBSixFQUEwQjtBQUN4Qk4sVUFBQUEsS0FBSyxDQUFDTyxLQUFOLENBQVlOLFFBQVosRUFBc0IsT0FBdEIsRUFBK0JJLE9BQS9CO0FBQ0QsU0FGRCxNQUVPO0FBQ0xMLFVBQUFBLEtBQUssQ0FBQ1EsUUFBTixDQUNHLGtCQURILEVBRUUsQ0FBQ1AsUUFBRCxFQUFXSSxPQUFPLENBQUNJLFdBQVIsRUFBWCxDQUZGO0FBSUQ7QUFDRjtBQUNGO0FBQ0YsR0FuQ21COztBQWlEcEIsZUFBYVQsS0FBYixFQUFvQkMsUUFBcEIsRUFBOEJTLElBQTlCLEVBQW9DQyxFQUFwQyxFQUF3QztBQUN0QyxRQUFJRCxJQUFJLElBQUlDLEVBQVosRUFBZ0I7QUFDZFgsTUFBQUEsS0FBSyxDQUFDWSxZQUFOLENBQW1CWCxRQUFuQixFQUE2QixDQUFDLElBQUlZLElBQUosQ0FBU0gsSUFBVCxDQUFELEVBQWlCLElBQUlHLElBQUosQ0FBU0YsRUFBVCxDQUFqQixDQUE3QjtBQUNELEtBRkQsTUFFTyxJQUFJRCxJQUFKLEVBQVU7QUFDZlYsTUFBQUEsS0FBSyxDQUFDTyxLQUFOLENBQVlOLFFBQVosRUFBc0IsSUFBdEIsRUFBNEIsSUFBSVksSUFBSixDQUFTSCxJQUFULENBQTVCO0FBQ0QsS0FGTSxNQUVBLElBQUlDLEVBQUosRUFBUTtBQUNiWCxNQUFBQSxLQUFLLENBQUNPLEtBQU4sQ0FBWU4sUUFBWixFQUFzQixJQUF0QixFQUE0QixJQUFJWSxJQUFKLENBQVNGLEVBQVQsQ0FBNUI7QUFDRCxLQUZNLE1BRUEsQ0FFTjtBQUNGOztBQTNEbUIsQ0FBdEIseUlBaURFLFlBakRGLGlEQWlERSxZQWpERiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWdpc3RyeSBmcm9tICcuL1JlZ2lzdHJ5J1xuaW1wb3J0IHsgcGFyYW1ldGVycyB9IGZyb20gJ0AvZGVjb3JhdG9ycydcblxuZXhwb3J0IGNvbnN0IFF1ZXJ5RmlsdGVycyA9IG5ldyBSZWdpc3RyeSgpXG5cblF1ZXJ5RmlsdGVycy5yZWdpc3Rlcih7XG4gIEBwYXJhbWV0ZXJzKFtcbiAgICB7XG4gICAgICBuYW1lOiAnb3BlcmF0b3InLFxuICAgICAgdHlwZTogJ3N0cmluZydcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICd0ZXh0JyxcbiAgICAgIHR5cGU6ICdzdHJpbmcnXG4gICAgfVxuICBdKVxuICB0ZXh0KHF1ZXJ5LCBwcm9wZXJ0eSwgb3BlcmF0b3IsIHRleHQpIHtcbiAgICBpZiAodGV4dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0ZXh0ID0gb3BlcmF0b3JcbiAgICAgIG9wZXJhdG9yID0gJ2NvbnRhaW5zJ1xuICAgIH1cbiAgICBjb25zdCB0ZW1wbGF0ZXMgPSB7XG4gICAgICAnZXF1YWxzJzogdGV4dCA9PiB0ZXh0LFxuICAgICAgJ2NvbnRhaW5zJzogdGV4dCA9PiBgJSR7dGV4dH0lYCxcbiAgICAgICdzdGFydHMtd2l0aCc6IHRleHQgPT4gYCR7dGV4dH0lYCxcbiAgICAgICdlbmRzLXdpdGgnOiB0ZXh0ID0+IGAlJHt0ZXh0fWBcbiAgICB9XG4gICAgaWYgKHRleHQpIHtcbiAgICAgIGNvbnN0IG9wZXJhbmQgPSB0ZW1wbGF0ZXNbb3BlcmF0b3JdPy4odGV4dClcbiAgICAgIGlmIChvcGVyYW5kKSB7XG4gICAgICAgIGlmIChxdWVyeS5pc1Bvc3RncmVTUUwoKSkge1xuICAgICAgICAgIHF1ZXJ5LndoZXJlKHByb3BlcnR5LCAnSUxJS0UnLCBvcGVyYW5kKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHF1ZXJ5LndoZXJlUmF3KFxuICAgICAgICAgICAgYExPV0VSKD8/KSBMSUtFID9gLFxuICAgICAgICAgICAgW3Byb3BlcnR5LCBvcGVyYW5kLnRvTG93ZXJDYXNlKCldXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIEBwYXJhbWV0ZXJzKFtcbiAgICB7XG4gICAgICBuYW1lOiAnZnJvbScsXG4gICAgICB0eXBlOiAnZGF0ZXRpbWUnLFxuICAgICAgbnVsbGFibGU6IHRydWVcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6ICd0bycsXG4gICAgICB0eXBlOiAnZGF0ZXRpbWUnLFxuICAgICAgbnVsbGFibGU6IHRydWVcbiAgICB9XG4gIF0pXG4gICdkYXRlLXJhbmdlJyhxdWVyeSwgcHJvcGVydHksIGZyb20sIHRvKSB7XG4gICAgaWYgKGZyb20gJiYgdG8pIHtcbiAgICAgIHF1ZXJ5LndoZXJlQmV0d2Vlbihwcm9wZXJ0eSwgW25ldyBEYXRlKGZyb20pLCBuZXcgRGF0ZSh0byldKVxuICAgIH0gZWxzZSBpZiAoZnJvbSkge1xuICAgICAgcXVlcnkud2hlcmUocHJvcGVydHksICc+PScsIG5ldyBEYXRlKGZyb20pKVxuICAgIH0gZWxzZSBpZiAodG8pIHtcbiAgICAgIHF1ZXJ5LndoZXJlKHByb3BlcnR5LCAnPD0nLCBuZXcgRGF0ZSh0bykpXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRPRE86IENhbiB3ZSBnZXQgdmFsaWRhdGlvbiB0byBjYXRjaCB0aGUgY2FzZSB3aGVyZSBib3RoIGFyZSBlbXB0eT9cbiAgICB9XG4gIH1cbn0pXG4iXX0=
@@ -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 _QueryBuilder = require("./QueryBuilder");
@@ -25,4 +31,4 @@ Object.keys(_QueryParameters).forEach(function (key) {
25
31
  if (key in exports && exports[key] === _QueryParameters[key]) return;
26
32
  exports[key] = _QueryParameters[key];
27
33
  });
28
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9xdWVyeS9pbmRleC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUE7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFDQTs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUNBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL1F1ZXJ5QnVpbGRlcidcbmV4cG9ydCAqIGZyb20gJy4vUXVlcnlGaWx0ZXJzJ1xuZXhwb3J0ICogZnJvbSAnLi9RdWVyeVBhcmFtZXRlcnMnXG4iXX0=
34
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9xdWVyeS9pbmRleC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQUE7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFDQTs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUNBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL1F1ZXJ5QnVpbGRlcidcbmV4cG9ydCAqIGZyb20gJy4vUXVlcnlGaWx0ZXJzJ1xuZXhwb3J0ICogZnJvbSAnLi9RdWVyeVBhcmFtZXRlcnMnXG4iXX0=
@@ -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 _empty = require("./_empty");
@@ -17,4 +23,4 @@ Object.keys(_required).forEach(function (key) {
17
23
  if (key in exports && exports[key] === _required[key]) return;
18
24
  exports[key] = _required[key];
19
25
  });
20
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zY2hlbWEvZm9ybWF0cy9pbmRleC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUE7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFDQTs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9fZW1wdHknXG5leHBvcnQgKiBmcm9tICcuL19yZXF1aXJlZCdcbiJdfQ==
26
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zY2hlbWEvZm9ybWF0cy9pbmRleC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQUE7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFDQTs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9fZW1wdHknXG5leHBvcnQgKiBmcm9tICcuL19yZXF1aXJlZCdcbiJdfQ==
@@ -2,12 +2,20 @@
2
2
 
3
3
  require("core-js/modules/esnext.weak-map.delete-all.js");
4
4
 
5
+ require("core-js/modules/esnext.weak-map.emplace.js");
6
+
7
+ require("core-js/modules/esnext.async-iterator.for-each.js");
8
+
9
+ require("core-js/modules/esnext.iterator.constructor.js");
10
+
11
+ require("core-js/modules/esnext.iterator.for-each.js");
12
+
5
13
  exports.__esModule = true;
6
14
  var _exportNames = {
7
15
  keywords: true,
8
16
  formats: true
9
17
  };
10
- exports.formats = exports.keywords = void 0;
18
+ exports.keywords = exports.formats = void 0;
11
19
 
12
20
  var _keywords = _interopRequireWildcard(require("./keywords"));
13
21
 
@@ -38,4 +46,4 @@ Object.keys(_relations).forEach(function (key) {
38
46
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
39
47
 
40
48
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
41
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY2hlbWEvaW5kZXguanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFDQTs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBhcyBrZXl3b3JkcyBmcm9tICcuL2tleXdvcmRzJ1xuZXhwb3J0ICogYXMgZm9ybWF0cyBmcm9tICcuL2Zvcm1hdHMnXG5leHBvcnQgKiBmcm9tICcuL3Byb3BlcnRpZXMnXG5leHBvcnQgKiBmcm9tICcuL3JlbGF0aW9ucydcbiJdfQ==
49
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY2hlbWEvaW5kZXguanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUE7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUNBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGFzIGtleXdvcmRzIGZyb20gJy4va2V5d29yZHMnXG5leHBvcnQgKiBhcyBmb3JtYXRzIGZyb20gJy4vZm9ybWF0cydcbmV4cG9ydCAqIGZyb20gJy4vcHJvcGVydGllcydcbmV4cG9ydCAqIGZyb20gJy4vcmVsYXRpb25zJ1xuIl19
@@ -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 _specificType = require("./_specificType");
@@ -97,4 +103,4 @@ Object.keys(_range).forEach(function (key) {
97
103
  if (key in exports && exports[key] === _range[key]) return;
98
104
  exports[key] = _range[key];
99
105
  });
100
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zY2hlbWEva2V5d29yZHMvaW5kZXguanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQ0E7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFDQTs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUNBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQ0E7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFDQTs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUNBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQ0E7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFDQTs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUNBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQ0E7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFDQTs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9fc3BlY2lmaWNUeXBlJ1xuZXhwb3J0ICogZnJvbSAnLi9fcHJpbWFyeSdcbmV4cG9ydCAqIGZyb20gJy4vX2ZvcmVpZ24nXG5leHBvcnQgKiBmcm9tICcuL191bmlxdWUnXG5leHBvcnQgKiBmcm9tICcuL19pbmRleCdcbmV4cG9ydCAqIGZyb20gJy4vX2NvbXB1dGVkJ1xuZXhwb3J0ICogZnJvbSAnLi9faGlkZGVuJ1xuZXhwb3J0ICogZnJvbSAnLi9fdW5zaWduZWQnXG5leHBvcnQgKiBmcm9tICcuL19pbnN0YW5jZW9mJ1xuZXhwb3J0ICogZnJvbSAnLi9fdmFsaWRhdGUnXG5leHBvcnQgKiBmcm9tICcuL19yZWxhdGUnXG5leHBvcnQgKiBmcm9tICcuL19yYW5nZSdcbiJdfQ==
106
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zY2hlbWEva2V5d29yZHMvaW5kZXguanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQ0E7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFDQTs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUNBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQ0E7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFDQTs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUNBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQ0E7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFDQTs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUNBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQ0E7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFDQTs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9fc3BlY2lmaWNUeXBlJ1xuZXhwb3J0ICogZnJvbSAnLi9fcHJpbWFyeSdcbmV4cG9ydCAqIGZyb20gJy4vX2ZvcmVpZ24nXG5leHBvcnQgKiBmcm9tICcuL191bmlxdWUnXG5leHBvcnQgKiBmcm9tICcuL19pbmRleCdcbmV4cG9ydCAqIGZyb20gJy4vX2NvbXB1dGVkJ1xuZXhwb3J0ICogZnJvbSAnLi9faGlkZGVuJ1xuZXhwb3J0ICogZnJvbSAnLi9fdW5zaWduZWQnXG5leHBvcnQgKiBmcm9tICcuL19pbnN0YW5jZW9mJ1xuZXhwb3J0ICogZnJvbSAnLi9fdmFsaWRhdGUnXG5leHBvcnQgKiBmcm9tICcuL19yZWxhdGUnXG5leHBvcnQgKiBmcm9tICcuL19yYW5nZSdcbiJdfQ==
@@ -5,6 +5,16 @@ exports.convertSchema = convertSchema;
5
5
  exports.expandProperties = expandProperties;
6
6
  exports.expandSchemaShorthand = expandSchemaShorthand;
7
7
 
8
+ require("core-js/modules/esnext.async-iterator.map.js");
9
+
10
+ require("core-js/modules/esnext.iterator.map.js");
11
+
12
+ require("core-js/modules/esnext.async-iterator.find.js");
13
+
14
+ require("core-js/modules/esnext.iterator.constructor.js");
15
+
16
+ require("core-js/modules/esnext.iterator.find.js");
17
+
8
18
  var _utils = require("@ditojs/utils");
9
19
 
10
20
  function convertSchema(schema, options = {}) {
@@ -214,4 +224,4 @@ const jsonTypes = {
214
224
  const excludeDefaults = {
215
225
  'now()': true
216
226
  };
217
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY2hlbWEvcHJvcGVydGllcy5qcyJdLCJuYW1lcyI6WyJjb252ZXJ0U2NoZW1hIiwic2NoZW1hIiwib3B0aW9ucyIsInR5cGUiLCJtYXAiLCJlbnRyeSIsInJlcXVpcmVkIiwicmVzdCIsImpzb25UeXBlIiwianNvblR5cGVzIiwic2V0QWRkaXRpb25hbFByb3BlcnRpZXMiLCJwcm9wZXJ0aWVzIiwiZXhwYW5kUHJvcGVydGllcyIsImxlbmd0aCIsInBhdHRlcm5Qcm9wZXJ0aWVzIiwiYWRkaXRpb25hbFByb3BlcnRpZXMiLCJpdGVtcyIsImluY2x1ZGVzIiwiYWRkRm9ybWF0IiwidXNlSW5zdGFuY2VPZiIsImluc3RhbmNlb2YiLCIkcmVmIiwibnVsbGFibGUiLCJvbmVPZiIsImV4cGFuZGVkIiwiZXhwYW5kU2NoZW1hU2hvcnRoYW5kIiwia2V5IiwiZXhjbHVkZURlZmF1bHRzIiwiZGVmYXVsdCIsImVudW0iLCJwdXNoIiwic2NoZW1hUHJvcGVydGllcyIsInByb3BlcnR5IiwiT2JqZWN0IiwiZW50cmllcyIsImFsbE9mIiwiYW55T2YiLCJub3QiLCJ2YWx1ZSIsIm5ld0Zvcm1hdCIsImZvcm1hdCIsImZpbmQiLCJzdHJpbmciLCJ0ZXh0IiwibnVtYmVyIiwiaW50ZWdlciIsImJvb2xlYW4iLCJvYmplY3QiLCJhcnJheSJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBOztBQUVPLFNBQVNBLGFBQVQsQ0FBdUJDLE1BQXZCLEVBQStCQyxPQUFPLEdBQUcsRUFBekMsRUFBNkM7QUFDbEQsTUFBSSxxQkFBU0QsTUFBVCxDQUFKLEVBQXNCO0FBR3BCQSxJQUFBQSxNQUFNLEdBQUc7QUFBRUUsTUFBQUEsSUFBSSxFQUFFRjtBQUFSLEtBQVQ7QUFDRCxHQUpELE1BSU8sSUFBSSxvQkFBUUEsTUFBUixDQUFKLEVBQXFCO0FBRTFCQSxJQUFBQSxNQUFNLEdBQUdBLE1BQU0sQ0FBQ0csR0FBUCxDQUFXQyxLQUFLLElBQUlMLGFBQWEsQ0FBQ0ssS0FB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QUFNLEVBQUVEO0FBQVYsT0FBdkI7QUFDQXRDLE1BQUFBLE1BQU0sR0FBRyxFQUFFLEdBQUdNLElBQUw7QUFBVzRCLFFBQUFBO0FBQVgsT0FBVDtBQUNEO0FBQ0YsR0FORCxNQU1PO0FBQ0xsQyxJQUFBQSxNQUFNLENBQUN1QyxNQUFQLEdBQWdCRCxTQUFoQjtBQUNEOztBQUNELFNBQU90QyxNQUFQO0FBQ0Q7O0FBS0QsTUFBTVEsU0FBUyxHQUFHO0FBQ2hCaUMsRUFBQUEsTUFBTSxFQUFFLFFBRFE7QUFFaEJDLEVBQUFBLElBQUksRUFBRSxRQUZVO0FBR2hCQyxFQUFBQSxNQUFNLEVBQUUsUUFIUTtBQUloQkMsRUFBQUEsT0FBTyxFQUFFLFNBSk87QUFLaEJDLEVBQUFBLE9BQU8sRUFBRSxTQUxPO0FBTWhCQyxFQUFBQSxNQUFNLEVBQUUsUUFOUTtBQU9oQkMsRUFBQUEsS0FBSyxFQUFFO0FBUFMsQ0FBbEI7QUFVQSxNQUFNckIsZUFBZSxHQUFHO0FBQ3RCLFdBQVM7QUFEYSxDQUF4QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzT2JqZWN0LCBpc0FycmF5LCBpc1N0cmluZyB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0U2NoZW1hKHNjaGVtYSwgb3B0aW9ucyA9IHt9KSB7XG4gIGlmIChpc1N0cmluZyhzY2hlbWEpKSB7XG4gICAgLy8gVE9ETzogQ29uc2lkZXIgcmVtb3Zpbmcgc3RyaW5nIHNob3J0LWhhbmRcbiAgICAvLyBOZXN0ZWQgc2hvcnRoYW5kIGV4cGFuc2lvblxuICAgIHNjaGVtYSA9IHsgdHlwZTogc2NoZW1hIH1cbiAgfSBlbHNlIGlmIChpc0FycmF5KHNjaGVtYSkpIHtcbiAgICAvLyBOZWVkZWQgZm9yIGFsbE9mLCBhbnlPZiwgb25lT2YsIG5vdCwgaXRlbXM6XG4gICAgc2NoZW1hID0gc2NoZW1hLm1hcChlbnRyeSA9PiBjb252ZXJ0U2NoZW1hKGVudHJ5LCBvcHRpb25zKSlcbiAgfVxuICBpZiAoaXNPYmplY3Qoc2NoZW1hKSkge1xuICAgIGNvbnN0IHsgdHlwZSB9ID0gc2NoZW1hXG4gICAgLy8gQ3JlYXRlIGEgc2hhbGxvdyBjbG9uZSBzbyB3ZSBjYW4gbW9kaWZ5IGFuZCByZXR1cm4sIGV4Y2x1ZGluZyBvdXJcbiAgICAvLyBgcmVxdWlyZWRgIGJvb2xlYW4gd2hpY2ggd2lsbCBnZXQgY29udmVydGVkIHRvIGEgZm9ybWF0IGZ1cnRoZXIgZG93biwgYW5kXG4gICAgLy8gdG8gSlNPTiBzY2hlbWEncyBgcmVxdWlyZWRgIGFycmF5IHRocm91Z2ggYGV4cGFuZFByb3BlcnRpZXMoKWA6XG4gICAgY29uc3QgeyByZXF1aXJlZCwgLi4ucmVzdCB9ID0gc2NoZW1hXG4gICAgc2NoZW1hID0gcmVzdFxuICAgIGlmIChpc1N0cmluZyh0eXBlKSkge1xuICAgICAgLy8gQ29udmVydCBzY2hlbWEgcHJvcGVydHkgbm90YXRpb24gdG8gSlNPTiBzY2hlbWFcbiAgICAgIGNvbnN0IGpzb25UeXBlID0ganNvblR5cGVzW3R5cGVdXG4gICAgICBpZiAoanNvblR5cGUpIHtcbiAgICAgICAgc2NoZW1hLnR5cGUgPSBqc29uVHlwZVxuICAgICAgICBpZiAoanNvblR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgbGV0IHNldEFkZGl0aW9uYWxQcm9wZXJ0aWVzID0gZmFsc2VcbiAgICAgICAgICBpZiAoc2NoZW1hLnByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgcHJvcGVydGllcywgcmVxdWlyZWQgfSA9IGV4cGFuZFByb3BlcnRpZXMoXG4gICAgICAgICAgICAgIHNjaGVtYS5wcm9wZXJ0aWVzLFxuICAgICAgICAgICAgICBvcHRpb25zXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBzY2hlbWEucHJvcGVydGllcyA9IHByb3BlcnRpZXNcbiAgICAgICAgICAgIGlmIChyZXF1aXJlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIHNjaGVtYS5yZXF1aXJlZCA9IHJlcXVpcmVkXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZXRBZGRpdGlvbmFsUHJvcGVydGllcyA9IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHNjaGVtYS5wYXR0ZXJuUHJvcGVydGllcykge1xuICAgICAgICAgICAgY29uc3QgeyBwcm9wZXJ0aWVzIH0gPSBleHBhbmRQcm9wZXJ0aWVzKFxuICAgICAgICAgICAgICBzY2hlbWEucGF0dGVyblByb3BlcnRpZXMsXG4gICAgICAgICAgICAgIG9wdGlvbnNcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIHNjaGVtYS5wYXR0ZXJuUHJvcGVydGllcyA9IHByb3BlcnRpZXNcbiAgICAgICAgICAgIHNldEFkZGl0aW9uYWxQcm9wZXJ0aWVzID0gdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoc2V0QWRkaXRpb25hbFByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgIC8vIEludmVydCB0aGUgbG9naWMgb2YgYGFkZGl0aW9uYWxQcm9wZXJ0aWVzYCBzbyB0aGF0IGl0IG5lZWRzIHRvIGJlXG4gICAgICAgICAgICAvLyBleHBsaWNpdGVseSBzZXQgdG8gYHRydWVgOlxuICAgICAgICAgICAgaWYgKCEoJ2FkZGl0aW9uYWxQcm9wZXJ0aWVzJyBpbiBzY2hlbWEpKSB7XG4gICAgICAgICAgICAgIHNjaGVtYS5hZGRpdGlvbmFsUHJvcGVydGllcyA9IGZhbHNlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGpzb25UeXBlID09PSAnYXJyYXknKSB7XG4gICAgICAgICAgY29uc3QgeyBpdGVtcyB9ID0gc2NoZW1hXG4gICAgICAgICAgaWYgKGl0ZW1zKSB7XG4gICAgICAgICAgICBzY2hlbWEuaXRlbXMgPSBjb252ZXJ0U2NoZW1hKGl0ZW1zLCBvcHRpb25zKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChbJ2RhdGUnLCAnZGF0ZXRpbWUnLCAndGltZXN0YW1wJ10uaW5jbHVkZXModHlwZSkpIHtcbiAgICAgICAgLy8gRGF0ZSBwcm9wZXJ0aWVzIGNhbiBiZSBzdWJtaXR0ZWQgYm90aCBhcyBhIHN0cmluZyBvciBhIERhdGUgb2JqZWN0LlxuICAgICAgICAvLyBQcm92aWRlIHZhbGlkYXRpb24gdGhyb3VnaCBkYXRlLXRpbWUgZm9ybWF0LCB3aGljaCBpbiBBanYgYXBwZWFyc1xuICAgICAgICAvLyB0byBoYW5kbGUgYm90aCB0eXBlcyBjb3JyZWN0bHkuXG4gICAgICAgIHNjaGVtYS50eXBlID0gWydzdHJpbmcnLCAnb2JqZWN0J11cbiAgICAgICAgc2NoZW1hID0gYWRkRm9ybWF0KHNjaGVtYSwgJ2RhdGUtdGltZScpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBBIHJlZmVyZW5jZSB0byBhbm90aGVyIG1vZGVsIGFzIG5lc3RlZCBKU09OIGRhdGEsIHVzZSAkcmVmIG9yXG4gICAgICAgIC8vIGluc3RhbmNlb2YgaW5zdGVhZCBvZiB0eXBlLCBiYXNlZCBvbiB0aGUgcGFzc2VkIG9wdGlvbjpcbiAgICAgICAgaWYgKG9wdGlvbnMudXNlSW5zdGFuY2VPZikge1xuICAgICAgICAgIHNjaGVtYS50eXBlID0gJ29iamVjdCdcbiAgICAgICAgICBzY2hlbWEuaW5zdGFuY2VvZiA9IHR5cGVcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBNb3ZlIGB0eXBlYCB0byBgJHJlZmAsIGJ1dCBzdGlsbCBrZWVwIG90aGVyIHByb3BlcnRpZXMgZm9yIG5vdyxcbiAgICAgICAgICAvLyB0byBzdXBwb3J0IGBudWxsYWJsZWAuXG4gICAgICAgICAgZGVsZXRlIHNjaGVtYS50eXBlXG4gICAgICAgICAgLy8gVE9ETzogQ29uc2lkZXIgbW92aW5nIHRvIGBtb2RlbGAga2V5d29yZCBpbnN0ZWFkIHRoYXQgd291bGQgc3VwcG9ydFxuICAgICAgICAgIC8vIG1vZGVsIHZhbGlkYXRpb24gYW5kIHN0aWxsIGNvdWxkIGJlIGNvbWJpbmVkIHdpdGggb3RoZXIga2V5d29yZHMuXG4gICAgICAgICAgc2NoZW1hLiRyZWYgPSB0eXBlXG4gICAgICAgICAgLy8gYCRyZWZgIGRvZXNuJ3QgcGxheSB3aXRoIGBudWxsYWJsZWAsIHNvIGNvbnZlcnQgdG8gYG9uZU9mYFxuICAgICAgICAgIGlmIChzY2hlbWEubnVsbGFibGUpIHtcbiAgICAgICAgICAgIGRlbGV0ZSBzY2hlbWEubnVsbGFibGVcbiAgICAgICAgICAgIHNjaGVtYSA9IHtcbiAgICAgICAgICAgICAgb25lT2Y6IFtcbiAgICAgICAgICAgICAgICB7IHR5cGU6ICdudWxsJyB9LFxuICAgICAgICAgICAgICAgIHNjaGVtYVxuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRoaXMgaXMgYSByb290IHByb3BlcnRpZXMgc2NoZW1hIG9yIG5lc3RlZCBvYmplY3Qgd2l0aG91dCB0eXBlIHRoYXRcbiAgICAgIC8vIG1heSBuZWVkIGV4cGFuZGluZy5cbiAgICAgIGNvbnN0IGV4cGFuZGVkID0gZXhwYW5kU2NoZW1hU2hvcnRoYW5kKHNjaGVtYSlcbiAgICAgIHNjaGVtYSA9IGV4cGFuZGVkICE9PSBzY2hlbWFcbiAgICAgICAgLy8gT25seSBjYWxsIGNvbnZlcnRTY2hlbWEoKSBpZiBpdCBhY3R1YWxseSBjaGFuZ2VkLi4uXG4gICAgICAgID8gY29udmVydFNjaGVtYShleHBhbmRlZCwgb3B0aW9ucylcbiAgICAgICAgOiBleHBhbmRlZFxuICAgICAgLy8gSGFuZGxlIG5lc3RlZCBhbGxPZiwgYW55T2YsIG9uZU9mLCBub3QgcHJvcGVydGllc1xuICAgICAgZm9yIChjb25zdCBrZXkgb2YgWydhbGxPZicsICdhbnlPZicsICdvbmVPZicsICdub3QnXSkge1xuICAgICAgICBpZiAoa2V5IGluIHNjaGVtYSkge1xuICAgICAgICAgIHNjaGVtYVtrZXldID0gY29udmVydFNjaGVtYShzY2hlbWFba2V5XSwgb3B0aW9ucylcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAocmVxdWlyZWQpIHtcbiAgICAgIC8vIE91ciAncmVxdWlyZWQnIGlzIG5vdCB0aGUgc2FtZSBhcyBKU09OIFNjaGVtYSdzOiBVc2UgdGhlICdyZXF1aXJlZCdcbiAgICAgIC8vIGZvcm1hdCBpbnN0ZWFkIHRoYXQgb25seSB2YWxpZGF0ZXMgaWYgdGhlIHJlcXVpcmVkIHZhbHVlIGlzIG5vdFxuICAgICAgLy8gZW1wdHksIG1lYW5pbmcgbmVpdGhlciBudWxsaXNoIG5vciBhbiBlbXB0eSBzdHJpbmcuXG4gICAgICBzY2hlbWEgPSBhZGRGb3JtYXQoc2NoZW1hLCAncmVxdWlyZWQnKVxuICAgIH1cbiAgICBpZiAoZXhjbHVkZURlZmF1bHRzW3NjaGVtYS5kZWZhdWx0XSkge1xuICAgICAgZGVsZXRlIHNjaGVtYS5kZWZhdWx0XG4gICAgfVxuICAgIC8vIE1ha2UgbnVsbGFibGUgd29yayB3aXRoIGVudW0sIHNlZSB0aGUgaXNzdWUgZm9yIG1vcmUgZGV0YWlsczpcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vYWp2LXZhbGlkYXRvci9hanYvaXNzdWVzLzE0NzFcbiAgICBpZiAoc2NoZW1hLm51bGxhYmxlICYmIHNjaGVtYS5lbnVtICYmICFzY2hlbWEuZW51bS5pbmNsdWRlcyhudWxsKSkge1xuICAgICAgc2NoZW1hLmVudW0ucHVzaChudWxsKVxuICAgIH1cbiAgfVxuICByZXR1cm4gc2NoZW1hXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHBhbmRQcm9wZXJ0aWVzKHNjaGVtYVByb3BlcnRpZXMsIG9wdGlvbnMpIHtcbiAgY29uc3QgcHJvcGVydGllcyA9IHt9XG4gIGNvbnN0IHJlcXVpcmVkID0gW11cbiAgZm9yIChsZXQgW2tleSwgcHJvcGVydHldIG9mIE9iamVjdC5lbnRyaWVzKHNjaGVtYVByb3BlcnRpZXMpKSB7XG4gICAgcHJvcGVydHkgPSBleHBhbmRTY2hlbWFTaG9ydGhhbmQocHJvcGVydHkpXG4gICAgcHJvcGVydGllc1trZXldID0gY29udmVydFNjaGVtYShwcm9wZXJ0eSwgb3B0aW9ucylcbiAgICBpZiAocHJvcGVydHk/LnJlcXVpcmVkKSB7XG4gICAgICByZXF1aXJlZC5wdXNoKGtleSlcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHsgcHJvcGVydGllcywgcmVxdWlyZWQgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZXhwYW5kU2NoZW1hU2hvcnRoYW5kKHNjaGVtYSkge1xuICAvLyBUT0RPOiBDb25zaWRlciByZW1vdmluZyBhbGwgc2hvcnQtaGFuZCBzY2hlbWEgZXhwYW5zaW9uLlxuICBpZiAoaXNTdHJpbmcoc2NoZW1hKSkge1xuICAgIHNjaGVtYSA9IHtcbiAgICAgIHR5cGU6IHNjaGVtYVxuICAgIH1cbiAgfSBlbHNlIGlmIChpc0FycmF5KHNjaGVtYSkpIHtcbiAgICBzY2hlbWEgPSB7XG4gICAgICB0eXBlOiAnYXJyYXknLFxuICAgICAgaXRlbXM6IHNjaGVtYS5sZW5ndGggPiAxID8gc2NoZW1hIDogc2NoZW1hWzBdLFxuICAgICAgLy8gVGhlIGFycmF5IHNob3J0LWZvcm1zIHNldHMgYW4gZW1wdHkgYXJyYXkgYXMgdGhlIGRlZmF1bHQuXG4gICAgICBkZWZhdWx0OiBbXVxuICAgIH1cbiAgfSBlbHNlIGlmIChcbiAgICAvLyBFeHBhbmQgb2JqZWN0cyB0byBgdHlwZTogJ29iamVjdCdgLi4uXG4gICAgaXNPYmplY3Qoc2NoZW1hKSAmJlxuICAgICEoXG4gICAgICAvLyAuLi5idXQgb25seSBpZiB0aGV5IGRvbid0IGRlZmluZSBhbnkgb2YgdGhlc2UgcHJvcGVydGllczpcbiAgICAgIGlzU3RyaW5nKHNjaGVtYS50eXBlKSB8fFxuICAgICAgaXNTdHJpbmcoc2NoZW1hLiRyZWYpIHx8XG4gICAgICBpc0FycmF5KHNjaGVtYS5hbGxPZikgfHxcbiAgICAgIGlzQXJyYXkoc2NoZW1hLmFueU9mKSB8fFxuICAgICAgaXNBcnJheShzY2hlbWEub25lT2YpIHx8XG4gICAgICBpc09iamVjdChzY2hlbWEubm90KVxuICAgIClcbiAgKSB7XG4gICAgLy8gU2VwYXJhdGUgb2JqZWN0IHNob3J0LWhhbmQgaW50byBwcm9wZXJ0eSBkZWZpbml0aW9ucyBhbmQgb3RoZXIgZmllbGRzLlxuICAgIGNvbnN0IHByb3BlcnRpZXMgPSB7fVxuICAgIGNvbnN0IHJlc3QgPSB7fVxuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHNjaGVtYSkpIHtcbiAgICAgIC8vIFByb3BlcnR5IGRlZmluaXRpb25zIGFyZSBlaXRoZXIgb2JqZWN0cyBvciBzdHJpbmcgLyBhcnJheSBzaG9ydC1oYW5kczpcbiAgICAgIGlmIChpc09iamVjdCh2YWx1ZSkgfHwgaXNTdHJpbmcodmFsdWUpIHx8IGlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHByb3BlcnRpZXNba2V5XSA9IHZhbHVlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN0W2tleV0gPSB2YWx1ZVxuICAgICAgfVxuICAgIH1cbiAgICBzY2hlbWEgPSB7XG4gICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgIHByb3BlcnRpZXMsXG4gICAgICAuLi5yZXN0XG4gICAgfVxuICB9XG4gIHJldHVybiBzY2hlbWFcbn1cblxuZnVuY3Rpb24gYWRkRm9ybWF0KHNjaGVtYSwgbmV3Rm9ybWF0KSB7XG4gIC8vIFN1cHBvcnQgbXVsdGlwbGUgYGZvcm1hdGAga2V5d29yZHMgdGhyb3VnaCBgYWxsT2ZgOlxuICBsZXQgeyBhbGxPZiwgZm9ybWF0LCAuLi5yZXN0IH0gPSBzY2hlbWFcbiAgaWYgKGZvcm1hdCB8fCBhbGxPZikge1xuICAgIGFsbE9mIHx8PSBbXVxuICAgIGlmICghYWxsT2YuZmluZCgoeyBmb3JtYXQgfSkgPT4gZm9ybWF0ID09PSBuZXdGb3JtYXQpKSB7XG4gICAgICBhbGxPZi5wdXNoKHsgZm9ybWF0IH0sIHsgZm9ybWF0OiBuZXdGb3JtYXQgfSlcbiAgICAgIHNjaGVtYSA9IHsgLi4ucmVzdCwgYWxsT2YgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBzY2hlbWEuZm9ybWF0ID0gbmV3Rm9ybWF0XG4gIH1cbiAgcmV0dXJuIHNjaGVtYVxufVxuXG4vLyBUYWJsZSB0byB0cmFuc2xhdGUgc2NoZW1hIHR5cGVzIHRvIEpTT04gc2NoZW1hIHR5cGVzLiBPdGhlciB0eXBlcyBhcmUgYWxsb3dlZFxuLy8gYWxzbywgZS5nLiAnZGF0ZScsICdkYXRldGltZScsICd0aW1lc3RhbXAnLCBidXQgdGhleSBuZWVkIHNwZWNpYWwgdHJlYXRtZW50LlxuLy8gQW55dGhpbmcgbm90IHJlY29nbml6ZWQgYXMgYSB0eXBlIGlzIHVzZWQgYXMgYSAkcmVmIGluc3RlYWQuXG5jb25zdCBqc29uVHlwZXMgPSB7XG4gIHN0cmluZzogJ3N0cmluZycsXG4gIHRleHQ6ICdzdHJpbmcnLFxuICBudW1iZXI6ICdudW1iZXInLFxuICBpbnRlZ2VyOiAnaW50ZWdlcicsXG4gIGJvb2xlYW46ICdib29sZWFuJyxcbiAgb2JqZWN0OiAnb2JqZWN0JyxcbiAgYXJyYXk6ICdhcnJheSdcbn1cblxuY29uc3QgZXhjbHVkZURlZmF1bHRzID0ge1xuICAnbm93KCknOiB0cnVlXG59XG4iXX0=
227
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY2hlbWEvcHJvcGVydGllcy5qcyJdLCJuYW1lcyI6WyJjb252ZXJ0U2NoZW1hIiwic2NoZW1hIiwib3B0aW9ucyIsInR5cGUiLCJtYXAiLCJlbnRyeSIsInJlcXVpcmVkIiwicmVzdCIsImpzb25UeXBlIiwianNvblR5cGVzIiwic2V0QWRkaXRpb25hbFByb3BlcnRpZXMiLCJwcm9wZXJ0aWVzIiwiZXhwYW5kUHJvcGVydGllcyIsImxlbmd0aCIsInBhdHRlcm5Qcm9wZXJ0aWVzIiwiYWRkaXRpb25hbFByb3BlcnRpZXMiLCJpdGVtcyIsImluY2x1ZGVzIiwiYWRkRm9ybWF0IiwidXNlSW5zdGFuY2VPZiIsImluc3RhbmNlb2YiLCIkcmVmIiwibnVsbGFibGUiLCJvbmVPZiIsImV4cGFuZGVkIiwiZXhwYW5kU2NoZW1hU2hvcnRoYW5kIiwia2V5IiwiZXhjbHVkZURlZmF1bHRzIiwiZGVmYXVsdCIsImVudW0iLCJwdXNoIiwic2NoZW1hUHJvcGVydGllcyIsInByb3BlcnR5IiwiT2JqZWN0IiwiZW50cmllcyIsImFsbE9mIiwiYW55T2YiLCJub3QiLCJ2YWx1ZSIsIm5ld0Zvcm1hdCIsImZvcm1hdCIsImZpbmQiLCJzdHJpbmciLCJ0ZXh0IiwibnVtYmVyIiwiaW50ZWdlciIsImJvb2xlYW4iLCJvYmplY3QiLCJhcnJheSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFFTyxTQUFTQSxhQUFULENBQXVCQyxNQUF2QixFQUErQkMsT0FBTyxHQUFHLEVBQXpDLEVBQTZDO0FBQ2xELE1BQUkscUJBQVNELE1BQVQsQ0FBSixFQUFzQjtBQUdwQkEsSUFBQUEsTUFBTSxHQUFHO0FBQUVFLE1BQUFBLElBQUksRUFBRUY7QUFBUixLQUFUO0FBQ0QsR0FKRCxNQUlPLElBQUksb0JBQVFBLE1BQVIsQ0FBSixFQUFxQjtBQUUxQkEsSUFBQUEsTUFBTSxHQUFHQSxNQUFNLENBQUNHLEdBQVAsQ0FBV0MsS0FBSyxJQUFJTCxhQUFh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RUEsUUFBQUEsTUFBTSxFQUFFRDtBQUFWLE9BQXZCO0FBQ0F0QyxNQUFBQSxNQUFNLEdBQUcsRUFBRSxHQUFHTSxJQUFMO0FBQVc0QixRQUFBQTtBQUFYLE9BQVQ7QUFDRDtBQUNGLEdBTkQsTUFNTztBQUNMbEMsSUFBQUEsTUFBTSxDQUFDdUMsTUFBUCxHQUFnQkQsU0FBaEI7QUFDRDs7QUFDRCxTQUFPdEMsTUFBUDtBQUNEOztBQUtELE1BQU1RLFNBQVMsR0FBRztBQUNoQmlDLEVBQUFBLE1BQU0sRUFBRSxRQURRO0FBRWhCQyxFQUFBQSxJQUFJLEVBQUUsUUFGVTtBQUdoQkMsRUFBQUEsTUFBTSxFQUFFLFFBSFE7QUFJaEJDLEVBQUFBLE9BQU8sRUFBRSxTQUpPO0FBS2hCQyxFQUFBQSxPQUFPLEVBQUUsU0FMTztBQU1oQkMsRUFBQUEsTUFBTSxFQUFFLFFBTlE7QUFPaEJDLEVBQUFBLEtBQUssRUFBRTtBQVBTLENBQWxCO0FBVUEsTUFBTXJCLGVBQWUsR0FBRztBQUN0QixXQUFTO0FBRGEsQ0FBeEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc09iamVjdCwgaXNBcnJheSwgaXNTdHJpbmcgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgZnVuY3Rpb24gY29udmVydFNjaGVtYShzY2hlbWEsIG9wdGlvbnMgPSB7fSkge1xuICBpZiAoaXNTdHJpbmcoc2NoZW1hKSkge1xuICAgIC8vIFRPRE86IENvbnNpZGVyIHJlbW92aW5nIHN0cmluZyBzaG9ydC1oYW5kXG4gICAgLy8gTmVzdGVkIHNob3J0aGFuZCBleHBhbnNpb25cbiAgICBzY2hlbWEgPSB7IHR5cGU6IHNjaGVtYSB9XG4gIH0gZWxzZSBpZiAoaXNBcnJheShzY2hlbWEpKSB7XG4gICAgLy8gTmVlZGVkIGZvciBhbGxPZiwgYW55T2YsIG9uZU9mLCBub3QsIGl0ZW1zOlxuICAgIHNjaGVtYSA9IHNjaGVtYS5tYXAoZW50cnkgPT4gY29udmVydFNjaGVtYShlbnRyeSwgb3B0aW9ucykpXG4gIH1cbiAgaWYgKGlzT2JqZWN0KHNjaGVtYSkpIHtcbiAgICBjb25zdCB7IHR5cGUgfSA9IHNjaGVtYVxuICAgIC8vIENyZWF0ZSBhIHNoYWxsb3cgY2xvbmUgc28gd2UgY2FuIG1vZGlmeSBhbmQgcmV0dXJuLCBleGNsdWRpbmcgb3VyXG4gICAgLy8gYHJlcXVpcmVkYCBib29sZWFuIHdoaWNoIHdpbGwgZ2V0IGNvbnZlcnRlZCB0byBhIGZvcm1hdCBmdXJ0aGVyIGRvd24sIGFuZFxuICAgIC8vIHRvIEpTT04gc2NoZW1hJ3MgYHJlcXVpcmVkYCBhcnJheSB0aHJvdWdoIGBleHBhbmRQcm9wZXJ0aWVzKClgOlxuICAgIGNvbnN0IHsgcmVxdWlyZWQsIC4uLnJlc3QgfSA9IHNjaGVtYVxuICAgIHNjaGVtYSA9IHJlc3RcbiAgICBpZiAoaXNTdHJpbmcodHlwZSkpIHtcbiAgICAgIC8vIENvbnZlcnQgc2NoZW1hIHByb3BlcnR5IG5vdGF0aW9uIHRvIEpTT04gc2NoZW1hXG4gICAgICBjb25zdCBqc29uVHlwZSA9IGpzb25UeXBlc1t0eXBlXVxuICAgICAgaWYgKGpzb25UeXBlKSB7XG4gICAgICAgIHNjaGVtYS50eXBlID0ganNvblR5cGVcbiAgICAgICAgaWYgKGpzb25UeXBlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgIGxldCBzZXRBZGRpdGlvbmFsUHJvcGVydGllcyA9IGZhbHNlXG4gICAgICAgICAgaWYgKHNjaGVtYS5wcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICBjb25zdCB7IHByb3BlcnRpZXMsIHJlcXVpcmVkIH0gPSBleHBhbmRQcm9wZXJ0aWVzKFxuICAgICAgICAgICAgICBzY2hlbWEucHJvcGVydGllcyxcbiAgICAgICAgICAgICAgb3B0aW9uc1xuICAgICAgICAgICAgKVxuICAgICAgICAgICAgc2NoZW1hLnByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzXG4gICAgICAgICAgICBpZiAocmVxdWlyZWQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICBzY2hlbWEucmVxdWlyZWQgPSByZXF1aXJlZFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2V0QWRkaXRpb25hbFByb3BlcnRpZXMgPSB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChzY2hlbWEucGF0dGVyblByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgcHJvcGVydGllcyB9ID0gZXhwYW5kUHJvcGVydGllcyhcbiAgICAgICAgICAgICAgc2NoZW1hLnBhdHRlcm5Qcm9wZXJ0aWVzLFxuICAgICAgICAgICAgICBvcHRpb25zXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBzY2hlbWEucGF0dGVyblByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzXG4gICAgICAgICAgICBzZXRBZGRpdGlvbmFsUHJvcGVydGllcyA9IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHNldEFkZGl0aW9uYWxQcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAvLyBJbnZlcnQgdGhlIGxvZ2ljIG9mIGBhZGRpdGlvbmFsUHJvcGVydGllc2Agc28gdGhhdCBpdCBuZWVkcyB0byBiZVxuICAgICAgICAgICAgLy8gZXhwbGljaXRlbHkgc2V0IHRvIGB0cnVlYDpcbiAgICAgICAgICAgIGlmICghKCdhZGRpdGlvbmFsUHJvcGVydGllcycgaW4gc2NoZW1hKSkge1xuICAgICAgICAgICAgICBzY2hlbWEuYWRkaXRpb25hbFByb3BlcnRpZXMgPSBmYWxzZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChqc29uVHlwZSA9PT0gJ2FycmF5Jykge1xuICAgICAgICAgIGNvbnN0IHsgaXRlbXMgfSA9IHNjaGVtYVxuICAgICAgICAgIGlmIChpdGVtcykge1xuICAgICAgICAgICAgc2NoZW1hLml0ZW1zID0gY29udmVydFNjaGVtYShpdGVtcywgb3B0aW9ucylcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoWydkYXRlJywgJ2RhdGV0aW1lJywgJ3RpbWVzdGFtcCddLmluY2x1ZGVzKHR5cGUpKSB7XG4gICAgICAgIC8vIERhdGUgcHJvcGVydGllcyBjYW4gYmUgc3VibWl0dGVkIGJvdGggYXMgYSBzdHJpbmcgb3IgYSBEYXRlIG9iamVjdC5cbiAgICAgICAgLy8gUHJvdmlkZSB2YWxpZGF0aW9uIHRocm91Z2ggZGF0ZS10aW1lIGZvcm1hdCwgd2hpY2ggaW4gQWp2IGFwcGVhcnNcbiAgICAgICAgLy8gdG8gaGFuZGxlIGJvdGggdHlwZXMgY29ycmVjdGx5LlxuICAgICAgICBzY2hlbWEudHlwZSA9IFsnc3RyaW5nJywgJ29iamVjdCddXG4gICAgICAgIHNjaGVtYSA9IGFkZEZvcm1hdChzY2hlbWEsICdkYXRlLXRpbWUnKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gQSByZWZlcmVuY2UgdG8gYW5vdGhlciBtb2RlbCBhcyBuZXN0ZWQgSlNPTiBkYXRhLCB1c2UgJHJlZiBvclxuICAgICAgICAvLyBpbnN0YW5jZW9mIGluc3RlYWQgb2YgdHlwZSwgYmFzZWQgb24gdGhlIHBhc3NlZCBvcHRpb246XG4gICAgICAgIGlmIChvcHRpb25zLnVzZUluc3RhbmNlT2YpIHtcbiAgICAgICAgICBzY2hlbWEudHlwZSA9ICdvYmplY3QnXG4gICAgICAgICAgc2NoZW1hLmluc3RhbmNlb2YgPSB0eXBlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gTW92ZSBgdHlwZWAgdG8gYCRyZWZgLCBidXQgc3RpbGwga2VlcCBvdGhlciBwcm9wZXJ0aWVzIGZvciBub3csXG4gICAgICAgICAgLy8gdG8gc3VwcG9ydCBgbnVsbGFibGVgLlxuICAgICAgICAgIGRlbGV0ZSBzY2hlbWEudHlwZVxuICAgICAgICAgIC8vIFRPRE86IENvbnNpZGVyIG1vdmluZyB0byBgbW9kZWxgIGtleXdvcmQgaW5zdGVhZCB0aGF0IHdvdWxkIHN1cHBvcnRcbiAgICAgICAgICAvLyBtb2RlbCB2YWxpZGF0aW9uIGFuZCBzdGlsbCBjb3VsZCBiZSBjb21iaW5lZCB3aXRoIG90aGVyIGtleXdvcmRzLlxuICAgICAgICAgIHNjaGVtYS4kcmVmID0gdHlwZVxuICAgICAgICAgIC8vIGAkcmVmYCBkb2Vzbid0IHBsYXkgd2l0aCBgbnVsbGFibGVgLCBzbyBjb252ZXJ0IHRvIGBvbmVPZmBcbiAgICAgICAgICBpZiAoc2NoZW1hLm51bGxhYmxlKSB7XG4gICAgICAgICAgICBkZWxldGUgc2NoZW1hLm51bGxhYmxlXG4gICAgICAgICAgICBzY2hlbWEgPSB7XG4gICAgICAgICAgICAgIG9uZU9mOiBbXG4gICAgICAgICAgICAgICAgeyB0eXBlOiAnbnVsbCcgfSxcbiAgICAgICAgICAgICAgICBzY2hlbWFcbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUaGlzIGlzIGEgcm9vdCBwcm9wZXJ0aWVzIHNjaGVtYSBvciBuZXN0ZWQgb2JqZWN0IHdpdGhvdXQgdHlwZSB0aGF0XG4gICAgICAvLyBtYXkgbmVlZCBleHBhbmRpbmcuXG4gICAgICBjb25zdCBleHBhbmRlZCA9IGV4cGFuZFNjaGVtYVNob3J0aGFuZChzY2hlbWEpXG4gICAgICBzY2hlbWEgPSBleHBhbmRlZCAhPT0gc2NoZW1hXG4gICAgICAgIC8vIE9ubHkgY2FsbCBjb252ZXJ0U2NoZW1hKCkgaWYgaXQgYWN0dWFsbHkgY2hhbmdlZC4uLlxuICAgICAgICA/IGNvbnZlcnRTY2hlbWEoZXhwYW5kZWQsIG9wdGlvbnMpXG4gICAgICAgIDogZXhwYW5kZWRcbiAgICAgIC8vIEhhbmRsZSBuZXN0ZWQgYWxsT2YsIGFueU9mLCBvbmVPZiwgbm90IHByb3BlcnRpZXNcbiAgICAgIGZvciAoY29uc3Qga2V5IG9mIFsnYWxsT2YnLCAnYW55T2YnLCAnb25lT2YnLCAnbm90J10pIHtcbiAgICAgICAgaWYgKGtleSBpbiBzY2hlbWEpIHtcbiAgICAgICAgICBzY2hlbWFba2V5XSA9IGNvbnZlcnRTY2hlbWEoc2NoZW1hW2tleV0sIG9wdGlvbnMpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHJlcXVpcmVkKSB7XG4gICAgICAvLyBPdXIgJ3JlcXVpcmVkJyBpcyBub3QgdGhlIHNhbWUgYXMgSlNPTiBTY2hlbWEnczogVXNlIHRoZSAncmVxdWlyZWQnXG4gICAgICAvLyBmb3JtYXQgaW5zdGVhZCB0aGF0IG9ubHkgdmFsaWRhdGVzIGlmIHRoZSByZXF1aXJlZCB2YWx1ZSBpcyBub3RcbiAgICAgIC8vIGVtcHR5LCBtZWFuaW5nIG5laXRoZXIgbnVsbGlzaCBub3IgYW4gZW1wdHkgc3RyaW5nLlxuICAgICAgc2NoZW1hID0gYWRkRm9ybWF0KHNjaGVtYSwgJ3JlcXVpcmVkJylcbiAgICB9XG4gICAgaWYgKGV4Y2x1ZGVEZWZhdWx0c1tzY2hlbWEuZGVmYXVsdF0pIHtcbiAgICAgIGRlbGV0ZSBzY2hlbWEuZGVmYXVsdFxuICAgIH1cbiAgICAvLyBNYWtlIG51bGxhYmxlIHdvcmsgd2l0aCBlbnVtLCBzZWUgdGhlIGlzc3VlIGZvciBtb3JlIGRldGFpbHM6XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2Fqdi12YWxpZGF0b3IvYWp2L2lzc3Vlcy8xNDcxXG4gICAgaWYgKHNjaGVtYS5udWxsYWJsZSAmJiBzY2hlbWEuZW51bSAmJiAhc2NoZW1hLmVudW0uaW5jbHVkZXMobnVsbCkpIHtcbiAgICAgIHNjaGVtYS5lbnVtLnB1c2gobnVsbClcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHNjaGVtYVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZXhwYW5kUHJvcGVydGllcyhzY2hlbWFQcm9wZXJ0aWVzLCBvcHRpb25zKSB7XG4gIGNvbnN0IHByb3BlcnRpZXMgPSB7fVxuICBjb25zdCByZXF1aXJlZCA9IFtdXG4gIGZvciAobGV0IFtrZXksIHByb3BlcnR5XSBvZiBPYmplY3QuZW50cmllcyhzY2hlbWFQcm9wZXJ0aWVzKSkge1xuICAgIHByb3BlcnR5ID0gZXhwYW5kU2NoZW1hU2hvcnRoYW5kKHByb3BlcnR5KVxuICAgIHByb3BlcnRpZXNba2V5XSA9IGNvbnZlcnRTY2hlbWEocHJvcGVydHksIG9wdGlvbnMpXG4gICAgaWYgKHByb3BlcnR5Py5yZXF1aXJlZCkge1xuICAgICAgcmVxdWlyZWQucHVzaChrZXkpXG4gICAgfVxuICB9XG4gIHJldHVybiB7IHByb3BlcnRpZXMsIHJlcXVpcmVkIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4cGFuZFNjaGVtYVNob3J0aGFuZChzY2hlbWEpIHtcbiAgLy8gVE9ETzogQ29uc2lkZXIgcmVtb3ZpbmcgYWxsIHNob3J0LWhhbmQgc2NoZW1hIGV4cGFuc2lvbi5cbiAgaWYgKGlzU3RyaW5nKHNjaGVtYSkpIHtcbiAgICBzY2hlbWEgPSB7XG4gICAgICB0eXBlOiBzY2hlbWFcbiAgICB9XG4gIH0gZWxzZSBpZiAoaXNBcnJheShzY2hlbWEpKSB7XG4gICAgc2NoZW1hID0ge1xuICAgICAgdHlwZTogJ2FycmF5JyxcbiAgICAgIGl0ZW1zOiBzY2hlbWEubGVuZ3RoID4gMSA/IHNjaGVtYSA6IHNjaGVtYVswXSxcbiAgICAgIC8vIFRoZSBhcnJheSBzaG9ydC1mb3JtcyBzZXRzIGFuIGVtcHR5IGFycmF5IGFzIHRoZSBkZWZhdWx0LlxuICAgICAgZGVmYXVsdDogW11cbiAgICB9XG4gIH0gZWxzZSBpZiAoXG4gICAgLy8gRXhwYW5kIG9iamVjdHMgdG8gYHR5cGU6ICdvYmplY3QnYC4uLlxuICAgIGlzT2JqZWN0KHNjaGVtYSkgJiZcbiAgICAhKFxuICAgICAgLy8gLi4uYnV0IG9ubHkgaWYgdGhleSBkb24ndCBkZWZpbmUgYW55IG9mIHRoZXNlIHByb3BlcnRpZXM6XG4gICAgICBpc1N0cmluZyhzY2hlbWEudHlwZSkgfHxcbiAgICAgIGlzU3RyaW5nKHNjaGVtYS4kcmVmKSB8fFxuICAgICAgaXNBcnJheShzY2hlbWEuYWxsT2YpIHx8XG4gICAgICBpc0FycmF5KHNjaGVtYS5hbnlPZikgfHxcbiAgICAgIGlzQXJyYXkoc2NoZW1hLm9uZU9mKSB8fFxuICAgICAgaXNPYmplY3Qoc2NoZW1hLm5vdClcbiAgICApXG4gICkge1xuICAgIC8vIFNlcGFyYXRlIG9iamVjdCBzaG9ydC1oYW5kIGludG8gcHJvcGVydHkgZGVmaW5pdGlvbnMgYW5kIG90aGVyIGZpZWxkcy5cbiAgICBjb25zdCBwcm9wZXJ0aWVzID0ge31cbiAgICBjb25zdCByZXN0ID0ge31cbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhzY2hlbWEpKSB7XG4gICAgICAvLyBQcm9wZXJ0eSBkZWZpbml0aW9ucyBhcmUgZWl0aGVyIG9iamVjdHMgb3Igc3RyaW5nIC8gYXJyYXkgc2hvcnQtaGFuZHM6XG4gICAgICBpZiAoaXNPYmplY3QodmFsdWUpIHx8IGlzU3RyaW5nKHZhbHVlKSB8fCBpc0FycmF5KHZhbHVlKSkge1xuICAgICAgICBwcm9wZXJ0aWVzW2tleV0gPSB2YWx1ZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdFtrZXldID0gdmFsdWVcbiAgICAgIH1cbiAgICB9XG4gICAgc2NoZW1hID0ge1xuICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICBwcm9wZXJ0aWVzLFxuICAgICAgLi4ucmVzdFxuICAgIH1cbiAgfVxuICByZXR1cm4gc2NoZW1hXG59XG5cbmZ1bmN0aW9uIGFkZEZvcm1hdChzY2hlbWEsIG5ld0Zvcm1hdCkge1xuICAvLyBTdXBwb3J0IG11bHRpcGxlIGBmb3JtYXRgIGtleXdvcmRzIHRocm91Z2ggYGFsbE9mYDpcbiAgbGV0IHsgYWxsT2YsIGZvcm1hdCwgLi4ucmVzdCB9ID0gc2NoZW1hXG4gIGlmIChmb3JtYXQgfHwgYWxsT2YpIHtcbiAgICBhbGxPZiB8fD0gW11cbiAgICBpZiAoIWFsbE9mLmZpbmQoKHsgZm9ybWF0IH0pID0+IGZvcm1hdCA9PT0gbmV3Rm9ybWF0KSkge1xuICAgICAgYWxsT2YucHVzaCh7IGZvcm1hdCB9LCB7IGZvcm1hdDogbmV3Rm9ybWF0IH0pXG4gICAgICBzY2hlbWEgPSB7IC4uLnJlc3QsIGFsbE9mIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgc2NoZW1hLmZvcm1hdCA9IG5ld0Zvcm1hdFxuICB9XG4gIHJldHVybiBzY2hlbWFcbn1cblxuLy8gVGFibGUgdG8gdHJhbnNsYXRlIHNjaGVtYSB0eXBlcyB0byBKU09OIHNjaGVtYSB0eXBlcy4gT3RoZXIgdHlwZXMgYXJlIGFsbG93ZWRcbi8vIGFsc28sIGUuZy4gJ2RhdGUnLCAnZGF0ZXRpbWUnLCAndGltZXN0YW1wJywgYnV0IHRoZXkgbmVlZCBzcGVjaWFsIHRyZWF0bWVudC5cbi8vIEFueXRoaW5nIG5vdCByZWNvZ25pemVkIGFzIGEgdHlwZSBpcyB1c2VkIGFzIGEgJHJlZiBpbnN0ZWFkLlxuY29uc3QganNvblR5cGVzID0ge1xuICBzdHJpbmc6ICdzdHJpbmcnLFxuICB0ZXh0OiAnc3RyaW5nJyxcbiAgbnVtYmVyOiAnbnVtYmVyJyxcbiAgaW50ZWdlcjogJ2ludGVnZXInLFxuICBib29sZWFuOiAnYm9vbGVhbicsXG4gIG9iamVjdDogJ29iamVjdCcsXG4gIGFycmF5OiAnYXJyYXknXG59XG5cbmNvbnN0IGV4Y2x1ZGVEZWZhdWx0cyA9IHtcbiAgJ25vdygpJzogdHJ1ZVxufVxuIl19