@wemake4u/form-player-se 1.0.41 → 1.0.43

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 (90) hide show
  1. package/esm2022/lib/builtIn/builtIn.mjs +4 -2
  2. package/esm2022/lib/builtIn/dialog.json +7 -0
  3. package/esm2022/lib/builtIn/form.json +12 -0
  4. package/esm2022/lib/builtIn/function.json +22 -0
  5. package/esm2022/lib/builtIn/json.json +30 -0
  6. package/esm2022/lib/controls/button.mjs +4 -1
  7. package/esm2022/lib/controls/checkbox.mjs +4 -1
  8. package/esm2022/lib/controls/checklist.mjs +6 -3
  9. package/esm2022/lib/controls/chipchecklist.mjs +6 -3
  10. package/esm2022/lib/controls/chipradio.mjs +6 -3
  11. package/esm2022/lib/controls/date.mjs +4 -1
  12. package/esm2022/lib/controls/datetime.mjs +4 -0
  13. package/esm2022/lib/controls/factory.mjs +4 -1
  14. package/esm2022/lib/controls/filepicker.mjs +4 -1
  15. package/esm2022/lib/controls/number.mjs +4 -1
  16. package/esm2022/lib/controls/radio.mjs +6 -3
  17. package/esm2022/lib/controls/select.mjs +6 -3
  18. package/esm2022/lib/controls/taglist.mjs +6 -3
  19. package/esm2022/lib/controls/textarea.mjs +4 -1
  20. package/esm2022/lib/controls/textfield.mjs +4 -1
  21. package/esm2022/lib/controls/time.mjs +4 -1
  22. package/esm2022/lib/dialog/dialog.component.mjs +3 -3
  23. package/esm2022/lib/directives/dialog.directive.mjs +7 -2
  24. package/esm2022/lib/directives/repeat.directive.mjs +6 -3
  25. package/esm2022/lib/dynamic-fields/dynamic-fields.component.mjs +122 -27
  26. package/esm2022/lib/dynamic-form/dynamic-form.component.mjs +33 -312
  27. package/esm2022/lib/locale/locale-de.mjs +6 -2
  28. package/esm2022/lib/locale/locale-en.mjs +5 -1
  29. package/esm2022/lib/locale/locale-es.mjs +6 -2
  30. package/esm2022/lib/locale/locale-fr.mjs +6 -2
  31. package/esm2022/lib/locale/locale-it.mjs +6 -2
  32. package/esm2022/lib/locale/locale-pt.mjs +6 -2
  33. package/esm2022/lib/services/builder.service.mjs +347 -0
  34. package/esm2022/lib/services/dialog.service.mjs +13 -1
  35. package/esm2022/lib/services/form.service.mjs +45 -13
  36. package/esm2022/lib/services/function.service.mjs +6 -1
  37. package/esm2022/lib/services/json.service.mjs +47 -0
  38. package/esm2022/lib/services/programmability.service.mjs +21 -45
  39. package/esm2022/lib/services/scope.service.mjs +4 -7
  40. package/esm2022/lib/services/status.service.mjs +35 -18
  41. package/esm2022/lib/utils/FormGroupEx.mjs +52 -0
  42. package/esm2022/lib/utils/groupByRow.mjs +2 -2
  43. package/esm2022/lib/utils/patch.mjs +2 -2
  44. package/esm2022/lib/utils/window.mjs +40 -0
  45. package/esm2022/public-api.mjs +1 -2
  46. package/fesm2022/wemake4u-form-player-se.mjs +1824 -1390
  47. package/fesm2022/wemake4u-form-player-se.mjs.map +1 -1
  48. package/lib/components/deleteRowRenderer/deleteRowRenderer.component.d.ts +4 -0
  49. package/lib/components/objectURLRenderer/objectURLRenderer.component.d.ts +4 -0
  50. package/lib/components/setFilter/setFilter.component.d.ts +4 -0
  51. package/lib/controls/button.d.ts +1 -0
  52. package/lib/controls/checkbox.d.ts +1 -0
  53. package/lib/controls/checklist.d.ts +2 -1
  54. package/lib/controls/chipchecklist.d.ts +2 -1
  55. package/lib/controls/chipradio.d.ts +2 -1
  56. package/lib/controls/date.d.ts +1 -0
  57. package/lib/controls/datetime.d.ts +3 -0
  58. package/lib/controls/filepicker.d.ts +1 -0
  59. package/lib/controls/number.d.ts +1 -0
  60. package/lib/controls/radio.d.ts +2 -1
  61. package/lib/controls/select.d.ts +2 -1
  62. package/lib/controls/taglist.d.ts +2 -1
  63. package/lib/controls/textarea.d.ts +1 -0
  64. package/lib/controls/textfield.d.ts +1 -0
  65. package/lib/controls/time.d.ts +1 -0
  66. package/lib/dialog/dialog.component.d.ts +28 -0
  67. package/lib/dynamic-fields/dynamic-fields.component.d.ts +51 -10
  68. package/lib/dynamic-form/dynamic-form.component.d.ts +36 -23
  69. package/lib/locale/locale-de.d.ts +4 -0
  70. package/lib/locale/locale-en.d.ts +4 -0
  71. package/lib/locale/locale-es.d.ts +4 -0
  72. package/lib/locale/locale-fr.d.ts +4 -0
  73. package/lib/locale/locale-it.d.ts +4 -0
  74. package/lib/locale/locale-pt.d.ts +4 -0
  75. package/lib/locale/locale.d.ts +28 -0
  76. package/lib/services/builder.service.d.ts +43 -0
  77. package/lib/services/dialog.service.d.ts +2 -0
  78. package/lib/services/form.service.d.ts +2 -1
  79. package/lib/services/function.service.d.ts +2 -0
  80. package/lib/services/json.service.d.ts +10 -0
  81. package/lib/services/programmability.service.d.ts +6 -2
  82. package/lib/services/status.service.d.ts +3 -4
  83. package/lib/utils/FormGroupEx.d.ts +18 -0
  84. package/lib/utils/window.d.ts +18 -0
  85. package/package.json +1 -1
  86. package/public-api.d.ts +0 -1
  87. package/esm2022/lib/utils/extractFiles.mjs +0 -30
  88. package/esm2022/lib/utils/toFormData.mjs +0 -11
  89. package/lib/utils/extractFiles.d.ts +0 -4
  90. package/lib/utils/toFormData.d.ts +0 -1
@@ -11,12 +11,13 @@ import * as i2 from "../services/weak.service";
11
11
  import * as i3 from "../services/toast.service";
12
12
  import * as i4 from "../services/dialog.service";
13
13
  import * as i5 from "../services/formatter.service";
14
- import * as i6 from "../services/function.service";
15
- import * as i7 from "./form.service";
16
- import * as i8 from "../services/global.service";
17
- import * as i9 from "../services/subscribe.service";
18
- import * as i10 from "../services/register.service";
19
- import * as i11 from "../services/scope.service";
14
+ import * as i6 from "../services/json.service";
15
+ import * as i7 from "../services/function.service";
16
+ import * as i8 from "./form.service";
17
+ import * as i9 from "../services/global.service";
18
+ import * as i10 from "../services/subscribe.service";
19
+ import * as i11 from "../services/register.service";
20
+ import * as i12 from "../services/scope.service";
20
21
  const StatusDependency = "$status";
