@wavemaker/app-ng-runtime 11.14.2-rc.6311 → 11.15.0-1.246

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 (177) hide show
  1. package/build-task/bundles/index.umd.js +13 -2
  2. package/build-task/esm2022/input/default/checkbox/checkbox.build.mjs +9 -2
  3. package/build-task/esm2022/input/default/radioset/radioset.build.mjs +6 -2
  4. package/build-task/fesm2022/index.mjs +13 -2
  5. package/build-task/fesm2022/index.mjs.map +1 -1
  6. package/components/base/bundles/index.umd.js +271 -128
  7. package/components/base/esm2022/public_api.mjs +2 -2
  8. package/components/base/esm2022/utils/autolayout-utils.mjs +252 -0
  9. package/components/base/esm2022/utils/live-utils.mjs +10 -7
  10. package/components/base/esm2022/utils/widget-utils.mjs +8 -1
  11. package/components/base/esm2022/widgets/common/base/base.component.mjs +7 -8
  12. package/components/base/esm2022/widgets/common/base/partial-container.directive.mjs +4 -1
  13. package/components/base/esm2022/widgets/common/container/container.directive.mjs +28 -150
  14. package/components/base/esm2022/widgets/common/container/container.props.mjs +6 -2
  15. package/components/base/fesm2022/index.mjs +273 -129
  16. package/components/base/fesm2022/index.mjs.map +1 -1
  17. package/components/base/public_api.d.ts +1 -1
  18. package/components/base/utils/autolayout-utils.d.ts +29 -0
  19. package/components/base/utils/widget-utils.d.ts +1 -0
  20. package/components/base/widgets/common/container/container.directive.d.ts +7 -9
  21. package/components/basic/label/bundles/index.umd.js +4 -0
  22. package/components/basic/label/esm2022/label.directive.mjs +5 -1
  23. package/components/basic/label/fesm2022/index.mjs +4 -0
  24. package/components/basic/label/fesm2022/index.mjs.map +1 -1
  25. package/components/basic/search/bundles/index.umd.js +13 -11
  26. package/components/basic/search/esm2022/search.component.mjs +14 -12
  27. package/components/basic/search/fesm2022/index.mjs +13 -11
  28. package/components/basic/search/fesm2022/index.mjs.map +1 -1
  29. package/components/chart/bundles/index.umd.js +2 -2
  30. package/components/chart/esm2022/chart.utils.mjs +3 -3
  31. package/components/chart/fesm2022/index.mjs +2 -2
  32. package/components/chart/fesm2022/index.mjs.map +1 -1
  33. package/components/containers/accordion/accordion-pane/accordion-pane.component.d.ts +2 -0
  34. package/components/containers/accordion/accordion.directive.d.ts +4 -0
  35. package/components/containers/accordion/bundles/index.umd.js +34 -0
  36. package/components/containers/accordion/esm2022/accordion-pane/accordion-pane.component.mjs +6 -2
  37. package/components/containers/accordion/esm2022/accordion.directive.mjs +32 -2
  38. package/components/containers/accordion/fesm2022/index.mjs +36 -2
  39. package/components/containers/accordion/fesm2022/index.mjs.map +1 -1
  40. package/components/containers/tabs/bundles/index.umd.js +34 -0
  41. package/components/containers/tabs/esm2022/tab-pane/tab-pane.component.mjs +6 -2
  42. package/components/containers/tabs/esm2022/tabs.component.mjs +33 -4
  43. package/components/containers/tabs/fesm2022/index.mjs +36 -2
  44. package/components/containers/tabs/fesm2022/index.mjs.map +1 -1
  45. package/components/containers/tabs/tab-pane/tab-pane.component.d.ts +2 -0
  46. package/components/containers/tabs/tabs.component.d.ts +5 -1
  47. package/components/containers/wizard/bundles/index.umd.js +46 -2
  48. package/components/containers/wizard/esm2022/wizard-step/wizard-step.component.mjs +8 -2
  49. package/components/containers/wizard/esm2022/wizard.component.mjs +42 -4
  50. package/components/containers/wizard/fesm2022/index.mjs +48 -4
  51. package/components/containers/wizard/fesm2022/index.mjs.map +1 -1
  52. package/components/containers/wizard/wizard-step/wizard-step.component.d.ts +4 -0
  53. package/components/containers/wizard/wizard.component.d.ts +1 -0
  54. package/components/data/form/bundles/index.umd.js +28 -1
  55. package/components/data/form/esm2022/form-field/form-field.directive.mjs +4 -1
  56. package/components/data/form/esm2022/form.component.mjs +24 -2
  57. package/components/data/form/esm2022/form.props.mjs +3 -2
  58. package/components/data/form/esm2022/live-filter/live-filter.directive.mjs +2 -1
  59. package/components/data/form/fesm2022/index.mjs +29 -2
  60. package/components/data/form/fesm2022/index.mjs.map +1 -1
  61. package/components/data/form/form.component.d.ts +3 -0
  62. package/components/data/list/bundles/index.umd.js +0 -9
  63. package/components/data/list/esm2022/list-item.directive.mjs +1 -10
  64. package/components/data/list/fesm2022/index.mjs +0 -9
  65. package/components/data/list/fesm2022/index.mjs.map +1 -1
  66. package/components/data/pagination/bundles/index.umd.js +6 -2
  67. package/components/data/pagination/esm2022/pagination.component.mjs +7 -3
  68. package/components/data/pagination/fesm2022/index.mjs +6 -2
  69. package/components/data/pagination/fesm2022/index.mjs.map +1 -1
  70. package/components/data/table/bundles/index.umd.js +21 -4
  71. package/components/data/table/esm2022/table.component.mjs +22 -5
  72. package/components/data/table/fesm2022/index.mjs +21 -4
  73. package/components/data/table/fesm2022/index.mjs.map +1 -1
  74. package/components/dialogs/alert-dialog/alert-dialog.component.d.ts +6 -2
  75. package/components/dialogs/alert-dialog/bundles/index.umd.js +18 -8
  76. package/components/dialogs/alert-dialog/esm2022/alert-dialog.component.mjs +17 -7
  77. package/components/dialogs/alert-dialog/fesm2022/index.mjs +15 -5
  78. package/components/dialogs/alert-dialog/fesm2022/index.mjs.map +1 -1
  79. package/components/input/checkbox/bundles/index.umd.js +12 -3
  80. package/components/input/checkbox/checkbox.component.d.ts +2 -0
  81. package/components/input/checkbox/esm2022/checkbox.component.mjs +9 -3
  82. package/components/input/checkbox/esm2022/checkbox.props.mjs +5 -2
  83. package/components/input/checkbox/fesm2022/index.mjs +12 -3
  84. package/components/input/checkbox/fesm2022/index.mjs.map +1 -1
  85. package/components/input/checkboxset/bundles/index.umd.js +12 -1
  86. package/components/input/checkboxset/checkboxset.component.d.ts +1 -0
  87. package/components/input/checkboxset/esm2022/checkboxset.component.mjs +11 -1
  88. package/components/input/checkboxset/esm2022/checkboxset.props.mjs +3 -2
  89. package/components/input/checkboxset/fesm2022/index.mjs +12 -1
  90. package/components/input/checkboxset/fesm2022/index.mjs.map +1 -1
  91. package/components/input/epoch/base-date-time/base-date-time.component.d.ts +0 -1
  92. package/components/input/epoch/base-date-time/bundles/index.umd.js +29 -27
  93. package/components/input/epoch/base-date-time/esm2022/base-date-time.component.mjs +30 -28
  94. package/components/input/epoch/base-date-time/fesm2022/index.mjs +29 -27
  95. package/components/input/epoch/base-date-time/fesm2022/index.mjs.map +1 -1
  96. package/components/input/epoch/date/bundles/index.umd.js +4 -3
  97. package/components/input/epoch/date/esm2022/date.component.mjs +5 -4
  98. package/components/input/epoch/date/fesm2022/index.mjs +4 -3
  99. package/components/input/epoch/date/fesm2022/index.mjs.map +1 -1
  100. package/components/input/epoch/date-time/bundles/index.umd.js +5 -4
  101. package/components/input/epoch/date-time/esm2022/date-time.component.mjs +7 -6
  102. package/components/input/epoch/date-time/fesm2022/index.mjs +6 -5
  103. package/components/input/epoch/date-time/fesm2022/index.mjs.map +1 -1
  104. package/components/input/file-upload/bundles/index.umd.js +1 -1
  105. package/components/input/file-upload/esm2022/file-upload.props.mjs +2 -2
  106. package/components/input/file-upload/fesm2022/index.mjs +1 -1
  107. package/components/input/file-upload/fesm2022/index.mjs.map +1 -1
  108. package/components/input/radioset/bundles/index.umd.js +13 -1
  109. package/components/input/radioset/esm2022/radioset.component.mjs +11 -1
  110. package/components/input/radioset/esm2022/radioset.props.mjs +4 -2
  111. package/components/input/radioset/fesm2022/index.mjs +13 -1
  112. package/components/input/radioset/fesm2022/index.mjs.map +1 -1
  113. package/components/input/radioset/radioset.component.d.ts +1 -0
  114. package/components/input/slider/bundles/index.umd.js +86 -16
  115. package/components/input/slider/esm2022/slider.component.mjs +76 -9
  116. package/components/input/slider/esm2022/slider.props.mjs +5 -1
  117. package/components/input/slider/fesm2022/index.mjs +79 -8
  118. package/components/input/slider/fesm2022/index.mjs.map +1 -1
  119. package/components/input/slider/slider.component.d.ts +12 -3
  120. package/components/input/text/bundles/index.umd.js +24 -3
  121. package/components/input/text/esm2022/input-text/input-text.component.mjs +6 -3
  122. package/components/input/text/esm2022/input-text/input-text.props.mjs +5 -2
  123. package/components/input/text/esm2022/number-locale/number-locale.mjs +16 -1
  124. package/components/input/text/fesm2022/index.mjs +24 -3
  125. package/components/input/text/fesm2022/index.mjs.map +1 -1
  126. package/components/input/text/input-text/input-text.component.d.ts +4 -0
  127. package/components/input/text/number-locale/number-locale.d.ts +12 -0
  128. package/components/navigation/breadcrumb/bundles/index.umd.js +2 -2
  129. package/components/navigation/breadcrumb/esm2022/breadcrumb.component.mjs +3 -3
  130. package/components/navigation/breadcrumb/fesm2022/index.mjs +2 -2
  131. package/components/navigation/breadcrumb/fesm2022/index.mjs.map +1 -1
  132. package/components/navigation/popover/bundles/index.umd.js +12 -0
  133. package/components/navigation/popover/esm2022/popover.component.mjs +13 -1
  134. package/components/navigation/popover/fesm2022/index.mjs +12 -0
  135. package/components/navigation/popover/fesm2022/index.mjs.map +1 -1
  136. package/components/navigation/popover/popover.component.d.ts +2 -0
  137. package/components/page/default/bundles/index.umd.js +0 -4
  138. package/components/page/default/esm2022/router-outlet.directive.mjs +1 -5
  139. package/components/page/default/fesm2022/index.mjs +0 -4
  140. package/components/page/default/fesm2022/index.mjs.map +1 -1
  141. package/components/page/header/bundles/index.umd.js +4 -3
  142. package/components/page/header/esm2022/header.component.mjs +5 -4
  143. package/components/page/header/fesm2022/index.mjs +4 -3
  144. package/components/page/header/fesm2022/index.mjs.map +1 -1
  145. package/components/page/header/header.component.d.ts +2 -1
  146. package/core/bundles/index.umd.js +90 -6
  147. package/core/enums/enums.d.ts +1 -0
  148. package/core/esm2022/enums/enums.mjs +2 -1
  149. package/core/esm2022/utils/build-utils.mjs +5 -1
  150. package/core/esm2022/utils/utils.mjs +5 -2
  151. package/core/esm2022/utils/watcher.mjs +83 -4
  152. package/core/fesm2022/index.mjs +91 -4
  153. package/core/fesm2022/index.mjs.map +1 -1
  154. package/core/utils/watcher.d.ts +2 -0
  155. package/npm-shrinkwrap.json +2 -2
  156. package/oAuth/esm2022/oAuth.service.mjs +1 -1
  157. package/oAuth/fesm2022/index.mjs.map +1 -1
  158. package/oAuth/oAuth.service.d.ts +1 -1
  159. package/package-lock.json +2 -2
  160. package/package.json +1 -1
  161. package/runtime/base/bundles/index.umd.js +33 -31
  162. package/runtime/base/components/base-prefab.component.d.ts +6 -4
  163. package/runtime/base/esm2022/components/app-component/app.component.mjs +1 -1
  164. package/runtime/base/esm2022/components/base-page.component.mjs +2 -5
  165. package/runtime/base/esm2022/components/base-partial.component.mjs +2 -2
  166. package/runtime/base/esm2022/components/base-prefab.component.mjs +20 -12
  167. package/runtime/base/esm2022/components/base-spa-page.component.mjs +1 -4
  168. package/runtime/base/esm2022/services/http-interceptor.services.mjs +14 -13
  169. package/runtime/base/fesm2022/index.mjs +34 -31
  170. package/runtime/base/fesm2022/index.mjs.map +1 -1
  171. package/runtime/base/runtime-base.module.d.ts +2 -1
  172. package/runtime/dynamic/app/app.config.d.ts +1 -1
  173. package/runtime/dynamic/bundles/index.umd.js +1 -1
  174. package/runtime/dynamic/esm2022/app/app.config.mjs +7 -7
  175. package/runtime/dynamic/fesm2022/index.mjs +2 -2
  176. package/runtime/dynamic/fesm2022/index.mjs.map +1 -1
  177. package/scripts/datatable/datatable.js +17 -15
