@cdktn/cli-core 0.24.0-pre.43 → 0.24.0-pre.47

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 (34) hide show
  1. package/LICENSE +355 -0
  2. package/build/lib/cdktf-config.js +8 -18
  3. package/build/lib/cdktf-project.js +3 -3
  4. package/build/lib/convert.js +10 -19
  5. package/build/lib/dependencies/dependency-manager.d.ts.map +1 -1
  6. package/build/lib/dependencies/dependency-manager.js +8 -18
  7. package/build/lib/dependencies/package-manager.js +8 -18
  8. package/build/lib/dependencies/prebuilt-providers.js +16 -25
  9. package/build/lib/dependencies/registry-api.js +10 -19
  10. package/build/lib/dependencies/version-constraints.js +11 -20
  11. package/build/lib/error-reporting.js +13 -22
  12. package/build/lib/errors.d.ts.map +1 -1
  13. package/build/lib/execution-logs.js +3 -2
  14. package/build/lib/get.js +11 -21
  15. package/build/lib/helpers/stack-helpers.js +9 -8
  16. package/build/lib/init.js +11 -21
  17. package/build/lib/local-provider-constraints.js +8 -18
  18. package/build/lib/models/deploy-machine.d.ts.map +1 -1
  19. package/build/lib/models/deploy-machine.js +9 -9
  20. package/build/lib/models/interactive-process.js +3 -2
  21. package/build/lib/models/schema.js +8 -18
  22. package/build/lib/models/terraform-cli.d.ts.map +1 -1
  23. package/build/lib/models/terraform-cli.js +11 -21
  24. package/build/lib/models/terraform.js +3 -3
  25. package/build/lib/output.d.ts.map +1 -1
  26. package/build/lib/output.js +11 -21
  27. package/build/lib/provider-add.js +3 -2
  28. package/build/lib/server/terraform-logs.js +3 -2
  29. package/build/lib/synth-stack.js +8 -18
  30. package/build/lib/synth.js +10 -19
  31. package/build/lib/terraform-json.js +8 -18
  32. package/build/lib/watch.js +10 -19
  33. package/package.json +20 -19
  34. package/templates/java/gradlew +0 -0
@@ -1,7 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.CdktfProject = void 0;
4
- exports.isWaitingForUserInputUpdate = isWaitingForUserInputUpdate;
3
+ exports.CdktfProject = exports.isWaitingForUserInputUpdate = void 0;
5
4
  // Copyright (c) HashiCorp, Inc
6
5
  // SPDX-License-Identifier: MPL-2.0
7
6
  const commons_1 = require("@cdktn/commons");
@@ -14,6 +13,7 @@ const cdktf_project_io_handler_1 = require("./cdktf-project-io-handler");
14
13
  function isWaitingForUserInputUpdate(update) {
15
14
  return ["waiting for approval", "waiting for sentinel override"].includes(update.type);
16
15
  }
