@revxui/api-clients-ts 0.10.310 → 0.10.312

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 (95) hide show
  1. package/README.md +2 -2
  2. package/api/appSettingsController.service.d.ts +0 -39
  3. package/api/audienceController.service.d.ts +33 -4
  4. package/bundles/revxui-api-clients-ts.umd.js +124 -150
  5. package/bundles/revxui-api-clients-ts.umd.js.map +1 -1
  6. package/bundles/revxui-api-clients-ts.umd.min.js +1 -1
  7. package/bundles/revxui-api-clients-ts.umd.min.js.map +1 -1
  8. package/esm2015/api/adminController.service.js +2 -2
  9. package/esm2015/api/advertiserController.service.js +2 -2
  10. package/esm2015/api/appSettingsController.service.js +2 -91
  11. package/esm2015/api/audienceController.service.js +77 -6
  12. package/esm2015/api/auditController.service.js +2 -2
  13. package/esm2015/api/bulkStrategyController.service.js +2 -2
  14. package/esm2015/api/cSSThemeController_.service.js +2 -2
  15. package/esm2015/api/campaignController.service.js +2 -2
  16. package/esm2015/api/catalogController.service.js +2 -2
  17. package/esm2015/api/clickDestinationController.service.js +2 -2
  18. package/esm2015/api/creativeController.service.js +2 -2
  19. package/esm2015/api/creativeSetsController.service.js +2 -2
  20. package/esm2015/api/creativeTemplateThemesController.service.js +2 -2
  21. package/esm2015/api/creativeTemplateVariablesController.service.js +2 -2
  22. package/esm2015/api/creativeTemplatesController.service.js +2 -2
  23. package/esm2015/api/dashboardController.service.js +2 -2
  24. package/esm2015/api/notificationsController.service.js +2 -2
  25. package/esm2015/api/pixelController.service.js +2 -2
  26. package/esm2015/api/reportingController.service.js +2 -2
  27. package/esm2015/api/sliceXController.service.js +2 -2
  28. package/esm2015/api/strategyController.service.js +2 -2
  29. package/esm2015/api/uILoggerController.service.js +2 -2
  30. package/esm2015/api/userPreferenceController.service.js +2 -2
  31. package/esm2015/model/apiResponseObjectListBackfillAudienceQueryTemplateDTO.js +1 -0
  32. package/esm2015/model/audienceBackfillQueryTemplateRequest.js +22 -0
  33. package/esm2015/model/audienceBackfillRequest.js +1 -0
  34. package/esm2015/model/audienceDTO.js +1 -1
  35. package/esm2015/model/backfillAudienceQueryTemplateDTO.js +12 -0
  36. package/esm2015/model/models.js +2 -2
  37. package/esm5/api/adminController.service.js +2 -2
  38. package/esm5/api/advertiserController.service.js +2 -2
  39. package/esm5/api/appSettingsController.service.js +2 -97
  40. package/esm5/api/audienceController.service.js +81 -6
  41. package/esm5/api/auditController.service.js +2 -2
  42. package/esm5/api/bulkStrategyController.service.js +2 -2
  43. package/esm5/api/cSSThemeController_.service.js +2 -2
  44. package/esm5/api/campaignController.service.js +2 -2
  45. package/esm5/api/catalogController.service.js +2 -2
  46. package/esm5/api/clickDestinationController.service.js +2 -2
  47. package/esm5/api/creativeController.service.js +2 -2
  48. package/esm5/api/creativeSetsController.service.js +2 -2
  49. package/esm5/api/creativeTemplateThemesController.service.js +2 -2
  50. package/esm5/api/creativeTemplateVariablesController.service.js +2 -2
  51. package/esm5/api/creativeTemplatesController.service.js +2 -2
  52. package/esm5/api/dashboardController.service.js +2 -2
  53. package/esm5/api/notificationsController.service.js +2 -2
  54. package/esm5/api/pixelController.service.js +2 -2
  55. package/esm5/api/reportingController.service.js +2 -2
  56. package/esm5/api/sliceXController.service.js +2 -2
  57. package/esm5/api/strategyController.service.js +2 -2
  58. package/esm5/api/uILoggerController.service.js +2 -2
  59. package/esm5/api/userPreferenceController.service.js +2 -2
  60. package/esm5/model/apiResponseObjectListBackfillAudienceQueryTemplateDTO.js +1 -0
  61. package/esm5/model/audienceBackfillQueryTemplateRequest.js +22 -0
  62. package/esm5/model/audienceBackfillRequest.js +1 -0
  63. package/esm5/model/audienceDTO.js +1 -1
  64. package/esm5/model/backfillAudienceQueryTemplateDTO.js +12 -0
  65. package/esm5/model/models.js +2 -2
  66. package/fesm2015/revxui-api-clients-ts.js +121 -145
  67. package/fesm2015/revxui-api-clients-ts.js.map +1 -1
  68. package/fesm5/revxui-api-clients-ts.js +125 -151
  69. package/fesm5/revxui-api-clients-ts.js.map +1 -1
  70. package/model/{apiResponseObjectAdvertiserDynamicVideoConfig.d.ts → apiResponseObjectListBackfillAudienceQueryTemplateDTO.d.ts} +3 -3
  71. package/model/audienceBackfillQueryTemplateRequest.d.ts +26 -0
  72. package/model/{nameAndTitleModel.d.ts → audienceBackfillRequest.d.ts} +5 -3
  73. package/model/audienceDTO.d.ts +1 -0
  74. package/model/{dynamicVideoTemplate.d.ts → backfillAudienceQueryTemplateDTO.d.ts} +3 -4
  75. package/model/models.d.ts +4 -7
  76. package/package.json +1 -1
  77. package/revxui-api-clients-ts.metadata.json +1 -1
  78. package/esm2015/model/advertiserDynamicVideoConfig.js +0 -1
  79. package/esm2015/model/apiResponseObjectAdvertiserDynamicVideoConfig.js +0 -1
  80. package/esm2015/model/apiResponseObjectListDynamicVideoTemplate.js +0 -1
  81. package/esm2015/model/dynamicVideoConfigDTO.js +0 -28
  82. package/esm2015/model/dynamicVideoDTO.js +0 -1
  83. package/esm2015/model/dynamicVideoTemplate.js +0 -1
  84. package/esm2015/model/nameAndTitleModel.js +0 -12
  85. package/esm5/model/advertiserDynamicVideoConfig.js +0 -1
  86. package/esm5/model/apiResponseObjectAdvertiserDynamicVideoConfig.js +0 -1
  87. package/esm5/model/apiResponseObjectListDynamicVideoTemplate.js +0 -1
  88. package/esm5/model/dynamicVideoConfigDTO.js +0 -28
  89. package/esm5/model/dynamicVideoDTO.js +0 -1
  90. package/esm5/model/dynamicVideoTemplate.js +0 -1
  91. package/esm5/model/nameAndTitleModel.js +0 -12
  92. package/model/advertiserDynamicVideoConfig.d.ts +0 -18
  93. package/model/apiResponseObjectListDynamicVideoTemplate.d.ts +0 -17
  94. package/model/dynamicVideoConfigDTO.d.ts +0 -32
  95. package/model/dynamicVideoDTO.d.ts +0 -16