21
22
  export class ProgrammabilityService {
22
23
  feelService;
@@ -24,6 +25,7 @@ export class ProgrammabilityService {
24
25
  toastService;
25
26
  dialogService;
26
27
  formatterService;
28
+ JsonService;
27
29
  functionService;
28
30
  formService;
29
31
  globalService;
@@ -31,12 +33,13 @@ export class ProgrammabilityService {
31
33
  destroyRef;
32
34
  register;
33
35
  scope;
34
- constructor(feelService, weakService, toastService, dialogService, formatterService, functionService, formService, globalService, subscribeService, destroyRef, register, scope) {
36
+ constructor(feelService, weakService, toastService, dialogService, formatterService, JsonService, functionService, formService, globalService, subscribeService, destroyRef, register, scope) {
35
37
  this.feelService = feelService;
36
38
  this.weakService = weakService;
37
39
  this.toastService = toastService;
38
40
  this.dialogService = dialogService;
39
41
  this.formatterService = formatterService;
42
+ this.JsonService = JsonService;
40
43
  this.functionService = functionService;
41
44
  this.formService = formService;
42
45
  this.globalService = globalService;
@@ -50,6 +53,7 @@ export class ProgrammabilityService {
50
53
  this.toastService,
51
54
  this.functionService,
52
55
  this.formatterService,
56
+ this.JsonService,
53
57
  this.register
54
58
  ];
55
59
  this.predefinedFunctions = this.getPredefinedFunctions();
@@ -60,12 +64,7 @@ export class ProgrammabilityService {
60
64
  - feel-cacheable: "on", "off"
61
65
  */
62
66
  predefinedFunctions;
63
- //private destroy$ = new Subject<void>();
64
67
  evaluatorProviders = [];
65
- //ngOnDestroy(): void {
66
- // this.destroy$.next();
67
- // this.destroy$.complete();
68
- //}
69
68
  addEvaluatorProviders(evaluatorProvider) {
70
69
  if (evaluatorProvider) {
71
70
  this.evaluatorProviders.push(evaluatorProvider);
@@ -135,41 +134,15 @@ export class ProgrammabilityService {
135
134
  this.invalidateExpression(this.getExpression(value));
136
135
  }
137
136
  }
137
+ invalidateAll() {
138
+ this.invalidateAllExpression();
139
+ }
138
140
  watch(formGroup, dependencies, callback) {
139
141
  this.watchingDependencies(formGroup, dependencies, callback);
140
142
  }
141
143
  getDependencies(expression) {
142
144
  return this.feelService.getDependencies(expression);
143
145
  }
144
- //subscribeChanges<T>(
145
- // observable$: Observable<T>,
146
- // control: AbstractControl,
147
- // initial: T,
148
- // callback: (() => void) | ((oldValue: T, newValue: T) => void),
149
- // logFn?: (control: AbstractControl) => void
150
- //) {
151
- // observable$
152
- // .pipe(
153
- // startWith(initial),
154
- // pairwise(),
155
- // filter(([oldValue, newValue]) => {
156
- // return control instanceof FormArray
157
- // || control instanceof FormGroup
158
- // || oldValue !== newValue
159
- // }),
160
- // takeUntil(this.destroy$)
161
- // )
162
- // .subscribe(([oldValue, newValue]) => {
163
- // queueMicrotask(() => {
164
- // if (callback.length === 0) {
165
- // (callback as () => void)();
166
- // } else {
167
- // (callback as (oldValue: T, newValue: T) => void)(oldValue, newValue);
168
- // }
169
- // logFn?.(control);
170
- // });
171
- // });
172
- //}
173
146
  get verbose() {
174
147
  return this._verbose;
175
148
  }
@@ -478,6 +451,9 @@ export class ProgrammabilityService {
478
451
  invalidateExpression(expression) {
479
452
  this.weakService.invalidate(this, expression);
480
453
  }
454
+ invalidateAllExpression() {
455
+ this.weakService.invalidateAll(this);
456
+ }
481
457
  processDependencies(dependency) {
482
458
  const statusDependency = Array.isArray(dependency)
483
459
  && dependency.length > 1
@@ -489,14 +465,14 @@ export class ProgrammabilityService {
489
465
  getPath(control) {
490
466
  return this.formService.getPath(control).join(".");
491
467
  }
492
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ProgrammabilityService, deps: [{ token: i1.FeelService }, { token: i2.WeakService }, { token: i3.ToastService }, { token: i4.DialogService }, { token: i5.FormatterService }, { token: i6.FunctionService }, { token: i7.FormService }, { token: i8.GlobalService }, { token: i9.SubscribeService }, { token: i0.DestroyRef }, { token: i10.RegisterService, optional: true }, { token: i11.ScopeService, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
468
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ProgrammabilityService, deps: [{ token: i1.FeelService }, { token: i2.WeakService }, { token: i3.ToastService }, { token: i4.DialogService }, { token: i5.FormatterService }, { token: i6.JsonService }, { token: i7.FunctionService }, { token: i8.FormService }, { token: i9.GlobalService }, { token: i10.SubscribeService }, { token: i0.DestroyRef }, { token: i11.RegisterService, optional: true }, { token: i12.ScopeService, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
493
469
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ProgrammabilityService });
494
470
  }
495
471
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ProgrammabilityService, decorators: [{
496
472
  type: Injectable
497
- }], ctorParameters: () => [{ type: i1.FeelService }, { type: i2.WeakService }, { type: i3.ToastService }, { type: i4.DialogService }, { type: i5.FormatterService }, { type: i6.FunctionService }, { type: i7.FormService }, { type: i8.GlobalService }, { type: i9.SubscribeService }, { type: i0.DestroyRef }, { type: i10.RegisterService, decorators: [{
473
+ }], ctorParameters: () => [{ type: i1.FeelService }, { type: i2.WeakService }, { type: i3.ToastService }, { type: i4.DialogService }, { type: i5.FormatterService }, { type: i6.JsonService }, { type: i7.FunctionService }, { type: i8.FormService }, { type: i9.GlobalService }, { type: i10.SubscribeService }, { type: i0.DestroyRef }, { type: i11.RegisterService, decorators: [{
498
474
  type: Optional
499
- }] }, { type: i11.ScopeService, decorators: [{
475
+ }] }, { type: i12.ScopeService, decorators: [{
500
476
  type: Optional
501
477
  }] }] });
502
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZ3JhbW1hYmlsaXR5LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc2lyaW8vc3JjL2xpYi9zZXJ2aWNlcy9wcm9ncmFtbWFiaWxpdHkuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWMsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRSxPQUFPLEVBQW1CLFNBQVMsRUFBZ0MsTUFBTSxnQkFBZ0IsQ0FBQztBQVkxRixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNwQyxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckMsT0FBTyxFQUFRLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDOzs7Ozs7Ozs7Ozs7O0FBR2hFLE1BQU0sZ0JBQWdCLEdBQUcsU0FBUyxDQUFDO0FBR25DLE1BQU0sT0FBTyxzQkFBc0I7SUFFYjtJQUNSO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNZO0lBQ0E7SUFYeEIsWUFBb0IsV0FBd0IsRUFDaEMsV0FBd0IsRUFDeEIsWUFBMEIsRUFDMUIsYUFBNEIsRUFDNUIsZ0JBQWtDLEVBQ2xDLGVBQWdDLEVBQ2hDLFdBQXdCLEVBQ3hCLGFBQTRCLEVBQzVCLGdCQUFrQyxFQUNsQyxVQUFzQixFQUNWLFFBQXlCLEVBQ3pCLEtBQW1CO1FBWHZCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ2hDLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLHFCQUFnQixHQUFoQixnQkFB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O1FBQ3RDLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3JELENBQUM7d0dBbmlCVSxzQkFBc0I7NEdBQXRCLHNCQUFzQjs7NEZBQXRCLHNCQUFzQjtrQkFEbEMsVUFBVTs7MEJBYUosUUFBUTs7MEJBQ1IsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERlc3Ryb3lSZWYsIEluamVjdGFibGUsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgRm9ybUFycmF5LCBGb3JtQ29udHJvbFN0YXR1cywgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBGZWVsU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2ZlZWwuc2VydmljZSc7XHJcbmltcG9ydCB7IFNjb3BlU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3Njb3BlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBSZWdpc3RlclNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9yZWdpc3Rlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVG9hc3RTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvdG9hc3Quc2VydmljZSc7XHJcbmltcG9ydCB7IEZ1bmN0aW9uU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2Z1bmN0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBHbG9iYWxTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvZ2xvYmFsLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBGb3JtU2VydmljZSB9IGZyb20gJy4vZm9ybS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRGlhbG9nU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2RpYWxvZy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRm9ybWF0dGVyU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2Zvcm1hdHRlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgV2Vha1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy93ZWFrLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTdWJzY3JpYmVTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvc3Vic2NyaWJlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyB0b1Byb3h5IH0gZnJvbSAnLi4vdXRpbHMvcHJveHknO1xyXG5pbXBvcnQgeyBpc09ic2VydmFibGUgfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IFBhdGgsIG1hdGNoUGF0aCB9IGZyb20gJy4uL2NvbW1vbi9wYXRoJztcclxuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xyXG5cclxuXHJcbmNvbnN0IFN0YXR1c0RlcGVuZGVuY3kgPSBcIiRzdGF0dXNcIjtcclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIFByb2dyYW1tYWJpbGl0eVNlcnZpY2Uge1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGZlZWxTZXJ2aWNlOiBGZWVsU2VydmljZVxyXG4gICAgLCBwcml2YXRlIHdlYWtTZXJ2aWNlOiBXZWFrU2VydmljZVxyXG4gICAgLCBwcml2YXRlIHRvYXN0U2VydmljZTogVG9hc3RTZXJ2aWNlXHJcbiAgICAsIHByaXZhdGUgZGlhbG9nU2VydmljZTogRGlhbG9nU2VydmljZVxyXG4gICAgLCBwcml2YXRlIGZvcm1hdHRlclNlcnZpY2U6IEZvcm1hdHRlclNlcnZpY2VcclxuICAgICwgcHJpdmF0ZSBmdW5jdGlvblNlcnZpY2U6IEZ1bmN0aW9uU2VydmljZVxyXG4gICAgLCBwcml2YXRlIGZvcm1TZXJ2aWNlOiBGb3JtU2VydmljZVxyXG4gICAgLCBwcml2YXRlIGdsb2JhbFNlcnZpY2U6IEdsb2JhbFNlcnZpY2VcclxuICAgICwgcHJpdmF0ZSBzdWJzY3JpYmVTZXJ2aWNlOiBTdWJzY3JpYmVTZXJ2aWNlXHJcbiAgICAsIHByaXZhdGUgZGVzdHJveVJlZjogRGVzdHJveVJlZlxyXG4gICAgLCBAT3B0aW9uYWwoKSBwcml2YXRlIHJlZ2lzdGVyOiBSZWdpc3RlclNlcnZpY2VcclxuICAgICwgQE9wdGlvbmFsKCkgcHJpdmF0ZSBzY29wZTogU2NvcGVTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICB0aGlzLkluaXQoKTtcclxuXHJcbiAgICB0aGlzLmV2YWx1YXRvclByb3ZpZGVycyA9IFtcclxuICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLFxyXG4gICAgICB0aGlzLnRvYXN0U2VydmljZSxcclxuICAgICAgdGhpcy5mdW5jdGlvblNlcnZpY2UsXHJcbiAgICAgIHRoaXMuZm9ybWF0dGVyU2VydmljZSxcclxuICAgICAgdGhpcy5yZWdpc3RlciAgIFxyXG4gICAgXTtcclxuXHJcbiAgICB0aGlzLnByZWRlZmluZWRGdW5jdGlvbnMgPSB0aGlzLmdldFByZWRlZmluZWRGdW5jdGlvbnMoKTtcclxuICB9XHJcblxyXG4gIC8qXHJcbiAgICBHbG9iYWwgUHJvcGVydGllczpcclxuICAgIC0gZmVlbC1kaWFnbm9zdGljczogXCJvblwiLCBcIm9mZlwiXHJcbiAgICAtIGZlZWwtY2FjaGVhYmxlOiBcIm9uXCIsIFwib2ZmXCJcclxuICAqL1xyXG5cclxuICBwcml2YXRlIHByZWRlZmluZWRGdW5jdGlvbnMhOiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xyXG5cclxuICAvL3ByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG5cclxuICBwcml2YXRlIGV2YWx1YXRvclByb3ZpZGVyczogSUV2YWx1YXRvclByb3ZpZGVyW10gPSBbXTtcclxuXHJcbiAgLy9uZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAvLyAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XHJcbiAgLy8gIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcclxuICAvL31cclxuXHJcbiAgYWRkRXZhbHVhdG9yUHJvdmlkZXJzKGV2YWx1YXRvclByb3ZpZGVyOiBJRXZhbHVhdG9yUHJvdmlkZXIpOiB2b2lkIHtcclxuICAgIGlmIChldmFsdWF0b3JQcm92aWRlcikge1xyXG4gICAgICB0aGlzLmV2YWx1YXRvclByb3ZpZGVycy5wdXNoKGV2YWx1YXRvclByb3ZpZGVyKTtcclxuICAgICAgdGhpcy5wcmVkZWZpbmVkRnVuY3Rpb25zID0gdGhpcy5nZXRQcmVkZWZpbmVkRnVuY3Rpb25zKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpc0V4cHJlc3Npb24odGV4dDogc3RyaW5nIHwgbnVsbCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHR5cGVvZiB0ZXh0ID09PSAnc3RyaW5nJyAmJiB0ZXh0LnN0YXJ0c1dpdGgoXCI9XCIpO1xyXG4gIH07XHJcblxyXG4gIGdldEV4cHJlc3Npb24odGV4dDogc3RyaW5nIHwgbnVsbCk6IHN0cmluZyB7XHJcbiAgICBpZiAodGhpcy5pc0V4cHJlc3Npb24odGV4dCkpXHJcbiAgICAgIHJldHVybiB0ZXh0IS5zdWJzdHJpbmcoMSk7XHJcbiAgICByZXR1cm4gXCJcIjtcclxuICB9O1xyXG5cclxuICBldmFsdWF0ZVN0cmluZyhmb3JtR3JvdXA6IEZvcm1Hcm91cCwgdmFsdWU6IHN0cmluZyB8IG51bGwsIG9wdGlvbnM6IEV2YWx1YXRlT3B0aW9ucyA9IHt9KTogc3RyaW5nIHtcclxuICAgIGlmICh0aGlzLmlzRXhwcmVzc2lvbih2YWx1ZSkpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuZXZhbEV4cHJlc3Npb24oZm9ybUdyb3VwLCB0aGlzLmdldEV4cHJlc3Npb24odmFsdWUpLCBvcHRpb25zKSBhcyBzdHJpbmc7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdmFsdWUgPz8gXCJcIjtcclxuICB9XHJcblxyXG4gIGV2YWx1YXRlQm9vbGVhbihmb3JtR3JvdXA6IEZvcm1Hcm91cCwgdmFsdWU6IGJvb2xlYW4gfCBzdHJpbmcgfCBudWxsLCBvcHRpb25zOiBFdmFsdWF0ZU9wdGlvbnMgPSB7fSk6IGJvb2xlYW4gfCBudWxsIHtcclxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJykge1xyXG4gICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0aGlzLmlzRXhwcmVzc2lvbih2YWx1ZSkpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuZXZhbEV4cHJlc3Npb24oZm9ybUdyb3VwLCB0aGlzLmdldEV4cHJlc3Npb24odmFsdWUpLCBvcHRpb25zKSBhcyBib29sZWFuO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICBldmFsdWF0ZU51bWJlcihmb3JtR3JvdXA6IEZvcm1Hcm91cCwgdmFsdWU6IG51bWJlciB8IHN0cmluZyB8IG51bGwsIG9wdGlvbnM6IEV2YWx1YXRlT3B0aW9ucyA9IHt9KTogbnVtYmVyIHwgbnVsbCB7XHJcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xyXG4gICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0aGlzLmlzRXhwcmVzc2lvbih2YWx1ZSkpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuZXZhbEV4cHJlc3Npb24oZm9ybUdyb3VwLCB0aGlzLmdldEV4cHJlc3Npb24odmFsdWUpLCBvcHRpb25zKSBhcyBudW1iZXI7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIGV2YWx1YXRlKGZvcm1Hcm91cDogRm9ybUdyb3VwLCB2YWx1ZTogc3RyaW5nIHwgbnVsbCwgb3B0aW9uczogRXZhbHVhdGVPcHRpb25zID0geyB9KTogYW55IHtcclxuICAgIGlmICh0aGlzLmlzRXhwcmVzc2lvbih2YWx1ZSkpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuZXZhbEV4cHJlc3Npb24oZm9ybUdyb3VwLCB0aGlzLmdldEV4cHJlc3Npb24odmFsdWUpLCBvcHRpb25zKTtcclxuICAgIH1cclxuICAgIHJldHVybiB2YWx1ZTtcclxuICB9XHJcblxyXG4gIGV2YWx1YXRlVGVtcGxhdGUoZm9ybUdyb3VwOiBGb3JtR3JvdXAsIHZhbHVlOiBzdHJpbmcgfCBudWxsLCBvcHRpb25zOiBFdmFsdWF0ZU9wdGlvbnMgPSB7fSk6IGFueSB7XHJcblxyXG4gICAgbGV0IHRlbXBsYXRlOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgICBpZiAodGhpcy5pc0V4cHJlc3Npb24odmFsdWUpKSB7XHJcbiAgICAgIHRlbXBsYXRlID0gdGhpcy5ldmFsRXhwcmVzc2lvbihmb3JtR3JvdXAsIHRoaXMuZ2V0RXhwcmVzc2lvbih2YWx1ZSksIG9wdGlvbnMpIGFzIHN0cmluZztcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0ZW1wbGF0ZSA9IHZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGVtcGxhdGUpXHJcbiAgICAgIHJldHVybiBcIlwiO1xyXG5cclxuICAgIHJldHVybiB0aGlzLmV2YWxUZW1wbGF0ZShmb3JtR3JvdXAsIHRlbXBsYXRlLCBvcHRpb25zKTtcclxuICB9XHJcblxyXG4gIGV2YWx1YXRlVW5hcnkoZm9ybUdyb3VwOiBGb3JtR3JvdXAsIHZhbHVlOiBzdHJpbmcgfCBudWxsLCBpbnB1dDogYW55LCBvcHRpb25zOiBFdmFsdWF0ZU9wdGlvbnMgPSB7fSk6IGFueSB7XHJcbiAgICBpZiAodGhpcy5pc0V4cHJlc3Npb24odmFsdWUpKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmV2YWxVbmFyeVRlc3QoZm9ybUdyb3VwLCB0aGlzLmdldEV4cHJlc3Npb24odmFsdWUpLCBpbnB1dCwgb3B0aW9ucyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIGludmFsaWRhdGUodmFsdWU6IHN0cmluZyB8IG51bGwpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmlzRXhwcmVzc2lvbih2YWx1ZSkpIHtcclxuICAgICAgdGhpcy5pbnZhbGlkYXRlRXhwcmVzc2lvbih0aGlzLmdldEV4cHJlc3Npb24odmFsdWUpKTsgICAgICBcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHdhdGNoKGZvcm1Hcm91cDogRm9ybUdyb3VwLCBkZXBlbmRlbmNpZXM6IChzdHJpbmcgfCBzdHJpbmdbXSlbXSwgY2FsbGJhY2s6ICgpID0+IHZvaWQpIHtcclxuICAgIHRoaXMud2F0Y2hpbmdEZXBlbmRlbmNpZXMoZm9ybUdyb3VwLCBkZXBlbmRlbmNpZXMsIGNhbGxiYWNrKTtcclxuICB9XHJcblxyXG4gIGdldERlcGVuZGVuY2llcyhleHByZXNzaW9uOiBzdHJpbmcpOiAoc3RyaW5nIHwgc3RyaW5nW10pW10ge1xyXG4gICAgcmV0dXJuIHRoaXMuZmVlbFNlcnZpY2UuZ2V0RGVwZW5kZW5jaWVzKGV4cHJlc3Npb24pO1xyXG4gIH1cclxuXHJcbiAgLy9zdWJzY3JpYmVDaGFuZ2VzPFQ+KFxyXG4gIC8vICBvYnNlcnZhYmxlJDogT2JzZXJ2YWJsZTxUPixcclxuICAvLyAgY29udHJvbDogQWJzdHJhY3RDb250cm9sLFxyXG4gIC8vICBpbml0aWFsOiBULFxyXG4gIC8vICBjYWxsYmFjazogKCgpID0+IHZvaWQpIHwgKChvbGRWYWx1ZTogVCwgbmV3VmFsdWU6IFQpID0+IHZvaWQpLFxyXG4gIC8vICBsb2dGbj86IChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpID0+IHZvaWQgICAgXHJcbiAgLy8pIHtcclxuICAvLyAgb2JzZXJ2YWJsZSRcclxuICAvLyAgICAucGlwZShcclxuICAvLyAgICAgIHN0YXJ0V2l0aChpbml0aWFsKSxcclxuICAvLyAgICAgIHBhaXJ3aXNlKCksXHJcbiAgLy8gICAgICBmaWx0ZXIoKFtvbGRWYWx1ZSwgbmV3VmFsdWVdKSA9PiB7XHJcbiAgLy8gICAgICAgIHJldHVybiBjb250cm9sIGluc3RhbmNlb2YgRm9ybUFycmF5XHJcbiAgLy8gICAgICAgICAgfHwgY29udHJvbCBpbnN0YW5jZW9mIEZvcm1Hcm91cFxyXG4gIC8vICAgICAgICAgIHx8IG9sZFZhbHVlICE9PSBuZXdWYWx1ZVxyXG4gIC8vICAgICAgfSksXHJcbiAgLy8gICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JClcclxuICAvLyAgICApXHJcbiAgLy8gICAgLnN1YnNjcmliZSgoW29sZFZhbHVlLCBuZXdWYWx1ZV0pID0+IHtcclxuICAvLyAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcclxuICAvLyAgICAgICAgaWYgKGNhbGxiYWNrLmxlbmd0aCA9PT0gMCkge1xyXG4gIC8vICAgICAgICAgIChjYWxsYmFjayBhcyAoKSA9PiB2b2lkKSgpO1xyXG4gIC8vICAgICAgICB9IGVsc2Uge1xyXG4gIC8vICAgICAgICAgIChjYWxsYmFjayBhcyAob2xkVmFsdWU6IFQsIG5ld1ZhbHVlOiBUKSA9PiB2b2lkKShvbGRWYWx1ZSwgbmV3VmFsdWUpO1xyXG4gIC8vICAgICAgICB9XHJcbiAgLy8gICAgICAgIGxvZ0ZuPy4oY29udHJvbCk7XHJcbiAgLy8gICAgICB9KTtcclxuICAvLyAgICB9KTtcclxuICAvL31cclxuXHJcbiAgZ2V0IHZlcmJvc2UoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fdmVyYm9zZTtcclxuICB9XHJcblxyXG4gIGdldCBjYWNoZWFibGUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fY2FjaGVhYmxlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfdmVyYm9zZSA9IGZhbHNlO1xyXG5cclxuICBwcml2YXRlIF9jYWNoZWFibGUgPSB0cnVlO1xyXG5cclxuICBwcml2YXRlIG9uRXJyb3JIYW5kbGVyOiBhbnkgPSB0aGlzLm9uRXJyb3IuYmluZCh0aGlzKTtcclxuXHJcbiAgcHJpdmF0ZSBJbml0KCkge1xyXG4gICAgdGhpcy5fY2FjaGVhYmxlID0gdGhpcy5nbG9iYWxTZXJ2aWNlLmdldFByb3BlcnR5KFwiZmVlbC1jYWNoZWFibGVcIiwgXCJvblwiKSA9PT0gXCJvblwiO1xyXG4gICAgdGhpcy5fdmVyYm9zZSA9IHRoaXMuZ2xvYmFsU2VydmljZS5nZXRQcm9wZXJ0eShcImZlZWwtZGlhZ25vc3RpY3NcIiwgXCJvZmZcIikgPT09IFwib25cIjtcclxuICAgIGlmICh0aGlzLnZlcmJvc2UpXHJcbiAgICAgIGNvbnNvbGUubG9nKFwiUHJvZ3JhbW1hYmlsaXR5IFNlcnZpY2UgSW5pdGlhbGl6ZWRcIiwgeyBjYWNoZWFibGU6IHRoaXMuY2FjaGVhYmxlLCB2ZXJib3NlOiB0aGlzLnZlcmJvc2UgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGV2YWxVbmFyeVRlc3QoZm9ybUdyb3VwOiBGb3JtR3JvdXAsIGV4cHJlc3Npb246IHN0cmluZywgaW5wdXQ6IGFueSwgb3B0aW9uczogRXZhbHVhdGVPcHRpb25zID0ge30pIHtcclxuICAgIGNvbnN0IGxvZ0Vycm9yID0gKGV4cHJlc3Npb246IHN0cmluZywgZXJyb3I6IGFueSkgPT4ge1xyXG4gICAgICBjb25zb2xlLndhcm4oZXhwcmVzc2lvbiwgeyBmb3JtR3JvdXAsIGVycm9yIH0pO1xyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBsb2dFdmFsdWF0aW9uID0gKGV4cHJlc3Npb246IHN0cmluZywgcmVzdWx0OiBhbnkpID0+IHtcclxuICAgICAgaWYgKCF0aGlzLnZlcmJvc2UpIHJldHVybjtcclxuICAgICAgY29uc29sZS5sb2coXCJFdmFsdWF0ZSBVbmFyeVRlc3Q6XCIsIGV4cHJlc3Npb24sIHJlc3VsdCwgeyBmb3JtR3JvdXAgfSk7XHJcbiAgICB9O1xyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuZmVlbFNlcnZpY2UuZXZhbFVuYXJ5VGVzdChleHByZXNzaW9uXHJcbiAgICAgICAgLCB0aGlzLmdldENvbnRleHQoZm9ybUdyb3VwLCBvcHRpb25zKVxyXG4gICAgICAgICwgaW5wdXQpO1xyXG4gICAgICBsb2dFdmFsdWF0aW9uKGV4cHJlc3Npb24sIHJlc3VsdCk7XHJcbiAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIGxvZ0Vycm9yKGV4cHJlc3Npb24sIGUpO1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZXZhbEV4cHJlc3Npb24oZm9ybUdyb3VwOiBGb3JtR3JvdXAsIGV4cHJlc3Npb246IHN0cmluZywgb3B0aW9uczogRXZhbHVhdGVPcHRpb25zID0ge30pOiBhbnkge1xyXG5cclxuICAgIGNvbnN0IGxvZ0Vycm9yID0gKGV4cHJlc3Npb246IHN0cmluZywgZXJyb3I6IGFueSkgPT4ge1xyXG4gICAgICBjb25zb2xlLndhcm4oZXhwcmVzc2lvbiwgeyBmb3JtR3JvdXAsIG9wdGlvbnMsIGVycm9yIH0pO1xyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBsb2dJbnZhbGlkYXRlID0gKGV4cHJlc3Npb246IHN0cmluZykgPT4ge1xyXG4gICAgICBpZiAoIXRoaXMudmVyYm9zZSkgcmV0dXJuO1xyXG4gICAgICBjb25zb2xlLmxvZyhcIkludmFsaWRhdGUgRXhwcmVzc2lvbjpcIiwgZXhwcmVzc2lvbiwgeyBmb3JtR3JvdXAsIG9wdGlvbnMgfSk7XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IGxvZ0V2YWx1YXRpb24gPSAoZXhwcmVzc2lvbjogc3RyaW5nLCByZXN1bHQ6IGFueSkgPT4ge1xyXG4gICAgICBpZiAoIXRoaXMudmVyYm9zZSkgcmV0dXJuO1xyXG4gICAgICBjb25zb2xlLmxvZyhcIkV2YWx1YXRlIEV4cHJlc3Npb246XCIsIGV4cHJlc3Npb24sIHJlc3VsdCwgeyBmb3JtR3JvdXAsIG9wdGlvbnMgfSk7XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IGV2YWx1YXRlID0gKCkgPT4ge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuZmVlbFNlcnZpY2UuZXZhbEV4cHJlc3Npb24oZXhwcmVzc2lvblxyXG4gICAgICAgICAgLCB0aGlzLmdldENvbnRleHQoZm9ybUdyb3VwLCBvcHRpb25zKSk7XHJcbiAgICAgICAgbG9nRXZhbHVhdGlvbihleHByZXNzaW9uLCByZXN1bHQpO1xyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgIH1cclxuICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICBsb2dFcnJvcihleHByZXNzaW9uLCBlKTtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBjYWNoZWFibGUgPSBvcHRpb25zLmNhY2hlYWJsZSA/PyB0aGlzLmNhY2hlYWJsZTtcclxuXHJcbiAgICBpZiAoY2FjaGVhYmxlKSB7XHJcblxyXG4gICAgICBjb25zdCBpZ25vcmVEZXBzID0gb3B0aW9ucy5pZ25vcmVEZXBzID8/IGZhbHNlO1xyXG5cclxuICAgICAgaWYgKCFpZ25vcmVEZXBzKSB7XHJcbiAgICAgICAgY29uc3Qgd2F0Y2hLZXkgPSBgOndhdGNoKCR7ZXhwcmVzc2lvbn0pYDtcclxuXHJcbiAgICAgICAgdGhpcy53ZWFrU2VydmljZS5jYWxsKHRoaXMsIHdhdGNoS2V5LCAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLndhdGNoaW5nRXhwcmVzc2lvbihmb3JtR3JvdXAsIGV4cHJlc3Npb25cclxuICAgICAgICAgICAgLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5pbnZhbGlkYXRlRXhwcmVzc2lvbihleHByZXNzaW9uKTtcclxuICAgICAgICAgICAgICBsb2dJbnZhbGlkYXRlKGV4cHJlc3Npb24pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIFxyXG4gICAgICByZXR1cm4gdGhpcy53ZWFrU2VydmljZS5jYWxsKHRoaXMsIGV4cHJlc3Npb24sIGV2YWx1YXRlLCBudWxsLCB0aGlzLm9uRXJyb3JIYW5kbGVyKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICByZXR1cm4gZXZhbHVhdGUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZXZhbFRlbXBsYXRlKGZvcm1Hcm91cDogRm9ybUdyb3VwLCBleHByZXNzaW9uOiBzdHJpbmcsIG9wdGlvbnM6IEV2YWx1YXRlT3B0aW9ucyA9IHt9KTogYW55IHtcclxuXHJcbiAgICBjb25zdCBsb2dFcnJvciA9IChleHByZXNzaW9uOiBzdHJpbmcsIGVycm9yOiBhbnkpID0+IHtcclxuICAgICAgY29uc29sZS53YXJuKGV4cHJlc3Npb24sIHsgZm9ybUdyb3VwLCBvcHRpb25zLCBlcnJvciB9KTtcclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgbG9nSW52YWxpZGF0ZSA9IChleHByZXNzaW9uOiBzdHJpbmcpID0+IHtcclxuICAgICAgaWYgKCF0aGlzLnZlcmJvc2UpIHJldHVybjtcclxuICAgICAgY29uc29sZS5sb2coXCJJbnZhbGlkYXRlIFRlbXBsYXRlOlwiLCBleHByZXNzaW9uLCB7IGZvcm1Hcm91cCwgb3B0aW9ucyB9KTtcclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgbG9nRXZhbHVhdGlvbiA9IChleHByZXNzaW9uOiBzdHJpbmcsIHJlc3VsdDogYW55KSA9PiB7XHJcbiAgICAgIGlmICghdGhpcy52ZXJib3NlKSByZXR1cm47XHJcbiAgICAgIGNvbnNvbGUubG9nKFwiRXZhbHVhdGUgVGVtcGxhdGU6XCIsIGV4cHJlc3Npb24sIHJlc3VsdCwgeyBmb3JtR3JvdXAsIG9wdGlvbnMgfSk7XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IGV2YWx1YXRlID0gKCkgPT4ge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuZmVlbFNlcnZpY2UuZXZhbFRlbXBsYXRlKGV4cHJlc3Npb25cclxuICAgICAgICAgICwgdGhpcy5nZXRDb250ZXh0KGZvcm1Hcm91cCkpO1xyXG4gICAgICAgIGxvZ0V2YWx1YXRpb24oZXhwcmVzc2lvbiwgcmVzdWx0KTtcclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICB9XHJcbiAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgbG9nRXJyb3IoZXhwcmVzc2lvbiwgZSk7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgY2FjaGVhYmxlID0gb3B0aW9ucy5jYWNoZWFibGUgPz8gdGhpcy5jYWNoZWFibGU7XHJcbiAgICBcclxuICAgIGlmIChjYWNoZWFibGUpIHtcclxuICAgICAgY29uc3Qgd2F0Y2hLZXkgPSBgOndhdGNoVGVtcGxhdGUoJHtleHByZXNzaW9ufSlgO1xyXG5cclxuICAgICAgdGhpcy53ZWFrU2VydmljZS5jYWxsKHRoaXMsIHdhdGNoS2V5LCAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy53YXRjaGluZ1RlbXBsYXRlRXhwcmVzc2lvbihmb3JtR3JvdXAsIGV4cHJlc3Npb25cclxuICAgICAgICAgICwgKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmludmFsaWRhdGVFeHByZXNzaW9uKGV4cHJlc3Npb24pO1xyXG4gICAgICAgICAgICBsb2dJbnZhbGlkYXRlKGV4cHJlc3Npb24pO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgcmV0dXJuIHRoaXMud2Vha1NlcnZpY2UuY2FsbCh0aGlzLCBleHByZXNzaW9uLCBldmFsdWF0ZSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgcmV0dXJuIGV2YWx1YXRlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG9uRXJyb3IocmVzdWx0OiBhbnkpOiBhbnkge1xyXG4gICAgaWYgKGlzT2JzZXJ2YWJsZShyZXN1bHQpKSB7XHJcbiAgICAgIHJldHVybiByZXN1bHQucGlwZShcclxuICAgICAgICB0YXAoe1xyXG4gICAgICAgICAgZXJyb3I6IGVyciA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLm5vdGlmeUVycm9yKGVyci5tZXNzYWdlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFByZWRlZmluZWRGdW5jdGlvbnMoKTogUmVjb3JkPHN0cmluZywgYW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5ldmFsdWF0b3JQcm92aWRlcnMucmVkdWNlKChhY2MsIHByb3ZpZGVyKSA9PiB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgLi4uYWNjLFxyXG4gICAgICAgIC4uLnByb3ZpZGVyLmdldENvbnRleHQoKVxyXG4gICAgICB9O1xyXG4gICAgfSwge30pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRGZWVsRnVuY3Rpb25zKClcclxuICB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBpc1ZhbGlkRXhwcmVzc2lvbjogdGhpcy5mZWVsU2VydmljZS5pc1ZhbGlkRXhwcmVzc2lvbixcclxuICAgICAgaXNWYWxpZFVuYXJ5VGVzdDogdGhpcy5mZWVsU2VydmljZS5pc1ZhbGlkVW5hcnlUZXN0XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRGb3JtRnVuY3Rpb25zKGZvcm1Hcm91cDogRm9ybUdyb3VwIHwgbnVsbCk6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuZm9ybVNlcnZpY2UuZ2V0Q29udGV4dChmb3JtR3JvdXApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRQYXJlbnRDb250ZXh0KGZvcm1Hcm91cDogRm9ybUdyb3VwIHwgbnVsbCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCBudWxsIHtcclxuICAgIGlmIChmb3JtR3JvdXAgPT09IG51bGwpIHsgXHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHBhcmVudCA9IHRoaXMuZ2V0UGFyZW50KGZvcm1Hcm91cCk7XHJcblxyXG4gICAgaWYgKCFwYXJlbnQpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgLi4ucGFyZW50LnZhbHVlLFxyXG4gICAgICBmb3JtR3JvdXA6ICgpID0+IHRvUHJveHkocGFyZW50KSwgICAgICBcclxuICAgICAgZ2V0IHBhcmVudCgpIHsgcmV0dXJuIHNlbGYuZ2V0UGFyZW50Q29udGV4dChwYXJlbnQpOyB9LFxyXG4gICAgfTsgICAgXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFJvb3RDb250ZXh0KGZvcm1Hcm91cDogRm9ybUdyb3VwIHwgbnVsbCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCBudWxsIHtcclxuICAgIGlmIChmb3JtR3JvdXAgPT09IG51bGwpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIGNvbnN0IHJvb3QgPSBmb3JtR3JvdXA/LnJvb3Q7XHJcblxyXG4gICAgaWYgKCFyb290KSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiByb290LnZhbHVlOyAgICBcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0UGFyZW50KGZvcm1Hcm91cDogRm9ybUdyb3VwKSA6IEZvcm1Hcm91cCB8IG51bGwge1xyXG4gICAgbGV0IHBhcmVudCA9IGZvcm1Hcm91cC5wYXJlbnQ7XHJcblxyXG4gICAgd2hpbGUgKHBhcmVudCBpbnN0YW5jZW9mIEZvcm1BcnJheSkge1xyXG4gICAgICBwYXJlbnQgPSBwYXJlbnQ/LnBhcmVudDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcGFyZW50IGFzIEZvcm1Hcm91cCB8IG51bGw7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldENvbnRleHQoY29udHJvbDogQWJzdHJhY3RDb250cm9sLCBvcHRpb25zOiBFdmFsdWF0ZU9wdGlvbnMgPSB7fSk6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xyXG5cclxuICAgIGNvbnN0IGZvcm1Hcm91cCA9IGNvbnRyb2wgYXMgRm9ybUdyb3VwIHwgbnVsbDtcclxuXHJcbiAgICBjb25zdCBiYXNlQ29udGV4dCA9IGZvcm1Hcm91cD8udmFsdWUgPz8geyB9O1xyXG5cclxuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xyXG5cclxuICAgIGxldCBjb250ZXh0ID0ge1xyXG4gICAgICBnZXQgY29uc29sZSgpIHsgcmV0dXJuIHRvUHJveHkoY29uc29sZSk7IH0sXHJcbiAgICAgIGdldCBwYXJlbnQoKSB7IHJldHVybiBzZWxmLmdldFBhcmVudENvbnRleHQoZm9ybUdyb3VwKTsgfSxcclxuICAgICAgZ2V0IHJvb3QoKSB7IHJldHVybiBzZWxmLmdldFJvb3RDb250ZXh0KGZvcm1Hcm91cCk7IH0sXHJcbiAgICAgIGZvcm1Hcm91cDogKCkgPT4gdG9Qcm94eShmb3JtR3JvdXApLFxyXG4gICAgICBfOiB0aGlzLnNjb3BlPy5nZXRDb250ZXh0KCksXHJcbiAgICAgIC4uLmJhc2VDb250ZXh0LFxyXG4gICAgICBmbjoge1xyXG4gICAgICAgIC4uLnRoaXMucHJlZGVmaW5lZEZ1bmN0aW9ucyxcclxuICAgICAgICAuLi50aGlzLmdldEZvcm1GdW5jdGlvbnMoZm9ybUdyb3VwKSxcclxuICAgICAgICAuLi50aGlzLmdldEZlZWxGdW5jdGlvbnMoKVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG9wdGlvbnMuZXh0ZW5kQ29udGV4dCkge1xyXG4gICAgICBjb25zdCBleHRlbmRlZCA9IG9wdGlvbnMuZXh0ZW5kQ29udGV4dCgpO1xyXG4gICAgICBpZiAoZXh0ZW5kZWQpIHtcclxuICAgICAgICBjb250ZXh0ID0ge1xyXG4gICAgICAgICAgLi4uY29udGV4dCxcclxuICAgICAgICAgIC4uLmV4dGVuZGVkXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGNvbnRleHQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHdhdGNoaW5nRXhwcmVzc2lvbihmb3JtR3JvdXA6IEZvcm1Hcm91cCwgZXhwcmVzc2lvbjogc3RyaW5nLCBjYWxsYmFjazogKCkgPT4gdm9pZCk6IHZvaWQge1xyXG4gICAgY29uc3QgbG9nRGVwZW5kZW5jaWVzID0gKGRlcGVuZGVuY2llczogYW55KSA9PiB7XHJcbiAgICAgIGlmICghdGhpcy52ZXJib3NlKSByZXR1cm47XHJcbiAgICAgIGNvbnNvbGUubG9nKFwiR2V0IERlcGVuZGVuY2llczpcIiwgZXhwcmVzc2lvbiwgZGVwZW5kZW5jaWVzLCB7IGZvcm1Hcm91cCB9KTtcclxuICAgIH07XHJcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KGZvcm1Hcm91cCk7XHJcbiAgICBjb25zdCBkZXBlbmRlbmNpZXMgPSB0aGlzLmZlZWxTZXJ2aWNlLmdldERlcGVuZGVuY2llcyhleHByZXNzaW9uLCBjb250ZXh0KTtcclxuICAgIGxvZ0RlcGVuZGVuY2llcyhkZXBlbmRlbmNpZXMpO1xyXG4gICAgdGhpcy53YXRjaGluZ0RlcGVuZGVuY2llcyhmb3JtR3JvdXAsIGRlcGVuZGVuY2llcywgY2FsbGJhY2spO1xyXG4gIH07XHJcblxyXG4gIHByaXZhdGUgd2F0Y2hpbmdUZW1wbGF0ZUV4cHJlc3Npb24oZm9ybUdyb3VwOiBGb3JtR3JvdXAsIGV4cHJlc3Npb246IHN0cmluZywgY2FsbGJhY2s6ICgpID0+IHZvaWQpOiB2b2lkIHtcclxuICAgIGNvbnN0IGxvZ0RlcGVuZGVuY2llcyA9IChkZXBlbmRlbmNpZXM6IGFueSkgPT4ge1xyXG4gICAgICBpZiAoIXRoaXMudmVyYm9zZSkgcmV0dXJuO1xyXG4gICAgICBjb25zb2xlLmxvZyhcIkdldCBUZW1wbGF0ZSBEZXBlbmRlbmNpZXM6XCIsIGV4cHJlc3Npb24sIGRlcGVuZGVuY2llcywgeyBmb3JtR3JvdXAgfSk7XHJcbiAgICB9O1xyXG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dChmb3JtR3JvdXApO1xyXG4gICAgY29uc3QgZGVwZW5kZW5jaWVzID0gdGhpcy5mZWVsU2VydmljZS5nZXRUZW1wbGF0ZURlcGVuZGVuY2llcyhleHByZXNzaW9uLCBjb250ZXh0KTtcclxuICAgIGxvZ0RlcGVuZGVuY2llcyhkZXBlbmRlbmNpZXMpO1xyXG4gICAgdGhpcy53YXRjaGluZ0RlcGVuZGVuY2llcyhmb3JtR3JvdXAsIGRlcGVuZGVuY2llcywgY2FsbGJhY2spO1xyXG4gIH07XHJcblxyXG4gIHByaXZhdGUgd2F0Y2hpbmdEZXBlbmRlbmNpZXMoZm9ybUdyb3VwOiBGb3JtR3JvdXAsIGRlcGVuZGVuY2llczogKHN0cmluZyB8IHN0cmluZ1tdKVtdLCBjYWxsYmFjazogKCkgPT4gdm9pZCk6IHZvaWQge1xyXG4gICAgY29uc3QgbG9nV2F0Y2hpbmcgPSAoZGVwZW5kZW5jZTogYW55KSA9PiB7XHJcbiAgICAgIGlmICghdGhpcy52ZXJib3NlKSByZXR1cm47XHJcbiAgICAgIGNvbnN0IHRleHQgPSBBcnJheS5pc0FycmF5KGRlcGVuZGVuY2UpID8gZGVwZW5kZW5jZS5qb2luKFwiLlwiKSA6IGRlcGVuZGVuY2U7XHJcbiAgICAgIGNvbnNvbGUubG9nKFwiV2F0Y2hpbmcgZGVwZW5kZW5jZTpcIiwgdGV4dCwgeyBmb3JtR3JvdXAgfSk7XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IGxvZ1ZhbHVlQ2hhbmdlZCA9IChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpID0+IHtcclxuICAgICAgaWYgKCF0aGlzLnZlcmJvc2UpIHJldHVybjtcclxuICAgICAgY29uc29sZS5sb2coXCJWYWx1ZSBDaGFuZ2VkOlwiLCBjb250cm9sLnZhbHVlLCB7IHBhdGg6IHRoaXMuZ2V0UGF0aChjb250cm9sKSwgY29udHJvbCB9KTtcclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgbG9nU3RhdHVzQ2hhbmdlZCA9IChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpID0+IHtcclxuICAgICAgaWYgKCF0aGlzLnZlcmJvc2UpIHJldHVybjtcclxuICAgICAgY29uc29sZS5sb2coXCJTdGF0dXMgQ2hhbmdlZDpcIiwgY29udHJvbC5zdGF0dXMsIHsgcGF0aDogdGhpcy5nZXRQYXRoKGNvbnRyb2wpLCBjb250cm9sIH0pO1xyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBsb2dTY29wZVJlZnJlc2hlZCA9IChwYXRoOiBQYXRoKSA9PiB7XHJcbiAgICAgIGlmICghdGhpcy52ZXJib3NlKSByZXR1cm47XHJcbiAgICAgIGNvbnNvbGUubG9nKFwiU2NvcGUgUmVmcmVzaGVkOiBcIiwgcGF0aCk7XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IHZhbHVlU3Vic2NyaWJlID0gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCkgPT4ge1xyXG4gICAgICB0aGlzLnN1YnNjcmliZVNlcnZpY2Uuc3Vic2NyaWJlQ2hhbmdlcyhjb250cm9sLnZhbHVlQ2hhbmdlcywgY29udHJvbCwgY29udHJvbC52YWx1ZSwgdGhpcy5kZXN0cm95UmVmLCBjYWxsYmFjaywgbG9nVmFsdWVDaGFuZ2VkKTtcclxuICAgIH07XHJcblxyXG4gICAgY29uc3Qgc3RhdHVzU3Vic2NyaWJlID0gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCkgPT4ge1xyXG4gICAgICB0aGlzLnN1YnNjcmliZVNlcnZpY2Uuc3Vic2NyaWJlQ2hhbmdlczxGb3JtQ29udHJvbFN0YXR1cz4odGhpcy5mb3JtU2VydmljZS5zdGF0dXNDaGFuZ2VzKGNvbnRyb2wsIGNhbGxiYWNrKSwgY29udHJvbCwgY29udHJvbC5zdGF0dXMsIHRoaXMuZGVzdHJveVJlZiwgY2FsbGJhY2ssIGxvZ1N0YXR1c0NoYW5nZWQpO1xyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBzdWJzY3JpYmVTY29wZSA9IChkZXBlbmRlbmNlOiBQYXRoKSA9PiB7XHJcbiAgICAgIHRoaXMuc2NvcGUub25SZWZyZXNoXHJcbiAgICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpXHJcbiAgICAgICAgLnN1YnNjcmliZSgocGF0aCkgPT4ge1xyXG4gICAgICAgICAgaWYgKG1hdGNoUGF0aChwYXRoLCBkZXBlbmRlbmNlKSl7XHJcbiAgICAgICAgICAgIGNhbGxiYWNrKCk7XHJcbiAgICAgICAgICAgIGxvZ1Njb3BlUmVmcmVzaGVkKGRlcGVuZGVuY2UpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICBsb2dXYXRjaGluZyhkZXBlbmRlbmNlKTtcclxuICAgIH07XHJcblxyXG4gICAgY29uc3Qgc3Vic2NyaWJlQ29udHJvbCA9IChjb250cm9sOiBBYnN0cmFjdENvbnRyb2xcclxuICAgICAgLCBzdGF0dXM6IGJvb2xlYW5cclxuICAgICAgLCBkZXBlbmRlbmNlOiBzdHJpbmcgfCBzdHJpbmdbXVxyXG4gICAgKSA9PiB7XHJcbiAgICAgIGlmICghc3RhdHVzKSB7XHJcbiAgICAgICAgdmFsdWVTdWJzY3JpYmUoY29udHJvbCk7XHJcbiAgICAgICAgbG9nV2F0Y2hpbmcoZGVwZW5kZW5jZSk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgc3RhdHVzU3Vic2NyaWJlKGNvbnRyb2wpO1xyXG4gICAgICAgIGxvZ1dhdGNoaW5nKGRlcGVuZGVuY2UpO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IGlzU2NvcGUgPSAocGF0aDogc3RyaW5nIHwgc3RyaW5nW10pOiBwYXRoIGlzIHN0cmluZ1tdID0+IHtcclxuICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkocGF0aCkgJiYgcGF0aC5sZW5ndGggPiAwICYmIHBhdGhbMF0gPT09IFwiX1wiO1xyXG4gICAgfTtcclxuXHJcbiAgICBmb3IgKGNvbnN0IGRlcGVuZGVuY2Ugb2YgZGVwZW5kZW5jaWVzKSB7XHJcbiAgICAgIGNvbnN0IFtwYXRoLCBzdGF0dXNdID0gdGhpcy5wcm9jZXNzRGVwZW5kZW5jaWVzKGRlcGVuZGVuY2UpO1xyXG4gICAgICBpZiAoaXNTY29wZShwYXRoKSkge1xyXG4gICAgICAgIHN1YnNjcmliZVNjb3BlKHBhdGguc3BsaWNlKDEpKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBjb25zdCBjb250cm9sID0gdGhpcy5mb3JtU2VydmljZS5nZXRDb250cm9sKGZvcm1Hcm91cCwgcGF0aCwgeyBicmVha09uQXJyYXk6IHRydWUgfSk7XHJcbiAgICAgICAgaWYgKGNvbnRyb2wpIHtcclxuICAgICAgICAgIHN1YnNjcmliZUNvbnRyb2woY29udHJvbCwgc3RhdHVzLCBkZXBlbmRlbmNlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmZvcm1TZXJ2aWNlLndhaXRGb3JDb250cm9sKGZvcm1Hcm91cCwgcGF0aCwgeyBicmVha09uQXJyYXk6IHRydWUgfSlcclxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoY29udHJvbCA9PiB7XHJcbiAgICAgICAgICAgICAgc3Vic2NyaWJlQ29udHJvbChjb250cm9sLCBzdGF0dXMsIGRlcGVuZGVuY2UpO1xyXG4gICAgICAgICAgICAgIGNhbGxiYWNrKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSAgICBcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW52YWxpZGF0ZUV4cHJlc3Npb24oZXhwcmVzc2lvbjogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLndlYWtTZXJ2aWNlLmludmFsaWRhdGUodGhpcywgZXhwcmVzc2lvbik7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHByb2Nlc3NEZXBlbmRlbmNpZXMoZGVwZW5kZW5jeTogc3RyaW5nIHwgc3RyaW5nW10pOiBbc3RyaW5nIHwgc3RyaW5nW10sIGJvb2xlYW5dIHtcclxuICAgIGNvbnN0IHN0YXR1c0RlcGVuZGVuY3kgPSBBcnJheS5pc0FycmF5KGRlcGVuZGVuY3kpXHJcbiAgICAgICYmIGRlcGVuZGVuY3kubGVuZ3RoID4gMVxyXG4gICAgICAmJiBkZXBlbmRlbmN5WzBdID09PSBTdGF0dXNEZXBlbmRlbmN5O1xyXG5cclxuICAgIHJldHVybiBzdGF0dXNEZXBlbmRlbmN5XHJcbiAgICAgID8gW2RlcGVuZGVuY3kuc2xpY2UoMSksIHRydWVdXHJcbiAgICAgIDogW2RlcGVuZGVuY3ksIGZhbHNlXTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0UGF0aChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuZm9ybVNlcnZpY2UuZ2V0UGF0aChjb250cm9sKS5qb2luKFwiLlwiKTtcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUV2YWx1YXRvclByb3ZpZGVyIHtcclxuICBnZXRDb250ZXh0KHNjb3BlPzogYW55KTogUmVjb3JkPHN0cmluZywgYW55PjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBFdmFsdWF0ZU9wdGlvbnMge1xyXG4gIGNhY2hlYWJsZT86IGJvb2xlYW47XHJcbiAgaWdub3JlRGVwcz86IGJvb2xlYW47XHJcbiAgZXh0ZW5kQ29udGV4dD86IEV4dGVuZENvbnRleHRGbjtcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgRXh0ZW5kQ29udGV4dEZuID0gKCkgPT4gUmVjb3JkPHN0cmluZywgYW55PjtcclxuIl19
478
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZ3JhbW1hYmlsaXR5LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc2lyaW8vc3JjL2xpYi9zZXJ2aWNlcy9wcm9ncmFtbWFiaWxpdHkuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWMsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRSxPQUFPLEVBQW1CLFNBQVMsRUFBZ0MsTUFBTSxnQkFBZ0IsQ0FBQztBQWExRixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNwQyxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckMsT0FBTyxFQUFRLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDOzs7Ozs7Ozs7Ozs7OztBQUdoRSxNQUFNLGdCQUFnQixHQUFHLFNBQVMsQ0FBQztBQUduQyxNQUFNLE9BQU8sc0JBQXNCO0lBRWI7SUFDUjtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNZO0lBQ0E7SUFaeEIsWUFBb0IsV0FBd0IsRUFDaEMsV0FBd0IsRUFDeEIsWUFBMEIsRUFDMUIsYUFBNEIsRUFDNUIsZ0JBQWtDLEVBQ2xDLFdBQXlCLEVBQ3pCLGVBQWdDLEVBQ2hDLFdBQXdCLEVBQ3hCLGFBQTRCLEVBQzVCLGdCQUFrQyxFQUNsQyxVQUFzQixFQUNWLFFBQXlCLEVBQ3pCLEtBQW1CO1FBWnZCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ2hDLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVC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amVjdGFibGUsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgRm9ybUFycmF5LCBGb3JtQ29udHJvbFN0YXR1cywgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBGZWVsU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2ZlZWwuc2VydmljZSc7XHJcbmltcG9ydCB7IFNjb3BlU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3Njb3BlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBSZWdpc3RlclNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9yZWdpc3Rlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVG9hc3RTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvdG9hc3Quc2VydmljZSc7XHJcbmltcG9ydCB7IEZ1bmN0aW9uU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2Z1bmN0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBHbG9iYWxTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvZ2xvYmFsLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBGb3JtU2VydmljZSB9IGZyb20gJy4vZm9ybS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRGlhbG9nU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2RpYWxvZy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRm9ybWF0dGVyU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2Zvcm1hdHRlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgSnNvblNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9qc29uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBXZWFrU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3dlYWsuc2VydmljZSc7XHJcbmltcG9ydCB7IFN1YnNjcmliZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9zdWJzY3JpYmUuc2VydmljZSc7XHJcbmltcG9ydCB7IHRvUHJveHkgfSBmcm9tICcuLi91dGlscy9wcm94eSc7XHJcbmltcG9ydCB7IGlzT2JzZXJ2YWJsZSB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgUGF0aCwgbWF0Y2hQYXRoIH0gZnJvbSAnLi4vY29tbW9uL3BhdGgnO1xyXG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XHJcblxyXG5cclxuY29uc3QgU3RhdHVzRGVwZW5kZW5jeSA9IFwiJHN0YXR1c1wiO1xyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgUHJvZ3JhbW1hYmlsaXR5U2VydmljZSB7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZmVlbFNlcnZpY2U6IEZlZWxTZXJ2aWNlXHJcbiAgICAsIHByaXZhdGUgd2Vha1NlcnZpY2U6IFdlYWtTZXJ2aWNlXHJcbiAgICAsIHByaXZhdGUgdG9hc3RTZXJ2aWNlOiBUb2FzdFNlcnZpY2VcclxuICAgICwgcHJpdmF0ZSBkaWFsb2dTZXJ2aWNlOiBEaWFsb2dTZXJ2aWNlXHJcbiAgICAsIHByaXZhdGUgZm9ybWF0dGVyU2VydmljZTogRm9ybWF0dGVyU2VydmljZVxyXG4gICAgLCBwcml2YXRlIEpzb25TZXJ2aWNlIDogSnNvblNlcnZpY2VcclxuICAgICwgcHJpdmF0ZSBmdW5jdGlvblNlcnZpY2U6IEZ1bmN0aW9uU2VydmljZVxyXG4gICAgLCBwcml2YXRlIGZvcm1TZXJ2aWNlOiBGb3JtU2VydmljZVxyXG4gICAgLCBwcml2YXRlIGdsb2JhbFNlcnZpY2U6IEdsb2JhbFNlcnZpY2VcclxuICAgICwgcHJpdmF0ZSBzdWJzY3JpYmVTZXJ2aWNlOiBTdWJzY3JpYmVTZXJ2aWNlXHJcbiAgICAsIHByaXZhdGUgZGVzdHJveVJlZjogRGVzdHJveVJlZlxyXG4gICAgLCBAT3B0aW9uYWwoKSBwcml2YXRlIHJlZ2lzdGVyOiBSZWdpc3RlclNlcnZpY2VcclxuICAgICwgQE9wdGlvbmFsKCkgcHJpdmF0ZSBzY29wZTogU2NvcGVTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICB0aGlzLkluaXQoKTtcclxuXHJcbiAgICB0aGlzLmV2YWx1YXRvclByb3ZpZGVycyA9IFtcclxuICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLFxyXG4gICAgICB0aGlzLnRvYXN0U2VydmljZSxcclxuICAgICAgdGhpcy5mdW5jdGlvblNlcnZpY2UsXHJcbiAgICAgIHRoaXMuZm9ybWF0dGVyU2VydmljZSxcclxuICAgICAgdGhpcy5Kc29uU2VydmljZSxcclxuICAgICAgdGhpcy5yZWdpc3RlciAgIFxyXG4gICAgXTtcclxuXHJcbiAgICB0aGlzLnByZWRlZmluZWRGdW5jdGlvbnMgPSB0aGlzLmdldFByZWRlZmluZWRGdW5jdGlvbnMoKTtcclxuICB9XHJcblxyXG4gIC8qXHJcbiAgICBHbG9iYWwgUHJvcGVydGllczpcclxuICAgIC0gZmVlbC1kaWFnbm9zdGljczogXCJvblwiLCBcIm9mZlwiXHJcbiAgICAtIGZlZWwtY2FjaGVhYmxlOiBcIm9uXCIsIFwib2ZmXCJcclxuICAqL1xyXG5cclxuICBwcml2YXRlIHByZWRlZmluZWRGdW5jdGlvbnMhOiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xyXG5cclxuICBwcml2YXRlIGV2YWx1YXRvclByb3ZpZGVyczogSUV2YWx1YXRvclByb3ZpZGVyW10gPSBbXTtcclxuXHJcbiAgYWRkRXZhbHVhdG9yUHJvdmlkZXJzKGV2YWx1YXRvclByb3ZpZGVyOiBJRXZhbHVhdG9yUHJvdmlkZXIpOiB2b2lkIHtcclxuICAgIGlmIChldmFsdWF0b3JQcm92aWRlcikge1xyXG4gICAgICB0aGlzLmV2YWx1YXRvclByb3ZpZGVycy5wdXNoKGV2YWx1YXRvclByb3ZpZGVyKTtcclxuICAgICAgdGhpcy5wcmVkZWZpbmVkRnVuY3Rpb25zID0gdGhpcy5nZXRQcmVkZWZpbmVkRnVuY3Rpb25zKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpc0V4cHJlc3Npb24odGV4dDogc3RyaW5nIHwgbnVsbCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHR5cGVvZiB0ZXh0ID09PSAnc3RyaW5nJyAmJiB0ZXh0LnN0YXJ0c1dpdGgoXCI9XCIpO1xyXG4gIH07XHJcblxyXG4gIGdldEV4cHJlc3Npb24odGV4dDogc3RyaW5nIHwgbnVsbCk6IHN0cmluZyB7XHJcbiAgICBpZiAodGhpcy5pc0V4cHJlc3Npb24odGV4dCkpXHJcbiAgICAgIHJldHVybiB0ZXh0IS5zdWJzdHJpbmcoMSk7XHJcbiAgICByZXR1cm4gXCJcIjtcclxuICB9O1xyXG5cclxuICBldmFsdWF0ZVN0cmluZyhmb3JtR3JvdXA6IEZvcm1Hcm91cCwgdmFsdWU6IHN0cmluZyB8IG51bGwsIG9wdGlvbnM6IEV2YWx1YXRlT3B0aW9ucyA9IHt9KTogc3RyaW5nIHtcclxuICAgIGlmICh0aGlzLmlzRXhwcmVzc2lvbih2YWx1ZSkpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuZXZhbEV4cHJlc3Npb24oZm9ybUdyb3VwLCB0aGlzLmdldEV4cHJlc3Npb24odmFsdWUpLCBvcHRpb25zKSBhcyBzdHJpbmc7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdmFsdWUgPz8gXCJcIjtcclxuICB9XHJcblxyXG4gIGV2YWx1YXRlQm9vbGVhbihmb3JtR3JvdXA6IEZvcm1Hcm91cCwgdmFsdWU6IGJvb2xlYW4gfCBzdHJpbmcgfCBudWxsLCBvcHRpb25zOiBFdmFsdWF0ZU9wdGlvbnMgPSB7fSk6IGJvb2xlYW4gfCBudWxsIHtcclxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJykge1xyXG4gICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0aGlzLmlzRXhwcmVzc2lvbih2YWx1ZSkpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuZXZhbEV4cHJlc3Npb24oZm9ybUdyb3VwLCB0aGlzLmdldEV4cHJlc3Npb24odmFsdWUpLCBvcHRpb25zKSBhcyBib29sZWFuO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICBldmFsdWF0ZU51bWJlcihmb3JtR3JvdXA6IEZvcm1Hcm91cCwgdmFsdWU6IG51bWJlciB8IHN0cmluZyB8IG51bGwsIG9wdGlvbnM6IEV2YWx1YXRlT3B0aW9ucyA9IHt9KTogbnVtYmVyIHwgbnVsbCB7XHJcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xyXG4gICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0aGlzLmlzRXhwcmVzc2lvbih2YWx1ZSkpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuZXZhbEV4cHJlc3Npb24oZm9ybUdyb3VwLCB0aGlzLmdldEV4cHJlc3Npb24odmFsdWUpLCBvcHRpb25zKSBhcyBudW1iZXI7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIGV2YWx1YXRlKGZvcm1Hcm91cDogRm9ybUdyb3VwLCB2YWx1ZTogc3RyaW5nIHwgbnVsbCwgb3B0aW9uczogRXZhbHVhdGVPcHRpb25zID0geyB9KTogYW55IHtcclxuICAgIGlmICh0aGlzLmlzRXhwcmVzc2lvbih2YWx1ZSkpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuZXZhbEV4cHJlc3Npb24oZm9ybUdyb3VwLCB0aGlzLmdldEV4cHJlc3Npb24odmFsdWUpLCBvcHRpb25zKTtcclxuICAgIH1cclxuICAgIHJldHVybiB2YWx1ZTtcclxuICB9XHJcblxyXG4gIGV2YWx1YXRlVGVtcGxhdGUoZm9ybUdyb3VwOiBGb3JtR3JvdXAsIHZhbHVlOiBzdHJpbmcgfCBudWxsLCBvcHRpb25zOiBFdmFsdWF0ZU9wdGlvbnMgPSB7fSk6IGFueSB7XHJcblxyXG4gICAgbGV0IHRlbXBsYXRlOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgICBpZiAodGhpcy5pc0V4cHJlc3Npb24odmFsdWUpKSB7XHJcbiAgICAgIHRlbXBsYXRlID0gdGhpcy5ldmFsRXhwcmVzc2lvbihmb3JtR3JvdXAsIHRoaXMuZ2V0RXhwcmVzc2lvbih2YWx1ZSksIG9wdGlvbnMpIGFzIHN0cmluZztcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0ZW1wbGF0ZSA9IHZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGVtcGxhdGUpXHJcbiAgICAgIHJldHVybiBcIlwiO1xyXG5cclxuICAgIHJldHVybiB0aGlzLmV2YWxUZW1wbGF0ZShmb3JtR3JvdXAsIHRlbXBsYXRlLCBvcHRpb25zKTtcclxuICB9XHJcblxyXG4gIGV2YWx1YXRlVW5hcnkoZm9ybUdyb3VwOiBGb3JtR3JvdXAsIHZhbHVlOiBzdHJpbmcgfCBudWxsLCBpbnB1dDogYW55LCBvcHRpb25zOiBFdmFsdWF0ZU9wdGlvbnMgPSB7fSk6IGFueSB7XHJcbiAgICBpZiAodGhpcy5pc0V4cHJlc3Npb24odmFsdWUpKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmV2YWxVbmFyeVRlc3QoZm9ybUdyb3VwLCB0aGlzLmdldEV4cHJlc3Npb24odmFsdWUpLCBpbnB1dCwgb3B0aW9ucyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIGludmFsaWRhdGUodmFsdWU6IHN0cmluZyB8IG51bGwpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmlzRXhwcmVzc2lvbih2YWx1ZSkpIHtcclxuICAgICAgdGhpcy5pbnZhbGlkYXRlRXhwcmVzc2lvbih0aGlzLmdldEV4cHJlc3Npb24odmFsdWUpKTsgICAgICBcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGludmFsaWRhdGVBbGwoKTogdm9pZCB7XHJcbiAgICB0aGlzLmludmFsaWRhdGVBbGxFeHByZXNzaW9uKCk7ICAgICAgXHJcbiAgfVxyXG5cclxuICB3YXRjaChmb3JtR3JvdXA6IEZvcm1Hcm91cCwgZGVwZW5kZW5jaWVzOiAoc3RyaW5nIHwgc3RyaW5nW10pW10sIGNhbGxiYWNrOiAoKSA9PiB2b2lkKSB7XHJcbiAgICB0aGlzLndhdGNoaW5nRGVwZW5kZW5jaWVzKGZvcm1Hcm91cCwgZGVwZW5kZW5jaWVzLCBjYWxsYmFjayk7XHJcbiAgfVxyXG5cclxuICBnZXREZXBlbmRlbmNpZXMoZXhwcmVzc2lvbjogc3RyaW5nKTogKHN0cmluZyB8IHN0cmluZ1tdKVtdIHtcclxuICAgIHJldHVybiB0aGlzLmZlZWxTZXJ2aWNlLmdldERlcGVuZGVuY2llcyhleHByZXNzaW9uKTtcclxuICB9XHJcblxyXG4gIGdldCB2ZXJib3NlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3ZlcmJvc2U7XHJcbiAgfVxyXG5cclxuICBnZXQgY2FjaGVhYmxlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NhY2hlYWJsZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3ZlcmJvc2UgPSBmYWxzZTtcclxuXHJcbiAgcHJpdmF0ZSBfY2FjaGVhYmxlID0gdHJ1ZTtcclxuXHJcbiAgcHJpdmF0ZSBvbkVycm9ySGFuZGxlcjogYW55ID0gdGhpcy5vbkVycm9yLmJpbmQodGhpcyk7XHJcblxyXG4gIHByaXZhdGUgSW5pdCgpIHtcclxuICAgIHRoaXMuX2NhY2hlYWJsZSA9IHRoaXMuZ2xvYmFsU2VydmljZS5nZXRQcm9wZXJ0eShcImZlZWwtY2FjaGVhYmxlXCIsIFwib25cIikgPT09IFwib25cIjtcclxuICAgIHRoaXMuX3ZlcmJvc2UgPSB0aGlzLmdsb2JhbFNlcnZpY2UuZ2V0UHJvcGVydHkoXCJmZWVsLWRpYWdub3N0aWNzXCIsIFwib2ZmXCIpID09PSBcIm9uXCI7XHJcbiAgICBpZiAodGhpcy52ZXJib3NlKVxyXG4gICAgICBjb25zb2xlLmxvZyhcIlByb2dyYW1tYWJpbGl0eSBTZXJ2aWNlIEluaXRpYWxpemVkXCIsIHsgY2FjaGVhYmxlOiB0aGlzLmNhY2hlYWJsZSwgdmVyYm9zZTogdGhpcy52ZXJib3NlIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBldmFsVW5hcnlUZXN0KGZvcm1Hcm91cDogRm9ybUdyb3VwLCBleHByZXNzaW9uOiBzdHJpbmcsIGlucHV0OiBhbnksIG9wdGlvbnM6IEV2YWx1YXRlT3B0aW9ucyA9IHt9KSB7XHJcbiAgICBjb25zdCBsb2dFcnJvciA9IChleHByZXNzaW9uOiBzdHJpbmcsIGVycm9yOiBhbnkpID0+IHtcclxuICAgICAgY29uc29sZS53YXJuKGV4cHJlc3Npb24sIHsgZm9ybUdyb3VwLCBlcnJvciB9KTtcclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgbG9nRXZhbHVhdGlvbiA9IChleHByZXNzaW9uOiBzdHJpbmcsIHJlc3VsdDogYW55KSA9PiB7XHJcbiAgICAgIGlmICghdGhpcy52ZXJib3NlKSByZXR1cm47XHJcbiAgICAgIGNvbnNvbGUubG9nKFwiRXZhbHVhdGUgVW5hcnlUZXN0OlwiLCBleHByZXNzaW9uLCByZXN1bHQsIHsgZm9ybUdyb3VwIH0pO1xyXG4gICAgfTtcclxuXHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCByZXN1bHQgPSB0aGlzLmZlZWxTZXJ2aWNlLmV2YWxVbmFyeVRlc3QoZXhwcmVzc2lvblxyXG4gICAgICAgICwgdGhpcy5nZXRDb250ZXh0KGZvcm1Hcm91cCwgb3B0aW9ucylcclxuICAgICAgICAsIGlucHV0KTtcclxuICAgICAgbG9nRXZhbHVhdGlvbihleHByZXNzaW9uLCByZXN1bHQpO1xyXG4gICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICBsb2dFcnJvcihleHByZXNzaW9uLCBlKTtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGV2YWxFeHByZXNzaW9uKGZvcm1Hcm91cDogRm9ybUdyb3VwLCBleHByZXNzaW9uOiBzdHJpbmcsIG9wdGlvbnM6IEV2YWx1YXRlT3B0aW9ucyA9IHt9KTogYW55IHtcclxuXHJcbiAgICBjb25zdCBsb2dFcnJvciA9IChleHByZXNzaW9uOiBzdHJpbmcsIGVycm9yOiBhbnkpID0+IHtcclxuICAgICAgY29uc29sZS53YXJuKGV4cHJlc3Npb24sIHsgZm9ybUdyb3VwLCBvcHRpb25zLCBlcnJvciB9KTtcclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgbG9nSW52YWxpZGF0ZSA9IChleHByZXNzaW9uOiBzdHJpbmcpID0+IHtcclxuICAgICAgaWYgKCF0aGlzLnZlcmJvc2UpIHJldHVybjtcclxuICAgICAgY29uc29sZS5sb2coXCJJbnZhbGlkYXRlIEV4cHJlc3Npb246XCIsIGV4cHJlc3Npb24sIHsgZm9ybUdyb3VwLCBvcHRpb25zIH0pO1xyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBsb2dFdmFsdWF0aW9uID0gKGV4cHJlc3Npb246IHN0cmluZywgcmVzdWx0OiBhbnkpID0+IHtcclxuICAgICAgaWYgKCF0aGlzLnZlcmJvc2UpIHJldHVybjtcclxuICAgICAgY29uc29sZS5sb2coXCJFdmFsdWF0ZSBFeHByZXNzaW9uOlwiLCBleHByZXNzaW9uLCByZXN1bHQsIHsgZm9ybUdyb3VwLCBvcHRpb25zIH0pO1xyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBldmFsdWF0ZSA9ICgpID0+IHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLmZlZWxTZXJ2aWNlLmV2YWxFeHByZXNzaW9uKGV4cHJlc3Npb25cclxuICAgICAgICAgICwgdGhpcy5nZXRDb250ZXh0KGZvcm1Hcm91cCwgb3B0aW9ucykpO1xyXG4gICAgICAgIGxvZ0V2YWx1YXRpb24oZXhwcmVzc2lvbiwgcmVzdWx0KTtcclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICB9XHJcbiAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgbG9nRXJyb3IoZXhwcmVzc2lvbiwgZSk7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgY2FjaGVhYmxlID0gb3B0aW9ucy5jYWNoZWFibGUgPz8gdGhpcy5jYWNoZWFibGU7XHJcblxyXG4gICAgaWYgKGNhY2hlYWJsZSkge1xyXG5cclxuICAgICAgY29uc3QgaWdub3JlRGVwcyA9IG9wdGlvbnMuaWdub3JlRGVwcyA/PyBmYWxzZTtcclxuXHJcbiAgICAgIGlmICghaWdub3JlRGVwcykge1xyXG4gICAgICAgIGNvbnN0IHdhdGNoS2V5ID0gYDp3YXRjaCgke2V4cHJlc3Npb259KWA7XHJcblxyXG4gICAgICAgIHRoaXMud2Vha1NlcnZpY2UuY2FsbCh0aGlzLCB3YXRjaEtleSwgKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy53YXRjaGluZ0V4cHJlc3Npb24oZm9ybUdyb3VwLCBleHByZXNzaW9uXHJcbiAgICAgICAgICAgICwgKCkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMuaW52YWxpZGF0ZUV4cHJlc3Npb24oZXhwcmVzc2lvbik7XHJcbiAgICAgICAgICAgICAgbG9nSW52YWxpZGF0ZShleHByZXNzaW9uKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgICBcclxuICAgICAgcmV0dXJuIHRoaXMud2Vha1NlcnZpY2UuY2FsbCh0aGlzLCBleHByZXNzaW9uLCBldmFsdWF0ZSwgbnVsbCwgdGhpcy5vbkVycm9ySGFuZGxlcik7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgcmV0dXJuIGV2YWx1YXRlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGV2YWxUZW1wbGF0ZShmb3JtR3JvdXA6IEZvcm1Hcm91cCwgZXhwcmVzc2lvbjogc3RyaW5nLCBvcHRpb25zOiBFdmFsdWF0ZU9wdGlvbnMgPSB7fSk6IGFueSB7XHJcblxyXG4gICAgY29uc3QgbG9nRXJyb3IgPSAoZXhwcmVzc2lvbjogc3RyaW5nLCBlcnJvcjogYW55KSA9PiB7XHJcbiAgICAgIGNvbnNvbGUud2FybihleHByZXNzaW9uLCB7IGZvcm1Hcm91cCwgb3B0aW9ucywgZXJyb3IgfSk7XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IGxvZ0ludmFsaWRhdGUgPSAoZXhwcmVzc2lvbjogc3RyaW5nKSA9PiB7XHJcbiAgICAgIGlmICghdGhpcy52ZXJib3NlKSByZXR1cm47XHJcbiAgICAgIGNvbnNvbGUubG9nKFwiSW52YWxpZGF0ZSBUZW1wbGF0ZTpcIiwgZXhwcmVzc2lvbiwgeyBmb3JtR3JvdXAsIG9wdGlvbnMgfSk7XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IGxvZ0V2YWx1YXRpb24gPSAoZXhwcmVzc2lvbjogc3RyaW5nLCByZXN1bHQ6IGFueSkgPT4ge1xyXG4gICAgICBpZiAoIXRoaXMudmVyYm9zZSkgcmV0dXJuO1xyXG4gICAgICBjb25zb2xlLmxvZyhcIkV2YWx1YXRlIFRlbXBsYXRlOlwiLCBleHByZXNzaW9uLCByZXN1bHQsIHsgZm9ybUdyb3VwLCBvcHRpb25zIH0pO1xyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBldmFsdWF0ZSA9ICgpID0+IHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLmZlZWxTZXJ2aWNlLmV2YWxUZW1wbGF0ZShleHByZXNzaW9uXHJcbiAgICAgICAgICAsIHRoaXMuZ2V0Q29udGV4dChmb3JtR3JvdXApKTtcclxuICAgICAgICBsb2dFdmFsdWF0aW9uKGV4cHJlc3Npb24sIHJlc3VsdCk7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgfVxyXG4gICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgIGxvZ0Vycm9yKGV4cHJlc3Npb24sIGUpO1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IGNhY2hlYWJsZSA9IG9wdGlvbnMuY2FjaGVhYmxlID8/IHRoaXMuY2FjaGVhYmxlO1xyXG4gICAgXHJcbiAgICBpZiAoY2FjaGVhYmxlKSB7XHJcbiAgICAgIGNvbnN0IHdhdGNoS2V5ID0gYDp3YXRjaFRlbXBsYXRlKCR7ZXhwcmVzc2lvbn0pYDtcclxuXHJcbiAgICAgIHRoaXMud2Vha1NlcnZpY2UuY2FsbCh0aGlzLCB3YXRjaEtleSwgKCkgPT4ge1xyXG4gICAgICAgIHRoaXMud2F0Y2hpbmdUZW1wbGF0ZUV4cHJlc3Npb24oZm9ybUdyb3VwLCBleHByZXNzaW9uXHJcbiAgICAgICAgICAsICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5pbnZhbGlkYXRlRXhwcmVzc2lvbihleHByZXNzaW9uKTtcclxuICAgICAgICAgICAgbG9nSW52YWxpZGF0ZShleHByZXNzaW9uKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHJldHVybiB0aGlzLndlYWtTZXJ2aWNlLmNhbGwodGhpcywgZXhwcmVzc2lvbiwgZXZhbHVhdGUpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHJldHVybiBldmFsdWF0ZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBvbkVycm9yKHJlc3VsdDogYW55KTogYW55IHtcclxuICAgIGlmIChpc09ic2VydmFibGUocmVzdWx0KSkge1xyXG4gICAgICByZXR1cm4gcmVzdWx0LnBpcGUoXHJcbiAgICAgICAgdGFwKHtcclxuICAgICAgICAgIGVycm9yOiBlcnIgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0U2VydmljZS5ub3RpZnlFcnJvcihlcnIubWVzc2FnZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRQcmVkZWZpbmVkRnVuY3Rpb25zKCk6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuZXZhbHVhdG9yUHJvdmlkZXJzLnJlZHVjZSgoYWNjLCBwcm92aWRlcikgPT4ge1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIC4uLmFjYyxcclxuICAgICAgICAuLi5wcm92aWRlci5nZXRDb250ZXh0KClcclxuICAgICAgfTtcclxuICAgIH0sIHt9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0RmVlbEZ1bmN0aW9ucygpXHJcbiAge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgaXNWYWxpZEV4cHJlc3Npb246IHRoaXMuZmVlbFNlcnZpY2UuaXNWYWxpZEV4cHJlc3Npb24sXHJcbiAgICAgIGlzVmFsaWRVbmFyeVRlc3Q6IHRoaXMuZmVlbFNlcnZpY2UuaXNWYWxpZFVuYXJ5VGVzdFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0Rm9ybUZ1bmN0aW9ucyhmb3JtR3JvdXA6IEZvcm1Hcm91cCB8IG51bGwpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLmZvcm1TZXJ2aWNlLmdldENvbnRleHQoZm9ybUdyb3VwKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0UGFyZW50Q29udGV4dChmb3JtR3JvdXA6IEZvcm1Hcm91cCB8IG51bGwpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgbnVsbCB7XHJcbiAgICBpZiAoZm9ybUdyb3VwID09PSBudWxsKSB7IFxyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBwYXJlbnQgPSB0aGlzLmdldFBhcmVudChmb3JtR3JvdXApO1xyXG5cclxuICAgIGlmICghcGFyZW50KSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgIC4uLnBhcmVudC52YWx1ZSxcclxuICAgICAgZm9ybUdyb3VwOiAoKSA9PiB0b1Byb3h5KHBhcmVudCksICAgICAgXHJcbiAgICAgIGdldCBwYXJlbnQoKSB7IHJldHVybiBzZWxmLmdldFBhcmVudENvbnRleHQocGFyZW50KTsgfSxcclxuICAgIH07ICAgIFxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRSb290Q29udGV4dChmb3JtR3JvdXA6IEZvcm1Hcm91cCB8IG51bGwpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgbnVsbCB7XHJcbiAgICBpZiAoZm9ybUdyb3VwID09PSBudWxsKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICBjb25zdCByb290ID0gZm9ybUdyb3VwPy5yb290O1xyXG5cclxuICAgIGlmICghcm9vdCkge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcm9vdC52YWx1ZTsgICAgXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFBhcmVudChmb3JtR3JvdXA6IEZvcm1Hcm91cCkgOiBGb3JtR3JvdXAgfCBudWxsIHtcclxuICAgIGxldCBwYXJlbnQgPSBmb3JtR3JvdXAucGFyZW50O1xyXG5cclxuICAgIHdoaWxlIChwYXJlbnQgaW5zdGFuY2VvZiBGb3JtQXJyYXkpIHtcclxuICAgICAgcGFyZW50ID0gcGFyZW50Py5wYXJlbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHBhcmVudCBhcyBGb3JtR3JvdXAgfCBudWxsO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRDb250ZXh0KGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCwgb3B0aW9uczogRXZhbHVhdGVPcHRpb25zID0ge30pOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcclxuXHJcbiAgICBjb25zdCBmb3JtR3JvdXAgPSBjb250cm9sIGFzIEZvcm1Hcm91cCB8IG51bGw7XHJcblxyXG4gICAgY29uc3QgYmFzZUNvbnRleHQgPSBmb3JtR3JvdXA/LnZhbHVlID8/IHsgfTtcclxuXHJcbiAgICBjb25zdCBzZWxmID0gdGhpcztcclxuXHJcbiAgICBsZXQgY29udGV4dCA9IHtcclxuICAgICAgZ2V0IGNvbnNvbGUoKSB7IHJldHVybiB0b1Byb3h5KGNvbnNvbGUpOyB9LFxyXG4gICAgICBnZXQgcGFyZW50KCkgeyByZXR1cm4gc2VsZi5nZXRQYXJlbnRDb250ZXh0KGZvcm1Hcm91cCk7IH0sXHJcbiAgICAgIGdldCByb290KCkgeyByZXR1cm4gc2VsZi5nZXRSb290Q29udGV4dChmb3JtR3JvdXApOyB9LFxyXG4gICAgICBmb3JtR3JvdXA6ICgpID0+IHRvUHJveHkoZm9ybUdyb3VwKSxcclxuICAgICAgXzogdGhpcy5zY29wZT8uZ2V0Q29udGV4dCgpLFxyXG4gICAgICAuLi5iYXNlQ29udGV4dCxcclxuICAgICAgZm46IHtcclxuICAgICAgICAuLi50aGlzLnByZWRlZmluZWRGdW5jdGlvbnMsXHJcbiAgICAgICAgLi4udGhpcy5nZXRGb3JtRnVuY3Rpb25zKGZvcm1Hcm91cCksXHJcbiAgICAgICAgLi4udGhpcy5nZXRGZWVsRnVuY3Rpb25zKClcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChvcHRpb25zLmV4dGVuZENvbnRleHQpIHtcclxuICAgICAgY29uc3QgZXh0ZW5kZWQgPSBvcHRpb25zLmV4dGVuZENvbnRleHQoKTtcclxuICAgICAgaWYgKGV4dGVuZGVkKSB7XHJcbiAgICAgICAgY29udGV4dCA9IHtcclxuICAgICAgICAgIC4uLmNvbnRleHQsXHJcbiAgICAgICAgICAuLi5leHRlbmRlZFxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBjb250ZXh0O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB3YXRjaGluZ0V4cHJlc3Npb24oZm9ybUdyb3VwOiBGb3JtR3JvdXAsIGV4cHJlc3Npb246IHN0cmluZywgY2FsbGJhY2s6ICgpID0+IHZvaWQpOiB2b2lkIHtcclxuICAgIGNvbnN0IGxvZ0RlcGVuZGVuY2llcyA9IChkZXBlbmRlbmNpZXM6IGFueSkgPT4ge1xyXG4gICAgICBpZiAoIXRoaXMudmVyYm9zZSkgcmV0dXJuO1xyXG4gICAgICBjb25zb2xlLmxvZyhcIkdldCBEZXBlbmRlbmNpZXM6XCIsIGV4cHJlc3Npb24sIGRlcGVuZGVuY2llcywgeyBmb3JtR3JvdXAgfSk7XHJcbiAgICB9O1xyXG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dChmb3JtR3JvdXApO1xyXG4gICAgY29uc3QgZGVwZW5kZW5jaWVzID0gdGhpcy5mZWVsU2VydmljZS5nZXREZXBlbmRlbmNpZXMoZXhwcmVzc2lvbiwgY29udGV4dCk7XHJcbiAgICBsb2dEZXBlbmRlbmNpZXMoZGVwZW5kZW5jaWVzKTtcclxuICAgIHRoaXMud2F0Y2hpbmdEZXBlbmRlbmNpZXMoZm9ybUdyb3VwLCBkZXBlbmRlbmNpZXMsIGNhbGxiYWNrKTtcclxuICB9O1xyXG5cclxuICBwcml2YXRlIHdhdGNoaW5nVGVtcGxhdGVFeHByZXNzaW9uKGZvcm1Hcm91cDogRm9ybUdyb3VwLCBleHByZXNzaW9uOiBzdHJpbmcsIGNhbGxiYWNrOiAoKSA9PiB2b2lkKTogdm9pZCB7XHJcbiAgICBjb25zdCBsb2dEZXBlbmRlbmNpZXMgPSAoZGVwZW5kZW5jaWVzOiBhbnkpID0+IHtcclxuICAgICAgaWYgKCF0aGlzLnZlcmJvc2UpIHJldHVybjtcclxuICAgICAgY29uc29sZS5sb2coXCJHZXQgVGVtcGxhdGUgRGVwZW5kZW5jaWVzOlwiLCBleHByZXNzaW9uLCBkZXBlbmRlbmNpZXMsIHsgZm9ybUdyb3VwIH0pO1xyXG4gICAgfTtcclxuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoZm9ybUdyb3VwKTtcclxuICAgIGNvbnN0IGRlcGVuZGVuY2llcyA9IHRoaXMuZmVlbFNlcnZpY2UuZ2V0VGVtcGxhdGVEZXBlbmRlbmNpZXMoZXhwcmVzc2lvbiwgY29udGV4dCk7XHJcbiAgICBsb2dEZXBlbmRlbmNpZXMoZGVwZW5kZW5jaWVzKTtcclxuICAgIHRoaXMud2F0Y2hpbmdEZXBlbmRlbmNpZXMoZm9ybUdyb3VwLCBkZXBlbmRlbmNpZXMsIGNhbGxiYWNrKTtcclxuICB9O1xyXG5cclxuICBwcml2YXRlIHdhdGNoaW5nRGVwZW5kZW5jaWVzKGZvcm1Hcm91cDogRm9ybUdyb3VwLCBkZXBlbmRlbmNpZXM6IChzdHJpbmcgfCBzdHJpbmdbXSlbXSwgY2FsbGJhY2s6ICgpID0+IHZvaWQpOiB2b2lkIHtcclxuICAgIGNvbnN0IGxvZ1dhdGNoaW5nID0gKGRlcGVuZGVuY2U6IGFueSkgPT4ge1xyXG4gICAgICBpZiAoIXRoaXMudmVyYm9zZSkgcmV0dXJuO1xyXG4gICAgICBjb25zdCB0ZXh0ID0gQXJyYXkuaXNBcnJheShkZXBlbmRlbmNlKSA/IGRlcGVuZGVuY2Uuam9pbihcIi5cIikgOiBkZXBlbmRlbmNlO1xyXG4gICAgICBjb25zb2xlLmxvZyhcIldhdGNoaW5nIGRlcGVuZGVuY2U6XCIsIHRleHQsIHsgZm9ybUdyb3VwIH0pO1xyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBsb2dWYWx1ZUNoYW5nZWQgPSAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKSA9PiB7XHJcbiAgICAgIGlmICghdGhpcy52ZXJib3NlKSByZXR1cm47XHJcbiAgICAgIGNvbnNvbGUubG9nKFwiVmFsdWUgQ2hhbmdlZDpcIiwgY29udHJvbC52YWx1ZSwgeyBwYXRoOiB0aGlzLmdldFBhdGgoY29udHJvbCksIGNvbnRyb2wgfSk7XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IGxvZ1N0YXR1c0NoYW5nZWQgPSAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKSA9PiB7XHJcbiAgICAgIGlmICghdGhpcy52ZXJib3NlKSByZXR1cm47XHJcbiAgICAgIGNvbnNvbGUubG9nKFwiU3RhdHVzIENoYW5nZWQ6XCIsIGNvbnRyb2wuc3RhdHVzLCB7IHBhdGg6IHRoaXMuZ2V0UGF0aChjb250cm9sKSwgY29udHJvbCB9KTtcclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgbG9nU2NvcGVSZWZyZXNoZWQgPSAocGF0aDogUGF0aCkgPT4ge1xyXG4gICAgICBpZiAoIXRoaXMudmVyYm9zZSkgcmV0dXJuO1xyXG4gICAgICBjb25zb2xlLmxvZyhcIlNjb3BlIFJlZnJlc2hlZDogXCIsIHBhdGgpO1xyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCB2YWx1ZVN1YnNjcmliZSA9IChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpID0+IHtcclxuICAgICAgdGhpcy5zdWJzY3JpYmVTZXJ2aWNlLnN1YnNjcmliZUNoYW5nZXMoY29udHJvbC52YWx1ZUNoYW5nZXMsIGNvbnRyb2wsIGNvbnRyb2wudmFsdWUsIHRoaXMuZGVzdHJveVJlZiwgY2FsbGJhY2ssIGxvZ1ZhbHVlQ2hhbmdlZCk7XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IHN0YXR1c1N1YnNjcmliZSA9IChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpID0+IHtcclxuICAgICAgdGhpcy5zdWJzY3JpYmVTZXJ2aWNlLnN1YnNjcmliZUNoYW5nZXM8Rm9ybUNvbnRyb2xTdGF0dXM+KHRoaXMuZm9ybVNlcnZpY2Uuc3RhdHVzQ2hhbmdlcyhjb250cm9sLCBjYWxsYmFjayksIGNvbnRyb2wsIGNvbnRyb2wuc3RhdHVzLCB0aGlzLmRlc3Ryb3lSZWYsIGNhbGxiYWNrLCBsb2dTdGF0dXNDaGFuZ2VkKTtcclxuICAgIH07XHJcblxyXG4gICAgY29uc3Qgc3Vic2NyaWJlU2NvcGUgPSAoZGVwZW5kZW5jZTogUGF0aCkgPT4ge1xyXG4gICAgICB0aGlzLnNjb3BlLm9uUmVmcmVzaFxyXG4gICAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKHBhdGgpID0+IHtcclxuICAgICAgICAgIGlmIChtYXRjaFBhdGgocGF0aCwgZGVwZW5kZW5jZSkpe1xyXG4gICAgICAgICAgICBjYWxsYmFjaygpO1xyXG4gICAgICAgICAgICBsb2dTY29wZVJlZnJlc2hlZChkZXBlbmRlbmNlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgbG9nV2F0Y2hpbmcoZGVwZW5kZW5jZSk7XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IHN1YnNjcmliZUNvbnRyb2wgPSAoY29udHJvbDogQWJzdHJhY3RDb250cm9sXHJcbiAgICAgICwgc3RhdHVzOiBib29sZWFuXHJcbiAgICAgICwgZGVwZW5kZW5jZTogc3RyaW5nIHwgc3RyaW5nW11cclxuICAgICkgPT4ge1xyXG4gICAgICBpZiAoIXN0YXR1cykge1xyXG4gICAgICAgIHZhbHVlU3Vic2NyaWJlKGNvbnRyb2wpO1xyXG4gICAgICAgIGxvZ1dhdGNoaW5nKGRlcGVuZGVuY2UpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHN0YXR1c1N1YnNjcmliZShjb250cm9sKTtcclxuICAgICAgICBsb2dXYXRjaGluZyhkZXBlbmRlbmNlKTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBpc1Njb3BlID0gKHBhdGg6IHN0cmluZyB8IHN0cmluZ1tdKTogcGF0aCBpcyBzdHJpbmdbXSA9PiB7XHJcbiAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KHBhdGgpICYmIHBhdGgubGVuZ3RoID4gMCAmJiBwYXRoWzBdID09PSBcIl9cIjtcclxuICAgIH07XHJcblxyXG4gICAgZm9yIChjb25zdCBkZXBlbmRlbmNlIG9mIGRlcGVuZGVuY2llcykge1xyXG4gICAgICBjb25zdCBbcGF0aCwgc3RhdHVzXSA9IHRoaXMucHJvY2Vzc0RlcGVuZGVuY2llcyhkZXBlbmRlbmNlKTtcclxuICAgICAgaWYgKGlzU2NvcGUocGF0aCkpIHtcclxuICAgICAgICBzdWJzY3JpYmVTY29wZShwYXRoLnNwbGljZSgxKSk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMuZm9ybVNlcnZpY2UuZ2V0Q29udHJvbChmb3JtR3JvdXAsIHBhdGgsIHsgYnJlYWtPbkFycmF5OiB0cnVlIH0pO1xyXG4gICAgICAgIGlmIChjb250cm9sKSB7XHJcbiAgICAgICAgICBzdWJzY3JpYmVDb250cm9sKGNvbnRyb2wsIHN0YXR1cywgZGVwZW5kZW5jZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5mb3JtU2VydmljZS53YWl0Rm9yQ29udHJvbChmb3JtR3JvdXAsIHBhdGgsIHsgYnJlYWtPbkFycmF5OiB0cnVlIH0pXHJcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKGNvbnRyb2wgPT4ge1xyXG4gICAgICAgICAgICAgIHN1YnNjcmliZUNvbnRyb2woY29udHJvbCwgc3RhdHVzLCBkZXBlbmRlbmNlKTtcclxuICAgICAgICAgICAgICBjYWxsYmFjaygpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gICAgXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGludmFsaWRhdGVFeHByZXNzaW9uKGV4cHJlc3Npb246IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy53ZWFrU2VydmljZS5pbnZhbGlkYXRlKHRoaXMsIGV4cHJlc3Npb24pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbnZhbGlkYXRlQWxsRXhwcmVzc2lvbigpOiB2b2lkIHtcclxuICAgIHRoaXMud2Vha1NlcnZpY2UuaW52YWxpZGF0ZUFsbCh0aGlzKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcHJvY2Vzc0RlcGVuZGVuY2llcyhkZXBlbmRlbmN5OiBzdHJpbmcgfCBzdHJpbmdbXSk6IFtzdHJpbmcgfCBzdHJpbmdbXSwgYm9vbGVhbl0ge1xyXG4gICAgY29uc3Qgc3RhdHVzRGVwZW5kZW5jeSA9IEFycmF5LmlzQXJyYXkoZGVwZW5kZW5jeSlcclxuICAgICAgJiYgZGVwZW5kZW5jeS5sZW5ndGggPiAxXHJcbiAgICAgICYmIGRlcGVuZGVuY3lbMF0gPT09IFN0YXR1c0RlcGVuZGVuY3k7XHJcblxyXG4gICAgcmV0dXJuIHN0YXR1c0RlcGVuZGVuY3lcclxuICAgICAgPyBbZGVwZW5kZW5jeS5zbGljZSgxKSwgdHJ1ZV1cclxuICAgICAgOiBbZGVwZW5kZW5jeSwgZmFsc2VdO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRQYXRoKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5mb3JtU2VydmljZS5nZXRQYXRoKGNvbnRyb2wpLmpvaW4oXCIuXCIpO1xyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJRXZhbHVhdG9yUHJvdmlkZXIge1xyXG4gIGdldENvbnRleHQoc2NvcGU/OiBhbnkpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEV2YWx1YXRlT3B0aW9ucyB7XHJcbiAgY2FjaGVhYmxlPzogYm9vbGVhbjtcclxuICBpZ25vcmVEZXBzPzogYm9vbGVhbjtcclxuICBleHRlbmRDb250ZXh0PzogRXh0ZW5kQ29udGV4dEZuO1xyXG59XHJcblxyXG5leHBvcnQgdHlwZSBFeHRlbmRDb250ZXh0Rm4gPSAoKSA9PiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xyXG4iXX0=
@@ -27,12 +27,9 @@ export class ScopeService {
27
27
  getContext() {
28
28
  if (!this.scope)
29
29
  return {};
30
- return {
31
- ...toProxy(this.scope),
32
- parent: () => {
33
- this.parent?.getContext();
34
- }
35
- };
30
+ const ctx = toProxy(this.scope);
31
+ ctx.parent = () => this.parent?.getContext();
32
+ return ctx;
36
33
  }
37
34
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScopeService, deps: [{ token: ScopeService, optional: true, skipSelf: true }], target: i0.ɵɵFactoryTarget.Injectable });
38
35
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScopeService });
@@ -44,4 +41,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
44
41
  }, {
45
42
  type: SkipSelf
46
43
  }] }] });
47
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NvcGUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zaXJpby9zcmMvbGliL3NlcnZpY2VzL3Njb3BlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRS9ELE9BQU8sRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFM0MsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGdCQUFnQixDQUFDOztBQUl6QyxNQUFNLE9BQU8sWUFBWTtJQUdXO0lBRGxDLFlBQ2tDLE1BQTJCO1FBQTNCLFdBQU0sR0FBTixNQUFNLENBQXFCO0lBQzdELENBQUM7SUFFTyxLQUFLLEdBQStCLElBQUksQ0FBQztJQUVoQyxjQUFjLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztJQUU3QyxTQUFTLEdBQXFCLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxFQUFFLENBQUM7SUFFMUUsR0FBRyxDQUFDLEtBQWlDO1FBQ25DLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0lBQ3JCLENBQUM7SUFFRCxHQUFHO1FBQ0QsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3BCLENBQUM7SUFFRCxPQUFPLENBQUMsT0FBYSxFQUFFO1FBQ3JCLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFRCxXQUFXLENBQUMsR0FBRyxLQUFhO1FBQzFCLEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxFQUFFLENBQUM7WUFDekIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyQixDQUFDO0lBQ0gsQ0FBQztJQUVELFVBQVU7UUFDUixJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUs7WUFBRSxPQUFPLEVBQUUsQ0FBQztRQUMzQixPQUFPO1lBQ0wsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztZQUN0QixNQUFNLEVBQUUsR0FBRyxFQUFFO2dCQUNYLElBQUksQ0FBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLENBQUM7WUFDNUIsQ0FBQztTQUNGLENBQUM7SUFDSixDQUFDO3dHQXRDVSxZQUFZOzRHQUFaLFlBQVk7OzRGQUFaLFlBQVk7a0JBRHhCLFVBQVU7OzBCQUlOLFFBQVE7OzBCQUFJLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBPcHRpb25hbCwgU2tpcFNlbGYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgSUV2YWx1YXRvclByb3ZpZGVyIH0gZnJvbSAnLi4vc2VydmljZXMvcHJvZ3JhbW1hYmlsaXR5LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFBhdGggfSBmcm9tICcuLi9jb21tb24vcGF0aCc7XHJcbmltcG9ydCB7IHRvUHJveHkgfSBmcm9tICcuLi91dGlscy9wcm94eSc7XHJcblxyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgU2NvcGVTZXJ2aWNlIGltcGxlbWVudHMgSUV2YWx1YXRvclByb3ZpZGVyIHtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBAT3B0aW9uYWwoKSBAU2tpcFNlbGYoKSBwcml2YXRlIHBhcmVudDogU2NvcGVTZXJ2aWNlIHwgbnVsbCkge1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzY29wZTogUmVjb3JkPHN0cmluZywgYW55PiB8IG51bGwgPSBudWxsO1xyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IHJlZnJlc2hTdWJqZWN0ID0gbmV3IFN1YmplY3Q8UGF0aD4oKTtcclxuXHJcbiAgcmVhZG9ubHkgb25SZWZyZXNoOiBPYnNlcnZhYmxlPFBhdGg+ID0gdGhpcy5yZWZyZXNoU3ViamVjdC5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgc2V0KHNjb3BlOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgbnVsbCkge1xyXG4gICAgdGhpcy5zY29wZSA9IHNjb3BlO1xyXG4gIH1cclxuXHJcbiAgZ2V0KCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCBudWxsIHtcclxuICAgIHJldHVybiB0aGlzLnNjb3BlOyBcclxuICB9XHJcblxyXG4gIHJlZnJlc2gocGF0aDogUGF0aCA9IFtdKTogdm9pZCB7XHJcbiAgICB0aGlzLnJlZnJlc2hTdWJqZWN0Lm5leHQocGF0aCk7XHJcbiAgfVxyXG5cclxuICByZWZyZXNoTWFueSguLi5wYXRoczogUGF0aFtdKTogdm9pZCB7XHJcbiAgICBmb3IgKGNvbnN0IHBhdGggb2YgcGF0aHMpIHtcclxuICAgICAgdGhpcy5yZWZyZXNoKHBhdGgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0Q29udGV4dCgpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcclxuICAgIGlmICghdGhpcy5zY29wZSkgcmV0dXJuIHt9O1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgLi4udG9Qcm94eSh0aGlzLnNjb3BlKSxcclxuICAgICAgcGFyZW50OiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5wYXJlbnQ/LmdldENvbnRleHQoKTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuICB9XHJcbn1cclxuIl19
44
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NvcGUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zaXJpby9zcmMvbGliL3NlcnZpY2VzL3Njb3BlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRS9ELE9BQU8sRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFM0MsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGdCQUFnQixDQUFDOztBQUl6QyxNQUFNLE9BQU8sWUFBWTtJQUdXO0lBRGxDLFlBQ2tDLE1BQTJCO1FBQTNCLFdBQU0sR0FBTixNQUFNLENBQXFCO0lBQzdELENBQUM7SUFFTyxLQUFLLEdBQStCLElBQUksQ0FBQztJQUVoQyxjQUFjLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztJQUU3QyxTQUFTLEdBQXFCLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxFQUFFLENBQUM7SUFFMUUsR0FBRyxDQUFDLEtBQWlDO1FBQ25DLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0lBQ3JCLENBQUM7SUFFRCxHQUFHO1FBQ0QsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3BCLENBQUM7SUFFRCxPQUFPLENBQUMsT0FBYSxFQUFFO1FBQ3JCLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFRCxXQUFXLENBQUMsR0FBRyxLQUFhO1FBQzFCLEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxFQUFFLENBQUM7WUFDekIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyQixDQUFDO0lBQ0gsQ0FBQztJQUVELFVBQVU7UUFDUixJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUs7WUFBRSxPQUFPLEVBQUUsQ0FBQztRQUMzQixNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2hDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsQ0FBQztRQUM3QyxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7d0dBbkNVLFlBQVk7NEdBQVosWUFBWTs7NEZBQVosWUFBWTtrQkFEeEIsVUFBVTs7MEJBSU4sUUFBUTs7MEJBQUksUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIE9wdGlvbmFsLCBTa2lwU2VsZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBJRXZhbHVhdG9yUHJvdmlkZXIgfSBmcm9tICcuLi9zZXJ2aWNlcy9wcm9ncmFtbWFiaWxpdHkuc2VydmljZSc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgUGF0aCB9IGZyb20gJy4uL2NvbW1vbi9wYXRoJztcclxuaW1wb3J0IHsgdG9Qcm94eSB9IGZyb20gJy4uL3V0aWxzL3Byb3h5JztcclxuXHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBTY29wZVNlcnZpY2UgaW1wbGVtZW50cyBJRXZhbHVhdG9yUHJvdmlkZXIge1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIEBPcHRpb25hbCgpIEBTa2lwU2VsZigpIHByaXZhdGUgcGFyZW50OiBTY29wZVNlcnZpY2UgfCBudWxsKSB7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNjb3BlOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIHByaXZhdGUgcmVhZG9ubHkgcmVmcmVzaFN1YmplY3QgPSBuZXcgU3ViamVjdDxQYXRoPigpO1xyXG5cclxuICByZWFkb25seSBvblJlZnJlc2g6IE9ic2VydmFibGU8UGF0aD4gPSB0aGlzLnJlZnJlc2hTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBzZXQoc2NvcGU6IFJlY29yZDxzdHJpbmcsIGFueT4gfCBudWxsKSB7XHJcbiAgICB0aGlzLnNjb3BlID0gc2NvcGU7XHJcbiAgfVxyXG5cclxuICBnZXQoKTogUmVjb3JkPHN0cmluZywgYW55PiB8IG51bGwge1xyXG4gICAgcmV0dXJuIHRoaXMuc2NvcGU7IFxyXG4gIH1cclxuXHJcbiAgcmVmcmVzaChwYXRoOiBQYXRoID0gW10pOiB2b2lkIHtcclxuICAgIHRoaXMucmVmcmVzaFN1YmplY3QubmV4dChwYXRoKTtcclxuICB9XHJcblxyXG4gIHJlZnJlc2hNYW55KC4uLnBhdGhzOiBQYXRoW10pOiB2b2lkIHtcclxuICAgIGZvciAoY29uc3QgcGF0aCBvZiBwYXRocykge1xyXG4gICAgICB0aGlzLnJlZnJlc2gocGF0aCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRDb250ZXh0KCk6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xyXG4gICAgaWYgKCF0aGlzLnNjb3BlKSByZXR1cm4ge307XHJcbiAgICBjb25zdCBjdHggPSB0b1Byb3h5KHRoaXMuc2NvcGUpO1xyXG4gICAgY3R4LnBhcmVudCA9ICgpID0+IHRoaXMucGFyZW50Py5nZXRDb250ZXh0KCk7XHJcbiAgICByZXR1cm4gY3R4O1xyXG4gIH1cclxufVxyXG4iXX0=
@@ -1,15 +1,12 @@
1
1
  import { Injectable } from '@angular/core';
2
2
  import * as i0 from "@angular/core";
3
- import * as i1 from "../services/programmability.service";
4
- import * as i2 from "./form.service";
5
- import * as i3 from "../services/subscribe.service";
3
+ import * as i1 from "./form.service";
4
+ import * as i2 from "../services/subscribe.service";
6
5
  export class StatusService {
7
- programmability;
8
6
  formService;
9
7
  subscribeService;
10
8
  destroyRef;
11
- constructor(programmability, formService, subscribeService, destroyRef) {
12
- this.programmability = programmability;
9
+ constructor(formService, subscribeService, destroyRef) {
13
10
  this.formService = formService;
14
11
  this.subscribeService = subscribeService;
15
12
  this.destroyRef = destroyRef;
@@ -17,26 +14,46 @@ export class StatusService {
17
14
  createCollection() {
18
15
  return new Set();
19
16
  }
20
- addToCollection(collection, control) {
21
- collection.add(control);
17
+ addToCollection(collection, control, component) {
18
+ if (!collection.has(control) && this.canAddToCollection(component)) {
19
+ collection.add(control);
20
+ }
22
21
  }
23
22
  setupCollection(key, collection) {
24
- const countInvalid = () => {
25
- return this.formService.countInvalid(collection);
26
- };
27
- this.invalidMap.set(key, countInvalid());
28
- collection.forEach((control) => {
29
- this.subscribeService.subscribeChanges(control.statusChanges, control, control.status, this.destroyRef, () => this.invalidMap.set(key, countInvalid()));
23
+ this.invalidMap.set(key, {
24
+ collection,
25
+ dirty: true,
26
+ cached: 0
27
+ });
28
+ collection.forEach(control => {
29
+ this.subscribeService.subscribeChanges(control.statusChanges, control, control.status, this.destroyRef, () => {
30
+ const entry = this.invalidMap.get(key);
31
+ if (entry) {
32
+ entry.dirty = true;
33
+ }
34
+ });
30
35
  });
31
36
  }
32
37
  countInvalid(key) {
33
- return this.invalidMap.get(key) ?? 0;
38
+ const entry = this.invalidMap.get(key);
39
+ if (!entry)
40
+ return 0;
41
+ if (entry.dirty) {
42
+ entry.cached = this.formService.countInvalid(entry.collection);
43
+ entry.dirty = false;
44
+ }
45
+ return entry.cached;
34
46
  }
35
47
  invalidMap = new Map();
36
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: StatusService, deps: [{ token: i1.ProgrammabilityService }, { token: i2.FormService }, { token: i3.SubscribeService }, { token: i0.DestroyRef }], target: i0.ɵɵFactoryTarget.Injectable });
48
+ canAddToCollection(component) {
49
+ const required = component?.validate?.required;
50
+ const hasRules = Array.isArray(component?.validations) && component.validations.length > 0;
51
+ return required === true || hasRules;
52
+ }
53
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: StatusService, deps: [{ token: i1.FormService }, { token: i2.SubscribeService }, { token: i0.DestroyRef }], target: i0.ɵɵFactoryTarget.Injectable });
37
54
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: StatusService });
38
55
  }
39
56
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: StatusService, decorators: [{
40
57
  type: Injectable
41
- }], ctorParameters: () => [{ type: i1.ProgrammabilityService }, { type: i2.FormService }, { type: i3.SubscribeService }, { type: i0.DestroyRef }] });
42
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdHVzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc2lyaW8vc3JjL2xpYi9zZXJ2aWNlcy9zdGF0dXMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWMsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7OztBQU92RCxNQUFNLE9BQU8sYUFBYTtJQUdkO0lBQ0U7SUFDQTtJQUNBO0lBSlosWUFDVSxlQUF1QyxFQUNyQyxXQUF3QixFQUN4QixnQkFBa0MsRUFDbEMsVUFBc0I7UUFIeEIsb0JBQWUsR0FBZixlQUFlLENBQXdCO1FBQ3JDLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMsZUFBVSxHQUFWLFVBQVUsQ0FBWTtJQUNsQyxDQUFDO0lBRUQsZ0JBQWdCO1FBQ2QsT0FBTyxJQUFJLEdBQUcsRUFBbUIsQ0FBQztJQUNwQyxDQUFDO0lBRUQsZUFBZSxDQUFDLFVBQTRCLEVBQUUsT0FBd0I7UUFDcEUsVUFBVSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMxQixDQUFDO0lBRUQsZUFBZSxDQUFDLEdBQVEsRUFBRSxVQUE0QjtRQUVwRCxNQUFNLFlBQVksR0FBRyxHQUFHLEVBQUU7WUFDeEIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNuRCxDQUFDLENBQUE7UUFFRCxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQztRQUV6QyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFFN0IsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQ3hELE9BQU8sRUFDUCxPQUFPLENBQUMsTUFBTSxFQUNkLElBQUksQ0FBQyxVQUFVLEVBQ2YsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN0RCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxZQUFZLENBQUMsR0FBUTtRQUVuQixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRU8sVUFBVSxHQUFxQixJQUFJLEdBQUcsRUFBZSxDQUFDO3dHQXhDbkQsYUFBYTs0R0FBYixhQUFhOzs0RkFBYixhQUFhO2tCQUR6QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGVzdHJveVJlZiwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtU2VydmljZSB9IGZyb20gJy4vZm9ybS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBQcm9ncmFtbWFiaWxpdHlTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvcHJvZ3JhbW1hYmlsaXR5LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTdWJzY3JpYmVTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvc3Vic2NyaWJlLnNlcnZpY2UnO1xyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgU3RhdHVzU2VydmljZSB7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBwcm9ncmFtbWFiaWxpdHk6IFByb2dyYW1tYWJpbGl0eVNlcnZpY2VcclxuICAgICwgcHJpdmF0ZSBmb3JtU2VydmljZTogRm9ybVNlcnZpY2VcclxuICAgICwgcHJpdmF0ZSBzdWJzY3JpYmVTZXJ2aWNlOiBTdWJzY3JpYmVTZXJ2aWNlXHJcbiAgICAsIHByaXZhdGUgZGVzdHJveVJlZjogRGVzdHJveVJlZikge1xyXG4gIH1cclxuXHJcbiAgY3JlYXRlQ29sbGVjdGlvbigpOiBTdGF0dXNDb2xsZWN0aW9uIHtcclxuICAgIHJldHVybiBuZXcgU2V0PEFic3RyYWN0Q29udHJvbD4oKTtcclxuICB9XHJcblxyXG4gIGFkZFRvQ29sbGVjdGlvbihjb2xsZWN0aW9uOiBTdGF0dXNDb2xsZWN0aW9uLCBjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpIHtcclxuICAgIGNvbGxlY3Rpb24uYWRkKGNvbnRyb2wpO1xyXG4gIH1cclxuXHJcbiAgc2V0dXBDb2xsZWN0aW9uKGtleTogYW55LCBjb2xsZWN0aW9uOiBTdGF0dXNDb2xsZWN0aW9uKSB7XHJcblxyXG4gICAgY29uc3QgY291bnRJbnZhbGlkID0gKCkgPT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5mb3JtU2VydmljZS5jb3VudEludmFsaWQoY29sbGVjdGlvbik7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5pbnZhbGlkTWFwLnNldChrZXksIGNvdW50SW52YWxpZCgpKTtcclxuXHJcbiAgICBjb2xsZWN0aW9uLmZvckVhY2goKGNvbnRyb2wpID0+IHtcclxuXHJcbiAgICAgIHRoaXMuc3Vic2NyaWJlU2VydmljZS5zdWJzY3JpYmVDaGFuZ2VzKGNvbnRyb2wuc3RhdHVzQ2hhbmdlc1xyXG4gICAgICAgICwgY29udHJvbFxyXG4gICAgICAgICwgY29udHJvbC5zdGF0dXNcclxuICAgICAgICAsIHRoaXMuZGVzdHJveVJlZlxyXG4gICAgICAgICwgKCkgPT4gdGhpcy5pbnZhbGlkTWFwLnNldChrZXksIGNvdW50SW52YWxpZCgpKSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGNvdW50SW52YWxpZChrZXk6IGFueSkgOiBudW1iZXJcclxuICB7XHJcbiAgICByZXR1cm4gdGhpcy5pbnZhbGlkTWFwLmdldChrZXkpID8/IDA7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGludmFsaWRNYXA6IE1hcDxhbnksIG51bWJlcj4gPSBuZXcgTWFwPGFueSwgbnVtYmVyPigpO1xyXG59XHJcblxyXG5leHBvcnQgdHlwZSBTdGF0dXNDb2xsZWN0aW9uID0gU2V0PEFic3RyYWN0Q29udHJvbD47XHJcbiJdfQ==
58
+ }], ctorParameters: () => [{ type: i1.FormService }, { type: i2.SubscribeService }, { type: i0.DestroyRef }] });
59
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdHVzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc2lyaW8vc3JjL2xpYi9zZXJ2aWNlcy9zdGF0dXMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWMsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7O0FBTXZELE1BQU0sT0FBTyxhQUFhO0lBR2Q7SUFDRTtJQUNBO0lBSFosWUFDVSxXQUF3QixFQUN0QixnQkFBa0MsRUFDbEMsVUFBc0I7UUFGeEIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDdEIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyxlQUFVLEdBQVYsVUFBVSxDQUFZO0lBQ2xDLENBQUM7SUFFRCxnQkFBZ0I7UUFDZCxPQUFPLElBQUksR0FBRyxFQUFtQixDQUFDO0lBQ3BDLENBQUM7SUFFRCxlQUFlLENBQUMsVUFBNEIsRUFBRSxPQUF3QixFQUFFLFNBQWM7UUFDcEYsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7WUFDbkUsVUFBVSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMxQixDQUFDO0lBQ0gsQ0FBQztJQUVELGVBQWUsQ0FBQyxHQUFRLEVBQUUsVUFBNEI7UUFDcEQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFO1lBQ3ZCLFVBQVU7WUFDVixLQUFLLEVBQUUsSUFBSTtZQUNYLE1BQU0sRUFBRSxDQUFDO1NBQ1YsQ0FBQyxDQUFDO1FBRUgsVUFBVSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUMzQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsZ0JBQWdCLENBQ3BDLE9BQU8sQ0FBQyxhQUFhLEVBQ3JCLE9BQU8sRUFDUCxPQUFPLENBQUMsTUFBTSxFQUNkLElBQUksQ0FBQyxVQUFVLEVBQ2YsR0FBRyxFQUFFO2dCQUNILE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUN2QyxJQUFJLEtBQUssRUFBRSxDQUFDO29CQUNWLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO2dCQUNyQixDQUFDO1lBQ0gsQ0FBQyxDQUNGLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxZQUFZLENBQUMsR0FBUTtRQUVuQixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN2QyxJQUFJLENBQUMsS0FBSztZQUNSLE9BQU8sQ0FBQyxDQUFDO1FBRVgsSUFBSSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDaEIsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDL0QsS0FBSyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDdEIsQ0FBQztRQUVELE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQztJQUN0QixDQUFDO0lBRU8sVUFBVSxHQUFHLElBQUksR0FBRyxFQUl4QixDQUFDO0lBRUcsa0JBQWtCLENBQUMsU0FBYztRQUN2QyxNQUFNLFFBQVEsR0FBRyxTQUFTLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQztRQUMvQyxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxXQUFXLENBQUMsSUFBSSxTQUFTLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDM0YsT0FBTyxRQUFRLEtBQUssSUFBSSxJQUFJLFFBQVEsQ0FBQztJQUN2QyxDQUFDO3dHQWpFVSxhQUFhOzRHQUFiLGFBQWE7OzRGQUFiLGFBQWE7a0JBRHpCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEZXN0cm95UmVmLCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1TZXJ2aWNlIH0gZnJvbSAnLi9mb3JtLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IFN1YnNjcmliZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9zdWJzY3JpYmUuc2VydmljZSc7XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBTdGF0dXNTZXJ2aWNlIHtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGZvcm1TZXJ2aWNlOiBGb3JtU2VydmljZVxyXG4gICAgLCBwcml2YXRlIHN1YnNjcmliZVNlcnZpY2U6IFN1YnNjcmliZVNlcnZpY2VcclxuICAgICwgcHJpdmF0ZSBkZXN0cm95UmVmOiBEZXN0cm95UmVmKSB7XHJcbiAgfVxyXG5cclxuICBjcmVhdGVDb2xsZWN0aW9uKCk6IFN0YXR1c0NvbGxlY3Rpb24ge1xyXG4gICAgcmV0dXJuIG5ldyBTZXQ8QWJzdHJhY3RDb250cm9sPigpO1xyXG4gIH1cclxuXHJcbiAgYWRkVG9Db2xsZWN0aW9uKGNvbGxlY3Rpb246IFN0YXR1c0NvbGxlY3Rpb24sIGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCwgY29tcG9uZW50OiBhbnkpIHtcclxuICAgIGlmICghY29sbGVjdGlvbi5oYXMoY29udHJvbCkgJiYgdGhpcy5jYW5BZGRUb0NvbGxlY3Rpb24oY29tcG9uZW50KSkge1xyXG4gICAgICBjb2xsZWN0aW9uLmFkZChjb250cm9sKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldHVwQ29sbGVjdGlvbihrZXk6IGFueSwgY29sbGVjdGlvbjogU3RhdHVzQ29sbGVjdGlvbikge1xyXG4gICAgdGhpcy5pbnZhbGlkTWFwLnNldChrZXksIHtcclxuICAgICAgY29sbGVjdGlvbixcclxuICAgICAgZGlydHk6IHRydWUsXHJcbiAgICAgIGNhY2hlZDogMFxyXG4gICAgfSk7XHJcblxyXG4gICAgY29sbGVjdGlvbi5mb3JFYWNoKGNvbnRyb2wgPT4ge1xyXG4gICAgICB0aGlzLnN1YnNjcmliZVNlcnZpY2Uuc3Vic2NyaWJlQ2hhbmdlcyhcclxuICAgICAgICBjb250cm9sLnN0YXR1c0NoYW5nZXMsXHJcbiAgICAgICAgY29udHJvbCxcclxuICAgICAgICBjb250cm9sLnN0YXR1cyxcclxuICAgICAgICB0aGlzLmRlc3Ryb3lSZWYsXHJcbiAgICAgICAgKCkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgZW50cnkgPSB0aGlzLmludmFsaWRNYXAuZ2V0KGtleSk7XHJcbiAgICAgICAgICBpZiAoZW50cnkpIHtcclxuICAgICAgICAgICAgZW50cnkuZGlydHkgPSB0cnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgY291bnRJbnZhbGlkKGtleTogYW55KSA6IG51bWJlclxyXG4gIHtcclxuICAgIGNvbnN0IGVudHJ5ID0gdGhpcy5pbnZhbGlkTWFwLmdldChrZXkpO1xyXG4gICAgaWYgKCFlbnRyeSlcclxuICAgICAgcmV0dXJuIDA7XHJcblxyXG4gICAgaWYgKGVudHJ5LmRpcnR5KSB7XHJcbiAgICAgIGVudHJ5LmNhY2hlZCA9IHRoaXMuZm9ybVNlcnZpY2UuY291bnRJbnZhbGlkKGVudHJ5LmNvbGxlY3Rpb24pO1xyXG4gICAgICBlbnRyeS5kaXJ0eSA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBlbnRyeS5jYWNoZWQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGludmFsaWRNYXAgPSBuZXcgTWFwPGFueSwge1xyXG4gICAgY29sbGVjdGlvbjogU3RhdHVzQ29sbGVjdGlvbjtcclxuICAgIGRpcnR5OiBib29sZWFuO1xyXG4gICAgY2FjaGVkOiBudW1iZXI7XHJcbiAgfT4oKTtcclxuXHJcbiAgcHJpdmF0ZSBjYW5BZGRUb0NvbGxlY3Rpb24oY29tcG9uZW50OiBhbnkpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IHJlcXVpcmVkID0gY29tcG9uZW50Py52YWxpZGF0ZT8ucmVxdWlyZWQ7XHJcbiAgICBjb25zdCBoYXNSdWxlcyA9IEFycmF5LmlzQXJyYXkoY29tcG9uZW50Py52YWxpZGF0aW9ucykgJiYgY29tcG9uZW50LnZhbGlkYXRpb25zLmxlbmd0aCA+IDA7XHJcbiAgICByZXR1cm4gcmVxdWlyZWQgPT09IHRydWUgfHwgaGFzUnVsZXM7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgdHlwZSBTdGF0dXNDb2xsZWN0aW9uID0gU2V0PEFic3RyYWN0Q29udHJvbD47XHJcbiJdfQ==
@@ -0,0 +1,52 @@
1
+ import { FormGroup } from "@angular/forms";
2
+ export class FormGroupEx extends FormGroup {
3
+ constructor(controls, mode, validatorOrOpts, asyncValidator) {
4
+ super(controls, validatorOrOpts, asyncValidator);
5
+ this.mode = mode;
6
+ }
7
+ getMode() {
8
+ return this.mode;
9
+ }
10
+ isNull() {
11
+ return this.__isNull;
12
+ }
13
+ setNull() {
14
+ this.setNullValue();
15
+ }
16
+ setNotNull() {
17
+ this.clearNullValue();
18
+ }
19
+ __isNull = false;
20
+ sub;
21
+ mode;
22
+ setNullValue() {
23
+ if (this.__isNull)
24
+ return;
25
+ this.__isNull = true;
26
+ this.reset({});
27
+ this.sub = this.valueChanges.subscribe(() => {
28
+ if (this.dirty)
29
+ this.clearNullValue();
30
+ });
31
+ this.updateValueAndValidity({ emitEvent: false });
32
+ }
33
+ clearNullValue() {
34
+ if (!this.__isNull)
35
+ return;
36
+ this.__isNull = false;
37
+ this.sub?.unsubscribe();
38
+ this.sub = undefined;
39
+ this.updateValueAndValidity({ emitEvent: false });
40
+ }
41
+ _updateValue() {
42
+ FormGroup.prototype._updateValue.call(this);
43
+ if (this.__isNull) {
44
+ this.value = null;
45
+ }
46
+ }
47
+ }
48
+ export function isNullableGroup(control) {
49
+ return control instanceof FormGroupEx
50
+ && control.getMode() === "nullable";
51
+ }
52
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRm9ybUdyb3VwRXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc2lyaW8vc3JjL2xpYi91dGlscy9Gb3JtR3JvdXBFeC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQTZELFNBQVMsRUFBZSxNQUFNLGdCQUFnQixDQUFDO0FBR25ILE1BQU0sT0FBTyxXQUVYLFNBQVEsU0FBbUI7SUFFM0IsWUFDRSxRQUFrQixFQUNsQixJQUFtQixFQUNuQixlQUE2RSxFQUM3RSxjQUE2RDtRQUU3RCxLQUFLLENBQUMsUUFBUSxFQUFFLGVBQWUsRUFBRSxjQUFjLENBQUMsQ0FBQztRQUNqRCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztJQUNuQixDQUFDO0lBRUQsT0FBTztRQUNMLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQztJQUNuQixDQUFDO0lBRUQsTUFBTTtRQUNKLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN2QixDQUFDO0lBRUQsT0FBTztRQUNMLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRUQsVUFBVTtRQUNSLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRU8sUUFBUSxHQUFHLEtBQUssQ0FBQztJQUNqQixHQUFHLENBQWdCO0lBQ25CLElBQUksQ0FBZ0I7SUFFcEIsWUFBWTtRQUNsQixJQUFJLElBQUksQ0FBQyxRQUFRO1lBQUUsT0FBTztRQUUxQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztRQUNyQixJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRWYsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDMUMsSUFBSSxJQUFJLENBQUMsS0FBSztnQkFDWixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDMUIsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsc0JBQXNCLENBQUMsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRU8sY0FBYztRQUNwQixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVE7WUFBRSxPQUFPO1FBRTNCLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1FBRXRCLElBQUksQ0FBQyxHQUFHLEVBQUUsV0FBVyxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLEdBQUcsR0FBRyxTQUFTLENBQUM7UUFFckIsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVTLFlBQVk7UUFDbkIsU0FBUyxDQUFDLFNBQWlCLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyRCxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNqQixJQUFZLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztRQUM3QixDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBSUQsTUFBTSxVQUFVLGVBQWUsQ0FDN0IsT0FBd0I7SUFFeEIsT0FBTyxPQUFPLFlBQVksV0FBVztXQUNoQyxPQUFPLENBQUMsT0FBTyxFQUFFLEtBQUssVUFBVSxDQUFDO0FBQ3hDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIEFic3RyYWN0Q29udHJvbE9wdGlvbnMsIEFzeW5jVmFsaWRhdG9yRm4sIEZvcm1Hcm91cCwgVmFsaWRhdG9yRm4gfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSBcInJ4anNcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBGb3JtR3JvdXBFeDxcclxuICBUQ29udHJvbCBleHRlbmRzIHsgW0sgaW4ga2V5b2YgVENvbnRyb2xdOiBBYnN0cmFjdENvbnRyb2w8YW55PiB9XHJcbj4gZXh0ZW5kcyBGb3JtR3JvdXA8VENvbnRyb2w+IHtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBjb250cm9sczogVENvbnRyb2wsXHJcbiAgICBtb2RlOiBGb3JtR3JvdXBNb2RlLFxyXG4gICAgdmFsaWRhdG9yT3JPcHRzPzogVmFsaWRhdG9yRm4gfCBWYWxpZGF0b3JGbltdIHwgQWJzdHJhY3RDb250cm9sT3B0aW9ucyB8IG51bGwsXHJcbiAgICBhc3luY1ZhbGlkYXRvcj86IEFzeW5jVmFsaWRhdG9yRm4gfCBBc3luY1ZhbGlkYXRvckZuW10gfCBudWxsXHJcbiAgKSB7XHJcbiAgICBzdXBlcihjb250cm9scywgdmFsaWRhdG9yT3JPcHRzLCBhc3luY1ZhbGlkYXRvcik7XHJcbiAgICB0aGlzLm1vZGUgPSBtb2RlO1xyXG4gIH1cclxuXHJcbiAgZ2V0TW9kZSgpIDogRm9ybUdyb3VwTW9kZSB7XHJcbiAgICByZXR1cm4gdGhpcy5tb2RlO1xyXG4gIH1cclxuXHJcbiAgaXNOdWxsKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX19pc051bGw7XHJcbiAgfVxyXG5cclxuICBzZXROdWxsKCk6IHZvaWQge1xyXG4gICAgdGhpcy5zZXROdWxsVmFsdWUoKTtcclxuICB9XHJcblxyXG4gIHNldE5vdE51bGwoKTogdm9pZCB7XHJcbiAgICB0aGlzLmNsZWFyTnVsbFZhbHVlKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9faXNOdWxsID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBzdWI/OiBTdWJzY3JpcHRpb247XHJcbiAgcHJpdmF0ZSBtb2RlOiBGb3JtR3JvdXBNb2RlO1xyXG5cclxuICBwcml2YXRlIHNldE51bGxWYWx1ZSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLl9faXNOdWxsKSByZXR1cm47XHJcblxyXG4gICAgdGhpcy5fX2lzTnVsbCA9IHRydWU7XHJcbiAgICB0aGlzLnJlc2V0KHt9KTtcclxuXHJcbiAgICB0aGlzLnN1YiA9IHRoaXMudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLmRpcnR5KVxyXG4gICAgICAgIHRoaXMuY2xlYXJOdWxsVmFsdWUoKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNsZWFyTnVsbFZhbHVlKCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLl9faXNOdWxsKSByZXR1cm47XHJcblxyXG4gICAgdGhpcy5fX2lzTnVsbCA9IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuc3ViPy51bnN1YnNjcmliZSgpO1xyXG4gICAgdGhpcy5zdWIgPSB1bmRlZmluZWQ7XHJcblxyXG4gICAgdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBfdXBkYXRlVmFsdWUoKTogdm9pZCB7XHJcbiAgICAoRm9ybUdyb3VwLnByb3RvdHlwZSBhcyBhbnkpLl91cGRhdGVWYWx1ZS5jYWxsKHRoaXMpO1xyXG4gICAgaWYgKHRoaXMuX19pc051bGwpIHtcclxuICAgICAgKHRoaXMgYXMgYW55KS52YWx1ZSA9IG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgdHlwZSBGb3JtR3JvdXBNb2RlID0gJ2RlZmF1bHQnIHwgJ251bGxhYmxlJztcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpc051bGxhYmxlR3JvdXAoXHJcbiAgY29udHJvbDogQWJzdHJhY3RDb250cm9sXHJcbik6IGNvbnRyb2wgaXMgRm9ybUdyb3VwRXg8YW55PiB7XHJcbiAgcmV0dXJuIGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtR3JvdXBFeFxyXG4gICAgJiYgY29udHJvbC5nZXRNb2RlKCkgPT09IFwibnVsbGFibGVcIjtcclxufVxyXG4iXX0=
@@ -17,7 +17,7 @@ export function groupByRow(forms) {
17
17
  function groupRowsRecursively(components) {
18
18
  const groupedMap = new Map();
19
19
  function processComponent(component) {
20
- const row = component.layout.row;
20
+ const row = component.layout?.row;
21
21
  if (!groupedMap.has(row)) {
22
22
  groupedMap.set(row, []);
23
23
  }
@@ -33,4 +33,4 @@ function groupRowsRecursively(components) {
33
33
  components
34
34
  }));
35
35
  }
