@agnos-ui/angular-bootstrap 0.4.3 → 0.5.0-next.0

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 (56) hide show
  1. package/README.md +2 -2
  2. package/agnos-ui-angular.module.d.ts +2 -1
  3. package/components/accordion/accordion.component.d.ts +40 -18
  4. package/components/accordion/accordion.gen.d.ts +37 -9
  5. package/components/alert/alert.component.d.ts +29 -17
  6. package/components/alert/alert.gen.d.ts +21 -2
  7. package/components/collapse/collapse.component.d.ts +79 -0
  8. package/components/collapse/collapse.gen.d.ts +146 -0
  9. package/components/collapse/index.d.ts +2 -0
  10. package/components/modal/modal.component.d.ts +13 -19
  11. package/components/modal/modal.gen.d.ts +35 -18
  12. package/components/modal/modal.service.d.ts +5 -1
  13. package/components/pagination/pagination.component.d.ts +20 -15
  14. package/components/pagination/pagination.gen.d.ts +49 -29
  15. package/components/progressbar/progressbar.component.d.ts +32 -16
  16. package/components/progressbar/progressbar.gen.d.ts +21 -4
  17. package/components/rating/rating.component.d.ts +11 -4
  18. package/components/rating/rating.gen.d.ts +25 -17
  19. package/components/select/select.component.d.ts +24 -4
  20. package/components/select/select.gen.d.ts +41 -25
  21. package/components/slider/slider.component.d.ts +32 -23
  22. package/components/slider/slider.gen.d.ts +54 -33
  23. package/components/toast/toast.component.d.ts +29 -17
  24. package/components/toast/toast.gen.d.ts +22 -2
  25. package/config.d.ts +16 -5
  26. package/config.gen.d.ts +5 -0
  27. package/esm2022/agnos-ui-angular.module.mjs +12 -5
  28. package/esm2022/components/accordion/accordion.component.mjs +165 -134
  29. package/esm2022/components/accordion/accordion.gen.mjs +1 -1
  30. package/esm2022/components/alert/alert.component.mjs +90 -65
  31. package/esm2022/components/alert/alert.gen.mjs +1 -1
  32. package/esm2022/components/collapse/collapse.component.mjs +89 -0
  33. package/esm2022/components/collapse/collapse.gen.mjs +15 -0
  34. package/esm2022/components/collapse/index.mjs +3 -0
  35. package/esm2022/components/modal/modal.component.mjs +111 -99
  36. package/esm2022/components/modal/modal.gen.mjs +1 -1
  37. package/esm2022/components/modal/modal.service.mjs +7 -5
  38. package/esm2022/components/pagination/pagination.component.mjs +138 -123
  39. package/esm2022/components/pagination/pagination.gen.mjs +1 -1
  40. package/esm2022/components/progressbar/progressbar.component.mjs +94 -55
  41. package/esm2022/components/progressbar/progressbar.gen.mjs +1 -1
  42. package/esm2022/components/rating/rating.component.mjs +41 -35
  43. package/esm2022/components/rating/rating.gen.mjs +1 -1
  44. package/esm2022/components/select/select.component.mjs +103 -118
  45. package/esm2022/components/select/select.gen.mjs +1 -1
  46. package/esm2022/components/slider/slider.component.mjs +126 -111
  47. package/esm2022/components/slider/slider.gen.mjs +1 -1
  48. package/esm2022/components/toast/toast.component.mjs +106 -81
  49. package/esm2022/components/toast/toast.gen.mjs +1 -1
  50. package/esm2022/config.gen.mjs +1 -1
  51. package/esm2022/config.mjs +17 -1
  52. package/esm2022/index.mjs +2 -1
  53. package/fesm2022/agnos-ui-angular-bootstrap.mjs +1085 -806
  54. package/fesm2022/agnos-ui-angular-bootstrap.mjs.map +1 -1
  55. package/index.d.ts +8 -7
  56. package/package.json +9 -8
@@ -1,8 +1,6 @@
1
1
  import { BaseWidgetDirective, ComponentTemplate, SlotDirective, UseDirective, auBooleanAttribute, auNumberAttribute, useDirectiveForHost, } from '@agnos-ui/angular-headless';
2
- import { writable } from '@amadeus-it-group/tansu';
3
- import { ChangeDetectionStrategy, Component, ContentChild, Directive, EventEmitter, Input, NgZone, Output, TemplateRef, ViewChild, ViewEncapsulation, forwardRef, inject, } from '@angular/core';
2
+ import { ChangeDetectionStrategy, Component, ContentChild, Directive, EventEmitter, Input, Output, TemplateRef, ViewChild, ViewEncapsulation, forwardRef, inject, } from '@angular/core';
4
3
  import { NG_VALUE_ACCESSOR } from '@angular/forms';
5
- import { take } from 'rxjs';
6
4
  import { callWidgetFactory } from '../../config';
7
5
  import { createSlider } from './slider.gen';
8
6
  import * as i0 from "@angular/core";
@@ -14,22 +12,22 @@ function SliderDefaultHandleSlotComponent_ng_template_0_Template(rf, ctx) { if (
14
12
  i0.ɵɵtext(1, "\u00A0");
15
13
  i0.ɵɵelementEnd();
16
14
  } if (rf & 2) {
17
- const widget_r1 = ctx.widget;
15
+ const directives_r1 = ctx.directives;
18
16
  const item_r2 = ctx.item;
19
- i0.ɵɵproperty("auUse", i0.ɵɵpureFunction2(3, _c2, widget_r1.directives.handleDirective, i0.ɵɵpureFunction1(1, _c1, item_r2)));
17
+ i0.ɵɵproperty("auUse", i0.ɵɵpureFunction2(3, _c2, directives_r1.handleDirective, i0.ɵɵpureFunction1(1, _c1, item_r2)));
20
18
  } }
21
19
  const _c3 = ["structure"];
22
20
  const _forTrack0 = ($index, $item) => $item.id;
23
21
  const _c4 = a0 => ({ option: a0 });
24
- const _c5 = (a0, a1, a2) => ({ state: a0, widget: a1, value: a2 });
25
- const _c6 = (a0, a1, a2) => ({ state: a0, widget: a1, item: a2 });
22
+ const _c5 = (a0, a1, a2, a3) => ({ state: a0, api: a1, directives: a2, value: a3 });
23
+ const _c6 = (a0, a1, a2, a3) => ({ state: a0, api: a1, directives: a2, item: a3 });
26
24
  const _c7 = a0 => ({ index: a0 });
27
25
  function SliderDefaultStructureSlotComponent_ng_template_0_For_1_Template(rf, ctx) { if (rf & 1) {
28
26
  i0.ɵɵelement(0, "div", 2);
29
27
  } if (rf & 2) {
30
28
  const option_r1 = ctx.$implicit;
31
- const widget_r2 = i0.ɵɵnextContext().widget;
32
- i0.ɵɵproperty("auUse", i0.ɵɵpureFunction2(3, _c2, widget_r2.directives.progressDisplayDirective, i0.ɵɵpureFunction1(1, _c4, option_r1)));
29
+ const directives_r2 = i0.ɵɵnextContext().directives;
30
+ i0.ɵɵproperty("auUse", i0.ɵɵpureFunction2(3, _c2, directives_r2.progressDisplayDirective, i0.ɵɵpureFunction1(1, _c4, option_r1)));
33
31
  } }
34
32
  function SliderDefaultStructureSlotComponent_ng_template_0_Conditional_3_ng_template_1_Template(rf, ctx) { }
35
33
  function SliderDefaultStructureSlotComponent_ng_template_0_Conditional_3_ng_template_3_Template(rf, ctx) { }
@@ -43,14 +41,15 @@ function SliderDefaultStructureSlotComponent_ng_template_0_Conditional_3_Templat
43
41
  } if (rf & 2) {
44
42
  const ctx_r2 = i0.ɵɵnextContext();
45
43
  const state_r4 = ctx_r2.state;
46
- const widget_r2 = ctx_r2.widget;
47
- i0.ɵɵproperty("auUse", widget_r2.directives.minLabelDirective);
44
+ const directives_r2 = ctx_r2.directives;
45
+ const api_r5 = ctx_r2.api;
46
+ i0.ɵɵproperty("auUse", directives_r2.minLabelDirective);
48
47
  i0.ɵɵadvance();
49
- i0.ɵɵproperty("auSlot", state_r4.label)("auSlotProps", i0.ɵɵpureFunction3(6, _c5, state_r4, widget_r2, state_r4.min));
48
+ i0.ɵɵproperty("auSlot", state_r4.label())("auSlotProps", i0.ɵɵpureFunction4(6, _c5, state_r4, api_r5, directives_r2, state_r4.min()));
50
49
  i0.ɵɵadvance();
51
- i0.ɵɵproperty("auUse", widget_r2.directives.maxLabelDirective);
50
+ i0.ɵɵproperty("auUse", directives_r2.maxLabelDirective);
52
51
  i0.ɵɵadvance();
53
- i0.ɵɵproperty("auSlot", state_r4.label)("auSlotProps", i0.ɵɵpureFunction3(10, _c5, state_r4, widget_r2, state_r4.max));
52
+ i0.ɵɵproperty("auSlot", state_r4.label())("auSlotProps", i0.ɵɵpureFunction4(11, _c5, state_r4, api_r5, directives_r2, state_r4.max()));
54
53
  } }
55
54
  function SliderDefaultStructureSlotComponent_ng_template_0_Conditional_4_Conditional_1_ng_template_0_Template(rf, ctx) { }
56
55
  function SliderDefaultStructureSlotComponent_ng_template_0_Conditional_4_Conditional_1_ng_template_2_Template(rf, ctx) { }
@@ -61,10 +60,11 @@ function SliderDefaultStructureSlotComponent_ng_template_0_Conditional_4_Conditi
61
60
  } if (rf & 2) {
62
61
  const ctx_r2 = i0.ɵɵnextContext(2);
63
62
  const state_r4 = ctx_r2.state;
64
- const widget_r2 = ctx_r2.widget;
65
- i0.ɵɵproperty("auSlot", state_r4.label)("auSlotProps", i0.ɵɵpureFunction3(4, _c5, state_r4, widget_r2, state_r4.sortedValues[1]));
63
+ const directives_r2 = ctx_r2.directives;
64
+ const api_r5 = ctx_r2.api;
65
+ i0.ɵɵproperty("auSlot", state_r4.label())("auSlotProps", i0.ɵɵpureFunction4(4, _c5, state_r4, api_r5, directives_r2, state_r4.sortedValues()[1]));
66
66
  i0.ɵɵadvance(2);
67
- i0.ɵɵproperty("auSlot", state_r4.label)("auSlotProps", i0.ɵɵpureFunction3(8, _c5, state_r4, widget_r2, state_r4.sortedValues[0]));
67
+ i0.ɵɵproperty("auSlot", state_r4.label())("auSlotProps", i0.ɵɵpureFunction4(9, _c5, state_r4, api_r5, directives_r2, state_r4.sortedValues()[0]));
68
68
  } }
69
69
  function SliderDefaultStructureSlotComponent_ng_template_0_Conditional_4_Conditional_2_ng_template_0_Template(rf, ctx) { }
70
70
  function SliderDefaultStructureSlotComponent_ng_template_0_Conditional_4_Conditional_2_ng_template_2_Template(rf, ctx) { }
@@ -75,22 +75,23 @@ function SliderDefaultStructureSlotComponent_ng_template_0_Conditional_4_Conditi
75
75
  } if (rf & 2) {
76
76
  const ctx_r2 = i0.ɵɵnextContext(2);
77
77
  const state_r4 = ctx_r2.state;
78
- const widget_r2 = ctx_r2.widget;
79
- i0.ɵɵproperty("auSlot", state_r4.label)("auSlotProps", i0.ɵɵpureFunction3(4, _c5, state_r4, widget_r2, state_r4.sortedValues[0]));
78
+ const directives_r2 = ctx_r2.directives;
79
+ const api_r5 = ctx_r2.api;
80
+ i0.ɵɵproperty("auSlot", state_r4.label())("auSlotProps", i0.ɵɵpureFunction4(4, _c5, state_r4, api_r5, directives_r2, state_r4.sortedValues()[0]));
80
81
  i0.ɵɵadvance(2);
81
- i0.ɵɵproperty("auSlot", state_r4.label)("auSlotProps", i0.ɵɵpureFunction3(8, _c5, state_r4, widget_r2, state_r4.sortedValues[1]));
82
+ i0.ɵɵproperty("auSlot", state_r4.label())("auSlotProps", i0.ɵɵpureFunction4(9, _c5, state_r4, api_r5, directives_r2, state_r4.sortedValues()[1]));
82
83
  } }
83
84
  function SliderDefaultStructureSlotComponent_ng_template_0_Conditional_4_Template(rf, ctx) { if (rf & 1) {
84
85
  i0.ɵɵelementStart(0, "div", 2);
85
- i0.ɵɵtemplate(1, SliderDefaultStructureSlotComponent_ng_template_0_Conditional_4_Conditional_1_Template, 3, 12)(2, SliderDefaultStructureSlotComponent_ng_template_0_Conditional_4_Conditional_2_Template, 3, 12);
86
+ i0.ɵɵtemplate(1, SliderDefaultStructureSlotComponent_ng_template_0_Conditional_4_Conditional_1_Template, 3, 14)(2, SliderDefaultStructureSlotComponent_ng_template_0_Conditional_4_Conditional_2_Template, 3, 14);
86
87
  i0.ɵɵelementEnd();
87
88
  } if (rf & 2) {
88
89
  const ctx_r2 = i0.ɵɵnextContext();
89
90
  const state_r4 = ctx_r2.state;
90
- const widget_r2 = ctx_r2.widget;
91
- i0.ɵɵproperty("auUse", widget_r2.directives.combinedHandleLabelDisplayDirective);
91
+ const directives_r2 = ctx_r2.directives;
92
+ i0.ɵɵproperty("auUse", directives_r2.combinedHandleLabelDisplayDirective);
92
93
  i0.ɵɵadvance();
93
- i0.ɵɵconditional(state_r4.rtl ? 1 : 2);
94
+ i0.ɵɵconditional(state_r4.rtl() ? 1 : 2);
94
95
  } }
95
96
  function SliderDefaultStructureSlotComponent_ng_template_0_For_6_ng_template_0_Template(rf, ctx) { }
96
97
  function SliderDefaultStructureSlotComponent_ng_template_0_For_6_Conditional_1_ng_template_1_Template(rf, ctx) { }
@@ -99,46 +100,53 @@ function SliderDefaultStructureSlotComponent_ng_template_0_For_6_Conditional_1_T
99
100
  i0.ɵɵtemplate(1, SliderDefaultStructureSlotComponent_ng_template_0_For_6_Conditional_1_ng_template_1_Template, 0, 0, "ng-template", 3);
