@fundamental-ngx/core 0.44.0-rc.2 → 0.44.0-rc.4

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 (203) hide show
  1. package/avatar/avatar.component.d.ts +0 -1
  2. package/bar/directives/bar-element.directive.d.ts +6 -3
  3. package/breadcrumb/breadcrumb.component.d.ts +4 -4
  4. package/carousel/carousel.component.d.ts +8 -2
  5. package/content-density/providers/content-density-observer-providers.d.ts +1 -1
  6. package/content-density/services/content-density-observer.service.d.ts +3 -3
  7. package/date-picker/date-picker.component.d.ts +30 -9
  8. package/datetime-picker/datetime-picker.component.d.ts +28 -10
  9. package/dialog/dialog-container/dialog-container.component.d.ts +4 -4
  10. package/dialog/dialog-footer-button/dialog-footer-button.component.d.ts +2 -0
  11. package/dialog/directives/dialog-decisive-button.directive.d.ts +2 -0
  12. package/dialog/utils/dialog-config.class.d.ts +1 -1
  13. package/esm2022/action-bar/action-bar.component.mjs +10 -3
  14. package/esm2022/alert/alert-service/alert.service.mjs +12 -3
  15. package/esm2022/alert/alert-utils/alert-config.mjs +11 -3
  16. package/esm2022/alert/alert-utils/alert-container.component.mjs +11 -3
  17. package/esm2022/alert/alert-utils/alert-ref.mjs +11 -3
  18. package/esm2022/alert/alert.component.mjs +17 -3
  19. package/esm2022/alert/alert.module.mjs +11 -3
  20. package/esm2022/avatar/avatar.component.mjs +2 -2
  21. package/esm2022/bar/directives/bar-element.directive.mjs +15 -7
  22. package/esm2022/breadcrumb/breadcrumb.component.mjs +9 -11
  23. package/esm2022/carousel/carousel.component.mjs +34 -5
  24. package/esm2022/combobox/combobox-mobile/combobox-mobile.component.mjs +1 -1
  25. package/esm2022/content-density/providers/content-density-observer-providers.mjs +4 -4
  26. package/esm2022/content-density/services/content-density-observer.service.mjs +13 -13
  27. package/esm2022/date-picker/date-picker.component.mjs +103 -10
  28. package/esm2022/datetime-picker/datetime-picker.component.mjs +78 -8
  29. package/esm2022/dialog/dialog-container/dialog-container.component.mjs +12 -13
  30. package/esm2022/dialog/dialog-footer-button/dialog-footer-button.component.mjs +8 -3
  31. package/esm2022/dialog/dialog-header/dialog-header.component.mjs +1 -1
  32. package/esm2022/dialog/directives/dialog-decisive-button.directive.mjs +6 -2
  33. package/esm2022/dialog/utils/dialog-config.class.mjs +1 -1
  34. package/esm2022/feed-list-item/components/item/feed-list-item.component.mjs +23 -1
  35. package/esm2022/form/form-label/form-label.component.mjs +21 -5
  36. package/esm2022/list/list-item/list-item.component.mjs +36 -1
  37. package/esm2022/menu/menu-mobile/menu-mobile.component.mjs +1 -1
  38. package/esm2022/message-box/directives/message-box-decisive-button.directive.mjs +6 -2
  39. package/esm2022/message-box/message-box-container/message-box-container.component.mjs +12 -15
  40. package/esm2022/message-box/message-box-footer-button/message-box-footer-button.component.mjs +8 -3
  41. package/esm2022/message-box/message-box-header/message-box-header.component.mjs +1 -1
  42. package/esm2022/message-strip/alert/message-strip-alert-container-footer/message-strip-alert-container-footer.component.mjs +8 -9
  43. package/esm2022/message-strip/auto-dismiss-message-strip.directive.mjs +10 -9
  44. package/esm2022/message-strip/message-strip.component.mjs +12 -1
  45. package/esm2022/multi-combobox/base-multi-combobox.class.mjs +17 -14
  46. package/esm2022/multi-combobox/mobile/mobile-multi-combobox.component.mjs +1 -1
  47. package/esm2022/multi-combobox/multi-combobox.component.mjs +44 -45
  48. package/esm2022/multi-combobox/select-all-toggler/select-all-toggler.component.mjs +8 -10
  49. package/esm2022/multi-input/multi-input-mobile/multi-input-mobile.component.mjs +1 -1
  50. package/esm2022/overflow-layout/directives/overflow-layout-popover-content.directive.mjs +9 -11
  51. package/esm2022/pagination/pagination.component.mjs +140 -2
  52. package/esm2022/popover/base/base-popover.class.mjs +25 -1
  53. package/esm2022/popover/popover.component.mjs +28 -17
  54. package/esm2022/product-switch/product-switch/product-switch.component.mjs +11 -1
  55. package/esm2022/quick-view/quick-view-title/quick-view-title.component.mjs +1 -1
  56. package/esm2022/segmented-button/segmented-button.component.mjs +19 -21
  57. package/esm2022/select/select.component.mjs +17 -10
  58. package/esm2022/shellbar/shellbar-actions/shellbar-actions.component.mjs +12 -1
  59. package/esm2022/shellbar/shellbar.component.mjs +12 -11
  60. package/esm2022/side-navigation/side-navigation.component.mjs +12 -3
  61. package/esm2022/slider/slider.component.mjs +83 -13
  62. package/esm2022/split-button/split-button.component.mjs +34 -16
  63. package/esm2022/splitter/splitter-pagination/splitter-pagination.component.mjs +9 -2
  64. package/esm2022/splitter/splitter.component.mjs +16 -5
  65. package/esm2022/step-input/step-input.component.mjs +46 -24
  66. package/esm2022/switch/switch.component.mjs +25 -3
  67. package/esm2022/table/directives/table-cell.directive.mjs +5 -7
  68. package/esm2022/table/directives/table-row.directive.mjs +17 -20
  69. package/esm2022/table/table.component.mjs +10 -9
  70. package/esm2022/tabs/tab-item-expand/tab-item-expand.component.mjs +11 -1
  71. package/esm2022/tabs/tab-list.component.mjs +40 -31
  72. package/esm2022/text/text.component.mjs +23 -1
  73. package/esm2022/time/i18n/time-i18n.mjs +2 -2
  74. package/esm2022/token/token.component.mjs +36 -14
  75. package/esm2022/toolbar/toolbar.component.mjs +33 -26
  76. package/esm2022/tree/components/tree-item/tree-item.component.mjs +21 -21
  77. package/esm2022/tree/tree.component.mjs +23 -22
  78. package/esm2022/upload-collection/upload-collection-button-group/upload-collection-button-group.component.mjs +67 -1
  79. package/esm2022/upload-collection/upload-collection-form-item/upload-collection-form-item.component.mjs +12 -1
  80. package/feed-list-item/components/item/feed-list-item.component.d.ts +8 -2
  81. package/fesm2022/fundamental-ngx-core-action-bar.mjs +9 -2
  82. package/fesm2022/fundamental-ngx-core-action-bar.mjs.map +1 -1
  83. package/fesm2022/fundamental-ngx-core-alert.mjs +58 -13
  84. package/fesm2022/fundamental-ngx-core-alert.mjs.map +1 -1
  85. package/fesm2022/fundamental-ngx-core-avatar.mjs +1 -1
  86. package/fesm2022/fundamental-ngx-core-avatar.mjs.map +1 -1
  87. package/fesm2022/fundamental-ngx-core-bar.mjs +14 -6
  88. package/fesm2022/fundamental-ngx-core-bar.mjs.map +1 -1
  89. package/fesm2022/fundamental-ngx-core-breadcrumb.mjs +9 -10
  90. package/fesm2022/fundamental-ngx-core-breadcrumb.mjs.map +1 -1
  91. package/fesm2022/fundamental-ngx-core-carousel.mjs +32 -3
  92. package/fesm2022/fundamental-ngx-core-carousel.mjs.map +1 -1
  93. package/fesm2022/fundamental-ngx-core-combobox.mjs +1 -1
  94. package/fesm2022/fundamental-ngx-core-combobox.mjs.map +1 -1
  95. package/fesm2022/fundamental-ngx-core-content-density.mjs +15 -14
  96. package/fesm2022/fundamental-ngx-core-content-density.mjs.map +1 -1
  97. package/fesm2022/fundamental-ngx-core-date-picker.mjs +102 -9
  98. package/fesm2022/fundamental-ngx-core-date-picker.mjs.map +1 -1
  99. package/fesm2022/fundamental-ngx-core-datetime-picker.mjs +77 -7
  100. package/fesm2022/fundamental-ngx-core-datetime-picker.mjs.map +1 -1
  101. package/fesm2022/fundamental-ngx-core-dialog.mjs +23 -13
  102. package/fesm2022/fundamental-ngx-core-dialog.mjs.map +1 -1
  103. package/fesm2022/fundamental-ngx-core-feed-list-item.mjs +22 -0
  104. package/fesm2022/fundamental-ngx-core-feed-list-item.mjs.map +1 -1
  105. package/fesm2022/fundamental-ngx-core-form.mjs +20 -4
  106. package/fesm2022/fundamental-ngx-core-form.mjs.map +1 -1
  107. package/fesm2022/fundamental-ngx-core-list.mjs +35 -0
  108. package/fesm2022/fundamental-ngx-core-list.mjs.map +1 -1
  109. package/fesm2022/fundamental-ngx-core-menu.mjs +1 -1
  110. package/fesm2022/fundamental-ngx-core-menu.mjs.map +1 -1
  111. package/fesm2022/fundamental-ngx-core-message-box.mjs +24 -15
  112. package/fesm2022/fundamental-ngx-core-message-box.mjs.map +1 -1
  113. package/fesm2022/fundamental-ngx-core-message-strip.mjs +27 -14
  114. package/fesm2022/fundamental-ngx-core-message-strip.mjs.map +1 -1
  115. package/fesm2022/fundamental-ngx-core-multi-combobox.mjs +63 -64
  116. package/fesm2022/fundamental-ngx-core-multi-combobox.mjs.map +1 -1
  117. package/fesm2022/fundamental-ngx-core-multi-input.mjs +1 -1
  118. package/fesm2022/fundamental-ngx-core-multi-input.mjs.map +1 -1
  119. package/fesm2022/fundamental-ngx-core-overflow-layout.mjs +9 -10
  120. package/fesm2022/fundamental-ngx-core-overflow-layout.mjs.map +1 -1
  121. package/fesm2022/fundamental-ngx-core-pagination.mjs +139 -1
  122. package/fesm2022/fundamental-ngx-core-pagination.mjs.map +1 -1
  123. package/fesm2022/fundamental-ngx-core-popover.mjs +51 -16
  124. package/fesm2022/fundamental-ngx-core-popover.mjs.map +1 -1
  125. package/fesm2022/fundamental-ngx-core-product-switch.mjs +10 -0
  126. package/fesm2022/fundamental-ngx-core-product-switch.mjs.map +1 -1
  127. package/fesm2022/fundamental-ngx-core-quick-view.mjs +1 -1
  128. package/fesm2022/fundamental-ngx-core-quick-view.mjs.map +1 -1
  129. package/fesm2022/fundamental-ngx-core-segmented-button.mjs +17 -19
  130. package/fesm2022/fundamental-ngx-core-segmented-button.mjs.map +1 -1
  131. package/fesm2022/fundamental-ngx-core-select.mjs +16 -9
  132. package/fesm2022/fundamental-ngx-core-select.mjs.map +1 -1
  133. package/fesm2022/fundamental-ngx-core-shellbar.mjs +22 -10
  134. package/fesm2022/fundamental-ngx-core-shellbar.mjs.map +1 -1
  135. package/fesm2022/fundamental-ngx-core-side-navigation.mjs +11 -2
  136. package/fesm2022/fundamental-ngx-core-side-navigation.mjs.map +1 -1
  137. package/fesm2022/fundamental-ngx-core-slider.mjs +82 -12
  138. package/fesm2022/fundamental-ngx-core-slider.mjs.map +1 -1
  139. package/fesm2022/fundamental-ngx-core-split-button.mjs +32 -13
  140. package/fesm2022/fundamental-ngx-core-split-button.mjs.map +1 -1
  141. package/fesm2022/fundamental-ngx-core-splitter.mjs +23 -5
  142. package/fesm2022/fundamental-ngx-core-splitter.mjs.map +1 -1
  143. package/fesm2022/fundamental-ngx-core-step-input.mjs +45 -23
  144. package/fesm2022/fundamental-ngx-core-step-input.mjs.map +1 -1
  145. package/fesm2022/fundamental-ngx-core-switch.mjs +24 -2
  146. package/fesm2022/fundamental-ngx-core-switch.mjs.map +1 -1
  147. package/fesm2022/fundamental-ngx-core-table.mjs +26 -30
  148. package/fesm2022/fundamental-ngx-core-table.mjs.map +1 -1
  149. package/fesm2022/fundamental-ngx-core-tabs.mjs +51 -31
  150. package/fesm2022/fundamental-ngx-core-tabs.mjs.map +1 -1
  151. package/fesm2022/fundamental-ngx-core-text.mjs +22 -0
  152. package/fesm2022/fundamental-ngx-core-text.mjs.map +1 -1
  153. package/fesm2022/fundamental-ngx-core-time.mjs +1 -1
  154. package/fesm2022/fundamental-ngx-core-time.mjs.map +1 -1
  155. package/fesm2022/fundamental-ngx-core-token.mjs +36 -13
  156. package/fesm2022/fundamental-ngx-core-token.mjs.map +1 -1
  157. package/fesm2022/fundamental-ngx-core-toolbar.mjs +31 -24
  158. package/fesm2022/fundamental-ngx-core-toolbar.mjs.map +1 -1
  159. package/fesm2022/fundamental-ngx-core-tree.mjs +38 -38
  160. package/fesm2022/fundamental-ngx-core-tree.mjs.map +1 -1
  161. package/fesm2022/fundamental-ngx-core-upload-collection.mjs +77 -0
  162. package/fesm2022/fundamental-ngx-core-upload-collection.mjs.map +1 -1
  163. package/form/form-label/form-label.component.d.ts +8 -2
  164. package/fundamental-ngx-core-v0.44.0-rc.4.tgz +0 -0
  165. package/list/list-item/list-item.component.d.ts +16 -4
  166. package/message-box/directives/message-box-decisive-button.directive.d.ts +2 -0
  167. package/message-box/message-box-container/message-box-container.component.d.ts +4 -6
  168. package/message-box/message-box-footer-button/message-box-footer-button.component.d.ts +2 -0
  169. package/message-strip/alert/message-strip-alert-container-footer/message-strip-alert-container-footer.component.d.ts +1 -1
  170. package/message-strip/auto-dismiss-message-strip.directive.d.ts +3 -3
  171. package/message-strip/message-strip.component.d.ts +4 -1
  172. package/multi-combobox/base-multi-combobox.class.d.ts +30 -30
  173. package/multi-combobox/multi-combobox.component.d.ts +17 -18
  174. package/multi-combobox/select-all-toggler/select-all-toggler.component.d.ts +1 -1
  175. package/overflow-layout/directives/overflow-layout-popover-content.directive.d.ts +5 -6
  176. package/package.json +3 -3
  177. package/pagination/pagination.component.d.ts +44 -11
  178. package/popover/base/base-popover.class.d.ts +12 -3
  179. package/popover/popover.component.d.ts +8 -5
  180. package/product-switch/product-switch/product-switch.component.d.ts +4 -1
  181. package/schematics/add-dependencies/index.js +4 -4
  182. package/segmented-button/segmented-button.component.d.ts +6 -7
  183. package/select/select.component.d.ts +9 -6
  184. package/shellbar/shellbar-actions/shellbar-actions.component.d.ts +6 -3
  185. package/shellbar/shellbar.component.d.ts +1 -1
  186. package/slider/slider.component.d.ts +13 -4
  187. package/split-button/split-button.component.d.ts +11 -6
  188. package/splitter/splitter.component.d.ts +5 -2
  189. package/step-input/step-input.component.d.ts +12 -6
  190. package/switch/switch.component.d.ts +10 -4
  191. package/table/directives/table-row.directive.d.ts +2 -4
  192. package/table/table.component.d.ts +3 -4
  193. package/tabs/tab-item-expand/tab-item-expand.component.d.ts +4 -1
  194. package/tabs/tab-list.component.d.ts +10 -8
  195. package/text/text.component.d.ts +8 -2
  196. package/time/i18n/time-i18n.d.ts +2 -2
  197. package/token/token.component.d.ts +13 -7
  198. package/toolbar/toolbar.component.d.ts +10 -7
  199. package/tree/components/tree-item/tree-item.component.d.ts +28 -28
  200. package/tree/tree.component.d.ts +7 -7
  201. package/upload-collection/upload-collection-button-group/upload-collection-button-group.component.d.ts +24 -6
  202. package/upload-collection/upload-collection-form-item/upload-collection-form-item.component.d.ts +6 -3
  203. package/fundamental-ngx-core-v0.44.0-rc.2.tgz +0 -0
