@kontur.candy/tools 2.173.0 → 2.175.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 (20) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/distr/Common/FormPathUtils.js +3 -2
  3. package/distr/Common/WellKnownDirectories.js +13 -0
  4. package/distr/Tools/src/BuildTasks/Form/GenerateForm.js +3 -2
  5. package/distr/Tools/src/CLICommands/BuildForms/RunBuildForms.js +2 -2
  6. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerBackendResourcesUpdatesController.js +25 -12
  7. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerClientJsFromResourcesController.js +2 -2
  8. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerFormInfoController.js +5 -2
  9. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/DevServers/BuildFormDevServer.js +13 -11
  10. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/Directories/FarmDirectory.js +43 -12
  11. package/distr/Tools/src/CLICommands/DevBuild/RunDevBuild.js +2 -4
  12. package/distr/Tools/src/CLICommands/FormStats/RunFormStats.js +2 -2
  13. package/distr/Tools/src/CLICommands/InitForm/RunInitForm.js +2 -2
  14. package/distr/Tools/src/CLICommands/Localization/RunLocalization.js +2 -4
  15. package/distr/Tools/src/CLICommands/UpgradeForm/RunUpgradeForm.js +2 -2
  16. package/distr/Tools/src/Commons/FormGlobsUtils.js +2 -2
  17. package/distr/Tools/src/Commons/TasksCore/DirectoryEntriesProducer.js +2 -2
  18. package/distr/Tools/src/Commons/TasksCore/Observe.js +2 -2
  19. package/package.json +1 -1
  20. package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/Directories/WellKnownDirectories.js +0 -12
@@ -16,7 +16,7 @@ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "functio
16
16
  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; }
17
17
  const defaultOptions = {
18
18
  frontEndDevMode: false,
19
- devServerUrl: "http://localhost:8081"
19
+ devServerUrl: "https://localhost:8081"
20
20
  };
21
21
  let BuildServerClientJsFromResourcesController = (_dec = (0, _Methods.httpGet)("/public/scripts/client.js", _Results.httpReturn.StreamWithMime("application/javascript")), _dec2 = (0, _Methods.httpGet)("/public/scripts/client.min.js", _Results.httpReturn.StreamWithMime("application/javascript")), _dec3 = (0, _Methods.httpGet)("/public/scripts/client-original.js", _Results.httpReturn.StreamWithMime("application/javascript")), _dec4 = (0, _Methods.httpGet)("public/scripts/client-original.min.js", _Results.httpReturn.StreamWithMime("application/javascript")), (_class = class BuildServerClientJsFromResourcesController extends _SingletonController.SingletonController {
22
22
  constructor(disableClientOverride, options) {
@@ -65,4 +65,4 @@ let BuildServerClientJsFromResourcesController = (_dec = (0, _Methods.httpGet)("
65
65
  }
66
66
  }, ((0, _applyDecoratedDescriptor2.default)(_class.prototype, "getClientJsScript", [_dec], Object.getOwnPropertyDescriptor(_class.prototype, "getClientJsScript"), _class.prototype), (0, _applyDecoratedDescriptor2.default)(_class.prototype, "getClientMinJsScript", [_dec2], Object.getOwnPropertyDescriptor(_class.prototype, "getClientMinJsScript"), _class.prototype), (0, _applyDecoratedDescriptor2.default)(_class.prototype, "getClientJsScriptOriginal", [_dec3], Object.getOwnPropertyDescriptor(_class.prototype, "getClientJsScriptOriginal"), _class.prototype), (0, _applyDecoratedDescriptor2.default)(_class.prototype, "getClientMinJsScriptOriginal", [_dec4], Object.getOwnPropertyDescriptor(_class.prototype, "getClientMinJsScriptOriginal"), _class.prototype)), _class));
67
67
  exports.BuildServerClientJsFromResourcesController = BuildServerClientJsFromResourcesController;
68
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJwYXRoIiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJyZXF1aXJlIiwiX01ldGhvZHMiLCJfUmVzdWx0cyIsIl9TdHJlYW1SZXN1bHRIYW5kbGVyIiwiX1NpbmdsZXRvbkNvbnRyb2xsZXIiLCJfZGVjIiwiX2RlYzIiLCJfZGVjMyIsIl9kZWM0IiwiX2NsYXNzIiwiX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlIiwibm9kZUludGVyb3AiLCJXZWFrTWFwIiwiY2FjaGVCYWJlbEludGVyb3AiLCJjYWNoZU5vZGVJbnRlcm9wIiwib2JqIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJjYWNoZSIsImhhcyIsImdldCIsIm5ld09iaiIsImhhc1Byb3BlcnR5RGVzY3JpcHRvciIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwia2V5IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiZGVzYyIsInNldCIsImRlZmF1bHRPcHRpb25zIiwiZnJvbnRFbmREZXZNb2RlIiwiZGV2U2VydmVyVXJsIiwiQnVpbGRTZXJ2ZXJDbGllbnRKc0Zyb21SZXNvdXJjZXNDb250cm9sbGVyIiwiaHR0cEdldCIsImh0dHBSZXR1cm4iLCJTdHJlYW1XaXRoTWltZSIsIlNpbmdsZXRvbkNvbnRyb2xsZXIiLCJjb25zdHJ1Y3RvciIsImRpc2FibGVDbGllbnRPdmVycmlkZSIsIm9wdGlvbnMiLCJnZXRDbGllbnRKc1NjcmlwdCIsIkZpbGVTdHJlYW1SZXN1bHQiLCJqb2luIiwiX19kaXJuYW1lIiwiUHJveHlHZXRSZXF1ZXN0VG9SZXN1bHQiLCJlIiwiZ2V0Q2xpZW50TWluSnNTY3JpcHQiLCJnZXRDbGllbnRKc1NjcmlwdE9yaWdpbmFsIiwiZ2V0Q2xpZW50TWluSnNTY3JpcHRPcmlnaW5hbCIsIl9hcHBseURlY29yYXRlZERlc2NyaXB0b3IyIiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9DTElDb21tYW5kcy9CdWlsZFNlcnZlci9SZXNvdXJjZXNDb250cm9sbGVycy9CdWlsZFNlcnZlckNsaWVudEpzRnJvbVJlc291cmNlc0NvbnRyb2xsZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwicGF0aFwiO1xuXG5pbXBvcnQgeyBodHRwR2V0IH0gZnJvbSBcIi4uLy4uLy4uL0NvbW1vbnMvSHR0cFNlcnZlci9BdHRyaWJ1dGVSb3V0aW5nL01ldGhvZHNcIjtcbmltcG9ydCB7IGh0dHBSZXR1cm4gfSBmcm9tIFwiLi4vLi4vLi4vQ29tbW9ucy9IdHRwU2VydmVyL0F0dHJpYnV0ZVJvdXRpbmcvUmVzdWx0c1wiO1xuaW1wb3J0IHtcbiAgICBGaWxlU3RyZWFtUmVzdWx0LFxuICAgIFByb3h5R2V0UmVxdWVzdFRvUmVzdWx0LFxuICAgIFN0cmVhbVJldHVyblJlc3VsdCxcbn0gZnJvbSBcIi4uLy4uLy4uL0NvbW1vbnMvSHR0cFNlcnZlci9BdHRyaWJ1dGVSb3V0aW5nL1Jlc3VsdHMvU3RyZWFtUmVzdWx0SGFuZGxlclwiO1xuaW1wb3J0IHsgU2luZ2xldG9uQ29udHJvbGxlciB9IGZyb20gXCIuLi8uLi8uLi9Db21tb25zL0h0dHBTZXJ2ZXIvRXhwcmVzc1dyYXBwZXIvU2luZ2xldG9uQ29udHJvbGxlclwiO1xuXG5pbXBvcnQgeyBCdWlsZFNlcnZlckNsaWVudEpzQ29udHJvbGxlck9wdGlvbnMgfSBmcm9tIFwiLi9CdWlsZFNlcnZlckNsaWVudEpzQ29udHJvbGxlclwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEJ1aWxkU2VydmVyQ2xpZW50SnNGcm9tUmVzb3VyY2VzT3B0aW9ucyB7XG4gICAgZnJvbnRFbmREZXZNb2RlOiBib29sZWFuO1xuICAgIGRldlNlcnZlclVybDogc3RyaW5nO1xufVxuXG5jb25zdCBkZWZhdWx0T3B0aW9uczogQnVpbGRTZXJ2ZXJDbGllbnRKc0Zyb21SZXNvdXJjZXNPcHRpb25zID0ge1xuICAgIGZyb250RW5kRGV2TW9kZTogZmFsc2UsXG4gICAgZGV2U2VydmVyVXJsOiBcImh0dHA6Ly9sb2NhbGhvc3Q6ODA4MVwiLFxufTtcblxuZXhwb3J0IGNsYXNzIEJ1aWxkU2VydmVyQ2xpZW50SnNGcm9tUmVzb3VyY2VzQ29udHJvbGxlciBleHRlbmRzIFNpbmdsZXRvbkNvbnRyb2xsZXIge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgb3B0aW9uczogUGFydGlhbDxCdWlsZFNlcnZlckNsaWVudEpzQ29udHJvbGxlck9wdGlvbnM+O1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZGlzYWJsZUNsaWVudE92ZXJyaWRlOiBib29sZWFuO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKGRpc2FibGVDbGllbnRPdmVycmlkZTogYm9vbGVhbiwgb3B0aW9uczogUGFydGlhbDxCdWlsZFNlcnZlckNsaWVudEpzQ29udHJvbGxlck9wdGlvbnM+KSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuZGlzYWJsZUNsaWVudE92ZXJyaWRlID0gZGlzYWJsZUNsaWVudE92ZXJyaWRlO1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSB7IC4uLmRlZmF1bHRPcHRpb25zLCAuLi5vcHRpb25zIH07XG4gICAgfVxuXG4gICAgQGh0dHBHZXQoXCIvcHVibGljL3NjcmlwdHMvY2xpZW50LmpzXCIsIGh0dHBSZXR1cm4uU3RyZWFtV2l0aE1pbWUoXCJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0XCIpKVxuICAgIHB1YmxpYyBhc3luYyBnZXRDbGllbnRKc1NjcmlwdCgpOiBQcm9taXNlPFN0cmVhbVJldHVyblJlc3VsdD4ge1xuICAgICAgICBpZiAodGhpcy5kaXNhYmxlQ2xpZW50T3ZlcnJpZGUpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgRmlsZVN0cmVhbVJlc3VsdChcbiAgICAgICAgICAgICAgICBwYXRoLmpvaW4oX19kaXJuYW1lLCBcIi4uXCIsIFwiLi5cIiwgXCIuLlwiLCBcIlN0YXRpY0ZpbGVzRm9yUHJvZHVjdGlvblJlc291cmNlc0RpclwiLCBcImNsaWVudC5qc1wiKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5mcm9udEVuZERldk1vZGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb3h5R2V0UmVxdWVzdFRvUmVzdWx0KGAke3RoaXMub3B0aW9ucy5kZXZTZXJ2ZXJVcmx9L2Zvcm1zLWhlbHBlci9lbmhhbmNlZENsaWVudC5qc2ApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEZpbGVTdHJlYW1SZXN1bHQoXG4gICAgICAgICAgICAgICAgICAgIHBhdGguam9pbihfX2Rpcm5hbWUsIFwiLi5cIiwgXCIuLlwiLCBcIi4uXCIsIFwiTG9jYWxTZXJ2ZXJGcm9udEVuZERpc3RcIiwgXCJlbmhhbmNlZENsaWVudC5qc1wiKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgRmlsZVN0cmVhbVJlc3VsdChcbiAgICAgICAgICAgICAgICBwYXRoLmpvaW4oX19kaXJuYW1lLCBcIi4uXCIsIFwiLi5cIiwgXCIuLlwiLCBcIlN0YXRpY0ZpbGVzRm9yUHJvZHVjdGlvblJlc291cmNlc0RpclwiLCBcImNsaWVudC5qc1wiKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIEBodHRwR2V0KFwiL3B1YmxpYy9zY3JpcHRzL2NsaWVudC5taW4uanNcIiwgaHR0cFJldHVybi5TdHJlYW1XaXRoTWltZShcImFwcGxpY2F0aW9uL2phdmFzY3JpcHRcIikpXG4gICAgcHVibGljIGFzeW5jIGdldENsaWVudE1pbkpzU2NyaXB0KCk6IFByb21pc2U8U3RyZWFtUmV0dXJuUmVzdWx0PiB7XG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVDbGllbnRPdmVycmlkZSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBGaWxlU3RyZWFtUmVzdWx0KFxuICAgICAgICAgICAgICAgIHBhdGguam9pbihfX2Rpcm5hbWUsIFwiLi5cIiwgXCIuLlwiLCBcIi4uXCIsIFwiU3RhdGljRmlsZXNGb3JQcm9kdWN0aW9uUmVzb3VyY2VzRGlyXCIsIFwiY2xpZW50Lm1pbi5qc1wiKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5mcm9udEVuZERldk1vZGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb3h5R2V0UmVxdWVzdFRvUmVzdWx0KGAke3RoaXMub3B0aW9ucy5kZXZTZXJ2ZXJVcmx9L2Zvcm1zLWhlbHBlci9lbmhhbmNlZENsaWVudC5qc2ApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEZpbGVTdHJlYW1SZXN1bHQoXG4gICAgICAgICAgICAgICAgICAgIHBhdGguam9pbihfX2Rpcm5hbWUsIFwiLi5cIiwgXCIuLlwiLCBcIi4uXCIsIFwiTG9jYWxTZXJ2ZXJGcm9udEVuZERpc3RcIiwgXCJlbmhhbmNlZENsaWVudC5qc1wiKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgRmlsZVN0cmVhbVJlc3VsdChcbiAgICAgICAgICAgICAgICBwYXRoLmpvaW4oX19kaXJuYW1lLCBcIi4uXCIsIFwiLi5cIiwgXCIuLlwiLCBcIlN0YXRpY0ZpbGVzRm9yUHJvZHVjdGlvblJlc291cmNlc0RpclwiLCBcImNsaWVudC5taW4uanNcIilcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBAaHR0cEdldChcIi9wdWJsaWMvc2NyaXB0cy9jbGllbnQtb3JpZ2luYWwuanNcIiwgaHR0cFJldHVybi5TdHJlYW1XaXRoTWltZShcImFwcGxpY2F0aW9uL2phdmFzY3JpcHRcIikpXG4gICAgcHVibGljIGFzeW5jIGdldENsaWVudEpzU2NyaXB0T3JpZ2luYWwoKTogUHJvbWlzZTxTdHJlYW1SZXR1cm5SZXN1bHQ+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBGaWxlU3RyZWFtUmVzdWx0KFxuICAgICAgICAgICAgcGF0aC5qb2luKF9fZGlybmFtZSwgXCIuLlwiLCBcIi4uXCIsIFwiLi5cIiwgXCJTdGF0aWNGaWxlc0ZvclByb2R1Y3Rpb25SZXNvdXJjZXNEaXJcIiwgXCJjbGllbnQuanNcIilcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBAaHR0cEdldChcInB1YmxpYy9zY3JpcHRzL2NsaWVudC1vcmlnaW5hbC5taW4uanNcIiwgaHR0cFJldHVybi5TdHJlYW1XaXRoTWltZShcImFwcGxpY2F0aW9uL2phdmFzY3JpcHRcIikpXG4gICAgcHVibGljIGFzeW5jIGdldENsaWVudE1pbkpzU2NyaXB0T3JpZ2luYWwoKTogUHJvbWlzZTxTdHJlYW1SZXR1cm5SZXN1bHQ+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBGaWxlU3RyZWFtUmVzdWx0KFxuICAgICAgICAgICAgcGF0aC5qb2luKF9fZGlybmFtZSwgXCIuLlwiLCBcIi4uXCIsIFwiLi5cIiwgXCJTdGF0aWNGaWxlc0ZvclByb2R1Y3Rpb25SZXNvdXJjZXNEaXJcIiwgXCJjbGllbnQubWluLmpzXCIpXG4gICAgICAgICk7XG4gICAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBLElBQUFBLElBQUEsR0FBQUMsdUJBQUEsQ0FBQUMsT0FBQTtBQUVBLElBQUFDLFFBQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLFFBQUEsR0FBQUYsT0FBQTtBQUNBLElBQUFHLG9CQUFBLEdBQUFILE9BQUE7QUFLQSxJQUFBSSxvQkFBQSxHQUFBSixPQUFBO0FBQXFHLElBQUFLLElBQUEsRUFBQUMsS0FBQSxFQUFBQyxLQUFBLEVBQUFDLEtBQUEsRUFBQUMsTUFBQTtBQUFBLFNBQUFDLHlCQUFBQyxXQUFBLGVBQUFDLE9BQUEs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
68
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJwYXRoIiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJyZXF1aXJlIiwiX01ldGhvZHMiLCJfUmVzdWx0cyIsIl9TdHJlYW1SZXN1bHRIYW5kbGVyIiwiX1NpbmdsZXRvbkNvbnRyb2xsZXIiLCJfZGVjIiwiX2RlYzIiLCJfZGVjMyIsIl9kZWM0IiwiX2NsYXNzIiwiX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlIiwibm9kZUludGVyb3AiLCJXZWFrTWFwIiwiY2FjaGVCYWJlbEludGVyb3AiLCJjYWNoZU5vZGVJbnRlcm9wIiwib2JqIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJjYWNoZSIsImhhcyIsImdldCIsIm5ld09iaiIsImhhc1Byb3BlcnR5RGVzY3JpcHRvciIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwia2V5IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiZGVzYyIsInNldCIsImRlZmF1bHRPcHRpb25zIiwiZnJvbnRFbmREZXZNb2RlIiwiZGV2U2VydmVyVXJsIiwiQnVpbGRTZXJ2ZXJDbGllbnRKc0Zyb21SZXNvdXJjZXNDb250cm9sbGVyIiwiaHR0cEdldCIsImh0dHBSZXR1cm4iLCJTdHJlYW1XaXRoTWltZSIsIlNpbmdsZXRvbkNvbnRyb2xsZXIiLCJjb25zdHJ1Y3RvciIsImRpc2FibGVDbGllbnRPdmVycmlkZSIsIm9wdGlvbnMiLCJnZXRDbGllbnRKc1NjcmlwdCIsIkZpbGVTdHJlYW1SZXN1bHQiLCJqb2luIiwiX19kaXJuYW1lIiwiUHJveHlHZXRSZXF1ZXN0VG9SZXN1bHQiLCJlIiwiZ2V0Q2xpZW50TWluSnNTY3JpcHQiLCJnZXRDbGllbnRKc1NjcmlwdE9yaWdpbmFsIiwiZ2V0Q2xpZW50TWluSnNTY3JpcHRPcmlnaW5hbCIsIl9hcHBseURlY29yYXRlZERlc2NyaXB0b3IyIiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9DTElDb21tYW5kcy9CdWlsZFNlcnZlci9SZXNvdXJjZXNDb250cm9sbGVycy9CdWlsZFNlcnZlckNsaWVudEpzRnJvbVJlc291cmNlc0NvbnRyb2xsZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwicGF0aFwiO1xuXG5pbXBvcnQgeyBodHRwR2V0IH0gZnJvbSBcIi4uLy4uLy4uL0NvbW1vbnMvSHR0cFNlcnZlci9BdHRyaWJ1dGVSb3V0aW5nL01ldGhvZHNcIjtcbmltcG9ydCB7IGh0dHBSZXR1cm4gfSBmcm9tIFwiLi4vLi4vLi4vQ29tbW9ucy9IdHRwU2VydmVyL0F0dHJpYnV0ZVJvdXRpbmcvUmVzdWx0c1wiO1xuaW1wb3J0IHtcbiAgICBGaWxlU3RyZWFtUmVzdWx0LFxuICAgIFByb3h5R2V0UmVxdWVzdFRvUmVzdWx0LFxuICAgIFN0cmVhbVJldHVyblJlc3VsdCxcbn0gZnJvbSBcIi4uLy4uLy4uL0NvbW1vbnMvSHR0cFNlcnZlci9BdHRyaWJ1dGVSb3V0aW5nL1Jlc3VsdHMvU3RyZWFtUmVzdWx0SGFuZGxlclwiO1xuaW1wb3J0IHsgU2luZ2xldG9uQ29udHJvbGxlciB9IGZyb20gXCIuLi8uLi8uLi9Db21tb25zL0h0dHBTZXJ2ZXIvRXhwcmVzc1dyYXBwZXIvU2luZ2xldG9uQ29udHJvbGxlclwiO1xuXG5pbXBvcnQgeyBCdWlsZFNlcnZlckNsaWVudEpzQ29udHJvbGxlck9wdGlvbnMgfSBmcm9tIFwiLi9CdWlsZFNlcnZlckNsaWVudEpzQ29udHJvbGxlclwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEJ1aWxkU2VydmVyQ2xpZW50SnNGcm9tUmVzb3VyY2VzT3B0aW9ucyB7XG4gICAgZnJvbnRFbmREZXZNb2RlOiBib29sZWFuO1xuICAgIGRldlNlcnZlclVybDogc3RyaW5nO1xufVxuXG5jb25zdCBkZWZhdWx0T3B0aW9uczogQnVpbGRTZXJ2ZXJDbGllbnRKc0Zyb21SZXNvdXJjZXNPcHRpb25zID0ge1xuICAgIGZyb250RW5kRGV2TW9kZTogZmFsc2UsXG4gICAgZGV2U2VydmVyVXJsOiBcImh0dHBzOi8vbG9jYWxob3N0OjgwODFcIixcbn07XG5cbmV4cG9ydCBjbGFzcyBCdWlsZFNlcnZlckNsaWVudEpzRnJvbVJlc291cmNlc0NvbnRyb2xsZXIgZXh0ZW5kcyBTaW5nbGV0b25Db250cm9sbGVyIHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IG9wdGlvbnM6IFBhcnRpYWw8QnVpbGRTZXJ2ZXJDbGllbnRKc0NvbnRyb2xsZXJPcHRpb25zPjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRpc2FibGVDbGllbnRPdmVycmlkZTogYm9vbGVhbjtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihkaXNhYmxlQ2xpZW50T3ZlcnJpZGU6IGJvb2xlYW4sIG9wdGlvbnM6IFBhcnRpYWw8QnVpbGRTZXJ2ZXJDbGllbnRKc0NvbnRyb2xsZXJPcHRpb25zPikge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmRpc2FibGVDbGllbnRPdmVycmlkZSA9IGRpc2FibGVDbGllbnRPdmVycmlkZTtcbiAgICAgICAgdGhpcy5vcHRpb25zID0geyAuLi5kZWZhdWx0T3B0aW9ucywgLi4ub3B0aW9ucyB9O1xuICAgIH1cblxuICAgIEBodHRwR2V0KFwiL3B1YmxpYy9zY3JpcHRzL2NsaWVudC5qc1wiLCBodHRwUmV0dXJuLlN0cmVhbVdpdGhNaW1lKFwiYXBwbGljYXRpb24vamF2YXNjcmlwdFwiKSlcbiAgICBwdWJsaWMgYXN5bmMgZ2V0Q2xpZW50SnNTY3JpcHQoKTogUHJvbWlzZTxTdHJlYW1SZXR1cm5SZXN1bHQ+IHtcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZUNsaWVudE92ZXJyaWRlKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEZpbGVTdHJlYW1SZXN1bHQoXG4gICAgICAgICAgICAgICAgcGF0aC5qb2luKF9fZGlybmFtZSwgXCIuLlwiLCBcIi4uXCIsIFwiLi5cIiwgXCJTdGF0aWNGaWxlc0ZvclByb2R1Y3Rpb25SZXNvdXJjZXNEaXJcIiwgXCJjbGllbnQuanNcIilcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuZnJvbnRFbmREZXZNb2RlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm94eUdldFJlcXVlc3RUb1Jlc3VsdChgJHt0aGlzLm9wdGlvbnMuZGV2U2VydmVyVXJsfS9mb3Jtcy1oZWxwZXIvZW5oYW5jZWRDbGllbnQuanNgKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBGaWxlU3RyZWFtUmVzdWx0KFxuICAgICAgICAgICAgICAgICAgICBwYXRoLmpvaW4oX19kaXJuYW1lLCBcIi4uXCIsIFwiLi5cIiwgXCIuLlwiLCBcIkxvY2FsU2VydmVyRnJvbnRFbmREaXN0XCIsIFwiZW5oYW5jZWRDbGllbnQuanNcIilcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEZpbGVTdHJlYW1SZXN1bHQoXG4gICAgICAgICAgICAgICAgcGF0aC5qb2luKF9fZGlybmFtZSwgXCIuLlwiLCBcIi4uXCIsIFwiLi5cIiwgXCJTdGF0aWNGaWxlc0ZvclByb2R1Y3Rpb25SZXNvdXJjZXNEaXJcIiwgXCJjbGllbnQuanNcIilcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBAaHR0cEdldChcIi9wdWJsaWMvc2NyaXB0cy9jbGllbnQubWluLmpzXCIsIGh0dHBSZXR1cm4uU3RyZWFtV2l0aE1pbWUoXCJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0XCIpKVxuICAgIHB1YmxpYyBhc3luYyBnZXRDbGllbnRNaW5Kc1NjcmlwdCgpOiBQcm9taXNlPFN0cmVhbVJldHVyblJlc3VsdD4ge1xuICAgICAgICBpZiAodGhpcy5kaXNhYmxlQ2xpZW50T3ZlcnJpZGUpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgRmlsZVN0cmVhbVJlc3VsdChcbiAgICAgICAgICAgICAgICBwYXRoLmpvaW4oX19kaXJuYW1lLCBcIi4uXCIsIFwiLi5cIiwgXCIuLlwiLCBcIlN0YXRpY0ZpbGVzRm9yUHJvZHVjdGlvblJlc291cmNlc0RpclwiLCBcImNsaWVudC5taW4uanNcIilcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuZnJvbnRFbmREZXZNb2RlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm94eUdldFJlcXVlc3RUb1Jlc3VsdChgJHt0aGlzLm9wdGlvbnMuZGV2U2VydmVyVXJsfS9mb3Jtcy1oZWxwZXIvZW5oYW5jZWRDbGllbnQuanNgKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBGaWxlU3RyZWFtUmVzdWx0KFxuICAgICAgICAgICAgICAgICAgICBwYXRoLmpvaW4oX19kaXJuYW1lLCBcIi4uXCIsIFwiLi5cIiwgXCIuLlwiLCBcIkxvY2FsU2VydmVyRnJvbnRFbmREaXN0XCIsIFwiZW5oYW5jZWRDbGllbnQuanNcIilcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEZpbGVTdHJlYW1SZXN1bHQoXG4gICAgICAgICAgICAgICAgcGF0aC5qb2luKF9fZGlybmFtZSwgXCIuLlwiLCBcIi4uXCIsIFwiLi5cIiwgXCJTdGF0aWNGaWxlc0ZvclByb2R1Y3Rpb25SZXNvdXJjZXNEaXJcIiwgXCJjbGllbnQubWluLmpzXCIpXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgQGh0dHBHZXQoXCIvcHVibGljL3NjcmlwdHMvY2xpZW50LW9yaWdpbmFsLmpzXCIsIGh0dHBSZXR1cm4uU3RyZWFtV2l0aE1pbWUoXCJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0XCIpKVxuICAgIHB1YmxpYyBhc3luYyBnZXRDbGllbnRKc1NjcmlwdE9yaWdpbmFsKCk6IFByb21pc2U8U3RyZWFtUmV0dXJuUmVzdWx0PiB7XG4gICAgICAgIHJldHVybiBuZXcgRmlsZVN0cmVhbVJlc3VsdChcbiAgICAgICAgICAgIHBhdGguam9pbihfX2Rpcm5hbWUsIFwiLi5cIiwgXCIuLlwiLCBcIi4uXCIsIFwiU3RhdGljRmlsZXNGb3JQcm9kdWN0aW9uUmVzb3VyY2VzRGlyXCIsIFwiY2xpZW50LmpzXCIpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgQGh0dHBHZXQoXCJwdWJsaWMvc2NyaXB0cy9jbGllbnQtb3JpZ2luYWwubWluLmpzXCIsIGh0dHBSZXR1cm4uU3RyZWFtV2l0aE1pbWUoXCJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0XCIpKVxuICAgIHB1YmxpYyBhc3luYyBnZXRDbGllbnRNaW5Kc1NjcmlwdE9yaWdpbmFsKCk6IFByb21pc2U8U3RyZWFtUmV0dXJuUmVzdWx0PiB7XG4gICAgICAgIHJldHVybiBuZXcgRmlsZVN0cmVhbVJlc3VsdChcbiAgICAgICAgICAgIHBhdGguam9pbihfX2Rpcm5hbWUsIFwiLi5cIiwgXCIuLlwiLCBcIi4uXCIsIFwiU3RhdGljRmlsZXNGb3JQcm9kdWN0aW9uUmVzb3VyY2VzRGlyXCIsIFwiY2xpZW50Lm1pbi5qc1wiKVxuICAgICAgICApO1xuICAgIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQSxJQUFBQSxJQUFBLEdBQUFDLHVCQUFBLENBQUFDLE9BQUE7QUFFQSxJQUFBQyxRQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxRQUFBLEdBQUFGLE9BQUE7QUFDQSxJQUFBRyxvQkFBQSxHQUFBSCxPQUFBO0FBS0EsSUFBQUksb0JBQUEsR0FBQUosT0FBQTtBQUFxRyxJQUFBSyxJQUFBLEVBQUFDLEtBQUEsRUFBQUMsS0FBQSxFQUFBQyxLQUFBLEVBQUFDLE1BQUE7QUFBQSxTQUFBQyx5QkFBQUMsV0FBQSxlQUFBQyxPQUFB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
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", {
6
6
  });
