@kontur.candy/tools 2.200.0 → 2.201.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (25) hide show
  1. package/distr/Common/CandyApiClient/CandyApiClient.js +5 -9
  2. package/distr/Common/CandyApiClient/CandyApiClient.js.map +1 -1
  3. package/distr/Common/CandyApiClient/FakeCandyApiClient.js +1 -4
  4. package/distr/Common/CandyApiClient/FakeCandyApiClient.js.map +1 -1
  5. package/distr/Common/CandyApiClient/ICandyApiClient.js +1 -1
  6. package/distr/Common/CandyApiClient/ICandyApiClient.js.map +1 -1
  7. package/distr/Common/GetRngSchemaFileExtension.js +26 -0
  8. package/distr/Common/GetRngSchemaFileExtension.js.map +1 -0
  9. package/distr/Common/WellKnownDirectories.js +2 -2
  10. package/distr/Common/WellKnownDirectories.js.map +1 -1
  11. package/distr/Tools/src/BuildTasks/ReadFormSource.js +3 -3
  12. package/distr/Tools/src/BuildTasks/ReadFormSource.js.map +1 -1
  13. package/distr/Tools/src/CLICommands/BuildForms/RunBuildForms.js +3 -3
  14. package/distr/Tools/src/CLICommands/BuildForms/RunBuildForms.js.map +1 -1
  15. package/distr/Tools/src/CLICommands/DevBuild/RunDevBuild.js +3 -3
  16. package/distr/Tools/src/CLICommands/DevBuild/RunDevBuild.js.map +1 -1
  17. package/distr/Tools/src/CLICommands/InitForm/RunInitForm.js +2 -2
  18. package/distr/Tools/src/CLICommands/InitForm/RunInitForm.js.map +1 -1
  19. package/distr/Tools/src/LocalServerFrontEndDist/index.js +1 -1
  20. package/distr/Tools/src/LocalServerFrontEndDist/index.js.map +1 -1
  21. package/package.json +1 -1
  22. package/distr/Common/CandyApiClient/Types/TestClassification.js +0 -6
  23. package/distr/Common/CandyApiClient/Types/TestClassification.js.map +0 -1
  24. package/distr/Common/getRngSchemaFilename.js +0 -27
  25. package/distr/Common/getRngSchemaFilename.js.map +0 -1
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.ServerErrors = exports.CandyApiDraftClient = exports.CandyApiClient = void 0;
6
+ exports.ServerErrors = exports.CandyResourceZones = exports.CandyApiDraftClient = exports.CandyApiClient = void 0;
7
7
  var _TypingUtils = require("../TypingUtils");
8
8
  var _HttpClient = require("../HttpClient/HttpClient");
9
9
  var _AuthenticationMode = require("../HttpClient/AuthenticationMode");
@@ -16,6 +16,9 @@ const strangeOptions = {
16
16
  src: "changeSet",
17
17
  dataVersion: "0"
18
18
  };