@@ -85,6 +85,7 @@ export declare class FormComponent extends StylableComponent implements OnDestro
85
85
  onMaxDefaultValueChange: Function;
86
86
  numberOfFields: number;
87
87
  readonly: boolean;
88
+ itemsPerRowClass: string;
88
89
  private _debouncedUpdateFieldSource;
89
90
  private operationType;
90
91
  private _isLayoutDialog;
@@ -129,6 +130,7 @@ export declare class FormComponent extends StylableComponent implements OnDestro
129
130
  highlightInvalidFields(): void;
130
131
  validateFieldsOnSubmit(): boolean;
131
132
  onPropertyChange(key: any, nv: any, ov?: any): void;
133
+ onStyleChange(key: string, nv: any, ov?: any): void;
132
134
  onResultCb(data: any, status: any, event?: any): void;
133
135
  toggleMessage(show: boolean, msg?: string, type?: string, header?: string): void;
134
136
  checkAppServiceErrorMsg(type: any): any;
@@ -145,6 +147,7 @@ export declare class FormComponent extends StylableComponent implements OnDestro
145
147
  setFormData(data: any, innerFormFields?: any, innerFormdata?: any): void;
146
148
  resetFormState(): void;
147
149
  reset(): void;
150
+ resetSliderWidget(field: any): void;
148
151
  savePrevformFields(): void;