7
7
  exports.BuildServerFormInfoController = void 0;
8
8
  var _applyDecoratedDescriptor2 = _interopRequireDefault(require("@babel/runtime/helpers/applyDecoratedDescriptor"));
9
+ var path = _interopRequireWildcard(require("path"));
9
10
  var _EngineVersionUtils = require("../../../BuildTasks/EngineVersionUtils");
10
11
  var _PublishedVersionUtils = require("../../../BuildTasks/PublishedVersionUtils");
11
12
  var _ResolveFormInfo = require("../../../BuildTasks/ResolveFormInfo");
@@ -15,6 +16,8 @@ var _Results = require("../../../Commons/HttpServer/AttributeRouting/Results");
15
16
  var _SingletonController = require("../../../Commons/HttpServer/ExpressWrapper/SingletonController");
16
17
  var _FarmDirectory = require("./Directories/FarmDirectory");
17
18
  var _dec, _dec2, _class;
19
+ 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); }
20
+ 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; }
18
21
  let BuildServerFormInfoController = (_dec = (0, _Methods.httpGet)("/metas", _Results.httpReturn.PlainText), _dec2 = (0, _Methods.httpGet)("/metas/:gfv.metas.json", _Results.httpReturn.PlainText, (0, _Params.httpUrlParam)("gfv", _Params.httpType.String)), (_class = class BuildServerFormInfoController extends _SingletonController.SingletonController {
19
22
  constructor(allFarmConfig, useEngineFromLocalSources, nightly) {
20
23
  super();
@@ -41,7 +44,7 @@ let BuildServerFormInfoController = (_dec = (0, _Methods.httpGet)("/metas", _Res
41
44
  if (formJsonFile[0] == undefined) {
42
45
  throw Error(`${gfv} not found in farm directories`);
43
46
  }
44
- const formInfo = await (0, _ResolveFormInfo.resolveFormInfo)(formJsonFile[0], gfv, undefined);
47
+ const formInfo = await (0, _ResolveFormInfo.resolveFormInfo)(formJsonFile[0], path.dirname(formJsonFile[0]), undefined);
45
48
  const engineVersion = this.nightly ? {
46
49
  type: "pre",
47
50
  preId: "nightly"
@@ -61,4 +64,4 @@ let BuildServerFormInfoController = (_dec = (0, _Methods.httpGet)("/metas", _Res
61
64
  }
62
65
  }, ((0, _applyDecoratedDescriptor2.default)(_class.prototype, "getAllFormMetas", [_dec], Object.getOwnPropertyDescriptor(_class.prototype, "getAllFormMetas"), _class.prototype), (0, _applyDecoratedDescriptor2.default)(_class.prototype, "getFormMeta", [_dec2], Object.getOwnPropertyDescriptor(_class.prototype, "getFormMeta"), _class.prototype)), _class));
63
66
  exports.BuildServerFormInfoController = BuildServerFormInfoController;
64
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfRW5naW5lVmVyc2lvblV0aWxzIiwicmVxdWlyZSIsIl9QdWJsaXNoZWRWZXJzaW9uVXRpbHMiLCJfUmVzb2x2ZUZvcm1JbmZvIiwiX01ldGhvZHMiLCJfUGFyYW1zIiwiX1Jlc3VsdHMiLCJfU2luZ2xldG9uQ29udHJvbGxlciIsIl9GYXJtRGlyZWN0b3J5IiwiX2RlYyIsIl9kZWMyIiwiX2NsYXNzIiwiQnVpbGRTZXJ2ZXJGb3JtSW5mb0NvbnRyb2xsZXIiLCJodHRwR2V0IiwiaHR0cFJldHVybiIsIlBsYWluVGV4dCIsImh0dHBVcmxQYXJhbSIsImh0dHBUeXBlIiwiU3RyaW5nIiwiU2luZ2xldG9uQ29udHJvbGxlciIsImNvbnN0cnVjdG9yIiwiYWxsRmFybUNvbmZpZyIsInVzZUVuZ2luZUZyb21Mb2NhbFNvdXJjZXMiLCJuaWdodGx5IiwiYWxsRmFybURpcmVjdG9yaWVzIiwibWFwIiwiaSIsIkZhcm1EaXJlY3RvcnkiLCJmYXJtRGlyZWN0b3J5IiwiZ2V0QWxsRm9ybU1ldGFzIiwiZmFybUZvcm1Kc29ucyIsIlByb21pc2UiLCJhbGwiLCJnZXRBbGxGb3JtSnNvbkZpbGVzIiwiQXN5bmNJdGVyYXRvciIsImZyb20iLCJmbGF0IiwieCIsImdmdiIsInRvQXJyYXkiLCJqb2luIiwiZ2V0Rm9ybU1ldGEiLCJsb2NhbEVuZ2luZU1ldGFDb250ZW50IiwiZW5naW5lTmFtZSIsInJlc291cmNlc0hhc2giLCJKU09OIiwic3RyaW5naWZ5IiwidW5kZWZpbmVkIiwiZm9ybUpzb25GaWxlIiwiZ2V0Rm9ybUpzb25QYXRoIiwiZmlsdGVyIiwiRXJyb3IiLCJmb3JtSW5mbyIsInJlc29sdmVGb3JtSW5mbyIsImVuZ2luZVZlcnNpb24iLCJ0eXBlIiwicHJlSWQiLCJlbmdpbmVTb3VyY2VzIiwicmVzb2x2ZUVuZ2luZVZlcnNpb24iLCJmb3JtTWV0YUNvbnRlbnQiLCJFbmdpbmVWZXJzaW9uVXRpbHMiLCJlbmdpbmVWZXJzaW9uVG9OYW1lIiwidmVyc2lvbiIsInRoZW1lcyIsIl9hcHBseURlY29yYXRlZERlc2NyaXB0b3IyIiwiZGVmYXVsdCIsInByb3RvdHlwZSIsIk9iamVjdCIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvQ0xJQ29tbWFuZHMvQnVpbGRTZXJ2ZXIvUmVzb3VyY2VzQ29udHJvbGxlcnMvQnVpbGRTZXJ2ZXJGb3JtSW5mb0NvbnRyb2xsZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRmFybUNvbmZpZyB9IGZyb20gXCJUb29scy9zcmMvQ2FuZHlDTElcIjtcblxuaW1wb3J0IHsgRW5naW5lVmVyc2lvblV0aWxzIH0gZnJvbSBcIi4uLy4uLy4uL0J1aWxkVGFza3MvRW5naW5lVmVyc2lvblV0aWxzXCI7XG5pbXBvcnQgeyByZXNvbHZlRW5naW5lVmVyc2lvbiB9IGZyb20gXCIuLi8uLi8uLi9CdWlsZFRhc2tzL1B1Ymxpc2hlZFZlcnNpb25VdGlsc1wiO1xuaW1wb3J0IHsgcmVzb2x2ZUZvcm1JbmZvIH0gZnJvbSBcIi4uLy4uLy4uL0J1aWxkVGFza3MvUmVzb2x2ZUZvcm1JbmZvXCI7XG5pbXBvcnQgeyBGb3JtTWV0YUNvbnRlbnQgfSBmcm9tIFwiLi4vLi4vLi4vQnVpbGRUYXNrcy9Xcml0ZUZvcm1NZXRhXCI7XG5pbXBvcnQgeyBodHRwR2V0IH0gZnJvbSBcIi4uLy4uLy4uL0NvbW1vbnMvSHR0cFNlcnZlci9BdHRyaWJ1dGVSb3V0aW5nL01ldGhvZHNcIjtcbmltcG9ydCB7IGh0dHBUeXBlLCBodHRwVXJsUGFyYW0gfSBmcm9tIFwiLi4vLi4vLi4vQ29tbW9ucy9IdHRwU2VydmVyL0F0dHJpYnV0ZVJvdXRpbmcvUGFyYW1zXCI7XG5pbXBvcnQgeyBodHRwUmV0dXJuIH0gZnJvbSBcIi4uLy4uLy4uL0NvbW1vbnMvSHR0cFNlcnZlci9BdHRyaWJ1dGVSb3V0aW5nL1Jlc3VsdHNcIjtcbmltcG9ydCB7IFNpbmdsZXRvbkNvbnRyb2xsZXIgfSBmcm9tIFwiLi4vLi4vLi4vQ29tbW9ucy9IdHRwU2VydmVyL0V4cHJlc3NXcmFwcGVyL1NpbmdsZXRvbkNvbnRyb2xsZXJcIjtcbmltcG9ydCB7IENhbmR5VmVyc2lvblNwZWMgfSBmcm9tIFwiLi4vLi4vLi4vQnVpbGRUYXNrcy9WZXJzaW9uXCI7XG5cbmltcG9ydCB7IEZhcm1EaXJlY3RvcnkgfSBmcm9tIFwiLi9EaXJlY3Rvcmllcy9GYXJtRGlyZWN0b3J5XCI7XG5cbmV4cG9ydCBjbGFzcyBCdWlsZFNlcnZlckZvcm1JbmZvQ29udHJvbGxlciBleHRlbmRzIFNpbmdsZXRvbkNvbnRyb2xsZXIge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgYWxsRmFybURpcmVjdG9yaWVzOiBGYXJtRGlyZWN0b3J5W107XG4gICAgcHJpdmF0ZSByZWFkb25seSBuaWdodGx5OiBib29sZWFuO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgdXNlRW5naW5lRnJvbUxvY2FsU291cmNlczogYm9vbGVhbjtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihhbGxGYXJtQ29uZmlnOiBGYXJtQ29uZmlnW10sIHVzZUVuZ2luZUZyb21Mb2NhbFNvdXJjZXM6IGJvb2xlYW4sIG5pZ2h0bHk6IGJvb2xlYW4pIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5uaWdodGx5ID0gbmlnaHRseTtcbiAgICAgICAgdGhpcy5hbGxGYXJtRGlyZWN0b3JpZXMgPSBhbGxGYXJtQ29uZmlnLm1hcChpID0+IG5ldyBGYXJtRGlyZWN0b3J5KGkuZmFybURpcmVjdG9yeSkpO1xuICAgICAgICB0aGlzLnVzZUVuZ2luZUZyb21Mb2NhbFNvdXJjZXMgPSB1c2VFbmdpbmVGcm9tTG9jYWxTb3VyY2VzO1xuICAgIH1cblxuICAgIEBodHRwR2V0KFwiL21ldGFzXCIsIGh0dHBSZXR1cm4uUGxhaW5UZXh0KVxuICAgIHB1YmxpYyBhc3luYyBnZXRBbGxGb3JtTWV0YXMoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgICAgY29uc3QgZmFybUZvcm1Kc29ucyA9IGF3YWl0IFByb21pc2UuYWxsKHRoaXMuYWxsRmFybURpcmVjdG9yaWVzLm1hcChpID0+IGkuZ2V0QWxsRm9ybUpzb25GaWxlcygpKSk7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAuLi4oYXdhaXQgQXN5bmNJdGVyYXRvci5mcm9tKGZhcm1Gb3JtSnNvbnMuZmxhdCgpKVxuICAgICAgICAgICAgICAgIC5tYXAoeCA9PiBgJHt4Lmdmdn0ubWV0YXMuanNvbmApXG4gICAgICAgICAgICAgICAgLnRvQXJyYXkoKSksXG4gICAgICAgIF0uam9pbihcIlxcblwiKTtcbiAgICB9XG5cbiAgICBAaHR0cEdldChcIi9tZXRhcy86Z2Z2Lm1ldGFzLmpzb25cIiwgaHR0cFJldHVybi5QbGFpblRleHQsIGh0dHBVcmxQYXJhbShcImdmdlwiLCBodHRwVHlwZS5TdHJpbmcpKVxuICAgIHB1YmxpYyBhc3luYyBnZXRGb3JtTWV0YShnZnY6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICAgIGlmICh0aGlzLnVzZUVuZ2luZUZyb21Mb2NhbFNvdXJjZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGxvY2FsRW5naW5lTWV0YUNvbnRlbnQ6IEZvcm1NZXRhQ29udGVudCA9IHtcbiAgICAgICAgICAgICAgICBlbmdpbmVOYW1lOiBcImxvY2FsXCIsXG4gICAgICAgICAgICAgICAgcmVzb3VyY2VzSGFzaDogXCJsb2NhbC1oYXNoXCIsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGxvY2FsRW5naW5lTWV0YUNvbnRlbnQsIHVuZGVmaW5lZCwgXCIgIFwiKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmb3JtSnNvbkZpbGUgPSAoYXdhaXQgUHJvbWlzZS5hbGwodGhpcy5hbGxGYXJtRGlyZWN0b3JpZXMubWFwKGkgPT4gaS5nZXRGb3JtSnNvblBhdGgoZ2Z2KSkpKVxuICAgICAgICAgICAgLmZsYXQoKVxuICAgICAgICAgICAgLmZpbHRlcihpID0+IGkgIT0gdW5kZWZpbmVkKTtcbiAgICAgICAgaWYgKGZvcm1Kc29uRmlsZVswXSA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKGAke2dmdn0gbm90IGZvdW5kIGluIGZhcm0gZGlyZWN0b3JpZXNgKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmb3JtSW5mbyA9IGF3YWl0IHJlc29sdmVGb3JtSW5mbyhmb3JtSnNvbkZpbGVbMF0sIGdmdiwgdW5kZWZpbmVkKTtcbiAgICAgICAgY29uc3QgZW5naW5lVmVyc2lvbjogdW5kZWZpbmVkIHwgQ2FuZHlWZXJzaW9uU3BlYyA9IHRoaXMubmlnaHRseVxuICAgICAgICAgICAgPyB7IHR5cGU6IFwicHJlXCIsIHByZUlkOiBcIm5pZ2h0bHlcIiB9XG4gICAgICAgICAgICA6IGZvcm1JbmZvLmVuZ2luZVZlcnNpb247XG4gICAgICAgIGlmIChlbmdpbmVWZXJzaW9uID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiISEhIVwiKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBlbmdpbmVTb3VyY2VzID0gYXdhaXQgcmVzb2x2ZUVuZ2luZVZlcnNpb24oZW5naW5lVmVyc2lvbik7XG4gICAgICAgIGNvbnN0IGZvcm1NZXRhQ29udGVudDogRm9ybU1ldGFDb250ZW50ID0ge1xuICAgICAgICAgICAgZW5naW5lTmFtZTpcbiAgICAgICAgICAgICAgICBlbmdpbmVTb3VyY2VzLnR5cGUgPT09IFwiTG9jYWxFbmdpbmVTb3VyY2VzXCJcbiAgICAgICAgICAgICAgICAgICAgPyBcImxvY2FsXCJcbiAgICAgICAgICAgICAgICAgICAgOiBFbmdpbmVWZXJzaW9uVXRpbHMuZW5naW5lVmVyc2lvblRvTmFtZShlbmdpbmVTb3VyY2VzLnZlcnNpb24pLFxuICAgICAgICAgICAgcmVzb3VyY2VzSGFzaDogXCJsb2NhbC1oYXNoXCIsXG4gICAgICAgIH07XG4gICAgICAgIGlmIChmb3JtSW5mby50aGVtZXMgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBmb3JtTWV0YUNvbnRlbnQudGhlbWVzID0gZm9ybUluZm8udGhlbWVzO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShmb3JtTWV0YUNvbnRlbnQsIHVuZGVmaW5lZCwgXCIgIFwiKTtcbiAgICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBRUEsSUFBQUEsbUJBQUEsR0FBQUMsT0FBQTtBQUNBLElBQUFDLHNCQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxnQkFBQSxHQUFBRixPQUFBO0FBRUEsSUFBQUcsUUFBQSxHQUFBSCxPQUFBO0FBQ0EsSUFBQUksT0FBQSxHQUFBSixPQUFBO0FBQ0EsSUFBQUssUUFBQSxHQUFBTCxPQUFBO0FBQ0EsSUFBQU0sb0JBQUEsR0FBQU4sT0FBQTtBQUdBLElBQUFPLGNBQUEsR0FBQVAsT0FBQTtBQUE0RCxJQUFBUSxJQUFBLEVBQUFDLEtBQUEsRUFBQUMsTUFBQTtBQUFBLElBRS9DQyw2QkFBNkIsSUFBQUgsSUFBQSxHQVlyQyxJQUFBSSxnQkFBTyxFQUFDLFFBQVEsRUFBRUMsbUJBQVUsQ0FBQ0MsU0FBUyxDQUFDLEVBQUFMLEtBQUEsR0FVdkMsSUFBQUcsZ0JBQU8sRUFBQyx3QkFBd0IsRUFBRUMsbUJBQVUsQ0FBQ0MsU0FBUyxFQUFFLElBQUFDLG9CQUFZLEVBQUMsS0FBSyxFQUFFQyxnQkFBUSxDQUFDQyxNQUFNLENBQUMsQ0FBQyxHQUFBUCxNQUFBLEdBdEIzRixNQUFNQyw2QkFBNkIsU0FBU08sd0NBQW1CLENBQUM7RUFLNURDLFdBQVdBLENBQUNDLGFBQTJCLEVBQUVDLHlCQUFrQyxFQUFFQyxPQUFnQixFQUFFO0lBQ2xHLEtBQUssQ0FBQyxDQUFDO0lBQUMsS0FMS0Msa0JBQWtCO0lBQUEsS0FDbEJELE9BQU87SUFBQSxLQUNQRCx5QkFBeUI7SUFJdEMsSUFBSSxDQUFDQyxPQUFPLEdBQUdBLE9BQU87SUFDdEIsSUFBSSxDQUFDQyxrQkFBa0IsR0FBR0gs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
67
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJwYXRoIiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJyZXF1aXJlIiwiX0VuZ2luZVZlcnNpb25VdGlscyIsIl9QdWJsaXNoZWRWZXJzaW9uVXRpbHMiLCJfUmVzb2x2ZUZvcm1JbmZvIiwiX01ldGhvZHMiLCJfUGFyYW1zIiwiX1Jlc3VsdHMiLCJfU2luZ2xldG9uQ29udHJvbGxlciIsIl9GYXJtRGlyZWN0b3J5IiwiX2RlYyIsIl9kZWMyIiwiX2NsYXNzIiwiX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlIiwibm9kZUludGVyb3AiLCJXZWFrTWFwIiwiY2FjaGVCYWJlbEludGVyb3AiLCJjYWNoZU5vZGVJbnRlcm9wIiwib2JqIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJjYWNoZSIsImhhcyIsImdldCIsIm5ld09iaiIsImhhc1Byb3BlcnR5RGVzY3JpcHRvciIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwia2V5IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiZGVzYyIsInNldCIsIkJ1aWxkU2VydmVyRm9ybUluZm9Db250cm9sbGVyIiwiaHR0cEdldCIsImh0dHBSZXR1cm4iLCJQbGFpblRleHQiLCJodHRwVXJsUGFyYW0iLCJodHRwVHlwZSIsIlN0cmluZyIsIlNpbmdsZXRvbkNvbnRyb2xsZXIiLCJjb25zdHJ1Y3RvciIsImFsbEZhcm1Db25maWciLCJ1c2VFbmdpbmVGcm9tTG9jYWxTb3VyY2VzIiwibmlnaHRseSIsImFsbEZhcm1EaXJlY3RvcmllcyIsIm1hcCIsImkiLCJGYXJtRGlyZWN0b3J5IiwiZmFybURpcmVjdG9yeSIsImdldEFsbEZvcm1NZXRhcyIsImZhcm1Gb3JtSnNvbnMiLCJQcm9taXNlIiwiYWxsIiwiZ2V0QWxsRm9ybUpzb25GaWxlcyIsIkFzeW5jSXRlcmF0b3IiLCJmcm9tIiwiZmxhdCIsIngiLCJnZnYiLCJ0b0FycmF5Iiwiam9pbiIsImdldEZvcm1NZXRhIiwibG9jYWxFbmdpbmVNZXRhQ29udGVudCIsImVuZ2luZU5hbWUiLCJyZXNvdXJjZXNIYXNoIiwiSlNPTiIsInN0cmluZ2lmeSIsInVuZGVmaW5lZCIsImZvcm1Kc29uRmlsZSIsImdldEZvcm1Kc29uUGF0aCIsImZpbHRlciIsIkVycm9yIiwiZm9ybUluZm8iLCJyZXNvbHZlRm9ybUluZm8iLCJkaXJuYW1lIiwiZW5naW5lVmVyc2lvbiIsInR5cGUiLCJwcmVJZCIsImVuZ2luZVNvdXJjZXMiLCJyZXNvbHZlRW5naW5lVmVyc2lvbiIsImZvcm1NZXRhQ29udGVudCIsIkVuZ2luZVZlcnNpb25VdGlscyIsImVuZ2luZVZlcnNpb25Ub05hbWUiLCJ2ZXJzaW9uIiwidGhlbWVzIiwiX2FwcGx5RGVjb3JhdGVkRGVzY3JpcHRvcjIiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL0NMSUNvbW1hbmRzL0J1aWxkU2VydmVyL1Jlc291cmNlc0NvbnRyb2xsZXJzL0J1aWxkU2VydmVyRm9ybUluZm9Db250cm9sbGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHBhdGggZnJvbSBcInBhdGhcIjtcblxuaW1wb3J0IHsgRmFybUNvbmZpZyB9IGZyb20gXCJUb29scy9zcmMvQ2FuZHlDTElcIjtcblxuaW1wb3J0IHsgRW5naW5lVmVyc2lvblV0aWxzIH0gZnJvbSBcIi4uLy4uLy4uL0J1aWxkVGFza3MvRW5naW5lVmVyc2lvblV0aWxzXCI7XG5pbXBvcnQgeyByZXNvbHZlRW5naW5lVmVyc2lvbiB9IGZyb20gXCIuLi8uLi8uLi9CdWlsZFRhc2tzL1B1Ymxpc2hlZFZlcnNpb25VdGlsc1wiO1xuaW1wb3J0IHsgcmVzb2x2ZUZvcm1JbmZvIH0gZnJvbSBcIi4uLy4uLy4uL0J1aWxkVGFza3MvUmVzb2x2ZUZvcm1JbmZvXCI7XG5pbXBvcnQgeyBGb3JtTWV0YUNvbnRlbnQgfSBmcm9tIFwiLi4vLi4vLi4vQnVpbGRUYXNrcy9Xcml0ZUZvcm1NZXRhXCI7XG5pbXBvcnQgeyBodHRwR2V0IH0gZnJvbSBcIi4uLy4uLy4uL0NvbW1vbnMvSHR0cFNlcnZlci9BdHRyaWJ1dGVSb3V0aW5nL01ldGhvZHNcIjtcbmltcG9ydCB7IGh0dHBUeXBlLCBodHRwVXJsUGFyYW0gfSBmcm9tIFwiLi4vLi4vLi4vQ29tbW9ucy9IdHRwU2VydmVyL0F0dHJpYnV0ZVJvdXRpbmcvUGFyYW1zXCI7XG5pbXBvcnQgeyBodHRwUmV0dXJuIH0gZnJvbSBcIi4uLy4uLy4uL0NvbW1vbnMvSHR0cFNlcnZlci9BdHRyaWJ1dGVSb3V0aW5nL1Jlc3VsdHNcIjtcbmltcG9ydCB7IFNpbmdsZXRvbkNvbnRyb2xsZXIgfSBmcm9tIFwiLi4vLi4vLi4vQ29tbW9ucy9IdHRwU2VydmVyL0V4cHJlc3NXcmFwcGVyL1NpbmdsZXRvbkNvbnRyb2xsZXJcIjtcbmltcG9ydCB7IENhbmR5VmVyc2lvblNwZWMgfSBmcm9tIFwiLi4vLi4vLi4vQnVpbGRUYXNrcy9WZXJzaW9uXCI7XG5cbmltcG9ydCB7IEZhcm1EaXJlY3RvcnkgfSBmcm9tIFwiLi9EaXJlY3Rvcmllcy9GYXJtRGlyZWN0b3J5XCI7XG5cbmV4cG9ydCBjbGFzcyBCdWlsZFNlcnZlckZvcm1JbmZvQ29udHJvbGxlciBleHRlbmRzIFNpbmdsZXRvbkNvbnRyb2xsZXIge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgYWxsRmFybURpcmVjdG9yaWVzOiBGYXJtRGlyZWN0b3J5W107XG4gICAgcHJpdmF0ZSByZWFkb25seSBuaWdodGx5OiBib29sZWFuO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgdXNlRW5naW5lRnJvbUxvY2FsU291cmNlczogYm9vbGVhbjtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihhbGxGYXJtQ29uZmlnOiBGYXJtQ29uZmlnW10sIHVzZUVuZ2luZUZyb21Mb2NhbFNvdXJjZXM6IGJvb2xlYW4sIG5pZ2h0bHk6IGJvb2xlYW4pIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5uaWdodGx5ID0gbmlnaHRseTtcbiAgICAgICAgdGhpcy5hbGxGYXJtRGlyZWN0b3JpZXMgPSBhbGxGYXJtQ29uZmlnLm1hcChpID0+IG5ldyBGYXJtRGlyZWN0b3J5KGkuZmFybURpcmVjdG9yeSkpO1xuICAgICAgICB0aGlzLnVzZUVuZ2luZUZyb21Mb2NhbFNvdXJjZXMgPSB1c2VFbmdpbmVGcm9tTG9jYWxTb3VyY2VzO1xuICAgIH1cblxuICAgIEBodHRwR2V0KFwiL21ldGFzXCIsIGh0dHBSZXR1cm4uUGxhaW5UZXh0KVxuICAgIHB1YmxpYyBhc3luYyBnZXRBbGxGb3JtTWV0YXMoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgICAgY29uc3QgZmFybUZvcm1Kc29ucyA9IGF3YWl0IFByb21pc2UuYWxsKHRoaXMuYWxsRmFybURpcmVjdG9yaWVzLm1hcChpID0+IGkuZ2V0QWxsRm9ybUpzb25GaWxlcygpKSk7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAuLi4oYXdhaXQgQXN5bmNJdGVyYXRvci5mcm9tKGZhcm1Gb3JtSnNvbnMuZmxhdCgpKVxuICAgICAgICAgICAgICAgIC5tYXAoeCA9PiBgJHt4Lmdmdn0ubWV0YXMuanNvbmApXG4gICAgICAgICAgICAgICAgLnRvQXJyYXkoKSksXG4gICAgICAgIF0uam9pbihcIlxcblwiKTtcbiAgICB9XG5cbiAgICBAaHR0cEdldChcIi9tZXRhcy86Z2Z2Lm1ldGFzLmpzb25cIiwgaHR0cFJldHVybi5QbGFpblRleHQsIGh0dHBVcmxQYXJhbShcImdmdlwiLCBodHRwVHlwZS5TdHJpbmcpKVxuICAgIHB1YmxpYyBhc3luYyBnZXRGb3JtTWV0YShnZnY6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICAgIGlmICh0aGlzLnVzZUVuZ2luZUZyb21Mb2NhbFNvdXJjZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGxvY2FsRW5naW5lTWV0YUNvbnRlbnQ6IEZvcm1NZXRhQ29udGVudCA9IHtcbiAgICAgICAgICAgICAgICBlbmdpbmVOYW1lOiBcImxvY2FsXCIsXG4gICAgICAgICAgICAgICAgcmVzb3VyY2VzSGFzaDogXCJsb2NhbC1oYXNoXCIsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGxvY2FsRW5naW5lTWV0YUNvbnRlbnQsIHVuZGVmaW5lZCwgXCIgIFwiKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmb3JtSnNvbkZpbGUgPSAoYXdhaXQgUHJvbWlzZS5hbGwodGhpcy5hbGxGYXJtRGlyZWN0b3JpZXMubWFwKGkgPT4gaS5nZXRGb3JtSnNvblBhdGgoZ2Z2KSkpKVxuICAgICAgICAgICAgLmZsYXQoKVxuICAgICAgICAgICAgLmZpbHRlcihpID0+IGkgIT0gdW5kZWZpbmVkKTtcbiAgICAgICAgaWYgKGZvcm1Kc29uRmlsZVswXSA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKGAke2dmdn0gbm90IGZvdW5kIGluIGZhcm0gZGlyZWN0b3JpZXNgKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmb3JtSW5mbyA9IGF3YWl0IHJlc29sdmVGb3JtSW5mbyhmb3JtSnNvbkZpbGVbMF0sIHBhdGguZGlybmFtZShmb3JtSnNvbkZpbGVbMF0pLCB1bmRlZmluZWQpO1xuICAgICAgICBjb25zdCBlbmdpbmVWZXJzaW9uOiB1bmRlZmluZWQgfCBDYW5keVZlcnNpb25TcGVjID0gdGhpcy5uaWdodGx5XG4gICAgICAgICAgICA/IHsgdHlwZTogXCJwcmVcIiwgcHJlSWQ6IFwibmlnaHRseVwiIH1cbiAgICAgICAgICAgIDogZm9ybUluZm8uZW5naW5lVmVyc2lvbjtcbiAgICAgICAgaWYgKGVuZ2luZVZlcnNpb24gPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCIhISEhXCIpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGVuZ2luZVNvdXJjZXMgPSBhd2FpdCByZXNvbHZlRW5naW5lVmVyc2lvbihlbmdpbmVWZXJzaW9uKTtcbiAgICAgICAgY29uc3QgZm9ybU1ldGFDb250ZW50OiBGb3JtTWV0YUNvbnRlbnQgPSB7XG4gICAgICAgICAgICBlbmdpbmVOYW1lOlxuICAgICAgICAgICAgICAgIGVuZ2luZVNvdXJjZXMudHlwZSA9PT0gXCJMb2NhbEVuZ2luZVNvdXJjZXNcIlxuICAgICAgICAgICAgICAgICAgICA/IFwibG9jYWxcIlxuICAgICAgICAgICAgICAgICAgICA6IEVuZ2luZVZlcnNpb25VdGlscy5lbmdpbmVWZXJzaW9uVG9OYW1lKGVuZ2luZVNvdXJjZXMudmVyc2lvbiksXG4gICAgICAgICAgICByZXNvdXJjZXNIYXNoOiBcImxvY2FsLWhhc2hcIixcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKGZvcm1JbmZvLnRoZW1lcyAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGZvcm1NZXRhQ29udGVudC50aGVtZXMgPSBmb3JtSW5mby50aGVtZXM7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGZvcm1NZXRhQ29udGVudCwgdW5kZWZpbmVkLCBcIiAgXCIpO1xuICAgIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQSxJQUFBQSxJQUFBLEdBQUFDLHVCQUFBLENBQUFDLE9BQUE7QUFJQSxJQUFBQyxtQkFBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsc0JBQUEsR0FBQUYsT0FBQTtBQUNBLElBQUFHLGdCQUFBLEdBQUFILE9BQUE7QUFFQSxJQUFBSSxRQUFBLEdBQUFKLE9BQUE7QUFDQSxJQUFBSyxPQUFBLEdBQUFMLE9BQUE7QUFDQSxJQUFBTSxRQUFBLEdBQUFOLE9BQUE7QUFDQSxJQUFBTyxvQkFBQSxHQUFBUCxPQUFBO0FBR0EsSUFBQVEsY0FBQSxHQUFBUixPQUFBO0FBQTRELElBQUFTLElBQUEsRUFBQUMsS0FBQSxFQUFBQyxNQUFBO0FBQUEsU0FBQUMseUJBQUFDLFdBQUEsZUFBQUMsT0FBQSxrQ0FBQUMsaUJBQUEsT0FBQUQsT0FBQSxRQUFBRSxnQkFBQSxPQUFBRixPQUFBLFlBQUFG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
@@ -20,7 +20,7 @@ var _Observe = require("../../../../Commons/TasksCore/Observe");
20
20
  var _FsUtils = require("../../../../Commons/FsUtils");
21
21
  var _FormPathUtils = require("../../../../../../Common/FormPathUtils");
22
22
  var _TypingUtils = require("../../../../../../Common/TypingUtils");
23
- var _WellKnownDirectories = require("../Directories/WellKnownDirectories");
23
+ var _WellKnownDirectories = require("../../../../../../Common/WellKnownDirectories");
24
24
  var _ReportGeneratorErrorToPageBody = require("./ReportGeneratorErrorToPageBody");
25
25
  var _RunFormCompilationViaWebpackDevServer = require("./RunFormCompilationViaWebpackDevServer");
26
26
  var _WebpackHybridFileSystem = require("./WebpackInMemoryUtils/WebpackHybridFileSystem");
@@ -78,9 +78,10 @@ class BuildFormDevServer {
78
78
  this.gfvPaths = (_this$gfvPaths = this.gfvPaths) !== null && _this$gfvPaths !== void 0 ? _this$gfvPaths : await buildGfvToPathMap(this.allFarmConfig.map(x => path.join(x, "..")));
79
79
  if (this.gfvPaths.has(gfv)) {
80
80
  var _this$gfvPaths$get;
81
+ const formPath = (_this$gfvPaths$get = this.gfvPaths.get(gfv)) !== null && _this$gfvPaths$get !== void 0 ? _this$gfvPaths$get : (0, _TypingUtils.reject)();
81
82
  return {
82
- formPath: (_this$gfvPaths$get = this.gfvPaths.get(gfv)) !== null && _this$gfvPaths$get !== void 0 ? _this$gfvPaths$get : (0, _TypingUtils.reject)(),
83
- farmDirectory: path.join("..", "..", "..", "..", "..", "candy.farm")
83
+ formPath: formPath !== null && formPath !== void 0 ? formPath : (0, _TypingUtils.reject)(),
84
+ farmDirectory: path.normalize(path.join(formPath, "..", "..", "..", "..", "..", "candy.farm"))
84
85
  };
85
86
  }
86
87
  let farmDirectory;
@@ -141,7 +142,7 @@ class BuildFormDevServer {
141
142
  generator: y
142
143
  }), async fi => (0, _AcquireFormGenerator.getGeneratorSourceKey)(fi.generatorSource)).attach(async fi => _Observe.Observe.files(fi.formSourcesPath, "../../controls/**/generator/*", "schemas/**/*", "sugar/**/*", "controls/**/*", "autocalc/**/*", "helpers/**/*", "validations/**/*", "localization/**/*")).do(async fi => {
143
144
  try {
144
- const FormsDirWithHlPath = this.farmConfigArray.find(i => formPath.startsWith(i.farmDirectory));
145
+ const FormsDirWithHlPath = this.farmConfigArray.find(i => i.farmDirectory == farmDirectory);
145
146
  if (FormsDirWithHlPath == undefined) {
146
147
  throw Error("FormsDirWithHlPath === undefined");
147
148
  }
@@ -166,25 +167,26 @@ class BuildFormDevServer {
166
167
  while (!this.webpackDevServerStarted) {
167
168
  await (0, _AsyncUtils.delay)(500);
168
169
  }
169
- let fileName = "";
170
- const allPossibleFilePath = this.allFarmConfig.map(i => path.join(i, "forms", this.gfv, "form", filename));
170
+ let resultFileName = "";
171
+ const formPath = await this.findFormPath(this.gfv);
172
+ const allPossibleFilePath = [path.join(formPath.formPath, _WellKnownDirectories.WellKnownDirectories.GeneratedFormSubdirectory, filename)];
171
173
  for (const pth of allPossibleFilePath) {
172
174
  try {
173
175
  var _this$webpackHybridFi2;
174
176
  if ((_this$webpackHybridFi2 = this.webpackHybridFileSystem) !== null && _this$webpackHybridFi2 !== void 0 && _this$webpackHybridFi2.statSync(pth)) {
175
- fileName = pth;
177
+ resultFileName = pth;
176
178
  break;
177
179
  }
178
180
  } catch (e) {
179
181
  continue;
180
182
  }
181
183
  }
182
- if (fileName === "") {
183
- throw Error("getGeneratedFileAsStream filename not found");
184
+ if (resultFileName === "") {
185
+ throw Error(`getGeneratedFileAsStream ${filename} not found`);
184
186
  }
185
187
  return new Promise((resolve, r) => {
186
188
  var _this$webpackHybridFi3;
187
- (_this$webpackHybridFi3 = this.webpackHybridFileSystem) === null || _this$webpackHybridFi3 === void 0 ? void 0 : _this$webpackHybridFi3.readFile(fileName, "utf-8", (error, data) => {
189
+ (_this$webpackHybridFi3 = this.webpackHybridFileSystem) === null || _this$webpackHybridFi3 === void 0 ? void 0 : _this$webpackHybridFi3.readFile(resultFileName, "utf-8", (error, data) => {
188
190
  if (error) {
189
191
  r(error);
190
192
  } else {
@@ -217,4 +219,4 @@ class BuildFormDevServer {
217
219
  }
218
220
  }
219
221
  exports.BuildFormDevServer = BuildFormDevServer;
220
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJwYXRoIiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJyZXF1aXJlIiwiX3N0cmVhbSIsIl9odHRwcyIsIl9ub2RlRmV0Y2giLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX3BMaW1pdCIsIl9mc0V4dHJhIiwiX0dlbmVyYXRlRm9ybSIsIl9BY3F1aXJlRm9ybUdlbmVyYXRvciIsIl9QdWJsaXNoZWRWZXJzaW9uVXRpbHMiLCJfUmVzb2x2ZUZvcm1JbmZvIiwiX0FzeW5jVXRpbHMiLCJfT2JzZXJ2ZSIsIl9Gc1V0aWxzIiwiX0Zvcm1QYXRoVXRpbHMiLCJfVHlwaW5nVXRpbHMiLCJfV2VsbEtub3duRGlyZWN0b3JpZXMiLCJfUmVwb3J0R2VuZXJhdG9yRXJyb3JUb1BhZ2VCb2R5IiwiX1J1bkZvcm1Db21waWxhdGlvblZpYVdlYnBhY2tEZXZTZXJ2ZXIiLCJfV2VicGFja0h5YnJpZEZpbGVTeXN0ZW0iLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJub2RlSW50ZXJvcCIsIldlYWtNYXAiLCJjYWNoZUJhYmVsSW50ZXJvcCIsImNhY2hlTm9kZUludGVyb3AiLCJvYmoiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsImNhY2hlIiwiaGFzIiwiZ2V0IiwibmV3T2JqIiwiaGFzUHJvcGVydHlEZXNjcmlwdG9yIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJrZXkiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJkZXNjIiwic2V0IiwiYnVpbGRHZnZUb1BhdGhNYXAiLCJyZXBvc2l0b3J5Um9vdHMiLCJyZXN1bHQiLCJNYXAiLCJyZXBvc2l0b3J5Um9vdCIsImZvcm1QYXRocyIsImdsb2JBc3luYyIsIldlbGxLbm93bkRpcmVjdG9yaWVzIiwiQ2FuZHlTdWJkaXJlY3RvcnlOYW1lIiwiY3dkIiwiZm9ybVBhdGgiLCJnZnYiLCJleHRyYWN0R2Z2RnJvbUZvcm1QYXRoIiwiam9pbiIsIkJ1aWxkRm9ybURldlNlcnZlciIsImNvbnN0cnVjdG9yIiwicG9ydCIsImFsbEZhcm1Db25maWciLCJjYW5keU1vZHVsZXNEaXJlY3RvcnkiLCJmYXJtQ29uZmlnQXJyYXkiLCJ1c2VHZW5lcmF0b3JGcm9tTG9jYWxTb3VyY2VzIiwiZW5naW5lRGlyZWN0b3J5IiwiYnVpbGREZWJ1Z09ubHkiLCJza2lwQ29kZVJlZm9ybWF0dGluZyIsIm5pZ2h0bHkiLCJmYXJtRGlyZWN0b3J5Iiwic3RhcnRQYXJhbGxlbExpbWl0IiwiZ2VuZXJhdGVDaGFpbiIsIndlYnBhY2tEZXZTZXJ2ZXJTdGFydGVkIiwid2VicGFja0h5YnJpZEZpbGVTeXN0ZW0iLCJnZnZQYXRocyIsInVuZGVmaW5lZCIsInBMaW1pdCIsImZpbmRGb3JtUGF0aCIsIl90aGlzJGdmdlBhdGhzIiwibWFwIiwieCIsIl90aGlzJGdmdlBhdGhzJGdldCIsInJlamVjdCIsImZvcm1EaXJQYXRoIiwiYWxsUG9zc2libGVGaWxlUGF0aCIsImkiLCJwdGgiLCJwYXRoRXhpc3RzIiwiRXJyb3IiLCJzdGFydCIsIldlYnBhY2tIeWJyaWRGaWxlU3lzdGVtIiwiT2JzZXJ2ZSIsImZpbGUiLCJGb3JtSnNvbkZpbGVOYW1lIiwidHJhbnNmb3JtIiwiZm9ybUpzb25GaWxlIiwicmVzb2x2ZUZvcm1JbmZvIiwiZ2VuZXJhdG9yU291cmNlIiwicmVzb2x2ZUxvY2FsR2VuZXJhdG9yU291cmNlIiwiZW5naW5lU291cmNlIiwicmVzb2x2ZUxvY2FsRW5naW5lU291cmNlIiwiZ2VuZXJhdG9yVmVyc2lvbiIsImVuZ2luZVZlcnNpb24iLCJyZXNvbHZlR2VuZXJhdG9yVmVyc2lvbiIsInJlc29sdmVFbmdpbmVWZXJzaW9uIiwiYXR0YWNoIiwiZmkiLCJnZW5lcmF0b3JGYWN0b3J5IiwieSIsImdlbmVyYXRvciIsImdldEdlbmVyYXRvclNvdXJjZUtleSIsImZpbGVzIiwiZm9ybVNvdXJjZXNQYXRoIiwiZG8iLCJGb3Jtc0RpcldpdGhIbFBhdGgiLCJmaW5kIiwic3RhcnRzV2l0aCIsImdlbmVyYXRlRm9ybSIsImhsRmFybURpcmVjdG9yeVBhdGgiLCJyZXNvdXJjZXNIYXNoIiwiZSIsIl90aGlzJHdlYnBhY2tIeWJyaWRGaSIsImZvcm1FbnRyeVBvaW50UGF0aCIsIndyaXRlQmF0Y2giLCJnZXRSZXBvcnRHZW5lcmF0b3JFcnJvclRvUGFnZUJvZHlTY3JpcHQiLCJmb3JtYXRFcnJvciIsIm9ic2VydmUiLCJydW5Gb3JtQ29tcGlsYXRpb25WaWFXZWJwYWNrRGV2U2VydmVyIiwiZ2V0R2VuZXJhdGVkRmlsZUFzU3RyZWFtIiwiZmlsZW5hbWUiLCJkZWxheSIsImZpbGVOYW1lIiwiX3RoaXMkd2VicGFja0h5YnJpZEZpMiIsInN0YXRTeW5jIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyIiwiX3RoaXMkd2VicGFja0h5YnJpZEZpMyIsInJlYWRGaWxlIiwiZXJyb3IiLCJkYXRhIiwiUmVhZGFibGUiLCJmcm9tIiwiZ2V0RmlsZUFzU3RyZWFtIiwicmVzcG9uc2UiLCJmZXRjaCIsIm1ldGhvZCIsImFnZW50IiwiQWdlbnQiLCJyZWplY3RVbmF1dGhvcml6ZWQiLCJzdGF0dXMiLCJ0ZXh0UmVzcG9uc2UiLCJ0ZXh0IiwiYm9keSIsInN0YWNrIiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9DTElDb21tYW5kcy9CdWlsZFNlcnZlci9SZXNvdXJjZXNDb250cm9sbGVycy9EZXZTZXJ2ZXJzL0J1aWxkRm9ybURldlNlcnZlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyBSZWFkYWJsZSB9IGZyb20gXCJzdHJlYW1cIjtcbmltcG9ydCB7IEFnZW50IH0gZnJvbSBcImh0dHBzXCI7XG5cbmltcG9ydCBmZXRjaCBmcm9tIFwibm9kZS1mZXRjaFwiO1xuaW1wb3J0IHBMaW1pdCwgeyBMaW1pdCB9IGZyb20gXCJwLWxpbWl0XCI7XG5pbXBvcnQgeyBGYXJtQ29uZmlnIH0gZnJvbSBcIlRvb2xzL3NyYy9DYW5keUNMSVwiO1xuaW1wb3J0IHsgcGF0aEV4aXN0cyB9IGZyb20gXCJmcy1leHRyYVwiO1xuXG5pbXBvcnQgeyBnZW5lcmF0ZUZvcm0gfSBmcm9tIFwiLi4vLi4vLi4vLi4vQnVpbGRUYXNrcy9Gb3JtL0dlbmVyYXRlRm9ybVwiO1xuaW1wb3J0IHsgZ2VuZXJhdG9yRmFjdG9yeSwgZ2V0R2VuZXJhdG9yU291cmNlS2V5IH0gZnJvbSBcIi4uLy4uLy4uLy4uL0J1aWxkVGFza3MvR2VuZXJhdG9yL0FjcXVpcmVGb3JtR2VuZXJhdG9yXCI7XG5pbXBvcnQge1xuICAgIHJlc29sdmVFbmdpbmVWZXJzaW9uLFxuICAgIHJlc29sdmVHZW5lcmF0b3JWZXJzaW9uLFxuICAgIHJlc29sdmVMb2NhbEVuZ2luZVNvdXJjZSxcbiAgICByZXNvbHZlTG9jYWxHZW5lcmF0b3JTb3VyY2UsXG59IGZyb20gXCIuLi8uLi8uLi8uLi9CdWlsZFRhc2tzL1B1Ymxpc2hlZFZlcnNpb25VdGlsc1wiO1xuaW1wb3J0IHsgcmVzb2x2ZUZvcm1JbmZvIH0gZnJvbSBcIi4uLy4uLy4uLy4uL0J1aWxkVGFza3MvUmVzb2x2ZUZvcm1JbmZvXCI7XG5pbXBvcnQgeyBkZWxheSB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi8uLi9Db21tb24vQXN5bmNVdGlsc1wiO1xuaW1wb3J0IHsgUmVhc29uT3JFcnJvciB9IGZyb20gXCIuLi8uLi8uLi8uLi9Db21tb25zL0Vycm9yVW50eXBlZFwiO1xuaW1wb3J0IHsgQ2hhaW5hYmxlVmFsdWVQcm9kdWNlciB9IGZyb20gXCIuLi8uLi8uLi8uLi9Db21tb25zL1Rhc2tzQ29yZS9DaGFpbmFibGVWYWx1ZVByb2R1Y2VyXCI7XG5pbXBvcnQgeyBPYnNlcnZlIH0gZnJvbSBcIi4uLy4uLy4uLy4uL0NvbW1vbnMvVGFza3NDb3JlL09ic2VydmVcIjtcbmltcG9ydCB7IGdsb2JBc3luYyB9IGZyb20gXCIuLi8uLi8uLi8uLi9Db21tb25zL0ZzVXRpbHNcIjtcbmltcG9ydCB7IGV4dHJhY3RHZnZGcm9tRm9ybVBhdGggfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vLi4vQ29tbW9uL0Zvcm1QYXRoVXRpbHNcIjtcbmltcG9ydCB7IHJlamVjdCB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi8uLi9Db21tb24vVHlwaW5nVXRpbHNcIjtcbmltcG9ydCB7IFdlbGxLbm93bkRpcmVjdG9yaWVzIH0gZnJvbSBcIi4uL0RpcmVjdG9yaWVzL1dlbGxLbm93bkRpcmVjdG9yaWVzXCI7XG5cbmltcG9ydCB7IGdldFJlcG9ydEdlbmVyYXRvckVycm9yVG9QYWdlQm9keVNjcmlwdCB9IGZyb20gXCIuL1JlcG9ydEdlbmVyYXRvckVycm9yVG9QYWdlQm9keVwiO1xuaW1wb3J0IHsgcnVuRm9ybUNvbXBpbGF0aW9uVmlhV2VicGFja0RldlNlcnZlciB9IGZyb20gXCIuL1J1bkZvcm1Db21waWxhdGlvblZpYVdlYnBhY2tEZXZTZXJ2ZXJcIjtcbmltcG9ydCB7IFdlYnBhY2tIeWJyaWRGaWxlU3lzdGVtIH0gZnJvbSBcIi4vV2VicGFja0luTWVtb3J5VXRpbHMvV2VicGFja0h5YnJpZEZpbGVTeXN0ZW1cIjtcblxuYXN5bmMgZnVuY3Rpb24gYnVpbGRHZnZUb1BhdGhNYXAocmVwb3NpdG9yeVJvb3RzOiBzdHJpbmdbXSk6IFByb21pc2U8TWFwPHN0cmluZywgc3RyaW5nPj4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG5cbiAgICBmb3IgKGNvbnN0IHJlcG9zaXRvcnlSb290IG9mIHJlcG9zaXRvcnlSb290cykge1xuICAgICAgICBjb25zdCBmb3JtUGF0aHMgPSBhd2FpdCBnbG9iQXN5bmMoYGZvcm1zLyoqLyovJHtXZWxsS25vd25EaXJlY3Rvcmllcy5DYW5keVN1YmRpcmVjdG9yeU5hbWV9YCwge1xuICAgICAgICAgICAgY3dkOiByZXBvc2l0b3J5Um9vdCxcbiAgICAgICAgfSk7XG4gICAgICAgIGZvciAoY29uc3QgZm9ybVBhdGggb2YgZm9ybVBhdGhzKSB7XG4gICAgICAgICAgICBjb25zdCBnZnYgPSBleHRyYWN0R2Z2RnJvbUZvcm1QYXRoKGZvcm1QYXRoKTtcbiAgICAgICAgICAgIHJlc3VsdC5zZXQoZ2Z2LCBwYXRoLmpvaW4ocmVwb3NpdG9yeVJvb3QsIGZvcm1QYXRoKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgY2xhc3MgQnVpbGRGb3JtRGV2U2VydmVyIHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHBvcnQ6IG51bWJlcjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGFsbEZhcm1Db25maWc6IHN0cmluZ1tdO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZ2Z2OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSByZWFkb25seSBjYW5keU1vZHVsZXNEaXJlY3Rvcnk6IHN0cmluZztcbiAgICBwcml2YXRlIGZhcm1EaXJlY3Rvcnk6IHN0cmluZztcbiAgICBwcml2YXRlIGZvcm1QYXRoOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSByZWFkb25seSBmYXJtQ29uZmlnQXJyYXk6IEZhcm1Db25maWdbXTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHN0YXJ0UGFyYWxsZWxMaW1pdDogTGltaXQ7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBwcml2YXRlIGdlbmVyYXRlQ2hhaW4/OiBDaGFpbmFibGVWYWx1ZVByb2R1Y2VyPGFueT47XG4gICAgcHJpdmF0ZSB3ZWJwYWNrRGV2U2VydmVyU3RhcnRlZCA9IGZhbHNlO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgdXNlR2VuZXJhdG9yRnJvbUxvY2FsU291cmNlczogYm9vbGVhbjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGVuZ2luZURpcmVjdG9yeTogc3RyaW5nO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgbmlnaHRseTogYm9vbGVhbjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGJ1aWxkRGVidWdPbmx5OiBib29sZWFuO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgc2tpcENvZGVSZWZvcm1hdHRpbmc6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSB3ZWJwYWNrSHlicmlkRmlsZVN5c3RlbT86IFdlYnBhY2tIeWJyaWRGaWxlU3lzdGVtO1xuICAgIHByaXZhdGUgZ2Z2UGF0aHM6IHVuZGVmaW5lZCB8IE1hcDxzdHJpbmcsIHN0cmluZz4gPSB1bmRlZmluZWQ7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgICAgIHBvcnQ6IG51bWJlcixcbiAgICAgICAgYWxsRmFybUNvbmZpZzogc3RyaW5nW10sXG4gICAgICAgIGdmdjogc3RyaW5nLFxuICAgICAgICBjYW5keU1vZHVsZXNEaXJlY3Rvcnk6IHN0cmluZyxcbiAgICAgICAgZmFybUNvbmZpZ0FycmF5OiBGYXJtQ29uZmlnW10sXG4gICAgICAgIHVzZUdlbmVyYXRvckZyb21Mb2NhbFNvdXJjZXM6IGJvb2xlYW4sXG4gICAgICAgIGVuZ2luZURpcmVjdG9yeTogc3RyaW5nLFxuICAgICAgICBidWlsZERlYnVnT25seTogYm9vbGVhbixcbiAgICAgICAgc2tpcENvZGVSZWZvcm1hdHRpbmc6IGJvb2xlYW4sXG4gICAgICAgIG5pZ2h0bHk6IGJvb2xlYW5cbiAgICApIHtcbiAgICAgICAgdGhpcy5wb3J0ID0gcG9ydDtcbiAgICAgICAgdGhpcy5hbGxGYXJtQ29uZmlnID0gYWxsRmFybUNvbmZpZztcbiAgICAgICAgdGhpcy5nZnYgPSBnZnY7XG4gICAgICAgIHRoaXMuY2FuZHlNb2R1bGVzRGlyZWN0b3J5ID0gY2FuZHlNb2R1bGVzRGlyZWN0b3J5O1xuICAgICAgICB0aGlzLmZhcm1Db25maWdBcnJheSA9IGZhcm1Db25maWdBcnJheTtcbiAgICAgICAgdGhpcy5zdGFydFBhcmFsbGVsTGltaXQgPSBwTGltaXQoMSk7XG4gICAgICAgIHRoaXMudXNlR2VuZXJhdG9yRnJvbUxvY2FsU291cmNlcyA9IHVzZUdlbmVyYXRvckZyb21Mb2NhbFNvdXJjZXM7XG4gICAgICAgIHRoaXMuZW5naW5lRGlyZWN0b3J5ID0gZW5naW5lRGlyZWN0b3J5O1xuICAgICAgICB0aGlzLmJ1aWxkRGVidWdPbmx5ID0gYnVpbGREZWJ1Z09ubHk7XG4gICAgICAgIHRoaXMuc2tpcENvZGVSZWZvcm1hdHRpbmcgPSBza2lwQ29kZVJlZm9ybWF0dGluZztcbiAgICAgICAgdGhpcy5uaWdodGx5ID0gbmlnaHRseTtcbiAgICAgICAgdGhpcy5mYXJtRGlyZWN0b3J5ID0gXCJcIjtcbiAgICAgICAgdGhpcy5mb3JtUGF0aCA9IFwiXCI7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBmaW5kRm9ybVBhdGgoZ2Z2OiBzdHJpbmcpOiBQcm9taXNlPHsgZm9ybVBhdGg6IHN0cmluZzsgZmFybURpcmVjdG9yeTogc3RyaW5nIH0+IHtcbiAgICAgICAgdGhpcy5nZnZQYXRocyA9IHRoaXMuZ2Z2UGF0aHMgPz8gKGF3YWl0IGJ1aWxkR2Z2VG9QYXRoTWFwKHRoaXMuYWxsRmFybUNvbmZpZy5tYXAoeCA9PiBwYXRoLmpvaW4oeCwgXCIuLlwiKSkpKTtcblxuICAgICAgICBpZiAodGhpcy5nZnZQYXRocy5oYXMoZ2Z2KSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBmb3JtUGF0aDogdGhpcy5nZnZQYXRocy5nZXQoZ2Z2KSA/PyByZWplY3QoKSxcbiAgICAgICAgICAgICAgICBmYXJtRGlyZWN0b3J5OiBwYXRoLmpvaW4oXCIuLlwiLCBcIi4uXCIsIFwiLi5cIiwgXCIuLlwiLCBcIi4uXCIsIFwiY2FuZHkuZmFybVwiKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgZmFybURpcmVjdG9yeTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICBsZXQgZm9ybURpclBhdGggPSBcIlwiO1xuXG4gICAgICAgIGNvbnN0IGFsbFBvc3NpYmxlRmlsZVBhdGggPSB0aGlzLmFsbEZhcm1Db25maWcubWFwKGkgPT4gcGF0aC5qb2luKGksIFwiZm9ybXNcIiwgdGhpcy5nZnYpKTtcbiAgICAgICAgZm9yIChjb25zdCBwdGggb2YgYWxsUG9zc2libGVGaWxlUGF0aCkge1xuICAgICAgICAgICAgaWYgKGF3YWl0IHBhdGhFeGlzdHMocHRoKSkge1xuICAgICAgICAgICAgICAgIGZvcm1EaXJQYXRoID0gcHRoO1xuICAgICAgICAgICAgICAgIGZhcm1EaXJlY3RvcnkgPSBwYXRoLmpvaW4ocHRoLCBcIi4uXCIsIFwiLi5cIik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZm9ybURpclBhdGggPT09IFwiXCIpIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKFwiZm9ybURpclBhdGggbm90IGZvdW5kXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmYXJtRGlyZWN0b3J5ID09IHVuZGVmaW5lZCB8fCAhKGF3YWl0IHBhdGhFeGlzdHMoZmFybURpcmVjdG9yeSkpKSB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvcihgRmFybURpcmVjdG9yeSA9ICR7dGhpcy5mYXJtRGlyZWN0b3J5fSBub3QgZXhpc3RgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZm9ybVBhdGg6IGZvcm1EaXJQYXRoLFxuICAgICAgICAgICAgZmFybURpcmVjdG9yeTogZmFybURpcmVjdG9yeSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhcnQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0YXJ0UGFyYWxsZWxMaW1pdChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5nZW5lcmF0ZUNoYWluICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgeyBmb3JtUGF0aCwgZmFybURpcmVjdG9yeSB9ID0gYXdhaXQgdGhpcy5maW5kRm9ybVBhdGgodGhpcy5nZnYpO1xuICAgICAgICAgICAgdGhpcy5mYXJtRGlyZWN0b3J5ID0gZmFybURpcmVjdG9yeTtcbiAgICAgICAgICAgIHRoaXMuZm9ybVBhdGggPSBmb3JtUGF0aDtcbiAgICAgICAgICAgIHRoaXMud2VicGFja0h5YnJpZEZpbGVTeXN0ZW0gPSBuZXcgV2VicGFja0h5YnJpZEZpbGVTeXN0ZW0ocGF0aC5qb2luKHRoaXMuZm9ybVBhdGgsIFwiZm9ybVwiKSk7XG5cbiAgICAgICAgICAgIHRoaXMuZ2VuZXJhdGVDaGFpbiA9IE9ic2VydmUuZmlsZShwYXRoLmpvaW4odGhpcy5mb3JtUGF0aCwgV2VsbEtub3duRGlyZWN0b3JpZXMuRm9ybUpzb25GaWxlTmFtZSkpXG4gICAgICAgICAgICAgICAgLnRyYW5zZm9ybShmb3JtSnNvbkZpbGUgPT5cbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZUZvcm1JbmZvKFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUpzb25GaWxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtUGF0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmlnaHRseVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC50cmFuc2Zvcm0oYXN5bmMgeCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnVzZUdlbmVyYXRvckZyb21Mb2NhbFNvdXJjZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ueCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0b3JTb3VyY2U6IHJlc29sdmVMb2NhbEdlbmVyYXRvclNvdXJjZSh0aGlzLmVuZ2luZURpcmVjdG9yeSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5naW5lU291cmNlOiByZXNvbHZlTG9jYWxFbmdpbmVTb3VyY2UodGhpcy5lbmdpbmVEaXJlY3RvcnkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4LmdlbmVyYXRvclZlcnNpb24gPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZ2VuZXJhdG9yVmVyc2lvbiBpcyBubyBkZWZpbmVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHguZW5naW5lVmVyc2lvbiA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJlbmdpbmVWZXJzaW9uIGlzIG5vIGRlZmluZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLngsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdG9yU291cmNlOiBhd2FpdCByZXNvbHZlR2VuZXJhdG9yVmVyc2lvbih4LmdlbmVyYXRvclZlcnNpb24pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZ2luZVNvdXJjZTogYXdhaXQgcmVzb2x2ZUVuZ2luZVZlcnNpb24oeC5lbmdpbmVWZXJzaW9uKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5hdHRhY2goXG4gICAgICAgICAgICAgICAgICAgIGFzeW5jIGZpID0+IGdlbmVyYXRvckZhY3RvcnkoZmkuZ2VuZXJhdG9yU291cmNlLCB0aGlzLmNhbmR5TW9kdWxlc0RpcmVjdG9yeSwgZmFsc2UsIHVuZGVmaW5lZCksXG4gICAgICAgICAgICAgICAgICAgIGFzeW5jIChmaSwgeSkgPT4gKHsgLi4uZmksIGdlbmVyYXRvcjogeSB9KSxcbiAgICAgICAgICAgICAgICAgICAgYXN5bmMgZmkgPT4gZ2V0R2VuZXJhdG9yU291cmNlS2V5KGZpLmdlbmVyYXRvclNvdXJjZSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLmF0dGFjaChhc3luYyBmaSA9PlxuICAgICAgICAgICAgICAgICAgICBPYnNlcnZlLmZpbGVzKFxuICAgICAgICAgICAgICAgICAgICAgICAgZmkuZm9ybVNvdXJjZXNQYXRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCIuLi8uLi9jb250cm9scy8qKi9nZW5lcmF0b3IvKlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJzY2hlbWFzLyoqLypcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwic3VnYXIvKiovKlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJjb250cm9scy8qKi8qXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImF1dG9jYWxjLyoqLypcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiaGVscGVycy8qKi8qXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcInZhbGlkYXRpb25zLyoqLypcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwibG9jYWxpemF0aW9uLyoqLypcIlxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC5kbyhhc3luYyBmaSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGb3Jtc0RpcldpdGhIbFBhdGggPSB0aGlzLmZhcm1Db25maWdBcnJheS5maW5kKGkgPT4gZm9ybVBhdGguc3RhcnRzV2l0aChpLmZhcm1EaXJlY3RvcnkpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChGb3Jtc0RpcldpdGhIbFBhdGggPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJGb3Jtc0RpcldpdGhIbFBhdGggPT09IHVuZGVmaW5lZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IGdlbmVyYXRlRm9ybShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaS5mb3JtU291cmNlc1BhdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mYXJtRGlyZWN0b3J5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvcm1zRGlyV2l0aEhsUGF0aC5obEZhcm1EaXJlY3RvcnlQYXRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpLmdlbmVyYXRvcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza2lwQ29kZVJlZm9ybWF0dGluZzogdGhpcy5za2lwQ29kZVJlZm9ybWF0dGluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VzSGFzaDogXCJsb2NhbC1oYXNoXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLndlYnBhY2tIeWJyaWRGaWxlU3lzdGVtXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmb3JtRW50cnlQb2ludFBhdGggPSBwYXRoLmpvaW4odGhpcy5mb3JtUGF0aCwgXCJmb3JtXCIsIFwid2ViLmpzXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy53ZWJwYWNrSHlicmlkRmlsZVN5c3RlbT8ud3JpdGVCYXRjaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1FbnRyeVBvaW50UGF0aF06IGdldFJlcG9ydEdlbmVyYXRvckVycm9yVG9QYWdlQm9keVNjcmlwdCh0aGlzLmZvcm1hdEVycm9yKGUpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGF3YWl0IHRoaXMuZ2VuZXJhdGVDaGFpbi5vYnNlcnZlKCk7XG4gICAgICAgICAgICBhd2FpdCBydW5Gb3JtQ29tcGlsYXRpb25WaWFXZWJwYWNrRGV2U2VydmVyKFxuICAgICAgICAgICAgICAgIHRoaXMuZ2Z2LFxuICAgICAgICAgICAgICAgIHRoaXMuZmFybURpcmVjdG9yeSxcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm1QYXRoLFxuICAgICAgICAgICAgICAgIHBhdGguam9pbih0aGlzLmZhcm1EaXJlY3RvcnksIFwicmVzXCIpLFxuICAgICAgICAgICAgICAgIFwibG9jYWwtaGFzaFwiLFxuICAgICAgICAgICAgICAgIHRoaXMuYnVpbGREZWJ1Z09ubHksXG4gICAgICAgICAgICAgICAgdGhpcy53ZWJwYWNrSHlicmlkRmlsZVN5c3RlbSxcbiAgICAgICAgICAgICAgICB0aGlzLnBvcnRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLndlYnBhY2tEZXZTZXJ2ZXJTdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldEdlbmVyYXRlZEZpbGVBc1N0cmVhbShmaWxlbmFtZTogc3RyaW5nKTogUHJvbWlzZTxOb2RlSlMuUmVhZGFibGVTdHJlYW0+IHtcbiAgICAgICAgd2hpbGUgKCF0aGlzLndlYnBhY2tEZXZTZXJ2ZXJTdGFydGVkKSB7XG4gICAgICAgICAgICBhd2FpdCBkZWxheSg1MDApO1xuICAgICAgICB9XG4gICAgICAgIGxldCBmaWxlTmFtZSA9IFwiXCI7XG4gICAgICAgIGNvbnN0IGFsbFBvc3NpYmxlRmlsZVBhdGggPSB0aGlzLmFsbEZhcm1Db25maWcubWFwKGkgPT4gcGF0aC5qb2luKGksIFwiZm9ybXNcIiwgdGhpcy5nZnYsIFwiZm9ybVwiLCBmaWxlbmFtZSkpO1xuICAgICAgICBmb3IgKGNvbnN0IHB0aCBvZiBhbGxQb3NzaWJsZUZpbGVQYXRoKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLndlYnBhY2tIeWJyaWRGaWxlU3lzdGVtPy5zdGF0U3luYyhwdGgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGZpbGVOYW1lID0gcHRoO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpbGVOYW1lID09PSBcIlwiKSB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvcihcImdldEdlbmVyYXRlZEZpbGVBc1N0cmVhbSBmaWxlbmFtZSBub3QgZm91bmRcIik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHIpID0+IHtcbiAgICAgICAgICAgIHRoaXMud2VicGFja0h5YnJpZEZpbGVTeXN0ZW0/LnJlYWRGaWxlKGZpbGVOYW1lLCBcInV0Zi04XCIsIChlcnJvciwgZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICByKGVycm9yKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKFJlYWRhYmxlLmZyb20oW2RhdGFdKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRGaWxlQXNTdHJlYW0oZmlsZW5hbWU6IHN0cmluZyk6IFByb21pc2U8Tm9kZUpTLlJlYWRhYmxlU3RyZWFtPiB7XG4gICAgICAgIHdoaWxlICghdGhpcy53ZWJwYWNrRGV2U2VydmVyU3RhcnRlZCkge1xuICAgICAgICAgICAgYXdhaXQgZGVsYXkoNTAwKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGBodHRwczovL2xvY2FsaG9zdDoke3RoaXMucG9ydH0vJHtmaWxlbmFtZX1gLCB7XG4gICAgICAgICAgICBtZXRob2Q6IFwiR0VUXCIsXG4gICAgICAgICAgICBhZ2VudDogbmV3IEFnZW50KHsgcmVqZWN0VW5hdXRob3JpemVkOiBmYWxzZSB9KSxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgIT0gMjAwKSB7XG4gICAgICAgICAgICBjb25zdCB0ZXh0UmVzcG9uc2UgPSBhd2FpdCByZXNwb25zZS50ZXh0KCk7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IodGV4dFJlc3BvbnNlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzcG9uc2UuYm9keTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGZvcm1hdEVycm9yKGU6IFJlYXNvbk9yRXJyb3IpOiBzdHJpbmcge1xuICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gYCR7ZX1cXG4ke2Uuc3RhY2t9YDtcbiAgICAg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
222
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJwYXRoIiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJyZXF1aXJlIiwiX3N0cmVhbSIsIl9odHRwcyIsIl9ub2RlRmV0Y2giLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX3BMaW1pdCIsIl9mc0V4dHJhIiwiX0dlbmVyYXRlRm9ybSIsIl9BY3F1aXJlRm9ybUdlbmVyYXRvciIsIl9QdWJsaXNoZWRWZXJzaW9uVXRpbHMiLCJfUmVzb2x2ZUZvcm1JbmZvIiwiX0FzeW5jVXRpbHMiLCJfT2JzZXJ2ZSIsIl9Gc1V0aWxzIiwiX0Zvcm1QYXRoVXRpbHMiLCJfVHlwaW5nVXRpbHMiLCJfV2VsbEtub3duRGlyZWN0b3JpZXMiLCJfUmVwb3J0R2VuZXJhdG9yRXJyb3JUb1BhZ2VCb2R5IiwiX1J1bkZvcm1Db21waWxhdGlvblZpYVdlYnBhY2tEZXZTZXJ2ZXIiLCJfV2VicGFja0h5YnJpZEZpbGVTeXN0ZW0iLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJub2RlSW50ZXJvcCIsIldlYWtNYXAiLCJjYWNoZUJhYmVsSW50ZXJvcCIsImNhY2hlTm9kZUludGVyb3AiLCJvYmoiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsImNhY2hlIiwiaGFzIiwiZ2V0IiwibmV3T2JqIiwiaGFzUHJvcGVydHlEZXNjcmlwdG9yIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJrZXkiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJkZXNjIiwic2V0IiwiYnVpbGRHZnZUb1BhdGhNYXAiLCJyZXBvc2l0b3J5Um9vdHMiLCJyZXN1bHQiLCJNYXAiLCJyZXBvc2l0b3J5Um9vdCIsImZvcm1QYXRocyIsImdsb2JBc3luYyIsIldlbGxLbm93bkRpcmVjdG9yaWVzIiwiQ2FuZHlTdWJkaXJlY3RvcnlOYW1lIiwiY3dkIiwiZm9ybVBhdGgiLCJnZnYiLCJleHRyYWN0R2Z2RnJvbUZvcm1QYXRoIiwiam9pbiIsIkJ1aWxkRm9ybURldlNlcnZlciIsImNvbnN0cnVjdG9yIiwicG9ydCIsImFsbEZhcm1Db25maWciLCJjYW5keU1vZHVsZXNEaXJlY3RvcnkiLCJmYXJtQ29uZmlnQXJyYXkiLCJ1c2VHZW5lcmF0b3JGcm9tTG9jYWxTb3VyY2VzIiwiZW5naW5lRGlyZWN0b3J5IiwiYnVpbGREZWJ1Z09ubHkiLCJza2lwQ29kZVJlZm9ybWF0dGluZyIsIm5pZ2h0bHkiLCJmYXJtRGlyZWN0b3J5Iiwic3RhcnRQYXJhbGxlbExpbWl0IiwiZ2VuZXJhdGVDaGFpbiIsIndlYnBhY2tEZXZTZXJ2ZXJTdGFydGVkIiwid2VicGFja0h5YnJpZEZpbGVTeXN0ZW0iLCJnZnZQYXRocyIsInVuZGVmaW5lZCIsInBMaW1pdCIsImZpbmRGb3JtUGF0aCIsIl90aGlzJGdmdlBhdGhzIiwibWFwIiwieCIsIl90aGlzJGdmdlBhdGhzJGdldCIsInJlamVjdCIsIm5vcm1hbGl6ZSIsImZvcm1EaXJQYXRoIiwiYWxsUG9zc2libGVGaWxlUGF0aCIsImkiLCJwdGgiLCJwYXRoRXhpc3RzIiwiRXJyb3IiLCJzdGFydCIsIldlYnBhY2tIeWJyaWRGaWxlU3lzdGVtIiwiT2JzZXJ2ZSIsImZpbGUiLCJGb3JtSnNvbkZpbGVOYW1lIiwidHJhbnNmb3JtIiwiZm9ybUpzb25GaWxlIiwicmVzb2x2ZUZvcm1JbmZvIiwiZ2VuZXJhdG9yU291cmNlIiwicmVzb2x2ZUxvY2FsR2VuZXJhdG9yU291cmNlIiwiZW5naW5lU291cmNlIiwicmVzb2x2ZUxvY2FsRW5naW5lU291cmNlIiwiZ2VuZXJhdG9yVmVyc2lvbiIsImVuZ2luZVZlcnNpb24iLCJyZXNvbHZlR2VuZXJhdG9yVmVyc2lvbiIsInJlc29sdmVFbmdpbmVWZXJzaW9uIiwiYXR0YWNoIiwiZmkiLCJnZW5lcmF0b3JGYWN0b3J5IiwieSIsImdlbmVyYXRvciIsImdldEdlbmVyYXRvclNvdXJjZUtleSIsImZpbGVzIiwiZm9ybVNvdXJjZXNQYXRoIiwiZG8iLCJGb3Jtc0RpcldpdGhIbFBhdGgiLCJmaW5kIiwiZ2VuZXJhdGVGb3JtIiwiaGxGYXJtRGlyZWN0b3J5UGF0aCIsInJlc291cmNlc0hhc2giLCJlIiwiX3RoaXMkd2VicGFja0h5YnJpZEZpIiwiZm9ybUVudHJ5UG9pbnRQYXRoIiwid3JpdGVCYXRjaCIsImdldFJlcG9ydEdlbmVyYXRvckVycm9yVG9QYWdlQm9keVNjcmlwdCIsImZvcm1hdEVycm9yIiwib2JzZXJ2ZSIsInJ1bkZvcm1Db21waWxhdGlvblZpYVdlYnBhY2tEZXZTZXJ2ZXIiLCJnZXRHZW5lcmF0ZWRGaWxlQXNTdHJlYW0iLCJmaWxlbmFtZSIsImRlbGF5IiwicmVzdWx0RmlsZU5hbWUiLCJHZW5lcmF0ZWRGb3JtU3ViZGlyZWN0b3J5IiwiX3RoaXMkd2VicGFja0h5YnJpZEZpMiIsInN0YXRTeW5jIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyIiwiX3RoaXMkd2VicGFja0h5YnJpZEZpMyIsInJlYWRGaWxlIiwiZXJyb3IiLCJkYXRhIiwiUmVhZGFibGUiLCJmcm9tIiwiZ2V0RmlsZUFzU3RyZWFtIiwicmVzcG9uc2UiLCJmZXRjaCIsIm1ldGhvZCIsImFnZW50IiwiQWdlbnQiLCJyZWplY3RVbmF1dGhvcml6ZWQiLCJzdGF0dXMiLCJ0ZXh0UmVzcG9uc2UiLCJ0ZXh0IiwiYm9keSIsInN0YWNrIiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9DTElDb21tYW5kcy9CdWlsZFNlcnZlci9SZXNvdXJjZXNDb250cm9sbGVycy9EZXZTZXJ2ZXJzL0J1aWxkRm9ybURldlNlcnZlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyBSZWFkYWJsZSB9IGZyb20gXCJzdHJlYW1cIjtcbmltcG9ydCB7IEFnZW50IH0gZnJvbSBcImh0dHBzXCI7XG5cbmltcG9ydCBmZXRjaCBmcm9tIFwibm9kZS1mZXRjaFwiO1xuaW1wb3J0IHBMaW1pdCwgeyBMaW1pdCB9IGZyb20gXCJwLWxpbWl0XCI7XG5pbXBvcnQgeyBGYXJtQ29uZmlnIH0gZnJvbSBcIlRvb2xzL3NyYy9DYW5keUNMSVwiO1xuaW1wb3J0IHsgcGF0aEV4aXN0cyB9IGZyb20gXCJmcy1leHRyYVwiO1xuXG5pbXBvcnQgeyBnZW5lcmF0ZUZvcm0gfSBmcm9tIFwiLi4vLi4vLi4vLi4vQnVpbGRUYXNrcy9Gb3JtL0dlbmVyYXRlRm9ybVwiO1xuaW1wb3J0IHsgZ2VuZXJhdG9yRmFjdG9yeSwgZ2V0R2VuZXJhdG9yU291cmNlS2V5IH0gZnJvbSBcIi4uLy4uLy4uLy4uL0J1aWxkVGFza3MvR2VuZXJhdG9yL0FjcXVpcmVGb3JtR2VuZXJhdG9yXCI7XG5pbXBvcnQge1xuICAgIHJlc29sdmVFbmdpbmVWZXJzaW9uLFxuICAgIHJlc29sdmVHZW5lcmF0b3JWZXJzaW9uLFxuICAgIHJlc29sdmVMb2NhbEVuZ2luZVNvdXJjZSxcbiAgICByZXNvbHZlTG9jYWxHZW5lcmF0b3JTb3VyY2UsXG59IGZyb20gXCIuLi8uLi8uLi8uLi9CdWlsZFRhc2tzL1B1Ymxpc2hlZFZlcnNpb25VdGlsc1wiO1xuaW1wb3J0IHsgcmVzb2x2ZUZvcm1JbmZvIH0gZnJvbSBcIi4uLy4uLy4uLy4uL0J1aWxkVGFza3MvUmVzb2x2ZUZvcm1JbmZvXCI7XG5pbXBvcnQgeyBkZWxheSB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi8uLi9Db21tb24vQXN5bmNVdGlsc1wiO1xuaW1wb3J0IHsgUmVhc29uT3JFcnJvciB9IGZyb20gXCIuLi8uLi8uLi8uLi9Db21tb25zL0Vycm9yVW50eXBlZFwiO1xuaW1wb3J0IHsgQ2hhaW5hYmxlVmFsdWVQcm9kdWNlciB9IGZyb20gXCIuLi8uLi8uLi8uLi9Db21tb25zL1Rhc2tzQ29yZS9DaGFpbmFibGVWYWx1ZVByb2R1Y2VyXCI7XG5pbXBvcnQgeyBPYnNlcnZlIH0gZnJvbSBcIi4uLy4uLy4uLy4uL0NvbW1vbnMvVGFza3NDb3JlL09ic2VydmVcIjtcbmltcG9ydCB7IGdsb2JBc3luYyB9IGZyb20gXCIuLi8uLi8uLi8uLi9Db21tb25zL0ZzVXRpbHNcIjtcbmltcG9ydCB7IGV4dHJhY3RHZnZGcm9tRm9ybVBhdGggfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vLi4vQ29tbW9uL0Zvcm1QYXRoVXRpbHNcIjtcbmltcG9ydCB7IHJlamVjdCB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi8uLi9Db21tb24vVHlwaW5nVXRpbHNcIjtcbmltcG9ydCB7IFdlbGxLbm93bkRpcmVjdG9yaWVzIH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uLy4uL0NvbW1vbi9XZWxsS25vd25EaXJlY3Rvcmllc1wiO1xuXG5pbXBvcnQgeyBnZXRSZXBvcnRHZW5lcmF0b3JFcnJvclRvUGFnZUJvZHlTY3JpcHQgfSBmcm9tIFwiLi9SZXBvcnRHZW5lcmF0b3JFcnJvclRvUGFnZUJvZHlcIjtcbmltcG9ydCB7IHJ1bkZvcm1Db21waWxhdGlvblZpYVdlYnBhY2tEZXZTZXJ2ZXIgfSBmcm9tIFwiLi9SdW5Gb3JtQ29tcGlsYXRpb25WaWFXZWJwYWNrRGV2U2VydmVyXCI7XG5pbXBvcnQgeyBXZWJwYWNrSHlicmlkRmlsZVN5c3RlbSB9IGZyb20gXCIuL1dlYnBhY2tJbk1lbW9yeVV0aWxzL1dlYnBhY2tIeWJyaWRGaWxlU3lzdGVtXCI7XG5cbmFzeW5jIGZ1bmN0aW9uIGJ1aWxkR2Z2VG9QYXRoTWFwKHJlcG9zaXRvcnlSb290czogc3RyaW5nW10pOiBQcm9taXNlPE1hcDxzdHJpbmcsIHN0cmluZz4+IHtcbiAgICBjb25zdCByZXN1bHQgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuXG4gICAgZm9yIChjb25zdCByZXBvc2l0b3J5Um9vdCBvZiByZXBvc2l0b3J5Um9vdHMpIHtcbiAgICAgICAgY29uc3QgZm9ybVBhdGhzID0gYXdhaXQgZ2xvYkFzeW5jKGBmb3Jtcy8qKi8qLyR7V2VsbEtub3duRGlyZWN0b3JpZXMuQ2FuZHlTdWJkaXJlY3RvcnlOYW1lfWAsIHtcbiAgICAgICAgICAgIGN3ZDogcmVwb3NpdG9yeVJvb3QsXG4gICAgICAgIH0pO1xuICAgICAgICBmb3IgKGNvbnN0IGZvcm1QYXRoIG9mIGZvcm1QYXRocykge1xuICAgICAgICAgICAgY29uc3QgZ2Z2ID0gZXh0cmFjdEdmdkZyb21Gb3JtUGF0aChmb3JtUGF0aCk7XG4gICAgICAgICAgICByZXN1bHQuc2V0KGdmdiwgcGF0aC5qb2luKHJlcG9zaXRvcnlSb290LCBmb3JtUGF0aCkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGNsYXNzIEJ1aWxkRm9ybURldlNlcnZlciB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBwb3J0OiBudW1iZXI7XG4gICAgcHJpdmF0ZSByZWFkb25seSBhbGxGYXJtQ29uZmlnOiBzdHJpbmdbXTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGdmdjogc3RyaW5nO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgY2FuZHlNb2R1bGVzRGlyZWN0b3J5OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBmYXJtRGlyZWN0b3J5OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBmb3JtUGF0aDogc3RyaW5nO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZmFybUNvbmZpZ0FycmF5OiBGYXJtQ29uZmlnW107XG4gICAgcHJpdmF0ZSByZWFkb25seSBzdGFydFBhcmFsbGVsTGltaXQ6IExpbWl0O1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgcHJpdmF0ZSBnZW5lcmF0ZUNoYWluPzogQ2hhaW5hYmxlVmFsdWVQcm9kdWNlcjxhbnk+O1xuICAgIHByaXZhdGUgd2VicGFja0RldlNlcnZlclN0YXJ0ZWQgPSBmYWxzZTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHVzZUdlbmVyYXRvckZyb21Mb2NhbFNvdXJjZXM6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSByZWFkb25seSBlbmdpbmVEaXJlY3Rvcnk6IHN0cmluZztcbiAgICBwcml2YXRlIHJlYWRvbmx5IG5pZ2h0bHk6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSByZWFkb25seSBidWlsZERlYnVnT25seTogYm9vbGVhbjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHNraXBDb2RlUmVmb3JtYXR0aW5nOiBib29sZWFuO1xuICAgIHByaXZhdGUgd2VicGFja0h5YnJpZEZpbGVTeXN0ZW0/OiBXZWJwYWNrSHlicmlkRmlsZVN5c3RlbTtcbiAgICBwcml2YXRlIGdmdlBhdGhzOiB1bmRlZmluZWQgfCBNYXA8c3RyaW5nLCBzdHJpbmc+ID0gdW5kZWZpbmVkO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgICAgICBwb3J0OiBudW1iZXIsXG4gICAgICAgIGFsbEZhcm1Db25maWc6IHN0cmluZ1tdLFxuICAgICAgICBnZnY6IHN0cmluZyxcbiAgICAgICAgY2FuZHlNb2R1bGVzRGlyZWN0b3J5OiBzdHJpbmcsXG4gICAgICAgIGZhcm1Db25maWdBcnJheTogRmFybUNvbmZpZ1tdLFxuICAgICAgICB1c2VHZW5lcmF0b3JGcm9tTG9jYWxTb3VyY2VzOiBib29sZWFuLFxuICAgICAgICBlbmdpbmVEaXJlY3Rvcnk6IHN0cmluZyxcbiAgICAgICAgYnVpbGREZWJ1Z09ubHk6IGJvb2xlYW4sXG4gICAgICAgIHNraXBDb2RlUmVmb3JtYXR0aW5nOiBib29sZWFuLFxuICAgICAgICBuaWdodGx5OiBib29sZWFuXG4gICAgKSB7XG4gICAgICAgIHRoaXMucG9ydCA9IHBvcnQ7XG4gICAgICAgIHRoaXMuYWxsRmFybUNvbmZpZyA9IGFsbEZhcm1Db25maWc7XG4gICAgICAgIHRoaXMuZ2Z2ID0gZ2Z2O1xuICAgICAgICB0aGlzLmNhbmR5TW9kdWxlc0RpcmVjdG9yeSA9IGNhbmR5TW9kdWxlc0RpcmVjdG9yeTtcbiAgICAgICAgdGhpcy5mYXJtQ29uZmlnQXJyYXkgPSBmYXJtQ29uZmlnQXJyYXk7XG4gICAgICAgIHRoaXMuc3RhcnRQYXJhbGxlbExpbWl0ID0gcExpbWl0KDEpO1xuICAgICAgICB0aGlzLnVzZUdlbmVyYXRvckZyb21Mb2NhbFNvdXJjZXMgPSB1c2VHZW5lcmF0b3JGcm9tTG9jYWxTb3VyY2VzO1xuICAgICAgICB0aGlzLmVuZ2luZURpcmVjdG9yeSA9IGVuZ2luZURpcmVjdG9yeTtcbiAgICAgICAgdGhpcy5idWlsZERlYnVnT25seSA9IGJ1aWxkRGVidWdPbmx5O1xuICAgICAgICB0aGlzLnNraXBDb2RlUmVmb3JtYXR0aW5nID0gc2tpcENvZGVSZWZvcm1hdHRpbmc7XG4gICAgICAgIHRoaXMubmlnaHRseSA9IG5pZ2h0bHk7XG4gICAgICAgIHRoaXMuZmFybURpcmVjdG9yeSA9IFwiXCI7XG4gICAgICAgIHRoaXMuZm9ybVBhdGggPSBcIlwiO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgZmluZEZvcm1QYXRoKGdmdjogc3RyaW5nKTogUHJvbWlzZTx7IGZvcm1QYXRoOiBzdHJpbmc7IGZhcm1EaXJlY3Rvcnk6IHN0cmluZyB9PiB7XG4gICAgICAgIHRoaXMuZ2Z2UGF0aHMgPSB0aGlzLmdmdlBhdGhzID8/IChhd2FpdCBidWlsZEdmdlRvUGF0aE1hcCh0aGlzLmFsbEZhcm1Db25maWcubWFwKHggPT4gcGF0aC5qb2luKHgsIFwiLi5cIikpKSk7XG5cbiAgICAgICAgaWYgKHRoaXMuZ2Z2UGF0aHMuaGFzKGdmdikpIHtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1QYXRoID0gdGhpcy5nZnZQYXRocy5nZXQoZ2Z2KSA/PyByZWplY3QoKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgZm9ybVBhdGg6IGZvcm1QYXRoID8/IHJlamVjdCgpLFxuICAgICAgICAgICAgICAgIGZhcm1EaXJlY3Rvcnk6IHBhdGgubm9ybWFsaXplKHBhdGguam9pbihmb3JtUGF0aCwgXCIuLlwiLCBcIi4uXCIsIFwiLi5cIiwgXCIuLlwiLCBcIi4uXCIsIFwiY2FuZHkuZmFybVwiKSksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGZhcm1EaXJlY3Rvcnk6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgbGV0IGZvcm1EaXJQYXRoID0gXCJcIjtcblxuICAgICAgICBjb25zdCBhbGxQb3NzaWJsZUZpbGVQYXRoID0gdGhpcy5hbGxGYXJtQ29uZmlnLm1hcChpID0+IHBhdGguam9pbihpLCBcImZvcm1zXCIsIHRoaXMuZ2Z2KSk7XG4gICAgICAgIGZvciAoY29uc3QgcHRoIG9mIGFsbFBvc3NpYmxlRmlsZVBhdGgpIHtcbiAgICAgICAgICAgIGlmIChhd2FpdCBwYXRoRXhpc3RzKHB0aCkpIHtcbiAgICAgICAgICAgICAgICBmb3JtRGlyUGF0aCA9IHB0aDtcbiAgICAgICAgICAgICAgICBmYXJtRGlyZWN0b3J5ID0gcGF0aC5qb2luKHB0aCwgXCIuLlwiLCBcIi4uXCIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZvcm1EaXJQYXRoID09PSBcIlwiKSB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvcihcImZvcm1EaXJQYXRoIG5vdCBmb3VuZFwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmFybURpcmVjdG9yeSA9PSB1bmRlZmluZWQgfHwgIShhd2FpdCBwYXRoRXhpc3RzKGZhcm1EaXJlY3RvcnkpKSkge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoYEZhcm1EaXJlY3RvcnkgPSAke3RoaXMuZmFybURpcmVjdG9yeX0gbm90IGV4aXN0YCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGZvcm1QYXRoOiBmb3JtRGlyUGF0aCxcbiAgICAgICAgICAgIGZhcm1EaXJlY3Rvcnk6IGZhcm1EaXJlY3RvcnksXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXJ0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5zdGFydFBhcmFsbGVsTGltaXQoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuZ2VuZXJhdGVDaGFpbiAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHsgZm9ybVBhdGgsIGZhcm1EaXJlY3RvcnkgfSA9IGF3YWl0IHRoaXMuZmluZEZvcm1QYXRoKHRoaXMuZ2Z2KTtcbiAgICAgICAgICAgIHRoaXMuZmFybURpcmVjdG9yeSA9IGZhcm1EaXJlY3Rvcnk7XG4gICAgICAgICAgICB0aGlzLmZvcm1QYXRoID0gZm9ybVBhdGg7XG4gICAgICAgICAgICB0aGlzLndlYnBhY2tIeWJyaWRGaWxlU3lzdGVtID0gbmV3IFdlYnBhY2tIeWJyaWRGaWxlU3lzdGVtKHBhdGguam9pbih0aGlzLmZvcm1QYXRoLCBcImZvcm1cIikpO1xuXG4gICAgICAgICAgICB0aGlzLmdlbmVyYXRlQ2hhaW4gPSBPYnNlcnZlLmZpbGUocGF0aC5qb2luKHRoaXMuZm9ybVBhdGgsIFdlbGxLbm93bkRpcmVjdG9yaWVzLkZvcm1Kc29uRmlsZU5hbWUpKVxuICAgICAgICAgICAgICAgIC50cmFuc2Zvcm0oZm9ybUpzb25GaWxlID0+XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmVGb3JtSW5mbyhcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Kc29uRmlsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybVBhdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5pZ2h0bHlcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAudHJhbnNmb3JtKGFzeW5jIHggPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy51c2VHZW5lcmF0b3JGcm9tTG9jYWxTb3VyY2VzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLngsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdG9yU291cmNlOiByZXNvbHZlTG9jYWxHZW5lcmF0b3JTb3VyY2UodGhpcy5lbmdpbmVEaXJlY3RvcnkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZ2luZVNvdXJjZTogcmVzb2x2ZUxvY2FsRW5naW5lU291cmNlKHRoaXMuZW5naW5lRGlyZWN0b3J5KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoeC5nZW5lcmF0b3JWZXJzaW9uID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImdlbmVyYXRvclZlcnNpb24gaXMgbm8gZGVmaW5lZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4LmVuZ2luZVZlcnNpb24gPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZW5naW5lVmVyc2lvbiBpcyBubyBkZWZpbmVkXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi54LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRvclNvdXJjZTogYXdhaXQgcmVzb2x2ZUdlbmVyYXRvclZlcnNpb24oeC5nZW5lcmF0b3JWZXJzaW9uKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmdpbmVTb3VyY2U6IGF3YWl0IHJlc29sdmVFbmdpbmVWZXJzaW9uKHguZW5naW5lVmVyc2lvbiksXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuYXR0YWNoKFxuICAgICAgICAgICAgICAgICAgICBhc3luYyBmaSA9PiBnZW5lcmF0b3JGYWN0b3J5KGZpLmdlbmVyYXRvclNvdXJjZSwgdGhpcy5jYW5keU1vZHVsZXNEaXJlY3RvcnksIGZhbHNlLCB1bmRlZmluZWQpLFxuICAgICAgICAgICAgICAgICAgICBhc3luYyAoZmksIHkpID0+ICh7IC4uLmZpLCBnZW5lcmF0b3I6IHkgfSksXG4gICAgICAgICAgICAgICAgICAgIGFzeW5jIGZpID0+IGdldEdlbmVyYXRvclNvdXJjZUtleShmaS5nZW5lcmF0b3JTb3VyY2UpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC5hdHRhY2goYXN5bmMgZmkgPT5cbiAgICAgICAgICAgICAgICAgICAgT2JzZXJ2ZS5maWxlcyhcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpLmZvcm1Tb3VyY2VzUGF0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiLi4vLi4vY29udHJvbHMvKiovZ2VuZXJhdG9yLypcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwic2NoZW1hcy8qKi8qXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcInN1Z2FyLyoqLypcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiY29udHJvbHMvKiovKlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJhdXRvY2FsYy8qKi8qXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImhlbHBlcnMvKiovKlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJ2YWxpZGF0aW9ucy8qKi8qXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBcImxvY2FsaXphdGlvbi8qKi8qXCJcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAuZG8oYXN5bmMgZmkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRm9ybXNEaXJXaXRoSGxQYXRoID0gdGhpcy5mYXJtQ29uZmlnQXJyYXkuZmluZChpID0+IGkuZmFybURpcmVjdG9yeSA9PSBmYXJtRGlyZWN0b3J5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChGb3Jtc0RpcldpdGhIbFBhdGggPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJGb3Jtc0RpcldpdGhIbFBhdGggPT09IHVuZGVmaW5lZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IGdlbmVyYXRlRm9ybShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaS5mb3JtU291cmNlc1BhdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mYXJtRGlyZWN0b3J5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvcm1zRGlyV2l0aEhsUGF0aC5obEZhcm1EaXJlY3RvcnlQYXRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpLmdlbmVyYXRvcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza2lwQ29kZVJlZm9ybWF0dGluZzogdGhpcy5za2lwQ29kZVJlZm9ybWF0dGluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VzSGFzaDogXCJsb2NhbC1oYXNoXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLndlYnBhY2tIeWJyaWRGaWxlU3lzdGVtXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmb3JtRW50cnlQb2ludFBhdGggPSBwYXRoLmpvaW4odGhpcy5mb3JtUGF0aCwgXCJmb3JtXCIsIFwid2ViLmpzXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy53ZWJwYWNrSHlicmlkRmlsZVN5c3RlbT8ud3JpdGVCYXRjaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1FbnRyeVBvaW50UGF0aF06IGdldFJlcG9ydEdlbmVyYXRvckVycm9yVG9QYWdlQm9keVNjcmlwdCh0aGlzLmZvcm1hdEVycm9yKGUpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGF3YWl0IHRoaXMuZ2VuZXJhdGVDaGFpbi5vYnNlcnZlKCk7XG4gICAgICAgICAgICBhd2FpdCBydW5Gb3JtQ29tcGlsYXRpb25WaWFXZWJwYWNrRGV2U2VydmVyKFxuICAgICAgICAgICAgICAgIHRoaXMuZ2Z2LFxuICAgICAgICAgICAgICAgIHRoaXMuZmFybURpcmVjdG9yeSxcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm1QYXRoLFxuICAgICAgICAgICAgICAgIHBhdGguam9pbih0aGlzLmZhcm1EaXJlY3RvcnksIFwicmVzXCIpLFxuICAgICAgICAgICAgICAgIFwibG9jYWwtaGFzaFwiLFxuICAgICAgICAgICAgICAgIHRoaXMuYnVpbGREZWJ1Z09ubHksXG4gICAgICAgICAgICAgICAgdGhpcy53ZWJwYWNrSHlicmlkRmlsZVN5c3RlbSxcbiAgICAgICAgICAgICAgICB0aGlzLnBvcnRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLndlYnBhY2tEZXZTZXJ2ZXJTdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldEdlbmVyYXRlZEZpbGVBc1N0cmVhbShmaWxlbmFtZTogc3RyaW5nKTogUHJvbWlzZTxOb2RlSlMuUmVhZGFibGVTdHJlYW0+IHtcbiAgICAgICAgd2hpbGUgKCF0aGlzLndlYnBhY2tEZXZTZXJ2ZXJTdGFydGVkKSB7XG4gICAgICAgICAgICBhd2FpdCBkZWxheSg1MDApO1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXN1bHRGaWxlTmFtZSA9IFwiXCI7XG4gICAgICAgIGNvbnN0IGZvcm1QYXRoID0gYXdhaXQgdGhpcy5maW5kRm9ybVBhdGgodGhpcy5nZnYpO1xuICAgICAgICBjb25zdCBhbGxQb3NzaWJsZUZpbGVQYXRoID0gW1xuICAgICAgICAgICAgcGF0aC5qb2luKGZvcm1QYXRoLmZvcm1QYXRoLCBXZWxsS25vd25EaXJlY3Rvcmllcy5HZW5lcmF0ZWRGb3JtU3ViZGlyZWN0b3J5LCBmaWxlbmFtZSksXG4gICAgICAgIF07XG4gICAgICAgIGZvciAoY29uc3QgcHRoIG9mIGFsbFBvc3NpYmxlRmlsZVBhdGgpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMud2VicGFja0h5YnJpZEZpbGVTeXN0ZW0/LnN0YXRTeW5jKHB0aCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0RmlsZU5hbWUgPSBwdGg7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAocmVzdWx0RmlsZU5hbWUgPT09IFwiXCIpIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKGBnZXRHZW5lcmF0ZWRGaWxlQXNTdHJlYW0gJHtmaWxlbmFtZX0gbm90IGZvdW5kYCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHIpID0+IHtcbiAgICAgICAgICAgIHRoaXMud2VicGFja0h5YnJpZEZpbGVTeXN0ZW0/LnJlYWRGaWxlKHJlc3VsdEZpbGVOYW1lLCBcInV0Zi04XCIsIChlcnJvciwgZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICByKGVycm9yKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKFJlYWRhYmxlLmZyb20oW2RhdGFdKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRGaWxlQXNTdHJlYW0oZmlsZW5hbWU6IHN0cmluZyk6IFByb21pc2U8Tm9kZUpTLlJlYWRhYmxlU3RyZWFtPiB7XG4gICAgICAgIHdoaWxlICghdGhpcy53ZWJwYWNrRGV2U2VydmVyU3RhcnRlZCkge1xuICAgICAgICAgICAgYXdhaXQgZGVsYXkoNTAwKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGBodHRwczovL2xvY2FsaG9zdDoke3RoaXMucG9ydH0vJHtmaWxlbmFtZX1gLCB7XG4gICAgICAgICAgICBtZXRob2Q6IFwiR0VUXCIsXG4gICAgICAgICAgICBhZ2VudDogbmV3IEFnZW50KHsgcmVqZWN0VW5hdXRob3JpemVkOiBmYWxzZSB9KSxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgIT0gMjAwKSB7XG4gICAgICAgICAgICBjb25zdCB0ZXh0UmVzcG9uc2UgPSBhd2FpdCByZXNwb25zZS50ZXh0KCk7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IodGV4dFJlc3BvbnNlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzcG9uc2UuYm9keTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGZvcm1hdEVycm9yKGU6IFJlYXNvbk9yRXJyb3IpOiBzdHJpbmcge1xuICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gYCR7ZX1cXG4ke2Uuc3RhY2t9YDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYCR7ZX1gO1xuICAgIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBLElBQUFBLElBQUEsR0FBQUMsdUJBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLE9BQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLE1BQUEsR0FBQUYsT0FBQTtBQUVBLElBQUFHLFVBQUEsR0FBQUMsc0JBQUEsQ0FBQUosT0FBQTtBQUNBLElBQUFLLE9BQUEsR0FBQUQsc0JBQUEsQ0FBQUosT0FBQTtBQUVBLElBQUFNLFFBQUEsR0FBQU4sT0FBQTtBQUVBLElBQUFPLGFBQUEsR0FBQVAsT0FBQTtBQUNBLElBQUFRLHFCQUFBLEdBQUFSLE9BQUE7QUFDQSxJQUFBUyxzQkFBQSxHQUFBVCxPQUFBO0FBTUEsSUFBQVUsZ0JBQUEsR0FBQVYsT0FBQTtBQUNBLElBQUFXLFdBQUEsR0FBQVgsT0FBQTtBQUdBLElBQUFZLFFBQUEsR0FBQVosT0FBQTtBQUNBLElBQUFhLFFBQUEsR0FBQWIsT0FBQTtBQUNBLElBQUFjLGNBQUEsR0FBQWQsT0FBQTtBQUNBLElBQUFlLFlBQUEsR0FBQWYsT0FBQTtBQUNBLElBQUFnQixxQkFBQSxHQUFBaEIsT0FBQTtBQUVBLElBQUFpQiwrQkFBQSxHQUFBakIsT0FBQTtBQUNBLElBQUFrQixzQ0FBQSxHQUFBbEIsT0FBQTtBQUNBLElBQUFtQix3QkFBQSxHQUFBbkIsT0FBQTtBQUF5RixTQUFBb0IseUJBQUFDLFdBQUEsZUFBQUMsT0FBQSxrQ0FB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
@@ -8,14 +8,37 @@ exports.FarmDirectory = void 0;
8
8
  var _path = _interopRequireDefault(require("path"));
9
9
  var _fs = require("fs");
10
10
  var _fsExtra = require("fs-extra");
11
+ var _pLimit = _interopRequireDefault(require("p-limit"));
11
12
  var _FormGlobsUtils = require("../../../../Commons/FormGlobsUtils");
12
13
  var _FsUtils = require("../../../../Commons/FsUtils");
13
- var _WellKnownDirectories = require("./WellKnownDirectories");
14
+ var _TypingUtils = require("../../../../../../Common/TypingUtils");
15
+ var _ExtractGfvsFromFileName = require("../../../../Commons/ExtractGfvsFromFileName");
16
+ var _WellKnownDirectories = require("../../../../../../Common/WellKnownDirectories");
14
17
  class FarmDirectory {
15
18
  constructor(farmDirectory) {
16
19
  this.farmDirectory = void 0;
17
20
  this.gfvToPathMap = void 0;
21
+ this.allGfvInfos = void 0;
22
+ this.ensureGfvDirectoriesUpdated = void 0;
18
23
  this.farmDirectory = farmDirectory;
24
+ const updateGfvDirectoriesLimit = (0, _pLimit.default)(1);
25
+ this.ensureGfvDirectoriesUpdated = async () => {
26
+ if (this.allGfvInfos == undefined || this.gfvToPathMap == undefined) {
27
+ await updateGfvDirectoriesLimit(async () => {
28
+ if (this.allGfvInfos == undefined || this.gfvToPathMap == undefined) {
29
+ await this.updateGfvDirectories();
30
+ }
31
+ });
32
+ }
33
+ };
34
+ setTimeout(() => {
35
+ // eslint-disable-next-line @typescript-eslint/no-floating-promises
36
+ updateGfvDirectoriesLimit(() => this.updateGfvDirectories());
37
+ }, 60000);
38
+ }
39
+ async updateGfvDirectories() {
40
+ this.allGfvInfos = await _FormGlobsUtils.FormGlobs.enumerateFormsInRepository(_path.default.join(this.farmDirectory, ".."));
41
+ this.gfvToPathMap = new Map(this.allGfvInfos.map(x => [x.gfv, x.formPath]));
19
42
  }
20
43
  async getAllPicklists() {
21
44
  return await (0, _FsUtils.globAsync)("*", {
@@ -34,24 +57,27 @@ class FarmDirectory {
34
57
  }));
35
58
  }
36
59
  async enumerateAllGfvs() {
37
- return await _FormGlobsUtils.FormGlobs.enumerateFormsInRepository(_path.default.join(this.farmDirectory, ".."));
60
+ var _this$allGfvInfos;
61
+ await this.ensureGfvDirectoriesUpdated();
62
+ return (_this$allGfvInfos = this.allGfvInfos) !== null && _this$allGfvInfos !== void 0 ? _this$allGfvInfos : (0, _TypingUtils.reject)();
63
+ }
64
+ async getGfvToPathMap() {
65
+ var _this$gfvToPathMap;
66
+ await this.ensureGfvDirectoriesUpdated();
67
+ return (_this$gfvToPathMap = this.gfvToPathMap) !== null && _this$gfvToPathMap !== void 0 ? _this$gfvToPathMap : (0, _TypingUtils.reject)();
38
68
  }
39
69
  async getAllGfvs() {
40
70
  const formGfvPaths = await this.enumerateAllGfvs();
41
71
  return formGfvPaths.map(x => x.gfv);
42
72
  }
43
73
  async resolveFormGlobs(formGlobs) {
44
- var _this$gfvToPathMap;
45
- (_this$gfvToPathMap = this.gfvToPathMap) !== null && _this$gfvToPathMap !== void 0 ? _this$gfvToPathMap : this.gfvToPathMap = await this.buildGfvToPathMap();
74
+ await this.ensureGfvDirectoriesUpdated();
46
75
  return _FormGlobsUtils.FormGlobs.resolveGlobsToGfvs(await _FormGlobsUtils.FormGlobs.resolveSpecifiers(formGlobs, this.farmDirectory), this.farmDirectory);
47
76
  }
48
- async buildGfvToPathMap() {
49
- return new Map((await this.enumerateAllGfvs()).map(x => [x.gfv, x.formPath]));
50
- }
51
77
  async getFormJsonPath(gfv) {
52
78
  var _this$gfvToPathMap2;
53
- (_this$gfvToPathMap2 = this.gfvToPathMap) !== null && _this$gfvToPathMap2 !== void 0 ? _this$gfvToPathMap2 : this.gfvToPathMap = await this.buildGfvToPathMap();
54
- const formDirPath = this.gfvToPathMap.get(gfv);
79
+ await this.ensureGfvDirectoriesUpdated();
80
+ const formDirPath = ((_this$gfvToPathMap2 = this.gfvToPathMap) !== null && _this$gfvToPathMap2 !== void 0 ? _this$gfvToPathMap2 : (0, _TypingUtils.reject)()).get(gfv);
55
81
  if (formDirPath != undefined && (0, _fs.existsSync)(_path.default.join(formDirPath, _WellKnownDirectories.WellKnownDirectories.FormJsonFileName))) {
56
82
  return _path.default.join(formDirPath, _WellKnownDirectories.WellKnownDirectories.FormJsonFileName);
57
83
  }
@@ -67,8 +93,13 @@ class FarmDirectory {
67
93
  return result;
68
94
  }
69
95
  async getConverterFilePathByFileNameOrUndefined(filename) {
70
- for (const gfvInfo of await this.enumerateAllGfvs()) {
71
- const filePath = _path.default.join(gfvInfo.formPath, "converters", filename);
96
+ const gfvToPathMap = await this.getGfvToPathMap();
97
+ for (const gfv of (0, _ExtractGfvsFromFileName.extractGfvsFromFileName)(filename)) {
98
+ const formPath = gfvToPathMap.get(gfv);
99
+ if (formPath == undefined) {
100
+ continue;
101
+ }
102
+ const filePath = _path.default.join(formPath, "converters", filename);
72
103
  if (await (0, _fsExtra.pathExists)(filePath)) {
73
104
  return filePath;
74
105
  }
@@ -205,4 +236,4 @@ class FarmDirectory {
205
236
  }
206
237
  }
207
238
  exports.FarmDirectory = FarmDirectory;
208
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcGF0aCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX2ZzIiwiX2ZzRXh0cmEiLCJfRm9ybUdsb2JzVXRpbHMiLCJfRnNVdGlscyIsIl9XZWxsS25vd25EaXJlY3RvcmllcyIsIkZhcm1EaXJlY3RvcnkiLCJjb25zdHJ1Y3RvciIsImZhcm1EaXJlY3RvcnkiLCJnZnZUb1BhdGhNYXAiLCJnZXRBbGxQaWNrbGlzdHMiLCJnbG9iQXN5bmMiLCJjd2QiLCJwYXRoIiwiam9pbiIsImdldEZvcm1EaXJlY3RvcnkiLCJnZXRBbGxGb3JtSnNvbkZpbGVzIiwiZm9ybUdmdlBhdGhzIiwiZW51bWVyYXRlQWxsR2Z2cyIsIm1hcCIsIngiLCJnZnYiLCJGb3JtR2xvYnMiLCJlbnVtZXJhdGVGb3Jtc0luUmVwb3NpdG9yeSIsImdldEFsbEdmdnMiLCJyZXNvbHZlRm9ybUdsb2JzIiwiZm9ybUdsb2JzIiwiX3RoaXMkZ2Z2VG9QYXRoTWFwIiwiYnVpbGRHZnZUb1BhdGhNYXAiLCJyZXNvbHZlR2xvYnNUb0dmdnMiLCJyZXNvbHZlU3BlY2lmaWVycyIsIk1hcCIsImZvcm1QYXRoIiwiZ2V0Rm9ybUpzb25QYXRoIiwiX3RoaXMkZ2Z2VG9QYXRoTWFwMiIsImZvcm1EaXJQYXRoIiwiZ2V0IiwidW5kZWZpbmVkIiwiZXhpc3RzU3luYyIsIldlbGxLbm93bkRpcmVjdG9yaWVzIiwiRm9ybUpzb25GaWxlTmFtZSIsImdldEFsbENvbnZlcnRlckZpbGVQYXRocyIsInJlc3VsdCIsImdmdkluZm8iLCJwdXNoIiwiZ2V0Q29udmVydGVyRmlsZVBhdGhCeUZpbGVOYW1lT3JVbmRlZmluZWQiLCJmaWxlbmFtZSIsImZpbGVQYXRoIiwicGF0aEV4aXN0cyIsImdldEFsbFNjaGVtYXNGaWxlUGF0aHMiLCJnZXRTY2hlbWFGaWxlUGF0aEJ5RmlsZU5hbWVPclVuZGVmaW5lZCIsImdldEFsbE5vcm1hbGl6ZUZpbGVQYXRocyIsImdldE5vcm1hbGl6ZUZpbGVQYXRoQnlGaWxlTmFtZU9yVW5kZWZpbmVkIiwiZ2V0QWxsVW5tYXBGaWxlUGF0aHMiLCJnZXRVbm1hcEZpbGVQYXRoQnlGaWxlTmFtZU9yVW5kZWZpbmVkIiwiZ2V0QWxsTWFwRmlsZVBhdGhzIiwiZ2V0TWFwRmlsZVBhdGhCeUZpbGVOYW1lT3JVbmRlZmluZWQiLCJnZXRBbGxQYXRjaEZpbGVQYXRocyIsImdldFBhdGNoRmlsZVBhdGhCeUZpbGVOYW1lT3JVbmRlZmluZWQiLCJnZXRBbGxNZXJnZXJzRmlsZVBhdGhzIiwiZ2V0TWVyZ2Vyc0ZpbGVQYXRoQnlGaWxlTmFtZU9yVW5kZWZpbmVkIiwiZ2V0QWxsUHJlc2VudGF0aW9uc0ZpbGVOYW1lcyIsImdldFByZXNlbnRhdGlvbnNGaWxlUGF0aEJ5R2Z2T3JVbmRlZmluZWQiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL0NMSUNvbW1hbmRzL0J1aWxkU2VydmVyL1Jlc291cmNlc0NvbnRyb2xsZXJzL0RpcmVjdG9yaWVzL0Zhcm1EaXJlY3RvcnkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IGV4aXN0c1N5bmMgfSBmcm9tIFwiZnNcIjtcblxuaW1wb3J0IHsgcGF0aEV4aXN0cyB9IGZyb20gXCJmcy1leHRyYVwiO1xuXG5pbXBvcnQgeyBGb3JtR2xvYnMgfSBmcm9tIFwiLi4vLi4vLi4vLi4vQ29tbW9ucy9Gb3JtR2xvYnNVdGlsc1wiO1xuaW1wb3J0IHsgZ2xvYkFzeW5jIH0gZnJvbSBcIi4uLy4uLy4uLy4uL0NvbW1vbnMvRnNVdGlsc1wiO1xuaW1wb3J0IHsgV2VsbEtub3duRGlyZWN0b3JpZXMgfSBmcm9tIFwiLi9XZWxsS25vd25EaXJlY3Rvcmllc1wiO1xuXG5pbnRlcmZhY2UgRmFybUZpbGVJbmZvIHtcbiAgICBnZnY6IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIEZhcm1EaXJlY3Rvcnkge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZmFybURpcmVjdG9yeTogc3RyaW5nO1xuICAgIHByaXZhdGUgZ2Z2VG9QYXRoTWFwOiB1bmRlZmluZWQgfCBNYXA8c3RyaW5nLCBzdHJpbmc+O1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKGZhcm1EaXJlY3Rvcnk6IHN0cmluZykge1xuICAgICAgICB0aGlzLmZhcm1EaXJlY3RvcnkgPSBmYXJtRGlyZWN0b3J5O1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRBbGxQaWNrbGlzdHMoKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgZ2xvYkFzeW5jKFwiKlwiLCB7IGN3ZDogcGF0aC5qb2luKHRoaXMuZmFybURpcmVjdG9yeSwgXCJwaWNrbGlzdHNcIikgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldEZvcm1EaXJlY3RvcnkoKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgZ2xvYkFzeW5jKFwiKlwiLCB7IGN3ZDogcGF0aC5qb2luKHRoaXMuZmFybURpcmVjdG9yeSwgXCJwaWNrbGlzdHNcIikgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldEFsbEZvcm1Kc29uRmlsZXMoKTogUHJvbWlzZTxGYXJtRmlsZUluZm9bXT4ge1xuICAgICAgICBjb25zdCBmb3JtR2Z2UGF0aHMgPSBhd2FpdCB0aGlzLmVudW1lcmF0ZUFsbEdmdnMoKTtcbiAgICAgICAgcmV0dXJuIGZvcm1HZnZQYXRocy5tYXAoeCA9PiAoe1xuICAgICAgICAgICAgZ2Z2OiB4LmdmdixcbiAgICAgICAgfSkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgZW51bWVyYXRlQWxsR2Z2cygpOiBQcm9taXNlPEFycmF5PHsgZ2Z2OiBzdHJpbmc7IGZvcm1QYXRoOiBzdHJpbmc7IGZvcm1SZWxhdGl2ZVBhdGg6IHN0cmluZyB9Pj4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgRm9ybUdsb2JzLmVudW1lcmF0ZUZvcm1zSW5SZXBvc2l0b3J5KHBhdGguam9pbih0aGlzLmZhcm1EaXJlY3RvcnksIFwiLi5cIikpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRBbGxHZnZzKCk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICAgICAgY29uc3QgZm9ybUdmdlBhdGhzID0gYXdhaXQgdGhpcy5lbnVtZXJhdGVBbGxHZnZzKCk7XG4gICAgICAgIHJldHVybiBmb3JtR2Z2UGF0aHMubWFwKHggPT4geC5nZnYpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyByZXNvbHZlRm9ybUdsb2JzKGZvcm1HbG9iczogc3RyaW5nW10pOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgICAgIHRoaXMuZ2Z2VG9QYXRoTWFwID8/PSBhd2FpdCB0aGlzLmJ1aWxkR2Z2VG9QYXRoTWFwKCk7XG4gICAgICAgIHJldHVybiBGb3JtR2xvYnMucmVzb2x2ZUdsb2JzVG9HZnZzKFxuICAgICAgICAgICAgYXdhaXQgRm9ybUdsb2JzLnJlc29sdmVTcGVjaWZpZXJzKGZvcm1HbG9icywgdGhpcy5mYXJtRGlyZWN0b3J5KSxcbiAgICAgICAgICAgIHRoaXMuZmFybURpcmVjdG9yeVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgYnVpbGRHZnZUb1BhdGhNYXAoKSB7XG4gICAgICAgIHJldHVybiBuZXcgTWFwKChhd2FpdCB0aGlzLmVudW1lcmF0ZUFsbEdmdnMoKSkubWFwKHggPT4gW3guZ2Z2LCB4LmZvcm1QYXRoXSkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRGb3JtSnNvblBhdGgoZ2Z2OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICAgICAgICB0aGlzLmdmdlRvUGF0aE1hcCA/Pz0gYXdhaXQgdGhpcy5idWlsZEdmdlRvUGF0aE1hcCgpO1xuICAgICAgICBjb25zdCBmb3JtRGlyUGF0aCA9IHRoaXMuZ2Z2VG9QYXRoTWFwLmdldChnZnYpO1xuICAgICAgICBpZiAoZm9ybURpclBhdGggIT0gdW5kZWZpbmVkICYmIGV4aXN0c1N5bmMocGF0aC5qb2luKGZvcm1EaXJQYXRoLCBXZWxsS25vd25EaXJlY3Rvcmllcy5Gb3JtSnNvbkZpbGVOYW1lKSkpIHtcbiAgICAgICAgICAgIHJldHVybiBwYXRoLmpvaW4oZm9ybURpclBhdGgsIFdlbGxLbm93bkRpcmVjdG9yaWVzLkZvcm1Kc29uRmlsZU5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldEFsbENvbnZlcnRlckZpbGVQYXRocygpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGdmdkluZm8gb2YgYXdhaXQgdGhpcy5lbnVtZXJhdGVBbGxHZnZzKCkpIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKC4uLihhd2FpdCBnbG9iQXN5bmMoXCJjb252ZXJ0ZXJzLypcIiwgeyBjd2Q6IGdmdkluZm8uZm9ybVBhdGggfSkpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRDb252ZXJ0ZXJGaWxlUGF0aEJ5RmlsZU5hbWVPclVuZGVmaW5lZChmaWxlbmFtZTogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgZm9yIChjb25zdCBnZnZJbmZvIG9mIGF3YWl0IHRoaXMuZW51bWVyYXRlQWxsR2Z2cygpKSB7XG4gICAgICAgICAgICBjb25zdCBmaWxlUGF0aCA9IHBhdGguam9pbihnZnZJbmZvLmZvcm1QYXRoLCBcImNvbnZlcnRlcnNcIiwgZmlsZW5hbWUpO1xuICAgICAgICAgICAgaWYgKGF3YWl0IHBhdGhFeGlzdHMoZmlsZVBhdGgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZpbGVQYXRoO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldEFsbFNjaGVtYXNGaWxlUGF0aHMoKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBnZnZJbmZvIG9mIGF3YWl0IHRoaXMuZW51bWVyYXRlQWxsR2Z2cygpKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaCguLi4oYXdhaXQgZ2xvYkFzeW5jKFwic2NoZW1hcy8qXCIsIHsgY3dkOiBnZnZJbmZvLmZvcm1QYXRoIH0pKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0U2NoZW1hRmlsZVBhdGhCeUZpbGVOYW1lT3JVbmRlZmluZWQoZmlsZW5hbWU6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIGZvciAoY29uc3QgZ2Z2SW5mbyBvZiBhd2FpdCB0aGlzLmVudW1lcmF0ZUFsbEdmdnMoKSkge1xuICAgICAgICAgICAgY29uc3QgZmlsZVBhdGggPSBwYXRoLmpvaW4oZ2Z2SW5mby5mb3JtUGF0aCwgXCJzY2hlbWFzXCIsIGZpbGVuYW1lKTtcbiAgICAgICAgICAgIGlmIChhd2FpdCBwYXRoRXhpc3RzKGZpbGVQYXRoKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmaWxlUGF0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRBbGxOb3JtYWxpemVGaWxlUGF0aHMoKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBnZnZJbmZvIG9mIGF3YWl0IHRoaXMuZW51bWVyYXRlQWxsR2Z2cygpKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaCguLi4oYXdhaXQgZ2xvYkFzeW5jKFwibm9ybWFsaXplLypcIiwgeyBjd2Q6IGdmdkluZm8uZm9ybVBhdGggfSkpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXROb3JtYWxpemVGaWxlUGF0aEJ5RmlsZU5hbWVPclVuZGVmaW5lZChmaWxlbmFtZTogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgZm9yIChjb25zdCBnZnZJbmZvIG9mIGF3YWl0IHRoaXMuZW51bWVyYXRlQWxsR2Z2cygpKSB7XG4gICAgICAgICAgICBjb25zdCBmaWxlUGF0aCA9IHBhdGguam9pbihnZnZJbmZvLmZvcm1QYXRoLCBcIm5vcm1hbGl6ZVwiLCBmaWxlbmFtZSk7XG4gICAgICAgICAgICBpZiAoYXdhaXQgcGF0aEV4aXN0cyhmaWxlUGF0aCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmlsZVBhdGg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0QWxsVW5tYXBGaWxlUGF0aHMoKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBnZnZJbmZvIG9mIGF3YWl0IHRoaXMuZW51bWVyYXRlQWxsR2Z2cygpKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaCguLi4oYXdhaXQgZ2xvYkFzeW5jKFwidW5tYXAvKlwiLCB7IGN3ZDogZ2Z2SW5mby5mb3JtUGF0aCB9KSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldFVubWFwRmlsZVBhdGhCeUZpbGVOYW1lT3JVbmRlZmluZWQoZmlsZW5hbWU6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIGZvciAoY29uc3QgZ2Z2SW5mbyBvZiBhd2FpdCB0aGlzLmVudW1lcmF0ZUFsbEdmdnMoKSkge1xuICAgICAgICAgICAgY29uc3QgZmlsZVBhdGggPSBwYXRoLmpvaW4oZ2Z2SW5mby5mb3JtUGF0aCwgXCJ1bm1hcFwiLCBmaWxlbmFtZSk7XG4gICAgICAgICAgICBpZiAoYXdhaXQgcGF0aEV4aXN0cyhmaWxlUGF0aCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmlsZVBhdGg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0QWxsTWFwRmlsZVBhdGhzKCk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgICAgIGZvciAoY29uc3QgZ2Z2SW5mbyBvZiBhd2FpdCB0aGlzLmVudW1lcmF0ZUFsbEdmdnMoKSkge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2goLi4uKGF3YWl0IGdsb2JBc3luYyhcIm1hcC8qXCIsIHsgY3dkOiBnZnZJbmZvLmZvcm1QYXRoIH0pKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0TWFwRmlsZVBhdGhCeUZpbGVOYW1lT3JVbmRlZmluZWQoZmlsZW5hbWU6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIGZvciAoY29uc3QgZ2Z2SW5mbyBvZiBhd2FpdCB0aGlzLmVudW1lcmF0ZUFsbEdmdnMoKSkge1xuICAgICAgICAgICAgY29uc3QgZmlsZVBhdGggPSBwYXRoLmpvaW4oZ2Z2SW5mby5mb3JtUGF0aCwgXCJtYXBcIiwgZmlsZW5hbWUpO1xuICAgICAgICAgICAgaWYgKGF3YWl0IHBhdGhFeGlzdHMoZmlsZVBhdGgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZpbGVQYXRoO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldEFsbFBhdGNoRmlsZVBhdGhzKCk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgICAgIGZvciAoY29uc3QgZ2Z2SW5mbyBvZiBhd2FpdCB0aGlzLmVudW1lcmF0ZUFsbEdmdnMoKSkge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2goLi4uKGF3YWl0IGdsb2JBc3luYyhcInBhdGNoLypcIiwgeyBjd2Q6IGdmdkluZm8uZm9ybVBhdGggfSkpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRQYXRjaEZpbGVQYXRoQnlGaWxlTmFtZU9yVW5kZWZpbmVkKGZpbGVuYW1lOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICAgICAgICBmb3IgKGNvbnN0IGdmdkluZm8gb2YgYXdhaXQgdGhpcy5lbnVtZXJhdGVBbGxHZnZzKCkpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpbGVQYXRoID0gcGF0aC5qb2luKGdmdkluZm8uZm9ybVBhdGgsIFwicGF0Y2hcIiwgZmlsZW5hbWUpO1xuICAgICAgICAgICAgaWYgKGF3YWl0IHBhdGhFeGlzdHMoZmlsZVBhdGgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZpbGVQYXRoO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldEFsbE1lcmdlcnNGaWxlUGF0aHMoKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBnZnZJbmZvIG9mIGF3YWl0IHRoaXMuZW51bWVyYXRlQWxsR2Z2cygpKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaCguLi4oYXdhaXQgZ2xvYkFzeW5jKFwibWVyZ2Vycy8qXCIsIHsgY3dkOiBnZnZJbmZvLmZvcm1QYXRoIH0pKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0TWVyZ2Vyc0ZpbGVQYXRoQnlGaWxlTmFtZU9yVW5kZWZpbmVkKGZpbGVuYW1lOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICAgICAgICBmb3IgKGNvbnN0IGdmdkluZm8gb2YgYXdhaXQgdGhpcy5lbnVtZXJhdGVBbGxHZnZzKCkpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpbGVQYXRoID0gcGF0aC5qb2luKGdmdkluZm8uZm9ybVBhdGgsIFwibWVyZ2Vyc1wiLCBmaWxlbmFtZSk7XG4gICAgICAgICAgICBpZiAoYXdhaXQgcGF0aEV4aXN0cyhmaWxlUGF0aCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmlsZVBhdGg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0QWxsUHJlc2VudGF0aW9uc0ZpbGVOYW1lcygpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGdmdkluZm8gb2YgYXdhaXQgdGhpcy5lbnVtZXJhdGVBbGxHZnZzKCkpIHtcbiAgICAgICAgICAgIGlmIChhd2FpdCBwYXRoRXhpc3RzKHBhdGguam9pbihnZnZJbmZvLmZvcm1QYXRoLCBcInByZXNlbnRhdGlvbnMuanNvblwiKSkpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaChgJHtnZnZJbmZvLmdmdn0ucHJlc2VudGF0aW9ucy5qc29uYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0UHJlc2VudGF0aW9uc0ZpbGVQYXRoQnlHZnZPclVuZGVmaW5lZChnZnY6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIGZvciAoY29uc3QgZ2Z2SW5mbyBvZiBhd2FpdCB0aGlzLmVudW1lcmF0ZUFsbEdmdnMoKSkge1xuICAgICAgICAgICAgaWYgKGdmdkluZm8uZ2Z2ID09PSBnZnYpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWxlUGF0aCA9IHBhdGguam9pbihnZnZJbmZvLmZvcm1QYXRoLCBcInByZXNlbnRhdGlvbnMuanNvblwiKTtcbiAgICAgICAgICAgICAgICBpZiAoYXdhaXQgcGF0aEV4aXN0cyhmaWxlUGF0aCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZpbGVQYXRoO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBLElBQUFBLEtBQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLEdBQUEsR0FBQUQsT0FBQTtBQUVBLElBQUFFLFFBQUEsR0FBQUYsT0FBQTtBQUVBLElBQUFHLGVBQUEsR0FBQUgsT0FBQTtBQUNBLElBQUFJLFFBQUEsR0FBQUosT0FBQTtBQUNBLElBQUFLLHFCQUFBLEdBQUFMLE9BQUE7QUFNTyxNQUFNTSxhQUFhLENBQUM7RUFJaEJDLFdBQVdBLENBQUNDLGFBQXFCLEVBQUU7SUFBQSxLQUh6QkEsYUFBYTtJQUFBLEtBQ3RCQyxZQUFZO0lBR2hCLElBQUksQ0FBQ0QsYUFBYSxHQUFHQSxhQUFhO0VBQ3RDO0VBRUEsTUFBYUUsZUFBZUEsQ0FBQSxFQUFzQjtJQUM5QyxPQUFPLE1BQU0sSUFBQUMsa0JBQVMsRUFBQyxHQUFHLEVBQUU7TUFBRUMsR0FBRyxFQUFFQyxhQUFJLENBQUNDLElBQUksQ0FBQyxJQUFJLENBQUNOLGFBQWEsRUFBRSxXQUFX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
239
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcGF0aCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX2ZzIiwiX2ZzRXh0cmEiLCJfcExpbWl0IiwiX0Zvcm1HbG9ic1V0aWxzIiwiX0ZzVXRpbHMiLCJfVHlwaW5nVXRpbHMiLCJfRXh0cmFjdEdmdnNGcm9tRmlsZU5hbWUiLCJfV2VsbEtub3duRGlyZWN0b3JpZXMiLCJGYXJtRGlyZWN0b3J5IiwiY29uc3RydWN0b3IiLCJmYXJtRGlyZWN0b3J5IiwiZ2Z2VG9QYXRoTWFwIiwiYWxsR2Z2SW5mb3MiLCJlbnN1cmVHZnZEaXJlY3Rvcmllc1VwZGF0ZWQiLCJ1cGRhdGVHZnZEaXJlY3Rvcmllc0xpbWl0IiwicExpbWl0IiwidW5kZWZpbmVkIiwidXBkYXRlR2Z2RGlyZWN0b3JpZXMiLCJzZXRUaW1lb3V0IiwiRm9ybUdsb2JzIiwiZW51bWVyYXRlRm9ybXNJblJlcG9zaXRvcnkiLCJwYXRoIiwiam9pbiIsIk1hcCIsIm1hcCIsIngiLCJnZnYiLCJmb3JtUGF0aCIsImdldEFsbFBpY2tsaXN0cyIsImdsb2JBc3luYyIsImN3ZCIsImdldEZvcm1EaXJlY3RvcnkiLCJnZXRBbGxGb3JtSnNvbkZpbGVzIiwiZm9ybUdmdlBhdGhzIiwiZW51bWVyYXRlQWxsR2Z2cyIsIl90aGlzJGFsbEdmdkluZm9zIiwicmVqZWN0IiwiZ2V0R2Z2VG9QYXRoTWFwIiwiX3RoaXMkZ2Z2VG9QYXRoTWFwIiwiZ2V0QWxsR2Z2cyIsInJlc29sdmVGb3JtR2xvYnMiLCJmb3JtR2xvYnMiLCJyZXNvbHZlR2xvYnNUb0dmdnMiLCJyZXNvbHZlU3BlY2lmaWVycyIsImdldEZvcm1Kc29uUGF0aCIsIl90aGlzJGdmdlRvUGF0aE1hcDIiLCJmb3JtRGlyUGF0aCIsImdldCIsImV4aXN0c1N5bmMiLCJXZWxsS25vd25EaXJlY3RvcmllcyIsIkZvcm1Kc29uRmlsZU5hbWUiLCJnZXRBbGxDb252ZXJ0ZXJGaWxlUGF0aHMiLCJyZXN1bHQiLCJnZnZJbmZvIiwicHVzaCIsImdldENvbnZlcnRlckZpbGVQYXRoQnlGaWxlTmFtZU9yVW5kZWZpbmVkIiwiZmlsZW5hbWUiLCJleHRyYWN0R2Z2c0Zyb21GaWxlTmFtZSIsImZpbGVQYXRoIiwicGF0aEV4aXN0cyIsImdldEFsbFNjaGVtYXNGaWxlUGF0aHMiLCJnZXRTY2hlbWFGaWxlUGF0aEJ5RmlsZU5hbWVPclVuZGVmaW5lZCIsImdldEFsbE5vcm1hbGl6ZUZpbGVQYXRocyIsImdldE5vcm1hbGl6ZUZpbGVQYXRoQnlGaWxlTmFtZU9yVW5kZWZpbmVkIiwiZ2V0QWxsVW5tYXBGaWxlUGF0aHMiLCJnZXRVbm1hcEZpbGVQYXRoQnlGaWxlTmFtZU9yVW5kZWZpbmVkIiwiZ2V0QWxsTWFwRmlsZVBhdGhzIiwiZ2V0TWFwRmlsZVBhdGhCeUZpbGVOYW1lT3JVbmRlZmluZWQiLCJnZXRBbGxQYXRjaEZpbGVQYXRocyIsImdldFBhdGNoRmlsZVBhdGhCeUZpbGVOYW1lT3JVbmRlZmluZWQiLCJnZXRBbGxNZXJnZXJzRmlsZVBhdGhzIiwiZ2V0TWVyZ2Vyc0ZpbGVQYXRoQnlGaWxlTmFtZU9yVW5kZWZpbmVkIiwiZ2V0QWxsUHJlc2VudGF0aW9uc0ZpbGVOYW1lcyIsImdldFByZXNlbnRhdGlvbnNGaWxlUGF0aEJ5R2Z2T3JVbmRlZmluZWQiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL0NMSUNvbW1hbmRzL0J1aWxkU2VydmVyL1Jlc291cmNlc0NvbnRyb2xsZXJzL0RpcmVjdG9yaWVzL0Zhcm1EaXJlY3RvcnkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IGV4aXN0c1N5bmMgfSBmcm9tIFwiZnNcIjtcblxuaW1wb3J0IHsgcGF0aEV4aXN0cyB9IGZyb20gXCJmcy1leHRyYVwiO1xuaW1wb3J0IHBMaW1pdCBmcm9tIFwicC1saW1pdFwiO1xuXG5pbXBvcnQgeyBGb3JtR2xvYnMgfSBmcm9tIFwiLi4vLi4vLi4vLi4vQ29tbW9ucy9Gb3JtR2xvYnNVdGlsc1wiO1xuaW1wb3J0IHsgZ2xvYkFzeW5jIH0gZnJvbSBcIi4uLy4uLy4uLy4uL0NvbW1vbnMvRnNVdGlsc1wiO1xuaW1wb3J0IHsgcmVqZWN0IH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uLy4uL0NvbW1vbi9UeXBpbmdVdGlsc1wiO1xuaW1wb3J0IHsgZXh0cmFjdEdmdnNGcm9tRmlsZU5hbWUgfSBmcm9tIFwiLi4vLi4vLi4vLi4vQ29tbW9ucy9FeHRyYWN0R2Z2c0Zyb21GaWxlTmFtZVwiO1xuaW1wb3J0IHsgV2VsbEtub3duRGlyZWN0b3JpZXMgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vLi4vQ29tbW9uL1dlbGxLbm93bkRpcmVjdG9yaWVzXCI7XG5cbmludGVyZmFjZSBGYXJtRmlsZUluZm8ge1xuICAgIGdmdjogc3RyaW5nO1xufVxuXG5leHBvcnQgY2xhc3MgRmFybURpcmVjdG9yeSB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBmYXJtRGlyZWN0b3J5OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBnZnZUb1BhdGhNYXA6IHVuZGVmaW5lZCB8IE1hcDxzdHJpbmcsIHN0cmluZz47XG4gICAgcHJpdmF0ZSBhbGxHZnZJbmZvcz86IEFycmF5PHsgZ2Z2OiBzdHJpbmc7IGZvcm1QYXRoOiBzdHJpbmc7IGZvcm1SZWxhdGl2ZVBhdGg6IHN0cmluZyB9PjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGVuc3VyZUdmdkRpcmVjdG9yaWVzVXBkYXRlZDogKCkgPT4gUHJvbWlzZTx2b2lkPjtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihmYXJtRGlyZWN0b3J5OiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5mYXJtRGlyZWN0b3J5ID0gZmFybURpcmVjdG9yeTtcbiAgICAgICAgY29uc3QgdXBkYXRlR2Z2RGlyZWN0b3JpZXNMaW1pdCA9IHBMaW1pdCgxKTtcbiAgICAgICAgdGhpcy5lbnN1cmVHZnZEaXJlY3Rvcmllc1VwZGF0ZWQgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5hbGxHZnZJbmZvcyA9PSB1bmRlZmluZWQgfHwgdGhpcy5nZnZUb1BhdGhNYXAgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdXBkYXRlR2Z2RGlyZWN0b3JpZXNMaW1pdChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmFsbEdmdkluZm9zID09IHVuZGVmaW5lZCB8fCB0aGlzLmdmdlRvUGF0aE1hcCA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMudXBkYXRlR2Z2RGlyZWN0b3JpZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZmxvYXRpbmctcHJvbWlzZXNcbiAgICAgICAgICAgIHVwZGF0ZUdmdkRpcmVjdG9yaWVzTGltaXQoKCkgPT4gdGhpcy51cGRhdGVHZnZEaXJlY3RvcmllcygpKTtcbiAgICAgICAgfSwgNjAwMDApO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgdXBkYXRlR2Z2RGlyZWN0b3JpZXMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRoaXMuYWxsR2Z2SW5mb3MgPSBhd2FpdCBGb3JtR2xvYnMuZW51bWVyYXRlRm9ybXNJblJlcG9zaXRvcnkocGF0aC5qb2luKHRoaXMuZmFybURpcmVjdG9yeSwgXCIuLlwiKSk7XG4gICAgICAgIHRoaXMuZ2Z2VG9QYXRoTWFwID0gbmV3IE1hcCh0aGlzLmFsbEdmdkluZm9zLm1hcCh4ID0+IFt4LmdmdiwgeC5mb3JtUGF0aF0pKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0QWxsUGlja2xpc3RzKCk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IGdsb2JBc3luYyhcIipcIiwgeyBjd2Q6IHBhdGguam9pbih0aGlzLmZhcm1EaXJlY3RvcnksIFwicGlja2xpc3RzXCIpIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRGb3JtRGlyZWN0b3J5KCk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IGdsb2JBc3luYyhcIipcIiwgeyBjd2Q6IHBhdGguam9pbih0aGlzLmZhcm1EaXJlY3RvcnksIFwicGlja2xpc3RzXCIpIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRBbGxGb3JtSnNvbkZpbGVzKCk6IFByb21pc2U8RmFybUZpbGVJbmZvW10+IHtcbiAgICAgICAgY29uc3QgZm9ybUdmdlBhdGhzID0gYXdhaXQgdGhpcy5lbnVtZXJhdGVBbGxHZnZzKCk7XG4gICAgICAgIHJldHVybiBmb3JtR2Z2UGF0aHMubWFwKHggPT4gKHtcbiAgICAgICAgICAgIGdmdjogeC5nZnYsXG4gICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGVudW1lcmF0ZUFsbEdmdnMoKTogUHJvbWlzZTxBcnJheTx7IGdmdjogc3RyaW5nOyBmb3JtUGF0aDogc3RyaW5nOyBmb3JtUmVsYXRpdmVQYXRoOiBzdHJpbmcgfT4+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5lbnN1cmVHZnZEaXJlY3Rvcmllc1VwZGF0ZWQoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWxsR2Z2SW5mb3MgPz8gcmVqZWN0KCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBnZXRHZnZUb1BhdGhNYXAoKTogUHJvbWlzZTxNYXA8c3RyaW5nLCBzdHJpbmc+PiB7XG4gICAgICAgIGF3YWl0IHRoaXMuZW5zdXJlR2Z2RGlyZWN0b3JpZXNVcGRhdGVkKCk7XG4gICAgICAgIHJldHVybiB0aGlzLmdmdlRvUGF0aE1hcCA/PyByZWplY3QoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0QWxsR2Z2cygpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgICAgIGNvbnN0IGZvcm1HZnZQYXRocyA9IGF3YWl0IHRoaXMuZW51bWVyYXRlQWxsR2Z2cygpO1xuICAgICAgICByZXR1cm4gZm9ybUdmdlBhdGhzLm1hcCh4ID0+IHguZ2Z2KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgcmVzb2x2ZUZvcm1HbG9icyhmb3JtR2xvYnM6IHN0cmluZ1tdKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgICAgICBhd2FpdCB0aGlzLmVuc3VyZUdmdkRpcmVjdG9yaWVzVXBkYXRlZCgpO1xuICAgICAgICByZXR1cm4gRm9ybUdsb2JzLnJlc29sdmVHbG9ic1RvR2Z2cyhcbiAgICAgICAgICAgIGF3YWl0IEZvcm1HbG9icy5yZXNvbHZlU3BlY2lmaWVycyhmb3JtR2xvYnMsIHRoaXMuZmFybURpcmVjdG9yeSksXG4gICAgICAgICAgICB0aGlzLmZhcm1EaXJlY3RvcnlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0Rm9ybUpzb25QYXRoKGdmdjogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5lbnN1cmVHZnZEaXJlY3Rvcmllc1VwZGF0ZWQoKTtcbiAgICAgICAgY29uc3QgZm9ybURpclBhdGggPSAodGhpcy5nZnZUb1BhdGhNYXAgPz8gcmVqZWN0KCkpLmdldChnZnYpO1xuICAgICAgICBpZiAoZm9ybURpclBhdGggIT0gdW5kZWZpbmVkICYmIGV4aXN0c1N5bmMocGF0aC5qb2luKGZvcm1EaXJQYXRoLCBXZWxsS25vd25EaXJlY3Rvcmllcy5Gb3JtSnNvbkZpbGVOYW1lKSkpIHtcbiAgICAgICAgICAgIHJldHVybiBwYXRoLmpvaW4oZm9ybURpclBhdGgsIFdlbGxLbm93bkRpcmVjdG9yaWVzLkZvcm1Kc29uRmlsZU5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldEFsbENvbnZlcnRlckZpbGVQYXRocygpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGdmdkluZm8gb2YgYXdhaXQgdGhpcy5lbnVtZXJhdGVBbGxHZnZzKCkpIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKC4uLihhd2FpdCBnbG9iQXN5bmMoXCJjb252ZXJ0ZXJzLypcIiwgeyBjd2Q6IGdmdkluZm8uZm9ybVBhdGggfSkpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRDb252ZXJ0ZXJGaWxlUGF0aEJ5RmlsZU5hbWVPclVuZGVmaW5lZChmaWxlbmFtZTogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgY29uc3QgZ2Z2VG9QYXRoTWFwID0gYXdhaXQgdGhpcy5nZXRHZnZUb1BhdGhNYXAoKTtcbiAgICAgICAgZm9yIChjb25zdCBnZnYgb2YgZXh0cmFjdEdmdnNGcm9tRmlsZU5hbWUoZmlsZW5hbWUpKSB7XG4gICAgICAgICAgICBjb25zdCBmb3JtUGF0aCA9IGdmdlRvUGF0aE1hcC5nZXQoZ2Z2KTtcbiAgICAgICAgICAgIGlmIChmb3JtUGF0aCA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGZpbGVQYXRoID0gcGF0aC5qb2luKGZvcm1QYXRoLCBcImNvbnZlcnRlcnNcIiwgZmlsZW5hbWUpO1xuICAgICAgICAgICAgaWYgKGF3YWl0IHBhdGhFeGlzdHMoZmlsZVBhdGgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZpbGVQYXRoO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldEFsbFNjaGVtYXNGaWxlUGF0aHMoKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBnZnZJbmZvIG9mIGF3YWl0IHRoaXMuZW51bWVyYXRlQWxsR2Z2cygpKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaCguLi4oYXdhaXQgZ2xvYkFzeW5jKFwic2NoZW1hcy8qXCIsIHsgY3dkOiBnZnZJbmZvLmZvcm1QYXRoIH0pKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0U2NoZW1hRmlsZVBhdGhCeUZpbGVOYW1lT3JVbmRlZmluZWQoZmlsZW5hbWU6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIGZvciAoY29uc3QgZ2Z2SW5mbyBvZiBhd2FpdCB0aGlzLmVudW1lcmF0ZUFsbEdmdnMoKSkge1xuICAgICAgICAgICAgY29uc3QgZmlsZVBhdGggPSBwYXRoLmpvaW4oZ2Z2SW5mby5mb3JtUGF0aCwgXCJzY2hlbWFzXCIsIGZpbGVuYW1lKTtcbiAgICAgICAgICAgIGlmIChhd2FpdCBwYXRoRXhpc3RzKGZpbGVQYXRoKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmaWxlUGF0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRBbGxOb3JtYWxpemVGaWxlUGF0aHMoKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBnZnZJbmZvIG9mIGF3YWl0IHRoaXMuZW51bWVyYXRlQWxsR2Z2cygpKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaCguLi4oYXdhaXQgZ2xvYkFzeW5jKFwibm9ybWFsaXplLypcIiwgeyBjd2Q6IGdmdkluZm8uZm9ybVBhdGggfSkpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXROb3JtYWxpemVGaWxlUGF0aEJ5RmlsZU5hbWVPclVuZGVmaW5lZChmaWxlbmFtZTogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgZm9yIChjb25zdCBnZnZJbmZvIG9mIGF3YWl0IHRoaXMuZW51bWVyYXRlQWxsR2Z2cygpKSB7XG4gICAgICAgICAgICBjb25zdCBmaWxlUGF0aCA9IHBhdGguam9pbihnZnZJbmZvLmZvcm1QYXRoLCBcIm5vcm1hbGl6ZVwiLCBmaWxlbmFtZSk7XG4gICAgICAgICAgICBpZiAoYXdhaXQgcGF0aEV4aXN0cyhmaWxlUGF0aCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmlsZVBhdGg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0QWxsVW5tYXBGaWxlUGF0aHMoKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBnZnZJbmZvIG9mIGF3YWl0IHRoaXMuZW51bWVyYXRlQWxsR2Z2cygpKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaCguLi4oYXdhaXQgZ2xvYkFzeW5jKFwidW5tYXAvKlwiLCB7IGN3ZDogZ2Z2SW5mby5mb3JtUGF0aCB9KSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldFVubWFwRmlsZVBhdGhCeUZpbGVOYW1lT3JVbmRlZmluZWQoZmlsZW5hbWU6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIGZvciAoY29uc3QgZ2Z2SW5mbyBvZiBhd2FpdCB0aGlzLmVudW1lcmF0ZUFsbEdmdnMoKSkge1xuICAgICAgICAgICAgY29uc3QgZmlsZVBhdGggPSBwYXRoLmpvaW4oZ2Z2SW5mby5mb3JtUGF0aCwgXCJ1bm1hcFwiLCBmaWxlbmFtZSk7XG4gICAgICAgICAgICBpZiAoYXdhaXQgcGF0aEV4aXN0cyhmaWxlUGF0aCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmlsZVBhdGg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0QWxsTWFwRmlsZVBhdGhzKCk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgICAgIGZvciAoY29uc3QgZ2Z2SW5mbyBvZiBhd2FpdCB0aGlzLmVudW1lcmF0ZUFsbEdmdnMoKSkge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2goLi4uKGF3YWl0IGdsb2JBc3luYyhcIm1hcC8qXCIsIHsgY3dkOiBnZnZJbmZvLmZvcm1QYXRoIH0pKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0TWFwRmlsZVBhdGhCeUZpbGVOYW1lT3JVbmRlZmluZWQoZmlsZW5hbWU6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIGZvciAoY29uc3QgZ2Z2SW5mbyBvZiBhd2FpdCB0aGlzLmVudW1lcmF0ZUFsbEdmdnMoKSkge1xuICAgICAgICAgICAgY29uc3QgZmlsZVBhdGggPSBwYXRoLmpvaW4oZ2Z2SW5mby5mb3JtUGF0aCwgXCJtYXBcIiwgZmlsZW5hbWUpO1xuICAgICAgICAgICAgaWYgKGF3YWl0IHBhdGhFeGlzdHMoZmlsZVBhdGgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZpbGVQYXRoO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldEFsbFBhdGNoRmlsZVBhdGhzKCk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgICAgIGZvciAoY29uc3QgZ2Z2SW5mbyBvZiBhd2FpdCB0aGlzLmVudW1lcmF0ZUFsbEdmdnMoKSkge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2goLi4uKGF3YWl0IGdsb2JBc3luYyhcInBhdGNoLypcIiwgeyBjd2Q6IGdmdkluZm8uZm9ybVBhdGggfSkpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRQYXRjaEZpbGVQYXRoQnlGaWxlTmFtZU9yVW5kZWZpbmVkKGZpbGVuYW1lOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICAgICAgICBmb3IgKGNvbnN0IGdmdkluZm8gb2YgYXdhaXQgdGhpcy5lbnVtZXJhdGVBbGxHZnZzKCkpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpbGVQYXRoID0gcGF0aC5qb2luKGdmdkluZm8uZm9ybVBhdGgsIFwicGF0Y2hcIiwgZmlsZW5hbWUpO1xuICAgICAgICAgICAgaWYgKGF3YWl0IHBhdGhFeGlzdHMoZmlsZVBhdGgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZpbGVQYXRoO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldEFsbE1lcmdlcnNGaWxlUGF0aHMoKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBnZnZJbmZvIG9mIGF3YWl0IHRoaXMuZW51bWVyYXRlQWxsR2Z2cygpKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaCguLi4oYXdhaXQgZ2xvYkFzeW5jKFwibWVyZ2Vycy8qXCIsIHsgY3dkOiBnZnZJbmZvLmZvcm1QYXRoIH0pKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0TWVyZ2Vyc0ZpbGVQYXRoQnlGaWxlTmFtZU9yVW5kZWZpbmVkKGZpbGVuYW1lOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICAgICAgICBmb3IgKGNvbnN0IGdmdkluZm8gb2YgYXdhaXQgdGhpcy5lbnVtZXJhdGVBbGxHZnZzKCkpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpbGVQYXRoID0gcGF0aC5qb2luKGdmdkluZm8uZm9ybVBhdGgsIFwibWVyZ2Vyc1wiLCBmaWxlbmFtZSk7XG4gICAgICAgICAgICBpZiAoYXdhaXQgcGF0aEV4aXN0cyhmaWxlUGF0aCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmlsZVBhdGg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0QWxsUHJlc2VudGF0aW9uc0ZpbGVOYW1lcygpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGdmdkluZm8gb2YgYXdhaXQgdGhpcy5lbnVtZXJhdGVBbGxHZnZzKCkpIHtcbiAgICAgICAgICAgIGlmIChhd2FpdCBwYXRoRXhpc3RzKHBhdGguam9pbihnZnZJbmZvLmZvcm1QYXRoLCBcInByZXNlbnRhdGlvbnMuanNvblwiKSkpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaChgJHtnZnZJbmZvLmdmdn0ucHJlc2VudGF0aW9ucy5qc29uYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0UHJlc2VudGF0aW9uc0ZpbGVQYXRoQnlHZnZPclVuZGVmaW5lZChnZnY6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIGZvciAoY29uc3QgZ2Z2SW5mbyBvZiBhd2FpdCB0aGlzLmVudW1lcmF0ZUFsbEdmdnMoKSkge1xuICAgICAgICAgICAgaWYgKGdmdkluZm8uZ2Z2ID09PSBnZnYpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWxlUGF0aCA9IHBhdGguam9pbihnZnZJbmZvLmZvcm1QYXRoLCBcInByZXNlbnRhdGlvbnMuanNvblwiKTtcbiAgICAgICAgICAgICAgICBpZiAoYXdhaXQgcGF0aEV4aXN0cyhmaWxlUGF0aCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZpbGVQYXRoO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBLElBQUFBLEtBQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLEdBQUEsR0FBQUQsT0FBQTtBQUVBLElBQUFFLFFBQUEsR0FBQUYsT0FBQTtBQUNBLElBQUFHLE9BQUEsR0FBQUosc0JBQUEsQ0FBQUMsT0FBQTtBQUVBLElBQUFJLGVBQUEsR0FBQUosT0FBQTtBQUNBLElBQUFLLFFBQUEsR0FBQUwsT0FBQTtBQUNBLElBQUFNLFlBQUEsR0FBQU4sT0FBQTtBQUNBLElBQUFPLHdCQUFBLEdBQUFQLE9BQUE7QUFDQSxJQUFBUSxxQkFBQSxHQUFBUixPQUFBO0FBTU8sTUFBTVMsYUFBYSxDQUFDO0VBTWhCQyxXQUFXQSxDQUFDQyxhQUFxQixFQUFFO0lBQUEsS0FMekJBLGFBQWE7SUFBQSxLQUN0QkMsWUFBWTtJQUFBLEtBQ1pDLFdBQVc7SUFBQSxLQUNGQywyQkFBMkI7SUFHeEMsSUFBSSxDQUFDSCxhQUFhLEdBQUdBLGFBQWE7SUFDbEMsTUFBTUkseUJBQXlCLEdBQUcsSUFBQUMsZUFBTSxFQUFDLENBQUMs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