@tilde-nlp/ngx-common 5.0.21 → 5.0.23

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 (24) hide show
  1. package/esm2022/lib/filter-bar/filter-bar.component.mjs +96 -71
  2. package/esm2022/lib/filter-bar/models/filter-bar-settings.model.mjs +1 -1
  3. package/esm2022/lib/llm/llm.component.mjs +8 -8
  4. package/esm2022/lib/llm/models/llm-configuration.model.mjs +1 -1
  5. package/esm2022/lib/llm/services/llm-helper.service.mjs +4 -1
  6. package/esm2022/lib/multi-functional-table/multi-functional-table.component.mjs +11 -6
  7. package/esm2022/lib/notification-message/notification-message.component.mjs +6 -6
  8. package/esm2022/lib/services/quota/models/quota-service-configuration.model.mjs +1 -1
  9. package/esm2022/lib/services/quota/quota.service.mjs +5 -3
  10. package/esm2022/lib/terminology/services/terminology/terminology.service.mjs +2 -3
  11. package/esm2022/lib/text-to-speech/models/voice.model.mjs +1 -1
  12. package/esm2022/lib/text-to-speech/text-to-speech.component.mjs +18 -7
  13. package/fesm2022/tilde-nlp-ngx-common.mjs +141 -96
  14. package/fesm2022/tilde-nlp-ngx-common.mjs.map +1 -1
  15. package/lib/filter-bar/filter-bar.component.d.ts +1 -0
  16. package/lib/filter-bar/models/filter-bar-settings.model.d.ts +1 -0
  17. package/lib/llm/models/llm-configuration.model.d.ts +1 -0
  18. package/lib/multi-functional-table/multi-functional-table.component.d.ts +3 -1
  19. package/lib/services/quota/models/quota-service-configuration.model.d.ts +2 -0
  20. package/lib/services/quota/quota.service.d.ts +1 -1
  21. package/lib/terminology/services/terminology/terminology.service.d.ts +1 -1
  22. package/lib/text-to-speech/models/voice.model.d.ts +1 -0
  23. package/package.json +1 -1
  24. package/web-components/main.js +10 -10
@@ -6,22 +6,20 @@ import * as i2 from "@angular/common";
6
6
  import * as i3 from "@angular/material/input";
7
7
  import * as i4 from "@angular/material/form-field";
8
8
  import * as i5 from "@ngbracket/ngx-layout/flex";
9
- import * as i6 from "@ngbracket/ngx-layout/extended";
10
- import * as i7 from "@angular/material/select";
11
- import * as i8 from "@angular/material/core";
12
- import * as i9 from "@angular/forms";
13
- import * as i10 from "@angular/material/tooltip";
14
- import * as i11 from "@angular/material/button";
15
- import * as i12 from "@angular/material/chips";
16
- import * as i13 from "@angular/material/icon";
17
- import * as i14 from "../pipes/sort-translations-by-property/sort-translations-by-property.pipe";
18
- import * as i15 from "../pipes/sort-alphabetically/sort-alphabetically.pipe";
9
+ import * as i6 from "@angular/material/select";
10
+ import * as i7 from "@angular/material/core";
11
+ import * as i8 from "@angular/forms";
12
+ import * as i9 from "@angular/material/tooltip";
13
+ import * as i10 from "@angular/material/button";
14
+ import * as i11 from "@angular/material/chips";
15
+ import * as i12 from "@angular/material/icon";
16
+ import * as i13 from "../pipes/sort-translations-by-property/sort-translations-by-property.pipe";
17
+ import * as i14 from "../pipes/sort-alphabetically/sort-alphabetically.pipe";
19
18
  const _c0 = ["filterWrapper"];
20
19
  const _c1 = ["optionSearchInput"];
21
- const _c2 = a0 => ({ "hidden": a0 });
22
- const _c3 = a0 => ({ default: a0 });
20
+ const _c2 = a0 => ({ default: a0 });
23
21
  function FilterBarComponent_div_0_mat_form_field_3_span_3_Template(rf, ctx) { if (rf & 1) {
24
- i0.ɵɵelementStart(0, "span", 16);
22
+ i0.ɵɵelementStart(0, "span", 15);
25
23
  i0.ɵɵpipe(1, "translate");
26
24
  i0.ɵɵtext(2);
27
25
  i0.ɵɵelementEnd();
@@ -32,11 +30,11 @@ function FilterBarComponent_div_0_mat_form_field_3_span_3_Template(rf, ctx) { if
32
30
  i0.ɵɵtextInterpolate1(" ", ctx_r0.suffixIcon, " ");
33
31
  } }
34
32
  function FilterBarComponent_div_0_mat_form_field_3_Template(rf, ctx) { if (rf & 1) {
35
- i0.ɵɵelementStart(0, "mat-form-field", 12)(1, "span", 13);
33
+ i0.ɵɵelementStart(0, "mat-form-field", 11)(1, "span", 12);
36
34
  i0.ɵɵtext(2);
37
35
  i0.ɵɵelementEnd();
38
- i0.ɵɵtemplate(3, FilterBarComponent_div_0_mat_form_field_3_span_3_Template, 3, 4, "span", 14);
39
- i0.ɵɵelement(4, "input", 15);
36
+ i0.ɵɵtemplate(3, FilterBarComponent_div_0_mat_form_field_3_span_3_Template, 3, 4, "span", 13);
37
+ i0.ɵɵelement(4, "input", 14);
40
38
  i0.ɵɵpipe(5, "translate");
41
39
  i0.ɵɵelementEnd();
42
40
  } if (rf & 2) {
@@ -51,7 +49,7 @@ function FilterBarComponent_div_0_mat_form_field_3_Template(rf, ctx) { if (rf &
51
49
  function FilterBarComponent_div_0_mat_form_field_5_ng_container_5_Template(rf, ctx) { if (rf & 1) {
52
50
  const _r6 = i0.ɵɵgetCurrentView();
53
51
  i0.ɵɵelementContainerStart(0);
54
- i0.ɵɵelementStart(1, "input", 20, 1);
52
+ i0.ɵɵelementStart(1, "input", 17, 1);
55
53
  i0.ɵɵpipe(3, "translate");
56
54
  i0.ɵɵlistener("keyup", function FilterBarComponent_div_0_mat_form_field_5_ng_container_5_Template_input_keyup_1_listener($event) { i0.ɵɵrestoreView(_r6); const filter_r4 = i0.ɵɵnextContext().$implicit; const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.filterOptions($event, filter_r4)); })("keydown", function FilterBarComponent_div_0_mat_form_field_5_ng_container_5_Template_input_keydown_1_listener($event) { i0.ɵɵrestoreView(_r6); return i0.ɵɵresetView($event.stopPropagation()); });
57
55
  i0.ɵɵelementEnd();
@@ -64,7 +62,7 @@ function FilterBarComponent_div_0_mat_form_field_5_ng_container_5_Template(rf, c
64
62
  } }
65
63
  function FilterBarComponent_div_0_mat_form_field_5_ng_container_6_ng_container_1_ng_container_1_Template(rf, ctx) { if (rf & 1) {
66
64
  i0.ɵɵelementContainerStart(0);
67
- i0.ɵɵelementStart(1, "mat-option", 22);
65
+ i0.ɵɵelementStart(1, "mat-option", 19);
68
66
  i0.ɵɵtext(2);
69
67
  i0.ɵɵpipe(3, "titlecase");
70
68
  i0.ɵɵelementEnd();
@@ -98,19 +96,19 @@ function FilterBarComponent_div_0_mat_form_field_5_ng_container_6_ng_template_2_
98
96
  } if (rf & 2) {
99
97
  const value_r8 = i0.ɵɵnextContext().$implicit;
100
98
  i0.ɵɵadvance();
101
- i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind2(3, 3, value_r8.key, i0.ɵɵpureFunction1(6, _c3, i0.ɵɵpipeBind1(2, 1, value_r8.value))), " ");
99
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind2(3, 3, value_r8.key, i0.ɵɵpureFunction1(6, _c2, i0.ɵɵpipeBind1(2, 1, value_r8.value))), " ");
102
100
  } }
103
101
  function FilterBarComponent_div_0_mat_form_field_5_ng_container_6_ng_template_2_ng_container_0_ng_template_3_Template(rf, ctx) { if (rf & 1) {
104
102
  i0.ɵɵtext(0);
105
103
  i0.ɵɵpipe(1, "translate");
106
104
  } if (rf & 2) {
107
105
  const value_r8 = i0.ɵɵnextContext().$implicit;
108
- i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind2(1, 1, value_r8.key, i0.ɵɵpureFunction1(4, _c3, value_r8.value)), " ");
106
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind2(1, 1, value_r8.key, i0.ɵɵpureFunction1(4, _c2, value_r8.value)), " ");
109
107
  } }
110
108
  function FilterBarComponent_div_0_mat_form_field_5_ng_container_6_ng_template_2_ng_container_0_Template(rf, ctx) { if (rf & 1) {
111
109
  i0.ɵɵelementContainerStart(0);
112
- i0.ɵɵelementStart(1, "mat-option", 22);
113
- i0.ɵɵtemplate(2, FilterBarComponent_div_0_mat_form_field_5_ng_container_6_ng_template_2_ng_container_0_ng_container_2_Template, 4, 8, "ng-container", 21)(3, FilterBarComponent_div_0_mat_form_field_5_ng_container_6_ng_template_2_ng_container_0_ng_template_3_Template, 2, 6, "ng-template", null, 3, i0.ɵɵtemplateRefExtractor);
110
+ i0.ɵɵelementStart(1, "mat-option", 19);
111
+ i0.ɵɵtemplate(2, FilterBarComponent_div_0_mat_form_field_5_ng_container_6_ng_template_2_ng_container_0_ng_container_2_Template, 4, 8, "ng-container", 18)(3, FilterBarComponent_div_0_mat_form_field_5_ng_container_6_ng_template_2_ng_container_0_ng_template_3_Template, 2, 6, "ng-template", null, 3, i0.ɵɵtemplateRefExtractor);
114
112
  i0.ɵɵelementEnd();
115
113
  i0.ɵɵelementContainerEnd();
116
114
  } if (rf & 2) {
@@ -133,7 +131,7 @@ function FilterBarComponent_div_0_mat_form_field_5_ng_container_6_ng_template_2_
133
131
  } }
134
132
  function FilterBarComponent_div_0_mat_form_field_5_ng_container_6_Template(rf, ctx) { if (rf & 1) {
135
133
  i0.ɵɵelementContainerStart(0);
136
- i0.ɵɵtemplate(1, FilterBarComponent_div_0_mat_form_field_5_ng_container_6_ng_container_1_Template, 3, 4, "ng-container", 21)(2, FilterBarComponent_div_0_mat_form_field_5_ng_container_6_ng_template_2_Template, 2, 5, "ng-template", null, 2, i0.ɵɵtemplateRefExtractor);
134
+ i0.ɵɵtemplate(1, FilterBarComponent_div_0_mat_form_field_5_ng_container_6_ng_container_1_Template, 3, 4, "ng-container", 18)(2, FilterBarComponent_div_0_mat_form_field_5_ng_container_6_ng_template_2_Template, 2, 5, "ng-template", null, 2, i0.ɵɵtemplateRefExtractor);
137
135
  i0.ɵɵelementContainerEnd();
138
136
  } if (rf & 2) {
139
137
  const sortedValuesByProperty_r10 = i0.ɵɵreference(3);
@@ -143,53 +141,49 @@ function FilterBarComponent_div_0_mat_form_field_5_ng_container_6_Template(rf, c
143
141
  } }
144
142
  function FilterBarComponent_div_0_mat_form_field_5_Template(rf, ctx) { if (rf & 1) {
145
143
  const _r2 = i0.ɵɵgetCurrentView();
146
- i0.ɵɵelementStart(0, "mat-form-field", 17)(1, "mat-label");
144
+ i0.ɵɵelementStart(0, "mat-form-field")(1, "mat-label");
147
145
  i0.ɵɵtext(2);
148
146
  i0.ɵɵpipe(3, "translate");
149
147
  i0.ɵɵelementEnd();
150
- i0.ɵɵelementStart(4, "mat-select", 18);
148
+ i0.ɵɵelementStart(4, "mat-select", 16);
151
149
  i0.ɵɵlistener("openedChange", function FilterBarComponent_div_0_mat_form_field_5_Template_mat_select_openedChange_4_listener($event) { const ctx_r2 = i0.ɵɵrestoreView(_r2); const filter_r4 = ctx_r2.$implicit; const i_r5 = ctx_r2.index; const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView($event === true ? ctx_r0.focusOptionSearchInput(filter_r4, i_r5) : ctx_r0.clearOptionSearchInput(filter_r4, i_r5)); })("selectionChange", function FilterBarComponent_div_0_mat_form_field_5_Template_mat_select_selectionChange_4_listener($event) { const filter_r4 = i0.ɵɵrestoreView(_r2).$implicit; const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.selectEvent($event, filter_r4)); });
152
- i0.ɵɵtemplate(5, FilterBarComponent_div_0_mat_form_field_5_ng_container_5_Template, 4, 3, "ng-container", 19)(6, FilterBarComponent_div_0_mat_form_field_5_ng_container_6_Template, 4, 2, "ng-container", 19);
150
+ i0.ɵɵtemplate(5, FilterBarComponent_div_0_mat_form_field_5_ng_container_5_Template, 4, 3, "ng-container", 10)(6, FilterBarComponent_div_0_mat_form_field_5_ng_container_6_Template, 4, 2, "ng-container", 10);
153
151
  i0.ɵɵelementEnd()();
154
152
  } if (rf & 2) {
155
- let tmp_7_0;
153
+ let tmp_6_0;
156
154
  const filter_r4 = ctx.$implicit;
157
- const i_r5 = ctx.index;
158
- const ctx_r0 = i0.ɵɵnextContext(2);
159
- i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(8, _c2, ctx_r0.filterOverflow && ctx_r0.activeFilterIndex !== i_r5));
160
155
  i0.ɵɵadvance(2);
161
- i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(3, 6, filter_r4.title));
156
+ i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(3, 5, filter_r4.title));
162
157
  i0.ɵɵadvance(2);
163
- i0.ɵɵproperty("panelWidth", (tmp_7_0 = filter_r4 == null ? null : filter_r4.maxPanelWidth) !== null && tmp_7_0 !== undefined ? tmp_7_0 : "auto")("formControlName", filter_r4.fieldName);
158
+ i0.ɵɵproperty("panelWidth", (tmp_6_0 = filter_r4 == null ? null : filter_r4.maxPanelWidth) !== null && tmp_6_0 !== undefined ? tmp_6_0 : "auto")("formControlName", filter_r4.fieldName);
164
159
  i0.ɵɵadvance();
165
160
  i0.ɵɵproperty("ngIf", filter_r4 == null ? null : filter_r4.search == null ? null : filter_r4.search.placeholder);
166
161
  i0.ɵɵadvance();
167
162
  i0.ɵɵproperty("ngIf", filter_r4.values.length);
168
163
  } }
169
- function FilterBarComponent_div_0_button_6_Template(rf, ctx) { if (rf & 1) {
164
+ function FilterBarComponent_div_0_ng_container_6_Template(rf, ctx) { if (rf & 1) {
170
165
  const _r11 = i0.ɵɵgetCurrentView();
171
- i0.ɵɵelementStart(0, "button", 23);
172
- i0.ɵɵlistener("click", function FilterBarComponent_div_0_button_6_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r11); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.switchLeft()); });
173
- i0.ɵɵelementStart(1, "span", 24);
174
- i0.ɵɵtext(2, " arrow_back_ios ");
166
+ i0.ɵɵelementContainerStart(0);
167
+ i0.ɵɵelementStart(1, "button", 20);
168
+ i0.ɵɵlistener("click", function FilterBarComponent_div_0_ng_container_6_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r11); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.switchLeft()); });
169
+ i0.ɵɵelementStart(2, "span", 21);
170
+ i0.ɵɵtext(3, " arrow_back_ios ");
175
171
  i0.ɵɵelementEnd()();