100
101
  i0.ɵɵelementEnd();
101
102
  } if (rf & 2) {
102
- const ɵ$index_32_r5 = i0.ɵɵnextContext().$index;
103
+ const ɵ$index_32_r6 = i0.ɵɵnextContext().$index;
103
104
  const ctx_r2 = i0.ɵɵnextContext();
104
105
  const state_r4 = ctx_r2.state;
105
- const widget_r2 = ctx_r2.widget;
106
- i0.ɵɵproperty("auUse", i0.ɵɵpureFunction2(5, _c2, widget_r2.directives.handleLabelDisplayDirective, i0.ɵɵpureFunction1(3, _c7, ɵ$index_32_r5)));
106
+ const directives_r2 = ctx_r2.directives;
107
+ const api_r5 = ctx_r2.api;
108
+ i0.ɵɵproperty("auUse", i0.ɵɵpureFunction2(5, _c2, directives_r2.handleLabelDisplayDirective, i0.ɵɵpureFunction1(3, _c7, ɵ$index_32_r6)));
107
109
  i0.ɵɵadvance();
108
- i0.ɵɵproperty("auSlot", state_r4.label)("auSlotProps", i0.ɵɵpureFunction3(8, _c5, state_r4, widget_r2, state_r4.values[ɵ$index_32_r5]));
110
+ i0.ɵɵproperty("auSlot", state_r4.label())("auSlotProps", i0.ɵɵpureFunction4(8, _c5, state_r4, api_r5, directives_r2, state_r4.values()[ɵ$index_32_r6]));
109
111
  } }
110
112
  function SliderDefaultStructureSlotComponent_ng_template_0_For_6_Template(rf, ctx) { if (rf & 1) {
111
- i0.ɵɵtemplate(0, SliderDefaultStructureSlotComponent_ng_template_0_For_6_ng_template_0_Template, 0, 0, "ng-template", 3)(1, SliderDefaultStructureSlotComponent_ng_template_0_For_6_Conditional_1_Template, 2, 12, "div", 2);
113
+ i0.ɵɵtemplate(0, SliderDefaultStructureSlotComponent_ng_template_0_For_6_ng_template_0_Template, 0, 0, "ng-template", 3)(1, SliderDefaultStructureSlotComponent_ng_template_0_For_6_Conditional_1_Template, 2, 13, "div", 2);
112
114
  } if (rf & 2) {
113
- const item_r6 = ctx.$implicit;
115
+ const item_r7 = ctx.$implicit;
114
116
  const ctx_r2 = i0.ɵɵnextContext();
115
117
  const state_r4 = ctx_r2.state;
116
- const widget_r2 = ctx_r2.widget;
117
- i0.ɵɵproperty("auSlot", state_r4.handle)("auSlotProps", i0.ɵɵpureFunction3(3, _c6, state_r4, widget_r2, item_r6));
118
+ const directives_r2 = ctx_r2.directives;
119
+ const api_r5 = ctx_r2.api;
120
+ i0.ɵɵproperty("auSlot", state_r4.handle())("auSlotProps", i0.ɵɵpureFunction4(3, _c6, state_r4, api_r5, directives_r2, item_r7));
118
121
  i0.ɵɵadvance();
119
- i0.ɵɵconditional(state_r4.showValueLabels && !state_r4.combinedLabelDisplay ? 1 : -1);
122
+ i0.ɵɵconditional(state_r4.showValueLabels() && !state_r4.combinedLabelDisplay() ? 1 : -1);
120
123
  } }
121
124
  function SliderDefaultStructureSlotComponent_ng_template_0_Template(rf, ctx) { if (rf & 1) {
122
125
  i0.ɵɵrepeaterCreate(0, SliderDefaultStructureSlotComponent_ng_template_0_For_1_Template, 1, 6, "div", 2, i0.ɵɵrepeaterTrackByIdentity);
123
126
  i0.ɵɵelement(2, "div", 2);
124
- i0.ɵɵtemplate(3, SliderDefaultStructureSlotComponent_ng_template_0_Conditional_3_Template, 4, 14)(4, SliderDefaultStructureSlotComponent_ng_template_0_Conditional_4_Template, 3, 2, "div", 2);
125
- i0.ɵɵrepeaterCreate(5, SliderDefaultStructureSlotComponent_ng_template_0_For_6_Template, 2, 7, null, null, _forTrack0);
127
+ i0.ɵɵtemplate(3, SliderDefaultStructureSlotComponent_ng_template_0_Conditional_3_Template, 4, 16)(4, SliderDefaultStructureSlotComponent_ng_template_0_Conditional_4_Template, 3, 2, "div", 2);
128
+ i0.ɵɵrepeaterCreate(5, SliderDefaultStructureSlotComponent_ng_template_0_For_6_Template, 2, 8, null, null, _forTrack0);
126
129
  } if (rf & 2) {
127
130
  const state_r4 = ctx.state;
128
- const widget_r2 = ctx.widget;
129
- i0.ɵɵrepeater(state_r4.progressDisplayOptions);
131
+ const directives_r2 = ctx.directives;
132
+ i0.ɵɵrepeater(state_r4.progressDisplayOptions());
130
133
  i0.ɵɵadvance(2);
131
- i0.ɵɵproperty("auUse", widget_r2.directives.clickableAreaDirective);
134
+ i0.ɵɵproperty("auUse", directives_r2.clickableAreaDirective);
132
135
  i0.ɵɵadvance();
133
- i0.ɵɵconditional(state_r4.showMinMaxLabels ? 3 : -1);
136
+ i0.ɵɵconditional(state_r4.showMinMaxLabels() ? 3 : -1);
134
137
  i0.ɵɵadvance();
135
- i0.ɵɵconditional(state_r4.showValueLabels && state_r4.combinedLabelDisplay ? 4 : -1);
138
+ i0.ɵɵconditional(state_r4.showValueLabels() && state_r4.combinedLabelDisplay() ? 4 : -1);
136
139
  i0.ɵɵadvance();
137
- i0.ɵɵrepeater(state_r4.sortedHandles);
140
+ i0.ɵɵrepeater(state_r4.sortedHandles());
138
141
  } }
139
142
  const _c8 = ["auSlider", ""];
140
- const _c9 = (a0, a1) => ({ state: a0, widget: a1 });
143
+ const _c9 = (a0, a1, a2) => ({ state: a0, api: a1, directives: a2 });
141
144
  function SliderComponent_ng_template_0_Template(rf, ctx) { }
145
+ /**
146
+ * Directive to provide a template reference for slider labels.
147
+ *
148
+ * This directive uses a template reference to render the {@link SliderSlotLabelContext}.
149
+ */
142
150
  export class SliderLabelDirective {
143
151
  constructor() {
144
152
  this.templateRef = inject((TemplateRef));
@@ -146,13 +154,18 @@ export class SliderLabelDirective {
146
154
  static ngTemplateContextGuard(_dir, context) {
147
155
  return true;
148
156
  }
149
- static { this.ɵfac = function SliderLabelDirective_Factory(t) { return new (t || SliderLabelDirective)(); }; }
157
+ static { this.ɵfac = function SliderLabelDirective_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || SliderLabelDirective)(); }; }
150
158
  static { this.ɵdir = /*@__PURE__*/ i0.ɵɵdefineDirective({ type: SliderLabelDirective, selectors: [["ng-template", "auSliderLabel", ""]], standalone: true }); }
151
159
  }
152
160
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SliderLabelDirective, [{
153
161
  type: Directive,
154
162
  args: [{ selector: 'ng-template[auSliderLabel]', standalone: true }]
155
163
  }], null, null); })();
164
+ /**
165
+ * Directive representing a handle for a slider component.
166
+ *
167
+ * This directive uses a template reference to render the {@link SliderSlotLabelContext}.
168
+ */
156
169
  export class SliderHandleDirective {
157
170
  constructor() {
158
171
  this.templateRef = inject((TemplateRef));
@@ -160,24 +173,15 @@ export class SliderHandleDirective {
160
173
  static ngTemplateContextGuard(_dir, context) {
161
174
  return true;
162
175
  }
163
- static { this.ɵfac = function SliderHandleDirective_Factory(t) { return new (t || SliderHandleDirective)(); }; }
176
+ static { this.ɵfac = function SliderHandleDirective_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || SliderHandleDirective)(); }; }
164
177
  static { this.ɵdir = /*@__PURE__*/ i0.ɵɵdefineDirective({ type: SliderHandleDirective, selectors: [["ng-template", "auSliderHandle", ""]], standalone: true }); }
165
178
  }
166
179
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SliderHandleDirective, [{
167
180
  type: Directive,
168
181
  args: [{ selector: 'ng-template[auSliderHandle]', standalone: true }]
169
182
  }], null, null); })();
170
- export class SliderDefaultHandleSlotComponent {
171
- constructor() {
172
- this._zone = inject(NgZone);
173
- }
174
- onKeyDown(event, handleId, widgetOnKeyDownFn) {
175
- widgetOnKeyDownFn(event, handleId);
176
- this._zone.onStable.pipe(take(1)).subscribe(() => {
177
- event.target.focus();
178
- });
179
- }
180
- static { this.ɵfac = function SliderDefaultHandleSlotComponent_Factory(t) { return new (t || SliderDefaultHandleSlotComponent)(); }; }
183
+ class SliderDefaultHandleSlotComponent {
184
+ static { this.ɵfac = function SliderDefaultHandleSlotComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || SliderDefaultHandleSlotComponent)(); }; }
181
185
  static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: SliderDefaultHandleSlotComponent, selectors: [["ng-component"]], viewQuery: function SliderDefaultHandleSlotComponent_Query(rf, ctx) { if (rf & 1) {
182
186
  i0.ɵɵviewQuery(_c0, 7);
183
187
  } if (rf & 2) {
@@ -194,8 +198,8 @@ export class SliderDefaultHandleSlotComponent {
194
198
  changeDetection: ChangeDetectionStrategy.OnPush,
195
199
  imports: [UseDirective, SliderHandleDirective],
196
200
  template: `
197
- <ng-template auSliderHandle #handle let-state="state" let-widget="widget" let-item="item">
198
- <button [auUse]="[widget.directives.handleDirective, {item}]">&nbsp;</button>
201
+ <ng-template auSliderHandle #handle let-state="state" let-directives="directives" let-item="item">
202
+ <button [auUse]="[directives.handleDirective, {item}]">&nbsp;</button>
199
203
  </ng-template>
200
204
  `,
201
205
  }]
@@ -203,8 +207,16 @@ export class SliderDefaultHandleSlotComponent {
203
207
  type: ViewChild,
204
208
  args: ['handle', { static: true }]
205
209
  }] }); })();
206
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SliderDefaultHandleSlotComponent, { className: "SliderDefaultHandleSlotComponent", filePath: "components/slider/slider.component.ts", lineNumber: 60 }); })();
210
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SliderDefaultHandleSlotComponent, { className: "SliderDefaultHandleSlotComponent", filePath: "components/slider/slider.component.ts", lineNumber: 65 }); })();
211
+ /**
212
+ * A constant representing the default slot handle for the slider component.
213
+ */
207
214
  export const sliderDefaultSlotHandle = new ComponentTemplate(SliderDefaultHandleSlotComponent, 'handle');
215
+ /**
216
+ * Directive that provides structure for the slider component.
217
+ *
218
+ * This directive uses a `TemplateRef` to handle the context of the slider slot.
219
+ */
208
220
  export class SliderStructureDirective {
209
221
  constructor() {
210
222
  this.templateRef = inject((TemplateRef));
@@ -212,15 +224,15 @@ export class SliderStructureDirective {
212
224
  static ngTemplateContextGuard(_dir, context) {
213
225
  return true;
214
226
  }
215
- static { this.ɵfac = function SliderStructureDirective_Factory(t) { return new (t || SliderStructureDirective)(); }; }
227
+ static { this.ɵfac = function SliderStructureDirective_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || SliderStructureDirective)(); }; }
216
228
  static { this.ɵdir = /*@__PURE__*/ i0.ɵɵdefineDirective({ type: SliderStructureDirective, selectors: [["ng-template", "auSliderStructure", ""]], standalone: true }); }
217
229
  }
218
230
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SliderStructureDirective, [{
219
231
  type: Directive,
220
232
  args: [{ selector: 'ng-template[auSliderStructure]', standalone: true }]
221
233
  }], null, null); })();