@@ -1,12 +1,12 @@
1
- import { ElementRef, inject, Injectable, InjectFlags, Injector, Renderer2 } from '@angular/core';
2
- import { DestroyedService } from '@fundamental-ngx/cdk/utils';
3
- import { BehaviorSubject, distinctUntilChanged, map, takeUntil } from 'rxjs';
1
+ import { DestroyRef, ElementRef, inject, Injectable, InjectFlags, Injector, Renderer2 } from '@angular/core';
2
+ import { BehaviorSubject, distinctUntilChanged, map } from 'rxjs';
4
3
  import { ContentDensityObserverSettings } from '../classes/content-density-observer.settings';
5
4
  import { getChangesSource$ } from '../helpers/get-changes-source.provider';
6
5
  import { GlobalContentDensityService } from '../services/global-content-density.service';
7
6
  import { CONTENT_DENSITY_DIRECTIVE } from '../tokens/content-density-directive';
8
7
  import { ContentDensityMode } from '../types/content-density.mode';
9
8
  import { defaultContentDensityObserverConfigs } from '../variables/default-content-density-consumer-config';
9
+ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
10
10
  import * as i0 from "@angular/core";
11
11
  import * as i1 from "../classes/content-density-observer.settings";
12
12
  const isFactoryProvider = (obj) => !!(obj && obj.useFactory);