36
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JvdXBCeVJvdy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zaXJpby9zcmMvbGliL3V0aWxzL2dyb3VwQnlSb3cudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBMENBLE1BQU0sVUFBVSxVQUFVLENBQUMsS0FBYTtJQUN0QyxPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3hCLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRTtRQUNYLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtRQUNmLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtRQUNmLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztRQUNqQixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7UUFDdkIsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO1FBQ3ZCLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtRQUN2QixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7UUFDZixpQkFBaUIsRUFBRSxJQUFJLENBQUMsaUJBQWlCO1FBQ3pDLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVTtRQUMzQixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7UUFDZixJQUFJLEVBQUUsb0JBQW9CLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQztLQUM1QyxDQUFDLENBQUMsQ0FBQztBQUNOLENBQUM7QUFFRCxTQUFTLG9CQUFvQixDQUFDLFVBQXVCO0lBQ25ELE1BQU0sVUFBVSxHQUFHLElBQUksR0FBRyxFQUEwQixDQUFDO0lBRXJELFNBQVMsZ0JBQWdCLENBQUMsU0FBb0I7UUFDNUMsTUFBTSxHQUFHLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUM7UUFFakMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN6QixVQUFVLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUMxQixDQUFDO1FBRUQsTUFBTSxFQUFFLFVBQVUsRUFBRSxHQUFHLEtBQUssRUFBRSxHQUFHLFNBQVMsQ0FBQztRQUUzQyxVQUFVLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBRSxDQUFDLElBQUksQ0FBQztZQUN4QixHQUFHLEtBQUs7WUFDUixJQUFJLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUztTQUNoRSxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsVUFBVSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7SUFFN0QsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLFVBQVUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ2xFLEdBQUc7UUFDSCxVQUFVO0tBQ1gsQ0FBQyxDQUFDLENBQUM7QUFDTixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW50ZXJmYWNlIEZvcm0ge1xyXG4gIGlkOiBzdHJpbmc7XHJcbiAgdHlwZTogc3RyaW5nO1xyXG4gIG5hbWU6IHN0cmluZztcclxuICB0aXRsZTogc3RyaW5nO1xyXG4gIHJlYWRvbmx5OiBzdHJpbmcgfCBib29sZWFuIHwgbnVsbDtcclxuICBkaXNhYmxlZDogc3RyaW5nIHwgYm9vbGVhbiB8IG51bGw7XHJcbiAgaW5hY3RpdmU6IHN0cmluZyB8IGJvb2xlYW4gfCBudWxsO1xyXG4gIHBhdGg6IHN0cmluZyB8IG51bGw7XHJcbiAgdmVydGljYWxBbGlnbm1lbnQ6IHN0cmluZyB8IG51bGw7XHJcbiAgaXNUZW1wbGF0ZTogYm9vbGVhbiB8IG51bGw7XHJcbiAgaTE4bjogYW55LFxyXG4gIGNvbXBvbmVudHM6IENvbXBvbmVudFtdO1xyXG59XHJcblxyXG5pbnRlcmZhY2UgQ29tcG9uZW50IHtcclxuICBpZDogc3RyaW5nO1xyXG4gIGxheW91dDogeyBjb2x1bW5zOiBudW1iZXIgfCBudWxsLCByb3c6IHN0cmluZyB9O1xyXG4gIGNvbXBvbmVudHM/OiBDb21wb25lbnRbXTtcclxuICBba2V5OiBzdHJpbmddOiBhbnk7XHJcbn1cclxuXHJcbmludGVyZmFjZSBSb3dDb21wb25lbnQge1xyXG4gIGlkOiBzdHJpbmc7XHJcbiAgbGF5b3V0OiB7IGNvbHVtbnM6IG51bWJlciB8IG51bGwsIHJvdzogc3RyaW5nIH07XHJcbiAgcm93cz86IFJvd0dyb3VwW107XHJcbiAgW2tleTogc3RyaW5nXTogYW55O1xyXG59XHJcblxyXG5pbnRlcmZhY2UgUm93R3JvdXAge1xyXG4gIHJvdzogc3RyaW5nO1xyXG4gIGNvbXBvbmVudHM6IFJvd0NvbXBvbmVudFtdO1xyXG59XHJcblxyXG5pbnRlcmZhY2UgR3JvdXBlZEZvcm0ge1xyXG4gIGlkOiBzdHJpbmc7XHJcbiAgdGl0bGU6IHN0cmluZztcclxuICBpc1RlbXBsYXRlOiBib29sZWFuIHwgbnVsbDtcclxuICByb3dzOiBSb3dHcm91cFtdO1xyXG4gIFtrZXk6IHN0cmluZ106IGFueTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdyb3VwQnlSb3coZm9ybXM6IEZvcm1bXSk6IEdyb3VwZWRGb3JtW10ge1xyXG4gIHJldHVybiBmb3Jtcy5tYXAoZm9ybSA9PiAoe1xyXG4gICAgaWQ6IGZvcm0uaWQsXHJcbiAgICB0eXBlOiBmb3JtLnR5cGUsXHJcbiAgICBuYW1lOiBmb3JtLm5hbWUsXHJcbiAgICB0aXRsZTogZm9ybS50aXRsZSxcclxuICAgIHJlYWRvbmx5OiBmb3JtLnJlYWRvbmx5LFxyXG4gICAgZGlzYWJsZWQ6IGZvcm0uZGlzYWJsZWQsXHJcbiAgICBpbmFjdGl2ZTogZm9ybS5pbmFjdGl2ZSxcclxuICAgIHBhdGg6IGZvcm0ucGF0aCxcclxuICAgIHZlcnRpY2FsQWxpZ25tZW50OiBmb3JtLnZlcnRpY2FsQWxpZ25tZW50LFxyXG4gICAgaXNUZW1wbGF0ZTogZm9ybS5pc1RlbXBsYXRlLFxyXG4gICAgaTE4bjogZm9ybS5pMThuLFxyXG4gICAgcm93czogZ3JvdXBSb3dzUmVjdXJzaXZlbHkoZm9ybS5jb21wb25lbnRzKVxyXG4gIH0pKTsgIFxyXG59XHJcblxyXG5mdW5jdGlvbiBncm91cFJvd3NSZWN1cnNpdmVseShjb21wb25lbnRzOiBDb21wb25lbnRbXSk6IFJvd0dyb3VwW10ge1xyXG4gIGNvbnN0IGdyb3VwZWRNYXAgPSBuZXcgTWFwPHN0cmluZywgUm93Q29tcG9uZW50W10+KCk7XHJcblxyXG4gIGZ1bmN0aW9uIHByb2Nlc3NDb21wb25lbnQoY29tcG9uZW50OiBDb21wb25lbnQpIHtcclxuICAgIGNvbnN0IHJvdyA9IGNvbXBvbmVudC5sYXlvdXQucm93O1xyXG5cclxuICAgIGlmICghZ3JvdXBlZE1hcC5oYXMocm93KSkge1xyXG4gICAgICBncm91cGVkTWFwLnNldChyb3csIFtdKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB7IGNvbXBvbmVudHMsIC4uLnByb3BzIH0gPSBjb21wb25lbnQ7XHJcblxyXG4gICAgZ3JvdXBlZE1hcC5nZXQocm93KSEucHVzaCh7XHJcbiAgICAgIC4uLnByb3BzLFxyXG4gICAgICByb3dzOiBjb21wb25lbnRzID8gZ3JvdXBSb3dzUmVjdXJzaXZlbHkoY29tcG9uZW50cykgOiB1bmRlZmluZWRcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgY29tcG9uZW50cy5mb3JFYWNoKGNvbXBvbmVudCA9PiBwcm9jZXNzQ29tcG9uZW50KGNvbXBvbmVudCkpO1xyXG5cclxuICByZXR1cm4gQXJyYXkuZnJvbShncm91cGVkTWFwLmVudHJpZXMoKSkubWFwKChbcm93LCBjb21wb25lbnRzXSkgPT4gKHtcclxuICAgIHJvdyxcclxuICAgIGNvbXBvbmVudHNcclxuICB9KSk7XHJcbn1cclxuIl19
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JvdXBCeVJvdy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zaXJpby9zcmMvbGliL3V0aWxzL2dyb3VwQnlSb3cudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBMENBLE1BQU0sVUFBVSxVQUFVLENBQUMsS0FBYTtJQUN0QyxPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3hCLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRTtRQUNYLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtRQUNmLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtRQUNmLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztRQUNqQixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7UUFDdkIsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO1FBQ3ZCLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtRQUN2QixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7UUFDZixpQkFBaUIsRUFBRSxJQUFJLENBQUMsaUJBQWlCO1FBQ3pDLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVTtRQUMzQixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7UUFDZixJQUFJLEVBQUUsb0JBQW9CLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQztLQUM1QyxDQUFDLENBQUMsQ0FBQztBQUNOLENBQUM7QUFFRCxTQUFTLG9CQUFvQixDQUFDLFVBQXVCO0lBQ25ELE1BQU0sVUFBVSxHQUFHLElBQUksR0FBRyxFQUEwQixDQUFDO0lBRXJELFNBQVMsZ0JBQWdCLENBQUMsU0FBb0I7UUFDNUMsTUFBTSxHQUFHLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUM7UUFFbEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN6QixVQUFVLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUMxQixDQUFDO1FBRUQsTUFBTSxFQUFFLFVBQVUsRUFBRSxHQUFHLEtBQUssRUFBRSxHQUFHLFNBQVMsQ0FBQztRQUUzQyxVQUFVLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBRSxDQUFDLElBQUksQ0FBQztZQUN4QixHQUFHLEtBQUs7WUFDUixJQUFJLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUztTQUNoRSxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsVUFBVSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7SUFFN0QsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLFVBQVUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ2xFLEdBQUc7UUFDSCxVQUFVO0tBQ1gsQ0FBQyxDQUFDLENBQUM7QUFDTixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW50ZXJmYWNlIEZvcm0ge1xyXG4gIGlkOiBzdHJpbmc7XHJcbiAgdHlwZTogc3RyaW5nO1xyXG4gIG5hbWU6IHN0cmluZztcclxuICB0aXRsZTogc3RyaW5nO1xyXG4gIHJlYWRvbmx5OiBzdHJpbmcgfCBib29sZWFuIHwgbnVsbDtcclxuICBkaXNhYmxlZDogc3RyaW5nIHwgYm9vbGVhbiB8IG51bGw7XHJcbiAgaW5hY3RpdmU6IHN0cmluZyB8IGJvb2xlYW4gfCBudWxsO1xyXG4gIHBhdGg6IHN0cmluZyB8IG51bGw7XHJcbiAgdmVydGljYWxBbGlnbm1lbnQ6IHN0cmluZyB8IG51bGw7XHJcbiAgaXNUZW1wbGF0ZTogYm9vbGVhbiB8IG51bGw7XHJcbiAgaTE4bjogYW55LFxyXG4gIGNvbXBvbmVudHM6IENvbXBvbmVudFtdO1xyXG59XHJcblxyXG5pbnRlcmZhY2UgQ29tcG9uZW50IHtcclxuICBpZDogc3RyaW5nO1xyXG4gIGxheW91dDogeyBjb2x1bW5zOiBudW1iZXIgfCBudWxsLCByb3c6IHN0cmluZyB9O1xyXG4gIGNvbXBvbmVudHM/OiBDb21wb25lbnRbXTtcclxuICBba2V5OiBzdHJpbmddOiBhbnk7XHJcbn1cclxuXHJcbmludGVyZmFjZSBSb3dDb21wb25lbnQge1xyXG4gIGlkOiBzdHJpbmc7XHJcbiAgbGF5b3V0OiB7IGNvbHVtbnM6IG51bWJlciB8IG51bGwsIHJvdzogc3RyaW5nIH07XHJcbiAgcm93cz86IFJvd0dyb3VwW107XHJcbiAgW2tleTogc3RyaW5nXTogYW55O1xyXG59XHJcblxyXG5pbnRlcmZhY2UgUm93R3JvdXAge1xyXG4gIHJvdzogc3RyaW5nO1xyXG4gIGNvbXBvbmVudHM6IFJvd0NvbXBvbmVudFtdO1xyXG59XHJcblxyXG5pbnRlcmZhY2UgR3JvdXBlZEZvcm0ge1xyXG4gIGlkOiBzdHJpbmc7XHJcbiAgdGl0bGU6IHN0cmluZztcclxuICBpc1RlbXBsYXRlOiBib29sZWFuIHwgbnVsbDtcclxuICByb3dzOiBSb3dHcm91cFtdO1xyXG4gIFtrZXk6IHN0cmluZ106IGFueTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdyb3VwQnlSb3coZm9ybXM6IEZvcm1bXSk6IEdyb3VwZWRGb3JtW10ge1xyXG4gIHJldHVybiBmb3Jtcy5tYXAoZm9ybSA9PiAoe1xyXG4gICAgaWQ6IGZvcm0uaWQsXHJcbiAgICB0eXBlOiBmb3JtLnR5cGUsXHJcbiAgICBuYW1lOiBmb3JtLm5hbWUsXHJcbiAgICB0aXRsZTogZm9ybS50aXRsZSxcclxuICAgIHJlYWRvbmx5OiBmb3JtLnJlYWRvbmx5LFxyXG4gICAgZGlzYWJsZWQ6IGZvcm0uZGlzYWJsZWQsXHJcbiAgICBpbmFjdGl2ZTogZm9ybS5pbmFjdGl2ZSxcclxuICAgIHBhdGg6IGZvcm0ucGF0aCxcclxuICAgIHZlcnRpY2FsQWxpZ25tZW50OiBmb3JtLnZlcnRpY2FsQWxpZ25tZW50LFxyXG4gICAgaXNUZW1wbGF0ZTogZm9ybS5pc1RlbXBsYXRlLFxyXG4gICAgaTE4bjogZm9ybS5pMThuLFxyXG4gICAgcm93czogZ3JvdXBSb3dzUmVjdXJzaXZlbHkoZm9ybS5jb21wb25lbnRzKVxyXG4gIH0pKTsgIFxyXG59XHJcblxyXG5mdW5jdGlvbiBncm91cFJvd3NSZWN1cnNpdmVseShjb21wb25lbnRzOiBDb21wb25lbnRbXSk6IFJvd0dyb3VwW10ge1xyXG4gIGNvbnN0IGdyb3VwZWRNYXAgPSBuZXcgTWFwPHN0cmluZywgUm93Q29tcG9uZW50W10+KCk7XHJcblxyXG4gIGZ1bmN0aW9uIHByb2Nlc3NDb21wb25lbnQoY29tcG9uZW50OiBDb21wb25lbnQpIHtcclxuICAgIGNvbnN0IHJvdyA9IGNvbXBvbmVudC5sYXlvdXQ/LnJvdztcclxuXHJcbiAgICBpZiAoIWdyb3VwZWRNYXAuaGFzKHJvdykpIHtcclxuICAgICAgZ3JvdXBlZE1hcC5zZXQocm93LCBbXSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgeyBjb21wb25lbnRzLCAuLi5wcm9wcyB9ID0gY29tcG9uZW50O1xyXG5cclxuICAgIGdyb3VwZWRNYXAuZ2V0KHJvdykhLnB1c2goe1xyXG4gICAgICAuLi5wcm9wcyxcclxuICAgICAgcm93czogY29tcG9uZW50cyA/IGdyb3VwUm93c1JlY3Vyc2l2ZWx5KGNvbXBvbmVudHMpIDogdW5kZWZpbmVkXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGNvbXBvbmVudHMuZm9yRWFjaChjb21wb25lbnQgPT4gcHJvY2Vzc0NvbXBvbmVudChjb21wb25lbnQpKTtcclxuXHJcbiAgcmV0dXJuIEFycmF5LmZyb20oZ3JvdXBlZE1hcC5lbnRyaWVzKCkpLm1hcCgoW3JvdywgY29tcG9uZW50c10pID0+ICh7XHJcbiAgICByb3csXHJcbiAgICBjb21wb25lbnRzXHJcbiAgfSkpO1xyXG59XHJcbiJdfQ==
@@ -1,7 +1,7 @@
1
1
  export function patchFunction(instance, methodName, wrapper) {
2
2
  const FLAG = `__patched_${String(methodName)}__`;
3
3
  const anyInstance = instance;
4
- // evita doppia patch
4
+ // avoid re-patch
5
5
  if (anyInstance[FLAG]) {
6
6
  return;
7
7
  }
@@ -14,4 +14,4 @@ export function patchFunction(instance, methodName, wrapper) {
14
14
  };
15
15
  anyInstance[FLAG] = true;
16
16
  }