16
+ exports.isWaitingForUserInputUpdate = isWaitingForUserInputUpdate;
17
17
  class CdktfProject {
18
18
  constructor({ synthCommand, outDir, onUpdate, onLog, workingDirectory = process.cwd(), synthOrigin, hcl = false, }) {
19
19
  // Set during deploy / destroy
@@ -367,4 +367,4 @@ class CdktfProject {
367
367
  }
368
368
  }
369
369
  exports.CdktfProject = CdktfProject;
370
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrdGYtcHJvamVjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvY2RrdGYtcHJvamVjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUE4SEEsa0VBTUM7QUFwSUQsK0JBQStCO0FBQy9CLG1DQUFtQztBQUNuQyw0Q0FNd0I7QUFDeEIsK0NBQTBFO0FBQzFFLG1DQUEyQztBQUMzQywrQ0FRdUI7QUFFdkIscURBQTJEO0FBQzNELDJEQVFpQztBQUNqQyx5RUFBbUU7QUErRm5FLFNBQWdCLDJCQUEyQixDQUN6QyxNQUFtQztJQUVuQyxPQUFPLENBQUMsc0JBQXNCLEVBQUUsK0JBQStCLENBQUMsQ0FBQyxRQUFRLENBQ3ZFLE1BQU0sQ0FBQyxJQUFJLENBQ1osQ0FBQztBQUNKLENBQUM7QUFjRCxNQUFhLFlBQVk7SUFxQnZCLFlBQVksRUFDVixZQUFZLEVBQ1osTUFBTSxFQUNOLFFBQVEsRUFDUixLQUFLLEVBQ0wsZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUNoQyxXQUFXLEVBQ1gsR0FBRyxHQUFHLEtBQUssR0FDUztRQWhCdEIsOEJBQThCO1FBQ3ZCLGdCQUFXLEdBQWlCLEVBQUUsQ0FBQztRQUN0QywrQ0FBK0M7UUFDdkMsc0NBQWlDLEdBQ3ZDLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQztRQWFULElBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxnQkFBZ0IsQ0FBQztRQUN6QyxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztRQUN6QixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQixNQUFNLEVBQUUsR0FBRyxJQUFJLGVBQWUsRUFBRSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQztRQUM3QixJQUFJLENB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LDZCQUE2QixDQUN6QyxPQUFpQixFQUNqQixnQkFBMEIsRUFDMUIsWUFBc0I7UUFFdEIsS0FBSyxNQUFNLEtBQUssSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDckMsTUFBTSxLQUFLLENBQUMsa0JBQWtCLENBQUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQzFFLENBQUM7SUFDSCxDQUFDO0NBQ0Y7QUF6aUJELG9DQXlpQkMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKGMpIEhhc2hpQ29ycCwgSW5jXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTVBMLTIuMFxuaW1wb3J0IHtcbiAgRXJyb3JzLFxuICBlbnN1cmVBbGxTZXR0bGVkQmVmb3JlVGhyb3dpbmcsXG4gIGxvZ2dlcixcbiAgcmVhZENvbmZpZ1N5bmMsXG4gIHNlbmRUZWxlbWV0cnksXG59IGZyb20gXCJAY2RrdG4vY29tbW9uc1wiO1xuaW1wb3J0IHsgU3ludGhlc2l6ZWRTdGFjaywgU3ludGhPcmlnaW4sIFN5bnRoU3RhY2sgfSBmcm9tIFwiLi9zeW50aC1zdGFja1wiO1xuaW1wb3J0IHsgcHJpbnRBbm5vdGF0aW9ucyB9IGZyb20gXCIuL3N5bnRoXCI7XG5pbXBvcnQge1xuICBDZGt0ZlN0YWNrLFxuICBFeHRlcm5hbFN0YWNrQXBwcm92YWxVcGRhdGUsXG4gIEV4dGVybmFsU3RhY2tTZW50aW5lbE92ZXJyaWRlVXBkYXRlLFxuICBTdGFja0FwcHJvdmFsVXBkYXRlLFxuICBTdGFja1NlbnRpbmVsT3ZlcnJpZGVVcGRhdGUsXG4gIFN0YWNrVXBkYXRlLFxuICBTdGFja1VzZXJJbnB1dFVwZGF0ZSxcbn0gZnJvbSBcIi4vY2RrdGYtc3RhY2tcIjtcbmltcG9ydCB7IE5lc3RlZFRlcnJhZm9ybU91dHB1dHMgfSBmcm9tIFwiLi9vdXRwdXRcIjtcbmltcG9ydCB7IGNyZWF0ZUVuaGFuY2VMb2dNZXNzYWdlIH0gZnJvbSBcIi4vZXhlY3V0aW9uLWxvZ3NcIjtcbmltcG9ydCB7XG4gIGNoZWNrSWZBbGxEZXBlbmRhbnRzQXJlSW5jbHVkZWQsXG4gIGNoZWNrSWZBbGxEZXBlbmRlbmNpZXNBcmVJbmNsdWRlZCxcbiAgZmluZEFsbE5lc3RlZERlcGVuZGFudFN0YWNrcyxcbiAgZ2V0TXVsdGlwbGVTdGFja3MsXG4gIGdldFNpbmdsZVN0YWNrLFxuICBnZXRTdGFja1dpdGhOb1VubWV0RGVwZW5kYW50cyxcbiAgZ2V0U3RhY2tXaXRoTm9Vbm1ldERlcGVuZGVuY2llcyxcbn0gZnJvbSBcIi4vaGVscGVycy9zdGFjay1oZWxwZXJzXCI7XG5pbXBvcnQgeyBDZGt0ZlByb2plY3RJT0hhbmRsZXIgfSBmcm9tIFwiLi9jZGt0Zi1wcm9qZWN0LWlvLWhhbmRsZXJcIjtcblxudHlwZSBNdWx0aVN0YWNrQXBwcm92YWxVcGRhdGUgPSB7XG4gIHR5cGU6IFwid2FpdGluZyBmb3IgYXBwcm92YWxcIjtcbiAgc3RhY2tOYW1lOiBzdHJpbmc7XG4gIGFwcHJvdmU6ICgpID0+IHZvaWQ7XG4gIGRpc21pc3M6ICgpID0+IHZvaWQ7XG4gIHN0b3A6ICgpID0+IHZvaWQ7XG59O1xuXG50eXBlIE11bHRpU3RhY2tTZW50aW5lbE92ZXJyaWRlVXBkYXRlID0ge1xuICB0eXBlOiBcIndhaXRpbmcgZm9yIHNlbnRpbmVsIG92ZXJyaWRlXCI7XG4gIHN0YWNrTmFtZTogc3RyaW5nO1xuICBvdmVycmlkZTogKCkgPT4gdm9pZDtcbiAgcmVqZWN0OiAoKSA9PiB2b2lkO1xufTtcblxuZXhwb3J0IHR5cGUgTXVsdGlTdGFja1VwZGF0ZSA9XG4gIHwgTXVsdGlTdGFja0FwcHJvdmFsVXBkYXRlXG4gIHwgTXVsdGlTdGFja1NlbnRpbmVsT3ZlcnJpZGVVcGRhdGU7XG5cbmV4cG9ydCB0eXBlIFByb2plY3RVcGRhdGUgPVxuICB8IHtcbiAgICAgIHR5cGU6IFwic3ludGhlc2l6aW5nXCI7XG4gICAgfVxuICB8IHtcbiAgICAgIHR5cGU6IFwic3ludGhlc2l6ZWRcIjtcbiAgICAgIHN0YWNrczogU3ludGhlc2l6ZWRTdGFja1tdO1xuICAgICAgZXJyb3JNZXNzYWdlPzogc3RyaW5nO1xuICAgIH1cbiAgfCBTdGFja1VwZGF0ZVxuICB8IE11bHRpU3RhY2tVcGRhdGU7XG5cbmV4cG9ydCB0eXBlIFNpbmdsZVN0YWNrT3B0aW9ucyA9IHtcbiAgc3RhY2tOYW1lPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgTXVsdGlwbGVTdGFja09wdGlvbnMgPSB7XG4gIHN0YWNrTmFtZXM/OiBzdHJpbmdbXTtcbn07XG5cbmV4cG9ydCB0eXBlIFNraXBTeW50aE9wdGlvbnMgPSB7XG4gIHNraXBTeW50aD86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBTa2lwUHJvdmlkZXJMb2NrT3B0aW9ucyA9IHtcbiAgc2tpcFByb3ZpZGVyTG9jaz86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBGZXRjaE91dHB1dE9wdGlvbnMgPSBTa2lwU3ludGhPcHRpb25zICZcbiAgU2tpcFByb3ZpZGVyTG9ja09wdGlvbnMgJlxuICBNdWx0aXBsZVN0YWNrT3B0aW9ucztcblxuZXhwb3J0IHR5cGUgQXV0b0FwcHJvdmVPcHRpb25zID0ge1xuICBhdXRvQXBwcm92ZT86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBEaWZmT3B0aW9ucyA9IFNpbmdsZVN0YWNrT3B0aW9ucyAmXG4gIFNraXBQcm92aWRlckxvY2tPcHRpb25zICZcbiAgU2tpcFN5bnRoT3B0aW9ucyAmIHtcbiAgICByZWZyZXNoT25seT86IGJvb2xlYW47XG4gICAgdGVycmFmb3JtUGFyYWxsZWxpc20/OiBudW1iZXI7XG4gICAgdmFycz86IHN0cmluZ1tdO1xuICAgIHZhckZpbGVzPzogc3RyaW5nW107XG4gICAgbm9Db2xvcj86IGJvb2xlYW47XG4gICAgbWlncmF0ZVN0YXRlPzogYm9vbGVhbjtcbiAgfTtcblxuZXhwb3J0IHR5cGUgTXV0YXRpb25PcHRpb25zID0gTXVsdGlwbGVTdGFja09wdGlvbnMgJlxuICBTa2lwUHJvdmlkZXJMb2NrT3B0aW9ucyAmXG4gIFNraXBTeW50aE9wdGlvbnMgJlxuICBBdXRvQXBwcm92ZU9wdGlvbnMgJiB7XG4gICAgcmVmcmVzaE9ubHk/OiBib29sZWFuO1xuICAgIGlnbm9yZU1pc3NpbmdTdGFja0RlcGVuZGVuY2llcz86IGJvb2xlYW47XG4gICAgcGFyYWxsZWxpc20/OiBudW1iZXI7XG4gICAgdGVycmFmb3JtUGFyYWxsZWxpc20/OiBudW1iZXI7XG4gICAgdmFycz86IHN0cmluZ1tdO1xuICAgIHZhckZpbGVzPzogc3RyaW5nW107XG4gICAgbm9Db2xvcj86IGJvb2xlYW47XG4gICAgbWlncmF0ZVN0YXRlPzogYm9vbGVhbjtcbiAgfTtcblxuZXhwb3J0IHR5cGUgTG9nTWVzc2FnZSA9IHtcbiAgc3RhY2tOYW1lOiBzdHJpbmc7XG4gIG1lc3NhZ2VXaXRoQ29uc3RydWN0UGF0aD86IHN0cmluZztcbiAgbWVzc2FnZTogc3RyaW5nO1xufTtcblxuLy8gU3RvcmVzIGEgbG9nIHZhbHVlIG9mIGEgY2VydGFpbiB0eXBlIHVudGlsIGl0IGNhbiBiZSBzZW50XG50eXBlIEJ1ZmZlcmVkPFQsIFY+ID0ge1xuICBjYjogKGl0ZW06IFQpID0+IHZvaWQ7XG4gIHZhbHVlOiBUO1xuICB0eXBlOiBWO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzV2FpdGluZ0ZvclVzZXJJbnB1dFVwZGF0ZShcbiAgdXBkYXRlOiBQcm9qZWN0VXBkYXRlIHwgU3RhY2tVcGRhdGUsXG4pIHtcbiAgcmV0dXJuIFtcIndhaXRpbmcgZm9yIGFwcHJvdmFsXCIsIFwid2FpdGluZyBmb3Igc2VudGluZWwgb3ZlcnJpZGVcIl0uaW5jbHVkZXMoXG4gICAgdXBkYXRlLnR5cGUsXG4gICk7XG59XG5cbmV4cG9ydCB0eXBlIFByb2plY3RFdmVudCA9XG4gIHwgQnVmZmVyZWQ8UHJvamVjdFVwZGF0ZSwgXCJwcm9qZWN0VXBkYXRlXCI+XG4gIHwgQnVmZmVyZWQ8TG9nTWVzc2FnZSwgXCJsb2dNZXNzYWdlXCI+O1xuZXhwb3J0IHR5cGUgQ2RrdGZQcm9qZWN0T3B0aW9ucyA9IHtcbiAgc3ludGhDb21tYW5kOiBzdHJpbmc7XG4gIG91dERpcjogc3RyaW5nO1xuICBvblVwZGF0ZTogKHVwZGF0ZTogUHJvamVjdFVwZGF0ZSkgPT4gdm9pZDtcbiAgb25Mb2c/OiAobG9nOiBMb2dNZXNzYWdlKSA9PiB2b2lkO1xuICB3b3JraW5nRGlyZWN0b3J5Pzogc3RyaW5nO1xuICBzeW50aE9yaWdpbj86IFN5bnRoT3JpZ2luO1xuICBoY2w/OiBib29sZWFuO1xufTtcbmV4cG9ydCBjbGFzcyBDZGt0ZlByb2plY3Qge1xuICBwdWJsaWMgc3RhY2tzPzogU3ludGhlc2l6ZWRTdGFja1tdO1xuICBwdWJsaWMgaGFyZEFib3J0OiAoKSA9PiB2b2lkO1xuXG4gIHByaXZhdGUgc3ludGhDb21tYW5kOiBzdHJpbmc7XG4gIHByaXZhdGUgb3V0RGlyOiBzdHJpbmc7XG4gIHByaXZhdGUgd29ya2luZ0RpcmVjdG9yeTogc3RyaW5nO1xuICBwcml2YXRlIG9uVXBkYXRlOiAodXBkYXRlOiBQcm9qZWN0VXBkYXRlKSA9PiB2b2lkO1xuICBwcml2YXRlIG9uTG9nPzogKGxvZzogTG9nTWVzc2FnZSkgPT4gdm9pZDtcbiAgcHJpdmF0ZSBhYm9ydFNpZ25hbDogQWJvcnRTaWduYWw7XG4gIHByaXZhdGUgc3ludGhPcmlnaW4/OiBTeW50aE9yaWdpbjtcbiAgcHJpdmF0ZSBoY2w/OiBib29sZWFuO1xuXG4gIC8vIFNldCBkdXJpbmcgZGVwbG95IC8gZGVzdHJveVxuICBwdWJsaWMgc3RhY2tzVG9SdW46IENka3RmU3RhY2tbXSA9IFtdO1xuICAvLyBUaGlzIG1lYW5zIHN0aCBkaWZmZXJlbnQgaW4gZGVwbG95IC8gZGVzdHJveVxuICBwcml2YXRlIHN0b3BBbGxTdGFja3NUaGF0Q2FuTm90UnVuV2l0aG91dDogKHN0YWNrTmFtZTogc3RyaW5nKSA9PiB2b2lkID1cbiAgICAoKSA9PiB7fTtcblxuICBwcml2YXRlIGlvSGFuZGxlcjogQ2RrdGZQcm9qZWN0SU9IYW5kbGVyO1xuXG4gIGNvbnN0cnVjdG9yKHtcbiAgICBzeW50aENvbW1hbmQsXG4gICAgb3V0RGlyLFxuICAgIG9uVXBkYXRlLFxuICAgIG9uTG9nLFxuICAgIHdvcmtpbmdEaXJlY3RvcnkgPSBwcm9jZXNzLmN3ZCgpLFxuICAgIHN5bnRoT3JpZ2luLFxuICAgIGhjbCA9IGZhbHNlLFxuICB9OiBDZGt0ZlByb2plY3RPcHRpb25zKSB7XG4gICAgdGhpcy5zeW50aENvbW1hbmQgPSBzeW50aENvbW1hbmQ7XG4gICAgdGhpcy5vdXREaXIgPSBvdXREaXI7XG4gICAgdGhpcy53b3JraW5nRGlyZWN0b3J5ID0gd29ya2luZ0RpcmVjdG9yeTtcbiAgICB0aGlzLm9uVXBkYXRlID0gb25VcGRhdGU7XG4gICAgdGhpcy5vbkxvZyA9IG9uTG9nO1xuICAgIGNvbnN0IGFjID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICAgIHRoaXMuYWJvcnRTaWduYWwgPSBhYy5zaWduYWw7XG4gICAgdGhpcy5zeW50aE9yaWdpbiA9IHN5bnRoT3JpZ2luO1xuICAgIHRoaXMuaGNsID1cbiAgICAgIHByb2Nlc3MuZW52LlNZTlRIX0hDTF9PVVRQVVQgPT09IFwidHJ1ZVwiIHx8XG4gICAgICBwcm9jZXNzLmVudi5TWU5USF9IQ0xfT1VUUFVUID09PSBcIjFcIiB8fFxuICAgICAgaGNsO1xuXG4gICAgdGhpcy5oYXJkQWJvcnQgPSBhYy5hYm9ydC5iaW5kKGFjKTtcbiAgICB0aGlzLmlvSGFuZGxlciA9IG5ldyBDZGt0ZlByb2plY3RJT0hhbmRsZXIoKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RvcEFsbFN0YWNrcygpIHtcbiAgICB0aGlzLnN0YWNrc1RvUnVuLmZvckVhY2goKHN0YWNrKSA9PiBzdGFjay5zdG9wKCkpO1xuICAgIHRoaXMuaW9IYW5kbGVyLmZpbHRlclVzZXJJbnB1dEV2ZW50c0Zyb21CdWZmZXIoKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlVXNlclVwZGF0ZTxcbiAgICBUIGV4dGVuZHMgTXVsdGlTdGFja1VwZGF0ZSxcbiAgICBWIGV4dGVuZHMgU3RhY2tVc2VySW5wdXRVcGRhdGUsXG4gID4oXG4gICAgdXBkYXRlOiBTdGFja1VzZXJJbnB1dFVwZGF0ZSxcbiAgICBvcGVyYXRpb25zOiBSZWNvcmQ8c3RyaW5nLCAodXBkYXRlOiBWKSA9PiB2b2lkPixcbiAgICBvcmlnaW5hbENhbGxiYWNrOiAodXBkYXRlVG9TZW5kOiBQcm9qZWN0VXBkYXRlKSA9PiB2b2lkLFxuICAgIGV2ZW50VHlwZTogVFtcInR5cGVcIl0sXG4gICkge1xuICAgIGNvbnN0IGNhbGxiYWNrcyA9ICh1cGRhdGU6IFYpID0+XG4gICAgICBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICAgIE9iamVjdC5lbnRyaWVzKG9wZXJhdGlvbnMpLm1hcCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgIC8vIFRoaXMgaXMgcGFzc2VkIGluIHRvIG1ha2UgdHlwZXNjcmlwdCBoYXBweSBvbmx5XG4gICAgICAgICAgICAoXzogVikgPT4ge1xuICAgICAgICAgICAgICB2YWx1ZSh1cGRhdGUpO1xuXG4gICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gZGVmZXIgdGhlc2UgY2FsbHMgZm9yIHRoZSBjYXNlIHRoYXQgYXBwcm92ZSgpIGlzIGluc3RhbnRseSBpbnZva2VkXG4gICAgICAgICAgICAgIC8vIGluIHRoZSBsaXN0ZW5lciB0aGF0IHJlY2VpdmVzIHRoZXNlIGNhbGxiYWNrcyBhcyBpdCBvdGhlcndpc2Ugd291bGQgYWxyZWFkeVxuICAgICAgICAgICAgICAvLyByZW1vdmUgdGhlIFwid2FpdGluZyBmb3Igc3RhY2sgYXBwcm92YWxcIiBldmVudCBmcm9tIHRoZSBidWZmZXIgYmVmb3JlIHdlIGV2ZW5cbiAgICAgICAgICAgICAgLy8gc2V0IHdhaXRpbmdGb3JBcHByb3ZhbCB0byB0cnVlIChhdCB0aGUgZW5kIG9mIHRoaXMgaWYgc3RhdGVtZW50KSB3aGljaCByZXN1bHRzXG4gICAgICAgICAgICAgIC8vIGluIGJ1ZmZlcmVkIHVwZGF0ZXMgd2hpY2ggd2lsbCBuZXZlciB1bmJsb2NrXG4gICAgICAgICAgICAgIHNldFRpbWVvdXQoXG4gICAgICAgICAgICAgICAgKCkgPT4gdGhpcy5pb0hhbmRsZXIucmVzdW1lQWZ0ZXJVc2VySW5wdXQodXBkYXRlLnN0YWNrTmFtZSksXG4gICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXTtcbiAgICAgICAgfSksXG4gICAgICApO1xuXG4gICAgLy8gYWx3YXlzIHNlbmQgdG8gYnVmZmVyLCBhcyByZXN1bWVBZnRlclVzZXJJbnB1dCgpIGFsd2F5cyBleHBlY3RzIGEgbWF0Y2hpbmcgZXZlbnRcbiAgICB0aGlzLmlvSGFuZGxlci5wdXNoRXZlbnQoe1xuICAgICAgY2I6IG9yaWdpbmFsQ2FsbGJhY2ssXG4gICAgICB2YWx1ZToge1xuICAgICAgICB0eXBlOiBldmVudFR5cGUsXG4gICAgICAgIHN0YWNrTmFtZTogdXBkYXRlLnN0YWNrTmFtZSxcbiAgICAgICAgLi4uY2FsbGJhY2tzKHVwZGF0ZSBhcyBWKSxcbiAgICAgIH0gYXMgVCxcbiAgICAgIHR5cGU6IFwicHJvamVjdFVwZGF0ZVwiLFxuICAgIH0pO1xuXG4gICAgLy8gaWYgd2UgYXJlbid0IGFscmVhZHkgd2FpdGluZywgdGhpcyBuZWVkcyB0byBnbyB0byBjYigpIHRvbyB0byBhcnJpdmUgYXQgdGhlIFVJXG4gICAgaWYgKCF0aGlzLmlvSGFuZGxlci5pc1dhaXRpbmdGb3JVc2VySW5wdXQoKSkge1xuICAgICAgb3JpZ2luYWxDYWxsYmFjayh7XG4gICAgICAgIHR5cGU6IGV2ZW50VHlwZSxcbiAgICAgICAgc3RhY2tOYW1lOiB1cGRhdGUuc3RhY2tOYW1lLFxuICAgICAgICAuLi5jYWxsYmFja3ModXBkYXRlIGFzIFYpLFxuICAgICAgfSBhcyBUKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVVzZXJJbnB1dFByb2Nlc3MoY2I6ICh1cGRhdGVUb1NlbmQ6IFByb2plY3RVcGRhdGUpID0+IHZvaWQpIHtcbiAgICByZXR1cm4gKFxuICAgICAgdXBkYXRlOlxuICAgICAgICB8IFN0YWNrVXBkYXRlXG4gICAgICAgIHwgU3RhY2tBcHByb3ZhbFVwZGF0ZVxuICAgICAgICB8IEV4dGVybmFsU3RhY2tBcHByb3ZhbFVwZGF0ZVxuICAgICAgICB8IFN0YWNrU2VudGluZWxPdmVycmlkZVVwZGF0ZVxuICAgICAgICB8IEV4dGVybmFsU3RhY2tTZW50aW5lbE92ZXJyaWRlVXBkYXRlLFxuICAgICkgPT4ge1xuICAgICAgaWYgKHVwZGF0ZS50eXBlID09PSBcImV4dGVybmFsIHN0YWNrIGFwcHJvdmFsIHJlcGx5XCIpIHtcbiAgICAgICAgaWYgKCF1cGRhdGUuYXBwcm92ZWQpIHtcbiAgICAgICAgICB0aGlzLnN0b3BBbGxTdGFja3NUaGF0Q2FuTm90UnVuV2l0aG91dCh1cGRhdGUuc3RhY2tOYW1lKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmlvSGFuZGxlci5yZXN1bWVBZnRlclVzZXJJbnB1dCh1cGRhdGUuc3RhY2tOYW1lKTtcbiAgICAgICAgcmV0dXJuOyAvLyBha2EgZG9uJ3Qgc2VuZCB0aGlzIGV2ZW50IHRvIGFueSBidWZmZXJcbiAgICAgIH1cbiAgICAgIGlmICh1cGRhdGUudHlwZSA9PT0gXCJleHRlcm5hbCBzdGFjayBzZW50aW5lbCBvdmVycmlkZSByZXBseVwiKSB7XG4gICAgICAgIGlmICghdXBkYXRlLm92ZXJyaWRkZW4pIHtcbiAgICAgICAgICB0aGlzLnN0b3BBbGxTdGFja3NUaGF0Q2FuTm90UnVuV2l0aG91dCh1cGRhdGUuc3RhY2tOYW1lKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmlvSGFuZGxlci5yZXN1bWVBZnRlclVzZXJJbnB1dCh1cGRhdGUuc3RhY2tOYW1lKTtcbiAgICAgICAgcmV0dXJuOyAvLyBha2EgZG9uJ3Qgc2VuZCB0aGlzIGV2ZW50IHRvIGFueSBidWZmZXJcbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICB1cGRhdGUudHlwZSA9PT0gXCJ3YWl0aW5nIGZvciBzdGFjayBhcHByb3ZhbFwiIHx8XG4gICAgICAgIHVwZGF0ZS50eXBlID09PSBcIndhaXRpbmcgZm9yIHN0YWNrIHNlbnRpbmVsIG92ZXJyaWRlXCJcbiAgICAgICkge1xuICAgICAgICBpZiAodXBkYXRlLnR5cGUgPT09IFwid2FpdGluZyBmb3Igc3RhY2sgYXBwcm92YWxcIikge1xuICAgICAgICAgIHRoaXMuaGFuZGxlVXNlclVwZGF0ZTxNdWx0aVN0YWNrQXBwcm92YWxVcGRhdGUsIFN0YWNrQXBwcm92YWxVcGRhdGU+KFxuICAgICAgICAgICAgdXBkYXRlLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBhcHByb3ZlOiAodXBkYXRlKSA9PiB1cGRhdGUuYXBwcm92ZSgpLFxuICAgICAgICAgICAgICBkaXNtaXNzOiAodXBkYXRlKSA9PiB7XG4gICAgICAgICAgICAgICAgdXBkYXRlLnJlamVjdCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RvcEFsbFN0YWNrc1RoYXRDYW5Ob3RSdW5XaXRob3V0KHVwZGF0ZS5zdGFja05hbWUpO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBzdG9wOiAodXBkYXRlKSA9PiB7XG4gICAgICAgICAgICAgICAgdXBkYXRlLnJlamVjdCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RvcEFsbFN0YWNrcygpO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNiLFxuICAgICAgICAgICAgXCJ3YWl0aW5nIGZvciBhcHByb3ZhbFwiLFxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAodXBkYXRlLnR5cGUgPT09IFwid2FpdGluZyBmb3Igc3RhY2sgc2VudGluZWwgb3ZlcnJpZGVcIikge1xuICAgICAgICAgIHRoaXMuaGFuZGxlVXNlclVwZGF0ZTxcbiAgICAgICAgICAgIE11bHRpU3RhY2tTZW50aW5lbE92ZXJyaWRlVXBkYXRlLFxuICAgICAgICAgICAgU3RhY2tTZW50aW5lbE92ZXJyaWRlVXBkYXRlXG4gICAgICAgICAgPihcbiAgICAgICAgICAgIHVwZGF0ZSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgb3ZlcnJpZGU6ICh1cGRhdGUpID0+IHtcbiAgICAgICAgICAgICAgICB1cGRhdGUub3ZlcnJpZGUoKTtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgcmVqZWN0OiAodXBkYXRlKSA9PiB7XG4gICAgICAgICAgICAgICAgdXBkYXRlLnJlamVjdCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RvcEFsbFN0YWNrc1RoYXRDYW5Ob3RSdW5XaXRob3V0KHVwZGF0ZS5zdGFja05hbWUpO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNiLFxuICAgICAgICAgICAgXCJ3YWl0aW5nIGZvciBzZW50aW5lbCBvdmVycmlkZVwiLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmlvSGFuZGxlci5hd2FpdFVzZXJJbnB1dCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHRoaXMuaW9IYW5kbGVyLmlzV2FpdGluZ0ZvclVzZXJJbnB1dCgpKSB7XG4gICAgICAgICAgdGhpcy5pb0hhbmRsZXIucHVzaEV2ZW50KHtcbiAgICAgICAgICAgIGNiLFxuICAgICAgICAgICAgdmFsdWU6IHVwZGF0ZSxcbiAgICAgICAgICAgIHR5cGU6IFwicHJvamVjdFVwZGF0ZVwiLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNiKHVwZGF0ZSBhcyBQcm9qZWN0VXBkYXRlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgZ2V0U3RhY2tFeGVjdXRvcihcbiAgICBzdGFjazogU3ludGhlc2l6ZWRTdGFjayxcbiAgICBvcHRzOiBBdXRvQXBwcm92ZU9wdGlvbnMgPSB7fSxcbiAgKSB7XG4gICAgY29uc3QgZW5oYW5jZUxvZ01lc3NhZ2UgPSBjcmVhdGVFbmhhbmNlTG9nTWVzc2FnZShzdGFjayk7XG4gICAgY29uc3Qgb25Mb2cgPSB0aGlzLmlvSGFuZGxlci5idWZmZXJXaGlsZUF3YWl0aW5nVXNlcklucHV0KHRoaXMub25Mb2cpO1xuICAgIHJldHVybiBuZXcgQ2RrdGZTdGFjayh7XG4gICAgICAuLi5vcHRzLFxuICAgICAgc3RhY2ssXG4gICAgICBvblVwZGF0ZTogdGhpcy5oYW5kbGVVc2VySW5wdXRQcm9jZXNzKHRoaXMub25VcGRhdGUpLFxuICAgICAgb25Mb2c6IG9uTG9nXG4gICAgICAgID8gKHsgbWVzc2FnZSB9KSA9PlxuICAgICAgICAgICAgb25Mb2coe1xuICAgICAgICAgICAgICBzdGFja05hbWU6IHN0YWNrLm5hbWUsXG4gICAgICAgICAgICAgIG1lc3NhZ2UsXG4gICAgICAgICAgICAgIG1lc3NhZ2VXaXRoQ29uc3RydWN0UGF0aDogZW5oYW5jZUxvZ01lc3NhZ2UobWVzc2FnZSksXG4gICAgICAgICAgICB9KVxuICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIGFib3J0U2lnbmFsOiB0aGlzLmFib3J0U2lnbmFsLFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGdldCBvdXRwdXRzQnlDb25zdHJ1Y3RJZCgpIHtcbiAgICByZXR1cm4gdGhpcy5zdGFja3NUb1J1bi5yZWR1Y2UoXG4gICAgICAoYWNjLCBzdGFjaykgPT4gKHtcbiAgICAgICAgLi4uYWNjLFxuICAgICAgICAuLi5zdGFjay5vdXRwdXRzQnlDb25zdHJ1Y3RJZCxcbiAgICAgIH0pLFxuICAgICAge30gYXMgTmVzdGVkVGVycmFmb3JtT3V0cHV0cyxcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHN5bnRoKG5vQ29sb3I/OiBib29sZWFuKSB7XG4gICAgdGhpcy5vblVwZGF0ZSh7XG4gICAgICB0eXBlOiBcInN5bnRoZXNpemluZ1wiLFxuICAgIH0pO1xuXG4gICAgY29uc3Qgc3RhY2tzID0gYXdhaXQgU3ludGhTdGFjay5zeW50aChcbiAgICAgIHRoaXMuYWJvcnRTaWduYWwgYXMgYW55LFxuICAgICAgdGhpcy5zeW50aENvbW1hbmQsXG4gICAgICB0aGlzLm91dERpcixcbiAgICAgIHRoaXMud29ya2luZ0RpcmVjdG9yeSxcbiAgICAgIGZhbHNlLFxuICAgICAgbm9Db2xvcixcbiAgICAgIHRoaXMuc3ludGhPcmlnaW4sXG4gICAgICB0aGlzLmhjbCxcbiAgICApO1xuXG4gICAgcHJpbnRBbm5vdGF0aW9ucyhzdGFja3MpO1xuXG4gICAgdGhpcy5vblVwZGF0ZSh7XG4gICAgICB0eXBlOiBcInN5bnRoZXNpemVkXCIsXG4gICAgICBzdGFja3MsXG4gICAgfSk7XG5cbiAgICByZXR1cm4gc3RhY2tzO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHJlYWRTeW50aGVzaXplZFN0YWNrcygpIHtcbiAgICBjb25zdCBzdGFja3MgPSBhd2FpdCBTeW50aFN0YWNrLnJlYWRTeW50aGVzaXplZFN0YWNrcyh0aGlzLm91dERpcik7XG5cbiAgICBwcmludEFubm90YXRpb25zKHN0YWNrcyk7XG5cbiAgICB0aGlzLm9uVXBkYXRlKHtcbiAgICAgIHR5cGU6IFwic3ludGhlc2l6ZWRcIixcbiAgICAgIHN0YWNrcyxcbiAgICB9KTtcbiAgICByZXR1cm4gc3RhY2tzO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGRpZmYob3B0czogRGlmZk9wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IHN0YWNrcyA9IG9wdHMuc2tpcFN5bnRoXG4gICAgICA/IGF3YWl0IHRoaXMucmVhZFN5bnRoZXNpemVkU3RhY2tzKClcbiAgICAgIDogYXdhaXQgdGhpcy5zeW50aChvcHRzLm5vQ29sb3IpO1xuICAgIGNvbnN0IHN0YWNrID0gdGhpcy5nZXRTdGFja0V4ZWN1dG9yKFxuICAgICAgZ2V0U2luZ2xlU3RhY2soc3RhY2tzLCBvcHRzPy5zdGFja05hbWUsIFwiZGlmZlwiKSxcbiAgICApO1xuICAgIGF3YWl0IHN0YWNrLmluaXRhbGl6ZVRlcnJhZm9ybShcbiAgICAgIG9wdHMubm9Db2xvcixcbiAgICAgIG9wdHMuc2tpcFByb3ZpZGVyTG9jayxcbiAgICAgIG9wdHMubWlncmF0ZVN0YXRlLFxuICAgICk7XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgc3RhY2suZGlmZihvcHRzKTtcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIHRocm93IEVycm9ycy5FeHRlcm5hbChcbiAgICAgICAgYFN0YWNrIGZhaWxlZCB0byBwbGFuOiAke3N0YWNrLnN0YWNrLm5hbWV9LiBQbGVhc2UgY2hlY2sgdGhlIGxvZ3MgZm9yIG1vcmUgaW5mb3JtYXRpb24uYCxcbiAgICAgICAgZSxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChzdGFjay5lcnJvcikge1xuICAgICAgdGhyb3cgRXJyb3JzLkV4dGVybmFsKFxuICAgICAgICBgU3RhY2sgZmFpbGVkIHRvIHBsYW46ICR7c3RhY2suc3RhY2submFtZX0uIFBsZWFzZSBjaGVjayB0aGUgbG9ncyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5gLFxuICAgICAgICBuZXcgRXJyb3Ioc3RhY2suZXJyb3IpLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5wcm9qZWN0VGVsZW1ldHJ5KFwiZGlmZlwiLCB7XG4gICAgICAgIHN0YWNrTWV0YWRhdGE6IHN0YWNrcy5tYXAoKHN0YWNrKSA9PlxuICAgICAgICAgIEpTT04ucGFyc2Uoc3RhY2suY29udGVudClbXCIvL1wiXVxuICAgICAgICAgICAgPyBKU09OLnBhcnNlKHN0YWNrLmNvbnRlbnQpW1wiLy9cIl0ubWV0YWRhdGFcbiAgICAgICAgICAgIDoge30sXG4gICAgICAgICksXG4gICAgICAgIGVycm9yczogc3RhY2suZXJyb3IsXG4gICAgICAgIHJlcXVpcmVkUHJvdmlkZXJzOiBzdGFja3MubWFwKChzdGFjazogYW55KSA9PlxuICAgICAgICAgIEpTT04ucGFyc2Uoc3RhY2suY29udGVudClbXCJ0ZXJyYWZvcm1cIl1cbiAgICAgICAgICAgID8gSlNPTi5wYXJzZShzdGFjay5jb250ZW50KVtcInRlcnJhZm9ybVwiXS5yZXF1aXJlZF9wcm92aWRlcnNcbiAgICAgICAgICAgIDoge30sXG4gICAgICAgICksXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2dnZXIuZGVidWcoXCJGYWlsZWQgdG8gc2VuZCB0ZWxlbWV0cnlcIiwgZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBleGVjdXRlKFxuICAgIG1ldGhvZDogXCJkZXBsb3lcIiB8IFwiZGVzdHJveVwiLFxuICAgIG5leHQ6ICgpID0+IFByb21pc2U8Q2RrdGZTdGFjayB8IHVuZGVmaW5lZD4sXG4gICAgb3B0czogTXV0YXRpb25PcHRpb25zLFxuICApIHtcbiAgICAvLyBXZSBvbmx5IHN1cHBvcnQgcmVmcmVzaCBvbmx5IG9uIGRlcGxveSwgYSBiaXQgb2YgYSBsZWFreSBhYnN0cmFjdGlvbiBoZXJlXG4gICAgaWYgKG9wdHMucmVmcmVzaE9ubHkgJiYgbWV0aG9kICE9PSBcImRlcGxveVwiKSB7XG4gICAgICB0aHJvdyBFcnJvcnMuSW50ZXJuYWwoYFJlZnJlc2ggb25seSBpcyBvbmx5IHN1cHBvcnRlZCBvbiBkZXBsb3lgKTtcbiAgICB9XG4gICAgY29uc3QgbWF4UGFyYWxsZWxSdW5zID1cbiAgICAgICFvcHRzLnBhcmFsbGVsaXNtIHx8IG9wdHMucGFyYWxsZWxpc20gPCAwID8gSW5maW5pdHkgOiBvcHRzLnBhcmFsbGVsaXNtO1xuICAgIGNvbnN0IGFsbEV4ZWN1dGlvbnMgPSBbXTtcblxuICAgIGF3YWl0IHRoaXMuaW5pdGlhbGl6ZVN0YWNrc1RvUnVuSW5TZXJpYWwoXG4gICAgICBvcHRzLm5vQ29sb3IsXG4gICAgICBvcHRzLnNraXBQcm92aWRlckxvY2ssXG4gICAgICBvcHRzLm1pZ3JhdGVTdGF0ZSxcbiAgICApO1xuICAgIHdoaWxlICh0aGlzLnN0YWNrc1RvUnVuLmZpbHRlcigoc3RhY2spID0+IHN0YWNrLmlzUGVuZGluZykubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgcnVubmluZ1N0YWNrcyA9IHRoaXMuc3RhY2tzVG9SdW4uZmlsdGVyKChzdGFjaykgPT4gc3RhY2suaXNSdW5uaW5nKTtcbiAgICAgIGlmIChydW5uaW5nU3RhY2tzLmxlbmd0aCA+PSBtYXhQYXJhbGxlbFJ1bnMpIHtcbiAgICAgICAgYXdhaXQgUHJvbWlzZS5yYWNlKHJ1bm5pbmdTdGFja3MubWFwKChzKSA9PiBzLmN1cnJlbnRXb3JrUHJvbWlzZSkpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IG5leHRSdW5uaW5nRXhlY3V0b3IgPSBhd2FpdCBuZXh0KCk7XG4gICAgICAgIGlmICghbmV4dFJ1bm5pbmdFeGVjdXRvcikge1xuICAgICAgICAgIC8vIEluIHRoaXMgY2FzZSB3ZSBoYXZlIG5vIHBlbmRpbmcgc3RhY2tzLCBidXQgd2UgYWxzbyBjYW4gbm90IGZpbmQgYSBuZXcgZXhlY3V0b3JcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwcm9taXNlID1cbiAgICAgICAgICBtZXRob2QgPT09IFwiZGVwbG95XCJcbiAgICAgICAgICAgID8gbmV4dFJ1bm5pbmdFeGVjdXRvci5kZXBsb3kob3B0cylcbiAgICAgICAgICAgIDogbmV4dFJ1bm5pbmdFeGVjdXRvci5kZXN0cm95KG9wdHMpO1xuXG4gICAgICAgIGFsbEV4ZWN1dGlvbnMucHVzaChwcm9taXNlKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLy8gYXdhaXQgbmV4dCgpIHRocmV3IGFuIGVycm9yIGJlY2F1c2UgYSBzdGFjayBmYWlsZWQgdG8gYXBwbHkvZGVzdHJveVxuICAgICAgICAvLyB3YWl0IGZvciBhbGwgb3RoZXIgY3VycmVudGx5IHJ1bm5pbmcgc3RhY2tzIHRvIGNvbXBsZXRlIGJlZm9yZSBwcm9wYWdhdGluZyB0aGF0IGVycm9yXG4gICAgICAgIGxvZ2dlci5kZWJ1ZyhcIkVuY291bnRlcmVkIGFuIGVycm9yIHdoaWxlIGF3YWl0aW5nIHN0YWNrIHRvIGZpbmlzaFwiLCBlKTtcbiAgICAgICAgY29uc3Qgb3BlblN0YWNrcyA9IHRoaXMuc3RhY2tzVG9SdW4uZmlsdGVyKFxuICAgICAgICAgIChleCkgPT4gZXguY3VycmVudFdvcmtQcm9taXNlLFxuICAgICAgICApO1xuICAgICAgICBsb2dnZXIuZGVidWcoXCJXYWl0aW5nIGZvciBzdGlsbCBydW5uaW5nIHN0YWNrcyB0byBmaW5pc2g6XCIsIG9wZW5TdGFja3MpO1xuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQob3BlblN0YWNrcy5tYXAoKGV4KSA9PiBleC5jdXJyZW50V29ya1Byb21pc2UpKTtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKFxuICAgICAgICAgIFwiRG9uZSB3YWl0aW5nIGZvciBzdGlsbCBydW5uaW5nIHN0YWNrcy4gQWxsIHBlbmRpbmcgd29yayBmaW5pc2hlZFwiLFxuICAgICAgICApO1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBXZSBlbmQgdGhlIGxvb3Agd2hlbiBhbGwgc3RhY2tzIGFyZSBzdGFydGVkLCBub3cgd2UgbmVlZCB0byB3YWl0IGZvciB0aGVtIHRvIGJlIGRvbmVcbiAgICAvLyBXZSB3YWl0IGZvciBhbGwgd29yayB0byBmaW5pc2ggZXZlbiBpZiBvbmUgb2YgdGhlIHByb21pc2VzIHRocmV3IGFuIGVycm9yLlxuICAgIGF3YWl0IGVuc3VyZUFsbFNldHRsZWRCZWZvcmVUaHJvd2luZyhcbiAgICAgIFByb21pc2UuYWxsKGFsbEV4ZWN1dGlvbnMpLFxuICAgICAgYWxsRXhlY3V0aW9ucyxcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGRlcGxveShvcHRzOiBNdXRhdGlvbk9wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IHN0YWNrcyA9IG9wdHMuc2tpcFN5bnRoXG4gICAgICA/IGF3YWl0IHRoaXMucmVhZFN5bnRoZXNpemVkU3RhY2tzKClcbiAgICAgIDogYXdhaXQgdGhpcy5zeW50aChvcHRzLm5vQ29sb3IpO1xuICAgIGNvbnN0IHN0YWNrc1RvUnVuID0gZ2V0TXVsdGlwbGVTdGFja3Moc3RhY2tzLCBvcHRzLnN0YWNrTmFtZXMsIFwiZGVwbG95XCIpO1xuICAgIGlmICghb3B0cy5pZ25vcmVNaXNzaW5nU3RhY2tEZXBlbmRlbmNpZXMpIHtcbiAgICAgIGNoZWNrSWZBbGxEZXBlbmRlbmNpZXNBcmVJbmNsdWRlZChzdGFja3NUb1J1bik7XG4gICAgfVxuXG4gICAgdGhpcy5zdG9wQWxsU3RhY2tzVGhhdENhbk5vdFJ1bldpdGhvdXQgPSAoc3RhY2tOYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgIGZpbmRBbGxOZXN0ZWREZXBlbmRhbnRTdGFja3ModGhpcy5zdGFja3NUb1J1biwgc3RhY2tOYW1lKS5mb3JFYWNoKFxuICAgICAgICAoc3RhY2spID0+IHN0YWNrLnN0b3AoKSxcbiAgICAgICk7XG4gICAgfTtcblxuICAgIHRoaXMuc3RhY2tzVG9SdW4gPSBzdGFja3NUb1J1bi5tYXAoKHN0YWNrKSA9PlxuICAgICAgdGhpcy5nZXRTdGFja0V4ZWN1dG9yKHN0YWNrLCBvcHRzKSxcbiAgICApO1xuXG4gICAgY29uc3QgbmV4dCA9IG9wdHMuaWdub3JlTWlzc2luZ1N0YWNrRGVwZW5kZW5jaWVzXG4gICAgICA/ICgpID0+XG4gICAgICAgICAgUHJvbWlzZS5yZXNvbHZlKFxuICAgICAgICAgICAgdGhpcy5zdGFja3NUb1J1bi5maWx0ZXIoKHN0YWNrKSA9PiBzdGFjay5pc1BlbmRpbmcpWzBdLFxuICAgICAgICAgIClcbiAgICAgIDogKCkgPT4gZ2V0U3RhY2tXaXRoTm9Vbm1ldERlcGVuZGVuY2llcyh0aGlzLnN0YWNrc1RvUnVuKTtcblxuICAgIGF3YWl0IHRoaXMuZXhlY3V0ZShcImRlcGxveVwiLCBuZXh0LCBvcHRzKTtcblxuICAgIGNvbnN0IHVucHJvY2Vzc2VkU3RhY2tzID0gdGhpcy5zdGFja3NUb1J1bi5maWx0ZXIoXG4gICAgICAoZXhlY3V0b3IpID0+IGV4ZWN1dG9yLmlzUGVuZGluZyxcbiAgICApO1xuICAgIGlmICh1bnByb2Nlc3NlZFN0YWNrcy5sZW5ndGggPiAwKSB7XG4gICAgICB0aHJvdyBFcnJvcnMuRXh0ZXJuYWwoXG4gICAgICAgIGBTb21lIHN0YWNrcyBmYWlsZWQgdG8gZGVwbG95OiAke3VucHJvY2Vzc2VkU3RhY2tzXG4gICAgICAgICAgLm1hcCgocykgPT4gcy5zdGFjay5uYW1lKVxuICAgICAgICAgIC5qb2luKFwiLCBcIil9LiBQbGVhc2UgY2hlY2sgdGhlIGxvZ3MgZm9yIG1vcmUgaW5mb3JtYXRpb24uYCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMucHJvamVjdFRlbGVtZXRyeShcImRlcGxveVwiLCB7XG4gICAgICAgIHN0YWNrTWV0YWRhdGE6IHN0YWNrc1RvUnVuLm1hcCgoc3RhY2spID0+XG4gICAgICAgICAgSlNPTi5wYXJzZShzdGFjay5jb250ZW50KVtcIi8vXCJdXG4gICAgICAgICAgICA/IEpTT04ucGFyc2Uoc3RhY2suY29udGVudClbXCIvL1wiXS5tZXRhZGF0YVxuICAgICAgICAgICAgOiB7fSxcbiAgICAgICAgKSxcbiAgICAgICAgZmFpbGVkU3RhY2tzOiB1bnByb2Nlc3NlZFN0YWNrcy5tYXAoKHN0YWNrKSA9PiBzdGFjay5lcnJvciksXG4gICAgICAgIHJlcXVpcmVkUHJvdmlkZXJzOiBzdGFja3NUb1J1bi5tYXAoKHN0YWNrOiBhbnkpID0+XG4gICAgICAgICAgSlNPTi5wYXJzZShzdGFjay5jb250ZW50KVtcInRlcnJhZm9ybVwiXVxuICAgICAgICAgICAgPyBKU09OLnBhcnNlKHN0YWNrLmNvbnRlbnQpW1widGVycmFmb3JtXCJdLnJlcXVpcmVkX3Byb3ZpZGVyc1xuICAgICAgICAgICAgOiB7fSxcbiAgICAgICAgKSxcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhcIkZhaWxlZCB0byBzZW5kIHRlbGVtZXRyeVwiLCBlKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZGVzdHJveShvcHRzOiBNdXRhdGlvbk9wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IHN0YWNrcyA9IG9wdHMuc2tpcFN5bnRoXG4gICAgICA/IGF3YWl0IHRoaXMucmVhZFN5bnRoZXNpemVkU3RhY2tzKClcbiAgICAgIDogYXdhaXQgdGhpcy5zeW50aChvcHRzLm5vQ29sb3IpO1xuICAgIGNvbnN0IHN0YWNrc1RvUnVuID0gZ2V0TXVsdGlwbGVTdGFja3Moc3RhY2tzLCBvcHRzLnN0YWNrTmFtZXMsIFwiZGVzdHJveVwiKTtcblxuICAgIGlmICghb3B0cy5pZ25vcmVNaXNzaW5nU3RhY2tEZXBlbmRlbmNpZXMpIHtcbiAgICAgIGNoZWNrSWZBbGxEZXBlbmRhbnRzQXJlSW5jbHVkZWQoc3RhY2tzVG9SdW4sIHN0YWNrcyk7XG4gICAgfVxuXG4gICAgdGhpcy5zdG9wQWxsU3RhY2tzVGhhdENhbk5vdFJ1bldpdGhvdXQgPSAoc3RhY2tOYW1lOiBzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IHN0YWNrRXhlY3V0b3IgPSB0aGlzLnN0YWNrc1RvUnVuLmZpbmQoXG4gICAgICAgIChzKSA9PiBzLnN0YWNrLm5hbWUgPT09IHN0YWNrTmFtZSxcbiAgICAgICk7XG4gICAgICBpZiAoIXN0YWNrRXhlY3V0b3IpIHtcbiAgICAgICAgdGhyb3cgRXJyb3JzLkludGVybmFsKFxuICAgICAgICAgIGBDb3VsZCBub3QgZmluZCBzdGFjayBcIiR7c3RhY2tOYW1lfVwiIHRoYXQgd2FzIHN0b3BwZWRgLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBzdGFja0V4ZWN1dG9yLnN0YWNrLmRlcGVuZGVuY2llcy5mb3JFYWNoKChkZXBlbmRhbnQpID0+IHtcbiAgICAgICAgdGhpcy5zdG9wQWxsU3RhY2tzVGhhdENhbk5vdFJ1bldpdGhvdXQoZGVwZW5kYW50KTtcblxuICAgICAgICBjb25zdCBkZXBlbmRhbnRTdGFjayA9IHRoaXMuc3RhY2tzVG9SdW4uZmluZChcbiAgICAgICAgICAocykgPT4gcy5zdGFjay5uYW1lID09PSBkZXBlbmRhbnQsXG4gICAgICAgICk7XG4gICAgICAgIGlmICghZGVwZW5kYW50U3RhY2spIHtcbiAgICAgICAgICB0aHJvdyBFcnJvcnMuSW50ZXJuYWwoXG4gICAgICAgICAgICBgQ291bGQgbm90IGZpbmQgc3RhY2sgXCIke2RlcGVuZGFudH1cIiB0aGF0IHdhcyBzdG9wcGVkYCxcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgZGVwZW5kYW50U3RhY2suc3RvcCgpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICB0aGlzLnN0YWNrc1RvUnVuID0gc3RhY2tzVG9SdW4ubWFwKChzdGFjaykgPT5cbiAgICAgIHRoaXMuZ2V0U3RhY2tFeGVjdXRvcihzdGFjaywgb3B0cyksXG4gICAgKTtcbiAgICBjb25zdCBuZXh0ID0gb3B0cy5pZ25vcmVNaXNzaW5nU3RhY2tEZXBlbmRlbmNpZXNcbiAgICAgID8gKCkgPT5cbiAgICAgICAgICBQcm9taXNlLnJlc29sdmUoXG4gICAgICAgICAgICB0aGlzLnN0YWNrc1RvUnVuLmZpbHRlcihcbiAgICAgICAgICAgICAgKHN0YWNrKSA9PiBzdGFjay5jdXJyZW50U3RhdGUgIT09IFwiZG9uZVwiLFxuICAgICAgICAgICAgKVswXSxcbiAgICAgICAgICApXG4gICAgICA6ICgpID0+IGdldFN0YWNrV2l0aE5vVW5tZXREZXBlbmRhbnRzKHRoaXMuc3RhY2tzVG9SdW4pO1xuXG4gICAgYXdhaXQgdGhpcy5leGVjdXRlKFwiZGVzdHJveVwiLCBuZXh0LCBvcHRzKTtcblxuICAgIGNvbnN0IHVucHJvY2Vzc2VkU3RhY2tzID0gdGhpcy5zdGFja3NUb1J1bi5maWx0ZXIoXG4gICAgICAoZXhlY3V0b3IpID0+IGV4ZWN1dG9yLmlzUGVuZGluZyxcbiAgICApO1xuICAgIGlmICh1bnByb2Nlc3NlZFN0YWNrcy5sZW5ndGggPiAwKSB7XG4gICAgICB0aHJvdyBFcnJvcnMuRXh0ZXJuYWwoXG4gICAgICAgIGBTb21lIHN0YWNrcyBmYWlsZWQgdG8gZGVzdHJveTogJHt1bnByb2Nlc3NlZFN0YWNrc1xuICAgICAgICAgIC5tYXAoKHMpID0+IHMuc3RhY2submFtZSlcbiAgICAgICAgICAuam9pbihcIiwgXCIpfS4gUGxlYXNlIGNoZWNrIHRoZSBsb2dzIGZvciBtb3JlIGluZm9ybWF0aW9uLmAsXG4gICAgICApO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLnByb2plY3RUZWxlbWV0cnkoXCJkZXN0cm95XCIsIHtcbiAgICAgICAgc3RhY2tNZXRhZGF0YTogc3RhY2tzVG9SdW4ubWFwKChzdGFjaykgPT5cbiAgICAgICAgICBKU09OLnBhcnNlKHN0YWNrLmNvbnRlbnQpW1wiLy9cIl1cbiAgICAgICAgICAgID8gSlNPTi5wYXJzZShzdGFjay5jb250ZW50KVtcIi8vXCJdLm1ldGFkYXRhXG4gICAgICAgICAgICA6IHt9LFxuICAgICAgICApLFxuICAgICAgICBmYWlsZWRTdGFja3M6IHVucHJvY2Vzc2VkU3RhY2tzLm1hcCgoc3RhY2spID0+IHN0YWNrLmVycm9yKSxcbiAgICAgICAgcmVxdWlyZWRQcm92aWRlcnM6IHN0YWNrc1RvUnVuLm1hcCgoc3RhY2s6IGFueSkgPT5cbiAgICAgICAgICBKU09OLnBhcnNlKHN0YWNrLmNvbnRlbnQpW1widGVycmFmb3JtXCJdXG4gICAgICAgICAgICA/IEpTT04ucGFyc2Uoc3RhY2suY29udGVudClbXCJ0ZXJyYWZvcm1cIl0ucmVxdWlyZWRfcHJvdmlkZXJzXG4gICAgICAgICAgICA6IHt9LFxuICAgICAgICApLFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbG9nZ2VyLmRlYnVnKFwiRmFpbGVkIHRvIHNlbmQgdGVsZW1ldHJ5XCIsIGUpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBwcm9qZWN0VGVsZW1ldHJ5KGNvbW1hbmQ6IHN0cmluZywgcGF5bG9hZDogYW55KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgY29uZmlnID0gcmVhZENvbmZpZ1N5bmMoKTtcbiAgICBhd2FpdCBzZW5kVGVsZW1ldHJ5KGNvbW1hbmQsIHtcbiAgICAgIC4uLnBheWxvYWQsXG4gICAgICBsYW5ndWFnZTogY29uZmlnLmxhbmd1YWdlLFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGZldGNoT3V0cHV0cyhvcHRzOiBGZXRjaE91dHB1dE9wdGlvbnMpIHtcbiAgICBjb25zdCBzdGFja3MgPSBvcHRzLnNraXBTeW50aFxuICAgICAgPyBhd2FpdCB0aGlzLnJlYWRTeW50aGVzaXplZFN0YWNrcygpXG4gICAgICA6IGF3YWl0IHRoaXMuc3ludGgoKTtcblxuICAgIGNvbnN0IHN0YWNrc1RvUnVuID0gZ2V0TXVsdGlwbGVTdGFja3MoXG4gICAgICBzdGFja3MsXG4gICAgICBvcHRzLnN0YWNrTmFtZXMgfHwgW10sXG4gICAgICBcImRlcGxveVwiLFxuICAgICk7XG5cbiAgICBpZiAoc3RhY2tzVG9SdW4ubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBzdGFja3MgdG8gZmV0Y2ggb3V0cHV0cyBmb3Igc3BlY2lmaWVkXCIpO1xuICAgIH1cblxuICAgIHRoaXMuc3RhY2tzVG9SdW4gPSBzdGFja3NUb1J1bi5tYXAoKHN0YWNrKSA9PlxuICAgICAgLy8gT3B0aW9ucyBhcmUgZW1wdHksIGJlY2F1c2UgTXVsdGlwbGVTdGFja09wdGlvbnMgZG9lc24ndCBoYXZlIGFueSByZWxldmFudFxuICAgICAgLy8gb3B0aW9ucyBmb3IgYGdldFN0YWNrRXhlY3V0b3JgLCBoZW5jZSBkZWZhdWx0cyBhcmUgZmluZVxuICAgICAgdGhpcy5nZXRTdGFja0V4ZWN1dG9yKHN0YWNrLCB7fSksXG4gICAgKTtcblxuICAgIGF3YWl0IHRoaXMuaW5pdGlhbGl6ZVN0YWNrc1RvUnVuSW5TZXJpYWwodW5kZWZpbmVkLCBvcHRzLnNraXBQcm92aWRlckxvY2spO1xuICAgIGNvbnN0IG91dHB1dHMgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIHRoaXMuc3RhY2tzVG9SdW4ubWFwKGFzeW5jIChzKSA9PiB7XG4gICAgICAgIGNvbnN0IG91dHB1dCA9IGF3YWl0IHMuZmV0Y2hPdXRwdXRzKCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgW3Muc3RhY2submFtZV06IG91dHB1dCxcbiAgICAgICAgfTtcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICByZXR1cm4gb3V0cHV0cy5yZWR1Y2UoXG4gICAgICAoYWNjLCBjdXJyKSA9PiAoeyAuLi5hY2MsIC4uLmN1cnIgfSksXG4gICAgICB7fSxcbiAgICApIGFzIE5lc3RlZFRlcnJhZm9ybU91dHB1dHM7XG4gIH1cblxuICAvLyBTZXJpYWxseSBydW4gdGVycmFmb3JtIGluaXQgdG8gcHJvaGliaXQgdGV4dCBmaWxlIGJ1c3kgZXJyb3JzIGZvciB0aGUgY2FjaGUgZmlsZXNcbiAgcHJpdmF0ZSBhc3luYyBpbml0aWFsaXplU3RhY2tzVG9SdW5JblNlcmlhbChcbiAgICBub0NvbG9yPzogYm9vbGVhbixcbiAgICBza2lwUHJvdmlkZXJMb2NrPzogYm9vbGVhbixcbiAgICBtaWdyYXRlU3RhdGU/OiBib29sZWFuLFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBmb3IgKGNvbnN0IHN0YWNrIG9mIHRoaXMuc3RhY2tzVG9SdW4pIHtcbiAgICAgIGF3YWl0IHN0YWNrLmluaXRhbGl6ZVRlcnJhZm9ybShub0NvbG9yLCBza2lwUHJvdmlkZXJMb2NrLCBtaWdyYXRlU3RhdGUpO1xuICAgIH1cbiAgfVxufVxuIl19
370
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrdGYtcHJvamVjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvY2RrdGYtcHJvamVjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwrQkFBK0I7QUFDL0IsbUNBQW1DO0FBQ25DLDRDQU13QjtBQUN4QiwrQ0FBMEU7QUFDMUUsbUNBQTJDO0FBQzNDLCtDQVF1QjtBQUV2QixxREFBMkQ7QUFDM0QsMkRBUWlDO0FBQ2pDLHlFQUFtRTtBQStGbkUsU0FBZ0IsMkJBQTJCLENBQ3pDLE1BQW1DO0lBRW5DLE9BQU8sQ0FBQyxzQkFBc0IsRUFBRSwrQkFBK0IsQ0FBQyxDQUFDLFFBQVEsQ0FDdkUsTUFBTSxDQUFDLElBQUksQ0FDWixDQUFDO0FBQ0osQ0FBQztBQU5ELGtFQU1DO0FBY0QsTUFBYSxZQUFZO0lBcUJ2QixZQUFZLEVBQ1YsWUFBWSxFQUNaLE1BQU0sRUFDTixRQUFRLEVBQ1IsS0FBSyxFQUNMLGdCQUFnQixHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFDaEMsV0FBVyxFQUNYLEdBQUcsR0FBRyxLQUFLLEdBQ1M7UUFoQnRCLDhCQUE4QjtRQUN2QixnQkFBVyxHQUFpQixFQUFFLENBQUM7UUFDdEMsK0NBQStDO1FBQ3ZDLHNDQUFpQyxHQUN2QyxHQUFHLEVBQUUsR0FBRSxDQUFDLENBQUM7UUFhVCxJQUFJLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztRQUNqQyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsZ0JBQWdCLENBQUM7UUFDekMsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFDekIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsTUFBTSxFQUFFLEdBQUcsSUFBSSxlQUFlLEVBQUUsQ0FBQztRQUNqQyxJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUM7UUFDN0IsSUFBSSxDQUFD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QkFBNkIsQ0FDekMsT0FBaUIsRUFDakIsZ0JBQTBCLEVBQzFCLFlBQXNCO1FBRXRCLEtBQUssTUFBTSxLQUFLLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3JDLE1BQU0sS0FBSyxDQUFDLGtCQUFrQixDQUFDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUMxRSxDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBemlCRCxvQ0F5aUJDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSBIYXNoaUNvcnAsIEluY1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1QTC0yLjBcbmltcG9ydCB7XG4gIEVycm9ycyxcbiAgZW5zdXJlQWxsU2V0dGxlZEJlZm9yZVRocm93aW5nLFxuICBsb2dnZXIsXG4gIHJlYWRDb25maWdTeW5jLFxuICBzZW5kVGVsZW1ldHJ5LFxufSBmcm9tIFwiQGNka3RuL2NvbW1vbnNcIjtcbmltcG9ydCB7IFN5bnRoZXNpemVkU3RhY2ssIFN5bnRoT3JpZ2luLCBTeW50aFN0YWNrIH0gZnJvbSBcIi4vc3ludGgtc3RhY2tcIjtcbmltcG9ydCB7IHByaW50QW5ub3RhdGlvbnMgfSBmcm9tIFwiLi9zeW50aFwiO1xuaW1wb3J0IHtcbiAgQ2RrdGZTdGFjayxcbiAgRXh0ZXJuYWxTdGFja0FwcHJvdmFsVXBkYXRlLFxuICBFeHRlcm5hbFN0YWNrU2VudGluZWxPdmVycmlkZVVwZGF0ZSxcbiAgU3RhY2tBcHByb3ZhbFVwZGF0ZSxcbiAgU3RhY2tTZW50aW5lbE92ZXJyaWRlVXBkYXRlLFxuICBTdGFja1VwZGF0ZSxcbiAgU3RhY2tVc2VySW5wdXRVcGRhdGUsXG59IGZyb20gXCIuL2Nka3RmLXN0YWNrXCI7XG5pbXBvcnQgeyBOZXN0ZWRUZXJyYWZvcm1PdXRwdXRzIH0gZnJvbSBcIi4vb3V0cHV0XCI7XG5pbXBvcnQgeyBjcmVhdGVFbmhhbmNlTG9nTWVzc2FnZSB9IGZyb20gXCIuL2V4ZWN1dGlvbi1sb2dzXCI7XG5pbXBvcnQge1xuICBjaGVja0lmQWxsRGVwZW5kYW50c0FyZUluY2x1ZGVkLFxuICBjaGVja0lmQWxsRGVwZW5kZW5jaWVzQXJlSW5jbHVkZWQsXG4gIGZpbmRBbGxOZXN0ZWREZXBlbmRhbnRTdGFja3MsXG4gIGdldE11bHRpcGxlU3RhY2tzLFxuICBnZXRTaW5nbGVTdGFjayxcbiAgZ2V0U3RhY2tXaXRoTm9Vbm1ldERlcGVuZGFudHMsXG4gIGdldFN0YWNrV2l0aE5vVW5tZXREZXBlbmRlbmNpZXMsXG59IGZyb20gXCIuL2hlbHBlcnMvc3RhY2staGVscGVyc1wiO1xuaW1wb3J0IHsgQ2RrdGZQcm9qZWN0SU9IYW5kbGVyIH0gZnJvbSBcIi4vY2RrdGYtcHJvamVjdC1pby1oYW5kbGVyXCI7XG5cbnR5cGUgTXVsdGlTdGFja0FwcHJvdmFsVXBkYXRlID0ge1xuICB0eXBlOiBcIndhaXRpbmcgZm9yIGFwcHJvdmFsXCI7XG4gIHN0YWNrTmFtZTogc3RyaW5nO1xuICBhcHByb3ZlOiAoKSA9PiB2b2lkO1xuICBkaXNtaXNzOiAoKSA9PiB2b2lkO1xuICBzdG9wOiAoKSA9PiB2b2lkO1xufTtcblxudHlwZSBNdWx0aVN0YWNrU2VudGluZWxPdmVycmlkZVVwZGF0ZSA9IHtcbiAgdHlwZTogXCJ3YWl0aW5nIGZvciBzZW50aW5lbCBvdmVycmlkZVwiO1xuICBzdGFja05hbWU6IHN0cmluZztcbiAgb3ZlcnJpZGU6ICgpID0+IHZvaWQ7XG4gIHJlamVjdDogKCkgPT4gdm9pZDtcbn07XG5cbmV4cG9ydCB0eXBlIE11bHRpU3RhY2tVcGRhdGUgPVxuICB8IE11bHRpU3RhY2tBcHByb3ZhbFVwZGF0ZVxuICB8IE11bHRpU3RhY2tTZW50aW5lbE92ZXJyaWRlVXBkYXRlO1xuXG5leHBvcnQgdHlwZSBQcm9qZWN0VXBkYXRlID1cbiAgfCB7XG4gICAgICB0eXBlOiBcInN5bnRoZXNpemluZ1wiO1xuICAgIH1cbiAgfCB7XG4gICAgICB0eXBlOiBcInN5bnRoZXNpemVkXCI7XG4gICAgICBzdGFja3M6IFN5bnRoZXNpemVkU3RhY2tbXTtcbiAgICAgIGVycm9yTWVzc2FnZT86IHN0cmluZztcbiAgICB9XG4gIHwgU3RhY2tVcGRhdGVcbiAgfCBNdWx0aVN0YWNrVXBkYXRlO1xuXG5leHBvcnQgdHlwZSBTaW5nbGVTdGFja09wdGlvbnMgPSB7XG4gIHN0YWNrTmFtZT86IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIE11bHRpcGxlU3RhY2tPcHRpb25zID0ge1xuICBzdGFja05hbWVzPzogc3RyaW5nW107XG59O1xuXG5leHBvcnQgdHlwZSBTa2lwU3ludGhPcHRpb25zID0ge1xuICBza2lwU3ludGg/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgU2tpcFByb3ZpZGVyTG9ja09wdGlvbnMgPSB7XG4gIHNraXBQcm92aWRlckxvY2s/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgRmV0Y2hPdXRwdXRPcHRpb25zID0gU2tpcFN5bnRoT3B0aW9ucyAmXG4gIFNraXBQcm92aWRlckxvY2tPcHRpb25zICZcbiAgTXVsdGlwbGVTdGFja09wdGlvbnM7XG5cbmV4cG9ydCB0eXBlIEF1dG9BcHByb3ZlT3B0aW9ucyA9IHtcbiAgYXV0b0FwcHJvdmU/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgRGlmZk9wdGlvbnMgPSBTaW5nbGVTdGFja09wdGlvbnMgJlxuICBTa2lwUHJvdmlkZXJMb2NrT3B0aW9ucyAmXG4gIFNraXBTeW50aE9wdGlvbnMgJiB7XG4gICAgcmVmcmVzaE9ubHk/OiBib29sZWFuO1xuICAgIHRlcnJhZm9ybVBhcmFsbGVsaXNtPzogbnVtYmVyO1xuICAgIHZhcnM/OiBzdHJpbmdbXTtcbiAgICB2YXJGaWxlcz86IHN0cmluZ1tdO1xuICAgIG5vQ29sb3I/OiBib29sZWFuO1xuICAgIG1pZ3JhdGVTdGF0ZT86IGJvb2xlYW47XG4gIH07XG5cbmV4cG9ydCB0eXBlIE11dGF0aW9uT3B0aW9ucyA9IE11bHRpcGxlU3RhY2tPcHRpb25zICZcbiAgU2tpcFByb3ZpZGVyTG9ja09wdGlvbnMgJlxuICBTa2lwU3ludGhPcHRpb25zICZcbiAgQXV0b0FwcHJvdmVPcHRpb25zICYge1xuICAgIHJlZnJlc2hPbmx5PzogYm9vbGVhbjtcbiAgICBpZ25vcmVNaXNzaW5nU3RhY2tEZXBlbmRlbmNpZXM/OiBib29sZWFuO1xuICAgIHBhcmFsbGVsaXNtPzogbnVtYmVyO1xuICAgIHRlcnJhZm9ybVBhcmFsbGVsaXNtPzogbnVtYmVyO1xuICAgIHZhcnM/OiBzdHJpbmdbXTtcbiAgICB2YXJGaWxlcz86IHN0cmluZ1tdO1xuICAgIG5vQ29sb3I/OiBib29sZWFuO1xuICAgIG1pZ3JhdGVTdGF0ZT86IGJvb2xlYW47XG4gIH07XG5cbmV4cG9ydCB0eXBlIExvZ01lc3NhZ2UgPSB7XG4gIHN0YWNrTmFtZTogc3RyaW5nO1xuICBtZXNzYWdlV2l0aENvbnN0cnVjdFBhdGg/OiBzdHJpbmc7XG4gIG1lc3NhZ2U6IHN0cmluZztcbn07XG5cbi8vIFN0b3JlcyBhIGxvZyB2YWx1ZSBvZiBhIGNlcnRhaW4gdHlwZSB1bnRpbCBpdCBjYW4gYmUgc2VudFxudHlwZSBCdWZmZXJlZDxULCBWPiA9IHtcbiAgY2I6IChpdGVtOiBUKSA9PiB2b2lkO1xuICB2YWx1ZTogVDtcbiAgdHlwZTogVjtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1dhaXRpbmdGb3JVc2VySW5wdXRVcGRhdGUoXG4gIHVwZGF0ZTogUHJvamVjdFVwZGF0ZSB8IFN0YWNrVXBkYXRlLFxuKSB7XG4gIHJldHVybiBbXCJ3YWl0aW5nIGZvciBhcHByb3ZhbFwiLCBcIndhaXRpbmcgZm9yIHNlbnRpbmVsIG92ZXJyaWRlXCJdLmluY2x1ZGVzKFxuICAgIHVwZGF0ZS50eXBlLFxuICApO1xufVxuXG5leHBvcnQgdHlwZSBQcm9qZWN0RXZlbnQgPVxuICB8IEJ1ZmZlcmVkPFByb2plY3RVcGRhdGUsIFwicHJvamVjdFVwZGF0ZVwiPlxuICB8IEJ1ZmZlcmVkPExvZ01lc3NhZ2UsIFwibG9nTWVzc2FnZVwiPjtcbmV4cG9ydCB0eXBlIENka3RmUHJvamVjdE9wdGlvbnMgPSB7XG4gIHN5bnRoQ29tbWFuZDogc3RyaW5nO1xuICBvdXREaXI6IHN0cmluZztcbiAgb25VcGRhdGU6ICh1cGRhdGU6IFByb2plY3RVcGRhdGUpID0+IHZvaWQ7XG4gIG9uTG9nPzogKGxvZzogTG9nTWVzc2FnZSkgPT4gdm9pZDtcbiAgd29ya2luZ0RpcmVjdG9yeT86IHN0cmluZztcbiAgc3ludGhPcmlnaW4/OiBTeW50aE9yaWdpbjtcbiAgaGNsPzogYm9vbGVhbjtcbn07XG5leHBvcnQgY2xhc3MgQ2RrdGZQcm9qZWN0IHtcbiAgcHVibGljIHN0YWNrcz86IFN5bnRoZXNpemVkU3RhY2tbXTtcbiAgcHVibGljIGhhcmRBYm9ydDogKCkgPT4gdm9pZDtcblxuICBwcml2YXRlIHN5bnRoQ29tbWFuZDogc3RyaW5nO1xuICBwcml2YXRlIG91dERpcjogc3RyaW5nO1xuICBwcml2YXRlIHdvcmtpbmdEaXJlY3Rvcnk6IHN0cmluZztcbiAgcHJpdmF0ZSBvblVwZGF0ZTogKHVwZGF0ZTogUHJvamVjdFVwZGF0ZSkgPT4gdm9pZDtcbiAgcHJpdmF0ZSBvbkxvZz86IChsb2c6IExvZ01lc3NhZ2UpID0+IHZvaWQ7XG4gIHByaXZhdGUgYWJvcnRTaWduYWw6IEFib3J0U2lnbmFsO1xuICBwcml2YXRlIHN5bnRoT3JpZ2luPzogU3ludGhPcmlnaW47XG4gIHByaXZhdGUgaGNsPzogYm9vbGVhbjtcblxuICAvLyBTZXQgZHVyaW5nIGRlcGxveSAvIGRlc3Ryb3lcbiAgcHVibGljIHN0YWNrc1RvUnVuOiBDZGt0ZlN0YWNrW10gPSBbXTtcbiAgLy8gVGhpcyBtZWFucyBzdGggZGlmZmVyZW50IGluIGRlcGxveSAvIGRlc3Ryb3lcbiAgcHJpdmF0ZSBzdG9wQWxsU3RhY2tzVGhhdENhbk5vdFJ1bldpdGhvdXQ6IChzdGFja05hbWU6IHN0cmluZykgPT4gdm9pZCA9XG4gICAgKCkgPT4ge307XG5cbiAgcHJpdmF0ZSBpb0hhbmRsZXI6IENka3RmUHJvamVjdElPSGFuZGxlcjtcblxuICBjb25zdHJ1Y3Rvcih7XG4gICAgc3ludGhDb21tYW5kLFxuICAgIG91dERpcixcbiAgICBvblVwZGF0ZSxcbiAgICBvbkxvZyxcbiAgICB3b3JraW5nRGlyZWN0b3J5ID0gcHJvY2Vzcy5jd2QoKSxcbiAgICBzeW50aE9yaWdpbixcbiAgICBoY2wgPSBmYWxzZSxcbiAgfTogQ2RrdGZQcm9qZWN0T3B0aW9ucykge1xuICAgIHRoaXMuc3ludGhDb21tYW5kID0gc3ludGhDb21tYW5kO1xuICAgIHRoaXMub3V0RGlyID0gb3V0RGlyO1xuICAgIHRoaXMud29ya2luZ0RpcmVjdG9yeSA9IHdvcmtpbmdEaXJlY3Rvcnk7XG4gICAgdGhpcy5vblVwZGF0ZSA9IG9uVXBkYXRlO1xuICAgIHRoaXMub25Mb2cgPSBvbkxvZztcbiAgICBjb25zdCBhYyA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgICB0aGlzLmFib3J0U2lnbmFsID0gYWMuc2lnbmFsO1xuICAgIHRoaXMuc3ludGhPcmlnaW4gPSBzeW50aE9yaWdpbjtcbiAgICB0aGlzLmhjbCA9XG4gICAgICBwcm9jZXNzLmVudi5TWU5USF9IQ0xfT1VUUFVUID09PSBcInRydWVcIiB8fFxuICAgICAgcHJvY2Vzcy5lbnYuU1lOVEhfSENMX09VVFBVVCA9PT0gXCIxXCIgfHxcbiAgICAgIGhjbDtcblxuICAgIHRoaXMuaGFyZEFib3J0ID0gYWMuYWJvcnQuYmluZChhYyk7XG4gICAgdGhpcy5pb0hhbmRsZXIgPSBuZXcgQ2RrdGZQcm9qZWN0SU9IYW5kbGVyKCk7XG4gIH1cblxuICBwcml2YXRlIHN0b3BBbGxTdGFja3MoKSB7XG4gICAgdGhpcy5zdGFja3NUb1J1bi5mb3JFYWNoKChzdGFjaykgPT4gc3RhY2suc3RvcCgpKTtcbiAgICB0aGlzLmlvSGFuZGxlci5maWx0ZXJVc2VySW5wdXRFdmVudHNGcm9tQnVmZmVyKCk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVVzZXJVcGRhdGU8XG4gICAgVCBleHRlbmRzIE11bHRpU3RhY2tVcGRhdGUsXG4gICAgViBleHRlbmRzIFN0YWNrVXNlcklucHV0VXBkYXRlLFxuICA+KFxuICAgIHVwZGF0ZTogU3RhY2tVc2VySW5wdXRVcGRhdGUsXG4gICAgb3BlcmF0aW9uczogUmVjb3JkPHN0cmluZywgKHVwZGF0ZTogVikgPT4gdm9pZD4sXG4gICAgb3JpZ2luYWxDYWxsYmFjazogKHVwZGF0ZVRvU2VuZDogUHJvamVjdFVwZGF0ZSkgPT4gdm9pZCxcbiAgICBldmVudFR5cGU6IFRbXCJ0eXBlXCJdLFxuICApIHtcbiAgICBjb25zdCBjYWxsYmFja3MgPSAodXBkYXRlOiBWKSA9PlxuICAgICAgT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgICBPYmplY3QuZW50cmllcyhvcGVyYXRpb25zKS5tYXAoKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBrZXksXG4gICAgICAgICAgICAvLyBUaGlzIGlzIHBhc3NlZCBpbiB0byBtYWtlIHR5cGVzY3JpcHQgaGFwcHkgb25seVxuICAgICAgICAgICAgKF86IFYpID0+IHtcbiAgICAgICAgICAgICAgdmFsdWUodXBkYXRlKTtcblxuICAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGRlZmVyIHRoZXNlIGNhbGxzIGZvciB0aGUgY2FzZSB0aGF0IGFwcHJvdmUoKSBpcyBpbnN0YW50bHkgaW52b2tlZFxuICAgICAgICAgICAgICAvLyBpbiB0aGUgbGlzdGVuZXIgdGhhdCByZWNlaXZlcyB0aGVzZSBjYWxsYmFja3MgYXMgaXQgb3RoZXJ3aXNlIHdvdWxkIGFscmVhZHlcbiAgICAgICAgICAgICAgLy8gcmVtb3ZlIHRoZSBcIndhaXRpbmcgZm9yIHN0YWNrIGFwcHJvdmFsXCIgZXZlbnQgZnJvbSB0aGUgYnVmZmVyIGJlZm9yZSB3ZSBldmVuXG4gICAgICAgICAgICAgIC8vIHNldCB3YWl0aW5nRm9yQXBwcm92YWwgdG8gdHJ1ZSAoYXQgdGhlIGVuZCBvZiB0aGlzIGlmIHN0YXRlbWVudCkgd2hpY2ggcmVzdWx0c1xuICAgICAgICAgICAgICAvLyBpbiBidWZmZXJlZCB1cGRhdGVzIHdoaWNoIHdpbGwgbmV2ZXIgdW5ibG9ja1xuICAgICAgICAgICAgICBzZXRUaW1lb3V0KFxuICAgICAgICAgICAgICAgICgpID0+IHRoaXMuaW9IYW5kbGVyLnJlc3VtZUFmdGVyVXNlcklucHV0KHVwZGF0ZS5zdGFja05hbWUpLFxuICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF07XG4gICAgICAgIH0pLFxuICAgICAgKTtcblxuICAgIC8vIGFsd2F5cyBzZW5kIHRvIGJ1ZmZlciwgYXMgcmVzdW1lQWZ0ZXJVc2VySW5wdXQoKSBhbHdheXMgZXhwZWN0cyBhIG1hdGNoaW5nIGV2ZW50XG4gICAgdGhpcy5pb0hhbmRsZXIucHVzaEV2ZW50KHtcbiAgICAgIGNiOiBvcmlnaW5hbENhbGxiYWNrLFxuICAgICAgdmFsdWU6IHtcbiAgICAgICAgdHlwZTogZXZlbnRUeXBlLFxuICAgICAgICBzdGFja05hbWU6IHVwZGF0ZS5zdGFja05hbWUsXG4gICAgICAgIC4uLmNhbGxiYWNrcyh1cGRhdGUgYXMgViksXG4gICAgICB9IGFzIFQsXG4gICAgICB0eXBlOiBcInByb2plY3RVcGRhdGVcIixcbiAgICB9KTtcblxuICAgIC8vIGlmIHdlIGFyZW4ndCBhbHJlYWR5IHdhaXRpbmcsIHRoaXMgbmVlZHMgdG8gZ28gdG8gY2IoKSB0b28gdG8gYXJyaXZlIGF0IHRoZSBVSVxuICAgIGlmICghdGhpcy5pb0hhbmRsZXIuaXNXYWl0aW5nRm9yVXNlcklucHV0KCkpIHtcbiAgICAgIG9yaWdpbmFsQ2FsbGJhY2soe1xuICAgICAgICB0eXBlOiBldmVudFR5cGUsXG4gICAgICAgIHN0YWNrTmFtZTogdXBkYXRlLnN0YWNrTmFtZSxcbiAgICAgICAgLi4uY2FsbGJhY2tzKHVwZGF0ZSBhcyBWKSxcbiAgICAgIH0gYXMgVCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVVc2VySW5wdXRQcm9jZXNzKGNiOiAodXBkYXRlVG9TZW5kOiBQcm9qZWN0VXBkYXRlKSA9PiB2b2lkKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHVwZGF0ZTpcbiAgICAgICAgfCBTdGFja1VwZGF0ZVxuICAgICAgICB8IFN0YWNrQXBwcm92YWxVcGRhdGVcbiAgICAgICAgfCBFeHRlcm5hbFN0YWNrQXBwcm92YWxVcGRhdGVcbiAgICAgICAgfCBTdGFja1NlbnRpbmVsT3ZlcnJpZGVVcGRhdGVcbiAgICAgICAgfCBFeHRlcm5hbFN0YWNrU2VudGluZWxPdmVycmlkZVVwZGF0ZSxcbiAgICApID0+IHtcbiAgICAgIGlmICh1cGRhdGUudHlwZSA9PT0gXCJleHRlcm5hbCBzdGFjayBhcHByb3ZhbCByZXBseVwiKSB7XG4gICAgICAgIGlmICghdXBkYXRlLmFwcHJvdmVkKSB7XG4gICAgICAgICAgdGhpcy5zdG9wQWxsU3RhY2tzVGhhdENhbk5vdFJ1bldpdGhvdXQodXBkYXRlLnN0YWNrTmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pb0hhbmRsZXIucmVzdW1lQWZ0ZXJVc2VySW5wdXQodXBkYXRlLnN0YWNrTmFtZSk7XG4gICAgICAgIHJldHVybjsgLy8gYWthIGRvbid0IHNlbmQgdGhpcyBldmVudCB0byBhbnkgYnVmZmVyXG4gICAgICB9XG4gICAgICBpZiAodXBkYXRlLnR5cGUgPT09IFwiZXh0ZXJuYWwgc3RhY2sgc2VudGluZWwgb3ZlcnJpZGUgcmVwbHlcIikge1xuICAgICAgICBpZiAoIXVwZGF0ZS5vdmVycmlkZGVuKSB7XG4gICAgICAgICAgdGhpcy5zdG9wQWxsU3RhY2tzVGhhdENhbk5vdFJ1bldpdGhvdXQodXBkYXRlLnN0YWNrTmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pb0hhbmRsZXIucmVzdW1lQWZ0ZXJVc2VySW5wdXQodXBkYXRlLnN0YWNrTmFtZSk7XG4gICAgICAgIHJldHVybjsgLy8gYWthIGRvbid0IHNlbmQgdGhpcyBldmVudCB0byBhbnkgYnVmZmVyXG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgdXBkYXRlLnR5cGUgPT09IFwid2FpdGluZyBmb3Igc3RhY2sgYXBwcm92YWxcIiB8fFxuICAgICAgICB1cGRhdGUudHlwZSA9PT0gXCJ3YWl0aW5nIGZvciBzdGFjayBzZW50aW5lbCBvdmVycmlkZVwiXG4gICAgICApIHtcbiAgICAgICAgaWYgKHVwZGF0ZS50eXBlID09PSBcIndhaXRpbmcgZm9yIHN0YWNrIGFwcHJvdmFsXCIpIHtcbiAgICAgICAgICB0aGlzLmhhbmRsZVVzZXJVcGRhdGU8TXVsdGlTdGFja0FwcHJvdmFsVXBkYXRlLCBTdGFja0FwcHJvdmFsVXBkYXRlPihcbiAgICAgICAgICAgIHVwZGF0ZSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgYXBwcm92ZTogKHVwZGF0ZSkgPT4gdXBkYXRlLmFwcHJvdmUoKSxcbiAgICAgICAgICAgICAgZGlzbWlzczogKHVwZGF0ZSkgPT4ge1xuICAgICAgICAgICAgICAgIHVwZGF0ZS5yZWplY3QoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0b3BBbGxTdGFja3NUaGF0Q2FuTm90UnVuV2l0aG91dCh1cGRhdGUuc3RhY2tOYW1lKTtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgc3RvcDogKHVwZGF0ZSkgPT4ge1xuICAgICAgICAgICAgICAgIHVwZGF0ZS5yZWplY3QoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0b3BBbGxTdGFja3MoKTtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjYixcbiAgICAgICAgICAgIFwid2FpdGluZyBmb3IgYXBwcm92YWxcIixcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2UgaWYgKHVwZGF0ZS50eXBlID09PSBcIndhaXRpbmcgZm9yIHN0YWNrIHNlbnRpbmVsIG92ZXJyaWRlXCIpIHtcbiAgICAgICAgICB0aGlzLmhhbmRsZVVzZXJVcGRhdGU8XG4gICAgICAgICAgICBNdWx0aVN0YWNrU2VudGluZWxPdmVycmlkZVVwZGF0ZSxcbiAgICAgICAgICAgIFN0YWNrU2VudGluZWxPdmVycmlkZVVwZGF0ZVxuICAgICAgICAgID4oXG4gICAgICAgICAgICB1cGRhdGUsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG92ZXJyaWRlOiAodXBkYXRlKSA9PiB7XG4gICAgICAgICAgICAgICAgdXBkYXRlLm92ZXJyaWRlKCk7XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHJlamVjdDogKHVwZGF0ZSkgPT4ge1xuICAgICAgICAgICAgICAgIHVwZGF0ZS5yZWplY3QoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0b3BBbGxTdGFja3NUaGF0Q2FuTm90UnVuV2l0aG91dCh1cGRhdGUuc3RhY2tOYW1lKTtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjYixcbiAgICAgICAgICAgIFwid2FpdGluZyBmb3Igc2VudGluZWwgb3ZlcnJpZGVcIixcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5pb0hhbmRsZXIuYXdhaXRVc2VySW5wdXQoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh0aGlzLmlvSGFuZGxlci5pc1dhaXRpbmdGb3JVc2VySW5wdXQoKSkge1xuICAgICAgICAgIHRoaXMuaW9IYW5kbGVyLnB1c2hFdmVudCh7XG4gICAgICAgICAgICBjYixcbiAgICAgICAgICAgIHZhbHVlOiB1cGRhdGUsXG4gICAgICAgICAgICB0eXBlOiBcInByb2plY3RVcGRhdGVcIixcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjYih1cGRhdGUgYXMgUHJvamVjdFVwZGF0ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcHVibGljIGdldFN0YWNrRXhlY3V0b3IoXG4gICAgc3RhY2s6IFN5bnRoZXNpemVkU3RhY2ssXG4gICAgb3B0czogQXV0b0FwcHJvdmVPcHRpb25zID0ge30sXG4gICkge1xuICAgIGNvbnN0IGVuaGFuY2VMb2dNZXNzYWdlID0gY3JlYXRlRW5oYW5jZUxvZ01lc3NhZ2Uoc3RhY2spO1xuICAgIGNvbnN0IG9uTG9nID0gdGhpcy5pb0hhbmRsZXIuYnVmZmVyV2hpbGVBd2FpdGluZ1VzZXJJbnB1dCh0aGlzLm9uTG9nKTtcbiAgICByZXR1cm4gbmV3IENka3RmU3RhY2soe1xuICAgICAgLi4ub3B0cyxcbiAgICAgIHN0YWNrLFxuICAgICAgb25VcGRhdGU6IHRoaXMuaGFuZGxlVXNlcklucHV0UHJvY2Vzcyh0aGlzLm9uVXBkYXRlKSxcbiAgICAgIG9uTG9nOiBvbkxvZ1xuICAgICAgICA/ICh7IG1lc3NhZ2UgfSkgPT5cbiAgICAgICAgICAgIG9uTG9nKHtcbiAgICAgICAgICAgICAgc3RhY2tOYW1lOiBzdGFjay5uYW1lLFxuICAgICAgICAgICAgICBtZXNzYWdlLFxuICAgICAgICAgICAgICBtZXNzYWdlV2l0aENvbnN0cnVjdFBhdGg6IGVuaGFuY2VMb2dNZXNzYWdlKG1lc3NhZ2UpLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICBhYm9ydFNpZ25hbDogdGhpcy5hYm9ydFNpZ25hbCxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgb3V0cHV0c0J5Q29uc3RydWN0SWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhY2tzVG9SdW4ucmVkdWNlKFxuICAgICAgKGFjYywgc3RhY2spID0+ICh7XG4gICAgICAgIC4uLmFjYyxcbiAgICAgICAgLi4uc3RhY2sub3V0cHV0c0J5Q29uc3RydWN0SWQsXG4gICAgICB9KSxcbiAgICAgIHt9IGFzIE5lc3RlZFRlcnJhZm9ybU91dHB1dHMsXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBzeW50aChub0NvbG9yPzogYm9vbGVhbikge1xuICAgIHRoaXMub25VcGRhdGUoe1xuICAgICAgdHlwZTogXCJzeW50aGVzaXppbmdcIixcbiAgICB9KTtcblxuICAgIGNvbnN0IHN0YWNrcyA9IGF3YWl0IFN5bnRoU3RhY2suc3ludGgoXG4gICAgICB0aGlzLmFib3J0U2lnbmFsIGFzIGFueSxcbiAgICAgIHRoaXMuc3ludGhDb21tYW5kLFxuICAgICAgdGhpcy5vdXREaXIsXG4gICAgICB0aGlzLndvcmtpbmdEaXJlY3RvcnksXG4gICAgICBmYWxzZSxcbiAgICAgIG5vQ29sb3IsXG4gICAgICB0aGlzLnN5bnRoT3JpZ2luLFxuICAgICAgdGhpcy5oY2wsXG4gICAgKTtcblxuICAgIHByaW50QW5ub3RhdGlvbnMoc3RhY2tzKTtcblxuICAgIHRoaXMub25VcGRhdGUoe1xuICAgICAgdHlwZTogXCJzeW50aGVzaXplZFwiLFxuICAgICAgc3RhY2tzLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHN0YWNrcztcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyByZWFkU3ludGhlc2l6ZWRTdGFja3MoKSB7XG4gICAgY29uc3Qgc3RhY2tzID0gYXdhaXQgU3ludGhTdGFjay5yZWFkU3ludGhlc2l6ZWRTdGFja3ModGhpcy5vdXREaXIpO1xuXG4gICAgcHJpbnRBbm5vdGF0aW9ucyhzdGFja3MpO1xuXG4gICAgdGhpcy5vblVwZGF0ZSh7XG4gICAgICB0eXBlOiBcInN5bnRoZXNpemVkXCIsXG4gICAgICBzdGFja3MsXG4gICAgfSk7XG4gICAgcmV0dXJuIHN0YWNrcztcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBkaWZmKG9wdHM6IERpZmZPcHRpb25zID0ge30pIHtcbiAgICBjb25zdCBzdGFja3MgPSBvcHRzLnNraXBTeW50aFxuICAgICAgPyBhd2FpdCB0aGlzLnJlYWRTeW50aGVzaXplZFN0YWNrcygpXG4gICAgICA6IGF3YWl0IHRoaXMuc3ludGgob3B0cy5ub0NvbG9yKTtcbiAgICBjb25zdCBzdGFjayA9IHRoaXMuZ2V0U3RhY2tFeGVjdXRvcihcbiAgICAgIGdldFNpbmdsZVN0YWNrKHN0YWNrcywgb3B0cz8uc3RhY2tOYW1lLCBcImRpZmZcIiksXG4gICAgKTtcbiAgICBhd2FpdCBzdGFjay5pbml0YWxpemVUZXJyYWZvcm0oXG4gICAgICBvcHRzLm5vQ29sb3IsXG4gICAgICBvcHRzLnNraXBQcm92aWRlckxvY2ssXG4gICAgICBvcHRzLm1pZ3JhdGVTdGF0ZSxcbiAgICApO1xuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHN0YWNrLmRpZmYob3B0cyk7XG4gICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICB0aHJvdyBFcnJvcnMuRXh0ZXJuYWwoXG4gICAgICAgIGBTdGFjayBmYWlsZWQgdG8gcGxhbjogJHtzdGFjay5zdGFjay5uYW1lfS4gUGxlYXNlIGNoZWNrIHRoZSBsb2dzIGZvciBtb3JlIGluZm9ybWF0aW9uLmAsXG4gICAgICAgIGUsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoc3RhY2suZXJyb3IpIHtcbiAgICAgIHRocm93IEVycm9ycy5FeHRlcm5hbChcbiAgICAgICAgYFN0YWNrIGZhaWxlZCB0byBwbGFuOiAke3N0YWNrLnN0YWNrLm5hbWV9LiBQbGVhc2UgY2hlY2sgdGhlIGxvZ3MgZm9yIG1vcmUgaW5mb3JtYXRpb24uYCxcbiAgICAgICAgbmV3IEVycm9yKHN0YWNrLmVycm9yKSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMucHJvamVjdFRlbGVtZXRyeShcImRpZmZcIiwge1xuICAgICAgICBzdGFja01ldGFkYXRhOiBzdGFja3MubWFwKChzdGFjaykgPT5cbiAgICAgICAgICBKU09OLnBhcnNlKHN0YWNrLmNvbnRlbnQpW1wiLy9cIl1cbiAgICAgICAgICAgID8gSlNPTi5wYXJzZShzdGFjay5jb250ZW50KVtcIi8vXCJdLm1ldGFkYXRhXG4gICAgICAgICAgICA6IHt9LFxuICAgICAgICApLFxuICAgICAgICBlcnJvcnM6IHN0YWNrLmVycm9yLFxuICAgICAgICByZXF1aXJlZFByb3ZpZGVyczogc3RhY2tzLm1hcCgoc3RhY2s6IGFueSkgPT5cbiAgICAgICAgICBKU09OLnBhcnNlKHN0YWNrLmNvbnRlbnQpW1widGVycmFmb3JtXCJdXG4gICAgICAgICAgICA/IEpTT04ucGFyc2Uoc3RhY2suY29udGVudClbXCJ0ZXJyYWZvcm1cIl0ucmVxdWlyZWRfcHJvdmlkZXJzXG4gICAgICAgICAgICA6IHt9LFxuICAgICAgICApLFxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbG9nZ2VyLmRlYnVnKFwiRmFpbGVkIHRvIHNlbmQgdGVsZW1ldHJ5XCIsIGUpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZXhlY3V0ZShcbiAgICBtZXRob2Q6IFwiZGVwbG95XCIgfCBcImRlc3Ryb3lcIixcbiAgICBuZXh0OiAoKSA9PiBQcm9taXNlPENka3RmU3RhY2sgfCB1bmRlZmluZWQ+LFxuICAgIG9wdHM6IE11dGF0aW9uT3B0aW9ucyxcbiAgKSB7XG4gICAgLy8gV2Ugb25seSBzdXBwb3J0IHJlZnJlc2ggb25seSBvbiBkZXBsb3ksIGEgYml0IG9mIGEgbGVha3kgYWJzdHJhY3Rpb24gaGVyZVxuICAgIGlmIChvcHRzLnJlZnJlc2hPbmx5ICYmIG1ldGhvZCAhPT0gXCJkZXBsb3lcIikge1xuICAgICAgdGhyb3cgRXJyb3JzLkludGVybmFsKGBSZWZyZXNoIG9ubHkgaXMgb25seSBzdXBwb3J0ZWQgb24gZGVwbG95YCk7XG4gICAgfVxuICAgIGNvbnN0IG1heFBhcmFsbGVsUnVucyA9XG4gICAgICAhb3B0cy5wYXJhbGxlbGlzbSB8fCBvcHRzLnBhcmFsbGVsaXNtIDwgMCA/IEluZmluaXR5IDogb3B0cy5wYXJhbGxlbGlzbTtcbiAgICBjb25zdCBhbGxFeGVjdXRpb25zID0gW107XG5cbiAgICBhd2FpdCB0aGlzLmluaXRpYWxpemVTdGFja3NUb1J1bkluU2VyaWFsKFxuICAgICAgb3B0cy5ub0NvbG9yLFxuICAgICAgb3B0cy5za2lwUHJvdmlkZXJMb2NrLFxuICAgICAgb3B0cy5taWdyYXRlU3RhdGUsXG4gICAgKTtcbiAgICB3aGlsZSAodGhpcy5zdGFja3NUb1J1bi5maWx0ZXIoKHN0YWNrKSA9PiBzdGFjay5pc1BlbmRpbmcpLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IHJ1bm5pbmdTdGFja3MgPSB0aGlzLnN0YWNrc1RvUnVuLmZpbHRlcigoc3RhY2spID0+IHN0YWNrLmlzUnVubmluZyk7XG4gICAgICBpZiAocnVubmluZ1N0YWNrcy5sZW5ndGggPj0gbWF4UGFyYWxsZWxSdW5zKSB7XG4gICAgICAgIGF3YWl0IFByb21pc2UucmFjZShydW5uaW5nU3RhY2tzLm1hcCgocykgPT4gcy5jdXJyZW50V29ya1Byb21pc2UpKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBuZXh0UnVubmluZ0V4ZWN1dG9yID0gYXdhaXQgbmV4dCgpO1xuICAgICAgICBpZiAoIW5leHRSdW5uaW5nRXhlY3V0b3IpIHtcbiAgICAgICAgICAvLyBJbiB0aGlzIGNhc2Ugd2UgaGF2ZSBubyBwZW5kaW5nIHN0YWNrcywgYnV0IHdlIGFsc28gY2FuIG5vdCBmaW5kIGEgbmV3IGV4ZWN1dG9yXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcHJvbWlzZSA9XG4gICAgICAgICAgbWV0aG9kID09PSBcImRlcGxveVwiXG4gICAgICAgICAgICA/IG5leHRSdW5uaW5nRXhlY3V0b3IuZGVwbG95KG9wdHMpXG4gICAgICAgICAgICA6IG5leHRSdW5uaW5nRXhlY3V0b3IuZGVzdHJveShvcHRzKTtcblxuICAgICAgICBhbGxFeGVjdXRpb25zLnB1c2gocHJvbWlzZSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8vIGF3YWl0IG5leHQoKSB0aHJldyBhbiBlcnJvciBiZWNhdXNlIGEgc3RhY2sgZmFpbGVkIHRvIGFwcGx5L2Rlc3Ryb3lcbiAgICAgICAgLy8gd2FpdCBmb3IgYWxsIG90aGVyIGN1cnJlbnRseSBydW5uaW5nIHN0YWNrcyB0byBjb21wbGV0ZSBiZWZvcmUgcHJvcGFnYXRpbmcgdGhhdCBlcnJvclxuICAgICAgICBsb2dnZXIuZGVidWcoXCJFbmNvdW50ZXJlZCBhbiBlcnJvciB3aGlsZSBhd2FpdGluZyBzdGFjayB0byBmaW5pc2hcIiwgZSk7XG4gICAgICAgIGNvbnN0IG9wZW5TdGFja3MgPSB0aGlzLnN0YWNrc1RvUnVuLmZpbHRlcihcbiAgICAgICAgICAoZXgpID0+IGV4LmN1cnJlbnRXb3JrUHJvbWlzZSxcbiAgICAgICAgKTtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKFwiV2FpdGluZyBmb3Igc3RpbGwgcnVubmluZyBzdGFja3MgdG8gZmluaXNoOlwiLCBvcGVuU3RhY2tzKTtcbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKG9wZW5TdGFja3MubWFwKChleCkgPT4gZXguY3VycmVudFdvcmtQcm9taXNlKSk7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgICBcIkRvbmUgd2FpdGluZyBmb3Igc3RpbGwgcnVubmluZyBzdGFja3MuIEFsbCBwZW5kaW5nIHdvcmsgZmluaXNoZWRcIixcbiAgICAgICAgKTtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gV2UgZW5kIHRoZSBsb29wIHdoZW4gYWxsIHN0YWNrcyBhcmUgc3RhcnRlZCwgbm93IHdlIG5lZWQgdG8gd2FpdCBmb3IgdGhlbSB0byBiZSBkb25lXG4gICAgLy8gV2Ugd2FpdCBmb3IgYWxsIHdvcmsgdG8gZmluaXNoIGV2ZW4gaWYgb25lIG9mIHRoZSBwcm9taXNlcyB0aHJldyBhbiBlcnJvci5cbiAgICBhd2FpdCBlbnN1cmVBbGxTZXR0bGVkQmVmb3JlVGhyb3dpbmcoXG4gICAgICBQcm9taXNlLmFsbChhbGxFeGVjdXRpb25zKSxcbiAgICAgIGFsbEV4ZWN1dGlvbnMsXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBkZXBsb3kob3B0czogTXV0YXRpb25PcHRpb25zID0ge30pIHtcbiAgICBjb25zdCBzdGFja3MgPSBvcHRzLnNraXBTeW50aFxuICAgICAgPyBhd2FpdCB0aGlzLnJlYWRTeW50aGVzaXplZFN0YWNrcygpXG4gICAgICA6IGF3YWl0IHRoaXMuc3ludGgob3B0cy5ub0NvbG9yKTtcbiAgICBjb25zdCBzdGFja3NUb1J1biA9IGdldE11bHRpcGxlU3RhY2tzKHN0YWNrcywgb3B0cy5zdGFja05hbWVzLCBcImRlcGxveVwiKTtcbiAgICBpZiAoIW9wdHMuaWdub3JlTWlzc2luZ1N0YWNrRGVwZW5kZW5jaWVzKSB7XG4gICAgICBjaGVja0lmQWxsRGVwZW5kZW5jaWVzQXJlSW5jbHVkZWQoc3RhY2tzVG9SdW4pO1xuICAgIH1cblxuICAgIHRoaXMuc3RvcEFsbFN0YWNrc1RoYXRDYW5Ob3RSdW5XaXRob3V0ID0gKHN0YWNrTmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICBmaW5kQWxsTmVzdGVkRGVwZW5kYW50U3RhY2tzKHRoaXMuc3RhY2tzVG9SdW4sIHN0YWNrTmFtZSkuZm9yRWFjaChcbiAgICAgICAgKHN0YWNrKSA9PiBzdGFjay5zdG9wKCksXG4gICAgICApO1xuICAgIH07XG5cbiAgICB0aGlzLnN0YWNrc1RvUnVuID0gc3RhY2tzVG9SdW4ubWFwKChzdGFjaykgPT5cbiAgICAgIHRoaXMuZ2V0U3RhY2tFeGVjdXRvcihzdGFjaywgb3B0cyksXG4gICAgKTtcblxuICAgIGNvbnN0IG5leHQgPSBvcHRzLmlnbm9yZU1pc3NpbmdTdGFja0RlcGVuZGVuY2llc1xuICAgICAgPyAoKSA9PlxuICAgICAgICAgIFByb21pc2UucmVzb2x2ZShcbiAgICAgICAgICAgIHRoaXMuc3RhY2tzVG9SdW4uZmlsdGVyKChzdGFjaykgPT4gc3RhY2suaXNQZW5kaW5nKVswXSxcbiAgICAgICAgICApXG4gICAgICA6ICgpID0+IGdldFN0YWNrV2l0aE5vVW5tZXREZXBlbmRlbmNpZXModGhpcy5zdGFja3NUb1J1bik7XG5cbiAgICBhd2FpdCB0aGlzLmV4ZWN1dGUoXCJkZXBsb3lcIiwgbmV4dCwgb3B0cyk7XG5cbiAgICBjb25zdCB1bnByb2Nlc3NlZFN0YWNrcyA9IHRoaXMuc3RhY2tzVG9SdW4uZmlsdGVyKFxuICAgICAgKGV4ZWN1dG9yKSA9PiBleGVjdXRvci5pc1BlbmRpbmcsXG4gICAgKTtcbiAgICBpZiAodW5wcm9jZXNzZWRTdGFja3MubGVuZ3RoID4gMCkge1xuICAgICAgdGhyb3cgRXJyb3JzLkV4dGVybmFsKFxuICAgICAgICBgU29tZSBzdGFja3MgZmFpbGVkIHRvIGRlcGxveTogJHt1bnByb2Nlc3NlZFN0YWNrc1xuICAgICAgICAgIC5tYXAoKHMpID0+IHMuc3RhY2submFtZSlcbiAgICAgICAgICAuam9pbihcIiwgXCIpfS4gUGxlYXNlIGNoZWNrIHRoZSBsb2dzIGZvciBtb3JlIGluZm9ybWF0aW9uLmAsXG4gICAgICApO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLnByb2plY3RUZWxlbWV0cnkoXCJkZXBsb3lcIiwge1xuICAgICAgICBzdGFja01ldGFkYXRhOiBzdGFja3NUb1J1bi5tYXAoKHN0YWNrKSA9PlxuICAgICAgICAgIEpTT04ucGFyc2Uoc3RhY2suY29udGVudClbXCIvL1wiXVxuICAgICAgICAgICAgPyBKU09OLnBhcnNlKHN0YWNrLmNvbnRlbnQpW1wiLy9cIl0ubWV0YWRhdGFcbiAgICAgICAgICAgIDoge30sXG4gICAgICAgICksXG4gICAgICAgIGZhaWxlZFN0YWNrczogdW5wcm9jZXNzZWRTdGFja3MubWFwKChzdGFjaykgPT4gc3RhY2suZXJyb3IpLFxuICAgICAgICByZXF1aXJlZFByb3ZpZGVyczogc3RhY2tzVG9SdW4ubWFwKChzdGFjazogYW55KSA9PlxuICAgICAgICAgIEpTT04ucGFyc2Uoc3RhY2suY29udGVudClbXCJ0ZXJyYWZvcm1cIl1cbiAgICAgICAgICAgID8gSlNPTi5wYXJzZShzdGFjay5jb250ZW50KVtcInRlcnJhZm9ybVwiXS5yZXF1aXJlZF9wcm92aWRlcnNcbiAgICAgICAgICAgIDoge30sXG4gICAgICAgICksXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2dnZXIuZGVidWcoXCJGYWlsZWQgdG8gc2VuZCB0ZWxlbWV0cnlcIiwgZSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGRlc3Ryb3kob3B0czogTXV0YXRpb25PcHRpb25zID0ge30pIHtcbiAgICBjb25zdCBzdGFja3MgPSBvcHRzLnNraXBTeW50aFxuICAgICAgPyBhd2FpdCB0aGlzLnJlYWRTeW50aGVzaXplZFN0YWNrcygpXG4gICAgICA6IGF3YWl0IHRoaXMuc3ludGgob3B0cy5ub0NvbG9yKTtcbiAgICBjb25zdCBzdGFja3NUb1J1biA9IGdldE11bHRpcGxlU3RhY2tzKHN0YWNrcywgb3B0cy5zdGFja05hbWVzLCBcImRlc3Ryb3lcIik7XG5cbiAgICBpZiAoIW9wdHMuaWdub3JlTWlzc2luZ1N0YWNrRGVwZW5kZW5jaWVzKSB7XG4gICAgICBjaGVja0lmQWxsRGVwZW5kYW50c0FyZUluY2x1ZGVkKHN0YWNrc1RvUnVuLCBzdGFja3MpO1xuICAgIH1cblxuICAgIHRoaXMuc3RvcEFsbFN0YWNrc1RoYXRDYW5Ob3RSdW5XaXRob3V0ID0gKHN0YWNrTmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCBzdGFja0V4ZWN1dG9yID0gdGhpcy5zdGFja3NUb1J1bi5maW5kKFxuICAgICAgICAocykgPT4gcy5zdGFjay5uYW1lID09PSBzdGFja05hbWUsXG4gICAgICApO1xuICAgICAgaWYgKCFzdGFja0V4ZWN1dG9yKSB7XG4gICAgICAgIHRocm93IEVycm9ycy5JbnRlcm5hbChcbiAgICAgICAgICBgQ291bGQgbm90IGZpbmQgc3RhY2sgXCIke3N0YWNrTmFtZX1cIiB0aGF0IHdhcyBzdG9wcGVkYCxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgc3RhY2tFeGVjdXRvci5zdGFjay5kZXBlbmRlbmNpZXMuZm9yRWFjaCgoZGVwZW5kYW50KSA9PiB7XG4gICAgICAgIHRoaXMuc3RvcEFsbFN0YWNrc1RoYXRDYW5Ob3RSdW5XaXRob3V0KGRlcGVuZGFudCk7XG5cbiAgICAgICAgY29uc3QgZGVwZW5kYW50U3RhY2sgPSB0aGlzLnN0YWNrc1RvUnVuLmZpbmQoXG4gICAgICAgICAgKHMpID0+IHMuc3RhY2submFtZSA9PT0gZGVwZW5kYW50LFxuICAgICAgICApO1xuICAgICAgICBpZiAoIWRlcGVuZGFudFN0YWNrKSB7XG4gICAgICAgICAgdGhyb3cgRXJyb3JzLkludGVybmFsKFxuICAgICAgICAgICAgYENvdWxkIG5vdCBmaW5kIHN0YWNrIFwiJHtkZXBlbmRhbnR9XCIgdGhhdCB3YXMgc3RvcHBlZGAsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGRlcGVuZGFudFN0YWNrLnN0b3AoKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgdGhpcy5zdGFja3NUb1J1biA9IHN0YWNrc1RvUnVuLm1hcCgoc3RhY2spID0+XG4gICAgICB0aGlzLmdldFN0YWNrRXhlY3V0b3Ioc3RhY2ssIG9wdHMpLFxuICAgICk7XG4gICAgY29uc3QgbmV4dCA9IG9wdHMuaWdub3JlTWlzc2luZ1N0YWNrRGVwZW5kZW5jaWVzXG4gICAgICA/ICgpID0+XG4gICAgICAgICAgUHJvbWlzZS5yZXNvbHZlKFxuICAgICAgICAgICAgdGhpcy5zdGFja3NUb1J1bi5maWx0ZXIoXG4gICAgICAgICAgICAgIChzdGFjaykgPT4gc3RhY2suY3VycmVudFN0YXRlICE9PSBcImRvbmVcIixcbiAgICAgICAgICAgIClbMF0sXG4gICAgICAgICAgKVxuICAgICAgOiAoKSA9PiBnZXRTdGFja1dpdGhOb1VubWV0RGVwZW5kYW50cyh0aGlzLnN0YWNrc1RvUnVuKTtcblxuICAgIGF3YWl0IHRoaXMuZXhlY3V0ZShcImRlc3Ryb3lcIiwgbmV4dCwgb3B0cyk7XG5cbiAgICBjb25zdCB1bnByb2Nlc3NlZFN0YWNrcyA9IHRoaXMuc3RhY2tzVG9SdW4uZmlsdGVyKFxuICAgICAgKGV4ZWN1dG9yKSA9PiBleGVjdXRvci5pc1BlbmRpbmcsXG4gICAgKTtcbiAgICBpZiAodW5wcm9jZXNzZWRTdGFja3MubGVuZ3RoID4gMCkge1xuICAgICAgdGhyb3cgRXJyb3JzLkV4dGVybmFsKFxuICAgICAgICBgU29tZSBzdGFja3MgZmFpbGVkIHRvIGRlc3Ryb3k6ICR7dW5wcm9jZXNzZWRTdGFja3NcbiAgICAgICAgICAubWFwKChzKSA9PiBzLnN0YWNrLm5hbWUpXG4gICAgICAgICAgLmpvaW4oXCIsIFwiKX0uIFBsZWFzZSBjaGVjayB0aGUgbG9ncyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5gLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5wcm9qZWN0VGVsZW1ldHJ5KFwiZGVzdHJveVwiLCB7XG4gICAgICAgIHN0YWNrTWV0YWRhdGE6IHN0YWNrc1RvUnVuLm1hcCgoc3RhY2spID0+XG4gICAgICAgICAgSlNPTi5wYXJzZShzdGFjay5jb250ZW50KVtcIi8vXCJdXG4gICAgICAgICAgICA/IEpTT04ucGFyc2Uoc3RhY2suY29udGVudClbXCIvL1wiXS5tZXRhZGF0YVxuICAgICAgICAgICAgOiB7fSxcbiAgICAgICAgKSxcbiAgICAgICAgZmFpbGVkU3RhY2tzOiB1bnByb2Nlc3NlZFN0YWNrcy5tYXAoKHN0YWNrKSA9PiBzdGFjay5lcnJvciksXG4gICAgICAgIHJlcXVpcmVkUHJvdmlkZXJzOiBzdGFja3NUb1J1bi5tYXAoKHN0YWNrOiBhbnkpID0+XG4gICAgICAgICAgSlNPTi5wYXJzZShzdGFjay5jb250ZW50KVtcInRlcnJhZm9ybVwiXVxuICAgICAgICAgICAgPyBKU09OLnBhcnNlKHN0YWNrLmNvbnRlbnQpW1widGVycmFmb3JtXCJdLnJlcXVpcmVkX3Byb3ZpZGVyc1xuICAgICAgICAgICAgOiB7fSxcbiAgICAgICAgKSxcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhcIkZhaWxlZCB0byBzZW5kIHRlbGVtZXRyeVwiLCBlKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcHJvamVjdFRlbGVtZXRyeShjb21tYW5kOiBzdHJpbmcsIHBheWxvYWQ6IGFueSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGNvbmZpZyA9IHJlYWRDb25maWdTeW5jKCk7XG4gICAgYXdhaXQgc2VuZFRlbGVtZXRyeShjb21tYW5kLCB7XG4gICAgICAuLi5wYXlsb2FkLFxuICAgICAgbGFuZ3VhZ2U6IGNvbmZpZy5sYW5ndWFnZSxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBmZXRjaE91dHB1dHMob3B0czogRmV0Y2hPdXRwdXRPcHRpb25zKSB7XG4gICAgY29uc3Qgc3RhY2tzID0gb3B0cy5za2lwU3ludGhcbiAgICAgID8gYXdhaXQgdGhpcy5yZWFkU3ludGhlc2l6ZWRTdGFja3MoKVxuICAgICAgOiBhd2FpdCB0aGlzLnN5bnRoKCk7XG5cbiAgICBjb25zdCBzdGFja3NUb1J1biA9IGdldE11bHRpcGxlU3RhY2tzKFxuICAgICAgc3RhY2tzLFxuICAgICAgb3B0cy5zdGFja05hbWVzIHx8IFtdLFxuICAgICAgXCJkZXBsb3lcIixcbiAgICApO1xuXG4gICAgaWYgKHN0YWNrc1RvUnVuLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gc3RhY2tzIHRvIGZldGNoIG91dHB1dHMgZm9yIHNwZWNpZmllZFwiKTtcbiAgICB9XG5cbiAgICB0aGlzLnN0YWNrc1RvUnVuID0gc3RhY2tzVG9SdW4ubWFwKChzdGFjaykgPT5cbiAgICAgIC8vIE9wdGlvbnMgYXJlIGVtcHR5LCBiZWNhdXNlIE11bHRpcGxlU3RhY2tPcHRpb25zIGRvZXNuJ3QgaGF2ZSBhbnkgcmVsZXZhbnRcbiAgICAgIC8vIG9wdGlvbnMgZm9yIGBnZXRTdGFja0V4ZWN1dG9yYCwgaGVuY2UgZGVmYXVsdHMgYXJlIGZpbmVcbiAgICAgIHRoaXMuZ2V0U3RhY2tFeGVjdXRvcihzdGFjaywge30pLFxuICAgICk7XG5cbiAgICBhd2FpdCB0aGlzLmluaXRpYWxpemVTdGFja3NUb1J1bkluU2VyaWFsKHVuZGVmaW5lZCwgb3B0cy5za2lwUHJvdmlkZXJMb2NrKTtcbiAgICBjb25zdCBvdXRwdXRzID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICB0aGlzLnN0YWNrc1RvUnVuLm1hcChhc3luYyAocykgPT4ge1xuICAgICAgICBjb25zdCBvdXRwdXQgPSBhd2FpdCBzLmZldGNoT3V0cHV0cygpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIFtzLnN0YWNrLm5hbWVdOiBvdXRwdXQsXG4gICAgICAgIH07XG4gICAgICB9KSxcbiAgICApO1xuXG4gICAgcmV0dXJuIG91dHB1dHMucmVkdWNlKFxuICAgICAgKGFjYywgY3VycikgPT4gKHsgLi4uYWNjLCAuLi5jdXJyIH0pLFxuICAgICAge30sXG4gICAgKSBhcyBOZXN0ZWRUZXJyYWZvcm1PdXRwdXRzO1xuICB9XG5cbiAgLy8gU2VyaWFsbHkgcnVuIHRlcnJhZm9ybSBpbml0IHRvIHByb2hpYml0IHRleHQgZmlsZSBidXN5IGVycm9ycyBmb3IgdGhlIGNhY2hlIGZpbGVzXG4gIHByaXZhdGUgYXN5bmMgaW5pdGlhbGl6ZVN0YWNrc1RvUnVuSW5TZXJpYWwoXG4gICAgbm9Db2xvcj86IGJvb2xlYW4sXG4gICAgc2tpcFByb3ZpZGVyTG9jaz86IGJvb2xlYW4sXG4gICAgbWlncmF0ZVN0YXRlPzogYm9vbGVhbixcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgZm9yIChjb25zdCBzdGFjayBvZiB0aGlzLnN0YWNrc1RvUnVuKSB7XG4gICAgICBhd2FpdCBzdGFjay5pbml0YWxpemVUZXJyYWZvcm0obm9Db2xvciwgc2tpcFByb3ZpZGVyTG9jaywgbWlncmF0ZVN0YXRlKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -19,25 +19,15 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
19
19
  }) : function(o, v) {
20
20
  o["default"] = v;
21
21
  });