@@ -19,7 +19,7 @@ import { Configuration } from '../configuration';
19
19
  var SliceXControllerService = /** @class */ (function () {
20
20
  function SliceXControllerService(httpClient, basePath, configuration) {
21
21
  this.httpClient = httpClient;
22
- this.basePath = 'https://apiv2stage2.atomex.net';
22
+ this.basePath = 'https://apiv2stage3.atomex.net';
23
23
  this.defaultHeaders = new HttpHeaders();
24
24
  this.configuration = new Configuration();
25
25
  if (basePath) {
@@ -273,4 +273,4 @@ var SliceXControllerService = /** @class */ (function () {
273
273
  return SliceXControllerService;
274
274
  }());
275
275
  export { SliceXControllerService };
276
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xpY2VYQ29udHJvbGxlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHJldnh1aS9hcGktY2xpZW50cy10cy8iLCJzb3VyY2VzIjpbImFwaS9zbGljZVhDb250cm9sbGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7R0FVRztBQUNILHVEQUF1RDs7QUFFdkQsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQTJCLGVBQWUsQ0FBQztBQUNsRixPQUFPLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQ25DLFlBQVksRUFBRSxTQUFTLEVBQUUsTUFBZ0Msc0JBQXNCLENBQUM7QUFDekYsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQTZCLFlBQVksQ0FBQztBQVUvRSxPQUFPLEVBQUUsU0FBUyxFQUFzQixNQUEwQixjQUFjLENBQUM7QUFDakYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUEwQyxrQkFBa0IsQ0FBQztBQUlyRjtJQU1JLGlDQUFzQixVQUFzQixFQUFnQyxRQUFnQixFQUFjLGFBQTRCO1FBQWhILGVBQVUsR0FBVixVQUFVLENBQVk7UUFKbEMsYUFBUSxHQUFHLGdDQUFnQyxDQUFDO1FBQy9DLG1CQUFjLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQztRQUNuQyxrQkFBYSxHQUFHLElBQUksYUFBYSxFQUFFLENBQUM7UUFHdkMsSUFBSSxRQUFRLEVBQUU7WUFDVixJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztTQUM1QjtRQUNELElBQUksYUFBYSxFQUFFO1lBQ2YsSUFBSSxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUM7WUFDbkMsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLElBQUksYUFBYSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDO1NBQ3ZFO0lBQ0wsQ0FBQztJQUVEOzs7T0FHRztJQUNLLGdEQUFjLEdBQXRCLFVBQXVCLFFBQWtCOztR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Q2xFO1FBRUQsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBMEIsSUFBSSxDQUFDLFFBQVEsZ0NBQTJCLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBRyxFQUM3SCxhQUFhLEVBQ2I7WUFDSSxNQUFNLEVBQUUsZUFBZTtZQUN2QixlQUFlLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlO1lBQ25ELE9BQU8sRUFBRSxPQUFPO1lBQ2hCLE9BQU8sRUFBRSxPQUFPO1lBQ2hCLGNBQWMsRUFBRSxjQUFjO1NBQ2pDLENBQ0osQ0FBQztJQUNOLENBQUM7O2dCQWhXaUMsVUFBVTs2Q0FBRyxRQUFRLFlBQUcsTUFBTSxTQUFDLFNBQVM7Z0JBQStDLGFBQWEsdUJBQXZDLFFBQVE7O0lBTjlGLHVCQUF1QjtRQURuQyxVQUFVLEVBQUU7UUFPc0MsV0FBQSxRQUFRLEVBQUUsQ0FBQSxFQUFDLFdBQUEsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFBLEVBQW9CLFdBQUEsUUFBUSxFQUFFLENBQUE7T0FOaEcsdUJBQXVCLENBd1duQztJQUFELDhCQUFDO0NBQUEsQUF4V0QsSUF3V0M7U0F4V1ksdUJBQXVCIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBBcGkgRG9jdW1lbnRhdGlvblxuICogQXBpIERvY3VtZW50YXRpb25cbiAqXG4gKiBPcGVuQVBJIHNwZWMgdmVyc2lvbjogMS4wXG4gKiBcbiAqXG4gKiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IHRoZSBzd2FnZ2VyIGNvZGUgZ2VuZXJhdG9yIHByb2dyYW0uXG4gKiBodHRwczovL2dpdGh1Yi5jb20vc3dhZ2dlci1hcGkvc3dhZ2dlci1jb2RlZ2VuLmdpdFxuICogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuICovXG4vKiB0c2xpbnQ6ZGlzYWJsZTpuby11bnVzZWQtdmFyaWFibGUgbWVtYmVyLW9yZGVyaW5nICovXG5cbmltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgT3B0aW9uYWwgfSAgICAgICAgICAgICAgICAgICAgICBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBIZWFkZXJzLCBIdHRwUGFyYW1zLFxuICAgICAgICAgSHR0cFJlc3BvbnNlLCBIdHRwRXZlbnQgfSAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IEN1c3RvbUh0dHBVcmxFbmNvZGluZ0NvZGVjIH0gICAgICAgICAgICAgICAgICAgICAgICBmcm9tICcuLi9lbmNvZGVyJztcblxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBBcGlSZXNwb25zZU9iamVjdFNsaWNleENoYXJ0UmVzcG9uc2UgfSBmcm9tICcuLi9tb2RlbC9hcGlSZXNwb25zZU9iamVjdFNsaWNleENoYXJ0UmVzcG9uc2UnO1xuaW1wb3J0IHsgQXBpUmVzcG9uc2VPYmplY3RTbGljZXhMaXN0UmVzcG9uc2UgfSBmcm9tICcuLi9tb2RlbC9hcGlSZXNwb25zZU9iamVjdFNsaWNleExpc3RSZXNwb25zZSc7XG5pbXBvcnQgeyBGaWxlRG93bmxvYWRSZXNwb25zZSB9IGZyb20gJy4uL21vZGVsL2ZpbGVEb3dubG9hZFJlc3BvbnNlJztcbmltcG9ydCB7IFNsaWNleFJlcXVlc3QgfSBmcm9tICcuLi9tb2RlbC9zbGljZXhSZXF1ZXN0JztcbmltcG9ydCB7IFNsaWNleFJlcXVlc3RFeHRlbmRlZCB9IGZyb20gJy4uL21vZGVsL3NsaWNleFJlcXVlc3RFeHRlbmRlZCc7XG5cbmltcG9ydCB7IEJBU0VfUEFUSCwgQ09MTEVDVElPTl9GT1JNQVRTIH0gICAgICAgICAgICAgICAgICAgICBmcm9tICcuLi92YXJpYWJsZXMnO1xuaW1wb3J0IHsgQ29uZmlndXJhdGlvbiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gJy4uL2NvbmZpZ3VyYXRpb24nO1xuXG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBTbGljZVhDb250cm9sbGVyU2VydmljZSB7XG5cbiAgICBwcm90ZWN0ZWQgYmFzZVBhdGggPSAnaHR0cHM6Ly9hcGl2MnN0YWdlMi5hdG9tZXgubmV0JztcbiAgICBwdWJsaWMgZGVmYXVsdEhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKTtcbiAgICBwdWJsaWMgY29uZmlndXJhdGlvbiA9IG5ldyBDb25maWd1cmF0aW9uKCk7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgaHR0cENsaWVudDogSHR0cENsaWVudCwgQE9wdGlvbmFsKClASW5qZWN0KEJBU0VfUEFUSCkgYmFzZVBhdGg6IHN0cmluZywgQE9wdGlvbmFsKCkgY29uZmlndXJhdGlvbjogQ29uZmlndXJhdGlvbikge1xuICAgICAgICBpZiAoYmFzZVBhdGgpIHtcbiAgICAgICAgICAgIHRoaXMuYmFzZVBhdGggPSBiYXNlUGF0aDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29uZmlndXJhdGlvbikge1xuICAgICAgICAgICAgdGhpcy5jb25maWd1cmF0aW9uID0gY29uZmlndXJhdGlvbjtcbiAgICAgICAgICAgIHRoaXMuYmFzZVBhdGggPSBiYXNlUGF0aCB8fCBjb25maWd1cmF0aW9uLmJhc2VQYXRoIHx8IHRoaXMuYmFzZVBhdGg7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0gY29uc3VtZXMgc3RyaW5nW10gbWltZS10eXBlc1xuICAgICAqIEByZXR1cm4gdHJ1ZTogY29uc3VtZXMgY29udGFpbnMgJ211bHRpcGFydC9mb3JtLWRhdGEnLCBmYWxzZTogb3RoZXJ3aXNlXG4gICAgICovXG4gICAgcHJpdmF0ZSBjYW5Db25zdW1lRm9ybShjb25zdW1lczogc3RyaW5nW10pOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgZm9ybSA9ICdtdWx0aXBhcnQvZm9ybS1kYXRhJztcbiAgICAgICAgZm9yIChjb25zdCBjb25zdW1lIG9mIGNvbnN1bWVzKSB7XG4gICAgICAgICAgICBpZiAoZm9ybSA9PT0gY29uc3VtZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIFNsaWNleCBBUEkgZm9yIGdyYXBoLlxuICAgICAqIFxuICAgICAqIEBwYXJhbSBzbGljZXhSZXF1ZXN0IHNsaWNleFJlcXVlc3RcbiAgICAgKiBAcGFyYW0gcmVxSWQgcmVxdWVzdCBpZFxuICAgICAqIEBwYXJhbSB0b2tlbiBBdXRoIFRva2VuXG4gICAgICogQHBhcmFtIG9ic2VydmUgc2V0IHdoZXRoZXIgb3Igbm90IHRvIHJldHVybiB0aGUgZGF0YSBPYnNlcnZhYmxlIGFzIHRoZSBib2R5LCByZXNwb25zZSBvciBldmVudHMuIGRlZmF1bHRzIHRvIHJldHVybmluZyB0aGUgYm9keS5cbiAgICAgKiBAcGFyYW0gcmVwb3J0UHJvZ3Jlc3MgZmxhZyB0byByZXBvcnQgcmVxdWVzdCBhbmQgcmVzcG9uc2UgcHJvZ3Jlc3MuXG4gICAgICovXG4gICAgcHVibGljIGdldFNsaWNleERhdGFDaGFydFVzaW5nUE9TVChzbGljZXhSZXF1ZXN0OiBTbGljZXhSZXF1ZXN0LCByZXFJZD86IHN0cmluZywgdG9rZW4/OiBzdHJpbmcsIG9ic2VydmU/OiAnYm9keScsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbik6IE9ic2VydmFibGU8QXBpUmVzcG9uc2VPYmplY3RTbGljZXhDaGFydFJlc3BvbnNlPjtcbiAgICBwdWJsaWMgZ2V0U2xpY2V4RGF0YUNoYXJ0VXNpbmdQT1NUKHNsaWNleFJlcXVlc3Q6IFNsaWNleFJlcXVlc3QsIHJlcUlkPzogc3RyaW5nLCB0b2tlbj86IHN0cmluZywgb2JzZXJ2ZT86ICdyZXNwb25zZScsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbik6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPEFwaVJlc3BvbnNlT2JqZWN0U2xpY2V4Q2hhcnRSZXNwb25zZT4+O1xuICAgIHB1YmxpYyBnZXRTbGljZXhEYXRhQ2hhcnRVc2luZ1BPU1Qoc2xpY2V4UmVxdWVzdDogU2xpY2V4UmVxdWVzdCwgcmVxSWQ/OiBzdHJpbmcsIHRva2VuPzogc3RyaW5nLCBvYnNlcnZlPzogJ2V2ZW50cycsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbik6IE9ic2VydmFibGU8SHR0cEV2ZW50PEFwaVJlc3BvbnNlT2JqZWN0U2xpY2V4Q2hhcnRSZXNwb25zZT4+O1xuICAgIHB1YmxpYyBnZXRTbGljZXhEYXRhQ2hhcnRVc2luZ1BPU1Qoc2xpY2V4UmVxdWVzdDogU2xpY2V4UmVxdWVzdCwgcmVxSWQ/OiBzdHJpbmcsIHRva2VuPzogc3RyaW5nLCBvYnNlcnZlOiBhbnkgPSAnYm9keScsIHJlcG9ydFByb2dyZXNzOiBib29sZWFuID0gZmFsc2UgKTogT2JzZXJ2YWJsZTxhbnk+IHtcblxuICAgICAgICBpZiAoc2xpY2V4UmVxdWVzdCA9PT0gbnVsbCB8fCBzbGljZXhSZXF1ZXN0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWlyZWQgcGFyYW1ldGVyIHNsaWNleFJlcXVlc3Qgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyBnZXRTbGljZXhEYXRhQ2hhcnRVc2luZ1BPU1QuJyk7XG4gICAgICAgIH1cblxuXG5cbiAgICAgICAgbGV0IGhlYWRlcnMgPSB0aGlzLmRlZmF1bHRIZWFkZXJzO1xuICAgICAgICBpZiAocmVxSWQgIT09IHVuZGVmaW5lZCAmJiByZXFJZCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KCdyZXFJZCcsIFN0cmluZyhyZXFJZCkpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0b2tlbiAhPT0gdW5kZWZpbmVkICYmIHRva2VuICE9PSBudWxsKSB7XG4gICAgICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoJ3Rva2VuJywgU3RyaW5nKHRva2VuKSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyB0byBkZXRlcm1pbmUgdGhlIEFjY2VwdCBoZWFkZXJcbiAgICAgICAgbGV0IGh0dHBIZWFkZXJBY2NlcHRzOiBzdHJpbmdbXSA9IFtcbiAgICAgICAgICAgICdhcHBsaWNhdGlvbi9qc29uJ1xuICAgICAgICBdO1xuICAgICAgICBjb25zdCBodHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHRoaXMuY29uZmlndXJhdGlvbi5zZWxlY3RIZWFkZXJBY2NlcHQoaHR0cEhlYWRlckFjY2VwdHMpO1xuICAgICAgICBpZiAoaHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KCdBY2NlcHQnLCBodHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gdG8gZGV0ZXJtaW5lIHRoZSBDb250ZW50LVR5cGUgaGVhZGVyXG4gICAgICAgIGNvbnN0IGNvbnN1bWVzOiBzdHJpbmdbXSA9IFtcbiAgICAgICAgICAgICdhcHBsaWNhdGlvbi9qc29uJ1xuICAgICAgICBdO1xuICAgICAgICBjb25zdCBodHRwQ29udGVudFR5cGVTZWxlY3RlZDogc3RyaW5nIHwgdW5kZWZpbmVkID0gdGhpcy5jb25maWd1cmF0aW9uLnNlbGVjdEhlYWRlckNvbnRlbnRUeXBlKGNvbnN1bWVzKTtcbiAgICAgICAgaWYgKGh0dHBDb250ZW50VHlwZVNlbGVjdGVkICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KCdDb250ZW50LVR5cGUnLCBodHRwQ29udGVudFR5cGVTZWxlY3RlZCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBvc3Q8QXBpUmVzcG9uc2VPYmplY3RTbGljZXhDaGFydFJlc3BvbnNlPihgJHt0aGlzLmJhc2VQYXRofS92Mi9hcGkvc2xpY2V4L2NoYXJ0YCxcbiAgICAgICAgICAgIHNsaWNleFJlcXVlc3QsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0aGlzLmNvbmZpZ3VyYXRpb24ud2l0aENyZWRlbnRpYWxzLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IGhlYWRlcnMsXG4gICAgICAgICAgICAgICAgb2JzZXJ2ZTogb2JzZXJ2ZSxcbiAgICAgICAgICAgICAgICByZXBvcnRQcm9ncmVzczogcmVwb3J0UHJvZ3Jlc3NcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTbGljZXggQVBJIGZvciBncmlkLlxuICAgICAqIFxuICAgICAqIEBwYXJhbSBlbnRpdHkgZW50aXR5XG4gICAgICogQHBhcmFtIHNsaWNleFJlcXVlc3Qgc2xpY2V4UmVxdWVzdFxuICAgICAqIEBwYXJhbSByZXFJZCByZXF1ZXN0IGlkXG4gICAgICogQHBhcmFtIHNvcnQgc29ydFxuICAgICAqIEBwYXJhbSB0b2tlbiBBdXRoIFRva2VuXG4gICAgICogQHBhcmFtIG9ic2VydmUgc2V0IHdoZXRoZXIgb3Igbm90IHRvIHJldHVybiB0aGUgZGF0YSBPYnNlcnZhYmxlIGFzIHRoZSBib2R5LCByZXNwb25zZSBvciBldmVudHMuIGRlZmF1bHRzIHRvIHJldHVybmluZyB0aGUgYm9keS5cbiAgICAgKiBAcGFyYW0gcmVwb3J0UHJvZ3Jlc3MgZmxhZyB0byByZXBvcnQgcmVxdWVzdCBhbmQgcmVzcG9uc2UgcHJvZ3Jlc3MuXG4gICAgICovXG4gICAgcHVibGljIGdldFNsaWNleERhdGFMaXN0VXNpbmdQT1NUKGVudGl0eTogJ2xpY2Vuc2VlJyB8ICdhZHZlcnRpc2VyJyB8ICdjYW1wYWlnbicgfCAnc3RyYXRlZ3knIHwgJ2NyZWF0aXZlU2l6ZScgfCAnYWdncmVnYXRvcicgfCAnYXBwJyB8ICdvcycgfCAnY3JlYXRpdmUnIHwgJ2NvdW50cnknIHwgJ2NpdHknIHwgJ3ByaWNpbmcnIHwgJ3BpeGVsJyB8ICdjYW1wYWlnbk9iamVjdGl2ZScgfCAnYWR2cmVnaW9ucycgfCAnY3JlYXRpdmVTZXRzJyB8ICdjcmVhdGl2ZVNldHNUeXBlJyB8ICd2aWRlb1BsYWNlbWVudCcsIHNsaWNleFJlcXVlc3Q6IFNsaWNleFJlcXVlc3QsIHJlcUlkPzogc3RyaW5nLCBzb3J0Pzogc3RyaW5nLCB0b2tlbj86IHN0cmluZywgb2JzZXJ2ZT86ICdib2R5JywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuKTogT2JzZXJ2YWJsZTxBcGlSZXNwb25zZU9iamVjdFNsaWNleExpc3RSZXNwb25zZT47XG4gICAgcHVibGljIGdldFNsaWNleERhdGFMaXN0VXNpbmdQT1NUKGVudGl0eTogJ2xpY2Vuc2VlJyB8ICdhZHZlcnRpc2VyJyB8ICdjYW1wYWlnbicgfCAnc3RyYXRlZ3knIHwgJ2NyZWF0aXZlU2l6ZScgfCAnYWdncmVnYXRvcicgfCAnYXBwJyB8ICdvcycgfCAnY3JlYXRpdmUnIHwgJ2NvdW50cnknIHwgJ2NpdHknIHwgJ3ByaWNpbmcnIHwgJ3BpeGVsJyB8ICdjYW1wYWlnbk9iamVjdGl2ZScgfCAnYWR2cmVnaW9ucycgfCAnY3JlYXRpdmVTZXRzJyB8ICdjcmVhdGl2ZVNldHNUeXBlJyB8ICd2aWRlb1BsYWNlbWVudCcsIHNsaWNleFJlcXVlc3Q6IFNsaWNleFJlcXVlc3QsIHJlcUlkPzogc3RyaW5nLCBzb3J0Pzogc3RyaW5nLCB0b2tlbj86IHN0cmluZywgb2JzZXJ2ZT86ICdyZXNwb25zZScsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbik6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPEFwaVJlc3BvbnNlT2JqZWN0U2xpY2V4TGlzdFJlc3BvbnNlPj47XG4gICAgcHVibGljIGdldFNsaWNleERhdGFMaXN0VXNpbmdQT1NUKGVudGl0eTogJ2xpY2Vuc2VlJyB8ICdhZHZlcnRpc2VyJyB8ICdjYW1wYWlnbicgfCAnc3RyYXRlZ3knIHwgJ2NyZWF0aXZlU2l6ZScgfCAnYWdncmVnYXRvcicgfCAnYXBwJyB8ICdvcycgfCAnY3JlYXRpdmUnIHwgJ2NvdW50cnknIHwgJ2NpdHknIHwgJ3ByaWNpbmcnIHwgJ3BpeGVsJyB8ICdjYW1wYWlnbk9iamVjdGl2ZScgfCAnYWR2cmVnaW9ucycgfCAnY3JlYXRpdmVTZXRzJyB8ICdjcmVhdGl2ZVNldHNUeXBlJyB8ICd2aWRlb1BsYWNlbWVudCcsIHNsaWNleFJlcXVlc3Q6IFNsaWNleFJlcXVlc3QsIHJlcUlkPzogc3RyaW5nLCBzb3J0Pzogc3RyaW5nLCB0b2tlbj86IHN0cmluZywgb2JzZXJ2ZT86ICdldmVudHMnLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4pOiBPYnNlcnZhYmxlPEh0dHBFdmVudDxBcGlSZXNwb25zZU9iamVjdFNsaWNleExpc3RSZXNwb25zZT4+O1xuICAgIHB1YmxpYyBnZXRTbGljZXhEYXRhTGlzdFVzaW5nUE9TVChlbnRpdHk6ICdsaWNlbnNlZScgfCAnYWR2ZXJ0aXNlcicgfCAnY2FtcGFpZ24nIHwgJ3N0cmF0ZWd5JyB8ICdjcmVhdGl2ZVNpemUnIHwgJ2FnZ3JlZ2F0b3InIHwgJ2FwcCcgfCAnb3MnIHwgJ2NyZWF0aXZlJyB8ICdjb3VudHJ5JyB8ICdjaXR5JyB8ICdwcmljaW5nJyB8ICdwaXhlbCcgfCAnY2FtcGFpZ25PYmplY3RpdmUnIHwgJ2FkdnJlZ2lvbnMnIHwgJ2NyZWF0aXZlU2V0cycgfCAnY3JlYXRpdmVTZXRzVHlwZScgfCAndmlkZW9QbGFjZW1lbnQnLCBzbGljZXhSZXF1ZXN0OiBTbGljZXhSZXF1ZXN0LCByZXFJZD86IHN0cmluZywgc29ydD86IHN0cmluZywgdG9rZW4/OiBzdHJpbmcsIG9ic2VydmU6IGFueSA9ICdib2R5JywgcmVwb3J0UHJvZ3Jlc3M6IGJvb2xlYW4gPSBmYWxzZSApOiBPYnNlcnZhYmxlPGFueT4ge1xuXG4gICAgICAgIGlmIChlbnRpdHkgPT09IG51bGwgfHwgZW50aXR5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWlyZWQgcGFyYW1ldGVyIGVudGl0eSB3YXMgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBjYWxsaW5nIGdldFNsaWNleERhdGFMaXN0VXNpbmdQT1NULicpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNsaWNleFJlcXVlc3QgPT09IG51bGwgfHwgc2xpY2V4UmVxdWVzdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcXVpcmVkIHBhcmFtZXRlciBzbGljZXhSZXF1ZXN0IHdhcyBudWxsIG9yIHVuZGVmaW5lZCB3aGVuIGNhbGxpbmcgZ2V0U2xpY2V4RGF0YUxpc3RVc2luZ1BPU1QuJyk7XG4gICAgICAgIH1cblxuXG5cblxuICAgICAgICBsZXQgcXVlcnlQYXJhbWV0ZXJzID0gbmV3IEh0dHBQYXJhbXMoe2VuY29kZXI6IG5ldyBDdXN0b21IdHRwVXJsRW5jb2RpbmdDb2RlYygpfSk7XG4gICAgICAgIGlmIChzb3J0ICE9PSB1bmRlZmluZWQgJiYgc29ydCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgcXVlcnlQYXJhbWV0ZXJzID0gcXVlcnlQYXJhbWV0ZXJzLnNldCgnc29ydCcsIDxhbnk+c29ydCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgaGVhZGVycyA9IHRoaXMuZGVmYXVsdEhlYWRlcnM7XG4gICAgICAgIGlmIChyZXFJZCAhPT0gdW5kZWZpbmVkICYmIHJlcUlkICE9PSBudWxsKSB7XG4gICAgICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoJ3JlcUlkJywgU3RyaW5nKHJlcUlkKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRva2VuICE9PSB1bmRlZmluZWQgJiYgdG9rZW4gIT09IG51bGwpIHtcbiAgICAgICAgICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldCgndG9rZW4nLCBTdHJpbmcodG9rZW4pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHRvIGRldGVybWluZSB0aGUgQWNjZXB0IGhlYWRlclxuICAgICAgICBsZXQgaHR0cEhlYWRlckFjY2VwdHM6IHN0cmluZ1tdID0gW1xuICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nXG4gICAgICAgIF07XG4gICAgICAgIGNvbnN0IGh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZDogc3RyaW5nIHwgdW5kZWZpbmVkID0gdGhpcy5jb25maWd1cmF0aW9uLnNlbGVjdEhlYWRlckFjY2VwdChodHRwSGVhZGVyQWNjZXB0cyk7XG4gICAgICAgIGlmIChodHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoJ0FjY2VwdCcsIGh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyB0byBkZXRlcm1pbmUgdGhlIENvbnRlbnQtVHlwZSBoZWFkZXJcbiAgICAgICAgY29uc3QgY29uc3VtZXM6IHN0cmluZ1tdID0gW1xuICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nXG4gICAgICAgIF07XG4gICAgICAgIGNvbnN0IGh0dHBDb250ZW50VHlwZVNlbGVjdGVkOiBzdHJpbmcgfCB1bmRlZmluZWQgPSB0aGlzLmNvbmZpZ3VyYXRpb24uc2VsZWN0SGVhZGVyQ29udGVudFR5cGUoY29uc3VtZXMpO1xuICAgICAgICBpZiAoaHR0cENvbnRlbnRUeXBlU2VsZWN0ZWQgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoJ0NvbnRlbnQtVHlwZScsIGh0dHBDb250ZW50VHlwZVNlbGVjdGVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucG9zdDxBcGlSZXNwb25zZU9iamVjdFNsaWNleExpc3RSZXNwb25zZT4oYCR7dGhpcy5iYXNlUGF0aH0vdjIvYXBpL3NsaWNleC9saXN0LyR7ZW5jb2RlVVJJQ29tcG9uZW50KFN0cmluZyhlbnRpdHkpKX1gLFxuICAgICAgICAgICAgc2xpY2V4UmVxdWVzdCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBwYXJhbXM6IHF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRoaXMuY29uZmlndXJhdGlvbi53aXRoQ3JlZGVudGlhbHMsXG4gICAgICAgICAgICAgICAgaGVhZGVyczogaGVhZGVycyxcbiAgICAgICAgICAgICAgICBvYnNlcnZlOiBvYnNlcnZlLFxuICAgICAgICAgICAgICAgIHJlcG9ydFByb2dyZXNzOiByZXBvcnRQcm9ncmVzc1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNsaWNleCBBUEkgZm9yIGdyaWQgd2l0aCBjb21wYXJlLlxuICAgICAqIFxuICAgICAqIEBwYXJhbSBlbnRpdHkgZW50aXR5XG4gICAgICogQHBhcmFtIHNsaWNleFJlcXVlc3Qgc2xpY2V4UmVxdWVzdFxuICAgICAqIEBwYXJhbSByZXFJZCByZXF1ZXN0IGlkXG4gICAgICogQHBhcmFtIHNvcnQgc29ydFxuICAgICAqIEBwYXJhbSB0b2tlbiBBdXRoIFRva2VuXG4gICAgICogQHBhcmFtIG9ic2VydmUgc2V0IHdoZXRoZXIgb3Igbm90IHRvIHJldHVybiB0aGUgZGF0YSBPYnNlcnZhYmxlIGFzIHRoZSBib2R5LCByZXNwb25zZSBvciBldmVudHMuIGRlZmF1bHRzIHRvIHJldHVybmluZyB0aGUgYm9keS5cbiAgICAgKiBAcGFyYW0gcmVwb3J0UHJvZ3Jlc3MgZmxhZyB0byByZXBvcnQgcmVxdWVzdCBhbmQgcmVzcG9uc2UgcHJvZ3Jlc3MuXG4gICAgICovXG4gICAgcHVibGljIGdldFNsaWNleERhdGFMaXN0V2l0aENvbXBhcmVVc2luZ1BPU1QoZW50aXR5OiAnbGljZW5zZWUnIHwgJ2FkdmVydGlzZXInIHwgJ2NhbXBhaWduJyB8ICdzdHJhdGVneScgfCAnY3JlYXRpdmVTaXplJyB8ICdhZ2dyZWdhdG9yJyB8ICdhcHAnIHwgJ29zJyB8ICdjcmVhdGl2ZScgfCAnY291bnRyeScgfCAnY2l0eScgfCAncHJpY2luZycgfCAncGl4ZWwnIHwgJ2NhbXBhaWduT2JqZWN0aXZlJyB8ICdhZHZyZWdpb25zJyB8ICdjcmVhdGl2ZVNldHMnIHwgJ2NyZWF0aXZlU2V0c1R5cGUnIHwgJ3ZpZGVvUGxhY2VtZW50Jywgc2xpY2V4UmVxdWVzdDogU2xpY2V4UmVxdWVzdCwgcmVxSWQ/OiBzdHJpbmcsIHNvcnQ/OiBzdHJpbmcsIHRva2VuPzogc3RyaW5nLCBvYnNlcnZlPzogJ2JvZHknLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4pOiBPYnNlcnZhYmxlPEFwaVJlc3BvbnNlT2JqZWN0U2xpY2V4TGlzdFJlc3BvbnNlPjtcbiAgICBwdWJsaWMgZ2V0U2xpY2V4RGF0YUxpc3RXaXRoQ29tcGFyZVVzaW5nUE9TVChlbnRpdHk6ICdsaWNlbnNlZScgfCAnYWR2ZXJ0aXNlcicgfCAnY2FtcGFpZ24nIHwgJ3N0cmF0ZWd5JyB8ICdjcmVhdGl2ZVNpemUnIHwgJ2FnZ3JlZ2F0b3InIHwgJ2FwcCcgfCAnb3MnIHwgJ2NyZWF0aXZlJyB8ICdjb3VudHJ5JyB8ICdjaXR5JyB8ICdwcmljaW5nJyB8ICdwaXhlbCcgfCAnY2FtcGFpZ25PYmplY3RpdmUnIHwgJ2FkdnJlZ2lvbnMnIHwgJ2NyZWF0aXZlU2V0cycgfCAnY3JlYXRpdmVTZXRzVHlwZScgfCAndmlkZW9QbGFjZW1lbnQnLCBzbGljZXhSZXF1ZXN0OiBTbGljZXhSZXF1ZXN0LCByZXFJZD86IHN0cmluZywgc29ydD86IHN0cmluZywgdG9rZW4/OiBzdHJpbmcsIG9ic2VydmU/OiAncmVzcG9uc2UnLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4pOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxBcGlSZXNwb25zZU9iamVjdFNsaWNleExpc3RSZXNwb25zZT4+O1xuICAgIHB1YmxpYyBnZXRTbGljZXhEYXRhTGlzdFdpdGhDb21wYXJlVXNpbmdQT1NUKGVudGl0eTogJ2xpY2Vuc2VlJyB8ICdhZHZlcnRpc2VyJyB8ICdjYW1wYWlnbicgfCAnc3RyYXRlZ3knIHwgJ2NyZWF0aXZlU2l6ZScgfCAnYWdncmVnYXRvcicgfCAnYXBwJyB8ICdvcycgfCAnY3JlYXRpdmUnIHwgJ2NvdW50cnknIHwgJ2NpdHknIHwgJ3ByaWNpbmcnIHwgJ3BpeGVsJyB8ICdjYW1wYWlnbk9iamVjdGl2ZScgfCAnYWR2cmVnaW9ucycgfCAnY3JlYXRpdmVTZXRzJyB8ICdjcmVhdGl2ZVNldHNUeXBlJyB8ICd2aWRlb1BsYWNlbWVudCcsIHNsaWNleFJlcXVlc3Q6IFNsaWNleFJlcXVlc3QsIHJlcUlkPzogc3RyaW5nLCBzb3J0Pzogc3RyaW5nLCB0b2tlbj86IHN0cmluZywgb2JzZXJ2ZT86ICdldmVudHMnLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4pOiBPYnNlcnZhYmxlPEh0dHBFdmVudDxBcGlSZXNwb25zZU9iamVjdFNsaWNleExpc3RSZXNwb25zZT4+O1xuICAgIHB1YmxpYyBnZXRTbGljZXhEYXRhTGlzdFdpdGhDb21wYXJlVXNpbmdQT1NUKGVudGl0eTogJ2xpY2Vuc2VlJyB8ICdhZHZlcnRpc2VyJyB8ICdjYW1wYWlnbicgfCAnc3RyYXRlZ3knIHwgJ2NyZWF0aXZlU2l6ZScgfCAnYWdncmVnYXRvcicgfCAnYXBwJyB8ICdvcycgfCAnY3JlYXRpdmUnIHwgJ2NvdW50cnknIHwgJ2NpdHknIHwgJ3ByaWNpbmcnIHwgJ3BpeGVsJyB8ICdjYW1wYWlnbk9iamVjdGl2ZScgfCAnYWR2cmVnaW9ucycgfCAnY3JlYXRpdmVTZXRzJyB8ICdjcmVhdGl2ZVNldHNUeXBlJyB8ICd2aWRlb1BsYWNlbWVudCcsIHNsaWNleFJlcXVlc3Q6IFNsaWNleFJlcXVlc3QsIHJlcUlkPzogc3RyaW5nLCBzb3J0Pzogc3RyaW5nLCB0b2tlbj86IHN0cmluZywgb2JzZXJ2ZTogYW55ID0gJ2JvZHknLCByZXBvcnRQcm9ncmVzczogYm9vbGVhbiA9IGZhbHNlICk6IE9ic2VydmFibGU8YW55PiB7XG5cbiAgICAgICAgaWYgKGVudGl0eSA9PT0gbnVsbCB8fCBlbnRpdHkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXF1aXJlZCBwYXJhbWV0ZXIgZW50aXR5IHdhcyBudWxsIG9yIHVuZGVmaW5lZCB3aGVuIGNhbGxpbmcgZ2V0U2xpY2V4RGF0YUxpc3RXaXRoQ29tcGFyZVVzaW5nUE9TVC4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzbGljZXhSZXF1ZXN0ID09PSBudWxsIHx8IHNsaWNleFJlcXVlc3QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXF1aXJlZCBwYXJhbWV0ZXIgc2xpY2V4UmVxdWVzdCB3YXMgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBjYWxsaW5nIGdldFNsaWNleERhdGFMaXN0V2l0aENvbXBhcmVVc2luZ1BPU1QuJyk7XG4gICAgICAgIH1cblxuXG5cblxuICAgICAgICBsZXQgcXVlcnlQYXJhbWV0ZXJzID0gbmV3IEh0dHBQYXJhbXMoe2VuY29kZXI6IG5ldyBDdXN0b21IdHRwVXJsRW5jb2RpbmdDb2RlYygpfSk7XG4gICAgICAgIGlmIChzb3J0ICE9PSB1bmRlZmluZWQgJiYgc29ydCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgcXVlcnlQYXJhbWV0ZXJzID0gcXVlcnlQYXJhbWV0ZXJzLnNldCgnc29ydCcsIDxhbnk+c29ydCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgaGVhZGVycyA9IHRoaXMuZGVmYXVsdEhlYWRlcnM7XG4gICAgICAgIGlmIChyZXFJZCAhPT0gdW5kZWZpbmVkICYmIHJlcUlkICE9PSBudWxsKSB7XG4gICAgICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoJ3JlcUlkJywgU3RyaW5nKHJlcUlkKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRva2VuICE9PSB1bmRlZmluZWQgJiYgdG9rZW4gIT09IG51bGwpIHtcbiAgICAgICAgICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldCgndG9rZW4nLCBTdHJpbmcodG9rZW4pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHRvIGRldGVybWluZSB0aGUgQWNjZXB0IGhlYWRlclxuICAgICAgICBsZXQgaHR0cEhlYWRlckFjY2VwdHM6IHN0cmluZ1tdID0gW1xuICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nXG4gICAgICAgIF07XG4gICAgICAgIGNvbnN0IGh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZDogc3RyaW5nIHwgdW5kZWZpbmVkID0gdGhpcy5jb25maWd1cmF0aW9uLnNlbGVjdEhlYWRlckFjY2VwdChodHRwSGVhZGVyQWNjZXB0cyk7XG4gICAgICAgIGlmIChodHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoJ0FjY2VwdCcsIGh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyB0byBkZXRlcm1pbmUgdGhlIENvbnRlbnQtVHlwZSBoZWFkZXJcbiAgICAgICAgY29uc3QgY29uc3VtZXM6IHN0cmluZ1tdID0gW1xuICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nXG4gICAgICAgIF07XG4gICAgICAgIGNvbnN0IGh0dHBDb250ZW50VHlwZVNlbGVjdGVkOiBzdHJpbmcgfCB1bmRlZmluZWQgPSB0aGlzLmNvbmZpZ3VyYXRpb24uc2VsZWN0SGVhZGVyQ29udGVudFR5cGUoY29uc3VtZXMpO1xuICAgICAgICBpZiAoaHR0cENvbnRlbnRUeXBlU2VsZWN0ZWQgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoJ0NvbnRlbnQtVHlwZScsIGh0dHBDb250ZW50VHlwZVNlbGVjdGVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucG9zdDxBcGlSZXNwb25zZU9iamVjdFNsaWNleExpc3RSZXNwb25zZT4oYCR7dGhpcy5iYXNlUGF0aH0vdjIvYXBpL3NsaWNleC9saXN0L2NvbXBhcmUvJHtlbmNvZGVVUklDb21wb25lbnQoU3RyaW5nKGVudGl0eSkpfWAsXG4gICAgICAgICAgICBzbGljZXhSZXF1ZXN0LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHBhcmFtczogcXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczogdGhpcy5jb25maWd1cmF0aW9uLndpdGhDcmVkZW50aWFscyxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiBoZWFkZXJzLFxuICAgICAgICAgICAgICAgIG9ic2VydmU6IG9ic2VydmUsXG4gICAgICAgICAgICAgICAgcmVwb3J0UHJvZ3Jlc3M6IHJlcG9ydFByb2dyZXNzXG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2xpY2V4IEFQSSBmb3IgZ3JpZCBkZXRhaWxzLlxuICAgICAqIFxuICAgICAqIEBwYXJhbSBlbnRpdHkgZW50aXR5XG4gICAgICogQHBhcmFtIHNsaWNleFJlcXVlc3RFeHQgc2xpY2V4UmVxdWVzdEV4dFxuICAgICAqIEBwYXJhbSByZXFJZCByZXF1ZXN0IGlkXG4gICAgICogQHBhcmFtIHRva2VuIEF1dGggVG9rZW5cbiAgICAgKiBAcGFyYW0gb2JzZXJ2ZSBzZXQgd2hldGhlciBvciBub3QgdG8gcmV0dXJuIHRoZSBkYXRhIE9ic2VydmFibGUgYXMgdGhlIGJvZHksIHJlc3BvbnNlIG9yIGV2ZW50cy4gZGVmYXVsdHMgdG8gcmV0dXJuaW5nIHRoZSBib2R5LlxuICAgICAqIEBwYXJhbSByZXBvcnRQcm9ncmVzcyBmbGFnIHRvIHJlcG9ydCByZXF1ZXN0IGFuZCByZXNwb25zZSBwcm9ncmVzcy5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0U2xpY2V4R3JpZERldGFpbHNVc2luZ1BPU1QoZW50aXR5OiAnbGljZW5zZWUnIHwgJ2FkdmVydGlzZXInIHwgJ2NhbXBhaWduJyB8ICdzdHJhdGVneScgfCAnY3JlYXRpdmVTaXplJyB8ICdhZ2dyZWdhdG9yJyB8ICdhcHAnIHwgJ29zJyB8ICdjcmVhdGl2ZScgfCAnY291bnRyeScgfCAnY2l0eScgfCAncHJpY2luZycgfCAncGl4ZWwnIHwgJ2NhbXBhaWduT2JqZWN0aXZlJyB8ICdhZHZyZWdpb25zJyB8ICdjcmVhdGl2ZVNldHMnIHwgJ2NyZWF0aXZlU2V0c1R5cGUnIHwgJ3ZpZGVvUGxhY2VtZW50Jywgc2xpY2V4UmVxdWVzdEV4dDogU2xpY2V4UmVxdWVzdEV4dGVuZGVkLCByZXFJZD86IHN0cmluZywgdG9rZW4/OiBzdHJpbmcsIG9ic2VydmU/OiAnYm9keScsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbik6IE9ic2VydmFibGU8QXBpUmVzcG9uc2VPYmplY3RTbGljZXhMaXN0UmVzcG9uc2U+O1xuICAgIHB1YmxpYyBnZXRTbGljZXhHcmlkRGV0YWlsc1VzaW5nUE9TVChlbnRpdHk6ICdsaWNlbnNlZScgfCAnYWR2ZXJ0aXNlcicgfCAnY2FtcGFpZ24nIHwgJ3N0cmF0ZWd5JyB8ICdjcmVhdGl2ZVNpemUnIHwgJ2FnZ3JlZ2F0b3InIHwgJ2FwcCcgfCAnb3MnIHwgJ2NyZWF0aXZlJyB8ICdjb3VudHJ5JyB8ICdjaXR5JyB8ICdwcmljaW5nJyB8ICdwaXhlbCcgfCAnY2FtcGFpZ25PYmplY3RpdmUnIHwgJ2FkdnJlZ2lvbnMnIHwgJ2NyZWF0aXZlU2V0cycgfCAnY3JlYXRpdmVTZXRzVHlwZScgfCAndmlkZW9QbGFjZW1lbnQnLCBzbGljZXhSZXF1ZXN0RXh0OiBTbGljZXhSZXF1ZXN0RXh0ZW5kZWQsIHJlcUlkPzogc3RyaW5nLCB0b2tlbj86IHN0cmluZywgb2JzZXJ2ZT86ICdyZXNwb25zZScsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbik6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPEFwaVJlc3BvbnNlT2JqZWN0U2xpY2V4TGlzdFJlc3BvbnNlPj47XG4gICAgcHVibGljIGdldFNsaWNleEdyaWREZXRhaWxzVXNpbmdQT1NUKGVudGl0eTogJ2xpY2Vuc2VlJyB8ICdhZHZlcnRpc2VyJyB8ICdjYW1wYWlnbicgfCAnc3RyYXRlZ3knIHwgJ2NyZWF0aXZlU2l6ZScgfCAnYWdncmVnYXRvcicgfCAnYXBwJyB8ICdvcycgfCAnY3JlYXRpdmUnIHwgJ2NvdW50cnknIHwgJ2NpdHknIHwgJ3ByaWNpbmcnIHwgJ3BpeGVsJyB8ICdjYW1wYWlnbk9iamVjdGl2ZScgfCAnYWR2cmVnaW9ucycgfCAnY3JlYXRpdmVTZXRzJyB8ICdjcmVhdGl2ZVNldHNUeXBlJyB8ICd2aWRlb1BsYWNlbWVudCcsIHNsaWNleFJlcXVlc3RFeHQ6IFNsaWNleFJlcXVlc3RFeHRlbmRlZCwgcmVxSWQ/OiBzdHJpbmcsIHRva2VuPzogc3RyaW5nLCBvYnNlcnZlPzogJ2V2ZW50cycsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbik6IE9ic2VydmFibGU8SHR0cEV2ZW50PEFwaVJlc3BvbnNlT2JqZWN0U2xpY2V4TGlzdFJlc3BvbnNlPj47XG4gICAgcHVibGljIGdldFNsaWNleEdyaWREZXRhaWxzVXNpbmdQT1NUKGVudGl0eTogJ2xpY2Vuc2VlJyB8ICdhZHZlcnRpc2VyJyB8ICdjYW1wYWlnbicgfCAnc3RyYXRlZ3knIHwgJ2NyZWF0aXZlU2l6ZScgfCAnYWdncmVnYXRvcicgfCAnYXBwJyB8ICdvcycgfCAnY3JlYXRpdmUnIHwgJ2NvdW50cnknIHwgJ2NpdHknIHwgJ3ByaWNpbmcnIHwgJ3BpeGVsJyB8ICdjYW1wYWlnbk9iamVjdGl2ZScgfCAnYWR2cmVnaW9ucycgfCAnY3JlYXRpdmVTZXRzJyB8ICdjcmVhdGl2ZVNldHNUeXBlJyB8ICd2aWRlb1BsYWNlbWVudCcsIHNsaWNleFJlcXVlc3RFeHQ6IFNsaWNleFJlcXVlc3RFeHRlbmRlZCwgcmVxSWQ/OiBzdHJpbmcsIHRva2VuPzogc3RyaW5nLCBvYnNlcnZlOiBhbnkgPSAnYm9keScsIHJlcG9ydFByb2dyZXNzOiBib29sZWFuID0gZmFsc2UgKTogT2JzZXJ2YWJsZTxhbnk+IHtcblxuICAgICAgICBpZiAoZW50aXR5ID09PSBudWxsIHx8IGVudGl0eSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcXVpcmVkIHBhcmFtZXRlciBlbnRpdHkgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyBnZXRTbGljZXhHcmlkRGV0YWlsc1VzaW5nUE9TVC4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzbGljZXhSZXF1ZXN0RXh0ID09PSBudWxsIHx8IHNsaWNleFJlcXVlc3RFeHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXF1aXJlZCBwYXJhbWV0ZXIgc2xpY2V4UmVxdWVzdEV4dCB3YXMgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBjYWxsaW5nIGdldFNsaWNleEdyaWREZXRhaWxzVXNpbmdQT1NULicpO1xuICAgICAgICB9XG5cblxuXG4gICAgICAgIGxldCBoZWFkZXJzID0gdGhpcy5kZWZhdWx0SGVhZGVycztcbiAgICAgICAgaWYgKHJlcUlkICE9PSB1bmRlZmluZWQgJiYgcmVxSWQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldCgncmVxSWQnLCBTdHJpbmcocmVxSWQpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodG9rZW4gIT09IHVuZGVmaW5lZCAmJiB0b2tlbiAhPT0gbnVsbCkge1xuICAgICAgICAgICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KCd0b2tlbicsIFN0cmluZyh0b2tlbikpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gdG8gZGV0ZXJtaW5lIHRoZSBBY2NlcHQgaGVhZGVyXG4gICAgICAgIGxldCBodHRwSGVhZGVyQWNjZXB0czogc3RyaW5nW10gPSBbXG4gICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbidcbiAgICAgICAgXTtcbiAgICAgICAgY29uc3QgaHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkOiBzdHJpbmcgfCB1bmRlZmluZWQgPSB0aGlzLmNvbmZpZ3VyYXRpb24uc2VsZWN0SGVhZGVyQWNjZXB0KGh0dHBIZWFkZXJBY2NlcHRzKTtcbiAgICAgICAgaWYgKGh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldCgnQWNjZXB0JywgaHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHRvIGRldGVybWluZSB0aGUgQ29udGVudC1UeXBlIGhlYWRlclxuICAgICAgICBjb25zdCBjb25zdW1lczogc3RyaW5nW10gPSBbXG4gICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbidcbiAgICAgICAgXTtcbiAgICAgICAgY29uc3QgaHR0cENvbnRlbnRUeXBlU2VsZWN0ZWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHRoaXMuY29uZmlndXJhdGlvbi5zZWxlY3RIZWFkZXJDb250ZW50VHlwZShjb25zdW1lcyk7XG4gICAgICAgIGlmIChodHRwQ29udGVudFR5cGVTZWxlY3RlZCAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldCgnQ29udGVudC1UeXBlJywgaHR0cENvbnRlbnRUeXBlU2VsZWN0ZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0PEFwaVJlc3BvbnNlT2JqZWN0U2xpY2V4TGlzdFJlc3BvbnNlPihgJHt0aGlzLmJhc2VQYXRofS92Mi9hcGkvc2xpY2V4L2xpc3QvZGV0YWlscy8ke2VuY29kZVVSSUNvbXBvbmVudChTdHJpbmcoZW50aXR5KSl9YCxcbiAgICAgICAgICAgIHNsaWNleFJlcXVlc3RFeHQsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0aGlzLmNvbmZpZ3VyYXRpb24ud2l0aENyZWRlbnRpYWxzLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IGhlYWRlcnMsXG4gICAgICAgICAgICAgICAgb2JzZXJ2ZTogb2JzZXJ2ZSxcbiAgICAgICAgICAgICAgICByZXBvcnRQcm9ncmVzczogcmVwb3J0UHJvZ3Jlc3NcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTbGljZXggQVBJIGZvciBMaXN0IEV4cG9ydC5cbiAgICAgKiBcbiAgICAgKiBAcGFyYW0gZW50aXR5IGVudGl0eVxuICAgICAqIEBwYXJhbSBzbGljZXhSZXF1ZXN0IHNsaWNleFJlcXVlc3RcbiAgICAgKiBAcGFyYW0gcmVxSWQgcmVxdWVzdCBpZFxuICAgICAqIEBwYXJhbSBzb3J0IHNvcnRcbiAgICAgKiBAcGFyYW0gdG9rZW4gQXV0aCBUb2tlblxuICAgICAqIEBwYXJhbSBvYnNlcnZlIHNldCB3aGV0aGVyIG9yIG5vdCB0byByZXR1cm4gdGhlIGRhdGEgT2JzZXJ2YWJsZSBhcyB0aGUgYm9keSwgcmVzcG9uc2Ugb3IgZXZlbnRzLiBkZWZhdWx0cyB0byByZXR1cm5pbmcgdGhlIGJvZHkuXG4gICAgICogQHBhcmFtIHJlcG9ydFByb2dyZXNzIGZsYWcgdG8gcmVwb3J0IHJlcXVlc3QgYW5kIHJlc3BvbnNlIHByb2dyZXNzLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRTbGljZXhMaXN0RGF0YUZvckV4cG9ydFVzaW5nUE9TVChlbnRpdHk6ICdsaWNlbnNlZScgfCAnYWR2ZXJ0aXNlcicgfCAnY2FtcGFpZ24nIHwgJ3N0cmF0ZWd5JyB8ICdjcmVhdGl2ZVNpemUnIHwgJ2FnZ3JlZ2F0b3InIHwgJ2FwcCcgfCAnb3MnIHwgJ2NyZWF0aXZlJyB8ICdjb3VudHJ5JyB8ICdjaXR5JyB8ICdwcmljaW5nJyB8ICdwaXhlbCcgfCAnY2FtcGFpZ25PYmplY3RpdmUnIHwgJ2FkdnJlZ2lvbnMnIHwgJ2NyZWF0aXZlU2V0cycgfCAnY3JlYXRpdmVTZXRzVHlwZScgfCAndmlkZW9QbGFjZW1lbnQnLCBzbGljZXhSZXF1ZXN0OiBTbGljZXhSZXF1ZXN0LCByZXFJZD86IHN0cmluZywgc29ydD86IHN0cmluZywgdG9rZW4/OiBzdHJpbmcsIG9ic2VydmU/OiAnYm9keScsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbik6IE9ic2VydmFibGU8RmlsZURvd25sb2FkUmVzcG9uc2U+O1xuICAgIHB1YmxpYyBnZXRTbGljZXhMaXN0RGF0YUZvckV4cG9ydFVzaW5nUE9TVChlbnRpdHk6ICdsaWNlbnNlZScgfCAnYWR2ZXJ0aXNlcicgfCAnY2FtcGFpZ24nIHwgJ3N0cmF0ZWd5JyB8ICdjcmVhdGl2ZVNpemUnIHwgJ2FnZ3JlZ2F0b3InIHwgJ2FwcCcgfCAnb3MnIHwgJ2NyZWF0aXZlJyB8ICdjb3VudHJ5JyB8ICdjaXR5JyB8ICdwcmljaW5nJyB8ICdwaXhlbCcgfCAnY2FtcGFpZ25PYmplY3RpdmUnIHwgJ2FkdnJlZ2lvbnMnIHwgJ2NyZWF0aXZlU2V0cycgfCAnY3JlYXRpdmVTZXRzVHlwZScgfCAndmlkZW9QbGFjZW1lbnQnLCBzbGljZXhSZXF1ZXN0OiBTbGljZXhSZXF1ZXN0LCByZXFJZD86IHN0cmluZywgc29ydD86IHN0cmluZywgdG9rZW4/OiBzdHJpbmcsIG9ic2VydmU/OiAncmVzcG9uc2UnLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4pOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxGaWxlRG93bmxvYWRSZXNwb25zZT4+O1xuICAgIHB1YmxpYyBnZXRTbGljZXhMaXN0RGF0YUZvckV4cG9ydFVzaW5nUE9TVChlbnRpdHk6ICdsaWNlbnNlZScgfCAnYWR2ZXJ0aXNlcicgfCAnY2FtcGFpZ24nIHwgJ3N0cmF0ZWd5JyB8ICdjcmVhdGl2ZVNpemUnIHwgJ2FnZ3JlZ2F0b3InIHwgJ2FwcCcgfCAnb3MnIHwgJ2NyZWF0aXZlJyB8ICdjb3VudHJ5JyB8ICdjaXR5JyB8ICdwcmljaW5nJyB8ICdwaXhlbCcgfCAnY2FtcGFpZ25PYmplY3RpdmUnIHwgJ2FkdnJlZ2lvbnMnIHwgJ2NyZWF0aXZlU2V0cycgfCAnY3JlYXRpdmVTZXRzVHlwZScgfCAndmlkZW9QbGFjZW1lbnQnLCBzbGljZXhSZXF1ZXN0OiBTbGljZXhSZXF1ZXN0LCByZXFJZD86IHN0cmluZywgc29ydD86IHN0cmluZywgdG9rZW4/OiBzdHJpbmcsIG9ic2VydmU/OiAnZXZlbnRzJywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuKTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8RmlsZURvd25sb2FkUmVzcG9uc2U+PjtcbiAgICBwdWJsaWMgZ2V0U2xpY2V4TGlzdERhdGFGb3JFeHBvcnRVc2luZ1BPU1QoZW50aXR5OiAnbGljZW5zZWUnIHwgJ2FkdmVydGlzZXInIHwgJ2NhbXBhaWduJyB8ICdzdHJhdGVneScgfCAnY3JlYXRpdmVTaXplJyB8ICdhZ2dyZWdhdG9yJyB8ICdhcHAnIHwgJ29zJyB8ICdjcmVhdGl2ZScgfCAnY291bnRyeScgfCAnY2l0eScgfCAncHJpY2luZycgfCAncGl4ZWwnIHwgJ2NhbXBhaWduT2JqZWN0aXZlJyB8ICdhZHZyZWdpb25zJyB8ICdjcmVhdGl2ZVNldHMnIHwgJ2NyZWF0aXZlU2V0c1R5cGUnIHwgJ3ZpZGVvUGxhY2VtZW50Jywgc2xpY2V4UmVxdWVzdDogU2xpY2V4UmVxdWVzdCwgcmVxSWQ/OiBzdHJpbmcsIHNvcnQ/OiBzdHJpbmcsIHRva2VuPzogc3RyaW5nLCBvYnNlcnZlOiBhbnkgPSAnYm9keScsIHJlcG9ydFByb2dyZXNzOiBib29sZWFuID0gZmFsc2UgKTogT2JzZXJ2YWJsZTxhbnk+IHtcblxuICAgICAgICBpZiAoZW50aXR5ID09PSBudWxsIHx8IGVudGl0eSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcXVpcmVkIHBhcmFtZXRlciBlbnRpdHkgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyBnZXRTbGljZXhMaXN0RGF0YUZvckV4cG9ydFVzaW5nUE9TVC4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzbGljZXhSZXF1ZXN0ID09PSBudWxsIHx8IHNsaWNleFJlcXVlc3QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXF1aXJlZCBwYXJhbWV0ZXIgc2xpY2V4UmVxdWVzdCB3YXMgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBjYWxsaW5nIGdldFNsaWNleExpc3REYXRhRm9yRXhwb3J0VXNpbmdQT1NULicpO1xuICAgICAgICB9XG5cblxuXG5cbiAgICAgICAgbGV0IHF1ZXJ5UGFyYW1ldGVycyA9IG5ldyBIdHRwUGFyYW1zKHtlbmNvZGVyOiBuZXcgQ3VzdG9tSHR0cFVybEVuY29kaW5nQ29kZWMoKX0pO1xuICAgICAgICBpZiAoc29ydCAhPT0gdW5kZWZpbmVkICYmIHNvcnQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1ldGVycyA9IHF1ZXJ5UGFyYW1ldGVycy5zZXQoJ3NvcnQnLCA8YW55PnNvcnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGhlYWRlcnMgPSB0aGlzLmRlZmF1bHRIZWFkZXJzO1xuICAgICAgICBpZiAocmVxSWQgIT09IHVuZGVmaW5lZCAmJiByZXFJZCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KCdyZXFJZCcsIFN0cmluZyhyZXFJZCkpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0b2tlbiAhPT0gdW5kZWZpbmVkICYmIHRva2VuICE9PSBudWxsKSB7XG4gICAgICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoJ3Rva2VuJywgU3RyaW5nKHRva2VuKSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyB0byBkZXRlcm1pbmUgdGhlIEFjY2VwdCBoZWFkZXJcbiAgICAgICAgbGV0IGh0dHBIZWFkZXJBY2NlcHRzOiBzdHJpbmdbXSA9IFtcbiAgICAgICAgICAgICdhcHBsaWNhdGlvbi9qc29uJ1xuICAgICAgICBdO1xuICAgICAgICBjb25zdCBodHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHRoaXMuY29uZmlndXJhdGlvbi5zZWxlY3RIZWFkZXJBY2NlcHQoaHR0cEhlYWRlckFjY2VwdHMpO1xuICAgICAgICBpZiAoaHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KCdBY2NlcHQnLCBodHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gdG8gZGV0ZXJtaW5lIHRoZSBDb250ZW50LVR5cGUgaGVhZGVyXG4gICAgICAgIGNvbnN0IGNvbnN1bWVzOiBzdHJpbmdbXSA9IFtcbiAgICAgICAgICAgICdhcHBsaWNhdGlvbi9qc29uJ1xuICAgICAgICBdO1xuICAgICAgICBjb25zdCBodHRwQ29udGVudFR5cGVTZWxlY3RlZDogc3RyaW5nIHwgdW5kZWZpbmVkID0gdGhpcy5jb25maWd1cmF0aW9uLnNlbGVjdEhlYWRlckNvbnRlbnRUeXBlKGNvbnN1bWVzKTtcbiAgICAgICAgaWYgKGh0dHBDb250ZW50VHlwZVNlbGVjdGVkICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KCdDb250ZW50LVR5cGUnLCBodHRwQ29udGVudFR5cGVTZWxlY3RlZCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBvc3Q8RmlsZURvd25sb2FkUmVzcG9uc2U+KGAke3RoaXMuYmFzZVBhdGh9L3YyL2FwaS9zbGljZXgvbGlzdC9jc3YvJHtlbmNvZGVVUklDb21wb25lbnQoU3RyaW5nKGVudGl0eSkpfWAsXG4gICAgICAgICAgICBzbGljZXhSZXF1ZXN0LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHBhcmFtczogcXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczogdGhpcy5jb25maWd1cmF0aW9uLndpdGhDcmVkZW50aWFscyxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiBoZWFkZXJzLFxuICAgICAgICAgICAgICAgIG9ic2VydmU6IG9ic2VydmUsXG4gICAgICAgICAgICAgICAgcmVwb3J0UHJvZ3Jlc3M6IHJlcG9ydFByb2dyZXNzXG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfVxuXG59XG4iXX0=
276
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xpY2VYQ29udHJvbGxlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHJldnh1aS9hcGktY2xpZW50cy10cy8iLCJzb3VyY2VzIjpbImFwaS9zbGljZVhDb250cm9sbGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7R0FVRztBQUNILHVEQUF1RDs7QUFFdkQsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQTJCLGVBQWUsQ0FBQztBQUNsRixPQUFPLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQ25DLFlBQVksRUFBRSxTQUFTLEVBQUUsTUFBZ0Msc0JBQXNCLENBQUM7QUFDekYsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQTZCLFlBQVksQ0FBQztBQVUvRSxPQUFPLEVBQUUsU0FBUyxFQUFzQixNQUEwQixjQUFjLENBQUM7QUFDakYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUEwQyxrQkFBa0IsQ0FBQztBQUlyRjtJQU1JLGlDQUFzQixVQUFzQixFQUFnQyxRQUFnQixFQUFjLGFBQTRCO1FBQWhILGVBQVUsR0FBVixVQUFVLENBQVk7UUFKbEMsYUFBUSxHQUFHLGdDQUFnQyxDQUFDO1FBQy9DLG1CQUFjLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQztRQUNuQyxrQkFBYSxHQUFHLElBQUksYUFBYSxFQUFFLENBQUM7UUFHdkMsSUFBSSxRQUFRLEVBQUU7WUFDVixJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztTQUM1QjtRQUNELElBQUksYUFBYSxFQUFFO1lBQ2YsSUFBSSxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUM7WUFDbkMsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLElBQUksYUFBYSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDO1NBQ3ZFO0lBQ0wsQ0FBQztJQUVEOzs7T0FHRztJQUNLLGdEQUFjLEdBQXRCLFVBQXVCLFFBQWtCOztR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Q2xFO1FBRUQsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBMEIsSUFBSSxDQUFDLFFBQVEsZ0NBQTJCLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBRyxFQUM3SCxhQUFhLEVBQ2I7WUFDSSxNQUFNLEVBQUUsZUFBZTtZQUN2QixlQUFlLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlO1lBQ25ELE9BQU8sRUFBRSxPQUFPO1lBQ2hCLE9BQU8sRUFBRSxPQUFPO1lBQ2hCLGNBQWMsRUFBRSxjQUFjO1NBQ2pDLENBQ0osQ0FBQztJQUNOLENBQUM7O2dCQWhXaUMsVUFBVTs2Q0FBRyxRQUFRLFlBQUcsTUFBTSxTQUFDLFNBQVM7Z0JBQStDLGFBQWEsdUJBQXZDLFFBQVE7O0lBTjlGLHVCQUF1QjtRQURuQyxVQUFVLEVBQUU7UUFPc0MsV0FBQSxRQUFRLEVBQUUsQ0FBQSxFQUFDLFdBQUEsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFBLEVBQW9CLFdBQUEsUUFBUSxFQUFFLENBQUE7T0FOaEcsdUJBQXVCLENBd1duQztJQUFELDhCQUFDO0NBQUEsQUF4V0QsSUF3V0M7U0F4V1ksdUJBQXVCIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBBcGkgRG9jdW1lbnRhdGlvblxuICogQXBpIERvY3VtZW50YXRpb25cbiAqXG4gKiBPcGVuQVBJIHNwZWMgdmVyc2lvbjogMS4wXG4gKiBcbiAqXG4gKiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IHRoZSBzd2FnZ2VyIGNvZGUgZ2VuZXJhdG9yIHByb2dyYW0uXG4gKiBodHRwczovL2dpdGh1Yi5jb20vc3dhZ2dlci1hcGkvc3dhZ2dlci1jb2RlZ2VuLmdpdFxuICogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuICovXG4vKiB0c2xpbnQ6ZGlzYWJsZTpuby11bnVzZWQtdmFyaWFibGUgbWVtYmVyLW9yZGVyaW5nICovXG5cbmltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgT3B0aW9uYWwgfSAgICAgICAgICAgICAgICAgICAgICBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBIZWFkZXJzLCBIdHRwUGFyYW1zLFxuICAgICAgICAgSHR0cFJlc3BvbnNlLCBIdHRwRXZlbnQgfSAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IEN1c3RvbUh0dHBVcmxFbmNvZGluZ0NvZGVjIH0gICAgICAgICAgICAgICAgICAgICAgICBmcm9tICcuLi9lbmNvZGVyJztcblxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBBcGlSZXNwb25zZU9iamVjdFNsaWNleENoYXJ0UmVzcG9uc2UgfSBmcm9tICcuLi9tb2RlbC9hcGlSZXNwb25zZU9iamVjdFNsaWNleENoYXJ0UmVzcG9uc2UnO1xuaW1wb3J0IHsgQXBpUmVzcG9uc2VPYmplY3RTbGljZXhMaXN0UmVzcG9uc2UgfSBmcm9tICcuLi9tb2RlbC9hcGlSZXNwb25zZU9iamVjdFNsaWNleExpc3RSZXNwb25zZSc7XG5pbXBvcnQgeyBGaWxlRG93bmxvYWRSZXNwb25zZSB9IGZyb20gJy4uL21vZGVsL2ZpbGVEb3dubG9hZFJlc3BvbnNlJztcbmltcG9ydCB7IFNsaWNleFJlcXVlc3QgfSBmcm9tICcuLi9tb2RlbC9zbGljZXhSZXF1ZXN0JztcbmltcG9ydCB7IFNsaWNleFJlcXVlc3RFeHRlbmRlZCB9IGZyb20gJy4uL21vZGVsL3NsaWNleFJlcXVlc3RFeHRlbmRlZCc7XG5cbmltcG9ydCB7IEJBU0VfUEFUSCwgQ09MTEVDVElPTl9GT1JNQVRTIH0gICAgICAgICAgICAgICAgICAgICBmcm9tICcuLi92YXJpYWJsZXMnO1xuaW1wb3J0IHsgQ29uZmlndXJhdGlvbiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gJy4uL2NvbmZpZ3VyYXRpb24nO1xuXG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBTbGljZVhDb250cm9sbGVyU2VydmljZSB7XG5cbiAgICBwcm90ZWN0ZWQgYmFzZVBhdGggPSAnaHR0cHM6Ly9hcGl2MnN0YWdlMy5hdG9tZXgubmV0JztcbiAgICBwdWJsaWMgZGVmYXVsdEhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoKTtcbiAgICBwdWJsaWMgY29uZmlndXJhdGlvbiA9IG5ldyBDb25maWd1cmF0aW9uKCk7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgaHR0cENsaWVudDogSHR0cENsaWVudCwgQE9wdGlvbmFsKClASW5qZWN0KEJBU0VfUEFUSCkgYmFzZVBhdGg6IHN0cmluZywgQE9wdGlvbmFsKCkgY29uZmlndXJhdGlvbjogQ29uZmlndXJhdGlvbikge1xuICAgICAgICBpZiAoYmFzZVBhdGgpIHtcbiAgICAgICAgICAgIHRoaXMuYmFzZVBhdGggPSBiYXNlUGF0aDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29uZmlndXJhdGlvbikge1xuICAgICAgICAgICAgdGhpcy5jb25maWd1cmF0aW9uID0gY29uZmlndXJhdGlvbjtcbiAgICAgICAgICAgIHRoaXMuYmFzZVBhdGggPSBiYXNlUGF0aCB8fCBjb25maWd1cmF0aW9uLmJhc2VQYXRoIHx8IHRoaXMuYmFzZVBhdGg7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0gY29uc3VtZXMgc3RyaW5nW10gbWltZS10eXBlc1xuICAgICAqIEByZXR1cm4gdHJ1ZTogY29uc3VtZXMgY29udGFpbnMgJ211bHRpcGFydC9mb3JtLWRhdGEnLCBmYWxzZTogb3RoZXJ3aXNlXG4gICAgICovXG4gICAgcHJpdmF0ZSBjYW5Db25zdW1lRm9ybShjb25zdW1lczogc3RyaW5nW10pOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgZm9ybSA9ICdtdWx0aXBhcnQvZm9ybS1kYXRhJztcbiAgICAgICAgZm9yIChjb25zdCBjb25zdW1lIG9mIGNvbnN1bWVzKSB7XG4gICAgICAgICAgICBpZiAoZm9ybSA9PT0gY29uc3VtZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIFNsaWNleCBBUEkgZm9yIGdyYXBoLlxuICAgICAqIFxuICAgICAqIEBwYXJhbSBzbGljZXhSZXF1ZXN0IHNsaWNleFJlcXVlc3RcbiAgICAgKiBAcGFyYW0gcmVxSWQgcmVxdWVzdCBpZFxuICAgICAqIEBwYXJhbSB0b2tlbiBBdXRoIFRva2VuXG4gICAgICogQHBhcmFtIG9ic2VydmUgc2V0IHdoZXRoZXIgb3Igbm90IHRvIHJldHVybiB0aGUgZGF0YSBPYnNlcnZhYmxlIGFzIHRoZSBib2R5LCByZXNwb25zZSBvciBldmVudHMuIGRlZmF1bHRzIHRvIHJldHVybmluZyB0aGUgYm9keS5cbiAgICAgKiBAcGFyYW0gcmVwb3J0UHJvZ3Jlc3MgZmxhZyB0byByZXBvcnQgcmVxdWVzdCBhbmQgcmVzcG9uc2UgcHJvZ3Jlc3MuXG4gICAgICovXG4gICAgcHVibGljIGdldFNsaWNleERhdGFDaGFydFVzaW5nUE9TVChzbGljZXhSZXF1ZXN0OiBTbGljZXhSZXF1ZXN0LCByZXFJZD86IHN0cmluZywgdG9rZW4/OiBzdHJpbmcsIG9ic2VydmU/OiAnYm9keScsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbik6IE9ic2VydmFibGU8QXBpUmVzcG9uc2VPYmplY3RTbGljZXhDaGFydFJlc3BvbnNlPjtcbiAgICBwdWJsaWMgZ2V0U2xpY2V4RGF0YUNoYXJ0VXNpbmdQT1NUKHNsaWNleFJlcXVlc3Q6IFNsaWNleFJlcXVlc3QsIHJlcUlkPzogc3RyaW5nLCB0b2tlbj86IHN0cmluZywgb2JzZXJ2ZT86ICdyZXNwb25zZScsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbik6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPEFwaVJlc3BvbnNlT2JqZWN0U2xpY2V4Q2hhcnRSZXNwb25zZT4+O1xuICAgIHB1YmxpYyBnZXRTbGljZXhEYXRhQ2hhcnRVc2luZ1BPU1Qoc2xpY2V4UmVxdWVzdDogU2xpY2V4UmVxdWVzdCwgcmVxSWQ/OiBzdHJpbmcsIHRva2VuPzogc3RyaW5nLCBvYnNlcnZlPzogJ2V2ZW50cycsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbik6IE9ic2VydmFibGU8SHR0cEV2ZW50PEFwaVJlc3BvbnNlT2JqZWN0U2xpY2V4Q2hhcnRSZXNwb25zZT4+O1xuICAgIHB1YmxpYyBnZXRTbGljZXhEYXRhQ2hhcnRVc2luZ1BPU1Qoc2xpY2V4UmVxdWVzdDogU2xpY2V4UmVxdWVzdCwgcmVxSWQ/OiBzdHJpbmcsIHRva2VuPzogc3RyaW5nLCBvYnNlcnZlOiBhbnkgPSAnYm9keScsIHJlcG9ydFByb2dyZXNzOiBib29sZWFuID0gZmFsc2UgKTogT2JzZXJ2YWJsZTxhbnk+IHtcblxuICAgICAgICBpZiAoc2xpY2V4UmVxdWVzdCA9PT0gbnVsbCB8fCBzbGljZXhSZXF1ZXN0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWlyZWQgcGFyYW1ldGVyIHNsaWNleFJlcXVlc3Qgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyBnZXRTbGljZXhEYXRhQ2hhcnRVc2luZ1BPU1QuJyk7XG4gICAgICAgIH1cblxuXG5cbiAgICAgICAgbGV0IGhlYWRlcnMgPSB0aGlzLmRlZmF1bHRIZWFkZXJzO1xuICAgICAgICBpZiAocmVxSWQgIT09IHVuZGVmaW5lZCAmJiByZXFJZCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KCdyZXFJZCcsIFN0cmluZyhyZXFJZCkpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0b2tlbiAhPT0gdW5kZWZpbmVkICYmIHRva2VuICE9PSBudWxsKSB7XG4gICAgICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoJ3Rva2VuJywgU3RyaW5nKHRva2VuKSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyB0byBkZXRlcm1pbmUgdGhlIEFjY2VwdCBoZWFkZXJcbiAgICAgICAgbGV0IGh0dHBIZWFkZXJBY2NlcHRzOiBzdHJpbmdbXSA9IFtcbiAgICAgICAgICAgICdhcHBsaWNhdGlvbi9qc29uJ1xuICAgICAgICBdO1xuICAgICAgICBjb25zdCBodHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHRoaXMuY29uZmlndXJhdGlvbi5zZWxlY3RIZWFkZXJBY2NlcHQoaHR0cEhlYWRlckFjY2VwdHMpO1xuICAgICAgICBpZiAoaHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KCdBY2NlcHQnLCBodHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gdG8gZGV0ZXJtaW5lIHRoZSBDb250ZW50LVR5cGUgaGVhZGVyXG4gICAgICAgIGNvbnN0IGNvbnN1bWVzOiBzdHJpbmdbXSA9IFtcbiAgICAgICAgICAgICdhcHBsaWNhdGlvbi9qc29uJ1xuICAgICAgICBdO1xuICAgICAgICBjb25zdCBodHRwQ29udGVudFR5cGVTZWxlY3RlZDogc3RyaW5nIHwgdW5kZWZpbmVkID0gdGhpcy5jb25maWd1cmF0aW9uLnNlbGVjdEhlYWRlckNvbnRlbnRUeXBlKGNvbnN1bWVzKTtcbiAgICAgICAgaWYgKGh0dHBDb250ZW50VHlwZVNlbGVjdGVkICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KCdDb250ZW50LVR5cGUnLCBodHRwQ29udGVudFR5cGVTZWxlY3RlZCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBvc3Q8QXBpUmVzcG9uc2VPYmplY3RTbGljZXhDaGFydFJlc3BvbnNlPihgJHt0aGlzLmJhc2VQYXRofS92Mi9hcGkvc2xpY2V4L2NoYXJ0YCxcbiAgICAgICAgICAgIHNsaWNleFJlcXVlc3QsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0aGlzLmNvbmZpZ3VyYXRpb24ud2l0aENyZWRlbnRpYWxzLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IGhlYWRlcnMsXG4gICAgICAgICAgICAgICAgb2JzZXJ2ZTogb2JzZXJ2ZSxcbiAgICAgICAgICAgICAgICByZXBvcnRQcm9ncmVzczogcmVwb3J0UHJvZ3Jlc3NcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTbGljZXggQVBJIGZvciBncmlkLlxuICAgICAqIFxuICAgICAqIEBwYXJhbSBlbnRpdHkgZW50aXR5XG4gICAgICogQHBhcmFtIHNsaWNleFJlcXVlc3Qgc2xpY2V4UmVxdWVzdFxuICAgICAqIEBwYXJhbSByZXFJZCByZXF1ZXN0IGlkXG4gICAgICogQHBhcmFtIHNvcnQgc29ydFxuICAgICAqIEBwYXJhbSB0b2tlbiBBdXRoIFRva2VuXG4gICAgICogQHBhcmFtIG9ic2VydmUgc2V0IHdoZXRoZXIgb3Igbm90IHRvIHJldHVybiB0aGUgZGF0YSBPYnNlcnZhYmxlIGFzIHRoZSBib2R5LCByZXNwb25zZSBvciBldmVudHMuIGRlZmF1bHRzIHRvIHJldHVybmluZyB0aGUgYm9keS5cbiAgICAgKiBAcGFyYW0gcmVwb3J0UHJvZ3Jlc3MgZmxhZyB0byByZXBvcnQgcmVxdWVzdCBhbmQgcmVzcG9uc2UgcHJvZ3Jlc3MuXG4gICAgICovXG4gICAgcHVibGljIGdldFNsaWNleERhdGFMaXN0VXNpbmdQT1NUKGVudGl0eTogJ2xpY2Vuc2VlJyB8ICdhZHZlcnRpc2VyJyB8ICdjYW1wYWlnbicgfCAnc3RyYXRlZ3knIHwgJ2NyZWF0aXZlU2l6ZScgfCAnYWdncmVnYXRvcicgfCAnYXBwJyB8ICdvcycgfCAnY3JlYXRpdmUnIHwgJ2NvdW50cnknIHwgJ2NpdHknIHwgJ3ByaWNpbmcnIHwgJ3BpeGVsJyB8ICdjYW1wYWlnbk9iamVjdGl2ZScgfCAnYWR2cmVnaW9ucycgfCAnY3JlYXRpdmVTZXRzJyB8ICdjcmVhdGl2ZVNldHNUeXBlJyB8ICd2aWRlb1BsYWNlbWVudCcsIHNsaWNleFJlcXVlc3Q6IFNsaWNleFJlcXVlc3QsIHJlcUlkPzogc3RyaW5nLCBzb3J0Pzogc3RyaW5nLCB0b2tlbj86IHN0cmluZywgb2JzZXJ2ZT86ICdib2R5JywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuKTogT2JzZXJ2YWJsZTxBcGlSZXNwb25zZU9iamVjdFNsaWNleExpc3RSZXNwb25zZT47XG4gICAgcHVibGljIGdldFNsaWNleERhdGFMaXN0VXNpbmdQT1NUKGVudGl0eTogJ2xpY2Vuc2VlJyB8ICdhZHZlcnRpc2VyJyB8ICdjYW1wYWlnbicgfCAnc3RyYXRlZ3knIHwgJ2NyZWF0aXZlU2l6ZScgfCAnYWdncmVnYXRvcicgfCAnYXBwJyB8ICdvcycgfCAnY3JlYXRpdmUnIHwgJ2NvdW50cnknIHwgJ2NpdHknIHwgJ3ByaWNpbmcnIHwgJ3BpeGVsJyB8ICdjYW1wYWlnbk9iamVjdGl2ZScgfCAnYWR2cmVnaW9ucycgfCAnY3JlYXRpdmVTZXRzJyB8ICdjcmVhdGl2ZVNldHNUeXBlJyB8ICd2aWRlb1BsYWNlbWVudCcsIHNsaWNleFJlcXVlc3Q6IFNsaWNleFJlcXVlc3QsIHJlcUlkPzogc3RyaW5nLCBzb3J0Pzogc3RyaW5nLCB0b2tlbj86IHN0cmluZywgb2JzZXJ2ZT86ICdyZXNwb25zZScsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbik6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPEFwaVJlc3BvbnNlT2JqZWN0U2xpY2V4TGlzdFJlc3BvbnNlPj47XG4gICAgcHVibGljIGdldFNsaWNleERhdGFMaXN0VXNpbmdQT1NUKGVudGl0eTogJ2xpY2Vuc2VlJyB8ICdhZHZlcnRpc2VyJyB8ICdjYW1wYWlnbicgfCAnc3RyYXRlZ3knIHwgJ2NyZWF0aXZlU2l6ZScgfCAnYWdncmVnYXRvcicgfCAnYXBwJyB8ICdvcycgfCAnY3JlYXRpdmUnIHwgJ2NvdW50cnknIHwgJ2NpdHknIHwgJ3ByaWNpbmcnIHwgJ3BpeGVsJyB8ICdjYW1wYWlnbk9iamVjdGl2ZScgfCAnYWR2cmVnaW9ucycgfCAnY3JlYXRpdmVTZXRzJyB8ICdjcmVhdGl2ZVNldHNUeXBlJyB8ICd2aWRlb1BsYWNlbWVudCcsIHNsaWNleFJlcXVlc3Q6IFNsaWNleFJlcXVlc3QsIHJlcUlkPzogc3RyaW5nLCBzb3J0Pzogc3RyaW5nLCB0b2tlbj86IHN0cmluZywgb2JzZXJ2ZT86ICdldmVudHMnLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4pOiBPYnNlcnZhYmxlPEh0dHBFdmVudDxBcGlSZXNwb25zZU9iamVjdFNsaWNleExpc3RSZXNwb25zZT4+O1xuICAgIHB1YmxpYyBnZXRTbGljZXhEYXRhTGlzdFVzaW5nUE9TVChlbnRpdHk6ICdsaWNlbnNlZScgfCAnYWR2ZXJ0aXNlcicgfCAnY2FtcGFpZ24nIHwgJ3N0cmF0ZWd5JyB8ICdjcmVhdGl2ZVNpemUnIHwgJ2FnZ3JlZ2F0b3InIHwgJ2FwcCcgfCAnb3MnIHwgJ2NyZWF0aXZlJyB8ICdjb3VudHJ5JyB8ICdjaXR5JyB8ICdwcmljaW5nJyB8ICdwaXhlbCcgfCAnY2FtcGFpZ25PYmplY3RpdmUnIHwgJ2FkdnJlZ2lvbnMnIHwgJ2NyZWF0aXZlU2V0cycgfCAnY3JlYXRpdmVTZXRzVHlwZScgfCAndmlkZW9QbGFjZW1lbnQnLCBzbGljZXhSZXF1ZXN0OiBTbGljZXhSZXF1ZXN0LCByZXFJZD86IHN0cmluZywgc29ydD86IHN0cmluZywgdG9rZW4/OiBzdHJpbmcsIG9ic2VydmU6IGFueSA9ICdib2R5JywgcmVwb3J0UHJvZ3Jlc3M6IGJvb2xlYW4gPSBmYWxzZSApOiBPYnNlcnZhYmxlPGFueT4ge1xuXG4gICAgICAgIGlmIChlbnRpdHkgPT09IG51bGwgfHwgZW50aXR5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUmVxdWlyZWQgcGFyYW1ldGVyIGVudGl0eSB3YXMgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBjYWxsaW5nIGdldFNsaWNleERhdGFMaXN0VXNpbmdQT1NULicpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNsaWNleFJlcXVlc3QgPT09IG51bGwgfHwgc2xpY2V4UmVxdWVzdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcXVpcmVkIHBhcmFtZXRlciBzbGljZXhSZXF1ZXN0IHdhcyBudWxsIG9yIHVuZGVmaW5lZCB3aGVuIGNhbGxpbmcgZ2V0U2xpY2V4RGF0YUxpc3RVc2luZ1BPU1QuJyk7XG4gICAgICAgIH1cblxuXG5cblxuICAgICAgICBsZXQgcXVlcnlQYXJhbWV0ZXJzID0gbmV3IEh0dHBQYXJhbXMoe2VuY29kZXI6IG5ldyBDdXN0b21IdHRwVXJsRW5jb2RpbmdDb2RlYygpfSk7XG4gICAgICAgIGlmIChzb3J0ICE9PSB1bmRlZmluZWQgJiYgc29ydCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgcXVlcnlQYXJhbWV0ZXJzID0gcXVlcnlQYXJhbWV0ZXJzLnNldCgnc29ydCcsIDxhbnk+c29ydCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgaGVhZGVycyA9IHRoaXMuZGVmYXVsdEhlYWRlcnM7XG4gICAgICAgIGlmIChyZXFJZCAhPT0gdW5kZWZpbmVkICYmIHJlcUlkICE9PSBudWxsKSB7XG4gICAgICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoJ3JlcUlkJywgU3RyaW5nKHJlcUlkKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRva2VuICE9PSB1bmRlZmluZWQgJiYgdG9rZW4gIT09IG51bGwpIHtcbiAgICAgICAgICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldCgndG9rZW4nLCBTdHJpbmcodG9rZW4pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHRvIGRldGVybWluZSB0aGUgQWNjZXB0IGhlYWRlclxuICAgICAgICBsZXQgaHR0cEhlYWRlckFjY2VwdHM6IHN0cmluZ1tdID0gW1xuICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nXG4gICAgICAgIF07XG4gICAgICAgIGNvbnN0IGh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZDogc3RyaW5nIHwgdW5kZWZpbmVkID0gdGhpcy5jb25maWd1cmF0aW9uLnNlbGVjdEhlYWRlckFjY2VwdChodHRwSGVhZGVyQWNjZXB0cyk7XG4gICAgICAgIGlmIChodHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoJ0FjY2VwdCcsIGh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyB0byBkZXRlcm1pbmUgdGhlIENvbnRlbnQtVHlwZSBoZWFkZXJcbiAgICAgICAgY29uc3QgY29uc3VtZXM6IHN0cmluZ1tdID0gW1xuICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nXG4gICAgICAgIF07XG4gICAgICAgIGNvbnN0IGh0dHBDb250ZW50VHlwZVNlbGVjdGVkOiBzdHJpbmcgfCB1bmRlZmluZWQgPSB0aGlzLmNvbmZpZ3VyYXRpb24uc2VsZWN0SGVhZGVyQ29udGVudFR5cGUoY29uc3VtZXMpO1xuICAgICAgICBpZiAoaHR0cENvbnRlbnRUeXBlU2VsZWN0ZWQgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoJ0NvbnRlbnQtVHlwZScsIGh0dHBDb250ZW50VHlwZVNlbGVjdGVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucG9zdDxBcGlSZXNwb25zZU9iamVjdFNsaWNleExpc3RSZXNwb25zZT4oYCR7dGhpcy5iYXNlUGF0aH0vdjIvYXBpL3NsaWNleC9saXN0LyR7ZW5jb2RlVVJJQ29tcG9uZW50KFN0cmluZyhlbnRpdHkpKX1gLFxuICAgICAgICAgICAgc2xpY2V4UmVxdWVzdCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBwYXJhbXM6IHF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRoaXMuY29uZmlndXJhdGlvbi53aXRoQ3JlZGVudGlhbHMsXG4gICAgICAgICAgICAgICAgaGVhZGVyczogaGVhZGVycyxcbiAgICAgICAgICAgICAgICBvYnNlcnZlOiBvYnNlcnZlLFxuICAgICAgICAgICAgICAgIHJlcG9ydFByb2dyZXNzOiByZXBvcnRQcm9ncmVzc1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNsaWNleCBBUEkgZm9yIGdyaWQgd2l0aCBjb21wYXJlLlxuICAgICAqIFxuICAgICAqIEBwYXJhbSBlbnRpdHkgZW50aXR5XG4gICAgICogQHBhcmFtIHNsaWNleFJlcXVlc3Qgc2xpY2V4UmVxdWVzdFxuICAgICAqIEBwYXJhbSByZXFJZCByZXF1ZXN0IGlkXG4gICAgICogQHBhcmFtIHNvcnQgc29ydFxuICAgICAqIEBwYXJhbSB0b2tlbiBBdXRoIFRva2VuXG4gICAgICogQHBhcmFtIG9ic2VydmUgc2V0IHdoZXRoZXIgb3Igbm90IHRvIHJldHVybiB0aGUgZGF0YSBPYnNlcnZhYmxlIGFzIHRoZSBib2R5LCByZXNwb25zZSBvciBldmVudHMuIGRlZmF1bHRzIHRvIHJldHVybmluZyB0aGUgYm9keS5cbiAgICAgKiBAcGFyYW0gcmVwb3J0UHJvZ3Jlc3MgZmxhZyB0byByZXBvcnQgcmVxdWVzdCBhbmQgcmVzcG9uc2UgcHJvZ3Jlc3MuXG4gICAgICovXG4gICAgcHVibGljIGdldFNsaWNleERhdGFMaXN0V2l0aENvbXBhcmVVc2luZ1BPU1QoZW50aXR5OiAnbGljZW5zZWUnIHwgJ2FkdmVydGlzZXInIHwgJ2NhbXBhaWduJyB8ICdzdHJhdGVneScgfCAnY3JlYXRpdmVTaXplJyB8ICdhZ2dyZWdhdG9yJyB8ICdhcHAnIHwgJ29zJyB8ICdjcmVhdGl2ZScgfCAnY291bnRyeScgfCAnY2l0eScgfCAncHJpY2luZycgfCAncGl4ZWwnIHwgJ2NhbXBhaWduT2JqZWN0aXZlJyB8ICdhZHZyZWdpb25zJyB8ICdjcmVhdGl2ZVNldHMnIHwgJ2NyZWF0aXZlU2V0c1R5cGUnIHwgJ3ZpZGVvUGxhY2VtZW50Jywgc2xpY2V4UmVxdWVzdDogU2xpY2V4UmVxdWVzdCwgcmVxSWQ/OiBzdHJpbmcsIHNvcnQ/OiBzdHJpbmcsIHRva2VuPzogc3RyaW5nLCBvYnNlcnZlPzogJ2JvZHknLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4pOiBPYnNlcnZhYmxlPEFwaVJlc3BvbnNlT2JqZWN0U2xpY2V4TGlzdFJlc3BvbnNlPjtcbiAgICBwdWJsaWMgZ2V0U2xpY2V4RGF0YUxpc3RXaXRoQ29tcGFyZVVzaW5nUE9TVChlbnRpdHk6ICdsaWNlbnNlZScgfCAnYWR2ZXJ0aXNlcicgfCAnY2FtcGFpZ24nIHwgJ3N0cmF0ZWd5JyB8ICdjcmVhdGl2ZVNpemUnIHwgJ2FnZ3JlZ2F0b3InIHwgJ2FwcCcgfCAnb3MnIHwgJ2NyZWF0aXZlJyB8ICdjb3VudHJ5JyB8ICdjaXR5JyB8ICdwcmljaW5nJyB8ICdwaXhlbCcgfCAnY2FtcGFpZ25PYmplY3RpdmUnIHwgJ2FkdnJlZ2lvbnMnIHwgJ2NyZWF0aXZlU2V0cycgfCAnY3JlYXRpdmVTZXRzVHlwZScgfCAndmlkZW9QbGFjZW1lbnQnLCBzbGljZXhSZXF1ZXN0OiBTbGljZXhSZXF1ZXN0LCByZXFJZD86IHN0cmluZywgc29ydD86IHN0cmluZywgdG9rZW4/OiBzdHJpbmcsIG9ic2VydmU/OiAncmVzcG9uc2UnLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4pOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxBcGlSZXNwb25zZU9iamVjdFNsaWNleExpc3RSZXNwb25zZT4+O1xuICAgIHB1YmxpYyBnZXRTbGljZXhEYXRhTGlzdFdpdGhDb21wYXJlVXNpbmdQT1NUKGVudGl0eTogJ2xpY2Vuc2VlJyB8ICdhZHZlcnRpc2VyJyB8ICdjYW1wYWlnbicgfCAnc3RyYXRlZ3knIHwgJ2NyZWF0aXZlU2l6ZScgfCAnYWdncmVnYXRvcicgfCAnYXBwJyB8ICdvcycgfCAnY3JlYXRpdmUnIHwgJ2NvdW50cnknIHwgJ2NpdHknIHwgJ3ByaWNpbmcnIHwgJ3BpeGVsJyB8ICdjYW1wYWlnbk9iamVjdGl2ZScgfCAnYWR2cmVnaW9ucycgfCAnY3JlYXRpdmVTZXRzJyB8ICdjcmVhdGl2ZVNldHNUeXBlJyB8ICd2aWRlb1BsYWNlbWVudCcsIHNsaWNleFJlcXVlc3Q6IFNsaWNleFJlcXVlc3QsIHJlcUlkPzogc3RyaW5nLCBzb3J0Pzogc3RyaW5nLCB0b2tlbj86IHN0cmluZywgb2JzZXJ2ZT86ICdldmVudHMnLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4pOiBPYnNlcnZhYmxlPEh0dHBFdmVudDxBcGlSZXNwb25zZU9iamVjdFNsaWNleExpc3RSZXNwb25zZT4+O1xuICAgIHB1YmxpYyBnZXRTbGljZXhEYXRhTGlzdFdpdGhDb21wYXJlVXNpbmdQT1NUKGVudGl0eTogJ2xpY2Vuc2VlJyB8ICdhZHZlcnRpc2VyJyB8ICdjYW1wYWlnbicgfCAnc3RyYXRlZ3knIHwgJ2NyZWF0aXZlU2l6ZScgfCAnYWdncmVnYXRvcicgfCAnYXBwJyB8ICdvcycgfCAnY3JlYXRpdmUnIHwgJ2NvdW50cnknIHwgJ2NpdHknIHwgJ3ByaWNpbmcnIHwgJ3BpeGVsJyB8ICdjYW1wYWlnbk9iamVjdGl2ZScgfCAnYWR2cmVnaW9ucycgfCAnY3JlYXRpdmVTZXRzJyB8ICdjcmVhdGl2ZVNldHNUeXBlJyB8ICd2aWRlb1BsYWNlbWVudCcsIHNsaWNleFJlcXVlc3Q6IFNsaWNleFJlcXVlc3QsIHJlcUlkPzogc3RyaW5nLCBzb3J0Pzogc3RyaW5nLCB0b2tlbj86IHN0cmluZywgb2JzZXJ2ZTogYW55ID0gJ2JvZHknLCByZXBvcnRQcm9ncmVzczogYm9vbGVhbiA9IGZhbHNlICk6IE9ic2VydmFibGU8YW55PiB7XG5cbiAgICAgICAgaWYgKGVudGl0eSA9PT0gbnVsbCB8fCBlbnRpdHkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXF1aXJlZCBwYXJhbWV0ZXIgZW50aXR5IHdhcyBudWxsIG9yIHVuZGVmaW5lZCB3aGVuIGNhbGxpbmcgZ2V0U2xpY2V4RGF0YUxpc3RXaXRoQ29tcGFyZVVzaW5nUE9TVC4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzbGljZXhSZXF1ZXN0ID09PSBudWxsIHx8IHNsaWNleFJlcXVlc3QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXF1aXJlZCBwYXJhbWV0ZXIgc2xpY2V4UmVxdWVzdCB3YXMgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBjYWxsaW5nIGdldFNsaWNleERhdGFMaXN0V2l0aENvbXBhcmVVc2luZ1BPU1QuJyk7XG4gICAgICAgIH1cblxuXG5cblxuICAgICAgICBsZXQgcXVlcnlQYXJhbWV0ZXJzID0gbmV3IEh0dHBQYXJhbXMoe2VuY29kZXI6IG5ldyBDdXN0b21IdHRwVXJsRW5jb2RpbmdDb2RlYygpfSk7XG4gICAgICAgIGlmIChzb3J0ICE9PSB1bmRlZmluZWQgJiYgc29ydCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgcXVlcnlQYXJhbWV0ZXJzID0gcXVlcnlQYXJhbWV0ZXJzLnNldCgnc29ydCcsIDxhbnk+c29ydCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgaGVhZGVycyA9IHRoaXMuZGVmYXVsdEhlYWRlcnM7XG4gICAgICAgIGlmIChyZXFJZCAhPT0gdW5kZWZpbmVkICYmIHJlcUlkICE9PSBudWxsKSB7XG4gICAgICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoJ3JlcUlkJywgU3RyaW5nKHJlcUlkKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRva2VuICE9PSB1bmRlZmluZWQgJiYgdG9rZW4gIT09IG51bGwpIHtcbiAgICAgICAgICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldCgndG9rZW4nLCBTdHJpbmcodG9rZW4pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHRvIGRldGVybWluZSB0aGUgQWNjZXB0IGhlYWRlclxuICAgICAgICBsZXQgaHR0cEhlYWRlckFjY2VwdHM6IHN0cmluZ1tdID0gW1xuICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nXG4gICAgICAgIF07XG4gICAgICAgIGNvbnN0IGh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZDogc3RyaW5nIHwgdW5kZWZpbmVkID0gdGhpcy5jb25maWd1cmF0aW9uLnNlbGVjdEhlYWRlckFjY2VwdChodHRwSGVhZGVyQWNjZXB0cyk7XG4gICAgICAgIGlmIChodHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoJ0FjY2VwdCcsIGh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyB0byBkZXRlcm1pbmUgdGhlIENvbnRlbnQtVHlwZSBoZWFkZXJcbiAgICAgICAgY29uc3QgY29uc3VtZXM6IHN0cmluZ1tdID0gW1xuICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nXG4gICAgICAgIF07XG4gICAgICAgIGNvbnN0IGh0dHBDb250ZW50VHlwZVNlbGVjdGVkOiBzdHJpbmcgfCB1bmRlZmluZWQgPSB0aGlzLmNvbmZpZ3VyYXRpb24uc2VsZWN0SGVhZGVyQ29udGVudFR5cGUoY29uc3VtZXMpO1xuICAgICAgICBpZiAoaHR0cENvbnRlbnRUeXBlU2VsZWN0ZWQgIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoJ0NvbnRlbnQtVHlwZScsIGh0dHBDb250ZW50VHlwZVNlbGVjdGVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucG9zdDxBcGlSZXNwb25zZU9iamVjdFNsaWNleExpc3RSZXNwb25zZT4oYCR7dGhpcy5iYXNlUGF0aH0vdjIvYXBpL3NsaWNleC9saXN0L2NvbXBhcmUvJHtlbmNvZGVVUklDb21wb25lbnQoU3RyaW5nKGVudGl0eSkpfWAsXG4gICAgICAgICAgICBzbGljZXhSZXF1ZXN0LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHBhcmFtczogcXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczogdGhpcy5jb25maWd1cmF0aW9uLndpdGhDcmVkZW50aWFscyxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiBoZWFkZXJzLFxuICAgICAgICAgICAgICAgIG9ic2VydmU6IG9ic2VydmUsXG4gICAgICAgICAgICAgICAgcmVwb3J0UHJvZ3Jlc3M6IHJlcG9ydFByb2dyZXNzXG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2xpY2V4IEFQSSBmb3IgZ3JpZCBkZXRhaWxzLlxuICAgICAqIFxuICAgICAqIEBwYXJhbSBlbnRpdHkgZW50aXR5XG4gICAgICogQHBhcmFtIHNsaWNleFJlcXVlc3RFeHQgc2xpY2V4UmVxdWVzdEV4dFxuICAgICAqIEBwYXJhbSByZXFJZCByZXF1ZXN0IGlkXG4gICAgICogQHBhcmFtIHRva2VuIEF1dGggVG9rZW5cbiAgICAgKiBAcGFyYW0gb2JzZXJ2ZSBzZXQgd2hldGhlciBvciBub3QgdG8gcmV0dXJuIHRoZSBkYXRhIE9ic2VydmFibGUgYXMgdGhlIGJvZHksIHJlc3BvbnNlIG9yIGV2ZW50cy4gZGVmYXVsdHMgdG8gcmV0dXJuaW5nIHRoZSBib2R5LlxuICAgICAqIEBwYXJhbSByZXBvcnRQcm9ncmVzcyBmbGFnIHRvIHJlcG9ydCByZXF1ZXN0IGFuZCByZXNwb25zZSBwcm9ncmVzcy5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0U2xpY2V4R3JpZERldGFpbHNVc2luZ1BPU1QoZW50aXR5OiAnbGljZW5zZWUnIHwgJ2FkdmVydGlzZXInIHwgJ2NhbXBhaWduJyB8ICdzdHJhdGVneScgfCAnY3JlYXRpdmVTaXplJyB8ICdhZ2dyZWdhdG9yJyB8ICdhcHAnIHwgJ29zJyB8ICdjcmVhdGl2ZScgfCAnY291bnRyeScgfCAnY2l0eScgfCAncHJpY2luZycgfCAncGl4ZWwnIHwgJ2NhbXBhaWduT2JqZWN0aXZlJyB8ICdhZHZyZWdpb25zJyB8ICdjcmVhdGl2ZVNldHMnIHwgJ2NyZWF0aXZlU2V0c1R5cGUnIHwgJ3ZpZGVvUGxhY2VtZW50Jywgc2xpY2V4UmVxdWVzdEV4dDogU2xpY2V4UmVxdWVzdEV4dGVuZGVkLCByZXFJZD86IHN0cmluZywgdG9rZW4/OiBzdHJpbmcsIG9ic2VydmU/OiAnYm9keScsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbik6IE9ic2VydmFibGU8QXBpUmVzcG9uc2VPYmplY3RTbGljZXhMaXN0UmVzcG9uc2U+O1xuICAgIHB1YmxpYyBnZXRTbGljZXhHcmlkRGV0YWlsc1VzaW5nUE9TVChlbnRpdHk6ICdsaWNlbnNlZScgfCAnYWR2ZXJ0aXNlcicgfCAnY2FtcGFpZ24nIHwgJ3N0cmF0ZWd5JyB8ICdjcmVhdGl2ZVNpemUnIHwgJ2FnZ3JlZ2F0b3InIHwgJ2FwcCcgfCAnb3MnIHwgJ2NyZWF0aXZlJyB8ICdjb3VudHJ5JyB8ICdjaXR5JyB8ICdwcmljaW5nJyB8ICdwaXhlbCcgfCAnY2FtcGFpZ25PYmplY3RpdmUnIHwgJ2FkdnJlZ2lvbnMnIHwgJ2NyZWF0aXZlU2V0cycgfCAnY3JlYXRpdmVTZXRzVHlwZScgfCAndmlkZW9QbGFjZW1lbnQnLCBzbGljZXhSZXF1ZXN0RXh0OiBTbGljZXhSZXF1ZXN0RXh0ZW5kZWQsIHJlcUlkPzogc3RyaW5nLCB0b2tlbj86IHN0cmluZywgb2JzZXJ2ZT86ICdyZXNwb25zZScsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbik6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPEFwaVJlc3BvbnNlT2JqZWN0U2xpY2V4TGlzdFJlc3BvbnNlPj47XG4gICAgcHVibGljIGdldFNsaWNleEdyaWREZXRhaWxzVXNpbmdQT1NUKGVudGl0eTogJ2xpY2Vuc2VlJyB8ICdhZHZlcnRpc2VyJyB8ICdjYW1wYWlnbicgfCAnc3RyYXRlZ3knIHwgJ2NyZWF0aXZlU2l6ZScgfCAnYWdncmVnYXRvcicgfCAnYXBwJyB8ICdvcycgfCAnY3JlYXRpdmUnIHwgJ2NvdW50cnknIHwgJ2NpdHknIHwgJ3ByaWNpbmcnIHwgJ3BpeGVsJyB8ICdjYW1wYWlnbk9iamVjdGl2ZScgfCAnYWR2cmVnaW9ucycgfCAnY3JlYXRpdmVTZXRzJyB8ICdjcmVhdGl2ZVNldHNUeXBlJyB8ICd2aWRlb1BsYWNlbWVudCcsIHNsaWNleFJlcXVlc3RFeHQ6IFNsaWNleFJlcXVlc3RFeHRlbmRlZCwgcmVxSWQ/OiBzdHJpbmcsIHRva2VuPzogc3RyaW5nLCBvYnNlcnZlPzogJ2V2ZW50cycsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbik6IE9ic2VydmFibGU8SHR0cEV2ZW50PEFwaVJlc3BvbnNlT2JqZWN0U2xpY2V4TGlzdFJlc3BvbnNlPj47XG4gICAgcHVibGljIGdldFNsaWNleEdyaWREZXRhaWxzVXNpbmdQT1NUKGVudGl0eTogJ2xpY2Vuc2VlJyB8ICdhZHZlcnRpc2VyJyB8ICdjYW1wYWlnbicgfCAnc3RyYXRlZ3knIHwgJ2NyZWF0aXZlU2l6ZScgfCAnYWdncmVnYXRvcicgfCAnYXBwJyB8ICdvcycgfCAnY3JlYXRpdmUnIHwgJ2NvdW50cnknIHwgJ2NpdHknIHwgJ3ByaWNpbmcnIHwgJ3BpeGVsJyB8ICdjYW1wYWlnbk9iamVjdGl2ZScgfCAnYWR2cmVnaW9ucycgfCAnY3JlYXRpdmVTZXRzJyB8ICdjcmVhdGl2ZVNldHNUeXBlJyB8ICd2aWRlb1BsYWNlbWVudCcsIHNsaWNleFJlcXVlc3RFeHQ6IFNsaWNleFJlcXVlc3RFeHRlbmRlZCwgcmVxSWQ/OiBzdHJpbmcsIHRva2VuPzogc3RyaW5nLCBvYnNlcnZlOiBhbnkgPSAnYm9keScsIHJlcG9ydFByb2dyZXNzOiBib29sZWFuID0gZmFsc2UgKTogT2JzZXJ2YWJsZTxhbnk+IHtcblxuICAgICAgICBpZiAoZW50aXR5ID09PSBudWxsIHx8IGVudGl0eSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcXVpcmVkIHBhcmFtZXRlciBlbnRpdHkgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyBnZXRTbGljZXhHcmlkRGV0YWlsc1VzaW5nUE9TVC4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzbGljZXhSZXF1ZXN0RXh0ID09PSBudWxsIHx8IHNsaWNleFJlcXVlc3RFeHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXF1aXJlZCBwYXJhbWV0ZXIgc2xpY2V4UmVxdWVzdEV4dCB3YXMgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBjYWxsaW5nIGdldFNsaWNleEdyaWREZXRhaWxzVXNpbmdQT1NULicpO1xuICAgICAgICB9XG5cblxuXG4gICAgICAgIGxldCBoZWFkZXJzID0gdGhpcy5kZWZhdWx0SGVhZGVycztcbiAgICAgICAgaWYgKHJlcUlkICE9PSB1bmRlZmluZWQgJiYgcmVxSWQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldCgncmVxSWQnLCBTdHJpbmcocmVxSWQpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodG9rZW4gIT09IHVuZGVmaW5lZCAmJiB0b2tlbiAhPT0gbnVsbCkge1xuICAgICAgICAgICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KCd0b2tlbicsIFN0cmluZyh0b2tlbikpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gdG8gZGV0ZXJtaW5lIHRoZSBBY2NlcHQgaGVhZGVyXG4gICAgICAgIGxldCBodHRwSGVhZGVyQWNjZXB0czogc3RyaW5nW10gPSBbXG4gICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbidcbiAgICAgICAgXTtcbiAgICAgICAgY29uc3QgaHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkOiBzdHJpbmcgfCB1bmRlZmluZWQgPSB0aGlzLmNvbmZpZ3VyYXRpb24uc2VsZWN0SGVhZGVyQWNjZXB0KGh0dHBIZWFkZXJBY2NlcHRzKTtcbiAgICAgICAgaWYgKGh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldCgnQWNjZXB0JywgaHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHRvIGRldGVybWluZSB0aGUgQ29udGVudC1UeXBlIGhlYWRlclxuICAgICAgICBjb25zdCBjb25zdW1lczogc3RyaW5nW10gPSBbXG4gICAgICAgICAgICAnYXBwbGljYXRpb24vanNvbidcbiAgICAgICAgXTtcbiAgICAgICAgY29uc3QgaHR0cENvbnRlbnRUeXBlU2VsZWN0ZWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHRoaXMuY29uZmlndXJhdGlvbi5zZWxlY3RIZWFkZXJDb250ZW50VHlwZShjb25zdW1lcyk7XG4gICAgICAgIGlmIChodHRwQ29udGVudFR5cGVTZWxlY3RlZCAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGhlYWRlcnMgPSBoZWFkZXJzLnNldCgnQ29udGVudC1UeXBlJywgaHR0cENvbnRlbnRUeXBlU2VsZWN0ZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0PEFwaVJlc3BvbnNlT2JqZWN0U2xpY2V4TGlzdFJlc3BvbnNlPihgJHt0aGlzLmJhc2VQYXRofS92Mi9hcGkvc2xpY2V4L2xpc3QvZGV0YWlscy8ke2VuY29kZVVSSUNvbXBvbmVudChTdHJpbmcoZW50aXR5KSl9YCxcbiAgICAgICAgICAgIHNsaWNleFJlcXVlc3RFeHQsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0aGlzLmNvbmZpZ3VyYXRpb24ud2l0aENyZWRlbnRpYWxzLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IGhlYWRlcnMsXG4gICAgICAgICAgICAgICAgb2JzZXJ2ZTogb2JzZXJ2ZSxcbiAgICAgICAgICAgICAgICByZXBvcnRQcm9ncmVzczogcmVwb3J0UHJvZ3Jlc3NcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTbGljZXggQVBJIGZvciBMaXN0IEV4cG9ydC5cbiAgICAgKiBcbiAgICAgKiBAcGFyYW0gZW50aXR5IGVudGl0eVxuICAgICAqIEBwYXJhbSBzbGljZXhSZXF1ZXN0IHNsaWNleFJlcXVlc3RcbiAgICAgKiBAcGFyYW0gcmVxSWQgcmVxdWVzdCBpZFxuICAgICAqIEBwYXJhbSBzb3J0IHNvcnRcbiAgICAgKiBAcGFyYW0gdG9rZW4gQXV0aCBUb2tlblxuICAgICAqIEBwYXJhbSBvYnNlcnZlIHNldCB3aGV0aGVyIG9yIG5vdCB0byByZXR1cm4gdGhlIGRhdGEgT2JzZXJ2YWJsZSBhcyB0aGUgYm9keSwgcmVzcG9uc2Ugb3IgZXZlbnRzLiBkZWZhdWx0cyB0byByZXR1cm5pbmcgdGhlIGJvZHkuXG4gICAgICogQHBhcmFtIHJlcG9ydFByb2dyZXNzIGZsYWcgdG8gcmVwb3J0IHJlcXVlc3QgYW5kIHJlc3BvbnNlIHByb2dyZXNzLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRTbGljZXhMaXN0RGF0YUZvckV4cG9ydFVzaW5nUE9TVChlbnRpdHk6ICdsaWNlbnNlZScgfCAnYWR2ZXJ0aXNlcicgfCAnY2FtcGFpZ24nIHwgJ3N0cmF0ZWd5JyB8ICdjcmVhdGl2ZVNpemUnIHwgJ2FnZ3JlZ2F0b3InIHwgJ2FwcCcgfCAnb3MnIHwgJ2NyZWF0aXZlJyB8ICdjb3VudHJ5JyB8ICdjaXR5JyB8ICdwcmljaW5nJyB8ICdwaXhlbCcgfCAnY2FtcGFpZ25PYmplY3RpdmUnIHwgJ2FkdnJlZ2lvbnMnIHwgJ2NyZWF0aXZlU2V0cycgfCAnY3JlYXRpdmVTZXRzVHlwZScgfCAndmlkZW9QbGFjZW1lbnQnLCBzbGljZXhSZXF1ZXN0OiBTbGljZXhSZXF1ZXN0LCByZXFJZD86IHN0cmluZywgc29ydD86IHN0cmluZywgdG9rZW4/OiBzdHJpbmcsIG9ic2VydmU/OiAnYm9keScsIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbik6IE9ic2VydmFibGU8RmlsZURvd25sb2FkUmVzcG9uc2U+O1xuICAgIHB1YmxpYyBnZXRTbGljZXhMaXN0RGF0YUZvckV4cG9ydFVzaW5nUE9TVChlbnRpdHk6ICdsaWNlbnNlZScgfCAnYWR2ZXJ0aXNlcicgfCAnY2FtcGFpZ24nIHwgJ3N0cmF0ZWd5JyB8ICdjcmVhdGl2ZVNpemUnIHwgJ2FnZ3JlZ2F0b3InIHwgJ2FwcCcgfCAnb3MnIHwgJ2NyZWF0aXZlJyB8ICdjb3VudHJ5JyB8ICdjaXR5JyB8ICdwcmljaW5nJyB8ICdwaXhlbCcgfCAnY2FtcGFpZ25PYmplY3RpdmUnIHwgJ2FkdnJlZ2lvbnMnIHwgJ2NyZWF0aXZlU2V0cycgfCAnY3JlYXRpdmVTZXRzVHlwZScgfCAndmlkZW9QbGFjZW1lbnQnLCBzbGljZXhSZXF1ZXN0OiBTbGljZXhSZXF1ZXN0LCByZXFJZD86IHN0cmluZywgc29ydD86IHN0cmluZywgdG9rZW4/OiBzdHJpbmcsIG9ic2VydmU/OiAncmVzcG9uc2UnLCByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4pOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxGaWxlRG93bmxvYWRSZXNwb25zZT4+O1xuICAgIHB1YmxpYyBnZXRTbGljZXhMaXN0RGF0YUZvckV4cG9ydFVzaW5nUE9TVChlbnRpdHk6ICdsaWNlbnNlZScgfCAnYWR2ZXJ0aXNlcicgfCAnY2FtcGFpZ24nIHwgJ3N0cmF0ZWd5JyB8ICdjcmVhdGl2ZVNpemUnIHwgJ2FnZ3JlZ2F0b3InIHwgJ2FwcCcgfCAnb3MnIHwgJ2NyZWF0aXZlJyB8ICdjb3VudHJ5JyB8ICdjaXR5JyB8ICdwcmljaW5nJyB8ICdwaXhlbCcgfCAnY2FtcGFpZ25PYmplY3RpdmUnIHwgJ2FkdnJlZ2lvbnMnIHwgJ2NyZWF0aXZlU2V0cycgfCAnY3JlYXRpdmVTZXRzVHlwZScgfCAndmlkZW9QbGFjZW1lbnQnLCBzbGljZXhSZXF1ZXN0OiBTbGljZXhSZXF1ZXN0LCByZXFJZD86IHN0cmluZywgc29ydD86IHN0cmluZywgdG9rZW4/OiBzdHJpbmcsIG9ic2VydmU/OiAnZXZlbnRzJywgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuKTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8RmlsZURvd25sb2FkUmVzcG9uc2U+PjtcbiAgICBwdWJsaWMgZ2V0U2xpY2V4TGlzdERhdGFGb3JFeHBvcnRVc2luZ1BPU1QoZW50aXR5OiAnbGljZW5zZWUnIHwgJ2FkdmVydGlzZXInIHwgJ2NhbXBhaWduJyB8ICdzdHJhdGVneScgfCAnY3JlYXRpdmVTaXplJyB8ICdhZ2dyZWdhdG9yJyB8ICdhcHAnIHwgJ29zJyB8ICdjcmVhdGl2ZScgfCAnY291bnRyeScgfCAnY2l0eScgfCAncHJpY2luZycgfCAncGl4ZWwnIHwgJ2NhbXBhaWduT2JqZWN0aXZlJyB8ICdhZHZyZWdpb25zJyB8ICdjcmVhdGl2ZVNldHMnIHwgJ2NyZWF0aXZlU2V0c1R5cGUnIHwgJ3ZpZGVvUGxhY2VtZW50Jywgc2xpY2V4UmVxdWVzdDogU2xpY2V4UmVxdWVzdCwgcmVxSWQ/OiBzdHJpbmcsIHNvcnQ/OiBzdHJpbmcsIHRva2VuPzogc3RyaW5nLCBvYnNlcnZlOiBhbnkgPSAnYm9keScsIHJlcG9ydFByb2dyZXNzOiBib29sZWFuID0gZmFsc2UgKTogT2JzZXJ2YWJsZTxhbnk+IHtcblxuICAgICAgICBpZiAoZW50aXR5ID09PSBudWxsIHx8IGVudGl0eSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcXVpcmVkIHBhcmFtZXRlciBlbnRpdHkgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyBnZXRTbGljZXhMaXN0RGF0YUZvckV4cG9ydFVzaW5nUE9TVC4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzbGljZXhSZXF1ZXN0ID09PSBudWxsIHx8IHNsaWNleFJlcXVlc3QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXF1aXJlZCBwYXJhbWV0ZXIgc2xpY2V4UmVxdWVzdCB3YXMgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBjYWxsaW5nIGdldFNsaWNleExpc3REYXRhRm9yRXhwb3J0VXNpbmdQT1NULicpO1xuICAgICAgICB9XG5cblxuXG5cbiAgICAgICAgbGV0IHF1ZXJ5UGFyYW1ldGVycyA9IG5ldyBIdHRwUGFyYW1zKHtlbmNvZGVyOiBuZXcgQ3VzdG9tSHR0cFVybEVuY29kaW5nQ29kZWMoKX0pO1xuICAgICAgICBpZiAoc29ydCAhPT0gdW5kZWZpbmVkICYmIHNvcnQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1ldGVycyA9IHF1ZXJ5UGFyYW1ldGVycy5zZXQoJ3NvcnQnLCA8YW55PnNvcnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGhlYWRlcnMgPSB0aGlzLmRlZmF1bHRIZWFkZXJzO1xuICAgICAgICBpZiAocmVxSWQgIT09IHVuZGVmaW5lZCAmJiByZXFJZCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KCdyZXFJZCcsIFN0cmluZyhyZXFJZCkpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0b2tlbiAhPT0gdW5kZWZpbmVkICYmIHRva2VuICE9PSBudWxsKSB7XG4gICAgICAgICAgICBoZWFkZXJzID0gaGVhZGVycy5zZXQoJ3Rva2VuJywgU3RyaW5nKHRva2VuKSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyB0byBkZXRlcm1pbmUgdGhlIEFjY2VwdCBoZWFkZXJcbiAgICAgICAgbGV0IGh0dHBIZWFkZXJBY2NlcHRzOiBzdHJpbmdbXSA9IFtcbiAgICAgICAgICAgICdhcHBsaWNhdGlvbi9qc29uJ1xuICAgICAgICBdO1xuICAgICAgICBjb25zdCBodHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHRoaXMuY29uZmlndXJhdGlvbi5zZWxlY3RIZWFkZXJBY2NlcHQoaHR0cEhlYWRlckFjY2VwdHMpO1xuICAgICAgICBpZiAoaHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KCdBY2NlcHQnLCBodHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gdG8gZGV0ZXJtaW5lIHRoZSBDb250ZW50LVR5cGUgaGVhZGVyXG4gICAgICAgIGNvbnN0IGNvbnN1bWVzOiBzdHJpbmdbXSA9IFtcbiAgICAgICAgICAgICdhcHBsaWNhdGlvbi9qc29uJ1xuICAgICAgICBdO1xuICAgICAgICBjb25zdCBodHRwQ29udGVudFR5cGVTZWxlY3RlZDogc3RyaW5nIHwgdW5kZWZpbmVkID0gdGhpcy5jb25maWd1cmF0aW9uLnNlbGVjdEhlYWRlckNvbnRlbnRUeXBlKGNvbnN1bWVzKTtcbiAgICAgICAgaWYgKGh0dHBDb250ZW50VHlwZVNlbGVjdGVkICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaGVhZGVycyA9IGhlYWRlcnMuc2V0KCdDb250ZW50LVR5cGUnLCBodHRwQ29udGVudFR5cGVTZWxlY3RlZCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnBvc3Q8RmlsZURvd25sb2FkUmVzcG9uc2U+KGAke3RoaXMuYmFzZVBhdGh9L3YyL2FwaS9zbGljZXgvbGlzdC9jc3YvJHtlbmNvZGVVUklDb21wb25lbnQoU3RyaW5nKGVudGl0eSkpfWAsXG4gICAgICAgICAgICBzbGljZXhSZXF1ZXN0LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHBhcmFtczogcXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczogdGhpcy5jb25maWd1cmF0aW9uLndpdGhDcmVkZW50aWFscyxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiBoZWFkZXJzLFxuICAgICAgICAgICAgICAgIG9ic2VydmU6IG9ic2VydmUsXG4gICAgICAgICAgICAgICAgcmVwb3J0UHJvZ3Jlc3M6IHJlcG9ydFByb2dyZXNzXG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfVxuXG59XG4iXX0=