@openziti/ziti-console-lib 0.7.1 → 0.8.1

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 (139) hide show
  1. package/assets/fonts/icomoon.eot +0 -0
  2. package/assets/fonts/icomoon.svg +118 -0
  3. package/assets/fonts/icomoon.ttf +0 -0
  4. package/assets/fonts/icomoon.woff +0 -0
  5. package/assets/fonts/icomoon.woff2 +0 -0
  6. package/assets/styles/global.scss +147 -3
  7. package/assets/styles/icons.css +13 -0
  8. package/esm2022/lib/features/card-list/card-list.component.mjs +12 -11
  9. package/esm2022/lib/features/creation-summary-dialog/creation-summary-dialog.component.mjs +1 -1
  10. package/esm2022/lib/features/dynamic-widgets/password/password-input.component.mjs +13 -3
  11. package/esm2022/lib/features/dynamic-widgets/protocol-address-port/protocol-address-port-input.component.mjs +1 -1
  12. package/esm2022/lib/features/dynamic-widgets/string/string-input.component.mjs +13 -3
  13. package/esm2022/lib/features/login/login-dialog.component.mjs +123 -0
  14. package/esm2022/lib/features/preview-selections/preview-selections.component.mjs +1 -1
  15. package/esm2022/lib/features/projectable-forms/auth-policy/auth-policy-form.component.mjs +4 -4
  16. package/esm2022/lib/features/projectable-forms/auth-policy/auth-policy-form.service.mjs +3 -15
  17. package/esm2022/lib/features/projectable-forms/certificate-authority/certificate-authority-form.component.mjs +404 -0
  18. package/esm2022/lib/features/projectable-forms/certificate-authority/certificate-authority-form.service.mjs +96 -0
  19. package/esm2022/lib/features/projectable-forms/certificate-authority/verify-certificate/verify-certificate.component.mjs +222 -0
  20. package/esm2022/lib/features/projectable-forms/certificate-authority/verify-certificate/verify-certificate.service.mjs +55 -0
  21. package/esm2022/lib/features/projectable-forms/configuration/configuration-form.component.mjs +3 -3
  22. package/esm2022/lib/features/projectable-forms/configuration/configuration.service.mjs +3 -15
  23. package/esm2022/lib/features/projectable-forms/edge-router/edge-router-form.component.mjs +3 -3
  24. package/esm2022/lib/features/projectable-forms/edge-router/edge-router-form.service.mjs +3 -15
  25. package/esm2022/lib/features/projectable-forms/edge-router-policy/edge-router-policy-form.component.mjs +3 -3
  26. package/esm2022/lib/features/projectable-forms/edge-router-policy/edge-router-policy-form.service.mjs +3 -15
  27. package/esm2022/lib/features/projectable-forms/form-field-container/form-field-container.component.mjs +24 -3
  28. package/esm2022/lib/features/projectable-forms/form-header/form-header.component.mjs +15 -3
  29. package/esm2022/lib/features/projectable-forms/identity/identity-form.component.mjs +3 -3
  30. package/esm2022/lib/features/projectable-forms/identity/identity-form.service.mjs +3 -15
  31. package/esm2022/lib/features/projectable-forms/jwt-signer/jwt-signer-form.component.mjs +24 -4
  32. package/esm2022/lib/features/projectable-forms/jwt-signer/jwt-signer-form.service.mjs +3 -15
  33. package/esm2022/lib/features/projectable-forms/projectable-form.class.mjs +24 -4
  34. package/esm2022/lib/features/projectable-forms/service/service-form.component.mjs +3 -3
  35. package/esm2022/lib/features/projectable-forms/service/service-form.service.mjs +3 -15
  36. package/esm2022/lib/features/projectable-forms/service/simple-service/simple-service.component.mjs +6 -6
  37. package/esm2022/lib/features/projectable-forms/service-edge-router-policy/service-edge-router-policy-form.component.mjs +3 -3
  38. package/esm2022/lib/features/projectable-forms/service-edge-router-policy/service-edge-router-policy-form.service.mjs +3 -15
  39. package/esm2022/lib/features/projectable-forms/service-policy/service-policy-form.component.mjs +3 -3
  40. package/esm2022/lib/features/projectable-forms/service-policy/service-policy-form.service.mjs +3 -15
  41. package/esm2022/lib/features/projectable-forms/terminator/terminator-form.component.mjs +3 -3
  42. package/esm2022/lib/features/sidebars/side-banner/side-banner.component.mjs +2 -2
  43. package/esm2022/lib/features/sidebars/side-toolbar/side-toolbar.component.mjs +2 -2
  44. package/esm2022/lib/features/wrappers/zac-wrapper.service.mjs +1 -4
  45. package/esm2022/lib/models/certificate-authority.mjs +16 -0
  46. package/esm2022/lib/models/jwt-signer.mjs +2 -1
  47. package/esm2022/lib/pages/auth-policies/auth-policies-page.component.mjs +3 -3
  48. package/esm2022/lib/pages/certificate-authorities/certificate-authorities-page.component.mjs +120 -0
  49. package/esm2022/lib/pages/certificate-authorities/certificate-authorities-page.service.mjs +240 -0
  50. package/esm2022/lib/pages/service-policies/service-policies-page.component.mjs +2 -1
  51. package/esm2022/lib/services/login-service.class.mjs +5 -1
  52. package/esm2022/lib/services/node-data.service.mjs +8 -13
  53. package/esm2022/lib/services/validation.service.mjs +3 -12
  54. package/esm2022/lib/services/ziti-controller-data.service.mjs +23 -5
  55. package/esm2022/lib/services/ziti-data.service.mjs +27 -2
  56. package/esm2022/lib/shared/list-page-service.class.mjs +9 -4
  57. package/esm2022/lib/ziti-console-lib.module.mjs +19 -5
  58. package/esm2022/public-api.mjs +7 -1
  59. package/fesm2022/openziti-ziti-console-lib.mjs +1493 -303
  60. package/fesm2022/openziti-ziti-console-lib.mjs.map +1 -1
  61. package/lib/features/card-list/card-list.component.d.ts +3 -2
  62. package/lib/features/card-list/card-list.component.d.ts.map +1 -1
  63. package/lib/features/dynamic-widgets/password/password-input.component.d.ts +3 -1
  64. package/lib/features/dynamic-widgets/password/password-input.component.d.ts.map +1 -1
  65. package/lib/features/dynamic-widgets/string/string-input.component.d.ts +3 -1
  66. package/lib/features/dynamic-widgets/string/string-input.component.d.ts.map +1 -1
  67. package/lib/features/login/login-dialog.component.d.ts +29 -0
  68. package/lib/features/login/login-dialog.component.d.ts.map +1 -0
  69. package/lib/features/projectable-forms/auth-policy/auth-policy-form.component.d.ts +1 -1
  70. package/lib/features/projectable-forms/auth-policy/auth-policy-form.component.d.ts.map +1 -1
  71. package/lib/features/projectable-forms/auth-policy/auth-policy-form.service.d.ts.map +1 -1
  72. package/lib/features/projectable-forms/certificate-authority/certificate-authority-form.component.d.ts +81 -0
  73. package/lib/features/projectable-forms/certificate-authority/certificate-authority-form.component.d.ts.map +1 -0
  74. package/lib/features/projectable-forms/certificate-authority/certificate-authority-form.service.d.ts +37 -0
  75. package/lib/features/projectable-forms/certificate-authority/certificate-authority-form.service.d.ts.map +1 -0
  76. package/lib/features/projectable-forms/certificate-authority/verify-certificate/verify-certificate.component.d.ts +63 -0
  77. package/lib/features/projectable-forms/certificate-authority/verify-certificate/verify-certificate.component.d.ts.map +1 -0
  78. package/lib/features/projectable-forms/certificate-authority/verify-certificate/verify-certificate.service.d.ts +28 -0
  79. package/lib/features/projectable-forms/certificate-authority/verify-certificate/verify-certificate.service.d.ts.map +1 -0
  80. package/lib/features/projectable-forms/configuration/configuration-form.component.d.ts +1 -1
  81. package/lib/features/projectable-forms/configuration/configuration-form.component.d.ts.map +1 -1
  82. package/lib/features/projectable-forms/configuration/configuration.service.d.ts.map +1 -1
  83. package/lib/features/projectable-forms/edge-router/edge-router-form.component.d.ts +1 -1
  84. package/lib/features/projectable-forms/edge-router/edge-router-form.component.d.ts.map +1 -1
  85. package/lib/features/projectable-forms/edge-router/edge-router-form.service.d.ts.map +1 -1
  86. package/lib/features/projectable-forms/edge-router-policy/edge-router-policy-form.component.d.ts +1 -1
  87. package/lib/features/projectable-forms/edge-router-policy/edge-router-policy-form.component.d.ts.map +1 -1
  88. package/lib/features/projectable-forms/edge-router-policy/edge-router-policy-form.service.d.ts.map +1 -1
  89. package/lib/features/projectable-forms/form-field-container/form-field-container.component.d.ts +5 -1
  90. package/lib/features/projectable-forms/form-field-container/form-field-container.component.d.ts.map +1 -1
  91. package/lib/features/projectable-forms/form-header/form-header.component.d.ts +5 -1
  92. package/lib/features/projectable-forms/form-header/form-header.component.d.ts.map +1 -1
  93. package/lib/features/projectable-forms/identity/identity-form.component.d.ts +1 -1
  94. package/lib/features/projectable-forms/identity/identity-form.component.d.ts.map +1 -1
  95. package/lib/features/projectable-forms/identity/identity-form.service.d.ts.map +1 -1
  96. package/lib/features/projectable-forms/jwt-signer/jwt-signer-form.component.d.ts +4 -1
  97. package/lib/features/projectable-forms/jwt-signer/jwt-signer-form.component.d.ts.map +1 -1
  98. package/lib/features/projectable-forms/jwt-signer/jwt-signer-form.service.d.ts.map +1 -1
  99. package/lib/features/projectable-forms/projectable-form.class.d.ts +5 -1
  100. package/lib/features/projectable-forms/projectable-form.class.d.ts.map +1 -1
  101. package/lib/features/projectable-forms/service/service-form.component.d.ts +1 -1
  102. package/lib/features/projectable-forms/service/service-form.component.d.ts.map +1 -1
  103. package/lib/features/projectable-forms/service/service-form.service.d.ts.map +1 -1
  104. package/lib/features/projectable-forms/service/simple-service/simple-service.component.d.ts +3 -2
  105. package/lib/features/projectable-forms/service/simple-service/simple-service.component.d.ts.map +1 -1
  106. package/lib/features/projectable-forms/service-edge-router-policy/service-edge-router-policy-form.component.d.ts +1 -1
  107. package/lib/features/projectable-forms/service-edge-router-policy/service-edge-router-policy-form.component.d.ts.map +1 -1
  108. package/lib/features/projectable-forms/service-edge-router-policy/service-edge-router-policy-form.service.d.ts.map +1 -1
  109. package/lib/features/projectable-forms/service-policy/service-policy-form.component.d.ts +1 -1
  110. package/lib/features/projectable-forms/service-policy/service-policy-form.component.d.ts.map +1 -1
  111. package/lib/features/projectable-forms/service-policy/service-policy-form.service.d.ts.map +1 -1
  112. package/lib/features/projectable-forms/terminator/terminator-form.component.d.ts +1 -1
  113. package/lib/features/projectable-forms/terminator/terminator-form.component.d.ts.map +1 -1
  114. package/lib/features/wrappers/zac-wrapper.service.d.ts.map +1 -1
  115. package/lib/models/certificate-authority.d.ts +14 -0
  116. package/lib/models/certificate-authority.d.ts.map +1 -0
  117. package/lib/models/jwt-signer.d.ts +1 -0
  118. package/lib/models/jwt-signer.d.ts.map +1 -1
  119. package/lib/pages/certificate-authorities/certificate-authorities-page.component.d.ts +30 -0
  120. package/lib/pages/certificate-authorities/certificate-authorities-page.component.d.ts.map +1 -0
  121. package/lib/pages/certificate-authorities/certificate-authorities-page.service.d.ts +35 -0
  122. package/lib/pages/certificate-authorities/certificate-authorities-page.service.d.ts.map +1 -0
  123. package/lib/pages/service-policies/service-policies-page.component.d.ts.map +1 -1
  124. package/lib/services/login-service.class.d.ts +6 -2
  125. package/lib/services/login-service.class.d.ts.map +1 -1
  126. package/lib/services/node-data.service.d.ts +1 -0
  127. package/lib/services/node-data.service.d.ts.map +1 -1
  128. package/lib/services/validation.service.d.ts.map +1 -1
  129. package/lib/services/ziti-controller-data.service.d.ts +2 -2
  130. package/lib/services/ziti-controller-data.service.d.ts.map +1 -1
  131. package/lib/services/ziti-data.service.d.ts +6 -2
  132. package/lib/services/ziti-data.service.d.ts.map +1 -1
  133. package/lib/shared/list-page-service.class.d.ts +1 -0
  134. package/lib/shared/list-page-service.class.d.ts.map +1 -1
  135. package/lib/ziti-console-lib.module.d.ts +22 -18
  136. package/lib/ziti-console-lib.module.d.ts.map +1 -1
  137. package/package.json +1 -1
  138. package/public-api.d.ts +6 -0
  139. package/public-api.d.ts.map +1 -1
@@ -44,20 +44,8 @@ class JwtSignerFormService {
44
44
  return false;
45
45
  });
46
46
  }).catch((resp) => {
47
- let errorMessage;
48
- if (resp?.error?.error?.cause?.message) {
49
- errorMessage = resp?.error?.error?.cause?.message;
50
- }
51
- else if (resp?.error?.error?.cause?.reason) {
52
- errorMessage = resp?.error?.error?.cause?.reason;
53
- }
54
- else if (resp?.error?.message) {
55
- errorMessage = resp?.error?.message;
56
- }
57
- else {
58
- errorMessage = 'An unknown error occurred';
59
- }
60
- const growlerData = new GrowlerModel('error', 'Error', `Error Creating JWT Signer`, errorMessage);
47
+ const errorMessage = this.dataService.getErrorMessage(resp);
48
+ const growlerData = new GrowlerModel('error', 'Error', `Error ${isUpdate ? 'Updating' : 'Creating'} JWT Signer`, errorMessage);
61
49
  this.growlerService.show(growlerData);
62
50
  throw resp;
63
51
  });
@@ -89,4 +77,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
89
77
  type: Inject,
90
78
  args: [SHAREDZ_EXTENSION]
91
79
  }] }, { type: i1.GrowlerService }, { type: i2.ValidationService }]; } });