22
- var __importStar = (this && this.__importStar) || (function () {
23
- var ownKeys = function(o) {
24
- ownKeys = Object.getOwnPropertyNames || function (o) {
25
- var ar = [];
26
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
27
- return ar;
28
- };
29
- return ownKeys(o);
30
- };
31
- return function (mod) {
32
- if (mod && mod.__esModule) return mod;
33
- var result = {};
34
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
35
- __setModuleDefault(result, mod);
36
- return result;
37
- };
38
- })();
22
+ var __importStar = (this && this.__importStar) || function (mod) {
23
+ if (mod && mod.__esModule) return mod;
24
+ var result = {};
25
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
26
+ __setModuleDefault(result, mod);
27
+ return result;
28
+ };
39
29
  Object.defineProperty(exports, "__esModule", { value: true });
40
- exports.convertConfigurationFile = convertConfigurationFile;
30
+ exports.convertConfigurationFile = void 0;
41
31
  const hcl2cdk = __importStar(require("@cdktn/hcl2cdk"));
42
32
  const cdktf_config_1 = require("./cdktf-config");
43
33
  const provider_generator_1 = require("@cdktn/provider-generator");
@@ -57,4 +47,5 @@ async function convertConfigurationFile(configuration, stackWorkingDirectory) {
57
47
  });