149
152
  savePrevDataValues(): void;
150
153
  setReadonlyFields(): void;
@@ -239,15 +239,6 @@
239
239
  this.boundDeleteHandler = null;
240
240
  }
241
241
  }
242
- // MEMORY LEAK FIX: Clear currentItemWidgets cache
243
- // The _currentItemWidgets object accumulates references to all child widgets
244
- // which prevents them from being garbage collected
245
- if (this._currentItemWidgets) {
246
- Object.keys(this._currentItemWidgets).forEach(key => {
247
- delete this._currentItemWidgets[key];
248
- });
249
- this._currentItemWidgets = null;
250
- }
251
242
  // MEMORY LEAK FIX: Clear context to release references
252
243
  if (this.context) {
253
244
  Object.keys(this.context).forEach(key => {
@@ -173,15 +173,6 @@ export class ListItemDirective {
173
173
  this.boundDeleteHandler = null;
174
174
  }
175
175
  }
176
- // MEMORY LEAK FIX: Clear currentItemWidgets cache
177
- // The _currentItemWidgets object accumulates references to all child widgets
178
- // which prevents them from being garbage collected
179
- if (this._currentItemWidgets) {
180
- Object.keys(this._currentItemWidgets).forEach(key => {
181
- delete this._currentItemWidgets[key];
182
- });
183
- this._currentItemWidgets = null;
184
- }
185
176
  // MEMORY LEAK FIX: Clear context to release references
186
177
  if (this.context) {
187
178
  Object.keys(this.context).forEach(key => {
@@ -229,4 +220,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
229
220
  }], wmListItem: [{
230
221
  type: Input
231
222
  }] } });