92
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiand0LXNpZ25lci1mb3JtLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy96aXRpLWNvbnNvbGUtbGliL3NyYy9saWIvZmVhdHVyZXMvcHJvamVjdGFibGUtZm9ybXMvand0LXNpZ25lci9qd3Qtc2lnbmVyLWZvcm0uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFFLE1BQU0sRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUNqRCxPQUFPLEVBQUMsaUJBQWlCLEVBQWtCLE1BQU0scUNBQXFDLENBQUM7QUFDdkYsT0FBTyxFQUEyQixPQUFPLEVBQVMsSUFBSSxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBQ3RFLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSwrQkFBK0IsQ0FBQztBQUUzRCxPQUFPLEVBQW1CLGlCQUFpQixFQUFDLE1BQU0sMENBQTBDLENBQUM7QUFFN0YsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLDRCQUE0QixDQUFDOzs7OztBQUVyRCxNQUdhLG9CQUFvQjtJQU03QixZQUN1QyxXQUE0QixFQUM3QixVQUE0QixFQUN0RCxjQUE4QixFQUM5QixpQkFBb0M7UUFIVCxnQkFBVyxHQUFYLFdBQVcsQ0FBaUI7UUFDN0IsZUFBVSxHQUFWLFVBQVUsQ0FBa0I7UUFDdEQsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFSaEQsVUFBSyxHQUFVLEVBQUUsQ0FBQztRQUNsQixXQUFNLEdBQVUsRUFBRSxDQUFDO1FBQ25CLGlCQUFZLEdBQUcsS0FBSyxDQUFDO0lBUXJCLENBQUM7SUFFRCxJQUFJLENBQUMsUUFBUTtRQUNULE1BQU0sUUFBUSxHQUFHLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN2QyxNQUFNLElBQUksR0FBUSxJQUFJLENBQUMscUJBQXFC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QUNOLENBQUM7SUFFRCxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsUUFBUTtRQUNwQyxNQUFNLFNBQVMsR0FBRyxJQUFJLFNBQVMsRUFBRSxDQUFDO1FBQ2xDLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN4QyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDN0IsUUFBTyxJQUFJLEVBQUU7Z0JBQ1Q7b0JBQ0ksU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUN4QztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxTQUFTLENBQUM7SUFDckIsQ0FBQzsrR0E1RVEsb0JBQW9CLGtCQU9qQixpQkFBaUIsYUFDakIsaUJBQWlCO21IQVJwQixvQkFBb0IsY0FGakIsTUFBTTs7U0FFVCxvQkFBb0I7NEZBQXBCLG9CQUFvQjtrQkFIaEMsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckI7OzBCQVFRLE1BQU07MkJBQUMsaUJBQWlCOzswQkFDeEIsTUFBTTsyQkFBQyxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGUsIEluamVjdH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1pJVElfREFUQV9TRVJWSUNFLCBaaXRpRGF0YVNlcnZpY2V9IGZyb20gXCIuLi8uLi8uLi9zZXJ2aWNlcy96aXRpLWRhdGEuc2VydmljZVwiO1xuaW1wb3J0IHtkZWZlciwgaW52ZXJ0LCBpc0Jvb2xlYW4sIGlzRW1wdHksIGlzTmlsLCBrZXlzfSBmcm9tIFwibG9kYXNoXCI7XG5pbXBvcnQge0dyb3dsZXJNb2RlbH0gZnJvbSBcIi4uLy4uL21lc3NhZ2luZy9ncm93bGVyLm1vZGVsXCI7XG5pbXBvcnQge0dyb3dsZXJTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vbWVzc2FnaW5nL2dyb3dsZXIuc2VydmljZVwiO1xuaW1wb3J0IHtFeHRlbnNpb25TZXJ2aWNlLCBTSEFSRURaX0VYVEVOU0lPTn0gZnJvbSBcIi4uLy4uL2V4dGVuZGFibGUvZXh0ZW5zaW9ucy1ub29wLnNlcnZpY2VcIjtcbmltcG9ydCB7VmFsaWRhdGlvblNlcnZpY2V9IGZyb20gXCIuLi8uLi8uLi9zZXJ2aWNlcy92YWxpZGF0aW9uLnNlcnZpY2VcIjtcbmltcG9ydCB7Snd0U2lnbmVyfSBmcm9tIFwiLi4vLi4vLi4vbW9kZWxzL2p3dC1zaWduZXJcIjtcblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBKd3RTaWduZXJGb3JtU2VydmljZSB7XG5cbiAgICBpdGVtczogYW55W10gPSBbXTtcbiAgICBlcnJvcnM6IGFueVtdID0gW107XG4gICAgc2F2ZURpc2FibGVkID0gZmFsc2U7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgQEluamVjdChaSVRJX0RBVEFfU0VSVklDRSkgcHJpdmF0ZSBkYXRhU2VydmljZTogWml0aURhdGFTZXJ2aWNlLFxuICAgICAgICBASW5qZWN0KFNIQVJFRFpfRVhURU5TSU9OKXByaXZhdGUgZXh0U2VydmljZTogRXh0ZW5zaW9uU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBncm93bGVyU2VydmljZTogR3Jvd2xlclNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgdmFsaWRhdGlvblNlcnZpY2U6IFZhbGlkYXRpb25TZXJ2aWNlXG4gICAgKSB7XG4gICAgfVxuXG4gICAgc2F2ZShmb3JtRGF0YSkge1xuICAgICAgICBjb25zdCBpc1VwZGF0ZSA9ICFpc0VtcHR5KGZvcm1EYXRhLmlkKTtcbiAgICAgICAgY29uc3QgZGF0YTogYW55ID0gdGhpcy5nZXRKd3RTaWduZXJEYXRhTW9kZWwoZm9ybURhdGEsIGlzVXBkYXRlKTtcbiAgICAgICAgbGV0IHByb207XG4gICAgICAgIGlmIChpc1VwZGF0ZSkge1xuICAgICAgICAgICAgcHJvbSA9IHRoaXMuZGF0YVNlcnZpY2UucHV0KCdleHRlcm5hbC1qd3Qtc2lnbmVycycsIGRhdGEsIGZvcm1EYXRhLmlkLCB0cnVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHByb20gPSB0aGlzLmRhdGFTZXJ2aWNlLnBvc3QoJ2V4dGVybmFsLWp3dC1zaWduZXJzJywgZGF0YSwgdHJ1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcHJvbS50aGVuKGFzeW5jIChyZXN1bHQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaWQgPSBpc1VwZGF0ZSA/IGZvcm1EYXRhLmlkIDogKHJlc3VsdD8uZGF0YT8uaWQgfHwgcmVzdWx0Py5pZCk7XG4gICAgICAgICAgICBsZXQgY29uZmlnID0gYXdhaXQgdGhpcy5kYXRhU2VydmljZS5nZXRTdWJkYXRhKCdleHRlcm5hbC1qd3Qtc2lnbmVycycsIGlkLCAnJykudGhlbigoc3ZjRGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBzdmNEYXRhLmRhdGE7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmV4dFNlcnZpY2UuZm9ybURhdGFTYXZlZChjb25maWcpLnRoZW4oKGZvcm1TYXZlZFJlc3VsdDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFmb3JtU2F2ZWRSZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbmZpZztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgZ3Jvd2xlckRhdGEgPSBuZXcgR3Jvd2xlck1vZGVsKFxuICAgICAgICAgICAgICAgICAgICAnc3VjY2VzcycsXG4gICAgICAgICAgICAgICAgICAgICdTdWNjZXNzJyxcbiAgICAgICAgICAgICAgICAgICAgYEpXVCBTaWduZXIgJHtpc1VwZGF0ZSA/ICdVcGRhdGVkJyA6ICdDcmVhdGVkJ31gLFxuICAgICAgICAgICAgICAgICAgICBgU3VjY2Vzc2Z1bGx5ICR7aXNVcGRhdGUgPyAndXBkYXRlZCcgOiAnY3JlYXRlZCd9IEpXVCBTaWduZXI6ICR7Zm9ybURhdGEubmFtZX1gLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgdGhpcy5ncm93bGVyU2VydmljZS5zaG93KGdyb3dsZXJEYXRhKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29uZmlnO1xuICAgICAgICAgICAgfSkuY2F0Y2goKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KS5jYXRjaCgocmVzcCkgPT4ge1xuICAgICAgICAgICAgbGV0IGVycm9yTWVzc2FnZTtcbiAgICAgICAgICAgIGlmIChyZXNwPy5lcnJvcj8uZXJyb3I/LmNhdXNlPy5tZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gcmVzcD8uZXJyb3I/LmVycm9yPy5jYXVzZT8ubWVzc2FnZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzcD8uZXJyb3I/LmVycm9yPy5jYXVzZT8ucmVhc29uKSB7XG4gICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gcmVzcD8uZXJyb3I/LmVycm9yPy5jYXVzZT8ucmVhc29uO1xuICAgICAgICAgICAgfWVsc2UgaWYgKHJlc3A/LmVycm9yPy5tZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gcmVzcD8uZXJyb3I/Lm1lc3NhZ2U7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9ICdBbiB1bmtub3duIGVycm9yIG9jY3VycmVkJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGdyb3dsZXJEYXRhID0gbmV3IEdyb3dsZXJNb2RlbChcbiAgICAgICAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgICAgICAgICdFcnJvcicsXG4gICAgICAgICAgICAgICAgYEVycm9yIENyZWF0aW5nIEpXVCBTaWduZXJgLFxuICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLmdyb3dsZXJTZXJ2aWNlLnNob3coZ3Jvd2xlckRhdGEpO1xuICAgICAgICAgICAgdGhyb3cgcmVzcDtcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBnZXRKd3RTaWduZXJEYXRhTW9kZWwoZm9ybURhdGEsIGlzVXBkYXRlKSB7XG4gICAgICAgIGNvbnN0IHNhdmVNb2RlbCA9IG5ldyBKd3RTaWduZXIoKTtcbiAgICAgICAgY29uc3QgbW9kZWxQcm9wZXJ0aWVzID0ga2V5cyhzYXZlTW9kZWwpO1xuICAgICAgICBtb2RlbFByb3BlcnRpZXMuZm9yRWFjaCgocHJvcCkgPT4ge1xuICAgICAgICAgICAgc3dpdGNoKHByb3ApIHtcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBzYXZlTW9kZWxbcHJvcF0gPSBmb3JtRGF0YVtwcm9wXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBzYXZlTW9kZWw7XG4gICAgfVxuXG59XG4iXX0=
80
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiand0LXNpZ25lci1mb3JtLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy96aXRpLWNvbnNvbGUtbGliL3NyYy9saWIvZmVhdHVyZXMvcHJvamVjdGFibGUtZm9ybXMvand0LXNpZ25lci9qd3Qtc2lnbmVyLWZvcm0uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFFLE1BQU0sRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUNqRCxPQUFPLEVBQUMsaUJBQWlCLEVBQWtCLE1BQU0scUNBQXFDLENBQUM7QUFDdkYsT0FBTyxFQUEyQixPQUFPLEVBQVMsSUFBSSxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBQ3RFLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSwrQkFBK0IsQ0FBQztBQUUzRCxPQUFPLEVBQW1CLGlCQUFpQixFQUFDLE1BQU0sMENBQTBDLENBQUM7QUFFN0YsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLDRCQUE0QixDQUFDOzs7OztBQUVyRCxNQUdhLG9CQUFvQjtJQU03QixZQUN1QyxXQUE0QixFQUM3QixVQUE0QixFQUN0RCxjQUE4QixFQUM5QixpQkFBb0M7UUFIVCxnQkFBVyxHQUFYLFdBQVcsQ0FBaUI7UUFDN0IsZUFBVSxHQUFWLFVBQVUsQ0FBa0I7UUFDdEQsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFSaEQsVUFBSyxHQUFVLEVBQUUsQ0FBQztRQUNsQixXQUFNLEdBQVUsRUFBRSxDQUFDO1FBQ25CLGlCQUFZLEdBQUcsS0FBSyxDQUFDO0lBUXJCLENBQUM7SUFFRCxJQUFJLENBQUMsUUFBUTtRQUNULE1BQU0sUUFBUSxHQUFHLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN2QyxNQUFNLElBQUksR0FBUSxJQUFJLENBQUMscUJBQXFCLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ2pFLElBQUksSUFBSSxDQUFDO1FBQ1QsSUFBSSxRQUFRLEVBQUU7WUFDVixJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsc0JBQXNCLEVBQUUsSUFBSSxFQUFFLFFBQVEsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDaEY7YUFBTTtZQUNILElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDcEU7UUFFRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLE1BQVcsRUFBRSxFQUFFO1lBQ25DLE1BQU0sRUFBRSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUUsSUFBSSxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDckUsSUFBSSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxzQkFBc0IsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7Z0JBQzVGLE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQztZQUN4QixDQUFDLENBQUMsQ0FBQztZQUNILE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsZUFBb0IsRUFBRSxFQUFFO2dCQUN2RSxJQUFJLENBQUMsZUFBZSxFQUFFO29CQUNsQixPQUFPLE1BQU0sQ0FBQztpQkFDakI7Z0JBQ0QsTUFBTSxXQUFXLEdBQUcsSUFBSSxZQUFZLENBQ2hDLFNBQVMsRUFDVCxTQUFTLEVBQ1QsY0FBYyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQ2hELGdCQUFnQixRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxnQkFBZ0IsUUFBUSxDQUFDLElBQUksRUFBRSxDQUNsRixDQUFDO2dCQUNGLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2dCQUN0QyxPQUFPLE1BQU0sQ0FBQztZQUNsQixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtnQkFDaEIsT0FBTyxLQUFLLENBQUM7WUFDakIsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUNkLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzVELE1BQU0sV0FBVyxHQUFHLElBQUksWUFBWSxDQUNoQyxPQUFPLEVBQ1AsT0FBTyxFQUNQLFNBQVMsUUFBUSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFVBQVUsYUFBYSxFQUN4RCxZQUFZLENBQ2YsQ0FBQztZQUNGLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ3RDLE1BQU0sSUFBSSxDQUFDO1FBQ2YsQ0FBQyxDQUFDLENBQUE7SUFDTixDQUFDO0lBRUQscUJBQXFCLENBQUMsUUFBUSxFQUFFLFFBQVE7UUFDcEMsTUFBTSxTQUFTLEdBQUcsSUFBSSxTQUFTLEVBQUUsQ0FBQztRQUNsQyxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDeEMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQzdCLFFBQU8sSUFBSSxFQUFFO2dCQUNUO29CQUNJLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDeEM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sU0FBUyxDQUFDO0lBQ3JCLENBQUM7K0dBbkVRLG9CQUFvQixrQkFPakIsaUJBQWlCLGFBQ2pCLGlCQUFpQjttSEFScEIsb0JBQW9CLGNBRmpCLE1BQU07O1NBRVQsb0JBQW9COzRGQUFwQixvQkFBb0I7a0JBSGhDLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCOzswQkFRUSxNQUFNOzJCQUFDLGlCQUFpQjs7MEJBQ3hCLE1BQU07MkJBQUMsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlLCBJbmplY3R9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtaSVRJX0RBVEFfU0VSVklDRSwgWml0aURhdGFTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vLi4vc2VydmljZXMveml0aS1kYXRhLnNlcnZpY2VcIjtcbmltcG9ydCB7ZGVmZXIsIGludmVydCwgaXNCb29sZWFuLCBpc0VtcHR5LCBpc05pbCwga2V5c30gZnJvbSBcImxvZGFzaFwiO1xuaW1wb3J0IHtHcm93bGVyTW9kZWx9IGZyb20gXCIuLi8uLi9tZXNzYWdpbmcvZ3Jvd2xlci5tb2RlbFwiO1xuaW1wb3J0IHtHcm93bGVyU2VydmljZX0gZnJvbSBcIi4uLy4uL21lc3NhZ2luZy9ncm93bGVyLnNlcnZpY2VcIjtcbmltcG9ydCB7RXh0ZW5zaW9uU2VydmljZSwgU0hBUkVEWl9FWFRFTlNJT059IGZyb20gXCIuLi8uLi9leHRlbmRhYmxlL2V4dGVuc2lvbnMtbm9vcC5zZXJ2aWNlXCI7XG5pbXBvcnQge1ZhbGlkYXRpb25TZXJ2aWNlfSBmcm9tIFwiLi4vLi4vLi4vc2VydmljZXMvdmFsaWRhdGlvbi5zZXJ2aWNlXCI7XG5pbXBvcnQge0p3dFNpZ25lcn0gZnJvbSBcIi4uLy4uLy4uL21vZGVscy9qd3Qtc2lnbmVyXCI7XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgSnd0U2lnbmVyRm9ybVNlcnZpY2Uge1xuXG4gICAgaXRlbXM6IGFueVtdID0gW107XG4gICAgZXJyb3JzOiBhbnlbXSA9IFtdO1xuICAgIHNhdmVEaXNhYmxlZCA9IGZhbHNlO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIEBJbmplY3QoWklUSV9EQVRBX1NFUlZJQ0UpIHByaXZhdGUgZGF0YVNlcnZpY2U6IFppdGlEYXRhU2VydmljZSxcbiAgICAgICAgQEluamVjdChTSEFSRURaX0VYVEVOU0lPTilwcml2YXRlIGV4dFNlcnZpY2U6IEV4dGVuc2lvblNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgZ3Jvd2xlclNlcnZpY2U6IEdyb3dsZXJTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHZhbGlkYXRpb25TZXJ2aWNlOiBWYWxpZGF0aW9uU2VydmljZVxuICAgICkge1xuICAgIH1cblxuICAgIHNhdmUoZm9ybURhdGEpIHtcbiAgICAgICAgY29uc3QgaXNVcGRhdGUgPSAhaXNFbXB0eShmb3JtRGF0YS5pZCk7XG4gICAgICAgIGNvbnN0IGRhdGE6IGFueSA9IHRoaXMuZ2V0Snd0U2lnbmVyRGF0YU1vZGVsKGZvcm1EYXRhLCBpc1VwZGF0ZSk7XG4gICAgICAgIGxldCBwcm9tO1xuICAgICAgICBpZiAoaXNVcGRhdGUpIHtcbiAgICAgICAgICAgIHByb20gPSB0aGlzLmRhdGFTZXJ2aWNlLnB1dCgnZXh0ZXJuYWwtand0LXNpZ25lcnMnLCBkYXRhLCBmb3JtRGF0YS5pZCwgdHJ1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwcm9tID0gdGhpcy5kYXRhU2VydmljZS5wb3N0KCdleHRlcm5hbC1qd3Qtc2lnbmVycycsIGRhdGEsIHRydWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHByb20udGhlbihhc3luYyAocmVzdWx0OiBhbnkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGlkID0gaXNVcGRhdGUgPyBmb3JtRGF0YS5pZCA6IChyZXN1bHQ/LmRhdGE/LmlkIHx8IHJlc3VsdD8uaWQpO1xuICAgICAgICAgICAgbGV0IGNvbmZpZyA9IGF3YWl0IHRoaXMuZGF0YVNlcnZpY2UuZ2V0U3ViZGF0YSgnZXh0ZXJuYWwtand0LXNpZ25lcnMnLCBpZCwgJycpLnRoZW4oKHN2Y0RhdGEpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3ZjRGF0YS5kYXRhO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5leHRTZXJ2aWNlLmZvcm1EYXRhU2F2ZWQoY29uZmlnKS50aGVuKChmb3JtU2F2ZWRSZXN1bHQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghZm9ybVNhdmVkUmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjb25maWc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGdyb3dsZXJEYXRhID0gbmV3IEdyb3dsZXJNb2RlbChcbiAgICAgICAgICAgICAgICAgICAgJ3N1Y2Nlc3MnLFxuICAgICAgICAgICAgICAgICAgICAnU3VjY2VzcycsXG4gICAgICAgICAgICAgICAgICAgIGBKV1QgU2lnbmVyICR7aXNVcGRhdGUgPyAnVXBkYXRlZCcgOiAnQ3JlYXRlZCd9YCxcbiAgICAgICAgICAgICAgICAgICAgYFN1Y2Nlc3NmdWxseSAke2lzVXBkYXRlID8gJ3VwZGF0ZWQnIDogJ2NyZWF0ZWQnfSBKV1QgU2lnbmVyOiAke2Zvcm1EYXRhLm5hbWV9YCxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRoaXMuZ3Jvd2xlclNlcnZpY2Uuc2hvdyhncm93bGVyRGF0YSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbmZpZztcbiAgICAgICAgICAgIH0pLmNhdGNoKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSkuY2F0Y2goKHJlc3ApID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IHRoaXMuZGF0YVNlcnZpY2UuZ2V0RXJyb3JNZXNzYWdlKHJlc3ApO1xuICAgICAgICAgICAgY29uc3QgZ3Jvd2xlckRhdGEgPSBuZXcgR3Jvd2xlck1vZGVsKFxuICAgICAgICAgICAgICAgICdlcnJvcicsXG4gICAgICAgICAgICAgICAgJ0Vycm9yJyxcbiAgICAgICAgICAgICAgICBgRXJyb3IgJHtpc1VwZGF0ZSA/ICdVcGRhdGluZycgOiAnQ3JlYXRpbmcnfSBKV1QgU2lnbmVyYCxcbiAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5ncm93bGVyU2VydmljZS5zaG93KGdyb3dsZXJEYXRhKTtcbiAgICAgICAgICAgIHRocm93IHJlc3A7XG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgZ2V0Snd0U2lnbmVyRGF0YU1vZGVsKGZvcm1EYXRhLCBpc1VwZGF0ZSkge1xuICAgICAgICBjb25zdCBzYXZlTW9kZWwgPSBuZXcgSnd0U2lnbmVyKCk7XG4gICAgICAgIGNvbnN0IG1vZGVsUHJvcGVydGllcyA9IGtleXMoc2F2ZU1vZGVsKTtcbiAgICAgICAgbW9kZWxQcm9wZXJ0aWVzLmZvckVhY2goKHByb3ApID0+IHtcbiAgICAgICAgICAgIHN3aXRjaChwcm9wKSB7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgc2F2ZU1vZGVsW3Byb3BdID0gZm9ybURhdGFbcHJvcF07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gc2F2ZU1vZGVsO1xuICAgIH1cblxufVxuIl19
@@ -21,11 +21,13 @@ import { SHAREDZ_EXTENSION } from "../extendable/extensions-noop.service";
21
21
  import { ZITI_DATA_SERVICE } from "../../services/ziti-data.service";