58
48
  return all;
59
49
  }
60
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udmVydC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvY29udmVydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7OztHQUdHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVlILDREQXVCQztBQWpDRCx3REFBMEM7QUFDMUMsaURBQTZDO0FBQzdDLGtFQUF3RTtBQUN4RSw0REFBb0Q7QUFDcEQsNENBSXdCO0FBRWpCLEtBQUssVUFBVSx3QkFBd0IsQ0FDNUMsYUFBcUIsRUFDckIscUJBQTZCO0lBRTdCLE1BQU0sR0FBRyxHQUFHLDBCQUFXLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUM7SUFDcEQsTUFBTSxPQUFPLEdBQUcsR0FBRyxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQ3hELHVDQUE2QixDQUFDLElBQUksQ0FDaEMsSUFBSSxnREFBMkIsQ0FBQyxVQUFVLENBQUMsRUFDM0MsbUJBQVMsQ0FBQyxDQUFDLENBQUMsQ0FDYixDQUNGLENBQUM7SUFDRixNQUFNLEVBQUUsY0FBYyxFQUFFLEdBQUcsTUFBTSxJQUFBLDRCQUFVLEVBQUMsT0FBTyxDQUFDLENBQUM7SUFDckQsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3BCLE1BQU0sZ0JBQU0sQ0FBQyxRQUFRLENBQUMsaUNBQWlDLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBRUQsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLE1BQU0sT0FBTyxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUU7UUFDbkQsY0FBYztRQUNkLFFBQVEsRUFBRSxHQUFHLENBQUMsUUFBUTtRQUN0QixhQUFhLEVBQUUsc0JBQXNCO0tBQ3RDLENBQUMsQ0FBQztJQUVILE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IChjKSBIYXNoaUNvcnAsIEluYy5cbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNUEwtMi4wXG4gKi9cblxuaW1wb3J0ICogYXMgaGNsMmNkayBmcm9tIFwiQGNka3RuL2hjbDJjZGtcIjtcbmltcG9ydCB7IENka3RmQ29uZmlnIH0gZnJvbSBcIi4vY2RrdGYtY29uZmlnXCI7XG5pbXBvcnQgeyBUZXJyYWZvcm1Qcm92aWRlckNvbnN0cmFpbnQgfSBmcm9tIFwiQGNka3RuL3Byb3ZpZGVyLWdlbmVyYXRvclwiO1xuaW1wb3J0IHsgcmVhZFNjaGVtYSB9IGZyb20gXCJAY2RrdG4vcHJvdmlkZXItc2NoZW1hXCI7XG5pbXBvcnQge1xuICBFcnJvcnMsXG4gIExBTkdVQUdFUyxcbiAgQ29uc3RydWN0c01ha2VyUHJvdmlkZXJUYXJnZXQsXG59IGZyb20gXCJAY2RrdG4vY29tbW9uc1wiO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY29udmVydENvbmZpZ3VyYXRpb25GaWxlKFxuICBjb25maWd1cmF0aW9uOiBzdHJpbmcsXG4gIHN0YWNrV29ya2luZ0RpcmVjdG9yeTogc3RyaW5nLFxuKSB7XG4gIGNvbnN0IGNmZyA9IENka3RmQ29uZmlnLnJlYWQoc3RhY2tXb3JraW5nRGlyZWN0b3J5KTtcbiAgY29uc3QgdGFyZ2V0cyA9IGNmZy50ZXJyYWZvcm1Qcm92aWRlcnMubWFwKChjb25zdHJhaW50KSA9PlxuICAgIENvbnN0cnVjdHNNYWtlclByb3ZpZGVyVGFyZ2V0LmZyb20oXG4gICAgICBuZXcgVGVycmFmb3JtUHJvdmlkZXJDb25zdHJhaW50KGNvbnN0cmFpbnQpLFxuICAgICAgTEFOR1VBR0VTWzBdLFxuICAgICksXG4gICk7XG4gIGNvbnN0IHsgcHJvdmlkZXJTY2hlbWEgfSA9IGF3YWl0IHJlYWRTY2hlbWEodGFyZ2V0cyk7XG4gIGlmICghcHJvdmlkZXJTY2hlbWEpIHtcbiAgICB0aHJvdyBFcnJvcnMuSW50ZXJuYWwoXCJDb3VsZCBub3QgZmV0Y2ggcHJvdmlkZXIgc2NoZW1hXCIpO1xuICB9XG5cbiAgY29uc3QgeyBhbGwgfSA9IGF3YWl0IGhjbDJjZGsuY29udmVydChjb25maWd1cmF0aW9uLCB7XG4gICAgcHJvdmlkZXJTY2hlbWEsXG4gICAgbGFuZ3VhZ2U6IGNmZy5sYW5ndWFnZSxcbiAgICBjb2RlQ29udGFpbmVyOiBcImNvbnN0cnVjdHMuQ29uc3RydWN0XCIsXG4gIH0pO1xuXG4gIHJldHVybiBhbGw7XG59XG4iXX0=
50
+ exports.convertConfigurationFile = convertConfigurationFile;
51
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udmVydC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvY29udmVydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7OztHQUdHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVILHdEQUEwQztBQUMxQyxpREFBNkM7QUFDN0Msa0VBQXdFO0FBQ3hFLDREQUFvRDtBQUNwRCw0Q0FJd0I7QUFFakIsS0FBSyxVQUFVLHdCQUF3QixDQUM1QyxhQUFxQixFQUNyQixxQkFBNkI7SUFFN0IsTUFBTSxHQUFHLEdBQUcsMEJBQVcsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQztJQUNwRCxNQUFNLE9BQU8sR0FBRyxHQUFHLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FDeEQsdUNBQTZCLENBQUMsSUFBSSxDQUNoQyxJQUFJLGdEQUEyQixDQUFDLFVBQVUsQ0FBQyxFQUMzQyxtQkFBUyxDQUFDLENBQUMsQ0FBQyxDQUNiLENBQ0YsQ0FBQztJQUNGLE1BQU0sRUFBRSxjQUFjLEVBQUUsR0FBRyxNQUFNLElBQUEsNEJBQVUsRUFBQyxPQUFPLENBQUMsQ0FBQztJQUNyRCxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDcEIsTUFBTSxnQkFBTSxDQUFDLFFBQVEsQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFRCxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsTUFBTSxPQUFPLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRTtRQUNuRCxjQUFjO1FBQ2QsUUFBUSxFQUFFLEdBQUcsQ0FBQyxRQUFRO1FBQ3RCLGFBQWEsRUFBRSxzQkFBc0I7S0FDdEMsQ0FBQyxDQUFDO0lBRUgsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBdkJELDREQXVCQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IChjKSBIYXNoaUNvcnAsIEluYy5cbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNUEwtMi4wXG4gKi9cblxuaW1wb3J0ICogYXMgaGNsMmNkayBmcm9tIFwiQGNka3RuL2hjbDJjZGtcIjtcbmltcG9ydCB7IENka3RmQ29uZmlnIH0gZnJvbSBcIi4vY2RrdGYtY29uZmlnXCI7XG5pbXBvcnQgeyBUZXJyYWZvcm1Qcm92aWRlckNvbnN0cmFpbnQgfSBmcm9tIFwiQGNka3RuL3Byb3ZpZGVyLWdlbmVyYXRvclwiO1xuaW1wb3J0IHsgcmVhZFNjaGVtYSB9IGZyb20gXCJAY2RrdG4vcHJvdmlkZXItc2NoZW1hXCI7XG5pbXBvcnQge1xuICBFcnJvcnMsXG4gIExBTkdVQUdFUyxcbiAgQ29uc3RydWN0c01ha2VyUHJvdmlkZXJUYXJnZXQsXG59IGZyb20gXCJAY2RrdG4vY29tbW9uc1wiO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY29udmVydENvbmZpZ3VyYXRpb25GaWxlKFxuICBjb25maWd1cmF0aW9uOiBzdHJpbmcsXG4gIHN0YWNrV29ya2luZ0RpcmVjdG9yeTogc3RyaW5nLFxuKSB7XG4gIGNvbnN0IGNmZyA9IENka3RmQ29uZmlnLnJlYWQoc3RhY2tXb3JraW5nRGlyZWN0b3J5KTtcbiAgY29uc3QgdGFyZ2V0cyA9IGNmZy50ZXJyYWZvcm1Qcm92aWRlcnMubWFwKChjb25zdHJhaW50KSA9PlxuICAgIENvbnN0cnVjdHNNYWtlclByb3ZpZGVyVGFyZ2V0LmZyb20oXG4gICAgICBuZXcgVGVycmFmb3JtUHJvdmlkZXJDb25zdHJhaW50KGNvbnN0cmFpbnQpLFxuICAgICAgTEFOR1VBR0VTWzBdLFxuICAgICksXG4gICk7XG4gIGNvbnN0IHsgcHJvdmlkZXJTY2hlbWEgfSA9IGF3YWl0IHJlYWRTY2hlbWEodGFyZ2V0cyk7XG4gIGlmICghcHJvdmlkZXJTY2hlbWEpIHtcbiAgICB0aHJvdyBFcnJvcnMuSW50ZXJuYWwoXCJDb3VsZCBub3QgZmV0Y2ggcHJvdmlkZXIgc2NoZW1hXCIpO1xuICB9XG5cbiAgY29uc3QgeyBhbGwgfSA9IGF3YWl0IGhjbDJjZGsuY29udmVydChjb25maWd1cmF0aW9uLCB7XG4gICAgcHJvdmlkZXJTY2hlbWEsXG4gICAgbGFuZ3VhZ2U6IGNmZy5sYW5ndWFnZSxcbiAgICBjb2RlQ29udGFpbmVyOiBcImNvbnN0cnVjdHMuQ29uc3RydWN0XCIsXG4gIH0pO1xuXG4gIHJldHVybiBhbGw7XG59XG4iXX0=
@@ -1 +1 @@
1
- {"version":3,"file":"dependency-manager.d.ts","sourceRoot":"","sources":["../../../src/lib/dependencies/dependency-manager.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,QAAQ,EAGR,6BAA6B,EAC9B,MAAM,gBAAgB,CAAC;AAkBxB,eAAO,MAAM,gBAAgB,0BAA0B,CAAC;AACxD,eAAO,MAAM,iBAAiB,cAAc,CAAC;AAc7C,qBAAa,kBAAkB;aAYX,OAAO,EAAE,MAAM,GAAG,SAAS;IAX7C;;;OAGG;IACH,SAAgB,MAAM,EAAE,MAAM,CAAC;gBAM7B,MAAM,EAAE,MAAM,EACE,OAAO,EAAE,MAAM,GAAG,SAAS;IAK7C,MAAM,CAAC,eAAe,CACpB,QAAQ,EAAE,MAAM,GAAG,6BAA6B,GAC/C,kBAAkB;IAgBd,uBAAuB,IAAI,OAAO;IAIzC;;;OAGG;IACH,IAAW,SAAS,IAAI,MAAM,CAE7B;IAED;;;OAGG;IACH,IAAW,IAAI,IAAI,MAAM,CAExB;IAED;;;OAGG;IACH,IAAW,QAAQ,IAAI,MAAM,CAE5B;IAED;;;OAGG;IACH,IAAW,cAAc,IAAI,MAAM,CAKlC;IAED;;;;OAIG;IACI,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAOxC,QAAQ;CAGhB;AAED;;GAEG;AACH,qBAAa,iBAAiB;IAI1B,OAAO,CAAC,QAAQ,CAAC,cAAc;IAC/B,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IALnC,OAAO,CAAC,cAAc,CAAiB;gBAGpB,cAAc,EAAE,QAAQ,EACjC,YAAY,EAAE,MAAM,EACX,gBAAgB,EAAE,MAAM;IAQrC,WAAW,CACf,UAAU,EAAE,kBAAkB,GAC7B,OAAO,CAAC;QAAE,kBAAkB,EAAE,OAAO,CAAA;KAAE,CAAC;IAUrC,eAAe,CAAC,UAAU,EAAE,kBAAkB;;;IAkB9C,4BAA4B,CAAC,UAAU,EAAE,kBAAkB;IA2B3D,uBAAuB,CAC3B,UAAU,EAAE,kBAAkB,EAC9B,cAAc,EAAE,MAAM;IAkBlB,mBAAmB,CAAC,UAAU,EAAE,kBAAkB,GAAG,OAAO,CAAC,OAAO,CAAC;YAoC7D,iBAAiB;YAWjB,yBAAyB;IAajC,0BAA0B,CAAC,UAAU,EAAE,kBAAkB;cAwC5C,MAAM;iBAAW,MAAM;;IAhBpC,mBAAmB,CAAC,UAAU,EAAE,kBAAkB,EAAE,MAAM,UAAQ;YAc1D,iCAAiC;IAgCzC,gBAAgB,CAAC,UAAU,EAAE,kBAAkB;IAuBrD;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAU1B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAwB/B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IA2B/B;;;OAGG;IACH,OAAO,CAAC,2BAA2B;IAwCtB,YAAY;;;;;;;;CAoD1B"}
1
+ {"version":3,"file":"dependency-manager.d.ts","sourceRoot":"","sources":["../../../src/lib/dependencies/dependency-manager.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,QAAQ,EAGR,6BAA6B,EAC9B,MAAM,gBAAgB,CAAC;AAkBxB,eAAO,MAAM,gBAAgB,0BAA0B,CAAC;AACxD,eAAO,MAAM,iBAAiB,cAAc,CAAC;AAc7C,qBAAa,kBAAkB;aAYX,OAAO,EAAE,MAAM,GAAG,SAAS;IAX7C;;;OAGG;IACH,SAAgB,MAAM,EAAE,MAAM,CAAC;gBAM7B,MAAM,EAAE,MAAM,EACE,OAAO,EAAE,MAAM,GAAG,SAAS;IAK7C,MAAM,CAAC,eAAe,CACpB,QAAQ,EAAE,MAAM,GAAG,6BAA6B,GAC/C,kBAAkB;IAgBd,uBAAuB,IAAI,OAAO;IAIzC;;;OAGG;IACH,IAAW,SAAS,IAAI,MAAM,CAE7B;IAED;;;OAGG;IACH,IAAW,IAAI,IAAI,MAAM,CAExB;IAED;;;OAGG;IACH,IAAW,QAAQ,IAAI,MAAM,CAE5B;IAED;;;OAGG;IACH,IAAW,cAAc,IAAI,MAAM,CAKlC;IAED;;;;OAIG;IACI,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAOxC,QAAQ;CAGhB;AAED;;GAEG;AACH,qBAAa,iBAAiB;IAI1B,OAAO,CAAC,QAAQ,CAAC,cAAc;IAC/B,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IALnC,OAAO,CAAC,cAAc,CAAiB;gBAGpB,cAAc,EAAE,QAAQ,EACjC,YAAY,EAAE,MAAM,EACX,gBAAgB,EAAE,MAAM;IAQrC,WAAW,CACf,UAAU,EAAE,kBAAkB,GAC7B,OAAO,CAAC;QAAE,kBAAkB,EAAE,OAAO,CAAA;KAAE,CAAC;IAUrC,eAAe,CAAC,UAAU,EAAE,kBAAkB;;;IAkB9C,4BAA4B,CAAC,UAAU,EAAE,kBAAkB;IA2B3D,uBAAuB,CAC3B,UAAU,EAAE,kBAAkB,EAC9B,cAAc,EAAE,MAAM;IAkBlB,mBAAmB,CAAC,UAAU,EAAE,kBAAkB,GAAG,OAAO,CAAC,OAAO,CAAC;YAoC7D,iBAAiB;YAWjB,yBAAyB;IAajC,0BAA0B,CAAC,UAAU,EAAE,kBAAkB;;;;IAwBzD,mBAAmB,CAAC,UAAU,EAAE,kBAAkB,EAAE,MAAM,UAAQ;YAc1D,iCAAiC;IAgCzC,gBAAgB,CAAC,UAAU,EAAE,kBAAkB;IAuBrD;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAU1B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAwB/B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IA2B/B;;;OAGG;IACH,OAAO,CAAC,2BAA2B;IAwCtB,YAAY;;;;;;;;CAoD1B"}
@@ -15,23 +15,13 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
15
15
  }) : function(o, v) {
16
16
  o["default"] = v;
17
17
  });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