@@ -73,10 +73,13 @@ export class ContentDensityObserver extends BehaviorSubject {
73
73
  /** @hidden */
74
74
  this._isCondensed$ = new BehaviorSubject(false);
75
75
  /** @hidden */
76
+ // eslint-disable-next-line @typescript-eslint/member-ordering
76
77
  this.isCompact$ = this._isCompact$.asObservable();
77
78
  /** @hidden */
79
+ // eslint-disable-next-line @typescript-eslint/member-ordering
78
80
  this.isCozy$ = this._isCozy$.asObservable();
79
81
  /** @hidden */
82
+ // eslint-disable-next-line @typescript-eslint/member-ordering
80
83
  this.isCondensed$ = this._isCondensed$.asObservable();
81
84
  /** @hidden */
82
85
  this._globalContentDensityService = inject(GlobalContentDensityService, {
@@ -94,7 +97,7 @@ export class ContentDensityObserver extends BehaviorSubject {
94
97
  /** @hidden */
95
98
  this._renderer = inject(Renderer2);
96
99
  /** @hidden */
97
- this._destroy$ = inject(DestroyedService);
100
+ this._destroyRef = inject(DestroyRef);
98
101
  /** @hidden */
99
102
  this._elementRef = inject(ElementRef);
100
103
  /** @hidden */
@@ -105,13 +108,10 @@ export class ContentDensityObserver extends BehaviorSubject {
105
108
  [ContentDensityMode.CONDENSED]: () => this._isSupported(ContentDensityMode.COMPACT) ? ContentDensityMode.COMPACT : ContentDensityMode.COZY,
106
109
  [ContentDensityMode.COZY]: () => ContentDensityMode.COZY // No alternative here, everyone should support it
107
110
  };
108
- const destroySub = this._destroy$.subscribe({
109
- complete: () => {
110
- destroySub.unsubscribe();
111
- this.complete();
112
- if (this.config.debug) {
113
- console.log('ContentDensityObserver: destroyed');
114
- }
111
+ this._destroyRef.onDestroy(() => {
112
+ this.complete();
113
+ if (this.config.debug) {
114
+ console.log('ContentDensityObserver: destroyed');
115
115
  }
116
116
  });
117
117
  this.config = {
@@ -143,7 +143,7 @@ export class ContentDensityObserver extends BehaviorSubject {
143
143
  }
144
144
  }
145
145
  return density;
146
- }), distinctUntilChanged(), takeUntil(this._destroy$))
146
+ }), distinctUntilChanged(), takeUntilDestroyed(this._destroyRef))
147
147
  .subscribe((density) => {
148
148
  this.next(density);
149
149
  this._applyClass();
@@ -203,4 +203,4 @@ export class ContentDensityObserver extends BehaviorSubject {
203
203
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.0", ngImport: i0, type: ContentDensityObserver, decorators: [{
204
204
  type: Injectable
205
205
  }], ctorParameters: function () { return [{ type: i0.Injector }, { type: i1.ContentDensityObserverSettings }]; } });