22
22
  import { NavigationEnd } from "@angular/router";
23
23
  import { Subscription } from "rxjs";
24
+ import { SETTINGS_SERVICE } from "../../services/settings.service";
24
25
  import * as i0 from "@angular/core";
25
26
  import * as i1 from "../messaging/growler.service";
26
27
  import * as i2 from "@angular/router";
27
28
  import * as i3 from "@angular/common";
28
29
  import * as i4 from "../../services/ziti-data.service";
30
+ import * as i5 from "../../services/settings.service";
29
31
  // @ts-ignore
30
32
  const { context, tags, resources, service, app } = window;
31
33
  export class Entity {
@@ -37,7 +39,7 @@ export const KEY_CODES = {
37
39
  DOWN_ARROW: 40
38
40
  };
39
41
  class ProjectableForm extends ExtendableComponent {
40
- constructor(growlerService, extService, zitiService, router, route, location) {
42
+ constructor(growlerService, extService, zitiService, router, route, location, settingsService) {
41
43
  super();
42
44
  this.growlerService = growlerService;
43
45
  this.extService = extService;
@@ -45,6 +47,7 @@ class ProjectableForm extends ExtendableComponent {
45
47
  this.router = router;
46
48
  this.route = route;
47
49
  this.location = location;
50
+ this.settingsService = settingsService;
48
51
  this.isModal = false;
49
52
  this.dataChange = new EventEmitter();
50
53
  this.errors = {};
@@ -60,7 +63,9 @@ class ProjectableForm extends ExtendableComponent {
60
63
  this.apiOptions = [{ id: 'cli', label: 'Copy as CLI' }, { id: 'curl', label: 'Copy as CURL' }];
61
64
  this.basePath = '';
62
65
  this.showMore = false;
66
+ this._settings = {};
63
67
  this.checkDataChangeDebounced = debounce(this.checkDataChange, 100, { maxWait: 100 });
68
+ this.ignoreDataChange = false;
64
69
  this.subscription = new Subscription();
65
70
  this.previousRoute = this.router.getCurrentNavigation().previousNavigation?.finalUrl?.toString();
66
71
  this.subscription.add(this.route?.params?.subscribe(params => {
@@ -78,6 +83,15 @@ class ProjectableForm extends ExtendableComponent {
78
83
  this.basePath = pathSegments[0];
79
84
  }
80
85
  }));
86
+ this.subscription.add(this.settingsService.settingsChange?.subscribe(params => {
87
+ const newSettings = cloneDeep(this.settingsService.settings);
88
+ if (!isEmpty(this.formData?.id) && (isEmpty(this._settings) || this._settings.session?.id === newSettings.session?.id)) {
89
+ this._settings = newSettings;
90
+ return;
91
+ }
92
+ this._settings = newSettings;
93
+ this.ngOnInit();
94
+ }));
81
95
  }
82
96
  ngAfterViewInit() {
83
97
  super.ngAfterViewInit();
@@ -212,6 +226,9 @@ class ProjectableForm extends ExtendableComponent {
212
226
  this.checkDataChangeDebounced();
213
227
  }
214
228
  checkDataChange() {
229
+ if (this.ignoreDataChange) {
230
+ return;
231
+ }
215
232
  let initData = cloneDeep(this.initData);
216
233
  initData = this.omitEmptyData(initData);
217
234
  let formData = cloneDeep(this.formData);
@@ -277,7 +294,7 @@ class ProjectableForm extends ExtendableComponent {
277
294
  return results.data;
278
295
  });
279
296
  }
280
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ProjectableForm, deps: [{ token: i1.GrowlerService }, { token: SHAREDZ_EXTENSION }, { token: ZITI_DATA_SERVICE }, { token: i2.Router }, { token: i2.ActivatedRoute }, { token: i3.Location }], target: i0.ɵɵFactoryTarget.Component }); }
297
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ProjectableForm, deps: [{ token: i1.GrowlerService }, { token: SHAREDZ_EXTENSION }, { token: ZITI_DATA_SERVICE }, { token: i2.Router }, { token: i2.ActivatedRoute }, { token: i3.Location }, { token: SETTINGS_SERVICE }], target: i0.ɵɵFactoryTarget.Component }); }
281
298
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ProjectableForm, selector: "ng-component", inputs: { isModal: "isModal", entityId: "entityId", formData: "formData" }, outputs: { close: "close", dataChange: "dataChange" }, viewQueries: [{ propertyName: "nameFieldInput", first: true, predicate: ["nameFieldInput"], descendants: true }], usesInheritance: true, ngImport: i0, template: '', isInline: true, styles: [""] }); }
282
299
  }
283
300
  export { ProjectableForm };
@@ -290,7 +307,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
290
307
  }] }, { type: i4.ZitiDataService, decorators: [{
291
308
  type: Inject,
292
309
  args: [ZITI_DATA_SERVICE]
293
- }] }, { type: i2.Router }, { type: i2.ActivatedRoute }, { type: i3.Location }]; }, propDecorators: { isModal: [{
310
+ }] }, { type: i2.Router }, { type: i2.ActivatedRoute }, { type: i3.Location }, { type: i5.SettingsService, decorators: [{
311
+ type: Inject,
312
+ args: [SETTINGS_SERVICE]
313
+ }] }]; }, propDecorators: { isModal: [{
294
314
  type: Input
295
315
  }], entityId: [{
296
316
  type: Input
@@ -304,4 +324,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
304
324
  type: ViewChild,
305
325
  args: ['nameFieldInput']
306
326
  }] } });
