@ksremp/ngx-ksremp-app-lib 1.0.21 → 1.0.22

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 (73) hide show
  1. package/esm2022/lib/annimations/app-animations.mjs +1 -1
  2. package/esm2022/lib/components/captcha/captcha.component.mjs +6 -6
  3. package/esm2022/lib/components/card/card.component.mjs +1 -1
  4. package/esm2022/lib/components/content/content.component.mjs +1 -1
  5. package/esm2022/lib/components/error/error.component.mjs +1 -1
  6. package/esm2022/lib/components/file-download/file-download.component.mjs +1 -1
  7. package/esm2022/lib/components/file-uploader/file-uploader.component.mjs +1 -1
  8. package/esm2022/lib/components/help/help.component.mjs +1 -1
  9. package/esm2022/lib/components/idle-detector/idle-detector.component.mjs +1 -1
  10. package/esm2022/lib/components/info/info.component.mjs +1 -1
  11. package/esm2022/lib/components/maintenance-detector/maintenance-detector.component.mjs +1 -1
  12. package/esm2022/lib/components/mask/mask.component.mjs +1 -1
  13. package/esm2022/lib/components/money-expect/money-expect.component.mjs +1 -1
  14. package/esm2022/lib/components/msg/msg.component.mjs +1 -1
  15. package/esm2022/lib/components/news/news.component.mjs +1 -1
  16. package/esm2022/lib/components/overlay-info/overlay-info.component.mjs +1 -1
  17. package/esm2022/lib/components/page/page.component.mjs +1 -1
  18. package/esm2022/lib/components/questionnaire/FbConstants.mjs +1 -1
  19. package/esm2022/lib/components/questionnaire/dynamic-form-question.component.mjs +5 -4
  20. package/esm2022/lib/components/questionnaire/dynamic-form.component.mjs +3 -1
  21. package/esm2022/lib/components/questionnaire/question-base.mjs +1 -1
  22. package/esm2022/lib/components/questionnaire/question.service.mjs +1 -1
  23. package/esm2022/lib/components/read-more/read-more.component.mjs +6 -6
  24. package/esm2022/lib/components/select/select.component.mjs +1 -1
  25. package/esm2022/lib/components/ssn/ssn.component.mjs +1 -1
  26. package/esm2022/lib/components/test/test.component.mjs +1 -1
  27. package/esm2022/lib/directives/auto-focus/auto-focus.directive.mjs +1 -1
  28. package/esm2022/lib/directives/caps-lock.directive.mjs +1 -1
  29. package/esm2022/lib/directives/required-roles/required-roles.directive.mjs +1 -1
  30. package/esm2022/lib/enums/EmailStatusEnum.mjs +1 -1
  31. package/esm2022/lib/interceptors/error-interceptor/http-error-interceptor.mjs +1 -1
  32. package/esm2022/lib/models/ErrorModel.mjs +1 -1
  33. package/esm2022/lib/models/FileModel.mjs +1 -1
  34. package/esm2022/lib/models/NotificationModel.mjs +1 -1
  35. package/esm2022/lib/models/TrendModel.mjs +1 -1
  36. package/esm2022/lib/models/UserDetailsModel.mjs +1 -1
  37. package/esm2022/lib/models/claimant/ClaimantModel.mjs +1 -1
  38. package/esm2022/lib/models/claimant/JobResultsData.mjs +1 -1
  39. package/esm2022/lib/models/claimant/MatchingJobs.mjs +1 -1
  40. package/esm2022/lib/models/claimant/ResetPasswordModel.mjs +1 -1
  41. package/esm2022/lib/models/questionnaire/KeyValueModel.mjs +1 -1
  42. package/esm2022/lib/ngx-reusa-app-lib.component.mjs +5 -5
  43. package/esm2022/lib/ngx-reusa-app-lib.service.mjs +1 -1
  44. package/esm2022/lib/pages/common/accessibility-policy/accessibility-policy.page.mjs +1 -1
  45. package/esm2022/lib/pages/common/change-password/change-password.page.mjs +1 -1
  46. package/esm2022/lib/pages/common/landing2/landing2.component.mjs +1 -1
  47. package/esm2022/lib/pages/common/not-found/not-found.page.mjs +1 -1
  48. package/esm2022/lib/pages/common/privacy-disclaimer/privacy-disclaimer.page.mjs +1 -1
  49. package/esm2022/lib/pages/common/security-policy/security-policy.page.mjs +1 -1
  50. package/esm2022/lib/pages/common/unauthorized/unauthorized.page.mjs +1 -1
  51. package/esm2022/lib/pages/popovers/my-notifications/my-notifications.page.mjs +1 -1
  52. package/esm2022/lib/pages/popovers/my-profile/my-profile.page.mjs +1 -1
  53. package/esm2022/lib/pages/popovers/user-search/user-search.component.mjs +1 -1
  54. package/esm2022/lib/pipes/filter.pipe.mjs +1 -1
  55. package/esm2022/lib/pipes/mask/mask.email.pipe.mjs +1 -1
  56. package/esm2022/lib/pipes/proper-case/proper-case.pipe.mjs +1 -1
  57. package/esm2022/lib/pipes/trust-html/trust-html.pipe.mjs +1 -1
  58. package/esm2022/lib/services/base-service.mjs +1 -1
  59. package/esm2022/lib/services/captcha/captcha.service.mjs +1 -1
  60. package/esm2022/lib/services/chatbot/script.const.mjs +1 -1
  61. package/esm2022/lib/services/claimant/claimant.service.mjs +1 -1
  62. package/esm2022/lib/services/dms-service/dms.service.mjs +1 -1
  63. package/esm2022/lib/services/fpjs/fingerprint.service.mjs +1 -1
  64. package/esm2022/lib/services/google-analytics/google-analytics.service.mjs +1 -1
  65. package/esm2022/lib/services/idle/idle.service.mjs +1 -1
  66. package/esm2022/lib/services/maintenance/maintenance.service.mjs +1 -1
  67. package/esm2022/lib/services/notification/notification.service.mjs +1 -1
  68. package/esm2022/lib/services/tour/tour.service.mjs +1 -1
  69. package/fesm2022/ksremp-ngx-ksremp-app-lib.mjs +20 -17
  70. package/fesm2022/ksremp-ngx-ksremp-app-lib.mjs.map +1 -1
  71. package/lib/components/questionnaire/dynamic-form-question.component.d.ts +1 -1
  72. package/lib/components/questionnaire/dynamic-form.component.d.ts.map +1 -1
  73. package/package.json +2 -2
@@ -903,6 +903,7 @@ export class DynamicFormComponent extends BasePage {
903
903
  }
904
904
  nextPage(index) {
905
905
  this.logger.debug("next page called ---- ");
906
+ this.formGroupArray[this.activeIndex].markAllAsTouched();
906
907
  let formGroup = this.formGroupArray[index];
907
908
  let alienDocExpiryError = false;
908
909
  let countyError = false;
@@ -1136,6 +1137,7 @@ export class DynamicFormComponent extends BasePage {
1136
1137
  }
1137
1138
  complete() {
1138
1139
  this.logger.debug('complete method called =======');
1140
+ this.formGroupArray[this.activeIndex].markAllAsTouched();
1139
1141
  if (this.mfaRequired && this.showMfa && this.mfa) {
1140
1142
  this.mfa.submit();
1141
1143
  }
@@ -2126,4 +2128,4 @@ export class DynamicFormComponent extends BasePage {
2126
2128
  type: Output
2127
2129
  }] }); })();
2128
2130
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(DynamicFormComponent, { className: "DynamicFormComponent", filePath: "lib\\components\\questionnaire\\dynamic-form.component.ts", lineNumber: 50 }); })();
2129
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1yZXVzYS1hcHAtbGliL3NyYy9saWIvY29tcG9uZW50cy9xdWVzdGlvbm5haXJlL2R5bmFtaWMtZm9ybS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtcmV1c2EtYXBwLWxpYi9zcmMvbGliL2NvbXBvbmVudHMvcXVlc3Rpb25uYWlyZS9keW5hbWljLWZvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBYyxZQUFZLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQWlCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6SixPQUFPLEVBQW9CLFVBQVUsRUFBb0MsTUFBTSxnQkFBZ0IsQ0FBQztBQUdoRyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFJaEQsT0FBTyxFQUF5QixzQkFBc0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBS3JGLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLHlEQUF5RCxDQUFDO0FBSXZHLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUloRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBTTVDLE9BQU8sRUFBcUIsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFNckUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDRCQUE0QixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7SUM1QmhELCtCQUFzRCxrQkFBQSxjQUFBO0lBSWhELDBCQUNNOzs7SUFDUixpQkFBTSxFQUFBLEVBQUE7OztJQUxXLGVB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LENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDeEksTUFBTSxRQUFRLEdBQUcsU0FBUyxDQUFDLFdBQVcsRUFBRSxJQUFJLFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDckksTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLFdBQVcsRUFBRSxJQUFJLFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFFbkksV0FBVztRQUVYLElBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxVQUFVLElBQUUsU0FBUyxFQUFFO1lBQzNDLElBQUksQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxVQUFVLElBQUksU0FBUyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUEsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQSxFQUFFLENBQUM7WUFDaE8sSUFBSSxDQUFFLFVBQVUsR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDLFVBQVUsSUFBSSxTQUFTLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQSxDQUFDLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFBLEVBQUUsQ0FBQztZQUNqUCxJQUFJLENBQUUsTUFBTSxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUMsVUFBVSxJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFBLENBQUMsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUEsRUFBRSxDQUFDO1lBQ3pPLElBQUksQ0FBRSxLQUFLLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxVQUFVLElBQUksU0FBUyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQSxDQUFDLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUEsRUFBRSxDQUFDO1NBQzdQO1FBQ0QsV0FBVztRQUNYLElBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxTQUFTLElBQUUsU0FBUyxFQUFFO1lBQ3pDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDLFNBQVMsSUFBSSxTQUFTLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFBLEVBQUUsQ0FBQztZQUN6USxJQUFJLENBQUUsTUFBTSxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUMsU0FBUyxJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFBLENBQUMsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUEsRUFBRSxDQUFDO1lBQ3BPLElBQUksQ0FBRSxLQUFLLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxTQUFTLElBQUksU0FBUyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQSxDQUFDLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUEsRUFBRSxDQUFDO1NBQzFQO1FBRUUsSUFBRyxTQUFTLENBQUMsUUFBUSxDQUFDLFdBQVcsSUFBRSxTQUFTLElBQUssU0FBUyxDQUFDLFFBQVEsQ0FBQyxlQUFlLElBQUUsU0FBUyxFQUFFO1lBQzdGLElBQUksU0FBUyxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsS0FBSyxJQUFFLEdBQUcsRUFBQztnQkFDL0MsSUFBSSxDQUFFLFVBQVUsR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDLFdBQVcsSUFBSSxTQUFTLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQSxDQUFDLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFBLEVBQUUsQ0FBQztnQkFDbFAsSUFBSSxDQUFFLFNBQVMsR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDLFdBQVcsSUFBSSxTQUFTLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFBLENBQUMsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQSxFQUFFLENBQUM7YUFDelE7U0FDTjtRQUVDLElBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxXQUFXLElBQUUsU0FBUyxJQUFLLFNBQVMsQ0FBQyxRQUFRLENBQUMsa0JBQWtCLElBQUUsU0FBUyxFQUFFO1lBQzdGLElBQUksU0FBUyxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLElBQUUsR0FBRyxFQUFDO2dCQUN2RCxJQUFJLENBQUUsVUFBVSxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUMsV0FBVyxJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFBLENBQUMsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUEsRUFBRSxDQUFDO2dCQUNsUCxJQUFJLENBQUUsU0FBUyxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUMsV0FBVyxJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUEsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLEtBQUss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QUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQzthQUM5SjtpQkFBTTtnQkFDTCxPQUFPLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDakwsSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQzVKLEtBQUssR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQzNLLEdBQUcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2FBQzFKO1NBQ0Y7UUFDRCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUMzSSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNqSixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNqSixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FB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Q0FBQyxFQUFFLENBQUM7Z0JBQ2hLLEtBQUssR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQy9LLEdBQUcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2FBQzlKO2lCQUFNO2dCQUNMLE9BQU8sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUNqTCxJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDNUosS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDM0ssR0FBRyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7YUFDMUo7U0FDRjtRQUNELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQzNJLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ2pKLE1BQU0sS0FBSyxHQUFH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QixLQUFLO1lBQ0csUUFBUTtrQkFBaEIsS0FBSztZQUNHLFFBQVE7a0JBQWhCLEtBQUs7WUFDRyxRQUFRO2tCQUFoQixLQUFLO1lBQ0csUUFBUTtrQkFBaEIsS0FBSztZQThDRixPQUFPO2tCQURWLE1BQU07O2tGQTVGSSxvQkFBb0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkNoYW5nZXMsIE9uSW5pdCwgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgVW50eXBlZEZvcm1Hcm91cCwgVmFsaWRhdG9ycywgVmFsaWRhdG9yRm4sIEZvcm1Db250cm9sLCBOZ0Zvcm0gfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IE1lbnVJdGVtIH0gZnJvbSAncHJpbWVuZy9hcGknO1xyXG5pbXBvcnQgeyBRdWVzdGlvbkJhc2UgfSBmcm9tICcuL3F1ZXN0aW9uLWJhc2UnO1xyXG5pbXBvcnQgeyBRdWVzdGlvbkNvbnRyb2xTZXJ2aWNlIH0gZnJvbSAnLi9xdWVzdGlvbi1jb250cm9sLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBcHBWYWxpZGF0b3JzIH0gZnJvbSAnLi9BcHBWYWxpZGF0b3JzJztcclxuXHJcbmltcG9ydCB7IFF1ZXN0aW9uU2VydmljZSB9IGZyb20gJy4vcXVlc3Rpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IE5hdkNvbnRyb2xsZXIgfSBmcm9tICdAaW9uaWMvYW5ndWxhcic7XHJcbmltcG9ydCB7IFN0ZXBwZXJTZWxlY3Rpb25FdmVudCwgU1RFUFBFUl9HTE9CQUxfT1BUSU9OUyB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9zdGVwcGVyJztcclxuaW1wb3J0IHsgTWF0U3RlcHBlciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3N0ZXBwZXInO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IFZhbGlkYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcXVlc3Rpb25uYWlyZS92YWxpZGF0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBRdWVzdGlvbm5haXJlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3F1ZXN0aW9ubmFpcmUvcXVlc3Rpb25uYWlyZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ2xhaW1BcHBFbXBsb3llckRldGFpbHNNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9xdWVzdGlvbm5haXJlL0NsYWltQXBwRW1wbG95ZXJEZXRhaWxzTW9kZWwnO1xyXG5pbXBvcnQgeyBRdWVzdGlvbm5haXJlU2F2ZU1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3F1ZXN0aW9ubmFpcmUvUXVlc3Rpb25uYWlyZVNhdmVNb2RlbCc7XHJcbmltcG9ydCB7IFV0aWxTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdXRpbC91dGlsLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBMb2dnZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbG9nZ2VyL2xvZ2dlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQmFzZVBhZ2UgfSBmcm9tICcuLi8uLi9wYWdlcy9CYXNlUGFnZSc7XHJcbmltcG9ydCB7IFF1ZXN0aW9ubmFpcmVRdWVyeU1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3F1ZXN0aW9ubmFpcmUvUXVlc3Rpb25uYWlyZVF1ZXJ5TW9kZWwnO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XHJcbmltcG9ydCB7IFN0b3JhZ2UgfSBmcm9tICdAaW9uaWMvc3RvcmFnZS1hbmd1bGFyJztcclxuaW1wb3J0IHsgRmJDb25zdGFudHMgfSBmcm9tICcuL0ZiQ29uc3RhbnRzJztcclxuaW1wb3J0IHsgRWxlbWVudHNNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9xdWVzdGlvbm5haXJlL0VsZW1lbnRzTW9kZWwnO1xyXG5pbXBvcnQgeyBMb2dpblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9sb2dpbi9sb2dpbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRXJyb3JNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9FcnJvck1vZGVsJztcclxuaW1wb3J0IHsgTWZhQ29tcG9uZW50IH0gZnJvbSAnLi4vbWZhL21mYS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBMb2FkZXJNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9xdWVzdGlvbm5haXJlL0xvYWRlck1vZGVsJztcclxuaW1wb3J0IHsgSHR0cEVycm9yUmVzcG9uc2UsIEh0dHBQYXJhbXMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IENhcHRjaGFTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY2FwdGNoYS9jYXB0Y2hhLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBMZXhpc05leGlzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2xleGlzLW5leGlzL2xleGlzLm5leGlzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBMZXhpc05leGlzQWNjb3VudENyZWF0aW9uTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvTGV4aXNOZXhpc0FjY291bnRDcmVhdGlvbk1vZGVsJztcclxuaW1wb3J0IHsgTGV4aXNOZXhpc0VuYWJsZWRSZXNwb25zZU1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL0xleGlzTmV4aXNFbmFibGVkUmVzcG9uc2VNb2RlbCc7XHJcbmltcG9ydCB7IEFwcFJlZ2V4IH0gZnJvbSAnLi4vLi4vdmFsaWRhdGlvbnMvQXBwUmVnZXgnO1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC1keW5hbWljLWZvcm0nLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9keW5hbWljLWZvcm0uY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2R5bmFtaWMtZm9ybS5jb21wb25lbnQuc2NzcyddLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuRGVmYXVsdCxcclxuICBwcm92aWRlcnM6IFtRdWVzdGlvbkNvbnRyb2xTZXJ2aWNlLCB7XHJcbiAgICBwcm92aWRlOiBTVEVQUEVSX0dMT0JBTF9PUFRJT05TLFxyXG4gICAgdXNlVmFsdWU6IHtcclxuICAgICAgc2hvd0Vycm9yOiB0cnVlLFxyXG4gICAgICBkaXNwbGF5RGVmYXVsdEluZGljYXRvclR5cGU6IGZhbHNlXHJcbiAgICB9XHJcbiAgfV0sXHJcbn0pXHJcblxyXG5leHBvcnQgY2xhc3MgRHluYW1pY0Zvcm1Db21wb25lbnQgZXh0ZW5kcyBCYXNlUGFnZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcclxuICBcclxuICBAVmlld0NoaWxkKCdtZmEnKSBtZmE6IE1mYUNvbXBvbmVudDtcclxuXHJcbiAgQFZpZXdDaGlsZCgncXVlc3Rpb25uYWlyZUZvcm0nLCB7c3RhdGljIDogZmFsc2V9KSBcclxuICBwdWJsaWMgcXVlc3Rpb25uYWlyZUZvcm06IE5nRm9ybTtcclxuICBwdWJsaWMgcG90ZW50aWFsSXNzdWVJZDogbnVtYmVyO1xyXG4gIHB1YmxpYyBibG9ja1VpID0gZmFsc2U7XHJcbiAgcHVibGljIHNob3dNZmEgPSBmYWxzZTtcclxuICBASW5wdXQoKSBxdWVzdGlvbnM6IFF1ZXN0aW9uQmFzZTxzdHJpbmc+W10gPSBbXTtcclxuICBASW5wdXQoKSBmb3JTY3JlZW5RdWVzdGlvbm5haXJlOiBRdWVzdGlvbkJhc2U8Ym9vbGVhbj47XHJcbiAgQElucHV0KCkgaXNFbmFibGVCYWNrQnV0dG9uOkJvb2xlYW47XHJcbiAgQElucHV0KCkgYmFja0J1dHRvblBhZ2U6IHN0cmluZztcclxuICBASW5wdXQoKSBuZXh0QnV0dG9uUGFnZTogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHBhZ2VUeXBlOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgaGlkZUZvb3RlcjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIG11bHRpTW9kZTogYm9vbGVhbiA9IGZhbHNlOyAvL3doZW4gbXVsdGlwbGUgZm9ybXMgYXJlIGRpc3BsYXllZCBvbmUgYmVsb3cgdGhlIGFub3RoZXJcclxuICBASW5wdXQoKSBsb2FkZXJTZXJ2aWNlOnN0cmluZztcclxuICBwdWJsaWMgbG9hZGVyTW9kZWwgOiBMb2FkZXJNb2RlbDtcclxuICAvKipcclxuICAgKiB3aGVuIGF1dG9TYXZlIGlzIGZhbHNlLCBjb21wb25lbnQgd2lsbCBvbmx5IGVtaXQgdGhlIHZhbHVlIG9mIHRoZSBmb3JtIGJ1aWxlciBkYXRhIHdoaWNoIG5lZWRzIHRvIGJlIHNhdmVkIGJ5IHRoZSBjYWxsaW5nIGNvbXBvbmVudFxyXG4gICAqIG9ubHkgYXBwbGljYWJsZSB3aGVuIHBhZ2VUeXBlIGlzIG5vdCBQT1BVUCBhbmQgSlNPTlxyXG4gICoqL1xyXG4gIEBJbnB1dCgpIGF1dG9TYXZlOiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSBtZmFSZXF1aXJlZCA6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBAT3V0cHV0KCkgbW9kZWxDYW5jZWwgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XHJcbiAgQE91dHB1dCgpIG9uQ29tcGxldGUgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIG9uRXJyb3IgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQFZpZXdDaGlsZCgnbWF0SG9yaXpvbnRhbFN0ZXBwZXInKSBzdGVwcGVyOiBNYXRTdGVwcGVyO1xyXG4gIEBJbnB1dCgpIGRhdGE6IGFueTtcclxuICBASW5wdXQoKSByZWFkT25seUZpZWxkczogc3RyaW5nW107XHJcbiAgQElucHV0KCkgZm9ybVJlYWRPbmx5OiBCb29sZWFuO1xyXG4gIEBJbnB1dCgpIHF1ZXJ5TW9kZWw6IFF1ZXN0aW9ubmFpcmVRdWVyeU1vZGVsO1xyXG4gIEBJbnB1dCgpIGR5bmFtaWNQYXJhbSA6IGFueTtcclxuICBASW5wdXQoKSBmb3JtRGF0YTogYW55O1xyXG4gIEBJbnB1dCgpIHF1ZXN0aW9uTnVtYmVyOiBudW1iZXIgPSBudWxsO1xyXG5cclxuICBASW5wdXQoKSBzaXplWHMgOiBudW1iZXI7XHJcbiAgQElucHV0KCkgc2l6ZVNtIDogbnVtYmVyO1xyXG4gIEBJbnB1dCgpIHNpemVNZCA6IG51bWJlcjtcclxuICBASW5wdXQoKSBzaXplTGcgOiBudW1iZXI7XHJcbiAgQElucHV0KCkgc2l6ZVhsIDogbnVtYmVyO1xyXG5cclxuICBASW5wdXQoKSBvZmZzZXRYcyA6IG51bWJlcjtcclxuICBASW5wdXQoKSBvZmZzZXRTbSA6IG51bWJlcjtcclxuICBASW5wdXQoKSBvZmZzZXRNZCA6IG51bWJlcjtcclxuICBASW5wdXQoKSBvZmZzZXRMZyA6IG51bWJlcjtcclxuICBASW5wdXQoKSBvZmZzZXRYbCA6IG51bWJlcjtcclxuXHJcbiAgLy8gZm9ybTogRm9ybUdyb3VwO1xyXG4gIGZvcm1Hcm91cEFycmF5OiBVbnR5cGVkRm9ybUdyb3VwW10gPSBbXTtcclxuICBwYXlMb2FkID0gJyc7XHJcbiAgaXRlbXM6IE1lbnVJdGVtW10gPSBbXTtcclxuICBpc0ZpcnN0OiBib29sZWFuID0gdHJ1ZTtcclxuICBpc0xhc3Q6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBzdWJtaXR0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBoaWRlU3RlcDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGlkZW50aWZpZXI6IHN0cmluZyA9IFwiXCI7XHJcbiAgYWN0aXZlSW5kZXg6IG51bWJlciA9IDA7XHJcbiAgZXJyb3JPY2N1cmVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgbWZhRGF0YSA6IGFueTtcclxuICBtZmFFcnJvciA6IEVycm9yTW9kZWw7XHJcbiAgc3NuRm9yQ1NSIDogc3RyaW5nO1xyXG4gIHBheW1lbnREZXRhaWxDaGFuZ2VIYXNFcnJvciA6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgaXNMZXhpc05leGlzUG9wdXBFbmFibGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgaW5wdXREYXRhIDogUXVlc3Rpb25uYWlyZVNhdmVNb2RlbDtcclxuICByZXNwb25zZVV1aWQgOiBzdHJpbmcgPSBcIlwiO1xyXG4gIHVzZXJEZXRhaWxzIDogTGV4aXNOZXhpc0FjY291bnRDcmVhdGlvbk1vZGVsO1xyXG4gIGZvcm1SYXdEYXRhIDogYW55O1xyXG4gIGZsb3dLZXkgOiBudW1iZXI7XHJcblxyXG4gICBCYW5rRGV0YWlsc0ludmFsaWRFcnJvcjogc3RyaW5nPVwiXCI7XHJcbiAgIHJvdXRpbmdOdW1iZXJmbGFnIDogYm9vbGVhbiA9IHRydWU7XHJcbiAgIGFjY291bnROdW1iZXJmbGc6IGJvb2xlYW4gPSB0cnVlO1xyXG4gICByZUVudGVyQWNjb3VudE51bWJlcmZsYWc6IGJvb2xlYW4gPSB0cnVlO1xyXG4gICAgcmVzWmlwY29kZVZhbGlkYXRpb25mbGFnOiBib29sZWFuID0gdHJ1ZTtcclxuICAgIHJlc1N0cmVldEFkZHJlc3M6IHN0cmluZyA9IFwiXCI7XHJcbiAgICByZXNaaXBjb2RlOiAgc3RyaW5nPVwiXCI7XHJcbiAgICByZXNDb3VudHJ5OiBzdHJpbmc9XCJcIjtcclxuICAgIG1haWxaaXBjb2RlOiBzdHJpbmc9XCJcIjtcclxuICAgIG1haWxDb250cnkgOiBzdHJpbmc9XCJcIjtcclxuICAgIGNvdW50eSA6IHN0cmluZz1cIlwiO1xyXG4gICAgc3RhdGUgOiAgc3RyaW5nPVwiXCI7XHJcblxyXG4gICAgIGRpZmZjb3VudHkgOiBzdHJpbmc9XCJcIjtcclxuICAgIGRpZmZzdGF0ZSA6ICBzdHJpbmc9XCJcIjtcclxuICAgIGRpZmZNYWlsQWRyZXNzRmxhZyA6Ym9vbGVhbj1mYWxzZTtcclxuICAgIHJlc1N0cmVldEFkZHJlc3NWYWxpZGF0aW9uZmxhZzogYm9vbGVhbiA9IHRydWU7XHJcblxyXG5cclxuICBcclxuICBAT3V0cHV0KClcclxuICBnZXQgaW52YWxpZCgpIHtcclxuICAgIHJldHVybiB0aGlzLmZvcm1Hcm91cEFycmF5Lm1hcCh4ID0+IHguaW52YWxpZCkucmVkdWNlKChhLGIpID0+IGEgJiYgYik7XHJcbiAgfVxyXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBxZXM6IFF1ZXN0aW9uU2VydmljZSwgcHVibGljIHF1ZXN0aW9ubmFpcmVTZXJ2aWNlOiBRdWVzdGlvbm5haXJlU2VydmljZSwgcHVibGljIG5hdkN0cmw6IE5hdkNvbnRyb2xsZXIsXHJcbiAgICBwcml2YXRlIHFjczogUXVlc3Rpb25Db250cm9sU2VydmljZSwgcHVibGljIHV0aWw6IFV0aWxTZXJ2aWNlLHByaXZhdGUgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBsb2dnZXI6IExvZ2dlclNlcnZpY2UsIHB1YmxpYyB2YWxpZGF0aW9uU2VydmljZTogVmFsaWRhdGlvblNlcnZpY2UsIHB1YmxpYyBlbDogRWxlbWVudFJlZiwgcHJpdmF0ZSBhY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUsXHJcbiAgICBwdWJsaWMgc3RvcmFnZSA6IFN0b3JhZ2UsIHB1YmxpYyBscyA6IExvZ2luU2VydmljZSwgcHVibGljIGNhcHRjaGEgOiBDYXB0Y2hhU2VydmljZSwgcHVibGljIGxuOiBMZXhpc05leGlzU2VydmljZSwgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcikge1xyXG4gICAgc3VwZXIoKTtcclxuICAgIHRoaXMuc3RvcmFnZS5jcmVhdGUoKS50aGVuKCgpID0+IHtcclxuICAgICAgY29uc29sZS5sb2coXCJTdG9yYWdlIERCIGNyZWF0ZWQgc3VjY2Vzc2Z1bGx5LlwiKTtcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICAvKlRoaXMgd2lsbCBiZSBjYWxsZWQgd2hlbmV2ZXIgQElucHV0ICdmb3JtRGF0YScgdmFsdWUgaXMgY2hhbmdlZCBmb3IgdGhpcyBjb250cm9sKi8gICBcclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICBpZihjaGFuZ2VzLmZvcm1EYXRhPy5jdXJyZW50VmFsdWUpe1xyXG4gICAgICBpZihjaGFuZ2VzLmZvcm1EYXRhLmN1cnJlbnRWYWx1ZSl7XHJcbiAgICAgICAgdGhpcy5zZXRGb3JtVmFsdWVzKGNoYW5nZXMuZm9ybURhdGEuY3VycmVudFZhbHVlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYoY2hhbmdlcy5yZWFkT25seUZpZWxkcz8uY3VycmVudFZhbHVlKXtcclxuICAgICAgZm9yIChsZXQgY250cmxOYW1lIG9mIGNoYW5nZXMucmVhZE9ubHlGaWVsZHMuY3VycmVudFZhbHVlKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZm9ybUdyb3VwQXJyYXlbdGhpcy5hY3RpdmVJbmRleF0/LmdldChjbnRybE5hbWUpKSB7XHJcbiAgICAgICAgICB0aGlzLmZvcm1Hcm91cEFycmF5W3RoaXMuYWN0aXZlSW5kZXhdPy5nZXQoY250cmxOYW1lKS5kaXNhYmxlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYoY2hhbmdlcy5yZWFkT25seUZpZWxkcz8ucHJldmlvdXNWYWx1ZSAmJiBjaGFuZ2VzLnJlYWRPbmx5RmllbGRzLmN1cnJlbnRWYWx1ZSA9PSBudWxsKXtcclxuICAgICAgZm9yIChsZXQgY250cmxOYW1lIG9mIGNoYW5nZXMucmVhZE9ubHlGaWVsZHMucHJldmlvdXNWYWx1ZSkge1xyXG4gICAgICAgIGlmICh0aGlzLmZvcm1Hcm91cEFycmF5W3RoaXMuYWN0aXZlSW5kZXhdPy5nZXQoY250cmxOYW1lKSkge1xyXG4gICAgICAgICAgdGhpcy5mb3JtR3JvdXBBcnJheVt0aGlzLmFjdGl2ZUluZGV4XT8uZ2V0KGNudHJsTmFtZSkuZW5hYmxlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRGb3JtVmFsdWVzKGRhdGEpe1xyXG4gICAgT2JqZWN0LmtleXMoZGF0YSlcclxuICAgICAgICAgICAgICAuZm9yRWFjaChrZXkgPT4ge1xyXG4gICAgICAgICAgICAgICAgbGV0IHF1ZXN0aW9uID0gdGhpcy5nZXRGb3JtQ29udHJvbENvbmZpZ3VyYXRpb24oa2V5KTtcclxuICAgICAgICAgICAgICAgIGxldCB2YWx1ZVRvU2V0ID0gZGF0YVtrZXldO1xyXG4gICAgICAgICAgICAgICAgaWYocXVlc3Rpb24pe1xyXG4gICAgICAgICAgICAgICAgICAvKiogRm9yIGRyb3Bkb3duIGZvcm0gY29udHJvbCwgZXhwZWN0aW5nIHRvIGdldCBkYXRhIGluIGZvcm0ge3ZhbHVlIDogXCJzb21lVmFsdWVcIiwgdGV4dDogbnVsbH0uXHJcbiAgICAgICAgICAgICAgICAgICAqIEJhc2VkIG9uIHRoZSB2YWx1ZSBhdHRyaWJ1dGUsIG9wdGlvbiB3aWxsIGJlIHNldCBvbiBmb3JtIGNvbnRyb2wgYWZ0ZXIgcmVhZGluZyBpdCBmcm9tIGNob2ljZXNcclxuICAgICAgICAgICAgICAgICAgICogYXJyYXkuXHJcbiAgICAgICAgICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICAgICAgIGlmKHZhbHVlVG9TZXQpe1xyXG4gICAgICAgICAgICAgICAgICBsZXQgY2hvaWNlID0gcXVlc3Rpb24uY2hvaWNlcy5maWx0ZXIobyA9PiBvLnZhbHVlID09ICh2YWx1ZVRvU2V0Py52YWx1ZSA/IHZhbHVlVG9TZXQudmFsdWUgOiB2YWx1ZVRvU2V0KSlbMF07XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2V0VmFsdWVJbkZvcm1Db250cm9sKGtleSwgY2hvaWNlKTtcclxuICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZUluRm9ybUNvbnRyb2woa2V5LCB2YWx1ZVRvU2V0KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9KTtcclxuICB9XHJcblxyXG4gIHNldFZhbHVlSW5Gb3JtQ29udHJvbChuYW1lLCB2YWx1ZSl7XHJcbiAgICBpZih0aGlzLmZvcm1Hcm91cEFycmF5ICYmIHRoaXMuZm9ybUdyb3VwQXJyYXkubGVuZ3RoID4gMCl7XHJcbiAgICAgIGxldCBjb250cm9sID0gdGhpcy5mb3JtR3JvdXBBcnJheVt0aGlzLmFjdGl2ZUluZGV4XT8uY29udHJvbHNbbmFtZV07XHJcbiAgICAgIGlmKGNvbnRyb2wpe1xyXG4gICAgICAgIGNvbnRyb2wucGF0Y2hWYWx1ZSh2YWx1ZSk7XHJcbiAgICAgIH0gZWxzZSBpZihuYW1lID09ICdkZXBlbmRlbnRUYWJsZScpe1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ05vIGZvcm0gY29udHJvbCBwcmVzZW50IGRlcGVuZGVudFRhYmxlICcsIG5hbWUpO1xyXG4gICAgICB9ZWxzZXtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdObyBmb3JtIGNvbnRyb2wgcHJlc2VudCB3aXRoIG5hbWUgJywgbmFtZSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcIk5vIGZvcm0gZ3JvdXAgcHJlc2VudCBzbyBza2lwcGluZyB2YWx1ZSBhc3NpZ25tZW50IGZyb20gZGF0YS5cIik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKiBUbyBnZXQgdGhlIGRyb3Bkb3duIGVsZW1lbnQgc28gdGhhdCB2YWx1ZSBmcm9tIHRoZSBjaG9pY2VzIGNhbiBiZSByZWFkIGFuZCBzZXQgaW50byB0aGUgZm9ybSBjb250cm9sKi9cclxuICBnZXRGb3JtQ29udHJvbENvbmZpZ3VyYXRpb24obmFtZSl7XHJcbiAgICBsZXQgZmlsdGVyZWRWYWx1ZXMgPSB0aGlzLnF1ZXN0aW9uc1swXS5wYWdlc1t0aGlzLmFjdGl2ZUluZGV4XS5lbGVtZW50cy5maWx0ZXIocSA9PiBxLm5hbWUgPT0gbmFtZSAmJiBxLnR5cGUgPT0gJ2Ryb3Bkb3duJyk7XHJcbiAgICBpZihmaWx0ZXJlZFZhbHVlcyAmJiBmaWx0ZXJlZFZhbHVlcy5sZW5ndGggPiAwKXtcclxuICAgICAgcmV0dXJuIGZpbHRlcmVkVmFsdWVzWzBdO1xyXG4gICAgfWVsc2Uge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldHVwTG9hZGVyTW9kZWwoKSB7XHJcbiAgXHJcbiAgICBpZiAodGhpcy5sb2FkZXJTZXJ2aWNlKSB7XHJcbiAgICAgIGxldCBzZXJ2aWNlVXJsczogc3RyaW5nW10gPSB0aGlzLmxvYWRlclNlcnZpY2Uuc3BsaXQoJywnKTtcclxuICAgICAgbGV0IHNlcnZpY2VVcmwgPSBzZXJ2aWNlVXJsc1t0aGlzLmFjdGl2ZUluZGV4XTtcclxuICAgICAgaWYoc2VydmljZVVybC50cmltKCkgIT0gJ251bGwnKXtcclxuICAgICAgdGhpcy5ibG9ja0Zvcm1VaSgpO1xyXG4gICAgICBsZXQgc2VydmljZVVybFZhbHVlID0gc2VydmljZVVybC50cmltKCk7XHJcbiAgICAgIGlmKHRoaXMubHMuaXNDc3IoKSl7XHJcbiAgICAgICAgc2VydmljZVVybFZhbHVlID0gc2VydmljZVVybFZhbHVlOyAgICAgICBcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5scy5pc0NzcigpID8geyBwYXJhbXM6IG5ldyBIdHRwUGFyYW1zKCkuc2V0KCdzc24nLCB0aGlzLnNzbkZvckNTUikgfSA6IHt9O1xyXG4gICAgICB0aGlzLnZhbGlkYXRpb25TZXJ2aWNlXHJcbiAgICAgICAgLmdldDxMb2FkZXJNb2RlbD4oYCR7c2VydmljZVVybFZhbHVlfWAsIG9wdGlvbnMpXHJcbiAgICAgICAgLnN1YnNjcmliZShcclxuICAgICAgICAgIHJlcyA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZGVyTW9kZWwgPSByZXM7XHJcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKFwibG9hZGVyIG1vZGVsICA9IFwiICsgdGhpcy5sb2FkZXJNb2RlbCk7ICAgICAgIFxyXG4gICAgICAgICAgICB0aGlzLnVuYmxvY2tGb3JtVWkoKTtcclxuICAgICAgICAgICAgaWYodGhpcy5sb2FkZXJNb2RlbCAmJiB0aGlzLmxvYWRlck1vZGVsLmRpc2FibGVDb250cm9sTmFtZXMpe1xyXG4gICAgICAgICAgICAgIHRoaXMucmVhZE9ubHlGaWVsZHMgPSB0aGlzLmxvYWRlck1vZGVsLmRpc2FibGVDb250cm9sTmFtZXM7XHJcbiAgICAgICAgICAgICAgZm9yIChsZXQgY250cmxOYW1lIG9mIHRoaXMucmVhZE9ubHlGaWVsZHMpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmZvcm1Hcm91cEFycmF5W3RoaXMuYWN0aXZlSW5kZXhdPy5nZXQoY250cmxOYW1lKSkge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmZvcm1Hcm91cEFycmF5W3RoaXMuYWN0aXZlSW5kZXhdPy5nZXQoY250cmxOYW1lKS5kaXNhYmxlKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmKHRoaXMucWNzLmdldERhdGEodGhpcy5hY3RpdmVJbmRleCkgIT0gbnVsbCl7XHJcbiAgICAgICAgICAgICAgdGhpcy5mb3JtRGF0YSA9IEpTT04ucGFyc2UodGhpcy5xY3MuZ2V0RGF0YSh0aGlzLmFjdGl2ZUluZGV4KSk7XHJcbiAgICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXBBcnJheVt0aGlzLmFjdGl2ZUluZGV4XS5wYXRjaFZhbHVlKHRoaXMuZm9ybURhdGEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmKHRoaXMubG9hZGVyTW9kZWwgJiYgdGhpcy5sb2FkZXJNb2RlbC5kYXRhKXtcclxuICAgICAgICAgICAgICB0aGlzLmZvcm1EYXRhID0gdGhpcy5sb2FkZXJNb2RlbC5kYXRhO1xyXG4gICAgICAgICAgICAgIHRoaXMuc2V0Rm9ybVZhbHVlcyh0aGlzLmZvcm1EYXRhKTtcclxuICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGVyciA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMudXRpbC5oaWRlTG9hZGVyKCk7XHJcbiAgICAgICAgICAgIHRoaXMudXRpbC5lcnJvckhhbmRsZXIoZXJyKTtcclxuICAgICAgICAgICAgdGhpcy51bmJsb2NrRm9ybVVpKCk7XHJcbiAgICAgICAgICB9KVxyXG4gICAgfSBcclxuICB9IGVsc2Uge1xyXG4gICAgaWYodGhpcy5xY3MuZ2V0RGF0YSh0aGlzLmFjdGl2ZUluZGV4KSAhPSBudWxsKXtcclxuICAgICAgdGhpcy5mb3JtRGF0YSA9IEpTT04ucGFyc2UodGhpcy5xY3MuZ2V0RGF0YSh0aGlzLmFjdGl2ZUluZGV4KSk7XHJcbiAgICAgIHRoaXMuZm9ybUdyb3VwQXJyYXlbdGhpcy5hY3RpdmVJbmRleF0ucGF0Y2hWYWx1ZSh0aGlzLmZvcm1EYXRhKTtcclxuICAgIH1cclxuICAgIGlmKHRoaXMuZGF0YSl7XHJcbiAgICAgIHRoaXMuZm9ybURhdGEgPSB0aGlzLmRhdGE7XHJcbiAgICAgIHRoaXMuc2V0Rm9ybVZhbHVlcyh0aGlzLmZvcm1EYXRhKTtcclxuICAgIH0gZWxzZSBpZih0aGlzLmZvcm1EYXRhKXtcclxuICAgICAgdGhpcy5zZXRGb3JtVmFsdWVzKHRoaXMuZm9ybURhdGEpO1xyXG4gICAgfSAgXHJcbiAgfSBcclxufVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdJbml0IG1ldGhvZCBjYWxsZWQgZnJvbSBkeW5hbWljIGZvcm0nLCB0aGlzLnF1ZXN0aW9ucylcclxuICAgIHRoaXMubG9nZ2VyLmRlYnVnKCcgYmFja0J1dHRvblBhZ2UgJywgdGhpcy5iYWNrQnV0dG9uUGFnZSwgJyBuZXh0QnV0dG9uUGFnZScsIHRoaXMubmV4dEJ1dHRvblBhZ2UpO1xyXG4gICAgaWYgKCF0aGlzLnF1ZXN0aW9ucykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5xdWVzdGlvbnNbMF0ucGFnZXMubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgIHRoaXMuaGlkZVN0ZXAgPSB0cnVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5pc0ZpcnN0ID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIGxldCBzdHJLZXkgPSBbXTtcclxuICAgIGxldCBwYXJhbU1hcCA9IG5ldyBNYXAoKTtcclxuICAgIHRoaXMuYWN0aXZhdGVkUm91dGUucXVlcnlQYXJhbU1hcC5zdWJzY3JpYmUocGFyYW1zID0+IHtcclxuICAgICAgc3RyS2V5ID0gW10gPSBwYXJhbXMua2V5cztcclxuICAgICAgdGhpcy5pZGVudGlmaWVyID0gcGFyYW1zLmdldCgnaWRlbnRpZmllcicpO1xyXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0cktleS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdzdHJpbmdLZXkgJywgc3RyS2V5W2ldLCBwYXJhbXMuZ2V0KHN0cktleVtpXSkpO1xyXG4gICAgICAgIHBhcmFtTWFwLnNldChzdHJLZXlbaV0sIHBhcmFtcy5nZXQoc3RyS2V5W2ldKSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYocGFyYW1NYXAuZ2V0KFwia2V5XCIpICE9IG51bGwpe1xyXG4gICAgICAgIHRoaXMuc3NuRm9yQ1NSID0gYXRvYihwYXJhbU1hcC5nZXQoXCJrZXlcIikpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICApO1xyXG4gICAgXHJcbiAgICBsZXQgY291bnRlciA9IHRoaXMucXVlc3Rpb25zWzBdLnN0ZXBDb3VudGVyO1xyXG4gICAgdGhpcy5hY3RpdmVJbmRleCA9IGNvdW50ZXIgPyBjb3VudGVyIDogMCA7XHJcbiAgICAvL3RoaXMuc3RlcHBlclxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnF1ZXN0aW9uc1swXS5wYWdlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgZm9ybUdyb3VwOiBVbnR5cGVkRm9ybUdyb3VwO1xyXG4gICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhcIkJsb2NrIHN0YXRlbWVudCBleGVjdXRpb24gbm8uXCIsIHRoaXMucXVlc3Rpb25zWzBdLnBhZ2VzLmxlbmd0aCk7XHJcbiAgICAgIGZvcm1Hcm91cCA9IHRoaXMucWNzLnRvRm9ybUdyb3VwKHRoaXMucXVlc3Rpb25zLCBpLCBwYXJhbU1hcCk7XHJcbiAgICAgIHRoaXMuc2V0VmFsaWRhdGlvbihpLCBmb3JtR3JvdXApO1xyXG5cclxuICAgICAgdGhpcy5zZXRWYWx1ZVN1YnNjcmlwdGlvbihpLCBmb3JtR3JvdXApO1xyXG4gICAgICB0aGlzLnNldFJlYWRPbmx5KGksIGZvcm1Hcm91cCk7XHJcbiAgICAgIHZhciBwYWdlczogYW55ID0gdGhpcy5xdWVzdGlvbnNbMF0ucGFnZXNbaV07XHJcbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdwYWdlcycsIHBhZ2VzKVxyXG4gICAgICBsZXQgdmFsaWRhdG9yRnVuY3Rpb25MaXN0OiBBcnJheTxWYWxpZGF0b3JGbj4gPSBbXTtcclxuICAgICAgaWYgKHBhZ2VzLmVsZW1lbnRzKSB7XHJcbiAgICAgICAgcGFnZXMuZWxlbWVudHMuZm9yRWFjaCgoZWxlbWVudCA6IEVsZW1lbnRzTW9kZWwpID0+IHtcclxuXHJcbiAgICAgICAgICBsZXQgY29udHJsVHlwZTogc3RyaW5nID0gZWxlbWVudC50eXBlO1xyXG4gICAgICAgICAgaWYgKGNvbnRybFR5cGUgPT09ICdwYW5lbCcpIHtcclxuICAgICAgICAgICAgLy90aGlzLmxvZ2dlci5kZWJ1ZygnSW5zaWRlIElmJyxlbGVtZW50KVxyXG4gICAgICAgICAgICBlbGVtZW50LmVsZW1lbnRzLmZvckVhY2gocGFuZWxFbGVtZW50ID0+IHtcclxuICAgICAgICAgICAgICBpZiAocGFuZWxFbGVtZW50LnJlcXVpcmVkSWYgJiYgKChwYW5lbEVsZW1lbnQudHlwZSAhPSAnYnV0dG9uJyAmJiBwYW5lbEVsZW1lbnQudHlwZSAhPSAnc2ltcGxlTGFiZWwnJiYgcGFuZWxFbGVtZW50LnR5cGUgIT0gJ2xhYmVsJykgfHwgcGFuZWxFbGVtZW50LmNvbXBvbmVudE5hbWUgPT0gJ2FwcC1saW5rJyB8fCBwYW5lbEVsZW1lbnQuY29tcG9uZW50TmFtZSA9PSAnYXBwLXNpZ24tc3NuJykpIHtcclxuICAgICAgICAgICAgICAgIHZhbGlkYXRvckZ1bmN0aW9uTGlzdC5wdXNoKEFwcFZhbGlkYXRvcnMuc2V0UmVxdWlyZWRJZlZhbGlkYXRpb24ocGFuZWxFbGVtZW50LCB0aGlzLnFjcy5nZXRBbGxEYXRhKCkpKTtcclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIGlmIChwYW5lbEVsZW1lbnQudmFsaWRhdG9ycykge1xyXG4gICAgICAgICAgICAgICAgbGV0IHZhbGlkYXRvckxpc3QgPSBwYW5lbEVsZW1lbnQudmFsaWRhdG9ycztcclxuICAgICAgICAgICAgICAgIC8vdGhpcy5sb2dnZXIuZGVidWcoXCJwYW5lbCB2YWxpZGF0aW9uLjExMVwiLHBhbmVsRWxlbWVudCk7XHJcbiAgICAgICAgICAgICAgICB2YWxpZGF0b3JMaXN0LmZvckVhY2godmFsaWRhdG9yID0+IHtcclxuICAgICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRvci50eXBlID09PSAnZXhwcmVzc2lvbicgJiYgcGFuZWxFbGVtZW50LmlucHV0VHlwZSAmJiBwYW5lbEVsZW1lbnQuaW5wdXRUeXBlID09PSAnZGF0ZScpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnSW5zaWRlIGV4cHJlc3Npb24nKVxyXG4gICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvckZ1bmN0aW9uTGlzdC5wdXNoKEFwcFZhbGlkYXRvcnMuc2V0RGF0ZVZhbGlkYXRpb24ocGFuZWxFbGVtZW50LCB0aGlzLnFjcy5nZXRBbGxEYXRhKCkpKTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICBpZiAodmFsaWRhdG9yLnR5cGUgPT09ICdleHByZXNzaW9uJyAmJiBwYW5lbEVsZW1lbnQuaW5wdXRUeXBlICYmIHBhbmVsRWxlbWVudC5pbnB1dFR5cGUgPT09ICd0ZXh0J1xyXG4gICAgICAgICAgICAgICAgICAgICYmIHBhbmVsRWxlbWVudC5jdXN0b21UYWcgJiYgKHBhbmVsRWxlbWVudC5jdXN0b21UYWcgPT09ICdwYXNzd29yZCcgfHwgIHBhbmVsRWxlbWVudC5jdXN0b21UYWcgPT09ICdlbWFpbCcgfHwgIHBhbmVsRWxlbWVudC5jdXN0b21UYWcgPT09ICdzc24nKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdJbnNpZGUgZXhwcmVzc2lvbicpXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yRnVuY3Rpb25MaXN0LnB1c2goQXBwVmFsaWRhdG9ycy5zZXRQYXNzd29yZFZhbGlkYXRpb24ocGFuZWxFbGVtZW50LCB0aGlzLnFjcy5nZXRBbGxEYXRhKCkpKTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICBpZiAodmFsaWRhdG9yLnR5cGUgPT09ICdjdXN0b212YWxpZGF0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvckZ1bmN0aW9uTGlzdC5wdXNoKEFwcFZhbGlkYXRvcnMuY3VzdG9tVmFsaWRhdGlvbihwYW5lbEVsZW1lbnQsIHZhbGlkYXRvciwgdGhpcy51dGlsLmdldFN0YXRlKCkpKTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgLy90aGlzLmxvZ2dlci5kZWJ1ZygnSW5zaWRlIGVsc2UnLGVsZW1lbnQpXHJcbiAgICAgICAgICAgIGlmIChlbGVtZW50LnJlcXVpcmVkSWYgJiYgKChlbGVtZW50LnR5cGUgIT0gJ2J1dHRvbicgJiYgZWxlbWVudC50eXBlICE9ICdzaW1wbGVMYWJlbCcgJiYgZWxlbWVudC50eXBlICE9ICdsYWJlbCcpIHx8IGVsZW1lbnQuY29tcG9uZW50TmFtZSA9PSAnYXBwLWxpbmsnIHx8IGVsZW1lbnQuY29tcG9uZW50TmFtZSA9PSAnYXBwLXNpZ24tc3NuJykpIHtcclxuICAgICAgICAgICAgICB2YWxpZGF0b3JGdW5jdGlvbkxpc3QucHVzaChBcHBWYWxpZGF0b3JzLnNldFJlcXVpcmVkSWZWYWxpZGF0aW9uKGVsZW1lbnQsIHRoaXMucWNzLmdldEFsbERhdGEoKSkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChlbGVtZW50LnZhbGlkYXRvcnMpIHtcclxuICAgICAgICAgICAgICBsZXQgdmFsaWRhdG9yTGlzdCA9IGVsZW1lbnQudmFsaWRhdG9ycztcclxuICAgICAgICAgICAgICB2YWxpZGF0b3JMaXN0LmZvckVhY2godmFsaWRhdG9yID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0b3IudHlwZSA9PT0gJ2V4cHJlc3Npb24nICYmIGVsZW1lbnQuaW5wdXRUeXBlICYmIGVsZW1lbnQuaW5wdXRUeXBlID09PSAnZGF0ZScpIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ0luc2lkZSBleHByZXNzaW9uJylcclxuICAgICAgICAgICAgICAgICAgdmFsaWRhdG9yRnVuY3Rpb25MaXN0LnB1c2goQXBwVmFsaWRhdG9ycy5zZXREYXRlVmFsaWRhdGlvbihlbGVtZW50LCB0aGlzLnFjcy5nZXRBbGxEYXRhKCkpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0b3IudHlwZSA9PT0gJ2N1c3RvbXZhbGlkYXRpb24nKSB7XHJcbiAgICAgICAgICAgICAgICAgIHZhbGlkYXRvckZ1bmN0aW9uTGlzdC5wdXNoKEFwcFZhbGlkYXRvcnMuY3VzdG9tVmFsaWRhdGlvbihlbGVtZW50LCB2YWxpZGF0b3IsIHRoaXMudXRpbC5nZXRTdGF0ZSgpKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGVsZW1lbnQuc2VydmljZVR5cGUgJiYgZWxlbWVudC5zZXJ2aWNlVHlwZSA9PT0gJ1ZBTElEQVRFJykge1xyXG4gICAgICAgICAgICAgIC8vdmFsaWRhdG9yRnVuY3Rpb25MaXN0LnB1c2goQXBwVmFsaWRhdG9ycy5jcmVhdGVWYWxpZGF0b3IodGhpcy52YWxpZGF0aW9uU2VydmljZSxlbGVtZW50KSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGZvcm1Hcm91cC5zZXRWYWxpZGF0b3JzKHZhbGlkYXRvckZ1bmN0aW9uTGlzdCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5mb3JtR3JvdXBBcnJheS5wdXNoKGZvcm1Hcm91cCk7XHJcbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKFwicGFnZXMucWVEYXRhXCIsIHBhZ2VzLnFlRGF0YSk7XHJcbiAgICAgIGlmKHBhZ2VzLnFlRGF0YSl7XHJcbiAgICAgICAgZm9ybUdyb3VwLnBhdGNoVmFsdWUocGFnZXMucWVEYXRhKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhcInNldCB2YWx1ZXMgYXMgcGVyIGxvYWRlciBzZXJ2aWNlID0gXCIsIHRoaXMuZm9ybURhdGEpO1xyXG4gICAgICBpZiAodGhpcy5mb3JtRGF0YSAmJiB0aGlzLmZvcm1EYXRhKSB7XHJcbiAgICAgICAgdGhpcy5zZXRGb3JtVmFsdWVzKHRoaXMuZm9ybURhdGEpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLmZvcm1SZWFkT25seSkge1xyXG4gICAgICAgIHRoaXMuZm9ybUdyb3VwQXJyYXlbaV0uZGlzYWJsZSgpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLnJlYWRPbmx5RmllbGRzICYmIHRoaXMucmVhZE9ubHlGaWVsZHMpIHtcclxuICAgICAgICBmb3IgKGxldCBjbnRybE5hbWUgb2YgdGhpcy5yZWFkT25seUZpZWxkcykge1xyXG4gICAgICAgICAgaWYgKHRoaXMuZm9ybUdyb3VwQXJyYXlbaV0uZ2V0KGNudHJsTmFtZSkpIHtcclxuICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXBBcnJheVtpXS5nZXQoY250cmxOYW1lKS5kaXNhYmxlKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zZXR1cExvYWRlck1vZGVsKCk7XHJcbiAgICBcclxuICAgIGlmICh0aGlzLnBhZ2VUeXBlID09PSAnUE9QVVAnKSB7XHJcbiAgICAgIGxldCBtb2RlbCA9IG5ldyBDbGFpbUFwcEVtcGxveWVyRGV0YWlsc01vZGVsKCk7XHJcbiAgICAgIG1vZGVsID0gdGhpcy5kYXRhO1xyXG4gICAgICB0aGlzLmZvcm1Hcm91cEFycmF5WzBdLnBhdGNoVmFsdWUobW9kZWwpO1xyXG4gICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygndGhpcy5mb3JtR3JvdXBBcnJheSBhZnRlciBJRicsIHRoaXMuZm9ybUdyb3VwQXJyYXkpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnBhZ2VUeXBlID09PSAnSnNvbicgJiYgdGhpcy5mb3JtRGF0YSkge1xyXG4gICAgICB0aGlzLmZvcm1Hcm91cEFycmF5WzBdLnBhdGNoVmFsdWUodGhpcy5mb3JtRGF0YSk7XHJcbiAgICAgIGlmICh0aGlzLmZvcm1SZWFkT25seSkge1xyXG4gICAgICAgIHRoaXMuZm9ybUdyb3VwQXJyYXlbMF0uZGlzYWJsZSgpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGZvciAobGV0IGNudHJsTmFtZSBvZiB0aGlzLnJlYWRPbmx5RmllbGRzKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5mb3JtR3JvdXBBcnJheVswXS5nZXQoY250cmxOYW1lKSkge1xyXG4gICAgICAgICAgICB0aGlzLmZvcm1Hcm91cEFycmF5WzBdLmdldChjbnRybE5hbWUpLmRpc2FibGUoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBsZXQgY3VycmVudFFlID0gdGhpcy5xZXMuc2VhcmNoQnMuZ2V0VmFsdWUoKTtcclxuICAgIHRoaXMucG90ZW50aWFsSXNzdWVJZCA9IGN1cnJlbnRRZT8ucG90ZW50aWFsSXNzdWVJZDtcclxuICB9XHJcblxyXG4gIHNldFZhbHVlU3Vic2NyaXB0aW9uKHBhZ2VJbmRleDogbnVtYmVyLCBmb3JtR3JvdXA6IFVudHlwZWRGb3JtR3JvdXApIHtcclxuICAgIHZhciBwYWdlczogYW55ID0gdGhpcy5xdWVzdGlvbnNbMF0ucGFnZXNbcGFnZUluZGV4XTtcclxuICAgIGlmIChwYWdlcy5lbGVtZW50cykge1xyXG4gICAgICBwYWdlcy5lbGVtZW50cy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xyXG4gICAgICAgIGxldCBjb250cmxUeXBlOiBzdHJpbmcgPSBlbGVtZW50LnR5cGU7XHJcbiAgICAgICAgaWYgKGVsZW1lbnQuc3Vic2NyaWJlVmFsdWVPZikge1xyXG4gICAgICAgICAgZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQuc3Vic2NyaWJlVmFsdWVPZl1cclxuICAgICAgICAgICAgICAgICAgICAudmFsdWVDaGFuZ2VzXHJcbiAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSh2YWx1ZSA9PiBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS5zZXRWYWx1ZSh2YWx1ZSkpO1xyXG4gICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgIGlmIChjb250cmxUeXBlID09PSAncGFuZWwnKSB7XHJcbiAgICAgICAgICAvLyAgdGhpcy5sb2dnZXIuZGVidWcoJ0luc2lkZSBwYW5lbENvbnRybFR5cGUnLCAgZWxlbWVudC5lbGVtZW50cylcclxuICAgICAgICAgIGVsZW1lbnQuZWxlbWVudHMuZm9yRWFjaChwYW5lbEVsZW1lbnQgPT4ge1xyXG4gICAgICAgICAgICBpZiAocGFuZWxFbGVtZW50LnN1YnNjcmliZVZhbHVlT2YpIHtcclxuICAgICAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHNbcGFuZWxFbGVtZW50LnN1YnNjcmliZVZhbHVlT2ZdLnZhbHVlQ2hhbmdlcy5cclxuICAgICAgICAgICAgICAgIHN1YnNjcmliZSgoY2hhbmdlKSA9PiBmb3JtR3JvdXAuY29udHJvbHNbcGFuZWxFbGVtZW50Lm5hbWVdLnNldFZhbHVlKGNoYW5nZSkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICApXHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldFJlYWRPbmx5KHBhZ2VJbmRleDogbnVtYmVyLCBmb3JtR3JvdXA6IFVudHlwZWRGb3JtR3JvdXApIHtcclxuICAgIHZhciBwYWdlczogYW55ID0gdGhpcy5xdWVzdGlvbnNbMF0ucGFnZXNbcGFnZUluZGV4XTtcclxuICAgIGlmIChwYWdlcy5lbGVtZW50cykge1xyXG4gICAgICBwYWdlcy5lbGVtZW50cy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xyXG4gICAgICAgIGxldCBjb250cmxUeXBlOiBzdHJpbmcgPSBlbGVtZW50LnR5cGU7XHJcbiAgICAgICAgaWYgKGVsZW1lbnQucmVhZG9ubHkpIHtcclxuICAgICAgICAgIGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLmRpc2FibGUoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChjb250cmxUeXBlID09PSAncGFuZWwnKSB7XHJcbiAgICAgICAgICAvLyAgdGhpcy5sb2dnZXIuZGVidWcoJ0luc2lkZSBwYW5lbENvbnRybFR5cGUnLCAgZWxlbWVudC5lbGVtZW50cylcclxuICAgICAgICAgIGVsZW1lbnQuZWxlbWVudHMuZm9yRWFjaChwYW5lbEVsZW1lbnQgPT4ge1xyXG4gICAgICAgICAgICBpZiAoZWxlbWVudC5yZWFkb25seSkge1xyXG4gICAgICAgICAgICAgIGZvcm1Hcm91cC5jb250cm9sc1twYW5lbEVsZW1lbnQubmFtZV0uZGlzYWJsZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICApXHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldFZhbGlkYXRpb24ocGFnZUluZGV4OiBudW1iZXIsIGZvcm1Hcm91cDogVW50eXBlZEZvcm1Hcm91cCkge1xyXG4gICAgdmFyIHBhZ2VzOiBhbnkgPSB0aGlzLnF1ZXN0aW9uc1swXS5wYWdlc1twYWdlSW5kZXhdO1xyXG4gICAgLy90aGlzLnF1ZXN0aW9uc1swXS5wYWdlcy5mb3JFYWNoKHBhZ2VzID0+IHtcclxuICAgIGlmIChwYWdlcy5lbGVtZW50cykge1xyXG4gICAgICBwYWdlcy5lbGVtZW50cy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xyXG4gICAgICAgIGxldCBjb250cmxUeXBlOiBzdHJpbmcgPSBlbGVtZW50LnR5cGU7XHJcbiAgICAgICAgLy8gIHRoaXMubG9nZ2VyLmRlYnVnKCdlbGVtZW50ID09ICcsZWxlbWVudCk7XHJcbiAgICAgICAgaWYgKGNvbnRybFR5cGUgPT09ICd0ZXh0JyB8fCBjb250cmxUeXBlID09PSAnbnVtYmVyJykge1xyXG4gICAgICAgICAgdGhpcy5zZXRWYWxpZGF0aW9uRm9yVGV4dENvbnRyb2woZWxlbWVudCwgZm9ybUdyb3VwKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNvbnRybFR5cGUgPT09ICdjb21tZW50Jykge1xyXG4gICAgICAgICAgdGhpcy5zZXRWYWxpZGF0aW9uRm9yQ29tbWVudENvbnRyb2woZWxlbWVudCwgZm9ybUdyb3VwKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNvbnRybFR5cGUgPT09ICdkcm9wZG93bicpIHtcclxuICAgICAgICAgIHRoaXMuc2V0VmFsaWRhdGlvbkZvckRyb3BEb3duQ29udHJvbChlbGVtZW50LCBmb3JtR3JvdXApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY29udHJsVHlwZSA9PT0gJ3JhZGlvZ3JvdXAnIHx8IGNvbnRybFR5cGUgPT09ICdhdXRvY29tcGxldGUnKSB7XHJcbiAgICAgICAgICB0aGlzLnNldFZhbGlkYXRpb25Gb3JSYWRpb0NvbnRyb2woZWxlbWVudCwgZm9ybUdyb3VwKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNvbnRybFR5cGUgPT09ICdjaGVja2JveCcgfHwgY29udHJsVHlwZSA9PT0gJ3NpbmdsZXNlbGVjdGNoZWNrYm94JyB8fCBjb250cmxUeXBlID09PSAnc2ltcGxlY2hlY2tib3gnIHx8IGNvbnRybFR5cGUgPT09ICdtdWx0aWNoZWNrYm94Jykge1xyXG4gICAgICAgICAgLy8gdGhpcy5sb2dnZXIuZGVidWcoJ3NpbmdsZXNlbGVjdGNoZWNrYm94IGNhbGxlZCcsZWxlbWVudCk7XHJcbiAgICAgICAgICB0aGlzLnNldFZhbGlkYXRpb25Gb3JDaGVja0JveENvbnRyb2woZWxlbWVudCwgZm9ybUdyb3VwKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChjb250cmxUeXBlID09PSAncGFuZWwnKSB7XHJcbiAgICAgICAgICAvLyAgdGhpcy5sb2dnZXIuZGVidWcoJ0luc2lkZSBwYW5lbENvbnRybFR5cGUnLCAgZWxlbWVudC5lbGVtZW50cylcclxuICAgICAgICAgIGVsZW1lbnQuZWxlbWVudHMuZm9yRWFjaChwYW5lbEVsZW1lbnQgPT4ge1xyXG4gICAgICAgICAgICBsZXQgcGFuZWxDb250cmxUeXBlOiBzdHJpbmcgPSBwYW5lbEVsZW1lbnQudHlwZTtcclxuXHJcbiAgICAgICAgICAgIGlmIChwYW5lbENvbnRybFR5cGUgPT09ICdkcm9wZG93bicpIHtcclxuICAgICAgICAgICAgICAvLyB0aGlzLmxvZ2dlci5kZWJ1ZygnSW5zaWRlIHBhbmVsQ29udHJsVHlwZScsIHBhbmVsRWxlbWVudClcclxuICAgICAgICAgICAgICB0aGlzLnNldFZhbGlkYXRpb25Gb3JEcm9wRG93bkNvbnRyb2wocGFuZWxFbGVtZW50LCBmb3JtR3JvdXApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChwYW5lbENvbnRybFR5cGUgPT09ICd0ZXh0JyB8fCBwYW5lbENvbnRybFR5cGUgPT09ICdudW1iZXInKSB7XHJcbiAgICAgICAgICAgICAgLy8gdGhpcy5sb2dnZXIuZGVidWcoJ3BhbmVsQ29udHJsVHlwZScsICBwYW5lbENvbnRybFR5cGUsJ3BhbmVsRWxlbWVudCcscGFuZWxFbGVtZW50KVxyXG4gICAgICAgICAgICAgIHRoaXMuc2V0VmFsaWRhdGlvbkZvclRleHRDb250cm9sKHBhbmVsRWxlbWVudCwgZm9ybUdyb3VwKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAocGFuZWxDb250cmxUeXBlID09PSAncmFkaW9ncm91cCcgfHwgcGFuZWxDb250cmxUeXBlID09PSAnYXV0b2NvbXBsZXRlJykge1xyXG4gICAgICAgICAgICAgIHRoaXMuc2V0VmFsaWRhdGlvbkZvclJhZGlvQ29udHJvbChwYW5lbEVsZW1lbnQsIGZvcm1Hcm91cCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChwYW5lbENvbnRybFR5cGUgPT09ICdjaGVja2JveCcgfHwgcGFuZWxDb250cmxUeXBlID09PSAnc2luZ2xlc2VsZWN0Y2hlY2tib3gnKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZXRWYWxpZGF0aW9uRm9yQ2hlY2tCb3hDb250cm9sKHBhbmVsRWxlbWVudCwgZm9ybUdyb3VwKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgKVxyXG4gICAgfVxyXG4gICAgLy99KTtcclxuICB9XHJcblxyXG5cclxuICBzZXRWYWxpZGF0aW9uRm9yQ2hlY2tCb3hDb250cm9sKGVsZW1lbnQ6IGFueSwgZm9ybUdyb3VwOiBVbnR5cGVkRm9ybUdyb3VwKSB7XHJcbiAgICBpZiAoZm9ybUdyb3VwICYmIGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdKSB7XHJcbiAgICAgIGxldCB2YWxpZGF0b3JGdW5jdGlvbkxpc3Q6IEFycmF5PFZhbGlkYXRvckZuPiA9IFtdO1xyXG4gICAgICBpZiAoZWxlbWVudC5pc1JlcXVpcmVkICYmICFlbGVtZW50LnJlcXVpcmVkSWYpIHtcclxuICAgICAgICB2YWxpZGF0b3JGdW5jdGlvbkxpc3QucHVzaChWYWxpZGF0b3JzLnJlcXVpcmVkKTtcclxuICAgICAgfVxyXG4gICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS5zZXRWYWxpZGF0b3JzKHZhbGlkYXRvckZ1bmN0aW9uTGlzdCk7XHJcbiAgICAgIGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldFZhbGlkYXRpb25Gb3JSYWRpb0NvbnRyb2woZWxlbWVudDogYW55LCBmb3JtR3JvdXA6IFVudHlwZWRGb3JtR3JvdXApIHtcclxuICAgIGlmIChmb3JtR3JvdXAgJiYgZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0pIHtcclxuICAgICAgbGV0IHZhbGlkYXRvckZ1bmN0aW9uTGlzdDogQXJyYXk8VmFsaWRhdG9yRm4+ID0gW107XHJcblxyXG4gICAgICBpZiAoZWxlbWVudC5pc1JlcXVpcmVkICYmICFlbGVtZW50LnJlcXVpcmVkSWYpIHtcclxuICAgICAgICB2YWxpZGF0b3JGdW5jdGlvbkxpc3QucHVzaChWYWxpZGF0b3JzLnJlcXVpcmVkKTtcclxuICAgICAgfVxyXG4gICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS5zZXRWYWxpZGF0b3JzKHZhbGlkYXRvckZ1bmN0aW9uTGlzdCk7XHJcbiAgICAgIGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICBzZXRWYWxpZGF0aW9uRm9yRHJvcERvd25Db250cm9sKGVsZW1lbnQ6IGFueSwgZm9ybUdyb3VwOiBVbnR5cGVkRm9ybUdyb3VwKSB7XHJcbiAgICBpZiAoZm9ybUdyb3VwICYmIGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdKSB7XHJcbiAgICAgIGxldCB2YWxpZGF0b3JGdW5jdGlvbkxpc3Q6IEFycmF5PFZhbGlkYXRvckZuPiA9IFtdO1xyXG4gICAgICAvL1ZhbGlkYXRpb24gbmVlZCB0byBiZSBjaGVja1xyXG4gICAgICBpZiAoZWxlbWVudC5pc1JlcXVpcmVkICYmICFlbGVtZW50LnJlcXVpcmVkSWYpIHtcclxuICAgICAgICAvL3RoaXMubG9nZ2VyLmRlYnVnKCdzZXRWYWxpZGF0aW9uRm9yRHJvcERvd25Db250cm9sJywgZWxlbWVudC5uYW1lKVxyXG4gICAgICAgIHZhbGlkYXRvckZ1bmN0aW9uTGlzdC5wdXNoKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG4gICAgICB9XHJcbiAgICAgIGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLnNldFZhbGlkYXRvcnModmFsaWRhdG9yRnVuY3Rpb25MaXN0KTtcclxuICAgICAgZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG5cclxuICAgIH1cclxuICAgIC8vdGhpcy5sb2dnZXIuZGVidWcoZWxlbWVudC5uYW1lLCdmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXScsZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0pO1xyXG4gIH1cclxuXHJcblxyXG4gIHNldFZhbGlkYXRpb25Gb3JDb21tZW50Q29udHJvbChlbGVtZW50OiBhbnksIGZvcm1Hcm91cDogVW50eXBlZEZvcm1Hcm91cCkge1xyXG4gICAgaWYgKGZvcm1Hcm91cCAmJiBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXSkge1xyXG4gICAgICBsZXQgdmFsaWRhdG9yRnVuY3Rpb25MaXN0OiBBcnJheTxWYWxpZGF0b3JGbj4gPSBbXTtcclxuICAgICAgaWYgKGVsZW1lbnQuaXNSZXF1aXJlZCAmJiAhZWxlbWVudC5yZXF1aXJlZElmKSB7XHJcbiAgICAgICAgdmFsaWRhdG9yRnVuY3Rpb25MaXN0LnB1c2goVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcbiAgICAgIH1cclxuICAgICAgZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0uc2V0VmFsaWRhdG9ycyh2YWxpZGF0b3JGdW5jdGlvbkxpc3QpO1xyXG4gICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRWYWxpZGF0aW9uRm9yVGV4dENvbnRyb2woZWxlbWVudDogYW55LCBmb3JtR3JvdXA6IFVudHlwZWRGb3JtR3JvdXApIHtcclxuICAgIC8vIHRoaXMubG9nZ2VyLmRlYnVnKCdzZXRWYWxpZGF0aW9uRm9yVGV4dENvbnRyb2wnLGVsZW1lbnQpO1xyXG4gICAgaWYgKGZvcm1Hcm91cCAmJiBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXSkge1xyXG4gICAgICBsZXQgdmFsaWRhdG9yRnVuY3Rpb25MaXN0OiBBcnJheTxWYWxpZGF0b3JGbj4gPSBbXTtcclxuICAgICAgaWYgKGVsZW1lbnQuaXNSZXF1aXJlZCAmJiAhZWxlbWVudC5yZXF1aXJlZElmKSB7XHJcbiAgICAgICAgLy8gdGhpcy5sb2dnZXIuZGVidWcoJ3NldFZhbGlkYXRpb25Gb3JUZXh0Q29udHJvbCBpc1JlcXVpcmVkICcsZWxlbWVudCk7XHJcbiAgICAgICAgdmFsaWRhdG9yRnVuY3Rpb25MaXN0LnB1c2goVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGVsZW1lbnQudmFsaWRhdG9ycykge1xyXG4gICAgICAgIGxldCB2YWxpZGF0b3JMaXN0ID0gZWxlbWVudC52YWxpZGF0b3JzO1xyXG4gICAgICAgIHZhbGlkYXRvckxpc3QuZm9yRWFjaCh2YWxpZGF0b3IgPT4ge1xyXG4gICAgICAgICAgaWYgKHZhbGlkYXRvci50eXBlID09PSAnZXhwcmVzc2lvbicgJiYgZWxlbWVudC5pbnB1dFR5cGUgJiYgZWxlbWVudC5pbnB1dFR5cGUgPT09ICdkYXRlJykge1xyXG4gICAgICAgICAgICAvL3RoaXMubG9nZ2VyLmRlYnVnKCdJbnNpZGUgZXhwcmVzc2lvbicpXHJcbiAgICAgICAgICAgIC8vIHZhbGlkYXRvckZ1bmN0aW9uTGlzdC5wdXNoKEFwcFZhbGlkYXRvcnMuc2V0RGF0ZVZhbGlkYXRpb24odmFsaWRhdG9yLmV4cHJlc3Npb24sIHRoaXMucWNzLmdldEFsbERhdGEoKSwgeyBkYXRlQ29tcGFyaXNpb246IHRydWUgfSkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKHZhbGlkYXRvci50eXBlID09PSAncmVnZXgnKSB7XHJcbiAgICAgICAgICAgIHZhbGlkYXRvckZ1bmN0aW9uTGlzdC5wdXNoKFZhbGlkYXRvcnMucGF0dGVybih2YWxpZGF0b3IucmVnZXgpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmICh2YWxpZGF0b3IudHlwZSA9PT0gJ3RleHQnICYmIHZhbGlkYXRvci5taW5MZW5ndGgpIHtcclxuICAgICAgICAgICAgdmFsaWRhdG9yRnVuY3Rpb25MaXN0LnB1c2goVmFsaWRhdG9ycy5taW5MZW5ndGgodmFsaWRhdG9yLm1pbkxlbmd0aCkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKHZhbGlkYXRvci50eXBlID09PSAndGV4dCcgJiYgdmFsaWRhdG9yLm1heExlbmd0aCkge1xyXG4gICAgICAgICAgICB2YWxpZGF0b3JGdW5jdGlvbkxpc3QucHVzaChWYWxpZGF0b3JzLm1heExlbmd0aCh2YWxpZGF0b3IubWF4TGVuZ3RoKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAodmFsaWRhdG9yLnR5cGUgPT09ICdudW1lcmljJykge1xyXG4gICAgICAgICAgICB2YWxpZGF0b3JGdW5jdGlvbkxpc3QucHVzaChWYWxpZGF0b3JzLm1heCh2YWxpZGF0b3IubWF4VmFsdWUpKTtcclxuICAgICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgIH0pXHJcblxyXG4gICAgICB9XHJcbiAgICAgIGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLnNldFZhbGlkYXRvcnModmFsaWRhdG9yRnVuY3Rpb25MaXN0KTtcclxuICAgICAgZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG5cclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5leHRQYWdlKGluZGV4OiBudW1iZXIpIHtcclxuICAgIHRoaXMubG9nZ2VyLmRlYnVnKFwibmV4dCBwYWdlIGNhbGxlZCAtLS0tIFwiKVxyXG4gICAgbGV0IGZvcm1Hcm91cCA9IHRoaXMuZm9ybUdyb3VwQXJyYXlbaW5kZXhdO1xyXG4gICAgbGV0IGFsaWVuRG9jRXhwaXJ5RXJyb3IgPSBmYWxzZTtcclxuICAgIGxldCBjb3VudHlFcnJvcj1mYWxzZTtcclxuICAgIGlmKGZvcm1Hcm91cC52YWx1ZS5hbGllbkRvY1R5cGUgIT0gbnVsbCAmJiBmb3JtR3JvdXAudmFsdWUuYWxpZW5Eb2NUeXBlLnZhbHVlICE9IFwiSS05NFwiIFxyXG4gICAgICAmJiBmb3JtR3JvdXAudmFsdWUuYWxpZW5Eb2NFeHBEYXRlID09IG51bGwpe1xyXG4gICAgICAgIGFsaWVuRG9jRXhwaXJ5RXJyb3IgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgICBpZihmb3JtR3JvdXAudmFsdWUucmVzQWRyZXNzIT11bmRlZmluZWQgICYmIGZvcm1Hcm91cC52YWx1ZS5yZXNBZHJlc3Muc3RhdGUudmFsdWUhPSBudWxsICYmIGZvcm1Hcm91cC52YWx1ZS5yZXNBZHJlc3Muc3RhdGUudmFsdWU9PT0nS1MnKXtcclxuICAgICAgIGlmKGZvcm1Hcm91cC52YWx1ZS5yZXNBZHJlc3MuY291bnR5LnZhbHVlPT09bnVsbCl7XHJcbiAgICAgICAgIGNvdW50eUVycm9yPXRydWU7XHJcbiAgICAgICB9XHJcbiAgICAgfSAgIFxyXG5cclxuICAgIGlmIChmb3JtR3JvdXAuaW52YWxpZCB8fCBhbGllbkRvY0V4cGlyeUVycm9yICkge1xyXG4gICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnSW5zaWRlIGlmJywgZm9ybUdyb3VwKTtcclxuICAgICAgaWYoYWxpZW5Eb2NFeHBpcnlFcnJvcil7XHJcbiAgICAgICAgZm9ybUdyb3VwLmdldCgnYWxpZW5Eb2NFeHBEYXRlJykubWFya0FzVG91Y2hlZCgpO1xyXG4gICAgICAgIGZvcm1Hcm91cC5nZXQoJ2FsaWVuRG9jRXhwRGF0ZScpLm1hcmtBc0RpcnR5KCk7XHJcbiAgICAgICAgZm9ybUdyb3VwLmdldCgnYWxpZW5Eb2NFeHBEYXRlJykuc2V0RXJyb3JzKHsgcmVxdWlyZWQ6IHRydWUgfSk7XHJcbiAgICAgIH0gICAgXHJcblxyXG4gICAgICBmb3JtR3JvdXAubWFya0FsbEFzVG91Y2hlZCgpO1xyXG4gICAgICBPYmplY3QudmFsdWVzKGZvcm1Hcm91cC5jb250cm9scykuZm9yRWFjaChjb250cm9sID0+IHtcclxuICAgICAgICBjb250cm9sLm1hcmtBc0RpcnR5KCk7XHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm47XHJcbiAgICAgIFxyXG4gICAgfVxyXG5cclxuXHJcbiAgICBcclxuICAgIC8vUEdMUC00MjMzO1xyXG4gICAgIGlmKGNvdW50eUVycm9yKXtcclxuICAgICAgICAgICBpZihsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcImxhbmd1YWdlXCIpID09PSBcImVzXCIpe1xyXG4gICAgICAgIGNvbnN0IGNvdW50eUVycm9yID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIFwiZXJyb3JJZFwiOiBcIlwiLFxyXG4gICAgICAgICAgICAgICAgICAgIFwidGltZXN0YW1wXCI6IFwiXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJtc2dcIjogW1xyXG4gICAgICAgICAgICAgICAgICAgIFwiW0VsIFNlIHJlcXVpZXJlIGVsIGNvbmRhZG8gXFx0XFx0LlxcdFxcdF1cIiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICAgICAgICBcImRldGFpbHNcIjogXCJ1cmk9L3F1ZXN0aW9ubmFpcmUtc2VydmljZS9xdWVzdGlvbm5haXJlL3NjcmVlbi1xdWVzdGlvbm5haXJlXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJlcnJvclwiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIFwiZXJyb3JDb2RlXCI6IFwiNDIyXCJcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uRXJyb3IuZW1pdChjb3VudHlFcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICBjb25zdCBjb3VudHlFcnJvciA9IHtcclxuICAgICAgICAgICAgICAgICAgICBcImVycm9ySWRcIjogXCJcIixcclxuICAgICAgICAgICAgICAgICAgICBcInRpbWVzdGFtcFwiOiBcIlwiLFxyXG4gICAgICAgICAgICAgICAgICAgIFwibXNnXCI6IFtcclxuICAgICAgICAgICAgICAgICAgICBcIltDb3VudHkgaXMgcmVxdWlyZWQgXFx0XFx0LlxcdFxcdF1cIlxyXG4gICAgICAgICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgICAgICAgXCJkZXRhaWxzXCI6IFwidXJpPS9xdWVzdGlvbm5haXJlLXNlcnZpY2UvcXVlc3Rpb25uYWlyZS9zY3JlZW4tcXVlc3Rpb25uYWlyZVwiLFxyXG4gICAgICAgICAgICAgICAgICAgIFwiZXJyb3JcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBcImVycm9yQ29kZVwiOiBcIjQyMlwiXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkVycm9yLmVtaXQoY291bnR5RXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICB9ICBcclxuXHJcbiAgICAgICAgICB9IFxyXG5cclxuXHJcbiAgICAgICAgICBpZihmb3JtR3JvdXAuY29udHJvbHMubWFpbEFkZHJlc3MhPXVuZGVmaW5lZCAgJiYgZm9ybUdyb3VwLmNvbnRyb2xzLmRpZmZtYWlsYWRkcmVzcyE9dW5kZWZpbmVkICl7XHJcbiAgICAgICAgICBpZiggZm9ybUdyb3VwLmNvbnRyb2xzLmRpZmZtYWlsYWRkcmVzcy52YWx1ZT09J1knKXtcclxuICAgICAgICAgICAgIHRoaXMuIGRpZmZjb3VudHkgPSBmb3JtR3JvdXAuY29udHJvbHMubWFpbEFkZHJlc3MgJiYgZm9ybUdyb3VwLmNvbnRyb2xzLm1haWxBZGRyZXNzLnZhbHVlLmNvdW50eSA/IChmb3JtR3JvdXAuY29udHJvbHMubWFpbEFkZHJlc3MudmFsdWUuY291bnR5KTogZm9ybUdyb3VwLmNvbnRyb2xzLm1haWxBZGRyZXNzLnZhbHVlLmNvdW50eSA/IChmb3JtR3JvdXAuY29udHJvbHMubWFpbEFkZHJlc3MudmFsdWUuY291bnR5KSA6XCJcIjtcclxuICAgICAgICAgICAgIHRoaXMuIGRpZmZzdGF0ZSA9IGZvcm1Hcm91cC5jb250cm9scy5tYWlsQWRkcmVzcyAmJiBmb3JtR3JvdXAuY29udHJvbHMubWFpbEFkZHJlc3MudmFsdWUuc3RhdGUudmFsdWUgPyAoZm9ybUdyb3VwLmNvbnRyb2xzLm1haWxBZGRyZXNzLnZhbHVlLnN0YXRlLnZhbHVlKTogZm9ybUdyb3VwLmNvbnRyb2xzLm1haWxBZGRyZXNzLnZhbHVlLnN0YXRlLnZhbHVlID8gKGZvcm1Hcm91cC5jb250cm9scy5tYWlsQWRkcmVzcy52YWx1ZS5zdGF0ZS52YWx1ZSkgOlwiXCI7XHJcbiAgICAgICAgfVxyXG4gIH1cclxuICBcclxuICAgLy8gUEdMUC00MjMzXHJcbiAgICAgaWYoZm9ybUdyb3VwLmNvbnRyb2xzLm1haWxBZGRyZXNzIT11bmRlZmluZWQgICYmIGZvcm1Hcm91cC5jb250cm9scy5kaWZmbWFpbGFkZHJlc3MhPXVuZGVmaW5lZCApe1xyXG4gICAgICAgICAgICAgIHRoaXMuZGlmZk1haWxBZHJlc3NGbGFnPWZhbHNlO1xyXG4gICAgICAgICAgaWYoZm9ybUdyb3VwLmNvbnRyb2xzLmRpZmZtYWlsYWRkcmVzcy52YWx1ZT09J1knICl7XHJcbiAgICAgICAgICAgIHRoaXMuZGlmZk1haWxBZHJlc3NGbGFnPXRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgIH1cclxuXHQgIFxyXG5cdCAgXHJcblx0ICAgICAgaWYodGhpcy5kaWZmTWFpbEFkcmVzc0ZsYWcpe1xyXG4gICAgICBpZih0aGlzLmRpZmZzdGF0ZSE9XCJcIiAmJnRoaXMuZGlmZnN0YXRlPT09XCJLU1wiKXtcclxuICAgICAgICAgaWYodGhpcy5kaWZmY291bnR5PT09XCJcIil7XHJcbiAgICAgICAgICAgICBpZihsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcImxhbmd1YWdlXCIpID09PSBcImVzXCIpe1xyXG4gICAgICAgIGNvbnN0IGRpZmZjb3VudHlFcnJvciA9IHtcclxuICAgICAgICAgICAgICAgICAgICBcImVycm9ySWRcIjogXCJcIixcclxuICAgICAgICAgICAgICAgICAgICBcInRpbWVzdGFtcFwiOiBcIlwiLFxyXG4gICAgICAgICAgICAgICAgICAgIFwibXNnXCI6IFtcclxuICAgICAgICAgICAgICAgICAgICBcIltTU2UgcmVxdWllcmUgbGEgZGlyZWNjacOzbiBwb3N0YWwgZGVsIGNvbmRhZG8uIFxcdFxcdC5cXHRcXHRdXCIgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgICAgICAgXCJkZXRhaWxzXCI6IFwidXJpPS9xdWVzdGlvbm5haXJlLXNlcnZpY2UvcXVlc3Rpb25uYWlyZS9zY3JlZW4tcXVlc3Rpb25uYWlyZVwiLFxyXG4gICAgICAgICAgICAgICAgICAgIFwiZXJyb3JcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBcImVycm9yQ29kZVwiOiBcIjQyMlwiXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkVycm9yLmVtaXQoZGlmZmNvdW50eUVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGRpZmZjb3VudHlFcnJvciA9IHtcclxuICAgICAgICAgICAgICAgICAgICBcImVycm9ySWRcIjogXCJcIixcclxuICAgICAgICAgICAgICAgICAgICBcInRpbWVzdGFtcFwiOiBcIlwiLFxyXG4gICAgICAgICAgICAgICAgICAgIFwibXNnXCI6IFtcclxuICAgICAgICAgICAgICAgICAgICBcIltNYWlsaW5nIEFkZHJlc3MgQ291bnR5IGlzIHJlcXVpcmVkIFxcdFxcdC5cXHRcXHRdXCJcclxuICAgICAgICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICBcImVycm9yXCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJlcnJvckNvZGVcIjogXCI0MjJcIlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25FcnJvci5lbWl0KGRpZmZjb3VudHlFcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgIH0gICAgICAgICAgICBcclxuICAgICAgICAgfSAgXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgICAgICBcclxuICAgICAgICAgICAgIFxyXG5cclxuICAgIHRoaXMucWNzLnNldERhdGEodGhpcy5hY3RpdmVJbmRleCwgSlNPTi5zdHJpbmdpZnkoZm9ybUdyb3VwLmdldFJhd1ZhbHVlKCkpKTtcclxuICAgIC8vTG9naWMgdG8gc2F2ZSBzdGFydFxyXG4gICAgbGV0IHN0ckludG9PYmo7XHJcbiAgICB0aGlzLnFjcy5nZXRBbGxEYXRhKCkuZm9yRWFjaChkYXRhID0+IHtcclxuICAgICAgc3RySW50b09iaiA9IChkYXRhKTtcclxuICAgICAgdGhpcy5wYXlMb2FkID0gKHRoaXMucGF5TG9hZCArIHN0ckludG9PYmopO1xyXG4gICAgfSk7XHJcblxyXG4gICAgbGV0IHNhdmVEYXRhID0ge30gYXMgUXVlc3Rpb25uYWlyZVNhdmVNb2RlbDtcclxuICAgIGxldCBjdXJyZW50UWUgPSB0aGlzLnFlcy5zZWFyY2hCcy5nZXRWYWx1ZSgpO1xyXG4gICAgbGV0IGVtcGxveWVlRGF0YSA9IHRoaXMucWVzLmVtcGxveWVlQnMuZ2V0VmFsdWUoKTtcclxuICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdlbXBsb3llZURhdGEgJywgZW1wbG95ZWVEYXRhKTtcclxuICAgIGlmICh0aGlzLmZvclNjcmVlblF1ZXN0aW9ubmFpcmUpIHtcclxuICAgICAgbGV0IGRhdGFBcnI6IHN0cmluZ1tdID0gW107XHJcbiAgICAgIHRoaXMucWNzLmdldEFsbERhdGEoKS5mb3JFYWNoKGRhdGEgPT4ge1xyXG4gICAgICAgIGRhdGFBcnIucHVzaChkYXRhKTtcclxuICAgICAgfSk7XHJcbiAgICAgIHNhdmVEYXRhLnNjcmVlblF1ZXN0aW9ubmFpcmVEYXRhID0gZGF0YUFycjtcclxuICAgICAgc2F2ZURhdGEudXNlclR5cGUgPSBjdXJyZW50UWUudXNlclR5cGU7XHJcbiAgICAgIHNhdmVEYXRhLmZsb3dGcm9tID0gY3VycmVudFFlLmZsb3dGcm9tO1xyXG4gICAgICBzYXZlRGF0YS5xdWVzdGlvbm5haXJlSWRzID0gY3VycmVudFFlLnF1ZXN0aW9ubmFpcmVJZHM7XHJcbiAgICAgIHNhdmVEYXRhLmVtcE1vZGVsID0gZW1wbG95ZWVEYXRhO1xyXG4gICAgICBzYXZlRGF0YS51dWlkID0gdGhpcy5pZGVudGlmaWVyOy8vY3VycmVudFFlLnV1aWQ7XHJcbiAgICAgIHNhdmVEYXRhLmZsb3dLZXkgPSBjdXJyZW50UWUuZmxvd0tleTtcclxuICAgICAgc2F2ZURhdGEuYWN0aXZlUGFnZUluZGV4ID0gdGhpcy5hY3RpdmVJbmRleDtcclxuICAgICAgc2F2ZURhdGEucXVlc3Rpb25uYWlyZUlkID0gY3VycmVudFFlLnF1ZXN0aW9ubmFpcmVJZDtcclxuICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ3NhdmUgRGF0YSAnLCBzYXZlRGF0YSlcclxuICAgICAgdGhpcy51dGlsLnNob3dMb2FkZXIoKTtcclxuICAgICAgc2Nyb2xsVG8oMCwwKTtcclxuICAgICAgdGhpcy5xdWVzdGlvbm5haXJlU2VydmljZVxyXG4gICAgICAgIC5zYXZlU2NyZWVuUXVlc3Rpb25uYWlyZShzYXZlRGF0YSlcclxuICAgICAgICAuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgYXN5bmMgcmVzID0+IHtcclxuICAgICAgICAgICAgdGhpcy51dGlsLmhpZGVMb2FkZXIoKTtcclxuICAgICAgICAgICAgaWYgKHJlcykge1xyXG4gICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKHJlcyk7XHJcbiAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoXCJyZXMgdXVpZCA9PT09IFwiICwgcmVzW0ZiQ29uc3RhbnRzLnV1aWRdKTtcclxuICAgICAgICAgICAgICB0aGlzLnF1ZXN0aW9ubmFpcmVTZXJ2aWNlLnV1aWQubmV4dChyZXNbRmJDb25zdGFudHMudXVpZF0pO1xyXG4gICAgICAgICAgICAgIGF3YWl0IHRoaXMuc3RvcmFnZS5zZXQoRmJDb25zdGFudHMudXVpZCwgcmVzW0ZiQ29uc3RhbnRzLnV1aWRdKTtcclxuICAgICAgICAgICAgICBpZihyZXNbJ3JlZGlyZWN0VG9FbmQnXSA9PT0gdHJ1ZSl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnF1ZXN0aW9ubmFpcmVTZXJ2aWNlLnN1Y2Nlc3NFbGVtZW50Lm5leHQocmVzW0ZiQ29uc3RhbnRzLnN1Y2Nlc3NQYWdlRWxlbWVudF0pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5xdWVzdGlvbm5haXJlU2VydmljZS53YWl0Rm9yUHJvY2Vzc2luZy5uZXh0KHJlc1tGYkNvbnN0YW50cy53YWl0Rm9yUHJvY2Vzc2luZ10pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5xdWVzdGlvbm5haXJlU2VydmljZS5wYWdlVG9PcGVuLm5leHQocmVzW0ZiQ29uc3RhbnRzLnBhZ2VUb09wZW5dKTtcclxuXHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnN0b3JhZ2Uuc2V0KEZiQ29uc3RhbnRzLnN1Y2Nlc3NQYWdlRWxlbWVudCwgcmVzW0ZiQ29uc3RhbnRzLnN1Y2Nlc3NQYWdlRWxlbWVudF0pO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5zdG9yYWdlLnNldChGYkNvbnN0YW50cy53YWl0Rm9yUHJvY2Vzc2luZywgcmVzW0ZiQ29uc3RhbnRzLndhaXRGb3JQcm9jZXNzaW5nXSk7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnN0b3JhZ2Uuc2V0KEZiQ29uc3RhbnRzLnBhZ2VUb09wZW4sIHJlc1tGYkNvbnN0YW50cy5wYWdlVG9PcGVuXSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5hdkN0cmwubmF2aWdhdGVSb290KGAvJHt0aGlzLm5leHRCdXR0b25QYWdlfT9pZGVudGlmaWVyPSR7cmVzWyd1dWlkJ119YCk7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlSW5kZXggPSBpbmRleCArIDE7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFByZXZBbmROZXh0QnV0dG9uKCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHRoaXMuaWRlbnRpZmllciA9IHJlc1sndXVpZCddOyAgIFxyXG4gICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgQmFzZVBhZ2UucHJpbWVOR0ZpeGVzKCk7ICAgICAgICAgXHJcbiAgICAgICAgICAgICAgfSwgMzAwMCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBlcnIgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnFjcy5zaGFyZWREYXRhLmRlbGV0ZSh0aGlzLmFjdGl2ZUluZGV4KTtcclxuICAgICAgICAgICAgdGhpcy5lcnJvck9jY3VyZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLnV0aWwuaGlkZUxvYWRlcigpO1xyXG4gICAgICAgICAgICB0aGlzLnV0aWwuZXJyb3JIYW5kbGVyKGVycik7XHJcblxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG5cclxuICB9XHJcblxyXG4gIHByZXZQYWdlKGluZGV4OiBudW1iZXIpIHtcclxuICAgIHRoaXMuYWN0aXZlSW5kZXggPSBpbmRleCAtIDE7XHJcbiAgICBzY3JvbGxUbygwLDApO1xyXG4gICAgdGhpcy5zZXRQcmV2QW5kTmV4dEJ1dHRvbigpO1xyXG4gIH1cclxuXHJcbiAgdmlzaWJsZUlmKHN0ckV4cDogc3RyaW5nLCBlbGVtZW50TmFtZTogc3RyaW5nLCBmb3JtR3JvdXA6IFVudHlwZWRGb3JtR3JvdXAsIGVsZW1lbnQ6IGFueSkge1xyXG5cclxuXHJcbiAgICBpZiAoIXN0ckV4cCkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIGxldCBpc1Zpc2libGUgOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBpZihzdHJFeHAuaW5jbHVkZXMoJyYmJykpe1xyXG4gICAgICBsZXQgZXhwciA6IHN0cmluZ1tdID0gc3RyRXhwLnNwbGl0KCcmJicpO1xyXG4gICAgICBpc1Zpc2libGUgPSBBcHBWYWxpZGF0b3JzLmNhbGN1bGF0ZU9wZXJhbmRWYWx1ZShleHByWzBdLnRyaW0oKSwgZm9ybUdyb3VwKSAmJiBBcHBWYWxpZGF0b3JzLmNhbGN1bGF0ZU9wZXJhbmRWYWx1ZShleHByWzFdLnRyaW0oKSwgZm9ybUdyb3VwKTtcclxuXHJcbiAgICAgIGlmKGV4cHIubGVuZ3RoID49IDMpe1xyXG4gICAgICAgIGlzVmlzaWJsZSA9IGlzVmlzaWJsZSAmJiBBcHBWYWxpZGF0b3JzLmNhbGN1bGF0ZU9wZXJhbmRWYWx1ZShleHByWzJdLnRyaW0oKSwgZm9ybUdyb3VwKVxyXG4gICAgICB9XHJcbiAgICAgIGlmKGV4cHIubGVuZ3RoID49IDQpe1xyXG4gICAgICAgIGlzVmlzaWJsZSA9IGlzVmlzaWJsZSAmJiBBcHBWYWxpZGF0b3JzLmNhbGN1bGF0ZU9wZXJhbmRWYWx1ZShleHByWzNdLnRyaW0oKSwgZm9ybUdyb3VwKVxyXG4gICAgICB9XHJcbiAgICAgIGlmKGV4cHIubGVuZ3RoID09IDUpe1xyXG4gICAgICAgIGlzVmlzaWJsZSA9IGlzVmlzaWJsZSAmJiBBcHBWYWxpZGF0b3JzLmNhbGN1bGF0ZU9wZXJhbmRWYWx1ZShleHByWzRdLnRyaW0oKSwgZm9ybUdyb3VwKVxyXG4gICAgICB9XHJcbiAgICAgIGlmKGV4cHIubGVuZ3RoID4gNSl7XHJcbiAgICAgICAgICB0aHJvdyBcIkFwcFZhbGlkYXRvcnMgOiBNb3JlIHRoYW4gNSAnJiYnIGV4cHJlc3Npb25zIGFyZSBub3Qgc3VwcG9ydGVkLlwiO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYoc3RyRXhwLmluY2x1ZGVzKCd8fCcpKXtcclxuICAgICAgbGV0IGV4cHIgOiBzdHJpbmdbXSA9IHN0ckV4cC5zcGxpdCgnfHwnKTtcclxuICAgICAgaXNWaXNpYmxlID0gQXBwVmFsaWRhdG9ycy5jYWxjdWxhdGVPcGVyYW5kVmFsdWUoZXhwclswXS50cmltKCksIGZvcm1Hcm91cCkgfHwgQXBwVmFsaWRhdG9ycy5jYWxjdWxhdGVPcGVyYW5kVmFsdWUoZXhwclsxXS50cmltKCksIGZvcm1Hcm91cClcclxuICAgICAgaWYoZXhwci5sZW5ndGggPj0gMyl7XHJcbiAgICAgICAgaXNWaXNpYmxlID0gaXNWaXNpYmxlIHx8IEFwcFZhbGlkYXRvcnMuY2FsY3VsYXRlT3BlcmFuZFZhbHVlKGV4cHJbMl0udHJpbSgpLCBmb3JtR3JvdXApXHJcbiAgICAgIH1cclxuICAgICAgaWYoZXhwci5sZW5ndGggPj0gNCl7XHJcbiAgICAgICAgaXNWaXNpYmxlID0gaXNWaXNpYmxlIHx8IEFwcFZhbGlkYXRvcnMuY2FsY3VsYXRlT3BlcmFuZFZhbHVlKGV4cHJbM10udHJpbSgpLCBmb3JtR3JvdXApXHJcbiAgICAgIH1cclxuICAgICAgaWYoZXhwci5sZW5ndGggPT0gNSl7XHJcbiAgICAgICAgaXNWaXNpYmxlID0gaXNWaXNpYmxlIHx8IEFwcFZhbGlkYXRvcnMuY2FsY3VsYXRlT3BlcmFuZFZhbHVlKGV4cHJbNF0udHJpbSgpLCBmb3JtR3JvdXApXHJcbiAgICAgIH1cclxuICAgICAgaWYoZXhwci5sZW5ndGggPiA1KXtcclxuICAgICAgICAgIHRocm93IFwiQXBwVmFsaWRhdG9ycyA6IE1vcmUgdGhhbiA1ICd8fCcgZXhwcmVzc2lvbnMgYXJlIG5vdCBzdXBwb3J0ZWQuXCI7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZighc3RyRXhwLmluY2x1ZGVzKCd8fCcpICYmICFzdHJFeHAuaW5jbHVkZXMoJyYmJykpe1xyXG4gICAgICBpc1Zpc2libGUgPSBBcHBWYWxpZGF0b3JzLmNhbGN1bGF0ZU9wZXJhbmRWYWx1ZShzdHJFeHAudHJpbSgpLCBmb3JtR3JvdXApO1xyXG4gICAgfVxyXG5cclxuICAgIGlmKGlzVmlzaWJsZSl7XHJcbiAgICAgIHJldHVybiBpc1Zpc2libGU7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIGlmIChlbGVtZW50TmFtZSAmJiBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudE5hbWVdICYmICFlbGVtZW50LnN1YnNjcmliZVZhbHVlT2YpIHtcclxuICAgICAgaWYodGhpcy5mb3JtRGF0YSAmJiAhdGhpcy5mb3JtRGF0YVtlbGVtZW50TmFtZV0pe1xyXG4gICAgICAgIGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50TmFtZV0uc2V0VmFsdWUobnVsbCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBnZXREaXJ0eUl0ZW1zKCl7XHJcbiAgICByZXR1cm4gdGhpcy5mb3JtR3JvdXBBcnJheS5tYXAoeT0+T2JqZWN0LmVudHJpZXMoeS5jb250cm9scykuZmlsdGVyKHZhbHVlID0+ICF2YWx1ZVsxXS5wcmlzdGluZSkubWFwKHggPT4geFswXSkpLnJlZHVjZSgoeCx5KT0+eC5jb25jYXQoeSkpO1xyXG4gIH1cclxuXHJcbiAgZ2V0RGlydHlJdGVtc1dpdGhWYWx1ZXMoKTogQXJyYXk8eyBjb250cm9sTmFtZTogc3RyaW5nLCBjb250cm9sVmFsdWU6IGFueSB9PiAge1xyXG4gICAgcmV0dXJuIHRoaXMuZm9ybUdyb3VwQXJyYXlcclxuICAgICAgLm1hcCh5ID0+XHJcbiAgICAgICAgT2JqZWN0LmVudHJpZXMoeS5jb250cm9scykgIC8vIEl0ZXJhdGUgb3ZlciBlYWNoIGZvcm0gY29udHJvbCBpbiB0aGUgZm9ybSBncm91cFxyXG4gICAgICAgICAgLmZpbHRlcih2YWx1ZSA9PiAhdmFsdWVbMV0ucHJpc3RpbmUpICAvLyBGaWx0ZXIgZm9yIGRpcnR5IGNvbnRyb2xzXHJcbiAgICAgICAgICAubWFwKHggPT4gKHsgY29udHJvbE5hbWU6IHhbMF0sIGNvbnRyb2xWYWx1ZTogeFsxXS52YWx1ZSB9KSkgIC8vIEdldCBuYW1lIGFuZCB2YWx1ZSBvZiBkaXJ0eSBjb250cm9sc1xyXG4gICAgICApXHJcbiAgICAgIC5yZWR1Y2UoKGFjY3VtLCBjdXJyKSA9PiBhY2N1bS5jb25jYXQoY3VyciksIFtdKTsgIC8vIEZsYXR0ZW4gdGhlIGFycmF5IG9mIGFycmF5c1xyXG4gIH1cclxuICBcclxuXHJcbiAgY29tcGxldGUoKSB7XHJcbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnY29tcGxldGUgbWV0aG9kIGNhbGxlZCA9PT09PT09Jyk7XHJcbiAgICBpZih0aGlzLm1mYVJlcXVpcmVkICYmIHRoaXMuc2hvd01mYSAmJiB0aGlzLm1mYSl7XHJcbiAgICAgIHRoaXMubWZhLnN1Ym1pdCgpO1xyXG4gICAgfVxyXG4gICAgc2Nyb2xsVG8oMCwwKTtcclxuICAgIGxldCBmb3JtR3JvdXA6IFVudHlwZWRGb3JtR3JvdXA7XHJcbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnU3VibWl0IGNhbGxlZCBmcm9tIGNvbXBsZXRlIG1ldGhvZCBpbiBkeW5hbWljIGZvcm0nKVxyXG5cclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5mb3JtR3JvdXBBcnJheS5sZW5ndGg7IGkrKykge1xyXG4gICAgICBmb3JtR3JvdXAgPSB0aGlzLmZvcm1Hcm91cEFycmF5W2ldO1xyXG4gICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnSW5zaWRlIGlmJywgZm9ybUdyb3VwKTtcclxuICAgICAgaWYgKGZvcm1Hcm91cC5pbnZhbGlkKSB7XHJcbiAgICAgICAgZm9ybUdyb3VwLm1hcmtBbGxBc1RvdWNoZWQoKTtcclxuXHJcbiAgICAgICAgT2JqZWN0LmtleXMoZm9ybUdyb3VwLmNvbnRyb2xzKS5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBjb250cm9sID0gZm9ybUdyb3VwLmdldChrZXkpO1xyXG4gICAgICAgICAgaWYgKGNvbnRyb2wpIHtcclxuICAgICAgICAgICAgY29udHJvbC5tYXJrQXNUb3VjaGVkKCk7XHJcbiAgICAgICAgICAgIGNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBjb25zb2xlLmxvZygnRm9ybSBpcyBpbnZhbGlkLiBQbGVhc2UgY29ycmVjdCB0aGUgZXJyb3JzLicpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZm9ybUdyb3VwID0gdGhpcy5mb3JtR3JvdXBBcnJheVt0aGlzLmFjdGl2ZUluZGV4XTtcclxuICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdmb3JtR3JvdXAnLCBmb3JtR3JvdXApO1xyXG5cclxuICAgIC8vIGZvciByZWdpc3RlciBjbGFpbWFudCBwYWdlXHJcbiAgICBjb25zdCBwYXNzd29yZCA9IGZvcm1Hcm91cC5nZXRSYXdWYWx1ZSgpICYmIGZvcm1Hcm91cC5nZXRSYXdWYWx1ZSgpLnBhc3N3b3JkID8gKGZvcm1Hcm91cC5nZXRSYXdWYWx1ZSgpLnBhc3N3b3JkKS50b0xvd2VyQ2FzZSgpIDogXCJcIjtcclxuICAgIGNvbnN0IGZpcnN0TmFtZSA9IGZvcm1Hcm91cC5nZXRSYXdWYWx1ZSgpICYmIGZvcm1Hcm91cC5nZXRSYXdWYWx1ZSgpLmZpcnN0TmFtZSA/IChmb3JtR3JvdXAuZ2V0UmF3VmFsdWUoKS5maXJzdE5hbWUpLnRvTG93ZXJDYXNlKCkgOiBcIlwiO1xyXG4gICAgY29uc3QgbGFzdE5hbWUgPSBmb3JtR3JvdXAuZ2V0UmF3VmFsdWUoKSAmJiBmb3JtR3JvdXAuZ2V0UmF3VmFsdWUoKS5sYXN0TmFtZSA/IChmb3JtR3JvdXAuZ2V0UmF3VmFsdWUoKS5sYXN0TmFtZSkudG9Mb3dlckNhc2UoKSA6IFwiXCI7XHJcbiAgICBjb25zdCB1c2VySWQgPSBmb3JtR3JvdXAuZ2V0UmF3VmFsdWUoKSAmJiBmb3JtR3JvdXAuZ2V0UmF3VmFsdWUoKS51c2VybmFtZSA/IChmb3JtR3JvdXAuZ2V0UmF3VmFsdWUoKS51c2VybmFtZSkudG9Mb3dlckNhc2UoKSA6IFwiXCI7ICAgXHJcblxyXG4gICAgLy9QR0xQLTQyMThcclxuXHJcbiAgICBpZihmb3JtR3JvdXAuY29udHJvbHMucmVzQWRkcmVzcyE9dW5kZWZpbmVkICl7XHJcbiAgICAgIHRoaXMucmVzWmlwY29kZSA9IGZvcm1Hcm91cC5jb250cm9scy5yZXNBZGRyZXNzICYmIGZvcm1Hcm91cC5jb250cm9scy5yZXNBZGRyZXNzLnZhbHVlLnppcCA/IChmb3JtR3JvdXAuY29udHJvbHMucmVzQWRkcmVzcy52YWx1ZS56aXApOiBmb3JtR3JvdXAuY29udHJvbHMucmVzQWRkcmVzcy52YWx1ZS56aXAgPyAoZm9ybUdyb3VwLmNvbnRyb2xzLnJlc0FkZHJlc3MudmFsdWUuemlwKSA6XCJcIjtcclxuICAgICAgdGhpcy4gcmVzQ291bnRyeSA9IGZvcm1Hcm91cC5jb250cm9scy5yZXNBZGRyZXNzICYmIGZvcm1Hcm91cC5jb250cm9scy5yZXNBZGRyZXNzLnZhbHVlLmNvdW50cnkgPyAoZm9ybUdyb3VwLmNvbnRyb2xzLnJlc0FkZHJlc3MudmFsdWUuY291bnRyeSk6IGZvcm1Hcm91cC5jb250cm9scy5yZXNBZGRyZXNzLnZhbHVlLmNvdW50cnkgPyAoZm9ybUdyb3VwLmNvbnRyb2xzLnJlc0FkZHJlc3MudmFsdWUuY291bnRyeSkgOlwiXCI7XHJcbiAgICAgIHRoaXMuIGNvdW50eSA9IGZvcm1Hcm91cC5jb250cm9scy5yZXNBZGRyZXNzICYmIGZvcm1Hcm91cC5jb250cm9scy5yZXNBZGRyZXNzLnZhbHVlLmNvdW50eSA/IChmb3JtR3JvdXAuY29udHJvbHMucmVzQWRkcmVzcy52YWx1ZS5jb3VudHkpOiBmb3JtR3JvdXAuY29udHJvbHMucmVzQWRkcmVzcy52YWx1ZS5jb3VudHkgPyAoZm9ybUdyb3VwLmNvbnRyb2xzLnJlc0FkZHJlc3MudmFsdWUuY291bnR5KSA6XCJcIjtcclxuICAgICAgdGhpcy4gc3RhdGUgPSBmb3JtR3JvdXAuY29udHJvbHMucmVzQWRkcmVzcyAmJiBmb3JtR3JvdXAuY29udHJvbHMucmVzQWRkcmVzcy52YWx1ZS5zdGF0ZS52YWx1ZSA/IChmb3JtR3JvdXAuY29udHJvbHMucmVzQWRkcmVzcy52YWx1ZS5zdGF0ZS52YWx1ZSk6IGZvcm1Hcm91cC5jb250cm9scy5yZXNBZGRyZXNzLnZhbHVlLnN0YXRlLnZhbHVlID8gKGZvcm1Hcm91cC5jb250cm9scy5yZXNBZGRyZXNzLnZhbHVlLnN0YXRlLnZhbHVlKSA6XCJcIjtcclxuICAgIH1cclxuICAgIC8vUEdMUC00MjMzXHJcbiAgICBpZihmb3JtR3JvdXAuY29udHJvbHMucmVzQWRyZXNzIT11bmRlZmluZWQgKXtcclxuICAgICAgIHRoaXMucmVzU3RyZWV0QWRkcmVzcyA9IGZvcm1Hcm91cC5jb250cm9scy5yZXNBZHJlc3MgJiYgZm9ybUdyb3VwLmNvbnRyb2xzLnJlc0FkcmVzcy52YWx1ZS5zdHJlZXRBZGRyZXNzID8gKGZvcm1Hcm91cC5jb250cm9scy5yZXNBZHJlc3MudmFsdWUuc3RyZWV0QWRkcmVzcykgOiBmb3JtR3JvdXAuY29udHJvbHMucmVzQWRyZXNzLnZhbHVlLnN0cmVldEFkZHJlc3MgPyAoZm9ybUdyb3VwLmNvbnRyb2xzLnJlc0FkcmVzcy52YWx1ZS5zdHJlZXRBZGRyZXNzKSA6XCJcIjtcclxuICAgICAgICB0aGlzLiBjb3VudHkgPSBmb3JtR3JvdXAuY29udHJvbHMucmVzQWRyZXNzICYmIGZvcm1Hcm91cC5jb250cm9scy5yZXNBZHJlc3MudmFsdWUuY291bnR5ID8gKGZvcm1Hcm91cC5jb250cm9scy5yZXNBZHJlc3MudmFsdWUuY291bnR5KTogZm9ybUdyb3VwLmNvbnRyb2xzLnJlc0FkcmVzcy52YWx1ZS5jb3VudHkgPyAoZm9ybUdyb3VwLmNvbnRyb2xzLnJlc0FkcmVzcy52YWx1ZS5jb3VudHkpIDpcIlwiO1xyXG4gICAgICAgIHRoaXMuIHN0YXRlID0gZm9ybUdyb3VwLmNvbnRyb2xzLnJlc0FkcmVzcyAmJiBmb3JtR3JvdXAuY29udHJvbHMucmVzQWRyZXNzLnZhbHVlLnN0YXRlLnZhbHVlID8gKGZvcm1Hcm91cC5jb250cm9scy5yZXNBZHJlc3MudmFsdWUuc3RhdGUudmFsdWUpOiBmb3JtR3JvdXAuY29udHJvbHMucmVzQWRyZXNzLnZhbHVlLnN0YXRlLnZhbHVlID8gKGZvcm1Hcm91cC5jb250cm9scy5yZXNBZHJlc3MudmFsdWUuc3RhdGUudmFsdWUpIDpcIlwiO1xyXG4gICAgfVxyXG5cclxuICAgICAgIGlmKGZvcm1Hcm91cC5jb250cm9scy5tYWlsQWRkcmVzcyE9dW5kZWZpbmVkICAmJiBmb3JtR3JvdXAuY29udHJvbHMuZGlmZm1haWxhZGRyZXNzIT11bmRlZmluZWQgKXtcclxuICAgICAgICAgIGlmKCBmb3JtR3JvdXAuY29udHJvbHMuZGlmZm1haWxhZGRyZXNzLnZhbHVlPT0nWScpe1xyXG4gICAgICAgICAgICAgdGhpcy4gZGlmZmNvdW50eSA9IGZvcm1Hcm91cC5jb250cm9scy5tYWlsQWRkcmVzcyAmJiBmb3JtR3JvdXAuY29udHJvbHMubWFpbEFkZHJlc3MudmFsdWUuY291bnR5ID8gKGZvcm1Hcm91cC5jb250cm9scy5tYWlsQWRkcmVzcy52YWx1ZS5jb3VudHkpOiBmb3JtR3JvdXAuY29udHJvbHMubWFpbEFkZHJlc3MudmFsdWUuY291bnR5ID8gKGZvcm1Hcm91cC5jb250cm9scy5tYWlsQWRkcmVzcy52YWx1ZS5jb3VudHkpIDpcIlwiO1xyXG4gICAgICAgICAgICAgdGhpcy4gZGlmZnN0YXRlID0gZm9ybUdyb3VwLmNvbnRyb2xzLm1haWxBZGRyZXNzICYmIGZvcm1Hcm91cC5jb250cm9scy5tYWlsQWRkcmVzcy52YWx1ZS5zdGF0ZS52YWx1ZSA/IChmb3JtR3JvdXAuY29udHJvbHMubWFpbEFkZHJlc3MudmFsdWUuc3RhdGUudmFsdWUpOiBmb3JtR3JvdXAuY29udHJvbHMubWFpbEFkZHJlc3MudmFsdWUuc3RhdGUudmFsdWUgPyAoZm9ybUdyb3VwLmNvbnRyb2xzLm1haWxBZGRyZXNzLnZhbHVlLnN0YXRlLnZhbHVlKSA6XCJcIjtcclxuICAgICAgICB9XHJcbiAgfVxyXG5cclxuICAgIGlmKGZvcm1Hcm91cC5jb250cm9scy5tYWlsQWRkcmVzcyE9dW5kZWZpbmVkICAmJiBmb3JtR3JvdXAuY29udHJvbHMuZGlmZk1haWxpbmdBZGRyZXNzIT11bmRlZmluZWQgKXtcclxuICAgICAgICAgIGlmKCBmb3JtR3JvdXAuY29udHJvbHMuZGlmZk1haWxpbmdBZGRyZXNzLnZhbHVlPT0nWScpe1xyXG4gICAgICAgIHRoaXMuIGRpZmZjb3VudHkgPSBmb3JtR3JvdXAuY29udHJvbHMubWFpbEFkZHJlc3MgJiYgZm9ybUdyb3VwLmNvbnRyb2xzLm1haWxBZGRyZXNzLnZhbHVlLmNvdW50eSA/IChmb3JtR3JvdXAuY29udHJvbHMubWFpbEFkZHJlc3MudmFsdWUuY291bnR5KTogZm9ybUdyb3VwLmNvbnRyb2xzLm1haWxBZGRyZXNzLnZhbHVlLmNvdW50eSA/IChmb3JtR3JvdXAuY29udHJvbHMubWFpbEFkZHJlc3MudmFsdWUuY291bnR5KSA6XCJcIjtcclxuICAgICAgICB0aGlzLiBkaWZmc3RhdGUgPSBmb3JtR3JvdXAuY29udHJvbHMubWFpbEFkZHJlc3MgJiYgZm9ybUdyb3VwLmNvbnRyb2xzLm1haWxBZGRyZXNzLnZhbHVlLnN0YXRlLnZhbHVlID8gKGZvcm1Hcm91cC5jb250cm9scy5tYWlsQWRkcmVzcy52YWx1ZS5zdGF0ZS52YWx1ZSk6IGZvcm1Hcm91cC5jb250cm9scy5tYWlsQWRkcmVzcy52YWx1ZS5zdGF0ZS52YWx1ZSA/IChmb3JtR3JvdXAuY29udHJvbHMubWFpbEFkZHJlc3MudmFsdWUuc3RhdGUudmFsdWUpIDpcIlwiO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgICBcclxuICAgIFxyXG4gICAgXHJcbiAgICAgLy9QR0xQLTQyMThcclxuXHJcbiAgICAgIGlmKHRoaXMucmVzWmlwY29kZT09PSBcIlwiKVxyXG4gICAgICB7XHJcbiAgICAgICAgdGhpcy5yZXNaaXBjb2RlVmFsaWRhdGlvbmZsYWc9dHJ1ZTtcclxuICAgICAgfWVsc2UgaWYgKHRoaXMucmVzQ291bnRyeT09PVwiXCIgfHwgdGhpcy5yZXNDb3VudHJ5ID09PVwiQ0FcIil7XHJcbiAgICAgICAgdGhpcy5yZXNaaXBjb2RlVmFsaWRhdGlvbmZsYWc9dHJ1ZTtcclxuICAgICAgfWVsc2V7XHJcbiAgICAgICAgdGhpcy5yZXNaaXBjb2RlVmFsaWRhdGlvbmZsYWc9dHJ1ZTtcclxuICAgICAgICB0aGlzLnJlc1ppcGNvZGVWYWxpZGF0aW9uZmxhZz0gIHRoaXMuaXNWYWxpZFppcENvZGUodGhpcy5yZXNaaXBjb2RlKTtcclxuICAgICAgfSBcclxuXHJcbiAgICAgIGlmKCF0aGlzLnJlc1ppcGNvZGVWYWxpZGF0aW9uZmxhZyl7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG5cclxuICAgICAgLy9QR0xQLTE5NVxyXG4gICAgICAgaWYodGhpcy5yZXNTdHJlZXRBZGRyZXNzID09PSBcIlwiKVxyXG4gICAgICB7XHJcbiAgICAgICAgdGhpcy5yZXNTdHJlZXRBZGRyZXNzVmFsaWRhdGlvbmZsYWc9dHJ1ZTtcclxuICAgICAgfWVsc2V7XHJcbiAgICAgICAgdGhpcy5yZXNTdHJlZXRBZGRyZXNzVmFsaWRhdGlvbmZsYWcgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMucmVzU3RyZWV0QWRkcmVzc1ZhbGlkYXRpb25mbGFnID0gdGhpcy5pc1ZhbGlkU3RyZWV0QWRkcmVzcyh0aGlzLnJlc1N0cmVldEFkZHJlc3MpO1xyXG4gICAgICB9IFxyXG5cclxuICAgICAgaWYoIXRoaXMucmVzU3RyZWV0QWRkcmVzc1ZhbGlkYXRpb25mbGFnKXtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgLy8gUEdMUC00MjMzXHJcbiAgICAgaWYoZm9ybUdyb3VwLmNvbnRyb2xzLnJlc0FkcmVzcyE9dW5kZWZpbmVkICB8fCBmb3JtR3JvdXAuY29udHJvbHMucmVzQWRkcmVzcyE9dW5kZWZpbmVkICl7XHJcbiAgICAgIGlmKHRoaXMuc3RhdGUhPVwiXCIgJiZ0aGlzLnN0YXRlPT09XCJLU1wiKXtcclxuICAgICAgICAgaWYodGhpcy5jb3VudHk9PT1cIlwiKXtcclxuICAgICAgICAgICAgIGlmKGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwibGFuZ3VhZ2VcIikgPT09IFwiZXNcIil7XHJcbiAgICAgICAgY29uc3QgY291bnR5RXJyb3IxID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIFwiZXJyb3JJZFwiOiBcIlwiLFxyXG4gICAgICAgICAgICAgICAgICAgIFwidGltZXN0YW1wXCI6IFwiXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJtc2dcIjogW1xyXG4gICAgICAgICAgICAgICAgICAgIFwiW0VsIFNlIHJlcXVpZXJlIGVsIGNvbmRhZG8gXFx0XFx0LlxcdFxcdF1cIiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICAgICAgICBcImRldGFpbHNcIjogXCJ1cmk9L3F1ZXN0aW9ubmFpcmUtc2VydmljZS9xdWVzdGlvbm5haXJlL3NjcmVlbi1xdWVzdGlvbm5haXJlXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJlcnJvclwiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIFwiZXJyb3JDb2RlXCI6IFwiNDIyXCJcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uRXJyb3IuZW1pdChjb3VudHlFcnJvcjEpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgY29uc3QgY291bnR5RXJyb3IxID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIFwiZXJyb3JJZFwiOiBcIlwiLFxyXG4gICAgICAgICAgICAgICAgICAgIFwidGltZXN0YW1wXCI6IFwiXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJtc2dcIjogW1xyXG4gICAgICAgICAgICAgICAgICAgIFwiW0NvdW50eSBpcyByZXF1aXJlZCBcXHRcXHQuXFx0XFx0XVwiXHJcbiAgICAgICAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgXCJlcnJvclwiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIFwiZXJyb3JDb2RlXCI6IFwiNDIyXCJcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uRXJyb3IuZW1pdChjb3VudHlFcnJvcjEpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICB9ICAgICAgICAgICAgXHJcbiAgICAgICAgIH0gIFxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG5cclxuICAgIFxyXG5cclxuICAgICAvLyBQR0xQLTQyMzNcclxuICAgICBpZihmb3JtR3JvdXAuY29udHJvbHMubWFpbEFkZHJlc3MhPXVuZGVmaW5lZCAgJiYgZm9ybUdyb3VwLmNvbnRyb2xzLmRpZmZtYWlsYWRkcmVzcyE9dW5kZWZpbmVkICl7XHJcbiAgICAgICAgICAgICAgdGhpcy5kaWZmTWFpbEFkcmVzc0ZsYWc9ZmFsc2U7XHJcbiAgICAgICAgICBpZihmb3JtR3JvdXAuY29udHJvbHMuZGlmZm1haWxhZGRyZXNzLnZhbHVlPT0nWScgKXtcclxuICAgICAgICAgICAgdGhpcy5kaWZmTWFpbEFkcmVzc0ZsYWc9dHJ1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZihmb3JtR3JvdXAuY29udHJvbHMubWFpbEFkZHJlc3MhPXVuZGVmaW5lZCAgJiYgZm9ybUdyb3VwLmNvbnRyb2xzLmRpZmZNYWlsaW5nQWRkcmVzcyE9dW5kZWZpbmVkICl7XHJcbiAgICAgICAgIHRoaXMuZGlmZk1haWxBZHJlc3NGbGFnPWZhbHNlO1xyXG4gICAgICAgICAgaWYoZm9ybUdyb3VwLmNvbnRyb2xzLmRpZmZNYWlsaW5nQWRkcmVzcy52YWx1ZT09J1knICl7XHJcbiAgICAgICAgICAgIHRoaXMuZGlmZk1haWxBZHJlc3NGbGFnPXRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYodGhpcy5kaWZmTWFpbEFkcmVzc0ZsYWcpe1xyXG4gICAgICBpZih0aGlzLmRpZmZzdGF0ZSE9XCJcIiAmJnRoaXMuZGlmZnN0YXRlPT09XCJLU1wiKXtcclxuICAgICAgICAgaWYodGhpcy5kaWZmY291bnR5PT09XCJcIil7XHJcbiAgICAgICAgICAgICBpZihsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcImxhbmd1YWdlXCIpID09PSBcImVzXCIpe1xyXG4gICAgICAgIGNvbnN0IGRpZmZjb3VudHlFcnJvciA9IHtcclxuICAgICAgICAgICAgICAgICAgICBcImVycm9ySWRcIjogXCJcIixcclxuICAgICAgICAgICAgICAgICAgICBcInRpbWVzdGFtcFwiOiBcIlwiLFxyXG4gICAgICAgICAgICAgICAgICAgIFwibXNnXCI6IFtcclxuICAgICAgICAgICAgICAgICAgICBcIltTU2UgcmVxdWllcmUgbGEgZGlyZWNjacOzbiBwb3N0YWwgZGVsIGNvbmRhZG8uIFxcdFxcdC5cXHRcXHRdXCIgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgICAgICAgXCJkZXRhaWxzXCI6IFwidXJpPS9xdWVzdGlvbm5haXJlLXNlcnZpY2UvcXVlc3Rpb25uYWlyZS9zY3JlZW4tcXVlc3Rpb25uYWlyZVwiLFxyXG4gICAgICAgICAgICAgICAgICAgIFwiZXJyb3JcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBcImVycm9yQ29kZVwiOiBcIjQyMlwiXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkVycm9yLmVtaXQoZGlmZmNvdW50eUVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGRpZmZjb3VudHlFcnJvciA9IHtcclxuICAgICAgICAgICAgICAgICAgICBcImVycm9ySWRcIjogXCJcIixcclxuICAgICAgICAgICAgICAgICAgICBcInRpbWVzdGFtcFwiOiBcIlwiLFxyXG4gICAgICAgICAgICAgICAgICAgIFwibXNnXCI6IFtcclxuICAgICAgICAgICAgICAgICAgICBcIltNYWlsaW5nIEFkZHJlc3MgQ291bnR5IGlzIHJlcXVpcmVkIFxcdFxcdC5cXHRcXHRdXCJcclxuICAgICAgICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICBcImVycm9yXCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJlcnJvckNvZGVcIjogXCI0MjJcIlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25FcnJvci5lbWl0KGRpZmZjb3VudHlFcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgIH0gICAgICAgICAgICBcclxuICAgICAgICAgfSAgXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG4gICBcclxuICAgIGlmKHBhc3N3b3JkID09PSBcIlwiICYmIGZpcnN0TmFtZSA9PT0gXCJcIiAmJiBsYXN0TmFtZSA9PT0gXCJcIiAmJiB1c2VySWQgPT09IFwiXCIpeyBcclxuICAgICAgICAgICAvLyBQR0xQLTE3NTAgIGluIGNvcnJlY3QgUm91dGluZyBOVW1iZXJcclxuICAgICAgIGlmKGZvcm1Hcm91cC5jb250cm9scy5wYXltZXRob2Q9PXVuZGVmaW5lZCAgJiYgZm9ybUdyb3VwLmNvbnRyb2xzLnBheU1ldGhvZD09dW5kZWZpbmVkKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCIgaXMgdHJpZ2dlcmVkIDFcIilcclxuICAgICAgICB0aGlzLmNvbXBsZXRlU2F2ZVF1ZXN0aW9ubmFpcmUoZm9ybUdyb3VwKTtcclxuICAgICAgIC8vIGNvbnNvbGUubG9nKFwiIHRyaWdnZXJlZCAyXCIpXHJcbiAgICAgICAgIC8vIFBHTFAtMTc1MCAgaW4gY29ycmVjdCBSb3V0aW5nIE5VbWJlciAgXHJcbiAgICAgICB9IGVsc2UgaWYoKGZvcm1Hcm91cC5jb250cm9scy5wYXltZXRob2QhPXVuZGVmaW5lZCAmJiBmb3JtR3JvdXAuY29udHJvbHMucGF5bWV0aG9kLnZhbHVlPT09J0MnKSAgfHwoZm9ybUdyb3VwLmNvbnRyb2xzLnBheU1ldGhvZCE9dW5kZWZpbmVkICYmIGZvcm1Hcm91cC5jb250cm9scy5wYXlNZXRob2QudmFsdWU9PT0nQycpICl7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCIgaXMgdHJpZ2dlcmVkIDJcIikgICBcclxuICAgICAgICB0aGlzLmNvbXBsZXRlU2F2ZVF1ZXN0aW9ubmFpcmUoZm9ybUdyb3VwKTtcclxuICAgICAgLy8gY29uc29sZS5sb2coXCIgaXMgdHJpZ2dlcmVkIDQgXCIpICAgXHJcbiAgICAgIH1lbHNleyAgICAgICAgICBcclxuICAgICAgICAgIC8vIFBHTFAtMTc1MCAgaW4gY29ycmVjdCBSb3V0aW5nIE5VbWJlciAgICBcclxuICAgICAgICAgY29uc3Qgcm91dGluZ051bWJlciA9IGZvcm1Hcm91cC5jb250cm9scy5CYW5rQWNjb3VudCAmJiBmb3JtR3JvdXAuY29udHJvbHMuQmFua0FjY291bnQudmFsdWUucm91dGluZ051bWJlciA/IChmb3JtR3JvdXAuY29udHJvbHMuQmFua0FjY291bnQudmFsdWUucm91dGluZ051bWJlcik6IGZvcm1Hcm91cC5jb250cm9scy5iYW5rQWNjb3VudC52YWx1ZS5yb3V0aW5nTnVtYmVyID8gKGZvcm1Hcm91cC5jb250cm9scy5iYW5rQWNjb3VudC52YWx1ZS5yb3V0aW5nTnVtYmVyKSA6XCJcIjtcclxuICAgICAgICBjb25zdCBhY2NvdW50TnVtYmVyID0gZm9ybUdyb3VwLmNvbnRyb2xzLkJhbmtBY2NvdW50ICYmZm9ybUdyb3VwLmNvbnRyb2xzLkJhbmtBY2NvdW50LnZhbHVlLmFjY291bnROdW1iZXIgPyAoZm9ybUdyb3VwLmNvbnRyb2xzLkJhbmtBY2NvdW50LnZhbHVlLmFjY291bnROdW1iZXIpOmZvcm1Hcm91cC5jb250cm9scy5iYW5rQWNjb3VudC52YWx1ZS5hY2NvdW50TnVtYmVyID8gKGZvcm1Hcm91cC5jb250cm9scy5iYW5rQWNjb3VudC52YWx1ZS5hY2NvdW50TnVtYmVyKSA6XCJcIjtcclxuICAgICAgICBjb25zdCByZUVudGVyQWNjb3VudE51bWJlciA9IGZvcm1Hcm91cC5jb250cm9scy5CYW5rQWNjb3VudCAmJiBmb3JtR3JvdXAuY29udHJvbHMuQmFua0FjY291bnQudmFsdWUucmVFbnRlckFjY291bnROdW1iZXIgPyAoZm9ybUdyb3VwLmNvbnRyb2xzLkJhbmtBY2NvdW50LnZhbHVlLnJlRW50ZXJBY2NvdW50TnVtYmVyKTogZm9ybUdyb3VwLmNvbnRyb2xzLmJhbmtBY2NvdW50LnZhbHVlLnJlRW50ZXJBY2NvdW50TnVtYmVyID8gKGZvcm1Hcm91cC5jb250cm9scy5iYW5rQWNjb3VudC52YWx1ZS5yZUVudGVyQWNjb3VudE51bWJlcik6XCJcIjtcclxuICAgICAgICAgIGlmKHRoaXMuaXNCYW5rRGV0YWlsc1ZhbGlkKHJvdXRpbmdOdW1iZXIsIGFjY291bnROdW1iZXIsIHJlRW50ZXJBY2NvdW50TnVtYmVyKSl7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiIGlzIHRyaWdnZXJlZCAzIFwiKSBcclxuICAgICAgICAgICAgICB0aGlzLmNvbXBsZXRlU2F2ZVF1ZXN0aW9ubmFpcmUoZm9ybUdyb3VwKTtcclxuICAgICAgICAgICAvLyAgIGNvbnNvbGUubG9nKFwiIGlzIHRyaWdnZXJlZCA2IFwiKSBcclxuICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgIFxyXG4gICAgICAgICAgfVxyXG4gICAgICB9ICAgXHJcbiAgIC8vICAgY29uc29sZS5sb2coXCIgaXMgdHJpZ2dlcmVkIDdcIilcclxuICAgIC8vICB0aGlzLmNvbXBsZXRlU2F2ZVF1ZXN0aW9ubmFpcmUoZm9ybUdyb3VwKTtcclxuICAgICAvLyBjb25zb2xlLmxvZyhcIiBpcyB0cmlnZ2VyZWQgOFwiKVxyXG4gICAgfSBlbHNle1xyXG4gICAgICBpZihwYXNzd29yZCAhPT0gXCJcIiAmJiB0aGlzLmlzUGFzc3dvcmRWYWxpZChmaXJzdE5hbWUsIGxhc3ROYW1lLCB1c2VySWQsIHBhc3N3b3JkKSlcclxuICAgICAgeyBjb25zb2xlLmxvZyhcIiBpcyB0cmlnZ2VyZWQgNFwiKVxyXG4gICAgICAgIHRoaXMuY29tcGxldGVTYXZlUXVlc3Rpb25uYWlyZShmb3JtR3JvdXApO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2V7XHJcbiAgICAgICAgIC8vIFBHTFAtMTc1MCAgaW4gY29ycmVjdCBSb3V0aW5nIE5VbWJlciAgXHJcbiAgICAgICAgY29uc3QgcGFzc3dvcmRJbnZhbGlkRXJyb3IgPSB7XHJcbiAgICAgICAgICBcImVycm9ySWRcIjogXCJcIixcclxuICAgICAgICAgIFwidGltZXN0YW1wXCI6IFwiXCIsXHJcbiAgICAgICAgICBcIm1zZ1wiOiBbXHJcbiAgICAgICAgICBcIltUaGUgcGFzc3dvcmQgY29udGFpbnMgZWl0aGVyL29yIHVzZXIgbmFtZSwgZmlyc3QgbmFtZSBvciBsYXN0IG5hbWUgd2hpY2ggZG9lcyBub3QgbWF0Y2ggd2l0aCB0aGUgcGFzc3dvcmQgcmVxdWlyZW1lbnRcXHRcXHQuXFx0XFx0XVwiXHJcbiAgICAgICAgICBdLFxyXG4gICAgICAgICAgXCJkZXRhaWxzXCI6IFwidXJpPS9xdWVzdGlvbm5haXJlLXNlcnZpY2UvcXVlc3Rpb25uYWlyZS9zY3JlZW4tcXVlc3Rpb25uYWlyZVwiLFxyXG4gICAgICAgICAgXCJlcnJvclwiOiBudWxsLFxyXG4gICAgICAgICAgXCJlcnJvckNvZGVcIjogXCI0MjJcIlxyXG4gICAgICB9XHJcbiBcclxuICAgICAgICAgICAgICAgICB0aGlzLm9uRXJyb3IuZW1pdChwYXNzd29yZEludmFsaWRFcnJvcik7XHJcblxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjb21wbGV0ZVNhdmVRdWVzdGlvbm5haXJlKGZvcm1Hcm91cCl7XHJcbiAgICB0aGlzLmZvcm1SYXdEYXRhID0gZm9ybUdyb3VwO1xyXG4gICAgdGhpcy5xY3Muc2V0RGF0YSh0aGlzLmFjdGl2ZUluZGV4LCBKU09OLnN0cmluZ2lmeShmb3JtR3JvdXAuZ2V0UmF3VmFsdWUoKSkpO1xyXG4gICAgbGV0IHN0ckludG9PYmo7XHJcbiAgICB0aGlzLnBheUxvYWQgPSAnJztcclxuICAgIHRoaXMucWNzLmdldEFsbERhdGEoKS5mb3JFYWNoKGRhdGEgPT4ge1xyXG4gICAgICBzdHJJbnRvT2JqID0gKGRhdGEpO1xyXG4gICAgICB0aGlzLnBheUxvYWQgPSAodGhpcy5wYXlMb2FkICsgc3RySW50b09iaik7XHJcbiAgICB9KTtcclxuXHJcbiAgICBsZXQgc2F2ZURhdGEgPSB7fSBhcyBRdWVzdGlvbm5haXJlU2F2ZU1vZGVsO1xyXG4gICAgbGV0IGN1cnJlbnRRZSA9IHRoaXMuYXV0b1NhdmUgPyB0aGlzLnFlcy5zZWFyY2hCcy5nZXRWYWx1ZSgpIDogdGhpcy5xdWVyeU1vZGVsO1xyXG5cclxuICAgIGlmICh0aGlzLnBhZ2VUeXBlID09PSAnUE9QVVAnIHx8IHRoaXMucGFnZVR5cGUgPT09ICdKc29uJykge1xyXG4gICAgICB0aGlzLm9uQ29tcGxldGUuZW1pdChmb3JtR3JvdXAuZ2V0UmF3VmFsdWUoKSk7XHJcbiAgICAgIHRoaXMucWNzLnNoYXJlZERhdGEuY2xlYXIoKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5mb3JTY3JlZW5RdWVzdGlvbm5haXJlKSB7XHJcbiAgICAgIHNhdmVEYXRhLmRhdGEgPSB0aGlzLnBheUxvYWQvL0pTT04uc3RyaW5naWZ5KHRoaXMucGF5TG9hZCk7XHJcbiAgICAgIHNhdmVEYXRhLnBvdGVudGlhbElzc3VlSWQgPSBjdXJyZW50UWUucG90ZW50aWFsSXNzdWVJZDtcclxuICAgICAgc2F2ZURhdGEuZmxvd0FibGVBbmRBdmFpbGFibGUgPSBjdXJyZW50UWUuZmxvd0FibGVBbmRBdmFpbGFibGU7XHJcbiAgICAgIHNhdmVEYXRhLnVzZXJUeXBlID0gY3VycmVudFFlLnVzZXJUeXBlO1xyXG4gICAgICBzYXZlRGF0YS5mbG93RnJvbSA9IGN1cnJlbnRRZS5mbG93RnJvbTtcclxuICAgICAgc2F2ZURhdGEuZmxvd1dDQWJsZUFuZEF2YWlsYWJsZSA9IGN1cnJlbnRRZS5mbG93V0NBYmxlQW5kQXZhaWxhYmxlO1xyXG4gICAgICBzYXZlRGF0YS5jbGFpbUFwcGxpY2F0aW9uSWQgPSBjdXJyZW50UWUuY2xhaW1BcHBsaWNhdGlvbklkO1xyXG4gICAgICBzYXZlRGF0YS5xdWVzdGlvbm5haXJlSWRzID0gY3VycmVudFFlLnF1ZXN0aW9ubmFpcmVJZHM7XHJcbiAgICAgIHNhdmVEYXRhLnF1ZXN0aW9ubmFpcmVJZCA9IGN1cnJlbnRRZS5xdWVzdGlvbm5haXJlSWQ7XHJcbiAgICAgIHNhdmVEYXRhLmFjdGl2ZVBhZ2VJbmRleCA9IHRoaXMuYWN0aXZlSW5kZXg7XHJcbiAgICAgIGlmKCF0aGlzLmF1dG9TYXZlKXtcclxuICAgICAgICBzYXZlRGF0YS5hdXRvU2F2ZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMub25Db21wbGV0ZS5lbWl0KHNhdmVEYXRhKTtcclxuICAgICAgICB0aGlzLnFjcy5zaGFyZWREYXRhLmNsZWFyKCk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuaW5wdXREYXRhID0gc2F2ZURhdGE7XHJcbiAgICAgIHRoaXMuYmxvY2tGb3JtVWkoKVxyXG4gICAgICBpZiAoZm9ybUdyb3VwLmludmFsaWQpIHtcclxuICAgICAgICBmb3JtR3JvdXAubWFya0FsbEFzVG91Y2hlZCgpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdGb3JtIGludmFsaWQgLSBibG9ja2luZyBzdWJtaXQgKHNjcmVlbiknKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5xdWVzdGlvbm5haXJlU2VydmljZVxyXG4gICAgICAgIC5zYXZlUXVlc3Rpb25uYWlyZShzYXZlRGF0YSlcclxuICAgICAgICAuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgcmVzID0+IHtcclxuICAgICAgICAgICAgdGhpcy51bmJsb2NrRm9ybVVpKCk7XHJcbiAgICAgICAgICAgIHRoaXMucWVzLnNlYXJjaE1vZGVsLnNwbGljZSh0aGlzLnFlcy5zZWFyY2hNb2RlbC5maW5kSW5kZXgoaXRlbSA9PiBpdGVtLnBvdGVudGlhbElzc3VlSWQgPT0gY3VycmVudFFlLnBvdGVudGlhbElzc3VlSWQpLCAxKTtcclxuICAgICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ3JlbWFpbmluZyBlbGVtZW50cycsIHRoaXMucWVzLnNlYXJjaE1vZGVsKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMucWVzLnNlYXJjaE1vZGVsLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICB0aGlzLnFlcy5zZWFyY2hCcy5uZXh0KHRoaXMucWVzLnNlYXJjaE1vZGVsWzBdKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnTm8gRWxlbWVudCBQcmVzZW50Jyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5vbkNvbXBsZXRlLmVtaXQocmVzKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBlcnIgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnFjcy5zaGFyZWREYXRhLmNsZWFyKCk7XHJcbiAgICAgICAgICAgIHRoaXMudW5ibG9ja0Zvcm1VaSgpO1xyXG4gICAgICAgICAgICB0aGlzLmNhcHRjaGEucmVzZXRDYXB0Y2hhKCk7XHJcbiAgICAgICAgICAgIHRoaXMub25FcnJvci5lbWl0KGVycik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxldCBkYXRhQXJyOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgICB0aGlzLnFjcy5nZXRBbGxEYXRhKCkuZm9yRWFjaChkYXRhID0+IHtcclxuICAgICAgICBkYXRhQXJyLnB1c2goZGF0YSk7XHJcbiAgICAgIH0pO1xyXG4gICAgICBzYXZlRGF0YS5zY3JlZW5RdWVzdGlvbm5haXJlRGF0YSA9IGRhdGFBcnI7XHJcbiAgICAgIHNhdmVEYXRhLnVzZXJUeXBlID0gY3VycmVudFFlLnVzZXJUeXBlO1xyXG4gICAgICBzYXZlRGF0YS5mbG93RnJvbSA9IGN1cnJlbnRRZS5mbG93RnJvbTtcclxuICAgICAgc2F2ZURhdGEuaXNTY3JlZW5RdWVzdGlvbm5haXJlID0gdHJ1ZTtcclxuICAgICAgc2F2ZURhdGEucXVlc3Rpb25uYWlyZUlkcyA9IGN1cnJlbnRRZS5xdWVzdGlvbm5haXJlSWRzO1xyXG4gICAgICBzYXZlRGF0YS51dWlkID0gdGhpcy5pZGVudGlmaWVyOy8vY3VycmVudFFlLnV1aWQ7XHJcbiAgICAgIHNhdmVEYXRhLmZsb3dLZXkgPSBjdXJyZW50UWUuZmxvd0tleTtcclxuICAgICAgc2F2ZURhdGEucXVlc3Rpb25uYWlyZUlkID0gY3VycmVudFFlLnF1ZXN0aW9ubmFpcmVJZDtcclxuICAgICAgc2F2ZURhdGEuYWN0aXZlUGFnZUluZGV4ID0gdGhpcy5hY3RpdmVJbmRleDtcclxuXHJcbiAgICAgIGlmKCF0aGlzLmF1dG9TYXZlKXtcclxuICAgICAgICB0aGlzLm9uQ29tcGxldGUuZW1pdChzYXZlRGF0YSk7XHJcbiAgICAgICAgdGhpcy5xY3Muc2hhcmVkRGF0YS5jbGVhcigpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBpZih0aGlzLm1mYVJlcXVpcmVkKXtcclxuICAgICAgICB0aGlzLnNob3dNZmEgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMubWZhRGF0YSA9IHNhdmVEYXRhO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBpZiAoZm9ybUdyb3VwLmludmFsaWQpIHtcclxuICAgICAgICBmb3JtR3JvdXAubWFya0FsbEFzVG91Y2hlZCgpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdGb3JtIGludmFsaWQgLSBibG9ja2luZyBzdWJtaXQgKHNjcmVlbiknKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgYWxsRGF0YSA9IHRoaXMucWNzLmdldEFsbERhdGEoKTtcclxuXHJcbiAgICAgIGxldCBoYXNJbnZhbGlkID0gZmFsc2U7XHJcblxyXG4gICAgICBhbGxEYXRhLmZvckVhY2goZGF0YSA9PiB7XHJcbiAgICAgICAgY29uc3Qgb2JqID0gSlNPTi5wYXJzZShkYXRhKTtcclxuICAgICAgICBcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBvYmoudGV4dG5vdGlmaWNhdGlvbiA9PT0gbnVsbCB8fFxyXG4gICAgICAgICAgb2JqLmNvbnRhY3R0eXBlID09PSBudWxsXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBoYXNJbnZhbGlkID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgaWYgKGhhc0ludmFsaWQpIHtcclxuICAgICAgICBmb3JtR3JvdXAubWFya0FsbEFzVG91Y2hlZCgpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdCbG9ja2luZyBzdWJtaXQgLSBtaXNzaW5nIHJhZGlvIHZhbHVlcycpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnNhdmVTY3JlZW5RdWVzdGlvbm5haXJlKHNhdmVEYXRhKTtcclxuICAgICAgfVxyXG4gIH1cclxuXHJcbiAgcGF5bWVudERldGFpbHNDaGFuZ2VFcnJvcigpe1xyXG4gICAgcmV0dXJuIHRoaXMucGF5bWVudERldGFpbENoYW5nZUhhc0Vycm9yO1xyXG4gIH1cclxuICAgIC8vIFBHTFAtMTc1MCAgaW4gY29ycmVjdCBSb3V0aW5nIE5VbWJlclxyXG4gIGlzQmFua0RldGFpbHNWYWxpZChyb3V0aW5nTnVtYmVyLCBhY2NvdW50TnVtYmVyLCByZUVudGVyQWNjb3VudE51bWJlcilcclxuICB7IFxyXG4gICAgXHJcbiAgICB0aGlzLmFjY291bnROdW1iZXJmbGc9dHJ1ZTtcclxuICAgIHRoaXMucmVFbnRlckFjY291bnROdW1iZXJmbGFnPXRydWU7XHJcbiAgICB0aGlzLnJvdXRpbmdOdW1iZXJmbGFnPXRydWU7XHJcbiAgICBjb25zdCByb3V0aW5nTnVtYmVyUmVnZXggPSBBcHBSZWdleC5ST1VUSU5HX05VTUJFUl9SRUdFWDtcclxuICAgIGNvbnN0IGFjY291bnROdW1iZXJSZWdleCA9IEFwcFJlZ2V4LkFDQ09VTlRfTlVNQkVSX1JFR0VYX01JTjtcclxuICAgICAgICAgICAgICBpZighcm91dGluZ051bWJlclJlZ2V4LnRlc3Qocm91dGluZ051bWJlcikpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yb3V0aW5nTnVtYmVyZmxhZz1mYWxzZTtcclxuICAgICAgICAgICAgICB9ICAgICAgXHJcbiAgICAgICAgICAgICAgaWYoIWFjY291bnROdW1iZXJSZWdleC50ZXN0KGFjY291bnROdW1iZXIpKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuYWNjb3VudE51bWJlcmZsZz1mYWxzZTtcclxuICAgICAgICAgICAgICB9IFxyXG4gICAgICAgICAgICAgIGlmKCFhY2NvdW50TnVtYmVyUmVnZXgudGVzdChyZUVudGVyQWNjb3VudE51bWJlcikpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZUVudGVyQWNjb3VudE51bWJlcmZsYWc9ZmFsc2U7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmKCF0aGlzLnJvdXRpbmdOdW1iZXJmbGFnICYmICF0aGlzLmFjY291bnROdW1iZXJmbGcgJiYgIXRoaXMucmVFbnRlckFjY291bnROdW1iZXJmbGFnKXtcclxuICAgICAgICAgICAgICAgICAgY29uc3QgQmFua0RldGFpbHNJbnZhbGlkRXJyb3IgPSB7XHJcbiAgICAgICAgICAgICAgICAgIFwiZXJyb3JJZFwiOiBcIlwiLFxyXG4gICAgICAgICAgICAgICAgICBcInRpbWVzdGFtcFwiOiBcIlwiLFxyXG4gICAgICAgICAgICAgICAgICBcIm1zZ1wiOiBbXHJcbiAgICAgICAgICAgICAgICAgIFwiW1RoZSByb3V0aW5nTnVtYmVyLGFjY291bnROdW1iZXIgYW5kIHJlRW50ZXJBY2NvdW50TnVtYmVyIGZpZWxkIHZhbHVlcyBkbyBub3QgbWF0Y2ggdGhlIHJlcXVpcmVkIGZvcm1hdCBcXHRcXHQuXFx0XFx0XVwiXHJcbiAgICAgICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgICAgIFwiZGV0YWlsc1wiOiBcInVyaT0vcXVlc3Rpb25uYWlyZS1zZXJ2aWNlL3F1ZXN0aW9ubmFpcmUvc2NyZWVuLXF1ZXN0aW9ubmFpcmVcIixcclxuICAgICAgICAgICAgICAgICAgXCJlcnJvclwiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICBcImVycm9yQ29kZVwiOiBcIjQyMlwiXHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICB0aGlzLm9uRXJyb3IuZW1pdChCYW5rRGV0YWlsc0ludmFsaWRFcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICB9IGVsc2UgaWYoIXRoaXMucm91dGluZ051bWJlcmZsYWcgKXtcclxuICAgICAgICAgICAgICAgICAgY29uc3QgQmFua0RldGFpbHNJbnZhbGlkRXJyb3IgPSB7XHJcbiAgICAgICAgICAgICAgICAgIFwiZXJyb3JJZFwiOiBcIlwiLFxyXG4gICAgICAgICAgICAgICAgICBcInRpbWVzdGFtcFwiOiBcIlwiLFxyXG4gICAgICAgICAgICAgICAgICBcIm1zZ1wiOiBbXHJcbiAgICAgICAgICAgICAgICAgIFwiW1RoZSByb3V0aW5nTnVtYmVyIGZpZWxkIHZhbHVlIGRvZXMgbm90IG1hdGNoIHRoZSByZXF1aXJlZCBmb3JtYXQgXFx0XFx0LlxcdFxcdF1cIlxyXG4gICAgICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgICAgICBcImRldGFpbHNcIjogXCJ1cmk9L3F1ZXN0aW9ubmFpcmUtc2VydmljZS9xdWVzdGlvbm5haXJlL3NjcmVlbi1xdWVzdGlvbm5haXJlXCIsXHJcbiAgICAgICAgICAgICAgICAgIFwiZXJyb3JcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgXCJlcnJvckNvZGVcIjogXCI0MjJcIlxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMub25FcnJvci5lbWl0KEJhbmtEZXRhaWxzSW52YWxpZEVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgIH1lbHNlIGlmKCF0aGlzLmFjY291bnROdW1iZXJmbGcgJiYgIXRoaXMucmVFbnRlckFjY291bnROdW1iZXJmbGFnKXtcclxuICAgICAgICAgICAgICAgICAgY29uc3QgQmFua0RldGFpbHNJbnZhbGlkRXJyb3IgPSB7XHJcbiAgICAgICAgICAgICAgICAgIFwiZXJyb3JJZFwiOiBcIlwiLFxyXG4gICAgICAgICAgICAgICAgICBcInRpbWVzdGFtcFwiOiBcIlwiLFxyXG4gICAgICAgICAgICAgICAgICBcIm1zZ1wiOiBbXHJcbiAgICAgICAgICAgICAgICAgIFwiW1RoZSBhY2NvdW50TnVtYmVyIGFuZCByZUVudGVyQWNjb3VudE51bWJlciBmaWVsZCB2YWx1ZXMgZG8gbm90IG1hdGNoIHRoZSByZXF1aXJlZCBmb3JtYXQgXFx0XFx0LlxcdFxcdF1cIlxyXG4gICAgICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgICAgICBcImRldGFpbHNcIjogXCJ1cmk9L3F1ZXN0aW9ubmFpcmUtc2VydmljZS9xdWVzdGlvbm5haXJlL3NjcmVlbi1xdWVzdGlvbm5haXJlXCIsXHJcbiAgICAgICAgICAgICAgICAgIFwiZXJyb3JcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgXCJlcnJvckNvZGVcIjogXCI0MjJcIlxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB0aGlzLm9uRXJyb3IuZW1pdChCYW5rRGV0YWlsc0ludmFsaWRFcnJvcik7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgIH1lbHNlIGlmKCF0aGlzLmFjY291bnROdW1iZXJmbGcpe1xyXG4gICAgICAgICAgICAgICAgY29uc3QgQmFua0RldGFpbHNJbnZhbGlkRXJyb3IgPSB7XHJcbiAgICAgICAgICAgICAgICBcImVycm9ySWRcIjogXCJcIixcclxuICAgICAgICAgICAgICAgIFwidGltZXN0YW1wXCI6IFwiXCIsXHJcbiAgICAgICAgICAgICAgICBcIm1zZ1wiOiBbXHJcbiAgICAgICAgICAgICAgICBcIltUaGUgYWNjb3VudE51bWJlciBmaWVsZCB2YWx1ZSBkb2VzIG5vdCBtYXRjaCB0aGUgcmVxdWlyZWQgZm9ybWF0IFxcdFxcdC5cXHRcXHRdXCJcclxuICAgICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgICBcImRldGFpbHNcIjogXCJ1cmk9L3F1ZXN0aW9ubmFpcmUtc2VydmljZS9xdWVzdGlvbm5haXJlL3NjcmVlbi1xdWVzdGlvbm5haXJlXCIsXHJcbiAgICAgICAgICAgICAgICBcImVycm9yXCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICBcImVycm9yQ29kZVwiOiBcIjQyMlwiXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5vbkVycm9yLmVtaXQoQmFua0RldGFpbHNJbnZhbGlkRXJyb3IpO1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH1lbHNlIGlmKCF0aGlzLnJlRW50ZXJBY2NvdW50TnVtYmVyZmxhZyl7XHJcbiAgICAgICAgICAgICAgY29uc3QgQmFua0RldGFpbHNJbnZhbGlkRXJyb3IgPSB7XHJcbiAgICAgICAgICAgICAgXCJlcnJvcklkXCI6IFwiXCIsXHJcbiAgICAgICAgICAgICAgXCJ0aW1lc3RhbXBcIjogXCJcIixcclxuICAgICAgICAgICAgICBcIm1zZ1wiOiBbXHJcbiAgICAgICAgICAgICAgXCJbVGhlIHJlRW50ZXJBY2NvdW50TnVtYmVyIGZpZWxkIHZhbHVlIGRvZXMgbm90IG1hdGNoIHRoZSByZXF1aXJlZCBmb3JtYXQgXFx0XFx0LlxcdFxcdF1cIlxyXG4gICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgXCJkZXRhaWxzXCI6IFwidXJpPS9xdWVzdGlvbm5haXJlLXNlcnZpY2UvcXVlc3Rpb25uYWlyZS9zY3JlZW4tcXVlc3Rpb25uYWlyZVwiLFxyXG4gICAgICAgICAgICAgIFwiZXJyb3JcIjogbnVsbCxcclxuICAgICAgICAgICAgICBcImVycm9yQ29kZVwiOiBcIjQyMlwiXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLm9uRXJyb3IuZW1pdChCYW5rRGV0YWlsc0ludmFsaWRFcnJvcik7XHJcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICB9ZWxzZSAgaWYodGhpcy5hY2NvdW50TnVtYmVyZmxnICYmIHRoaXMucmVFbnRlckFjY291bnROdW1iZXJmbGFnKXtcclxuICAgICAgICAgICAgICAgICAgaWYoYWNjb3VudE51bWJlciE9PXJlRW50ZXJBY2NvdW50TnVtYmVyKXsgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgQmFua0RldGFpbHNJbnZhbGlkRXJyb3IgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBcImVycm9ySWRcIjogXCJcIixcclxuICAgICAgICAgICAgICAgICAgICAgIFwidGltZXN0YW1wXCI6IFwiXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICBcIm1zZ1wiOiBbXHJcbiAgICAgICAgICAgICAgICAgICAgICBcIltWYWx1ZXMgaW4gYWNjb3VudE51bWJlciBhbmQgcmVFbnRlckFjY291bnROdW1iZXIgZmllbGRzIGRvIG5vdCBtYXRjaCBcXHRcXHQuXFx0XFx0XVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgXCJkZXRhaWxzXCI6IFwidXJpPS9xdWVzdGlvbm5haXJlLXNlcnZpY2UvcXVlc3Rpb25uYWlyZS9zY3JlZW4tcXVlc3Rpb25uYWlyZVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgXCJlcnJvclwiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgXCJlcnJvckNvZGVcIjogXCI0MjJcIlxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uRXJyb3IuZW1pdChCYW5rRGV0YWlsc0ludmFsaWRFcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgIH1lbHNlXHJcbiAgICAgICAgICAgICAgICAgIHsgIFxyXG4gICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxyXG4gICAgICAgICAgICAgICAgICB9IFxyXG4gICAgICAgICAgICAgIH1lbHNlXHJcbiAgICAgICAgICAgICAgeyAgXHJcbiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWVcclxuICAgICAgICAgICAgICB9ICAgICBcclxuXHJcbiAgfVxyXG5cclxuICBpc051bWJlcih6aXBjb2RlKSB7XHJcbiAgdmFyIHJlZyA9IG5ldyBSZWdFeHAoXCJeWzAtOV0qJFwiKTtcclxuICByZXR1cm4gcmVnLnRlc3QoemlwY29kZSk7XHJcbiAgfVxyXG5cclxuICBpc1ZhbGlkU3RyZWV0QWRkcmVzcyhzdHJlZXRBZGQpIHtcclxuICAgIGNvbnN0IHJlZyA9IC9eXFxzKihQKD86XFwufG9zdCk/XFxzKk8oPzpcXC58ZmZpY2UpP1xcLj9cXHMqQm94XFxifFBcXC4/T1xcLj9cXHMqQig/Om94KT9cXGJ8UG9zdFxccypPZmZpY2VcXHMqQm94XFxiKS9pO1xyXG4gICAgaWYocmVnLnRlc3Qoc3RyZWV0QWRkKSkge1xyXG4gICAgICBjb25zdCBzdHJlZXRBZGRFcnJvciA9IHtcclxuICAgICAgICAgICAgICAgICAgICBcImVycm9ySWRcIjogXCJcIixcclxuICAgICAgICAgICAgICAgICAgICBcInRpbWVzdGFtcFwiOiBcIlwiLFxyXG4gICAgICAgICAgICAgICAgICAgIFwibXNnXCI6IFtcclxuICAgICAgICAgICAgICAgICAgICBcIlAuTy4gQm94IGFkZHJlc3NlcyBhcmUgbm90IGFsbG93ZWQuXCJcclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgICAgICAgIFwiZGV0YWlsc1wiOiBcInVyaT0vcXVlc3Rpb25uYWlyZS1zZXJ2aWNlL3F1ZXN0aW9ubmFpcmUvc2NyZWVuLXF1ZXN0aW9ubmFpcmVcIixcclxuICAgICAgICAgICAgICAgICAgICBcImVycm9yXCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJlcnJvckNvZGVcIjogXCI0MjJcIlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25FcnJvci5lbWl0KHN0cmVldEFkZEVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9IFxyXG4gICAgcmV0dXJuIHRydWU7XHJcblxyXG4gIH1cclxuXHJcbiAgICAgICBpc1ZhbGlkWmlwQ29kZSh6aXBjb2RlKXtcclxuICAgIGlmKHppcGNvZGUgIT0gbnVsbCAmJiAhdGhpcy5pc051bWJlcih6aXBjb2RlKSl7XHJcbiAgICAgICBpZihsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcImxhbmd1YWdlXCIpID09PSBcImVzXCIpe1xyXG4gICAgICBjb25zdCBaaXBDb2RlRXJyb3IgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgXCJlcnJvcklkXCI6IFwiXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJ0aW1lc3RhbXBcIjogXCJcIixcclxuICAgICAgICAgICAgICAgICAgICBcIm1zZ1wiOiBbXHJcbiAgICAgICAgICAgICAgICAgICAgXCJbRWwgY8OzZGlnbyBwb3N0YWwgZGViZSBjb250ZW5lciBzb2xvIG7Dum1lcm9zIFxcdFxcdC5cXHRcXHRdXCJcclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgICAgICAgIFwiZGV0YWlsc1wiOiBcInVyaT0vcXVlc3Rpb25uYWlyZS1zZXJ2aWNlL3F1ZXN0aW9ubmFpcmUvc2NyZWVuLXF1ZXN0aW9ubmFpcmVcIixcclxuICAgICAgICAgICAgICAgICAgICBcImVycm9yXCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJlcnJvckNvZGVcIjogXCI0MjJcIlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25FcnJvci5lbWl0KFppcENvZGVFcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICBjb25zdCBaaXBDb2RlRXJyb3IgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgXCJlcnJvcklkXCI6IFwiXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJ0aW1lc3RhbXBcIjogXCJcIixcclxuICAgICAgICAgICAgICAgICAgICBcIm1zZ1wiOiBbXHJcbiAgICAgICAgICAgICAgICAgICAgXCJbWmlwIGNvZGUgc2hvdWxkIG9ubHkgaGF2ZSBudW1iZXJzIFxcdFxcdC5cXHRcXHRdXCJcclxuICAgICAgICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgICAgICAgIFwiZGV0YWlsc1wiOiBcInVyaT0vcXVlc3Rpb25uYWlyZS1zZXJ2aWNlL3F1ZXN0aW9ubmFpcmUvc2NyZWVuLXF1ZXN0aW9ubmFpcmVcIixcclxuICAgICAgICAgICAgICAgICAgICBcImVycm9yXCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJlcnJvckNvZGVcIjogXCI0MjJcIlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25FcnJvci5lbWl0KFppcENvZGVFcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgIH0gICAgICAgIFxyXG5cclxuICAgIH1lbHNlIGlmKHppcGNvZGUgIT0gbnVsbCAmJiAoemlwY29kZS5sZW5ndGggPT0gNSB8fCB6aXBjb2RlLmxlbmd0aCA9PSA5KSl7XHJcbiAgICAgcmV0dXJuIHRydWVcclxuICAgIH1lbHNle1xyXG4gICAgICAgaWYobG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJsYW5ndWFnZVwiKSA9PT0gXCJlc1wiKXtcclxuICAgICAgIGNvbnN0IFppcENvZGVFcnJvciA9IHtcclxuICAgICAgICAgICAgICAgICAgICBcImVycm9ySWRcIjogXCJcIixcclxuICAgICAgICAgICAgICAgICAgICBcInRpbWVzdGFtcFwiOiBcIlwiLFxyXG4gICAgICAgICAgICAgICAgICAgIFwibXNnXCI6IFtcclxuICAgICAgICAgICAgICAgICAgICBcIltFbCBjw7NkaWdvIHBvc3RhbCBkZWJlIHNlciBkZSA1IG8gOSBkw61naXRvcyBcXHRcXHQuXFx0XFx0XVwiXHJcbiAgICAgICAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICAgICAgICBcImRldGFpbHNcIjogXCJ1cmk9L3F1ZXN0aW9ubmFpcmUtc2VydmljZS9xdWVzdGlvbm5haXJlL3NjcmVlbi1xdWVzdGlvbm5haXJlXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJlcnJvclwiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIFwiZXJyb3JDb2RlXCI6IFwiNDIyXCJcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgIHRoaXMub25FcnJvci5lbWl0KFppcENvZGVFcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDtcclxuICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICBjb25zdCBaaXBDb2RlRXJyb3IgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgXCJlcnJvcklkXCI6IFwiXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJ0aW1lc3RhbXBcIjogXCJcIixcclxuICAgICAgICAgICAgICAgICAgICBcIm1zZ1wiOiBbXHJcbiAgICAgICAgICAgICAgICAgICAgXCJbWmlwIGNvZGUgc2hvdWxkIGJlIG9mIDUgb3IgOSBkaWdpdHMgXFx0XFx0LlxcdFxcdF1cIlxyXG4gICAgICAgICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgICAgICAgXCJkZXRhaWxzXCI6IFwidXJpPS9xdWVzdGlvbm5haXJlLXNlcnZpY2UvcXVlc3Rpb25uYWlyZS9zY3JlZW4tcXVlc3Rpb25uYWlyZVwiLFxyXG4gICAgICAgICAgICAgICAgICAgIFwiZXJyb3JcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBcImVycm9yQ29kZVwiOiBcIjQyMlwiXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICB0aGlzLm9uRXJyb3IuZW1pdChaaXBDb2RlRXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiA7XHJcbiAgICAgICAgICAgICAgfSAgICAgICAgIFxyXG5cclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuXHJcbiAgaXNQYXNzd29yZFZhbGlkKGZpcnN0TmFtZSwgbGFzdE5hbWUsIHVzZXJJZCwgcGFzc3dvcmQpe1xyXG4gICAgY29uc3QgZXNjYXBlUmVnRXhwID0gKHN0ciA6IFN0cmluZykgPT4gc3RyLnJlcGxhY2UoL1suKis/XiR7fSgpfFtcXF1cXFxcXS9nLCAnXFxcXCQmJyk7XHJcbiAgICBjb25zdCBmaXJzdE5hbWVSZWdleCA9IG5ldyBSZWdFeHAoZXNjYXBlUmVnRXhwKGZpcnN0TmFtZSksICdpJyk7XHJcbiAgICBjb25zdCBsYXN0TmFtZVJlZ2V4ID0gbmV3IFJlZ0V4cChlc2NhcGVSZWdFeHAobGFzdE5hbWUpLCAnaScpO1xyXG4gICAgY29uc3QgdXNlcklkUmVnZXggPSBuZXcgUmVnRXhwKGVzY2FwZVJlZ0V4cCh1c2VySWQpLCAnaScpO1xyXG4gICAgaWYoZmlyc3ROYW1lUmVnZXgudGVzdChwYXNzd29yZCkgfHwgbGFzdE5hbWVSZWdleC50ZXN0KHBhc3N3b3JkKSB8fCB1c2VySWRSZWdleC50ZXN0KHBhc3N3b3JkKSl7XHJcbiAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgfWVsc2V7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2F2ZVNjcmVlblF1ZXN0aW9ubmFpcmUoZGF0YSl7XHJcbiAgICB0aGlzLmJsb2NrRm9ybVVpKClcclxuICAgIHRoaXMucXVlc3Rpb25uYWlyZVNlcnZpY2VcclxuICAgICAgICAuc2F2ZVNjcmVlblF1ZXN0aW9ubmFpcmUoZGF0YSlcclxuICAgICAgICAuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgYXN5bmMgcmVzID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlcykge1xyXG4gICAgICAgICAgICAgIHRoaXMucXVlc3Rpb25uYWlyZVNlcnZpY2Uuc3VjY2Vzc0VsZW1lbnQubmV4dChyZXNbRmJDb25zdGFudHMuc3VjY2Vzc1BhZ2VFbGVtZW50XSk7XHJcbiAgICAgICAgICAgICAgdGhpcy5xdWVzdGlvbm5haXJlU2VydmljZS51dWlkLm5leHQocmVzW0ZiQ29uc3RhbnRzLnV1aWRdKTtcclxuICAgICAgICAgICAgICB0aGlzLnF1ZXN0aW9ubmFpcmVTZXJ2aWNlLndhaXRGb3JQcm9jZXNzaW5nLm5leHQocmVzW0ZiQ29uc3RhbnRzLndhaXRGb3JQcm9jZXNzaW5nXSk7XHJcbiAgICAgICAgICAgICAgdGhpcy5xdWVzdGlvbm5haXJlU2VydmljZS53YWl0Q2hlY2tTZXJ2aWNlVXJpLm5leHQocmVzW0ZiQ29uc3RhbnRzLndhaXRDaGVja1NlcnZpY2VVcmldKTtcclxuICAgICAgICAgICAgICB0aGlzLnF1ZXN0aW9ubmFpcmVTZXJ2aWNlLnBhZ2VUb09wZW4ubmV4dChyZXNbRmJDb25zdGFudHMucGFnZVRvT3Blbl0pO1xyXG5cclxuICAgICAgICAgICAgICBhd2FpdCB0aGlzLnN0b3JhZ2Uuc2V0KEZiQ29uc3RhbnRzLnN1Y2Nlc3NQYWdlRWxlbWVudCwgcmVzW0ZiQ29uc3RhbnRzLnN1Y2Nlc3NQYWdlRWxlbWVudF0pO1xyXG4gICAgICAgICAgICAgIGF3YWl0IHRoaXMuc3RvcmFnZS5zZXQoRmJDb25zdGFudHMud2FpdEZvclByb2Nlc3NpbmcsIHJlc1tGYkNvbnN0YW50cy53YWl0Rm9yUHJvY2Vzc2luZ10pO1xyXG4gICAgICAgICAgICAgIGF3YWl0IHRoaXMuc3RvcmFnZS5zZXQoRmJDb25zdGFudHMud2FpdENoZWNrU2VydmljZVVyaSwgcmVzW0ZiQ29uc3RhbnRzLndhaXRDaGVja1NlcnZpY2VVcmldKTtcclxuICAgICAgICAgICAgICBhd2FpdCB0aGlzLnN0b3JhZ2Uuc2V0KEZiQ29uc3RhbnRzLnBhZ2VUb09wZW4sIHJlc1tGYkNvbnN0YW50cy5wYWdlVG9PcGVuXSk7XHJcbiAgICAgICAgICAgICAgYXdhaXQgdGhpcy5zdG9yYWdlLnNldChGYkNvbnN0YW50cy51dWlkLCByZXNbRmJDb25zdGFudHMudXVpZF0pO1xyXG4gICAgICAgICAgICAgIC8qT25seSBlbmFibGUgbHhueCBpbiBzaWduLXVwIGZsb3cgZm9yIHF1ZXN0aW9ubmFpcmUgZm9ybS1idWlsZGVyKi9cclxuICAgICAgICAgICAgICBpZihkYXRhPy5xdWVzdGlvbm5haXJlSWRzPy5bMF0gPT09IDM0NSl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZsb3dLZXkgPSAzNDU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlc3BvbnNlVXVpZCA9IHJlc1sndXVpZCddO1xyXG4gICAgICAgICAgICAgICAgbGV0IHNzbiA9IHRoaXMuZm9ybVJhd0RhdGEuZ2V0UmF3VmFsdWUoKSAmJiB0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkuc3NuID8gKHRoaXMuZm9ybVJhd0RhdGEuZ2V0UmF3VmFsdWUoKS5zc24pLnRvTG93ZXJDYXNlKCkgOiBcIlwiO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sbi5pc0xleGlzTmV4aXNJZFByb29maW5nRW5hYmxlZChzc24pLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgICAgICAgIG5leHQ6IChyZXMgOiBMZXhpc05leGlzRW5hYmxlZFJlc3BvbnNlTW9kZWwpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAvKklmIGxleGlzLW5leGlzIGlkIHByb29maW5nIGlzIGVuYWJsZWQgKi9cclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzPy5sbmVuYWJsZWQgJiYgcmVzPy5tZXNzYWdlID09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0TGV4aXNOZXhpc0FjY291bnRDcmVhdGlvblVzZXJEZXRhaWxzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzTGV4aXNOZXhpc1BvcHVwRW5hYmxlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghcmVzPy5sbmVuYWJsZWQgJiYgcmVzPy5tZXNzYWdlID09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm5leHRCdXR0b25QYWdlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwibGFuZ3VhZ2VcIikgPT09IFwiZXNcIil7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51dGlsLnN1Y2Nlc3MoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnU3UgY3VlbnRhIHNlIGhhIGNyZWFkbyBjb3JyZWN0YW1lbnRlLiDCoUluaWNpZSBzZXNpw7NuISdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXRpbC5zdWNjZXNzKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1lvdXIgYWNjb3VudCBoYXZlIGJlZW4gc3VjY2Vzc2Z1bGx5IGNyZWF0ZWQuIFBsZWFzZSBsb2dpbiEnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMubmF2Q3RybC5uYXZpZ2F0ZVJvb3QoJy9sb2dpbicpLCAyMDAwKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhpcy5uYXZDdHJsLm5hdmlnYXRlUm9vdChcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gICBgLyR7dGhpcy5uZXh0QnV0dG9uUGFnZX0/aWRlbnRpZmllcj0ke3Jlc1sndXVpZCddfWBcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gKTtcclxuICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25Db21wbGV0ZS5lbWl0KGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnFjcy5zaGFyZWREYXRhLmNsZWFyKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyZXM/LmxuZW5hYmxlZCA9PSBmYWxzZSAmJiByZXM/Lm1lc3NhZ2UgPT0gJ1NTTi1NQVNLRUQnKXtcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0VVNQU0FjY291bnRDcmVhdGlvblVzZXJEZXRhaWxzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyaWdnZXJVU1BTKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0VVNQU0FjY291bnRDcmVhdGlvblVzZXJEZXRhaWxzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAvLyBpZihlcnJvci5lcnJvci5tZXNzYWdlLmluY2x1ZGVzKCdGQUlMIC0gVVNQUyBQcm9vZmluZycpKXtcclxuICAgICAgICAgICAgICAgICAgICAgIC8vICAgLypJZiBVU1BTIHByb29maW5nIGlzIGFscmVhZHkgdHJpZ2dlcmVkIGJ5IENTUiBhbmQgdXNlciB3YXMgbm90IGFibGUgdG8gdmVyaWZ5IGl0IDogc28gaW4gRkFJTCBzdGF0dXMgKi9cclxuICAgICAgICAgICAgICAgICAgICAgIC8vICAgdGhpcy50cmlnZ2VyVVNQUygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgLy8gfSBlbHNlIGlmIChlcnJvci5lcnJvci5tc2dbMF0uaW5jbHVkZXMoJ0lOSVRJQVRFRCAtIFVTUFMgUHJvb2ZpbmcnKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgLy8gICAvKklmIFVTUFMgcHJvb2ZpbmcgaXMgYWxyZWFkeSB0cmlnZ2VyZWQgYnkgQ1NSIGFuZCBpdCBpcyBpbiBJTklUSUFURUQgc3RhdHVzICovXHJcbiAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgdGhpcy51dGlsLnNob3dFcnJvcignWW91ciBVU1BTIGlkZW50aXR5IHByb29maW5nIGlzIHBlbmRpbmcuIFBsZWFzZSBjb21wbGV0ZSBpdCBiZWZvcmUgeW91IGxvZ2luIHRvIHRoZSBwb3J0YWwhJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLm5hdkN0cmwubmF2aWdhdGVSb290KCcvbG9naW4nKSwgMjAwMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAvLyB9XHJcbiAgICAgICAgICAgICAgICAgICAgICBpZihsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcImxhbmd1YWdlXCIpID09PSBcImVzXCIpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnV0aWwuc3VjY2VzcyhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAnwqFDb21wbGV0ZSBzdSB2ZXJpZmljYWNpw7NuIGRlIGlkZW50aWRhZCBkZSBVU1BTIGFudGVzIGRlIGluaWNpYXIgc2VzacOzbiBlbiBlbCBwb3J0YWwhJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51dGlsLnN1Y2Nlc3MoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ1BsZWFzZSBjb21wbGV0ZSB5b3VyIFVTUFMgSWRlbnRpdHkgVmVyaWZpY2F0aW9uIGJlZm9yZSB5b3UgbG9naW4gdG8gdGhlIHBvcnRhbCEnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMubmF2Q3RybC5uYXZpZ2F0ZVJvb3QoJy9sb2dpbicpLCAyMDAwKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH0sIGVycm9yOiAoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRVU1BTQWNjb3VudENyZWF0aW9uVXNlckRldGFpbHMoKTtcclxuICAgICAgICAgICAgICAgICAgICAvLyBpZihlcnJvci5lcnJvci5tZXNzYWdlLmluY2x1ZGVzKCdGQUlMIC0gVVNQUyBQcm9vZmluZycpKXtcclxuICAgICAgICAgICAgICAgICAgICAvLyAgIC8qSWYgVVNQUyBwcm9vZmluZyBpcyBhbHJlYWR5IHRyaWdnZXJlZCBieSBDU1IgYW5kIHVzZXIgd2FzIG5vdCBhYmxlIHRvIHZlcmlmeSBpdCA6IHNvIGluIEZBSUwgc3RhdHVzICovXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gICB0aGlzLnRyaWdnZXJVU1BTKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gfSBlbHNlIGlmIChlcnJvci5lcnJvci5tc2dbMF0uaW5jbHVkZXMoJ0lOSVRJQVRFRCAtIFVTUFMgUHJvb2ZpbmcnKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vICAgLypJZiBVU1BTIHByb29maW5nIGlzIGFscmVhZHkgdHJpZ2dlcmVkIGJ5IENTUiBhbmQgaXQgaXMgaW4gSU5JVElBVEVEIHN0YXR1cyAqL1xyXG4gICAgICAgICAgICAgICAgICAgIC8vICAgICB0aGlzLnV0aWwuc2hvd0Vycm9yKCdZb3VyIFVTUFMgaWRlbnRpdHkgcHJvb2ZpbmcgaXMgcGVuZGluZy4gUGxlYXNlIGNvbXBsZXRlIGl0IGJlZm9yZSB5b3UgbG9naW4gdG8gdGhlIHBvcnRhbCEnKTtcclxuICAgICAgICAgICAgICAgICAgICAvLyAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLm5hdkN0cmwubmF2aWdhdGVSb290KCcvbG9naW4nKSwgMjAwMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gfSBcclxuICAgICAgICAgICAgICAgICAgICBpZihsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcImxhbmd1YWdlXCIpID09PSBcImVzXCIpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy51dGlsLnN1Y2Nlc3MoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICfCoUNvbXBsZXRlIHN1IHZlcmlmaWNhY2nDs24gZGUgaWRlbnRpZGFkIGRlIFVTUFMgYW50ZXMgZGUgaW5pY2lhciBzZXNpw7NuIGVuIGVsIHBvcnRhbCEnXHJcbiAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLnV0aWwuc3VjY2VzcyhcclxuICAgICAgICAgICAgICAgICAgICAgICAgJ1BsZWFzZSBjb21wbGV0ZSB5b3VyIFVTUFMgSWRlbnRpdHkgVmVyaWZpY2F0aW9uIGJlZm9yZSB5b3UgbG9naW4gdG8gdGhlIHBvcnRhbCEnXHJcbiAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMubmF2Q3RybC5uYXZpZ2F0ZVJvb3QoJy9sb2dpbicpLCAyMDAwKTtcclxuICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLm5leHRCdXR0b25QYWdlKXtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5uYXZDdHJsLm5hdmlnYXRlUm9vdChgLyR7dGhpcy5uZXh0QnV0dG9uUGFnZX0/aWRlbnRpZmllcj0ke3Jlc1sndXVpZCddfWApO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5vbkNvbXBsZXRlLmVtaXQoZGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMucWNzLnNoYXJlZERhdGEuY2xlYXIoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYoIShkYXRhPy5xdWVzdGlvbm5haXJlSWRzPy5bMF0gPT09IDM0NSkpe1xyXG4gICAgICAgICAgICAgIHRoaXMudW5ibG9ja0Zvcm1VaSgpO1xyXG4gICAgICAgICAgICAgIHRoaXMuc2hvd01mYSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgZXJyID0+IHtcclxuICAgICAgICAgICAgaWYoZXJyLm1zZ1swXS5pbmNsdWRlcygnVGhlcmUgaXMgbm8gYWN0aXZlIGNsYWltIHRvIHVwZGF0ZSBwYXltZW50IEluZm9ybWF0aW9uJykpe1xyXG4gICAgICAgICAgICAgIHRoaXMucGF5bWVudERldGFpbENoYW5nZUhhc0Vycm9yID0gdHJ1ZTtcclxuICAgICAgICAgICAgfSBcclxuICAgICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ0Vycm9yIG9jY3VyZWQnLCBlcnIpO1xyXG4gICAgICAgICAgICBpZiAoZXJyICYmIEFycmF5LmlzQXJyYXkoZXJyLm1zZykgJiYgZXJyLm1zZy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgY29kZSA9IFN0cmluZyhlcnIubXNnWzBdKTtcclxuICAgICAgICAgICAgICBpZiAoY29kZS5pbmNsdWRlcygnW2Vycm9yLmFjY2Vzcy51c2VybmFtZS5leGlzdF0nKSkge1xyXG4gICAgICAgICAgICAgICAgaWYobG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJsYW5ndWFnZVwiKSA9PT0gXCJlc1wiKXtcclxuICAgICAgICAgICAgICAgICAgY29uc3QgdXNlckV4aXN0c0Vycm9yPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgXCJlcnJvcklkXCI6IFwiXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJ0aW1lc3RhbXBcIjogXCJcIixcclxuICAgICAgICAgICAgICAgICAgICBcIm1zZ1wiOiBbXHJcbiAgICAgICAgICAgICAgICAgICAgXCJbRXN0ZSBJRCBkZSB1c3VhcmlvIHlhIGVzdMOhIGVuIHVzby4gSW50ZW50ZSBjb24gb3RybyBJRCBkZSB1c3VhcmlvLl1cIlxyXG4gICAgICAgICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgICAgICAgXCJkZXRhaWxzXCI6IFwidXJpPS9xdWVzdGlvbm5haXJlLXNlcnZpY2UvcXVlc3Rpb25uYWlyZS9zY3JlZW4tcXVlc3Rpb25uYWlyZVwiLFxyXG4gICAgICAgICAgICAgICAgICAgIFwiZXJyb3JcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBcImVycm9yQ29kZVwiOiBcIjQyMlwiXHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgdGhpcy5vbkVycm9yLmVtaXQodXNlckV4aXN0c0Vycm9yKTtcclxuICAgICAgICAgICAgICAgIH1lbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB1c2VyRXhpc3RzRXJyb3IgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBcImVycm9ySWRcIjogXCJcIixcclxuICAgICAgICAgICAgICAgICAgICAgIFwidGltZXN0YW1wXCI6IFwiXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICBcIm1zZ1wiOiBbXHJcbiAgICAgICAgICAgICAgICAgICAgICBcIltVc2VyIElEIGFscmVhZHkgZXhpc3RzLiBUcnkgYW5vdGhlciBVc2VyIElELl1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICAgICAgICAgIFwiZGV0YWlsc1wiOiBcInVyaT0vcXVlc3Rpb25uYWlyZS1zZXJ2aWNlL3F1ZXN0aW9ubmFpcmUvc2NyZWVuLXF1ZXN0aW9ubmFpcmVcIixcclxuICAgICAgICAgICAgICAgICAgICAgIFwiZXJyb3JcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgIFwiZXJyb3JDb2RlXCI6IFwiNDIyXCJcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB0aGlzLm9uRXJyb3IuZW1pdCh1c2VyRXhpc3RzRXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9uRXJyb3IuZW1pdChlcnIpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIGlmKHRoaXMubWZhUmVxdWlyZWQpe1xyXG4gICAgICAgICAgICAgIHRoaXMubWZhRXJyb3IgPSBlcnI7XHJcbiAgICAgICAgICAgIH0gZWxzZXtcclxuICAgICAgICAgICAgICB0aGlzLm9uRXJyb3IuZW1pdChlcnIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMudW5ibG9ja0Zvcm1VaSgpO1xyXG4gICAgICAgICAgICB0aGlzLmNhcHRjaGEucmVzZXRDYXB0Y2hhKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuICB9XHJcblxyXG4gIHNldExleGlzTmV4aXNBY2NvdW50Q3JlYXRpb25Vc2VyRGV0YWlscygpe1xyXG4gICAgY29uc3QgZmlyc3ROYW1lID0gdGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpICYmIHRoaXMuZm9ybVJhd0RhdGEuZ2V0UmF3VmFsdWUoKS5maXJzdE5hbWUgPyAodGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpLmZpcnN0TmFtZSkudG9Mb3dlckNhc2UoKSA6IFwiXCI7XHJcbiAgICBjb25zdCBsYXN0TmFtZSA9IHRoaXMuZm9ybVJhd0RhdGEuZ2V0UmF3VmFsdWUoKSAmJiB0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkubGFzdE5hbWUgPyAodGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpLmxhc3ROYW1lKS50b0xvd2VyQ2FzZSgpIDogXCJcIjtcclxuICAgIGxldCBzdHJlZXQxID0gXCJcIjtcclxuICAgIGxldCBjaXR5ID0gXCJcIjtcclxuICAgIGxldCBzdGF0ZSA9IFwiXCI7XHJcbiAgICBsZXQgemlwID0gXCJcIjtcclxuICAgIGlmKHRoaXMuZm9ybVJhd0RhdGEuZ2V0UmF3VmFsdWUoKSAmJiB0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkuZGlmZm1haWxhZGRyZXNzICE9IG51bGwpe1xyXG4gICAgICBpZih0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkuZGlmZm1haWxhZGRyZXNzID09PSBcIllcIil7XHJcbiAgICAgICAgc3RyZWV0MSA9IHRoaXMuZm9ybVJhd0RhdGEuZ2V0UmF3VmFsdWUoKSAmJiB0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkubWFpbEFkZHJlc3Muc3RyZWV0QWRkcmVzcyA/ICh0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkubWFpbEFkZHJlc3Muc3RyZWV0QWRkcmVzcykudG9Mb3dlckNhc2UoKSA6IFwiXCI7XHJcbiAgICAgICAgY2l0eSA9IHRoaXMuZm9ybVJhd0RhdGEuZ2V0UmF3VmFsdWUoKSAmJiB0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkubWFpbEFkZHJlc3MuY2l0eSA/ICh0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkubWFpbEFkZHJlc3MuY2l0eSkudG9Mb3dlckNhc2UoKSA6IFwiXCI7XHJcbiAgICAgICAgc3RhdGUgPSB0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkgJiYgdGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpLm1haWxBZGRyZXNzLnN0YXRlLnZhbHVlID8gKHRoaXMuZm9ybVJhd0RhdGEuZ2V0UmF3VmFsdWUoKS5tYWlsQWRkcmVzcy5zdGF0ZS52YWx1ZSkudG9Mb3dlckNhc2UoKSA6IFwiXCI7XHJcbiAgICAgICAgemlwID0gdGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpICYmIHRoaXMuZm9ybVJhd0RhdGEuZ2V0UmF3VmFsdWUoKS5tYWlsQWRkcmVzcy56aXAgPyAodGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpLm1haWxBZGRyZXNzLnppcCkudG9Mb3dlckNhc2UoKSA6IFwiXCI7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgc3RyZWV0MSA9IHRoaXMuZm9ybVJhd0RhdGEuZ2V0UmF3VmFsdWUoKSAmJiB0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkucmVzQWRyZXNzLnN0cmVldEFkZHJlc3MgPyAodGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpLnJlc0FkcmVzcy5zdHJlZXRBZGRyZXNzKS50b0xvd2VyQ2FzZSgpIDogXCJcIjtcclxuICAgICAgICBjaXR5ID0gdGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpICYmIHRoaXMuZm9ybVJhd0RhdGEuZ2V0UmF3VmFsdWUoKS5yZXNBZHJlc3MuY2l0eSA/ICh0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkucmVzQWRyZXNzLmNpdHkpLnRvTG93ZXJDYXNlKCkgOiBcIlwiO1xyXG4gICAgICAgIHN0YXRlID0gdGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpICYmIHRoaXMuZm9ybVJhd0RhdGEuZ2V0UmF3VmFsdWUoKS5yZXNBZHJlc3Muc3RhdGUudmFsdWUgPyAodGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpLnJlc0FkcmVzcy5zdGF0ZS52YWx1ZSkudG9Mb3dlckNhc2UoKSA6IFwiXCI7XHJcbiAgICAgICAgemlwID0gdGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpICYmIHRoaXMuZm9ybVJhd0RhdGEuZ2V0UmF3VmFsdWUoKS5yZXNBZHJlc3MuemlwID8gKHRoaXMuZm9ybVJhd0RhdGEuZ2V0UmF3VmFsdWUoKS5yZXNBZHJlc3MuemlwKS50b0xvd2VyQ2FzZSgpIDogXCJcIjtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgY29uc3QgZG9iID0gdGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpICYmIHRoaXMuZm9ybVJhd0RhdGEuZ2V0UmF3VmFsdWUoKS5kb2IgPyAodGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpLmRvYikudG9Mb3dlckNhc2UoKSA6IFwiXCI7XHJcbiAgICBjb25zdCBlbWFpbCA9IHRoaXMuZm9ybVJhd0RhdGEuZ2V0UmF3VmFsdWUoKSAmJiB0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkuZW1haWwgPyAodGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpLmVtYWlsKS50b0xvd2VyQ2FzZSgpIDogXCJcIjtcclxuICAgIGNvbnN0IHBob25lID0gdGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpICYmIHRoaXMuZm9ybVJhd0RhdGEuZ2V0UmF3VmFsdWUoKS5waG9uZSA/ICh0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkucGhvbmUpLnRvTG93ZXJDYXNlKCkgOiBcIlwiO1xyXG4gICAgY29uc3Qgc3NuID0gdGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpICYmIHRoaXMuZm9ybVJhd0RhdGEuZ2V0UmF3VmFsdWUoKS5zc24gPyAodGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpLnNzbikudG9Mb3dlckNhc2UoKSA6IFwiXCI7XHJcblxyXG4gICAgaWYgKCF3aW5kb3dbJ3Nlc3Npb25JZCddKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1Nlc3Npb24gSUQgbm90IGZvdW5kIGluIHdpbmRvdyBvYmplY3QuJyk7XHJcbiAgICAgIHJldHVybjsgLy8gaGFuZGxlIGFjY29yZGluZ2x5XHJcbiAgICB9XHJcblxyXG4gICAgaWYod2luZG93WydzZXNzaW9uSWQnXSAhPSBudWxsKXtcclxuICAgICAgdGhpcy51c2VyRGV0YWlscyA9IHtcclxuICAgICAgICBzZXNzaW9uX2lkOiB3aW5kb3dbJ3Nlc3Npb25JZCddID8gd2luZG93WydzZXNzaW9uSWQnXSA6IG51bGwsXHJcbiAgICAgICAgaW5wdXRfaXBfYWRkcmVzczogbnVsbCwgLy8gc2VuZCBudWxsXHJcbiAgICAgICAgYWNjb3VudF9maXJzdF9uYW1lOiBmaXJzdE5hbWUsXHJcbiAgICAgICAgYWNjb3VudF9sYXN0X25hbWU6IGxhc3ROYW1lLFxyXG4gICAgICAgIGFjY291bnRfYWRkcmVzc19zdHJlZXQxOiBzdHJlZXQxLFxyXG4gICAgICAgIGFjY291bnRfYWRkcmVzc19jaXR5OiBjaXR5LFxyXG4gICAgICAgIGFjY291bnRfYWRkcmVzc19zdGF0ZTogc3RhdGUsXHJcbiAgICAgICAgYWNjb3VudF9hZGRyZXNzX3ppcDogemlwLFxyXG4gICAgICAgIGFjY291bnRfZGF0ZV9vZl9iaXJ0aDogZG9iLCAvL1wiWVlZWU1NRERcIlxyXG4gICAgICAgIGFjY291bnRfZW1haWw6IGVtYWlsLFxyXG4gICAgICAgIGFjY291bnRfdGVsZXBob25lOiBwaG9uZSxcclxuICAgICAgICBuYXRpb25hbF9pZF9udW1iZXI6IHNzblxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuaXNMZXhpc05leGlzUG9wdXBFbmFibGVkID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldFVTUFNBY2NvdW50Q3JlYXRpb25Vc2VyRGV0YWlscygpe1xyXG4gICAgY29uc3QgZmlyc3ROYW1lID0gdGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpICYmIHRoaXMuZm9ybVJhd0RhdGEuZ2V0UmF3VmFsdWUoKS5maXJzdE5hbWUgPyAodGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpLmZpcnN0TmFtZSkudG9Mb3dlckNhc2UoKSA6IFwiXCI7XHJcbiAgICBjb25zdCBsYXN0TmFtZSA9IHRoaXMuZm9ybVJhd0RhdGEuZ2V0UmF3VmFsdWUoKSAmJiB0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkubGFzdE5hbWUgPyAodGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpLmxhc3ROYW1lKS50b0xvd2VyQ2FzZSgpIDogXCJcIjtcclxuICAgIGxldCBzdHJlZXQxID0gXCJcIjtcclxuICAgIGxldCBjaXR5ID0gXCJcIjtcclxuICAgIGxldCBzdGF0ZSA9IFwiXCI7XHJcbiAgICBsZXQgemlwID0gXCJcIjtcclxuICAgIGlmKHRoaXMuZm9ybVJhd0RhdGEuZ2V0UmF3VmFsdWUoKSAmJiB0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkuZGlmZm1haWxhZGRyZXNzICE9IG51bGwpe1xyXG4gICAgICBpZih0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkuZGlmZm1haWxhZGRyZXNzID09PSBcIllcIil7XHJcbiAgICAgICAgc3RyZWV0MSA9IHRoaXMuZm9ybVJhd0RhdGEuZ2V0UmF3VmFsdWUoKSAmJiB0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkubWFpbEFkZHJlc3Muc3RyZWV0QWRkcmVzcyA/ICh0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkubWFpbEFkZHJlc3Muc3RyZWV0QWRkcmVzcykudG9Mb3dlckNhc2UoKSA6IFwiXCI7XHJcbiAgICAgICAgY2l0eSA9IHRoaXMuZm9ybVJhd0RhdGEuZ2V0UmF3VmFsdWUoKSAmJiB0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkubWFpbEFkZHJlc3MuY2l0eSA/ICh0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkubWFpbEFkZHJlc3MuY2l0eSkudG9Mb3dlckNhc2UoKSA6IFwiXCI7XHJcbiAgICAgICAgc3RhdGUgPSB0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkgJiYgdGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpLm1haWxBZGRyZXNzLnN0YXRlLnZhbHVlID8gKHRoaXMuZm9ybVJhd0RhdGEuZ2V0UmF3VmFsdWUoKS5tYWlsQWRkcmVzcy5zdGF0ZS52YWx1ZSkudG9Mb3dlckNhc2UoKSA6IFwiXCI7XHJcbiAgICAgICAgemlwID0gdGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpICYmIHRoaXMuZm9ybVJhd0RhdGEuZ2V0UmF3VmFsdWUoKS5tYWlsQWRkcmVzcy56aXAgPyAodGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpLm1haWxBZGRyZXNzLnppcCkudG9Mb3dlckNhc2UoKSA6IFwiXCI7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgc3RyZWV0MSA9IHRoaXMuZm9ybVJhd0RhdGEuZ2V0UmF3VmFsdWUoKSAmJiB0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkucmVzQWRyZXNzLnN0cmVldEFkZHJlc3MgPyAodGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpLnJlc0FkcmVzcy5zdHJlZXRBZGRyZXNzKS50b0xvd2VyQ2FzZSgpIDogXCJcIjtcclxuICAgICAgICBjaXR5ID0gdGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpICYmIHRoaXMuZm9ybVJhd0RhdGEuZ2V0UmF3VmFsdWUoKS5yZXNBZHJlc3MuY2l0eSA/ICh0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkucmVzQWRyZXNzLmNpdHkpLnRvTG93ZXJDYXNlKCkgOiBcIlwiO1xyXG4gICAgICAgIHN0YXRlID0gdGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpICYmIHRoaXMuZm9ybVJhd0RhdGEuZ2V0UmF3VmFsdWUoKS5yZXNBZHJlc3Muc3RhdGUudmFsdWUgPyAodGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpLnJlc0FkcmVzcy5zdGF0ZS52YWx1ZSkudG9Mb3dlckNhc2UoKSA6IFwiXCI7XHJcbiAgICAgICAgemlwID0gdGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpICYmIHRoaXMuZm9ybVJhd0RhdGEuZ2V0UmF3VmFsdWUoKS5yZXNBZHJlc3MuemlwID8gKHRoaXMuZm9ybVJhd0RhdGEuZ2V0UmF3VmFsdWUoKS5yZXNBZHJlc3MuemlwKS50b0xvd2VyQ2FzZSgpIDogXCJcIjtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgY29uc3QgZG9iID0gdGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpICYmIHRoaXMuZm9ybVJhd0RhdGEuZ2V0UmF3VmFsdWUoKS5kb2IgPyAodGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpLmRvYikudG9Mb3dlckNhc2UoKSA6IFwiXCI7XHJcbiAgICBjb25zdCBlbWFpbCA9IHRoaXMuZm9ybVJhd0RhdGEuZ2V0UmF3VmFsdWUoKSAmJiB0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkuZW1haWwgPyAodGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpLmVtYWlsKS50b0xvd2VyQ2FzZSgpIDogXCJcIjtcclxuICAgIGNvbnN0IHBob25lID0gdGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpICYmIHRoaXMuZm9ybVJhd0RhdGEuZ2V0UmF3VmFsdWUoKS5waG9uZSA/ICh0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkucGhvbmUpLnRvTG93ZXJDYXNlKCkgOiBcIlwiO1xyXG4gICAgY29uc3Qgc3NuID0gdGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpICYmIHRoaXMuZm9ybVJhd0RhdGEuZ2V0UmF3VmFsdWUoKS5zc24gPyAodGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpLnNzbikudG9Mb3dlckNhc2UoKSA6IFwiXCI7XHJcblxyXG4gICAgaWYgKCF3aW5kb3dbJ3Nlc3Npb25JZCddKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1Nlc3Npb24gSUQgbm90IGZvdW5kIGluIHdpbmRvdyBvYmplY3QuJyk7XHJcbiAgICAgIHJldHVybjsgLy8gaGFuZGxlIGFjY29yZGluZ2x5XHJcbiAgICB9XHJcblxyXG4gICAgaWYod2luZG93WydzZXNzaW9uSWQnXSAhPSBudWxsKXtcclxuICAgICAgdGhpcy51c2VyRGV0YWlscyA9IHtcclxuICAgICAgICBzZXNzaW9uX2lkOiB3aW5kb3dbJ3Nlc3Npb25JZCddID8gd2luZG93WydzZXNzaW9uSWQnXSA6IG51bGwsXHJcbiAgICAgICAgaW5wdXRfaXBfYWRkcmVzczogbnVsbCwgLy8gc2VuZCBudWxsXHJcbiAgICAgICAgYWNjb3VudF9maXJzdF9uYW1lOiBmaXJzdE5hbWUsXHJcbiAgICAgICAgYWNjb3VudF9sYXN0X25hbWU6IGxhc3ROYW1lLFxyXG4gICAgICAgIGFjY291bnRfYWRkcmVzc19zdHJlZXQxOiBzdHJlZXQxLFxyXG4gICAgICAgIGFjY291bnRfYWRkcmVzc19jaXR5OiBjaXR5LFxyXG4gICAgICAgIGFjY291bnRfYWRkcmVzc19zdGF0ZTogc3RhdGUsXHJcbiAgICAgICAgYWNjb3VudF9hZGRyZXNzX3ppcDogemlwLFxyXG4gICAgICAgIGFjY291bnRfZGF0ZV9vZl9iaXJ0aDogZG9iLCAvL1wiWVlZWU1NRERcIlxyXG4gICAgICAgIGFjY291bnRfZW1haWw6IGVtYWlsLFxyXG4gICAgICAgIGFjY291bnRfdGVsZXBob25lOiBwaG9uZSxcclxuICAgICAgICBuYXRpb25hbF9pZF9udW1iZXI6IHNzblxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkxuU3VjY2Vzcygpe1xyXG4gICAgdGhpcy5pc0xleGlzTmV4aXNQb3B1cEVuYWJsZWQgPSBmYWxzZTtcclxuICAgIHRoaXMudXRpbC5oaWRlTG9hZGVyKCk7XHJcbiAgICBpZih0aGlzLm5leHRCdXR0b25QYWdlKSB7XHJcbiAgICAgIC8vdGhpcy51dGlsLnN1Y2Nlc3MoXHJcbiAgICAgIC8vICAnWW91ciBhY2NvdW50IGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBjcmVhdGVkLiBQbGVhc2UgbG9naW4hJ1xyXG4gICAgICAvLyk7XHJcbiAgICAgIC8vc2V0VGltZW91dCgoKSA9PiB0aGlzLm5hdkN0cmwubmF2aWdhdGVSb290KCcvbG9naW4nKSwgMjAwMCk7XHJcbiAgICAgIHRoaXMubmF2Q3RybC5uYXZpZ2F0ZVJvb3QoYC8ke3RoaXMubmV4dEJ1dHRvblBhZ2V9P2lkZW50aWZpZXI9JHt0aGlzLnJlc3BvbnNlVXVpZH1gKTtcclxuICAgIH0gXHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5vbkNvbXBsZXRlLmVtaXQodGhpcy5pbnB1dERhdGEpO1xyXG4gICAgICB0aGlzLnFjcy5zaGFyZWREYXRhLmNsZWFyKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnVuYmxvY2tGb3JtVWkoKTtcclxuICAgIHRoaXMuc2hvd01mYSA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgb25MTkVycm9yKCl7XHJcbiAgICB0aGlzLnVuYmxvY2tGb3JtVWkoKTtcclxuICAgIHRoaXMuc2hvd01mYSA9IGZhbHNlO1xyXG4gICAgY29uc29sZS5sb2coXCJQbGVhc2UgY29udGFjdCBLRE9MIVwiKTtcclxuICB9XHJcblxyXG4gIHRyaWdnZXJVU1BTKCl7XHJcbiAgICB0aGlzLnVuYmxvY2tGb3JtVWkoKTtcclxuICAgIHRoaXMuc2hvd01mYSA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc0xleGlzTmV4aXNQb3B1cEVuYWJsZWQgPSBmYWxzZTtcclxuICAgIHRoaXMudXRpbC5oaWRlTG9hZGVyKCk7XHJcbiAgICBjb25zb2xlLmxvZyhcInVzcHMgaXMgdHJpZ2dlcmVkXCIpXHJcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgndXNlckRldGFpbHMnLCBKU09OLnN0cmluZ2lmeSh0aGlzLnVzZXJEZXRhaWxzKSk7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL3VzcHMtcmVkaXJlY3QnLCBcIlwiXSksIDEwMDApO1xyXG4gIH1cclxuXHJcbiAgc2V0UHJldkFuZE5leHRCdXR0b24oKSB7XHJcbiAgICBsZXQgY29tcGFyZVZhbHVlOiBudW1iZXIgPSAwO1xyXG4gICAgaWYgKHRoaXMuYWN0aXZlSW5kZXggPiAwKSB7XHJcbiAgICAgIGNvbXBhcmVWYWx1ZSA9IDE7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuYWN0aXZlSW5kZXggPiAwKSB7XHJcbiAgICAgIHRoaXMuaXNGaXJzdCA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmFjdGl2ZUluZGV4ID09PSAxICYmIHRoaXMuaXNQcmV2aW91c1BhZ2VBUGxhY2Vob2xkZXIodGhpcy5xdWVzdGlvbnNbMF0ucGFnZXNbMF0pKSB7XHJcbiAgICAgIHRoaXMuaXNGaXJzdCA9IHRydWU7XHJcbiAgICAgIHRoaXMuaXNMYXN0ID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuYWN0aXZlSW5kZXggPT09IDApIHtcclxuICAgICAgdGhpcy5pc0ZpcnN0ID0gdHJ1ZTtcclxuICAgICAgdGhpcy5pc0xhc3QgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5hY3RpdmVJbmRleCA9PT0gdGhpcy5xdWVzdGlvbnNbMF0ucGFnZXMubGVuZ3RoIC0gMSkge1xyXG4gICAgICB0aGlzLmlzTGFzdCA9IHRydWU7XHJcbiAgICAgIHRoaXMuaXNGaXJzdCA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmFjdGl2ZUluZGV4IDwgdGhpcy5xdWVzdGlvbnNbMF0ucGFnZXMubGVuZ3RoIC0gMSkge1xyXG4gICAgICB0aGlzLmlzTGFzdCA9IGZhbHNlO1xyXG4gICAgfSAgIFxyXG4gICAgdGhpcy5zZXR1cExvYWRlck1vZGVsKCk7XHJcbiAgfVxyXG5cclxuICBpc1ByZXZpb3VzUGFnZUFQbGFjZWhvbGRlcihwYWdlIDogYW55KXtcclxuICAgIHRoaXMubG9nZ2VyLmRlYnVnKFwiaXNQbGFjZUhvbGRlciA9IFwiICsgcGFnZVtcImlzUGxhY2VIb2xkZXJcIl0pO1xyXG4gICAgbGV0IHBsYWNlSG9sZGVyOiBib29sZWFuID0gIHBhZ2VbXCJpc1BsYWNlSG9sZGVyXCJdO1xyXG4gICAgcmV0dXJuIHBsYWNlSG9sZGVyLnZhbHVlT2YoKTtcclxuICB9XHJcblxyXG4gIHN0ZXBDaGFuZ2VkKGV2ZW50OiBTdGVwcGVyU2VsZWN0aW9uRXZlbnQpIHtcclxuICAgIGlmIChldmVudC5wcmV2aW91c2x5U2VsZWN0ZWRJbmRleCA+IGV2ZW50LnNlbGVjdGVkSW5kZXgpIHtcclxuICAgICAgZXZlbnQucHJldmlvdXNseVNlbGVjdGVkU3RlcC5pbnRlcmFjdGVkID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjYW5jZWxBY3Rpb24oKSB7XHJcbiAgICB0aGlzLm5hdkN0cmwubmF2aWdhdGVSb290KHRoaXMuYmFja0J1dHRvblBhZ2UpO1xyXG4gIH1cclxuXHJcbiAgY2FuY2VsUG9wVXAoKSB7XHJcbiAgICBsZXQgZm9ybUdyb3VwID0gdGhpcy5mb3JtR3JvdXBBcnJheVt0aGlzLmFjdGl2ZUluZGV4XTtcclxuICAgIHRoaXMubW9kZWxDYW5jZWwuZW1pdChmYWxzZSk7XHJcbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnY2FuY2VsUG9wVXAgY2FsbGVkJywgZm9ybUdyb3VwKVxyXG4gIH1cclxuXHJcbiAgdXBsb2FkRmlsZShxdWV1ZTogRmlsZVtdKSB7XHJcbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZygncXVldWUxMTEgJywgcXVldWUpO1xyXG4gICAgLy9xdWV1ZVswXS5zaXplXHJcbiAgfVxyXG5cclxuICBibG9ja0Zvcm1VaSgpe1xyXG4gICAgdGhpcy5ibG9ja1VpID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHVuYmxvY2tGb3JtVWkoKXtcclxuICAgIHRoaXMuYmxvY2tVaSA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgc2hvdWxkRml0Q29udGVudChlbGVtZW50cyA6IEVsZW1lbnRzTW9kZWxbXSl7XHJcbiAgICBsZXQgc2hvdWxkRml0Q29udGVudCA6IGJvb2xlYW4gPSB0cnVlOyBcclxuICAgIGVsZW1lbnRzLmZvckVhY2goZWxlbWVudCA9PiB7XHJcbiAgICAgIGlmKGVsZW1lbnQuY3VzdG9tVGFnID09ICdjb21wb25lbnQnKXtcclxuICAgICAgICBzaG91bGRGaXRDb250ZW50ID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBzaG91bGRGaXRDb250ZW50O1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlRHluYW1pY1BhcmFtKGV2ZW50KXtcclxuICAgIGlmKEFycmF5LmlzQXJyYXkoZXZlbnQpKXtcclxuICAgICAgdGhpcy5keW5hbWljUGFyYW0gPSBbLi4uZXZlbnRdO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5keW5hbWljUGFyYW0gPSBPYmplY3QuYXNzaWduKHt9ICwgZXZlbnQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25TdWJtaXQoKXtcclxuICAgIHRoaXMudXRpbC5mb2N1c09uU3VibWl0KHRoaXMuZWwpO1xyXG4gIH1cclxufVxyXG4iLCI8cC1ibG9ja1VJIFtibG9ja2VkXT1cImJsb2NrVWlcIj5cclxuICA8aW9uLXNwaW5uZXIgbmFtZT1cImNyZXNjZW50XCI+PC9pb24tc3Bpbm5lcj5cclxuPC9wLWJsb2NrVUk+XHJcbjxkaXYgKm5nSWY9XCJxdWVzdGlvbnMgJiYgcXVlc3Rpb25zWzBdICYmICFzaG93TWZhXCIgI2Zvcm1NYWluRGl2PlxyXG4gIDxmb3JtIGZvY3VzSW52YWxpZElucHV0IFtmb3JtR3JvdXBdPVwiZm9ybUdyb3VwQXJyYXlbYWN0aXZlSW5kZXhdXCIgW25nQ2xhc3NdPVwibXVsdGlNb2RlID8gJ3FlLWZvcm0tbXVsdGlwbGUnIDogJ3FlLWZvcm0nXCIgKG5nU3VibWl0KT1cIm9uU3VibWl0KClcIiAjcXVlc3Rpb25uYWlyZUZvcm09XCJuZ0Zvcm1cIj5cclxuICAgIDxpb24tZ3JpZD5cclxuICAgICAgPGlvbi1yb3cgKm5nSWY9XCJxdWVzdGlvbnNbMF0ucGFnZXNbYWN0aXZlSW5kZXhdLm5hbWVcIj5cclxuICAgICAgICA8aW9uLWNvbCBzaXplPVwiMTJcIiBbc2l6ZVhzXT1cInNpemVYc1wiIFtzaXplU21dPVwic2l6ZVNtXCIgW3NpemVNZF09XCJzaXplTWRcIiBbc2l6ZUxnXT1cInNpemVMZ1wiIFtzaXplWGxdPVwic2l6ZVhsXCJcclxuICAgICAgICAgIFtvZmZzZXRYc109XCJvZmZzZXRYc1wiIFtvZmZzZXRTbV09XCJvZmZzZXRTbVwiIFtvZmZzZXRNZF09XCJvZmZzZXRNZFwiIFtvZmZzZXRMZ109XCJvZmZzZXRMZ1wiIFtvZmZzZXRYbF09XCJvZmZzZXRYbFwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInAtZm9ybWdyaWRcIj5cclxuICAgICAgICAgICAgPGRpdiB0YWJpbmRleD1cIjBcIiBbaW5uZXJIdG1sXT1cIihxdWVzdGlvbk51bWJlciA/IHF1ZXN0aW9uTnVtYmVyICsgJyAnIDogJycpICsgcXVlc3Rpb25zWzBdLnBhZ2VzW2FjdGl2ZUluZGV4XS5uYW1lIHwgZHluYW1pY1RyYW5zbGF0ZTpkeW5hbWljUGFyYW0gfCB0cnVzdEh0bWxcIiBbbmdDbGFzc109XCJtdWx0aU1vZGUgPyAnZmItaGVhZGluZy1mb2xsb3d1cCcgOiAnZmItaGVhZGluZydcIiByb2xlPVwiaGVhZGluZ1wiIGFyaWEtbGV2ZWw9XCIxXCI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9pb24tY29sPlxyXG4gICAgICA8L2lvbi1yb3c+XHJcbiAgICAgIDxpb24tcm93PlxyXG4gICAgICAgIDxpb24tY29sIHN0eWxlPVwicGFkZGluZy1sZWZ0OiAwcHg7XCIgY2xhc3M9XCJpb24tcGFkZGluZy1lbmRcIiBzaXplPVwiMTJcIiBbc2l6ZVhzXT1cInNpemVYc1wiIFtzaXplU21dPVwic2l6ZVNtXCJcclxuICAgICAgICAgIFtzaXplTWRdPVwic2l6ZU1kXCIgW3NpemVMZ109XCJzaXplTGdcIiBbc2l6ZVhsXT1cInNpemVYbFwiIFtvZmZzZXRYc109XCJvZmZzZXRYc1wiIFtvZmZzZXRTbV09XCJvZmZzZXRTbVwiXHJcbiAgICAgICAgICBbb2Zmc2V0TWRdPVwib2Zmc2V0TWRcIiBbb2Zmc2V0TGddPVwib2Zmc2V0TGdcIiBbb2Zmc2V0WGxdPVwib2Zmc2V0WGxcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLWZvcm1ncmlkXCIgc3R5bGU9XCJwYWRkaW5nLWxlZnQ6IDhweDtcIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZWxlbWVudCBvZiBxdWVzdGlvbnNbMF0ucGFnZXNbYWN0aXZlSW5kZXhdLmVsZW1lbnRzOyBsZXQgaSA9IGluZGV4XCI+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImVsZW1lbnQudHlwZT09PSdwYW5lbCdcIj5cclxuXHJcbiAgICAgICAgICAgICAgICA8aW9uLXJvdyAqbmdJZj1cInZpc2libGVJZihlbGVtZW50LnZpc2libGVJZiwnJyxmb3JtR3JvdXBBcnJheVthY3RpdmVJbmRleF0sZWxlbWVudClcIj5cclxuICAgICAgICAgICAgICAgICAgPCEtLSA8aW9uLWNvbCBzdHlsZT1cInBhZGRpbmctbGVmdDogMHB4O1wiPiAtLT5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cInBhZGRpbmctbGVmdDogMHB4O1wiIGNsYXNzPVwiaGVhZGluZ1wiIHJvbGU9XCJoZWFkaW5nXCIgYXJpYS1sZXZlbD1cIjFcIj5cclxuICAgICAgICAgICAgICAgICAgICB7e2VsZW1lbnQudGl0bGV9fVxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPCEtLSA8L2lvbi1jb2w+IC0tPlxyXG4gICAgICAgICAgICAgICAgPC9pb24tcm93PlxyXG4gICAgICAgICAgICAgICAgPGlvbi1yb3c+XHJcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHBhbmVsRWxlbWVudCBvZiBlbGVtZW50LmVsZW1lbnRzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNoYXJlLXJvd1wiICpuZ0lmPVwicGFuZWxFbGVtZW50LmNvbEVsZW1lbnQ9PT0nQ09MMScgJiYgdmlzaWJsZUlmKHBhbmVsRWxlbWVudC52aXNpYmxlSWYscGFuZWxFbGVtZW50Lm5hbWUsZm9ybUdyb3VwQXJyYXlbYWN0aXZlSW5kZXhdLHBhbmVsRWxlbWVudClcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICA8YXBwLXF1ZXN0aW9uIFtwb3RlbnRpYWxJc3N1ZUlkXT1cInBvdGVudGlhbElzc3VlSWRcIiBbcXVlc3Rpb25dPVwicGFuZWxFbGVtZW50XCIgW2Zvcm1dPVwiZm9ybUdyb3VwQXJyYXlbYWN0aXZlSW5kZXhdXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2ZvclNjcmVlblF1ZXN0aW9ubmFpcmVdPVwiZm9yU2NyZWVuUXVlc3Rpb25uYWlyZVwiIChvbkR5bmFtaWNQYXJhbVVwZGF0ZSk9XCJ1cGRhdGVEeW5hbWljUGFyYW0oJGV2ZW50KVwiIFtkeW5hbWljUGFyYW1dPVwiZHluYW1pY1BhcmFtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2FwcC1xdWVzdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gPGlvbi1jb2wgc2l6ZT1cIjFcIiAqbmdJZj1cInBhbmVsRWxlbWVudC5kZXNjcmlwdGlvblwiIHN0eWxlPVwicGFkZGluZy10b3A6IDI4cHhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcHAtb3ZlcmxheS1pbmZvIFtvdmVybGF5VGV4dF09XCJwYW5lbEVsZW1lbnQuZGVzY3JpcHRpb25cIj48L2FwcC1vdmVybGF5LWluZm8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pb24tY29sPiAtLT5cclxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L2lvbi1yb3c+XHJcbiAgICAgICAgICAgICAgICA8IS0tIDwvaW9uLWNvbD5cclxuICAgICAgICAgICAgICAgICAgPC9pb24tcm93PiAtLT5cclxuXHJcbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJlbGVtZW50LnR5cGUhPSdwYW5lbCcgJiYgZWxlbWVudC50eXBlIT0naGlkZGVuJyAmJiB2aXNpYmxlSWYoZWxlbWVudC52aXNpYmxlSWYsZWxlbWVudC5uYW1lLGZvcm1Hcm91cEFycmF5W2FjdGl2ZUluZGV4XSxlbGVtZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgPGlvbi1yb3c+XHJcbiAgICAgICAgICAgICAgICAgIDxpb24tY29sIFtzaXplTGddPVwiZWxlbWVudC5zaXplTEc+MD9lbGVtZW50LnNpemVMRzonJ1wiIFtzaXplU21dPVwiZWxlbWVudC5zaXplU01cIlxyXG4gICAgICAgICAgICAgICAgICAgIFtzaXplWHNdPVwiZWxlbWVudC5zaXplWFNcIiBbc2l6ZVhsXT1cImVsZW1lbnQuc2l6ZVhMPjAgP2VsZW1lbnQuc2l6ZVhMOicnXCJcclxuICAgICAgICAgICAgICAgICAgICBbc2l6ZU1kXT1cImVsZW1lbnQuc2l6ZU1EPjAgP2VsZW1lbnQuc2l6ZU1EOicnXCIgc3R5bGU9XCJwYWRkaW5nLWxlZnQ6IDBweDtcIj5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJmaWVsZFwiPiAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8YXBwLXF1ZXN0aW9uIFtwb3RlbnRpYWxJc3N1ZUlkXT1cInBvdGVudGlhbElzc3VlSWRcIiBbcXVlc3Rpb25dPVwiZWxlbWVudFwiIFtmb3JtXT1cImZvcm1Hcm91cEFycmF5W2FjdGl2ZUluZGV4XVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbZm9yU2NyZWVuUXVlc3Rpb25uYWlyZV09XCJmb3JTY3JlZW5RdWVzdGlvbm5haXJlXCIgW2R5bmFtaWNQYXJhbV09XCJkeW5hbWljUGFyYW1cIiBcclxuICAgICAgICAgICAgICAgICAgICAgIChvbkR5bmFtaWNQYXJhbVVwZGF0ZSk9XCJ1cGRhdGVEeW5hbWljUGFyYW0oJGV2ZW50KVwiID5cclxuICAgICAgICAgICAgICAgICAgICA8L2FwcC1xdWVzdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tIDwvZGl2PiAtLT5cclxuICAgICAgICAgICAgICAgICAgPC9pb24tY29sPlxyXG4gICAgICAgICAgICAgICAgICA8IS0tIDxpb24tY29sIHNpemU9XCIxXCIgKm5nSWY9XCJlbGVtZW50LmRlc2NyaXB0aW9uXCIgc3R5bGU9XCJwYWRkaW5nLXRvcDogMzVweFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGFwcC1vdmVybGF5LWluZm8gW292ZXJsYXlUZXh0XT1cImVsZW1lbnQuZGVzY3JpcHRpb25cIj48L2FwcC1vdmVybGF5LWluZm8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9pb24tY29sPiAtLT5cclxuICAgICAgICAgICAgICAgIDwvaW9uLXJvdz5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2lvbi1jb2w+XHJcbiAgICAgICAgPGlvbi1jb2wgY2xhc3M9XCJpb24tcGFkZGluZy1zdGFydFwiIHNpemU9XCIxMlwiIHNpemVTbT1cIjEyXCIgc2l6ZVhzPVwiMTJcIiBbc2l6ZU1kXT1cInBhZ2VUeXBlPT09J1BPUFVQJz82OjEyXCJcclxuICAgICAgICAgIFtzaXplTGddPVwicGFnZVR5cGU9PT0nUE9QVVAnPzY6MTBcIiBbc2l6ZVhsXT1cInBhZ2VUeXBlPT09J1BPUFVQJz81OjEwXCIgc3R5bGU9XCJwYWRkaW5nLWxlZnQ6IDBweDtcIlxyXG4gICAgICAgICAgW29mZnNldFhsXT1cInBhZ2VUeXBlPT09J1BPUFVQJz8wOjFcIiBbb2Zmc2V0TGddPVwicGFnZVR5cGU9PT0nUE9QVVAnPzA6MVwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInAtZm9ybWdyaWRcIiBzdHlsZT1cInBhZGRpbmctbGVmdDogOHB4O1wiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBlbGVtZW50IG9mIHF1ZXN0aW9uc1swXS5wYWdlc1thY3RpdmVJbmRleF0uZWxlbWVudHM7IGxldCBpID0gaW5kZXhcIj5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIHZpc2libGVJZihlbGVtZW50LnZpc2libGVJZiwnJyxmb3JtR3JvdXBBcnJheVthY3RpdmVJbmRleF0sZWxlbWVudClcIj5cclxuICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHBhbmVsRWxlbWVudCBvZiBlbGVtZW50LmVsZW1lbnRzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInBhbmVsRWxlbWVudC5jb2xFbGVtZW50PT09J0NPTDInICYmXHJcbiAgICAgICAgICAgICAgICAgICAgdmlzaWJsZUlmKHBhbmVsRWxlbWVudC52aXNpYmxlSWYscGFuZWxFbGVtZW50Lm5hbWUsZm9ybUdyb3VwQXJyYXlbYWN0aXZlSW5kZXhdLHBhbmVsRWxlbWVudClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwYW5lbC1hcHAgW3F1ZXN0aW9uXT1cInBhbmVsRWxlbWVudFwiIFtmb3JtXT1cImZvcm1Hcm91cEFycmF5W2FjdGl2ZUluZGV4XVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2ZvclNjcmVlblF1ZXN0aW9ubmFpcmVdPVwiZm9yU2NyZWVuUXVlc3Rpb25uYWlyZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3BhbmVsLWFwcD5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2lvbi1jb2w+XHJcbiAgICAgIDwvaW9uLXJvdz5cclxuICAgIDwvaW9uLWdyaWQ+XHJcblxyXG4gICAgPGlvbi1mb290ZXIgKm5nSWY9XCIhaGlkZUZvb3RlclwiXHJcbiAgICBbbmdDbGFzc109XCInZm9vdGVyLWZpeGVkJ1wiPlxyXG4gICAgICA8ZGl2IHN0eWxlPVwidGV4dC1hbGlnbjogcmlnaHQ7IGJhY2tncm91bmQ6IHdoaXRlOyBtYXJnaW4tbGVmdDogLTVweDtcIlxyXG4gICAgICAgICpuZ0lmPVwiaGlkZVN0ZXAgJiYgcGFnZVR5cGUhPSdQT1BVUCcgJiYgcGFnZVR5cGUhPSdTQ1JFRU4nXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImdyaWQgcC1ub2d1dHRlclwiIHN0eWxlPVwiaGVpZ2h0OiA2MHB4O1wiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC02IGlvbi10ZXh0LWxlZnRcIiBzdHlsZT1cInBhZGRpbmc6IDhweDtcIj5cclxuICAgICAgICAgICAgPGlvbi1idXR0b24gc2hhcGU9XCJyb3VuZFwiIGZpbGw9XCJvdXRsaW5lXCIgY2xhc3M9XCJidXR0b25cIiAoY2xpY2spPVwiY2FuY2VsQWN0aW9uKClcIiB0eXBlPVwic3VibWl0XCI+XHJcbiAgICAgICAgICAgICAge3tcImNvbW1vbi5jYW5jZWxcIiB8IHRyYW5zbGF0ZX19XHJcbiAgICAgICAgICAgIDwvaW9uLWJ1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC02IGlvbi10ZXh0LXJpZ2h0XCIgc3R5bGU9XCJwYWRkaW5nOiA4cHg7XCI+XHJcbiAgICAgICAgICAgIDxpb24tYnV0dG9uIHNoYXBlPVwicm91bmRcIiAoY2xpY2spPVwiY29tcGxldGUoKVwiIGZpbGw9XCJzb2xpZFwiIHR5cGU9XCJzdWJtaXRcIj5cclxuICAgICAgICAgICAgICB7e1wiY29tbW9uLm5leHRcIiB8IHRyYW5zbGF0ZX19XHJcbiAgICAgICAgICAgIDwvaW9uLWJ1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBzdHlsZT1cInRleHQtYWxpZ246IHJpZ2h0OyBiYWNrZ3JvdW5kOiB3aGl0ZTsgbWFyZ2luLWxlZnQ6IC01cHg7XCJcclxuICAgICAgICAqbmdJZj1cImhpZGVTdGVwICYmIHBhZ2VUeXBlPT0nU0NSRUVOJyAmJiBxdWVzdGlvbnNbMF0uaXNGaXJzdFBhZ2VTdWJtaXRcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZCBwLW5vZ3V0dGVyXCIgc3R5bGU9XCJoZWlnaHQ6IDYwcHg7XCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTYgaW9uLXRleHQtbGVmdFwiIHN0eWxlPVwicGFkZGluZzogOHB4O1wiPlxyXG4gICAgICAgICAgICA8aW9uLWJ1dHRvbiBzaGFwZT1cInJvdW5kXCIgZmlsbD1cIm91dGxpbmVcIiBjbGFzcz1cImJ1dHRvblwiIChjbGljayk9XCJjYW5jZWxBY3Rpb24oKVwiIHR5cGU9XCJzdWJtaXRcIj5cclxuICAgICAgICAgICAgICB7e1wiY29tbW9uLmNhbmNlbFwiIHwgdHJhbnNsYXRlfX1cclxuICAgICAgICAgICAgPC9pb24tYnV0dG9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTYgaW9uLXRleHQtcmlnaHRcIiBzdHlsZT1cInBhZGRpbmc6IDhweDtcIj5cclxuICAgICAgICAgICAgPGlvbi1idXR0b24gc2hhcGU9XCJyb3VuZFwiIChjbGljayk9XCJjb21wbGV0ZSgpXCIgZmlsbD1cInNvbGlkXCIgdHlwZT1cInN1Ym1pdFwiPlxyXG4gICAgICAgICAgICAgIHt7XCJjb21tb24uZG9uZVwiIHwgdHJhbnNsYXRlfX1cclxuICAgICAgICAgICAgPC9pb24tYnV0dG9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8aW9uLWdyaWQgKm5nSWY9XCJoaWRlU3RlcCAmJiBwYWdlVHlwZT09PSdQT1BVUCdcIj5cclxuICAgICAgICA8aW9uLXJvdz5cclxuICAgICAgICAgIDxpb24tY29sIGNsYXNzPVwiaW9uLXRleHQtbGVmdCBpb24tcGFkZGluZy1zdGFydFwiPlxyXG4gICAgICAgICAgICA8aW9uLWJ1dHRvbiBzaGFwZT1cInJvdW5kXCIgZmlsbD1cIm91dGxpbmVcIiBjbGFzcz1cImJ1dHRvblwiIChjbGljayk9XCJjYW5jZWxQb3BVcCgpXCIgdHlwZT1cInN1Ym1pdFwiPlxyXG4gICAgICAgICAgICAgIHt7XCJjb21tb24uY2FuY2VsXCIgfCB0cmFuc2xhdGV9fVxyXG4gICAgICAgICAgICA8L2lvbi1idXR0b24+XHJcbiAgICAgICAgICA8L2lvbi1jb2w+XHJcbiAgICAgICAgICA8aW9uLWNvbCBjbGFzcz1cImlvbi10ZXh0LXJpZ2h0IGlvbi1wYWRkaW5nLWVuZFwiPlxyXG4gICAgICAgICAgICA8aW9uLWJ1dHRvbiBzaGFwZT1cInJvdW5kXCIgKGNsaWNrKT1cImNvbXBsZXRlKClcIiBmaWxsPVwic29saWRcIiB0eXBlPVwic3VibWl0XCI+XHJcbiAgICAgICAgICAgICAge3tcImNvbW1vbi5hZGRcIiB8IHRyYW5zbGF0ZX19XHJcbiAgICAgICAgICAgIDwvaW9uLWJ1dHRvbj5cclxuICAgICAgICAgIDwvaW9uLWNvbD5cclxuICAgICAgICA8L2lvbi1yb3c+XHJcbiAgICAgIDwvaW9uLWdyaWQ+XHJcblxyXG5cclxuXHJcblxyXG4gICAgICA8ZGl2ICpuZ0lmPVwiIWhpZGVTdGVwXCI+XHJcbiAgICAgICAgPG1hdC1ob3Jpem9udGFsLXN0ZXBwZXIgbGluZWFyICNtYXRIb3Jpem9udGFsU3RlcHBlciBbc2VsZWN0ZWRJbmRleF09XCJxdWVzdGlvbnNbMF0uc3RlcENvdW50ZXJcIlxyXG4gICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJzdGVwQ2hhbmdlZCgkZXZlbnQpO1wiIHN0eWxlPVwidGV4dC1hbGlnbjogLXdlYmtpdC1jZW50ZXI7XCIgYXJpYS1idXN5PVwidHJ1ZVwiPlxyXG4gICAgICAgICAgPG1hdC1zdGVwICpuZ0Zvcj1cImxldCBlbGVtZW50IG9mICBxdWVzdGlvbnNbMF0ucGFnZXM7ICBsZXQgaSA9IGluZGV4O1wiIFtzdGVwQ29udHJvbF09XCJmb3JtR3JvdXBBcnJheVtpXVwiXHJcbiAgICAgICAgICAgIFtjb21wbGV0ZWRdPVwiICBpIDwgYWN0aXZlSW5kZXggXCI+XHJcblxyXG4gICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBtYXRTdGVwTGFiZWw+e3txdWVzdGlvbnNbMF0ucGFnZXNbaV0ubmF2aWdhdGlvblRpdGxlfX08L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhcXVlc3Rpb25zWzBdLmlzRmlyc3RQYWdlU3VibWl0ICYmICFpc0xhc3QgJiYgaXNGaXJzdCAmJiAhaXNFbmFibGVCYWNrQnV0dG9uXCI+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiB0YWJpbmRleD1cIjBcIiBjbGFzcz1cInJldmVyc2VcIiAoa2V5VXAuZW50ZXIpPVwibmF2Q3RybC5uYXZpZ2F0ZVJvb3QoJ2NsYWltYW50LWluZHVjdGlvbicpXCIgKGNsaWNrKT1cIm5hdkN0cmwubmF2aWdhdGVSb290KCdjbGFpbWFudC1pbmR1Y3Rpb24nKVwiIG1hdC1idXR0b24gbWF0U3RlcHBlclByZXZpb3VzPnt7J2NvbW1vbi5iYWNrJ3wgdHJhbnNsYXRlfX08L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8YnV0dG9uIHRhYmluZGV4PVwiMFwiIGNsYXNzPVwiZm9yd2FyZFwiIG1hdC1idXR0b24gbWF0U3RlcHBlck5leHQgKGtleXVwLmVudGVyKT1cIm5leHRQYWdlKGFjdGl2ZUluZGV4KVwiIChjbGljayk9XCJuZXh0UGFnZShhY3RpdmVJbmRleClcIj57eydjb21tb24ubmV4dCd8IHRyYW5zbGF0ZX19PC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXN0aW9uc1swXS5pc0ZpcnN0UGFnZVN1Ym1pdFwiPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gdGFiaW5kZXg9XCIwXCIgY2xhc3M9XCJyZXZlcnNlXCIgKGtleVVwLmVudGVyKT1cImNhbmNlbEFjdGlvbigpXCIgKGNsaWNrKT1cImNhbmNlbEFjdGlvbigpXCIgbWF0LWJ1dHRvbiBtYXRTdGVwcGVyUHJldmlvdXM+e3snY29tbW9uLmJhY2snfCB0cmFuc2xhdGV9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gdGFiaW5kZXg9XCIwXCIgY2xhc3M9XCJmb3J3YXJkXCIgbWF0LWJ1dHRvbiBtYXRTdGVwcGVyTmV4dCAoa2V5dXAuZW50ZXIpPVwiY29tcGxldGUoKVwiIChjbGljayk9XCJjb21wbGV0ZSgpXCI+e3snY29tbW9uLm5leHQnfCB0cmFuc2xhdGV9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhcXVlc3Rpb25zWzBdLmlzRmlyc3RQYWdlU3VibWl0ICYmIGlzTGFzdCAmJiAhaXNGaXJzdFwiPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gdGFiaW5kZXg9XCIwXCIgY2xhc3M9XCJyZXZlcnNlXCIgbWF0LWJ1dHRvbiBtYXRTdGVwcGVyUHJldmlvdXMgKGtleXVwLmVudGVyKT1cInByZXZQYWdlKGFjdGl2ZUluZGV4KVwiIChjbGljayk9XCJwcmV2UGFnZShhY3RpdmVJbmRleClcIj57eydjb21tb24uYmFjayd8IHRyYW5zbGF0ZX19PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiB0YWJpbmRleD1cIjBcIiBjbGFzcz1cImZvcndhcmRcIiBtYXQtYnV0dG9uIG1hdFN0ZXBwZXJOZXh0IChrZXl1cC5lbnRlcik9XCJjb21wbGV0ZSgpXCIgKGNsaWNrKT1cImNvbXBsZXRlKClcIj57eydjb21tb24uZG9uZSd8IHRyYW5zbGF0ZX19PC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFxdWVzdGlvbnNbMF0uaXNGaXJzdFBhZ2VTdWJtaXQgJiYgIWlzTGFzdCAmJiAhaXNGaXJzdFwiPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gdGFiaW5kZXg9XCIwXCIgY2xhc3M9XCJyZXZlcnNlXCIgZWRpdGFibGU9XCJmYWxzZVwiIG1hdC1idXR0b24gbWF0U3RlcHBlclByZXZpb3VzIFxyXG4gICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJwcmV2UGFnZShhY3RpdmVJbmRleClcIiAoY2xpY2spPVwicHJldlBhZ2UoYWN0aXZlSW5kZXgpXCI+e3snY29tbW9uLmJhY2snfCB0cmFuc2xhdGV9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gdGFiaW5kZXg9XCIwXCIgY2xhc3M9XCJmb3J3YXJkXCIgbWF0LWJ1dHRvbiBtYXRTdGVwcGVyTmV4dCAoa2V5dXAuZW50ZXIpPVwibmV4dFBhZ2UoYWN0aXZlSW5kZXgpXCIgKGNsaWNrKT1cIm5leHRQYWdlKGFjdGl2ZUluZGV4KVwiPnt7J2NvbW1vbi5uZXh0J3wgdHJhbnNsYXRlfX08L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNFbmFibGVCYWNrQnV0dG9uICYmICFxdWVzdGlvbnNbMF0uaXNGaXJzdFBhZ2VTdWJtaXQgJiYgIWlzTGFzdCAmJiBpc0ZpcnN0XCI+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiB0YWJpbmRleD1cIjBcIiBjbGFzcz1cInJldmVyc2VcIiBlZGl0YWJsZT1cImZhbHNlXCIgbWF0LWJ1dHRvbiBtYXRTdGVwcGVyUHJldmlvdXMgXHJcbiAgICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cImNhbmNlbEFjdGlvbigpXCIgKGNsaWNrKT1cImNhbmNlbEFjdGlvbigpXCI+e3snY29tbW9uLmJhY2snfCB0cmFuc2xhdGV9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gdGFiaW5kZXg9XCIwXCIgY2xhc3M9XCJmb3J3YXJkXCIgbWF0LWJ1dHRvbiBtYXRTdGVwcGVyTmV4dCAoY2xpY2spPVwibmV4dFBhZ2UoYWN0aXZlSW5kZXgpXCIgKGtleXVwLmVudGVyKT1cIm5leHRQYWdlKGFjdGl2ZUluZGV4KVwiPnt7J2NvbW1vbi5uZXh0J3wgdHJhbnNsYXRlfX08L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG5cclxuICAgICAgICAgIDwvbWF0LXN0ZXA+XHJcblxyXG4gICAgICAgIDwvbWF0LWhvcml6b250YWwtc3RlcHBlcj5cclxuXHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgIDwvaW9uLWZvb3Rlcj5cclxuICA8L2Zvcm0+XHJcblxyXG5cclxuXHJcblxyXG4gIDwhLS0gPGRpdiAqbmdJZj1cInBheUxvYWRcIiBjbGFzcz1cImZvcm0tcm93XCI+XHJcbiAgICAgIDxzdHJvbmc+U2F2ZWQgdGhlIGZvbGxvd2luZyB2YWx1ZXM8L3N0cm9uZz48YnI+e3twYXlMb2FkfX1cclxuICAgIDwvZGl2PiAgLS0+XHJcblxyXG5cclxuPC9kaXY+XHJcblxyXG48YXBwLWxleGlzLW5leGlzICpuZ0lmPVwiaXNMZXhpc05leGlzUG9wdXBFbmFibGVkXCIgW2Rpc3BsYXldPVwiaXNMZXhpc05leGlzUG9wdXBFbmFibGVkXCIgW3BhZ2VdPVwiZmxvd0tleVwiIFt1c2VyRGV0YWlsc109XCJ1c2VyRGV0YWlsc1wiIChzdWNjZXNzKT1cIm9uTG5TdWNjZXNzKClcIiAoZXJyb3IpPVwib25MTkVycm9yKClcIiAodXNwcyk9XCJ0cmlnZ2VyVVNQUygpXCI+PC9hcHAtbGV4aXMtbmV4aXM+XHJcbjxhcHAtbWZhICNtZmEgW3VzZXJdPVwibHMuZ2V0VXNlcigpXCIgKm5nSWY9XCJzaG93TWZhXCIgKHN1Y2Nlc3MpPVwic2F2ZVNjcmVlblF1ZXN0aW9ubmFpcmUoJGV2ZW50KVwiIFtkYXRhXT1cIm1mYURhdGFcIiBbcmVxdWVzdENvZGVdPVwidHJ1ZVwiIFxyXG4gICAgICAgICBbbWZhRXJyb3JdPVwibWZhRXJyb3JcIiBbaGlkZUJ1dHRvbnNdPVwidHJ1ZVwiPjwvYXBwLW1mYT4iXX0=
2131
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1yZXVzYS1hcHAtbGliL3NyYy9saWIvY29tcG9uZW50cy9xdWVzdGlvbm5haXJlL2R5bmFtaWMtZm9ybS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtcmV1c2EtYXBwLWxpYi9zcmMvbGliL2NvbXBvbmVudHMvcXVlc3Rpb25uYWlyZS9keW5hbWljLWZvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBYyxZQUFZLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQWlCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6SixPQUFPLEVBQW9CLFVBQVUsRUFBb0MsTUFBTSxnQkFBZ0IsQ0FBQztBQUdoRyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFJaEQsT0FBTyxFQUF5QixzQkFBc0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBS3JGLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLHlEQUF5RCxDQUFDO0FBSXZHLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUloRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBTTVDLE9BQU8sRUFBcUIsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFNckUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDRCQUE0QixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7SUM1QmhELCtCQUFzRCxrQkFBQSxjQUFBO0lBSWhELDBCQUNNOzs7SUFDUixpQkFBTSxFQUFBLEVBQUE7OztJQUxXLGVB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LENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3JJLE1BQU0sU0FBUyxHQUFHLFNBQVMsQ0FBQyxXQUFXLEVBQUUsSUFBSSxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3hJLE1BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQyxXQUFXLEVBQUUsSUFBSSxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3JJLE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxXQUFXLEVBQUUsSUFBSSxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBRW5JLFdBQVc7UUFFWCxJQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUMsVUFBVSxJQUFFLFNBQVMsRUFBRTtZQUMzQyxJQUFJLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUMsVUFBVSxJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFBLENBQUMsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUEsRUFBRSxDQUFDO1lBQ2hPLElBQUksQ0FBRSxVQUFVLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxVQUFVLElBQUksU0FBUyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUEsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQSxFQUFFLENBQUM7WUFDalAsSUFBSSxDQUFFLE1BQU0sR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDLFVBQVUsSUFBSSxTQUFTLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQSxDQUFDLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFBLEVBQUUsQ0FBQztZQUN6TyxJQUFJLENBQUUsS0FBSyxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUMsVUFBVSxJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUEsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFBLEVBQUUsQ0FBQztTQUM3UDtRQUNELFdBQVc7UUFDWCxJQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUMsU0FBUyxJQUFFLFNBQVMsRUFBRTtZQUN6QyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxTQUFTLElBQUksU0FBUyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQSxFQUFFLENBQUM7WUFDelEsSUFBSSxDQUFFLE1BQU0sR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDLFNBQVMsSUFBSSxTQUFTLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQSxDQUFDLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFBLEVBQUUsQ0FBQztZQUNwTyxJQUFJLENBQUUsS0FBSyxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUMsU0FBUyxJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUEsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFBLEVBQUUsQ0FBQztTQUMxUDtRQUVFLElBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxXQUFXLElBQUUsU0FBUyxJQUFLLFNBQVMsQ0FBQyxRQUFRLENBQUMsZUFBZSxJQUFFLFNBQVMsRUFBRTtZQUM3RixJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLEtBQUssSUFBRSxHQUFHLEVBQUM7Z0JBQy9DLElBQUksQ0FBRSxVQUFVLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxXQUFXLElBQUksU0FBUyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUEsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQSxFQUFFLENBQUM7Z0JBQ2xQLElBQUksQ0FBRSxTQUFTLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxXQUFXLElBQUksU0FBUyxDQUFD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LENBQUMsUUFBUSxDQUFDLFdBQVcsSUFBSSxTQUFTLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQSxDQUFDLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFBLEVBQUUsQ0FBQztnQkFDbFIsTUFBTSxhQUFhLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxXQUFXLElBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUEsQ0FBQyxDQUFBLFNBQVMsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQSxFQUFFLENBQUM7Z0JBQy9RLE1BQU0sb0JBQW9CLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxXQUFXLElBQUksU0FBUyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxDQUFBLENBQUMsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENB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VyxFQUFFLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUMzSyxHQUFHLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQzthQUMxSjtTQUNGO1FBQ0QsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDM0ksTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDakosTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FB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Q0FBQyxXQUFXLEVBQUUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQzVKLEtBQUssR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQzNLLEdBQUcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2FBQzFKO1NBQ0Y7UUFDRCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUMzSSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFF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QUFjO2tCQUF0QixLQUFLO1lBRUcsTUFBTTtrQkFBZCxLQUFLO1lBQ0csTUFBTTtrQkFBZCxLQUFLO1lBQ0csTUFBTTtrQkFBZCxLQUFLO1lBQ0csTUFBTTtrQkFBZCxLQUFLO1lBQ0csTUFBTTtrQkFBZCxLQUFLO1lBRUcsUUFBUTtrQkFBaEIsS0FBSztZQUNHLFFBQVE7a0JBQWhCLEtBQUs7WUFDRyxRQUFRO2tCQUFoQixLQUFLO1lBQ0csUUFBUTtrQkFBaEIsS0FBSztZQUNHLFFBQVE7a0JBQWhCLEtBQUs7WUE4Q0YsT0FBTztrQkFEVixNQUFNOztrRkE1Rkksb0JBQW9CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25DaGFuZ2VzLCBPbkluaXQsIE91dHB1dCwgU2ltcGxlQ2hhbmdlcywgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFVudHlwZWRGb3JtR3JvdXAsIFZhbGlkYXRvcnMsIFZhbGlkYXRvckZuLCBGb3JtQ29udHJvbCwgTmdGb3JtIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBNZW51SXRlbSB9IGZyb20gJ3ByaW1lbmcvYXBpJztcclxuaW1wb3J0IHsgUXVlc3Rpb25CYXNlIH0gZnJvbSAnLi9xdWVzdGlvbi1iYXNlJztcclxuaW1wb3J0IHsgUXVlc3Rpb25Db250cm9sU2VydmljZSB9IGZyb20gJy4vcXVlc3Rpb24tY29udHJvbC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQXBwVmFsaWRhdG9ycyB9IGZyb20gJy4vQXBwVmFsaWRhdG9ycyc7XHJcblxyXG5pbXBvcnQgeyBRdWVzdGlvblNlcnZpY2UgfSBmcm9tICcuL3F1ZXN0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBOYXZDb250cm9sbGVyIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXInO1xyXG5pbXBvcnQgeyBTdGVwcGVyU2VsZWN0aW9uRXZlbnQsIFNURVBQRVJfR0xPQkFMX09QVElPTlMgfSBmcm9tICdAYW5ndWxhci9jZGsvc3RlcHBlcic7XHJcbmltcG9ydCB7IE1hdFN0ZXBwZXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zdGVwcGVyJztcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBWYWxpZGF0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3F1ZXN0aW9ubmFpcmUvdmFsaWRhdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUXVlc3Rpb25uYWlyZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9xdWVzdGlvbm5haXJlL3F1ZXN0aW9ubmFpcmUuc2VydmljZSc7XHJcbmltcG9ydCB7IENsYWltQXBwRW1wbG95ZXJEZXRhaWxzTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvcXVlc3Rpb25uYWlyZS9DbGFpbUFwcEVtcGxveWVyRGV0YWlsc01vZGVsJztcclxuaW1wb3J0IHsgUXVlc3Rpb25uYWlyZVNhdmVNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9xdWVzdGlvbm5haXJlL1F1ZXN0aW9ubmFpcmVTYXZlTW9kZWwnO1xyXG5pbXBvcnQgeyBVdGlsU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3V0aWwvdXRpbC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTG9nZ2VyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2xvZ2dlci9sb2dnZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IEJhc2VQYWdlIH0gZnJvbSAnLi4vLi4vcGFnZXMvQmFzZVBhZ2UnO1xyXG5pbXBvcnQgeyBRdWVzdGlvbm5haXJlUXVlcnlNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9xdWVzdGlvbm5haXJlL1F1ZXN0aW9ubmFpcmVRdWVyeU1vZGVsJztcclxuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xyXG5pbXBvcnQgeyBTdG9yYWdlIH0gZnJvbSAnQGlvbmljL3N0b3JhZ2UtYW5ndWxhcic7XHJcbmltcG9ydCB7IEZiQ29uc3RhbnRzIH0gZnJvbSAnLi9GYkNvbnN0YW50cyc7XHJcbmltcG9ydCB7IEVsZW1lbnRzTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvcXVlc3Rpb25uYWlyZS9FbGVtZW50c01vZGVsJztcclxuaW1wb3J0IHsgTG9naW5TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbG9naW4vbG9naW4uc2VydmljZSc7XHJcbmltcG9ydCB7IEVycm9yTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvRXJyb3JNb2RlbCc7XHJcbmltcG9ydCB7IE1mYUNvbXBvbmVudCB9IGZyb20gJy4uL21mYS9tZmEuY29tcG9uZW50JztcclxuaW1wb3J0IHsgTG9hZGVyTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvcXVlc3Rpb25uYWlyZS9Mb2FkZXJNb2RlbCc7XHJcbmltcG9ydCB7IEh0dHBFcnJvclJlc3BvbnNlLCBIdHRwUGFyYW1zIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBDYXB0Y2hhU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NhcHRjaGEvY2FwdGNoYS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgTGV4aXNOZXhpc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9sZXhpcy1uZXhpcy9sZXhpcy5uZXhpcy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTGV4aXNOZXhpc0FjY291bnRDcmVhdGlvbk1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL0xleGlzTmV4aXNBY2NvdW50Q3JlYXRpb25Nb2RlbCc7XHJcbmltcG9ydCB7IExleGlzTmV4aXNFbmFibGVkUmVzcG9uc2VNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9MZXhpc05leGlzRW5hYmxlZFJlc3BvbnNlTW9kZWwnO1xyXG5pbXBvcnQgeyBBcHBSZWdleCB9IGZyb20gJy4uLy4uL3ZhbGlkYXRpb25zL0FwcFJlZ2V4JztcclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtZHluYW1pYy1mb3JtJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZHluYW1pYy1mb3JtLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9keW5hbWljLWZvcm0uY29tcG9uZW50LnNjc3MnXSxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LkRlZmF1bHQsXHJcbiAgcHJvdmlkZXJzOiBbUXVlc3Rpb25Db250cm9sU2VydmljZSwge1xyXG4gICAgcHJvdmlkZTogU1RFUFBFUl9HTE9CQUxfT1BUSU9OUyxcclxuICAgIHVzZVZhbHVlOiB7XHJcbiAgICAgIHNob3dFcnJvcjogdHJ1ZSxcclxuICAgICAgZGlzcGxheURlZmF1bHRJbmRpY2F0b3JUeXBlOiBmYWxzZVxyXG4gICAgfVxyXG4gIH1dLFxyXG59KVxyXG5cclxuZXhwb3J0IGNsYXNzIER5bmFtaWNGb3JtQ29tcG9uZW50IGV4dGVuZHMgQmFzZVBhZ2UgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XHJcbiAgXHJcbiAgQFZpZXdDaGlsZCgnbWZhJykgbWZhOiBNZmFDb21wb25lbnQ7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ3F1ZXN0aW9ubmFpcmVGb3JtJywge3N0YXRpYyA6IGZhbHNlfSkgXHJcbiAgcHVibGljIHF1ZXN0aW9ubmFpcmVGb3JtOiBOZ0Zvcm07XHJcbiAgcHVibGljIHBvdGVudGlhbElzc3VlSWQ6IG51bWJlcjtcclxuICBwdWJsaWMgYmxvY2tVaSA9IGZhbHNlO1xyXG4gIHB1YmxpYyBzaG93TWZhID0gZmFsc2U7XHJcbiAgQElucHV0KCkgcXVlc3Rpb25zOiBRdWVzdGlvbkJhc2U8c3RyaW5nPltdID0gW107XHJcbiAgQElucHV0KCkgZm9yU2NyZWVuUXVlc3Rpb25uYWlyZTogUXVlc3Rpb25CYXNlPGJvb2xlYW4+O1xyXG4gIEBJbnB1dCgpIGlzRW5hYmxlQmFja0J1dHRvbjpCb29sZWFuO1xyXG4gIEBJbnB1dCgpIGJhY2tCdXR0b25QYWdlOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgbmV4dEJ1dHRvblBhZ2U6IHN0cmluZztcclxuICBASW5wdXQoKSBwYWdlVHlwZTogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGhpZGVGb290ZXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBtdWx0aU1vZGU6IGJvb2xlYW4gPSBmYWxzZTsgLy93aGVuIG11bHRpcGxlIGZvcm1zIGFyZSBkaXNwbGF5ZWQgb25lIGJlbG93IHRoZSBhbm90aGVyXHJcbiAgQElucHV0KCkgbG9hZGVyU2VydmljZTpzdHJpbmc7XHJcbiAgcHVibGljIGxvYWRlck1vZGVsIDogTG9hZGVyTW9kZWw7XHJcbiAgLyoqXHJcbiAgICogd2hlbiBhdXRvU2F2ZSBpcyBmYWxzZSwgY29tcG9uZW50IHdpbGwgb25seSBlbWl0IHRoZSB2YWx1ZSBvZiB0aGUgZm9ybSBidWlsZXIgZGF0YSB3aGljaCBuZWVkcyB0byBiZSBzYXZlZCBieSB0aGUgY2FsbGluZyBjb21wb25lbnRcclxuICAgKiBvbmx5IGFwcGxpY2FibGUgd2hlbiBwYWdlVHlwZSBpcyBub3QgUE9QVVAgYW5kIEpTT05cclxuICAqKi9cclxuICBASW5wdXQoKSBhdXRvU2F2ZTogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgbWZhUmVxdWlyZWQgOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQE91dHB1dCgpIG1vZGVsQ2FuY2VsID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xyXG4gIEBPdXRwdXQoKSBvbkNvbXBsZXRlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBvbkVycm9yID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBWaWV3Q2hpbGQoJ21hdEhvcml6b250YWxTdGVwcGVyJykgc3RlcHBlcjogTWF0U3RlcHBlcjtcclxuICBASW5wdXQoKSBkYXRhOiBhbnk7XHJcbiAgQElucHV0KCkgcmVhZE9ubHlGaWVsZHM6IHN0cmluZ1tdO1xyXG4gIEBJbnB1dCgpIGZvcm1SZWFkT25seTogQm9vbGVhbjtcclxuICBASW5wdXQoKSBxdWVyeU1vZGVsOiBRdWVzdGlvbm5haXJlUXVlcnlNb2RlbDtcclxuICBASW5wdXQoKSBkeW5hbWljUGFyYW0gOiBhbnk7XHJcbiAgQElucHV0KCkgZm9ybURhdGE6IGFueTtcclxuICBASW5wdXQoKSBxdWVzdGlvbk51bWJlcjogbnVtYmVyID0gbnVsbDtcclxuXHJcbiAgQElucHV0KCkgc2l6ZVhzIDogbnVtYmVyO1xyXG4gIEBJbnB1dCgpIHNpemVTbSA6IG51bWJlcjtcclxuICBASW5wdXQoKSBzaXplTWQgOiBudW1iZXI7XHJcbiAgQElucHV0KCkgc2l6ZUxnIDogbnVtYmVyO1xyXG4gIEBJbnB1dCgpIHNpemVYbCA6IG51bWJlcjtcclxuXHJcbiAgQElucHV0KCkgb2Zmc2V0WHMgOiBudW1iZXI7XHJcbiAgQElucHV0KCkgb2Zmc2V0U20gOiBudW1iZXI7XHJcbiAgQElucHV0KCkgb2Zmc2V0TWQgOiBudW1iZXI7XHJcbiAgQElucHV0KCkgb2Zmc2V0TGcgOiBudW1iZXI7XHJcbiAgQElucHV0KCkgb2Zmc2V0WGwgOiBudW1iZXI7XHJcblxyXG4gIC8vIGZvcm06IEZvcm1Hcm91cDtcclxuICBmb3JtR3JvdXBBcnJheTogVW50eXBlZEZvcm1Hcm91cFtdID0gW107XHJcbiAgcGF5TG9hZCA9ICcnO1xyXG4gIGl0ZW1zOiBNZW51SXRlbVtdID0gW107XHJcbiAgaXNGaXJzdDogYm9vbGVhbiA9IHRydWU7XHJcbiAgaXNMYXN0OiBib29sZWFuID0gZmFsc2U7XHJcbiAgc3VibWl0dGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgaGlkZVN0ZXA6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBpZGVudGlmaWVyOiBzdHJpbmcgPSBcIlwiO1xyXG4gIGFjdGl2ZUluZGV4OiBudW1iZXIgPSAwO1xyXG4gIGVycm9yT2NjdXJlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIG1mYURhdGEgOiBhbnk7XHJcbiAgbWZhRXJyb3IgOiBFcnJvck1vZGVsO1xyXG4gIHNzbkZvckNTUiA6IHN0cmluZztcclxuICBwYXltZW50RGV0YWlsQ2hhbmdlSGFzRXJyb3IgOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGlzTGV4aXNOZXhpc1BvcHVwRW5hYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGlucHV0RGF0YSA6IFF1ZXN0aW9ubmFpcmVTYXZlTW9kZWw7XHJcbiAgcmVzcG9uc2VVdWlkIDogc3RyaW5nID0gXCJcIjtcclxuICB1c2VyRGV0YWlscyA6IExleGlzTmV4aXNBY2NvdW50Q3JlYXRpb25Nb2RlbDtcclxuICBmb3JtUmF3RGF0YSA6IGFueTtcclxuICBmbG93S2V5IDogbnVtYmVyO1xyXG5cclxuICAgQmFua0RldGFpbHNJbnZhbGlkRXJyb3I6IHN0cmluZz1cIlwiO1xyXG4gICByb3V0aW5nTnVtYmVyZmxhZyA6IGJvb2xlYW4gPSB0cnVlO1xyXG4gICBhY2NvdW50TnVtYmVyZmxnOiBib29sZWFuID0gdHJ1ZTtcclxuICAgcmVFbnRlckFjY291bnROdW1iZXJmbGFnOiBib29sZWFuID0gdHJ1ZTtcclxuICAgIHJlc1ppcGNvZGVWYWxpZGF0aW9uZmxhZzogYm9vbGVhbiA9IHRydWU7XHJcbiAgICByZXNTdHJlZXRBZGRyZXNzOiBzdHJpbmcgPSBcIlwiO1xyXG4gICAgcmVzWmlwY29kZTogIHN0cmluZz1cIlwiO1xyXG4gICAgcmVzQ291bnRyeTogc3RyaW5nPVwiXCI7XHJcbiAgICBtYWlsWmlwY29kZTogc3RyaW5nPVwiXCI7XHJcbiAgICBtYWlsQ29udHJ5IDogc3RyaW5nPVwiXCI7XHJcbiAgICBjb3VudHkgOiBzdHJpbmc9XCJcIjtcclxuICAgIHN0YXRlIDogIHN0cmluZz1cIlwiO1xyXG5cclxuICAgICBkaWZmY291bnR5IDogc3RyaW5nPVwiXCI7XHJcbiAgICBkaWZmc3RhdGUgOiAgc3RyaW5nPVwiXCI7XHJcbiAgICBkaWZmTWFpbEFkcmVzc0ZsYWcgOmJvb2xlYW49ZmFsc2U7XHJcbiAgICByZXNTdHJlZXRBZGRyZXNzVmFsaWRhdGlvbmZsYWc6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuXHJcbiAgXHJcbiAgQE91dHB1dCgpXHJcbiAgZ2V0IGludmFsaWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5mb3JtR3JvdXBBcnJheS5tYXAoeCA9PiB4LmludmFsaWQpLnJlZHVjZSgoYSxiKSA9PiBhICYmIGIpO1xyXG4gIH1cclxuICBjb25zdHJ1Y3RvcihwdWJsaWMgcWVzOiBRdWVzdGlvblNlcnZpY2UsIHB1YmxpYyBxdWVzdGlvbm5haXJlU2VydmljZTogUXVlc3Rpb25uYWlyZVNlcnZpY2UsIHB1YmxpYyBuYXZDdHJsOiBOYXZDb250cm9sbGVyLFxyXG4gICAgcHJpdmF0ZSBxY3M6IFF1ZXN0aW9uQ29udHJvbFNlcnZpY2UsIHB1YmxpYyB1dGlsOiBVdGlsU2VydmljZSxwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcclxuICAgIHByaXZhdGUgbG9nZ2VyOiBMb2dnZXJTZXJ2aWNlLCBwdWJsaWMgdmFsaWRhdGlvblNlcnZpY2U6IFZhbGlkYXRpb25TZXJ2aWNlLCBwdWJsaWMgZWw6IEVsZW1lbnRSZWYsIHByaXZhdGUgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxyXG4gICAgcHVibGljIHN0b3JhZ2UgOiBTdG9yYWdlLCBwdWJsaWMgbHMgOiBMb2dpblNlcnZpY2UsIHB1YmxpYyBjYXB0Y2hhIDogQ2FwdGNoYVNlcnZpY2UsIHB1YmxpYyBsbjogTGV4aXNOZXhpc1NlcnZpY2UsIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIpIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgICB0aGlzLnN0b3JhZ2UuY3JlYXRlKCkudGhlbigoKSA9PiB7XHJcbiAgICAgIGNvbnNvbGUubG9nKFwiU3RvcmFnZSBEQiBjcmVhdGVkIHN1Y2Nlc3NmdWxseS5cIik7XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgLypUaGlzIHdpbGwgYmUgY2FsbGVkIHdoZW5ldmVyIEBJbnB1dCAnZm9ybURhdGEnIHZhbHVlIGlzIGNoYW5nZWQgZm9yIHRoaXMgY29udHJvbCovICAgXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgaWYoY2hhbmdlcy5mb3JtRGF0YT8uY3VycmVudFZhbHVlKXtcclxuICAgICAgaWYoY2hhbmdlcy5mb3JtRGF0YS5jdXJyZW50VmFsdWUpe1xyXG4gICAgICAgIHRoaXMuc2V0Rm9ybVZhbHVlcyhjaGFuZ2VzLmZvcm1EYXRhLmN1cnJlbnRWYWx1ZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmKGNoYW5nZXMucmVhZE9ubHlGaWVsZHM/LmN1cnJlbnRWYWx1ZSl7XHJcbiAgICAgIGZvciAobGV0IGNudHJsTmFtZSBvZiBjaGFuZ2VzLnJlYWRPbmx5RmllbGRzLmN1cnJlbnRWYWx1ZSkge1xyXG4gICAgICAgIGlmICh0aGlzLmZvcm1Hcm91cEFycmF5W3RoaXMuYWN0aXZlSW5kZXhdPy5nZXQoY250cmxOYW1lKSkge1xyXG4gICAgICAgICAgdGhpcy5mb3JtR3JvdXBBcnJheVt0aGlzLmFjdGl2ZUluZGV4XT8uZ2V0KGNudHJsTmFtZSkuZGlzYWJsZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmKGNoYW5nZXMucmVhZE9ubHlGaWVsZHM/LnByZXZpb3VzVmFsdWUgJiYgY2hhbmdlcy5yZWFkT25seUZpZWxkcy5jdXJyZW50VmFsdWUgPT0gbnVsbCl7XHJcbiAgICAgIGZvciAobGV0IGNudHJsTmFtZSBvZiBjaGFuZ2VzLnJlYWRPbmx5RmllbGRzLnByZXZpb3VzVmFsdWUpIHtcclxuICAgICAgICBpZiAodGhpcy5mb3JtR3JvdXBBcnJheVt0aGlzLmFjdGl2ZUluZGV4XT8uZ2V0KGNudHJsTmFtZSkpIHtcclxuICAgICAgICAgIHRoaXMuZm9ybUdyb3VwQXJyYXlbdGhpcy5hY3RpdmVJbmRleF0/LmdldChjbnRybE5hbWUpLmVuYWJsZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0Rm9ybVZhbHVlcyhkYXRhKXtcclxuICAgIE9iamVjdC5rZXlzKGRhdGEpXHJcbiAgICAgICAgICAgICAgLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgICAgICAgICAgIGxldCBxdWVzdGlvbiA9IHRoaXMuZ2V0Rm9ybUNvbnRyb2xDb25maWd1cmF0aW9uKGtleSk7XHJcbiAgICAgICAgICAgICAgICBsZXQgdmFsdWVUb1NldCA9IGRhdGFba2V5XTtcclxuICAgICAgICAgICAgICAgIGlmKHF1ZXN0aW9uKXtcclxuICAgICAgICAgICAgICAgICAgLyoqIEZvciBkcm9wZG93biBmb3JtIGNvbnRyb2wsIGV4cGVjdGluZyB0byBnZXQgZGF0YSBpbiBmb3JtIHt2YWx1ZSA6IFwic29tZVZhbHVlXCIsIHRleHQ6IG51bGx9LlxyXG4gICAgICAgICAgICAgICAgICAgKiBCYXNlZCBvbiB0aGUgdmFsdWUgYXR0cmlidXRlLCBvcHRpb24gd2lsbCBiZSBzZXQgb24gZm9ybSBjb250cm9sIGFmdGVyIHJlYWRpbmcgaXQgZnJvbSBjaG9pY2VzXHJcbiAgICAgICAgICAgICAgICAgICAqIGFycmF5LlxyXG4gICAgICAgICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgICAgICBpZih2YWx1ZVRvU2V0KXtcclxuICAgICAgICAgICAgICAgICAgbGV0IGNob2ljZSA9IHF1ZXN0aW9uLmNob2ljZXMuZmlsdGVyKG8gPT4gby52YWx1ZSA9PSAodmFsdWVUb1NldD8udmFsdWUgPyB2YWx1ZVRvU2V0LnZhbHVlIDogdmFsdWVUb1NldCkpWzBdO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLnNldFZhbHVlSW5Gb3JtQ29udHJvbChrZXksIGNob2ljZSk7XHJcbiAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2V0VmFsdWVJbkZvcm1Db250cm9sKGtleSwgdmFsdWVUb1NldCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZXRWYWx1ZUluRm9ybUNvbnRyb2wobmFtZSwgdmFsdWUpe1xyXG4gICAgaWYodGhpcy5mb3JtR3JvdXBBcnJheSAmJiB0aGlzLmZvcm1Hcm91cEFycmF5Lmxlbmd0aCA+IDApe1xyXG4gICAgICBsZXQgY29udHJvbCA9IHRoaXMuZm9ybUdyb3VwQXJyYXlbdGhpcy5hY3RpdmVJbmRleF0/LmNvbnRyb2xzW25hbWVdO1xyXG4gICAgICBpZihjb250cm9sKXtcclxuICAgICAgICBjb250cm9sLnBhdGNoVmFsdWUodmFsdWUpO1xyXG4gICAgICB9IGVsc2UgaWYobmFtZSA9PSAnZGVwZW5kZW50VGFibGUnKXtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdObyBmb3JtIGNvbnRyb2wgcHJlc2VudCBkZXBlbmRlbnRUYWJsZSAnLCBuYW1lKTtcclxuICAgICAgfWVsc2V7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignTm8gZm9ybSBjb250cm9sIHByZXNlbnQgd2l0aCBuYW1lICcsIG5hbWUpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLndhcm4oXCJObyBmb3JtIGdyb3VwIHByZXNlbnQgc28gc2tpcHBpbmcgdmFsdWUgYXNzaWdubWVudCBmcm9tIGRhdGEuXCIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyogVG8gZ2V0IHRoZSBkcm9wZG93biBlbGVtZW50IHNvIHRoYXQgdmFsdWUgZnJvbSB0aGUgY2hvaWNlcyBjYW4gYmUgcmVhZCBhbmQgc2V0IGludG8gdGhlIGZvcm0gY29udHJvbCovXHJcbiAgZ2V0Rm9ybUNvbnRyb2xDb25maWd1cmF0aW9uKG5hbWUpe1xyXG4gICAgbGV0IGZpbHRlcmVkVmFsdWVzID0gdGhpcy5xdWVzdGlvbnNbMF0ucGFnZXNbdGhpcy5hY3RpdmVJbmRleF0uZWxlbWVudHMuZmlsdGVyKHEgPT4gcS5uYW1lID09IG5hbWUgJiYgcS50eXBlID09ICdkcm9wZG93bicpO1xyXG4gICAgaWYoZmlsdGVyZWRWYWx1ZXMgJiYgZmlsdGVyZWRWYWx1ZXMubGVuZ3RoID4gMCl7XHJcbiAgICAgIHJldHVybiBmaWx0ZXJlZFZhbHVlc1swXTtcclxuICAgIH1lbHNlIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXR1cExvYWRlck1vZGVsKCkge1xyXG4gIFxyXG4gICAgaWYgKHRoaXMubG9hZGVyU2VydmljZSkge1xyXG4gICAgICBsZXQgc2VydmljZVVybHM6IHN0cmluZ1tdID0gdGhpcy5sb2FkZXJTZXJ2aWNlLnNwbGl0KCcsJyk7XHJcbiAgICAgIGxldCBzZXJ2aWNlVXJsID0gc2VydmljZVVybHNbdGhpcy5hY3RpdmVJbmRleF07XHJcbiAgICAgIGlmKHNlcnZpY2VVcmwudHJpbSgpICE9ICdudWxsJyl7XHJcbiAgICAgIHRoaXMuYmxvY2tGb3JtVWkoKTtcclxuICAgICAgbGV0IHNlcnZpY2VVcmxWYWx1ZSA9IHNlcnZpY2VVcmwudHJpbSgpO1xyXG4gICAgICBpZih0aGlzLmxzLmlzQ3NyKCkpe1xyXG4gICAgICAgIHNlcnZpY2VVcmxWYWx1ZSA9IHNlcnZpY2VVcmxWYWx1ZTsgICAgICAgXHJcbiAgICAgIH1cclxuICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMubHMuaXNDc3IoKSA/IHsgcGFyYW1zOiBuZXcgSHR0cFBhcmFtcygpLnNldCgnc3NuJywgdGhpcy5zc25Gb3JDU1IpIH0gOiB7fTtcclxuICAgICAgdGhpcy52YWxpZGF0aW9uU2VydmljZVxyXG4gICAgICAgIC5nZXQ8TG9hZGVyTW9kZWw+KGAke3NlcnZpY2VVcmxWYWx1ZX1gLCBvcHRpb25zKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoXHJcbiAgICAgICAgICByZXMgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRlck1vZGVsID0gcmVzO1xyXG4gICAgICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhcImxvYWRlciBtb2RlbCAgPSBcIiArIHRoaXMubG9hZGVyTW9kZWwpOyAgICAgICBcclxuICAgICAgICAgICAgdGhpcy51bmJsb2NrRm9ybVVpKCk7XHJcbiAgICAgICAgICAgIGlmKHRoaXMubG9hZGVyTW9kZWwgJiYgdGhpcy5sb2FkZXJNb2RlbC5kaXNhYmxlQ29udHJvbE5hbWVzKXtcclxuICAgICAgICAgICAgICB0aGlzLnJlYWRPbmx5RmllbGRzID0gdGhpcy5sb2FkZXJNb2RlbC5kaXNhYmxlQ29udHJvbE5hbWVzO1xyXG4gICAgICAgICAgICAgIGZvciAobGV0IGNudHJsTmFtZSBvZiB0aGlzLnJlYWRPbmx5RmllbGRzKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5mb3JtR3JvdXBBcnJheVt0aGlzLmFjdGl2ZUluZGV4XT8uZ2V0KGNudHJsTmFtZSkpIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXBBcnJheVt0aGlzLmFjdGl2ZUluZGV4XT8uZ2V0KGNudHJsTmFtZSkuZGlzYWJsZSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZih0aGlzLnFjcy5nZXREYXRhKHRoaXMuYWN0aXZlSW5kZXgpICE9IG51bGwpe1xyXG4gICAgICAgICAgICAgIHRoaXMuZm9ybURhdGEgPSBKU09OLnBhcnNlKHRoaXMucWNzLmdldERhdGEodGhpcy5hY3RpdmVJbmRleCkpO1xyXG4gICAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwQXJyYXlbdGhpcy5hY3RpdmVJbmRleF0ucGF0Y2hWYWx1ZSh0aGlzLmZvcm1EYXRhKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZih0aGlzLmxvYWRlck1vZGVsICYmIHRoaXMubG9hZGVyTW9kZWwuZGF0YSl7XHJcbiAgICAgICAgICAgICAgdGhpcy5mb3JtRGF0YSA9IHRoaXMubG9hZGVyTW9kZWwuZGF0YTtcclxuICAgICAgICAgICAgICB0aGlzLnNldEZvcm1WYWx1ZXModGhpcy5mb3JtRGF0YSk7XHJcbiAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBlcnIgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnV0aWwuaGlkZUxvYWRlcigpO1xyXG4gICAgICAgICAgICB0aGlzLnV0aWwuZXJyb3JIYW5kbGVyKGVycik7XHJcbiAgICAgICAgICAgIHRoaXMudW5ibG9ja0Zvcm1VaSgpO1xyXG4gICAgICAgICAgfSlcclxuICAgIH0gXHJcbiAgfSBlbHNlIHtcclxuICAgIGlmKHRoaXMucWNzLmdldERhdGEodGhpcy5hY3RpdmVJbmRleCkgIT0gbnVsbCl7XHJcbiAgICAgIHRoaXMuZm9ybURhdGEgPSBKU09OLnBhcnNlKHRoaXMucWNzLmdldERhdGEodGhpcy5hY3RpdmVJbmRleCkpO1xyXG4gICAgICB0aGlzLmZvcm1Hcm91cEFycmF5W3RoaXMuYWN0aXZlSW5kZXhdLnBhdGNoVmFsdWUodGhpcy5mb3JtRGF0YSk7XHJcbiAgICB9XHJcbiAgICBpZih0aGlzLmRhdGEpe1xyXG4gICAgICB0aGlzLmZvcm1EYXRhID0gdGhpcy5kYXRhO1xyXG4gICAgICB0aGlzLnNldEZvcm1WYWx1ZXModGhpcy5mb3JtRGF0YSk7XHJcbiAgICB9IGVsc2UgaWYodGhpcy5mb3JtRGF0YSl7XHJcbiAgICAgIHRoaXMuc2V0Rm9ybVZhbHVlcyh0aGlzLmZvcm1EYXRhKTtcclxuICAgIH0gIFxyXG4gIH0gXHJcbn1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnSW5pdCBtZXRob2QgY2FsbGVkIGZyb20gZHluYW1pYyBmb3JtJywgdGhpcy5xdWVzdGlvbnMpXHJcbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnIGJhY2tCdXR0b25QYWdlICcsIHRoaXMuYmFja0J1dHRvblBhZ2UsICcgbmV4dEJ1dHRvblBhZ2UnLCB0aGlzLm5leHRCdXR0b25QYWdlKTtcclxuICAgIGlmICghdGhpcy5xdWVzdGlvbnMpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMucXVlc3Rpb25zWzBdLnBhZ2VzLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICB0aGlzLmhpZGVTdGVwID0gdHJ1ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuaXNGaXJzdCA9IHRydWU7XHJcbiAgICB9XHJcbiAgICBsZXQgc3RyS2V5ID0gW107XHJcbiAgICBsZXQgcGFyYW1NYXAgPSBuZXcgTWFwKCk7XHJcbiAgICB0aGlzLmFjdGl2YXRlZFJvdXRlLnF1ZXJ5UGFyYW1NYXAuc3Vic2NyaWJlKHBhcmFtcyA9PiB7XHJcbiAgICAgIHN0cktleSA9IFtdID0gcGFyYW1zLmtleXM7XHJcbiAgICAgIHRoaXMuaWRlbnRpZmllciA9IHBhcmFtcy5nZXQoJ2lkZW50aWZpZXInKTtcclxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHJLZXkubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1Zygnc3RyaW5nS2V5ICcsIHN0cktleVtpXSwgcGFyYW1zLmdldChzdHJLZXlbaV0pKTtcclxuICAgICAgICBwYXJhbU1hcC5zZXQoc3RyS2V5W2ldLCBwYXJhbXMuZ2V0KHN0cktleVtpXSkpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmKHBhcmFtTWFwLmdldChcImtleVwiKSAhPSBudWxsKXtcclxuICAgICAgICB0aGlzLnNzbkZvckNTUiA9IGF0b2IocGFyYW1NYXAuZ2V0KFwia2V5XCIpKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgKTtcclxuICAgIFxyXG4gICAgbGV0IGNvdW50ZXIgPSB0aGlzLnF1ZXN0aW9uc1swXS5zdGVwQ291bnRlcjtcclxuICAgIHRoaXMuYWN0aXZlSW5kZXggPSBjb3VudGVyID8gY291bnRlciA6IDAgO1xyXG4gICAgLy90aGlzLnN0ZXBwZXJcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5xdWVzdGlvbnNbMF0ucGFnZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IGZvcm1Hcm91cDogVW50eXBlZEZvcm1Hcm91cDtcclxuICAgICAgdGhpcy5sb2dnZXIuZGVidWcoXCJCbG9jayBzdGF0ZW1lbnQgZXhlY3V0aW9uIG5vLlwiLCB0aGlzLnF1ZXN0aW9uc1swXS5wYWdlcy5sZW5ndGgpO1xyXG4gICAgICBmb3JtR3JvdXAgPSB0aGlzLnFjcy50b0Zvcm1Hcm91cCh0aGlzLnF1ZXN0aW9ucywgaSwgcGFyYW1NYXApO1xyXG4gICAgICB0aGlzLnNldFZhbGlkYXRpb24oaSwgZm9ybUdyb3VwKTtcclxuXHJcbiAgICAgIHRoaXMuc2V0VmFsdWVTdWJzY3JpcHRpb24oaSwgZm9ybUdyb3VwKTtcclxuICAgICAgdGhpcy5zZXRSZWFkT25seShpLCBmb3JtR3JvdXApO1xyXG4gICAgICB2YXIgcGFnZXM6IGFueSA9IHRoaXMucXVlc3Rpb25zWzBdLnBhZ2VzW2ldO1xyXG4gICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygncGFnZXMnLCBwYWdlcylcclxuICAgICAgbGV0IHZhbGlkYXRvckZ1bmN0aW9uTGlzdDogQXJyYXk8VmFsaWRhdG9yRm4+ID0gW107XHJcbiAgICAgIGlmIChwYWdlcy5lbGVtZW50cykge1xyXG4gICAgICAgIHBhZ2VzLmVsZW1lbnRzLmZvckVhY2goKGVsZW1lbnQgOiBFbGVtZW50c01vZGVsKSA9PiB7XHJcblxyXG4gICAgICAgICAgbGV0IGNvbnRybFR5cGU6IHN0cmluZyA9IGVsZW1lbnQudHlwZTtcclxuICAgICAgICAgIGlmIChjb250cmxUeXBlID09PSAncGFuZWwnKSB7XHJcbiAgICAgICAgICAgIC8vdGhpcy5sb2dnZXIuZGVidWcoJ0luc2lkZSBJZicsZWxlbWVudClcclxuICAgICAgICAgICAgZWxlbWVudC5lbGVtZW50cy5mb3JFYWNoKHBhbmVsRWxlbWVudCA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKHBhbmVsRWxlbWVudC5yZXF1aXJlZElmICYmICgocGFuZWxFbGVtZW50LnR5cGUgIT0gJ2J1dHRvbicgJiYgcGFuZWxFbGVtZW50LnR5cGUgIT0gJ3NpbXBsZUxhYmVsJyYmIHBhbmVsRWxlbWVudC50eXBlICE9ICdsYWJlbCcpIHx8IHBhbmVsRWxlbWVudC5jb21wb25lbnROYW1lID09ICdhcHAtbGluaycgfHwgcGFuZWxFbGVtZW50LmNvbXBvbmVudE5hbWUgPT0gJ2FwcC1zaWduLXNzbicpKSB7XHJcbiAgICAgICAgICAgICAgICB2YWxpZGF0b3JGdW5jdGlvbkxpc3QucHVzaChBcHBWYWxpZGF0b3JzLnNldFJlcXVpcmVkSWZWYWxpZGF0aW9uKHBhbmVsRWxlbWVudCwgdGhpcy5xY3MuZ2V0QWxsRGF0YSgpKSk7XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICBpZiAocGFuZWxFbGVtZW50LnZhbGlkYXRvcnMpIHtcclxuICAgICAgICAgICAgICAgIGxldCB2YWxpZGF0b3JMaXN0ID0gcGFuZWxFbGVtZW50LnZhbGlkYXRvcnM7XHJcbiAgICAgICAgICAgICAgICAvL3RoaXMubG9nZ2VyLmRlYnVnKFwicGFuZWwgdmFsaWRhdGlvbi4xMTFcIixwYW5lbEVsZW1lbnQpO1xyXG4gICAgICAgICAgICAgICAgdmFsaWRhdG9yTGlzdC5mb3JFYWNoKHZhbGlkYXRvciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0b3IudHlwZSA9PT0gJ2V4cHJlc3Npb24nICYmIHBhbmVsRWxlbWVudC5pbnB1dFR5cGUgJiYgcGFuZWxFbGVtZW50LmlucHV0VHlwZSA9PT0gJ2RhdGUnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ0luc2lkZSBleHByZXNzaW9uJylcclxuICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3JGdW5jdGlvbkxpc3QucHVzaChBcHBWYWxpZGF0b3JzLnNldERhdGVWYWxpZGF0aW9uKHBhbmVsRWxlbWVudCwgdGhpcy5xY3MuZ2V0QWxsRGF0YSgpKSk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRvci50eXBlID09PSAnZXhwcmVzc2lvbicgJiYgcGFuZWxFbGVtZW50LmlucHV0VHlwZSAmJiBwYW5lbEVsZW1lbnQuaW5wdXRUeXBlID09PSAndGV4dCdcclxuICAgICAgICAgICAgICAgICAgICAmJiBwYW5lbEVsZW1lbnQuY3VzdG9tVGFnICYmIChwYW5lbEVsZW1lbnQuY3VzdG9tVGFnID09PSAncGFzc3dvcmQnIHx8ICBwYW5lbEVsZW1lbnQuY3VzdG9tVGFnID09PSAnZW1haWwnIHx8ICBwYW5lbEVsZW1lbnQuY3VzdG9tVGFnID09PSAnc3NuJykpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnSW5zaWRlIGV4cHJlc3Npb24nKVxyXG4gICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvckZ1bmN0aW9uTGlzdC5wdXNoKEFwcFZhbGlkYXRvcnMuc2V0UGFzc3dvcmRWYWxpZGF0aW9uKHBhbmVsRWxlbWVudCwgdGhpcy5xY3MuZ2V0QWxsRGF0YSgpKSk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRvci50eXBlID09PSAnY3VzdG9tdmFsaWRhdGlvbicpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3JGdW5jdGlvbkxpc3QucHVzaChBcHBWYWxpZGF0b3JzLmN1c3RvbVZhbGlkYXRpb24ocGFuZWxFbGVtZW50LCB2YWxpZGF0b3IsIHRoaXMudXRpbC5nZXRTdGF0ZSgpKSk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIC8vdGhpcy5sb2dnZXIuZGVidWcoJ0luc2lkZSBlbHNlJyxlbGVtZW50KVxyXG4gICAgICAgICAgICBpZiAoZWxlbWVudC5yZXF1aXJlZElmICYmICgoZWxlbWVudC50eXBlICE9ICdidXR0b24nICYmIGVsZW1lbnQudHlwZSAhPSAnc2ltcGxlTGFiZWwnICYmIGVsZW1lbnQudHlwZSAhPSAnbGFiZWwnKSB8fCBlbGVtZW50LmNvbXBvbmVudE5hbWUgPT0gJ2FwcC1saW5rJyB8fCBlbGVtZW50LmNvbXBvbmVudE5hbWUgPT0gJ2FwcC1zaWduLXNzbicpKSB7XHJcbiAgICAgICAgICAgICAgdmFsaWRhdG9yRnVuY3Rpb25MaXN0LnB1c2goQXBwVmFsaWRhdG9ycy5zZXRSZXF1aXJlZElmVmFsaWRhdGlvbihlbGVtZW50LCB0aGlzLnFjcy5nZXRBbGxEYXRhKCkpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoZWxlbWVudC52YWxpZGF0b3JzKSB7XHJcbiAgICAgICAgICAgICAgbGV0IHZhbGlkYXRvckxpc3QgPSBlbGVtZW50LnZhbGlkYXRvcnM7XHJcbiAgICAgICAgICAgICAgdmFsaWRhdG9yTGlzdC5mb3JFYWNoKHZhbGlkYXRvciA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodmFsaWRhdG9yLnR5cGUgPT09ICdleHByZXNzaW9uJyAmJiBlbGVtZW50LmlucHV0VHlwZSAmJiBlbGVtZW50LmlucHV0VHlwZSA9PT0gJ2RhdGUnKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdJbnNpZGUgZXhwcmVzc2lvbicpXHJcbiAgICAgICAgICAgICAgICAgIHZhbGlkYXRvckZ1bmN0aW9uTGlzdC5wdXNoKEFwcFZhbGlkYXRvcnMuc2V0RGF0ZVZhbGlkYXRpb24oZWxlbWVudCwgdGhpcy5xY3MuZ2V0QWxsRGF0YSgpKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAodmFsaWRhdG9yLnR5cGUgPT09ICdjdXN0b212YWxpZGF0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgICB2YWxpZGF0b3JGdW5jdGlvbkxpc3QucHVzaChBcHBWYWxpZGF0b3JzLmN1c3RvbVZhbGlkYXRpb24oZWxlbWVudCwgdmFsaWRhdG9yLCB0aGlzLnV0aWwuZ2V0U3RhdGUoKSkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChlbGVtZW50LnNlcnZpY2VUeXBlICYmIGVsZW1lbnQuc2VydmljZVR5cGUgPT09ICdWQUxJREFURScpIHtcclxuICAgICAgICAgICAgICAvL3ZhbGlkYXRvckZ1bmN0aW9uTGlzdC5wdXNoKEFwcFZhbGlkYXRvcnMuY3JlYXRlVmFsaWRhdG9yKHRoaXMudmFsaWRhdGlvblNlcnZpY2UsZWxlbWVudCkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBmb3JtR3JvdXAuc2V0VmFsaWRhdG9ycyh2YWxpZGF0b3JGdW5jdGlvbkxpc3QpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZm9ybUdyb3VwQXJyYXkucHVzaChmb3JtR3JvdXApO1xyXG4gICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhcInBhZ2VzLnFlRGF0YVwiLCBwYWdlcy5xZURhdGEpO1xyXG4gICAgICBpZihwYWdlcy5xZURhdGEpe1xyXG4gICAgICAgIGZvcm1Hcm91cC5wYXRjaFZhbHVlKHBhZ2VzLnFlRGF0YSk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5sb2dnZXIuZGVidWcoXCJzZXQgdmFsdWVzIGFzIHBlciBsb2FkZXIgc2VydmljZSA9IFwiLCB0aGlzLmZvcm1EYXRhKTtcclxuICAgICAgaWYgKHRoaXMuZm9ybURhdGEgJiYgdGhpcy5mb3JtRGF0YSkge1xyXG4gICAgICAgIHRoaXMuc2V0Rm9ybVZhbHVlcyh0aGlzLmZvcm1EYXRhKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5mb3JtUmVhZE9ubHkpIHtcclxuICAgICAgICB0aGlzLmZvcm1Hcm91cEFycmF5W2ldLmRpc2FibGUoKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5yZWFkT25seUZpZWxkcyAmJiB0aGlzLnJlYWRPbmx5RmllbGRzKSB7XHJcbiAgICAgICAgZm9yIChsZXQgY250cmxOYW1lIG9mIHRoaXMucmVhZE9ubHlGaWVsZHMpIHtcclxuICAgICAgICAgIGlmICh0aGlzLmZvcm1Hcm91cEFycmF5W2ldLmdldChjbnRybE5hbWUpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwQXJyYXlbaV0uZ2V0KGNudHJsTmFtZSkuZGlzYWJsZSgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc2V0dXBMb2FkZXJNb2RlbCgpO1xyXG4gICAgXHJcbiAgICBpZiAodGhpcy5wYWdlVHlwZSA9PT0gJ1BPUFVQJykge1xyXG4gICAgICBsZXQgbW9kZWwgPSBuZXcgQ2xhaW1BcHBFbXBsb3llckRldGFpbHNNb2RlbCgpO1xyXG4gICAgICBtb2RlbCA9IHRoaXMuZGF0YTtcclxuICAgICAgdGhpcy5mb3JtR3JvdXBBcnJheVswXS5wYXRjaFZhbHVlKG1vZGVsKTtcclxuICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ3RoaXMuZm9ybUdyb3VwQXJyYXkgYWZ0ZXIgSUYnLCB0aGlzLmZvcm1Hcm91cEFycmF5KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5wYWdlVHlwZSA9PT0gJ0pzb24nICYmIHRoaXMuZm9ybURhdGEpIHtcclxuICAgICAgdGhpcy5mb3JtR3JvdXBBcnJheVswXS5wYXRjaFZhbHVlKHRoaXMuZm9ybURhdGEpO1xyXG4gICAgICBpZiAodGhpcy5mb3JtUmVhZE9ubHkpIHtcclxuICAgICAgICB0aGlzLmZvcm1Hcm91cEFycmF5WzBdLmRpc2FibGUoKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBmb3IgKGxldCBjbnRybE5hbWUgb2YgdGhpcy5yZWFkT25seUZpZWxkcykge1xyXG4gICAgICAgICAgaWYgKHRoaXMuZm9ybUdyb3VwQXJyYXlbMF0uZ2V0KGNudHJsTmFtZSkpIHtcclxuICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXBBcnJheVswXS5nZXQoY250cmxOYW1lKS5kaXNhYmxlKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGN1cnJlbnRRZSA9IHRoaXMucWVzLnNlYXJjaEJzLmdldFZhbHVlKCk7XHJcbiAgICB0aGlzLnBvdGVudGlhbElzc3VlSWQgPSBjdXJyZW50UWU/LnBvdGVudGlhbElzc3VlSWQ7XHJcbiAgfVxyXG5cclxuICBzZXRWYWx1ZVN1YnNjcmlwdGlvbihwYWdlSW5kZXg6IG51bWJlciwgZm9ybUdyb3VwOiBVbnR5cGVkRm9ybUdyb3VwKSB7XHJcbiAgICB2YXIgcGFnZXM6IGFueSA9IHRoaXMucXVlc3Rpb25zWzBdLnBhZ2VzW3BhZ2VJbmRleF07XHJcbiAgICBpZiAocGFnZXMuZWxlbWVudHMpIHtcclxuICAgICAgcGFnZXMuZWxlbWVudHMuZm9yRWFjaChlbGVtZW50ID0+IHtcclxuICAgICAgICBsZXQgY29udHJsVHlwZTogc3RyaW5nID0gZWxlbWVudC50eXBlO1xyXG4gICAgICAgIGlmIChlbGVtZW50LnN1YnNjcmliZVZhbHVlT2YpIHtcclxuICAgICAgICAgIGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50LnN1YnNjcmliZVZhbHVlT2ZdXHJcbiAgICAgICAgICAgICAgICAgICAgLnZhbHVlQ2hhbmdlc1xyXG4gICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUodmFsdWUgPT4gZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0uc2V0VmFsdWUodmFsdWUpKTtcclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICBpZiAoY29udHJsVHlwZSA9PT0gJ3BhbmVsJykge1xyXG4gICAgICAgICAgLy8gIHRoaXMubG9nZ2VyLmRlYnVnKCdJbnNpZGUgcGFuZWxDb250cmxUeXBlJywgIGVsZW1lbnQuZWxlbWVudHMpXHJcbiAgICAgICAgICBlbGVtZW50LmVsZW1lbnRzLmZvckVhY2gocGFuZWxFbGVtZW50ID0+IHtcclxuICAgICAgICAgICAgaWYgKHBhbmVsRWxlbWVudC5zdWJzY3JpYmVWYWx1ZU9mKSB7XHJcbiAgICAgICAgICAgICAgZm9ybUdyb3VwLmNvbnRyb2xzW3BhbmVsRWxlbWVudC5zdWJzY3JpYmVWYWx1ZU9mXS52YWx1ZUNoYW5nZXMuXHJcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmUoKGNoYW5nZSkgPT4gZm9ybUdyb3VwLmNvbnRyb2xzW3BhbmVsRWxlbWVudC5uYW1lXS5zZXRWYWx1ZShjaGFuZ2UpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRSZWFkT25seShwYWdlSW5kZXg6IG51bWJlciwgZm9ybUdyb3VwOiBVbnR5cGVkRm9ybUdyb3VwKSB7XHJcbiAgICB2YXIgcGFnZXM6IGFueSA9IHRoaXMucXVlc3Rpb25zWzBdLnBhZ2VzW3BhZ2VJbmRleF07XHJcbiAgICBpZiAocGFnZXMuZWxlbWVudHMpIHtcclxuICAgICAgcGFnZXMuZWxlbWVudHMuZm9yRWFjaChlbGVtZW50ID0+IHtcclxuICAgICAgICBsZXQgY29udHJsVHlwZTogc3RyaW5nID0gZWxlbWVudC50eXBlO1xyXG4gICAgICAgIGlmIChlbGVtZW50LnJlYWRvbmx5KSB7XHJcbiAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS5kaXNhYmxlKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoY29udHJsVHlwZSA9PT0gJ3BhbmVsJykge1xyXG4gICAgICAgICAgLy8gIHRoaXMubG9nZ2VyLmRlYnVnKCdJbnNpZGUgcGFuZWxDb250cmxUeXBlJywgIGVsZW1lbnQuZWxlbWVudHMpXHJcbiAgICAgICAgICBlbGVtZW50LmVsZW1lbnRzLmZvckVhY2gocGFuZWxFbGVtZW50ID0+IHtcclxuICAgICAgICAgICAgaWYgKGVsZW1lbnQucmVhZG9ubHkpIHtcclxuICAgICAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHNbcGFuZWxFbGVtZW50Lm5hbWVdLmRpc2FibGUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRWYWxpZGF0aW9uKHBhZ2VJbmRleDogbnVtYmVyLCBmb3JtR3JvdXA6IFVudHlwZWRGb3JtR3JvdXApIHtcclxuICAgIHZhciBwYWdlczogYW55ID0gdGhpcy5xdWVzdGlvbnNbMF0ucGFnZXNbcGFnZUluZGV4XTtcclxuICAgIC8vdGhpcy5xdWVzdGlvbnNbMF0ucGFnZXMuZm9yRWFjaChwYWdlcyA9PiB7XHJcbiAgICBpZiAocGFnZXMuZWxlbWVudHMpIHtcclxuICAgICAgcGFnZXMuZWxlbWVudHMuZm9yRWFjaChlbGVtZW50ID0+IHtcclxuICAgICAgICBsZXQgY29udHJsVHlwZTogc3RyaW5nID0gZWxlbWVudC50eXBlO1xyXG4gICAgICAgIC8vICB0aGlzLmxvZ2dlci5kZWJ1ZygnZWxlbWVudCA9PSAnLGVsZW1lbnQpO1xyXG4gICAgICAgIGlmIChjb250cmxUeXBlID09PSAndGV4dCcgfHwgY29udHJsVHlwZSA9PT0gJ251bWJlcicpIHtcclxuICAgICAgICAgIHRoaXMuc2V0VmFsaWRhdGlvbkZvclRleHRDb250cm9sKGVsZW1lbnQsIGZvcm1Hcm91cCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjb250cmxUeXBlID09PSAnY29tbWVudCcpIHtcclxuICAgICAgICAgIHRoaXMuc2V0VmFsaWRhdGlvbkZvckNvbW1lbnRDb250cm9sKGVsZW1lbnQsIGZvcm1Hcm91cCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjb250cmxUeXBlID09PSAnZHJvcGRvd24nKSB7XHJcbiAgICAgICAgICB0aGlzLnNldFZhbGlkYXRpb25Gb3JEcm9wRG93bkNvbnRyb2woZWxlbWVudCwgZm9ybUdyb3VwKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNvbnRybFR5cGUgPT09ICdyYWRpb2dyb3VwJyB8fCBjb250cmxUeXBlID09PSAnYXV0b2NvbXBsZXRlJykge1xyXG4gICAgICAgICAgdGhpcy5zZXRWYWxpZGF0aW9uRm9yUmFkaW9Db250cm9sKGVsZW1lbnQsIGZvcm1Hcm91cCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjb250cmxUeXBlID09PSAnY2hlY2tib3gnIHx8IGNvbnRybFR5cGUgPT09ICdzaW5nbGVzZWxlY3RjaGVja2JveCcgfHwgY29udHJsVHlwZSA9PT0gJ3NpbXBsZWNoZWNrYm94JyB8fCBjb250cmxUeXBlID09PSAnbXVsdGljaGVja2JveCcpIHtcclxuICAgICAgICAgIC8vIHRoaXMubG9nZ2VyLmRlYnVnKCdzaW5nbGVzZWxlY3RjaGVja2JveCBjYWxsZWQnLGVsZW1lbnQpO1xyXG4gICAgICAgICAgdGhpcy5zZXRWYWxpZGF0aW9uRm9yQ2hlY2tCb3hDb250cm9sKGVsZW1lbnQsIGZvcm1Hcm91cCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoY29udHJsVHlwZSA9PT0gJ3BhbmVsJykge1xyXG4gICAgICAgICAgLy8gIHRoaXMubG9nZ2VyLmRlYnVnKCdJbnNpZGUgcGFuZWxDb250cmxUeXBlJywgIGVsZW1lbnQuZWxlbWVudHMpXHJcbiAgICAgICAgICBlbGVtZW50LmVsZW1lbnRzLmZvckVhY2gocGFuZWxFbGVtZW50ID0+IHtcclxuICAgICAgICAgICAgbGV0IHBhbmVsQ29udHJsVHlwZTogc3RyaW5nID0gcGFuZWxFbGVtZW50LnR5cGU7XHJcblxyXG4gICAgICAgICAgICBpZiAocGFuZWxDb250cmxUeXBlID09PSAnZHJvcGRvd24nKSB7XHJcbiAgICAgICAgICAgICAgLy8gdGhpcy5sb2dnZXIuZGVidWcoJ0luc2lkZSBwYW5lbENvbnRybFR5cGUnLCBwYW5lbEVsZW1lbnQpXHJcbiAgICAgICAgICAgICAgdGhpcy5zZXRWYWxpZGF0aW9uRm9yRHJvcERvd25Db250cm9sKHBhbmVsRWxlbWVudCwgZm9ybUdyb3VwKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAocGFuZWxDb250cmxUeXBlID09PSAndGV4dCcgfHwgcGFuZWxDb250cmxUeXBlID09PSAnbnVtYmVyJykge1xyXG4gICAgICAgICAgICAgIC8vIHRoaXMubG9nZ2VyLmRlYnVnKCdwYW5lbENvbnRybFR5cGUnLCAgcGFuZWxDb250cmxUeXBlLCdwYW5lbEVsZW1lbnQnLHBhbmVsRWxlbWVudClcclxuICAgICAgICAgICAgICB0aGlzLnNldFZhbGlkYXRpb25Gb3JUZXh0Q29udHJvbChwYW5lbEVsZW1lbnQsIGZvcm1Hcm91cCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHBhbmVsQ29udHJsVHlwZSA9PT0gJ3JhZGlvZ3JvdXAnIHx8IHBhbmVsQ29udHJsVHlwZSA9PT0gJ2F1dG9jb21wbGV0ZScpIHtcclxuICAgICAgICAgICAgICB0aGlzLnNldFZhbGlkYXRpb25Gb3JSYWRpb0NvbnRyb2wocGFuZWxFbGVtZW50LCBmb3JtR3JvdXApO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAocGFuZWxDb250cmxUeXBlID09PSAnY2hlY2tib3gnIHx8IHBhbmVsQ29udHJsVHlwZSA9PT0gJ3NpbmdsZXNlbGVjdGNoZWNrYm94Jykge1xyXG4gICAgICAgICAgICAgIHRoaXMuc2V0VmFsaWRhdGlvbkZvckNoZWNrQm94Q29udHJvbChwYW5lbEVsZW1lbnQsIGZvcm1Hcm91cCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIClcclxuICAgIH1cclxuICAgIC8vfSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgc2V0VmFsaWRhdGlvbkZvckNoZWNrQm94Q29udHJvbChlbGVtZW50OiBhbnksIGZvcm1Hcm91cDogVW50eXBlZEZvcm1Hcm91cCkge1xyXG4gICAgaWYgKGZvcm1Hcm91cCAmJiBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXSkge1xyXG4gICAgICBsZXQgdmFsaWRhdG9yRnVuY3Rpb25MaXN0OiBBcnJheTxWYWxpZGF0b3JGbj4gPSBbXTtcclxuICAgICAgaWYgKGVsZW1lbnQuaXNSZXF1aXJlZCAmJiAhZWxlbWVudC5yZXF1aXJlZElmKSB7XHJcbiAgICAgICAgdmFsaWRhdG9yRnVuY3Rpb25MaXN0LnB1c2goVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcbiAgICAgIH1cclxuICAgICAgZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0uc2V0VmFsaWRhdG9ycyh2YWxpZGF0b3JGdW5jdGlvbkxpc3QpO1xyXG4gICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRWYWxpZGF0aW9uRm9yUmFkaW9Db250cm9sKGVsZW1lbnQ6IGFueSwgZm9ybUdyb3VwOiBVbnR5cGVkRm9ybUdyb3VwKSB7XHJcbiAgICBpZiAoZm9ybUdyb3VwICYmIGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdKSB7XHJcbiAgICAgIGxldCB2YWxpZGF0b3JGdW5jdGlvbkxpc3Q6IEFycmF5PFZhbGlkYXRvckZuPiA9IFtdO1xyXG5cclxuICAgICAgaWYgKGVsZW1lbnQuaXNSZXF1aXJlZCAmJiAhZWxlbWVudC5yZXF1aXJlZElmKSB7XHJcbiAgICAgICAgdmFsaWRhdG9yRnVuY3Rpb25MaXN0LnB1c2goVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcbiAgICAgIH1cclxuICAgICAgZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0uc2V0VmFsaWRhdG9ycyh2YWxpZGF0b3JGdW5jdGlvbkxpc3QpO1xyXG4gICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgc2V0VmFsaWRhdGlvbkZvckRyb3BEb3duQ29udHJvbChlbGVtZW50OiBhbnksIGZvcm1Hcm91cDogVW50eXBlZEZvcm1Hcm91cCkge1xyXG4gICAgaWYgKGZvcm1Hcm91cCAmJiBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXSkge1xyXG4gICAgICBsZXQgdmFsaWRhdG9yRnVuY3Rpb25MaXN0OiBBcnJheTxWYWxpZGF0b3JGbj4gPSBbXTtcclxuICAgICAgLy9WYWxpZGF0aW9uIG5lZWQgdG8gYmUgY2hlY2tcclxuICAgICAgaWYgKGVsZW1lbnQuaXNSZXF1aXJlZCAmJiAhZWxlbWVudC5yZXF1aXJlZElmKSB7XHJcbiAgICAgICAgLy90aGlzLmxvZ2dlci5kZWJ1Zygnc2V0VmFsaWRhdGlvbkZvckRyb3BEb3duQ29udHJvbCcsIGVsZW1lbnQubmFtZSlcclxuICAgICAgICB2YWxpZGF0b3JGdW5jdGlvbkxpc3QucHVzaChWYWxpZGF0b3JzLnJlcXVpcmVkKTtcclxuICAgICAgfVxyXG4gICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS5zZXRWYWxpZGF0b3JzKHZhbGlkYXRvckZ1bmN0aW9uTGlzdCk7XHJcbiAgICAgIGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuXHJcbiAgICB9XHJcbiAgICAvL3RoaXMubG9nZ2VyLmRlYnVnKGVsZW1lbnQubmFtZSwnZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0nLGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdKTtcclxuICB9XHJcblxyXG5cclxuICBzZXRWYWxpZGF0aW9uRm9yQ29tbWVudENvbnRyb2woZWxlbWVudDogYW55LCBmb3JtR3JvdXA6IFVudHlwZWRGb3JtR3JvdXApIHtcclxuICAgIGlmIChmb3JtR3JvdXAgJiYgZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0pIHtcclxuICAgICAgbGV0IHZhbGlkYXRvckZ1bmN0aW9uTGlzdDogQXJyYXk8VmFsaWRhdG9yRm4+ID0gW107XHJcbiAgICAgIGlmIChlbGVtZW50LmlzUmVxdWlyZWQgJiYgIWVsZW1lbnQucmVxdWlyZWRJZikge1xyXG4gICAgICAgIHZhbGlkYXRvckZ1bmN0aW9uTGlzdC5wdXNoKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG4gICAgICB9XHJcbiAgICAgIGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLnNldFZhbGlkYXRvcnModmFsaWRhdG9yRnVuY3Rpb25MaXN0KTtcclxuICAgICAgZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0VmFsaWRhdGlvbkZvclRleHRDb250cm9sKGVsZW1lbnQ6IGFueSwgZm9ybUdyb3VwOiBVbnR5cGVkRm9ybUdyb3VwKSB7XHJcbiAgICAvLyB0aGlzLmxvZ2dlci5kZWJ1Zygnc2V0VmFsaWRhdGlvbkZvclRleHRDb250cm9sJyxlbGVtZW50KTtcclxuICAgIGlmIChmb3JtR3JvdXAgJiYgZm9ybUdyb3VwLmNvbnRyb2xzW2VsZW1lbnQubmFtZV0pIHtcclxuICAgICAgbGV0IHZhbGlkYXRvckZ1bmN0aW9uTGlzdDogQXJyYXk8VmFsaWRhdG9yRm4+ID0gW107XHJcbiAgICAgIGlmIChlbGVtZW50LmlzUmVxdWlyZWQgJiYgIWVsZW1lbnQucmVxdWlyZWRJZikge1xyXG4gICAgICAgIC8vIHRoaXMubG9nZ2VyLmRlYnVnKCdzZXRWYWxpZGF0aW9uRm9yVGV4dENvbnRyb2wgaXNSZXF1aXJlZCAnLGVsZW1lbnQpO1xyXG4gICAgICAgIHZhbGlkYXRvckZ1bmN0aW9uTGlzdC5wdXNoKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChlbGVtZW50LnZhbGlkYXRvcnMpIHtcclxuICAgICAgICBsZXQgdmFsaWRhdG9yTGlzdCA9IGVsZW1lbnQudmFsaWRhdG9ycztcclxuICAgICAgICB2YWxpZGF0b3JMaXN0LmZvckVhY2godmFsaWRhdG9yID0+IHtcclxuICAgICAgICAgIGlmICh2YWxpZGF0b3IudHlwZSA9PT0gJ2V4cHJlc3Npb24nICYmIGVsZW1lbnQuaW5wdXRUeXBlICYmIGVsZW1lbnQuaW5wdXRUeXBlID09PSAnZGF0ZScpIHtcclxuICAgICAgICAgICAgLy90aGlzLmxvZ2dlci5kZWJ1ZygnSW5zaWRlIGV4cHJlc3Npb24nKVxyXG4gICAgICAgICAgICAvLyB2YWxpZGF0b3JGdW5jdGlvbkxpc3QucHVzaChBcHBWYWxpZGF0b3JzLnNldERhdGVWYWxpZGF0aW9uKHZhbGlkYXRvci5leHByZXNzaW9uLCB0aGlzLnFjcy5nZXRBbGxEYXRhKCksIHsgZGF0ZUNvbXBhcmlzaW9uOiB0cnVlIH0pKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmICh2YWxpZGF0b3IudHlwZSA9PT0gJ3JlZ2V4Jykge1xyXG4gICAgICAgICAgICB2YWxpZGF0b3JGdW5jdGlvbkxpc3QucHVzaChWYWxpZGF0b3JzLnBhdHRlcm4odmFsaWRhdG9yLnJlZ2V4KSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAodmFsaWRhdG9yLnR5cGUgPT09ICd0ZXh0JyAmJiB2YWxpZGF0b3IubWluTGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHZhbGlkYXRvckZ1bmN0aW9uTGlzdC5wdXNoKFZhbGlkYXRvcnMubWluTGVuZ3RoKHZhbGlkYXRvci5taW5MZW5ndGgpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmICh2YWxpZGF0b3IudHlwZSA9PT0gJ3RleHQnICYmIHZhbGlkYXRvci5tYXhMZW5ndGgpIHtcclxuICAgICAgICAgICAgdmFsaWRhdG9yRnVuY3Rpb25MaXN0LnB1c2goVmFsaWRhdG9ycy5tYXhMZW5ndGgodmFsaWRhdG9yLm1heExlbmd0aCkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKHZhbGlkYXRvci50eXBlID09PSAnbnVtZXJpYycpIHtcclxuICAgICAgICAgICAgdmFsaWRhdG9yRnVuY3Rpb25MaXN0LnB1c2goVmFsaWRhdG9ycy5tYXgodmFsaWRhdG9yLm1heFZhbHVlKSk7XHJcbiAgICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICB9KVxyXG5cclxuICAgICAgfVxyXG4gICAgICBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudC5uYW1lXS5zZXRWYWxpZGF0b3JzKHZhbGlkYXRvckZ1bmN0aW9uTGlzdCk7XHJcbiAgICAgIGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50Lm5hbWVdLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZXh0UGFnZShpbmRleDogbnVtYmVyKSB7XHJcbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhcIm5leHQgcGFnZSBjYWxsZWQgLS0tLSBcIilcclxuICAgIHRoaXMuZm9ybUdyb3VwQXJyYXlbdGhpcy5hY3RpdmVJbmRleF0ubWFya0FsbEFzVG91Y2hlZCgpO1xyXG4gICAgbGV0IGZvcm1Hcm91cCA9IHRoaXMuZm9ybUdyb3VwQXJyYXlbaW5kZXhdO1xyXG4gICAgbGV0IGFsaWVuRG9jRXhwaXJ5RXJyb3IgPSBmYWxzZTtcclxuICAgIGxldCBjb3VudHlFcnJvcj1mYWxzZTtcclxuICAgIGlmKGZvcm1Hcm91cC52YWx1ZS5hbGllbkRvY1R5cGUgIT0gbnVsbCAmJiBmb3JtR3JvdXAudmFsdWUuYWxpZW5Eb2NUeXBlLnZhbHVlICE9IFwiSS05NFwiIFxyXG4gICAgICAmJiBmb3JtR3JvdXAudmFsdWUuYWxpZW5Eb2NFeHBEYXRlID09IG51bGwpe1xyXG4gICAgICAgIGFsaWVuRG9jRXhwaXJ5RXJyb3IgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgICBpZihmb3JtR3JvdXAudmFsdWUucmVzQWRyZXNzIT11bmRlZmluZWQgICYmIGZvcm1Hcm91cC52YWx1ZS5yZXNBZHJlc3Muc3RhdGUudmFsdWUhPSBudWxsICYmIGZvcm1Hcm91cC52YWx1ZS5yZXNBZHJlc3Muc3RhdGUudmFsdWU9PT0nS1MnKXtcclxuICAgICAgIGlmKGZvcm1Hcm91cC52YWx1ZS5yZXNBZHJlc3MuY291bnR5LnZhbHVlPT09bnVsbCl7XHJcbiAgICAgICAgIGNvdW50eUVycm9yPXRydWU7XHJcbiAgICAgICB9XHJcbiAgICAgfSAgIFxyXG5cclxuICAgIGlmIChmb3JtR3JvdXAuaW52YWxpZCB8fCBhbGllbkRvY0V4cGlyeUVycm9yICkge1xyXG4gICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnSW5zaWRlIGlmJywgZm9ybUdyb3VwKTtcclxuICAgICAgaWYoYWxpZW5Eb2NFeHBpcnlFcnJvcil7XHJcbiAgICAgICAgZm9ybUdyb3VwLmdldCgnYWxpZW5Eb2NFeHBEYXRlJykubWFya0FzVG91Y2hlZCgpO1xyXG4gICAgICAgIGZvcm1Hcm91cC5nZXQoJ2FsaWVuRG9jRXhwRGF0ZScpLm1hcmtBc0RpcnR5KCk7XHJcbiAgICAgICAgZm9ybUdyb3VwLmdldCgnYWxpZW5Eb2NFeHBEYXRlJykuc2V0RXJyb3JzKHsgcmVxdWlyZWQ6IHRydWUgfSk7XHJcbiAgICAgIH0gICAgXHJcblxyXG4gICAgICBmb3JtR3JvdXAubWFya0FsbEFzVG91Y2hlZCgpO1xyXG4gICAgICBPYmplY3QudmFsdWVzKGZvcm1Hcm91cC5jb250cm9scykuZm9yRWFjaChjb250cm9sID0+IHtcclxuICAgICAgICBjb250cm9sLm1hcmtBc0RpcnR5KCk7XHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm47XHJcbiAgICAgIFxyXG4gICAgfVxyXG5cclxuXHJcbiAgICBcclxuICAgIC8vUEdMUC00MjMzO1xyXG4gICAgIGlmKGNvdW50eUVycm9yKXtcclxuICAgICAgICAgICBpZihsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcImxhbmd1YWdlXCIpID09PSBcImVzXCIpe1xyXG4gICAgICAgIGNvbnN0IGNvdW50eUVycm9yID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIFwiZXJyb3JJZFwiOiBcIlwiLFxyXG4gICAgICAgICAgICAgICAgICAgIFwidGltZXN0YW1wXCI6IFwiXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJtc2dcIjogW1xyXG4gICAgICAgICAgICAgICAgICAgIFwiW0VsIFNlIHJlcXVpZXJlIGVsIGNvbmRhZG8gXFx0XFx0LlxcdFxcdF1cIiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICAgICAgICBcImRldGFpbHNcIjogXCJ1cmk9L3F1ZXN0aW9ubmFpcmUtc2VydmljZS9xdWVzdGlvbm5haXJlL3NjcmVlbi1xdWVzdGlvbm5haXJlXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJlcnJvclwiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIFwiZXJyb3JDb2RlXCI6IFwiNDIyXCJcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uRXJyb3IuZW1pdChjb3VudHlFcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICBjb25zdCBjb3VudHlFcnJvciA9IHtcclxuICAgICAgICAgICAgICAgICAgICBcImVycm9ySWRcIjogXCJcIixcclxuICAgICAgICAgICAgICAgICAgICBcInRpbWVzdGFtcFwiOiBcIlwiLFxyXG4gICAgICAgICAgICAgICAgICAgIFwibXNnXCI6IFtcclxuICAgICAgICAgICAgICAgICAgICBcIltDb3VudHkgaXMgcmVxdWlyZWQgXFx0XFx0LlxcdFxcdF1cIlxyXG4gICAgICAgICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgICAgICAgXCJkZXRhaWxzXCI6IFwidXJpPS9xdWVzdGlvbm5haXJlLXNlcnZpY2UvcXVlc3Rpb25uYWlyZS9zY3JlZW4tcXVlc3Rpb25uYWlyZVwiLFxyXG4gICAgICAgICAgICAgICAgICAgIFwiZXJyb3JcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBcImVycm9yQ29kZVwiOiBcIjQyMlwiXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkVycm9yLmVtaXQoY291bnR5RXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICB9ICBcclxuXHJcbiAgICAgICAgICB9IFxyXG5cclxuXHJcbiAgICAgICAgICBpZihmb3JtR3JvdXAuY29udHJvbHMubWFpbEFkZHJlc3MhPXVuZGVmaW5lZCAgJiYgZm9ybUdyb3VwLmNvbnRyb2xzLmRpZmZtYWlsYWRkcmVzcyE9dW5kZWZpbmVkICl7XHJcbiAgICAgICAgICBpZiggZm9ybUdyb3VwLmNvbnRyb2xzLmRpZmZtYWlsYWRkcmVzcy52YWx1ZT09J1knKXtcclxuICAgICAgICAgICAgIHRoaXMuIGRpZmZjb3VudHkgPSBmb3JtR3JvdXAuY29udHJvbHMubWFpbEFkZHJlc3MgJiYgZm9ybUdyb3VwLmNvbnRyb2xzLm1haWxBZGRyZXNzLnZhbHVlLmNvdW50eSA/IChmb3JtR3JvdXAuY29udHJvbHMubWFpbEFkZHJlc3MudmFsdWUuY291bnR5KTogZm9ybUdyb3VwLmNvbnRyb2xzLm1haWxBZGRyZXNzLnZhbHVlLmNvdW50eSA/IChmb3JtR3JvdXAuY29udHJvbHMubWFpbEFkZHJlc3MudmFsdWUuY291bnR5KSA6XCJcIjtcclxuICAgICAgICAgICAgIHRoaXMuIGRpZmZzdGF0ZSA9IGZvcm1Hcm91cC5jb250cm9scy5tYWlsQWRkcmVzcyAmJiBmb3JtR3JvdXAuY29udHJvbHMubWFpbEFkZHJlc3MudmFsdWUuc3RhdGUudmFsdWUgPyAoZm9ybUdyb3VwLmNvbnRyb2xzLm1haWxBZGRyZXNzLnZhbHVlLnN0YXRlLnZhbHVlKTogZm9ybUdyb3VwLmNvbnRyb2xzLm1haWxBZGRyZXNzLnZhbHVlLnN0YXRlLnZhbHVlID8gKGZvcm1Hcm91cC5jb250cm9scy5tYWlsQWRkcmVzcy52YWx1ZS5zdGF0ZS52YWx1ZSkgOlwiXCI7XHJcbiAgICAgICAgfVxyXG4gIH1cclxuICBcclxuICAgLy8gUEdMUC00MjMzXHJcbiAgICAgaWYoZm9ybUdyb3VwLmNvbnRyb2xzLm1haWxBZGRyZXNzIT11bmRlZmluZWQgICYmIGZvcm1Hcm91cC5jb250cm9scy5kaWZmbWFpbGFkZHJlc3MhPXVuZGVmaW5lZCApe1xyXG4gICAgICAgICAgICAgIHRoaXMuZGlmZk1haWxBZHJlc3NGbGFnPWZhbHNlO1xyXG4gICAgICAgICAgaWYoZm9ybUdyb3VwLmNvbnRyb2xzLmRpZmZtYWlsYWRkcmVzcy52YWx1ZT09J1knICl7XHJcbiAgICAgICAgICAgIHRoaXMuZGlmZk1haWxBZHJlc3NGbGFnPXRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgIH1cclxuXHQgIFxyXG5cdCAgXHJcblx0ICAgICAgaWYodGhpcy5kaWZmTWFpbEFkcmVzc0ZsYWcpe1xyXG4gICAgICBpZih0aGlzLmRpZmZzdGF0ZSE9XCJcIiAmJnRoaXMuZGlmZnN0YXRlPT09XCJLU1wiKXtcclxuICAgICAgICAgaWYodGhpcy5kaWZmY291bnR5PT09XCJcIil7XHJcbiAgICAgICAgICAgICBpZihsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcImxhbmd1YWdlXCIpID09PSBcImVzXCIpe1xyXG4gICAgICAgIGNvbnN0IGRpZmZjb3VudHlFcnJvciA9IHtcclxuICAgICAgICAgICAgICAgICAgICBcImVycm9ySWRcIjogXCJcIixcclxuICAgICAgICAgICAgICAgICAgICBcInRpbWVzdGFtcFwiOiBcIlwiLFxyXG4gICAgICAgICAgICAgICAgICAgIFwibXNnXCI6IFtcclxuICAgICAgICAgICAgICAgICAgICBcIltTU2UgcmVxdWllcmUgbGEgZGlyZWNjacOzbiBwb3N0YWwgZGVsIGNvbmRhZG8uIFxcdFxcdC5cXHRcXHRdXCIgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgICAgICAgXCJkZXRhaWxzXCI6IFwidXJpPS9xdWVzdGlvbm5haXJlLXNlcnZpY2UvcXVlc3Rpb25uYWlyZS9zY3JlZW4tcXVlc3Rpb25uYWlyZVwiLFxyXG4gICAgICAgICAgICAgICAgICAgIFwiZXJyb3JcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBcImVycm9yQ29kZVwiOiBcIjQyMlwiXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkVycm9yLmVtaXQoZGlmZmNvdW50eUVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGRpZmZjb3VudHlFcnJvciA9IHtcclxuICAgICAgICAgICAgICAgICAgICBcImVycm9ySWRcIjogXCJcIixcclxuICAgICAgICAgICAgICAgICAgICBcInRpbWVzdGFtcFwiOiBcIlwiLFxyXG4gICAgICAgICAgICAgICAgICAgIFwibXNnXCI6IFtcclxuICAgICAgICAgICAgICAgICAgICBcIltNYWlsaW5nIEFkZHJlc3MgQ291bnR5IGlzIHJlcXVpcmVkIFxcdFxcdC5cXHRcXHRdXCJcclxuICAgICAgICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICBcImVycm9yXCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJlcnJvckNvZGVcIjogXCI0MjJcIlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25FcnJvci5lbWl0KGRpZmZjb3VudHlFcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgIH0gICAgICAgICAgICBcclxuICAgICAgICAgfSAgXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgICAgICBcclxuICAgICAgICAgICAgIFxyXG5cclxuICAgIHRoaXMucWNzLnNldERhdGEodGhpcy5hY3RpdmVJbmRleCwgSlNPTi5zdHJpbmdpZnkoZm9ybUdyb3VwLmdldFJhd1ZhbHVlKCkpKTtcclxuICAgIC8vTG9naWMgdG8gc2F2ZSBzdGFydFxyXG4gICAgbGV0IHN0ckludG9PYmo7XHJcbiAgICB0aGlzLnFjcy5nZXRBbGxEYXRhKCkuZm9yRWFjaChkYXRhID0+IHtcclxuICAgICAgc3RySW50b09iaiA9IChkYXRhKTtcclxuICAgICAgdGhpcy5wYXlMb2FkID0gKHRoaXMucGF5TG9hZCArIHN0ckludG9PYmopO1xyXG4gICAgfSk7XHJcblxyXG4gICAgbGV0IHNhdmVEYXRhID0ge30gYXMgUXVlc3Rpb25uYWlyZVNhdmVNb2RlbDtcclxuICAgIGxldCBjdXJyZW50UWUgPSB0aGlzLnFlcy5zZWFyY2hCcy5nZXRWYWx1ZSgpO1xyXG4gICAgbGV0IGVtcGxveWVlRGF0YSA9IHRoaXMucWVzLmVtcGxveWVlQnMuZ2V0VmFsdWUoKTtcclxuICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdlbXBsb3llZURhdGEgJywgZW1wbG95ZWVEYXRhKTtcclxuICAgIGlmICh0aGlzLmZvclNjcmVlblF1ZXN0aW9ubmFpcmUpIHtcclxuICAgICAgbGV0IGRhdGFBcnI6IHN0cmluZ1tdID0gW107XHJcbiAgICAgIHRoaXMucWNzLmdldEFsbERhdGEoKS5mb3JFYWNoKGRhdGEgPT4ge1xyXG4gICAgICAgIGRhdGFBcnIucHVzaChkYXRhKTtcclxuICAgICAgfSk7XHJcbiAgICAgIHNhdmVEYXRhLnNjcmVlblF1ZXN0aW9ubmFpcmVEYXRhID0gZGF0YUFycjtcclxuICAgICAgc2F2ZURhdGEudXNlclR5cGUgPSBjdXJyZW50UWUudXNlclR5cGU7XHJcbiAgICAgIHNhdmVEYXRhLmZsb3dGcm9tID0gY3VycmVudFFlLmZsb3dGcm9tO1xyXG4gICAgICBzYXZlRGF0YS5xdWVzdGlvbm5haXJlSWRzID0gY3VycmVudFFlLnF1ZXN0aW9ubmFpcmVJZHM7XHJcbiAgICAgIHNhdmVEYXRhLmVtcE1vZGVsID0gZW1wbG95ZWVEYXRhO1xyXG4gICAgICBzYXZlRGF0YS51dWlkID0gdGhpcy5pZGVudGlmaWVyOy8vY3VycmVudFFlLnV1aWQ7XHJcbiAgICAgIHNhdmVEYXRhLmZsb3dLZXkgPSBjdXJyZW50UWUuZmxvd0tleTtcclxuICAgICAgc2F2ZURhdGEuYWN0aXZlUGFnZUluZGV4ID0gdGhpcy5hY3RpdmVJbmRleDtcclxuICAgICAgc2F2ZURhdGEucXVlc3Rpb25uYWlyZUlkID0gY3VycmVudFFlLnF1ZXN0aW9ubmFpcmVJZDtcclxuICAgICAgdGhpcy5sb2dnZXIuZGVidWcoJ3NhdmUgRGF0YSAnLCBzYXZlRGF0YSlcclxuICAgICAgdGhpcy51dGlsLnNob3dMb2FkZXIoKTtcclxuICAgICAgc2Nyb2xsVG8oMCwwKTtcclxuICAgICAgdGhpcy5xdWVzdGlvbm5haXJlU2VydmljZVxyXG4gICAgICAgIC5zYXZlU2NyZWVuUXVlc3Rpb25uYWlyZShzYXZlRGF0YSlcclxuICAgICAgICAuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgYXN5bmMgcmVzID0+IHtcclxuICAgICAgICAgICAgdGhpcy51dGlsLmhpZGVMb2FkZXIoKTtcclxuICAgICAgICAgICAgaWYgKHJlcykge1xyXG4gICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKHJlcyk7XHJcbiAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoXCJyZXMgdXVpZCA9PT09IFwiICwgcmVzW0ZiQ29uc3RhbnRzLnV1aWRdKTtcclxuICAgICAgICAgICAgICB0aGlzLnF1ZXN0aW9ubmFpcmVTZXJ2aWNlLnV1aWQubmV4dChyZXNbRmJDb25zdGFudHMudXVpZF0pO1xyXG4gICAgICAgICAgICAgIGF3YWl0IHRoaXMuc3RvcmFnZS5zZXQoRmJDb25zdGFudHMudXVpZCwgcmVzW0ZiQ29uc3RhbnRzLnV1aWRdKTtcclxuICAgICAgICAgICAgICBpZihyZXNbJ3JlZGlyZWN0VG9FbmQnXSA9PT0gdHJ1ZSl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnF1ZXN0aW9ubmFpcmVTZXJ2aWNlLnN1Y2Nlc3NFbGVtZW50Lm5leHQocmVzW0ZiQ29uc3RhbnRzLnN1Y2Nlc3NQYWdlRWxlbWVudF0pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5xdWVzdGlvbm5haXJlU2VydmljZS53YWl0Rm9yUHJvY2Vzc2luZy5uZXh0KHJlc1tGYkNvbnN0YW50cy53YWl0Rm9yUHJvY2Vzc2luZ10pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5xdWVzdGlvbm5haXJlU2VydmljZS5wYWdlVG9PcGVuLm5leHQocmVzW0ZiQ29uc3RhbnRzLnBhZ2VUb09wZW5dKTtcclxuXHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnN0b3JhZ2Uuc2V0KEZiQ29uc3RhbnRzLnN1Y2Nlc3NQYWdlRWxlbWVudCwgcmVzW0ZiQ29uc3RhbnRzLnN1Y2Nlc3NQYWdlRWxlbWVudF0pO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5zdG9yYWdlLnNldChGYkNvbnN0YW50cy53YWl0Rm9yUHJvY2Vzc2luZywgcmVzW0ZiQ29uc3RhbnRzLndhaXRGb3JQcm9jZXNzaW5nXSk7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnN0b3JhZ2Uuc2V0KEZiQ29uc3RhbnRzLnBhZ2VUb09wZW4sIHJlc1tGYkNvbnN0YW50cy5wYWdlVG9PcGVuXSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5hdkN0cmwubmF2aWdhdGVSb290KGAvJHt0aGlzLm5leHRCdXR0b25QYWdlfT9pZGVudGlmaWVyPSR7cmVzWyd1dWlkJ119YCk7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlSW5kZXggPSBpbmRleCArIDE7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFByZXZBbmROZXh0QnV0dG9uKCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHRoaXMuaWRlbnRpZmllciA9IHJlc1sndXVpZCddOyAgIFxyXG4gICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgQmFzZVBhZ2UucHJpbWVOR0ZpeGVzKCk7ICAgICAgICAgXHJcbiAgICAgICAgICAgICAgfSwgMzAwMCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBlcnIgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnFjcy5zaGFyZWREYXRhLmRlbGV0ZSh0aGlzLmFjdGl2ZUluZGV4KTtcclxuICAgICAgICAgICAgdGhpcy5lcnJvck9jY3VyZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLnV0aWwuaGlkZUxvYWRlcigpO1xyXG4gICAgICAgICAgICB0aGlzLnV0aWwuZXJyb3JIYW5kbGVyKGVycik7XHJcblxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG5cclxuICB9XHJcblxyXG4gIHByZXZQYWdlKGluZGV4OiBudW1iZXIpIHtcclxuICAgIHRoaXMuYWN0aXZlSW5kZXggPSBpbmRleCAtIDE7XHJcbiAgICBzY3JvbGxUbygwLDApO1xyXG4gICAgdGhpcy5zZXRQcmV2QW5kTmV4dEJ1dHRvbigpO1xyXG4gIH1cclxuXHJcbiAgdmlzaWJsZUlmKHN0ckV4cDogc3RyaW5nLCBlbGVtZW50TmFtZTogc3RyaW5nLCBmb3JtR3JvdXA6IFVudHlwZWRGb3JtR3JvdXAsIGVsZW1lbnQ6IGFueSkge1xyXG5cclxuXHJcbiAgICBpZiAoIXN0ckV4cCkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIGxldCBpc1Zpc2libGUgOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBpZihzdHJFeHAuaW5jbHVkZXMoJyYmJykpe1xyXG4gICAgICBsZXQgZXhwciA6IHN0cmluZ1tdID0gc3RyRXhwLnNwbGl0KCcmJicpO1xyXG4gICAgICBpc1Zpc2libGUgPSBBcHBWYWxpZGF0b3JzLmNhbGN1bGF0ZU9wZXJhbmRWYWx1ZShleHByWzBdLnRyaW0oKSwgZm9ybUdyb3VwKSAmJiBBcHBWYWxpZGF0b3JzLmNhbGN1bGF0ZU9wZXJhbmRWYWx1ZShleHByWzFdLnRyaW0oKSwgZm9ybUdyb3VwKTtcclxuXHJcbiAgICAgIGlmKGV4cHIubGVuZ3RoID49IDMpe1xyXG4gICAgICAgIGlzVmlzaWJsZSA9IGlzVmlzaWJsZSAmJiBBcHBWYWxpZGF0b3JzLmNhbGN1bGF0ZU9wZXJhbmRWYWx1ZShleHByWzJdLnRyaW0oKSwgZm9ybUdyb3VwKVxyXG4gICAgICB9XHJcbiAgICAgIGlmKGV4cHIubGVuZ3RoID49IDQpe1xyXG4gICAgICAgIGlzVmlzaWJsZSA9IGlzVmlzaWJsZSAmJiBBcHBWYWxpZGF0b3JzLmNhbGN1bGF0ZU9wZXJhbmRWYWx1ZShleHByWzNdLnRyaW0oKSwgZm9ybUdyb3VwKVxyXG4gICAgICB9XHJcbiAgICAgIGlmKGV4cHIubGVuZ3RoID09IDUpe1xyXG4gICAgICAgIGlzVmlzaWJsZSA9IGlzVmlzaWJsZSAmJiBBcHBWYWxpZGF0b3JzLmNhbGN1bGF0ZU9wZXJhbmRWYWx1ZShleHByWzRdLnRyaW0oKSwgZm9ybUdyb3VwKVxyXG4gICAgICB9XHJcbiAgICAgIGlmKGV4cHIubGVuZ3RoID4gNSl7XHJcbiAgICAgICAgICB0aHJvdyBcIkFwcFZhbGlkYXRvcnMgOiBNb3JlIHRoYW4gNSAnJiYnIGV4cHJlc3Npb25zIGFyZSBub3Qgc3VwcG9ydGVkLlwiO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYoc3RyRXhwLmluY2x1ZGVzKCd8fCcpKXtcclxuICAgICAgbGV0IGV4cHIgOiBzdHJpbmdbXSA9IHN0ckV4cC5zcGxpdCgnfHwnKTtcclxuICAgICAgaXNWaXNpYmxlID0gQXBwVmFsaWRhdG9ycy5jYWxjdWxhdGVPcGVyYW5kVmFsdWUoZXhwclswXS50cmltKCksIGZvcm1Hcm91cCkgfHwgQXBwVmFsaWRhdG9ycy5jYWxjdWxhdGVPcGVyYW5kVmFsdWUoZXhwclsxXS50cmltKCksIGZvcm1Hcm91cClcclxuICAgICAgaWYoZXhwci5sZW5ndGggPj0gMyl7XHJcbiAgICAgICAgaXNWaXNpYmxlID0gaXNWaXNpYmxlIHx8IEFwcFZhbGlkYXRvcnMuY2FsY3VsYXRlT3BlcmFuZFZhbHVlKGV4cHJbMl0udHJpbSgpLCBmb3JtR3JvdXApXHJcbiAgICAgIH1cclxuICAgICAgaWYoZXhwci5sZW5ndGggPj0gNCl7XHJcbiAgICAgICAgaXNWaXNpYmxlID0gaXNWaXNpYmxlIHx8IEFwcFZhbGlkYXRvcnMuY2FsY3VsYXRlT3BlcmFuZFZhbHVlKGV4cHJbM10udHJpbSgpLCBmb3JtR3JvdXApXHJcbiAgICAgIH1cclxuICAgICAgaWYoZXhwci5sZW5ndGggPT0gNSl7XHJcbiAgICAgICAgaXNWaXNpYmxlID0gaXNWaXNpYmxlIHx8IEFwcFZhbGlkYXRvcnMuY2FsY3VsYXRlT3BlcmFuZFZhbHVlKGV4cHJbNF0udHJpbSgpLCBmb3JtR3JvdXApXHJcbiAgICAgIH1cclxuICAgICAgaWYoZXhwci5sZW5ndGggPiA1KXtcclxuICAgICAgICAgIHRocm93IFwiQXBwVmFsaWRhdG9ycyA6IE1vcmUgdGhhbiA1ICd8fCcgZXhwcmVzc2lvbnMgYXJlIG5vdCBzdXBwb3J0ZWQuXCI7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZighc3RyRXhwLmluY2x1ZGVzKCd8fCcpICYmICFzdHJFeHAuaW5jbHVkZXMoJyYmJykpe1xyXG4gICAgICBpc1Zpc2libGUgPSBBcHBWYWxpZGF0b3JzLmNhbGN1bGF0ZU9wZXJhbmRWYWx1ZShzdHJFeHAudHJpbSgpLCBmb3JtR3JvdXApO1xyXG4gICAgfVxyXG5cclxuICAgIGlmKGlzVmlzaWJsZSl7XHJcbiAgICAgIHJldHVybiBpc1Zpc2libGU7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIGlmIChlbGVtZW50TmFtZSAmJiBmb3JtR3JvdXAuY29udHJvbHNbZWxlbWVudE5hbWVdICYmICFlbGVtZW50LnN1YnNjcmliZVZhbHVlT2YpIHtcclxuICAgICAgaWYodGhpcy5mb3JtRGF0YSAmJiAhdGhpcy5mb3JtRGF0YVtlbGVtZW50TmFtZV0pe1xyXG4gICAgICAgIGZvcm1Hcm91cC5jb250cm9sc1tlbGVtZW50TmFtZV0uc2V0VmFsdWUobnVsbCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBnZXREaXJ0eUl0ZW1zKCl7XHJcbiAgICByZXR1cm4gdGhpcy5mb3JtR3JvdXBBcnJheS5tYXAoeT0+T2JqZWN0LmVudHJpZXMoeS5jb250cm9scykuZmlsdGVyKHZhbHVlID0+ICF2YWx1ZVsxXS5wcmlzdGluZSkubWFwKHggPT4geFswXSkpLnJlZHVjZSgoeCx5KT0+eC5jb25jYXQoeSkpO1xyXG4gIH1cclxuXHJcbiAgZ2V0RGlydHlJdGVtc1dpdGhWYWx1ZXMoKTogQXJyYXk8eyBjb250cm9sTmFtZTogc3RyaW5nLCBjb250cm9sVmFsdWU6IGFueSB9PiAge1xyXG4gICAgcmV0dXJuIHRoaXMuZm9ybUdyb3VwQXJyYXlcclxuICAgICAgLm1hcCh5ID0+XHJcbiAgICAgICAgT2JqZWN0LmVudHJpZXMoeS5jb250cm9scykgIC8vIEl0ZXJhdGUgb3ZlciBlYWNoIGZvcm0gY29udHJvbCBpbiB0aGUgZm9ybSBncm91cFxyXG4gICAgICAgICAgLmZpbHRlcih2YWx1ZSA9PiAhdmFsdWVbMV0ucHJpc3RpbmUpICAvLyBGaWx0ZXIgZm9yIGRpcnR5IGNvbnRyb2xzXHJcbiAgICAgICAgICAubWFwKHggPT4gKHsgY29udHJvbE5hbWU6IHhbMF0sIGNvbnRyb2xWYWx1ZTogeFsxXS52YWx1ZSB9KSkgIC8vIEdldCBuYW1lIGFuZCB2YWx1ZSBvZiBkaXJ0eSBjb250cm9sc1xyXG4gICAgICApXHJcbiAgICAgIC5yZWR1Y2UoKGFjY3VtLCBjdXJyKSA9PiBhY2N1bS5jb25jYXQoY3VyciksIFtdKTsgIC8vIEZsYXR0ZW4gdGhlIGFycmF5IG9mIGFycmF5c1xyXG4gIH1cclxuICBcclxuXHJcbiAgY29tcGxldGUoKSB7XHJcbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnY29tcGxldGUgbWV0aG9kIGNhbGxlZCA9PT09PT09Jyk7XHJcbiAgICB0aGlzLmZvcm1Hcm91cEFycmF5W3RoaXMuYWN0aXZlSW5kZXhdLm1hcmtBbGxBc1RvdWNoZWQoKTtcclxuICAgIGlmKHRoaXMubWZhUmVxdWlyZWQgJiYgdGhpcy5zaG93TWZhICYmIHRoaXMubWZhKXtcclxuICAgICAgdGhpcy5tZmEuc3VibWl0KCk7XHJcbiAgICB9XHJcbiAgICBzY3JvbGxUbygwLDApO1xyXG4gICAgbGV0IGZvcm1Hcm91cDogVW50eXBlZEZvcm1Hcm91cDtcclxuICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdTdWJtaXQgY2FsbGVkIGZyb20gY29tcGxldGUgbWV0aG9kIGluIGR5bmFtaWMgZm9ybScpXHJcblxyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmZvcm1Hcm91cEFycmF5Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGZvcm1Hcm91cCA9IHRoaXMuZm9ybUdyb3VwQXJyYXlbaV07XHJcbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdJbnNpZGUgaWYnLCBmb3JtR3JvdXApO1xyXG4gICAgICBpZiAoZm9ybUdyb3VwLmludmFsaWQpIHtcclxuICAgICAgICBmb3JtR3JvdXAubWFya0FsbEFzVG91Y2hlZCgpO1xyXG5cclxuICAgICAgICBPYmplY3Qua2V5cyhmb3JtR3JvdXAuY29udHJvbHMpLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgICAgIGNvbnN0IGNvbnRyb2wgPSBmb3JtR3JvdXAuZ2V0KGtleSk7XHJcbiAgICAgICAgICBpZiAoY29udHJvbCkge1xyXG4gICAgICAgICAgICBjb250cm9sLm1hcmtBc1RvdWNoZWQoKTtcclxuICAgICAgICAgICAgY29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGNvbnNvbGUubG9nKCdGb3JtIGlzIGludmFsaWQuIFBsZWFzZSBjb3JyZWN0IHRoZSBlcnJvcnMuJyk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBmb3JtR3JvdXAgPSB0aGlzLmZvcm1Hcm91cEFycmF5W3RoaXMuYWN0aXZlSW5kZXhdO1xyXG4gICAgdGhpcy5sb2dnZXIuZGVidWcoJ2Zvcm1Hcm91cCcsIGZvcm1Hcm91cCk7XHJcblxyXG4gICAgLy8gZm9yIHJlZ2lzdGVyIGNsYWltYW50IHBhZ2VcclxuICAgIGNvbnN0IHBhc3N3b3JkID0gZm9ybUdyb3VwLmdldFJhd1ZhbHVlKCkgJiYgZm9ybUdyb3VwLmdldFJhd1ZhbHVlKCkucGFzc3dvcmQgPyAoZm9ybUdyb3VwLmdldFJhd1ZhbHVlKCkucGFzc3dvcmQpLnRvTG93ZXJDYXNlKCkgOiBcIlwiO1xyXG4gICAgY29uc3QgZmlyc3ROYW1lID0gZm9ybUdyb3VwLmdldFJhd1ZhbHVlKCkgJiYgZm9ybUdyb3VwLmdldFJhd1ZhbHVlKCkuZmlyc3ROYW1lID8gKGZvcm1Hcm91cC5nZXRSYXdWYWx1ZSgpLmZpcnN0TmFtZSkudG9Mb3dlckNhc2UoKSA6IFwiXCI7XHJcbiAgICBjb25zdCBsYXN0TmFtZSA9IGZvcm1Hcm91cC5nZXRSYXdWYWx1ZSgpICYmIGZvcm1Hcm91cC5nZXRSYXdWYWx1ZSgpLmxhc3ROYW1lID8gKGZvcm1Hcm91cC5nZXRSYXdWYWx1ZSgpLmxhc3ROYW1lKS50b0xvd2VyQ2FzZSgpIDogXCJcIjtcclxuICAgIGNvbnN0IHVzZXJJZCA9IGZvcm1Hcm91cC5nZXRSYXdWYWx1ZSgpICYmIGZvcm1Hcm91cC5nZXRSYXdWYWx1ZSgpLnVzZXJuYW1lID8gKGZvcm1Hcm91cC5nZXRSYXdWYWx1ZSgpLnVzZXJuYW1lKS50b0xvd2VyQ2FzZSgpIDogXCJcIjsgICBcclxuXHJcbiAgICAvL1BHTFAtNDIxOFxyXG5cclxuICAgIGlmKGZvcm1Hcm91cC5jb250cm9scy5yZXNBZGRyZXNzIT11bmRlZmluZWQgKXtcclxuICAgICAgdGhpcy5yZXNaaXBjb2RlID0gZm9ybUdyb3VwLmNvbnRyb2xzLnJlc0FkZHJlc3MgJiYgZm9ybUdyb3VwLmNvbnRyb2xzLnJlc0FkZHJlc3MudmFsdWUuemlwID8gKGZvcm1Hcm91cC5jb250cm9scy5yZXNBZGRyZXNzLnZhbHVlLnppcCk6IGZvcm1Hcm91cC5jb250cm9scy5yZXNBZGRyZXNzLnZhbHVlLnppcCA/IChmb3JtR3JvdXAuY29udHJvbHMucmVzQWRkcmVzcy52YWx1ZS56aXApIDpcIlwiO1xyXG4gICAgICB0aGlzLiByZXNDb3VudHJ5ID0gZm9ybUdyb3VwLmNvbnRyb2xzLnJlc0FkZHJlc3MgJiYgZm9ybUdyb3VwLmNvbnRyb2xzLnJlc0FkZHJlc3MudmFsdWUuY291bnRyeSA/IChmb3JtR3JvdXAuY29udHJvbHMucmVzQWRkcmVzcy52YWx1ZS5jb3VudHJ5KTogZm9ybUdyb3VwLmNvbnRyb2xzLnJlc0FkZHJlc3MudmFsdWUuY291bnRyeSA/IChmb3JtR3JvdXAuY29udHJvbHMucmVzQWRkcmVzcy52YWx1ZS5jb3VudHJ5KSA6XCJcIjtcclxuICAgICAgdGhpcy4gY291bnR5ID0gZm9ybUdyb3VwLmNvbnRyb2xzLnJlc0FkZHJlc3MgJiYgZm9ybUdyb3VwLmNvbnRyb2xzLnJlc0FkZHJlc3MudmFsdWUuY291bnR5ID8gKGZvcm1Hcm91cC5jb250cm9scy5yZXNBZGRyZXNzLnZhbHVlLmNvdW50eSk6IGZvcm1Hcm91cC5jb250cm9scy5yZXNBZGRyZXNzLnZhbHVlLmNvdW50eSA/IChmb3JtR3JvdXAuY29udHJvbHMucmVzQWRkcmVzcy52YWx1ZS5jb3VudHkpIDpcIlwiO1xyXG4gICAgICB0aGlzLiBzdGF0ZSA9IGZvcm1Hcm91cC5jb250cm9scy5yZXNBZGRyZXNzICYmIGZvcm1Hcm91cC5jb250cm9scy5yZXNBZGRyZXNzLnZhbHVlLnN0YXRlLnZhbHVlID8gKGZvcm1Hcm91cC5jb250cm9scy5yZXNBZGRyZXNzLnZhbHVlLnN0YXRlLnZhbHVlKTogZm9ybUdyb3VwLmNvbnRyb2xzLnJlc0FkZHJlc3MudmFsdWUuc3RhdGUudmFsdWUgPyAoZm9ybUdyb3VwLmNvbnRyb2xzLnJlc0FkZHJlc3MudmFsdWUuc3RhdGUudmFsdWUpIDpcIlwiO1xyXG4gICAgfVxyXG4gICAgLy9QR0xQLTQyMzNcclxuICAgIGlmKGZvcm1Hcm91cC5jb250cm9scy5yZXNBZHJlc3MhPXVuZGVmaW5lZCApe1xyXG4gICAgICAgdGhpcy5yZXNTdHJlZXRBZGRyZXNzID0gZm9ybUdyb3VwLmNvbnRyb2xzLnJlc0FkcmVzcyAmJiBmb3JtR3JvdXAuY29udHJvbHMucmVzQWRyZXNzLnZhbHVlLnN0cmVldEFkZHJlc3MgPyAoZm9ybUdyb3VwLmNvbnRyb2xzLnJlc0FkcmVzcy52YWx1ZS5zdHJlZXRBZGRyZXNzKSA6IGZvcm1Hcm91cC5jb250cm9scy5yZXNBZHJlc3MudmFsdWUuc3RyZWV0QWRkcmVzcyA/IChmb3JtR3JvdXAuY29udHJvbHMucmVzQWRyZXNzLnZhbHVlLnN0cmVldEFkZHJlc3MpIDpcIlwiO1xyXG4gICAgICAgIHRoaXMuIGNvdW50eSA9IGZvcm1Hcm91cC5jb250cm9scy5yZXNBZHJlc3MgJiYgZm9ybUdyb3VwLmNvbnRyb2xzLnJlc0FkcmVzcy52YWx1ZS5jb3VudHkgPyAoZm9ybUdyb3VwLmNvbnRyb2xzLnJlc0FkcmVzcy52YWx1ZS5jb3VudHkpOiBmb3JtR3JvdXAuY29udHJvbHMucmVzQWRyZXNzLnZhbHVlLmNvdW50eSA/IChmb3JtR3JvdXAuY29udHJvbHMucmVzQWRyZXNzLnZhbHVlLmNvdW50eSkgOlwiXCI7XHJcbiAgICAgICAgdGhpcy4gc3RhdGUgPSBmb3JtR3JvdXAuY29udHJvbHMucmVzQWRyZXNzICYmIGZvcm1Hcm91cC5jb250cm9scy5yZXNBZHJlc3MudmFsdWUuc3RhdGUudmFsdWUgPyAoZm9ybUdyb3VwLmNvbnRyb2xzLnJlc0FkcmVzcy52YWx1ZS5zdGF0ZS52YWx1ZSk6IGZvcm1Hcm91cC5jb250cm9scy5yZXNBZHJlc3MudmFsdWUuc3RhdGUudmFsdWUgPyAoZm9ybUdyb3VwLmNvbnRyb2xzLnJlc0FkcmVzcy52YWx1ZS5zdGF0ZS52YWx1ZSkgOlwiXCI7XHJcbiAgICB9XHJcblxyXG4gICAgICAgaWYoZm9ybUdyb3VwLmNvbnRyb2xzLm1haWxBZGRyZXNzIT11bmRlZmluZWQgICYmIGZvcm1Hcm91cC5jb250cm9scy5kaWZmbWFpbGFkZHJlc3MhPXVuZGVmaW5lZCApe1xyXG4gICAgICAgICAgaWYoIGZvcm1Hcm91cC5jb250cm9scy5kaWZmbWFpbGFkZHJlc3MudmFsdWU9PSdZJyl7XHJcbiAgICAgICAgICAgICB0aGlzLiBkaWZmY291bnR5ID0gZm9ybUdyb3VwLmNvbnRyb2xzLm1haWxBZGRyZXNzICYmIGZvcm1Hcm91cC5jb250cm9scy5tYWlsQWRkcmVzcy52YWx1ZS5jb3VudHkgPyAoZm9ybUdyb3VwLmNvbnRyb2xzLm1haWxBZGRyZXNzLnZhbHVlLmNvdW50eSk6IGZvcm1Hcm91cC5jb250cm9scy5tYWlsQWRkcmVzcy52YWx1ZS5jb3VudHkgPyAoZm9ybUdyb3VwLmNvbnRyb2xzLm1haWxBZGRyZXNzLnZhbHVlLmNvdW50eSkgOlwiXCI7XHJcbiAgICAgICAgICAgICB0aGlzLiBkaWZmc3RhdGUgPSBmb3JtR3JvdXAuY29udHJvbHMubWFpbEFkZHJlc3MgJiYgZm9ybUdyb3VwLmNvbnRyb2xzLm1haWxBZGRyZXNzLnZhbHVlLnN0YXRlLnZhbHVlID8gKGZvcm1Hcm91cC5jb250cm9scy5tYWlsQWRkcmVzcy52YWx1ZS5zdGF0ZS52YWx1ZSk6IGZvcm1Hcm91cC5jb250cm9scy5tYWlsQWRkcmVzcy52YWx1ZS5zdGF0ZS52YWx1ZSA/IChmb3JtR3JvdXAuY29udHJvbHMubWFpbEFkZHJlc3MudmFsdWUuc3RhdGUudmFsdWUpIDpcIlwiO1xyXG4gICAgICAgIH1cclxuICB9XHJcblxyXG4gICAgaWYoZm9ybUdyb3VwLmNvbnRyb2xzLm1haWxBZGRyZXNzIT11bmRlZmluZWQgICYmIGZvcm1Hcm91cC5jb250cm9scy5kaWZmTWFpbGluZ0FkZHJlc3MhPXVuZGVmaW5lZCApe1xyXG4gICAgICAgICAgaWYoIGZvcm1Hcm91cC5jb250cm9scy5kaWZmTWFpbGluZ0FkZHJlc3MudmFsdWU9PSdZJyl7XHJcbiAgICAgICAgdGhpcy4gZGlmZmNvdW50eSA9IGZvcm1Hcm91cC5jb250cm9scy5tYWlsQWRkcmVzcyAmJiBmb3JtR3JvdXAuY29udHJvbHMubWFpbEFkZHJlc3MudmFsdWUuY291bnR5ID8gKGZvcm1Hcm91cC5jb250cm9scy5tYWlsQWRkcmVzcy52YWx1ZS5jb3VudHkpOiBmb3JtR3JvdXAuY29udHJvbHMubWFpbEFkZHJlc3MudmFsdWUuY291bnR5ID8gKGZvcm1Hcm91cC5jb250cm9scy5tYWlsQWRkcmVzcy52YWx1ZS5jb3VudHkpIDpcIlwiO1xyXG4gICAgICAgIHRoaXMuIGRpZmZzdGF0ZSA9IGZvcm1Hcm91cC5jb250cm9scy5tYWlsQWRkcmVzcyAmJiBmb3JtR3JvdXAuY29udHJvbHMubWFpbEFkZHJlc3MudmFsdWUuc3RhdGUudmFsdWUgPyAoZm9ybUdyb3VwLmNvbnRyb2xzLm1haWxBZGRyZXNzLnZhbHVlLnN0YXRlLnZhbHVlKTogZm9ybUdyb3VwLmNvbnRyb2xzLm1haWxBZGRyZXNzLnZhbHVlLnN0YXRlLnZhbHVlID8gKGZvcm1Hcm91cC5jb250cm9scy5tYWlsQWRkcmVzcy52YWx1ZS5zdGF0ZS52YWx1ZSkgOlwiXCI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAgIFxyXG4gICAgXHJcbiAgICBcclxuICAgICAvL1BHTFAtNDIxOFxyXG5cclxuICAgICAgaWYodGhpcy5yZXNaaXBjb2RlPT09IFwiXCIpXHJcbiAgICAgIHtcclxuICAgICAgICB0aGlzLnJlc1ppcGNvZGVWYWxpZGF0aW9uZmxhZz10cnVlO1xyXG4gICAgICB9ZWxzZSBpZiAodGhpcy5yZXNDb3VudHJ5PT09XCJcIiB8fCB0aGlzLnJlc0NvdW50cnkgPT09XCJDQVwiKXtcclxuICAgICAgICB0aGlzLnJlc1ppcGNvZGVWYWxpZGF0aW9uZmxhZz10cnVlO1xyXG4gICAgICB9ZWxzZXtcclxuICAgICAgICB0aGlzLnJlc1ppcGNvZGVWYWxpZGF0aW9uZmxhZz10cnVlO1xyXG4gICAgICAgIHRoaXMucmVzWmlwY29kZVZhbGlkYXRpb25mbGFnPSAgdGhpcy5pc1ZhbGlkWmlwQ29kZSh0aGlzLnJlc1ppcGNvZGUpO1xyXG4gICAgICB9IFxyXG5cclxuICAgICAgaWYoIXRoaXMucmVzWmlwY29kZVZhbGlkYXRpb25mbGFnKXtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcblxyXG4gICAgICAvL1BHTFAtMTk1XHJcbiAgICAgICBpZih0aGlzLnJlc1N0cmVldEFkZHJlc3MgPT09IFwiXCIpXHJcbiAgICAgIHtcclxuICAgICAgICB0aGlzLnJlc1N0cmVldEFkZHJlc3NWYWxpZGF0aW9uZmxhZz10cnVlO1xyXG4gICAgICB9ZWxzZXtcclxuICAgICAgICB0aGlzLnJlc1N0cmVldEFkZHJlc3NWYWxpZGF0aW9uZmxhZyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5yZXNTdHJlZXRBZGRyZXNzVmFsaWRhdGlvbmZsYWcgPSB0aGlzLmlzVmFsaWRTdHJlZXRBZGRyZXNzKHRoaXMucmVzU3RyZWV0QWRkcmVzcyk7XHJcbiAgICAgIH0gXHJcblxyXG4gICAgICBpZighdGhpcy5yZXNTdHJlZXRBZGRyZXNzVmFsaWRhdGlvbmZsYWcpe1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAvLyBQR0xQLTQyMzNcclxuICAgICBpZihmb3JtR3JvdXAuY29udHJvbHMucmVzQWRyZXNzIT11bmRlZmluZWQgIHx8IGZvcm1Hcm91cC5jb250cm9scy5yZXNBZGRyZXNzIT11bmRlZmluZWQgKXtcclxuICAgICAgaWYodGhpcy5zdGF0ZSE9XCJcIiAmJnRoaXMuc3RhdGU9PT1cIktTXCIpe1xyXG4gICAgICAgICBpZih0aGlzLmNvdW50eT09PVwiXCIpe1xyXG4gICAgICAgICAgICAgaWYobG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJsYW5ndWFnZVwiKSA9PT0gXCJlc1wiKXtcclxuICAgICAgICBjb25zdCBjb3VudHlFcnJvcjEgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgXCJlcnJvcklkXCI6IFwiXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJ0aW1lc3RhbXBcIjogXCJcIixcclxuICAgICAgICAgICAgICAgICAgICBcIm1zZ1wiOiBbXHJcbiAgICAgICAgICAgICAgICAgICAgXCJbRWwgU2UgcmVxdWllcmUgZWwgY29uZGFkbyBcXHRcXHQuXFx0XFx0XVwiICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgICAgICAgIFwiZGV0YWlsc1wiOiBcInVyaT0vcXVlc3Rpb25uYWlyZS1zZXJ2aWNlL3F1ZXN0aW9ubmFpcmUvc2NyZWVuLXF1ZXN0aW9ubmFpcmVcIixcclxuICAgICAgICAgICAgICAgICAgICBcImVycm9yXCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJlcnJvckNvZGVcIjogXCI0MjJcIlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25FcnJvci5lbWl0KGNvdW50eUVycm9yMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICBjb25zdCBjb3VudHlFcnJvcjEgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgXCJlcnJvcklkXCI6IFwiXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJ0aW1lc3RhbXBcIjogXCJcIixcclxuICAgICAgICAgICAgICAgICAgICBcIm1zZ1wiOiBbXHJcbiAgICAgICAgICAgICAgICAgICAgXCJbQ291bnR5IGlzIHJlcXVpcmVkIFxcdFxcdC5cXHRcXHRdXCJcclxuICAgICAgICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICBcImVycm9yXCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJlcnJvckNvZGVcIjogXCI0MjJcIlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25FcnJvci5lbWl0KGNvdW50eUVycm9yMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgIH0gICAgICAgICAgICBcclxuICAgICAgICAgfSAgXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG4gICAgXHJcblxyXG4gICAgIC8vIFBHTFAtNDIzM1xyXG4gICAgIGlmKGZvcm1Hcm91cC5jb250cm9scy5tYWlsQWRkcmVzcyE9dW5kZWZpbmVkICAmJiBmb3JtR3JvdXAuY29udHJvbHMuZGlmZm1haWxhZGRyZXNzIT11bmRlZmluZWQgKXtcclxuICAgICAgICAgICAgICB0aGlzLmRpZmZNYWlsQWRyZXNzRmxhZz1mYWxzZTtcclxuICAgICAgICAgIGlmKGZvcm1Hcm91cC5jb250cm9scy5kaWZmbWFpbGFkZHJlc3MudmFsdWU9PSdZJyApe1xyXG4gICAgICAgICAgICB0aGlzLmRpZmZNYWlsQWRyZXNzRmxhZz10cnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmKGZvcm1Hcm91cC5jb250cm9scy5tYWlsQWRkcmVzcyE9dW5kZWZpbmVkICAmJiBmb3JtR3JvdXAuY29udHJvbHMuZGlmZk1haWxpbmdBZGRyZXNzIT11bmRlZmluZWQgKXtcclxuICAgICAgICAgdGhpcy5kaWZmTWFpbEFkcmVzc0ZsYWc9ZmFsc2U7XHJcbiAgICAgICAgICBpZihmb3JtR3JvdXAuY29udHJvbHMuZGlmZk1haWxpbmdBZGRyZXNzLnZhbHVlPT0nWScgKXtcclxuICAgICAgICAgICAgdGhpcy5kaWZmTWFpbEFkcmVzc0ZsYWc9dHJ1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZih0aGlzLmRpZmZNYWlsQWRyZXNzRmxhZyl7XHJcbiAgICAgIGlmKHRoaXMuZGlmZnN0YXRlIT1cIlwiICYmdGhpcy5kaWZmc3RhdGU9PT1cIktTXCIpe1xyXG4gICAgICAgICBpZih0aGlzLmRpZmZjb3VudHk9PT1cIlwiKXtcclxuICAgICAgICAgICAgIGlmKGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwibGFuZ3VhZ2VcIikgPT09IFwiZXNcIil7XHJcbiAgICAgICAgY29uc3QgZGlmZmNvdW50eUVycm9yID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIFwiZXJyb3JJZFwiOiBcIlwiLFxyXG4gICAgICAgICAgICAgICAgICAgIFwidGltZXN0YW1wXCI6IFwiXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJtc2dcIjogW1xyXG4gICAgICAgICAgICAgICAgICAgIFwiW1NTZSByZXF1aWVyZSBsYSBkaXJlY2Npw7NuIHBvc3RhbCBkZWwgY29uZGFkby4gXFx0XFx0LlxcdFxcdF1cIiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICAgICAgICBcImRldGFpbHNcIjogXCJ1cmk9L3F1ZXN0aW9ubmFpcmUtc2VydmljZS9xdWVzdGlvbm5haXJlL3NjcmVlbi1xdWVzdGlvbm5haXJlXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJlcnJvclwiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIFwiZXJyb3JDb2RlXCI6IFwiNDIyXCJcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uRXJyb3IuZW1pdChkaWZmY291bnR5RXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgY29uc3QgZGlmZmNvdW50eUVycm9yID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIFwiZXJyb3JJZFwiOiBcIlwiLFxyXG4gICAgICAgICAgICAgICAgICAgIFwidGltZXN0YW1wXCI6IFwiXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJtc2dcIjogW1xyXG4gICAgICAgICAgICAgICAgICAgIFwiW01haWxpbmcgQWRkcmVzcyBDb3VudHkgaXMgcmVxdWlyZWQgXFx0XFx0LlxcdFxcdF1cIlxyXG4gICAgICAgICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIFwiZXJyb3JcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBcImVycm9yQ29kZVwiOiBcIjQyMlwiXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkVycm9yLmVtaXQoZGlmZmNvdW50eUVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgfSAgICAgICAgICAgIFxyXG4gICAgICAgICB9ICBcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHJcbiAgIFxyXG4gICAgaWYocGFzc3dvcmQgPT09IFwiXCIgJiYgZmlyc3ROYW1lID09PSBcIlwiICYmIGxhc3ROYW1lID09PSBcIlwiICYmIHVzZXJJZCA9PT0gXCJcIil7IFxyXG4gICAgICAgICAgIC8vIFBHTFAtMTc1MCAgaW4gY29ycmVjdCBSb3V0aW5nIE5VbWJlclxyXG4gICAgICAgaWYoZm9ybUdyb3VwLmNvbnRyb2xzLnBheW1ldGhvZD09dW5kZWZpbmVkICAmJiBmb3JtR3JvdXAuY29udHJvbHMucGF5TWV0aG9kPT11bmRlZmluZWQpIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIiBpcyB0cmlnZ2VyZWQgMVwiKVxyXG4gICAgICAgIHRoaXMuY29tcGxldGVTYXZlUXVlc3Rpb25uYWlyZShmb3JtR3JvdXApO1xyXG4gICAgICAgLy8gY29uc29sZS5sb2coXCIgdHJpZ2dlcmVkIDJcIilcclxuICAgICAgICAgLy8gUEdMUC0xNzUwICBpbiBjb3JyZWN0IFJvdXRpbmcgTlVtYmVyICBcclxuICAgICAgIH0gZWxzZSBpZigoZm9ybUdyb3VwLmNvbnRyb2xzLnBheW1ldGhvZCE9dW5kZWZpbmVkICYmIGZvcm1Hcm91cC5jb250cm9scy5wYXltZXRob2QudmFsdWU9PT0nQycpICB8fChmb3JtR3JvdXAuY29udHJvbHMucGF5TWV0aG9kIT11bmRlZmluZWQgJiYgZm9ybUdyb3VwLmNvbnRyb2xzLnBheU1ldGhvZC52YWx1ZT09PSdDJykgKXtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIiBpcyB0cmlnZ2VyZWQgMlwiKSAgIFxyXG4gICAgICAgIHRoaXMuY29tcGxldGVTYXZlUXVlc3Rpb25uYWlyZShmb3JtR3JvdXApO1xyXG4gICAgICAvLyBjb25zb2xlLmxvZyhcIiBpcyB0cmlnZ2VyZWQgNCBcIikgICBcclxuICAgICAgfWVsc2V7ICAgICAgICAgIFxyXG4gICAgICAgICAgLy8gUEdMUC0xNzUwICBpbiBjb3JyZWN0IFJvdXRpbmcgTlVtYmVyICAgIFxyXG4gICAgICAgICBjb25zdCByb3V0aW5nTnVtYmVyID0gZm9ybUdyb3VwLmNvbnRyb2xzLkJhbmtBY2NvdW50ICYmIGZvcm1Hcm91cC5jb250cm9scy5CYW5rQWNjb3VudC52YWx1ZS5yb3V0aW5nTnVtYmVyID8gKGZvcm1Hcm91cC5jb250cm9scy5CYW5rQWNjb3VudC52YWx1ZS5yb3V0aW5nTnVtYmVyKTogZm9ybUdyb3VwLmNvbnRyb2xzLmJhbmtBY2NvdW50LnZhbHVlLnJvdXRpbmdOdW1iZXIgPyAoZm9ybUdyb3VwLmNvbnRyb2xzLmJhbmtBY2NvdW50LnZhbHVlLnJvdXRpbmdOdW1iZXIpIDpcIlwiO1xyXG4gICAgICAgIGNvbnN0IGFjY291bnROdW1iZXIgPSBmb3JtR3JvdXAuY29udHJvbHMuQmFua0FjY291bnQgJiZmb3JtR3JvdXAuY29udHJvbHMuQmFua0FjY291bnQudmFsdWUuYWNjb3VudE51bWJlciA/IChmb3JtR3JvdXAuY29udHJvbHMuQmFua0FjY291bnQudmFsdWUuYWNjb3VudE51bWJlcik6Zm9ybUdyb3VwLmNvbnRyb2xzLmJhbmtBY2NvdW50LnZhbHVlLmFjY291bnROdW1iZXIgPyAoZm9ybUdyb3VwLmNvbnRyb2xzLmJhbmtBY2NvdW50LnZhbHVlLmFjY291bnROdW1iZXIpIDpcIlwiO1xyXG4gICAgICAgIGNvbnN0IHJlRW50ZXJBY2NvdW50TnVtYmVyID0gZm9ybUdyb3VwLmNvbnRyb2xzLkJhbmtBY2NvdW50ICYmIGZvcm1Hcm91cC5jb250cm9scy5CYW5rQWNjb3VudC52YWx1ZS5yZUVudGVyQWNjb3VudE51bWJlciA/IChmb3JtR3JvdXAuY29udHJvbHMuQmFua0FjY291bnQudmFsdWUucmVFbnRlckFjY291bnROdW1iZXIpOiBmb3JtR3JvdXAuY29udHJvbHMuYmFua0FjY291bnQudmFsdWUucmVFbnRlckFjY291bnROdW1iZXIgPyAoZm9ybUdyb3VwLmNvbnRyb2xzLmJhbmtBY2NvdW50LnZhbHVlLnJlRW50ZXJBY2NvdW50TnVtYmVyKTpcIlwiO1xyXG4gICAgICAgICAgaWYodGhpcy5pc0JhbmtEZXRhaWxzVmFsaWQocm91dGluZ051bWJlciwgYWNjb3VudE51bWJlciwgcmVFbnRlckFjY291bnROdW1iZXIpKXtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCIgaXMgdHJpZ2dlcmVkIDMgXCIpIFxyXG4gICAgICAgICAgICAgIHRoaXMuY29tcGxldGVTYXZlUXVlc3Rpb25uYWlyZShmb3JtR3JvdXApO1xyXG4gICAgICAgICAgIC8vICAgY29uc29sZS5sb2coXCIgaXMgdHJpZ2dlcmVkIDYgXCIpIFxyXG4gICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgXHJcbiAgICAgICAgICB9XHJcbiAgICAgIH0gICBcclxuICAgLy8gICBjb25zb2xlLmxvZyhcIiBpcyB0cmlnZ2VyZWQgN1wiKVxyXG4gICAgLy8gIHRoaXMuY29tcGxldGVTYXZlUXVlc3Rpb25uYWlyZShmb3JtR3JvdXApO1xyXG4gICAgIC8vIGNvbnNvbGUubG9nKFwiIGlzIHRyaWdnZXJlZCA4XCIpXHJcbiAgICB9IGVsc2V7XHJcbiAgICAgIGlmKHBhc3N3b3JkICE9PSBcIlwiICYmIHRoaXMuaXNQYXNzd29yZFZhbGlkKGZpcnN0TmFtZSwgbGFzdE5hbWUsIHVzZXJJZCwgcGFzc3dvcmQpKVxyXG4gICAgICB7IGNvbnNvbGUubG9nKFwiIGlzIHRyaWdnZXJlZCA0XCIpXHJcbiAgICAgICAgdGhpcy5jb21wbGV0ZVNhdmVRdWVzdGlvbm5haXJlKGZvcm1Hcm91cCk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZXtcclxuICAgICAgICAgLy8gUEdMUC0xNzUwICBpbiBjb3JyZWN0IFJvdXRpbmcgTlVtYmVyICBcclxuICAgICAgICBjb25zdCBwYXNzd29yZEludmFsaWRFcnJvciA9IHtcclxuICAgICAgICAgIFwiZXJyb3JJZFwiOiBcIlwiLFxyXG4gICAgICAgICAgXCJ0aW1lc3RhbXBcIjogXCJcIixcclxuICAgICAgICAgIFwibXNnXCI6IFtcclxuICAgICAgICAgIFwiW1RoZSBwYXNzd29yZCBjb250YWlucyBlaXRoZXIvb3IgdXNlciBuYW1lLCBmaXJzdCBuYW1lIG9yIGxhc3QgbmFtZSB3aGljaCBkb2VzIG5vdCBtYXRjaCB3aXRoIHRoZSBwYXNzd29yZCByZXF1aXJlbWVudFxcdFxcdC5cXHRcXHRdXCJcclxuICAgICAgICAgIF0sXHJcbiAgICAgICAgICBcImRldGFpbHNcIjogXCJ1cmk9L3F1ZXN0aW9ubmFpcmUtc2VydmljZS9xdWVzdGlvbm5haXJlL3NjcmVlbi1xdWVzdGlvbm5haXJlXCIsXHJcbiAgICAgICAgICBcImVycm9yXCI6IG51bGwsXHJcbiAgICAgICAgICBcImVycm9yQ29kZVwiOiBcIjQyMlwiXHJcbiAgICAgIH1cclxuIFxyXG4gICAgICAgICAgICAgICAgIHRoaXMub25FcnJvci5lbWl0KHBhc3N3b3JkSW52YWxpZEVycm9yKTtcclxuXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNvbXBsZXRlU2F2ZVF1ZXN0aW9ubmFpcmUoZm9ybUdyb3VwKXtcclxuICAgIHRoaXMuZm9ybVJhd0RhdGEgPSBmb3JtR3JvdXA7XHJcbiAgICB0aGlzLnFjcy5zZXREYXRhKHRoaXMuYWN0aXZlSW5kZXgsIEpTT04uc3RyaW5naWZ5KGZvcm1Hcm91cC5nZXRSYXdWYWx1ZSgpKSk7XHJcbiAgICBsZXQgc3RySW50b09iajtcclxuICAgIHRoaXMucGF5TG9hZCA9ICcnO1xyXG4gICAgdGhpcy5xY3MuZ2V0QWxsRGF0YSgpLmZvckVhY2goZGF0YSA9PiB7XHJcbiAgICAgIHN0ckludG9PYmogPSAoZGF0YSk7XHJcbiAgICAgIHRoaXMucGF5TG9hZCA9ICh0aGlzLnBheUxvYWQgKyBzdHJJbnRvT2JqKTtcclxuICAgIH0pO1xyXG5cclxuICAgIGxldCBzYXZlRGF0YSA9IHt9IGFzIFF1ZXN0aW9ubmFpcmVTYXZlTW9kZWw7XHJcbiAgICBsZXQgY3VycmVudFFlID0gdGhpcy5hdXRvU2F2ZSA/IHRoaXMucWVzLnNlYXJjaEJzLmdldFZhbHVlKCkgOiB0aGlzLnF1ZXJ5TW9kZWw7XHJcblxyXG4gICAgaWYgKHRoaXMucGFnZVR5cGUgPT09ICdQT1BVUCcgfHwgdGhpcy5wYWdlVHlwZSA9PT0gJ0pzb24nKSB7XHJcbiAgICAgIHRoaXMub25Db21wbGV0ZS5lbWl0KGZvcm1Hcm91cC5nZXRSYXdWYWx1ZSgpKTtcclxuICAgICAgdGhpcy5xY3Muc2hhcmVkRGF0YS5jbGVhcigpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLmZvclNjcmVlblF1ZXN0aW9ubmFpcmUpIHtcclxuICAgICAgc2F2ZURhdGEuZGF0YSA9IHRoaXMucGF5TG9hZC8vSlNPTi5zdHJpbmdpZnkodGhpcy5wYXlMb2FkKTtcclxuICAgICAgc2F2ZURhdGEucG90ZW50aWFsSXNzdWVJZCA9IGN1cnJlbnRRZS5wb3RlbnRpYWxJc3N1ZUlkO1xyXG4gICAgICBzYXZlRGF0YS5mbG93QWJsZUFuZEF2YWlsYWJsZSA9IGN1cnJlbnRRZS5mbG93QWJsZUFuZEF2YWlsYWJsZTtcclxuICAgICAgc2F2ZURhdGEudXNlclR5cGUgPSBjdXJyZW50UWUudXNlclR5cGU7XHJcbiAgICAgIHNhdmVEYXRhLmZsb3dGcm9tID0gY3VycmVudFFlLmZsb3dGcm9tO1xyXG4gICAgICBzYXZlRGF0YS5mbG93V0NBYmxlQW5kQXZhaWxhYmxlID0gY3VycmVudFFlLmZsb3dXQ0FibGVBbmRBdmFpbGFibGU7XHJcbiAgICAgIHNhdmVEYXRhLmNsYWltQXBwbGljYXRpb25JZCA9IGN1cnJlbnRRZS5jbGFpbUFwcGxpY2F0aW9uSWQ7XHJcbiAgICAgIHNhdmVEYXRhLnF1ZXN0aW9ubmFpcmVJZHMgPSBjdXJyZW50UWUucXVlc3Rpb25uYWlyZUlkcztcclxuICAgICAgc2F2ZURhdGEucXVlc3Rpb25uYWlyZUlkID0gY3VycmVudFFlLnF1ZXN0aW9ubmFpcmVJZDtcclxuICAgICAgc2F2ZURhdGEuYWN0aXZlUGFnZUluZGV4ID0gdGhpcy5hY3RpdmVJbmRleDtcclxuICAgICAgaWYoIXRoaXMuYXV0b1NhdmUpe1xyXG4gICAgICAgIHNhdmVEYXRhLmF1dG9TYXZlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5vbkNvbXBsZXRlLmVtaXQoc2F2ZURhdGEpO1xyXG4gICAgICAgIHRoaXMucWNzLnNoYXJlZERhdGEuY2xlYXIoKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5pbnB1dERhdGEgPSBzYXZlRGF0YTtcclxuICAgICAgdGhpcy5ibG9ja0Zvcm1VaSgpXHJcbiAgICAgIGlmIChmb3JtR3JvdXAuaW52YWxpZCkge1xyXG4gICAgICAgIGZvcm1Hcm91cC5tYXJrQWxsQXNUb3VjaGVkKCk7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ0Zvcm0gaW52YWxpZCAtIGJsb2NraW5nIHN1Ym1pdCAoc2NyZWVuKScpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnF1ZXN0aW9ubmFpcmVTZXJ2aWNlXHJcbiAgICAgICAgLnNhdmVRdWVzdGlvbm5haXJlKHNhdmVEYXRhKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoXHJcbiAgICAgICAgICByZXMgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnVuYmxvY2tGb3JtVWkoKTtcclxuICAgICAgICAgICAgdGhpcy5xZXMuc2VhcmNoTW9kZWwuc3BsaWNlKHRoaXMucWVzLnNlYXJjaE1vZGVsLmZpbmRJbmRleChpdGVtID0+IGl0ZW0ucG90ZW50aWFsSXNzdWVJZCA9PSBjdXJyZW50UWUucG90ZW50aWFsSXNzdWVJZCksIDEpO1xyXG4gICAgICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygncmVtYWluaW5nIGVsZW1lbnRzJywgdGhpcy5xZXMuc2VhcmNoTW9kZWwpO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5xZXMuc2VhcmNoTW9kZWwubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgIHRoaXMucWVzLnNlYXJjaEJzLm5leHQodGhpcy5xZXMuc2VhcmNoTW9kZWxbMF0pO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdObyBFbGVtZW50IFByZXNlbnQnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLm9uQ29tcGxldGUuZW1pdChyZXMpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGVyciA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMucWNzLnNoYXJlZERhdGEuY2xlYXIoKTtcclxuICAgICAgICAgICAgdGhpcy51bmJsb2NrRm9ybVVpKCk7XHJcbiAgICAgICAgICAgIHRoaXMuY2FwdGNoYS5yZXNldENhcHRjaGEoKTtcclxuICAgICAgICAgICAgdGhpcy5vbkVycm9yLmVtaXQoZXJyKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbGV0IGRhdGFBcnI6IHN0cmluZ1tdID0gW107XHJcbiAgICAgIHRoaXMucWNzLmdldEFsbERhdGEoKS5mb3JFYWNoKGRhdGEgPT4ge1xyXG4gICAgICAgIGRhdGFBcnIucHVzaChkYXRhKTtcclxuICAgICAgfSk7XHJcbiAgICAgIHNhdmVEYXRhLnNjcmVlblF1ZXN0aW9ubmFpcmVEYXRhID0gZGF0YUFycjtcclxuICAgICAgc2F2ZURhdGEudXNlclR5cGUgPSBjdXJyZW50UWUudXNlclR5cGU7XHJcbiAgICAgIHNhdmVEYXRhLmZsb3dGcm9tID0gY3VycmVudFFlLmZsb3dGcm9tO1xyXG4gICAgICBzYXZlRGF0YS5pc1NjcmVlblF1ZXN0aW9ubmFpcmUgPSB0cnVlO1xyXG4gICAgICBzYXZlRGF0YS5xdWVzdGlvbm5haXJlSWRzID0gY3VycmVudFFlLnF1ZXN0aW9ubmFpcmVJZHM7XHJcbiAgICAgIHNhdmVEYXRhLnV1aWQgPSB0aGlzLmlkZW50aWZpZXI7Ly9jdXJyZW50UWUudXVpZDtcclxuICAgICAgc2F2ZURhdGEuZmxvd0tleSA9IGN1cnJlbnRRZS5mbG93S2V5O1xyXG4gICAgICBzYXZlRGF0YS5xdWVzdGlvbm5haXJlSWQgPSBjdXJyZW50UWUucXVlc3Rpb25uYWlyZUlkO1xyXG4gICAgICBzYXZlRGF0YS5hY3RpdmVQYWdlSW5kZXggPSB0aGlzLmFjdGl2ZUluZGV4O1xyXG5cclxuICAgICAgaWYoIXRoaXMuYXV0b1NhdmUpe1xyXG4gICAgICAgIHRoaXMub25Db21wbGV0ZS5lbWl0KHNhdmVEYXRhKTtcclxuICAgICAgICB0aGlzLnFjcy5zaGFyZWREYXRhLmNsZWFyKCk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGlmKHRoaXMubWZhUmVxdWlyZWQpe1xyXG4gICAgICAgIHRoaXMuc2hvd01mYSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5tZmFEYXRhID0gc2F2ZURhdGE7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChmb3JtR3JvdXAuaW52YWxpZCkge1xyXG4gICAgICAgIGZvcm1Hcm91cC5tYXJrQWxsQXNUb3VjaGVkKCk7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ0Zvcm0gaW52YWxpZCAtIGJsb2NraW5nIHN1Ym1pdCAoc2NyZWVuKScpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBhbGxEYXRhID0gdGhpcy5xY3MuZ2V0QWxsRGF0YSgpO1xyXG5cclxuICAgICAgbGV0IGhhc0ludmFsaWQgPSBmYWxzZTtcclxuXHJcbiAgICAgIGFsbERhdGEuZm9yRWFjaChkYXRhID0+IHtcclxuICAgICAgICBjb25zdCBvYmogPSBKU09OLnBhcnNlKGRhdGEpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIG9iai50ZXh0bm90aWZpY2F0aW9uID09PSBudWxsIHx8XHJcbiAgICAgICAgICBvYmouY29udGFjdHR5cGUgPT09IG51bGxcclxuICAgICAgICApIHtcclxuICAgICAgICAgIGhhc0ludmFsaWQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgICBpZiAoaGFzSW52YWxpZCkge1xyXG4gICAgICAgIGZvcm1Hcm91cC5tYXJrQWxsQXNUb3VjaGVkKCk7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ0Jsb2NraW5nIHN1Ym1pdCAtIG1pc3NpbmcgcmFkaW8gdmFsdWVzJyk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc2F2ZVNjcmVlblF1ZXN0aW9ubmFpcmUoc2F2ZURhdGEpO1xyXG4gICAgICB9XHJcbiAgfVxyXG5cclxuICBwYXltZW50RGV0YWlsc0NoYW5nZUVycm9yKCl7XHJcbiAgICByZXR1cm4gdGhpcy5wYXltZW50RGV0YWlsQ2hhbmdlSGFzRXJyb3I7XHJcbiAgfVxyXG4gICAgLy8gUEdMUC0xNzUwICBpbiBjb3JyZWN0IFJvdXRpbmcgTlVtYmVyXHJcbiAgaXNCYW5rRGV0YWlsc1ZhbGlkKHJvdXRpbmdOdW1iZXIsIGFjY291bnROdW1iZXIsIHJlRW50ZXJBY2NvdW50TnVtYmVyKVxyXG4gIHsgXHJcbiAgICBcclxuICAgIHRoaXMuYWNjb3VudE51bWJlcmZsZz10cnVlO1xyXG4gICAgdGhpcy5yZUVudGVyQWNjb3VudE51bWJlcmZsYWc9dHJ1ZTtcclxuICAgIHRoaXMucm91dGluZ051bWJlcmZsYWc9dHJ1ZTtcclxuICAgIGNvbnN0IHJvdXRpbmdOdW1iZXJSZWdleCA9IEFwcFJlZ2V4LlJPVVRJTkdfTlVNQkVSX1JFR0VYO1xyXG4gICAgY29uc3QgYWNjb3VudE51bWJlclJlZ2V4ID0gQXBwUmVnZXguQUNDT1VOVF9OVU1CRVJfUkVHRVhfTUlOO1xyXG4gICAgICAgICAgICAgIGlmKCFyb3V0aW5nTnVtYmVyUmVnZXgudGVzdChyb3V0aW5nTnVtYmVyKSl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJvdXRpbmdOdW1iZXJmbGFnPWZhbHNlO1xyXG4gICAgICAgICAgICAgIH0gICAgICBcclxuICAgICAgICAgICAgICBpZighYWNjb3VudE51bWJlclJlZ2V4LnRlc3QoYWNjb3VudE51bWJlcikpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hY2NvdW50TnVtYmVyZmxnPWZhbHNlO1xyXG4gICAgICAgICAgICAgIH0gXHJcbiAgICAgICAgICAgICAgaWYoIWFjY291bnROdW1iZXJSZWdleC50ZXN0KHJlRW50ZXJBY2NvdW50TnVtYmVyKSl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlRW50ZXJBY2NvdW50TnVtYmVyZmxhZz1mYWxzZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgaWYoIXRoaXMucm91dGluZ051bWJlcmZsYWcgJiYgIXRoaXMuYWNjb3VudE51bWJlcmZsZyAmJiAhdGhpcy5yZUVudGVyQWNjb3VudE51bWJlcmZsYWcpe1xyXG4gICAgICAgICAgICAgICAgICBjb25zdCBCYW5rRGV0YWlsc0ludmFsaWRFcnJvciA9IHtcclxuICAgICAgICAgICAgICAgICAgXCJlcnJvcklkXCI6IFwiXCIsXHJcbiAgICAgICAgICAgICAgICAgIFwidGltZXN0YW1wXCI6IFwiXCIsXHJcbiAgICAgICAgICAgICAgICAgIFwibXNnXCI6IFtcclxuICAgICAgICAgICAgICAgICAgXCJbVGhlIHJvdXRpbmdOdW1iZXIsYWNjb3VudE51bWJlciBhbmQgcmVFbnRlckFjY291bnROdW1iZXIgZmllbGQgdmFsdWVzIGRvIG5vdCBtYXRjaCB0aGUgcmVxdWlyZWQgZm9ybWF0IFxcdFxcdC5cXHRcXHRdXCJcclxuICAgICAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICAgICAgXCJkZXRhaWxzXCI6IFwidXJpPS9xdWVzdGlvbm5haXJlLXNlcnZpY2UvcXVlc3Rpb25uYWlyZS9zY3JlZW4tcXVlc3Rpb25uYWlyZVwiLFxyXG4gICAgICAgICAgICAgICAgICBcImVycm9yXCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgIFwiZXJyb3JDb2RlXCI6IFwiNDIyXCJcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgIHRoaXMub25FcnJvci5lbWl0KEJhbmtEZXRhaWxzSW52YWxpZEVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSBpZighdGhpcy5yb3V0aW5nTnVtYmVyZmxhZyApe1xyXG4gICAgICAgICAgICAgICAgICBjb25zdCBCYW5rRGV0YWlsc0ludmFsaWRFcnJvciA9IHtcclxuICAgICAgICAgICAgICAgICAgXCJlcnJvcklkXCI6IFwiXCIsXHJcbiAgICAgICAgICAgICAgICAgIFwidGltZXN0YW1wXCI6IFwiXCIsXHJcbiAgICAgICAgICAgICAgICAgIFwibXNnXCI6IFtcclxuICAgICAgICAgICAgICAgICAgXCJbVGhlIHJvdXRpbmdOdW1iZXIgZmllbGQgdmFsdWUgZG9lcyBub3QgbWF0Y2ggdGhlIHJlcXVpcmVkIGZvcm1hdCBcXHRcXHQuXFx0XFx0XVwiXHJcbiAgICAgICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgICAgIFwiZGV0YWlsc1wiOiBcInVyaT0vcXVlc3Rpb25uYWlyZS1zZXJ2aWNlL3F1ZXN0aW9ubmFpcmUvc2NyZWVuLXF1ZXN0aW9ubmFpcmVcIixcclxuICAgICAgICAgICAgICAgICAgXCJlcnJvclwiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICBcImVycm9yQ29kZVwiOiBcIjQyMlwiXHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgdGhpcy5vbkVycm9yLmVtaXQoQmFua0RldGFpbHNJbnZhbGlkRXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgfWVsc2UgaWYoIXRoaXMuYWNjb3VudE51bWJlcmZsZyAmJiAhdGhpcy5yZUVudGVyQWNjb3VudE51bWJlcmZsYWcpe1xyXG4gICAgICAgICAgICAgICAgICBjb25zdCBCYW5rRGV0YWlsc0ludmFsaWRFcnJvciA9IHtcclxuICAgICAgICAgICAgICAgICAgXCJlcnJvcklkXCI6IFwiXCIsXHJcbiAgICAgICAgICAgICAgICAgIFwidGltZXN0YW1wXCI6IFwiXCIsXHJcbiAgICAgICAgICAgICAgICAgIFwibXNnXCI6IFtcclxuICAgICAgICAgICAgICAgICAgXCJbVGhlIGFjY291bnROdW1iZXIgYW5kIHJlRW50ZXJBY2NvdW50TnVtYmVyIGZpZWxkIHZhbHVlcyBkbyBub3QgbWF0Y2ggdGhlIHJlcXVpcmVkIGZvcm1hdCBcXHRcXHQuXFx0XFx0XVwiXHJcbiAgICAgICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgICAgIFwiZGV0YWlsc1wiOiBcInVyaT0vcXVlc3Rpb25uYWlyZS1zZXJ2aWNlL3F1ZXN0aW9ubmFpcmUvc2NyZWVuLXF1ZXN0aW9ubmFpcmVcIixcclxuICAgICAgICAgICAgICAgICAgXCJlcnJvclwiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICBcImVycm9yQ29kZVwiOiBcIjQyMlwiXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHRoaXMub25FcnJvci5lbWl0KEJhbmtEZXRhaWxzSW52YWxpZEVycm9yKTtcclxuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgfWVsc2UgaWYoIXRoaXMuYWNjb3VudE51bWJlcmZsZyl7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBCYW5rRGV0YWlsc0ludmFsaWRFcnJvciA9IHtcclxuICAgICAgICAgICAgICAgIFwiZXJyb3JJZFwiOiBcIlwiLFxyXG4gICAgICAgICAgICAgICAgXCJ0aW1lc3RhbXBcIjogXCJcIixcclxuICAgICAgICAgICAgICAgIFwibXNnXCI6IFtcclxuICAgICAgICAgICAgICAgIFwiW1RoZSBhY2NvdW50TnVtYmVyIGZpZWxkIHZhbHVlIGRvZXMgbm90IG1hdGNoIHRoZSByZXF1aXJlZCBmb3JtYXQgXFx0XFx0LlxcdFxcdF1cIlxyXG4gICAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICAgIFwiZGV0YWlsc1wiOiBcInVyaT0vcXVlc3Rpb25uYWlyZS1zZXJ2aWNlL3F1ZXN0aW9ubmFpcmUvc2NyZWVuLXF1ZXN0aW9ubmFpcmVcIixcclxuICAgICAgICAgICAgICAgIFwiZXJyb3JcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgIFwiZXJyb3JDb2RlXCI6IFwiNDIyXCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLm9uRXJyb3IuZW1pdChCYW5rRGV0YWlsc0ludmFsaWRFcnJvcik7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfWVsc2UgaWYoIXRoaXMucmVFbnRlckFjY291bnROdW1iZXJmbGFnKXtcclxuICAgICAgICAgICAgICBjb25zdCBCYW5rRGV0YWlsc0ludmFsaWRFcnJvciA9IHtcclxuICAgICAgICAgICAgICBcImVycm9ySWRcIjogXCJcIixcclxuICAgICAgICAgICAgICBcInRpbWVzdGFtcFwiOiBcIlwiLFxyXG4gICAgICAgICAgICAgIFwibXNnXCI6IFtcclxuICAgICAgICAgICAgICBcIltUaGUgcmVFbnRlckFjY291bnROdW1iZXIgZmllbGQgdmFsdWUgZG9lcyBub3QgbWF0Y2ggdGhlIHJlcXVpcmVkIGZvcm1hdCBcXHRcXHQuXFx0XFx0XVwiXHJcbiAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICBcImRldGFpbHNcIjogXCJ1cmk9L3F1ZXN0aW9ubmFpcmUtc2VydmljZS9xdWVzdGlvbm5haXJlL3NjcmVlbi1xdWVzdGlvbm5haXJlXCIsXHJcbiAgICAgICAgICAgICAgXCJlcnJvclwiOiBudWxsLFxyXG4gICAgICAgICAgICAgIFwiZXJyb3JDb2RlXCI6IFwiNDIyXCJcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMub25FcnJvci5lbWl0KEJhbmtEZXRhaWxzSW52YWxpZEVycm9yKTtcclxuICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgIH1lbHNlICBpZih0aGlzLmFjY291bnROdW1iZXJmbGcgJiYgdGhpcy5yZUVudGVyQWNjb3VudE51bWJlcmZsYWcpe1xyXG4gICAgICAgICAgICAgICAgICBpZihhY2NvdW50TnVtYmVyIT09cmVFbnRlckFjY291bnROdW1iZXIpeyAgXHJcbiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBCYW5rRGV0YWlsc0ludmFsaWRFcnJvciA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgIFwiZXJyb3JJZFwiOiBcIlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgXCJ0aW1lc3RhbXBcIjogXCJcIixcclxuICAgICAgICAgICAgICAgICAgICAgIFwibXNnXCI6IFtcclxuICAgICAgICAgICAgICAgICAgICAgIFwiW1ZhbHVlcyBpbiBhY2NvdW50TnVtYmVyIGFuZCByZUVudGVyQWNjb3VudE51bWJlciBmaWVsZHMgZG8gbm90IG1hdGNoIFxcdFxcdC5cXHRcXHRdXCJcclxuICAgICAgICAgICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgICAgICAgICBcImRldGFpbHNcIjogXCJ1cmk9L3F1ZXN0aW9ubmFpcmUtc2VydmljZS9xdWVzdGlvbm5haXJlL3NjcmVlbi1xdWVzdGlvbm5haXJlXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICBcImVycm9yXCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICBcImVycm9yQ29kZVwiOiBcIjQyMlwiXHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25FcnJvci5lbWl0KEJhbmtEZXRhaWxzSW52YWxpZEVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgfWVsc2VcclxuICAgICAgICAgICAgICAgICAgeyAgXHJcbiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlXHJcbiAgICAgICAgICAgICAgICAgIH0gXHJcbiAgICAgICAgICAgICAgfWVsc2VcclxuICAgICAgICAgICAgICB7ICBcclxuICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxyXG4gICAgICAgICAgICAgIH0gICAgIFxyXG5cclxuICB9XHJcblxyXG4gIGlzTnVtYmVyKHppcGNvZGUpIHtcclxuICB2YXIgcmVnID0gbmV3IFJlZ0V4cChcIl5bMC05XSokXCIpO1xyXG4gIHJldHVybiByZWcudGVzdCh6aXBjb2RlKTtcclxuICB9XHJcblxyXG4gIGlzVmFsaWRTdHJlZXRBZGRyZXNzKHN0cmVldEFkZCkge1xyXG4gICAgY29uc3QgcmVnID0gL15cXHMqKFAoPzpcXC58b3N0KT9cXHMqTyg/OlxcLnxmZmljZSk/XFwuP1xccypCb3hcXGJ8UFxcLj9PXFwuP1xccypCKD86b3gpP1xcYnxQb3N0XFxzKk9mZmljZVxccypCb3hcXGIpL2k7XHJcbiAgICBpZihyZWcudGVzdChzdHJlZXRBZGQpKSB7XHJcbiAgICAgIGNvbnN0IHN0cmVldEFkZEVycm9yID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIFwiZXJyb3JJZFwiOiBcIlwiLFxyXG4gICAgICAgICAgICAgICAgICAgIFwidGltZXN0YW1wXCI6IFwiXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJtc2dcIjogW1xyXG4gICAgICAgICAgICAgICAgICAgIFwiUC5PLiBCb3ggYWRkcmVzc2VzIGFyZSBub3QgYWxsb3dlZC5cIlxyXG4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgICAgICAgXCJkZXRhaWxzXCI6IFwidXJpPS9xdWVzdGlvbm5haXJlLXNlcnZpY2UvcXVlc3Rpb25uYWlyZS9zY3JlZW4tcXVlc3Rpb25uYWlyZVwiLFxyXG4gICAgICAgICAgICAgICAgICAgIFwiZXJyb3JcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBcImVycm9yQ29kZVwiOiBcIjQyMlwiXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkVycm9yLmVtaXQoc3RyZWV0QWRkRXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH0gXHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuXHJcbiAgfVxyXG5cclxuICAgICAgIGlzVmFsaWRaaXBDb2RlKHppcGNvZGUpe1xyXG4gICAgaWYoemlwY29kZSAhPSBudWxsICYmICF0aGlzLmlzTnVtYmVyKHppcGNvZGUpKXtcclxuICAgICAgIGlmKGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwibGFuZ3VhZ2VcIikgPT09IFwiZXNcIil7XHJcbiAgICAgIGNvbnN0IFppcENvZGVFcnJvciA9IHtcclxuICAgICAgICAgICAgICAgICAgICBcImVycm9ySWRcIjogXCJcIixcclxuICAgICAgICAgICAgICAgICAgICBcInRpbWVzdGFtcFwiOiBcIlwiLFxyXG4gICAgICAgICAgICAgICAgICAgIFwibXNnXCI6IFtcclxuICAgICAgICAgICAgICAgICAgICBcIltFbCBjw7NkaWdvIHBvc3RhbCBkZWJlIGNvbnRlbmVyIHNvbG8gbsO6bWVyb3MgXFx0XFx0LlxcdFxcdF1cIlxyXG4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgICAgICAgXCJkZXRhaWxzXCI6IFwidXJpPS9xdWVzdGlvbm5haXJlLXNlcnZpY2UvcXVlc3Rpb25uYWlyZS9zY3JlZW4tcXVlc3Rpb25uYWlyZVwiLFxyXG4gICAgICAgICAgICAgICAgICAgIFwiZXJyb3JcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBcImVycm9yQ29kZVwiOiBcIjQyMlwiXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkVycm9yLmVtaXQoWmlwQ29kZUVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnN0IFppcENvZGVFcnJvciA9IHtcclxuICAgICAgICAgICAgICAgICAgICBcImVycm9ySWRcIjogXCJcIixcclxuICAgICAgICAgICAgICAgICAgICBcInRpbWVzdGFtcFwiOiBcIlwiLFxyXG4gICAgICAgICAgICAgICAgICAgIFwibXNnXCI6IFtcclxuICAgICAgICAgICAgICAgICAgICBcIltaaXAgY29kZSBzaG91bGQgb25seSBoYXZlIG51bWJlcnMgXFx0XFx0LlxcdFxcdF1cIlxyXG4gICAgICAgICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgICAgICAgXCJkZXRhaWxzXCI6IFwidXJpPS9xdWVzdGlvbm5haXJlLXNlcnZpY2UvcXVlc3Rpb25uYWlyZS9zY3JlZW4tcXVlc3Rpb25uYWlyZVwiLFxyXG4gICAgICAgICAgICAgICAgICAgIFwiZXJyb3JcIjogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICBcImVycm9yQ29kZVwiOiBcIjQyMlwiXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkVycm9yLmVtaXQoWmlwQ29kZUVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgfSAgICAgICAgXHJcblxyXG4gICAgfWVsc2UgaWYoemlwY29kZSAhPSBudWxsICYmICh6aXBjb2RlLmxlbmd0aCA9PSA1IHx8IHppcGNvZGUubGVuZ3RoID09IDkpKXtcclxuICAgICByZXR1cm4gdHJ1ZVxyXG4gICAgfWVsc2V7XHJcbiAgICAgICBpZihsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcImxhbmd1YWdlXCIpID09PSBcImVzXCIpe1xyXG4gICAgICAgY29uc3QgWmlwQ29kZUVycm9yID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIFwiZXJyb3JJZFwiOiBcIlwiLFxyXG4gICAgICAgICAgICAgICAgICAgIFwidGltZXN0YW1wXCI6IFwiXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJtc2dcIjogW1xyXG4gICAgICAgICAgICAgICAgICAgIFwiW0VsIGPDs2RpZ28gcG9zdGFsIGRlYmUgc2VyIGRlIDUgbyA5IGTDrWdpdG9zIFxcdFxcdC5cXHRcXHRdXCJcclxuICAgICAgICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgICAgICAgIFwiZGV0YWlsc1wiOiBcInVyaT0vcXVlc3Rpb25uYWlyZS1zZXJ2aWNlL3F1ZXN0aW9ubmFpcmUvc2NyZWVuLXF1ZXN0aW9ubmFpcmVcIixcclxuICAgICAgICAgICAgICAgICAgICBcImVycm9yXCI6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJlcnJvckNvZGVcIjogXCI0MjJcIlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgdGhpcy5vbkVycm9yLmVtaXQoWmlwQ29kZUVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gO1xyXG4gICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgIGNvbnN0IFppcENvZGVFcnJvciA9IHtcclxuICAgICAgICAgICAgICAgICAgICBcImVycm9ySWRcIjogXCJcIixcclxuICAgICAgICAgICAgICAgICAgICBcInRpbWVzdGFtcFwiOiBcIlwiLFxyXG4gICAgICAgICAgICAgICAgICAgIFwibXNnXCI6IFtcclxuICAgICAgICAgICAgICAgICAgICBcIltaaXAgY29kZSBzaG91bGQgYmUgb2YgNSBvciA5IGRpZ2l0cyBcXHRcXHQuXFx0XFx0XVwiXHJcbiAgICAgICAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICAgICAgICBcImRldGFpbHNcIjogXCJ1cmk9L3F1ZXN0aW9ubmFpcmUtc2VydmljZS9xdWVzdGlvbm5haXJlL3NjcmVlbi1xdWVzdGlvbm5haXJlXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJlcnJvclwiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIFwiZXJyb3JDb2RlXCI6IFwiNDIyXCJcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgIHRoaXMub25FcnJvci5lbWl0KFppcENvZGVFcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDtcclxuICAgICAgICAgICAgICB9ICAgICAgICAgXHJcblxyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG5cclxuICBpc1Bhc3N3b3JkVmFsaWQoZmlyc3ROYW1lLCBsYXN0TmFtZSwgdXNlcklkLCBwYXNzd29yZCl7XHJcbiAgICBjb25zdCBlc2NhcGVSZWdFeHAgPSAoc3RyIDogU3RyaW5nKSA9PiBzdHIucmVwbGFjZSgvWy4qKz9eJHt9KCl8W1xcXVxcXFxdL2csICdcXFxcJCYnKTtcclxuICAgIGNvbnN0IGZpcnN0TmFtZVJlZ2V4ID0gbmV3IFJlZ0V4cChlc2NhcGVSZWdFeHAoZmlyc3ROYW1lKSwgJ2knKTtcclxuICAgIGNvbnN0IGxhc3ROYW1lUmVnZXggPSBuZXcgUmVnRXhwKGVzY2FwZVJlZ0V4cChsYXN0TmFtZSksICdpJyk7XHJcbiAgICBjb25zdCB1c2VySWRSZWdleCA9IG5ldyBSZWdFeHAoZXNjYXBlUmVnRXhwKHVzZXJJZCksICdpJyk7XHJcbiAgICBpZihmaXJzdE5hbWVSZWdleC50ZXN0KHBhc3N3b3JkKSB8fCBsYXN0TmFtZVJlZ2V4LnRlc3QocGFzc3dvcmQpIHx8IHVzZXJJZFJlZ2V4LnRlc3QocGFzc3dvcmQpKXtcclxuICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICB9ZWxzZXtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzYXZlU2NyZWVuUXVlc3Rpb25uYWlyZShkYXRhKXtcclxuICAgIHRoaXMuYmxvY2tGb3JtVWkoKVxyXG4gICAgdGhpcy5xdWVzdGlvbm5haXJlU2VydmljZVxyXG4gICAgICAgIC5zYXZlU2NyZWVuUXVlc3Rpb25uYWlyZShkYXRhKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoXHJcbiAgICAgICAgICBhc3luYyByZXMgPT4ge1xyXG4gICAgICAgICAgICBpZiAocmVzKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5xdWVzdGlvbm5haXJlU2VydmljZS5zdWNjZXNzRWxlbWVudC5uZXh0KHJlc1tGYkNvbnN0YW50cy5zdWNjZXNzUGFnZUVsZW1lbnRdKTtcclxuICAgICAgICAgICAgICB0aGlzLnF1ZXN0aW9ubmFpcmVTZXJ2aWNlLnV1aWQubmV4dChyZXNbRmJDb25zdGFudHMudXVpZF0pO1xyXG4gICAgICAgICAgICAgIHRoaXMucXVlc3Rpb25uYWlyZVNlcnZpY2Uud2FpdEZvclByb2Nlc3NpbmcubmV4dChyZXNbRmJDb25zdGFudHMud2FpdEZvclByb2Nlc3NpbmddKTtcclxuICAgICAgICAgICAgICB0aGlzLnF1ZXN0aW9ubmFpcmVTZXJ2aWNlLndhaXRDaGVja1NlcnZpY2VVcmkubmV4dChyZXNbRmJDb25zdGFudHMud2FpdENoZWNrU2VydmljZVVyaV0pO1xyXG4gICAgICAgICAgICAgIHRoaXMucXVlc3Rpb25uYWlyZVNlcnZpY2UucGFnZVRvT3Blbi5uZXh0KHJlc1tGYkNvbnN0YW50cy5wYWdlVG9PcGVuXSk7XHJcblxyXG4gICAgICAgICAgICAgIGF3YWl0IHRoaXMuc3RvcmFnZS5zZXQoRmJDb25zdGFudHMuc3VjY2Vzc1BhZ2VFbGVtZW50LCByZXNbRmJDb25zdGFudHMuc3VjY2Vzc1BhZ2VFbGVtZW50XSk7XHJcbiAgICAgICAgICAgICAgYXdhaXQgdGhpcy5zdG9yYWdlLnNldChGYkNvbnN0YW50cy53YWl0Rm9yUHJvY2Vzc2luZywgcmVzW0ZiQ29uc3RhbnRzLndhaXRGb3JQcm9jZXNzaW5nXSk7XHJcbiAgICAgICAgICAgICAgYXdhaXQgdGhpcy5zdG9yYWdlLnNldChGYkNvbnN0YW50cy53YWl0Q2hlY2tTZXJ2aWNlVXJpLCByZXNbRmJDb25zdGFudHMud2FpdENoZWNrU2VydmljZVVyaV0pO1xyXG4gICAgICAgICAgICAgIGF3YWl0IHRoaXMuc3RvcmFnZS5zZXQoRmJDb25zdGFudHMucGFnZVRvT3BlbiwgcmVzW0ZiQ29uc3RhbnRzLnBhZ2VUb09wZW5dKTtcclxuICAgICAgICAgICAgICBhd2FpdCB0aGlzLnN0b3JhZ2Uuc2V0KEZiQ29uc3RhbnRzLnV1aWQsIHJlc1tGYkNvbnN0YW50cy51dWlkXSk7XHJcbiAgICAgICAgICAgICAgLypPbmx5IGVuYWJsZSBseG54IGluIHNpZ24tdXAgZmxvdyBmb3IgcXVlc3Rpb25uYWlyZSBmb3JtLWJ1aWxkZXIqL1xyXG4gICAgICAgICAgICAgIGlmKGRhdGE/LnF1ZXN0aW9ubmFpcmVJZHM/LlswXSA9PT0gMzQ1KXtcclxuICAgICAgICAgICAgICAgIHRoaXMuZmxvd0tleSA9IDM0NTtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVzcG9uc2VVdWlkID0gcmVzWyd1dWlkJ107XHJcbiAgICAgICAgICAgICAgICBsZXQgc3NuID0gdGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpICYmIHRoaXMuZm9ybVJhd0RhdGEuZ2V0UmF3VmFsdWUoKS5zc24gPyAodGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpLnNzbikudG9Mb3dlckNhc2UoKSA6IFwiXCI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxuLmlzTGV4aXNOZXhpc0lkUHJvb2ZpbmdFbmFibGVkKHNzbikuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgICAgICAgbmV4dDogKHJlcyA6IExleGlzTmV4aXNFbmFibGVkUmVzcG9uc2VNb2RlbCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIC8qSWYgbGV4aXMtbmV4aXMgaWQgcHJvb2ZpbmcgaXMgZW5hYmxlZCAqL1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXM/LmxuZW5hYmxlZCAmJiByZXM/Lm1lc3NhZ2UgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRMZXhpc05leGlzQWNjb3VudENyZWF0aW9uVXNlckRldGFpbHMoKTtcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXNMZXhpc05leGlzUG9wdXBFbmFibGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFyZXM/LmxuZW5hYmxlZCAmJiByZXM/Lm1lc3NhZ2UgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubmV4dEJ1dHRvblBhZ2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYobG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJsYW5ndWFnZVwiKSA9PT0gXCJlc1wiKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnV0aWwuc3VjY2VzcyhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdTdSBjdWVudGEgc2UgaGEgY3JlYWRvIGNvcnJlY3RhbWVudGUuIMKhSW5pY2llIHNlc2nDs24hJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51dGlsLnN1Y2Nlc3MoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnWW91ciBhY2NvdW50IGhhdmUgYmVlbiBzdWNjZXNzZnVsbHkgY3JlYXRlZC4gUGxlYXNlIGxvZ2luISdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5uYXZDdHJsLm5hdmlnYXRlUm9vdCgnL2xvZ2luJyksIDIwMDApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGlzLm5hdkN0cmwubmF2aWdhdGVSb290KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAgIGAvJHt0aGlzLm5leHRCdXR0b25QYWdlfT9pZGVudGlmaWVyPSR7cmVzWyd1dWlkJ119YFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkNvbXBsZXRlLmVtaXQoZGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucWNzLnNoYXJlZERhdGEuY2xlYXIoKTtcclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJlcz8ubG5lbmFibGVkID09IGZhbHNlICYmIHJlcz8ubWVzc2FnZSA9PSAnU1NOLU1BU0tFRCcpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRVU1BTQWNjb3VudENyZWF0aW9uVXNlckRldGFpbHMoKTtcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJpZ2dlclVTUFMoKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRVU1BTQWNjb3VudENyZWF0aW9uVXNlckRldGFpbHMoKTtcclxuICAgICAgICAgICAgICAgICAgICAgIC8vIGlmKGVycm9yLmVycm9yLm1lc3NhZ2UuaW5jbHVkZXMoJ0ZBSUwgLSBVU1BTIFByb29maW5nJykpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgLy8gICAvKklmIFVTUFMgcHJvb2ZpbmcgaXMgYWxyZWFkeSB0cmlnZ2VyZWQgYnkgQ1NSIGFuZCB1c2VyIHdhcyBub3QgYWJsZSB0byB2ZXJpZnkgaXQgOiBzbyBpbiBGQUlMIHN0YXR1cyAqL1xyXG4gICAgICAgICAgICAgICAgICAgICAgLy8gICB0aGlzLnRyaWdnZXJVU1BTKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAvLyB9IGVsc2UgaWYgKGVycm9yLmVycm9yLm1zZ1swXS5pbmNsdWRlcygnSU5JVElBVEVEIC0gVVNQUyBQcm9vZmluZycpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAvLyAgIC8qSWYgVVNQUyBwcm9vZmluZyBpcyBhbHJlYWR5IHRyaWdnZXJlZCBieSBDU1IgYW5kIGl0IGlzIGluIElOSVRJQVRFRCBzdGF0dXMgKi9cclxuICAgICAgICAgICAgICAgICAgICAgIC8vICAgICB0aGlzLnV0aWwuc2hvd0Vycm9yKCdZb3VyIFVTUFMgaWRlbnRpdHkgcHJvb2ZpbmcgaXMgcGVuZGluZy4gUGxlYXNlIGNvbXBsZXRlIGl0IGJlZm9yZSB5b3UgbG9naW4gdG8gdGhlIHBvcnRhbCEnKTtcclxuICAgICAgICAgICAgICAgICAgICAgIC8vICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMubmF2Q3RybC5uYXZpZ2F0ZVJvb3QoJy9sb2dpbicpLCAyMDAwKTtcclxuICAgICAgICAgICAgICAgICAgICAgIC8vIH1cclxuICAgICAgICAgICAgICAgICAgICAgIGlmKGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwibGFuZ3VhZ2VcIikgPT09IFwiZXNcIil7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXRpbC5zdWNjZXNzKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICfCoUNvbXBsZXRlIHN1IHZlcmlmaWNhY2nDs24gZGUgaWRlbnRpZGFkIGRlIFVTUFMgYW50ZXMgZGUgaW5pY2lhciBzZXNpw7NuIGVuIGVsIHBvcnRhbCEnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnV0aWwuc3VjY2VzcyhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAnUGxlYXNlIGNvbXBsZXRlIHlvdXIgVVNQUyBJZGVudGl0eSBWZXJpZmljYXRpb24gYmVmb3JlIHlvdSBsb2dpbiB0byB0aGUgcG9ydGFsISdcclxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5uYXZDdHJsLm5hdmlnYXRlUm9vdCgnL2xvZ2luJyksIDIwMDApO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfSwgZXJyb3I6IChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFVTUFNBY2NvdW50Q3JlYXRpb25Vc2VyRGV0YWlscygpO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGlmKGVycm9yLmVycm9yLm1lc3NhZ2UuaW5jbHVkZXMoJ0ZBSUwgLSBVU1BTIFByb29maW5nJykpe1xyXG4gICAgICAgICAgICAgICAgICAgIC8vICAgLypJZiBVU1BTIHByb29maW5nIGlzIGFscmVhZHkgdHJpZ2dlcmVkIGJ5IENTUiBhbmQgdXNlciB3YXMgbm90IGFibGUgdG8gdmVyaWZ5IGl0IDogc28gaW4gRkFJTCBzdGF0dXMgKi9cclxuICAgICAgICAgICAgICAgICAgICAvLyAgIHRoaXMudHJpZ2dlclVTUFMoKTtcclxuICAgICAgICAgICAgICAgICAgICAvLyB9IGVsc2UgaWYgKGVycm9yLmVycm9yLm1zZ1swXS5pbmNsdWRlcygnSU5JVElBVEVEIC0gVVNQUyBQcm9vZmluZycpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gICAvKklmIFVTUFMgcHJvb2ZpbmcgaXMgYWxyZWFkeSB0cmlnZ2VyZWQgYnkgQ1NSIGFuZCBpdCBpcyBpbiBJTklUSUFURUQgc3RhdHVzICovXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gICAgIHRoaXMudXRpbC5zaG93RXJyb3IoJ1lvdXIgVVNQUyBpZGVudGl0eSBwcm9vZmluZyBpcyBwZW5kaW5nLiBQbGVhc2UgY29tcGxldGUgaXQgYmVmb3JlIHlvdSBsb2dpbiB0byB0aGUgcG9ydGFsIScpO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMubmF2Q3RybC5uYXZpZ2F0ZVJvb3QoJy9sb2dpbicpLCAyMDAwKTtcclxuICAgICAgICAgICAgICAgICAgICAvLyB9IFxyXG4gICAgICAgICAgICAgICAgICAgIGlmKGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwibGFuZ3VhZ2VcIikgPT09IFwiZXNcIil7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLnV0aWwuc3VjY2VzcyhcclxuICAgICAgICAgICAgICAgICAgICAgICAgJ8KhQ29tcGxldGUgc3UgdmVyaWZpY2FjacOzbiBkZSBpZGVudGlkYWQgZGUgVVNQUyBhbnRlcyBkZSBpbmljaWFyIHNlc2nDs24gZW4gZWwgcG9ydGFsISdcclxuICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXRpbC5zdWNjZXNzKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAnUGxlYXNlIGNvbXBsZXRlIHlvdXIgVVNQUyBJZGVudGl0eSBWZXJpZmljYXRpb24gYmVmb3JlIHlvdSBsb2dpbiB0byB0aGUgcG9ydGFsISdcclxuICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5uYXZDdHJsLm5hdmlnYXRlUm9vdCgnL2xvZ2luJyksIDIwMDApO1xyXG4gICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmKHRoaXMubmV4dEJ1dHRvblBhZ2Upe1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLm5hdkN0cmwubmF2aWdhdGVSb290KGAvJHt0aGlzLm5leHRCdXR0b25QYWdlfT9pZGVudGlmaWVyPSR7cmVzWyd1dWlkJ119YCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLm9uQ29tcGxldGUuZW1pdChkYXRhKTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5xY3Muc2hhcmVkRGF0YS5jbGVhcigpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZighKGRhdGE/LnF1ZXN0aW9ubmFpcmVJZHM/LlswXSA9PT0gMzQ1KSl7XHJcbiAgICAgICAgICAgICAgdGhpcy51bmJsb2NrRm9ybVVpKCk7XHJcbiAgICAgICAgICAgICAgdGhpcy5zaG93TWZhID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBlcnIgPT4ge1xyXG4gICAgICAgICAgICBpZihlcnIubXNnWzBdLmluY2x1ZGVzKCdUaGVyZSBpcyBubyBhY3RpdmUgY2xhaW0gdG8gdXBkYXRlIHBheW1lbnQgSW5mb3JtYXRpb24nKSl7XHJcbiAgICAgICAgICAgICAgdGhpcy5wYXltZW50RGV0YWlsQ2hhbmdlSGFzRXJyb3IgPSB0cnVlO1xyXG4gICAgICAgICAgICB9IFxyXG4gICAgICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZygnRXJyb3Igb2NjdXJlZCcsIGVycik7XHJcbiAgICAgICAgICAgIGlmIChlcnIgJiYgQXJyYXkuaXNBcnJheShlcnIubXNnKSAmJiBlcnIubXNnLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICBjb25zdCBjb2RlID0gU3RyaW5nKGVyci5tc2dbMF0pO1xyXG4gICAgICAgICAgICAgIGlmIChjb2RlLmluY2x1ZGVzKCdbZXJyb3IuYWNjZXNzLnVzZXJuYW1lLmV4aXN0XScpKSB7XHJcbiAgICAgICAgICAgICAgICBpZihsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcImxhbmd1YWdlXCIpID09PSBcImVzXCIpe1xyXG4gICAgICAgICAgICAgICAgICBjb25zdCB1c2VyRXhpc3RzRXJyb3I9IHtcclxuICAgICAgICAgICAgICAgICAgICBcImVycm9ySWRcIjogXCJcIixcclxuICAgICAgICAgICAgICAgICAgICBcInRpbWVzdGFtcFwiOiBcIlwiLFxyXG4gICAgICAgICAgICAgICAgICAgIFwibXNnXCI6IFtcclxuICAgICAgICAgICAgICAgICAgICBcIltFc3RlIElEIGRlIHVzdWFyaW8geWEgZXN0w6EgZW4gdXNvLiBJbnRlbnRlIGNvbiBvdHJvIElEIGRlIHVzdWFyaW8uXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICAgICAgICBcImRldGFpbHNcIjogXCJ1cmk9L3F1ZXN0aW9ubmFpcmUtc2VydmljZS9xdWVzdGlvbm5haXJlL3NjcmVlbi1xdWVzdGlvbm5haXJlXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgXCJlcnJvclwiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgIFwiZXJyb3JDb2RlXCI6IFwiNDIyXCJcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB0aGlzLm9uRXJyb3IuZW1pdCh1c2VyRXhpc3RzRXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgfWVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHVzZXJFeGlzdHNFcnJvciA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgIFwiZXJyb3JJZFwiOiBcIlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgXCJ0aW1lc3RhbXBcIjogXCJcIixcclxuICAgICAgICAgICAgICAgICAgICAgIFwibXNnXCI6IFtcclxuICAgICAgICAgICAgICAgICAgICAgIFwiW1VzZXIgSUQgYWxyZWFkeSBleGlzdHMuIFRyeSBhbm90aGVyIFVzZXIgSUQuXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgXCJkZXRhaWxzXCI6IFwidXJpPS9xdWVzdGlvbm5haXJlLXNlcnZpY2UvcXVlc3Rpb25uYWlyZS9zY3JlZW4tcXVlc3Rpb25uYWlyZVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgXCJlcnJvclwiOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgXCJlcnJvckNvZGVcIjogXCI0MjJcIlxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMub25FcnJvci5lbWl0KHVzZXJFeGlzdHNFcnJvcik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMub25FcnJvci5lbWl0KGVycik7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYodGhpcy5tZmFSZXF1aXJlZCl7XHJcbiAgICAgICAgICAgICAgdGhpcy5tZmFFcnJvciA9IGVycjtcclxuICAgICAgICAgICAgfSBlbHNle1xyXG4gICAgICAgICAgICAgIHRoaXMub25FcnJvci5lbWl0KGVycik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy51bmJsb2NrRm9ybVVpKCk7XHJcbiAgICAgICAgICAgIHRoaXMuY2FwdGNoYS5yZXNldENhcHRjaGEoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gIH1cclxuXHJcbiAgc2V0TGV4aXNOZXhpc0FjY291bnRDcmVhdGlvblVzZXJEZXRhaWxzKCl7XHJcbiAgICBjb25zdCBmaXJzdE5hbWUgPSB0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkgJiYgdGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpLmZpcnN0TmFtZSA/ICh0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkuZmlyc3ROYW1lKS50b0xvd2VyQ2FzZSgpIDogXCJcIjtcclxuICAgIGNvbnN0IGxhc3ROYW1lID0gdGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpICYmIHRoaXMuZm9ybVJhd0RhdGEuZ2V0UmF3VmFsdWUoKS5sYXN0TmFtZSA/ICh0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkubGFzdE5hbWUpLnRvTG93ZXJDYXNlKCkgOiBcIlwiO1xyXG4gICAgbGV0IHN0cmVldDEgPSBcIlwiO1xyXG4gICAgbGV0IGNpdHkgPSBcIlwiO1xyXG4gICAgbGV0IHN0YXRlID0gXCJcIjtcclxuICAgIGxldCB6aXAgPSBcIlwiO1xyXG4gICAgaWYodGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpICYmIHRoaXMuZm9ybVJhd0RhdGEuZ2V0UmF3VmFsdWUoKS5kaWZmbWFpbGFkZHJlc3MgIT0gbnVsbCl7XHJcbiAgICAgIGlmKHRoaXMuZm9ybVJhd0RhdGEuZ2V0UmF3VmFsdWUoKS5kaWZmbWFpbGFkZHJlc3MgPT09IFwiWVwiKXtcclxuICAgICAgICBzdHJlZXQxID0gdGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpICYmIHRoaXMuZm9ybVJhd0RhdGEuZ2V0UmF3VmFsdWUoKS5tYWlsQWRkcmVzcy5zdHJlZXRBZGRyZXNzID8gKHRoaXMuZm9ybVJhd0RhdGEuZ2V0UmF3VmFsdWUoKS5tYWlsQWRkcmVzcy5zdHJlZXRBZGRyZXNzKS50b0xvd2VyQ2FzZSgpIDogXCJcIjtcclxuICAgICAgICBjaXR5ID0gdGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpICYmIHRoaXMuZm9ybVJhd0RhdGEuZ2V0UmF3VmFsdWUoKS5tYWlsQWRkcmVzcy5jaXR5ID8gKHRoaXMuZm9ybVJhd0RhdGEuZ2V0UmF3VmFsdWUoKS5tYWlsQWRkcmVzcy5jaXR5KS50b0xvd2VyQ2FzZSgpIDogXCJcIjtcclxuICAgICAgICBzdGF0ZSA9IHRoaXMuZm9ybVJhd0RhdGEuZ2V0UmF3VmFsdWUoKSAmJiB0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkubWFpbEFkZHJlc3Muc3RhdGUudmFsdWUgPyAodGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpLm1haWxBZGRyZXNzLnN0YXRlLnZhbHVlKS50b0xvd2VyQ2FzZSgpIDogXCJcIjtcclxuICAgICAgICB6aXAgPSB0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkgJiYgdGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpLm1haWxBZGRyZXNzLnppcCA/ICh0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkubWFpbEFkZHJlc3MuemlwKS50b0xvd2VyQ2FzZSgpIDogXCJcIjtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBzdHJlZXQxID0gdGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpICYmIHRoaXMuZm9ybVJhd0RhdGEuZ2V0UmF3VmFsdWUoKS5yZXNBZHJlc3Muc3RyZWV0QWRkcmVzcyA/ICh0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkucmVzQWRyZXNzLnN0cmVldEFkZHJlc3MpLnRvTG93ZXJDYXNlKCkgOiBcIlwiO1xyXG4gICAgICAgIGNpdHkgPSB0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkgJiYgdGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpLnJlc0FkcmVzcy5jaXR5ID8gKHRoaXMuZm9ybVJhd0RhdGEuZ2V0UmF3VmFsdWUoKS5yZXNBZHJlc3MuY2l0eSkudG9Mb3dlckNhc2UoKSA6IFwiXCI7XHJcbiAgICAgICAgc3RhdGUgPSB0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkgJiYgdGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpLnJlc0FkcmVzcy5zdGF0ZS52YWx1ZSA/ICh0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkucmVzQWRyZXNzLnN0YXRlLnZhbHVlKS50b0xvd2VyQ2FzZSgpIDogXCJcIjtcclxuICAgICAgICB6aXAgPSB0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkgJiYgdGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpLnJlc0FkcmVzcy56aXAgPyAodGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpLnJlc0FkcmVzcy56aXApLnRvTG93ZXJDYXNlKCkgOiBcIlwiO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBjb25zdCBkb2IgPSB0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkgJiYgdGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpLmRvYiA/ICh0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkuZG9iKS50b0xvd2VyQ2FzZSgpIDogXCJcIjtcclxuICAgIGNvbnN0IGVtYWlsID0gdGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpICYmIHRoaXMuZm9ybVJhd0RhdGEuZ2V0UmF3VmFsdWUoKS5lbWFpbCA/ICh0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkuZW1haWwpLnRvTG93ZXJDYXNlKCkgOiBcIlwiO1xyXG4gICAgY29uc3QgcGhvbmUgPSB0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkgJiYgdGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpLnBob25lID8gKHRoaXMuZm9ybVJhd0RhdGEuZ2V0UmF3VmFsdWUoKS5waG9uZSkudG9Mb3dlckNhc2UoKSA6IFwiXCI7XHJcbiAgICBjb25zdCBzc24gPSB0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkgJiYgdGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpLnNzbiA/ICh0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkuc3NuKS50b0xvd2VyQ2FzZSgpIDogXCJcIjtcclxuXHJcbiAgICBpZiAoIXdpbmRvd1snc2Vzc2lvbklkJ10pIHtcclxuICAgICAgY29uc29sZS5lcnJvcignU2Vzc2lvbiBJRCBub3QgZm91bmQgaW4gd2luZG93IG9iamVjdC4nKTtcclxuICAgICAgcmV0dXJuOyAvLyBoYW5kbGUgYWNjb3JkaW5nbHlcclxuICAgIH1cclxuXHJcbiAgICBpZih3aW5kb3dbJ3Nlc3Npb25JZCddICE9IG51bGwpe1xyXG4gICAgICB0aGlzLnVzZXJEZXRhaWxzID0ge1xyXG4gICAgICAgIHNlc3Npb25faWQ6IHdpbmRvd1snc2Vzc2lvbklkJ10gPyB3aW5kb3dbJ3Nlc3Npb25JZCddIDogbnVsbCxcclxuICAgICAgICBpbnB1dF9pcF9hZGRyZXNzOiBudWxsLCAvLyBzZW5kIG51bGxcclxuICAgICAgICBhY2NvdW50X2ZpcnN0X25hbWU6IGZpcnN0TmFtZSxcclxuICAgICAgICBhY2NvdW50X2xhc3RfbmFtZTogbGFzdE5hbWUsXHJcbiAgICAgICAgYWNjb3VudF9hZGRyZXNzX3N0cmVldDE6IHN0cmVldDEsXHJcbiAgICAgICAgYWNjb3VudF9hZGRyZXNzX2NpdHk6IGNpdHksXHJcbiAgICAgICAgYWNjb3VudF9hZGRyZXNzX3N0YXRlOiBzdGF0ZSxcclxuICAgICAgICBhY2NvdW50X2FkZHJlc3NfemlwOiB6aXAsXHJcbiAgICAgICAgYWNjb3VudF9kYXRlX29mX2JpcnRoOiBkb2IsIC8vXCJZWVlZTU1ERFwiXHJcbiAgICAgICAgYWNjb3VudF9lbWFpbDogZW1haWwsXHJcbiAgICAgICAgYWNjb3VudF90ZWxlcGhvbmU6IHBob25lLFxyXG4gICAgICAgIG5hdGlvbmFsX2lkX251bWJlcjogc3NuXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5pc0xleGlzTmV4aXNQb3B1cEVuYWJsZWQgPSB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0VVNQU0FjY291bnRDcmVhdGlvblVzZXJEZXRhaWxzKCl7XHJcbiAgICBjb25zdCBmaXJzdE5hbWUgPSB0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkgJiYgdGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpLmZpcnN0TmFtZSA/ICh0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkuZmlyc3ROYW1lKS50b0xvd2VyQ2FzZSgpIDogXCJcIjtcclxuICAgIGNvbnN0IGxhc3ROYW1lID0gdGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpICYmIHRoaXMuZm9ybVJhd0RhdGEuZ2V0UmF3VmFsdWUoKS5sYXN0TmFtZSA/ICh0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkubGFzdE5hbWUpLnRvTG93ZXJDYXNlKCkgOiBcIlwiO1xyXG4gICAgbGV0IHN0cmVldDEgPSBcIlwiO1xyXG4gICAgbGV0IGNpdHkgPSBcIlwiO1xyXG4gICAgbGV0IHN0YXRlID0gXCJcIjtcclxuICAgIGxldCB6aXAgPSBcIlwiO1xyXG4gICAgaWYodGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpICYmIHRoaXMuZm9ybVJhd0RhdGEuZ2V0UmF3VmFsdWUoKS5kaWZmbWFpbGFkZHJlc3MgIT0gbnVsbCl7XHJcbiAgICAgIGlmKHRoaXMuZm9ybVJhd0RhdGEuZ2V0UmF3VmFsdWUoKS5kaWZmbWFpbGFkZHJlc3MgPT09IFwiWVwiKXtcclxuICAgICAgICBzdHJlZXQxID0gdGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpICYmIHRoaXMuZm9ybVJhd0RhdGEuZ2V0UmF3VmFsdWUoKS5tYWlsQWRkcmVzcy5zdHJlZXRBZGRyZXNzID8gKHRoaXMuZm9ybVJhd0RhdGEuZ2V0UmF3VmFsdWUoKS5tYWlsQWRkcmVzcy5zdHJlZXRBZGRyZXNzKS50b0xvd2VyQ2FzZSgpIDogXCJcIjtcclxuICAgICAgICBjaXR5ID0gdGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpICYmIHRoaXMuZm9ybVJhd0RhdGEuZ2V0UmF3VmFsdWUoKS5tYWlsQWRkcmVzcy5jaXR5ID8gKHRoaXMuZm9ybVJhd0RhdGEuZ2V0UmF3VmFsdWUoKS5tYWlsQWRkcmVzcy5jaXR5KS50b0xvd2VyQ2FzZSgpIDogXCJcIjtcclxuICAgICAgICBzdGF0ZSA9IHRoaXMuZm9ybVJhd0RhdGEuZ2V0UmF3VmFsdWUoKSAmJiB0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkubWFpbEFkZHJlc3Muc3RhdGUudmFsdWUgPyAodGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpLm1haWxBZGRyZXNzLnN0YXRlLnZhbHVlKS50b0xvd2VyQ2FzZSgpIDogXCJcIjtcclxuICAgICAgICB6aXAgPSB0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkgJiYgdGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpLm1haWxBZGRyZXNzLnppcCA/ICh0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkubWFpbEFkZHJlc3MuemlwKS50b0xvd2VyQ2FzZSgpIDogXCJcIjtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBzdHJlZXQxID0gdGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpICYmIHRoaXMuZm9ybVJhd0RhdGEuZ2V0UmF3VmFsdWUoKS5yZXNBZHJlc3Muc3RyZWV0QWRkcmVzcyA/ICh0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkucmVzQWRyZXNzLnN0cmVldEFkZHJlc3MpLnRvTG93ZXJDYXNlKCkgOiBcIlwiO1xyXG4gICAgICAgIGNpdHkgPSB0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkgJiYgdGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpLnJlc0FkcmVzcy5jaXR5ID8gKHRoaXMuZm9ybVJhd0RhdGEuZ2V0UmF3VmFsdWUoKS5yZXNBZHJlc3MuY2l0eSkudG9Mb3dlckNhc2UoKSA6IFwiXCI7XHJcbiAgICAgICAgc3RhdGUgPSB0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkgJiYgdGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpLnJlc0FkcmVzcy5zdGF0ZS52YWx1ZSA/ICh0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkucmVzQWRyZXNzLnN0YXRlLnZhbHVlKS50b0xvd2VyQ2FzZSgpIDogXCJcIjtcclxuICAgICAgICB6aXAgPSB0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkgJiYgdGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpLnJlc0FkcmVzcy56aXAgPyAodGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpLnJlc0FkcmVzcy56aXApLnRvTG93ZXJDYXNlKCkgOiBcIlwiO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBjb25zdCBkb2IgPSB0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkgJiYgdGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpLmRvYiA/ICh0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkuZG9iKS50b0xvd2VyQ2FzZSgpIDogXCJcIjtcclxuICAgIGNvbnN0IGVtYWlsID0gdGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpICYmIHRoaXMuZm9ybVJhd0RhdGEuZ2V0UmF3VmFsdWUoKS5lbWFpbCA/ICh0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkuZW1haWwpLnRvTG93ZXJDYXNlKCkgOiBcIlwiO1xyXG4gICAgY29uc3QgcGhvbmUgPSB0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkgJiYgdGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpLnBob25lID8gKHRoaXMuZm9ybVJhd0RhdGEuZ2V0UmF3VmFsdWUoKS5waG9uZSkudG9Mb3dlckNhc2UoKSA6IFwiXCI7XHJcbiAgICBjb25zdCBzc24gPSB0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkgJiYgdGhpcy5mb3JtUmF3RGF0YS5nZXRSYXdWYWx1ZSgpLnNzbiA/ICh0aGlzLmZvcm1SYXdEYXRhLmdldFJhd1ZhbHVlKCkuc3NuKS50b0xvd2VyQ2FzZSgpIDogXCJcIjtcclxuXHJcbiAgICBpZiAoIXdpbmRvd1snc2Vzc2lvbklkJ10pIHtcclxuICAgICAgY29uc29sZS5lcnJvcignU2Vzc2lvbiBJRCBub3QgZm91bmQgaW4gd2luZG93IG9iamVjdC4nKTtcclxuICAgICAgcmV0dXJuOyAvLyBoYW5kbGUgYWNjb3JkaW5nbHlcclxuICAgIH1cclxuXHJcbiAgICBpZih3aW5kb3dbJ3Nlc3Npb25JZCddICE9IG51bGwpe1xyXG4gICAgICB0aGlzLnVzZXJEZXRhaWxzID0ge1xyXG4gICAgICAgIHNlc3Npb25faWQ6IHdpbmRvd1snc2Vzc2lvbklkJ10gPyB3aW5kb3dbJ3Nlc3Npb25JZCddIDogbnVsbCxcclxuICAgICAgICBpbnB1dF9pcF9hZGRyZXNzOiBudWxsLCAvLyBzZW5kIG51bGxcclxuICAgICAgICBhY2NvdW50X2ZpcnN0X25hbWU6IGZpcnN0TmFtZSxcclxuICAgICAgICBhY2NvdW50X2xhc3RfbmFtZTogbGFzdE5hbWUsXHJcbiAgICAgICAgYWNjb3VudF9hZGRyZXNzX3N0cmVldDE6IHN0cmVldDEsXHJcbiAgICAgICAgYWNjb3VudF9hZGRyZXNzX2NpdHk6IGNpdHksXHJcbiAgICAgICAgYWNjb3VudF9hZGRyZXNzX3N0YXRlOiBzdGF0ZSxcclxuICAgICAgICBhY2NvdW50X2FkZHJlc3NfemlwOiB6aXAsXHJcbiAgICAgICAgYWNjb3VudF9kYXRlX29mX2JpcnRoOiBkb2IsIC8vXCJZWVlZTU1ERFwiXHJcbiAgICAgICAgYWNjb3VudF9lbWFpbDogZW1haWwsXHJcbiAgICAgICAgYWNjb3VudF90ZWxlcGhvbmU6IHBob25lLFxyXG4gICAgICAgIG5hdGlvbmFsX2lkX251bWJlcjogc3NuXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uTG5TdWNjZXNzKCl7XHJcbiAgICB0aGlzLmlzTGV4aXNOZXhpc1BvcHVwRW5hYmxlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy51dGlsLmhpZGVMb2FkZXIoKTtcclxuICAgIGlmKHRoaXMubmV4dEJ1dHRvblBhZ2UpIHtcclxuICAgICAgLy90aGlzLnV0aWwuc3VjY2VzcyhcclxuICAgICAgLy8gICdZb3VyIGFjY291bnQgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IGNyZWF0ZWQuIFBsZWFzZSBsb2dpbiEnXHJcbiAgICAgIC8vKTtcclxuICAgICAgLy9zZXRUaW1lb3V0KCgpID0+IHRoaXMubmF2Q3RybC5uYXZpZ2F0ZVJvb3QoJy9sb2dpbicpLCAyMDAwKTtcclxuICAgICAgdGhpcy5uYXZDdHJsLm5hdmlnYXRlUm9vdChgLyR7dGhpcy5uZXh0QnV0dG9uUGFnZX0/aWRlbnRpZmllcj0ke3RoaXMucmVzcG9uc2VVdWlkfWApO1xyXG4gICAgfSBcclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLm9uQ29tcGxldGUuZW1pdCh0aGlzLmlucHV0RGF0YSk7XHJcbiAgICAgIHRoaXMucWNzLnNoYXJlZERhdGEuY2xlYXIoKTtcclxuICAgIH1cclxuICAgIHRoaXMudW5ibG9ja0Zvcm1VaSgpO1xyXG4gICAgdGhpcy5zaG93TWZhID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBvbkxORXJyb3IoKXtcclxuICAgIHRoaXMudW5ibG9ja0Zvcm1VaSgpO1xyXG4gICAgdGhpcy5zaG93TWZhID0gZmFsc2U7XHJcbiAgICBjb25zb2xlLmxvZyhcIlBsZWFzZSBjb250YWN0IEtET0whXCIpO1xyXG4gIH1cclxuXHJcbiAgdHJpZ2dlclVTUFMoKXtcclxuICAgIHRoaXMudW5ibG9ja0Zvcm1VaSgpO1xyXG4gICAgdGhpcy5zaG93TWZhID0gZmFsc2U7XHJcbiAgICB0aGlzLmlzTGV4aXNOZXhpc1BvcHVwRW5hYmxlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy51dGlsLmhpZGVMb2FkZXIoKTtcclxuICAgIGNvbnNvbGUubG9nKFwidXNwcyBpcyB0cmlnZ2VyZWRcIilcclxuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCd1c2VyRGV0YWlscycsIEpTT04uc3RyaW5naWZ5KHRoaXMudXNlckRldGFpbHMpKTtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvdXNwcy1yZWRpcmVjdCcsIFwiXCJdKSwgMTAwMCk7XHJcbiAgfVxyXG5cclxuICBzZXRQcmV2QW5kTmV4dEJ1dHRvbigpIHtcclxuICAgIGxldCBjb21wYXJlVmFsdWU6IG51bWJlciA9IDA7XHJcbiAgICBpZiAodGhpcy5hY3RpdmVJbmRleCA+IDApIHtcclxuICAgICAgY29tcGFyZVZhbHVlID0gMTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5hY3RpdmVJbmRleCA+IDApIHtcclxuICAgICAgdGhpcy5pc0ZpcnN0ID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuYWN0aXZlSW5kZXggPT09IDEgJiYgdGhpcy5pc1ByZXZpb3VzUGFnZUFQbGFjZWhvbGRlcih0aGlzLnF1ZXN0aW9uc1swXS5wYWdlc1swXSkpIHtcclxuICAgICAgdGhpcy5pc0ZpcnN0ID0gdHJ1ZTtcclxuICAgICAgdGhpcy5pc0xhc3QgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5hY3RpdmVJbmRleCA9PT0gMCkge1xyXG4gICAgICB0aGlzLmlzRmlyc3QgPSB0cnVlO1xyXG4gICAgICB0aGlzLmlzTGFzdCA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmFjdGl2ZUluZGV4ID09PSB0aGlzLnF1ZXN0aW9uc1swXS5wYWdlcy5sZW5ndGggLSAxKSB7XHJcbiAgICAgIHRoaXMuaXNMYXN0ID0gdHJ1ZTtcclxuICAgICAgdGhpcy5pc0ZpcnN0ID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuYWN0aXZlSW5kZXggPCB0aGlzLnF1ZXN0aW9uc1swXS5wYWdlcy5sZW5ndGggLSAxKSB7XHJcbiAgICAgIHRoaXMuaXNMYXN0ID0gZmFsc2U7XHJcbiAgICB9ICAgXHJcbiAgICB0aGlzLnNldHVwTG9hZGVyTW9kZWwoKTtcclxuICB9XHJcblxyXG4gIGlzUHJldmlvdXNQYWdlQVBsYWNlaG9sZGVyKHBhZ2UgOiBhbnkpe1xyXG4gICAgdGhpcy5sb2dnZXIuZGVidWcoXCJpc1BsYWNlSG9sZGVyID0gXCIgKyBwYWdlW1wiaXNQbGFjZUhvbGRlclwiXSk7XHJcbiAgICBsZXQgcGxhY2VIb2xkZXI6IGJvb2xlYW4gPSAgcGFnZVtcImlzUGxhY2VIb2xkZXJcIl07XHJcbiAgICByZXR1cm4gcGxhY2VIb2xkZXIudmFsdWVPZigpO1xyXG4gIH1cclxuXHJcbiAgc3RlcENoYW5nZWQoZXZlbnQ6IFN0ZXBwZXJTZWxlY3Rpb25FdmVudCkge1xyXG4gICAgaWYgKGV2ZW50LnByZXZpb3VzbHlTZWxlY3RlZEluZGV4ID4gZXZlbnQuc2VsZWN0ZWRJbmRleCkge1xyXG4gICAgICBldmVudC5wcmV2aW91c2x5U2VsZWN0ZWRTdGVwLmludGVyYWN0ZWQgPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNhbmNlbEFjdGlvbigpIHtcclxuICAgIHRoaXMubmF2Q3RybC5uYXZpZ2F0ZVJvb3QodGhpcy5iYWNrQnV0dG9uUGFnZSk7XHJcbiAgfVxyXG5cclxuICBjYW5jZWxQb3BVcCgpIHtcclxuICAgIGxldCBmb3JtR3JvdXAgPSB0aGlzLmZvcm1Hcm91cEFycmF5W3RoaXMuYWN0aXZlSW5kZXhdO1xyXG4gICAgdGhpcy5tb2RlbENhbmNlbC5lbWl0KGZhbHNlKTtcclxuICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdjYW5jZWxQb3BVcCBjYWxsZWQnLCBmb3JtR3JvdXApXHJcbiAgfVxyXG5cclxuICB1cGxvYWRGaWxlKHF1ZXVlOiBGaWxlW10pIHtcclxuICAgIHRoaXMubG9nZ2VyLmRlYnVnKCdxdWV1ZTExMSAnLCBxdWV1ZSk7XHJcbiAgICAvL3F1ZXVlWzBdLnNpemVcclxuICB9XHJcblxyXG4gIGJsb2NrRm9ybVVpKCl7XHJcbiAgICB0aGlzLmJsb2NrVWkgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgdW5ibG9ja0Zvcm1VaSgpe1xyXG4gICAgdGhpcy5ibG9ja1VpID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBzaG91bGRGaXRDb250ZW50KGVsZW1lbnRzIDogRWxlbWVudHNNb2RlbFtdKXtcclxuICAgIGxldCBzaG91bGRGaXRDb250ZW50IDogYm9vbGVhbiA9IHRydWU7IFxyXG4gICAgZWxlbWVudHMuZm9yRWFjaChlbGVtZW50ID0+IHtcclxuICAgICAgaWYoZWxlbWVudC5jdXN0b21UYWcgPT0gJ2NvbXBvbmVudCcpe1xyXG4gICAgICAgIHNob3VsZEZpdENvbnRlbnQgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIHNob3VsZEZpdENvbnRlbnQ7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVEeW5hbWljUGFyYW0oZXZlbnQpe1xyXG4gICAgaWYoQXJyYXkuaXNBcnJheShldmVudCkpe1xyXG4gICAgICB0aGlzLmR5bmFtaWNQYXJhbSA9IFsuLi5ldmVudF07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmR5bmFtaWNQYXJhbSA9IE9iamVjdC5hc3NpZ24oe30gLCBldmVudCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvblN1Ym1pdCgpe1xyXG4gICAgdGhpcy51dGlsLmZvY3VzT25TdWJtaXQodGhpcy5lbCk7XHJcbiAgfVxyXG59XHJcbiIsIjxwLWJsb2NrVUkgW2Jsb2NrZWRdPVwiYmxvY2tVaVwiPlxyXG4gIDxpb24tc3Bpbm5lciBuYW1lPVwiY3Jlc2NlbnRcIj48L2lvbi1zcGlubmVyPlxyXG48L3AtYmxvY2tVST5cclxuPGRpdiAqbmdJZj1cInF1ZXN0aW9ucyAmJiBxdWVzdGlvbnNbMF0gJiYgIXNob3dNZmFcIiAjZm9ybU1haW5EaXY+XHJcbiAgPGZvcm0gZm9jdXNJbnZhbGlkSW5wdXQgW2Zvcm1Hcm91cF09XCJmb3JtR3JvdXBBcnJheVthY3RpdmVJbmRleF1cIiBbbmdDbGFzc109XCJtdWx0aU1vZGUgPyAncWUtZm9ybS1tdWx0aXBsZScgOiAncWUtZm9ybSdcIiAobmdTdWJtaXQpPVwib25TdWJtaXQoKVwiICNxdWVzdGlvbm5haXJlRm9ybT1cIm5nRm9ybVwiPlxyXG4gICAgPGlvbi1ncmlkPlxyXG4gICAgICA8aW9uLXJvdyAqbmdJZj1cInF1ZXN0aW9uc1swXS5wYWdlc1thY3RpdmVJbmRleF0ubmFtZVwiPlxyXG4gICAgICAgIDxpb24tY29sIHNpemU9XCIxMlwiIFtzaXplWHNdPVwic2l6ZVhzXCIgW3NpemVTbV09XCJzaXplU21cIiBbc2l6ZU1kXT1cInNpemVNZFwiIFtzaXplTGddPVwic2l6ZUxnXCIgW3NpemVYbF09XCJzaXplWGxcIlxyXG4gICAgICAgICAgW29mZnNldFhzXT1cIm9mZnNldFhzXCIgW29mZnNldFNtXT1cIm9mZnNldFNtXCIgW29mZnNldE1kXT1cIm9mZnNldE1kXCIgW29mZnNldExnXT1cIm9mZnNldExnXCIgW29mZnNldFhsXT1cIm9mZnNldFhsXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicC1mb3JtZ3JpZFwiPlxyXG4gICAgICAgICAgICA8ZGl2IHRhYmluZGV4PVwiMFwiIFtpbm5lckh0bWxdPVwiKHF1ZXN0aW9uTnVtYmVyID8gcXVlc3Rpb25OdW1iZXIgKyAnICcgOiAnJykgKyBxdWVzdGlvbnNbMF0ucGFnZXNbYWN0aXZlSW5kZXhdLm5hbWUgfCBkeW5hbWljVHJhbnNsYXRlOmR5bmFtaWNQYXJhbSB8IHRydXN0SHRtbFwiIFtuZ0NsYXNzXT1cIm11bHRpTW9kZSA/ICdmYi1oZWFkaW5nLWZvbGxvd3VwJyA6ICdmYi1oZWFkaW5nJ1wiIHJvbGU9XCJoZWFkaW5nXCIgYXJpYS1sZXZlbD1cIjFcIj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2lvbi1jb2w+XHJcbiAgICAgIDwvaW9uLXJvdz5cclxuICAgICAgPGlvbi1yb3c+XHJcbiAgICAgICAgPGlvbi1jb2wgc3R5bGU9XCJwYWRkaW5nLWxlZnQ6IDBweDtcIiBjbGFzcz1cImlvbi1wYWRkaW5nLWVuZFwiIHNpemU9XCIxMlwiIFtzaXplWHNdPVwic2l6ZVhzXCIgW3NpemVTbV09XCJzaXplU21cIlxyXG4gICAgICAgICAgW3NpemVNZF09XCJzaXplTWRcIiBbc2l6ZUxnXT1cInNpemVMZ1wiIFtzaXplWGxdPVwic2l6ZVhsXCIgW29mZnNldFhzXT1cIm9mZnNldFhzXCIgW29mZnNldFNtXT1cIm9mZnNldFNtXCJcclxuICAgICAgICAgIFtvZmZzZXRNZF09XCJvZmZzZXRNZFwiIFtvZmZzZXRMZ109XCJvZmZzZXRMZ1wiIFtvZmZzZXRYbF09XCJvZmZzZXRYbFwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInAtZm9ybWdyaWRcIiBzdHlsZT1cInBhZGRpbmctbGVmdDogOHB4O1wiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBlbGVtZW50IG9mIHF1ZXN0aW9uc1swXS5wYWdlc1thY3RpdmVJbmRleF0uZWxlbWVudHM7IGxldCBpID0gaW5kZXhcIj5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZWxlbWVudC50eXBlPT09J3BhbmVsJ1wiPlxyXG5cclxuICAgICAgICAgICAgICAgIDxpb24tcm93ICpuZ0lmPVwidmlzaWJsZUlmKGVsZW1lbnQudmlzaWJsZUlmLCcnLGZvcm1Hcm91cEFycmF5W2FjdGl2ZUluZGV4XSxlbGVtZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgICA8IS0tIDxpb24tY29sIHN0eWxlPVwicGFkZGluZy1sZWZ0OiAwcHg7XCI+IC0tPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwicGFkZGluZy1sZWZ0OiAwcHg7XCIgY2xhc3M9XCJoZWFkaW5nXCIgcm9sZT1cImhlYWRpbmdcIiBhcmlhLWxldmVsPVwiMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7ZWxlbWVudC50aXRsZX19XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8IS0tIDwvaW9uLWNvbD4gLS0+XHJcbiAgICAgICAgICAgICAgICA8L2lvbi1yb3c+XHJcbiAgICAgICAgICAgICAgICA8aW9uLXJvdz5cclxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgcGFuZWxFbGVtZW50IG9mIGVsZW1lbnQuZWxlbWVudHNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2hhcmUtcm93XCIgKm5nSWY9XCJwYW5lbEVsZW1lbnQuY29sRWxlbWVudD09PSdDT0wxJyAmJiB2aXNpYmxlSWYocGFuZWxFbGVtZW50LnZpc2libGVJZixwYW5lbEVsZW1lbnQubmFtZSxmb3JtR3JvdXBBcnJheVthY3RpdmVJbmRleF0scGFuZWxFbGVtZW50KVwiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgIDxhcHAtcXVlc3Rpb24gW3BvdGVudGlhbElzc3VlSWRdPVwicG90ZW50aWFsSXNzdWVJZFwiIFtxdWVzdGlvbl09XCJwYW5lbEVsZW1lbnRcIiBbZm9ybV09XCJmb3JtR3JvdXBBcnJheVthY3RpdmVJbmRleF1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbZm9yU2NyZWVuUXVlc3Rpb25uYWlyZV09XCJmb3JTY3JlZW5RdWVzdGlvbm5haXJlXCIgKG9uRHluYW1pY1BhcmFtVXBkYXRlKT1cInVwZGF0ZUR5bmFtaWNQYXJhbSgkZXZlbnQpXCIgW2R5bmFtaWNQYXJhbV09XCJkeW5hbWljUGFyYW1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvYXBwLXF1ZXN0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSA8aW9uLWNvbCBzaXplPVwiMVwiICpuZ0lmPVwicGFuZWxFbGVtZW50LmRlc2NyaXB0aW9uXCIgc3R5bGU9XCJwYWRkaW5nLXRvcDogMjhweFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFwcC1vdmVybGF5LWluZm8gW292ZXJsYXlUZXh0XT1cInBhbmVsRWxlbWVudC5kZXNjcmlwdGlvblwiPjwvYXBwLW92ZXJsYXktaW5mbz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2lvbi1jb2w+IC0tPlxyXG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvaW9uLXJvdz5cclxuICAgICAgICAgICAgICAgIDwhLS0gPC9pb24tY29sPlxyXG4gICAgICAgICAgICAgICAgICA8L2lvbi1yb3c+IC0tPlxyXG5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAqbmdJZj1cImVsZW1lbnQudHlwZSE9J3BhbmVsJyAmJiBlbGVtZW50LnR5cGUhPSdoaWRkZW4nICYmIHZpc2libGVJZihlbGVtZW50LnZpc2libGVJZixlbGVtZW50Lm5hbWUsZm9ybUdyb3VwQXJyYXlbYWN0aXZlSW5kZXhdLGVsZW1lbnQpXCI+XHJcbiAgICAgICAgICAgICAgICA8aW9uLXJvdz5cclxuICAgICAgICAgICAgICAgICAgPGlvbi1jb2wgW3NpemVMZ109XCJlbGVtZW50LnNpemVMRz4wP2VsZW1lbnQuc2l6ZUxHOicnXCIgW3NpemVTbV09XCJlbGVtZW50LnNpemVTTVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3NpemVYc109XCJlbGVtZW50LnNpemVYU1wiIFtzaXplWGxdPVwiZWxlbWVudC5zaXplWEw+MCA/ZWxlbWVudC5zaXplWEw6JydcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtzaXplTWRdPVwiZWxlbWVudC5zaXplTUQ+MCA/ZWxlbWVudC5zaXplTUQ6JydcIiBzdHlsZT1cInBhZGRpbmctbGVmdDogMHB4O1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImZpZWxkXCI+IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxhcHAtcXVlc3Rpb24gW3BvdGVudGlhbElzc3VlSWRdPVwicG90ZW50aWFsSXNzdWVJZFwiIFtxdWVzdGlvbl09XCJlbGVtZW50XCIgW2Zvcm1dPVwiZm9ybUdyb3VwQXJyYXlbYWN0aXZlSW5kZXhdXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtmb3JTY3JlZW5RdWVzdGlvbm5haXJlXT1cImZvclNjcmVlblF1ZXN0aW9ubmFpcmVcIiBbZHluYW1pY1BhcmFtXT1cImR5bmFtaWNQYXJhbVwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgKG9uRHluYW1pY1BhcmFtVXBkYXRlKT1cInVwZGF0ZUR5bmFtaWNQYXJhbSgkZXZlbnQpXCIgPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYXBwLXF1ZXN0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gPC9kaXY+IC0tPlxyXG4gICAgICAgICAgICAgICAgICA8L2lvbi1jb2w+XHJcbiAgICAgICAgICAgICAgICAgIDwhLS0gPGlvbi1jb2wgc2l6ZT1cIjFcIiAqbmdJZj1cImVsZW1lbnQuZGVzY3JpcHRpb25cIiBzdHlsZT1cInBhZGRpbmctdG9wOiAzNXB4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8YXBwLW92ZXJsYXktaW5mbyBbb3ZlcmxheVRleHRdPVwiZWxlbWVudC5kZXNjcmlwdGlvblwiPjwvYXBwLW92ZXJsYXktaW5mbz5cclxuICAgICAgICAgICAgICAgICAgICA8L2lvbi1jb2w+IC0tPlxyXG4gICAgICAgICAgICAgICAgPC9pb24tcm93PlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvaW9uLWNvbD5cclxuICAgICAgICA8aW9uLWNvbCBjbGFzcz1cImlvbi1wYWRkaW5nLXN0YXJ0XCIgc2l6ZT1cIjEyXCIgc2l6ZVNtPVwiMTJcIiBzaXplWHM9XCIxMlwiIFtzaXplTWRdPVwicGFnZVR5cGU9PT0nUE9QVVAnPzY6MTJcIlxyXG4gICAgICAgICAgW3NpemVMZ109XCJwYWdlVHlwZT09PSdQT1BVUCc/NjoxMFwiIFtzaXplWGxdPVwicGFnZVR5cGU9PT0nUE9QVVAnPzU6MTBcIiBzdHlsZT1cInBhZGRpbmctbGVmdDogMHB4O1wiXHJcbiAgICAgICAgICBbb2Zmc2V0WGxdPVwicGFnZVR5cGU9PT0nUE9QVVAnPzA6MVwiIFtvZmZzZXRMZ109XCJwYWdlVHlwZT09PSdQT1BVUCc/MDoxXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicC1mb3JtZ3JpZFwiIHN0eWxlPVwicGFkZGluZy1sZWZ0OiA4cHg7XCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGVsZW1lbnQgb2YgcXVlc3Rpb25zWzBdLnBhZ2VzW2FjdGl2ZUluZGV4XS5lbGVtZW50czsgbGV0IGkgPSBpbmRleFwiPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIgdmlzaWJsZUlmKGVsZW1lbnQudmlzaWJsZUlmLCcnLGZvcm1Hcm91cEFycmF5W2FjdGl2ZUluZGV4XSxlbGVtZW50KVwiPlxyXG4gICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgcGFuZWxFbGVtZW50IG9mIGVsZW1lbnQuZWxlbWVudHNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicGFuZWxFbGVtZW50LmNvbEVsZW1lbnQ9PT0nQ09MMicgJiZcclxuICAgICAgICAgICAgICAgICAgICB2aXNpYmxlSWYocGFuZWxFbGVtZW50LnZpc2libGVJZixwYW5lbEVsZW1lbnQubmFtZSxmb3JtR3JvdXBBcnJheVthY3RpdmVJbmRleF0scGFuZWxFbGVtZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHBhbmVsLWFwcCBbcXVlc3Rpb25dPVwicGFuZWxFbGVtZW50XCIgW2Zvcm1dPVwiZm9ybUdyb3VwQXJyYXlbYWN0aXZlSW5kZXhdXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9yU2NyZWVuUXVlc3Rpb25uYWlyZV09XCJmb3JTY3JlZW5RdWVzdGlvbm5haXJlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvcGFuZWwtYXBwPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvaW9uLWNvbD5cclxuICAgICAgPC9pb24tcm93PlxyXG4gICAgPC9pb24tZ3JpZD5cclxuXHJcbiAgICA8aW9uLWZvb3RlciAqbmdJZj1cIiFoaWRlRm9vdGVyXCJcclxuICAgIFtuZ0NsYXNzXT1cIidmb290ZXItZml4ZWQnXCI+XHJcbiAgICAgIDxkaXYgc3R5bGU9XCJ0ZXh0LWFsaWduOiByaWdodDsgYmFja2dyb3VuZDogd2hpdGU7IG1hcmdpbi1sZWZ0OiAtNXB4O1wiXHJcbiAgICAgICAgKm5nSWY9XCJoaWRlU3RlcCAmJiBwYWdlVHlwZSE9J1BPUFVQJyAmJiBwYWdlVHlwZSE9J1NDUkVFTidcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZCBwLW5vZ3V0dGVyXCIgc3R5bGU9XCJoZWlnaHQ6IDYwcHg7XCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTYgaW9uLXRleHQtbGVmdFwiIHN0eWxlPVwicGFkZGluZzogOHB4O1wiPlxyXG4gICAgICAgICAgICA8aW9uLWJ1dHRvbiBzaGFwZT1cInJvdW5kXCIgZmlsbD1cIm91dGxpbmVcIiBjbGFzcz1cImJ1dHRvblwiIChjbGljayk9XCJjYW5jZWxBY3Rpb24oKVwiIHR5cGU9XCJzdWJtaXRcIj5cclxuICAgICAgICAgICAgICB7e1wiY29tbW9uLmNhbmNlbFwiIHwgdHJhbnNsYXRlfX1cclxuICAgICAgICAgICAgPC9pb24tYnV0dG9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTYgaW9uLXRleHQtcmlnaHRcIiBzdHlsZT1cInBhZGRpbmc6IDhweDtcIj5cclxuICAgICAgICAgICAgPGlvbi1idXR0b24gc2hhcGU9XCJyb3VuZFwiIChjbGljayk9XCJjb21wbGV0ZSgpXCIgZmlsbD1cInNvbGlkXCIgdHlwZT1cInN1Ym1pdFwiPlxyXG4gICAgICAgICAgICAgIHt7XCJjb21tb24ubmV4dFwiIHwgdHJhbnNsYXRlfX1cclxuICAgICAgICAgICAgPC9pb24tYnV0dG9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IHN0eWxlPVwidGV4dC1hbGlnbjogcmlnaHQ7IGJhY2tncm91bmQ6IHdoaXRlOyBtYXJnaW4tbGVmdDogLTVweDtcIlxyXG4gICAgICAgICpuZ0lmPVwiaGlkZVN0ZXAgJiYgcGFnZVR5cGU9PSdTQ1JFRU4nICYmIHF1ZXN0aW9uc1swXS5pc0ZpcnN0UGFnZVN1Ym1pdFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJncmlkIHAtbm9ndXR0ZXJcIiBzdHlsZT1cImhlaWdodDogNjBweDtcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNiBpb24tdGV4dC1sZWZ0XCIgc3R5bGU9XCJwYWRkaW5nOiA4cHg7XCI+XHJcbiAgICAgICAgICAgIDxpb24tYnV0dG9uIHNoYXBlPVwicm91bmRcIiBmaWxsPVwib3V0bGluZVwiIGNsYXNzPVwiYnV0dG9uXCIgKGNsaWNrKT1cImNhbmNlbEFjdGlvbigpXCIgdHlwZT1cInN1Ym1pdFwiPlxyXG4gICAgICAgICAgICAgIHt7XCJjb21tb24uY2FuY2VsXCIgfCB0cmFuc2xhdGV9fVxyXG4gICAgICAgICAgICA8L2lvbi1idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNiBpb24tdGV4dC1yaWdodFwiIHN0eWxlPVwicGFkZGluZzogOHB4O1wiPlxyXG4gICAgICAgICAgICA8aW9uLWJ1dHRvbiBzaGFwZT1cInJvdW5kXCIgKGNsaWNrKT1cImNvbXBsZXRlKClcIiBmaWxsPVwic29saWRcIiB0eXBlPVwic3VibWl0XCI+XHJcbiAgICAgICAgICAgICAge3tcImNvbW1vbi5kb25lXCIgfCB0cmFuc2xhdGV9fVxyXG4gICAgICAgICAgICA8L2lvbi1idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxpb24tZ3JpZCAqbmdJZj1cImhpZGVTdGVwICYmIHBhZ2VUeXBlPT09J1BPUFVQJ1wiPlxyXG4gICAgICAgIDxpb24tcm93PlxyXG4gICAgICAgICAgPGlvbi1jb2wgY2xhc3M9XCJpb24tdGV4dC1sZWZ0IGlvbi1wYWRkaW5nLXN0YXJ0XCI+XHJcbiAgICAgICAgICAgIDxpb24tYnV0dG9uIHNoYXBlPVwicm91bmRcIiBmaWxsPVwib3V0bGluZVwiIGNsYXNzPVwiYnV0dG9uXCIgKGNsaWNrKT1cImNhbmNlbFBvcFVwKClcIiB0eXBlPVwic3VibWl0XCI+XHJcbiAgICAgICAgICAgICAge3tcImNvbW1vbi5jYW5jZWxcIiB8IHRyYW5zbGF0ZX19XHJcbiAgICAgICAgICAgIDwvaW9uLWJ1dHRvbj5cclxuICAgICAgICAgIDwvaW9uLWNvbD5cclxuICAgICAgICAgIDxpb24tY29sIGNsYXNzPVwiaW9uLXRleHQtcmlnaHQgaW9uLXBhZGRpbmctZW5kXCI+XHJcbiAgICAgICAgICAgIDxpb24tYnV0dG9uIHNoYXBlPVwicm91bmRcIiAoY2xpY2spPVwiY29tcGxldGUoKVwiIGZpbGw9XCJzb2xpZFwiIHR5cGU9XCJzdWJtaXRcIj5cclxuICAgICAgICAgICAgICB7e1wiY29tbW9uLmFkZFwiIHwgdHJhbnNsYXRlfX1cclxuICAgICAgICAgICAgPC9pb24tYnV0dG9uPlxyXG4gICAgICAgICAgPC9pb24tY29sPlxyXG4gICAgICAgIDwvaW9uLXJvdz5cclxuICAgICAgPC9pb24tZ3JpZD5cclxuXHJcblxyXG5cclxuXHJcbiAgICAgIDxkaXYgKm5nSWY9XCIhaGlkZVN0ZXBcIj5cclxuICAgICAgICA8bWF0LWhvcml6b250YWwtc3RlcHBlciBsaW5lYXIgI21hdEhvcml6b250YWxTdGVwcGVyIFtzZWxlY3RlZEluZGV4XT1cInF1ZXN0aW9uc1swXS5zdGVwQ291bnRlclwiXHJcbiAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cInN0ZXBDaGFuZ2VkKCRldmVudCk7XCIgc3R5bGU9XCJ0ZXh0LWFsaWduOiAtd2Via2l0LWNlbnRlcjtcIiBhcmlhLWJ1c3k9XCJ0cnVlXCI+XHJcbiAgICAgICAgICA8bWF0LXN0ZXAgKm5nRm9yPVwibGV0IGVsZW1lbnQgb2YgIHF1ZXN0aW9uc1swXS5wYWdlczsgIGxldCBpID0gaW5kZXg7XCIgW3N0ZXBDb250cm9sXT1cImZvcm1Hcm91cEFycmF5W2ldXCJcclxuICAgICAgICAgICAgW2NvbXBsZXRlZF09XCIgIGkgPCBhY3RpdmVJbmRleCBcIj5cclxuXHJcbiAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG1hdFN0ZXBMYWJlbD57e3F1ZXN0aW9uc1swXS5wYWdlc1tpXS5uYXZpZ2F0aW9uVGl0bGV9fTwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFxdWVzdGlvbnNbMF0uaXNGaXJzdFBhZ2VTdWJtaXQgJiYgIWlzTGFzdCAmJiBpc0ZpcnN0ICYmICFpc0VuYWJsZUJhY2tCdXR0b25cIj5cclxuICAgICAgICAgICAgICA8YnV0dG9uIHRhYmluZGV4PVwiMFwiIGNsYXNzPVwicmV2ZXJzZVwiIChrZXlVcC5lbnRlcik9XCJuYXZDdHJsLm5hdmlnYXRlUm9vdCgnY2xhaW1hbnQtaW5kdWN0aW9uJylcIiAoY2xpY2spPVwibmF2Q3RybC5uYXZpZ2F0ZVJvb3QoJ2NsYWltYW50LWluZHVjdGlvbicpXCIgbWF0LWJ1dHRvbiBtYXRTdGVwcGVyUHJldmlvdXM+e3snY29tbW9uLmJhY2snfCB0cmFuc2xhdGV9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gdGFiaW5kZXg9XCIwXCIgY2xhc3M9XCJmb3J3YXJkXCIgbWF0LWJ1dHRvbiBtYXRTdGVwcGVyTmV4dCAoa2V5dXAuZW50ZXIpPVwibmV4dFBhZ2UoYWN0aXZlSW5kZXgpXCIgKGNsaWNrKT1cIm5leHRQYWdlKGFjdGl2ZUluZGV4KVwiPnt7J2NvbW1vbi5uZXh0J3wgdHJhbnNsYXRlfX08L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlc3Rpb25zWzBdLmlzRmlyc3RQYWdlU3VibWl0XCI+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiB0YWJpbmRleD1cIjBcIiBjbGFzcz1cInJldmVyc2VcIiAoa2V5VXAuZW50ZXIpPVwiY2FuY2VsQWN0aW9uKClcIiAoY2xpY2spPVwiY2FuY2VsQWN0aW9uKClcIiBtYXQtYnV0dG9uIG1hdFN0ZXBwZXJQcmV2aW91cz57eydjb21tb24uYmFjayd8IHRyYW5zbGF0ZX19PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiB0YWJpbmRleD1cIjBcIiBjbGFzcz1cImZvcndhcmRcIiBtYXQtYnV0dG9uIG1hdFN0ZXBwZXJOZXh0IChrZXl1cC5lbnRlcik9XCJjb21wbGV0ZSgpXCIgKGNsaWNrKT1cImNvbXBsZXRlKClcIj57eydjb21tb24ubmV4dCd8IHRyYW5zbGF0ZX19PC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFxdWVzdGlvbnNbMF0uaXNGaXJzdFBhZ2VTdWJtaXQgJiYgaXNMYXN0ICYmICFpc0ZpcnN0XCI+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiB0YWJpbmRleD1cIjBcIiBjbGFzcz1cInJldmVyc2VcIiBtYXQtYnV0dG9uIG1hdFN0ZXBwZXJQcmV2aW91cyAoa2V5dXAuZW50ZXIpPVwicHJldlBhZ2UoYWN0aXZlSW5kZXgpXCIgKGNsaWNrKT1cInByZXZQYWdlKGFjdGl2ZUluZGV4KVwiPnt7J2NvbW1vbi5iYWNrJ3wgdHJhbnNsYXRlfX08L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8YnV0dG9uIHRhYmluZGV4PVwiMFwiIGNsYXNzPVwiZm9yd2FyZFwiIG1hdC1idXR0b24gbWF0U3RlcHBlck5leHQgKGtleXVwLmVudGVyKT1cImNvbXBsZXRlKClcIiAoY2xpY2spPVwiY29tcGxldGUoKVwiPnt7J2NvbW1vbi5kb25lJ3wgdHJhbnNsYXRlfX08L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIXF1ZXN0aW9uc1swXS5pc0ZpcnN0UGFnZVN1Ym1pdCAmJiAhaXNMYXN0ICYmICFpc0ZpcnN0XCI+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiB0YWJpbmRleD1cIjBcIiBjbGFzcz1cInJldmVyc2VcIiBlZGl0YWJsZT1cImZhbHNlXCIgbWF0LWJ1dHRvbiBtYXRTdGVwcGVyUHJldmlvdXMgXHJcbiAgICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cInByZXZQYWdlKGFjdGl2ZUluZGV4KVwiIChjbGljayk9XCJwcmV2UGFnZShhY3RpdmVJbmRleClcIj57eydjb21tb24uYmFjayd8IHRyYW5zbGF0ZX19PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiB0YWJpbmRleD1cIjBcIiBjbGFzcz1cImZvcndhcmRcIiBtYXQtYnV0dG9uIG1hdFN0ZXBwZXJOZXh0IChrZXl1cC5lbnRlcik9XCJuZXh0UGFnZShhY3RpdmVJbmRleClcIiAoY2xpY2spPVwibmV4dFBhZ2UoYWN0aXZlSW5kZXgpXCI+e3snY29tbW9uLm5leHQnfCB0cmFuc2xhdGV9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpc0VuYWJsZUJhY2tCdXR0b24gJiYgIXF1ZXN0aW9uc1swXS5pc0ZpcnN0UGFnZVN1Ym1pdCAmJiAhaXNMYXN0ICYmIGlzRmlyc3RcIj5cclxuICAgICAgICAgICAgICA8YnV0dG9uIHRhYmluZGV4PVwiMFwiIGNsYXNzPVwicmV2ZXJzZVwiIGVkaXRhYmxlPVwiZmFsc2VcIiBtYXQtYnV0dG9uIG1hdFN0ZXBwZXJQcmV2aW91cyBcclxuICAgICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwiY2FuY2VsQWN0aW9uKClcIiAoY2xpY2spPVwiY2FuY2VsQWN0aW9uKClcIj57eydjb21tb24uYmFjayd8IHRyYW5zbGF0ZX19PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiB0YWJpbmRleD1cIjBcIiBjbGFzcz1cImZvcndhcmRcIiBtYXQtYnV0dG9uIG1hdFN0ZXBwZXJOZXh0IChjbGljayk9XCJuZXh0UGFnZShhY3RpdmVJbmRleClcIiAoa2V5dXAuZW50ZXIpPVwibmV4dFBhZ2UoYWN0aXZlSW5kZXgpXCI+e3snY29tbW9uLm5leHQnfCB0cmFuc2xhdGV9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcblxyXG4gICAgICAgICAgPC9tYXQtc3RlcD5cclxuXHJcbiAgICAgICAgPC9tYXQtaG9yaXpvbnRhbC1zdGVwcGVyPlxyXG5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgPC9pb24tZm9vdGVyPlxyXG4gIDwvZm9ybT5cclxuXHJcblxyXG5cclxuXHJcbiAgPCEtLSA8ZGl2ICpuZ0lmPVwicGF5TG9hZFwiIGNsYXNzPVwiZm9ybS1yb3dcIj5cclxuICAgICAgPHN0cm9uZz5TYXZlZCB0aGUgZm9sbG93aW5nIHZhbHVlczwvc3Ryb25nPjxicj57e3BheUxvYWR9fVxyXG4gICAgPC9kaXY+ICAtLT5cclxuXHJcblxyXG48L2Rpdj5cclxuXHJcbjxhcHAtbGV4aXMtbmV4aXMgKm5nSWY9XCJpc0xleGlzTmV4aXNQb3B1cEVuYWJsZWRcIiBbZGlzcGxheV09XCJpc0xleGlzTmV4aXNQb3B1cEVuYWJsZWRcIiBbcGFnZV09XCJmbG93S2V5XCIgW3VzZXJEZXRhaWxzXT1cInVzZXJEZXRhaWxzXCIgKHN1Y2Nlc3MpPVwib25MblN1Y2Nlc3MoKVwiIChlcnJvcik9XCJvbkxORXJyb3IoKVwiICh1c3BzKT1cInRyaWdnZXJVU1BTKClcIj48L2FwcC1sZXhpcy1uZXhpcz5cclxuPGFwcC1tZmEgI21mYSBbdXNlcl09XCJscy5nZXRVc2VyKClcIiAqbmdJZj1cInNob3dNZmFcIiAoc3VjY2Vzcyk9XCJzYXZlU2NyZWVuUXVlc3Rpb25uYWlyZSgkZXZlbnQpXCIgW2RhdGFdPVwibWZhRGF0YVwiIFtyZXF1ZXN0Q29kZV09XCJ0cnVlXCIgXHJcbiAgICAgICAgIFttZmFFcnJvcl09XCJtZmFFcnJvclwiIFtoaWRlQnV0dG9uc109XCJ0cnVlXCI+PC9hcHAtbWZhPiJdfQ==