176
- } }
177
- function FilterBarComponent_div_0_button_7_Template(rf, ctx) { if (rf & 1) {
178
- const _r12 = i0.ɵɵgetCurrentView();
179
- i0.ɵɵelementStart(0, "button", 23);
180
- i0.ɵɵlistener("click", function FilterBarComponent_div_0_button_7_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r12); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.switchRight()); });
181
- i0.ɵɵelementStart(1, "span", 24);
182
- i0.ɵɵtext(2, " arrow_forward_ios ");
172
+ i0.ɵɵelementStart(4, "button", 20);
173
+ i0.ɵɵlistener("click", function FilterBarComponent_div_0_ng_container_6_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r11); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.switchRight()); });
174
+ i0.ɵɵelementStart(5, "span", 21);
175
+ i0.ɵɵtext(6, " arrow_forward_ios ");
183
176
  i0.ɵɵelementEnd()();
177
+ i0.ɵɵelementContainerEnd();
184
178
  } }
185
179
  function FilterBarComponent_div_0_Template(rf, ctx) { if (rf & 1) {
186
180
  i0.ɵɵelementStart(0, "div", 6)(1, "div", 7, 0);
187
181
  i0.ɵɵtemplate(3, FilterBarComponent_div_0_mat_form_field_3_Template, 6, 6, "mat-form-field", 8);
188
182
  i0.ɵɵelementContainerStart(4, 9);
189
- i0.ɵɵtemplate(5, FilterBarComponent_div_0_mat_form_field_5_Template, 7, 10, "mat-form-field", 10);
183
+ i0.ɵɵtemplate(5, FilterBarComponent_div_0_mat_form_field_5_Template, 7, 7, "mat-form-field", 5);
190
184
  i0.ɵɵelementContainerEnd();
191
185
  i0.ɵɵelementEnd();
192
- i0.ɵɵtemplate(6, FilterBarComponent_div_0_button_6_Template, 3, 0, "button", 11)(7, FilterBarComponent_div_0_button_7_Template, 3, 0, "button", 11);
186
+ i0.ɵɵtemplate(6, FilterBarComponent_div_0_ng_container_6_Template, 7, 0, "ng-container", 10);
193
187
  i0.ɵɵelementEnd();
194
188
  } if (rf & 2) {
195
189
  const ctx_r0 = i0.ɵɵnextContext();
@@ -200,45 +194,43 @@ function FilterBarComponent_div_0_Template(rf, ctx) { if (rf & 1) {
200
194
  i0.ɵɵadvance();
201
195
  i0.ɵɵproperty("formGroup", ctx_r0.filterFormGroup);
202
196
  i0.ɵɵadvance();
203
- i0.ɵɵproperty("ngForOf", ctx_r0.settings == null ? null : ctx_r0.settings.filters);
204
- i0.ɵɵadvance();
205
- i0.ɵɵproperty("ngIf", ctx_r0.filterOverflow);
197
+ i0.ɵɵproperty("ngForOf", ctx_r0.currentFilters);
206
198
  i0.ɵɵadvance();
207
199
  i0.ɵɵproperty("ngIf", ctx_r0.filterOverflow);
208
200
  } }
209
201
  function FilterBarComponent_div_2_mat_chip_option_1_Template(rf, ctx) { if (rf & 1) {
210
- const _r13 = i0.ɵɵgetCurrentView();
211
- i0.ɵɵelementStart(0, "mat-chip-option", 26);
212
- i0.ɵɵlistener("removed", function FilterBarComponent_div_2_mat_chip_option_1_Template_mat_chip_option_removed_0_listener() { const ix_r14 = i0.ɵɵrestoreView(_r13).index; const filter_r15 = i0.ɵɵnextContext().$implicit; const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.removeFilter(filter_r15.fieldName, ix_r14)); });
213
- i0.ɵɵelementStart(1, "button", 27)(2, "mat-icon");
202
+ const _r12 = i0.ɵɵgetCurrentView();
203
+ i0.ɵɵelementStart(0, "mat-chip-option", 23);
204
+ i0.ɵɵlistener("removed", function FilterBarComponent_div_2_mat_chip_option_1_Template_mat_chip_option_removed_0_listener() { const ix_r13 = i0.ɵɵrestoreView(_r12).index; const filter_r14 = i0.ɵɵnextContext().$implicit; const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.removeFilter(filter_r14.fieldName, ix_r13)); });
205
+ i0.ɵɵelementStart(1, "button", 24)(2, "mat-icon");
214
206
  i0.ɵɵtext(3, "close");
215
207
  i0.ɵɵelementEnd()();
216
- i0.ɵɵelementStart(4, "span", 28);
208
+ i0.ɵɵelementStart(4, "span", 25);
217
209
  i0.ɵɵtext(5);
218
210
  i0.ɵɵpipe(6, "translate");
219
211
  i0.ɵɵelementEnd();
220
- i0.ɵɵelementStart(7, "span", 29);
212
+ i0.ɵɵelementStart(7, "span", 26);
221
213
  i0.ɵɵtext(8);
222
214
  i0.ɵɵpipe(9, "translate");
223
215
  i0.ɵɵpipe(10, "titlecase");
224
216
  i0.ɵɵelementEnd()();
225
217
  } if (rf & 2) {
226
- const filterValue_r16 = ctx.$implicit;
227
- const filter_r15 = i0.ɵɵnextContext().$implicit;
218
+ const filterValue_r15 = ctx.$implicit;
219
+ const filter_r14 = i0.ɵɵnextContext().$implicit;
228
220
  i0.ɵɵadvance(5);
229
- i0.ɵɵtextInterpolate1("", i0.ɵɵpipeBind1(6, 2, filter_r15.title), ":");
221
+ i0.ɵɵtextInterpolate1("", i0.ɵɵpipeBind1(6, 2, filter_r14.title), ":");
230
222
  i0.ɵɵadvance(3);
231
- i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(10, 7, filter_r15.translated ? filterValue_r16.key : i0.ɵɵpipeBind2(9, 4, filterValue_r16.key, i0.ɵɵpureFunction1(9, _c3, filterValue_r16.value))), "");
223
+ i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(10, 7, filter_r14.translated ? filterValue_r15.key : i0.ɵɵpipeBind2(9, 4, filterValue_r15.key, i0.ɵɵpureFunction1(9, _c2, filterValue_r15.value))), "");
232
224
  } }
233
225
  function FilterBarComponent_div_2_Template(rf, ctx) { if (rf & 1) {
234
226
  i0.ɵɵelementStart(0, "div");
235
- i0.ɵɵtemplate(1, FilterBarComponent_div_2_mat_chip_option_1_Template, 11, 11, "mat-chip-option", 25);
227
+ i0.ɵɵtemplate(1, FilterBarComponent_div_2_mat_chip_option_1_Template, 11, 11, "mat-chip-option", 22);
236
228
  i0.ɵɵelementEnd();
237
229
  } if (rf & 2) {
238
- const filter_r15 = ctx.$implicit;
230
+ const filter_r14 = ctx.$implicit;
239
231
  const ctx_r0 = i0.ɵɵnextContext();
240
232
  i0.ɵɵadvance();
241
- i0.ɵɵproperty("ngForOf", ctx_r0.filterFormGroupValue[filter_r15.fieldName]);
233
+ i0.ɵɵproperty("ngForOf", ctx_r0.filterFormGroupValue[filter_r14.fieldName]);
242
234
  } }
243
235
  export class FilterBarComponent {
244
236
  onResize() {
@@ -264,6 +256,9 @@ export class FilterBarComponent {
264
256
  get outputFilterKeyAndValue() {
265
257
  return this.settings?.outputFilterKeyAndValue;
266
258
  }
259
+ get currentFilters() {
260
+ return this.settings?.splittedFilters?.length ? this.settings.splittedFilters[this.activeFilterIndex] : this.settings?.filters;
261
+ }
267
262
  // eslint-disable-next-line @typescript-eslint/adjacent-overload-signatures
268
263
  set inputText(value) {
269
264
  this._inputText = value;
@@ -301,6 +296,7 @@ export class FilterBarComponent {
301
296
  this.prefixIcon = this.settings?.prefixIcon ?? "filter_alt";
302
297
  this.suffixIcon = this.settings?.suffixIcon ?? "question_mark";
303
298
  this.showSuffixIcon = this.settings?.showSuffixIcon ?? true;
299
+ this.activeFilterIndex = this.showSearch ? this.searchIndex : 0;
304
300
  }
305
301
  ngAfterViewInit() {
306
302
  this.checkOverflow();
@@ -359,13 +355,13 @@ export class FilterBarComponent {
359
355
  this.filterBarChange.next(this.filters);
360
356
  }
361
357
  switchRight() {
362
- if (this.settings?.filters && this.settings?.filters.length === this.activeFilterIndex + 1) {
358
+ if (this.settings?.splittedFilters?.length === this.activeFilterIndex + 1) {
363
359
  return;
364
360
  }
365
361
  this.activeFilterIndex += 1;
366
362
  }
367
363
  switchLeft() {
368
- if (this.activeFilterIndex === this.searchIndex) {
364
+ if (this.activeFilterIndex === this.searchIndex || !this.showSearch && this.activeFilterIndex === 0) {
369
365
  return;
370
366
  }
371
367
  this.activeFilterIndex -= 1;
@@ -380,8 +376,37 @@ export class FilterBarComponent {
380
376
  control.setValue(newArray);
381
377
  }
382
378
  checkOverflow() {
383
- if (this.filterWrapper) {
384
- this.filterOverflow = this.filterWrapper.nativeElement.clientWidth < this.filterWrapper.nativeElement.scrollWidth;
379
+ if (this.filterWrapper?.nativeElement) {
380
+ const minFilterWidth = 100;
381
+ const searchFilterWidth = 150;
382
+ if (this.settings?.filters?.length) {
383
+ const containerWidth = this.filterWrapper.nativeElement.clientWidth;
384
+ // Calculate the total width needed for all filters
385
+ const totalWidthNeeded = this.settings.filters.length * minFilterWidth + (this.showSearch ? searchFilterWidth : 0);
386
+ // If all filters can fit within the container, no need to split
387
+ if (totalWidthNeeded <= containerWidth) {
388
+ this.activeFilterIndex = this.showSearch ? this.searchIndex : 0;
389
+ this.settings.splittedFilters = [];
390
+ this.filterOverflow = false;
391
+ return;
392
+ }
393
+ // Calculate how many filters can fit per row based on the container width
394
+ const filtersPerRow = Math.floor(containerWidth / minFilterWidth);
395
+ // Determine how many groups are needed
396
+ const groupCount = Math.ceil(this.settings.filters.length / filtersPerRow);
397
+ if ((groupCount + (this.showSearch ? 1 : 0)) < this.activeFilterIndex + 1) {
398
+ this.activeFilterIndex = this.showSearch ? this.searchIndex : 0;
399
+ }
400
+ // Calculate group size based on the number of groups
401
+ const groupSize = Math.ceil(this.settings.filters.length / groupCount);
402
+ // Split filters into the calculated number of groups
403
+ const newSplittedFilters = [];
404
+ for (let i = 0; i < this.settings.filters.length; i += groupSize) {
405
+ newSplittedFilters.push(this.settings.filters.slice(i, i + groupSize));
406
+ }
407
+ this.settings.splittedFilters = newSplittedFilters;
408
+ this.filterOverflow = true;
409
+ }
385
410
  }
386
411
  }
387
412
  subscribeToFormValueChanges() {
@@ -408,8 +433,8 @@ export class FilterBarComponent {
408
433
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.optionSearchInputs = _t);
409
434
  } }, hostBindings: function FilterBarComponent_HostBindings(rf, ctx) { if (rf & 1) {
410
435
  i0.ɵɵlistener("resize", function FilterBarComponent_resize_HostBindingHandler() { return ctx.onResize(); }, false, i0.ɵɵresolveWindow);
411
- } }, inputs: { settings: "settings", filterRowVisible: "filterRowVisible" }, outputs: { filterBarChange: "filterBarChange" }, decls: 3, vars: 2, consts: [["filterWrapper", ""], ["optionSearchInput", ""], ["sortedValuesByProperty", ""], ["defaultCase", ""], ["class", "filter-row", 4, "ngIf"], [4, "ngFor", "ngForOf"], [1, "filter-row"], ["fxLayout", "row", 1, "filter-wrapper", 3, "formGroup"], ["fxFlex", "", "class", "filter-bar-search-input", 4, "ngIf"], [3, "formGroup"], [3, "ngClass", 4, "ngFor", "ngForOf"], ["mat-icon-button", "", 3, "click", 4, "ngIf"], ["fxFlex", "", 1, "filter-bar-search-input"], ["matPrefix", "", 1, "material-icons-outlined"], ["matSuffix", "", "class", "material-icons-outlined", 3, "matTooltip", 4, "ngIf"], ["matInput", "", 1, "search-input", 3, "placeholder", "formControlName"], ["matSuffix", "", 1, "material-icons-outlined", 3, "matTooltip"], [3, "ngClass"], ["multiple", "", 3, "openedChange", "selectionChange", "panelWidth", "formControlName"], [4, "ngIf"], ["type", "text", 1, "option-search-input", 3, "keyup", "keydown", "placeholder"], [4, "ngIf", "ngIfElse"], [1, "filter-option", 3, "disabled", "value"], ["mat-icon-button", "", 3, "click"], [1, "material-icons-outlined"], ["class", "text-s", 3, "removed", 4, "ngFor", "ngForOf"], [1, "text-s", 3, "removed"], ["matChipRemove", ""], [1, "chip-filter-title"], [1, "chip-value", "semi-bold"]], template: function FilterBarComponent_Template(rf, ctx) { if (rf & 1) {
412
- i0.ɵɵtemplate(0, FilterBarComponent_div_0_Template, 8, 6, "div", 4);
436
+ } }, inputs: { settings: "settings", filterRowVisible: "filterRowVisible" }, outputs: { filterBarChange: "filterBarChange" }, decls: 3, vars: 2, consts: [["filterWrapper", ""], ["optionSearchInput", ""], ["sortedValuesByProperty", ""], ["defaultCase", ""], ["class", "filter-row", 4, "ngIf"], [4, "ngFor", "ngForOf"], [1, "filter-row"], ["fxLayout", "row", 1, "filter-wrapper", 3, "formGroup"], ["fxFlex", "", "class", "filter-bar-search-input", 4, "ngIf"], [3, "formGroup"], [4, "ngIf"], ["fxFlex", "", 1, "filter-bar-search-input"], ["matPrefix", "", 1, "material-icons-outlined"], ["matSuffix", "", "class", "material-icons-outlined", 3, "matTooltip", 4, "ngIf"], ["matInput", "", 1, "search-input", 3, "placeholder", "formControlName"], ["matSuffix", "", 1, "material-icons-outlined", 3, "matTooltip"], ["multiple", "", 3, "openedChange", "selectionChange", "panelWidth", "formControlName"], ["type", "text", 1, "option-search-input", 3, "keyup", "keydown", "placeholder"], [4, "ngIf", "ngIfElse"], [1, "filter-option", 3, "disabled", "value"], ["mat-icon-button", "", 3, "click"], [1, "material-icons-outlined"], ["class", "text-s", 3, "removed", 4, "ngFor", "ngForOf"], [1, "text-s", 3, "removed"], ["matChipRemove", ""], [1, "chip-filter-title"], [1, "chip-value", "semi-bold"]], template: function FilterBarComponent_Template(rf, ctx) { if (rf & 1) {
437
+ i0.ɵɵtemplate(0, FilterBarComponent_div_0_Template, 7, 5, "div", 4);
413
438
  i0.ɵɵelementStart(1, "mat-chip-listbox");
414
439
  i0.ɵɵtemplate(2, FilterBarComponent_div_2_Template, 2, 1, "div", 5);
415
440
  i0.ɵɵelementEnd();
@@ -417,11 +442,11 @@ export class FilterBarComponent {
417
442
  i0.ɵɵproperty("ngIf", ctx.filterRowVisible);
418
443
  i0.ɵɵadvance(2);
419
444
  i0.ɵɵproperty("ngForOf", ctx.settings == null ? null : ctx.settings.filters);
420
- } }, dependencies: [i2.NgClass, i2.NgForOf, i2.NgIf, i3.MatInput, i4.MatFormField, i4.MatLabel, i4.MatPrefix, i4.MatSuffix, i5.DefaultLayoutDirective, i5.DefaultFlexDirective, i6.DefaultClassDirective, i7.MatSelect, i8.MatOption, i9.DefaultValueAccessor, i9.NgControlStatus, i9.NgControlStatusGroup, i10.MatTooltip, i11.MatIconButton, i12.MatChipListbox, i12.MatChipOption, i12.MatChipRemove, i13.MatIcon, i9.FormGroupDirective, i9.FormControlName, i2.TitleCasePipe, i1.TranslatePipe, i14.SortTranslationsByPropertyPipe, i15.SortAlphabeticallyPipe], styles: ["[_nghost-%COMP%]{display:inline-block}.filter-row[_ngcontent-%COMP%]{display:flex;background-color:var(--base-95);min-height:40px;min-width:100%;border-radius:.5rem;padding:.5rem .75rem;max-width:100%;align-items:center;margin-bottom:.5rem}.option-search-input[_ngcontent-%COMP%]{font-size:14px;width:100%;padding:.5rem 1rem;margin-bottom:.5rem}.search-input[_ngcontent-%COMP%]{background-color:unset;border:none}.filter-bar-search-input[_ngcontent-%COMP%]{width:100%;margin-right:5px}.filter-bar-search-input[_ngcontent-%COMP%] .material-icons-outlined{vertical-align:bottom;padding:0 5px}.material-icons-outlined[_ngcontent-%COMP%]{color:var(--base-40)}.filter-wrapper[_ngcontent-%COMP%]{max-width:100%;overflow-x:hidden;overflow-y:hidden;display:flex;flex:1}.mat-mdc-chip.mat-mdc-standard-chip[_ngcontent-%COMP%]{background-color:var(--base-95);padding-left:.5em;padding-right:.75em;border:.5px solid var(--base-70)}.mat-mdc-chip.mat-mdc-standard-chip[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{display:inline-block}.mat-mdc-chip.mat-mdc-standard-chip[_ngcontent-%COMP%] .chip-filter-title[_ngcontent-%COMP%] + .chip-value[_ngcontent-%COMP%]{margin-left:.25rem}.chip-filter-title[_ngcontent-%COMP%]{margin-left:.5em}.hidden[_ngcontent-%COMP%]{display:none}[_nghost-%COMP%] .mat-mdc-form-field-focus-overlay, [_nghost-%COMP%] .mdc-text-field--filled:not(.mdc-text-field--disabled){background-color:var(--base-95)}[_nghost-%COMP%] .mdc-text-field--focused{background-color:var(--base-70)!important}[_nghost-%COMP%] .mat-mdc-chip-graphic{display:none}[_nghost-%COMP%] .mat-mdc-chip-remove{color:var(--base-40)!important}[_nghost-%COMP%] .search-input, [_nghost-%COMP%] .mat-mdc-select-placeholder, [_nghost-%COMP%] .mat-mdc-select-value-text, [_nghost-%COMP%] .mdc-floating-label{font-size:14px!important}[_nghost-%COMP%] .mdc-text-field--filled{--mdc-filled-text-field-active-indicator-height: 0;--mdc-filled-text-field-focus-active-indicator-height: 0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}[_nghost-%COMP%] .mat-mdc-text-field-wrapper:hover{background-color:var(--base-70)!important;transition:.1s}[_nghost-%COMP%] .mat-mdc-form-field-subscript-wrapper{display:none}[_nghost-%COMP%] .mdc-floating-label--float-above{margin-top:3px}"] }); }
445
+ } }, dependencies: [i2.NgForOf, i2.NgIf, i3.MatInput, i4.MatFormField, i4.MatLabel, i4.MatPrefix, i4.MatSuffix, i5.DefaultLayoutDirective, i5.DefaultFlexDirective, i6.MatSelect, i7.MatOption, i8.DefaultValueAccessor, i8.NgControlStatus, i8.NgControlStatusGroup, i9.MatTooltip, i10.MatIconButton, i11.MatChipListbox, i11.MatChipOption, i11.MatChipRemove, i12.MatIcon, i8.FormGroupDirective, i8.FormControlName, i2.TitleCasePipe, i1.TranslatePipe, i13.SortTranslationsByPropertyPipe, i14.SortAlphabeticallyPipe], styles: ["[_nghost-%COMP%]{display:inline-block}.filter-row[_ngcontent-%COMP%]{display:flex;background-color:var(--base-95);min-height:40px;min-width:100%;border-radius:.5rem;padding:.5rem .75rem;max-width:100%;align-items:center;margin-bottom:.5rem}.option-search-input[_ngcontent-%COMP%]{font-size:14px;width:100%;padding:.5rem 1rem;margin-bottom:.5rem}.search-input[_ngcontent-%COMP%]{background-color:unset;border:none}.filter-bar-search-input[_ngcontent-%COMP%]{width:100%;margin-right:5px;min-width:150px}.filter-bar-search-input[_ngcontent-%COMP%] .material-icons-outlined{vertical-align:bottom;padding:0 5px}.material-icons-outlined[_ngcontent-%COMP%]{color:var(--base-40)}.filter-wrapper[_ngcontent-%COMP%]{max-width:100%;overflow-x:hidden;overflow-y:hidden;display:flex;flex:1}.mat-mdc-chip.mat-mdc-standard-chip[_ngcontent-%COMP%]{background-color:var(--base-95);padding-left:.5em;padding-right:.75em;border:.5px solid var(--base-70)}.mat-mdc-chip.mat-mdc-standard-chip[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{display:inline-block}.mat-mdc-chip.mat-mdc-standard-chip[_ngcontent-%COMP%] .chip-filter-title[_ngcontent-%COMP%] + .chip-value[_ngcontent-%COMP%]{margin-left:.25rem}.chip-filter-title[_ngcontent-%COMP%]{margin-left:.5em}.hidden[_ngcontent-%COMP%]{display:none}[_nghost-%COMP%] .mat-mdc-form-field-focus-overlay, [_nghost-%COMP%] .mdc-text-field--filled:not(.mdc-text-field--disabled){background-color:var(--base-95)}[_nghost-%COMP%] .mdc-text-field--focused{background-color:var(--base-70)!important}[_nghost-%COMP%] .mat-mdc-chip-graphic{display:none}[_nghost-%COMP%] .mat-mdc-chip-remove{color:var(--base-40)!important}[_nghost-%COMP%] .search-input, [_nghost-%COMP%] .mat-mdc-select-placeholder, [_nghost-%COMP%] .mat-mdc-select-value-text, [_nghost-%COMP%] .mdc-floating-label{font-size:14px!important}[_nghost-%COMP%] .mdc-text-field--filled{--mdc-filled-text-field-active-indicator-height: 0;--mdc-filled-text-field-focus-active-indicator-height: 0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}[_nghost-%COMP%] .mat-mdc-text-field-wrapper:hover{background-color:var(--base-70)!important;transition:.1s}[_nghost-%COMP%] .mat-mdc-form-field-subscript-wrapper{display:none}[_nghost-%COMP%] .mdc-floating-label--float-above{margin-top:3px}"] }); }
421
446
  }