17
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF0Y2guanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc2lyaW8vc3JjL2xpYi91dGlscy9wYXRjaC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLFVBQVUsYUFBYSxDQUkzQixRQUFXLEVBQ1gsVUFBYSxFQUNiLE9BSVE7SUFFUixNQUFNLElBQUksR0FBRyxhQUFhLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDO0lBQ2pELE1BQU0sV0FBVyxHQUFHLFFBQWUsQ0FBQztJQUVwQyxxQkFBcUI7SUFDckIsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUN0QixPQUFPO0lBQ1QsQ0FBQztJQUVELE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUV0QyxJQUFJLE9BQU8sUUFBUSxLQUFLLFVBQVUsRUFBRSxDQUFDO1FBQ25DLE1BQU0sSUFBSSxLQUFLLENBQ2IsYUFBYSxNQUFNLENBQUMsVUFBVSxDQUFDLHFCQUFxQixDQUNyRCxDQUFDO0lBQ0osQ0FBQztJQUVELFFBQVEsQ0FBQyxVQUFVLENBQUMsR0FBRyxVQUFtQixHQUFHLElBQVc7UUFDdEQsT0FBTyxPQUFPLENBQUMsSUFBSSxDQUNqQixJQUFJLEVBQ0osSUFBSSxFQUNKLENBQUMsR0FBRyxTQUFnQixFQUFFLEVBQUUsQ0FDckIsUUFBcUIsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUNoRCxDQUFDO0lBQ0osQ0FBUyxDQUFDO0lBRVYsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUMzQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGZ1bmN0aW9uIHBhdGNoRnVuY3Rpb248XHJcbiAgVCBleHRlbmRzIG9iamVjdCxcclxuICBLIGV4dGVuZHMga2V5b2YgVFxyXG4+KFxyXG4gIGluc3RhbmNlOiBULFxyXG4gIG1ldGhvZE5hbWU6IEssXHJcbiAgd3JhcHBlcjogKFxyXG4gICAgdGhpczogVCxcclxuICAgIGFyZ3M6IGFueVtdLFxyXG4gICAgb3JpZ2luYWw6ICguLi5hcmdzOiBhbnlbXSkgPT4gYW55XHJcbiAgKSA9PiBhbnlcclxuKTogdm9pZCB7XHJcbiAgY29uc3QgRkxBRyA9IGBfX3BhdGNoZWRfJHtTdHJpbmcobWV0aG9kTmFtZSl9X19gO1xyXG4gIGNvbnN0IGFueUluc3RhbmNlID0gaW5zdGFuY2UgYXMgYW55O1xyXG5cclxuICAvLyBldml0YSBkb3BwaWEgcGF0Y2hcclxuICBpZiAoYW55SW5zdGFuY2VbRkxBR10pIHtcclxuICAgIHJldHVybjtcclxuICB9XHJcblxyXG4gIGNvbnN0IG9yaWdpbmFsID0gaW5zdGFuY2VbbWV0aG9kTmFtZV07XHJcblxyXG4gIGlmICh0eXBlb2Ygb3JpZ2luYWwgIT09ICdmdW5jdGlvbicpIHtcclxuICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgYFByb3BlcnR5ICcke1N0cmluZyhtZXRob2ROYW1lKX0nIGlzIG5vdCBhIGZ1bmN0aW9uYFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGluc3RhbmNlW21ldGhvZE5hbWVdID0gZnVuY3Rpb24gKHRoaXM6IFQsIC4uLmFyZ3M6IGFueVtdKSB7XHJcbiAgICByZXR1cm4gd3JhcHBlci5jYWxsKFxyXG4gICAgICB0aGlzLFxyXG4gICAgICBhcmdzLFxyXG4gICAgICAoLi4uaW5uZXJBcmdzOiBhbnlbXSkgPT5cclxuICAgICAgICAob3JpZ2luYWwgYXMgRnVuY3Rpb24pLmFwcGx5KHRoaXMsIGlubmVyQXJncylcclxuICAgICk7XHJcbiAgfSBhcyBUW0tdO1xyXG5cclxuICBhbnlJbnN0YW5jZVtGTEFHXSA9IHRydWU7XHJcbn1cclxuIl19
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF0Y2guanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc2lyaW8vc3JjL2xpYi91dGlscy9wYXRjaC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLFVBQVUsYUFBYSxDQUkzQixRQUFXLEVBQ1gsVUFBYSxFQUNiLE9BSVE7SUFFUixNQUFNLElBQUksR0FBRyxhQUFhLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDO0lBQ2pELE1BQU0sV0FBVyxHQUFHLFFBQWUsQ0FBQztJQUVwQyxpQkFBaUI7SUFDakIsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUN0QixPQUFPO0lBQ1QsQ0FBQztJQUVELE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUV0QyxJQUFJLE9BQU8sUUFBUSxLQUFLLFVBQVUsRUFBRSxDQUFDO1FBQ25DLE1BQU0sSUFBSSxLQUFLLENBQ2IsYUFBYSxNQUFNLENBQUMsVUFBVSxDQUFDLHFCQUFxQixDQUNyRCxDQUFDO0lBQ0osQ0FBQztJQUVELFFBQVEsQ0FBQyxVQUFVLENBQUMsR0FBRyxVQUFtQixHQUFHLElBQVc7UUFDdEQsT0FBTyxPQUFPLENBQUMsSUFBSSxDQUNqQixJQUFJLEVBQ0osSUFBSSxFQUNKLENBQUMsR0FBRyxTQUFnQixFQUFFLEVBQUUsQ0FDckIsUUFBcUIsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUNoRCxDQUFDO0lBQ0osQ0FBUyxDQUFDO0lBRVYsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUMzQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGZ1bmN0aW9uIHBhdGNoRnVuY3Rpb248XHJcbiAgVCBleHRlbmRzIG9iamVjdCxcclxuICBLIGV4dGVuZHMga2V5b2YgVFxyXG4+KFxyXG4gIGluc3RhbmNlOiBULFxyXG4gIG1ldGhvZE5hbWU6IEssXHJcbiAgd3JhcHBlcjogKFxyXG4gICAgdGhpczogVCxcclxuICAgIGFyZ3M6IGFueVtdLFxyXG4gICAgb3JpZ2luYWw6ICguLi5hcmdzOiBhbnlbXSkgPT4gYW55XHJcbiAgKSA9PiBhbnlcclxuKTogdm9pZCB7XHJcbiAgY29uc3QgRkxBRyA9IGBfX3BhdGNoZWRfJHtTdHJpbmcobWV0aG9kTmFtZSl9X19gO1xyXG4gIGNvbnN0IGFueUluc3RhbmNlID0gaW5zdGFuY2UgYXMgYW55O1xyXG5cclxuICAvLyBhdm9pZCByZS1wYXRjaFxyXG4gIGlmIChhbnlJbnN0YW5jZVtGTEFHXSkge1xyXG4gICAgcmV0dXJuO1xyXG4gIH1cclxuXHJcbiAgY29uc3Qgb3JpZ2luYWwgPSBpbnN0YW5jZVttZXRob2ROYW1lXTtcclxuXHJcbiAgaWYgKHR5cGVvZiBvcmlnaW5hbCAhPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKFxyXG4gICAgICBgUHJvcGVydHkgJyR7U3RyaW5nKG1ldGhvZE5hbWUpfScgaXMgbm90IGEgZnVuY3Rpb25gXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgaW5zdGFuY2VbbWV0aG9kTmFtZV0gPSBmdW5jdGlvbiAodGhpczogVCwgLi4uYXJnczogYW55W10pIHtcclxuICAgIHJldHVybiB3cmFwcGVyLmNhbGwoXHJcbiAgICAgIHRoaXMsXHJcbiAgICAgIGFyZ3MsXHJcbiAgICAgICguLi5pbm5lckFyZ3M6IGFueVtdKSA9PlxyXG4gICAgICAgIChvcmlnaW5hbCBhcyBGdW5jdGlvbikuYXBwbHkodGhpcywgaW5uZXJBcmdzKVxyXG4gICAgKTtcclxuICB9IGFzIFRbS107XHJcblxyXG4gIGFueUluc3RhbmNlW0ZMQUddID0gdHJ1ZTtcclxufVxyXG4iXX0=