35
25
  Object.defineProperty(exports, "__esModule", { value: true });
36
26
  exports.DependencyManager = exports.ProviderConstraint = exports.DEFAULT_NAMESPACE = exports.DEFAULT_HOSTNAME = void 0;
37
27
  // Copyright (c) HashiCorp, Inc
@@ -400,4 +390,4 @@ class DependencyManager {
400
390
  }
401
391
  }
402
392
  exports.DependencyManager = DependencyManager;
403
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwZW5kZW5jeS1tYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9kZXBlbmRlbmNpZXMvZGVwZW5kZW5jeS1tYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLCtCQUErQjtBQUMvQixtQ0FBbUM7QUFDbkMsNENBS3dCO0FBQ3hCLHlDQUFzRDtBQUN0RCxrREFBOEM7QUFDOUMsaUVBQTREO0FBQzVELHVEQUFtRDtBQUNuRCw2REFLOEI7QUFDOUIsaURBQWtEO0FBQ2xELCtEQUFpRTtBQUNqRSwrQ0FBaUM7QUFDakMsd0VBQW1FO0FBQ25FLDhFQUF5RTtBQUV6RSxpRkFBaUY7QUFDcEUsUUFBQSxnQkFBZ0IsR0FBRyx1QkFBdUIsQ0FBQztBQUMzQyxRQUFBLGlCQUFpQixHQUFHLFdBQVcsQ0FBQztBQUM3QyxTQUFTLHVCQUF1QixDQUFDLE1BQWM7SUFDN0Msd0NBQXdDO0lBQ3hDLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUM3QyxRQUFRLE9BQU8sRUFBRSxDQUFDO1FBQ2hCLEtBQUssQ0FBQztZQUNKLE9BQU8sR0FBRyx3QkFBZ0IsSUFBSSx5QkFBaUIsSUFBSSxNQUFNLEVBQUUsQ0FBQztRQUM5RCxLQUFLLENBQUM7WUFDSixPQUFPLEdBQUcsd0JBQWdCLElBQUksTUFBTSxFQUFFLENBQUM7UUFDekM7WUFDRSxPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDO0FBQ0gsQ0FBQztBQUVELE1BQWEsa0JBQWtCO0lBTzdCLG1FQUFtRTtJQUNuRSxzRUFBc0U7SUFDdEUsNEdBQTRHO0lBQzVHLFlBQ0UsTUFBYyxFQUNFLE9BQTJCO1FBQTNCLFlBQU8sR0FBUCxPQUFPLENBQW9CO1FBRTNDLElBQUksQ0FBQyxNQUFNLEdBQUcsdUJBQXVCLENBQUMs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TSxPQUFPLENBQUMsR0FBRyxDQUMxQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLG1CQUFtQixFQUFFLEVBQUU7WUFDckQsTUFBTSxVQUFVLEdBQ2Qsa0JBQWtCLENBQUMsZUFBZSxDQUFDLG1CQUFtQixDQUFDLENBQUM7WUFDMUQsTUFBTSxPQUFPLEdBQUcsTUFBTSxhQUFhLENBQUMsa0JBQWtCLENBQ3BELFVBQVUsQ0FBQyxjQUFjLENBQzFCLENBQUM7WUFDRixNQUFNLGVBQWUsR0FBRyxNQUFNLFdBQVcsQ0FBQyxxQkFBcUIsQ0FDN0QsVUFBVSxDQUFDLGNBQWMsQ0FDMUIsQ0FBQztZQUVGLE9BQU87Z0JBQ0wsWUFBWSxFQUFFLFVBQVUsQ0FBQyxjQUFjO2dCQUN2QyxrQkFBa0IsRUFBRSxlQUFlLElBQUksVUFBVSxDQUFDLE9BQU87Z0JBQ3pELGVBQWUsRUFBRSxPQUFPO2FBQ3pCLENBQUM7UUFDSixDQUFDLENBQUMsQ0FDSCxDQUFDO1FBRUYsT0FBTztZQUNMLEtBQUssRUFBRSxrQkFBa0I7WUFDekIsUUFBUSxFQUFFLHFCQUFxQjtTQUNoQyxDQUFDO0lBQ0osQ0FBQztDQUNGO0FBMVpELDhDQTBaQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgSGFzaGlDb3JwLCBJbmNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNUEwtMi4wXG5pbXBvcnQge1xuICBMYW5ndWFnZSxcbiAgRXJyb3JzLFxuICBsb2dnZXIsXG4gIFRlcnJhZm9ybURlcGVuZGVuY3lDb25zdHJhaW50LFxufSBmcm9tIFwiQGNka3RuL2NvbW1vbnNcIjtcbmltcG9ydCB7IHRvUGFzY2FsQ2FzZSwgdG9TbmFrZUNhc2UgfSBmcm9tIFwiY29kZW1ha2VyXCI7XG5pbXBvcnQgeyBDZGt0ZkNvbmZpZyB9IGZyb20gXCIuLi9jZGt0Zi1jb25maWdcIjtcbmltcG9ydCB7IENka3RmQ29uZmlnTWFuYWdlciB9IGZyb20gXCIuL2Nka3RmLWNvbmZpZy1tYW5hZ2VyXCI7XG5pbXBvcnQgeyBQYWNrYWdlTWFuYWdlciB9IGZyb20gXCIuL3BhY2thZ2UtbWFuYWdlclwiO1xuaW1wb3J0IHtcbiAgZ2V0TnBtUGFja2FnZU5hbWUsXG4gIGdldFByZWJ1aWx0UHJvdmlkZXJSZXBvc2l0b3J5TmFtZSxcbiAgZ2V0UHJlYnVpbHRQcm92aWRlclZlcnNpb25JbmZvcm1hdGlvbixcbiAgZ2V0UHJlYnVpbHRQcm92aWRlclZlcnNpb25zLFxufSBmcm9tIFwiLi9wcmVidWlsdC1wcm92aWRlcnNcIjtcbmltcG9ydCB7IGdldExhdGVzdFZlcnNpb24gfSBmcm9tIFwiLi9yZWdpc3RyeS1hcGlcIjtcbmltcG9ydCB7IHZlcnNpb25NYXRjaGVzQ29uc3RyYWludCB9IGZyb20gXCIuL3ZlcnNpb24tY29uc3RyYWludHNcIjtcbmltcG9ydCAqIGFzIHNlbXZlciBmcm9tIFwic2VtdmVyXCI7XG5pbXBvcnQgeyBMb2NhbFByb3ZpZGVyVmVyc2lvbnMgfSBmcm9tIFwiLi4vbG9jYWwtcHJvdmlkZXItdmVyc2lvbnNcIjtcbmltcG9ydCB7IExvY2FsUHJvdmlkZXJDb25zdHJhaW50cyB9IGZyb20gXCIuLi9sb2NhbC1wcm92aWRlci1jb25zdHJhaW50c1wiO1xuXG4vLyByZWY6IGh0dHBzOi8vd3d3LnRlcnJhZm9ybS5pby9sYW5ndWFnZS9wcm92aWRlcnMvcmVxdWlyZW1lbnRzI3NvdXJjZS1hZGRyZXNzZXNcbmV4cG9ydCBjb25zdCBERUZBVUxUX0hPU1ROQU1FID0gXCJyZWdpc3RyeS50ZXJyYWZvcm0uaW9cIjtcbmV4cG9ydCBjb25zdCBERUZBVUxUX05BTUVTUEFDRSA9IFwiaGFzaGljb3JwXCI7XG5mdW5jdGlvbiBub3JtYWxpemVQcm92aWRlclNvdXJjZShzb3VyY2U6IHN0cmluZykge1xuICAvLyByZXR1cm5zIDxIT1NUTkFNRT4vPE5BTUVTUEFDRT4vPFRZUEU+XG4gIGNvbnN0IHNsYXNoZXMgPSBzb3VyY2Uuc3BsaXQoXCIvXCIpLmxlbmd0aCAtIDE7XG4gIHN3aXRjaCAoc2xhc2hlcykge1xuICAgIGNhc2UgMDpcbiAgICAgIHJldHVybiBgJHtERUZBVUxUX0hPU1ROQU1FfS8ke0RFRkFVTFRfTkFNRVNQQUNFfS8ke3NvdXJjZX1gO1xuICAgIGNhc2UgMTpcbiAgICAgIHJldHVybiBgJHtERUZBVUxUX0hPU1ROQU1FfS8ke3NvdXJjZX1gO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gc291cmNlO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBQcm92aWRlckNvbnN0cmFpbnQge1xuICAvKipcbiAgICogbm9ybWFsaXplZCBzb3VyY2Ugb2YgdGhlIHByb3ZpZGVyXG4gICAqIGUuZy4gXCJyZWdpc3RyeS50ZXJyYWZvcm0uaW8vaGFzaGljb3JwL2F3c1wiXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgc291cmNlOiBzdHJpbmc7XG5cbiAgLy8gVE9ETzogYWRkIGV4YW1wbGVzIHRvIGNsaSBjb21tYW5kIGRlc2NyaXB0aW9uIChpLmUuID0sfj4uPiBldGMuKVxuICAvLyBpZiBubyB2ZXJzaW9uIGNvbnN0cmFpbnQgaXMgc3BlY2lmaWVkLCB3ZSBhc3N1bWUgdGhlIGxhdGVzdCB2ZXJzaW9uXG4gIC8vIGlmIHNwZWNpZmljIHZlcnNpb24gaXMgc3BlY2lmaWVkIHdpdGhvdXQgZS5nLiA9LCB3ZSBhbGxvdyBwYXRjaCBsZXZlbCBpbmNyZW1lbnRzIChlLmcuIH4+Mi4xMiBmb3IgXCIyLjEyXCIpXG4gIGNvbnN0cnVjdG9yKFxuICAgIHNvdXJjZTogc3RyaW5nLFxuICAgIHB1YmxpYyByZWFkb25seSB2ZXJzaW9uOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICkge1xuICAgIHRoaXMuc291cmNlID0gbm9ybWFsaXplUHJvdmlkZXJTb3VyY2Uoc291cmNlKTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tQ29uZmlnRW50cnkoXG4gICAgcHJvdmlkZXI6IHN0cmluZyB8IFRlcnJhZm9ybURlcGVuZGVuY3lDb25zdHJhaW50LFxuICApOiBQcm92aWRlckNvbnN0cmFpbnQge1xuICAgIGlmICh0eXBlb2YgcHJvdmlkZXIgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIGNvbnN0IFtzcmMsIHZlcnNpb25dID0gcHJvdmlkZXIuc3BsaXQoXCJAXCIpO1xuICAgICAgcmV0dXJuIG5ldyBQcm92aWRlckNvbnN0cmFpbnQoXG4gICAgICAgIHNyYy50cmltKCksXG4gICAgICAgIHZlcnNpb24gPyB2ZXJzaW9uLnRyaW0oKSA6IHVuZGVmaW5lZCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3Qgc3JjID1cbiAgICAgIChwcm92aWRlci5uYW1lc3BhY2UgPyBgJHtwcm92aWRlci5uYW1lc3BhY2V9L2AgOiBcIlwiKSArXG4gICAgICAocHJvdmlkZXIuc291cmNlIHx8IHByb3ZpZGVyLm5hbWUpO1xuXG4gICAgcmV0dXJuIG5ldyBQcm92aWRlckNvbnN0cmFpbnQoc3JjLCBwcm92aWRlci52ZXJzaW9uKTtcbiAgfVxuXG4gIHB1YmxpYyBpc0Zyb21UZXJyYWZvcm1SZWdpc3RyeSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5ob3N0bmFtZSA9PT0gREVGQVVMVF9IT1NUTkFNRTtcbiAgfVxuXG4gIC8qKlxuICAgKiB0aGUgbmFtZXNwYWNlIG9mIHRoZSBwcm92aWRlclxuICAgKiBlLmcuIFwiaGFzaGljb3JwXCIgb3IgXCJrcmV1endlcmtlclwiXG4gICAqL1xuICBwdWJsaWMgZ2V0IG5hbWVzcGFjZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnNvdXJjZS5zcGxpdChcIi9cIilbMV07XG4gIH1cblxuICAvKipcbiAgICogdGhlIG5hbWUgb2YgdGhlIHByb3ZpZGVyXG4gICAqIGUuZy4gXCJhd3NcIlxuICAgKi9cbiAgcHVibGljIGdldCBuYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuc291cmNlLnNwbGl0KFwiL1wiKVsyXTtcbiAgfVxuXG4gIC8qKlxuICAgKiB0aGUgaG9zdG5hbWUgb2YgdGhlIHByb3ZpZGVyXG4gICAqIGUuZy4gXCJyZWdpc3RyeS50ZXJyYWZvcm0uaW9cIlxuICAgKi9cbiAgcHVibGljIGdldCBob3N0bmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnNvdXJjZS5zcGxpdChcIi9cIilbMF07XG4gIH1cblxuICAvKipcbiAgICogcmV0dXJucyBhIHNpbXBsaWZpZWQgcHJvdmlkZXIgbmFtZSwgZHJvcHBpbmcgbmFtZXNwYWNlIGFuZCBob3N0bmFtZVxuICAgKiBpZiB0aGV5IG1hdGNoIHRoZSBkZWZhdWx0c1xuICAgKi9cbiAgcHVibGljIGdldCBzaW1wbGlmaWVkTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnNvdXJjZVxuICAgICAgLnNwbGl0KFwiL1wiKVxuICAgICAgLmZpbHRlcigocGFydCkgPT4gcGFydCAhPT0gREVGQVVMVF9IT1NUTkFNRSAmJiBwYXJ0ICE9PSBERUZBVUxUX05BTUVTUEFDRSlcbiAgICAgIC5qb2luKFwiL1wiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBjaGVja3MgaWYgdGhlIHZlcnNpb24gY29uc3RyYWludCBtYXRjaGVzIHRoZSBnaXZlbiB2ZXJzaW9uXG4gICAqIEBwYXJhbSB2ZXJzaW9uIGFuIGFjdHVhbCB2ZXJzaW9uIChlLmcuIFwiNC4xMi4xXCIpXG4gICAqIEByZXR1cm5zIHRydWUgaWYgdGhlIHZlcnNpb24gaXMgY29tcGF0aWJsZSB3aXRoIHRoZSBjb25zdHJhaW50XG4gICAqL1xuICBwdWJsaWMgbWF0Y2hlc1ZlcnNpb24odmVyc2lvbjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMudmVyc2lvbikge1xuICAgICAgcmV0dXJuIHZlcnNpb25NYXRjaGVzQ29uc3RyYWludCh2ZXJzaW9uLCB0aGlzLnZlcnNpb24pO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHB1YmxpYyB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gYCR7dGhpcy5zb3VyY2V9JHt0aGlzLnZlcnNpb24gPyBgQCR7dGhpcy52ZXJzaW9ufWAgOiBcIlwifWA7XG4gIH1cbn1cblxuLyoqXG4gKiBtYW5hZ2VzIGRlcGVuZGVuY2llcyBvZiBhIENES1ROIHByb2plY3QgKGUuZy4gdGVycmFmb3JtIHByb3ZpZGVycylcbiAqL1xuZXhwb3J0IGNsYXNzIERlcGVuZGVuY3lNYW5hZ2VyIHtcbiAgcHJpdmF0ZSBwYWNrYWdlTWFuYWdlcjogUGFja2FnZU1hbmFnZXI7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSB0YXJnZXRMYW5ndWFnZTogTGFuZ3VhZ2UsXG4gICAgcHJpdmF0ZSBjZGt0ZlZlcnNpb246IHN0cmluZyxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHByb2plY3REaXJlY3Rvcnk6IHN0cmluZyxcbiAgKSB7XG4gICAgdGhpcy5wYWNrYWdlTWFuYWdlciA9IFBhY2thZ2VNYW5hZ2VyLmZvckxhbmd1YWdlKFxuICAgICAgdGFyZ2V0TGFuZ3VhZ2UsXG4gICAgICB0aGlzLnByb2plY3REaXJlY3RvcnksXG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIGFkZFByb3ZpZGVyKFxuICAgIGNvbnN0cmFpbnQ6IFByb3ZpZGVyQ29uc3RyYWludCxcbiAgKTogUHJvbWlzZTx7IGFkZGVkTG9jYWxQcm92aWRlcjogYm9vbGVhbiB9PiB7XG4gICAgaWYgKGF3YWl0IHRoaXMuaGFzUHJlYnVpbHRQcm92aWRlcihjb25zdHJhaW50KSkge1xuICAgICAgYXdhaXQgdGhpcy5hZGRQcmVidWlsdFByb3ZpZGVyKGNvbnN0cmFpbnQpO1xuICAgICAgcmV0dXJuIHsgYWRkZWRMb2NhbFByb3ZpZGVyOiBmYWxzZSB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCB0aGlzLmFkZExvY2FsUHJvdmlkZXIoY29uc3RyYWludCk7XG4gICAgICByZXR1cm4geyBhZGRlZExvY2FsUHJvdmlkZXI6IHRydWUgfTtcbiAgICB9XG4gIH1cblxuICBhc3luYyB1cGdyYWRlUHJvdmlkZXIoY29uc3RyYWludDogUHJvdmlkZXJDb25zdHJhaW50KSB7XG4gICAgY29uc29sZS5sb2coYFVwZ3JhZGluZyAke2NvbnN0cmFpbnQuc2ltcGxpZmllZE5hbWV9Li4uYCk7XG4gICAgY29uc3QgY2RrdGZKc29uID0gbmV3IENka3RmQ29uZmlnTWFuYWdlcigpO1xuICAgIGNvbnN0IHByZWJ1aWx0VmVyc2lvbiA9IGF3YWl0IHRoaXMuZ2V0Q3VycmVudGx5SW5zdGFsbGVkVmVyc2lvbihjb25zdHJhaW50KTtcbiAgICBpZiAocHJlYnVpbHRWZXJzaW9uKSB7XG4gICAgICBhd2FpdCB0aGlzLnVwZ3JhZGVQcmVidWlsdFByb3ZpZGVyKGNvbnN0cmFpbnQsIHByZWJ1aWx0VmVyc2lvbik7XG4gICAgICByZXR1cm4geyBhZGRlZExvY2FsUHJvdmlkZXI6IGZhbHNlIH07XG4gICAgfVxuICAgIGlmIChhd2FpdCBjZGt0Zkpzb24uaGFzUHJvdmlkZXIoY29uc3RyYWludCkpIHtcbiAgICAgIGF3YWl0IGNka3RmSnNvbi51cGRhdGVQcm92aWRlcihjb25zdHJhaW50KTtcbiAgICAgIHJldHVybiB7IGFkZGVkTG9jYWxQcm92aWRlcjogdHJ1ZSB9O1xuICAgIH1cblxuICAgIHRocm93IEVycm9ycy5Vc2FnZShcbiAgICAgIGBUcnlpbmcgdG8gdXBncmFkZSAke2NvbnN0cmFpbnQuc2ltcGxpZmllZE5hbWV9IGJ1dCBpdCBpcyBub3QgaW5zdGFsbGVkLCBwbGVhc2UgdXNlIFwiY2RrdG4gcHJvdmlkZXIgYWRkICR7Y29uc3RyYWludC5zaW1wbGlmaWVkTmFtZX1cIiB0byBhZGQgaXQuYCxcbiAgICApO1xuICB9XG5cbiAgYXN5bmMgZ2V0Q3VycmVudGx5SW5zdGFsbGVkVmVyc2lvbihjb25zdHJhaW50OiBQcm92aWRlckNvbnN0cmFpbnQpIHtcbiAgICBsb2dnZXIuaW5mbyhgQ2hlY2tpbmcgaWYgJHtjb25zdHJhaW50LnNpbXBsaWZpZWROYW1lfSBpcyBpbnN0YWxsZWQuLi5gKTtcbiAgICBjb25zdCBjZGt0ZlBhY2thZ2VOYW1lID0gYXdhaXQgdGhpcy50cnlHZXRQYWNrYWdlTmFtZShjb25zdHJhaW50LCBmYWxzZSk7XG4gICAgY29uc3QgY2RrdG5QYWNrYWdlTmFtZSA9IGF3YWl0IHRoaXMudHJ5R2V0UGFja2FnZU5hbWUoY29uc3RyYWludCwgdHJ1ZSk7XG5cbiAgICBpZiAoIWNka3RmUGFja2FnZU5hbWUgJiYgIWNka3RuUGFja2FnZU5hbWUpIHJldHVybjsgLy8gbm90IGF2YWlsYWJsZSBhcyBwcmUtYnVpbHQgcHJvdmlkZXIsIHNvIGNhbid0IGJlIGluc3RhbGxlZCBhcyBzdWNoXG5cbiAgICBsb2dnZXIuZGVidWcoXG4gICAgICBgRXhwZWN0aW5nIHBhY2thZ2UgJHtjZGt0ZlBhY2thZ2VOYW1lfSBvciAke2Nka3RuUGFja2FnZU5hbWV9IHRvIGJlIGluc3RhbGxlZCBpZiBwcm92aWRlciBpcyBpbnN0YWxsZWQgYXMgcHJlLWJ1aWx0IG9uZWAsXG4gICAgKTtcblxuICAgIGxldCBpbnN0YWxsZWRQYWNrYWdlcztcbiAgICB0cnkge1xuICAgICAgaW5zdGFsbGVkUGFja2FnZXMgPSBhd2FpdCB0aGlzLnBhY2thZ2VNYW5hZ2VyLmxpc3RQcm92aWRlclBhY2thZ2VzKCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gbGlzdCBwYWNrYWdlczogJHtlfWApO1xuICAgIH1cblxuICAgIGxvZ2dlci5kZWJ1ZyhcbiAgICAgIGBJbnN0YWxsZWQgcGFja2FnZXMgZm91bmQ6ICR7SlNPTi5zdHJpbmdpZnkoaW5zdGFsbGVkUGFja2FnZXMsIG51bGwsIDIpfWAsXG4gICAgKTtcblxuICAgIHJldHVybiBpbnN0YWxsZWRQYWNrYWdlcy5maW5kKFxuICAgICAgKHBrZykgPT4gcGtnLm5hbWUgPT09IGNka3RmUGFja2FnZU5hbWUgfHwgcGtnLm5hbWUgPT09IGNka3RuUGFja2FnZU5hbWUsXG4gICAgKT8udmVyc2lvbjtcbiAgfVxuXG4gIGFzeW5jIHVwZ3JhZGVQcmVidWlsdFByb3ZpZGVyKFxuICAgIGNvbnN0cmFpbnQ6IFByb3ZpZGVyQ29uc3RyYWludCxcbiAgICBjdXJyZW50VmVyc2lvbjogc3RyaW5nLFxuICApIHtcbiAgICBsb2dnZXIuZGVidWcoXG4gICAgICBgU2VhcmNoaW5nIGZvciBsYXRlc3QgbWF0Y2hpbmcgdmVyc2lvbiBvZiAke2NvbnN0cmFpbnQuc2ltcGxpZmllZE5hbWV9YCxcbiAgICApO1xuXG4gICAgY29uc3QgeyBuYW1lLCB2ZXJzaW9uIH0gPSBhd2FpdCB0aGlzLmdldE1hdGNoaW5nUHJvdmlkZXJWZXJzaW9uKGNvbnN0cmFpbnQpO1xuXG4gICAgbG9nZ2VyLmRlYnVnKGBGb3VuZCBwYWNrYWdlICR7bmFtZX1AJHt2ZXJzaW9ufWApO1xuICAgIGlmICh2ZXJzaW9uICE9PSBjdXJyZW50VmVyc2lvbikge1xuICAgICAgYXdhaXQgdGhpcy5wYWNrYWdlTWFuYWdlci5hZGRQYWNrYWdlKG5hbWUsIHZlcnNpb24pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgYFRoZSBsYXRlc3QgdmVyc2lvbiBvZiAke25hbWV9IGlzIGFscmVhZHkgaW5zdGFsbGVkOiAke3ZlcnNpb259YCxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgaGFzUHJlYnVpbHRQcm92aWRlcihjb25zdHJhaW50OiBQcm92aWRlckNvbnN0cmFpbnQpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBsb2dnZXIuZGVidWcoXG4gICAgICBgZGV0ZXJtaW5pbmcgd2hldGhlciBwcmUtYnVpbHQgcHJvdmlkZXIgZXhpc3RzIGZvciAke2NvbnN0cmFpbnQuc291cmNlfSB3aXRoIHZlcnNpb24gY29uc3RyYWludCAke2NvbnN0cmFpbnQudmVyc2lvbn0gYW5kIGNka3RmIHZlcnNpb24gJHt0aGlzLmNka3RmVmVyc2lvbn1gLFxuICAgICk7XG5cbiAgICBsb2dnZXIuaW5mbyhgQ2hlY2tpbmcgd2hldGhlciBwcmUtYnVpbHQgcHJvdmlkZXIgZXhpc3RzIGZvciB0aGUgZm9sbG93aW5nIGNvbnN0cmFpbnRzOlxuICBwcm92aWRlcjogJHtjb25zdHJhaW50LnNpbXBsaWZpZWROYW1lfVxuICB2ZXJzaW9uIDogJHtjb25zdHJhaW50LnZlcnNpb24gfHwgXCJsYXRlc3RcIn1cbiAgbGFuZ3VhZ2U6ICR7dGhpcy50YXJnZXRMYW5ndWFnZX1cbiAgY2RrdGYgICA6ICR7dGhpcy5jZGt0ZlZlcnNpb259XG5gKTtcblxuICAgIGlmIChcbiAgICAgIHRoaXMudGFyZ2V0TGFuZ3VhZ2UgPT09IExhbmd1YWdlLkdPICYmXG4gICAgICBzZW12ZXIubHQodGhpcy5jZGt0ZlZlcnNpb24sIFwiMC4xMi4wXCIpXG4gICAgKSB7XG4gICAgICBsb2dnZXIuaW5mbyhcbiAgICAgICAgYEJlZm9yZSBDREtURiAwLjEyLjAgdGhlcmUgd2VyZSBubyBwcmUtYnVpbHQgcHJvdmlkZXJzIHB1Ymxpc2hlZCBmb3IgR28uYCxcbiAgICAgICk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgdiA9IGF3YWl0IGdldFByZWJ1aWx0UHJvdmlkZXJWZXJzaW9ucyhjb25zdHJhaW50LCB0aGlzLmNka3RmVmVyc2lvbik7XG4gICAgY29uc3QgZXhpc3RzID0gdiAhPT0gbnVsbDtcblxuICAgIGlmIChleGlzdHMpIHtcbiAgICAgIGxvZ2dlci5pbmZvKGBGb3VuZCBwcmUtYnVpbHQgcHJvdmlkZXIuYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvZ2dlci5pbmZvKFxuICAgICAgICBgUHJlLWJ1aWx0IHByb3ZpZGVyIGRvZXMgbm90IGV4aXN0IGZvciB0aGUgZ2l2ZW4gY29uc3RyYWludHMuYCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGV4aXN0cztcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgdHJ5R2V0UGFja2FnZU5hbWUoXG4gICAgY29uc3RyYWludDogUHJvdmlkZXJDb25zdHJhaW50LFxuICAgIHVzZUNka3RuOiBib29sZWFuLFxuICApOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICAgIGNvbnN0IG5wbVBhY2thZ2VOYW1lID0gYXdhaXQgZ2V0TnBtUGFja2FnZU5hbWUoY29uc3RyYWludCwgdXNlQ2RrdG4pO1xuXG4gICAgaWYgKCFucG1QYWNrYWdlTmFtZSkgcmV0dXJuO1xuXG4gICAgcmV0dXJuIHRoaXMudHJ5R2V0TGFuZ3VhZ2VQYWNrYWdlTmFtZShucG1QYWNrYWdlTmFtZSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHRyeUdldExhbmd1YWdlUGFja2FnZU5hbWUoXG4gICAgbnBtUGFja2FnZU5hbWU6IHN0cmluZyxcbiAgKTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcbiAgICBjb25zdCBwcmVidWlsdFByb3ZpZGVyUmVwb3NpdG9yeSA9XG4gICAgICBhd2FpdCBnZXRQcmVidWlsdFByb3ZpZGVyUmVwb3NpdG9yeU5hbWUobnBtUGFja2FnZU5hbWUpO1xuXG4gICAgcmV0dXJuIHRoaXMuY29udmVydFBhY2thZ2VOYW1lKFxuICAgICAgbnBtUGFja2FnZU5hbWUsXG4gICAgICBwcmVidWlsdFByb3ZpZGVyUmVwb3NpdG9yeSxcbiAgICAgIG5wbVBhY2thZ2VOYW1lLnN0YXJ0c1dpdGgoXCJAY2RrdG5cIiksXG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIGdldE1hdGNoaW5nUHJvdmlkZXJWZXJzaW9uKGNvbnN0cmFpbnQ6IFByb3ZpZGVyQ29uc3RyYWludCkge1xuICAgIGNvbnN0IHByZWJ1aWx0UHJvdmlkZXJOcG1WZXJzaW9ucyA9IGF3YWl0IGdldFByZWJ1aWx0UHJvdmlkZXJWZXJzaW9ucyhcbiAgICAgIGNvbnN0cmFpbnQsXG4gICAgICB0aGlzLmNka3RmVmVyc2lvbixcbiAgICApO1xuICAgIGlmICghcHJlYnVpbHRQcm92aWRlck5wbVZlcnNpb25zKSB7XG4gICAgICB0aHJvdyBFcnJvcnMuVXNhZ2UoXG4gICAgICAgIGBObyBwcmUtYnVpbHQgcHJvdmlkZXIgZm91bmQgZm9yICR7Y29uc3RyYWludC5zb3VyY2V9IHdpdGggdmVyc2lvbiBjb25zdHJhaW50ICR7Y29uc3RyYWludC52ZXJzaW9ufSBhbmQgY2RrdGYgdmVyc2lvbiAke3RoaXMuY2RrdGZWZXJzaW9ufWAsXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IHBhY2thZ2VWZXJzaW9uID0gYXdhaXQgdGhpcy5nZXRMYW5ndWFnZVNwZWNpZmljUGFja2FnZVZlcnNpb24oXG4gICAgICBwcmVidWlsdFByb3ZpZGVyTnBtVmVyc2lvbnMsXG4gICAgKTtcblxuICAgIGlmICghcGFja2FnZVZlcnNpb24pIHtcbiAgICAgIHRocm93IEVycm9ycy5Vc2FnZShcbiAgICAgICAgYE5vIHByZS1idWlsdCBwcm92aWRlciBmb3VuZCBmb3IgJHtjb25zdHJhaW50LnNvdXJjZX0gd2l0aCB2ZXJzaW9uIGNvbnN0cmFpbnQgJHtjb25zdHJhaW50LnZlcnNpb259IGFuZCBjZGt0ZiB2ZXJzaW9uICR7dGhpcy5jZGt0ZlZlcnNpb259IGZvciBsYW5ndWFnZSAke3RoaXMudGFyZ2V0TGFuZ3VhZ2V9LmAsXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBwYWNrYWdlVmVyc2lvbjtcbiAgfVxuXG4gIGFzeW5jIGFkZFByZWJ1aWx0UHJvdmlkZXIoY29uc3RyYWludDogUHJvdmlkZXJDb25zdHJhaW50LCBzaWxlbnQgPSBmYWxzZSkge1xuICAgIGxvZ2dlci5kZWJ1ZyhcbiAgICAgIGBhZGRpbmcgcHJlLWJ1aWx0IHByb3ZpZGVyICR7Y29uc3RyYWludC5zb3VyY2V9IHdpdGggdmVyc2lvbiBjb25zdHJhaW50ICR7Y29uc3RyYWludC52ZXJzaW9ufSBmb3IgY2RrdGYgdmVyc2lvbiAke3RoaXMuY2RrdGZWZXJzaW9ufWAsXG4gICAgKTtcblxuICAgIGNvbnN0IHsgbmFtZSwgdmVyc2lvbiB9ID0gYXdhaXQgdGhpcy5nZXRNYXRjaGluZ1Byb3ZpZGVyVmVyc2lvbihjb25zdHJhaW50KTtcbiAgICBhd2FpdCB0aGlzLnBhY2thZ2VNYW5hZ2VyLmFkZFBhY2thZ2UobmFtZSwgdmVyc2lvbiwgc2lsZW50KTtcblxuICAgIC8vIFRPRE86IG1vcmUgZGVidWcgbG9nc1xuICB9XG5cbiAgLy8gVGhlIHZlcnNpb24gd2UgdXNlIGZvciBucG0gbWlnaHQgZGlmZmVyIGZyb20gb3RoZXIgcmVnaXN0cmllc1xuICAvLyBUaGlzIGhhcHBlbnMgbW9zdGx5IGluIGNhc2VzIHdoZXJlIGEgcHJvdmlkZXIgdXBkYXRlIGZhaWxlZCB0byBwdWJsaXNoIHRvIG9uZSBvZiB0aGUgcmVnaXN0cmllc1xuICAvLyBJbiB0aGF0IGNhc2Ugd2UgdXNlIHRoZSBsYXRlc3QgdmVyc2lvbiB0aGF0IHdhcyBwdWJsaXNoZWQgc3VjY2Vzc2Z1bGx5IGFuZCB3b3JrcyB3aXRoIHRoZSBjdXJyZW50IGNka3RmIHJlbGVhc2VcbiAgcHJpdmF0ZSBhc3luYyBnZXRMYW5ndWFnZVNwZWNpZmljUGFja2FnZVZlcnNpb24oXG4gICAgcHJlYnVpbHRQcm92aWRlck5wbVZlcnNpb25zOiB7IG5hbWU6IHN0cmluZzsgdmVyc2lvbjogc3RyaW5nIH1bXSxcbiAgKTogUHJvbWlzZTx7IG5hbWU6IHN0cmluZzsgdmVyc2lvbjogc3RyaW5nIH0gfCBudWxsPiB7XG4gICAgbG9nZ2VyLmRlYnVnKFxuICAgICAgXCJGb3VuZCBwb3NzaWJseSBtYXRjaGluZyB2ZXJzaW9ucyAocmVsZWFzZWQgb24gbnBtKTogXCIsXG4gICAgICBwcmVidWlsdFByb3ZpZGVyTnBtVmVyc2lvbnMsXG4gICAgKTtcbiAgICBsb2dnZXIuZGVidWcoXG4gICAgICBcIlNlYXJjaGluZyB0aHJvdWdoIHBhY2thZ2UgbWFuYWdlciB0byBmaW5kIGxhdGVzdCBhdmFpbGFibGUgdmVyc2lvbiBmb3IgZ2l2ZW4gbGFuZ3VhZ2VcIixcbiAgICApO1xuXG4gICAgZm9yIChjb25zdCB7IG5hbWUsIHZlcnNpb24gfSBvZiBwcmVidWlsdFByb3ZpZGVyTnBtVmVyc2lvbnMpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGxhbmd1YWdlUGFja2FnZU5hbWUgPSBhd2FpdCB0aGlzLnRyeUdldExhbmd1YWdlUGFja2FnZU5hbWUobmFtZSk7XG4gICAgICAgIGlmICghbGFuZ3VhZ2VQYWNrYWdlTmFtZSkgY29udGludWU7XG5cbiAgICAgICAgY29uc3QgaXNBdmFpbGFibGUgPSBhd2FpdCB0aGlzLnBhY2thZ2VNYW5hZ2VyLmlzTnBtVmVyc2lvbkF2YWlsYWJsZShcbiAgICAgICAgICBsYW5ndWFnZVBhY2thZ2VOYW1lLFxuICAgICAgICAgIHZlcnNpb24sXG4gICAgICAgICk7XG4gICAgICAgIGlmIChpc0F2YWlsYWJsZSkge1xuICAgICAgICAgIHJldHVybiB7IG5hbWU6IGxhbmd1YWdlUGFja2FnZU5hbWUsIHZlcnNpb24gfTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGxvZ2dlci5pbmZvKFxuICAgICAgICAgIGBDb3VsZCBub3QgZmluZCB2ZXJzaW9uICR7dmVyc2lvbn0gZm9yIHBhY2thZ2UgJHtuYW1lfTogJyR7ZXJyfScuIFNraXBwaW5nLi4uYCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBhc3luYyBhZGRMb2NhbFByb3ZpZGVyKGNvbnN0cmFpbnQ6IFByb3ZpZGVyQ29uc3RyYWludCkge1xuICAgIGxvZ2dlci5pbmZvKFxuICAgICAgYEFkZGluZyBsb2NhbCBwcm92aWRlciAke2NvbnN0cmFpbnQuc291cmNlfSB3aXRoIHZlcnNpb24gY29uc3RyYWludCAke2NvbnN0cmFpbnQudmVyc2lvbn0gdG8gY2RrdGYuanNvbmAsXG4gICAgKTtcblxuICAgIGlmICghY29uc3RyYWludC52ZXJzaW9uICYmIGNvbnN0cmFpbnQuaXNGcm9tVGVycmFmb3JtUmVnaXN0cnkoKSkge1xuICAgICAgY29uc3QgdiA9IGF3YWl0IGdldExhdGVzdFZlcnNpb24oY29uc3RyYWludCk7XG4gICAgICBpZiAodikge1xuICAgICAgICBjb25zdHJhaW50ID0gbmV3IFByb3ZpZGVyQ29uc3RyYWludChcbiAgICAgICAgICBjb25zdHJhaW50LnNvdXJjZSxcbiAgICAgICAgICAvLyBcIjEuMy4yXCIgLT4gXCJ+PiAxLjNcIlxuICAgICAgICAgIGB+PiAke3Yuc3BsaXQoXCIuXCIpLnNsaWNlKDAsIDIpLmpvaW4oXCIuXCIpfWAsXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBFcnJvcnMuVXNhZ2UoXG4gICAgICAgICAgYENvdWxkIG5vdCBmaW5kIGEgdmVyc2lvbiBmb3IgdGhlIHByb3ZpZGVyICcke2NvbnN0cmFpbnR9JyBpbiB0aGUgcHVibGljIHJlZ2lzdHJ5LiBUaGlzIGNvdWxkIGJlIGR1ZSB0byBhIHR5cG8sIHBsZWFzZSB0YWtlIGEgbG9vayBhdCBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9icm93c2UvcHJvdmlkZXJzIHRvIGZpbmQgYWxsIHN1cHBvcnRlZCBwcm92aWRlcnMuYCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBhd2FpdCBuZXcgQ2RrdGZDb25maWdNYW5hZ2VyKCkuYWRkUHJvdmlkZXIoY29uc3RyYWludCk7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydHMgYW4gTlBNIHBhY2thZ2UgbmFtZSBvZiBhIHByZS1idWlsdCBwcm92aWRlciBwYWNrYWdlIHRvIHRoZSBuYW1lIGluIHRoZSB0YXJnZXQgbGFuZ3VhZ2VcbiAgICovXG4gIHByaXZhdGUgY29udmVydFBhY2thZ2VOYW1lKFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICByZXBvc2l0b3J5OiBzdHJpbmcsXG4gICAgdXNlQ2RrdG46IGJvb2xlYW4sXG4gICk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHVzZUNka3RuXG4gICAgICA/IHRoaXMuY29udmVydFBhY2thZ2VOYW1lQ2RrdG4obmFtZSwgcmVwb3NpdG9yeSlcbiAgICAgIDogdGhpcy5jb252ZXJ0UGFja2FnZU5hbWVDZGt0ZihuYW1lLCByZXBvc2l0b3J5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0cyBhbiBOUE0gcGFja2FnZSBuYW1lIG9mIGEgcHJlLWJ1aWx0IHByb3ZpZGVyIHBhY2thZ2UgdG8gdGhlIG5hbWUgaW4gdGhlIHRhcmdldCBsYW5ndWFnZVxuICAgKi9cbiAgcHJpdmF0ZSBjb252ZXJ0UGFja2FnZU5hbWVDZGt0ZihuYW1lOiBzdHJpbmcsIHJlcG9zaXRvcnk6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgcHJvdmlkZXJOYW1lID0gbmFtZS5yZXBsYWNlKFwiQGNka3RmL3Byb3ZpZGVyLVwiLCBcIlwiKTtcbiAgICBzd2l0Y2ggKHRoaXMudGFyZ2V0TGFuZ3VhZ2UpIHtcbiAgICAgIGNhc2UgTGFuZ3VhZ2UuR086IC8vIGUuZy4gZ2l0aHViLmNvbS9jZGt0Zi9jZGt0Zi1wcm92aWRlci1vcGVudGVsZWtvbWNsb3VkLWdvL29wZW50ZWxla29tY2xvdWRcbiAgICAgICAgaWYgKHJlcG9zaXRvcnkpIHtcbiAgICAgICAgICByZXR1cm4gYCR7cmVwb3NpdG9yeX0tZ28vJHtwcm92aWRlck5hbWV9YDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBgZ2l0aHViLmNvbS9jZGt0Zi9jZGt0Zi1wcm92aWRlci0ke3Byb3ZpZGVyTmFtZX0tZ28vJHtwcm92aWRlck5hbWV9YDtcbiAgICAgIGNhc2UgTGFuZ3VhZ2UuVFlQRVNDUklQVDogLy8gZS5nLiBAY2RrdGYvcHJvdmlkZXItcmFuZG9tXG4gICAgICAgIHJldHVybiBuYW1lOyAvLyBhbHJlYWR5IHRoZSBjb3JyZWN0IG5hbWVcbiAgICAgIGNhc2UgTGFuZ3VhZ2UuQ1NIQVJQOiAvLyBlLmcuIEhhc2hpQ29ycC5DZGt0Zi5Qcm92aWRlcnMuT3BlbnRlbGVrb21jbG91ZFxuICAgICAgICByZXR1cm4gYEhhc2hpQ29ycC5DZGt0Zi5Qcm92aWRlcnMuYCArIHRvUGFzY2FsQ2FzZShwcm92aWRlck5hbWUpO1xuICAgICAgY2FzZSBMYW5ndWFnZS5KQVZBOiAvLyBlLmcuIGNvbS5oYXNoaWNvcnAub3BlbnRlbGVrb21jbG91ZFxuICAgICAgICByZXR1cm4gYGNvbS5oYXNoaWNvcnAuY2RrdGYtcHJvdmlkZXItJHtwcm92aWRlck5hbWV9YDtcbiAgICAgIGNhc2UgTGFuZ3VhZ2UuUFlUSE9OOiAvLyBlLmcuIGNka3RmLWNka3RmLXByb3ZpZGVyLW9wZW50ZWxla29tY2xvdWRcbiAgICAgICAgcmV0dXJuIGBjZGt0Zi1jZGt0Zi1wcm92aWRlci0ke3Byb3ZpZGVyTmFtZX1gO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBjb252ZXJ0aW5nIHBhY2thZ2UgbmFtZSBmb3IgbGFuZ3VhZ2UgJHt0aGlzLnRhcmdldExhbmd1YWdlfSBub3QgaW1wbGVtZW50ZWQgeWV0YCxcbiAgICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydHMgYW4gTlBNIHBhY2thZ2UgbmFtZSBvZiBhIHByZS1idWlsdCBwcm92aWRlciBwYWNrYWdlIHRvIHRoZSBuYW1lIGluIHRoZSB0YXJnZXQgbGFuZ3VhZ2VcbiAgICovXG4gIHByaXZhdGUgY29udmVydFBhY2thZ2VOYW1lQ2RrdG4oXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIHJlcG9zaXRvcnk6IHN0cmluZyxcbiAgKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBwcm92aWRlck5hbWUgPSBuYW1lLnJlcGxhY2UoXCJAY2RrdG4vcHJvdmlkZXItXCIsIFwiXCIpO1xuICAgIHN3aXRjaCAodGhpcy50YXJnZXRMYW5ndWFnZSkge1xuICAgICAgY2FzZSBMYW5ndWFnZS5HTzogLy8gZS5nLiBnaXRodWIuY29tL2Nka3RmL2Nka3RmLXByb3ZpZGVyLW9wZW50ZWxla29tY2xvdWQtZ28vb3BlbnRlbGVrb21jbG91ZFxuICAgICAgICBpZiAocmVwb3NpdG9yeSkge1xuICAgICAgICAgIHJldHVybiBgJHtyZXBvc2l0b3J5fS1nby8ke3Byb3ZpZGVyTmFtZX1gO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGBnaXRodWIuY29tL2Nka3RuLWlvL2Nka3RuLXByb3ZpZGVyLSR7cHJvdmlkZXJOYW1lfS1nby8ke3Byb3ZpZGVyTmFtZX1gO1xuICAgICAgY2FzZSBMYW5ndWFnZS5UWVBFU0NSSVBUOiAvLyBlLmcuIEBjZGt0Zi9wcm92aWRlci1yYW5kb21cbiAgICAgICAgcmV0dXJuIG5hbWU7IC8vIGFscmVhZHkgdGhlIGNvcnJlY3QgbmFtZVxuICAgICAgY2FzZSBMYW5ndWFnZS5DU0hBUlA6IC8vIGUuZy4gSGFzaGlDb3JwLkNka3RmLlByb3ZpZGVycy5PcGVudGVsZWtvbWNsb3VkXG4gICAgICAgIHJldHVybiBgSW8uQ2RrdG4uUHJvdmlkZXJzLmAgKyB0b1Bhc2NhbENhc2UocHJvdmlkZXJOYW1lKTtcbiAgICAgIGNhc2UgTGFuZ3VhZ2UuSkFWQTogLy8gZS5nLiBjb20uaGFzaGljb3JwLm9wZW50ZWxla29tY2xvdWRcbiAgICAgICAgcmV0dXJuIGBpby5jZGt0bi5jZGt0bi1wcm92aWRlci0ke3Byb3ZpZGVyTmFtZX1gO1xuICAgICAgY2FzZSBMYW5ndWFnZS5QWVRIT046IC8vIGUuZy4gY2RrdGYtY2RrdGYtcHJvdmlkZXItb3BlbnRlbGVrb21jbG91ZFxuICAgICAgICByZXR1cm4gYGNka3RuLXByb3ZpZGVyLSR7cHJvdmlkZXJOYW1lfWA7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYGNvbnZlcnRpbmcgcGFja2FnZSBuYW1lIGZvciBsYW5ndWFnZSAke3RoaXMudGFyZ2V0TGFuZ3VhZ2V9IG5vdCBpbXBsZW1lbnRlZCB5ZXRgLFxuICAgICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0cyBhbiBwYWNrYWdlIG5hbWUgb2YgYSBwcmUtYnVpbHQgcHJvdmlkZXIgcGFja2FnZSBpbiB0YXJnZXQgbGFuZ3VhZ2UgdG8gdGhlIG5hbWUgaW4gbnBtXG4gICAqIEludmVyc2Ugb2Y6IGBjb252ZXJ0UGFja2FnZU5hbWVgXG4gICAqL1xuICBwcml2YXRlIGNvbnZlcnRGcm9tUGFja2FnZU5hbWVUb05wbShuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IHJlZ2V4ZXMgPSB7XG4gICAgICBbTGFuZ3VhZ2UuR09dOlxuICAgICAgICAvZ2l0aHViLmNvbVxcLyg/OmNka3RmfGhhc2hpY29ycHxjZGt0bi1pbylcXC9jZGt0KFtmbl0pLXByb3ZpZGVyLSguKyktZ29cXC8vaSxcbiAgICAgIFtMYW5ndWFnZS5UWVBFU0NSSVBUXTogLyguKykvaSxcbiAgICAgIFtMYW5ndWFnZS5DU0hBUlBdOiAvKD86SGFzaGlDb3JwfElvKVxcLkNka3QoW2ZuXSlcXC5Qcm92aWRlcnNcXC4oLispL2ksXG4gICAgICBbTGFuZ3VhZ2UuSkFWQV06XG4gICAgICAgIC8oPzpjb21cXC5oYXNoaWNvcnB8aW9cXC5jZGt0bilcXC5jZGt0KFtmbl0pLXByb3ZpZGVyLSguKykvaSxcbiAgICAgIFtMYW5ndWFnZS5QWVRIT05dOiAvKD86Y2RrdGYtKT9jZGt0KFtmbl0pLXByb3ZpZGVyLSguKykvaSxcbiAgICB9O1xuICAgIGNvbnN0IHJlZ2V4ID0gcmVnZXhlc1t0aGlzLnRhcmdldExhbmd1YWdlXTtcbiAgICBpZiAoIXJlZ2V4KSB7XG4gICAgICB0aHJvdyBFcnJvcnMuVXNhZ2UoXCJMYW5ndWFnZSBub3Qgc3VwcG9ydGVkIGZvciBwcmUtYnVpbHQgcHJvdmlkZXJzXCIpO1xuICAgIH1cblxuICAgIGNvbnN0IG1hdGNoID0gcmVnZXguZXhlYyhuYW1lKTtcbiAgICBpZiAoIW1hdGNoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFBhY2thZ2UgbmFtZSBpcyBub3QgaW4gZXhwZWN0ZWQgZm9ybWF0OiAke25hbWV9YCk7XG4gICAgfVxuXG4gICAgY29uc3QgbnBtUGFja2FnZVByZWZpeCA9IGBAY2RrdCR7bWF0Y2hbMV19L3Byb3ZpZGVyLWA7XG5cbiAgICBzd2l0Y2ggKHRoaXMudGFyZ2V0TGFuZ3VhZ2UpIHtcbiAgICAgIGNhc2UgTGFuZ3VhZ2UuR086IC8vIGUuZy4gZ2l0aHViLmNvbS9jZGt0Zi9jZGt0Zi1wcm92aWRlci1vcGVudGVsZWtvbWNsb3VkLWdvL29wZW50ZWxla29tY2xvdWRcbiAgICAgICAgcmV0dXJuIG5wbVBhY2thZ2VQcmVmaXggKyBtYXRjaFsyXTtcbiAgICAgIGNhc2UgTGFuZ3VhZ2UuVFlQRVNDUklQVDogLy8gZS5nLiBAY2RrdGYvcHJvdmlkZXItcmFuZG9tXG4gICAgICAgIHJldHVybiBtYXRjaFsxXTsgLy8gYWxyZWFkeSB0aGUgY29ycmVjdCBuYW1lXG4gICAgICBjYXNlIExhbmd1YWdlLkNTSEFSUDogLy8gZS5nLiBIYXNoaUNvcnAuQ2RrdGYuUHJvdmlkZXJzLk9wZW50ZWxla29tY2xvdWRcbiAgICAgICAgcmV0dXJuIG5wbVBhY2thZ2VQcmVmaXggKyB0b1NuYWtlQ2FzZShtYXRjaFsyXSk7XG4gICAgICBjYXNlIExhbmd1YWdlLkpBVkE6IC8vIGUuZy4gY29tLmhhc2hpY29ycC5vcGVudGVsZWtvbWNsb3VkXG4gICAgICAgIHJldHVybiBucG1QYWNrYWdlUHJlZml4ICsgbWF0Y2hbMl07XG4gICAgICBjYXNlIExhbmd1YWdlLlBZVEhPTjogLy8gZS5nLiBjZGt0Zi1jZGt0Zi1wcm92aWRlci1vcGVudGVsZWtvbWNsb3VkXG4gICAgICAgIHJldHVybiBucG1QYWNrYWdlUHJlZml4ICsgbWF0Y2hbMl07XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYGNvbnZlcnRpbmcgcGFja2FnZSBuYW1lIGZvciBsYW5ndWFnZSAke3RoaXMudGFyZ2V0TGFuZ3VhZ2V9IG5vdCBpbXBsZW1lbnRlZCB5ZXRgLFxuICAgICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBhbGxQcm92aWRlcnMoKSB7XG4gICAgY29uc3QgY2RrdGZKc29uID0gQ2RrdGZDb25maWcucmVhZCgpO1xuICAgIGNvbnN0IGxvY2FsVmVyc2lvbnMgPSBuZXcgTG9jYWxQcm92aWRlclZlcnNpb25zKCk7XG5cbiAgICBjb25zdCBsb2NhbFByb3ZpZGVyQ29uZmlncyA9IGNka3RmSnNvbi50ZXJyYWZvcm1Qcm92aWRlcnM7XG4gICAgY29uc3QgcHJlYnVpbHRQcm92aWRlckNvbmZpZ3MgPVxuICAgICAgYXdhaXQgdGhpcy5wYWNrYWdlTWFuYWdlci5saXN0UHJvdmlkZXJQYWNrYWdlcygpO1xuXG4gICAgY29uc3QgcHJlYnVpbHRQcm92aWRlcnNJbmZvID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBwcmVidWlsdFByb3ZpZGVyQ29uZmlncy5tYXAoYXN5bmMgKHByZWJ1aWx0UHJvdmlkZXJDb25maWcpID0+IHtcbiAgICAgICAgY29uc3QgcGFja2FnZU5hbWUgPSB0aGlzLmNvbnZlcnRGcm9tUGFja2FnZU5hbWVUb05wbShcbiAgICAgICAgICBwcmVidWlsdFByb3ZpZGVyQ29uZmlnLm5hbWUsXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3QgcHJvdmlkZXJJbmZvcm1hdGlvbiA9IGF3YWl0IGdldFByZWJ1aWx0UHJvdmlkZXJWZXJzaW9uSW5mb3JtYXRpb24oXG4gICAgICAgICAgcGFja2FnZU5hbWUsXG4gICAgICAgICAgcHJlYnVpbHRQcm92aWRlckNvbmZpZy52ZXJzaW9uLFxuICAgICAgICApO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4ucHJvdmlkZXJJbmZvcm1hdGlvbixcbiAgICAgICAgICBwYWNrYWdlTmFtZTogcHJlYnVpbHRQcm92aWRlckNvbmZpZy5uYW1lLFxuICAgICAgICB9O1xuICAgICAgfSksXG4gICAgKTtcblxuICAgIGNvbnN0IGNvbnN0cmFpbnRzID0gbmV3IExvY2FsUHJvdmlkZXJDb25zdHJhaW50cygpO1xuXG4gICAgY29uc3QgbG9jYWxQcm92aWRlcnNJbmZvID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBsb2NhbFByb3ZpZGVyQ29uZmlncy5tYXAoYXN5bmMgKGxvY2FsUHJvdmlkZXJDb25maWcpID0+IHtcbiAgICAgICAgY29uc3QgY29uc3RyYWludCA9XG4gICAgICAgICAgUHJvdmlkZXJDb25zdHJhaW50LmZyb21Db25maWdFbnRyeShsb2NhbFByb3ZpZGVyQ29uZmlnKTtcbiAgICAgICAgY29uc3QgdmVyc2lvbiA9IGF3YWl0IGxvY2FsVmVyc2lvbnMudmVyc2lvbkZvclByb3ZpZGVyKFxuICAgICAgICAgIGNvbnN0cmFpbnQuc2ltcGxpZmllZE5hbWUsXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGNvbnN0cmFpbnRWYWx1ZSA9IGF3YWl0IGNvbnN0cmFpbnRzLmNvbnN0cmFpbnRGb3JQcm92aWRlcihcbiAgICAgICAgICBjb25zdHJhaW50LnNpbXBsaWZpZWROYW1lLFxuICAgICAgICApO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcHJvdmlkZXJOYW1lOiBjb25zdHJhaW50LnNpbXBsaWZpZWROYW1lLFxuICAgICAgICAgIHByb3ZpZGVyQ29uc3RyYWludDogY29uc3RyYWludFZhbHVlIHx8IGNvbnN0cmFpbnQudmVyc2lvbixcbiAgICAgICAgICBwcm92aWRlclZlcnNpb246IHZlcnNpb24sXG4gICAgICAgIH07XG4gICAgICB9KSxcbiAgICApO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGxvY2FsOiBsb2NhbFByb3ZpZGVyc0luZm8sXG4gICAgICBwcmVidWlsdDogcHJlYnVpbHRQcm92aWRlcnNJbmZvLFxuICAgIH07XG4gIH1cbn1cbiJdfQ==
393
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwZW5kZW5jeS1tYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9kZXBlbmRlbmNpZXMvZGVwZW5kZW5jeS1tYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsK0JBQStCO0FBQy9CLG1DQUFtQztBQUNuQyw0Q0FLd0I7QUFDeEIseUNBQXNEO0FBQ3RELGtEQUE4QztBQUM5QyxpRUFBNEQ7QUFDNUQsdURBQW1EO0FBQ25ELDZEQUs4QjtBQUM5QixpREFBa0Q7QUFDbEQsK0RBQWlFO0FBQ2pFLCtDQUFpQztBQUNqQyx3RUFBbUU7QUFDbkUsOEVBQXlFO0FBRXpFLGlGQUFpRjtBQUNwRSxRQUFBLGdCQUFnQixHQUFHLHVCQUF1QixDQUFDO0FBQzNDLFFBQUEsaUJBQWlCLEdBQUcsV0FBVyxDQUFDO0FBQzdDLFNBQVMsdUJBQXVCLENBQUMsTUFBYztJQUM3Qyx3Q0FBd0M7SUFDeEMsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQzdDLFFBQVEsT0FBTyxFQUFFLENBQUM7UUFDaEIsS0FBSyxDQUFDO1lBQ0osT0FBTyxHQUFHLHdCQUFnQixJQUFJLHlCQUFpQixJQUFJLE1BQU0sRUFBRSxDQUFDO1FBQzlELEtBQUssQ0FBQztZQUNKLE9BQU8sR0FBRyx3QkFBZ0IsSUFBSSxNQUFNLEVBQUUsQ0FBQztRQUN6QztZQUNFLE9BQU8sTUFBTSxDQUFDO0lBQ2xCLENBQUM7QUFDSCxDQUFDO0FBRUQsTUFBYSxrQkFBa0I7SUFPN0IsbUVBQW1FO0lBQ25FLHNFQUFzRTtJQUN0RSw0R0FBNEc7SUFDNUcsWUFDRSxNQUFjLEVBQ0UsT0FBMkI7UUFBM0IsWUFBTyxHQUFQLE9BQU8sQ0FBb0I7UUFFM0MsSUFBSSxDQUFDLE1BQU0sR0FBRyx1QkFBdUIsQ0FBQyxNQUFNLENBQUMs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QyxHQUFHLENBQzFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsbUJBQW1CLEVBQUUsRUFBRTtZQUNyRCxNQUFNLFVBQVUsR0FDZCxrQkFBa0IsQ0FBQyxlQUFlLENBQUMsbUJBQW1CLENBQUMsQ0FBQztZQUMxRCxNQUFNLE9BQU8sR0FBRyxNQUFNLGFBQWEsQ0FBQyxrQkFBa0IsQ0FDcEQsVUFBVSxDQUFDLGNBQWMsQ0FDMUIsQ0FBQztZQUNGLE1BQU0sZUFBZSxHQUFHLE1BQU0sV0FBVyxDQUFDLHFCQUFxQixDQUM3RCxVQUFVLENBQUMsY0FBYyxDQUMxQixDQUFDO1lBRUYsT0FBTztnQkFDTCxZQUFZLEVBQUUsVUFBVSxDQUFDLGNBQWM7Z0JBQ3ZDLGtCQUFrQixFQUFFLGVBQWUsSUFBSSxVQUFVLENBQUMsT0FBTztnQkFDekQsZUFBZSxFQUFFLE9BQU87YUFDekIsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUNILENBQUM7UUFFRixPQUFPO1lBQ0wsS0FBSyxFQUFFLGtCQUFrQjtZQUN6QixRQUFRLEVBQUUscUJBQXFCO1NBQ2hDLENBQUM7SUFDSixDQUFDO0NBQ0Y7QUExWkQsOENBMFpDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSBIYXNoaUNvcnAsIEluY1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1QTC0yLjBcbmltcG9ydCB7XG4gIExhbmd1YWdlLFxuICBFcnJvcnMsXG4gIGxvZ2dlcixcbiAgVGVycmFmb3JtRGVwZW5kZW5jeUNvbnN0cmFpbnQsXG59IGZyb20gXCJAY2RrdG4vY29tbW9uc1wiO1xuaW1wb3J0IHsgdG9QYXNjYWxDYXNlLCB0b1NuYWtlQ2FzZSB9IGZyb20gXCJjb2RlbWFrZXJcIjtcbmltcG9ydCB7IENka3RmQ29uZmlnIH0gZnJvbSBcIi4uL2Nka3RmLWNvbmZpZ1wiO1xuaW1wb3J0IHsgQ2RrdGZDb25maWdNYW5hZ2VyIH0gZnJvbSBcIi4vY2RrdGYtY29uZmlnLW1hbmFnZXJcIjtcbmltcG9ydCB7IFBhY2thZ2VNYW5hZ2VyIH0gZnJvbSBcIi4vcGFja2FnZS1tYW5hZ2VyXCI7XG5pbXBvcnQge1xuICBnZXROcG1QYWNrYWdlTmFtZSxcbiAgZ2V0UHJlYnVpbHRQcm92aWRlclJlcG9zaXRvcnlOYW1lLFxuICBnZXRQcmVidWlsdFByb3ZpZGVyVmVyc2lvbkluZm9ybWF0aW9uLFxuICBnZXRQcmVidWlsdFByb3ZpZGVyVmVyc2lvbnMsXG59IGZyb20gXCIuL3ByZWJ1aWx0LXByb3ZpZGVyc1wiO1xuaW1wb3J0IHsgZ2V0TGF0ZXN0VmVyc2lvbiB9IGZyb20gXCIuL3JlZ2lzdHJ5LWFwaVwiO1xuaW1wb3J0IHsgdmVyc2lvbk1hdGNoZXNDb25zdHJhaW50IH0gZnJvbSBcIi4vdmVyc2lvbi1jb25zdHJhaW50c1wiO1xuaW1wb3J0ICogYXMgc2VtdmVyIGZyb20gXCJzZW12ZXJcIjtcbmltcG9ydCB7IExvY2FsUHJvdmlkZXJWZXJzaW9ucyB9IGZyb20gXCIuLi9sb2NhbC1wcm92aWRlci12ZXJzaW9uc1wiO1xuaW1wb3J0IHsgTG9jYWxQcm92aWRlckNvbnN0cmFpbnRzIH0gZnJvbSBcIi4uL2xvY2FsLXByb3ZpZGVyLWNvbnN0cmFpbnRzXCI7XG5cbi8vIHJlZjogaHR0cHM6Ly93d3cudGVycmFmb3JtLmlvL2xhbmd1YWdlL3Byb3ZpZGVycy9yZXF1aXJlbWVudHMjc291cmNlLWFkZHJlc3Nlc1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfSE9TVE5BTUUgPSBcInJlZ2lzdHJ5LnRlcnJhZm9ybS5pb1wiO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfTkFNRVNQQUNFID0gXCJoYXNoaWNvcnBcIjtcbmZ1bmN0aW9uIG5vcm1hbGl6ZVByb3ZpZGVyU291cmNlKHNvdXJjZTogc3RyaW5nKSB7XG4gIC8vIHJldHVybnMgPEhPU1ROQU1FPi88TkFNRVNQQUNFPi88VFlQRT5cbiAgY29uc3Qgc2xhc2hlcyA9IHNvdXJjZS5zcGxpdChcIi9cIikubGVuZ3RoIC0gMTtcbiAgc3dpdGNoIChzbGFzaGVzKSB7XG4gICAgY2FzZSAwOlxuICAgICAgcmV0dXJuIGAke0RFRkFVTFRfSE9TVE5BTUV9LyR7REVGQVVMVF9OQU1FU1BBQ0V9LyR7c291cmNlfWA7XG4gICAgY2FzZSAxOlxuICAgICAgcmV0dXJuIGAke0RFRkFVTFRfSE9TVE5BTUV9LyR7c291cmNlfWA7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBzb3VyY2U7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFByb3ZpZGVyQ29uc3RyYWludCB7XG4gIC8qKlxuICAgKiBub3JtYWxpemVkIHNvdXJjZSBvZiB0aGUgcHJvdmlkZXJcbiAgICogZS5nLiBcInJlZ2lzdHJ5LnRlcnJhZm9ybS5pby9oYXNoaWNvcnAvYXdzXCJcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBzb3VyY2U6IHN0cmluZztcblxuICAvLyBUT0RPOiBhZGQgZXhhbXBsZXMgdG8gY2xpIGNvbW1hbmQgZGVzY3JpcHRpb24gKGkuZS4gPSx+Pi4+IGV0Yy4pXG4gIC8vIGlmIG5vIHZlcnNpb24gY29uc3RyYWludCBpcyBzcGVjaWZpZWQsIHdlIGFzc3VtZSB0aGUgbGF0ZXN0IHZlcnNpb25cbiAgLy8gaWYgc3BlY2lmaWMgdmVyc2lvbiBpcyBzcGVjaWZpZWQgd2l0aG91dCBlLmcuID0sIHdlIGFsbG93IHBhdGNoIGxldmVsIGluY3JlbWVudHMgKGUuZy4gfj4yLjEyIGZvciBcIjIuMTJcIilcbiAgY29uc3RydWN0b3IoXG4gICAgc291cmNlOiBzdHJpbmcsXG4gICAgcHVibGljIHJlYWRvbmx5IHZlcnNpb246IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgKSB7XG4gICAgdGhpcy5zb3VyY2UgPSBub3JtYWxpemVQcm92aWRlclNvdXJjZShzb3VyY2UpO1xuICB9XG5cbiAgc3RhdGljIGZyb21Db25maWdFbnRyeShcbiAgICBwcm92aWRlcjogc3RyaW5nIHwgVGVycmFmb3JtRGVwZW5kZW5jeUNvbnN0cmFpbnQsXG4gICk6IFByb3ZpZGVyQ29uc3RyYWludCB7XG4gICAgaWYgKHR5cGVvZiBwcm92aWRlciA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgY29uc3QgW3NyYywgdmVyc2lvbl0gPSBwcm92aWRlci5zcGxpdChcIkBcIik7XG4gICAgICByZXR1cm4gbmV3IFByb3ZpZGVyQ29uc3RyYWludChcbiAgICAgICAgc3JjLnRyaW0oKSxcbiAgICAgICAgdmVyc2lvbiA/IHZlcnNpb24udHJpbSgpIDogdW5kZWZpbmVkLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBzcmMgPVxuICAgICAgKHByb3ZpZGVyLm5hbWVzcGFjZSA/IGAke3Byb3ZpZGVyLm5hbWVzcGFjZX0vYCA6IFwiXCIpICtcbiAgICAgIChwcm92aWRlci5zb3VyY2UgfHwgcHJvdmlkZXIubmFtZSk7XG5cbiAgICByZXR1cm4gbmV3IFByb3ZpZGVyQ29uc3RyYWludChzcmMsIHByb3ZpZGVyLnZlcnNpb24pO1xuICB9XG5cbiAgcHVibGljIGlzRnJvbVRlcnJhZm9ybVJlZ2lzdHJ5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmhvc3RuYW1lID09PSBERUZBVUxUX0hPU1ROQU1FO1xuICB9XG5cbiAgLyoqXG4gICAqIHRoZSBuYW1lc3BhY2Ugb2YgdGhlIHByb3ZpZGVyXG4gICAqIGUuZy4gXCJoYXNoaWNvcnBcIiBvciBcImtyZXV6d2Vya2VyXCJcbiAgICovXG4gIHB1YmxpYyBnZXQgbmFtZXNwYWNlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuc291cmNlLnNwbGl0KFwiL1wiKVsxXTtcbiAgfVxuXG4gIC8qKlxuICAgKiB0aGUgbmFtZSBvZiB0aGUgcHJvdmlkZXJcbiAgICogZS5nLiBcImF3c1wiXG4gICAqL1xuICBwdWJsaWMgZ2V0IG5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5zb3VyY2Uuc3BsaXQoXCIvXCIpWzJdO1xuICB9XG5cbiAgLyoqXG4gICAqIHRoZSBob3N0bmFtZSBvZiB0aGUgcHJvdmlkZXJcbiAgICogZS5nLiBcInJlZ2lzdHJ5LnRlcnJhZm9ybS5pb1wiXG4gICAqL1xuICBwdWJsaWMgZ2V0IGhvc3RuYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuc291cmNlLnNwbGl0KFwiL1wiKVswXTtcbiAgfVxuXG4gIC8qKlxuICAgKiByZXR1cm5zIGEgc2ltcGxpZmllZCBwcm92aWRlciBuYW1lLCBkcm9wcGluZyBuYW1lc3BhY2UgYW5kIGhvc3RuYW1lXG4gICAqIGlmIHRoZXkgbWF0Y2ggdGhlIGRlZmF1bHRzXG4gICAqL1xuICBwdWJsaWMgZ2V0IHNpbXBsaWZpZWROYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuc291cmNlXG4gICAgICAuc3BsaXQoXCIvXCIpXG4gICAgICAuZmlsdGVyKChwYXJ0KSA9PiBwYXJ0ICE9PSBERUZBVUxUX0hPU1ROQU1FICYmIHBhcnQgIT09IERFRkFVTFRfTkFNRVNQQUNFKVxuICAgICAgLmpvaW4oXCIvXCIpO1xuICB9XG5cbiAgLyoqXG4gICAqIGNoZWNrcyBpZiB0aGUgdmVyc2lvbiBjb25zdHJhaW50IG1hdGNoZXMgdGhlIGdpdmVuIHZlcnNpb25cbiAgICogQHBhcmFtIHZlcnNpb24gYW4gYWN0dWFsIHZlcnNpb24gKGUuZy4gXCI0LjEyLjFcIilcbiAgICogQHJldHVybnMgdHJ1ZSBpZiB0aGUgdmVyc2lvbiBpcyBjb21wYXRpYmxlIHdpdGggdGhlIGNvbnN0cmFpbnRcbiAgICovXG4gIHB1YmxpYyBtYXRjaGVzVmVyc2lvbih2ZXJzaW9uOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy52ZXJzaW9uKSB7XG4gICAgICByZXR1cm4gdmVyc2lvbk1hdGNoZXNDb25zdHJhaW50KHZlcnNpb24sIHRoaXMudmVyc2lvbik7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcHVibGljIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiBgJHt0aGlzLnNvdXJjZX0ke3RoaXMudmVyc2lvbiA/IGBAJHt0aGlzLnZlcnNpb259YCA6IFwiXCJ9YDtcbiAgfVxufVxuXG4vKipcbiAqIG1hbmFnZXMgZGVwZW5kZW5jaWVzIG9mIGEgQ0RLVE4gcHJvamVjdCAoZS5nLiB0ZXJyYWZvcm0gcHJvdmlkZXJzKVxuICovXG5leHBvcnQgY2xhc3MgRGVwZW5kZW5jeU1hbmFnZXIge1xuICBwcml2YXRlIHBhY2thZ2VNYW5hZ2VyOiBQYWNrYWdlTWFuYWdlcjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRhcmdldExhbmd1YWdlOiBMYW5ndWFnZSxcbiAgICBwcml2YXRlIGNka3RmVmVyc2lvbjogc3RyaW5nLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcHJvamVjdERpcmVjdG9yeTogc3RyaW5nLFxuICApIHtcbiAgICB0aGlzLnBhY2thZ2VNYW5hZ2VyID0gUGFja2FnZU1hbmFnZXIuZm9yTGFuZ3VhZ2UoXG4gICAgICB0YXJnZXRMYW5ndWFnZSxcbiAgICAgIHRoaXMucHJvamVjdERpcmVjdG9yeSxcbiAgICApO1xuICB9XG5cbiAgYXN5bmMgYWRkUHJvdmlkZXIoXG4gICAgY29uc3RyYWludDogUHJvdmlkZXJDb25zdHJhaW50LFxuICApOiBQcm9taXNlPHsgYWRkZWRMb2NhbFByb3ZpZGVyOiBib29sZWFuIH0+IHtcbiAgICBpZiAoYXdhaXQgdGhpcy5oYXNQcmVidWlsdFByb3ZpZGVyKGNvbnN0cmFpbnQpKSB7XG4gICAgICBhd2FpdCB0aGlzLmFkZFByZWJ1aWx0UHJvdmlkZXIoY29uc3RyYWludCk7XG4gICAgICByZXR1cm4geyBhZGRlZExvY2FsUHJvdmlkZXI6IGZhbHNlIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGF3YWl0IHRoaXMuYWRkTG9jYWxQcm92aWRlcihjb25zdHJhaW50KTtcbiAgICAgIHJldHVybiB7IGFkZGVkTG9jYWxQcm92aWRlcjogdHJ1ZSB9O1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHVwZ3JhZGVQcm92aWRlcihjb25zdHJhaW50OiBQcm92aWRlckNvbnN0cmFpbnQpIHtcbiAgICBjb25zb2xlLmxvZyhgVXBncmFkaW5nICR7Y29uc3RyYWludC5zaW1wbGlmaWVkTmFtZX0uLi5gKTtcbiAgICBjb25zdCBjZGt0Zkpzb24gPSBuZXcgQ2RrdGZDb25maWdNYW5hZ2VyKCk7XG4gICAgY29uc3QgcHJlYnVpbHRWZXJzaW9uID0gYXdhaXQgdGhpcy5nZXRDdXJyZW50bHlJbnN0YWxsZWRWZXJzaW9uKGNvbnN0cmFpbnQpO1xuICAgIGlmIChwcmVidWlsdFZlcnNpb24pIHtcbiAgICAgIGF3YWl0IHRoaXMudXBncmFkZVByZWJ1aWx0UHJvdmlkZXIoY29uc3RyYWludCwgcHJlYnVpbHRWZXJzaW9uKTtcbiAgICAgIHJldHVybiB7IGFkZGVkTG9jYWxQcm92aWRlcjogZmFsc2UgfTtcbiAgICB9XG4gICAgaWYgKGF3YWl0IGNka3RmSnNvbi5oYXNQcm92aWRlcihjb25zdHJhaW50KSkge1xuICAgICAgYXdhaXQgY2RrdGZKc29uLnVwZGF0ZVByb3ZpZGVyKGNvbnN0cmFpbnQpO1xuICAgICAgcmV0dXJuIHsgYWRkZWRMb2NhbFByb3ZpZGVyOiB0cnVlIH07XG4gICAgfVxuXG4gICAgdGhyb3cgRXJyb3JzLlVzYWdlKFxuICAgICAgYFRyeWluZyB0byB1cGdyYWRlICR7Y29uc3RyYWludC5zaW1wbGlmaWVkTmFtZX0gYnV0IGl0IGlzIG5vdCBpbnN0YWxsZWQsIHBsZWFzZSB1c2UgXCJjZGt0biBwcm92aWRlciBhZGQgJHtjb25zdHJhaW50LnNpbXBsaWZpZWROYW1lfVwiIHRvIGFkZCBpdC5gLFxuICAgICk7XG4gIH1cblxuICBhc3luYyBnZXRDdXJyZW50bHlJbnN0YWxsZWRWZXJzaW9uKGNvbnN0cmFpbnQ6IFByb3ZpZGVyQ29uc3RyYWludCkge1xuICAgIGxvZ2dlci5pbmZvKGBDaGVja2luZyBpZiAke2NvbnN0cmFpbnQuc2ltcGxpZmllZE5hbWV9IGlzIGluc3RhbGxlZC4uLmApO1xuICAgIGNvbnN0IGNka3RmUGFja2FnZU5hbWUgPSBhd2FpdCB0aGlzLnRyeUdldFBhY2thZ2VOYW1lKGNvbnN0cmFpbnQsIGZhbHNlKTtcbiAgICBjb25zdCBjZGt0blBhY2thZ2VOYW1lID0gYXdhaXQgdGhpcy50cnlHZXRQYWNrYWdlTmFtZShjb25zdHJhaW50LCB0cnVlKTtcblxuICAgIGlmICghY2RrdGZQYWNrYWdlTmFtZSAmJiAhY2RrdG5QYWNrYWdlTmFtZSkgcmV0dXJuOyAvLyBub3QgYXZhaWxhYmxlIGFzIHByZS1idWlsdCBwcm92aWRlciwgc28gY2FuJ3QgYmUgaW5zdGFsbGVkIGFzIHN1Y2hcblxuICAgIGxvZ2dlci5kZWJ1ZyhcbiAgICAgIGBFeHBlY3RpbmcgcGFja2FnZSAke2Nka3RmUGFja2FnZU5hbWV9IG9yICR7Y2RrdG5QYWNrYWdlTmFtZX0gdG8gYmUgaW5zdGFsbGVkIGlmIHByb3ZpZGVyIGlzIGluc3RhbGxlZCBhcyBwcmUtYnVpbHQgb25lYCxcbiAgICApO1xuXG4gICAgbGV0IGluc3RhbGxlZFBhY2thZ2VzO1xuICAgIHRyeSB7XG4gICAgICBpbnN0YWxsZWRQYWNrYWdlcyA9IGF3YWl0IHRoaXMucGFja2FnZU1hbmFnZXIubGlzdFByb3ZpZGVyUGFja2FnZXMoKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBsaXN0IHBhY2thZ2VzOiAke2V9YCk7XG4gICAgfVxuXG4gICAgbG9nZ2VyLmRlYnVnKFxuICAgICAgYEluc3RhbGxlZCBwYWNrYWdlcyBmb3VuZDogJHtKU09OLnN0cmluZ2lmeShpbnN0YWxsZWRQYWNrYWdlcywgbnVsbCwgMil9YCxcbiAgICApO1xuXG4gICAgcmV0dXJuIGluc3RhbGxlZFBhY2thZ2VzLmZpbmQoXG4gICAgICAocGtnKSA9PiBwa2cubmFtZSA9PT0gY2RrdGZQYWNrYWdlTmFtZSB8fCBwa2cubmFtZSA9PT0gY2RrdG5QYWNrYWdlTmFtZSxcbiAgICApPy52ZXJzaW9uO1xuICB9XG5cbiAgYXN5bmMgdXBncmFkZVByZWJ1aWx0UHJvdmlkZXIoXG4gICAgY29uc3RyYWludDogUHJvdmlkZXJDb25zdHJhaW50LFxuICAgIGN1cnJlbnRWZXJzaW9uOiBzdHJpbmcsXG4gICkge1xuICAgIGxvZ2dlci5kZWJ1ZyhcbiAgICAgIGBTZWFyY2hpbmcgZm9yIGxhdGVzdCBtYXRjaGluZyB2ZXJzaW9uIG9mICR7Y29uc3RyYWludC5zaW1wbGlmaWVkTmFtZX1gLFxuICAgICk7XG5cbiAgICBjb25zdCB7IG5hbWUsIHZlcnNpb24gfSA9IGF3YWl0IHRoaXMuZ2V0TWF0Y2hpbmdQcm92aWRlclZlcnNpb24oY29uc3RyYWludCk7XG5cbiAgICBsb2dnZXIuZGVidWcoYEZvdW5kIHBhY2thZ2UgJHtuYW1lfUAke3ZlcnNpb259YCk7XG4gICAgaWYgKHZlcnNpb24gIT09IGN1cnJlbnRWZXJzaW9uKSB7XG4gICAgICBhd2FpdCB0aGlzLnBhY2thZ2VNYW5hZ2VyLmFkZFBhY2thZ2UobmFtZSwgdmVyc2lvbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICBgVGhlIGxhdGVzdCB2ZXJzaW9uIG9mICR7bmFtZX0gaXMgYWxyZWFkeSBpbnN0YWxsZWQ6ICR7dmVyc2lvbn1gLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBoYXNQcmVidWlsdFByb3ZpZGVyKGNvbnN0cmFpbnQ6IFByb3ZpZGVyQ29uc3RyYWludCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGxvZ2dlci5kZWJ1ZyhcbiAgICAgIGBkZXRlcm1pbmluZyB3aGV0aGVyIHByZS1idWlsdCBwcm92aWRlciBleGlzdHMgZm9yICR7Y29uc3RyYWludC5zb3VyY2V9IHdpdGggdmVyc2lvbiBjb25zdHJhaW50ICR7Y29uc3RyYWludC52ZXJzaW9ufSBhbmQgY2RrdGYgdmVyc2lvbiAke3RoaXMuY2RrdGZWZXJzaW9ufWAsXG4gICAgKTtcblxuICAgIGxvZ2dlci5pbmZvKGBDaGVja2luZyB3aGV0aGVyIHByZS1idWlsdCBwcm92aWRlciBleGlzdHMgZm9yIHRoZSBmb2xsb3dpbmcgY29uc3RyYWludHM6XG4gIHByb3ZpZGVyOiAke2NvbnN0cmFpbnQuc2ltcGxpZmllZE5hbWV9XG4gIHZlcnNpb24gOiAke2NvbnN0cmFpbnQudmVyc2lvbiB8fCBcImxhdGVzdFwifVxuICBsYW5ndWFnZTogJHt0aGlzLnRhcmdldExhbmd1YWdlfVxuICBjZGt0ZiAgIDogJHt0aGlzLmNka3RmVmVyc2lvbn1cbmApO1xuXG4gICAgaWYgKFxuICAgICAgdGhpcy50YXJnZXRMYW5ndWFnZSA9PT0gTGFuZ3VhZ2UuR08gJiZcbiAgICAgIHNlbXZlci5sdCh0aGlzLmNka3RmVmVyc2lvbiwgXCIwLjEyLjBcIilcbiAgICApIHtcbiAgICAgIGxvZ2dlci5pbmZvKFxuICAgICAgICBgQmVmb3JlIENES1RGIDAuMTIuMCB0aGVyZSB3ZXJlIG5vIHByZS1idWlsdCBwcm92aWRlcnMgcHVibGlzaGVkIGZvciBHby5gLFxuICAgICAgKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCB2ID0gYXdhaXQgZ2V0UHJlYnVpbHRQcm92aWRlclZlcnNpb25zKGNvbnN0cmFpbnQsIHRoaXMuY2RrdGZWZXJzaW9uKTtcbiAgICBjb25zdCBleGlzdHMgPSB2ICE9PSBudWxsO1xuXG4gICAgaWYgKGV4aXN0cykge1xuICAgICAgbG9nZ2VyLmluZm8oYEZvdW5kIHByZS1idWlsdCBwcm92aWRlci5gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9nZ2VyLmluZm8oXG4gICAgICAgIGBQcmUtYnVpbHQgcHJvdmlkZXIgZG9lcyBub3QgZXhpc3QgZm9yIHRoZSBnaXZlbiBjb25zdHJhaW50cy5gLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZXhpc3RzO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB0cnlHZXRQYWNrYWdlTmFtZShcbiAgICBjb25zdHJhaW50OiBQcm92aWRlckNvbnN0cmFpbnQsXG4gICAgdXNlQ2RrdG46IGJvb2xlYW4sXG4gICk6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gICAgY29uc3QgbnBtUGFja2FnZU5hbWUgPSBhd2FpdCBnZXROcG1QYWNrYWdlTmFtZShjb25zdHJhaW50LCB1c2VDZGt0bik7XG5cbiAgICBpZiAoIW5wbVBhY2thZ2VOYW1lKSByZXR1cm47XG5cbiAgICByZXR1cm4gdGhpcy50cnlHZXRMYW5ndWFnZVBhY2thZ2VOYW1lKG5wbVBhY2thZ2VOYW1lKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgdHJ5R2V0TGFuZ3VhZ2VQYWNrYWdlTmFtZShcbiAgICBucG1QYWNrYWdlTmFtZTogc3RyaW5nLFxuICApOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICAgIGNvbnN0IHByZWJ1aWx0UHJvdmlkZXJSZXBvc2l0b3J5ID1cbiAgICAgIGF3YWl0IGdldFByZWJ1aWx0UHJvdmlkZXJSZXBvc2l0b3J5TmFtZShucG1QYWNrYWdlTmFtZSk7XG5cbiAgICByZXR1cm4gdGhpcy5jb252ZXJ0UGFja2FnZU5hbWUoXG4gICAgICBucG1QYWNrYWdlTmFtZSxcbiAgICAgIHByZWJ1aWx0UHJvdmlkZXJSZXBvc2l0b3J5LFxuICAgICAgbnBtUGFja2FnZU5hbWUuc3RhcnRzV2l0aChcIkBjZGt0blwiKSxcbiAgICApO1xuICB9XG5cbiAgYXN5bmMgZ2V0TWF0Y2hpbmdQcm92aWRlclZlcnNpb24oY29uc3RyYWludDogUHJvdmlkZXJDb25zdHJhaW50KSB7XG4gICAgY29uc3QgcHJlYnVpbHRQcm92aWRlck5wbVZlcnNpb25zID0gYXdhaXQgZ2V0UHJlYnVpbHRQcm92aWRlclZlcnNpb25zKFxuICAgICAgY29uc3RyYWludCxcbiAgICAgIHRoaXMuY2RrdGZWZXJzaW9uLFxuICAgICk7XG4gICAgaWYgKCFwcmVidWlsdFByb3ZpZGVyTnBtVmVyc2lvbnMpIHtcbiAgICAgIHRocm93IEVycm9ycy5Vc2FnZShcbiAgICAgICAgYE5vIHByZS1idWlsdCBwcm92aWRlciBmb3VuZCBmb3IgJHtjb25zdHJhaW50LnNvdXJjZX0gd2l0aCB2ZXJzaW9uIGNvbnN0cmFpbnQgJHtjb25zdHJhaW50LnZlcnNpb259IGFuZCBjZGt0ZiB2ZXJzaW9uICR7dGhpcy5jZGt0ZlZlcnNpb259YCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgcGFja2FnZVZlcnNpb24gPSBhd2FpdCB0aGlzLmdldExhbmd1YWdlU3BlY2lmaWNQYWNrYWdlVmVyc2lvbihcbiAgICAgIHByZWJ1aWx0UHJvdmlkZXJOcG1WZXJzaW9ucyxcbiAgICApO1xuXG4gICAgaWYgKCFwYWNrYWdlVmVyc2lvbikge1xuICAgICAgdGhyb3cgRXJyb3JzLlVzYWdlKFxuICAgICAgICBgTm8gcHJlLWJ1aWx0IHByb3ZpZGVyIGZvdW5kIGZvciAke2NvbnN0cmFpbnQuc291cmNlfSB3aXRoIHZlcnNpb24gY29uc3RyYWludCAke2NvbnN0cmFpbnQudmVyc2lvbn0gYW5kIGNka3RmIHZlcnNpb24gJHt0aGlzLmNka3RmVmVyc2lvbn0gZm9yIGxhbmd1YWdlICR7dGhpcy50YXJnZXRMYW5ndWFnZX0uYCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhY2thZ2VWZXJzaW9uO1xuICB9XG5cbiAgYXN5bmMgYWRkUHJlYnVpbHRQcm92aWRlcihjb25zdHJhaW50OiBQcm92aWRlckNvbnN0cmFpbnQsIHNpbGVudCA9IGZhbHNlKSB7XG4gICAgbG9nZ2VyLmRlYnVnKFxuICAgICAgYGFkZGluZyBwcmUtYnVpbHQgcHJvdmlkZXIgJHtjb25zdHJhaW50LnNvdXJjZX0gd2l0aCB2ZXJzaW9uIGNvbnN0cmFpbnQgJHtjb25zdHJhaW50LnZlcnNpb259IGZvciBjZGt0ZiB2ZXJzaW9uICR7dGhpcy5jZGt0ZlZlcnNpb259YCxcbiAgICApO1xuXG4gICAgY29uc3QgeyBuYW1lLCB2ZXJzaW9uIH0gPSBhd2FpdCB0aGlzLmdldE1hdGNoaW5nUHJvdmlkZXJWZXJzaW9uKGNvbnN0cmFpbnQpO1xuICAgIGF3YWl0IHRoaXMucGFja2FnZU1hbmFnZXIuYWRkUGFja2FnZShuYW1lLCB2ZXJzaW9uLCBzaWxlbnQpO1xuXG4gICAgLy8gVE9ETzogbW9yZSBkZWJ1ZyBsb2dzXG4gIH1cblxuICAvLyBUaGUgdmVyc2lvbiB3ZSB1c2UgZm9yIG5wbSBtaWdodCBkaWZmZXIgZnJvbSBvdGhlciByZWdpc3RyaWVzXG4gIC8vIFRoaXMgaGFwcGVucyBtb3N0bHkgaW4gY2FzZXMgd2hlcmUgYSBwcm92aWRlciB1cGRhdGUgZmFpbGVkIHRvIHB1Ymxpc2ggdG8gb25lIG9mIHRoZSByZWdpc3RyaWVzXG4gIC8vIEluIHRoYXQgY2FzZSB3ZSB1c2UgdGhlIGxhdGVzdCB2ZXJzaW9uIHRoYXQgd2FzIHB1Ymxpc2hlZCBzdWNjZXNzZnVsbHkgYW5kIHdvcmtzIHdpdGggdGhlIGN1cnJlbnQgY2RrdGYgcmVsZWFzZVxuICBwcml2YXRlIGFzeW5jIGdldExhbmd1YWdlU3BlY2lmaWNQYWNrYWdlVmVyc2lvbihcbiAgICBwcmVidWlsdFByb3ZpZGVyTnBtVmVyc2lvbnM6IHsgbmFtZTogc3RyaW5nOyB2ZXJzaW9uOiBzdHJpbmcgfVtdLFxuICApOiBQcm9taXNlPHsgbmFtZTogc3RyaW5nOyB2ZXJzaW9uOiBzdHJpbmcgfSB8IG51bGw+IHtcbiAgICBsb2dnZXIuZGVidWcoXG4gICAgICBcIkZvdW5kIHBvc3NpYmx5IG1hdGNoaW5nIHZlcnNpb25zIChyZWxlYXNlZCBvbiBucG0pOiBcIixcbiAgICAgIHByZWJ1aWx0UHJvdmlkZXJOcG1WZXJzaW9ucyxcbiAgICApO1xuICAgIGxvZ2dlci5kZWJ1ZyhcbiAgICAgIFwiU2VhcmNoaW5nIHRocm91Z2ggcGFja2FnZSBtYW5hZ2VyIHRvIGZpbmQgbGF0ZXN0IGF2YWlsYWJsZSB2ZXJzaW9uIGZvciBnaXZlbiBsYW5ndWFnZVwiLFxuICAgICk7XG5cbiAgICBmb3IgKGNvbnN0IHsgbmFtZSwgdmVyc2lvbiB9IG9mIHByZWJ1aWx0UHJvdmlkZXJOcG1WZXJzaW9ucykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgbGFuZ3VhZ2VQYWNrYWdlTmFtZSA9IGF3YWl0IHRoaXMudHJ5R2V0TGFuZ3VhZ2VQYWNrYWdlTmFtZShuYW1lKTtcbiAgICAgICAgaWYgKCFsYW5ndWFnZVBhY2thZ2VOYW1lKSBjb250aW51ZTtcblxuICAgICAgICBjb25zdCBpc0F2YWlsYWJsZSA9IGF3YWl0IHRoaXMucGFja2FnZU1hbmFnZXIuaXNOcG1WZXJzaW9uQXZhaWxhYmxlKFxuICAgICAgICAgIGxhbmd1YWdlUGFja2FnZU5hbWUsXG4gICAgICAgICAgdmVyc2lvbixcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGlzQXZhaWxhYmxlKSB7XG4gICAgICAgICAgcmV0dXJuIHsgbmFtZTogbGFuZ3VhZ2VQYWNrYWdlTmFtZSwgdmVyc2lvbiB9O1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgbG9nZ2VyLmluZm8oXG4gICAgICAgICAgYENvdWxkIG5vdCBmaW5kIHZlcnNpb24gJHt2ZXJzaW9ufSBmb3IgcGFja2FnZSAke25hbWV9OiAnJHtlcnJ9Jy4gU2tpcHBpbmcuLi5gLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGFzeW5jIGFkZExvY2FsUHJvdmlkZXIoY29uc3RyYWludDogUHJvdmlkZXJDb25zdHJhaW50KSB7XG4gICAgbG9nZ2VyLmluZm8oXG4gICAgICBgQWRkaW5nIGxvY2FsIHByb3ZpZGVyICR7Y29uc3RyYWludC5zb3VyY2V9IHdpdGggdmVyc2lvbiBjb25zdHJhaW50ICR7Y29uc3RyYWludC52ZXJzaW9ufSB0byBjZGt0Zi5qc29uYCxcbiAgICApO1xuXG4gICAgaWYgKCFjb25zdHJhaW50LnZlcnNpb24gJiYgY29uc3RyYWludC5pc0Zyb21UZXJyYWZvcm1SZWdpc3RyeSgpKSB7XG4gICAgICBjb25zdCB2ID0gYXdhaXQgZ2V0TGF0ZXN0VmVyc2lvbihjb25zdHJhaW50KTtcbiAgICAgIGlmICh2KSB7XG4gICAgICAgIGNvbnN0cmFpbnQgPSBuZXcgUHJvdmlkZXJDb25zdHJhaW50KFxuICAgICAgICAgIGNvbnN0cmFpbnQuc291cmNlLFxuICAgICAgICAgIC8vIFwiMS4zLjJcIiAtPiBcIn4+IDEuM1wiXG4gICAgICAgICAgYH4+ICR7di5zcGxpdChcIi5cIikuc2xpY2UoMCwgMikuam9pbihcIi5cIil9YCxcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IEVycm9ycy5Vc2FnZShcbiAgICAgICAgICBgQ291bGQgbm90IGZpbmQgYSB2ZXJzaW9uIGZvciB0aGUgcHJvdmlkZXIgJyR7Y29uc3RyYWludH0nIGluIHRoZSBwdWJsaWMgcmVnaXN0cnkuIFRoaXMgY291bGQgYmUgZHVlIHRvIGEgdHlwbywgcGxlYXNlIHRha2UgYSBsb29rIGF0IGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL2Jyb3dzZS9wcm92aWRlcnMgdG8gZmluZCBhbGwgc3VwcG9ydGVkIHByb3ZpZGVycy5gLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGF3YWl0IG5ldyBDZGt0ZkNvbmZpZ01hbmFnZXIoKS5hZGRQcm92aWRlcihjb25zdHJhaW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0cyBhbiBOUE0gcGFja2FnZSBuYW1lIG9mIGEgcHJlLWJ1aWx0IHByb3ZpZGVyIHBhY2thZ2UgdG8gdGhlIG5hbWUgaW4gdGhlIHRhcmdldCBsYW5ndWFnZVxuICAgKi9cbiAgcHJpdmF0ZSBjb252ZXJ0UGFja2FnZU5hbWUoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIHJlcG9zaXRvcnk6IHN0cmluZyxcbiAgICB1c2VDZGt0bjogYm9vbGVhbixcbiAgKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdXNlQ2RrdG5cbiAgICAgID8gdGhpcy5jb252ZXJ0UGFja2FnZU5hbWVDZGt0bihuYW1lLCByZXBvc2l0b3J5KVxuICAgICAgOiB0aGlzLmNvbnZlcnRQYWNrYWdlTmFtZUNka3RmKG5hbWUsIHJlcG9zaXRvcnkpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnRzIGFuIE5QTSBwYWNrYWdlIG5hbWUgb2YgYSBwcmUtYnVpbHQgcHJvdmlkZXIgcGFja2FnZSB0byB0aGUgbmFtZSBpbiB0aGUgdGFyZ2V0IGxhbmd1YWdlXG4gICAqL1xuICBwcml2YXRlIGNvbnZlcnRQYWNrYWdlTmFtZUNka3RmKG5hbWU6IHN0cmluZywgcmVwb3NpdG9yeTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBwcm92aWRlck5hbWUgPSBuYW1lLnJlcGxhY2UoXCJAY2RrdGYvcHJvdmlkZXItXCIsIFwiXCIpO1xuICAgIHN3aXRjaCAodGhpcy50YXJnZXRMYW5ndWFnZSkge1xuICAgICAgY2FzZSBMYW5ndWFnZS5HTzogLy8gZS5nLiBnaXRodWIuY29tL2Nka3RmL2Nka3RmLXByb3ZpZGVyLW9wZW50ZWxla29tY2xvdWQtZ28vb3BlbnRlbGVrb21jbG91ZFxuICAgICAgICBpZiAocmVwb3NpdG9yeSkge1xuICAgICAgICAgIHJldHVybiBgJHtyZXBvc2l0b3J5fS1nby8ke3Byb3ZpZGVyTmFtZX1gO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGBnaXRodWIuY29tL2Nka3RmL2Nka3RmLXByb3ZpZGVyLSR7cHJvdmlkZXJOYW1lfS1nby8ke3Byb3ZpZGVyTmFtZX1gO1xuICAgICAgY2FzZSBMYW5ndWFnZS5UWVBFU0NSSVBUOiAvLyBlLmcuIEBjZGt0Zi9wcm92aWRlci1yYW5kb21cbiAgICAgICAgcmV0dXJuIG5hbWU7IC8vIGFscmVhZHkgdGhlIGNvcnJlY3QgbmFtZVxuICAgICAgY2FzZSBMYW5ndWFnZS5DU0hBUlA6IC8vIGUuZy4gSGFzaGlDb3JwLkNka3RmLlByb3ZpZGVycy5PcGVudGVsZWtvbWNsb3VkXG4gICAgICAgIHJldHVybiBgSGFzaGlDb3JwLkNka3RmLlByb3ZpZGVycy5gICsgdG9QYXNjYWxDYXNlKHByb3ZpZGVyTmFtZSk7XG4gICAgICBjYXNlIExhbmd1YWdlLkpBVkE6IC8vIGUuZy4gY29tLmhhc2hpY29ycC5vcGVudGVsZWtvbWNsb3VkXG4gICAgICAgIHJldHVybiBgY29tLmhhc2hpY29ycC5jZGt0Zi1wcm92aWRlci0ke3Byb3ZpZGVyTmFtZX1gO1xuICAgICAgY2FzZSBMYW5ndWFnZS5QWVRIT046IC8vIGUuZy4gY2RrdGYtY2RrdGYtcHJvdmlkZXItb3BlbnRlbGVrb21jbG91ZFxuICAgICAgICByZXR1cm4gYGNka3RmLWNka3RmLXByb3ZpZGVyLSR7cHJvdmlkZXJOYW1lfWA7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYGNvbnZlcnRpbmcgcGFja2FnZSBuYW1lIGZvciBsYW5ndWFnZSAke3RoaXMudGFyZ2V0TGFuZ3VhZ2V9IG5vdCBpbXBsZW1lbnRlZCB5ZXRgLFxuICAgICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0cyBhbiBOUE0gcGFja2FnZSBuYW1lIG9mIGEgcHJlLWJ1aWx0IHByb3ZpZGVyIHBhY2thZ2UgdG8gdGhlIG5hbWUgaW4gdGhlIHRhcmdldCBsYW5ndWFnZVxuICAgKi9cbiAgcHJpdmF0ZSBjb252ZXJ0UGFja2FnZU5hbWVDZGt0bihcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgcmVwb3NpdG9yeTogc3RyaW5nLFxuICApOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHByb3ZpZGVyTmFtZSA9IG5hbWUucmVwbGFjZShcIkBjZGt0bi9wcm92aWRlci1cIiwgXCJcIik7XG4gICAgc3dpdGNoICh0aGlzLnRhcmdldExhbmd1YWdlKSB7XG4gICAgICBjYXNlIExhbmd1YWdlLkdPOiAvLyBlLmcuIGdpdGh1Yi5jb20vY2RrdGYvY2RrdGYtcHJvdmlkZXItb3BlbnRlbGVrb21jbG91ZC1nby9vcGVudGVsZWtvbWNsb3VkXG4gICAgICAgIGlmIChyZXBvc2l0b3J5KSB7XG4gICAgICAgICAgcmV0dXJuIGAke3JlcG9zaXRvcnl9LWdvLyR7cHJvdmlkZXJOYW1lfWA7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYGdpdGh1Yi5jb20vY2RrdG4taW8vY2RrdG4tcHJvdmlkZXItJHtwcm92aWRlck5hbWV9LWdvLyR7cHJvdmlkZXJOYW1lfWA7XG4gICAgICBjYXNlIExhbmd1YWdlLlRZUEVTQ1JJUFQ6IC8vIGUuZy4gQGNka3RmL3Byb3ZpZGVyLXJhbmRvbVxuICAgICAgICByZXR1cm4gbmFtZTsgLy8gYWxyZWFkeSB0aGUgY29ycmVjdCBuYW1lXG4gICAgICBjYXNlIExhbmd1YWdlLkNTSEFSUDogLy8gZS5nLiBIYXNoaUNvcnAuQ2RrdGYuUHJvdmlkZXJzLk9wZW50ZWxla29tY2xvdWRcbiAgICAgICAgcmV0dXJuIGBJby5DZGt0bi5Qcm92aWRlcnMuYCArIHRvUGFzY2FsQ2FzZShwcm92aWRlck5hbWUpO1xuICAgICAgY2FzZSBMYW5ndWFnZS5KQVZBOiAvLyBlLmcuIGNvbS5oYXNoaWNvcnAub3BlbnRlbGVrb21jbG91ZFxuICAgICAgICByZXR1cm4gYGlvLmNka3RuLmNka3RuLXByb3ZpZGVyLSR7cHJvdmlkZXJOYW1lfWA7XG4gICAgICBjYXNlIExhbmd1YWdlLlBZVEhPTjogLy8gZS5nLiBjZGt0Zi1jZGt0Zi1wcm92aWRlci1vcGVudGVsZWtvbWNsb3VkXG4gICAgICAgIHJldHVybiBgY2RrdG4tcHJvdmlkZXItJHtwcm92aWRlck5hbWV9YDtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgY29udmVydGluZyBwYWNrYWdlIG5hbWUgZm9yIGxhbmd1YWdlICR7dGhpcy50YXJnZXRMYW5ndWFnZX0gbm90IGltcGxlbWVudGVkIHlldGAsXG4gICAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnRzIGFuIHBhY2thZ2UgbmFtZSBvZiBhIHByZS1idWlsdCBwcm92aWRlciBwYWNrYWdlIGluIHRhcmdldCBsYW5ndWFnZSB0byB0aGUgbmFtZSBpbiBucG1cbiAgICogSW52ZXJzZSBvZjogYGNvbnZlcnRQYWNrYWdlTmFtZWBcbiAgICovXG4gIHByaXZhdGUgY29udmVydEZyb21QYWNrYWdlTmFtZVRvTnBtKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgcmVnZXhlcyA9IHtcbiAgICAgIFtMYW5ndWFnZS5HT106XG4gICAgICAgIC9naXRodWIuY29tXFwvKD86Y2RrdGZ8aGFzaGljb3JwfGNka3RuLWlvKVxcL2Nka3QoW2ZuXSktcHJvdmlkZXItKC4rKS1nb1xcLy9pLFxuICAgICAgW0xhbmd1YWdlLlRZUEVTQ1JJUFRdOiAvKC4rKS9pLFxuICAgICAgW0xhbmd1YWdlLkNTSEFSUF06IC8oPzpIYXNoaUNvcnB8SW8pXFwuQ2RrdChbZm5dKVxcLlByb3ZpZGVyc1xcLiguKykvaSxcbiAgICAgIFtMYW5ndWFnZS5KQVZBXTpcbiAgICAgICAgLyg/OmNvbVxcLmhhc2hpY29ycHxpb1xcLmNka3RuKVxcLmNka3QoW2ZuXSktcHJvdmlkZXItKC4rKS9pLFxuICAgICAgW0xhbmd1YWdlLlBZVEhPTl06IC8oPzpjZGt0Zi0pP2Nka3QoW2ZuXSktcHJvdmlkZXItKC4rKS9pLFxuICAgIH07XG4gICAgY29uc3QgcmVnZXggPSByZWdleGVzW3RoaXMudGFyZ2V0TGFuZ3VhZ2VdO1xuICAgIGlmICghcmVnZXgpIHtcbiAgICAgIHRocm93IEVycm9ycy5Vc2FnZShcIkxhbmd1YWdlIG5vdCBzdXBwb3J0ZWQgZm9yIHByZS1idWlsdCBwcm92aWRlcnNcIik7XG4gICAgfVxuXG4gICAgY29uc3QgbWF0Y2ggPSByZWdleC5leGVjKG5hbWUpO1xuICAgIGlmICghbWF0Y2gpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgUGFja2FnZSBuYW1lIGlzIG5vdCBpbiBleHBlY3RlZCBmb3JtYXQ6ICR7bmFtZX1gKTtcbiAgICB9XG5cbiAgICBjb25zdCBucG1QYWNrYWdlUHJlZml4ID0gYEBjZGt0JHttYXRjaFsxXX0vcHJvdmlkZXItYDtcblxuICAgIHN3aXRjaCAodGhpcy50YXJnZXRMYW5ndWFnZSkge1xuICAgICAgY2FzZSBMYW5ndWFnZS5HTzogLy8gZS5nLiBnaXRodWIuY29tL2Nka3RmL2Nka3RmLXByb3ZpZGVyLW9wZW50ZWxla29tY2xvdWQtZ28vb3BlbnRlbGVrb21jbG91ZFxuICAgICAgICByZXR1cm4gbnBtUGFja2FnZVByZWZpeCArIG1hdGNoWzJdO1xuICAgICAgY2FzZSBMYW5ndWFnZS5UWVBFU0NSSVBUOiAvLyBlLmcuIEBjZGt0Zi9wcm92aWRlci1yYW5kb21cbiAgICAgICAgcmV0dXJuIG1hdGNoWzFdOyAvLyBhbHJlYWR5IHRoZSBjb3JyZWN0IG5hbWVcbiAgICAgIGNhc2UgTGFuZ3VhZ2UuQ1NIQVJQOiAvLyBlLmcuIEhhc2hpQ29ycC5DZGt0Zi5Qcm92aWRlcnMuT3BlbnRlbGVrb21jbG91ZFxuICAgICAgICByZXR1cm4gbnBtUGFja2FnZVByZWZpeCArIHRvU25ha2VDYXNlKG1hdGNoWzJdKTtcbiAgICAgIGNhc2UgTGFuZ3VhZ2UuSkFWQTogLy8gZS5nLiBjb20uaGFzaGljb3JwLm9wZW50ZWxla29tY2xvdWRcbiAgICAgICAgcmV0dXJuIG5wbVBhY2thZ2VQcmVmaXggKyBtYXRjaFsyXTtcbiAgICAgIGNhc2UgTGFuZ3VhZ2UuUFlUSE9OOiAvLyBlLmcuIGNka3RmLWNka3RmLXByb3ZpZGVyLW9wZW50ZWxla29tY2xvdWRcbiAgICAgICAgcmV0dXJuIG5wbVBhY2thZ2VQcmVmaXggKyBtYXRjaFsyXTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgY29udmVydGluZyBwYWNrYWdlIG5hbWUgZm9yIGxhbmd1YWdlICR7dGhpcy50YXJnZXRMYW5ndWFnZX0gbm90IGltcGxlbWVudGVkIHlldGAsXG4gICAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGFsbFByb3ZpZGVycygpIHtcbiAgICBjb25zdCBjZGt0Zkpzb24gPSBDZGt0ZkNvbmZpZy5yZWFkKCk7XG4gICAgY29uc3QgbG9jYWxWZXJzaW9ucyA9IG5ldyBMb2NhbFByb3ZpZGVyVmVyc2lvbnMoKTtcblxuICAgIGNvbnN0IGxvY2FsUHJvdmlkZXJDb25maWdzID0gY2RrdGZKc29uLnRlcnJhZm9ybVByb3ZpZGVycztcbiAgICBjb25zdCBwcmVidWlsdFByb3ZpZGVyQ29uZmlncyA9XG4gICAgICBhd2FpdCB0aGlzLnBhY2thZ2VNYW5hZ2VyLmxpc3RQcm92aWRlclBhY2thZ2VzKCk7XG5cbiAgICBjb25zdCBwcmVidWlsdFByb3ZpZGVyc0luZm8gPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIHByZWJ1aWx0UHJvdmlkZXJDb25maWdzLm1hcChhc3luYyAocHJlYnVpbHRQcm92aWRlckNvbmZpZykgPT4ge1xuICAgICAgICBjb25zdCBwYWNrYWdlTmFtZSA9IHRoaXMuY29udmVydEZyb21QYWNrYWdlTmFtZVRvTnBtKFxuICAgICAgICAgIHByZWJ1aWx0UHJvdmlkZXJDb25maWcubmFtZSxcbiAgICAgICAgKTtcblxuICAgICAgICBjb25zdCBwcm92aWRlckluZm9ybWF0aW9uID0gYXdhaXQgZ2V0UHJlYnVpbHRQcm92aWRlclZlcnNpb25JbmZvcm1hdGlvbihcbiAgICAgICAgICBwYWNrYWdlTmFtZSxcbiAgICAgICAgICBwcmVidWlsdFByb3ZpZGVyQ29uZmlnLnZlcnNpb24sXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5wcm92aWRlckluZm9ybWF0aW9uLFxuICAgICAgICAgIHBhY2thZ2VOYW1lOiBwcmVidWlsdFByb3ZpZGVyQ29uZmlnLm5hbWUsXG4gICAgICAgIH07XG4gICAgICB9KSxcbiAgICApO1xuXG4gICAgY29uc3QgY29uc3RyYWludHMgPSBuZXcgTG9jYWxQcm92aWRlckNvbnN0cmFpbnRzKCk7XG5cbiAgICBjb25zdCBsb2NhbFByb3ZpZGVyc0luZm8gPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIGxvY2FsUHJvdmlkZXJDb25maWdzLm1hcChhc3luYyAobG9jYWxQcm92aWRlckNvbmZpZykgPT4ge1xuICAgICAgICBjb25zdCBjb25zdHJhaW50ID1cbiAgICAgICAgICBQcm92aWRlckNvbnN0cmFpbnQuZnJvbUNvbmZpZ0VudHJ5KGxvY2FsUHJvdmlkZXJDb25maWcpO1xuICAgICAgICBjb25zdCB2ZXJzaW9uID0gYXdhaXQgbG9jYWxWZXJzaW9ucy52ZXJzaW9uRm9yUHJvdmlkZXIoXG4gICAgICAgICAgY29uc3RyYWludC5zaW1wbGlmaWVkTmFtZSxcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgY29uc3RyYWludFZhbHVlID0gYXdhaXQgY29uc3RyYWludHMuY29uc3RyYWludEZvclByb3ZpZGVyKFxuICAgICAgICAgIGNvbnN0cmFpbnQuc2ltcGxpZmllZE5hbWUsXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBwcm92aWRlck5hbWU6IGNvbnN0cmFpbnQuc2ltcGxpZmllZE5hbWUsXG4gICAgICAgICAgcHJvdmlkZXJDb25zdHJhaW50OiBjb25zdHJhaW50VmFsdWUgfHwgY29uc3RyYWludC52ZXJzaW9uLFxuICAgICAgICAgIHByb3ZpZGVyVmVyc2lvbjogdmVyc2lvbixcbiAgICAgICAgfTtcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgbG9jYWw6IGxvY2FsUHJvdmlkZXJzSW5mbyxcbiAgICAgIHByZWJ1aWx0OiBwcmVidWlsdFByb3ZpZGVyc0luZm8sXG4gICAgfTtcbiAgfVxufVxuIl19