19
+ const CandyResourceZones = exports.CandyResourceZones = {
20
+ TestForms: "candy.resources.test-forms"
21
+ };
19
22
  let ServerErrors = exports.ServerErrors = /*#__PURE__*/function (ServerErrors) {
20
23
  ServerErrors["FufSizeTooLarge"] = "FufSizeTooLarge";
21
24
  ServerErrors["BadRequest"] = "BadRequest";
@@ -99,13 +102,6 @@ class CandyApiClient {
99
102
  async getFeatureFlags() {
100
103
  return await this.httpClient.get("v1/features/flags").json();
101
104
  }
102
- async setTestClassification(testClassification) {
103
- const response = await this.httpClient.post("/testonly/mock-classification").withRawBody(JSON.stringify(testClassification));
104
- if (!(response.status >= 200 && response.status < 300)) {
105
- throw new Error(`Bad response. Code is ${response.status}.`);
106
- }
107
- return true;
108
- }
109
105
  }
110
106
  exports.CandyApiClient = CandyApiClient;
111
107
  class CandyApiDraftClient {
@@ -571,4 +567,4 @@ class CandyApiDraftClient {
571
567
  }
572
568
  }
573
569
  exports.CandyApiDraftClient = CandyApiDraftClient;
574
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfVHlwaW5nVXRpbHMiLCJyZXF1aXJlIiwiX0h0dHBDbGllbnQiLCJfQXV0aGVudGljYXRpb25Nb2RlIiwiX01vZGVsUGF0aCIsIl9Gb2N1c1R5cGVzIiwiX0RyYWZ0UHJlc2VudGF0aW9uVHlwZSIsIl9Jc0J1ZmZlciIsIl9GdWZTaXplVG9vTGFyZ2VFcnJvciIsInN0cmFuZ2VPcHRpb25zIiwic3JjIiwiZGF0YVZlcnNpb24iLCJTZXJ2ZXJFcnJvcnMiLCJleHBvcnRzIiwiY29udmVydFBhdGhMb2FkU3BlY2lmaWNhdGlvblRvU3RyaW5nIiwic3BlYyIsInNraXAiLCJwYXRoT3JQYXRoUHJlZml4IiwidG9MZWdhY3lQYXRoIiwiQ2FuZHlBcGlDbGllbnQiLCJjb25zdHJ1Y3RvciIsImZldGNoSW1wbCIsImJhc2VVcmwiLCJyZXNvdXJjZVpvbmUiLCJhdXRoZW50aWNhdGlvbiIsImV4Y2VwdGlvbkxvZ2dlciIsImh0dHBDbGllbnQiLCJIdHRwQ2xpZW50IiwiY3JlYXRlQXV0aGVudGljYXRpb25Qcm92aWRlciIsImZvckRyYWZ0IiwiZHJhZnRGdWxsSWQiLCJDYW5keUFwaURyYWZ0Q2xpZW50IiwiZ2V0SW5mb0J5SW5ucyIsImlubnMiLCJwYXRocyIsIm1hcCIsImlubiIsInJlc3BvbnNlIiwicG9zdCIsImdldERyYWZ0VXJsIiwid2l0aEpzb25Cb2R5IiwianNvbiIsInJlc3VsdCIsIl9yZXNwb25zZSIsImlublNlcnZlclZhbHVlIiwidmFsdWUiLCJ1bmRlZmluZWQiLCJlcnJvciIsImVycm9yQ29kZSIsIkZvY3VzU2VydmVyRXJyb3JDb2RlIiwiTm9Jbm5FcnJvciIsIl9pbm5TZXJ2ZXJWYWx1ZSR2YWx1ZSIsIl9pbm5TZXJ2ZXJWYWx1ZSRlcnJvciIsIl9pbm5TZXJ2ZXJWYWx1ZSRlcnJvcjIiLCJnZXRBbGxHZnZzIiwiYWJvcnRTaWduYWwiLCJib2R5IiwiZ2V0IiwiY3JlYXRlRHJhZnRGcm9tRHJpdmUiLCJucyIsImZ1ZkRyaXZlVXJpIiwid2l0aFF1ZXJ5UGFyYW1zIiwid2l0aEFib3J0U2lnbmFsIiwiY3JlYXRlRW1wdHlEcmFmdCIsImdmdiIsImNyZWF0ZURyYWZ0IiwiZnVmQ29udGVudCIsIndpdGhDb250ZW50VHlwZSIsIndpdGhCb2R5RnJvbUJ1ZmZlciIsIkJ1ZmZlciIsImZyb20iLCJFcnJvciIsImNoZWNrQWxpdmUiLCJkcmFmdFJlbGF0ZWRVcmwiLCJkcmFmdElkIiwiZ2V0RmVhdHVyZUZsYWdzIiwic2V0VGVzdENsYXNzaWZpY2F0aW9uIiwidGVzdENsYXNzaWZpY2F0aW9uIiwid2l0aFJhd0JvZHkiLCJKU09OIiwic3RyaW5naWZ5Iiwic3RhdHVzIiwiZ2V0SHJlZlRvSW5uZXJFZGl0b3IiLCJ1cmwiLCJnZXRIcmVmRG93bmxvYWRGdWYiLCJnZXRIcmVmVG9Db252ZXJ0YXRpb25Mb2ciLCJnZXRIcmVmVG9Eb3dubG9hZElubmVyRnVmIiwiZ2V0SHJlZkRvd25sb2FkRHJhZnRQcmVzZW50YXRpb24iLCJEcmFmdFByZXNlbnRhdGlvblR5cGUiLCJpbm5lckZ1ZiIsImdldEhyZWZUb0Rvd25sb2FkQ2xpZW50SW5mbyIsImNsaWVudEluZm8iLCJnZXRIcmVmVG9Eb3dubG9hZEZvcm1zQ2xpZW50SW5mbyIsImZvcm1zQ2xpZW50SW5mbyIsImdldEhyZWZEb3dubG9hZElubmVyIiwiaW5uZXIiLCJnZXRFcnJvckxvZyIsImdldERyYWZ0UHJlc2VudGF0aW9uVXJsIiwiZXJyb3JMb2ciLCJnZXRFcnJvckxvZ1dpdGhDaGVja1NjZW5hcmlvcyIsImNoZWNrU2NlbmFyaW9zIiwiZ2V0VGFza0J5SWQiLCJ0YXNrSWQiLCJfdGFza3MiLCJ0YXNrcyIsImdldEZ1ZldpdGhBdHRhY2htZW50cyIsImdldFBhcnRpYWxGdWYiLCJydWxlcyIsImdldEFsbFRhc2tzIiwiT2JqZWN0IiwidmFsdWVzIiwieCIsImVucXVldWVUYXNrIiwidGFza0luZm8iLCJhZGRlZCIsImNoYW5nZWQiLCJpZCIsInJlbW92ZWQiLCJjYW5jZWxUYXNrIiwiZ2V0RXhwZXJ0RXJyb3JMb2ciLCJlcnJvcmxvZ0V4cGVydCIsImdldEhyZWZUb0Vycm9yTG9nUGRmIiwiZXJyb3JMb2dOYW1lIiwicHJvcHNOYW1lIiwicHJvcHNEcml2ZU5hbWUiLCJjbGVhckRyYWZ0IiwiY29udmVydERyYWZ0RnJvbVByZXZHZnYiLCJwcmV2R2Z2RHJhZnRJZCIsInNlbmRDaGFuZ2VTZXQiLCJkYXRhIiwiY3VycmVudERhdGFWZXJzaW9uIiwiYWNjZXB0Q29kZSIsImdldFN1Y2Nlc3NSZXN1bHQiLCJfZGF0YVJlc3VsdCRkYXRhVmVyc2kiLCJkYXRhUmVzdWx0IiwicmVqZWN0Iiwic2VuZENoYW5nZVdpdGhOb3JtYWxpemF0aW9uU2V0Iiwibm9ybWFsaXplcklkIiwic2VuZENoYW5nZVNldFN5bmMiLCJwb3N0U3luYyIsImdldFN1Y2Nlc3NSZXN1bHRTeW5jIiwiX2RhdGFSZXN1bHQkZGF0YVZlcnNpMiIsImdldFJlcXVpc2l0ZXMiLCJyZXF1aXNpdGVMaXN0IiwiZ2V0SW5uZXIiLCJnZXRQYXJ0aWFsSW5uZXIiLCJtYXhJbnN0YW5jZUNvdW50IiwiY29udmVydGVkUnVsZXMiLCJ0b1N0cmluZyIsImxlbmd0aCIsImdldFBhcnRpYWxJbm5lckFzSnNvblRyZWUiLCJmb3JtYXQiLCJnZXRSYXdQYXJ0aWFsSW5uZXJBc0pzb25UcmVlIiwiZ2V0RGF0YVZlcnNpb24iLCJnZXRFeHBsYW5hdG9yeU5vdGUiLCJleHBsYW5hdG9yeU5vdGUiLCJnZXRBdHRhY2htZW50QnlJZCIsImF0dGFjaG1lbnRJZCIsIl9yZXN1bHQkdmFsdWUiLCJfcmVzdWx0IiwiZ2V0QWxsQXR0YWNobWVudHMiLCJyZW1vdmVBdHRhY2htZW50cyIsImF0dGFjaG1lbnRJZHMiLCJjcmVhdGVPclVwZGF0ZUF0dGFjaG1lbnRzIiwiYXR0YWNobWVudHMiLCJhdHRhY2htZW50IiwiY29udGVudFVyaSIsIm1ldGEiLCJjcmVhdGVEcmFmdEF0dGFjaG1lbnQiLCJwYXRoIiwib3BlbkxvYWRlZEF0dGFjaG1lbnRBc0RyYWZ0IiwiZXJyb3JEYXRhIiwiRnVmU2l6ZVRvb0xhcmdlRXJyb3IiLCJtZXNzYWdlIiwiSHR0cEVycm9yIiwic2V0UHJlc2VudGF0aW9uIiwicHJlc2VudGF0aW9uVHlwZSIsImNvbnRlbnQiLCJyZXF1ZXN0IiwicHV0IiwiaXNCdWZmZXIiLCJwYXRjaFByZXNlbnRhdGlvbiIsInByZXNlbnRhdGlvbkNvbnRlbnQiLCJwYXRjaCIsImdldEZpbGVQcm9wZXJ0aWVzIiwiZHJpdmVVcmkiLCJpZ25vcmVTaXplQ2hlY2siLCJwcmVwYXJlQW5kR2V0RmlsZVByb3BlcnRpZXMiLCJ1cGxvYWRBbmRHZXRGaWxlUHJvcGVydGllcyIsImRyaXZlVXJpcyIsInNlcnZlckVycm9yIiwiaW52YWxpZFNvdXJjZURyaXZlQ29udGVudE5hbWVzIiwic291cmNlc1RvdGFsQ291bnQiLCJlIiwiVW5rbm93bkVycm9yIiwiYWNjZXB0VHJhbnNmZXJUeXBlIiwidHJhbnNmZXJUeXBlIiwidHlwZUlkIiwiYWNjZXB0TXVsdGlwbGVUcmFuc2ZlclR5cGUiLCJmaWxlcyIsInNldEZ1ZkJ5RHJpdmVVcmkiLCJjb21iaW5lRnVmQnlEcml2ZVVyaSIsImNvbWJpbmVNZXRob2QiLCJleGNlbHNUb1BhcnRpYWxGdWZzIiwicGF0aFRvVGFibGUiLCJpbXBvcnRGcm9tUGFydGlhbEZ1ZnNCeVBhdGgiLCJjb21iaW5hdG9yVHlwZSIsIm11bHRpcGxlQ29tYmluZUZ1ZkJ5RHJpdmVVcmkiLCJhcmdzIiwiYXJndW1lbnRzIiwiaW1wb3J0WG1scyIsImlzSW1wb3J0QnlGdWYiLCJpbXBvcnRCeUZ1ZiIsIkZ1ZkRyaXZlVXJpcyIsInNldERyYWZ0U2V0dGluZ3MiLCJzZXR0aW5ncyIsImdldERyYWZ0U2V0dGluZ3MiLCJub3JtYWxpemVCeVJ1bGVzIiwic2V0TXVsdGlwbGVXaXRoTm9ybWFsaXphdGlvbiIsInVyaSIsImZpbmFsUnVsZXMiLCJjb252ZXJ0VG9MZWdhY3lQYXRoIiwic2VhcmNoSW5zdGFuY2VzQnlUZXh0IiwidGV4dCIsInBhdGhzUHJlZml4IiwicGF0aHNUb1NlYXJjaCIsIm1heEluc3RhbmNlQ291bnRQYXJhbXMiLCJwYXJhbXMiLCJzZWFyY2hTdHJpbmciLCJxdWVyeUNvbGxlY3Rpb24iLCJyZXNvbHZlSW5uZXJQYXRoIiwiY3VzdG9tTm9ybWFsaXplIiwicGF0aFByZWZpeGVzIiwiaW1wb3J0RW1wbG95ZWVzIiwiZGVsZXRlSW5zdGFuY2VzIiwiZGVsZXRpbmdSdWxlcyIsInJ1bk1hc3NBY3Rpb24iLCJhY3Rpb25JZCIsInBhcmFtZXRlcnMiLCJxdWVyeVBhcmFtcyIsInByaW50IiwidHlwZSIsInByaW50RXhjZWwiLCJ0YWJsZUV4Y2VsIiwiY2hlY2tCeVBvcGQiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9Db21tb24vQ2FuZHlBcGlDbGllbnQvQ2FuZHlBcGlDbGllbnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcmVqZWN0IH0gZnJvbSBcIi4uL1R5cGluZ1V0aWxzXCI7XG5pbXBvcnQgeyBGZXRjaCB9IGZyb20gXCIuLi9IdHRwQ2xpZW50L0ZldGNoSW1wbGVtZW50YXRpb24vRmV0Y2hcIjtcbmltcG9ydCB7IEV4Y2VwdGlvbkxvZ2dlciwgSHR0cENsaWVudCwgSHR0cEVycm9yIH0gZnJvbSBcIi4uL0h0dHBDbGllbnQvSHR0cENsaWVudFwiO1xuaW1wb3J0IHsgSUh0dHBDbGllbnQgfSBmcm9tIFwiLi4vSHR0cENsaWVudC9JSHR0cENsaWVudFwiO1xuaW1wb3J0IHsgQXV0aGVudGljYXRpb25Nb2RlLCBjcmVhdGVBdXRoZW50aWNhdGlvblByb3ZpZGVyIH0gZnJvbSBcIi4uL0h0dHBDbGllbnQvQXV0aGVudGljYXRpb25Nb2RlXCI7XG5pbXBvcnQgeyBJQ29tYmluZUJ5VHJhbnNmZXJzIH0gZnJvbSBcIi4uLy4uL0VuZ2luZS9zcmMvRW5naW5lL0NvcmUvTW9kYWxNYW5hZ2VyL01vZGFscy9VcGxvYWRTZWN0aW9uL1R5cGVzXCI7XG5pbXBvcnQgeyBBYnNvbHV0ZU1vZGVsUGF0aCwgY29udmVydFRvTGVnYWN5UGF0aCB9IGZyb20gXCIuLi9Nb2RlbFBhdGgvTW9kZWxQYXRoXCI7XG5cbmltcG9ydCB7XG4gICAgQmFzZUdldEZ1ZlJlc3BvbnNlLFxuICAgIENoZWNrU2NlbmFyaW9UeXBlLFxuICAgIERyYWZ0U2V0dGluZ3MsXG4gICAgRnVmV2l0aEF0dGFjaG1lbnRzUmVzcG9uc2UsXG4gICAgSUNhbmR5QXBpQ2xpZW50LFxuICAgIElDYW5keUFwaURyYWZ0Q2xpZW50LFxuICAgIElJbm5lckNoYW5nZVJlc3VsdCxcbiAgICBJSW5uZXJDaGFuZ2VTdWNjZXNzUmVzdWx0LFxuICAgIFBhdGhMb2FkU3BlY2lmaWNhdGlvbixcbn0gZnJvbSBcIi4vSUNhbmR5QXBpQ2xpZW50XCI7XG5pbXBvcnQgeyBTZXJ2ZXJFcnJvckxvZyB9IGZyb20gXCIuL1R5cGVzL0Vycm9yTG9nL1NlcnZlckVycm9yTG9nXCI7XG5pbXBvcnQgeyBTZXJ2ZXJJbm5lclJlc3BvbnNlLCBTZXJ2ZXJKc29uUmVzcG9uc2UgfSBmcm9tIFwiLi9UeXBlcy9HZXRJbm5lci9TZXJ2ZXJJbm5lclJlc3BvbnNlXCI7XG5pbXBvcnQge1xuICAgIEV4Y2Vsc1RvUGFydGlhbEZ1ZnNSZXNwb25zZSxcbiAgICBGaWxlUHJvcGVydGllcyxcbiAgICBJbXBvcnRGcm9tUGFydGlhbEZ1ZnNCeVBhdGhSZXNwb25zZSxcbiAgICBTZXJ2ZXJFcnJvclJlc3BvbnNlLFxuICAgIFVwbG9hZEZpbGVQcm9wZXJ0aWVzUmVzcG9uc2UsXG59IGZyb20gXCIuL1R5cGVzL0RyYWZ0QWN0aW9ucy9GaWxlUHJvcGVydGllc1wiO1xuaW1wb3J0IHsgQ3JlYXRlRHJhZnRSZXNwb25zZSB9IGZyb20gXCIuL1R5cGVzL0NyZWF0ZURyYWZ0L0NyZWF0ZURyYWZ0UmVzcG9uc2VcIjtcbmltcG9ydCB7IENyZWF0ZUV4cGxhbmF0b3J5Tm90ZVJlc3BvbnNlIH0gZnJvbSBcIi4vVHlwZXMvRXhwbGFuYXRvcnlOb3RlL0NyZWF0ZUV4cGxhbmF0b3J5Tm90ZVJlc3BvbnNlXCI7XG5pbXBvcnQgeyBEcmFmdEZ1bGxJZCB9IGZyb20gXCIuL1R5cGVzL0RyYWZ0RnVsbElkXCI7XG5pbXBvcnQgeyBTZXJ2ZXJDaGFuZ2VTZXQgfSBmcm9tIFwiLi9UeXBlcy9DaGFuZ2VTZXQvU2VydmVyQ2hhbmdlU2V0XCI7XG5pbXBvcnQgeyBTZXJ2ZXJUYXNrLCBWZXJpZnlBbmRGaXhGbnNSZXF1aXJlbWVudHNUYXNrSW5mbyB9IGZyb20gXCIuL1R5cGVzL1Rhc2tzL1Rhc2tzXCI7XG5pbXBvcnQgeyBGb2N1c1NlcnZlckVycm9yQ29kZSwgR2V0QnlJbm5SZXNwb25zZSB9IGZyb20gXCIuL1R5cGVzL0ZvY3VzL0ZvY3VzVHlwZXNcIjtcbmltcG9ydCB7IEF0dGFjaEluZm8gfSBmcm9tIFwiLi9UeXBlcy9BdHRhY2htZW50cy9BdHRhY21lbnRzXCI7XG5pbXBvcnQgeyBEcmFmdFByZXNlbnRhdGlvblR5cGUgfSBmcm9tIFwiLi9UeXBlcy9QcmVzZW50YXRpb25zL0RyYWZ0UHJlc2VudGF0aW9uVHlwZVwiO1xuaW1wb3J0IHsgUHJlc2VudGF0aW9uQ29udGVudCB9IGZyb20gXCIuL1R5cGVzL1ByZXNlbnRhdGlvbnMvUHJlc2VudGF0aW9uQ29udGVudFwiO1xuaW1wb3J0IHsgQ29udmVydERyYWZ0UmVxdWVzdCB9IGZyb20gXCIuL1R5cGVzL0RyYWZ0QWN0aW9ucy9Db252ZXJ0RHJhZnRSZXF1ZXN0XCI7XG5pbXBvcnQgeyBHZXRBdHRhY2htZW50c1Jlc3BvbnNlIH0gZnJvbSBcIi4vVHlwZXMvQXR0YWNobWVudHMvR2V0QXR0YWNobWVudHNSZXNwb25zZVwiO1xuaW1wb3J0IHsgRm9jdXNTZXJ2ZXJSZXNwb25zZSB9IGZyb20gXCIuL1R5cGVzL0ZvY3VzL0ZvY3VzU2VydmVyUmVzcG9uc2VcIjtcbmltcG9ydCB7IEdldFRhc2tzU2VydmVyUmVzcG9uc2UgfSBmcm9tIFwiLi9UeXBlcy9UYXNrcy9HZXRUYXNrc1NlcnZlclJlc3BvbnNlXCI7XG5pbXBvcnQgeyBTZXJ2ZXJSZXF1aXNpdGVzUmVzcG9uc2UgfSBmcm9tIFwiLi9UeXBlcy9HZXRJbm5lci9TZXJ2ZXJSZXF1aXNpdGVzUmVzcG9uc2VcIjtcbmltcG9ydCB7IGlzQnVmZmVyIH0gZnJvbSBcIi4vSXNCdWZmZXJcIjtcbmltcG9ydCB7IENvbWJpbmF0b3JUeXBlLCBDb21iaW5lRnVmUmVzdWx0LCBGdWZDb21iaW5lTWV0aG9kIH0gZnJvbSBcIi4vVHlwZXMvRHJhZnRBY3Rpb25zL0NvbWJpbmVGdWZSZXN1bHRcIjtcbmltcG9ydCB7IEZlYXR1cmVGbGFnc1Jlc3BvbnNlIH0gZnJvbSBcIi4vVHlwZXMvRmVhdHVyZUZsYWdzL0ZlYXR1cmVGbGFnc1Jlc3BvbnNlXCI7XG5pbXBvcnQgeyBGdWZTaXplVG9vTGFyZ2VFcnJvciB9IGZyb20gXCIuL1R5cGVzL0RyYWZ0QWN0aW9ucy9GdWZTaXplVG9vTGFyZ2VFcnJvclwiO1xuaW1wb3J0IHsgSW1wb3J0RW1wbG95ZWVzUmVxdWVzdCB9IGZyb20gXCIuL1R5cGVzL1N0YWZmL0ltcG9ydEVtcGxveWVlc1JlcXVlc3RcIjtcbmltcG9ydCB7IE1hc3NBY3Rpb25QYXJhbWV0ZXJzIH0gZnJvbSBcIi4vVHlwZXMvTWFzc0FjdGlvbnMvTWFzc0FjdGlvblBhcmFtZXRlcnNcIjtcbmltcG9ydCB7IFByaW50VHlwZSB9IGZyb20gXCIuL1R5cGVzL1ByaW50L1ByaW50VHlwZVwiO1xuaW1wb3J0IHsgUHJpbnRSZXNwb25zZSB9IGZyb20gXCIuL1R5cGVzL1ByaW50L1ByaW50UmVzcG9uc2VcIjtcbmltcG9ydCB7IFNlcnZlclJhd1Jlc3BvbnNlIH0gZnJvbSBcIi4vVHlwZXMvR2V0SW5uZXIvU2VydmVyUmF3UmVzcG9uc2VcIjtcbmltcG9ydCB7IFRlc3RDbGFzc2lmaWNhdGlvbiB9IGZyb20gXCIuL1R5cGVzL1Rlc3RDbGFzc2lmaWNhdGlvblwiO1xuaW1wb3J0IHsgQ2FuZHlQb3BkUHJvdG9jb2wgfSBmcm9tIFwiLi9UeXBlcy9FcnJvckxvZy9DYW5keVBvcGRQcm90b2NvbFwiO1xuaW1wb3J0IHsgSW5zdGFuY2VzRGVsZXRpbmdSdWxlIH0gZnJvbSBcIi4vVHlwZXMvSW5zdGFuY2VzRGVsZXRpbmcvSW5zdGFuY2VzRGVsZXRpbmdSdWxlXCI7XG5pbXBvcnQgeyBWYWx1ZUZvckluc3RhbmNlc1NldHRpbmdSdWxlIH0gZnJvbSBcIi4vVHlwZXMvTWFzc0FjdGlvbnMvVmFsdWVGb3JJbnN0YW5jZXNTZXR0aW5nUnVsZVwiO1xuaW1wb3J0IHsgSW5uZXJRdWVyeVJlcXVlc3QgfSBmcm9tIFwiLi9UeXBlcy9RdWVyeUNvbGxlY3Rvbi9Jbm5lclF1ZXJ5UmVxdWVzdFwiO1xuaW1wb3J0IHsgSW5uZXJRdWVyeVJlc3BvbnNlIH0gZnJvbSBcIi4vVHlwZXMvUXVlcnlDb2xsZWN0b24vSW5uZXJRdWVyeVJlc3BvbnNlXCI7XG5pbXBvcnQgeyBSZXNvbHZlSW5uZXJQYXRoUmVxdWVzdCB9IGZyb20gXCIuL1R5cGVzL0Vycm9yTG9nL1Jlc29sdmVJbm5lclBhdGhSZXF1ZXN0XCI7XG5pbXBvcnQgeyBSZXNvbHZlUGF0aFJlc3BvbnNlIH0gZnJvbSBcIi4vVHlwZXMvRXJyb3JMb2cvUmVzb2x2ZVBhdGhSZXNwb25zZVwiO1xuXG5jb25zdCBzdHJhbmdlT3B0aW9ucyA9IHsgc3JjOiBcImNoYW5nZVNldFwiLCBkYXRhVmVyc2lvbjogXCIwXCIgfTtcblxuZXhwb3J0IGVudW0gU2VydmVyRXJyb3JzIHtcbiAgICBGdWZTaXplVG9vTGFyZ2UgPSBcIkZ1ZlNpemVUb29MYXJnZVwiLFxuICAgIEJhZFJlcXVlc3QgPSBcIkJhZFJlcXVlc3RcIixcbiAgICBVbmtub3duRXJyb3IgPSBcIlVua25vd25FcnJvclwiLFxufVxuXG5mdW5jdGlvbiBjb252ZXJ0UGF0aExvYWRTcGVjaWZpY2F0aW9uVG9TdHJpbmcoc3BlYzogUGF0aExvYWRTcGVjaWZpY2F0aW9uKTogc3RyaW5nIHtcbiAgICByZXR1cm4gKFxuICAgICAgICAoc3BlYy5za2lwID8gXCItXCIgOiBcIlwiKSArXG4gICAgICAgIChzcGVjLnBhdGhPclBhdGhQcmVmaXggPT09IFwiKlwiID8gc3BlYy5wYXRoT3JQYXRoUHJlZml4IDogc3BlYy5wYXRoT3JQYXRoUHJlZml4LnRvTGVnYWN5UGF0aCgpKVxuICAgICk7XG59XG5cbmV4cG9ydCBjbGFzcyBDYW5keUFwaUNsaWVudCBpbXBsZW1lbnRzIElDYW5keUFwaUNsaWVudCB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBodHRwQ2xpZW50OiBJSHR0cENsaWVudDtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICAgICAgZmV0Y2hJbXBsOiBGZXRjaCxcbiAgICAgICAgYmFzZVVybDogc3RyaW5nLFxuICAgICAgICByZXNvdXJjZVpvbmU6IHVuZGVmaW5lZCB8IHN0cmluZyxcbiAgICAgICAgYXV0aGVudGljYXRpb246IHVuZGVmaW5lZCB8IEF1dGhlbnRpY2F0aW9uTW9kZSxcbiAgICAgICAgZXhjZXB0aW9uTG9nZ2VyPzogRXhjZXB0aW9uTG9nZ2VyXG4gICAgKSB7XG4gICAgICAgIHRoaXMuaHR0cENsaWVudCA9IG5ldyBIdHRwQ2xpZW50KFxuICAgICAgICAgICAgZmV0Y2hJbXBsLFxuICAgICAgICAgICAgYmFzZVVybCxcbiAgICAgICAgICAgIGNyZWF0ZUF1dGhlbnRpY2F0aW9uUHJvdmlkZXIoYXV0aGVudGljYXRpb24pLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJlc291cmNlWm9uZTogcmVzb3VyY2Vab25lLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGV4Y2VwdGlvbkxvZ2dlclxuICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBmb3JEcmFmdChkcmFmdEZ1bGxJZDogRHJhZnRGdWxsSWQpOiBJQ2FuZHlBcGlEcmFmdENsaWVudCB7XG4gICAgICAgIHJldHVybiBuZXcgQ2FuZHlBcGlEcmFmdENsaWVudCh0aGlzLmh0dHBDbGllbnQsIGRyYWZ0RnVsbElkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0SW5mb0J5SW5ucyhkcmFmdEZ1bGxJZDogRHJhZnRGdWxsSWQsIGlubnM6IHJlYWRvbmx5IHN0cmluZ1tdKTogUHJvbWlzZTxHZXRCeUlublJlc3BvbnNlPiB7XG4gICAgICAgIGNvbnN0IHBhdGhzID0gaW5ucy5tYXAoaW5uID0+IGBAZm9jdXMvJHtpbm59YCk7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdCh0aGlzLmdldERyYWZ0VXJsKGRyYWZ0RnVsbElkLCBcImdldC1pbm5lclwiKSlcbiAgICAgICAgICAgIC53aXRoSnNvbkJvZHkocGF0aHMpXG4gICAgICAgICAgICAuanNvbjxGb2N1c1NlcnZlclJlc3BvbnNlPigpO1xuICAgICAgICBjb25zdCByZXN1bHQ6IEdldEJ5SW5uUmVzcG9uc2UgPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCBpbm4gb2YgaW5ucykge1xuICAgICAgICAgICAgY29uc3QgaW5uU2VydmVyVmFsdWUgPSByZXNwb25zZVtgQGZvY3VzLyR7aW5ufWBdPy52YWx1ZTtcbiAgICAgICAgICAgIGlmIChpbm5TZXJ2ZXJWYWx1ZSA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXN1bHRbaW5uXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6IFwiU2VydmVyIGRvZXMgbm90IHJldHVybiBpbm4gaW5mb1wiLFxuICAgICAgICAgICAgICAgICAgICBlcnJvckNvZGU6IEZvY3VzU2VydmVyRXJyb3JDb2RlLk5vSW5uRXJyb3IsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0W2lubl0gPSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBpbm5TZXJ2ZXJWYWx1ZS52YWx1ZSA/PyB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgIGVycm9yQ29kZTogaW5uU2VydmVyVmFsdWUuZXJyb3JDb2RlID8/IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGlublNlcnZlclZhbHVlLmVycm9yID8/IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldEFsbEdmdnMoYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbCk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICAgICAgY29uc3QgYm9keSA9IGF3YWl0IHRoaXMuaHR0cENsaWVudC5nZXQoYGJ1aWxkLXNlcnZlci9nZnZzYCkuanNvbjxzdHJpbmdbXT4oKTtcbiAgICAgICAgcmV0dXJuIGJvZHk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGNyZWF0ZURyYWZ0RnJvbURyaXZlKFxuICAgICAgICBuczogc3RyaW5nLFxuICAgICAgICBmdWZEcml2ZVVyaTogc3RyaW5nLFxuICAgICAgICBhYm9ydFNpZ25hbD86IEFib3J0U2lnbmFsXG4gICAgKTogUHJvbWlzZTxDcmVhdGVEcmFmdFJlc3BvbnNlPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KGB2MS9ucy8ke25zfS9jcmVhdGUtZHJhZnQtZnJvbS1kcml2ZWApXG4gICAgICAgICAgICAud2l0aFF1ZXJ5UGFyYW1zKHtcbiAgICAgICAgICAgICAgICBuczogbnMsXG4gICAgICAgICAgICAgICAgZnVmRHJpdmVVcmk6IGZ1ZkRyaXZlVXJpLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC53aXRoQWJvcnRTaWduYWwoYWJvcnRTaWduYWwpXG4gICAgICAgICAgICAuanNvbjxDcmVhdGVEcmFmdFJlc3BvbnNlPigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBjcmVhdGVFbXB0eURyYWZ0KG5zOiBzdHJpbmcsIGdmdjogc3RyaW5nLCBhYm9ydFNpZ25hbD86IEFib3J0U2lnbmFsKTogUHJvbWlzZTxDcmVhdGVEcmFmdFJlc3BvbnNlPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KGB2MS9ucy8ke25zfS9jcmVhdGUtZHJhZnRgKVxuICAgICAgICAgICAgLndpdGhRdWVyeVBhcmFtcyh7IGdmdjogZ2Z2IH0pXG4gICAgICAgICAgICAud2l0aEFib3J0U2lnbmFsKGFib3J0U2lnbmFsKVxuICAgICAgICAgICAgLmpzb248Q3JlYXRlRHJhZnRSZXNwb25zZT4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY3JlYXRlRHJhZnQobnM6IHN0cmluZywgZ2Z2OiBzdHJpbmcpOiBQcm9taXNlPENyZWF0ZURyYWZ0UmVzcG9uc2U+O1xuICAgIHB1YmxpYyBjcmVhdGVEcmFmdChuczogc3RyaW5nLCBnZnY6IHVuZGVmaW5lZCwgZnVmQ29udGVudDogQnVmZmVyKTogUHJvbWlzZTxDcmVhdGVEcmFmdFJlc3BvbnNlPjtcbiAgICBwdWJsaWMgYXN5bmMgY3JlYXRlRHJhZnQobnM6IHN0cmluZywgZ2Z2OiB1bmRlZmluZWQgfCBzdHJpbmcsIGZ1ZkNvbnRlbnQ/OiBCdWZmZXIpOiBQcm9taXNlPENyZWF0ZURyYWZ0UmVzcG9uc2U+IHtcbiAgICAgICAgaWYgKGdmdiA9PSB1bmRlZmluZWQgJiYgZnVmQ29udGVudCAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgICAgICAucG9zdChgdjEvbnMvJHtuc30vY3JlYXRlLWRyYWZ0YClcbiAgICAgICAgICAgICAgICAud2l0aENvbnRlbnRUeXBlKFwiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtXCIpXG4gICAgICAgICAgICAgICAgLndpdGhCb2R5RnJvbUJ1ZmZlcihmdWZDb250ZW50KVxuICAgICAgICAgICAgICAgIC5qc29uPENyZWF0ZURyYWZ0UmVzcG9uc2U+KCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGdmdiAhPSB1bmRlZmluZWQgJiYgZnVmQ29udGVudCA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgICAgICAucG9zdChgdjEvbnMvJHtuc30vY3JlYXRlLWRyYWZ0YClcbiAgICAgICAgICAgICAgICAud2l0aFF1ZXJ5UGFyYW1zKHsgZ2Z2OiBnZnYgfSlcbiAgICAgICAgICAgICAgICAud2l0aENvbnRlbnRUeXBlKFwiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtXCIpXG4gICAgICAgICAgICAgICAgLndpdGhCb2R5RnJvbUJ1ZmZlcihCdWZmZXIuZnJvbShbXSkpXG4gICAgICAgICAgICAgICAgLmpzb248Q3JlYXRlRHJhZnRSZXNwb25zZT4oKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZ2Z2ID09IHVuZGVmaW5lZCAmJiBmdWZDb250ZW50ID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IGNyZWF0ZSBkcmFmdDogbm8gZ2Z2IGFuZCBubyBmdWYgc3BlY2lmaWVkXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KGB2MS9ucy8ke25zfS9jcmVhdGUtZHJhZnRgKVxuICAgICAgICAgICAgLndpdGhRdWVyeVBhcmFtcyh7IGdmdjogZ2Z2IH0pXG4gICAgICAgICAgICAud2l0aENvbnRlbnRUeXBlKFwiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtXCIpXG4gICAgICAgICAgICAud2l0aEJvZHlGcm9tQnVmZmVyKGZ1ZkNvbnRlbnQpXG4gICAgICAgICAgICAuanNvbjxDcmVhdGVEcmFmdFJlc3BvbnNlPigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBjaGVja0FsaXZlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLmh0dHBDbGllbnQuZ2V0KGBfc3RhdHVzL3BpbmdgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldERyYWZ0VXJsKGRyYWZ0RnVsbElkOiBEcmFmdEZ1bGxJZCwgZHJhZnRSZWxhdGVkVXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gYHYxL25zLyR7ZHJhZnRGdWxsSWQubnN9L2RyYWZ0cy8ke2RyYWZ0RnVsbElkLmRyYWZ0SWR9LyR7ZHJhZnRSZWxhdGVkVXJsfWA7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldEZlYXR1cmVGbGFncygpOiBQcm9taXNlPEZlYXR1cmVGbGFnc1Jlc3BvbnNlPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmh0dHBDbGllbnQuZ2V0KFwidjEvZmVhdHVyZXMvZmxhZ3NcIikuanNvbjxGZWF0dXJlRmxhZ3NSZXNwb25zZT4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgc2V0VGVzdENsYXNzaWZpY2F0aW9uKHRlc3RDbGFzc2lmaWNhdGlvbjogVGVzdENsYXNzaWZpY2F0aW9uKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdChcIi90ZXN0b25seS9tb2NrLWNsYXNzaWZpY2F0aW9uXCIpXG4gICAgICAgICAgICAud2l0aFJhd0JvZHkoSlNPTi5zdHJpbmdpZnkodGVzdENsYXNzaWZpY2F0aW9uKSk7XG4gICAgICAgIGlmICghKHJlc3BvbnNlLnN0YXR1cyA+PSAyMDAgJiYgcmVzcG9uc2Uuc3RhdHVzIDwgMzAwKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBCYWQgcmVzcG9uc2UuIENvZGUgaXMgJHtyZXNwb25zZS5zdGF0dXN9LmApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIENhbmR5QXBpRHJhZnRDbGllbnQgaW1wbGVtZW50cyBJQ2FuZHlBcGlEcmFmdENsaWVudCB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBodHRwQ2xpZW50OiBJSHR0cENsaWVudDtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRyYWZ0RnVsbElkOiBEcmFmdEZ1bGxJZDtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihodHRwQ2xpZW50OiBJSHR0cENsaWVudCwgZHJhZnRGdWxsSWQ6IERyYWZ0RnVsbElkKSB7XG4gICAgICAgIHRoaXMuaHR0cENsaWVudCA9IGh0dHBDbGllbnQ7XG4gICAgICAgIHRoaXMuZHJhZnRGdWxsSWQgPSBkcmFmdEZ1bGxJZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0SHJlZlRvSW5uZXJFZGl0b3IoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC51cmwoYGlubmVyLWVkaXRvci9ucy8ke3RoaXMuZHJhZnRGdWxsSWQubnN9L2RyYWZ0cy8ke3RoaXMuZHJhZnRGdWxsSWQuZHJhZnRJZH1gKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0SHJlZkRvd25sb2FkRnVmKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQudXJsKHRoaXMuZ2V0RHJhZnRVcmwoXCJnZXQtZnVmXCIpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0SHJlZlRvQ29udmVydGF0aW9uTG9nKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQudXJsKHRoaXMuZ2V0RHJhZnRVcmwoXCJjb252ZXJzaW9uXCIpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0SHJlZlRvRG93bmxvYWRJbm5lckZ1ZigpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRIcmVmRG93bmxvYWREcmFmdFByZXNlbnRhdGlvbihEcmFmdFByZXNlbnRhdGlvblR5cGUuaW5uZXJGdWYpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRIcmVmVG9Eb3dubG9hZENsaWVudEluZm8oKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0SHJlZkRvd25sb2FkRHJhZnRQcmVzZW50YXRpb24oRHJhZnRQcmVzZW50YXRpb25UeXBlLmNsaWVudEluZm8pO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRIcmVmVG9Eb3dubG9hZEZvcm1zQ2xpZW50SW5mbygpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRIcmVmRG93bmxvYWREcmFmdFByZXNlbnRhdGlvbihEcmFmdFByZXNlbnRhdGlvblR5cGUuZm9ybXNDbGllbnRJbmZvKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0SHJlZkRvd25sb2FkSW5uZXIoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0SHJlZkRvd25sb2FkRHJhZnRQcmVzZW50YXRpb24oRHJhZnRQcmVzZW50YXRpb25UeXBlLmlubmVyKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0RXJyb3JMb2coKTogUHJvbWlzZTxTZXJ2ZXJFcnJvckxvZz4ge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LmdldCh0aGlzLmdldERyYWZ0UHJlc2VudGF0aW9uVXJsKERyYWZ0UHJlc2VudGF0aW9uVHlwZS5lcnJvckxvZykpLmpzb248U2VydmVyRXJyb3JMb2c+KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldEVycm9yTG9nV2l0aENoZWNrU2NlbmFyaW9zKGNoZWNrU2NlbmFyaW9zOiBDaGVja1NjZW5hcmlvVHlwZVtdKTogUHJvbWlzZTxTZXJ2ZXJFcnJvckxvZz4ge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdCh0aGlzLmdldERyYWZ0VXJsKFwiZXJyb3Jsb2dcIikpXG4gICAgICAgICAgICAud2l0aEpzb25Cb2R5KHsgY2hlY2tTY2VuYXJpb3M6IGNoZWNrU2NlbmFyaW9zIH0pXG4gICAgICAgICAgICAuanNvbjxTZXJ2ZXJFcnJvckxvZz4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0VGFza0J5SWQodGFza0lkOiBzdHJpbmcpOiBQcm9taXNlPFNlcnZlclRhc2sgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgY29uc3QgdGFza3MgPSBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KHRoaXMuZ2V0RHJhZnRVcmwoXCJnZXQtaW5uZXJcIikpXG4gICAgICAgICAgICAud2l0aEpzb25Cb2R5KFtgQHRhc2svKmBdKVxuICAgICAgICAgICAgLmpzb248R2V0VGFza3NTZXJ2ZXJSZXNwb25zZT4oKTtcbiAgICAgICAgcmV0dXJuIHRhc2tzW2BAdGFzay8ke3Rhc2tJZH1gXT8udmFsdWU7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldEZ1ZldpdGhBdHRhY2htZW50cygpOiBQcm9taXNlPEZ1ZldpdGhBdHRhY2htZW50c1Jlc3BvbnNlIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAuZ2V0KHRoaXMuZ2V0RHJhZnRVcmwoXCJnZXQtZnVmLXdpdGgtYXR0YWNobWVudHNcIikpXG4gICAgICAgICAgICAuanNvbjxGdWZXaXRoQXR0YWNobWVudHNSZXNwb25zZT4oKTtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRQYXJ0aWFsRnVmKHJ1bGVzOiBzdHJpbmdbXSk6IFByb21pc2U8QmFzZUdldEZ1ZlJlc3BvbnNlIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdCh0aGlzLmdldERyYWZ0VXJsKFwiZ2V0LXBhcnRpYWwtZnVmXCIpKVxuICAgICAgICAgICAgLndpdGhKc29uQm9keShydWxlcylcbiAgICAgICAgICAgIC5qc29uPEJhc2VHZXRGdWZSZXNwb25zZT4oKTtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRBbGxUYXNrcygpOiBQcm9taXNlPFNlcnZlclRhc2tbXT4ge1xuICAgICAgICBjb25zdCB0YXNrcyA9IGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFVybChcImdldC1pbm5lclwiKSlcbiAgICAgICAgICAgIC53aXRoSnNvbkJvZHkoW2BAdGFzay8qYF0pXG4gICAgICAgICAgICAuanNvbjxHZXRUYXNrc1NlcnZlclJlc3BvbnNlPigpO1xuICAgICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0YXNrcykubWFwKHggPT4geC52YWx1ZSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGVucXVldWVUYXNrKHRhc2tJZDogc3RyaW5nLCB0YXNrSW5mbzogVmVyaWZ5QW5kRml4Rm5zUmVxdWlyZW1lbnRzVGFza0luZm8pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdCh0aGlzLmdldERyYWZ0UHJlc2VudGF0aW9uVXJsKERyYWZ0UHJlc2VudGF0aW9uVHlwZS5pbm5lcikpXG4gICAgICAgICAgICAud2l0aFF1ZXJ5UGFyYW1zKHN0cmFuZ2VPcHRpb25zKVxuICAgICAgICAgICAgLndpdGhKc29uQm9keSh7XG4gICAgICAgICAgICAgICAgYWRkZWQ6IFtdLFxuICAgICAgICAgICAgICAgIGNoYW5nZWQ6IHtcbiAgICAgICAgICAgICAgICAgICAgW2BAdGFzay8ke3Rhc2tJZH1gXToge1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4udGFza0luZm8sXG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogdGFza0lkLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgcmVtb3ZlZDogW10sXG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgY2FuY2VsVGFzayh0YXNrSWQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KHRoaXMuZ2V0RHJhZnRQcmVzZW50YXRpb25VcmwoRHJhZnRQcmVzZW50YXRpb25UeXBlLmlubmVyKSlcbiAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbXMoc3RyYW5nZU9wdGlvbnMpXG4gICAgICAgICAgICAud2l0aEpzb25Cb2R5KHtcbiAgICAgICAgICAgICAgICBhZGRlZDogW10sXG4gICAgICAgICAgICAgICAgY2hhbmdlZDoge30sXG4gICAgICAgICAgICAgICAgcmVtb3ZlZDogW2BAdGFzay8ke3Rhc2tJZH1gXSxcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRFeHBlcnRFcnJvckxvZygpOiBQcm9taXNlPFNlcnZlckVycm9yTG9nPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5nZXQodGhpcy5nZXREcmFmdFByZXNlbnRhdGlvblVybChEcmFmdFByZXNlbnRhdGlvblR5cGUuZXJyb3Jsb2dFeHBlcnQpKVxuICAgICAgICAgICAgLmpzb248U2VydmVyRXJyb3JMb2c+KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEhyZWZUb0Vycm9yTG9nUGRmKGVycm9yTG9nTmFtZTogc3RyaW5nLCBwcm9wc05hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQudXJsKHRoaXMuZ2V0RHJhZnRVcmwoXCJwcmVzZW50YXRpb25zL2Vycm9yTG9nL3ByaW50XCIpLCB7XG4gICAgICAgICAgICBlcnJvckxvZ05hbWU6IGVycm9yTG9nTmFtZSxcbiAgICAgICAgICAgIHByb3BzRHJpdmVOYW1lOiBwcm9wc05hbWUsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBjbGVhckRyYWZ0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLmh0dHBDbGllbnQucG9zdCh0aGlzLmdldERyYWZ0VXJsKFwiY2xlYXJcIikpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBjb252ZXJ0RHJhZnRGcm9tUHJldkdmdih7IHByZXZHZnZEcmFmdElkLCBnZnYgfTogQ29udmVydERyYWZ0UmVxdWVzdCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLmh0dHBDbGllbnQucG9zdCh0aGlzLmdldERyYWZ0VXJsKFwiY29udmVydFwiKSkud2l0aFF1ZXJ5UGFyYW1zKHtcbiAgICAgICAgICAgIGlkOiBwcmV2R2Z2RHJhZnRJZCxcbiAgICAgICAgICAgIGdmdjogZ2Z2LFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgc2VuZENoYW5nZVNldChkYXRhOiBTZXJ2ZXJDaGFuZ2VTZXQsIGN1cnJlbnREYXRhVmVyc2lvbjogbnVtYmVyKTogUHJvbWlzZTxJSW5uZXJDaGFuZ2VSZXN1bHQ+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdCh0aGlzLmdldERyYWZ0VXJsKFwiaW5uZXJcIikpXG4gICAgICAgICAgICAud2l0aFF1ZXJ5UGFyYW1zKHsgZGF0YVZlcnNpb246IGN1cnJlbnREYXRhVmVyc2lvbiB9KVxuICAgICAgICAgICAgLndpdGhKc29uQm9keShkYXRhKVxuICAgICAgICAgICAgLmFjY2VwdENvZGUoNDA5KTtcblxuICAgICAgICBjb25zdCBnZXRTdWNjZXNzUmVzdWx0ID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGF0YVJlc3VsdCA9IGF3YWl0IHJlc3VsdC5qc29uPHsgZGF0YVZlcnNpb24/OiBudW1iZXIgfT4oKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgZGF0YVZlcnNpb246IGRhdGFSZXN1bHQ/LmRhdGFWZXJzaW9uID8/IHJlamVjdChcIkludmFsaWQgZGF0YVZlcnNpb24gYWZ0ZXIgYXBwbHlpbmcgY2hhbmdlIHNldC5cIiksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiByZXN1bHQuc3RhdHVzID09IDIwMCA/IGF3YWl0IGdldFN1Y2Nlc3NSZXN1bHQoKSA6IHJlc3VsdC5zdGF0dXM7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHNlbmRDaGFuZ2VXaXRoTm9ybWFsaXphdGlvblNldChcbiAgICAgICAgZGF0YTogU2VydmVyQ2hhbmdlU2V0LFxuICAgICAgICBjdXJyZW50RGF0YVZlcnNpb246IG51bWJlcixcbiAgICAgICAgbm9ybWFsaXplcklkPzogc3RyaW5nXG4gICAgKTogUHJvbWlzZTxJSW5uZXJDaGFuZ2VSZXN1bHQ+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdCh0aGlzLmdldERyYWZ0VXJsKFwiaW5uZXIvcGF0Y2gtd2l0aC1ub3JtYWxpemF0aW9uXCIpKVxuICAgICAgICAgICAgLndpdGhRdWVyeVBhcmFtcyh7IGRhdGFWZXJzaW9uOiBjdXJyZW50RGF0YVZlcnNpb24sIG5vcm1hbGl6ZXJJZDogbm9ybWFsaXplcklkIH0pXG4gICAgICAgICAgICAud2l0aEpzb25Cb2R5KGRhdGEpXG4gICAgICAgICAgICAuYWNjZXB0Q29kZSg0MDkpO1xuXG4gICAgICAgIHJldHVybiByZXN1bHQuc3RhdHVzID09IDIwMCA/IGF3YWl0IHJlc3VsdC5qc29uPElJbm5lckNoYW5nZVN1Y2Nlc3NSZXN1bHQ+KCkgOiByZXN1bHQuc3RhdHVzO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZW5kQ2hhbmdlU2V0U3luYyhcbiAgICAgICAgZGF0YTogU2VydmVyQ2hhbmdlU2V0LFxuICAgICAgICBjdXJyZW50RGF0YVZlcnNpb246IG51bWJlcixcbiAgICAgICAgbm9ybWFsaXplcklkPzogc3RyaW5nXG4gICAgKTogSUlubmVyQ2hhbmdlUmVzdWx0IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5odHRwQ2xpZW50LnBvc3RTeW5jKHRoaXMuZ2V0RHJhZnRVcmwoXCJpbm5lclwiKSwgeyBkYXRhVmVyc2lvbjogY3VycmVudERhdGFWZXJzaW9uIH0sIGRhdGEpO1xuXG4gICAgICAgIGNvbnN0IGdldFN1Y2Nlc3NSZXN1bHRTeW5jID0gKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGF0YVJlc3VsdCA9IHJlc3VsdC5qc29uPHsgZGF0YVZlcnNpb24/OiBudW1iZXIgfT4oKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgZGF0YVZlcnNpb246IGRhdGFSZXN1bHQ/LmRhdGFWZXJzaW9uID8/IHJlamVjdChcIkludmFsaWQgZGF0YVZlcnNpb24gYWZ0ZXIgYXBwbHlpbmcgY2hhbmdlIHNldC5cIiksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gcmVzdWx0LnN0YXR1cyA9PSAyMDAgPyBnZXRTdWNjZXNzUmVzdWx0U3luYygpIDogcmVzdWx0LnN0YXR1cztcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0UmVxdWlzaXRlcyhyZXF1aXNpdGVMaXN0OiByZWFkb25seSBzdHJpbmdbXSk6IFByb21pc2U8U2VydmVyUmVxdWlzaXRlc1Jlc3BvbnNlPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KHRoaXMuZ2V0RHJhZnRVcmwoXCJnZXQtaW5uZXJcIikpXG4gICAgICAgICAgICAud2l0aEpzb25Cb2R5KHJlcXVpc2l0ZUxpc3QpXG4gICAgICAgICAgICAuanNvbjxTZXJ2ZXJSZXF1aXNpdGVzUmVzcG9uc2U+KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldElubmVyKHBhdGhzOiB1bmRlZmluZWQgfCByZWFkb25seSBzdHJpbmdbXSk6IFByb21pc2U8U2VydmVySW5uZXJSZXNwb25zZT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdCh0aGlzLmdldERyYWZ0VXJsKFwiZ2V0LWlubmVyXCIpKVxuICAgICAgICAgICAgLndpdGhKc29uQm9keShwYXRocylcbiAgICAgICAgICAgIC5qc29uPFNlcnZlcklubmVyUmVzcG9uc2U+KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFBhcnRpYWxJbm5lcihydWxlczogUGF0aExvYWRTcGVjaWZpY2F0aW9uW10sIG1heEluc3RhbmNlQ291bnQ/OiBudW1iZXIpOiBQcm9taXNlPFNlcnZlcklubmVyUmVzcG9uc2U+IHtcbiAgICAgICAgY29uc3QgY29udmVydGVkUnVsZXMgPSBydWxlcy5tYXAoY29udmVydFBhdGhMb2FkU3BlY2lmaWNhdGlvblRvU3RyaW5nKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFVybChcImdldC1wYXJ0aWFsLWlubmVyXCIpKVxuICAgICAgICAgICAgLndpdGhRdWVyeVBhcmFtcyhtYXhJbnN0YW5jZUNvdW50ICE9IHVuZGVmaW5lZCAmJiB7IG1heEluc3RhbmNlQ291bnQ6IG1heEluc3RhbmNlQ291bnQudG9TdHJpbmcoKSB9KVxuICAgICAgICAgICAgLndpdGhKc29uQm9keShjb252ZXJ0ZWRSdWxlcy5sZW5ndGggPiAwID8gY29udmVydGVkUnVsZXMgOiBbXCIqXCJdKVxuICAgICAgICAgICAgLmpzb248U2VydmVySW5uZXJSZXNwb25zZT4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0UGFydGlhbElubmVyQXNKc29uVHJlZShcbiAgICAgICAgcnVsZXM6IFBhdGhMb2FkU3BlY2lmaWNhdGlvbltdLFxuICAgICAgICBtYXhJbnN0YW5jZUNvdW50PzogbnVtYmVyXG4gICAgKTogUHJvbWlzZTxTZXJ2ZXJKc29uUmVzcG9uc2U+IHtcbiAgICAgICAgY29uc3QgY29udmVydGVkUnVsZXMgPSBydWxlcy5tYXAoY29udmVydFBhdGhMb2FkU3BlY2lmaWNhdGlvblRvU3RyaW5nKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFVybChcImdldC1wYXJ0aWFsLWlubmVyXCIpKVxuICAgICAgICAgICAgLndpdGhRdWVyeVBhcmFtcyhtYXhJbnN0YW5jZUNvdW50ICE9IHVuZGVmaW5lZCAmJiB7IG1heEluc3RhbmNlQ291bnQ6IG1heEluc3RhbmNlQ291bnQudG9TdHJpbmcoKSB9KVxuICAgICAgICAgICAgLndpdGhRdWVyeVBhcmFtcyh7IGZvcm1hdDogXCJKc29uVHJlZVwiIH0pXG4gICAgICAgICAgICAud2l0aEpzb25Cb2R5KGNvbnZlcnRlZFJ1bGVzLmxlbmd0aCA+IDAgPyBjb252ZXJ0ZWRSdWxlcyA6IFtcIipcIl0pXG4gICAgICAgICAgICAuanNvbjxTZXJ2ZXJKc29uUmVzcG9uc2U+KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFJhd1BhcnRpYWxJbm5lckFzSnNvblRyZWUoXG4gICAgICAgIHJ1bGVzOiByZWFkb25seSBQYXRoTG9hZFNwZWNpZmljYXRpb25bXSxcbiAgICAgICAgbWF4SW5zdGFuY2VDb3VudD86IG51bWJlclxuICAgICk6IFByb21pc2U8U2VydmVyUmF3UmVzcG9uc2U+IHtcbiAgICAgICAgY29uc3QgY29udmVydGVkUnVsZXMgPSBydWxlcy5tYXAoY29udmVydFBhdGhMb2FkU3BlY2lmaWNhdGlvblRvU3RyaW5nKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFVybChcImdldC1wYXJ0aWFsLWlubmVyMlwiKSlcbiAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbXMobWF4SW5zdGFuY2VDb3VudCAhPSB1bmRlZmluZWQgJiYgeyBtYXhJbnN0YW5jZUNvdW50OiBtYXhJbnN0YW5jZUNvdW50LnRvU3RyaW5nKCkgfSlcbiAgICAgICAgICAgIC53aXRoSnNvbkJvZHkoY29udmVydGVkUnVsZXMubGVuZ3RoID4gMCA/IGNvbnZlcnRlZFJ1bGVzIDogW1wiKlwiXSlcbiAgICAgICAgICAgIC5qc29uPFNlcnZlclJhd1Jlc3BvbnNlPigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXREYXRhVmVyc2lvbigpOiBQcm9taXNlPG51bWJlcj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LmdldCh0aGlzLmdldERyYWZ0VXJsKFwiaW5uZXIvZ2V0LWRhdGEtdmVyc2lvblwiKSkuanNvbjxudW1iZXI+KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldEV4cGxhbmF0b3J5Tm90ZSgpOiBQcm9taXNlPENyZWF0ZUV4cGxhbmF0b3J5Tm90ZVJlc3BvbnNlPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5nZXQodGhpcy5nZXREcmFmdFByZXNlbnRhdGlvblVybChEcmFmdFByZXNlbnRhdGlvblR5cGUuZXhwbGFuYXRvcnlOb3RlKSlcbiAgICAgICAgICAgIC5qc29uPENyZWF0ZUV4cGxhbmF0b3J5Tm90ZVJlc3BvbnNlPigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRBdHRhY2htZW50QnlJZChhdHRhY2htZW50SWQ6IHN0cmluZyk6IFByb21pc2U8QXR0YWNoSW5mbz4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KHRoaXMuZ2V0RHJhZnRVcmwoXCJnZXQtaW5uZXJcIikpXG4gICAgICAgICAgICAud2l0aEpzb25Cb2R5KFtgQGF0dGFjaG1lbnQvJHthdHRhY2htZW50SWR9YF0pXG4gICAgICAgICAgICAuanNvbjxHZXRBdHRhY2htZW50c1Jlc3BvbnNlPigpO1xuICAgICAgICByZXR1cm4gcmVzdWx0W2BAYXR0YWNobWVudC8ke2F0dGFjaG1lbnRJZH1gXT8udmFsdWUgPz8gcmVqZWN0KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldEFsbEF0dGFjaG1lbnRzKCk6IFByb21pc2U8QXR0YWNoSW5mb1tdPiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFVybChcImdldC1pbm5lclwiKSlcbiAgICAgICAgICAgIC53aXRoSnNvbkJvZHkoW2BAYXR0YWNobWVudC8qYF0pXG4gICAgICAgICAgICAuanNvbjxHZXRBdHRhY2htZW50c1Jlc3BvbnNlPigpO1xuICAgICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyhyZXN1bHQpLm1hcCh4ID0+IHgudmFsdWUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyByZW1vdmVBdHRhY2htZW50cyhhdHRhY2htZW50SWRzOiByZWFkb25seSBzdHJpbmdbXSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KHRoaXMuZ2V0RHJhZnRQcmVzZW50YXRpb25VcmwoRHJhZnRQcmVzZW50YXRpb25UeXBlLmlubmVyKSlcbiAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbXMoc3RyYW5nZU9wdGlvbnMpXG4gICAgICAgICAgICAud2l0aEpzb25Cb2R5KHtcbiAgICAgICAgICAgICAgICBhZGRlZDogW10sXG4gICAgICAgICAgICAgICAgY2hhbmdlZDoge30sXG4gICAgICAgICAgICAgICAgcmVtb3ZlZDogYXR0YWNobWVudElkcy5tYXAoaWQgPT4gYEBhdHRhY2htZW50LyR7aWR9YCksXG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgY3JlYXRlT3JVcGRhdGVBdHRhY2htZW50cyhhdHRhY2htZW50czogcmVhZG9ubHkgQXR0YWNoSW5mb1tdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IGNoYW5nZWQgPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCBhdHRhY2htZW50IG9mIGF0dGFjaG1lbnRzKSB7XG4gICAgICAgICAgICBjaGFuZ2VkW2BAYXR0YWNobWVudC8ke2F0dGFjaG1lbnQuaWR9YF0gPSB7XG4gICAgICAgICAgICAgICAgY29udGVudFVyaTogYXR0YWNobWVudC5jb250ZW50VXJpLFxuICAgICAgICAgICAgICAgIGlkOiBhdHRhY2htZW50LmlkLFxuICAgICAgICAgICAgICAgIG1ldGE6IGF0dGFjaG1lbnQubWV0YSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdCh0aGlzLmdldERyYWZ0UHJlc2VudGF0aW9uVXJsKERyYWZ0UHJlc2VudGF0aW9uVHlwZS5pbm5lcikpXG4gICAgICAgICAgICAud2l0aFF1ZXJ5UGFyYW1zKHN0cmFuZ2VPcHRpb25zKVxuICAgICAgICAgICAgLndpdGhKc29uQm9keSh7XG4gICAgICAgICAgICAgICAgYWRkZWQ6IFtdLFxuICAgICAgICAgICAgICAgIGNoYW5nZWQ6IGNoYW5nZWQsXG4gICAgICAgICAgICAgICAgcmVtb3ZlZDogW10sXG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgY3JlYXRlRHJhZnRBdHRhY2htZW50KGdmdjogc3RyaW5nLCBwYXRoOiBzdHJpbmcpOiBQcm9taXNlPEF0dGFjaEluZm8+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFVybChcImV4dGVybmFsL2NyZWF0ZS1hdHRhY2htZW50LWRyYWZ0XCIpKVxuICAgICAgICAgICAgLndpdGhRdWVyeVBhcmFtcyh7IGdmdjogZ2Z2LCBwYXRoOiBwYXRoIH0pXG4gICAgICAgICAgICAuanNvbjxBdHRhY2hJbmZvPigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBvcGVuTG9hZGVkQXR0YWNobWVudEFzRHJhZnQoaWQ6IHN0cmluZyk6IFByb21pc2U8QXR0YWNoSW5mbz4ge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFVybChcImV4dGVybmFsL29wZW4tbG9hZGVkLWF0dGFjaG1lbnQtYXMtZHJhZnRcIikpXG4gICAgICAgICAgICAud2l0aFF1ZXJ5UGFyYW1zKHsgYXR0YWNobWVudElkOiBpZCB9KVxuICAgICAgICAgICAgLmFjY2VwdENvZGUoNDEzKTtcblxuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSA0MTMpIHtcbiAgICAgICAgICAgIGNvbnN0IGVycm9yRGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb248eyBlcnJvckNvZGU6IHN0cmluZzsgbWVzc2FnZTogc3RyaW5nIH0+KCk7XG4gICAgICAgICAgICBpZiAoZXJyb3JEYXRhLmVycm9yQ29kZSA9PT0gXCJGdWZTaXplVG9vTGFyZ2VcIikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBGdWZTaXplVG9vTGFyZ2VFcnJvcihlcnJvckRhdGEubWVzc2FnZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBuZXcgSHR0cEVycm9yKGVycm9yRGF0YS5tZXNzYWdlLCByZXNwb25zZS5zdGF0dXMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhd2FpdCByZXNwb25zZS5qc29uPEF0dGFjaEluZm8+KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHNldFByZXNlbnRhdGlvbihwcmVzZW50YXRpb25UeXBlOiBEcmFmdFByZXNlbnRhdGlvblR5cGUsIGNvbnRlbnQ6IHN0cmluZyB8IHVua25vd24pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgbGV0IHJlcXVlc3QgPSB0aGlzLmh0dHBDbGllbnQucHV0KHRoaXMuZ2V0RHJhZnRQcmVzZW50YXRpb25VcmwocHJlc2VudGF0aW9uVHlwZSkpO1xuICAgICAgICBpZiAodHlwZW9mIGNvbnRlbnQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJlcXVlc3QgPSByZXF1ZXN0LndpdGhSYXdCb2R5KGNvbnRlbnQpO1xuICAgICAgICB9IGVsc2UgaWYgKGlzQnVmZmVyKGNvbnRlbnQpKSB7XG4gICAgICAgICAgICByZXF1ZXN0ID0gcmVxdWVzdC53aXRoUmF3Qm9keShjb250ZW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlcXVlc3QgPSByZXF1ZXN0LndpdGhKc29uQm9keShjb250ZW50KTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCByZXF1ZXN0O1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBwYXRjaFByZXNlbnRhdGlvbihcbiAgICAgICAgcHJlc2VudGF0aW9uVHlwZTogRHJhZnRQcmVzZW50YXRpb25UeXBlLFxuICAgICAgICBwcmVzZW50YXRpb25Db250ZW50OiBQcmVzZW50YXRpb25Db250ZW50XG4gICAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMuaHR0cENsaWVudC5wYXRjaCh0aGlzLmdldERyYWZ0UHJlc2VudGF0aW9uVXJsKHByZXNlbnRhdGlvblR5cGUpKS53aXRoSnNvbkJvZHkocHJlc2VudGF0aW9uQ29udGVudCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldEZpbGVQcm9wZXJ0aWVzKFxuICAgICAgICBkcml2ZVVyaTogc3RyaW5nLFxuICAgICAgICBpZ25vcmVTaXplQ2hlY2s/OiBib29sZWFuIHwgdW5kZWZpbmVkXG4gICAgKTogUHJvbWlzZTxGaWxlUHJvcGVydGllcyB8IHVuZGVmaW5lZD4ge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLmdldChgdjEvZmlsZXMvZ2V0LXByb3BlcnRpZXNgKVxuICAgICAgICAgICAgLndpdGhRdWVyeVBhcmFtcyh7IGRyaXZlVXJpOiBkcml2ZVVyaSwgaWdub3JlU2l6ZUNoZWNrOiBpZ25vcmVTaXplQ2hlY2sgPz8gZmFsc2UgfSlcbiAgICAgICAgICAgIC5hY2NlcHRDb2RlKDQwMClcbiAgICAgICAgICAgIC5hY2NlcHRDb2RlKDQxMyk7XG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDQwMCB8fCByZXNwb25zZS5zdGF0dXMgPT09IDQxMyB8fCByZXNwb25zZS5zdGF0dXMgPT09IDIwMCkge1xuICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlLmpzb248RmlsZVByb3BlcnRpZXM+KCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgcHJlcGFyZUFuZEdldEZpbGVQcm9wZXJ0aWVzKGRyaXZlVXJpOiBzdHJpbmcsIGdmdjogc3RyaW5nKTogUHJvbWlzZTxGaWxlUHJvcGVydGllcyB8IHVuZGVmaW5lZD4ge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLmdldChgdjEvZmlsZXMvcHJlcGFyZS1hbmQtZ2V0LXByb3BlcnRpZXNgKVxuICAgICAgICAgICAgLndpdGhRdWVyeVBhcmFtcyh7IGdmdjogZ2Z2LCBkcml2ZVVyaTogZHJpdmVVcmkgfSlcbiAgICAgICAgICAgIC5hY2NlcHRDb2RlKDQxMyk7XG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDQwMCkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSA0MTMpIHtcbiAgICAgICAgICAgIGNvbnN0IGVycm9yRGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb248eyBlcnJvckNvZGU6IHN0cmluZzsgbWVzc2FnZTogc3RyaW5nIH0+KCk7XG4gICAgICAgICAgICBpZiAoZXJyb3JEYXRhLmVycm9yQ29kZSA9PT0gXCJGdWZTaXplVG9vTGFyZ2VcIikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBGdWZTaXplVG9vTGFyZ2VFcnJvcihlcnJvckRhdGEubWVzc2FnZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBuZXcgSHR0cEVycm9yKGVycm9yRGF0YS5tZXNzYWdlLCByZXNwb25zZS5zdGF0dXMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhd2FpdCByZXNwb25zZS5qc29uPEZpbGVQcm9wZXJ0aWVzPigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyB1cGxvYWRBbmRHZXRGaWxlUHJvcGVydGllcyhcbiAgICAgICAgZHJpdmVVcmlzOiBzdHJpbmdbXSxcbiAgICAgICAgZ2Z2OiBzdHJpbmcsXG4gICAgICAgIGFib3J0U2lnbmFsPzogQWJvcnRTaWduYWxcbiAgICApOiBQcm9taXNlPFVwbG9hZEZpbGVQcm9wZXJ0aWVzUmVzcG9uc2U+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAgICAgLnBvc3QoYHYxL2ZpbGVzL3VwbG9hZC1hbmQtZ2V0LXByb3BlcnRpZXNgKVxuICAgICAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbXMoeyBnZnY6IGdmdiB9KVxuICAgICAgICAgICAgICAgIC53aXRoSnNvbkJvZHkoZHJpdmVVcmlzKVxuICAgICAgICAgICAgICAgIC53aXRoQWJvcnRTaWduYWwoYWJvcnRTaWduYWwpXG4gICAgICAgICAgICAgICAgLmFjY2VwdENvZGUoNDAwKVxuICAgICAgICAgICAgICAgIC5hY2NlcHRDb2RlKDQxMyk7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzICE9PSAyMDApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbjx7IGVycm9yQ29kZTogU2VydmVyRXJyb3JzOyBtZXNzYWdlOiBzdHJpbmcgfT4oKTtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBzZXJ2ZXJFcnJvcjogZGF0YS5lcnJvckNvZGUsIGludmFsaWRTb3VyY2VEcml2ZUNvbnRlbnROYW1lczogXCJcIiwgc291cmNlc1RvdGFsQ291bnQ6IDAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uPFVwbG9hZEZpbGVQcm9wZXJ0aWVzUmVzcG9uc2U+KCk7XG4gICAgICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBzZXJ2ZXJFcnJvcjogU2VydmVyRXJyb3JzLlVua25vd25FcnJvcixcbiAgICAgICAgICAgICAgICBpbnZhbGlkU291cmNlRHJpdmVDb250ZW50TmFtZXM6IFwiXCIsXG4gICAgICAgICAgICAgICAgc291cmNlc1RvdGFsQ291bnQ6IDAsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGFjY2VwdFRyYW5zZmVyVHlwZShcbiAgICAgICAgZnVmRHJpdmVVcmk6IHN0cmluZyxcbiAgICAgICAgdHJhbnNmZXJUeXBlOiBzdHJpbmcsXG4gICAgICAgIGFib3J0U2lnbmFsPzogQWJvcnRTaWduYWxcbiAgICApOiBQcm9taXNlPFNlcnZlckVycm9yUmVzcG9uc2UgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAgICAgLnBvc3QoYHYxL25zLyR7dGhpcy5kcmFmdEZ1bGxJZC5uc30vZHJhZnRzLyR7dGhpcy5kcmFmdEZ1bGxJZC5kcmFmdElkfS90cmFuc2Zlci9jb21iaW5lYClcbiAgICAgICAgICAgICAgICAud2l0aFF1ZXJ5UGFyYW1zKHsgZnVmRHJpdmVVcmk6IGZ1ZkRyaXZlVXJpLCB0eXBlSWQ6IHRyYW5zZmVyVHlwZSB9KVxuICAgICAgICAgICAgICAgIC53aXRoQWJvcnRTaWduYWwoYWJvcnRTaWduYWwpXG4gICAgICAgICAgICAgICAgLmFjY2VwdENvZGUoNDAwKVxuICAgICAgICAgICAgICAgIC5hY2NlcHRDb2RlKDQxMyk7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzICE9PSAyMDApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbjx7IGVycm9yQ29kZTogU2VydmVyRXJyb3JzOyBtZXNzYWdlOiBzdHJpbmcgfT4oKTtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBzZXJ2ZXJFcnJvcjogZGF0YS5lcnJvckNvZGUgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHJldHVybiB7IHNlcnZlckVycm9yOiBTZXJ2ZXJFcnJvcnMuVW5rbm93bkVycm9yIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgYWNjZXB0TXVsdGlwbGVUcmFuc2ZlclR5cGUoXG4gICAgICAgIGZpbGVzOiBJQ29tYmluZUJ5VHJhbnNmZXJzW10sXG4gICAgICAgIGFib3J0U2lnbmFsPzogQWJvcnRTaWduYWxcbiAgICApOiBQcm9taXNlPFNlcnZlckVycm9yUmVzcG9uc2UgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAgICAgLnBvc3QoYHYxL25zLyR7dGhpcy5kcmFmdEZ1bGxJZC5uc30vZHJhZnRzLyR7dGhpcy5kcmFmdEZ1bGxJZC5kcmFmdElkfS90cmFuc2Zlci9jb21iaW5lLW11bHRpcGxlYClcbiAgICAgICAgICAgICAgICAud2l0aEpzb25Cb2R5KGZpbGVzKVxuICAgICAgICAgICAgICAgIC53aXRoQWJvcnRTaWduYWwoYWJvcnRTaWduYWwpXG4gICAgICAgICAgICAgICAgLmFjY2VwdENvZGUoNDAwKVxuICAgICAgICAgICAgICAgIC5hY2NlcHRDb2RlKDQxMyk7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzICE9PSAyMDApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbjx7IGVycm9yQ29kZTogU2VydmVyRXJyb3JzOyBtZXNzYWdlOiBzdHJpbmcgfT4oKTtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBzZXJ2ZXJFcnJvcjogZGF0YS5lcnJvckNvZGUgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHJldHVybiB7IHNlcnZlckVycm9yOiBTZXJ2ZXJFcnJvcnMuVW5rbm93bkVycm9yIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgc2V0RnVmQnlEcml2ZVVyaShkcml2ZVVyaTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMuaHR0cENsaWVudC5wdXQodGhpcy5nZXREcmFmdFVybChcInNldC1mdWZcIikpLndpdGhRdWVyeVBhcmFtcyh7IGRyaXZlVXJpOiBkcml2ZVVyaSB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgY29tYmluZUZ1ZkJ5RHJpdmVVcmkoXG4gICAgICAgIGRyaXZlVXJpOiBzdHJpbmcsXG4gICAgICAgIGNvbWJpbmVNZXRob2Q6IEZ1ZkNvbWJpbmVNZXRob2QsXG4gICAgICAgIGFib3J0U2lnbmFsPzogQWJvcnRTaWduYWxcbiAgICApOiBQcm9taXNlPENvbWJpbmVGdWZSZXN1bHQgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KHRoaXMuZ2V0RHJhZnRVcmwoXCJ0cmFuc2Zlci9jb21iaW5lLXdpdGgtZnVmXCIpKVxuICAgICAgICAgICAgLndpdGhRdWVyeVBhcmFtcyh7IGZ1ZkRyaXZlVXJpOiBkcml2ZVVyaSwgY29tYmluZU1ldGhvZDogY29tYmluZU1ldGhvZCB9KVxuICAgICAgICAgICAgLndpdGhBYm9ydFNpZ25hbChhYm9ydFNpZ25hbCk7XG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDQwMCkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXdhaXQgcmVzcG9uc2UuanNvbjxDb21iaW5lRnVmUmVzdWx0PigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBleGNlbHNUb1BhcnRpYWxGdWZzKFxuICAgICAgICBnZnY6IHN0cmluZyxcbiAgICAgICAgcGF0aFRvVGFibGU6IHN0cmluZyxcbiAgICAgICAgZHJpdmVVcmlzOiBzdHJpbmdbXVxuICAgICk6IFByb21pc2U8RXhjZWxzVG9QYXJ0aWFsRnVmc1Jlc3BvbnNlIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgICAgIC5wb3N0KFwidjEvZmlsZXMvZXhjZWxzLXRvLXBhcnRpYWwtZnVmc1wiKVxuICAgICAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbXMoeyBnZnY6IGdmdiwgcGF0aFRvVGFibGU6IHBhdGhUb1RhYmxlIH0pXG4gICAgICAgICAgICAgICAgLndpdGhKc29uQm9keShkcml2ZVVyaXMpO1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gMjAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3BvbnNlLmpzb248RXhjZWxzVG9QYXJ0aWFsRnVmc1Jlc3BvbnNlPigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBpbXBvcnRGcm9tUGFydGlhbEZ1ZnNCeVBhdGgoXG4gICAgICAgIHBhdGhUb1RhYmxlOiBzdHJpbmcsXG4gICAgICAgIGRyaXZlVXJpOiBzdHJpbmdbXSxcbiAgICAgICAgY29tYmluZU1ldGhvZDogc3RyaW5nLFxuICAgICAgICBjb21iaW5hdG9yVHlwZTogQ29tYmluYXRvclR5cGVcbiAgICApOiBQcm9taXNlPEltcG9ydEZyb21QYXJ0aWFsRnVmc0J5UGF0aFJlc3BvbnNlIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgICAgIC5wb3N0KHRoaXMuZ2V0RHJhZnRVcmwoXCJ0cmFuc2Zlci9pbXBvcnQtZnJvbS1wYXJ0aWFsLWZ1ZnMtYnktcGF0aFwiKSlcbiAgICAgICAgICAgICAgICAud2l0aFF1ZXJ5UGFyYW1zKHtcbiAgICAgICAgICAgICAgICAgICAgcGF0aFRvVGFibGU6IHBhdGhUb1RhYmxlLFxuICAgICAgICAgICAgICAgICAgICBjb21iaW5lTWV0aG9kOiBjb21iaW5lTWV0aG9kLFxuICAgICAgICAgICAgICAgICAgICBjb21iaW5hdG9yVHlwZTogY29tYmluYXRvclR5cGUsXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAud2l0aEpzb25Cb2R5KGRyaXZlVXJpKTtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDIwMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCByZXNwb25zZS5qc29uPEltcG9ydEZyb21QYXJ0aWFsRnVmc0J5UGF0aFJlc3BvbnNlPigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBtdWx0aXBsZUNvbWJpbmVGdWZCeURyaXZlVXJpKFxuICAgICAgICBkcml2ZVVyaXM6IHN0cmluZ1tdLFxuICAgICAgICBjb21iaW5lTWV0aG9kOiBGdWZDb21iaW5lTWV0aG9kLFxuICAgICAgICBhcmdzPzogc3RyaW5nW11cbiAgICApOiBQcm9taXNlPENvbWJpbmVGdWZSZXN1bHQgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KHRoaXMuZ2V0RHJhZnRVcmwoXCJ0cmFuc2Zlci9jb21iaW5lLXdpdGgtZnVmc1wiKSlcbiAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbXMoeyBjb21iaW5lTWV0aG9kOiBjb21iaW5lTWV0aG9kIH0pXG4gICAgICAgICAgICAud2l0aEpzb25Cb2R5KHsgZHJpdmVVcmlzOiBkcml2ZVVyaXMsIGFyZ3VtZW50czogYXJncyB9KVxuICAgICAgICAgICAgLmFjY2VwdENvZGUoNDAwKVxuICAgICAgICAgICAgLmFjY2VwdENvZGUoNTAwKTtcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gNDAwIHx8IHJlc3BvbnNlLnN0YXR1cyA9PT0gNTAwKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhd2FpdCByZXNwb25zZS5qc29uPENvbWJpbmVGdWZSZXN1bHQ+KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGltcG9ydFhtbHMoXG4gICAgICAgIGRyaXZlVXJpczogc3RyaW5nW10sXG4gICAgICAgIGNvbWJpbmVNZXRob2Q6IEZ1ZkNvbWJpbmVNZXRob2QsXG4gICAgICAgIGNvbWJpbmF0b3JUeXBlOiBDb21iaW5hdG9yVHlwZSxcbiAgICAgICAgaXNJbXBvcnRCeUZ1ZjogYm9vbGVhbixcbiAgICAgICAgYXJncz86IHN0cmluZ1tdXG4gICAgKTogUHJvbWlzZTxDb21iaW5lRnVmUmVzdWx0IHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdCh0aGlzLmdldERyYWZ0VXJsKFwidHJhbnNmZXIvaW1wb3J0LXhtbHNcIikpXG4gICAgICAgICAgICAud2l0aFF1ZXJ5UGFyYW1zKHtcbiAgICAgICAgICAgICAgICBjb21iaW5lTWV0aG9kOiBjb21iaW5lTWV0aG9kLFxuICAgICAgICAgICAgICAgIGNvbWJpbmF0b3JUeXBlOiBjb21iaW5hdG9yVHlwZSxcbiAgICAgICAgICAgICAgICBpbXBvcnRCeUZ1ZjogaXNJbXBvcnRCeUZ1ZixcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAud2l0aEpzb25Cb2R5KHsgRnVmRHJpdmVVcmlzOiBkcml2ZVVyaXMsIGFyZ3VtZW50czogYXJncyB9KTtcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gNDAwKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhd2FpdCByZXNwb25zZS5qc29uPENvbWJpbmVGdWZSZXN1bHQ+KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHNldERyYWZ0U2V0dGluZ3Moc2V0dGluZ3M6IERyYWZ0U2V0dGluZ3MpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5odHRwQ2xpZW50LnBhdGNoKHRoaXMuZ2V0RHJhZnRVcmwoXCJleHRlcm5hbC9zZXQtc2V0dGluZ3NcIikpLndpdGhKc29uQm9keShzZXR0aW5ncyk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldERyYWZ0U2V0dGluZ3MoKTogUHJvbWlzZTxEcmFmdFNldHRpbmdzPiB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5odHRwQ2xpZW50LmdldCh0aGlzLmdldERyYWZ0VXJsKFwiZXh0ZXJuYWwvZ2V0LXNldHRpbmdzXCIpKTtcblxuICAgICAgICByZXR1cm4gcmVzcG9uc2UuanNvbjxEcmFmdFNldHRpbmdzPigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBub3JtYWxpemVCeVJ1bGVzKHJ1bGVzOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5odHRwQ2xpZW50LnBvc3QodGhpcy5nZXREcmFmdFVybChcInRlc3Qtbm9ybWFsaXplXCIpKS53aXRoSnNvbkJvZHkocnVsZXMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0SHJlZkRvd25sb2FkRHJhZnRQcmVzZW50YXRpb24ocHJlc2VudGF0aW9uVHlwZTogRHJhZnRQcmVzZW50YXRpb25UeXBlKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC51cmwodGhpcy5nZXREcmFmdFByZXNlbnRhdGlvblVybChwcmVzZW50YXRpb25UeXBlKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXREcmFmdFVybChkcmFmdFJlbGF0ZWRVcmw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBgdjEvbnMvJHt0aGlzLmRyYWZ0RnVsbElkLm5zfS9kcmFmdHMvJHt0aGlzLmRyYWZ0RnVsbElkLmRyYWZ0SWR9LyR7ZHJhZnRSZWxhdGVkVXJsfWA7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXREcmFmdFByZXNlbnRhdGlvblVybChwcmVzZW50YXRpb25UeXBlOiBEcmFmdFByZXNlbnRhdGlvblR5cGUpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXREcmFmdFVybChgcHJlc2VudGF0aW9ucy8ke3ByZXNlbnRhdGlvblR5cGUudG9TdHJpbmcoKX1gKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgc2V0TXVsdGlwbGVXaXRoTm9ybWFsaXphdGlvbihydWxlczogVmFsdWVGb3JJbnN0YW5jZXNTZXR0aW5nUnVsZVtdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IHVyaSA9IHRoaXMuZ2V0RHJhZnRVcmwoXCJpbm5lci9zZXQtbXVsdGlwbGUtd2l0aC1ub3JtYWxpemF0aW9uXCIpO1xuICAgICAgICBjb25zdCBmaW5hbFJ1bGVzID0gcnVsZXMubWFwKHggPT4gKHsgLi4ueCwgcGF0aDogY29udmVydFRvTGVnYWN5UGF0aCh4LnBhdGgpIH0pKTtcbiAgICAgICAgYXdhaXQgdGhpcy5odHRwQ2xpZW50LnBhdGNoKHVyaSkud2l0aEpzb25Cb2R5KGZpbmFsUnVsZXMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBzZWFyY2hJbnN0YW5jZXNCeVRleHQoXG4gICAgICAgIHRleHQ6IHN0cmluZyxcbiAgICAgICAgcGF0aHNQcmVmaXg6IHN0cmluZyxcbiAgICAgICAgcGF0aHNUb1NlYXJjaDogc3RyaW5nW10sXG4gICAgICAgIG1heEluc3RhbmNlQ291bnQ/OiBudW1iZXJcbiAgICApOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgICAgIGNvbnN0IG1heEluc3RhbmNlQ291bnRQYXJhbXMgPSBtYXhJbnN0YW5jZUNvdW50ICE9IHVuZGVmaW5lZCA/IHsgbWF4SW5zdGFuY2VDb3VudDogbWF4SW5zdGFuY2VDb3VudCB9IDoge307XG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IHsgc2VhcmNoU3RyaW5nOiB0ZXh0LCBwYXRoc1ByZWZpeDogcGF0aHNQcmVmaXgsIC4uLm1heEluc3RhbmNlQ291bnRQYXJhbXMgfTtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFVybChcImlubmVyL3NlYXJjaC1ieS1zdHJpbmdcIikpXG4gICAgICAgICAgICAud2l0aFF1ZXJ5UGFyYW1zKHBhcmFtcylcbiAgICAgICAgICAgIC53aXRoSnNvbkJvZHkocGF0aHNUb1NlYXJjaClcbiAgICAgICAgICAgIC5qc29uPHN0cmluZ1tdPigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBxdWVyeUNvbGxlY3Rpb24ocmVxdWVzdDogSW5uZXJRdWVyeVJlcXVlc3QsIGFib3J0U2lnbmFsPzogQWJvcnRTaWduYWwpOiBQcm9taXNlPElubmVyUXVlcnlSZXNwb25zZT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdCh0aGlzLmdldERyYWZ0VXJsKFwiaW5uZXIvcXVlcnktY29sbGVjdGlvblwiKSlcbiAgICAgICAgICAgIC53aXRoSnNvbkJvZHkocmVxdWVzdClcbiAgICAgICAgICAgIC53aXRoQWJvcnRTaWduYWwoYWJvcnRTaWduYWwpXG4gICAgICAgICAgICAuanNvbjxJbm5lclF1ZXJ5UmVzcG9uc2U+KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHJlc29sdmVJbm5lclBhdGgoXG4gICAgICAgIHJlcXVlc3Q6IFJlc29sdmVJbm5lclBhdGhSZXF1ZXN0LFxuICAgICAgICBhYm9ydFNpZ25hbD86IEFib3J0U2lnbmFsXG4gICAgKTogUHJvbWlzZTxSZXNvbHZlUGF0aFJlc3BvbnNlPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KHRoaXMuZ2V0RHJhZnRVcmwoXCJpbm5lci9yZXNvbHZlLWlubmVyLXBhdGhcIikpXG4gICAgICAgICAgICAud2l0aEpzb25Cb2R5KHJlcXVlc3QpXG4gICAgICAgICAgICAud2l0aEFib3J0U2lnbmFsKGFib3J0U2lnbmFsKVxuICAgICAgICAgICAgLmpzb248UmVzb2x2ZVBhdGhSZXNwb25zZT4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgY3VzdG9tTm9ybWFsaXplKFxuICAgICAgICBub3JtYWxpemVySWQ6IHN0cmluZyB8IG51bGwsXG4gICAgICAgIHBhdGhQcmVmaXhlczogQWJzb2x1dGVNb2RlbFBhdGhbXSxcbiAgICAgICAgYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbFxuICAgICk6IFByb21pc2U8SUlubmVyQ2hhbmdlUmVzdWx0PiB7XG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IHsgbm9ybWFsaXplcklkOiBub3JtYWxpemVySWQgfTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdCh0aGlzLmdldERyYWZ0VXJsKFwiaW5uZXIvY3VzdG9tLW5vcm1hbGl6ZVwiKSlcbiAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbXMocGFyYW1zKVxuICAgICAgICAgICAgLndpdGhKc29uQm9keShwYXRoUHJlZml4ZXMubWFwKHggPT4geC50b1N0cmluZygpKSlcbiAgICAgICAgICAgIC53aXRoQWJvcnRTaWduYWwoYWJvcnRTaWduYWwpO1xuXG4gICAgICAgIHJldHVybiByZXN1bHQuc3RhdHVzID09IDIwMCA/IGF3YWl0IHJlc3VsdC5qc29uPElJbm5lckNoYW5nZVN1Y2Nlc3NSZXN1bHQ+KCkgOiByZXN1bHQuc3RhdHVzO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBpbXBvcnRFbXBsb3llZXMocmVxdWVzdDogSW1wb3J0RW1wbG95ZWVzUmVxdWVzdCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLmh0dHBDbGllbnQucGF0Y2godGhpcy5nZXREcmFmdFVybChcInN0YWZmXCIpKS53aXRoSnNvbkJvZHkocmVxdWVzdCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGRlbGV0ZUluc3RhbmNlcyhkZWxldGluZ1J1bGVzOiBJbnN0YW5jZXNEZWxldGluZ1J1bGVbXSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLmh0dHBDbGllbnQucG9zdCh0aGlzLmdldERyYWZ0VXJsKFwiaW5uZXIvZGVsZXRlLWluc3RhbmNlc1wiKSkud2l0aEpzb25Cb2R5KGRlbGV0aW5nUnVsZXMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBydW5NYXNzQWN0aW9uKGFjdGlvbklkOiBzdHJpbmcsIHBhcmFtZXRlcnM/OiBNYXNzQWN0aW9uUGFyYW1ldGVycyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCBxdWVyeVBhcmFtcyA9IHsgYWN0aW9uSWQ6IGFjdGlvbklkIH07XG4gICAgICAgIGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFVybChcImlubmVyL21hc3MtYWN0aW9uXCIpKVxuICAgICAgICAgICAgLndpdGhRdWVyeVBhcmFtcyhxdWVyeVBhcmFtcylcbiAgICAgICAgICAgIC53aXRoSnNvbkJvZHkocGFyYW1ldGVycyk7XG4gICAgfVxuXG4gICAgcHVibGljIHByaW50KHR5cGU6IFByaW50VHlwZSwgYm9keT86IHN0cmluZ1tdKTogUHJvbWlzZTxQcmludFJlc3BvbnNlPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KHRoaXMuZ2V0RHJhZnRVcmwoYHByZXNlbnRhdGlvbnMvaW5uZXIvcHJpbnQvJHt0eXBlfWApKVxuICAgICAgICAgICAgLndpdGhKc29uQm9keShib2R5KVxuICAgICAgICAgICAgLmpzb248UHJpbnRSZXNwb25zZT4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgcHJpbnRFeGNlbChwYXRoVG9UYWJsZTogc3RyaW5nKTogUHJvbWlzZTxQcmludFJlc3BvbnNlIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgICAgIC5wb3N0KHRoaXMuZ2V0RHJhZnRVcmwoYHByZXNlbnRhdGlvbnMvdGFibGUvcHJpbnRgKSlcbiAgICAgICAgICAgICAgICAud2l0aFF1ZXJ5UGFyYW1zKHsgcGF0aFRvVGFibGU6IHBhdGhUb1RhYmxlIH0pO1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gMjAwKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdGFibGVFeGNlbCA9IHJlc3BvbnNlLmpzb248UHJpbnRSZXNwb25zZT4oKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGFibGVFeGNlbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgY2hlY2tCeVBvcGQoKTogUHJvbWlzZTxDYW5keVBvcGRQcm90b2NvbD4ge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuaHR0cENsaWVudC5nZXQoXG4gICAgICAgICAgICBgdjEvbnMvJHt0aGlzLmRyYWZ0RnVsbElkLm5zfS9kcmFmdHMvJHt0aGlzLmRyYWZ0RnVsbElkLmRyYWZ0SWR9L2NoZWNrQnlQb3BkYFxuICAgICAgICApO1xuXG4gICAgICAgIHJldHVybiByZXNwb25zZS5qc29uPENhbmR5UG9wZFByb3RvY29sPigpO1xuICAgIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsSUFBQUEsWUFBQSxHQUFBQyxPQUFBO0FBRUEsSUFBQUMsV0FBQSxHQUFBRCxPQUFBO0FBRUEsSUFBQUUsbUJBQUEsR0FBQUYsT0FBQTtBQUVBLElBQUFHLFVBQUEsR0FBQUgsT0FBQTtBQTJCQSxJQUFBSSxXQUFBLEdBQUFKLE9BQUE7QUFFQSxJQUFBSyxzQkFBQSxHQUFBTCxPQUFBO0FBT0EsSUFBQU0sU0FBQSxHQUFBTixPQUFBO0FBR0EsSUFBQU8scUJBQUEsR0FBQVAsT0FBQTtBQWVBLE1BQU1RLGNBQWMsR0FBRztFQUFFQyxHQUFHLEVBQUUsV0FBVztFQUFFQyxXQUFXLEVBQUU7QUFBSSxDQUFDO0FBQUMsSUFFbERDLFlBQVksR0FBQUMsT0FBQSxDQUFBRCxZQUFBLDBCQUFaQSxZQUFZO0VBQVpBLFlBQVk7RUFBWkEsWUFBWTtFQUFaQSxZQUFZO0VBQUEsT0FBWkEsWUFBWTtBQUFBO0FBTXhCLFNBQVNFLG9DQUFvQ0EsQ0FBQ0MsSUFBMkIsRUFBVTtFQUMvRSxPQUNJLENBQUNBLElBQUksQ0FBQ0MsSUFBSSxHQUFHLEdBQUcsR0FBRyxFQUFFLEtBQ3BCRCxJQUFJLENBQUNFLGdCQUFnQixLQUFLLEdBQUcsR0FBR0YsSUFBSSxDQUFDRSxnQkFBZ0IsR0FBR0YsSUFBSSxDQUFDRSxnQkFBZ0IsQ0FBQ0MsWUFBWSxDQUFDLENBQUMsQ0FBQztBQUV0RztBQUVPLE1BQU1DLGNBQWMsQ0FBNEI7RUFHNUNDLFdBQVdBLENBQ2RDLFNBQWdCLEVBQ2hCQyxPQUFlLEVBQ2ZDLFlBQWdDLEVBQ2hDQyxjQUE4QyxFQUM5Q0MsZUFBaUMsRUFDbkM7SUFBQSxLQVJlQyxVQUFVO0lBU3ZCLElBQUksQ0FBQ0EsVUFBVSxHQUFHLElBQUlDLHNCQUFVLENBQzVCTixTQUFTLEVBQ1RDLE9BQU8sRUFDUCxJQUFBTSxnREFBNEIsRUFBQ0osY0FBYyxDQUFDLEVBQzVDO01BQ0lELFlBQVksRUFBRUE7SUFDbEIsQ0FBQyxFQUNERSxlQUNKLENBQUM7RUFDTDtFQUVPSSxRQUFRQSxDQUFDQyxXQUF3QixFQUF3QjtJQUM1RCxPQUFPLElBQUlDLG1CQUFtQixDQUFDLElBQUksQ0FBQ0wsVUFBVSxFQUFFSSxXQUFXLENBQUM7RUFDaEU7RUFFQSxNQUFhRSxhQUFhQSxDQUFDRixXQUF3QixFQUFFRyxJQUF1QixFQUE2QjtJQUNyRyxNQUFNQyxLQUFLLEdBQUdELElBQUksQ0FBQ0UsR0FBRyxDQUFDQyxHQUFHLElBQUksVUFBVUEsR0FBRyxFQUFFLENBQUM7SUFDOUMsTUFBTUMsUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDWCxVQUFVLENBQ2pDWSxJQUFJLENBQUMsSUFBSSxDQUFDQyxXQUFXLENBQUNULFdBQVcsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUNoRFUsWUFBWSxDQUFDTixLQUFLLENBQUMsQ0FDbkJPLElBQUksQ0FBc0IsQ0FBQztJQUNoQyxNQUFNQyxNQUF3QixHQUFHLENBQUMsQ0FBQztJQUNuQyxLQUFLLE1BQU1OLEdBQUcsSUFBSUgsSUFBSSxFQUFFO01BQUEsSUFBQVUsU0FBQTtNQUNwQixNQUFNQyxjQUFjLElBQUFELFNBQUEsR0FBR04sUUFBUSxDQUFDLFVBQVVELEdBQUcsRUFBRSxDQUFDLGNBQUFPLFNBQUEsdUJBQXpCQSxTQUFBLENBQTJCRSxLQUFLO01BQ3ZELElBQUlELGNBQWMsSUFBSUUsU0FBUyxFQUFFO1FBQzdCSixNQUFNLENBQUNOLEdBQUcsQ0FBQyxHQUFHO1VBQ1ZTLEtBQUssRUFBRUMsU0FBUztVQUNoQkMsS0FBSyxFQUFFLGlDQUFpQztVQUN4Q0MsU0FBUyxFQUFFQyxnQ0FBb0IsQ0FBQ0M7UUFDcEMsQ0FBQztNQUNMLENBQUMsTUFBTTtRQUFBLElBQUFDLHFCQUFBLEVBQUFDLHFCQUFBLEVBQUFDLHNCQUFBO1FBQ0hYLE1BQU0sQ0FBQ04sR0FBRyxDQUFDLEdBQUc7VUFDVlMsS0FBSyxHQUFBTSxxQkFBQSxHQUFFUCxjQUFjLENBQUNDLEtBQUssY0FBQU0scUJBQUEsY0FBQUEscUJBQUEsR0FBSUwsU0FBUztVQUN4Q0UsU0FBUyxHQUFBSSxxQkFBQSxHQUFFUixjQUFjLENBQUNJLFNBQVMsY0FBQUkscUJBQUEsY0FBQUEscUJBQUEsR0FBSU4sU0FBUztVQUNoREMsS0FBSyxHQUFBTSxzQkFBQSxHQUFFVCxjQUFjLENBQUNHLEtBQUssY0FBQU0sc0JBQUEsY0FBQUEsc0JBQUEsR0FBSVA7UUFDbkMsQ0FBQztNQUNMO0lBQ0o7SUFDQSxPQUFPSixNQUFNO0VBQ2pCO0VBRUEsTUFBYVksVUFBVUEsQ0FBQ0MsV0FBeUIsRUFBcUI7SUFDbEUsTUFBTUMsSUFBSSxHQUFHLE1BQU0sSUFBSSxDQUFDOUIsVUFBVSxDQUFDK0IsR0FBRyxDQUFDLG1CQUFtQixDQUFDLENBQUNoQixJQUFJLENBQVcsQ0FBQztJQUM1RSxPQUFPZSxJQUFJO0VBQ2Y7RUFFQSxNQUFhRSxvQkFBb0JBLENBQzdCQyxFQUFVLEVBQ1ZDLFdBQW1CLEVBQ25CTCxXQUF5QixFQUNHO0lBQzVCLE9BQU8sTUFBTSxJQUFJLENBQUM3QixVQUFVLENBQ3ZCWSxJQUFJLENBQUMsU0FBU3FCLEVBQUUsMEJBQTBCLENBQUMsQ0FDM0NFLGVBQWUsQ0FBQztNQUNiRixFQUFFLEVBQUVBLEVBQUU7TUFDTkMsV0FBVyxFQUFFQTtJQUNqQixDQUFDLENBQUMsQ0FDREUsZUFBZSxDQUFDUCxXQUFXLENBQUMsQ0FDNUJkLElBQUksQ0FBc0IsQ0FBQztFQUNwQztFQUVBLE1BQWFzQixnQkFBZ0JBLENBQUNKLEVBQVUsRUFBRUssR0FBVyxFQUFFVCxXQUF5QixFQUFnQztJQUM1RyxPQUFPLE1BQU0sSUFBSSxDQUFDN0IsVUFBVSxDQUN2QlksSUFBSSxDQUFDLFNBQVNxQixFQUFFLGVBQWUsQ0FBQyxDQUNoQ0UsZUFBZSxDQUFDO01BQUVHLEdBQUcsRUFBRUE7SUFBSSxDQUFDLENBQUMsQ0FDN0JGLGVBQWUsQ0FBQ1AsV0FBVyxDQUFDLENBQzVCZCxJQUFJLENBQXNCLENBQUM7RUFDcEM7RUFJQSxNQUFhd0IsV0FBV0EsQ0FBQ04sRUFBVSxFQUFFSyxHQUF1QixFQUFFRSxVQUFtQixFQUFnQztJQUM3RyxJQUFJRixHQUFHLElBQUlsQixTQUFTLElBQUlvQixVQUFVLElBQUlwQixTQUFTLEVBQUU7TUFDN0MsT0FBTyxNQUFNLElBQUksQ0FBQ3BCLFVBQVUsQ0FDdkJZLElBQUksQ0FBQyxTQUFTcUIsRUFBRSxlQUFlLENBQUMsQ0FDaENRLGVBQWUsQ0FBQywwQkFBMEIsQ0FBQyxDQUMzQ0Msa0JBQWtCLENBQUNGLFVBQVUsQ0FBQyxDQUM5QnpCLElBQUksQ0FBc0IsQ0FBQztJQUNwQztJQUNBLElBQUl1QixHQUFHLElBQUlsQixTQUFTLElBQUlvQixVQUFVLElBQUlwQixTQUFTLEVBQUU7TUFDN0MsT0FBTyxNQUFNLElBQUksQ0FBQ3BCLFVBQVUsQ0FDdkJZLElBQUksQ0FBQyxTQUFTcUIsRUFBRSxlQUFlLENBQUMsQ0FDaENFLGVBQWUsQ0FBQztRQUFFRyxHQUFHLEVBQUVBO01BQUksQ0FBQyxDQUFDLENBQzdCRyxlQUFlLENBQUMsMEJBQTBCLENBQUMsQ0FDM0NDLGtCQUFrQixDQUFDQyxNQUFNLENBQUNDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUNuQzdCLElBQUksQ0FBc0IsQ0FBQztJQUNwQztJQUNBLElBQUl1QixHQUFHLElBQUlsQixTQUFTLElBQUlvQixVQUFVLElBQUlwQixTQUFTLEVBQUU7TUFDN0MsTUFBTSxJQUFJeUIsS0FBSyxDQUFDLGtEQUFrRCxDQUFDO0lBQ3ZFO0lBQ0EsT0FBTyxNQUFNLElBQUksQ0FBQzdDLFVBQVUsQ0FDdkJZLElBQUksQ0FBQyxTQUFTcUIsRUFBRSxlQUFlLENBQUMsQ0FDaENFLGVBQWUsQ0FBQztNQUFFRyxHQUFHLEVBQUVBO0lBQUksQ0FBQyxDQUFDLENBQzdCRyxlQUFlLENBQUMsMEJBQTBCLENBQUMsQ0FDM0NDLGtCQUFrQixDQUFDRixVQUFVLENBQUMsQ0FDOUJ6QixJQUFJLENBQXNCLENBQUM7RUFDcEM7RUFFQSxNQUFhK0IsVUFBVUEsQ0FBQSxFQUFrQjtJQUNyQyxNQUFNLElBQUksQ0FBQzlDLFVBQVUsQ0FBQytCLEdBQUcsQ0FBQyxjQUFjLENBQUM7RUFDN0M7RUFFUWxCLFdBQVdBLENBQUNULFdBQXdCLEVBQUUyQyxlQUF1QixFQUFVO0lBQzNFLE9BQU8sU0FBUzNDLFdBQVcsQ0FBQzZCLEVBQUUsV0FBVzdCLFdBQVcsQ0FBQzRDLE9BQU8sSUFBSUQsZUFBZSxFQUFFO0VBQ3JGO0VBRUEsTUFBYUUsZUFBZUEsQ0FBQSxFQUFrQztJQUMxRCxPQUFPLE1BQU0sSUFBSSxDQUFDakQsVUFBVSxDQUFDK0IsR0FBRyxDQUFDLG1CQUFtQixDQUFDLENBQUNoQixJQUFJLENBQXVCLENBQUM7RUFDdEY7RUFFQSxNQUFhbUMscUJBQXFCQSxDQUFDQyxrQkFBc0MsRUFBb0I7SUFDekYsTUFBTXhDLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQ1gsVUFBVSxDQUNqQ1ksSUFBSSxDQUFDLCtCQUErQixDQUFDLENBQ3JDd0MsV0FBVyxDQUFDQyxJQUFJLENBQUNDLFNBQVMsQ0FBQ0gsa0JBQWtCLENBQUMsQ0FBQztJQUNwRCxJQUFJLEVBQUV4QyxRQUFRLENBQUM0QyxNQUFNLElBQUksR0FBRyxJQUFJNUMsUUFBUSxDQUFDNEMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxFQUFFO01BQ3BELE1BQU0sSUFBSVYsS0FBSyxDQUFDLHlCQUF5QmxDLFFBQVEsQ0FBQzRDLE1BQU0sR0FBRyxDQUFDO0lBQ2hFO0lBQ0EsT0FBTyxJQUFJO0VBQ2Y7QUFDSjtBQUFDcEUsT0FBQSxDQUFBTSxjQUFBLEdBQUFBLGNBQUE7QUFFTSxNQUFNWSxtQkFBbUIsQ0FBaUM7RUFJdERYLFdBQVdBLENBQUNNLFVBQXVCLEVBQUVJLFdBQXdCLEVBQUU7SUFBQSxLQUhyREosVUFBVTtJQUFBLEtBQ1ZJLFdBQVc7SUFHeEIsSUFBSSxDQUFDSixVQUFVLEdBQUdBLFVBQVU7SUFDNUIsSUFBSSxDQUFDSSxXQUFXLEdBQUdBLFdBQVc7RUFDbEM7RUFFT29ELG9CQUFvQkEsQ0FBQSxFQUFXO0lBQ2xDLE9BQU8sSUFBSSxDQUFDeEQsVUFBVSxDQUFDeUQsR0FBRyxDQUFDLG1CQUFtQixJQUFJLENBQUNyRCxXQUFXLENBQUM2QixFQUFFLFdBQVcsSUFBSSxDQUFDN0IsV0FBVyxDQUFDNEMsT0FBTyxFQUFFLENBQUM7RUFDM0c7RUFFT1Usa0JBQWtCQSxDQUFBLEVBQVc7SUFDaEMsT0FBTyxJQUFJLENBQUMxRCxVQUFVLENBQUN5RCxHQUFHLENBQUMsSUFBSSxDQUFDNUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0VBQzNEO0VBRU84Qyx3QkFBd0JBLENBQUEsRUFBVztJQUN0QyxPQUFPLElBQUksQ0FBQzNELFVBQVUsQ0FBQ3lELEdBQUcsQ0FBQyxJQUFJLENBQUM1QyxXQUFXLENBQUMsWUFBWSxDQUFDLENBQUM7RUFDOUQ7RUFFTytDLHlCQUF5QkEsQ0FBQSxFQUFXO0lBQ3ZDLE9BQU8sSUFBSSxDQUFDQyxnQ0FBZ0MsQ0FBQ0MsNENBQXFCLENBQUNDLFFBQVEsQ0FBQztFQUNoRjtFQUVPQywyQkFBMkJBLENBQUEsRUFBVztJQUN6QyxPQUFPLElBQUksQ0FBQ0gsZ0NBQWdDLENBQUNDLDRDQUFxQixDQUFDRyxVQUFVLENBQUM7RUFDbEY7RUFFT0MsZ0NBQWdDQSxDQUFBLEVBQVc7SUFDOUMsT0FBTyxJQUFJLENBQUNMLGdDQUFnQyxDQUFDQyw0Q0FBcUIsQ0FBQ0ssZUFBZSxDQUFDO0VBQ3ZGO0VBRU9DLG9CQUFvQkEsQ0FBQSxFQUFXO0lBQ2xDLE9BQU8sSUFBSSxDQUFDUCxnQ0FBZ0MsQ0FBQ0MsNENBQXFCLENBQUNPLEtBQUssQ0FBQztFQUM3RTtFQUVBLE1BQWFDLFdBQVdBLENBQUEsRUFBNEI7SUFDaEQsT0FBTyxJQUFJLENBQUN0RSxVQUFVLENBQUMrQixHQUFHLENBQUMsSUFBSSxDQUFDd0MsdUJBQXVCLENBQUNULDRDQUFxQixDQUFDVSxRQUFRLENBQUMsQ0FBQyxDQUFDekQsSUFBSSxDQUFpQixDQUFDO0VBQ25IO0VBRUEsTUFBYTBELDZCQUE2QkEsQ0FBQ0MsY0FBbUMsRUFBMkI7SUFDckcsT0FBTyxJQUFJLENBQUMxRSxVQUFVLENBQ2pCWSxJQUFJLENBQUMsSUFBSSxDQUFDQyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FDbENDLFlBQVksQ0FBQztNQUFFNEQsY0FBYyxFQUFFQTtJQUFlLENBQUMsQ0FBQyxDQUNoRDNELElBQUksQ0FBaUIsQ0FBQztFQUMvQjtFQUVBLE1BQWE0RCxXQUFXQSxDQUFDQyxNQUFjLEVBQW1DO0lBQUEsSUFBQUMsTUFBQTtJQUN0RSxNQUFNQyxLQUFLLEdBQUcsTUFBTSxJQUFJLENBQUM5RSxVQUFVLENBQzlCWSxJQUFJLENBQUMsSUFBSSxDQUFDQyxXQUFXLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FDbkNDLFlBQVksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQ3pCQyxJQUFJLENBQXlCLENBQUM7SUFDbkMsUUFBQThELE1BQUEsR0FBT0MsS0FBSyxDQUFDLFNBQVNGLE1BQU0sRUFBRSxDQUFDLGNBQUFDLE1BQUEsdUJBQXhCQSxNQUFBLENBQTBCMUQsS0FBSztFQUMxQztFQUVBLE1BQWE0RCxxQkFBcUJBLENBQUEsRUFBb0Q7SUFDbEYsTUFBTXBFLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQ1gsVUFBVSxDQUNqQytCLEdBQUcsQ0FBQyxJQUFJLENBQUNsQixXQUFXLENBQUMsMEJBQTBCLENBQUMsQ0FBQyxDQUNqREUsSUFBSSxDQUE2QixDQUFDO0lBQ3ZDLE9BQU9KLFFBQVE7RUFDbkI7RUFFQSxNQUFhcUUsYUFBYUEsQ0FBQ0MsS0FBZSxFQUEyQztJQUNqRixNQUFNdEUsUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDWCxVQUFVLENBQ2pDWSxJQUFJLENBQUMsSUFBSSxDQUFDQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUN6Q0MsWUFBWSxDQUFDbUUsS0FBSyxDQUFDLENBQ25CbEUsSUFBSSxDQUFxQixDQUFDO0lBQy9CLE9BQU9KLFFBQVE7RUFDbkI7RUFFQSxNQUFhdUUsV0FBV0EsQ0FBQSxFQUEwQjtJQUM5QyxNQUFNSixLQUFLLEdBQUcsTUFBTSxJQUFJLENBQUM5RSxVQUFVLENBQzlCWSxJQUFJLENBQUMsSUFBSSxDQUFDQyxXQUFXLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FDbkNDLFlBQVksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQ3pCQyxJQUFJLENBQXlCLENBQUM7SUFDbkMsT0FBT29FLE1BQU0sQ0FBQ0MsTUFBTSxDQUFDTixLQUFLLENBQUMsQ0FBQ3JFLEdBQUcsQ0FBQzRFLENBQUMsSUFBSUEsQ0FBQyxDQUFDbEUsS0FBSyxDQUFDO0VBQ2pEO0VBRUEsTUFBYW1FLFdBQVdBLENBQUNWLE1BQWMsRUFBRVcsUUFBNkMsRUFBaUI7SUFDbkcsTUFBTSxJQUFJLENBQUN2RixVQUFVLENBQ2hCWSxJQUFJLENBQUMsSUFBSSxDQUFDMkQsdUJBQXVCLENBQUNULDRDQUFxQixDQUFDTyxLQUFLLENBQUMsQ0FBQyxDQUMvRGxDLGVBQWUsQ0FBQ3BELGNBQWMsQ0FBQyxDQUMvQitCLFlBQVksQ0FBQztNQUNWMEUsS0FBSyxFQUFFLEVBQUU7TUFDVEMsT0FBTyxFQUFFO1FBQ0wsQ0FBQyxTQUFTYixNQUFNLEVBQUUsR0FBRztVQUNqQixHQUFHVyxRQUFRO1VBQ1hHLEVBQUUsRUFBRWQ7UUFDUjtNQUNKLENBQUM7TUFDRGUsT0FBTyxFQUFFO0lBQ2IsQ0FBQyxDQUFDO0VBQ1Y7RUFFQSxNQUFhQyxVQUFVQSxDQUFDaEIsTUFBYyxFQUFpQjtJQUNuRCxNQUFNLElBQUksQ0FBQzVFLFVBQVUsQ0FDaEJZLElBQUksQ0FBQyxJQUFJLENBQUMyRCx1QkFBdUIsQ0FBQ1QsNENBQXFCLENBQUNPLEtBQUssQ0FBQyxDQUFDLENBQy9EbEMsZUFBZSxDQUFDcEQsY0FBYyxDQUFDLENBQy9CK0IsWUFBWSxDQUFDO01BQ1YwRSxLQUFLLEVBQUUsRUFBRTtNQUNUQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO01BQ1hFLE9BQU8sRUFBRSxDQUFDLFNBQVNmLE1BQU0sRUFBRTtJQUMvQixDQUFDLENBQUM7RUFDVjtFQUVPaUIsaUJBQWlCQSxDQUFBLEVBQTRCO0lBQ2hELE9BQU8sSUFBSSxDQUFDN0YsVUFBVSxDQUNqQitCLEdBQUcsQ0FBQyxJQUFJLENBQUN3Qyx1QkFBdUIsQ0FBQ1QsNENBQXFCLENBQUNnQyxjQUFjLENBQUMsQ0FBQyxDQUN2RS9FLElBQUksQ0FBaUIsQ0FBQztFQUMvQjtFQUVPZ0Ysb0JBQW9CQSxDQUFDQyxZQUFvQixFQUFFQyxTQUFpQixFQUFVO0lBQ3pFLE9BQU8sSUFBSSxDQUFDakcsVUFBVSxDQUFDeUQsR0FBRyxDQUFDLElBQUksQ0FBQzVDLFdBQVcsQ0FBQyw4QkFBOEIsQ0FBQyxFQUFFO01BQ3pFbUYsWUFBWSxFQUFFQSxZQUFZO01BQzFCRSxjQUFjLEVBQUVEO0lBQ3BCLENBQUMsQ0FBQztFQUNOO0VBRUEsTUFBYUUsVUFBVUEsQ0FBQSxFQUFrQjtJQUNyQyxNQUFNLElBQUksQ0FBQ25HLFVBQVUsQ0FBQ1ksSUFBSSxDQUFDLElBQUksQ0FBQ0MsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0VBQ3pEO0VBRUEsTUFBYXVGLHVCQUF1QkEsQ0FBQztJQUFFQyxjQUFjO0lBQUUvRDtFQUF5QixDQUFDLEVBQWlCO0lBQzlGLE1BQU0sSUFBSSxDQUFDdEMsVUFBVSxDQUFDWSxJQUFJLENBQUMsSUFBSSxDQUFDQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQ3NCLGVBQWUsQ0FBQztNQUNwRXVELEVBQUUsRUFBRVcsY0FBYztNQUNsQi9ELEdBQUcsRUFBRUE7SUFDVCxDQUFDLENBQUM7RUFDTjtFQUVBLE1BQWFnRSxhQUFhQSxDQUFDQyxJQUFxQixFQUFFQyxrQkFBMEIsRUFBK0I7SUFDdkcsTUFBTXhGLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQ2hCLFVBQVUsQ0FDL0JZLElBQUksQ0FBQyxJQUFJLENBQUNDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUMvQnNCLGVBQWUsQ0FBQztNQUFFbEQsV0FBVyxFQUFFdUg7SUFBbUIsQ0FBQyxDQUFDLENBQ3BEMUYsWUFBWSxDQUFDeUYsSUFBSSxDQUFDLENBQ2xCRSxVQUFVLENBQUMsR0FBRyxDQUFDO0lBRXBCLE1BQU1DLGdCQUFnQixHQUFHLE1BQUFBLENBQUEsS0FBWTtNQUFBLElBQUFDLHFCQUFBO01BQ2pDLE1BQU1DLFVBQVUsR0FBRyxNQUFNNUYsTUFBTSxDQUFDRCxJQUFJLENBQTJCLENBQUM7TUFDaEUsT0FBTztRQUNIOUIsV0FBVyxHQUFBMEgscUJBQUEsR0FBRUMsVUFBVSxhQUFWQSxVQUFVLHVCQUFWQSxVQUFVLENBQUUzSCxXQUFXLGNBQUEwSCxxQkFBQSxjQUFBQSxxQkFBQSxHQUFJLElBQUFFLG1CQUFNLEVBQUMsZ0RBQWdEO01BQ25HLENBQUM7SUFDTCxDQUFDO0lBRUQsT0FBTzdGLE1BQU0sQ0FBQ3VDLE1BQU0sSUFBSSxHQUFHLEdBQUcsTUFBTW1ELGdCQUFnQixDQUFDLENBQUMsR0FBRzFGLE1BQU0sQ0FBQ3VDLE1BQU07RUFDMUU7RUFFQSxNQUFhdUQsOEJBQThCQSxDQUN2Q1AsSUFBcUIsRUFDckJDLGtCQUEwQixFQUMxQk8sWUFBcUIsRUFDTTtJQUMzQixNQUFNL0YsTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDaEIsVUFBVSxDQUMvQlksSUFBSSxDQUFDLElBQUksQ0FBQ0MsV0FBVyxDQUFDLGdDQUFnQyxDQUFDLENBQUMsQ0FDeERzQixlQUFlLENBQUM7TUFBRWxELFdBQVcsRUFBRXVILGtCQUFrQjtNQUFFTyxZQUFZLEVBQUVBO0lBQWEsQ0FBQyxDQUFDLENBQ2hGakcsWUFBWSxDQUFDeUYsSUFBSSxDQUFDLENBQ2xCRSxVQUFVLENBQUMsR0FBRyxDQUFDO0lBRXBCLE9BQU96RixNQUFNLENBQUN1QyxNQUFNLElBQUksR0FBRyxHQUFHLE1BQU12QyxNQUFNLENBQUNELElBQUksQ0FBNEIsQ0FBQyxHQUFHQyxNQUFNLENBQUN1QyxNQUFNO0VBQ2hHO0VBRU95RCxpQkFBaUJBLENBQ3BCVCxJQUFxQixFQUNyQkMsa0JBQTBCLEVBQzFCTyxZQUFxQixFQUNIO0lBQ2xCLE1BQU0vRixNQUFNLEdBQUcsSUFBSSxDQUFDaEIsVUFBVSxDQUFDaUgsUUFBUSxDQUFDLElBQUksQ0FBQ3BHLFdBQVcsQ0FBQyxPQUFPLENBQUMsRUFBRTtNQUFFNUIsV0FBVyxFQUFFdUg7SUFBbUIsQ0FBQyxFQUFFRCxJQUFJLENBQUM7SUFFN0csTUFBTVcsb0JBQW9CLEdBQUdBLENBQUEsS0FBTTtNQUFBLElBQUFDLHNCQUFBO01BQy9CLE1BQU1QLFVBQVUsR0FBRzVGLE1BQU0sQ0FBQ0QsSUFBSSxDQUEyQixDQUFDO01BQzFELE9BQU87UUFDSDlCLFdBQVcsR0FBQWtJLHNCQUFBLEdBQUVQLFVBQVUsYUFBVkEsVUFBVSx1QkFBVkEsVUFBVSxDQUFFM0gsV0FBVyxjQUFBa0ksc0JBQUEsY0FBQUEsc0JBQUEsR0FBSSxJQUFBTixtQkFBTSxFQUFDLGdEQUFnRDtNQUNuRyxDQUFDO0lBQ0wsQ0FBQztJQUNELE9BQU83RixNQUFNLENBQUN1QyxNQUFNLElBQUksR0FBRyxHQUFHMkQsb0JBQW9CLENBQUMsQ0FBQyxHQUFHbEcsTUFBTSxDQUFDdUMsTUFBTTtFQUN4RTtFQUVBLE1BQWE2RCxhQUFhQSxDQUFDQyxhQUFnQyxFQUFxQztJQUM1RixPQUFPLE1BQU0sSUFBSSxDQUFDckgsVUFBVSxDQUN2QlksSUFBSSxDQUFDLElBQUksQ0FBQ0MsV0FBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQ25DQyxZQUFZLENBQUN1RyxhQUFhLENBQUMsQ0FDM0J0RyxJQUFJLENBQTJCLENBQUM7RUFDekM7RUFFQSxNQUFhdUcsUUFBUUEsQ0FBQzlHLEtBQW9DLEVBQWdDO0lBQ3RGLE9BQU8sTUFBTSxJQUFJLENBQUNSLFVBQVUsQ0FDdkJZLElBQUksQ0FBQyxJQUFJLENBQUNDLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUNuQ0MsWUFBWSxDQUFDTixLQUFLLENBQUMsQ0FDbkJPLElBQUksQ0FBc0IsQ0FBQztFQUNwQztFQUVPd0csZUFBZUEsQ0FBQ3RDLEtBQThCLEVBQUV1QyxnQkFBeUIsRUFBZ0M7SUFDNUcsTUFBTUMsY0FBYyxHQUFHeEMsS0FBSyxDQUFDeEUsR0FBRyxDQUFDckIsb0NBQW9DLENBQUM7SUFDdEUsT0FBTyxJQUFJLENBQUNZLFVBQVUsQ0FDakJZLElBQUksQ0FBQyxJQUFJLENBQUNDLFdBQVcsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQzNDc0IsZUFBZSxDQUFDcUYsZ0JBQWdCLElBQUlwRyxTQUFTLElBQUk7TUFBRW9HLGdCQUFnQixFQUFFQSxnQkFBZ0IsQ0FBQ0UsUUFBUSxDQUFDO0lBQUUsQ0FBQyxDQUFDLENBQ25HNUcsWUFBWSxDQUFDMkcsY0FBYyxDQUFDRSxNQUFNLEdBQUcsQ0FBQyxHQUFHRixjQUFjLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUNoRTFHLElBQUksQ0FBc0IsQ0FBQztFQUNwQztFQUVBLE1BQWE2Ryx5QkFBeUJBLENBQ2xDM0MsS0FBOEIsRUFDOUJ1QyxnQkFBeUIsRUFDRTtJQUMzQixNQUFNQyxjQUFjLEdBQUd4QyxLQUFLLENBQUN4RSxHQUFHLENBQUNyQixvQ0FBb0MsQ0FBQztJQUN0RSxPQUFPLElBQUksQ0FBQ1ksVUFBVSxDQUNqQlksSUFBSSxDQUFDLElBQUksQ0FBQ0MsV0FBVyxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FDM0NzQixlQUFlLENBQUNxRixnQkFBZ0IsSUFBSXBHLFNBQVMsSUFBSTtNQUFFb0csZ0JBQWdCLEVBQUVBLGdCQUFnQixDQUFDRSxRQUFRLENBQUM7SUFBRSxDQUFDLENBQUMsQ0FDbkd2RixlQUFlLENBQUM7TUFBRTBGLE1BQU0sRUFBRTtJQUFXLENBQUMsQ0FBQyxDQUN2Qy9HLFlBQVksQ0FBQzJHLGNBQWMsQ0FBQ0UsTUFBTSxHQUFHLENBQUMsR0FBR0YsY0FBYyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FDaEUxRyxJQUFJLENBQXFCLENBQUM7RUFDbkM7RUFFTytHLDRCQUE0QkEsQ0FDL0I3QyxLQUF1QyxFQUN2Q3VDLGdCQUF5QixFQUNDO0lBQzFCLE1BQU1DLGNBQWMsR0FBR3hDLEtBQUssQ0FBQ3hFLEdBQUcsQ0FBQ3JCLG9DQUFvQyxDQUFDO0lBQ3RFLE9BQU8sSUFBSSxDQUFDWSxVQUFVLENBQ2pCWSxJQUFJLENBQUMsSUFBSSxDQUFDQyxXQUFXLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUM1Q3NCLGVBQWUsQ0FBQ3FGLGdCQUFnQixJQUFJcEcsU0FBUyxJQUFJO01BQUVvRyxnQkFBZ0IsRUFBRUEsZ0JBQWdCLENBQUNFLFFBQVEsQ0FBQztJQUFFLENBQUMsQ0FBQyxDQUNuRzVHLFlBQVksQ0FBQzJHLGNBQWMsQ0FBQ0UsTUFBTSxHQUFHLENBQUMsR0FBR0YsY0FBYyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FDaEUxRyxJQUFJLENBQW9CLENBQUM7RUFDbEM7RUFFT2dILGNBQWNBLENBQUEsRUFBb0I7SUFDckMsT0FBTyxJQUFJLENBQUMvSCxVQUFVLENBQUMrQixHQUFHLENBQUMsSUFBSSxDQUFDbEIsV0FBVyxDQUFDLHdCQUF3QixDQUFDLENBQUMsQ0FBQ0UsSUFBSSxDQUFTLENBQUM7RUFDekY7RUFFQSxNQUFhaUgsa0JBQWtCQSxDQUFBLEVBQTJDO0lBQ3RFLE9BQU8sTUFBTSxJQUFJLENBQUNoSSxVQUFVLENBQ3ZCK0IsR0FBRyxDQUFDLElBQUksQ0FBQ3dDLHVCQUF1QixDQUFDVCw0Q0FBcUIsQ0FBQ21FLGVBQWUsQ0FBQyxDQUFDLENBQ3hFbEgsSUFBSSxDQUFnQyxDQUFDO0VBQzlDO0VBRUEsTUFBYW1ILGlCQUFpQkEsQ0FBQ0MsWUFBb0IsRUFBdUI7SUFBQSxJQUFBQyxhQUFBLEVBQUFDLE9BQUE7SUFDdEUsTUFBTXJILE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQ2hCLFVBQVUsQ0FDL0JZLElBQUksQ0FBQyxJQUFJLENBQUNDLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUNuQ0MsWUFBWSxDQUFDLENBQUMsZUFBZXFILFlBQVksRUFBRSxDQUFDLENBQUMsQ0FDN0NwSCxJQUFJLENBQXlCLENBQUM7SUFDbkMsUUFBQXFILGFBQUEsSUFBQUMsT0FBQSxHQUFPckgsTUFBTSxDQUFDLGVBQWVtSCxZQUFZLEVBQUUsQ0FBQyxjQUFBRSxPQUFBLHVCQUFyQ0EsT0FBQSxDQUF1Q2xILEtBQUssY0FBQWlILGFBQUEsY0FBQUEsYUFBQSxHQUFJLElBQUF2QixtQkFBTSxFQUFDLENBQUM7RUFDbkU7RUFFQSxNQUFheUIsaUJBQWlCQSxDQUFBLEVBQTBCO0lBQ3BELE1BQU10SCxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUNoQixVQUFVLENBQy9CWSxJQUFJLENBQUMsSUFBSSxDQUFDQyxXQUFXLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FDbkNDLFlBQVksQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQy9CQyxJQUFJLENBQXlCLENBQUM7SUFDbkMsT0FBT29FLE1BQU0sQ0FBQ0MsTUFBTSxDQUFDcEUsTUFBTSxDQUFDLENBQUNQLEdBQUcsQ0FBQzRFLENBQUMsSUFBSUEsQ0FBQyxDQUFDbEUsS0FBSyxDQUFDO0VBQ2xEO0VBRUEsTUFBYW9ILGlCQUFpQkEsQ0FBQ0MsYUFBZ0MsRUFBaUI7SUFDNUUsTUFBTSxJQUFJLENBQUN4SSxVQUFVLENBQ2hCWSxJQUFJLENBQUMsSUFBSSxDQUFDMkQsdUJBQXVCLENBQUNULDRDQUFxQixDQUFDTyxLQUFLLENBQUMsQ0FBQyxDQUMvRGxDLGVBQWUsQ0FBQ3BELGNBQWMsQ0FBQyxDQUMvQitCLFlBQVksQ0FBQztNQUNWMEUsS0FBSyxFQUFFLEVBQUU7TUFDVEMsT0FBTyxFQUFFLENBQUMsQ0FBQztNQUNYRSxPQUFPLEVBQUU2QyxhQUFhLENBQUMvSCxHQUFHLENBQUNpRixFQUFFLElBQUksZUFBZUEsRUFBRSxFQUFFO0lBQ3hELENBQUMsQ0FBQztFQUNWO0VBRUEsTUFBYStDLHlCQUF5QkEsQ0FBQ0MsV0FBa0MsRUFBaUI7SUFDdEYsTUFBTWpELE9BQU8sR0FBRyxDQUFDLENBQUM7SUFDbEIsS0FBSyxNQUFNa0QsVUFBVSxJQUFJRCxXQUFXLEVBQUU7TUFDbENqRCxPQUFPLENBQUMsZUFBZWtELFVBQVUsQ0FBQ2pELEVBQUUsRUFBRSxDQUFDLEdBQUc7UUFDdENrRCxVQUFVLEVBQUVELFVBQVUsQ0FBQ0MsVUFBVTtRQUNqQ2xELEVBQUUsRUFBRWlELFVBQVUsQ0FBQ2pELEVBQUU7UUFDakJtRCxJQUFJLEVBQUVGLFVBQVUsQ0FBQ0U7TUFDckIsQ0FBQztJQUNMO0lBQ0EsTUFBTSxJQUFJLENBQUM3SSxVQUFVLENBQ2hCWSxJQUFJLENBQUMsSUFBSSxDQUFDMkQsdUJBQXVCLENBQUNULDRDQUFxQixDQUFDTyxLQUFLLENBQUMsQ0FBQyxDQUMvRGxDLGVBQWUsQ0FBQ3BELGNBQWMsQ0FBQyxDQUMvQitCLFlBQVksQ0FBQztNQUNWMEUsS0FBSyxFQUFFLEVBQUU7TUFDVEMsT0FBTyxFQUFFQSxPQUFPO01BQ2hCRSxPQUFPLEVBQUU7SUFDYixDQUFDLENBQUM7RUFDVjtFQUVBLE1BQWFtRCxxQkFBcUJBLENBQUN4RyxHQUFXLEVBQUV5RyxJQUFZLEVBQXVCO0lBQy9FLE9BQU8sTUFBTSxJQUFJLENBQUMvSSxVQUFVLENBQ3ZCWSxJQUFJLENBQUMsSUFBSSxDQUFDQyxXQUFXLENBQUMsa0NBQWtDLENBQUMsQ0FBQyxDQUMxRHNCLGVBQWUsQ0FBQztNQUFFRyxHQUFHLEVBQUVBLEdBQUc7TUFBRXlHLElBQUksRUFBRUE7SUFBSyxDQUFDLENBQUMsQ0FDekNoSSxJQUFJLENBQWEsQ0FBQztFQUMzQjtFQUVBLE1BQWFpSSwyQkFBMkJBLENBQUN0RCxFQUFVLEVBQXVCO0lBQ3RFLE1BQU0vRSxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUNYLFVBQVUsQ0FDakNZLElBQUksQ0FBQyxJQUFJLENBQUNDLFdBQVcsQ0FBQywwQ0FBMEMsQ0FBQyxDQUFDLENBQ2xFc0IsZUFBZSxDQUFDO01BQUVnRyxZQUFZLEVBQUV6QztJQUFHLENBQUMsQ0FBQyxDQUNyQ2UsVUFBVSxDQUFDLEdBQUcsQ0FBQztJQUVwQixJQUFJOUYsUUFBUSxDQUFDNEMsTUFBTSxLQUFLLEdBQUcsRUFBRTtNQUN6QixNQUFNMEYsU0FBUyxHQUFHLE1BQU10SSxRQUFRLENBQUNJLElBQUksQ0FBeUMsQ0FBQztNQUMvRSxJQUFJa0ksU0FBUyxDQUFDM0gsU0FBUyxLQUFLLGlCQUFpQixFQUFFO1FBQzNDLE1BQU0sSUFBSTRILDBDQUFvQixDQUFDRCxTQUFTLENBQUNFLE9BQU8sQ0FBQztNQUNyRDtNQUNBLE1BQU0sSUFBSUMscUJBQVMsQ0FBQ0gsU0FBUyxDQUFDRSxPQUFPLEVBQUV4SSxRQUFRLENBQUM0QyxNQUFNLENBQUM7SUFDM0Q7SUFDQSxPQUFPLE1BQU01QyxRQUFRLENBQUNJLElBQUksQ0FBYSxDQUFDO0VBQzVDO0VBRUEsTUFBYXNJLGVBQWVBLENBQUNDLGdCQUF1QyxFQUFFQyxPQUF5QixFQUFpQjtJQUM1RyxJQUFJQyxPQUFPLEdBQUcsSUFBSSxDQUFDeEosVUFBVSxDQUFDeUosR0FBRyxDQUFDLElBQUksQ0FBQ2xGLHVCQUF1QixDQUFDK0UsZ0JBQWdCLENBQUMsQ0FBQztJQUNqRixJQUFJLE9BQU9DLE9BQU8sS0FBSyxRQUFRLEVBQUU7TUFDN0JDLE9BQU8sR0FBR0EsT0FBTyxDQUFDcEcsV0FBVyxDQUFDbUcsT0FBTyxDQUFDO0lBQzFDLENBQUMsTUFBTSxJQUFJLElBQUFHLGtCQUFRLEVBQUNILE9BQU8sQ0FBQyxFQUFFO01BQzFCQyxPQUFPLEdBQUdBLE9BQU8sQ0FBQ3BHLFdBQVcsQ0FBQ21HLE9BQU8sQ0FBQztJQUMxQyxDQUFDLE1BQU07TUFDSEMsT0FBTyxHQUFHQSxPQUFPLENBQUMxSSxZQUFZLENBQUN5SSxPQUFPLENBQUM7SUFDM0M7SUFDQSxNQUFNQyxPQUFPO0VBQ2pCO0VBRUEsTUFBYUcsaUJBQWlCQSxDQUMxQkwsZ0JBQXVDLEVBQ3ZDTSxtQkFBd0MsRUFDM0I7SUFDYixNQUFNLElBQUksQ0FBQzVKLFVBQVUsQ0FBQzZKLEtBQUssQ0FBQyxJQUFJLENBQUN0Rix1QkFBdUIsQ0FBQytFLGdCQUFnQixDQUFDLENBQUMsQ0FBQ3hJLFlBQVksQ0FBQzhJLG1CQUFtQixDQUFDO0VBQ2pIO0VBRUEsTUFBYUUsaUJBQWlCQSxDQUMxQkMsUUFBZ0IsRUFDaEJDLGVBQXFDLEVBQ0Y7SUFDbkMsTUFBTXJKLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQ1gsVUFBVSxDQUNqQytCLEdBQUcsQ0FBQyx5QkFBeUIsQ0FBQyxDQUM5QkksZUFBZSxDQUFDO01BQUU0SCxRQUFRLEVBQUVBLFFBQVE7TUFBRUMsZUFBZSxFQUFFQSxlQUFlLGFBQWZBLGVBQWUsY0FBZkEsZUFBZSxHQUFJO0lBQU0sQ0FBQyxDQUFDLENBQ2xGdkQsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUNmQSxVQUFVLENBQUMsR0FBRyxDQUFDO0lBQ3BCLElBQUk5RixRQUFRLENBQUM0QyxNQUFNLEtBQUssR0FBRyxJQUFJNUMsUUFBUSxDQUFDNEMsTUFBTSxLQUFLLEdBQUcsSUFBSTVDLFFBQVEsQ0FBQzRDLE1BQU0sS0FBSyxHQUFHLEVBQUU7TUFDL0UsT0FBTzVDLFFBQVEsQ0FBQ0ksSUFBSSxDQUFpQixDQUFDO0lBQzFDO0lBQ0EsT0FBT0ssU0FBUztFQUNwQjtFQUVBLE1BQWE2SSwyQkFBMkJBLENBQUNGLFFBQWdCLEVBQUV6SCxHQUFXLEVBQXVDO0lBQ3pHLE1BQU0zQixRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUNYLFVBQVUsQ0FDakMrQixHQUFHLENBQUMscUNBQXFDLENBQUMsQ0FDMUNJLGVBQWUsQ0FBQztNQUFFRyxHQUFHLEVBQUVBLEdBQUc7TUFBRXlILFFBQVEsRUFBRUE7SUFBUyxDQUFDLENBQUMsQ0FDakR0RCxVQUFVLENBQUMsR0FBRyxDQUFDO0lBQ3BCLElBQUk5RixRQUFRLENBQUM0QyxNQUFNLEtBQUssR0FBRyxFQUFFO01BQ3pCLE9BQU9uQyxTQUFTO0lBQ3BCO0lBQ0EsSUFBSVQsUUFBUSxDQUFDNEMsTUFBTSxLQUFLLEdBQUcsRUFBRTtNQUN6QixNQUFNMEYsU0FBUyxHQUFHLE1BQU10SSxRQUFRLENBQUNJLElBQUksQ0FBeUMsQ0FBQztNQUMvRSxJQUFJa0ksU0FBUyxDQUFDM0gsU0FBUyxLQUFLLGlCQUFpQixFQUFFO1FBQzNDLE1BQU0sSUFBSTRILDBDQUFvQixDQUFDRCxTQUFTLENBQUNFLE9BQU8sQ0FBQztNQUNyRDtNQUNBLE1BQU0sSUFBSUMscUJBQVMsQ0FBQ0gsU0FBUyxDQUFDRSxPQUFPLEVBQUV4SSxRQUFRLENBQUM0QyxNQUFNLENBQUM7SUFDM0Q7SUFDQSxPQUFPLE1BQU01QyxRQUFRLENBQUNJLElBQUksQ0FBaUIsQ0FBQztFQUNoRDtFQUVBLE1BQWFtSiwwQkFBMEJBLENBQ25DQyxTQUFtQixFQUNuQjdILEdBQVcsRUFDWFQsV0FBeUIsRUFDWTtJQUNyQyxJQUFJO01BQ0EsTUFBTWxCLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQ1gsVUFBVSxDQUNqQ1ksSUFBSSxDQUFDLG9DQUFvQyxDQUFDLENBQzFDdUIsZUFBZSxDQUFDO1FBQUVHLEdBQUcsRUFBRUE7TUFBSSxDQUFDLENBQUMsQ0FDN0J4QixZQUFZLENBQUNxSixTQUFTLENBQUMsQ0FDdkIvSCxlQUFlLENBQUNQLFdBQVcsQ0FBQyxDQUM1QjRFLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FDZkEsVUFBVSxDQUFDLEdBQUcsQ0FBQztNQUNwQixJQUFJOUYsUUFBUSxDQUFDNEMsTUFBTSxLQUFLLEdBQUcsRUFBRTtRQUN6QixNQUFNZ0QsSUFBSSxHQUFHLE1BQU01RixRQUFRLENBQUNJLElBQUksQ0FBK0MsQ0FBQztRQUNoRixPQUFPO1VBQUVxSixXQUFXLEVBQUU3RCxJQUFJLENBQUNqRixTQUFTO1VBQUUrSSw4QkFBOEIsRUFBRSxFQUFFO1VBQUVDLGlCQUFpQixFQUFFO1FBQUUsQ0FBQztNQUNwRztNQUNBLE1BQU0vRCxJQUFJLEdBQUcsTUFBTTVGLFFBQVEsQ0FBQ0ksSUFBSSxDQUErQixDQUFDO01BQ2hFLE9BQU93RixJQUFJO0lBQ2YsQ0FBQyxDQUFDLE9BQU9nRSxDQUFDLEVBQUU7TUFDUixPQUFPO1FBQ0hILFdBQVcsRUFBRWxMLFlBQVksQ0FBQ3NMLFlBQVk7UUFDdENILDhCQUE4QixFQUFFLEVBQUU7UUFDbENDLGlCQUFpQixFQUFFO01BQ3ZCLENBQUM7SUFDTDtFQUNKO0VBRUEsTUFBYUcsa0JBQWtCQSxDQUMzQnZJLFdBQW1CLEVBQ25Cd0ksWUFBb0IsRUFDcEI3SSxXQUF5QixFQUNlO0lBQ3hDLElBQUk7TUFDQSxNQUFNbEIsUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDWCxVQUFVLENBQ2pDWSxJQUFJLENBQUMsU0FBUyxJQUFJLENBQUNSLFdBQVcsQ0FBQzZCLEVBQUUsV0FBVyxJQUFJLENBQUM3QixXQUFXLENBQUM0QyxPQUFPLG1CQUFtQixDQUFDLENBQ3hGYixlQUFlLENBQUM7UUFBRUQsV0FBVyxFQUFFQSxXQUFXO1FBQUV5SSxNQUFNLEVBQUVEO01BQWEsQ0FBQyxDQUFDLENBQ25FdEksZUFBZSxDQUFDUCxXQUFXLENBQUMsQ0FDNUI0RSxVQUFVLENBQUMsR0FBRyxDQUFDLENBQ2ZBLFVBQVUsQ0FBQyxHQUFHLENBQUM7TUFDcEIsSUFBSTlGLFFBQVEsQ0FBQzRDLE1BQU0sS0FBSyxHQUFHLEVBQUU7UUFDekIsTUFBTWdELElBQUksR0FBRyxNQUFNNUYsUUFBUSxDQUFDSSxJQUFJLENBQStDLENBQUM7UUFDaEYsT0FBTztVQUFFcUosV0FBVyxFQUFFN0QsSUFBSSxDQUFDakY7UUFBVSxDQUFDO01BQzFDO01BQ0EsT0FBT0YsU0FBUztJQUNwQixDQUFDLENBQUMsT0FBT21KLENBQUMsRUFBRTtNQUNSLE9BQU87UUFBRUgsV0FBVyxFQUFFbEwsWUFBWSxDQUFDc0w7TUFBYSxDQUFDO0lBQ3JEO0VBQ0o7RUFFQSxNQUFhSSwwQkFBMEJBLENBQ25DQyxLQUE0QixFQUM1QmhKLFdBQXlCLEVBQ2U7SUFDeEMsSUFBSTtNQUNBLE1BQU1sQixRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUNYLFVBQVUsQ0FDakNZLElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQ1IsV0FBVyxDQUFDNkIsRUFBRSxXQUFXLElBQUksQ0FBQzdCLFdBQVcsQ0FBQzRDLE9BQU8sNEJBQTRCLENBQUMsQ0FDakdsQyxZQUFZLENBQUMrSixLQUFLLENBQUMsQ0FDbkJ6SSxlQUFlLENBQUNQLFdBQVcsQ0FBQyxDQUM1QjRFLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FDZkEsVUFBVSxDQUFDLEdBQUcsQ0FBQztNQUNwQixJQUFJOUYsUUFBUSxDQUFDNEMsTUFBTSxLQUFLLEdBQUcsRUFBRTtRQUN6QixNQUFNZ0QsSUFBSSxHQUFHLE1BQU01RixRQUFRLENBQUNJLElBQUksQ0FBK0MsQ0FBQztRQUNoRixPQUFPO1VBQUVxSixXQUFXLEVBQUU3RCxJQUFJLENBQUNqRjtRQUFVLENBQUM7TUFDMUM7TUFDQSxPQUFPRixTQUFTO0lBQ3BCLENBQUMsQ0FBQyxPQUFPbUosQ0FBQyxFQUFFO01BQ1IsT0FBTztRQUFFSCxXQUFXLEVBQUVsTCxZQUFZLENBQUNzTDtNQUFhLENBQUM7SUFDckQ7RUFDSjtFQUVBLE1BQWFNLGdCQUFnQkEsQ0FBQ2YsUUFBZ0IsRUFBaUI7SUFDM0QsTUFBTSxJQUFJLENBQUMvSixVQUFVLENBQUN5SixHQUFHLENBQUMsSUFBSSxDQUFDNUksV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUNzQixlQUFlLENBQUM7TUFBRTRILFFBQVEsRUFBRUE7SUFBUyxDQUFDLENBQUM7RUFDbEc7RUFFQSxNQUFhZ0Isb0JBQW9CQSxDQUM3QmhCLFFBQWdCLEVBQ2hCaUIsYUFBK0IsRUFDL0JuSixXQUF5QixFQUNZO0lBQ3JDLE1BQU1sQixRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUNYLFVBQVUsQ0FDakNZLElBQUksQ0FBQyxJQUFJLENBQUNDLFdBQVcsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDLENBQ25Ec0IsZUFBZSxDQUFDO01BQUVELFdBQVcsRUFBRTZILFFBQVE7TUFBRWlCLGFBQWEsRUFBRUE7SUFBYyxDQUFDLENBQUMsQ0FDeEU1SSxlQUFlLENBQUNQLFdBQVcsQ0FBQztJQUNqQyxJQUFJbEIsUUFBUSxDQUFDNEMsTUFBTSxLQUFLLEdBQUcsRUFBRTtNQUN6QixPQUFPbkMsU0FBUztJQUNwQjtJQUNBLE9BQU8sTUFBTVQsUUFBUSxDQUFDSSxJQUFJLENBQW1CLENBQUM7RUFDbEQ7RUFFQSxNQUFha0ssbUJBQW1CQSxDQUM1QjNJLEdBQVcsRUFDWDRJLFdBQW1CLEVBQ25CZixTQUFtQixFQUM2QjtJQUNoRCxJQUFJO01BQ0EsTUFBTXhKLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQ1gsVUFBVSxDQUNqQ1ksSUFBSSxDQUFDLGlDQUFpQyxDQUFDLENBQ3ZDdUIsZUFBZSxDQUFDO1FBQUVHLEdBQUcsRUFBRUEsR0FBRztRQUFFNEksV0FBVyxFQUFFQTtNQUFZLENBQUMsQ0FBQyxDQUN2RHBLLFlBQVksQ0FBQ3FKLFNBQVMsQ0FBQztNQUM1QixJQUFJeEosUUFBUSxDQUFDNEMsTUFBTSxLQUFLLEdBQUcsRUFBRTtRQUN6QixPQUFPLE1BQU01QyxRQUFRLENBQUNJLElBQUksQ0FBOEIsQ0FBQztNQUM3RDtNQUNBLE9BQU9LLFNBQVM7SUFDcEIsQ0FBQyxDQUFDLE9BQU9tSixDQUFDLEVBQUU7TUFDUixPQUFPbkosU0FBUztJQUNwQjtFQUNKO0VBRUEsTUFBYStKLDJCQUEyQkEsQ0FDcENELFdBQW1CLEVBQ25CbkIsUUFBa0IsRUFDbEJpQixhQUFxQixFQUNyQkksY0FBOEIsRUFDMEI7SUFDeEQsSUFBSTtNQUNBLE1BQU16SyxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUNYLFVBQVUsQ0FDakNZLElBQUksQ0FBQyxJQUFJLENBQUNDLFdBQVcsQ0FBQywyQ0FBMkMsQ0FBQyxDQUFDLENBQ25Fc0IsZUFBZSxDQUFDO1FBQ2IrSSxXQUFXLEVBQUVBLFdBQVc7UUFDeEJGLGFBQWEsRUFBRUEsYUFBYTtRQUM1QkksY0FBYyxFQUFFQTtNQUNwQixDQUFDLENBQUMsQ0FDRHRLLFlBQVksQ0FBQ2lKLFFBQVEsQ0FBQztNQUMzQixJQUFJcEosUUFBUSxDQUFDNEMsTUFBTSxLQUFLLEdBQUcsRUFBRTtRQUN6QixPQUFPLE1BQU01QyxRQUFRLENBQUNJLElBQUksQ0FBc0MsQ0FBQztNQUNyRTtNQUNBLE9BQU9LLFNBQVM7SUFDcEIsQ0FBQyxDQUFDLE9BQU9tSixDQUFDLEVBQUU7TUFDUixPQUFPbkosU0FBUztJQUNwQjtFQUNKO0VBRUEsTUFBYWlLLDRCQUE0QkEsQ0FDckNsQixTQUFtQixFQUNuQmEsYUFBK0IsRUFDL0JNLElBQWUsRUFDc0I7SUFDckMsTUFBTTNLLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQ1gsVUFBVSxDQUNqQ1ksSUFBSSxDQUFDLElBQUksQ0FBQ0MsV0FBVyxDQUFDLDRCQUE0QixDQUFDLENBQUMsQ0FDcERzQixlQUFlLENBQUM7TUFBRTZJLGFBQWEsRUFBRUE7SUFBYyxDQUFDLENBQUMsQ0FDakRsSyxZQUFZLENBQUM7TUFBRXFKLFNBQVMsRUFBRUEsU0FBUztNQUFFb0IsU0FBUyxFQUFFRDtJQUFLLENBQUMsQ0FBQyxDQUN2RDdFLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FDZkEsVUFBVSxDQUFDLEdBQUcsQ0FBQztJQUNwQixJQUFJOUYsUUFBUSxDQUFDNEMsTUFBTSxLQUFLLEdBQUcsSUFBSTVDLFFBQVEsQ0FBQzRDLE1BQU0sS0FBSyxHQUFHLEVBQUU7TUFDcEQsT0FBT25DLFNBQVM7SUFDcEI7SUFDQSxPQUFPLE1BQU1ULFFBQVEsQ0FBQ0ksSUFBSSxDQUFtQixDQUFDO0VBQ2xEO0VBRUEsTUFBYXlLLFVBQVVBLENBQ25CckIsU0FBbUIsRUFDbkJhLGFBQStCLEVBQy9CSSxjQUE4QixFQUM5QkssYUFBc0IsRUFDdEJILElBQWUsRUFDc0I7SUFDckMsTUFBTTNLLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQ1gsVUFBVSxDQUNqQ1ksSUFBSSxDQUFDLElBQUksQ0FBQ0MsV0FBVyxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FDOUNzQixlQUFlLENBQUM7TUFDYjZJLGFBQWEsRUFBRUEsYUFBYTtNQUM1QkksY0FBYyxFQUFFQSxjQUFjO01BQzlCTSxXQUFXLEVBQUVEO0lBQ2pCLENBQUMsQ0FBQyxDQUNEM0ssWUFBWSxDQUFDO01BQUU2SyxZQUFZLEVBQUV4QixTQUFTO01BQUVvQixTQUFTLEVBQUVEO0lBQUssQ0FBQyxDQUFDO0lBQy9ELElBQUkzSyxRQUFRLENBQUM0QyxNQUFNLEtBQUssR0FBRyxFQUFFO01BQ3pCLE9BQU9uQyxTQUFTO0lBQ3BCO0lBQ0EsT0FBTyxNQUFNVCxRQUFRLENBQUNJLElBQUksQ0FBbUIsQ0FBQztFQUNsRDtFQUVBLE1BQWE2SyxnQkFBZ0JBLENBQUNDLFFBQXVCLEVBQWlCO0lBQ2xFLE1BQU0sSUFBSSxDQUFDN0wsVUFBVSxDQUFDNkosS0FBSyxDQUFDLElBQUksQ0FBQ2hKLFdBQVcsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLENBQUNDLFlBQVksQ0FBQytLLFFBQVEsQ0FBQztFQUNqRztFQUVBLE1BQWFDLGdCQUFnQkEsQ0FBQSxFQUEyQjtJQUNwRCxNQUFNbkwsUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDWCxVQUFVLENBQUMrQixHQUFHLENBQUMsSUFBSSxDQUFDbEIsV0FBVyxDQUFDLHVCQUF1QixDQUFDLENBQUM7SUFFckYsT0FBT0YsUUFBUSxDQUFDSSxJQUFJLENBQWdCLENBQUM7RUFDekM7RUFFQSxNQUFhZ0wsZ0JBQWdCQSxDQUFDOUcsS0FBYSxFQUFpQjtJQUN4RCxNQUFNLElBQUksQ0FBQ2pGLFVBQVUsQ0FBQ1ksSUFBSSxDQUFDLElBQUksQ0FBQ0MsV0FBVyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQ0MsWUFBWSxDQUFDbUUsS0FBSyxDQUFDO0VBQ3RGO0VBRVFwQixnQ0FBZ0NBLENBQUN5RixnQkFBdUMsRUFBVTtJQUN0RixPQUFPLElBQUksQ0FBQ3RKLFVBQVUsQ0FBQ3lELEdBQUcsQ0FBQyxJQUFJLENBQUNjLHVCQUF1QixDQUFDK0UsZ0JBQWdCLENBQUMsQ0FBQztFQUM5RTtFQUVRekksV0FBV0EsQ0FBQ2tDLGVBQXVCLEVBQVU7SUFDakQsT0FBTyxTQUFTLElBQUksQ0FBQzNDLFdBQVcsQ0FBQzZCLEVBQUUsV0FBVyxJQUFJLENBQUM3QixXQUFXLENBQUM0QyxPQUFPLElBQUlELGVBQWUsRUFBRTtFQUMvRjtFQUVRd0IsdUJBQXVCQSxDQUFDK0UsZ0JBQXVDLEVBQVU7SUFDN0UsT0FBTyxJQUFJLENBQUN6SSxXQUFXLENBQUMsaUJBQWlCeUksZ0JBQWdCLENBQUM1QixRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUM7RUFDM0U7RUFFQSxNQUFhc0UsNEJBQTRCQSxDQUFDL0csS0FBcUMsRUFBaUI7SUFDNUYsTUFBTWdILEdBQUcsR0FBRyxJQUFJLENBQUNwTCxXQUFXLENBQUMsdUNBQXVDLENBQUM7SUFDckUsTUFBTXFMLFVBQVUsR0FBR2pILEtBQUssQ0FBQ3hFLEdBQUcsQ0FBQzRFLENBQUMsS0FBSztNQUFFLEdBQUdBLENBQUM7TUFBRTBELElBQUksRUFBRSxJQUFBb0QsOEJBQW1CLEVBQUM5RyxDQUFDLENBQUMwRCxJQUFJO0lBQUUsQ0FBQyxDQUFDLENBQUM7SUFDaEYsTUFBTSxJQUFJLENBQUMvSSxVQUFVLENBQUM2SixLQUFLLENBQUNvQyxHQUFHLENBQUMsQ0FBQ25MLFlBQVksQ0FBQ29MLFVBQVUsQ0FBQztFQUM3RDtFQUVBLE1BQWFFLHFCQUFxQkEsQ0FDOUJDLElBQVksRUFDWkMsV0FBbUIsRUFDbkJDLGFBQXVCLEVBQ3ZCL0UsZ0JBQXlCLEVBQ1I7SUFDakIsTUFBTWdGLHNCQUFzQixHQUFHaEYsZ0JBQWdCLElBQUlwRyxTQUFTLEdBQUc7TUFBRW9HLGdCQUFnQixFQUFFQTtJQUFpQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzFHLE1BQU1pRixNQUFNLEdBQUc7TUFBRUMsWUFBWSxFQUFFTCxJQUFJO01BQUVDLFdBQVcsRUFBRUEsV0FBVztNQUFFLEdBQUdFO0lBQXVCLENBQUM7SUFDMUYsT0FBTyxJQUFJLENBQUN4TSxVQUFVLENBQ2pCWSxJQUFJLENBQUMsSUFBSSxDQUFDQyxXQUFXLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxDQUNoRHNCLGVBQWUsQ0FBQ3NLLE1BQU0sQ0FBQyxDQUN2QjNMLFlBQVksQ0FBQ3lMLGFBQWEsQ0FBQyxDQUMzQnhMLElBQUksQ0FBVyxDQUFDO0VBQ3pCO0VBRUEsTUFBYTRMLGVBQWVBLENBQUNuRCxPQUEwQixFQUFFM0gsV0FBeUIsRUFBK0I7SUFDN0csT0FBTyxJQUFJLENBQUM3QixVQUFVLENBQ2pCWSxJQUFJLENBQUMsSUFBSSxDQUFDQyxXQUFXLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxDQUNoREMsWUFBWSxDQUFDMEksT0FBTyxDQUFDLENBQ3JCcEgsZUFBZSxDQUFDUCxXQUFXLENBQUMsQ0FDNUJkLElBQUksQ0FBcUIsQ0FBQztFQUNuQztFQUVBLE1BQWE2TCxnQkFBZ0JBLENBQ3pCcEQsT0FBZ0MsRUFDaEMzSCxXQUF5QixFQUNHO0lBQzVCLE9BQU8sSUFBSSxDQUFDN0IsVUFBVSxDQUNqQlksSUFBSSxDQUFDLElBQUksQ0FBQ0MsV0FBVyxDQUFDLDBCQUEwQixDQUFDLENBQUMsQ0FDbERDLFlBQVksQ0FBQzBJLE9BQU8sQ0FBQyxDQUNyQnBILGVBQWUsQ0FBQ1AsV0FBVyxDQUFDLENBQzVCZCxJQUFJLENBQXNCLENBQUM7RUFDcEM7RUFFQSxNQUFhOEwsZUFBZUEsQ0FDeEI5RixZQUEyQixFQUMzQitGLFlBQWlDLEVBQ2pDakwsV0FBeUIsRUFDRTtJQUMzQixNQUFNNEssTUFBTSxHQUFHO01BQUUxRixZQUFZLEVBQUVBO0lBQWEsQ0FBQztJQUM3QyxNQUFNL0YsTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDaEIsVUFBVSxDQUMvQlksSUFBSSxDQUFDLElBQUksQ0FBQ0MsV0FBVyxDQUFDLHdCQUF3QixDQUFDLENBQUMsQ0FDaERzQixlQUFlLENBQUNzSyxNQUFNLENBQUMsQ0FDdkIzTCxZQUFZLENBQUNnTSxZQUFZLENBQUNyTSxHQUFHLENBQUM0RSxDQUFDLElBQUlBLENBQUMsQ0FBQ3FDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUNqRHRGLGVBQWUsQ0FBQ1AsV0FBVyxDQUFDO0lBRWpDLE9BQU9iLE1BQU0sQ0FBQ3VDLE1BQU0sSUFBSSxHQUFHLEdBQUcsTUFBTXZDLE1BQU0sQ0FBQ0QsSUFBSSxDQUE0QixDQUFDLEdBQUdDLE1BQU0sQ0FBQ3VDLE1BQU07RUFDaEc7RUFFQSxNQUFhd0osZUFBZUEsQ0FBQ3ZELE9BQStCLEVBQWlCO0lBQ3pFLE1BQU0sSUFBSSxDQUFDeEosVUFBVSxDQUFDNkosS0FBSyxDQUFDLElBQUksQ0FBQ2hKLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDQyxZQUFZLENBQUMwSSxPQUFPLENBQUM7RUFDaEY7RUFFQSxNQUFhd0QsZUFBZUEsQ0FBQ0MsYUFBc0MsRUFBaUI7SUFDaEYsTUFBTSxJQUFJLENBQUNqTixVQUFVLENBQUNZLElBQUksQ0FBQyxJQUFJLENBQUNDLFdBQVcsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLENBQUNDLFlBQVksQ0FBQ21NLGFBQWEsQ0FBQztFQUN0RztFQUVBLE1BQWFDLGFBQWFBLENBQUNDLFFBQWdCLEVBQUVDLFVBQWlDLEVBQWlCO0lBQzNGLE1BQU1DLFdBQVcsR0FBRztNQUFFRixRQUFRLEVBQUVBO0lBQVMsQ0FBQztJQUMxQyxNQUFNLElBQUksQ0FBQ25OLFVBQVUsQ0FDaEJZLElBQUksQ0FBQyxJQUFJLENBQUNDLFdBQVcsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQzNDc0IsZUFBZSxDQUFDa0wsV0FBVyxDQUFDLENBQzVCdk0sWUFBWSxDQUFDc00sVUFBVSxDQUFDO0VBQ2pDO0VBRU9FLEtBQUtBLENBQUNDLElBQWUsRUFBRXpMLElBQWUsRUFBMEI7SUFDbkUsT0FBTyxJQUFJLENBQUM5QixVQUFVLENBQ2pCWSxJQUFJLENBQUMsSUFBSSxDQUFDQyxXQUFXLENBQUMsNkJBQTZCME0sSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUMzRHpNLFlBQVksQ0FBQ2dCLElBQUksQ0FBQyxDQUNsQmYsSUFBSSxDQUFnQixDQUFDO0VBQzlCO0VBRUEsTUFBYXlNLFVBQVVBLENBQUN0QyxXQUFtQixFQUFzQztJQUM3RSxJQUFJO01BQ0EsTUFBTXZLLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQ1gsVUFBVSxDQUNqQ1ksSUFBSSxDQUFDLElBQUksQ0FBQ0MsV0FBVyxDQUFDLDJCQUEyQixDQUFDLENBQUMsQ0FDbkRzQixlQUFlLENBQUM7UUFBRStJLFdBQVcsRUFBRUE7TUFBWSxDQUFDLENBQUM7TUFDbEQsSUFBSXZLLFFBQVEsQ0FBQzRDLE1BQU0sS0FBSyxHQUFHLEVBQUU7UUFDekIsTUFBTWtLLFVBQVUsR0FBRzlNLFFBQVEsQ0FBQ0ksSUFBSSxDQUFnQixDQUFDO1FBQ2pELE9BQU8wTSxVQUFVO01BQ3JCO01BQ0EsT0FBT3JNLFNBQVM7SUFDcEIsQ0FBQyxDQUFDLE9BQU9tSixDQUFDLEVBQUU7TUFDUixPQUFPbkosU0FBUztJQUNwQjtFQUNKO0VBRUEsTUFBYXNNLFdBQVdBLENBQUEsRUFBK0I7SUFDbkQsTUFBTS9NLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQ1gsVUFBVSxDQUFDK0IsR0FBRyxDQUN0QyxTQUFTLElBQUksQ0FBQzNCLFdBQVcsQ0FBQzZCLEVBQUUsV0FBVyxJQUFJLENBQUM3QixXQUFXLENBQUM0QyxPQUFPLGNBQ25FLENBQUM7SUFFRCxPQUFPckMsUUFBUSxDQUFDSSxJQUFJLENBQW9CLENBQUM7RUFDN0M7QUFDSjtBQUFDNUIsT0FBQSxDQUFBa0IsbUJBQUEsR0FBQUEsbUJBQUEiLCJpZ25vcmVMaXN0IjpbXX0=
570
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfVHlwaW5nVXRpbHMiLCJyZXF1aXJlIiwiX0h0dHBDbGllbnQiLCJfQXV0aGVudGljYXRpb25Nb2RlIiwiX01vZGVsUGF0aCIsIl9Gb2N1c1R5cGVzIiwiX0RyYWZ0UHJlc2VudGF0aW9uVHlwZSIsIl9Jc0J1ZmZlciIsIl9GdWZTaXplVG9vTGFyZ2VFcnJvciIsInN0cmFuZ2VPcHRpb25zIiwic3JjIiwiZGF0YVZlcnNpb24iLCJDYW5keVJlc291cmNlWm9uZXMiLCJleHBvcnRzIiwiVGVzdEZvcm1zIiwiU2VydmVyRXJyb3JzIiwiY29udmVydFBhdGhMb2FkU3BlY2lmaWNhdGlvblRvU3RyaW5nIiwic3BlYyIsInNraXAiLCJwYXRoT3JQYXRoUHJlZml4IiwidG9MZWdhY3lQYXRoIiwiQ2FuZHlBcGlDbGllbnQiLCJjb25zdHJ1Y3RvciIsImZldGNoSW1wbCIsImJhc2VVcmwiLCJyZXNvdXJjZVpvbmUiLCJhdXRoZW50aWNhdGlvbiIsImV4Y2VwdGlvbkxvZ2dlciIsImh0dHBDbGllbnQiLCJIdHRwQ2xpZW50IiwiY3JlYXRlQXV0aGVudGljYXRpb25Qcm92aWRlciIsImZvckRyYWZ0IiwiZHJhZnRGdWxsSWQiLCJDYW5keUFwaURyYWZ0Q2xpZW50IiwiZ2V0SW5mb0J5SW5ucyIsImlubnMiLCJwYXRocyIsIm1hcCIsImlubiIsInJlc3BvbnNlIiwicG9zdCIsImdldERyYWZ0VXJsIiwid2l0aEpzb25Cb2R5IiwianNvbiIsInJlc3VsdCIsIl9yZXNwb25zZSIsImlublNlcnZlclZhbHVlIiwidmFsdWUiLCJ1bmRlZmluZWQiLCJlcnJvciIsImVycm9yQ29kZSIsIkZvY3VzU2VydmVyRXJyb3JDb2RlIiwiTm9Jbm5FcnJvciIsIl9pbm5TZXJ2ZXJWYWx1ZSR2YWx1ZSIsIl9pbm5TZXJ2ZXJWYWx1ZSRlcnJvciIsIl9pbm5TZXJ2ZXJWYWx1ZSRlcnJvcjIiLCJnZXRBbGxHZnZzIiwiYWJvcnRTaWduYWwiLCJib2R5IiwiZ2V0IiwiY3JlYXRlRHJhZnRGcm9tRHJpdmUiLCJucyIsImZ1ZkRyaXZlVXJpIiwid2l0aFF1ZXJ5UGFyYW1zIiwid2l0aEFib3J0U2lnbmFsIiwiY3JlYXRlRW1wdHlEcmFmdCIsImdmdiIsImNyZWF0ZURyYWZ0IiwiZnVmQ29udGVudCIsIndpdGhDb250ZW50VHlwZSIsIndpdGhCb2R5RnJvbUJ1ZmZlciIsIkJ1ZmZlciIsImZyb20iLCJFcnJvciIsImNoZWNrQWxpdmUiLCJkcmFmdFJlbGF0ZWRVcmwiLCJkcmFmdElkIiwiZ2V0RmVhdHVyZUZsYWdzIiwiZ2V0SHJlZlRvSW5uZXJFZGl0b3IiLCJ1cmwiLCJnZXRIcmVmRG93bmxvYWRGdWYiLCJnZXRIcmVmVG9Db252ZXJ0YXRpb25Mb2ciLCJnZXRIcmVmVG9Eb3dubG9hZElubmVyRnVmIiwiZ2V0SHJlZkRvd25sb2FkRHJhZnRQcmVzZW50YXRpb24iLCJEcmFmdFByZXNlbnRhdGlvblR5cGUiLCJpbm5lckZ1ZiIsImdldEhyZWZUb0Rvd25sb2FkQ2xpZW50SW5mbyIsImNsaWVudEluZm8iLCJnZXRIcmVmVG9Eb3dubG9hZEZvcm1zQ2xpZW50SW5mbyIsImZvcm1zQ2xpZW50SW5mbyIsImdldEhyZWZEb3dubG9hZElubmVyIiwiaW5uZXIiLCJnZXRFcnJvckxvZyIsImdldERyYWZ0UHJlc2VudGF0aW9uVXJsIiwiZXJyb3JMb2ciLCJnZXRFcnJvckxvZ1dpdGhDaGVja1NjZW5hcmlvcyIsImNoZWNrU2NlbmFyaW9zIiwiZ2V0VGFza0J5SWQiLCJ0YXNrSWQiLCJfdGFza3MiLCJ0YXNrcyIsImdldEZ1ZldpdGhBdHRhY2htZW50cyIsImdldFBhcnRpYWxGdWYiLCJydWxlcyIsImdldEFsbFRhc2tzIiwiT2JqZWN0IiwidmFsdWVzIiwieCIsImVucXVldWVUYXNrIiwidGFza0luZm8iLCJhZGRlZCIsImNoYW5nZWQiLCJpZCIsInJlbW92ZWQiLCJjYW5jZWxUYXNrIiwiZ2V0RXhwZXJ0RXJyb3JMb2ciLCJlcnJvcmxvZ0V4cGVydCIsImdldEhyZWZUb0Vycm9yTG9nUGRmIiwiZXJyb3JMb2dOYW1lIiwicHJvcHNOYW1lIiwicHJvcHNEcml2ZU5hbWUiLCJjbGVhckRyYWZ0IiwiY29udmVydERyYWZ0RnJvbVByZXZHZnYiLCJwcmV2R2Z2RHJhZnRJZCIsInNlbmRDaGFuZ2VTZXQiLCJkYXRhIiwiY3VycmVudERhdGFWZXJzaW9uIiwiYWNjZXB0Q29kZSIsImdldFN1Y2Nlc3NSZXN1bHQiLCJfZGF0YVJlc3VsdCRkYXRhVmVyc2kiLCJkYXRhUmVzdWx0IiwicmVqZWN0Iiwic3RhdHVzIiwic2VuZENoYW5nZVdpdGhOb3JtYWxpemF0aW9uU2V0Iiwibm9ybWFsaXplcklkIiwic2VuZENoYW5nZVNldFN5bmMiLCJwb3N0U3luYyIsImdldFN1Y2Nlc3NSZXN1bHRTeW5jIiwiX2RhdGFSZXN1bHQkZGF0YVZlcnNpMiIsImdldFJlcXVpc2l0ZXMiLCJyZXF1aXNpdGVMaXN0IiwiZ2V0SW5uZXIiLCJnZXRQYXJ0aWFsSW5uZXIiLCJtYXhJbnN0YW5jZUNvdW50IiwiY29udmVydGVkUnVsZXMiLCJ0b1N0cmluZyIsImxlbmd0aCIsImdldFBhcnRpYWxJbm5lckFzSnNvblRyZWUiLCJmb3JtYXQiLCJnZXRSYXdQYXJ0aWFsSW5uZXJBc0pzb25UcmVlIiwiZ2V0RGF0YVZlcnNpb24iLCJnZXRFeHBsYW5hdG9yeU5vdGUiLCJleHBsYW5hdG9yeU5vdGUiLCJnZXRBdHRhY2htZW50QnlJZCIsImF0dGFjaG1lbnRJZCIsIl9yZXN1bHQkdmFsdWUiLCJfcmVzdWx0IiwiZ2V0QWxsQXR0YWNobWVudHMiLCJyZW1vdmVBdHRhY2htZW50cyIsImF0dGFjaG1lbnRJZHMiLCJjcmVhdGVPclVwZGF0ZUF0dGFjaG1lbnRzIiwiYXR0YWNobWVudHMiLCJhdHRhY2htZW50IiwiY29udGVudFVyaSIsIm1ldGEiLCJjcmVhdGVEcmFmdEF0dGFjaG1lbnQiLCJwYXRoIiwib3BlbkxvYWRlZEF0dGFjaG1lbnRBc0RyYWZ0IiwiZXJyb3JEYXRhIiwiRnVmU2l6ZVRvb0xhcmdlRXJyb3IiLCJtZXNzYWdlIiwiSHR0cEVycm9yIiwic2V0UHJlc2VudGF0aW9uIiwicHJlc2VudGF0aW9uVHlwZSIsImNvbnRlbnQiLCJyZXF1ZXN0IiwicHV0Iiwid2l0aFJhd0JvZHkiLCJpc0J1ZmZlciIsInBhdGNoUHJlc2VudGF0aW9uIiwicHJlc2VudGF0aW9uQ29udGVudCIsInBhdGNoIiwiZ2V0RmlsZVByb3BlcnRpZXMiLCJkcml2ZVVyaSIsImlnbm9yZVNpemVDaGVjayIsInByZXBhcmVBbmRHZXRGaWxlUHJvcGVydGllcyIsInVwbG9hZEFuZEdldEZpbGVQcm9wZXJ0aWVzIiwiZHJpdmVVcmlzIiwic2VydmVyRXJyb3IiLCJpbnZhbGlkU291cmNlRHJpdmVDb250ZW50TmFtZXMiLCJzb3VyY2VzVG90YWxDb3VudCIsImUiLCJVbmtub3duRXJyb3IiLCJhY2NlcHRUcmFuc2ZlclR5cGUiLCJ0cmFuc2ZlclR5cGUiLCJ0eXBlSWQiLCJhY2NlcHRNdWx0aXBsZVRyYW5zZmVyVHlwZSIsImZpbGVzIiwic2V0RnVmQnlEcml2ZVVyaSIsImNvbWJpbmVGdWZCeURyaXZlVXJpIiwiY29tYmluZU1ldGhvZCIsImV4Y2Vsc1RvUGFydGlhbEZ1ZnMiLCJwYXRoVG9UYWJsZSIsImltcG9ydEZyb21QYXJ0aWFsRnVmc0J5UGF0aCIsImNvbWJpbmF0b3JUeXBlIiwibXVsdGlwbGVDb21iaW5lRnVmQnlEcml2ZVVyaSIsImFyZ3MiLCJhcmd1bWVudHMiLCJpbXBvcnRYbWxzIiwiaXNJbXBvcnRCeUZ1ZiIsImltcG9ydEJ5RnVmIiwiRnVmRHJpdmVVcmlzIiwic2V0RHJhZnRTZXR0aW5ncyIsInNldHRpbmdzIiwiZ2V0RHJhZnRTZXR0aW5ncyIsIm5vcm1hbGl6ZUJ5UnVsZXMiLCJzZXRNdWx0aXBsZVdpdGhOb3JtYWxpemF0aW9uIiwidXJpIiwiZmluYWxSdWxlcyIsImNvbnZlcnRUb0xlZ2FjeVBhdGgiLCJzZWFyY2hJbnN0YW5jZXNCeVRleHQiLCJ0ZXh0IiwicGF0aHNQcmVmaXgiLCJwYXRoc1RvU2VhcmNoIiwibWF4SW5zdGFuY2VDb3VudFBhcmFtcyIsInBhcmFtcyIsInNlYXJjaFN0cmluZyIsInF1ZXJ5Q29sbGVjdGlvbiIsInJlc29sdmVJbm5lclBhdGgiLCJjdXN0b21Ob3JtYWxpemUiLCJwYXRoUHJlZml4ZXMiLCJpbXBvcnRFbXBsb3llZXMiLCJkZWxldGVJbnN0YW5jZXMiLCJkZWxldGluZ1J1bGVzIiwicnVuTWFzc0FjdGlvbiIsImFjdGlvbklkIiwicGFyYW1ldGVycyIsInF1ZXJ5UGFyYW1zIiwicHJpbnQiLCJ0eXBlIiwicHJpbnRFeGNlbCIsInRhYmxlRXhjZWwiLCJjaGVja0J5UG9wZCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL0NvbW1vbi9DYW5keUFwaUNsaWVudC9DYW5keUFwaUNsaWVudC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByZWplY3QgfSBmcm9tIFwiLi4vVHlwaW5nVXRpbHNcIjtcbmltcG9ydCB7IEZldGNoIH0gZnJvbSBcIi4uL0h0dHBDbGllbnQvRmV0Y2hJbXBsZW1lbnRhdGlvbi9GZXRjaFwiO1xuaW1wb3J0IHsgRXhjZXB0aW9uTG9nZ2VyLCBIdHRwQ2xpZW50LCBIdHRwRXJyb3IgfSBmcm9tIFwiLi4vSHR0cENsaWVudC9IdHRwQ2xpZW50XCI7XG5pbXBvcnQgeyBJSHR0cENsaWVudCB9IGZyb20gXCIuLi9IdHRwQ2xpZW50L0lIdHRwQ2xpZW50XCI7XG5pbXBvcnQgeyBBdXRoZW50aWNhdGlvbk1vZGUsIGNyZWF0ZUF1dGhlbnRpY2F0aW9uUHJvdmlkZXIgfSBmcm9tIFwiLi4vSHR0cENsaWVudC9BdXRoZW50aWNhdGlvbk1vZGVcIjtcbmltcG9ydCB7IElDb21iaW5lQnlUcmFuc2ZlcnMgfSBmcm9tIFwiLi4vLi4vRW5naW5lL3NyYy9FbmdpbmUvQ29yZS9Nb2RhbE1hbmFnZXIvTW9kYWxzL1VwbG9hZFNlY3Rpb24vVHlwZXNcIjtcbmltcG9ydCB7IEFic29sdXRlTW9kZWxQYXRoLCBjb252ZXJ0VG9MZWdhY3lQYXRoIH0gZnJvbSBcIi4uL01vZGVsUGF0aC9Nb2RlbFBhdGhcIjtcblxuaW1wb3J0IHtcbiAgICBCYXNlR2V0RnVmUmVzcG9uc2UsXG4gICAgQ2hlY2tTY2VuYXJpb1R5cGUsXG4gICAgRHJhZnRTZXR0aW5ncyxcbiAgICBGdWZXaXRoQXR0YWNobWVudHNSZXNwb25zZSxcbiAgICBJQ2FuZHlBcGlDbGllbnQsXG4gICAgSUNhbmR5QXBpRHJhZnRDbGllbnQsXG4gICAgSUlubmVyQ2hhbmdlUmVzdWx0LFxuICAgIElJbm5lckNoYW5nZVN1Y2Nlc3NSZXN1bHQsXG4gICAgUGF0aExvYWRTcGVjaWZpY2F0aW9uLFxufSBmcm9tIFwiLi9JQ2FuZHlBcGlDbGllbnRcIjtcbmltcG9ydCB7IFNlcnZlckVycm9yTG9nIH0gZnJvbSBcIi4vVHlwZXMvRXJyb3JMb2cvU2VydmVyRXJyb3JMb2dcIjtcbmltcG9ydCB7IFNlcnZlcklubmVyUmVzcG9uc2UsIFNlcnZlckpzb25SZXNwb25zZSB9IGZyb20gXCIuL1R5cGVzL0dldElubmVyL1NlcnZlcklubmVyUmVzcG9uc2VcIjtcbmltcG9ydCB7XG4gICAgRXhjZWxzVG9QYXJ0aWFsRnVmc1Jlc3BvbnNlLFxuICAgIEZpbGVQcm9wZXJ0aWVzLFxuICAgIEltcG9ydEZyb21QYXJ0aWFsRnVmc0J5UGF0aFJlc3BvbnNlLFxuICAgIFNlcnZlckVycm9yUmVzcG9uc2UsXG4gICAgVXBsb2FkRmlsZVByb3BlcnRpZXNSZXNwb25zZSxcbn0gZnJvbSBcIi4vVHlwZXMvRHJhZnRBY3Rpb25zL0ZpbGVQcm9wZXJ0aWVzXCI7XG5pbXBvcnQgeyBDcmVhdGVEcmFmdFJlc3BvbnNlIH0gZnJvbSBcIi4vVHlwZXMvQ3JlYXRlRHJhZnQvQ3JlYXRlRHJhZnRSZXNwb25zZVwiO1xuaW1wb3J0IHsgQ3JlYXRlRXhwbGFuYXRvcnlOb3RlUmVzcG9uc2UgfSBmcm9tIFwiLi9UeXBlcy9FeHBsYW5hdG9yeU5vdGUvQ3JlYXRlRXhwbGFuYXRvcnlOb3RlUmVzcG9uc2VcIjtcbmltcG9ydCB7IERyYWZ0RnVsbElkIH0gZnJvbSBcIi4vVHlwZXMvRHJhZnRGdWxsSWRcIjtcbmltcG9ydCB7IFNlcnZlckNoYW5nZVNldCB9IGZyb20gXCIuL1R5cGVzL0NoYW5nZVNldC9TZXJ2ZXJDaGFuZ2VTZXRcIjtcbmltcG9ydCB7IFNlcnZlclRhc2ssIFZlcmlmeUFuZEZpeEZuc1JlcXVpcmVtZW50c1Rhc2tJbmZvIH0gZnJvbSBcIi4vVHlwZXMvVGFza3MvVGFza3NcIjtcbmltcG9ydCB7IEZvY3VzU2VydmVyRXJyb3JDb2RlLCBHZXRCeUlublJlc3BvbnNlIH0gZnJvbSBcIi4vVHlwZXMvRm9jdXMvRm9jdXNUeXBlc1wiO1xuaW1wb3J0IHsgQXR0YWNoSW5mbyB9IGZyb20gXCIuL1R5cGVzL0F0dGFjaG1lbnRzL0F0dGFjbWVudHNcIjtcbmltcG9ydCB7IERyYWZ0UHJlc2VudGF0aW9uVHlwZSB9IGZyb20gXCIuL1R5cGVzL1ByZXNlbnRhdGlvbnMvRHJhZnRQcmVzZW50YXRpb25UeXBlXCI7XG5pbXBvcnQgeyBQcmVzZW50YXRpb25Db250ZW50IH0gZnJvbSBcIi4vVHlwZXMvUHJlc2VudGF0aW9ucy9QcmVzZW50YXRpb25Db250ZW50XCI7XG5pbXBvcnQgeyBDb252ZXJ0RHJhZnRSZXF1ZXN0IH0gZnJvbSBcIi4vVHlwZXMvRHJhZnRBY3Rpb25zL0NvbnZlcnREcmFmdFJlcXVlc3RcIjtcbmltcG9ydCB7IEdldEF0dGFjaG1lbnRzUmVzcG9uc2UgfSBmcm9tIFwiLi9UeXBlcy9BdHRhY2htZW50cy9HZXRBdHRhY2htZW50c1Jlc3BvbnNlXCI7XG5pbXBvcnQgeyBGb2N1c1NlcnZlclJlc3BvbnNlIH0gZnJvbSBcIi4vVHlwZXMvRm9jdXMvRm9jdXNTZXJ2ZXJSZXNwb25zZVwiO1xuaW1wb3J0IHsgR2V0VGFza3NTZXJ2ZXJSZXNwb25zZSB9IGZyb20gXCIuL1R5cGVzL1Rhc2tzL0dldFRhc2tzU2VydmVyUmVzcG9uc2VcIjtcbmltcG9ydCB7IFNlcnZlclJlcXVpc2l0ZXNSZXNwb25zZSB9IGZyb20gXCIuL1R5cGVzL0dldElubmVyL1NlcnZlclJlcXVpc2l0ZXNSZXNwb25zZVwiO1xuaW1wb3J0IHsgaXNCdWZmZXIgfSBmcm9tIFwiLi9Jc0J1ZmZlclwiO1xuaW1wb3J0IHsgQ29tYmluYXRvclR5cGUsIENvbWJpbmVGdWZSZXN1bHQsIEZ1ZkNvbWJpbmVNZXRob2QgfSBmcm9tIFwiLi9UeXBlcy9EcmFmdEFjdGlvbnMvQ29tYmluZUZ1ZlJlc3VsdFwiO1xuaW1wb3J0IHsgRmVhdHVyZUZsYWdzUmVzcG9uc2UgfSBmcm9tIFwiLi9UeXBlcy9GZWF0dXJlRmxhZ3MvRmVhdHVyZUZsYWdzUmVzcG9uc2VcIjtcbmltcG9ydCB7IEZ1ZlNpemVUb29MYXJnZUVycm9yIH0gZnJvbSBcIi4vVHlwZXMvRHJhZnRBY3Rpb25zL0Z1ZlNpemVUb29MYXJnZUVycm9yXCI7XG5pbXBvcnQgeyBJbXBvcnRFbXBsb3llZXNSZXF1ZXN0IH0gZnJvbSBcIi4vVHlwZXMvU3RhZmYvSW1wb3J0RW1wbG95ZWVzUmVxdWVzdFwiO1xuaW1wb3J0IHsgTWFzc0FjdGlvblBhcmFtZXRlcnMgfSBmcm9tIFwiLi9UeXBlcy9NYXNzQWN0aW9ucy9NYXNzQWN0aW9uUGFyYW1ldGVyc1wiO1xuaW1wb3J0IHsgUHJpbnRUeXBlIH0gZnJvbSBcIi4vVHlwZXMvUHJpbnQvUHJpbnRUeXBlXCI7XG5pbXBvcnQgeyBQcmludFJlc3BvbnNlIH0gZnJvbSBcIi4vVHlwZXMvUHJpbnQvUHJpbnRSZXNwb25zZVwiO1xuaW1wb3J0IHsgU2VydmVyUmF3UmVzcG9uc2UgfSBmcm9tIFwiLi9UeXBlcy9HZXRJbm5lci9TZXJ2ZXJSYXdSZXNwb25zZVwiO1xuaW1wb3J0IHsgQ2FuZHlQb3BkUHJvdG9jb2wgfSBmcm9tIFwiLi9UeXBlcy9FcnJvckxvZy9DYW5keVBvcGRQcm90b2NvbFwiO1xuaW1wb3J0IHsgSW5zdGFuY2VzRGVsZXRpbmdSdWxlIH0gZnJvbSBcIi4vVHlwZXMvSW5zdGFuY2VzRGVsZXRpbmcvSW5zdGFuY2VzRGVsZXRpbmdSdWxlXCI7XG5pbXBvcnQgeyBWYWx1ZUZvckluc3RhbmNlc1NldHRpbmdSdWxlIH0gZnJvbSBcIi4vVHlwZXMvTWFzc0FjdGlvbnMvVmFsdWVGb3JJbnN0YW5jZXNTZXR0aW5nUnVsZVwiO1xuaW1wb3J0IHsgSW5uZXJRdWVyeVJlcXVlc3QgfSBmcm9tIFwiLi9UeXBlcy9RdWVyeUNvbGxlY3Rvbi9Jbm5lclF1ZXJ5UmVxdWVzdFwiO1xuaW1wb3J0IHsgSW5uZXJRdWVyeVJlc3BvbnNlIH0gZnJvbSBcIi4vVHlwZXMvUXVlcnlDb2xsZWN0b24vSW5uZXJRdWVyeVJlc3BvbnNlXCI7XG5pbXBvcnQgeyBSZXNvbHZlSW5uZXJQYXRoUmVxdWVzdCB9IGZyb20gXCIuL1R5cGVzL0Vycm9yTG9nL1Jlc29sdmVJbm5lclBhdGhSZXF1ZXN0XCI7XG5pbXBvcnQgeyBSZXNvbHZlUGF0aFJlc3BvbnNlIH0gZnJvbSBcIi4vVHlwZXMvRXJyb3JMb2cvUmVzb2x2ZVBhdGhSZXNwb25zZVwiO1xuXG5jb25zdCBzdHJhbmdlT3B0aW9ucyA9IHsgc3JjOiBcImNoYW5nZVNldFwiLCBkYXRhVmVyc2lvbjogXCIwXCIgfTtcblxuZXhwb3J0IGNvbnN0IENhbmR5UmVzb3VyY2Vab25lcyA9IHtcbiAgICBUZXN0Rm9ybXM6IFwiY2FuZHkucmVzb3VyY2VzLnRlc3QtZm9ybXNcIixcbn07XG5cbmV4cG9ydCBlbnVtIFNlcnZlckVycm9ycyB7XG4gICAgRnVmU2l6ZVRvb0xhcmdlID0gXCJGdWZTaXplVG9vTGFyZ2VcIixcbiAgICBCYWRSZXF1ZXN0ID0gXCJCYWRSZXF1ZXN0XCIsXG4gICAgVW5rbm93bkVycm9yID0gXCJVbmtub3duRXJyb3JcIixcbn1cblxuZnVuY3Rpb24gY29udmVydFBhdGhMb2FkU3BlY2lmaWNhdGlvblRvU3RyaW5nKHNwZWM6IFBhdGhMb2FkU3BlY2lmaWNhdGlvbik6IHN0cmluZyB7XG4gICAgcmV0dXJuIChcbiAgICAgICAgKHNwZWMuc2tpcCA/IFwiLVwiIDogXCJcIikgK1xuICAgICAgICAoc3BlYy5wYXRoT3JQYXRoUHJlZml4ID09PSBcIipcIiA/IHNwZWMucGF0aE9yUGF0aFByZWZpeCA6IHNwZWMucGF0aE9yUGF0aFByZWZpeC50b0xlZ2FjeVBhdGgoKSlcbiAgICApO1xufVxuXG5leHBvcnQgY2xhc3MgQ2FuZHlBcGlDbGllbnQgaW1wbGVtZW50cyBJQ2FuZHlBcGlDbGllbnQge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgaHR0cENsaWVudDogSUh0dHBDbGllbnQ7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgICAgIGZldGNoSW1wbDogRmV0Y2gsXG4gICAgICAgIGJhc2VVcmw6IHN0cmluZyxcbiAgICAgICAgcmVzb3VyY2Vab25lOiB1bmRlZmluZWQgfCBzdHJpbmcsXG4gICAgICAgIGF1dGhlbnRpY2F0aW9uOiB1bmRlZmluZWQgfCBBdXRoZW50aWNhdGlvbk1vZGUsXG4gICAgICAgIGV4Y2VwdGlvbkxvZ2dlcj86IEV4Y2VwdGlvbkxvZ2dlclxuICAgICkge1xuICAgICAgICB0aGlzLmh0dHBDbGllbnQgPSBuZXcgSHR0cENsaWVudChcbiAgICAgICAgICAgIGZldGNoSW1wbCxcbiAgICAgICAgICAgIGJhc2VVcmwsXG4gICAgICAgICAgICBjcmVhdGVBdXRoZW50aWNhdGlvblByb3ZpZGVyKGF1dGhlbnRpY2F0aW9uKSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZXNvdXJjZVpvbmU6IHJlc291cmNlWm9uZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBleGNlcHRpb25Mb2dnZXJcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZm9yRHJhZnQoZHJhZnRGdWxsSWQ6IERyYWZ0RnVsbElkKTogSUNhbmR5QXBpRHJhZnRDbGllbnQge1xuICAgICAgICByZXR1cm4gbmV3IENhbmR5QXBpRHJhZnRDbGllbnQodGhpcy5odHRwQ2xpZW50LCBkcmFmdEZ1bGxJZCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldEluZm9CeUlubnMoZHJhZnRGdWxsSWQ6IERyYWZ0RnVsbElkLCBpbm5zOiByZWFkb25seSBzdHJpbmdbXSk6IFByb21pc2U8R2V0QnlJbm5SZXNwb25zZT4ge1xuICAgICAgICBjb25zdCBwYXRocyA9IGlubnMubWFwKGlubiA9PiBgQGZvY3VzLyR7aW5ufWApO1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFVybChkcmFmdEZ1bGxJZCwgXCJnZXQtaW5uZXJcIikpXG4gICAgICAgICAgICAud2l0aEpzb25Cb2R5KHBhdGhzKVxuICAgICAgICAgICAgLmpzb248Rm9jdXNTZXJ2ZXJSZXNwb25zZT4oKTtcbiAgICAgICAgY29uc3QgcmVzdWx0OiBHZXRCeUlublJlc3BvbnNlID0ge307XG4gICAgICAgIGZvciAoY29uc3QgaW5uIG9mIGlubnMpIHtcbiAgICAgICAgICAgIGNvbnN0IGlublNlcnZlclZhbHVlID0gcmVzcG9uc2VbYEBmb2N1cy8ke2lubn1gXT8udmFsdWU7XG4gICAgICAgICAgICBpZiAoaW5uU2VydmVyVmFsdWUgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0W2lubl0gPSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiBcIlNlcnZlciBkb2VzIG5vdCByZXR1cm4gaW5uIGluZm9cIixcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JDb2RlOiBGb2N1c1NlcnZlckVycm9yQ29kZS5Ob0lubkVycm9yLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc3VsdFtpbm5dID0ge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogaW5uU2VydmVyVmFsdWUudmFsdWUgPz8gdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICBlcnJvckNvZGU6IGlublNlcnZlclZhbHVlLmVycm9yQ29kZSA/PyB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiBpbm5TZXJ2ZXJWYWx1ZS5lcnJvciA/PyB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRBbGxHZnZzKGFib3J0U2lnbmFsPzogQWJvcnRTaWduYWwpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgICAgIGNvbnN0IGJvZHkgPSBhd2FpdCB0aGlzLmh0dHBDbGllbnQuZ2V0KGBidWlsZC1zZXJ2ZXIvZ2Z2c2ApLmpzb248c3RyaW5nW10+KCk7XG4gICAgICAgIHJldHVybiBib2R5O1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBjcmVhdGVEcmFmdEZyb21Ecml2ZShcbiAgICAgICAgbnM6IHN0cmluZyxcbiAgICAgICAgZnVmRHJpdmVVcmk6IHN0cmluZyxcbiAgICAgICAgYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbFxuICAgICk6IFByb21pc2U8Q3JlYXRlRHJhZnRSZXNwb25zZT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdChgdjEvbnMvJHtuc30vY3JlYXRlLWRyYWZ0LWZyb20tZHJpdmVgKVxuICAgICAgICAgICAgLndpdGhRdWVyeVBhcmFtcyh7XG4gICAgICAgICAgICAgICAgbnM6IG5zLFxuICAgICAgICAgICAgICAgIGZ1ZkRyaXZlVXJpOiBmdWZEcml2ZVVyaSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAud2l0aEFib3J0U2lnbmFsKGFib3J0U2lnbmFsKVxuICAgICAgICAgICAgLmpzb248Q3JlYXRlRHJhZnRSZXNwb25zZT4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgY3JlYXRlRW1wdHlEcmFmdChuczogc3RyaW5nLCBnZnY6IHN0cmluZywgYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbCk6IFByb21pc2U8Q3JlYXRlRHJhZnRSZXNwb25zZT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdChgdjEvbnMvJHtuc30vY3JlYXRlLWRyYWZ0YClcbiAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbXMoeyBnZnY6IGdmdiB9KVxuICAgICAgICAgICAgLndpdGhBYm9ydFNpZ25hbChhYm9ydFNpZ25hbClcbiAgICAgICAgICAgIC5qc29uPENyZWF0ZURyYWZ0UmVzcG9uc2U+KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGNyZWF0ZURyYWZ0KG5zOiBzdHJpbmcsIGdmdjogc3RyaW5nKTogUHJvbWlzZTxDcmVhdGVEcmFmdFJlc3BvbnNlPjtcbiAgICBwdWJsaWMgY3JlYXRlRHJhZnQobnM6IHN0cmluZywgZ2Z2OiB1bmRlZmluZWQsIGZ1ZkNvbnRlbnQ6IEJ1ZmZlcik6IFByb21pc2U8Q3JlYXRlRHJhZnRSZXNwb25zZT47XG4gICAgcHVibGljIGFzeW5jIGNyZWF0ZURyYWZ0KG5zOiBzdHJpbmcsIGdmdjogdW5kZWZpbmVkIHwgc3RyaW5nLCBmdWZDb250ZW50PzogQnVmZmVyKTogUHJvbWlzZTxDcmVhdGVEcmFmdFJlc3BvbnNlPiB7XG4gICAgICAgIGlmIChnZnYgPT0gdW5kZWZpbmVkICYmIGZ1ZkNvbnRlbnQgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAgICAgLnBvc3QoYHYxL25zLyR7bnN9L2NyZWF0ZS1kcmFmdGApXG4gICAgICAgICAgICAgICAgLndpdGhDb250ZW50VHlwZShcImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbVwiKVxuICAgICAgICAgICAgICAgIC53aXRoQm9keUZyb21CdWZmZXIoZnVmQ29udGVudClcbiAgICAgICAgICAgICAgICAuanNvbjxDcmVhdGVEcmFmdFJlc3BvbnNlPigpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChnZnYgIT0gdW5kZWZpbmVkICYmIGZ1ZkNvbnRlbnQgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAgICAgLnBvc3QoYHYxL25zLyR7bnN9L2NyZWF0ZS1kcmFmdGApXG4gICAgICAgICAgICAgICAgLndpdGhRdWVyeVBhcmFtcyh7IGdmdjogZ2Z2IH0pXG4gICAgICAgICAgICAgICAgLndpdGhDb250ZW50VHlwZShcImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbVwiKVxuICAgICAgICAgICAgICAgIC53aXRoQm9keUZyb21CdWZmZXIoQnVmZmVyLmZyb20oW10pKVxuICAgICAgICAgICAgICAgIC5qc29uPENyZWF0ZURyYWZ0UmVzcG9uc2U+KCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGdmdiA9PSB1bmRlZmluZWQgJiYgZnVmQ29udGVudCA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBjcmVhdGUgZHJhZnQ6IG5vIGdmdiBhbmQgbm8gZnVmIHNwZWNpZmllZFwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdChgdjEvbnMvJHtuc30vY3JlYXRlLWRyYWZ0YClcbiAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbXMoeyBnZnY6IGdmdiB9KVxuICAgICAgICAgICAgLndpdGhDb250ZW50VHlwZShcImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbVwiKVxuICAgICAgICAgICAgLndpdGhCb2R5RnJvbUJ1ZmZlcihmdWZDb250ZW50KVxuICAgICAgICAgICAgLmpzb248Q3JlYXRlRHJhZnRSZXNwb25zZT4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgY2hlY2tBbGl2ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5odHRwQ2xpZW50LmdldChgX3N0YXR1cy9waW5nYCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXREcmFmdFVybChkcmFmdEZ1bGxJZDogRHJhZnRGdWxsSWQsIGRyYWZ0UmVsYXRlZFVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGB2MS9ucy8ke2RyYWZ0RnVsbElkLm5zfS9kcmFmdHMvJHtkcmFmdEZ1bGxJZC5kcmFmdElkfS8ke2RyYWZ0UmVsYXRlZFVybH1gO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRGZWF0dXJlRmxhZ3MoKTogUHJvbWlzZTxGZWF0dXJlRmxhZ3NSZXNwb25zZT4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5odHRwQ2xpZW50LmdldChcInYxL2ZlYXR1cmVzL2ZsYWdzXCIpLmpzb248RmVhdHVyZUZsYWdzUmVzcG9uc2U+KCk7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ2FuZHlBcGlEcmFmdENsaWVudCBpbXBsZW1lbnRzIElDYW5keUFwaURyYWZ0Q2xpZW50IHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGh0dHBDbGllbnQ6IElIdHRwQ2xpZW50O1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZHJhZnRGdWxsSWQ6IERyYWZ0RnVsbElkO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKGh0dHBDbGllbnQ6IElIdHRwQ2xpZW50LCBkcmFmdEZ1bGxJZDogRHJhZnRGdWxsSWQpIHtcbiAgICAgICAgdGhpcy5odHRwQ2xpZW50ID0gaHR0cENsaWVudDtcbiAgICAgICAgdGhpcy5kcmFmdEZ1bGxJZCA9IGRyYWZ0RnVsbElkO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRIcmVmVG9Jbm5lckVkaXRvcigpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnVybChgaW5uZXItZWRpdG9yL25zLyR7dGhpcy5kcmFmdEZ1bGxJZC5uc30vZHJhZnRzLyR7dGhpcy5kcmFmdEZ1bGxJZC5kcmFmdElkfWApO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRIcmVmRG93bmxvYWRGdWYoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC51cmwodGhpcy5nZXREcmFmdFVybChcImdldC1mdWZcIikpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRIcmVmVG9Db252ZXJ0YXRpb25Mb2coKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC51cmwodGhpcy5nZXREcmFmdFVybChcImNvbnZlcnNpb25cIikpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRIcmVmVG9Eb3dubG9hZElubmVyRnVmKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEhyZWZEb3dubG9hZERyYWZ0UHJlc2VudGF0aW9uKERyYWZ0UHJlc2VudGF0aW9uVHlwZS5pbm5lckZ1Zik7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEhyZWZUb0Rvd25sb2FkQ2xpZW50SW5mbygpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRIcmVmRG93bmxvYWREcmFmdFByZXNlbnRhdGlvbihEcmFmdFByZXNlbnRhdGlvblR5cGUuY2xpZW50SW5mbyk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEhyZWZUb0Rvd25sb2FkRm9ybXNDbGllbnRJbmZvKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEhyZWZEb3dubG9hZERyYWZ0UHJlc2VudGF0aW9uKERyYWZ0UHJlc2VudGF0aW9uVHlwZS5mb3Jtc0NsaWVudEluZm8pO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRIcmVmRG93bmxvYWRJbm5lcigpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRIcmVmRG93bmxvYWREcmFmdFByZXNlbnRhdGlvbihEcmFmdFByZXNlbnRhdGlvblR5cGUuaW5uZXIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRFcnJvckxvZygpOiBQcm9taXNlPFNlcnZlckVycm9yTG9nPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQuZ2V0KHRoaXMuZ2V0RHJhZnRQcmVzZW50YXRpb25VcmwoRHJhZnRQcmVzZW50YXRpb25UeXBlLmVycm9yTG9nKSkuanNvbjxTZXJ2ZXJFcnJvckxvZz4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0RXJyb3JMb2dXaXRoQ2hlY2tTY2VuYXJpb3MoY2hlY2tTY2VuYXJpb3M6IENoZWNrU2NlbmFyaW9UeXBlW10pOiBQcm9taXNlPFNlcnZlckVycm9yTG9nPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KHRoaXMuZ2V0RHJhZnRVcmwoXCJlcnJvcmxvZ1wiKSlcbiAgICAgICAgICAgIC53aXRoSnNvbkJvZHkoeyBjaGVja1NjZW5hcmlvczogY2hlY2tTY2VuYXJpb3MgfSlcbiAgICAgICAgICAgIC5qc29uPFNlcnZlckVycm9yTG9nPigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRUYXNrQnlJZCh0YXNrSWQ6IHN0cmluZyk6IFByb21pc2U8U2VydmVyVGFzayB8IHVuZGVmaW5lZD4ge1xuICAgICAgICBjb25zdCB0YXNrcyA9IGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFVybChcImdldC1pbm5lclwiKSlcbiAgICAgICAgICAgIC53aXRoSnNvbkJvZHkoW2BAdGFzay8qYF0pXG4gICAgICAgICAgICAuanNvbjxHZXRUYXNrc1NlcnZlclJlc3BvbnNlPigpO1xuICAgICAgICByZXR1cm4gdGFza3NbYEB0YXNrLyR7dGFza0lkfWBdPy52YWx1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0RnVmV2l0aEF0dGFjaG1lbnRzKCk6IFByb21pc2U8RnVmV2l0aEF0dGFjaG1lbnRzUmVzcG9uc2UgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5nZXQodGhpcy5nZXREcmFmdFVybChcImdldC1mdWYtd2l0aC1hdHRhY2htZW50c1wiKSlcbiAgICAgICAgICAgIC5qc29uPEZ1ZldpdGhBdHRhY2htZW50c1Jlc3BvbnNlPigpO1xuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldFBhcnRpYWxGdWYocnVsZXM6IHN0cmluZ1tdKTogUHJvbWlzZTxCYXNlR2V0RnVmUmVzcG9uc2UgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KHRoaXMuZ2V0RHJhZnRVcmwoXCJnZXQtcGFydGlhbC1mdWZcIikpXG4gICAgICAgICAgICAud2l0aEpzb25Cb2R5KHJ1bGVzKVxuICAgICAgICAgICAgLmpzb248QmFzZUdldEZ1ZlJlc3BvbnNlPigpO1xuICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldEFsbFRhc2tzKCk6IFByb21pc2U8U2VydmVyVGFza1tdPiB7XG4gICAgICAgIGNvbnN0IHRhc2tzID0gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdCh0aGlzLmdldERyYWZ0VXJsKFwiZ2V0LWlubmVyXCIpKVxuICAgICAgICAgICAgLndpdGhKc29uQm9keShbYEB0YXNrLypgXSlcbiAgICAgICAgICAgIC5qc29uPEdldFRhc2tzU2VydmVyUmVzcG9uc2U+KCk7XG4gICAgICAgIHJldHVybiBPYmplY3QudmFsdWVzKHRhc2tzKS5tYXAoeCA9PiB4LnZhbHVlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZW5xdWV1ZVRhc2sodGFza0lkOiBzdHJpbmcsIHRhc2tJbmZvOiBWZXJpZnlBbmRGaXhGbnNSZXF1aXJlbWVudHNUYXNrSW5mbyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KHRoaXMuZ2V0RHJhZnRQcmVzZW50YXRpb25VcmwoRHJhZnRQcmVzZW50YXRpb25UeXBlLmlubmVyKSlcbiAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbXMoc3RyYW5nZU9wdGlvbnMpXG4gICAgICAgICAgICAud2l0aEpzb25Cb2R5KHtcbiAgICAgICAgICAgICAgICBhZGRlZDogW10sXG4gICAgICAgICAgICAgICAgY2hhbmdlZDoge1xuICAgICAgICAgICAgICAgICAgICBbYEB0YXNrLyR7dGFza0lkfWBdOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi50YXNrSW5mbyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiB0YXNrSWQsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICByZW1vdmVkOiBbXSxcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBjYW5jZWxUYXNrKHRhc2tJZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFByZXNlbnRhdGlvblVybChEcmFmdFByZXNlbnRhdGlvblR5cGUuaW5uZXIpKVxuICAgICAgICAgICAgLndpdGhRdWVyeVBhcmFtcyhzdHJhbmdlT3B0aW9ucylcbiAgICAgICAgICAgIC53aXRoSnNvbkJvZHkoe1xuICAgICAgICAgICAgICAgIGFkZGVkOiBbXSxcbiAgICAgICAgICAgICAgICBjaGFuZ2VkOiB7fSxcbiAgICAgICAgICAgICAgICByZW1vdmVkOiBbYEB0YXNrLyR7dGFza0lkfWBdLFxuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEV4cGVydEVycm9yTG9nKCk6IFByb21pc2U8U2VydmVyRXJyb3JMb2c+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLmdldCh0aGlzLmdldERyYWZ0UHJlc2VudGF0aW9uVXJsKERyYWZ0UHJlc2VudGF0aW9uVHlwZS5lcnJvcmxvZ0V4cGVydCkpXG4gICAgICAgICAgICAuanNvbjxTZXJ2ZXJFcnJvckxvZz4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0SHJlZlRvRXJyb3JMb2dQZGYoZXJyb3JMb2dOYW1lOiBzdHJpbmcsIHByb3BzTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC51cmwodGhpcy5nZXREcmFmdFVybChcInByZXNlbnRhdGlvbnMvZXJyb3JMb2cvcHJpbnRcIiksIHtcbiAgICAgICAgICAgIGVycm9yTG9nTmFtZTogZXJyb3JMb2dOYW1lLFxuICAgICAgICAgICAgcHJvcHNEcml2ZU5hbWU6IHByb3BzTmFtZSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGNsZWFyRHJhZnQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMuaHR0cENsaWVudC5wb3N0KHRoaXMuZ2V0RHJhZnRVcmwoXCJjbGVhclwiKSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGNvbnZlcnREcmFmdEZyb21QcmV2R2Z2KHsgcHJldkdmdkRyYWZ0SWQsIGdmdiB9OiBDb252ZXJ0RHJhZnRSZXF1ZXN0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMuaHR0cENsaWVudC5wb3N0KHRoaXMuZ2V0RHJhZnRVcmwoXCJjb252ZXJ0XCIpKS53aXRoUXVlcnlQYXJhbXMoe1xuICAgICAgICAgICAgaWQ6IHByZXZHZnZEcmFmdElkLFxuICAgICAgICAgICAgZ2Z2OiBnZnYsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBzZW5kQ2hhbmdlU2V0KGRhdGE6IFNlcnZlckNoYW5nZVNldCwgY3VycmVudERhdGFWZXJzaW9uOiBudW1iZXIpOiBQcm9taXNlPElJbm5lckNoYW5nZVJlc3VsdD4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KHRoaXMuZ2V0RHJhZnRVcmwoXCJpbm5lclwiKSlcbiAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbXMoeyBkYXRhVmVyc2lvbjogY3VycmVudERhdGFWZXJzaW9uIH0pXG4gICAgICAgICAgICAud2l0aEpzb25Cb2R5KGRhdGEpXG4gICAgICAgICAgICAuYWNjZXB0Q29kZSg0MDkpO1xuXG4gICAgICAgIGNvbnN0IGdldFN1Y2Nlc3NSZXN1bHQgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkYXRhUmVzdWx0ID0gYXdhaXQgcmVzdWx0Lmpzb248eyBkYXRhVmVyc2lvbj86IG51bWJlciB9PigpO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBkYXRhVmVyc2lvbjogZGF0YVJlc3VsdD8uZGF0YVZlcnNpb24gPz8gcmVqZWN0KFwiSW52YWxpZCBkYXRhVmVyc2lvbiBhZnRlciBhcHBseWluZyBjaGFuZ2Ugc2V0LlwiKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdC5zdGF0dXMgPT0gMjAwID8gYXdhaXQgZ2V0U3VjY2Vzc1Jlc3VsdCgpIDogcmVzdWx0LnN0YXR1cztcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgc2VuZENoYW5nZVdpdGhOb3JtYWxpemF0aW9uU2V0KFxuICAgICAgICBkYXRhOiBTZXJ2ZXJDaGFuZ2VTZXQsXG4gICAgICAgIGN1cnJlbnREYXRhVmVyc2lvbjogbnVtYmVyLFxuICAgICAgICBub3JtYWxpemVySWQ/OiBzdHJpbmdcbiAgICApOiBQcm9taXNlPElJbm5lckNoYW5nZVJlc3VsdD4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KHRoaXMuZ2V0RHJhZnRVcmwoXCJpbm5lci9wYXRjaC13aXRoLW5vcm1hbGl6YXRpb25cIikpXG4gICAgICAgICAgICAud2l0aFF1ZXJ5UGFyYW1zKHsgZGF0YVZlcnNpb246IGN1cnJlbnREYXRhVmVyc2lvbiwgbm9ybWFsaXplcklkOiBub3JtYWxpemVySWQgfSlcbiAgICAgICAgICAgIC53aXRoSnNvbkJvZHkoZGF0YSlcbiAgICAgICAgICAgIC5hY2NlcHRDb2RlKDQwOSk7XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdC5zdGF0dXMgPT0gMjAwID8gYXdhaXQgcmVzdWx0Lmpzb248SUlubmVyQ2hhbmdlU3VjY2Vzc1Jlc3VsdD4oKSA6IHJlc3VsdC5zdGF0dXM7XG4gICAgfVxuXG4gICAgcHVibGljIHNlbmRDaGFuZ2VTZXRTeW5jKFxuICAgICAgICBkYXRhOiBTZXJ2ZXJDaGFuZ2VTZXQsXG4gICAgICAgIGN1cnJlbnREYXRhVmVyc2lvbjogbnVtYmVyLFxuICAgICAgICBub3JtYWxpemVySWQ/OiBzdHJpbmdcbiAgICApOiBJSW5uZXJDaGFuZ2VSZXN1bHQge1xuICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLmh0dHBDbGllbnQucG9zdFN5bmModGhpcy5nZXREcmFmdFVybChcImlubmVyXCIpLCB7IGRhdGFWZXJzaW9uOiBjdXJyZW50RGF0YVZlcnNpb24gfSwgZGF0YSk7XG5cbiAgICAgICAgY29uc3QgZ2V0U3VjY2Vzc1Jlc3VsdFN5bmMgPSAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkYXRhUmVzdWx0ID0gcmVzdWx0Lmpzb248eyBkYXRhVmVyc2lvbj86IG51bWJlciB9PigpO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBkYXRhVmVyc2lvbjogZGF0YVJlc3VsdD8uZGF0YVZlcnNpb24gPz8gcmVqZWN0KFwiSW52YWxpZCBkYXRhVmVyc2lvbiBhZnRlciBhcHBseWluZyBjaGFuZ2Ugc2V0LlwiKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiByZXN1bHQuc3RhdHVzID09IDIwMCA/IGdldFN1Y2Nlc3NSZXN1bHRTeW5jKCkgOiByZXN1bHQuc3RhdHVzO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRSZXF1aXNpdGVzKHJlcXVpc2l0ZUxpc3Q6IHJlYWRvbmx5IHN0cmluZ1tdKTogUHJvbWlzZTxTZXJ2ZXJSZXF1aXNpdGVzUmVzcG9uc2U+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFVybChcImdldC1pbm5lclwiKSlcbiAgICAgICAgICAgIC53aXRoSnNvbkJvZHkocmVxdWlzaXRlTGlzdClcbiAgICAgICAgICAgIC5qc29uPFNlcnZlclJlcXVpc2l0ZXNSZXNwb25zZT4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0SW5uZXIocGF0aHM6IHVuZGVmaW5lZCB8IHJlYWRvbmx5IHN0cmluZ1tdKTogUHJvbWlzZTxTZXJ2ZXJJbm5lclJlc3BvbnNlPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KHRoaXMuZ2V0RHJhZnRVcmwoXCJnZXQtaW5uZXJcIikpXG4gICAgICAgICAgICAud2l0aEpzb25Cb2R5KHBhdGhzKVxuICAgICAgICAgICAgLmpzb248U2VydmVySW5uZXJSZXNwb25zZT4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0UGFydGlhbElubmVyKHJ1bGVzOiBQYXRoTG9hZFNwZWNpZmljYXRpb25bXSwgbWF4SW5zdGFuY2VDb3VudD86IG51bWJlcik6IFByb21pc2U8U2VydmVySW5uZXJSZXNwb25zZT4ge1xuICAgICAgICBjb25zdCBjb252ZXJ0ZWRSdWxlcyA9IHJ1bGVzLm1hcChjb252ZXJ0UGF0aExvYWRTcGVjaWZpY2F0aW9uVG9TdHJpbmcpO1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdCh0aGlzLmdldERyYWZ0VXJsKFwiZ2V0LXBhcnRpYWwtaW5uZXJcIikpXG4gICAgICAgICAgICAud2l0aFF1ZXJ5UGFyYW1zKG1heEluc3RhbmNlQ291bnQgIT0gdW5kZWZpbmVkICYmIHsgbWF4SW5zdGFuY2VDb3VudDogbWF4SW5zdGFuY2VDb3VudC50b1N0cmluZygpIH0pXG4gICAgICAgICAgICAud2l0aEpzb25Cb2R5KGNvbnZlcnRlZFJ1bGVzLmxlbmd0aCA+IDAgPyBjb252ZXJ0ZWRSdWxlcyA6IFtcIipcIl0pXG4gICAgICAgICAgICAuanNvbjxTZXJ2ZXJJbm5lclJlc3BvbnNlPigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRQYXJ0aWFsSW5uZXJBc0pzb25UcmVlKFxuICAgICAgICBydWxlczogUGF0aExvYWRTcGVjaWZpY2F0aW9uW10sXG4gICAgICAgIG1heEluc3RhbmNlQ291bnQ/OiBudW1iZXJcbiAgICApOiBQcm9taXNlPFNlcnZlckpzb25SZXNwb25zZT4ge1xuICAgICAgICBjb25zdCBjb252ZXJ0ZWRSdWxlcyA9IHJ1bGVzLm1hcChjb252ZXJ0UGF0aExvYWRTcGVjaWZpY2F0aW9uVG9TdHJpbmcpO1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdCh0aGlzLmdldERyYWZ0VXJsKFwiZ2V0LXBhcnRpYWwtaW5uZXJcIikpXG4gICAgICAgICAgICAud2l0aFF1ZXJ5UGFyYW1zKG1heEluc3RhbmNlQ291bnQgIT0gdW5kZWZpbmVkICYmIHsgbWF4SW5zdGFuY2VDb3VudDogbWF4SW5zdGFuY2VDb3VudC50b1N0cmluZygpIH0pXG4gICAgICAgICAgICAud2l0aFF1ZXJ5UGFyYW1zKHsgZm9ybWF0OiBcIkpzb25UcmVlXCIgfSlcbiAgICAgICAgICAgIC53aXRoSnNvbkJvZHkoY29udmVydGVkUnVsZXMubGVuZ3RoID4gMCA/IGNvbnZlcnRlZFJ1bGVzIDogW1wiKlwiXSlcbiAgICAgICAgICAgIC5qc29uPFNlcnZlckpzb25SZXNwb25zZT4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0UmF3UGFydGlhbElubmVyQXNKc29uVHJlZShcbiAgICAgICAgcnVsZXM6IHJlYWRvbmx5IFBhdGhMb2FkU3BlY2lmaWNhdGlvbltdLFxuICAgICAgICBtYXhJbnN0YW5jZUNvdW50PzogbnVtYmVyXG4gICAgKTogUHJvbWlzZTxTZXJ2ZXJSYXdSZXNwb25zZT4ge1xuICAgICAgICBjb25zdCBjb252ZXJ0ZWRSdWxlcyA9IHJ1bGVzLm1hcChjb252ZXJ0UGF0aExvYWRTcGVjaWZpY2F0aW9uVG9TdHJpbmcpO1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdCh0aGlzLmdldERyYWZ0VXJsKFwiZ2V0LXBhcnRpYWwtaW5uZXIyXCIpKVxuICAgICAgICAgICAgLndpdGhRdWVyeVBhcmFtcyhtYXhJbnN0YW5jZUNvdW50ICE9IHVuZGVmaW5lZCAmJiB7IG1heEluc3RhbmNlQ291bnQ6IG1heEluc3RhbmNlQ291bnQudG9TdHJpbmcoKSB9KVxuICAgICAgICAgICAgLndpdGhKc29uQm9keShjb252ZXJ0ZWRSdWxlcy5sZW5ndGggPiAwID8gY29udmVydGVkUnVsZXMgOiBbXCIqXCJdKVxuICAgICAgICAgICAgLmpzb248U2VydmVyUmF3UmVzcG9uc2U+KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldERhdGFWZXJzaW9uKCk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQuZ2V0KHRoaXMuZ2V0RHJhZnRVcmwoXCJpbm5lci9nZXQtZGF0YS12ZXJzaW9uXCIpKS5qc29uPG51bWJlcj4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0RXhwbGFuYXRvcnlOb3RlKCk6IFByb21pc2U8Q3JlYXRlRXhwbGFuYXRvcnlOb3RlUmVzcG9uc2U+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLmdldCh0aGlzLmdldERyYWZ0UHJlc2VudGF0aW9uVXJsKERyYWZ0UHJlc2VudGF0aW9uVHlwZS5leHBsYW5hdG9yeU5vdGUpKVxuICAgICAgICAgICAgLmpzb248Q3JlYXRlRXhwbGFuYXRvcnlOb3RlUmVzcG9uc2U+KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGdldEF0dGFjaG1lbnRCeUlkKGF0dGFjaG1lbnRJZDogc3RyaW5nKTogUHJvbWlzZTxBdHRhY2hJbmZvPiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFVybChcImdldC1pbm5lclwiKSlcbiAgICAgICAgICAgIC53aXRoSnNvbkJvZHkoW2BAYXR0YWNobWVudC8ke2F0dGFjaG1lbnRJZH1gXSlcbiAgICAgICAgICAgIC5qc29uPEdldEF0dGFjaG1lbnRzUmVzcG9uc2U+KCk7XG4gICAgICAgIHJldHVybiByZXN1bHRbYEBhdHRhY2htZW50LyR7YXR0YWNobWVudElkfWBdPy52YWx1ZSA/PyByZWplY3QoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0QWxsQXR0YWNobWVudHMoKTogUHJvbWlzZTxBdHRhY2hJbmZvW10+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdCh0aGlzLmdldERyYWZ0VXJsKFwiZ2V0LWlubmVyXCIpKVxuICAgICAgICAgICAgLndpdGhKc29uQm9keShbYEBhdHRhY2htZW50LypgXSlcbiAgICAgICAgICAgIC5qc29uPEdldEF0dGFjaG1lbnRzUmVzcG9uc2U+KCk7XG4gICAgICAgIHJldHVybiBPYmplY3QudmFsdWVzKHJlc3VsdCkubWFwKHggPT4geC52YWx1ZSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHJlbW92ZUF0dGFjaG1lbnRzKGF0dGFjaG1lbnRJZHM6IHJlYWRvbmx5IHN0cmluZ1tdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFByZXNlbnRhdGlvblVybChEcmFmdFByZXNlbnRhdGlvblR5cGUuaW5uZXIpKVxuICAgICAgICAgICAgLndpdGhRdWVyeVBhcmFtcyhzdHJhbmdlT3B0aW9ucylcbiAgICAgICAgICAgIC53aXRoSnNvbkJvZHkoe1xuICAgICAgICAgICAgICAgIGFkZGVkOiBbXSxcbiAgICAgICAgICAgICAgICBjaGFuZ2VkOiB7fSxcbiAgICAgICAgICAgICAgICByZW1vdmVkOiBhdHRhY2htZW50SWRzLm1hcChpZCA9PiBgQGF0dGFjaG1lbnQvJHtpZH1gKSxcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBjcmVhdGVPclVwZGF0ZUF0dGFjaG1lbnRzKGF0dGFjaG1lbnRzOiByZWFkb25seSBBdHRhY2hJbmZvW10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgY2hhbmdlZCA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IGF0dGFjaG1lbnQgb2YgYXR0YWNobWVudHMpIHtcbiAgICAgICAgICAgIGNoYW5nZWRbYEBhdHRhY2htZW50LyR7YXR0YWNobWVudC5pZH1gXSA9IHtcbiAgICAgICAgICAgICAgICBjb250ZW50VXJpOiBhdHRhY2htZW50LmNvbnRlbnRVcmksXG4gICAgICAgICAgICAgICAgaWQ6IGF0dGFjaG1lbnQuaWQsXG4gICAgICAgICAgICAgICAgbWV0YTogYXR0YWNobWVudC5tZXRhLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KHRoaXMuZ2V0RHJhZnRQcmVzZW50YXRpb25VcmwoRHJhZnRQcmVzZW50YXRpb25UeXBlLmlubmVyKSlcbiAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbXMoc3RyYW5nZU9wdGlvbnMpXG4gICAgICAgICAgICAud2l0aEpzb25Cb2R5KHtcbiAgICAgICAgICAgICAgICBhZGRlZDogW10sXG4gICAgICAgICAgICAgICAgY2hhbmdlZDogY2hhbmdlZCxcbiAgICAgICAgICAgICAgICByZW1vdmVkOiBbXSxcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBjcmVhdGVEcmFmdEF0dGFjaG1lbnQoZ2Z2OiBzdHJpbmcsIHBhdGg6IHN0cmluZyk6IFByb21pc2U8QXR0YWNoSW5mbz4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdCh0aGlzLmdldERyYWZ0VXJsKFwiZXh0ZXJuYWwvY3JlYXRlLWF0dGFjaG1lbnQtZHJhZnRcIikpXG4gICAgICAgICAgICAud2l0aFF1ZXJ5UGFyYW1zKHsgZ2Z2OiBnZnYsIHBhdGg6IHBhdGggfSlcbiAgICAgICAgICAgIC5qc29uPEF0dGFjaEluZm8+KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIG9wZW5Mb2FkZWRBdHRhY2htZW50QXNEcmFmdChpZDogc3RyaW5nKTogUHJvbWlzZTxBdHRhY2hJbmZvPiB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdCh0aGlzLmdldERyYWZ0VXJsKFwiZXh0ZXJuYWwvb3Blbi1sb2FkZWQtYXR0YWNobWVudC1hcy1kcmFmdFwiKSlcbiAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbXMoeyBhdHRhY2htZW50SWQ6IGlkIH0pXG4gICAgICAgICAgICAuYWNjZXB0Q29kZSg0MTMpO1xuXG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDQxMykge1xuICAgICAgICAgICAgY29uc3QgZXJyb3JEYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbjx7IGVycm9yQ29kZTogc3RyaW5nOyBtZXNzYWdlOiBzdHJpbmcgfT4oKTtcbiAgICAgICAgICAgIGlmIChlcnJvckRhdGEuZXJyb3JDb2RlID09PSBcIkZ1ZlNpemVUb29MYXJnZVwiKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEZ1ZlNpemVUb29MYXJnZUVycm9yKGVycm9yRGF0YS5tZXNzYWdlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IG5ldyBIdHRwRXJyb3IoZXJyb3JEYXRhLm1lc3NhZ2UsIHJlc3BvbnNlLnN0YXR1cyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3BvbnNlLmpzb248QXR0YWNoSW5mbz4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgc2V0UHJlc2VudGF0aW9uKHByZXNlbnRhdGlvblR5cGU6IERyYWZ0UHJlc2VudGF0aW9uVHlwZSwgY29udGVudDogc3RyaW5nIHwgdW5rbm93bik6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBsZXQgcmVxdWVzdCA9IHRoaXMuaHR0cENsaWVudC5wdXQodGhpcy5nZXREcmFmdFByZXNlbnRhdGlvblVybChwcmVzZW50YXRpb25UeXBlKSk7XG4gICAgICAgIGlmICh0eXBlb2YgY29udGVudCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcmVxdWVzdCA9IHJlcXVlc3Qud2l0aFJhd0JvZHkoY29udGVudCk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNCdWZmZXIoY29udGVudCkpIHtcbiAgICAgICAgICAgIHJlcXVlc3QgPSByZXF1ZXN0LndpdGhSYXdCb2R5KGNvbnRlbnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVxdWVzdCA9IHJlcXVlc3Qud2l0aEpzb25Cb2R5KGNvbnRlbnQpO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IHJlcXVlc3Q7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHBhdGNoUHJlc2VudGF0aW9uKFxuICAgICAgICBwcmVzZW50YXRpb25UeXBlOiBEcmFmdFByZXNlbnRhdGlvblR5cGUsXG4gICAgICAgIHByZXNlbnRhdGlvbkNvbnRlbnQ6IFByZXNlbnRhdGlvbkNvbnRlbnRcbiAgICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5odHRwQ2xpZW50LnBhdGNoKHRoaXMuZ2V0RHJhZnRQcmVzZW50YXRpb25VcmwocHJlc2VudGF0aW9uVHlwZSkpLndpdGhKc29uQm9keShwcmVzZW50YXRpb25Db250ZW50KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0RmlsZVByb3BlcnRpZXMoXG4gICAgICAgIGRyaXZlVXJpOiBzdHJpbmcsXG4gICAgICAgIGlnbm9yZVNpemVDaGVjaz86IGJvb2xlYW4gfCB1bmRlZmluZWRcbiAgICApOiBQcm9taXNlPEZpbGVQcm9wZXJ0aWVzIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAuZ2V0KGB2MS9maWxlcy9nZXQtcHJvcGVydGllc2ApXG4gICAgICAgICAgICAud2l0aFF1ZXJ5UGFyYW1zKHsgZHJpdmVVcmk6IGRyaXZlVXJpLCBpZ25vcmVTaXplQ2hlY2s6IGlnbm9yZVNpemVDaGVjayA/PyBmYWxzZSB9KVxuICAgICAgICAgICAgLmFjY2VwdENvZGUoNDAwKVxuICAgICAgICAgICAgLmFjY2VwdENvZGUoNDEzKTtcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gNDAwIHx8IHJlc3BvbnNlLnN0YXR1cyA9PT0gNDEzIHx8IHJlc3BvbnNlLnN0YXR1cyA9PT0gMjAwKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzcG9uc2UuanNvbjxGaWxlUHJvcGVydGllcz4oKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBwcmVwYXJlQW5kR2V0RmlsZVByb3BlcnRpZXMoZHJpdmVVcmk6IHN0cmluZywgZ2Z2OiBzdHJpbmcpOiBQcm9taXNlPEZpbGVQcm9wZXJ0aWVzIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAuZ2V0KGB2MS9maWxlcy9wcmVwYXJlLWFuZC1nZXQtcHJvcGVydGllc2ApXG4gICAgICAgICAgICAud2l0aFF1ZXJ5UGFyYW1zKHsgZ2Z2OiBnZnYsIGRyaXZlVXJpOiBkcml2ZVVyaSB9KVxuICAgICAgICAgICAgLmFjY2VwdENvZGUoNDEzKTtcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gNDAwKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDQxMykge1xuICAgICAgICAgICAgY29uc3QgZXJyb3JEYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbjx7IGVycm9yQ29kZTogc3RyaW5nOyBtZXNzYWdlOiBzdHJpbmcgfT4oKTtcbiAgICAgICAgICAgIGlmIChlcnJvckRhdGEuZXJyb3JDb2RlID09PSBcIkZ1ZlNpemVUb29MYXJnZVwiKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEZ1ZlNpemVUb29MYXJnZUVycm9yKGVycm9yRGF0YS5tZXNzYWdlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IG5ldyBIdHRwRXJyb3IoZXJyb3JEYXRhLm1lc3NhZ2UsIHJlc3BvbnNlLnN0YXR1cyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3BvbnNlLmpzb248RmlsZVByb3BlcnRpZXM+KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHVwbG9hZEFuZEdldEZpbGVQcm9wZXJ0aWVzKFxuICAgICAgICBkcml2ZVVyaXM6IHN0cmluZ1tdLFxuICAgICAgICBnZnY6IHN0cmluZyxcbiAgICAgICAgYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbFxuICAgICk6IFByb21pc2U8VXBsb2FkRmlsZVByb3BlcnRpZXNSZXNwb25zZT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgICAgICAucG9zdChgdjEvZmlsZXMvdXBsb2FkLWFuZC1nZXQtcHJvcGVydGllc2ApXG4gICAgICAgICAgICAgICAgLndpdGhRdWVyeVBhcmFtcyh7IGdmdjogZ2Z2IH0pXG4gICAgICAgICAgICAgICAgLndpdGhKc29uQm9keShkcml2ZVVyaXMpXG4gICAgICAgICAgICAgICAgLndpdGhBYm9ydFNpZ25hbChhYm9ydFNpZ25hbClcbiAgICAgICAgICAgICAgICAuYWNjZXB0Q29kZSg0MDApXG4gICAgICAgICAgICAgICAgLmFjY2VwdENvZGUoNDEzKTtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IDIwMCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uPHsgZXJyb3JDb2RlOiBTZXJ2ZXJFcnJvcnM7IG1lc3NhZ2U6IHN0cmluZyB9PigpO1xuICAgICAgICAgICAgICAgIHJldHVybiB7IHNlcnZlckVycm9yOiBkYXRhLmVycm9yQ29kZSwgaW52YWxpZFNvdXJjZURyaXZlQ29udGVudE5hbWVzOiBcIlwiLCBzb3VyY2VzVG90YWxDb3VudDogMCB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb248VXBsb2FkRmlsZVByb3BlcnRpZXNSZXNwb25zZT4oKTtcbiAgICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHNlcnZlckVycm9yOiBTZXJ2ZXJFcnJvcnMuVW5rbm93bkVycm9yLFxuICAgICAgICAgICAgICAgIGludmFsaWRTb3VyY2VEcml2ZUNvbnRlbnROYW1lczogXCJcIixcbiAgICAgICAgICAgICAgICBzb3VyY2VzVG90YWxDb3VudDogMCxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgYWNjZXB0VHJhbnNmZXJUeXBlKFxuICAgICAgICBmdWZEcml2ZVVyaTogc3RyaW5nLFxuICAgICAgICB0cmFuc2ZlclR5cGU6IHN0cmluZyxcbiAgICAgICAgYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbFxuICAgICk6IFByb21pc2U8U2VydmVyRXJyb3JSZXNwb25zZSB8IHVuZGVmaW5lZD4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgICAgICAucG9zdChgdjEvbnMvJHt0aGlzLmRyYWZ0RnVsbElkLm5zfS9kcmFmdHMvJHt0aGlzLmRyYWZ0RnVsbElkLmRyYWZ0SWR9L3RyYW5zZmVyL2NvbWJpbmVgKVxuICAgICAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbXMoeyBmdWZEcml2ZVVyaTogZnVmRHJpdmVVcmksIHR5cGVJZDogdHJhbnNmZXJUeXBlIH0pXG4gICAgICAgICAgICAgICAgLndpdGhBYm9ydFNpZ25hbChhYm9ydFNpZ25hbClcbiAgICAgICAgICAgICAgICAuYWNjZXB0Q29kZSg0MDApXG4gICAgICAgICAgICAgICAgLmFjY2VwdENvZGUoNDEzKTtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IDIwMCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uPHsgZXJyb3JDb2RlOiBTZXJ2ZXJFcnJvcnM7IG1lc3NhZ2U6IHN0cmluZyB9PigpO1xuICAgICAgICAgICAgICAgIHJldHVybiB7IHNlcnZlckVycm9yOiBkYXRhLmVycm9yQ29kZSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgcmV0dXJuIHsgc2VydmVyRXJyb3I6IFNlcnZlckVycm9ycy5Vbmtub3duRXJyb3IgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBhY2NlcHRNdWx0aXBsZVRyYW5zZmVyVHlwZShcbiAgICAgICAgZmlsZXM6IElDb21iaW5lQnlUcmFuc2ZlcnNbXSxcbiAgICAgICAgYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbFxuICAgICk6IFByb21pc2U8U2VydmVyRXJyb3JSZXNwb25zZSB8IHVuZGVmaW5lZD4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgICAgICAucG9zdChgdjEvbnMvJHt0aGlzLmRyYWZ0RnVsbElkLm5zfS9kcmFmdHMvJHt0aGlzLmRyYWZ0RnVsbElkLmRyYWZ0SWR9L3RyYW5zZmVyL2NvbWJpbmUtbXVsdGlwbGVgKVxuICAgICAgICAgICAgICAgIC53aXRoSnNvbkJvZHkoZmlsZXMpXG4gICAgICAgICAgICAgICAgLndpdGhBYm9ydFNpZ25hbChhYm9ydFNpZ25hbClcbiAgICAgICAgICAgICAgICAuYWNjZXB0Q29kZSg0MDApXG4gICAgICAgICAgICAgICAgLmFjY2VwdENvZGUoNDEzKTtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IDIwMCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uPHsgZXJyb3JDb2RlOiBTZXJ2ZXJFcnJvcnM7IG1lc3NhZ2U6IHN0cmluZyB9PigpO1xuICAgICAgICAgICAgICAgIHJldHVybiB7IHNlcnZlckVycm9yOiBkYXRhLmVycm9yQ29kZSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgcmV0dXJuIHsgc2VydmVyRXJyb3I6IFNlcnZlckVycm9ycy5Vbmtub3duRXJyb3IgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBzZXRGdWZCeURyaXZlVXJpKGRyaXZlVXJpOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5odHRwQ2xpZW50LnB1dCh0aGlzLmdldERyYWZ0VXJsKFwic2V0LWZ1ZlwiKSkud2l0aFF1ZXJ5UGFyYW1zKHsgZHJpdmVVcmk6IGRyaXZlVXJpIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBjb21iaW5lRnVmQnlEcml2ZVVyaShcbiAgICAgICAgZHJpdmVVcmk6IHN0cmluZyxcbiAgICAgICAgY29tYmluZU1ldGhvZDogRnVmQ29tYmluZU1ldGhvZCxcbiAgICAgICAgYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbFxuICAgICk6IFByb21pc2U8Q29tYmluZUZ1ZlJlc3VsdCB8IHVuZGVmaW5lZD4ge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFVybChcInRyYW5zZmVyL2NvbWJpbmUtd2l0aC1mdWZcIikpXG4gICAgICAgICAgICAud2l0aFF1ZXJ5UGFyYW1zKHsgZnVmRHJpdmVVcmk6IGRyaXZlVXJpLCBjb21iaW5lTWV0aG9kOiBjb21iaW5lTWV0aG9kIH0pXG4gICAgICAgICAgICAud2l0aEFib3J0U2lnbmFsKGFib3J0U2lnbmFsKTtcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gNDAwKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhd2FpdCByZXNwb25zZS5qc29uPENvbWJpbmVGdWZSZXN1bHQ+KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGV4Y2Vsc1RvUGFydGlhbEZ1ZnMoXG4gICAgICAgIGdmdjogc3RyaW5nLFxuICAgICAgICBwYXRoVG9UYWJsZTogc3RyaW5nLFxuICAgICAgICBkcml2ZVVyaXM6IHN0cmluZ1tdXG4gICAgKTogUHJvbWlzZTxFeGNlbHNUb1BhcnRpYWxGdWZzUmVzcG9uc2UgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAgICAgLnBvc3QoXCJ2MS9maWxlcy9leGNlbHMtdG8tcGFydGlhbC1mdWZzXCIpXG4gICAgICAgICAgICAgICAgLndpdGhRdWVyeVBhcmFtcyh7IGdmdjogZ2Z2LCBwYXRoVG9UYWJsZTogcGF0aFRvVGFibGUgfSlcbiAgICAgICAgICAgICAgICAud2l0aEpzb25Cb2R5KGRyaXZlVXJpcyk7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSAyMDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgcmVzcG9uc2UuanNvbjxFeGNlbHNUb1BhcnRpYWxGdWZzUmVzcG9uc2U+KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGltcG9ydEZyb21QYXJ0aWFsRnVmc0J5UGF0aChcbiAgICAgICAgcGF0aFRvVGFibGU6IHN0cmluZyxcbiAgICAgICAgZHJpdmVVcmk6IHN0cmluZ1tdLFxuICAgICAgICBjb21iaW5lTWV0aG9kOiBzdHJpbmcsXG4gICAgICAgIGNvbWJpbmF0b3JUeXBlOiBDb21iaW5hdG9yVHlwZVxuICAgICk6IFByb21pc2U8SW1wb3J0RnJvbVBhcnRpYWxGdWZzQnlQYXRoUmVzcG9uc2UgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFVybChcInRyYW5zZmVyL2ltcG9ydC1mcm9tLXBhcnRpYWwtZnVmcy1ieS1wYXRoXCIpKVxuICAgICAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbXMoe1xuICAgICAgICAgICAgICAgICAgICBwYXRoVG9UYWJsZTogcGF0aFRvVGFibGUsXG4gICAgICAgICAgICAgICAgICAgIGNvbWJpbmVNZXRob2Q6IGNvbWJpbmVNZXRob2QsXG4gICAgICAgICAgICAgICAgICAgIGNvbWJpbmF0b3JUeXBlOiBjb21iaW5hdG9yVHlwZSxcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC53aXRoSnNvbkJvZHkoZHJpdmVVcmkpO1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gMjAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3BvbnNlLmpzb248SW1wb3J0RnJvbVBhcnRpYWxGdWZzQnlQYXRoUmVzcG9uc2U+KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIG11bHRpcGxlQ29tYmluZUZ1ZkJ5RHJpdmVVcmkoXG4gICAgICAgIGRyaXZlVXJpczogc3RyaW5nW10sXG4gICAgICAgIGNvbWJpbmVNZXRob2Q6IEZ1ZkNvbWJpbmVNZXRob2QsXG4gICAgICAgIGFyZ3M/OiBzdHJpbmdbXVxuICAgICk6IFByb21pc2U8Q29tYmluZUZ1ZlJlc3VsdCB8IHVuZGVmaW5lZD4ge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFVybChcInRyYW5zZmVyL2NvbWJpbmUtd2l0aC1mdWZzXCIpKVxuICAgICAgICAgICAgLndpdGhRdWVyeVBhcmFtcyh7IGNvbWJpbmVNZXRob2Q6IGNvbWJpbmVNZXRob2QgfSlcbiAgICAgICAgICAgIC53aXRoSnNvbkJvZHkoeyBkcml2ZVVyaXM6IGRyaXZlVXJpcywgYXJndW1lbnRzOiBhcmdzIH0pXG4gICAgICAgICAgICAuYWNjZXB0Q29kZSg0MDApXG4gICAgICAgICAgICAuYWNjZXB0Q29kZSg1MDApO1xuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSA0MDAgfHwgcmVzcG9uc2Uuc3RhdHVzID09PSA1MDApIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3BvbnNlLmpzb248Q29tYmluZUZ1ZlJlc3VsdD4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgaW1wb3J0WG1scyhcbiAgICAgICAgZHJpdmVVcmlzOiBzdHJpbmdbXSxcbiAgICAgICAgY29tYmluZU1ldGhvZDogRnVmQ29tYmluZU1ldGhvZCxcbiAgICAgICAgY29tYmluYXRvclR5cGU6IENvbWJpbmF0b3JUeXBlLFxuICAgICAgICBpc0ltcG9ydEJ5RnVmOiBib29sZWFuLFxuICAgICAgICBhcmdzPzogc3RyaW5nW11cbiAgICApOiBQcm9taXNlPENvbWJpbmVGdWZSZXN1bHQgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KHRoaXMuZ2V0RHJhZnRVcmwoXCJ0cmFuc2Zlci9pbXBvcnQteG1sc1wiKSlcbiAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbXMoe1xuICAgICAgICAgICAgICAgIGNvbWJpbmVNZXRob2Q6IGNvbWJpbmVNZXRob2QsXG4gICAgICAgICAgICAgICAgY29tYmluYXRvclR5cGU6IGNvbWJpbmF0b3JUeXBlLFxuICAgICAgICAgICAgICAgIGltcG9ydEJ5RnVmOiBpc0ltcG9ydEJ5RnVmLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC53aXRoSnNvbkJvZHkoeyBGdWZEcml2ZVVyaXM6IGRyaXZlVXJpcywgYXJndW1lbnRzOiBhcmdzIH0pO1xuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSA0MDApIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3BvbnNlLmpzb248Q29tYmluZUZ1ZlJlc3VsdD4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgc2V0RHJhZnRTZXR0aW5ncyhzZXR0aW5nczogRHJhZnRTZXR0aW5ncyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLmh0dHBDbGllbnQucGF0Y2godGhpcy5nZXREcmFmdFVybChcImV4dGVybmFsL3NldC1zZXR0aW5nc1wiKSkud2l0aEpzb25Cb2R5KHNldHRpbmdzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0RHJhZnRTZXR0aW5ncygpOiBQcm9taXNlPERyYWZ0U2V0dGluZ3M+IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmh0dHBDbGllbnQuZ2V0KHRoaXMuZ2V0RHJhZnRVcmwoXCJleHRlcm5hbC9nZXQtc2V0dGluZ3NcIikpO1xuXG4gICAgICAgIHJldHVybiByZXNwb25zZS5qc29uPERyYWZ0U2V0dGluZ3M+KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIG5vcm1hbGl6ZUJ5UnVsZXMocnVsZXM6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLmh0dHBDbGllbnQucG9zdCh0aGlzLmdldERyYWZ0VXJsKFwidGVzdC1ub3JtYWxpemVcIikpLndpdGhKc29uQm9keShydWxlcyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRIcmVmRG93bmxvYWREcmFmdFByZXNlbnRhdGlvbihwcmVzZW50YXRpb25UeXBlOiBEcmFmdFByZXNlbnRhdGlvblR5cGUpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnVybCh0aGlzLmdldERyYWZ0UHJlc2VudGF0aW9uVXJsKHByZXNlbnRhdGlvblR5cGUpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldERyYWZ0VXJsKGRyYWZ0UmVsYXRlZFVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIGB2MS9ucy8ke3RoaXMuZHJhZnRGdWxsSWQubnN9L2RyYWZ0cy8ke3RoaXMuZHJhZnRGdWxsSWQuZHJhZnRJZH0vJHtkcmFmdFJlbGF0ZWRVcmx9YDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldERyYWZ0UHJlc2VudGF0aW9uVXJsKHByZXNlbnRhdGlvblR5cGU6IERyYWZ0UHJlc2VudGF0aW9uVHlwZSk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldERyYWZ0VXJsKGBwcmVzZW50YXRpb25zLyR7cHJlc2VudGF0aW9uVHlwZS50b1N0cmluZygpfWApO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBzZXRNdWx0aXBsZVdpdGhOb3JtYWxpemF0aW9uKHJ1bGVzOiBWYWx1ZUZvckluc3RhbmNlc1NldHRpbmdSdWxlW10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgdXJpID0gdGhpcy5nZXREcmFmdFVybChcImlubmVyL3NldC1tdWx0aXBsZS13aXRoLW5vcm1hbGl6YXRpb25cIik7XG4gICAgICAgIGNvbnN0IGZpbmFsUnVsZXMgPSBydWxlcy5tYXAoeCA9PiAoeyAuLi54LCBwYXRoOiBjb252ZXJ0VG9MZWdhY3lQYXRoKHgucGF0aCkgfSkpO1xuICAgICAgICBhd2FpdCB0aGlzLmh0dHBDbGllbnQucGF0Y2godXJpKS53aXRoSnNvbkJvZHkoZmluYWxSdWxlcyk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHNlYXJjaEluc3RhbmNlc0J5VGV4dChcbiAgICAgICAgdGV4dDogc3RyaW5nLFxuICAgICAgICBwYXRoc1ByZWZpeDogc3RyaW5nLFxuICAgICAgICBwYXRoc1RvU2VhcmNoOiBzdHJpbmdbXSxcbiAgICAgICAgbWF4SW5zdGFuY2VDb3VudD86IG51bWJlclxuICAgICk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICAgICAgY29uc3QgbWF4SW5zdGFuY2VDb3VudFBhcmFtcyA9IG1heEluc3RhbmNlQ291bnQgIT0gdW5kZWZpbmVkID8geyBtYXhJbnN0YW5jZUNvdW50OiBtYXhJbnN0YW5jZUNvdW50IH0gOiB7fTtcbiAgICAgICAgY29uc3QgcGFyYW1zID0geyBzZWFyY2hTdHJpbmc6IHRleHQsIHBhdGhzUHJlZml4OiBwYXRoc1ByZWZpeCwgLi4ubWF4SW5zdGFuY2VDb3VudFBhcmFtcyB9O1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdCh0aGlzLmdldERyYWZ0VXJsKFwiaW5uZXIvc2VhcmNoLWJ5LXN0cmluZ1wiKSlcbiAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbXMocGFyYW1zKVxuICAgICAgICAgICAgLndpdGhKc29uQm9keShwYXRoc1RvU2VhcmNoKVxuICAgICAgICAgICAgLmpzb248c3RyaW5nW10+KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHF1ZXJ5Q29sbGVjdGlvbihyZXF1ZXN0OiBJbm5lclF1ZXJ5UmVxdWVzdCwgYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbCk6IFByb21pc2U8SW5uZXJRdWVyeVJlc3BvbnNlPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KHRoaXMuZ2V0RHJhZnRVcmwoXCJpbm5lci9xdWVyeS1jb2xsZWN0aW9uXCIpKVxuICAgICAgICAgICAgLndpdGhKc29uQm9keShyZXF1ZXN0KVxuICAgICAgICAgICAgLndpdGhBYm9ydFNpZ25hbChhYm9ydFNpZ25hbClcbiAgICAgICAgICAgIC5qc29uPElubmVyUXVlcnlSZXNwb25zZT4oKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgcmVzb2x2ZUlubmVyUGF0aChcbiAgICAgICAgcmVxdWVzdDogUmVzb2x2ZUlubmVyUGF0aFJlcXVlc3QsXG4gICAgICAgIGFib3J0U2lnbmFsPzogQWJvcnRTaWduYWxcbiAgICApOiBQcm9taXNlPFJlc29sdmVQYXRoUmVzcG9uc2U+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFVybChcImlubmVyL3Jlc29sdmUtaW5uZXItcGF0aFwiKSlcbiAgICAgICAgICAgIC53aXRoSnNvbkJvZHkocmVxdWVzdClcbiAgICAgICAgICAgIC53aXRoQWJvcnRTaWduYWwoYWJvcnRTaWduYWwpXG4gICAgICAgICAgICAuanNvbjxSZXNvbHZlUGF0aFJlc3BvbnNlPigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBjdXN0b21Ob3JtYWxpemUoXG4gICAgICAgIG5vcm1hbGl6ZXJJZDogc3RyaW5nIHwgbnVsbCxcbiAgICAgICAgcGF0aFByZWZpeGVzOiBBYnNvbHV0ZU1vZGVsUGF0aFtdLFxuICAgICAgICBhYm9ydFNpZ25hbD86IEFib3J0U2lnbmFsXG4gICAgKTogUHJvbWlzZTxJSW5uZXJDaGFuZ2VSZXN1bHQ+IHtcbiAgICAgICAgY29uc3QgcGFyYW1zID0geyBub3JtYWxpemVySWQ6IG5vcm1hbGl6ZXJJZCB9O1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmh0dHBDbGllbnRcbiAgICAgICAgICAgIC5wb3N0KHRoaXMuZ2V0RHJhZnRVcmwoXCJpbm5lci9jdXN0b20tbm9ybWFsaXplXCIpKVxuICAgICAgICAgICAgLndpdGhRdWVyeVBhcmFtcyhwYXJhbXMpXG4gICAgICAgICAgICAud2l0aEpzb25Cb2R5KHBhdGhQcmVmaXhlcy5tYXAoeCA9PiB4LnRvU3RyaW5nKCkpKVxuICAgICAgICAgICAgLndpdGhBYm9ydFNpZ25hbChhYm9ydFNpZ25hbCk7XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdC5zdGF0dXMgPT0gMjAwID8gYXdhaXQgcmVzdWx0Lmpzb248SUlubmVyQ2hhbmdlU3VjY2Vzc1Jlc3VsdD4oKSA6IHJlc3VsdC5zdGF0dXM7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGltcG9ydEVtcGxveWVlcyhyZXF1ZXN0OiBJbXBvcnRFbXBsb3llZXNSZXF1ZXN0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMuaHR0cENsaWVudC5wYXRjaCh0aGlzLmdldERyYWZ0VXJsKFwic3RhZmZcIikpLndpdGhKc29uQm9keShyZXF1ZXN0KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZGVsZXRlSW5zdGFuY2VzKGRlbGV0aW5nUnVsZXM6IEluc3RhbmNlc0RlbGV0aW5nUnVsZVtdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMuaHR0cENsaWVudC5wb3N0KHRoaXMuZ2V0RHJhZnRVcmwoXCJpbm5lci9kZWxldGUtaW5zdGFuY2VzXCIpKS53aXRoSnNvbkJvZHkoZGVsZXRpbmdSdWxlcyk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHJ1bk1hc3NBY3Rpb24oYWN0aW9uSWQ6IHN0cmluZywgcGFyYW1ldGVycz86IE1hc3NBY3Rpb25QYXJhbWV0ZXJzKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0geyBhY3Rpb25JZDogYWN0aW9uSWQgfTtcbiAgICAgICAgYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAucG9zdCh0aGlzLmdldERyYWZ0VXJsKFwiaW5uZXIvbWFzcy1hY3Rpb25cIikpXG4gICAgICAgICAgICAud2l0aFF1ZXJ5UGFyYW1zKHF1ZXJ5UGFyYW1zKVxuICAgICAgICAgICAgLndpdGhKc29uQm9keShwYXJhbWV0ZXJzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcHJpbnQodHlwZTogUHJpbnRUeXBlLCBib2R5Pzogc3RyaW5nW10pOiBQcm9taXNlPFByaW50UmVzcG9uc2U+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudFxuICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFVybChgcHJlc2VudGF0aW9ucy9pbm5lci9wcmludC8ke3R5cGV9YCkpXG4gICAgICAgICAgICAud2l0aEpzb25Cb2R5KGJvZHkpXG4gICAgICAgICAgICAuanNvbjxQcmludFJlc3BvbnNlPigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBwcmludEV4Y2VsKHBhdGhUb1RhYmxlOiBzdHJpbmcpOiBQcm9taXNlPFByaW50UmVzcG9uc2UgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5odHRwQ2xpZW50XG4gICAgICAgICAgICAgICAgLnBvc3QodGhpcy5nZXREcmFmdFVybChgcHJlc2VudGF0aW9ucy90YWJsZS9wcmludGApKVxuICAgICAgICAgICAgICAgIC53aXRoUXVlcnlQYXJhbXMoeyBwYXRoVG9UYWJsZTogcGF0aFRvVGFibGUgfSk7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSAyMDApIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0YWJsZUV4Y2VsID0gcmVzcG9uc2UuanNvbjxQcmludFJlc3BvbnNlPigpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0YWJsZUV4Y2VsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBjaGVja0J5UG9wZCgpOiBQcm9taXNlPENhbmR5UG9wZFByb3RvY29sPiB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5odHRwQ2xpZW50LmdldChcbiAgICAgICAgICAgIGB2MS9ucy8ke3RoaXMuZHJhZnRGdWxsSWQubnN9L2RyYWZ0cy8ke3RoaXMuZHJhZnRGdWxsSWQuZHJhZnRJZH0vY2hlY2tCeVBvcGRgXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlLmpzb248Q2FuZHlQb3BkUHJvdG9jb2w+KCk7XG4gICAgfVxu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