232
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC1pdGVtLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvd2lkZ2V0cy9kYXRhL2xpc3Qvc3JjL2xpc3QtaXRlbS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVILFNBQVMsRUFDVCxVQUFVLEVBQ1YsV0FBVyxFQUNYLFlBQVksRUFDWixNQUFNLEVBQ04sUUFBUSxFQUNSLEtBQUssRUFHTCxnQkFBZ0IsRUFDbkIsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFhLE9BQU8sRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUV6QyxPQUFPLEVBQUMsTUFBTSxFQUFFLEdBQUcsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUVyQyxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDL0MsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sZ0NBQWdDLENBQUM7OztBQVNqRSxNQUFNLE9BQU8saUJBQWlCO0lBcUIxQixPQUFPO1FBQ0gsNkRBQTZEO1FBQzdELElBQUksQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO0lBQy9DLENBQUM7SUFFRCxJQUFJLE1BQU07UUFDTixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO0lBQy9CLENBQUM7SUFFRCxJQUFJLEtBQUs7UUFDTCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO0lBQzdCLENBQUM7SUFFRCxJQUFJLElBQUk7UUFDSixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDO0lBQzVCLENBQUM7SUFFRCxJQUFJLE1BQU07UUFDTixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO0lBQzlCLENBQUM7SUFFRCxJQUFJLEtB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RGlyZWN0aXZlLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgSG9zdExpc3RlbmVyLFxuICAgIGluamVjdCxcbiAgICBJbmplY3RvcixcbiAgICBJbnB1dCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIFZpZXdDb250YWluZXJSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7T2JzZXJ2YWJsZSwgU3ViamVjdH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7JHdhdGNoLCBBcHB9IGZyb20gJ0B3bS9jb3JlJztcblxuaW1wb3J0IHtMaXN0Q29tcG9uZW50fSBmcm9tICcuL2xpc3QuY29tcG9uZW50JztcbmltcG9ydCB7d2lkZ2V0SWRHZW5lcmF0b3J9IGZyb20gXCJAd20vY29tcG9uZW50cy9iYXNlXCI7XG5pbXBvcnQge0Jhc2VGb3JtQ29tcG9uZW50fSBmcm9tIFwiQHdtL2NvbXBvbmVudHMvaW5wdXQvYmFzZS1mb3JtXCI7XG5cbmRlY2xhcmUgY29uc3QgJDtcblxuQERpcmVjdGl2ZSh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgc2VsZWN0b3I6ICdbd21MaXN0SXRlbV0nLFxuICAgIGV4cG9ydEFzOiAnbGlzdEl0ZW1SZWYnXG59KVxuZXhwb3J0IGNsYXNzIExpc3RJdGVtRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuXG4gICAgcHVibGljIGl0ZW07XG4gICAgcHVibGljIGNvbnRleHQ7XG4gICAgcHVibGljIGRlc3Ryb3k6IFN1YmplY3Q8YW55PiA9IG5ldyBTdWJqZWN0KCk7XG4gICAgcHVibGljIGRlc3Ryb3kkOiBPYnNlcnZhYmxlPGFueT4gPSB0aGlzLmRlc3Ryb3kuYXNPYnNlcnZhYmxlKCk7XG4gICAgcHVibGljIG5hdGl2ZUVsZW1lbnQ6IEhUTUxFbGVtZW50O1xuICAgIHB1YmxpYyByZWFkb25seSBsaXN0Q29tcG9uZW50OiBMaXN0Q29tcG9uZW50O1xuXG4gICAgcHJpdmF0ZSBpdGVtQ2xhc3MgPSAnJztcbiAgICBwcml2YXRlIF9jdXJyZW50SXRlbVdpZGdldHMgPSB7fTtcbiAgICBwcml2YXRlIHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWY7XG4gICAgLyoqXG4gICAgICogVG8gYXZvaWQgcmUtcmVuZGVyaW5nIG9mIHdpZGdldCwgcGFzc2luZyB1bmlxdWUgaWQgYXMgY29udGV4dEtleSB0byBjcmVhdGVDdXN0b21JbmplY3RvclxuICAgICAqL1xuICAgIHByb3RlY3RlZCB0cmFja0lkID0gd2lkZ2V0SWRHZW5lcmF0b3IubmV4dFVpZCgpO1xuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5hY3RpdmUnKSBpc0FjdGl2ZSA9IGZhbHNlO1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuZGlzYWJsZS1pdGVtJykgZGlzYWJsZUl0ZW0gPSBmYWxzZTtcblxuICAgIEBIb3N0TGlzdGVuZXIoJ2ZvY3VzJylcbiAgICBvbkZvY3VzKCkge1xuICAgICAgICAvLyBtYWludGFpbnMgd2hpY2ggZWxlbWVudCBpcyBmb2N1c2VkL3NlbGVjdGVkIG1vc3QgcmVjZW50bHkuXG4gICAgICAgIHRoaXMubGlzdENvbXBvbmVudC5sYXN0U2VsZWN0ZWRJdGVtID0gdGhpcztcbiAgICB9XG5cbiAgICBnZXQgJGluZGV4KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb250ZXh0LiRpbmRleDtcbiAgICB9XG5cbiAgICBnZXQgJGV2ZW4oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRleHQuZXZlbjtcbiAgICB9XG5cbiAgICBnZXQgJG9kZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udGV4dC5vZGQ7XG4gICAgfVxuXG4gICAgZ2V0ICRmaXJzdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udGV4dC5maXJzdDtcbiAgICB9XG5cbiAgICBnZXQgJGxhc3QoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRleHQubGFzdDtcbiAgICB9XG5cbiAgICBnZXQgY3VycmVudEl0ZW1XaWRnZXRzICgpIHtcbiAgICAgICAgY29uc3QgY29tcG9uZW50RWxlbWVudHMgPSBBcnJheS5mcm9tKHRoaXMubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbd2lkZ2V0LWlkXScpKTtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24odGhpcy5fY3VycmVudEl0ZW1XaWRnZXRzLCBjb21wb25lbnRFbGVtZW50cy5yZWR1Y2UoKHJlc3VsdCwgY29tcDogYW55KSA9PiB7XG4gICAgICAgICAgICByZXN1bHRbY29tcC53aWRnZXQubmFtZV0gPSBjb21wLndpZGdldDtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH0sIHt9KSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IHdtTGlzdEl0ZW0odmFsKSB7XG4gICAgICAgIHRoaXMuaXRlbSA9IHZhbDtcbiAgICB9XG4gICAgcHJpdmF0ZSBfdmlld1BhcmVudCA9IGluamVjdChMaXN0Q29tcG9uZW50LCB7b3B0aW9uYWw6IHRydWV9KTtcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGluajogSW5qZWN0b3IsIGVsUmVmOiBFbGVtZW50UmVmLCBwcml2YXRlIGFwcDogQXBwKSB7XG4gICAgICAgIHRoaXMudmlld0NvbnRhaW5lclJlZiA9IGluai5nZXQoVmlld0NvbnRhaW5lclJlZik7XG4gICAgICAgIHRoaXMubmF0aXZlRWxlbWVudCA9IGVsUmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIHRoaXMubGlzdENvbXBvbmVudCA9IHRoaXMuX3ZpZXdQYXJlbnQ7XG4gICAgICAgIC8vIHRoaXMuY29udGV4dCA9ICg8TmdGb3JPZkNvbnRleHQ8TGlzdEl0ZW1EaXJlY3RpdmU+Pig8YW55Pmluaikudmlldy5jb250ZXh0KTtcbiAgICAgICAgdGhpcy5jb250ZXh0ID0gKHRoaXMuaW5qIGFzIGFueSkuX2xWaWV3WzhdO1xuICAgICAgICAvL3RoaXMuY29udGV4dCA9ICh0aGlzLnZpZXdDb250YWluZXJSZWYgYXMgYW55KS5faG9zdExWaWV3LmZpbmQodCA9PiB0ICYmICEhdC4kaW1wbGljaXQpO1xuICAgICAgICB0aGlzLml0ZW1DbGFzc1dhdGNoZXIodGhpcy5saXN0Q29tcG9uZW50KTtcbiAgICAgICAgdGhpcy5kaXNhYmxlSXRlbVdhdGNoZXIodGhpcy5saXN0Q29tcG9uZW50KTtcbiAgICAgICAgJCh0aGlzLm5hdGl2ZUVsZW1lbnQpLmRhdGEoJ2xpc3RJdGVtQ29udGV4dCcsIHRoaXMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVnaXN0ZXJXYXRjaChleHByZXNzaW9uOiBzdHJpbmcsIGNhbGxiYWNrOiBGdW5jdGlvbikge1xuICAgICAgICAvLyBSZW1vdmluZyBuZ0ZvciBjb250ZXh0IGFzIHRoZSBzYW1lIHByb3BlcnRpZXMgYXJlIGF2YWlsYmxlIG9uIGxpc3RpdGVtIHNjb3BlLlxuICAgICAgICAvLyBwYXNzaW5nIHZpZXdwYXJlbnQgY29udGV4dCBmb3IgYWNjZXNzaW5nIHZhcmliYWxlcyBhbmQgd2lkZ2V0cy5cbiAgICAgICAgLy9bQ1NQXTogZXhwcmVzc2lvbiB3aWxsIGJlIGdlbmVyYXRlZCBpbiB0aGUgY29tcG9uZW50IGFzIGUuZy4gJ2l0ZW0uY2xhc3NOYW1lJ1xuICAgICAgICB0aGlzLmRlc3Ryb3kkLnN1YnNjcmliZSgkd2F0Y2goZXhwcmVzc2lvbiwgKHRoaXMubGlzdENvbXBvbmVudCBhcyBhbnkpLnZpZXdQYXJlbnQsIHRoaXMsIGNhbGxiYWNrKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpdGVtQ2xhc3NXYXRjaGVyKGxpc3RDb21wb25lbnQ6IExpc3RDb21wb25lbnQpIHtcbiAgICAgICAgaWYgKGxpc3RDb21wb25lbnQuYmluZGl0ZW1jbGFzcykge1xuICAgICAgICAgICAgdGhpcy5yZWdpc3RlcldhdGNoKGxpc3RDb21wb25lbnQuYmluZGl0ZW1jbGFzcywgbnYgPT4gdGhpcy5pdGVtQ2xhc3MgPSBudiB8fCAnJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLml0ZW1DbGFzcyA9IGxpc3RDb21wb25lbnQuaXRlbWNsYXNzO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBkaXNhYmxlSXRlbVdhdGNoZXIoJGxpc3Q6IExpc3RDb21wb25lbnQpIHtcbiAgICAgICAgaWYgKCRsaXN0LmJpbmRkaXNhYmxlaXRlbSkge1xuICAgICAgICAgICAgdGhpcy5yZWdpc3RlcldhdGNoKCRsaXN0LmJpbmRkaXNhYmxlaXRlbSwgbnYgPT4gdGhpcy5kaXNhYmxlSXRlbSA9IG52IHx8IGZhbHNlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZGlzYWJsZUl0ZW0gPSAkbGlzdC5kaXNhYmxlaXRlbSB8fCBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYm91bmRFZGl0SGFuZGxlcjogKGV2ZW50OiBFdmVudCkgPT4gdm9pZDtcbiAgICBwcml2YXRlIGJvdW5kRGVsZXRlSGFuZGxlcjogKGV2ZW50OiBFdmVudCkgPT4gdm9pZDtcbiAgICBwcml2YXRlIGJvdW5kTW91c2VFbnRlckhhbmRsZXI6IChldmVudDogRXZlbnQpID0+IHZvaWQ7XG4gICAgcHJpdmF0ZSBib3VuZE1vdXNlTGVhdmVIYW5kbGVyOiAoZXZlbnQ6IEV2ZW50KSA9PiB2b2lkO1xuXG4gICAgcHJpdmF0ZSBzZXRVcENVREhhbmRsZXJzKCkge1xuICAgICAgICBjb25zdCAkZWRpdEl0ZW0gPSB0aGlzLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLmVkaXQtbGlzdC1pdGVtJyk7XG4gICAgICAgIGNvbnN0ICRkZWxldGVJdGVtID0gdGhpcy5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5kZWxldGUtbGlzdC1pdGVtJyk7XG5cbiAgICAgICAgaWYgKCRlZGl0SXRlbSkge1xuICAgICAgICAgICAgLy8gTUVNT1JZIExFQUsgRklYOiBTdG9yZSBib3VuZCBoYW5kbGVyIGZvciBjbGVhbnVwXG4gICAgICAgICAgICB0aGlzLmJvdW5kRWRpdEhhbmRsZXIgPSAoZXZ0OiBFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubGlzdENvbXBvbmVudC51cGRhdGUoKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICAvLyBUcmlnZ2VyZWQgb24gY2xpY2sgb2YgZWRpdCBhY3Rpb25cbiAgICAgICAgICAgICRlZGl0SXRlbS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuYm91bmRFZGl0SGFuZGxlcik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoJGRlbGV0ZUl0ZW0pIHtcbiAgICAgICAgICAgIC8vIE1FTU9SWSBMRUFLIEZJWDogU3RvcmUgYm91bmQgaGFuZGxlciBmb3IgY2xlYW51cFxuICAgICAgICAgICAgdGhpcy5ib3VuZERlbGV0ZUhhbmRsZXIgPSAoZXZ0OiBFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubGlzdENvbXBvbmVudC5kZWxldGUoKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICAvLyBUcmlnZ2VyZWQgb24gY2xpY2sgb2YgZGVsZXRlIGFjdGlvblxuICAgICAgICAgICAgJGRlbGV0ZUl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLmJvdW5kRGVsZXRlSGFuZGxlcik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIGlmICh0aGlzLmxpc3RDb21wb25lbnQubW91c2VFbnRlckNCKSB7XG4gICAgICAgICAgICAvLyBNRU1PUlkgTEVBSyBGSVg6IFN0b3JlIGJvdW5kIGhhbmRsZXIgZm9yIGNsZWFudXBcbiAgICAgICAgICAgIHRoaXMuYm91bmRNb3VzZUVudGVySGFuZGxlciA9ICgkZXZlbnQ6IEV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5saXN0Q29tcG9uZW50Lmludm9rZUV2ZW50Q2FsbGJhY2soJ21vdXNlZW50ZXInLCB7d2lkZ2V0OiB0aGlzLCAkZXZlbnR9KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VlbnRlcicsIHRoaXMuYm91bmRNb3VzZUVudGVySGFuZGxlcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubGlzdENvbXBvbmVudC5tb3VzZUxlYXZlQ0IpIHtcbiAgICAgICAgICAgIC8vIE1FTU9SWSBMRUFLIEZJWDogU3RvcmUgYm91bmQgaGFuZGxlciBmb3IgY2xlYW51cFxuICAgICAgICAgICAgdGhpcy5ib3VuZE1vdXNlTGVhdmVIYW5kbGVyID0gKCRldmVudDogRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmxpc3RDb21wb25lbnQuaW52b2tlRXZlbnRDYWxsYmFjaygnbW91c2VsZWF2ZScsIHt3aWRnZXQ6IHRoaXMsICRldmVudH0pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHRoaXMubmF0aXZlRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWxlYXZlJywgdGhpcy5ib3VuZE1vdXNlTGVhdmVIYW5kbGVyKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBhZGRpbmcgaXRlbSBhdHRyaWJ1dGUgb24gZXZlcnkgbGlzdCBpdGVtXG4gICAgICAgICQodGhpcy5uYXRpdmVFbGVtZW50KS5hdHRyKCdsaXN0aXRlbWluZGV4JywgdGhpcy4kaW5kZXgpO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgdGhpcy5zZXRVcENVREhhbmRsZXJzKCk7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudEVsZW1lbnRzID0gQXJyYXkuZnJvbSh0aGlzLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW3dpZGdldC1pZF0nKSk7XG4gICAgICAgIGNvbXBvbmVudEVsZW1lbnRzLmZvckVhY2goKGNvbXBvbmVudDogYW55KSA9PiB7XG4gICAgICAgICAgICBpZihjb21wb25lbnQud2lkZ2V0IGluc3RhbmNlb2YgQmFzZUZvcm1Db21wb25lbnQpIHtcbiAgICAgICAgICAgICAgICBpZighY29tcG9uZW50LndpZGdldC4kYXR0cnMuZ2V0KCdkYXRhdmFsdWVzb3VyY2UuYmluZCcpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC53aWRnZXQuZGF0YXZhbHVlc291cmNlID0gdGhpcy5saXN0Q29tcG9uZW50WydkYXRhc291cmNlJ107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgLy8gTUVNT1JZIExFQUsgRklYOiBSZW1vdmUgZXZlbnQgbGlzdGVuZXJzXG4gICAgICAgIGlmICh0aGlzLmJvdW5kTW91c2VFbnRlckhhbmRsZXIgJiYgdGhpcy5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHRoaXMubmF0aXZlRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZWVudGVyJywgdGhpcy5ib3VuZE1vdXNlRW50ZXJIYW5kbGVyKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAvLyBTaWxlbnRseSBoYW5kbGUgY2xlYW51cCBlcnJvcnNcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuYm91bmRNb3VzZUVudGVySGFuZGxlciA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuYm91bmRNb3VzZUxlYXZlSGFuZGxlciAmJiB0aGlzLm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgdGhpcy5uYXRpdmVFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbGVhdmUnLCB0aGlzLmJvdW5kTW91c2VMZWF2ZUhhbmRsZXIpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIC8vIFNpbGVudGx5IGhhbmRsZSBjbGVhbnVwIGVycm9yc1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5ib3VuZE1vdXNlTGVhdmVIYW5kbGVyID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICAgIGNvbnN0ICRlZGl0SXRlbSA9IHRoaXMubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuZWRpdC1saXN0LWl0ZW0nKTtcbiAgICAgICAgICAgIGlmICgkZWRpdEl0ZW0gJiYgdGhpcy5ib3VuZEVkaXRIYW5kbGVyKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgJGVkaXRJdGVtLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5ib3VuZEVkaXRIYW5kbGVyKTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFNpbGVudGx5IGhhbmRsZSBjbGVhbnVwIGVycm9yc1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmJvdW5kRWRpdEhhbmRsZXIgPSBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCAkZGVsZXRlSXRlbSA9IHRoaXMubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuZGVsZXRlLWxpc3QtaXRlbScpO1xuICAgICAgICAgICAgaWYgKCRkZWxldGVJdGVtICYmIHRoaXMuYm91bmREZWxldGVIYW5kbGVyKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgJGRlbGV0ZUl0ZW0ucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLmJvdW5kRGVsZXRlSGFuZGxlcik7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBTaWxlbnRseSBoYW5kbGUgY2xlYW51cCBlcnJvcnNcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5ib3VuZERlbGV0ZUhhbmRsZXIgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gTUVNT1JZIExFQUsgRklYOiBDbGVhciBjdXJyZW50SXRlbVdpZGdldHMgY2FjaGVcbiAgICAgICAgLy8gVGhlIF9jdXJyZW50SXRlbVdpZGdldHMgb2JqZWN0IGFjY3VtdWxhdGVzIHJlZmVyZW5jZXMgdG8gYWxsIGNoaWxkIHdpZGdldHNcbiAgICAgICAgLy8gd2hpY2ggcHJldmVudHMgdGhlbSBmcm9tIGJlaW5nIGdhcmJhZ2UgY29sbGVjdGVkXG4gICAgICAgIGlmICh0aGlzLl9jdXJyZW50SXRlbVdpZGdldHMpIHtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKHRoaXMuX2N1cnJlbnRJdGVtV2lkZ2V0cykuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9jdXJyZW50SXRlbVdpZGdldHNba2V5XTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5fY3VycmVudEl0ZW1XaWRnZXRzID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE1FTU9SWSBMRUFLIEZJWDogQ2xlYXIgY29udGV4dCB0byByZWxlYXNlIHJlZmVyZW5jZXNcbiAgICAgICAgaWYgKHRoaXMuY29udGV4dCkge1xuICAgICAgICAgICAgT2JqZWN0LmtleXModGhpcy5jb250ZXh0KS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuY29udGV4dFtrZXldO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gTUVNT1JZIExFQUsgRklYOiBDbGVhciBWaWV3Q29udGFpbmVyUmVmIHJlZmVyZW5jZVxuICAgICAgICBpZiAodGhpcy52aWV3Q29udGFpbmVyUmVmKSB7XG4gICAgICAgICAgICB0aGlzLnZpZXdDb250YWluZXJSZWYgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gTUVNT1JZIExFQUsgRklYOiBDb21wbGV0ZSB0aGUgZGVzdHJveSBzdWJqZWN0XG4gICAgICAgIGlmICh0aGlzLmRlc3Ryb3kpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmRlc3Ryb3kuY2xvc2VkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGVzdHJveS5uZXh0KG51bGwpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRlc3Ryb3kuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgLy8gU2lsZW50bHkgaGFuZGxlIGNsZWFudXAgZXJyb3JzXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmRlc3Ryb3kgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19
223
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC1pdGVtLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvd2lkZ2V0cy9kYXRhL2xpc3Qvc3JjL2xpc3QtaXRlbS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVILFNBQVMsRUFDVCxVQUFVLEVBQ1YsV0FBVyxFQUNYLFlBQVksRUFDWixNQUFNLEVBQ04sUUFBUSxFQUNSLEtBQUssRUFHTCxnQkFBZ0IsRUFDbkIsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFhLE9BQU8sRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUV6QyxPQUFPLEVBQUMsTUFBTSxFQUFFLEdBQUcsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUVyQyxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDL0MsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sZ0NBQWdDLENBQUM7OztBQVNqRSxNQUFNLE9BQU8saUJBQWlCO0lBcUIxQixPQUFPO1FBQ0gsNkRBQTZEO1FBQzdELElBQUksQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO0lBQy9DLENBQUM7SUFFRCxJQUFJLE1BQU07UUFDTixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO0lBQy9CLENBQUM7SUFFRCxJQUFJLEtBQUs7UUFDTCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO0lBQzdCLENBQUM7SUFFRCxJQUFJLElBQUk7UUFDSixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDO0lBQzVCLENBQUM7SUFFRCxJQUFJLE1BQU07UUFDTixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO0lBQzlCLENBQUM7SUFFRCxJQUFJLEtB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SUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2YsSUFBSSxDQUFDO2dCQUNELElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDO29CQUN2QixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDeEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDNUIsQ0FBQztZQUNMLENBQUM7WUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO2dCQUNULGlDQUFpQztZQUNyQyxDQUFDO1lBQ0QsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDeEIsQ0FBQztJQUNMLENBQUM7K0dBek5RLGlCQUFpQjttR0FBakIsaUJBQWlCOzs0RkFBakIsaUJBQWlCO2tCQUw3QixTQUFTO21CQUFDO29CQUNULFVBQVUsRUFBRSxJQUFJO29CQUNkLFFBQVEsRUFBRSxjQUFjO29CQUN4QixRQUFRLEVBQUUsYUFBYTtpQkFDMUI7d0hBa0JnQyxRQUFRO3NCQUFwQyxXQUFXO3VCQUFDLGNBQWM7Z0JBQ1EsV0FBVztzQkFBN0MsV0FBVzt1QkFBQyxvQkFBb0I7Z0JBR2pDLE9BQU87c0JBRE4sWUFBWTt1QkFBQyxPQUFPO2dCQWtDUixVQUFVO3NCQUF0QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIERpcmVjdGl2ZSxcbiAgICBFbGVtZW50UmVmLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIEhvc3RMaXN0ZW5lcixcbiAgICBpbmplY3QsXG4gICAgSW5qZWN0b3IsXG4gICAgSW5wdXQsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBWaWV3Q29udGFpbmVyUmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge09ic2VydmFibGUsIFN1YmplY3R9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyR3YXRjaCwgQXBwfSBmcm9tICdAd20vY29yZSc7XG5cbmltcG9ydCB7TGlzdENvbXBvbmVudH0gZnJvbSAnLi9saXN0LmNvbXBvbmVudCc7XG5pbXBvcnQge3dpZGdldElkR2VuZXJhdG9yfSBmcm9tIFwiQHdtL2NvbXBvbmVudHMvYmFzZVwiO1xuaW1wb3J0IHtCYXNlRm9ybUNvbXBvbmVudH0gZnJvbSBcIkB3bS9jb21wb25lbnRzL2lucHV0L2Jhc2UtZm9ybVwiO1xuXG5kZWNsYXJlIGNvbnN0ICQ7XG5cbkBEaXJlY3RpdmUoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHNlbGVjdG9yOiAnW3dtTGlzdEl0ZW1dJyxcbiAgICBleHBvcnRBczogJ2xpc3RJdGVtUmVmJ1xufSlcbmV4cG9ydCBjbGFzcyBMaXN0SXRlbURpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcblxuICAgIHB1YmxpYyBpdGVtO1xuICAgIHB1YmxpYyBjb250ZXh0O1xuICAgIHB1YmxpYyBkZXN0cm95OiBTdWJqZWN0PGFueT4gPSBuZXcgU3ViamVjdCgpO1xuICAgIHB1YmxpYyBkZXN0cm95JDogT2JzZXJ2YWJsZTxhbnk+ID0gdGhpcy5kZXN0cm95LmFzT2JzZXJ2YWJsZSgpO1xuICAgIHB1YmxpYyBuYXRpdmVFbGVtZW50OiBIVE1MRWxlbWVudDtcbiAgICBwdWJsaWMgcmVhZG9ubHkgbGlzdENvbXBvbmVudDogTGlzdENvbXBvbmVudDtcblxuICAgIHByaXZhdGUgaXRlbUNsYXNzID0gJyc7XG4gICAgcHJpdmF0ZSBfY3VycmVudEl0ZW1XaWRnZXRzID0ge307XG4gICAgcHJpdmF0ZSB2aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmO1xuICAgIC8qKlxuICAgICAqIFRvIGF2b2lkIHJlLXJlbmRlcmluZyBvZiB3aWRnZXQsIHBhc3NpbmcgdW5pcXVlIGlkIGFzIGNvbnRleHRLZXkgdG8gY3JlYXRlQ3VzdG9tSW5qZWN0b3JcbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgdHJhY2tJZCA9IHdpZGdldElkR2VuZXJhdG9yLm5leHRVaWQoKTtcblxuICAgIEBIb3N0QmluZGluZygnY2xhc3MuYWN0aXZlJykgaXNBY3RpdmUgPSBmYWxzZTtcbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmRpc2FibGUtaXRlbScpIGRpc2FibGVJdGVtID0gZmFsc2U7XG5cbiAgICBASG9zdExpc3RlbmVyKCdmb2N1cycpXG4gICAgb25Gb2N1cygpIHtcbiAgICAgICAgLy8gbWFpbnRhaW5zIHdoaWNoIGVsZW1lbnQgaXMgZm9jdXNlZC9zZWxlY3RlZCBtb3N0IHJlY2VudGx5LlxuICAgICAgICB0aGlzLmxpc3RDb21wb25lbnQubGFzdFNlbGVjdGVkSXRlbSA9IHRoaXM7XG4gICAgfVxuXG4gICAgZ2V0ICRpbmRleCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udGV4dC4kaW5kZXg7XG4gICAgfVxuXG4gICAgZ2V0ICRldmVuKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb250ZXh0LmV2ZW47XG4gICAgfVxuXG4gICAgZ2V0ICRvZGQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRleHQub2RkO1xuICAgIH1cblxuICAgIGdldCAkZmlyc3QoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRleHQuZmlyc3Q7XG4gICAgfVxuXG4gICAgZ2V0ICRsYXN0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb250ZXh0Lmxhc3Q7XG4gICAgfVxuXG4gICAgZ2V0IGN1cnJlbnRJdGVtV2lkZ2V0cyAoKSB7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudEVsZW1lbnRzID0gQXJyYXkuZnJvbSh0aGlzLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW3dpZGdldC1pZF0nKSk7XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHRoaXMuX2N1cnJlbnRJdGVtV2lkZ2V0cywgY29tcG9uZW50RWxlbWVudHMucmVkdWNlKChyZXN1bHQsIGNvbXA6IGFueSkgPT4ge1xuICAgICAgICAgICAgcmVzdWx0W2NvbXAud2lkZ2V0Lm5hbWVdID0gY29tcC53aWRnZXQ7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9LCB7fSkpO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCB3bUxpc3RJdGVtKHZhbCkge1xuICAgICAgICB0aGlzLml0ZW0gPSB2YWw7XG4gICAgfVxuICAgIHByaXZhdGUgX3ZpZXdQYXJlbnQgPSBpbmplY3QoTGlzdENvbXBvbmVudCwge29wdGlvbmFsOiB0cnVlfSk7XG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBpbmo6IEluamVjdG9yLCBlbFJlZjogRWxlbWVudFJlZiwgcHJpdmF0ZSBhcHA6IEFwcCkge1xuICAgICAgICB0aGlzLnZpZXdDb250YWluZXJSZWYgPSBpbmouZ2V0KFZpZXdDb250YWluZXJSZWYpO1xuICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQgPSBlbFJlZi5uYXRpdmVFbGVtZW50O1xuICAgICAgICB0aGlzLmxpc3RDb21wb25lbnQgPSB0aGlzLl92aWV3UGFyZW50O1xuICAgICAgICAvLyB0aGlzLmNvbnRleHQgPSAoPE5nRm9yT2ZDb250ZXh0PExpc3RJdGVtRGlyZWN0aXZlPj4oPGFueT5pbmopLnZpZXcuY29udGV4dCk7XG4gICAgICAgIHRoaXMuY29udGV4dCA9ICh0aGlzLmluaiBhcyBhbnkpLl9sVmlld1s4XTtcbiAgICAgICAgLy90aGlzLmNvbnRleHQgPSAodGhpcy52aWV3Q29udGFpbmVyUmVmIGFzIGFueSkuX2hvc3RMVmlldy5maW5kKHQgPT4gdCAmJiAhIXQuJGltcGxpY2l0KTtcbiAgICAgICAgdGhpcy5pdGVtQ2xhc3NXYXRjaGVyKHRoaXMubGlzdENvbXBvbmVudCk7XG4gICAgICAgIHRoaXMuZGlzYWJsZUl0ZW1XYXRjaGVyKHRoaXMubGlzdENvbXBvbmVudCk7XG4gICAgICAgICQodGhpcy5uYXRpdmVFbGVtZW50KS5kYXRhKCdsaXN0SXRlbUNvbnRleHQnLCB0aGlzKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlZ2lzdGVyV2F0Y2goZXhwcmVzc2lvbjogc3RyaW5nLCBjYWxsYmFjazogRnVuY3Rpb24pIHtcbiAgICAgICAgLy8gUmVtb3ZpbmcgbmdGb3IgY29udGV4dCBhcyB0aGUgc2FtZSBwcm9wZXJ0aWVzIGFyZSBhdmFpbGJsZSBvbiBsaXN0aXRlbSBzY29wZS5cbiAgICAgICAgLy8gcGFzc2luZyB2aWV3cGFyZW50IGNvbnRleHQgZm9yIGFjY2Vzc2luZyB2YXJpYmFsZXMgYW5kIHdpZGdldHMuXG4gICAgICAgIC8vW0NTUF06IGV4cHJlc3Npb24gd2lsbCBiZSBnZW5lcmF0ZWQgaW4gdGhlIGNvbXBvbmVudCBhcyBlLmcuICdpdGVtLmNsYXNzTmFtZSdcbiAgICAgICAgdGhpcy5kZXN0cm95JC5zdWJzY3JpYmUoJHdhdGNoKGV4cHJlc3Npb24sICh0aGlzLmxpc3RDb21wb25lbnQgYXMgYW55KS52aWV3UGFyZW50LCB0aGlzLCBjYWxsYmFjaykpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXRlbUNsYXNzV2F0Y2hlcihsaXN0Q29tcG9uZW50OiBMaXN0Q29tcG9uZW50KSB7XG4gICAgICAgIGlmIChsaXN0Q29tcG9uZW50LmJpbmRpdGVtY2xhc3MpIHtcbiAgICAgICAgICAgIHRoaXMucmVnaXN0ZXJXYXRjaChsaXN0Q29tcG9uZW50LmJpbmRpdGVtY2xhc3MsIG52ID0+IHRoaXMuaXRlbUNsYXNzID0gbnYgfHwgJycpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5pdGVtQ2xhc3MgPSBsaXN0Q29tcG9uZW50Lml0ZW1jbGFzcztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZGlzYWJsZUl0ZW1XYXRjaGVyKCRsaXN0OiBMaXN0Q29tcG9uZW50KSB7XG4gICAgICAgIGlmICgkbGlzdC5iaW5kZGlzYWJsZWl0ZW0pIHtcbiAgICAgICAgICAgIHRoaXMucmVnaXN0ZXJXYXRjaCgkbGlzdC5iaW5kZGlzYWJsZWl0ZW0sIG52ID0+IHRoaXMuZGlzYWJsZUl0ZW0gPSBudiB8fCBmYWxzZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRpc2FibGVJdGVtID0gJGxpc3QuZGlzYWJsZWl0ZW0gfHwgZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGJvdW5kRWRpdEhhbmRsZXI6IChldmVudDogRXZlbnQpID0+IHZvaWQ7XG4gICAgcHJpdmF0ZSBib3VuZERlbGV0ZUhhbmRsZXI6IChldmVudDogRXZlbnQpID0+IHZvaWQ7XG4gICAgcHJpdmF0ZSBib3VuZE1vdXNlRW50ZXJIYW5kbGVyOiAoZXZlbnQ6IEV2ZW50KSA9PiB2b2lkO1xuICAgIHByaXZhdGUgYm91bmRNb3VzZUxlYXZlSGFuZGxlcjogKGV2ZW50OiBFdmVudCkgPT4gdm9pZDtcblxuICAgIHByaXZhdGUgc2V0VXBDVURIYW5kbGVycygpIHtcbiAgICAgICAgY29uc3QgJGVkaXRJdGVtID0gdGhpcy5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5lZGl0LWxpc3QtaXRlbScpO1xuICAgICAgICBjb25zdCAkZGVsZXRlSXRlbSA9IHRoaXMubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuZGVsZXRlLWxpc3QtaXRlbScpO1xuXG4gICAgICAgIGlmICgkZWRpdEl0ZW0pIHtcbiAgICAgICAgICAgIC8vIE1FTU9SWSBMRUFLIEZJWDogU3RvcmUgYm91bmQgaGFuZGxlciBmb3IgY2xlYW51cFxuICAgICAgICAgICAgdGhpcy5ib3VuZEVkaXRIYW5kbGVyID0gKGV2dDogRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmxpc3RDb21wb25lbnQudXBkYXRlKCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgLy8gVHJpZ2dlcmVkIG9uIGNsaWNrIG9mIGVkaXQgYWN0aW9uXG4gICAgICAgICAgICAkZWRpdEl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLmJvdW5kRWRpdEhhbmRsZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCRkZWxldGVJdGVtKSB7XG4gICAgICAgICAgICAvLyBNRU1PUlkgTEVBSyBGSVg6IFN0b3JlIGJvdW5kIGhhbmRsZXIgZm9yIGNsZWFudXBcbiAgICAgICAgICAgIHRoaXMuYm91bmREZWxldGVIYW5kbGVyID0gKGV2dDogRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmxpc3RDb21wb25lbnQuZGVsZXRlKCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgLy8gVHJpZ2dlcmVkIG9uIGNsaWNrIG9mIGRlbGV0ZSBhY3Rpb25cbiAgICAgICAgICAgICRkZWxldGVJdGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5ib3VuZERlbGV0ZUhhbmRsZXIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICBpZiAodGhpcy5saXN0Q29tcG9uZW50Lm1vdXNlRW50ZXJDQikge1xuICAgICAgICAgICAgLy8gTUVNT1JZIExFQUsgRklYOiBTdG9yZSBib3VuZCBoYW5kbGVyIGZvciBjbGVhbnVwXG4gICAgICAgICAgICB0aGlzLmJvdW5kTW91c2VFbnRlckhhbmRsZXIgPSAoJGV2ZW50OiBFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubGlzdENvbXBvbmVudC5pbnZva2VFdmVudENhbGxiYWNrKCdtb3VzZWVudGVyJywge3dpZGdldDogdGhpcywgJGV2ZW50fSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhpcy5uYXRpdmVFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZW50ZXInLCB0aGlzLmJvdW5kTW91c2VFbnRlckhhbmRsZXIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmxpc3RDb21wb25lbnQubW91c2VMZWF2ZUNCKSB7XG4gICAgICAgICAgICAvLyBNRU1PUlkgTEVBSyBGSVg6IFN0b3JlIGJvdW5kIGhhbmRsZXIgZm9yIGNsZWFudXBcbiAgICAgICAgICAgIHRoaXMuYm91bmRNb3VzZUxlYXZlSGFuZGxlciA9ICgkZXZlbnQ6IEV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5saXN0Q29tcG9uZW50Lmludm9rZUV2ZW50Q2FsbGJhY2soJ21vdXNlbGVhdmUnLCB7d2lkZ2V0OiB0aGlzLCAkZXZlbnR9KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VsZWF2ZScsIHRoaXMuYm91bmRNb3VzZUxlYXZlSGFuZGxlcik7XG4gICAgICAgIH1cbiAgICAgICAgLy8gYWRkaW5nIGl0ZW0gYXR0cmlidXRlIG9uIGV2ZXJ5IGxpc3QgaXRlbVxuICAgICAgICAkKHRoaXMubmF0aXZlRWxlbWVudCkuYXR0cignbGlzdGl0ZW1pbmRleCcsIHRoaXMuJGluZGV4KTtcbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIHRoaXMuc2V0VXBDVURIYW5kbGVycygpO1xuICAgICAgICBjb25zdCBjb21wb25lbnRFbGVtZW50cyA9IEFycmF5LmZyb20odGhpcy5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1t3aWRnZXQtaWRdJykpO1xuICAgICAgICBjb21wb25lbnRFbGVtZW50cy5mb3JFYWNoKChjb21wb25lbnQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYoY29tcG9uZW50LndpZGdldCBpbnN0YW5jZW9mIEJhc2VGb3JtQ29tcG9uZW50KSB7XG4gICAgICAgICAgICAgICAgaWYoIWNvbXBvbmVudC53aWRnZXQuJGF0dHJzLmdldCgnZGF0YXZhbHVlc291cmNlLmJpbmQnKSkge1xuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQud2lkZ2V0LmRhdGF2YWx1ZXNvdXJjZSA9IHRoaXMubGlzdENvbXBvbmVudFsnZGF0YXNvdXJjZSddO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIC8vIE1FTU9SWSBMRUFLIEZJWDogUmVtb3ZlIGV2ZW50IGxpc3RlbmVyc1xuICAgICAgICBpZiAodGhpcy5ib3VuZE1vdXNlRW50ZXJIYW5kbGVyICYmIHRoaXMubmF0aXZlRWxlbWVudCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2VlbnRlcicsIHRoaXMuYm91bmRNb3VzZUVudGVySGFuZGxlcik7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgLy8gU2lsZW50bHkgaGFuZGxlIGNsZWFudXAgZXJyb3JzXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmJvdW5kTW91c2VFbnRlckhhbmRsZXIgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmJvdW5kTW91c2VMZWF2ZUhhbmRsZXIgJiYgdGhpcy5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHRoaXMubmF0aXZlRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZWxlYXZlJywgdGhpcy5ib3VuZE1vdXNlTGVhdmVIYW5kbGVyKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAvLyBTaWxlbnRseSBoYW5kbGUgY2xlYW51cCBlcnJvcnNcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuYm91bmRNb3VzZUxlYXZlSGFuZGxlciA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgICAgICBjb25zdCAkZWRpdEl0ZW0gPSB0aGlzLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLmVkaXQtbGlzdC1pdGVtJyk7XG4gICAgICAgICAgICBpZiAoJGVkaXRJdGVtICYmIHRoaXMuYm91bmRFZGl0SGFuZGxlcikge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICRlZGl0SXRlbS5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMuYm91bmRFZGl0SGFuZGxlcik7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBTaWxlbnRseSBoYW5kbGUgY2xlYW51cCBlcnJvcnNcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5ib3VuZEVkaXRIYW5kbGVyID0gbnVsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgJGRlbGV0ZUl0ZW0gPSB0aGlzLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLmRlbGV0ZS1saXN0LWl0ZW0nKTtcbiAgICAgICAgICAgIGlmICgkZGVsZXRlSXRlbSAmJiB0aGlzLmJvdW5kRGVsZXRlSGFuZGxlcikge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICRkZWxldGVJdGVtLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5ib3VuZERlbGV0ZUhhbmRsZXIpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gU2lsZW50bHkgaGFuZGxlIGNsZWFudXAgZXJyb3JzXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuYm91bmREZWxldGVIYW5kbGVyID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE1FTU9SWSBMRUFLIEZJWDogQ2xlYXIgY29udGV4dCB0byByZWxlYXNlIHJlZmVyZW5jZXNcbiAgICAgICAgaWYgKHRoaXMuY29udGV4dCkge1xuICAgICAgICAgICAgT2JqZWN0LmtleXModGhpcy5jb250ZXh0KS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuY29udGV4dFtrZXldO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gTUVNT1JZIExFQUsgRklYOiBDbGVhciBWaWV3Q29udGFpbmVyUmVmIHJlZmVyZW5jZVxuICAgICAgICBpZiAodGhpcy52aWV3Q29udGFpbmVyUmVmKSB7XG4gICAgICAgICAgICB0aGlzLnZpZXdDb250YWluZXJSZWYgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gTUVNT1JZIExFQUsgRklYOiBDb21wbGV0ZSB0aGUgZGVzdHJveSBzdWJqZWN0XG4gICAgICAgIGlmICh0aGlzLmRlc3Ryb3kpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmRlc3Ryb3kuY2xvc2VkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGVzdHJveS5uZXh0KG51bGwpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRlc3Ryb3kuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgLy8gU2lsZW50bHkgaGFuZGxlIGNsZWFudXAgZXJyb3JzXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmRlc3Ryb3kgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19
@@ -225,15 +225,6 @@ class ListItemDirective {
225
225
  this.boundDeleteHandler = null;
226
226
  }
227
227
  }
228
- // MEMORY LEAK FIX: Clear currentItemWidgets cache
229
- // The _currentItemWidgets object accumulates references to all child widgets
230
- // which prevents them from being garbage collected
231
- if (this._currentItemWidgets) {
232
- Object.keys(this._currentItemWidgets).forEach(key => {
233
- delete this._currentItemWidgets[key];
234
- });
235
- this._currentItemWidgets = null;
236
- }
237
228
  // MEMORY LEAK FIX: Clear context to release references
238
229
  if (this.context) {
239
230
  Object.keys(this.context).forEach(key => {