422
447
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(FilterBarComponent, [{
423
448
  type: Component,
424
- args: [{ selector: 'tld-filter-bar', template: "<div class=\"filter-row\" *ngIf=\"filterRowVisible\">\r\n <div fxLayout=\"row\" class=\"filter-wrapper\" #filterWrapper [formGroup]=\"form\">\r\n <mat-form-field fxFlex *ngIf=\"showSearch && !filterOverflow || activeFilterIndex === searchIndex\" class=\"filter-bar-search-input\">\r\n <span matPrefix class=\"material-icons-outlined\">\r\n {{prefixIcon}}\r\n </span>\r\n <span matSuffix class=\"material-icons-outlined\" *ngIf=\"showSuffixIcon\" [matTooltip]=\"searchTooltip | translate\">\r\n {{suffixIcon}}\r\n </span>\r\n <input class=\"search-input\" matInput [placeholder]=\"searchTitle | translate\"\r\n [formControlName]=\"inputFormControlName\">\r\n </mat-form-field>\r\n <ng-container [formGroup]=\"filterFormGroup\">\r\n\r\n <mat-form-field [ngClass]=\"{'hidden': filterOverflow && activeFilterIndex !== i}\" *ngFor=\"let filter of settings?.filters; let i = index\">\r\n <mat-label>{{filter.title | translate}}</mat-label>\r\n <mat-select \r\n multiple \r\n [panelWidth]=\"filter?.maxPanelWidth ?? 'auto'\" \r\n [formControlName]=\"filter.fieldName\" \r\n (openedChange)=\"$event === true ? focusOptionSearchInput(filter, i) : clearOptionSearchInput(filter, i)\"\r\n (selectionChange)=\"selectEvent($event, filter)\" \r\n >\r\n <ng-container *ngIf=\"filter?.search?.placeholder\">\r\n <input #optionSearchInput class=\"option-search-input\" type=\"text\" [placeholder]=\"filter.search?.placeholder ?? '' | translate\" (keyup)=\"filterOptions($event, filter)\" (keydown)=\"$event.stopPropagation()\">\r\n </ng-container>\r\n \r\n <ng-container *ngIf=\"filter.values.length\">\r\n <ng-container *ngIf=\"filter.translated; else sortedValuesByProperty\">\r\n <ng-container *ngFor=\"let value of (filter.search?.filteredValues ?? filter.values) | sortAlphabetically:'key'\">\r\n <mat-option [class.hidden]=\"filter.search?.searchCriteria && value.isSelected && !value.matchesSearchCriteria\" class=\"filter-option\" [disabled]=\"filter.singleSelection?.selected && filter.singleSelection?.value !== value.value\" [value]=\"value\">\r\n {{ filter.disableTitleCase ? value.key : (value.key | titlecase) }}\r\n </mat-option>\r\n </ng-container>\r\n </ng-container>\r\n \r\n <ng-template #sortedValuesByProperty>\r\n <ng-container *ngFor=\"let value of (filter.search?.filteredValues ?? filter.values) | sortTranslationsByProperty:'key':'value'\">\r\n <mat-option [class.hidden]=\"filter.search?.searchCriteria && value.isSelected && !value.matchesSearchCriteria\" class=\"filter-option\" [disabled]=\"filter.singleSelection?.selected && filter.singleSelection?.value !== value.value\" [value]=\"value\">\r\n <ng-container *ngIf=\"!filter.disableTitleCase; else defaultCase\">\r\n {{ value.key | translate : { default: value.value | titlecase } }}\r\n </ng-container>\r\n \r\n <ng-template #defaultCase>\r\n {{ value.key | translate : { default: value.value } }} \r\n </ng-template>\r\n </mat-option>\r\n </ng-container>\r\n </ng-template>\r\n </ng-container>\r\n </mat-select>\r\n </mat-form-field>\r\n </ng-container>\r\n </div>\r\n <button mat-icon-button (click)=\"switchLeft()\" *ngIf=\"filterOverflow\">\r\n <span class=\"material-icons-outlined\">\r\n arrow_back_ios\r\n </span>\r\n </button>\r\n <button mat-icon-button *ngIf=\"filterOverflow\" (click)=\"switchRight()\">\r\n <span class=\"material-icons-outlined\">\r\n arrow_forward_ios\r\n </span>\r\n </button>\r\n</div>\r\n<mat-chip-listbox>\r\n <div *ngFor=\"let filter of settings?.filters\">\r\n <mat-chip-option *ngFor=\"let filterValue of filterFormGroupValue[filter.fieldName]; let ix=index\"\r\n (removed)=\"removeFilter(filter.fieldName, ix)\" class=\"text-s\">\r\n <button matChipRemove>\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n <span class=\"chip-filter-title\">{{filter.title | translate}}:</span>\r\n <span class=\"chip-value semi-bold\"> {{(filter.translated ? filterValue.key : filterValue.key | translate : {default: filterValue.value}) | titlecase\r\n }}</span>\r\n </mat-chip-option>\r\n </div>\r\n</mat-chip-listbox>\r\n", styles: [":host{display:inline-block}.filter-row{display:flex;background-color:var(--base-95);min-height:40px;min-width:100%;border-radius:.5rem;padding:.5rem .75rem;max-width:100%;align-items:center;margin-bottom:.5rem}.option-search-input{font-size:14px;width:100%;padding:.5rem 1rem;margin-bottom:.5rem}.search-input{background-color:unset;border:none}.filter-bar-search-input{width:100%;margin-right:5px}.filter-bar-search-input::ng-deep .material-icons-outlined{vertical-align:bottom;padding:0 5px}.material-icons-outlined{color:var(--base-40)}.filter-wrapper{max-width:100%;overflow-x:hidden;overflow-y:hidden;display:flex;flex:1}.mat-mdc-chip.mat-mdc-standard-chip{background-color:var(--base-95);padding-left:.5em;padding-right:.75em;border:.5px solid var(--base-70)}.mat-mdc-chip.mat-mdc-standard-chip span{display:inline-block}.mat-mdc-chip.mat-mdc-standard-chip .chip-filter-title+.chip-value{margin-left:.25rem}.chip-filter-title{margin-left:.5em}.hidden{display:none}:host ::ng-deep .mat-mdc-form-field-focus-overlay,:host ::ng-deep .mdc-text-field--filled:not(.mdc-text-field--disabled){background-color:var(--base-95)}:host ::ng-deep .mdc-text-field--focused{background-color:var(--base-70)!important}:host ::ng-deep .mat-mdc-chip-graphic{display:none}:host ::ng-deep .mat-mdc-chip-remove{color:var(--base-40)!important}:host ::ng-deep .search-input,:host ::ng-deep .mat-mdc-select-placeholder,:host ::ng-deep .mat-mdc-select-value-text,:host ::ng-deep .mdc-floating-label{font-size:14px!important}:host ::ng-deep .mdc-text-field--filled{--mdc-filled-text-field-active-indicator-height: 0;--mdc-filled-text-field-focus-active-indicator-height: 0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}:host ::ng-deep .mat-mdc-text-field-wrapper:hover{background-color:var(--base-70)!important;transition:.1s}:host ::ng-deep .mat-mdc-form-field-subscript-wrapper{display:none}:host ::ng-deep .mdc-floating-label--float-above{margin-top:3px}\n"] }]
449
+ args: [{ selector: 'tld-filter-bar', template: "<div class=\"filter-row\" *ngIf=\"filterRowVisible\">\r\n <div fxLayout=\"row\" class=\"filter-wrapper\" #filterWrapper [formGroup]=\"form\">\r\n <mat-form-field fxFlex *ngIf=\"showSearch && !filterOverflow || activeFilterIndex === searchIndex\" class=\"filter-bar-search-input\">\r\n <span matPrefix class=\"material-icons-outlined\">\r\n {{prefixIcon}}\r\n </span>\r\n <span matSuffix class=\"material-icons-outlined\" *ngIf=\"showSuffixIcon\" [matTooltip]=\"searchTooltip | translate\">\r\n {{suffixIcon}}\r\n </span>\r\n <input class=\"search-input\" matInput [placeholder]=\"searchTitle | translate\"\r\n [formControlName]=\"inputFormControlName\">\r\n </mat-form-field>\r\n <ng-container [formGroup]=\"filterFormGroup\">\r\n\r\n <mat-form-field *ngFor=\"let filter of currentFilters; let i = index\">\r\n <mat-label>{{filter.title | translate}}</mat-label>\r\n <mat-select \r\n multiple \r\n [panelWidth]=\"filter?.maxPanelWidth ?? 'auto'\" \r\n [formControlName]=\"filter.fieldName\" \r\n (openedChange)=\"$event === true ? focusOptionSearchInput(filter, i) : clearOptionSearchInput(filter, i)\"\r\n (selectionChange)=\"selectEvent($event, filter)\" \r\n >\r\n <ng-container *ngIf=\"filter?.search?.placeholder\">\r\n <input #optionSearchInput class=\"option-search-input\" type=\"text\" [placeholder]=\"filter.search?.placeholder ?? '' | translate\" (keyup)=\"filterOptions($event, filter)\" (keydown)=\"$event.stopPropagation()\">\r\n </ng-container>\r\n \r\n <ng-container *ngIf=\"filter.values.length\">\r\n <ng-container *ngIf=\"filter.translated; else sortedValuesByProperty\">\r\n <ng-container *ngFor=\"let value of (filter.search?.filteredValues ?? filter.values) | sortAlphabetically:'key'\">\r\n <mat-option [class.hidden]=\"filter.search?.searchCriteria && value.isSelected && !value.matchesSearchCriteria\" class=\"filter-option\" [disabled]=\"filter.singleSelection?.selected && filter.singleSelection?.value !== value.value\" [value]=\"value\">\r\n {{ filter.disableTitleCase ? value.key : (value.key | titlecase) }}\r\n </mat-option>\r\n </ng-container>\r\n </ng-container>\r\n \r\n <ng-template #sortedValuesByProperty>\r\n <ng-container *ngFor=\"let value of (filter.search?.filteredValues ?? filter.values) | sortTranslationsByProperty:'key':'value'\">\r\n <mat-option [class.hidden]=\"filter.search?.searchCriteria && value.isSelected && !value.matchesSearchCriteria\" class=\"filter-option\" [disabled]=\"filter.singleSelection?.selected && filter.singleSelection?.value !== value.value\" [value]=\"value\">\r\n <ng-container *ngIf=\"!filter.disableTitleCase; else defaultCase\">\r\n {{ value.key | translate : { default: value.value | titlecase } }}\r\n </ng-container>\r\n \r\n <ng-template #defaultCase>\r\n {{ value.key | translate : { default: value.value } }} \r\n </ng-template>\r\n </mat-option>\r\n </ng-container>\r\n </ng-template>\r\n </ng-container>\r\n </mat-select>\r\n </mat-form-field>\r\n </ng-container>\r\n </div>\r\n <ng-container *ngIf=\"filterOverflow\">\r\n <button mat-icon-button (click)=\"switchLeft()\">\r\n <span class=\"material-icons-outlined\">\r\n arrow_back_ios\r\n </span>\r\n </button>\r\n <button mat-icon-button (click)=\"switchRight()\">\r\n <span class=\"material-icons-outlined\">\r\n arrow_forward_ios\r\n </span>\r\n </button>\r\n </ng-container>\r\n</div>\r\n<mat-chip-listbox>\r\n <div *ngFor=\"let filter of settings?.filters\">\r\n <mat-chip-option *ngFor=\"let filterValue of filterFormGroupValue[filter.fieldName]; let ix=index\"\r\n (removed)=\"removeFilter(filter.fieldName, ix)\" class=\"text-s\">\r\n <button matChipRemove>\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n <span class=\"chip-filter-title\">{{filter.title | translate}}:</span>\r\n <span class=\"chip-value semi-bold\"> {{(filter.translated ? filterValue.key : filterValue.key | translate : {default: filterValue.value}) | titlecase\r\n }}</span>\r\n </mat-chip-option>\r\n </div>\r\n</mat-chip-listbox>\r\n", styles: [":host{display:inline-block}.filter-row{display:flex;background-color:var(--base-95);min-height:40px;min-width:100%;border-radius:.5rem;padding:.5rem .75rem;max-width:100%;align-items:center;margin-bottom:.5rem}.option-search-input{font-size:14px;width:100%;padding:.5rem 1rem;margin-bottom:.5rem}.search-input{background-color:unset;border:none}.filter-bar-search-input{width:100%;margin-right:5px;min-width:150px}.filter-bar-search-input::ng-deep .material-icons-outlined{vertical-align:bottom;padding:0 5px}.material-icons-outlined{color:var(--base-40)}.filter-wrapper{max-width:100%;overflow-x:hidden;overflow-y:hidden;display:flex;flex:1}.mat-mdc-chip.mat-mdc-standard-chip{background-color:var(--base-95);padding-left:.5em;padding-right:.75em;border:.5px solid var(--base-70)}.mat-mdc-chip.mat-mdc-standard-chip span{display:inline-block}.mat-mdc-chip.mat-mdc-standard-chip .chip-filter-title+.chip-value{margin-left:.25rem}.chip-filter-title{margin-left:.5em}.hidden{display:none}:host ::ng-deep .mat-mdc-form-field-focus-overlay,:host ::ng-deep .mdc-text-field--filled:not(.mdc-text-field--disabled){background-color:var(--base-95)}:host ::ng-deep .mdc-text-field--focused{background-color:var(--base-70)!important}:host ::ng-deep .mat-mdc-chip-graphic{display:none}:host ::ng-deep .mat-mdc-chip-remove{color:var(--base-40)!important}:host ::ng-deep .search-input,:host ::ng-deep .mat-mdc-select-placeholder,:host ::ng-deep .mat-mdc-select-value-text,:host ::ng-deep .mdc-floating-label{font-size:14px!important}:host ::ng-deep .mdc-text-field--filled{--mdc-filled-text-field-active-indicator-height: 0;--mdc-filled-text-field-focus-active-indicator-height: 0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}:host ::ng-deep .mat-mdc-text-field-wrapper:hover{background-color:var(--base-70)!important;transition:.1s}:host ::ng-deep .mat-mdc-form-field-subscript-wrapper{display:none}:host ::ng-deep .mdc-floating-label--float-above{margin-top:3px}\n"] }]
425
450
  }], () => [{ type: i0.ChangeDetectorRef }, { type: i1.TranslateService }], { filterWrapper: [{
426
451
  type: ViewChild,
427
452
  args: ["filterWrapper"]
@@ -439,4 +464,4 @@ export class FilterBarComponent {
439
464
  type: Output
440
465
  }] }); })();