307
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvamVjdGFibGUtZm9ybS5jbGFzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ppdGktY29uc29sZS1saWIvc3JjL2xpYi9mZWF0dXJlcy9wcm9qZWN0YWJsZS1mb3Jtcy9wcm9qZWN0YWJsZS1mb3JtLmNsYXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztFQWNFO0FBRUYsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sb0NBQW9DLENBQUM7QUFDdkUsT0FBTyxFQUNILFNBQVMsRUFHVCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFHTCxNQUFNLEVBQ04sU0FBUyxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQXFCLE1BQU0sUUFBUSxDQUFDO0FBQ2xJLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUV4RCxPQUFPLEVBQW1CLGlCQUFpQixFQUFDLE1BQU0sdUNBQXVDLENBQUM7QUFFMUYsT0FBTyxFQUFDLGlCQUFpQixFQUFrQixNQUFNLGtDQUFrQyxDQUFDO0FBQ3BGLE9BQU8sRUFBaUIsYUFBYSxFQUFTLE1BQU0saUJBQWlCLENBQUM7QUFDdEUsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLE1BQU0sQ0FBQzs7Ozs7O0FBR2xDLGFBQWE7QUFDYixNQUFNLEVBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBQyxHQUFHLE1BQU0sQ0FBQztBQUV4RCxNQUFNLE9BQU8sTUFBTTtDQUVsQjtBQUVELE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRztJQUNyQixVQUFVLEVBQUUsRUFBRTtJQUNkLFFBQVEs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ZXNDb250ZW50IjpbIi8qXG4gICAgQ29weXJpZ2h0IE5ldEZvdW5kcnkgSW5jLlxuXG4gICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiovXG5cbmltcG9ydCB7RXh0ZW5kYWJsZUNvbXBvbmVudH0gZnJvbSBcIi4uL2V4dGVuZGFibGUvZXh0ZW5kYWJsZS5jb21wb25lbnRcIjtcbmltcG9ydCB7XG4gICAgQ29tcG9uZW50LFxuICAgIERvQ2hlY2ssXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSW5qZWN0LFxuICAgIElucHV0LFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIFZpZXdDaGlsZFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuXG5pbXBvcnQge2RlZmVyLCBpc0VxdWFsLCB1bnNldCwgZGVib3VuY2UsIGNsb25lRGVlcCwgZm9yRWFjaCwgaXNBcnJheSwgaXNFbXB0eSwgaXNPYmplY3QsIGlzTmlsLCBtYXAsIG9taXRCeSwgc2xpY2V9IGZyb20gXCJsb2Rhc2hcIjtcbmltcG9ydCB7R3Jvd2xlck1vZGVsfSBmcm9tIFwiLi4vbWVzc2FnaW5nL2dyb3dsZXIubW9kZWxcIjtcbmltcG9ydCB7R3Jvd2xlclNlcnZpY2V9IGZyb20gXCIuLi9tZXNzYWdpbmcvZ3Jvd2xlci5zZXJ2aWNlXCI7XG5pbXBvcnQge0V4dGVuc2lvblNlcnZpY2UsIFNIQVJFRFpfRVhURU5TSU9OfSBmcm9tIFwiLi4vZXh0ZW5kYWJsZS9leHRlbnNpb25zLW5vb3Auc2VydmljZVwiO1xuaW1wb3J0IHtJZGVudGl0eX0gZnJvbSBcIi4uLy4uL21vZGVscy9pZGVudGl0eVwiO1xuaW1wb3J0IHtaSVRJX0RBVEFfU0VSVklDRSwgWml0aURhdGFTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vc2VydmljZXMveml0aS1kYXRhLnNlcnZpY2VcIjtcbmltcG9ydCB7QWN0aXZhdGVkUm91dGUsIE5hdmlnYXRpb25FbmQsIFJvdXRlcn0gZnJvbSBcIkBhbmd1bGFyL3JvdXRlclwiO1xuaW1wb3J0IHtTdWJzY3JpcHRpb259IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQge0xvY2F0aW9ufSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XG5cbi8vIEB0cy1pZ25vcmVcbmNvbnN0IHtjb250ZXh0LCB0YWdzLCByZXNvdXJjZXMsIHNlcnZpY2UsIGFwcH0gPSB3aW5kb3c7XG5cbmV4cG9ydCBjbGFzcyBFbnRpdHkge1xuICAgIG5hbWU6ICcnXG59XG5cbmV4cG9ydCBjb25zdCBLRVlfQ09ERVMgPSB7XG4gICAgTEVGVF9BUlJPVzogMzcsXG4gICAgVVBfQVJST1c6IDM4LFxuICAgIFJJR0hUX0FSUk9XOiAzOSxcbiAgICBET1dOX0FSUk9XOiA0MFxufTtcblxuQENvbXBvbmVudCh7XG4gICAgdGVtcGxhdGU6ICcnLFxuICAgIHN0eWxlVXJsczogWycuL3Byb2plY3RhYmxlLWZvcm0uY2xhc3Muc2NzcyddXG59KVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFByb2plY3RhYmxlRm9ybSBleHRlbmRzIEV4dGVuZGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBEb0NoZWNrLCBPbkluaXQge1xuICAgIEBJbnB1dCgpIGlzTW9kYWwgPSBmYWxzZTtcbiAgICBASW5wdXQoKSBlbnRpdHlJZDogU3RyaW5nO1xuICAgIEBJbnB1dCgpIGFic3RyYWN0IGZvcm1EYXRhOiBhbnk7XG4gICAgQE91dHB1dCgpIGFic3RyYWN0IGNsb3NlOiBFdmVudEVtaXR0ZXI8YW55PjtcbiAgICBAT3V0cHV0KCkgZGF0YUNoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAVmlld0NoaWxkKCduYW1lRmllbGRJbnB1dCcpIG5hbWVGaWVsZElucHV0OiBFbGVtZW50UmVmO1xuXG4gICAgYWJzdHJhY3QgY2xlYXIoKTogdm9pZDtcbiAgICBhYnN0cmFjdCBzYXZlKCk6IHZvaWQ7XG5cbiAgICBwdWJsaWMgZXJyb3JzOiBhbnkgPSB7fTtcbiAgICBwcm90ZWN0ZWQgZW50aXR5VHlwZSA9ICdpZGVudGl0aWVzJztcbiAgICBwcm90ZWN0ZWQgZW50aXR5Q2xhc3M6IGFueSA9IEVudGl0eTtcbiAgICBwcm90ZWN0ZWQgaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgbW9yZUFjdGlvbnM6IGFueVtdID0gW107XG4gICAgdGFnRWxlbWVudHM6IGFueSA9IFtdO1xuICAgIHRhZ0RhdGE6IGFueSA9IFtdO1xuICAgIGhpZGVUYWdzID0gZmFsc2U7XG4gICAgaW5pdERhdGE6IGFueSA9IHt9O1xuICAgIF9kYXRhQ2hhbmdlID0gZmFsc2U7XG4gICAgYXBpT3B0aW9ucyA9IFt7aWQ6ICdjbGknLCBsYWJlbDogJ0NvcHkgYXMgQ0xJJ30sIHtpZDogJ2N1cmwnLCBsYWJlbDogJ0NvcHkgYXMgQ1VSTCd9XTtcbiAgICBiYXNlUGF0aCA9ICcnO1xuICAgIHByZXZpb3VzUm91dGU7XG4gICAgc2hvd01vcmUgPSBmYWxzZTtcblxuICAgIGNoZWNrRGF0YUNoYW5nZURlYm91bmNlZCA9IGRlYm91bmNlKHRoaXMuY2hlY2tEYXRhQ2hhbmdlLCAxMDAsIHttYXhXYWl0OiAxMDB9KTtcblxuICAgIHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gICAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcm90ZWN0ZWQgZ3Jvd2xlclNlcnZpY2U6IEdyb3dsZXJTZXJ2aWNlLFxuICAgICAgICBASW5qZWN0KFNIQVJFRFpfRVhURU5TSU9OKSBwcm90ZWN0ZWQgZXh0U2VydmljZTogRXh0ZW5zaW9uU2VydmljZSxcbiAgICAgICAgQEluamVjdChaSVRJX0RBVEFfU0VSVklDRSkgcHJvdGVjdGVkIHppdGlTZXJ2aWNlOiBaaXRpRGF0YVNlcnZpY2UsXG4gICAgICAgIHByb3RlY3RlZCByb3V0ZXI/OiBSb3V0ZXIsXG4gICAgICAgIHByb3RlY3RlZCByb3V0ZT86IEFjdGl2YXRlZFJvdXRlLFxuICAgICAgICBwcm90ZWN0ZWQgbG9jYXRpb24/OiBMb2NhdGlvblxuICAgICkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLnByZXZpb3VzUm91dGUgPSB0aGlzLnJvdXRlci5nZXRDdXJyZW50TmF2aWdhdGlvbigpLnByZXZpb3VzTmF2aWdhdGlvbj8uZmluYWxVcmw/LnRvU3RyaW5nKCk7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uLmFkZChcbiAgICAgICAgICAgIHRoaXMucm91dGU/LnBhcmFtcz8uc3Vic2NyaWJlKHBhcmFtcyA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgaWQgPSBwYXJhbXNbJ2lkJ107XG4gICAgICAgICAgICAgICAgaWYgKCFpc0VtcHR5KGlkKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVudGl0eUlkID0gaWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24uYWRkKFxuICAgICAgICAgICAgcm91dGVyLmV2ZW50cy5zdWJzY3JpYmUoKGV2ZW50OiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZXZlbnQgPT4gZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRW5kKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghZXZlbnQ/LnNuYXBzaG90Py5yb3V0ZUNvbmZpZz8ucGF0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhdGhTZWdtZW50cyA9IGV2ZW50LnNuYXBzaG90LnJvdXRlQ29uZmlnLnBhdGguc3BsaXQoJy8nKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5iYXNlUGF0aCA9IHBhdGhTZWdtZW50c1swXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIG92ZXJyaWRlIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgc3VwZXIubmdBZnRlclZpZXdJbml0KCk7XG4gICAgICAgIHRoaXMuZXJyb3JzID0ge307XG4gICAgICAgIHRoaXMubmFtZUZpZWxkSW5wdXQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICBpZiAodGhpcy5leHRTZXJ2aWNlPy5tb3JlQWN0aW9ucykge1xuICAgICAgICAgICAgdGhpcy5tb3JlQWN0aW9ucyA9IFsuLi50aGlzLm1vcmVBY3Rpb25zLCAuLi50aGlzLmV4dFNlcnZpY2UubW9yZUFjdGlvbnNdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIGlmICh0aGlzLmVudGl0eUlkKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5lbnRpdHlJZCA9PT0gJ2NyZWF0ZScpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm1EYXRhID0gbmV3IHRoaXMuZW50aXR5Q2xhc3MoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmluaXREYXRhID0gY2xvbmVEZWVwKHRoaXMuZm9ybURhdGEpO1xuICAgICAgICAgICAgICAgIHRoaXMuZW50aXR5VXBkYXRlZCgpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMueml0aVNlcnZpY2UuZ2V0U3ViZGF0YSh0aGlzLmVudGl0eVR5cGUsIHRoaXMuZW50aXR5SWQsICcnKS50aGVuKChlbnRpdHk6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybURhdGEgPSBlbnRpdHk/LmRhdGE7XG4gICAgICAgICAgICAgICAgdGhpcy5pbml0RGF0YSA9IGNsb25lRGVlcCh0aGlzLmZvcm1EYXRhKTtcbiAgICAgICAgICAgICAgICB0aGlzLmVudGl0eVVwZGF0ZWQoKTtcbiAgICAgICAgICAgIH0pLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNob3dNb3JlQ2hhbmdlZChzaG93TW9yZSkge1xuICAgICAgICBpZiAoIXNob3dNb3JlIHx8IHRoaXMuaGlkZVRhZ3MpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlc2V0VGFncygpXG4gICAgfVxuXG4gICAgbG9hZFRhZ3MoKSB7XG4gICAgICAgIHRoaXMuaGlkZVRhZ3MgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcImhpZGVUYWdzXCIpPT1cInllc1wiO1xuICAgICAgICBpZiAodGhpcy5oaWRlVGFncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHNlcnZpY2UuY2FsbChcInRhZ3NcIiwge30sIHRoaXMudGFnc0xvYWRlZC5iaW5kKHRoaXMpKTtcbiAgICB9XG5cbiAgICB0YWdzTG9hZGVkKHJlc3VsdHMpIHtcbiAgICAgICAgdGFncy5kYXRhID0gcmVzdWx0cztcbiAgICAgICAgY29udGV4dC5zZXQodGFncy5uYW1lLCB0YWdzLmRhdGEpO1xuICAgICAgICB0YWdzLnRhZ0RhdGEgPSBbXTtcbiAgICAgICAgdGFncy5kYXRhLmZvckVhY2goKHRhZykgPT4ge1xuICAgICAgICAgICAgbGV0IGh0bWw7XG4gICAgICAgICAgICBpZiAodGFnLm9iamVjdHM9PVwiYWxsXCIgfHwgdGFnLm9iamVjdHMuaW5kZXhPZih0aGlzLmVudGl0eVR5cGUpPj0wKSB7XG4gICAgICAgICAgICAgICAgdGFncy50YWdEYXRhW3RhZ3MudGFnRGF0YS5sZW5ndGhdID0gdGFnO1xuICAgICAgICAgICAgICAgIGh0bWwgPSB0aGlzLmdldFRhZ0NvbnRlbnQodGFnKTtcbiAgICAgICAgICAgICAgICBjb25zdCB0YWdFbCA9IHtcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6IHRhZy5sYWJlbCxcbiAgICAgICAgICAgICAgICAgICAgY29udGVudDogaHRtbFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnRhZ0VsZW1lbnRzLnB1c2godGFnRWwpXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHJlc2V0VGFncygpIHtcbiAgICAgICAgdW5zZXQodGFncywgJ21hcCcpO1xuICAgICAgICBpZiAodGhpcy5oaWRlVGFncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGRlZmVyKCgpID0+IHtcbiAgICAgICAgICAgIHRhZ3MucmVzZXQodGhpcy5mb3JtRGF0YSk7XG4gICAgICAgICAgICB0YWdzLmV2ZW50cygpO1xuICAgICAgICB9KVxuICAgIH1cblxuICAgIGdldFRhZ0NvbnRlbnQodGFnKSB7XG4gICAgICAgIGxldCBodG1sID0gJyc7XG4gICAgICAgIGlmICh0YWcudmFsdWU9PVwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIGh0bWwgKz0gJzxpbnB1dCBpZD1cIlRhZ18nK3RhZy5pZCsnXCIgdHlwZT1cInRleHRcIiBkYXRhLXRhZz1cIicrdGFnLmlkKydcIiBtYXhsZW5ndGg9XCI1MDBcIiBwbGFjZWhvbGRlcj1cIicrdGFnLmRlc2NyaXB0aW9uKydcIiAvPic7XG4gICAgICAgIH0gZWxzZSBpZiAodGFnLnZhbHVlPT1cImJvb2xlYW5cIikge1xuICAgICAgICAgICAgaHRtbCArPSAnPGlucHV0IGlkPVwiVGFnXycrdGFnLmlkKydcIiB0eXBlPVwiY2hlY2tib3hcIiBkYXRhLXRhZz1cIicrdGFnLmlkKydcIiAvPic7XG4gICAgICAgIH0gZWxzZSBpZiAodGFnLnZhbHVlPT1cIm1hcFwiKSB7XG4gICAgICAgICAgICBodG1sICs9ICc8ZGl2IGlkPVwiVGFnXycrdGFnLmlkKydfTWFwXCIgZGF0YS1tYXA9XCInK3RhZy5pZCsnXCIgY2xhc3M9XCJtYXBcIj48L2Rpdj4nO1xuICAgICAgICAgICAgaHRtbCArPSAnPGlucHV0IGlkPVwiVGFnXycrdGFnLmlkKydcIiB0eXBlPVwidGV4dFwiIGRhdGEtdGFnPVwiJyt0YWcuaWQrJ1wiIG1heGxlbmd0aD1cIjUwMFwiIHBsYWNlaG9sZGVyPVwiJyt0YWcuZGVzY3JpcHRpb24rJ1wiIC8+JztcbiAgICAgICAgfSBlbHNlIGlmICh0YWcudmFsdWU9PVwiYXZhdGFyXCIpIHtcbiAgICAgICAgICAgIGh0bWwgKz0gJzxkaXYgY2xhc3M9XCJmb3JtUm93XCI+JztcbiAgICAgICAgICAgIGh0bWwgKz0gJzxkaXYgaWQ9XCJUYWdfJyt0YWcuaWQrJ1wiIGRhdGEtaWQ9XCInK3RhZy5pZCsnXCIgZGF0YS1yZXNvdXJjZT1cImF2YXRhclwiIGNsYXNzPVwicmVzb3VyY2UgaWNvbiBwcm9maWxlXCIgdGl0bGU9XCInK3RhZy5kZXNjcmlwdGlvbisnXCIgc3R5bGU9XCJiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJyt0YWcuZGVmYXVsdCsnKVwiPjwvZGl2PjxkaXYgaWQ9XCJUYWdfUmVzb3VyY2VzXycrdGFnLmlkKydcIiBjbGFzcz1cInJlc291cmNlc1wiIGRhdGEtaWQ9XCInK3RhZy5pZCsnXCIgZGF0YS1yZXNvdXJjZXM9XCJhdmF0YXJcIj48L2Rpdj4nO1xuICAgICAgICAgICAgaHRtbCArPSAnPGlucHV0IGlkPVwiVGFnXycrdGFnLmlkKydfSGlkZXJcIiBkYXRhLXRhZz1cIicrdGFnLmlkKydcIiB0eXBlPVwiaGlkZGVuXCIvPic7XG4gICAgICAgICAgICByZXNvdXJjZXMuZ2V0KHRhZy5pZCk7XG4gICAgICAgICAgICBjb250ZXh0LmFkZExpc3RlbmVyKFwicmVzb3VyY2VzLVwiK3RhZy5pZCwgdGFncy5sb2FkZWQpO1xuICAgICAgICB9IGVsc2UgaWYgKHRhZy52YWx1ZT09XCJpY29uXCIpIHtcbiAgICAgICAgICAgIGh0bWwgKz0gJzxkaXYgY2xhc3M9XCJmb3JtUm93XCI+JztcbiAgICAgICAgICAgIGh0bWwgKz0gJzxkaXYgaWQ9XCJUYWdfJyt0YWcuaWQrJ1wiIGRhdGEtaWQ9XCInK3RhZy5pZCsnXCIgZGF0YS1yZXNvdXJjZT1cImljb25cIiBjbGFzcz1cInJlc291cmNlIGljb25cIiB0aXRsZT1cIicrdGFnLmRlc2NyaXB0aW9uKydcIiBzdHlsZT1cImJhY2tncm91bmQtaW1hZ2U6IHVybCgnK3RhZy5kZWZhdWx0KycpXCI+PC9kaXY+PGRpdiBpZD1cIlRhZ19SZXNvdXJjZXNfJyt0YWcuaWQrJ1wiIGNsYXNzPVwicmVzb3VyY2VzXCIgZGF0YS1pZD1cIicrdGFnLmlkKydcIiBkYXRhLXJlc291cmNlcz1cImljb25cIj48L2Rpdj4nO1xuICAgICAgICAgICAgaHRtbCArPSAnPGlucHV0IGlkPVwiVGFnXycrdGFnLmlkKydfSGlkZXJcIiBkYXRhLXRhZz1cIicrdGFnLmlkKydcIiB0eXBlPVwiaGlkZGVuXCIvPic7XG4gICAgICAgICAgICByZXNvdXJjZXMuZ2V0KHRhZy5pZCk7XG4gICAgICAgICAgICBjb250ZXh0LmFkZExpc3RlbmVyKFwicmVzb3VyY2VzLVwiK3RhZy5pZCwgdGFncy5sb2FkZWQpO1xuICAgICAgICB9IGVsc2UgaWYgKHRhZy52YWx1ZT09XCJhcnJheVwiKSB7XG4gICAgICAgICAgICBodG1sICs9ICc8ZGl2IGlkPVwiVGFnXycrdGFnLmlkKydfU2VsZWN0ZWRcIj48L2Rpdj4nO1xuICAgICAgICAgICAgaHRtbCArPSAnPGlucHV0IGlkPVwiVGFnXycrdGFnLmlkKydcIiB0eXBlPVwidGV4dFwiIGRhdGEtdGFnPVwiJyt0YWcuaWQrJ1wiIGRhdGEtYXJyYXk9XCInK3RhZy5pZCsnXCIgbWF4bGVuZ3RoPVwiNTAwXCIgcGxhY2Vob2xkZXI9XCInK3RhZy5kZXNjcmlwdGlvbisnXCIgLz4nO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBodG1sO1xuICAgIH1cblxuICAgIGdldFRhZ1ZhbHVlcygpIHtcbiAgICAgICAgcmV0dXJuIHRhZ3MudmFsKCk7XG4gICAgfVxuXG4gICAgY2xvc2VGb3JtKHJlZnJlc2ggPSB0cnVlLCBpZ25vcmVDaGFuZ2VzID0gZmFsc2UsIGRhdGE/LCBldmVudD8pIHtcbiAgICAgICAgaWYgKCFpZ25vcmVDaGFuZ2VzICYmIHRoaXMuX2RhdGFDaGFuZ2UpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbmZpcm1lZCA9IGNvbmZpcm0oJ1lvdSBoYXZlIHVuc2F2ZWQgY2hhbmdlcy4gRG8geW91IHdhbnQgdG8gbGVhdmUgdGhpcyBwYWdlIGFuZCBkaXNjYXJkIHlvdXIgY2hhbmdlcyBvciBzdGF5IG9uIHRoaXMgcGFnZT8nKTtcbiAgICAgICAgICAgIGlmICghY29uZmlybWVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmlzTW9kYWwpIHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2VNb2RhbChyZWZyZXNoLCBpZ25vcmVDaGFuZ2VzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmV0dXJuVG9MaXN0UGFnZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xvc2VNb2RhbChyZWZyZXNoID0gdHJ1ZSwgaWdub3JlQ2hhbmdlcyA9IGZhbHNlLCBkYXRhPywgZXZlbnQ/KTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2xvc2UuZW1pdCh7cmVmcmVzaDogcmVmcmVzaH0pO1xuICAgICAgICBpZiAoZXZlbnQpIHtcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuVG9MaXN0UGFnZSgpIHtcbiAgICAgICAgaWYgKHRoaXMubG9jYXRpb24gJiYgdGhpcy5wcmV2aW91c1JvdXRlKSB7XG4gICAgICAgICAgICB0aGlzLmxvY2F0aW9uLmJhY2soKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucm91dGVyPy5uYXZpZ2F0ZUJ5VXJsKGAke3RoaXMuYmFzZVBhdGh9YCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ0RvQ2hlY2soKSB7XG4gICAgICAgIHRoaXMuY2hlY2tEYXRhQ2hhbmdlRGVib3VuY2VkKCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGNoZWNrRGF0YUNoYW5nZSgpIHtcbiAgICAgICAgbGV0IGluaXREYXRhID0gY2xvbmVEZWVwKHRoaXMuaW5pdERhdGEpO1xuICAgICAgICBpbml0RGF0YSA9IHRoaXMub21pdEVtcHR5RGF0YShpbml0RGF0YSk7XG4gICAgICAgIGxldCBmb3JtRGF0YSA9IGNsb25lRGVlcCh0aGlzLmZvcm1EYXRhKTtcbiAgICAgICAgZm9ybURhdGEgPSB0aGlzLm9taXRFbXB0eURhdGEoZm9ybURhdGEpO1xuICAgICAgICBjb25zdCBkYXRhQ2hhbmdlID0gIWlzRXF1YWwoaW5pdERhdGEsIGZvcm1EYXRhKTtcbiAgICAgICAgaWYgKGRhdGFDaGFuZ2UgIT09IHRoaXMuX2RhdGFDaGFuZ2UpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YUNoYW5nZS5lbWl0KGRhdGFDaGFuZ2UpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2RhdGFDaGFuZ2UgPSBkYXRhQ2hhbmdlO1xuICAgICAgICBhcHAuaXNEaXJ0eSA9IGZhbHNlO1xuICAgIH1cblxuICAgIG9taXRFbXB0eURhdGEob2JqZWN0KSB7XG4gICAgICAgIGZvckVhY2gob2JqZWN0LCAodmFsLCBrZXkpID0+IHtcbiAgICAgICAgICAgIGlmKHRoaXMub21pdERhdGFJdGVyYXRlZSh2YWwpKSB7XG4gICAgICAgICAgICAgICAgdW5zZXQob2JqZWN0LCBrZXkpO1xuICAgICAgICAgICAgfSBlbHNlIGlmKGlzT2JqZWN0KHZhbCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9taXRFbXB0eURhdGEodmFsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgfVxuXG4gICAgb21pdERhdGFJdGVyYXRlZSh2YWwpIHtcbiAgICAgICAgcmV0dXJuIGlzTmlsKHZhbCkgfHwgKGlzQXJyYXkodmFsKSAmJiBpc0VtcHR5KHZhbCkpO1xuICAgIH1cblxuICAgIGNvcHlUb0NsaXBib2FyZCh2YWwpIHtcbiAgICAgICAgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQodmFsKTtcbiAgICAgICAgY29uc3QgZ3Jvd2xlckRhdGEgPSBuZXcgR3Jvd2xlck1vZGVsKFxuICAgICAgICAgICAgJ3N1Y2Nlc3MnLFxuICAgICAgICAgICAgJ1N1Y2Nlc3MnLFxuICAgICAgICAgICAgYFRleHQgQ29waWVkYCxcbiAgICAgICAgICAgIGBBUEkgY2FsbCBVUkwgY29waWVkIHRvIGNsaXBib2FyZGAsXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuZ3Jvd2xlclNlcnZpY2Uuc2hvdyhncm93bGVyRGF0YSk7XG4gICAgfVxuXG4gICAgZ2V0Um9sZXNDTElWYXJpYWJsZShzZWxlY3RlZFJvbGVzKSB7XG4gICAgICAgIGxldCByb2xlc1ZhciA9ICcnO1xuICAgICAgICBzZWxlY3RlZFJvbGVzLmZvckVhY2goKHJvbGUsIGluZGV4KT0+IHtcbiAgICAgICAgICAgIGlmIChpbmRleCA+IDApIHtcbiAgICAgICAgICAgICAgICByb2xlc1ZhciArPSAnLCc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByb2xlc1ZhciArPSByb2xlO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJvbGVzVmFyO1xuICAgIH1cblxuICAgIGdldFJvbGVzQ1VSTFZhcmlhYmxlKHNlbGVjdGVkUm9sZXMpIHtcbiAgICAgICAgbGV0IHJvbGVzVmFyID0gJyc7XG4gICAgICAgIHNlbGVjdGVkUm9sZXMuZm9yRWFjaCgocm9sZSwgaW5kZXgpPT4ge1xuICAgICAgICAgICAgaWYgKGluZGV4ID4gMCkge1xuICAgICAgICAgICAgICAgIHJvbGVzVmFyICs9ICcsICc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByb2xlc1ZhciArPSBgXCIke3JvbGV9XCJgO1xuICAgICAgICB9KTtcbiAgICAgICAgcm9sZXNWYXIgPSBgWyR7cm9sZXNWYXJ9XWA7XG4gICAgICAgIHJldHVybiByb2xlc1ZhcjtcbiAgICB9XG5cbiAgICBjYW5EZWFjdGl2YXRlKCkge1xuICAgICAgICBpZiAodGhpcy5fZGF0YUNoYW5nZSkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbmZpcm0oJ1lvdSBoYXZlIHVuc2F2ZWQgY2hhbmdlcy4gRG8geW91IHdhbnQgdG8gbGVhdmUgdGhpcyBwYWdlIGFuZCBkaXNjYXJkIHlvdXIgY2hhbmdlcyBvciBzdGF5IG9uIHRoaXMgcGFnZT8nKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZW50aXR5VXBkYXRlZCgpIHtcbiAgICAgICAgLy9uby1vcFxuICAgIH1cblxuICAgIGdldFJvbGVBdHRyaWJ1dGVzKHR5cGU6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gdGhpcy56aXRpU2VydmljZS5nZXQodHlwZSwge30sIFtdKS50aGVuKChyZXN1bHRzKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0cy5kYXRhO1xuICAgICAgICB9KTtcbiAgICB9XG59XG4iXX0=
327
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvamVjdGFibGUtZm9ybS5jbGFzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ppdGktY29uc29sZS1saWIvc3JjL2xpYi9mZWF0dXJlcy9wcm9qZWN0YWJsZS1mb3Jtcy9wcm9qZWN0YWJsZS1mb3JtLmNsYXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztFQWNFO0FBRUYsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sb0NBQW9DLENBQUM7QUFDdkUsT0FBTyxFQUNILFNBQVMsRUFHVCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFHTCxNQUFNLEVBQ04sU0FBUyxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQXFCLE1BQU0sUUFBUSxDQUFDO0FBQ2xJLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUV4RCxPQUFPLEVBQW1CLGlCQUFpQixFQUFDLE1BQU0sdUNBQXVDLENBQUM7QUFFMUYsT0FBTyxFQUFDLGlCQUFpQixFQUFrQixNQUFNLGtDQUFrQyxDQUFDO0FBQ3BGLE9BQU8sRUFBaUIsYUFBYSxFQUFTLE1BQU0saUJBQWlCLENBQUM7QUFDdEUsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUVsQyxPQUFPLEVBQUMsZ0JBQWdCLEVBQWtCLE1BQU0saUNBQWlDLENBQUM7Ozs7Ozs7QUFFbEYsYUFBYTtBQUNiLE1BQU0sRUFBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFDLEdBQUcsTUFBTSxDQUFDO0FBRXhELE1BQU0sT0FBTyxNQUFNO0NBRWxCO0FBRUQsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHO0lBQ3JCLFVBQVUsRUFBRSxFQUFFO0lBQ2QsUUFBUSxFQUFFLEVBQUU7SUFDWixXQUFXLEVBQUUsRUFBRTtJQUNmLFVBQVUsRUFBRSxFQUFFO0NBQ2pCLENBQUM7QUFFRixNQUlzQixlQUFnQixTQUFRLG1CQUFtQjtJQWdDN0QsWUFDYyxjQUE4QixFQUNILFVBQTRCLEVBQzVCLFdBQTRCLEVBQ3ZELE1BQWUsRUFDZixLQUFzQixFQUN0QixRQUFtQixFQUNPLGVBQWlDO1FBRXJFLEtBQUssRUFBRSxDQUFDO1FBUkUsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQ0gsZUFBVSxHQUFWLFVBQVUsQ0FBa0I7UUFDNUIsZ0JBQVcsR0FBWCxXQUFXLENBQWlCO1FBQ3ZELFdBQU0sR0FBTixNQUFNLENBQVM7UUFDZixVQUFLLEdBQUwsS0FBSyxDQUFpQjtRQUN0QixhQUFRLEdBQVIsUUFBUSxDQUFXO1FBQ08sb0JBQWUsR0FBZixlQUFlLENBQWtCO1FBdENoRSxZQUFPLEdBQUcsS0FBSyxDQUFDO1FBSWYsZUFBVSxHQUFzQixJQUFJLFlBQVksRUFBTyxDQUFDO1FBTTNELFdBQU0sR0FBUSxFQUFFLENBQUM7UUFDZCxlQUFVLEdBQUcsWUFBWSxDQUFDO1FBQzFCLGdCQUFXLEdBQVEsTUFBTSxDQUFDO1FBQzFCLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFDNUIsZ0JBQVcsR0FBVSxFQUFFLENBQUM7UUFDeEIsZ0JBQVcsR0FBUSxFQUFFLENBQUM7UUFDdEIsWUFBTyxHQUFRLEVBQUUsQ0FBQztRQUNsQixhQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ2pCLGFBQVEsR0FBUSxFQUFFLENBQUM7UUFDbkIsZ0JBQVcsR0FBRyxLQUFLLENBQUM7UUFDcEIsZUFBVSxHQUFHLENBQUMsRUFBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLGNBQWMsRUFBQyxDQUFDLENBQUM7UUFDdEYsYUFBUSxHQUFHLEVBQUUsQ0FBQztRQUVkLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFFakIsY0FBUyxHQUFRLEVBQUUsQ0FBQztRQUNwQiw2QkFBd0IsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxHQUFHLEVBQUUsRUFBQyxPQUFPLEVBQUUsR0FBRyxFQUFDLENBQUMsQ0FBQztRQUMvRSxxQkFBZ0IsR0FBRyxLQUFLLENBQUM7UUFFekIsaUJBQVksR0FBaUIsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQVk1QyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLENBQUM7UUFDakcsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQ2pCLElBQUksQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNuQyxNQUFNLEVBQUUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDeEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsRUFBRTtnQkFDZCxJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQzthQUN0QjtRQUNMLENBQUMsQ0FBQyxDQUNMLENBQUM7UUFDRixJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FDakIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFVLEVBQUUsRUFBRTtZQUNuQyxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxZQUFZLGFBQWEsRUFBRTtnQkFDekMsSUFBSSxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRTtvQkFDckMsT0FBTztpQkFDVjtnQkFDRCxNQUFNLFlBQVksR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNoRSxJQUFJLENBQUMsUUFBUSxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNuQztRQUNMLENBQUMsQ0FBQyxDQUNMLENBQUM7UUFDRixJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FDakIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxjQUFjLEVBQUUsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ3BELE1BQU0sV0FBVyxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzdELElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxLQUFLLFdBQVcsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLEVBQUU7Z0JBQ3BILElBQUksQ0FBQyxTQUFTLEdBQUcsV0FBVyxDQUFDO2dCQUM3QixPQUFPO2FBQ1Y7WUFDRCxJQUFJLENBQUMsU0FBUyxHQUFHLFdBQVcsQ0FBQztZQUM3QixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDcEIsQ0FBQyxDQUFDLENBQ0wsQ0FBQztJQUNOLENBQUM7SUFFUSxlQUFlO1FBQ3BCLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztRQUNqQixJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUMxQyxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsV0FBVyxFQUFFO1lBQzlCLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1NBQzVFO0lBQ0wsQ0FBQztJQUVELFFBQVE7UUFDSixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDZixJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssUUFBUSxFQUFFO2dCQUM1QixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUN2QyxJQUFJLENBQUMsUUFBUSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ3pDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDckIsT0FBTzthQUNWO1lBQ0QsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7WUFDdEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQVcsRUFBRSxFQUFFO2dCQUNqRixJQUFJLENBQUMsUUFBUSxHQUFHLE1BQU0sRUFBRSxJQUFJLENBQUM7Z0JBQzdCLElBQUksQ0FBQyxRQUFRLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDekMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3pCLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUU7Z0JBQ1osSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7WUFDM0IsQ0FBQyxDQUFDLENBQUM7U0FDTjtJQUNMLENBQUM7SUFFRCxlQUFlLENBQUMsUUFBUTtRQUNwQixJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDNUIsT0FBTztTQUNWO1FBQ0QsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFBO0lBQ3BCLENBQUM7SUFFRCxRQUFRO1FBQ0osSUFBSSxDQUFDLFFBQVEsR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFFLEtBQUssQ0FBQztRQUN4RCxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDZixPQUFPO1NBQ1Y7UUFDRCxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBRUQsVUFBVSxDQUFDLE9BQU87UUFDZCxJQUFJLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQztRQUNwQixPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ2xCLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDdEIsSUFBSSxJQUFJLENBQUM7WUFDVCxJQUFJLEdBQUcsQ0FBQyxPQUFPLElBQUUsS0FBSyxJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBRSxDQUFDLEVBQUU7Z0JBQy9ELElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxHQUFHLENBQUM7Z0JBQ3hDLElBQUksR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUMvQixNQUFNLEtBQUssR0FBRztvQkFDVixLQUFLLEVBQUUsR0FBRyxDQUFDLEtBQUs7b0JBQ2hCLE9BQU8sRUFBRSxJQUFJO2lCQUNoQixDQUFBO2dCQUNELElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFBO2FBQy9CO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsU0FBUztRQUNMLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDbkIsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2YsT0FBTztTQUNWO1FBQ0QsS0FBSyxDQUFDLEdBQUcsRUFBRTtZQUNQLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzFCLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNsQixDQUFDLENBQUMsQ0FBQTtJQUNOLENBQUM7SUFFRCxhQUFhLENBQUMsR0FBRztRQUNiLElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUNkLElBQUksR0FBRyxDQUFDLEtBQUssSUFBRSxRQUFRLEVBQUU7WUFDckIsSUFBSSxJQUFJLGlCQUFpQixHQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUMsMEJBQTBCLEdBQUMsR0FBRyxDQUFDLEVBQUUsR0FBQyxpQ0FBaUMsR0FBQyxHQUFHLENBQUMsV0FBVyxHQUFDLE1BQU0sQ0FBQztTQUMvSDthQUFNLElBQUksR0FBRyxDQUFDLEtBQUssSUFBRSxTQUFTLEVBQUU7WUFDN0IsSUFBSSxJQUFJLGlCQUFpQixHQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUMsOEJBQThCLEdBQUMsR0FBRyxDQUFDLEVBQUUsR0FBQyxNQUFNLENBQUM7U0FDakY7YUFBTSxJQUFJLEdBQUcsQ0FBQyxLQUFLLElBQUUsS0FBSyxFQUFFO1lBQ3pCLElBQUksSUFBSSxlQUFlLEdBQUMsR0FBRyxDQUFDLEVBQUUsR0FBQyxrQkFBa0IsR0FBQyxHQUFHLENBQUMsRUFBRSxHQUFDLHNCQUFzQixDQUFDO1lBQ2hGLElBQUksSUFBSSxpQkFBaUIsR0FBQyxHQUFHLENBQUMsRUFBRSxHQUFDLDBCQUEwQixHQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUMsaUNBQWlDLEdBQUMsR0FBRyxDQUFDLFdBQVcsR0FBQyxNQUFNLENBQUM7U0FDL0g7YUFBTSxJQUFJLEdBQUcsQ0FBQyxLQUFLLElBQUUsUUFBUSxFQUFFO1lBQzVCLElBQUksSUFBSSx1QkFBdUIsQ0FBQztZQUNoQyxJQUFJLElBQUksZUFBZSxHQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUMsYUFBYSxHQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUMsZ0VBQWdFLEdBQUMsR0FBRyxDQUFDLFdBQVcsR0FBQyxpQ0FBaUMsR0FBQyxHQUFHLENBQUMsT0FBTyxHQUFDLGtDQUFrQyxHQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUMsK0JBQStCLEdBQUMsR0FBRyxDQUFDLEVBQUUsR0FBQyxrQ0FBa0MsQ0FBQztZQUN2UyxJQUFJLElBQUksaUJBQWlCLEdBQUMsR0FBRyxDQUFDLEVBQUUsR0FBQyxvQkFBb0IsR0FBQyxHQUFHLENBQUMsRUFBRSxHQUFDLG1CQUFtQixDQUFDO1lBQ2pGLFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3RCLE9BQU8sQ0FBQyxXQUFXLENBQUMsWUFBWSxHQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ3pEO2FBQU0sSUFBSSxHQUFHLENBQUMsS0FBSyxJQUFFLE1BQU0sRUFBRTtZQUMxQixJQUFJLElBQUksdUJBQXVCLENBQUM7WUFDaEMsSUFBSSxJQUFJLGVBQWUsR0FBQyxHQUFHLENBQUMsRUFBRSxHQUFDLGFBQWEsR0FBQyxHQUFHLENBQUMsRUFBRSxHQUFDLHNEQUFzRCxHQUFDLEdBQUcsQ0FBQyxXQUFXLEdBQUMsaUNBQWlDLEdBQUMsR0FBRyxDQUFDLE9BQU8sR0FBQyxrQ0FBa0MsR0FBQyxHQUFHLENBQUMsRUFBRSxHQUFDLCtCQUErQixHQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUMsZ0NBQWdDLENBQUM7WUFDM1IsSUFBSSxJQUFJLGlCQUFpQixHQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUMsb0JBQW9CLEdBQUMsR0FBRyxDQUFDLEVBQUUsR0FBQyxtQkFBbUIsQ0FBQztZQUNqRixTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN0QixPQUFPLENBQUMsV0FBVyxDQUFDLFlBQVksR0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUN6RDthQUFNLElBQUksR0FBRyxDQUFDLEtBQUssSUFBRSxPQUFPLEVBQUU7WUFDM0IsSUFBSSxJQUFJLGVBQWUsR0FBQyxHQUFHLENBQUMsRUFBRSxHQUFDLG1CQUFtQixDQUFDO1lBQ25ELElBQUksSUFBSSxpQkFBaUIsR0FBQyxHQUFHLENBQUMsRUFBRSxHQUFDLDBCQUEwQixHQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUMsZ0JBQWdCLEdBQUMsR0FBRyxDQUFDLEVBQUUsR0FBQyxpQ0FBaUMsR0FBQyxHQUFHLENBQUMsV0FBVyxHQUFDLE1BQU0sQ0FBQztTQUN2SjtRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxZQUFZO1FBQ1IsT0FBTyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVELFNBQVMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxFQUFFLGFBQWEsR0FBRyxLQUFLLEVBQUUsSUFBSyxFQUFFLEtBQU07UUFDMUQsSUFBSSxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ3BDLE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyx5R0FBeUcsQ0FBQyxDQUFDO1lBQ3JJLElBQUksQ0FBQyxTQUFTLEVBQUU7Z0JBQ1osT0FBTzthQUNWO1NBQ0o7UUFDRCxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDZCxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxhQUFhLENBQUMsQ0FBQztTQUMzQzthQUFNO1lBQ0gsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7U0FDM0I7SUFDTCxDQUFDO0lBRUQsVUFBVSxDQUFDLE9BQU8sR0FBRyxJQUFJLEVBQUUsYUFBYSxHQUFHLEtBQUssRUFBRSxJQUFLLEVBQUUsS0FBTTtRQUMzRCxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUMsQ0FBQyxDQUFDO1FBQ3BDLElBQUksS0FBSyxFQUFFO1lBQ1AsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1NBQzNCO0lBQ0wsQ0FBQztJQUVELGdCQUFnQjtRQUNaLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ3JDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7U0FDeEI7YUFBTTtZQUNILElBQUksQ0FBQyxNQUFNLEVBQUUsYUFBYSxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7U0FDbEQ7SUFDTCxDQUFDO0lBRUQsU0FBUztRQUNMLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO0lBQ3BDLENBQUM7SUFFUyxlQUFlO1FBQ3JCLElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFO1lBQ3ZCLE9BQU87U0FDVjtRQUNELElBQUksUUFBUSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDeEMsUUFBUSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDeEMsSUFBSSxRQUFRLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN4QyxRQUFRLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN4QyxNQUFNLFVBQVUsR0FBRyxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDaEQsSUFBSSxVQUFVLEtBQUssSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNqQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztTQUNwQztRQUNELElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDO1FBQzlCLEdBQUcsQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxhQUFhLENBQUMsTUFBTTtRQUNoQixPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFO1lBQ3pCLElBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUMzQixLQUFLLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO2FBQ3RCO2lCQUFNLElBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUNyQixJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQzNCO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsR0FBRztRQUNoQixPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRUQsZUFBZSxDQUFDLEdBQUc7UUFDZixTQUFTLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNuQyxNQUFNLFdBQVcsR0FBRyxJQUFJLFlBQVksQ0FDaEMsU0FBUyxFQUNULFNBQVMsRUFDVCxhQUFhLEVBQ2Isa0NBQWtDLENBQ3JDLENBQUM7UUFDRixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQsbUJBQW1CLENBQUMsYUFBYTtRQUM3QixJQUFJLFFBQVEsR0FBRyxFQUFFLENBQUM7UUFDbEIsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUMsRUFBRTtZQUNqQyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUU7Z0JBQ1gsUUFBUSxJQUFJLEdBQUcsQ0FBQzthQUNuQjtZQUNELFFBQVEsSUFBSSxJQUFJLENBQUM7UUFDckIsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLFFBQVEsQ0FBQztJQUNwQixDQUFDO0lBRUQsb0JBQW9CLENBQUMsYUFBYTtRQUM5QixJQUFJLFFBQVEsR0FBRyxFQUFFLENBQUM7UUFDbEIsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUMsRUFBRTtZQUNqQyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUU7Z0JBQ1gsUUFBUSxJQUFJLElBQUksQ0FBQzthQUNwQjtZQUNELFFBQVEsSUFBSSxJQUFJLElBQUksR0FBRyxDQUFDO1FBQzVCLENBQUMsQ0FBQyxDQUFDO1FBQ0gsUUFBUSxHQUFHLElBQUksUUFBUSxHQUFHLENBQUM7UUFDM0IsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztJQUVELGFBQWE7UUFDVCxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDbEIsT0FBTyxPQUFPLENBQUMseUdBQXlHLENBQUMsQ0FBQztTQUM3SDtRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFUyxhQUFhO1FBQ25CLE9BQU87SUFDWCxDQUFDO0lBRUQsaUJBQWlCLENBQUMsSUFBWTtRQUMxQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDdkQsT0FBTyxPQUFPLENBQUMsSUFBSSxDQUFDO1FBQ3hCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQzsrR0FwU2lCLGVBQWUsZ0RBa0NyQixpQkFBaUIsYUFDakIsaUJBQWlCLHlGQUlqQixnQkFBZ0I7bUdBdkNWLGVBQWUsZ1VBSHZCLEVBQUU7O1NBR00sZUFBZTs0RkFBZixlQUFlO2tCQUpwQyxTQUFTOytCQUNJLEVBQUU7OzBCQXFDUCxNQUFNOzJCQUFDLGlCQUFpQjs7MEJBQ3hCLE1BQU07MkJBQUMsaUJBQWlCOzswQkFJeEIsTUFBTTsyQkFBQyxnQkFBZ0I7NENBdENuQixPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDWSxRQUFRO3NCQUF6QixLQUFLO2dCQUNhLEtBQUs7c0JBQXZCLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTTtnQkFDc0IsY0FBYztzQkFBMUMsU0FBUzt1QkFBQyxnQkFBZ0IiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICAgIENvcHlyaWdodCBOZXRGb3VuZHJ5IEluYy5cblxuICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4qL1xuXG5pbXBvcnQge0V4dGVuZGFibGVDb21wb25lbnR9IGZyb20gXCIuLi9leHRlbmRhYmxlL2V4dGVuZGFibGUuY29tcG9uZW50XCI7XG5pbXBvcnQge1xuICAgIENvbXBvbmVudCxcbiAgICBEb0NoZWNrLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEluamVjdCxcbiAgICBJbnB1dCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE91dHB1dCxcbiAgICBWaWV3Q2hpbGRcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcblxuaW1wb3J0IHtkZWZlciwgaXNFcXVhbCwgdW5zZXQsIGRlYm91bmNlLCBjbG9uZURlZXAsIGZvckVhY2gsIGlzQXJyYXksIGlzRW1wdHksIGlzT2JqZWN0LCBpc05pbCwgbWFwLCBvbWl0QnksIHNsaWNlfSBmcm9tIFwibG9kYXNoXCI7XG5pbXBvcnQge0dyb3dsZXJNb2RlbH0gZnJvbSBcIi4uL21lc3NhZ2luZy9ncm93bGVyLm1vZGVsXCI7XG5pbXBvcnQge0dyb3dsZXJTZXJ2aWNlfSBmcm9tIFwiLi4vbWVzc2FnaW5nL2dyb3dsZXIuc2VydmljZVwiO1xuaW1wb3J0IHtFeHRlbnNpb25TZXJ2aWNlLCBTSEFSRURaX0VYVEVOU0lPTn0gZnJvbSBcIi4uL2V4dGVuZGFibGUvZXh0ZW5zaW9ucy1ub29wLnNlcnZpY2VcIjtcbmltcG9ydCB7SWRlbnRpdHl9IGZyb20gXCIuLi8uLi9tb2RlbHMvaWRlbnRpdHlcIjtcbmltcG9ydCB7WklUSV9EQVRBX1NFUlZJQ0UsIFppdGlEYXRhU2VydmljZX0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL3ppdGktZGF0YS5zZXJ2aWNlXCI7XG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlLCBOYXZpZ2F0aW9uRW5kLCBSb3V0ZXJ9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcbmltcG9ydCB7U3Vic2NyaXB0aW9ufSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHtMb2NhdGlvbn0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xuaW1wb3J0IHtTRVRUSU5HU19TRVJWSUNFLCBTZXR0aW5nc1NlcnZpY2V9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9zZXR0aW5ncy5zZXJ2aWNlXCI7XG5cbi8vIEB0cy1pZ25vcmVcbmNvbnN0IHtjb250ZXh0LCB0YWdzLCByZXNvdXJjZXMsIHNlcnZpY2UsIGFwcH0gPSB3aW5kb3c7XG5cbmV4cG9ydCBjbGFzcyBFbnRpdHkge1xuICAgIG5hbWU6ICcnXG59XG5cbmV4cG9ydCBjb25zdCBLRVlfQ09ERVMgPSB7XG4gICAgTEVGVF9BUlJPVzogMzcsXG4gICAgVVBfQVJST1c6IDM4LFxuICAgIFJJR0hUX0FSUk9XOiAzOSxcbiAgICBET1dOX0FSUk9XOiA0MFxufTtcblxuQENvbXBvbmVudCh7XG4gICAgdGVtcGxhdGU6ICcnLFxuICAgIHN0eWxlVXJsczogWycuL3Byb2plY3RhYmxlLWZvcm0uY2xhc3Muc2NzcyddXG59KVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFByb2plY3RhYmxlRm9ybSBleHRlbmRzIEV4dGVuZGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBEb0NoZWNrLCBPbkluaXQge1xuICAgIEBJbnB1dCgpIGlzTW9kYWwgPSBmYWxzZTtcbiAgICBASW5wdXQoKSBlbnRpdHlJZDogU3RyaW5nO1xuICAgIEBJbnB1dCgpIGFic3RyYWN0IGZvcm1EYXRhOiBhbnk7XG4gICAgQE91dHB1dCgpIGFic3RyYWN0IGNsb3NlOiBFdmVudEVtaXR0ZXI8YW55PjtcbiAgICBAT3V0cHV0KCkgZGF0YUNoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAVmlld0NoaWxkKCduYW1lRmllbGRJbnB1dCcpIG5hbWVGaWVsZElucHV0OiBFbGVtZW50UmVmO1xuXG4gICAgYWJzdHJhY3QgY2xlYXIoKTogdm9pZDtcbiAgICBhYnN0cmFjdCBzYXZlKCk6IHZvaWQ7XG5cbiAgICBwdWJsaWMgZXJyb3JzOiBhbnkgPSB7fTtcbiAgICBwcm90ZWN0ZWQgZW50aXR5VHlwZSA9ICdpZGVudGl0aWVzJztcbiAgICBwcm90ZWN0ZWQgZW50aXR5Q2xhc3M6IGFueSA9IEVudGl0eTtcbiAgICBwcm90ZWN0ZWQgaXNMb2FkaW5nID0gZmFsc2U7XG4gICAgbW9yZUFjdGlvbnM6IGFueVtdID0gW107XG4gICAgdGFnRWxlbWVudHM6IGFueSA9IFtdO1xuICAgIHRhZ0RhdGE6IGFueSA9IFtdO1xuICAgIGhpZGVUYWdzID0gZmFsc2U7XG4gICAgaW5pdERhdGE6IGFueSA9IHt9O1xuICAgIF9kYXRhQ2hhbmdlID0gZmFsc2U7XG4gICAgYXBpT3B0aW9ucyA9IFt7aWQ6ICdjbGknLCBsYWJlbDogJ0NvcHkgYXMgQ0xJJ30sIHtpZDogJ2N1cmwnLCBsYWJlbDogJ0NvcHkgYXMgQ1VSTCd9XTtcbiAgICBiYXNlUGF0aCA9ICcnO1xuICAgIHByZXZpb3VzUm91dGU7XG4gICAgc2hvd01vcmUgPSBmYWxzZTtcblxuICAgIF9zZXR0aW5nczogYW55ID0ge307XG4gICAgY2hlY2tEYXRhQ2hhbmdlRGVib3VuY2VkID0gZGVib3VuY2UodGhpcy5jaGVja0RhdGFDaGFuZ2UsIDEwMCwge21heFdhaXQ6IDEwMH0pO1xuICAgIGlnbm9yZURhdGFDaGFuZ2UgPSBmYWxzZTtcblxuICAgIHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gICAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcm90ZWN0ZWQgZ3Jvd2xlclNlcnZpY2U6IEdyb3dsZXJTZXJ2aWNlLFxuICAgICAgICBASW5qZWN0KFNIQVJFRFpfRVhURU5TSU9OKSBwcm90ZWN0ZWQgZXh0U2VydmljZTogRXh0ZW5zaW9uU2VydmljZSxcbiAgICAgICAgQEluamVjdChaSVRJX0RBVEFfU0VSVklDRSkgcHJvdGVjdGVkIHppdGlTZXJ2aWNlOiBaaXRpRGF0YVNlcnZpY2UsXG4gICAgICAgIHByb3RlY3RlZCByb3V0ZXI/OiBSb3V0ZXIsXG4gICAgICAgIHByb3RlY3RlZCByb3V0ZT86IEFjdGl2YXRlZFJvdXRlLFxuICAgICAgICBwcm90ZWN0ZWQgbG9jYXRpb24/OiBMb2NhdGlvbixcbiAgICAgICAgQEluamVjdChTRVRUSU5HU19TRVJWSUNFKSBwcm90ZWN0ZWQgc2V0dGluZ3NTZXJ2aWNlPzogU2V0dGluZ3NTZXJ2aWNlLFxuICAgICkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLnByZXZpb3VzUm91dGUgPSB0aGlzLnJvdXRlci5nZXRDdXJyZW50TmF2aWdhdGlvbigpLnByZXZpb3VzTmF2aWdhdGlvbj8uZmluYWxVcmw/LnRvU3RyaW5nKCk7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uLmFkZChcbiAgICAgICAgICAgIHRoaXMucm91dGU/LnBhcmFtcz8uc3Vic2NyaWJlKHBhcmFtcyA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgaWQgPSBwYXJhbXNbJ2lkJ107XG4gICAgICAgICAgICAgICAgaWYgKCFpc0VtcHR5KGlkKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVudGl0eUlkID0gaWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24uYWRkKFxuICAgICAgICAgICAgcm91dGVyLmV2ZW50cy5zdWJzY3JpYmUoKGV2ZW50OiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZXZlbnQgPT4gZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRW5kKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghZXZlbnQ/LnNuYXBzaG90Py5yb3V0ZUNvbmZpZz8ucGF0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhdGhTZWdtZW50cyA9IGV2ZW50LnNuYXBzaG90LnJvdXRlQ29uZmlnLnBhdGguc3BsaXQoJy8nKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5iYXNlUGF0aCA9IHBhdGhTZWdtZW50c1swXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbi5hZGQoXG4gICAgICAgICAgICB0aGlzLnNldHRpbmdzU2VydmljZS5zZXR0aW5nc0NoYW5nZT8uc3Vic2NyaWJlKHBhcmFtcyA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3U2V0dGluZ3MgPSBjbG9uZURlZXAodGhpcy5zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3MpO1xuICAgICAgICAgICAgICAgIGlmICghaXNFbXB0eSh0aGlzLmZvcm1EYXRhPy5pZCkgJiYgKGlzRW1wdHkodGhpcy5fc2V0dGluZ3MpIHx8IHRoaXMuX3NldHRpbmdzLnNlc3Npb24/LmlkID09PSBuZXdTZXR0aW5ncy5zZXNzaW9uPy5pZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2V0dGluZ3MgPSBuZXdTZXR0aW5ncztcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLl9zZXR0aW5ncyA9IG5ld1NldHRpbmdzO1xuICAgICAgICAgICAgICAgIHRoaXMubmdPbkluaXQoKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgb3ZlcnJpZGUgbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAgICBzdXBlci5uZ0FmdGVyVmlld0luaXQoKTtcbiAgICAgICAgdGhpcy5lcnJvcnMgPSB7fTtcbiAgICAgICAgdGhpcy5uYW1lRmllbGRJbnB1dC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIGlmICh0aGlzLmV4dFNlcnZpY2U/Lm1vcmVBY3Rpb25zKSB7XG4gICAgICAgICAgICB0aGlzLm1vcmVBY3Rpb25zID0gWy4uLnRoaXMubW9yZUFjdGlvbnMsIC4uLnRoaXMuZXh0U2VydmljZS5tb3JlQWN0aW9uc107XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgaWYgKHRoaXMuZW50aXR5SWQpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmVudGl0eUlkID09PSAnY3JlYXRlJykge1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybURhdGEgPSBuZXcgdGhpcy5lbnRpdHlDbGFzcygpO1xuICAgICAgICAgICAgICAgIHRoaXMuaW5pdERhdGEgPSBjbG9uZURlZXAodGhpcy5mb3JtRGF0YSk7XG4gICAgICAgICAgICAgICAgdGhpcy5lbnRpdHlVcGRhdGVkKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy56aXRpU2VydmljZS5nZXRTdWJkYXRhKHRoaXMuZW50aXR5VHlwZSwgdGhpcy5lbnRpdHlJZCwgJycpLnRoZW4oKGVudGl0eTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtRGF0YSA9IGVudGl0eT8uZGF0YTtcbiAgICAgICAgICAgICAgICB0aGlzLmluaXREYXRhID0gY2xvbmVEZWVwKHRoaXMuZm9ybURhdGEpO1xuICAgICAgICAgICAgICAgIHRoaXMuZW50aXR5VXBkYXRlZCgpO1xuICAgICAgICAgICAgfSkuZmluYWxseSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2hvd01vcmVDaGFuZ2VkKHNob3dNb3JlKSB7XG4gICAgICAgIGlmICghc2hvd01vcmUgfHwgdGhpcy5oaWRlVGFncykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVzZXRUYWdzKClcbiAgICB9XG5cbiAgICBsb2FkVGFncygpIHtcbiAgICAgICAgdGhpcy5oaWRlVGFncyA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiaGlkZVRhZ3NcIik9PVwieWVzXCI7XG4gICAgICAgIGlmICh0aGlzLmhpZGVUYWdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgc2VydmljZS5jYWxsKFwidGFnc1wiLCB7fSwgdGhpcy50YWdzTG9hZGVkLmJpbmQodGhpcykpO1xuICAgIH1cblxuICAgIHRhZ3NMb2FkZWQocmVzdWx0cykge1xuICAgICAgICB0YWdzLmRhdGEgPSByZXN1bHRzO1xuICAgICAgICBjb250ZXh0LnNldCh0YWdzLm5hbWUsIHRhZ3MuZGF0YSk7XG4gICAgICAgIHRhZ3MudGFnRGF0YSA9IFtdO1xuICAgICAgICB0YWdzLmRhdGEuZm9yRWFjaCgodGFnKSA9PiB7XG4gICAgICAgICAgICBsZXQgaHRtbDtcbiAgICAgICAgICAgIGlmICh0YWcub2JqZWN0cz09XCJhbGxcIiB8fCB0YWcub2JqZWN0cy5pbmRleE9mKHRoaXMuZW50aXR5VHlwZSk+PTApIHtcbiAgICAgICAgICAgICAgICB0YWdzLnRhZ0RhdGFbdGFncy50YWdEYXRhLmxlbmd0aF0gPSB0YWc7XG4gICAgICAgICAgICAgICAgaHRtbCA9IHRoaXMuZ2V0VGFnQ29udGVudCh0YWcpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRhZ0VsID0ge1xuICAgICAgICAgICAgICAgICAgICBsYWJlbDogdGFnLmxhYmVsLFxuICAgICAgICAgICAgICAgICAgICBjb250ZW50OiBodG1sXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMudGFnRWxlbWVudHMucHVzaCh0YWdFbClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmVzZXRUYWdzKCkge1xuICAgICAgICB1bnNldCh0YWdzLCAnbWFwJyk7XG4gICAgICAgIGlmICh0aGlzLmhpZGVUYWdzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZGVmZXIoKCkgPT4ge1xuICAgICAgICAgICAgdGFncy5yZXNldCh0aGlzLmZvcm1EYXRhKTtcbiAgICAgICAgICAgIHRhZ3MuZXZlbnRzKCk7XG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgZ2V0VGFnQ29udGVudCh0YWcpIHtcbiAgICAgICAgbGV0IGh0bWwgPSAnJztcbiAgICAgICAgaWYgKHRhZy52YWx1ZT09XCJzdHJpbmdcIikge1xuICAgICAgICAgICAgaHRtbCArPSAnPGlucHV0IGlkPVwiVGFnXycrdGFnLmlkKydcIiB0eXBlPVwidGV4dFwiIGRhdGEtdGFnPVwiJyt0YWcuaWQrJ1wiIG1heGxlbmd0aD1cIjUwMFwiIHBsYWNlaG9sZGVyPVwiJyt0YWcuZGVzY3JpcHRpb24rJ1wiIC8+JztcbiAgICAgICAgfSBlbHNlIGlmICh0YWcudmFsdWU9PVwiYm9vbGVhblwiKSB7XG4gICAgICAgICAgICBodG1sICs9ICc8aW5wdXQgaWQ9XCJUYWdfJyt0YWcuaWQrJ1wiIHR5cGU9XCJjaGVja2JveFwiIGRhdGEtdGFnPVwiJyt0YWcuaWQrJ1wiIC8+JztcbiAgICAgICAgfSBlbHNlIGlmICh0YWcudmFsdWU9PVwibWFwXCIpIHtcbiAgICAgICAgICAgIGh0bWwgKz0gJzxkaXYgaWQ9XCJUYWdfJyt0YWcuaWQrJ19NYXBcIiBkYXRhLW1hcD1cIicrdGFnLmlkKydcIiBjbGFzcz1cIm1hcFwiPjwvZGl2Pic7XG4gICAgICAgICAgICBodG1sICs9ICc8aW5wdXQgaWQ9XCJUYWdfJyt0YWcuaWQrJ1wiIHR5cGU9XCJ0ZXh0XCIgZGF0YS10YWc9XCInK3RhZy5pZCsnXCIgbWF4bGVuZ3RoPVwiNTAwXCIgcGxhY2Vob2xkZXI9XCInK3RhZy5kZXNjcmlwdGlvbisnXCIgLz4nO1xuICAgICAgICB9IGVsc2UgaWYgKHRhZy52YWx1ZT09XCJhdmF0YXJcIikge1xuICAgICAgICAgICAgaHRtbCArPSAnPGRpdiBjbGFzcz1cImZvcm1Sb3dcIj4nO1xuICAgICAgICAgICAgaHRtbCArPSAnPGRpdiBpZD1cIlRhZ18nK3RhZy5pZCsnXCIgZGF0YS1pZD1cIicrdGFnLmlkKydcIiBkYXRhLXJlc291cmNlPVwiYXZhdGFyXCIgY2xhc3M9XCJyZXNvdXJjZSBpY29uIHByb2ZpbGVcIiB0aXRsZT1cIicrdGFnLmRlc2NyaXB0aW9uKydcIiBzdHlsZT1cImJhY2tncm91bmQtaW1hZ2U6IHVybCgnK3RhZy5kZWZhdWx0KycpXCI+PC9kaXY+PGRpdiBpZD1cIlRhZ19SZXNvdXJjZXNfJyt0YWcuaWQrJ1wiIGNsYXNzPVwicmVzb3VyY2VzXCIgZGF0YS1pZD1cIicrdGFnLmlkKydcIiBkYXRhLXJlc291cmNlcz1cImF2YXRhclwiPjwvZGl2Pic7XG4gICAgICAgICAgICBodG1sICs9ICc8aW5wdXQgaWQ9XCJUYWdfJyt0YWcuaWQrJ19IaWRlclwiIGRhdGEtdGFnPVwiJyt0YWcuaWQrJ1wiIHR5cGU9XCJoaWRkZW5cIi8+JztcbiAgICAgICAgICAgIHJlc291cmNlcy5nZXQodGFnLmlkKTtcbiAgICAgICAgICAgIGNvbnRleHQuYWRkTGlzdGVuZXIoXCJyZXNvdXJjZXMtXCIrdGFnLmlkLCB0YWdzLmxvYWRlZCk7XG4gICAgICAgIH0gZWxzZSBpZiAodGFnLnZhbHVlPT1cImljb25cIikge1xuICAgICAgICAgICAgaHRtbCArPSAnPGRpdiBjbGFzcz1cImZvcm1Sb3dcIj4nO1xuICAgICAgICAgICAgaHRtbCArPSAnPGRpdiBpZD1cIlRhZ18nK3RhZy5pZCsnXCIgZGF0YS1pZD1cIicrdGFnLmlkKydcIiBkYXRhLXJlc291cmNlPVwiaWNvblwiIGNsYXNzPVwicmVzb3VyY2UgaWNvblwiIHRpdGxlPVwiJyt0YWcuZGVzY3JpcHRpb24rJ1wiIHN0eWxlPVwiYmFja2dyb3VuZC1pbWFnZTogdXJsKCcrdGFnLmRlZmF1bHQrJylcIj48L2Rpdj48ZGl2IGlkPVwiVGFnX1Jlc291cmNlc18nK3RhZy5pZCsnXCIgY2xhc3M9XCJyZXNvdXJjZXNcIiBkYXRhLWlkPVwiJyt0YWcuaWQrJ1wiIGRhdGEtcmVzb3VyY2VzPVwiaWNvblwiPjwvZGl2Pic7XG4gICAgICAgICAgICBodG1sICs9ICc8aW5wdXQgaWQ9XCJUYWdfJyt0YWcuaWQrJ19IaWRlclwiIGRhdGEtdGFnPVwiJyt0YWcuaWQrJ1wiIHR5cGU9XCJoaWRkZW5cIi8+JztcbiAgICAgICAgICAgIHJlc291cmNlcy5nZXQodGFnLmlkKTtcbiAgICAgICAgICAgIGNvbnRleHQuYWRkTGlzdGVuZXIoXCJyZXNvdXJjZXMtXCIrdGFnLmlkLCB0YWdzLmxvYWRlZCk7XG4gICAgICAgIH0gZWxzZSBpZiAodGFnLnZhbHVlPT1cImFycmF5XCIpIHtcbiAgICAgICAgICAgIGh0bWwgKz0gJzxkaXYgaWQ9XCJUYWdfJyt0YWcuaWQrJ19TZWxlY3RlZFwiPjwvZGl2Pic7XG4gICAgICAgICAgICBodG1sICs9ICc8aW5wdXQgaWQ9XCJUYWdfJyt0YWcuaWQrJ1wiIHR5cGU9XCJ0ZXh0XCIgZGF0YS10YWc9XCInK3RhZy5pZCsnXCIgZGF0YS1hcnJheT1cIicrdGFnLmlkKydcIiBtYXhsZW5ndGg9XCI1MDBcIiBwbGFjZWhvbGRlcj1cIicrdGFnLmRlc2NyaXB0aW9uKydcIiAvPic7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGh0bWw7XG4gICAgfVxuXG4gICAgZ2V0VGFnVmFsdWVzKCkge1xuICAgICAgICByZXR1cm4gdGFncy52YWwoKTtcbiAgICB9XG5cbiAgICBjbG9zZUZvcm0ocmVmcmVzaCA9IHRydWUsIGlnbm9yZUNoYW5nZXMgPSBmYWxzZSwgZGF0YT8sIGV2ZW50Pykge1xuICAgICAgICBpZiAoIWlnbm9yZUNoYW5nZXMgJiYgdGhpcy5fZGF0YUNoYW5nZSkge1xuICAgICAgICAgICAgY29uc3QgY29uZmlybWVkID0gY29uZmlybSgnWW91IGhhdmUgdW5zYXZlZCBjaGFuZ2VzLiBEbyB5b3Ugd2FudCB0byBsZWF2ZSB0aGlzIHBhZ2UgYW5kIGRpc2NhcmQgeW91ciBjaGFuZ2VzIG9yIHN0YXkgb24gdGhpcyBwYWdlPycpO1xuICAgICAgICAgICAgaWYgKCFjb25maXJtZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaXNNb2RhbCkge1xuICAgICAgICAgICAgdGhpcy5jbG9zZU1vZGFsKHJlZnJlc2gsIGlnbm9yZUNoYW5nZXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yZXR1cm5Ub0xpc3RQYWdlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbG9zZU1vZGFsKHJlZnJlc2ggPSB0cnVlLCBpZ25vcmVDaGFuZ2VzID0gZmFsc2UsIGRhdGE/LCBldmVudD8pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jbG9zZS5lbWl0KHtyZWZyZXNoOiByZWZyZXNofSk7XG4gICAgICAgIGlmIChldmVudCkge1xuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm5Ub0xpc3RQYWdlKCkge1xuICAgICAgICBpZiAodGhpcy5sb2NhdGlvbiAmJiB0aGlzLnByZXZpb3VzUm91dGUpIHtcbiAgICAgICAgICAgIHRoaXMubG9jYXRpb24uYmFjaygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yb3V0ZXI/Lm5hdmlnYXRlQnlVcmwoYCR7dGhpcy5iYXNlUGF0aH1gKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nRG9DaGVjaygpIHtcbiAgICAgICAgdGhpcy5jaGVja0RhdGFDaGFuZ2VEZWJvdW5jZWQoKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgY2hlY2tEYXRhQ2hhbmdlKCkge1xuICAgICAgICBpZiAodGhpcy5pZ25vcmVEYXRhQ2hhbmdlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGluaXREYXRhID0gY2xvbmVEZWVwKHRoaXMuaW5pdERhdGEpO1xuICAgICAgICBpbml0RGF0YSA9IHRoaXMub21pdEVtcHR5RGF0YShpbml0RGF0YSk7XG4gICAgICAgIGxldCBmb3JtRGF0YSA9IGNsb25lRGVlcCh0aGlzLmZvcm1EYXRhKTtcbiAgICAgICAgZm9ybURhdGEgPSB0aGlzLm9taXRFbXB0eURhdGEoZm9ybURhdGEpO1xuICAgICAgICBjb25zdCBkYXRhQ2hhbmdlID0gIWlzRXF1YWwoaW5pdERhdGEsIGZvcm1EYXRhKTtcbiAgICAgICAgaWYgKGRhdGFDaGFuZ2UgIT09IHRoaXMuX2RhdGFDaGFuZ2UpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YUNoYW5nZS5lbWl0KGRhdGFDaGFuZ2UpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2RhdGFDaGFuZ2UgPSBkYXRhQ2hhbmdlO1xuICAgICAgICBhcHAuaXNEaXJ0eSA9IGZhbHNlO1xuICAgIH1cblxuICAgIG9taXRFbXB0eURhdGEob2JqZWN0KSB7XG4gICAgICAgIGZvckVhY2gob2JqZWN0LCAodmFsLCBrZXkpID0+IHtcbiAgICAgICAgICAgIGlmKHRoaXMub21pdERhdGFJdGVyYXRlZSh2YWwpKSB7XG4gICAgICAgICAgICAgICAgdW5zZXQob2JqZWN0LCBrZXkpO1xuICAgICAgICAgICAgfSBlbHNlIGlmKGlzT2JqZWN0KHZhbCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9taXRFbXB0eURhdGEodmFsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgfVxuXG4gICAgb21pdERhdGFJdGVyYXRlZSh2YWwpIHtcbiAgICAgICAgcmV0dXJuIGlzTmlsKHZhbCkgfHwgKGlzQXJyYXkodmFsKSAmJiBpc0VtcHR5KHZhbCkpO1xuICAgIH1cblxuICAgIGNvcHlUb0NsaXBib2FyZCh2YWwpIHtcbiAgICAgICAgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQodmFsKTtcbiAgICAgICAgY29uc3QgZ3Jvd2xlckRhdGEgPSBuZXcgR3Jvd2xlck1vZGVsKFxuICAgICAgICAgICAgJ3N1Y2Nlc3MnLFxuICAgICAgICAgICAgJ1N1Y2Nlc3MnLFxuICAgICAgICAgICAgYFRleHQgQ29waWVkYCxcbiAgICAgICAgICAgIGBBUEkgY2FsbCBVUkwgY29waWVkIHRvIGNsaXBib2FyZGAsXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuZ3Jvd2xlclNlcnZpY2Uuc2hvdyhncm93bGVyRGF0YSk7XG4gICAgfVxuXG4gICAgZ2V0Um9sZXNDTElWYXJpYWJsZShzZWxlY3RlZFJvbGVzKSB7XG4gICAgICAgIGxldCByb2xlc1ZhciA9ICcnO1xuICAgICAgICBzZWxlY3RlZFJvbGVzLmZvckVhY2goKHJvbGUsIGluZGV4KT0+IHtcbiAgICAgICAgICAgIGlmIChpbmRleCA+IDApIHtcbiAgICAgICAgICAgICAgICByb2xlc1ZhciArPSAnLCc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByb2xlc1ZhciArPSByb2xlO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJvbGVzVmFyO1xuICAgIH1cblxuICAgIGdldFJvbGVzQ1VSTFZhcmlhYmxlKHNlbGVjdGVkUm9sZXMpIHtcbiAgICAgICAgbGV0IHJvbGVzVmFyID0gJyc7XG4gICAgICAgIHNlbGVjdGVkUm9sZXMuZm9yRWFjaCgocm9sZSwgaW5kZXgpPT4ge1xuICAgICAgICAgICAgaWYgKGluZGV4ID4gMCkge1xuICAgICAgICAgICAgICAgIHJvbGVzVmFyICs9ICcsICc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByb2xlc1ZhciArPSBgXCIke3JvbGV9XCJgO1xuICAgICAgICB9KTtcbiAgICAgICAgcm9sZXNWYXIgPSBgWyR7cm9sZXNWYXJ9XWA7XG4gICAgICAgIHJldHVybiByb2xlc1ZhcjtcbiAgICB9XG5cbiAgICBjYW5EZWFjdGl2YXRlKCkge1xuICAgICAgICBpZiAodGhpcy5fZGF0YUNoYW5nZSkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbmZpcm0oJ1lvdSBoYXZlIHVuc2F2ZWQgY2hhbmdlcy4gRG8geW91IHdhbnQgdG8gbGVhdmUgdGhpcyBwYWdlIGFuZCBkaXNjYXJkIHlvdXIgY2hhbmdlcyBvciBzdGF5IG9uIHRoaXMgcGFnZT8nKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZW50aXR5VXBkYXRlZCgpIHtcbiAgICAgICAgLy9uby1vcFxuICAgIH1cblxuICAgIGdldFJvbGVBdHRyaWJ1dGVzKHR5cGU6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gdGhpcy56aXRpU2VydmljZS5nZXQodHlwZSwge30sIFtdKS50aGVuKChyZXN1bHRzKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0cy5kYXRhO1xuICAgICAgICB9KTtcbiAgICB9XG59XG4iXX0=