206
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudC1kZW5zaXR5LW9ic2VydmVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi9jb250ZW50LWRlbnNpdHkvc2VydmljZXMvY29udGVudC1kZW5zaXR5LW9ic2VydmVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBdUIsTUFBTSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN0SCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsZUFBZSxFQUFFLG9CQUFvQixFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDN0UsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFFOUYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDM0UsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDekYsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDaEYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDbkUsT0FBTyxFQUFFLG9DQUFvQyxFQUFFLE1BQU0sc0RBQXNELENBQUM7OztBQUU1RyxNQUFNLGlCQUFpQixHQUFHLENBQUMsR0FBUSxFQUE4QixFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFLLEdBQTJCLENBQUMsVUFBVSxDQUFDLENBQUM7QUFFdkgsTUFBTSxPQUFPLEdBQUcsQ0FBQyxRQUFrQixFQUFFLHFCQUEwQyxFQUFjLEVBQUUsQ0FDM0YsQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFD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Q3pCLE9BQU87U0FDVjtRQUNELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDO1FBRXhDLE1BQU0seUJBQXlCLEdBQUcsSUFBSSxDQUFDLDZCQUE2QixFQUFFLEtBQUssS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBRTNGLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDL0IsTUFBTSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRTtnQkFDM0MsSUFBSSxDQUFDLFNBQVMsRUFBRSxXQUFXLENBQUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxTQUFTLENBQUMsQ0FBQztZQUNuRSxDQUFDLENBQUMsQ0FBQztZQUVILHdHQUF3RztZQUN4RyxJQUFJLHlCQUF5QixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsRUFBRTtnQkFDOUQsT0FBTzthQUNWO1lBRUQsSUFBSSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBRSxDQUFDLENBQUM7UUFDN0UsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsOENBQThDO0lBQ3RDLFlBQVksQ0FBQyxPQUEyQjtRQUM1QyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsdUJBQXVCLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEtBQUssQ0FBQztJQUMzRSxDQUFDOzhHQWhMUSxzQkFBc0I7a0hBQXRCLHNCQUFzQjs7MkZBQXRCLHNCQUFzQjtrQkFEbEMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVsZW1lbnRSZWYsIEZhY3RvcnlTYW5zUHJvdmlkZXIsIGluamVjdCwgSW5qZWN0YWJsZSwgSW5qZWN0RmxhZ3MsIEluamVjdG9yLCBSZW5kZXJlcjIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERlc3Ryb3llZFNlcnZpY2UgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2Nkay91dGlscyc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBtYXAsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQ29udGVudERlbnNpdHlPYnNlcnZlclNldHRpbmdzIH0gZnJvbSAnLi4vY2xhc3Nlcy9jb250ZW50LWRlbnNpdHktb2JzZXJ2ZXIuc2V0dGluZ3MnO1xuaW1wb3J0IHsgQ29udGVudERlbnNpdHlPYnNlcnZlclRhcmdldCB9IGZyb20gJy4uL2NvbnRlbnQtZGVuc2l0eS50eXBlcyc7XG5pbXBvcnQgeyBnZXRDaGFuZ2VzU291cmNlJCB9IGZyb20gJy4uL2hlbHBlcnMvZ2V0LWNoYW5nZXMtc291cmNlLnByb3ZpZGVyJztcbmltcG9ydCB7IEdsb2JhbENvbnRlbnREZW5zaXR5U2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2dsb2JhbC1jb250ZW50LWRlbnNpdHkuc2VydmljZSc7XG5pbXBvcnQgeyBDT05URU5UX0RFTlNJVFlfRElSRUNUSVZFIH0gZnJvbSAnLi4vdG9rZW5zL2NvbnRlbnQtZGVuc2l0eS1kaXJlY3RpdmUnO1xuaW1wb3J0IHsgQ29udGVudERlbnNpdHlNb2RlIH0gZnJvbSAnLi4vdHlwZXMvY29udGVudC1kZW5zaXR5Lm1vZGUnO1xuaW1wb3J0IHsgZGVmYXVsdENvbnRlbnREZW5zaXR5T2JzZXJ2ZXJDb25maWdzIH0gZnJvbSAnLi4vdmFyaWFibGVzL2RlZmF1bHQtY29udGVudC1kZW5zaXR5LWNvbnN1bWVyLWNvbmZpZyc7XG5cbmNvbnN0IGlzRmFjdG9yeVByb3ZpZGVyID0gKG9iajogYW55KTogb2JqIGlzIEZhY3RvcnlTYW5zUHJvdmlkZXIgPT4gISEob2JqICYmIChvYmogYXMgRmFjdG9yeVNhbnNQcm92aWRlcikudXNlRmFjdG9yeSk7XG5cbmNvbnN0IGdldERlcHMgPSAoaW5qZWN0b3I6IEluamVjdG9yLCBkZWZhdWx0Q29udGVudERlbnNpdHk6IEZhY3RvcnlTYW5zUHJvdmlkZXIpOiBBcnJheTxhbnk+ID0+XG4gICAgKGRlZmF1bHRDb250ZW50RGVuc2l0eS5kZXBzIHx8IFtdKS5tYXAoKGRlcCk6IGFueSA9PiB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGRlcCkpIHtcbiAgICAgICAgICAgIGxldCB0eXBlO1xuICAgICAgICAgICAgbGV0IGZsYWdzID0gSW5qZWN0RmxhZ3MuRGVmYXVsdDtcbiAgICAgICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBkZXAubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmxhZyA9IGRlcFtpbmRleF1bJ19fTkdfRElfRkxBR19fJ107XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBmbGFnID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYml0d2lzZVxuICAgICAgICAgICAgICAgICAgICBmbGFncyB8PSBmbGFnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGUgPSBkZXBbaW5kZXhdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBpbmplY3Rvci5nZXQodHlwZSwgdW5kZWZpbmVkLCBmbGFncyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGluamVjdG9yLmdldChkZXAsIHVuZGVmaW5lZCwgSW5qZWN0RmxhZ3MuRGVmYXVsdCk7XG4gICAgfSk7XG5cbmNvbnN0IGdldERlZmF1bHRDb250ZW50RGVuc2l0eSA9IChcbiAgICBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgY29uZmlndXJhdGlvbjogUmVxdWlyZWQ8Q29udGVudERlbnNpdHlPYnNlcnZlclNldHRpbmdzPlxuKTogQ29udGVudERlbnNpdHlNb2RlID0+IHtcbiAgICBpZiAodHlwZW9mIGNvbmZpZ3VyYXRpb24uZGVmYXVsdENvbnRlbnREZW5zaXR5ID09PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gY29uZmlndXJhdGlvbi5kZWZhdWx0Q29udGVudERlbnNpdHkgYXMgQ29udGVudERlbnNpdHlNb2RlO1xuICAgIH1cbiAgICBpZiAoaXNGYWN0b3J5UHJvdmlkZXIoY29uZmlndXJhdGlvbi5kZWZhdWx0Q29udGVudERlbnNpdHkpKSB7XG4gICAgICAgIGNvbnN0IGRlcHMgPSBnZXREZXBzKGluamVjdG9yLCBjb25maWd1cmF0aW9uLmRlZmF1bHRDb250ZW50RGVuc2l0eSk7XG4gICAgICAgIHJldHVybiBjb25maWd1cmF0aW9uLmRlZmF1bHRDb250ZW50RGVuc2l0eS51c2VGYWN0b3J5KC4uLmRlcHMpO1xuICAgIH1cbiAgICByZXR1cm4gaW5qZWN0b3IuZ2V0KGNvbmZpZ3VyYXRpb24uZGVmYXVsdENvbnRlbnREZW5zaXR5LCB1bmRlZmluZWQsIHVuZGVmaW5lZCk7XG59O1xuXG5jb25zdCBpbml0aWFsQ29udGVudERlbnNpdHkgPSAoXG4gICAgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgIGNvbmZpZ3VyYXRpb24/OiBDb250ZW50RGVuc2l0eU9ic2VydmVyU2V0dGluZ3Ncbik6IENvbnRlbnREZW5zaXR5TW9kZSA9PiB7XG4gICAgY29uc3Qgc2VydmljZVZhbHVlID0gaW5qZWN0b3IuZ2V0KEdsb2JhbENvbnRlbnREZW5zaXR5U2VydmljZSwgbnVsbCwgSW5qZWN0RmxhZ3MuT3B0aW9uYWwpPy5jdXJyZW50Q29udGVudERlbnNpdHk7XG4gICAgaWYgKHNlcnZpY2VWYWx1ZSkge1xuICAgICAgICByZXR1cm4gc2VydmljZVZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gZ2V0RGVmYXVsdENvbnRlbnREZW5zaXR5KGluamVjdG9yLCB7XG4gICAgICAgIC4uLmRlZmF1bHRDb250ZW50RGVuc2l0eU9ic2VydmVyQ29uZmlncyxcbiAgICAgICAgLi4uKGNvbmZpZ3VyYXRpb24gfHwge30pXG4gICAgfSk7XG59O1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQ29udGVudERlbnNpdHlPYnNlcnZlciBleHRlbmRzIEJlaGF2aW9yU3ViamVjdDxDb250ZW50RGVuc2l0eU1vZGU+IHtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2lzQ29tcGFjdCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2lzQ296eSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2lzQ29uZGVuc2VkJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcmVhZG9ubHkgY29uZmlnOiBDb250ZW50RGVuc2l0eU9ic2VydmVyU2V0dGluZ3M7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICByZWFkb25seSBpc0NvbXBhY3QkID0gdGhpcy5faXNDb21wYWN0JC5hc09ic2VydmFibGUoKTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHJlYWRvbmx5IGlzQ296eSQgPSB0aGlzLl9pc0NvenkkLmFzT2JzZXJ2YWJsZSgpO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcmVhZG9ubHkgaXNDb25kZW5zZWQkID0gdGhpcy5faXNDb25kZW5zZWQkLmFzT2JzZXJ2YWJsZSgpO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IGlzQ29tcGFjdCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzQ29tcGFjdCQudmFsdWU7XG4gICAgfVxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IGlzQ296eSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzQ296eSQudmFsdWU7XG4gICAgfVxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IGlzQ29uZGVuc2VkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNDb25kZW5zZWQkLnZhbHVlO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZ2xvYmFsQ29udGVudERlbnNpdHlTZXJ2aWNlID0gaW5qZWN0KEdsb2JhbENvbnRlbnREZW5zaXR5U2VydmljZSwge1xuICAgICAgICBvcHRpb25hbDogdHJ1ZVxuICAgIH0pO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jb250ZW50RGVuc2l0eURpcmVjdGl2ZSA9IGluamVjdChDT05URU5UX0RFTlNJVFlfRElSRUNUSVZFLCB7XG4gICAgICAgIG9wdGlvbmFsOiB0cnVlXG4gICAgfSk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3BhcmVudENvbnRlbnREZW5zaXR5T2JzZXJ2ZXIgPSBpbmplY3QoQ29udGVudERlbnNpdHlPYnNlcnZlciwge1xuICAgICAgICBvcHRpb25hbDogdHJ1ZSxcbiAgICAgICAgc2tpcFNlbGY6IHRydWVcbiAgICB9KTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfcmVuZGVyZXI6IFJlbmRlcmVyMiB8IG51bGwgPSBpbmplY3QoUmVuZGVyZXIyKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfZGVzdHJveSQgPSBpbmplY3QoRGVzdHJveWVkU2VydmljZSk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWY8YW55PiB8IG51bGwgPSBpbmplY3QoRWxlbWVudFJlZik7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2VsZW1lbnRzID0gW3RoaXMuX2VsZW1lbnRSZWZdO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9hbHRlcm5hdGl2ZVRvID0ge1xuICAgICAgICBbQ29udGVudERlbnNpdHlNb2RlLkNPTVBBQ1RdOiAoKTogQ29udGVudERlbnNpdHlNb2RlID0+XG4gICAgICAgICAgICB0aGlzLl9pc1N1cHBvcnRlZChDb250ZW50RGVuc2l0eU1vZGUuQ09OREVOU0VEKSA/IENvbnRlbnREZW5zaXR5TW9kZS5DT05ERU5TRUQgOiBDb250ZW50RGVuc2l0eU1vZGUuQ09aWSxcbiAgICAgICAgW0NvbnRlbnREZW5zaXR5TW9kZS5DT05ERU5TRURdOiAoKTogQ29udGVudERlbnNpdHlNb2RlID0+XG4gICAgICAgICAgICB0aGlzLl9pc1N1cHBvcnRlZChDb250ZW50RGVuc2l0eU1vZGUuQ09NUEFDVCkgPyBDb250ZW50RGVuc2l0eU1vZGUuQ09NUEFDVCA6IENvbnRlbnREZW5zaXR5TW9kZS5DT1pZLFxuICAgICAgICBbQ29udGVudERlbnNpdHlNb2RlLkNPWlldOiAoKTogQ29udGVudERlbnNpdHlNb2RlID0+IENvbnRlbnREZW5zaXR5TW9kZS5DT1pZIC8vIE5vIGFsdGVybmF0aXZlIGhlcmUsIGV2ZXJ5b25lIHNob3VsZCBzdXBwb3J0IGl0XG4gICAgfTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBfaW5qZWN0b3I6IEluamVjdG9yLCBwcml2YXRlIF9wcm92aWRlZENvbmZpZz86IENvbnRlbnREZW5zaXR5T2JzZXJ2ZXJTZXR0aW5ncykge1xuICAgICAgICBzdXBlcihpbml0aWFsQ29udGVudERlbnNpdHkoX2luamVjdG9yLCBfcHJvdmlkZWRDb25maWcpKTtcblxuICAgICAgICBjb25zdCBkZXN0cm95U3ViID0gdGhpcy5fZGVzdHJveSQuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgIGNvbXBsZXRlOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgZGVzdHJveVN1Yi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jb25maWcuZGVidWcpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0NvbnRlbnREZW5zaXR5T2JzZXJ2ZXI6IGRlc3Ryb3llZCcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5jb25maWcgPSB7XG4gICAgICAgICAgICAuLi5kZWZhdWx0Q29udGVudERlbnNpdHlPYnNlcnZlckNvbmZpZ3MsXG4gICAgICAgICAgICAuLi4odGhpcy5fcGFyZW50Q29udGVudERlbnNpdHlPYnNlcnZlcj8uY29uZmlnID8/IHt9KSxcbiAgICAgICAgICAgIC4uLihfcHJvdmlkZWRDb25maWcgfHwge30pXG4gICAgICAgIH07XG5cbiAgICAgICAgZ2V0Q2hhbmdlc1NvdXJjZSQoe1xuICAgICAgICAgICAgZGVmYXVsdENvbnRlbnREZW5zaXR5OiB0aGlzLnZhbHVlLFxuICAgICAgICAgICAgY29udGVudERlbnNpdHlEaXJlY3RpdmU6IHRoaXMuX2NvbnRlbnREZW5zaXR5RGlyZWN0aXZlID8/IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGNvbnRlbnREZW5zaXR5U2VydmljZTogdGhpcy5fZ2xvYmFsQ29udGVudERlbnNpdHlTZXJ2aWNlID8/IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIHBhcmVudENvbnRlbnREZW5zaXR5U2VydmljZTogdGhpcy5jb25maWcucmVzdHJpY3RDaGlsZENvbnRlbnREZW5zaXR5XG4gICAgICAgICAgICAgICAgPyB0aGlzLl9wYXJlbnRDb250ZW50RGVuc2l0eU9ic2VydmVyPy5hc09ic2VydmFibGUoKSA/PyB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgICB9KVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgbWFwKChkZW5zaXR5KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbmZpZy5kZWJ1Zykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYENvbnRlbnREZW5zaXR5T2JzZXJ2ZXI6IGRlbnNpdHkgY2hhbmdlZCB0byAke2RlbnNpdHl9YCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9pc1N1cHBvcnRlZChkZW5zaXR5KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jb25maWcuZGVidWcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgQ29udGVudERlbnNpdHlPYnNlcnZlcjogJHtkZW5zaXR5fSBpcyBub3Qgc3VwcG9ydGVkLiBGYWlsaW5nIGJhY2sgdG8gYWx0ZXJuYXRpdmUgb25lLmBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2FsdGVybmF0aXZlVG9bZGVuc2l0eV0oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENvbnRlbnREZW5zaXR5T2JzZXJ2ZXI6IGRlbnNpdHkgJHtkZW5zaXR5fSBpcyBub3Qgc3VwcG9ydGVkYCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRlbnNpdHk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChkZW5zaXR5KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5uZXh0KGRlbnNpdHkpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2FwcGx5Q2xhc3MoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9pc0NvbXBhY3QkLm5leHQoZGVuc2l0eSA9PT0gQ29udGVudERlbnNpdHlNb2RlLkNPTVBBQ1QpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2lzQ296eSQubmV4dChkZW5zaXR5ID09PSBDb250ZW50RGVuc2l0eU1vZGUuQ09aWSk7XG4gICAgICAgICAgICAgICAgdGhpcy5faXNDb25kZW5zZWQkLm5leHQoZGVuc2l0eSA9PT0gQ29udGVudERlbnNpdHlNb2RlLkNPTkRFTlNFRCk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNvbnN1bWUoLi4uY29uc3VtZXJzOiBDb250ZW50RGVuc2l0eU9ic2VydmVyVGFyZ2V0W10pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZWxlbWVudHMuY29uY2F0KC4uLmNvbnN1bWVycy5tYXAoKGMpID0+IGMuZWxlbWVudFJlZikpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbXBsZXRlcyB0aGUgc3RyZWFtIGFuZCBjbG9zZXMgYWxsIGludGVybmFsIHN1YnNjcmlwdGlvbnMuXG4gICAgICovXG4gICAgb3ZlcnJpZGUgY29tcGxldGUoKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLmNvbXBsZXRlKCk7XG4gICAgICAgIHRoaXMuX2lzQ29uZGVuc2VkJC5jb21wbGV0ZSgpO1xuICAgICAgICB0aGlzLl9pc0NvenkkLmNvbXBsZXRlKCk7XG4gICAgICAgIHRoaXMuX2lzQ29tcGFjdCQuY29tcGxldGUoKTtcbiAgICAgICAgdGhpcy5fcGFyZW50Q29udGVudERlbnNpdHlPYnNlcnZlciA9IG51bGw7XG4gICAgICAgIHRoaXMuX2NvbnRlbnREZW5zaXR5RGlyZWN0aXZlID0gbnVsbDtcbiAgICAgICAgdGhpcy5fZ2xvYmFsQ29udGVudERlbnNpdHlTZXJ2aWNlID0gbnVsbDtcbiAgICAgICAgdGhpcy5fZWxlbWVudFJlZiA9IG51bGw7XG4gICAgICAgIHRoaXMuX3JlbmRlcmVyID0gbnVsbDtcbiAgICAgICAgdGhpcy5fZWxlbWVudHMgPSBbXTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHJlbW92ZUNvbnN1bWVyKGNvbnN1bWVyOiBDb250ZW50RGVuc2l0eU9ic2VydmVyVGFyZ2V0KTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2VsZW1lbnRzLnNwbGljZSh0aGlzLl9lbGVtZW50cy5pbmRleE9mKGNvbnN1bWVyLmVsZW1lbnRSZWYpLCAxKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2FwcGx5Q2xhc3MoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5jb25maWc/Lm1vZGlmaWVycykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1vZGlmaWVycyA9IHRoaXMuY29uZmlnLm1vZGlmaWVycztcblxuICAgICAgICBjb25zdCBwYXJlbnRDb250ZW50RGVuc2l0eUVxdWFsID0gdGhpcy5fcGFyZW50Q29udGVudERlbnNpdHlPYnNlcnZlcj8udmFsdWUgPT09IHRoaXMudmFsdWU7XG5cbiAgICAgICAgdGhpcy5fZWxlbWVudHMuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuICAgICAgICAgICAgT2JqZWN0LnZhbHVlcyhtb2RpZmllcnMpLmZvckVhY2goKGNsYXNzTmFtZSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX3JlbmRlcmVyPy5yZW1vdmVDbGFzcyhlbGVtZW50Py5uYXRpdmVFbGVtZW50LCBjbGFzc05hbWUpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIC8vIFNpbXBseSByZW1vdmUgYWxsIG1vZGlmaWVycyBmcm9tIGN1cnJlbnQgZWxlbWVudC4gQ29udGVudCBkZW5zaXR5IHN0YXRlIGlzIGNvdmVyZWQgYnkgcGFyZW50IGVsZW1lbnQuXG4gICAgICAgICAgICBpZiAocGFyZW50Q29udGVudERlbnNpdHlFcXVhbCAmJiAhdGhpcy5jb25maWcuYWx3YXlzQWRkTW9kaWZpZXJzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl9yZW5kZXJlcj8uYWRkQ2xhc3MoZWxlbWVudD8ubmF0aXZlRWxlbWVudCwgbW9kaWZpZXJzW3RoaXMudmFsdWVdISk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBDaGVjayBpZiB0aGUgZ2l2ZW4gZGVuc2l0eSBpcyBzdXBwb3J0ZWQgKi9cbiAgICBwcml2YXRlIF9pc1N1cHBvcnRlZChkZW5zaXR5OiBDb250ZW50RGVuc2l0eU1vZGUpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29uZmlnLnN1cHBvcnRlZENvbnRlbnREZW5zaXR5Py5pbmNsdWRlcyhkZW5zaXR5KSA/PyBmYWxzZTtcbiAgICB9XG59XG4iXX0=
206
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudC1kZW5zaXR5LW9ic2VydmVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi9jb250ZW50LWRlbnNpdHkvc2VydmljZXMvY29udGVudC1kZW5zaXR5LW9ic2VydmVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFVBQVUsRUFDVixVQUFVLEVBRVYsTUFBTSxFQUNOLFVBQVUsRUFDVixXQUFXLEVBQ1gsUUFBUSxFQUNSLFNBQVMsRUFDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsZUFBZSxFQUFFLG9CQUFvQixFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNsRSxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUU5RixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUMzRSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUN6RixPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUNoRixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNuRSxPQUFPLEVBQUUsb0NBQW9DLEVBQUUsTUFBTSxzREFBc0QsQ0FBQztBQUM1RyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7O0FBRWhFLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxHQUFRLEVBQThCLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUssR0FBMkIsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUV2SCxNQUFNLE9BQU8sR0FBRyxDQUFDLFFBQWtCLEVBQUUscUJBQTBDLEVBQWMsRUFBRSxDQUMzRixDQUFDLHFCQUFxQixDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQU8sRUFBRTtJQUNoRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDcEIsSUFBSSxJQUFJLENBQUM7UUFDVCxJQUFJLEtBQUssR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDO1FBQ2hDLEtBQUssSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRyxHQUFHLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFO1lBQzdDLE1BQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQzFDLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxFQUFFO2dCQUMxQixzQ0FBc0M7Z0JBQ3RDLEtBQUssSUFBSSxJQUFJLENBQUM7YUFDakI7aUJBQU07Z0JBQ0gsSUFBSSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUNyQjtTQUNKO1FBQ0QsT0FBTyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7S0FDL0M7SUFDRCxPQUFPLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDN0QsQ0FBQyxDQUFDLENBQUM7QUFFUCxNQUFNLHdCQUF3QixHQUFHLENBQzdCLFFBQWtCLEVBQ2xCLGFBQXVELEVBQ3JDLEVBQUU7SUFDcEIsSUFBSSxPQUFPLGFBQWEsQ0FBQyxxQkFBcUIsS0FBSyxRQUFRLEVBQUU7UUFDekQsT0FBTyxhQUFhLENBQUMscUJBQTJDLENBQUM7S0FDcEU7SUFDRCxJQUFJLGlCQUFpQixDQUFDLGFBQWEsQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFO1FBQ3hELE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxRQUFRLEVBQUUsYUFBYSxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFDcEUsT0FBTyxhQUFhLENBQUMscUJBQXFCLENBQUMsVUFBVSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7S0FDbEU7SUFDRCxPQUFPLFFBQVEsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLHFCQUFxQixFQUFFLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUNuRixDQUFDLENBQUM7QUFFRixNQUFNLHFCQUFxQixHQUFHLENBQzFCLFFBQWtCLEVBQ2xCLGFBQThDLEVBQzVCLEVBQUU7SUFDcEIsTUFBTSxZQUFZLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQywyQkFBMkIsRUFBRSxJQUFJLEVBQUUsV0FBVyxDQUFDLFFBQVEsQ0FBQyxFQUFFLHFCQUFxQixDQUFDO0lBQ2xILElBQUksWUFBWSxFQUFFO1FBQ2QsT0FBTyxZQUFZLENBQUM7S0FDdkI7SUFDRCxPQUFPLHdCQUF3QixDQUFDLFFBQVEsRUFBRTtRQUN0QyxHQUFHLG9DQUFvQztRQUN2QyxHQUFHLENBQUMsYUFBYSxJQUFJLEVBQUUsQ0FBQztLQUMzQixDQUFDLENBQUM7QUFDUCxDQUFDLENBQUM7QUFHRixNQUFNLE9BQU8sc0JBQXVCLFNBQVEsZUFBbUM7SUFrQjNFLGNBQWM7SUFDZCxJQUFJLFNBQVM7UUFDVCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDO0lBQ2xDLENBQUM7SUFDRCxjQUFjO0lBQ2QsSUFBSSxNQUFNO1FBQ04sT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztJQUMvQixDQUFDO0lBQ0QsY0FBYztJQUNkLElBQUksV0FBVztRQUNYLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUM7SUFDcEMsQ0FBQztJQXVDRCxjQUFjO0lBQ2QsWUFBb0IsU0FBbUIsRUFBVSxlQUFnRDtRQUM3RixLQUFLLENBQUMscUJBQXFCLENBQUMsU0FBUyxFQUFFLGVBQWUsQ0FBQyxDQUFDLENBQUM7UUFEekMsY0FBUyxHQUFULFNBQVMsQ0FBVTtRQUFVLG9CQUFlLEdBQWYsZUFBZSxDQUFpQztRQWxFakcsY0FBYztRQUNHLGdCQUFXLEdBQUcsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUM7UUFDbkUsY0FBYztRQUNHLGFBQVEsR0FBRyxJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUNoRSxjQUFjO1FBQ0csa0JBQWEsR0FBRyxJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUNyRSxjQUFjO1FBQ2QsOERBQThEO1FBQ3JELGVBQVUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3RELGNBQWM7UUFDZCw4REFBOEQ7UUFDckQsWUFBTyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDaEQsY0FBYztRQUNkLDhEQUE4RDtRQUNyRCxpQkFBWSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxFQUFFLENBQUM7UUFjMUQsY0FBYztRQUNOLGlDQUE0QixHQUFHLE1BQU0sQ0FBQywyQkFBMkIsRUFBRTtZQUN2RSxRQUFRLEVBQUUsSUFBSTtTQUNqQixDQUFDLENBQUM7UUFFSCxjQUFjO1FBQ04sNkJBQXdCLEdBQUcsTUFBTSxDQUFDLHlCQUF5QixFQUFFO1lBQ2pFLFFBQVEsRUFBRSxJQUFJO1NBQ2pCLENBQUMsQ0FBQztRQUVILGNBQWM7UUFDTixrQ0FBNkIsR0FBRyxNQUFNLENBQUMsc0JBQXNCLEVBQUU7WUFDbkUsUUFBUSxFQUFFLElBQUk7WUFDZCxRQUFRLEVBQUUsSUFBSTtTQUNqQixDQUFDLENBQUM7UUFFSCxjQUFjO1FBQ04sY0FBUyxHQUFxQixNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFeEQsY0FBYztRQUNHLGdCQUFXLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRWxELGNBQWM7UUFDTixnQkFBVyxHQUEyQixNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFakUsY0FBYztRQUNOLGNBQVMsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUV2QyxjQUFjO1FBQ04sbUJBQWMsR0FBRztZQUNyQixDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxFQUFFLEdBQXVCLEVBQUUsQ0FDbkQsSUFBSSxDQUFDLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJO1lBQzVHLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLEVBQUUsR0FBdUIsRUFBRSxDQUNyRCxJQUFJLENBQUMsWUFBWSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLElBQUk7WUFDeEcsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUF1QixFQUFFLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLGtEQUFrRDtTQUNsSSxDQUFDO1FBTUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQzVCLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNoQixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFO2dCQUNuQixPQUFPLENBQUMsR0FBRyxDQUFDLG1DQUFtQyxDQUFDLENBQUM7YUFDcEQ7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxNQUFNLEdBQUc7WUFDVixHQUFHLG9DQUFvQztZQUN2QyxHQUFHLENBQUMsSUFBSSxDQUFDLDZCQUE2QixFQUFFLE1BQU0sSUFBSSxFQUFFLENBQUM7WUFDckQsR0FBRyxDQUFDLGVBQWUsSUFBSSxFQUFFLENBQUM7U0FDN0IsQ0FBQztRQUVGLGlCQUFpQixDQUFDO1lBQ2QscUJBQXFCLEVBQUUsSUFBSSxDQUFDLEtBQUs7WUFDakMsdUJBQXVCLEVBQUUsSUFBSSxDQUFDLHdCQUF3QixJQUFJLFNBQVM7WUFDbkUscUJBQXFCLEVBQUUsSUFBSSxDQUFDLDRCQUE0QixJQUFJLFNBQVM7WUFDckUsMkJBQTJCLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQywyQkFBMkI7Z0JBQ2hFLENBQUMsQ0FBQyxJQUFJLENBQUMsNkJBQTZCLEVBQUUsWUFBWSxFQUFFLElBQUksU0FBUztnQkFDakUsQ0FBQyxDQUFDLFNBQVM7U0FDbEIsQ0FBQzthQUNHLElBQUksQ0FDRCxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUNaLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUU7Z0JBQ25CLE9BQU8sQ0FBQyxHQUFHLENBQUMsOENBQThDLE9BQU8sRUFBRSxDQUFDLENBQUM7YUFDeEU7WUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsRUFBRTtnQkFDN0IsSUFBSTtvQkFDQSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFO3dCQUNuQixPQUFPLENBQUMsR0FBRyxDQUNQLDJCQUEyQixPQUFPLHFEQUFxRCxDQUMxRixDQUFDO3FCQUNMO29CQUNELE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO2lCQUN6QztnQkFBQyxPQUFPLENBQUMsRUFBRTtvQkFDUixNQUFNLElBQUksS0FBSyxDQUFDLG1DQUFtQyxPQUFPLG1CQUFtQixDQUFDLENBQUM7aUJBQ2xGO2FBQ0o7WUFDRCxPQUFPLE9BQU8sQ0FBQztRQUNuQixDQUFDLENBQUMsRUFDRixvQkFBb0IsRUFBRSxFQUN0QixrQkFBa0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQ3ZDO2FBQ0EsU0FBUyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDbkIsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNuQixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDbkIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsT0FBTyxLQUFLLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzlELElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sS0FBSyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN4RCxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxPQUFPLEtBQUssa0JBQWtCLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDdEUsQ0FBQyxDQUFDLENBQUM7SUFDWCxDQUFDO0lBRUQsY0FBYztJQUNkLE9BQU8sQ0FBQyxHQUFHLFNBQXlDO1FBQ2hELElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7SUFDakUsQ0FBQztJQUVEOztPQUVHO0lBQ00sUUFBUTtRQUNiLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNqQixJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzlCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUM1QixJQUFJLENBQUMsNkJBQTZCLEdBQUcsSUFBSSxDQUFDO1FBQzFDLElBQUksQ0FBQyx3QkFBd0IsR0FBRyxJQUFJLENBQUM7UUFDckMsSUFBSSxDQUFDLDRCQUE0QixHQUFHLElBQUksQ0FBQztRQUN6QyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztRQUN4QixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztRQUN0QixJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRUQsY0FBYztJQUNkLGNBQWMsQ0FBQyxRQUFzQztRQUNqRCxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDMUUsQ0FBQztJQUVELGNBQWM7SUFDTixXQUFXO1FBQ2YsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsU0FBUyxFQUFFO1lBQ3pCLE9BQU87U0FDVjtRQUNELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDO1FBRXhDLE1BQU0seUJBQXlCLEdBQUcsSUFBSSxDQUFDLDZCQUE2QixFQUFFLEtBQUssS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBRTNGLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDL0IsTUFBTSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRTtnQkFDM0MsSUFBSSxDQUFDLFNBQVMsRUFBRSxXQUFXLENBQUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxTQUFTLENBQUMsQ0FBQztZQUNuRSxDQUFDLENBQUMsQ0FBQztZQUVILHdHQUF3RztZQUN4RyxJQUFJLHlCQUF5QixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsRUFBRTtnQkFDOUQsT0FBTzthQUNWO1lBRUQsSUFBSSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBRSxDQUFDLENBQUM7UUFDN0UsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsOENBQThDO0lBQ3RDLFlBQVksQ0FBQyxPQUEyQjtRQUM1QyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsdUJBQXVCLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEtBQUssQ0FBQztJQUMzRSxDQUFDOzhHQWhMUSxzQkFBc0I7a0hBQXRCLHNCQUFzQjs7MkZBQXRCLHNCQUFzQjtrQkFEbEMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgRGVzdHJveVJlZixcbiAgICBFbGVtZW50UmVmLFxuICAgIEZhY3RvcnlTYW5zUHJvdmlkZXIsXG4gICAgaW5qZWN0LFxuICAgIEluamVjdGFibGUsXG4gICAgSW5qZWN0RmxhZ3MsXG4gICAgSW5qZWN0b3IsXG4gICAgUmVuZGVyZXIyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgbWFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBDb250ZW50RGVuc2l0eU9ic2VydmVyU2V0dGluZ3MgfSBmcm9tICcuLi9jbGFzc2VzL2NvbnRlbnQtZGVuc2l0eS1vYnNlcnZlci5zZXR0aW5ncyc7XG5pbXBvcnQgeyBDb250ZW50RGVuc2l0eU9ic2VydmVyVGFyZ2V0IH0gZnJvbSAnLi4vY29udGVudC1kZW5zaXR5LnR5cGVzJztcbmltcG9ydCB7IGdldENoYW5nZXNTb3VyY2UkIH0gZnJvbSAnLi4vaGVscGVycy9nZXQtY2hhbmdlcy1zb3VyY2UucHJvdmlkZXInO1xuaW1wb3J0IHsgR2xvYmFsQ29udGVudERlbnNpdHlTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvZ2xvYmFsLWNvbnRlbnQtZGVuc2l0eS5zZXJ2aWNlJztcbmltcG9ydCB7IENPTlRFTlRfREVOU0lUWV9ESVJFQ1RJVkUgfSBmcm9tICcuLi90b2tlbnMvY29udGVudC1kZW5zaXR5LWRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBDb250ZW50RGVuc2l0eU1vZGUgfSBmcm9tICcuLi90eXBlcy9jb250ZW50LWRlbnNpdHkubW9kZSc7XG5pbXBvcnQgeyBkZWZhdWx0Q29udGVudERlbnNpdHlPYnNlcnZlckNvbmZpZ3MgfSBmcm9tICcuLi92YXJpYWJsZXMvZGVmYXVsdC1jb250ZW50LWRlbnNpdHktY29uc3VtZXItY29uZmlnJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcblxuY29uc3QgaXNGYWN0b3J5UHJvdmlkZXIgPSAob2JqOiBhbnkpOiBvYmogaXMgRmFjdG9yeVNhbnNQcm92aWRlciA9PiAhIShvYmogJiYgKG9iaiBhcyBGYWN0b3J5U2Fuc1Byb3ZpZGVyKS51c2VGYWN0b3J5KTtcblxuY29uc3QgZ2V0RGVwcyA9IChpbmplY3RvcjogSW5qZWN0b3IsIGRlZmF1bHRDb250ZW50RGVuc2l0eTogRmFjdG9yeVNhbnNQcm92aWRlcik6IEFycmF5PGFueT4gPT5cbiAgICAoZGVmYXVsdENvbnRlbnREZW5zaXR5LmRlcHMgfHwgW10pLm1hcCgoZGVwKTogYW55ID0+IHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZGVwKSkge1xuICAgICAgICAgICAgbGV0IHR5cGU7XG4gICAgICAgICAgICBsZXQgZmxhZ3MgPSBJbmplY3RGbGFncy5EZWZhdWx0O1xuICAgICAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGRlcC5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmbGFnID0gZGVwW2luZGV4XVsnX19OR19ESV9GTEFHX18nXTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGZsYWcgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1iaXR3aXNlXG4gICAgICAgICAgICAgICAgICAgIGZsYWdzIHw9IGZsYWc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZSA9IGRlcFtpbmRleF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGluamVjdG9yLmdldCh0eXBlLCB1bmRlZmluZWQsIGZsYWdzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaW5qZWN0b3IuZ2V0KGRlcCwgdW5kZWZpbmVkLCBJbmplY3RGbGFncy5EZWZhdWx0KTtcbiAgICB9KTtcblxuY29uc3QgZ2V0RGVmYXVsdENvbnRlbnREZW5zaXR5ID0gKFxuICAgIGluamVjdG9yOiBJbmplY3RvcixcbiAgICBjb25maWd1cmF0aW9uOiBSZXF1aXJlZDxDb250ZW50RGVuc2l0eU9ic2VydmVyU2V0dGluZ3M+XG4pOiBDb250ZW50RGVuc2l0eU1vZGUgPT4ge1xuICAgIGlmICh0eXBlb2YgY29uZmlndXJhdGlvbi5kZWZhdWx0Q29udGVudERlbnNpdHkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiBjb25maWd1cmF0aW9uLmRlZmF1bHRDb250ZW50RGVuc2l0eSBhcyBDb250ZW50RGVuc2l0eU1vZGU7XG4gICAgfVxuICAgIGlmIChpc0ZhY3RvcnlQcm92aWRlcihjb25maWd1cmF0aW9uLmRlZmF1bHRDb250ZW50RGVuc2l0eSkpIHtcbiAgICAgICAgY29uc3QgZGVwcyA9IGdldERlcHMoaW5qZWN0b3IsIGNvbmZpZ3VyYXRpb24uZGVmYXVsdENvbnRlbnREZW5zaXR5KTtcbiAgICAgICAgcmV0dXJuIGNvbmZpZ3VyYXRpb24uZGVmYXVsdENvbnRlbnREZW5zaXR5LnVzZUZhY3RvcnkoLi4uZGVwcyk7XG4gICAgfVxuICAgIHJldHVybiBpbmplY3Rvci5nZXQoY29uZmlndXJhdGlvbi5kZWZhdWx0Q29udGVudERlbnNpdHksIHVuZGVmaW5lZCwgdW5kZWZpbmVkKTtcbn07XG5cbmNvbnN0IGluaXRpYWxDb250ZW50RGVuc2l0eSA9IChcbiAgICBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgY29uZmlndXJhdGlvbj86IENvbnRlbnREZW5zaXR5T2JzZXJ2ZXJTZXR0aW5nc1xuKTogQ29udGVudERlbnNpdHlNb2RlID0+IHtcbiAgICBjb25zdCBzZXJ2aWNlVmFsdWUgPSBpbmplY3Rvci5nZXQoR2xvYmFsQ29udGVudERlbnNpdHlTZXJ2aWNlLCBudWxsLCBJbmplY3RGbGFncy5PcHRpb25hbCk/LmN1cnJlbnRDb250ZW50RGVuc2l0eTtcbiAgICBpZiAoc2VydmljZVZhbHVlKSB7XG4gICAgICAgIHJldHVybiBzZXJ2aWNlVmFsdWU7XG4gICAgfVxuICAgIHJldHVybiBnZXREZWZhdWx0Q29udGVudERlbnNpdHkoaW5qZWN0b3IsIHtcbiAgICAgICAgLi4uZGVmYXVsdENvbnRlbnREZW5zaXR5T2JzZXJ2ZXJDb25maWdzLFxuICAgICAgICAuLi4oY29uZmlndXJhdGlvbiB8fCB7fSlcbiAgICB9KTtcbn07XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBDb250ZW50RGVuc2l0eU9ic2VydmVyIGV4dGVuZHMgQmVoYXZpb3JTdWJqZWN0PENvbnRlbnREZW5zaXR5TW9kZT4ge1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcmVhZG9ubHkgY29uZmlnOiBDb250ZW50RGVuc2l0eU9ic2VydmVyU2V0dGluZ3M7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9pc0NvbXBhY3QkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9pc0NvenkkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9pc0NvbmRlbnNlZCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbWVtYmVyLW9yZGVyaW5nXG4gICAgcmVhZG9ubHkgaXNDb21wYWN0JCA9IHRoaXMuX2lzQ29tcGFjdCQuYXNPYnNlcnZhYmxlKCk7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L21lbWJlci1vcmRlcmluZ1xuICAgIHJlYWRvbmx5IGlzQ296eSQgPSB0aGlzLl9pc0NvenkkLmFzT2JzZXJ2YWJsZSgpO1xuICAgIC8qKiBAaGlkZGVuICovXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9tZW1iZXItb3JkZXJpbmdcbiAgICByZWFkb25seSBpc0NvbmRlbnNlZCQgPSB0aGlzLl9pc0NvbmRlbnNlZCQuYXNPYnNlcnZhYmxlKCk7XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgaXNDb21wYWN0KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNDb21wYWN0JC52YWx1ZTtcbiAgICB9XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgaXNDb3p5KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNDb3p5JC52YWx1ZTtcbiAgICB9XG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgaXNDb25kZW5zZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc0NvbmRlbnNlZCQudmFsdWU7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9nbG9iYWxDb250ZW50RGVuc2l0eVNlcnZpY2UgPSBpbmplY3QoR2xvYmFsQ29udGVudERlbnNpdHlTZXJ2aWNlLCB7XG4gICAgICAgIG9wdGlvbmFsOiB0cnVlXG4gICAgfSk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2NvbnRlbnREZW5zaXR5RGlyZWN0aXZlID0gaW5qZWN0KENPTlRFTlRfREVOU0lUWV9ESVJFQ1RJVkUsIHtcbiAgICAgICAgb3B0aW9uYWw6IHRydWVcbiAgICB9KTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfcGFyZW50Q29udGVudERlbnNpdHlPYnNlcnZlciA9IGluamVjdChDb250ZW50RGVuc2l0eU9ic2VydmVyLCB7XG4gICAgICAgIG9wdGlvbmFsOiB0cnVlLFxuICAgICAgICBza2lwU2VsZjogdHJ1ZVxuICAgIH0pO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9yZW5kZXJlcjogUmVuZGVyZXIyIHwgbnVsbCA9IGluamVjdChSZW5kZXJlcjIpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9kZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9lbGVtZW50UmVmOiBFbGVtZW50UmVmPGFueT4gfCBudWxsID0gaW5qZWN0KEVsZW1lbnRSZWYpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9lbGVtZW50cyA9IFt0aGlzLl9lbGVtZW50UmVmXTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfYWx0ZXJuYXRpdmVUbyA9IHtcbiAgICAgICAgW0NvbnRlbnREZW5zaXR5TW9kZS5DT01QQUNUXTogKCk6IENvbnRlbnREZW5zaXR5TW9kZSA9PlxuICAgICAgICAgICAgdGhpcy5faXNTdXBwb3J0ZWQoQ29udGVudERlbnNpdHlNb2RlLkNPTkRFTlNFRCkgPyBDb250ZW50RGVuc2l0eU1vZGUuQ09OREVOU0VEIDogQ29udGVudERlbnNpdHlNb2RlLkNPWlksXG4gICAgICAgIFtDb250ZW50RGVuc2l0eU1vZGUuQ09OREVOU0VEXTogKCk6IENvbnRlbnREZW5zaXR5TW9kZSA9PlxuICAgICAgICAgICAgdGhpcy5faXNTdXBwb3J0ZWQoQ29udGVudERlbnNpdHlNb2RlLkNPTVBBQ1QpID8gQ29udGVudERlbnNpdHlNb2RlLkNPTVBBQ1QgOiBDb250ZW50RGVuc2l0eU1vZGUuQ09aWSxcbiAgICAgICAgW0NvbnRlbnREZW5zaXR5TW9kZS5DT1pZXTogKCk6IENvbnRlbnREZW5zaXR5TW9kZSA9PiBDb250ZW50RGVuc2l0eU1vZGUuQ09aWSAvLyBObyBhbHRlcm5hdGl2ZSBoZXJlLCBldmVyeW9uZSBzaG91bGQgc3VwcG9ydCBpdFxuICAgIH07XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgX2luamVjdG9yOiBJbmplY3RvciwgcHJpdmF0ZSBfcHJvdmlkZWRDb25maWc/OiBDb250ZW50RGVuc2l0eU9ic2VydmVyU2V0dGluZ3MpIHtcbiAgICAgICAgc3VwZXIoaW5pdGlhbENvbnRlbnREZW5zaXR5KF9pbmplY3RvciwgX3Byb3ZpZGVkQ29uZmlnKSk7XG5cbiAgICAgICAgdGhpcy5fZGVzdHJveVJlZi5vbkRlc3Ryb3koKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgaWYgKHRoaXMuY29uZmlnLmRlYnVnKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0NvbnRlbnREZW5zaXR5T2JzZXJ2ZXI6IGRlc3Ryb3llZCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmNvbmZpZyA9IHtcbiAgICAgICAgICAgIC4uLmRlZmF1bHRDb250ZW50RGVuc2l0eU9ic2VydmVyQ29uZmlncyxcbiAgICAgICAgICAgIC4uLih0aGlzLl9wYXJlbnRDb250ZW50RGVuc2l0eU9ic2VydmVyPy5jb25maWcgPz8ge30pLFxuICAgICAgICAgICAgLi4uKF9wcm92aWRlZENvbmZpZyB8fCB7fSlcbiAgICAgICAgfTtcblxuICAgICAgICBnZXRDaGFuZ2VzU291cmNlJCh7XG4gICAgICAgICAgICBkZWZhdWx0Q29udGVudERlbnNpdHk6IHRoaXMudmFsdWUsXG4gICAgICAgICAgICBjb250ZW50RGVuc2l0eURpcmVjdGl2ZTogdGhpcy5fY29udGVudERlbnNpdHlEaXJlY3RpdmUgPz8gdW5kZWZpbmVkLFxuICAgICAgICAgICAgY29udGVudERlbnNpdHlTZXJ2aWNlOiB0aGlzLl9nbG9iYWxDb250ZW50RGVuc2l0eVNlcnZpY2UgPz8gdW5kZWZpbmVkLFxuICAgICAgICAgICAgcGFyZW50Q29udGVudERlbnNpdHlTZXJ2aWNlOiB0aGlzLmNvbmZpZy5yZXN0cmljdENoaWxkQ29udGVudERlbnNpdHlcbiAgICAgICAgICAgICAgICA/IHRoaXMuX3BhcmVudENvbnRlbnREZW5zaXR5T2JzZXJ2ZXI/LmFzT2JzZXJ2YWJsZSgpID8/IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkXG4gICAgICAgIH0pXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoKGRlbnNpdHkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY29uZmlnLmRlYnVnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgQ29udGVudERlbnNpdHlPYnNlcnZlcjogZGVuc2l0eSBjaGFuZ2VkIHRvICR7ZGVuc2l0eX1gKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX2lzU3VwcG9ydGVkKGRlbnNpdHkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbmZpZy5kZWJ1Zykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBDb250ZW50RGVuc2l0eU9ic2VydmVyOiAke2RlbnNpdHl9IGlzIG5vdCBzdXBwb3J0ZWQuIEZhaWxpbmcgYmFjayB0byBhbHRlcm5hdGl2ZSBvbmUuYFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fYWx0ZXJuYXRpdmVUb1tkZW5zaXR5XSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ29udGVudERlbnNpdHlPYnNlcnZlcjogZGVuc2l0eSAke2RlbnNpdHl9IGlzIG5vdCBzdXBwb3J0ZWRgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGVuc2l0eTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLl9kZXN0cm95UmVmKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZGVuc2l0eSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubmV4dChkZW5zaXR5KTtcbiAgICAgICAgICAgICAgICB0aGlzLl9hcHBseUNsYXNzKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5faXNDb21wYWN0JC5uZXh0KGRlbnNpdHkgPT09IENvbnRlbnREZW5zaXR5TW9kZS5DT01QQUNUKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9pc0NvenkkLm5leHQoZGVuc2l0eSA9PT0gQ29udGVudERlbnNpdHlNb2RlLkNPWlkpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2lzQ29uZGVuc2VkJC5uZXh0KGRlbnNpdHkgPT09IENvbnRlbnREZW5zaXR5TW9kZS5DT05ERU5TRUQpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjb25zdW1lKC4uLmNvbnN1bWVyczogQ29udGVudERlbnNpdHlPYnNlcnZlclRhcmdldFtdKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2VsZW1lbnRzLmNvbmNhdCguLi5jb25zdW1lcnMubWFwKChjKSA9PiBjLmVsZW1lbnRSZWYpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb21wbGV0ZXMgdGhlIHN0cmVhbSBhbmQgY2xvc2VzIGFsbCBpbnRlcm5hbCBzdWJzY3JpcHRpb25zLlxuICAgICAqL1xuICAgIG92ZXJyaWRlIGNvbXBsZXRlKCk6IHZvaWQge1xuICAgICAgICBzdXBlci5jb21wbGV0ZSgpO1xuICAgICAgICB0aGlzLl9pc0NvbmRlbnNlZCQuY29tcGxldGUoKTtcbiAgICAgICAgdGhpcy5faXNDb3p5JC5jb21wbGV0ZSgpO1xuICAgICAgICB0aGlzLl9pc0NvbXBhY3QkLmNvbXBsZXRlKCk7XG4gICAgICAgIHRoaXMuX3BhcmVudENvbnRlbnREZW5zaXR5T2JzZXJ2ZXIgPSBudWxsO1xuICAgICAgICB0aGlzLl9jb250ZW50RGVuc2l0eURpcmVjdGl2ZSA9IG51bGw7XG4gICAgICAgIHRoaXMuX2dsb2JhbENvbnRlbnREZW5zaXR5U2VydmljZSA9IG51bGw7XG4gICAgICAgIHRoaXMuX2VsZW1lbnRSZWYgPSBudWxsO1xuICAgICAgICB0aGlzLl9yZW5kZXJlciA9IG51bGw7XG4gICAgICAgIHRoaXMuX2VsZW1lbnRzID0gW107XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICByZW1vdmVDb25zdW1lcihjb25zdW1lcjogQ29udGVudERlbnNpdHlPYnNlcnZlclRhcmdldCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9lbGVtZW50cy5zcGxpY2UodGhpcy5fZWxlbWVudHMuaW5kZXhPZihjb25zdW1lci5lbGVtZW50UmVmKSwgMSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9hcHBseUNsYXNzKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuY29uZmlnPy5tb2RpZmllcnMpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBtb2RpZmllcnMgPSB0aGlzLmNvbmZpZy5tb2RpZmllcnM7XG5cbiAgICAgICAgY29uc3QgcGFyZW50Q29udGVudERlbnNpdHlFcXVhbCA9IHRoaXMuX3BhcmVudENvbnRlbnREZW5zaXR5T2JzZXJ2ZXI/LnZhbHVlID09PSB0aGlzLnZhbHVlO1xuXG4gICAgICAgIHRoaXMuX2VsZW1lbnRzLmZvckVhY2goKGVsZW1lbnQpID0+IHtcbiAgICAgICAgICAgIE9iamVjdC52YWx1ZXMobW9kaWZpZXJzKS5mb3JFYWNoKChjbGFzc05hbWUpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9yZW5kZXJlcj8ucmVtb3ZlQ2xhc3MoZWxlbWVudD8ubmF0aXZlRWxlbWVudCwgY2xhc3NOYW1lKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAvLyBTaW1wbHkgcmVtb3ZlIGFsbCBtb2RpZmllcnMgZnJvbSBjdXJyZW50IGVsZW1lbnQuIENvbnRlbnQgZGVuc2l0eSBzdGF0ZSBpcyBjb3ZlcmVkIGJ5IHBhcmVudCBlbGVtZW50LlxuICAgICAgICAgICAgaWYgKHBhcmVudENvbnRlbnREZW5zaXR5RXF1YWwgJiYgIXRoaXMuY29uZmlnLmFsd2F5c0FkZE1vZGlmaWVycykge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fcmVuZGVyZXI/LmFkZENsYXNzKGVsZW1lbnQ/Lm5hdGl2ZUVsZW1lbnQsIG1vZGlmaWVyc1t0aGlzLnZhbHVlXSEpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQ2hlY2sgaWYgdGhlIGdpdmVuIGRlbnNpdHkgaXMgc3VwcG9ydGVkICovXG4gICAgcHJpdmF0ZSBfaXNTdXBwb3J0ZWQoZGVuc2l0eTogQ29udGVudERlbnNpdHlNb2RlKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbmZpZy5zdXBwb3J0ZWRDb250ZW50RGVuc2l0eT8uaW5jbHVkZXMoZGVuc2l0eSkgPz8gZmFsc2U7XG4gICAgfVxufVxuIl19