441
466
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(FilterBarComponent, { className: "FilterBarComponent", filePath: "lib\\filter-bar\\filter-bar.component.ts", lineNumber: 16 }); })();
442
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLWJhci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtY29tbW9uL3NyYy9saWIvZmlsdGVyLWJhci9maWx0ZXItYmFyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1jb21tb24vc3JjL2xpYi9maWx0ZXItYmFyL2ZpbHRlci1iYXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFvQyxTQUFTLEVBQWMsWUFBWSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9LLE9BQU8sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7SUNLbEQsZ0NBQWdIOztJQUM5RyxZQUNGO0lBQUEsaUJBQU87OztJQUZnRSx1RUFBd0M7SUFDN0csZUFDRjtJQURFLGtEQUNGOzs7SUFMQSxBQURGLDBDQUFrSSxlQUNoRjtJQUM5QyxZQUNGO0lBQUEsaUJBQU87SUFDUCw2RkFBZ0g7SUFHaEgsNEJBQzJDOztJQUM3QyxpQkFBaUI7OztJQVBiLGVBQ0Y7SUFERSxrREFDRjtJQUNpRCxjQUFvQjtJQUFwQiw0Q0FBb0I7SUFHaEMsY0FBdUM7SUFDMUUsQUFEbUMsc0VBQXVDLGdEQUNsQzs7OztJQWF0Qyw2QkFBa0Q7SUFDaEQsb0NBQTRNOztJQUFyQyxBQUF4QyxvUUFBUyx1Q0FBNkIsS0FBQyx1S0FBWSx3QkFBd0IsS0FBQztJQUEzTSxpQkFBNE07Ozs7O0lBQTFJLGNBQTREO0lBQTVELCtLQUE0RDs7O0lBSzVILDZCQUFnSDtJQUM5RyxzQ0FBb1A7SUFDbFAsWUFDRjs7SUFBQSxpQkFBYTs7Ozs7SUFGRCxjQUFrRztJQUFsRyx1SkFBa0c7SUFBc0gsQUFBL0YsNk1BQThGLG1C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QUFLLENBQUMsQ0FBQTtZQUMxRyxDQUFDO1lBQ0QsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3JCLENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQzttRkFwTVUsa0JBQWtCO29FQUFsQixrQkFBa0I7Ozs7Ozs7O1lBQWxCLHlGQUFBLGNBQVUsK0JBQVE7O1lDZi9CLG1FQUFpRDtZQWlFakQsd0NBQWtCO1lBQ2hCLG1FQUE4QztZQVdoRCxpQkFBbUI7O1lBN0VNLDJDQUFzQjtZQWtFckIsZUFBb0I7WUFBcEIsNEVBQW9COzs7aUZEbkRqQyxrQkFBa0I7Y0FOOUIsU0FBUzsyQkFFRSxnQkFBZ0I7aUZBS0UsYUFBYTtrQkFBeEMsU0FBUzttQkFBQyxlQUFlO1lBQ1Msa0JBQWtCO2tCQUFwRCxZQUFZO21CQUFDLG1CQUFtQjtZQUVqQyxRQUFRO2tCQURQLFlBQVk7bUJBQUMsZUFBZSxFQUFFLEVBQUU7WUFLeEIsUUFBUTtrQkFBaEIsS0FBSztZQUNPLGdCQUFnQjtrQkFBNUIsS0FBSztZQU1JLGVBQWU7a0JBQXhCLE1BQU07O2tGQWZJLGtCQUFrQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSG9zdExpc3RlbmVyLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCwgVmlld0NoaWxkLCBWaWV3Q2hpbGRyZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IEZpbHRlckJhckZpbHRlciwgRmlsdGVyQmFyRmlsdGVySXRlbSB9IGZyb20gJy4vbW9kZWxzJztcclxuaW1wb3J0IHsgRmlsdGVyQmFyQ2hhbmdlRXZlbnQgfSBmcm9tICcuL21vZGVscy9maWx0ZXItYmFyLWNoYW5nZS1ldmVudC5tb2RlbCc7XHJcbmltcG9ydCB7IEZpbHRlckJhclNldHRpbmdzIH0gZnJvbSAnLi9tb2RlbHMvZmlsdGVyLWJhci1zZXR0aW5ncy5tb2RlbCc7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcclxuaW1wb3J0IHsgTWF0U2VsZWN0Q2hhbmdlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2VsZWN0JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yXHJcbiAgc2VsZWN0b3I6ICd0bGQtZmlsdGVyLWJhcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2ZpbHRlci1iYXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2ZpbHRlci1iYXIuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgRmlsdGVyQmFyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xyXG4gIEBWaWV3Q2hpbGQoXCJmaWx0ZXJXcmFwcGVyXCIpIGZpbHRlcldyYXBwZXIhOiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGRyZW4oJ29wdGlvblNlYXJjaElucHV0Jykgb3B0aW9uU2VhcmNoSW5wdXRzITogRWxlbWVudFJlZltdO1xyXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpyZXNpemUnLCBbXSlcclxuICBvblJlc2l6ZSgpIHtcclxuICAgIHRoaXMuY2hlY2tPdmVyZmxvdygpO1xyXG4gIH1cclxuXHJcbiAgQElucHV0KCkgc2V0dGluZ3MhOiBGaWx0ZXJCYXJTZXR0aW5ncztcclxuICBASW5wdXQoKSBzZXQgZmlsdGVyUm93VmlzaWJsZSh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fZmlsdGVyUm93VmlzaWJsZSA9IHZhbHVlO1xyXG4gICAgdGhpcy5jZHJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB0aGlzLmNoZWNrT3ZlcmZsb3coKTtcclxuICB9XHJcblxyXG4gIEBPdXRwdXQoKSBmaWx0ZXJCYXJDaGFuZ2U6IEV2ZW50RW1pdHRlcjxGaWx0ZXJCYXJDaGFuZ2VFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPEZpbHRlckJhckNoYW5nZUV2ZW50PigpO1xyXG5cclxuICBwcml2YXRlIF9pbnB1dFRleHQgPSBcIlwiO1xyXG4gIHByaXZhdGUgX2ZpbHRlclJvd1Zpc2libGUhOiBib29sZWFuO1xyXG4gIHByaXZhdGUgZm9ybUNoYW5nZXNTdWJzY3JpcHRpb24hOiBTdWJzY3JpcHRpb247XHJcblxyXG4gIC8qKiBUbyBoaWRlIGZpbHRlcnMsIGJ1dCBsZWF2ZSBjaGlwcyB2aXNpYmxlICovXHJcbiAgcmVhZG9ubHkgaW5wdXRGb3JtQ29udHJvbE5hbWUgPSBcImlucHV0XCI7XHJcbiAgcmVhZG9ubHkgZmlsdGVyRm9ybUdyb3VwID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcbiAgcmVhZG9ubHkgZm9ybSA9IG5ldyBGb3JtR3JvdXAoe1xyXG4gICAgW3RoaXMuaW5wdXRGb3JtQ29udHJvbE5hbWVdOiBuZXcgRm9ybUNvbnRyb2woXCJcIiksXHJcbiAgICBmaWx0ZXJzOiB0aGlzLmZpbHRlckZvcm1Hcm91cFxyXG4gIH0pO1xyXG5cclxuICBzZWFyY2hUaXRsZSE6IHN0cmluZztcclxuICBzZWFyY2hUb29sdGlwITogc3RyaW5nO1xyXG4gIHN1ZmZpeEljb24hOiBzdHJpbmc7XHJcbiAgcHJlZml4SWNvbiE6IHN0cmluZztcclxuICBzaG93U3VmZml4SWNvbiE6IGJvb2xlYW47XHJcbiAgZmlsdGVyczogRmlsdGVyQmFyQ2hhbmdlRXZlbnQgPSB7XHJcbiAgICBmaWx0ZXJzOiB7fSxcclxuICAgIGlucHV0OiBcIlwiXHJcbiAgfTtcclxuXHJcbiAgZmlsdGVyT3ZlcmZsb3cgPSBmYWxzZTtcclxuICBhY3RpdmVGaWx0ZXJJbmRleCA9IDA7XHJcblxyXG4gIC8vIHdoZW4gdG8gc2hvdyBmaWx0ZXIgYnkgbmFtZSBvciBpZCBvbiBtb2JpbGVcclxuICBzZWFyY2hJbmRleCA9IC0xO1xyXG5cclxuICAvLyBnZXR0ZXIgZm9yIGNsZWFuZXIgdGVtcGxhdGUgaHRtbFxyXG4gIGdldCBmaWx0ZXJGb3JtR3JvdXBWYWx1ZSgpOiB7IFtrZXk6IHN0cmluZ106IEZpbHRlckJhckZpbHRlckl0ZW1bXSB9IHtcclxuICAgIHJldHVybiB0aGlzLmZpbHRlckZvcm1Hcm91cC52YWx1ZTtcclxuICB9XHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9hZGphY2VudC1vdmVybG9hZC1zaWduYXR1cmVzXHJcbiAgZ2V0IGZpbHRlclJvd1Zpc2libGUoKSB7IHJldHVybiB0aGlzLl9maWx0ZXJSb3dWaXNpYmxlOyB9XHJcbiAgZ2V0IGlucHV0VGV4dCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9pbnB1dFRleHQ7XHJcbiAgfVxyXG4gIGdldCBzaG93U2VhcmNoKCkge1xyXG4gICAgcmV0dXJuICF0aGlzLnNldHRpbmdzPy5oaWRlU2VhcmNoO1xyXG4gIH1cclxuICBnZXQgb3V0cHV0RmlsdGVyS2V5QW5kVmFsdWUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zZXR0aW5ncz8ub3V0cHV0RmlsdGVyS2V5QW5kVmFsdWU7XHJcbiAgfVxyXG5cclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2FkamFjZW50LW92ZXJsb2FkLXNpZ25hdHVyZXNcclxuICBzZXQgaW5wdXRUZXh0KHZhbHVlKSB7XHJcbiAgICB0aGlzLl9pbnB1dFRleHQgPSB2YWx1ZTtcclxuICAgIHRoaXMuZmlsdGVycy5pbnB1dCA9IHRoaXMuX2lucHV0VGV4dDtcclxuICAgIHRoaXMuZW1pdEZpbHRlcnMoKTtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY2RyZWY6IENoYW5nZURldGVjdG9yUmVmLCBwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSkgeyB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5zZXR0aW5ncy5maWx0ZXJzPy5mb3JFYWNoKChmaWVsZCkgPT4ge1xyXG4gICAgICB0aGlzLmZpbHRlckZvcm1Hcm91cC5hZGRDb250cm9sKGZpZWxkLmZpZWxkTmFtZSwgbmV3IEZvcm1Db250cm9sKFtdKSk7XHJcbiAgICB9KVxyXG5cclxuICAgIHRoaXMuc3Vic2NyaWJlVG9Gb3JtVmFsdWVDaGFuZ2VzKCk7XHJcbiAgICB0aGlzLnNlYXJjaFRvb2x0aXAgPSB0aGlzLnNldHRpbmdzPy5zZWFyY2hUb29sdGlwID8/ICdGSUxURVJfQkFSLlNFQVJDSF9UT09MVElQJztcclxuICAgIHRoaXMuc2VhcmNoVGl0bGUgPSB0aGlzLnNldHRpbmdzPy5zZWFyY2hUaXRsZSA/PyAnRklMVEVSX0JBUi5TRUFSQ0gnO1xyXG4gICAgdGhpcy5wcmVmaXhJY29uID0gdGhpcy5zZXR0aW5ncz8ucHJlZml4SWNvbiA/PyBcImZpbHRlcl9hbHRcIjtcclxuICAgIHRoaXMuc3VmZml4SWNvbiA9IHRoaXMuc2V0dGluZ3M/LnN1ZmZpeEljb24gPz8gXCJxdWVzdGlvbl9tYXJrXCI7XHJcbiAgICB0aGlzLnNob3dTdWZmaXhJY29uID0gdGhpcy5zZXR0aW5ncz8uc2hvd1N1ZmZpeEljb24gPz8gdHJ1ZTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuY2hlY2tPdmVyZmxvdygpO1xyXG4gICAgdGhpcy5jZHJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZm9ybUNoYW5nZXNTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIGZvY3VzT3B0aW9uU2VhcmNoSW5wdXQoZmlsdGVyOiBGaWx0ZXJCYXJGaWx0ZXIsIGluZGV4OiBudW1iZXIpOiB2b2lkIHtcclxuICAgIGlmICghZmlsdGVyLnNlYXJjaD8ucGxhY2Vob2xkZXIgfHwgZmlsdGVyLnNlbGVjdGVkVmFsdWVzPy5sZW5ndGgpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMub3B0aW9uU2VhcmNoSW5wdXRzLmZpbmQoKF9pdGVtLCBpKSA9PiBpID09PSBpbmRleCk/Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcclxuXHJcbiAgICBpZiAoZmlsdGVyLm1heFBhbmVsV2lkdGggPT09ICcnICYmIGZpbHRlci5zZWFyY2gucGxhY2Vob2xkZXIpIHtcclxuICAgICAgdGhpcy5zZXRQYW5lbFdpZHRoKGZpbHRlcik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjbGVhck9wdGlvblNlYXJjaElucHV0KGZpbHRlcjogRmlsdGVyQmFyRmlsdGVyLCBpbmRleDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBpZiAoIWZpbHRlci5zZWFyY2g/LnBsYWNlaG9sZGVyKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBpbnB1dCA9IHRoaXMub3B0aW9uU2VhcmNoSW5wdXRzLmZpbmQoKF9pdGVtLCBpKSA9PiBpID09PSBpbmRleCk/Lm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICBpbnB1dC52YWx1ZSA9ICcnO1xyXG4gICAgZmlsdGVyLnNlYXJjaC5zZWFyY2hDcml0ZXJpYSA9ICcnO1xyXG4gICAgdGhpcy5maWx0ZXJPcHRpb25zKG51bGwsIGZpbHRlcik7XHJcbiAgfVxyXG5cclxuICBmaWx0ZXJPcHRpb25zKGV2ZW50OiBLZXlib2FyZEV2ZW50IHwgbnVsbCwgZmlsdGVyOiBGaWx0ZXJCYXJGaWx0ZXIpIHtcclxuICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50Py50YXJnZXQgYXMgSFRNTFRleHRBcmVhRWxlbWVudDtcclxuICAgIGZpbHRlci5zZWFyY2ghLnNlYXJjaENyaXRlcmlhID0gdGFyZ2V0Py52YWx1ZSA/PyAnJztcclxuICAgIHRoaXMuc2V0dGluZ3MuZmlsdGVycz8uZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpZiAoaXRlbS5maWVsZE5hbWUgPT09IGZpbHRlci5maWVsZE5hbWUgJiYgaXRlbS5zZWFyY2gpIHtcclxuICAgICAgICBpdGVtLnNlYXJjaC5maWx0ZXJlZFZhbHVlcyA9IGZpbHRlci52YWx1ZXMuZmlsdGVyKCh2YWx1ZSkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgdmFsdWVLZXkgPSBpdGVtLnRyYW5zbGF0ZWQgPyB2YWx1ZS5rZXkgOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KHZhbHVlLmtleSk7XHJcbiAgICAgICAgICBjb25zdCBtYXRjaGVzU2VhcmNoID0gdmFsdWVLZXkudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0YXJnZXQ/LnZhbHVlPy50b0xvd2VyQ2FzZSgpID8/ICcnKTtcclxuICAgICAgICAgIGNvbnN0IGlzU2VsZWN0ZWQgPSBmaWx0ZXIuc2VsZWN0ZWRWYWx1ZXM/LnNvbWUoKHNlbGVjdGVkVmFsdWUpID0+IHNlbGVjdGVkVmFsdWUua2V5ID09PSB2YWx1ZS5rZXkpO1xyXG4gICAgICAgICAgdmFsdWUuaXNTZWxlY3RlZCA9IGlzU2VsZWN0ZWQgPz8gZmFsc2U7XHJcbiAgICAgICAgICB2YWx1ZS5tYXRjaGVzU2VhcmNoQ3JpdGVyaWEgPSBtYXRjaGVzU2VhcmNoID8/IGZhbHNlO1xyXG4gICAgICAgICAgcmV0dXJuIG1hdGNoZXNTZWFyY2ggfHwgaXNTZWxlY3RlZDtcclxuICAgICAgICB9KVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHNlbGVjdEV2ZW50KGV2ZW50OiBNYXRTZWxlY3RDaGFuZ2UsIGZpbHRlcjogRmlsdGVyQmFyRmlsdGVyKSB7XHJcbiAgICBjb25zdCBzZXR0aW5nRmlsdGVyID0gdGhpcy5zZXR0aW5ncy5maWx0ZXJzPy5maW5kKChpdGVtKSA9PiBpdGVtLmZpZWxkTmFtZSA9PT0gZmlsdGVyLmZpZWxkTmFtZSkgYXMgRmlsdGVyQmFyRmlsdGVyO1xyXG4gICAgc2V0dGluZ0ZpbHRlci5zZWxlY3RlZFZhbHVlcyA9IGV2ZW50LnZhbHVlO1xyXG4gIH1cclxuXHJcbiAgc2V0UGFuZWxXaWR0aChmaWx0ZXI6IEZpbHRlckJhckZpbHRlcik6IHZvaWQge1xyXG4gICAgLy8gV2UgbXVzdCBzYXZlIHBhbmVsIHdpZHRoLCBzbyBmaWx0ZXJpbmcgZG9lcyBub3QgYWZmZWN0IGl0YHMgc2l6ZS5cclxuICAgIGNvbnN0IHNlbGVjdFBhbmVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmNkay1vdmVybGF5LXBhbmUnKSBhcyBIVE1MRWxlbWVudDtcclxuICAgIGNvbnN0IHNlbGVjdFBhbmVsV2lkdGggPSBzZWxlY3RQYW5lbC5jbGllbnRXaWR0aCBhcyBudW1iZXI7XHJcbiAgICBjb25zdCBmaWx0ZXJPYmogPSB0aGlzLnNldHRpbmdzLmZpbHRlcnM/LmZpbmQoKGl0ZW0pID0+IGl0ZW0uZmllbGROYW1lID09PSBmaWx0ZXIuZmllbGROYW1lKSBhcyBGaWx0ZXJCYXJGaWx0ZXI7XHJcbiAgICBmaWx0ZXJPYmoubWF4UGFuZWxXaWR0aCA9IHNlbGVjdFBhbmVsV2lkdGg7XHJcbiAgICBzZWxlY3RQYW5lbC5zdHlsZS5taW5XaWR0aCA9IGAke3NlbGVjdFBhbmVsV2lkdGh9cHhgO1xyXG4gIH1cclxuXHJcbiAgZW1pdEZpbHRlcnMoKSB7XHJcbiAgICB0aGlzLmZpbHRlckJhckNoYW5nZS5uZXh0KHRoaXMuZmlsdGVycyk7XHJcbiAgfVxyXG5cclxuICBzd2l0Y2hSaWdodCgpIHtcclxuICAgIGlmICh0aGlzLnNldHRpbmdzPy5maWx0ZXJzICYmIHRoaXMuc2V0dGluZ3M/LmZpbHRlcnMubGVuZ3RoID09PSB0aGlzLmFjdGl2ZUZpbHRlckluZGV4ICsgMSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLmFjdGl2ZUZpbHRlckluZGV4ICs9IDE7XHJcbiAgfVxyXG5cclxuICBzd2l0Y2hMZWZ0KCkge1xyXG4gICAgaWYgKHRoaXMuYWN0aXZlRmlsdGVySW5kZXggPT09IHRoaXMuc2VhcmNoSW5kZXgpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5hY3RpdmVGaWx0ZXJJbmRleCAtPSAxO1xyXG4gIH1cclxuXHJcbiAgcmVtb3ZlRmlsdGVyKGtleTogc3RyaW5nLCBpeDogbnVtYmVyKSB7XHJcbiAgICBjb25zdCBjb250cm9sID0gdGhpcy5maWx0ZXJGb3JtR3JvdXAuZ2V0KGtleSk7XHJcblxyXG4gICAgaWYgKCFjb250cm9sKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBuZXdBcnJheSA9IGNvbnRyb2wudmFsdWUgYXMgW107XHJcbiAgICBuZXdBcnJheS5zcGxpY2UoaXgsIDEpO1xyXG4gICAgY29udHJvbC5zZXRWYWx1ZShuZXdBcnJheSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNoZWNrT3ZlcmZsb3coKSB7XHJcbiAgICBpZiAodGhpcy5maWx0ZXJXcmFwcGVyKSB7XHJcbiAgICAgIHRoaXMuZmlsdGVyT3ZlcmZsb3cgPSB0aGlzLmZpbHRlcldyYXBwZXIubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aCA8IHRoaXMuZmlsdGVyV3JhcHBlci5uYXRpdmVFbGVtZW50LnNjcm9sbFdpZHRoO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdWJzY3JpYmVUb0Zvcm1WYWx1ZUNoYW5nZXMoKSB7XHJcbiAgICB0aGlzLmZvcm1DaGFuZ2VzU3Vic2NyaXB0aW9uID0gdGhpcy5mb3JtLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICB0aGlzLmZpbHRlcnMgPSB7XHJcbiAgICAgICAgaW5wdXQ6IHRoaXMuZm9ybS52YWx1ZS5pbnB1dCA/PyBcIlwiLFxyXG4gICAgICAgIGZpbHRlcnM6IHt9XHJcbiAgICAgIH07XHJcblxyXG4gICAgICBmb3IgKGNvbnN0IGZpbHRlcktleSBpbiB0aGlzLmZvcm0udmFsdWUuZmlsdGVycykge1xyXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgICAgICAgY29uc3QgZmlsdGVyOiBGaWx0ZXJCYXJGaWx0ZXJJdGVtW10gPSAodGhpcy5mb3JtLnZhbHVlLmZpbHRlcnMgYXMgYW55KVtmaWx0ZXJLZXldIGFzIEZpbHRlckJhckZpbHRlckl0ZW1bXTtcclxuICAgICAgICB0aGlzLmZpbHRlcnMuZmlsdGVyc1tmaWx0ZXJLZXldID0gZmlsdGVyLm1hcCgoaXRlbSkgPT4gdGhpcy5vdXRwdXRGaWx0ZXJLZXlBbmRWYWx1ZSA/IGl0ZW0gOiBpdGVtLnZhbHVlKVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZW1pdEZpbHRlcnMoKTtcclxuICAgIH0pXHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJmaWx0ZXItcm93XCIgKm5nSWY9XCJmaWx0ZXJSb3dWaXNpYmxlXCI+XHJcbiAgPGRpdiBmeExheW91dD1cInJvd1wiIGNsYXNzPVwiZmlsdGVyLXdyYXBwZXJcIiAjZmlsdGVyV3JhcHBlciBbZm9ybUdyb3VwXT1cImZvcm1cIj5cclxuICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXggKm5nSWY9XCJzaG93U2VhcmNoICYmICFmaWx0ZXJPdmVyZmxvdyB8fCBhY3RpdmVGaWx0ZXJJbmRleCA9PT0gc2VhcmNoSW5kZXhcIiBjbGFzcz1cImZpbHRlci1iYXItc2VhcmNoLWlucHV0XCI+XHJcbiAgICAgIDxzcGFuIG1hdFByZWZpeCBjbGFzcz1cIm1hdGVyaWFsLWljb25zLW91dGxpbmVkXCI+XHJcbiAgICAgICAge3twcmVmaXhJY29ufX1cclxuICAgICAgPC9zcGFuPlxyXG4gICAgICA8c3BhbiBtYXRTdWZmaXggY2xhc3M9XCJtYXRlcmlhbC1pY29ucy1vdXRsaW5lZFwiICpuZ0lmPVwic2hvd1N1ZmZpeEljb25cIiBbbWF0VG9vbHRpcF09XCJzZWFyY2hUb29sdGlwIHwgdHJhbnNsYXRlXCI+XHJcbiAgICAgICAge3tzdWZmaXhJY29ufX1cclxuICAgICAgPC9zcGFuPlxyXG4gICAgICA8aW5wdXQgY2xhc3M9XCJzZWFyY2gtaW5wdXRcIiBtYXRJbnB1dCBbcGxhY2Vob2xkZXJdPVwic2VhcmNoVGl0bGUgfCB0cmFuc2xhdGVcIlxyXG4gICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiaW5wdXRGb3JtQ29udHJvbE5hbWVcIj5cclxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICA8bmctY29udGFpbmVyIFtmb3JtR3JvdXBdPVwiZmlsdGVyRm9ybUdyb3VwXCI+XHJcblxyXG4gICAgICA8bWF0LWZvcm0tZmllbGQgW25nQ2xhc3NdPVwieydoaWRkZW4nOiBmaWx0ZXJPdmVyZmxvdyAmJiBhY3RpdmVGaWx0ZXJJbmRleCAhPT0gaX1cIiAqbmdGb3I9XCJsZXQgZmlsdGVyIG9mIHNldHRpbmdzPy5maWx0ZXJzOyBsZXQgaSA9IGluZGV4XCI+XHJcbiAgICAgICAgPG1hdC1sYWJlbD57e2ZpbHRlci50aXRsZSB8IHRyYW5zbGF0ZX19PC9tYXQtbGFiZWw+XHJcbiAgICAgICAgPG1hdC1zZWxlY3QgXHJcbiAgICAgICAgICBtdWx0aXBsZSBcclxuICAgICAgICAgIFtwYW5lbFdpZHRoXT1cImZpbHRlcj8ubWF4UGFuZWxXaWR0aCA/PyAnYXV0bydcIiBcclxuICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiZmlsdGVyLmZpZWxkTmFtZVwiIFxyXG4gICAgICAgICAgKG9wZW5lZENoYW5nZSk9XCIkZXZlbnQgPT09IHRydWUgPyBmb2N1c09wdGlvblNlYXJjaElucHV0KGZpbHRlciwgaSkgOiBjbGVhck9wdGlvblNlYXJjaElucHV0KGZpbHRlciwgaSlcIlxyXG4gICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJzZWxlY3RFdmVudCgkZXZlbnQsIGZpbHRlcilcIiBcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZmlsdGVyPy5zZWFyY2g/LnBsYWNlaG9sZGVyXCI+XHJcbiAgICAgICAgICAgIDxpbnB1dCAjb3B0aW9uU2VhcmNoSW5wdXQgY2xhc3M9XCJvcHRpb24tc2VhcmNoLWlucHV0XCIgdHlwZT1cInRleHRcIiBbcGxhY2Vob2xkZXJdPVwiZmlsdGVyLnNlYXJjaD8ucGxhY2Vob2xkZXIgPz8gJycgfCB0cmFuc2xhdGVcIiAoa2V5dXApPVwiZmlsdGVyT3B0aW9ucygkZXZlbnQsIGZpbHRlcilcIiAoa2V5ZG93bik9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICBcclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmaWx0ZXIudmFsdWVzLmxlbmd0aFwiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZmlsdGVyLnRyYW5zbGF0ZWQ7IGVsc2Ugc29ydGVkVmFsdWVzQnlQcm9wZXJ0eVwiPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHZhbHVlIG9mIChmaWx0ZXIuc2VhcmNoPy5maWx0ZXJlZFZhbHVlcyA/PyBmaWx0ZXIudmFsdWVzKSB8IHNvcnRBbHBoYWJldGljYWxseTona2V5J1wiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gW2NsYXNzLmhpZGRlbl09XCJmaWx0ZXIuc2VhcmNoPy5zZWFyY2hDcml0ZXJpYSAmJiB2YWx1ZS5pc1NlbGVjdGVkICYmICF2YWx1ZS5tYXRjaGVzU2VhcmNoQ3JpdGVyaWFcIiBjbGFzcz1cImZpbHRlci1vcHRpb25cIiBbZGlzYWJsZWRdPVwiZmlsdGVyLnNpbmdsZVNlbGVjdGlvbj8uc2VsZWN0ZWQgJiYgZmlsdGVyLnNpbmdsZVNlbGVjdGlvbj8udmFsdWUgIT09IHZhbHVlLnZhbHVlXCIgW3ZhbHVlXT1cInZhbHVlXCI+XHJcbiAgICAgICAgICAgICAgICAgIHt7IGZpbHRlci5kaXNhYmxlVGl0bGVDYXNlID8gdmFsdWUua2V5IDogKHZhbHVlLmtleSB8IHRpdGxlY2FzZSkgfX1cclxuICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI3NvcnRlZFZhbHVlc0J5UHJvcGVydHk+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgdmFsdWUgb2YgKGZpbHRlci5zZWFyY2g/LmZpbHRlcmVkVmFsdWVzID8/IGZpbHRlci52YWx1ZXMpIHwgc29ydFRyYW5zbGF0aW9uc0J5UHJvcGVydHk6J2tleSc6J3ZhbHVlJ1wiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gW2NsYXNzLmhpZGRlbl09XCJmaWx0ZXIuc2VhcmNoPy5zZWFyY2hDcml0ZXJpYSAmJiB2YWx1ZS5pc1NlbGVjdGVkICYmICF2YWx1ZS5tYXRjaGVzU2VhcmNoQ3JpdGVyaWFcIiBjbGFzcz1cImZpbHRlci1vcHRpb25cIiBbZGlzYWJsZWRdPVwiZmlsdGVyLnNpbmdsZVNlbGVjdGlvbj8uc2VsZWN0ZWQgJiYgZmlsdGVyLnNpbmdsZVNlbGVjdGlvbj8udmFsdWUgIT09IHZhbHVlLnZhbHVlXCIgW3ZhbHVlXT1cInZhbHVlXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhZmlsdGVyLmRpc2FibGVUaXRsZUNhc2U7IGVsc2UgZGVmYXVsdENhc2VcIj5cclxuICAgICAgICAgICAgICAgICAgIHt7IHZhbHVlLmtleSB8IHRyYW5zbGF0ZSA6IHsgZGVmYXVsdDogdmFsdWUudmFsdWUgfCB0aXRsZWNhc2UgfSB9fVxyXG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICBcclxuICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0Q2FzZT5cclxuICAgICAgICAgICAgICAgICAgICB7eyB2YWx1ZS5rZXkgfCB0cmFuc2xhdGUgOiB7IGRlZmF1bHQ6IHZhbHVlLnZhbHVlIH0gfX0gXHJcbiAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICA8L2Rpdj5cclxuICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwic3dpdGNoTGVmdCgpXCIgKm5nSWY9XCJmaWx0ZXJPdmVyZmxvd1wiPlxyXG4gICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1pY29ucy1vdXRsaW5lZFwiPlxyXG4gICAgICBhcnJvd19iYWNrX2lvc1xyXG4gICAgPC9zcGFuPlxyXG4gIDwvYnV0dG9uPlxyXG4gIDxidXR0b24gbWF0LWljb24tYnV0dG9uICpuZ0lmPVwiZmlsdGVyT3ZlcmZsb3dcIiAoY2xpY2spPVwic3dpdGNoUmlnaHQoKVwiPlxyXG4gICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1pY29ucy1vdXRsaW5lZFwiPlxyXG4gICAgICBhcnJvd19mb3J3YXJkX2lvc1xyXG4gICAgPC9zcGFuPlxyXG4gIDwvYnV0dG9uPlxyXG48L2Rpdj5cclxuPG1hdC1jaGlwLWxpc3Rib3g+XHJcbiAgPGRpdiAqbmdGb3I9XCJsZXQgZmlsdGVyIG9mIHNldHRpbmdzPy5maWx0ZXJzXCI+XHJcbiAgICA8bWF0LWNoaXAtb3B0aW9uICpuZ0Zvcj1cImxldCBmaWx0ZXJWYWx1ZSBvZiBmaWx0ZXJGb3JtR3JvdXBWYWx1ZVtmaWx0ZXIuZmllbGROYW1lXTsgbGV0IGl4PWluZGV4XCJcclxuICAgICAgKHJlbW92ZWQpPVwicmVtb3ZlRmlsdGVyKGZpbHRlci5maWVsZE5hbWUsIGl4KVwiIGNsYXNzPVwidGV4dC1zXCI+XHJcbiAgICAgIDxidXR0b24gbWF0Q2hpcFJlbW92ZT5cclxuICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJjaGlwLWZpbHRlci10aXRsZVwiPnt7ZmlsdGVyLnRpdGxlIHwgdHJhbnNsYXRlfX06PC9zcGFuPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cImNoaXAtdmFsdWUgc2VtaS1ib2xkXCI+IHt7KGZpbHRlci50cmFuc2xhdGVkID8gZmlsdGVyVmFsdWUua2V5IDogZmlsdGVyVmFsdWUua2V5IHwgdHJhbnNsYXRlIDoge2RlZmF1bHQ6IGZpbHRlclZhbHVlLnZhbHVlfSkgfCB0aXRsZWNhc2VcclxuICAgICAgICB9fTwvc3Bhbj5cclxuICAgIDwvbWF0LWNoaXAtb3B0aW9uPlxyXG4gIDwvZGl2PlxyXG48L21hdC1jaGlwLWxpc3Rib3g+XHJcbiJdfQ==
467
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLWJhci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtY29tbW9uL3NyYy9saWIvZmlsdGVyLWJhci9maWx0ZXItYmFyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1jb21tb24vc3JjL2xpYi9maWx0ZXItYmFyL2ZpbHRlci1iYXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFvQyxTQUFTLEVBQWMsWUFBWSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9LLE9BQU8sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lDS2xELGdDQUFnSDs7SUFDOUcsWUFDRjtJQUFBLGlCQUFPOzs7SUFGZ0UsdUVBQXdDO0lBQzdHLGVBQ0Y7SUFERSxrREFDRjs7O0lBTEEsQUFERiwwQ0FBa0ksZUFDaEY7SUFDOUMsWUFDRjtJQUFBLGlCQUFPO0lBQ1AsNkZBQWdIO0lBR2hILDRCQUMyQzs7SUFDN0MsaUJBQWlCOzs7SUFQYixlQUNGO0lBREUsa0RBQ0Y7SUFDaUQsY0FBb0I7SUFBcEIsNENBQW9CO0lBR2hDLGNBQXVDO0lBQzFFLEFBRG1DLHNFQUF1QyxnREFDbEM7Ozs7SUFhdEMsNkJBQWtEO0lBQ2hELG9DQUE0TTs7SUFBckMsQUFBeEMsb1FBQVMsdUNBQTZCLEtBQUMsdUtBQVksd0JBQXdCLEtBQUM7SUFBM00saUJBQTRNOzs7OztJQUExSSxjQUE0RDtJQUE1RCwrS0FBNEQ7OztJQUs1SCw2QkFBZ0g7SUFDOUcsc0NBQW9QO0lBQ2xQLFlBQ0Y7O0lBQUEsaUJBQWE7Ozs7O0lBRkQsY0FBa0c7SUFBbEcsdUpBQWtHO0lBQXNILEFBQS9GLDZNQUE4RixtQkFB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RUFBbEIsa0JBQWtCOzs7Ozs7OztZQUFsQix5RkFBQSxjQUFVLCtCQUFROztZQ2YvQixtRUFBaUQ7WUFtRWpELHdDQUFrQjtZQUNoQixtRUFBOEM7WUFXaEQsaUJBQW1COztZQS9FTSwyQ0FBc0I7WUFvRXJCLGVBQW9CO1lBQXBCLDRFQUFvQjs7O2lGRHJEakMsa0JBQWtCO2NBTjlCLFNBQVM7MkJBRUUsZ0JBQWdCO2lGQUtFLGFBQWE7a0JBQXhDLFNBQVM7bUJBQUMsZUFBZTtZQUNTLGtCQUFrQjtrQkFBcEQsWUFBWTttQkFBQyxtQkFBbUI7WUFFakMsUUFBUTtrQkFEUCxZQUFZO21CQUFDLGVBQWUsRUFBRSxFQUFFO1lBS3hCLFFBQVE7a0JBQWhCLEtBQUs7WUFDTyxnQkFBZ0I7a0JBQTVCLEtBQUs7WUFNSSxlQUFlO2tCQUF4QixNQUFNOztrRkFmSSxrQkFBa0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIEhvc3RMaXN0ZW5lciwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZCwgVmlld0NoaWxkcmVuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Db250cm9sLCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBGaWx0ZXJCYXJGaWx0ZXIsIEZpbHRlckJhckZpbHRlckl0ZW0gfSBmcm9tICcuL21vZGVscyc7XHJcbmltcG9ydCB7IEZpbHRlckJhckNoYW5nZUV2ZW50IH0gZnJvbSAnLi9tb2RlbHMvZmlsdGVyLWJhci1jaGFuZ2UtZXZlbnQubW9kZWwnO1xyXG5pbXBvcnQgeyBGaWx0ZXJCYXJTZXR0aW5ncyB9IGZyb20gJy4vbW9kZWxzL2ZpbHRlci1iYXItc2V0dGluZ3MubW9kZWwnO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XHJcbmltcG9ydCB7IE1hdFNlbGVjdENoYW5nZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NlbGVjdCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2NvbXBvbmVudC1zZWxlY3RvclxyXG4gIHNlbGVjdG9yOiAndGxkLWZpbHRlci1iYXInLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9maWx0ZXItYmFyLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9maWx0ZXItYmFyLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIEZpbHRlckJhckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcclxuICBAVmlld0NoaWxkKFwiZmlsdGVyV3JhcHBlclwiKSBmaWx0ZXJXcmFwcGVyITogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkcmVuKCdvcHRpb25TZWFyY2hJbnB1dCcpIG9wdGlvblNlYXJjaElucHV0cyE6IEVsZW1lbnRSZWZbXTtcclxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6cmVzaXplJywgW10pXHJcbiAgb25SZXNpemUoKSB7XHJcbiAgICB0aGlzLmNoZWNrT3ZlcmZsb3coKTtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpIHNldHRpbmdzITogRmlsdGVyQmFyU2V0dGluZ3M7XHJcbiAgQElucHV0KCkgc2V0IGZpbHRlclJvd1Zpc2libGUodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX2ZpbHRlclJvd1Zpc2libGUgPSB2YWx1ZTtcclxuICAgIHRoaXMuY2RyZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgdGhpcy5jaGVja092ZXJmbG93KCk7XHJcbiAgfVxyXG5cclxuICBAT3V0cHV0KCkgZmlsdGVyQmFyQ2hhbmdlOiBFdmVudEVtaXR0ZXI8RmlsdGVyQmFyQ2hhbmdlRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxGaWx0ZXJCYXJDaGFuZ2VFdmVudD4oKTtcclxuXHJcbiAgcHJpdmF0ZSBfaW5wdXRUZXh0ID0gXCJcIjtcclxuICBwcml2YXRlIF9maWx0ZXJSb3dWaXNpYmxlITogYm9vbGVhbjtcclxuICBwcml2YXRlIGZvcm1DaGFuZ2VzU3Vic2NyaXB0aW9uITogU3Vic2NyaXB0aW9uO1xyXG5cclxuICAvKiogVG8gaGlkZSBmaWx0ZXJzLCBidXQgbGVhdmUgY2hpcHMgdmlzaWJsZSAqL1xyXG4gIHJlYWRvbmx5IGlucHV0Rm9ybUNvbnRyb2xOYW1lID0gXCJpbnB1dFwiO1xyXG4gIHJlYWRvbmx5IGZpbHRlckZvcm1Hcm91cCA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG4gIHJlYWRvbmx5IGZvcm0gPSBuZXcgRm9ybUdyb3VwKHtcclxuICAgIFt0aGlzLmlucHV0Rm9ybUNvbnRyb2xOYW1lXTogbmV3IEZvcm1Db250cm9sKFwiXCIpLFxyXG4gICAgZmlsdGVyczogdGhpcy5maWx0ZXJGb3JtR3JvdXBcclxuICB9KTtcclxuXHJcbiAgc2VhcmNoVGl0bGUhOiBzdHJpbmc7XHJcbiAgc2VhcmNoVG9vbHRpcCE6IHN0cmluZztcclxuICBzdWZmaXhJY29uITogc3RyaW5nO1xyXG4gIHByZWZpeEljb24hOiBzdHJpbmc7XHJcbiAgc2hvd1N1ZmZpeEljb24hOiBib29sZWFuO1xyXG4gIGZpbHRlcnM6IEZpbHRlckJhckNoYW5nZUV2ZW50ID0ge1xyXG4gICAgZmlsdGVyczoge30sXHJcbiAgICBpbnB1dDogXCJcIlxyXG4gIH07XHJcblxyXG4gIGZpbHRlck92ZXJmbG93ID0gZmFsc2U7XHJcbiAgYWN0aXZlRmlsdGVySW5kZXggPSAwO1xyXG5cclxuICAvLyB3aGVuIHRvIHNob3cgZmlsdGVyIGJ5IG5hbWUgb3IgaWQgb24gbW9iaWxlXHJcbiAgc2VhcmNoSW5kZXggPSAtMTtcclxuXHJcbiAgLy8gZ2V0dGVyIGZvciBjbGVhbmVyIHRlbXBsYXRlIGh0bWxcclxuICBnZXQgZmlsdGVyRm9ybUdyb3VwVmFsdWUoKTogeyBba2V5OiBzdHJpbmddOiBGaWx0ZXJCYXJGaWx0ZXJJdGVtW10gfSB7XHJcbiAgICByZXR1cm4gdGhpcy5maWx0ZXJGb3JtR3JvdXAudmFsdWU7XHJcbiAgfVxyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYWRqYWNlbnQtb3ZlcmxvYWQtc2lnbmF0dXJlc1xyXG4gIGdldCBmaWx0ZXJSb3dWaXNpYmxlKCkgeyByZXR1cm4gdGhpcy5fZmlsdGVyUm93VmlzaWJsZTsgfVxyXG4gIGdldCBpbnB1dFRleHQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5faW5wdXRUZXh0O1xyXG4gIH1cclxuICBnZXQgc2hvd1NlYXJjaCgpIHtcclxuICAgIHJldHVybiAhdGhpcy5zZXR0aW5ncz8uaGlkZVNlYXJjaDtcclxuICB9XHJcbiAgZ2V0IG91dHB1dEZpbHRlcktleUFuZFZhbHVlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuc2V0dGluZ3M/Lm91dHB1dEZpbHRlcktleUFuZFZhbHVlO1xyXG4gIH1cclxuICBnZXQgY3VycmVudEZpbHRlcnMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zZXR0aW5ncz8uc3BsaXR0ZWRGaWx0ZXJzPy5sZW5ndGggPyB0aGlzLnNldHRpbmdzLnNwbGl0dGVkRmlsdGVyc1t0aGlzLmFjdGl2ZUZpbHRlckluZGV4XSA6IHRoaXMuc2V0dGluZ3M/LmZpbHRlcnM7XHJcbiAgfVxyXG5cclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2FkamFjZW50LW92ZXJsb2FkLXNpZ25hdHVyZXNcclxuICBzZXQgaW5wdXRUZXh0KHZhbHVlKSB7XHJcbiAgICB0aGlzLl9pbnB1dFRleHQgPSB2YWx1ZTtcclxuICAgIHRoaXMuZmlsdGVycy5pbnB1dCA9IHRoaXMuX2lucHV0VGV4dDtcclxuICAgIHRoaXMuZW1pdEZpbHRlcnMoKTtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY2RyZWY6IENoYW5nZURldGVjdG9yUmVmLCBwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSkgeyB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5zZXR0aW5ncy5maWx0ZXJzPy5mb3JFYWNoKChmaWVsZCkgPT4ge1xyXG4gICAgICB0aGlzLmZpbHRlckZvcm1Hcm91cC5hZGRDb250cm9sKGZpZWxkLmZpZWxkTmFtZSwgbmV3IEZvcm1Db250cm9sKFtdKSk7XHJcbiAgICB9KVxyXG5cclxuICAgIHRoaXMuc3Vic2NyaWJlVG9Gb3JtVmFsdWVDaGFuZ2VzKCk7XHJcbiAgICB0aGlzLnNlYXJjaFRvb2x0aXAgPSB0aGlzLnNldHRpbmdzPy5zZWFyY2hUb29sdGlwID8/ICdGSUxURVJfQkFSLlNFQVJDSF9UT09MVElQJztcclxuICAgIHRoaXMuc2VhcmNoVGl0bGUgPSB0aGlzLnNldHRpbmdzPy5zZWFyY2hUaXRsZSA/PyAnRklMVEVSX0JBUi5TRUFSQ0gnO1xyXG4gICAgdGhpcy5wcmVmaXhJY29uID0gdGhpcy5zZXR0aW5ncz8ucHJlZml4SWNvbiA/PyBcImZpbHRlcl9hbHRcIjtcclxuICAgIHRoaXMuc3VmZml4SWNvbiA9IHRoaXMuc2V0dGluZ3M/LnN1ZmZpeEljb24gPz8gXCJxdWVzdGlvbl9tYXJrXCI7XHJcbiAgICB0aGlzLnNob3dTdWZmaXhJY29uID0gdGhpcy5zZXR0aW5ncz8uc2hvd1N1ZmZpeEljb24gPz8gdHJ1ZTtcclxuICAgIHRoaXMuYWN0aXZlRmlsdGVySW5kZXggPSB0aGlzLnNob3dTZWFyY2ggPyB0aGlzLnNlYXJjaEluZGV4IDogMDtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuY2hlY2tPdmVyZmxvdygpO1xyXG4gICAgdGhpcy5jZHJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZm9ybUNoYW5nZXNTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIGZvY3VzT3B0aW9uU2VhcmNoSW5wdXQoZmlsdGVyOiBGaWx0ZXJCYXJGaWx0ZXIsIGluZGV4OiBudW1iZXIpOiB2b2lkIHtcclxuICAgIGlmICghZmlsdGVyLnNlYXJjaD8ucGxhY2Vob2xkZXIgfHwgZmlsdGVyLnNlbGVjdGVkVmFsdWVzPy5sZW5ndGgpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMub3B0aW9uU2VhcmNoSW5wdXRzLmZpbmQoKF9pdGVtLCBpKSA9PiBpID09PSBpbmRleCk/Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcclxuXHJcbiAgICBpZiAoZmlsdGVyLm1heFBhbmVsV2lkdGggPT09ICcnICYmIGZpbHRlci5zZWFyY2gucGxhY2Vob2xkZXIpIHtcclxuICAgICAgdGhpcy5zZXRQYW5lbFdpZHRoKGZpbHRlcik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjbGVhck9wdGlvblNlYXJjaElucHV0KGZpbHRlcjogRmlsdGVyQmFyRmlsdGVyLCBpbmRleDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBpZiAoIWZpbHRlci5zZWFyY2g/LnBsYWNlaG9sZGVyKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBpbnB1dCA9IHRoaXMub3B0aW9uU2VhcmNoSW5wdXRzLmZpbmQoKF9pdGVtLCBpKSA9PiBpID09PSBpbmRleCk/Lm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICBpbnB1dC52YWx1ZSA9ICcnO1xyXG4gICAgZmlsdGVyLnNlYXJjaC5zZWFyY2hDcml0ZXJpYSA9ICcnO1xyXG4gICAgdGhpcy5maWx0ZXJPcHRpb25zKG51bGwsIGZpbHRlcik7XHJcbiAgfVxyXG5cclxuICBmaWx0ZXJPcHRpb25zKGV2ZW50OiBLZXlib2FyZEV2ZW50IHwgbnVsbCwgZmlsdGVyOiBGaWx0ZXJCYXJGaWx0ZXIpIHtcclxuICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50Py50YXJnZXQgYXMgSFRNTFRleHRBcmVhRWxlbWVudDtcclxuICAgIGZpbHRlci5zZWFyY2ghLnNlYXJjaENyaXRlcmlhID0gdGFyZ2V0Py52YWx1ZSA/PyAnJztcclxuICAgIHRoaXMuc2V0dGluZ3MuZmlsdGVycz8uZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpZiAoaXRlbS5maWVsZE5hbWUgPT09IGZpbHRlci5maWVsZE5hbWUgJiYgaXRlbS5zZWFyY2gpIHtcclxuICAgICAgICBpdGVtLnNlYXJjaC5maWx0ZXJlZFZhbHVlcyA9IGZpbHRlci52YWx1ZXMuZmlsdGVyKCh2YWx1ZSkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgdmFsdWVLZXkgPSBpdGVtLnRyYW5zbGF0ZWQgPyB2YWx1ZS5rZXkgOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KHZhbHVlLmtleSk7XHJcbiAgICAgICAgICBjb25zdCBtYXRjaGVzU2VhcmNoID0gdmFsdWVLZXkudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0YXJnZXQ/LnZhbHVlPy50b0xvd2VyQ2FzZSgpID8/ICcnKTtcclxuICAgICAgICAgIGNvbnN0IGlzU2VsZWN0ZWQgPSBmaWx0ZXIuc2VsZWN0ZWRWYWx1ZXM/LnNvbWUoKHNlbGVjdGVkVmFsdWUpID0+IHNlbGVjdGVkVmFsdWUua2V5ID09PSB2YWx1ZS5rZXkpO1xyXG4gICAgICAgICAgdmFsdWUuaXNTZWxlY3RlZCA9IGlzU2VsZWN0ZWQgPz8gZmFsc2U7XHJcbiAgICAgICAgICB2YWx1ZS5tYXRjaGVzU2VhcmNoQ3JpdGVyaWEgPSBtYXRjaGVzU2VhcmNoID8/IGZhbHNlO1xyXG4gICAgICAgICAgcmV0dXJuIG1hdGNoZXNTZWFyY2ggfHwgaXNTZWxlY3RlZDtcclxuICAgICAgICB9KVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHNlbGVjdEV2ZW50KGV2ZW50OiBNYXRTZWxlY3RDaGFuZ2UsIGZpbHRlcjogRmlsdGVyQmFyRmlsdGVyKSB7XHJcbiAgICBjb25zdCBzZXR0aW5nRmlsdGVyID0gdGhpcy5zZXR0aW5ncy5maWx0ZXJzPy5maW5kKChpdGVtKSA9PiBpdGVtLmZpZWxkTmFtZSA9PT0gZmlsdGVyLmZpZWxkTmFtZSkgYXMgRmlsdGVyQmFyRmlsdGVyO1xyXG4gICAgc2V0dGluZ0ZpbHRlci5zZWxlY3RlZFZhbHVlcyA9IGV2ZW50LnZhbHVlO1xyXG4gIH1cclxuXHJcbiAgc2V0UGFuZWxXaWR0aChmaWx0ZXI6IEZpbHRlckJhckZpbHRlcik6IHZvaWQge1xyXG4gICAgLy8gV2UgbXVzdCBzYXZlIHBhbmVsIHdpZHRoLCBzbyBmaWx0ZXJpbmcgZG9lcyBub3QgYWZmZWN0IGl0YHMgc2l6ZS5cclxuICAgIGNvbnN0IHNlbGVjdFBhbmVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmNkay1vdmVybGF5LXBhbmUnKSBhcyBIVE1MRWxlbWVudDtcclxuICAgIGNvbnN0IHNlbGVjdFBhbmVsV2lkdGggPSBzZWxlY3RQYW5lbC5jbGllbnRXaWR0aCBhcyBudW1iZXI7XHJcbiAgICBjb25zdCBmaWx0ZXJPYmogPSB0aGlzLnNldHRpbmdzLmZpbHRlcnM/LmZpbmQoKGl0ZW0pID0+IGl0ZW0uZmllbGROYW1lID09PSBmaWx0ZXIuZmllbGROYW1lKSBhcyBGaWx0ZXJCYXJGaWx0ZXI7XHJcbiAgICBmaWx0ZXJPYmoubWF4UGFuZWxXaWR0aCA9IHNlbGVjdFBhbmVsV2lkdGg7XHJcbiAgICBzZWxlY3RQYW5lbC5zdHlsZS5taW5XaWR0aCA9IGAke3NlbGVjdFBhbmVsV2lkdGh9cHhgO1xyXG4gIH1cclxuXHJcbiAgZW1pdEZpbHRlcnMoKSB7XHJcbiAgICB0aGlzLmZpbHRlckJhckNoYW5nZS5uZXh0KHRoaXMuZmlsdGVycyk7XHJcbiAgfVxyXG5cclxuICBzd2l0Y2hSaWdodCgpIHtcclxuICAgIGlmICh0aGlzLnNldHRpbmdzPy5zcGxpdHRlZEZpbHRlcnM/Lmxlbmd0aCA9PT0gdGhpcy5hY3RpdmVGaWx0ZXJJbmRleCArIDEpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5hY3RpdmVGaWx0ZXJJbmRleCArPSAxO1xyXG4gIH1cclxuXHJcbiAgc3dpdGNoTGVmdCgpIHtcclxuICAgIGlmICh0aGlzLmFjdGl2ZUZpbHRlckluZGV4ID09PSB0aGlzLnNlYXJjaEluZGV4IHx8ICF0aGlzLnNob3dTZWFyY2ggJiYgdGhpcy5hY3RpdmVGaWx0ZXJJbmRleCA9PT0gMCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLmFjdGl2ZUZpbHRlckluZGV4IC09IDE7XHJcbiAgfVxyXG5cclxuICByZW1vdmVGaWx0ZXIoa2V5OiBzdHJpbmcsIGl4OiBudW1iZXIpIHtcclxuICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmZpbHRlckZvcm1Hcm91cC5nZXQoa2V5KTtcclxuXHJcbiAgICBpZiAoIWNvbnRyb2wpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IG5ld0FycmF5ID0gY29udHJvbC52YWx1ZSBhcyBbXTtcclxuICAgIG5ld0FycmF5LnNwbGljZShpeCwgMSk7XHJcbiAgICBjb250cm9sLnNldFZhbHVlKG5ld0FycmF5KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2hlY2tPdmVyZmxvdygpIHtcclxuICAgIGlmICh0aGlzLmZpbHRlcldyYXBwZXI/Lm5hdGl2ZUVsZW1lbnQpIHtcclxuICAgICAgY29uc3QgbWluRmlsdGVyV2lkdGggPSAxMDA7XHJcbiAgICAgIGNvbnN0IHNlYXJjaEZpbHRlcldpZHRoID0gMTUwO1xyXG4gIFxyXG4gICAgICBpZiAodGhpcy5zZXR0aW5ncz8uZmlsdGVycz8ubGVuZ3RoKSB7XHJcbiAgICAgICAgY29uc3QgY29udGFpbmVyV2lkdGggPSB0aGlzLmZpbHRlcldyYXBwZXIubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aDtcclxuICBcclxuICAgICAgICAvLyBDYWxjdWxhdGUgdGhlIHRvdGFsIHdpZHRoIG5lZWRlZCBmb3IgYWxsIGZpbHRlcnNcclxuICAgICAgICBjb25zdCB0b3RhbFdpZHRoTmVlZGVkID0gdGhpcy5zZXR0aW5ncy5maWx0ZXJzLmxlbmd0aCAqIG1pbkZpbHRlcldpZHRoICsgKHRoaXMuc2hvd1NlYXJjaCA/IHNlYXJjaEZpbHRlcldpZHRoIDogMCk7XHJcbiAgXHJcbiAgICAgICAgLy8gSWYgYWxsIGZpbHRlcnMgY2FuIGZpdCB3aXRoaW4gdGhlIGNvbnRhaW5lciwgbm8gbmVlZCB0byBzcGxpdFxyXG4gICAgICAgIGlmICh0b3RhbFdpZHRoTmVlZGVkIDw9IGNvbnRhaW5lcldpZHRoKSB7XHJcbiAgICAgICAgICB0aGlzLmFjdGl2ZUZpbHRlckluZGV4ID0gdGhpcy5zaG93U2VhcmNoID8gdGhpcy5zZWFyY2hJbmRleCA6IDA7XHJcbiAgICAgICAgICB0aGlzLnNldHRpbmdzLnNwbGl0dGVkRmlsdGVycyA9IFtdO1xyXG4gICAgICAgICAgdGhpcy5maWx0ZXJPdmVyZmxvdyA9IGZhbHNlO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICBcclxuICAgICAgICAvLyBDYWxjdWxhdGUgaG93IG1hbnkgZmlsdGVycyBjYW4gZml0IHBlciByb3cgYmFzZWQgb24gdGhlIGNvbnRhaW5lciB3aWR0aFxyXG4gICAgICAgIGNvbnN0IGZpbHRlcnNQZXJSb3cgPSBNYXRoLmZsb29yKGNvbnRhaW5lcldpZHRoIC8gbWluRmlsdGVyV2lkdGgpO1xyXG4gIFxyXG4gICAgICAgIC8vIERldGVybWluZSBob3cgbWFueSBncm91cHMgYXJlIG5lZWRlZFxyXG4gICAgICAgIGNvbnN0IGdyb3VwQ291bnQgPSBNYXRoLmNlaWwodGhpcy5zZXR0aW5ncy5maWx0ZXJzLmxlbmd0aCAvIGZpbHRlcnNQZXJSb3cpO1xyXG5cclxuICAgICAgICBpZiAoKGdyb3VwQ291bnQgKyAodGhpcy5zaG93U2VhcmNoID8gMSA6IDApKSA8IHRoaXMuYWN0aXZlRmlsdGVySW5kZXggKyAxKSB7XHJcbiAgICAgICAgICB0aGlzLmFjdGl2ZUZpbHRlckluZGV4ID0gdGhpcy5zaG93U2VhcmNoID8gdGhpcy5zZWFyY2hJbmRleCA6IDA7XHJcbiAgICAgICAgfVxyXG4gIFxyXG4gICAgICAgIC8vIENhbGN1bGF0ZSBncm91cCBzaXplIGJhc2VkIG9uIHRoZSBudW1iZXIgb2YgZ3JvdXBzXHJcbiAgICAgICAgY29uc3QgZ3JvdXBTaXplID0gTWF0aC5jZWlsKHRoaXMuc2V0dGluZ3MuZmlsdGVycy5sZW5ndGggLyBncm91cENvdW50KTtcclxuICBcclxuICAgICAgICAvLyBTcGxpdCBmaWx0ZXJzIGludG8gdGhlIGNhbGN1bGF0ZWQgbnVtYmVyIG9mIGdyb3Vwc1xyXG4gICAgICAgIGNvbnN0IG5ld1NwbGl0dGVkRmlsdGVyczogRmlsdGVyQmFyRmlsdGVyW11bXSA9IFtdO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5zZXR0aW5ncy5maWx0ZXJzLmxlbmd0aDsgaSArPSBncm91cFNpemUpIHtcclxuICAgICAgICAgIG5ld1NwbGl0dGVkRmlsdGVycy5wdXNoKHRoaXMuc2V0dGluZ3MuZmlsdGVycy5zbGljZShpLCBpICsgZ3JvdXBTaXplKSk7XHJcbiAgICAgICAgfVxyXG4gIFxyXG4gICAgICAgIHRoaXMuc2V0dGluZ3Muc3BsaXR0ZWRGaWx0ZXJzID0gbmV3U3BsaXR0ZWRGaWx0ZXJzO1xyXG4gICAgICAgIHRoaXMuZmlsdGVyT3ZlcmZsb3cgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIFxyXG4gIHByaXZhdGUgc3Vic2NyaWJlVG9Gb3JtVmFsdWVDaGFuZ2VzKCkge1xyXG4gICAgdGhpcy5mb3JtQ2hhbmdlc1N1YnNjcmlwdGlvbiA9IHRoaXMuZm9ybS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgdGhpcy5maWx0ZXJzID0ge1xyXG4gICAgICAgIGlucHV0OiB0aGlzLmZvcm0udmFsdWUuaW5wdXQgPz8gXCJcIixcclxuICAgICAgICBmaWx0ZXJzOiB7fVxyXG4gICAgICB9O1xyXG5cclxuICAgICAgZm9yIChjb25zdCBmaWx0ZXJLZXkgaW4gdGhpcy5mb3JtLnZhbHVlLmZpbHRlcnMpIHtcclxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gICAgICAgIGNvbnN0IGZpbHRlcjogRmlsdGVyQmFyRmlsdGVySXRlbVtdID0gKHRoaXMuZm9ybS52YWx1ZS5maWx0ZXJzIGFzIGFueSlbZmlsdGVyS2V5XSBhcyBGaWx0ZXJCYXJGaWx0ZXJJdGVtW107XHJcbiAgICAgICAgdGhpcy5maWx0ZXJzLmZpbHRlcnNbZmlsdGVyS2V5XSA9IGZpbHRlci5tYXAoKGl0ZW0pID0+IHRoaXMub3V0cHV0RmlsdGVyS2V5QW5kVmFsdWUgPyBpdGVtIDogaXRlbS52YWx1ZSlcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmVtaXRGaWx0ZXJzKCk7XHJcbiAgICB9KVxyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiZmlsdGVyLXJvd1wiICpuZ0lmPVwiZmlsdGVyUm93VmlzaWJsZVwiPlxyXG4gIDxkaXYgZnhMYXlvdXQ9XCJyb3dcIiBjbGFzcz1cImZpbHRlci13cmFwcGVyXCIgI2ZpbHRlcldyYXBwZXIgW2Zvcm1Hcm91cF09XCJmb3JtXCI+XHJcbiAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4ICpuZ0lmPVwic2hvd1NlYXJjaCAmJiAhZmlsdGVyT3ZlcmZsb3cgfHwgYWN0aXZlRmlsdGVySW5kZXggPT09IHNlYXJjaEluZGV4XCIgY2xhc3M9XCJmaWx0ZXItYmFyLXNlYXJjaC1pbnB1dFwiPlxyXG4gICAgICA8c3BhbiBtYXRQcmVmaXggY2xhc3M9XCJtYXRlcmlhbC1pY29ucy1vdXRsaW5lZFwiPlxyXG4gICAgICAgIHt7cHJlZml4SWNvbn19XHJcbiAgICAgIDwvc3Bhbj5cclxuICAgICAgPHNwYW4gbWF0U3VmZml4IGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWRcIiAqbmdJZj1cInNob3dTdWZmaXhJY29uXCIgW21hdFRvb2x0aXBdPVwic2VhcmNoVG9vbHRpcCB8IHRyYW5zbGF0ZVwiPlxyXG4gICAgICAgIHt7c3VmZml4SWNvbn19XHJcbiAgICAgIDwvc3Bhbj5cclxuICAgICAgPGlucHV0IGNsYXNzPVwic2VhcmNoLWlucHV0XCIgbWF0SW5wdXQgW3BsYWNlaG9sZGVyXT1cInNlYXJjaFRpdGxlIHwgdHJhbnNsYXRlXCJcclxuICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImlucHV0Rm9ybUNvbnRyb2xOYW1lXCI+XHJcbiAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgPG5nLWNvbnRhaW5lciBbZm9ybUdyb3VwXT1cImZpbHRlckZvcm1Hcm91cFwiPlxyXG5cclxuICAgICAgPG1hdC1mb3JtLWZpZWxkICpuZ0Zvcj1cImxldCBmaWx0ZXIgb2YgY3VycmVudEZpbHRlcnM7IGxldCBpID0gaW5kZXhcIj5cclxuICAgICAgICA8bWF0LWxhYmVsPnt7ZmlsdGVyLnRpdGxlIHwgdHJhbnNsYXRlfX08L21hdC1sYWJlbD5cclxuICAgICAgICA8bWF0LXNlbGVjdCBcclxuICAgICAgICAgIG11bHRpcGxlIFxyXG4gICAgICAgICAgW3BhbmVsV2lkdGhdPVwiZmlsdGVyPy5tYXhQYW5lbFdpZHRoID8/ICdhdXRvJ1wiIFxyXG4gICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJmaWx0ZXIuZmllbGROYW1lXCIgXHJcbiAgICAgICAgICAob3BlbmVkQ2hhbmdlKT1cIiRldmVudCA9PT0gdHJ1ZSA/IGZvY3VzT3B0aW9uU2VhcmNoSW5wdXQoZmlsdGVyLCBpKSA6IGNsZWFyT3B0aW9uU2VhcmNoSW5wdXQoZmlsdGVyLCBpKVwiXHJcbiAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cInNlbGVjdEV2ZW50KCRldmVudCwgZmlsdGVyKVwiIFxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmaWx0ZXI/LnNlYXJjaD8ucGxhY2Vob2xkZXJcIj5cclxuICAgICAgICAgICAgPGlucHV0ICNvcHRpb25TZWFyY2hJbnB1dCBjbGFzcz1cIm9wdGlvbi1zZWFyY2gtaW5wdXRcIiB0eXBlPVwidGV4dFwiIFtwbGFjZWhvbGRlcl09XCJmaWx0ZXIuc2VhcmNoPy5wbGFjZWhvbGRlciA/PyAnJyB8IHRyYW5zbGF0ZVwiIChrZXl1cCk9XCJmaWx0ZXJPcHRpb25zKCRldmVudCwgZmlsdGVyKVwiIChrZXlkb3duKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgIFxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZpbHRlci52YWx1ZXMubGVuZ3RoXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmaWx0ZXIudHJhbnNsYXRlZDsgZWxzZSBzb3J0ZWRWYWx1ZXNCeVByb3BlcnR5XCI+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgdmFsdWUgb2YgKGZpbHRlci5zZWFyY2g/LmZpbHRlcmVkVmFsdWVzID8/IGZpbHRlci52YWx1ZXMpIHwgc29ydEFscGhhYmV0aWNhbGx5OidrZXknXCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBbY2xhc3MuaGlkZGVuXT1cImZpbHRlci5zZWFyY2g/LnNlYXJjaENyaXRlcmlhICYmIHZhbHVlLmlzU2VsZWN0ZWQgJiYgIXZhbHVlLm1hdGNoZXNTZWFyY2hDcml0ZXJpYVwiIGNsYXNzPVwiZmlsdGVyLW9wdGlvblwiIFtkaXNhYmxlZF09XCJmaWx0ZXIuc2luZ2xlU2VsZWN0aW9uPy5zZWxlY3RlZCAmJiBmaWx0ZXIuc2luZ2xlU2VsZWN0aW9uPy52YWx1ZSAhPT0gdmFsdWUudmFsdWVcIiBbdmFsdWVdPVwidmFsdWVcIj5cclxuICAgICAgICAgICAgICAgICAge3sgZmlsdGVyLmRpc2FibGVUaXRsZUNhc2UgPyB2YWx1ZS5rZXkgOiAodmFsdWUua2V5IHwgdGl0bGVjYXNlKSB9fVxyXG4gICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjc29ydGVkVmFsdWVzQnlQcm9wZXJ0eT5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCB2YWx1ZSBvZiAoZmlsdGVyLnNlYXJjaD8uZmlsdGVyZWRWYWx1ZXMgPz8gZmlsdGVyLnZhbHVlcykgfCBzb3J0VHJhbnNsYXRpb25zQnlQcm9wZXJ0eTona2V5JzondmFsdWUnXCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBbY2xhc3MuaGlkZGVuXT1cImZpbHRlci5zZWFyY2g/LnNlYXJjaENyaXRlcmlhICYmIHZhbHVlLmlzU2VsZWN0ZWQgJiYgIXZhbHVlLm1hdGNoZXNTZWFyY2hDcml0ZXJpYVwiIGNsYXNzPVwiZmlsdGVyLW9wdGlvblwiIFtkaXNhYmxlZF09XCJmaWx0ZXIuc2luZ2xlU2VsZWN0aW9uPy5zZWxlY3RlZCAmJiBmaWx0ZXIuc2luZ2xlU2VsZWN0aW9uPy52YWx1ZSAhPT0gdmFsdWUudmFsdWVcIiBbdmFsdWVdPVwidmFsdWVcIj5cclxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFmaWx0ZXIuZGlzYWJsZVRpdGxlQ2FzZTsgZWxzZSBkZWZhdWx0Q2FzZVwiPlxyXG4gICAgICAgICAgICAgICAgICAge3sgdmFsdWUua2V5IHwgdHJhbnNsYXRlIDogeyBkZWZhdWx0OiB2YWx1ZS52YWx1ZSB8IHRpdGxlY2FzZSB9IH19XHJcbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gIFxyXG4gICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRDYXNlPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IHZhbHVlLmtleSB8IHRyYW5zbGF0ZSA6IHsgZGVmYXVsdDogdmFsdWUudmFsdWUgfSB9fSBcclxuICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gIDwvZGl2PlxyXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJmaWx0ZXJPdmVyZmxvd1wiPlxyXG4gICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cInN3aXRjaExlZnQoKVwiPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLWljb25zLW91dGxpbmVkXCI+XHJcbiAgICAgICAgYXJyb3dfYmFja19pb3NcclxuICAgICAgPC9zcGFuPlxyXG4gICAgPC9idXR0b24+XHJcbiAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwic3dpdGNoUmlnaHQoKVwiPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLWljb25zLW91dGxpbmVkXCI+XHJcbiAgICAgICAgYXJyb3dfZm9yd2FyZF9pb3NcclxuICAgICAgPC9zcGFuPlxyXG4gICAgPC9idXR0b24+XHJcbiAgPC9uZy1jb250YWluZXI+XHJcbjwvZGl2PlxyXG48bWF0LWNoaXAtbGlzdGJveD5cclxuICA8ZGl2ICpuZ0Zvcj1cImxldCBmaWx0ZXIgb2Ygc2V0dGluZ3M/LmZpbHRlcnNcIj5cclxuICAgIDxtYXQtY2hpcC1vcHRpb24gKm5nRm9yPVwibGV0IGZpbHRlclZhbHVlIG9mIGZpbHRlckZvcm1Hcm91cFZhbHVlW2ZpbHRlci5maWVsZE5hbWVdOyBsZXQgaXg9aW5kZXhcIlxyXG4gICAgICAocmVtb3ZlZCk9XCJyZW1vdmVGaWx0ZXIoZmlsdGVyLmZpZWxkTmFtZSwgaXgpXCIgY2xhc3M9XCJ0ZXh0LXNcIj5cclxuICAgICAgPGJ1dHRvbiBtYXRDaGlwUmVtb3ZlPlxyXG4gICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cImNoaXAtZmlsdGVyLXRpdGxlXCI+e3tmaWx0ZXIudGl0bGUgfCB0cmFuc2xhdGV9fTo8L3NwYW4+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwiY2hpcC12YWx1ZSBzZW1pLWJvbGRcIj4ge3soZmlsdGVyLnRyYW5zbGF0ZWQgPyBmaWx0ZXJWYWx1ZS5rZXkgOiBmaWx0ZXJWYWx1ZS5rZXkgfCB0cmFuc2xhdGUgOiB7ZGVmYXVsdDogZmlsdGVyVmFsdWUudmFsdWV9KSB8IHRpdGxlY2FzZVxyXG4gICAgICAgIH19PC9zcGFuPlxyXG4gICAgPC9tYXQtY2hpcC1vcHRpb24+XHJcbiAgPC9kaXY+XHJcbjwvbWF0LWNoaXAtbGlzdGJveD5cclxuIl19
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLWJhci1zZXR0aW5ncy5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1jb21tb24vc3JjL2xpYi9maWx0ZXItYmFyL21vZGVscy9maWx0ZXItYmFyLXNldHRpbmdzLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGaWx0ZXJCYXJGaWx0ZXIgfSBmcm9tIFwiLi9maWx0ZXItYmFyLWZpbHRlci5tb2RlbFwiO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBGaWx0ZXJCYXJTZXR0aW5ncyB7XHJcbiAgLyoqIFNob3cvaGlkZSBzZWFyY2ggaW5wdXQuIEVuYWJsZWQgYnkgZGVmYXVsdC4gKi9cclxuICBoaWRlU2VhcmNoPzogYm9vbGVhbjtcclxuICAvKiogVG9nZ2xlIG91dHB1dCBmaWx0ZXIgaXRlbSBiZXR3ZWVuIHZhbHVlLCBhbmQgb2JqZWN0IHdpdGgga2V5IGFuZCB2YWx1ZSBmaWVsZHMuIFZhbHVlIGJ5IGRlZmF1bHQuICovXHJcbiAgb3V0cHV0RmlsdGVyS2V5QW5kVmFsdWU/OiBib29sZWFuO1xyXG4gIC8qKlxyXG4gICAqIFRpdGxlIGZvciBzZWFyY2ggaW5wdXQgZmllbGQuIERlZmF1bHQgdmFsdWU6IEZJTFRFUl9CQVIuU0VBUkNIXHJcbiAgKi9cclxuICBzZWFyY2hUaXRsZT86IHN0cmluZztcclxuICAvKipcclxuICAgKiBTZWFyY2ggdG9vbHRpcCwgc2hvd24gYWZ0ZXIgaW5wdXQgZmllbGQgZm9yIGljb25cclxuICAgKi9cclxuICBzZWFyY2hUb29sdGlwPzogc3RyaW5nO1xyXG4gIC8qKiBQcmVmaXggaWNvbiBmcm9tIG1hdGVyaWFsIGljb25zLiAqL1xyXG4gIHByZWZpeEljb24/OiBzdHJpbmc7XHJcbiAgLyoqIFN1ZmZpeCBpY29uIGZyb20gbWF0ZXJpYWwgaWNvbnMuICovXHJcbiAgc3VmZml4SWNvbj86IHN0cmluZztcclxuICBzaG93U3VmZml4SWNvbj86IGJvb2xlYW47XHJcbiAgXHJcbiAgZmlsdGVycz86IEZpbHRlckJhckZpbHRlcltdO1xyXG59XHJcbiJdfQ==
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLWJhci1zZXR0aW5ncy5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1jb21tb24vc3JjL2xpYi9maWx0ZXItYmFyL21vZGVscy9maWx0ZXItYmFyLXNldHRpbmdzLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGaWx0ZXJCYXJGaWx0ZXIgfSBmcm9tIFwiLi9maWx0ZXItYmFyLWZpbHRlci5tb2RlbFwiO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBGaWx0ZXJCYXJTZXR0aW5ncyB7XHJcbiAgLyoqIFNob3cvaGlkZSBzZWFyY2ggaW5wdXQuIEVuYWJsZWQgYnkgZGVmYXVsdC4gKi9cclxuICBoaWRlU2VhcmNoPzogYm9vbGVhbjtcclxuICAvKiogVG9nZ2xlIG91dHB1dCBmaWx0ZXIgaXRlbSBiZXR3ZWVuIHZhbHVlLCBhbmQgb2JqZWN0IHdpdGgga2V5IGFuZCB2YWx1ZSBmaWVsZHMuIFZhbHVlIGJ5IGRlZmF1bHQuICovXHJcbiAgb3V0cHV0RmlsdGVyS2V5QW5kVmFsdWU/OiBib29sZWFuO1xyXG4gIC8qKlxyXG4gICAqIFRpdGxlIGZvciBzZWFyY2ggaW5wdXQgZmllbGQuIERlZmF1bHQgdmFsdWU6IEZJTFRFUl9CQVIuU0VBUkNIXHJcbiAgKi9cclxuICBzZWFyY2hUaXRsZT86IHN0cmluZztcclxuICAvKipcclxuICAgKiBTZWFyY2ggdG9vbHRpcCwgc2hvd24gYWZ0ZXIgaW5wdXQgZmllbGQgZm9yIGljb25cclxuICAgKi9cclxuICBzZWFyY2hUb29sdGlwPzogc3RyaW5nO1xyXG4gIC8qKiBQcmVmaXggaWNvbiBmcm9tIG1hdGVyaWFsIGljb25zLiAqL1xyXG4gIHByZWZpeEljb24/OiBzdHJpbmc7XHJcbiAgLyoqIFN1ZmZpeCBpY29uIGZyb20gbWF0ZXJpYWwgaWNvbnMuICovXHJcbiAgc3VmZml4SWNvbj86IHN0cmluZztcclxuICBzaG93U3VmZml4SWNvbj86IGJvb2xlYW47XHJcbiAgXHJcbiAgZmlsdGVycz86IEZpbHRlckJhckZpbHRlcltdO1xyXG4gIHNwbGl0dGVkRmlsdGVycz86IEZpbHRlckJhckZpbHRlcltdW107XHJcbn1cclxuIl19