222
- export class SliderDefaultStructureSlotComponent {
223
- static { this.ɵfac = function SliderDefaultStructureSlotComponent_Factory(t) { return new (t || SliderDefaultStructureSlotComponent)(); }; }
234
+ class SliderDefaultStructureSlotComponent {
235
+ static { this.ɵfac = function SliderDefaultStructureSlotComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || SliderDefaultStructureSlotComponent)(); }; }
224
236
  static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: SliderDefaultStructureSlotComponent, selectors: [["ng-component"]], viewQuery: function SliderDefaultStructureSlotComponent_Query(rf, ctx) { if (rf & 1) {
225
237
  i0.ɵɵviewQuery(_c3, 7);
226
238
  } if (rf & 2) {
@@ -237,35 +249,35 @@ export class SliderDefaultStructureSlotComponent {
237
249
  changeDetection: ChangeDetectionStrategy.OnPush,
238
250
  imports: [SlotDirective, SliderStructureDirective, UseDirective],
239
251
  template: `
240
- <ng-template auSliderStructure #structure let-state="state" let-widget="widget">
241
- @for (option of state.progressDisplayOptions; track option) {
242
- <div [auUse]="[widget.directives.progressDisplayDirective, {option}]"></div>
252
+ <ng-template auSliderStructure #structure let-state="state" let-directives="directives" let-api="api">
253
+ @for (option of state.progressDisplayOptions(); track option) {
254
+ <div [auUse]="[directives.progressDisplayDirective, {option}]"></div>
243
255
  }
244
- <div [auUse]="widget.directives.clickableAreaDirective"></div>
245
- @if (state.showMinMaxLabels) {
246
- <div [auUse]="widget.directives.minLabelDirective">
247
- <ng-template [auSlot]="state.label" [auSlotProps]="{state, widget, value: state.min}"></ng-template>
256
+ <div [auUse]="directives.clickableAreaDirective"></div>
257
+ @if (state.showMinMaxLabels()) {
258
+ <div [auUse]="directives.minLabelDirective">
259
+ <ng-template [auSlot]="state.label()" [auSlotProps]="{state, api, directives, value: state.min()}"></ng-template>
248
260
  </div>
249
- <div [auUse]="widget.directives.maxLabelDirective">
250
- <ng-template [auSlot]="state.label" [auSlotProps]="{state, widget, value: state.max}"></ng-template>
261
+ <div [auUse]="directives.maxLabelDirective">
262
+ <ng-template [auSlot]="state.label()" [auSlotProps]="{state, api, directives, value: state.max()}"></ng-template>
251
263
  </div>
252
264
  }
253
- @if (state.showValueLabels && state.combinedLabelDisplay) {
254
- <div [auUse]="widget.directives.combinedHandleLabelDisplayDirective">
255
- @if (state.rtl) {
256
- <ng-template [auSlot]="state.label" [auSlotProps]="{state, widget, value: state.sortedValues[1]}"></ng-template> -
257
- <ng-template [auSlot]="state.label" [auSlotProps]="{state, widget, value: state.sortedValues[0]}"></ng-template>
265
+ @if (state.showValueLabels() && state.combinedLabelDisplay()) {
266
+ <div [auUse]="directives.combinedHandleLabelDisplayDirective">
267
+ @if (state.rtl()) {
268
+ <ng-template [auSlot]="state.label()" [auSlotProps]="{state, api, directives, value: state.sortedValues()[1]}"></ng-template> -
269
+ <ng-template [auSlot]="state.label()" [auSlotProps]="{state, api, directives, value: state.sortedValues()[0]}"></ng-template>
258
270
  } @else {
259
- <ng-template [auSlot]="state.label" [auSlotProps]="{state, widget, value: state.sortedValues[0]}"></ng-template> -
260
- <ng-template [auSlot]="state.label" [auSlotProps]="{state, widget, value: state.sortedValues[1]}"></ng-template>
271
+ <ng-template [auSlot]="state.label()" [auSlotProps]="{state, api, directives, value: state.sortedValues()[0]}"></ng-template> -
272
+ <ng-template [auSlot]="state.label()" [auSlotProps]="{state, api, directives, value: state.sortedValues()[1]}"></ng-template>
261
273
  }
262
274
  </div>
263
275
  }
264
- @for (item of state.sortedHandles; track item.id; let i = $index) {
265
- <ng-template [auSlot]="state.handle" [auSlotProps]="{state, widget, item}"></ng-template>
266
- @if (state.showValueLabels && !state.combinedLabelDisplay) {
267
- <div [auUse]="[widget.directives.handleLabelDisplayDirective, {index: i}]">
268
- <ng-template [auSlot]="state.label" [auSlotProps]="{state, widget, value: state.values[i]}"></ng-template>
276
+ @for (item of state.sortedHandles(); track item.id; let i = $index) {
277
+ <ng-template [auSlot]="state.handle()" [auSlotProps]="{state, api, directives, item}"></ng-template>
278
+ @if (state.showValueLabels() && !state.combinedLabelDisplay()) {
279
+ <div [auUse]="[directives.handleLabelDisplayDirective, {index: i}]">
280
+ <ng-template [auSlot]="state.label()" [auSlotProps]="{state, api, directives, value: state.values()[i]}"></ng-template>
269
281
  </div>
270
282
  }
271
283
  }
@@ -276,20 +288,25 @@ export class SliderDefaultStructureSlotComponent {
276
288
  type: ViewChild,
277
289
  args: ['structure', { static: true }]
278
290
  }] }); })();
279
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SliderDefaultStructureSlotComponent, { className: "SliderDefaultStructureSlotComponent", filePath: "components/slider/slider.component.ts", lineNumber: 123 }); })();
291
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SliderDefaultStructureSlotComponent, { className: "SliderDefaultStructureSlotComponent", filePath: "components/slider/slider.component.ts", lineNumber: 127 }); })();
292
+ /**
293
+ * Represents the default slot structure for the slider component.
294
+ */
280
295
  export const sliderDefaultSlotStructure = new ComponentTemplate(SliderDefaultStructureSlotComponent, 'structure');
281
- const defaultConfig = {
282
- structure: sliderDefaultSlotStructure,
283
- handle: sliderDefaultSlotHandle,
284
- };
296
+ /**
297
+ * SliderComponent is an Angular component that extends the BaseWidgetDirective
298
+ * to provide a customizable slider widget. This component allows for various
299
+ * configurations and customizations through its inputs and outputs.
300
+ */
285
301
  export class SliderComponent extends BaseWidgetDirective {
286
302
  constructor() {
287
- super(...arguments);
288
- this.defaultSlots = writable(defaultConfig);
289
- this._widget = callWidgetFactory({
303
+ super(callWidgetFactory({
290
304
  factory: createSlider,
291
305
  widgetName: 'slider',
292
- defaultConfig: this.defaultSlots,
306
+ defaultConfig: {
307
+ structure: sliderDefaultSlotStructure,
308
+ handle: sliderDefaultSlotHandle,
309
+ },
293
310
  events: {
294
311
  onValuesChange: (event) => {
295
312
  this.onChange(event);
@@ -297,10 +314,15 @@ export class SliderComponent extends BaseWidgetDirective {
297
314
  this.valuesChange.emit(event);
298
315
  },
299
316
  },
300
- afterInit: () => {
301
- useDirectiveForHost(this._widget.directives.sliderDirective);
317
+ afterInit: (widget) => {
318
+ useDirectiveForHost(widget.directives.sliderDirective);
302
319
  },
303
- });
320
+ slotTemplates: () => ({
321
+ structure: this.slotStructureFromContent?.templateRef,
322
+ handle: this.slotHandleFromContent?.templateRef,
323
+ label: this.slotLabelFromContent?.templateRef,
324
+ }),
325
+ }));
304
326
  /**
305
327
  * An event emitted when slider values are changed
306
328
  *
@@ -326,32 +348,25 @@ export class SliderComponent extends BaseWidgetDirective {
326
348
  }
327
349
  writeValue(value) {
328
350
  if (Array.isArray(value)) {
329
- this._widget.patch({
351
+ this['_widget'].patch({
330
352
  values: value,
331
353
  });
332
354
  }
333
355
  else {
334
- this._widget.patch({
356
+ this['_widget'].patch({
335
357
  values: [value],
336
358
  });
337
359
  }
338
360
  }
339
361
  setDisabledState(isDisabled) {
340
- this._widget.patch({
362
+ this['_widget'].patch({
341
363
  disabled: isDisabled,
342
364
  });
343
365
  }
344
366
  handleBlur() {
345
367
  this.onTouched();
346
368
  }
347
- ngAfterContentChecked() {
348
- this._widget.patchSlots({
349
- structure: this.slotStructureFromContent?.templateRef,
350
- handle: this.slotHandleFromContent?.templateRef,
351
- label: this.slotLabelFromContent?.templateRef,
352
- });
353
- }
354
- static { this.ɵfac = /*@__PURE__*/ (() => { let ɵSliderComponent_BaseFactory; return function SliderComponent_Factory(t) { return (ɵSliderComponent_BaseFactory || (ɵSliderComponent_BaseFactory = i0.ɵɵgetInheritedFactory(SliderComponent)))(t || SliderComponent); }; })(); }
369
+ static { this.ɵfac = function SliderComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || SliderComponent)(); }; }
355
370
  static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: SliderComponent, selectors: [["", "auSlider", ""]], contentQueries: function SliderComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {
356
371
  i0.ɵɵcontentQuery(dirIndex, SliderLabelDirective, 5);
357
372
  i0.ɵɵcontentQuery(dirIndex, SliderStructureDirective, 5);
@@ -363,10 +378,10 @@ export class SliderComponent extends BaseWidgetDirective {
363
378
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.slotHandleFromContent = _t.first);
364
379
  } }, hostBindings: function SliderComponent_HostBindings(rf, ctx) { if (rf & 1) {
365
380
  i0.ɵɵlistener("blur", function SliderComponent_blur_HostBindingHandler() { return ctx.handleBlur(); });
366
- } }, inputs: { className: [0, "auClassName", "className"], min: [2, "auMin", "min", auNumberAttribute], max: [2, "auMax", "max", auNumberAttribute], stepSize: [2, "auStepSize", "stepSize", auNumberAttribute], values: [0, "auValues", "values"], rtl: [2, "auRtl", "rtl", auBooleanAttribute], showValueLabels: [2, "auShowValueLabels", "showValueLabels", auBooleanAttribute], showMinMaxLabels: [2, "auShowMinMaxLabels", "showMinMaxLabels", auBooleanAttribute], ariaLabelHandle: [0, "auAriaLabelHandle", "ariaLabelHandle"], ariaValueText: [0, "auAriaValueText", "ariaValueText"], readonly: [2, "auReadonly", "readonly", auBooleanAttribute], disabled: [2, "auDisabled", "disabled", auBooleanAttribute], vertical: [2, "auVertical", "vertical", auBooleanAttribute], label: [0, "auLabel", "label"], structure: [0, "auStructure", "structure"], handle: [0, "auHandle", "handle"] }, outputs: { valuesChange: "auValuesChange" }, standalone: true, features: [i0.ɵɵProvidersFeature([{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => SliderComponent), multi: true }]), i0.ɵɵInputTransformsFeature, i0.ɵɵInheritDefinitionFeature, i0.ɵɵStandaloneFeature], attrs: _c8, decls: 1, vars: 5, consts: [[3, "auSlot", "auSlotProps"]], template: function SliderComponent_Template(rf, ctx) { if (rf & 1) {
381
+ } }, inputs: { className: [0, "auClassName", "className"], min: [2, "auMin", "min", auNumberAttribute], max: [2, "auMax", "max", auNumberAttribute], stepSize: [2, "auStepSize", "stepSize", auNumberAttribute], values: [0, "auValues", "values"], rtl: [2, "auRtl", "rtl", auBooleanAttribute], showValueLabels: [2, "auShowValueLabels", "showValueLabels", auBooleanAttribute], showMinMaxLabels: [2, "auShowMinMaxLabels", "showMinMaxLabels", auBooleanAttribute], ariaLabelHandle: [0, "auAriaLabelHandle", "ariaLabelHandle"], ariaValueText: [0, "auAriaValueText", "ariaValueText"], readonly: [2, "auReadonly", "readonly", auBooleanAttribute], disabled: [2, "auDisabled", "disabled", auBooleanAttribute], vertical: [2, "auVertical", "vertical", auBooleanAttribute], label: [0, "auLabel", "label"], structure: [0, "auStructure", "structure"], handle: [0, "auHandle", "handle"] }, outputs: { valuesChange: "auValuesChange" }, standalone: true, features: [i0.ɵɵProvidersFeature([{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => SliderComponent), multi: true }]), i0.ɵɵInputTransformsFeature, i0.ɵɵInheritDefinitionFeature, i0.ɵɵStandaloneFeature], attrs: _c8, decls: 1, vars: 6, consts: [[3, "auSlot", "auSlotProps"]], template: function SliderComponent_Template(rf, ctx) { if (rf & 1) {
367
382
  i0.ɵɵtemplate(0, SliderComponent_ng_template_0_Template, 0, 0, "ng-template", 0);
368
383
  } if (rf & 2) {
369
- i0.ɵɵproperty("auSlot", ctx.state().structure)("auSlotProps", i0.ɵɵpureFunction2(2, _c9, ctx.state(), ctx.widget));
384
+ i0.ɵɵproperty("auSlot", ctx.state.structure())("auSlotProps", i0.ɵɵpureFunction3(2, _c9, ctx.state, ctx.api, ctx.directives));
370
385
  } }, dependencies: [SlotDirective], encapsulation: 2, changeDetection: 0 }); }
371
386
  }
372
387
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SliderComponent, [{
@@ -381,9 +396,9 @@ export class SliderComponent extends BaseWidgetDirective {
381
396
  host: {
382
397
  '(blur)': 'handleBlur()',
383
398
  },
384
- template: ` <ng-template [auSlot]="state().structure" [auSlotProps]="{state: state(), widget}"></ng-template> `,
399
+ template: ` <ng-template [auSlot]="state.structure()" [auSlotProps]="{state, api, directives}"></ng-template> `,
385
400
  }]
386
- }], null, { className: [{
401
+ }], () => [], { className: [{
387
402
  type: Input,
388
403
  args: ['auClassName']
389
404
  }], min: [{
@@ -444,5 +459,5 @@ export class SliderComponent extends BaseWidgetDirective {
444
459
  type: ContentChild,
445
460
  args: [SliderHandleDirective, { static: false }]
446
461
  }] }); })();
447
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SliderComponent, { className: "SliderComponent", filePath: "components/slider/slider.component.ts", lineNumber: 147 }); })();
448
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xpZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3NsaWRlci9zbGlkZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFDTixtQkFBbUIsRUFDbkIsaUJBQWlCLEVBQ2pCLGFBQWEsRUFDYixZQUFZLEVBQ1osa0JBQWtCLEVBQ2xCLGlCQUFpQixFQUNqQixtQkFBbUIsR0FDbkIsTUFBTSw0QkFBNEIsQ0FBQztBQUNwQyxPQUFPLEVBQXNCLFFBQVEsRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBRXRFLE9BQU8sRUFDTix1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFDWixTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEVBQ04sTUFBTSxFQUNOLFdBQVcsRUFDWCxTQUFTLEVBQ1QsaUJBQWlCLEVBQ2pCLFVBQVUsRUFDVixNQUFNLEdBQ04sTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDakQsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUMxQixPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFFL0MsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGNBQWMsQ0FBQzs7Ozs7O0lBd0J2QyxpQ0FBOEQ7SUFBQSxzQkFBTTtJQUFBLGlCQUFTOzs7O0lBQXJFLDZIQUFxRDs7Ozs7Ozs7O0lBa0M1RCx5QkFBNEU7Ozs7SUFBdkUsd0lBQWdFOzs7OztJQUlyRSw4QkFBbUQ7SUFDbEQsZ0lBQXNGO0lBQ3ZGLGlCQUFNO0lBQ04sOEJBQW1EO0lBQ2xELGdJQUFzRjtJQUN2RixpQkFBTTs7Ozs7SUFMRCw4REFBNkM7SUFDcEMsY0FBc0I7SUFBQyxBQUF2Qix1Q0FBc0IsOEVBQWtEO0lBRWpGLGNBQTZDO0lBQTdDLDhEQUE2QztJ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QUFwRixLQUFLO21CQUFDLEVBQUMsS0FBSyxFQUFFLG9CQUFvQixFQUFFLFNBQVMsRUFBRSxrQkFBa0IsRUFBQztZQWF2QyxlQUFlO2tCQUExQyxLQUFLO21CQUFDLG1CQUFtQjtZQWFBLGFBQWE7a0JBQXRDLEtBQUs7bUJBQUMsaUJBQWlCO1lBUXhCLFFBQVE7a0JBRFAsS0FBSzttQkFBQyxFQUFDLEtBQUssRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLGtCQUFrQixFQUFDO1lBUzNELFFBQVE7a0JBRFAsS0FBSzttQkFBQyxFQUFDLEtBQUssRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLGtCQUFrQixFQUFDO1lBUzNELFFBQVE7a0JBRFAsS0FBSzttQkFBQyxFQUFDLEtBQUssRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLGtCQUFrQixFQUFDO1lBYzNELFlBQVk7a0JBRFgsTUFBTTttQkFBQyxnQkFBZ0I7WUFXTixLQUFLO2tCQUF0QixLQUFLO21CQUFDLFNBQVM7WUFDcUMsb0JBQW9CO2tCQUF4RSxZQUFZO21CQUFDLG9CQUFvQixFQUFFLEVBQUMsTUFBTSxFQUFFLEtBQUssRUFBQztZQUs3QixTQUFTO2tCQUE5QixLQUFLO21CQUFDLGFBQWE7WUFDcUMsd0JBQXdCO2tCQUFoRixZQUFZO21CQUFDLHdCQUF3QixFQUFFLEVBQUMsTUFBTSxFQUFFLEtBQUssRUFBQztZQUtwQyxNQUFNO2tCQUF4QixLQUFLO21CQUFDLFVBQVU7WUFDcUMscUJBQXFCO2tCQUExRSxZQUFZO21CQUFDLHFCQUFxQixFQUFFLEVBQUMsTUFBTSxFQUFFLEtBQUssRUFBQzs7a0ZBcEt4QyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUge1Nsb3RDb250ZW50fSBmcm9tICdAYWdub3MtdWkvYW5ndWxhci1oZWFkbGVzcyc7XG5pbXBvcnQge1xuXHRCYXNlV2lkZ2V0RGlyZWN0aXZlLFxuXHRDb21wb25lbnRUZW1wbGF0ZSxcblx0U2xvdERpcmVjdGl2ZSxcblx0VXNlRGlyZWN0aXZlLFxuXHRhdUJvb2xlYW5BdHRyaWJ1dGUsXG5cdGF1TnVtYmVyQXR0cmlidXRlLFxuXHR1c2VEaXJlY3RpdmVGb3JIb3N0LFxufSBmcm9tICdAYWdub3MtdWkvYW5ndWxhci1oZWFkbGVzcyc7XG5pbXBvcnQge3R5cGUgV3JpdGFibGVTaWduYWwsIHdyaXRhYmxlfSBmcm9tICdAYW1hZGV1cy1pdC1ncm91cC90YW5zdSc7XG5pbXBvcnQgdHlwZSB7QWZ0ZXJDb250ZW50Q2hlY2tlZH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuXHRDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcblx0Q29tcG9uZW50LFxuXHRDb250ZW50Q2hpbGQsXG5cdERpcmVjdGl2ZSxcblx0RXZlbnRFbWl0dGVyLFxuXHRJbnB1dCxcblx0Tmdab25lLFxuXHRPdXRwdXQsXG5cdFRlbXBsYXRlUmVmLFxuXHRWaWV3Q2hpbGQsXG5cdFZpZXdFbmNhcHN1bGF0aW9uLFxuXHRmb3J3YXJkUmVmLFxuXHRpbmplY3QsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtOR19WQUxVRV9BQ0NFU1NPUn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHt0YWtlfSBmcm9tICdyeGpzJztcbmltcG9ydCB7Y2FsbFdpZGdldEZhY3Rvcnl9IGZyb20gJy4uLy4uL2NvbmZpZyc7XG5pbXBvcnQgdHlwZSB7U2xpZGVyQ29udGV4dCwgU2xpZGVyUHJvcHMsIFNsaWRlclNsb3RIYW5kbGVDb250ZXh0LCBTbGlkZXJTbG90TGFiZWxDb250ZXh0LCBTbGlkZXJXaWRnZXR9IGZyb20gJy4vc2xpZGVyLmdlbic7XG5pbXBvcnQge2NyZWF0ZVNsaWRlcn0gZnJvbSAnLi9zbGlkZXIuZ2VuJztcblxuQERpcmVjdGl2ZSh7c2VsZWN0b3I6ICduZy10ZW1wbGF0ZVthdVNsaWRlckxhYmVsXScsIHN0YW5kYWxvbmU6IHRydWV9KVxuZXhwb3J0IGNsYXNzIFNsaWRlckxhYmVsRGlyZWN0aXZlIHtcblx0cHVibGljIHRlbXBsYXRlUmVmID0gaW5qZWN0KFRlbXBsYXRlUmVmPFNsaWRlclNsb3RMYWJlbENvbnRleHQ+KTtcblx0c3RhdGljIG5nVGVtcGxhdGVDb250ZXh0R3VhcmQoX2RpcjogU2xpZGVyTGFiZWxEaXJlY3RpdmUsIGNvbnRleHQ6IHVua25vd24pOiBjb250ZXh0IGlzIFNsaWRlclNsb3RMYWJlbENvbnRleHQge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG59XG5cbkBEaXJlY3RpdmUoe3NlbGVjdG9yOiAnbmctdGVtcGxhdGVbYXVTbGlkZXJIYW5kbGVdJywgc3RhbmRhbG9uZTogdHJ1ZX0pXG5leHBvcnQgY2xhc3MgU2xpZGVySGFuZGxlRGlyZWN0aXZlIHtcblx0cHVibGljIHRlbXBsYXRlUmVmID0gaW5qZWN0KFRlbXBsYXRlUmVmPFNsaWRlclNsb3RMYWJlbENvbnRleHQ+KTtcblx0c3RhdGljIG5nVGVtcGxhdGVDb250ZXh0R3VhcmQoX2RpcjogU2xpZGVySGFuZGxlRGlyZWN0aXZlLCBjb250ZXh0OiB1bmtub3duKTogY29udGV4dCBpcyBTbGlkZXJTbG90SGFuZGxlQ29udGV4dCB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cbn1cblxuQENvbXBvbmVudCh7XG5cdHN0YW5kYWxvbmU6IHRydWUsXG5cdGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuXHRpbXBvcnRzOiBbVXNlRGlyZWN0aXZlLCBTbGlkZXJIYW5kbGVEaXJlY3RpdmVdLFxuXHR0ZW1wbGF0ZTogYFxuXHRcdDxuZy10ZW1wbGF0ZSBhdVNsaWRlckhhbmRsZSAjaGFuZGxlIGxldC1zdGF0ZT1cInN0YXRlXCIgbGV0LXdpZGdldD1cIndpZGdldFwiIGxldC1pdGVtPVwiaXRlbVwiPlxuXHRcdFx0PGJ1dHRvbiBbYXVVc2VdPVwiW3dpZGdldC5kaXJlY3RpdmVzLmhhbmRsZURpcmVjdGl2ZSwge2l0ZW19XVwiPiZuYnNwOzwvYnV0dG9uPlxuXHRcdDwvbmctdGVtcGxhdGU+XG5cdGAsXG59KVxuZXhwb3J0IGNsYXNzIFNsaWRlckRlZmF1bHRIYW5kbGVTbG90Q29tcG9uZW50IHtcblx0cHJpdmF0ZSByZWFkb25seSBfem9uZSA9IGluamVjdChOZ1pvbmUpO1xuXG5cdEBWaWV3Q2hpbGQoJ2hhbmRsZScsIHtzdGF0aWM6IHRydWV9KSByZWFkb25seSBoYW5kbGUhOiBUZW1wbGF0ZVJlZjxTbGlkZXJTbG90SGFuZGxlQ29udGV4dD47XG5cblx0b25LZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50LCBoYW5kbGVJZDogbnVtYmVyLCB3aWRnZXRPbktleURvd25GbjogKGV2ZW50OiBLZXlib2FyZEV2ZW50LCBoYW5kbGVJZDogbnVtYmVyKSA9PiB2b2lkKSB7XG5cdFx0d2lkZ2V0T25LZXlEb3duRm4oZXZlbnQsIGhhbmRsZUlkKTtcblx0XHR0aGlzLl96b25lLm9uU3RhYmxlLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKCgpID0+IHtcblx0XHRcdChldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQpLmZvY3VzKCk7XG5cdFx0fSk7XG5cdH1cbn1cblxuZXhwb3J0IGNvbnN0IHNsaWRlckRlZmF1bHRTbG90SGFuZGxlID0gbmV3IENvbXBvbmVudFRlbXBsYXRlKFNsaWRlckRlZmF1bHRIYW5kbGVTbG90Q29tcG9uZW50LCAnaGFuZGxlJyk7XG5cbkBEaXJlY3RpdmUoe3NlbGVjdG9yOiAnbmctdGVtcGxhdGVbYXVTbGlkZXJTdHJ1Y3R1cmVdJywgc3RhbmRhbG9uZTogdHJ1ZX0pXG5leHBvcnQgY2xhc3MgU2xpZGVyU3RydWN0dXJlRGlyZWN0aXZlIHtcblx0cHVibGljIHRlbXBsYXRlUmVmID0gaW5qZWN0KFRlbXBsYXRlUmVmPFNsaWRlclNsb3RIYW5kbGVDb250ZXh0Pik7XG5cdHN0YXRpYyBuZ1RlbXBsYXRlQ29udGV4dEd1YXJkKF9kaXI6IFNsaWRlclN0cnVjdHVyZURpcmVjdGl2ZSwgY29udGV4dDogdW5rbm93bik6IGNvbnRleHQgaXMgU2xpZGVyU2xvdEhhbmRsZUNvbnRleHQge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG59XG5cbkBDb21wb25lbnQoe1xuXHRzdGFuZGFsb25lOiB0cnVlLFxuXHRjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcblx0aW1wb3J0czogW1Nsb3REaXJlY3RpdmUsIFNsaWRlclN0cnVjdHVyZURpcmVjdGl2ZSwgVXNlRGlyZWN0aXZlXSxcblx0dGVtcGxhdGU6IGBcblx0XHQ8bmctdGVtcGxhdGUgYXVTbGlkZXJTdHJ1Y3R1cmUgI3N0cnVjdHVyZSBsZXQtc3RhdGU9XCJzdGF0ZVwiIGxldC13aWRnZXQ9XCJ3aWRnZXRcIj5cblx0XHRcdEBmb3IgKG9wdGlvbiBvZiBzdGF0ZS5wcm9ncmVzc0Rpc3BsYXlPcHRpb25zOyB0cmFjayBvcHRpb24pIHtcblx0XHRcdFx0PGRpdiBbYXVVc2VdPVwiW3dpZGdldC5kaXJlY3RpdmVzLnByb2dyZXNzRGlzcGxheURpcmVjdGl2ZSwge29wdGlvbn1dXCI+PC9kaXY+XG5cdFx0XHR9XG5cdFx0XHQ8ZGl2IFthdVVzZV09XCJ3aWRnZXQuZGlyZWN0aXZlcy5jbGlja2FibGVBcmVhRGlyZWN0aXZlXCI+PC9kaXY+XG5cdFx0XHRAaWYgKHN0YXRlLnNob3dNaW5NYXhMYWJlbHMpIHtcblx0XHRcdFx0PGRpdiBbYXVVc2VdPVwid2lkZ2V0LmRpcmVjdGl2ZXMubWluTGFiZWxEaXJlY3RpdmVcIj5cblx0XHRcdFx0XHQ8bmctdGVtcGxhdGUgW2F1U2xvdF09XCJzdGF0ZS5sYWJlbFwiIFthdVNsb3RQcm9wc109XCJ7c3RhdGUsIHdpZGdldCwgdmFsdWU6IHN0YXRlLm1pbn1cIj48L25nLXRlbXBsYXRlPlxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0PGRpdiBbYXVVc2VdPVwid2lkZ2V0LmRpcmVjdGl2ZXMubWF4TGFiZWxEaXJlY3RpdmVcIj5cblx0XHRcdFx0XHQ8bmctdGVtcGxhdGUgW2F1U2xvdF09XCJzdGF0ZS5sYWJlbFwiIFthdVNsb3RQcm9wc109XCJ7c3RhdGUsIHdpZGdldCwgdmFsdWU6IHN0YXRlLm1heH1cIj48L25nLXRlbXBsYXRlPlxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdH1cblx0XHRcdEBpZiAoc3RhdGUuc2hvd1ZhbHVlTGFiZWxzICYmIHN0YXRlLmNvbWJpbmVkTGFiZWxEaXNwbGF5KSB7XG5cdFx0XHRcdDxkaXYgW2F1VXNlXT1cIndpZGdldC5kaXJlY3RpdmVzLmNvbWJpbmVkSGFuZGxlTGFiZWxEaXNwbGF5RGlyZWN0aXZlXCI+XG5cdFx0XHRcdFx0QGlmIChzdGF0ZS5ydGwpIHtcblx0XHRcdFx0XHRcdDxuZy10ZW1wbGF0ZSBbYXVTbG90XT1cInN0YXRlLmxhYmVsXCIgW2F1U2xvdFByb3BzXT1cIntzdGF0ZSwgd2lkZ2V0LCB2YWx1ZTogc3RhdGUuc29ydGVkVmFsdWVzWzFdfVwiPjwvbmctdGVtcGxhdGU+IC1cblx0XHRcdFx0XHRcdDxuZy10ZW1wbGF0ZSBbYXVTbG90XT1cInN0YXRlLmxhYmVsXCIgW2F1U2xvdFByb3BzXT1cIntzdGF0ZSwgd2lkZ2V0LCB2YWx1ZTogc3RhdGUuc29ydGVkVmFsdWVzWzBdfVwiPjwvbmctdGVtcGxhdGU+XG5cdFx0XHRcdFx0fSBAZWxzZSB7XG5cdFx0XHRcdFx0XHQ8bmctdGVtcGxhdGUgW2F1U2xvdF09XCJzdGF0ZS5sYWJlbFwiIFthdVNsb3RQcm9wc109XCJ7c3RhdGUsIHdpZGdldCwgdmFsdWU6IHN0YXRlLnNvcnRlZFZhbHVlc1swXX1cIj48L25nLXRlbXBsYXRlPiAtXG5cdFx0XHRcdFx0XHQ8bmctdGVtcGxhdGUgW2F1U2xvdF09XCJzdGF0ZS5sYWJlbFwiIFthdVNsb3RQcm9wc109XCJ7c3RhdGUsIHdpZGdldCwgdmFsdWU6IHN0YXRlLnNvcnRlZFZhbHVlc1sxXX1cIj48L25nLXRlbXBsYXRlPlxuXHRcdFx0XHRcdH1cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHR9XG5cdFx0XHRAZm9yIChpdGVtIG9mIHN0YXRlLnNvcnRlZEhhbmRsZXM7IHRyYWNrIGl0ZW0uaWQ7IGxldCBpID0gJGluZGV4KSB7XG5cdFx0XHRcdDxuZy10ZW1wbGF0ZSBbYXVTbG90XT1cInN0YXRlLmhhbmRsZVwiIFthdVNsb3RQcm9wc109XCJ7c3RhdGUsIHdpZGdldCwgaXRlbX1cIj48L25nLXRlbXBsYXRlPlxuXHRcdFx0XHRAaWYgKHN0YXRlLnNob3dWYWx1ZUxhYmVscyAmJiAhc3RhdGUuY29tYmluZWRMYWJlbERpc3BsYXkpIHtcblx0XHRcdFx0XHQ8ZGl2IFthdVVzZV09XCJbd2lkZ2V0LmRpcmVjdGl2ZXMuaGFuZGxlTGFiZWxEaXNwbGF5RGlyZWN0aXZlLCB7aW5kZXg6IGl9XVwiPlxuXHRcdFx0XHRcdFx0PG5nLXRlbXBsYXRlIFthdVNsb3RdPVwic3RhdGUubGFiZWxcIiBbYXVTbG90UHJvcHNdPVwie3N0YXRlLCB3aWRnZXQsIHZhbHVlOiBzdGF0ZS52YWx1ZXNbaV19XCI+PC9uZy10ZW1wbGF0ZT5cblx0XHRcdFx0XHQ8L2Rpdj5cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdDwvbmctdGVtcGxhdGU+XG5cdGAsXG59KVxuZXhwb3J0IGNsYXNzIFNsaWRlckRlZmF1bHRTdHJ1Y3R1cmVTbG90Q29tcG9uZW50IHtcblx0QFZpZXdDaGlsZCgnc3RydWN0dXJlJywge3N0YXRpYzogdHJ1ZX0pIHN0cnVjdHVyZSE6IFRlbXBsYXRlUmVmPFNsaWRlckNvbnRleHQ+O1xufVxuXG5leHBvcnQgY29uc3Qgc2xpZGVyRGVmYXVsdFNsb3RTdHJ1Y3R1cmUgPSBuZXcgQ29tcG9uZW50VGVtcGxhdGUoU2xpZGVyRGVmYXVsdFN0cnVjdHVyZVNsb3RDb21wb25lbnQsICdzdHJ1Y3R1cmUnKTtcblxuZXhwb3J0IHR5cGUgUGFydGlhbFNsaWRlclByb3BzID0gUGFydGlhbDxTbGlkZXJQcm9wcz47XG5jb25zdCBkZWZhdWx0Q29uZmlnOiBQYXJ0aWFsU2xpZGVyUHJvcHMgPSB7XG5cdHN0cnVjdHVyZTogc2xpZGVyRGVmYXVsdFNsb3RTdHJ1Y3R1cmUsXG5cdGhhbmRsZTogc2xpZGVyRGVmYXVsdFNsb3RIYW5kbGUsXG59O1xuXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6ICdbYXVTbGlkZXJdJyxcblx0c3RhbmRhbG9uZTogdHJ1ZSxcblx0Y2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG5cdGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG5cdHByb3ZpZGVyczogW3twcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUiwgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gU2xpZGVyQ29tcG9uZW50KSwgbXVsdGk6IHRydWV9XSxcblx0aW1wb3J0czogW1Nsb3REaXJlY3RpdmVdLFxuXHRob3N0OiB7XG5cdFx0JyhibHVyKSc6ICdoYW5kbGVCbHVyKCknLFxuXHR9LFxuXHR0ZW1wbGF0ZTogYCA8bmctdGVtcGxhdGUgW2F1U2xvdF09XCJzdGF0ZSgpLnN0cnVjdHVyZVwiIFthdVNsb3RQcm9wc109XCJ7c3RhdGU6IHN0YXRlKCksIHdpZGdldH1cIj48L25nLXRlbXBsYXRlPiBgLFxufSlcbmV4cG9ydCBjbGFzcyBTbGlkZXJDb21wb25lbnQgZXh0ZW5kcyBCYXNlV2lkZ2V0RGlyZWN0aXZlPFNsaWRlcldpZGdldD4gaW1wbGVtZW50cyBBZnRlckNvbnRlbnRDaGVja2VkIHtcblx0cmVhZG9ubHkgZGVmYXVsdFNsb3RzOiBXcml0YWJsZVNpZ25hbDxQYXJ0aWFsU2xpZGVyUHJvcHM+ID0gd3JpdGFibGUoZGVmYXVsdENvbmZpZyk7XG5cblx0cmVhZG9ubHkgX3dpZGdldCA9IGNhbGxXaWRnZXRGYWN0b3J5KHtcblx0XHRmYWN0b3J5OiBjcmVhdGVTbGlkZXIsXG5cdFx0d2lkZ2V0TmFtZTogJ3NsaWRlcicsXG5cdFx0ZGVmYXVsdENvbmZpZzogdGhpcy5kZWZhdWx0U2xvdHMsXG5cdFx0ZXZlbnRzOiB7XG5cdFx0XHRvblZhbHVlc0NoYW5nZTogKGV2ZW50KSA9PiB7XG5cdFx0XHRcdHRoaXMub25DaGFuZ2UoZXZlbnQpO1xuXHRcdFx0XHR0aGlzLm9uVG91Y2hlZCgpO1xuXHRcdFx0XHR0aGlzLnZhbHVlc0NoYW5nZS5lbWl0KGV2ZW50KTtcblx0XHRcdH0sXG5cdFx0fSxcblx0XHRhZnRlckluaXQ6ICgpID0+IHtcblx0XHRcdHVzZURpcmVjdGl2ZUZvckhvc3QodGhpcy5fd2lkZ2V0LmRpcmVjdGl2ZXMuc2xpZGVyRGlyZWN0aXZlKTtcblx0XHR9LFxuXHR9KTtcblxuXHQvKipcblx0ICogQ1NTIGNsYXNzZXMgdG8gYmUgYXBwbGllZCBvbiB0aGUgd2lkZ2V0IG1haW4gY29udGFpbmVyXG5cdCAqXG5cdCAqIEBkZWZhdWx0VmFsdWUgYCcnYFxuXHQgKi9cblx0QElucHV0KCdhdUNsYXNzTmFtZScpIGNsYXNzTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG5cdC8qKlxuXHQgKiBNaW5pbXVtIHZhbHVlIHRoYXQgY2FuIGJlIGFzc2lnbmVkIHRvIHRoZSBzbGlkZXJcblx0ICpcblx0ICogQGRlZmF1bHRWYWx1ZSBgMGBcblx0ICovXG5cdEBJbnB1dCh7YWxpYXM6ICdhdU1pbicsIHRyYW5zZm9ybTogYXVOdW1iZXJBdHRyaWJ1dGV9KVxuXHRtaW46IG51bWJlciB8IHVuZGVmaW5lZDtcblxuXHQvKipcblx0ICogTWF4aW11bSB2YWx1ZSB0aGF0IGNhbiBiZSBhc3NpZ25lZCB0byB0aGUgc2xpZGVyXG5cdCAqXG5cdCAqIEBkZWZhdWx0VmFsdWUgYDEwMGBcblx0ICovXG5cdEBJbnB1dCh7YWxpYXM6ICdhdU1heCcsIHRyYW5zZm9ybTogYXVOdW1iZXJBdHRyaWJ1dGV9KVxuXHRtYXg6IG51bWJlciB8IHVuZGVmaW5lZDtcblxuXHQvKipcblx0ICogVW5pdCB2YWx1ZSBiZXR3ZWVuIHNsaWRlciBzdGVwc1xuXHQgKlxuXHQgKiBAZGVmYXVsdFZhbHVlIGAxYFxuXHQgKi9cblx0QElucHV0KHthbGlhczogJ2F1U3RlcFNpemUnLCB0cmFuc2Zvcm06IGF1TnVtYmVyQXR0cmlidXRlfSlcblx0c3RlcFNpemU6IG51bWJlciB8IHVuZGVmaW5lZDtcblxuXHQvKipcblx0ICogQ3VycmVudCBzbGlkZXIgdmFsdWVzXG5cdCAqXG5cdCAqIEBkZWZhdWx0VmFsdWUgYFswXWBcblx0ICovXG5cdEBJbnB1dCgnYXVWYWx1ZXMnKVxuXHR2YWx1ZXM6IG51bWJlcltdIHwgdW5kZWZpbmVkO1xuXG5cdC8qKlxuXHQgKiBJdCBgdHJ1ZWAgc2xpZGVyIGRpc3BsYXkgaXMgaW52ZXJzZWRcblx0ICpcblx0ICogQGRlZmF1bHRWYWx1ZSBgZmFsc2VgXG5cdCAqL1xuXHRASW5wdXQoe2FsaWFzOiAnYXVSdGwnLCB0cmFuc2Zvcm06IGF1Qm9vbGVhbkF0dHJpYnV0ZX0pXG5cdHJ0bDogYm9vbGVhbiB8IHVuZGVmaW5lZDtcblxuXHQvKipcblx0ICogSWYgYHRydWVgIHRoZSB2YWx1ZSBsYWJlbHMgYXJlIGRpc3BsYXllZCBvbiB0aGUgc2xpZGVyXG5cdCAqXG5cdCAqIEBkZWZhdWx0VmFsdWUgYHRydWVgXG5cdCAqL1xuXHRASW5wdXQoe2FsaWFzOiAnYXVTaG93VmFsdWVMYWJlbHMnLCB0cmFuc2Zvcm06IGF1Qm9vbGVhbkF0dHJpYnV0ZX0pIHNob3dWYWx1ZUxhYmVsczogYm9vbGVhbiB8IHVuZGVmaW5lZDtcblxuXHQvKipcblx0ICogSWYgYHRydWVgIHRoZSBtaW4gYW5kIG1heCBsYWJlbHMgYXJlIGRpc3BsYXllZCBvbiB0aGUgc2xpZGVyXG5cdCAqXG5cdCAqIEBkZWZhdWx0VmFsdWUgYHRydWVgXG5cdCAqL1xuXHRASW5wdXQoe2FsaWFzOiAnYXVTaG93TWluTWF4TGFiZWxzJywgdHJhbnNmb3JtOiBhdUJvb2xlYW5BdHRyaWJ1dGV9KSBzaG93TWluTWF4TGFiZWxzOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuXG5cdC8qKlxuXHQgKiBSZXR1cm4gdGhlIHZhbHVlIGZvciB0aGUgJ2FyaWEtbGFiZWwnIGF0dHJpYnV0ZSBmb3IgdGhlIGhhbmRsZVxuXHQgKiBAcGFyYW0gdmFsdWUgLSB2YWx1ZSBvZiB0aGUgaGFuZGxlXG5cdCAqIEBwYXJhbSBzb3J0ZWRJbmRleCAtIGluZGV4IG9mIHRoZSBoYW5kbGUgaW4gdGhlIHNvcnRlZCBsaXN0XG5cdCAqIEBwYXJhbSBpbmRleCAtIGluZGV4IG9mIHRoZSBoYW5kbGUgaW4gdGhlIG9yaWdpbmFsIGxpc3Rcblx0ICpcblx0ICogQGRlZmF1bHRWYWx1ZVxuXHQgKiBgYGB0c1xuXHQgKiAodmFsdWU6IG51bWJlcikgPT4gJycgKyB2YWx1ZVxuXHQgKiBgYGBcblx0ICovXG5cdEBJbnB1dCgnYXVBcmlhTGFiZWxIYW5kbGUnKSBhcmlhTGFiZWxIYW5kbGU6ICgodmFsdWU6IG51bWJlciwgc29ydGVkSW5kZXg6IG51bWJlciwgaW5kZXg6IG51bWJlcikgPT4gc3RyaW5nKSB8IHVuZGVmaW5lZDtcblxuXHQvKipcblx0ICogUmV0dXJuIHRoZSB2YWx1ZSBmb3IgdGhlICdhcmlhLXZhbHVldGV4dCcgYXR0cmlidXRlIGZvciB0aGUgaGFuZGxlXG5cdCAqIEBwYXJhbSB2YWx1ZSAtIHZhbHVlIG9mIHRoZSBoYW5kbGVcblx0ICogQHBhcmFtIHNvcnRlZEluZGV4IC0gaW5kZXggb2YgdGhlIGhhbmRsZSBpbiB0aGUgc29ydGVkIGxpc3Rcblx0ICogQHBhcmFtIGluZGV4IC0gaW5kZXggb2YgdGhlIGhhbmRsZSBpbiB0aGUgb3JpZ2luYWwgbGlzdFxuXHQgKlxuXHQgKiBAZGVmYXVsdFZhbHVlXG5cdCAqIGBgYHRzXG5cdCAqICh2YWx1ZTogbnVtYmVyKSA9PiAnJyArIHZhbHVlXG5cdCAqIGBgYFxuXHQgKi9cblx0QElucHV0KCdhdUFyaWFWYWx1ZVRleHQnKSBhcmlhVmFsdWVUZXh0OiAoKHZhbHVlOiBudW1iZXIsIHNvcnRlZEluZGV4OiBudW1iZXIsIGluZGV4OiBudW1iZXIpID0+IHN0cmluZykgfCB1bmRlZmluZWQ7XG5cblx0LyoqXG5cdCAqIElmIGB0cnVlYCBzbGlkZXIgdmFsdWUgY2Fubm90IGJlIGNoYW5nZWQgYnV0IHRoZSBzbGlkZXIgaXMgc3RpbGwgZm9jdXNhYmxlXG5cdCAqXG5cdCAqIEBkZWZhdWx0VmFsdWUgYGZhbHNlYFxuXHQgKi9cblx0QElucHV0KHthbGlhczogJ2F1UmVhZG9ubHknLCB0cmFuc2Zvcm06IGF1Qm9vbGVhbkF0dHJpYnV0ZX0pXG5cdHJlYWRvbmx5OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuXG5cdC8qKlxuXHQgKiBJZiBgdHJ1ZWAgc2xpZGVyIHZhbHVlIGNhbm5vdCBiZSBjaGFuZ2VkIGFuZCB0aGUgc2xpZGVyIGNhbm5vdCBiZSBmb2N1c2VkXG5cdCAqXG5cdCAqIEBkZWZhdWx0VmFsdWUgYGZhbHNlYFxuXHQgKi9cblx0QElucHV0KHthbGlhczogJ2F1RGlzYWJsZWQnLCB0cmFuc2Zvcm06IGF1Qm9vbGVhbkF0dHJpYnV0ZX0pXG5cdGRpc2FibGVkOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuXG5cdC8qKlxuXHQgKiBJZiBgdHJ1ZWAgaXMgdmVydGljYWxseSBwb3NpdGlvbmVkIG90aGVyd2lzZSBpdCBpcyBob3Jpem9udGFsXG5cdCAqXG5cdCAqIEBkZWZhdWx0VmFsdWUgYGZhbHNlYFxuXHQgKi9cblx0QElucHV0KHthbGlhczogJ2F1VmVydGljYWwnLCB0cmFuc2Zvcm06IGF1Qm9vbGVhbkF0dHJpYnV0ZX0pXG5cdHZlcnRpY2FsOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuXG5cdC8qKlxuXHQgKiBBbiBldmVudCBlbWl0dGVkIHdoZW4gc2xpZGVyIHZhbHVlcyBhcmUgY2hhbmdlZFxuXHQgKlxuXHQgKiBFdmVudCBwYXlsb2FkIGVxdWFscyB0byB0aGUgdXBkYXRlZCBzbGlkZXIgdmFsdWVzXG5cdCAqXG5cdCAqIEBkZWZhdWx0VmFsdWVcblx0ICogYGBgdHNcblx0ICogKCkgPT4ge31cblx0ICogYGBgXG5cdCAqL1xuXHRAT3V0cHV0KCdhdVZhbHVlc0NoYW5nZScpXG5cdHZhbHVlc0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyW10+KCk7XG5cblx0LyoqXG5cdCAqIFNsb3QgdG8gY2hhbmdlIHRoZSBkZWZhdWx0IGxhYmVscyBvZiB0aGUgc2xpZGVyXG5cdCAqXG5cdCAqIEBkZWZhdWx0VmFsdWVcblx0ICogYGBgdHNcblx0ICogKHt2YWx1ZX06IFNsaWRlclNsb3RMYWJlbENvbnRleHQpID0+ICcnICsgdmFsdWVcblx0ICogYGBgXG5cdCAqL1xuXHRASW5wdXQoJ2F1TGFiZWwnKSBsYWJlbDogU2xvdENvbnRlbnQ8U2xpZGVyU2xvdExhYmVsQ29udGV4dD47XG5cdEBDb250ZW50Q2hpbGQoU2xpZGVyTGFiZWxEaXJlY3RpdmUsIHtzdGF0aWM6IGZhbHNlfSkgc2xvdExhYmVsRnJvbUNvbnRlbnQ6IFNsaWRlckxhYmVsRGlyZWN0aXZlIHwgdW5kZWZpbmVkO1xuXG5cdC8qKlxuXHQgKiBTbG90IHRvIGNoYW5nZSB0aGUgZGVmYXVsdCBkaXNwbGF5IG9mIHRoZSBzbGlkZXJcblx0ICovXG5cdEBJbnB1dCgnYXVTdHJ1Y3R1cmUnKSBzdHJ1Y3R1cmU6IFNsb3RDb250ZW50PFNsaWRlckNvbnRleHQ+O1xuXHRAQ29udGVudENoaWxkKFNsaWRlclN0cnVjdHVyZURpcmVjdGl2ZSwge3N0YXRpYzogZmFsc2V9KSBzbG90U3RydWN0dXJlRnJvbUNvbnRlbnQ6IFNsaWRlclN0cnVjdHVyZURpcmVjdGl2ZSB8IHVuZGVmaW5lZDtcblxuXHQvKipcblx0ICogU2xvdCB0byBjaGFuZ2UgdGhlIGhhbmRsZXJzXG5cdCAqL1xuXHRASW5wdXQoJ2F1SGFuZGxlJykgaGFuZGxlOiBTbG90Q29udGVudDxTbGlkZXJTbG90SGFuZGxlQ29udGV4dD47XG5cdEBDb250ZW50Q2hpbGQoU2xpZGVySGFuZGxlRGlyZWN0aXZlLCB7c3RhdGljOiBmYWxzZX0pIHNsb3RIYW5kbGVGcm9tQ29udGVudDogU2xpZGVySGFuZGxlRGlyZWN0aXZlIHwgdW5kZWZpbmVkO1xuXG5cdC8qKlxuXHQgKiBDb250cm9sIHZhbHVlIGFjY2Vzc29yIG1ldGhvZHNcblx0ICovXG5cdG9uQ2hhbmdlID0gKF86IGFueSkgPT4ge307XG5cblx0b25Ub3VjaGVkID0gKCkgPT4ge307XG5cblx0cmVnaXN0ZXJPbkNoYW5nZShmbjogKHZhbHVlOiBhbnkpID0+IGFueSk6IHZvaWQge1xuXHRcdHRoaXMub25DaGFuZ2UgPSBmbjtcblx0fVxuXG5cdHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiAoKSA9PiBhbnkpOiB2b2lkIHtcblx0XHR0aGlzLm9uVG91Y2hlZCA9IGZuO1xuXHR9XG5cblx0d3JpdGVWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XG5cdFx0aWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG5cdFx0XHR0aGlzLl93aWRnZXQucGF0Y2goe1xuXHRcdFx0XHR2YWx1ZXM6IHZhbHVlLFxuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuX3dpZGdldC5wYXRjaCh7XG5cdFx0XHRcdHZhbHVlczogW3ZhbHVlXSxcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbikge1xuXHRcdHRoaXMuX3dpZGdldC5wYXRjaCh7XG5cdFx0XHRkaXNhYmxlZDogaXNEaXNhYmxlZCxcblx0XHR9KTtcblx0fVxuXG5cdGhhbmRsZUJsdXIoKSB7XG5cdFx0dGhpcy5vblRvdWNoZWQoKTtcblx0fVxuXG5cdG5nQWZ0ZXJDb250ZW50Q2hlY2tlZCgpOiB2b2lkIHtcblx0XHR0aGlzLl93aWRnZXQucGF0Y2hTbG90cyh7XG5cdFx0XHRzdHJ1Y3R1cmU6IHRoaXMuc2xvdFN0cnVjdHVyZUZyb21Db250ZW50Py50ZW1wbGF0ZVJlZixcblx0XHRcdGhhbmRsZTogdGhpcy5zbG90SGFuZGxlRnJvbUNvbnRlbnQ/LnRlbXBsYXRlUmVmLFxuXHRcdFx0bGFiZWw6IHRoaXMuc2xvdExhYmVsRnJvbUNvbnRlbnQ/LnRlbXBsYXRlUmVmLFxuXHRcdH0pO1xuXHR9XG59XG4iXX0=
462
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SliderComponent, { className: "SliderComponent", filePath: "components/slider/slider.component.ts", lineNumber: 153 }); })();
463
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xpZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3NsaWRlci9zbGlkZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFDTixtQkFBbUIsRUFDbkIsaUJBQWlCLEVBQ2pCLGFBQWEsRUFDYixZQUFZLEVBQ1osa0JBQWtCLEVBQ2xCLGlCQUFpQixFQUNqQixtQkFBbUIsR0FDbkIsTUFBTSw0QkFBNEIsQ0FBQztBQUNwQyxPQUFPLEVBQ04sdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxZQUFZLEVBQ1osU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxFQUNOLFdBQVcsRUFDWCxTQUFTLEVBQ1QsaUJBQWlCLEVBQ2pCLFVBQVUsRUFDVixNQUFNLEdBQ04sTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDakQsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sY0FBYyxDQUFDO0FBRS9DLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxjQUFjLENBQUM7Ozs7OztJQWlDdkMsaUNBQXVEO0lBQUEsc0JBQU07SUFBQSxpQkFBUzs7OztJQUE5RCxzSEFBOEM7Ozs7Ozs7OztJQWlDckQseUJBQXFFOzs7O0lBQWhFLGlJQUF5RDs7Ozs7SUFJOUQsOEJBQTRDO0lBQzNDLGdJQUFtRztJQUNwRyxpQkFBTTtJQUNOLDhCQUE0QztJQUMzQyxnSUFBbUc7SUFDcEcsaUJBQU07Ozs7OztJQUxELHVEQUFzQztJQUM3QixjQUF3QjtJQUFDLEFBQXpCLHlDQUF3Qiw0RkFBNkQ7SUFFOUYsY0FBc0M7SUFBdEMsdURBQXNDO0lBQzdCLGNBQXdCO0lBQUMsQUFBekIseUNBQXdCLDZGQUE2RDs7Ozs7SUFNakcsOElBQStHO0lBQWUsbUJBQzlIO0lBQUEsOElBQStHOzs7Ozs7SUFEekUsQUFBekIs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O2tCQUF0QixLQUFLO21CQUFDLFNBQVM7WUFDcUMsb0JBQW9CO2tCQUF4RSxZQUFZO21CQUFDLG9CQUFvQixFQUFFLEVBQUMsTUFBTSxFQUFFLEtBQUssRUFBQztZQUs3QixTQUFTO2tCQUE5QixLQUFLO21CQUFDLGFBQWE7WUFDcUMsd0JBQXdCO2tCQUFoRixZQUFZO21CQUFDLHdCQUF3QixFQUFFLEVBQUMsTUFBTSxFQUFFLEtBQUssRUFBQztZQUtwQyxNQUFNO2tCQUF4QixLQUFLO21CQUFDLFVBQVU7WUFDcUMscUJBQXFCO2tCQUExRSxZQUFZO21CQUFDLHFCQUFxQixFQUFFLEVBQUMsTUFBTSxFQUFFLEtBQUssRUFBQzs7a0ZBbEp4QyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUge1Nsb3RDb250ZW50fSBmcm9tICdAYWdub3MtdWkvYW5ndWxhci1oZWFkbGVzcyc7XG5pbXBvcnQge1xuXHRCYXNlV2lkZ2V0RGlyZWN0aXZlLFxuXHRDb21wb25lbnRUZW1wbGF0ZSxcblx0U2xvdERpcmVjdGl2ZSxcblx0VXNlRGlyZWN0aXZlLFxuXHRhdUJvb2xlYW5BdHRyaWJ1dGUsXG5cdGF1TnVtYmVyQXR0cmlidXRlLFxuXHR1c2VEaXJlY3RpdmVGb3JIb3N0LFxufSBmcm9tICdAYWdub3MtdWkvYW5ndWxhci1oZWFkbGVzcyc7XG5pbXBvcnQge1xuXHRDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcblx0Q29tcG9uZW50LFxuXHRDb250ZW50Q2hpbGQsXG5cdERpcmVjdGl2ZSxcblx0RXZlbnRFbWl0dGVyLFxuXHRJbnB1dCxcblx0T3V0cHV0LFxuXHRUZW1wbGF0ZVJlZixcblx0Vmlld0NoaWxkLFxuXHRWaWV3RW5jYXBzdWxhdGlvbixcblx0Zm9yd2FyZFJlZixcblx0aW5qZWN0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7TkdfVkFMVUVfQUNDRVNTT1J9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7Y2FsbFdpZGdldEZhY3Rvcnl9IGZyb20gJy4uLy4uL2NvbmZpZyc7XG5pbXBvcnQgdHlwZSB7U2xpZGVyQ29udGV4dCwgU2xpZGVyU2xvdEhhbmRsZUNvbnRleHQsIFNsaWRlclNsb3RMYWJlbENvbnRleHQsIFNsaWRlcldpZGdldH0gZnJvbSAnLi9zbGlkZXIuZ2VuJztcbmltcG9ydCB7Y3JlYXRlU2xpZGVyfSBmcm9tICcuL3NsaWRlci5nZW4nO1xuXG4vKipcbiAqIERpcmVjdGl2ZSB0byBwcm92aWRlIGEgdGVtcGxhdGUgcmVmZXJlbmNlIGZvciBzbGlkZXIgbGFiZWxzLlxuICpcbiAqIFRoaXMgZGlyZWN0aXZlIHVzZXMgYSB0ZW1wbGF0ZSByZWZlcmVuY2UgdG8gcmVuZGVyIHRoZSB7QGxpbmsgU2xpZGVyU2xvdExhYmVsQ29udGV4dH0uXG4gKi9cbkBEaXJlY3RpdmUoe3NlbGVjdG9yOiAnbmctdGVtcGxhdGVbYXVTbGlkZXJMYWJlbF0nLCBzdGFuZGFsb25lOiB0cnVlfSlcbmV4cG9ydCBjbGFzcyBTbGlkZXJMYWJlbERpcmVjdGl2ZSB7XG5cdHB1YmxpYyB0ZW1wbGF0ZVJlZiA9IGluamVjdChUZW1wbGF0ZVJlZjxTbGlkZXJTbG90TGFiZWxDb250ZXh0Pik7XG5cdHN0YXRpYyBuZ1RlbXBsYXRlQ29udGV4dEd1YXJkKF9kaXI6IFNsaWRlckxhYmVsRGlyZWN0aXZlLCBjb250ZXh0OiB1bmtub3duKTogY29udGV4dCBpcyBTbGlkZXJTbG90TGFiZWxDb250ZXh0IHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxufVxuLyoqXG4gKiBEaXJlY3RpdmUgcmVwcmVzZW50aW5nIGEgaGFuZGxlIGZvciBhIHNsaWRlciBjb21wb25lbnQuXG4gKlxuICogVGhpcyBkaXJlY3RpdmUgdXNlcyBhIHRlbXBsYXRlIHJlZmVyZW5jZSB0byByZW5kZXIgdGhlIHtAbGluayBTbGlkZXJTbG90TGFiZWxDb250ZXh0fS5cbiAqL1xuQERpcmVjdGl2ZSh7c2VsZWN0b3I6ICduZy10ZW1wbGF0ZVthdVNsaWRlckhhbmRsZV0nLCBzdGFuZGFsb25lOiB0cnVlfSlcbmV4cG9ydCBjbGFzcyBTbGlkZXJIYW5kbGVEaXJlY3RpdmUge1xuXHRwdWJsaWMgdGVtcGxhdGVSZWYgPSBpbmplY3QoVGVtcGxhdGVSZWY8U2xpZGVyU2xvdExhYmVsQ29udGV4dD4pO1xuXHRzdGF0aWMgbmdUZW1wbGF0ZUNvbnRleHRHdWFyZChfZGlyOiBTbGlkZXJIYW5kbGVEaXJlY3RpdmUsIGNvbnRleHQ6IHVua25vd24pOiBjb250ZXh0IGlzIFNsaWRlclNsb3RIYW5kbGVDb250ZXh0IHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxufVxuXG5AQ29tcG9uZW50KHtcblx0c3RhbmRhbG9uZTogdHJ1ZSxcblx0Y2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG5cdGltcG9ydHM6IFtVc2VEaXJlY3RpdmUsIFNsaWRlckhhbmRsZURpcmVjdGl2ZV0sXG5cdHRlbXBsYXRlOiBgXG5cdFx0PG5nLXRlbXBsYXRlIGF1U2xpZGVySGFuZGxlICNoYW5kbGUgbGV0LXN0YXRlPVwic3RhdGVcIiBsZXQtZGlyZWN0aXZlcz1cImRpcmVjdGl2ZXNcIiBsZXQtaXRlbT1cIml0ZW1cIj5cblx0XHRcdDxidXR0b24gW2F1VXNlXT1cIltkaXJlY3RpdmVzLmhhbmRsZURpcmVjdGl2ZSwge2l0ZW19XVwiPiZuYnNwOzwvYnV0dG9uPlxuXHRcdDwvbmctdGVtcGxhdGU+XG5cdGAsXG59KVxuY2xhc3MgU2xpZGVyRGVmYXVsdEhhbmRsZVNsb3RDb21wb25lbnQge1xuXHRAVmlld0NoaWxkKCdoYW5kbGUnLCB7c3RhdGljOiB0cnVlfSkgcmVhZG9ubHkgaGFuZGxlITogVGVtcGxhdGVSZWY8U2xpZGVyU2xvdEhhbmRsZUNvbnRleHQ+O1xufVxuXG4vKipcbiAqIEEgY29uc3RhbnQgcmVwcmVzZW50aW5nIHRoZSBkZWZhdWx0IHNsb3QgaGFuZGxlIGZvciB0aGUgc2xpZGVyIGNvbXBvbmVudC5cbiAqL1xuZXhwb3J0IGNvbnN0IHNsaWRlckRlZmF1bHRTbG90SGFuZGxlOiBTbG90Q29udGVudDxTbGlkZXJTbG90SGFuZGxlQ29udGV4dD4gPSBuZXcgQ29tcG9uZW50VGVtcGxhdGUoU2xpZGVyRGVmYXVsdEhhbmRsZVNsb3RDb21wb25lbnQsICdoYW5kbGUnKTtcblxuLyoqXG4gKiBEaXJlY3RpdmUgdGhhdCBwcm92aWRlcyBzdHJ1Y3R1cmUgZm9yIHRoZSBzbGlkZXIgY29tcG9uZW50LlxuICpcbiAqIFRoaXMgZGlyZWN0aXZlIHVzZXMgYSBgVGVtcGxhdGVSZWZgIHRvIGhhbmRsZSB0aGUgY29udGV4dCBvZiB0aGUgc2xpZGVyIHNsb3QuXG4gKi9cbkBEaXJlY3RpdmUoe3NlbGVjdG9yOiAnbmctdGVtcGxhdGVbYXVTbGlkZXJTdHJ1Y3R1cmVdJywgc3RhbmRhbG9uZTogdHJ1ZX0pXG5leHBvcnQgY2xhc3MgU2xpZGVyU3RydWN0dXJlRGlyZWN0aXZlIHtcblx0cHVibGljIHRlbXBsYXRlUmVmID0gaW5qZWN0KFRlbXBsYXRlUmVmPFNsaWRlclNsb3RIYW5kbGVDb250ZXh0Pik7XG5cdHN0YXRpYyBuZ1RlbXBsYXRlQ29udGV4dEd1YXJkKF9kaXI6IFNsaWRlclN0cnVjdHVyZURpcmVjdGl2ZSwgY29udGV4dDogdW5rbm93bik6IGNvbnRleHQgaXMgU2xpZGVyU2xvdEhhbmRsZUNvbnRleHQge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG59XG5cbkBDb21wb25lbnQoe1xuXHRzdGFuZGFsb25lOiB0cnVlLFxuXHRjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcblx0aW1wb3J0czogW1Nsb3REaXJlY3RpdmUsIFNsaWRlclN0cnVjdHVyZURpcmVjdGl2ZSwgVXNlRGlyZWN0aXZlXSxcblx0dGVtcGxhdGU6IGBcblx0XHQ8bmctdGVtcGxhdGUgYXVTbGlkZXJTdHJ1Y3R1cmUgI3N0cnVjdHVyZSBsZXQtc3RhdGU9XCJzdGF0ZVwiIGxldC1kaXJlY3RpdmVzPVwiZGlyZWN0aXZlc1wiIGxldC1hcGk9XCJhcGlcIj5cblx0XHRcdEBmb3IgKG9wdGlvbiBvZiBzdGF0ZS5wcm9ncmVzc0Rpc3BsYXlPcHRpb25zKCk7IHRyYWNrIG9wdGlvbikge1xuXHRcdFx0XHQ8ZGl2IFthdVVzZV09XCJbZGlyZWN0aXZlcy5wcm9ncmVzc0Rpc3BsYXlEaXJlY3RpdmUsIHtvcHRpb259XVwiPjwvZGl2PlxuXHRcdFx0fVxuXHRcdFx0PGRpdiBbYXVVc2VdPVwiZGlyZWN0aXZlcy5jbGlja2FibGVBcmVhRGlyZWN0aXZlXCI+PC9kaXY+XG5cdFx0XHRAaWYgKHN0YXRlLnNob3dNaW5NYXhMYWJlbHMoKSkge1xuXHRcdFx0XHQ8ZGl2IFthdVVzZV09XCJkaXJlY3RpdmVzLm1pbkxhYmVsRGlyZWN0aXZlXCI+XG5cdFx0XHRcdFx0PG5nLXRlbXBsYXRlIFthdVNsb3RdPVwic3RhdGUubGFiZWwoKVwiIFthdVNsb3RQcm9wc109XCJ7c3RhdGUsIGFwaSwgZGlyZWN0aXZlcywgdmFsdWU6IHN0YXRlLm1pbigpfVwiPjwvbmctdGVtcGxhdGU+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHQ8ZGl2IFthdVVzZV09XCJkaXJlY3RpdmVzLm1heExhYmVsRGlyZWN0aXZlXCI+XG5cdFx0XHRcdFx0PG5nLXRlbXBsYXRlIFthdVNsb3RdPVwic3RhdGUubGFiZWwoKVwiIFthdVNsb3RQcm9wc109XCJ7c3RhdGUsIGFwaSwgZGlyZWN0aXZlcywgdmFsdWU6IHN0YXRlLm1heCgpfVwiPjwvbmctdGVtcGxhdGU+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0fVxuXHRcdFx0QGlmIChzdGF0ZS5zaG93VmFsdWVMYWJlbHMoKSAmJiBzdGF0ZS5jb21iaW5lZExhYmVsRGlzcGxheSgpKSB7XG5cdFx0XHRcdDxkaXYgW2F1VXNlXT1cImRpcmVjdGl2ZXMuY29tYmluZWRIYW5kbGVMYWJlbERpc3BsYXlEaXJlY3RpdmVcIj5cblx0XHRcdFx0XHRAaWYgKHN0YXRlLnJ0bCgpKSB7XG5cdFx0XHRcdFx0XHQ8bmctdGVtcGxhdGUgW2F1U2xvdF09XCJzdGF0ZS5sYWJlbCgpXCIgW2F1U2xvdFByb3BzXT1cIntzdGF0ZSwgYXBpLCBkaXJlY3RpdmVzLCB2YWx1ZTogc3RhdGUuc29ydGVkVmFsdWVzKClbMV19XCI+PC9uZy10ZW1wbGF0ZT4gLVxuXHRcdFx0XHRcdFx0PG5nLXRlbXBsYXRlIFthdVNsb3RdPVwic3RhdGUubGFiZWwoKVwiIFthdVNsb3RQcm9wc109XCJ7c3RhdGUsIGFwaSwgZGlyZWN0aXZlcywgdmFsdWU6IHN0YXRlLnNvcnRlZFZhbHVlcygpWzBdfVwiPjwvbmctdGVtcGxhdGU+XG5cdFx0XHRcdFx0fSBAZWxzZSB7XG5cdFx0XHRcdFx0XHQ8bmctdGVtcGxhdGUgW2F1U2xvdF09XCJzdGF0ZS5sYWJlbCgpXCIgW2F1U2xvdFByb3BzXT1cIntzdGF0ZSwgYXBpLCBkaXJlY3RpdmVzLCB2YWx1ZTogc3RhdGUuc29ydGVkVmFsdWVzKClbMF19XCI+PC9uZy10ZW1wbGF0ZT4gLVxuXHRcdFx0XHRcdFx0PG5nLXRlbXBsYXRlIFthdVNsb3RdPVwic3RhdGUubGFiZWwoKVwiIFthdVNsb3RQcm9wc109XCJ7c3RhdGUsIGFwaSwgZGlyZWN0aXZlcywgdmFsdWU6IHN0YXRlLnNvcnRlZFZhbHVlcygpWzFdfVwiPjwvbmctdGVtcGxhdGU+XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHQ8L2Rpdj5cblx0XHRcdH1cblx0XHRcdEBmb3IgKGl0ZW0gb2Ygc3RhdGUuc29ydGVkSGFuZGxlcygpOyB0cmFjayBpdGVtLmlkOyBsZXQgaSA9ICRpbmRleCkge1xuXHRcdFx0XHQ8bmctdGVtcGxhdGUgW2F1U2xvdF09XCJzdGF0ZS5oYW5kbGUoKVwiIFthdVNsb3RQcm9wc109XCJ7c3RhdGUsIGFwaSwgZGlyZWN0aXZlcywgaXRlbX1cIj48L25nLXRlbXBsYXRlPlxuXHRcdFx0XHRAaWYgKHN0YXRlLnNob3dWYWx1ZUxhYmVscygpICYmICFzdGF0ZS5jb21iaW5lZExhYmVsRGlzcGxheSgpKSB7XG5cdFx0XHRcdFx0PGRpdiBbYXVVc2VdPVwiW2RpcmVjdGl2ZXMuaGFuZGxlTGFiZWxEaXNwbGF5RGlyZWN0aXZlLCB7aW5kZXg6IGl9XVwiPlxuXHRcdFx0XHRcdFx0PG5nLXRlbXBsYXRlIFthdVNsb3RdPVwic3RhdGUubGFiZWwoKVwiIFthdVNsb3RQcm9wc109XCJ7c3RhdGUsIGFwaSwgZGlyZWN0aXZlcywgdmFsdWU6IHN0YXRlLnZhbHVlcygpW2ldfVwiPjwvbmctdGVtcGxhdGU+XG5cdFx0XHRcdFx0PC9kaXY+XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHQ8L25nLXRlbXBsYXRlPlxuXHRgLFxufSlcbmNsYXNzIFNsaWRlckRlZmF1bHRTdHJ1Y3R1cmVTbG90Q29tcG9uZW50IHtcblx0QFZpZXdDaGlsZCgnc3RydWN0dXJlJywge3N0YXRpYzogdHJ1ZX0pIHN0cnVjdHVyZSE6IFRlbXBsYXRlUmVmPFNsaWRlckNvbnRleHQ+O1xufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIGRlZmF1bHQgc2xvdCBzdHJ1Y3R1cmUgZm9yIHRoZSBzbGlkZXIgY29tcG9uZW50LlxuICovXG5leHBvcnQgY29uc3Qgc2xpZGVyRGVmYXVsdFNsb3RTdHJ1Y3R1cmU6IFNsb3RDb250ZW50PFNsaWRlckNvbnRleHQ+ID0gbmV3IENvbXBvbmVudFRlbXBsYXRlKFNsaWRlckRlZmF1bHRTdHJ1Y3R1cmVTbG90Q29tcG9uZW50LCAnc3RydWN0dXJlJyk7XG5cbi8qKlxuICogU2xpZGVyQ29tcG9uZW50IGlzIGFuIEFuZ3VsYXIgY29tcG9uZW50IHRoYXQgZXh0ZW5kcyB0aGUgQmFzZVdpZGdldERpcmVjdGl2ZVxuICogdG8gcHJvdmlkZSBhIGN1c3RvbWl6YWJsZSBzbGlkZXIgd2lkZ2V0LiBUaGlzIGNvbXBvbmVudCBhbGxvd3MgZm9yIHZhcmlvdXNcbiAqIGNvbmZpZ3VyYXRpb25zIGFuZCBjdXN0b21pemF0aW9ucyB0aHJvdWdoIGl0cyBpbnB1dHMgYW5kIG91dHB1dHMuXG4gKi9cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogJ1thdVNsaWRlcl0nLFxuXHRzdGFuZGFsb25lOiB0cnVlLFxuXHRjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcblx0ZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcblx0cHJvdmlkZXJzOiBbe3Byb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLCB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBTbGlkZXJDb21wb25lbnQpLCBtdWx0aTogdHJ1ZX1dLFxuXHRpbXBvcnRzOiBbU2xvdERpcmVjdGl2ZV0sXG5cdGhvc3Q6IHtcblx0XHQnKGJsdXIpJzogJ2hhbmRsZUJsdXIoKScsXG5cdH0sXG5cdHRlbXBsYXRlOiBgIDxuZy10ZW1wbGF0ZSBbYXVTbG90XT1cInN0YXRlLnN0cnVjdHVyZSgpXCIgW2F1U2xvdFByb3BzXT1cIntzdGF0ZSwgYXBpLCBkaXJlY3RpdmVzfVwiPjwvbmctdGVtcGxhdGU+IGAsXG59KVxuZXhwb3J0IGNsYXNzIFNsaWRlckNvbXBvbmVudCBleHRlbmRzIEJhc2VXaWRnZXREaXJlY3RpdmU8U2xpZGVyV2lkZ2V0PiB7XG5cdC8qKlxuXHQgKiBDU1MgY2xhc3NlcyB0byBiZSBhcHBsaWVkIG9uIHRoZSB3aWRnZXQgbWFpbiBjb250YWluZXJcblx0ICpcblx0ICogQGRlZmF1bHRWYWx1ZSBgJydgXG5cdCAqL1xuXHRASW5wdXQoJ2F1Q2xhc3NOYW1lJykgY2xhc3NOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cblx0LyoqXG5cdCAqIE1pbmltdW0gdmFsdWUgdGhhdCBjYW4gYmUgYXNzaWduZWQgdG8gdGhlIHNsaWRlclxuXHQgKlxuXHQgKiBAZGVmYXVsdFZhbHVlIGAwYFxuXHQgKi9cblx0QElucHV0KHthbGlhczogJ2F1TWluJywgdHJhbnNmb3JtOiBhdU51bWJlckF0dHJpYnV0ZX0pXG5cdG1pbjogbnVtYmVyIHwgdW5kZWZpbmVkO1xuXG5cdC8qKlxuXHQgKiBNYXhpbXVtIHZhbHVlIHRoYXQgY2FuIGJlIGFzc2lnbmVkIHRvIHRoZSBzbGlkZXJcblx0ICpcblx0ICogQGRlZmF1bHRWYWx1ZSBgMTAwYFxuXHQgKi9cblx0QElucHV0KHthbGlhczogJ2F1TWF4JywgdHJhbnNmb3JtOiBhdU51bWJlckF0dHJpYnV0ZX0pXG5cdG1heDogbnVtYmVyIHwgdW5kZWZpbmVkO1xuXG5cdC8qKlxuXHQgKiBVbml0IHZhbHVlIGJldHdlZW4gc2xpZGVyIHN0ZXBzXG5cdCAqXG5cdCAqIEBkZWZhdWx0VmFsdWUgYDFgXG5cdCAqL1xuXHRASW5wdXQoe2FsaWFzOiAnYXVTdGVwU2l6ZScsIHRyYW5zZm9ybTogYXVOdW1iZXJBdHRyaWJ1dGV9KVxuXHRzdGVwU2l6ZTogbnVtYmVyIHwgdW5kZWZpbmVkO1xuXG5cdC8qKlxuXHQgKiBDdXJyZW50IHNsaWRlciB2YWx1ZXNcblx0ICpcblx0ICogQGRlZmF1bHRWYWx1ZSBgWzBdYFxuXHQgKi9cblx0QElucHV0KCdhdVZhbHVlcycpXG5cdHZhbHVlczogbnVtYmVyW10gfCB1bmRlZmluZWQ7XG5cblx0LyoqXG5cdCAqIEl0IGB0cnVlYCBzbGlkZXIgZGlzcGxheSBpcyBpbnZlcnNlZFxuXHQgKlxuXHQgKiBAZGVmYXVsdFZhbHVlIGBmYWxzZWBcblx0ICovXG5cdEBJbnB1dCh7YWxpYXM6ICdhdVJ0bCcsIHRyYW5zZm9ybTogYXVCb29sZWFuQXR0cmlidXRlfSlcblx0cnRsOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuXG5cdC8qKlxuXHQgKiBJZiBgdHJ1ZWAgdGhlIHZhbHVlIGxhYmVscyBhcmUgZGlzcGxheWVkIG9uIHRoZSBzbGlkZXJcblx0ICpcblx0ICogQGRlZmF1bHRWYWx1ZSBgdHJ1ZWBcblx0ICovXG5cdEBJbnB1dCh7YWxpYXM6ICdhdVNob3dWYWx1ZUxhYmVscycsIHRyYW5zZm9ybTogYXVCb29sZWFuQXR0cmlidXRlfSkgc2hvd1ZhbHVlTGFiZWxzOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuXG5cdC8qKlxuXHQgKiBJZiBgdHJ1ZWAgdGhlIG1pbiBhbmQgbWF4IGxhYmVscyBhcmUgZGlzcGxheWVkIG9uIHRoZSBzbGlkZXJcblx0ICpcblx0ICogQGRlZmF1bHRWYWx1ZSBgdHJ1ZWBcblx0ICovXG5cdEBJbnB1dCh7YWxpYXM6ICdhdVNob3dNaW5NYXhMYWJlbHMnLCB0cmFuc2Zvcm06IGF1Qm9vbGVhbkF0dHJpYnV0ZX0pIHNob3dNaW5NYXhMYWJlbHM6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cblx0LyoqXG5cdCAqIFJldHVybiB0aGUgdmFsdWUgZm9yIHRoZSAnYXJpYS1sYWJlbCcgYXR0cmlidXRlIGZvciB0aGUgaGFuZGxlXG5cdCAqIEBwYXJhbSB2YWx1ZSAtIHZhbHVlIG9mIHRoZSBoYW5kbGVcblx0ICogQHBhcmFtIHNvcnRlZEluZGV4IC0gaW5kZXggb2YgdGhlIGhhbmRsZSBpbiB0aGUgc29ydGVkIGxpc3Rcblx0ICogQHBhcmFtIGluZGV4IC0gaW5kZXggb2YgdGhlIGhhbmRsZSBpbiB0aGUgb3JpZ2luYWwgbGlzdFxuXHQgKlxuXHQgKiBAZGVmYXVsdFZhbHVlXG5cdCAqIGBgYHRzXG5cdCAqICh2YWx1ZTogbnVtYmVyKSA9PiAnJyArIHZhbHVlXG5cdCAqIGBgYFxuXHQgKi9cblx0QElucHV0KCdhdUFyaWFMYWJlbEhhbmRsZScpIGFyaWFMYWJlbEhhbmRsZTogKCh2YWx1ZTogbnVtYmVyLCBzb3J0ZWRJbmRleDogbnVtYmVyLCBpbmRleDogbnVtYmVyKSA9PiBzdHJpbmcpIHwgdW5kZWZpbmVkO1xuXG5cdC8qKlxuXHQgKiBSZXR1cm4gdGhlIHZhbHVlIGZvciB0aGUgJ2FyaWEtdmFsdWV0ZXh0JyBhdHRyaWJ1dGUgZm9yIHRoZSBoYW5kbGVcblx0ICogQHBhcmFtIHZhbHVlIC0gdmFsdWUgb2YgdGhlIGhhbmRsZVxuXHQgKiBAcGFyYW0gc29ydGVkSW5kZXggLSBpbmRleCBvZiB0aGUgaGFuZGxlIGluIHRoZSBzb3J0ZWQgbGlzdFxuXHQgKiBAcGFyYW0gaW5kZXggLSBpbmRleCBvZiB0aGUgaGFuZGxlIGluIHRoZSBvcmlnaW5hbCBsaXN0XG5cdCAqXG5cdCAqIEBkZWZhdWx0VmFsdWVcblx0ICogYGBgdHNcblx0ICogKHZhbHVlOiBudW1iZXIpID0+ICcnICsgdmFsdWVcblx0ICogYGBgXG5cdCAqL1xuXHRASW5wdXQoJ2F1QXJpYVZhbHVlVGV4dCcpIGFyaWFWYWx1ZVRleHQ6ICgodmFsdWU6IG51bWJlciwgc29ydGVkSW5kZXg6IG51bWJlciwgaW5kZXg6IG51bWJlcikgPT4gc3RyaW5nKSB8IHVuZGVmaW5lZDtcblxuXHQvKipcblx0ICogSWYgYHRydWVgIHNsaWRlciB2YWx1ZSBjYW5ub3QgYmUgY2hhbmdlZCBidXQgdGhlIHNsaWRlciBpcyBzdGlsbCBmb2N1c2FibGVcblx0ICpcblx0ICogQGRlZmF1bHRWYWx1ZSBgZmFsc2VgXG5cdCAqL1xuXHRASW5wdXQoe2FsaWFzOiAnYXVSZWFkb25seScsIHRyYW5zZm9ybTogYXVCb29sZWFuQXR0cmlidXRlfSlcblx0cmVhZG9ubHk6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cblx0LyoqXG5cdCAqIElmIGB0cnVlYCBzbGlkZXIgdmFsdWUgY2Fubm90IGJlIGNoYW5nZWQgYW5kIHRoZSBzbGlkZXIgY2Fubm90IGJlIGZvY3VzZWRcblx0ICpcblx0ICogQGRlZmF1bHRWYWx1ZSBgZmFsc2VgXG5cdCAqL1xuXHRASW5wdXQoe2FsaWFzOiAnYXVEaXNhYmxlZCcsIHRyYW5zZm9ybTogYXVCb29sZWFuQXR0cmlidXRlfSlcblx0ZGlzYWJsZWQ6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cblx0LyoqXG5cdCAqIElmIGB0cnVlYCBpcyB2ZXJ0aWNhbGx5IHBvc2l0aW9uZWQgb3RoZXJ3aXNlIGl0IGlzIGhvcml6b250YWxcblx0ICpcblx0ICogQGRlZmF1bHRWYWx1ZSBgZmFsc2VgXG5cdCAqL1xuXHRASW5wdXQoe2FsaWFzOiAnYXVWZXJ0aWNhbCcsIHRyYW5zZm9ybTogYXVCb29sZWFuQXR0cmlidXRlfSlcblx0dmVydGljYWw6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cblx0LyoqXG5cdCAqIEFuIGV2ZW50IGVtaXR0ZWQgd2hlbiBzbGlkZXIgdmFsdWVzIGFyZSBjaGFuZ2VkXG5cdCAqXG5cdCAqIEV2ZW50IHBheWxvYWQgZXF1YWxzIHRvIHRoZSB1cGRhdGVkIHNsaWRlciB2YWx1ZXNcblx0ICpcblx0ICogQGRlZmF1bHRWYWx1ZVxuXHQgKiBgYGB0c1xuXHQgKiAoKSA9PiB7fVxuXHQgKiBgYGBcblx0ICovXG5cdEBPdXRwdXQoJ2F1VmFsdWVzQ2hhbmdlJylcblx0dmFsdWVzQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXJbXT4oKTtcblxuXHQvKipcblx0ICogU2xvdCB0byBjaGFuZ2UgdGhlIGRlZmF1bHQgbGFiZWxzIG9mIHRoZSBzbGlkZXJcblx0ICpcblx0ICogQGRlZmF1bHRWYWx1ZVxuXHQgKiBgYGB0c1xuXHQgKiAoe3ZhbHVlfTogU2xpZGVyU2xvdExhYmVsQ29udGV4dCkgPT4gJycgKyB2YWx1ZVxuXHQgKiBgYGBcblx0ICovXG5cdEBJbnB1dCgnYXVMYWJlbCcpIGxhYmVsOiBTbG90Q29udGVudDxTbGlkZXJTbG90TGFiZWxDb250ZXh0Pjtcblx0QENvbnRlbnRDaGlsZChTbGlkZXJMYWJlbERpcmVjdGl2ZSwge3N0YXRpYzogZmFsc2V9KSBzbG90TGFiZWxGcm9tQ29udGVudDogU2xpZGVyTGFiZWxEaXJlY3RpdmUgfCB1bmRlZmluZWQ7XG5cblx0LyoqXG5cdCAqIFNsb3QgdG8gY2hhbmdlIHRoZSBkZWZhdWx0IGRpc3BsYXkgb2YgdGhlIHNsaWRlclxuXHQgKi9cblx0QElucHV0KCdhdVN0cnVjdHVyZScpIHN0cnVjdHVyZTogU2xvdENvbnRlbnQ8U2xpZGVyQ29udGV4dD47XG5cdEBDb250ZW50Q2hpbGQoU2xpZGVyU3RydWN0dXJlRGlyZWN0aXZlLCB7c3RhdGljOiBmYWxzZX0pIHNsb3RTdHJ1Y3R1cmVGcm9tQ29udGVudDogU2xpZGVyU3RydWN0dXJlRGlyZWN0aXZlIHwgdW5kZWZpbmVkO1xuXG5cdC8qKlxuXHQgKiBTbG90IHRvIGNoYW5nZSB0aGUgaGFuZGxlcnNcblx0ICovXG5cdEBJbnB1dCgnYXVIYW5kbGUnKSBoYW5kbGU6IFNsb3RDb250ZW50PFNsaWRlclNsb3RIYW5kbGVDb250ZXh0Pjtcblx0QENvbnRlbnRDaGlsZChTbGlkZXJIYW5kbGVEaXJlY3RpdmUsIHtzdGF0aWM6IGZhbHNlfSkgc2xvdEhhbmRsZUZyb21Db250ZW50OiBTbGlkZXJIYW5kbGVEaXJlY3RpdmUgfCB1bmRlZmluZWQ7XG5cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoXG5cdFx0XHRjYWxsV2lkZ2V0RmFjdG9yeSh7XG5cdFx0XHRcdGZhY3Rvcnk6IGNyZWF0ZVNsaWRlcixcblx0XHRcdFx0d2lkZ2V0TmFtZTogJ3NsaWRlcicsXG5cdFx0XHRcdGRlZmF1bHRDb25maWc6IHtcblx0XHRcdFx0XHRzdHJ1Y3R1cmU6IHNsaWRlckRlZmF1bHRTbG90U3RydWN0dXJlLFxuXHRcdFx0XHRcdGhhbmRsZTogc2xpZGVyRGVmYXVsdFNsb3RIYW5kbGUsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGV2ZW50czoge1xuXHRcdFx0XHRcdG9uVmFsdWVzQ2hhbmdlOiAoZXZlbnQpID0+IHtcblx0XHRcdFx0XHRcdHRoaXMub25DaGFuZ2UoZXZlbnQpO1xuXHRcdFx0XHRcdFx0dGhpcy5vblRvdWNoZWQoKTtcblx0XHRcdFx0XHRcdHRoaXMudmFsdWVzQ2hhbmdlLmVtaXQoZXZlbnQpO1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGFmdGVySW5pdDogKHdpZGdldCkgPT4ge1xuXHRcdFx0XHRcdHVzZURpcmVjdGl2ZUZvckhvc3Qod2lkZ2V0LmRpcmVjdGl2ZXMuc2xpZGVyRGlyZWN0aXZlKTtcblx0XHRcdFx0fSxcblx0XHRcdFx0c2xvdFRlbXBsYXRlczogKCkgPT4gKHtcblx0XHRcdFx0XHRzdHJ1Y3R1cmU6IHRoaXMuc2xvdFN0cnVjdHVyZUZyb21Db250ZW50Py50ZW1wbGF0ZVJlZixcblx0XHRcdFx0XHRoYW5kbGU6IHRoaXMuc2xvdEhhbmRsZUZyb21Db250ZW50Py50ZW1wbGF0ZVJlZixcblx0XHRcdFx0XHRsYWJlbDogdGhpcy5zbG90TGFiZWxGcm9tQ29udGVudD8udGVtcGxhdGVSZWYsXG5cdFx0XHRcdH0pLFxuXHRcdFx0fSksXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb250cm9sIHZhbHVlIGFjY2Vzc29yIG1ldGhvZHNcblx0ICovXG5cdG9uQ2hhbmdlID0gKF86IGFueSkgPT4ge307XG5cblx0b25Ub3VjaGVkID0gKCkgPT4ge307XG5cblx0cmVnaXN0ZXJPbkNoYW5nZShmbjogKHZhbHVlOiBhbnkpID0+IGFueSk6IHZvaWQge1xuXHRcdHRoaXMub25DaGFuZ2UgPSBmbjtcblx0fVxuXG5cdHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiAoKSA9PiBhbnkpOiB2b2lkIHtcblx0XHR0aGlzLm9uVG91Y2hlZCA9IGZuO1xuXHR9XG5cblx0d3JpdGVWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XG5cdFx0aWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG5cdFx0XHR0aGlzWydfd2lkZ2V0J10ucGF0Y2goe1xuXHRcdFx0XHR2YWx1ZXM6IHZhbHVlLFxuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXNbJ193aWRnZXQnXS5wYXRjaCh7XG5cdFx0XHRcdHZhbHVlczogW3ZhbHVlXSxcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbikge1xuXHRcdHRoaXNbJ193aWRnZXQnXS5wYXRjaCh7XG5cdFx0XHRkaXNhYmxlZDogaXNEaXNhYmxlZCxcblx0XHR9KTtcblx0fVxuXG5cdGhhbmRsZUJsdXIoKSB7XG5cdFx0dGhpcy5vblRvdWNoZWQoKTtcblx0fVxufVxuIl19